diff --git a/_maps/broken/roguehamlet.dm b/_maps/broken/roguehamlet.dm deleted file mode 100644 index eb089700bf..0000000000 --- a/_maps/broken/roguehamlet.dm +++ /dev/null @@ -1 +0,0 @@ -#define FORCE_MAP "_maps/roguehamlet.json" \ No newline at end of file diff --git a/_maps/broken/roguehamlet.json b/_maps/broken/roguehamlet.json deleted file mode 100644 index 32f7a2643e..0000000000 --- a/_maps/broken/roguehamlet.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "map_name": "Roguehamlet", - "map_path": "roguehamlet", - "map_file": "roguehamlet.dmm", - "traits": [{"Up": 1}, {"Up": 1, "Down": -1}, {"Up": 1, "Down": -1}, {"Up": 1, "Down": -1}, {"Down": -1}], - "minetype": null, - "space_empty_levels": 0, - "space_ruin_levels": 0, - "shuttles": { - "cargo": "cargo_rogue", - "ferry": "ferry_fancy", - "whiteship": "whiteship_box", - "emergency": "emergency_rogue" - } -} diff --git a/_maps/custom/roguehamlet.dmm b/_maps/custom/roguehamlet.dmm index 863fb8d9b8..769dbb877d 100644 --- a/_maps/custom/roguehamlet.dmm +++ b/_maps/custom/roguehamlet.dmm @@ -46,12 +46,12 @@ /turf/closed/wall/mineral/rogue/decostone/fluffstone, /area/rogue/outdoors/town/roofs) "acA" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/wood/nosmooth, /area/rogue/indoors/town) "ada" = ( /obj/structure/flora/roguegrass/thorn_bush, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/grass, @@ -249,7 +249,7 @@ }, /area/rogue/outdoors/town/roofs) "ary" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/mineral_door/bars{ @@ -286,17 +286,17 @@ /obj/item/reagent_containers/food/snacks/produce/apple, /obj/item/reagent_containers/food/snacks/produce/apple, /obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, +/obj/item/reagent_containers/food/snacks/produce/jacksberry, +/obj/item/reagent_containers/food/snacks/produce/jacksberry, +/obj/item/reagent_containers/food/snacks/produce/jacksberry, +/obj/item/reagent_containers/food/snacks/produce/jacksberry, +/obj/item/reagent_containers/food/snacks/produce/jacksberry, +/obj/item/reagent_containers/food/snacks/produce/jacksberry, /obj/structure/closet/crate/chest/wicker, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/exposed/under/basement) "asF" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -330,7 +330,7 @@ first_time_text = "Blackwine Manor" }) "auJ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/concrete, @@ -369,7 +369,7 @@ /turf/open/floor/rogue/ruinedwood/chevron, /area/rogue/indoors/town/church/chapel) "awl" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/hexstone, @@ -393,7 +393,7 @@ "awU" = ( /obj/structure/closet/crate/chest/wicker, /obj/item/storage/belt/rogue/pouch/coins/poor, -/obj/item/rogueweapon/huntingknife/stoneknife, +/obj/item/rogueweapon/knife/stone, /obj/item/reagent_containers/food/snacks/rogue/crackerscooked, /turf/open/floor/rogue/naturalstone, /area/rogue/under/town/sewer) @@ -479,7 +479,7 @@ }, /obj/item/paper/scroll/cargo, /obj/structure/roguemachine/camera/right, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/cobblerock, @@ -531,7 +531,7 @@ pixel_x = -11; pixel_y = 10 }, -/obj/item/rogueweapon/huntingknife/idagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, /turf/open/floor/rogue/tile{ icon_state = "chess" }, @@ -542,7 +542,7 @@ }, /area/rogue/indoors/town/bath/redhouse) "aFF" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/effect/decal/cleanable/greenglow, @@ -582,7 +582,7 @@ }) "aHC" = ( /obj/structure/displaycase, -/obj/item/rogueweapon/sword/rapier/lord, +/obj/item/rogueweapon/sword/sabre/lord, /turf/open/floor/carpet/purple, /area/rogue/indoors/town/vault) "aHN" = ( @@ -662,7 +662,7 @@ /turf/open/floor/rogue/wood/nosmooth, /area/rogue/indoors/town/shop) "aMR" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/tile/kitchen, @@ -675,7 +675,7 @@ "aNH" = ( /obj/structure/flora/roguegrass/thorn_bush, /obj/structure/flora/roguegrass/bush/wall/tall, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/grass, @@ -718,7 +718,7 @@ /obj/structure/table/wood/large/corner_new{ dir = 10 }, -/obj/item/rogueweapon/huntingknife{ +/obj/item/rogueweapon/knife/hunting{ pixel_y = 9 }, /turf/open/floor/rogue/cobble, @@ -748,7 +748,7 @@ name = "vulf cave" }) "aTI" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/concrete, @@ -778,7 +778,7 @@ /obj/item/grown/log/tree/small, /obj/item/grown/log/tree/small, /obj/item/grown/log/tree/small, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/cobblerock, @@ -905,10 +905,10 @@ /area/rogue/indoors/town/garrison) "baL" = ( /obj/structure/mineral_door/bars, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -945,7 +945,7 @@ /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/cell) "bbH" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -1032,7 +1032,7 @@ name = "plague district" }) "beb" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/dirt/road, @@ -1264,7 +1264,7 @@ /turf/open/transparent/openspace, /area/rogue/indoors/town) "buA" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/flora/roguegrass, @@ -1282,7 +1282,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) "bvE" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -1355,7 +1355,7 @@ }) "bzx" = ( /obj/structure/fluff/statue/small, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/carpet, @@ -1401,7 +1401,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/tavern/saiga) "bCh" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -1502,7 +1502,7 @@ /turf/open/transparent/openspace, /area/rogue/indoors/town/church/chapel) "bJm" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -1598,7 +1598,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/shelter/mountains) "bOo" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/tile/kitchen, @@ -1758,7 +1758,7 @@ dir = 1; icon_state = "longtable" }, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/tile/checker, /area/rogue/indoors/town/manor{ first_time_text = "Blackwine Manor" @@ -1785,7 +1785,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/shop) "bVR" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt, @@ -1801,7 +1801,7 @@ /obj/machinery/light/roguestreet/midlamp{ plane = -1 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/hexstone, @@ -1845,7 +1845,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/exposed/church) "bXK" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/twig, /area/rogue/indoors/shelter/bog) "bXT" = ( @@ -1997,14 +1997,14 @@ "cio" = ( /obj/structure/flora/roguegrass, /obj/structure/fluff/statue/pillar, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/exposed/town) "ciJ" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/grass, /area/rogue/outdoors/rtfield{ ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); @@ -2095,7 +2095,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "cpa" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/structure/fluff/statue/gargoyle, /turf/open/floor/rogue/grass, /area/rogue/outdoors/exposed/manorgarri) @@ -2122,7 +2122,7 @@ /obj/item/reagent_containers/glass/cup/wooden, /obj/item/reagent_containers/glass/bottle/rogue/beer/hagwoodbitter, /obj/item/reagent_containers/glass/bottle/rogue/beer/blackgoat, -/obj/item/kitchen/rollingpin, +/obj/item/rogueweapon/mace/woodclub/rollingpin, /turf/open/floor/rogue/twig, /area/rogue/indoors) "cqW" = ( @@ -2188,7 +2188,7 @@ /turf/open/floor/rogue/twig, /area/rogue/indoors/town/shop) "cwL" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/fluff/walldeco/innsign/saiga, @@ -2208,7 +2208,7 @@ /area/rogue/outdoors/exposed/manorgarri) "cxi" = ( /obj/effect/spawner/roguemap/tree, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/grass, @@ -2247,7 +2247,7 @@ first_time_text = "SCREAMING MOUNTAIN MINESHAFT" }) "czi" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/carpet, @@ -2287,7 +2287,7 @@ /turf/open/floor/rogue/woodturned/nosmooth, /area/rogue/indoors/shelter/town/dwarf) "cCk" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -2295,7 +2295,7 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) "cCn" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -2320,7 +2320,7 @@ /turf/closed/wall/mineral/rogue/wooddark/window, /area/rogue/outdoors/exposed/under/basement) "cCJ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/fluff/walldeco/chains, @@ -2403,16 +2403,16 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/under/town/sewer) "cHD" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/exposed/under/basement) "cHZ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/closet/crate/chest/crate, @@ -2456,7 +2456,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "cKt" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/cobble/mossy, @@ -2470,7 +2470,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/cell) "cLh" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/woodturned/nosmooth, /area/rogue/indoors/town/shop) "cLS" = ( @@ -2511,9 +2511,9 @@ /area/rogue/indoors/town/church/chapel) "cOe" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/spear, -/obj/item/rogueweapon/spear, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, +/obj/item/rogueweapon/polearm/spear, +/obj/item/rogueweapon/polearm/spear, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/garrison) "cOl" = ( @@ -2526,7 +2526,7 @@ first_time_text = "Blackwine Manor" }) "cPt" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/machinery/light/rogue/firebowl/stump, @@ -2580,7 +2580,7 @@ "cSd" = ( /obj/structure/table/vtable, /obj/structure/mirror/alt, -/obj/item/rogueweapon/huntingknife/idagger/steel{ +/obj/item/rogueweapon/knife/dagger/steel{ pixel_x = 10; pixel_y = 6 }, @@ -2664,9 +2664,6 @@ /area/rogue/under/town/basement) "daD" = ( /obj/structure/table/wood, -/obj/item/roguekey/lord{ - pixel_x = 5 - }, /obj/item/reagent_containers/glass/cup/golden{ pixel_x = -6; pixel_y = 3 @@ -2792,7 +2789,7 @@ }, /area/rogue/indoors/town) "dir" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/tile/kitchen, @@ -2882,10 +2879,10 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/exposed/manorgarri) "dqx" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt, @@ -2918,7 +2915,7 @@ /turf/open/floor/rogue/tile/masonic/single, /area/rogue/indoors/town/magician) "drL" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -2980,7 +2977,7 @@ /area/rogue/indoors/town) "dty" = ( /obj/structure/flora/rock/pile, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/grass, @@ -3072,14 +3069,14 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "dxL" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "dxW" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, @@ -3192,7 +3189,7 @@ /turf/open/floor/rogue/tile, /area/rogue/indoors/town/garrison) "dEz" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/fluff/railing/border{ @@ -3234,7 +3231,7 @@ /area/rogue/indoors/shelter/town/dwarf) "dGK" = ( /obj/structure/chair/wood/rogue/chair_noble, -/obj/effect/landmark/start/lady, +/obj/effect/landmark/start/consort, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/manor{ first_time_text = "Blackwine Manor" @@ -3331,7 +3328,7 @@ /obj/item/storage/belt/rogue/pouch/coins/poor, /obj/item/storage/belt/rogue/leather/rope, /obj/item/clothing/shoes/roguetown/boots/leather, -/obj/item/rogueweapon/huntingknife/idagger, +/obj/item/rogueweapon/knife/dagger, /turf/open/floor/rogue/naturalstone, /area/rogue/under/town/sewer) "dMo" = ( @@ -3441,7 +3438,7 @@ "dRf" = ( /obj/structure/rack/rogue, /obj/item/rogueweapon/shield/wood, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, /obj/structure/fireaxecabinet{ pixel_x = -16; pixel_y = 32 @@ -3578,7 +3575,7 @@ /turf/open/floor/rogue/tile/kitchen, /area/rogue/indoors/town/vault) "dXj" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/flora/roguegrass, @@ -3595,7 +3592,7 @@ /obj/item/reagent_containers/peppermill{ pixel_y = 30 }, -/obj/item/kitchen/rollingpin{ +/obj/item/rogueweapon/mace/woodclub/rollingpin{ pixel_x = -3; pixel_y = 2 }, @@ -3608,7 +3605,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/exposed/town) "dXB" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/item/storage/roguebag, @@ -3697,7 +3694,7 @@ name = "plague district" }) "ebW" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/wood/nosmooth, /area/rogue/indoors/town/shop) "ecu" = ( @@ -3767,7 +3764,7 @@ first_time_text = "Blackwine Manor" }) "egc" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -3780,7 +3777,7 @@ first_time_text = "Blackwine Manor" }) "egz" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/tavern/saiga) "ehg" = ( @@ -3818,10 +3815,10 @@ /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/exposed/church) "eiG" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/rack/rogue/shelf/notdense, @@ -3856,7 +3853,7 @@ /turf/closed/wall/mineral/rogue/stone, /area/rogue/under/town/basement) "ejS" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -3892,7 +3889,7 @@ "elw" = ( /obj/structure/flora/roguegrass, /obj/structure/mineral_door/bars, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, @@ -3911,7 +3908,7 @@ /area/rogue/indoors/town) "elO" = ( /obj/structure/bed/rogue/wooldouble, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/item/reagent_containers/glass/bottle/rogue/wine, @@ -3929,7 +3926,7 @@ /turf/open/floor/rogue/carpet, /area/rogue/indoors/town) "enH" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -4044,11 +4041,11 @@ /area/rogue/outdoors/exposed/under/basement) "etB" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/closed/mineral/rogue, /area/rogue/indoors/shelter/rtfield) "eud" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -4056,7 +4053,7 @@ first_time_text = "Blackwine Manor" }) "euh" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, @@ -4072,7 +4069,7 @@ /turf/open/transparent/openspace, /area/rogue) "euA" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/rack/rogue, @@ -4180,7 +4177,7 @@ }) "eyB" = ( /obj/item/candle/yellow/lit/infinite{ - light_range = 1; + light_outer_range = 1; pixel_x = 8; pixel_y = 5 }, @@ -4223,7 +4220,7 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/under/town/basement) "ezU" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/dirt, @@ -4240,7 +4237,7 @@ icon_state = "largetable" }, /obj/item/reagent_containers/food/snacks/rogue/meat/mince/beef, -/obj/item/rogueweapon/huntingknife/cleaver/combat, +/obj/item/rogueweapon/knife/cleaver/combat, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/shelter/rtfield) "eAq" = ( @@ -4267,7 +4264,7 @@ /area/rogue/indoors/town/church) "eAR" = ( /obj/structure/toilet, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt, @@ -4287,7 +4284,7 @@ /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/exposed/church) "eBB" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/flora/roguegrass, @@ -4331,7 +4328,7 @@ }, /area/rogue/indoors/town/shop) "eDG" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/flora/roguegrass, @@ -4402,11 +4399,11 @@ /area/rogue/under/town/basement) "eGC" = ( /obj/structure/closet/crate/chest/neu_iron, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed_dried, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed, +/obj/item/reagent_containers/food/snacks/produce/swampweed_dried, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/swampweed, +/obj/item/reagent_containers/food/snacks/produce/swampweed, /obj/item/clothing/mask/cigarette/pipe/crafted, /obj/item/reagent_containers/powder/ozium{ pixel_x = -7; @@ -4556,7 +4553,7 @@ }, /area/rogue/outdoors/town/roofs) "ePk" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -4583,7 +4580,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town/roofs) "eRt" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/grass, @@ -4669,7 +4666,7 @@ /turf/open/floor/rogue/twig, /area/rogue/indoors/town/tavern/saiga) "eTJ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/dirt, @@ -4779,8 +4776,8 @@ /area/rogue/outdoors/town/roofs) "faa" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/mace/wsword, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/grass, /area/rogue/outdoors/exposed/town) "fai" = ( @@ -4868,7 +4865,7 @@ /turf/open/floor/rogue/dirt, /area/rogue/indoors) "fgL" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/roguemachine/camera/left, @@ -4883,7 +4880,7 @@ /turf/open/floor/rogue/cobble/mossy, /area/rogue/indoors/town/tavern/saiga) "fgN" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/rtfield{ ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); @@ -4920,10 +4917,10 @@ /obj/item/paper/scroll, /obj/item/paper/scroll, /obj/item/paper/scroll, -/obj/item/rogueweapon/huntingknife/idagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, /obj/item/reagent_containers/glass/bottle/rogue/poison, /obj/item/clothing/mask/cigarette/rollie/mindbreaker, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue/poison, +/obj/item/reagent_containers/food/snacks/produce/jacksberry/poison, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/bath/redhouse) "fhC" = ( @@ -4960,7 +4957,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/garrison) "fkm" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/item/reagent_containers/glass/bucket/wooden, @@ -4999,7 +4996,7 @@ /area/rogue/indoors/town/tavern/saiga) "fmQ" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/effect/landmark/start/vagrant{ @@ -5068,13 +5065,13 @@ /turf/open/water/swamp/deep, /area/rogue/outdoors/bog) "fpb" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/grass, /area/rogue/outdoors/exposed/manorgarri) "fpB" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/flora/roguegrass, @@ -5084,7 +5081,7 @@ /obj/machinery/light/rogue/wallfire{ pixel_x = -32 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/carpet, @@ -5166,10 +5163,10 @@ /turf/open/floor/rogue/concrete, /area/rogue/indoors/town/magician) "fsl" = ( -/obj/item/rogueweapon/huntingknife/idagger/steel/special, -/obj/item/rogueweapon/huntingknife/idagger/steel, +/obj/item/rogueweapon/knife/dagger/steel/special, +/obj/item/rogueweapon/knife/dagger/steel, /obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueweapon/huntingknife/idagger, +/obj/item/rogueweapon/knife/dagger, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/shop) "ftC" = ( @@ -5253,7 +5250,7 @@ first_time_text = "Blackwine Manor" }) "fwO" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, @@ -5281,7 +5278,7 @@ }) "fxm" = ( /obj/structure/well/fountain, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/cobblerock, @@ -5315,7 +5312,7 @@ /turf/open/floor/rogue/herringbone, /area/rogue/under/town/basement) "fyZ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/grass, @@ -5492,10 +5489,10 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/mountains) "fNG" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -5508,13 +5505,13 @@ /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) "fOQ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town/tavern/saiga) "fQB" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -5559,7 +5556,7 @@ icon_state = "border" }, /obj/structure/roguemachine/scomm, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/hexstone, @@ -5609,7 +5606,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "fVn" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, @@ -5660,9 +5657,9 @@ "fXC" = ( /obj/item/clothing/mask/cigarette/pipe/westman, /obj/structure/closet/crate/chest/wicker, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) "fXO" = ( @@ -5758,10 +5755,10 @@ /area/rogue/under/town/basement) "gbU" = ( /obj/machinery/light/rogue/oven/south, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -5792,7 +5789,7 @@ /area/rogue/indoors/town/tavern/saiga) "gdJ" = ( /obj/structure/fluff/dryingrack, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /turf/open/floor/rogue/tile, /area/rogue/indoors/town/manor{ first_time_text = "Blackwine Manor" @@ -5888,7 +5885,7 @@ /area/rogue/outdoors/exposed/under/basement) "giM" = ( /obj/structure/chair/stool/rogue, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/effect/landmark/start/mercenary, @@ -6010,10 +6007,10 @@ first_time_text = "Blackwine Manor" }) "gpl" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/toilet, @@ -6042,7 +6039,7 @@ /area/rogue/outdoors/mountains) "gqM" = ( /obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/grabber{ +/obj/effect/landmark/start/stevedore{ dir = 8 }, /turf/open/floor/rogue/twig, @@ -6269,7 +6266,7 @@ /obj/item/clothing/mask/cigarette/pipe{ pixel_y = 14 }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed{ +/obj/item/reagent_containers/food/snacks/produce/dry_westleach{ pixel_y = 7 }, /obj/item/storage/box/matches, @@ -6319,7 +6316,7 @@ /obj/structure/floordoor/gatehatch/outer{ redstone_id = "gatelava" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -6423,7 +6420,7 @@ /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/bath/redhouse) "gJM" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -6472,7 +6469,7 @@ /area/rogue/outdoors/town/roofs) "gNJ" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, @@ -6481,14 +6478,14 @@ }) "gPa" = ( /obj/structure/fluff/grindwheel, -/obj/item/rogueweapon/sword/iron/messer, +/obj/item/rogueweapon/sword/scimitar/messer, /turf/open/floor/rogue/cobblerock, /area/rogue/indoors/shelter/town/dwarf) "gQS" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/item/candle/yellow/lit/infinite/strong{ @@ -6516,7 +6513,7 @@ /area/rogue/outdoors/exposed/church) "gSV" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -6556,7 +6553,7 @@ first_time_text = "DWARVERN RUINS" }) "gVw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/ladder, @@ -6630,7 +6627,7 @@ /turf/open/floor/carpet/stellar, /area/rogue/indoors/town/magician) "hca" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, @@ -6672,14 +6669,14 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/under/cave) "hdL" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/cobblerock, /area/rogue/indoors/town) "hes" = ( /obj/structure/toilet, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/cobble/mossy, @@ -6704,7 +6701,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/cell) "heN" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -6828,7 +6825,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/outdoors/exposed/under/basement) "hny" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /obj/structure/fluff/walldeco/bath/wallrope{ @@ -6857,7 +6854,7 @@ "hqR" = ( /obj/effect/decal/cleanable/blood/gibs/core, /obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/item/rogueweapon/huntingknife/idagger, +/obj/item/rogueweapon/knife/dagger, /turf/open/transparent/openspace, /area/rogue/under/cave{ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); @@ -6941,7 +6938,7 @@ /turf/open/transparent/openspace, /area/rogue/indoors/shelter/town/dwarf) "hvy" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/grass, @@ -6979,7 +6976,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/mountains) "hyL" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/woodturned/nosmooth, /area/rogue/indoors/town) "hzg" = ( @@ -7067,7 +7064,7 @@ /turf/closed/wall/mineral/rogue/stone, /area/rogue/indoors/shelter/town/dwarf) "hCI" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/grass, @@ -7100,7 +7097,7 @@ /turf/open/floor/rogue/tile/bath, /area/rogue/indoors/town/bath/redhouse) "hDE" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/effect/spawner/roguemap/sewerencounter, @@ -7267,7 +7264,7 @@ /turf/open/floor/rogue/tile/masonic/inverted, /area/rogue/indoors/town/magician) "hMK" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/herringbone, @@ -7421,17 +7418,17 @@ /turf/open/floor/carpet/red, /area/rogue/outdoors/exposed/under/basement) "hRN" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/flora/roguegrass, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/exposed/under/basement) "hSa" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/item/reagent_containers/food/snacks/rogue/meat/mince/beef, @@ -7556,7 +7553,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "hZr" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/cobblerock, @@ -7600,7 +7597,7 @@ }) "iaf" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/idagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, /turf/open/floor/rogue/concrete, /area/rogue/indoors/town/magician) "iap" = ( @@ -7619,7 +7616,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/exposed/town) "ibq" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/tile, /area/rogue/indoors/town/manor{ first_time_text = "Blackwine Manor" @@ -7716,10 +7713,10 @@ /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/bath/redhouse) "ihA" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -7870,7 +7867,7 @@ /turf/open/floor/carpet/inn, /area/rogue/under/town/basement) "iqm" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -8025,7 +8022,7 @@ dir = 4; redstone_id = "warehouse_shutter" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/cobblerock, @@ -8035,7 +8032,7 @@ dir = 4; icon_state = "border" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/closet/crate/roguecloset/dark{ @@ -8170,7 +8167,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/shelter/rtfield) "iEZ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt, @@ -8291,7 +8288,7 @@ name = "vulf cave" }) "iKc" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/fluff/walldeco/innsign{ @@ -8324,7 +8321,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/mountains) "iLK" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -8350,7 +8347,7 @@ }, /area/rogue/outdoors/town/roofs) "iNk" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/carpet/royalblack, @@ -8360,7 +8357,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/exposed/manorgarri) "iNB" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/dirt/road, @@ -8456,7 +8453,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "iWf" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/grass, @@ -8504,7 +8501,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/mountains) "iYv" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/garrison) "iZa" = ( @@ -8580,7 +8577,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/outdoors/town/roofs) "jbJ" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/exposed/town) "jbK" = ( @@ -8620,7 +8617,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "jeN" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/toilet, @@ -8724,7 +8721,7 @@ }) "jjV" = ( /obj/structure/closet/crate/chest/old_crate, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, /turf/open/floor/rogue/concrete, /area/rogue/under/cave/spider) "jkc" = ( @@ -8774,7 +8771,7 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) "jml" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt, @@ -8858,7 +8855,7 @@ /turf/open/transparent/openspace, /area/rogue/indoors/town/tavern/saiga) "jqP" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /obj/machinery/light/rogue/wallfire/candle/lamp{ @@ -8925,7 +8922,7 @@ dir = 1; icon_state = "border" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -8944,7 +8941,7 @@ /area/rogue/indoors/town/garrison) "jvY" = ( /obj/item/reagent_containers/food/snacks/fat/salo, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/closet/crate/chest/neu, @@ -9009,7 +9006,7 @@ }, /obj/item/natural/feather, /obj/item/candle/yellow/lit, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/ruinedwood/spiral, @@ -9052,7 +9049,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "jBJ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -9129,7 +9126,7 @@ first_time_text = "Blackwine Manor" }) "jFj" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -9156,7 +9153,7 @@ /turf/closed/wall/mineral/rogue/stonebrick/reddish, /area/rogue/indoors/town/bath/redhouse) "jGo" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -9169,7 +9166,7 @@ /turf/closed/mineral/rogue/bedrock, /area/rogue/outdoors/bog) "jGD" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town) "jGG" = ( @@ -9195,23 +9192,23 @@ first_time_text = "SCREAMING MOUNTAIN MINESHAFT" }) "jHy" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/rack/rogue, -/obj/item/rogueweapon/woodcut, -/obj/item/rogueweapon/woodcut, +/obj/item/rogueweapon/axe/iron, +/obj/item/rogueweapon/axe/iron, /turf/open/floor/rogue/dirt, /area/rogue/indoors/town/garrison) "jIv" = ( /obj/structure/flora/ausbushes/lavendergrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/grass, /area/rogue/outdoors/mountains) "jIR" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -9224,7 +9221,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "jJO" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt, @@ -9268,10 +9265,10 @@ /area/rogue/indoors/shelter/rtfield) "jNH" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/sword/iron/short, -/obj/item/rogueweapon/sword/iron/short, -/obj/item/rogueweapon/sword/iron/messer, -/obj/item/rogueweapon/sword/iron/messer, +/obj/item/rogueweapon/sword/short, +/obj/item/rogueweapon/sword/short, +/obj/item/rogueweapon/sword/scimitar/messer, +/obj/item/rogueweapon/sword/scimitar/messer, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/garrison) "jNI" = ( @@ -9283,7 +9280,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/bath/redhouse) "jOm" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/flora/roguegrass, @@ -9301,7 +9298,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/outdoors/exposed/manorgarri) "jOB" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -9346,7 +9343,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "jSb" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/flora/roguegrass, @@ -9379,7 +9376,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "jUp" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/manor{ first_time_text = "Blackwine Manor" @@ -9416,7 +9413,7 @@ lockid = "tavern"; name = "kitchen" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/tile/checkeralt, @@ -9450,7 +9447,7 @@ dir = 4; icon_state = "border" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/cobblerock, @@ -9488,7 +9485,7 @@ /turf/open/floor/rogue/tile, /area/rogue/indoors/town/magician) "jXM" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/flora/roguegrass, @@ -9628,7 +9625,7 @@ /area/rogue/indoors/town/shop) "kel" = ( /obj/effect/decal/cleanable/blood/old, -/obj/item/rogueweapon/huntingknife/stoneknife, +/obj/item/rogueweapon/knife/stone, /turf/open/floor/rogue/twig, /area/rogue/indoors/shelter/bog) "keH" = ( @@ -9730,13 +9727,13 @@ }, /obj/structure/closet/crate/chest/neu_iron, /obj/item/clothing/mask/cigarette/pipe/westman, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /obj/item/reagent_containers/glass/bottle/rogue/wine, /obj/item/reagent_containers/glass/cup/steel, /turf/open/floor/rogue/concrete, /area/rogue/under/town/basement) "kkq" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -9805,7 +9802,7 @@ /turf/open/floor/rogue/concrete, /area/rogue/under/cave/spider) "knM" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -10059,7 +10056,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/mountains) "kAR" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/fluff/walldeco/bath/wallrope{ @@ -10187,7 +10184,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/exposed/town) "kGQ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, @@ -10249,7 +10246,7 @@ /area/rogue/outdoors/exposed/dwarf) "kKV" = ( /obj/structure/flora/roguegrass/thorn_bush, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/grass, /area/rogue/outdoors/mountains) "kLy" = ( @@ -10313,7 +10310,7 @@ first_time_text = "SCREAMING MOUNTAIN MINESHAFT" }) "kOz" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt, @@ -10352,7 +10349,7 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/under/town/sewer) "kQF" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/flora/roguegrass, @@ -10444,7 +10441,7 @@ }) "kXe" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/woodstaff/aries, +/obj/item/rogueweapon/polearm/woodstaff/aries, /turf/open/floor/rogue/concrete, /area/rogue/indoors/town/magician) "kXo" = ( @@ -10579,13 +10576,13 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/exposed/town) "lhc" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/tile/kitchen, /area/rogue/outdoors/exposed/under/basement) "lhh" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/item/ash, @@ -10674,7 +10671,7 @@ /obj/effect/decal/cleanable/blood/tracks{ dir = 10 }, -/obj/item/rogueweapon/huntingknife/stoneknife, +/obj/item/rogueweapon/knife/stone, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/rtfield{ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) @@ -10818,7 +10815,7 @@ /turf/open/floor/rogue/twig, /area/rogue/indoors) "lvw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, @@ -10829,7 +10826,7 @@ name = "plague district" }) "lvI" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, @@ -10906,7 +10903,7 @@ /area/rogue/indoors/shelter/town/dwarf) "lzR" = ( /obj/structure/closet/crate/chest/neu_fancy, -/obj/item/rogueweapon/huntingknife/idagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, /turf/open/floor/rogue/tile/kitchen, /area/rogue/indoors/town/vault) "lAJ" = ( @@ -10997,7 +10994,7 @@ }) "lFu" = ( /obj/structure/toilet, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/cobble/mossy, @@ -11191,7 +11188,7 @@ /area/rogue/indoors/town/church/chapel) "lLZ" = ( /obj/structure/fluff/statue/pillar, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -11325,7 +11322,7 @@ /turf/closed/wall/mineral/rogue/wooddark/window, /area/rogue/indoors) "lSv" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -11338,7 +11335,7 @@ }, /area/rogue) "lTO" = ( -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, +/obj/item/reagent_containers/food/snacks/produce/jacksberry, /obj/structure/closet/crate/chest/wicker, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/shelter/rtfield) @@ -11362,7 +11359,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/shelter/bog) "lVl" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, @@ -11414,10 +11411,10 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/exposed/town) "lXP" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -11481,7 +11478,7 @@ /obj/structure/floordoor/gatehatch/outer{ redstone_id = "gatelava" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -11523,7 +11520,7 @@ /area/rogue/outdoors/town) "mcG" = ( /obj/item/roguebin/water/gross, -/obj/item/rogueweapon/spear/stone, +/obj/item/rogueweapon/polearm/spear/stone, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/cell) "mdt" = ( @@ -11587,7 +11584,7 @@ }, /area/rogue/indoors/town/bath/redhouse) "mgZ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, @@ -11675,7 +11672,7 @@ "mop" = ( /obj/machinery/light/rogue/hearth, /obj/item/rogueweapon/tongs, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -11688,7 +11685,7 @@ }, /area/rogue/outdoors/exposed/manorgarri) "moB" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town/tavern/saiga) "moG" = ( @@ -11755,12 +11752,12 @@ /area/rogue/indoors/town/magician) "msG" = ( /obj/structure/closet/crate/chest/old_crate, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) "msX" = ( @@ -11884,7 +11881,7 @@ "mAD" = ( /obj/effect/decal/cleanable/dirt/cobweb, /obj/structure/closet/crate/chest/old_crate, -/obj/item/rogueweapon/huntingknife/idagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, /turf/open/floor/rogue/concrete, /area/rogue/under/cave/spider) "mAL" = ( @@ -11975,7 +11972,7 @@ /area/rogue/indoors/town/bath/redhouse) "mFn" = ( /obj/structure/table/vtable/v2, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/rogue/trophy/deer, @@ -12165,10 +12162,10 @@ /obj/structure/closet/crate/chest/neu, /obj/item/clothing/mask/cigarette/pipe, /obj/item/clothing/mask/cigarette/pipe, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /obj/machinery/light/rogue/wallfire/candle/weak/r, /turf/open/floor/rogue/ruinedwood/chevron, /area/rogue/indoors/town/bath/redhouse) @@ -12305,7 +12302,7 @@ /turf/open/floor/rogue/cobblerock, /area/rogue/indoors/town) "mVM" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/fluff/walldeco/rpainting/forest{ @@ -12330,7 +12327,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "mWI" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/cobble, @@ -12406,7 +12403,7 @@ /turf/closed/mineral/rogue/bedrock, /area/rogue/indoors/shelter/mountains) "ncr" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/closet/crate/roguecloset/inn/chest, @@ -12438,7 +12435,7 @@ /turf/open/transparent/openspace, /area/rogue/outdoors/bog) "ndb" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) "ndi" = ( @@ -12454,7 +12451,7 @@ }) "new" = ( /obj/structure/flora/ausbushes/lavendergrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/grass, @@ -12493,7 +12490,7 @@ /turf/open/floor/rogue/dirt, /area/rogue/indoors/shelter/rtfield) "nfN" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt, @@ -12618,7 +12615,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "nmu" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -12652,7 +12649,7 @@ /area/rogue/outdoors/exposed/under/sewer) "nnc" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/grass, @@ -12664,7 +12661,7 @@ dir = 4; icon_state = "border" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -12717,7 +12714,7 @@ }, /area/rogue/outdoors/exposed/manorgarri) "noV" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt, @@ -12807,7 +12804,7 @@ /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town) "nxf" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/fluff/railing/fence{ @@ -12851,10 +12848,10 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/exposed/town) "nym" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/machinery/light/rogue/firebowl/standing/blue, @@ -13213,7 +13210,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/outdoors/town/roofs) "nSS" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/dirt, @@ -13241,7 +13238,7 @@ /turf/open/floor/rogue/tile/kitchen, /area/rogue/indoors/town/vault) "nTz" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/dirt/road, @@ -13321,7 +13318,7 @@ first_time_text = "SCREAMING MOUNTAIN MINESHAFT" }) "nXK" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt, @@ -13384,7 +13381,7 @@ /turf/closed/wall/mineral/rogue/wooddark/vertical, /area/rogue) "ocA" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -13496,7 +13493,7 @@ first_time_text = "Blackwine Manor" }) "oiJ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/wood, @@ -13520,7 +13517,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/bath/redhouse) "okj" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors) "oko" = ( @@ -13563,7 +13560,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/cell) "omc" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/machinery/light/rogue/firebowl/stump, @@ -13655,7 +13652,7 @@ /turf/open/floor/rogue/tile, /area/rogue/indoors/town/garrison) "opd" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, @@ -13699,7 +13696,7 @@ first_time_text = "Blackwine Manor" }) "oqh" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, @@ -13822,13 +13819,13 @@ /area/rogue/indoors/shelter/rtfield) "owj" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt, /area/rogue/indoors/town/cell) "owy" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town) "owT" = ( @@ -13843,7 +13840,7 @@ /turf/open/floor/rogue/church, /area/rogue/indoors/town/church) "owX" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/concrete, @@ -14035,7 +14032,7 @@ }, /area/rogue/outdoors/town/roofs) "oFv" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, @@ -14148,7 +14145,7 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/under/cave) "oKl" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -14168,7 +14165,7 @@ icon_state = "border" }, /obj/structure/fluff/railing/border, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -14210,11 +14207,11 @@ /turf/open/floor/rogue/tile/masonic/single, /area/rogue/under/town/basement) "oNm" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/closed/wall/mineral/rogue/decowood, /area/rogue/indoors) "oNx" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/structure/rack/rogue/shelf/biggest, @@ -14291,10 +14288,10 @@ /turf/closed/wall/mineral/rogue/stone, /area/rogue/indoors) "oRy" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/mineral_door/swing_door{ @@ -14311,7 +14308,7 @@ "oRX" = ( /obj/structure/flora/roguegrass, /mob/living/simple_animal/hostile/retaliate/rogue/goat, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/grass, @@ -14424,11 +14421,11 @@ /area/rogue/indoors/town/garrison) "oXq" = ( /obj/structure/rack/rogue, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/manor{ first_time_text = "Blackwine Manor" @@ -14448,7 +14445,7 @@ dir = 4; icon_state = "border" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, @@ -14467,14 +14464,14 @@ dir = 5; icon_state = "border" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/effect/decal/cleanable/food/tomato_smudge, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/magician) "oYE" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/grass, @@ -14695,7 +14692,7 @@ /turf/closed/wall/mineral/rogue/wooddark/slitted, /area/rogue/indoors/town) "pkn" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/effect/decal/remains/human, @@ -14764,7 +14761,7 @@ /turf/closed/wall/mineral/rogue/wooddark, /area/rogue/outdoors/town) "pmz" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/hexstone, @@ -14862,7 +14859,7 @@ "ppO" = ( /obj/structure/closet/crate/chest/neu_iron, /obj/item/rogueweapon/whip, -/obj/item/rogueweapon/huntingknife/idagger, +/obj/item/rogueweapon/knife/dagger, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/garrison) "ppV" = ( @@ -14872,7 +14869,7 @@ first_time_text = "Rockhamlet" }) "pqk" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/grass, @@ -14945,7 +14942,7 @@ /turf/closed/mineral/rogue/bedrock, /area/rogue) "ptm" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, @@ -15023,7 +15020,7 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/exposed/town) "pxn" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/effect/decal/cleanable/food/tomato_smudge, @@ -15114,10 +15111,10 @@ first_time_text = "Blackwine Manor" }) "pCp" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/flora/roguegrass, @@ -15146,7 +15143,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "pEe" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -15415,7 +15412,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "pXN" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt, @@ -15456,7 +15453,7 @@ /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/magician) "pZz" = ( -/obj/item/rogueweapon/spear/stone, +/obj/item/rogueweapon/polearm/spear/stone, /turf/open/floor/rogue/naturalstone, /area/rogue) "pZB" = ( @@ -15520,7 +15517,7 @@ }, /area/rogue/indoors/town/tavern) "qdU" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/structure/flora/roguegrass, @@ -15543,7 +15540,7 @@ /turf/closed/wall/mineral/rogue/stone/moss, /area/rogue/indoors/town) "qeI" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -15574,7 +15571,7 @@ }) "qfi" = ( /obj/structure/closet/crate/drawer, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/item/natural/cloth, @@ -15645,7 +15642,7 @@ /area/rogue/outdoors/exposed/dwarf) "qiW" = ( /obj/structure/bed/rogue/shit, -/obj/item/rogueweapon/stoneaxe, +/obj/item/rogueweapon/axe/stone, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) "qjp" = ( @@ -15660,7 +15657,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/bog) "qka" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, @@ -15676,7 +15673,7 @@ /obj/structure/fluff/walldeco/painting/queen{ pixel_x = 32 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/carpet, @@ -15837,7 +15834,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/outdoors/exposed/church) "qsl" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt, @@ -15850,7 +15847,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "qtH" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/concrete, @@ -15932,7 +15929,7 @@ }) "qwU" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/grass, @@ -16078,7 +16075,7 @@ "qHN" = ( /obj/machinery/light/rogue/hearth, /obj/item/clothing/mask/rogue/facemask/prisoner, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -16106,7 +16103,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "qJn" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -16187,7 +16184,7 @@ /area/rogue/indoors) "qMt" = ( /obj/structure/fluff/walldeco/chains, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, @@ -16244,7 +16241,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "qNI" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/item/clothing/cloak/cape/archivist, @@ -16275,10 +16272,10 @@ first_time_text = "Blackwine Manor" }) "qQj" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/roguemachine/camera/right, @@ -16332,7 +16329,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/exposed/town) "qTS" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/bath/redhouse) "qUm" = ( @@ -16422,14 +16419,14 @@ /turf/open/floor/rogue/tile/kitchen, /area/rogue/outdoors/exposed/under/basement) "qZn" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/chair/stool/rogue, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/exposed/under/basement) "qZr" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/bars/passage/shutter{ redstone_id = "merchant" }, @@ -16481,7 +16478,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/tavern/saiga) "rej" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/grass, @@ -16551,7 +16548,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/under/town/basement) "rij" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/gate/bars{ @@ -16578,7 +16575,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/outdoors/exposed/under/basement) "rix" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt, @@ -16594,7 +16591,7 @@ /area/rogue/indoors/town) "riP" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, @@ -16636,7 +16633,7 @@ /turf/open/water/sewer, /area/rogue/outdoors/exposed/under/sewer) "rkT" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/grass, /area/rogue/indoors) "rlr" = ( @@ -16644,7 +16641,7 @@ /area/rogue/outdoors/exposed/manorgarri) "rlJ" = ( /obj/structure/bed/rogue/shit, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/effect/landmark/start/prisoner{ @@ -16763,7 +16760,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/tavern/saiga) "rrq" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -16951,7 +16948,7 @@ /turf/open/floor/rogue/herringbone, /area/rogue/under/town/basement) "rCF" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/cobblerock, @@ -17036,10 +17033,10 @@ }, /area/rogue/outdoors/exposed/dwarf) "rFA" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/item/reagent_containers/food/snacks/egg, @@ -17166,7 +17163,7 @@ /turf/open/floor/rogue/grass, /area/rogue/indoors/shelter/rtfield) "rLU" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/effect/landmark/start/vagrant{ @@ -17355,7 +17352,7 @@ /area/rogue/outdoors/exposed/town) "rWX" = ( /obj/structure/roguetent, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/woodturned/nosmooth, @@ -17529,7 +17526,7 @@ /turf/open/water/swamp, /area/rogue/outdoors/bog) "sfQ" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/exposed/town) "shd" = ( @@ -17541,7 +17538,7 @@ /area/rogue/indoors/town) "sho" = ( /obj/structure/fluff/statue/pillar, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -17677,7 +17674,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/woods) "spQ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/bed/rogue/inn, @@ -17770,7 +17767,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "stI" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/item/natural/stone, @@ -17781,7 +17778,7 @@ /turf/open/floor/rogue/dirt, /area/rogue/indoors/town/cell) "stR" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/dirt, @@ -17858,7 +17855,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "swy" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -18045,7 +18042,7 @@ /area/rogue/outdoors/exposed/manorgarri) "sJe" = ( /obj/structure/table/wood/plain_alt, -/obj/item/rogueweapon/woodstaff/aries, +/obj/item/rogueweapon/polearm/woodstaff/aries, /turf/open/floor/rogue/concrete, /area/rogue/indoors/town/church/chapel) "sJk" = ( @@ -18083,7 +18080,7 @@ /obj/machinery/light/rogue/wallfire{ pixel_y = 32 }, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/manor{ first_time_text = "Blackwine Manor" @@ -18255,7 +18252,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/garrison) "sTm" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, @@ -18300,7 +18297,7 @@ /turf/open/floor/rogue/concrete, /area/rogue/outdoors/mountains) "sVC" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/closet/crate/chest/crate, @@ -18344,7 +18341,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/mountains) "sZS" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -18405,7 +18402,7 @@ /turf/open/floor/carpet/inn, /area/rogue/indoors/town/tavern/saiga) "teg" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/exposed/under/basement) "tem" = ( @@ -18423,7 +18420,7 @@ /area/rogue/under/town/basement) "tez" = ( /obj/item/candle/yellow/lit/infinite{ - light_range = 1; + light_outer_range = 1; pixel_x = -8; pixel_y = 5 }, @@ -18457,7 +18454,7 @@ "tfA" = ( /obj/structure/closet/crate/chest/neu, /obj/item/rogue/instrument/flute, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /obj/item/rogueweapon/sickle, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/manor{ @@ -18909,7 +18906,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "tEb" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -18963,10 +18960,10 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "tHr" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/effect/decal/cleanable/food/tomato_smudge, @@ -18996,7 +18993,7 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/outdoors/mountains) "tJG" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/bookcase, @@ -19027,7 +19024,7 @@ /area/rogue/outdoors/exposed/magiciantower) "tKM" = ( /obj/structure/flora/roguegrass/thorn_bush, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/grass, @@ -19052,7 +19049,7 @@ /area/rogue/indoors/town/garrison) "tLl" = ( /obj/machinery/light/rogue/firebowl, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -19071,7 +19068,7 @@ }, /area/rogue/outdoors/exposed/dwarf) "tLJ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/fluff/walldeco/bath/wallrope{ @@ -19084,7 +19081,7 @@ /turf/open/floor/rogue/tile/checker_green, /area/rogue/indoors/town/tavern/saiga) "tMa" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/dirt, @@ -19284,7 +19281,7 @@ first_time_text = "Blackwine Manor" }) "tUZ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/dirt/road, @@ -19301,7 +19298,7 @@ /area/rogue) "tWr" = ( /obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/grabber, +/obj/effect/landmark/start/stevedore, /turf/open/floor/rogue/twig, /area/rogue/indoors/town/shop) "tWT" = ( @@ -19448,7 +19445,7 @@ }, /area/rogue/indoors/town) "udt" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt, @@ -19578,7 +19575,7 @@ name = "vulf cave" }) "ukE" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt, @@ -19589,7 +19586,7 @@ /area/rogue) "umO" = ( /obj/structure/bed/rogue, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/carpet, @@ -19635,7 +19632,7 @@ /turf/open/floor/rogue/wood/nosmooth, /area/rogue/indoors/town/tavern/saiga) "upL" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, @@ -19721,7 +19718,7 @@ /turf/open/floor/rogue/concrete, /area/rogue/outdoors/exposed/under/basement) "usU" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/grass, @@ -19840,7 +19837,7 @@ dir = 6; icon_state = "border" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/carpet/royalblack, @@ -19903,8 +19900,8 @@ /area/rogue/indoors/town/bath/redhouse) "uBq" = ( /obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueweapon/woodcut, -/obj/item/rogueweapon/woodcut, +/obj/item/rogueweapon/axe/iron, +/obj/item/rogueweapon/axe/iron, /turf/open/floor/rogue/cobblerock, /area/rogue/indoors/shelter/town/dwarf) "uBA" = ( @@ -20055,7 +20052,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/bath/redhouse) "uGh" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/dirt, @@ -20204,8 +20201,8 @@ /obj/item/clothing/mask/cigarette/rollie/nicotine, /obj/item/clothing/mask/cigarette/rollie/nicotine, /obj/item/clothing/mask/cigarette/rollie/nicotine, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /obj/item/clothing/mask/cigarette/pipe, /obj/item/storage/fancy/cigarettes/zig, /obj/item/storage/fancy/cigarettes/zig, @@ -20635,7 +20632,7 @@ /turf/closed/wall/mineral/rogue/stone, /area/rogue/indoors/town) "vhT" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/cobble/mossy, @@ -20666,7 +20663,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/shelter/rtfield) "vjx" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/flora/roguegrass, @@ -20726,7 +20723,7 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/exposed/town) "voM" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/roguemachine/camera/left, @@ -20789,7 +20786,7 @@ /turf/closed/wall/mineral/rogue/wooddark/window, /area/rogue/outdoors/exposed/under/basement) "vrm" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/wood, @@ -20816,7 +20813,7 @@ }) "vuw" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/idagger, +/obj/item/rogueweapon/knife/dagger, /obj/item/rogueweapon/thresher, /obj/item/clothing/glasses/blindfold/white{ name = "blindfold" @@ -20899,7 +20896,7 @@ /turf/open/floor/rogue/grass, /area/rogue/indoors/town) "vxz" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/dirt, @@ -20976,7 +20973,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/church) "vAS" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/structure/flora/roguegrass, @@ -21027,7 +21024,7 @@ /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/bath/redhouse) "vCr" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -21105,7 +21102,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "vHH" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/machinery/light/rogue/wallfire/candle, @@ -21113,16 +21110,16 @@ /turf/open/floor/carpet/royalblack, /area/rogue/outdoors/exposed/under/basement) "vIi" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, /area/rogue/indoors/town) "vIo" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -21214,7 +21211,7 @@ /turf/open/floor/rogue/rooftop, /area/rogue/outdoors/exposed/magiciantower) "vNq" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/naturalstone, @@ -21250,7 +21247,7 @@ first_time_text = "DWARVERN RUINS" }) "vPZ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/flora/roguegrass, @@ -21296,10 +21293,10 @@ /area/rogue/under/town/basement) "vTl" = ( /obj/structure/table/wood/plain_alt, -/obj/item/rogueweapon/huntingknife/cleaver{ +/obj/item/rogueweapon/knife/cleaver{ pixel_x = 8 }, -/obj/item/kitchen/rollingpin{ +/obj/item/rogueweapon/mace/woodclub/rollingpin{ pixel_x = -5 }, /turf/open/floor/rogue/cobble, @@ -21344,13 +21341,13 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/under/town/basement) "vWe" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "vWg" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -21379,7 +21376,7 @@ }, /area/rogue/outdoors/town/roofs) "vWD" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/structure/fermenting_barrel/random/beer, @@ -21400,14 +21397,14 @@ locked = 1; lockid = "manor" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/exposed/under/basement) "vXs" = ( /obj/structure/plasticflaps, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/water/sewer, @@ -21424,7 +21421,7 @@ dir = 8; icon_state = "chair2" }, -/obj/effect/landmark/start/barkeep{ +/obj/effect/landmark/start/innkeep{ dir = 8 }, /turf/open/floor/rogue/wood/nosmooth, @@ -21483,7 +21480,7 @@ "waO" = ( /obj/structure/flora/roguegrass, /mob/living/simple_animal/hostile/retaliate/rogue/goat, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/grass, @@ -21510,7 +21507,7 @@ first_time_text = "Rockhamlet" }) "wbP" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/machinery/light/rogue/campfire{ pixel_y = 20 }, @@ -21559,7 +21556,7 @@ lockid = "steward" }, /obj/item/clothing/neck/roguetown/gorget, -/obj/item/rogueweapon/huntingknife/idagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, /obj/item/keyring/steward, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town) @@ -21590,7 +21587,7 @@ /area/rogue/under/town/sewer) "wfT" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/grass, @@ -21642,7 +21639,7 @@ }, /area/rogue/indoors/town/magician) "whE" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt, @@ -21659,7 +21656,7 @@ /area/rogue/indoors/shelter/town/dwarf) "wiz" = ( /obj/effect/spawner/roguemap/tree, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/grass, @@ -21731,7 +21728,7 @@ dir = 8; icon_state = "fence" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, @@ -21742,7 +21739,7 @@ /turf/open/water/sewer, /area/rogue/under/town/sewer) "wlv" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt, @@ -21771,7 +21768,7 @@ /area/rogue/under/town/sewer) "wmJ" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, @@ -21821,7 +21818,7 @@ /turf/open/floor/rogue/tile, /area/rogue/indoors/town/magician) "wpR" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/closed/wall/mineral/rogue/stone, @@ -21832,10 +21829,10 @@ /turf/closed/wall/mineral/rogue/wooddark/vertical, /area/rogue/outdoors/town) "wrs" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt, @@ -21872,7 +21869,7 @@ /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) "wuh" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/grass, @@ -21950,7 +21947,7 @@ /turf/open/floor/rogue/twig, /area/rogue/indoors/town/shop) "wys" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/structure/chair/stool/rogue, @@ -22000,7 +21997,7 @@ /area/rogue/indoors) "wBm" = ( /obj/effect/spawner/roguemap/tree, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, @@ -22017,10 +22014,10 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/under/cave) "wBy" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -22091,7 +22088,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/cell) "wGw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/herringbone, @@ -22165,7 +22162,7 @@ /area/rogue/indoors/town/bath/redhouse) "wLo" = ( /obj/structure/bed/rogue/shit, -/obj/item/rogueweapon/huntingknife/stoneknife, +/obj/item/rogueweapon/knife/stone, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) "wLN" = ( @@ -22180,7 +22177,7 @@ /turf/closed/wall/mineral/rogue/wooddark, /area/rogue/indoors/town/cell) "wMq" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt, @@ -22267,7 +22264,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/shelter/town/dwarf) "wRi" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "wRr" = ( @@ -22332,7 +22329,7 @@ /turf/closed/wall/mineral/rogue/roofwall/outercorner, /area/rogue/indoors/town/tavern) "wSZ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/cobble/mossy, @@ -22346,7 +22343,7 @@ icon_state = "longtable" }, /obj/item/paper/scroll, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/ruinedwood/spiral, @@ -22418,8 +22415,8 @@ }) "wYZ" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/woodstaff, -/obj/item/rogueweapon/woodstaff, +/obj/item/rogueweapon/polearm/woodstaff, +/obj/item/rogueweapon/polearm/woodstaff, /turf/open/floor/rogue/grass, /area/rogue/outdoors/exposed/town) "xab" = ( @@ -22445,10 +22442,10 @@ dir = 1; icon_state = "border" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/hexstone, @@ -22466,7 +22463,7 @@ dir = 4; icon_state = "pipe" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/water/sewer, @@ -22561,7 +22558,7 @@ dir = 5; icon_state = "border" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -22598,7 +22595,7 @@ first_time_text = "Blackwine Manor" }) "xhr" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/carpet/royalblack, @@ -22713,7 +22710,7 @@ icon_state = "tablewood1" }, /obj/item/reagent_containers/food/snacks/rogue/meat/salami, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/cobble, @@ -22888,7 +22885,7 @@ /area/rogue/indoors/shelter/mountains) "xxz" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/concrete, @@ -23119,7 +23116,7 @@ /obj/item/reagent_containers/glass/cup/wooden{ pixel_x = -13 }, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town) "xHI" = ( @@ -23166,10 +23163,10 @@ /turf/open/floor/rogue/twig, /area/rogue/indoors/town/tavern/saiga) "xJG" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/cobble/mossy, @@ -23212,7 +23209,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/exposed/town) "xLR" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/wood, @@ -23267,7 +23264,7 @@ /area/rogue/indoors/town/cell) "xON" = ( /obj/item/reagent_containers/glass/bucket/wooden, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/dirt, @@ -23586,7 +23583,7 @@ /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/shop) "yfc" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/fluff/walldeco/bath/wallrope{ @@ -23638,7 +23635,7 @@ first_time_text = "CATACOMBS" }) "ygV" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt, @@ -23686,7 +23683,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town) "yiq" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, diff --git a/_maps/custom/roguehamlet1.dmm b/_maps/custom/roguehamlet1.dmm deleted file mode 100644 index 310cd6e56f..0000000000 --- a/_maps/custom/roguehamlet1.dmm +++ /dev/null @@ -1,147279 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aan" = ( -/obj/item/bait, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/shelter/bog) -"aat" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"aba" = ( -/obj/item/candle/yellow, -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/church/chapel) -"abk" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"abr" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"abA" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/mace/wsword, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"act" = ( -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"acw" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/outdoors/town/roofs) -"acA" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town) -"ada" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"aei" = ( -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"aeu" = ( -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"aeH" = ( -/obj/structure/lever/wall{ - dir = 8; - desc = "Let the games begin."; - redstone_id = "sewer1" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"afj" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern) -"afT" = ( -/obj/structure/bars/pipe, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"afZ" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"agk" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/obj/item/restraints/legcuffs/beartrap/armed, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"agr" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); - first_time_text = "CATACOMBS" - }) -"agY" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"ahl" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"ahA" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 8; - icon_state = "donjondir"; - lockid = "walls"; - locked = 1 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"ahR" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/dwarf) -"ahS" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"ahT" = ( -/obj/structure/closet/dirthole/closed, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"aiY" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 8 - }, -/area/rogue/indoors/town) -"ajp" = ( -/obj/structure/mirror{ - pixel_y = 28 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"ajU" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/obj/item/clothing/mask/cigarette/pipe, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"akk" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town) -"alG" = ( -/obj/structure/fluff/walldeco/chains, -/turf/open/floor/rogue/metal/barograte, -/area/rogue/indoors/town/cell) -"alS" = ( -/obj/structure/chair/bench/ancientlog, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"amb" = ( -/obj/structure/roguemachine/scomm, -/obj/structure/chair/wood, -/obj/effect/landmark/start/monk, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/church/chapel) -"amo" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - name = "manor" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"amZ" = ( -/obj/machinery/light/rogue/hearth, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"anm" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/sunlight, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"anF" = ( -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/outdoors/town) -"aoO" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/outdoors/exposed/under/sewer) -"aqs" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/spider/eggcluster, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"aqt" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"ary" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "mage"; - max_integrity = 100000 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"arD" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 - }, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/shop) -"arN" = ( -/obj/structure/fluff/statue/scare{ - desc = "Just a scarecrow..." - }, -/obj/item/clothing/head/scarecrow_hat{ - pixel_y = 24 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"asj" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"asE" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"asF" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"asS" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/sewer) -"ate" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/mountains) -"atf" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"atE" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 - }, -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/shelter/town/dwarf) -"auy" = ( -/turf/closed/wall/mineral/rogue/wood, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"auJ" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"avq" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 4 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"avs" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"avy" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"avV" = ( -/obj/structure/chair/bench/couch, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"avZ" = ( -/obj/machinery/light/roguestreet, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/dwarf) -"awe" = ( -/obj/structure/chair/bench/church/r, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"awl" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"awv" = ( -/obj/structure/fluff/walldeco/stone{ - pixel_x = 0; - pixel_y = 32 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"awA" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/church) -"awD" = ( -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"awG" = ( -/obj/effect/spawner/roguemap/tree, -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"awU" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/storage/belt/rogue/pouch/coins/poor, -/obj/item/rogueweapon/huntingknife/stoneknife, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"awX" = ( -/obj/structure/roguemachine/camera/right, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"axt" = ( -/obj/structure/fluff/wallclock, -/turf/open/floor/rogue/tile/checkeralt, -/area/rogue/indoors/town/tavern) -"axy" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"axL" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - name = "CATACOMBS" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"ayF" = ( -/obj/structure/mineral_door/wood/red{ - locked = 1; - lockid = "woodsm" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"ayX" = ( -/obj/structure/fluff/railing/border, -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/obj/item/roguestatue/silver, -/obj/item/rogueweapon/woodstaff, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"azg" = ( -/obj/structure/fluff/statue/knight, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"azz" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"aAt" = ( -/obj/structure/flora/newtree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"aBw" = ( -/obj/structure/mineral_door/wood, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town) -"aBF" = ( -/obj/structure/flora/roguegrass/maneater/real, -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"aBS" = ( -/obj/structure/closet/crate/chest{ - locked = 1; - lockid = "lord" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors) -"aCw" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/item/paper/scroll/cargo, -/obj/structure/roguemachine/camera/right, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"aCN" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"aDr" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/indoors/town/tavern) -"aDu" = ( -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"aDC" = ( -/mob/living/carbon/human/species/human/northern/bum{ - name = "creep"; - aggressive = 1 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/mountains) -"aDZ" = ( -/obj/structure/mineral_door/bars, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/church) -"aEH" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/obj/effect/landmark/start/woodsman{ - dir = 8 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"aEJ" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/shelter/bog) -"aEU" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/natural/feather{ - pixel_x = 5 - }, -/obj/item/reagent_containers/glass/bottle/rogue/wine{ - pixel_y = 10; - pixel_x = -11 - }, -/obj/item/rogueweapon/huntingknife/idagger/silver, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"aFF" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/effect/decal/cleanable/oil, -/obj/effect/decal/cleanable/greenglow, -/obj/item/broom, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"aGl" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"aGu" = ( -/obj/structure/fluff/walldeco/customflag, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"aHg" = ( -/obj/structure/bars/grille, -/obj/structure/flora/roguegrass/water, -/turf/open/water/swamp, -/area/rogue/under/town/basement) -"aHx" = ( -/obj/structure/roguethrone, -/obj/effect/landmark/start/lord, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"aHB" = ( -/obj/structure/flora/roguegrass/water/reeds, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"aHC" = ( -/obj/structure/displaycase, -/obj/item/rogueweapon/sword/rapier/lord, -/turf/open/floor/carpet/purple, -/area/rogue/indoors/town/vault) -"aHN" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/outdoors/exposed/dwarf) -"aHT" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"aIR" = ( -/obj/structure/chair/wood/rogue, -/obj/effect/landmark/start/steward, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"aJg" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/rock/pile, -/obj/item/natural/stone, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"aJh" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue) -"aJP" = ( -/obj/structure/fluff/railing/border, -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town/garrison) -"aJR" = ( -/obj/structure/flora/roguegrass, -/obj/structure/roguemachine/camera/right, -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"aJW" = ( -/obj/structure/stairs/stone, -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/town/basement) -"aKs" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"aKZ" = ( -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/obj/effect/landmark/ambush, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"aLP" = ( -/obj/structure/chair/bench/ancientlog, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"aMC" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "shop" - }, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/shop) -"aMR" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/manorgarri) -"aNo" = ( -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/outdoors/exposed/under/sewer) -"aNH" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/obj/structure/flora/roguegrass/bush/wall/tall, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"aNW" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"aOi" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/church) -"aOR" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern) -"aPD" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"aPT" = ( -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern) -"aQE" = ( -/obj/structure/rack/rogue, -/obj/item/flashlight/flare/torch/lantern, -/obj/item/flashlight/flare/torch/lantern, -/obj/item/flint, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"aQL" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"aQX" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 - }, -/obj/item/rogueweapon/huntingknife, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"aRI" = ( -/turf/closed/mineral/rogue, -/area/rogue/indoors/town/cell) -"aRU" = ( -/turf/closed/mineral/random/rogue/high, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"aSj" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 - }, -/obj/item/clothing/mask/rogue/facemask/prisoner, -/obj/item/clothing/glasses/blindfold/white{ - name = "blindfold" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"aSx" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/maneater/real, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"aSZ" = ( -/obj/item/natural/stone, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"aTf" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle, -/area/rogue/indoors/town) -"aTF" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/wolf, -/obj/effect/decal/cleanable/blood/gibs/core, -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"aTI" = ( -/obj/structure/fluff/globe, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"aTV" = ( -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"aTX" = ( -/turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/bog) -"aUb" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"aUj" = ( -/obj/structure/bed/rogue/wooldouble, -/obj/item/bedsheet/rogue/double_pelt, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"aUr" = ( -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/dwarf) -"aVE" = ( -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/vault) -"aVL" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/chicken, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town) -"aVN" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"aWR" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"aXe" = ( -/obj/effect/decal/cleanable/food/egg_smudge, -/turf/open/floor/rogue/tile/checker, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"aXu" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"aXE" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"aXI" = ( -/obj/machinery/light/rogue/smelter/great, -/mob/living/simple_animal/hostile/retaliate/rogue/spider/mutated, -/obj/structure/spider/stickyweb, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"aYc" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"aYz" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"aYX" = ( -/obj/structure/closet/crate/chest{ - locked = 1; - lockid = "lord" - }, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"aZm" = ( -/obj/structure/guillotine{ - step_x = 0 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town) -"aZT" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"aZU" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"baF" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"baL" = ( -/obj/structure/mineral_door/bars, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/under/town/sewer) -"baQ" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/obj/item/clothing/under/roguetown/chainlegs/iron, -/turf/open/transparent/openspace, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"bbn" = ( -/obj/structure/fluff/grindwheel, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"bby" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomii"; - name = "ROOM II" - }, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern) -"bbG" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"bbH" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"bbX" = ( -/obj/effect/decal/cleanable/blood/footprints, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bci" = ( -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"bcj" = ( -/obj/effect/spawner/roguemap/treeorbush, -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bct" = ( -/obj/structure/roguewindow, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors) -"bcP" = ( -/obj/structure/flora/roguegrass, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bcX" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/mace/cudgel, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"bdj" = ( -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bdl" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"bdv" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/cell) -"bdM" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"beY" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/church) -"bfK" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 4 - }, -/obj/structure/barricade/wooden/crude, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"bgN" = ( -/obj/structure/mineral_door/wood/window{ - lockid = "nightman" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) -"bhc" = ( -/obj/effect/decal/cleanable/blood/gibs/up, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"bhp" = ( -/turf/closed/mineral/random/rogue/high, -/area/rogue) -"bhD" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/old, -/obj/item/clothing/head/roguetown/crown/serpcrown/surplus, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"bhL" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"bhP" = ( -/obj/structure/closet/crate/roguecloset/lord, -/obj/item/reagent_containers/glass/cup, -/obj/item/reagent_containers/glass/cup, -/obj/item/reagent_containers/glass/cup, -/obj/item/reagent_containers/glass/cup, -/obj/item/reagent_containers/glass/cup, -/obj/item/reagent_containers/glass/cup, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bic" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"biW" = ( -/obj/item/clothing/mask/rat/raven, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"bjG" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"bjI" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - lockid = "merchant"; - name = "SILVER" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"bjR" = ( -/turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_corner"; - dir = 8 - }, -/area/rogue/indoors/shelter/town/dwarf) -"bjY" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"bld" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bmb" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/bush/wall, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"bmc" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town/shop) -"bmA" = ( -/obj/item/chair/rogue, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bmF" = ( -/obj/structure/spider/cocoon, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"bnl" = ( -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/structure/bookcase, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"bnA" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"bnP" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/structure/mirror{ - pixel_y = 28 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"boJ" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church) -"boQ" = ( -/obj/structure/handcart{ - icon_state = "cart-empty"; - dir = 4 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"boT" = ( -/obj/structure/closet/dirthole/closed/loot, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"bpv" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/transparent/openspace, -/area/rogue) -"bqf" = ( -/obj/item/grown/log/tree, -/obj/item/grown/log/tree, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"brh" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"brr" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/handcart{ - icon_state = "cart-empty"; - dir = 4 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"brT" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"bsq" = ( -/obj/item/roguebin/water/gross, -/obj/structure/mirror, -/obj/item/natural/cloth, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"bsB" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "sheriff" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/garrison) -"bsE" = ( -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 1 - }, -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"bsU" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town/dwarfin) -"btS" = ( -/obj/item/reagent_containers/food/snacks/crow, -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"bun" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/transparent/openspace, -/area/rogue/outdoors/mountains/decap) -"buu" = ( -/obj/structure/bars/grille, -/turf/open/transparent/openspace, -/area/rogue/indoors/town) -"buA" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"bvj" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"bvw" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"bvE" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"bvX" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/spider, -/obj/structure/spider/eggcluster, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"bwi" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 1 - }, -/area/rogue/indoors/town/church/chapel) -"bwy" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bwR" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue) -"bxU" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"byi" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"byC" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/roguemachine/atm, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town) -"byF" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"byJ" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/shield/wood/crafted, -/obj/item/rogueweapon/spear, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"bzx" = ( -/obj/structure/fluff/statue/small, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bAk" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/natural/feather{ - pixel_x = 5 - }, -/obj/item/reagent_containers/glass/bottle/rogue/wine{ - pixel_y = 10; - pixel_x = -11 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/church) -"bAw" = ( -/obj/structure/fluff/walldeco/moon, -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/bath) -"bAA" = ( -/turf/open/floor/rogue/grass, -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bBd" = ( -/obj/structure/bed/rogue, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"bBj" = ( -/obj/structure/table/vtable, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bCf" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"bCh" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bCk" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"bCq" = ( -/obj/structure/closet/dirthole/closed, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"bCV" = ( -/obj/structure/closet/crate/drawer, -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bDY" = ( -/obj/item/roguemachine/mastermail, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"bFC" = ( -/obj/item/reagent_containers/glass/bottle/aluminium, -/obj/item/reagent_containers/glass/bottle/ammonia, -/obj/item/reagent_containers/glass/bottle/anxiety, -/obj/item/reagent_containers/glass/bottle/capsaicin, -/obj/item/reagent_containers/glass/bottle/carbon, -/obj/item/reagent_containers/glass/bottle/copper, -/obj/item/reagent_containers/glass/bottle/rogue/strongpoison, -/obj/structure/closet/crate/roguecloset/dark, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"bFJ" = ( -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bGd" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/mountains) -"bGr" = ( -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bGv" = ( -/obj/structure/fluff/nest, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bGy" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"bHA" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/town) -"bHN" = ( -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"bHS" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"bHT" = ( -/obj/structure/chair/bench/couch/r, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/under/town/basement) -"bIe" = ( -/obj/structure/fluff/wallclock, -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town/shop) -"bIK" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 4 - }, -/area/rogue/indoors/town/church/chapel) -"bJf" = ( -/obj/structure/bars{ - alpha = 190 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"bJi" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"bJm" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"bJv" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/obj/effect/landmark/start/mason{ - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"bKg" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"bKX" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/mob/living/carbon/human/species/human/northern/bum{ - name = "creep"; - aggressive = 1 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"bLE" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/manorgarri) -"bMJ" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"bMQ" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bNE" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/town/dwarf) -"bNF" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 8 - }, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bNO" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/outdoors/exposed/manorgarri) -"bOb" = ( -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/mountains) -"bOc" = ( -/obj/structure/fluff/clodpile, -/obj/item/natural/worms, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"bOg" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/mountains) -"bOq" = ( -/obj/structure/closet/dirthole/closed/loot, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"bOD" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"bOM" = ( -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"bOY" = ( -/obj/item/rogueweapon/hoe, -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"bPb" = ( -/obj/effect/landmark/start/gravedigger{ - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"bPp" = ( -/obj/structure/rack/rogue, -/obj/item/keyring/dungeoneer, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/cell) -"bPr" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 8 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"bPA" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"bQk" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/roguekey/manor, -/obj/item/roguekey/manor, -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"bQp" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"bQF" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"bQG" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/machinery/light/rogue/wallfire/candle, -/obj/item/keyring/guard, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"bRB" = ( -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/clothing/cloak/raincloak/red, -/obj/item/storage/belt/rogue/pouch/coins/rich, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bRT" = ( -/obj/structure/roguewindow/openclose, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern) -"bSm" = ( -/obj/structure/closet/dirthole/closed/loot, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bSo" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/storage/belt/rogue/pouch/coins/rich, -/obj/item/clothing/shoes/roguetown/boots/leather, -/obj/item/clothing/shoes/roguetown/shortboots, -/obj/item/clothing/shoes/roguetown/ridingboots, -/obj/item/clothing/shoes/roguetown/boots, -/obj/item/roguegem, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"bSK" = ( -/obj/structure/fluff/railing/wood{ - icon_state = "woodrailing"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/church) -"bTg" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/carpet/red, -/area/rogue/outdoors/exposed/under/basement) -"bTt" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - lockid = "manor"; - locked = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"bTC" = ( -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bTD" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 1 - }, -/area/rogue/indoors/town/shop) -"bTN" = ( -/turf/open/water/river, -/area/rogue/outdoors/river) -"bUh" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/rogueweapon/huntingknife/cleaver, -/obj/item/clothing/head/roguetown/cookhat, -/turf/open/floor/rogue/tile/checker, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bUr" = ( -/obj/structure/closet/crate/chest{ - locked = 1; - lockid = "steward" - }, -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town) -"bUx" = ( -/obj/item/trash/applecore, -/obj/item/neuFarm/seed/apple, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"bVh" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bVB" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/suit/roguetown/shirt/dress/gen/blue, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"bVR" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"bWe" = ( -/obj/structure/fermenting_barrel/random/beer, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"bWp" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"bWx" = ( -/obj/structure/closet/crate/chest, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"bWE" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"bWG" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/mole, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/mountains) -"bWO" = ( -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/oat, -/obj/item/neuFarm/seed/wheat, -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"bXs" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bXw" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/item/rope/chain, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"bXD" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bXH" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/church) -"bXK" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/shelter/bog) -"bXT" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"bXV" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors) -"bYg" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); - first_time_text = "CATACOMBS" - }) -"bYh" = ( -/obj/structure/bed/rogue/shit, -/obj/item/clothing/mask/cigarette/rollie/mindbreaker, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"bYY" = ( -/turf/closed/mineral/rogue/salt, -/area/rogue/outdoors/mountains) -"bZQ" = ( -/obj/structure/fluff/dryingrack, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"bZV" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"caF" = ( -/obj/structure/fermenting_barrel, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"caY" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/cobble, -/area/rogue) -"cce" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"ccp" = ( -/obj/structure/flora/roguegrass/water, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ccI" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 - }, -/obj/item/paper/scroll, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"ccN" = ( -/obj/effect/landmark/start/jester{ - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"cdd" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/adventurer, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"ced" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/cell) -"cey" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ceG" = ( -/obj/structure/bed/rogue/mediocre, -/obj/item/storage/belt/rogue/pouch/coins/mid, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"ceL" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/dwarf) -"ceT" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern) -"cfh" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"cfr" = ( -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/manorgarri) -"cfM" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"cgH" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/manorgarri) -"chx" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"cio" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/statue/pillar, -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"ciJ" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"ciM" = ( -/obj/structure/roguerock, -/obj/structure/flora/roguegrass/water, -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"cjc" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/remains/wolf, -/obj/structure/fluff/walldeco/chains, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"cjj" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"cjz" = ( -/obj/structure/closet/dirthole/closed, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"cjO" = ( -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 8 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"cke" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"cli" = ( -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/town/dwarf) -"cls" = ( -/obj/effect/spawner/roguemap/hauntpile, -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"clF" = ( -/turf/closed/wall/shroud, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"cmB" = ( -/obj/structure/closet/dirthole/closed, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"cmQ" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/natural/cloth, -/obj/item/needle/thorn, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"cmZ" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/ingot/iron, -/obj/item/ingot/iron, -/obj/item/ingot/iron, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"cnF" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 - }, -/obj/item/storage/belt/rogue/leather, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"cnQ" = ( -/obj/structure/ladder/earth, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"cpa" = ( -/obj/effect/decal/cobbleedge, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"cpC" = ( -/obj/effect/decal/cleanable/blood/old, -/mob/living/carbon/human/species/human/northern/bum{ - name = "creep"; - aggressive = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"cqj" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/town/caverogue{ - first_time_text = "Abandoned Mine" - }) -"cqo" = ( -/obj/structure/closet/crate/chest{ - locked = 1; - lockid = "lord" - }, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"cqp" = ( -/obj/structure/flora/rock/jungle, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"csF" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"csS" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/scribe, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"csZ" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/flashlight/flare/torch/lantern, -/obj/item/rogueweapon/stoneaxe/woodcut/steel, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"cte" = ( -/obj/structure/roguemachine/balloon_pad, -/turf/open/floor/rogue/tile, -/area/rogue/outdoors/town/roofs) -"cuB" = ( -/obj/item/chair/stool/bar/rogue, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"cuH" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"cuW" = ( -/turf/closed/mineral/random/rogue/med, -/area/rogue/under/cave) -"cvO" = ( -/obj/structure/flora/roguegrass, -/obj/item/roguebin, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"cwB" = ( -/obj/structure/bed/rogue/shit, -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"cwF" = ( -/obj/structure/stairs{ - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"cwI" = ( -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"cwL" = ( -/obj/structure/fermenting_barrel/water, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"cwV" = ( -/obj/item/natural/bundle/stick, -/obj/item/natural/stone, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"cxa" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/manorgarri) -"cxi" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"cxy" = ( -/turf/closed/mineral/random/rogue/high, -/area/rogue/under/cave) -"cxQ" = ( -/obj/structure/fermenting_barrel/random, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"cya" = ( -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/structure/closet/crate/roguecloset/lord{ - lockid = "nightman" - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/bath) -"cyt" = ( -/obj/structure/fluff/statue/myth, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/town) -"czc" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"czh" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"czi" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"czT" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town) -"cAR" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"cBj" = ( -/obj/structure/well/fountain, -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/bath) -"cBk" = ( -/obj/structure/chair/wood/rogue/fancy, -/obj/machinery/light/rogue/wallfire/candle{ - pixel_y = -64 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"cCc" = ( -/obj/structure/bed/rogue/wool, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/shelter/town/dwarf) -"cCk" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"cCn" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"cCq" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 5 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"cCw" = ( -/obj/structure/fluff/walldeco/painting{ - pixel_y = 32 - }, -/obj/item/clothing/neck/roguetown/psycross/silver/astrata, -/obj/structure/closet/crate/chest/gold, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/vault) -"cCE" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/outdoors/exposed/under/basement) -"cCJ" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/cell) -"cCM" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"cCX" = ( -/obj/effect/landmark/start/servant{ - icon_state = "arrow"; - dir = 4 - }, -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"cDx" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/bath) -"cDD" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/wood{ - icon_state = "woodrailing"; - dir = 8; - pixel_y = -1 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"cEf" = ( -/obj/item/rogueweapon/sword/long/rider, -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town/vault) -"cEi" = ( -/turf/closed/wall/mineral/rogue/wood, -/area/rogue/outdoors/river) -"cEy" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"cFs" = ( -/obj/structure/closet/crate/chest{ - locked = 1; - lockid = "lord" - }, -/obj/item/reagent_containers/powder/ozium, -/obj/item/natural/cloth, -/obj/item/needle, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"cGj" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"cGK" = ( -/obj/structure/roguerock, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"cGL" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/reagent_containers/powder, -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/obj/item/roguekey/merchant, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/shop) -"cHm" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_y = 32 - }, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"cHy" = ( -/obj/item/melee/curator_whip{ - name = "leather whip" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"cHB" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"cHD" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"cHZ" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/rogue/instrument/guitar, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"cIL" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/meat/rawbacon, -/obj/item/reagent_containers/food/snacks/meat/rawbacon, -/obj/item/reagent_containers/food/snacks/meat/rawbacon, -/obj/item/reagent_containers/food/snacks/meat/rawbacon, -/obj/item/reagent_containers/food/snacks/meat/rawbacon, -/obj/item/reagent_containers/food/snacks/meat/rawbacon, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"cIO" = ( -/obj/structure/fermenting_barrel/water, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"cJr" = ( -/obj/item/rogueweapon/sword/long/exe, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"cJy" = ( -/obj/effect/decal/remains/wolf, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"cKt" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/exposed/manorgarri) -"cKB" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/indoors/town/tavern) -"cKT" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"cLh" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/shop) -"cLS" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"cMu" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/shelter/town/dwarf) -"cML" = ( -/obj/item/neuFarm/seed/oat, -/obj/item/neuFarm/seed/apple, -/obj/item/neuFarm/seed/apple, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/clothing/mask/cigarette/pipe/westman, -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"cNZ" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"cOl" = ( -/obj/effect/landmark/start/sheriff{ - dir = 1 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/manorgarri) -"cPt" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"cQn" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue) -"cQr" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"cRp" = ( -/obj/structure/closet/crate/roguecloset/lord, -/obj/structure/rogue/trophy/deer, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"cRO" = ( -/obj/item/riddleofsteel, -/turf/closed/mineral/rogue/bedrock, -/area/rogue) -"cSb" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church) -"cSd" = ( -/obj/structure/table/vtable, -/obj/structure/mirror, -/obj/item/natural/cloth, -/obj/item/rogueweapon/huntingknife/idagger/silver, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"cSj" = ( -/obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 4; - name = "woodsm" - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"cSp" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"cSU" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"cTv" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town/tavern) -"cTR" = ( -/obj/structure/fluff/psycross, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/church/chapel) -"cUd" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/farmer{ - dir = 4 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"cVF" = ( -/obj/structure/fluff/walldeco/chains, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/metal/barograte, -/area/rogue/indoors/town/cell) -"cXK" = ( -/obj/structure/closet/crate/roguecloset/lord{ - lockid = "nightman" - }, -/obj/item/clothing/mask/cigarette/pipe/westman, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/bath) -"cXO" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/under/basement) -"cYF" = ( -/obj/structure/closet/dirthole/grave, -/mob/living/simple_animal/hostile/zombie, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"cYR" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/outdoors/exposed/under/sewer) -"cZj" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"cZs" = ( -/turf/closed/mineral/random/rogue/med, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"cZz" = ( -/obj/structure/flora/rock/pile, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"cZM" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/under/town/basement) -"dad" = ( -/obj/structure/spider/eggcluster, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"daD" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 4 - }, -/area/rogue/indoors/town/dwarfin) -"daW" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "tavern" - }, -/turf/open/floor/rogue/tile/checkeralt, -/area/rogue/indoors/town/tavern) -"dbV" = ( -/obj/effect/decal/cleanable/blood/footprints, -/obj/effect/decal/cleanable/blood/footprints{ - dir = 4 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"dda" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/church) -"ddk" = ( -/obj/item/chair/stool/bar/rogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"ddL" = ( -/obj/structure/flora/newleaf/corner{ - dir = 5 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dek" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/statue/knight, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/outdoors/exposed/under/basement) -"dew" = ( -/obj/structure/flora/newleaf/corner{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"deO" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"dfi" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"dfC" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"dgd" = ( -/mob/living/carbon/human/species/human/northern/bum{ - wander = 1; - name = "vagrant" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/town) -"dgm" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"dgp" = ( -/obj/structure/table/wood/treestump, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dgN" = ( -/obj/effect/spawner/roguemap/beartrap, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dhg" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "church" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/church/chapel) -"dht" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/ship_in_a_bottle, -/obj/item/bomb{ - pixel_x = 3; - pixel_y = 3 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"dhF" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 1 - }, -/area/rogue/indoors/town) -"dir" = ( -/obj/machinery/light/rogue/lanternpost{ - dir = 1 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"diP" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"diQ" = ( -/obj/structure/flora/newleaf/corner{ - dir = 5 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"diV" = ( -/obj/effect/landmark/start/priest, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"djE" = ( -/obj/structure/flora/roguegrass/water, -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"djR" = ( -/obj/structure/table/vtable/v2, -/obj/item/natural/feather, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"dlu" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/natural/cloth, -/obj/item/natural/cloth, -/obj/item/candle/yellow, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/mountains) -"dlY" = ( -/obj/item/storage/backpack/holding{ - icon = 'icons/roguetown/clothing/storage.dmi'; - icon_state = "satchel"; - armor = null - }, -/obj/structure/rack/rogue, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue) -"dmx" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"dnb" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 5 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dns" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"doi" = ( -/obj/structure/flora/roguegrass, -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"doU" = ( -/obj/structure/fluff/statue/knight/interior, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"dpQ" = ( -/obj/item/clothing/accessory/skullcodpiece, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"dqx" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"dqG" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"dre" = ( -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"drr" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"drK" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/meat/rawbacon, -/obj/item/reagent_containers/food/snacks/meat/rawbacon, -/obj/item/reagent_containers/food/snacks/rogue/meat/salami, -/obj/item/reagent_containers/food/snacks/baguette, -/obj/item/reagent_containers/food/snacks/rogue/dogroll, -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/fortunecookie, -/obj/item/reagent_containers/food/snacks/rogue/eggtoast, -/obj/item/reagent_containers/food/snacks/rogue/cheddarwedge/aged, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"drL" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/structure/fermenting_barrel/random/beer, -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"dsq" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"dsB" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"dsI" = ( -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"dsJ" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) -"dsK" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/manorgarri) -"dsM" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/rogue/fryfish/eel, -/obj/item/reagent_containers/food/snacks/rogue/fryfish/eel, -/obj/item/reagent_containers/food/snacks/faggot, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/shelter/bog) -"dsO" = ( -/obj/structure/fluff/fokoff_sign, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dsW" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/shield/wood/crafted, -/obj/item/rogueweapon/spear, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"dtl" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 8 - }, -/area/rogue/indoors/town/tavern) -"dts" = ( -/mob/living/carbon/human/species/human/northern/bum{ - wander = 1; - name = "vagrant" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"dty" = ( -/obj/structure/flora/rock/pile, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"dub" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/food/condiment/peppermill, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"dud" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/dwarf) -"duq" = ( -/obj/structure/fluff/buysign{ - desc = "TUNNEL CLOSED" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"duv" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 4; - icon_state = "donjondir"; - locked = 1; - lockid = "dungeon" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"dvp" = ( -/obj/structure/closet/crate/chest, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/natural/feather, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"dvI" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town/garrison) -"dwf" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/bigrat, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "Abandoned Mine" - }) -"dwg" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/suit/roguetown/shirt/dress/gen/black, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"dwx" = ( -/obj/structure/bars, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"dwC" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"dwS" = ( -/obj/effect/spawner/roguemap/beartrap, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dxk" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/under/basement) -"dxx" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/remains/wolf, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"dxA" = ( -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/town/roofs) -"dxB" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"dxL" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"dxW" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"dyb" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 - }, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/indoors/town/bath) -"dyt" = ( -/obj/structure/fermenting_barrel/random/beer, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"dyu" = ( -/obj/item/roguebin, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"dyy" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"dyO" = ( -/obj/effect/decal/remains/human, -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); - first_time_text = "CATACOMBS" - }) -"dzy" = ( -/obj/structure/spider/eggcluster, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/spiderbase) -"dzz" = ( -/obj/structure/flora/roguegrass, -/obj/structure/roguerock, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"dzE" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"dAc" = ( -/turf/open/floor/rogue/metal, -/area/rogue/under/town/sewer) -"dAV" = ( -/obj/structure/fluff/clodpile, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"dBy" = ( -/mob/living/carbon/human/species/human/northern/bum{ - name = "creep"; - aggressive = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"dBF" = ( -/obj/structure/bars/pipe, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"dBO" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/vault) -"dCj" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/dwarf) -"dDf" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 8; - icon_state = "donjondir"; - lockid = "tavern" - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/tavern) -"dDV" = ( -/obj/structure/closet/crate/roguecloset/lord{ - lockid = "nightman"; - name = "key closet" - }, -/obj/item/roguekey/roomvi{ - lockid = "bath4"; - name = "bathkey IV" - }, -/obj/item/roguekey/roomvi{ - lockid = "bath1"; - name = "bathkey I" - }, -/obj/item/roguekey/roomvi{ - lockid = "bath2"; - name = "bathkey II" - }, -/obj/item/roguekey/roomvi{ - lockid = "bath3"; - name = "bathkey III" - }, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/bath) -"dEb" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"dEd" = ( -/turf/closed/mineral/random/rogue, -/area/rogue/outdoors/woods) -"dEh" = ( -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/bath) -"dEn" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/stonehedge{ - dir = 4 - }, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"dEv" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"dEH" = ( -/turf/open/water/river{ - dir = 4 - }, -/area/rogue/outdoors/river) -"dEO" = ( -/obj/structure/table/wood/treestump{ - pixel_x = -7 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"dFd" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"dFD" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dFG" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "butcher" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"dGC" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"dGK" = ( -/obj/structure/chair/wood/rogue/fancy, -/obj/effect/landmark/start/lady, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"dGR" = ( -/obj/structure/spacevine, -/turf/closed/mineral/rogue, -/area/rogue/under/cave) -"dIc" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/remains/xeno/larva{ - name = "child's remains"; - desc = "Truely, nothing is sacred." - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"dIj" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 4 - }, -/area/rogue/indoors/shelter/mountains) -"dJa" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 8 - }, -/area/rogue/indoors/shelter/town/dwarf) -"dJz" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dJH" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"dJZ" = ( -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"dKw" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue) -"dKI" = ( -/turf/open/floor/rogue/grass, -/area/rogue/indoors) -"dLn" = ( -/obj/structure/roguerock, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"dLu" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 - }, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"dLw" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/bush_meagre, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"dLB" = ( -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue) -"dLG" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/toy/cards/deck, -/obj/item/reagent_containers/glass/bottle/rogue/wine{ - pixel_x = 8 - }, -/obj/item/clothing/mask/cigarette/rollie/nicotine{ - pixel_x = -7; - pixel_y = -7 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"dMe" = ( -/mob/living/simple_animal/pet/cat{ - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"dMl" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/storage/belt/rogue/pouch/coins/poor, -/obj/item/storage/belt/rogue/leather/rope, -/obj/item/clothing/shoes/roguetown/boots/leather, -/obj/item/rogueweapon/huntingknife/idagger, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"dMo" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 1 - }, -/area/rogue/indoors/town/tavern) -"dNi" = ( -/obj/item/roguegem/green, -/turf/closed/mineral/rogue, -/area/rogue/under/cave/spider) -"dNW" = ( -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"dOd" = ( -/obj/item/storage/backpack/rogue/satchel/heartfelt, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"dOe" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/mountains) -"dOk" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"dOs" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 32 - }, -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"dOE" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/carpet/purple, -/area/rogue/under/town/basement) -"dOJ" = ( -/obj/structure/fluff/statue/pillar, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dOQ" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town) -"dPM" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"dPQ" = ( -/obj/structure/closet/dirthole/closed/loot, -/obj/structure/gravemarker, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"dPS" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/mountains) -"dQf" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/bigrat, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); - first_time_text = "CATACOMBS" - }) -"dQg" = ( -/obj/item/chair/stool/bar/rogue/crafted, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"dQn" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern) -"dQD" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/natural/cloth, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"dQE" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/shop) -"dRf" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/shield/wood, -/obj/item/rogueweapon/spear, -/obj/structure/fireaxecabinet{ - pixel_y = 32; - pixel_x = -16 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"dSD" = ( -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"dSQ" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"dST" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"dTc" = ( -/obj/structure/fluff/walldeco/wantedposter, -/obj/structure/chair/stool/rogue, -/obj/structure/roguemachine/camera/right, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"dTr" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/sapprentice, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"dTD" = ( -/obj/structure/bars/cemetery, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dTE" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"dTX" = ( -/obj/structure/lever/wall{ - dir = 8; - redstone_id = "donjon" - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/exposed/manorgarri) -"dUy" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/cave/spider) -"dUz" = ( -/obj/structure/fluff/walldeco/painting, -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"dUG" = ( -/obj/structure/table/wood/nice, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"dUL" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/church) -"dVd" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/transparent/openspace, -/area/rogue) -"dVh" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/church) -"dVl" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"dVD" = ( -/obj/item/natural/cloth, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"dVU" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"dWc" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/exposed/manorgarri) -"dWg" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"dWm" = ( -/obj/structure/table/vtable/v2, -/obj/item/clothing/mask/cigarette/pipe, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/bath) -"dWu" = ( -/obj/structure/bars/passage{ - redstone_id = "fightclub" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"dXa" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/exposed/manorgarri) -"dXe" = ( -/obj/item/roguecoin/silver/pile, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/vault) -"dXj" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/bush_meagre, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"dXk" = ( -/obj/structure/table/wood, -/obj/item/kitchen/spoon/plastic, -/turf/open/floor/rogue/tile/checkeralt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"dXv" = ( -/obj/structure/fluff/customsign, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"dXB" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/item/storage/roguebag, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dXC" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"dXN" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"dYM" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"dZd" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town) -"dZq" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"dZv" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"dZB" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/neuFarm/seed/berryrogue, -/obj/item/neuFarm/seed/berryrogue, -/obj/item/neuFarm/seed/berryrogue, -/obj/item/neuFarm/seed/berryrogue, -/obj/item/neuFarm/seed/berryrogue, -/obj/item/neuFarm/seed/berryrogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"eai" = ( -/obj/machinery/light/rogue/campfire/densefire, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors) -"eap" = ( -/obj/structure/bars/passage/shutter/open{ - redstone_id = "stewardshutter" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"eaw" = ( -/turf/open/floor/rogue/metal, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"eaT" = ( -/obj/structure/bed/rogue/shit, -/obj/effect/decal/cleanable/blood, -/obj/item/natural/cloth, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"ebb" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/vagrant, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ebw" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 - }, -/obj/item/book/rogue/law, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"ebE" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"ebW" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/shop) -"ecu" = ( -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"ecw" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 9 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/dwarfin) -"ecK" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/dwarfin) -"ecO" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/tavern) -"ecZ" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/shop) -"edc" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/indoors/town/church) -"edG" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/exposed/manorgarri) -"edL" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/bog) -"edO" = ( -/obj/structure/fluff/walldeco/wantedposter, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"edR" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue) -"eeE" = ( -/obj/structure/bars/passage{ - redstone_id = "donjon" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"eeH" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 10 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"efH" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"egc" = ( -/obj/item/roguebin, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"egz" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"ehg" = ( -/obj/structure/fermenting_barrel/beer, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"ehP" = ( -/obj/item/chair/stool/bar/rogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"ehQ" = ( -/obj/structure/chair/stool/rogue, -/obj/item/storage/belt/rogue/leather/rope, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"ehS" = ( -/obj/structure/fluff/statue/knightalt/r, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"eia" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town) -"eio" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"eiu" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"eiG" = ( -/obj/structure/fluff/railing/fence, -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"ejm" = ( -/obj/structure/bed/rogue/wooldouble, -/obj/item/bedsheet/rogue/fabric_double, -/turf/open/floor/carpet/purple, -/area/rogue/under/town/basement) -"ejD" = ( -/obj/machinery/light/rogue/wallfire/candle/blue/l, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"ejJ" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"ejQ" = ( -/obj/item/rogueweapon/pick, -/obj/item/gavelhammer, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/under/town/basement) -"ejS" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ekn" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"ekI" = ( -/obj/structure/table/vtable/v2, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/under/town/basement) -"ekN" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 4 - }, -/area/rogue/indoors/town) -"ekO" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/outdoors/exposed/dwarf) -"elo" = ( -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue/outdoors/exposed/under/basement) -"elw" = ( -/obj/structure/stairs/stone, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/sewer) -"elF" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"elL" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"elO" = ( -/obj/structure/bed/rogue/wooldouble, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/bedsheet/rogue/double_pelt, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"emS" = ( -/obj/structure/fluff/clock, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"enH" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"eoj" = ( -/obj/effect/landmark/start/villager, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"eoE" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/flora/rock/pile, -/turf/open/water/swamp/deep, -/area/rogue/outdoors/bog) -"epf" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"epm" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/candle/yellow, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"eqm" = ( -/obj/structure/closet/crate/drawer, -/obj/structure/fluff/wallclock/r, -/obj/item/keyring/hand, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"eqM" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"eqU" = ( -/obj/structure/rack/rogue{ - pixel_y = 16 - }, -/obj/item/clothing/head/roguetown/helmet/heavy/savoyard, -/obj/item/clothing/head/roguetown/helmet/heavy/savoyard, -/obj/item/keyring/guardcastle, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/garrison) -"erc" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"ert" = ( -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"erC" = ( -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"erG" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/woods) -"erS" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/obj/structure/roguemachine/camera/right, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/cell) -"esl" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"etw" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"etB" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge, -/turf/closed/mineral/rogue, -/area/rogue/indoors/shelter/rtfield) -"eud" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"euh" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"euk" = ( -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"euy" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/transparent/openspace, -/area/rogue) -"euA" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/rack/rogue, -/obj/item/quiver/bolts, -/obj/item/gun/ballistic/revolver/grenadelauncher/crossbow, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/garrison) -"evd" = ( -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"evm" = ( -/obj/structure/flora/rock/pile, -/obj/structure/bars/cemetery, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"evt" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"evu" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/grass, -/area/rogue/indoors) -"evX" = ( -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ewn" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/neck/roguetown/portalamulet, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue) -"ewq" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 - }, -/obj/item/burial_shroud, -/obj/item/burial_shroud, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"ewu" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/woods) -"ewN" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"ewT" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/item/reagent_containers/glass/bucket/wooden, -/obj/structure/roguemachine/camera/right, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"exj" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/sellsign{ - name = "ROCKHAMLET"; - desc = "ROCKHAMLET has been scratched over the former placename, too worn to read." - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"exA" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/obj/item/reagent_containers/glass/cup/steel, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"eyi" = ( -/obj/structure/mineral_door/wood/window{ - locked = 1; - lockid = "tavern" - }, -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/tile/checkeralt, -/area/rogue/indoors/town/tavern) -"eyx" = ( -/obj/structure/stairs{ - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ezb" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"ezz" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"ezE" = ( -/obj/structure/fluff/walldeco/wantedposter, -/obj/structure/bed/rogue, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"ezG" = ( -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/apple, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"ezJ" = ( -/obj/effect/decal/remains/xeno/larva{ - name = "child's remains"; - desc = "Truely, nothing is sacred." - }, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"ezM" = ( -/obj/structure/fermenting_barrel, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"ezU" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"eAd" = ( -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"eAp" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 - }, -/obj/item/reagent_containers/food/snacks/rogue/meat/mince/beef, -/obj/item/rogueweapon/huntingknife/cleaver/combat, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"eAq" = ( -/obj/structure/lever{ - redstone_id = "gatelava" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"eAI" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"eAM" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue/indoors/town/church) -"eAR" = ( -/obj/structure/toilet, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/under/town/sewer) -"eAU" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 5 - }, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"eBg" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/church) -"eBB" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"eBG" = ( -/obj/structure/fluff/globe, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"eCc" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 - }, -/obj/item/clothing/shoes/roguetown/boots/leather, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"eCq" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"eDh" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/natural/cloth, -/obj/item/natural/cloth, -/obj/item/natural/cloth, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"eDs" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 8 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"eDG" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"eDT" = ( -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"eDZ" = ( -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/cell) -"eEa" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"eEC" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"eED" = ( -/obj/structure/table/wood, -/obj/structure/bars{ - icon_state = "barsbent"; - layer = 2.81 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"eEM" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"eFD" = ( -/obj/item/rogueweapon/shield/wood, -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"eFL" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/exposed/under/sewer) -"eGB" = ( -/obj/structure/fluff/psycross, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"eGI" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 - }, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"eGK" = ( -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"eHT" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"eIh" = ( -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"eIz" = ( -/obj/item/natural/dirtclod, -/obj/structure/bars, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"eJx" = ( -/turf/closed/wall/mineral/rogue/decostone/cand, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"eJH" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 4 - }, -/obj/item/candle/skull/lit, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"eKW" = ( -/obj/structure/fluff/statue/knight, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"eLe" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors) -"eLR" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/structure/fluff/walldeco/wantedposter, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"eMo" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"eMG" = ( -/obj/structure/chair/wood/rogue/fancy{ - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town) -"eMP" = ( -/obj/structure/fluff/statue/small, -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/bath) -"eNd" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/under/cave/spider) -"eNh" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"eNj" = ( -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/exposed/manorgarri) -"eOe" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/machinery/light/rogue/wallfire/candle/blue/l, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"eOs" = ( -/obj/structure/bed/rogue/shit, -/obj/item/clothing/mask/cigarette/rollie/mindbreaker, -/obj/structure/fluff/walldeco/wantedposter, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"eOv" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"eOG" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/turf/open/transparent/openspace, -/area/rogue) -"eOQ" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"ePk" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"ePp" = ( -/obj/structure/bearpelt, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"ePz" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town) -"ePF" = ( -/obj/item/bedsheet/rogue/double_pelt, -/obj/structure/bed/rogue/wooldouble, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/tavern) -"ePO" = ( -/turf/closed/mineral/rogue, -/area/rogue/indoors/shelter/town/dwarf) -"eQe" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town/roofs) -"eRt" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/indoors) -"eRz" = ( -/obj/structure/fluff/statue/small, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/exposed/manorgarri) -"eRB" = ( -/turf/open/floor/rogue/tile/checkeralt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"eRH" = ( -/obj/machinery/light/rogue/oven/south, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors) -"eRP" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/rogue/meat/poultry, -/obj/item/reagent_containers/food/snacks/rogue/meat/poultry, -/obj/item/reagent_containers/food/snacks/rogue/meat/poultry, -/turf/open/floor/rogue/metal/barograte, -/area/rogue/outdoors/exposed/under/basement) -"eRR" = ( -/obj/item/paper/confession, -/obj/item/paper/confession, -/obj/item/paper/confession, -/obj/item/paper/confession, -/obj/item/paper/confession, -/obj/structure/closet/crate/chest{ - locked = 1; - lockid = "lord" - }, -/obj/item/keyring/inquisitor, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"eRY" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/manorgarri) -"eSc" = ( -/obj/structure/fluff/nest, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"eSn" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"eSM" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern) -"eSU" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 4 - }, -/area/rogue/indoors/town/magician) -"eTh" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/spiderbase) -"eTy" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/tavern) -"eTJ" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"eTK" = ( -/obj/item/rogueweapon/pick, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"eTT" = ( -/obj/structure/fluff/walldeco/customflag, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"eUo" = ( -/turf/open/floor/rogue/tile/checker, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"eUw" = ( -/obj/structure/table/wood, -/obj/item/ash{ - pixel_y = 9 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"eUD" = ( -/obj/machinery/light/rogue/forge, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"eVs" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/exposed/under/sewer) -"eVI" = ( -/obj/item/reagent_containers/food/snacks/crow{ - icon_state = "crow"; - dir = 8 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"eVM" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"eVP" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/church) -"eVX" = ( -/turf/closed/wall/mineral/rogue/wood, -/area/rogue/indoors/town) -"eXb" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "walls" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/church) -"eXr" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 5 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"eXI" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/outdoors/exposed/dwarf) -"eXO" = ( -/obj/structure/fluff/statue/knightalt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"eYQ" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 26 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"eZz" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"eZE" = ( -/obj/structure/closet/dirthole/closed/loot, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"eZF" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"faa" = ( -/obj/item/ammo_casing/caseless/rogue/bolt, -/obj/structure/chair/bench/ancientlog, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"fbb" = ( -/obj/structure/stairs/fancy/r{ - dir = 1 - }, -/turf/open/floor/rogue/carpet/lord/right, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fbw" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/item/clothing/shoes/roguetown/simpleshoes, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"fbL" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/outdoors/town/roofs) -"fbS" = ( -/obj/item/rogueweapon/thresher, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"fbU" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/barricade/wooden/crude, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fcg" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 4 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"fcB" = ( -/obj/structure/fluff/walldeco/painting/seraphina, -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/under/town/basement) -"fdv" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/bath) -"fdx" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/landmark/start/shepherd{ - dir = 8 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"fdH" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/dwarfin) -"fdY" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/obj/structure/spider/cocoon, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"fdZ" = ( -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"fen" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/shelter/mountains/decap) -"fex" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/cup/wooden/crafted, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"feU" = ( -/obj/structure/fluff/walldeco/rpainting/crown{ - pixel_y = 32 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"feV" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town/garrison) -"fgc" = ( -/obj/effect/decal/remains/human, -/turf/closed/mineral/rogue, -/area/rogue/under/cave/spider) -"fgs" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"fgz" = ( -/obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"fgL" = ( -/obj/structure/roguewindow, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/tavern) -"fgN" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"fgP" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/saigabuck/tame, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fgY" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fhi" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"fhv" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/under/town/basement) -"fhC" = ( -/obj/structure/roguemachine/stockpile, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town) -"fie" = ( -/obj/machinery/light/rogue/campfire/densefire, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fio" = ( -/obj/structure/fluff/walldeco/painting/queen, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/church/chapel) -"fiK" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/cloak/stole/purple, -/obj/item/clothing/cloak/raincloak/mortus, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"fkl" = ( -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"fkZ" = ( -/turf/closed/mineral/rogue, -/area/rogue/outdoors/exposed/under/sewer) -"flb" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"flC" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains) -"flQ" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/mountains) -"fmQ" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/landmark/start/vagrant{ - icon_state = "arrow"; - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"fnd" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fnq" = ( -/obj/structure/fluff/railing/border, -/obj/item/clothing/shoes/roguetown/jester, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fnK" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 - }, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/tavern) -"fnU" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"fon" = ( -/obj/structure/fluff/walldeco/masonflag{ - pixel_y = -31 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/dwarf) -"foq" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"foO" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/item/grown/log/tree/stake, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"foR" = ( -/turf/open/water/swamp/deep, -/area/rogue/outdoors/bog) -"fpb" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"fpB" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/flora/roguegrass, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/exposed/under/basement) -"fpV" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_x = -32 - }, -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fpW" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "nightman" - }, -/turf/open/floor/rogue/metal/barograte, -/area/rogue/indoors/town/bath) -"fqh" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"fqY" = ( -/obj/structure/stairs/stone{ - dir = 8 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"frf" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/indoors/shelter/town/dwarf) -"frr" = ( -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town) -"frE" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/shop) -"frM" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue) -"fsc" = ( -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"fsd" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"fsl" = ( -/obj/item/rogueweapon/huntingknife/idagger/steel/special, -/obj/item/rogueweapon/huntingknife/idagger/steel, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueweapon/huntingknife/idagger, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/shop) -"fsm" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/structure/spider/eggcluster, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"ftC" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"ftP" = ( -/obj/structure/chair/bench/church{ - icon_state = "church_benchleft"; - dir = 1 - }, -/mob/living/carbon/human/species/human/northern/bum{ - wander = 1; - name = "vagrant" - }, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"ftR" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"fuR" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"fvf" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors) -"fvn" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "lord" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/outdoors/exposed/under/basement) -"fvp" = ( -/obj/item/natural/stone, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"fvv" = ( -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/magician) -"fws" = ( -/obj/structure/chair/wood/rogue/fancy{ - dir = 1 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fwx" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fwO" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"fwP" = ( -/obj/structure/closet/crate/coffin, -/obj/effect/landmark/start/gravedigger{ - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"fwQ" = ( -/obj/structure/flora/roguegrass, -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"fwR" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fxm" = ( -/obj/structure/well, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/church) -"fxC" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"fxT" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/shelter/town/dwarf) -"fyl" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/under/town/sewer) -"fyp" = ( -/obj/structure/spider/stickyweb, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"fyE" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/magician) -"fyR" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/under/town/sewer) -"fyY" = ( -/obj/structure/fluff/psycross, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"fyZ" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"fzj" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 4 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fzE" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/neuFarm/seed/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"fBu" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fCb" = ( -/obj/structure/closet/dirthole/closed/loot, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"fCr" = ( -/obj/item/book/rogue/law, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/structure/bookcase, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"fDx" = ( -/obj/structure/bars/pipe, -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town) -"fDW" = ( -/obj/structure/flora/roguegrass, -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/mountains) -"fEa" = ( -/obj/structure/table/wood, -/obj/item/rogueweapon/huntingknife/cleaver, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"fFf" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church/chapel) -"fFz" = ( -/obj/structure/flora/roguegrass, -/obj/structure/roguerock, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fGl" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/tavern) -"fGK" = ( -/obj/structure/floordoor/gatehatch/outer{ - redstone_id = "gatelava" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"fHF" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"fHJ" = ( -/obj/structure/fluff/statue/knightalt, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"fHU" = ( -/obj/structure/table/vtable/v2, -/obj/item/reagent_containers/glass/cup, -/obj/item/reagent_containers/glass/bottle/rogue/wine{ - pixel_y = 10; - pixel_x = -11 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"fIb" = ( -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"fIm" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/exposed/under/basement) -"fJz" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"fKe" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"fKk" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"fKq" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/exposed/under/basement) -"fKy" = ( -/obj/structure/roguemachine/submission, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town) -"fKJ" = ( -/obj/structure/barricade/wooden/crude, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"fKK" = ( -/obj/structure/stairs/stone{ - dir = 8 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/sewer) -"fMD" = ( -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue) -"fMX" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/river) -"fNt" = ( -/obj/item/natural/stone, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fNw" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"fNG" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fNO" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"fOQ" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern) -"fQB" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"fQM" = ( -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"fRg" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"fRw" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fSP" = ( -/obj/structure/mineral_door/wood/donjon{ - lockid = "walls" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"fSQ" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"fSZ" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/outdoors/exposed/town) -"fTp" = ( -/obj/structure/stairs{ - dir = 1 - }, -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"fTx" = ( -/obj/structure/bed/rogue/shit, -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"fUy" = ( -/obj/effect/decal/remains/saiga, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/landmark/start/mercenarylate{ - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fVf" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/manorgarri) -"fVg" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/rtfield) -"fVh" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fVn" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern) -"fVL" = ( -/turf/closed/mineral/random/rogue, -/area/rogue/under/town/caverogue{ - first_time_text = "Abandoned Mine" - }) -"fVV" = ( -/obj/structure/bed/rogue/wooldouble, -/obj/item/bedsheet/rogue/fabric_double, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town) -"fWf" = ( -/obj/structure/toilet, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"fWk" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/manorgarri) -"fWC" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"fWZ" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fXO" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/vagrant{ - icon_state = "arrow"; - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"fXU" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"fXZ" = ( -/obj/structure/bed/rogue/mediocre, -/obj/structure/fluff/nest, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"fYv" = ( -/obj/effect/landmark/start/wapprentice{ - dir = 8 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fYN" = ( -/obj/structure/bars, -/obj/item/grown/log/tree/stake, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"fYO" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "church"; - locked = 1 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/church/chapel) -"fYS" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"fZg" = ( -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"fZx" = ( -/obj/structure/flora/roguegrass/water, -/turf/open/water/swamp/deep, -/area/rogue/outdoors/bog) -"fZF" = ( -/obj/structure/fluff/statue/small, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/tavern) -"gas" = ( -/obj/structure/closet/crate/chest{ - lockid = "butcher" - }, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/rogueweapon/huntingknife/cleaver, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"gbg" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/obj/item/rogueweapon/pick, -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"gbo" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/river) -"gbA" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"gbU" = ( -/obj/machinery/light/rogue/oven/south, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern) -"gcd" = ( -/obj/item/roguestatue/silver, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"gce" = ( -/obj/effect/landmark/start/merchant{ - dir = 4 - }, -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/shop) -"gcr" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/shop) -"gcU" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors) -"gdc" = ( -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/tavern) -"gdJ" = ( -/obj/structure/fluff/dryingrack, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gdM" = ( -/turf/closed/wall/mineral/rogue/wooddark/end, -/area/rogue/indoors/shelter/mountains) -"gdY" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 1 - }, -/area/rogue/indoors/shelter/mountains/decap) -"gey" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"geB" = ( -/obj/structure/chair/wood/rogue/fancy{ - dir = 1 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/bath) -"geD" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"gfp" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue) -"gfH" = ( -/obj/structure/toilet, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/under/town/sewer) -"gfN" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/church) -"ggn" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"ghM" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/footprints{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/old, -/obj/item/rogueweapon/stoneaxe/woodcut/steel, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"ghO" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"gif" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors) -"gio" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/manorgarri) -"gip" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"giM" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/effect/landmark/start/mercenary, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/tavern) -"gjb" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue) -"gjC" = ( -/obj/structure/fluff/walldeco/chains, -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"gjU" = ( -/obj/structure/toilet, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"gkd" = ( -/turf/closed/mineral/rogue, -/area/rogue/indoors/town/vault) -"gko" = ( -/obj/structure/chair/bench/ancientlog, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"gkO" = ( -/obj/structure/barricade/wooden/crude, -/turf/open/water/swamp, -/area/rogue/indoors) -"gkW" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "church"; - locked = 1 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"glB" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"glT" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"gma" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 5 - }, -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town) -"gna" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/town) -"gnk" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/obj/effect/landmark/start/weaponsmith{ - dir = 1 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"gnn" = ( -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/tile/checkeralt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gnE" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/shelter/town/dwarf) -"gnW" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"goc" = ( -/obj/structure/fluff/traveltile{ - aportalgoesto = "rtforestin"; - aportalid = "rtforestout" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/woods) -"gos" = ( -/obj/structure/fluff/walldeco/mona, -/obj/structure/table/wood/nice, -/obj/item/rogueweapon/lordscepter, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/vault) -"goV" = ( -/obj/structure/bed/rogue/wooldouble, -/obj/item/bedsheet/rogue/fabric_double, -/obj/structure/fluff/walldeco/painting/seraphina{ - pixel_x = 32 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gpl" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/structure/toilet, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gpy" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"gpG" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"gqM" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/grabber{ - dir = 8 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"gqY" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"grn" = ( -/obj/structure/chair/bench/ancientlog, -/obj/structure/flora/newleaf/corner{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"grD" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/mason{ - dir = 8 - }, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/shelter/town/dwarf) -"gsB" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "butcher" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gtw" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/exposed/under/basement) -"gtA" = ( -/obj/structure/fluff/statue/small, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"gtN" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"gtT" = ( -/obj/item/clothing/suit/roguetown/shirt/dress/gen/random, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"gtU" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/exposed/manorgarri) -"gtV" = ( -/obj/structure/spider/eggcluster, -/obj/structure/spider/stickyweb, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"guH" = ( -/turf/open/floor/bronze, -/area/rogue/outdoors/exposed/magiciantower) -"guL" = ( -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gvb" = ( -/obj/structure/fluff/walldeco/psybanner/red, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/church/chapel) -"gvh" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"gvS" = ( -/obj/structure/flora/roguetree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"gwE" = ( -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue) -"gwL" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/indoors) -"gwY" = ( -/obj/structure/bed/rogue/wool, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"gxx" = ( -/obj/structure/closet/dirthole/grave, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"gxJ" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/vagrant{ - icon_state = "arrow"; - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"gyc" = ( -/obj/structure/flora/roguegrass, -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"gym" = ( -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"gzv" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"gzx" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/candle/yellow/lit{ - pixel_x = -5; - pixel_y = 9 - }, -/obj/item/candle/yellow/lit{ - pixel_x = 4; - pixel_y = 1 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"gzS" = ( -/obj/structure/flora/roguetree, -/turf/open/water/swamp/deep, -/area/rogue/outdoors/bog) -"gAe" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"gAg" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"gBm" = ( -/obj/effect/decal/remains/human, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"gBN" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"gBX" = ( -/obj/structure/bars/pipe, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 8 - }, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"gBZ" = ( -/obj/structure/table/wood, -/obj/structure/bars{ - icon_state = "barsbent"; - layer = 2.81 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"gCc" = ( -/obj/effect/landmark/start/armorsmith, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"gCu" = ( -/obj/structure/fluff/railing/border, -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/clothing/mask/cigarette/pipe{ - pixel_y = 14 - }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed{ - pixel_y = 7 - }, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"gDg" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/obj/structure/fluff/railing/border, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern) -"gEo" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "graveyard" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"gFa" = ( -/obj/effect/decal/cleanable/blood/footprints, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"gFp" = ( -/obj/effect/spawner/roguemap/treeorstump, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"gFs" = ( -/obj/structure/floordoor/gatehatch/outer{ - redstone_id = "gatelava" - }, -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/structure/kybraxor{ - pixel_x = -32; - pixel_y = -32 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"gFH" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"gFI" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/shelter/town/dwarf) -"gFR" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/under/town/basement) -"gGu" = ( -/obj/effect/decal/cleanable/blood/gibs, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"gGB" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gGC" = ( -/obj/structure/fluff/clodpile, -/obj/item/natural/worms, -/obj/structure/kneestingers, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"gGM" = ( -/obj/structure/fluff/statue/small, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/under/town/basement) -"gGO" = ( -/obj/structure/flora/roguegrass/maneater/real, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"gHs" = ( -/obj/item/roguestatue/steel, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"gHu" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"gHy" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/water/swamp, -/area/rogue/outdoors/bog) -"gIz" = ( -/obj/structure/table/wood{ - icon_state = "tablewood3" - }, -/obj/item/rogueweapon/sword/iron, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"gIB" = ( -/obj/structure/roguemachine/atm, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"gIT" = ( -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"gJg" = ( -/obj/item/natural/worms, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"gJM" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/outdoors/exposed/under/basement) -"gKF" = ( -/obj/structure/bed/rogue/hay, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"gKG" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"gKV" = ( -/obj/structure/chair/bench/ultimacouch/r{ - icon_state = "ultimacochright" - }, -/obj/effect/landmark/start/nightman, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/bath) -"gMb" = ( -/obj/structure/feedinghole{ - pixel_y = 0; - pixel_x = -32 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"gMX" = ( -/obj/effect/landmark/start/manorguardsman{ - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gNf" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 8 - }, -/area/rogue/indoors/town/magician) -"gNu" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"gNJ" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"gPa" = ( -/obj/structure/fluff/grindwheel, -/obj/item/rogueweapon/stoneaxe/woodcut, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"gQS" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/tavern) -"gSj" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "manor" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gSH" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"gSS" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/shop) -"gSV" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"gTy" = ( -/obj/structure/flora/roguegrass, -/obj/structure/mineral_door/bars, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/under/sewer) -"gTE" = ( -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"gUL" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 26 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"gUR" = ( -/obj/effect/decal/remains/human, -/turf/closed/mineral/rogue, -/area/rogue) -"gVh" = ( -/obj/structure/flora/roguegrass/water/reeds, -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"gVw" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/structure/ladder, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"gVO" = ( -/obj/structure/lever/wall{ - pixel_x = 32; - redstone_id = "merchant" - }, -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/shop) -"gVW" = ( -/obj/structure/fluff/statue/knight/interior/r, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/manorgarri) -"gWF" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gXo" = ( -/obj/structure/fluff/walldeco/rpainting/forest, -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gZG" = ( -/obj/structure/mineral_door/wood/window{ - lockid = "nightman"; - locked = 1 - }, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/bath) -"gZJ" = ( -/obj/machinery/light/rogue/lanternpost, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town) -"haC" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"haL" = ( -/obj/structure/table/wood/nice, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"hbj" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/magician) -"hbE" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/reagent_containers/glass/cup/skull{ - pixel_y = 12 - }, -/obj/item/storage/box/matches, -/obj/item/rogueweapon/huntingknife/idagger/silver, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"hbO" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/magician) -"hca" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hci" = ( -/obj/structure/ladder, -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"hcr" = ( -/turf/closed/wall/mineral/rogue/decostone/cand, -/area/rogue/outdoors/exposed/under/basement) -"hcA" = ( -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"hcY" = ( -/obj/structure/table/wood/treestump{ - pixel_x = -7 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hdm" = ( -/obj/item/rogueweapon/sword/long/exe/cloth{ - desc = "The last work of a forgotten swordsmith. You can hear a heavy liquid slosh in its hollow spine." - }, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/vault) -"hdt" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"hdv" = ( -/obj/item/rogueweapon/pick, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"hes" = ( -/obj/structure/toilet, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/tavern) -"heB" = ( -/obj/structure/roguemachine/steward, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"heD" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/adventurer{ - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"heN" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"heO" = ( -/obj/structure/stairs{ - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"heX" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town) -"hfe" = ( -/obj/structure/chair/wood/rogue/fancy{ - dir = 1 - }, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"hfn" = ( -/obj/item/rogueweapon/shovel, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"hgj" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/under/town/sewer) -"hgQ" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"hht" = ( -/obj/structure/bars/grille, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"hhL" = ( -/obj/structure/fluff/statue/knight, -/obj/structure/stone_tile/slab/cracked, -/obj/structure/fluff/walldeco/psybanner{ - pixel_y = 32 - }, -/obj/structure/spider/cocoon, -/obj/structure/spider/stickyweb, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"hij" = ( -/obj/structure/flora/newleaf/corner{ - dir = 9 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"him" = ( -/obj/item/storage/roguebag, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"hio" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"hjk" = ( -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"hkD" = ( -/obj/item/rogueweapon/sickle, -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"hkU" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/storage/belt/rogue/pouch/coins/rich, -/obj/item/clothing/suit/roguetown/armor/gambeson, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak/fried, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak/fried, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"hlA" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/bush/wall, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"hlB" = ( -/obj/item/candle/yellow, -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"hmg" = ( -/obj/structure/bed/rogue/shit, -/obj/item/natural/cloth, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"hmu" = ( -/obj/item/reagent_containers/food/snacks/butter, -/obj/effect/decal/cleanable/food/egg_smudge, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"hnu" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"hom" = ( -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"hoG" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/bath) -"hoP" = ( -/obj/machinery/light/rogue/hearth, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"hpV" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/effect/decal/cobbleedge, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"hqJ" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"hqR" = ( -/obj/effect/decal/cleanable/blood/gibs/core, -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/item/rogueweapon/huntingknife/idagger, -/turf/open/transparent/openspace, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"hqY" = ( -/obj/structure/fluff/sellsign{ - desc = "The sign reads: RODE CLOSED GO LEFT" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hrp" = ( -/obj/structure/fermenting_barrel/random, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"hrw" = ( -/obj/machinery/light/rogue/forge, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"hrB" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"hsA" = ( -/obj/structure/fluff/statue/knight, -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"hsC" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hsL" = ( -/turf/closed/mineral/rogue, -/area/rogue/under/cave) -"htm" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/town/roofs) -"htQ" = ( -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hua" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 8 - }, -/turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_line"; - dir = 4 - }, -/area/rogue/indoors/town/bath) -"hub" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/manorgarri) -"hud" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/structure/fluff/millstone{ - pixel_y = 7 - }, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"hus" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"hvr" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/town/dwarf) -"hvy" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hvE" = ( -/obj/structure/closet/dirthole/closed/loot, -/obj/structure/flora/roguegrass, -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"hxl" = ( -/obj/structure/flora/rock/pile, -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hyA" = ( -/obj/structure/closet/dirthole/closed, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"hyL" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town) -"hzg" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"hzq" = ( -/obj/structure/closet/crate/roguecloset/inn, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"hzN" = ( -/obj/item/rogueore/iron, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"hAo" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"hAB" = ( -/obj/structure/roguemachine/scomm/l, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"hBb" = ( -/obj/structure/bed/rogue/shit, -/obj/item/clothing/head/roguetown/bardhat, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"hBx" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - lockid = "mage"; - max_integrity = 100000; - name = "Wizard's Tower"; - masterkey = 0 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"hBG" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"hBQ" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 2 - }, -/obj/item/clothing/cloak/raincloak/brown, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"hBY" = ( -/obj/structure/fluff/statue/gargoyle/candles, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/town/roofs) -"hCd" = ( -/obj/structure/fluff/statue/knight/r, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"hCo" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"hCy" = ( -/obj/structure/flora/roguegrass, -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/outdoors/exposed/town) -"hCF" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 8 - }, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/shelter/town/dwarf) -"hCI" = ( -/obj/effect/decal/cobbleedge{ - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"hDd" = ( -/obj/item/reagent_containers/glass/bottle/rogue/water, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"hDi" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors) -"hDn" = ( -/turf/open/floor/rogue/twig, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hDr" = ( -/obj/structure/chair/stool/rogue, -/obj/structure/fluff/walldeco/maidensigil, -/turf/open/water/bath, -/area/rogue/indoors/town/bath) -"hDz" = ( -/obj/structure/roguemachine/camera/right, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/exposed/manorgarri) -"hDE" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/exposed/under/basement) -"hDX" = ( -/obj/item/reagent_containers/glass/bottle/ethanol, -/obj/item/reagent_containers/glass/bottle/fentanyl, -/obj/item/reagent_containers/glass/bottle/fluorine, -/obj/item/reagent_containers/glass/bottle/formaldehyde, -/obj/item/reagent_containers/glass/bottle/frostoil, -/obj/structure/closet/crate/roguecloset/dark, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"hDZ" = ( -/obj/structure/roguerock, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"hEa" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue) -"hEf" = ( -/obj/item/clothing/cloak/half, -/obj/structure/closet/crate/roguecloset, -/obj/item/rope/chain, -/obj/item/rope/chain, -/obj/item/rope/chain, -/obj/item/rope, -/obj/item/rope, -/obj/item/rope, -/obj/item/melee/chainofcommand/tailwhip/kitty, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"hEl" = ( -/obj/structure/table/vtable, -/obj/item/paper/scroll, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"hGm" = ( -/obj/structure/flora/roguegrass/bush_meagre, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"hGL" = ( -/turf/closed/wall/mineral/rogue/wooddark/end, -/area/rogue/indoors/town/garrison) -"hGR" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/exposed/manorgarri) -"hHk" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hHu" = ( -/obj/structure/roguetent, -/obj/effect/decal/cleanable/blood/footprints, -/turf/open/floor/rogue/grass, -/area/rogue/indoors) -"hIX" = ( -/obj/effect/decal/cleanable/blood/puddle, -/mob/living/simple_animal/hostile/zombie, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"hJB" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern) -"hJE" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 26 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/town) -"hJJ" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town/cell) -"hKo" = ( -/obj/structure/roguerock, -/obj/structure/flora/rock/pile, -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"hKw" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern) -"hKD" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/dwarfin) -"hLd" = ( -/obj/item/ingot/steel, -/turf/closed/mineral/rogue, -/area/rogue/under/cave/spider) -"hLh" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"hLi" = ( -/mob/living/simple_animal/hostile/zombie, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"hLl" = ( -/obj/structure/bars/cemetery, -/obj/structure/flora/roguegrass, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"hLI" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"hLN" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"hLY" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/magician) -"hMK" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"hML" = ( -/obj/structure/fermenting_barrel, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"hNl" = ( -/obj/structure/stairs/d{ - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/shop) -"hNx" = ( -/obj/structure/rack/rogue{ - pixel_y = 16 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"hOu" = ( -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/bath) -"hOz" = ( -/obj/structure/flora/roguegrass, -/obj/structure/mineral_door/bars, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"hOB" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/storage/belt/rogue/pouch/coins/poor, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak/fried, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"hOH" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/flora/rock/pile, -/turf/open/water/river{ - dir = 4 - }, -/area/rogue/outdoors/river) -"hPb" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"hPn" = ( -/obj/structure/table/wood, -/obj/structure/bars{ - icon_state = "barsbent"; - layer = 2.81 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/shop) -"hPp" = ( -/obj/item/reagent_containers/glass/bottle/venom, -/obj/item/reagent_containers/glass/bottle/water, -/obj/item/reagent_containers/glass/bottle/welding_fuel, -/obj/item/reagent_containers/glass/bottle/wizarditis, -/obj/structure/closet/crate/roguecloset/dark, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"hPq" = ( -/obj/structure/mineral_door/wood, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"hPt" = ( -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"hPR" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"hQf" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"hQC" = ( -/obj/structure/mineral_door/wood/deadbolt{ - lockid = "farm" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"hQQ" = ( -/obj/structure/flora/roguegrass, -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hQT" = ( -/obj/structure/chair/stool/rogue, -/turf/open/water/bath, -/area/rogue/indoors/town/bath) -"hQV" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/spider, -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/item/ingot/steel, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"hRh" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/exposed/magiciantower) -"hRk" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/clothing/neck/roguetown/coif, -/obj/item/storage/belt/rogue/pouch/coins/poor, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak/fried, -/obj/item/clothing/suit/roguetown/shirt/undershirt/priest, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak/fried, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"hRu" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 4 - }, -/turf/open/floor/carpet/red, -/area/rogue/outdoors/exposed/under/basement) -"hRN" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"hSa" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/rogue/meat/mince/beef, -/obj/item/reagent_containers/food/snacks/rogue/meat/mince/beef, -/obj/item/reagent_containers/food/snacks/rogue/meat/mince/beef, -/obj/item/reagent_containers/food/snacks/rogue/meat/mince/beef, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"hSf" = ( -/obj/structure/fluff/statue/knight{ - name = "DVORFUNIL" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/dwarf) -"hTa" = ( -/obj/item/book/rogue/law, -/obj/structure/table/wood/nice, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"hTv" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/bigrat{ - wander = 0 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"hTy" = ( -/obj/effect/landmark/start/villager{ - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"hTM" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"hTO" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "garrison" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"hTQ" = ( -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/woods) -"hTZ" = ( -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/mountains) -"hUx" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/outdoors/exposed/magiciantower) -"hUy" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/garrison) -"hUL" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/garrison) -"hUT" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/mountains) -"hVr" = ( -/obj/machinery/light/rogue/wallfire/candle, -/obj/structure/toilet, -/obj/effect/landmark/start/priest, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"hWg" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - lockid = "dungeon" - }, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/cell) -"hWR" = ( -/obj/effect/decal/cleanable/blood/gibs/up, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"hWY" = ( -/obj/item/rogueweapon/huntingknife/idagger/silver, -/obj/structure/closet/crate/chest/gold, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/vault) -"hXk" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 - }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"hYf" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/manorgarri) -"hYT" = ( -/obj/structure/spider/stickyweb, -/obj/item/chair/stool/bar/rogue, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"hZn" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 8 - }, -/obj/structure/flora/roguegrass, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hZr" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/church) -"hZD" = ( -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/structure/closet/crate/roguecloset/dark, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"hZE" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"hZM" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hZR" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town) -"hZX" = ( -/obj/structure/flora/rock/pile, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iaf" = ( -/obj/structure/rack/rogue, -/obj/item/ammo_casing/caseless/rogue/bullet, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"iap" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/shelter/town/dwarf) -"iaC" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"ibe" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"ibl" = ( -/obj/structure/fluff/statue/tdummy, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"ibq" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ibE" = ( -/obj/structure/table/wood/nice, -/obj/structure/roguemachine/mail, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"ibG" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"icE" = ( -/obj/structure/closet/crate/chest{ - locked = 1; - lockid = "merchant" - }, -/obj/item/book/rogue/law, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"icN" = ( -/obj/structure/closet/crate/roguecloset/dark, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"idj" = ( -/obj/structure/flora/roguegrass/bush/wall, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"idx" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/dwarfin) -"idH" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"idU" = ( -/obj/effect/decal/cleanable/blood/gibs/limb{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 6 - }, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"iek" = ( -/obj/item/roguestatue/steel, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"ieC" = ( -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/exposed/manorgarri) -"ifd" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/mountains) -"ifj" = ( -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"ifq" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/wolf, -/obj/effect/sunlight, -/obj/effect/decal/remains/wolf, -/turf/open/transparent/openspace, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"ifJ" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/manorgarri) -"igK" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ihA" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"ihM" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"ihX" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/flora/roguetree/burnt, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"iim" = ( -/obj/structure/winch{ - gid = "keepin" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ije" = ( -/obj/structure/fluff/walldeco/bigpainting, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ijn" = ( -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors) -"ijC" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ijK" = ( -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"ikx" = ( -/obj/structure/fluff/railing/wood, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/dwarf) -"ikR" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/fishingrod/crafted, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/shelter/bog) -"ilE" = ( -/obj/structure/fluff/clodpile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"imT" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"inx" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"inB" = ( -/obj/structure/mirror, -/obj/structure/table/wood/nice, -/obj/item/storage/box/matches, -/obj/item/candle/lit, -/turf/open/floor/carpet/purple, -/area/rogue/under/town/basement) -"inD" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/shelter/town/dwarf) -"iox" = ( -/obj/item/roguebin, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town) -"ioQ" = ( -/obj/structure/flora/ausbushes/ppflowers, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"ioS" = ( -/obj/effect/decal/cleanable/blood/gibs/core, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"ipr" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"ipX" = ( -/obj/item/roguebin/water/gross, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"iqb" = ( -/obj/structure/fermenting_barrel, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/church) -"iqm" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"iqN" = ( -/obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 4; - locked = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"iqT" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/church) -"iqZ" = ( -/obj/structure/flora/rock/pile, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"irT" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"irY" = ( -/obj/structure/fluff/clock, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"isc" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/sword/sabre/dec, -/obj/item/natural/cloth, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"isk" = ( -/obj/effect/landmark/start/vagrant{ - icon_state = "arrow"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"iso" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/church) -"ist" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 8 - }, -/area/rogue/indoors/shelter/mountains/decap) -"isQ" = ( -/obj/item/chair/stool/bar/rogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"isW" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"itF" = ( -/obj/structure/fluff/clodpile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"iuE" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/statue/gargoyle/moss, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/sewer) -"ivi" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/shelter/mountains/decap) -"ivG" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ivL" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/railing/wood{ - icon_state = "woodrailing"; - dir = 4 - }, -/obj/structure/flora/roguegrass, -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"iwd" = ( -/obj/structure/fluff/walldeco/painting/seraphina{ - pixel_x = -32 - }, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"iwo" = ( -/obj/effect/decal/cleanable/blood/tracks{ - icon_state = "tracks"; - dir = 8 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iwE" = ( -/obj/structure/ladder, -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/obj/structure/fluff/statue/gargoyle/moss, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"iwL" = ( -/obj/structure/lever{ - redstone_id = "throneroom_grille"; - name = "The Lever" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"iwS" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/dwarf) -"iwZ" = ( -/obj/structure/lever/wall{ - redstone_id = "warehouse_shutter"; - dir = 4 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"ixh" = ( -/obj/item/reagent_containers/glass/bottle/rogue, -/obj/item/reagent_containers/glass/bottle/rogue, -/obj/item/reagent_containers/glass/bottle/rogue, -/obj/item/reagent_containers/glass/bottle/rogue, -/obj/item/reagent_containers/glass/bottle/rogue, -/obj/item/reagent_containers/glass/bottle/rogue, -/obj/item/reagent_containers/glass/bottle/rogue, -/obj/item/reagent_containers/glass/bottle/rogue, -/obj/item/reagent_containers/glass/bottle/rogue, -/obj/item/reagent_containers/glass/bottle/rogue, -/obj/structure/closet/crate/roguecloset/dark, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"ixW" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - lockid = "church"; - locked = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/church) -"ixZ" = ( -/obj/item/reagent_containers/glass/bottle/magnitis, -/obj/item/reagent_containers/glass/bottle/mercury, -/obj/item/reagent_containers/glass/bottle/nitrogen, -/obj/item/reagent_containers/glass/bottle/nutrient, -/obj/item/reagent_containers/glass/bottle/oxygen, -/obj/structure/closet/crate/roguecloset/dark, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"iyb" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/magiciantower) -"iyr" = ( -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"iyB" = ( -/obj/structure/stairs/stone, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/exposed/under/sewer) -"izd" = ( -/obj/structure/bed/rogue/shit, -/obj/item/clothing/head/roguetown/helmet/leather/inquisitor, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"izo" = ( -/obj/structure/chair/wood/rogue/fancy{ - dir = 1 - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/under/town/basement) -"iAL" = ( -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/oat, -/obj/item/neuFarm/seed/wheat, -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"iAT" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iBh" = ( -/obj/structure/bed/rogue/shit, -/obj/effect/landmark/start/orphan{ - icon_state = "arrow"; - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"iBi" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iBH" = ( -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/shop) -"iBQ" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/transparent/openspace, -/area/rogue) -"iBU" = ( -/obj/structure/mineral_door/wood/deadbolt{ - locked = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"iCp" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"iDr" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/head/roguetown/helmet/heavy/savoyard, -/obj/item/clothing/head/roguetown/helmet/heavy/savoyard, -/obj/item/keyring/guardcastle, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/garrison) -"iDN" = ( -/turf/closed/mineral/rogue, -/area/rogue/indoors/shelter/mountains) -"iDQ" = ( -/obj/structure/closet/crate/roguecloset/crafted, -/obj/item/clothing/head/roguetown/jester, -/obj/item/clothing/mask/gas/sexymime{ - name = "pantomime mask" - }, -/obj/item/clothing/mask/pig, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"iEe" = ( -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/vault) -"iEt" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 8 - }, -/area/rogue/indoors/town/magician) -"iEP" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"iEZ" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iFi" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"iFv" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/dwarfin) -"iFF" = ( -/obj/structure/fluff/railing/border, -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/cell) -"iGb" = ( -/obj/structure/table/wood, -/obj/structure/bars{ - icon_state = "barsbent"; - layer = 2.81 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/town/dwarf) -"iGd" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"iGn" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/dwarfin) -"iGx" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"iGU" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/dwarf) -"iHl" = ( -/obj/structure/spider/eggcluster, -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/item/rogueweapon/shovel, -/obj/item/rogueore/coal, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"iHy" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"iIc" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town/roofs) -"iId" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"iIo" = ( -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"iIr" = ( -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"iJu" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"iJK" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "blacksmith" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"iJO" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"iJP" = ( -/obj/effect/decal/cleanable/blood/gibs/limb, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"iKc" = ( -/obj/structure/fluff/walldeco/chains, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/metal/barograte, -/area/rogue/indoors/town/cell) -"iKe" = ( -/obj/structure/bed/rogue/wooldouble, -/obj/item/bedsheet/rogue/double_pelt, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"iKq" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/nightmaiden{ - dir = 4 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"iLu" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iLy" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 1 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"iLF" = ( -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"iLK" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"iMD" = ( -/obj/structure/bars/grille, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"iMX" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"iNk" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"iNo" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"iNB" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"iNQ" = ( -/obj/structure/flora/roguegrass/bush_meagre, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iNR" = ( -/obj/structure/table/wood/bar, -/obj/machinery/light/rogue/wallfire/candle, -/obj/item/keyring/steward, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"iNY" = ( -/obj/structure/chair/bench/ancientlog, -/turf/open/water/swamp, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iOk" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/bath) -"iOn" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains) -"iOR" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"iQt" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"iQO" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/nightmaiden{ - dir = 8 - }, -/turf/open/water/bath, -/area/rogue/indoors/town/bath) -"iRp" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town/cell) -"iRs" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"iRJ" = ( -/obj/structure/barricade/wooden/crude, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/shelter/rtfield) -"iRU" = ( -/obj/structure/roguetent, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/bath) -"iTj" = ( -/obj/effect/landmark/start/monk, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/church/chapel) -"iTK" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/dwarf) -"iTU" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue) -"iUb" = ( -/obj/structure/fluff/psycross/crafted, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"iUk" = ( -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue/under/town/basement) -"iUY" = ( -/obj/structure/fluff/statue/knight/r, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town) -"iVi" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iVM" = ( -/turf/open/water/cleanshallow, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iWf" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iWt" = ( -/obj/structure/closet/crate/roguecloset/lord, -/obj/item/kitchen/fork, -/obj/item/kitchen/fork, -/obj/item/kitchen/fork, -/obj/item/kitchen/fork, -/obj/item/kitchen/fork, -/obj/item/kitchen/fork, -/obj/item/kitchen/spoon/plastic, -/obj/item/kitchen/spoon/plastic, -/obj/item/kitchen/spoon/plastic, -/obj/item/kitchen/spoon/plastic, -/obj/item/kitchen/spoon/plastic, -/obj/item/kitchen/spoon/plastic, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"iWN" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 8 - }, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 6 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"iXi" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/turf/open/transparent/openspace, -/area/rogue/indoors) -"iXr" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"iYl" = ( -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/indoors/town/bath) -"iYv" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"iYO" = ( -/obj/structure/rack/rogue, -/obj/item/gun/magic/wand/fireball, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue) -"iZa" = ( -/obj/item/natural/stone, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/dwarf) -"jaf" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"jam" = ( -/obj/structure/rack/rogue, -/obj/item/quiver/arrows, -/obj/item/gun/ballistic/revolver/grenadelauncher/bow, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"jap" = ( -/obj/effect/landmark/latejoin, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jav" = ( -/obj/structure/toilet, -/obj/item/natural/poo, -/mob/living/carbon/human/species/human/northern/bum{ - name = "creep"; - aggressive = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"jaP" = ( -/turf/open/water/swamp/deep, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jbd" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "dungeon" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"jbl" = ( -/obj/item/clothing/shoes/roguetown/sandals, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"jbv" = ( -/obj/item/reagent_containers/food/snacks/crow, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"jbw" = ( -/obj/structure/flora/roguegrass, -/obj/machinery/light/rogue/lanternpost{ - dir = 1 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"jbx" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"jbJ" = ( -/obj/effect/decal/cobbleedge, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"jbK" = ( -/obj/structure/mineral_door/wood/donjon/stone, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/church) -"jbL" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/church) -"jcn" = ( -/obj/structure/fluff/statue/small, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"jcv" = ( -/turf/open/floor/rogue/ruinedwood, -/area/rogue) -"jcR" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/woods) -"jek" = ( -/obj/structure/bars/pipe, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/shelter/town/dwarf) -"jes" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/manorgarri) -"jeC" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 8 - }, -/area/rogue/indoors/town/dwarfin) -"jeN" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/toilet, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"jeY" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"jfx" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 1; - icon_state = "wooddir" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"jfB" = ( -/obj/structure/fluff/walldeco/masonflag{ - pixel_y = 32 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"jfH" = ( -/obj/structure/fluff/clodpile, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"jge" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 8 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"jgk" = ( -/obj/structure/fluff/walldeco/chains, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"jgY" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"jhi" = ( -/obj/structure/spider/stickyweb, -/obj/item/clothing/ring/gold, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"jhJ" = ( -/obj/structure/table/wood/fancy/royalblack, -/obj/item/scrying{ - pixel_y = 9 - }, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/magician) -"jhK" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/villager, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"jhL" = ( -/obj/structure/roguemachine/scomm/r, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"jih" = ( -/obj/structure/roguemachine/scomm, -/obj/effect/landmark/start/jester{ - icon_state = "arrow"; - dir = 4 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"jiZ" = ( -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/indoors/town) -"jja" = ( -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"jjx" = ( -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/magiciantower) -"jjF" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jjV" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueweapon/spear, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"jkc" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"jkt" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"jkv" = ( -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jkx" = ( -/turf/open/water/swamp, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jkQ" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jkR" = ( -/obj/structure/ladder, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"jlI" = ( -/obj/structure/fluff/dryingrack, -/obj/item/reagent_containers/food/snacks/rogue/raisins, -/turf/open/floor/rogue/tile/checkeralt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"jlJ" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/under/sewer) -"jlO" = ( -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jma" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/goatmale{ - name = "mountain goat"; - aggressive = 1 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"jml" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"jmK" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jmX" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"jne" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"jnF" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/outdoors/mountains) -"jnK" = ( -/obj/machinery/light/rogue/hearth, -/obj/item/cooking/pan, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"jnS" = ( -/obj/structure/rack/rogue, -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/item/clothing/ring/active/nomag, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"jon" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jpH" = ( -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue/indoors/town/garrison) -"jpW" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/goatmale{ - name = "mountain goat"; - aggressive = 1; - wander = 0 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/indoors/shelter/mountains) -"jqC" = ( -/obj/structure/bed/rogue, -/obj/structure/spider/stickyweb, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"jqM" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern) -"jrk" = ( -/obj/machinery/light/rogue/wallfire/candle/blue{ - pixel_y = 0; - pixel_x = -32 - }, -/obj/structure/fluff/globe, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"jrP" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"jrU" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "blacksmith" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/shelter/town/dwarf) -"jsb" = ( -/obj/structure/fluff/traveltile, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jsn" = ( -/turf/open/floor/rogue/twig, -/area/rogue/outdoors/mountains) -"jtc" = ( -/obj/structure/disposalpipe/broken{ - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"jtB" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/mountains) -"juf" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/mountains) -"juC" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "archive" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"jvj" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains) -"jvw" = ( -/obj/structure/fluff/railing/border, -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"jvP" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/garrison) -"jvY" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/fat/salo, -/obj/item/reagent_containers/food/snacks/rogue/meat/salami, -/obj/item/reagent_containers/food/snacks/rogue/meat/salami, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"jwk" = ( -/turf/closed/mineral/rogue, -/area/rogue/under/town/basement) -"jwm" = ( -/obj/item/chair/stool/bar/rogue, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jwr" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"jwS" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"jxL" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 - }, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/indoors/town/bath) -"jyq" = ( -/obj/structure/fluff/clock, -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"jyv" = ( -/turf/closed/mineral/rogue/salt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jyw" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/mountains) -"jyB" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town) -"jyR" = ( -/obj/structure/fermenting_barrel/beer, -/turf/open/floor/rogue/tile/checkeralt, -/area/rogue/indoors/town/tavern) -"jyY" = ( -/obj/structure/stairs/stone{ - dir = 8 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"jzs" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/natural/feather, -/obj/item/candle/yellow/lit, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"jzA" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/bigrat, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"jAe" = ( -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/cell) -"jAn" = ( -/obj/structure/bars/grille, -/turf/open/water/swamp, -/area/rogue/under/town/basement) -"jAw" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/under/town/sewer) -"jAK" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 9 - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"jAV" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/shop) -"jBh" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/rock/pile, -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jBJ" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"jBZ" = ( -/obj/structure/fluff/statue/gargoyle/moss/candles, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/town) -"jCP" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/mountains) -"jDf" = ( -/obj/effect/decal/cleanable/blood/gibs/limb, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jDn" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"jDN" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/candle/yellow, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"jDX" = ( -/obj/machinery/light/rogue/wallfire/candle/blue/l, -/turf/open/floor/rogue/metal, -/area/rogue/indoors/town) -"jDZ" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 8 - }, -/area/rogue/indoors/shelter/mountains/decap) -"jEK" = ( -/obj/item/rogueweapon/tongs, -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"jEO" = ( -/turf/closed/wall/mineral/rogue/decostone/cand, -/area/rogue/indoors) -"jEV" = ( -/obj/structure/mineral_door/wood/fancywood, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"jFh" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"jFj" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"jFP" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/decal/cleanable/blood/gibs/down, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jGc" = ( -/mob/living/simple_animal/cow, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"jGo" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"jGr" = ( -/obj/effect/landmark/latejoin, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jGA" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/bog) -"jGD" = ( -/obj/structure/roguewindow, -/obj/structure/barricade/wooden/crude, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"jGG" = ( -/obj/structure/closet/dirthole/grave, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jGY" = ( -/obj/structure/flora/rock/pile, -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jHi" = ( -/obj/structure/fluff/railing/wood, -/turf/open/transparent/openspace, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"jHy" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/structure/rack/rogue, -/obj/item/rogueweapon/spear/billhook, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/garrison) -"jIv" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"jIR" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"jIU" = ( -/obj/structure/flora/roguegrass/water, -/obj/structure/roguerock, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jJO" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/garrison) -"jLa" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/dwarf) -"jLu" = ( -/obj/effect/decal/remains/wolf, -/obj/item/ammo_casing/caseless/rogue/bolt, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jMn" = ( -/obj/structure/fluff/psycross/crafted, -/obj/structure/flora/roguegrass, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jNs" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/rtfield) -"jNH" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/sword/rapier, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"jNI" = ( -/obj/item/natural/cloth, -/obj/structure/fluff/walldeco/maidendrape, -/obj/structure/table/wood/fancy/royalblack, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/under/town/basement) -"jOm" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/structure/flora/roguegrass, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/exposed/under/basement) -"jOn" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"jOu" = ( -/turf/open/floor/rogue/greenstone, -/area/rogue/under/town/basement) -"jOB" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/outdoors/exposed/under/basement) -"jPr" = ( -/obj/item/reagent_containers/glass/cup/wooden, -/obj/effect/decal/cleanable/vomit/old, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"jPX" = ( -/obj/item/flashlight/lantern/shrunken, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"jQB" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/spawner/roguemap/hauntpile, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"jRb" = ( -/obj/machinery/light/rogue/campfire/densefire, -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jRc" = ( -/obj/structure/fluff/railing/border, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"jRf" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jSb" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/town) -"jTc" = ( -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/clothing/cloak/raincloak/furcloak/black, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"jTR" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/outdoors/exposed/dwarf) -"jTS" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/mineral_door/wood/donjon{ - lockid = "garrison" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"jTV" = ( -/obj/structure/fermenting_barrel/water, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"jUp" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"jUD" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomiv"; - name = "ROOM IV" - }, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern) -"jUG" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 8 - }, -/area/rogue) -"jUW" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"jVk" = ( -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/dwarf) -"jVq" = ( -/obj/item/roguekey/roomi, -/obj/item/roguekey/roomii, -/obj/item/roguekey/roomiii, -/obj/item/roguekey/roomiv, -/obj/structure/rack/rogue/shelf{ - density = 0 - }, -/obj/structure/table/wood, -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/tile/checkeralt, -/area/rogue/indoors/town/tavern) -"jVr" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/saigabuck/tame, -/turf/open/floor/rogue/dirt, -/area/rogue) -"jVD" = ( -/obj/structure/fluff/walldeco/steward{ - icon_state = "steward"; - dir = 1 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"jWl" = ( -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/bog) -"jWp" = ( -/obj/item/clothing/shoes/roguetown/shortboots, -/mob/living/carbon/human/species/human/northern/bum{ - name = "creep"; - aggressive = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"jWx" = ( -/obj/structure/ladder, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"jWB" = ( -/obj/structure/bars/pipe, -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"jWE" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/church) -"jXo" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jXM" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/structure/flora/roguegrass, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/exposed/under/basement) -"jYl" = ( -/obj/effect/decal/remains/xeno/larva{ - name = "child's remains"; - desc = "Truely, nothing is sacred." - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"jYy" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"jYJ" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueweapon/shield/tower/metal, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"jYW" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town) -"jZE" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"jZF" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 10 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"kas" = ( -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"kbl" = ( -/turf/open/floor/rogue/carpet/lord/right, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kbJ" = ( -/mob/living/carbon/spirit, -/obj/item/reagent_containers/glass/cup/silver, -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"kch" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/church) -"kcx" = ( -/obj/machinery/light/rogue/wallfire/candle/blue, -/obj/structure/roguemachine/scomm/r, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"kdB" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue) -"kdD" = ( -/obj/item/reagent_containers/glass/bottle/phosphorus, -/obj/item/reagent_containers/glass/bottle/plasma, -/obj/item/reagent_containers/glass/bottle/potassium, -/obj/item/reagent_containers/glass/bottle/potion/flight, -/obj/item/reagent_containers/glass/bottle/radium, -/obj/item/reagent_containers/glass/bottle/potass_iodide, -/obj/structure/closet/crate/roguecloset/dark, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"kdG" = ( -/obj/structure/closet/crate/drawer/inn{ - pixel_y = 4 - }, -/obj/item/rope, -/obj/item/book/rogue/sword, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"kdL" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"kdQ" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"keh" = ( -/obj/structure/fluff/walldeco/goblet{ - pixel_y = 11 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"kel" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/item/rogueweapon/huntingknife/stoneknife, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/shelter/bog) -"keH" = ( -/turf/open/floor/rogue/ruinedwood/turned, -/area/rogue/outdoors/bog) -"kft" = ( -/obj/structure/closet/crate/roguecloset/crafted, -/obj/item/rogueweapon/pick, -/obj/item/rogueweapon/pick, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"kfw" = ( -/obj/effect/landmark/start/manorguardsman, -/turf/open/floor/rogue/carpet/lord/right, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kgX" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"khd" = ( -/obj/structure/fluff/railing/stonehedge, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"khg" = ( -/obj/structure/closet/crate/chest, -/obj/item/clothing/ring/silver, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/vault) -"khl" = ( -/obj/structure/ladder/earth, -/obj/structure/fermenting_barrel, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"kho" = ( -/obj/structure/fluff/walldeco/masonflag{ - pixel_x = -32 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"khr" = ( -/obj/structure/flora/roguegrass/bush_meagre, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"khv" = ( -/obj/effect/spawner/roguemap/beartrap, -/turf/open/floor/rogue/ruinedwood/turned, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"khQ" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/obj/structure/flora/roguegrass/bush/wall, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"kij" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/structure/spider/stickyweb, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"kiI" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"kiO" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"kiP" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/flashlight/flare/torch/lantern, -/obj/item/keyring/sheriff, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"kjb" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kjq" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"kkl" = ( -/obj/structure/fluff/walldeco/masonflag{ - pixel_x = -32 - }, -/obj/structure/closet/crate/roguecloset/lord, -/obj/item/clothing/mask/cigarette/pipe/westman, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/cup/golden, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"kkq" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"kku" = ( -/obj/structure/fluff/walldeco/wantedposter, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"kkJ" = ( -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kmf" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/rtfield) -"kmk" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 1 - }, -/area/rogue/indoors/town/magician) -"kmu" = ( -/obj/structure/fermenting_barrel/random/beer, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"kmF" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"kmL" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "manor" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kmR" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town/shop) -"kmU" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"knj" = ( -/obj/structure/rack/rogue, -/obj/item/melee/powerfist, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue) -"knM" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"koX" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"kpf" = ( -/obj/structure/table/wood, -/obj/structure/bars{ - icon_state = "barsbent"; - layer = 2.81 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"kpt" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"kqd" = ( -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kqy" = ( -/obj/structure/fermenting_barrel/water, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"kqz" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "manor" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"kqA" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors) -"krw" = ( -/obj/structure/closet/crate/chest, -/obj/item/rogue/painting/queen, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/vault) -"ksi" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 8 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ksr" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"ksN" = ( -/obj/effect/decal/cleanable/blood/gibs/down, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"ksQ" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 8 - }, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"ksW" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ktl" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kun" = ( -/obj/structure/bed/rogue/shit, -/obj/effect/landmark/start/prisoner{ - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"kup" = ( -/obj/structure/fluff/walldeco/moon{ - pixel_x = 32 - }, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/tavern) -"kux" = ( -/obj/structure/bars/passage/shutter{ - redstone_id = "warehouse_shutter" - }, -/turf/open/floor/rogue/metal/barograte, -/area/rogue/indoors/town) -"kuA" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"kuC" = ( -/obj/structure/roguemachine/scomm{ - pixel_y = -32 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"kuJ" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"kuQ" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/gun/ballistic/revolver/grenadelauncher/crossbow, -/obj/item/quiver/bolts, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"kvv" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/under/town/basement) -"kvS" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/indoors/town/church) -"kwb" = ( -/obj/item/book/random, -/obj/item/book/random, -/obj/structure/bookcase, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"kwe" = ( -/obj/structure/flora/roguegrass, -/obj/item/roguebin, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"kwX" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"kwY" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains) -"kxa" = ( -/obj/structure/roguetent, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/bath) -"kxd" = ( -/obj/structure/flora/roguegrass, -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kxm" = ( -/obj/structure/roguemachine/scomm/l, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"kxy" = ( -/obj/structure/mineral_door/wood/window{ - locked = 1; - lockid = "manor" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kxE" = ( -/obj/structure/rack/rogue, -/obj/item/natural/saddle, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"kxQ" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/turf/closed/mineral/rogue/bedrock, -/area/rogue) -"kyb" = ( -/obj/structure/table/wood, -/obj/structure/bars{ - icon_state = "barsbent"; - layer = 2.81 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/church) -"kyH" = ( -/obj/structure/fluff/railing/border, -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town/cell) -"kyS" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"kzR" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 8; - icon_state = "donjondir"; - lockid = "steward" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"kzV" = ( -/obj/structure/bars, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"kAi" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kAz" = ( -/obj/structure/flora/roguegrass/bush/wall/tall, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"kBi" = ( -/turf/open/floor/rogue/dirt, -/area/rogue) -"kBk" = ( -/obj/structure/stairs/stone, -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/exposed/under/basement) -"kBA" = ( -/obj/structure/roguemachine/balloon_pad, -/obj/item/reagent_containers/food/snacks/crow, -/turf/open/floor/rogue/tile, -/area/rogue/outdoors/town/roofs) -"kBD" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kBN" = ( -/obj/structure/rack/rogue/shelf{ - density = 0 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"kCd" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/tavern) -"kCq" = ( -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kCS" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kDH" = ( -/obj/structure/chair/bench/ancientlog, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kEI" = ( -/obj/effect/decal/cleanable/blood/footprints, -/obj/effect/decal/cleanable/blood/tracks, -/mob/living/carbon/human/species/human/northern/bum{ - name = "creep"; - aggressive = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"kFp" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/indoors/cave) -"kFv" = ( -/obj/structure/spider/cocoon, -/obj/structure/spider/stickyweb, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"kFE" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town/vault) -"kFP" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 - }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kFZ" = ( -/obj/structure/roguemachine/mail, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/tavern) -"kGq" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"kGw" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"kGD" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/shelter/mountains/decap) -"kGL" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains) -"kGN" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/rogueweapon/thresher, -/obj/item/rogueweapon/pitchfork, -/obj/item/roguekey/walls{ - lockid = "farm"; - name = "farm key" - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"kGQ" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"kHK" = ( -/obj/structure/spider/stickyweb, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/flint, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"kHV" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains/decap) -"kIw" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern) -"kJB" = ( -/obj/structure/roguewindow/openclose, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"kJP" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kJT" = ( -/obj/item/reagent_containers/food/snacks/crow{ - icon_state = "crow"; - dir = 1 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kKa" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kKg" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/dwarf) -"kKV" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/obj/effect/decal/cobbleedge, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"kLy" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kLz" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/structure/fluff/walldeco/maidensigil, -/obj/item/roguestatue/gold, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/vault) -"kLA" = ( -/turf/open/transparent/openspace, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"kLI" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/remains/saiga, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kLM" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"kLR" = ( -/obj/structure/fluff/walldeco/wallshield{ - pixel_y = 32; - name = "DVORFTOSID" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/dwarf) -"kML" = ( -/turf/closed/mineral/random/rogue/med, -/area/rogue/indoors) -"kNj" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/shelter/mountains) -"kNA" = ( -/obj/structure/bed/rogue, -/mob/living/simple_animal/hostile/retaliate/rogue/spider, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"kOq" = ( -/obj/structure/ladder/earth, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"kOz" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kPs" = ( -/obj/structure/bed/rogue/inn/double, -/obj/item/bedsheet/rogue/double_pelt, -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"kPP" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 1 - }, -/area/rogue/indoors/town) -"kPS" = ( -/obj/structure/bed/rogue/mediocre, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"kPU" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/manorgarri) -"kQy" = ( -/obj/item/grown/log/tree/stake, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"kQF" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/shelter/rtfield) -"kRE" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"kRH" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/bog) -"kSL" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/church) -"kTK" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"kVS" = ( -/mob/living/simple_animal/hostile/zombie, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"kVX" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town) -"kVZ" = ( -/obj/structure/fluff/wallclock, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kWe" = ( -/obj/structure/chair/bench/ancientlog, -/turf/open/water/river{ - dir = 4 - }, -/area/rogue/outdoors/river) -"kWt" = ( -/obj/effect/decal/remains/human{ - desc = "For the love of god, Montressor!" - }, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"kXc" = ( -/obj/structure/rack/rogue{ - pixel_y = 16 - }, -/obj/item/quiver/bolts, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kXd" = ( -/obj/item/restraints/legcuffs/beartrap/armed, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"kXe" = ( -/obj/effect/decal/cleanable/dirt/dust, -/mob/living/simple_animal/hostile/retaliate/rogue/spider/mutated, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"kXo" = ( -/obj/machinery/light/rogue/oven/south, -/turf/open/floor/rogue/tile/checkeralt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kXJ" = ( -/obj/structure/closet/dirthole/grave, -/mob/living/simple_animal/hostile/zombie, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"kZc" = ( -/obj/structure/fluff/statue/shisha{ - pixel_x = -11 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/vault) -"kZh" = ( -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguegrass, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"lay" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"laK" = ( -/obj/structure/fermenting_barrel/water, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/mountains) -"laX" = ( -/obj/item/reagent_containers/glass/bottle/rogue/healthpot, -/obj/item/reagent_containers/glass/bottle/rogue/manapot, -/obj/item/reagent_containers/glass/bottle/rogue/poison, -/obj/item/reagent_containers/glass/bottle/rogue/water, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/structure/closet/crate/roguecloset/dark, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"lbE" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/wolf, -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/decal/remains/xeno/larva{ - name = "child's remains"; - desc = "Truely, nothing is sacred." - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"lcc" = ( -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 1 - }, -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"lcf" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcr"; - locked = 1; - lockid = "sheriff" - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"lcy" = ( -/obj/structure/closet/dirthole/closed, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lcQ" = ( -/obj/structure/chair/stool/rogue, -/mob/living/carbon/human/species/human/northern/bum{ - name = "beggar" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lcU" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"lcY" = ( -/obj/effect/decal/cleanable/blood/gibs/limb{ - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"ldB" = ( -/obj/machinery/light/rogue/firebowl/stump, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"ldZ" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"les" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/under/town/basement) -"ley" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"lfg" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 1; - icon_state = "donjondir"; - locked = 1; - lockid = "dungeon" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/cell) -"lfB" = ( -/obj/structure/roguemachine/mail/l, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"lfI" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"lgd" = ( -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 8 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"lhc" = ( -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/outdoors/exposed/under/basement) -"lhh" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/item/ash, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"lhw" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/stonehedge{ - dir = 4 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"lhF" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 4 - }, -/area/rogue) -"lhP" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/obj/item/storage/pill_bottle/dice, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"lif" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lil" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"lip" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"ljh" = ( -/obj/structure/flora/roguegrass/maneater/real, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"ljr" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"ljs" = ( -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ljz" = ( -/turf/closed/wall/mineral/rogue/tent, -/area/rogue) -"lkj" = ( -/obj/item/reagent_containers/glass/bottle/hydrogen, -/obj/item/reagent_containers/glass/bottle/iodine, -/obj/item/reagent_containers/glass/bottle/iron, -/obj/item/reagent_containers/glass/bottle/killer/weedkiller, -/obj/item/reagent_containers/glass/bottle/lithium, -/obj/structure/closet/crate/roguecloset/dark, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"lkC" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/obj/item/rogueweapon/huntingknife/stoneknife, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lkI" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/shop) -"llk" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/spider, -/obj/item/rogueore/iron, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"llQ" = ( -/obj/structure/mineral_door/wood/donjon{ - lockid = "dungeon" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"llW" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"lmp" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/keyring/guard, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"lmR" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"lnu" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/mountains/decap) -"lnO" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"lok" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"lop" = ( -/obj/structure/closet/crate/coffin, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"lov" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"loM" = ( -/obj/structure/rack/rogue, -/obj/item/gun/magic/staff/animate, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue) -"lpb" = ( -/obj/structure/bed/rogue/shit, -/obj/effect/landmark/start/farmer{ - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"lpf" = ( -/turf/closed/wall/mineral/rogue/decostone/cand, -/area/rogue/indoors/shelter/rtfield) -"lpI" = ( -/obj/structure/bars/passage{ - redstone_id = "sewer2" - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"lqH" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle, -/area/rogue/indoors/shelter/mountains/decap) -"lrh" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/dwarfin) -"lsd" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/structure/flora/roguegrass, -/obj/item/reagent_containers/glass/bottle, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"lsi" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/mason, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/shelter/town/dwarf) -"lsL" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 1; - locked = 1 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"lta" = ( -/obj/structure/fluff/railing/wood, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"lug" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/exposed/under/basement) -"luz" = ( -/obj/structure/roguemachine/scomm{ - pixel_y = -32 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"luN" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"lvr" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"lvw" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"lvI" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"lwq" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"lwu" = ( -/obj/effect/decal/cleanable/blood/gibs/core, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"lyq" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 1 - }, -/area/rogue/indoors/town/church/chapel) -"lyN" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/mountains) -"lyZ" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 1; - icon_state = "wooddir"; - locked = 1; - lockid = "farm" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"lze" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/villager{ - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"lzl" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lzr" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "shop" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"lzE" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/flashlight/flare/torch/lantern, -/obj/item/flint{ - pixel_x = -1 - }, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/town/dwarf) -"lzR" = ( -/obj/structure/chair/bench/ultimacouch, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/bath) -"lAJ" = ( -/obj/structure/closet/dirthole/grave, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"lAK" = ( -/obj/structure/bed/rogue, -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/item/bedsheet/rogue/pelt, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/magician) -"lBv" = ( -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue) -"lBE" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "church"; - locked = 1 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"lBY" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/magician) -"lCP" = ( -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"lDF" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"lDO" = ( -/obj/effect/landmark/start/servant, -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"lEl" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"lEq" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"lEA" = ( -/obj/structure/bars, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"lEG" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/statue/gargoyle/moss, -/obj/effect/landmark/start/vagrant{ - icon_state = "arrow"; - dir = 4 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lFu" = ( -/obj/structure/toilet, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/tavern) -"lFC" = ( -/obj/structure/flora/rock/pile, -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lFW" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/dice{ - pixel_y = 9; - pixel_x = -4 - }, -/obj/item/dice{ - pixel_x = 6 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"lFX" = ( -/obj/structure/flora/roguegrass, -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lGa" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/gun/ballistic/revolver/grenadelauncher/bow, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"lGx" = ( -/obj/effect/decal/cleanable/blood/footprints, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lGH" = ( -/obj/structure/closet/crate/roguecloset/lord, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/rogueweapon/huntingknife/idagger/steel, -/obj/item/reagent_containers/glass/bottle/rogue/poison, -/obj/item/clothing/mask/cigarette/rollie/mindbreaker, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue/poison, -/obj/item/keyring/nightman, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town) -"lGN" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/tile/checkeralt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"lHd" = ( -/obj/structure/fluff/walldeco/painting/seraphina{ - pixel_y = 32 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"lHe" = ( -/turf/closed/wall/shroud, -/area/rogue/indoors/shelter/rtfield) -"lHh" = ( -/obj/structure/flora/roguetree, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lHL" = ( -/obj/structure/stairs{ - dir = 4 - }, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/town/roofs) -"lHX" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/needle/thorn, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"lIh" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"lIB" = ( -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"lIP" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/obj/item/cooking/pan, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors) -"lJr" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lJI" = ( -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/exposed/under/basement) -"lJT" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/shelter/bog) -"lKi" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/manorgarri) -"lKj" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"lKn" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"lKo" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/natural/cloth, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"lKT" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave/spider) -"lKU" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "mason" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"lLj" = ( -/obj/structure/ladder, -/turf/closed/mineral/rogue/bedrock, -/area/rogue) -"lLu" = ( -/obj/item/book/rogue/knowledge1, -/obj/structure/chair/bench/couchablack/r, -/obj/item/reagent_containers/food/snacks/rogue/raisinbreadslice, -/obj/item/book/rogue/cardgame, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/magician) -"lLO" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 8 - }, -/area/rogue/indoors/town/church/chapel) -"lLZ" = ( -/obj/structure/fluff/statue/pillar, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"lMe" = ( -/turf/open/transparent/openspace, -/area/rogue/under/cave) -"lMr" = ( -/obj/structure/chair/bench/ancientlog, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lMS" = ( -/obj/structure/mineral_door/wood/window{ - lockid = "nightman" - }, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town) -"lNb" = ( -/obj/effect/decal/cleanable/blood/gibs/core, -/obj/item/clothing/head/roguetown/cookhat, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"lNk" = ( -/obj/structure/fermenting_barrel, -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"lNO" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/cell) -"lNV" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/outdoors/town/roofs) -"lNY" = ( -/obj/structure/chair/bench/ancientlog, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lOm" = ( -/obj/structure/roguemachine/scomm/r, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/shelter/town/dwarf) -"lOt" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 8; - pixel_x = 9 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue) -"lOx" = ( -/obj/structure/bed/rogue/shit, -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"lOD" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"lOS" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 5 - }, -/obj/item/natural/stone, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"lOZ" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/dwarfin) -"lPu" = ( -/obj/structure/fluff/walldeco/rpainting, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"lQd" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"lQe" = ( -/obj/structure/roguetent, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"lQI" = ( -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/under/town/sewer) -"lQT" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "mason" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"lRy" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/indoors/town/shop) -"lRz" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner, -/area/rogue/indoors/town) -"lSd" = ( -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/woods) -"lSl" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"lSo" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/indoors) -"lSv" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lTo" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 1 - }, -/area/rogue) -"lTs" = ( -/obj/structure/table/wood/nice, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"lTO" = ( -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"lUv" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/mountains) -"lUz" = ( -/obj/structure/bonepile, -/turf/open/floor/rogue/naturalstone, -/area/rogue/indoors/shelter/rtfield) -"lUI" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town) -"lVe" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - name = "manor" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"lVj" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/bog) -"lVl" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"lVz" = ( -/mob/living/carbon/human/species/human/northern/bum{ - name = "madman"; - aggressive = 1; - wander = 1; - druggy = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"lVK" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"lWG" = ( -/obj/structure/fluff/walldeco/masonflag{ - pixel_y = -31 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"lXo" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomiii"; - name = "ROOM III" - }, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/tavern) -"lXp" = ( -/obj/effect/decal/cleanable/blood/gibs/limb{ - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"lXz" = ( -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/mountains) -"lXE" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"lXP" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lYm" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/peppermill, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"lYx" = ( -/obj/structure/table/wood/treestump, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lYN" = ( -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/church) -"lYY" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"lZe" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"lZq" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/manorgarri) -"lZD" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"lZH" = ( -/obj/machinery/light/rogue/chand, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"lZL" = ( -/obj/structure/floordoor/gatehatch/outer{ - redstone_id = "gatelava" - }, -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"maO" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 32 - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/exposed/manorgarri) -"mbd" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 1 - }, -/area/rogue) -"mbn" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/garrison) -"mbs" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town) -"mbT" = ( -/obj/structure/fluff/walldeco/chains, -/obj/effect/decal/cleanable/blood/gibs/down, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"mbY" = ( -/obj/structure/fluff/railing/border, -/obj/machinery/light/rogue/firebowl/stump{ - pixel_y = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"mcG" = ( -/obj/item/roguebin/water/gross, -/obj/item/rogueweapon/spear/stone, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"mdt" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/manorgarri) -"mdy" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/decal/cleanable/blood/gibs/core, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"mdE" = ( -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/warehouse) -"mdM" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"meq" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"mes" = ( -/obj/structure/chair/bench/church/mid{ - icon_state = "church_benchmid"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"mgt" = ( -/obj/structure/lever/wall{ - dir = 8; - desc = "Let the games begin."; - redstone_id = "sewer2" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"mgy" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"mgZ" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"mhm" = ( -/obj/structure/fluff/railing/border, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/clothing/cloak/apron/waist/brown, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"mhH" = ( -/obj/structure/closet/crate/chest/lootbox, -/obj/item/roguegem/blue, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"miv" = ( -/obj/effect/landmark/start/weaponsmith{ - dir = 1 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"mjl" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue) -"mkz" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 8 - }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"mlL" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/outdoors/exposed/manorgarri) -"mlS" = ( -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/obj/structure/bed/rogue/hay, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"mmm" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"mmT" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors) -"mnd" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/manorgarri) -"mnv" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"mnK" = ( -/obj/structure/fluff/dryingrack, -/obj/item/needle/thorn, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/town) -"mop" = ( -/obj/machinery/light/rogue/hearth, -/obj/item/rogueweapon/tongs, -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"moq" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/manorgarri) -"moG" = ( -/obj/structure/flora/roguetree/evil, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"moR" = ( -/obj/item/natural/stone, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"mpf" = ( -/obj/structure/bars, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"mpi" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/outdoors/town/roofs) -"mpt" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/head/roguetown/helmet/skullcap, -/obj/item/clothing/head/roguetown/helmet/skullcap, -/obj/item/clothing/head/roguetown/helmet/skullcap, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"mpF" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/structure/closet/crate/chest{ - locked = 1; - lockid = "steward" - }, -/obj/item/ingot/silver, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town) -"mqb" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/river) -"mqf" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"mqm" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"mrL" = ( -/obj/structure/closet/crate/chest, -/obj/item/rope/chain, -/obj/item/rope/chain, -/obj/item/clothing/mask/muzzle, -/obj/item/clothing/mask/muzzle, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/cell) -"mrZ" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"msB" = ( -/obj/structure/table/wood, -/obj/item/clothing/mask/rogue/spectacles/golden, -/obj/item/flashlight/lamp{ - pixel_y = 13 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"msG" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"msX" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"mtc" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"muV" = ( -/obj/effect/decal/remains/xeno/larva{ - name = "child's remains"; - desc = "Truely, nothing is sacred." - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"muX" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue) -"mvc" = ( -/obj/structure/fluff/wallclock, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"mvj" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"mvo" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"mvr" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/obj/item/flashlight/flare/torch/lantern, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"mws" = ( -/obj/item/storage/roguebag, -/turf/open/transparent/openspace, -/area/rogue/indoors) -"mwG" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/church/chapel) -"mxj" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"mxq" = ( -/obj/structure/closet/crate/chest{ - locked = 1; - lockid = "lord" - }, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"mxB" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue) -"myf" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"myP" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"mzh" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town/dwarfin) -"mzq" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"mzw" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"mzB" = ( -/obj/structure/table/wood/bar, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/tavern) -"mzQ" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/church/chapel) -"mAD" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueweapon/huntingknife/idagger/steel, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"mAL" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"mAN" = ( -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"mAQ" = ( -/obj/item/chair/stool/bar/rogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"mBr" = ( -/turf/open/floor/rogue/metal, -/area/rogue/indoors/town) -"mBF" = ( -/obj/item/storage/bag/tray/psy, -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"mBY" = ( -/turf/closed/wall/mineral/rogue/decostone/cand, -/area/rogue/indoors/town/bath) -"mEf" = ( -/obj/structure/chair/bench/church{ - icon_state = "church_benchleft"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"mEv" = ( -/obj/structure/fluff/railing/stonehedge, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"mEx" = ( -/obj/structure/table/church, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"mEN" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcv"; - locked = 1; - lockid = "steward" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"mFe" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"mFh" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town) -"mFn" = ( -/obj/structure/table/vtable/v2, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/structure/rogue/trophy/deer, -/obj/item/natural/feather, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"mFx" = ( -/obj/item/natural/stone, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/mountains) -"mFQ" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/metal/barograte, -/area/rogue/outdoors/town) -"mGa" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/shelter/rtfield) -"mGt" = ( -/obj/structure/toilet, -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"mGz" = ( -/obj/structure/flora/newleaf/corner{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"mHd" = ( -/obj/structure/fluff/clodpile, -/obj/item/natural/poo, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"mIw" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 - }, -/obj/item/rogueweapon/stoneaxe/woodcut, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"mIZ" = ( -/obj/structure/flora/roguegrass/water, -/obj/structure/fluff/statue/small, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/exposed/manorgarri) -"mJh" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - lockid = "confession" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"mJt" = ( -/obj/structure/fluff/psycross/crafted, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"mKj" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/under/cave) -"mKx" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"mKN" = ( -/obj/structure/bed/rogue/mediocre, -/obj/item/storage/belt/rogue/pouch/coins/mid, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"mLJ" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/river) -"mMb" = ( -/obj/item/roguekey/mage, -/obj/item/clothing/mask/cigarette/rollie/cannabis{ - pixel_y = -10; - pixel_x = 10 - }, -/obj/structure/chair/bench/couchablack, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"mMc" = ( -/obj/structure/bed/rogue/mediocre, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern) -"mMv" = ( -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue) -"mMB" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"mMV" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains) -"mMW" = ( -/obj/item/roguebin/water, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"mMY" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/town/roofs) -"mNk" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 6 - }, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town) -"mNy" = ( -/obj/effect/decal/remains/xeno/larva{ - name = "child's remains"; - desc = "Truely, nothing is sacred." - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"mNM" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/manorgarri) -"mNU" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 8; - pixel_x = 9 - }, -/turf/open/transparent/openspace, -/area/rogue) -"mOl" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 5 - }, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 8 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"mOs" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue) -"mOM" = ( -/obj/structure/table/wood/treestump/burnt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"mPQ" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"mQa" = ( -/obj/structure/fluff/walldeco/bsmith{ - dir = 1 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/dwarf) -"mQf" = ( -/obj/structure/table/wood/treestump{ - pixel_x = -7 - }, -/obj/item/grown/log/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"mQB" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"mQF" = ( -/obj/item/natural/dirtclod, -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/under/town/sewer) -"mRp" = ( -/turf/open/floor/rogue/ruinedwood/turned, -/area/rogue/outdoors/river) -"mRE" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "merchant" - }, -/obj/structure/bars/passage/shutter/open{ - redstone_id = "merchant" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"mRF" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/goat{ - name = "mountain goat"; - aggressive = 1 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"mSa" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue) -"mSC" = ( -/obj/item/natural/rock/salt, -/obj/item/grown/log/tree/stake, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"mUl" = ( -/obj/structure/winch{ - gid = "townin" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"mUz" = ( -/obj/machinery/light/rogue/campfire/densefire, -/obj/effect/decal/remains/xeno/larva{ - name = "child's remains"; - desc = "Truely, nothing is sacred." - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"mUT" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"mVa" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"mVv" = ( -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"mVy" = ( -/obj/structure/roguemachine/stockpile, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"mVE" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/machinery/light/rogue/wallfire/candle/blue/r, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"mVM" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/structure/fluff/walldeco/rpainting/forest{ - pixel_x = -32 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"mVX" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 6 - }, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/dwarf) -"mWp" = ( -/obj/item/storage/belt/rogue/pouch, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"mWI" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/structure/fluff/globe, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"mWT" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"mXf" = ( -/obj/effect/decal/cleanable/blood/gibs/body, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"mXW" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"mYD" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"mYL" = ( -/obj/structure/bars/cemetery, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"mZW" = ( -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"naF" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/railing/wood{ - icon_state = "woodrailing"; - dir = 4 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"nba" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/decal/remains/saiga, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nbT" = ( -/obj/item/rogueweapon/mace/woodclub, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"nbZ" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/indoors/shelter/mountains) -"ncr" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ncu" = ( -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"ncw" = ( -/obj/structure/table/wood/treestump, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"ncE" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ncL" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/bog) -"ndb" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"ndi" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"ner" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"new" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"neF" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/reagent_containers/glass/rag{ - pixel_y = 12 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/tavern) -"neY" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"nfd" = ( -/obj/structure/rack/rogue{ - pixel_y = 16 - }, -/obj/item/rogue/instrument/lute, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"nfg" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/manorgarri) -"nfz" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/rtfield) -"nfN" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"nfW" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/river) -"ngf" = ( -/obj/effect/decal/remains/saiga, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nhZ" = ( -/obj/structure/fluff/statue/gargoyle/moss, -/turf/open/transparent/openspace, -/area/rogue/outdoors/mountains) -"niQ" = ( -/obj/structure/flora/rock/jungle, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"nji" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/cell) -"njo" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/church) -"njt" = ( -/obj/structure/bed/rogue/wooldouble, -/obj/item/bedsheet/rogue/double_pelt, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/tavern) -"njE" = ( -/obj/effect/landmark/start/vagrant{ - icon_state = "arrow"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town/church/chapel) -"njK" = ( -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"njU" = ( -/turf/open/water/swamp, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"nkp" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern) -"nlc" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors) -"nll" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/manorgarri) -"nlv" = ( -/obj/item/rogueore/coal, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"nlJ" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"nlR" = ( -/obj/structure/flora/roguegrass/bush_meagre, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"nlS" = ( -/obj/structure/fluff/railing/wood, -/obj/item/rope, -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nmu" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 8 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"nmF" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town) -"nmL" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"nmN" = ( -/obj/structure/bars/passage{ - redstone_id = "sewer3" - }, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"nnc" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nnd" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern) -"nnr" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"nnB" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 10 - }, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town) -"nnN" = ( -/obj/effect/landmark/start/armorsmith{ - dir = 8 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"non" = ( -/obj/structure/fluff/walldeco/wantedposter, -/obj/structure/mineral_door/swing_door{ - lockid = "tavern"; - locked = 1 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/tavern) -"noo" = ( -/obj/structure/plasticflaps, -/obj/structure/kneestingers, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"noC" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/manorgarri) -"noG" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"noV" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"npt" = ( -/obj/structure/roguerock, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"npJ" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains) -"nrS" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"nsy" = ( -/obj/structure/fluff/statue/knight/interior, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"nsE" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/obj/structure/flora/roguegrass, -/turf/open/floor/bronze, -/area/rogue/outdoors/mountains) -"nsF" = ( -/obj/structure/bars/cemetery, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ntq" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"nuc" = ( -/obj/structure/toilet, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/under/town/sewer) -"nuo" = ( -/obj/structure/fluff/psycross/crafted, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nva" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/dwarf) -"nvC" = ( -/obj/structure/stairs/fancy/c{ - dir = 1 - }, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"nvR" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"nwn" = ( -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"nxn" = ( -/obj/structure/fluff/walldeco/innsign{ - alpha = 200; - layer = 4.1; - level = 2; - pixel_y = -15 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"nxD" = ( -/obj/structure/spider/spiderling, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/spiderbase) -"nxY" = ( -/obj/structure/lever/wall{ - dir = 8; - desc = "Let the games begin."; - redstone_id = "sewer3" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"nyj" = ( -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 8 - }, -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"nyp" = ( -/obj/effect/decal/cleanable/blood/gibs/up{ - pixel_x = -13; - pixel_y = -17 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nyQ" = ( -/obj/item/rogueweapon/pitchfork, -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 1 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"nzk" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 4 - }, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/tavern) -"nzD" = ( -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"nzO" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"nzX" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/dwarf) -"nzY" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/outdoors/exposed/town) -"nAp" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nAt" = ( -/obj/machinery/light/rogue/hearth, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"nAH" = ( -/obj/structure/fluff/walldeco/customflag, -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"nBX" = ( -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"nCg" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town) -"nDi" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"nDD" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"nDJ" = ( -/obj/effect/spawner/roguemap/treeorbush, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"nDR" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/goatmale{ - name = "mountain goat"; - aggressive = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"nDW" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nEL" = ( -/obj/structure/table/wood/nice, -/obj/item/reagent_containers/glass/cup/steel{ - pixel_y = 14; - pixel_x = -7 - }, -/obj/item/reagent_containers/glass/cup/steel{ - pixel_y = 14; - pixel_x = 9 - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/under/town/basement) -"nFQ" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/mace/wsword, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"nFY" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 8 - }, -/area/rogue/indoors/shelter/mountains) -"nGi" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"nGj" = ( -/obj/structure/spider/cocoon, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"nGr" = ( -/obj/item/natural/stone, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"nGC" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/cell) -"nHh" = ( -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town) -"nHP" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nHQ" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"nHS" = ( -/obj/effect/decal/remains/saiga, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nIR" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"nIW" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 8 - }, -/area/rogue/indoors/town) -"nJf" = ( -/obj/structure/fluff/statue/knight, -/obj/effect/landmark/start/vagrant{ - icon_state = "arrow"; - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"nJk" = ( -/obj/item/natural/rock/coal, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"nJr" = ( -/obj/structure/fluff/railing/stonehedge, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"nJP" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/roguestatue/gold/loot, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"nJQ" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/town) -"nKz" = ( -/obj/structure/flora/roguegrass, -/obj/machinery/light/rogue/lanternpost, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"nKA" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"nLA" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"nLP" = ( -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/bath) -"nMd" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"nMe" = ( -/obj/structure/fluff/railing/border, -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"nMn" = ( -/obj/structure/lever/wall{ - dir = 8; - desc = "Let the games begin."; - redstone_id = "fightclub" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"nMo" = ( -/obj/effect/decal/remains/saiga, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"nMy" = ( -/obj/structure/portal, -/turf/closed/mineral/rogue/bedrock, -/area/rogue) -"nNx" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors) -"nNJ" = ( -/obj/effect/landmark/start/butler{ - icon_state = "arrow"; - dir = 4 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"nOe" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/ingot/steel, -/obj/item/ingot/steel, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"nOp" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"nPx" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 8 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nPR" = ( -/obj/structure/fluff/clock, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"nQu" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"nQA" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/structure/fluff/walldeco/wantedposter, -/obj/item/paper, -/obj/item/keyring/gatemaster, -/obj/item/natural/feather, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"nRb" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/indoors) -"nRo" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/border, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"nRE" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/obj/effect/landmark/start/beastmonger, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"nRN" = ( -/obj/structure/bars/passage{ - redstone_id = "sewer4" - }, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"nRT" = ( -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/garrison) -"nRU" = ( -/obj/structure/flora/rock/pile, -/obj/item/natural/stone, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"nSF" = ( -/obj/structure/stairs{ - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"nSS" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"nSX" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 4 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"nTd" = ( -/obj/machinery/light/rogue/lanternpost, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"nTe" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"nTh" = ( -/obj/structure/fluff/statue/small, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/vault) -"nTz" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"nUh" = ( -/obj/structure/chair/stool/rogue, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"nUi" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/dwarf) -"nUn" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"nUu" = ( -/obj/structure/stairs/stone, -/obj/structure/fluff/walldeco/bsmith, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/dwarf) -"nVd" = ( -/obj/structure/fluff/walldeco/wantedposter, -/obj/effect/decal/cleanable/blood/old, -/obj/item/rope/chain, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"nVh" = ( -/obj/structure/bed/rogue, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"nVH" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - lockid = "church" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"nWf" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"nWE" = ( -/obj/structure/roguewindow/stained, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"nXs" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/mountains) -"nXA" = ( -/turf/open/transparent/openspace, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"nXK" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"nYt" = ( -/obj/item/chair/stool/bar/rogue, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/spiderbase) -"nYB" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/structure/stone_tile/block/cracked, -/obj/effect/decal/cleanable/dirt/dust, -/mob/living/simple_animal/hostile/retaliate/rogue/spider/mutated, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/spiderbase) -"nZp" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"nZC" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_x = -32 - }, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"oat" = ( -/obj/structure/fluff/statue/knight/interior/r, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"oay" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oaH" = ( -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/cell) -"oaU" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town) -"oaV" = ( -/obj/structure/fermenting_barrel/water, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"obb" = ( -/obj/structure/rack/rogue, -/obj/structure/fluff/walldeco/painting{ - pixel_y = 32 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"obC" = ( -/obj/structure/ladder/earth, -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"obJ" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue) -"ocA" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"ocJ" = ( -/obj/item/natural/bundle/stick, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"ocP" = ( -/obj/machinery/light/rogue/oven{ - pixel_y = 32 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"ocQ" = ( -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ocX" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/shelter/rtfield) -"oda" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"odm" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/exposed/magiciantower) -"odw" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/goat/goatlet{ - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"odO" = ( -/obj/item/reagent_containers/food/snacks/crow, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"oem" = ( -/obj/structure/closet/crate/coffin, -/obj/item/bodypart/head/goblin, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"oeV" = ( -/obj/structure/fluff/walldeco/stone{ - pixel_x = 0; - pixel_y = 32 - }, -/obj/structure/bed/rogue/hay, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"ofr" = ( -/obj/structure/roguewindow/openclose, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"ofA" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"ogl" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/indoors/town/garrison) -"ogx" = ( -/turf/closed/wall/mineral/rogue/wooddark/end, -/area/rogue/outdoors/exposed/dwarf) -"ogP" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/obj/structure/fluff/millstone{ - pixel_y = 7 - }, -/turf/open/floor/rogue/tile/checker, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ohj" = ( -/obj/machinery/light/roguestreet{ - dir = 1 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/dwarf) -"oiu" = ( -/obj/structure/flora/ausbushes/ppflowers, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"oiA" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"oiJ" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/exposed/under/basement) -"ojm" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/butter, -/obj/item/reagent_containers/food/snacks/butter, -/obj/item/reagent_containers/food/snacks/butter, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"ojw" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"ojT" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"okj" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"oko" = ( -/obj/item/storage/belt/rogue/pouch/coins/poor, -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"okB" = ( -/obj/structure/fluff/walldeco/wantedposter, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"okM" = ( -/obj/machinery/light/rogue/wallfire/candle/blue{ - pixel_y = 0; - pixel_x = -32 - }, -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 - }, -/obj/item/natural/feather{ - pixel_y = -5; - pixel_x = 5 - }, -/obj/item/candle/skull/lit{ - pixel_x = -1; - pixel_y = 7 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"olb" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"old" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town/church) -"omc" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"omH" = ( -/turf/open/water/cleanshallow, -/area/rogue/under/town/sewer) -"omY" = ( -/obj/structure/fluff/walldeco/chains, -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"ony" = ( -/obj/structure/mineral_door/wood/donjon{ - icon_state = "donjondir"; - locked = 1; - lockid = "shop" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"onA" = ( -/obj/structure/bed/rogue/inn/double, -/obj/item/bedsheet/rogue/fabric_double, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"onR" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueore/iron, -/obj/item/rogueore/iron, -/obj/item/rogueore/iron, -/obj/item/rogueore/iron, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"onS" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"onX" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"onY" = ( -/obj/effect/landmark/start/vagrant{ - icon_state = "arrow"; - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"ool" = ( -/obj/effect/spawner/roguemap/treeorbush, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"ooJ" = ( -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"opd" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"opi" = ( -/obj/structure/roguemachine/scomm/l, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"opr" = ( -/obj/structure/flora/ausbushes/ppflowers, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"opK" = ( -/turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_corner" - }, -/area/rogue/indoors/shelter/town/dwarf) -"opS" = ( -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/woods) -"opX" = ( -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"opZ" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"oqp" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oqv" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"oqz" = ( -/obj/structure/ladder/earth, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"oqC" = ( -/obj/structure/flora/roguegrass, -/obj/machinery/light/rogue/lanternpost, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"oqL" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"oqX" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/stonehedge{ - dir = 4 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oqY" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/magiciantower) -"orD" = ( -/obj/structure/rack/rogue, -/obj/item/flashlight/glowstick/cyan{ - icon = 'icons/roguetown/items/gems.dmi'; - icon_state = "quartz_cut"; - name = "glowstone"; - lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'; - righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' - }, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/magician) -"orW" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 8 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"osa" = ( -/obj/structure/chair/stool/rogue, -/obj/structure/fluff/railing/border, -/obj/effect/landmark/start/mercenary{ - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"osA" = ( -/obj/structure/flora/roguetree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"osG" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"osR" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"otv" = ( -/obj/item/flashlight/flare/torch/lantern, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"ouq" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"ouS" = ( -/obj/item/rogueweapon/huntingknife/idagger, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/shelter/mountains/decap) -"ouU" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ovf" = ( -/obj/structure/fluff/walldeco/bigpainting, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ovm" = ( -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"owj" = ( -/obj/structure/fluff/walldeco/chains, -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/cell) -"owy" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town) -"owT" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/reagent_containers/glass/cup, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"owX" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"oxf" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town) -"oxm" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/water/swamp, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"oxu" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"oxH" = ( -/obj/structure/well, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oxU" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/wolf, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"oyu" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueweapon/hammer, -/obj/item/rogueweapon/hammer, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"oyy" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/garrison) -"oyB" = ( -/obj/structure/bars/cemetery, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"oyK" = ( -/obj/structure/table/vtable, -/obj/item/roguekey/nightman, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/bath) -"ozE" = ( -/obj/structure/fluff/walldeco/stone{ - pixel_x = 0; - pixel_y = 32 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"ozH" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/manorgarri) -"ozQ" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"oAo" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"oAV" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) -"oBO" = ( -/obj/structure/statue/bone/skull, -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"oBU" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/wood{ - icon_state = "woodrailing"; - dir = 8; - pixel_y = -1 - }, -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"oDe" = ( -/obj/item/roguegem/green, -/obj/structure/closet/crate/chest{ - locked = 1; - lockid = "merchant" - }, -/obj/item/reagent_containers/glass/bottle/rogue/manapot, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"oDo" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 4 - }, -/area/rogue/indoors/town/garrison) -"oDK" = ( -/turf/closed/mineral/rogue, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"oDM" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"oEc" = ( -/obj/structure/closet/dirthole/grave, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"oEf" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"oEj" = ( -/turf/closed/mineral/random/rogue, -/area/rogue/outdoors/mountains) -"oEI" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern) -"oFd" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/magician) -"oFk" = ( -/obj/structure/flora/roguegrass, -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"oFq" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"oFv" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oFw" = ( -/obj/effect/decal/cobbleedge, -/turf/open/floor/rogue/dirt, -/area/rogue/under/town/sewer) -"oFV" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/indoors/shelter/town/dwarf) -"oFX" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/outdoors/town) -"oGq" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/gibs/limb, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"oGx" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/outdoors/town/roofs) -"oGZ" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"oHq" = ( -/obj/structure/table/wood{ - layer = 2.8 - }, -/obj/item/paper/bsmith, -/obj/item/flint, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"oHK" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"oHL" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - name = "manor" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"oIj" = ( -/obj/structure/rack/rogue{ - pixel_y = 16 - }, -/obj/item/rope/chain{ - pixel_y = 11 - }, -/turf/open/floor/carpet/purple, -/area/rogue/under/town/basement) -"oII" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"oIO" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/dwarf) -"oJo" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/manorgarri) -"oJs" = ( -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) -"oJQ" = ( -/obj/structure/table/wood/treestump{ - pixel_x = -7 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oKg" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"oKl" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/cell) -"oLl" = ( -/obj/structure/fluff/statue/gargoyle/moss, -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town/roofs) -"oLC" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/border, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"oLO" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/natural/stone, -/obj/item/natural/stone, -/obj/item/natural/stone, -/obj/item/natural/stone, -/obj/item/natural/stone, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"oMj" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"oMz" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/church) -"oMB" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"oNh" = ( -/obj/item/gavelblock, -/obj/item/gavelhammer{ - name = "gavel" - }, -/obj/structure/table/vtable, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/under/town/basement) -"oNm" = ( -/obj/structure/flora/roguegrass, -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"oNx" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"oOm" = ( -/obj/structure/flora/roguegrass, -/obj/structure/closet/dirthole/closed/loot, -/obj/structure/gravemarker, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oOw" = ( -/obj/effect/decal/remains/saiga, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oOB" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/dwarf) -"oOX" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/outdoors/exposed/under/sewer) -"oPj" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 4 - }, -/area/rogue/indoors/shelter/town/dwarf) -"oPp" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/obj/item/bikehorn/rubberducky{ - pixel_y = 1 - }, -/obj/item/natural/bundle/cloth, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"oPv" = ( -/obj/structure/flora/ausbushes/ppflowers, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oQh" = ( -/obj/structure/ladder/earth, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"oRk" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/mountains/decap) -"oRn" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - lockid = "blacksmith"; - name = "door" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"oRq" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/farmer{ - dir = 8 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"oRy" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/structure/mineral_door/swing_door{ - locked = 1; - lockid = "archive"; - keylock = 1 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"oRK" = ( -/obj/structure/roguewindow/openclose, -/turf/open/floor/rogue/wood, -/area/rogue/indoors) -"oRX" = ( -/obj/structure/flora/roguegrass, -/mob/living/simple_animal/hostile/retaliate/rogue/goat, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"oSt" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 4 - }, -/area/rogue/indoors/town) -"oSu" = ( -/obj/structure/gate/bars/preopen, -/obj/structure/mineral_door/wood/fancywood{ - lockid = "manor" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"oSU" = ( -/turf/closed/mineral/rogue, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oTq" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/exposed/dwarf) -"oTy" = ( -/turf/closed/mineral/rogue, -/area/rogue/under/cave/spider) -"oTB" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/shelter/town/dwarf) -"oTL" = ( -/obj/structure/bars, -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"oTO" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/greenstone, -/area/rogue/under/town/basement) -"oTW" = ( -/obj/structure/fluff/grindwheel, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"oUl" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"oVe" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 - }, -/obj/item/rogueweapon/sickle, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"oVv" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"oVT" = ( -/obj/effect/spawner/roguemap/treeorbush, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oVX" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"oWe" = ( -/obj/structure/fluff/railing/wood, -/turf/open/transparent/openspace, -/area/rogue) -"oWg" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/wolf, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oWJ" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/clothing/cloak/apron/brown, -/obj/item/book/rogue/beardling, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"oXb" = ( -/obj/structure/fluff/statue/psy, -/obj/structure/stone_tile/slab/cracked, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"oXi" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/clothing/cloak/half/red, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"oXn" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/spider, -/obj/structure/spider/stickyweb, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"oXq" = ( -/obj/structure/rack/rogue, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"oXJ" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"oXM" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern) -"oYu" = ( -/obj/structure/table/vtable, -/obj/item/reagent_containers/glass/cup, -/obj/item/candle/yellow/lit{ - pixel_y = 11; - pixel_x = 10 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"oYw" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/structure/flora/rock/pile, -/obj/effect/decal/cleanable/food/tomato_smudge, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"oYE" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"oYY" = ( -/obj/structure/handcart{ - icon_state = "cart-empty"; - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"oZR" = ( -/obj/structure/mirror{ - pixel_x = 28; - pixel_y = 0 - }, -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"oZT" = ( -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"pak" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"pas" = ( -/obj/structure/mineral_door/wood/window{ - lockid = "manor"; - name = "hall of eating" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"paT" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"pbt" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 - }, -/obj/item/reagent_containers/powder, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/indoors/town/bath) -"pbD" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/outdoors/exposed/under/basement) -"pcd" = ( -/obj/structure/rack/rogue, -/obj/item/storage/belt/rogue/pouch, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"pch" = ( -/obj/effect/decal/remains/human, -/obj/item/rogueweapon/pick, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"pcD" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcv"; - lockid = "merchant" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"pdc" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"pdq" = ( -/turf/open/floor/rogue/metal/barograte, -/area/rogue/outdoors/town) -"pdy" = ( -/obj/structure/mineral_door/wood/donjon{ - locked = 1; - lockid = "walls"; - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"pdG" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/shelter/rtfield) -"pdL" = ( -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"pdQ" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"pef" = ( -/obj/structure/roguewindow, -/obj/structure/bars/passage/shutter/open{ - redstone_id = "merchant" - }, -/obj/structure/barricade/wooden/crude, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/shop) -"peo" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/shelter/rtfield) -"peE" = ( -/obj/structure/fluff/walldeco/rpainting{ - pixel_y = 32 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"peW" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"pfh" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 1 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"pfi" = ( -/obj/structure/flora/roguegrass{ - pixel_x = -1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"pfm" = ( -/obj/structure/chair/wood/rogue/fancy, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/magician) -"pfN" = ( -/obj/effect/decal/cleanable/blood/tracks{ - icon_state = "tracks"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"pfP" = ( -/obj/effect/landmark/start/vagrant{ - icon_state = "arrow"; - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"pfY" = ( -/obj/structure/disposalpipe/broken{ - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"pgK" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town) -"pha" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"phc" = ( -/obj/structure/fluff/statue/shisha{ - pixel_x = -11 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/item/reagent_containers/food/snacks/chocolatebunny, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"phf" = ( -/obj/structure/mineral_door/wood/red, -/turf/open/floor/rogue/cobblerock, -/area/rogue/under/town/sewer) -"phC" = ( -/obj/structure/bed/rogue/hay, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"phV" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/roguekey/walls{ - lockid = "butcher"; - name = "butcher's key" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"phY" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"pja" = ( -/obj/structure/rack/rogue{ - pixel_y = 16 - }, -/obj/item/clothing/cloak/raincloak/mortus, -/obj/item/clothing/cloak/raincloak/mortus, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"pjU" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/indoors/town) -"pkn" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/remains/human, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"pkE" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue) -"pkV" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/warehouse) -"pla" = ( -/obj/structure/mineral_door/wood/donjon/stone, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"plB" = ( -/obj/machinery/light/rogue/hearth, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors) -"plJ" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"plT" = ( -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"plV" = ( -/obj/structure/roguewindow/stained, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"pmr" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 8 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"pms" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/outdoors/town) -"pmz" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"pmF" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/roguemachine/scomm/l, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"pnK" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"pnL" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/dwarf) -"poc" = ( -/obj/structure/flora/roguegrass, -/obj/structure/roguerock, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"pod" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/dwarf) -"pov" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"poA" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/woods) -"poE" = ( -/obj/effect/decal/remains/saiga, -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"poF" = ( -/obj/structure/closet/crate/coffin, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"poG" = ( -/obj/machinery/light/rogue/hearth, -/obj/effect/decal/cleanable/food/flour, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ppn" = ( -/obj/structure/table/vtable/v2, -/obj/structure/bars/pipe, -/obj/item/natural/feather, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"ppo" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"ppJ" = ( -/obj/structure/bed/rogue/mediocre, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"ppM" = ( -/obj/structure/closet/dirthole/closed/loot, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"ppN" = ( -/obj/structure/fluff/clodpile, -/obj/structure/kneestingers, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"ppO" = ( -/obj/structure/closet/crate/chest{ - locked = 1; - lockid = "lord" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"ppV" = ( -/obj/structure/fluff/walldeco/customflag, -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"pqk" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"pql" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/outdoors/exposed/under/sewer) -"pqq" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/fat, -/obj/item/reagent_containers/food/snacks/fat, -/obj/item/reagent_containers/food/snacks/fat, -/obj/item/reagent_containers/food/snacks/fat, -/obj/item/reagent_containers/food/snacks/fat, -/obj/item/reagent_containers/food/snacks/fat, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"pqP" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/toy/cards/deck, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/garrison) -"pqS" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/obj/structure/roguemachine/camera/left, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 6 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"prj" = ( -/obj/item/clothing/suit/roguetown/shirt/robe/wizard, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/clothing/head/roguetown/wizhat, -/obj/item/clothing/head/roguetown/wizhat/gen, -/obj/item/clothing/cloak/raincloak/blue, -/obj/item/clothing/mask/cigarette/pipe/westman, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"pro" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/under/town/sewer) -"pru" = ( -/turf/closed/mineral/random/rogue/med, -/area/rogue) -"prv" = ( -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/under/town/basement) -"prU" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"psp" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue) -"ptm" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ptr" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ptt" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/dwarf) -"puh" = ( -/turf/open/floor/carpet/inn, -/area/rogue/under/town/basement) -"puJ" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_y = -32 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"pwa" = ( -/obj/structure/fluff/dryingrack, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"pwc" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"pwX" = ( -/obj/structure/bookcase/random/reference, -/obj/item/book/rogue/secret/xylix, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"pxa" = ( -/obj/effect/decal/remains/saiga, -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"pxg" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fermenting_barrel, -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"pxn" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/effect/decal/cleanable/food/tomato_smudge, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"pxM" = ( -/obj/structure/lever/wall{ - pixel_x = 32; - redstone_id = "balloon_shutter" - }, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"pxU" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"pyU" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/dwarf) -"pzz" = ( -/obj/structure/flora/ausbushes/reedbush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"pzV" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/mountains) -"pAW" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"pBo" = ( -/obj/structure/bed/rogue/wool, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/shop) -"pBw" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"pBG" = ( -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"pBS" = ( -/obj/structure/table/wood{ - icon_state = "tablewood3" - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"pBW" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 4 - }, -/area/rogue/indoors/town/church/chapel) -"pCm" = ( -/obj/effect/landmark/start/guardsman{ - icon_state = "arrow"; - dir = 1 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/manorgarri) -"pCp" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"pCG" = ( -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"pCU" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/outdoors/exposed/under/basement) -"pCW" = ( -/obj/structure/fluff/statue/knight/r, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"pDj" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/decal/remains/saiga, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"pEe" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/water/swamp/deep, -/area/rogue/outdoors/bog) -"pEE" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"pEH" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"pFc" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomi"; - name = "ROOM I" - }, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern) -"pFD" = ( -/turf/closed/mineral/random/rogue, -/area/rogue/indoors/shelter/mountains) -"pGh" = ( -/obj/structure/toilet, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"pHk" = ( -/obj/item/reagent_containers/glass/cup/skull, -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"pHp" = ( -/obj/structure/flora/roguegrass/water, -/obj/structure/flora/roguegrass, -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/bog) -"pHH" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/grindwheel, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"pHY" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"pKh" = ( -/obj/structure/fermenting_barrel/water, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"pKw" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"pKE" = ( -/obj/structure/floordoor/gatehatch/inner{ - redstone_id = "gatelava" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"pLb" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town) -"pLO" = ( -/obj/structure/roguemachine/musicbox, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"pLZ" = ( -/obj/structure/mineral_door/wood/donjon{ - locked = 1; - lockid = "walls" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"pMg" = ( -/obj/item/roguebin/water/gross, -/obj/item/natural/cloth, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"pNm" = ( -/obj/structure/kneestingers, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"pNI" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"pOA" = ( -/obj/effect/decal/remains/human, -/obj/machinery/light/rogue/campfire/densefire, -/obj/structure/fluff/psycross{ - pixel_y = 14 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"pOI" = ( -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/clothing/suit/roguetown/shirt/rags, -/obj/item/roguegem/yellow, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"pPO" = ( -/obj/structure/stairs/stone{ - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"pPX" = ( -/obj/machinery/light/rogue/wallfire/candle/blue{ - pixel_y = 0; - pixel_x = 31 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"pQi" = ( -/obj/structure/bars/pipe, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 9 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"pQS" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"pRT" = ( -/obj/structure/roguetent, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/rtfield) -"pSa" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/tavern) -"pSx" = ( -/obj/item/natural/rock/iron, -/obj/structure/fluff/walldeco/masonflag{ - pixel_y = 32 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"pSV" = ( -/obj/effect/landmark/start/farmer{ - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"pTJ" = ( -/obj/structure/roguemachine/stockpile, -/obj/item/rogueore/coal, -/obj/item/rogueore/coal, -/obj/item/rogueore/coal, -/obj/item/rogueore/coal, -/obj/item/rogueweapon/shovel/small, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"pTV" = ( -/obj/structure/fluff/millstone, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"pUL" = ( -/obj/structure/fluff/walldeco/maidensigil, -/turf/open/water/bath, -/area/rogue/indoors/town/bath) -"pUM" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/handheld_bell, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/church/chapel) -"pUU" = ( -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"pUX" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"pUZ" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"pVa" = ( -/obj/structure/fluff/railing/stonehedge, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"pVx" = ( -/obj/effect/landmark/start/manorguardsman, -/turf/open/floor/rogue/carpet/lord/left, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"pVK" = ( -/obj/structure/roguemachine/scomm/r, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"pVQ" = ( -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/under/town/basement) -"pVX" = ( -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"pXe" = ( -/obj/structure/mineral_door/swing_door{ - lockid = "merchant"; - locked = 1; - keylock = 1 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"pXo" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 4 - }, -/area/rogue/indoors/shelter/mountains/decap) -"pXu" = ( -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town) -"pXy" = ( -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"pXN" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"pYg" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"pYn" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 8 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"pYM" = ( -/turf/closed/wall/mineral/rogue/tent, -/area/rogue/indoors) -"pYT" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"pZc" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"pZz" = ( -/obj/item/rogueweapon/spear/stone, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"qai" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/rtfield) -"qaV" = ( -/obj/structure/fluff/statue/gargoyle/moss, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qbe" = ( -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/garrison) -"qbm" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/under/town/basement) -"qbB" = ( -/obj/structure/table/wood, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"qbM" = ( -/obj/structure/roguemachine/mail/r, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"qcp" = ( -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qcq" = ( -/obj/structure/mineral_door/wood/violet{ - locked = 1; - lockid = "hand" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qcx" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"qcD" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 1 - }, -/area/rogue/indoors/town/tavern) -"qdU" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"qdW" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"qel" = ( -/obj/structure/fluff/dryingrack, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"qer" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town) -"qeI" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"qeO" = ( -/turf/closed/wall/mineral/rogue/decostone/cand, -/area/rogue/indoors/town/church) -"qeY" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguetree/evil, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qfc" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qfi" = ( -/obj/structure/closet/crate/drawer, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/item/clothing/head/roguetown/bardhat{ - pixel_y = 7 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qfT" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"qgf" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/spider/cocoon, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"qgE" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/cell) -"qgJ" = ( -/mob/living/simple_animal/hostile/zombie, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"qhw" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"qhX" = ( -/obj/structure/rack/rogue, -/obj/item/quiver/arrows, -/obj/item/gun/ballistic/revolver/grenadelauncher/crossbow, -/obj/item/quiver/arrows, -/obj/item/gun/ballistic/revolver/grenadelauncher/crossbow, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"qij" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"qio" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"qiP" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 6 - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"qiW" = ( -/obj/structure/bed/rogue/shit, -/obj/item/rogueweapon/stoneaxe, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"qjp" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/town/dwarf) -"qjF" = ( -/obj/structure/fluff/fokoff_sign, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"qko" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town) -"qkJ" = ( -/obj/structure/fluff/walldeco/painting/queen{ - pixel_x = 32 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/cell) -"qkR" = ( -/obj/structure/roguemachine/mail, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"qkV" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"qkY" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/water/swamp/deep, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qls" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qlN" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/mask/cigarette/rollie/mindbreaker, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"qlR" = ( -/obj/structure/chair/bench/church/r, -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"qmE" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/cell) -"qmK" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/item/clothing/gloves/roguetown/angle, -/turf/open/transparent/openspace, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"qno" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/manorgarri) -"qnw" = ( -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qny" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - name = "manor" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/garrison) -"qnM" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue) -"qof" = ( -/turf/closed/mineral/random/rogue, -/area/rogue) -"qoz" = ( -/obj/item/chair/stool/bar/rogue, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"qoI" = ( -/obj/structure/bars/passage{ - redstone_id = "sewer1" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"qoQ" = ( -/obj/structure/fluff/statue/knightalt/r, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"qpF" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 4 - }, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qpQ" = ( -/obj/item/natural/bundle/stick, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"qpX" = ( -/obj/structure/rogue/trophy/deer, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"qqn" = ( -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/rogueweapon/shield/wood, -/obj/item/rogueweapon/mace, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"qqw" = ( -/turf/open/transparent/openspace, -/area/rogue) -"qqM" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/tavern) -"qrh" = ( -/obj/structure/table/wood/nice, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/carpet/red, -/area/rogue/outdoors/exposed/under/basement) -"qrD" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"qrH" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/obj/structure/flora/roguegrass/bush/wall/tall, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"qrL" = ( -/obj/structure/stationary_bell{ - pixel_y = -28; - pixel_x = -31 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/church) -"qsl" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"qtg" = ( -/obj/structure/flora/rock/pile, -/obj/structure/fluff/railing/stonehedge, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qtH" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/town) -"qud" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 4 - }, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"quy" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "garrison" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"quA" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue) -"quG" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town) -"quW" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"qvc" = ( -/obj/machinery/light/rogue/wallfire/candle, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"qvP" = ( -/obj/structure/table/wood, -/obj/structure/roguemachine/vendor, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/shop) -"qvS" = ( -/obj/structure/bed/rogue, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"qwa" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"qwh" = ( -/mob/living/carbon/human/species/human/northern/bum{ - name = "beggar" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"qwu" = ( -/obj/effect/decal/cleanable/blood/gibs/core, -/obj/item/clothing/suit/roguetown/shirt/undershirt/priest, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"qwv" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 - }, -/obj/item/rogueweapon/mace/woodclub, -/obj/item/clothing/mask/muzzle, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"qwN" = ( -/obj/structure/fluff/walldeco/painting/queen, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qwU" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qxr" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qxw" = ( -/obj/item/roguebin/water/gross, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"qxF" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"qxN" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"qxO" = ( -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/under/town/basement) -"qyf" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/maneater/real, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"qyv" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/candle/yellow/lit, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"qyR" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/saigabuck/tame, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qyS" = ( -/obj/structure/handcart{ - icon_state = "cart-empty"; - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/mountains) -"qyY" = ( -/obj/structure/table/vtable, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qzq" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"qzH" = ( -/obj/machinery/light/rogue/firebowl/church, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church/chapel) -"qzY" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/tavern) -"qAd" = ( -/obj/structure/flora/roguegrass/water, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qAH" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"qBy" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner, -/area/rogue/indoors/shelter/mountains/decap) -"qDr" = ( -/obj/structure/fluff/wallclock/r, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"qDJ" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue) -"qEw" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/shelter/mountains) -"qEy" = ( -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qEA" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/bigrat, -/obj/effect/decal/cleanable/blood/footprints, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"qFA" = ( -/turf/closed/wall/mineral/rogue/wooddark/end, -/area/rogue/indoors/town/shop) -"qFE" = ( -/obj/item/roguestatue/silver, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/vault) -"qGx" = ( -/turf/closed/mineral/random/rogue, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qGH" = ( -/obj/structure/flora/roguegrass/water, -/obj/structure/flora/ausbushes/fernybush, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/exposed/manorgarri) -"qGI" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner, -/area/rogue) -"qGU" = ( -/obj/structure/table/wood{ - layer = 2.8 - }, -/obj/item/rogueweapon/tongs, -/obj/item/rogueweapon/hammer/claw, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"qHo" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qHN" = ( -/obj/machinery/light/rogue/hearth, -/obj/item/clothing/mask/rogue/facemask/prisoner, -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"qHV" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"qIm" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qIo" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qJn" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"qJB" = ( -/obj/structure/closet/crate/roguecloset/dark{ - locked = 1; - masterkey = 1; - lockid = "steward" - }, -/obj/item/roguekey/archive, -/obj/item/roguekey/blacksmith, -/obj/item/roguekey/church, -/obj/item/roguekey/dungeon, -/obj/item/roguekey/garrison, -/obj/item/roguekey/graveyard, -/obj/item/roguekey/manor, -/obj/item/roguekey/mason, -/obj/item/roguekey/merchant, -/obj/item/roguekey/shop, -/obj/item/roguekey/tavern, -/obj/item/roguekey/walls, -/obj/structure/bars/pipe, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"qJH" = ( -/obj/machinery/light/rogue/wallfire/candle, -/obj/effect/landmark/start/churchling{ - icon_state = "arrow"; - dir = 4 - }, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"qJI" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/storage/belt/rogue/pouch, -/obj/item/storage/belt/rogue/pouch, -/obj/item/storage/backpack/rogue/satchel, -/obj/item/storage/backpack/rogue/satchel, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/shop) -"qJZ" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/wolf, -/obj/effect/decal/remains/xeno/larva{ - name = "child's remains"; - desc = "Truely, nothing is sacred." - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"qLK" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 6 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"qLT" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/under/town/sewer) -"qLY" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/transparent/openspace, -/area/rogue) -"qMc" = ( -/obj/effect/decal/remains/human, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qMk" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/rogueweapon/hoe, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"qMt" = ( -/obj/structure/fluff/walldeco/chains, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"qMA" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 2 - }, -/area/rogue/indoors/town/church/chapel) -"qMN" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors) -"qMW" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/obj/structure/closet/crate/coffin, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"qNc" = ( -/obj/structure/rack/rogue, -/obj/item/natural/cloth, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/bath) -"qNh" = ( -/obj/item/storage/roguebag, -/obj/structure/rack/rogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qNw" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qNz" = ( -/obj/structure/fluff/walldeco/masonflag{ - pixel_y = 32 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"qNI" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/item/clothing/cloak/cape/archivist, -/obj/structure/closet/crate/chest, -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"qOE" = ( -/obj/structure/stairs{ - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/church) -"qOG" = ( -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/tavern) -"qOT" = ( -/obj/structure/table/wood, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"qPb" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "manor" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qQj" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/structure/roguemachine/camera/right, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/garrison) -"qQz" = ( -/turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/town/roofs) -"qQN" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/flora/newbranch/leafless{ - dir = 4 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"qRu" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 1 - }, -/area/rogue/indoors/shelter/mountains/decap) -"qSl" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/storage/box/matches, -/obj/item/clothing/mask/cigarette/pipe, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qSx" = ( -/obj/structure/mineral_door/wood/donjon/stone, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/dwarfin) -"qSX" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"qTv" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"qTI" = ( -/obj/structure/fluff/dryingrack, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"qTS" = ( -/obj/structure/table/vtable/v2, -/obj/item/candle/skull/lit{ - pixel_x = -1; - pixel_y = 7 - }, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town) -"qUm" = ( -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"qVh" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"qVi" = ( -/obj/machinery/anvil/crafted, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"qVm" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 - }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"qVD" = ( -/obj/structure/mineral_door/wood/donjon/stone, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qVN" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"qVO" = ( -/obj/item/natural/dirtclod, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 6 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"qVT" = ( -/obj/structure/flora/roguetree, -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qVX" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/church) -"qWc" = ( -/obj/structure/mineral_door/wood/red{ - lockid = "woodsm" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"qWm" = ( -/obj/machinery/light/rogue/smelter, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 10 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"qXr" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 4 - }, -/area/rogue) -"qXG" = ( -/turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_line"; - dir = 4 - }, -/area/rogue/indoors/town/bath) -"qXU" = ( -/obj/structure/closet/crate/roguecloset/lord{ - lockid = "nightman" - }, -/obj/item/candle, -/obj/item/candle, -/obj/item/candle, -/obj/item/clothing/mask/rat/jackal, -/obj/item/clothing/mask/muzzle, -/obj/item/clothing/head/roguetown/nun, -/obj/item/clothing/suit/roguetown/armor/amazon_chainkini, -/obj/item/clothing/suit/roguetown/shirt/dress/gen/sexy, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/under/town/basement) -"qZe" = ( -/obj/item/restraints/legcuffs/beartrap/armed, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/outdoors/exposed/under/basement) -"qZn" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/servant{ - icon_state = "arrow"; - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"qZr" = ( -/obj/structure/roguewindow, -/obj/structure/bars/passage/shutter/open{ - redstone_id = "merchant" - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/shop) -"qZt" = ( -/obj/structure/roguemachine/balloon_pad, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/warehouse) -"qZv" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/head/roguetown/helmet/skullcap, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"qZR" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/structure/spider/cocoon, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"qZV" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town) -"raA" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/clothing/cloak/raincloak/blue, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/obj/item/reagent_containers/glass/bottle/rogue/water, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/garrison) -"raQ" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rbU" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/town/sewer) -"rec" = ( -/obj/structure/rogue/trophy/deer, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"rej" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"rel" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"rgi" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/tavern) -"rgm" = ( -/mob/living/carbon/human/species/skeleton/npc, -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"rgv" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot{ - pixel_x = 5 - }, -/obj/item/reagent_containers/glass/cup/steel{ - pixel_x = -3 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"rgK" = ( -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/mountains) -"rhi" = ( -/obj/structure/ladder, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"rhk" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcv"; - lockid = "merchant" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/shop) -"rhv" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 6 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"rhz" = ( -/obj/structure/fermenting_barrel/beer, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"rij" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/structure/gate/bars{ - gid = "townin" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"rik" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/dwarf) -"riq" = ( -/turf/closed/mineral/rogue, -/area/rogue/indoors) -"riw" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"rix" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"riE" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town) -"riP" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"rje" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup, -/obj/item/reagent_containers/glass/cup/silver, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"rjl" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/manorgarri) -"rkd" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/shelter/mountains) -"rkw" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"rky" = ( -/obj/item/natural/poo, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"rkT" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/grass, -/area/rogue/indoors) -"rlr" = ( -/turf/open/floor/rogue/tile, -/area/rogue/outdoors/exposed/manorgarri) -"rlJ" = ( -/obj/structure/bed/rogue/shit, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/landmark/start/prisoner{ - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/cell) -"rme" = ( -/obj/structure/chair/bench/church/r, -/obj/effect/landmark/start/vagrant{ - icon_state = "arrow"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"rmL" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"rmP" = ( -/obj/structure/closet/crate/chest{ - name = "Contraband"; - lockid = "walls"; - locked = 1 - }, -/obj/item/clothing/cloak/raincloak/mortus, -/obj/item/reagent_containers/powder, -/obj/item/rogueweapon/sword/iron, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"rmY" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"rng" = ( -/turf/closed/mineral/random/rogue, -/area/rogue/indoors) -"rnV" = ( -/obj/structure/bars/pipe, -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/shop) -"rod" = ( -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rog" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"roK" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue) -"roR" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/exposed/dwarf) -"roZ" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/spear/billhook, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"rpx" = ( -/obj/machinery/light/rogue/lanternpost{ - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"rpA" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/outdoors/exposed/magiciantower) -"rpQ" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/town/roofs) -"rqi" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 10 - }, -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 8 - }, -/area/rogue/indoors/town/shop) -"rqR" = ( -/turf/open/floor/rogue/metal, -/area/rogue/outdoors/town) -"rqU" = ( -/obj/structure/fluff/globe, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"rqW" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/bath) -"rrI" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/indoors/town/church/chapel) -"rrJ" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"rsd" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/restraints/legcuffs/beartrap, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"rst" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rsB" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rsE" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/dwarf) -"rsP" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 10 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"rta" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rtP" = ( -/obj/structure/lever/wall{ - dir = 4; - desc = "Let the games begin."; - redstone_id = "sewer4" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"ruw" = ( -/turf/open/floor/rogue/metal, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rvj" = ( -/turf/closed/mineral/rogue/coal, -/area/rogue) -"rvM" = ( -/obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 8; - locked = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"rwu" = ( -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"rwF" = ( -/obj/item/melee/curator_whip, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"rxp" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"rxF" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"rxI" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/turf/open/transparent/openspace, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"rxS" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/church) -"rye" = ( -/turf/open/lava, -/area/rogue) -"ryq" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ryU" = ( -/obj/structure/flora/roguegrass, -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"ryZ" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"rzl" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/exposed/town) -"rzm" = ( -/obj/effect/spawner/roguemap/treeorbush, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"rzv" = ( -/obj/structure/fluff/walldeco/chains, -/obj/structure/roguemachine/camera/right, -/turf/open/floor/rogue/metal/barograte, -/area/rogue/indoors/town/cell) -"rAW" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town/garrison) -"rBL" = ( -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/magician) -"rBR" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/decal/cleanable/blood/gibs, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"rCn" = ( -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"rCx" = ( -/obj/structure/chair/bench/church/mid{ - icon_state = "church_benchmid"; - dir = 1 - }, -/obj/effect/landmark/start/orphan{ - icon_state = "arrow"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"rCF" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"rCO" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"rDc" = ( -/obj/structure/bearpelt{ - pixel_x = -16 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"rDz" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/candle/yellow/lit{ - pixel_x = -5; - pixel_y = 9 - }, -/obj/item/candle/yellow/lit{ - pixel_x = 4; - pixel_y = 1 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/church) -"rEa" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/outdoors/town/roofs) -"rEb" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 4 - }, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"rEh" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/outdoors/exposed/church) -"rEu" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rEI" = ( -/obj/structure/fluff/railing/stonehedge, -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rEO" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcv"; - lockid = "merchant" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/shop) -"rES" = ( -/obj/item/rogueweapon/tongs, -/turf/closed/mineral/rogue, -/area/rogue/under/cave/spider) -"rEX" = ( -/turf/closed/mineral/rogue, -/area/rogue/outdoors/exposed/under/basement) -"rFa" = ( -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/dwarf) -"rFA" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/meat/rawbacon, -/obj/item/reagent_containers/food/snacks/meat/rawbacon, -/obj/item/reagent_containers/food/snacks/meat/rawbacon, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"rFY" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"rGj" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/mountains) -"rGL" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"rGX" = ( -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked{ - pixel_y = 3 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"rHl" = ( -/obj/structure/table/wood, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"rHz" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 4 - }, -/area/rogue/indoors/town/tavern) -"rHH" = ( -/obj/structure/closet/crate/chest, -/obj/structure/fluff/walldeco/innsign{ - alpha = 200; - layer = 4.1; - level = 2; - pixel_x = 16; - pixel_y = 32 - }, -/obj/item/clothing/head/roguetown/menacing, -/obj/item/clothing/glasses/blindfold/white{ - name = "blindfold" - }, -/obj/item/clothing/glasses/blindfold/white{ - name = "blindfold" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/cell) -"rIo" = ( -/obj/structure/flora/roguegrass, -/obj/effect/spawner/roguemap/beartrap, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rJq" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rJv" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/manorgarri) -"rJN" = ( -/mob/living/carbon/human/species/human/northern/bum{ - name = "madman"; - aggressive = 1; - wander = 1; - druggy = 1 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/shelter/bog) -"rKy" = ( -/obj/item/roguemachine/merchant, -/obj/structure/roguemachine/balloon_pad, -/turf/open/floor/rogue/tile, -/area/rogue/outdoors/town/roofs) -"rKK" = ( -/obj/structure/rogue/trophy/deer, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"rLn" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rLE" = ( -/obj/effect/spawner/roguemap/beartrap, -/obj/structure/roguetent, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/shelter/rtfield) -"rLU" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/effect/landmark/start/vagrant{ - icon_state = "arrow"; - dir = 1 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"rMJ" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/flora/rock/pile, -/turf/open/water/river, -/area/rogue/outdoors/river) -"rMM" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"rMO" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/manorgarri) -"rOe" = ( -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"rOD" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/item/chair/stool/bar/rogue, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"rOU" = ( -/obj/structure/flora/roguegrass/water, -/turf/open/water/swamp, -/area/rogue/outdoors/bog) -"rPy" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/dwarf) -"rPA" = ( -/mob/living/carbon/human/species/human/northern/bum{ - name = "beggar" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"rPQ" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"rQb" = ( -/obj/structure/fluff/walldeco/bigpainting/lake, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"rQl" = ( -/obj/structure/fluff/psycross/crafted, -/obj/effect/decal/remains/saiga, -/obj/effect/decal/cleanable/blood/gibs, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rQp" = ( -/obj/structure/bars/grille{ - redstone_id = "throneroom_grille" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"rQE" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rQJ" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"rRw" = ( -/obj/effect/spawner/roguemap/treeorbush, -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"rRM" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 8 - }, -/area/rogue/indoors/town) -"rRX" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"rSm" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/indoors/town/tavern) -"rTk" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue) -"rTU" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/turf/open/floor/rogue/greenstone, -/area/rogue/under/town/basement) -"rUn" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueweapon/flail, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"rUt" = ( -/obj/structure/closet/crate/chest, -/obj/structure/fluff/walldeco/maidensigil, -/obj/item/ingot/gold, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/vault) -"rUu" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"rUK" = ( -/obj/structure/mineral_door/wood/fancywood, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church/chapel) -"rVZ" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 8 - }, -/turf/closed/mineral/rogue/bedrock, -/area/rogue/indoors/town/bath) -"rWn" = ( -/obj/item/flashlight/flare/torch, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"rWo" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 4 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"rWD" = ( -/turf/open/floor/rogue/herringbone, -/area/rogue/under/spiderbase) -"rWF" = ( -/obj/structure/chair/bench/couch{ - icon_state = "redcouch2" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"rWR" = ( -/obj/structure/bars/cemetery, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/bush/wall, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"rWX" = ( -/obj/structure/roguetent, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/cell) -"rXb" = ( -/obj/structure/table/wood/nice, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"rXj" = ( -/obj/structure/chair/wood/rogue/fancy, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"rXp" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 4 - }, -/area/rogue/indoors/shelter/mountains/decap) -"rXJ" = ( -/obj/structure/stairs/stone, -/obj/machinery/light/rogue/wallfire/candle/blue{ - pixel_y = 0; - pixel_x = 31 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"rXT" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 4 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/under/town/basement) -"rYx" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/mountains) -"rYy" = ( -/obj/structure/well{ - name = "well of man-eating ghouls" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rYK" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"rZj" = ( -/obj/structure/fluff/traveltile{ - aportalgoesto = "bogrtin"; - aportalid = "bogrtout" - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/bog) -"rZo" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/mountains/decap) -"saJ" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/clothing/cloak/raincloak/red, -/obj/item/clothing/cloak/raincloak/red, -/obj/item/clothing/cloak/raincloak/red, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"sbb" = ( -/obj/item/grown/log/tree/stake, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"sbg" = ( -/obj/structure/ladder, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/turf/open/floor/rogue/metal, -/area/rogue/indoors/town) -"sbG" = ( -/obj/structure/table/wood/nice, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"sbV" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/magician) -"sbX" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"sca" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/spiderbase) -"scc" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle, -/area/rogue) -"scj" = ( -/obj/structure/stairs/stone, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"scu" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/footprints{ - dir = 8 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"scM" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"sdn" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/church) -"sdp" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"sdU" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/indoors/shelter/rtfield) -"sek" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 1 - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"seF" = ( -/obj/item/restraints/legcuffs/beartrap, -/turf/open/floor/rogue/metal/barograte, -/area/rogue/indoors/town/cell) -"sfh" = ( -/turf/open/transparent/glass, -/area/rogue/outdoors/town/roofs) -"sfH" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/ruinedwood/turned, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"sfJ" = ( -/turf/open/water/swamp, -/area/rogue/outdoors/bog) -"sfQ" = ( -/obj/effect/decal/cobbleedge, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"sgi" = ( -/obj/structure/bed/rogue/shit, -/obj/structure/roguemachine/camera/left, -/mob/living/carbon/human/species/human/northern/bum{ - wander = 1; - name = "vagrant" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"shd" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 10 - }, -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town) -"sho" = ( -/obj/structure/fluff/statue/pillar, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"shu" = ( -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue/outdoors/exposed/manorgarri) -"shA" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"siF" = ( -/obj/structure/fluff/railing/wood{ - icon_state = "woodrailing"; - dir = 8; - pixel_y = -1 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/church) -"siG" = ( -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"sjk" = ( -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue/under/cave/spider) -"sjm" = ( -/obj/structure/fluff/railing/fence, -/obj/structure/flora/roguegrass, -/obj/structure/fermenting_barrel, -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"sjp" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) -"sjq" = ( -/obj/item/roguebin/water, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"sjG" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/roguekey/shop, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"sjL" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town/dwarfin) -"sjZ" = ( -/obj/structure/ladder/earth, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "Abandoned Mine" - }) -"ski" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"sll" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "manor" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"slK" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"slZ" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/cooking/pan, -/obj/item/cooking/pan, -/turf/open/floor/rogue/tile/checker, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"sme" = ( -/obj/structure/table/wood/nice, -/obj/item/rogueweapon/sword/rapier, -/obj/item/natural/cloth, -/obj/structure/mirror{ - pixel_y = 28 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"smq" = ( -/obj/structure/table/wood, -/obj/item/storage/bag/tray, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"smY" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"snE" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"sol" = ( -/obj/effect/spawner/roguemap/beartrap, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"soo" = ( -/mob/living/simple_animal/hostile/rogue/haunt, -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"soM" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/walldeco/moon{ - pixel_y = -31 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"spe" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/suit/roguetown/shirt/dress, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"sph" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/woods) -"spQ" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/structure/bed/rogue/inn, -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"sqb" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"sqT" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/reagent_containers/glass/cup{ - pixel_x = -7 - }, -/obj/item/candle/yellow{ - pixel_x = 7 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"srf" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 8 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/shop) -"srr" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/obj/item/rogueweapon/pick, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"srt" = ( -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/manorgarri) -"sry" = ( -/obj/structure/rack/rogue, -/obj/item/keyring, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"srS" = ( -/obj/item/natural/dirtclod, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"srW" = ( -/obj/structure/fluff/walldeco/masonflag{ - pixel_x = -32 - }, -/obj/structure/closet/crate/roguecloset/lord, -/obj/structure/roguemachine/mail, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/natural/feather, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"ssq" = ( -/obj/effect/decal/cleanable/blood/gibs/core, -/mob/living/simple_animal/hostile/rogue/werewolf, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"ssy" = ( -/obj/structure/bed/rogue/mediocre, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"ssC" = ( -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"sto" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 4 - }, -/area/rogue/indoors/town) -"stC" = ( -/obj/structure/closet/dirthole/closed/loot, -/obj/structure/gravemarker, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"stI" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/obj/item/natural/stone, -/obj/item/reagent_containers/glass/bucket/wooden, -/obj/effect/decal/cleanable/food/tomato_smudge, -/obj/item/natural/poo, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/cell) -"stR" = ( -/obj/effect/decal/cobbleedge{ - dir = 1 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"sue" = ( -/obj/structure/fluff/railing/border, -/obj/structure/rogue/trophy/deer, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/garrison) -"suy" = ( -/obj/structure/fluff/walldeco/chains, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"suK" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/candle/yellow/lit{ - pixel_x = 4; - pixel_y = 1 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"suQ" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"suS" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"suZ" = ( -/obj/effect/decal/remains/human, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"svq" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "church" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"svB" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "Abandoned Mine" - }) -"svE" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"swo" = ( -/obj/structure/bars, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"swy" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"sxt" = ( -/obj/structure/closet/crate/coffin, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"sxT" = ( -/obj/structure/chair/bench/church/r, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"sxW" = ( -/obj/structure/toilet{ - name = "the thinking chair"; - desc = "Where wizardly thoughts are conjured." - }, -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"syZ" = ( -/obj/item/reagent_containers/food/snacks/rogue/fryfish/eel, -/obj/item/reagent_containers/food/snacks/rogue/fryfish/eel, -/obj/item/reagent_containers/food/snacks/rogue/fryfish/eel, -/obj/item/reagent_containers/food/snacks/rogue/fryfish/eel, -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/metal/barograte, -/area/rogue/outdoors/exposed/under/basement) -"szk" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/bigrat, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"szo" = ( -/obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 4; - locked = 1; - lockid = "mage"; - masterkey = 0 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"szq" = ( -/obj/structure/fluff/traveltile, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"szw" = ( -/obj/machinery/light/rogue/firebowl, -/obj/machinery/light/rogue, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"szB" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/obj/item/natural/cloth, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"sAi" = ( -/obj/item/natural/stone, -/obj/item/natural/rock/salt, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/mountains) -"sAP" = ( -/obj/structure/fermenting_barrel/water, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"sAV" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"sAY" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/tavern) -"sBY" = ( -/turf/closed/wall/mineral/rogue/roofwall/center, -/area/rogue) -"sCi" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/bush/wall, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"sCN" = ( -/obj/structure/closet/crate/roguecloset/inn, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"sCW" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"sDG" = ( -/obj/structure/chair/wood/rogue/fancy, -/obj/effect/landmark/start/merchant, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/shop) -"sEn" = ( -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"sEI" = ( -/turf/closed/mineral/rogue, -/area/rogue/outdoors/mountains) -"sFf" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/spiderbase) -"sFy" = ( -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/shelter/town/dwarf) -"sFB" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/river) -"sFL" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/nightmaiden{ - dir = 4 - }, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/bath) -"sGh" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"sGp" = ( -/obj/effect/landmark/start/squire{ - icon_state = "arrow"; - dir = 1 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/manorgarri) -"sGL" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue) -"sGM" = ( -/obj/structure/fluff/statue/knight/r, -/obj/structure/stone_tile/slab/cracked, -/obj/structure/fluff/walldeco/psybanner{ - pixel_y = 32 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"sGU" = ( -/obj/structure/mineral_door/wood/window{ - lockid = "nightmaiden" - }, -/turf/open/floor/rogue/metal/barograte, -/area/rogue/under/town/basement) -"sIe" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"sIp" = ( -/turf/open/floor/rogue/cobble, -/area/rogue) -"sJc" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"sJe" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/rogueweapon/woodstaff/aries, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/church/chapel) -"sJD" = ( -/obj/structure/bed/rogue, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"sJP" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town) -"sKa" = ( -/obj/structure/fluff/wallclock, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern) -"sLw" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/turf/open/transparent/openspace, -/area/rogue) -"sLN" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/mountains) -"sLW" = ( -/obj/structure/flora/roguetree, -/turf/open/water/swamp, -/area/rogue/outdoors/bog) -"sLX" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/obj/effect/decal/cobbleedge, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"sMh" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"sMo" = ( -/obj/structure/fluff/walldeco/maidendrape, -/obj/structure/closet/crate/roguecloset/lord{ - lockid = "nightman" - }, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/clothing/mask/cigarette/rollie/trippy, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/under/town/basement) -"sMr" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/town/basement) -"sMv" = ( -/obj/structure/bed/rogue/mediocre, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"sMK" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/church/chapel) -"sMX" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"sNf" = ( -/obj/structure/mineral_door/wood/red{ - locked = 1 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"sNy" = ( -/turf/closed/mineral/random/rogue, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"sNz" = ( -/turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_line" - }, -/area/rogue/indoors/shelter/town/dwarf) -"sOs" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/magician) -"sOE" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"sOX" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 10 - }, -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town) -"sOZ" = ( -/obj/structure/table/vtable/v2, -/obj/item/gun/ballistic/revolver/grenadelauncher/crossbow, -/obj/structure/rogue/trophy/deer, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"sPk" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"sPp" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/town) -"sPy" = ( -/obj/structure/fluff/statue/knight/r, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/outdoors/exposed/under/basement) -"sPP" = ( -/turf/open/floor/rogue/grass, -/area/rogue/indoors/shelter/rtfield) -"sQb" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/town/roofs) -"sQV" = ( -/obj/structure/mineral_door/bars, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"sQX" = ( -/obj/structure/closet/dirthole/closed, -/obj/effect/decal/remains/xeno/larva{ - name = "child's remains"; - desc = "Truely, nothing is sacred." - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"sRb" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/under/spiderbase) -"sRf" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/church/chapel) -"sRI" = ( -/obj/item/natural/rock, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"sRK" = ( -/obj/structure/fluff/signage{ - name = "ROCKHAMLET"; - desc = "There are fingerprints pressed into the molded wood, either end of the sign..." - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"sRR" = ( -/obj/effect/spawner/roguemap/treeorstump, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"sRZ" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave/spider) -"sSj" = ( -/obj/effect/landmark/start/villager{ - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"sSX" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"sTm" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"sTM" = ( -/obj/structure/flora/roguetree, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"sVh" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"sVm" = ( -/obj/structure/flora/roguegrass, -/mob/living/simple_animal/hostile/retaliate/rogue/goatmale{ - name = "mountain goat"; - aggressive = 1 - }, -/turf/open/floor/bronze, -/area/rogue/outdoors/mountains) -"sVC" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/flashlight/flare/torch, -/obj/item/flashlight/flare/torch, -/obj/item/flashlight/flare/torch, -/obj/item/flashlight/flare/torch, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"sVQ" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"sVV" = ( -/obj/structure/flora/roguegrass, -/obj/structure/closet/dirthole/closed/loot, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"sWQ" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"sXm" = ( -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"sXH" = ( -/obj/structure/chair/bench/couch, -/obj/structure/fluff/walldeco/bigpainting/lake{ - pixel_x = 0 - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/under/town/basement) -"sYX" = ( -/obj/structure/flora/roguegrass/maneater/real, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"sZD" = ( -/obj/structure/flora/roguegrass/bush/wall/tall, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"sZS" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/item/roguekey/dungeon{ - lockid = "woodsm"; - name = "old key" - }, -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"tbe" = ( -/obj/structure/fluff/statue/knight, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/outdoors/exposed/under/basement) -"tbh" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"tbx" = ( -/obj/structure/flora/roguetree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"tbC" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/cloak/raincloak/mortus, -/obj/item/clothing/cloak/raincloak/mortus, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"tcJ" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/item/reagent_containers/powder, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/magician) -"tcZ" = ( -/obj/structure/roguemachine/drugmachine, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/bath) -"tdl" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/shelter/rtfield) -"tdB" = ( -/obj/structure/closet/crate/drawer/inn{ - pixel_y = 4 - }, -/obj/item/keyring/innkeep, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/tavern) -"teg" = ( -/obj/effect/decal/cobbleedge, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"tem" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/closed/mineral/rogue/bedrock, -/area/rogue) -"teu" = ( -/obj/structure/fluff/statue/knight, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"teO" = ( -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"teW" = ( -/obj/structure/closet/crate/chest{ - locked = 1; - lockid = "woodsm" - }, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/obj/item/paper/scroll, -/obj/item/natural/feather, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"tfn" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"tfA" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogue/instrument/flute, -/obj/item/paper{ - name = "Jester's Notes"; - info = "BITING WORDS:
To properly insult someone, use these three easy topics and their associated slurs.
1. VIRTUE - In particular Women and Holy Men
(Also excellent for insulting the victim's mother.)
- Bedswerver
- Doxy
- Liver-eater
- Putarelle
2. BIRTH STATUS - Highborn noblemen
- Bastard
- Knave
- Hedge-born
- Bath-sired
3. STUPIDITY/USELESSNESS - Anyone smarter than you
- Churl
- Cumberground
- Fopdoodle
- Loggerhead
- Sot

Remember, insults should always be in the form of a joke. But more importantly, they should always be deserved! Play music and tell jokes to the downtrodden, they need some levity." - }, -/obj/item/paper{ - name = "The Laws of the Fool"; - info = "THE LAWS OF THE FOOL:
1. Seek the news and spread it to all
2. Play antics on all who deserve it.
3. Improvise with thy wit!
4. Be tactful. Know when thy art is welcome.
5. Be misshapen (or dwarvish) (or simply play dumb)
6. Speak harsh truths in jest
7. Emote! Play on the stage of life!
8. Keep your head and face smooth and shaven (dwarvern fools may keep the beard)
9. Carry thy wooden sword proudly!
10. Spread thy strings of influence, create chaos in others...
11. If thou must fight, fight well
12. Spread thy wealth to those who deserve it, and troublesome gifts to those who don't!
13. Be compassionate and insightful, even when scathing

LEGENDARY FOOLS:
Taeleffer the Dwarf - Fallen in battle on a suicide charge with a wooden sword, his courage turning the tide
Roland the Farter - Capable of farting, whistling, and jumping in unison
Tom the Fool a.k.a. "Longshanks" - Pioneer of Tomfoolery and the one-man show.
Rahear the Minstrel - Witful gossiper, talented idiot, and former monk.
Shen-Jang-Goa - The crafty diplomat and spy, disarming dignitaries with wisdom and humour.
Maggoty Johnson - The legendary playwright, known for his crude humour.
Ser Dangerfield - The ultimate fall man, perfected the craft of the "MyWife" jest." - }, -/obj/item/rogueweapon/mace/wsword, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"tfH" = ( -/obj/structure/flora/newleaf/corner{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tfJ" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/obj/structure/kneestingers, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"tfY" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - lockid = "mason"; - name = "STONE" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"tgz" = ( -/obj/item/chair/stool/bar/rogue, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/spiderbase) -"tgC" = ( -/obj/structure/fluff/statue/gargoyle/moss, -/turf/open/floor/bronze, -/area/rogue/outdoors/exposed/manorgarri) -"tgY" = ( -/obj/structure/roguemachine/camera, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"tiW" = ( -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"tiY" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town/church/chapel) -"tjp" = ( -/turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_corner"; - dir = 4 - }, -/area/rogue/indoors/shelter/town/dwarf) -"tjQ" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/bush_meagre, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"tki" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"tkY" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"tlx" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/under/spiderbase) -"tlC" = ( -/obj/structure/table/wood/treestump/burnt, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tmk" = ( -/obj/structure/closet/crate/drawer, -/obj/machinery/light/rogue/wallfire/candle/r, -/obj/item/clothing/head/roguetown/chaperon, -/obj/item/storage/box/matches, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"tnn" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - name = "manor" - }, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/garrison) -"tnO" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/spiderbase) -"tos" = ( -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/tavern) -"toA" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/spider, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"toY" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"tph" = ( -/obj/structure/bars/pipe, -/obj/structure/table/vtable, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"tpk" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/obj/effect/landmark/start/magician{ - dir = 8 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"tpB" = ( -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tpC" = ( -/obj/item/reagent_containers/glass/bucket/wooden{ - pixel_y = 5 - }, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town) -"tpQ" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"tpX" = ( -/obj/structure/fluff/walldeco/chains, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"tqD" = ( -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"tqO" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/indoors) -"tra" = ( -/obj/structure/flora/roguegrass, -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"tri" = ( -/obj/item/storage/belt/rogue/leather/rope, -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"trq" = ( -/obj/machinery/light/rogue/hearth, -/obj/item/cooking/pan, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"try" = ( -/obj/effect/landmark/start/churchling{ - icon_state = "arrow"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"trF" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"tsd" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/exposed/manorgarri) -"tsI" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/bath) -"tsO" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"tsY" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 6 - }, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"ttP" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"ttW" = ( -/obj/effect/decal/remains/human, -/mob/living/carbon/human/species/skeleton/npc, -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"tuo" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/garrison) -"tut" = ( -/obj/structure/flora/rock/jungle, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tuB" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains/decap) -"tuD" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town/church/chapel) -"tuO" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/indoors/shelter/mountains) -"tuU" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/cell) -"tvc" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"tvX" = ( -/obj/structure/gate/bars, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"tvZ" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/outdoors/exposed/under/basement) -"twz" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 4 - }, -/area/rogue/indoors/town/shop) -"twS" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/bronze, -/area/rogue/outdoors/mountains) -"twV" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 8 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"txc" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/manorgarri) -"txm" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcr"; - locked = 1; - lockid = "garrison" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"txR" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/manorgarri) -"tyj" = ( -/obj/structure/spirit_board, -/obj/item/natural/feather{ - pixel_y = 9 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"tys" = ( -/obj/structure/fluff/statue/small, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 10 - }, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/indoors/town/bath) -"tyB" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tzp" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - lockid = "confession"; - locked = 1 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"tzw" = ( -/obj/structure/table/wood/treestump{ - pixel_x = -7 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"tzO" = ( -/obj/structure/flora/roguegrass, -/obj/structure/roguerock, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"tAs" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 8; - icon_state = "donjondir"; - locked = 1; - lockid = "blacksmith" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"tAx" = ( -/obj/structure/fluff/nest, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"tAK" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle, -/area/rogue/indoors/town/magician) -"tAV" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/wood, -/turf/open/transparent/openspace, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"tAW" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 6 - }, -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town) -"tBe" = ( -/obj/structure/fluff/railing/stonehedge, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tCf" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/roguekey/merchant{ - pixel_y = 1; - pixel_x = 5 - }, -/obj/item/roguekey/shop{ - pixel_y = 2; - pixel_x = -5 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/shop) -"tCi" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/psycross, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tCz" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 4 - }, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"tCX" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/bigrat, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"tDz" = ( -/obj/structure/well{ - name = "well of man-eating ghouls" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tEb" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"tEi" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/shop) -"tFc" = ( -/obj/structure/flora/roguegrass/bush_meagre, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"tFt" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_x = -32 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"tFF" = ( -/turf/closed/mineral/random/rogue/high, -/area/rogue/indoors) -"tFN" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town) -"tGk" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"tGA" = ( -/obj/structure/mineral_door/swing_door, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"tGP" = ( -/obj/effect/decal/cleanable/blood/old, -/mob/living/simple_animal/hostile/retaliate/rogue/wolf, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"tGV" = ( -/obj/structure/flora/newbranch{ - dir = 4 - }, -/obj/structure/flora/roguegrass, -/obj/effect/landmark/start/mercenarylate{ - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tHr" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/effect/decal/cleanable/food/tomato_smudge, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"tJd" = ( -/turf/open/water/bath, -/area/rogue/indoors/town/bath) -"tJr" = ( -/obj/structure/fluff/psycross/crafted, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tJu" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"tJE" = ( -/obj/effect/landmark/start/mercenarylate{ - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tJG" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/bookcase, -/obj/item/book/rogue/necra, -/obj/item/book/rogue/secret/ledger, -/obj/item/book/rogue/secret/xylix, -/obj/item/book/rogue/law, -/obj/item/book/rogue/bibble, -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"tKp" = ( -/obj/structure/flora/roguegrass, -/mob/living/carbon/human/species/human/northern/bum{ - wander = 1; - name = "vagrant" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tKu" = ( -/obj/item/ingot/steel, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"tKz" = ( -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/magiciantower) -"tKM" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"tKP" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"tKU" = ( -/obj/structure/well, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/manorgarri) -"tLe" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "sheriff" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"tLl" = ( -/obj/machinery/light/rogue/firebowl, -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"tLA" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/church) -"tLH" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"tLK" = ( -/turf/open/floor/rogue/tile/checkeralt, -/area/rogue/indoors/town/tavern) -"tMa" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"tMe" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"tMr" = ( -/obj/item/natural/dirtclod, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"tNI" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/item/reagent_containers/glass/cup/golden, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"tNP" = ( -/obj/structure/fluff/clodpile, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tOb" = ( -/obj/structure/fluff/statue/gargoyle/candles, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/town) -"tOe" = ( -/obj/item/rope, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tOw" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"tOU" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"tPd" = ( -/obj/structure/chair/bench/church{ - icon_state = "church_benchleft"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"tPn" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"tPt" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/candle/yellow, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"tPA" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/obj/item/rogueweapon/mace/woodclub, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"tPG" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tPK" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tPO" = ( -/obj/structure/flora/roguegrass/water/reeds, -/turf/open/water/swamp/deep, -/area/rogue/outdoors/bog) -"tQi" = ( -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"tQC" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"tQJ" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tRd" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"tRi" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"tRx" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"tRN" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/mountains) -"tSa" = ( -/obj/item/roguegem/violet, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"tSb" = ( -/obj/item/rope/chain, -/obj/item/rope/chain, -/obj/machinery/light/rogue/torchholder{ - pixel_y = 26 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"tSd" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/mountains) -"tSA" = ( -/obj/structure/stairs/stone, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"tSI" = ( -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town) -"tTy" = ( -/obj/effect/decal/remains/human, -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"tTP" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tUl" = ( -/obj/structure/rack/rogue, -/obj/item/storage/roguebag{ - pixel_y = 6; - pixel_x = -8 - }, -/obj/item/storage/roguebag{ - pixel_y = -2; - pixel_x = 8 - }, -/obj/item/storage/backpack/rogue/backpack, -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"tUq" = ( -/obj/structure/roguemachine/scomm/l, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"tUC" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tUQ" = ( -/turf/open/floor/rogue/carpet/lord/left, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"tUZ" = ( -/obj/effect/decal/cobbleedge{ - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tVv" = ( -/obj/structure/flora/roguegrass, -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors) -"tWi" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"tWr" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/grabber, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"tWT" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/dwarfin) -"tXg" = ( -/obj/structure/bed/rogue/wool, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"tXt" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"tXv" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/needle/thorn, -/obj/item/needle/thorn, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"tXz" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/shoes/wheelys{ - name = "Shoes of Gliding"; - icon = 'icons/roguetown/clothing/feet.dmi'; - icon_state = "shalal" - }, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue) -"tYk" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"tYR" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/dwarf) -"tYZ" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/obj/item/paper/scroll{ - pixel_y = 3; - pixel_x = -6 - }, -/obj/machinery/light/rogue/wallfire/candle/blue{ - pixel_y = -32 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"tZj" = ( -/mob/living/simple_animal/hostile/rogue/haunt, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"tZl" = ( -/obj/structure/flora/roguegrass, -/mob/living/simple_animal/hostile/retaliate/rogue/goat, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"tZr" = ( -/mob/living/carbon/human/species/human/northern/bum{ - name = "madman"; - aggressive = 1; - wander = 1; - druggy = 1 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"tZR" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"tZZ" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/adventurer{ - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"uan" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/garrison) -"uaI" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/dwarfin) -"ube" = ( -/obj/item/chair/stool/bar/rogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"ubK" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ubM" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue) -"ubZ" = ( -/obj/structure/bed/rogue/shit, -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"uck" = ( -/obj/structure/rack/rogue, -/obj/item/natural/saddle, -/turf/open/floor/rogue/dirt, -/area/rogue) -"ucC" = ( -/obj/structure/stairs/fancy/l{ - dir = 1 - }, -/turf/open/floor/rogue/carpet/lord/left, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ucN" = ( -/obj/effect/spawner/roguemap/treeorbush, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ucT" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/cave) -"uda" = ( -/obj/structure/ladder, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"udt" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/manorgarri) -"udN" = ( -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue) -"ued" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/river) -"ueO" = ( -/turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_line"; - dir = 4 - }, -/area/rogue/indoors/shelter/town/dwarf) -"ufp" = ( -/obj/structure/fermenting_barrel/random/beer, -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"ufN" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/obj/machinery/light/rogue{ - pixel_y = 19 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ugc" = ( -/obj/effect/decal/cleanable/blood/footprints, -/obj/effect/decal/cleanable/blood/footprints{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"ugo" = ( -/obj/structure/flora/rock/pile, -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ugq" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/shop) -"uhf" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/obj/item/rope, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/shop) -"uhj" = ( -/turf/closed/mineral/rogue/salt, -/area/rogue) -"uhk" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 4; - icon_state = "donjondir"; - locked = 1; - lockid = "tavern" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"uhn" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uhE" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"uhR" = ( -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/shop) -"uhZ" = ( -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/church/chapel) -"uic" = ( -/obj/structure/flora/roguetree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"uiG" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"uiX" = ( -/obj/structure/fluff/railing/border, -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"ukr" = ( -/obj/item/clothing/head/roguetown/helmet/leather, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"ukE" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"umO" = ( -/obj/structure/bed/rogue, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/cell) -"umU" = ( -/obj/structure/mineral_door/wood/fancywood, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"unu" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"uoh" = ( -/obj/structure/handcart{ - icon_state = "cart-empty"; - dir = 4 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"uoo" = ( -/turf/closed/wall/mineral/rogue/wooddark/end, -/area/rogue/indoors/shelter/town/dwarf) -"uoO" = ( -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/shelter/town/dwarf) -"uoT" = ( -/obj/structure/bars/cemetery, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uoY" = ( -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern) -"upL" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"uqe" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"uqi" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"uqn" = ( -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/magician) -"uqL" = ( -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"urm" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"urw" = ( -/turf/closed/mineral/rogue/gold, -/area/rogue) -"urE" = ( -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"urM" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"urU" = ( -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"usN" = ( -/obj/structure/fluff/walldeco/chains, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"usU" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"utC" = ( -/obj/structure/toilet, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/under/town/sewer) -"utR" = ( -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/outdoors/town/roofs) -"uul" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 32 - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uut" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/spider, -/obj/structure/spider/cocoon, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"uuL" = ( -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/church) -"uvn" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/shelter/mountains/decap) -"uvo" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uvz" = ( -/obj/structure/bookcase, -/obj/item/toy/talking/codex_gigas, -/obj/item/book/rogue/fishing, -/obj/item/book/rogue/nitebeast, -/obj/item/book/rogue/robber, -/obj/item/book/rogue/tales1, -/obj/item/storage/book, -/obj/item/book/granter/spell/smoke, -/obj/item/book/granter/spell/knock, -/obj/item/book/granter/spell/forcewall, -/obj/item/book/manual/wiki/cooking_to_serve_man, -/obj/item/book/mimery{ - name = "The Way of Silence" - }, -/obj/item/book/rogue/tales3, -/obj/item/book/rogue/arcyne, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"uvA" = ( -/obj/structure/closet/crate/chest{ - lockid = "tavern" - }, -/obj/item/rogueweapon/mace/cudgel, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/tavern) -"uvC" = ( -/obj/structure/stairs/stone, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"uwa" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/item/clothing/head/roguetown/knitcap, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"uwk" = ( -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/shop) -"uwC" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue) -"uwG" = ( -/obj/item/clothing/head/roguetown/jester, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"uxm" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/natural/cloth, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"uxt" = ( -/obj/structure/bars/cemetery, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"uxG" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"uxJ" = ( -/obj/structure/fluff/railing/stonehedge, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"uxS" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"uyd" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/quiver/arrows, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"uyG" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"uzs" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/shelter/rtfield) -"uzF" = ( -/obj/structure/fermenting_barrel/random, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"uAc" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 8 - }, -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/town/roofs) -"uAe" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/shelter/town/dwarf) -"uAH" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/magician) -"uBq" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/powder/salt, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"uBL" = ( -/obj/structure/table/vtable/v2, -/obj/item/candle/skull/lit{ - pixel_x = -1; - pixel_y = 7 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/magician) -"uBP" = ( -/turf/closed/wall/mineral/rogue/pipe, -/area/rogue) -"uCa" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 8 - }, -/area/rogue/indoors/town/garrison) -"uCd" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); - first_time_text = "CATACOMBS" - }) -"uCD" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uCJ" = ( -/obj/structure/barricade/wooden/crude, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"uCR" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 4; - icon_state = "donjondir"; - locked = 1; - lockid = "blacksmith" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"uDp" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/neck/roguetown/talkstone, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"uDz" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"uDI" = ( -/mob/living/carbon/human/species/human/northern/bum{ - name = "madman"; - aggressive = 1; - wander = 1; - druggy = 1 - }, -/obj/structure/bed/rogue/shit, -/obj/item/natural/cloth, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"uDK" = ( -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"uEj" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/church) -"uEt" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"uEy" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"uEU" = ( -/obj/structure/mineral_door/wood/donjon/stone, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/under/town/basement) -"uFf" = ( -/obj/structure/winch, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uFo" = ( -/obj/item/reagent_containers/food/snacks/crow, -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/town/roofs) -"uFA" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"uFC" = ( -/turf/open/floor/carpet/purple, -/area/rogue/under/town/basement) -"uFE" = ( -/obj/structure/chair/wood/rogue/fancy, -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/turf/open/floor/carpet/red, -/area/rogue/outdoors/exposed/under/basement) -"uFI" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 8 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"uFR" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"uFV" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"uFW" = ( -/obj/structure/handcart{ - icon_state = "cart-empty"; - dir = 4 - }, -/obj/item/rogueweapon/stoneaxe/woodcut, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"uFZ" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"uGh" = ( -/obj/effect/decal/cobbleedge{ - dir = 1 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/under/town/sewer) -"uGl" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"uGB" = ( -/obj/structure/fluff/clodpile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"uGM" = ( -/obj/structure/fluff/psycross/copper, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"uHG" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/manorgarri) -"uJf" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 1; - icon_state = "wooddir"; - locked = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"uJs" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town) -"uJt" = ( -/obj/structure/roguemachine/mail/l, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"uJC" = ( -/obj/structure/fluff/railing/border, -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"uJD" = ( -/turf/open/floor/rogue/twig, -/area/rogue/indoors/shelter/bog) -"uJH" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/bottle/rogue/manapot, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"uJT" = ( -/obj/structure/barricade/wooden/crude, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"uKl" = ( -/obj/structure/closet/crate/coffin, -/obj/item/clothing/cloak/raincloak/mortus, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"uKw" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"uKI" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/dwarf) -"uLC" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"uLI" = ( -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town) -"uMw" = ( -/obj/item/clothing/shoes/roguetown/shortboots, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"uNF" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern) -"uNO" = ( -/turf/closed/wall/mineral/rogue/roofwall/innercorner{ - dir = 4 - }, -/area/rogue/indoors/town) -"uNR" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue) -"uOa" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/church) -"uOb" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 8 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"uOF" = ( -/obj/structure/closet/crate/roguecloset/dark{ - locked = 1; - lockid = "merchant"; - name = "Tobacco Locker" - }, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/clothing/mask/cigarette/pipe, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"uOM" = ( -/obj/structure/table/vtable, -/obj/structure/mirror/fancy, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uPg" = ( -/obj/item/reagent_containers/food/snacks/crow{ - icon_state = "crow"; - dir = 1 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"uPP" = ( -/obj/structure/fluff/railing/border, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"uPQ" = ( -/obj/item/restraints/legcuffs/beartrap/armed, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"uPZ" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 8 - }, -/area/rogue/indoors/town/shop) -"uQd" = ( -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue/indoors/town/magician) -"uQj" = ( -/obj/item/reagent_containers/food/snacks/deadmouse, -/obj/effect/decal/cleanable/food/tomato_smudge, -/obj/item/cooking/pan, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"uQl" = ( -/obj/structure/fluff/walldeco/innsign, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/cell) -"uQm" = ( -/obj/structure/roguerock, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"uQr" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/vault) -"uQB" = ( -/obj/machinery/light/rogue/smelter, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 6 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"uQN" = ( -/obj/structure/bed/rogue/shit, -/obj/item/rogue/instrument/lute, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"uRr" = ( -/obj/structure/flora/ausbushes/reedbush, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"uRx" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 - }, -/obj/item/reagent_containers/glass/cup, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"uRR" = ( -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"uRW" = ( -/mob/living/carbon/human/species/human/northern/bum{ - wander = 1; - name = "vagrant" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"uSi" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/manorgarri) -"uSn" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/wheat, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"uSP" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"uST" = ( -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/natural/cloth, -/obj/item/clothing/suit/roguetown/armor/gambeson/arming, -/obj/item/clothing/cloak/raincloak/furcloak, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uSU" = ( -/obj/structure/fluff/clodpile, -/obj/item/natural/worms, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"uTy" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"uTA" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 - }, -/obj/structure/fluff/wallclock, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"uTU" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"uUr" = ( -/obj/structure/rack/rogue/shelf{ - density = 0 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"uUT" = ( -/obj/structure/fluff/walldeco/painting{ - pixel_y = 32 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uVp" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"uVY" = ( -/obj/structure/mineral_door/wood/red, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uWg" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"uWr" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/tile/checkeralt, -/area/rogue/indoors/town/tavern) -"uWG" = ( -/obj/structure/bed/rogue/hay, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"uWU" = ( -/obj/structure/chair/bench/church{ - icon_state = "church_benchleft"; - dir = 1 - }, -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"uXy" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/transparent/openspace, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"uXz" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"uXM" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"uYA" = ( -/obj/structure/flora/roguegrass, -/turf/closed/wall/mineral/rogue/tent, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"uYS" = ( -/obj/structure/fluff/walldeco/rpainting/crown, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/tavern) -"uYT" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"uYU" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uZe" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/town/dwarf) -"uZk" = ( -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/magiciantower) -"uZn" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"uZo" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/mountains) -"uZF" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/indoors/shelter/rtfield) -"val" = ( -/turf/closed/wall/mineral/rogue/decostone/cand, -/area/rogue/under/town/basement) -"vaR" = ( -/obj/structure/mineral_door/wood/donjon{ - lockid = "walls"; - dir = 1 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"vbA" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"vcJ" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - lockid = "steward"; - name = "GOLD" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"vcP" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vdB" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"vdL" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 1 - }, -/area/rogue/indoors/town/magician) -"vdM" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"vdO" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vec" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - lockid = "graveyard"; - locked = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"vek" = ( -/turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_corner"; - dir = 1 - }, -/area/rogue/indoors/shelter/town/dwarf) -"vew" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vfa" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/town/roofs) -"vfi" = ( -/obj/structure/mineral_door/wood/fancywood, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vfj" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/under/town/basement) -"vfu" = ( -/obj/effect/landmark/start/guardsman{ - icon_state = "arrow"; - dir = 1 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/manorgarri) -"vfO" = ( -/obj/structure/fluff/statue/knightalt{ - pixel_y = 9 - }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vfR" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"vfX" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vgG" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"vgI" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/outdoors/town/roofs) -"vgS" = ( -/obj/structure/rack/rogue/shelf{ - density = 0 - }, -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/tile/checkeralt, -/area/rogue/indoors/town/tavern) -"vhx" = ( -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"vhN" = ( -/obj/structure/bars/pipe, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town) -"vhT" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/tavern) -"viq" = ( -/obj/structure/roguemachine/scomm{ - pixel_y = -32 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/bath) -"viY" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"vjo" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"vju" = ( -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/decal/cleanable/blood/old, -/obj/item/kitchen/fork, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"vjx" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/bush_meagre, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"vlr" = ( -/obj/structure/closet/crate/coffin, -/obj/item/clothing/head/helmet/skull, -/obj/item/scythe, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"vmg" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/smallrat{ - name = "Philbert"; - desc = "A quite chubby fellow. It reeks of alcohol."; - dir = 8 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"vmC" = ( -/obj/structure/closet/dirthole/closed/loot, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vmK" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 6 - }, -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/shop) -"vmM" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/manorgarri) -"vom" = ( -/obj/structure/bars/cemetery, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"voM" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"voP" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 8 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"voT" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"voW" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 1; - icon_state = "wooddir"; - locked = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/indoors) -"vps" = ( -/obj/item/ingot/gold, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"vpV" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"vqa" = ( -/obj/structure/flora/roguegrass/maneater/real, -/obj/structure/fluff/psycross/crafted, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"vqR" = ( -/obj/item/rogueweapon/shovel, -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"vrh" = ( -/obj/structure/bars, -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/outdoors/exposed/under/basement) -"vrm" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/exposed/under/basement) -"vrK" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"vta" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"vuk" = ( -/mob/living/carbon/human/species/human/northern/bum{ - name = "creep"; - aggressive = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vuw" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/idagger, -/obj/item/rogueweapon/thresher, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"vuG" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/obj/item/clothing/shoes/roguetown/ridingboots, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vuN" = ( -/obj/structure/bed/rogue/wooldouble, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"vuZ" = ( -/obj/effect/landmark/start/veteran{ - dir = 8 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vva" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"vvy" = ( -/turf/open/floor/rogue/rooftop/green, -/area/rogue) -"vwv" = ( -/turf/open/transparent/openspace, -/area/rogue/under/town/sewer) -"vwC" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/book/rogue/bibble, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/church/chapel) -"vwS" = ( -/obj/structure/closet/crate/chest, -/obj/item/ingot/silver, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/vault) -"vxp" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/obj/item/paper/scroll{ - pixel_y = 3; - pixel_x = -6 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/church) -"vxt" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town) -"vxz" = ( -/obj/effect/decal/cobbleedge{ - dir = 1 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"vyP" = ( -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vyQ" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 4 - }, -/area/rogue/indoors/town/cell) -"vyV" = ( -/obj/structure/fluff/statue/tdummy, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"vzb" = ( -/obj/structure/bars/pipe, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"vzs" = ( -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/manorgarri) -"vzv" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/outdoors/town/roofs) -"vAo" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/spider/cocoon, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"vAv" = ( -/obj/effect/decal/remains/bigrat, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/exposed/under/basement) -"vAA" = ( -/obj/structure/flora/roguegrass, -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"vAP" = ( -/obj/structure/table/wood/nice, -/obj/item/natural/feather, -/obj/item/flashlight/lamp{ - pixel_y = 9 - }, -/obj/structure/bars/pipe, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"vAR" = ( -/obj/machinery/light/rogue/wallfire/candle, -/obj/structure/toilet, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"vAS" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/manorgarri) -"vAZ" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/walldeco/wallshield{ - pixel_y = 32 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vBb" = ( -/obj/structure/fluff/statue/gargoyle/moss, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vBC" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 - }, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/indoors/town/bath) -"vBX" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/indoors/town/cell) -"vCa" = ( -/obj/structure/roguemachine/submission, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"vCc" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue) -"vCo" = ( -/obj/structure/flora/roguegrass, -/obj/item/roguebin, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"vCr" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/structure/stone_tile/block/cracked, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/spiderbase) -"vCH" = ( -/obj/structure/chair/stool/rogue, -/obj/structure/roguemachine/scomm/l, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/magician) -"vDw" = ( -/obj/effect/landmark/start/vagrant{ - icon_state = "arrow"; - dir = 8 - }, -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"vDx" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/spider, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"vEY" = ( -/obj/structure/rack/rogue, -/obj/item/quiver/arrows, -/obj/item/gun/ballistic/revolver/grenadelauncher/bow, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"vFC" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"vFV" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vGb" = ( -/obj/structure/rack/rogue, -/obj/structure/fluff/wallclock, -/obj/item/rogueweapon/mace/church, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"vHi" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 8 - }, -/area/rogue/indoors/town/church/chapel) -"vHk" = ( -/obj/item/reagent_containers/glass/bottle/sacid, -/obj/item/reagent_containers/glass/bottle/silver, -/obj/item/reagent_containers/glass/bottle/sodium, -/obj/item/reagent_containers/glass/bottle/spewium, -/obj/item/reagent_containers/glass/bottle/sugar, -/obj/item/reagent_containers/glass/bottle/sulfur, -/obj/structure/closet/crate/roguecloset/dark, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"vHo" = ( -/turf/open/floor/rogue/dirt/ambush, -/area/rogue/outdoors/exposed/town) -"vHv" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 8 - }, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"vHH" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/machinery/light/rogue/wallfire/candle, -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"vIi" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"vIo" = ( -/obj/machinery/light/rogue/oven/south, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern) -"vIt" = ( -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"vIO" = ( -/obj/structure/chair/bench/ancientlog, -/obj/structure/flora/roguegrass/thorn_bush, -/obj/effect/spawner/roguemap/beartrap, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vIR" = ( -/obj/effect/spawner/roguemap/treeorbush, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vJb" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"vJu" = ( -/mob/living/simple_animal/hostile/zombie, -/obj/structure/flora/rock/pile, -/obj/item/candle/yellow, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"vJF" = ( -/obj/structure/closet/crate/roguecloset/lord{ - lockid = "bath4"; - name = "locker IV" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) -"vJI" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"vJQ" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vKe" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vKI" = ( -/obj/structure/table/vtable, -/obj/item/toy/cards/deck, -/obj/structure/roguemachine/mail/l{ - pixel_y = 15 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/magician) -"vMY" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/bath) -"vNa" = ( -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/magiciantower) -"vNq" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"vNy" = ( -/obj/structure/roguemachine/scomm/r, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"vOf" = ( -/obj/item/clothing/shoes/roguetown/boots/leather, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vOo" = ( -/obj/item/roguebin/water/gross, -/obj/structure/mirror/fancy{ - name = "magic mirror"; - desc = "Your reflection seems to be the other way... er... right way around." - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"vOR" = ( -/obj/effect/decal/remains/human, -/turf/closed/mineral/rogue, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"vPZ" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"vQh" = ( -/obj/structure/flora/roguegrass/water/reeds, -/turf/open/water/swamp, -/area/rogue/outdoors/bog) -"vQx" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 1 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vQT" = ( -/obj/structure/table/vtable, -/obj/item/paper/scroll, -/obj/item/natural/feather{ - pixel_y = -5; - pixel_x = 5 - }, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town) -"vQY" = ( -/obj/structure/roguemachine/camera/right, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"vRF" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"vRU" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/garrison) -"vSR" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"vTh" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"vTl" = ( -/obj/structure/table/wood, -/obj/item/rogueweapon/huntingknife/idagger, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"vTq" = ( -/turf/open/floor/carpet/red, -/area/rogue/outdoors/exposed/under/basement) -"vTN" = ( -/obj/structure/mineral_door/bars, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"vUx" = ( -/turf/closed/mineral/rogue, -/area/rogue) -"vUG" = ( -/obj/structure/fluff/statue/knight/r, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/outdoors/exposed/under/basement) -"vUI" = ( -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/cell) -"vVD" = ( -/obj/machinery/light/rogue/hearth, -/obj/item/cooking/pan, -/obj/item/reagent_containers/food/snacks/rogue/friedegg, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"vVI" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"vWe" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"vWg" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"vWk" = ( -/obj/structure/flora/roguegrass, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 8 - }, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 6 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"vWm" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 - }, -/obj/item/book/rogue/law, -/obj/item/rogueweapon/tongs, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"vWD" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/obj/structure/fermenting_barrel/random/beer, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"vWJ" = ( -/obj/item/clothing/shoes/roguetown/jester, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"vWP" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"vXb" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "manor" - }, -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"vXs" = ( -/obj/structure/plasticflaps, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/water/sewer, -/area/rogue/indoors/town/garrison) -"vXB" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/manorgarri) -"vXX" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/obj/effect/landmark/start/barkeep{ - dir = 8 - }, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern) -"vYf" = ( -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vYp" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/dwarf) -"vYJ" = ( -/obj/item/natural/saddle, -/obj/structure/rack/rogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vYV" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/book/rogue/bibble, -/obj/item/keyring/priest, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"vYW" = ( -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"vZm" = ( -/obj/effect/landmark/start/dungeoneer{ - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vZG" = ( -/turf/closed/wall/mineral/rogue/roofwall/innercorner{ - dir = 8 - }, -/area/rogue/indoors/town) -"vZN" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"wao" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"waO" = ( -/obj/structure/flora/roguegrass, -/mob/living/simple_animal/hostile/retaliate/rogue/goat, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"wbi" = ( -/obj/structure/closet/crate/drawer, -/obj/item/candle/skull/lit{ - pixel_x = -1; - pixel_y = 7 - }, -/obj/structure/fireaxecabinet{ - pixel_y = 32 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"wbA" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/watchman, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"wbP" = ( -/obj/effect/decal/cobbleedge, -/obj/machinery/light/rogue/campfire{ - pixel_y = 20 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"wce" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"wcn" = ( -/turf/closed/mineral/rogue/iron, -/area/rogue) -"wcw" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"wcF" = ( -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"wdo" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"wdq" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"wdV" = ( -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"weF" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/clothing/neck/roguetown/gorget, -/obj/item/rogueweapon/huntingknife/idagger/silver, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"weW" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/dwarf) -"wfc" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "walls" - }, -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"wfm" = ( -/obj/item/natural/dirtclod, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"wfT" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wgc" = ( -/obj/structure/bars/pipe, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"wgs" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"wgz" = ( -/obj/item/paper/confession, -/obj/item/paper/confession, -/obj/structure/closet/crate/chest{ - locked = 1; - lockid = "lord" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"wgQ" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"whe" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"whu" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/mob/living/simple_animal/hostile/retaliate/rogue/wolf, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"whC" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 4 - }, -/area/rogue/indoors/town/magician) -"whE" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"whF" = ( -/obj/structure/closet/crate/coffin, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"whL" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/tongs, -/obj/item/rogueweapon/hammer/claw, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"wiz" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wiD" = ( -/obj/machinery/light/rogue/wallfire/candle/blue, -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "mage"; - max_integrity = 100000 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"wiI" = ( -/obj/effect/decal/remains/wolf, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"wiL" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/town) -"wiM" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/turf/open/floor/carpet/red, -/area/rogue/outdoors/exposed/under/basement) -"wiR" = ( -/turf/closed/mineral/rogue, -/area/rogue/indoors/shelter/rtfield) -"wiS" = ( -/obj/structure/spider/stickyweb, -/turf/closed/mineral/rogue, -/area/rogue/under/cave/spider) -"wjq" = ( -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"wjH" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/manorgarri) -"wkj" = ( -/obj/structure/chair/wood/rogue/fancy{ - dir = 1 - }, -/turf/open/floor/carpet/purple, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"wkk" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wkp" = ( -/obj/structure/bed/rogue/mediocre, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"wks" = ( -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 8 - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"wkZ" = ( -/obj/structure/flora/rock/pile, -/obj/structure/fluff/clodpile, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"wlv" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"wlB" = ( -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"wlM" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wlQ" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 26 - }, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"wmg" = ( -/obj/structure/bars, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"wmC" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"wmJ" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"wnB" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/shop) -"wnR" = ( -/obj/structure/fermenting_barrel/water, -/obj/item/reagent_containers/glass/cup/skull{ - pixel_y = 12 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"wok" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - lockid = "priest" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"wox" = ( -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"woM" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"wpE" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"wpR" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"wpZ" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/outdoors/town) -"wrs" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"wrV" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 8; - icon_state = "donjondir"; - locked = 1; - lockid = "dungeon" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"wsn" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"wsr" = ( -/obj/item/reagent_containers/food/snacks/crow{ - icon_state = "crow"; - dir = 1 - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"wsP" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"wvP" = ( -/obj/structure/bars/cemetery, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/bush/wall, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"wvR" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"wwa" = ( -/obj/effect/decal/cleanable/blood/old, -/mob/living/simple_animal/hostile/retaliate/rogue/wolf, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wwn" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 - }, -/obj/item/clothing/wrists/roguetown/wrappings, -/obj/item/flashlight/flare/torch/lantern, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"wwo" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"www" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wwH" = ( -/obj/structure/fluff/psycross/crafted, -/obj/effect/decal/remains/saiga, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wwJ" = ( -/obj/structure/mineral_door/wood{ - lockid = "butcher" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"wxa" = ( -/obj/effect/landmark/start/orphan, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/church) -"wxb" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/keyring/servant, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"wyq" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/roguemachine/merchantvend, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"wys" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"wyL" = ( -/obj/structure/fluff/wallclock/l, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"wzF" = ( -/obj/structure/chair/stool/rogue, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"wzL" = ( -/obj/machinery/light/rogue/wallfire/candle/blue{ - pixel_y = 0; - pixel_x = 31 - }, -/turf/open/water/bath, -/area/rogue/indoors/town/bath) -"wAo" = ( -/obj/structure/flora/roguegrass, -/obj/structure/bars/pipe, -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"wAr" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains) -"wAB" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"wAC" = ( -/obj/structure/mirror, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) -"wBd" = ( -/obj/structure/fermenting_barrel/random/beer, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"wBm" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wBq" = ( -/obj/structure/fluff/statue, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"wBu" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/structure/roguerock, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"wBy" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern) -"wCA" = ( -/obj/effect/decal/cleanable/blood/gibs/up, -/turf/open/transparent/openspace, -/area/rogue/under/cave{ - name = "vulf cave"; - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) - }) -"wCC" = ( -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wDj" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/reagent_containers/powder/salt, -/obj/machinery/light/rogue/wallfire/candle, -/obj/item/reagent_containers/food/condiment/peppermill, -/obj/item/reagent_containers/food/condiment/peppermill, -/obj/item/reagent_containers/food/condiment/peppermill, -/obj/item/reagent_containers/food/condiment/peppermill, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"wEg" = ( -/obj/structure/flora/roguegrass, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wEi" = ( -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) -"wEq" = ( -/obj/structure/flora/roguegrass, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors) -"wEW" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"wFg" = ( -/obj/structure/mineral_door/wood/donjon/stone, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"wFV" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue) -"wGg" = ( -/obj/structure/fluff/nest, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"wGw" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"wGR" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/obj/structure/roguerock, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wHs" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"wIh" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/item/rogueore/iron, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"wJc" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 1 - }, -/area/rogue/indoors/shelter/mountains) -"wJv" = ( -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/clothing/suit/roguetown/armor/leather/jacket/hand, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"wKF" = ( -/turf/open/floor/rogue/ruinedwood/turned, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wLa" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/town/roofs) -"wLo" = ( -/obj/structure/bed/rogue/shit, -/obj/item/rogueweapon/huntingknife/stoneknife, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"wLN" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"wMi" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town/cell) -"wMq" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"wNi" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/bush_meagre, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wNu" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 8 - }, -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wOd" = ( -/turf/open/floor/rogue/ruinedwood/turned, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"wOm" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 2 - }, -/area/rogue/indoors/town/magician) -"wOz" = ( -/obj/item/rope/chain, -/turf/open/floor/rogue/metal/barograte, -/area/rogue/indoors/town/cell) -"wOM" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"wON" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wOS" = ( -/obj/structure/mineral_door/wood/fancywood{ - locked = 1; - lockid = "vault" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/outdoors/exposed/under/basement) -"wPQ" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"wQG" = ( -/obj/effect/landmark/start/cleric{ - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"wQO" = ( -/obj/structure/closet/crate/chest{ - locked = 1; - lockid = "lord" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"wRi" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"wRr" = ( -/turf/closed/wall/mineral/rogue/tent, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wRs" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 4 - }, -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wRz" = ( -/obj/structure/fluff/railing/border, -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"wRC" = ( -/obj/structure/toilet, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"wSj" = ( -/obj/structure/roguemachine/scomm/r, -/obj/machinery/light/rogue/firebowl/church, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"wSv" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/flora/rock/pile, -/turf/open/water/swamp, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"wSA" = ( -/obj/item/roguestatue/silver, -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/bath) -"wSN" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wSR" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner, -/area/rogue/indoors/town/tavern) -"wSZ" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/exposed/manorgarri) -"wTk" = ( -/obj/structure/bars/pipe, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/dwarf) -"wTU" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/paper/scroll, -/obj/item/roguekey/archive, -/obj/effect/decal/cobbleedge{ - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"wUd" = ( -/obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"wUf" = ( -/obj/structure/roguemachine/mail, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"wUk" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/exposed/manorgarri) -"wUC" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"wUT" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wVh" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 8 - }, -/area/rogue) -"wVn" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wVy" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"wVz" = ( -/turf/open/floor/rogue/rooftop, -/area/rogue) -"wVF" = ( -/obj/structure/flora/roguegrass/bush_meagre, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"wXm" = ( -/obj/structure/flora/rock/pile, -/turf/open/water/river{ - dir = 4 - }, -/area/rogue/outdoors/river) -"wXL" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"wYX" = ( -/obj/structure/flora/newleaf/corner{ - dir = 9 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wYZ" = ( -/mob/living/simple_animal/hostile/zombie, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"xad" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"xaf" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"xah" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"xai" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"xbu" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"xbB" = ( -/obj/structure/bed/rogue/wool, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/garrison) -"xbY" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/signage{ - name = "RO-KHAM--T"; - desc = "You can barely read the name for the mold..." - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xcb" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"xcg" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/shelter/town/dwarf) -"xcr" = ( -/obj/effect/spawner/roguemap/hauntpile, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"xcK" = ( -/obj/structure/fluff/railing/wood, -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/rtfield) -"xdc" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/structure/bars/passage/shutter{ - redstone_id = "balloon_shutter" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/shelter/town/roofs) -"xde" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"xdl" = ( -/obj/item/natural/stone, -/obj/item/grown/log/tree/stick, -/obj/item/grown/log/tree/stick, -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"xdp" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/manorgarri) -"xec" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "shop" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"xed" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/shelter/rtfield) -"xeL" = ( -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town) -"xfl" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"xfY" = ( -/turf/closed/mineral/rogue, -/area/rogue/under/town/sewer) -"xgl" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern) -"xgA" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 6 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"xgK" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xgL" = ( -/obj/structure/bars/pipe, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"xhq" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xhr" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"xhy" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/mercenary{ - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern) -"xie" = ( -/obj/structure/flora/ausbushes/ppflowers, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"xiv" = ( -/obj/structure/roguetent, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"xiH" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"xiI" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/town/dwarf) -"xiP" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"xje" = ( -/obj/item/bedsheet/rogue/cloth, -/obj/structure/bed/rogue/wool, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"xjk" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - lockid = "church"; - locked = 1 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"xkk" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/magician) -"xkE" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"xlw" = ( -/obj/structure/fluff/walldeco/painting/seraphina{ - pixel_y = 32 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"xlD" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"xlV" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/town/dwarf) -"xmv" = ( -/obj/structure/flora/roguegrass, -/turf/closed/mineral/rogue, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xmz" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 4 - }, -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xmP" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"xmT" = ( -/obj/structure/table/wood/treestump, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xnj" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/reagent_containers/food/snacks/rogue/meat/salami, -/obj/item/rogueweapon/huntingknife/cleaver, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"xnm" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/book/rogue/law, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"xnA" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"xnF" = ( -/obj/structure/spider/stickyweb, -/obj/item/ingot/steel, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"xnP" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/roguegrass, -/obj/structure/fluff/walldeco/customflag{ - pixel_x = -32 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"xpd" = ( -/obj/structure/roguewindow/stained, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/church/chapel) -"xpF" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/under/town/basement) -"xpW" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors) -"xqf" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 6 - }, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 5 - }, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"xqm" = ( -/obj/structure/mineral_door/swing_door{ - locked = 1; - lockid = "woodsm"; - name = "stable door" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"xqH" = ( -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"xqZ" = ( -/obj/structure/flora/roguetree, -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"xre" = ( -/obj/structure/toilet, -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"xrv" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/manorgarri) -"xrF" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"xsl" = ( -/obj/structure/rack/rogue, -/obj/item/storage/backpack/rogue/satchel, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"xsw" = ( -/obj/structure/bars/grille, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xtl" = ( -/obj/structure/closet/crate/roguecloset/lord{ - lockid = "bath1"; - name = "locker I" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) -"xtN" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/sword, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"xtX" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/water/river{ - dir = 4 - }, -/area/rogue/outdoors/river) -"xuD" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcv"; - lockid = "merchant" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"xuL" = ( -/obj/structure/fluff/railing/fence, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"xvb" = ( -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/dwarf) -"xvf" = ( -/obj/structure/closet/crate/roguecloset/lord{ - lockid = "bath2"; - name = "locker II" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) -"xvr" = ( -/obj/structure/flora/ausbushes/ppflowers, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xvB" = ( -/obj/item/roguecoin/gold/pile, -/obj/structure/fluff/walldeco/wallshield{ - pixel_y = 32 - }, -/obj/structure/closet/crate/chest/gold, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/vault) -"xvK" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"xvR" = ( -/obj/structure/table/vtable/v2, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xwf" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/mountains) -"xwu" = ( -/obj/item/roguebin, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"xww" = ( -/turf/open/floor/carpet/purple, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xxz" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/bronze, -/area/rogue/outdoors/mountains) -"xxR" = ( -/obj/structure/table/wood, -/obj/item/candle/yellow, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"xxU" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/outdoors/town) -"xxV" = ( -/obj/structure/bars, -/turf/closed/mineral/rogue/bedrock, -/area/rogue) -"xya" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/flora/newbranch/connector, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"xyA" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"xyF" = ( -/obj/structure/closet/crate/chest{ - locked = 1; - lockid = "lord" - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xyY" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xzq" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xzx" = ( -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"xzE" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"xzF" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"xzR" = ( -/obj/structure/bars/pipe, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"xAF" = ( -/obj/machinery/anvil/crafted, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"xBu" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"xBQ" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"xCC" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"xDk" = ( -/obj/structure/mineral_door/wood/window{ - lockid = "lord"; - locked = 1 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xDt" = ( -/turf/closed/wall/mineral/rogue/wooddark/end, -/area/rogue/indoors/town/cell) -"xDL" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xDZ" = ( -/obj/structure/flora/rock/jungle, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xEd" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"xEi" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xEE" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/river) -"xEJ" = ( -/obj/structure/chair/bench/ancientlog, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xEM" = ( -/obj/structure/bed/rogue/mediocre, -/mob/living/simple_animal/hostile/zombie, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"xFa" = ( -/obj/structure/rack/rogue/shelf{ - density = 0 - }, -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"xFM" = ( -/obj/structure/bars/cemetery, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"xGc" = ( -/obj/structure/mineral_door/wood/donjon{ - icon_state = "donjondir"; - locked = 1; - lockid = "steward" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"xGj" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 8 - }, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/bath) -"xGt" = ( -/turf/closed/mineral/rogue, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"xGB" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"xGE" = ( -/obj/structure/mineral_door/wood/donjon{ - lockid = "garrison"; - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"xHe" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"xHn" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueweapon/mace/woodclub/crafted, -/obj/item/storage/belt/rogue/pouch/coins/poor, -/turf/open/floor/rogue/ruinedwood/turned, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xHq" = ( -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"xHy" = ( -/obj/item/reagent_containers/glass/cup/wooden, -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/tavern) -"xHC" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"xHE" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"xHI" = ( -/obj/structure/chair/wood/rogue/fancy, -/obj/effect/landmark/start/hand, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xIB" = ( -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/under/town/basement) -"xIG" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"xIT" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/psycross, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"xIU" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/turf/open/floor/rogue/tile/checkeralt, -/area/rogue/indoors/town/tavern) -"xJG" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/fluff/walldeco/moon{ - pixel_x = 32 - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/magician) -"xKf" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/vagrant{ - icon_state = "arrow"; - dir = 4 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town) -"xKg" = ( -/obj/structure/bars/cemetery, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xKP" = ( -/turf/closed/wall/mineral/rogue/decostone/cand, -/area/rogue/indoors/town/tavern) -"xKY" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 8 - }, -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) -"xLq" = ( -/obj/structure/roguemachine/scomm/r, -/obj/structure/lever/wall{ - dir = 4; - redstone_id = "stewardshutter" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"xLA" = ( -/obj/effect/landmark/start/gravedigger{ - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"xLR" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/exposed/under/basement) -"xLU" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"xMu" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/water/swamp, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xMw" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/bath) -"xMA" = ( -/obj/structure/fluff/traveltile{ - aportalgoesto = "decapin"; - aportalid = "decapout" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains/decap) -"xNu" = ( -/obj/structure/bed/rogue/shit, -/obj/item/storage/backpack/rogue/backpack, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"xOf" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"xOi" = ( -/obj/structure/table/vtable/v2, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xOs" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 8; - icon_state = "donjondir"; - locked = 1; - lockid = "dungeon" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/cell) -"xON" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/under/town/sewer) -"xPr" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/shoes/bhop, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue) -"xPs" = ( -/obj/structure/rack/rogue, -/obj/item/quiver/bolts, -/obj/item/gun/ballistic/revolver/grenadelauncher/crossbow, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"xPz" = ( -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xPD" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 6 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/town/dwarf) -"xPH" = ( -/obj/structure/closet/crate/roguecloset/lord{ - lockid = "bath3"; - name = "locker III" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) -"xPW" = ( -/obj/structure/mineral_door/bars, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"xQc" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"xQe" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town) -"xQi" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town/church/chapel) -"xQp" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/clothing/mask/cigarette/pipe, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"xQC" = ( -/turf/open/floor/carpet/purple, -/area/rogue/indoors/town/vault) -"xQF" = ( -/obj/structure/flora/roguegrass, -/obj/machinery/light/rogue/lanternpost{ - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"xRk" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/garrison) -"xRo" = ( -/obj/structure/roguemachine/balloon_pad, -/obj/item/reagent_containers/food/snacks/crow{ - icon_state = "crow"; - dir = 1 - }, -/turf/open/floor/rogue/tile, -/area/rogue/outdoors/town/roofs) -"xRs" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/sapprentice{ - dir = 1 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/shelter/town/dwarf) -"xRz" = ( -/obj/structure/spider/spiderling, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/spiderbase) -"xSd" = ( -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/outdoors/exposed/under/basement) -"xSx" = ( -/obj/structure/flora/roguegrass/maneater/real, -/obj/structure/closet/crate/coffin, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"xTr" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern) -"xTB" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xTY" = ( -/obj/item/rope/chain, -/obj/item/rope/chain, -/obj/machinery/light/rogue/torchholder{ - pixel_y = 26 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"xUr" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"xVh" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 8 - }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xWa" = ( -/obj/effect/landmark/start/squire{ - icon_state = "arrow"; - dir = 1 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/manorgarri) -"xWm" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"xWC" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"xWJ" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/fluff/walldeco/stone{ - pixel_x = 0; - pixel_y = 32 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"xWP" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"xXp" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle, -/area/rogue/indoors/town/tavern) -"xXs" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xXE" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xYf" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/mole, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"xYD" = ( -/turf/open/transparent/openspace, -/area/rogue/under/town/basement) -"xZg" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xZi" = ( -/obj/structure/flora/roguegrass, -/obj/structure/barricade/wooden/crude, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"xZA" = ( -/mob/living/carbon/human/species/human/northern/bum{ - name = "madman"; - aggressive = 1; - wander = 1; - druggy = 1 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"xZX" = ( -/obj/effect/landmark/start/orphan, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"yai" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - name = "manor" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"yaI" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/mole, -/obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/mountains) -"ybe" = ( -/obj/item/roguestatue/iron, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"ybg" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"ybJ" = ( -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"yci" = ( -/obj/structure/flora/roguegrass, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"ycC" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ycJ" = ( -/turf/closed/wall/mineral/rogue/wooddark/end, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ydq" = ( -/obj/item/chair/rogue, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"yds" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"ydz" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/dwarf) -"ydC" = ( -/obj/structure/mineral_door/bars, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ydO" = ( -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/town/roofs) -"yee" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"yex" = ( -/obj/structure/toilet, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"yeS" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"yfZ" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/shop) -"ygg" = ( -/mob/living/carbon/human/species/human/northern/bum{ - name = "madman"; - aggressive = 1; - wander = 1; - druggy = 1 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); - first_time_text = "CATACOMBS" - }) -"ygq" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/exposed/under/basement) -"ygv" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"ygD" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"ygG" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); - first_time_text = "CATACOMBS" - }) -"ygV" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"yhf" = ( -/obj/structure/bed/rogue/mediocre, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - name = "plague district"; - icon_state = "yellow"; - first_time_text = "PLAGUE DISTRICT" - }) -"yhh" = ( -/obj/item/reagent_containers/powder/flour, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"yhr" = ( -/mob/living/simple_animal/hostile/zombie, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"yhx" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"yhE" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"yin" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/vagrant{ - icon_state = "arrow"; - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"yiq" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern) -"yiB" = ( -/obj/structure/fluff/statue/spider, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"yiC" = ( -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/garrison) -"yjO" = ( -/obj/item/chair/stool/bar/rogue/crafted, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/shelter/bog) -"ykl" = ( -/obj/item/rope/chain, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) - -(1,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(2,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(3,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(4,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(5,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(6,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(7,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(8,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(9,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(10,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -jaf -jaf -jaf -jaf -jaf -cZs -jaf -jaf -jaf -jaf -jaf -cZs -jaf -cZs -jaf -jaf -jaf -cZs -jaf -jaf -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(11,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -jaf -cZs -jaf -cZs -jaf -cZs -jaf -jaf -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(12,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -dLn -ucT -jaf -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(13,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -uqi -ucT -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(14,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -uqi -ucT -jaf -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(15,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -cxy -ucT -ucT -uqi -ucT -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(16,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -cxy -ucT -ucT -ucT -cxy -ucT -ucT -uqi -ucT -jaf -jaf -jaf -cZs -jaf -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(17,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -cxy -ucT -ucT -ucT -cxy -ucT -ucT -uqi -ucT -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(18,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -mKj -cxy -cxy -mKj -mKj -hsL -cxy -mKj -hsL -uqi -mKj -hsL -hsL -mKj -uqi -hsL -mKj -hsL -hsL -mKj -jaf -aRU -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(19,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -hsL -jPX -yhr -uqi -hsL -xIG -hsL -uqi -uqi -uqi -uqi -xYf -qrD -qrD -oKg -uqi -uqi -hsL -uqi -hsL -jaf -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(20,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -mKj -uqi -uqi -hsL -mKj -hsL -cxy -mKj -cxy -ucT -mKj -ucT -uqi -mKj -hdv -hsL -mKj -hsL -hsL -hsL -jaf -aRU -cZs -cZs -sNy -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(21,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -mKj -hsL -mKj -cxy -ucT -cxy -ucT -cxy -ucT -ucT -ucT -uqi -ucT -tSa -ucT -ucT -mKj -ucT -ucT -jaf -jaf -cZs -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(22,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -hsL -hsL -cxy -cxy -cxy -cxy -cxy -cxy -cxy -cxy -cxy -uqi -ucT -cxy -ucT -ucT -ucT -ucT -ucT -aRU -cZs -cZs -cZs -sNy -cZs -sNy -cZs -cZs -cZs -sNy -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(23,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -hsL -hsL -hsL -cxy -ucT -cxy -ucT -cxy -ucT -ucT -mKj -uqi -mKj -cxy -cxy -cxy -ucT -ucT -ucT -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(24,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -mKj -uqi -mKj -cxy -ucT -cxy -ucT -uqi -cxy -cxy -cxy -uqi -ucT -cxy -ucT -ucT -ucT -jaf -aRU -cZs -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -cZs -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(25,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -hsL -uqi -cxy -cxy -ucT -cxy -ucT -uqi -ucT -ucT -ucT -cxy -ucT -cxy -ucT -ucT -ucT -jaf -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(26,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -cxy -cxy -cxy -cxy -uqi -hsL -cxy -ucT -dLn -ucT -uqi -cxy -cxy -cxy -cxy -cxy -cxy -cxy -uqi -ucT -aRU -cZs -cZs -cZs -sNy -cZs -sNy -ahS -hDZ -sRI -ahS -cZs -sNy -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(27,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -mKj -uqi -mKj -ucT -ucT -uqi -ucT -yhr -ucT -ucT -ucT -cxy -ucT -ucT -ucT -ucT -ucT -jaf -jaf -cZs -jaf -sNy -jaf -cZs -jaf -aat -aat -nRU -jaf -sNy -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(28,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -hsL -hsL -uqi -mKj -hsL -uqi -mKj -uqi -hsL -mKj -ucT -cxy -ucT -ucT -ucT -ucT -ucT -aRU -cZs -cZs -cZs -sNy -cZs -sNy -aat -aat -kOq -sRI -cZs -sNy -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(29,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -cxy -cxy -cxy -uqi -uqi -uqi -uqi -hsL -uqi -uqi -uqi -cxy -cxy -cxy -cxy -soo -uqi -uoh -ucT -jaf -jaf -cZs -jaf -sNy -jaf -sNy -ahS -sRI -hDZ -ahS -jaf -sNy -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(30,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -mKj -hsL -yhr -mKj -uqi -hsL -mKj -otv -uqi -mKj -ucT -ucT -cxy -hsL -hsL -hsL -ucT -aRU -cZs -cZs -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -cZs -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(31,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -dLn -hsL -uqi -ucT -ucT -mKj -uqi -cuW -cuW -cxy -cxy -cxy -cuW -cuW -ucT -jaf -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(32,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -uqi -ucT -ucT -hsL -uqi -hsL -ucT -ucT -cuW -ucT -cuW -ucT -ucT -aRU -cZs -cZs -cZs -cZs -cZs -sNy -cZs -sNy -cZs -sNy -cZs -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(33,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -tZj -ucT -ucT -mKj -hsL -mKj -ucT -ucT -uqi -ucT -cuW -ucT -ucT -jaf -jaf -cZs -jaf -cZs -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(34,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -hsL -uqi -cuW -cuW -cuW -uqi -cuW -cuW -cuW -ucT -jaf -aRU -cZs -cZs -cZs -cZs -cZs -cZs -sNy -cZs -cZs -cZs -sNy -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(35,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -cxy -cuW -cuW -uqi -mKj -ucT -hsL -uqi -hsL -uqi -hsL -hsL -ucT -ucT -jaf -jaf -cZs -jaf -cZs -jaf -sNy -jaf -cZs -jaf -sNy -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(36,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -cxy -ucT -mKj -uqi -yhr -mKj -hsL -uqi -mKj -uqi -hsL -mKj -hsL -mKj -jaf -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(37,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -qLT -lpI -qLT -psp -psp -psp -psp -psp -psp -psp -psp -psp -lEA -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -cxy -cxy -cxy -cuW -cuW -hsL -uqi -uqi -uqi -yhr -uqi -uqi -uqi -hsL -dLn -hsL -jaf -jaf -cZs -jaf -cZs -jaf -jaf -jaf -jaf -jaf -cZs -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(38,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -psp -psp -edR -edR -edR -qLT -hTv -qLT -psp -inD -inD -inD -inD -inD -inD -inD -inD -jek -inD -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -cuW -ucT -mKj -uqi -dLn -mKj -hsL -cuW -mKj -cuW -mKj -uqi -hsL -hsL -jaf -cZs -cZs -cZs -cZs -jaf -mKj -ucT -mKj -jaf -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(39,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -edR -qfT -mgt -qLT -oVv -qLT -psp -inD -ipX -uAe -gFI -gvh -scj -inD -peW -wsn -inD -psp -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -cuW -ucT -hsL -hsL -mKj -ucT -ucT -cuW -ucT -cuW -ucT -mKj -hsL -mKj -jaf -jaf -cZs -jaf -cZs -jaf -ucT -nQu -ucT -jaf -cZs -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(40,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -edR -qfT -qfT -qLT -ksr -qLT -psp -hCF -qWm -uoO -uoO -gvh -onR -inD -gUL -dsq -inD -inD -inD -inD -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -cuW -cuW -cuW -cuW -uqi -cuW -cuW -cuW -cuW -cuW -cuW -cuW -cuW -uqi -hsL -jaf -cZs -cZs -jaf -jaf -jaf -hsL -qrD -hsL -jaf -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(41,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -psp -qLT -qLT -qLT -qLT -qLT -qLT -qLT -qLT -ahA -edR -qLT -oGq -qLT -psp -inD -oHq -xRs -uoO -gvh -inD -inD -pla -inD -inD -dsq -woM -inD -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -cuW -ucT -mKj -yhr -mKj -ucT -ucT -ucT -ucT -cuW -ucT -hsL -uqi -mKj -ucT -ucT -ucT -ucT -ucT -hsL -mKj -qrD -mKj -jaf -cZs -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(42,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -qLT -xnA -wgc -xnA -xnA -xnA -xnA -xnA -xnA -xnA -qLT -qLT -nlJ -qLT -psp -gnE -uQB -uoO -uoO -gvh -dsq -dsq -dsq -dsq -dsq -dsq -woM -inD -psp -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -cuW -cuW -cuW -uqi -hsL -ucT -ucT -cuW -ucT -ucT -ucT -mKj -uqi -uqi -mKj -hsL -hsL -mKj -hsL -mKj -wBu -hdv -hsL -jaf -cZs -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(43,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -qLT -rGL -xgA -wlB -wlB -wlB -wlB -wlB -wlB -xnA -qLT -qLT -uFI -qLT -psp -inD -pTJ -lOm -uoO -cmZ -inD -dsq -dsq -inD -inD -dsq -inD -inD -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -cuW -ucT -hsL -uqi -cuW -cuW -cuW -cuW -cuW -cuW -cuW -cuW -uqi -uqi -uqi -uqi -hsL -uqi -hsL -hsL -yhr -uqi -hsL -jaf -cZs -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(44,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -qLT -xnA -wlB -ced -iRp -iRp -ced -iRp -orW -jZF -kQy -hWR -dbV -qLT -qLT -inD -inD -inD -iap -iap -inD -uCR -iap -inD -mzq -tQC -jge -inD -oFV -oFV -oFV -oFV -oFV -oFV -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -cuW -cuW -cuW -cuW -mKj -hsL -mKj -ucT -ucT -cuW -ucT -cuW -ucT -mKj -uqi -dLn -mKj -hsL -cuW -mKj -cuW -hsL -mKj -uqi -mKj -jaf -cZs -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(45,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -qLT -xnA -wlB -iRp -sgi -cSU -kun -iRp -pNm -afT -wlB -wlB -wlB -wlB -wlB -xnA -qLT -ptt -rPy -rPy -avZ -rPy -hSf -inD -uUr -tQC -gvh -inD -oFV -ePO -ePO -ePO -oFV -oFV -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -cuW -ucT -hsL -xYf -uqi -mKj -hsL -cuW -mKj -cuW -mKj -hsL -uqi -mKj -ucT -ucT -cuW -ucT -cuW -ucT -hsL -yhr -hsL -jaf -cZs -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(46,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -qLT -xnA -wlB -wmg -bWp -bWp -azz -feV -mbn -feV -ced -iRp -ced -iRp -wlB -xnA -fyR -ptt -ahR -rPy -rPy -rPy -ahR -frf -gPa -tQC -hrw -inD -ePO -ePO -ePO -ePO -ePO -oFV -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -cuW -cuW -cuW -cuW -hsL -uqi -hsL -uqi -uqi -uqi -hsL -hsL -uqi -yhr -cuW -cuW -cuW -cuW -ucT -cuW -cuW -cuW -qrD -hsL -jaf -cZs -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(47,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -eVs -lEA -eVs -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -qLT -xnA -wlB -iRp -suy -wMi -pfN -mbn -fkl -mbn -lOx -omY -kun -iRp -wEW -inD -inD -inD -inD -inD -iap -rPy -rPy -inD -xFa -tQC -xAF -inD -ePO -ePO -oFV -ePO -ePO -oFV -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -cuW -ucT -mKj -hsL -otv -mKj -hsL -uqi -mKj -pch -hsL -mKj -uqi -mKj -ucT -ucT -cuW -ucT -cuW -ucT -mKj -xIG -mKj -jaf -jaf -jaf -jaf -jaf -ucT -ucT -psp -psp -psp -psp -"} -(48,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ygq -ygq -ygq -ygq -ygq -ygq -ygq -eVs -ijK -oOX -gtw -tvZ -tvZ -tvZ -tvZ -gtw -gtw -tvZ -tvZ -tvZ -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -qLT -rGL -qTv -iRp -dfC -jgk -nrS -jTS -eHT -mbn -qMt -wMi -jIR -iRp -wlB -inD -eUD -qVi -nDi -whL -inD -tYR -rPy -iGb -miv -tQC -dGC -inD -ePO -ePO -ePO -ePO -ePO -oFV -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -cuW -ucT -ucT -hsL -uqi -ucT -hsL -yhr -hsL -cuW -ucT -hsL -uqi -cuW -cuW -cuW -cuW -cuW -cuW -cuW -cuW -hsL -mKj -hsL -hsL -mKj -hsL -hsL -mKj -ucT -psp -psp -psp -psp -"} -(49,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -cqj -cqj -cqj -cqj -cqj -cqj -fVL -cqj -cqj -cqj -cqj -cqj -cqj -cqj -cqj -cqj -psp -psp -psp -psp -psp -ijK -ijK -ygq -gtw -tvZ -gtw -tvZ -gtw -gtw -oOX -tMr -eFL -bVR -qio -ukE -bVR -qio -kqz -owX -gKG -gKG -gtw -tvZ -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -qLT -xnA -wlB -iRp -iRp -iRp -iRp -mbn -wlQ -xGE -cKT -bWp -hBG -fYN -wlB -inD -eYQ -dTr -tQC -gCc -iGb -rPy -rPy -iap -inD -tQC -qGU -inD -ePO -ePO -ePO -ePO -ePO -oFV -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -uqi -ucT -ucT -uqi -cuW -cuW -cuW -cuW -hsL -hsL -ucT -ucT -cuW -ucT -cuW -ucT -hsL -hsL -hsL -hsL -dGR -hsL -hsL -hsL -ucT -ucT -psp -psp -psp -psp -"} -(50,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -cqj -cqj -fVL -cqj -cqj -cqj -fVL -cqj -cqj -cqj -fVL -cqj -cqj -cqj -cqj -cqj -psp -psp -psp -psp -psp -ijK -ijK -ygq -gtw -bVR -ezU -gtw -gtw -tvZ -eFL -oOX -eFL -qio -xSd -xSd -xSd -xSd -gtw -qVm -oEf -gKG -sVC -gtw -tvZ -tvZ -gtw -tvZ -gtw -gtw -tvZ -hsL -hsL -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -qLT -xnA -wlB -eXr -qVO -gGC -vXs -yds -bbG -mbn -ewT -rHl -isk -iRp -orW -inD -uUr -inD -tQC -qZv -inD -kLR -ahR -nzX -inD -dsq -inD -inD -ePO -ePO -oFV -ePO -ePO -oFV -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -cuW -ucT -mKj -uqi -mKj -cuW -ucT -mKj -uqi -mKj -ucT -ucT -cuW -ucT -cuW -ucT -mKj -hsL -mKj -hsL -hsL -mKj -ucT -ucT -ucT -ucT -psp -psp -psp -psp -"} -(51,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -cqj -cqj -fVL -cqj -cqj -cqj -fVL -cqj -fVL -cqj -cqj -cqj -psp -psp -psp -psp -psp -ijK -ijK -ygq -tvZ -ley -qio -qio -kqz -nSS -ihA -ezU -qio -ukE -xSd -qio -vZN -qio -xSd -wRz -gtw -gKG -gKG -kqz -qio -qio -qio -qio -qio -bJm -gtw -hsL -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -qLT -qxF -xnA -gGC -xnA -wlB -feV -xWJ -yds -mbn -ced -ced -ced -ced -ced -inD -dsq -gFH -dsq -wQO -frf -ahR -ohj -nzX -inD -dsq -ePO -ePO -ePO -ePO -ePO -ePO -ePO -oFV -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -cuW -cuW -cuW -cuW -ucT -cuW -ucT -hsL -hsL -hsL -ucT -ucT -cuW -cuW -cuW -cuW -cuW -uqi -hsL -ucT -ucT -ucT -ucT -ucT -ucT -ucT -psp -psp -psp -psp -"} -(52,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -cqj -cqj -psp -psp -psp -psp -psp -ijK -ijK -ygq -tvZ -gtw -qio -ukE -gtw -gtw -xSd -gtw -xSd -xSd -xSd -qio -oLC -qio -xSd -xSd -xSd -owX -gKG -tvZ -gtw -gtw -gtw -gtw -ley -qio -tvZ -hsL -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -qLT -qLT -qLT -qLT -gJg -wfm -feV -mbn -yds -yds -ced -nVd -hoP -szw -ced -inD -kBN -dsq -dsq -lOZ -lOZ -qSx -mzh -lOZ -inD -dsq -inD -inD -oFV -ePO -ePO -ePO -oFV -oFV -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -cuW -ucT -ucT -cuW -cuW -cuW -uqi -uqi -uqi -cuW -cuW -cuW -cuW -ucT -cuW -ucT -hsL -uqi -cuW -cuW -cuW -ucT -ucT -psp -psp -psp -psp -psp -psp -psp -"} -(53,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -psp -psp -psp -psp -ijK -ijK -ygq -ygq -gtw -kqz -gtw -tvZ -riw -gip -byi -diP -hTa -xSd -qio -hcr -kiO -vZN -juC -gKG -gKG -auJ -tvZ -fIm -fKq -fKq -gtw -gtw -qio -gtw -hsL -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -qLT -qLT -qLT -qLT -xnA -wlB -feV -vRU -vNy -yds -llQ -bWp -bWp -bXw -ced -inD -inD -inD -dsq -lOZ -tWT -ecK -lrh -lOZ -oXJ -dsq -dsq -inD -oFV -oFV -oFV -oFV -oFV -oFV -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -cuW -cuW -cuW -cuW -hsL -hsL -hsL -mKj -uqi -mKj -hsL -ucT -cuW -ucT -cuW -ucT -mKj -hsL -mKj -ucT -ucT -ucT -ucT -psp -psp -psp -psp -psp -psp -psp -"} -(54,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -cqj -psp -psp -psp -psp -ijK -ijK -ygq -ygq -gtw -qio -tvZ -hRu -fgs -vTq -vTq -vTq -fgs -oRy -qio -xSd -xSd -xSd -xSd -xSd -gKG -gKG -gtw -xLR -lJI -vrm -pbD -bVR -qio -tvZ -hsL -psp -ijK -ijK -rbU -fyR -fyR -fyR -fyR -qLT -qLT -qLT -xnA -xnA -xnA -xnA -xnA -wlB -feV -mbn -mbn -mbn -ced -iKc -bWp -cuB -ced -inD -inD -inD -dsq -lOZ -lOZ -lOZ -lOZ -lOZ -dsq -dsq -dsq -inD -psp -cZM -cZM -cZM -psp -psp -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -cuW -ucT -ucT -cuW -uqi -uqi -uqi -uqi -uqi -uqi -mKj -hsL -cuW -mKj -cuW -mKj -uqi -uqi -cuW -cuW -cuW -ucT -ucT -psp -psp -psp -psp -psp -psp -psp -"} -(55,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -psp -psp -psp -psp -ijK -ijK -psp -psp -tvZ -stR -hcr -qrh -fgs -bTg -pCU -wiM -fgs -wTU -qio -qio -xSd -syZ -eRP -gtw -erC -iNk -gtw -bQk -oiJ -hAo -pbD -qio -gtw -gtw -hsL -psp -ijK -ijK -fyR -xnA -qxF -xnA -xnA -xnA -xnA -xnA -xnA -qLT -qLT -xnA -wlB -wlB -qLT -gjC -bYh -dxx -ced -cVF -rwF -bWp -ced -yhx -sGh -oRn -dsq -dsq -dsq -dsq -xzR -dsq -dsq -dsq -dsq -inD -psp -cZM -isW -cZM -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -cuW -ucT -ucT -ucT -hsL -hsL -uqi -uqi -uqi -hsL -uqi -hsL -uqi -uqi -uqi -cuW -cuW -cuW -cuW -ucT -psp -psp -psp -psp -psp -psp -psp -"} -(56,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -cqj -psp -psp -psp -psp -ijK -ijK -psp -psp -gtw -dqx -xSd -uFE -fgs -vTq -vTq -vTq -csS -jzs -jne -xSd -xSd -pxn -qio -hPq -erC -erC -hPq -qio -qio -mMW -pbD -qio -tvZ -hsL -hsL -psp -ijK -ijK -fyR -xnA -fyR -fyR -fyR -fyR -qLT -fyR -qLT -qLT -fqY -xnA -wlB -feV -feV -xTY -cJr -yds -hWg -bWp -bWp -hBG -ced -qNz -sGh -inD -inD -inD -inD -inD -inD -inD -inD -inD -inD -inD -psp -cZM -tfY -cZM -psp -psp -psp -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -cuW -ucT -ucT -ucT -mKj -hsL -hsL -mKj -hsL -cuW -mKj -cuW -hsL -mKj -cuW -mKj -ucT -ucT -ucT -ucT -psp -psp -psp -psp -psp -psp -psp -"} -(57,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -psp -psp -ijK -ijK -ijK -psp -psp -gtw -qio -xSd -xSd -byi -fgs -diP -eBG -mxq -xSd -xSd -xSd -wDj -qio -pqq -gtw -erC -erC -gtw -rje -qio -cCX -pbD -nSS -tvZ -hsL -psp -ijK -ijK -ijK -qLT -xnA -fyR -psp -cZM -cZM -cZM -psp -psp -qLT -xnA -cSp -ppN -feV -mGt -ibG -oTW -cIO -uQl -aSj -vWm -qwv -ced -sGh -cZM -cZM -cZM -ejQ -cZM -cZM -wEW -dAV -rTk -psp -psp -psp -psp -cZM -qNz -cZM -psp -psp -psp -psp -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -cuW -ucT -cuW -ucT -cuW -ucT -cuW -ucT -ucT -cuW -ucT -ucT -ucT -ucT -ucT -psp -psp -psp -psp -psp -psp -psp -"} -(58,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -cqj -psp -psp -psp -ijK -ijK -psp -psp -psp -tvZ -qio -tvZ -xSd -xSd -mgy -xSd -xSd -xSd -xSd -gtw -gtw -xnj -qio -ojm -gtw -erC -erC -gtw -wxb -lDO -dLG -pbD -hrB -gtw -hsL -psp -ijK -ijK -psp -fyR -xnA -qLT -psp -cZM -isW -cZM -cZM -cZM -cZM -les -les -les -feV -jvP -jvP -jvP -jvP -ced -ced -ced -ced -ced -sGh -cZM -cZM -srW -fiK -kkl -cZM -cZM -wlB -rTk -psp -psp -psp -psp -cZM -sGh -cZM -psp -psp -psp -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -cuW -cuW -cuW -cuW -cuW -ucT -cuW -cuW -cuW -cuW -cuW -cuW -ucT -ucT -ucT -psp -psp -psp -psp -psp -psp -psp -"} -(59,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -psp -psp -ijK -ijK -ijK -eVs -eVs -eVs -tvZ -vPZ -gtw -pbD -qNI -erC -gtA -pbD -gSH -ezU -tvZ -jvY -tHr -hmu -asE -tvZ -erC -pBw -tvZ -gtw -gtw -gtw -gtw -vXb -gtw -hsL -psp -ijK -ijK -fyR -qLT -xnA -qLT -edR -cZM -qNz -ojT -sGh -vcJ -sGh -sGh -sGh -sGh -sGh -sGh -sGh -sGh -yhx -sGh -sGh -sGh -sGh -sGh -sGh -cZM -hsA -qxO -rXT -qxO -teu -cZM -oqL -fyR -cZM -cZM -cZM -cZM -cZM -sGh -cZM -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -cuW -ucT -ucT -ucT -cuW -ucT -cuW -ucT -ucT -cuW -ucT -ucT -ucT -ucT -ucT -psp -psp -psp -psp -psp -psp -psp -"} -(60,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -psp -ijK -ijK -ijK -ijK -lEA -tMr -eVs -tvZ -bVR -tvZ -hcr -vHH -erC -erC -pbD -jQB -tOU -gtw -tvZ -cHD -qio -pak -xSd -xhr -lil -drL -kmu -vWD -vWD -vWD -qio -tvZ -hsL -psp -ijK -ijK -noo -wlB -dAc -wfm -edR -cZM -cZM -cZM -cZM -cZM -cZM -les -les -les -les -cZM -cZM -cZM -cZM -cZM -cZM -cZM -cZM -cZM -sGh -cZM -jfB -gFR -oNh -gFR -lWG -cZM -uPP -asS -sGh -kho -sGh -sGh -sGh -ojT -cZM -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(61,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -ijK -ijK -ijK -psp -psp -eVs -eVs -eVs -tvZ -qio -tvZ -tvZ -tJG -twV -spQ -tvZ -nSS -gSH -gtw -rFA -hSa -qio -uXM -pbD -qio -qzq -tvZ -hRN -abr -hrB -abr -lvI -gtw -hsL -psp -ijK -ijK -qLT -wlB -xnA -qLT -edR -psp -psp -psp -psp -psp -psp -qLT -vjo -wlB -qLT -xfY -dMl -iRs -xfY -xfY -xfY -xfY -xfY -cZM -sGh -cZM -hTM -gFR -fhv -gFR -uFZ -uEU -lQI -asS -cZM -bjI -cZM -cZM -cZM -cZM -cZM -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(62,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -svB -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -psp -psp -psp -rTk -tvZ -gtw -gtw -qio -tvZ -gtw -pbD -tvZ -tvZ -gtw -gtw -tvZ -tvZ -tvZ -tvZ -hDE -xSd -pbD -qio -qio -sMh -bJm -hrB -abr -abr -hrB -rEX -hsL -psp -ijK -ijK -qLT -wlB -xnA -qLT -psp -psp -psp -psp -psp -psp -psp -qLT -mOl -bPr -lQe -xnA -xnA -xZA -mSC -xfY -hmg -nGr -xfY -cZM -sGh -cZM -jfB -gFR -ekI -gFR -lWG -cZM -nUn -fyR -cZM -isW -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(63,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -svB -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -ijK -ijK -psp -hsL -hsL -hsL -buA -ezU -nSS -vPZ -tvZ -gtw -uQr -rUt -aVE -qFE -dXe -nTh -gtw -tvZ -fpB -lug -jOm -pbD -iNk -uxG -gtw -teg -hrB -abr -abr -qZn -tvZ -psp -psp -ijK -ijK -qLT -wlB -xnA -fyR -psp -psp -psp -psp -psp -psp -psp -qLT -dFd -iqZ -qLT -xfY -myf -nGr -xnA -xnA -xnA -xZA -nGr -cZM -sGh -uEU -uFZ -uFZ -uFZ -uFZ -uFZ -cZM -qTv -fyR -fyR -fyR -fyR -fyR -fyR -fyR -fyR -fyR -fyR -psp -psp -psp -psp -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(64,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -dwf -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -psp -hsL -ygq -tvZ -qio -tvZ -tvZ -gtw -rEX -rEX -gkd -xvB -dBO -dBO -dBO -krw -gtw -pbD -jXM -tvZ -vAv -tvZ -erC -nWf -iqm -tRi -nTz -oNx -nTz -sqT -tvZ -psp -psp -ijK -ijK -fyR -wlB -xnA -qLT -psp -psp -psp -psp -psp -psp -psp -qLT -xnA -wlB -qLT -xfY -xfY -xfY -xfY -xfY -xfY -xnA -dFd -cZM -cZM -cZM -pja -cZM -wSj -cZM -tbC -cZM -wlB -fyR -fyR -dAV -wmC -pNm -tfJ -wlB -wmC -wlB -fyR -psp -psp -psp -psp -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(65,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -fVL -fVL -dwf -fVL -fVL -fVL -fVL -fVL -svB -fVL -fVL -fVL -fVL -fVL -fVL -fVL -psp -ijK -ijK -psp -hsL -ygq -gtw -qio -gtw -eEM -usN -lEl -gtw -cEf -aVE -dBO -xQC -dBO -vwS -tvZ -gtw -tvZ -pbD -tvZ -gtw -lhc -lhc -tvZ -gtw -ced -ced -iRp -ced -ced -psp -psp -ijK -ijK -qLT -wlB -xnA -qLT -qLT -qLT -fyR -qLT -fyR -qLT -fyR -qLT -xnA -wlB -fyR -fyR -fyR -fyR -fyR -fyR -fyR -fyR -lQe -cZM -cZM -cZM -cZM -cZM -cZM -cZM -cZM -cZM -mpf -fyR -fyR -wlB -fyR -fyR -fyR -fyR -fyR -wlB -fyR -fyR -fyR -fyR -fyR -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(66,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -svB -cqj -svB -cqj -fVL -cqj -svB -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -psp -hsL -gtw -gtw -qio -rEX -gKG -anm -gKG -gtw -uQr -gos -dBO -aHC -dBO -aVE -tvZ -ehS -qio -dwx -jOB -dek -lhc -lhc -lhc -tbe -ced -owj -cCJ -qmE -iRp -iRp -ced -ijK -ijK -fyR -wlB -dAc -afT -wlB -wlB -wlB -wlB -wlB -wmC -wlB -wlB -dAc -wlB -wlB -wlB -wlB -wlB -wmC -wlB -wlB -iqZ -pro -iqZ -wlB -wmC -wmC -wlB -dAc -wlB -wmC -wlB -wlB -wlB -wlB -wfm -wlB -wmC -wlB -wlB -wlB -wlB -wlB -wlB -wlB -mpf -wlB -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(67,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -fVL -fVL -svB -fVL -svB -svB -svB -svB -svB -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -ijK -ijK -psp -hsL -tvZ -bVR -nSS -tvZ -gKG -etw -gKG -gtw -hdm -hWY -dBO -xQC -dBO -aVE -wOS -qZe -lhc -fvn -sMX -sMX -lhc -lhc -lhc -lhc -lfg -bWp -jAe -vUI -rWX -avs -ced -ijK -ijK -qLT -wlB -xnA -wgc -xnA -xnA -xnA -xnA -xnA -vjo -xnA -xnA -xnA -xnA -qxF -xnA -xnA -xnA -vjo -wlB -wlB -xnA -xnA -xnA -xnA -vjo -vjo -xnA -xnA -xnA -vjo -xnA -lQI -xnA -xnA -xnA -xnA -vjo -xnA -xnA -xnA -lQI -xnA -xnA -xnA -qoI -xnA -aNo -aoO -cZz -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(68,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -svB -cqj -svB -cqj -fVL -cqj -svB -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -psp -hsL -gtw -qio -tvZ -gtw -gtw -hnu -gtw -gtw -uQr -cCw -dBO -dBO -dBO -khg -tvZ -fHJ -qio -dwx -gJM -vUG -lhc -lhc -lhc -sPy -ced -bWp -vUI -jAe -ced -xdl -ced -ijK -ijK -qLT -wlB -xnA -qLT -qLT -qLT -fyR -qLT -fyR -fyR -xnA -qLT -qLT -xnA -qLT -qLT -fyR -qLT -qLT -wlB -wlB -fyR -qLT -qLT -fyR -fyR -qLT -fyR -qLT -fyR -fyR -xnA -wfm -cZM -cZM -cZM -cZM -cZM -cZM -cZM -xnA -wlB -fyR -fyR -fyR -fyR -xnA -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(69,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -fVL -svB -fVL -svB -fVL -svB -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -psp -ijK -ijK -psp -hsL -gtw -qio -tvZ -tGP -gtw -lZe -whu -gtw -kFE -kLz -aVE -kZc -aVE -iEe -tvZ -gtw -gtw -pbD -gtw -gtw -lhc -lhc -gtw -tvZ -ced -bnP -tuU -eDZ -ced -ced -ced -ijK -ijK -fyR -wlB -xnA -fyR -psp -psp -psp -psp -psp -qLT -iQt -qLT -qLT -xnA -fyR -rbU -rbU -rbU -qLT -wlB -wlB -fyR -qLT -qxF -xnA -cCq -rhv -myf -lHX -qLT -fyR -xnA -wlB -cZM -ufp -nMn -qSX -qSX -qSX -cZM -xnA -kZh -fyR -vNq -aeH -fyR -xnA -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(70,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -svB -cqj -svB -cqj -svB -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -psp -hsL -gtw -qio -gtw -bhc -qio -tOU -dVU -gtw -gtw -tvZ -pbD -gtw -tvZ -gtw -gtw -qio -sMX -qio -qio -kqz -lhc -lhc -gtw -gBm -iRp -bWp -eDZ -eDZ -ced -psp -psp -ijK -ijK -qLT -wlB -xnA -fyR -sRb -sRb -sRb -sRb -sRb -sRb -tnO -sRb -fyR -xnA -qLT -rbU -rbU -rbU -fyR -xbu -qTv -xnA -aKs -xnA -xnA -xnA -bKX -wwo -xnA -lsL -vjo -xnA -wkZ -cZM -avy -avy -osR -osR -qSX -cZM -xnA -lQI -fSP -qfT -eBB -fyR -xnA -ijK -ijK -cZz -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(71,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -svB -svB -fVL -svB -fVL -svB -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -ijK -ijK -psp -hsL -gtw -qio -gtw -gtw -oxU -qio -oxU -gtw -gtw -gtw -gtw -gtw -lsd -uwG -gtw -qio -gtw -dwx -ced -ced -ced -ced -ced -aRI -iRp -lKo -qkJ -umO -ced -psp -psp -ijK -ijK -qLT -wlB -xnA -tlx -sRb -uiG -fdY -xRz -eTh -sFf -rWD -sRb -fyR -xnA -fyR -fyR -rbU -rbU -fyR -xnA -wlB -fyR -qLT -xnA -jPr -xnA -vjo -dFd -eaT -qLT -fyR -rGL -qTv -cZM -edO -ouq -qSX -qSX -oQh -cZM -xnA -yci -fyR -rTk -rTk -fyR -qxF -ijK -ijK -eGI -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(72,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -svB -cqj -svB -svB -svB -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -psp -hsL -tvZ -jml -qio -tvZ -eeH -tGP -lcY -vrh -gKG -gKG -kBk -elo -kWt -vWJ -gtw -qio -jbd -qio -ced -alG -bWp -rlJ -qgE -qgE -iRp -iRp -aRI -ced -ced -psp -psp -ijK -ijK -nmN -wlB -xnA -tlx -hhL -aqs -mBF -vCr -sFf -tgz -rWD -sRb -qLT -xnA -lOS -fyR -fyR -qLT -qLT -qxF -wlB -cZM -cZM -les -cZM -cZM -cZM -les -cZM -les -fyR -qxF -wfm -cZM -qSX -qSX -qSX -qSX -qSX -cZM -xnA -yci -fyR -psp -psp -fyR -fyR -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(73,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -svB -svB -sjZ -svB -svB -fVL -svB -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -ijK -ijK -ijK -hsL -tvZ -gtw -qio -tvZ -gtw -cCE -pbD -tvZ -ozE -gKG -gtw -gtw -gtw -pbD -gtw -gtw -gtw -pPO -ced -alG -bWp -bWp -oKl -nji -iRp -aRI -aRI -aRI -rTk -psp -psp -ijK -ijK -qLT -wlB -pNm -tlx -oXb -kXe -gIz -vCr -rWD -rWD -nxD -sRb -fyR -xnA -xnA -xnA -xnA -xnA -xnA -xnA -wlB -cZM -jwk -jwk -jwk -jwk -jwk -jwk -jwk -sMr -fyR -dAV -uSU -cZM -qSX -qoz -ouq -qSX -qSX -cZM -xnA -yci -fyR -psp -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(74,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -svB -cqj -svB -cqj -svB -cqj -svB -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -psp -ijK -ijK -psp -ygq -gtw -qio -nSS -ezU -qio -qio -kqz -qio -qio -qio -qio -qio -qio -ezU -ezU -qio -qio -vBX -rzv -bWp -bWp -bWp -stI -aRI -aRI -psp -aRI -rTk -psp -psp -ijK -ijK -qLT -xnA -wlB -tlx -sGM -imT -hlB -nYB -eTh -sFf -rWD -sRb -fyR -fyR -aKs -fyR -qLT -fyR -qLT -xnA -wlB -cZM -jwk -ezM -ezM -qSX -qSX -qyv -jwk -sMr -fyR -wfm -wlB -cZM -qSX -ouq -ouq -qoz -qSX -cZM -qxF -yci -fyR -psp -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -hDi -tqO -tqO -hDi -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(75,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -fVL -svB -fVL -svB -fVL -svB -fVL -svB -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -psp -psp -ijK -ijK -psp -ygq -gtw -rEX -gtw -gtw -gtw -gtw -gtw -tvZ -gtw -qio -ukE -jml -qio -qio -quW -qio -jne -ced -iRp -ced -duv -ced -ced -iRp -psp -psp -aRI -aRI -aRI -psp -ijK -ijK -fyR -xnA -wlB -tlx -sRb -qgf -gAe -nYt -dzy -sFf -sca -sRb -psp -rbU -xnA -rbU -rbU -rbU -qLT -wlB -wlB -cZM -jwk -ezM -myP -qSX -qSX -wGg -jwk -sMr -fyR -uSU -wlB -cZM -dWu -swo -swo -swo -dWu -cZM -jZF -wlB -fyR -psp -psp -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -tqO -tFF -kML -tqO -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(76,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -svB -cqj -svB -cqj -svB -cqj -svB -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -ijK -psp -psp -psp -hsL -hsL -hsL -hsL -hsL -rEX -tvZ -gtw -wrV -gtw -gtw -rEX -tvZ -ced -xOs -ced -iRp -alG -seF -bWp -alG -wOz -nGC -psp -psp -psp -psp -aRI -psp -ijK -ijK -fyR -xnA -wfm -qLT -sRb -sRb -sRb -sRb -sRb -sRb -sRb -sRb -psp -rbU -xnA -xnA -rbU -rbU -fyR -wlB -xnA -cZM -jwk -ezM -qSX -qSX -epm -fXZ -jwk -sMr -fyR -fyR -mXf -cZM -qSX -qSX -qSX -qSX -vSR -cZM -fyR -fyR -fyR -psp -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -kvv -les -kvv -psp -psp -psp -psp -psp -tqO -rng -rng -hDi -tqO -tqO -tqO -hDi -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(77,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -fVL -fVL -fVL -svB -fVL -svB -svB -svB -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -ijK -ijK -psp -psp -uQd -uQd -uQd -uQd -uQd -uQd -hsL -hsL -gtw -cjc -qio -wnR -eFL -fkZ -oOX -oaH -bdv -iFF -tLl -bWp -cHy -bWp -bWp -whF -nGC -aRI -aRI -aRI -aRI -aRI -psp -ijK -ijK -qLT -xnA -wlB -fyR -edR -rTk -rTk -psp -psp -psp -psp -psp -psp -rbU -myf -xnA -awU -rbU -fyR -qTv -rGL -cZM -cZM -cZM -cZM -hLN -cZM -cZM -sMr -cZM -fyR -fyR -wlB -cZM -vSR -qSX -vSR -nbT -qSX -sMr -psp -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -kvv -kvv -kvv -kvv -psp -psp -kvv -les -kvv -poF -les -psp -psp -psp -psp -psp -tqO -riq -riq -riq -riq -riq -riq -tqO -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(78,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -svB -cqj -svB -cqj -svB -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -psp -uQd -uQd -eGK -xkk -lnO -aZT -uQd -uQd -hsL -gtw -eOs -qio -bbn -eFL -bOc -oOX -rHH -bdv -iFF -mop -bWp -bWp -bWp -bWp -vuw -nGC -aRI -psp -psp -psp -psp -psp -ijK -ijK -qLT -jzA -uSU -qLT -nxY -qfT -rTk -psp -psp -psp -psp -psp -psp -rbU -rbU -nGr -uDI -rbU -qLT -wlB -wlB -cZM -hrp -ehg -gbA -gbA -yhh -cZM -psp -rTk -mdy -qEA -bZV -cZM -nbT -qSX -qSX -vSR -qSX -sMr -psp -psp -psp -ijK -ijK -ijK -psp -uCd -uCd -uCd -val -drr -uvC -kvv -kvv -kvv -kvv -kvv -nsy -sGh -kvv -psp -psp -psp -psp -psp -tqO -riq -riq -riq -msG -uSn -dZB -tqO -cjj -cjj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(79,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -fVL -fVL -svB -fVL -dwf -fVL -svB -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -ijK -ijK -psp -uQd -iaf -rBL -euk -rBL -euk -hio -uQd -hsL -gtw -uDK -tSb -bhL -eFL -tMr -oOX -bPp -bdv -kyH -qHN -bWp -bWp -bWp -ykl -tPA -iRp -aRI -aRI -aRI -aRI -psp -psp -ijK -ijK -qLT -xnA -mQF -fSP -qfT -qfT -rTk -psp -psp -fyR -fyR -fyR -psp -rbU -rbU -rbU -rbU -rbU -qLT -xnA -wlB -cZM -uQj -gzv -gbA -gbA -nBX -cZM -cZM -cZM -cZM -cZM -cZM -cZM -atf -abA -qij -abA -atf -sMr -psp -psp -psp -ijK -ijK -dyO -uCd -bYg -bYg -uCd -val -sGh -sGh -tJu -tJu -sGh -tJu -vec -sGh -sGh -kvv -psp -psp -psp -psp -psp -tqO -riq -riq -riq -eTK -cke -cke -tqO -cjj -cjj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(80,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -svB -cqj -svB -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -psp -uQd -hio -euk -fyE -uJH -rBL -hio -uQd -hsL -tvZ -tvZ -tvZ -wRC -cYR -bOc -oOX -mrL -bdv -erS -lEq -bWp -oVe -ebw -aQX -mcG -nGC -psp -psp -psp -aRI -psp -psp -ijK -ijK -qLT -xnA -dAV -qLT -edR -edR -rTk -psp -psp -fyR -omH -fyR -psp -psp -psp -psp -psp -psp -qLT -xnA -wlB -cZM -jTV -cZM -sOE -gbA -nzD -cZM -vfj -inB -dOE -qXU -cZM -sMr -sMr -sMr -sMr -sMr -sMr -sMr -psp -psp -psp -ijK -ijK -uCd -ygg -ygG -uCd -kvv -les -kvv -les -les -les -kvv -les -kvv -sGh -sGh -les -psp -psp -psp -psp -psp -tqO -riq -riq -riq -cke -cke -cke -tqO -tPG -cjj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(81,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -fVL -fVL -fVL -fVL -fVL -svB -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -ijK -ijK -psp -uQd -hio -rBL -qlN -oFd -euk -uDp -uQd -hsL -gtw -gtw -gtw -gtw -eFL -ijK -oOX -iRp -nGC -iRp -iRp -nGC -nGC -nGC -iRp -iRp -iRp -psp -aRI -aRI -aRI -psp -psp -ijK -ijK -cZM -cZM -cZM -cZM -cZM -psp -psp -psp -psp -fyR -fyR -fyR -psp -fyR -qLT -fyR -qLT -qLT -qLT -xnA -wlB -cZM -cZM -cZM -cZM -cZM -cZM -cZM -vfj -oIj -uFC -qbm -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -uCd -bYg -uCd -kvv -xpF -nsy -sGh -wwn -eJH -ewq -iGd -kvv -val -paT -les -les -uCd -bYg -psp -psp -psp -tqO -riq -riq -riq -bWe -cke -cke -wsP -wsP -tqO -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(82,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -psp -uQd -jnS -euk -orD -dyy -rBL -hio -uQd -hsL -hsL -hsL -psp -psp -eVs -eIz -eVs -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -aRI -psp -psp -psp -psp -ijK -ijK -cZM -gbA -aJW -cZM -cZM -cZM -cZM -cZM -cZM -psp -psp -psp -psp -fyR -xnA -xnA -xnA -xnA -vTN -xnA -wlB -fyR -rTk -cDx -cDx -cDx -cDx -cDx -fcB -ejm -uFC -qbm -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -uCd -ygG -bYg -val -uKl -bPb -hfn -sGh -sGh -sGh -sGh -fKe -fKe -sGh -kvv -uCd -uCd -bYg -psp -psp -psp -hDi -tqO -tqO -tqO -tqO -tqO -tqO -hDi -tqO -tqO -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(83,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -ijK -ijK -psp -uQd -uQd -oem -hio -hio -gHs -uQd -uQd -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -aRI -psp -psp -psp -psp -ijK -ijK -cZM -gbA -gbA -opi -cZM -fyY -dNW -wgz -cZM -psp -psp -psp -psp -fyR -xnA -qLT -qLT -fyR -qLT -xnA -wlB -fyR -psp -hua -tys -pYT -iKq -iYl -cDx -kvv -cZM -oTO -cZM -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -uCd -ygG -uCd -kvv -xpF -oat -iGd -ojT -mEx -qMW -sGh -kvv -val -sGh -les -uCd -uCd -bYg -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(84,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -psp -psp -uQd -uQd -uQd -uQd -uQd -uQd -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -cZM -idH -gbA -gbA -kzV -dNW -fdx -ydq -cZM -psp -psp -psp -psp -fyR -xnA -qLT -uSU -wfm -jfH -gGC -wlB -qLT -psp -qXG -pUL -tJd -tJd -ybJ -nLP -sGU -jOu -jOu -rTU -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -uCd -ygG -bYg -uCd -kvv -kvv -kvv -kvv -kvv -kvv -sGh -kvv -kvv -kvv -kvv -uCd -uCd -dQf -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(85,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -cZM -idH -gbA -gbA -wRi -dNW -fbS -dNW -cZM -psp -psp -psp -psp -fyR -xnA -qLT -qLT -qLT -fyR -xnA -wlB -qLT -psp -qXG -tJd -tJd -tJd -ybJ -nLP -kvv -jNI -pVQ -pVQ -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -uCd -ygG -uCd -uCd -uCd -les -sGh -fKe -fKe -sGh -sGh -sGh -kvv -uCd -uCd -uCd -uCd -ygG -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(86,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -cZM -qbB -gbA -gbA -cZM -dNW -rYK -cZM -cZM -cZM -cZM -cZM -cZM -cZM -xnA -qLT -dAV -uSU -srS -wlB -wlB -qLT -fyR -qXG -tJd -tJd -tJd -ybJ -qNc -kvv -sXH -puh -izo -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -uCd -ygG -uCd -agr -bYg -val -sGh -kvv -kvv -oat -fwP -oat -les -uCd -bYg -agr -agr -ygG -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(87,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -rky -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -cZM -cZM -tzp -cZM -cZM -mJh -cZM -cZM -fex -tGk -yee -cZM -rhz -cZM -xnA -qLT -qLT -qLT -qLT -dFd -wfm -wlB -qLT -qXG -hDr -iQO -tJd -ybJ -qNc -kvv -bHT -puh -nEL -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -uCd -ygG -uCd -ygG -uCd -les -qSX -les -kvv -kvv -les -les -les -uCd -uCd -uCd -ygG -uCd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(88,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -cZM -gbA -gbA -gbA -gbA -cZM -cZM -wzF -tGk -pQS -bKg -tGk -cZM -cSp -xnA -cSp -iyB -qLT -cHB -xnA -wlB -qLT -qXG -iYl -mBY -pCG -iYl -qNc -kvv -sMo -pVQ -gGM -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -uCd -ygG -ygG -ygG -bYg -val -sGh -les -uCd -bYg -uCd -bYg -uCd -bYg -uCd -bYg -ygG -bYg -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(89,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -psp -psp -psp -psp -psp -mMv -mMv -mMv -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -cZM -gbA -gbA -gbA -gbA -cZM -cZM -mAN -sAP -cxQ -hML -cGj -cZM -qLT -qLT -fyR -qLT -qLT -fyR -dFd -wlB -qLT -qXG -nLP -nLP -nLP -nLP -qNc -kvv -cZM -cZM -cZM -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -uCd -uCd -uCd -ygG -uCd -les -qSX -les -uCd -ygG -ygG -ygG -ygG -ygG -bYg -uCd -ygG -uCd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(90,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -cqj -cqj -psp -psp -psp -psp -mMv -tXz -hEa -iYO -mMv -psp -rye -rye -psp -psp -rye -rye -rye -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -cZM -eGB -eRR -cFs -hEf -cZM -cZM -cZM -cZM -cZM -cZM -cZM -cZM -psp -tWi -rTk -rTk -edR -qLT -rGL -qTv -fyR -qXG -nLP -sFL -sFL -nLP -cDx -cDx -fdv -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -uCd -uCd -bYg -ygG -bYg -les -vbA -sMr -bYg -ygG -uCd -uCd -uCd -ygG -uCd -uCd -ygG -bYg -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(91,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -psp -mMv -dlY -gwE -loM -mMv -psp -rye -rye -psp -psp -rye -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -cZM -cZM -cZM -cZM -cZM -cZM -psp -psp -psp -psp -psp -psp -psp -rPA -pZz -rTk -qfT -qfT -vaR -xnA -wlB -qLT -qXG -lzR -vBC -jxL -nLP -cDx -rVZ -fdv -psp -psp -psp -psp -uNR -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -uCd -uCd -uCd -ygG -uCd -sMr -axL -sMr -uCd -ygG -uCd -bYg -ygG -ygG -uCd -uCd -agr -uCd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(92,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -cqj -cqj -cqj -cqj -psp -psp -mMv -xPr -knj -ewn -mMv -psp -rye -rye -rye -psp -psp -rye -rye -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -bCk -qfT -rTk -qfT -rtP -fyR -ioS -wlB -qLT -qXG -gKV -pbt -dyb -nLP -bgN -wEi -fdv -psp -psp -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -uCd -uEy -uEy -mdM -uCd -uCd -ygG -uCd -bYg -ygG -uCd -uCd -uCd -ygG -bYg -uCd -ygG -bYg -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(93,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -psp -psp -psp -mMv -mMv -mMv -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -qfT -rTk -rTk -rTk -qLT -qLT -wlB -fyR -qXG -cXK -xGj -xGj -nLP -cDx -fdv -fdv -psp -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -uCd -uEy -dsI -mdM -ygG -ygG -ygG -uCd -uCd -ygG -uCd -uCd -bYg -ygG -uCd -uCd -ygG -uCd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(94,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -rye -rye -rye -psp -rye -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -nRN -szk -fyR -dKw -dKw -dKw -dKw -dKw -dKw -psp -psp -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uCd -uEy -tTy -uEy -bYg -uCd -ygG -ygG -ygG -ygG -ygG -uCd -uCd -ygG -ygG -ygG -ygG -bYg -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(95,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -rye -psp -psp -psp -psp -psp -rye -psp -rye -rye -rye -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -qLT -qLT -fyR -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -tTy -uEy -uEy -uEy -mdM -uEy -uCd -uCd -ygG -uCd -bYg -ygG -uEy -uEy -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(96,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -rye -rye -rye -psp -psp -rye -rye -rye -psp -rye -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -psp -psp -psp -psp -kxQ -kxQ -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -tTy -tTy -uEy -uEy -uEy -tTy -mdM -dsI -uEy -uCd -ygG -ygG -uCd -bYg -ygG -uEy -tZr -mdM -jUW -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(97,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -rye -psp -rye -psp -rye -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -eAU -xqf -tsY -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -tTy -uEy -uEy -uEy -uEy -uEy -mdM -mdM -ygG -ygG -uCd -uCd -uCd -agr -uEy -mdM -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(98,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -sjk -dUy -dUy -eNd -dUy -eNd -eNd -dUy -dUy -dUy -sjk -dUy -dUy -eNd -dUy -dUy -dUy -eNd -dUy -eNd -sjk -eNd -psp -psp -psp -psp -psp -rye -psp -psp -psp -psp -rye -rye -psp -rye -psp -rye -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -tTy -tTy -uEy -dsI -dsI -dsI -dsI -dsI -uEy -mdM -uEy -uCd -uCd -bYg -ygG -uEy -mdM -mdM -jUW -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(99,1,1) = {" -psp -psp -psp -psp -psp -cRO -gUR -oTy -oTy -oTy -eNd -nJP -vps -vva -bvX -dad -oTy -oTy -eNd -fgc -sjk -oTy -oTy -oTy -oTy -jhi -vva -nGj -eNd -psp -psp -psp -psp -psp -rye -psp -psp -psp -rye -rye -psp -psp -rye -rye -rye -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -tTy -uEy -tTy -uEy -tTy -uEy -tTy -uEy -dsI -uEy -uCd -uCd -uEy -uEy -uEy -mdM -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(100,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -dUy -oTy -oTy -oTy -oTy -vva -vva -vva -vva -vDx -oTy -oTy -oTy -oTy -oTy -oTy -oTy -vva -vDx -oTy -vva -dUy -psp -psp -psp -psp -psp -rye -psp -psp -nMy -psp -rye -rye -psp -rye -psp -rye -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -tTy -kbJ -uEy -uEy -uEy -uEy -uEy -uEy -uEy -mdM -mdM -bYg -bYg -uEy -dsI -mdM -dsI -dsI -mdM -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(101,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -eNd -hQV -oTy -dUy -oTy -vDx -dad -oTy -vva -vva -fyp -dUy -oTy -sjk -fgc -oTy -oTy -oTy -oTy -oTy -oTy -eNd -psp -psp -psp -psp -psp -rye -xxV -xxV -xxV -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -tTy -uEy -uEy -uEy -dsI -dsI -dsI -dsI -dsI -uEy -uEy -uEy -uEy -mdM -uEy -uEy -uEy -dsI -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(102,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -eNd -dad -oTy -dUy -dUy -dUy -sjk -eNd -eNd -sjk -eNd -dUy -oTy -eNd -sjk -eNd -dUy -dUy -eNd -oTy -eNd -sjk -psp -psp -psp -psp -psp -rye -xxV -xxV -xxV -rye -rye -rye -psp -rye -rye -rye -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -tTy -dsI -dsI -tTy -uEy -tTy -uEy -tTy -uEy -mdM -dsI -mdM -dsI -mdM -dsI -dsI -dsI -uEy -dsI -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(103,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -eNd -vva -vDx -dUy -hLd -rES -gtV -eNd -csZ -dre -caF -sjk -oTy -eNd -rOD -dyt -oTy -eNd -oTy -tCX -nGj -eNd -psp -psp -psp -psp -psp -rye -psp -psp -psp -rye -psp -psp -psp -rye -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -dsI -uEy -uEy -uEy -uEy -uEy -dsI -uEy -dsI -uEy -uEy -dsI -uEy -tTy -uEy -dsI -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(104,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -sjk -nOe -vva -oTy -xnF -aXI -oTy -eNd -bhD -vva -xHq -sNf -oTy -eNd -oTy -vDx -kmU -oTy -oTy -vva -rUn -eNd -psp -psp -psp -psp -psp -rye -psp -psp -psp -psp -rye -psp -psp -psp -rye -rye -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -dsI -uEy -uEy -uEy -uEy -uEy -dsI -uEy -tTy -uEy -uEy -dsI -uEy -dsI -uEy -tTy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(105,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -sjk -vDx -tKu -eNd -iHl -hLd -dNi -eNd -oTy -sJD -vva -eNd -oTy -sjk -fyp -xWP -vva -dUy -oTy -oTy -jqC -eNd -psp -psp -psp -psp -psp -rye -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -tTy -dsI -uEy -tTy -tTy -uEy -dsI -uEy -uEy -uEy -tTy -dsI -uEy -tTy -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(106,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -dUy -vDx -dad -eNd -sjk -eNd -dUy -dUy -dUy -eNd -eNd -dUy -oTy -wiS -vva -vDx -vva -sjk -dUy -oTy -eNd -eNd -psp -psp -psp -psp -psp -rye -psp -psp -psp -psp -rye -rye -psp -rye -rye -rye -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -uEy -dsI -dsI -dsI -dsI -uEy -dsI -dsI -uEy -uEy -uEy -dsI -uEy -tTy -uEy -tTy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(107,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -eNd -dad -oTy -sjk -wIh -dad -llk -dad -oTy -oTy -oTy -dUy -oTy -eNd -oTy -xWP -vva -eNd -oTy -oTy -fyp -eNd -psp -psp -psp -psp -psp -psp -rye -rye -psp -rye -rye -psp -psp -rye -rye -rye -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -dsI -uEy -dsI -uEy -uEy -dsI -dsI -dsI -uEy -uEy -uEy -dsI -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(108,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -sjk -oTy -oTy -oTy -vDx -vva -vva -vva -vva -vva -oTy -oTy -oTy -eNd -oTy -xWP -dyt -eNd -fyp -oTy -fyp -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -rye -rye -psp -rye -psp -rye -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -tTy -uEy -ttW -uEy -dsI -uEy -uEy -pHk -uEy -dsI -uEy -uEy -uEy -tTy -uEy -dsI -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(109,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -dUy -oTy -oTy -sjk -fsm -dad -dad -vDx -hzN -dad -oTy -eNd -xHq -eNd -tNI -hYT -nGj -eNd -vva -vDx -oTy -sjk -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -tTy -dsI -dsI -dsI -dsI -dsI -uEy -uEy -dsI -uEy -dsI -uEy -dsI -uEy -rgm -uEy -dsI -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(110,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -dUy -dUy -eNd -dUy -eNd -dUy -eNd -sjk -eNd -eNd -eNd -sjk -oTy -dUy -dUy -eNd -eNd -eNd -vva -vva -nGj -sjk -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -dsI -uEy -dsI -uEy -tTy -uEy -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(111,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -qVN -qVN -qVN -tQi -tQi -oXn -tQi -uqe -uqe -uqe -qVN -oTy -oTy -nGj -sjk -eNd -eNd -eNd -sjk -eNd -eNd -eNd -sjk -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -dsI -dsI -dsI -uEy -rgm -uEy -uEy -uEy -uEy -uEy -uEy -uEy -dsI -uEy -dsI -uEy -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(112,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -qVN -uqe -uqe -xGt -xGt -eaw -xGt -tRd -xGt -xGt -vOR -oTy -fgc -oTy -eNd -oTy -kHK -jqC -eNd -vAo -jYJ -nGj -sjk -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -dsI -uEy -tTy -uEy -uEy -tTy -uEy -tTy -uEy -ttW -uEy -tTy -tTy -uEy -dsI -tTy -tTy -ttW -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(113,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -cZM -cZM -psp -psp -psp -qVN -uqe -tQi -gVh -ciM -eaw -fsc -fsc -tQi -tRd -tQi -oTy -oTy -fgc -dUy -fgc -oTy -oTy -eNd -vDx -vDx -nGj -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -dsI -uEy -uEy -uEy -uEy -dsI -uEy -dsI -uEy -dsI -uEy -uEy -tTy -uEy -dsI -uEy -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(114,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -jyY -cZM -iUk -iUk -cZM -qVN -xGt -gVh -tRd -xGt -eaw -tRd -tRd -gVh -xGt -tQi -eNd -dUy -dUy -dUy -fgc -oTy -vJu -eNd -oTy -vva -bBd -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -uEy -dsI -dsI -dsI -tTy -uEy -dsI -uEy -uEy -cls -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(115,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -jyY -cZM -cuH -jAn -jwk -tQi -xGt -fsc -xGt -tRd -eaw -tRd -tRd -djE -uut -qVN -sjk -eNd -sjk -eNd -eNd -oTy -dUy -eNd -sjk -oTy -eNd -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -dsI -uEy -uEy -uEy -dsI -uEy -dsI -uEy -uEy -uEy -uEy -tTy -uEy -dsI -uEy -tTy -dsI -tTy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(116,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -jwk -bjG -prv -xIB -prv -xGt -pdL -pdL -pdL -pdL -iek -pdL -pdL -pdL -pdL -xGt -lKT -lKT -vva -oTy -oTy -oTy -oTy -oTy -vva -oTy -oTy -sjk -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -tTy -dsI -dsI -uEy -dsI -uEy -dsI -uEy -dsI -uEy -uEy -dsI -dsI -dsI -uEy -dsI -uEy -uEy -dsI -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(117,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -yiB -iUk -jwk -aHg -uFZ -qVN -tRd -fsc -tRd -tRd -eaw -tRd -tRd -fsc -xGt -tQi -dUy -sRZ -dUy -eNd -eNd -oTy -dUy -dUy -eNd -fgc -sjk -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -dsI -uEy -tTy -uEy -dsI -uEy -dsI -dsI -tTy -dsI -uEy -dsI -uEy -dsI -uEy -tTy -dsI -tTy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(118,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -cZM -cZM -iUk -iUk -iUk -qVN -tRd -gVh -xGt -tRd -eaw -tRd -scM -fsc -xGt -tQi -eNd -eNd -eNd -sjk -mAD -fyp -oTy -dUy -oTy -oTy -vva -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -tTy -dsI -dsI -dsI -dsI -dsI -dsI -uEy -dsI -uEy -uEy -uEy -uEy -dsI -uEy -dsI -uEy -uEy -dsI -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(119,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -qVN -tRd -tQi -djE -jEK -eaw -ciM -fsc -tQi -xGt -qVN -dUy -dUy -dUy -eNd -kFv -vva -vva -eNd -oTy -oTy -jjV -sjk -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -dsI -uEy -uEy -uEy -dsI -uEy -dsI -dsI -dsI -dsI -tTy -tTy -uEy -dsI -dsI -uEy -dsI -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(120,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -qVN -tRd -tRd -bmF -xGt -eaw -toA -xGt -uqe -uqe -qVN -dUy -dUy -dUy -eNd -qZR -kNA -nGj -sjk -kij -jqC -oTy -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -rgm -dsI -dsI -dsI -uEy -rgm -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -oBO -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(121,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -qVN -qVN -tQi -qVN -qVN -xGt -tQi -tQi -qVN -qVN -qVN -dUy -dUy -dUy -sjk -eNd -eNd -eNd -sjk -eNd -eNd -eNd -sjk -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -dsI -dsI -dsI -dsI -dsI -uEy -uEy -uEy -uEy -dsI -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(122,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -vUx -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -dsI -dsI -dsI -dsI -dsI -dsI -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(123,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -tTy -uEy -uEy -uEy -mdM -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(124,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -xcr -dpQ -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(125,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -mhH -vlr -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(126,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(127,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(128,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} - -(1,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -poA -poA -poA -poA -hTQ -hTQ -goc -goc -goc -hTQ -hTQ -poA -poA -poA -poA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -ued -dEH -dEH -dEH -ued -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -vUx -"} -(2,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -poA -poA -poA -poA -hTQ -hTQ -sph -erG -jcR -hTQ -hTQ -poA -poA -poA -poA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -ued -dEH -dEH -dEH -ued -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -qof -"} -(3,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -poA -poA -poA -hTQ -hTQ -hTQ -jcR -erG -sph -hTQ -hTQ -poA -poA -poA -poA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -ued -dEH -dEH -dEH -ued -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -pru -"} -(4,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -poA -poA -poA -dEd -hTQ -hTQ -sph -erG -hTQ -hTQ -hTQ -hTQ -poA -poA -poA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -ued -dEH -dEH -dEH -ued -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -bhp -"} -(5,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -poA -poA -dEd -hTQ -hTQ -hTQ -hTQ -erG -opS -sph -hTQ -hTQ -poA -poA -poA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -ued -dEH -dEH -dEH -ued -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -sdU -sdU -sdU -sdU -sdU -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -rvj -"} -(6,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -poA -poA -hTQ -dEd -hTQ -sph -hTQ -erG -erG -hTQ -hTQ -hTQ -poA -poA -poA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -ued -dEH -dEH -dEH -ued -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -sdU -sdU -lUz -sdU -sdU -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -urw -"} -(7,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -poA -poA -dEd -hTQ -hTQ -hTQ -sph -hTQ -erG -hTQ -hTQ -hTQ -hTQ -poA -poA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -opX -dEH -dEH -dEH -ued -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -sdU -sdU -wiR -sdU -sdU -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -wcn -"} -(8,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -poA -poA -dEd -hTQ -dEd -hTQ -hTQ -erG -ewu -sph -hTQ -hTQ -hTQ -hTQ -poA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -vRF -vRF -vRF -vRF -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -opX -dEH -dEH -dEH -mQB -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -sdU -sdU -wiR -wiR -sdU -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -psp -psp -psp -psp -psp -uhj -"} -(9,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -poA -poA -hTQ -hTQ -hTQ -sph -erG -ewu -sph -hTQ -hTQ -hTQ -hTQ -hTQ -dEd -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -vRF -vRF -vRF -vRF -vRF -qJZ -vRF -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -rod -prU -opX -dEH -dEH -dEH -mQB -mQB -cjj -cjj -wdV -wdV -cjj -jlO -wdV -qGx -cjj -cjj -cjj -cjj -uTy -uTy -jNs -uFR -cjj -cjj -cjj -cjj -wdV -wdV -wdV -qGx -wdV -qGx -cjj -cjj -cjj -wdV -cjj -cjj -cjj -cjj -sdU -wiR -wiR -wiR -sdU -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -jaf -jaf -jaf -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -sNy -sNy -sNy -aRU -sNy -aRU -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -jaf -psp -psp -psp -psp -psp -qfT -"} -(10,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -qGx -dEd -hTQ -hTQ -dEd -hTQ -hTQ -erG -hTQ -hTQ -hTQ -hTQ -hTQ -hTQ -hTQ -hTQ -wdV -wdV -wdV -wdV -qGx -cjj -cjj -cjj -cjj -cjj -vRF -vRF -aTV -whe -rmL -lXp -vRF -vRF -vRF -dVl -cjj -jRf -uMw -bXs -lif -prU -prU -opX -bTN -dEH -dEH -dEH -mQB -bXs -rta -qGx -oVT -wdV -oVT -qGx -jlO -wdV -cjj -cjj -tdl -kmf -ojw -kmf -pdG -cjj -cjj -qGx -iBi -wdV -qGx -wdV -wdV -qGx -wdV -wdV -wdV -wdV -qGx -wdV -qGx -bXs -lif -xed -etB -wPQ -kQF -ocX -lif -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -jaf -jaf -jaf -cZs -jaf -cZs -jaf -sNy -jaf -aRU -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -aRU -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -jaf -psp -psp -psp -psp -psp -uNR -"} -(11,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -prU -prU -wdV -wdV -wdV -wdV -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -hTQ -hTQ -dEd -hTQ -lSd -hTQ -erG -opS -hTQ -sph -hTQ -hTQ -hTQ -hTQ -hTQ -qGx -wdV -qGx -wdV -wdV -qGx -cjj -cjj -cjj -cjj -vRF -oDM -ukr -rxF -vFC -vFC -kGw -rmL -vFC -aTV -vfX -wVn -bTC -bTC -bXs -bXs -rod -fRg -bTN -dEH -dEH -dEH -mQB -rod -qIo -wdV -oVT -wdV -oVT -wdV -oVT -wdV -wdV -wdV -tdl -lay -kmf -bXs -peo -iRJ -cjj -wdV -wlM -wdV -wdV -qGx -pDj -wdV -wdV -wdV -qGx -wdV -www -www -wdV -wdV -wdV -nnc -oFv -lif -oSU -lif -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -jaf -jaf -jaf -cZs -sNy -cZs -sNy -cZs -sNy -aRU -sNy -aRU -sNy -sNy -sNy -cZs -cZs -cZs -cZs -cZs -cZs -sNy -sNy -sNy -sNy -cZs -sNy -aRU -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -cZs -sNy -jaf -psp -psp -psp -psp -psp -lLj -"} -(12,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -prU -lcy -ahT -lcy -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -hTQ -hTQ -hTQ -hTQ -lSd -sph -ewu -ewu -sph -hTQ -hTQ -hTQ -hTQ -hTQ -hTQ -wdV -qGx -wdV -wdV -wdV -qGx -wdV -qGx -cjj -cjj -vRF -qwu -oDM -vFC -vFC -ksN -luN -vFC -oDM -vRF -wwa -cjj -kjb -lif -wdV -bXs -rod -prU -opX -dEH -dEH -dEH -mQB -bXs -wlM -wdV -oVT -wdV -wdV -www -oVT -qGx -wdV -wdV -uzs -tdl -rLE -prU -tdl -uzs -wdV -jlO -rta -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -www -www -www -www -www -iBi -bXs -xmv -wdV -bXs -qnw -wdV -wdV -qGx -bXs -cjj -cjj -cjj -cjj -qGx -jaf -jaf -jaf -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -jaf -psp -psp -psp -psp -psp -tem -"} -(13,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -lcy -bXs -sQX -ahT -lcy -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -hTQ -lSd -hTQ -hTQ -ewu -erG -hTQ -hTQ -hTQ -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -cjj -cjj -vRF -vRF -lbE -iJP -gtT -uZn -rmL -eFD -vRF -vRF -cjj -wdV -wdV -wdV -rod -bXs -wdV -prU -opX -dEH -dEH -dEH -mQB -khd -bXs -wdV -oVT -prU -wdV -www -oVT -wdV -oVT -wdV -wdV -prU -nAp -prU -prU -prU -qGx -iLu -wlM -wdV -wdV -wdV -wdV -wdV -qGx -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -lay -wdV -duq -wdV -wdV -qnw -www -www -www -qGx -www -qGx -wdV -qGx -qGx -jaf -jaf -jaf -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -sNy -cZs -cZs -cZs -cZs -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -jaf -psp -psp -psp -psp -psp -gfp -"} -(14,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -uzs -tdl -tdl -uzs -bXs -uzs -tdl -tdl -uzs -wdV -wdV -wdV -fgY -evt -evt -wdV -fgY -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -hTQ -lSd -lSd -hTQ -hTQ -erG -sph -hTQ -hTQ -wdV -wdV -wdV -wdV -wdV -qGx -wdV -wdV -qGx -wdV -wdV -qGx -qGx -cjj -vRF -vRF -vRF -aTF -vRF -vRF -vRF -vRF -cjj -rod -gvS -gvS -gvS -wdV -iwo -wdV -rod -opX -dEH -dEH -dEH -kas -khd -wdV -wdV -iVi -wdV -oVT -www -oVT -wdV -oVT -wdV -oVT -prU -bXs -uTy -bXs -nAp -bXs -snE -prU -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -prU -prU -prU -wdV -wdV -wlM -wdV -lif -uTy -wdV -qnw -wdV -qnw -www -wdV -www -wdV -qGx -wdV -qGx -jaf -jaf -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(15,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -uzs -uzs -mbT -vju -iRJ -bXs -tdl -fTx -oMj -uzs -uzs -wdV -wdV -evt -wdV -wdV -wdV -evt -wdV -wdV -wdV -wdV -wdV -fgY -wdV -evt -wdV -fgY -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -wdV -nAp -uTy -wdV -wdV -www -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qGx -wdV -cjj -vRF -vRF -vRF -vRF -vRF -vRF -vRF -wdV -wdV -rod -ptr -wdV -bXs -rLn -kjb -ptr -opX -dEH -dEH -dEH -mQB -rEI -wdV -wdV -www -wdV -oVT -www -oVT -wdV -oVT -wdV -oVT -wdV -oVT -prU -prU -prU -uTy -bXs -prU -wdV -wdV -prU -prU -prU -wdV -pDj -wdV -wdV -prU -prU -prU -wdV -wdV -wlM -lif -xXs -wdV -bXs -qnw -qnw -qnw -vKe -www -vKe -www -wdV -wdV -bXs -jaf -jaf -sNy -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -cZs -cZs -cZs -cZs -cZs -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(16,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -ahT -lcy -wdV -tdl -eAp -lNb -ghM -uzs -bXs -tdl -iEP -iEP -dBy -iRJ -wdV -wdV -fbU -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -evt -wdV -wdV -wdV -evt -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -wdV -prU -uTy -prU -wdV -wdV -wdV -vKe -wdV -wdV -wdV -wdV -wdV -wdV -qGx -wdV -wdV -qGx -wdV -wdV -qGx -cjj -cjj -cjj -cjj -wdV -wdV -wdV -rod -bXs -bXs -bXs -bXs -bXs -bXs -abk -ptr -rod -mQB -dEH -dEH -dEH -mQB -bXs -ocQ -wdV -vIR -wdV -oVT -www -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -snE -wdV -prU -bXs -uFR -wdV -wdV -prU -prU -prU -prU -wdV -wdV -wdV -wdV -prU -prU -wdV -wdV -iBi -lif -wdV -lif -wdV -qnw -qnw -qnw -www -wdV -vKe -qGx -www -qGx -cjj -jaf -jaf -jaf -cZs -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(17,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -nuo -bXs -wdV -tdl -dLu -ugc -kEI -pRT -sCW -tdl -hOB -iEP -iEP -tdl -wdV -wdV -evt -wdV -wdV -wdV -bXs -rod -bXs -iNQ -wdV -wdV -evt -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -bXs -wdV -uTy -prU -rod -bXs -wdV -vKe -www -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qGx -wdV -wdV -wdV -www -www -oqp -bXs -bXs -wVn -wdV -rod -prU -jRf -lif -rod -prU -mQB -dEH -dEH -dEH -mQB -rod -iBi -wdV -oVT -wdV -oVT -www -www -wdV -nAp -arN -snE -wdV -snE -wdV -snE -prU -vew -bXs -iBi -wdV -wdV -wdV -prU -prU -prU -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -uTy -wdV -bXs -qnw -qnw -wdV -www -qGx -vKe -vKe -www -wdV -cjj -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -cZs -cZs -cZs -cZs -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(18,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uzs -uzs -uzs -prU -lcy -ahT -sQX -uzs -uzs -vdB -dIc -uzs -czc -uzs -uzs -nfz -uzs -uzs -wdV -wdV -fgY -wdV -wdV -iNQ -bXs -bXs -rod -wdV -wdV -wdV -wdV -wdV -wdV -wdV -evt -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -bXs -nAp -uTy -prU -bXs -bXs -bXs -bXs -www -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qGx -wdV -wdV -wdV -prU -prU -wdV -wdV -qHo -bXs -rod -rod -hZM -kCS -rQE -gvS -vew -prU -prU -mQB -bTN -dEH -dEH -uic -lif -bXs -wdV -oVT -wdV -oVT -www -vIR -wdV -oVT -wdV -oVT -wdV -oVT -wdV -snE -bXs -bXs -bXs -wlM -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -prU -nba -prU -wdV -lay -lif -uTy -wdV -bXs -vIR -vIR -prU -www -wdV -vKe -vKe -qGx -wdV -cjj -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(19,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uzs -jav -nfz -nAp -nAp -uTy -xEi -lcy -uzs -tdl -tdl -uzs -bXs -wVn -wON -uTy -nAp -bXs -bXs -wdV -wdV -wdV -bXs -rod -iNQ -bXs -bXs -iNQ -wdV -wdV -fgY -evt -wdV -evt -bAA -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -qnw -wdV -bXs -uTy -lif -bXs -bXs -rod -bXs -wdV -www -vKe -vKe -www -wdV -wdV -wdV -wdV -wdV -wdV -wdV -lif -wdV -www -www -prU -prU -wdV -wdV -rod -qls -prU -wdV -pdc -rQE -prU -wdV -vew -qHo -mQB -mQB -bTN -dEH -dEH -dXN -dXN -ldZ -wdV -rQE -wdV -wdV -www -oVT -wdV -vIR -wdV -oVT -wdV -oVT -wdV -snE -uTy -wdV -prU -ouU -wdV -wdV -pDj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -prU -prU -prU -wdV -iBi -wdV -bXs -lif -wdV -vIR -vIR -prU -rQE -wdV -www -www -wdV -cjj -cjj -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -cZs -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(20,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uzs -uzs -uzs -ahT -lcy -ahT -bXs -uTy -uTy -nAp -bXs -nAp -uTy -uTy -nAp -nAp -nAp -uTy -bXs -wdV -wdV -wdV -bXs -bXs -bXs -rod -bXs -wdV -wdV -wdV -wdV -wdV -wdV -prU -prU -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -wdV -bXs -uTy -uTy -bXs -rod -bXs -bXs -rod -bXs -bXs -bXs -wdV -www -www -lif -lif -wdV -qnw -wdV -qnw -lif -wdV -wdV -rQE -qnw -vIR -qnw -qnw -wdV -wVn -rod -wdV -wdV -qnw -qnw -wdV -wdV -wdV -dXN -cEi -pYg -dEH -dEH -xtX -cEi -ggn -lif -bXs -xmz -avq -lif -kBD -wdV -prU -prU -oVT -wdV -wdV -wdV -prU -bXs -bXs -bXs -ocQ -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -prU -wdV -wdV -wlM -uTy -wdV -xEi -bXs -qnw -qnw -wdV -www -prU -www -www -wdV -cjj -jaf -jaf -cZs -jaf -sNy -jaf -jaf -jaf -jaf -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(21,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -prU -wdV -uzs -tdl -tdl -uzs -bXs -bXs -tPK -cpC -nAp -nAp -uTy -sbb -nAp -nAp -wdV -wdV -bXs -rod -bXs -bXs -bXs -lif -kjb -lif -wdV -kxd -wdV -wdV -prU -prU -prU -wdV -wdV -wdV -wdV -qnw -wdV -wdV -wdV -bXs -uTy -uTy -bXs -bXs -rod -bXs -bXs -bXs -rod -wdV -wdV -www -vKe -wdV -wdV -lif -bXs -bXs -qnw -bXs -lif -qnw -qnw -qnw -lif -uTy -bXs -uTy -uTy -uTy -uTy -uTy -nAp -nAp -uTy -uTy -uTy -fMX -mRp -mRp -wXm -kWe -mRp -mRp -nfW -nAp -uTy -uTy -nAp -jlO -bXs -bXs -ocQ -voP -lif -wNu -wRs -voP -wNu -prU -bXs -uFR -ouU -wdV -wdV -qnw -qnw -qnw -qnw -qnw -qnw -wdV -qnw -qnw -wdV -wdV -wdV -wlM -prU -bXs -nAp -wdV -qnw -qnw -wdV -www -prU -rQE -www -wdV -cjj -jaf -sNy -aRU -sNy -jaf -cjj -cjj -cjj -cjj -jaf -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(22,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -uzs -uzs -izd -bSo -uzs -uzs -bXs -tri -jwm -uTy -jDf -mUz -jFP -uTy -uTy -nAp -rIo -bXs -iNQ -bXs -lif -dwS -uTy -nAp -bXs -bXs -wdV -wdV -kxd -wdV -wdV -prU -wdV -wdV -wdV -wdV -qnw -wdV -wdV -bXs -bXs -bXs -uTy -nAp -bXs -bXs -bXs -rod -bXs -wdV -qnw -qnw -qnw -qnw -wdV -wdV -lif -wdV -lif -bXs -bXs -bXs -lif -wdV -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -uTy -uTy -uTy -uTy -nAp -nAp -sFB -sFB -mRp -mRp -dEH -mRp -mRp -fMX -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -uTy -uTy -nAp -jlO -wdV -prU -bXs -prU -voP -nPx -nPx -wNu -lay -lif -qnw -qnw -qnw -qnw -qud -avq -lay -voP -voP -rta -uTy -bXs -xXs -lif -wdV -wdV -wdV -www -prU -rQE -www -wdV -cjj -jaf -jaf -sNy -jaf -jaf -cjj -cjj -xgK -cjj -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(23,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -tdl -hBb -jWp -iEP -iEP -nfz -nAp -bXs -bXs -uTy -jRb -rQl -fie -bXs -uTy -dgN -nAp -lzl -dgN -lzl -nAp -kjb -bXs -lif -mWp -aKZ -uTy -nAp -bXs -nuo -lif -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -bXs -rod -bXs -lif -uTy -nAp -lif -bXs -stC -bXs -bXs -rod -bXs -rod -bXs -bXs -www -qnw -qnw -lif -bXs -lif -bXs -uTy -uTy -nAp -nAp -uTy -nAp -lif -wdV -lif -lif -wdV -bXs -bXs -wdV -bXs -bXs -fMX -cEi -sbX -rMJ -kWe -hOH -cEi -mQB -lif -lif -lif -nAp -uTy -uTy -uTy -uTy -uTy -uTy -rod -bXs -uTy -uTy -nAp -bXs -bXs -bXs -uTy -uTy -nAp -bXs -bXs -bXs -bXs -nAp -nAp -nAp -uTy -uTy -uTy -uTy -uTy -nAp -nAp -bXs -wdV -gFp -gFp -wdV -www -prU -rQE -www -wdV -cjj -jaf -sNy -aRU -sNy -jaf -cjj -lif -uTy -cjj -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(24,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -tdl -uQN -iEP -iEP -dOd -uzs -bXs -uTy -dJz -bXs -nyp -jRb -foO -nAp -uTy -wdV -wdV -khr -lif -lif -bXs -bXs -lif -jMn -bXs -bXs -ptr -bXs -bXs -uTy -nAp -lif -wdV -wdV -wdV -wdV -wdV -wdV -qnw -bXs -bXs -bXs -rod -bXs -nAp -nAp -lif -lif -lif -lif -bXs -lif -bXs -lif -bXs -lif -lif -lif -bXs -uTy -uTy -nAp -uTy -uTy -uTy -bXs -uTy -bXs -wdV -bXs -lif -wdV -bXs -wdV -qnw -qnw -kxd -lif -dXN -mQB -mQB -ryU -dEH -wXm -mQB -mQB -rod -bXs -bXs -lif -bXs -lif -lif -bXs -nAp -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -uTy -nAp -nAp -uTy -uTy -nAp -bXs -gFp -gFp -gFp -www -wdV -www -www -wdV -cjj -cjj -jaf -sNy -jaf -jaf -cjj -lif -uTy -cjj -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(25,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -uzs -uzs -xNu -dBy -uzs -uzs -bXs -bXs -tDz -bXs -uTy -nAp -bXs -nAp -bXs -bXs -wdV -bXs -rod -bXs -bXs -rod -bXs -bXs -wdV -wdV -wdV -wdV -bXs -bXs -uTy -nAp -lif -wdV -wdV -wdV -wdV -qnw -qnw -wdV -bXs -rod -stC -bXs -doi -nAp -uTy -uTy -uTy -uTy -nAp -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -uTy -uTy -uTy -uTy -lif -lif -wdV -bXs -lSv -wdV -bXs -wdV -iBi -wNu -nPx -rta -hZn -voP -nPx -nPx -wNu -rod -mQB -dEH -dEH -kas -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -rod -lif -bXs -bXs -lif -lif -bXs -bXs -lif -lif -bXs -bXs -nAp -bXs -bXs -lif -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -xbY -nAp -uTy -bXs -gFp -gFp -gFp -www -wdV -www -www -wdV -bXs -cjj -jaf -jaf -jaf -jaf -lif -lif -nAp -cjj -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(26,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -uzs -tdl -tdl -uzs -lcy -bXs -bXs -uTy -nAp -nAp -nAp -nAp -nAp -bXs -wdV -wdV -bXs -bXs -bXs -bXs -bXs -bXs -wdV -wdV -wdV -wdV -wdV -prU -lif -bXs -uTy -bXs -wdV -wdV -qnw -wdV -qnw -qnw -qnw -bXs -bXs -bXs -rod -sRK -uTy -nAp -bVh -nAp -nAp -uTy -uTy -nAp -nAp -uTy -nAp -nAp -uTy -uTy -lif -bXs -bXs -lif -qnw -qnw -qnw -wdV -bXs -wBm -wdV -wdV -ouU -wdV -lif -bXs -oOw -bXs -lif -lif -wdV -www -opX -dEH -dEH -mQB -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -rod -bXs -uTy -lif -lif -bXs -bXs -bXs -rod -lif -bXs -lif -lif -fFz -nAp -uTy -lif -gFp -gFp -gFp -www -wdV -www -vKe -www -wdV -bXs -cjj -cjj -cjj -bXs -rod -xXs -nAp -lif -cjj -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -cZs -jaf -sNy -jaf -ahS -nXA -nXA -ahS -sNy -jaf -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(27,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -lcy -lcy -bXs -nAp -bXs -bXs -nAp -uTy -bXs -bXs -bXs -evt -wdV -fgY -wdV -bXs -rod -bXs -rod -wdV -wdV -wdV -prU -wdV -wdV -wdV -lif -bXs -bXs -wdV -wdV -qnw -wdV -wdV -qnw -qnw -rod -bXs -bXs -tJr -lif -fFz -nAp -uTy -cJy -lif -bXs -bXs -lif -lif -lHh -avq -qud -avq -bXs -wdV -bNF -voP -bNF -lay -wdV -voP -wdV -bXs -hca -wdV -wdV -ouU -lif -jLu -bXs -lif -bXs -bXs -lif -wdV -www -xqZ -dEH -dEH -mQB -rod -bXs -voP -rta -voP -voP -bXs -voP -voP -voP -voP -voP -voP -voP -voP -voP -rta -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -lif -lif -tut -tdl -tdl -tdl -uzs -bXs -nAp -uTy -bXs -gFp -gFp -gFp -www -wdV -rQE -kCS -rQE -wdV -bXs -lif -cjj -bXs -bXs -lif -nAp -uTy -rod -cjj -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -jaf -jaf -nXA -nXA -nXA -sNy -sNy -cZs -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(28,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -uzs -tdl -tdl -nfz -uzs -vuk -uzs -tdl -tdl -nfz -uzs -bXs -wdV -wdV -evt -wdV -wdV -bXs -bXs -iNQ -wdV -wdV -prU -prU -prU -wdV -wdV -wdV -bXs -uTy -lif -wdV -qnw -qnw -wdV -wdV -qnw -bXs -bXs -rod -bXs -rod -uTy -nAp -uTy -oqX -bNF -rta -bXs -rod -bXs -wdV -wdV -wdV -wdV -lay -qnw -qnw -qcp -qnw -qnw -qnw -www -jXo -kkJ -bXs -wdV -bXs -ouU -bXs -kjb -bXs -bXs -bXs -lif -wdV -wdV -www -opX -bTN -dEH -mQB -mQB -rod -lif -bXs -bXs -rod -bXs -lif -lif -lif -lif -lif -lif -rod -lif -lif -khd -voP -lif -rta -wNu -voP -voP -ocQ -voP -voP -nPx -wNu -hxl -tdl -sPP -iEP -nAp -tdl -lif -uTy -uTy -bXs -gFp -gFp -gFp -www -wdV -rQE -kCS -rQE -www -prU -lif -bXs -bXs -rod -bXs -uTy -uTy -lif -cjj -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -sNy -eEa -eEa -oqz -eEa -cZs -jaf -sNy -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(29,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -tdl -dBy -iEP -iEP -tdl -bXs -tdl -dBy -hRk -iEP -tdl -bXs -wdV -wdV -wdV -wdV -wdV -bXs -rod -wdV -iNQ -wdV -wdV -prU -wdV -wdV -qnw -wdV -wdV -nAp -bXs -lif -wdV -qnw -wdV -wdV -qnw -bXs -bXs -bXs -rod -lif -uTy -nAp -lif -iBi -stC -bXs -bXs -bXs -wdV -wdV -qcp -wdV -vIR -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -wlM -pqk -wiz -www -qIo -lif -bXs -lif -bXs -bXs -oWg -wdV -wdV -pxa -opX -bTN -dEH -dEH -mQB -pVa -lif -lif -sTM -lif -bXs -bXs -rod -bXs -bXs -lif -lif -kLI -bXs -rod -khd -tPK -bXs -rod -bXs -lif -lif -nAp -bXs -lif -bXs -rod -lif -lHe -iEP -iEP -lif -bXs -bXs -nAp -uTy -lif -gFp -gFp -gFp -www -wdV -rQE -kCS -rQE -vKe -rQE -wdV -bXs -bXs -bXs -lif -uTy -xEi -bXs -bXs -jaf -jaf -cZs -sNy -sNy -sNy -cZs -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -jaf -ahS -nXA -nXA -ahS -sNy -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(30,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -tdl -cwB -hkU -oMj -tdl -lcy -tdl -ehP -iEP -iEP -tdl -bXs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -wdV -bXs -uTy -nAp -bXs -qnw -qnw -wdV -www -qnw -bXs -rod -bXs -oOm -uTy -nAp -khd -bXs -rod -bXs -rod -bXs -wdV -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -www -tBe -cxi -lSv -wdV -qtg -bXs -bXs -bXs -bXs -bXs -oOw -wdV -wdV -ptr -opX -mQB -dEH -dEH -mQB -pVa -lif -lif -lif -rod -bXs -bXs -bXs -bXs -rod -bXs -rod -bXs -xZg -xZg -khd -rod -bXs -qGx -bXs -rod -bXs -iNQ -lif -bXs -lif -bXs -lif -lHe -wiI -iEP -iEP -tdl -bXs -bXs -uTy -bXs -gFp -gFp -gFp -www -www -vKe -vKe -wdV -www -rQE -prU -bXs -bXs -bXs -rod -uTy -bXs -bXs -rod -jaf -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(31,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -uzs -tdl -tdl -tdl -uzs -wdV -iRJ -oMj -oMj -oMj -uzs -evt -evt -evt -fgY -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -wdV -wdV -bXs -uTy -lif -qnw -qnw -wdV -qnw -qnw -bXs -bXs -rod -bXs -uTy -uTy -bXs -rod -xEi -bXs -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -lay -wdV -bXs -bXs -lif -jBh -oOw -lif -lif -oWg -wdV -wdV -ptr -www -wdV -mQB -dEH -dEH -kas -pVa -bXs -kLI -lif -bXs -iNQ -bXs -bXs -bXs -wNi -bXs -lif -xZg -lif -lif -khd -bXs -qGx -qGx -oOw -bXs -bXs -bXs -bXs -lif -bXs -tlC -bXs -lif -sPP -iEP -xDZ -lHe -bXs -lif -uTy -lif -gFp -gFp -sRR -www -www -vKe -vKe -wdV -www -www -prU -bXs -rod -bXs -bXs -uTy -lif -bXs -lif -jaf -jaf -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(32,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -uzs -tdl -tdl -tdl -uzs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -wdV -qnw -wdV -bXs -nAp -bXs -wdV -qnw -wdV -qnw -qnw -rod -bXs -bXs -rod -uTy -uTy -bXs -bXs -lif -rod -oVT -wdV -oVT -wdV -xEi -arN -snE -wdV -oVT -wdV -vIR -wdV -oVT -wdV -oVT -wdV -wdV -wdV -wdV -ptm -hvy -raQ -lif -bXs -wdV -wdV -ptr -wdV -wdV -www -wdV -kas -dEH -dEH -mQB -mQB -bXs -rod -bXs -bXs -bXs -bXs -rod -bXs -rod -oOw -bXs -bXs -rod -rod -khd -lif -bXs -lif -bXs -bXs -iNQ -bXs -hcY -bXs -iNQ -bXs -qGx -uzs -tdl -tdl -tdl -uzs -lif -nAp -uTy -bXs -gFp -gFp -sRR -prU -wdV -www -vKe -www -vKe -vKe -prU -lif -bXs -bXs -bXs -uTy -xEi -bXs -bXs -jaf -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(33,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -bXs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -wdV -qnw -wdV -bXs -tJr -nAp -lif -wdV -wdV -qnw -qnw -bXs -bXs -bXs -lif -nAp -uTy -lif -bXs -bXs -bXs -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -www -www -wdV -wdV -tUZ -oay -wiz -poE -wdV -wdV -wdV -wdV -wdV -ptr -vKe -www -opX -dEH -dEH -dEH -mQB -bXs -bXs -rod -bXs -rod -nAp -nAp -bXs -bXs -bXs -bXs -rod -lif -lif -khd -tPK -bXs -rod -qGx -bXs -iNQ -bXs -bXs -bXs -bXs -gko -lif -bXs -tPK -lif -jGY -bXs -rod -uTy -uTy -lif -gFp -gFp -gFp -rQE -www -vKe -brh -www -www -vKe -wdV -wdV -bXs -bXs -rod -nAp -uTy -gvS -bXs -jaf -jaf -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jaf -jaf -sNy -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(34,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -bXs -bXs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -wdV -bXs -uTy -lif -wdV -wdV -qnw -vKe -qnw -wdV -bXs -lif -nAp -uTy -lif -rod -oVT -wdV -vIR -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -vIR -bXs -bXs -bXs -bXs -bXs -bXs -iWf -wfT -gNJ -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -opX -dEH -dEH -dEH -mEv -lif -bXs -bXs -nAp -moR -uTy -moR -nAp -bXs -rod -bXs -bXs -ner -bXs -rta -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -nAp -bXs -bXs -iNQ -bXs -lif -xZg -wlM -bXs -lif -uTy -uTy -bXs -bXs -wdV -wdV -prU -rQE -www -vKe -wdV -prU -rQE -wdV -wdV -bXs -rod -bXs -lif -uTy -xEi -bXs -jaf -jaf -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jaf -jaf -jaf -sNy -jaf -sNy -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(35,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -bXs -wdV -wdV -wdV -prU -prU -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -nAp -bXs -lif -wdV -qnw -vKe -qnw -bXs -bXs -bXs -nAp -uTy -lif -bXs -oVT -wdV -oVT -wdV -oVT -wdV -vIR -wdV -oVT -wdV -oVT -wdV -oVT -wdV -bXs -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -mqb -mqb -mqb -mqb -gbo -lif -lif -bXs -iAT -igK -pXy -lkC -nAp -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -iNQ -bXs -hcY -bXs -oOw -bXs -nAp -bXs -bXs -bXs -lif -iNQ -lif -wlM -rod -bXs -uTy -nAp -lif -bXs -bXs -wdV -wdV -rQE -www -vKe -wdV -prU -kCS -www -www -wdV -bXs -bXs -bXs -uTy -uTy -bXs -jaf -jaf -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -ahS -jaf -ahS -sNy -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(36,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -bXs -bXs -bXs -bXs -lif -prU -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -bXs -uTy -nAp -wdV -wdV -bXs -bXs -lif -lif -nAp -uTy -uTy -lif -bXs -oVT -wdV -oVT -wdV -oVT -wdV -vIR -wdV -oVT -wdV -vIR -wdV -oVT -wdV -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -bXs -rod -nAp -nAp -ksW -wwH -xXE -uTy -nAp -bXs -bXs -iNQ -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -uTy -bXs -bXs -oJQ -bXs -bXs -bXs -tlC -wlM -lif -bXs -uTy -nAp -bXs -bXs -rod -wdV -wdV -www -www -vKe -wdV -wdV -www -wdV -wdV -wdV -bXs -bXs -rod -nAp -uTy -bXs -bXs -cjj -cjj -cjj -cjj -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -ahS -sNy -jaf -ahS -jaf -sNy -jaf -neY -ahS -sNy -jaf -ahS -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(37,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -lif -lif -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -ptr -dgp -jkQ -uTy -lif -bXs -bXs -lif -bXs -nAp -uTy -uTy -nAp -lif -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -qnw -wdV -qnw -bXs -bXs -xDL -xDL -xXs -bXs -bXs -lif -pqk -gSV -ruw -gSV -lif -bXs -lif -bXs -bXs -lif -bXs -lif -xEi -ruw -xEi -xDL -xDL -xEi -lif -lif -moR -wkk -pXy -bXD -moR -nAp -bXs -rod -bXs -bXs -lif -bXs -tlC -bXs -bXs -uTy -iNQ -bXs -bXs -bXs -jGG -bXs -bXs -bXs -bXs -bXs -lif -lFC -bXs -lif -uTy -lif -bXs -bXs -bXs -wdV -wdV -www -www -vKe -wdV -wdV -www -wdV -wdV -wdV -bXs -bXs -bXs -lif -uTy -bXs -rod -lif -cjj -bXs -cjj -cjj -jaf -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -aat -sNy -tMe -czh -aat -czh -oDK -sNy -aat -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(38,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -bXs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wYX -xEJ -fFz -uTy -uTy -bXs -bXs -bXs -nAp -uTy -uTy -nAp -lif -bXs -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -vIR -bXs -bXs -bXs -bXs -bXs -xDL -xDL -xDL -bXs -fSZ -fSZ -fSZ -fSZ -fSZ -fSZ -fSZ -fSZ -vek -sNz -sNz -sNz -sNz -sNz -sNz -sNz -opK -lif -xDL -xDL -xDL -xDL -gvS -bXs -nAp -nAp -uTy -nAp -bXs -rod -bXs -bXs -rod -xZg -ocQ -lif -iNQ -hcY -bXs -nAp -bXs -bXs -bXs -gko -bXs -bXs -bXs -iNQ -bXs -bXs -ocQ -bXs -bXs -uTy -nAp -bXs -bXs -bXs -bXs -wdV -vKe -vKe -brh -wdV -wdV -www -wdV -wdV -wdV -bXs -bXs -bXs -bXs -nAp -nAp -bXs -lif -cjj -rod -cjj -tQJ -cjj -jaf -jaf -jaf -jaf -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -ahS -jaf -sNy -mKj -nQu -mKj -sNy -jaf -sNy -jaf -ahS -psp -psp -psp -psp -psp -psp -"} -(39,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -bXs -bXs -qnw -wdV -wdV -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -wdV -ddL -grn -mGz -hqY -uTy -uTy -uTy -uTy -uTy -uTy -lif -lif -qnw -qnw -wdV -oVT -wdV -vIR -wdV -vIR -wdV -oVT -wdV -bXs -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -bXs -fSZ -ldB -dZq -vyV -ibl -ibl -xkE -fSZ -ueO -bNE -xPD -xlV -xlV -uZe -tSA -dsq -ueO -bXs -xEi -xDL -xDL -xDL -xDL -xEi -bXs -moR -nAp -rod -bXs -iNQ -lif -bXs -lif -lif -tBe -bXs -lif -bXs -lif -bXs -bXs -bXs -bXs -bXs -hcY -bXs -bXs -bXs -iNQ -lif -wlM -bXs -bXs -uTy -uTy -lif -rod -bXs -bXs -bXs -wdV -prU -rQE -www -www -brh -vKe -www -www -bXs -bXs -rod -rod -lif -uTy -bXs -bXs -cjj -bXs -lif -tQJ -cjj -tQJ -jyv -tQJ -cjj -cjj -cjj -cjj -cjj -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -ucT -lMe -ucT -sNy -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(40,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -bXs -qnw -wdV -wdV -wdV -qnw -wdV -qnw -wdV -wdV -wdV -qnw -wdV -wdV -wdV -qnw -wdV -wYX -kDH -tfH -dew -uTy -uTy -uTy -uTy -uTy -nAp -lif -qnw -qnw -qnw -qnw -wdV -vIR -wdV -wdV -wdV -vIR -wdV -bXs -bXs -lif -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xXs -bXs -fSZ -fhi -dZq -wAB -dZq -wAB -xkE -fSZ -ueO -xlV -xlV -xlV -xlV -qjp -dsq -qbM -ueO -bXs -bXs -bXs -xEi -xDL -xDL -xDL -bXs -rod -bXs -bXs -rod -lif -lif -rod -nHS -lif -rta -rod -bXs -bXs -lif -bXs -bXs -hcY -nAp -bXs -bXs -bXs -bXs -bXs -bXs -vJQ -wlM -bXs -bXs -uTy -uTy -lif -bXs -bXs -bXs -bXs -wdV -prU -prU -wdV -wdV -www -vKe -rQE -rQE -wdV -bXs -bXs -bXs -bXs -uTy -bXs -rod -bXs -bXs -lif -lif -bXs -bXs -tQJ -tQJ -tQJ -jyv -jyv -cjj -cjj -jaf -jaf -jaf -sNy -jaf -sNy -jaf -sNy -ucT -ucT -ucT -sNy -jaf -sNy -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(41,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -bXs -wdV -prU -wdV -wdV -qnw -wdV -prU -prU -wdV -wdV -wdV -prU -prU -prU -wdV -wdV -tfH -vIO -hij -nAp -lif -bXs -bXs -lif -rod -bXs -bXs -qnw -vIR -vIR -qnw -wdV -wdV -wdV -bXs -bXs -lif -bXs -bXs -lif -xDL -xDL -xDL -lif -bXs -bXs -bXs -bXs -bXs -bXs -fSZ -faa -dZq -wAB -wAB -dZq -dZq -mmm -ueO -xlV -xlV -xlV -xlV -vek -tAs -sNz -tjp -xcg -xcg -cMu -bXs -nAp -xDL -xDL -xEi -xEi -lif -lif -lif -uzs -tdl -bXs -tdl -uzs -khd -tPK -bXs -bXs -gvS -bXs -bXs -bXs -uTy -bXs -bXs -bXs -bXs -rod -bXs -lif -wlM -bXs -lif -uTy -uTy -lif -bXs -bXs -bXs -rod -bXs -lif -bXs -bXs -bXs -wdV -www -rQE -rQE -prU -bXs -bXs -bXs -rod -uTy -bXs -bXs -bXs -rod -bXs -lif -bXs -bXs -bXs -jyv -iVM -tQJ -tQJ -jyv -jyv -jaf -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(42,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -lif -nAp -nAp -prU -prU -wdV -prU -nAp -nAp -nAp -nAp -uTy -nAp -uTy -lif -uTy -uTy -agk -xEJ -diQ -lif -rod -bXs -rod -lif -lif -lif -qnw -qnw -vIR -vIR -vIR -qnw -wdV -bXs -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -lif -lif -dvI -rAW -rAW -rAW -rAW -rAW -dvI -nFQ -wAB -wAB -wAB -dZq -xkE -fSZ -ueO -xlV -xlV -xlV -xlV -ueO -ecK -ecw -frf -tQC -kuQ -cMu -cMu -bXs -xDL -xDL -xDL -xDL -xDL -xDL -nAp -tdl -xDZ -bXs -uTy -tdl -khd -bXs -qGx -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -bXs -bXs -bXs -uTy -uTy -uTy -bXs -rod -rod -bXs -bXs -bXs -bXs -rod -bXs -bXs -wdV -prU -prU -prU -bXs -bXs -bXs -bXs -uTy -bXs -bXs -rod -bXs -uTy -nAp -bXs -nAp -iVM -iVM -iVM -iVM -iVM -tQJ -jyv -jaf -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(43,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -wdV -wdV -qnw -wdV -qnw -wdV -qnw -nAp -nAp -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -bXs -bXs -rod -hcY -qHo -bXs -bXs -rod -rod -lif -gvS -bXs -qnw -qnw -vIR -vIR -qnw -qnw -wdV -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -lif -fgY -bXs -hUy -dsW -byJ -byJ -mpt -qhX -uCa -nFQ -dZq -dZq -dZq -wAB -xkE -fSZ -ueO -bNE -bNE -bNE -bNE -ueO -ecK -uaI -iJK -tQC -mhm -nmu -dJa -bXs -xEi -xDL -xDL -xDL -xDL -xDL -xDL -tpB -tpB -kmf -iEP -uzs -khd -bXs -rod -bXs -iNQ -bXs -bXs -nAp -bXs -bXs -jkv -oOw -bXs -bXs -bXs -gko -lFC -gvS -lif -uTy -uTy -uTy -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -rod -bXs -nAp -bXs -rod -bXs -nAp -bXs -bXs -bXs -bXs -bXs -iVM -iVM -iVM -jyv -tQJ -tQJ -jaf -jaf -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(44,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uzs -sdU -sdU -uzs -sdU -sdU -sdU -uzs -cjj -cjj -cjj -bXs -wdV -wdV -wdV -qnw -wdV -qnw -wdV -wdV -nAp -uTy -uTy -prU -wdV -prU -wdV -prU -wdV -prU -prU -wdV -prU -wdV -prU -wdV -bXs -rod -lif -rod -bXs -rod -bXs -bXs -rod -bXs -bXs -qnw -qnw -qnw -qnw -qnw -qnw -wdV -bXs -xDL -xDL -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -hUy -erc -nTe -nTe -nTe -nTe -hUy -uxt -uxt -uxt -uxt -quy -uxt -fSZ -bjR -sNz -sNz -sNz -sNz -tjp -iGn -mzh -inD -tQC -xlD -xlV -fxT -bXs -bXs -bXs -bXs -lif -xEi -xDL -xDL -bXs -bXs -iEP -oMj -tdl -khd -bXs -lif -lif -qGx -lif -bXs -nAp -bXs -bXs -bXs -bXs -bXs -bXs -bXs -vJQ -wlM -lif -lif -uTy -uTy -bXs -bXs -bXs -rod -bXs -bXs -rod -bXs -bXs -rod -bXs -rod -bXs -bXs -bXs -bXs -lif -lif -lif -uTy -nAp -bXs -nAp -bXs -fgY -uTy -cjj -tQJ -tQJ -tQJ -tQJ -tQJ -tQJ -tQJ -jyv -jaf -jaf -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(45,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -sdU -uzF -iEP -bUx -fzE -sdU -sdU -sdU -cjj -cjj -cjj -cjj -bXs -qnw -wdV -qnw -wdV -qnw -wdV -lif -uTy -uTy -prU -wdV -wdV -wdV -wdV -wdV -wdV -wdV -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -rod -bXs -qnw -qnw -qnw -qnw -qnw -qnw -wdV -bXs -xDL -xDL -bXs -czT -ePz -ePz -ePz -ePz -czT -pms -dvI -rAW -bsB -rAW -ogl -rAW -dvI -smY -pov -kTK -nKA -pdq -nKA -rPy -rPy -ptt -ydz -ydz -ydz -oOB -dud -ydz -inD -gnk -tQC -tQC -fxT -cMu -xcg -xcg -xcg -cMu -lif -xDL -xDL -uzs -tdl -tdl -tdl -uzs -khd -bXs -lif -lif -oOw -bXs -bXs -bXs -uTy -bXs -mQf -bXs -bXs -bXs -bXs -bXs -rta -bXs -bXs -uTy -uTy -bXs -bXs -bXs -bXs -bXs -rod -lif -iNQ -bXs -bXs -bXs -bXs -lif -bXs -bXs -bXs -lif -lif -rod -nAp -uTy -bXs -nAp -bXs -uTy -uTy -cjj -cjj -jyv -cjj -cjj -tQJ -cjj -cjj -cjj -jaf -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(46,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -sdU -iEP -iEP -iEP -iEP -sdU -sdU -sdU -cjj -cjj -cjj -cjj -bXs -qnw -wdV -qnw -wdV -qnw -wdV -nAp -uTy -lif -lif -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -xDL -xDL -bXs -pLb -jWx -eOe -rWo -aUb -rRM -xZX -pKw -pKw -pKw -smY -pKw -pKw -smY -pKw -smY -nKA -nKA -nKA -nKA -mQa -rPy -ptt -ydz -ydz -ydz -oOB -rsE -ydz -inD -phC -tPt -tQC -cMu -kft -dsq -oYY -uFW -fxT -bXs -xDL -xDL -bXs -bXs -rod -bXs -rod -bXs -bXs -gvS -wNi -bXs -bXs -hcY -bXs -bXs -bXs -bXs -jkv -iNQ -bXs -bXs -bXs -bXs -bXs -lif -uTy -uTy -bXs -rod -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -bXs -rod -bXs -rod -bXs -rod -bXs -bXs -bXs -gvS -uTy -nAp -bXs -bXs -uTy -hsC -cjj -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(47,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -sdU -iEP -iEP -iEP -iEP -sdU -sdU -sdU -cjj -cjj -cjj -cjj -bXs -qnw -wdV -qnw -wdV -bXs -lif -nAp -uTy -kxd -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -bXs -ruw -lif -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -bXs -pLb -pkV -qZt -hpV -lKn -shd -wpZ -pms -pKw -xHC -xHC -xHC -xrF -dvI -rAW -rAW -hGL -dvI -nKA -nKA -sjL -hKD -cMu -xcg -xcg -uoo -cMu -rsE -ydz -inD -inD -inD -inD -fxT -cMu -gHu -ecu -bqf -fxT -bXs -xDL -xDL -bXs -lif -ptr -lif -lif -lif -lif -bXs -lif -lif -gvS -gko -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -qIo -bXs -bXs -uTy -uTy -bXs -bXs -bXs -lif -iNQ -bXs -rod -lif -bXs -bXs -khr -bXs -bXs -bXs -rod -bXs -bXs -rod -bXs -rod -uTy -nAp -bXs -bXs -fgY -ktl -cjj -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(48,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uzs -sdU -iEP -uzs -sdU -sdU -sdU -sdU -cjj -cjj -cjj -cjj -bXs -qnw -wdV -qnw -wdV -bXs -bXs -uTy -uTy -lif -xDL -xDL -bXs -lif -bXs -lif -bXs -lif -elF -bXs -lif -bcP -bXs -lif -lif -bXs -lif -lif -xZg -lif -bXs -bXs -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -lif -bXs -pLb -mdE -qZt -ofA -boQ -fDx -mVy -pKw -pKw -xrF -dvI -rAW -rAW -hUy -saJ -yds -nVh -uCa -nKA -nKA -jeC -hKD -fxT -qqn -tQC -tQC -jrU -rik -pnL -fdH -hKD -iFv -hKD -oPj -vfR -dsq -dsq -nlv -fxT -bXs -xDL -xDL -rod -bXs -bXs -rod -lif -lYx -bXs -gvS -bXs -lif -iNQ -bXs -bXs -nAp -bXs -lif -bXs -bXs -bXs -kLy -nAp -ocQ -bXs -bXs -uTy -uTy -bXs -bXs -bXs -rod -bXs -rod -lif -bXs -rod -rod -bXs -bXs -rod -bXs -bXs -rod -rod -bXs -bXs -bXs -uTy -uTy -nAp -nAp -uTy -wUT -cjj -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(49,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uJC -eyx -sdU -sdU -sdU -sdU -sdU -cjj -cjj -cjj -cjj -bXs -vIR -prU -vIR -wdV -lif -nAp -uTy -uTy -wdV -xDL -xDL -lif -vFV -dJZ -vFV -vFV -bXs -lif -xZg -xsw -vFV -vFV -dJZ -dJZ -vFV -vFV -dJZ -dJZ -vFV -bXs -bcP -bXs -bXs -bXs -bXs -bXs -bXs -lif -bXs -bXs -nAp -xDL -xDL -lif -bXs -pLb -pkV -qZt -mKx -iId -kux -vWg -xHC -xHC -lVK -uCa -uhE -dwC -hUy -bQG -yds -lmp -hUy -nKA -nKA -idx -hKD -inD -xUr -tQC -tQC -frf -iTK -iTK -sjL -bsU -sjL -hKD -cMu -gvh -gvh -gvh -gvh -fxT -bXs -xDL -xDL -bXs -lif -fgY -vQx -evt -ycJ -fgY -bXs -bXs -bXs -bXs -gvS -bXs -bXs -lif -lif -lif -bXs -nAp -rYy -aYc -uQm -bXs -bXs -uTy -uTy -bXs -rod -bXs -iNQ -bXs -bXs -rod -bXs -iNQ -lif -bXs -bXs -bXs -rod -bXs -rod -rod -bXs -rod -bXs -uTy -nAp -lif -bXs -bXs -cjj -cjj -jaf -sNy -cZs -sNy -sNy -cZs -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(50,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -sdU -sdU -sdU -sdU -sdU -cjj -cjj -cjj -cjj -bXs -vIR -prU -vIR -prU -bXs -nAp -lif -nAp -wdV -xDL -xDL -lif -dJZ -fBu -fBu -vFV -vFV -vFV -vFV -dJZ -vFV -iHy -lGN -lGN -lGN -gnn -iHy -dST -vFV -xEi -bXs -lif -elF -xEi -lif -dJZ -dJZ -vFV -vFV -lif -bXs -xDL -xDL -bXs -bXs -pLb -mdE -qZt -hpV -iId -kux -heN -xHC -czT -qxw -hUy -pGh -sSX -hUy -ezE -yds -nVh -hUy -nKA -nKA -idx -hKD -fxT -mkz -oWJ -nnN -fxT -ydz -ydz -ydz -nUu -rPy -rPy -lQT -gvh -jhL -gvh -gvh -fxT -bXs -xDL -xDL -lif -bXs -ksi -ncr -uTy -dXB -ksi -dqG -dqG -dqG -dqG -dqG -eiG -dZq -bsE -pxg -nyj -nAp -uTy -pSV -nAp -uTy -fNt -bXs -uTy -uTy -bXs -bXs -bXs -bXs -bXs -bXs -iNQ -bXs -bXs -rod -bXs -bXs -rod -bXs -bXs -khr -bXs -bXs -bXs -bXs -uTy -bXs -bXs -rod -bXs -cjj -cjj -jaf -cZs -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -aRU -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(51,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uzs -sdU -sdU -sdU -uzs -cjj -cjj -cjj -cjj -bXs -vIR -wdV -qnw -wdV -lif -uTy -uTy -nAp -bXs -xDL -xDL -bXs -dJZ -hLI -fBu -fBu -qPb -fBu -fBu -fBu -fBu -uVY -eRB -eUo -eUo -eRB -iHy -dST -vFV -vFV -bXs -nAp -nAp -nAp -nAp -vFV -hLI -fBu -dJZ -pms -pms -pms -pms -pms -pms -pLb -aCw -mVE -sek -iwZ -fDx -vCa -xHC -iId -buu -oDo -dQD -sSX -cCM -sSX -sSX -aQE -oDo -nKA -nKA -idx -hKD -oPj -qjp -tPt -phC -oPj -ydz -ydz -ydz -nzX -rPy -fon -cMu -frf -cMu -cMu -lKU -fxT -bXs -xDL -xDL -nAp -bXs -evt -gVw -pTV -uTy -flb -dZq -dZq -dZq -dZq -pxU -dZq -dZq -ibe -vrK -fZg -hDi -gcU -gcU -gcU -hDi -bXs -bXs -uTy -uTy -lif -lif -bXs -bXs -lif -lif -bXs -bXs -bXs -bXs -bXs -khr -bXs -rod -bXs -bXs -rod -bXs -rod -lif -uTy -lif -bXs -bXs -bXs -cjj -cjj -sNy -cZs -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -aRU -cZs -aRU -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(52,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -qnw -wdV -qnw -prU -bXs -uTy -nAp -lif -wdV -xDL -xDL -lif -vFV -vFV -vFV -vFV -vFV -dJZ -vFV -vFV -fBu -iHy -dXk -eUo -slZ -eRB -iHy -nMe -uvo -mbn -mbn -mbn -mbn -jpH -jpH -mbn -fBu -fBu -dJZ -ozQ -lfI -slK -slK -ozQ -ozQ -czT -ePz -ePz -kzR -gma -tAW -pKw -xHC -czT -dvI -dvI -rAW -rAW -dvI -rAW -txm -tuo -dvI -nKA -nKA -daD -hKD -cMu -xcg -xcg -uoo -cMu -jTR -jTR -ogx -aHN -pKw -pKw -pKw -voM -dJa -oLO -tQC -fxT -bXs -xDL -xDL -nAp -ptr -fzj -lXP -uTy -ptm -fzj -vrK -ibe -vrK -wAB -ibe -ibe -dZq -dZq -dZq -pxU -gcU -xaf -jwr -cUd -gcU -npt -xkE -dZq -dZq -vWP -hDi -gcU -gcU -hDi -bXs -bXs -nAp -nAp -bXs -bXs -tPK -khr -bXs -khr -bXs -bXs -iNQ -rod -nAp -nAp -bXs -rod -bXs -bXs -cjj -cjj -jaf -aRU -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(53,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -bXs -wdV -qnw -wdV -wdV -lif -bXs -uTy -bXs -wdV -bXs -xDL -xDL -bXs -bXs -vFV -bhP -xPz -tUq -xPz -iIo -vFV -fBu -eJx -kXo -aXe -ogP -eRB -iHy -fBu -fBu -mbn -xbB -qbe -uan -qbe -xbB -mbn -fBu -vFV -vFV -ozQ -pzz -slK -slK -lfI -ozQ -pms -iLK -smY -pKw -xHC -smY -pKw -xHC -kGQ -txm -yds -xqH -ekn -oyy -pmF -nTe -qkV -uCa -nKA -nKA -sjL -hKD -sjL -pKw -pKw -pKw -pKw -pKw -pKw -smY -xrF -xrF -xHC -xHC -pKw -cMu -oyu -tQC -cMu -bXs -xDL -xDL -xDL -lif -fgY -vQx -evt -ycJ -fgY -pxU -dZq -pxU -dZq -dZq -dZq -dZq -wAB -cGK -wAB -gcU -suS -vhx -hkD -ndb -aAt -xkE -dZq -dZq -xkE -gcU -hPR -haC -gcU -ibe -wAB -jeY -dZq -xkE -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -nAp -uTy -nAp -bXs -bXs -uTy -cjj -bXs -cjj -jaf -jaf -jaf -jaf -jaf -jaf -sNy -sNy -sNy -sNy -sNy -sNy -cZs -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(54,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -lif -lif -qnw -wdV -bXs -lif -nAp -uTy -lif -wdV -wdV -xDL -xDL -lif -bXs -vFV -rQb -plT -qpF -plT -xPz -pas -fBu -eJx -kXo -eUo -bUh -eRB -iHy -fBu -fBu -hUL -raA -qbe -pqP -qbe -raA -hUL -fNG -vFV -ozQ -lfI -lfI -slK -slK -lfI -pms -pms -cCn -pKw -smY -xHC -pKw -pKw -qLT -baL -hUy -jYy -yds -dWg -dWg -fXU -nTe -gey -hUy -nKA -nKA -smY -smY -pKw -pKw -kmR -bmc -lRy -qFA -kmR -bmc -bmc -qFA -kmR -vIi -pKw -cMu -tQC -tQC -fxT -bXs -xDL -xDL -xDL -nAp -bXs -bXs -rod -lif -kqd -ibe -dEO -ibe -cGK -ibe -wAB -dZq -dZq -dZq -dZq -hQC -vhx -vhx -nyQ -mmT -xkE -vWP -dZq -dZq -xkE -ndb -hTy -cke -gcU -pwa -dZq -dZq -lze -wAB -lif -bXs -bXs -rod -lif -bXs -rod -lif -uTy -uTy -lif -bXs -bXs -bXs -bXs -bXs -bXs -cjj -cjj -cjj -cjj -cjj -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -cjj -cjj -cjj -cjj -bXs -bXs -bXs -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(55,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -lif -hcY -bXs -wdV -prU -lif -lif -uTy -uTy -lif -wdV -bXs -xDL -xDL -bXs -vFV -vFV -xPz -rXj -qyY -hfe -xPz -vFV -fBu -iHy -jlI -eRB -eRB -eRB -uhn -fBu -lIB -hUL -xbB -qbe -uan -qbe -xbB -hUL -wMq -dJZ -lfI -lfI -pzz -slK -slK -lfI -pms -cCn -smY -xrF -tFN -qer -tFN -tFN -qLT -fKK -wMi -wMi -bJf -ced -baF -nTe -gey -glT -ogl -nKA -iId -kmR -bTD -bmc -qFA -wnB -tUl -rgv -uOF -uPZ -wyq -okM -ccI -rqi -oaU -pKw -oPj -iwE -uBq -cMu -bXs -nAp -xDL -xDL -xEi -nAp -bXs -bXs -kqd -lgd -pxU -dZq -dZq -dZq -dZq -dZq -dZq -wAB -dEO -luz -gcU -kGN -vhx -vqR -gcU -xQp -lLZ -dZq -dZq -xkE -gcU -cke -cke -jfx -dZq -wAB -jhK -gtN -dZq -xEi -iNQ -bXs -lif -khr -bXs -bXs -nAp -uTy -lif -bXs -bXs -bXs -bXs -bXs -lif -bXs -bXs -bXs -bXs -bXs -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -rod -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(56,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -hHk -uTy -lif -lif -bXs -lif -lif -lif -uTy -uTy -nAp -prU -bXs -wdV -xDL -xDL -bXs -vFV -opZ -xPz -rXj -xOi -hfe -xPz -vFV -fBu -iHy -lDF -poG -amZ -cIL -iHy -fBu -bdj -hUL -raA -qbe -qbe -qbe -raA -hUL -dsB -dJZ -ozQ -lfI -lfI -slK -slK -lfI -pms -cCn -iId -iId -xGc -ejD -gMb -tph -qLT -vwv -lNO -suy -cSU -hTO -nTe -nTe -nTe -gey -hUy -nKA -iId -uPZ -gbg -mvr -iCp -pXe -gce -uhR -gVO -rhk -ecZ -ecZ -srf -rnV -fhC -pKw -cMu -xcg -xcg -cMu -czT -bXs -xDL -xDL -xDL -xDL -bXs -gvS -kqd -ibe -ibe -ibe -wAB -vrK -vrK -wAB -dZq -dZq -dZq -dZq -bct -vhx -vhx -oRq -gcU -mnK -sfQ -dZq -dZq -xkE -gcU -uLC -cke -gcU -wAB -wAB -dZq -ddk -dZq -nAp -bXs -bXs -rod -bXs -rod -lif -uTy -nAp -bXs -bXs -rod -bXs -rod -bXs -bXs -bXs -rod -bXs -lif -bXs -bXs -bXs -bXs -bXs -cjj -cjj -bXs -bXs -bXs -bXs -rod -bXs -rod -bXs -bXs -rod -bXs -bXs -bXs -bXs -cjj -cjj -cjj -cjj -cjj -cjj -"} -(57,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -nAp -bXs -lif -hcY -lif -lif -nAp -uTy -nAp -prU -bXs -bXs -xDL -xDL -xDL -lif -vFV -opZ -xPz -rXj -qyY -hfe -xPz -vFV -fBu -iHy -iHy -iHy -iHy -iHy -iHy -oHL -iHy -hUL -eqU -nRT -nRT -nRT -iDr -hUL -asj -dJZ -ozQ -lfI -slK -slK -slK -lfI -pms -cCn -iId -tFN -qko -bDY -xOf -ppn -fyR -iuE -vyQ -xre -kun -bJf -kLM -bQp -nTe -unu -oDo -okB -iId -pef -cnF -iBH -iBH -qvP -hPn -hPn -kmR -twz -jAV -ecZ -tCf -rnV -oaU -pKw -rRM -wLN -fXO -xHC -pLb -bXs -nAp -xDL -xDL -xDL -xDL -bXs -kqd -dZq -dZq -dZq -dZq -dZq -nHQ -dZq -dZq -ibe -ibe -vrK -gcU -qMk -cke -cke -gcU -gna -qsl -dZq -wAB -vWP -hDi -gcU -gcU -hDi -wAB -dZq -wAB -wAB -dZq -nAp -bXs -bXs -rod -bXs -lif -nAp -uTy -lif -bXs -bXs -bXs -lif -gvS -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -lif -bXs -bXs -bXs -rod -bXs -bXs -rod -bXs -rod -bXs -bXs -rod -bXs -rod -bXs -cjj -cjj -cjj -cjj -cjj -"} -(58,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -bXs -bXs -bXs -bXs -bXs -bXs -uTy -uTy -lif -bXs -bXs -wdV -xDL -xDL -elF -bXs -vFV -vFV -xPz -rXj -xOi -hfe -xPz -vFV -fBu -cKt -dXa -ieC -ieC -ieC -hGR -wSZ -brT -hUL -hUL -hUL -tnn -hUL -hUL -hUL -asj -vFV -lfI -lfI -slK -slK -lfI -ozQ -pms -tEb -iId -tFN -rhi -xLq -nwn -qJB -fyR -qLT -wMi -xDt -vBX -hJJ -hGL -ogl -txm -hGL -dvI -nKA -iId -qZr -hBQ -iBH -iBH -iBH -iBH -xsl -kmR -kmR -bIe -rEO -kmR -rnV -fKy -pKw -pLb -yin -xHC -eZz -pLb -bXs -bXs -bXs -nAp -xDL -xDL -xEi -kqd -dzz -ibe -wAB -ibe -ibe -wAB -wAB -dZq -dZq -dZq -dZq -gcU -iAL -cke -cke -ndb -gna -bbH -dZq -dZq -wAB -wAB -dZq -dZq -wAB -dZq -wAB -hDi -fgz -gcU -hDi -bXs -iNQ -bXs -rod -bXs -uTy -nAp -bXs -bXs -rod -rod -lif -lif -rod -bXs -rod -rod -bXs -bXs -rod -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -rod -bXs -rod -rod -bXs -bXs -bXs -bXs -rod -bXs -cjj -cjj -cjj -cjj -cjj -"} -(59,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -lif -uTy -bXs -lif -bXs -uTy -uTy -lif -wdV -bXs -wdV -xDL -xDL -xDL -lif -bXs -bXs -vFV -ije -plT -plT -plT -xPz -vFV -qwU -xzE -xGB -xzE -xGB -xzE -fWk -xdp -udt -vAS -xnP -xzE -xdp -oFk -xzE -ubK -asj -dJZ -ozQ -pzz -slK -slK -smY -lfI -pms -tEb -iId -tFN -pgK -pgK -gBZ -pgK -qer -smY -nKA -nZC -nKA -nKA -nKA -wXL -nKA -tFt -nTd -pdq -iId -qZr -eCc -iBH -uhf -lkI -iBH -pcd -uPZ -hNl -gSS -dQE -qJI -vmK -oxf -pKw -pLb -xHC -xHC -ttP -suQ -jgY -tXt -jgY -nAp -xDL -xDL -xDL -qEy -dZq -dZq -dZq -dZq -dZq -dZq -dZq -dZq -wAB -vrK -svE -fvf -nvR -cke -cke -gcU -hJE -sfQ -dZq -dZq -vWP -hDi -gcU -gcU -fgz -hDi -dZq -gcU -cke -rsd -gcU -bXs -khr -bXs -khr -bXs -uTy -lif -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -eEC -bXs -bXs -bXs -rod -bXs -rod -bXs -rod -bXs -bXs -lif -bXs -rod -rod -bXs -rod -bXs -bXs -rod -bXs -bXs -rod -bXs -bXs -rod -cjj -cjj -cjj -cjj -cjj -"} -(60,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -lif -nAp -uTy -nAp -uTy -uTy -prU -bXs -bXs -xDL -xDL -xDL -xDL -ljs -xsw -bXs -vFV -iWt -xPz -xPz -xPz -iIo -vFV -vFV -tsd -hub -xGB -xzE -ybe -xzE -xdp -xdp -jes -irT -xGB -xdp -xdp -xdp -dsB -rix -vFV -ozQ -lfI -slK -slK -anF -ozQ -pms -hht -iId -qer -pqS -hZR -jkc -wdo -tFN -wlv -tFN -kyS -nKA -pnK -dxB -mFe -pKw -pKw -smY -nKA -iId -mRE -iCp -iBH -iBH -iBH -iBH -sry -kmR -hNl -dQE -dQE -fsl -wnB -kwe -pKw -czT -xHC -ttP -jgY -jgY -csF -oGZ -tXt -bXs -xDL -xDL -xDL -eAd -svE -vrK -ibe -ibe -dEO -cGK -ibe -dZq -dZq -dZq -dZq -gcU -bWO -cke -cke -gcU -eTJ -asF -dZq -dZq -xkE -gcU -hPR -cke -wsP -gcU -dZq -gcU -cke -sSj -gcU -bXs -rod -bXs -rod -lif -uTy -bXs -bXs -bXs -rod -lif -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -rod -rod -rod -rod -rod -bXs -bXs -rod -bXs -rod -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -cjj -cjj -cjj -cjj -cjj -"} -(61,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -gFp -bXs -bXs -bXs -nAp -uTy -uTy -lif -wdV -xDL -xDL -xDL -elF -bXs -vFV -dJZ -vFV -vFV -vFV -vFV -pas -vFV -vFV -vFV -vFV -vFV -dPM -xGB -uHG -uHG -rel -xzE -xdp -fWk -pUZ -xzE -xdp -fWk -vFV -vFV -fBu -vFV -vFV -pzz -slK -slK -oII -ozQ -pms -tEb -iId -sOX -byC -jYW -jkc -wdo -tFN -wmJ -tFN -mbY -xxU -quG -qeI -mFe -mFe -pKw -pKw -smY -iId -twz -dTc -bVB -spe -dwg -pPX -lhP -twz -frE -dQE -kmR -bmc -bmc -kmR -pKw -nGi -xHC -jgY -jgY -nQA -bMJ -rmP -ppV -bXs -xDL -xDL -xDL -kqd -pxU -dZq -dZq -dZq -dZq -dZq -dZq -dZq -wAB -ibe -ibe -gcU -ezG -cke -cke -lyZ -wAB -wAB -dZq -dZq -vWP -gcU -eoj -cke -cke -gcU -dZq -gcU -cke -cke -gcU -bXs -bXs -lif -bXs -nAp -uTy -bXs -bXs -tPK -bXs -bXs -bXs -bXs -bXs -bXs -lif -bXs -rod -bXs -bXs -bXs -rod -lif -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -rod -rod -bXs -rod -qVT -rod -bXs -rod -cjj -cjj -cjj -cjj -cjj -"} -(62,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -bXs -gFp -bXs -lif -nAp -uTy -bXs -bXs -xDL -xDL -lif -lif -bXs -vFV -azg -knM -bGr -eKW -nNJ -bGr -bGr -bGr -bGr -vcP -vFV -vFV -xzE -xGB -vAA -fWk -fWk -xdp -fWk -tqD -tsd -xdp -idj -vFV -cLS -fBu -fBu -vFV -pms -pms -pms -pms -pms -pms -tEb -iId -vhN -oaU -nmF -jkc -jkc -qer -fmQ -tFN -uiX -aZm -tpC -qeI -pKw -pKw -pKw -pKw -smY -iId -kmR -gcr -qZr -qZr -qZr -wnB -qFA -kmR -iaC -iCp -pcD -iCp -obC -uPZ -pKw -oSt -aeu -suQ -bMJ -bMJ -voT -wbA -tXt -bXs -xDL -xDL -xDL -qEy -wAB -ibe -wAB -vrK -ibe -vrK -ibe -dZq -dZq -dZq -dZq -gcU -bOY -cke -cke -gcU -wys -bbH -dZq -dZq -xkE -gcU -hDi -cke -deO -gcU -wAB -gcU -hPR -haC -gcU -lif -gvS -bXs -bXs -uTy -uTy -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -bXs -tPK -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -rod -rod -lif -bXs -rod -rod -bXs -lif -bXs -rod -rod -bXs -bXs -rod -cjj -cjj -cjj -cjj -cjj -"} -(63,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -qnw -wdV -bXs -bXs -lif -uTy -uTy -wdV -bXs -xDL -xDL -lif -vFV -vFV -iHy -jih -knM -nAH -aGl -bGr -bGr -nAH -bGr -bGr -xTB -uYU -vFV -eTT -omc -vjx -tKU -jes -xdp -tFc -xGB -xzE -xdp -idj -vFV -hLI -fBu -fBu -tRx -hGm -swy -slK -ppo -nIR -ozQ -nKA -iId -tFN -tFN -qer -eap -eap -tFN -whE -tFN -mbY -quG -quG -qeI -mFe -mFe -ube -pKw -pKw -iId -hAB -keh -iId -iId -iId -sqb -ony -iCp -iCp -iCp -kmR -ajp -geD -wnB -pKw -czT -ePz -jgY -pdy -tXt -jgY -kpf -jgY -nuo -xDL -xDL -xDL -xuL -sAV -rCn -sAV -pxU -rCn -lNk -sjm -dZq -lcc -pBG -pBG -gcU -jnK -cke -cML -gcU -sPp -sfQ -wAB -dZq -vWP -xkE -gcU -ndb -gcU -hDi -wAB -hDi -gcU -ndb -hDi -bXs -lif -bXs -bXs -uTy -nAp -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -rod -rod -lif -bXs -rod -bXs -bXs -rod -bXs -lif -lif -bXs -rod -bXs -rod -rod -bXs -bXs -cjj -cjj -cjj -cjj -"} -(64,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -qnw -wdV -wdV -wdV -gFp -nAp -uTy -lif -wdV -xDL -xDL -bXs -vFV -aGu -xHI -xPz -ejS -guL -guL -guL -guL -guL -guL -guL -guL -guL -guL -vFV -tsd -cpa -xzE -xzE -xdp -fWk -fWk -xGB -xdp -doU -vFV -tRx -vFV -tRx -eTT -hGm -swy -slK -lfI -lfI -qoQ -nKA -rCF -gZJ -mbs -jVD -iId -iId -iox -xHC -tFN -xBu -xEd -xEd -rkw -mFe -mFe -pKw -pKw -pKw -smY -nKA -nKA -nKA -nKA -nKA -egc -kmR -bTD -bmc -qFA -kmR -bmc -qFA -kmR -pKw -lfI -ozQ -nKz -smY -xCC -jgY -wAB -xkE -ivL -bwy -bwy -bwy -naF -xkE -vWP -eiu -xkE -vWP -wcw -vWP -dZq -dZq -qyf -vWP -hDi -gcU -gcU -gcU -hDi -qdU -sho -wAB -dZq -ibe -tzO -sYX -vWP -vWP -vWP -wAB -bXs -bXs -bXs -lif -aSx -bXs -bXs -xXs -uTy -bXs -lif -lif -lif -bXs -gGO -lif -bXs -bXs -bXs -aSx -lif -bXs -bXs -rod -bXs -lif -lif -lif -aBF -bXs -lEG -exj -bXs -lif -lif -bXs -lif -bXs -dgp -lif -ngf -lif -lif -rod -lif -rod -lif -elF -cjj -cjj -"} -(65,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -qnw -qnw -bXs -wdV -wdV -bXs -uTy -lif -wdV -xDL -xDL -lif -vFV -iHy -iwL -tUQ -ucC -pVx -tUQ -tUQ -tUQ -tUQ -tUQ -tUQ -tUQ -tUQ -tUQ -oSu -eVM -ybg -vXB -cxa -cxa -cxa -txR -oJo -oJo -pCm -pCm -gGB -tvX -jja -nKA -usU -lZL -pKE -fGK -jFj -fwO -vWg -dxL -heN -pKw -smY -pKw -pKw -pKw -smY -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -smY -bOM -pKw -xHC -xHC -kGQ -iNB -kkq -xHC -pKw -pKw -pKw -smY -pKw -byF -rij -bbH -wAB -gna -gna -gna -gna -gna -wAB -nfN -bbH -dZq -dZq -dZq -dZq -dZq -wAB -wAB -dZq -dZq -dZq -wAB -dZq -dZq -dZq -dZq -wAB -wAB -dZq -dZq -dZq -dZq -dZq -dZq -dZq -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -dgN -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -jap -jGr -jGr -nAp -lMr -uTy -dOJ -uYA -wRr -wRr -xXs -uTy -nAp -nAp -uTy -jsb -"} -(66,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -wdV -qnw -qnw -qnw -wdV -wdV -bXs -nAp -wdV -bXs -xDL -xDL -bXs -vFV -iHy -aHx -vYf -nvC -vYf -rQp -vYf -vYf -vYf -vYf -vYf -vYf -vYf -vYf -nWE -tgY -ybg -dsK -mIZ -qGH -eRz -mdt -xdp -cOl -xWa -vfu -vZm -asj -smY -smY -tZR -gFs -pKE -fGK -tZR -pCp -nXK -smY -smY -smY -pdq -smY -pKw -smY -pKw -smY -smY -smY -pKw -smY -pdq -smY -smY -smY -pKw -smY -pKw -smY -smY -smY -smY -smY -pdq -smY -smY -pKw -pKw -smY -smY -smY -smY -smY -smY -smY -pdq -byF -vxz -jbJ -rLU -gna -gna -dgd -gna -gna -jGo -lVl -upL -xkE -xkE -ibe -xkE -vWP -xkE -xkE -ibe -wAB -ibe -xkE -xkE -vWP -xkE -ibe -wAB -wAB -wAB -ibe -wAB -xkE -ibe -wAB -wAB -nAp -bXs -xEi -bXs -lif -xEi -bXs -nAp -xEi -bXs -xEi -nAp -nAp -nAp -nAp -nAp -nAp -bXs -nAp -bXs -nAp -nAp -bXs -nAp -bXs -nAp -nAp -uTy -nAp -uTy -nAp -nAp -nAp -nAp -jGr -uGl -jap -uTy -tGV -xmT -uTy -sfH -wKF -xHn -nAp -nAp -xEi -xEi -nAp -szq -"} -(67,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -wdV -wdV -wdV -wdV -qnw -qnw -qnw -wdV -bXs -uTy -lif -wdV -xDL -xDL -bXs -vFV -iHy -uhn -kbl -fbb -kfw -kbl -kbl -kbl -kbl -kbl -kbl -kbl -kbl -kbl -sll -eVM -ybg -qno -bLE -bLE -bLE -ifJ -oJo -oJo -pCm -sGp -gGB -gGB -nKA -pVK -oYE -lZL -pKE -fGK -tMa -heN -bHS -ygV -vWg -pKw -pKw -smY -pKw -pKw -pKw -pKw -pKw -pKw -pKw -smY -pKw -pKw -pKw -pKw -pKw -pKw -xHC -uFA -tpQ -uFA -fsd -tpQ -xHC -xHC -pKw -pKw -pKw -pKw -pKw -pKw -smY -ygV -jFj -smY -pKw -mUT -vTh -qsl -pXN -gna -gna -gna -gna -gna -sfQ -wAB -wAB -wAB -mgZ -jGo -dZq -dZq -dZq -dZq -dZq -wAB -wAB -dZq -dZq -wAB -dZq -dZq -dZq -dZq -dZq -dZq -dZq -dZq -dZq -dZq -dZq -uTy -uTy -uTy -uTy -uTy -nAp -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -dgN -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -jGr -jGr -jGr -alS -tJE -fUy -dOJ -wRr -wRr -wRr -qMc -uTy -uTy -nAp -uTy -szq -"} -(68,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -qnw -qnw -qnw -nAp -uTy -prU -bXs -xDL -xDL -bXs -vFV -aGu -dGK -xPz -ejS -guL -guL -guL -guL -guL -guL -guL -guL -guL -guL -vFV -tsd -cpa -xzE -fWk -xdp -jes -fWk -xzE -xdp -gVW -vFV -tRx -dJZ -tRx -vFV -hGm -swy -slK -ozQ -lfI -eXO -lfI -lfI -dir -lfI -vQY -mVv -ozQ -lfI -lfI -uXz -pKw -pKw -smY -rpx -xrF -awX -wlv -nxn -rCF -xah -bCf -rSm -pSa -pSa -pSa -pSa -rSm -vxt -pKw -xQF -pjU -dZd -dZd -dZd -dZd -dZd -pjU -rqR -lfI -vCo -jgY -aJR -vWP -oBU -lJr -lJr -lJr -cDD -vWP -vWP -vWP -sYX -vWP -xkE -vWP -vWP -xkE -vWP -vqa -dZq -dZq -hKo -tCz -fcg -fcg -dZq -aSZ -tCz -lhw -lhw -lXE -dEn -fcg -aJg -xkE -bXs -lif -bXs -lif -lif -bXs -nAp -lif -bXs -lif -gGO -bXs -lif -bXs -bXs -bXs -lif -lif -wGR -bXs -bXs -bXs -lif -lif -lif -gGO -bXs -bXs -bXs -rod -bXs -bXs -bXs -rod -gGO -lif -bXs -dgp -bXs -lif -lif -lif -gvS -bXs -rod -lif -rod -wSN -cjj -cjj -"} -(69,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -brr -wdV -wdV -wdV -wdV -wdV -qnw -qnw -qnw -qnw -uTy -uTy -prU -bXs -xDL -xDL -lif -vFV -dJZ -qwN -vuZ -knM -nAH -tpk -bGr -bGr -nAH -bGr -bGr -lmR -cey -vFV -eTT -cPt -dXj -xzE -xdp -xdp -dLw -fpb -xGB -xdp -idj -vFV -hLI -fBu -fBu -tRx -hGm -swy -slK -fwQ -lfI -mwG -mwG -mwG -mwG -mwG -mwG -mwG -mwG -mwG -mwG -rrI -xIT -pKw -smY -rSm -pSa -pSa -pSa -rSm -fgL -dDf -pSa -pSa -nfd -hZE -heD -vhT -pSa -tSI -pKw -cvO -jGD -uJs -xKf -xHC -xrF -dts -dZd -rqR -swy -jgY -jgY -tXt -jgY -nuo -xDL -xDL -xDL -tzO -nzY -xFM -xFM -xFM -hCy -xFM -xFM -xFM -hCy -dgm -vWP -dZq -dZq -uxJ -oUl -xkE -tzO -dZq -xkE -vWP -xkE -vWP -xkE -xkE -xkE -oAo -xkE -hDi -gcU -ndb -gcU -hDi -gFp -uTy -bXs -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -bXs -rod -bXs -bXs -tPK -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -rod -bXs -rod -bXs -bXs -bXs -rod -bXs -bXs -qVT -rod -bXs -rod -bXs -bXs -rod -rod -bXs -cjj -cjj -cjj -"} -(70,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -jlO -kkJ -wdV -jlO -wdV -wdV -wdV -wdV -qnw -qnw -bcj -uTy -uTy -lif -wdV -xDL -xDL -bXs -bXs -lif -vFV -hCd -knM -bGr -pCW -fYv -bGr -bGr -bGr -bGr -vcP -vFV -vFV -xzE -xzE -shA -fWk -fWk -xdp -irT -dxW -xGB -xdp -idj -vFV -cLS -gMX -eAq -vFV -pms -pms -pms -pms -mwG -mwG -qJH -try -iIr -iIr -uWU -mEf -mEf -ftP -sjq -mwG -pKw -pKw -pKw -pSa -uvA -gdc -uWr -pSa -fZF -hZE -kxm -hZE -hZE -cdd -lFW -tZZ -pSa -mbs -rqR -swy -pjU -dZd -nHh -xHC -xHC -xrF -dZd -rqR -swy -ksQ -kku -bMJ -tXt -bXs -xDL -xDL -xDL -xDL -vom -ibe -wAB -nJf -wAB -wAB -wAB -ibe -nzY -hCy -vWP -dZq -dZq -nJr -vJb -xkE -xkE -wAB -xkE -xkE -xkE -pVX -tzw -xkE -xkE -oAo -xkE -gcU -bvw -cke -uRW -gcU -lif -uTy -bXs -bXs -bXs -bXs -bXs -tPK -bXs -bXs -bXs -bXs -rod -bXs -rod -bXs -rod -bXs -bXs -rod -bXs -bXs -qVT -bXs -bXs -bXs -rod -rod -bXs -rod -bXs -bXs -bXs -rod -bXs -rod -bXs -bXs -rod -bXs -cjj -cjj -cjj -cjj -cjj -"} -(71,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -fgY -tQJ -tQJ -fgY -wdV -wdV -bXs -wdV -wdV -bXs -qnw -gTE -uTy -uTy -xEi -bXs -xDL -xDL -lif -elF -bXs -vFV -dJZ -dJZ -vFV -vFV -vFV -uhn -uhn -gtw -gtw -gtw -gtw -dTX -xzE -xGB -fWk -xdp -xdp -xdp -aVN -xzE -rel -xdp -fWk -vFV -vFV -fBu -vFV -dJZ -pzz -slK -slK -oII -gvb -sJe -sRf -sRf -mzQ -iFi -mes -rCx -mes -mes -iFi -gvb -nKA -smY -smY -pSa -rSm -kFZ -xIU -pSa -inx -hZE -hZE -hZE -hZE -cdd -tKP -hZE -pSa -iUY -smY -pKw -pKw -lVe -xrF -xHC -xHC -khl -dZd -rqR -anF -pLZ -bMJ -uyd -ppV -bXs -xDL -xDL -xDL -xDL -vom -wAB -dPQ -wAB -dZq -cmB -cmB -dPQ -ibe -oyB -ipr -dZq -dZq -nJr -xkE -xkE -xkE -ibe -dZq -xkE -vWP -xkE -xkE -pVX -xkE -vWP -xkE -gcU -cke -cke -cke -gcU -bXs -bXs -gFp -bXs -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -rod -rod -bXs -bXs -bXs -bXs -rod -rod -bXs -bXs -rod -rod -bXs -bXs -rod -rod -bXs -cjj -cjj -cjj -cjj -cjj -cjj -"} -(72,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -nlS -xyY -xDL -tQJ -uTy -wdV -wdV -xEi -wdV -qnw -xXs -qnw -nAp -uTy -xEi -qnw -xDL -xDL -bXs -lif -lif -xEi -uTy -eJx -bMQ -lfB -xPz -xPz -xPz -gtw -dxk -cXO -eeE -ieC -ieC -xdp -uHG -pHH -xdp -fWk -pUZ -xzE -tsd -nfg -xdp -dsB -asj -kOz -dJZ -ozQ -ozQ -slK -slK -anF -mwG -amb -sRf -aba -fFf -iIr -sxT -sxT -sxT -sxT -wQG -dhg -nKA -nKA -pKw -pSa -eTy -gdc -jyR -pSa -non -mzB -pSa -rec -hZE -ePp -hZE -dQg -pSa -pSa -pSa -rSm -pKw -dZd -xeL -ssy -xrF -ssy -dZd -rqR -swy -rEb -csF -lGa -tXt -bXs -xDL -xDL -fuR -ljh -xFM -wAB -wAB -uGM -dZq -dZq -dZq -jcn -wAB -oyB -xkE -dZq -dZq -uxJ -xkE -xkE -xkE -xkE -pxU -xkE -gcd -vWP -xkE -xkE -oUl -xkE -xkE -gcU -uLC -cke -hPR -gcU -bXs -nAp -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -rod -bXs -bXs -gvS -lif -bXs -bXs -bXs -bXs -rod -bXs -bXs -rod -lif -lif -bXs -rod -bXs -bXs -bXs -rod -rod -qVT -bXs -bXs -bXs -rod -rod -bXs -bXs -cjj -cjj -cjj -cjj -cjj -"} -(73,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -jlO -wCC -cnQ -xyY -tQJ -wdV -bXs -wdV -wdV -xXs -wdV -qnw -qnw -xEi -uTy -nAp -qnw -xDL -xDL -xDL -elF -xEi -uTy -uTy -lPu -lTs -njK -njK -njK -xPz -gtw -gtw -gtw -gtw -maO -jes -xGB -xGB -iNo -xdp -xdp -mbn -mbn -mbn -mbn -mbn -mbn -mbn -dsB -vFV -ozQ -lfI -slK -slK -oII -mwG -cTR -diV -exA -qzH -iFi -iIr -iIr -iIr -iIr -iIr -mwG -dTE -nKA -smY -rSm -pSa -gdc -tLK -daW -tLK -tLK -neF -wVy -hZE -hZE -hZE -hZE -jEV -hZE -hes -pSa -pKw -pjU -dZd -dZd -dZd -dZd -pjU -rqR -swy -jgY -jgY -tXt -jgY -bXs -xDL -xDL -riP -xkE -hLl -ihM -dZq -dZq -dZq -wAB -wAB -wAB -wAB -xFM -mOM -dZq -dZq -nJr -xkE -xkE -oUl -qTI -xkE -wAB -xkE -xkE -dZq -vWP -xkE -cEy -xkE -hDi -gcU -wUd -gcU -hDi -lif -uTy -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -bXs -rod -wdV -wdV -wdV -wdV -wdV -prU -prU -wdV -wdV -wdV -wdV -wdV -wdV -bXs -bXs -bXs -rod -bXs -bXs -bXs -rod -cjj -cjj -cjj -cjj -cjj -cjj -"} -(74,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -fgY -tQJ -tQJ -fgY -jlO -wdV -wdV -wdV -wdV -wdV -qnw -qnw -bXs -uTy -nAp -qnw -lif -xDL -xDL -bXs -xEi -uTy -uTy -dUz -avV -njK -bBj -fwR -xPz -vFV -vBb -xie -xie -ieC -xzE -xzE -ybe -nMd -fWk -xdp -qny -jJO -yds -yds -yds -pUU -mbn -eud -dJZ -ozQ -uRr -slK -slK -ozQ -fio -iTj -sRf -vwC -fFf -iIr -tPd -tPd -tPd -tPd -iFi -dhg -nKA -nKA -nKA -qqM -rSm -pSa -pSa -pSa -axt -tLK -xHy -wVy -dMe -xhy -osa -wOM -uYS -hZE -uKw -pSa -pKw -dZd -trq -bnA -lwq -phV -dZd -rqR -swy -pms -bXs -bXs -bXs -nAp -xDL -xDL -xkE -xkE -dty -wAB -wAB -wAB -dZq -wAB -cmB -cmB -cmB -wvP -oqC -dZq -dZq -hcA -xkE -hDi -gcU -okj -hDi -aNW -kdL -kdL -fqh -cio -xkE -wlM -gFp -bXs -bXs -nAp -bXs -lif -uTy -bXs -bXs -gFp -bXs -bXs -lif -lif -lif -bXs -bXs -bXs -bXs -bXs -tPK -bXs -bXs -rod -wdV -wdV -wdV -wdV -wdV -prU -wdV -wdV -wdV -wdV -wdV -wdV -wdV -rod -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -cjj -cjj -cjj -cjj -cjj -"} -(75,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -kkJ -wdV -jlO -wdV -wdV -wdV -wdV -wdV -wdV -qnw -qnw -bXs -uTy -uTy -qnw -lif -xDL -xDL -elF -nAp -uTy -uTy -gXo -rWF -njK -xvR -fwR -xPz -vFV -oiu -hom -hom -hom -vFV -oiA -oNm -dsB -dsB -puJ -mbn -qQj -yds -yds -yds -yds -mbn -enH -vFV -lfI -lfI -slK -slK -lfI -gvb -pUM -sRf -sRf -mzQ -iFi -mes -mes -mes -mes -iFi -gvb -nKA -cfh -nKA -nKA -nKA -nKA -iId -pSa -vgS -tLK -ecO -giM -hZE -bXT -hXk -rSm -pSa -gQS -lFu -pSa -pKw -dZd -nRE -xrF -xrF -xHE -owy -oII -pms -pms -bXs -nAp -xDL -xDL -xDL -xDL -nUh -xBQ -nzY -cyt -dZq -dZq -dZq -dZq -dZq -dZq -dZq -gEo -xLA -dZq -dZq -nJr -xkE -gcU -plB -lIP -gcU -lvr -vhx -aEH -gCu -ocA -xkE -ouU -bXs -bXs -bXs -bXs -nAp -uTy -bXs -bXs -bXs -bXs -bXs -rod -lif -gvS -lif -bXs -rod -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -www -www -www -www -www -www -www -www -www -www -bXs -rod -bXs -wdV -wdV -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -"} -(76,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -bXs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -qnw -qnw -bXs -uTy -uTy -qnw -xDL -xDL -xDL -bXs -bXs -xEi -xvr -eJx -irY -njK -njK -njK -xPz -vFV -ioQ -ieC -opr -opr -auy -auy -auy -tGA -auy -tRx -vFV -vFV -mbn -eED -mbn -bTt -mbn -dsB -vFV -ozQ -lfI -slK -slK -lfI -mwG -mwG -jkR -iFi -iIr -iIr -qlR -awe -rme -awe -sjq -mwG -nKA -kvS -kyb -dda -dda -kvS -iId -pSa -jVq -tLK -pSa -pSa -aDr -pSa -pSa -pSa -pSa -pSa -pSa -rSm -sQV -dZd -gKF -dzE -xrF -gas -dZd -hOz -pms -bXs -bXs -xDL -xDL -xDL -xDL -fVh -hQQ -hQQ -nzY -xSx -cmB -wAB -dZq -wAB -cmB -cmB -wAB -rWR -vWP -dZq -dZq -uxJ -xkE -jEO -eRH -bXV -hDi -okj -cSj -okj -hDi -jBJ -xkE -ouU -bXs -rod -bXs -lif -gFp -bXs -bXs -sRR -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -www -www -www -www -www -www -wdV -wdV -wdV -wdV -www -www -www -www -www -www -www -www -vKe -vKe -wdV -wdV -wdV -wdV -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(77,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -wdV -wdV -wdV -wdV -wdV -wdV -qnw -qnw -qnw -bXs -uTy -nAp -qnw -xDL -xDL -tPK -lif -uQd -uQd -xkk -uQd -xkk -xkk -vfO -kFP -xPz -vFV -xGB -ieC -vFV -vFV -auy -xhq -iGx -asj -uoT -fgP -bGv -vFV -jNH -hQf -yds -yds -mbn -rix -dJZ -lfI -lfI -slK -slK -lfI -kvS -mwG -mwG -rUK -mwG -mwG -mwG -mwG -mwG -mwG -mwG -rrI -aDZ -dda -ezb -tiW -kqy -dda -iId -pjU -pSa -eyi -pSa -smq -lYm -dub -fGl -fGl -tpX -jkc -bZQ -vYW -pKw -pjU -dZd -dZd -wwJ -dZd -pjU -smY -pms -bXs -nAp -xDL -xDL -xEi -lif -lif -lif -lif -hCy -jBZ -qtH -bHA -dZq -wAB -wAB -wAB -wAB -vom -ipr -dZq -dZq -xiH -xkE -gcU -ijn -ijn -hZD -vhx -vhx -cqo -gcU -sZS -ibe -qIo -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -rod -bXs -rod -bXs -rod -bXs -bXs -www -www -www -www -www -www -wdV -cjj -cjj -wdV -wdV -cjj -cjj -cjj -bXs -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(78,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -wdV -wdV -wdV -wdV -wdV -qnw -qnw -qnw -lif -uTy -uTy -qnw -xDL -xDL -lif -uQd -xkk -wiD -pHY -hbj -mWT -xkk -xkk -vFV -yai -vFV -dXa -ieC -qVD -gpl -auy -asj -asj -asj -gsB -dsB -asj -vFV -jNH -yds -yds -ppO -mbn -wrs -vFV -ozQ -pzz -slK -slK -ozQ -qeO -hVr -wFg -hus -jmX -gfN -uuL -bXH -bXH -bXH -iso -iqT -iqT -qeO -ocP -rUu -rwu -dda -nKA -dyu -xKP -vIo -fOQ -yiq -fOQ -wBy -nAt -fGl -fNO -mFQ -nMo -eIh -lfI -lfI -ozQ -lfI -smY -ozQ -smY -smY -pms -bXs -xDL -xDL -xDL -hDi -gcU -gcU -hDi -gko -nzY -nJQ -ezz -bHA -dZq -dZq -dZq -dZq -wAB -xFM -dXv -dZq -vHo -nJr -xkE -gcU -ijn -ijn -pAW -pAW -pAW -pAW -gcU -cio -dZq -rta -bXs -rod -bXs -bXs -rod -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -wdV -wdV -www -www -wdV -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(79,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -wdV -wdV -wdV -wdV -qnw -qnw -qnw -lif -uTy -nAp -qnw -xDL -xDL -bXs -xkk -awv -pEE -uAH -uAH -sbV -hjk -xkk -xkk -uul -vFV -ieC -ieC -wpR -vFV -vFV -qxr -asj -asj -vFV -qyR -dsB -vFV -roZ -yds -yds -vEY -mbn -fBu -vFV -vFV -ozQ -slK -slK -ozQ -kvS -old -old -hus -uxS -gfN -iqb -bXH -iqT -iqT -iqT -iso -iqT -dda -owT -rUu -hud -dda -nKA -xwu -xKP -gbU -nnd -oXM -xgl -fVn -fGl -fGl -bPA -tZR -tZR -oFX -smY -lfI -lfI -smY -lfI -pKw -smY -pms -pms -bXs -xDL -xDL -gcU -wLo -uRW -cke -gcU -ptr -nzY -tOb -jSb -bHA -dZq -dPQ -wAB -cmB -ibe -vom -vWP -dZq -dZq -nJr -xkE -gcU -qMN -ijn -lok -mIw -eio -lok -gcU -uOb -wAB -ouU -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -rod -bXs -bXs -wdV -wdV -www -www -wdV -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(80,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -wdV -wdV -qnw -qnw -qnw -qnw -qnw -uTy -nAp -qnw -xDL -xDL -lif -uQd -eOv -mWT -pfm -vKI -hbO -hjk -hBx -xJG -hDz -ieC -ieC -ieC -qVD -jeN -auy -qNh -vYJ -vYJ -uoT -bGv -asj -vFV -jHy -qVh -kjq -euA -mbn -fBu -fBu -vFV -pms -pms -pms -pms -qeO -vAR -wFg -hus -jmX -gfN -iqb -bXH -wxa -fxm -iqT -iso -iqT -jbK -jbL -rUu -rUu -dda -nKA -bHS -sAY -aOR -tbh -ceT -fEa -vTl -sAY -pmr -cjO -vWe -wks -bHN -smY -lfI -jma -pKw -lfI -lfI -lfI -pms -bXs -bXs -xDL -xDL -gcU -uTy -uTy -cke -gcU -lif -uxt -lop -sxt -wAB -wAB -wBq -wAB -ibe -ibe -xFM -vWP -dZq -wAB -nJr -xkE -gcU -hDi -pAW -lok -uRx -dEb -lok -gcU -wiL -xkE -ouU -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -lif -lif -bXs -bXs -rod -wdV -wdV -www -www -wdV -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(81,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -wdV -wdV -qnw -qnw -qnw -qnw -xEi -uTy -qnw -qnw -xDL -xDL -lif -uQd -xkk -fSQ -uqn -uBL -uqn -hjk -xkk -xkk -shu -shu -shu -tsd -vFV -dJZ -vFV -vFV -dJZ -dJZ -dJZ -vFV -vFV -dJZ -mbn -mbn -jpH -mbn -mbn -hLI -fBu -vFV -xZg -xDL -xDL -lif -kvS -old -old -gkW -old -kvS -dVh -bXH -iqT -hZr -iqT -iso -iqT -kvS -dda -dda -dda -kvS -nKA -pKw -rSm -uhk -rSm -cTv -egz -cTv -rSm -ozQ -lfI -lfI -pKw -mRF -pKw -smY -smY -lfI -smY -mvo -lfI -pms -bXs -bXs -xDL -xDL -hDi -gcU -nAp -nAp -hDi -lif -hCy -uxt -uxt -uxt -hCy -uxt -uxt -uxt -xFM -hCy -vWP -wAB -dZq -xkE -xkE -gcU -wBd -pAW -qDr -eAI -pAW -qpQ -gcU -ePk -dZq -lif -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -rod -bXs -wdV -wdV -www -www -wdV -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(82,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -qnw -qnw -qnw -qnw -qnw -nAp -uTy -qnw -qnw -xDL -xDL -lif -uQd -oeV -olb -hjk -hjk -hjk -mWI -uQd -oPv -lif -lif -bXs -lif -lif -ruw -lif -bXs -bXs -lif -lif -bXs -lif -lif -lif -lif -lif -lif -vFV -vFV -vFV -vFV -bXs -xDL -xDL -bXs -gfN -boJ -uOa -hus -hus -xjk -iqT -iso -iso -iso -bXH -bXH -iqT -iqT -iqT -aDZ -nKA -nKA -nKA -nKA -nKA -kGQ -kkq -uFA -wpE -kkq -xPW -xrF -smY -pKw -smY -odw -smY -smY -smY -smY -lfI -mFe -ozQ -pms -bXs -bXs -xDL -xDL -lif -tPK -lif -nAp -uTy -uTy -uTy -lNY -nAp -uTy -uTy -uTy -nAp -uTy -nAp -xEi -nAp -nAp -nAp -tBe -xkE -hDi -gcU -okj -gcU -gwL -eai -gwL -hDi -fQB -dZq -bXs -bXs -bXs -rod -bXs -bXs -bXs -gvS -gvS -bXs -bXs -rod -bXs -bXs -bXs -bXs -wdV -wdV -www -vKe -www -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(83,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -qnw -qnw -uqL -qnw -uTy -uTy -qnw -qnw -xDL -xDL -tPK -xkk -xkk -rrJ -pZc -pZc -pZc -xkk -xkk -lif -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -bXs -xZg -lif -lif -lif -bXs -xDL -xDL -bXs -gfN -eAM -kSL -hus -hus -kvS -beY -tLA -bXH -bXH -bXH -iso -iqT -iqT -hgj -fyl -fyl -fyl -hgj -nKA -nKA -cDx -cDx -cDx -cDx -cDx -cDx -cDx -cDx -cDx -cDx -cDx -cDx -oII -pKw -smY -jGc -oII -oII -pms -bXs -bXs -xDL -xDL -xEJ -lif -bXs -bXs -uTy -hDi -gcU -gcU -hDi -nAp -hDi -gcU -lSo -gcU -hDi -bXs -lif -uTy -uTy -ocQ -xkE -xkE -xkE -xkE -xkE -rzl -rzl -rzl -lif -bXs -bXs -fWZ -bXs -bXs -bXs -bXs -rod -bXs -lif -lif -bXs -rod -bXs -bXs -bXs -bXs -bXs -wdV -wdV -www -vKe -www -www -vKe -vKe -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(84,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -cjj -qnw -qnw -qnw -qnw -uTy -qnw -qnw -xDL -xDL -bXs -lif -uQd -xkk -uQd -xkk -uQd -uQd -oPv -tPK -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -dFD -kvS -old -old -gkW -old -old -kvS -uEj -iso -bXH -bXH -iso -iso -iqT -fyl -utC -jAw -nuc -hgj -nKA -nKA -cDx -kiI -qNc -qNc -tsI -kuA -cDx -dDV -hOu -cya -tcZ -cDx -wVF -pKw -smY -czT -ePz -ePz -ePz -czT -bXs -xDL -xDL -hDi -gcU -gcU -hDi -bXs -uCJ -cke -uRW -gcU -uTy -gcU -ubZ -pfP -cke -wEq -lif -bXs -uTy -nAp -lif -xkE -xkE -tbx -vWP -xkE -xkE -xkE -xkE -nAp -bXs -bXs -iBi -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -wdV -www -www -www -vKe -brh -vKe -www -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(85,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -qnw -qnw -uqL -qnw -qnw -vIR -uTy -qnw -qnw -xDL -xDL -xDL -bXs -bXs -xzq -lif -bXs -lif -lif -bXs -xDL -xDL -xDL -lif -lif -bXs -lif -lif -bXs -bXs -bXs -lif -lif -bXs -bXs -bXs -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -lif -lif -gfN -nPR -hus -hus -hus -wFg -iqT -iqT -iqT -iqT -iqT -iqT -iqT -fyl -uGh -asS -oFw -phf -nKA -nKA -fpW -nLP -nLP -nLP -nLP -nLP -gZG -nLP -vMY -oyK -geB -oAV -sCi -vVI -smY -pLb -eSc -aVL -tAx -pLb -bXs -xDL -xDL -gcU -ubZ -iyr -voW -sCW -gcU -uTy -uTy -iJO -uTy -gcU -cke -cke -chx -mmT -bXs -bXs -uTy -nAp -nAp -pxU -xkE -wAB -dZq -dZq -wAB -dZq -vWP -lif -bXs -bXs -rta -bXs -bXs -rod -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -lif -lif -bXs -bXs -wdV -www -www -www -vKe -brh -vKe -www -wdV -www -wdV -wdV -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(86,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -cjj -cjj -qnw -vIR -uTy -qnw -qnw -qnw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -lif -bXs -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -lif -lif -bXs -bXs -bXs -lif -bXs -bXs -xDL -xDL -lif -lif -gfN -qvc -uYT -hus -cwL -gfN -old -old -old -old -ixW -kvS -iqT -fyl -eAR -xON -gfH -hgj -nKA -soM -mBY -nLP -hoG -cBj -iOk -nLP -mBY -dEh -vMY -dWm -hOu -oAV -bmb -xQc -smY -dFG -frr -frr -frr -pLb -bXs -xDL -xDL -gcU -hIX -dVD -gcU -ksW -gcU -bGy -uTy -gcU -uTy -hDi -gcU -iJO -gcU -tVv -lif -lif -uTy -uTy -lif -gFp -bXs -bXs -uNR -oTL -xqm -oTL -uNR -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -rod -bXs -rod -bXs -lif -lif -bXs -bXs -wdV -www -www -www -vKe -brh -vKe -www -wdV -www -wdV -wdV -wdV -wdV -wdV -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(87,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -cjj -cjj -qnw -xXs -uTy -cjj -cjj -bXs -qnw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -lif -bXs -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -lif -hDn -hDn -lif -bXs -gfN -tXv -hus -hus -eDh -edc -boJ -boJ -boJ -uOa -jbL -gfN -eBg -hgj -fyl -fyl -fyl -hgj -cfh -jbw -cDx -xMw -tJd -tJd -tJd -nLP -cDx -nLP -hOu -hOu -viq -cDx -pms -pms -pms -pLb -aVL -tAx -eSc -pLb -bXs -xDL -xDL -hDi -gcU -gcU -hDi -nAp -hDi -gcU -gcU -hDi -mAQ -nAp -lif -xXs -lMr -xEi -bXs -xXs -uTy -uTy -bXs -bXs -lif -lif -vCc -kBi -kBi -kBi -vCc -bXs -lif -gFp -bXs -gFp -bXs -bXs -lif -gvS -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -rod -bXs -bXs -wdV -prU -prU -www -brh -vKe -www -prU -www -wdV -wdV -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(88,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -qnw -vIR -uTy -uTy -cjj -cjj -bXs -qnw -bXs -xXs -bXs -lif -lif -bXs -bXs -lif -lif -bXs -bXs -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -lif -xDL -xDL -xDL -bXs -gfN -uWG -hus -hus -uWG -gfN -boJ -boJ -boJ -cSb -cSb -gfN -oMz -oMz -oOX -jlJ -elw -gTy -lfI -nIR -cDx -nLP -tJd -tJd -tJd -nLP -cDx -bgN -cDx -pgK -lMS -pgK -bXs -bXs -bXs -czT -ePz -ePz -ePz -czT -bXs -xDL -xDL -lif -dTD -xZg -lif -bXs -nAp -uTy -bXs -ebb -nDW -uTy -hDi -gcU -gcU -hDi -lif -bXs -uTy -nAp -lif -bXs -bXs -lif -vCc -uck -jVr -kBi -vCc -lif -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -bXs -bXs -bXs -lif -lif -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -bXs -bXs -lif -lif -prU -wdV -wdV -www -www -www -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(89,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -qnw -vIR -nAp -uTy -cjj -lif -bXs -bXs -bXs -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -wSN -xKg -xKg -xKg -xKg -xKg -xKg -xKg -xKg -xKg -xKg -xKg -xKg -wSN -ucN -qnw -qnw -qnw -qnw -qnw -bXs -bXs -xDL -xDL -bXs -gfN -uxS -hus -hus -wgQ -gfN -boJ -boJ -boJ -boJ -boJ -gfN -aOi -rEh -pql -pql -pql -pql -eRt -eRt -cDx -ybJ -hQT -tJd -hQT -ybJ -cDx -wEi -cDx -akk -uLI -pgK -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -nAp -xDL -xDL -hDi -gcU -gcU -hDi -bXs -dsO -tTP -uTy -uTy -nAp -nAp -gcU -cke -bGy -gcU -lif -bXs -nAp -uTy -lif -bXs -bXs -lif -uNR -vCc -vCc -vCc -uNR -lif -gFp -bXs -bXs -lif -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -gvS -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -gvS -lif -bXs -bXs -bXs -gvS -lif -prU -prU -wdV -www -www -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(90,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -fFz -uTy -nAp -uTy -uTy -uTy -bXs -xEi -cjj -cjj -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -xKg -sVV -sVV -sVV -sVV -qAd -tCi -qAd -lif -sVV -sVV -sVV -sVV -xKg -qnw -qnw -qnw -qnw -qnw -qnw -qnw -bXs -xDL -xDL -lif -gfN -mlS -hus -uYT -uWG -gfN -old -old -old -old -old -kvS -aOi -rEh -rWn -evu -wsP -wsP -evu -iBh -cDx -ybJ -hQT -wzL -hQT -ybJ -mBY -xKY -cDx -pgK -pgK -pgK -bXs -nAp -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -gcU -qiW -lVz -gcU -dwS -hDi -evu -gcU -gcU -hDi -uTy -evu -cke -wsP -nNx -bXs -bXs -uTy -uTy -lif -bXs -bXs -gFp -lif -lif -gFp -lif -lif -bXs -bXs -bXs -gFp -lif -lif -bXs -rod -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -wdV -wdV -wdV -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(91,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -qfc -qfc -bCh -nAp -nAp -uTy -nAp -uTy -qnw -lif -cjj -bXs -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -xKg -qAd -lif -lif -aHB -lif -lif -lif -lif -jjF -lif -lif -jIU -xKg -qnw -qnw -lif -qnw -qnw -qnw -qnw -lif -xDL -xDL -lif -kvS -old -old -old -old -kvS -uNR -qnM -rEh -qOE -iso -eXb -oMz -rEh -vDw -pYM -lcQ -pqk -pYM -pYM -cDx -kxa -wSA -mBY -eMP -iRU -cDx -rqW -cDx -bXs -bXs -bXs -nAp -fgY -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -jaP -gcU -vOf -lGx -hHu -bbX -gcU -cke -cke -hPR -gcU -uTy -gcU -fdZ -onY -lSo -lif -bXs -nAp -uTy -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -rod -bXs -bXs -rod -bXs -rod -bXs -bXs -bXs -wdV -www -www -www -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(92,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -vIR -cjj -cjj -xEi -uTy -vIR -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -xKg -sVV -sVV -sVV -bSm -lif -lif -qeY -lif -sVV -bSm -sVV -sVV -xKg -qnw -qnw -xEi -qnw -qnw -qnw -qnw -lif -xDL -xDL -bXs -bXs -lif -bXs -bXs -bXs -lif -dFD -dFD -dFD -dFD -dFD -dFD -dFD -dFD -pYM -pYM -uGl -iWf -oFv -lif -cDx -oJs -sjp -cDx -dsJ -wEi -cDx -bAw -cDx -bXs -nAp -xDL -xDL -xDL -xDL -xDL -fHF -xzx -fHF -njU -jaP -jaP -jkx -gkO -qNw -gGu -gcU -bXs -gcU -ivG -ehQ -uRW -gcU -nAp -hDi -gcU -gcU -tVv -bXs -uTy -nAp -uTy -bXs -bXs -gFp -bXs -gFp -bXs -bXs -bXs -bXs -gFp -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -bXs -bXs -bXs -rod -bXs -rod -bXs -rod -bXs -rod -bXs -bXs -rod -bXs -bXs -rod -bXs -rod -rod -wdV -www -www -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(93,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -qcp -cjj -cjj -cjj -cjj -nAp -vIR -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -xKg -sVV -sVV -sVV -sVV -fFz -lif -lif -lif -sVV -sVV -bSm -sVV -xKg -qnw -lif -bXs -qnw -qnw -qnw -qnw -lif -xDL -xDL -xDL -xDL -xDL -xDL -xDL -fgY -bXs -bXs -bXs -bXs -bXs -lif -bXs -bXs -bXs -lif -nAp -bXs -bXs -bXs -lif -cDx -wEi -wEi -cDx -wAC -wEi -cDx -bXs -bXs -nAp -xDL -xDL -xDL -xDL -xDL -fHF -fHF -fHF -fHF -xzx -njU -jaP -jkx -hDi -mYL -gcU -hDi -lif -hDi -gcU -lSo -gcU -hDi -nAp -uTy -nAp -nAp -nAp -nAp -bXs -nAp -uTy -bXs -bXs -bXs -lif -lif -bXs -bXs -gFp -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -rod -bXs -rod -bXs -bXs -bXs -lif -lif -lif -bXs -rod -bXs -rod -pfi -nAp -nAp -uTy -uTy -nAp -bXs -lif -lif -bXs -bXs -lif -rod -bXs -wdV -wdV -wdV -www -vKe -www -wdV -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(94,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -qcp -cjj -bXs -qnw -cjj -cjj -nAp -cjj -cjj -qnw -qnw -cjj -bXs -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -xKg -lif -jjF -lif -lif -fFz -lif -bXs -lif -lif -lif -aHB -lif -xKg -qnw -xEi -nAp -qnw -hPt -hPt -hPt -fHF -rCO -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -ljs -bXs -cDx -xtl -xvf -cDx -xPH -vJF -cDx -bXs -nAp -xDL -xDL -xDL -uVp -fHF -fHF -xzx -fHF -fHF -xzx -fHF -njU -jkx -jaP -jkx -jkx -rod -lif -lif -lif -gko -lif -xZg -nAp -uTy -hDi -gcU -gcU -hDi -bXs -bXs -nAp -uTy -lif -gFp -bXs -lif -bXs -bXs -bXs -bXs -lif -lif -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -bXs -uTy -uTy -nAp -nAp -nAp -nAp -nAp -nAp -nAp -nAp -nAp -nAp -nAp -nAp -nAp -nAp -nAp -nAp -lif -lif -rod -bXs -bXs -wdV -www -www -www -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(95,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -qnw -qnw -qnw -qcp -vIR -poc -uTy -uTy -cjj -qcp -cjj -cjj -cjj -bXs -qnw -qnw -qnw -qnw -qnw -qnw -qnw -xKg -sVV -bSm -sVV -bSm -lif -rJq -lif -aHB -sVV -bSm -sVV -sVV -xKg -qnw -qnw -uTy -qnw -xmP -hPt -hPt -hPt -fHF -fHF -rCO -rCO -fHF -fHF -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -tyB -hvy -cDx -cDx -cDx -cDx -cDx -cDx -cDx -bXs -xDL -xDL -xDL -fHF -fHF -fHF -fHF -xzx -fHF -fHF -fHF -fHF -xzx -njU -jkx -jaP -jaP -jkx -lif -hDi -gcU -gcU -hDi -lif -bXs -uTy -evu -cke -gxJ -wEq -bXs -bXs -nAp -uTy -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -lif -gFp -bXs -bXs -bXs -rod -bXs -lif -lif -bXs -uTy -nAp -nAp -nAp -nAp -nAp -lif -bXs -lif -lif -lif -bXs -bXs -lif -lif -bXs -bXs -nAp -nAp -uTy -bXs -bXs -nAp -nAp -lif -lif -rod -wdV -www -www -www -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(96,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -qcp -cjj -cjj -oVT -vIR -uTy -uTy -qnw -qnw -cjj -cjj -cjj -cjj -bXs -qnw -qnw -qnw -qnw -qnw -qnw -xKg -sVV -sVV -sVV -cYF -jjF -lif -bXs -qAd -aHB -sVV -sVV -sVV -xKg -qnw -qnw -nAp -qnw -ftC -hPt -hPt -hPt -hPt -hPt -hPt -hPt -hPt -fHF -rCO -rCO -fHF -fHF -rCO -rCO -fHF -rCO -rCO -rCO -fHF -fHF -uVp -xDL -xDL -xDL -iEZ -bXs -bXs -bXs -nHP -nHP -bXs -bXs -nAp -xDL -xDL -uVp -fHF -fHF -xzx -fHF -fHF -fHF -xzx -fHF -fHF -xzx -fHF -njU -jaP -jaP -jkx -jkx -xEi -xXs -cke -wsP -bXs -nAp -hDi -gcU -cke -cke -lSo -bXs -lif -uTy -uTy -bXs -bXs -bXs -gFp -bXs -bXs -gFp -bXs -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -uTy -nAp -nAp -nAp -bXs -bXs -bXs -bXs -bXs -rod -bXs -lif -rod -uTy -bXs -rod -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -nAp -nAp -lif -bXs -bXs -wdV -www -www -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(97,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -cjj -cjj -cjj -cjj -cjj -cjj -uTy -uTy -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -xKg -lif -aHB -lif -lif -lif -bXs -rJq -lif -lif -fFz -lif -qAd -rta -lif -qnw -uTy -qnw -hPt -hPt -hPt -hPt -hPt -hPt -gym -hDi -gcU -gcU -hDi -hPt -hPt -hPt -rRw -hPt -hPt -hPt -hPt -hPt -hPt -fHF -uVp -fHF -xDL -xDL -xDL -xDL -xDL -xDL -dnb -dnb -xDL -xDL -xDL -xDL -xDL -fHF -fHF -fHF -fHF -hPt -hPt -fHF -fHF -xzx -fHF -fHF -xzx -njU -njU -jaP -jaP -jkx -jkx -tNP -uTy -gcU -lif -uTy -gcU -oVX -qwh -gcU -hDi -bXs -lif -uTy -uTy -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -gFp -bXs -bXs -bXs -rod -bXs -bXs -lif -uTy -nAp -nAp -bXs -lif -bXs -rod -bXs -bXs -rod -bXs -bXs -rod -bXs -nAp -rod -bXs -rod -bXs -bXs -bXs -rod -bXs -bXs -lif -lif -bXs -nAp -rod -bXs -rod -wdV -www -www -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(98,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -nAp -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -evm -sVV -sVV -bSm -sVV -lif -rJq -lif -jjF -sVV -sVV -sVV -sVV -xKg -qnw -qnw -uTy -qnw -hPt -hPt -hPt -hPt -hPt -hPt -fQM -gcU -cke -wYZ -gcU -hPt -hPt -hPt -hPt -fHF -uVp -fHF -hDi -gcU -gcU -gcU -hDi -uVp -hCI -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -fHF -fHF -xzx -fHF -hPt -hPt -hPt -fHF -fHF -fHF -fHF -fHF -fHF -fHF -xzx -njU -jaP -jaP -jkx -jkx -xXs -lSo -lif -nAp -gcU -oko -cke -hPR -xpW -bXs -gvS -uTy -nAp -bXs -bXs -lif -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -nAp -nAp -lif -bXs -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -lif -uTy -bXs -rod -bXs -bXs -rod -bXs -bXs -rod -bXs -gvS -bXs -nAp -nAp -lif -bXs -wdV -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(99,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -xEi -qnw -cjj -qnw -qnw -qnw -qnw -qnw -qnw -qnw -ucN -qIm -xKg -xKg -xKg -nsF -wSN -ydC -ydC -wSN -xKg -xKg -xKg -xKg -wSN -qnw -qnw -uTy -bXs -ftC -hPt -hPt -hPt -hPt -rRw -rMM -gcU -sMv -cke -gcU -hPt -xmP -ftC -ftC -ftC -xmP -uVp -gcU -wkp -wsP -wsP -gcU -fHF -noV -rej -fHF -hPt -hPt -hPt -fHF -fHF -hPt -hPt -hPt -hPt -fHF -fHF -hDi -gcU -gcU -gcU -hDi -fHF -fHF -fHF -xzx -fHF -fHF -xzx -fHF -njU -njU -jaP -jaP -jkx -evt -hDi -lif -xEi -hDi -gcU -wEq -gcU -hDi -bXs -bXs -uTy -nAp -lif -bXs -lif -lif -bXs -gFp -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -nAp -nAp -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -rod -nAp -lif -bXs -bXs -rod -bXs -rod -bXs -bXs -bXs -bXs -bXs -lif -nAp -uTy -gvS -wdV -www -vKe -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(100,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uTy -nAp -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -ucN -qnw -qnw -qnw -tJr -qnw -qnw -mAL -qnw -tJr -qnw -qnw -vmC -ilE -vmC -uTy -uTy -vmC -xmP -hPt -hPt -ftC -xmP -hPt -uVp -iBU -cke -cke -gcU -boT -ftC -rCO -rCO -rCO -ftC -rMM -hDi -hDi -hLi -wsP -gcU -hPt -fyZ -opd -hDi -gcU -gcU -gcU -hDi -gcU -gcU -gcU -hDi -fHF -fHF -hPt -gcU -wYZ -fYS -cke -gcU -rMM -xmP -ftC -fHF -fHF -fHF -xmP -ftC -uVp -njU -njU -jaP -jkx -jkx -rod -lif -bXs -uTy -lif -xEJ -lif -bXs -bXs -lif -nAp -uTy -lif -bXs -gFp -lif -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -rod -bXs -nAp -nAp -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -lif -uTy -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -gvS -bXs -rod -bXs -lif -nAp -nAp -lif -wdV -vKe -brh -vKe -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(101,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uTy -xEi -qnw -qnw -qnw -qnw -qnw -qnw -qnw -vmC -qnw -vmC -vmC -qnw -qnw -qnw -mAL -qnw -qnw -qnw -qnw -jGG -lif -lif -tJr -uTy -lif -lif -hPt -hPt -hPt -hPt -hPt -hPt -hPt -hDi -gcU -nRb -hDi -fHF -ftC -rCO -rCO -rCO -ftC -rMM -fHF -iBU -wsP -wsP -gcU -boT -opd -uVp -gcU -xEM -gqY -gqY -gcU -wYZ -tsO -wkp -gcU -fHF -hDi -gcU -hDi -cke -sWQ -gqY -gcU -rMM -ftC -hPt -hPt -fHF -xzx -ftC -uVp -rMM -fHF -njU -jaP -jaP -jkx -iNY -tKp -hDi -evu -gcU -wEq -hDi -lif -bXs -gvS -nAp -uTy -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -bXs -bXs -nAp -nAp -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -lif -lif -lif -bXs -bXs -rod -nAp -lif -bXs -bXs -rod -bXs -rod -bXs -lif -lif -bXs -bXs -rod -bXs -bXs -nAp -bXs -bXs -wdV -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(102,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uTy -uTy -uTy -xEi -fFz -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -vmC -qnw -mAL -rJq -nAp -nAp -nAp -uTy -uTy -vmC -vmC -uTy -vmC -lif -hPt -hPt -hPt -hPt -hPt -hPt -hPt -rMM -rCO -hPt -fHF -ppM -xmP -ftC -rCO -ftC -xmP -rMM -uVp -hDi -gcU -gcU -hDi -hPt -fHF -ntq -hDi -hDi -cke -cke -gcU -gqY -cke -wsP -gcU -fHF -gcU -cke -cke -gqY -jYl -ppJ -ndb -rMM -fHF -hPt -hPt -boT -lAJ -ftC -rMM -rMM -gIT -njU -jaP -jkx -jaP -jkx -rod -gcU -cke -cke -bGy -gcU -lif -lif -xEi -nAp -uTy -lif -rod -bXs -bXs -rod -bXs -bXs -rod -bXs -gvS -bXs -bXs -nAp -nAp -nAp -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -lif -bXs -bXs -rod -uTy -bXs -rod -bXs -lif -lif -bXs -bXs -rod -lif -bXs -rod -bXs -bXs -lif -nAp -bXs -rod -wdV -www -www -vKe -vKe -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(103,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -nAp -nAp -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -xEi -bSm -qnw -sVV -xEi -nAp -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -uGB -hPt -hPt -xmP -ftC -ftC -ftC -xmP -rMM -xmP -ftC -ftC -ftC -xmP -rCO -fHF -uVp -fHF -rMM -uVp -hDi -wsP -ifj -gcU -boT -hPt -lvw -pkn -gcU -wsP -cke -dKI -cke -cke -cke -gcU -fHF -hDi -cke -hDi -gcU -gcU -gcU -hDi -rMM -ftC -hPt -hPt -fHF -fHF -xmP -fHF -ftC -xmP -njU -jaP -jkx -jaP -jkx -jkx -gcU -pNI -cke -uRW -wEq -bXs -gvS -uTy -uTy -uTy -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -nAp -nAp -uTy -lif -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -rod -bXs -bXs -lif -bXs -bXs -lif -bXs -lif -gvS -lif -rod -bXs -bXs -rod -bXs -bXs -bXs -rod -nAp -bXs -bXs -wdV -www -www -vKe -vKe -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(104,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -cjj -qnw -nAp -nAp -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -nAp -lif -bXs -bXs -bXs -vmC -lif -uTy -uTy -uTy -jGG -hPt -hPt -ftC -fQM -fQM -ool -ftC -rMM -ftC -nDJ -nDJ -nDJ -hDi -gcU -iqN -hDi -uVp -hDi -gcU -hDi -wYZ -wsP -gcU -hPt -hPt -sTm -eDG -iBU -wsP -wsP -hDi -gcU -rkT -cke -hDi -fHF -rCO -rMM -rMM -rMM -rMM -ntq -rCO -rMM -xmP -ftC -ftC -xmP -rCO -fHF -fHF -iUb -bdM -njU -qkY -xMu -jkx -jaP -xMu -nlc -wEq -lSo -gcU -hDi -lif -nAp -uTy -uTy -uTy -nAp -bXs -rod -bXs -bXs -bXs -xXs -bXs -bXs -nAp -nAp -nAp -uTy -lif -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -rod -bXs -rod -uTy -bXs -rod -bXs -gvS -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -lif -nAp -lif -bXs -wdV -www -www -vKe -vKe -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(105,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -qnw -qnw -qnw -qnw -qnw -nAp -nAp -nAp -uTy -nAp -xEi -vIR -bSm -qnw -lif -lif -nAp -qnw -qnw -bXs -bXs -lif -nAp -uTy -scu -lQd -fHF -ftC -rMM -rMM -ool -ftC -rMM -xZi -nDJ -nDJ -nDJ -gcU -bvw -cke -gcU -lZD -cke -cke -wsP -cke -wsP -rkT -gxx -nDJ -rMM -ntq -hDi -gcU -gcU -hDi -ntq -ntq -rMM -uVp -ntq -ntq -uVp -uVp -uVp -rMM -rMM -rMM -rMM -rMM -rMM -uVp -rMM -rMM -uVp -uVp -rMM -wOd -njU -khv -wKF -uTy -jkx -wKF -wKF -uTy -uTy -uTy -uTy -uTy -nAp -uTy -nAp -uTy -uTy -nAp -nAp -bXs -nAp -nAp -nAp -nAp -nAp -nAp -lif -lif -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -nAp -lif -bXs -bXs -bXs -bXs -uTy -bXs -bXs -uTy -bXs -bXs -bXs -uTy -nAp -gvS -bXs -wdV -www -www -www -www -wdV -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(106,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -qnw -qnw -qnw -qnw -bXs -qnw -qnw -qnw -qnw -qnw -qnw -qnw -tJr -jGG -qnw -qnw -uGB -vmC -vmC -xEi -uTy -rMM -gFa -pYn -xmP -rMM -ftC -ftC -xmP -ebE -xmP -xmP -nDJ -nDJ -gcU -sMv -jYl -ndb -lwu -iBU -cke -cke -cke -wkp -gcU -hPt -muV -bWE -uVp -lQd -suZ -rMM -lQd -uVp -uVp -uVp -uVp -rMM -rMM -fHF -rCO -rCO -fHF -rMM -rMM -uVp -uVp -uVp -rMM -ntq -rMM -ntq -ntq -rMM -wOd -wOd -jaP -khv -uTy -uTy -jkx -wKF -nAp -nAp -nAp -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -uTy -uTy -uTy -uTy -lif -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -rod -uTy -bXs -rod -bXs -rod -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -uTy -nAp -lif -bXs -wdV -www -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(107,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -qnw -qnw -qnw -bXs -bXs -qnw -vmC -qnw -vmC -cjj -lif -qnw -bXs -qnw -jGG -vmC -qnw -qnw -qnw -qnw -lQd -rMM -rMM -rMM -vgG -rMM -rMM -rMM -rMM -ntq -lQd -xmP -ftC -ftC -hDi -gcU -gcU -hDi -kdQ -hDi -gcU -hDi -gcU -gcU -hDi -hvE -uVp -pOA -mNy -uVp -uVp -rMM -uVp -rMM -ntq -ntq -rMM -xmP -ftC -fgN -xmP -ftC -ciJ -ftC -xmP -rMM -xmP -ftC -ciJ -ftC -xmP -rCO -rCO -mJt -oxm -wSv -foR -gHy -mzw -rog -sfJ -eoE -lif -lif -bXs -bXs -bXs -bXs -lif -lif -lif -bXs -lif -lif -lif -bXs -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -bXs -bXs -bXs -bXs -lif -lif -lif -lYx -bXs -bXs -bXs -bXs -rod -bXs -rod -lif -uTy -lif -bXs -bXs -bXs -bXs -rod -bXs -rod -bXs -bXs -bXs -bXs -bXs -nAp -uTy -rod -wdV -www -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(108,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -qnw -qcp -bXs -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -cjj -lif -lif -lif -qnw -qnw -qnw -qnw -uVp -rCO -uFV -rMM -ntq -lQd -lQd -ntq -rMM -rMM -rMM -ntq -ntq -ntq -rMM -rMM -ntq -rMM -aXE -gFa -lQd -uVp -rMM -lQd -rMM -ntq -ebE -ntq -ntq -uVp -rMM -xWC -gxx -boT -ppM -pwc -rMM -ftC -fQM -fQM -ftC -fQM -fQM -fQM -ftC -rMM -ftC -ppM -lAJ -ppM -ftC -hPt -hPt -hPt -njU -foR -foR -sfJ -rog -rog -sfJ -foR -sfJ -sfJ -bXs -rod -bXs -bXs -bXs -lif -bXs -bXs -rod -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -lif -bXs -rod -bXs -bXs -rod -lif -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -bXs -uTy -nAp -dgp -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -rod -lif -nAp -uTy -bXs -bXs -wdV -wdV -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(109,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -nAp -qnw -bXs -bXs -qnw -cjj -cjj -cjj -bXs -qnw -qnw -lif -uSP -vmC -vmC -qnw -qnw -qnw -qnw -fHF -xmP -ftC -ftC -xmP -rzm -nDJ -hPt -xmP -ezJ -rMM -rMM -lQd -uVp -rMM -lQd -uVp -rMM -rMM -aXE -ntq -ljr -rMM -rMM -ntq -lQd -uVp -lQd -xWC -rMM -hDi -gcU -ndb -gcU -hDi -rMM -rMM -rMM -rMM -rMM -ftC -fQM -fQM -fQM -ftC -fHF -tfn -xad -tfn -fHF -ftC -hPt -hPt -hPt -njU -foR -sfJ -sfJ -rog -rog -sfJ -sfJ -foR -sfJ -sfJ -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -bXs -bXs -bXs -bXs -rog -rog -rog -rog -rog -rog -rog -mzw -mzw -rog -sXm -qjF -kRH -mzw -rog -sXm -rog -bXs -rod -bXs -rod -lif -bXs -bXs -bXs -lif -nAp -uTy -lif -bXs -wdV -www -www -wdV -cjj -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(110,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -qnw -qnw -bXs -cjj -cjj -cjj -cjj -cjj -cjj -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -tra -ftC -rMM -kVS -ftC -hPt -hPt -nDJ -hPt -rQJ -xmP -ftC -ftC -xmP -lQd -hDi -gcU -gcU -hDi -aXE -xmP -ftC -ftC -ftC -hDi -gcU -gcU -hDi -sVh -rMM -gcU -hgQ -wsP -gqY -gcU -rMM -xmP -xmP -rMM -rMM -rMM -rMM -fQM -xmP -xmP -rMM -ftC -oEc -ppM -ppM -fHF -hPt -hPt -hPt -njU -foR -sfJ -rog -bOq -rog -sfJ -sfJ -sfJ -foR -sfJ -rog -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -rog -rog -rog -rog -rog -sfJ -sfJ -sfJ -rog -rog -rog -rog -sXm -rog -rog -sfJ -aTX -sfJ -sfJ -sfJ -sfJ -rog -rog -rog -lif -lif -gvS -bXs -bXs -lif -nAp -uTy -lif -rod -wdV -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(111,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -nAp -bXs -cjj -cjj -cjj -cjj -cjj -cjj -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -xWC -xWC -rMM -rMM -ftC -hPt -hPt -hPt -hPt -rQJ -ftC -nDJ -nDJ -rCO -fHF -gcU -wYZ -cke -uJf -vJI -ftC -nDJ -nDJ -nDJ -gcU -biW -wsP -gcU -rMM -gxx -gcU -tsO -cke -cke -fKJ -rMM -rMM -rMM -rMM -rMM -ftC -yhf -rMM -rMM -rMM -rMM -xmP -fHF -niQ -ftC -ftC -ftC -xmP -fHF -njU -foR -sfJ -sXm -rog -rog -rog -bOD -sfJ -foR -sfJ -sfJ -bXs -rod -bXs -bXs -gvS -lif -bXs -bXs -rod -bXs -bXs -lif -lif -lif -bXs -bXs -bXs -bXs -bXs -bXs -rod -rog -rog -rog -rog -sfJ -sfJ -sfJ -sfJ -sfJ -rog -ncw -rog -rog -rog -sfJ -sfJ -aTX -pEe -foR -foR -vQh -sfJ -sXm -rog -bXs -lif -lif -bXs -bXs -bXs -nAp -uTy -bXs -bXs -wdV -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(112,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cZM -cZM -cZM -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -nAp -xEi -qnw -cjj -bXs -cjj -cjj -cjj -cjj -cjj -cjj -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -fQM -ftC -ool -fQM -uJT -hPt -hPt -hPt -xmP -rQJ -ftC -nDJ -nDJ -ftC -rCO -ndb -cke -cke -cke -rMM -xmP -xmP -nDJ -nDJ -gcU -cke -wYZ -fKJ -rMM -rMM -hDi -gcU -gcU -gcU -hDi -rMM -xmP -ftC -ftC -fgN -xmP -ftC -ftC -xmP -rMM -hPt -hPt -hPt -ftC -fHF -rMM -hPt -ftC -fHF -njU -foR -sfJ -fCb -rog -bOq -rog -rog -sfJ -foR -sfJ -sfJ -rog -rog -rog -mzw -mzw -lif -lif -rod -bXs -bXs -bXs -lif -lif -lif -rod -bXs -bXs -bXs -bXs -bXs -bXs -rog -rog -mzw -sLW -sfJ -sfJ -sfJ -foR -sfJ -sfJ -rog -rog -rog -sfJ -sfJ -foR -aTX -foR -foR -foR -foR -sfJ -sXm -rog -sXm -rog -bXs -bXs -bXs -rod -nAp -uTy -lif -bXs -wdV -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(113,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cZM -jyY -cZM -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uTy -xEi -cjj -cjj -bXs -qcp -cjj -cjj -cjj -cjj -cjj -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -tra -xmP -ftC -ftC -xmP -hPt -hPt -hPt -uVp -lKj -rCO -nDJ -nDJ -ftC -fHF -gcU -sMv -ert -gcU -rMM -xWC -xZi -nDJ -nDJ -gcU -mKN -sWQ -gcU -fHF -rMM -gcU -wsP -yhE -wsP -gcU -rMM -rMM -fHF -fHF -fHF -fHF -fHF -fHF -fHF -rMM -hPt -hPt -hPt -clF -kVS -sVh -fHF -hPt -fHF -njU -foR -foR -sfJ -bOD -rog -rog -fCb -sfJ -foR -sfJ -sfJ -rog -rog -sfJ -rog -rog -mzw -rog -rog -rog -rog -rog -rog -rog -sXm -rog -rog -rog -rog -rog -rog -rog -rog -osA -mzw -sfJ -sfJ -foR -foR -foR -foR -sfJ -sfJ -rog -rog -sfJ -foR -foR -aTX -tPO -foR -foR -foR -vQh -sfJ -rog -rog -rog -bXs -bXs -bXs -bXs -nAp -uTy -bXs -bXs -wdV -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(114,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cZM -xYD -cZM -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -nAp -qnw -qnw -nAp -qnw -cjj -cjj -cjj -cjj -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -gyc -hPt -hPt -hPt -hPt -hPt -hPt -hPt -hPt -uVp -hDi -gcU -gcU -hDi -fHF -hDi -gcU -gcU -hDi -fHF -rMM -xmP -ftC -ftC -hDi -hDi -gcU -hDi -fHF -rMM -rkT -uEt -cke -wYZ -cke -fHF -rMM -hPt -hDi -gcU -gcU -gcU -hDi -fHF -rMM -hPt -hPt -hPt -clF -rMM -rMM -rMM -ftC -njU -foR -foR -foR -sfJ -sfJ -fCb -rog -sfJ -sfJ -foR -foR -sfJ -rog -rog -sfJ -sfJ -rog -rog -sXm -rog -rog -ncw -rog -rog -rog -rog -rog -rog -rog -rog -sXm -rog -rog -rog -rog -sfJ -sfJ -sfJ -tPO -foR -foR -foR -foR -sfJ -sfJ -rog -sfJ -foR -foR -aTX -fZx -fZx -foR -foR -sfJ -sfJ -sXm -sXm -rog -bXs -rod -bXs -lif -nAp -nAp -rod -bXs -wdV -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(115,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cZM -xYD -cZM -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -tOe -cjj -nAp -lif -bXs -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -fQM -hPt -hPt -hPt -hPt -hPt -hPt -hPt -hPt -fHF -gcU -cke -cke -cke -fHF -fHF -fHF -fHF -fHF -qgJ -rMM -fHF -hPt -hPt -hPt -hPt -hPt -hPt -fHF -fQM -gcU -ifj -ert -hDi -hDi -hPt -fHF -hPt -ndb -ert -ert -wYZ -gcU -ppM -rMM -hPt -hPt -hPt -hPt -hPt -rMM -niQ -njU -njU -foR -foR -foR -sfJ -sfJ -sXm -rog -sfJ -foR -foR -sfJ -sfJ -sXm -rog -sfJ -sfJ -rog -rog -rog -rog -rog -aLP -rog -rog -sfJ -rog -rog -mzw -mzw -rog -sfJ -sfJ -sXm -sXm -rog -sfJ -sfJ -foR -foR -foR -foR -fZx -tPO -sfJ -sfJ -sfJ -sfJ -foR -tPO -aTX -foR -foR -foR -tPO -sfJ -rog -sXm -rog -sXm -bXs -bXs -bXs -lif -bXs -nAp -bXs -bXs -wdV -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(116,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cZM -cZM -cZM -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uTy -ugo -nAp -qnw -qnw -qcp -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -uqL -onX -onX -onX -onX -onX -onX -fHF -hPt -rMM -rMM -iBU -wYZ -cke -gcU -ppM -hDi -gcU -uPQ -gcU -hDi -rMM -ftC -hPt -hPt -hPt -ftC -hPt -qgJ -kXd -hPt -hDi -gcU -gcU -hDi -hPt -rRw -hPt -hPt -gcU -sMv -cke -cke -cke -hPt -rMM -rMM -hPt -hPt -xmP -ftC -ftC -njU -njU -foR -foR -foR -foR -foR -sfJ -sfJ -sXm -sfJ -foR -foR -sfJ -rog -rog -rog -sfJ -sfJ -rog -rog -rog -rog -rog -rog -rog -sfJ -sfJ -rog -rog -mzw -osA -mzw -sfJ -sfJ -sfJ -rog -rog -sfJ -foR -foR -foR -foR -foR -tPO -foR -sfJ -sfJ -sfJ -sfJ -foR -tPO -aTX -pEe -foR -foR -foR -sfJ -sXm -rog -rog -rog -sXm -bXs -bXs -bXs -nAp -nAp -lif -bXs -wdV -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(117,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uTy -cjj -xEi -cjj -lif -qnw -qcp -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -cjj -cjj -onX -onX -onX -onX -onX -onX -onX -onX -eZE -kXJ -gcU -cke -sMv -ndb -hPt -gcU -ert -cke -cke -uJf -rMM -xmP -ftC -ftC -ftC -xmP -hPt -hPt -onX -onX -fHF -hPt -hPt -hPt -hPt -hPt -fQM -hPt -hDi -gcU -gcU -gcU -hDi -ppM -ppM -fQM -hPt -hPt -hPt -hPt -njU -njU -foR -foR -foR -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -foR -foR -sfJ -sXm -rog -sXm -sfJ -sfJ -rog -osA -mzw -sfJ -sXm -sfJ -sfJ -sfJ -sLW -rog -rog -rog -rog -sfJ -sfJ -sfJ -sfJ -rog -rog -sfJ -foR -foR -tPO -fZx -foR -foR -foR -foR -foR -foR -foR -foR -fZx -aTX -sfJ -foR -foR -foR -sfJ -sfJ -sXm -rog -rog -rog -bXs -rod -uTy -nAp -bXs -bXs -rod -wdV -www -www -www -wdV -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(118,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uTy -xEi -uTy -qnw -qcp -qnw -qnw -qnw -qnw -cjj -cjj -bXs -qnw -qnw -qnw -cjj -cjj -cjj -cjj -onX -onX -onX -onX -onX -onX -onX -onX -onX -hPt -hDi -gcU -gcU -hDi -hPt -gcU -ceG -ert -wYZ -gcU -rMM -hPt -hPt -hPt -hPt -hPt -hPt -onX -onX -onX -onX -onX -fHF -hPt -hPt -hPt -fQM -onX -onX -fHF -hPt -hPt -hPt -hPt -hPt -fQM -hPt -hPt -hPt -njU -foR -foR -foR -foR -foR -sfJ -sfJ -sfJ -foR -foR -sfJ -sfJ -foR -foR -sfJ -sXm -rog -rog -sfJ -sfJ -mzw -mzw -mzw -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -rog -rog -sXm -sfJ -sfJ -sfJ -sfJ -rog -rog -rOU -foR -foR -foR -foR -foR -foR -foR -fZx -tPO -foR -foR -foR -sfJ -edL -rog -vQh -foR -foR -foR -sfJ -sfJ -sXm -rog -rog -lif -lif -uTy -nAp -bXs -bXs -bXs -wdV -www -www -www -wdV -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(119,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -nAp -qnw -qnw -qnw -cjj -cjj -cjj -cjj -bXs -qnw -cjj -cjj -cjj -cjj -cjj -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -fHF -hPt -hPt -hPt -onX -hDi -tqO -tqO -tqO -hDi -rMM -onX -fHF -hPt -onX -onX -onX -onX -onX -onX -onX -onX -onX -fHF -hPt -hPt -onX -onX -onX -onX -onX -onX -onX -hPt -hPt -hPt -hPt -hPt -njU -foR -foR -foR -sfJ -foR -foR -sfJ -sfJ -sfJ -foR -foR -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -rog -rog -rog -rog -sfJ -sfJ -sfJ -sfJ -sfJ -rog -sfJ -sfJ -sfJ -rog -rog -rog -rog -sfJ -sfJ -sfJ -rog -rog -sfJ -sfJ -fZx -foR -tPO -tPO -foR -foR -foR -foR -foR -foR -sfJ -sXm -pHp -rog -sfJ -foR -foR -foR -tPO -sfJ -rog -rog -sXm -lif -lif -uTy -nAp -bXs -rod -bXs -www -vKe -vKe -www -wdV -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(120,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -hPt -hPt -fQM -hPt -hPt -njU -foR -foR -sfJ -sfJ -foR -foR -foR -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -rog -sXm -rog -sfJ -sLW -sfJ -rog -rog -rog -rog -rog -rog -rog -rog -rog -rog -rog -sfJ -sfJ -rog -rog -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -edL -mtc -sfJ -foR -foR -foR -foR -sfJ -edL -rog -sfJ -foR -foR -foR -foR -sfJ -sXm -rog -rog -rod -bXs -uTy -nAp -bXs -bXs -wdV -vKe -brh -vKe -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(121,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -hPt -hPt -hPt -njU -foR -sfJ -sfJ -sfJ -foR -foR -foR -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -foR -foR -foR -foR -foR -sfJ -rog -rog -rog -sfJ -sfJ -rog -sXm -sfJ -sfJ -sfJ -sfJ -sfJ -rog -rog -rog -rog -rog -rog -rog -sXm -sfJ -fZx -tPO -sfJ -sfJ -qel -cwV -edL -edL -keH -keH -keH -keH -keH -keH -sfJ -foR -tPO -foR -foR -foR -sfJ -vQh -sXm -rog -bXs -bXs -bXs -nAp -bXs -bXs -wdV -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(122,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -fHF -hPt -hPt -hPt -hPt -njU -foR -sfJ -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -foR -foR -foR -foR -foR -sfJ -sfJ -sXm -rog -sfJ -rog -rog -rog -sfJ -foR -foR -foR -sfJ -sfJ -sXm -rog -rog -rog -rog -rog -sfJ -sfJ -foR -foR -foR -vQh -aEJ -aEJ -lVj -aEJ -aEJ -aEJ -tPO -tPO -foR -foR -tPO -foR -foR -foR -foR -tPO -foR -sfJ -osA -rog -sXm -bXs -lif -nAp -bXs -rod -wdV -rQE -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(123,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -hPt -hPt -hPt -njU -foR -sfJ -sfJ -sfJ -sfJ -foR -sfJ -sfJ -sfJ -sfJ -foR -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -foR -foR -sfJ -sfJ -rog -rog -rog -sXm -sfJ -sfJ -foR -foR -foR -foR -foR -sfJ -sfJ -sXm -rog -sXm -rog -sfJ -foR -foR -foR -foR -sLW -aEJ -kel -uJD -yjO -dsM -aEJ -vQh -foR -foR -foR -gzS -foR -foR -foR -foR -foR -foR -sfJ -osA -rog -mzw -bXs -lif -uTy -lif -bXs -prU -prU -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(124,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -hPt -hPt -hPt -njU -foR -sfJ -sfJ -sfJ -sfJ -foR -sfJ -sfJ -sfJ -sfJ -foR -foR -foR -foR -sfJ -sfJ -sfJ -sfJ -sfJ -foR -foR -sfJ -sfJ -rog -rog -sfJ -sfJ -foR -foR -foR -foR -foR -foR -foR -sfJ -sfJ -sLW -sfJ -sfJ -sfJ -foR -foR -foR -foR -sfJ -aEJ -aan -uJD -uJD -uJD -bXK -sfJ -foR -foR -foR -foR -foR -foR -foR -foR -foR -vQh -sfJ -osA -mzw -osA -mzw -kRH -edL -mzw -mzw -osA -mzw -jGA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(125,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -hPt -hPt -njU -njU -foR -sfJ -sfJ -sfJ -sfJ -foR -sfJ -sfJ -sfJ -sfJ -foR -foR -foR -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -foR -sfJ -sfJ -sXm -sfJ -sfJ -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -tPO -foR -sfJ -aEJ -ikR -rJN -uJD -lJT -aEJ -sLW -foR -foR -foR -tPO -foR -foR -foR -tPO -foR -sfJ -sfJ -jGA -jGA -mzw -mzw -kRH -aTX -mzw -sfJ -mzw -sfJ -jGA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(126,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -hPt -njU -foR -foR -sfJ -sfJ -sfJ -sfJ -foR -sfJ -sfJ -sfJ -sfJ -sfJ -foR -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -foR -sfJ -sfJ -sfJ -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -sfJ -aEJ -aEJ -aEJ -aEJ -aEJ -aEJ -foR -foR -foR -foR -tPO -tPO -foR -tPO -foR -foR -sfJ -jGA -jGA -jGA -sfJ -mzw -aTX -aTX -mzw -sfJ -sfJ -sfJ -jGA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(127,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -hPt -njU -foR -foR -sfJ -sfJ -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -foR -sfJ -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -tPO -foR -tPO -foR -tPO -sfJ -sfJ -sLW -sfJ -tPO -foR -foR -foR -tPO -tPO -tPO -foR -foR -foR -sfJ -jGA -jGA -jGA -jGA -sLW -sfJ -aTX -aTX -sfJ -sfJ -sfJ -jGA -jGA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(128,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -njU -foR -foR -sfJ -sfJ -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -sfJ -foR -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -tPO -foR -tPO -foR -foR -tPO -foR -tPO -foR -tPO -foR -foR -foR -tPO -foR -sfJ -jGA -jGA -jGA -jGA -jGA -jGA -sfJ -rZj -rZj -sfJ -sfJ -jGA -jGA -jGA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} - -(1,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(2,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(3,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(4,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(5,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(6,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(7,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -vRF -vRF -vRF -vRF -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -aDC -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(8,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -vRF -vRF -vRF -uXy -kLA -vRF -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -rGj -rGj -jCP -jCP -jCP -jCP -jCP -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(9,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -jCP -jCP -jCP -jCP -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -jCP -jCP -vRF -ifq -wCA -baQ -kLA -kLA -vRF -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -hTZ -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(10,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -rGj -jCP -jCP -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -vRF -hqR -qmK -rxI -kLA -kLA -vRF -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -hTZ -hTZ -hTZ -hTZ -hTZ -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -hUT -hUT -hUT -hUT -hUT -rGj -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -iLF -iLF -jCP -jCP -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(11,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -vRF -vRF -kLA -kLA -kLA -vRF -vRF -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -hTZ -rGj -hTZ -rGj -hTZ -hTZ -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -jCP -jCP -jCP -jCP -jCP -esl -esl -iLF -esl -eDT -iLF -jCP -jCP -jaf -jaf -jaf -jaf -jaf -jaf -jaf -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(12,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -vRF -vRF -kLA -vRF -vRF -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -hTZ -hTZ -hTZ -rGj -hTZ -hTZ -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -rGj -esl -eDT -iLF -iLF -iLF -iLF -iXr -jCP -jaf -jaf -jaf -jaf -jaf -jaf -jaf -cZs -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(13,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -vRF -vRF -vRF -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -iLF -eDT -iLF -esl -eDT -iXr -iXr -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(14,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -xDL -xDL -tpB -uRR -urE -urE -xDL -tpB -tpB -uRR -urE -xDL -xDL -xDL -tpB -tpB -uRR -xDL -urE -xDL -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -iLF -iLF -iLF -iXr -esl -eDT -iXr -esl -esl -eDT -esl -iLF -jCP -jCP -jCP -cZs -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(15,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -xDL -tpB -tpB -uRR -urE -urE -xDL -tpB -tpB -uRR -urE -urE -xDL -xDL -tpB -xDL -xDL -xDL -urE -xDL -qqw -qqw -qqw -rGj -bOb -rGj -bOb -rGj -bOb -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -eDT -iLF -iLF -eDT -iXr -esl -esl -eDT -esl -esl -esl -esl -eDT -iLF -fDW -jCP -jaf -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(16,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -xDL -tpB -tpB -uRR -urE -urE -xDL -tpB -tpB -uRR -urE -urE -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -rGj -bOb -rGj -rGj -rGj -bOb -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -iLF -iLF -iLF -esl -eDT -iXr -esl -iLF -esl -koX -koX -iLF -esl -esl -iLF -fDW -jaf -sNy -cZs -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(17,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -xDL -xDL -xDL -xDL -qqw -qqw -xDL -tpB -tpB -evX -urE -urE -xDL -tpB -tpB -evX -urE -urE -xDL -xDL -tpB -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -lXz -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -eDT -iLF -iLF -iXr -iXr -esl -koX -npJ -npJ -npJ -npJ -koX -eDT -esl -eDT -fDW -jaf -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(18,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -urE -urE -urE -xDL -qqw -qqw -xDL -tpB -tpB -evX -urE -urE -xDL -tpB -tpB -evX -urE -urE -xDL -xDL -tpB -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -hTZ -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -eDT -esl -iLF -iLF -esl -eDT -esl -esl -koX -npJ -esl -esl -esl -npJ -koX -koX -npJ -jCP -jaf -sNy -sNy -sNy -cZs -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(19,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -urE -urE -urE -xDL -qqw -qqw -xDL -xDL -tpB -evX -urE -urE -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -hTZ -hTZ -rGj -hTZ -hTZ -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mqb -mqb -mqb -mqb -mqb -mqb -mqb -mqb -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -eDT -iLF -iXr -iXr -esl -npJ -esl -esl -esl -esl -esl -koX -koX -iLF -iLF -fDW -jaf -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(20,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -urE -urE -urE -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mqb -xEE -xEE -xEE -xEE -xEE -xEE -mqb -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -jcv -qqw -qqw -qqw -qqw -jcv -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -esl -eDT -esl -iLF -iLF -iXr -esl -eDT -koX -esl -esl -jCP -eDT -iXr -esl -npJ -eDT -iLF -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(21,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -xDL -xDL -xDL -xDL -xDL -uRR -uRR -uRR -uRR -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mqb -xEE -mqb -xEE -xEE -xEE -xEE -mqb -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -esl -esl -iLF -iLF -iLF -eDT -esl -esl -cce -esl -iXr -jCP -jCP -iXr -esl -npJ -esl -jCP -jCP -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(22,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -xDL -tpB -tpB -uRR -uRR -uRR -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mqb -mLJ -mLJ -mLJ -mLJ -mLJ -mLJ -mqb -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -esl -eDT -esl -eDT -iXr -iXr -esl -iXr -rGj -iXr -jCP -jCP -jCP -esl -koX -npJ -esl -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(23,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -xDL -tpB -tpB -tpB -uRR -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mqb -mLJ -mLJ -mLJ -mqb -mLJ -mLJ -mqb -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -jcv -qqw -qqw -qqw -qqw -jcv -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -esl -esl -iLF -esl -iLF -eDT -esl -rGj -rGj -esl -iXr -jCP -jCP -esl -npJ -esl -eDT -jCP -jCP -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(24,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -xDL -tpB -tpB -evX -urE -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mqb -mqb -mqb -mqb -mqb -mqb -mqb -mqb -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -esl -esl -eDT -iLF -iXr -esl -esl -rGj -rGj -fNw -iXr -jCP -jCP -esl -koX -iXr -iXr -jCP -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(25,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -xDL -tpB -evX -evX -evX -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -eDT -esl -iXr -rGj -rGj -rGj -iXr -jCP -jCP -jCP -esl -koX -iXr -iXr -eDT -jCP -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(26,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -xDL -xDL -evX -evX -evX -evX -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -eDT -iXr -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -iXr -esl -npJ -iXr -iXr -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -ahS -nXA -eEa -ahS -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(27,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -uRR -uRR -uRR -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -urE -urE -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -iXr -eDT -koX -koX -iXr -jCP -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -nXA -eEa -nXA -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(28,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -qqw -qqw -qqw -xDL -tpB -tpB -uRR -urE -urE -xDL -tpB -tpB -uRR -urE -urE -xDL -xDL -xDL -uRR -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -urE -urE -urE -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -iXr -iXr -esl -koX -eDT -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -nXA -nXA -oqz -nXA -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(29,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -qqw -qqw -qqw -xDL -tpB -tpB -uRR -urE -urE -xDL -tpB -tpB -uRR -urE -urE -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -urE -urE -urE -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -fDW -iXr -iXr -koX -iXr -fDW -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -ahS -nXA -eEa -ahS -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(30,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -qqw -qqw -qqw -xDL -tpB -tpB -evX -urE -urE -xDL -tpB -tpB -xyY -urE -urE -evX -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -urE -urE -urE -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -fDW -iXr -fJz -fDW -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(31,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -qqw -qqw -qqw -xDL -tpB -tpB -evX -urE -urE -xDL -tpB -tpB -evX -urE -urE -evX -evX -evX -evX -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -urE -urE -xDL -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -jaf -jaf -jaf -sNy -jaf -jaf -jaf -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(32,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -tpB -tpB -evX -urE -urE -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -urE -urE -urE -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(33,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -jaf -jaf -sNy -jaf -jaf -jaf -jaf -jaf -jaf -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(34,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jaf -qhw -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(35,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -jCP -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -ahS -srr -ahS -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(36,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -esl -esl -esl -jCP -jaf -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -hDZ -nXA -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(37,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -oGx -fbL -oGx -fbL -oGx -fbL -oGx -fbL -ekO -aHN -ekO -aHN -ekO -aHN -ekO -aHN -ekO -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -ahS -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(38,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oGx -qxN -qxN -qxN -qxN -qxN -qxN -qxN -dZv -pyU -pyU -pyU -pyU -pyU -pyU -pyU -pyU -pyU -ekO -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jaf -jaf -jaf -sNy -sNy -jaf -jaf -jaf -jaf -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(39,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -fbL -kwX -cfM -cfM -cfM -cfM -cfM -epf -wfc -kmF -kmF -kmF -kmF -kmF -kmF -kmF -gpy -pyU -aHN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -esl -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(40,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -bXs -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -oGx -bvj -aCN -aCN -aCN -aCN -aCN -plJ -wce -tLH -eXI -tLH -tLH -tLH -tLH -tLH -fWC -pyU -aHN -ekO -aHN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(41,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -oGx -fbL -oGx -fbL -oGx -fbL -bvj -aCN -aCN -aCN -aCN -aCN -mvj -vpV -tLH -tLH -tLH -tLH -tLH -tLH -tLH -fWC -pyU -pyU -pyU -iGU -ekO -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -tpB -tpB -xDL -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -jCP -jCP -jCP -jCP -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(42,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -bXs -wdV -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oGx -qxN -qxN -qxN -qxN -qxN -qxN -bvj -qqw -qqw -qqw -qqw -qqw -mjl -pyU -roR -eXI -roR -roR -roR -roR -rFa -jLa -kKg -kKg -nUi -pyU -pyU -aHN -qqw -qqw -qqw -qqw -qqw -qqw -xDL -tpB -xDL -xDL -xDL -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -bYY -jCP -jCP -jCP -jaf -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(43,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -rIo -bXs -bXs -bXs -nAp -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -fbL -fbL -kwX -eMo -eMo -ftR -ftR -ftR -mPQ -qqw -qqw -qqw -qqw -qqw -mjl -pyU -roR -roR -roR -roR -roR -roR -rFa -rFa -xvb -xvb -vYp -nUi -pyU -ekO -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -tpB -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -koX -bYY -jCP -jCP -jaf -jaf -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(44,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uzs -tdl -tdl -uzs -tdl -bfK -tdl -uzs -wdV -bXs -wdV -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vzv -heO -bvj -eqM -sIe -sIe -sIe -sIe -eZF -qqw -qqw -qqw -qqw -qqw -qLY -pyU -roR -roR -roR -roR -roR -roR -rFa -rFa -xvb -xvb -aUr -uKI -pyU -aHN -oGx -fbL -oGx -fbL -aCN -qqw -xDL -xDL -xDL -urE -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -pzV -pzV -npJ -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -esl -esl -bYY -jCP -jCP -jaf -jaf -jaf -sNy -sNy -sNy -cZs -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(45,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -tdl -uzs -oaV -tdl -dYM -iEP -lTO -tdl -tUC -xEi -bXs -jlO -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -czT -ePz -ePz -ePz -ePz -czT -cZj -oFq -sIe -sIe -sIe -sIe -sIe -fxC -qqw -qqw -qqw -qqw -qqw -ydz -ydz -wTk -pod -ydz -ydz -ydz -ydz -ydz -ydz -eXI -xvb -aUr -uKI -pyU -pyU -qxN -qxN -qxN -nSF -oGx -qqw -xDL -tpB -tpB -tpB -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -pzV -pzV -esl -esl -esl -esl -npJ -esl -esl -esl -esl -esl -esl -esl -jCP -jCP -jaf -jaf -jaf -jaf -cZs -jaf -cZs -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(46,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -tdl -wHs -iEP -tdl -ovm -iEP -iEP -tdl -lif -wdV -bXs -xEi -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -pLb -sbg -jDX -mBr -mBr -pLb -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -ydz -ydz -wTk -pod -ydz -ydz -ydz -ydz -ydz -ydz -xvb -xvb -aUr -vYp -cMu -xcg -xcg -xcg -xcg -cMu -uNR -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -pzV -pzV -esl -bYY -esl -koX -esl -esl -jCP -uZo -jCP -bYY -esl -bYY -jCP -jCP -jaf -jaf -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(47,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -tdl -iEP -iEP -dJH -qJn -iEP -iOR -mGa -xEi -ccp -uTy -lif -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -pLb -dOQ -qZV -nCg -jiZ -pLb -uAc -uAc -rsP -wvR -xLU -xLU -xLU -xLU -xLU -xLU -xLU -ydO -hPb -iwS -rPQ -qiP -wjq -eXI -wjq -wjq -wjq -ydz -ydz -xvb -xvb -aUr -aUr -fxT -oTB -cli -lsi -xiI -fxT -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -pzV -pzV -esl -esl -esl -npJ -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(48,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -uzs -tdl -tdl -lpf -wbP -iEP -cmQ -uzs -ptr -bXs -gTE -jlO -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -tRx -vFV -vFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -pLb -dOQ -qZV -kVX -jiZ -pLb -aCN -aCN -xgL -wvR -dvI -rAW -rAW -iYv -rAW -rAW -dvI -ydO -aCN -ydz -jAK -qUm -wjq -wjq -wjq -qUm -dmx -ydz -ydz -xvb -xvb -aUr -aUr -fxT -hvr -sFy -cli -grD -fxT -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -tYk -npJ -koX -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -jaf -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(49,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -kxd -lFX -ryq -xDL -tdl -bvE -iEP -iOR -tdl -ccp -xEi -bXs -xEi -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -vFV -tRx -vFV -qqw -vFV -szB -nDD -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vFV -euy -qDJ -qDJ -eOG -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -pLb -dOQ -qZV -kVX -jiZ -pLb -aCN -wvR -dBF -wvR -hUy -sme -xvK -xPs -oXi -kiP -hUy -ydO -aCN -ikx -kGq -wjq -wjq -wjq -wjq -wjq -qcx -iwS -iwS -xvb -xvb -aUr -aUr -fxT -bJv -cli -sFy -cli -fxT -qqw -qqw -qqw -qqw -qqw -udN -uNR -vCc -uNR -udN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -npJ -esl -esl -esl -esl -esl -jCP -jCP -jaf -sNy -jaf -jaf -jaf -jaf -jaf -jaf -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(50,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -oxH -uTy -eyx -tdl -ncu -iEP -iEP -tdl -xXs -bXs -gTE -wdV -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -fBu -fBu -vFV -vFV -vFV -bxU -xPz -vFV -bRB -njK -mVM -fpV -czi -bzx -vFV -ski -fBu -vFV -aJh -rlr -rlr -mOs -vFV -tRx -vFV -vFV -aCN -aCN -aCN -aCN -aCN -aCN -pLb -dOQ -qZV -kVX -jiZ -pLb -aCN -wvR -dvI -iYv -dvI -viY -xvK -xvK -xvK -xvK -hUy -ydO -aCN -ikx -ceL -xvb -xvb -oTq -aUr -aUr -dCj -ydz -ydz -ydz -ydz -ydz -ydz -fxT -ecu -cCc -lzE -cCc -fxT -qqw -qqw -qqw -qqw -qqw -uNR -gfp -gfp -gfp -uNR -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -esl -esl -jCP -jCP -sNy -aRU -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jaf -jaf -jaf -jaf -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(51,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -lif -uTy -bXs -uzs -tdl -rvM -tdl -uzs -lif -bXs -gTE -xEi -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tRx -hLI -fBu -vFV -hNx -vFV -vFV -kmL -vFV -cSd -fws -vyP -vyP -vyP -njK -vFV -xVh -hMK -vFV -gdJ -wox -nnr -qSl -vFV -hLI -fBu -vFV -dxA -dxA -dxA -dxA -dxA -dxA -pLb -dOQ -qZV -xQe -jiZ -pLb -aCN -wvR -hUy -gjU -amo -ooJ -ooJ -kPs -kdG -ooJ -hUy -ydO -aCN -ikx -nva -rFa -iZa -rFa -rFa -rFa -weW -ydz -ydz -ydz -ydz -ydz -ydz -cMu -xcg -xcg -atE -xcg -cMu -fbL -qqw -qqw -qqw -qqw -vCc -frM -mNU -gfp -vCc -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -hDi -gcU -gcU -gcU -hDi -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -esl -esl -jCP -jCP -jaf -jaf -jaf -sNy -jaf -sNy -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(52,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -wdV -bXs -uTy -lif -lif -uTy -bXs -bXs -bXs -bXs -jlO -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -vFV -vFV -vFV -xPz -xDk -wox -wox -vFV -sOZ -njK -vyP -vyP -vyP -njK -vFV -vAZ -xPz -vFV -vFV -qcq -ibq -vFV -vFV -fBu -fBu -vFV -aCN -aCN -aCN -aCN -aCN -aCN -czT -ePz -ePz -ePz -mEN -czT -aCN -wvR -hUy -pMg -dvI -rAW -rAW -dvI -rAW -lcf -hUy -ydO -aCN -ydz -oIO -jVk -rFa -rFa -rFa -jVk -mVX -aUr -aUr -aUr -aUr -ydz -ydz -aCN -aCN -wcF -wcF -rmY -dSQ -fbL -qqw -qqw -qqw -qqw -uNR -gfp -gfp -gfp -uNR -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -cCk -iMD -uTU -gcU -qqw -qqw -qqw -qqw -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -npJ -esl -esl -esl -esl -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(53,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -wdV -bXs -nAp -uTy -bXs -lif -oJQ -bXs -xEi -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -uST -wyL -njK -njK -vFV -wox -wox -vdO -kXc -njK -vuG -qfi -elO -jTc -vFV -onS -xPz -vFV -oXq -xPz -aTI -kCq -vFV -fBu -vFV -vFV -qqw -qqw -qqw -qqw -qqw -qqw -mpi -aCN -pfY -lta -lNV -aHT -aCN -wvR -dvI -rAW -aJP -icN -xvK -ooJ -uJt -ooJ -hUy -ydO -aCN -ydz -rFa -rFa -rFa -ydz -ydz -ydz -ydz -ydz -ydz -ydz -wjq -wjq -wjq -act -aCN -wcF -wcF -rmY -qxN -oGx -qqw -qqw -qqw -qqw -lBv -uNR -vCc -uNR -lBv -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -pAW -pAW -dXC -gcU -qqw -qqw -qqw -qqw -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -esl -rGj -esl -esl -esl -esl -esl -esl -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -esl -esl -esl -esl -esl -esl -esl -esl -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(54,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -bXs -wdV -bXs -bXs -uTy -bXs -lif -bXs -jlO -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -cRp -xww -xww -njK -vFV -feU -wox -vdO -vFV -xDk -vFV -vFV -vFV -vFV -vFV -irY -xPz -vFV -sLX -xPz -cBk -hEl -vFV -ybg -tsd -qqw -qqw -qqw -qqw -qqw -qqw -mpi -mpi -aCN -jtc -lta -vgI -aHT -aCN -wvR -jWB -hUy -sue -icN -xvK -ooJ -xnm -ooJ -iYv -ydO -aCN -ydz -ydz -ydz -pod -ydz -kmR -bmc -bmc -kmR -bmc -bmc -bmc -bmc -kmR -dxA -aCN -wcF -wcF -rmY -qxN -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -dXC -pAW -him -gcU -xDL -xDL -xDL -qqw -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -esl -esl -esl -esl -esl -jCP -jCP -jCP -esl -esl -esl -esl -esl -rGj -rGj -rGj -rGj -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(55,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -wdV -gko -bXs -uTy -bXs -bXs -bld -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -uOM -wkj -xww -njK -vFV -wox -wox -vyP -vyP -vyP -vyP -iwd -vyP -vyP -vyP -xPz -xPz -kxy -wGw -xPz -xPz -djR -vFV -ybg -bNO -qqw -qqw -qqw -qqw -qqw -qqw -mpi -aCN -aCN -wvR -eVX -mEN -hyL -dZd -eVX -wAo -hUy -xRk -dvI -cHm -ygv -ajU -pfh -iYv -ydO -aCN -dxA -kmR -bmc -bmc -bmc -kmR -mxj -uxm -wnB -dOs -aPD -tWr -sjG -wnB -dxA -aCN -wcF -wcF -rmY -qxN -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -lpb -pAW -dXC -gcU -urE -urE -xDL -qqw -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -esl -esl -esl -esl -esl -esl -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -jCP -jCP -jCP -jCP -jCP -"} -(56,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -wdV -bXs -bXs -bXs -nAp -ijC -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -mFn -xww -xww -njK -vFV -wox -wox -vyP -vyP -aQL -vyP -vyP -vyP -vyP -aQL -bmA -lTs -vFV -lHd -siG -siG -isc -vFV -ybg -tsd -qqw -qqw -qqw -qqw -qqw -qqw -mpi -aCN -wvR -wvR -nnB -gIB -eSn -vAP -dZd -wAo -hUy -xvK -tLe -xvK -ygv -dEv -dvp -hUy -ydO -aCN -dxA -wnB -rqU -oDe -afZ -wnB -lCP -lCP -aMC -cwI -cwI -cwI -gqM -wnB -dxA -aCN -wcF -bic -xde -meq -qxN -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oRK -urM -pAW -urM -eLe -urE -urE -xDL -qqw -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -esl -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -jCP -jCP -"} -(57,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -wdV -bXs -bXs -bXs -gTE -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -ufN -njK -rDc -njK -vFV -uUT -wox -vFV -vFV -vFV -vFV -jUp -jUp -vFV -vFV -vFV -vFV -vFV -wJv -eqm -aUj -vFV -vFV -ybg -bNO -qqw -qqw -qqw -qqw -qqw -qqw -mpi -aCN -wvR -heX -mNk -wUf -aIR -heB -dZd -vWk -dvI -iYv -rAW -rAW -rAW -rAW -rAW -dvI -ydO -bdl -dxA -wnB -icE -lCP -lCP -xuD -lCP -lCP -wnB -rGX -aPD -hDd -aPD -wnB -dxA -aCN -wvR -wvR -gAg -nzO -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -urM -pAW -urM -gcU -urE -urE -xDL -qqw -xDL -fRw -fRw -htQ -htQ -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(58,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -wdV -lif -bXs -fnd -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -vFV -vFV -vFV -peE -siG -xyF -vFV -wox -wox -vFV -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -vFV -vFV -vFV -vFV -vFV -tPn -ybg -tsd -qqw -qqw -qqw -qqw -qqw -qqw -eVX -dZd -dZd -dZd -uda -teO -teO -haL -dZd -wvR -sIe -sIe -sIe -jbv -sIe -sIe -sIe -sIe -ydO -aCN -dxA -wnB -uwk -uwk -gzx -wnB -lCP -mXW -kmR -bmc -bmc -bmc -bmc -kmR -dxA -aCN -wvR -wvR -wvR -aYz -qxN -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -kqA -kqA -mws -gcU -urE -urE -xDL -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(59,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -wdV -wdV -lif -lif -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -yex -xPz -umU -siG -siG -xyF -vFV -kVZ -wox -jUp -ybg -mNM -uwC -uwC -uwC -uwC -uwC -quA -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -bNO -qqw -qqw -qqw -qqw -qqw -qqw -dZd -bsq -teO -dZd -emS -awD -awD -kRE -acA -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -dxA -kJB -uwk -sDG -tYZ -wnB -nSX -lCP -ugq -tEi -wnB -xfl -uWg -wnB -dxA -aCN -qQz -aCN -wvR -nzO -qxN -fbL -oGx -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -fvf -kqA -kqA -kqA -gcU -urE -urE -xDL -qqw -xDL -jon -jon -jon -jon -jon -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -jCP -jCP -jCP -jCP -jCP -"} -(60,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -wdV -wdV -lif -wdV -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tRx -szB -oZR -vFV -tmk -goV -bCV -vFV -wox -dUG -vFV -hYf -eRY -qqw -qqw -qqw -qqw -qqw -bpv -uwC -uwC -uwC -uwC -uwC -uwC -quA -ybg -tsd -qqw -qqw -qqw -qqw -qqw -qqw -dZd -fWf -teO -aBw -awD -awD -awD -oYu -dZd -eQe -eQe -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -dxA -wnB -uwk -uwk -aEU -wnB -ibE -lCP -ugq -tEi -lRy -vmg -uWg -ebW -aCN -aCN -wvR -wvR -wvR -nzO -qxN -qwa -ndi -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -kqA -kqA -kqA -gcU -urE -urE -xDL -qqw -xDL -jon -jon -jon -jon -jon -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -jCP -jCP -jCP -jCP -jCP -"} -(61,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -prU -wdV -bXs -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vfi -vFV -vFV -vFV -vFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -vFV -fBu -vFV -vFV -qqw -qqw -qqw -qqw -qqw -eVX -dZd -dZd -dZd -weF -awD -awD -fHU -dZd -eQe -eQe -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -dxA -wnB -cGL -pBo -pwX -wnB -eDs -jDn -mqm -mqm -xec -vta -dSD -ebW -dxA -aCN -qQz -wvR -wvR -nzO -qxN -qxN -jbx -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -kqA -kqA -kqA -gcU -urE -urE -xDL -qqw -xDL -rEu -jon -rEu -jon -rEu -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -jCP -jCP -jCP -jCP -jCP -"} -(62,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -wdV -bXs -prU -lif -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -ssC -ssC -ssC -ssC -ssC -ssC -ssC -ssC -ssC -ssC -ycC -llW -gWF -vFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -fBu -fBu -fBu -vFV -dxA -dxA -dxA -dxA -dxA -mpi -aCN -wvR -dZd -iNR -onA -awD -elL -dZd -iIc -eQe -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -dxA -kmR -gcr -bmc -bmc -kmR -bmc -arD -bmc -bmc -kmR -kmR -yeS -wnB -dxA -aCN -wvR -wvR -wvR -nzO -wdq -qxN -ndi -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -kqA -kqA -kqA -gcU -urE -urE -xDL -qqw -xDL -rEu -rEu -rEu -rEu -rEu -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -jCP -jCP -jCP -jCP -jCP -"} -(63,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -prU -wdV -wEg -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -xPz -lOD -efH -efH -vFV -efH -lOD -efH -vFV -efH -jFh -ncE -xPz -vFV -vFV -qDJ -eOG -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -hLI -fBu -fBu -tRx -aCN -aCN -aCN -aCN -ygD -aCN -aCN -wvR -eVX -dZd -dZd -hyL -dZd -eVX -iIc -iIc -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wnB -pEH -lCP -wnB -dxA -aCN -wvR -wvR -wvR -nzO -fbL -qxN -fbL -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -iXi -kqA -aBS -gcU -urE -urE -xDL -qqw -xDL -rEu -rEu -rEu -rEu -rEu -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -"} -(64,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -prU -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -xPz -jkt -llW -llW -llW -dST -jkt -llW -llW -llW -oMB -xPz -xPz -vFV -wox -rlr -gjb -eOG -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -vFV -fBu -fBu -vFV -ejJ -ejJ -ejJ -ejJ -ejJ -ejJ -ejJ -wvR -sIe -sIe -sIe -sIe -sIe -sIe -eQe -iIc -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -fbL -odO -wcF -kmR -cLh -cLh -kmR -dxA -aCN -aCN -aCN -aCN -aYz -pKh -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -hDi -gcU -gcU -gcU -hDi -urE -urE -xDL -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -rGj -rGj -jCP -jCP -jCP -"} -(65,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -lif -xDL -bXs -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -plV -xPz -jkt -llW -llW -llW -dST -jkt -llW -llW -llW -oMB -xPz -xPz -kxy -wox -rlr -rlr -kdB -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -fBu -fBu -tRx -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -vzb -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -vzb -aCN -wcF -wcF -wcF -wcF -wcF -wcF -qqw -qqw -qqw -qqw -mjl -qxN -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -urE -urE -urE -xDL -rGj -rGj -rGj -jCP -jCP -"} -(66,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -xPz -jkt -llW -lZH -llW -dST -jkt -llW -lZH -llW -oMB -xPz -uFf -vFV -wox -rlr -rlr -kdB -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oWe -iim -fBu -vFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -vzb -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -vzb -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -mjl -mUl -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -urE -urE -urE -xDL -rGj -rGj -rGj -jCP -jCP -"} -(67,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -plV -xPz -jkt -llW -llW -llW -dST -jkt -llW -llW -llW -oMB -xPz -xPz -kxy -wox -rlr -rlr -kdB -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -fBu -fBu -tRx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -vzb -aCN -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -xLU -xLU -xLU -xLU -xLU -xLU -xLU -xLU -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -mjl -qxN -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -urE -urE -urE -xDL -rGj -rGj -rGj -jCP -jCP -"} -(68,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -awG -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -xPz -jkt -llW -llW -llW -dST -jkt -llW -llW -llW -oMB -xPz -xPz -vFV -wox -rlr -pkE -sLw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -vFV -fBu -fBu -vFV -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -aCN -vzb -aCN -qqw -qqw -dVd -qqw -qqw -qqw -aCN -xLU -xLU -uPg -xLU -xLU -xLU -xLU -rSm -pSa -pSa -pSa -pSa -rSm -ydO -aCN -aCN -xLU -eVI -eVI -xLU -xLU -xLU -xLU -qqw -mjl -qxN -qxN -oGx -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -qqw -xDL -xDL -xDL -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -rGj -rGj -jCP -jCP -jCP -"} -(69,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -xPz -uCD -ncE -ncE -vFV -ncE -uCD -ncE -vFV -ncE -fwx -efH -xPz -vFV -vFV -uwC -sLw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -hLI -fBu -fBu -tRx -ejJ -ejJ -ejJ -ejJ -ejJ -rrI -mwG -mwG -mwG -mwG -mwG -lcU -mwG -mwG -mwG -rrI -qqw -qqw -qqw -rSm -pSa -nzk -pSa -rSm -nzk -pSa -rSm -pSa -nkp -xTr -xTr -xTr -pSa -ydO -aCN -aCN -xLU -xLU -xLU -xLU -xLU -xLU -xLU -qqw -mjl -fbL -qxN -fbL -aCN -qqw -qqw -qqw -qqw -xDL -mZW -xDL -qqw -xDL -rsB -xDL -qqw -xDL -rsB -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -fRw -htQ -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -"} -(70,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -ssC -ssC -ssC -ssC -ssC -ssC -ssC -ssC -ssC -ssC -ycC -llW -gWF -vFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -fBu -fBu -fBu -vFV -dxA -dxA -dxA -dxA -rrI -rrI -iFi -iFi -iFi -iFi -iFi -iFi -iFi -iFi -iFi -mwG -vHv -vHv -vHv -pSa -uoY -uoY -dQn -pSa -kIw -hKw -pSa -sKa -hJB -xTr -xTr -xTr -pSa -ydO -aCN -aCN -xLU -sIe -xLU -sIe -xLU -sIe -xLU -qqw -mjl -wdq -qxN -qxN -oGx -qqw -qqw -qqw -qqw -xDL -xDL -xDL -qqw -xDL -xDL -xDL -qqw -xDL -mZW -rsB -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(71,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -vFV -vFV -vFV -vFV -vFV -vFV -xPz -vFV -vFV -vFV -gSj -vFV -vFV -vFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -euy -vFV -vFV -fBu -vFV -vFV -qqw -qqw -qqw -qqw -mwG -hdt -iFi -cNZ -kgX -kgX -kgX -kgX -kgX -bjY -iFi -mwG -aCN -aCN -aCN -pSa -gDg -uoY -vXX -cKB -mMc -uoY -jUD -uoY -hJB -xTr -xTr -xTr -pSa -ydO -aCN -aCN -sIe -sIe -sIe -sIe -sIe -sIe -sIe -qqw -mjl -qxN -qxN -qxN -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -fRw -htQ -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -"} -(72,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -euy -aJh -wox -wox -kxy -xPz -xPz -xPz -xPz -xPz -xPz -vFV -fKk -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -eRY -aMR -ybg -ybg -ybg -tsd -qqw -qqw -qqw -qqw -qqw -mwG -iFi -dOk -nmL -xcb -xcb -xcb -xcb -xcb -toY -iFi -xpd -aCN -aCN -aCN -pSa -afj -qOG -qOG -pSa -pSa -pSa -pSa -uoY -hJB -xTr -xTr -xTr -rSm -pSa -nzk -pSa -pSa -rSm -sIe -eqM -sIe -sIe -eqM -qqw -mjl -qxN -qwa -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(73,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mjl -rlr -wox -kKa -vFV -kAi -kAi -kAi -kAi -mMB -xPz -vFV -fKk -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -sEn -sEn -sEn -txc -trF -ybg -tsd -ybg -bNO -qqw -qqw -qqw -qqw -qqw -xpd -iFi -axy -xcb -xcb -xcb -xcb -xcb -xcb -toY -ghO -mwG -aCN -aCN -aCN -pSa -afj -njt -tdB -rSm -sCN -aei -rSm -kIw -hJB -xTr -xTr -xTr -pSa -cAR -rXb -kCd -qOG -pSa -iJu -iJu -iJu -iJu -act -qqw -mjl -qxN -fbL -oGx -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -qqw -xDL -fRw -fRw -htQ -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -"} -(74,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mjl -rlr -wox -pBS -vFV -ovf -llW -llW -llW -dST -xPz -vFV -fKk -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -jOn -jZE -jZE -ybg -jZE -ybg -tsd -ybg -tsd -qqw -qqw -qqw -qqw -qqw -mwG -iFi -msX -uDz -xcb -xcb -xcb -xcb -xcb -toY -iFi -xpd -bdl -bdl -bdl -rSm -pSa -fnK -pSa -rSm -ewN -aei -lXo -uoY -hJB -xTr -xTr -xTr -pSa -qpX -aei -qOG -qOG -pSa -act -act -act -act -act -euy -iBQ -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -hDi -gcU -okj -hDi -jon -jon -kJT -jon -htQ -xDL -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(75,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mjl -rlr -wox -kKa -vFV -llW -llW -llW -llW -dST -xPz -vFV -glB -jZE -jZE -jZE -jZE -jZE -jZE -jZE -jZE -jZE -eNh -mbn -mbn -mbn -mbn -mbn -mbn -ybg -bNO -qqw -qqw -qqw -qqw -qqw -mwG -iFi -iFi -urm -bJi -bJi -bJi -bJi -bJi -wgs -iFi -mwG -aCN -aCN -aCN -aCN -aCN -aCN -wvR -bRT -xje -aei -pSa -uoY -eSM -oEI -uNF -jqM -pSa -ewN -aei -qOG -qOG -pSa -acw -wcF -act -wcF -act -mjl -qxN -qxN -fbL -qqw -qqw -qqw -xDL -xDL -xDL -xDL -mnv -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -jam -pAW -gcU -jon -jon -jon -jon -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -"} -(76,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bpv -quA -wox -evd -tRx -llW -llW -llW -llW -dST -xPz -vFV -uwC -rMO -rMO -rMO -auy -auy -tRx -auy -auy -auy -auy -mbn -tOw -xtN -bcX -tOw -mbn -ybg -tsd -qqw -qqw -qqw -qqw -qqw -rrI -rrI -ghO -iFi -iFi -iFi -iFi -iFi -iFi -iFi -iFi -mwG -aCN -wvR -wvR -ydO -ydO -ydO -gAg -rSm -pSa -pSa -pSa -tos -tos -tos -kup -tos -pFc -aei -sCN -ePF -rgi -pSa -wcF -wcF -wcF -wcF -wcF -mjl -qxN -oGx -qqw -qqw -qqw -qqw -xDL -mnv -mnv -rsB -mnv -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -dRf -pAW -hDi -gcU -okj -gcU -hDi -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(77,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xkk -uQd -xkk -xkk -uQd -uQd -llW -dST -xPz -vFV -qqw -eRY -srt -srt -auy -tfA -jvw -llW -llW -llW -llW -mbn -xlw -yiC -yiC -xvK -mbn -ybg -bNO -qqw -qqw -qqw -qqw -qqw -qnM -rrI -mwG -lBE -mwG -fYO -mwG -tki -mwG -mwG -mwG -rrI -aCN -wvR -wvR -wvR -ydO -vfa -wvR -wvR -wvR -rSm -pSa -bby -pSa -qzY -qzY -qzY -rSm -pSa -pSa -fnK -pSa -rSm -wcF -wcF -wcF -wcF -wcF -mjl -qxN -fbL -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -rsB -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -kxE -pAW -gcU -teW -xyA -fnU -gcU -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -rGj -rGj -jCP -jCP -jCP -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(78,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -xkk -laX -dht -hPp -vHk -xkk -xkk -xPz -xPz -vFV -qqw -eRY -srt -srt -auy -ccN -wao -llW -llW -llW -llW -mbn -wbi -yiC -yiC -xvK -mbn -ybg -tsd -qqw -qqw -qqw -qqw -qqw -gfN -vGb -hus -hus -gfN -qVX -eVP -awA -awA -awA -awA -awA -aCN -wvR -wvR -ydO -ydO -ydO -aCN -aCN -acw -pSa -hzq -oZT -oZT -qzY -xTr -qzY -gBX -bdl -bdl -bdl -bdl -bdl -iWN -qqw -qqw -qqw -euy -iBQ -qxN -oGx -qqw -xDL -xDL -rEu -rEu -rEu -rEu -xDL -mnv -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -gcU -ayF -gcU -pAW -eAI -pAW -gcU -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(79,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -ixh -sVQ -hjk -awl -pmz -kdD -uQd -vFV -vFV -vFV -qqw -eRY -srt -srt -vFV -kJP -wao -llW -vFV -llW -llW -mbn -gwY -xvK -xvK -xvK -mbn -sIp -rTk -rTk -aCN -aCN -aCN -qqw -gfN -xxR -xiP -hus -gfN -qVX -eVP -awA -awA -awA -awA -awA -aCN -wvR -wvR -wvR -ydO -ydO -aCN -aCN -acw -pSa -kuJ -oZT -uyG -qzY -qzY -qzY -vzb -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -mjl -qxN -qxN -fbL -qqw -xDL -rEu -rEu -rEu -rEu -rEu -xDL -mnv -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -gif -pAW -gcU -rKK -pAW -qvS -gcU -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(80,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xkk -hbj -mWT -bWx -lBY -lhh -ixZ -xkk -qqw -qqw -qqw -qqw -eRY -srt -srt -auy -iDQ -fnq -llW -llW -llW -llW -mbn -mbn -mbn -oda -rxp -mbn -sIp -sIp -rTk -dxA -dxA -dxA -kvS -kvS -obb -hus -hus -gfN -qVX -dUL -awA -awA -awA -awA -awA -aCN -wvR -wvR -ydO -ydO -ydO -aCN -aCN -wvR -pSa -iKe -oZT -qHV -pSa -ydO -aCN -vzb -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -mjl -qxN -oGx -qqw -qqw -xDL -rEu -xDL -xDL -rEu -rEu -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -gcU -xai -pAW -gcU -pAW -pAW -qOT -gcU -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(81,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -tvc -tvc -koX -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -uTA -xya -msB -eUw -pmz -lkj -xkk -rTk -rTk -rTk -rTk -rTk -rTk -rTk -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vFV -lBv -mbn -ogl -mbn -mbn -caY -sIp -rTk -aCN -aCN -aCN -gfN -jDN -rUu -rUu -rUu -gfN -qVX -eVP -awA -awA -awA -awA -awA -aCN -wvR -wvR -wvR -ydO -ydO -aCN -aCN -wvR -rSm -pSa -fnK -pSa -rSm -ydO -aCN -vzb -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -mjl -qxN -fbL -qqw -qqw -xDL -rEu -rEu -xDL -xDL -rEu -xDL -mZW -xDL -qqw -qqw -qqw -qqw -qqw -qqw -xDL -pha -xDL -qqw -qqw -qqw -qqw -gcU -mvc -pAW -qWc -pAW -pAW -oxu -gcU -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(82,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -koX -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xkk -kcx -hjk -qQN -oYw -aFF -hDX -uQd -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rTk -roK -rTk -rTk -qqw -qqw -qqw -ofr -rUu -rUu -rUu -rUu -svq -qVX -eVP -awA -awA -awA -awA -awA -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -wvR -wvR -wvR -xLU -ydO -ydO -ydO -vzb -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -mjl -qxN -oGx -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -hDi -okj -gcU -gcU -gcU -gcU -gcU -hDi -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(83,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -koX -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -xkk -ary -xHe -xkk -bFC -xkk -xkk -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gfN -eCq -jWE -cSb -cQr -gfN -qVX -rxS -kch -awA -awA -awA -awA -qqw -aCN -xLU -xLU -xLU -xLU -xLU -aCN -aCN -wvR -lRz -aiY -mFh -aiY -sto -ydO -uPg -uPg -xLU -uPg -xLU -qqw -qqw -qqw -qqw -qqw -mjl -qxN -fbL -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -htQ -htQ -htQ -htQ -xDL -rEu -rEu -rEu -rEu -rEu -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -elF -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(84,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -koX -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xkk -uQd -uQd -xkk -xkk -uQd -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -kvS -old -old -kvS -old -kvS -qVX -njo -kch -kch -kch -kch -kch -eOG -aCN -xLU -xLU -xLU -xLU -xLU -aCN -aCN -wvR -dhF -qZV -qZV -qZV -aTf -ydO -xLU -xLU -xLU -xLU -xLU -aCN -aCN -aCN -xLU -xLU -phY -qxN -qxN -oGx -qqw -xDL -jon -jon -jon -jon -xDL -xDL -htQ -htQ -htQ -xDL -rEu -rEu -rEu -rEu -rEu -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(85,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -koX -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gfN -qkR -hus -wok -qVX -qVX -qVX -qVX -qVX -qVX -qVX -kdB -aCN -sIe -xLU -sIe -xLU -sIe -aCN -aCN -wvR -dhF -qZV -qZV -qZV -aTf -ydO -pgK -pgK -lUI -pgK -pgK -aCN -aCN -aCN -xLU -xLU -xWm -aqt -qxN -fbL -qqw -xDL -jon -jon -jon -jon -xDL -htQ -xDL -xDL -htQ -xDL -rEu -jmK -rEu -jmK -rEu -xDL -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(86,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -koX -rGj -rGj -rGj -rGj -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gfN -bnl -hus -kvS -old -kvS -old -old -old -nVH -old -kvS -aCN -sIe -sIe -sIe -sIe -sIe -aCN -aCN -wvR -dhF -qZV -qZV -qZV -aTf -ydO -pgK -vQT -eMG -lGH -pgK -aWR -ihX -mrZ -eOQ -hzg -xLU -jRc -qxN -oGx -qqw -xDL -rEu -rEu -rEu -rEu -xDL -htQ -rst -xDL -htQ -xDL -jmK -jmK -jmK -rEu -rEu -xDL -qqw -qqw -qqw -qqw -qqw -qqw -xDL -jon -jon -jon -jon -jon -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(87,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -koX -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gfN -kwb -hus -hus -aYX -gfN -kpt -kpt -rUu -rUu -rUu -gfN -aCN -sIe -sIe -sIe -sIe -sIe -aCN -aCN -wvR -dhF -qZV -qZV -qZV -aTf -ydO -pgK -qTS -pXu -pXu -pgK -qxN -qxN -qxN -qxN -iMX -gNu -fbL -qxN -fbL -qqw -xDL -rEu -pdQ -rEu -rEu -xDL -htQ -htQ -rst -htQ -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -xDL -jon -jon -jon -jon -jon -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(88,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -koX -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gfN -fCr -hus -hus -rDz -gfN -rUu -rUu -rUu -rUu -rUu -jwS -mvj -mrZ -oLl -mrZ -mrZ -mrZ -mrZ -aZU -nLA -dhF -qZV -qZV -qZV -aTf -ydO -pgK -uLI -uLI -uLI -pgK -qxN -fbL -fbL -qxN -qxN -qxN -qxN -qwa -oGx -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -htQ -htQ -htQ -rst -xDL -qqw -qqw -qqw -qqw -qqw -qqw -xDL -rEu -rEu -rEu -rEu -rEu -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(89,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -koX -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -qaV -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -hZX -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gfN -vYV -hus -uYT -vxp -gfN -kPS -suK -kPS -cQr -kPS -gfN -mjl -qxN -qxN -qxN -qxN -qxN -qxN -qxN -qxN -dhF -qZV -qZV -qZV -aTf -ydO -pgK -akk -jyB -fVV -pgK -qxN -fbL -fbL -fbL -oGx -oGx -fbL -oGx -fbL -qqw -xDL -htQ -htQ -htQ -htQ -xDL -xDL -xDL -xDL -xDL -xDL -xDL -htQ -htQ -rst -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -xDL -rEu -rEu -rEu -rEu -rEu -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(90,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -koX -npJ -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mMv -qqw -qqw -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gfN -tXg -hus -hus -bAk -kvS -old -old -old -old -old -kvS -mjl -qxN -fbL -fbL -oGx -fbL -oGx -fbL -qxN -dhF -qZV -qZV -qZV -aTf -ydO -pgK -pgK -lUI -pgK -pgK -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -htQ -rst -wKF -htQ -xDL -rEu -rEu -rEu -rEu -rEu -xDL -htQ -htQ -htQ -rst -xDL -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(91,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -iXr -koX -tvc -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -kvS -old -old -old -old -kvS -rEa -fbL -cwF -qDJ -qDJ -qDJ -iBQ -qxN -fbL -vvy -qqw -qqw -sGL -fbL -qxN -kPP -ekN -mFh -ekN -nIW -rpQ -dns -qxN -qxN -qxN -qxN -qxN -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -rst -xDL -xDL -htQ -xDL -rEu -jmK -rEu -rEu -rEu -xDL -htQ -htQ -htQ -rst -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(92,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -iXr -aDu -aDu -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -iTU -frM -qxN -qxN -qxN -qxN -qxN -qxN -qxN -qxN -oGx -vvy -qqw -qqw -qqw -oGx -qxN -lIh -wvR -sIe -ydO -htm -qxN -qxN -qxN -oGx -fbL -oGx -fbL -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -rst -htQ -xDL -xDL -xDL -jmK -rEu -rEu -xDL -htQ -htQ -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(93,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -rGj -rGj -rGj -rGj -qqw -psp -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uNR -obJ -fbL -oGx -fbL -oGx -fbL -oGx -fbL -oGx -aCN -qqw -qqw -qqw -qqw -fbL -qxN -lIh -wvR -sIe -ydO -htm -qxN -fbL -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -rst -xDL -htQ -htQ -xDL -rEu -rEu -rEu -rEu -rEu -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(94,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -mMV -iXr -aDu -aDu -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oGx -qxN -mVa -nLA -dfi -rpQ -wLa -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -htQ -htQ -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(95,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -npJ -aDu -aDu -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -psp -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -fbL -qxN -qxN -qxN -qxN -qxN -qxN -qxN -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -jmK -jmK -jmK -rEu -xDL -xDL -xDL -htQ -htQ -htQ -rst -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(96,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -mMV -aDu -aDu -aDu -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -xDL -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -oGx -fbL -oGx -fbL -oGx -fbL -oGx -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -rEu -jmK -xDL -xDL -htQ -htQ -rst -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(97,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -aDu -aDu -aDu -aDu -rGj -rGj -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -xDL -fRw -fRw -fRw -fRw -xDL -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -rEu -xDL -xDL -pdQ -htQ -htQ -htQ -rst -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(98,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -aDu -aDu -aDu -aDu -rGj -rGj -rGj -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -xDL -xDL -xDL -qqw -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -xDL -fRw -fRw -fRw -fRw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -fRw -fRw -fRw -fRw -fRw -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -jmK -xDL -xDL -htQ -htQ -htQ -rst -rst -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(99,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -aDu -aDu -aDu -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -qaV -xDL -xDL -qaV -xDL -qqw -qqw -xDL -qaV -xDL -qqw -qqw -xDL -fRw -xDL -xDL -xDL -xDL -xDL -xDL -fRw -fRw -fRw -fRw -xDL -rEu -rEu -rEu -rEu -rEu -xDL -fRw -fRw -fRw -fRw -fRw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -rEu -rEu -rEu -rEu -rEu -xDL -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -jmK -xDL -xDL -htQ -htQ -htQ -htQ -rst -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(100,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -aDu -aDu -aDu -aDu -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -xDL -xDL -xDL -qqw -qqw -xDL -fRw -xDL -xDL -fRw -fRw -xDL -xDL -fRw -fRw -fRw -fRw -xDL -rEu -rEu -xDL -xDL -rEu -xDL -fRw -fRw -fRw -fRw -fRw -xDL -xDL -xDL -fRw -fRw -fRw -fRw -fRw -rEu -rEu -rEu -rEu -xDL -xDL -xDL -rEu -rEu -rEu -rEu -rEu -xDL -qqw -qqw -qqw -qqw -xDL -htQ -htQ -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(101,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -aDu -aDu -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -fRw -fRw -fRw -fRw -xDL -rEu -xDL -xDL -rEu -rEu -xDL -xDL -fRw -fRw -xDL -fRw -xDL -xDL -xDL -fRw -fRw -fRw -fRw -fRw -rEu -rEu -rEu -rEu -xDL -rEu -rEu -rEu -rEu -xDL -rEu -rEu -xDL -qqw -qqw -qqw -qqw -xDL -htQ -htQ -xDL -xDL -xDL -qqw -qqw -qqw -qqw -xDL -rEu -rEu -rEu -rEu -rEu -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(102,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -aDu -aDu -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -rEu -rEu -wKF -rEu -rEu -xDL -xDL -fRw -fRw -fRw -fRw -xDL -xDL -xDL -fRw -fRw -fRw -fRw -fRw -rEu -rEu -rEu -rEu -xDL -rEu -wKF -rEu -rEu -rEu -rEu -rEu -xDL -qqw -qqw -qqw -qqw -xDL -htQ -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -xDL -rEu -jmK -rEu -rEu -rEu -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(103,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -aDu -aDu -aDu -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -rEu -rEu -rEu -rEu -rEu -xDL -fRw -fRw -fRw -fRw -fRw -xDL -xDL -xDL -xDL -xDL -xDL -rEu -rEu -xDL -rEu -xDL -xDL -xDL -xDL -bFJ -xDL -fRw -fRw -rEu -rEu -rEu -rEu -xDL -rEu -rEu -rEu -rEu -rEu -rEu -rEu -xDL -qqw -qqw -qqw -qqw -xDL -htQ -xDL -htQ -htQ -xDL -qqw -qqw -qqw -qqw -xDL -rEu -rEu -rEu -jmK -rEu -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(104,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -aDu -aDu -aDu -esl -jyw -rGj -sEI -sEI -sEI -sEI -sEI -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -rEu -xDL -xDL -xDL -rEu -wKF -fRw -xDL -xDL -xDL -fRw -jon -jon -jon -xDL -rEu -rEu -rEu -rEu -rEu -rEu -xDL -xDL -xDL -xDL -fRw -fRw -fRw -fRw -rEu -rEu -rEu -rEu -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -xDL -jmK -rEu -jmK -jmK -jmK -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(105,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -aDu -aDu -aDu -aDu -sLN -sLN -iLF -iLF -iLF -iLF -iLF -koX -sEI -sEI -sEI -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -rEu -rEu -xDL -xDL -rEu -xDL -xDL -xDL -xDL -xDL -fRw -jon -jon -jon -xDL -rEu -rEu -rEu -rEu -rEu -rEu -xDL -xDL -xDL -xDL -fRw -fRw -fRw -fRw -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(106,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -aDu -aDu -aDu -jCP -jCP -sEI -sEI -sEI -sEI -sEI -iLF -iLF -iLF -iLF -iLF -sEI -sEI -sEI -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -rEu -rEu -rEu -rEu -rEu -xDL -fRw -fRw -xDL -xDL -fRw -jon -jon -jon -xDL -rEu -rEu -rEu -rEu -rEu -rEu -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(107,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -aDu -aDu -aDu -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sEI -sEI -sEI -koX -iLF -iLF -iLF -iLF -sLN -sLN -iDN -nbZ -nbZ -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -fRw -fRw -fRw -fRw -jon -jon -jon -xDL -rEu -rEu -rEu -rEu -rEu -rEu -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -fRw -fRw -fRw -fRw -htQ -htQ -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(108,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sEI -jCP -jCP -sEI -sEI -iDN -sLN -sLN -iDN -nbZ -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -fMD -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -fRw -xDL -xDL -fRw -xDL -xDL -xDL -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(109,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -psp -psp -psp -psp -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -iDN -sLN -iDN -nbZ -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -fRw -fRw -fRw -xDL -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -bFJ -xDL -xDL -xDL -xDL -xDL -xDL -jon -jon -jon -jon -jon -xDL -xDL -fRw -fRw -fRw -fRw -xDL -xDL -xDL -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(110,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -nbZ -nbZ -iDN -iDN -sLN -sLN -nbZ -nbZ -sLN -sLN -iDN -nbZ -nbZ -rGj -rGj -rGj -qqw -qqw -qqw -psp -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -fRw -fRw -fRw -xDL -qqw -qqw -qqw -qqw -htQ -htQ -htQ -htQ -xDL -htQ -htQ -htQ -htQ -xDL -fRw -fRw -fRw -fRw -htQ -htQ -htQ -htQ -xDL -xDL -jon -jon -jon -jon -jon -xDL -fRw -fRw -fRw -fRw -fRw -htQ -xDL -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(111,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -cZM -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -nbZ -iDN -sLN -sLN -sLN -nbZ -sLN -nbZ -nbZ -sLN -iDN -nbZ -nbZ -rGj -rGj -rGj -qqw -qqw -psp -psp -psp -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -fRw -fRw -fRw -xDL -qqw -qqw -qqw -qqw -htQ -xDL -xDL -htQ -xDL -htQ -htQ -htQ -htQ -wKF -fRw -xDL -xDL -xDL -htQ -htQ -htQ -htQ -xDL -xDL -jon -jon -jon -jon -jon -xDL -fRw -fRw -fRw -fRw -fRw -htQ -htQ -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(112,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -jyY -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -nbZ -iDN -sLN -sLN -bWG -sLN -sLN -sLN -nbZ -sLN -iDN -nbZ -rGj -rGj -rGj -rGj -qqw -qqw -qqw -psp -psp -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -xDL -xDL -fRw -xDL -qqw -qqw -qqw -qqw -htQ -xDL -xDL -htQ -xDL -htQ -htQ -htQ -htQ -xDL -fRw -fRw -xDL -xDL -htQ -htQ -htQ -htQ -xDL -xDL -jon -jon -jon -jon -jon -wKF -fRw -fRw -fRw -fRw -fRw -htQ -htQ -htQ -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(113,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -xYD -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -iDN -sLN -sLN -sLN -sLN -sLN -sLN -sLN -nbZ -sLN -iDN -nbZ -rGj -rGj -rGj -rGj -qqw -qqw -qqw -psp -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -fRw -fRw -fRw -xDL -qqw -qqw -qqw -qqw -htQ -xDL -xDL -htQ -wKF -htQ -htQ -xDL -htQ -xDL -xDL -fRw -xDL -xDL -htQ -htQ -htQ -htQ -xDL -xDL -htQ -htQ -htQ -htQ -htQ -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(114,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -xYD -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -iDN -sLN -sLN -sLN -nbZ -sLN -sLN -sLN -jyw -sLN -iDN -nbZ -nbZ -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -htQ -htQ -htQ -htQ -xDL -htQ -htQ -htQ -htQ -xDL -xDL -fRw -fRw -fRw -htQ -htQ -htQ -htQ -xDL -xDL -htQ -htQ -htQ -htQ -htQ -xDL -qqw -xDL -jon -jon -jon -jon -jon -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(115,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -cZM -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -iDN -sLN -sLN -nbZ -nbZ -nbZ -sLN -sLN -sLN -sLN -iDN -nbZ -nbZ -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -fRw -fRw -fRw -fRw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -rEu -xDL -xDL -xDL -rEu -xDL -xDL -xDL -xDL -htQ -htQ -htQ -htQ -htQ -xDL -qqw -xDL -jon -xDL -xDL -xDL -jon -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(116,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -iDN -iDN -sLN -sLN -sLN -bOg -nbZ -iDN -iDN -iDN -iDN -nbZ -kFp -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -fRw -fRw -fRw -fRw -xDL -jon -jon -jon -jon -jon -xDL -rEu -xDL -xDL -xDL -rEu -xDL -xDL -xDL -xDL -htQ -htQ -htQ -htQ -xDL -xDL -qqw -xDL -jon -jon -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(117,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -iDN -iDN -sLN -sLN -nbZ -rYx -nbZ -nbZ -iDN -iDN -nbZ -nbZ -nbZ -nbZ -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -fRw -fRw -fRw -fRw -xDL -jon -xDL -jon -jon -jon -xDL -rEu -rEu -rEu -rEu -rEu -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -xDL -jon -jon -jon -jon -jon -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(118,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -iDN -sLN -sLN -sLN -sLN -dOe -yaI -iDN -iDN -nbZ -nbZ -nbZ -nbZ -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -pzV -pzV -pzV -pzV -rGj -tRN -tRN -rGj -rGj -tRN -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(119,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -nbZ -iDN -sLN -sLN -sLN -sLN -bOg -iDN -iDN -nbZ -nbZ -nbZ -nbZ -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -tRN -rGj -rGj -rGj -tRN -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(120,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -nbZ -iDN -dOe -sLN -sLN -rYx -iDN -sLN -iDN -sLN -lyN -lyN -nbZ -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(121,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -nbZ -nbZ -iDN -xwf -bOg -sLN -iDN -iDN -iDN -iDN -nbZ -nbZ -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -ncL -ncL -ncL -ncL -ncL -ncL -ncL -ncL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(122,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -nbZ -nbZ -nbZ -iDN -iDN -iDN -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -ncL -jWl -jWl -jWl -jWl -jWl -jWl -ncL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(123,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -ncL -jWl -jWl -jWl -jWl -jWl -jWl -ncL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(124,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -ncL -jWl -jWl -jWl -jWl -jWl -jWl -ncL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(125,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -ncL -jWl -jWl -jWl -jWl -jWl -jWl -ncL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(126,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -ncL -jWl -jWl -jWl -jWl -jWl -jWl -ncL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(127,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -ncL -ncL -ncL -ncL -ncL -ncL -ncL -ncL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(128,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} - -(1,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(2,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(3,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(4,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(5,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(6,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(7,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -rGj -rGj -rGj -jCP -jCP -jCP -jCP -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(8,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -jCP -jCP -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -eDT -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(9,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -jCP -jCP -jCP -jCP -jCP -jCP -rGj -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -nhZ -jCP -nhZ -jCP -jCP -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -esl -esl -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(10,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -eDT -jCP -esl -jCP -esl -esl -esl -rGj -rGj -rGj -eDT -esl -esl -eDT -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -eDT -iXr -esl -eDT -iXr -iXr -esl -nOp -esl -nOp -jCP -jCP -jCP -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(11,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -eDT -esl -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -eDT -esl -esl -eDT -jCP -jCP -jCP -esl -iXr -esl -eDT -esl -iXr -koX -eDT -npJ -eDT -esl -esl -esl -jCP -jaf -jaf -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(12,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -eDT -esl -esl -esl -esl -eDT -esl -jCP -esl -eDT -iXr -esl -esl -eDT -koX -npJ -koX -koX -npJ -koX -esl -esl -jaf -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(13,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -eDT -esl -esl -esl -esl -eDT -iXr -esl -esl -koX -npJ -koX -esl -esl -esl -esl -npJ -koX -tYk -jaf -jaf -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(14,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -eDT -esl -npJ -npJ -esl -esl -esl -esl -eDT -esl -eDT -esl -jaf -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(15,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -eDT -esl -koX -esl -eDT -nOp -jCP -jCP -iXr -esl -nOp -jCP -jaf -jaf -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(16,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -eDT -esl -npJ -npJ -esl -iXr -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(17,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -iXr -npJ -npJ -esl -eDT -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(18,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -npJ -koX -esl -esl -iXr -jCP -jCP -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(19,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -koX -esl -esl -eDT -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(20,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -rGj -rGj -rGj -rGj -rGj -rGj -iXr -koX -esl -iXr -jCP -jCP -jCP -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(21,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -eDT -iXr -rGj -rGj -rGj -rGj -iXr -iXr -koX -esl -fNw -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(22,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -iXr -iXr -iXr -rGj -rGj -rGj -rGj -esl -eDT -npJ -iXr -esl -jCP -jCP -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(23,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -eDT -rGj -rGj -rGj -rGj -esl -iXr -esl -koX -esl -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -mHd -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(24,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -iXr -esl -rGj -rGj -rGj -rGj -eDT -esl -esl -npJ -eDT -jCP -jCP -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(25,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -iXr -esl -iXr -rGj -rGj -rGj -rGj -rGj -esl -esl -koX -esl -jCP -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(26,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -eDT -iXr -esl -rGj -rGj -rGj -rGj -rGj -iXr -hqJ -koX -esl -esl -jCP -jCP -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -ahS -nXA -eEa -ahS -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(27,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -eDT -iXr -rGj -rGj -rGj -rGj -rGj -eDT -esl -npJ -iXr -eDT -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jaf -nXA -eEa -nXA -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(28,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -iXr -esl -rGj -rGj -rGj -rGj -rGj -iXr -koX -npJ -iXr -esl -jCP -jCP -sNy -jaf -sNy -jaf -sNy -jaf -sNy -sNy -eEa -eEa -oqz -nXA -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(29,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -eDT -iXr -rGj -rGj -rGj -rGj -iXr -npJ -esl -esl -esl -jCP -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -jaf -ahS -nXA -eEa -ahS -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(30,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -iXr -rGj -rGj -rGj -esl -npJ -esl -iXr -eDT -esl -jCP -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(31,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -eDT -esl -esl -fJz -esl -koX -esl -iXr -esl -esl -jCP -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(32,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -iXr -npJ -koX -mMV -esl -eDT -esl -jCP -jCP -jCP -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(33,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -eDT -esl -eDT -esl -esl -esl -esl -esl -iXr -esl -eDT -jaf -jaf -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(34,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -eDT -esl -iXr -iXr -iXr -esl -eDT -jaf -jaf -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(35,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -esl -eDT -esl -eDT -esl -jCP -jaf -jaf -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(36,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -esl -jCP -jCP -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(37,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -jCP -jCP -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(38,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -jCP -jCP -jCP -jCP -jaf -jaf -jaf -jaf -jaf -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(39,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(40,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -jCP -esl -rGj -jCP -jCP -jCP -jCP -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(41,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -jCP -jaf -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(42,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -rGj -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(43,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -fbL -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jaf -jaf -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(44,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -uzs -tdl -tdl -uzs -tdl -tdl -tdl -uzs -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -fbL -fbL -oGx -fbL -oGx -fbL -fTp -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -rGj -jaf -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(45,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -tdl -pUX -bci -tdl -pOI -rBR -ssq -tdl -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -fbL -qxN -qxN -qxN -qxN -qxN -qxN -nZp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jaf -jaf -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(46,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -tdl -xcK -bci -tdl -uwa -lov -fbw -tdl -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oGx -aXu -fbL -sPk -mMY -mMY -mMY -nZp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -urU -dxA -dxA -lHL -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(47,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -xDL -tdl -qai -bci -xiv -rOe -idU -vuN -tdl -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -eRY -eRY -eRY -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -fbL -bvj -wvR -wvR -ydO -ydO -ydO -aCN -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -urU -dxA -dxA -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -rGj -jCP -rGj -rGj -rGj -jaf -jaf -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(48,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -xDL -uzs -fVg -tdl -uZF -tdl -tdl -tdl -uzs -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -sEn -sEn -sEn -sEn -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oGx -bvj -wvR -wvR -ydO -ydO -ydO -aCN -qqw -qqw -aCN -xLU -xLU -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -urU -dxA -dxA -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -ljz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -esl -esl -esl -rGj -jCP -jCP -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(49,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -xDL -evX -sol -evX -evX -evX -evX -evX -evX -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -bNO -bNO -tsd -eRY -sEn -sEn -sEn -tsd -bNO -tsd -bNO -mlL -tsd -bNO -tsd -bNO -tsd -qqw -eRY -eRY -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -fbL -bvj -wvR -wvR -ydO -ydO -ydO -aCN -aCN -aCN -aCN -xLU -xLU -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -acw -urU -urU -dxA -dxA -qxN -oGx -qqw -qqw -qqw -qqw -qqw -udN -uNR -udN -qqw -ljz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(50,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -evX -evX -evX -evX -evX -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bNO -ybg -ybg -tsd -bNO -tsd -tsd -bNO -tsd -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -bNO -qqw -eRY -sEn -sEn -eRY -tsd -bNO -bNO -tsd -aCN -aCN -aCN -aCN -aCN -oGx -bvj -wvR -wvR -ydO -ydO -ydO -aCN -aCN -xLU -xLU -xLU -qGI -jUG -jUG -jUG -qXr -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -utR -urU -utR -dxA -dxA -qxN -oGx -qqw -qqw -qqw -qqw -udN -vCc -gfp -vCc -udN -ljz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(51,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -evX -evX -evX -evX -evX -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bNO -sdp -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -foq -jrP -jrP -rFY -jrP -nRo -ybg -tsd -tsd -bNO -tsd -bNO -tsd -tsd -sdp -ybg -bNO -qxN -qxN -qxN -qxN -qxN -fbL -bvj -wvR -wvR -ydO -ydO -ydO -aCN -aCN -xLU -xLU -xLU -lTo -lhF -lhF -lhF -wVh -sIe -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -utR -utR -urU -dxA -dxA -sQb -fbL -qqw -qqw -qqw -qqw -uNR -frM -mNU -lOt -lOt -uBP -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -udN -udN -udN -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -esl -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(52,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -ybg -sJc -jrP -rFY -jrP -rFY -rFY -jrP -rFY -bQF -sEn -sEn -sEn -sEn -trF -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -bNO -aCN -aCN -aCN -aCN -aCN -aCN -fbL -wvR -wvR -ydO -ydO -ydO -aCN -aCN -wvR -wvR -wvR -wvR -ydO -ydO -ydO -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -xgL -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -lBv -vCc -gfp -vCc -lBv -ljz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -bwR -muX -cQn -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -jCP -jCP -jCP -jCP -esl -esl -esl -esl -esl -rGj -rGj -rGj -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(53,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bNO -ybg -rJv -sEn -sEn -sEn -sEn -sEn -mlL -sEn -sEn -sEn -sEn -sEn -sEn -gBN -jrP -jrP -rFY -rFY -jrP -jrP -jrP -noG -tsd -tsd -tsd -qqw -qqw -qqw -qqw -aCN -aCN -qxN -aCN -aCN -aCN -ydO -aCN -aCN -aCN -aCN -sIe -sIe -qGI -jUG -jUG -jUG -qXr -xLU -aCN -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -xgL -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -lBv -uNR -lBv -qqw -ljz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -qGI -jUG -qXr -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -jCP -esl -esl -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -jCP -jCP -jCP -"} -(54,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -ybg -rJv -srt -sEn -sEn -sEn -cfr -mlL -sEn -sEn -sEn -sEn -sEn -sEn -sEn -sEn -sEn -mlL -sEn -sEn -sEn -sEn -sEn -eRY -qqw -qqw -qqw -qqw -qqw -qqw -aCN -qxN -qxN -aCN -aCN -aCN -ydO -aCN -aCN -aCN -aCN -sIe -sIe -mbd -qqw -qqw -qqw -scc -xLU -aCN -qqw -qqw -qqw -qqw -qqw -aCN -dxA -dxA -dxA -dxA -dxA -dxA -dxA -dxA -dxA -qLK -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -ljz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -mbd -sBY -scc -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -jCP -jCP -jCP -"} -(55,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bNO -ybg -mnd -srt -srt -sEn -cfr -cfr -cgH -vzs -vzs -vzs -vzs -vzs -vzs -vzs -sEn -sEn -sEn -sEn -sEn -sEn -sEn -sEn -eRY -qqw -qqw -qqw -qqw -qqw -qqw -aCN -qxN -aCN -aCN -aCN -ydO -ydO -ydO -ydO -ydO -aCN -sIe -sIe -lTo -lhF -lhF -lhF -wVh -sIe -aCN -aCN -aCN -kmR -bmc -bmc -bmc -kmR -dxA -dxA -dxA -dxA -dxA -dxA -dxA -dxA -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -mbd -sBY -scc -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(56,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mlL -ybg -rJv -srt -srt -sEn -cfr -cfr -cgH -vzs -vzs -vzs -vzs -lZq -vzs -vzs -vzs -vzs -vzs -vzs -vzs -vzs -vzs -vzs -eRY -qqw -qqw -qqw -qqw -qqw -qqw -aCN -qxN -aCN -aCN -aCN -ydO -lRz -aiY -sto -ydO -aCN -sIe -sIe -sIe -sIe -sIe -sIe -sIe -sIe -bdl -bdl -bdl -wnB -tEi -tEi -tEi -wnB -dxA -dxA -dxA -dxA -dxA -dxA -dxA -dxA -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -mbd -sBY -scc -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(57,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mlL -ybg -mnd -srt -srt -vzs -cfr -cfr -cgH -vzs -vzs -lZq -vzs -vzs -lZq -vzs -vzs -lZq -vzs -vzs -vzs -lZq -vzs -vzs -eRY -qqw -qqw -qqw -qqw -qqw -qqw -aCN -qxN -aCN -aCN -lRz -aiY -vZG -bUr -aTf -ydO -aCN -sIe -sIe -sIe -sIe -sIe -sIe -sIe -sIe -aCN -aCN -aCN -wnB -tEi -tEi -tEi -wnB -dxA -kmR -xdc -xdc -xdc -kmR -dxA -dxA -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -mbd -sBY -scc -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(58,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -bNO -tsd -ybg -mnd -srt -srt -vzs -cfr -cfr -cfr -cfr -eRY -eRY -eRY -eRY -eRY -eRY -vzs -vzs -lZq -vzs -lZq -vzs -lZq -lZq -eRY -qqw -qqw -qqw -qqw -qqw -qqw -aCN -qxN -wvR -wvR -dhF -eia -riE -riE -aTf -ydO -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -wnB -tEi -tEi -tEi -wnB -dxA -wnB -cte -cte -cte -wnB -dxA -dxA -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -mbd -sBY -scc -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(59,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bNO -ybg -ybg -ybg -srt -srt -vzs -vzs -vzs -cfr -cfr -cfr -qqw -qqw -qqw -qqw -qqw -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -aCN -qxN -wvR -wvR -kPP -uNO -riE -riE -aTf -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wnB -tEi -tEi -tEi -iLy -dxA -wnB -kBA -rKy -cte -lRy -dxA -dxA -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mxB -mbd -sBY -scc -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(60,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -bNO -bNO -tsd -ybg -tsd -tsd -rJv -vzs -vzs -vzs -vzs -vzs -cfr -cfr -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -eRY -eRY -eRY -eRY -eRY -eRY -qqw -qqw -qqw -aCN -qxN -wvR -wvR -ydO -dhF -riE -riE -aTf -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wnB -tEi -tEi -tEi -wnB -dxA -wnB -cte -xRo -cte -wnB -dxA -dxA -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -mbd -sBY -scc -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(61,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -ybg -ybg -ybg -ybg -tsd -tsd -noC -vzs -vzs -lZq -lZq -vzs -vzs -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -osG -osG -eNj -eNj -eNj -eRY -qqw -qqw -qqw -aCN -qxN -wvR -wvR -ydO -dhF -mpF -sJP -aTf -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wnB -tEi -tEi -tEi -wnB -dxA -wnB -lSl -pxM -oqv -wnB -dxA -dxA -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -mbd -sBY -scc -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(62,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bNO -ybg -vmM -jrP -noG -sEn -sEn -gnW -sEn -gnW -sEn -sEn -gnW -gnW -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -osG -osG -eNj -eNj -eNj -eRY -qqw -qqw -qqw -aCN -qxN -aCN -aCN -ydO -kPP -ekN -ekN -nIW -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -kmR -gcr -bmc -bmc -kmR -dxA -wnB -lzr -kmR -lRy -kmR -kmR -dxA -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -mbd -sBY -scc -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(63,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -ybg -rJv -srt -sEn -sEn -sEn -sEn -sEn -sEn -sEn -sEn -sEn -cfr -cfr -cfr -sEn -eRY -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -eRY -gtU -gtU -eNj -eNj -eNj -eRY -qqw -qqw -qqw -aCN -aCN -aCN -aCN -ydO -ydO -ydO -uFo -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -xgL -wnB -dSD -dSD -yfZ -tEi -wnB -dxA -qqw -qqw -qqw -qqw -qqw -qqw -wVz -wVz -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -lTo -lhF -wVh -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -"} -(64,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bNO -ybg -rJv -srt -qBy -jDZ -jDZ -jDZ -jDZ -jDZ -jDZ -jDZ -pXo -cfr -cfr -cgH -sEn -sEn -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -eRY -gtU -edG -eNj -eNj -eNj -eRY -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -pQi -kmR -bmc -bmc -bmc -bmc -kmR -dxA -qqw -qqw -qqw -qqw -qqw -qqw -wVz -wVz -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -lBv -lBv -lBv -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -"} -(65,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -ybg -rJv -srt -gdY -uvn -kGD -oRk -oRk -oRk -kGD -kGD -lqH -cfr -cfr -cfr -cfr -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -eRY -eRY -wUk -dWc -eNj -eNj -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -vzb -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wVz -wVz -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -"} -(66,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bNO -ybg -mnd -srt -gdY -ouS -oRk -oRk -oRk -oRk -oRk -kGD -lqH -cfr -cfr -cfr -cfr -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -dWc -dWc -eNj -eNj -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -vzb -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wVz -wVz -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -"} -(67,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -ybg -rJv -srt -gdY -ivi -kGD -kGD -kGD -oRk -oRk -kGD -fen -cfr -cfr -cfr -cfr -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -eRY -eRY -dWc -dWc -eNj -eNj -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -vzb -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wVz -wVz -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -"} -(68,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bNO -ybg -mnd -srt -qRu -rXp -rXp -rXp -rXp -rXp -rXp -rXp -ist -cfr -cfr -cgH -vzs -vzs -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -eRY -osG -agY -eNj -eNj -eNj -eRY -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -xLU -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wVz -wVz -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -"} -(69,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -ybg -rJv -srt -vzs -vzs -vzs -vzs -vzs -vzs -vzs -vzs -vzs -cfr -cfr -cfr -vzs -eRY -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -eRY -osG -osG -eNj -eNj -eNj -eRY -qqw -qqw -aCN -aCN -act -act -act -act -act -act -act -act -act -act -act -aCN -aCN -aCN -wvR -wvR -wvR -wvR -xLU -xLU -xLU -xLU -xLU -wSR -dtl -dtl -rHz -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wVz -wVz -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -"} -(70,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bNO -ybg -gio -lZq -vzs -vzs -vzs -vzs -lZq -lZq -vzs -vzs -vzs -vzs -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -gtU -gtU -eNj -eNj -eNj -eRY -qqw -qqw -aCN -act -act -act -wsr -act -act -act -act -act -act -act -act -aCN -aCN -aCN -wvR -wvR -wvR -wvR -xLU -xLU -xLU -xLU -xLU -qcD -xTr -xTr -xXp -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(71,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -ybg -ybg -ybg -rJv -gnW -sEn -gnW -sEn -sEn -gnW -cfr -eRY -eRY -eRY -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -gtU -gtU -eNj -eNj -eNj -eRY -qqw -qqw -aCN -act -act -qMA -vHi -vHi -vHi -vHi -vHi -vHi -bIK -hBY -act -aCN -aCN -aCN -wvR -wvR -wvR -acw -xLU -xLU -xLU -xLU -xLU -qcD -xTr -xTr -xXp -ydO -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(72,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -bNO -tsd -ybg -rJv -srt -sEn -sEn -sEn -sEn -cfr -cfr -eRY -eRY -eRY -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -eRY -eRY -eRY -eRY -eRY -eRY -qqw -qqw -aCN -act -act -lyq -tiY -tuD -njE -tuD -tuD -tuD -kvS -dda -kvS -aCN -aCN -aCN -wvR -wvR -wvR -wvR -xLU -xLU -xLU -xLU -xLU -qcD -xTr -xTr -xXp -xLU -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(73,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -tsd -ybg -rJv -srt -srt -sEn -sEn -cfr -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -lyq -uhZ -xcb -xcb -xcb -xcb -uhZ -dda -hci -dda -aCN -aCN -aCN -wvR -wvR -wvR -wvR -sIe -sIe -sIe -sIe -sIe -qcD -xTr -xTr -xXp -xLU -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(74,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -bNO -ybg -rJv -moq -srt -vzs -vzs -cfr -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -lyq -xQi -tuD -tuD -tuD -tuD -tuD -kvS -dda -kvS -aCN -aCN -aCN -wvR -wvR -wvR -wvR -sIe -sIe -sIe -sIe -sIe -qcD -xTr -xTr -xXp -xLU -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wFV -wFV -wFV -wFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(75,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -bNO -ybg -gio -xrv -wjH -wjH -lKi -nll -cfr -cfr -eRY -qqw -qqw -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -agY -osG -osG -osG -agY -agY -eRY -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -bwi -pBW -pBW -pBW -pBW -sMK -pBW -lLO -hBY -wcF -bdl -bdl -bdl -iWN -ejJ -ejJ -ejJ -sIe -sIe -sIe -sIe -sIe -qcD -xTr -xTr -xXp -sIe -sIe -sIe -sIe -sIe -sIe -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wFV -wFV -wFV -wFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(76,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -ybg -ybg -ybg -ybg -ybg -ybg -noC -cfr -cfr -eRY -qqw -qqw -eRY -gnW -gnW -sEn -gnW -gnW -sEn -sEn -osG -osG -osG -agY -osG -osG -eRY -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -wcF -wcF -wcF -wcF -cqp -wcF -odO -wcF -wcF -wcF -aCN -aCN -aCN -aCN -aCN -aCN -aCN -sIe -sIe -sIe -sIe -sIe -qcD -aPT -xTr -xXp -sIe -sIe -sIe -sIe -sIe -sIe -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wFV -wFV -wFV -wFV -wFV -wFV -wFV -wFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(77,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xkk -xkk -uQd -uQd -xkk -xkk -ybg -ybg -fVf -cfr -eRY -qqw -qqw -eRY -sEn -sEn -gnW -sEn -sEn -sEn -sEn -osG -osG -osG -osG -osG -osG -eRY -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -bic -bic -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -wvR -wvR -sIe -dMo -qzY -qzY -qzY -sIe -sIe -sIe -sIe -sIe -sIe -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wFV -wFV -wFV -wFV -wFV -wFV -wFV -wFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -qqw -qqw -psp -psp -psp -qqw -psp -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(78,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xkk -xkk -drK -jrk -prj -pLO -xkk -uQd -ybg -kPU -uSi -eRY -qqw -qqw -eRY -sEn -sEn -sEn -sEn -sEn -sEn -sEn -osG -osG -osG -osG -osG -lYY -eRY -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -ydO -ydO -ydO -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sIe -ydO -qzY -xTr -qzY -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wFV -wFV -wFV -wFV -wFV -wFV -wFV -wFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(79,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xkk -hbE -rBL -euk -rBL -euk -uvz -xkk -ybg -ybg -rjl -ozH -qDJ -qDJ -ozH -qdW -tkY -sEn -qdW -qdW -qdW -qdW -xzF -xzF -xzF -hLh -osG -tsd -tsd -tsd -tsd -qqw -qqw -aCN -aCN -wvR -wvR -ydO -ydO -ydO -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sIe -ydO -qzY -qzY -qzY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -sGL -sGL -sGL -sGL -sGL -sGL -sGL -sGL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(80,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -npJ -rGj -rGj -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -eLR -euk -hLY -mMb -rBL -cHZ -xkk -eVM -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -bNO -qqw -qqw -aCN -wvR -wvR -wvR -ydO -ydO -ydO -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sIe -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -sGL -sGL -sGL -sGL -sGL -sGL -sGL -sGL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(81,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -koX -lUv -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wUC -vVD -rBL -sbG -lLu -euk -tyj -uQd -tsd -bNO -tsd -bNO -tsd -bNO -tsd -bNO -tsd -bNO -tsd -bNO -tsd -bNO -tsd -bNO -tsd -bNO -tsd -tsd -sdp -ybg -bNO -qqw -qqw -aCN -wvR -wvR -wvR -ydO -ydO -ydO -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sIe -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -sGL -sGL -sGL -sGL -sGL -sGL -sGL -sGL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(82,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -koX -koX -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xkk -jyq -qAH -tcJ -phc -rBL -jbl -xkk -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -bNO -bNO -tsd -qqw -qqw -aCN -wvR -wvR -wvR -ydO -ydO -ydO -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -sGL -sGL -sGL -sGL -sGL -sGL -sGL -sGL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(83,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -koX -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xkk -xkk -ayX -hbj -rXJ -kuC -xkk -xkk -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -iJu -iJu -iJu -act -act -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -xLU -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mxB -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(84,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -koX -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xkk -uQd -xkk -uQd -szo -xkk -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -act -act -act -act -act -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -xLU -ydO -ydO -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(85,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -koX -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xkk -xkk -fIb -xkk -xkk -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -act -act -act -act -act -act -act -act -act -act -act -act -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -xLU -ydO -ydO -aCN -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(86,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -koX -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xkk -vOo -fvv -oPp -xkk -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -act -act -act -act -act -act -act -act -act -act -act -act -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sfh -ydO -ydO -aCN -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -euy -qDJ -eOG -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(87,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -koX -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xkk -xkk -sxW -xkk -xkk -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -urU -urU -urU -dxA -dxA -dxA -dxA -dxA -dxA -dxA -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sfh -ydO -ydO -aCN -wvR -wvR -ydO -ydO -ydO -aCN -qqw -qqw -qqw -qqw -euy -fbL -ndi -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(88,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -tvc -tvc -npJ -jCP -jCP -jCP -koX -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xkk -xkk -xkk -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sfh -ydO -ydO -aCN -wvR -wvR -wvR -ydO -ydO -aCN -qqw -qqw -qqw -qqw -mjl -qxN -qwa -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(89,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -npJ -rGj -jCP -jCP -koX -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sIe -ydO -ydO -aCN -sIe -sIe -sIe -sIe -sIe -aCN -qqw -qqw -qqw -qqw -bpv -fbL -oGx -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(90,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -npJ -jCP -jCP -koX -koX -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -wcF -wcF -bic -bic -wcF -wcF -wcF -wcF -wcF -wcF -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sIe -ydO -ydO -aCN -sIe -sIe -sIe -sIe -sIe -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(91,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -koX -jCP -jCP -npJ -koX -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -wcF -wcF -fbL -oGx -fbL -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sIe -ydO -ydO -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(92,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -koX -jCP -jCP -jCP -koX -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -oGx -qwa -oGx -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(93,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -koX -jCP -jCP -jCP -npJ -koX -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -fbL -oGx -fbL -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(94,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -koX -jCP -jCP -jCP -sEI -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(95,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -npJ -rGj -jCP -jCP -sEI -koX -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(96,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -npJ -jCP -jCP -sEI -koX -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(97,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -koX -jCP -jCP -jCP -jsn -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(98,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -koX -jCP -jCP -jCP -koX -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(99,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -npJ -koX -koX -koX -npJ -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(100,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -npJ -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -"} -(101,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -"} -(102,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(103,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(104,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(105,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(106,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(107,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(108,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nbZ -pFD -pFD -nbZ -nbZ -nbZ -nbZ -jCP -tvc -tvc -uZo -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(109,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cZM -cZM -cZM -cZM -cZM -cZM -cZM -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nbZ -pFD -pFD -nbZ -nbZ -nbZ -nbZ -jCP -jCP -uZo -uZo -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(110,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cZM -uFZ -mqf -mqf -mqf -mqf -cZM -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nbZ -nbZ -pFD -pFD -pFD -pFD -pFD -tuO -tuO -tuO -uZo -uZo -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(111,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cZM -jyY -cZM -cZM -cZM -cZM -cZM -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nbZ -nbZ -nbZ -nbZ -nbZ -pFD -pFD -jpW -tuO -nbZ -uZo -uZo -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(112,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cZM -xYD -cZM -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(113,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cZM -xYD -cZM -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(114,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cZM -cZM -cZM -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -uZo -uZo -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(115,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -uZo -uZo -uZo -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(116,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(117,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -uZo -uZo -rGj -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(118,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -oEj -uZo -uZo -uZo -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(119,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nbZ -nbZ -nbZ -nbZ -tuO -nbZ -nbZ -uZo -uZo -oEj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(120,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nbZ -jyw -jyw -jyw -jyw -lyN -tuO -uZo -oEj -uZo -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(121,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nbZ -nbZ -nbZ -nbZ -jyw -jyw -jyw -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -jCP -jCP -jCP -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(122,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nbZ -pFD -pFD -pFD -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -"} -(123,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -pFD -pFD -pFD -pFD -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(124,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nbZ -pFD -pFD -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(125,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(126,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(127,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(128,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} - -(1,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(2,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(3,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(4,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(5,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(6,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(7,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(8,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -eDT -esl -esl -esl -esl -eDT -esl -esl -esl -eDT -esl -esl -esl -eDT -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(9,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -jCP -jCP -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -rGj -rGj -rGj -esl -rGj -rGj -esl -eDT -esl -esl -esl -eDT -esl -esl -rGj -rGj -rGj -rGj -rGj -eDT -esl -esl -esl -esl -eDT -esl -esl -esl -esl -esl -eDT -esl -esl -esl -eDT -esl -eDT -esl -jCP -rRX -eDT -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(10,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -rGj -esl -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -eDT -esl -esl -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -nOp -rRX -iXr -iXr -eDT -rRX -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(11,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -eDT -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -lip -hyA -bCq -iXr -iXr -eDT -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(12,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -eDT -bCq -hyA -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(13,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -oHK -npJ -esl -esl -iXr -esl -eDT -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(14,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -koX -npJ -esl -nOp -eDT -rRX -eDT -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(15,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -rGj -rGj -rGj -esl -esl -esl -koX -itF -rkd -wJc -kNj -kNj -kNj -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(16,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -rRX -iXr -esl -iXr -esl -koX -kGL -iXr -nFY -ifd -ifd -dlu -ifd -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(17,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -jCP -gpG -cjz -bCq -iXr -koX -esl -iXr -dIj -tSd -tSd -sLN -laK -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(18,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -nbZ -kNj -gdM -rkd -koX -flC -hCo -rkd -wJc -kNj -juf -kNj -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(19,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -nbZ -ate -bGd -nFY -npJ -jvj -npJ -koX -koX -koX -npJ -ocJ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(20,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jaf -sNy -sNy -jaf -nbZ -tSd -tSd -qEw -hCo -wAr -npJ -koX -kwY -npJ -koX -vIt -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(21,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jaf -sNy -jaf -sNy -nbZ -sAi -tSd -juf -koX -koX -npJ -npJ -iOn -mYD -koX -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(22,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -sNy -cZs -sNy -sNy -nbZ -nbZ -qyS -dIj -pSx -koX -npJ -koX -isQ -koX -nbZ -nbZ -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(23,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jaf -cZs -jaf -sNy -nbZ -nbZ -nbZ -rkd -nJk -koX -koX -npJ -koX -npJ -juf -flQ -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(24,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -sNy -cZs -sNy -cZs -sNy -sNy -jaf -jCP -fvp -rkd -sLN -tSd -rkd -jCP -nbZ -nbZ -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(25,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jaf -cZs -jaf -cZs -jaf -sNy -jaf -jaf -jCP -jtB -sLN -tSd -mFx -jaf -sNy -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(26,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jaf -sNy -sNy -cZs -sNy -sNy -sNy -jaf -jCP -ahS -tAV -eEa -ahS -jaf -jaf -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(27,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jHi -eEa -nXA -jaf -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(28,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -eEa -eEa -oqz -eEa -sNy -sNy -sNy -sNy -sNy -jCP -jCP -jCP -jCP -jCP -jCP -"} -(29,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jaf -sNy -jaf -sNy -jaf -sNy -jaf -ahS -nXA -nXA -ahS -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(30,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -aat -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(31,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -jCP -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(32,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jCP -jCP -jCP -jCP -jCP -jCP -"} -(33,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(34,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jaf -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(35,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jaf -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(36,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(37,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -jCP -jCP -jCP -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(38,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jCP -jCP -jCP -jCP -jCP -jCP -"} -(39,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(40,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jCP -jCP -jCP -jCP -jCP -jCP -"} -(41,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jaf -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(42,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jaf -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(43,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(44,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -bOb -bOb -bOb -bOb -bOb -bOb -bOb -bOb -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uNR -roK -uNR -eOG -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jaf -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(45,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -bOb -bOb -bOb -bOb -bOb -bOb -bOb -bOb -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -roK -ubM -gfp -kdB -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -rGj -rGj -jCP -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(46,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -lXz -lXz -lXz -lXz -rgK -rgK -rgK -rgK -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uNR -frM -uNR -sLw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -jCP -jCP -jCP -jCP -jCP -jCP -"} -(47,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -hTZ -hTZ -hTZ -hTZ -hTZ -hTZ -hTZ -hTZ -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bpv -uwC -sLw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -rGj -jCP -jCP -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(48,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -hTZ -hTZ -hTZ -jnF -hTZ -hTZ -hTZ -hTZ -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -rGj -rGj -jCP -jCP -jCP -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(49,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mxB -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -udN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -jaf -jaf -jaf -jaf -jaf -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(50,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -udN -udN -udN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(51,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -sIe -sIe -sIe -sIe -sIe -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -dLB -gfp -wVz -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(52,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -lBv -lBv -lBv -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(53,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -lBv -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -"} -(54,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mxB -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -xLU -sIe -xLU -sIe -xLU -aCN -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -"} -(55,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -qqw -qqw -aCN -acw -sIe -sIe -sIe -sIe -aCN -qqw -qqw -aCN -urU -urU -act -dxA -dxA -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(56,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mxB -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -xLU -ydO -ydO -aCN -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -aCN -urU -urU -act -dxA -dxA -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(57,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mxB -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -xLU -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -act -dxA -dxA -aCN -wcF -wcF -wcF -wcF -wcF -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(58,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -xLU -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -act -dxA -dxA -aCN -dxA -aCN -aCN -aCN -urU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(59,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -ydO -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -wcF -dxA -dxA -aCN -dxA -aCN -aCN -aCN -urU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(60,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -wvR -sIe -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -wcF -dxA -dxA -aCN -dxA -aCN -aCN -aCN -urU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(61,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wvR -sIe -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -wcF -dxA -dxA -aCN -dxA -act -act -act -urU -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(62,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wvR -sIe -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -acw -wcF -dxA -dxA -aCN -act -act -act -act -act -act -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(63,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -urU -btS -urU -dxA -dxA -dxA -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -"} -(64,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -srt -sEn -sEn -sEn -sEn -sEn -sEn -sEn -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -odO -wcF -odO -wcF -odO -wcF -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -"} -(65,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -srt -srt -sEn -sEn -sEn -sEn -sEn -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -"} -(66,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -srt -srt -srt -srt -tgC -cfr -cfr -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -"} -(67,1,5) = {" -psp -psp -psp -psp -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -srt -srt -vzs -vzs -vzs -vzs -vzs -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -"} -(68,1,5) = {" -psp -psp -psp -psp -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -srt -vzs -vzs -vzs -vzs -vzs -vzs -vzs -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -"} -(69,1,5) = {" -psp -psp -psp -psp -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -"} -(70,1,5) = {" -psp -psp -psp -psp -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(71,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -act -act -act -act -act -act -act -act -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(72,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -act -act -act -act -act -act -act -rEh -siF -rEh -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(73,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -urU -urU -dxA -dxA -dxA -qrL -sdn -lYN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(74,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -wcF -wcF -wcF -wcF -wcF -rEh -bSK -rEh -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(75,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(76,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(77,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rpA -hRh -rpA -hRh -rpA -hRh -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -acw -eQe -acw -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -qqw -qqw -psp -psp -psp -qqw -psp -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(78,1,5) = {" -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -hRh -iyb -iyb -iyb -iyb -iyb -iyb -rpA -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -eQe -aCN -eQe -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(79,1,5) = {" -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rpA -iyb -wOm -iEt -iEt -eSU -iyb -hRh -oqY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -acw -eQe -acw -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(80,1,5) = {" -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -hRh -iyb -vdL -sOs -vCH -tAK -iyb -odm -oqY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(81,1,5) = {" -psp -psp -psp -psp -psp -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rpA -iyb -vdL -lAK -jhJ -tAK -iyb -hRh -oqY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(82,1,5) = {" -psp -psp -psp -psp -psp -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -hRh -iyb -kmk -whC -whC -gNf -iyb -rpA -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(83,1,5) = {" -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -hUx -iyb -iyb -iyb -iyb -iyb -iyb -hRh -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(84,1,5) = {" -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -hRh -rpA -hRh -rpA -hRh -rpA -oqY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(85,1,5) = {" -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oqY -uZk -uZk -jjx -jjx -vNa -oqY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(86,1,5) = {" -lnu -lnu -lnu -lnu -lnu -lnu -rZo -lnu -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oqY -uZk -uZk -guH -vNa -vNa -oqY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(87,1,5) = {" -rZo -bun -tuB -tuB -ryZ -rZo -rZo -rZo -rGj -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oqY -uZk -tKz -tKz -vNa -vNa -oqY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wFV -wFV -vvy -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(88,1,5) = {" -xMA -tuB -tuB -tuB -tuB -tuB -kHV -rZo -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oqY -tKz -tKz -tKz -oqY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mSa -gfp -vvy -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(89,1,5) = {" -xMA -tuB -tuB -rZo -rZo -rZo -rZo -rZo -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oqY -oqY -oqY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mSa -sGL -sGL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(90,1,5) = {" -lnu -lnu -lnu -lnu -lnu -lnu -rZo -rZo -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(91,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wFV -wFV -vvy -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(92,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mSa -gfp -vvy -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -"} -(93,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mSa -sGL -sGL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -"} -(94,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(95,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(96,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -"} -(97,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -"} -(98,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -"} -(99,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -"} -(100,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(101,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(102,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(103,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(104,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(105,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(106,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(107,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(108,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -oEj -hlA -oEj -jCP -jCP -jCP -jCP -jCP -jCP -iXr -koX -dPS -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(109,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cZM -cZM -cZM -cZM -cZM -cZM -sMr -cZM -sMr -cZM -oEj -nXs -khQ -nXs -oEj -jCP -jCP -jCP -rRX -koX -koX -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(110,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cZM -xYD -yee -yee -yee -uFZ -jwk -jwk -uFZ -jwk -koX -sEI -hlA -khQ -khQ -jCP -jCP -oEj -tjQ -koX -iXr -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(111,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cZM -cZM -cZM -cZM -cZM -cZM -sMr -cZM -sMr -jwk -sEI -nXs -sEI -hlA -khQ -oEj -oEj -nOp -iXr -koX -nOp -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(112,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sEI -koX -sEI -iXr -iXr -sEI -oEj -oEj -tjQ -esl -koX -iXr -oEj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(113,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sEI -koX -nlR -esl -khQ -jCP -jCP -oEj -tjQ -koX -koX -nOp -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(114,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sEI -koX -sEI -iXr -oEj -jCP -jCP -jCP -oEj -iXr -koX -iXr -oEj -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(115,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nOp -nOp -nOp -jCP -jCP -jCP -oEj -rGj -koX -nOp -nlR -jCP -jCP -jCP -jCP -jCP -nlR -koX -esl -nOp -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(116,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sZD -kAz -jCP -qrH -nOp -jCP -khQ -khQ -iXr -koX -esl -esl -oEj -jCP -jCP -jCP -oEj -nlR -koX -esl -nlR -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(117,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -oEj -oEj -nOp -nsE -waO -iXr -ada -sVm -nOp -esl -esl -koX -esl -esl -nOp -jCP -jCP -jCP -jCP -iXr -koX -esl -nOp -oEj -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(118,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -oEj -oEj -oEj -nOp -iXr -esl -ahl -jIv -euh -esl -esl -esl -koX -koX -esl -nlR -nOp -oEj -jCP -oEj -esl -koX -esl -nlR -oEj -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(119,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -oEj -tZl -iXr -nOp -moG -ahl -esl -esl -nlR -nOp -esl -koX -koX -esl -iXr -iXr -sZD -tjQ -koX -koX -oEj -nOp -oEj -oEj -jCP -oEj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(120,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nOp -nOp -oRX -new -esl -iXr -nDR -nOp -khQ -jCP -jCP -koX -koX -koX -iXr -esl -koX -koX -iXr -nOp -nOp -oEj -oEj -oEj -oEj -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(121,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -xxz -kKV -tKM -aNH -twS -khQ -nOp -jCP -jCP -jCP -jCP -jCP -vdM -koX -koX -koX -tjQ -nOp -nOp -oEj -oEj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(122,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(123,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(124,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -"} -(125,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(126,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(127,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(128,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} diff --git a/_maps/custom/roguetown.dmm b/_maps/custom/roguetown.dmm index 105c292c3e..fd23e67867 100644 --- a/_maps/custom/roguetown.dmm +++ b/_maps/custom/roguetown.dmm @@ -647,7 +647,7 @@ "cp" = ( /obj/structure/closet/crate/roguecloset/dark, /obj/item/clothing/suit/roguetown/shirt/rags, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "cq" = ( @@ -1214,7 +1214,7 @@ icon_state = "longtable"; dir = 1 }, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town) "ew" = ( @@ -1509,7 +1509,6 @@ "fD" = ( /obj/item/reagent_containers/glass/cup/golden, /obj/structure/table/wood, -/obj/item/roguekey/lord, /turf/open/floor/rogue/carpet/lord/right, /area/rogue/indoors/town/manor) "fE" = ( @@ -1738,7 +1737,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) "gw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -1772,7 +1771,7 @@ }, /area/rogue/indoors/town/manor) "gA" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -1789,8 +1788,8 @@ icon_state = "longtable" }, /obj/item/clothing/mask/cigarette/pipe/westman, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -2059,7 +2058,7 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town) "hs" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood/spiral{ dir = 4 }, @@ -2660,21 +2659,21 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/rtfield) "jv" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) "jw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "jx" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -2682,7 +2681,7 @@ /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "jy" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -2707,7 +2706,7 @@ icon_state = "chair2"; dir = 4 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -2718,7 +2717,7 @@ icon_state = "largetable"; dir = 9 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -3046,7 +3045,7 @@ /area/rogue/indoors/town/manor) "kw" = ( /obj/structure/closet/crate/chest, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "kx" = ( @@ -3266,7 +3265,7 @@ /turf/open/water/swamp, /area/rogue/under/lake) "le" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -3617,7 +3616,7 @@ /turf/open/floor/rogue/tile/masonic, /area/rogue/indoors/town/manor) "mH" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "vertw"; dir = 1 @@ -3660,7 +3659,7 @@ /obj/item/neuFarm/seed/oat, /obj/item/neuFarm/seed/apple, /obj/item/neuFarm/seed/apple, -/obj/item/neuFarm/seed/pipeweed, +/obj/item/neuFarm/seed/westleach, /obj/item/clothing/mask/cigarette/pipe/westman, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town) @@ -3849,7 +3848,7 @@ /area/rogue/indoors/town/manor) "nE" = ( /obj/structure/chair/bench/throne, -/obj/effect/landmark/start/lady, +/obj/effect/landmark/start/consort, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) "nF" = ( @@ -4059,7 +4058,7 @@ /area/rogue/indoors/town/garrison) "op" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/garrison) "oq" = ( @@ -4639,14 +4638,14 @@ /turf/open/transparent/openspace, /area/rogue/outdoors/town/roofs) "qs" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) "qt" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -4721,7 +4720,7 @@ /area/rogue/outdoors/town) "qG" = ( /obj/structure/closet/crate/roguecloset/dark, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /obj/item/clothing/suit/roguetown/shirt/rags, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) @@ -5056,9 +5055,9 @@ /area/rogue/indoors/town/tavern) "sb" = ( /obj/structure/closet/crate/chest, -/obj/item/rogueweapon/huntingknife/idagger/steel, -/obj/item/rogueweapon/huntingknife/idagger/silver, -/obj/item/rogueweapon/huntingknife/cleaver/combat, +/obj/item/rogueweapon/knife/dagger/steel, +/obj/item/rogueweapon/knife/dagger/silver, +/obj/item/rogueweapon/knife/cleaver/combat, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/shop) "sc" = ( @@ -5339,7 +5338,7 @@ /area/rogue/outdoors/town/roofs) "te" = ( /obj/structure/closet/crate/roguecloset/dark, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /obj/item/clothing/suit/roguetown/shirt/rags, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) @@ -6242,7 +6241,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town/dwarfin) "ww" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "vertw"; dir = 1 @@ -6556,7 +6555,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/dwarfin) "xK" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -6822,7 +6821,7 @@ /turf/open/floor/rogue/concrete, /area/rogue/indoors/town/shop) "yJ" = ( -/obj/item/rogueweapon/huntingknife, +/obj/item/rogueweapon/knife/hunting, /turf/open/floor/rogue/ruinedwood{ icon_state = "vertw"; dir = 1 @@ -6833,7 +6832,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "yL" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/dwarfin) "yM" = ( @@ -6876,7 +6875,7 @@ /turf/closed/wall/mineral/rogue/decowood, /area/rogue/indoors/town) "yY" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) "yZ" = ( @@ -7010,8 +7009,8 @@ icon_state = "tablewood1"; dir = 1 }, -/obj/item/rogueweapon/mace/wsword, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/manor) "zz" = ( @@ -7086,7 +7085,7 @@ /area/rogue/outdoors/town) "zM" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, /turf/open/floor/rogue/ruinedwood, /area/rogue/outdoors/mountains) "zN" = ( @@ -7661,15 +7660,11 @@ }, /area/rogue/indoors/town/shop) "BQ" = ( -/obj/effect/landmark/start/grabber{ - name = "Hauler" - }, +/obj/effect/landmark/start/stevedore, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) "BR" = ( -/obj/effect/landmark/start/grabber{ - name = "Hauler" - }, +/obj/effect/landmark/start/stevedore, /turf/open/floor/rogue/blocks/bluestone, /area/rogue/indoors/town) "BS" = ( @@ -8124,7 +8119,7 @@ /turf/closed/wall/mineral/rogue/craftstone, /area/rogue/under/town/sewer) "DE" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -8573,7 +8568,7 @@ }, /area/rogue/indoors/town/church/chapel) "Fq" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -8683,7 +8678,7 @@ /area/rogue/indoors/town/church/chapel) "FK" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/spear/billhook, +/obj/item/rogueweapon/polearm/spear/billhook, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -9048,7 +9043,7 @@ dir = 5 }, /obj/machinery/light/rogue/wallfire/candle, -/obj/item/rogueweapon/huntingknife/stoneknife, +/obj/item/rogueweapon/knife/stone, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) "GZ" = ( @@ -9568,9 +9563,9 @@ /obj/structure/closet/crate/chest, /obj/item/neuFarm/seed/wheat, /obj/item/neuFarm/seed/apple, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) "IK" = ( @@ -9698,7 +9693,7 @@ }, /obj/item/candle, /obj/item/reagent_containers/food/snacks/rogue/meat/salami, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/church) "Jf" = ( @@ -9836,7 +9831,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/rtfield) "Jz" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -10301,7 +10296,7 @@ }, /area/rogue/under/cave) "Lh" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -10321,11 +10316,11 @@ /turf/open/transparent/openspace, /area/rogue/under/town/basement) "Lk" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/closed/wall/mineral/rogue/wooddark/window, /area/rogue/indoors/town) "Ll" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -10410,7 +10405,7 @@ icon_state = "woodwindowdir"; dir = 1 }, -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -10525,7 +10520,7 @@ /area/rogue/indoors/town/magician) "Mf" = ( /obj/structure/closet/crate/roguecloset/inn/south, -/obj/item/rogueweapon/huntingknife/idagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, /turf/open/floor/rogue/wood/nosmooth, /area/rogue/indoors/town/bath) "Mg" = ( @@ -10586,7 +10581,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/magician) "Mp" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -10683,7 +10678,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) "MF" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/tile{ icon_state = "chess" }, @@ -10822,7 +10817,7 @@ /turf/open/floor/rogue/churchrough, /area/rogue/indoors/town/church) "Ni" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/churchrough, /area/rogue/indoors/town/church) "Nj" = ( @@ -11002,7 +10997,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) "NM" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -11050,7 +11045,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/rtfield) "NU" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -11085,7 +11080,7 @@ /turf/closed/wall/mineral/rogue/wooddark/end, /area/rogue/outdoors/mountains) "Od" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -11858,7 +11853,7 @@ "Rs" = ( /obj/structure/closet/crate/drawer, /obj/item/clothing/mask/cigarette/pipe/westman, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /turf/open/floor/rogue/woodturned/nosmooth, /area/rogue/indoors/town/bath) "Rt" = ( @@ -12050,7 +12045,7 @@ icon_state = "largetable"; dir = 1 }, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/tile{ icon_state = "chess" }, @@ -12159,7 +12154,7 @@ }, /area/rogue/indoors) "Te" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town) "Tg" = ( @@ -12241,7 +12236,7 @@ /turf/open/floor/carpet/purple, /area/rogue/indoors/town/shop) "Tq" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/church) "Tr" = ( @@ -12249,7 +12244,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/outdoors/exposed/dwarf) "Ts" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -12265,7 +12260,7 @@ /turf/open/water/bath, /area/rogue/indoors/town/bath) "Tv" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -12474,7 +12469,7 @@ icon_state = "woodwindowdir"; dir = 4 }, -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -12675,7 +12670,7 @@ /turf/open/floor/rogue/ruinedwood, /area/rogue/outdoors/mountains) "Vg" = ( -/obj/item/rogueweapon/woodstaff/aries, +/obj/item/rogueweapon/polearm/woodstaff/aries, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -12889,7 +12884,7 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/bath) "Wg" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/tile{ icon_state = "chess" }, @@ -13010,7 +13005,7 @@ icon_state = "longtable" }, /obj/item/reagent_containers/powder/flour, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/tile{ icon_state = "tile" }, @@ -13024,7 +13019,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town) "WN" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -13389,9 +13384,9 @@ icon_state = "longtable"; dir = 1 }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /obj/structure/rack/rogue/shelf, /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/bath) @@ -13402,7 +13397,7 @@ }, /area/rogue/indoors/town) "YH" = ( -/obj/effect/landmark/start/barkeep, +/obj/effect/landmark/start/innkeep, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "YI" = ( @@ -13530,7 +13525,7 @@ }, /area/rogue/indoors) "Zj" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "vertw"; dir = 1 @@ -13582,7 +13577,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "Zu" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/closed/wall/mineral/rogue/roofwall/middle{ dir = 1 }, diff --git a/_maps/custom/stonekeep.dmm b/_maps/custom/stonekeep.dmm index 7037c2c984..cf76b6990b 100644 --- a/_maps/custom/stonekeep.dmm +++ b/_maps/custom/stonekeep.dmm @@ -647,7 +647,7 @@ "cp" = ( /obj/structure/closet/crate/roguecloset/dark, /obj/item/clothing/suit/roguetown/shirt/rags, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "cq" = ( @@ -1214,7 +1214,7 @@ icon_state = "longtable"; dir = 1 }, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town) "ew" = ( @@ -1509,7 +1509,6 @@ "fD" = ( /obj/item/reagent_containers/glass/cup/golden, /obj/structure/table/wood, -/obj/item/roguekey/lord, /turf/open/floor/rogue/carpet/lord/right, /area/rogue/indoors/town/manor) "fE" = ( @@ -1738,7 +1737,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) "gw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -1772,7 +1771,7 @@ }, /area/rogue/indoors/town/manor) "gA" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -1789,8 +1788,8 @@ icon_state = "longtable" }, /obj/item/clothing/mask/cigarette/pipe/westman, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -2059,7 +2058,7 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town) "hs" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood/spiral{ dir = 4 }, @@ -2660,21 +2659,21 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/rtfield) "jv" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) "jw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "jx" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -2682,7 +2681,7 @@ /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "jy" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -2707,7 +2706,7 @@ icon_state = "chair2"; dir = 4 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -2718,7 +2717,7 @@ icon_state = "largetable"; dir = 9 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -3046,7 +3045,7 @@ /area/rogue/indoors/town/manor) "kw" = ( /obj/structure/closet/crate/chest, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "kx" = ( @@ -3266,7 +3265,7 @@ /turf/open/water/swamp, /area/rogue/under/lake) "le" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -3617,7 +3616,7 @@ /turf/open/floor/rogue/tile/masonic, /area/rogue/indoors/town/manor) "mH" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "vertw"; dir = 1 @@ -3660,7 +3659,7 @@ /obj/item/neuFarm/seed/oat, /obj/item/neuFarm/seed/apple, /obj/item/neuFarm/seed/apple, -/obj/item/neuFarm/seed/pipeweed, +/obj/item/neuFarm/seed/westleach, /obj/item/clothing/mask/cigarette/pipe/westman, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town) @@ -3849,7 +3848,7 @@ /area/rogue/indoors/town/manor) "nE" = ( /obj/structure/chair/bench/throne, -/obj/effect/landmark/start/lady, +/obj/effect/landmark/start/consort, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) "nF" = ( @@ -4059,7 +4058,7 @@ /area/rogue/indoors/town/garrison) "op" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/garrison) "oq" = ( @@ -4639,14 +4638,14 @@ /turf/open/transparent/openspace, /area/rogue/outdoors/town/roofs) "qs" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) "qt" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -4721,7 +4720,7 @@ /area/rogue/outdoors/town) "qG" = ( /obj/structure/closet/crate/roguecloset/dark, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /obj/item/clothing/suit/roguetown/shirt/rags, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) @@ -5056,9 +5055,9 @@ /area/rogue/indoors/town/tavern) "sb" = ( /obj/structure/closet/crate/chest, -/obj/item/rogueweapon/huntingknife/idagger/steel, -/obj/item/rogueweapon/huntingknife/idagger/silver, -/obj/item/rogueweapon/huntingknife/cleaver/combat, +/obj/item/rogueweapon/knife/dagger/steel, +/obj/item/rogueweapon/knife/dagger/silver, +/obj/item/rogueweapon/knife/cleaver/combat, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/shop) "sc" = ( @@ -5339,7 +5338,7 @@ /area/rogue/outdoors/town/roofs) "te" = ( /obj/structure/closet/crate/roguecloset/dark, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /obj/item/clothing/suit/roguetown/shirt/rags, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) @@ -6242,7 +6241,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town/dwarfin) "ww" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "vertw"; dir = 1 @@ -6556,7 +6555,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/dwarfin) "xK" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -6822,7 +6821,7 @@ /turf/open/floor/rogue/concrete, /area/rogue/indoors/town/shop) "yJ" = ( -/obj/item/rogueweapon/huntingknife, +/obj/item/rogueweapon/knife/hunting, /turf/open/floor/rogue/ruinedwood{ icon_state = "vertw"; dir = 1 @@ -6833,7 +6832,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "yL" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/dwarfin) "yM" = ( @@ -6876,7 +6875,7 @@ /turf/closed/wall/mineral/rogue/decowood, /area/rogue/indoors/town) "yY" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) "yZ" = ( @@ -7010,8 +7009,8 @@ icon_state = "tablewood1"; dir = 1 }, -/obj/item/rogueweapon/mace/wsword, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/manor) "zz" = ( @@ -7086,7 +7085,7 @@ /area/rogue/outdoors/town) "zM" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, /turf/open/floor/rogue/ruinedwood, /area/rogue/outdoors/mountains) "zN" = ( @@ -7661,15 +7660,11 @@ }, /area/rogue/indoors/town/shop) "BQ" = ( -/obj/effect/landmark/start/grabber{ - name = "Hauler" - }, +/obj/effect/landmark/start/stevedore, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) "BR" = ( -/obj/effect/landmark/start/grabber{ - name = "Hauler" - }, +/obj/effect/landmark/start/stevedore, /turf/open/floor/rogue/blocks/bluestone, /area/rogue/indoors/town) "BS" = ( @@ -8124,7 +8119,7 @@ /turf/closed/wall/mineral/rogue/craftstone, /area/rogue/under/town/sewer) "DE" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -8573,7 +8568,7 @@ }, /area/rogue/indoors/town/church/chapel) "Fq" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -8683,7 +8678,7 @@ /area/rogue/indoors/town/church/chapel) "FK" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/spear/billhook, +/obj/item/rogueweapon/polearm/spear/billhook, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -9048,7 +9043,7 @@ dir = 5 }, /obj/machinery/light/rogue/wallfire/candle, -/obj/item/rogueweapon/huntingknife/stoneknife, +/obj/item/rogueweapon/knife/stone, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) "GZ" = ( @@ -9568,9 +9563,9 @@ /obj/structure/closet/crate/chest, /obj/item/neuFarm/seed/wheat, /obj/item/neuFarm/seed/apple, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) "IK" = ( @@ -9698,7 +9693,7 @@ }, /obj/item/candle, /obj/item/reagent_containers/food/snacks/rogue/meat/salami, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/church) "Jf" = ( @@ -9836,7 +9831,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/rtfield) "Jz" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -10301,7 +10296,7 @@ }, /area/rogue/under/cave) "Lh" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -10321,11 +10316,11 @@ /turf/open/transparent/openspace, /area/rogue/under/town/basement) "Lk" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/closed/wall/mineral/rogue/wooddark/window, /area/rogue/indoors/town) "Ll" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -10410,7 +10405,7 @@ icon_state = "woodwindowdir"; dir = 1 }, -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -10525,7 +10520,7 @@ /area/rogue/indoors/town/magician) "Mf" = ( /obj/structure/closet/crate/roguecloset/inn/south, -/obj/item/rogueweapon/huntingknife/idagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, /turf/open/floor/rogue/wood/nosmooth, /area/rogue/indoors/town/bath) "Mg" = ( @@ -10586,7 +10581,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/magician) "Mp" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -10683,7 +10678,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) "MF" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/tile{ icon_state = "chess" }, @@ -10822,7 +10817,7 @@ /turf/open/floor/rogue/churchrough, /area/rogue/indoors/town/church) "Ni" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/churchrough, /area/rogue/indoors/town/church) "Nj" = ( @@ -11002,7 +10997,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) "NM" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -11050,7 +11045,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/rtfield) "NU" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -11085,7 +11080,7 @@ /turf/closed/wall/mineral/rogue/wooddark/end, /area/rogue/outdoors/mountains) "Od" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -11858,7 +11853,7 @@ "Rs" = ( /obj/structure/closet/crate/drawer, /obj/item/clothing/mask/cigarette/pipe/westman, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /turf/open/floor/rogue/woodturned/nosmooth, /area/rogue/indoors/town/bath) "Rt" = ( @@ -12050,7 +12045,7 @@ icon_state = "largetable"; dir = 1 }, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/tile{ icon_state = "chess" }, @@ -12159,7 +12154,7 @@ }, /area/rogue/indoors) "Te" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town) "Tg" = ( @@ -12241,7 +12236,7 @@ /turf/open/floor/carpet/purple, /area/rogue/indoors/town/shop) "Tq" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/church) "Tr" = ( @@ -12249,7 +12244,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/outdoors/exposed/dwarf) "Ts" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -12265,7 +12260,7 @@ /turf/open/water/bath, /area/rogue/indoors/town/bath) "Tv" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -12474,7 +12469,7 @@ icon_state = "woodwindowdir"; dir = 4 }, -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -12675,7 +12670,7 @@ /turf/open/floor/rogue/ruinedwood, /area/rogue/outdoors/mountains) "Vg" = ( -/obj/item/rogueweapon/woodstaff/aries, +/obj/item/rogueweapon/polearm/woodstaff/aries, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -12889,7 +12884,7 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/bath) "Wg" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/tile{ icon_state = "chess" }, @@ -13010,7 +13005,7 @@ icon_state = "longtable" }, /obj/item/reagent_containers/powder/flour, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/tile{ icon_state = "tile" }, @@ -13024,7 +13019,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town) "WN" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -13389,9 +13384,9 @@ icon_state = "longtable"; dir = 1 }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /obj/structure/rack/rogue/shelf, /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/bath) @@ -13402,7 +13397,7 @@ }, /area/rogue/indoors/town) "YH" = ( -/obj/effect/landmark/start/barkeep, +/obj/effect/landmark/start/innkeep, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "YI" = ( @@ -13530,7 +13525,7 @@ }, /area/rogue/indoors) "Zj" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "vertw"; dir = 1 @@ -13582,7 +13577,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "Zu" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/closed/wall/mineral/rogue/roofwall/middle{ dir = 1 }, diff --git a/_maps/map_files/dakkatown/dakkatown.dmm b/_maps/map_files/dakkatown/dakkatown.dmm index 2ecbe4e2ab..ecbbc68146 100644 --- a/_maps/map_files/dakkatown/dakkatown.dmm +++ b/_maps/map_files/dakkatown/dakkatown.dmm @@ -159,7 +159,7 @@ /area/rogue/outdoors/exposed/manorgarri) "aD" = ( /obj/item/rogue/instrument/lute, -/obj/item/rogueweapon/huntingknife/stoneknife, +/obj/item/rogueweapon/knife/stone, /obj/item/paper, /obj/item/paper, /obj/item/paper, @@ -575,7 +575,7 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/under/cave) "ce" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town) "cf" = ( @@ -783,9 +783,6 @@ /area/rogue/under/town/basement) "cY" = ( /obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/grabber{ - dir = 8 - }, /turf/open/floor/rogue/ruinedwood/turned, /area/rogue/indoors/town) "cZ" = ( @@ -916,7 +913,7 @@ /turf/open/floor/rogue/tile/masonic/single, /area/rogue/indoors/town/manor) "dA" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/shop) "dB" = ( @@ -959,7 +956,7 @@ "dJ" = ( /obj/structure/table/wood/plain, /obj/item/cooking/pan, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/tile/checker, /area/rogue/indoors/town/tavern) "dL" = ( @@ -1452,9 +1449,9 @@ /area/rogue/under/town/basement) "fz" = ( /obj/structure/table/wood/plain, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/neuFarm/seed/pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/neuFarm/seed/westleach, /obj/item/reagent_containers/food/snacks/grown/nettle, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/apothecary) @@ -1521,14 +1518,14 @@ "fJ" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/crate/chest/wicker, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /turf/open/floor/rogue/cobble, /area/rogue/under/town/ruin) "fL" = ( @@ -1568,7 +1565,7 @@ /area/rogue/outdoors/town) "fR" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/woodcut, +/obj/item/rogueweapon/axe/iron, /turf/open/floor/rogue/ruinedwood{ icon_state = "vertw"; dir = 1 @@ -1733,7 +1730,6 @@ /area/rogue/indoors/town) "gx" = ( /obj/structure/table/wood, -/obj/item/roguekey/lord, /turf/open/floor/rogue/carpet/lord/right, /area/rogue/indoors/town/manor) "gy" = ( @@ -1824,16 +1820,15 @@ "gO" = ( /obj/effect/decal/cleanable/dirt/cobweb/cobweb2, /obj/structure/closet/crate/chest/neu, -/obj/item/rogueweapon/mace/coppermace, /turf/open/floor/rogue/greenstone, /area/rogue/under/town/ruin) "gQ" = ( /obj/structure/table/wood/plain, /obj/machinery/light/rogue/torchholder/r, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/item/reagent_containers/glass/bowl, @@ -2115,7 +2110,7 @@ /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/garrison) "hV" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/garrison) "hW" = ( @@ -2162,7 +2157,7 @@ /area/rogue/indoors/shelter/town/sargoth) "if" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/idagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, /turf/open/floor/rogue/tile, /area/rogue/indoors/town/manor) "ig" = ( @@ -2410,7 +2405,7 @@ /turf/open/floor/rogue/cobble/mossy, /area/rogue/under/town/sewer) "jf" = ( -/obj/effect/landmark/start/barkeep{ +/obj/effect/landmark/start/innkeep{ dir = 1 }, /turf/open/floor/rogue/ruinedwood/spiral, @@ -2492,7 +2487,7 @@ locked = 1; name = "Oubliettes" }, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/cell) "jv" = ( @@ -2769,7 +2764,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/garrison) "kA" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/naturalstone, @@ -3240,7 +3235,7 @@ /area/rogue/indoors/town/church/chapel) "mo" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "mq" = ( @@ -3268,7 +3263,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/ruin) "mt" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/herringbone, @@ -3398,10 +3393,10 @@ /area/rogue/outdoors/town) "mU" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/spear{ +/obj/item/rogueweapon/polearm/spear{ pixel_x = -13 }, -/obj/item/rogueweapon/spear{ +/obj/item/rogueweapon/polearm/spear{ pixel_x = -21 }, /turf/open/floor/rogue/ruinedwood/spiral, @@ -3680,7 +3675,6 @@ "nW" = ( /obj/structure/bed/rogue/wool, /obj/item/bedsheet/rogue/wool, -/obj/effect/landmark/start/churchling, /turf/open/floor/rogue/ruinedwood/turned, /area/rogue/indoors/town/church) "nX" = ( @@ -3719,7 +3713,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town) "og" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -3770,7 +3764,7 @@ /turf/open/floor/rogue/hexstone, /area/rogue/under/town/basement) "op" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4; icon_state = "borderfall" }, @@ -3814,7 +3808,7 @@ "oy" = ( /obj/structure/table/wood/plain, /obj/item/storage/roguebag, -/obj/item/kitchen/rollingpin, +/obj/item/rogueweapon/mace/woodclub/rollingpin, /turf/open/floor/rogue/tile/checker, /area/rogue/indoors/town/tavern) "oz" = ( @@ -3867,7 +3861,7 @@ /turf/open/floor/rogue/wood/nosmooth, /area/rogue/indoors/shelter/town/sargoth) "oJ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/herringbone, @@ -4071,7 +4065,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "pt" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/naturalstone, @@ -4309,8 +4303,8 @@ /turf/open/floor/rogue/cobble, /area/rogue/outdoors/exposed/manorgarri) "qs" = ( -/obj/item/rogueweapon/mace/wsword, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /obj/structure/rack/rogue, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/theatre) @@ -4380,8 +4374,8 @@ /area/rogue/indoors/town) "qG" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/mace/wsword, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/rooftop/green{ dir = 1 }, @@ -4954,7 +4948,7 @@ /turf/open/floor/rogue/twig, /area/rogue/outdoors/town) "sT" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/fluff/railing/border, @@ -5225,7 +5219,7 @@ /turf/open/floor/rogue/rooftop/green, /area/rogue/outdoors/town/roofs) "tT" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/structure/bars/passage{ name = "Cell Bars"; redstone_id = "dungeon_cell" @@ -5408,7 +5402,7 @@ /turf/open/water/sewer, /area/rogue/under/town/sewer) "uH" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -5851,7 +5845,7 @@ /area/rogue/indoors/town/dwarfin) "wp" = ( /obj/structure/bars, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/naturalstone, @@ -5884,9 +5878,6 @@ /area/rogue/outdoors/river) "ww" = ( /obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/grabber{ - dir = 4 - }, /turf/open/floor/rogue/ruinedwood/turned, /area/rogue/indoors/town) "wx" = ( @@ -6054,7 +6045,7 @@ /area/rogue/indoors/town/church) "wX" = ( /obj/machinery/light/rogue/hearth, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/naturalstone, @@ -6082,7 +6073,7 @@ /obj/item/reagent_containers/food/snacks/smallrat{ name = "Tim" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/naturalstone, @@ -6713,7 +6704,7 @@ /area/rogue/outdoors/rtfield) "zL" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/woodstaff, +/obj/item/rogueweapon/polearm/woodstaff, /obj/item/rogueweapon/thresher, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/theatre) @@ -6843,8 +6834,8 @@ /area/rogue/indoors/town) "Al" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/woodstaff, -/obj/item/rogueweapon/woodstaff, +/obj/item/rogueweapon/polearm/woodstaff, +/obj/item/rogueweapon/polearm/woodstaff, /turf/open/floor/rogue/rooftop/green, /area/rogue/outdoors/town/roofs) "Am" = ( @@ -6931,8 +6922,8 @@ /area/rogue/indoors/town/dwarfin) "AC" = ( /obj/structure/closet/crate/chest/old_crate, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /obj/item/clothing/mask/cigarette/pipe/westman, /obj/item/clothing/mask/cigarette/pipe, /turf/open/floor/rogue/blocks/green, @@ -7097,7 +7088,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/garrison) "Bj" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -7153,7 +7144,7 @@ /area/rogue/indoors/town/theatre) "Bx" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) "By" = ( @@ -7386,7 +7377,7 @@ /area/rogue/indoors/town/dwarfin) "Cr" = ( /obj/structure/closet/crate/roguecloset, -/obj/item/rogueweapon/huntingknife/idagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, /obj/item/reagent_containers/powder/spice, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/shop) @@ -7829,7 +7820,7 @@ "DX" = ( /obj/structure/table/wood/plain, /obj/item/grown/log/tree/stake, -/obj/item/rogueweapon/huntingknife{ +/obj/item/rogueweapon/knife/hunting{ pixel_y = 9 }, /turf/open/floor/rogue/herringbone, @@ -7984,7 +7975,7 @@ /area/rogue/indoors/town/dwarfin) "EB" = ( /obj/structure/closet/crate/roguecloset, -/obj/item/rogueweapon/woodstaff/aries, +/obj/item/rogueweapon/polearm/woodstaff/aries, /obj/item/keyring, /obj/item/roguekey/inquisition, /obj/item/roguekey/monastery, @@ -8179,7 +8170,7 @@ "Fl" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/crate/chest, -/obj/item/rogueweapon/huntingknife/idagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, /turf/open/floor/rogue/cobble/mossy, /area/rogue/under/town/ruin) "Fm" = ( @@ -8268,7 +8259,7 @@ /turf/open/floor/rogue/ruinedwood/chevron, /area/rogue/indoors/town/garrison) "FD" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/church/chapel) "FE" = ( @@ -9166,7 +9157,7 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/dwarfin) "IY" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/structure/mineral_door/wood/donjon{ lockid = "manor"; locked = 1; @@ -9200,9 +9191,9 @@ /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/shop) "Jf" = ( -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /obj/structure/closet/crate/chest/old_crate, /turf/open/floor/carpet/purple, /area/rogue/indoors/town/magician) @@ -9554,7 +9545,7 @@ /area/rogue/under/town/sewer) "Kq" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /obj/structure/fluff/walldeco/customflag{ pixel_y = 32 }, @@ -9565,7 +9556,6 @@ /area/rogue/outdoors/exposed/manorgarri) "Kt" = ( /obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/grabber, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "Ku" = ( @@ -9658,7 +9648,7 @@ /area/rogue/indoors/town) "KM" = ( /obj/item/clothing/suit/roguetown/shirt/robe/mage, -/obj/item/rogueweapon/woodstaff, +/obj/item/rogueweapon/polearm/woodstaff, /obj/structure/closet/crate/chest/old_crate, /turf/open/floor/rogue/wood/nosmooth, /area/rogue/indoors/town/manor) @@ -9796,7 +9786,7 @@ }, /area/rogue/indoors/town/dwarfin) "Lu" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/mineral_door/bars{ @@ -9941,7 +9931,7 @@ /area/rogue/indoors/town/manor) "LV" = ( /obj/structure/chair/bench/throne, -/obj/effect/landmark/start/lady, +/obj/effect/landmark/start/consort, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) "LW" = ( @@ -10305,7 +10295,7 @@ /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/dwarfin) "Nm" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/naturalstone, @@ -10321,7 +10311,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/bath) "Np" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/structure/mineral_door/wood/donjon{ @@ -10553,7 +10543,7 @@ /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) "Om" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/dwarfin) "On" = ( @@ -10744,7 +10734,7 @@ /turf/open/floor/rogue/tile, /area/rogue/indoors/town/garrison) "OT" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -10839,7 +10829,7 @@ locked = 1; name = "Prison Tower" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/naturalstone, @@ -10976,7 +10966,7 @@ /area/rogue/indoors/town/manor) "PM" = ( /obj/structure/closet/crate/roguecloset, -/obj/item/rogueweapon/woodstaff, +/obj/item/rogueweapon/polearm/woodstaff, /turf/open/floor/carpet/purple, /area/rogue/indoors/town/magician) "PO" = ( @@ -11277,7 +11267,7 @@ /turf/open/floor/rogue/ruinedwood/turned, /area/rogue/indoors/town/dwarfin) "QU" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/naturalstone, @@ -11405,7 +11395,7 @@ /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/dwarfin) "Rr" = ( -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /obj/structure/table/wood, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/manor) @@ -11536,7 +11526,7 @@ pixel_y = 3; pixel_x = -12 }, -/obj/item/rogueweapon/huntingknife/idagger{ +/obj/item/rogueweapon/knife/dagger{ pixel_x = 7 }, /obj/item/reagent_containers/glass/bowl{ @@ -11564,7 +11554,7 @@ /turf/open/floor/rogue/tile/masonic/single, /area/rogue/indoors/town/manor) "RX" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/manor) "RY" = ( @@ -11760,7 +11750,7 @@ /area/rogue/indoors/town/dwarfin) "SJ" = ( /obj/effect/decal/remains/human, -/obj/item/rogueweapon/copperdagger, +/obj/item/rogueweapon/knife/copper, /turf/open/floor/rogue/greenstone, /area/rogue/under/town/ruin) "SK" = ( @@ -11845,7 +11835,7 @@ /area/rogue/under/town/sewer) "SY" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/sword/rapier/lord, +/obj/item/rogueweapon/sword/sabre/lord, /turf/open/floor/rogue/tile, /area/rogue/indoors/town/manor) "SZ" = ( @@ -12055,7 +12045,7 @@ /turf/open/floor/rogue/wood, /area/rogue/outdoors/town) "TK" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/closed/wall/mineral/rogue/stonebrick, /area/rogue/under/cave) "TL" = ( @@ -12424,7 +12414,7 @@ /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/church) "Vh" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -12441,7 +12431,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/shop) "Vk" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/mineral_door/bars{ @@ -12631,7 +12621,7 @@ /area/rogue/indoors/town/shop) "VX" = ( /obj/structure/table/wood, -/obj/item/kitchen/rollingpin, +/obj/item/rogueweapon/mace/woodclub/rollingpin, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/manor) "VY" = ( @@ -12741,7 +12731,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town) "Ws" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/structure/mineral_door/wood/donjon{ @@ -12800,7 +12790,7 @@ /area/rogue/indoors/town/manor) "WC" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/idagger, +/obj/item/rogueweapon/knife/dagger, /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/dwarfin) "WD" = ( @@ -13191,7 +13181,7 @@ /turf/open/transparent/openspace, /area/rogue/indoors/town/church) "Ye" = ( -/obj/item/rogueweapon/huntingknife/idagger/steel/special, +/obj/item/rogueweapon/knife/dagger/steel/special, /obj/item/clothing/mask/rogue/facemask, /obj/structure/closet/crate/chest/neu, /turf/open/floor/rogue/cobble/mossy, @@ -13376,7 +13366,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/theatre) "YQ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -13611,7 +13601,7 @@ /turf/open/floor/rogue/blocks/newstone/alt, /area/rogue/indoors/town) "ZE" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -13693,7 +13683,7 @@ "ZS" = ( /obj/structure/closet/crate/chest/old_crate, /obj/effect/decal/cleanable/dirt/dust, -/obj/item/rogueweapon/huntingknife/idagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, /turf/open/floor/rogue/cobble/mossy, /area/rogue/under/town/ruin) "ZT" = ( diff --git a/_maps/map_files/dakkatown/otherz/dakkacoast.dmm b/_maps/map_files/dakkatown/otherz/dakkacoast.dmm index acc3cf189c..f6219ab3f7 100644 --- a/_maps/map_files/dakkatown/otherz/dakkacoast.dmm +++ b/_maps/map_files/dakkatown/otherz/dakkacoast.dmm @@ -56,7 +56,7 @@ /area/rogue/outdoors/beach) "dZ" = ( /obj/structure/bed/rogue/shit, -/obj/effect/landmark/start/grabber{ +/obj/effect/landmark/start/stevedore{ dir = 8 }, /turf/open/floor/rogue/twig, @@ -230,7 +230,7 @@ /area/rogue/outdoors/beach/boat) "AZ" = ( /obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/grabber{ +/obj/effect/landmark/start/stevedore{ dir = 4 }, /turf/open/floor/rogue/twig, diff --git a/_maps/map_files/dakkatown/otherz/dakkaforest.dmm b/_maps/map_files/dakkatown/otherz/dakkaforest.dmm index c97f744909..354c17d7c5 100644 --- a/_maps/map_files/dakkatown/otherz/dakkaforest.dmm +++ b/_maps/map_files/dakkatown/otherz/dakkaforest.dmm @@ -535,7 +535,7 @@ /area/rogue/indoors) "oV" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, /obj/item/rogueweapon/shield/wood, /turf/open/floor/rogue/ruinedwood/chevron, /area/rogue/indoors) @@ -693,7 +693,7 @@ }, /area/rogue/indoors) "tx" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/wood, /area/rogue/indoors) "tO" = ( @@ -1038,8 +1038,8 @@ /area/rogue/outdoors/rtfield) "Eu" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/mace/wsword, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/blocks, /area/rogue/indoors) "Ew" = ( @@ -1323,7 +1323,7 @@ /area/rogue/outdoors/rtfield) "Lb" = ( /obj/structure/table/wood/plain, -/obj/item/rogueweapon/huntingknife, +/obj/item/rogueweapon/knife/hunting, /turf/open/floor/rogue/woodturned, /area/rogue/indoors) "Le" = ( diff --git a/_maps/map_files/dakkatown/otherz/dakkamountain.dmm b/_maps/map_files/dakkatown/otherz/dakkamountain.dmm index 081669ed06..aa4cf73249 100644 --- a/_maps/map_files/dakkatown/otherz/dakkamountain.dmm +++ b/_maps/map_files/dakkatown/otherz/dakkamountain.dmm @@ -151,7 +151,7 @@ /area/rogue/outdoors/mountains/deception) "zC" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors) "Ak" = ( @@ -186,7 +186,7 @@ /area/rogue/under/cave) "Cf" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/woodcut/steel, +/obj/item/rogueweapon/axe/steel, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors) "Cv" = ( @@ -230,7 +230,7 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors) "GN" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/wood, /area/rogue/indoors) "Hs" = ( diff --git a/_maps/map_files/dun_manor/dun_manor.dmm b/_maps/map_files/dun_manor/dun_manor.dmm index 8cf1ce2d5b..3bb795a698 100644 --- a/_maps/map_files/dun_manor/dun_manor.dmm +++ b/_maps/map_files/dun_manor/dun_manor.dmm @@ -14,6 +14,13 @@ /obj/machinery/light/rogue/torchholder/r, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/garrison) +"aaH" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/knife/dagger/silver, +/turf/open/floor/rogue/tile{ + icon_state = "linoleum" + }, +/area/rogue/indoors/town/vault) "abV" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/roguemachine/mail/r, @@ -135,7 +142,7 @@ /obj/item/reagent_containers/glass/cup/wooden, /obj/item/reagent_containers/glass/cup, /obj/item/reagent_containers/glass/cup/silver, -/obj/item/kitchen/rollingpin, +/obj/item/rogueweapon/mace/woodclub/rollingpin, /obj/item/reagent_containers/peppermill, /obj/item/kitchen/spoon, /turf/open/floor/rogue/woodturned, @@ -162,10 +169,10 @@ /turf/open/floor/rogue/twig, /area/rogue/under/town/basement) "aiy" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/cobblerock, @@ -182,9 +189,9 @@ /area/rogue/indoors/town) "aiU" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, /obj/item/rogueweapon/sword/iron, -/obj/item/rogueweapon/woodcut, +/obj/item/rogueweapon/axe/iron, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "ajW" = ( @@ -212,7 +219,7 @@ }, /area/rogue/under/town/basement) "akV" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -303,8 +310,8 @@ /turf/closed/indestructible/wooddark/hull, /area/rogue/indoors/ship) "arI" = ( -/obj/structure/roguewindow, -/obj/effect/decal/cobbleedge{ +/obj/structure/roguewindow/solid, +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/twig, @@ -455,7 +462,7 @@ /turf/open/floor/carpet/purple, /area/rogue/indoors/town/bath) "axE" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/dirt/road, @@ -551,11 +558,6 @@ /obj/machinery/light/rogue/oven/east, /turf/open/floor/rogue/tile/kitchen, /area/rogue/indoors/town/church/chapel) -"aCz" = ( -/obj/structure/flora/roguegrass, -/obj/effect/landmark/start/orphan, -/turf/open/floor/rogue/twig, -/area/rogue/outdoors/rtfield) "aCC" = ( /obj/structure/table/wood{ dir = 1; @@ -601,7 +603,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/rtfield) "aDo" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/structure/table/wood{ @@ -656,12 +658,6 @@ /mob/living/simple_animal/hostile/retaliate/rogue/cow, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) -"aFk" = ( -/obj/structure/closet/crate/chest/neu, -/obj/item/natural/chaff/oat, -/obj/item/natural/chaff/oat, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) "aFn" = ( /obj/structure/closet/crate/roguecloset{ lockid = "butler" @@ -699,6 +695,7 @@ /obj/structure/closet/crate/roguecloset/dark, /obj/item/clothing/cloak/raincloak/mortus, /obj/item/flashlight/flare/torch/lantern, +/obj/item/clothing/head/roguetown/padded/deathface, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "aGn" = ( @@ -733,7 +730,7 @@ /turf/open/floor/rogue/grass, /area/rogue/under/cave) "aIp" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/blocks, @@ -742,7 +739,7 @@ /obj/structure/fluff/walldeco/customflag{ pixel_y = 32 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/flora/roguegrass, @@ -754,7 +751,7 @@ /turf/open/floor/carpet/red, /area/rogue/indoors/town/bath) "aIA" = ( -/obj/item/rogueweapon/huntingknife, +/obj/item/rogueweapon/knife/hunting, /obj/structure/table/wood{ icon_state = "tablewood1" }, @@ -922,11 +919,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) -"aON" = ( -/obj/effect/spawner/roguemap/grass_low, -/obj/structure/flora/newtree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) "aPj" = ( /obj/structure/fluff/clodpile, /turf/open/floor/rogue/dirt/road, @@ -950,7 +942,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "aPp" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /obj/structure/chair/bench, @@ -989,7 +981,7 @@ /area/rogue/indoors/town/bath) "aQJ" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/rack/rogue/shelf/big, @@ -1093,7 +1085,7 @@ /area/rogue/indoors/town/manor) "aVs" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/fluff/globe, +/obj/structure/bookcase/random/legends, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/magician) "aVu" = ( @@ -1116,7 +1108,8 @@ dir = 1; icon_state = "border" }, -/obj/structure/closet/crate/chest, +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/clothing/under/roguetown/loincloth, /turf/open/floor/rogue/tile/bath, /area/rogue/under/town/basement) "aVU" = ( @@ -1161,7 +1154,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/tavern) "aYp" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/crate/chest/neu_fancy{ lockid = "butler" @@ -1219,7 +1212,7 @@ /area/rogue/indoors/town) "baL" = ( /obj/effect/landmark/observer_start, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/cobble/mossy, @@ -1314,7 +1307,7 @@ /area/rogue/under/town/basement) "bfl" = ( /obj/structure/chair/stool/rogue, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/ruinedwood{ @@ -1335,7 +1328,7 @@ dir = 10; icon_state = "largetable" }, -/obj/item/rogueweapon/huntingknife/cleaver{ +/obj/item/rogueweapon/knife/cleaver{ pixel_y = 4 }, /turf/open/floor/rogue/tile{ @@ -1365,18 +1358,6 @@ /obj/item/candle/yellow, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/tavern) -"biS" = ( -/obj/structure/closet/crate/roguecloset{ - lockid = "butler" - }, -/obj/item/alch/earthdust, -/obj/item/alch/firedust, -/obj/item/alch/magicdust, -/obj/item/alch/waterdust, -/obj/item/alch/airdust, -/obj/item/alch/feaudust, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) "biU" = ( /obj/machinery/light/rogue/firebowl, /obj/effect/decal/cleanable/dirt/dust, @@ -1407,7 +1388,7 @@ /turf/open/floor/rogue/church, /area/rogue/indoors/town/church/chapel) "blC" = ( -/obj/item/roguebin/crackers, +/obj/structure/closet/crate/chest/crate/steward/hardtack, /turf/open/floor/rogue/tile/kitchen, /area/rogue/indoors/town/church/chapel) "blR" = ( @@ -1423,7 +1404,7 @@ /turf/open/floor/rogue/twig, /area/rogue/indoors/town) "bmI" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/structure/mineral_door/wood{ @@ -1552,9 +1533,9 @@ }, /area/rogue/under/town/basement) "bvv" = ( -/obj/structure/bookcase, /obj/item/book/rogue/abyssor, /obj/item/book/rogue/sword, +/obj/structure/bookcase/random, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town) "bvK" = ( @@ -1611,7 +1592,7 @@ /area/rogue/indoors/town) "bzI" = ( /obj/machinery/light/rogue/torchholder/c, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/cobblerock, @@ -1625,7 +1606,7 @@ /area/rogue/outdoors/town) "bAa" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/twig, @@ -1676,7 +1657,7 @@ /turf/open/transparent/openspace, /area/rogue/outdoors/mountains) "bCZ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/mineral_door/bars{ @@ -1713,7 +1694,7 @@ /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) "bFV" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/closed/wall/mineral/rogue/wooddark, @@ -1759,7 +1740,7 @@ /turf/open/water/swamp/deep, /area/rogue/outdoors/river) "bIu" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "bIP" = ( @@ -1795,7 +1776,7 @@ /area/rogue/indoors/town) "bJt" = ( /obj/machinery/light/rogue/torchholder/c, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/cobble/mossy, @@ -1858,6 +1839,14 @@ }, /turf/open/floor/rogue/tile, /area/rogue/indoors/town/bath) +"bMe" = ( +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" + }, +/area/rogue/indoors/town/magician) "bMg" = ( /obj/structure/chair/bench/ultimacouch, /turf/open/floor/rogue/woodturned, @@ -1875,7 +1864,7 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "bMR" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/ruinedwood{ @@ -1891,10 +1880,10 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/tavern) "bNp" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/cobble/mossy, @@ -1932,7 +1921,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town) "bPe" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /obj/effect/decal/cleanable/dirt/dust, @@ -2018,12 +2007,7 @@ /turf/open/floor/rogue/tile/bath, /area/rogue/indoors/town/bath) "bUw" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "tablewood1" - }, -/obj/item/mortar, -/obj/item/pestle, +/obj/structure/bookcase/random, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "bUB" = ( @@ -2068,7 +2052,7 @@ /turf/open/floor/rogue/twig, /area/rogue/indoors/town) "bWP" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/machinery/light/rogue/wallfire/candle/r, @@ -2082,7 +2066,7 @@ /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/rtfield) "bXl" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/machinery/light/rogue/torchholder/r, @@ -2111,10 +2095,6 @@ /obj/item/cooking/pan, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/garrison) -"bYN" = ( -/obj/structure/closet/crate/roguecloset/dark, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) "bYR" = ( /obj/structure/bed/rogue/shit, /obj/effect/decal/cleanable/dirt/dust, @@ -2127,15 +2107,14 @@ /area/rogue/indoors/town/magician) "bZm" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/alch/earthdust, -/obj/item/alch/airdust, -/obj/item/alch/waterdust, -/obj/item/alch/waterdust, -/obj/item/alch/firedust, -/obj/item/alch/magicdust, -/obj/item/alch/bone, +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/natural/chaff/wheat, +/obj/item/natural/chaff/wheat, +/obj/item/natural/chaff/wheat, /obj/item/alch/sinew, +/obj/item/alch/sinew, +/obj/item/alch/viscera, +/obj/item/alch/seeddust, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -2144,10 +2123,10 @@ /turf/closed/indestructible/wooddark/mast, /area/rogue/outdoors/coast) "bZP" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/cobblerock, @@ -2226,9 +2205,9 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "chq" = ( -/obj/structure/bookcase, /obj/item/book/rogue/robber, /obj/item/book/rogue/sword, +/obj/structure/bookcase/random, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "chu" = ( @@ -2311,6 +2290,7 @@ /obj/structure/table/wood{ icon_state = "map3" }, +/obj/item/reagent_containers/glass/cup/golden, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/manor) "clr" = ( @@ -2323,7 +2303,7 @@ /obj/structure/closet/crate/roguecloset/crafted, /obj/item/broom, /obj/item/natural/cloth, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/woodturned, @@ -2364,7 +2344,7 @@ /area/rogue/indoors/town/tavern) "cmV" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/fluff/telescope, +/obj/structure/bookcase/random/myths, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/magician) "cnb" = ( @@ -2379,7 +2359,7 @@ /obj/item/natural/bundle/stick{ pixel_y = 37 }, -/obj/item/kitchen/rollingpin, +/obj/item/rogueweapon/mace/woodclub/rollingpin, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/tavern) "cnf" = ( @@ -2428,13 +2408,12 @@ /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/garrison) "cpF" = ( -/obj/machinery/light/rogue/wallfire/candle/blue, /turf/open/floor/rogue/tile{ icon_state = "glyph4" }, /area/rogue/indoors/town/vault) "cpS" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/cobble/mossy, @@ -2492,7 +2471,7 @@ dir = 9; icon_state = "largetable" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/ruinedwood{ @@ -2567,7 +2546,7 @@ "cvv" = ( /obj/machinery/light/rogue/torchholder/r, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/blocks, @@ -2607,7 +2586,7 @@ /turf/open/floor/rogue/ruinedwood/chevron, /area/rogue/indoors/ship) "cwe" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/rooftop{ @@ -2621,6 +2600,13 @@ icon_state = "chess" }, /area/rogue/indoors/town/dwarfin) +"cwU" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/roguebin/water/gross, +/turf/open/floor/rogue/tile/masonic{ + dir = 1 + }, +/area/rogue/indoors/town/manor) "cwX" = ( /obj/structure/fluff/railing/border{ dir = 4 @@ -2666,7 +2652,7 @@ /turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "cyk" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) "cyB" = ( @@ -2781,7 +2767,7 @@ lockid = "veteran"; name = "Veteran's House" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/ruinedwood{ @@ -2828,10 +2814,10 @@ desc = "A sign for a local inn."; name = "Inn sign" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/cobble/mossy, @@ -2878,7 +2864,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "cIF" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/fermenting_barrel/random/water, @@ -2910,7 +2896,7 @@ /turf/closed/wall/mineral/rogue/stone, /area/rogue/indoors/town/garrison) "cKt" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/tile{ @@ -3049,19 +3035,15 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/tile/bfloorz, /area/rogue/indoors/town/bath) -"cQZ" = ( -/obj/effect/landmark/start/orphan, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) "cRF" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "cRT" = ( /obj/structure/fermenting_barrel/water, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/blocks, @@ -3174,7 +3156,7 @@ /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/church) "cYb" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/machinery/light/rogue/torchholder/r, @@ -3249,7 +3231,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "dby" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/twig, @@ -3265,7 +3247,7 @@ "dck" = ( /obj/machinery/light/rogue/torchholder/l, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "dcP" = ( @@ -3354,10 +3336,10 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/coast) "dfh" = ( -/obj/structure/bookcase, /obj/item/book/rogue/bookofpriests, /obj/item/book/rogue/blackmountain, /obj/effect/decal/cleanable/dirt/dust, +/obj/structure/bookcase/random, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "dfo" = ( @@ -3372,7 +3354,7 @@ }, /area/rogue/indoors/town/shop) "dfy" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/cobblerock, @@ -3404,7 +3386,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "did" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/ruinedwood{ @@ -3412,7 +3394,7 @@ }, /area/rogue/indoors/town/magician) "diq" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/cobble/mossy, @@ -3446,7 +3428,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "djz" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/cobblerock, @@ -3560,7 +3542,7 @@ /area/rogue/indoors/town/manor) "dqu" = ( /obj/structure/flora/roguegrass/bush/wall, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/blocks, @@ -3580,7 +3562,7 @@ /obj/machinery/light/rogue/torchholder/r{ dir = 1 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/cobblerock, @@ -3623,7 +3605,7 @@ /area/rogue/outdoors/rtfield) "dvf" = ( /obj/machinery/light/rogue/torchholder/l, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -3660,7 +3642,7 @@ /area/rogue/indoors/town/church/chapel) "dyb" = ( /obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -3681,7 +3663,7 @@ }, /area/rogue/outdoors/rtfield) "dyu" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/ruinedwood{ @@ -3829,7 +3811,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "dGX" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/garrison) "dHl" = ( @@ -3894,7 +3876,7 @@ "dKq" = ( /obj/structure/rack/rogue, /obj/item/rogueweapon/mace/cudgel, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/blocks, @@ -3944,7 +3926,7 @@ /turf/closed/wall/mineral/rogue/wood, /area/rogue/indoors/town) "dNl" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/effect/spawner/roguemap/grass_low, @@ -3967,7 +3949,7 @@ /turf/open/floor/rogue/blocks/green, /area/rogue/under/town/basement) "dOx" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/machinery/light/rogue/oven/east, @@ -3982,7 +3964,9 @@ }, /area/rogue/outdoors/town/roofs) "dPv" = ( -/obj/machinery/light/rogue/wallfire/candle, +/obj/machinery/light/rogue/wallfire{ + pixel_y = 32 + }, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -4030,7 +4014,7 @@ /area/rogue/indoors/town) "dRa" = ( /obj/machinery/light/rogue/firebowl/church, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -4044,7 +4028,7 @@ /obj/structure/rack/rogue, /obj/item/rogueweapon/hoe, /obj/item/rogueweapon/hoe, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -4057,10 +4041,10 @@ /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/magician) "dRD" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/cobblerock, @@ -4080,7 +4064,7 @@ /turf/open/floor/rogue/concrete, /area/rogue/indoors/town/shop) "dRZ" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "dSe" = ( @@ -4096,7 +4080,7 @@ /turf/open/floor/rogue/wood, /area/rogue/outdoors/town) "dTw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/cobblerock, @@ -4105,7 +4089,7 @@ /obj/structure/rack/rogue, /obj/item/rogueweapon/pitchfork, /obj/item/rogueweapon/pitchfork, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/ruinedwood{ @@ -4141,7 +4125,7 @@ /turf/open/floor/rogue/twig, /area/rogue/indoors/town) "dVw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/machinery/light/rogue/wallfire/candle, @@ -4232,7 +4216,7 @@ /area/rogue/indoors/town/shop) "dYs" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/blocks, @@ -4329,7 +4313,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "ees" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -4405,13 +4389,17 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/dwarfin) "ehD" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/reagent_containers/glass/bottle/formaldehyde, -/obj/item/reagent_containers/powder/spice, -/obj/item/reagent_containers/powder/spice, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed_dried, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed_dried, -/obj/item/reagent_containers/glass/bottle/rogue/poison, +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/alch/airdust, +/obj/item/alch/airdust, +/obj/item/alch/earthdust, +/obj/item/alch/earthdust, +/obj/item/alch/firedust, +/obj/item/alch/firedust, +/obj/item/alch/runedust, +/obj/item/alch/waterdust, +/obj/item/alch/waterdust, +/obj/item/alch/feaudust, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -4434,7 +4422,7 @@ }, /area/rogue/outdoors/town/roofs) "ejy" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/bars/cemetery, @@ -4467,7 +4455,7 @@ /turf/open/water/sewer, /area/rogue/under/town/basement) "ekq" = ( -/obj/structure/closet/crate/chest/neu_fancy, +/obj/structure/rack/rogue, /obj/item/roguecoin/gold/pile, /turf/open/floor/rogue/tile{ icon_state = "linoleum" @@ -4496,7 +4484,7 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/bath) "emB" = ( -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "end" = ( @@ -4509,8 +4497,8 @@ /turf/open/floor/rogue/cobblerock, /area/rogue/indoors/town) "enB" = ( -/obj/effect/decal/cobbleedge, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu, +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/cobble/mossy, @@ -4538,13 +4526,9 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "eoO" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, -/obj/effect/landmark/start/grabber{ - dir = 4; - name = "Stevedore" - }, /turf/open/floor/rogue/twig, /area/rogue/indoors/town) "epe" = ( @@ -4735,7 +4719,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/rtfield) "ezZ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/dirt/road, @@ -4793,9 +4777,9 @@ /area/rogue/indoors/town/church) "eEP" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/idagger, -/obj/item/rogueweapon/huntingknife/idagger, -/obj/item/rogueweapon/huntingknife/idagger, +/obj/item/rogueweapon/knife/dagger, +/obj/item/rogueweapon/knife/dagger, +/obj/item/rogueweapon/knife/dagger, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "eGr" = ( @@ -4815,10 +4799,10 @@ /turf/open/transparent/openspace, /area/rogue/indoors/town/manor) "eHX" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/cobblerock, @@ -4827,7 +4811,7 @@ /turf/closed/wall/mineral/rogue/tent, /area/rogue/indoors) "eIt" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -4946,6 +4930,11 @@ dir = 1 }, /area/rogue/indoors/town) +"eNw" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/roguebin/water/gross, +/turf/open/floor/rogue/tile/masonic, +/area/rogue/indoors/town/manor) "eNS" = ( /turf/open/floor/rogue/tile/masonic{ dir = 4 @@ -5055,7 +5044,7 @@ /turf/closed/mineral/rogue/bedrock, /area/rogue/outdoors/rtfield) "eUQ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -5096,14 +5085,14 @@ "eVL" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/crate/chest/neu, -/obj/item/rogueweapon/huntingknife/cleaver/combat, -/obj/item/rogueweapon/huntingknife/idagger/silver, -/obj/item/rogueweapon/huntingknife/idagger/steel, +/obj/item/rogueweapon/knife/cleaver/combat, +/obj/item/rogueweapon/knife/dagger/silver, +/obj/item/rogueweapon/knife/dagger/steel, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/shop) "eVS" = ( /obj/effect/spawner/roguemap/hauntz_random, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, @@ -5139,7 +5128,7 @@ dir = 1; icon_state = "border" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -5151,6 +5140,8 @@ /obj/structure/closet/crate/roguecloset{ lockid = "butler" }, +/obj/item/natural/cloth, +/obj/item/bath/soap, /turf/open/floor/rogue/tile{ icon_state = "chess" }, @@ -5165,7 +5156,7 @@ /turf/open/water/swamp, /area/rogue/under/cave) "eZI" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -5262,7 +5253,7 @@ lockid = "merchant"; name = "Merchant's Shop" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/wood, @@ -5284,6 +5275,9 @@ icon_state = "weird1" }, /area/rogue/indoors/town/magician) +"few" = ( +/turf/open/water/swamp, +/area/rogue/outdoors/rtfield) "feH" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/rogue/wallfire/candle/r, @@ -5292,7 +5286,7 @@ }, /area/rogue/indoors/town/manor) "feY" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/roguemachine/mail/r, @@ -5385,10 +5379,10 @@ /area/rogue/indoors/town/church/chapel) "fje" = ( /obj/structure/rack/rogue/shelf/biggest, -/obj/item/clothing/mask/cigarette/rollie/mindbreaker{ +/obj/item/clothing/mask/cigarette/rollie/nicotine{ pixel_y = 8 }, -/obj/item/clothing/mask/cigarette/rollie/mindbreaker{ +/obj/item/clothing/mask/cigarette/rollie/nicotine{ pixel_y = 8 }, /obj/item/clothing/mask/cigarette/pipe/crafted{ @@ -5446,11 +5440,11 @@ /area/rogue/indoors/town/dwarfin) "fmT" = ( /obj/structure/closet/crate/chest/crate, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed_dried, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed, +/obj/item/reagent_containers/food/snacks/produce/swampweed_dried, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/swampweed, +/obj/item/reagent_containers/food/snacks/produce/swampweed, /obj/item/clothing/mask/cigarette/pipe/crafted, /obj/item/reagent_containers/powder/spice, /obj/item/reagent_containers/powder/spice, @@ -5462,7 +5456,6 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/dwarfin) "fnn" = ( -/obj/item/roguebin/water, /obj/machinery/light/rogue/wallfire/candle/r, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/tile{ @@ -5530,7 +5523,7 @@ dir = 1; icon_state = "tablewood1" }, -/obj/item/rogueweapon/huntingknife/idagger{ +/obj/item/rogueweapon/knife/dagger{ pixel_x = 2; pixel_y = 6 }, @@ -5576,7 +5569,7 @@ dir = 1; icon_state = "border" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -5634,7 +5627,7 @@ /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/church/chapel) "fzp" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/cobblerock, @@ -5702,7 +5695,7 @@ }, /area/rogue/indoors/town) "fBB" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, @@ -5715,7 +5708,7 @@ /turf/closed/wall/mineral/rogue/wooddark/window, /area/rogue/indoors/town) "fCg" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, @@ -5759,10 +5752,10 @@ /area/rogue/indoors/town) "fFh" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/mace/wsword, -/obj/item/rogueweapon/mace/wsword, -/obj/item/rogueweapon/mace/wsword, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, +/obj/item/rogueweapon/mace/woodclub/train_sword, +/obj/item/rogueweapon/mace/woodclub/train_sword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -5795,7 +5788,7 @@ /area/rogue/outdoors/town) "fGv" = ( /obj/structure/flora/roguegrass/bush/wall, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/blocks, @@ -5878,17 +5871,15 @@ /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/rtfield) "fKY" = ( -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/crate/chest/neu, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/powder/salt, +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/alch/bonemeal, +/obj/item/alch/bonemeal, +/obj/item/alch/coaldust, +/obj/item/alch/irondust, +/obj/item/alch/silverdust, +/obj/item/alch/swampdust, +/obj/item/alch/tobaccodust, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -5899,7 +5890,7 @@ /area/rogue/indoors/town/dwarfin) "fLt" = ( /obj/machinery/light/rogue/torchholder/r, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/cobblerock, @@ -5959,7 +5950,7 @@ /turf/closed/wall/mineral/rogue/stone/window/moss, /area/rogue/indoors/town) "fOC" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -6007,14 +5998,6 @@ icon_state = "greenstone" }, /area/rogue/indoors/town/magician) -"fQF" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "tablewood2" - }, -/obj/item/clothing/neck/roguetown/psycross/silver/necra, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) "fQK" = ( /obj/machinery/light/rogue/torchholder/c, /obj/effect/decal/cleanable/dirt/dust, @@ -6066,7 +6049,7 @@ /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/bath) "fTZ" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -6141,7 +6124,7 @@ /obj/machinery/light/rogue/torchholder/l{ dir = 8 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/rooftop{ @@ -6182,7 +6165,7 @@ /area/rogue/indoors/town/tavern) "fZj" = ( /obj/machinery/light/rogue/torchholder/l, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/cobble/mossy, @@ -6200,7 +6183,6 @@ }, /obj/item/clothing/cloak/stole/red, /obj/item/clothing/cloak/chasuble, -/obj/item/rogueweapon/woodstaff/aries, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/church/chapel) "gao" = ( @@ -6320,7 +6302,7 @@ icon_state = "woodrailing" }, /obj/structure/fluff/railing/wood, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/cobblerock, @@ -6372,7 +6354,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "gjj" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/ruinedwood{ @@ -6424,7 +6406,7 @@ /area/rogue/indoors/town/bath) "gle" = ( /obj/effect/spawner/roguemap/hauntz_random, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/cobble/mossy, @@ -6454,10 +6436,9 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/shop) "gms" = ( -/obj/structure/bookcase, /obj/item/book/rogue/abyssor, /obj/item/book/rogue/tales3, -/obj/structure/bookcase, +/obj/structure/bookcase/random, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "gmt" = ( @@ -6522,7 +6503,7 @@ /area/rogue/outdoors/town/roofs) "goI" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) @@ -6548,7 +6529,7 @@ }, /area/rogue/outdoors/coast) "gpQ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/blocks, @@ -6730,11 +6711,6 @@ /obj/structure/plough, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) -"gzJ" = ( -/obj/effect/spawner/roguemap/grass_low, -/obj/effect/spawner/roguemap/grass_low, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/coast) "gzW" = ( /obj/structure/fluff/railing/border{ dir = 9; @@ -6848,7 +6824,7 @@ /area/rogue/indoors/town/church/chapel) "gGR" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/blocks, @@ -6972,7 +6948,7 @@ /area/rogue/indoors/town) "gMy" = ( /obj/effect/spawner/roguemap/grass_low, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/grass, @@ -7007,7 +6983,7 @@ /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) "gNq" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/curtain/bounty, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" @@ -7101,7 +7077,7 @@ }, /area/rogue/indoors/town) "gSm" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/cobblerock, @@ -7143,7 +7119,7 @@ /area/rogue/indoors/town/dwarfin) "gVe" = ( /obj/effect/spawner/roguemap/grass_low, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) "gVB" = ( @@ -7211,9 +7187,9 @@ /area/rogue/indoors/ship) "gZb" = ( /obj/structure/closet/crate/roguecloset/dark, -/obj/item/rogueweapon/huntingknife/idagger, -/obj/item/rogueweapon/mace/wsword, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/knife/dagger, +/obj/item/rogueweapon/mace/woodclub/train_sword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /obj/item/clothing/suit/roguetown/shirt/rags, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) @@ -7223,7 +7199,7 @@ lockid = "garrison"; name = "Supply Storage" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/blocks, @@ -7233,7 +7209,7 @@ /obj/structure/ladder{ pixel_y = 18 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/twig, @@ -7301,7 +7277,7 @@ /area/rogue/indoors/town) "hbw" = ( /obj/structure/chair/stool/rogue, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/ruinedwood{ @@ -7419,7 +7395,7 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/dwarfin) "hfG" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/structure/stairs{ dir = 8 }, @@ -7433,7 +7409,7 @@ /turf/open/floor/rogue/carpet/lord/right, /area/rogue/indoors/town/manor) "hhg" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/machinery/light/rogue/torchholder{ @@ -7443,7 +7419,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "hio" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/machinery/light/rogue/torchholder/l{ @@ -7476,7 +7452,7 @@ /area/rogue/indoors/town/shop) "hkd" = ( /obj/structure/chair/stool/rogue, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/cobble/mossy, @@ -7514,6 +7490,7 @@ /obj/item/clothing/head/roguetown/wizhat, /obj/item/clothing/shoes/roguetown/boots, /obj/item/clothing/shoes/roguetown/shortboots, +/obj/item/clothing/suit/roguetown/shirt/robe/courtmage, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/magician) "hmi" = ( @@ -7554,7 +7531,7 @@ dir = 4; icon_state = "churchslate" }, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/dirt/road, /area/rogue/under/town/basement) "hpm" = ( @@ -7578,7 +7555,7 @@ dir = 5; icon_state = "largetable" }, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/garrison) "hpC" = ( @@ -7628,7 +7605,7 @@ /area/rogue/indoors/town/magician) "hru" = ( /obj/machinery/light/rogue/wallfire/candle/r, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/ruinedwood{ @@ -7645,13 +7622,13 @@ /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "hrK" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "hrL" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/rooftop{ @@ -7739,8 +7716,8 @@ pixel_x = 3; pixel_y = -3 }, -/obj/item/rogueweapon/woodcut, -/obj/item/rogueweapon/spear{ +/obj/item/rogueweapon/axe/iron, +/obj/item/rogueweapon/polearm/spear{ pixel_x = -20; pixel_y = -14 }, @@ -7811,7 +7788,7 @@ dir = 4; icon_state = "woodrailing" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/cobblerock, @@ -7870,7 +7847,7 @@ /area/rogue/outdoors/rtfield) "hEt" = ( /obj/item/candle/yellow/lit/infinite{ - light_range = 1; + light_outer_range = 1; pixel_x = -8; pixel_y = 5 }, @@ -7885,7 +7862,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/tavern) "hEP" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/structure/mineral_door/wood{ locked = 1; lockid = "house8"; @@ -7972,7 +7949,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/garrison) "hIk" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -8092,7 +8069,7 @@ /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/rtfield) "hOY" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/ruinedwood{ @@ -8101,7 +8078,7 @@ /area/rogue/indoors/town) "hPn" = ( /obj/structure/roguemachine/scomm/l, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/cobblerock, @@ -8122,7 +8099,7 @@ /turf/open/floor/rogue/carpet, /area/rogue/under/town/basement) "hRp" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /obj/effect/decal/cleanable/dirt/dust, @@ -8159,7 +8136,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/tavern) "hTE" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/manor) "hTH" = ( @@ -8276,7 +8253,7 @@ /turf/open/floor/rogue/cobble/mossy, /area/rogue/under/town/basement) "hXZ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/ruinedwood{ @@ -8317,7 +8294,6 @@ /area/rogue/outdoors/town) "icI" = ( /obj/machinery/light/rogue/wallfire/candle/l, -/obj/structure/fermenting_barrel/water, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) @@ -8333,7 +8309,7 @@ }, /area/rogue/indoors/town/tavern) "icQ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/ruinedwood{ @@ -8360,11 +8336,7 @@ /area/rogue/under/town/sewer) "iee" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/crate/roguecloset{ - lockid = "butler" - }, -/obj/item/flashlight/flare/torch/metal, -/obj/item/flashlight/flare/torch/metal, +/obj/machinery/dye_bin, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "iel" = ( @@ -8397,7 +8369,7 @@ lockid = "garrison"; name = "Garrison" }, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/garrison) "ifY" = ( @@ -8444,6 +8416,7 @@ "iim" = ( /obj/structure/closet/crate/chest/neu_iron, /obj/item/clothing/neck/roguetown/talkstone, +/obj/item/scrying, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/magician) "iiy" = ( @@ -8513,7 +8486,7 @@ /area/rogue/outdoors/town/roofs) "imv" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/blocks, @@ -8526,7 +8499,7 @@ /turf/open/floor/rogue/ruinedwood/chevron, /area/rogue/indoors/ship) "ink" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -8569,7 +8542,8 @@ /area/rogue/indoors/town) "iql" = ( /obj/structure/closet/crate/chest/neu, -/obj/item/natural/chaff/oat, +/obj/item/reagent_containers/food/snacks/produce/oat, +/obj/item/reagent_containers/food/snacks/produce/oat, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town) "iqn" = ( @@ -8587,6 +8561,13 @@ /obj/effect/decal/cleanable/dirt/cobweb, /turf/open/floor/rogue/church, /area/rogue/indoors/town/church/chapel) +"iqM" = ( +/obj/structure/rack/rogue, +/obj/item/reagent_containers/glass/cup/golden, +/turf/open/floor/rogue/tile{ + icon_state = "linoleum" + }, +/area/rogue/indoors/town/vault) "iqT" = ( /obj/structure/fluff/railing/border{ dir = 6; @@ -8623,7 +8604,7 @@ /obj/structure/table/wood{ icon_state = "longtable" }, -/obj/item/rogueweapon/huntingknife/stoneknife, +/obj/item/rogueweapon/knife/stone, /obj/item/natural/stone{ pixel_x = -5; pixel_y = 9 @@ -8645,7 +8626,7 @@ /area/rogue/indoors/town/garrison) "iuz" = ( /obj/machinery/light/rogue/torchholder/l, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, @@ -8756,7 +8737,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/garrison) "iyO" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/cobble/mossy, @@ -8849,12 +8830,12 @@ /area/rogue/indoors/town/church/chapel) "iFg" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/spear{ +/obj/item/rogueweapon/polearm/spear{ pixel_x = -21; pixel_y = -10 }, /obj/item/rogueweapon/mace/spiked, -/obj/item/rogueweapon/sword/iron/messer, +/obj/item/rogueweapon/sword/scimitar/messer, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "iFR" = ( @@ -8866,13 +8847,13 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/tavern) "iGv" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) "iGw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/blocks, @@ -8921,7 +8902,7 @@ /turf/open/floor/rogue/tile/tilerg, /area/rogue/indoors/town) "iHZ" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/closed/wall/mineral/rogue/wooddark, /area/rogue/outdoors/town) "iIi" = ( @@ -8961,6 +8942,14 @@ /obj/machinery/light/rogue/torchholder/c, /turf/open/floor/rogue/ruinedwood/turned, /area/rogue/indoors/ship) +"iKm" = ( +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" + }, +/area/rogue/indoors/town/magician) "iKC" = ( /obj/structure/closet/crate/chest/neu, /obj/item/flashlight/flare/torch/lantern, @@ -9067,7 +9056,8 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/church/chapel) "iNR" = ( -/obj/item/roguecoin/gold/pile, +/obj/structure/rack/rogue, +/obj/item/roguegem/violet, /turf/open/floor/rogue/tile{ icon_state = "linoleum" }, @@ -9135,7 +9125,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "iRO" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/ruinedwood{ @@ -9166,10 +9156,7 @@ /turf/open/floor/rogue/cobble/mossy, /area/rogue/indoors/town/bath) "iSJ" = ( -/obj/structure/fluff/walldeco/innsign/trophy{ - desc = "A somewhat unfitting sign for a physician's office."; - name = "Medicae Office" - }, +/obj/structure/fluff/walldeco/feldshersign, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) "iSP" = ( @@ -9177,7 +9164,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "iTC" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/cobble/mossy, @@ -9220,7 +9207,7 @@ /turf/open/transparent/openspace, /area/rogue/outdoors/rtfield) "iVG" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /obj/structure/fluff/walldeco/customflag{ @@ -9273,7 +9260,7 @@ }, /area/rogue/under/town/basement) "iYg" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/machinery/light/rogue/wallfire/candle/l, @@ -9389,7 +9376,7 @@ /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/bath) "jeY" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -9403,9 +9390,18 @@ }, /area/rogue/indoors/town/garrison) "jfd" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/ruinedwood/turned, /area/rogue/indoors/town) +"jfg" = ( +/obj/structure/closet/crate/drawer/random, +/obj/item/clothing/suit/roguetown/shirt/undershirt/black, +/obj/item/clothing/under/roguetown/tights/black, +/obj/item/clothing/suit/roguetown/shirt/undershirt/random, +/obj/item/clothing/under/roguetown/tights/random, +/obj/item/clothing/suit/roguetown/shirt/robe/archivist, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/manor) "jfn" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/closed/wall/mineral/rogue/wooddark, @@ -9417,7 +9413,7 @@ /turf/open/floor/rogue/twig, /area/rogue/indoors/town) "jfC" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/bath) "jfK" = ( @@ -9447,7 +9443,7 @@ }, /area/rogue/indoors/town/manor) "jiD" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town) "jiG" = ( @@ -9647,6 +9643,9 @@ /obj/structure/fluff/railing/border{ dir = 4 }, +/obj/item/natural/bundle/glass, +/obj/item/natural/bundle/glass, +/obj/item/natural/bundle/glass, /turf/open/floor/rogue/tile{ icon_state = "chess" }, @@ -9864,30 +9863,30 @@ /area/rogue/outdoors/rtfield) "jIv" = ( /obj/structure/rack/rogue/shelf/biggest, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed_dried{ +/obj/item/reagent_containers/food/snacks/produce/swampweed_dried{ pixel_x = 4; pixel_y = -8 }, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed_dried{ +/obj/item/reagent_containers/food/snacks/produce/swampweed_dried{ pixel_x = 4; pixel_y = -8 }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed{ +/obj/item/reagent_containers/food/snacks/produce/dry_westleach{ pixel_x = -4; pixel_y = 8 }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed{ +/obj/item/reagent_containers/food/snacks/produce/dry_westleach{ pixel_x = -4; pixel_y = 8 }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed{ +/obj/item/reagent_containers/food/snacks/produce/dry_westleach{ pixel_x = -4; pixel_y = 8 }, /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/bath) "jIY" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -9932,7 +9931,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/manor) "jLc" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -9950,7 +9949,7 @@ /area/rogue/indoors/town/church/chapel) "jLG" = ( /obj/machinery/light/rogue/wallfire/candle/r, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/blocks, @@ -10046,7 +10045,7 @@ /obj/structure/fluff/walldeco/customflag{ pixel_y = 32 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/cobblerock, @@ -10060,7 +10059,7 @@ "jPT" = ( /obj/structure/fluff/statue/knight/interior, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/blocks, @@ -10417,7 +10416,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "kjH" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/ruinedwood{ @@ -10425,7 +10424,7 @@ }, /area/rogue/indoors/soilsons) "kjK" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/cobblerock, @@ -10567,7 +10566,7 @@ /area/rogue/indoors/town) "ktd" = ( /obj/effect/spawner/roguemap/grass_low, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -10600,7 +10599,7 @@ /area/rogue/outdoors/town/roofs) "ktR" = ( /obj/item/candle/yellow/lit/infinite{ - light_range = 1; + light_outer_range = 1; pixel_x = 8; pixel_y = 5 }, @@ -10718,8 +10717,8 @@ /area/rogue/indoors/town/church/chapel) "kzE" = ( /obj/structure/closet/crate/chest/crate, -/obj/item/rogueweapon/mace/wsword, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) "kzW" = ( @@ -10864,7 +10863,7 @@ /area/rogue/under/town/basement) "kGt" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/closed/wall/mineral/rogue/craftstone, @@ -10989,13 +10988,13 @@ }, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/rogue/wallfire/candle/r, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/church/chapel) "kLO" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /obj/structure/fluff/walldeco/customflag{ @@ -11071,7 +11070,7 @@ icon_state = "churchslate" }, /obj/structure/fluff/clodpile, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/dirt/road, @@ -11128,9 +11127,6 @@ /turf/closed/wall/mineral/rogue/wooddark, /area/rogue/outdoors/town) "kQf" = ( -/obj/structure/fluff/walldeco/painting{ - pixel_y = 32 - }, /turf/open/floor/rogue/tile{ icon_state = "glyph6" }, @@ -11144,7 +11140,7 @@ dir = 8; icon_state = "cart-empty" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/ruinedwood{ @@ -11167,7 +11163,7 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/bath) "kSx" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/closed/wall/mineral/rogue/craftstone, @@ -11212,7 +11208,7 @@ }, /area/rogue/indoors/town) "kTZ" = ( -/obj/item/kitchen/rollingpin, +/obj/item/rogueweapon/mace/woodclub/rollingpin, /obj/structure/closet/crate/chest/old_crate, /obj/item/storage/eggbasket, /turf/open/floor/rogue/cobble, @@ -11226,7 +11222,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "kUP" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/table/wood{ @@ -11238,7 +11234,7 @@ /area/rogue/indoors/town) "kUY" = ( /obj/structure/rack/rogue/shelf/biggest, -/obj/item/rogueweapon/spear/stone, +/obj/item/rogueweapon/polearm/spear/stone, /obj/item/rope, /obj/item/broom, /turf/open/floor/rogue/cobble, @@ -11295,7 +11291,7 @@ /turf/open/floor/rogue/tile/checker, /area/rogue/indoors/town/manor) "kXD" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "kXP" = ( @@ -11390,8 +11386,14 @@ icon_state = "weird1" }, /area/rogue/indoors/town/tavern) +"lbd" = ( +/obj/structure/bookcase/random, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" + }, +/area/rogue/indoors/town/magician) "lbf" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/bars{ icon_state = "barsbent"; layer = 2.81 @@ -11430,7 +11432,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/garrison) "lbV" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/fluff/railing/border{ @@ -11471,16 +11473,16 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "ldv" = ( -/obj/item/rogueweapon/spear{ +/obj/item/rogueweapon/polearm/spear{ pixel_x = -20; pixel_y = -14 }, /obj/structure/rack/rogue, -/obj/item/rogueweapon/sword/iron/messer{ +/obj/item/rogueweapon/sword/scimitar/messer{ pixel_x = -3; pixel_y = 2 }, -/obj/item/rogueweapon/sword/iron/short{ +/obj/item/rogueweapon/sword/short{ pixel_x = 2; pixel_y = -2 }, @@ -11522,7 +11524,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/tavern) "lgj" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/grass, @@ -11552,7 +11554,7 @@ /turf/closed/mineral/rogue/bedrock, /area/rogue/indoors/shelter/mountains) "liy" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/ruinedwood/spiral, @@ -11617,13 +11619,13 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/outdoors/mountains) "llw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "lly" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/tile{ @@ -11758,7 +11760,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "lsP" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/chair/bench, @@ -11770,7 +11772,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "ltm" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/chair/bench, @@ -11896,7 +11898,7 @@ /area/rogue/indoors/town) "lyu" = ( /obj/machinery/light/rogue/firebowl/stump, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/rooftop{ @@ -11909,7 +11911,7 @@ /turf/closed/mineral/rogue/bedrock, /area/rogue/under/cave) "lAb" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/rooftop{ @@ -11924,6 +11926,14 @@ }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) +"lAC" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack/rogue, +/obj/item/roguestatue/gold/loot, +/turf/open/floor/rogue/tile{ + icon_state = "linoleum" + }, +/area/rogue/indoors/town/vault) "lAK" = ( /obj/structure/fluff/railing/wood{ dir = 4; @@ -11937,6 +11947,7 @@ /area/rogue/indoors/town) "lBm" = ( /obj/machinery/light/rogue/wallfire/candle/r, +/obj/structure/bookcase/random/apocrypha, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/magician) "lBF" = ( @@ -11968,7 +11979,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "lCs" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/cobble, @@ -12027,13 +12038,9 @@ }, /area/rogue/indoors/town/dwarfin) "lHa" = ( -/obj/effect/landmark/start/gravedigger{ - dir = 8 - }, -/obj/structure/bed/rogue, /obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) +/turf/closed/mineral/rogue/bedrock, +/area/rogue/under/cave) "lHe" = ( /obj/machinery/light/rogue/firebowl/standing, /obj/structure/fluff/railing/border{ @@ -12103,7 +12110,7 @@ }, /area/rogue/under/town/basement) "lKj" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/machinery/light/rogue/torchholder{ @@ -12146,7 +12153,7 @@ icon_state = "longtable" }, /obj/effect/decal/cleanable/dirt/dust, -/obj/item/rogueweapon/sword/rapier/lord, +/obj/item/rogueweapon/sword/sabre/lord, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -12160,7 +12167,7 @@ /area/rogue/indoors/town/church/chapel) "lMc" = ( /obj/machinery/light/rogue/wallfire/candle, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/twig, @@ -12236,8 +12243,8 @@ dir = 1; icon_state = "longtable" }, -/obj/item/rogueweapon/huntingknife/cleaver, -/obj/item/kitchen/rollingpin, +/obj/item/rogueweapon/knife/cleaver, +/obj/item/rogueweapon/mace/woodclub/rollingpin, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/church/chapel) "lQC" = ( @@ -12275,7 +12282,7 @@ /obj/structure/fluff/walldeco/customflag{ pixel_y = 32 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/cobblerock, @@ -12331,17 +12338,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/carpet/red, /area/rogue/indoors/town) -"lTt" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/table/wood{ - dir = 1; - icon_state = "tablewood1" - }, -/obj/item/natural/feather, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) "lTw" = ( /obj/structure/chair/bench/ultimacouch/r{ icon_state = "ultimacochright" @@ -12356,7 +12352,7 @@ /turf/open/floor/rogue/ruinedwood/turned, /area/rogue/indoors/ship) "lVW" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/bars/cemetery, @@ -12407,7 +12403,7 @@ /turf/open/floor/carpet/inn, /area/rogue/indoors/town/bath) "lZp" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/structure/fluff/railing/wood{ @@ -12437,7 +12433,7 @@ }, /area/rogue/outdoors/town/roofs) "lZS" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -12496,7 +12492,7 @@ /turf/open/floor/rogue/carpet, /area/rogue/under/town/basement) "mdn" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/grass, @@ -12521,7 +12517,7 @@ dir = 4; icon_state = "churchslate" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/dirt/road, @@ -12551,7 +12547,7 @@ /area/rogue/indoors/town/bath) "mhH" = ( /obj/structure/closet/crate/chest/neu, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /obj/effect/decal/cleanable/dirt/dust, /obj/item/cooking/pan, /turf/open/floor/rogue/woodturned, @@ -12621,9 +12617,9 @@ /turf/open/transparent/openspace, /area/rogue/outdoors/mountains) "mmv" = ( -/obj/structure/bookcase, /obj/item/book/rogue/nitebeast, /obj/item/book/rogue/noc, +/obj/structure/bookcase/random/thesis, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "mmR" = ( @@ -12639,7 +12635,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "mnA" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/soilsons) "mnC" = ( @@ -12656,7 +12652,7 @@ /area/rogue/outdoors/rtfield) "mnO" = ( /obj/structure/ladder, -/turf/open/floor/rogue/grass, +/turf/open/floor/rogue/naturalstone, /area/rogue/outdoors/coast) "moy" = ( /obj/structure/fluff/statue/tdummy, @@ -12790,7 +12786,16 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/dwarfin) "mwX" = ( -/obj/item/roguebin/water, +/obj/structure/closet/crate/roguecloset{ + lockid = "butler" + }, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "mxu" = ( @@ -12830,7 +12835,7 @@ /area/rogue/indoors/town/garrison) "myw" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/blocks, @@ -12879,7 +12884,7 @@ /area/rogue/indoors/town/shop) "mCu" = ( /obj/structure/fluff/statue{ - name = "The Veiled Lady" + name = "The Undermaiden" }, /obj/structure/flora/ausbushes/sparsegrass, /turf/open/floor/rogue/dirt/road, @@ -12902,10 +12907,10 @@ /turf/open/floor/rogue/wood, /area/rogue/outdoors/town) "mEu" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/dirt/road, @@ -12970,7 +12975,7 @@ /area/rogue/indoors/town/church) "mIV" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/blocks, @@ -13041,7 +13046,7 @@ /area/rogue/indoors/town/dwarfin) "mNt" = ( /obj/structure/fluff/statue/knight, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/cobble/mossy, @@ -13104,7 +13109,7 @@ }, /area/rogue/indoors/town/tavern) "mRK" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -13115,11 +13120,11 @@ /area/rogue/indoors/town/manor) "mRQ" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/table/wood/bar, +/obj/structure/table/wood, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/bath) "mSm" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/structure/chair/wood/rogue/fancy{ @@ -13158,6 +13163,13 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/tavern) +"mUf" = ( +/obj/item/roguegem/yellow, +/obj/structure/rack/rogue, +/turf/open/floor/rogue/tile{ + icon_state = "linoleum" + }, +/area/rogue/indoors/town/vault) "mUJ" = ( /obj/structure/table/wood{ dir = 5; @@ -13168,7 +13180,7 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/dwarfin) "mVc" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/dirt/ambush, @@ -13250,7 +13262,7 @@ /area/rogue/under/town/basement) "nac" = ( /obj/effect/spawner/roguemap/grass_low, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/dirt/road, @@ -13294,7 +13306,7 @@ /turf/open/floor/rogue/tile/bfloorz, /area/rogue/indoors/town/bath) "nbc" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/blocks, @@ -13346,6 +13358,12 @@ icon_state = "horzw" }, /area/rogue/indoors/soilsons) +"nbX" = ( +/obj/structure/rack/rogue, +/turf/open/floor/rogue/tile{ + icon_state = "linoleum" + }, +/area/rogue/indoors/town/vault) "ncc" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/mineral_door/wood{ @@ -13447,7 +13465,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/garrison) "nhn" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/blocks, @@ -13490,7 +13508,7 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/bath) "njO" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/effect/decal/cleanable/dirt/dust, @@ -13708,6 +13726,9 @@ /area/rogue/outdoors/town) "nvq" = ( /obj/structure/closet/crate/chest/old_crate, +/obj/item/reagent_containers/food/snacks/rogue/crackerscooked{ + pixel_y = -1 + }, /obj/item/reagent_containers/food/snacks/rogue/crackerscooked, /turf/open/floor/rogue/carpet, /area/rogue/under/town/basement) @@ -13814,7 +13835,7 @@ }, /area/rogue/indoors/town/tavern) "nCp" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt, @@ -13869,7 +13890,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) "nGn" = ( -/obj/structure/fermenting_barrel/random/water, +/obj/structure/fermenting_barrel/water, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/magician) "nGr" = ( @@ -13918,7 +13939,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "nIJ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/ruinedwood{ @@ -13984,7 +14005,7 @@ /turf/open/floor/rogue/ruinedwood, /area/rogue/outdoors/town/roofs) "nPa" = ( -/obj/machinery/light/rogue/cauldron, +/obj/machinery/printingpress, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "nPl" = ( @@ -13993,7 +14014,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/manor) "nPH" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/effect/decal/cleanable/dirt/dust, @@ -14008,7 +14029,6 @@ dir = 1; icon_state = "longtable" }, -/obj/item/roguekey/lord, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -14134,7 +14154,7 @@ }, /area/rogue/indoors/town/dwarfin) "nUq" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/cobble/mossy, @@ -14162,7 +14182,7 @@ /turf/open/floor/rogue/ruinedwood/chevron, /area/rogue/indoors/ship) "nVa" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/ladder, @@ -14176,7 +14196,7 @@ icon_state = "churchslate" }, /obj/structure/fluff/clodpile, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/dirt/road, /area/rogue/under/town/basement) "nVL" = ( @@ -14219,7 +14239,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) "nXm" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/bars/passage/shutter{ redstone_id = "weaponsmith_shutter" }, @@ -14237,6 +14257,10 @@ /obj/structure/roguemachine/mail, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/dwarfin) +"nYa" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield) "nYu" = ( /turf/open/floor/rogue/twig, /area/rogue/under/town/basement) @@ -14405,7 +14429,7 @@ /turf/open/floor/rogue/ruinedwood/turned, /area/rogue/indoors/ship) "ofl" = ( -/obj/item/roguestatue/gold/loot, +/obj/machinery/light/rogue/torchholder/c, /turf/open/floor/rogue/tile{ icon_state = "linoleum" }, @@ -14420,7 +14444,7 @@ /turf/open/floor/rogue/concrete, /area/rogue/indoors/town/shop) "ofv" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/structure/roguemachine/scomm, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) @@ -14537,6 +14561,11 @@ /obj/structure/flora/newtree, /turf/open/floor/rogue/grass, /area/rogue/outdoors/rtfield) +"omK" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/fluff/telescope, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/magician) "omO" = ( /obj/structure/chair/stool/rogue, /obj/effect/decal/cleanable/dirt/dust, @@ -14709,7 +14738,7 @@ }, /area/rogue/indoors/town) "otU" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/tile{ @@ -14827,14 +14856,11 @@ /area/rogue/indoors/town) "oAa" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/fluff/dryingrack, -/turf/open/floor/rogue/blocks, +/turf/closed/wall/mineral/rogue/craftstone, /area/rogue/under/town/basement) "oBf" = ( /obj/machinery/light/rogue/cauldron, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, +/turf/open/floor/rogue/cobble, /area/rogue/indoors/town/magician) "oBl" = ( /obj/structure/fluff/railing/border, @@ -14853,7 +14879,7 @@ }, /area/rogue/indoors/town/manor) "oCz" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/dirt/road, @@ -14912,7 +14938,7 @@ density = 0 }, /obj/machinery/light/rogue/wallfire/candle/l, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/blocks, @@ -14999,7 +15025,7 @@ /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/manor) "oHQ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/effect/decal/cleanable/dirt/dust, @@ -15116,7 +15142,7 @@ /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/dwarfin) "oOz" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/rack/rogue/shelf/big, @@ -15127,7 +15153,11 @@ /turf/closed/indestructible/wooddark, /area/rogue/indoors/ship) "oQa" = ( -/obj/item/rogue/painting/queen, +/obj/structure/table/wood/nice/decorated, +/obj/item/clothing/head/roguetown/crown/serpcrown/surplus, +/obj/structure/fluff/walldeco/painting{ + pixel_y = 32 + }, /turf/open/floor/rogue/tile{ icon_state = "glyph5" }, @@ -15432,7 +15462,7 @@ /turf/open/floor/carpet/purple, /area/rogue/indoors/town/bath) "peK" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/rooftop{ @@ -15454,7 +15484,7 @@ }, /area/rogue/outdoors/rtfield) "pfY" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/curtain/bounty, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" @@ -15488,8 +15518,8 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/shop) "phf" = ( -/obj/effect/decal/cobbleedge, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu, +/obj/effect/decal/turfedge_neu{ dir = 1 }, /obj/structure/bars/cemetery, @@ -15499,7 +15529,7 @@ /turf/open/floor/rogue/greenstone, /area/rogue/under/town/sewer) "phM" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/structure/table/wood{ dir = 1; icon_state = "tablewood1" @@ -15529,10 +15559,11 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "pjc" = ( -/obj/item/roguecoin/silver/pile, -/obj/structure/closet/crate/chest/neu_fancy, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack/rogue, +/obj/item/roguegem/blue, /turf/open/floor/rogue/tile{ - icon_state = "chess" + icon_state = "linoleum" }, /area/rogue/indoors/town/vault) "pjj" = ( @@ -15572,7 +15603,7 @@ /turf/closed/wall/mineral/rogue/stonebrick, /area/rogue/indoors/town) "pkP" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/machinery/light/rogue/torchholder/c, /turf/open/floor/rogue/cobble/mossy, /area/rogue/outdoors/town) @@ -15598,13 +15629,6 @@ icon_state = "weird1" }, /area/rogue/indoors/town/dwarfin) -"plh" = ( -/obj/item/roguebin/water, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) "plr" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/crate/chest, @@ -15620,7 +15644,7 @@ /area/rogue/indoors/town/church) "plz" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/cobblerock, @@ -15699,10 +15723,10 @@ }, /area/rogue/indoors/soilsons) "poC" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/cobble/mossy, @@ -15714,7 +15738,7 @@ /obj/structure/fluff/walldeco/customflag{ pixel_y = 32 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/cobble/mossy, @@ -15731,12 +15755,12 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town) "ppf" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/cobble/mossy, /area/rogue/outdoors/town) "ppp" = ( /obj/effect/spawner/roguemap/grass_low, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/grass, @@ -15858,7 +15882,7 @@ /turf/open/floor/carpet/stellar, /area/rogue/indoors/town/shop) "pvv" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -15889,7 +15913,7 @@ /area/rogue/indoors/town) "pxz" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/ruinedwood{ @@ -15897,11 +15921,11 @@ }, /area/rogue/indoors/town) "pxM" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/tavern) "pya" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/closed, /area/rogue/indoors/soilsons) "pyj" = ( @@ -15965,7 +15989,7 @@ /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/bath) "pBa" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/machinery/light/rogue/torchholder/r, @@ -15996,11 +16020,11 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) "pCC" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) "pCF" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/ruinedwood/spiral, @@ -16032,7 +16056,7 @@ /turf/open/transparent/openspace, /area/rogue/indoors/town) "pEF" = ( -/obj/structure/closet/crate/chest, +/obj/structure/bookcase/random/thesis, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -16045,14 +16069,14 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/magician) "pGb" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, /area/rogue/indoors/town) "pGp" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/closet/crate/chest/old_crate, @@ -16086,6 +16110,8 @@ /area/rogue/outdoors/town) "pHf" = ( /obj/structure/rack/rogue/shelf/biggest, +/obj/item/broom, +/obj/item/natural/cloth, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "pHy" = ( @@ -16099,13 +16125,10 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/rtfield) "pIq" = ( -/obj/structure/rack/rogue/shelf/big, -/obj/item/natural/cloth, -/obj/item/natural/cloth, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/natural/feather, -/obj/item/flint, +/obj/structure/chair/wood/rogue/fancy{ + dir = 8; + icon_state = "chair1" + }, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "pIs" = ( @@ -16230,7 +16253,7 @@ /area/rogue/indoors/town/tavern) "pNU" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/blocks, @@ -16393,14 +16416,14 @@ dir = 1; icon_state = "tablewood1" }, -/obj/item/rogueweapon/sword/iron/short{ +/obj/item/rogueweapon/sword/short{ pixel_x = 6; pixel_y = 5 }, /obj/item/clothing/suit/roguetown/armor/cuirass/iron{ pixel_y = 15 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/ruinedwood{ @@ -16424,10 +16447,10 @@ /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/church) "pVe" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/cobblerock, @@ -16455,13 +16478,13 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/garrison) "pXr" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/cobble/mossy, /area/rogue/outdoors/town) "pXB" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/structure/mineral_door/wood{ @@ -16575,7 +16598,7 @@ icon_state = "wcv"; locked = 1; lockid = "manor"; - name = "Alchemical Storage" + name = "Printing Press" }, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) @@ -16776,7 +16799,7 @@ "qqS" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/roguemachine/scomm, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -16786,7 +16809,7 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/outdoors/mountains) "qrI" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/item/candle/skull{ @@ -16816,7 +16839,7 @@ }, /area/rogue/indoors/town/magician) "qsr" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/closed/wall/mineral/rogue/wooddark/window, /area/rogue/indoors/town/tavern) "qsO" = ( @@ -16869,7 +16892,7 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/dwarfin) "qvB" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/closed/wall/mineral/rogue/decowood/vert, @@ -16967,7 +16990,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "qBp" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/fermenting_barrel/water, @@ -16976,7 +16999,7 @@ "qBv" = ( /obj/structure/fluff/statue/knight/interior/r, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/blocks, @@ -17022,7 +17045,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/shop) "qEa" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/blocks, @@ -17062,7 +17085,7 @@ }, /area/rogue/indoors/town/garrison) "qGh" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/cobble/mossy, @@ -17146,10 +17169,10 @@ /turf/open/floor/rogue/churchmarble, /area/rogue/indoors/town/church/chapel) "qKL" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/cobble/mossy, @@ -17317,7 +17340,7 @@ /turf/open/floor/rogue/concrete, /area/rogue/indoors/town/garrison) "qVm" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/dirt, @@ -17369,8 +17392,9 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "qXs" = ( -/obj/structure/fermenting_barrel/random/water, /obj/machinery/light/rogue/torchholder/c, +/obj/structure/table/wood/plain, +/obj/item/natural/feather, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "qXF" = ( @@ -17489,12 +17513,12 @@ /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) "rbH" = ( -/obj/structure/bookcase, /obj/item/book/rogue/fishing, /obj/item/book/rogue/festus, /obj/item/book/rogue/cardgame, /obj/item/book/rogue/advice_soup, /obj/item/book/rogue/advice_farming, +/obj/structure/bookcase/random, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "rbM" = ( @@ -17696,7 +17720,7 @@ /turf/open/floor/rogue/concrete, /area/rogue/indoors/town/shop) "rkv" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -17815,7 +17839,7 @@ }, /area/rogue/under/town/basement) "ruM" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/structure/bed/rogue/wool, /obj/effect/landmark/start/monk, /turf/open/floor/rogue/ruinedwood/spiral, @@ -18030,7 +18054,7 @@ /turf/open/floor/rogue/twig, /area/rogue/under/town/basement) "rGD" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/rooftop{ dir = 2; icon_state = "roofg" @@ -18060,7 +18084,7 @@ /turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "rJM" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/cobblerock, @@ -18088,10 +18112,11 @@ pixel_x = 7; pixel_y = 12 }, +/obj/item/natural/feather, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/manor) "rLi" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -18224,7 +18249,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/garrison) "rQI" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -18318,7 +18343,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/church/chapel) "rUO" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/blocks, @@ -18385,7 +18410,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) "rZB" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/structure/table/wood{ @@ -18395,11 +18420,6 @@ /obj/structure/fluff/millstone, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town) -"sac" = ( -/obj/item/reagent_containers/glass/bucket/wooden/alter, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor) "sas" = ( /obj/structure/roguemachine/scomm/l, /turf/open/floor/rogue/cobblerock, @@ -18460,7 +18480,7 @@ /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/ship) "sbO" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/grass, @@ -18531,7 +18551,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/rtfield) "sgd" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/rooftop{ @@ -18555,7 +18575,7 @@ /turf/open/floor/rogue/tile/checker, /area/rogue/indoors/town/manor) "shu" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -18600,7 +18620,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/shop) "siW" = ( -/obj/effect/landmark/start/lady{ +/obj/effect/landmark/start/consort{ dir = 8 }, /turf/open/floor/carpet/royalblack, @@ -18613,7 +18633,7 @@ /turf/closed/wall/mineral/rogue/decowood, /area/rogue/indoors/town/tavern) "sjt" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/twig, /area/rogue/indoors/town) "sjE" = ( @@ -18646,7 +18666,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "slH" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/effect/decal/cleanable/dirt/dust, @@ -18682,7 +18702,7 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "sns" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -18709,7 +18729,7 @@ /obj/structure/fluff/walldeco/customflag{ pixel_y = 32 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -18843,7 +18863,7 @@ /area/rogue/indoors/town/tavern) "suJ" = ( /obj/structure/bars, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/blocks, @@ -18881,7 +18901,7 @@ /turf/open/transparent/openspace, /area/rogue/outdoors/town) "sxT" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/cobblerock, @@ -18929,17 +18949,17 @@ /turf/open/floor/rogue/grass, /area/rogue/indoors/town) "sBu" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/machinery/light/rogue/torchholder/c, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/garrison) "sCd" = ( -/obj/structure/bookcase, /obj/item/book/rogue/necra, /obj/item/book/rogue/law, /obj/item/book/rogue/knowledge1, +/obj/structure/bookcase/random, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "sCH" = ( @@ -18960,7 +18980,7 @@ dir = 9; icon_state = "largetable" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/twig, @@ -18996,7 +19016,7 @@ }, /area/rogue/indoors/town/church/chapel) "sEY" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -19115,13 +19135,13 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/garrison) "sKj" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "sKp" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/closed/wall/mineral/rogue/wooddark, @@ -19130,7 +19150,7 @@ /turf/closed/mineral/rogue/bedrock, /area/rogue/indoors/town) "sKX" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/blocks, @@ -19168,7 +19188,7 @@ dir = 1; icon_state = "longtable" }, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/blocks, /area/rogue/indoors/soilsons) "sMw" = ( @@ -19209,7 +19229,7 @@ }, /area/rogue/indoors/town/shop) "sOe" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/flora/roguegrass, @@ -19221,10 +19241,10 @@ /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/bath) "sQd" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/cobble/mossy, /area/rogue/outdoors/town) "sQg" = ( @@ -19238,7 +19258,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/tavern) "sQT" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) "sRc" = ( @@ -19318,7 +19338,7 @@ dir = 5; icon_state = "largetable" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/ruinedwood{ @@ -19387,7 +19407,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "sXr" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -19414,7 +19434,7 @@ lockid = "dungeon"; name = "Cells" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/blocks, @@ -19474,8 +19494,8 @@ /area/rogue/indoors/town/manor) "tcr" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/woodstaff, -/obj/item/rogueweapon/woodstaff, +/obj/item/rogueweapon/polearm/woodstaff, +/obj/item/rogueweapon/polearm/woodstaff, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -19494,8 +19514,8 @@ }, /area/rogue/indoors/town/manor) "tdc" = ( -/obj/structure/bookcase, /obj/item/book/rogue/law, +/obj/structure/bookcase/random, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town) "tdj" = ( @@ -19528,7 +19548,7 @@ /turf/open/transparent/openspace, /area/rogue/indoors/town/dwarfin) "teu" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/grass, @@ -19605,14 +19625,14 @@ /turf/open/floor/rogue/concrete, /area/rogue/indoors/town/garrison) "tgQ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/garrison) "tgW" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/effect/decal/cleanable/dirt/dust, @@ -19630,7 +19650,7 @@ /turf/open/floor/rogue/dirt/ambush, /area/rogue/outdoors/town) "tiq" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -19675,6 +19695,10 @@ /obj/item/needle/thorn, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) +"tjb" = ( +/obj/structure/fluff/globe, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/magician) "tjp" = ( /obj/structure/fluff/railing/border{ dir = 8; @@ -19731,7 +19755,7 @@ /turf/closed/wall/mineral/rogue/stone/moss, /area/rogue/indoors/town/garrison) "tlQ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/fluff/railing/border{ @@ -19747,6 +19771,9 @@ }, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) +"tmH" = ( +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/town) "tmR" = ( /obj/structure/closet/crate/roguecloset{ lockid = "butler" @@ -19843,10 +19870,10 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "trb" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/cobble/mossy, @@ -20019,7 +20046,7 @@ /turf/open/floor/rogue/grass, /area/rogue/under/cave) "tCz" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/grass, @@ -20052,14 +20079,14 @@ /turf/open/floor/rogue/ruinedwood, /area/rogue/outdoors/coast) "tDT" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town) "tEc" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/rooftop{ @@ -20068,7 +20095,7 @@ }, /area/rogue/outdoors/town/roofs) "tEu" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/ruinedwood{ @@ -20087,7 +20114,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town) "tFq" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/machinery/light/rogue/torchholder/c, @@ -20097,7 +20124,7 @@ /turf/open/floor/rogue/carpet, /area/rogue/under/town/basement) "tGe" = ( -/mob/living/carbon/human/species/goblin/npc/cave, +/mob/living/carbon/human/species/goblin/skilled/ambush/cave, /turf/open/floor/rogue/dirt/ambush, /area/rogue/under/cave) "tGm" = ( @@ -20223,7 +20250,7 @@ "tMR" = ( /obj/machinery/light/rogue/torchholder/c, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/soilsons) "tMX" = ( @@ -20244,7 +20271,7 @@ /turf/open/floor/rogue/blocks/green, /area/rogue/under/town/sewer) "tNQ" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/structure/closet/crate/roguecloset{ lockid = "butler" }, @@ -20346,7 +20373,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "tSz" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town) "tTu" = ( @@ -20380,7 +20407,7 @@ "tWo" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/blocks, @@ -20395,7 +20422,7 @@ /area/rogue/indoors/town) "tXo" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/tile{ @@ -20421,10 +20448,10 @@ /turf/open/transparent/openspace, /area/rogue/outdoors/mountains) "tYd" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/cobble/mossy, @@ -20441,7 +20468,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/dwarfin) "tYS" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/structure/handcart{ @@ -20491,7 +20518,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/tavern) "tZb" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/closed/wall/mineral/rogue/wooddark/vertical, /area/rogue/indoors/town) "tZq" = ( @@ -20545,14 +20572,14 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/dwarfin) "ues" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /obj/structure/table/wood{ dir = 9; icon_state = "largetable" }, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -20569,13 +20596,13 @@ }, /area/rogue/indoors/town) "ufv" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/twig, /area/rogue/indoors/town) "ufJ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/effect/decal/cleanable/dirt/dust, @@ -20613,10 +20640,10 @@ /obj/item/reagent_containers/glass/bowl, /obj/item/reagent_containers/glass/bowl, /obj/item/reagent_containers/glass/bowl, -/obj/item/rogueweapon/huntingknife/cleaver{ +/obj/item/rogueweapon/knife/cleaver{ pixel_x = 7 }, -/obj/item/kitchen/rollingpin, +/obj/item/rogueweapon/mace/woodclub/rollingpin, /turf/open/floor/rogue/tile/kitchen, /area/rogue/indoors/town/church/chapel) "uhw" = ( @@ -20691,13 +20718,13 @@ }, /area/rogue/under/town/basement) "unk" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/ambush, /area/rogue/outdoors/town) "unn" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/church/chapel) "unU" = ( @@ -20707,7 +20734,7 @@ /area/rogue/indoors/town/shop) "uob" = ( /obj/structure/bars, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/blocks, @@ -20726,9 +20753,6 @@ /area/rogue/indoors/town) "upc" = ( /obj/structure/bed/rogue/hay, -/obj/effect/landmark/start/grabber{ - name = "Stevedore" - }, /turf/open/floor/rogue/twig, /area/rogue/indoors/town) "upl" = ( @@ -20807,7 +20831,7 @@ /obj/item/reagent_containers/food/snacks/rogue/crackerscooked, /obj/item/reagent_containers/food/snacks/rogue/crackerscooked, /obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/blocks, @@ -20852,7 +20876,7 @@ /turf/open/floor/carpet/purple, /area/rogue/indoors/town/shop) "uul" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/bars/passage/shutter{ redstone_id = "armourer_shutter" }, @@ -20864,7 +20888,7 @@ lockid = "house1"; name = "House I" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/twig, @@ -20889,7 +20913,7 @@ /turf/closed/wall/mineral/rogue/wooddark/window, /area/rogue/outdoors/town/roofs) "uvM" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, @@ -21020,7 +21044,7 @@ /turf/open/floor/rogue/tile/bfloorz, /area/rogue/indoors/town/bath) "uEE" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/cobblerock, @@ -21034,7 +21058,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "uGe" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/effect/decal/cleanable/dirt/dust, @@ -21042,7 +21066,7 @@ /area/rogue/indoors/town/garrison) "uGz" = ( /obj/machinery/light/rogue/torchholder/c, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/ruinedwood/spiral, @@ -21053,6 +21077,7 @@ /area/rogue/outdoors/town) "uIB" = ( /obj/machinery/light/rogue/wallfire/candle/r, +/obj/structure/fermenting_barrel/water, /turf/open/floor/rogue/wood, /area/rogue/under/town/basement) "uIF" = ( @@ -21123,7 +21148,7 @@ /obj/item/clothing/under/roguetown/loincloth/brown, /obj/item/clothing/under/roguetown/loincloth/brown, /obj/item/clothing/under/roguetown/loincloth/brown, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/garrison) "uLl" = ( @@ -21197,7 +21222,7 @@ /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) "uMG" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/ruinedwood/spiral, @@ -21210,7 +21235,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/magician) "uON" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/woodturned, @@ -21236,9 +21261,19 @@ }, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) +"uPN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/roguecloset{ + lockid = "butler" + }, +/obj/item/flashlight/flare/torch/metal, +/obj/item/flashlight/flare/torch/metal, +/obj/item/flashlight/flare/torch/metal, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "uRw" = ( -/obj/effect/decal/cobbleedge, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu, +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/structure/chair/stool/rogue, @@ -21268,7 +21303,10 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/church) "uTc" = ( -/obj/structure/bookcase, +/obj/structure/closet/crate/chest/wicker, +/obj/item/reagent_containers/powder/ozium, +/obj/item/reagent_containers/powder/spice, +/obj/item/reagent_containers/powder/moondust, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -21369,7 +21407,7 @@ /obj/machinery/light/rogue/torchholder/r{ dir = 1 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/cobblerock, @@ -21406,7 +21444,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/magician) "vcl" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/item/storage/roguebag, @@ -21416,7 +21454,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "vcw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/dirt/road, @@ -21470,9 +21508,9 @@ /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/church) "vfK" = ( -/obj/structure/bookcase, /obj/item/book/rogue/tales1, /obj/item/book/rogue/tales3, +/obj/structure/bookcase/random, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town) "vfM" = ( @@ -21567,7 +21605,7 @@ }, /obj/item/clothing/cloak/stabard/guard, /obj/item/clothing/cloak/stabard/guard, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/blocks, @@ -21895,7 +21933,7 @@ /area/rogue/under/town/basement) "vCR" = ( /obj/machinery/light/rogue/wallfire/candle/l, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/blocks, @@ -21950,13 +21988,13 @@ /turf/open/floor/rogue/tile/bath, /area/rogue/indoors/town/church) "vGg" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/ambush, /area/rogue/outdoors/town) "vGh" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -21970,7 +22008,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/under/town/basement) "vGA" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /obj/structure/closet/crate/chest/old_crate, @@ -22041,6 +22079,13 @@ }, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town) +"vJc" = ( +/obj/item/roguecoin/gold/pile, +/obj/structure/rack/rogue, +/turf/open/floor/rogue/tile{ + icon_state = "linoleum" + }, +/area/rogue/indoors/town/vault) "vJu" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/tile{ @@ -22061,7 +22106,7 @@ "vKT" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/rogue/wallfire/candle/blue/l, -/obj/structure/bookcase, +/obj/structure/bookcase/random/eoratica, /turf/open/floor/carpet/inn, /area/rogue/indoors/town/bath) "vKZ" = ( @@ -22144,7 +22189,7 @@ }, /area/rogue/indoors/town/tavern) "vPw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/structure/fluff/railing/wood, @@ -22152,7 +22197,7 @@ /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) "vPI" = ( -/mob/living/carbon/human/species/goblin/npc/cave, +/mob/living/carbon/human/species/goblin/skilled/ambush/cave, /turf/open/floor/rogue/naturalstone, /area/rogue/under/cave) "vPS" = ( @@ -22274,6 +22319,13 @@ /obj/structure/fluff/railing/wood, /turf/open/floor/rogue/wood, /area/rogue/outdoors/town/roofs) +"vXK" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table/wood/plain, +/obj/item/book_crafting_kit, +/obj/item/book_crafting_kit, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "vXP" = ( /obj/structure/fluff/railing/border{ dir = 1; @@ -22310,7 +22362,7 @@ /obj/structure/chair/bench/church/r{ dir = 1 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/blocks, @@ -22387,11 +22439,11 @@ /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "wgk" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield) +/obj/effect/spawner/roguemap/grass_low, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/coast) "wgE" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/cobblerock, @@ -22441,6 +22493,11 @@ icon_state = "vertw" }, /area/rogue/outdoors/town/roofs) +"wkQ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/bookbinder, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "wkS" = ( /obj/effect/spawner/roguemap/hauntz_random, /turf/open/floor/rogue/blocks, @@ -22454,15 +22511,15 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) "wmq" = ( -/obj/item/rogueweapon/woodcut, -/obj/item/rogueweapon/woodcut, +/obj/item/rogueweapon/axe/iron, +/obj/item/rogueweapon/axe/iron, /obj/structure/rack/rogue, /turf/open/floor/rogue/tile{ icon_state = "chess" }, /area/rogue/indoors/town/dwarfin) "wms" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/structure/mineral_door/wood{ @@ -22473,14 +22530,14 @@ /turf/open/floor/rogue/twig, /area/rogue/indoors/town) "wmK" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "wmW" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -22494,6 +22551,10 @@ "wof" = ( /turf/open/floor/rogue/cobblerock, /area/rogue/indoors/town) +"woj" = ( +/obj/structure/fluff/traveltile/inhumen, +/turf/open/water/swamp, +/area/rogue/outdoors/rtfield) "wom" = ( /obj/machinery/light/rogue/torchholder/r, /turf/open/floor/rogue/blocks/stonered/tiny, @@ -22562,15 +22623,11 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/soilsons) "wqG" = ( -/obj/item/roguegem, -/obj/item/roguegem, -/obj/item/roguegem/violet, -/obj/item/roguegem/yellow, +/obj/effect/decal/cleanable/dirt/dust, /obj/item/roguegem/green, -/obj/item/roguegem/blue, -/obj/structure/closet/crate/chest/neu_fancy, +/obj/structure/rack/rogue, /turf/open/floor/rogue/tile{ - icon_state = "chess" + icon_state = "linoleum" }, /area/rogue/indoors/town/vault) "wqJ" = ( @@ -22597,7 +22654,7 @@ }, /area/rogue/outdoors/town/roofs) "wse" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -22663,7 +22720,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town) "wvT" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/structure/mineral_door/wood{ @@ -22684,7 +22741,7 @@ /obj/machinery/light/rogue/torchholder/l{ dir = 8 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/rooftop{ @@ -22693,10 +22750,10 @@ }, /area/rogue/outdoors/town/roofs) "wwQ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/cobble/mossy, @@ -22851,7 +22908,7 @@ /turf/closed/wall/mineral/rogue/stonebrick/reddish, /area/rogue/indoors/town/bath) "wBk" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/ruinedwood{ @@ -22893,12 +22950,12 @@ /turf/open/transparent/openspace, /area/rogue/indoors/town) "wEc" = ( -/obj/structure/fermenting_barrel/random/water, /obj/effect/decal/cleanable/dirt/dust, +/obj/structure/fermenting_barrel/water, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/manor) "wFh" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/structure/chair/stool/rogue, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) @@ -23027,7 +23084,7 @@ }, /area/rogue/indoors/town/tavern) "wKp" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -23074,12 +23131,13 @@ icon_state = "tablewood1" }, /obj/item/reagent_containers/glass/cup/wooden, +/obj/item/reagent_containers/glass/cup/wooden, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, /area/rogue/under/town/basement) "wLs" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/ruinedwood{ @@ -23160,7 +23218,7 @@ /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/rtfield) "wOS" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/blocks, @@ -23204,7 +23262,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "wQy" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/ruinedwood/spiral, @@ -23262,7 +23320,7 @@ /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) "wTa" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/tile{ @@ -23292,11 +23350,6 @@ icon_state = "weird1" }, /area/rogue/indoors/town/manor) -"wUw" = ( -/obj/structure/fermenting_barrel/water, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) "wUx" = ( /obj/machinery/light/rogue/wallfire/candle/blue/l, /turf/open/floor/rogue/cobble, @@ -23325,6 +23378,7 @@ "wWu" = ( /obj/effect/decal/cleanable/dirt/cobweb/cobweb2, /obj/item/roguecoin/gold/pile, +/obj/structure/rack/rogue, /turf/open/floor/rogue/tile{ icon_state = "linoleum" }, @@ -23395,9 +23449,9 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "xaJ" = ( -/obj/structure/bookcase, /obj/item/book/rogue/cardgame, /obj/item/book/rogue/manners, +/obj/structure/bookcase/random, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town) "xaY" = ( @@ -23481,7 +23535,7 @@ /turf/open/floor/rogue/cobble/mossy, /area/rogue/indoors/town/tavern) "xgC" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) "xgI" = ( @@ -23588,7 +23642,7 @@ }, /area/rogue/indoors/town/vault) "xmq" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/effect/decal/cleanable/dirt/dust, @@ -23754,12 +23808,6 @@ }, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/garrison) -"xsU" = ( -/obj/structure/closet/crate/coffin, -/obj/item/alch/bone, -/obj/item/alch/bone, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) "xtI" = ( /obj/item/grown/log/tree/stake, /turf/open/floor/rogue/naturalstone, @@ -23957,7 +24005,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) "xBr" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/machinery/light/rogue/wallfire/candle, @@ -23978,7 +24026,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/tavern) "xCI" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/cobble/mossy, @@ -23988,7 +24036,7 @@ /turf/open/floor/rogue/churchmarble, /area/rogue/indoors/town/church/chapel) "xDB" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -24051,10 +24099,6 @@ }, /turf/open/floor/rogue/cobble, /area/rogue/indoors/soilsons) -"xFr" = ( -/obj/item/reagent_containers/glass/cup/golden, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town) "xFH" = ( /obj/structure/table/wood, /obj/structure/bars{ @@ -24073,7 +24117,7 @@ /turf/open/transparent/openspace, /area/rogue/outdoors/mountains) "xGa" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/dirt/road, @@ -24095,7 +24139,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/magician) "xHq" = ( -/obj/effect/landmark/start/barkeep{ +/obj/effect/landmark/start/innkeep{ dir = 4 }, /turf/open/floor/rogue/ruinedwood, @@ -24155,8 +24199,8 @@ "xKf" = ( /obj/structure/closet/crate/chest/wicker, /obj/item/clothing/mask/cigarette/pipe/westman, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, /obj/item/neuFarm/seed/apple, /obj/item/neuFarm/seed/oat, /obj/item/neuFarm/seed/sunflower, @@ -24165,7 +24209,7 @@ }, /area/rogue/indoors/soilsons) "xKj" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -24219,7 +24263,7 @@ pixel_x = 6; pixel_y = 9 }, -/obj/item/rogueweapon/huntingknife/stoneknife, +/obj/item/rogueweapon/knife/stone, /turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "xMw" = ( @@ -24457,12 +24501,12 @@ }, /area/rogue/indoors/town/dwarfin) "xVT" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/closet/crate/chest/wicker, /obj/item/neuFarm/seed/sunflower, -/obj/item/neuFarm/seed/pipeweed, +/obj/item/neuFarm/seed/westleach, /obj/item/neuFarm/seed/cabbage, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" @@ -24552,16 +24596,21 @@ /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town) "yaa" = ( -/obj/machinery/light/rogue/firebowl, +/obj/machinery/light/rogue/torchholder/r, +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/natural/hide, +/obj/item/natural/hide, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "yaE" = ( /obj/structure/table/wood{ icon_state = "tablewood1" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, +/obj/item/reagent_containers/glass/bucket/wooden/alter, +/obj/item/natural/cloth, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/manor) "ybo" = ( @@ -24582,7 +24631,7 @@ /area/rogue/indoors/town/church/chapel) "ycM" = ( /obj/structure/chair/stool/rogue, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/cobble/mossy, @@ -24640,7 +24689,7 @@ /area/rogue/indoors/town/church) "yfO" = ( /obj/structure/fluff/railing/fence, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/fluff/railing/stonehedge, @@ -24648,7 +24697,8 @@ /area/rogue/outdoors/town) "yfZ" = ( /obj/structure/closet/crate/chest/neu, -/obj/item/natural/chaff/oat, +/obj/item/reagent_containers/food/snacks/produce/oat, +/obj/item/reagent_containers/food/snacks/produce/oat, /turf/open/floor/rogue/cobblerock, /area/rogue/indoors/town) "ygb" = ( @@ -24695,7 +24745,7 @@ /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/manor) "yiw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/flora/roguegrass, @@ -24731,7 +24781,7 @@ /obj/structure/chair/bench/church{ dir = 1 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/blocks, @@ -24765,7 +24815,7 @@ /obj/structure/chair/wood/rogue{ dir = 8 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/twig, @@ -31597,8 +31647,8 @@ gdw dgV gdw gdw -gdw -gdw +pNQ +pNQ pNQ pmA cVE @@ -31754,9 +31804,9 @@ hsb bBD tqP gdw -bYN -gdw -gdw +pNQ +pNQ +pNQ pmA cVE cVE @@ -31910,10 +31960,10 @@ pjw rCp bBD bBD -dgV -bBD -fQF gdw +pNQ +pNQ +pNQ ppJ oGK vrR @@ -32069,8 +32119,8 @@ bBD bBD gdw lHa -gdw -gdw +pNQ +pNQ pNQ pNQ pmA @@ -32225,8 +32275,8 @@ sHU eDv bBD gdw -gdw -gdw +pNQ +pNQ pNQ pNQ pNQ @@ -41634,7 +41684,7 @@ qGI pNQ gdw gdw -xsU +gdw gdw beo wQv @@ -41790,8 +41840,8 @@ gdw gdw gdw gdw -biS -wQv +gdw +oAa gdw iNh xpt @@ -41948,7 +41998,7 @@ dUc eJk gdw qXs -wQv +vXK gdw gdw flA @@ -42263,7 +42313,7 @@ ruG gdw xpt xpt -wQv +wkQ nze vFB vFB @@ -42414,7 +42464,7 @@ xJI xJI xJI xJI -bUV +aVR ruG ruG gdw @@ -42875,9 +42925,9 @@ pNQ pNQ gdw gdw -rdI -rdI -xlI +pjc +wqG +mUf iNR gdw gdw @@ -43031,12 +43081,12 @@ pNQ pNQ pNQ gdw +lAC rdI -rdI -wqG +dzt dzt xlI -xlI +nbX gdw gdw iSP @@ -43816,7 +43866,7 @@ qOY pNQ pNQ gdw -xlI +ofl dzt dzt dzt @@ -43976,9 +44026,9 @@ gdw wWu xlI dzt -pjc +dzt rdI -iNR +vJc gdw gdw rwZ @@ -44131,9 +44181,9 @@ pNQ pNQ gdw gdw -xlI -xlI -xlI +iqM +aaH +nbX ekq nze nze @@ -44298,7 +44348,7 @@ nvq sJg qZw eTu -wUw +rCp bBD vFB nze @@ -44463,7 +44513,7 @@ tRT tRT unh gdw -rCp +uPN bBD rCp gdw @@ -50097,10 +50147,10 @@ eUz eUz eUz eUz -xmW -xmW jIk xmW +jIk +jIk eUz eUz eUz @@ -50253,12 +50303,12 @@ eUz eUz eUz eUz -xmW -xmW jIk jIk -xmW -xmW +jIk +jIk +jIk +jIk xmW jIk eUz @@ -50409,13 +50459,13 @@ eUz eUz eUz eUz -xmW jIk jIk -xmW jIk -xmW -xmW +jIk +jIk +jIk +jIk jIk jIk xmW @@ -50473,8 +50523,8 @@ jIk jIk jIk xmW -xmW -xmW +jIk +jIk ymg cHT ymg @@ -50484,9 +50534,9 @@ ylN fsP fsP jIk -xmW -xmW -xmW +jIk +jIk +jIk sKt sKt sKt @@ -50565,12 +50615,12 @@ eUz eUz eUz eUz -xmW -xmW jIk -xmW -xmW -xmW +jIk +jIk +jIk +jIk +jIk jIk jIk omo @@ -50628,8 +50678,8 @@ jIk jIk xmW omo -xmW -xmW +jIk +jIk omo xmW ymg @@ -50642,8 +50692,8 @@ fsP fsP xmW kpC -xmW -xmW +jIk +jIk xEl sKt sKt @@ -50722,12 +50772,12 @@ eUz eUz eUz eUz -xmW +jIk jIk jIk xmW aLh -xmW +jIk jIk jIk omo @@ -50735,7 +50785,7 @@ jIk jIk jIk jIk -xmW +jIk xmW eUz eUz @@ -50777,17 +50827,17 @@ eUz xmW xmW jIk -xmW -xmW +jIk xmW jIk jIk jIk -xmW -xmW jIk jIk -xmW +jIk +jIk +jIk +jIk jIk ymg cHT @@ -50798,8 +50848,8 @@ ylN fsP jIk omo -xmW -xmW +jIk +jIk aDd jIk sKt @@ -50882,7 +50932,7 @@ jIk jIk omo jIk -xmW +jIk xmW omo jIk @@ -50931,17 +50981,17 @@ eUz eUz eUz xmW -xmW -xmW jIk -xmW -xmW -xmW +jIk +jIk jIk jIk xmW -xmW -xmW +jIk +jIk +jIk +jIk +jIk aLh jIk jIk @@ -50955,7 +51005,7 @@ ylN fsP jIk jIk -xmW +jIk jIk jIk jIk @@ -51056,16 +51106,16 @@ jIk omo jIk xmW -xmW -xmW +jIk +jIk jIk jIk xmW xmW +jIk +jIk xmW -xmW -xmW -xmW +jIk fsP fsP fsP @@ -51085,7 +51135,7 @@ eUz eUz eUz xmW -xmW +jIk jIk aLh xmW @@ -51094,15 +51144,15 @@ jIk jIk jIk omo -xmW -xmW +jIk +jIk jIk omo jIk +jIk xmW -xmW -xmW -xmW +jIk +jIk ymg cHT ymg @@ -51114,7 +51164,7 @@ jIk jIk jIk omo -xmW +jIk jIk xmW jIk @@ -51192,7 +51242,7 @@ eUz eUz eUz xmW -xmW +jIk jIk jIk jIk @@ -51206,23 +51256,23 @@ xOC xOC pHC jIk -xmW -xmW +jIk +jIk xmW omo omo jIk jIk -xmW -xmW +jIk +jIk jIk pHC xmW -xmW -xmW -xmW -xmW -xmW +jIk +jIk +jIk +jIk +jIk jIk jIk fsP @@ -51233,15 +51283,15 @@ fsP fsP fsP fsP -xmW +jIk eUz eUz eUz xmW -xmW -xmW -xmW -xmW +jIk +jIk +jIk +jIk jIk jIk jIk @@ -51251,15 +51301,15 @@ xmW xmW jIk xmW -xmW -xmW jIk jIk jIk -xmW +jIk +jIk +jIk omo -xmW -xmW +jIk +jIk ymg uSj cHT @@ -51270,9 +51320,9 @@ vpe jIk jIk jIk -xmW -xmW -xmW +jIk +jIk +jIk omo jIk sKt @@ -51349,13 +51399,13 @@ efe eUz eUz xmW -xmW +jIk omo jIk jIk xmW jIk -xmW +jIk jIk xOC xOC @@ -51365,11 +51415,9 @@ jIk jIk jIk xmW -xmW jIk jIk jIk -xmW jIk xmW jIk @@ -51377,10 +51425,12 @@ jIk jIk jIk jIk -xmW -xmW +jIk +jIk +jIk +jIk omo -xmW +jIk jIk jIk fsP @@ -51389,34 +51439,34 @@ fsP fsP fsP xmW -xmW -xmW +jIk +jIk jIk omo xmW jIk jIk -xmW +jIk omo -xmW jIk jIk jIk jIk -xmW -xmW -xmW jIk -xmW -xmW -xmW -xmW -xmW -xmW +jIk +jIk +jIk +jIk +jIk jIk jIk xmW -xmW +jIk +jIk +jIk +jIk +jIk +jIk ymg ymg cHT @@ -51426,11 +51476,11 @@ ylN fsP jIk xmW -xmW +jIk omo jIk -xmW -xmW +jIk +jIk jIk omo xmW @@ -51512,7 +51562,7 @@ omo jIk xmW jIk -xmW +jIk jIk xOC xOC @@ -51522,14 +51572,14 @@ jIk jIk jIk jIk -xmW +jIk jIk jIk jIk jIk omo jIk -xmW +jIk jIk xmW omo @@ -51538,21 +51588,21 @@ jIk jIk jIk xmW -xmW +jIk jIk xmW fsP fsP fsP jIk -xmW -xmW -xmW -xmW +jIk jIk jIk xmW -xmW +jIk +jIk +jIk +jIk omo jIk xmW @@ -51560,15 +51610,15 @@ jIk xmW jIk jIk -xmW -xmW -xmW +jIk +jIk +jIk jIk jIk omo -xmW -xmW -xmW +jIk +jIk +jIk omo xmW jIk @@ -51667,8 +51717,8 @@ jIk jIk jIk jIk -xmW -xmW +jIk +jIk jIk jIk jIk @@ -51677,58 +51727,58 @@ xOC jIk jIk jIk -xmW jIk -xmW jIk -xmW -xmW +jIk +jIk +jIk +jIk omo jIk jIk jIk jIk -xmW -xmW -xmW -xmW jIk jIk -xmW -xmW -xmW +jIk +jIk +jIk +jIk +jIk +jIk +jIk jIk jIk xmW -xmW -xmW +jIk +jIk omo -xmW -xmW -xmW jIk jIk -xmW -xmW +jIk +jIk +jIk +jIk +jIk jIk xmW -xmW -xmW +jIk +jIk xmW omo -xmW -xmW +jIk +jIk omo jIk jIk jIk jIk -xmW -xmW -xmW -xmW -xmW -xmW +jIk +jIk +jIk +jIk +jIk +jIk jIk jIk jIk @@ -51744,10 +51794,10 @@ omo jIk jIk omo -xmW -xmW -xmW -xmW +jIk +jIk +jIk +jIk jIk omo jIk @@ -51825,56 +51875,56 @@ jIk jIk jIk pHC -xmW -xmW jIk xmW +jIk xmW xmW jIk +jIk omo jIk -xmW -xmW -xmW jIk jIk jIk -xmW -xmW +jIk jIk jIk xmW xmW -xmW -xmW -xmW +jIk +jIk +jIk +jIk +jIk +jIk +jIk jIk pHC jIk xmW -xmW -xmW -xmW jIk -xmW jIk jIk -xmW -xmW -xmW -xmW jIk jIk jIk jIk -xmW -xmW -xmW jIk -xmW -xmW -xmW +jIk +jIk +jIk +jIk +jIk +jIk +jIk +jIk +jIk +jIk +jIk +jIk +jIk +jIk jIk jIk jIk @@ -51884,8 +51934,8 @@ jIk jIk jIk xmW -xmW -xmW +jIk +jIk jIk jIk jIk @@ -51903,8 +51953,8 @@ xmW jIk xmW aLh -xmW -xmW +jIk +jIk jIk jIk fsP @@ -51979,25 +52029,25 @@ eUz eUz xmW xmW -xmW +jIk +jIk jIk jIk xmW -xmW -xmW +jIk jIk jIk kpC omo omo jIk -xmW jIk -xmW jIk xmW -xmW -xmW +jIk +jIk +jIk +jIk jIk jIk xmW @@ -52005,7 +52055,7 @@ jIk omo jIk jIk -xmW +jIk jIk jIk omo @@ -52026,12 +52076,12 @@ jIk jIk jIk xmW -xmW -xmW jIk xmW -xmW -xmW +jIk +jIk +jIk +jIk jIk jIk omo @@ -52140,24 +52190,17 @@ jIk jIk jIk jIk -xmW -xmW jIk jIk jIk jIk jIk -xmW -xmW jIk jIk jIk jIk jIk jIk -xmW -xmW -xmW jIk jIk jIk @@ -52165,7 +52208,14 @@ jIk jIk jIk xmW -xmW +jIk +jIk +jIk +jIk +jIk +jIk +jIk +jIk jIk jIk jIk @@ -52291,22 +52341,15 @@ eUz eUz eUz jIk -xmW -xmW -xmW jIk jIk jIk jIk jIk -xmW jIk -xmW jIk jIk xmW -xmW -xmW jIk jIk jIk @@ -52322,7 +52365,14 @@ jIk jIk jIk jIk -xmW +jIk +jIk +jIk +jIk +jIk +jIk +jIk +jIk jIk jIk jIk @@ -52457,30 +52507,30 @@ omo jIk xmW xmW -xmW -xmW +jIk +jIk pHC jIk -xmW -xmW +jIk +jIk xmW omo omo jIk jIk -xmW -xmW -xmW +jIk +jIk +jIk jIk omo -xmW jIk -xmW +jIk +jIk jIk omo jIk -xmW -xmW +jIk +jIk xmW jIk jIk @@ -52491,7 +52541,7 @@ jIk jIk xmW xmW -xmW +jIk jIk jIk omo @@ -52499,9 +52549,9 @@ jIk xmW xmW jIk -xmW -kpC -xmW +jIk +jIk +jIk jIk jIk jIk @@ -52608,16 +52658,16 @@ jIk jIk jIk xmW -xmW +jIk xmW jIk jIk jIk -xmW -xmW jIk jIk -xmW +jIk +jIk +jIk jIk jIk jIk @@ -52627,12 +52677,12 @@ jIk jIk xmW jIk -xmW jIk -xmW -xmW -xmW -xmW +jIk +jIk +jIk +jIk +jIk omo jIk jIk @@ -52646,22 +52696,22 @@ jIk jIk jIk jIk -xmW -xmW -xmW +jIk +jIk +jIk omo -xmW +jIk xmW jIk jIk -xmW -xmW -xmW +jIk xmW jIk jIk -xmW -xmW +jIk +jIk +jIk +jIk jIk omo jIk @@ -52688,7 +52738,7 @@ ylN jIk jIk xmW -xmW +jIk jIk jIk jIk @@ -52758,21 +52808,13 @@ eUz eUz eUz eUz -xmW -xmW jIk jIk jIk jIk -xmW jIk -xmW -xmW -xmW -xmW jIk jIk -xmW jIk xmW jIk @@ -52784,16 +52826,13 @@ jIk jIk jIk jIk -xmW jIk -xmW -xmW -xmW -xmW -xmW -xmW -xmW -xmW +jIk +jIk +jIk +jIk +jIk +jIk jIk jIk jIk @@ -52805,29 +52844,40 @@ jIk jIk xmW xmW -xmW -xmW -xmW -xmW -xmW -xmW +jIk +jIk +jIk +jIk +jIk +jIk +jIk +jIk +jIk +jIk jIk xmW +jIk +jIk +jIk +jIk xmW +jIk +jIk +jIk xmW jIk aLh -xmW -xmW jIk xmW +jIk xmW +jIk xmW omo jIk jIk xmW -xmW +jIk omo omo jIk @@ -52845,15 +52895,15 @@ fsP fsP jIk omo -xmW -xmW +jIk +jIk omo jIk jIk fsP -xmW jIk -xmW +jIk +jIk sKt sKt sKt @@ -52915,8 +52965,8 @@ eUz eUz eUz xmW -xmW -xmW +jIk +jIk omo omo jIk @@ -52924,16 +52974,16 @@ jIk jIk xmW xmW -xmW +jIk xmW jIk jIk jIk -xmW -xmW +jIk +jIk omo omo -xmW +jIk xmW xmW jIk @@ -52941,15 +52991,15 @@ jIk jIk omo jIk -xmW -xmW -xmW +jIk +jIk +jIk omo jIk -xmW -xmW jIk -xmW +jIk +jIk +jIk xmW jIk omo @@ -52963,29 +53013,29 @@ jIk jIk jIk jIk -xmW -xmW -xmW +jIk +jIk +jIk omo jIk -xmW -xmW +jIk +jIk omo jIk jIk -xmW -xmW +jIk +jIk omo jIk jIk -xmW -xmW +jIk +jIk jIk xmW -xmW +jIk omo -xmW -xmW +jIk +jIk omo jIk jIk @@ -53071,12 +53121,13 @@ eUz eUz omo omo -xmW jIk -xmW +jIk +jIk omo xmW -xmW +jIk +jIk jIk jIk jIk @@ -53084,13 +53135,12 @@ jIk xmW xmW xmW -xmW -xmW -xmW +jIk +jIk omo fsP jIk -xmW +jIk xmW xmW pHC @@ -53099,15 +53149,15 @@ jIk jIk omo xmW -xmW jIk -xmW +jIk xmW xmW jIk jIk -xmW -xmW +jIk +jIk +jIk jIk jIk jIk @@ -53118,32 +53168,32 @@ omo jIk jIk jIk -xmW +jIk jIk omo -xmW -xmW +jIk +jIk jIk jIk omo jIk -xmW -xmW -xmW jIk jIk xmW jIk jIk xmW +jIk +jIk xmW -xmW +jIk +jIk omo -xmW -xmW -xmW -xmW -xmW +jIk +jIk +jIk +jIk +jIk xmW jIk jIk @@ -53165,8 +53215,8 @@ ymg ymg ymg xmW -xmW -xmW +jIk +jIk jIk jIk sKt @@ -53231,8 +53281,8 @@ xmW jIk jIk jIk -xmW -xmW +jIk +jIk jIk jIk jIk @@ -53241,25 +53291,25 @@ jIk omo jIk jIk -xmW -xmW +jIk +jIk xmW fsP fsP fsP +fsP +fsP xmW xmW -xmW -xmW +fsP +fsP +fsP +fsP xmW jIk jIk -xmW -xmW -xmW -jIk -xmW -xmW +fsP +fsP xmW jIk omo @@ -53271,36 +53321,36 @@ jIk jIk jIk xmW -xmW -xmW -xmW jIk -xmW jIk jIk -xmW -xmW jIk jIk -xmW jIk -xmW -xmW -omo jIk jIk xmW -xmW -xmW +jIk jIk xmW +jIk xmW +jIk +omo +jIk +fsP +fsP +fsP xmW +jIk +jIk +jIk xmW xmW jIk jIk -xmW +jIk +jIk xmW omo jIk @@ -53382,14 +53432,14 @@ iQi biI biI xmW -xmW jIk -xmW -xmW -xmW jIk -xmW -xmW +jIk +jIk +jIk +jIk +jIk +jIk jIk jIk jIk @@ -53398,7 +53448,7 @@ omo omo jIk xmW -xmW +jIk jIk fsP xOC @@ -53406,18 +53456,18 @@ xOC xOC xOC xOC -xmW -xmW +fsP +fsP xOC xOC xOC xOC -xmW -xmW -jIk +fsP +fsP +fsP xOC xOC -xmW +fsP jIk jIk jIk @@ -53428,40 +53478,40 @@ jIk jIk jIk xmW -xmW -xmW -xmW jIk -xmW +jIk +jIk +jIk xmW xmW jIk +jIk xmW jIk jIk jIk jIk +jIk xmW xmW -xmW -jIk +fsP xOC xOC xOC +fsP +fsP xmW jIk -xmW -xmW -xmW +jIk jIk jIk aLh -xmW +jIk jIk jIk xmW xmW -xmW +jIk jIk pHC jIk @@ -53539,23 +53589,23 @@ biI biI biI xmW -xmW -xmW -xmW -xmW +jIk +jIk +jIk +jIk aLh jIk jIk jIk jIk jIk -xmW -xmW -xmW jIk jIk -xmW -xmW +jIk +jIk +jIk +jIk +jIk fJa fJa dQZ @@ -53574,7 +53624,7 @@ xOC xOC xOC xOC -jIk +fsP jIk dQZ fJa @@ -53600,7 +53650,7 @@ jIk jIk jIk jIk -jIk +fsP xOC xOC xOC @@ -53613,18 +53663,18 @@ fJa jIk jIk xmW -xmW -xmW -xmW -xmW jIk jIk -xmW +jIk +jIk +jIk +jIk +jIk xmW omo -xmW -xmW -xmW +jIk +jIk +jIk xmW xmW omo @@ -53694,21 +53744,21 @@ eUz eUz eUz biI -xmW -xmW -xmW -xmW -xmW -xmW +jIk +jIk +jIk +jIk +jIk +jIk jIk xfD jIk jIk jIk -xmW jIk -xmW -xmW +jIk +jIk +jIk jIk xmW jIk @@ -53731,7 +53781,7 @@ xOC xOC xOC xOC -jIk +fsP dQZ dQZ fJa @@ -53757,7 +53807,7 @@ jIk jIk jIk jIk -jIk +fsP xOC xOC xOC @@ -53771,17 +53821,17 @@ fJa xmW jIk jIk -xmW +jIk xmW omo jIk jIk +jIk +jIk xmW -xmW -xmW -xmW -xmW -xmW +jIk +jIk +jIk xmW xmW jIk @@ -53851,11 +53901,11 @@ eUz eUz eUz xmW -xmW -xmW jIk -xmW -xmW +jIk +jIk +jIk +jIk omo xfD xfD @@ -53863,10 +53913,10 @@ jIk xmW xmW jIk -xmW -xmW jIk xmW +jIk +jIk xmW dQZ dQZ @@ -53929,7 +53979,7 @@ fJa jIk jIk xmW -xmW +jIk jIk jIk rNp @@ -53953,7 +54003,7 @@ ymg jIk fsP xmW -xmW +jIk jIk jIk jIk @@ -54007,9 +54057,9 @@ eUz eUz eUz jIk -xmW -xmW -xmW +jIk +jIk +jIk rNZ hDp fsP @@ -54019,7 +54069,7 @@ fsP jIk xmW xmW -xmW +jIk jIk jIk jIk @@ -54108,8 +54158,8 @@ ymg cHT ymg jIk -xmW -xmW +jIk +jIk jIk jIk jIk @@ -54126,9 +54176,9 @@ sKt eUz eUz eUz -eUz -eUz -eUz +few +few +woj eUz eUz eUz @@ -54179,7 +54229,7 @@ jIk jIk jIk jIk -xmW +jIk xmW xmW fJa @@ -54266,8 +54316,8 @@ cHT ymg jIk xmW -xmW -xmW +jIk +jIk jIk omo omo @@ -54282,10 +54332,10 @@ sKt sKt sKt eUz -eUz -eUz -eUz -eUz +few +few +few +woj eUz eUz eUz @@ -54333,12 +54383,12 @@ jRf jRf xWK xfD -xmW -xmW -xmW -xmW jIk -xmW +jIk +jIk +jIk +jIk +fsP xOC fJa fJa @@ -54435,12 +54485,12 @@ ylN ylN jIk xmW -xmW +jIk sKt sKt eUz -eUz -eUz +few +few eUz eUz eUz @@ -54474,8 +54524,8 @@ eUz eUz eUz xmW -xmW -xmW +jIk +jIk jIk fJa gbn @@ -54489,13 +54539,13 @@ jcR qyk nnX xWK -xfD -xmW +jIk +jIk jIk jIk jIk xmW -xmW +fsP xOC xOC fJa @@ -54592,13 +54642,13 @@ jIk ylN jIk omo -xmW -sKt +jIk sKt sKt sKt -eUz -eUz +few +few +few eUz eUz eUz @@ -54630,7 +54680,7 @@ eUz eUz eUz jIk -xmW +jIk jIk jIk xmW @@ -54647,11 +54697,11 @@ xWK xWK ccX xfD -xmW -xmW -omo jIk jIk +omo +jIk +fsP xOC xOC xOC @@ -54748,14 +54798,14 @@ omo ylN ylN jIk -xmW -xmW +jIk +jIk jIk sKt sKt sKt -sKt -eUz +few +few eUz eUz eUz @@ -54787,9 +54837,9 @@ eUz eUz xmW xmW -xmW jIk -xmW +jIk +jIk xmW scg fOP @@ -54805,10 +54855,10 @@ fsP hnK fsP jIk -xmW -xmW -xmW jIk +jIk +jIk +fsP xOC xOC xOC @@ -54894,7 +54944,7 @@ cHT ymg jIk jIk -xmW +jIk jIk jIk xmW @@ -54911,8 +54961,8 @@ jIk jIk sKt sKt -sKt -sKt +few +few eUz eUz eUz @@ -54941,10 +54991,10 @@ efe eUz eUz eUz -xmW -xmW jIk -xmW +jIk +jIk +jIk jIk jIk jIk @@ -54962,10 +55012,10 @@ fsP fsP fsP jIk -xmW jIk jIk jIk +fsP xOC xOC xOC @@ -55051,10 +55101,10 @@ cHT ymg ymg xmW -xmW -xmW -xmW -xmW +jIk +jIk +jIk +jIk jIk jIk jIk @@ -55063,12 +55113,12 @@ ylN ylN fsP xmW +jIk +jIk +jIk +jIk xmW -xmW -xmW -xmW -xmW -sKt +nYa sKt sKt eUz @@ -55099,9 +55149,9 @@ eUz eUz jIk jIk -xmW -xmW -xmW +jIk +jIk +jIk jIk omo omo @@ -55120,9 +55170,9 @@ hnK fsP xfD xmW -xmW jIk -xmW +jIk +fsP xOC xOC xOC @@ -55210,7 +55260,7 @@ ymg jIk jIk omo -xmW +jIk jIk jIk jIk @@ -55222,10 +55272,10 @@ fsP fsP jIk omo -xmW jIk -xmW -xmW +jIk +jIk +jIk sKt sKt sKt @@ -55254,10 +55304,10 @@ eUz eUz eUz xmW -xmW jIk -aON -xmW +jIk +omo +jIk jIk jIk jIk @@ -55280,7 +55330,7 @@ jIk jIk xmW xmW -xmW +fsP xOC xOC doE @@ -55382,7 +55432,7 @@ jIk jIk jIk aLh -xmW +jIk jIk jIk sKt @@ -55410,13 +55460,13 @@ biI eUz eUz eUz -xmW -xmW -xmW -xmW jIk jIk -xmW +jIk +jIk +jIk +jIk +jIk jIk xmW jIk @@ -55436,8 +55486,8 @@ xWK jIk jIk xmW -xmW -xmW +jIk +fsP xOC xOC waT @@ -55526,7 +55576,7 @@ jIk jIk jIk xmW -xmW +jIk jIk fsP fsP @@ -55539,7 +55589,7 @@ fsP jIk jIk jIk -xmW +jIk omo jIk sKt @@ -55567,15 +55617,15 @@ biI biI eUz eUz -xmW +jIk omo jIk -xmW -xmW jIk xmW -xmW -xmW +jIk +jIk +jIk +jIk scg jIk jIk @@ -55594,7 +55644,7 @@ xmW jIk jIk jIk -jIk +fsP xOC xOC doE @@ -55683,7 +55733,7 @@ jIk jIk jIk aLh -xmW +jIk xmW jIk jIk @@ -55694,9 +55744,9 @@ ylN ylN ylN jIk -xmW -xmW -xmW +jIk +jIk +jIk jIk fsP fsP @@ -55724,13 +55774,13 @@ biI eUz eUz eUz -xmW -xmW jIk -xmW +jIk +jIk xmW xmW jIk +jIk xmW omo scg @@ -55751,7 +55801,7 @@ jIk jIk omo jIk -jIk +fsP xOC xOC doE @@ -55836,8 +55886,8 @@ ymg ymg cHT ymg -xmW -xmW +jIk +jIk jIk omo fsP @@ -55881,9 +55931,9 @@ oTz eUz eUz eUz -xmW -aON -xmW +jIk +omo +jIk jIk jIk jIk @@ -55907,8 +55957,8 @@ jIk jIk jIk jIk -xmW -xmW +jIk +fsP xOC xOC waT @@ -55994,8 +56044,8 @@ ymg cHT ymg jIk -xmW -xmW +jIk +jIk fsP jIk omo @@ -56038,16 +56088,16 @@ eUz eUz eUz jIk -xmW -xmW -xmW +jIk +jIk +jIk jIk pHC jIk jIk -xmW -xmW -xmW +jIk +jIk +jIk xmW ccX jcR @@ -56059,13 +56109,13 @@ fsP jIk hXE jIk -xmW jIk jIk -xmW jIk xmW -xmW +jIk +jIk +fsP xOC xOC doE @@ -56154,8 +56204,8 @@ xmW xmW omo fsP -xmW -xmW +jIk +jIk xmW ctl ylN @@ -56195,14 +56245,14 @@ eUz eUz jIk omo -xmW jIk jIk jIk -xmW jIk xmW -xmW +jIk +jIk +jIk omo omo jIk @@ -56215,14 +56265,14 @@ ylN fsP jIk hXE -xmW -xmW +jIk +jIk jIk jIk aLh -xmW jIk jIk +fsP xOC xOC doE @@ -56312,13 +56362,13 @@ omo omo fsP xmW -xmW +jIk jIk jIk ylN ylN ylN -xmW +jIk xmW ylN ylN @@ -56330,7 +56380,7 @@ omo jIk jIk biI -biI +fsP biI biI sKt @@ -56350,16 +56400,16 @@ eUz eUz xmW jIk -xmW -xmW -xmW -xmW jIk jIk jIk jIk jIk -xmW +jIk +jIk +jIk +jIk +jIk omo jIk jIk @@ -56373,12 +56423,12 @@ jIk jIk hXE jIk -xmW -xmW -xmW -xmW -xmW jIk +jIk +jIk +jIk +jIk +fsP xOC xOC xOC @@ -56469,14 +56519,14 @@ fsP jIk fsP omo -xmW +jIk xmW omo ylN ylN ylN -xmW -xmW +jIk +jIk ylN ylN ylN @@ -56486,8 +56536,8 @@ jIk jIk jIk jIk -biI -biI +fsP +fsP biI biI sKt @@ -56507,35 +56557,35 @@ eUz jIk xmW xmW -xmW jIk jIk -xmW jIk jIk -xmW +jIk +jIk xmW xmW jIk +jIk omo xmW -xmW +jIk xWK jao qyk xWK ylN ylN -xmW +jIk xmW hXE jIk jIk -xmW -xmW jIk jIk jIk +jIk +fsP xOC xOC xOC @@ -56624,7 +56674,7 @@ cHT ymg mpj xmW -xmW +jIk jIk jIk jIk @@ -56632,9 +56682,9 @@ jIk ylN ylN ylN -xmW -xmW -xmW +jIk +jIk +jIk omo jIk jIk @@ -56642,10 +56692,10 @@ jIk jIk jIk jIk +fsP biI -biI -biI -biI +fsP +fsP biI biI sKt @@ -56662,37 +56712,37 @@ eUz eUz omo jIk -xmW jIk -xmW +jIk +jIk jIk omo -xmW -xmW -xmW +jIk +jIk +jIk jIk omo jIk jIk -xmW -xmW -xmW +jIk +jIk +jIk xWK fOh sMV xWK ylN ylN -xmW -xmW +jIk +jIk hXE xmW jIk -xmW +jIk omo omo jIk -jIk +fsP xOC xOC xOC @@ -56781,7 +56831,7 @@ cHT ymg jIk omo -xmW +jIk jIk jIk jIk @@ -56791,7 +56841,7 @@ ylN ylN aLh xmW -xmW +jIk jIk jIk xmW @@ -56799,9 +56849,9 @@ omo jIk jIk biI -biI -biI -biI +fsP +fsP +fsP biI biI biI @@ -56824,16 +56874,16 @@ jIk jIk omo omo -xmW -xmW -aON jIk xmW +omo +jIk jIk -xmW -xmW jIk xmW +jIk +jIk +jIk ccX xWK xWK @@ -56841,16 +56891,16 @@ ccX ylN ylN jIk -xmW +jIk hXE -xmW +jIk jIk jIk omo omo jIk xmW -xmW +fsP xOC xOC waT @@ -56937,8 +56987,8 @@ ymg cHT ymg xmW -xmW -xmW +jIk +jIk xmW omo jIk @@ -56950,14 +57000,14 @@ xmW jIk omo jIk -xmW +jIk xmW jIk jIk +fsP +fsP biI -biI -biI -biI +fsP biI biI biI @@ -56975,39 +57025,39 @@ rCS rCS rCS xmW -xmW -xmW -xmW +jIk +jIk +jIk jIk omo -xmW jIk -xmW +jIk +jIk xmW jIk omo jIk jIk -xmW jIk -xmW jIk -xmW -xmW +jIk +jIk +jIk +jIk gfZ ylN ylN jIk jIk hXE -xmW -xmW -xmW -xmW -xmW -xmW -xmW jIk +jIk +jIk +jIk +jIk +jIk +jIk +fsP xOC xOC doE @@ -57093,10 +57143,10 @@ fsP ymg cHT ymg -xmW -xmW -xmW -xmW +jIk +jIk +jIk +jIk jIk xmW jIk @@ -57105,17 +57155,17 @@ ylN fsP jIk jIk -xmW -xmW -xmW jIk +jIk +jIk +jIk +fsP +fsP +fsP biI +fsP biI -biI -biI -biI -biI -biI +fsP biI biI biI @@ -57132,25 +57182,25 @@ eUz eUz eUz eUz -xmW -xmW jIk jIk jIk -xmW jIk -xmW jIk -xmW +jIk +jIk +jIk +jIk +jIk jIk jIk xmW xmW aLh xmW -xmW +jIk omo -xmW +jIk gfZ ylN ylN @@ -57158,9 +57208,9 @@ jIk jIk hXE jIk -xmW jIk -xmW +jIk +jIk jIk jIk xmW @@ -57250,7 +57300,7 @@ fsP ymg cHT ymg -xmW +jIk xmW omo jIk @@ -57260,14 +57310,14 @@ omo ylN ylN fsP -xmW -xmW +jIk +jIk +jIk jIk xmW -xmW -biI -biI -biI +fsP +fsP +fsP biI biI biI @@ -57291,23 +57341,23 @@ eUz eUz xmW xmW -xmW +jIk pHC jIk jIk xmW xmW jIk -xmW jIk jIk -xmW -xmW -xmW jIk -xmW -xmW -xmW +jIk +jIk +jIk +jIk +jIk +jIk +jIk nog ylN ylN @@ -57319,8 +57369,8 @@ xmW xmW jIk jIk -xmW jIk +fsP xOC xOC xOC @@ -57412,21 +57462,21 @@ jIk jIk jIk jIk -xmW +jIk jIk ylN ylN ylN xmW -xmW +jIk omo -xmW -biI -biI -biI -biI -biI +jIk +fsP +fsP +fsP +fsP biI +fsP biI biI biI @@ -57449,35 +57499,35 @@ eUz eUz jIk jIk -xmW -xmW -xmW -xmW +jIk +jIk +jIk +jIk jIk omo jIk -xmW jIk -xmW -xmW -xmW jIk -xmW -xmW +jIk +jIk +jIk +jIk +jIk +jIk xmW pis ylN ylN pis xmW -xmW jIk jIk -xmW jIk xmW jIk jIk +jIk +fsP xOC xOC xOC @@ -57568,18 +57618,18 @@ ymg jIk pHC jIk -xmW -xmW +jIk +jIk jIk ylN ylN ylN -xmW -xmW jIk jIk -biI -biI +jIk +jIk +fsP +fsP biI biI biI @@ -57613,28 +57663,28 @@ jIk jIk jIk omo -xmW +jIk omo jIk jIk -xmW -xmW -xmW -xmW -xmW +jIk +jIk +jIk +jIk +jIk jIk ylN ylN xmW jIk -xmW jIk jIk -xmW jIk -xmW jIk jIk +jIk +jIk +fsP xOC xOC xOC @@ -57724,21 +57774,21 @@ cHT ymg jIk jIk -xmW -xmW -xmW +jIk +jIk +jIk omo ylN ylN ylN -xmW -xmW jIk -biI -biI -biI -biI -biI +jIk +jIk +fsP +fsP +fsP +fsP +fsP biI biI biI @@ -57765,8 +57815,8 @@ eUz eUz xmW xmW -xmW -xmW +jIk +jIk jIk jIk xmW @@ -57778,20 +57828,20 @@ omo jIk pfX jIk -xmW +jIk jIk ylN ylN -xmW jIk -xmW -xmW jIk -xmW -xmW +jIk +jIk +jIk +jIk +jIk omo omo -jIk +fsP xOC xOC xOC @@ -57883,16 +57933,16 @@ xmW jIk xmW omo -xmW +jIk xmW ylN ylN ylN jIk jIk -biI -biI -biI +fsP +fsP +fsP biI biI biI @@ -57925,10 +57975,10 @@ jIk jIk jIk jIk -xmW jIk jIk -xmW +jIk +jIk jIk jIk jIk @@ -57941,15 +57991,15 @@ ylN ylN omo omo -xmW jIk -xmW +jIk +jIk jIk jIk omo omo jIk -jIk +fsP xOC xOC doE @@ -58041,17 +58091,17 @@ omo jIk jIk jIk -xmW +jIk ylN ylN ylN omo xmW +fsP +fsP +fsP biI -biI -biI -biI -biI +fsP biI biI biI @@ -58088,25 +58138,25 @@ jIk xmW omo jIk -xmW -xmW -xmW -xmW -xmW +jIk +jIk +jIk +jIk +jIk omo ylN ylN jIk omo -xmW jIk -xmW jIk jIk jIk jIk jIk jIk +jIk +fsP xOC xOC doE @@ -58194,8 +58244,8 @@ ymg cHT ymg jIk -xmW -xmW +jIk +jIk jIk jIk aLh @@ -58203,11 +58253,11 @@ ylN ylN ylN jIk -xmW -xmW -biI -biI +jIk +jIk biI +fsP +fsP biI biI biI @@ -58241,13 +58291,13 @@ eUz eUz jIk jIk -xmW jIk jIk jIk -xmW -xmW -xmW +jIk +jIk +jIk +jIk jIk kzk omo @@ -58256,14 +58306,14 @@ ylN ylN jIk xmW -xmW -xmW -xmW -xmW -xmW -pHC jIk jIk +jIk +jIk +jIk +pHC +jIk +fsP xOC xOC waT @@ -58362,8 +58412,8 @@ ylN jIk jIk jIk -biI -biI +fsP +fsP biI biI biI @@ -58402,8 +58452,8 @@ xmW omo omo jIk -xmW -xmW +jIk +jIk jIk jIk omo @@ -58415,12 +58465,12 @@ jIk jIk jIk jIk -xmW -xmW +jIk +jIk jIk xmW xmW -xmW +fsP xOC xOC doE @@ -58509,7 +58559,7 @@ uSj cHT ymg jIk -xmW +jIk xmW jIk omo @@ -58519,7 +58569,7 @@ ylN xmW xmW jIk -biI +fsP biI biI biI @@ -58561,7 +58611,7 @@ omo omo jIk jIk -xmW +jIk jIk jIk ylN @@ -58569,14 +58619,14 @@ ylN ylN ylN aLh -xmW -xmW -xmW -xmW -xmW +jIk +jIk +jIk +jIk +jIk omo -xmW -xmW +jIk +fsP xOC xOC xOC @@ -58668,16 +58718,16 @@ ymg jIk jIk jIk -xmW -xmW +jIk +jIk ylN ylN ylN -xmW +jIk xmW omo -biI -biI +fsP +fsP biI biI xOC @@ -58714,26 +58764,26 @@ eUz jIk jIk jIk -xmW -xmW +jIk +jIk xmW pHC jIk -xmW +jIk xmW ylN ylN ylN jIk -xmW -xmW jIk jIk -xmW +jIk +jIk +jIk omo omo -xmW -xmW +jIk +fsP xOC xOC xOC @@ -58825,15 +58875,15 @@ ymg fsP jIk omo -xmW -xmW +jIk +jIk ylN ylN ylN jIk -xmW jIk -biI +jIk +fsP biI biI xOC @@ -58868,16 +58918,16 @@ eUz eUz eUz xmW -xmW -xmW jIk -xmW -xmW -xmW jIk -xmW jIk -xmW +jIk +jIk +jIk +jIk +jIk +jIk +jIk ylN ylN ylN @@ -58886,11 +58936,11 @@ xmW xmW jIk jIk -xmW -xmW -xmW -xmW jIk +jIk +jIk +jIk +fsP xOC xOC xOC @@ -58982,15 +59032,15 @@ ymg fsP jIk jIk -xmW +jIk omo ylN ylN ylN xmW -xmW jIk -biI +jIk +fsP biI biI xOC @@ -59025,16 +59075,16 @@ eUz eUz eUz xmW -xmW -xmW -xmW -xmW -xmW -xmW jIk jIk xmW -xmW +jIk +jIk +jIk +jIk +jIk +jIk +jIk ylN ylN ylN @@ -59046,8 +59096,8 @@ jIk jIk jIk jIk -xmW jIk +fsP xOC xOC xOC @@ -59138,7 +59188,7 @@ cHT ymg fsP jIk -xmW +jIk omo jIk ylN @@ -59146,8 +59196,8 @@ ylN ylN jIk xmW -biI -biI +fsP +fsP biI xOC xOC @@ -59184,12 +59234,12 @@ fsP fsP jIk jIk -xmW -xmW -xmW +jIk +jIk +jIk omo xmW -xmW +jIk jIk xmW ylN @@ -59197,12 +59247,12 @@ ylN ylN ylN jIk -xmW -xmW +jIk +jIk aLh jIk jIk -xmW +jIk xmW jPw xOC @@ -59285,7 +59335,7 @@ cxb gog gog gog -rqG +cxb waT waT waT @@ -59296,14 +59346,14 @@ ymg fsP fsP xmW -xmW +jIk jIk ylN ylN ylN -xmW jIk -biI +jIk +fsP biI biI xOC @@ -59341,11 +59391,11 @@ fsP fsP pHC jIk -xmW jIk -xmW -xmW -xmW +jIk +jIk +jIk +jIk jIk jIk xmW @@ -59354,9 +59404,9 @@ ylN ylN ylN omo -xmW jIk -xmW +jIk +jIk jIk jIk jIk @@ -59437,12 +59487,12 @@ rqG cxb pJn cxb -rqG +cxb rqG yjG emB gog -rqG +cxb oyZ jMi oyZ @@ -59461,7 +59511,7 @@ ylN omo jIk biI -biI +fsP biI xOC xOC @@ -59499,21 +59549,21 @@ fsP fsP xmW xmW -xmW jIk jIk -xmW -xmW +jIk +jIk +jIk jIk fsP fsP ylN ylN xmW -xmW jIk jIk -xmW +jIk +jIk jIk nPK fsP @@ -59590,11 +59640,11 @@ pGL pYo tVC gog -rqG +cxb rqG pJn cxb -rqG +cxb cxb gog gog @@ -59617,7 +59667,7 @@ ylN ylN jIk jIk -biI +fsP biI xOC xOC @@ -59667,7 +59717,7 @@ ylN ylN ylN xmW -xmW +jIk xmW fsP fsP @@ -59773,8 +59823,8 @@ ylN ylN ylN jIk -biI -biI +fsP +fsP biI xOC xOC @@ -59930,8 +59980,8 @@ ylN ylN ylN jIk -biI -biI +fsP +fsP biI xOC xOC @@ -60443,7 +60493,7 @@ jIk jIk jIk jIk -xmW +jIk jIk fsP fsP @@ -60556,7 +60606,7 @@ fsP fsP fsP biI -biI +fsP biI xOC xOC @@ -60600,7 +60650,7 @@ xmW jIk xOC jIk -xmW +jIk jIk jIk fsP @@ -60698,7 +60748,7 @@ uMS uMS nbA mbj -rqG +cxb rqG pJn pJn @@ -60757,9 +60807,9 @@ jIk xOC xOC aLh +jIk xmW -xmW -xmW +jIk xmW xmW oFD @@ -60856,7 +60906,7 @@ awl dHl mbj rqG -rqG +cxb pJn pJn pJn @@ -60906,9 +60956,9 @@ fsP eUz eUz eUz -xmW -xmW -xmW +jIk +jIk +jIk omo jIk xOC @@ -60916,7 +60966,7 @@ xOC xOC jIk omo -xmW +jIk jIk xmW jIk @@ -61013,7 +61063,7 @@ oyZ oyZ waT ndg -rqG +cxb pJn pJn pJn @@ -61064,7 +61114,7 @@ eUz eUz eUz eUz -xmW +jIk xmW jIk jIk @@ -61073,10 +61123,10 @@ xOC jIk jIk jIk -xmW -xmW -xmW jIk +jIk +jIk +fsP xOC dQZ fJa @@ -61162,15 +61212,15 @@ fJa fJa dQZ ctF +gog rqG -rqG -rqG -rqG +cxb +cxb rqG ndg rqG rqG -rqG +cxb pJn pJn pJn @@ -61221,7 +61271,6 @@ eUz eUz eUz eUz -xmW jIk jIk jIk @@ -61230,9 +61279,10 @@ jIk jIk jIk jIk -xmW jIk -xmW +jIk +jIk +fsP xOC xOC doE @@ -61319,15 +61369,15 @@ bKO doE ctF ctF -rqG +gog ndg -rqG -rqG -rqG +cxb +cxb +cxb ndg -rqG -rqG -rqG +cxb +cxb +cxb rqG pJn pJn @@ -61378,18 +61428,18 @@ eUz eUz eUz eUz -xmW jIk -xmW +jIk xmW jIk jIk -xmW -xmW jIk xmW xmW jIk +jIk +jIk +fsP xOC xOC doE @@ -61476,14 +61526,14 @@ iwJ doE ctF ctF -rqG +gog rqG cxb rqG -rqG -rqG -rqG -rqG +cxb +cxb +cxb +cxb ndg rqG gog @@ -61535,18 +61585,18 @@ eUz eUz eUz eUz -xmW -xmW -xmW jIk -xmW -xmW +jIk +jIk +jIk +jIk +jIk omo jIk jIk aLh xmW -jIk +fsP xOC xOC waT @@ -61633,15 +61683,15 @@ oyZ waT ctF ctF -rqG +gog rqG cxb +cxb +cxb +cxb rqG -rqG -rqG -rqG -rqG -rqG +cxb +cxb cxb gog pJn @@ -61694,16 +61744,16 @@ eUz eUz jIk aLh -xmW jIk -xmW -xmW +jIk +jIk +jIk omo omo jIk jIk jIk -jIk +fsP xOC xOC doE @@ -61790,14 +61840,14 @@ bKO doE ctF ctF -cxb +gog cxb rqG ndg cxb cxb -rqG -rqG +cxb +cxb rqG pha gog @@ -61806,7 +61856,7 @@ pJn rqG rqG pGZ -gog +tmH xOC xOC xOC @@ -61851,16 +61901,16 @@ eUz eUz jIk jIk -xmW -xmW -xmW +jIk +jIk +jIk omo omo jIk -xmW -xmW -xmW jIk +jIk +jIk +fsP xOC xOC doE @@ -61948,13 +61998,13 @@ doE ctF ctF ctF -cxb +gog cxb cxb cxb ndg -rqG -rqG +cxb +cxb cxb gog gog @@ -61963,7 +62013,7 @@ pJn rqG rqG pGZ -gog +tmH xOC xOC xOC @@ -62006,18 +62056,18 @@ eUz eUz eUz xmW -xmW +jIk +jIk jIk xmW -xmW -xmW +jIk omo omo jIk jIk -xmW -xmW -xmW +jIk +jIk +fsP xOC xOC waT @@ -62105,12 +62155,12 @@ waT ctF ctF skH -cxb +gog eIK rqG -rqG -rqG -rqG +cxb +cxb +cxb rqG ndg gog @@ -62120,7 +62170,7 @@ pJn cxb cxb rNE -gog +tmH xOC xOC xOC @@ -62162,18 +62212,18 @@ eUz eUz eUz xOC -xmW -xmW jIk -xmW -xmW -xmW +jIk +jIk +jIk +jIk +jIk jIk jIk jIk xmW -xmW -xmW +jIk +fsP xOC xOC xOC @@ -62262,14 +62312,14 @@ doE ctF ctF ctF -qya -udt -udt -udt -udt +kga udt +qya +qya +qya udt qya +qya kga xIM xIM @@ -62278,7 +62328,7 @@ qya qya iWP kga -kga +fKR xOC xOC xOC @@ -62320,17 +62370,17 @@ eUz xOC xOC xmW -xmW jIk jIk jIk -xmW +jIk xmW jIk jIk -xmW jIk xmW +jIk +fsP xOC xOC xOC @@ -62419,7 +62469,7 @@ doE ctF ctF ctF -qya +kga dff dff qya @@ -62435,7 +62485,7 @@ qya qya qya tgG -kga +fKR xOC xOC xOC @@ -62475,19 +62525,19 @@ eUz eUz eUz xmW -xmW +jIk jIk jIk omo omo jIk -xmW -xmW jIk -xmW -kpC jIk -xmW +jIk +jIk +jIk +jIk +fsP xOC xOC xOC @@ -62576,7 +62626,7 @@ waT ctF ctF ctF -qya +kga qya dff qya @@ -62592,7 +62642,7 @@ qya dff qya iWP -kga +fKR xOC xOC xOC @@ -62632,19 +62682,19 @@ eUz eUz xmW jIk -xmW +jIk xmW jIk omo jIk jIk -xmW +jIk aDd xmW -xmW -xmW jIk -xmW +jIk +jIk +fsP xOC xOC xOC @@ -62733,12 +62783,12 @@ doE ctF ctF ctF -udt +kga udt qya qya -udt -udt +qya +qya udt xIM xIM @@ -62749,7 +62799,7 @@ qya qya qya iWP -kga +fKR xOC xOC xOC @@ -62787,21 +62837,21 @@ eUz eUz eUz eUz -xmW -xmW jIk -xmW -xmW -xmW -xmW jIk jIk xmW -xmW -xmW +jIk +jIk +jIk +jIk +jIk jIk xmW +jIk +jIk xmW +fsP xOC xOC xOC @@ -62890,11 +62940,11 @@ doE ctF ctF ctF -udt -udt -udt +kga +qya +qya +qya qya -udt qya xIM xIM @@ -62906,7 +62956,7 @@ qya qya dff iWP -kga +fKR xOC xOC xOC @@ -62944,21 +62994,21 @@ eUz eUz eUz eUz -xmW -xmW jIk jIk -xmW -xmW jIk jIk jIk jIk jIk -xmW jIk -omo jIk +jIk +jIk +jIk +jIk +omo +fsP xOC xOC xOC @@ -63047,8 +63097,8 @@ waT ctF ctF ctF -udt -udt +kga +qya qya qya qya @@ -63063,7 +63113,7 @@ udt qya qya iWP -kga +fKR xOC xOC xOC @@ -63102,20 +63152,20 @@ eUz eUz eUz aLh -xmW -xmW jIk -xmW -xmW -xmW -xmW -xmW -xmW jIk -xmW -xmW -xmW jIk +jIk +jIk +jIk +jIk +jIk +jIk +jIk +jIk +jIk +xmW +fsP xOC xOC xOC @@ -63204,7 +63254,7 @@ doE ctF ctF ctF -qya +kga qya qya dff @@ -63219,7 +63269,7 @@ qya qya qya kga -kga +fKR xOC xOC xOC @@ -63266,13 +63316,13 @@ jIk omo xmW jIk -xmW jIk jIk -xmW -xmW -xmW jIk +jIk +jIk +xmW +fsP xOC xOC xOC @@ -63360,10 +63410,10 @@ iwJ doE ctF ctF -udt +kga +qya +qya qya -udt -udt qya xIM xIM @@ -63374,8 +63424,8 @@ qya qya dff qya -qya kga +fKR xOC xOC xOC @@ -63428,8 +63478,8 @@ omo jIk jIk jIk -xmW jIk +fsP xOC xOC xOC @@ -63517,10 +63567,10 @@ oyZ waT ctF ctF -udt +kga +qya +qya qya -udt -udt udt xIM xIM @@ -63531,7 +63581,7 @@ qya qya qya udt -qya +fKR xOC xOC xOC @@ -63577,16 +63627,16 @@ jIk omo omo omo -xmW -xmW -xmW jIk -xmW -xmW -xmW -xmW jIk -xmW +jIk +jIk +jIk +jIk +jIk +jIk +jIk +fsP xOC xOC xOC @@ -63674,21 +63724,21 @@ bKO doE ctF ctF -udt +kga udt krw -udt -udt +qya +qya xIM xIM xIM -udt -qya -udt qya qya udt qya +qya +kga +fKR xOC xOC xOC @@ -63734,16 +63784,16 @@ jIk omo jIk omo -xmW +jIk jIk jIk jIk jIk jIk xmW -xmW -xmW -xmW +jIk +jIk +fsP xOC xOC xOC @@ -63831,7 +63881,7 @@ iwJ doE ctF ctF -qya +kga qya qya qya @@ -63843,8 +63893,8 @@ qya qya qya udt -qya -qya +kga +fKR xOC xOC xOC @@ -63889,18 +63939,18 @@ eUz ymg ymg jIk -xmW -xmW -xmW -xmW -xmW jIk -xmW -xmW -xmW -xmW +jIk +jIk +jIk +jIk jIk xmW +jIk +jIk +jIk +jIk +fsP xOC xOC xOC @@ -63989,19 +64039,19 @@ waT ctF ctF ctF +kga qya qya udt -udt xIM xIM xIM qya qya -udt qya -dff qya +dff +fKR xOC xOC xOC @@ -64048,16 +64098,16 @@ ymg ymg ymg xmW -xmW -xmW -xmW -aLh jIk jIk jIk +aLh +jIk +jIk jIk jIk jIk +fsP xOC xOC xOC @@ -64146,9 +64196,9 @@ doE ctF ctF ctF -udt +kga dff -udt +qya qya xIM xIM @@ -64157,8 +64207,8 @@ qya qya qya qya -qya -udt +kga +fKR xOC xOC xOC @@ -64207,14 +64257,14 @@ ymg ymg xmW xmW -xmW -xmW jIk jIk jIk -xmW -xmW -xmW +jIk +jIk +jIk +jIk +fsP xOC xOC xOC @@ -64303,9 +64353,9 @@ doE ctF ctF ctF -udt +kga dff -udt +qya qya xIM xIM @@ -64313,8 +64363,8 @@ xIM qya qya dff -qya -qya +kga +fKR xOC xOC xOC @@ -64357,21 +64407,21 @@ eUz eUz eUz eUz -xmW -xmW +jIk +jIk jIk omo ymg ymg ymg -xmW -xmW +jIk +jIk jIk omo jIk jIk jIk -xmW +fsP xOC xOC xOC @@ -64460,7 +64510,7 @@ waT ctF ctF ctF -qya +kga qya qya ihJ @@ -64470,8 +64520,8 @@ xIM ihJ qya qya -udt -udt +wgk +fKR xOC xOC xOC @@ -64514,21 +64564,21 @@ eUz eUz eUz eUz -xmW -xmW -xmW +jIk +jIk +jIk omo omo jIk ymg ymg jIk +jIk +jIk +jIk +jIk xmW -xmW -xmW -xmW -xmW -xmW +fsP xOC xOC xOC @@ -64617,7 +64667,7 @@ doE ctF ctF ctF -qya +kga qya qya vIs @@ -64627,8 +64677,8 @@ odr vIs vIs qya -udt -qya +wgk +fKR xOC xOC xOC @@ -64672,7 +64722,7 @@ eUz eUz eUz jIk -xmW +jIk jIk jIk jIk @@ -64681,12 +64731,12 @@ xmW ymg jIk xmW -xmW jIk jIk jIk jIk jIk +fsP xOC xOC doE @@ -64773,7 +64823,7 @@ iwJ doE ctF ctF -udt +kga udt qya qya @@ -64784,7 +64834,7 @@ odr ryX nLv qya -qya +fKR xOC xOC xOC @@ -64829,21 +64879,21 @@ eUz eUz eUz xmW -xmW -xmW jIk jIk -xmW +jIk +jIk +jIk jIk ymg ymg xmW -xmW -xmW -omo jIk jIk +omo +jIk jIk +fsP xOC xOC dQZ @@ -64930,17 +64980,17 @@ fJa dQZ ctF ctF -qya -udt -udt +kga udt +qya +qya dff mxu odr odr awG nLv -qya +fKR xOC xOC xOC @@ -64987,20 +65037,20 @@ eUz omo xmW jIk -xmW jIk jIk -xmW -xmW +jIk +jIk +jIk xmW xOC jIk -xmW -xmW -xmW jIk jIk jIk +jIk +jIk +fsP xOC dQZ waT @@ -65087,11 +65137,11 @@ fJa waT dQZ ctF +kga +qya +qya qya qya -udt -udt -udt mxu odr odr @@ -65142,22 +65192,22 @@ eUz eUz eUz jIk -xmW jIk jIk jIk -xmW -xmW +jIk +jIk +jIk xmW xOC xOC jIk -xmW -xmW jIk jIk jIk jIk +jIk +fsP xOC dQZ fJa @@ -65243,7 +65293,7 @@ fJa fJa fJa dQZ -qya +kga qya qya qya @@ -65298,24 +65348,24 @@ eUz eUz eUz eUz -xmW -xmW -xmW jIk jIk +xmW jIk jIk -xmW -xOC jIk jIk jIk +xOC +jIk jIk jIk jIk jIk jIk jIk +fsP +fsP fJa waT fJa @@ -65402,8 +65452,8 @@ waT fJa qya qya -udt -udt +qya +qya qya udt mxu @@ -65455,13 +65505,13 @@ eUz eUz eUz eUz -xmW +jIk aLh -xmW +jIk xmW jIk jIk -xmW +jIk omo xmW jIk @@ -65473,7 +65523,7 @@ jIk jIk jIk jIk -jIk +fsP dQZ fJa dQZ @@ -65559,10 +65609,10 @@ fJa qya qya qya -udt -udt qya -udt +qya +kga +fKR cSe lAK odr @@ -65613,23 +65663,23 @@ eUz eUz eUz xmW -xmW -xmW jIk jIk jIk -xmW jIk -xmW jIk jIk jIk -xmW +jIk +jIk +jIk +jIk +jIk xmW jIk pHC jIk -jIk +fsP xOC doE bKO @@ -65712,13 +65762,13 @@ xOC xOC xOC xOC -udt -udt +kga +wgk qya qya -udt -udt qya +qya +fKR xOC xOC xOC @@ -65771,22 +65821,22 @@ eUz eUz eUz jIk -xmW -xmW -xmW jIk -xmW -xmW jIk jIk jIk xmW -xmW -xmW jIk jIk jIk jIk +jIk +jIk +xmW +jIk +jIk +jIk +fsP xOC doE iwJ @@ -65859,22 +65909,22 @@ doE xOC xOC xOC -qya -qya -qya +kga +kga +kga xOC xOC xOC xOC -qya -qya -udt +kga +kga +kga udt qya qya qya -qya -qya +kga +fKR xOC xOC xOC @@ -65929,10 +65979,9 @@ eUz eUz jIk jIk -xmW jIk -xmW jIk +xmW jIk jIk jIk @@ -65944,6 +65993,7 @@ jIk jIk jIk jIk +fsP xOC waT oyZ @@ -66015,9 +66065,14 @@ oyZ waT xOC xOC +kga qya qya qya +kga +kga +kga +kga qya qya qya @@ -66025,12 +66080,7 @@ qya qya qya qya -udt -udt -qya -qya -qya -qya +fKR xOC xOC xOC @@ -66087,19 +66137,19 @@ eUz jIk jIk jIk -xmW jIk jIk jIk jIk jIk -pHC jIk +pHC jIk jIk jIk jIk jIk +fsP xOC xOC doE @@ -66171,23 +66221,23 @@ doE bKO doE xOC +kga qya qya -qya -udt udt udt +qya tgu qya udt -udt +qya udt qya qya -udt +qya krw udt -udt +fKR xOC xOC xOC @@ -66241,9 +66291,9 @@ oTz efe eUz eUz -xmW -xmW -xmW +jIk +jIk +jIk jIk xmW omo @@ -66256,7 +66306,7 @@ jIk jIk jIk xmW -xmW +fsP xOC xOC doE @@ -66283,7 +66333,7 @@ hMt hMt gQd fmc -bUB +jfg gnN fmc fmc @@ -66328,23 +66378,23 @@ doE iwJ doE xOC +kga qya qya -qya -udt -udt udt qya qya -udt -udt qya qya qya -udt -udt qya -udt +qya +qya +qya +qya +qya +qya +fKR xOC xOC xOC @@ -66399,21 +66449,21 @@ efe eUz eUz xmW -xmW jIk -xmW -xmW +jIk +jIk +jIk omo omo jIk jIk jIk jIk -xmW jIk -xmW -xmW -xmW +jIk +jIk +jIk +fsP xOC xOC waT @@ -66441,8 +66491,8 @@ puJ fmc fmc nFd +xtS xvH -lTt fmc smY bUB @@ -66473,7 +66523,7 @@ uWB ett ett xqr -aFk +yfZ wof wof xqr @@ -66486,22 +66536,22 @@ oyZ waT xOC xOC +kga qya qya qya -udt -udt qya qya -udt qya +wgk +kga +kga qya -udt -udt -udt -udt qya -udt +qya +qya +kga +fKR xOC xOC xOC @@ -66555,9 +66605,9 @@ efe efe eUz eUz -xmW -xmW -xmW +jIk +jIk +jIk mIn mIn xmW @@ -66565,12 +66615,12 @@ jIk jIk jIk jIk -xmW jIk -xmW -xmW -xmW -xmW +jIk +jIk +jIk +jIk +fsP xOC xOC doE @@ -66643,6 +66693,7 @@ bKO doE xOC xOC +kga qya qya qya @@ -66650,15 +66701,14 @@ qya qya qya qya -qya -qya +kga qya qya qya dff qya -qya -qya +kga +fKR xOC xOC xOC @@ -66716,18 +66766,18 @@ xmW mIn mIn mIn -mIn +fsP mIn qYJ jIk jIk jIk -xmW -xmW jIk jIk -xmW jIk +jIk +jIk +fsP xOC xOC doE @@ -66800,22 +66850,22 @@ iwJ doE xOC xOC +kga qya -qya -udt udt qya qya +qya udt qya tgu qya qya qya -udt -udt -udt qya +qya +kga +fKR xOC xOC xOC @@ -66872,7 +66922,7 @@ efe fsP fsP qYJ -mIn +fsP mIn mIn fsP @@ -66881,10 +66931,10 @@ jIk jIk jIk jIk -xmW -xmW -xmW jIk +jIk +xmW +fsP xOC xOC waT @@ -66958,21 +67008,21 @@ waT xOC xOC xOC +kga qya -udt -udt qya +kga qya qya qya qya udt -udt qya qya qya -udt qya +udt +fKR xOC xOC xOC @@ -67037,11 +67087,11 @@ fsP fsP mIn xmW -xmW -xmW jIk jIk jIk +jIk +fsP xOC xOC doE @@ -67115,21 +67165,21 @@ doE xOC xOC xOC -udt -qya -udt +wgk qya qya +kga +kga dff qya qya -udt -udt qya qya -udt -udt qya +qya +udt +fKR +fKR xOC xOC xOC @@ -67193,11 +67243,11 @@ mIn fsP qYJ mIn +fsP mIn mIn -mIn -xmW -xmW +jIk +fsP xOC xOC xOC @@ -67271,20 +67321,20 @@ iwJ doE xOC xOC -qya +kga tgu qya qya qya udt -udt -udt qya udt -udt -krw qya qya +qya +krw +qya +fKR xOC xOC xOC @@ -67346,15 +67396,15 @@ fsP xVA mIn mIn -mIn +fsP fsP mIn xeY mIn fsP fsP -xmW -xmW +jIk +fsP xOC xOC xOC @@ -67383,7 +67433,7 @@ jYA pKq fmc kUZ -mzg +cwU fmc uXi hpu @@ -67428,20 +67478,20 @@ oyZ waT xOC xOC +kga qya qya qya qya qya -udt -udt -qya qya qya qya qya qya qya +kga +fKR xOC xOC xOC @@ -67504,14 +67554,14 @@ fsP fsP fsP mIn -mIn +fsP mIn fsP fsP fsP fsP -xmW jIk +fsP xOC xOC xOC @@ -67585,7 +67635,7 @@ bKO doE xOC xOC -qya +kga qya qya qya @@ -67595,10 +67645,10 @@ qya qya qya dff -udt -udt qya qya +kga +fKR xOC xOC xOC @@ -67668,7 +67718,7 @@ fsP fsP fsP xVA -jIk +fsP xOC xOC xOC @@ -67742,7 +67792,7 @@ iwJ doE xOC xOC -udt +kga qya qya qya @@ -67752,9 +67802,9 @@ qya qya qya qya -udt -udt -udt +qya +kga +fKR xOC xOC xOC @@ -67825,7 +67875,7 @@ fsP qYJ fsP mIn -xmW +fsP xOC xOC xOC @@ -67899,19 +67949,19 @@ oyZ waT xOC xOC +kga +kga udt qya -udt -qya -qya +kga dff qya udt +qya +qya udt udt -udt -udt -udt +fKR xOC xOC xOC @@ -67981,8 +68031,8 @@ fsP fsP mIn fsP -mIn -xmW +fsP +fsP xOC xOC xOC @@ -68057,17 +68107,17 @@ doE xOC xOC xOC +kga udt -udt -qya -qya qya qya +kga qya qya -udt qya qya +kga +fKR xOC xOC xOC @@ -68137,9 +68187,9 @@ fsP fsP fsP fsP +fsP mIn -mIn -xmW +fsP xOC xOC xOC @@ -68213,18 +68263,18 @@ iwJ doE xOC xOC -qya +kga qya qya qya tgu qya udt -udt -qya qya qya qya +kga +fKR xOC xOC xOC @@ -68296,7 +68346,7 @@ fsP xmW mIn mIn -mIn +fsP xOC xOC xOC @@ -68325,9 +68375,9 @@ wxP dEj fmc sVH -bma +eNw fmc -plh +vJu fnn vJu aDR @@ -68371,16 +68421,16 @@ waT xOC xOC xOC -qya +kga dff dff qya qya -udt -udt qya +udt qya qya +fKR xOC xOC xOC @@ -68434,7 +68484,7 @@ xOC xOC xOC xOC -ylN +biI ylN ylN ylN @@ -68453,7 +68503,7 @@ fsP jIk jIk vzN -mIn +fsP xOC xOC xOC @@ -68528,15 +68578,15 @@ doE xOC xOC xOC -qya +kga udt dff -udt qya qya -udt -qya qya +udt +kga +fKR xOC xOC xOC @@ -68592,8 +68642,8 @@ xOC xOC xOC xOC -ylN -ylN +biI +fsP ylN fsP fsP @@ -68610,7 +68660,7 @@ fsP fsP fsP mIn -mIn +fsP xOC xOC xOC @@ -68684,15 +68734,15 @@ iwJ doE xOC xOC +kga qya qya -udt -udt -udt qya qya qya qya +qya +fKR xOC xOC xOC @@ -68749,9 +68799,9 @@ xOC xOC xOC xOC +biI ylN -ylN -ylN +fsP ylN cBY kOY @@ -68797,7 +68847,7 @@ dEj fmc asH vMg -sac +vMg fmc vlp snq @@ -68841,14 +68891,14 @@ fJa fJa xOC xOC +kga qya qya -udt qya -udt -dff qya +dff qya +fKR xOC xOC xOC @@ -68907,7 +68957,7 @@ xOC xOC xOC xOC -ylN +biI ylN ylN cBY @@ -68925,7 +68975,7 @@ nui cOV cBY jIk -jIk +fsP xOC xOC doE @@ -68998,14 +69048,14 @@ fJa waT fJa xOC -qya -udt -qya -qya +kga qya qya qya qya +kga +kga +fKR xOC xOC xOC @@ -69065,7 +69115,7 @@ xOC xOC xOC xOC -ylN +biI ylN lJD jRg @@ -69073,7 +69123,7 @@ fsP fsP fsP fsP -cQZ +fsP ylN ylN ylN @@ -69154,14 +69204,14 @@ fJa fJa fJa dQZ -udt +kga udt krw -udt -qya -qya qya qya +kga +fKR +fKR xOC xOC xOC @@ -69223,9 +69273,9 @@ xOC xOC xOC xOC +biI ylN -ylN -ylN +fsP ylN ylN fsP @@ -69235,11 +69285,11 @@ ylN ylN ylN cBY -aCz +kOY kOY hnK fsP -jIk +fsP xOC xOC dQZ @@ -69311,13 +69361,13 @@ waT fJa waT dQZ -udt -udt -udt -udt -udt qya qya +kga +qya +qya +fKR +fKR xOC xOC xOC @@ -69380,9 +69430,9 @@ xOC xOC xOC xOC -ylN -ylN -ylN +biI +fsP +fsP ylN ylN kTz @@ -69470,9 +69520,9 @@ dQZ kga kga kga -qya -qya -qya +kga +fKR +fKR xOC xOC xOC @@ -69537,9 +69587,9 @@ xOC xOC xOC xOC +biI ylN -ylN -ylN +fsP ylN ylN ylN @@ -69628,7 +69678,7 @@ kga kga kga fKR -xOC +fKR xOC xOC xOC @@ -69695,10 +69745,10 @@ xOC xOC xOC xOC +biI ylN -ylN -ylN -ylN +fsP +fsP ylN ylN ylN @@ -69756,7 +69806,7 @@ xOC xOC xOC xOC -qya +kga xOC xOC xOC @@ -69766,16 +69816,16 @@ xOC xOC xOC xOC -qya -udt -qya -qya -qya -udt -udt -qya -udt -udt +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga kga kga kga @@ -69852,10 +69902,10 @@ xOC xOC xOC xOC +biI ylN ylN -ylN -ylN +fsP ylN klw ylN @@ -69912,22 +69962,22 @@ doE xOC xOC xOC +kga qya -qya -qya -qya -udt -udt -qya +kga +kga +kga +kga +kga +kga +kga +kga +kga qya udt udt qya qya -udt -udt -udt -udt qya udt qya @@ -70010,10 +70060,10 @@ xOC xOC xOC xOC -ylN -ylN -ylN -ylN +biI +fsP +fsP +fsP ylN ylN lJD @@ -70025,12 +70075,12 @@ fsP ylN ylN ylN -ylN +fsP fsP fsP fsP xmW -xmW +fsP xOC xOC xOC @@ -70068,25 +70118,25 @@ oyZ waT xOC xOC -qya -udt +kga udt udt qya -udt qya udt qya qya -udt qya -udt -udt -udt +qya +qya +qya +qya +qya +qya qya qya dff -udt +qya udt kga kga @@ -70167,9 +70217,9 @@ xOC xOC xOC xOC -ylN -ylN -ylN +biI +fsP +fsP ylN ylN ylN @@ -70181,15 +70231,15 @@ kJH ylN ylN ylN -ylN -ylN -ylN -ylN fsP fsP -xmW -xmW -jIk +fsP +fsP +fsP +fsP +fsP +fsP +fsP xOC xOC xOC @@ -70224,22 +70274,22 @@ doE bKO doE xOC +kga +qya qya qya qya -udt -udt dff dff qya -udt -udt qya udt -udt qya udt -gzJ +qya +qya +qya +qya qya dff dff @@ -70324,10 +70374,10 @@ xOC xOC xOC xOC +biI ylN ylN -ylN -ylN +fsP ylN ylN kPo @@ -70338,16 +70388,16 @@ cBY ylN ylN ylN -ylN -ylN -ylN -ylN +fsP +fsP +fsP +fsP fsP fsP fsP xmW jIk -jIk +fsP xOC xOC doE @@ -70381,21 +70431,21 @@ doE iwJ doE xOC +kga qya qya qya qya -udt dff dff qya -udt -udt -udt qya qya qya -udt +qya +qya +qya +qya udt qya qya @@ -70482,7 +70532,7 @@ xOC xOC xOC xOC -ylN +biI ylN ylN ylN @@ -70494,17 +70544,17 @@ hui cBY ylN ylN -ylN -ylN -ylN -ylN -ylN -biI -biI +fsP +fsP +fsP +fsP +fsP +fsP +fsP fsP fsP xmW -xmW +fsP xOC xOC doE @@ -70539,17 +70589,17 @@ oyZ waT xOC xOC +kga +qya +qya qya qya qya -udt -udt -udt qya qya qya udt -udt +qya qya qya udt @@ -70640,8 +70690,8 @@ xOC xOC xOC xOC -ylN -ylN +biI +fsP ylN ylN lJD @@ -70652,15 +70702,15 @@ lJD ylN ylN ylN -ylN -ylN -ylN -biI -biI -biI -wgk -biI -biI +fsP +fsP +fsP +fsP +fsP +fsP +qYJ +fsP +fsP biI xOC xOC @@ -70700,14 +70750,14 @@ kga qya qya qya -udt +qya qya qya udt udt qya qya -udt +qya qya qya kga @@ -70797,6 +70847,9 @@ xOC xOC xOC xOC +biI +fsP +fsP ylN ylN ylN @@ -70806,19 +70859,16 @@ ylN ylN ylN ylN -ylN -ylN -ylN -ylN -biI -biI -biI -biI -biI -biI -biI -biI -biI +fsP +fsP +fsP +fsP +fsP +fsP +fsP +fsP +fsP +fsP biI dQZ waT @@ -70859,8 +70909,8 @@ qya qya qya udt -udt -udt +qya +qya udt qya dff @@ -70955,28 +71005,28 @@ xOC xOC xOC xOC +biI +fsP +fsP +fsP ylN ylN ylN ylN -ylN -ylN -ylN -ylN -ylN -ylN -biI -biI -biI -biI -biI -biI +fsP +fsP +fsP +fsP +fsP biI biI biI biI +fsP biI biI +fsP +fsP fJa fJa fJa @@ -71013,10 +71063,10 @@ xOC kga kga kga -qya -qya -qya -qya +kga +kga +kga +kga qya qya dff @@ -71112,17 +71162,17 @@ xOC xOC xOC xOC -ylN -ylN -ylN -ylN -ylN -ylN -ylN -ylN -ylN -ylN biI +fsP +fsP +fsP +fsP +fsP +fsP +ylN +fsP +fsP +fsP biI biI biI @@ -71131,7 +71181,7 @@ xOC biI biI biI -xOC +biI biI biI dQZ @@ -71168,11 +71218,11 @@ waT fJa kga kga -kga -kga -kga -qya -qya +fKR +fKR +fKR +fKR +fKR qya kga kga @@ -71270,16 +71320,16 @@ xOC xOC xOC xOC -ylN -ylN -ylN -ylN -ylN -ylN -biI -biI biI +fsP +fsP +fsP +fsP +ylN biI +fsP +fsP +fsP biI biI xOC @@ -71289,49 +71339,49 @@ xOC xOC xOC xOC -xOC fKR fKR +kga dQZ dQZ fJa -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga kga kga fJa fJa dQZ kga -kga -kga -xOC +fKR +fKR +fKR xOC xOC xOC xOC -kga -kga +fKR +fKR kga kga kga @@ -71428,10 +71478,10 @@ xOC xOC xOC xOC -ylN -ylN -ylN -ylN +biI +fsP +fsP +fsP ylN biI biI @@ -71447,29 +71497,6 @@ xOC xOC xOC xOC -xOC -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR fKR fKR kga @@ -71480,7 +71507,30 @@ kga kga kga kga -xOC +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +kga +fKR +fKR +fKR xOC xOC xOC @@ -71614,17 +71664,11 @@ fKR fKR fKR fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR -fKR +kga +kga +kga +kga +kga fKR fKR kga @@ -71635,7 +71679,13 @@ kga kga kga kga -xOC +kga +kga +kga +kga +fKR +fKR +fKR xOC xOC xOC @@ -71772,9 +71822,7 @@ xOC fKR fKR fKR -fKR -fKR -fKR +kga fKR fKR fKR @@ -71782,6 +71830,7 @@ fKR fKR fKR kga +fKR kga kga kga @@ -71790,6 +71839,7 @@ kga kga kga kga +fKR xOC xOC xOC @@ -71936,16 +71986,16 @@ fKR fKR fKR fKR +fKR +fKR +fKR +fKR kga kga kga kga -kga -kga -kga -kga -kga -kga +fKR +fKR xOC xOC xOC @@ -72096,11 +72146,11 @@ xOC xOC xOC xOC -kga -kga -kga -kga -kga +fKR +fKR +fKR +fKR +fKR xOC xOC xOC @@ -92043,7 +92093,7 @@ bUB vMg oDn sMV -xFr +sMV sMV atE qhb @@ -115426,7 +115476,7 @@ czs jdd lLG eUm -eUm +iKm eUm ehD jdd @@ -115582,9 +115632,9 @@ eUm eUm jdd uTc -eUm +bMe oBf -eUm +iKm bZm oOv mag @@ -115740,7 +115790,7 @@ eUm dpQ vld eUm -eUm +did eUm fKY jdd @@ -115890,7 +115940,7 @@ ouw ouw mag oOv -eUm +lbd eUm duc fdT @@ -116526,15 +116576,15 @@ rCC rCC rCC uNI -xJG -uNI +iOq uNI uNI -iOq uNI +xJG uNI uNI uNI +tjb mag ouw ouw @@ -116848,7 +116898,7 @@ jdd tQO lBm aVs -vbX +omK ymf ouw ouw diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 0c3343858a..08a5d44078 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -372,9 +372,9 @@ /turf/open/floor/rogue/blocks, /area/rogue) "aS" = ( -/obj/item/rogueweapon/greatsword/zwei, -/obj/item/rogueweapon/greatsword/zwei, -/obj/item/rogueweapon/greatsword/zwei, +/obj/item/rogueweapon/sword/long/greatsword/zwei, +/obj/item/rogueweapon/sword/long/greatsword/zwei, +/obj/item/rogueweapon/sword/long/greatsword/zwei, /obj/structure/table/wood{ icon_state = "largetable" }, @@ -391,11 +391,11 @@ /obj/structure/table/wood{ icon_state = "largetable" }, -/obj/item/rogueweapon/greatsword, -/obj/item/rogueweapon/greatsword, -/obj/item/rogueweapon/greatsword, -/obj/item/rogueweapon/greatsword, -/obj/item/rogueweapon/greatsword, +/obj/item/rogueweapon/sword/long/greatsword, +/obj/item/rogueweapon/sword/long/greatsword, +/obj/item/rogueweapon/sword/long/greatsword, +/obj/item/rogueweapon/sword/long/greatsword, +/obj/item/rogueweapon/sword/long/greatsword, /turf/open/floor/rogue/cobble, /area/rogue) "aV" = ( @@ -411,9 +411,9 @@ /obj/structure/table/wood{ icon_state = "largetable" }, -/obj/item/rogueweapon/greatsword/elfgsword, -/obj/item/rogueweapon/greatsword/elfgsword, -/obj/item/rogueweapon/greatsword/elfgsword, +/obj/item/rogueweapon/sword/long/kriegsmesser, +/obj/item/rogueweapon/sword/long/kriegsmesser, +/obj/item/rogueweapon/sword/long/kriegsmesser, /turf/open/floor/rogue/cobble, /area/rogue) "aX" = ( @@ -451,9 +451,9 @@ /obj/structure/table/wood{ icon_state = "largetable" }, -/obj/item/rogueweapon/sword/long/marlin, -/obj/item/rogueweapon/sword/long/marlin, -/obj/item/rogueweapon/sword/long/marlin, +/obj/item/rogueweapon/sword/sabre/shalal, +/obj/item/rogueweapon/sword/sabre/shalal, +/obj/item/rogueweapon/sword/sabre/shalal, /turf/open/floor/rogue/cobble, /area/rogue) "bb" = ( @@ -469,10 +469,10 @@ dir = 1; icon_state = "largetable" }, -/obj/item/rogueweapon/halberd/bardiche, -/obj/item/rogueweapon/halberd/bardiche, -/obj/item/rogueweapon/halberd/bardiche, -/obj/item/rogueweapon/halberd/bardiche, +/obj/item/rogueweapon/polearm/halberd/bardiche, +/obj/item/rogueweapon/polearm/halberd/bardiche, +/obj/item/rogueweapon/polearm/halberd/bardiche, +/obj/item/rogueweapon/polearm/halberd/bardiche, /turf/open/floor/rogue/cobble, /area/rogue) "bd" = ( @@ -551,9 +551,9 @@ /turf/open/floor/rogue/cobble, /area/rogue) "bo" = ( -/obj/item/rogueweapon/copperaxe, -/obj/item/rogueweapon/copperaxe, -/obj/item/rogueweapon/copperaxe, +/obj/item/rogueweapon/axe/copper, +/obj/item/rogueweapon/axe/copper, +/obj/item/rogueweapon/axe/copper, /obj/structure/table/wood/large/corner_new{ dir = 1 }, @@ -563,21 +563,21 @@ /obj/structure/table/wood/large/corner_new{ dir = 1 }, -/obj/item/rogueweapon/woodcut, -/obj/item/rogueweapon/woodcut, -/obj/item/rogueweapon/woodcut, -/obj/item/rogueweapon/woodcut, -/obj/item/rogueweapon/woodcut, +/obj/item/rogueweapon/axe/iron, +/obj/item/rogueweapon/axe/iron, +/obj/item/rogueweapon/axe/iron, +/obj/item/rogueweapon/axe/iron, +/obj/item/rogueweapon/axe/iron, /turf/open/floor/rogue/cobble, /area/rogue) "bq" = ( /obj/structure/table/wood/large/corner_new{ dir = 5 }, -/obj/item/rogueweapon/battle, -/obj/item/rogueweapon/battle, -/obj/item/rogueweapon/battle, -/obj/item/rogueweapon/battle, +/obj/item/rogueweapon/axe/battle, +/obj/item/rogueweapon/axe/battle, +/obj/item/rogueweapon/axe/battle, +/obj/item/rogueweapon/axe/battle, /turf/open/floor/rogue/cobble, /area/rogue) "br" = ( @@ -677,7 +677,7 @@ /area/rogue/indoors/vampire_manor) "bG" = ( /obj/structure/fluff/wallclock/vampire, -/obj/machinery/light/rogue/hearth/big_fireplace, +/obj/machinery/light/rogue/wallfire/big_fireplace, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/vampire_manor) "bH" = ( @@ -732,14 +732,14 @@ /obj/item/clothing/mask/cigarette/pipe/westman{ pixel_y = 10 }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed{ +/obj/item/reagent_containers/food/snacks/produce/dry_westleach{ pixel_x = -2; pixel_y = 12 }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed{ +/obj/item/reagent_containers/food/snacks/produce/dry_westleach{ pixel_y = 11 }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed{ +/obj/item/reagent_containers/food/snacks/produce/dry_westleach{ pixel_x = 2; pixel_y = 7 }, @@ -798,8 +798,6 @@ /area/rogue/indoors/vampire_manor) "ca" = ( /obj/structure/bookcase, -/obj/item/book/rogue/manners, -/obj/item/book/rogue/sword, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/vampire_manor) "cc" = ( @@ -895,7 +893,7 @@ /turf/open/floor/rogue/blocks/paving, /area/rogue/indoors/vampire_manor) "ct" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/fluff/walldeco/maidendrape{ pixel_y = 0 }, @@ -1005,9 +1003,6 @@ /obj/effect/decal/cleanable/dirt/cobweb, /turf/open/floor/rogue/metal/barograte, /area/rogue/indoors/vampire_manor) -"cL" = ( -/turf/closed/mineral/random/rogue/high, -/area/rogue/indoors) "cM" = ( /obj/structure/fluff/statue/knightalt, /turf/open/floor/rogue/metal/barograte, @@ -1062,7 +1057,7 @@ "da" = ( /obj/structure/bars, /turf/open/floor/rogue/blocks, -/area/rogue/indoors) +/area/rogue/indoors/bandit_lair) "db" = ( /obj/structure/table/vtable, /turf/open/floor/rogue/metal/barograte, @@ -1155,7 +1150,7 @@ /area/rogue/indoors/bandit_lair) "dp" = ( /turf/open/floor/rogue/dirt, -/area/rogue/indoors) +/area/rogue/indoors/bandit_lair) "dq" = ( /obj/effect/decal/cleanable/dirt/cobweb{ dir = 1; @@ -1208,7 +1203,7 @@ dir = 10; icon_state = "largetable" }, -/obj/item/rogueweapon/huntingknife/cleaver{ +/obj/item/rogueweapon/knife/cleaver{ pixel_x = 8; pixel_y = 12 }, @@ -1412,6 +1407,10 @@ /obj/item/reagent_containers/glass/cup/silver, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue) +"fn" = ( +/obj/effect/landmark/start/evilskeleton, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/bog/inhumen_camp) "fp" = ( /obj/machinery/light/rogue/hearth, /obj/item/cooking/pan, @@ -1539,11 +1538,11 @@ dir = 1; icon_state = "largetable" }, -/obj/item/rogueweapon/spear, -/obj/item/rogueweapon/spear, -/obj/item/rogueweapon/spear, -/obj/item/rogueweapon/spear, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, +/obj/item/rogueweapon/polearm/spear, +/obj/item/rogueweapon/polearm/spear, +/obj/item/rogueweapon/polearm/spear, +/obj/item/rogueweapon/polearm/spear, /turf/open/floor/rogue/cobble, /area/rogue) "hA" = ( @@ -1653,9 +1652,8 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue) "js" = ( -/obj/structure/table/wood/plain_alt, -/turf/open/floor/rogue/ruinedwood/turned/darker, -/area/rogue/indoors) +/turf/closed/wall/mineral/rogue/tent, +/area/rogue/indoors/bandit_lair) "jH" = ( /obj/structure/table/wood{ icon_state = "longtable" @@ -1683,9 +1681,6 @@ /obj/item/clothing/cloak/raincloak/furcloak/black, /turf/open/floor/rogue/carpet, /area/rogue) -"jU" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors) "jW" = ( /obj/structure/bed/rogue, /turf/open/floor/rogue/ruinedwood/turned/darker, @@ -1705,8 +1700,8 @@ /obj/item/clothing/suit/roguetown/armor/leather, /obj/item/clothing/suit/roguetown/armor/leather, /obj/item/clothing/suit/roguetown/armor/leather, -/obj/item/clothing/suit/roguetown/armor/leather/studded, -/obj/item/clothing/suit/roguetown/armor/leather/studded, +/obj/item/clothing/suit/roguetown/armor/leather/splint, +/obj/item/clothing/suit/roguetown/armor/leather/splint, /turf/open/floor/rogue/carpet, /area/rogue) "kB" = ( @@ -1725,10 +1720,6 @@ /obj/item/clothing/head/roguetown/rare/dwarfplate, /turf/open/floor/rogue/wood, /area/rogue) -"kG" = ( -/obj/structure/fluff/traveltile/to_inhumen_tribe, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/bog) "kL" = ( /obj/structure/closet/dirthole/grave, /turf/open/floor/rogue/dirt, @@ -1781,7 +1772,7 @@ "mp" = ( /obj/structure/bars, /turf/open/floor/rogue/dirt, -/area/rogue/indoors) +/area/rogue/indoors/bandit_lair) "mv" = ( /obj/structure/bed/rogue/hay, /turf/open/floor/rogue/ruinedwood/darker, @@ -1947,10 +1938,10 @@ dir = 1; icon_state = "largetable" }, -/obj/item/rogueweapon/halberd, -/obj/item/rogueweapon/halberd, -/obj/item/rogueweapon/halberd, -/obj/item/rogueweapon/halberd, +/obj/item/rogueweapon/polearm/halberd, +/obj/item/rogueweapon/polearm/halberd, +/obj/item/rogueweapon/polearm/halberd, +/obj/item/rogueweapon/polearm/halberd, /turf/open/floor/rogue/cobble, /area/rogue) "nQ" = ( @@ -1958,10 +1949,10 @@ dir = 5; icon_state = "largetable" }, -/obj/item/rogueweapon/spear/billhook, -/obj/item/rogueweapon/spear/billhook, -/obj/item/rogueweapon/spear/billhook, -/obj/item/rogueweapon/spear/billhook, +/obj/item/rogueweapon/polearm/spear/billhook, +/obj/item/rogueweapon/polearm/spear/billhook, +/obj/item/rogueweapon/polearm/spear/billhook, +/obj/item/rogueweapon/polearm/spear/billhook, /turf/open/floor/rogue/cobble, /area/rogue) "nS" = ( @@ -2021,7 +2012,7 @@ /obj/structure/closet/crate/chest/neu, /obj/item/rogueweapon/tongs, /turf/open/floor/rogue/ruinedwood/turned/darker, -/area/rogue/indoors) +/area/rogue/indoors/bandit_lair) "ph" = ( /obj/structure/table/wood/reinforced, /obj/item/clothing/cloak/raincloak/green, @@ -2236,7 +2227,7 @@ /obj/item/rope/chain, /obj/item/rope/chain, /turf/open/floor/rogue/ruinedwood/turned/darker, -/area/rogue/indoors) +/area/rogue/indoors/bandit_lair) "ro" = ( /obj/structure/fermenting_barrel/random/water, /turf/open/floor/rogue/ruinedwood/turned/darker, @@ -2266,9 +2257,9 @@ /obj/structure/table/wood/large/corner_new{ dir = 9 }, -/obj/item/rogueweapon/stoneaxe, -/obj/item/rogueweapon/stoneaxe, -/obj/item/rogueweapon/stoneaxe, +/obj/item/rogueweapon/axe/stone, +/obj/item/rogueweapon/axe/stone, +/obj/item/rogueweapon/axe/stone, /turf/open/floor/rogue/cobble, /area/rogue) "rM" = ( @@ -2289,7 +2280,7 @@ /area/rogue) "rY" = ( /obj/structure/table/wood/plain, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/tile/checker_green, /area/rogue) "sb" = ( @@ -2304,9 +2295,6 @@ /obj/machinery/light/rogue/firebowl/standing, /turf/open/floor/rogue/dirt/road, /area/rogue) -"sh" = ( -/turf/open/floor/rogue/ruinedwood/turned/darker, -/area/rogue/indoors) "sk" = ( /obj/structure/fluff/traveltile{ aportalgoesto = "vampexit"; @@ -2508,7 +2496,7 @@ /obj/effect/decal/cleanable/blood/splatter, /obj/structure/chair/wood/rogue, /turf/open/floor/rogue/ruinedwood/darker, -/area/rogue/indoors) +/area/rogue/indoors/bandit_lair) "vd" = ( /obj/structure/table/wood/fancy/red, /obj/item/clothing/suit/roguetown/armor/plate/orc/warlord, @@ -2536,7 +2524,7 @@ /obj/item/paper, /obj/item/natural/feather, /turf/open/floor/rogue/ruinedwood/turned/darker, -/area/rogue/indoors) +/area/rogue/indoors/bandit_lair) "vj" = ( /obj/item/rogueweapon/thresher/military, /turf/open/floor/rogue/dirt/road, @@ -2610,10 +2598,6 @@ "wO" = ( /turf/closed, /area/rogue/outdoors) -"wZ" = ( -/obj/machinery/light/rogue/torchholder/l, -/turf/open/floor/rogue/ruinedwood/turned/darker, -/area/rogue/indoors) "xa" = ( /obj/structure/table/wood/fancy/black, /obj/item/clothing/shoes/roguetown/ridingboots, @@ -2735,7 +2719,7 @@ /area/rogue/indoors/bandit_lair) "yq" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/idagger, +/obj/item/rogueweapon/knife/dagger, /turf/open/floor/rogue/ruinedwood/darker, /area/rogue/indoors/bandit_lair) "yv" = ( @@ -2827,16 +2811,16 @@ /area/rogue/indoors/vampire_manor) "zn" = ( /obj/structure/table/wood/reinforced, -/obj/item/clothing/suit/roguetown/armor/medium/surcoat/heartfelt/hand, +/obj/item/clothing/suit/roguetown/armor/medium/surcoat/heartfelt, /obj/item/clothing/suit/roguetown/armor/medium/surcoat, -/obj/item/clothing/suit/roguetown/armor/plate/vampire, +/obj/item/clothing/suit/roguetown/armor/cuirass/vampire, /obj/item/clothing/suit/roguetown/armor/plate/blkknight, /turf/open/floor/rogue/carpet, /area/rogue) "zC" = ( -/obj/item/rogueweapon/eaglebeak, -/obj/item/rogueweapon/eaglebeak, -/obj/item/rogueweapon/eaglebeak, +/obj/item/rogueweapon/polearm/eaglebeak, +/obj/item/rogueweapon/polearm/eaglebeak, +/obj/item/rogueweapon/polearm/eaglebeak, /obj/structure/table/wood{ dir = 1; icon_state = "largetable" @@ -2866,10 +2850,7 @@ /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/woods_safe) "Ao" = ( -/obj/structure/fluff/traveltile{ - aportalgoesto = "banditexit"; - aportalid = "banditin" - }, +/obj/structure/fluff/traveltile/exit_vampire, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/woods_safe) "As" = ( @@ -2994,9 +2975,6 @@ }, /turf/open/floor/rogue/metal/barograte, /area/rogue/indoors/vampire_manor) -"CD" = ( -/turf/open/floor/rogue/ruinedwood/darker, -/area/rogue/indoors) "CK" = ( /obj/structure/chair/bench/couchablack, /turf/open/floor/rogue/ruinedwood/chevron, @@ -3030,7 +3008,7 @@ /area/rogue/indoors/bandit_lair) "Df" = ( /obj/structure/fluff/traveltile/exit_inhumen, -/turf/open/floor/rogue/dirt/road, +/turf/open/water/swamp, /area/rogue/outdoors/bog/inhumen_camp) "Dg" = ( /obj/structure/table/wood/fancy/orange, @@ -3061,9 +3039,6 @@ }, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/woods_safe) -"DA" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/bandit_lair) "Ed" = ( /obj/item/grown/log/tree/stick, /turf/open/floor/rogue/dirt/road, @@ -3106,7 +3081,7 @@ "EC" = ( /obj/structure/toilet, /turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) +/area/rogue/indoors/bandit_lair) "Fe" = ( /obj/effect/decal/cleanable/blood, /obj/structure/fluff/railing/fence{ @@ -3252,7 +3227,10 @@ "GX" = ( /obj/effect/decal/cleanable/blood/tracks, /turf/open/floor/rogue/cobble, -/area/rogue/indoors) +/area/rogue/indoors/bandit_lair) +"Hi" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/bandit_lair) "Hq" = ( /obj/structure/table/wood{ dir = 9; @@ -3271,10 +3249,10 @@ dir = 5; icon_state = "largetable" }, -/obj/item/rogueweapon/huntingknife/stoneknife, -/obj/item/rogueweapon/huntingknife/stoneknife, -/obj/item/rogueweapon/huntingknife/stoneknife, -/obj/item/rogueweapon/huntingknife/stoneknife, +/obj/item/rogueweapon/knife/stone, +/obj/item/rogueweapon/knife/stone, +/obj/item/rogueweapon/knife/stone, +/obj/item/rogueweapon/knife/stone, /turf/open/floor/rogue/cobble, /area/rogue) "Hv" = ( @@ -3340,7 +3318,7 @@ /area/rogue) "In" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/woodcut, +/obj/item/rogueweapon/axe/iron, /turf/open/floor/rogue/ruinedwood/darker, /area/rogue/indoors/bandit_lair) "Ip" = ( @@ -3352,10 +3330,10 @@ dir = 1; icon_state = "largetable" }, -/obj/item/rogueweapon/copperdagger, -/obj/item/rogueweapon/copperdagger, -/obj/item/rogueweapon/copperdagger, -/obj/item/rogueweapon/copperdagger, +/obj/item/rogueweapon/knife/copper, +/obj/item/rogueweapon/knife/copper, +/obj/item/rogueweapon/knife/copper, +/obj/item/rogueweapon/knife/copper, /turf/open/floor/rogue/cobble, /area/rogue) "Ir" = ( @@ -3363,7 +3341,7 @@ /area/rogue) "Is" = ( /obj/structure/table/wood/plain, -/obj/item/kitchen/rollingpin, +/obj/item/rogueweapon/mace/woodclub/rollingpin, /turf/open/floor/rogue/tile/checker_green, /area/rogue) "Iu" = ( @@ -3371,9 +3349,9 @@ dir = 1; icon_state = "longtable" }, -/obj/item/clothing/head/roguetown/grenzelhofthat, -/obj/item/clothing/head/roguetown/grenzelhofthat, -/obj/item/clothing/head/roguetown/grenzelhofthat, +/obj/item/clothing/head/roguetown/helmet/skullcap/grenzelhoft, +/obj/item/clothing/head/roguetown/helmet/skullcap/grenzelhoft, +/obj/item/clothing/head/roguetown/helmet/skullcap/grenzelhoft, /turf/open/floor/rogue/wood, /area/rogue) "Iw" = ( @@ -3423,7 +3401,7 @@ "Jb" = ( /obj/structure/fluff/walldeco/chains, /turf/open/floor/rogue/dirt, -/area/rogue/indoors) +/area/rogue/indoors/bandit_lair) "Jf" = ( /obj/structure/table/wood{ dir = 10; @@ -3461,16 +3439,16 @@ dir = 1; icon_state = "largetable" }, -/obj/item/rogueweapon/huntingknife/idagger/silver, -/obj/item/rogueweapon/huntingknife/idagger/silver, -/obj/item/rogueweapon/huntingknife/idagger/silver, -/obj/item/rogueweapon/huntingknife/idagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, /turf/open/floor/rogue/cobble, /area/rogue) "JQ" = ( /obj/effect/decal/cleanable/blood, /turf/open/floor/rogue/cobble, -/area/rogue/indoors) +/area/rogue/indoors/bandit_lair) "JU" = ( /obj/structure/closet/crate/chest/old_crate, /obj/item/reagent_containers/powder/flour, @@ -3573,7 +3551,7 @@ "Lp" = ( /obj/structure/toilet, /turf/open/floor/rogue/cobble, -/area/rogue/indoors) +/area/rogue/indoors/bandit_lair) "Lq" = ( /obj/structure/table/wood/reinforced, /obj/item/clothing/neck/roguetown/talkstone, @@ -3759,11 +3737,11 @@ dir = 1; icon_state = "largetable" }, -/obj/item/rogueweapon/huntingknife/idagger, -/obj/item/rogueweapon/huntingknife/idagger, -/obj/item/rogueweapon/huntingknife/idagger, -/obj/item/rogueweapon/huntingknife/idagger, -/obj/item/rogueweapon/huntingknife/idagger, +/obj/item/rogueweapon/knife/dagger, +/obj/item/rogueweapon/knife/dagger, +/obj/item/rogueweapon/knife/dagger, +/obj/item/rogueweapon/knife/dagger, +/obj/item/rogueweapon/knife/dagger, /turf/open/floor/rogue/cobble, /area/rogue) "On" = ( @@ -3784,11 +3762,11 @@ dir = 1; icon_state = "largetable" }, -/obj/item/rogueweapon/eaglebeak/lucerne, -/obj/item/rogueweapon/eaglebeak/lucerne, -/obj/item/rogueweapon/eaglebeak/lucerne, -/obj/item/rogueweapon/eaglebeak/lucerne, -/obj/item/rogueweapon/eaglebeak/lucerne, +/obj/item/rogueweapon/polearm/eaglebeak/lucerne, +/obj/item/rogueweapon/polearm/eaglebeak/lucerne, +/obj/item/rogueweapon/polearm/eaglebeak/lucerne, +/obj/item/rogueweapon/polearm/eaglebeak/lucerne, +/obj/item/rogueweapon/polearm/eaglebeak/lucerne, /turf/open/floor/rogue/cobble, /area/rogue) "OQ" = ( @@ -3799,16 +3777,16 @@ dir = 1; icon_state = "largetable" }, -/obj/item/rogueweapon/huntingknife, -/obj/item/rogueweapon/huntingknife, -/obj/item/rogueweapon/huntingknife, -/obj/item/rogueweapon/huntingknife, -/obj/item/rogueweapon/huntingknife, +/obj/item/rogueweapon/knife/hunting, +/obj/item/rogueweapon/knife/hunting, +/obj/item/rogueweapon/knife/hunting, +/obj/item/rogueweapon/knife/hunting, +/obj/item/rogueweapon/knife/hunting, /turf/open/floor/rogue/cobble, /area/rogue) "Pf" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/stoneaxe, +/obj/item/rogueweapon/axe/stone, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/bandit_lair) "Ph" = ( @@ -3816,7 +3794,7 @@ /area/rogue/outdoors) "Pk" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/stoneaxe, +/obj/item/rogueweapon/axe/stone, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/bog/inhumen_camp) "Po" = ( @@ -3881,11 +3859,11 @@ /area/rogue) "Qv" = ( /obj/structure/table/wood/plain_alt, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed{ +/obj/item/reagent_containers/food/snacks/produce/dry_westleach{ pixel_x = 4; pixel_y = 6 }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed{ +/obj/item/reagent_containers/food/snacks/produce/dry_westleach{ pixel_x = 7; pixel_y = 7 }, @@ -3900,11 +3878,11 @@ dir = 1; icon_state = "largetable" }, -/obj/item/rogueweapon/huntingknife/idagger/steel, -/obj/item/rogueweapon/huntingknife/idagger/steel, -/obj/item/rogueweapon/huntingknife/idagger/steel, -/obj/item/rogueweapon/huntingknife/idagger/steel, -/obj/item/rogueweapon/huntingknife/idagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, /turf/open/floor/rogue/cobble, /area/rogue) "Qy" = ( @@ -3913,7 +3891,7 @@ "QB" = ( /obj/structure/bed/rogue/shit, /turf/open/floor/rogue/cobble, -/area/rogue/indoors) +/area/rogue/indoors/bandit_lair) "QL" = ( /obj/structure/chair/wood/rogue{ dir = 1 @@ -3981,9 +3959,9 @@ /turf/open/floor/rogue/carpet, /area/rogue) "Rm" = ( -/obj/item/rogueweapon/sword/sabre/messer, -/obj/item/rogueweapon/sword/sabre/messer, -/obj/item/rogueweapon/sword/sabre/messer, +/obj/item/rogueweapon/sword/scimitar/falchion, +/obj/item/rogueweapon/sword/scimitar/falchion, +/obj/item/rogueweapon/sword/scimitar/falchion, /obj/structure/table/wood/large/corner_blue{ dir = 6 }, @@ -4000,7 +3978,7 @@ /turf/closed/wall/mineral/rogue/wood, /area/rogue/indoors) "Rw" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/wood, /area/rogue/indoors/bandit_lair) "RB" = ( @@ -4166,7 +4144,7 @@ /turf/open/floor/rogue/herringbone, /area/rogue/indoors/vampire_manor) "TM" = ( -/obj/item/rogueweapon/woodstaff{ +/obj/item/rogueweapon/polearm/woodstaff{ name = "Staff of the Wizend Wizard" }, /obj/structure/table/wood/fancy/royalblue, @@ -4198,9 +4176,6 @@ /turf/open/floor/rogue/wood, /area/rogue) "Ut" = ( -/obj/item/rogueweapon/mace/coppermace, -/obj/item/rogueweapon/mace/coppermace, -/obj/item/rogueweapon/mace/coppermace, /obj/structure/table/wood{ dir = 8; icon_state = "largetable" @@ -4213,7 +4188,7 @@ lockid = "banditcamp" }, /turf/open/floor/rogue/dirt, -/area/rogue/indoors) +/area/rogue/indoors/bandit_lair) "Uw" = ( /obj/item/grown/log/tree/small, /obj/item/grown/log/tree/small, @@ -4230,7 +4205,6 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/bog/inhumen_camp) "UN" = ( -/obj/effect/proc_holder/spell/invoked/heal, /obj/item/rogueweapon/mace/cudgel, /obj/structure/table/wood{ dir = 8; @@ -4362,7 +4336,7 @@ /obj/effect/decal/cleanable/blood/splatter, /obj/effect/decal/cleanable/blood/gibs, /turf/open/floor/rogue/cobble, -/area/rogue/indoors) +/area/rogue/indoors/bandit_lair) "Vp" = ( /obj/machinery/light/rogue/torchholder/c, /turf/open/floor/rogue/wood, @@ -4410,10 +4384,10 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/woods_safe) "Wj" = ( -/obj/item/rogueweapon/huntingknife/idagger/steel/profane, -/obj/item/rogueweapon/huntingknife/idagger/steel/profane, -/obj/item/rogueweapon/huntingknife/idagger/steel/profane, -/obj/item/rogueweapon/huntingknife/idagger/steel/profane, +/obj/item/rogueweapon/knife/dagger/steel/profane, +/obj/item/rogueweapon/knife/dagger/steel/profane, +/obj/item/rogueweapon/knife/dagger/steel/profane, +/obj/item/rogueweapon/knife/dagger/steel/profane, /obj/structure/table/wood{ dir = 9; icon_state = "largetable" @@ -4455,12 +4429,12 @@ name = "shit stained parchment" }, /turf/open/floor/rogue/twig, -/area/rogue/indoors) +/area/rogue/indoors/bandit_lair) "WF" = ( /obj/structure/roguetent, /obj/effect/decal/cleanable/dirt, /turf/open/floor/rogue/twig, -/area/rogue/indoors) +/area/rogue/indoors/bandit_lair) "WI" = ( /obj/structure/fluff/railing/wood, /turf/open/floor/rogue/dirt/road, @@ -4600,13 +4574,6 @@ /obj/structure/closet/crate/chest/old_crate, /turf/open/floor/rogue/tile, /area/rogue) -"YO" = ( -/obj/structure/mineral_door/wood/red{ - locked = 1; - lockid = "banditcamp" - }, -/turf/open/floor/rogue/ruinedwood/turned/darker, -/area/rogue/indoors) "YS" = ( /obj/structure/table/wood{ dir = 5; @@ -4620,7 +4587,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors) "YU" = ( -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors) "YW" = ( @@ -4654,7 +4621,7 @@ /area/rogue/outdoors/bog/inhumen_camp) "Zh" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/sword/iron/short, +/obj/item/rogueweapon/sword/short, /turf/open/floor/rogue/ruinedwood/darker, /area/rogue/indoors/bandit_lair) "Zl" = ( @@ -6890,7 +6857,7 @@ Kn so FR FR -Ao +dv Iw "} (18,1,1) = {" @@ -6964,15 +6931,15 @@ Sy Sy Sy Te -Rt -Rt -Rt -YO -Rt +yR +yR +yR +Xr +yR da da da -Rt +yR We xt Qy @@ -7020,7 +6987,7 @@ xt xt xt xt -Ao +dv Iw "} (19,1,1) = {" @@ -7094,11 +7061,11 @@ Sy Sy Sy Te -Rt +yR pg -wZ -sh -Rt +fL +Xe +yR GX Vl QB @@ -7224,12 +7191,12 @@ Sy Sy so Te -Rt -CD -CD -sh -Rt -jU +yR +oI +oI +Xe +yR +Ev Jb dp mp @@ -7354,11 +7321,11 @@ Sy Sy so so -Rt +yR uU -CD -sh -Rt +oI +Xe +yR QB dp dp @@ -7484,11 +7451,11 @@ Sy Sy so Kn -Rt -CD -CD +yR +oI +oI rl -Rt +yR Jb dp dp @@ -7614,11 +7581,11 @@ Sy Sy Kn Te -Rt +yR vh -sh -js -Rt +Xe +QZ +yR JQ Lp dp @@ -7632,8 +7599,8 @@ Qy xt yR Pf -DA -DA +Hi +Hi pu yR Yv @@ -7744,15 +7711,15 @@ Sy Sy ge Te -Rt -Rt -Rt -Rt -Rt +yR +yR +yR +yR +yR da da mp -Rt +yR FR xt Qy @@ -7761,10 +7728,10 @@ Am Qy xt GN -DA -DA -DA -DA +Hi +Hi +Hi +Hi WI xt xt @@ -7893,8 +7860,8 @@ xt Ks Ev Ev -DA -DA +Hi +Hi WI xt xt @@ -8023,7 +7990,7 @@ FR yR Se Ev -DA +Hi Ew yR xt @@ -8153,7 +8120,7 @@ xt Ks Ev Ev -DA +Hi ht oV xt @@ -8281,9 +8248,9 @@ xt Sy xt GN -DA -DA -DA +Hi +Hi +Hi nN oV xt @@ -8412,8 +8379,8 @@ Sy FR yR Xk -DA -DA +Hi +Hi hh yR xt @@ -8801,9 +8768,9 @@ uy xt FR xt -Rt +yR WF -Rt +yR Te Te Kn @@ -8931,9 +8898,9 @@ Sy BM xt FR -HQ +js WE -HQ +js Lj Te Kn @@ -9061,9 +9028,9 @@ so Kn BM FR -HQ +js EC -HQ +js Te Lj bz @@ -10480,10 +10447,10 @@ rQ rQ rQ rQ -rQ -rQ -rQ -rQ +eq +eq +eq +eq RK yE Vu @@ -10605,15 +10572,15 @@ vf Mn an vf -Iw -Iw -Iw -Iw -Iw -Iw -Iw -Iw -Iw +bX +rQ +rQ +rQ +rQ +rQ +eq +rQ +rQ RK yE pP @@ -10735,15 +10702,15 @@ dA dP TB an -Iw -OQ -OQ -cL -cL -cL -cL -cL -OQ +bX +rQ +rQ +rQ +rQ +rQ +rQ +eq +rQ RK yE QX @@ -10865,15 +10832,15 @@ dP dP YC an -Iw -OQ -OQ -OQ -cL -cL -cL -OQ -OQ +bX +rQ +rQ +rQ +rQ +rQ +eq +rQ +rQ RK yE bE @@ -10995,15 +10962,15 @@ dP dP hX an -Iw -OQ -OQ -OQ -OQ -cL -cL -OQ -OQ +bX +rQ +rQ +rQ +rQ +eq +eq +eq +eq RK yE yE @@ -11125,15 +11092,15 @@ dP dP dP an -Iw -OQ -OQ -OQ -OQ -OQ -OQ -OQ -OQ +bX +rQ +rQ +rQ +rQ +rQ +rQ +rQ +rQ RK RK RK @@ -11255,15 +11222,15 @@ WO Is xe an -Iw -OQ -OQ -OQ -OQ -OQ -OQ -OQ -OQ +bX +rQ +rQ +rQ +rQ +eq +eq +eq +eq OQ OQ OQ @@ -11385,15 +11352,15 @@ an an an vf -Iw -OQ -OQ -OQ -OQ -OQ -OQ -OQ -OQ +bX +rQ +rQ +rQ +rQ +eq +rQ +eq +rQ OQ OQ OQ @@ -11515,15 +11482,15 @@ bX bX bX bX -Iw -OQ -OQ -OQ -OQ -OQ -OQ -OQ -OQ +bX +rQ +rQ +rQ +rQ +eq +eq +eq +eq OQ OQ RK @@ -11645,15 +11612,15 @@ rQ rQ rQ rQ -Iw -OQ -OQ -OQ -cL -cL -cL -OQ -OQ +rQ +rQ +rQ +rQ +rQ +rQ +rQ +rQ +rQ OQ OQ RK @@ -11671,7 +11638,7 @@ yE cJ Ba Ba -Yt +dN yE yE yE @@ -11775,15 +11742,15 @@ rQ rQ rQ rQ -Iw -OQ -OQ -cL -cL -cL -cL -OQ -OQ +rQ +rQ +rQ +rQ +rQ +eq +eq +eq +eq OQ OQ RK @@ -11905,15 +11872,15 @@ rQ rQ rQ rQ -Iw -OQ -OQ -cL -cL -cL -cL -OQ -OQ +rQ +rQ +rQ +rQ +rQ +rQ +eq +rQ +rQ OQ RK RK @@ -11960,7 +11927,7 @@ xt xt xt xt -sk +Ao Iw "} (57,1,1) = {" @@ -12035,15 +12002,15 @@ rQ rQ rQ rQ -Iw -OQ -OQ -OQ -cL -cL -OQ -OQ -OQ +rQ +rQ +rQ +rQ +rQ +rQ +rQ +eq +rQ OQ RK yE @@ -12090,7 +12057,7 @@ xt xt xt xt -sk +Ao Iw "} (58,1,1) = {" @@ -12165,15 +12132,15 @@ rQ rQ rQ rQ -Iw -OQ -OQ -OQ -OQ -OQ -OQ -OQ -OQ +rQ +rQ +rQ +rQ +rQ +eq +eq +eq +eq OQ RK yE @@ -12295,15 +12262,15 @@ rQ rQ rQ rQ -Iw -OQ -OQ -OQ -OQ -cL -cL -cL -cL +rQ +rQ +rQ +rQ +rQ +rQ +rQ +rQ +rQ OQ RK yE @@ -12425,15 +12392,15 @@ rQ rQ rQ rQ -Iw -OQ -OQ -OQ -OQ -OQ -cL -cL -cL +rQ +rQ +rQ +rQ +rQ +eq +eq +eq +eq OQ RK RK @@ -12555,15 +12522,15 @@ rQ rQ rQ rQ -Iw -OQ -OQ -OQ -OQ -OQ -OQ -OQ -OQ +rQ +rQ +rQ +rQ +rQ +eq +rQ +rQ +eq OQ RK RK @@ -12685,15 +12652,15 @@ rQ rQ rQ rQ -Iw -Iw -Iw -Iw -Iw -Iw -Iw -Iw -Iw +rQ +rQ +rQ +rQ +rQ +eq +eq +eq +eq Iw RK RK @@ -12950,10 +12917,10 @@ rQ rQ rQ rQ -rQ -rQ -rQ -rQ +eq +eq +eq +eq Iw RK RK @@ -13080,9 +13047,9 @@ rQ rQ rQ rQ +eq rQ -rQ -rQ +eq rQ Iw RK @@ -13210,10 +13177,10 @@ rQ rQ rQ rQ +eq +eq rQ -rQ -rQ -rQ +eq Iw RK RK @@ -14179,7 +14146,7 @@ rQ rQ rQ rQ -eq +rQ rQ rQ rQ @@ -14310,10 +14277,10 @@ rQ rQ rQ rQ -eq rQ rQ -kG +rQ +rQ rQ rQ rQ @@ -14436,14 +14403,14 @@ AU (76,1,1) = {" rQ rQ -eq -eq -eq -eq -eq -eq rQ -kG +rQ +rQ +rQ +rQ +rQ +rQ +rQ rQ rQ rQ @@ -14570,10 +14537,10 @@ rQ rQ rQ rQ -eq rQ rQ -kG +rQ +rQ rQ rQ rQ @@ -14699,7 +14666,7 @@ rQ rQ rQ rQ -eq +rQ rQ rQ rQ @@ -20571,7 +20538,7 @@ pC VB VB LL -Zt +fn Zt UJ VB @@ -20702,7 +20669,7 @@ VB VB Zt Zt -Zt +VB VB VB VB @@ -20830,9 +20797,9 @@ VB VB VB zl -Df -Df -Df +VB +VB +VB VB VB gk @@ -20958,13 +20925,13 @@ Ae Ae Ae Ae -Ae -Ae -Ae -Ae -Ae -Ae -Ae +HZ +HZ +Df +Df +Df +HZ +HZ Ae Ae Ae diff --git a/_maps/map_files/guildmap.dmm b/_maps/map_files/guildmap.dmm deleted file mode 100644 index 9a2215afbf..0000000000 --- a/_maps/map_files/guildmap.dmm +++ /dev/null @@ -1,42130 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"bk" = ( -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/clothing/under/roguetown/tights/random, -/obj/item/clothing/suit/roguetown/shirt/undershirt/random, -/obj/item/clothing/suit/roguetown/shirt/tunic/green, -/turf/open/floor/rogue/twig, -/area/rogue) -"bq" = ( -/obj/structure/roguemachine/scomm/l, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue) -"cj" = ( -/obj/structure/giantfur/small, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"cC" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"cK" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_y = 32 - }, -/turf/open/floor/rogue/grass, -/area/rogue) -"cQ" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "blacksmith" - }, -/turf/open/floor/rogue/cobble, -/area/rogue) -"df" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/ladder, -/turf/open/floor/rogue/blocks, -/area/rogue) -"dp" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/obj/machinery/light/rogue/torchholder/l, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"dA" = ( -/obj/structure/roguemachine/vendor{ - keycontrol = "blacksmith" - }, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue) -"dO" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/anvil{ - pixel_y = -5 - }, -/turf/open/floor/rogue/cobble, -/area/rogue) -"dZ" = ( -/obj/effect/decal/cobbleedge, -/turf/open/floor/rogue/grass, -/area/rogue) -"ed" = ( -/obj/effect/spawner/roguemap/grass_low, -/turf/open/floor/rogue/grass, -/area/rogue) -"ei" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/blocks, -/area/rogue) -"fU" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/ruinedwood{ - dir = 1; - icon_state = "vertw" - }, -/area/rogue) -"gj" = ( -/obj/structure/fluff/railing/fence, -/obj/structure/fluff/railing/fence{ - dir = 8; - icon_state = "fence" - }, -/obj/structure/fluff/railing/stonehedge, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"gD" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/light/rogue/forge, -/turf/open/floor/rogue/blocks, -/area/rogue) -"gF" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"hq" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue) -"hI" = ( -/obj/structure/fluff/railing/fence{ - dir = 4; - icon_state = "fence" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"hJ" = ( -/obj/item/clothing/shoes/roguetown/boots/leather, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"hQ" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_y = 32 - }, -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"ia" = ( -/obj/machinery/light/rogue/torchholder/r, -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue) -"ii" = ( -/obj/structure/fluff/nest, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"iw" = ( -/obj/structure/chair/wood/rogue{ - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue) -"iS" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 4; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"iT" = ( -/turf/open/transparent/openspace, -/area/rogue) -"iZ" = ( -/obj/structure/stairs{ - dir = 1; - icon_state = "stairs" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"jg" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/cobble, -/area/rogue) -"jj" = ( -/obj/structure/bars/passage{ - density = 0; - icon_state = "passage1"; - redstone_id = "villagegate" - }, -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue) -"jm" = ( -/obj/structure/stairs{ - dir = 8 - }, -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - dir = 5 - }, -/turf/open/floor/rogue/cobble, -/area/rogue) -"js" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "largetable" - }, -/obj/machinery/light/rogue/torchholder/c, -/obj/item/flint, -/turf/open/floor/rogue/blocks, -/area/rogue) -"jN" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/cobble, -/area/rogue) -"ka" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/blocks, -/area/rogue) -"kj" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue) -"kn" = ( -/obj/machinery/light/rogue/forge, -/turf/open/floor/rogue/cobble, -/area/rogue) -"kP" = ( -/obj/structure/closet/crate/chest/neu, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/twig, -/area/rogue) -"kW" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"kY" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 1 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"lc" = ( -/obj/effect/decal/cobbleedge, -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"li" = ( -/obj/effect/decal/cobbleedge, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"ly" = ( -/obj/machinery/light/rogue/wallfire/big_fireplace, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue) -"lQ" = ( -/obj/machinery/light/rogue/torchholder/r{ - dir = 1 - }, -/obj/structure/fluff/railing/wood{ - dir = 4; - icon_state = "woodrailing" - }, -/turf/open/floor/rogue/ruinedwood{ - dir = 1; - icon_state = "vertw" - }, -/area/rogue) -"lR" = ( -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue) -"mf" = ( -/obj/structure/fluff/railing/wood{ - dir = 1; - pixel_y = -1 - }, -/turf/open/floor/rogue/grass, -/area/rogue) -"mt" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/cobble, -/area/rogue) -"mE" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"mT" = ( -/turf/open/floor/rogue/grass, -/area/rogue) -"mX" = ( -/obj/structure/table/wood/reinforced_alt, -/obj/structure/bars{ - icon_state = "barsbent"; - layer = 2.81 - }, -/obj/structure/bars/passage/shutter{ - redstone_id = "weaponsmith_shutter" - }, -/turf/open/floor/rogue/cobble, -/area/rogue) -"ne" = ( -/turf/open/floor/rogue/cobble/mossy, -/area/rogue) -"nh" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/rack/rogue, -/obj/item/rogueweapon/shovel, -/obj/item/rogueweapon/shovel, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue) -"nm" = ( -/obj/structure/table/wood/reinforced_alt, -/obj/structure/bars{ - icon_state = "barsbent"; - layer = 2.81 - }, -/obj/structure/bars/passage/shutter{ - redstone_id = "armourer_shutter" - }, -/turf/open/floor/rogue/cobble, -/area/rogue) -"oe" = ( -/obj/structure/bed/rogue, -/obj/item/bedsheet/rogue/pelt, -/turf/open/floor/rogue/cobble, -/area/rogue) -"oF" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue) -"oN" = ( -/obj/structure/roguewindow/openclose{ - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"oT" = ( -/obj/structure/bed/rogue, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"pc" = ( -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/natural/stone, -/obj/item/natural/stone, -/obj/item/natural/stone, -/obj/item/natural/stone, -/obj/item/natural/stone, -/obj/item/natural/stone, -/obj/item/natural/stone, -/obj/item/natural/stone, -/obj/item/natural/stone, -/obj/item/natural/stone, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue) -"pu" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue) -"px" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 4; - icon_state = "endwooddark" - }, -/area/rogue) -"pG" = ( -/turf/open/floor/rogue/dirt, -/area/rogue) -"pO" = ( -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/clothing/suit/roguetown/armor/gambeson/heavy/dress, -/obj/item/clothing/suit/roguetown/armor/leather/vest, -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/clothing/under/roguetown/tights/random, -/obj/item/clothing/suit/roguetown/shirt/undershirt/random, -/obj/item/clothing/suit/roguetown/shirt/tunic/green, -/turf/open/floor/rogue/twig, -/area/rogue) -"pZ" = ( -/obj/structure/stairs, -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"qc" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/blocks, -/area/rogue) -"ql" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/blocks, -/area/rogue) -"qn" = ( -/obj/structure/table/wood{ - dir = 6; - icon_state = "largetable" - }, -/obj/item/flint, -/turf/open/floor/rogue/cobble, -/area/rogue) -"qr" = ( -/obj/structure/fluff/railing/fence{ - dir = 8; - icon_state = "fence" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"qK" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue) -"qV" = ( -/obj/machinery/light/rogue/torchholder/l, -/turf/open/floor/rogue/cobble, -/area/rogue) -"rl" = ( -/obj/structure/stairs{ - dir = 4; - icon_state = "stairs" - }, -/turf/open/floor/rogue/cobble, -/area/rogue) -"rC" = ( -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/flashlight/flare/torch/lantern, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/twig, -/area/rogue) -"rL" = ( -/obj/structure/chair/wood/rogue/chair3, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"rN" = ( -/obj/machinery/light/rogue/torchholder/r{ - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue) -"sJ" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue) -"tb" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "blacksmith" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"te" = ( -/obj/structure/stairs, -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"ti" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/paper/bsmith, -/obj/item/rogueweapon/hammer, -/obj/item/rogueweapon/tongs, -/turf/open/floor/rogue/twig, -/area/rogue) -"tx" = ( -/obj/item/natural/worms, -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"tY" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/pick, -/obj/item/rogueweapon/pick, -/obj/item/rogueweapon/pick, -/obj/item/rogueweapon/pick, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue) -"uc" = ( -/obj/machinery/light/rogue/torchholder/l, -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue) -"uk" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "garrison" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"ul" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "blacksmith" - }, -/turf/open/floor/rogue/cobble, -/area/rogue) -"uP" = ( -/obj/item/natural/stone, -/obj/item/natural/stone, -/turf/open/floor/rogue/ruinedwood{ - dir = 1; - icon_state = "vertw" - }, -/area/rogue) -"uX" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "garrison" - }, -/turf/open/floor/rogue/cobble, -/area/rogue) -"vg" = ( -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/ruinedwood{ - dir = 1; - icon_state = "vertw" - }, -/area/rogue) -"vh" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/rack/rogue, -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/blocks, -/area/rogue) -"vl" = ( -/obj/structure/lever/wall{ - redstone_id = "villagegate"; - dir = 8 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"vu" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "mason" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"vx" = ( -/obj/structure/fluff/walldeco/bsmith, -/turf/open/floor/rogue/cobble, -/area/rogue) -"vz" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/blocks, -/area/rogue) -"vL" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"vN" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"vY" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"wa" = ( -/obj/machinery/light/rogue/torchholder/l, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue) -"wy" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/chair/wood/rogue/chair3, -/turf/open/floor/rogue/twig, -/area/rogue) -"xb" = ( -/obj/structure/table/wood{ - dir = 5; - icon_state = "largetable" - }, -/turf/open/floor/rogue/blocks, -/area/rogue) -"xQ" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue) -"yj" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue) -"yk" = ( -/obj/structure/lever/wall{ - redstone_id = "southgate_outer" - }, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue) -"yE" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue) -"yK" = ( -/obj/machinery/anvil, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/blocks, -/area/rogue) -"zg" = ( -/obj/effect/spawner/roguemap/grass_low, -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/grass, -/area/rogue) -"zr" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 8 - }, -/area/rogue) -"zx" = ( -/obj/structure/bars/passage{ - density = 0; - icon_state = "passage1"; - redstone_id = "southgate_outer" - }, -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue) -"zF" = ( -/obj/effect/decal/cobbleedge{ - dir = 1 - }, -/obj/item/roguebin/water, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"zH" = ( -/turf/open/water/cleanshallow, -/area/rogue) -"Aa" = ( -/obj/machinery/light/rogue/torchholder/r, -/turf/open/floor/rogue/cobble, -/area/rogue) -"Ac" = ( -/obj/structure/table/wood/reinforced_alt, -/obj/structure/bars{ - icon_state = "barsbent"; - layer = 2.81 - }, -/turf/open/floor/rogue/cobble, -/area/rogue) -"AF" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_y = 32 - }, -/obj/structure/roguemachine/scomm/l, -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"AJ" = ( -/obj/structure/roguewindow/openclose, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"Bj" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/grass, -/area/rogue) -"Br" = ( -/obj/structure/fluff/walldeco/bsmith, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue) -"By" = ( -/obj/structure/fluff/railing/fence, -/obj/structure/fluff/railing/stonehedge, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"Ca" = ( -/turf/open/floor/rogue/blocks, -/area/rogue) -"Cb" = ( -/obj/structure/roguewindow, -/obj/structure/bars/passage/shutter{ - redstone_id = "armourer_shutter" - }, -/turf/open/floor/rogue/cobble, -/area/rogue) -"Cd" = ( -/obj/effect/spawner/roguemap/hauntz_random, -/turf/open/floor/rogue/grass, -/area/rogue) -"Cq" = ( -/obj/structure/bed/rogue, -/obj/item/bedsheet/rogue/pelt, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"Cv" = ( -/obj/structure/closet/crate/chest/neu, -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/stick, -/obj/item/grown/log/tree/stick, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/cobble, -/area/rogue) -"CC" = ( -/obj/effect/spawner/roguemap/hauntz_random, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"CF" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"CQ" = ( -/turf/open/floor/rogue/cobble, -/area/rogue) -"Ds" = ( -/obj/effect/spawner/roguemap/stump, -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"Dw" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue) -"DD" = ( -/obj/structure/stairs{ - dir = 1; - icon_state = "stairs" - }, -/obj/structure/fluff/railing/border{ - dir = 5 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"Ei" = ( -/obj/structure/stairs{ - dir = 4; - icon_state = "stairs" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"Es" = ( -/obj/structure/bars/passage{ - density = 0; - icon_state = "passage1"; - redstone_id = "southgate_inner" - }, -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue) -"Ev" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue) -"EE" = ( -/obj/effect/decal/cobbleedge{ - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue) -"Fa" = ( -/turf/closed, -/area/rogue) -"Fh" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"Fr" = ( -/obj/structure/roguewindow/openclose{ - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"FL" = ( -/obj/structure/fluff/railing/fence, -/obj/structure/fluff/railing/stonehedge, -/turf/open/floor/rogue/grass, -/area/rogue) -"FQ" = ( -/obj/structure/fluff/walldeco/customflag, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue) -"FZ" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue) -"Gm" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/rack/rogue, -/turf/open/floor/rogue/blocks, -/area/rogue) -"Gt" = ( -/turf/open/floor/rogue/ruinedwood{ - dir = 1; - icon_state = "vertw" - }, -/area/rogue) -"Gx" = ( -/obj/machinery/light/rogue/torchholder/r, -/obj/structure/handcart{ - dir = 8; - icon_state = "cart-empty" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue) -"GF" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"GX" = ( -/obj/structure/chair/wood/rogue/chair3{ - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"HE" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue) -"HU" = ( -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"Iy" = ( -/obj/structure/fluff/railing/fence, -/obj/structure/fluff/railing/stonehedge, -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"IB" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"IC" = ( -/obj/structure/stairs{ - dir = 1; - icon_state = "stairs" - }, -/turf/open/floor/rogue/cobble, -/area/rogue) -"II" = ( -/obj/structure/stairs{ - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue) -"IS" = ( -/obj/effect/landmark/start/mason{ - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"Jg" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/cobble, -/area/rogue) -"Jh" = ( -/obj/structure/chair/wood/rogue/chair3{ - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"Jv" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"JI" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue) -"JT" = ( -/turf/open/floor/rogue/rooftop{ - dir = 2; - icon_state = "roofg" - }, -/area/rogue) -"Kk" = ( -/obj/structure/lever/wall{ - redstone_id = "southgate_inner"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue) -"Km" = ( -/obj/structure/fluff/railing/fence{ - dir = 8; - icon_state = "fence" - }, -/obj/structure/fluff/railing/fence, -/obj/structure/fluff/railing/fence{ - dir = 4; - icon_state = "fence" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"Ks" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/hammer/claw, -/obj/item/rogueweapon/hammer/claw, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue) -"Kx" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"KD" = ( -/obj/structure/lever/wall{ - dir = 8; - pixel_x = -12; - redstone_id = "armourer_shutter" - }, -/turf/open/floor/rogue/blocks, -/area/rogue) -"KI" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/obj/structure/roguemachine/scomm/l, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"KP" = ( -/obj/structure/stairs{ - dir = 4; - icon_state = "stairs" - }, -/obj/effect/decal/cobbleedge{ - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue) -"Lx" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"LD" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/cobble, -/area/rogue) -"LO" = ( -/obj/effect/decal/cobbleedge{ - dir = 1 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"LU" = ( -/obj/item/rogueweapon/woodcut, -/obj/item/rogueweapon/woodcut, -/obj/structure/rack/rogue, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue) -"LV" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"MC" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/paper/scroll, -/obj/item/natural/feather, -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/roguekey/blacksmith, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"MX" = ( -/obj/structure/fermenting_barrel/water, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"Nz" = ( -/obj/structure/roguewindow, -/obj/structure/bars/passage/shutter{ - redstone_id = "weaponsmith_shutter" - }, -/turf/open/floor/rogue/cobble, -/area/rogue) -"NA" = ( -/obj/structure/roguemachine/scomm, -/obj/structure/lever/wall{ - redstone_id = "villagegate"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue) -"NJ" = ( -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue) -"NV" = ( -/turf/open/water/river{ - dir = 4 - }, -/area/rogue) -"Oq" = ( -/obj/structure/roguemachine/scomm, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/blocks, -/area/rogue) -"Or" = ( -/turf/open/water/river, -/area/rogue) -"OZ" = ( -/obj/structure/roguemachine/scomm, -/obj/structure/chair/wood/rogue{ - dir = 8 - }, -/obj/structure/fluff/nest, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"Pa" = ( -/obj/structure/lever/wall{ - dir = 4; - pixel_x = 12; - redstone_id = "weaponsmith_shutter" - }, -/turf/open/floor/rogue/cobble, -/area/rogue) -"QE" = ( -/obj/structure/stairs{ - dir = 1; - icon_state = "stairs" - }, -/obj/structure/fluff/railing/border{ - dir = 9 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"QJ" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "mason" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue) -"QR" = ( -/obj/structure/bed/rogue, -/obj/effect/landmark/start/weaponsmith{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/twig, -/area/rogue) -"Rg" = ( -/obj/structure/closet/crate/chest/neu, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"RC" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"RG" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/grass, -/area/rogue) -"RM" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue) -"RN" = ( -/obj/structure/handcart{ - dir = 8; - icon_state = "cart-empty" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue) -"Sj" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/ruinedwood{ - dir = 1; - icon_state = "vertw" - }, -/area/rogue) -"So" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 26 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"Sq" = ( -/obj/structure/fluff/railing/wood{ - dir = 4; - icon_state = "woodrailing" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"SC" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"Tl" = ( -/obj/structure/closet/crate/chest{ - base_icon_state = "woodchestalt"; - icon_state = "woodchestalt" - }, -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/stick, -/obj/item/grown/log/tree/stick, -/obj/item/grown/log/tree/stick, -/obj/item/grown/log/tree/stick, -/obj/item/grown/log/tree/stick, -/obj/item/grown/log/tree/stick, -/obj/item/grown/log/tree/stick, -/obj/item/grown/log/tree/stick, -/obj/item/grown/log/tree/stick, -/obj/item/grown/log/tree/stick, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue) -"Tn" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "largetable" - }, -/obj/machinery/light/rogue/torchholder/c, -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/blocks, -/area/rogue) -"TC" = ( -/obj/structure/fluff/walldeco/masonflag, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue) -"TU" = ( -/obj/structure/bed/rogue, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/start/armorsmith{ - dir = 1 - }, -/turf/open/floor/rogue/twig, -/area/rogue) -"Uk" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/ladder, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue) -"Uq" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/obj/machinery/light/rogue/torchholder/r, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"UT" = ( -/obj/structure/fermenting_barrel/water, -/obj/machinery/light/rogue/torchholder{ - dir = 8; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"Vt" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/cobble, -/area/rogue) -"Vv" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"VG" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"Wh" = ( -/obj/structure/fluff/walldeco/masonflag, -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue) -"Wz" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "tablewood1" - }, -/obj/item/flint, -/turf/open/floor/rogue/blocks, -/area/rogue) -"XE" = ( -/obj/structure/fluff/grindwheel, -/turf/open/floor/rogue/cobble, -/area/rogue) -"XJ" = ( -/obj/structure/roguewindow, -/obj/structure/curtain/bounty, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"XP" = ( -/obj/machinery/light/rogue/torchholder/r{ - dir = 1 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"XR" = ( -/obj/structure/roguemachine/scomm/l, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue) -"XY" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue) -"YB" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_x = 32; - pixel_y = 0 - }, -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"YD" = ( -/obj/structure/stairs{ - dir = 4; - icon_state = "stairs" - }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"Zg" = ( -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/grass, -/area/rogue) -"Zu" = ( -/obj/structure/fluff/railing/wood{ - dir = 4; - icon_state = "woodrailing" - }, -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/cobblerock, -/area/rogue) -"ZS" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/light/rogue/torchholder/c, -/obj/structure/fermenting_barrel/water, -/turf/open/floor/rogue/blocks, -/area/rogue) -"ZV" = ( -/obj/structure/stairs{ - dir = 4; - icon_state = "stairs" - }, -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue) - -(1,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(2,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(3,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(4,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(5,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(6,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(7,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(8,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(9,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -Dw -xQ -Dw -RC -RC -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(10,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -CQ -xQ -xQ -xQ -HE -HE -mT -Bj -Fa -Fa -Fa -Fa -vY -HE -xQ -xQ -RC -RC -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(11,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -CQ -hq -xQ -xQ -xQ -XR -cK -mT -Fa -Fa -Fa -Fa -HE -HE -xQ -xQ -xQ -hI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(12,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -CQ -ne -Es -vY -vY -zx -vY -vY -Fa -Fa -Fa -Fa -uX -qV -Jg -xQ -HE -mT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(13,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -CQ -CQ -Es -vY -vY -zx -vY -vY -Fa -Fa -Fa -Fa -xQ -xQ -xQ -HE -HE -mf -Bj -lR -lR -ka -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(14,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -ne -CQ -Es -vY -vY -zx -vY -Sq -Fa -Fa -Fa -Fa -hq -xQ -xQ -HE -AF -mf -mT -ed -ed -ed -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(15,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -ne -CQ -jj -vY -vY -zx -Zu -iT -Fa -Fa -Fa -Fa -ne -bq -zx -li -vY -vY -vY -vY -mT -ed -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(16,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -CQ -CQ -xQ -Ac -xQ -xQ -iT -iT -Fa -Fa -Fa -Fa -CQ -ne -zx -li -vY -vY -vY -vY -vY -vY -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(17,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -CQ -xQ -NA -iw -Kk -xQ -qK -RM -Fa -Fa -Fa -Fa -CQ -CQ -zx -li -vY -vY -Sq -Sq -Sq -Sq -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(18,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -mE -uX -Aa -Jg -CQ -xQ -Dw -px -Fa -Fa -Fa -Fa -CQ -CQ -zx -li -vY -Zu -iT -iT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(19,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RC -xQ -xQ -xQ -rN -xQ -qK -RM -Fa -Fa -Fa -Fa -CQ -xQ -xQ -xQ -hQ -iT -iT -iT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(20,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RC -Ds -xQ -oe -CQ -xQ -pG -pG -Fa -Fa -Fa -Fa -xQ -xQ -xQ -xQ -xQ -qK -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(21,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RC -RC -Dw -xQ -Dw -xQ -pG -pG -Fa -Fa -Fa -Fa -uX -Aa -Jg -xQ -xQ -Dw -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(22,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RC -ed -qK -RM -qK -pG -pG -pG -Fa -Fa -Fa -Fa -xQ -xQ -yk -xQ -xQ -qK -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(23,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Ds -xQ -xQ -xQ -mT -pG -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(24,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RC -Dw -xQ -Dw -pG -pG -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(25,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -ed -qK -RM -qK -pG -pG -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(26,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(27,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(28,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vN -vY -vY -vY -vY -vY -vY -vY -vY -Vv -CF -YB -CF -Uq -CF -YB -vL -vY -vY -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(29,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -vY -vY -vY -vY -vY -vY -vY -LO -qK -xQ -ul -xQ -xQ -xQ -qK -vL -vY -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(30,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -Vv -CF -kj -kj -ia -CF -CF -CF -ne -xQ -vh -Ca -gD -yK -qc -Nz -li -vY -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(31,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -LO -Wh -xQ -xQ -xQ -qK -zr -ne -ne -jN -Gm -CQ -CQ -jg -CQ -mX -li -vY -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(32,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Vv -CQ -xQ -Uk -wa -LU -NJ -qK -zr -ne -jN -XE -CQ -CQ -CQ -Pa -dA -li -vY -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -ed -FL -RC -zH -NV -zH -zH -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(33,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -LO -KP -xQ -tY -NJ -NJ -NJ -NJ -qK -CQ -xQ -vz -jg -CQ -jm -HE -HE -li -vY -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -mT -Iy -RC -zH -Or -NV -zH -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(34,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -LO -rl -xQ -pc -sJ -NJ -NJ -Tl -xQ -CQ -qK -Wz -jg -CQ -FZ -HE -Br -li -vY -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RC -qK -RC -zH -zH -NV -zH -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(35,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -LO -xQ -xQ -Ev -sJ -NJ -NJ -Ks -xQ -CQ -xQ -xQ -ZS -jg -CQ -ul -CQ -li -vY -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -kY -RC -pZ -Sj -Sj -Sj -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(36,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -LO -xQ -xQ -sJ -NJ -NJ -NJ -nh -xQ -CQ -LD -xQ -xQ -Oq -Ca -TC -IC -li -CC -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -xQ -Jv -Lx -Gt -Gt -Gt -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(37,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -LO -xQ -qK -xQ -QJ -xQ -sJ -sJ -xQ -CQ -xQ -xQ -Tn -CQ -CQ -ul -CQ -li -vY -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -kY -RC -te -fU -fU -fU -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(38,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fh -GF -GF -dp -CQ -xQ -Gx -RN -xQ -CQ -qK -xb -qn -jg -CQ -xQ -vx -li -vY -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -qK -RC -RC -zH -zH -NV -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(39,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -vY -vY -LO -qK -xQ -xQ -qK -CQ -xQ -df -jg -jg -CQ -xQ -xQ -lc -vY -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -gj -tx -RC -zH -Or -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(40,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -CC -vY -vY -vY -Fh -GF -GF -GF -GF -CQ -ul -ql -CQ -CQ -CQ -KD -dA -li -vY -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -By -IB -tx -zH -zH -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(41,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -Vv -CF -CF -CF -CF -vL -vY -LO -jN -ei -CQ -CQ -jg -Ca -nm -li -vY -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -vY -qK -qK -RC -zH -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(42,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -LO -lR -lR -lR -lR -li -vY -LO -xQ -vh -ql -dO -kn -qc -Cb -li -vY -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -vY -RG -qK -RC -zH -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(43,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -zF -lR -uc -yE -lR -li -vY -LO -qK -jN -ul -xQ -xQ -xQ -qK -li -vY -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -vY -qK -qK -RC -zH -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(44,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -LO -lR -ZV -YD -lR -li -vY -Fh -GF -GF -GF -GF -KI -GF -GF -vN -vY -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -ed -vY -vY -vY -RC -qr -qK -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(45,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -LO -lR -CQ -CQ -lR -li -vY -vY -vY -vY -vY -vY -vY -vY -vY -vY -vY -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(46,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -LO -lR -cQ -cQ -lR -li -vY -vY -vY -ed -mT -Cd -vY -vY -vY -vY -Vv -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(47,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(48,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -dZ -vY -xQ -Jv -zH -zH -NV -zH -LV -RC -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(49,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -XY -vY -jj -RC -pZ -Sj -Sj -Sj -Sj -QE -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(50,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vN -vY -vY -vY -vY -vY -vY -vY -vY -Vv -CF -YB -CF -Uq -CF -YB -vL -vY -Fa -Fa -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -jj -vY -Lx -Gt -Gt -Gt -Gt -iZ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(51,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -vY -vY -vY -vY -vY -vY -vY -LO -qK -xQ -ul -xQ -xQ -xQ -qK -vL -Fa -Fa -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -JT -JT -JT -JT -JT -JT -JT -JT -JT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -jj -RC -te -fU -fU -fU -fU -DD -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(52,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -Vv -CF -kj -kj -ia -CF -CF -CF -ne -xQ -vh -Ca -gD -yK -qc -Nz -li -Fa -Fa -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -JT -xQ -qK -qK -oN -qK -qK -xQ -JT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -xQ -RC -RC -zH -zH -NV -zH -zH -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(53,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -LO -Wh -xQ -xQ -xQ -qK -zr -xQ -xQ -xQ -Gm -CQ -CQ -jg -CQ -mX -li -Fa -Fa -iT -iT -JT -JT -JT -JT -JT -JT -JT -JT -JT -xQ -rC -wy -ti -hJ -kP -qK -JT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -xQ -Ac -xQ -xQ -zH -Or -NV -zH -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(54,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Vv -CQ -xQ -tY -Ks -LU -NJ -NJ -NJ -LD -xQ -XE -CQ -CQ -CQ -Pa -dA -li -Fa -Fa -iT -iT -JT -xQ -qK -qK -xQ -xQ -xQ -oN -xQ -xQ -pO -kW -gF -gF -QR -qK -JT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -xQ -OZ -vl -xQ -zH -zH -NV -zH -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(55,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -LO -EE -xQ -nh -NJ -NJ -NJ -oF -pu -LD -xQ -Cv -jg -CQ -jm -HE -HE -lc -Fa -Fa -iT -iT -JT -qK -bk -rL -MC -xQ -iS -gF -IC -xQ -xQ -xQ -tb -qK -qK -xQ -JT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -uk -vY -vY -xQ -RC -zH -NV -zH -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(56,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -LO -CQ -xQ -pc -sJ -NJ -CQ -CQ -CQ -Vt -qK -Wz -jg -CQ -FZ -HE -Br -li -Fa -Fa -iT -iT -JT -AJ -gF -gF -Rg -xQ -gF -gF -IC -xQ -MX -gF -gF -gF -gF -xQ -JT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -xQ -vY -Ei -xQ -RC -zH -NV -zH -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(57,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -LO -GF -xQ -Ev -sJ -NJ -CQ -CQ -CQ -CQ -xQ -xQ -ZS -mt -CQ -ul -CQ -li -Fa -Fa -iT -iT -JT -qK -oT -IS -gF -vu -gF -cj -SC -xQ -FQ -gF -GX -GX -gF -qK -JT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -xQ -XP -qK -xQ -RC -zH -NV -zH -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(58,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -LO -GF -xQ -Tl -NJ -NJ -NJ -CQ -CQ -CQ -xQ -xQ -xQ -Oq -Ca -TC -CQ -li -Fa -Fa -iT -iT -JT -xQ -qK -qK -qK -xQ -So -gF -gF -xQ -ly -gF -VG -VG -cC -XJ -JT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -xQ -ii -Cq -xQ -qr -qK -NV -NV -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(59,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -LO -GF -qK -xQ -QJ -xQ -sJ -sJ -NJ -CQ -xQ -xQ -js -CQ -CQ -ul -CQ -li -Fa -Fa -iT -iT -JT -qK -oT -IS -gF -vu -gF -gF -gF -xQ -xQ -gF -VG -VG -cC -XJ -JT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -xQ -xQ -xQ -xQ -mT -HU -NV -NV -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(60,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fh -GF -GF -dp -CQ -xQ -Gx -RN -xQ -CQ -CQ -ul -CQ -jg -CQ -xQ -vx -li -Fa -Fa -iT -iT -JT -AJ -gF -gF -Rg -xQ -gF -gF -gF -xQ -TC -gF -Jh -Jh -gF -qK -JT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -vY -vY -vY -Zg -ed -ed -Km -NV -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(61,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -vY -vY -LO -qK -xQ -xQ -qK -qK -xQ -JI -jg -jg -CQ -xQ -xQ -lc -Fa -Fa -iT -iT -JT -qK -bk -rL -MC -xQ -UT -gF -gF -gF -ul -gF -gF -gF -gF -xQ -JT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -vY -vY -vY -ed -ed -zg -RC -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(62,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -CC -vY -vY -vY -Fh -GF -GF -GF -GF -CQ -ul -ql -CQ -CQ -CQ -KD -dA -li -Fa -Fa -iT -iT -JT -xQ -qK -qK -xQ -xQ -xQ -Fr -xQ -xQ -JI -xQ -tb -qK -qK -xQ -JT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -mT -vY -vY -vY -vY -ed -ed -zg -RC -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(63,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -Vv -CF -CF -CF -CF -vL -vY -LO -jN -ei -CQ -CQ -jg -Ca -nm -li -Fa -Fa -iT -iT -JT -JT -JT -JT -JT -JT -JT -JT -JT -qK -rC -Kx -gF -hJ -kP -qK -JT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(64,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -LO -lR -lR -lR -lR -li -vY -LO -xQ -vh -ql -dO -kn -qc -Cb -li -Fa -Fa -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -JT -qK -pO -wy -ti -gF -TU -qK -JT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -iT -iT -iT -iT -iT -iT -iT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(65,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -zF -lR -uc -yE -lR -li -vY -LO -qK -jN -ul -xQ -xQ -xQ -qK -li -Fa -Fa -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -JT -xQ -qK -qK -Fr -qK -qK -xQ -JT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -iT -iT -iT -iT -iT -iT -iT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(66,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -LO -lR -ZV -YD -lR -li -vY -Fh -GF -GF -GF -dp -KI -GF -GF -vN -Fa -Fa -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -JT -JT -JT -JT -JT -JT -JT -JT -JT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -iT -iT -iT -iT -iT -iT -iT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(67,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -LO -lR -CQ -CQ -lR -li -vY -vY -vY -vY -vY -vY -vY -vY -vY -vY -Fa -Fa -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -iT -iT -iT -iT -iT -iT -iT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(68,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -vY -vY -LO -lR -cQ -cQ -lR -li -vY -vY -vY -ed -mT -Cd -vY -vY -vY -vY -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -iT -iT -iT -iT -iT -iT -iT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(69,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -qK -yj -yj -yj -qK -iT -iT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(70,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -yj -uP -uP -uP -yj -iT -iT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(71,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -qK -Gt -Gt -lQ -qK -iT -iT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(72,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -iT -qK -vg -iT -yj -iT -iT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(73,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -iT -yj -vg -II -yj -iT -iT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(74,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -iT -qK -Gt -Gt -yj -iT -iT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(75,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -iT -qK -yj -yj -qK -iT -iT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(76,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(77,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(78,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(79,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(80,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(81,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(82,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(83,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(84,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(85,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(86,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(87,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(88,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(89,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(90,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(91,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(92,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(93,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(94,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(95,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(96,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(97,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(98,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(99,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(100,1,1) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} - -(1,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(2,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(3,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(4,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(5,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(6,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(7,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(8,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(9,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(10,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(11,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(12,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(13,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(14,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(15,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(16,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(17,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(18,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(19,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(20,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(21,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(22,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(23,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(24,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(25,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(26,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(27,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(28,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(29,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(30,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(31,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(32,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(33,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(34,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(35,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(36,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(37,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(38,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(39,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(40,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(41,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(42,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(43,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(44,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(45,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(46,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(47,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(48,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(49,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(50,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(51,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(52,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(53,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(54,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(55,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(56,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(57,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(58,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(59,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(60,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(61,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(62,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(63,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(64,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(65,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(66,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(67,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(68,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(69,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(70,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(71,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(72,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(73,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(74,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(75,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(76,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(77,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(78,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(79,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(80,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(81,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(82,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(83,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(84,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(85,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(86,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(87,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(88,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(89,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(90,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(91,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(92,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(93,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(94,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(95,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(96,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(97,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(98,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(99,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(100,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} - -(1,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(2,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(3,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(4,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(5,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(6,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(7,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(8,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(9,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(10,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(11,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(12,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(13,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(14,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(15,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(16,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(17,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(18,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(19,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(20,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(21,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(22,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(23,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(24,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(25,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(26,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(27,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(28,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(29,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(30,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(31,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(32,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(33,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(34,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(35,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(36,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(37,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(38,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(39,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(40,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(41,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(42,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(43,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(44,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(45,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(46,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(47,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(48,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(49,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(50,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(51,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(52,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(53,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(54,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(55,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(56,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(57,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(58,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(59,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(60,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(61,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(62,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(63,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(64,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(65,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(66,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(67,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(68,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(69,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(70,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(71,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(72,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(73,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(74,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(75,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(76,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(77,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(78,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(79,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(80,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(81,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(82,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(83,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(84,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(85,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(86,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(87,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(88,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(89,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(90,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(91,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(92,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(93,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(94,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(95,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(96,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(97,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(98,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(99,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(100,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} - -(1,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(2,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(3,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(4,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(5,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(6,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(7,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(8,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(9,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(10,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(11,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(12,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(13,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(14,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(15,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(16,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(17,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(18,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(19,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(20,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(21,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(22,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(23,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(24,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(25,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(26,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(27,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(28,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(29,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(30,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(31,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(32,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(33,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(34,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(35,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(36,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -iT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(37,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(38,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(39,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(40,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(41,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(42,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(43,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(44,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(45,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(46,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(47,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(48,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(49,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(50,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(51,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(52,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(53,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(54,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(55,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(56,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(57,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(58,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(59,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(60,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(61,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(62,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(63,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(64,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(65,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(66,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(67,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(68,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(69,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(70,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(71,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(72,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(73,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(74,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(75,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(76,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(77,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(78,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(79,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(80,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(81,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(82,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(83,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(84,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(85,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(86,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(87,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(88,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(89,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(90,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(91,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(92,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(93,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(94,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(95,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(96,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(97,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(98,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(99,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} -(100,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -"} diff --git a/_maps/map_files/old_maps/roguetown2.dmm b/_maps/map_files/old_maps/roguetown2.dmm index 46b42af529..7de9da5ecd 100644 --- a/_maps/map_files/old_maps/roguetown2.dmm +++ b/_maps/map_files/old_maps/roguetown2.dmm @@ -1,7 +1,8 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/indoors/town/bath) +/obj/effect/spawner/roguemap/hauntz_random, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/town) "ab" = ( /obj/structure/flora/newtree, /obj/structure/flora/newtree, @@ -145,8 +146,8 @@ /area/rogue/under/town/basement) "aH" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 + dir = 4; + icon_state = "torchwall1" }, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) @@ -158,8 +159,8 @@ /area/rogue/under/town/basement) "aJ" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 + dir = 8; + icon_state = "torchwall1" }, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) @@ -201,8 +202,8 @@ /area/rogue/under/town/basement) "aR" = ( /obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 8 + dir = 8; + icon_state = "wooddir" }, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) @@ -222,8 +223,8 @@ /area/rogue/under/town/basement) "aV" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 + dir = 1; + icon_state = "stairs" }, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) @@ -244,8 +245,8 @@ /area/rogue/under/town/basement) "aZ" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/item/reagent_containers/glass/cup/wooden, /turf/open/floor/rogue/tile{ @@ -355,8 +356,8 @@ /area/rogue/under/town/basement) "bv" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 + dir = 4; + icon_state = "chair2" }, /turf/open/floor/rogue/wood, /area/rogue/under/town/basement) @@ -368,8 +369,8 @@ /area/rogue/under/town/basement) "bx" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 + dir = 8; + icon_state = "torchwall1" }, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) @@ -388,8 +389,8 @@ /area/rogue/under/town/basement) "bA" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/structure/mirror{ pixel_y = 28 @@ -398,8 +399,8 @@ /area/rogue/under/town/basement) "bB" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /turf/open/floor/rogue/carpet, /area/rogue/under/town/basement) @@ -476,9 +477,11 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "bP" = ( -/obj/structure/fluff/walldeco/stone, -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/indoors/town/bath) +/obj/structure/handcart{ + dir = 4 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/town) "bQ" = ( /turf/open/transparent/openspace, /area/rogue) @@ -539,8 +542,8 @@ /area/rogue/under/town/basement) "cb" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/structure/mirror{ pixel_x = -28 @@ -610,8 +613,8 @@ /area/rogue/indoors/town/manor) "cn" = ( /obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 + dir = 1; + icon_state = "longtable_mid" }, /turf/open/floor/rogue/blocks{ icon_state = "paving" @@ -619,8 +622,8 @@ /area/rogue/under/town/basement) "co" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /turf/open/floor/rogue/blocks{ icon_state = "paving" @@ -659,8 +662,8 @@ /area/rogue/under/town/sewer) "ct" = ( /obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 + dir = 1; + icon_state = "stonestairs" }, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) @@ -694,8 +697,8 @@ /area/rogue/under/town/basement) "cB" = ( /obj/effect/landmark/mapGenerator/rogue/cave/lava{ - startTurfY = 141; - endTurfX = 54 + endTurfX = 54; + startTurfY = 141 }, /turf/closed/mineral/rogue/bedrock, /area/rogue/under/cave) @@ -786,8 +789,8 @@ /area/rogue/under/town/basement) "cT" = ( /obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 + dir = 4; + icon_state = "stonestairs" }, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) @@ -866,8 +869,8 @@ /area/rogue/under/town/basement) "dj" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) @@ -887,8 +890,8 @@ /area/rogue/under/town/basement) "dn" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 + dir = 4; + icon_state = "stairs" }, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) @@ -963,8 +966,8 @@ /area/rogue/under/town/basement) "dz" = ( /obj/structure/closet/crate/roguecloset/dark, -/obj/item/rogueweapon/huntingknife/idagger, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/knife/dagger, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "dA" = ( @@ -1031,8 +1034,8 @@ /area/rogue/under/town/basement) "dL" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 + dir = 4; + icon_state = "stairs" }, /turf/open/floor/rogue/woodturned, /area/rogue/under/town/basement) @@ -1045,8 +1048,8 @@ /area/rogue/under/town/basement) "dN" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) @@ -1078,8 +1081,8 @@ /area/rogue/under/town/basement) "dT" = ( /obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 8 + dir = 8; + icon_state = "chair1" }, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) @@ -1092,8 +1095,8 @@ /area/rogue/under/town/basement) "dV" = ( /turf/closed/wall/mineral/rogue/wooddark/vertical{ - icon_state = "endwooddark"; - dir = 4 + dir = 4; + icon_state = "endwooddark" }, /area/rogue/under/town/basement) "dW" = ( @@ -1114,8 +1117,8 @@ /area/rogue/under/town/basement) "ea" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/item/flint{ pixel_x = -1 @@ -1128,8 +1131,8 @@ /area/rogue/under/town/basement) "ec" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 + dir = 1; + icon_state = "stairs" }, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) @@ -1155,8 +1158,8 @@ /area/rogue/under/town/basement) "ei" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 + dir = 4; + icon_state = "chair2" }, /turf/open/floor/rogue/woodturned, /area/rogue) @@ -1181,15 +1184,15 @@ /area/rogue/under/town/basement) "em" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 + dir = 8; + icon_state = "stairs" }, /turf/open/floor/rogue/wood, /area/rogue/under/town/basement) "en" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) @@ -1206,8 +1209,8 @@ /area/rogue/under/town/basement) "eq" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) @@ -1219,8 +1222,8 @@ /area/rogue/under/town/basement) "es" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/item/burial_shroud, /turf/open/floor/rogue/blocks, @@ -1246,7 +1249,7 @@ "ew" = ( /obj/structure/closet/crate/roguecloset/dark, /obj/item/clothing/suit/roguetown/shirt/rags, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "ex" = ( @@ -1260,15 +1263,15 @@ /area/rogue/under/town/basement) "ez" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 + dir = 4; + icon_state = "stairs" }, /turf/open/floor/rogue/dirt/road, /area/rogue/under/town/basement) "eA" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 + dir = 8; + icon_state = "torchwall1" }, /turf/open/floor/rogue/cobblerock, /area/rogue/under/town/basement) @@ -1314,8 +1317,8 @@ "eK" = ( /obj/machinery/light/rogue/chand, /obj/effect/landmark/start/jester{ - icon_state = "arrow"; - dir = 1 + dir = 1; + icon_state = "arrow" }, /turf/open/transparent/openspace, /area/rogue/indoors/town/manor) @@ -1326,7 +1329,7 @@ /turf/closed/mineral/rogue/bedrock, /area/rogue/outdoors/town) "eN" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "eO" = ( @@ -1393,15 +1396,15 @@ /area/rogue/indoors/town/manor) "fd" = ( /turf/closed/wall/mineral/rogue/decostone/long{ - icon_state = "decostone-l"; - dir = 1 + dir = 1; + icon_state = "decostone-l" }, /area/rogue/indoors/town/manor) "fe" = ( /obj/machinery/light/rogue/wallfire, /turf/closed/wall/mineral/rogue/decostone/long{ - icon_state = "decostone-l"; - dir = 1 + dir = 1; + icon_state = "decostone-l" }, /area/rogue/indoors/town/manor) "ff" = ( @@ -1410,8 +1413,8 @@ /area/rogue/indoors/town/manor) "fg" = ( /turf/closed/wall/mineral/rogue/decostone/end{ - icon_state = "decostone-e"; - dir = 1 + dir = 1; + icon_state = "decostone-e" }, /area/rogue/indoors/town/manor) "fh" = ( @@ -1504,9 +1507,12 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) "fA" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/bath) +/obj/structure/fluff/railing/wood{ + dir = 1; + pixel_y = -1 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) "fB" = ( /obj/structure/lever{ redstone_id = "thronegrille" @@ -1550,47 +1556,67 @@ /area/rogue/indoors/town/manor) "fH" = ( /obj/structure/roguemachine/atm{ - pixel_y = 0; - pixel_x = 32 + pixel_x = 32; + pixel_y = 0 }, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/manor) "fI" = ( -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/bath) +/obj/effect/decal/cleanable/dirt/cobweb, +/obj/structure/closet/crate/chest/wicker, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "fJ" = ( -/obj/structure/chair/bench/couchablack, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/bath) +/obj/structure/rack/rogue/shelf, +/obj/structure/rack/rogue/shelf/biggest, +/obj/item/flint{ + pixel_y = 40 + }, +/obj/item/rogueweapon/mace/woodclub/rollingpin, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "fK" = ( -/obj/structure/chair/bench/couchablack/r, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/bath) +/obj/structure/rack/rogue/shelf/biggest, +/obj/structure/rack/rogue/shelf, +/obj/item/natural/bundle/stick{ + pixel_y = 37 + }, +/obj/item/natural/bundle/stick{ + pixel_y = 37 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "fL" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/reagent_containers/powder/ozium, -/obj/item/clothing/under/roguetown/loincloth/brown, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) +/obj/structure/stairs{ + dir = 8 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "fM" = ( -/obj/structure/fluff/walldeco/maidensigil, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) +/obj/structure/mineral_door/wood/violet{ + lockid = "tavern" + }, +/turf/open/floor/rogue/woodturned, +/area/rogue/under/town/basement) "fN" = ( -/obj/structure/chair/bench/ultimacouch, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) +/obj/structure/closet/crate/roguecloset, +/obj/item/clothing/suit/roguetown/shirt/undershirt/random, +/obj/item/clothing/suit/roguetown/shirt/undershirt/random, +/obj/item/clothing/suit/roguetown/shirt/undershirt/random, +/obj/item/clothing/under/roguetown/tights/random, +/obj/item/clothing/under/roguetown/tights/random, +/obj/item/clothing/under/roguetown/tights/random, +/turf/open/floor/rogue/woodturned, +/area/rogue/under/town/basement) "fO" = ( -/obj/structure/chair/bench/ultimacouch/r{ - icon_state = "ultimacochright" +/obj/item/storage/bag/tray{ + pixel_y = 32 }, -/obj/effect/landmark/start/nightmaiden, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) -"fP" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) +/obj/item/storage/bag/tray{ + pixel_y = 32 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "fQ" = ( /obj/structure/well, /turf/open/floor/rogue/dirt/road, @@ -1612,55 +1638,63 @@ /turf/open/floor/rogue/carpet/lord/right, /area/rogue/indoors/town/manor) "fW" = ( -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors/town/bath) +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "fX" = ( -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"fY" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/bath) +/obj/item/kitchen/fork, +/obj/item/kitchen/spoon, +/obj/item/kitchen/spoon, +/obj/structure/rack/rogue/shelf/biggest, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "fZ" = ( -/obj/structure/table/wood/nice, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/bath) +/obj/structure/closet/crate/roguecloset, +/obj/item/clothing/shoes/roguetown/boots/leather, +/obj/item/clothing/shoes/roguetown/boots/leather, +/obj/item/clothing/shoes/roguetown/boots/leather, +/turf/open/floor/rogue/woodturned, +/area/rogue/under/town/basement) "ga" = ( -/obj/structure/closet/crate/chest, -/obj/item/clothing/mask/cigarette/pipe, -/obj/item/clothing/mask/cigarette/pipe/westman, -/obj/machinery/light/rogue/wallfire/candle/blue/l, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) +/obj/item/roguebin/water, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "gb" = ( -/obj/item/chair/rogue/fancy, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath) +/obj/structure/bed/rogue/hay, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "gc" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 +/obj/machinery/light/rogue/lanternpost/fixed{ + pixel_x = -2 }, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/town) "gd" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 - }, -/obj/item/reagent_containers/glass/cup/steel, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) +/obj/structure/closet/crate/chest/wicker, +/obj/item/reagent_containers/food/snacks/produce/potato, +/obj/item/reagent_containers/food/snacks/produce/onion, +/obj/item/reagent_containers/food/snacks/produce/potato, +/obj/item/reagent_containers/food/snacks/produce/wheat, +/obj/item/reagent_containers/food/snacks/produce/wheat, +/obj/item/reagent_containers/food/snacks/produce/wheat, +/obj/item/reagent_containers/food/snacks/produce/wheat, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "ge" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) +/obj/structure/rack/rogue/shelf/biggest, +/obj/item/reagent_containers/glass/bucket/wooden, +/obj/item/natural/cloth{ + pixel_x = 3; + pixel_y = 5 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "gf" = ( /obj/effect/landmark/start/hand{ - icon_state = "arrow"; - dir = 8 + dir = 8; + icon_state = "arrow" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) @@ -1675,21 +1709,22 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "gi" = ( -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) +/obj/structure/closet/crate/chest/old_crate, +/obj/item/reagent_containers/powder/salt, +/obj/item/reagent_containers/powder/salt{ + pixel_x = 5 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "gj" = ( -/obj/structure/chair/bench/couchablack, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) -"gk" = ( -/obj/structure/chair/bench/couchablack/r, -/obj/structure/fluff/walldeco/maidendrape, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) +/obj/structure/fluff/clock, +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/woodturned, +/area/rogue/under/town/basement) "gl" = ( -/obj/structure/fluff/walldeco/maidensigil, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) +/obj/structure/stairs, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/town) "gm" = ( /turf/open/floor/rogue/cobble/mossy, /area/rogue/indoors/town/manor) @@ -1720,41 +1755,29 @@ }, /area/rogue/indoors/town/manor) "gs" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 4 - }, -/obj/effect/landmark/start/nightmaiden{ - dir = 4 - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath) +/obj/structure/fermenting_barrel, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "gt" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 - }, -/obj/item/reagent_containers/food/snacks/rogue/meat/salami, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) +/obj/structure/fermenting_barrel/beer, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "gu" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 4 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) +/obj/effect/decal/cleanable/dirt/cobweb, +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "gv" = ( /obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 + dir = 8; + icon_state = "woodwindowdir" }, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, /area/rogue) "gw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -1764,8 +1787,8 @@ /area/rogue/indoors/town/manor) "gx" = ( /obj/structure/stairs/fancy/l{ - icon_state = "fancy_stairs_l"; - dir = 1 + dir = 1; + icon_state = "fancy_stairs_l" }, /turf/open/floor/rogue/carpet/lord{ icon_state = "carpet_l" @@ -1773,22 +1796,22 @@ /area/rogue/indoors/town/manor) "gy" = ( /obj/structure/stairs/fancy/c{ - icon_state = "fancy_stairs_c"; - dir = 1 + dir = 1; + icon_state = "fancy_stairs_c" }, /turf/open/floor/rogue/carpet/lord, /area/rogue/indoors/town/manor) "gz" = ( /obj/structure/stairs/fancy/r{ - icon_state = "fancy_stairs_r"; - dir = 1 + dir = 1; + icon_state = "fancy_stairs_r" }, /turf/open/floor/rogue/carpet/lord{ icon_state = "carpet_r" }, /area/rogue/indoors/town/manor) "gA" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -1807,23 +1830,17 @@ /turf/open/floor/rogue/carpet/lord/center, /area/rogue/indoors/town/manor) "gD" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 8 - }, -/obj/effect/landmark/start/nightmaiden{ - dir = 8 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "gE" = ( -/turf/open/water/bath, -/area/rogue/indoors/town/bath) +/turf/open/floor/rogue/woodturned, +/area/rogue/under/town/basement) "gF" = ( /obj/structure/mirror, /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /turf/open/floor/rogue/carpet/lord/center, /area/rogue/indoors/town/manor) @@ -1867,8 +1884,8 @@ /area/rogue/indoors/town/manor) "gO" = ( /obj/effect/landmark/start/butler{ - icon_state = "arrow"; - dir = 8 + dir = 8; + icon_state = "arrow" }, /turf/open/floor/rogue/tile{ icon_state = "bfloorz" @@ -1879,8 +1896,8 @@ /area/rogue/outdoors/town) "gQ" = ( /obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 4 + dir = 4; + icon_state = "chair1" }, /turf/open/floor/rogue/tile{ icon_state = "bfloorz" @@ -1888,8 +1905,8 @@ /area/rogue/indoors/town/manor) "gR" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 + dir = 9; + icon_state = "largetable" }, /turf/open/floor/rogue/tile{ icon_state = "bfloorz" @@ -1897,8 +1914,8 @@ /area/rogue/indoors/town/manor) "gS" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 + dir = 5; + icon_state = "largetable" }, /obj/item/reagent_containers/food/snacks/produce/apple, /turf/open/floor/rogue/tile{ @@ -1906,26 +1923,30 @@ }, /area/rogue/indoors/town/manor) "gT" = ( -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath) +/obj/machinery/light/rogue/wallfire/candle/l, +/obj/structure/stairs{ + dir = 1 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "gU" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; +/obj/structure/fluff/railing/border{ dir = 10 }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "gV" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 +/obj/machinery/light/rogue/torchholder{ + dir = 8 }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) "gW" = ( -/obj/structure/plasticflaps, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) +/obj/structure/stairs/stone{ + dir = 4 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "gX" = ( /turf/closed/wall/mineral/rogue/roofwall/middle{ dir = 8 @@ -1933,8 +1954,8 @@ /area/rogue/outdoors/town) "gY" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /turf/open/floor/rogue/tile{ icon_state = "bfloorz" @@ -1950,8 +1971,8 @@ /area/rogue/indoors/town/manor) "ha" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" @@ -1975,27 +1996,26 @@ /turf/open/floor/rogue/carpet/lord/center, /area/rogue/indoors/town/manor) "he" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; +/obj/structure/bed/rogue/hay, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) +"hf" = ( +/obj/structure/fluff/railing/border{ dir = 8 }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/bath) -"hf" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath) +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "hg" = ( -/obj/structure/fluff/statue/femalestatue{ - icon_state = "3" - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath) +/obj/structure/mineral_door/bars, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "hh" = ( -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) +/obj/structure/fluff/railing/border{ + dir = 1 + }, +/obj/machinery/light/rogue/firebowl/standing, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "hi" = ( /turf/open/floor/rogue/tile/masonic/spiral, /area/rogue/indoors/town/manor) @@ -2011,8 +2031,8 @@ /area/rogue) "hl" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 + dir = 4; + icon_state = "chair2" }, /turf/open/floor/rogue/tile{ icon_state = "bfloorz" @@ -2020,8 +2040,8 @@ /area/rogue/indoors/town/manor) "hm" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 + dir = 8; + icon_state = "largetable" }, /obj/item/reagent_containers/glass/cup/steel, /turf/open/floor/rogue/tile{ @@ -2030,8 +2050,8 @@ /area/rogue/indoors/town/manor) "hn" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 4 + dir = 4; + icon_state = "largetable" }, /turf/open/floor/rogue/tile{ icon_state = "bfloorz" @@ -2039,8 +2059,8 @@ /area/rogue/indoors/town/manor) "ho" = ( /obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 8 + dir = 8; + icon_state = "chair1" }, /obj/machinery/light/rogue/wallfire/candle/r, /turf/open/floor/rogue/tile{ @@ -2054,9 +2074,11 @@ /turf/open/water/cleanshallow, /area/rogue/outdoors/rtfield) "hr" = ( -/obj/structure/chair/bench/coucha, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/bath) +/obj/structure/fluff/railing/border{ + dir = 9 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "hs" = ( /turf/closed/wall/mineral/rogue/roofwall/center, /area/rogue/outdoors/town) @@ -2068,13 +2090,19 @@ /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) "hv" = ( -/obj/structure/chair/bench/coucha/r, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/bath) +/obj/structure/stairs{ + dir = 1 + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "wooden_floort" + }, +/area/rogue/outdoors/town) "hw" = ( -/obj/structure/closet/crate/roguecloset/inn/south, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) +/obj/machinery/light/rogue/wallfire/candle, +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "hx" = ( /obj/structure/closet/crate/roguecloset, /turf/open/floor/rogue/ruinedwood{ @@ -2096,48 +2124,47 @@ /turf/open/floor/rogue/carpet/lord/right, /area/rogue/indoors/town/manor) "hB" = ( -/obj/structure/fermenting_barrel/random/water, -/obj/machinery/light/rogue/wallfire/candle/blue/l, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "hC" = ( /turf/open/floor/rogue/tile{ icon_state = "bfloorz" }, /area/rogue/indoors/town/manor) "hD" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/bath) +/turf/open/transparent/openspace, +/area/rogue/under/town/basement) "hE" = ( -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/bath) +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/cleanable/generic, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "hF" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) +/obj/machinery/light/rogue/wallfire/candle/r, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/cobweb{ + dir = 1 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "hG" = ( -/obj/structure/table/wood, -/obj/item/roguekey/nightmaiden, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) +/obj/structure/fluff/walldeco/stone, +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/under/town/basement) "hH" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 1; - icon_state = "donjondir"; - locked = 1; - lockid = "nightmaiden" - }, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" +/obj/machinery/light/rogue/lanternpost/fixed{ + pixel_x = -2 }, -/area/rogue/indoors/town/bath) +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) "hI" = ( /turf/closed/wall/mineral/rogue/wooddark, /area/rogue/indoors) "hJ" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 + dir = 10; + icon_state = "largetable" }, /turf/open/floor/rogue/tile{ icon_state = "bfloorz" @@ -2145,14 +2172,14 @@ /area/rogue/indoors/town/manor) "hK" = ( /turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 8 + dir = 8; + icon_state = "endwooddark" }, /area/rogue/indoors) "hL" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 + dir = 6; + icon_state = "largetable" }, /turf/open/floor/rogue/tile{ icon_state = "bfloorz" @@ -2160,8 +2187,8 @@ /area/rogue/indoors/town/manor) "hM" = ( /obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 8 + dir = 8; + icon_state = "chair1" }, /turf/open/floor/rogue/tile{ icon_state = "bfloorz" @@ -2169,15 +2196,15 @@ /area/rogue/indoors/town/manor) "hN" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 + dir = 8; + icon_state = "torchwall1" }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) "hO" = ( /turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 4 + dir = 4; + icon_state = "endwooddark" }, /area/rogue/indoors) "hP" = ( @@ -2213,22 +2240,22 @@ /area/rogue/indoors/town/manor) "hU" = ( /obj/structure/stairs/fancy/l{ - icon_state = "fancy_stairs_l"; - dir = 1 + dir = 1; + icon_state = "fancy_stairs_l" }, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "hV" = ( /obj/structure/stairs/fancy/r{ - icon_state = "fancy_stairs_r"; - dir = 1 + dir = 1; + icon_state = "fancy_stairs_r" }, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "hW" = ( /obj/effect/landmark/start/squire{ - icon_state = "arrow"; - dir = 4 + dir = 4; + icon_state = "arrow" }, /turf/open/floor/rogue/tile{ icon_state = "chess" @@ -2255,17 +2282,17 @@ /turf/closed/wall/mineral/rogue/wooddark/horizontal, /area/rogue/indoors) "ia" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 1; - icon_state = "donjondir"; - locked = 1; - lockid = "nightmaiden" +/obj/structure/mineral_door/wood/deadbolt{ + dir = 8; + name = "Sewage Access" }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "ib" = ( -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath) +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "ic" = ( /obj/structure/roguemachine/scomm/l, /turf/open/floor/rogue/tile{ @@ -2274,8 +2301,8 @@ /area/rogue/indoors/town/manor) "id" = ( /turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 1 + dir = 1; + icon_state = "endwooddark" }, /area/rogue/indoors) "ie" = ( @@ -2330,8 +2357,8 @@ pixel_x = -32 }, /obj/effect/landmark/start/squire{ - icon_state = "arrow"; - dir = 4 + dir = 4; + icon_state = "arrow" }, /turf/open/floor/rogue/tile{ icon_state = "chess" @@ -2345,14 +2372,14 @@ /area/rogue/indoors/town/manor) "ir" = ( /turf/closed/wall/mineral/rogue/decostone/end{ - icon_state = "decostone-e"; - dir = 8 + dir = 8; + icon_state = "decostone-e" }, /area/rogue/indoors/town/manor) "is" = ( /turf/closed/wall/mineral/rogue/decostone/end{ - icon_state = "decostone-e"; - dir = 4 + dir = 4; + icon_state = "decostone-e" }, /area/rogue/indoors/town/manor) "it" = ( @@ -2387,8 +2414,8 @@ /area/rogue/indoors) "iy" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 + dir = 1; + icon_state = "chair2" }, /turf/open/floor/rogue/carpet/lord/center, /area/rogue/indoors/town/manor) @@ -2396,9 +2423,9 @@ /obj/structure/closet/crate/chest, /obj/item/neuFarm/seed/wheat, /obj/item/neuFarm/seed/apple, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) "iA" = ( @@ -2457,19 +2484,19 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "iL" = ( -/obj/structure/table/wood{ - icon_state = "tablewood3" +/obj/structure/mineral_door/wood/deadbolt{ + dir = 1; + name = "Sewers" }, -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "iM" = ( /turf/closed/wall/mineral/rogue/wooddark/vertical, /area/rogue/indoors) "iN" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 + dir = 4; + icon_state = "torchwall1" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors) @@ -2513,8 +2540,8 @@ /area/rogue/indoors) "iV" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 + dir = 4; + icon_state = "chair2" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors) @@ -2544,8 +2571,8 @@ /area/rogue/indoors/town/manor) "iZ" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 + dir = 1; + icon_state = "stairs" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) @@ -2565,8 +2592,8 @@ /area/rogue/indoors/town/manor) "jd" = ( /obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 + dir = 1; + icon_state = "longtable_mid" }, /obj/item/rogueweapon/pitchfork, /turf/open/floor/rogue/ruinedwood{ @@ -2575,8 +2602,8 @@ /area/rogue/indoors) "je" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /obj/item/rogueweapon/shovel, /turf/open/floor/rogue/ruinedwood{ @@ -2585,8 +2612,8 @@ /area/rogue/indoors) "jf" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" @@ -2603,16 +2630,18 @@ /obj/item/neuFarm/seed/oat, /obj/item/neuFarm/seed/apple, /obj/item/neuFarm/seed/apple, -/obj/item/neuFarm/seed/pipeweed, +/obj/item/neuFarm/seed/westleach, /obj/item/clothing/mask/cigarette/pipe/westman, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) "ji" = ( -/obj/structure/fluff/walldeco/maidendrape, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) +/obj/item/chair/stool/bar/rogue, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/cobweb, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "jj" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) "jk" = ( @@ -2638,8 +2667,8 @@ /area/rogue/indoors/town/manor) "jn" = ( /obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 + dir = 1; + icon_state = "tablewood1" }, /obj/item/reagent_containers/glass/cup/steel, /obj/item/reagent_containers/glass/cup/steel, @@ -2655,8 +2684,8 @@ /area/rogue/indoors/town/manor) "jp" = ( /obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 + dir = 1; + icon_state = "longtable_mid" }, /turf/open/floor/rogue/tile{ icon_state = "chess" @@ -2664,8 +2693,8 @@ /area/rogue/indoors/town/manor) "jq" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /turf/open/floor/rogue/tile{ icon_state = "chess" @@ -2673,8 +2702,8 @@ /area/rogue/indoors/town/manor) "jr" = ( /obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 + dir = 1; + icon_state = "tablewood1" }, /obj/item/candle/yellow/lit, /turf/open/floor/rogue/woodturned, @@ -2688,8 +2717,8 @@ /area/rogue/indoors/town/manor) "jt" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/item/candle, /turf/open/floor/rogue/woodturned, @@ -2699,21 +2728,21 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/rtfield) "jv" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) "jw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "jx" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -2721,7 +2750,7 @@ /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "jy" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -2729,24 +2758,24 @@ pixel_y = 16 }, /obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 + dir = 1; + icon_state = "tablewood1" }, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "jz" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 + dir = 1; + icon_state = "stairs" }, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "jA" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 + dir = 4; + icon_state = "chair2" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -2754,10 +2783,10 @@ /area/rogue/indoors/town/manor) "jB" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 + dir = 9; + icon_state = "largetable" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -2766,22 +2795,22 @@ /area/rogue/indoors/town/manor) "jC" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 + dir = 4; + icon_state = "torchwall1" }, /turf/open/floor/rogue/carpet/lord/left, /area/rogue/indoors/town/manor) "jD" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 + dir = 8; + icon_state = "torchwall1" }, /turf/open/floor/rogue/carpet/lord/right, /area/rogue/indoors/town/manor) "jE" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/item/candle/skull, /turf/open/floor/rogue/woodturned, @@ -2827,15 +2856,15 @@ /area/rogue/indoors/town/manor) "jM" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 + dir = 4; + icon_state = "chair2" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) "jN" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 + dir = 8; + icon_state = "largetable" }, /obj/item/reagent_containers/glass/cup, /turf/open/floor/rogue/wood, @@ -2856,8 +2885,8 @@ /area/rogue/indoors/town/manor) "jQ" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 + dir = 8; + icon_state = "torchwall1" }, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/manor) @@ -2886,44 +2915,44 @@ /area/rogue/indoors/town/manor) "jV" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 + dir = 4; + icon_state = "chair2" }, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "jW" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 + dir = 9; + icon_state = "largetable" }, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "jX" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 + dir = 5; + icon_state = "largetable" }, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "jY" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "jZ" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 + dir = 5; + icon_state = "largetable" }, /obj/item/reagent_containers/food/snacks/produce/apple, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "ka" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 + dir = 10; + icon_state = "largetable" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) @@ -2949,8 +2978,8 @@ "ke" = ( /obj/structure/bed/rogue/shit, /obj/effect/landmark/start/servant{ - icon_state = "arrow"; - dir = 8 + dir = 8; + icon_state = "arrow" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) @@ -2980,31 +3009,31 @@ /area/rogue/indoors/town/manor) "ki" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 + dir = 8; + icon_state = "largetable" }, /obj/item/reagent_containers/glass/cup, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "kj" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 4 + dir = 4; + icon_state = "largetable" }, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "kk" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 + dir = 8; + icon_state = "largetable" }, /obj/item/reagent_containers/glass/cup/wooden, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "kl" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 + dir = 9; + icon_state = "largetable" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) @@ -3016,8 +3045,8 @@ /area/rogue/indoors/town/manor) "kn" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 + dir = 8; + icon_state = "torchwall1" }, /turf/open/floor/rogue/tile{ icon_state = "bfloorz" @@ -3045,29 +3074,29 @@ /area/rogue/outdoors/town) "kr" = ( /obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 4 + dir = 4; + icon_state = "woodwindowdir" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) "ks" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 + dir = 8; + icon_state = "largetable" }, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "kt" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 + dir = 4; + icon_state = "chair2" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "ku" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 + dir = 8; + icon_state = "largetable" }, /obj/item/candle/yellow/lit, /obj/structure/fluff/walldeco/rpainting/crown{ @@ -3080,7 +3109,7 @@ /area/rogue/indoors/town/manor) "kw" = ( /obj/structure/closet/crate/chest, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "kx" = ( @@ -3102,8 +3131,8 @@ /area/rogue/indoors/town/manor) "kA" = ( /obj/effect/landmark/start/butler{ - icon_state = "arrow"; - dir = 8 + dir = 8; + icon_state = "arrow" }, /turf/open/floor/rogue/tile{ icon_state = "linoleum" @@ -3117,24 +3146,24 @@ /area/rogue/indoors/town/manor) "kC" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 4 + dir = 4; + icon_state = "largetable" }, /obj/item/candle/yellow/lit, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "kD" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 4 + dir = 4; + icon_state = "largetable" }, /obj/item/reagent_containers/glass/cup, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "kE" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 + dir = 8; + icon_state = "largetable" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) @@ -3163,8 +3192,8 @@ /area/rogue/indoors/town/manor) "kI" = ( /obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 + dir = 1; + icon_state = "longtable_mid" }, /obj/structure/fluff/millstone{ pixel_y = 7 @@ -3175,8 +3204,8 @@ /area/rogue/indoors/town/manor) "kJ" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /obj/item/reagent_containers/glass/cup/silver, /turf/open/floor/rogue/tile{ @@ -3204,22 +3233,22 @@ /area/rogue/indoors/town/manor) "kN" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 + dir = 10; + icon_state = "largetable" }, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "kO" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 + dir = 6; + icon_state = "largetable" }, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "kP" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 + dir = 10; + icon_state = "largetable" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) @@ -3237,35 +3266,31 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) "kS" = ( -/obj/machinery/light/rogue/wallfire/candle/blue/l, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath) +/obj/machinery/light/rogue/campfire, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "kT" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath) +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "kU" = ( /obj/structure/fermenting_barrel, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "kV" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; +/obj/structure/stairs/stone{ dir = 1 }, -/obj/item/candle/yellow, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath) +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "kW" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 +/obj/structure/bed/rogue/shit{ + name = "makeshift bed" }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/bath) +/obj/effect/landmark/start/vagrant, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "kX" = ( /obj/machinery/light/rogue/wallfire{ pixel_x = -32 @@ -3274,8 +3299,8 @@ /area/rogue/indoors/town/manor) "kY" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 + dir = 1; + icon_state = "chair2" }, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) @@ -3299,23 +3324,25 @@ /turf/closed/wall/mineral/rogue/craftstone, /area/rogue/under/town/basement) "ld" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "tavern" - }, -/turf/open/floor/rogue/greenstone, -/area/rogue/under/town/basement) -"le" = ( -/obj/effect/decal/cleanable/dirt/cobweb, +/obj/structure/closet/crate/chest/wicker, +/obj/item/reagent_containers/powder/ozium, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) +"le" = ( +/obj/structure/stairs{ + dir = 1 + }, +/turf/open/floor/rogue/ruinedwood, +/area/rogue/outdoors/town) "lf" = ( /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "lg" = ( -/obj/structure/spider/stickyweb, +/obj/structure/mineral_door/wood/window{ + lockid = "tavern" + }, /turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) +/area/rogue/outdoors/town) "lh" = ( /obj/structure/flora/roguegrass/bush/wall/tall, /turf/open/floor/rogue/grass, @@ -3342,8 +3369,8 @@ /area/rogue/indoors/town/manor) "lm" = ( /obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 1 + dir = 1; + icon_state = "woodwindowdir" }, /turf/open/floor/rogue/blocks{ icon_state = "bluestone" @@ -3355,9 +3382,10 @@ /area/rogue/outdoors/town) "lo" = ( /obj/structure/rack/rogue, -/turf/open/floor/rogue/blocks{ - icon_state = "greenblocks" +/obj/effect/decal/cleanable/dirt/cobweb{ + icon_state = "cobweb2" }, +/turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "lp" = ( /turf/open/floor/rogue/blocks{ @@ -3365,16 +3393,14 @@ }, /area/rogue/under/town/basement) "lq" = ( -/turf/open/floor/rogue/blocks{ - icon_state = "newstone2" +/obj/structure/fluff/railing/border{ + dir = 6 }, +/turf/open/floor/rogue/metal/barograte, /area/rogue/under/town/basement) "lr" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "tavern" - }, -/turf/open/floor/rogue/cobble, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "ls" = ( /obj/structure/flora/newtree, @@ -3405,9 +3431,9 @@ /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) "lz" = ( -/obj/structure/closet/crate/chest, -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/blocks, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "lA" = ( /obj/structure/flora/newtree, @@ -3416,10 +3442,9 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/rtfield) "lB" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/cooking/pan, +/obj/structure/roguemachine/scomm, /turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) +/area/rogue/outdoors/town) "lC" = ( /obj/structure/fluff/statue/gargoyle/moss, /obj/machinery/light/rogue/torchholder, @@ -3434,16 +3459,14 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "lF" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/storage/roguebag, +/obj/machinery/light/rogue/torchholder{ + pixel_y = 26 + }, /turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) +/area/rogue/outdoors/town) "lG" = ( -/obj/item/roguekey/roomi, -/obj/item/roguekey/roomii, -/obj/item/roguekey/roomiii, -/obj/item/roguekey/roomiv, -/obj/structure/closet/crate/chest, +/obj/machinery/light/rogue/wallfire/candle/l, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "lH" = ( @@ -3488,11 +3511,11 @@ }, /area/rogue/indoors/town/magician) "lQ" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/blocks{ - icon_state = "paving" +/obj/structure/fluff/walldeco/customflag{ + pixel_y = 32 }, -/area/rogue/under/town/basement) +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) "lR" = ( /obj/machinery/light/rogue/oven/west, /turf/open/floor/rogue/ruinedwood{ @@ -3514,8 +3537,8 @@ /area/rogue/indoors/town/magician) "lU" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 + dir = 4; + icon_state = "stairs" }, /turf/open/floor/rogue/ruinedwood{ icon_state = "vertw" @@ -3606,15 +3629,15 @@ /area/rogue/indoors/town/manor) "mm" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 + dir = 4; + icon_state = "torchwall1" }, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/manor) "mn" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 + dir = 8; + icon_state = "torchwall1" }, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/manor) @@ -3647,43 +3670,65 @@ }, /area/rogue/indoors/town/manor) "mt" = ( -/obj/structure/well, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) +/obj/structure/closet/crate/chest{ + base_icon_state = "woodchestalt"; + icon_state = "woodchestalt"; + name = "meat chest" + }, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/butter, +/obj/item/reagent_containers/food/snacks/butter, +/obj/item/reagent_containers/food/snacks/rogue/cheese, +/obj/item/reagent_containers/food/snacks/rogue/cheese, +/turf/open/floor/rogue/tile{ + icon_state = "tavern" + }, +/area/rogue/indoors/town/tavern) "mu" = ( -/obj/structure/fluff/millstone, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) +/obj/machinery/light/rogue/oven/south, +/turf/open/floor/rogue/tile{ + icon_state = "tavern" + }, +/area/rogue/indoors/town/tavern) "mv" = ( /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "mw" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/rogue/blocks{ - icon_state = "paving" - }, +/obj/structure/rack/rogue, +/turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "mx" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/blocks{ - icon_state = "newstone2" +/obj/structure/fluff/railing/border{ + dir = 4 }, +/turf/open/floor/rogue/metal/barograte, /area/rogue/under/town/basement) "my" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) +/obj/structure/closet/crate/chest/old_crate{ + name = "meat crate" + }, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/obj/item/reagent_containers/food/snacks/fat, +/obj/item/reagent_containers/food/snacks/fat, +/obj/item/reagent_containers/food/snacks/rogue/meat/poultry, +/obj/item/reagent_containers/food/snacks/rogue/meat/poultry, +/turf/open/floor/rogue/tile{ + icon_state = "tavern" + }, +/area/rogue/indoors/town/tavern) "mz" = ( /obj/structure/closet/crate/roguecloset, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/magician) "mA" = ( /obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 4 + dir = 4; + icon_state = "chair1" }, /turf/open/floor/carpet/stellar, /area/rogue/indoors/town/magician) @@ -3693,8 +3738,8 @@ /area/rogue/indoors/town/magician) "mC" = ( /obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 8 + dir = 8; + icon_state = "chair1" }, /turf/open/floor/carpet/stellar, /area/rogue/indoors/town/magician) @@ -3717,21 +3762,23 @@ /turf/open/floor/rogue/tile/masonic, /area/rogue/indoors/town/manor) "mH" = ( -/obj/structure/closet/crate/chest, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) +/obj/structure/rack/rogue/shelf/biggest, +/obj/structure/rack/rogue/shelf, +/obj/item/storage/roguebag, +/obj/item/candle/yellow{ + pixel_y = 42 + }, +/turf/open/floor/rogue/woodturned, +/area/rogue/indoors/town/tavern) "mI" = ( /obj/item/reagent_containers/food/snacks/smallrat, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "mJ" = ( -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/blocks{ - icon_state = "newstone2" - }, -/area/rogue/under/town/basement) +/obj/structure/rack/rogue/shelf/biggest, +/obj/structure/rack/rogue/shelf, +/turf/open/floor/rogue/woodturned, +/area/rogue/indoors/town/tavern) "mK" = ( /turf/closed/wall/mineral/rogue/stonebrick, /area/rogue/outdoors/town) @@ -3746,25 +3793,29 @@ }, /area/rogue/indoors/town/garrison) "mN" = ( -/obj/structure/closet/crate/chest, -/obj/item/reagent_containers/food/snacks/rogue/meat/poultry, -/turf/open/floor/rogue/blocks{ - icon_state = "newstone2" - }, -/area/rogue/under/town/basement) +/obj/structure/fluff/dryingrack, +/turf/open/floor/rogue/woodturned, +/area/rogue/indoors/town/tavern) "mO" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) +/obj/structure/stairs{ + dir = 8 + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" + }, +/area/rogue/indoors/town/tavern) "mP" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/cup/silver, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) +/obj/machinery/light/rogue/torchholder{ + dir = 8 + }, +/obj/structure/fluff/railing/border{ + dir = 9 + }, +/obj/structure/roguemachine/mail, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" + }, +/area/rogue/indoors/town/tavern) "mQ" = ( /obj/structure/toilet, /turf/open/floor/rogue/tile{ @@ -3773,8 +3824,8 @@ /area/rogue/indoors/town/garrison) "mR" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/structure/mirror{ pixel_y = 28 @@ -3783,10 +3834,14 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/garrison) "mS" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) +/obj/structure/table/wood{ + dir = 9; + icon_state = "largetable" + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "vertw" + }, +/area/rogue/indoors/town/tavern) "mT" = ( /obj/item/roguebin/water, /turf/open/floor/rogue/cobble, @@ -3811,8 +3866,8 @@ /area/rogue/indoors/town/manor) "mY" = ( /obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 1 + dir = 1; + icon_state = "wooddir" }, /turf/open/floor/rogue/tile{ icon_state = "chess" @@ -3857,8 +3912,8 @@ /area/rogue/indoors/town/manor) "ni" = ( /obj/structure/fluff/railing/wood{ - icon_state = "woodrailing"; - dir = 4 + dir = 4; + icon_state = "woodrailing" }, /turf/open/transparent/openspace, /area/rogue/outdoors/town) @@ -3889,8 +3944,8 @@ /area/rogue/indoors) "no" = ( /obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 + dir = 1; + icon_state = "tablewood1" }, /obj/item/cooking/pan, /obj/item/reagent_containers/powder/flour, @@ -3965,9 +4020,12 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/garrison) "nA" = ( -/obj/structure/fluff/psycross, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) +/obj/structure/table/wood{ + dir = 5; + icon_state = "largetable" + }, +/turf/open/floor/rogue/ruinedwood, +/area/rogue/indoors/town/tavern) "nB" = ( /obj/structure/closet/crate/roguecloset, /obj/item/reagent_containers/glass/bottle/rogue/healthpot, @@ -3986,8 +4044,8 @@ /area/rogue/indoors) "nE" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 + dir = 4; + icon_state = "chair2" }, /turf/open/floor/rogue/cobble, /area/rogue/indoors) @@ -4046,15 +4104,15 @@ /area/rogue/indoors) "nO" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /turf/open/floor/rogue/cobble, /area/rogue/indoors) "nP" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 + dir = 9; + icon_state = "largetable" }, /turf/open/floor/rogue/cobble, /area/rogue/indoors) @@ -4067,8 +4125,8 @@ /area/rogue/indoors/town/garrison) "nR" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 + dir = 5; + icon_state = "largetable" }, /obj/item/reagent_containers/glass/cup/steel, /turf/open/floor/rogue/cobble, @@ -4115,8 +4173,8 @@ "oa" = ( /obj/structure/bed/rogue, /obj/effect/landmark/start/guardsman{ - icon_state = "arrow"; - dir = 1 + dir = 1; + icon_state = "arrow" }, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/garrison) @@ -4138,9 +4196,11 @@ /turf/closed/wall/mineral/rogue/stone/moss, /area/rogue/indoors/town/church) "og" = ( -/obj/effect/landmark/observer_start, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) +/obj/structure/roguemachine/money/r, +/turf/open/floor/rogue/tile{ + icon_state = "tavern" + }, +/area/rogue/indoors/town/tavern) "oh" = ( /obj/machinery/light/rogue/wallfire/candle, /turf/open/floor/rogue/carpet, @@ -4155,8 +4215,8 @@ /area/rogue/indoors/town) "oj" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/item/paper/scroll, /turf/open/floor/rogue/carpet, @@ -4173,7 +4233,6 @@ /obj/item/roguekey/garrison, /obj/item/roguekey/mason, /obj/item/roguekey/mercenary, -/obj/item/roguekey/nightmaiden, /obj/item/roguekey/tavern, /turf/open/floor/rogue/tile/tilerg, /area/rogue/indoors/town) @@ -4233,15 +4292,15 @@ /area/rogue/indoors/town/garrison) "ov" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 + dir = 10; + icon_state = "largetable" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) "ow" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 + dir = 6; + icon_state = "largetable" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) @@ -4275,24 +4334,24 @@ /area/rogue) "oB" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 + dir = 8; + icon_state = "largetable" }, /obj/item/reagent_containers/glass/cup, /turf/open/floor/rogue/cobble, /area/rogue/indoors) "oC" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /obj/structure/roguemachine/scomm, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "oD" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 4 + dir = 4; + icon_state = "largetable" }, /obj/item/reagent_containers/glass/cup/wooden, /turf/open/floor/rogue/cobble, @@ -4309,8 +4368,8 @@ /area/rogue/indoors/town/church) "oH" = ( /obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 + dir = 4; + icon_state = "stonestairs" }, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/church) @@ -4332,15 +4391,15 @@ /area/rogue/indoors/town/church) "oM" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 + dir = 10; + icon_state = "largetable" }, /turf/open/floor/rogue/cobble, /area/rogue/indoors) "oN" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 + dir = 6; + icon_state = "largetable" }, /obj/item/reagent_containers/glass/cup/wooden, /turf/open/floor/rogue/cobble, @@ -4354,8 +4413,8 @@ /area/rogue/indoors) "oQ" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 + dir = 4; + icon_state = "stairs" }, /turf/open/floor/rogue/blocks{ icon_state = "paving" @@ -4363,8 +4422,8 @@ /area/rogue/indoors) "oR" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 + dir = 8; + icon_state = "torchwall1" }, /turf/open/floor/rogue/blocks{ icon_state = "paving" @@ -4372,8 +4431,8 @@ /area/rogue/indoors) "oS" = ( /obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 1 + dir = 1; + icon_state = "woodwindowdir" }, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" @@ -4381,15 +4440,15 @@ /area/rogue) "oT" = ( /obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 1 + dir = 1; + icon_state = "woodwindowdir" }, /turf/open/floor/rogue/wood, /area/rogue) "oU" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 + dir = 1; + icon_state = "stairs" }, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors) @@ -4463,30 +4522,30 @@ icon_state = "longtable" }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors) "pi" = ( /obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 + dir = 1; + icon_state = "longtable_mid" }, /obj/item/reagent_containers/food/snacks/produce/oat, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors) "pj" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /obj/item/reagent_containers/food/snacks/produce/oat, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors) "pk" = ( @@ -4496,21 +4555,21 @@ /obj/item/reagent_containers/food/snacks/produce/wheat, /obj/item/reagent_containers/food/snacks/produce/wheat, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors) "pl" = ( /obj/effect/landmark/start/beastmonger, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors) "pm" = ( /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors) "pn" = ( @@ -4523,8 +4582,8 @@ /area/rogue/indoors/town) "pp" = ( /obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 8 + dir = 8; + icon_state = "wooddir" }, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) @@ -4561,8 +4620,8 @@ /area/rogue/indoors/town/garrison) "px" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/item/candle, /turf/open/floor/rogue/wood, @@ -4583,8 +4642,8 @@ /area/rogue/indoors/town/church) "pB" = ( /obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 5 + dir = 5; + icon_state = "pipe" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town) @@ -4600,12 +4659,24 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/garrison) "pE" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 1; - icon_state = "wooddir" +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/roguekey/roomhunt, +/obj/item/roguekey/roomiv{ + lockid = "roomvi"; + name = "room VI key" }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) +/obj/item/roguekey/roomiv{ + lockid = "roomv"; + name = "room V key" + }, +/obj/item/roguekey/roomiv, +/obj/item/roguekey/roomiii, +/obj/item/roguekey/roomii, +/obj/item/roguekey/roomi, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" + }, +/area/rogue/indoors/town/tavern) "pF" = ( /obj/structure/table/wood{ icon_state = "longtable" @@ -4618,8 +4689,8 @@ "pH" = ( /obj/structure/roguemachine/scomm/l, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors) "pI" = ( @@ -4659,8 +4730,8 @@ /area/rogue/indoors/town/garrison) "pR" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) @@ -4685,8 +4756,8 @@ /area/rogue/outdoors/town) "pW" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 + dir = 1; + icon_state = "stairs" }, /turf/open/floor/rogue/church, /area/rogue/indoors/town/church) @@ -4712,16 +4783,16 @@ /area/rogue/outdoors/town/roofs) "qa" = ( /obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; dir = 4; + icon_state = "wooddir"; locked = 1 }, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/church) "qb" = ( /turf/open/floor/rogue/rooftop{ - icon_state = "roofg"; - dir = 2 + dir = 2; + icon_state = "roofg" }, /area/rogue/outdoors/town) "qc" = ( @@ -4730,8 +4801,8 @@ /area/rogue/outdoors/town) "qd" = ( /obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 + dir = 1; + icon_state = "tablewood1" }, /obj/item/natural/feather, /obj/item/candle/yellow, @@ -4739,8 +4810,8 @@ /area/rogue/indoors/town) "qe" = ( /obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 4 + dir = 4; + icon_state = "chair1" }, /obj/structure/roguemachine/scomm, /turf/open/floor/rogue/hexstone, @@ -4768,15 +4839,15 @@ /area/rogue/indoors/town/garrison) "qj" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 + dir = 8; + icon_state = "stairs" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/garrison) "qk" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 + dir = 8; + icon_state = "stairs" }, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/garrison) @@ -4792,8 +4863,8 @@ /area/rogue/indoors/town/garrison) "qn" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 + dir = 1; + icon_state = "stairs" }, /turf/open/floor/rogue/blocks{ icon_state = "paving-t" @@ -4809,18 +4880,23 @@ /turf/closed/wall/mineral/rogue/wooddark/horizontal, /area/rogue/outdoors/rtfield) "qr" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) +/obj/structure/chair/wood/rogue{ + dir = 8 + }, +/obj/effect/landmark/start/villager, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "vertw" + }, +/area/rogue/indoors/town/tavern) "qs" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) "qt" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -4851,16 +4927,16 @@ /area/rogue/indoors/town/garrison) "qy" = ( /obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 + dir = 1; + icon_state = "longtable_mid" }, /obj/item/paper, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/garrison) "qz" = ( /obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 + dir = 1; + icon_state = "longtable_mid" }, /obj/item/paper/scroll, /obj/item/natural/feather, @@ -4868,23 +4944,23 @@ /area/rogue/indoors/town/garrison) "qA" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/garrison) "qB" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 + dir = 1; + icon_state = "border" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/garrison) "qC" = ( /obj/machinery/light/rogue/wallfire/candle/r, /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 + dir = 1; + icon_state = "border" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/garrison) @@ -4898,8 +4974,8 @@ /area/rogue/indoors/town/garrison) "qE" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 + dir = 8; + icon_state = "torchwall1" }, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/garrison) @@ -4912,8 +4988,8 @@ /area/rogue/indoors/town/church) "qH" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 + dir = 4; + icon_state = "chair2" }, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/church) @@ -4936,8 +5012,8 @@ /area/rogue/outdoors/rtfield) "qM" = ( /obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 9 + dir = 9; + icon_state = "pipe" }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) @@ -4960,8 +5036,8 @@ /area/rogue/outdoors/town) "qR" = ( /obj/item/reagent_containers/food/snacks/crow{ - icon_state = "crow"; - dir = 8 + dir = 8; + icon_state = "crow" }, /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) @@ -4971,8 +5047,8 @@ /area/rogue/outdoors/town) "qT" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 + dir = 8; + icon_state = "torchwall1" }, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" @@ -4980,12 +5056,12 @@ /area/rogue/indoors) "qU" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 + dir = 6; + icon_state = "border" }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors) "qV" = ( @@ -4994,35 +5070,35 @@ name = "butcher's key" }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors) "qW" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors) "qX" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 + dir = 1; + icon_state = "stairs" }, /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 + dir = 4; + icon_state = "border" }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors) "qY" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 + dir = 4; + icon_state = "border" }, /turf/open/transparent/openspace, /area/rogue/indoors) @@ -5039,21 +5115,21 @@ icon_state = "wooddir" }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors) "rb" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 + dir = 4; + icon_state = "stairs" }, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) "rc" = ( /turf/open/floor/rogue/rooftop{ - icon_state = "roofg"; - dir = 2 + dir = 2; + icon_state = "roofg" }, /area/rogue) "rd" = ( @@ -5062,21 +5138,18 @@ /area/rogue/outdoors/town) "re" = ( /turf/open/floor/rogue/rooftop{ - icon_state = "roof"; - dir = 8 + dir = 8; + icon_state = "roof" }, /area/rogue/outdoors/town) "rf" = ( /obj/machinery/light/rogue/wallfire/candle/blue/r, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town) -"rg" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town/tavern) "rh" = ( /turf/open/floor/rogue/rooftop{ - icon_state = "roof"; - dir = 4 + dir = 4; + icon_state = "roof" }, /area/rogue/outdoors/town) "ri" = ( @@ -5089,97 +5162,94 @@ /area/rogue/indoors/town) "rk" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 + dir = 6; + icon_state = "border" }, /turf/open/transparent/openspace, /area/rogue/outdoors/town) -"rm" = ( -/obj/structure/roguewindow/openclose, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) "rn" = ( -/obj/structure/fermenting_barrel/random/water, +/obj/structure/table/wood{ + dir = 4; + icon_state = "largetable" + }, +/obj/item/cooking/pan, +/obj/machinery/light/rogue/wallfire/candle/l, /turf/open/floor/rogue/tile{ - icon_state = "tile" + icon_state = "tavern" }, /area/rogue/indoors/town/tavern) "ro" = ( -/obj/machinery/light/rogue/oven/south, +/obj/structure/table/wood{ + dir = 5; + icon_state = "largetable" + }, +/obj/structure/fluff/millstone, /turf/open/floor/rogue/tile{ - icon_state = "tile" + icon_state = "tavern" }, /area/rogue/indoors/town/tavern) -"rp" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) "rq" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 +/obj/machinery/light/rogue/hearth, +/turf/open/floor/rogue/tile{ + icon_state = "tavern" }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) +/area/rogue/indoors/town/tavern) "rr" = ( /obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 + dir = 1; + icon_state = "tablewood1" }, /obj/item/candle/yellow, /turf/open/floor/rogue/wood, /area/rogue/indoors/town) "rs" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/reagent_containers/powder/flour, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/effect/landmark/start/cook, /turf/open/floor/rogue/tile{ icon_state = "tile" }, /area/rogue/indoors/town/tavern) "rt" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 9; + icon_state = "largetable" }, -/obj/item/candle/yellow, /turf/open/floor/rogue/tile{ - icon_state = "chess" + icon_state = "tile" }, /area/rogue/indoors/town/tavern) "ru" = ( -/obj/machinery/light/rogue/oven/south, +/obj/structure/table/wood{ + dir = 5; + icon_state = "largetable" + }, /turf/open/floor/rogue/tile{ - icon_state = "chess" + icon_state = "tile" }, /area/rogue/indoors/town/tavern) "rv" = ( +/obj/structure/table/wood{ + dir = 10; + icon_state = "largetable" + }, /turf/open/floor/rogue/tile{ - icon_state = "chess" + icon_state = "tile" }, /area/rogue/indoors/town/tavern) "rw" = ( -/obj/structure/rack/rogue/shelf/big, -/obj/structure/rack/rogue/shelf, +/obj/structure/closet/crate/chest{ + base_icon_state = "woodchestalt"; + icon_state = "woodchestalt" + }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "rx" = ( /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) -"ry" = ( -/obj/structure/fermenting_barrel/beer, -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/tavern) "rz" = ( /obj/structure/fluff/statue/tdummy, /turf/open/floor/rogue/rooftop{ - icon_state = "roofg"; - dir = 2 + dir = 2; + icon_state = "roofg" }, /area/rogue/outdoors/town) "rA" = ( @@ -5190,8 +5260,9 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town) "rC" = ( -/obj/structure/fermenting_barrel/random/water, -/obj/structure/rack/rogue/shelf, +/obj/structure/fluff/railing/border{ + dir = 1 + }, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -5202,9 +5273,12 @@ }, /area/rogue/indoors/town/tavern) "rE" = ( -/obj/item/reagent_containers/food/snacks/smallrat, +/obj/structure/table/wood{ + dir = 6; + icon_state = "largetable" + }, /turf/open/floor/rogue/tile{ - icon_state = "chess" + icon_state = "tile" }, /area/rogue/indoors/town/tavern) "rF" = ( @@ -5215,70 +5289,51 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "rH" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/tavern) -"rI" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, +/obj/item/reagent_containers/food/snacks/smallrat, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, /area/rogue/indoors/town/tavern) "rJ" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, +/obj/machinery/light/rogue/firebowl, /turf/open/floor/rogue/wood, -/area/rogue/outdoors/town) +/area/rogue/outdoors/town/roofs) "rK" = ( /obj/item/reagent_containers/food/snacks/crow{ - icon_state = "crow"; - dir = 8 + dir = 8; + icon_state = "crow" }, /turf/open/floor/rogue/rooftop{ - icon_state = "roof"; - dir = 8 + dir = 8; + icon_state = "roof" }, /area/rogue/outdoors/town) -"rL" = ( +"rM" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; dir = 4 }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"rM" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 - }, -/turf/open/floor/rogue/woodturned, +/turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "rN" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 + dir = 8; + icon_state = "largetable" }, -/turf/open/floor/rogue/woodturned, +/turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "rO" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 +/obj/structure/table/wood{ + dir = 4; + icon_state = "largetable" }, -/turf/open/floor/rogue/woodturned, +/turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "rP" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 4 +/obj/structure/table/wood{ + dir = 1; + icon_state = "tablewood1" }, -/turf/closed/wall/mineral/rogue/decowood, +/turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "rQ" = ( /obj/structure/bookcase, @@ -5286,122 +5341,117 @@ /area/rogue/indoors/town) "rR" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 - }, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/turf/open/floor/rogue/tile{ - icon_state = "chess" + dir = 6; + icon_state = "largetable" }, +/turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "rS" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" +/turf/open/floor/rogue/ruinedwood{ + icon_state = "vertw" }, /area/rogue/indoors/town/tavern) "rT" = ( -/obj/structure/roguemachine/money/r, +/obj/structure/table/wood{ + dir = 6; + icon_state = "largetable" + }, +/obj/item/reagent_containers/glass/bucket/pot{ + pixel_y = 7 + }, /turf/open/floor/rogue/tile{ - icon_state = "chess" + icon_state = "tavern" }, /area/rogue/indoors/town/tavern) "rU" = ( -/obj/structure/closet/crate/chest, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" +/obj/structure/table/wood{ + dir = 1; + icon_state = "tablewood_alt2" }, +/obj/structure/mineral_door/wood/deadbolt/shutter, +/turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "rV" = ( -/obj/structure/fermenting_barrel/beer, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" +/obj/structure/mineral_door/wood/window{ + locked = 1; + lockid = "tavern" }, +/turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "rW" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 +/obj/machinery/light/rogue/torchholder{ + dir = 4 + }, +/obj/structure/chair/wood/rogue{ + dir = 4 + }, +/obj/effect/landmark/start/villager, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "vertw" }, -/turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "rX" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 + dir = 10; + icon_state = "largetable" }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"rY" = ( -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" +/turf/open/floor/rogue/ruinedwood{ + icon_state = "vertw" }, -/turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) -"rZ" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 +"rY" = ( +/obj/structure/chair/wood/rogue{ + dir = 8 }, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/food/snacks/butter, -/obj/item/reagent_containers/food/snacks/butter, -/turf/open/floor/rogue/tile{ - icon_state = "tile" +/turf/open/floor/rogue/ruinedwood{ + icon_state = "vertw" }, /area/rogue/indoors/town/tavern) -"sa" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 - }, -/obj/item/storage/roguebag, +"rZ" = ( /turf/open/floor/rogue/tile{ - icon_state = "chess" + icon_state = "tavern" }, /area/rogue/indoors/town/tavern) "sb" = ( -/obj/structure/table/wood{ - icon_state = "longtable" +/obj/structure/fluff/walldeco/customflag{ + pixel_x = -32 + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "vertw" }, -/obj/item/storage/bag/tray, -/obj/item/storage/bag/tray, -/obj/item/storage/bag/tray, -/turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "sc" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 +/obj/structure/rack/rogue/shelf/big, +/obj/item/reagent_containers/glass/cup/wooden, +/obj/item/reagent_containers/glass/cup/wooden, +/obj/item/reagent_containers/glass/cup/wooden{ + pixel_x = 8 }, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/turf/open/floor/rogue/woodturned, +/obj/structure/rack/rogue/shelf/big{ + pixel_y = 0 + }, +/obj/item/reagent_containers/glass/cup{ + pixel_x = 8; + pixel_y = 20 + }, +/obj/item/reagent_containers/glass/cup{ + pixel_x = -2; + pixel_y = 20 + }, +/obj/item/reagent_containers/glass/cup{ + pixel_x = 8; + pixel_y = 20 + }, +/turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "sd" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) +/obj/structure/roguemachine/scomm, +/turf/open/floor/rogue/ruinedwood, +/area/rogue/indoors/town/tavern) "se" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/ruinedwood, +/area/rogue/indoors/town/tavern) "sf" = ( /obj/machinery/light/rogue/torchholder/c, /turf/open/floor/rogue/tile/tilerg, @@ -5409,15 +5459,15 @@ "sg" = ( /obj/machinery/light/rogue/firebowl/standing, /turf/open/floor/rogue/rooftop{ - icon_state = "roof"; - dir = 4 + dir = 4; + icon_state = "roof" }, /area/rogue/outdoors/town) "sh" = ( /obj/structure/ladder, /turf/open/floor/rogue/rooftop{ - icon_state = "roof"; - dir = 4 + dir = 4; + icon_state = "roof" }, /area/rogue/outdoors/town) "si" = ( @@ -5425,7 +5475,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) "sj" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/wood, /area/rogue/outdoors/town) "sk" = ( @@ -5509,8 +5559,8 @@ /area/rogue/indoors/town) "sC" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/garrison) @@ -5533,8 +5583,8 @@ /area/rogue/indoors/town/garrison) "sG" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 + dir = 4; + icon_state = "stairs" }, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/garrison) @@ -5557,13 +5607,13 @@ /area/rogue/indoors/town/church) "sL" = ( /obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 + dir = 8; + icon_state = "woodwindowdir" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "sM" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/church) "sN" = ( @@ -5571,44 +5621,38 @@ /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/church) "sO" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, +/obj/structure/bars, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "sP" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 - }, -/turf/open/floor/rogue/wood, +/obj/structure/chair/wood/rogue, +/obj/effect/landmark/start/adventurer, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "sQ" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 + dir = 4; + icon_state = "torchwall1" }, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/rtfield) "sR" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 + dir = 8; + icon_state = "torchwall1" }, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/rtfield) "sS" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 +/obj/structure/fluff/railing/border{ + dir = 1 }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "sT" = ( /obj/structure/fluff/walldeco/steward{ - icon_state = "steward"; - dir = 1 + dir = 1; + icon_state = "steward" }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) @@ -5634,8 +5678,8 @@ /area/rogue/indoors/town) "sZ" = ( /obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 + dir = 1; + icon_state = "longtable_mid" }, /obj/structure/bars{ icon_state = "barsbent"; @@ -5654,27 +5698,20 @@ }, /area/rogue/outdoors/mountains) "tc" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/town) +/obj/structure/fluff/railing/border{ + dir = 4 + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/town/roofs) "td" = ( /turf/open/floor/rogue/rooftop{ dir = 8 }, /area/rogue/outdoors/town) "te" = ( -/obj/structure/mineral_door/wood/window{ - locked = 1; - lockid = "tavern" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"tf" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" }, -/turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "tg" = ( /obj/structure/closet/crate/roguecloset/inn/chest, @@ -5700,8 +5737,8 @@ /area/rogue/indoors/town/garrison) "tl" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /obj/machinery/light/rogue/wallfire/candle/r, /turf/open/floor/rogue/wood, @@ -5759,8 +5796,8 @@ /area/rogue/indoors/town) "tw" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town) @@ -5863,17 +5900,15 @@ /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/church) "tO" = ( -/obj/item/rogueweapon/stoneaxe/woodcut, +/obj/item/rogueweapon/axe/iron, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/rtfield) "tP" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" +/obj/structure/fluff/walldeco/innsign{ + desc = "A sign for a local inn."; + name = "Inn sign" }, +/turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) "tQ" = ( /turf/open/floor/rogue/rooftop{ @@ -5881,10 +5916,8 @@ }, /area/rogue/outdoors/town) "tR" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_x = -32 - }, -/turf/open/floor/rogue/woodturned, +/obj/structure/fireaxecabinet/south, +/turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "tS" = ( /obj/structure/fluff/walldeco/customflag, @@ -5894,20 +5927,22 @@ /turf/closed/wall/mineral/rogue/craftstone, /area/rogue/outdoors/town) "tU" = ( -/obj/structure/rack/rogue/shelf, +/obj/structure/table/wood{ + icon_state = "longtable_mid" + }, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "tV" = ( /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "tW" = ( -/obj/structure/fireaxecabinet/south, +/obj/effect/landmark/start/innkeep, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "tX" = ( -/obj/structure/mineral_door/swing_door, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) +/obj/structure/stairs, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/town/roofs) "tY" = ( /turf/closed/wall/mineral/rogue/roofwall/innercorner{ dir = 4 @@ -5932,8 +5967,8 @@ /area/rogue/outdoors/town) "ud" = ( /obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 + dir = 1; + icon_state = "stonestairs" }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) @@ -5974,8 +6009,8 @@ /area/rogue/outdoors/town) "um" = ( /obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 + dir = 4; + icon_state = "stonestairs" }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) @@ -6199,15 +6234,15 @@ /area/rogue/outdoors/rtfield) "vg" = ( /obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 8 + dir = 8; + icon_state = "fence" }, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/rtfield) "vh" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 + dir = 10; + icon_state = "border" }, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/shop) @@ -6241,8 +6276,8 @@ /area/rogue/outdoors/town) "vo" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) @@ -6260,12 +6295,11 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/rtfield) "vs" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 +/obj/structure/fluff/railing/border{ + dir = 8 }, -/turf/open/floor/rogue/woodturned, -/area/rogue/outdoors/town) +/turf/open/transparent/openspace, +/area/rogue/outdoors/town/roofs) "vt" = ( /obj/structure/mineral_door/wood/donjon{ dir = 4; @@ -6276,8 +6310,8 @@ /area/rogue/indoors/town/shop) "vu" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 + dir = 4; + icon_state = "border" }, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/shop) @@ -6286,8 +6320,8 @@ /area/rogue/indoors/town/shop) "vw" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 + dir = 8; + icon_state = "border" }, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/shop) @@ -6297,8 +6331,8 @@ /area/rogue/indoors/town/shop) "vy" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 + dir = 4; + icon_state = "chair2" }, /turf/open/floor/rogue/tile{ icon_state = "chess" @@ -6312,8 +6346,8 @@ /area/rogue/outdoors/town) "vA" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /turf/open/floor/rogue/tile{ icon_state = "chess" @@ -6321,12 +6355,12 @@ /area/rogue/outdoors/town) "vB" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /obj/effect/landmark/start/vagrant{ - icon_state = "arrow"; - dir = 8 + dir = 8; + icon_state = "arrow" }, /turf/open/floor/rogue/tile{ icon_state = "chess" @@ -6342,8 +6376,8 @@ /area/rogue/outdoors/town) "vE" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 + dir = 4; + icon_state = "stairs" }, /turf/open/floor/rogue/woodturned, /area/rogue/outdoors/town) @@ -6365,13 +6399,12 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/rtfield) "vJ" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcv"; - locked = 1; - lockid = "tower" +/obj/structure/fermenting_barrel/beer, +/obj/effect/decal/cleanable/dirt/cobweb, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) +/area/rogue/indoors/town/tavern) "vK" = ( /obj/structure/roguemachine/scomm/l, /turf/open/floor/rogue/blocks, @@ -6403,15 +6436,15 @@ /area/rogue/outdoors/rtfield) "vR" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 + dir = 4; + icon_state = "stairs" }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/rtfield) "vS" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 + dir = 8; + icon_state = "stairs" }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) @@ -6439,12 +6472,12 @@ /area/rogue/outdoors/town) "vX" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 + dir = 4; + icon_state = "chair2" }, /obj/effect/landmark/start/vagrant{ - icon_state = "arrow"; - dir = 4 + dir = 4; + icon_state = "arrow" }, /turf/open/floor/rogue/tile{ icon_state = "chess" @@ -6474,22 +6507,22 @@ /area/rogue/indoors/town/shop) "wc" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 + dir = 5; + icon_state = "border" }, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/shop) "wd" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 + dir = 1; + icon_state = "border" }, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/shop) "we" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 + dir = 9; + icon_state = "border" }, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/shop) @@ -6502,8 +6535,8 @@ /area/rogue/outdoors/town) "wg" = ( /obj/structure/chair/bench{ - icon_state = "bench"; - dir = 1 + dir = 1; + icon_state = "bench" }, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) @@ -6533,8 +6566,8 @@ /area/rogue/outdoors/town) "wn" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 + dir = 1; + icon_state = "stairs" }, /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) @@ -6552,8 +6585,8 @@ /area/rogue/outdoors/town) "wq" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 + dir = 1; + icon_state = "chair2" }, /turf/open/floor/rogue/tile{ icon_state = "chess" @@ -6583,7 +6616,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town/dwarfin) "ww" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town/dwarfin) "wx" = ( @@ -6601,8 +6634,8 @@ /area/rogue/indoors/town) "wB" = ( /obj/structure/fluff/walldeco/goblet{ - icon_state = "goblet"; - dir = 1 + dir = 1; + icon_state = "goblet" }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) @@ -6614,15 +6647,15 @@ /area/rogue/indoors/town/shop) "wE" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 + dir = 10; + icon_state = "border" }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) "wF" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 + dir = 4; + icon_state = "torchwall1" }, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) @@ -6632,8 +6665,8 @@ /area/rogue/outdoors/rtfield) "wH" = ( /obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 8 + dir = 8; + icon_state = "fence" }, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/rtfield) @@ -6681,8 +6714,8 @@ "wS" = ( /obj/item/reagent_containers/glass/cup/silver, /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 + dir = 9; + icon_state = "largetable" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/shop) @@ -6713,15 +6746,15 @@ /area/rogue/outdoors/town) "xa" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 + dir = 8; + icon_state = "stairs" }, /turf/open/floor/rogue/wood, /area/rogue/outdoors/town) "xb" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 + dir = 8; + icon_state = "border" }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) @@ -6739,15 +6772,15 @@ /area/rogue/outdoors/rtfield) "xf" = ( /obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 1 + dir = 1; + icon_state = "fence" }, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/rtfield) "xg" = ( /obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 1 + dir = 1; + icon_state = "fence" }, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/rtfield) @@ -6793,15 +6826,15 @@ /obj/item/rope, /obj/structure/fluff/wallclock/r, /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 + dir = 8; + icon_state = "largetable" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/shop) "xr" = ( /obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 4 + dir = 4; + icon_state = "chair1" }, /turf/open/floor/carpet/purple, /area/rogue/indoors/town/shop) @@ -6814,8 +6847,8 @@ /area/rogue/indoors/town/shop) "xt" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 + dir = 8; + icon_state = "border" }, /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) @@ -6828,8 +6861,8 @@ /area/rogue/indoors/town/dwarfin) "xw" = ( /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors/town/dwarfin) "xx" = ( @@ -6845,10 +6878,6 @@ }, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/dwarfin) -"xz" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) "xA" = ( /obj/structure/bed/rogue, /turf/open/floor/rogue/blocks/stonered, @@ -6861,8 +6890,8 @@ /obj/item/roguekey/shop, /obj/item/keyring, /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 + dir = 10; + icon_state = "largetable" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/shop) @@ -6872,15 +6901,15 @@ /area/rogue/indoors/town/shop) "xE" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 + dir = 1; + icon_state = "border" }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) "xF" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 + dir = 9; + icon_state = "border" }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) @@ -6898,16 +6927,16 @@ /area/rogue/indoors/town/dwarfin) "xJ" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 + dir = 8; + icon_state = "torchwall1" }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors/town/dwarfin) "xK" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -6936,8 +6965,8 @@ /area/rogue/indoors/town/manor) "xO" = ( /obj/item/reagent_containers/food/snacks/crow{ - icon_state = "crow"; - dir = 1 + dir = 1; + icon_state = "crow" }, /turf/open/floor/rogue/rooftop{ dir = 8 @@ -6952,8 +6981,8 @@ /area/rogue/outdoors/town) "xR" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 + dir = 1; + icon_state = "stairs" }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/exposed/dwarf) @@ -6972,8 +7001,8 @@ /area/rogue/indoors/town/shop) "xU" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/shop) @@ -7000,8 +7029,8 @@ /area/rogue/indoors/town/shop) "xY" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 + dir = 4; + icon_state = "torchwall1" }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) @@ -7011,8 +7040,8 @@ /area/rogue/indoors/town/dwarfin) "ya" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 + dir = 4; + icon_state = "stairs" }, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" @@ -7025,8 +7054,8 @@ /area/rogue/indoors/town/dwarfin) "yc" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/dwarfin) @@ -7055,14 +7084,6 @@ /obj/structure/closet/crate/roguecloset/lord, /turf/open/floor/rogue/tile/tilerg, /area/rogue/indoors/town/manor) -"yi" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/obj/item/rogue/instrument/flute, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) "yj" = ( /turf/closed/wall/mineral/rogue/wooddark, /area/rogue/indoors/town) @@ -7092,8 +7113,8 @@ /area/rogue/indoors/town/shop) "yo" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/item/roguekey/shop, /obj/machinery/light/rogue/wallfire/candle/blue, @@ -7108,49 +7129,28 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) "yr" = ( -/obj/structure/chair/stool/rogue, +/obj/structure/mineral_door/wood/window{ + locked = 1; + lockid = "tavern" + }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "ys" = ( -/obj/structure/rack/rogue, -/obj/item/kitchen/fork, -/obj/item/kitchen/fork, -/obj/item/kitchen/fork, -/obj/item/kitchen/spoon/plastic, -/obj/item/kitchen/spoon/plastic, -/obj/item/kitchen/spoon/plastic, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" +/obj/structure/fluff/walldeco/wantedposter{ + pixel_x = 32; + pixel_y = 0 }, +/turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "yt" = ( -/obj/structure/bookcase, +/obj/structure/fermenting_barrel/random/water, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, /area/rogue/indoors/town/tavern) -"yu" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) -"yv" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) "yw" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/ruinedwood, +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "yx" = ( /obj/structure/fluff/statue/knight/r, @@ -7159,45 +7159,44 @@ "yy" = ( /obj/structure/bed/rogue, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors/town/dwarfin) "yz" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 + dir = 4; + icon_state = "chair2" }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors/town/dwarfin) "yA" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 +/obj/structure/table/wood{ + icon_state = "longtable" }, -/turf/open/floor/rogue/wood, +/turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "yB" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 +/obj/structure/chair/wood/rogue{ + dir = 4; + icon_state = "chair2" }, -/turf/open/floor/rogue/ruinedwood, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "yC" = ( /obj/structure/table/wood{ icon_state = "tablewood1" }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors/town/dwarfin) "yD" = ( -/obj/item/rogueweapon/stoneaxe/woodcut, +/obj/item/rogueweapon/axe/iron, /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/dwarfin) "yE" = ( @@ -7210,38 +7209,43 @@ }, /area/rogue/indoors/town/shop) "yF" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 +/obj/structure/table/wood{ + dir = 10; + icon_state = "largetable" }, -/turf/open/floor/rogue/ruinedwood, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "yG" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 +/obj/structure/chair/wood/rogue{ + dir = 8; + icon_state = "chair2" }, -/turf/open/floor/rogue/wood, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "yH" = ( -/obj/structure/mineral_door/wood/window{ - lockid = "tavern" +/obj/structure/table/wood{ + dir = 9; + icon_state = "largetable" }, -/turf/open/floor/rogue/woodturned, +/obj/item/candle/yellow/lit, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "yI" = ( /turf/open/floor/rogue/concrete, /area/rogue/indoors/town/shop) "yJ" = ( -/obj/structure/rogue/trophy/deer, -/turf/open/floor/rogue/wood, +/obj/structure/table/wood{ + dir = 5; + icon_state = "largetable" + }, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "yK" = ( /obj/structure/closet/dirthole/closed, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) "yL" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/dwarfin) "yM" = ( @@ -7259,7 +7263,7 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/dwarfin) "yO" = ( -/obj/structure/fluff/walldeco/wantedposter, +/obj/structure/rogue/trophy/deer, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "yP" = ( @@ -7275,14 +7279,17 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town) "yS" = ( -/obj/structure/bearpelt, -/turf/open/floor/rogue/wood, +/obj/structure/table/wood{ + dir = 6; + icon_state = "largetable" + }, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "yT" = ( /obj/structure/fluff/wallclock/r, /obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 + dir = 1; + icon_state = "tablewood1" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town) @@ -7310,13 +7317,13 @@ /turf/closed/wall/mineral/rogue/decowood, /area/rogue/indoors/town) "yY" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) "yZ" = ( /obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 1 + dir = 1; + icon_state = "woodwindowdir" }, /turf/closed/wall/mineral/rogue/stonebrick, /area/rogue/indoors/town/manor) @@ -7343,19 +7350,19 @@ /area/rogue/indoors/town) "zf" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 + dir = 4; + icon_state = "torchwall1" }, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "zg" = ( /obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 8 + dir = 8; + icon_state = "wooddir" }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors/town/dwarfin) "zh" = ( @@ -7385,8 +7392,8 @@ "zm" = ( /obj/machinery/light/rogue/hearth, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors/town) "zn" = ( @@ -7395,42 +7402,42 @@ /area/rogue/outdoors/mountains) "zo" = ( /obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 + dir = 1; + icon_state = "tablewood1" }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors/town) "zp" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors/town) "zq" = ( /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors/town) "zr" = ( /obj/machinery/light/rogue/torchholder/c, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors/town) "zs" = ( /obj/structure/closet/crate/roguecloset, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors/town) "zt" = ( @@ -7458,537 +7465,444 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/shop) "zx" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 +/obj/structure/chair/wood/rogue{ + dir = 8 }, -/turf/open/floor/rogue/wood, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "zy" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 +/obj/structure/table/wood{ + dir = 6; + icon_state = "largetable" }, +/obj/item/dice, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "zz" = ( -/mob/living/simple_animal/pet/cat, +/obj/structure/bearpelt, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "zA" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 +/obj/machinery/light/rogue/torchholder{ + dir = 4 }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/obj/structure/chair/wood/rogue{ + dir = 4 + }, +/turf/open/floor/rogue/ruinedwood, +/area/rogue/outdoors/town/roofs) "zB" = ( /obj/structure/table/wood, /obj/item/storage/roguebag, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/shop) -"zC" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 - }, -/obj/item/dice, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) "zD" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood, +/obj/structure/mineral_door/swing_door, +/turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "zE" = ( -/obj/structure/table/wood/nice, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) -"zF" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood, +/obj/machinery/light/rogue/torchholder, +/turf/closed/wall/mineral/rogue/decowood, /area/rogue/indoors/town/tavern) "zG" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 + dir = 5; + icon_state = "largetable" }, -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/woodturned, +/obj/item/rogue/instrument/flute, +/turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "zH" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 +/obj/structure/chair/wood/rogue{ + dir = 4 }, -/obj/item/toy/cards/deck/syndicate, -/turf/open/floor/rogue/woodturned, +/obj/effect/landmark/start/adventurer, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "zI" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 4 - }, -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 +/obj/structure/chair/wood/rogue{ + dir = 8 }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"zJ" = ( -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/woodturned, +/turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "zK" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, +/obj/structure/closet/crate/roguecloset/dark, +/obj/item/clothing/suit/roguetown/shirt/rags, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "zL" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/turf/open/floor/rogue/woodturned, +/mob/living/simple_animal/pet/cat/rogue/inn, +/turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "zM" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, +/obj/structure/fluff/railing/border, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "zN" = ( /turf/open/transparent/openspace, /area/rogue/indoors/town/tavern) "zO" = ( -/obj/structure/mineral_door/swing_door, -/turf/open/floor/rogue/wood, +/obj/structure/stairs{ + dir = 1 + }, +/turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "zP" = ( /turf/closed/wall/mineral/rogue/decowood, /area/rogue/indoors/town/tavern) "zQ" = ( -/obj/structure/bookcase, -/turf/open/floor/rogue/wood, +/obj/structure/fluff/railing/border{ + dir = 6 + }, +/turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "zR" = ( -/obj/structure/fluff/clock, +/obj/item/roguebin/water, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "zS" = ( -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" +/obj/structure/stairs{ + dir = 1 }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/turf/open/floor/rogue/ruinedwood{ + icon_state = "wooden_floort" + }, +/area/rogue/outdoors/town/roofs) "zT" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"zU" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; dir = 4 }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"zV" = ( -/obj/structure/table/wood{ - icon_state = "tablewood3" - }, -/obj/structure/roguemachine/musicbox, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) -"zW" = ( -/obj/structure/chair/bench/ultimacouch, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) -"zX" = ( -/obj/structure/chair/bench/ultimacouch/r{ - icon_state = "ultimacochright" +/turf/open/floor/rogue/ruinedwood{ + icon_state = "horzw" }, -/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) -"zY" = ( +"zV" = ( /turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) -"zZ" = ( -/obj/structure/mineral_door/wood, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) "Aa" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 +/obj/structure/chair/wood/rogue{ + dir = 4 }, -/turf/open/floor/rogue/wood, +/turf/open/floor/carpet/purple, /area/rogue/indoors/town/tavern) "Ab" = ( -/obj/item/reagent_containers/glass/cup/wooden, -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 1 - }, -/turf/open/floor/rogue/wood, +/obj/structure/table/wood/fancy/blue, +/turf/open/floor/carpet/purple, /area/rogue/indoors/town/tavern) "Ac" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 1 +/obj/structure/chair/wood/rogue{ + dir = 8 }, -/turf/open/floor/rogue/wood, +/turf/open/floor/carpet/purple, /area/rogue/indoors/town/tavern) "Ad" = ( -/obj/item/paper/scroll, -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 1 +/obj/structure/chair/wood/rogue{ + dir = 4 }, -/turf/open/floor/rogue/wood, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "Ae" = ( -/obj/structure/table/wood/fancy/blue, -/turf/open/floor/carpet/red, +/turf/open/floor/rogue/tile, /area/rogue/indoors/town/tavern) "Af" = ( /obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 + dir = 1; + icon_state = "tablewood1" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town) "Ag" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 2 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"Ah" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; dir = 1 }, -/turf/open/floor/carpet/red, +/turf/open/floor/carpet/purple, /area/rogue/indoors/town/tavern) "Ai" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" +/obj/item/toy/cards/deck/syndicate, +/obj/structure/table/wood{ + dir = 1; + icon_state = "tablewood1" }, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "Aj" = ( -/obj/structure/bed/rogue/inn/double, -/obj/item/bedsheet/rogue/fabric_double, -/turf/open/floor/rogue/woodturned, +/obj/structure/table/wood{ + dir = 1; + icon_state = "tablewood1" + }, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "Ak" = ( -/obj/structure/closet/crate/roguecloset/inn, -/turf/open/floor/rogue/woodturned, +/obj/structure/table/wood{ + dir = 9; + icon_state = "largetable" + }, +/obj/item/toy/cards/deck/syndicate, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "Al" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 +/obj/structure/chair/wood/rogue{ + dir = 1 }, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/tavern) "Am" = ( -/obj/structure/closet/crate/drawer/inn, -/turf/open/floor/rogue/woodturned, +/obj/structure/chair/wood/rogue{ + dir = 8 + }, +/obj/effect/landmark/start/adventurer{ + dir = 8 + }, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "An" = ( -/obj/structure/rogue/trophy/deer, -/obj/structure/chair/bench/ultimacouch, -/turf/open/floor/rogue/woodturned, +/obj/structure/chair/wood/rogue{ + dir = 4 + }, +/obj/effect/landmark/start/adventurer{ + dir = 4 + }, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "Ao" = ( -/obj/structure/chair/bench/ultimacouch/r{ - icon_state = "ultimacochright" +/obj/structure/table/wood{ + dir = 9; + icon_state = "largetable" }, -/turf/open/floor/rogue/woodturned, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "Ap" = ( -/obj/structure/table/wood/nice, -/turf/open/floor/rogue/woodturned, +/obj/structure/chair/wood/rogue{ + dir = 1 + }, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "Aq" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/wood, +/obj/structure/chair/wood/rogue{ + dir = 1 + }, +/obj/effect/landmark/start/adventurer, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "Ar" = ( -/obj/structure/chair/wood, -/turf/open/floor/rogue/wood, +/obj/structure/table/wood{ + dir = 6; + icon_state = "largetable" + }, +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "As" = ( /obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 + dir = 1; + icon_state = "tablewood1" }, -/turf/open/floor/rogue/wood, +/turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "At" = ( /turf/open/floor/carpet/inn, /area/rogue/indoors/town/tavern) "Au" = ( -/obj/structure/chair/wood, -/turf/open/floor/carpet/inn, +/obj/structure/chair/bench/ultimacouch, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "Av" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"Aw" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 +/obj/structure/chair/bench/ultimacouch/r{ + icon_state = "ultimacochright" }, -/turf/open/floor/rogue/woodturned, +/turf/open/floor/carpet/purple, /area/rogue/indoors/town/tavern) "Ax" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 +/obj/structure/fluff/railing/wood, +/obj/structure/fluff/railing/border{ + dir = 4 }, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, /area/rogue/indoors/town/tavern) "Ay" = ( -/obj/structure/closet/crate/roguecloset/inn/south, -/turf/open/floor/rogue/wood, +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "roomvi"; + name = "ROOM VI" + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "horzw" + }, /area/rogue/indoors/town/tavern) "Az" = ( -/obj/structure/bed/rogue/wool, -/obj/item/bedsheet/rogue/cloth, -/turf/open/floor/rogue/wood, +/obj/structure/table/wood{ + icon_state = "tablewood3" + }, +/obj/structure/roguemachine/musicbox, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "AA" = ( -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, +/obj/structure/chair/bench/ultimacouch, +/turf/open/floor/carpet/purple, /area/rogue/indoors/town/tavern) "AB" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomv"; - name = "ROOM V" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" +/obj/structure/chair/bench/ultimacouch/r{ + icon_state = "ultimacochright" }, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "AC" = ( /turf/closed/wall/mineral/rogue/wood, /area/rogue/indoors/town/tavern) "AD" = ( -/obj/structure/fluff/railing/wood{ - icon_state = "woodrailing"; - dir = 8; - pixel_y = -1 - }, -/turf/open/floor/rogue/woodturned, +/obj/structure/fluff/railing/wood, +/turf/open/transparent/openspace, /area/rogue/indoors/town/tavern) "AE" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" +/obj/structure/fluff/railing/border{ + dir = 10 }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "AF" = ( -/obj/structure/closet/crate/roguecloset/inn/south, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/turf/open/floor/rogue/wood, +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "AG" = ( /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/tavern) "AH" = ( -/obj/structure/closet/crate/drawer/inn, -/obj/item/storage/belt/rogue/pouch/coins/poor, +/obj/machinery/light/rogue/torchholder{ + dir = 8 + }, +/obj/structure/fluff/railing/border, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "AI" = ( -/obj/machinery/light/rogue/chand, -/turf/open/transparent/openspace, +/obj/machinery/light/rogue/torchholder{ + dir = 4 + }, +/turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "AJ" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 +/obj/structure/fluff/railing/wood{ + dir = 8; + pixel_y = -1 }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "AK" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, +/obj/effect/landmark/start/villager, +/turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "AL" = ( -/obj/structure/chair/wood/rogue/fancy, -/turf/open/floor/rogue/wood, +/obj/machinery/light/rogue/torchholder{ + dir = 4 + }, +/turf/open/floor/rogue/tile, /area/rogue/indoors/town/tavern) "AM" = ( -/obj/structure/bed/rogue/inn/double, -/obj/item/bedsheet/rogue/double_pelt, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"AN" = ( -/obj/structure/table/wood/nice, -/obj/item/candle/yellow, +/obj/structure/fluff/railing/border{ + dir = 6 + }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "AO" = ( -/obj/structure/table/wood, -/turf/open/floor/rogue/wood, +/turf/closed/wall/mineral/rogue/stonebrick, /area/rogue/indoors/town/tavern) "AP" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomvi"; - name = "ROOM VI" +/obj/machinery/light/rogue/torchholder{ + dir = 8 }, -/turf/open/floor/rogue/wood, +/turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "AQ" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomiii"; - name = "ROOM III" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "AR" = ( -/turf/closed/wall/mineral/rogue/stonebrick, +/obj/structure/chair/wood/rogue, +/turf/open/floor/carpet/purple, /area/rogue/indoors/town/tavern) "AS" = ( -/obj/machinery/light/rogue/torchholder, -/turf/closed/wall/mineral/rogue/decowood, +/obj/structure/bookcase, +/turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "AT" = ( -/obj/structure/fluff/railing/wood, -/turf/open/transparent/openspace, +/obj/structure/chair/wood/rogue, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "AU" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" +/obj/structure/fluff/railing/border{ + dir = 4 }, -/turf/open/floor/carpet/royalblack, +/turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "AV" = ( -/obj/structure/closet/crate/drawer/inn, -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/turf/open/floor/rogue/wood, +/obj/structure/table/wood/fancy/blue, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "AW" = ( -/obj/structure/closet/crate/roguecloset, -/turf/open/floor/rogue/wood, +/obj/structure/chair/wood/rogue{ + dir = 8 + }, +/turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "AX" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 +/obj/structure/fluff/railing/border{ + dir = 4 }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "AY" = ( -/obj/structure/closet/crate/roguecloset/dark, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "roomiv"; + name = "ROOM IV" }, +/turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "AZ" = ( -/obj/structure/bed/rogue/wool, -/turf/open/floor/carpet/royalblack, +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/carpet/purple, /area/rogue/indoors/town/tavern) "Ba" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/turf/open/floor/carpet/royalblack, +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "Bb" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomii"; - name = "ROOM II" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" +/obj/structure/bars/pipe{ + dir = 4 }, -/area/rogue/indoors/town/tavern) +/turf/open/transparent/openspace, +/area/rogue/outdoors/town/roofs) "Bc" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; +/turf/open/floor/rogue/rooftop{ dir = 1 }, -/area/rogue/indoors/town/tavern) +/area/rogue/outdoors/town/roofs) "Bd" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 +/obj/structure/table/wood{ + icon_state = "tablewood1" }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors/town/tavern) "Be" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/tavern) -"Bf" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" +/obj/item/reagent_containers/food/snacks/crow{ + dir = 1 }, -/area/rogue/indoors/town/tavern) -"Bg" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; +/turf/open/floor/rogue/rooftop{ dir = 1 }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" +/area/rogue/outdoors/town/roofs) +"Bf" = ( +/turf/open/floor/rogue/rooftop{ + dir = 4 }, -/area/rogue/indoors/town/tavern) +/area/rogue/outdoors/town/roofs) "Bh" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 1 }, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" @@ -8000,70 +7914,46 @@ }, /area/rogue/indoors/town/tavern) "Bj" = ( -/obj/structure/mineral_door/wood{ - locked = 0; - lockid = "tavern"; - name = "MEETING ROOM" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, +/obj/structure/roguewindow/openclose, +/turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "Bk" = ( -/obj/structure/closet/crate/chest, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 +/obj/structure/fluff/railing/border{ + dir = 6 }, -/area/rogue/indoors/town/tavern) +/turf/open/transparent/openspace, +/area/rogue/outdoors/town/roofs) "Bl" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town/tavern) +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/outdoors/town/roofs) "Bm" = ( -/obj/structure/bed/rogue/wool, -/obj/item/bedsheet/rogue/pelt, -/turf/open/floor/rogue/wood, +/obj/structure/bed/rogue/inn/double, +/obj/item/bedsheet/rogue/fabric_double, +/turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "Bn" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomi"; - name = "ROOM I" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, +/obj/structure/closet/crate/roguecloset/inn, +/turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "Bo" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" +/obj/machinery/light/rogue/wallfire{ + pixel_y = 32 }, +/turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/tavern) "Bq" = ( /obj/structure/closet/crate/roguecloset, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors/town/dwarfin) "Br" = ( /obj/structure/mineral_door/wood, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors/town) "Bs" = ( @@ -8104,8 +7994,8 @@ /area/rogue/indoors/town/shop) "By" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 + dir = 4; + icon_state = "stairs" }, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" @@ -8113,14 +8003,14 @@ /area/rogue/indoors/town/shop) "Bz" = ( /turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 4 + dir = 4; + icon_state = "endwooddark" }, /area/rogue/outdoors/rtfield) "BA" = ( /turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 8 + dir = 8; + icon_state = "endwooddark" }, /area/rogue/outdoors/rtfield) "BB" = ( @@ -8152,32 +8042,31 @@ /area/rogue/indoors/town/shop) "BI" = ( /turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 1 + dir = 1; + icon_state = "endwooddark" }, /area/rogue/outdoors/rtfield) "BJ" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 + dir = 8; + icon_state = "torchwall1" }, /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/dwarfin) "BK" = ( -/obj/structure/fluff/clock, -/turf/open/floor/rogue/woodturned, +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "horzw" + }, /area/rogue/indoors/town/tavern) "BL" = ( -/obj/structure/fluff/railing/wood{ - icon_state = "woodrailing"; - dir = 4 - }, -/turf/open/floor/rogue/woodturned, +/obj/structure/fluff/clock, +/turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "BM" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 + dir = 1; + icon_state = "stairs" }, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" @@ -8234,8 +8123,8 @@ /area/rogue/outdoors/rtfield) "BY" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 + dir = 4; + icon_state = "chair2" }, /turf/open/floor/rogue/carpet/lord/left, /area/rogue/indoors/town/manor) @@ -8274,8 +8163,8 @@ /area/rogue/outdoors/rtfield) "Ch" = ( /obj/effect/landmark/start/woodsman{ - icon_state = "arrow"; - dir = 4 + dir = 4; + icon_state = "arrow" }, /obj/structure/chair/stool/rogue, /turf/open/floor/rogue/dirt/road, @@ -8307,22 +8196,20 @@ /area/rogue/outdoors/town) "Cn" = ( /obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 + dir = 4; + icon_state = "pipe" }, /turf/open/transparent/openspace, /area/rogue/outdoors/town) "Co" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 + dir = 1; + icon_state = "stairs" }, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/rtfield) "Cp" = ( -/obj/structure/rack/rogue/shelf/big, -/obj/structure/rack/rogue/shelf, -/obj/item/reagent_containers/glass/bottle/rogue/wine, +/obj/structure/closet/crate/drawer/inn, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "Cq" = ( @@ -8330,37 +8217,45 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/rtfield) "Cr" = ( -/obj/effect/landmark/start/cook, -/turf/open/floor/rogue/tile{ - icon_state = "tile" - }, -/area/rogue/indoors/town/tavern) -"Cs" = ( /obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 + dir = 4; + icon_state = "largetable" + }, +/obj/item/reagent_containers/powder/flour, +/obj/item/reagent_containers/powder/flour, +/obj/item/reagent_containers/powder/flour, +/obj/item/reagent_containers/peppermill{ + pixel_x = -8; + pixel_y = -13 }, -/obj/item/cooking/pan, /turf/open/floor/rogue/tile{ - icon_state = "chess" + icon_state = "tavern" }, /area/rogue/indoors/town/tavern) +"Cs" = ( +/obj/structure/rogue/trophy/deer, +/obj/structure/chair/bench/ultimacouch, +/turf/open/floor/rogue/woodturned, +/area/rogue/indoors/town/tavern) "Ct" = ( -/obj/machinery/light/rogue/hearth, -/turf/open/floor/rogue/tile{ - icon_state = "chess" +/obj/structure/chair/bench/ultimacouch/r{ + icon_state = "ultimacochright" }, +/turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "Cu" = ( /obj/structure/fluff/nest, /turf/open/floor/rogue/grass, /area/rogue/outdoors/rtfield) "Cv" = ( -/obj/structure/roguemachine/scomm, +/obj/structure/mineral_door/swing_door, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "Cw" = ( -/obj/effect/landmark/start/barkeep, +/obj/structure/table/wood{ + dir = 1; + icon_state = "longtable_mid" + }, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "Cx" = ( @@ -8378,74 +8273,52 @@ /turf/open/floor/rogue/carpet/lord/center, /area/rogue/indoors/town/manor) "Cz" = ( -/obj/structure/chair/wood/rogue, -/obj/effect/landmark/start/villager, -/turf/open/floor/rogue/woodturned, +/turf/closed/wall/mineral/rogue/wooddark, /area/rogue/indoors/town/tavern) "CA" = ( -/obj/structure/chair/wood/rogue, -/obj/effect/landmark/start/adventurer, -/turf/open/floor/rogue/woodturned, +/obj/machinery/light/rogue/wallfire/candle/l, +/obj/item/dice, +/obj/structure/table/wood{ + dir = 1; + icon_state = "tablewood1" + }, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "CB" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/obj/effect/landmark/start/adventurer{ - dir = 8 +/obj/structure/table/wood{ + dir = 5; + icon_state = "largetable" }, -/turf/open/floor/rogue/woodturned, +/obj/item/dice, +/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "CC" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/obj/effect/landmark/start/adventurer{ - dir = 4 - }, +/obj/structure/table/wood/nice, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "CD" = ( -/obj/effect/landmark/start/villager, +/obj/structure/chair/wood, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "CE" = ( -/obj/structure/chair/wood/rogue, -/obj/effect/landmark/start/mercenary, -/turf/open/floor/rogue/wood, +/turf/open/floor/carpet/purple, /area/rogue/indoors/town/tavern) "CF" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/obj/effect/landmark/start/mercenary{ - icon_state = "arrow"; - dir = 8 +/obj/structure/table/wood{ + dir = 1; + icon_state = "tablewood1" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "CG" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/obj/effect/landmark/start/mercenary{ - icon_state = "arrow"; - dir = 1 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) +/turf/open/floor/rogue/wood, +/area/rogue/outdoors/town/roofs) "CH" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomhunt"; - name = "ROOM VI" +/obj/structure/chair/wood/rogue{ + dir = 8 }, /turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/area/rogue/outdoors/town/roofs) "CI" = ( /obj/structure/fluff/nest, /turf/open/floor/rogue/dirt/road, @@ -8483,8 +8356,8 @@ /area/rogue/outdoors/rtfield) "CN" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /turf/open/floor/rogue/carpet/lord/right, /area/rogue/indoors/town/manor) @@ -8511,8 +8384,8 @@ /area/rogue/outdoors/rtfield) "CS" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/rtfield) @@ -8543,8 +8416,8 @@ }, /obj/structure/table/wood, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/outdoors/rtfield) "CY" = ( @@ -8628,15 +8501,12 @@ /turf/open/floor/rogue/carpet/lord/center, /area/rogue/indoors/town/manor) "Dp" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 - }, -/obj/item/reagent_containers/food/condiment/peppermill, -/obj/item/roguekey/roomhunt, -/turf/open/floor/rogue/tile{ - icon_state = "tile" +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "roomhunt"; + name = "HUNT ROOM" }, +/turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "Dq" = ( /obj/machinery/light/rogue/torchholder/l, @@ -8704,8 +8574,8 @@ /area/rogue/outdoors/rtfield) "DD" = ( /obj/effect/landmark/start/mercenarylate{ - icon_state = "arrow"; - dir = 8 + dir = 8; + icon_state = "arrow" }, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/rtfield) @@ -8832,15 +8702,15 @@ /area/rogue/indoors/town/manor) "DZ" = ( /obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 + dir = 1; + icon_state = "longtable_mid" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "Ea" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /obj/item/candle/yellow, /turf/open/floor/rogue/woodturned, @@ -8853,8 +8723,8 @@ /area/rogue/indoors/town/manor) "Ec" = ( /obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 1 + dir = 1; + icon_state = "chair1" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) @@ -8889,8 +8759,8 @@ /area/rogue/indoors/town/manor) "Eh" = ( /obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 1 + dir = 1; + icon_state = "woodwindowdir" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) @@ -8930,41 +8800,37 @@ }, /area/rogue/outdoors/town/roofs) "Eq" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town/roofs) -"Er" = ( /obj/structure/fluff/walldeco/innsign{ alpha = 200; - layer = 4.1; - level = 2; pixel_y = -15 }, /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; dir = 4 }, /turf/open/floor/rogue/ruinedwood, /area/rogue/outdoors/town/roofs) +"Er" = ( +/obj/structure/mineral_door/wood/window{ + lockid = "tavern" + }, +/turf/open/floor/rogue/woodturned, +/area/rogue/indoors/town/tavern) "Es" = ( /turf/open/floor/rogue/ruinedwood, /area/rogue/outdoors/town/roofs) "Et" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" - }, +/obj/effect/landmark/events/haunts, +/turf/open/floor/rogue/ruinedwood, /area/rogue/outdoors/town/roofs) "Eu" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 +/turf/open/floor/rogue/ruinedwood{ + icon_state = "wooden_floort" }, -/turf/open/transparent/openspace, /area/rogue/outdoors/town/roofs) "Ev" = ( /obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 + dir = 4; + icon_state = "pipe" }, /turf/open/transparent/openspace, /area/rogue/outdoors/town/roofs) @@ -8973,29 +8839,19 @@ /turf/open/transparent/openspace, /area/rogue/outdoors/town/roofs) "Ex" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/town/roofs) +/obj/structure/chair/wood, +/turf/open/floor/carpet/inn, +/area/rogue/indoors/town/tavern) "Ey" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" - }, -/area/rogue/outdoors/town/roofs) +/obj/structure/fluff/clock, +/turf/open/floor/rogue/woodturned, +/area/rogue/indoors/town/tavern) "Ez" = ( -/obj/structure/bars/pipe/left, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) +/obj/structure/table/wood{ + icon_state = "longtable" + }, +/turf/open/floor/rogue/woodturned, +/area/rogue/indoors/town/tavern) "EA" = ( /turf/open/floor/rogue/rooftop, /area/rogue/outdoors/town/roofs) @@ -9004,8 +8860,8 @@ /area/rogue/outdoors/town/roofs) "EC" = ( /obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 + dir = 4; + icon_state = "stonestairs" }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town/roofs) @@ -9024,16 +8880,16 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town/roofs) "EH" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 6 +/obj/structure/table/wood{ + dir = 1; + icon_state = "longtable" }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) +/turf/open/floor/rogue/woodturned, +/area/rogue/indoors/town/tavern) "EI" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/machinery/light/rogue/wallfire/candle/blue, /obj/item/paper/scroll, @@ -9054,8 +8910,8 @@ /area/rogue/indoors/town/magician) "EK" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 + dir = 1; + icon_state = "chair2" }, /turf/open/floor/rogue/tile{ icon_state = "greenstone" @@ -9093,8 +8949,8 @@ /area/rogue/indoors/town/manor) "EQ" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /obj/item/gun/ballistic/revolver/grenadelauncher/bow, /turf/open/floor/rogue/ruinedwood{ @@ -9130,8 +8986,8 @@ /area/rogue/indoors/town/church) "EW" = ( /turf/closed/wall/mineral/rogue/decostone/long{ - icon_state = "decostone-l"; - dir = 1 + dir = 1; + icon_state = "decostone-l" }, /area/rogue/indoors/town/church) "EX" = ( @@ -9204,8 +9060,8 @@ /area/rogue/indoors/town/church/chapel) "Fl" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /obj/effect/decal/cleanable/dirt/cobweb{ icon_state = "cobweb2" @@ -9231,7 +9087,7 @@ }, /area/rogue/indoors/town/church/chapel) "Fq" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -9253,8 +9109,8 @@ /area/rogue/indoors/town/church) "Fu" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" @@ -9262,8 +9118,8 @@ /area/rogue/indoors/town/church) "Fv" = ( /obj/structure/fluff/walldeco/church/line{ - icon_state = "churchslate"; - dir = 4 + dir = 4; + icon_state = "churchslate" }, /turf/open/floor/rogue/church, /area/rogue/indoors/town/church/chapel) @@ -9272,12 +9128,12 @@ /area/rogue/indoors/town/church/chapel) "Fx" = ( /obj/structure/fluff/walldeco/church/line{ - icon_state = "churchslate"; - dir = 8 + dir = 8; + icon_state = "churchslate" }, /obj/effect/landmark/start/churchling{ - icon_state = "arrow"; - dir = 8 + dir = 8; + icon_state = "arrow" }, /turf/open/floor/rogue/church, /area/rogue/indoors/town/church/chapel) @@ -9322,8 +9178,8 @@ /area/rogue/indoors/town/church/chapel) "FF" = ( /obj/structure/fluff/walldeco/church/line{ - icon_state = "churchslate"; - dir = 1 + dir = 1; + icon_state = "churchslate" }, /turf/open/floor/rogue/church, /area/rogue/indoors/town/church/chapel) @@ -9332,22 +9188,22 @@ /area/rogue/indoors/town/church/chapel) "FH" = ( /obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 + dir = 4; + icon_state = "stonestairs" }, /turf/open/floor/rogue/church, /area/rogue/indoors/town/church/chapel) "FI" = ( /obj/structure/fluff/walldeco/church/line{ - icon_state = "churchslate"; - dir = 1 + dir = 1; + icon_state = "churchslate" }, /turf/open/floor/rogue/churchmarble, /area/rogue/indoors/town/church/chapel) "FJ" = ( /obj/structure/fluff/walldeco/church/line{ - icon_state = "churchslate"; - dir = 1 + dir = 1; + icon_state = "churchslate" }, /obj/machinery/light/rogue/torchholder/c, /turf/open/floor/rogue/churchmarble, @@ -9379,8 +9235,8 @@ /area/rogue/indoors/town/church) "FP" = ( /turf/closed/wall/mineral/rogue/decostone/long{ - icon_state = "decostone-l"; - dir = 1 + dir = 1; + icon_state = "decostone-l" }, /area/rogue/indoors/town/church/chapel) "FQ" = ( @@ -9395,8 +9251,8 @@ /area/rogue/indoors/town/church/chapel) "FS" = ( /obj/structure/table/church{ - icon_state = "churchtable"; - dir = 1 + dir = 1; + icon_state = "churchtable" }, /turf/open/floor/rogue/churchmarble, /area/rogue/indoors/town/church/chapel) @@ -9414,7 +9270,7 @@ /area/rogue/indoors/town/garrison) "FV" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/idagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -9441,16 +9297,16 @@ /area/rogue/indoors/town/church/chapel) "Ga" = ( /obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 + dir = 1; + icon_state = "stonestairs" }, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/church/chapel) "Gb" = ( /obj/structure/fluff/walldeco/church/line, /obj/structure/fluff/walldeco/church/line{ - icon_state = "churchslate"; - dir = 8 + dir = 8; + icon_state = "churchslate" }, /turf/open/floor/rogue/churchmarble, /area/rogue/indoors/town/church/chapel) @@ -9461,8 +9317,8 @@ "Gd" = ( /obj/structure/fluff/walldeco/church/line, /obj/structure/fluff/walldeco/church/line{ - icon_state = "churchslate"; - dir = 4 + dir = 4; + icon_state = "churchslate" }, /turf/open/floor/rogue/churchmarble, /area/rogue/indoors/town/church/chapel) @@ -9569,15 +9425,15 @@ /area/rogue/indoors/town/church/chapel) "Gz" = ( /obj/structure/chair/bench/church{ - icon_state = "church_benchleft"; - dir = 1 + dir = 1; + icon_state = "church_benchleft" }, /turf/open/floor/rogue/church, /area/rogue/indoors/town/church/chapel) "GA" = ( /obj/structure/chair/bench/church/mid{ - icon_state = "church_benchmid"; - dir = 1 + dir = 1; + icon_state = "church_benchmid" }, /turf/open/floor/rogue/church, /area/rogue/indoors/town/church/chapel) @@ -9597,8 +9453,8 @@ /area/rogue/indoors/town) "GE" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /obj/item/candle/yellow/lit, /turf/open/floor/rogue/wood, @@ -9623,8 +9479,8 @@ /area/rogue/indoors/town/garrison) "GJ" = ( /obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 + dir = 4; + icon_state = "stonestairs" }, /turf/open/floor/rogue/churchmarble, /area/rogue/indoors/town/church/chapel) @@ -9634,15 +9490,15 @@ /area/rogue/indoors/town/church/chapel) "GL" = ( /obj/structure/chair/bench/church{ - icon_state = "church_benchleft"; - dir = 1 + dir = 1; + icon_state = "church_benchleft" }, /turf/open/floor/rogue/churchmarble, /area/rogue/indoors/town/church/chapel) "GM" = ( /obj/structure/chair/bench/church/mid{ - icon_state = "church_benchmid"; - dir = 1 + dir = 1; + icon_state = "church_benchmid" }, /turf/open/floor/rogue/churchmarble, /area/rogue/indoors/town/church/chapel) @@ -9699,8 +9555,8 @@ /area/rogue/indoors/town/garrison) "GX" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 + dir = 9; + icon_state = "largetable" }, /obj/structure/fluff/walldeco/wantedposter{ pixel_y = 32 @@ -9710,17 +9566,17 @@ /area/rogue/indoors/town/garrison) "GY" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 + dir = 5; + icon_state = "largetable" }, /obj/machinery/light/rogue/wallfire/candle, -/obj/item/rogueweapon/huntingknife/stoneknife, +/obj/item/rogueweapon/knife/stone, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) "GZ" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) @@ -9737,8 +9593,8 @@ /area/rogue/indoors/town/garrison) "Hc" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 + dir = 10; + icon_state = "border" }, /turf/open/floor/rogue/tile{ icon_state = "greenstone" @@ -9770,8 +9626,8 @@ /area/rogue/indoors/town) "Hi" = ( /obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 8 + dir = 8; + icon_state = "wooddir" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) @@ -9781,8 +9637,8 @@ /area/rogue/indoors/town/garrison) "Hk" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 + dir = 8; + icon_state = "largetable" }, /obj/item/paper/scroll, /obj/item/natural/feather, @@ -9790,15 +9646,15 @@ /area/rogue/indoors/town/garrison) "Hl" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 4 + dir = 4; + icon_state = "largetable" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) "Hm" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 + dir = 8; + icon_state = "border" }, /turf/open/floor/rogue/tile{ icon_state = "greenstone" @@ -9858,8 +9714,8 @@ /area/rogue/indoors/town) "Hz" = ( /obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 4 + dir = 4; + icon_state = "woodwindowdir" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) @@ -9869,8 +9725,8 @@ /area/rogue/indoors/town/garrison) "HB" = ( /obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 + dir = 6; + icon_state = "largetable" }, /obj/item/storage/belt/rogue/pouch, /turf/open/floor/rogue/woodturned, @@ -9889,8 +9745,8 @@ /area/rogue/indoors/town/garrison) "HE" = ( /obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 + dir = 8; + icon_state = "woodwindowdir" }, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" @@ -9898,8 +9754,8 @@ /area/rogue/indoors/town/garrison) "HF" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 + dir = 4; + icon_state = "chair2" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/church/chapel) @@ -9909,23 +9765,23 @@ /area/rogue/indoors/town/church/chapel) "HH" = ( /obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 + dir = 1; + icon_state = "longtable_mid" }, /turf/open/floor/rogue/churchrough, /area/rogue/indoors/town/church/chapel) "HI" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /obj/item/candle/yellow, /turf/open/floor/rogue/churchrough, /area/rogue/indoors/town/church/chapel) "HJ" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 + dir = 4; + icon_state = "chair2" }, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/church/chapel) @@ -9965,22 +9821,22 @@ /area/rogue/indoors/town/garrison) "HQ" = ( /obj/effect/landmark/start/guardsman{ - icon_state = "arrow"; - dir = 1 + dir = 1; + icon_state = "arrow" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) "HR" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 + dir = 8; + icon_state = "stairs" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) "HS" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 + dir = 1; + icon_state = "border" }, /turf/open/floor/rogue/tile{ icon_state = "greenstone" @@ -9988,8 +9844,8 @@ /area/rogue/indoors/town/garrison) "HT" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 + dir = 9; + icon_state = "border" }, /turf/open/floor/rogue/tile{ icon_state = "greenstone" @@ -10029,22 +9885,22 @@ /area/rogue/indoors/town) "Ia" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 + dir = 8; + icon_state = "stairs" }, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) "Ib" = ( /obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 9 + dir = 9; + icon_state = "pipe" }, /turf/open/floor/rogue/tile/tilerg, /area/rogue/indoors/town) "Ic" = ( /obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 + dir = 1; + icon_state = "pipe" }, /turf/open/floor/rogue/tile/tilerg, /area/rogue/indoors/town) @@ -10073,8 +9929,8 @@ /area/rogue/indoors/town/church) "Ih" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/church) @@ -10090,8 +9946,8 @@ /area/rogue/indoors/town/church) "Ik" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 + dir = 4; + icon_state = "torchwall1" }, /turf/open/transparent/openspace, /area/rogue/indoors/town/church) @@ -10177,8 +10033,8 @@ /area/rogue/indoors/town/church) "IA" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /obj/machinery/light/rogue/torchholder/r, /turf/open/floor/rogue/hexstone, @@ -10192,14 +10048,14 @@ /area/rogue/indoors/town/church) "ID" = ( /turf/closed/wall/mineral/rogue/decostone/end{ - icon_state = "decostone-e"; - dir = 4 + dir = 4; + icon_state = "decostone-e" }, /area/rogue/indoors/town/church) "IE" = ( /turf/closed/wall/mineral/rogue/decostone/end{ - icon_state = "decostone-e"; - dir = 8 + dir = 8; + icon_state = "decostone-e" }, /area/rogue/indoors/town/church) "IF" = ( @@ -10212,8 +10068,8 @@ /area/rogue/indoors/town/church) "IG" = ( /obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 4 + dir = 4; + icon_state = "woodwindowdir" }, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) @@ -10233,8 +10089,8 @@ /area/rogue/indoors/town/garrison) "IL" = ( /obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 1 + dir = 1; + icon_state = "wooddir" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/garrison) @@ -10254,15 +10110,15 @@ /area/rogue/indoors/town/church) "IP" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/church) "IQ" = ( /turf/closed/wall/mineral/rogue/decostone/end{ - icon_state = "decostone-e"; - dir = 1 + dir = 1; + icon_state = "decostone-e" }, /area/rogue/indoors/town/church) "IR" = ( @@ -10280,15 +10136,15 @@ /area/rogue/indoors/town/church) "IU" = ( /obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 4 + dir = 4; + icon_state = "chair1" }, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town) "IV" = ( /obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 + dir = 1; + icon_state = "tablewood1" }, /obj/item/natural/feather, /obj/item/candle/yellow, @@ -10296,8 +10152,8 @@ /area/rogue/indoors/town) "IW" = ( /obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 1 + dir = 1; + icon_state = "woodwindowdir" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) @@ -10316,15 +10172,15 @@ /area/rogue/indoors/town/garrison) "IZ" = ( /obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 + dir = 1; + icon_state = "longtable_mid" }, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/garrison) "Ja" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /obj/item/clothing/mask/cigarette/pipe, /turf/open/floor/carpet/royalblack, @@ -10337,8 +10193,8 @@ /area/rogue/indoors/town/church) "Jc" = ( /obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 + dir = 1; + icon_state = "stonestairs" }, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/church) @@ -10359,8 +10215,8 @@ /area/rogue/indoors/town/church) "Jf" = ( /obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 + dir = 1; + icon_state = "longtable_mid" }, /obj/structure/fluff/millstone{ pixel_y = 7 @@ -10369,8 +10225,8 @@ /area/rogue/indoors/town/church) "Jg" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /obj/item/cooking/pan, /turf/open/floor/rogue/hexstone, @@ -10417,15 +10273,15 @@ /area/rogue/indoors/town/garrison) "Jn" = ( /obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 1 + dir = 1; + icon_state = "chair1" }, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/garrison) "Jo" = ( /obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 + dir = 8; + icon_state = "woodwindowdir" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/garrison) @@ -10451,7 +10307,7 @@ }, /area/rogue/indoors/town/church) "Js" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/shop) "Jt" = ( @@ -10474,13 +10330,13 @@ /area/rogue/indoors/town/shop) "Jy" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 + dir = 8; + icon_state = "stairs" }, /turf/open/floor/rogue/metal, /area/rogue/indoors/town/shop) "Jz" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -10493,8 +10349,8 @@ /area/rogue/outdoors/exposed/dwarf) "JC" = ( /obj/structure/fluff/railing/wood{ - icon_state = "woodrailing"; - dir = 4 + dir = 4; + icon_state = "woodrailing" }, /turf/open/transparent/openspace, /area/rogue/outdoors/exposed/dwarf) @@ -10514,14 +10370,14 @@ /area/rogue/indoors/town/dwarfin) "JG" = ( /turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_corner"; - dir = 1 + dir = 1; + icon_state = "iron_corner" }, /area/rogue/indoors/town/dwarfin) "JH" = ( /turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_line"; - dir = 4 + dir = 4; + icon_state = "iron_line" }, /area/rogue/indoors/town/dwarfin) "JI" = ( @@ -10532,8 +10388,8 @@ /area/rogue/indoors/town/dwarfin) "JJ" = ( /turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_corner"; - dir = 8 + dir = 8; + icon_state = "iron_corner" }, /area/rogue/indoors/town/dwarfin) "JK" = ( @@ -10586,8 +10442,8 @@ /area/rogue/indoors/town/dwarfin) "JS" = ( /obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 8 + dir = 8; + icon_state = "wooddir" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/dwarfin) @@ -10631,8 +10487,8 @@ /area/rogue/indoors/town/shop) "Ka" = ( /obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 + dir = 8; + icon_state = "woodwindowdir" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/shop) @@ -10645,8 +10501,8 @@ /area/rogue/indoors/town/dwarfin) "Kc" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 + dir = 4; + icon_state = "torchwall1" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/dwarfin) @@ -10664,8 +10520,8 @@ "Kf" = ( /obj/structure/bed/rogue, /obj/effect/landmark/start/weaponsmith{ - icon_state = "arrow"; - dir = 8 + dir = 8; + icon_state = "arrow" }, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" @@ -10673,8 +10529,8 @@ /area/rogue/indoors/town/dwarfin) "Kg" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 + dir = 6; + icon_state = "border" }, /turf/closed/wall/mineral/rogue/wooddark/vertical, /area/rogue/indoors/town/dwarfin) @@ -10696,8 +10552,8 @@ /area/rogue/indoors/town/dwarfin) "Kk" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/item/natural/feather, /obj/item/candle/skull/lit, @@ -10705,8 +10561,8 @@ /area/rogue/indoors/town/shop) "Kl" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 + dir = 4; + icon_state = "chair2" }, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" @@ -10724,8 +10580,8 @@ /area/rogue/indoors/town/dwarfin) "Kn" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 + dir = 4; + icon_state = "border" }, /turf/closed/wall/mineral/rogue/wooddark/vertical, /area/rogue/indoors/town/dwarfin) @@ -10737,8 +10593,8 @@ icon_state = "tablewood1" }, /obj/effect/landmark/start/sapprentice{ - icon_state = "arrow"; - dir = 4 + dir = 4; + icon_state = "arrow" }, /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/dwarfin) @@ -10799,15 +10655,15 @@ "KB" = ( /obj/structure/fluff/railing/wood, /obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 + dir = 4; + icon_state = "pipe" }, /turf/open/transparent/openspace, /area/rogue/outdoors/town/roofs) "KC" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/dwarfin) @@ -10855,8 +10711,8 @@ /area/rogue/indoors/town/shop) "KN" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/item/paper/scroll, /obj/item/natural/feather, @@ -10865,8 +10721,8 @@ /area/rogue/outdoors/mountains) "KO" = ( /obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 8 + dir = 8; + icon_state = "chair1" }, /turf/open/floor/rogue/ruinedwood, /area/rogue/outdoors/mountains) @@ -10886,8 +10742,8 @@ /area/rogue/outdoors/mountains) "KS" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 + dir = 8; + icon_state = "torchwall1" }, /turf/open/floor/rogue/ruinedwood, /area/rogue/outdoors/mountains) @@ -10896,7 +10752,7 @@ /area/rogue/outdoors/mountains) "KU" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, /turf/open/floor/rogue/ruinedwood, /area/rogue/outdoors/mountains) "KV" = ( @@ -10912,14 +10768,14 @@ "KX" = ( /obj/structure/closet/crate/roguecloset/inn/chest, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors/town) "KY" = ( /obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 4 + dir = 4; + icon_state = "woodwindowdir" }, /turf/open/floor/rogue/ruinedwood, /area/rogue/outdoors/mountains) @@ -10942,27 +10798,27 @@ /area/rogue/indoors/town/dwarfin) "Lc" = ( /turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_corner"; - dir = 4 + dir = 4; + icon_state = "iron_corner" }, /area/rogue/indoors/town/dwarfin) "Ld" = ( /obj/structure/bed/rogue/hay, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/rogue/indoors/town) "Le" = ( /turf/closed/wall/mineral/rogue/wooddark/end{ - icon_state = "endwooddark"; - dir = 1 + dir = 1; + icon_state = "endwooddark" }, /area/rogue/outdoors/mountains) "Lf" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 + dir = 1; + icon_state = "stairs" }, /turf/open/floor/rogue/ruinedwood, /area/rogue/outdoors/mountains) @@ -10971,15 +10827,15 @@ /turf/open/floor/rogue/ruinedwood, /area/rogue/outdoors/mountains) "Lh" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, /area/rogue/indoors/town/shop) "Li" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 + dir = 4; + icon_state = "stairs" }, /turf/open/transparent/openspace, /area/rogue/indoors/town/shop) @@ -11025,15 +10881,15 @@ /area/rogue/indoors/town/dwarfin) "Lr" = ( /obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 1 + dir = 1; + icon_state = "woodwindowdir" }, /turf/open/floor/rogue/ruinedwood, /area/rogue/outdoors/mountains) "Ls" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 + dir = 4; + icon_state = "border" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/dwarfin) @@ -11046,22 +10902,22 @@ /area/rogue/indoors/town/dwarfin) "Lu" = ( /obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 + dir = 8; + icon_state = "torchwall1" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/dwarfin) "Lv" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 + dir = 5; + icon_state = "border" }, /turf/closed/wall/mineral/rogue/wooddark/horizontal, /area/rogue/indoors/town/dwarfin) "Lw" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 + dir = 1; + icon_state = "border" }, /turf/closed/wall/mineral/rogue/wooddark/horizontal, /area/rogue/indoors/town/dwarfin) @@ -11089,15 +10945,15 @@ /area/rogue/indoors/town/dwarfin) "LB" = ( /obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 + dir = 1; + icon_state = "tablewood1" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town) "LC" = ( /obj/item/reagent_containers/food/snacks/crow{ - icon_state = "crow"; - dir = 1 + dir = 1; + icon_state = "crow" }, /turf/open/floor/rogue/rooftop, /area/rogue/outdoors/mountains) @@ -11108,15 +10964,15 @@ /area/rogue/indoors/town/dwarfin) "LE" = ( /obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 4 + dir = 4; + icon_state = "wooddir" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/dwarfin) "LF" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 + dir = 1; + icon_state = "chair2" }, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" @@ -11124,15 +10980,15 @@ /area/rogue/indoors/town/dwarfin) "LG" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 + dir = 1; + icon_state = "chair2" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town) "LH" = ( /obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 1 + dir = 1; + icon_state = "woodwindowdir" }, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" @@ -11140,8 +10996,8 @@ /area/rogue/indoors/town/dwarfin) "LI" = ( /obj/structure/fluff/railing/wood{ - icon_state = "woodrailing"; dir = 8; + icon_state = "woodrailing"; pixel_y = -1 }, /turf/open/transparent/openspace, @@ -11187,7 +11043,7 @@ /turf/closed/mineral/rogue/bedrock, /area/rogue/outdoors/mountains) "LS" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/magician) "LT" = ( @@ -11221,8 +11077,8 @@ "LZ" = ( /obj/machinery/light/rogue/wallfire/candle/blue/r, /obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 + dir = 1; + icon_state = "tablewood1" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/magician) @@ -11258,8 +11114,8 @@ /area/rogue/indoors/town/magician) "Mg" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 + dir = 4; + icon_state = "stairs" }, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/magician) @@ -11268,8 +11124,8 @@ /area/rogue/indoors/town/magician) "Mi" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/item/flint, /obj/machinery/light/rogue/wallfire/candle/blue/l, @@ -11314,8 +11170,8 @@ /area/rogue/indoors/town/magician) "Mp" = ( /obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 4 + dir = 4; + icon_state = "woodwindowdir" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/magician) @@ -11357,8 +11213,8 @@ /area/rogue/indoors/town/magician) "Mu" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/magician) @@ -11403,8 +11259,8 @@ /area/rogue/indoors/town/magician) "MB" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/item/natural/feather, /obj/item/scrying, @@ -11412,14 +11268,14 @@ /area/rogue/indoors/town/magician) "MC" = ( /obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 1 + dir = 1; + icon_state = "woodwindowdir" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/magician) "MD" = ( /obj/structure/fluff/psycross, -/obj/item/rogueweapon/woodstaff/aries, +/obj/item/rogueweapon/polearm/woodstaff/aries, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/church) "ME" = ( @@ -11456,8 +11312,8 @@ /area/rogue/indoors/town/church) "MK" = ( /obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 4 + dir = 4; + icon_state = "chair1" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/church) @@ -11468,8 +11324,8 @@ /area/rogue/indoors/town/church) "MM" = ( /obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 + dir = 8; + icon_state = "chair2" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/church) @@ -11479,8 +11335,8 @@ /area/rogue/indoors/town/church) "MO" = ( /obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 + dir = 4; + icon_state = "stonestairs" }, /turf/open/floor/rogue/church, /area/rogue/indoors/town/church) @@ -11524,8 +11380,8 @@ /area/rogue/indoors/town/church) "MW" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 + dir = 4; + icon_state = "border" }, /turf/open/transparent/openspace, /area/rogue/indoors/town/church) @@ -11540,8 +11396,8 @@ /area/rogue/indoors/town/church) "MZ" = ( /obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 + dir = 1; + icon_state = "border" }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/church) @@ -11580,14 +11436,14 @@ /turf/open/floor/rogue/churchrough, /area/rogue/indoors/town/church) "Ni" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/churchrough, /area/rogue/indoors/town/church) "Nj" = ( /obj/structure/fluff/psycross, /turf/open/floor/rogue/rooftop{ - icon_state = "roofg"; - dir = 2 + dir = 2; + icon_state = "roofg" }, /area/rogue) "Nk" = ( @@ -11601,12 +11457,12 @@ /area/rogue/indoors/town/shop) "Nm" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 + dir = 8; + icon_state = "stairs" }, /turf/open/floor/rogue/rooftop{ - icon_state = "roofg"; - dir = 2 + dir = 2; + icon_state = "roofg" }, /area/rogue/indoors/town/shop) "Nn" = ( @@ -11654,8 +11510,8 @@ /area/rogue/indoors/town) "Nu" = ( /obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 + dir = 8; + icon_state = "woodwindowdir" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town) @@ -11665,8 +11521,8 @@ /area/rogue/outdoors/town/roofs) "Nw" = ( /turf/open/floor/rogue/rooftop{ - icon_state = "roofg"; - dir = 2 + dir = 2; + icon_state = "roofg" }, /area/rogue/outdoors/town/roofs) "Nx" = ( @@ -11685,8 +11541,8 @@ /area/rogue/indoors/town) "Nz" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" @@ -11705,8 +11561,8 @@ /area/rogue/outdoors/town/roofs) "NC" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 + dir = 4; + icon_state = "stairs" }, /turf/open/floor/rogue/rooftop{ dir = 8 @@ -11714,8 +11570,8 @@ /area/rogue/outdoors/town/roofs) "ND" = ( /obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 + dir = 4; + icon_state = "stairs" }, /turf/open/floor/rogue/rooftop{ dir = 8 @@ -11741,8 +11597,8 @@ /area/rogue/indoors/town/church/chapel) "NH" = ( /obj/effect/landmark/start/churchling{ - icon_state = "arrow"; - dir = 8 + dir = 8; + icon_state = "arrow" }, /turf/open/floor/rogue/church, /area/rogue/indoors/town/church/chapel) @@ -11754,30 +11610,303 @@ /obj/effect/landmark/start/cleric, /turf/open/floor/rogue/churchmarble, /area/rogue/indoors/town/church/chapel) +"NP" = ( +/obj/structure/bed/rogue/wool, +/obj/item/bedsheet/rogue/pelt, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) +"NS" = ( +/obj/structure/closet/crate/drawer/inn, +/obj/item/storage/belt/rogue/pouch/coins/poor, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) +"Oc" = ( +/obj/structure/chair/wood/rogue{ + dir = 8 + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "horzw" + }, +/area/rogue/indoors/town/tavern) +"Oz" = ( +/obj/structure/fluff/railing/wood, +/obj/structure/fluff/railing/border{ + dir = 8 + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "horzw" + }, +/area/rogue/indoors/town/tavern) +"OD" = ( +/obj/structure/fluff/railing/wood, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "horzw" + }, +/area/rogue/indoors/town/tavern) "ON" = ( -/obj/structure/roguemachine/vendor/inn, +/obj/structure/stairs{ + dir = 1 + }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" + icon_state = "horzw" + }, +/area/rogue/indoors/town/tavern) +"Pj" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/candle/yellow, +/obj/item/candle/yellow, +/obj/item/candle/yellow, +/turf/open/floor/rogue/ruinedwood{ + dir = 1; + icon_state = "vertw" + }, +/area/rogue/indoors/town/tavern) +"Pk" = ( +/obj/structure/chair/wood/rogue{ + dir = 4 + }, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) +"Pq" = ( +/obj/item/reagent_containers/food/snacks/crow, +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/town/roofs) +"Pr" = ( +/obj/structure/table/wood{ + dir = 1; + icon_state = "longtable" + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "horzw" }, /area/rogue/indoors/town/tavern) +"PC" = ( +/obj/structure/bed/rogue/wool, +/obj/item/bedsheet/rogue/cloth, +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) +"PU" = ( +/obj/structure/bed/rogue/inn/double, +/obj/item/bedsheet/rogue/double_pelt, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) "QM" = ( /obj/structure/flora/roguetree, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) +"QR" = ( +/obj/structure/chair/wood/rogue, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) +"QV" = ( +/obj/machinery/light/rogue/chand, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/tavern) "Rr" = ( /obj/structure/flora/roguetree, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) +"RB" = ( +/obj/structure/closet/crate/roguecloset, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) +"RG" = ( +/obj/structure/bed/rogue/wool, +/obj/item/bedsheet/rogue/cloth, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) +"Sj" = ( +/obj/structure/mineral_door/wood{ + lockid = "tavern"; + name = "MEETING ROOM" + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "horzw" + }, +/area/rogue/indoors/town/tavern) +"Sp" = ( +/obj/structure/closet/crate/roguecloset/dark, +/turf/open/floor/rogue/ruinedwood{ + dir = 1; + icon_state = "vertw" + }, +/area/rogue/indoors/town/tavern) +"Ss" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "roomv"; + name = "ROOM V" + }, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) "St" = ( /obj/structure/flora/roguetree/burnt, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) +"SD" = ( +/obj/item/reagent_containers/food/snacks/crow{ + dir = 1 + }, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"SG" = ( +/obj/structure/table/wood/nice, +/obj/item/candle/yellow, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) +"Tz" = ( +/obj/item/reagent_containers/food/snacks/crow{ + dir = 1 + }, +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/town/roofs) +"Ub" = ( +/obj/structure/roguewindow/openclose{ + dir = 8 + }, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) +"Um" = ( +/obj/structure/fluff/railing/border{ + dir = 5 + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/town/roofs) +"UO" = ( +/obj/structure/mineral_door/wood/window{ + lockid = "tavern" + }, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) +"UY" = ( +/obj/structure/fluff/railing/border{ + dir = 1 + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/town/roofs) +"VQ" = ( +/obj/structure/closet/crate/roguecloset/inn/south, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) +"Wl" = ( +/obj/structure/table/wood, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) +"Wp" = ( +/obj/structure/table/wood{ + icon_state = "tablewood1" + }, +/turf/open/floor/rogue/woodturned, +/area/rogue/indoors/town/tavern) +"WG" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "roomiii"; + name = "ROOM III" + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" + }, +/area/rogue/indoors/town/tavern) +"WS" = ( +/obj/structure/table/wood{ + icon_state = "longtable" + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "horzw" + }, +/area/rogue/indoors/town/tavern) +"XJ" = ( +/obj/structure/table/wood{ + icon_state = "tablewood1" + }, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) +"Yh" = ( +/obj/machinery/light/rogue/wallfire{ + pixel_y = 32 + }, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) +"Yy" = ( +/turf/open/floor/rogue/ruinedwood{ + dir = 1; + icon_state = "vertw" + }, +/area/rogue/indoors/town/tavern) +"YB" = ( +/obj/item/reagent_containers/food/snacks/crow{ + dir = 1 + }, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"YC" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "roomii"; + name = "ROOM II" + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" + }, +/area/rogue/indoors/town/tavern) "YE" = ( /obj/structure/flora/newtree, /obj/structure/flora/newtree, /obj/structure/flora/newtree, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) +"YM" = ( +/obj/structure/closet/crate/roguecloset/inn/south, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) +"YO" = ( +/obj/structure/closet/crate/drawer/inn, +/obj/effect/decal/cleanable/dirt/cobweb{ + icon_state = "cobweb2" + }, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) +"YR" = ( +/obj/structure/chair/wood/rogue/fancy, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) +"Zy" = ( +/obj/structure/bed/rogue/inn/double, +/obj/item/bedsheet/rogue/double_pelt, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/tavern) +"ZC" = ( +/obj/structure/roguewindow/openclose{ + dir = 1 + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "horzw" + }, +/area/rogue/indoors/town/tavern) +"ZK" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "roomi"; + name = "ROOM I" + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" + }, +/area/rogue/indoors/town/tavern) +"ZZ" = ( +/obj/structure/table/wood{ + icon_state = "tablewood1" + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/tavern) (1,1,1) = {" ac @@ -43856,186 +43985,186 @@ eJ mW hu fo +hu +hu +aa +hu +hu +fo +fo +fo +fo +gV +fo +fo +fo +fo +fo +fo +hu +hu +fo +hu +hu +fo +fo +hu +fo +fo +hu +wu +wJ +wJ +xv +xv +xv +wu +xw +xw +xw +xw +xw +wu +BB +BB +BB +BB +BB +Ce +hu +eJ +eJ +eG +ja +eG +eG +eG +eI +eI +eI +eI +eI +eI +eI +ju +eI +eI +eI +eG +eI +eI +eI +eI +eI +ju +eI +eI +eG +iG +iG +iG +eG +eG +eH +eI +eI +eI +eG +eG +eG +eI +eG +eF +eF +eF +eF +eF +eF +eF +eF +eF +eF +eF +eF +eF +eF +eF +eF +eF +eF +eF +"} +(51,1,2) = {" +eF +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +mW +hu +fo fo -fo -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +lc +lc +lc +lc +lc +lc +lc +lc +lc +lc +lc +lc +lc +lc +lc +ia lc lc lc mE mE hu -fo -fo -hu -wu -wJ -wJ -xv -xv -xv -wu -xw -xw -xw -xw -xw -wu -BB -BB -BB -BB -BB -Ce -hu -eJ -eJ -eG -ja -eG -eG -eG -eI -eI -eI -eI -eI -eI -eI -ju -eI -eI -eI -eG -eI -eI -eI -eI -eI -ju -eI -eI -eG -iG -iG -iG -eG -eG -eH -eI -eI -eI -eG -eG -eG -eI -eG -eF -eF -eF -eF -eF -eF -eF -eF -eF -eF -eF -eF -eF -eF -eF -eF -eF -eF -eF -"} -(51,1,2) = {" -eF -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -mW -hu -fo -fo -fo -aa -fA -fY -fY -fI -fI -aa -hh -fY -fY -hh -aa -aa -aa -aa -aa -lc -lf -mu -mH -lc hu fo fo @@ -44171,29 +44300,29 @@ mW hu fo fo -fo -aa -fI -fI -fY -gE -gE -aa -hr -gE -gE -fY -aa -aa -aa -aa -aa +lc +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj lc lf -mv -mv +lf +lc +ji +ib +kW lc hu +hu fo fo hu @@ -44328,28 +44457,28 @@ mW hu fo fo -fo -aa -fJ -fZ -fY -gE -gE -aa -hv -gE -gE -fY -aa -fX -kS -kW -kW lc +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj +lc +lf +lf +lf +hB lz -mv -mv +lf lc +lB vT fo fo @@ -44485,28 +44614,28 @@ mW hu fo fo -fo -aa -fK -fZ -fY -gE -gE -aa -hh -fY -fY -hh -aa -fX -gT -fW -fW lc -lB -mv +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj +lc +lf mv lc +kS +lf +ld +lc +vT hu fo fo @@ -44642,28 +44771,28 @@ mW hu fo fo -nV -aa -fI -fI -fY -gE -gE -aa -hw -hE -hE -hh -aa -fM -gT -fW -fW lc -lF +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj +lc +hw mv -mI lc +lc +lc +lc +lc +lF hu fo fo @@ -44799,28 +44928,28 @@ mW hu fo fo -fo -aa -fA -fY -fY -fI -fI -aa -hw -hE -hE -iL -aa -fX -gT -gT -gT lc +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj +lc +hB +hB +lc +dv lG -mv -mv +mw lc +hu vV fo fo @@ -44956,28 +45085,28 @@ mW hu fo fo -fo -aa -aa -aa -aa -fX -aa -aa -aa -aa -ia -aa -aa -ji -fX -fX -lc lc +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj lc +hB +lr +mv +mv +kT lr lc -lc +vV hu fo fo @@ -45112,30 +45241,30 @@ eJ mW hu fo -fo -fo -aa -fL -ga -fX -fX -fX -fX -hB -hF -gT -gT -gT -gT -gT -fX +hu +lc +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj +lc +mv +lf lc lo -lp +lf mw -lq lc hu +hu fo fo hu @@ -45269,29 +45398,29 @@ eJ mW hu fo -fo -fo -aa -fM -gb -gs -gT -gT -gT -gT -fX -gT -gT -gT -gT -gT -fX -ld -lp -lQ -mw -mJ +hu +lc +mE lc +lc +lc +mE +mE +lc +mE +aj +aj +aj +aj +lc +lf +lf +lc +lc +lc +lc +lc +hu hu fo fo @@ -45427,28 +45556,28 @@ mW hu fo fo -fo -aa -fN -gc -gt -gU -gT -gT +lc +fI +lf +lf +mv +mv gT -fX -fX -fX -fX -fX -fX -fP +hD +mE +aj +aj +aj +aj +lc +hE +ib lc -lq lq mx -mN +mx lc +lF hu fo fo @@ -45584,28 +45713,28 @@ mW hu fo fo -fo -aa +lc +fJ fO -gd -gu -gV +dd +mv +lf hf -gT -gT -hG -hD -fY -fY -fY -hD -aa -lc -lr -lc +hf +mE +aj +aj +aj +aj lc +hF +mv +iL +mv +kV +hD lc -ne +hu hu fo fo @@ -45741,28 +45870,28 @@ mW hu fo fo -fo -aa -fP +lc +fK +mv ge -gD -fX -fX -fX -fX -fP -gT -fY -gE -fY -kT -aa -le +mv +mv lf lf lc -vs -vJ +aj +aj +aj +aj +lc +lc +lc +lc +lc +lc +lc +ne +hu fo fo fo @@ -45898,28 +46027,28 @@ mW hu fo fo -fo -bP -fW -fW -fW -fW -fW -fW -fW +lc +lc fW -gT -fY -fY -fY -kV -aa +ga lf -lt -lt +gd +lf +dv +mE +aj +aj +aj +aj +aj lc lc -ne +lc +lc +lc +le +lg +fo hu fo fo @@ -46055,28 +46184,28 @@ mW hu fo fo -fo -aa -fP -fX -fX -fX -fX +mE +fL +mv fX -hD -fW -hD -ib -ib -ib -hD -aa lf -lt -lt -lt -mO +gi +mv +gs +mE +aj +aj +aj +aj +aj +lc +lc +lc lc +lc +lc +ne +hu hu fo fo @@ -46212,28 +46341,28 @@ mW hu fo fo -fo -aa -fX -gi -fY -fY -fY -fX -fY -fW -ib -gE -gE -gE -ib -aa -lg -lt -lt -lu -mP lc +mv +mv +lf +mv +mv +mv +gt +lc +aj +aj +aj +aj +aj +lc +lc +lc +lc +lc +lc +lc +hu hu fo fo @@ -46369,28 +46498,28 @@ mW hu fo fo -fo -aa -aa -gj -gE -gE -fY -fX -hD -fW -hD -gE -gE -gE -ib -aa -lf -lt -lu -lt -lf +mE +lc +fM +lc +mE +mE +lc +lc +mE +aj +aj +aj +aj +aj lc +lc +lc +lc +lc +lc +lc +lF hu fo fo @@ -46525,30 +46654,30 @@ eJ mW hu fo -fo -fo -fo -aa -gk -gE -gE -fY -fX -fY -fW -ib +bP +lc +mE gE gE gE -ib -aa -lf -lt -lt -lu -lf +gj +lc +aj +aj +aj +aj +aj +aj +aj +lc +lc +lc +lc +lc +lc lc hu +hu fo fo hu @@ -46682,29 +46811,29 @@ eJ mW hu hu +hu fo -fo -fo -aa -gl -fY -fY -fY -fX -hD -fW -hD -gE -gE -gE -ib -aa -lf -lu -lt -lu -mS lc +fN +bn +bn +bn +mE +mE +lc +mE +mE +aj +aj +aj +lc +lc +lc +lc +lc +lc +lc +hu hu fo fo @@ -46840,28 +46969,28 @@ eJ eJ hu hu -fo -fo -aa -fP -fX -gT -hg -fX -fY -fW -ib -gE -gE -gE -ib -aa +hu +lc +fZ +bn +bn +bn lc +hD +hD +hD lc -lr +aj +aj +aj lc lc lc +lc +lc +lc +lc +hu hu fo fo @@ -46996,29 +47125,29 @@ eJ eJ eJ eJ -hu fo fo -aa -aa -aa -gW -aa -fP -hD +mE +mE fW +mv +lf +mE +hD hD -ib -ib -ib hD -aa lc -lf -lf -lf -lf +aj +aj +aj +lc +lc +lc lc +lc +lc +lc +hu hu fo fo @@ -47153,29 +47282,29 @@ eU eJ eJ eJ -hu -fo fo fo -aa -aa -he -aa -aa -aa -hH -aa -aa -aa +mE +mE +gb +gb he -aa -aa +mE +cR +mE +cR +mE +aj +aj +aj +lc +lc lc -lt -lt -lt -lf lc +lc +lc +lc +hu hu fo fo @@ -47310,29 +47439,29 @@ eU eT eJ eJ -nA -fo -fo -fo -nl fo fo -qr -eL -sy -hu -sy -eL -tP -fo fo -eL lc -lt -mt -my -lt +mE +lc +lc +mE +gu +hD +hh +lc +lc lc +lc +lc +lc +lc +lc +lc +lc +lc +lF hu fo fo @@ -47467,30 +47596,30 @@ fv kv eJ eJ -hu -hu fo fo -hu fo +hu +gc fo -qr -eL -sy +gl +lc +gD +gW sS -sy -eL +mE +hv tP fo -fo -eL +mE +lc +lc +lc +lc lc -lt -lt -lt -lt lc hu +hu fo fo hu @@ -47624,29 +47753,29 @@ eU eT nj eJ -eJ hu fo fo hu fo fo -qr -eL -sy -hu -sy -eL -tP +gl +lc +gU +mv +hr +mE +hv fo fo -uw +mE lc lc lc lc lc lc +lQ hu fo fo @@ -47781,29 +47910,29 @@ fv mX nk ns -nk -hu -fo -fo -fo -fo -fo +fA fo hu hu hu -hu -hu -fo -fo -fo -fo -fo -fo -fo fo +gl +lc +mE +hg +lc +lc +hv fo fo +hG +lc +lc +lc +lc +lc +lc +hu fo fo fo @@ -47938,28 +48067,28 @@ fv fv nk nx -nk hu -og -fo -fo -fo -fo -fo -fo -fo -fo -fo -fo -fo fo fo fo fo fo fo +hu +hu +hu +hu +hu fo fo +nY +hH +hu +hu +hu +hu +hu +hu fo fo fo @@ -51553,7 +51682,7 @@ fo mL ow om -pE +IL om om om @@ -60995,11 +61124,145 @@ DI DI DI DI -DH -DH -DH -DH -DH +DH +DH +DH +DH +DH +DI +DI +DI +DI +DI +DI +DI +DH +DH +DH +DH +DH +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DI +DI +DI +DI +DI +DI +DI +DI +DH +DH +DH +DH +DH +DH +DH +DH +DH +DI +DI +DI +DI +DI +DI +DI +DI +DI +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +"} +(5,1,3) = {" +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI DI DI DI @@ -61007,11 +61270,6 @@ DI DI DI DI -DH -DH -DH -DH -DH DI DI DI @@ -61030,7 +61288,12 @@ DH DH DH DH -DH +DI +DI +DI +DI +DI +DI DH DH DH @@ -61042,10 +61305,31 @@ DI DI DI DI +DI +DI +DI +DI +DI +DI +DI +DH DH DH DH DH +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DI +DH DH DH DH @@ -61060,7 +61344,9 @@ DI DI DI DI -DH +DI +DI +DI DH DH DH @@ -61079,9 +61365,7 @@ DH DH DH "} -(5,1,3) = {" -DH -DH +(6,1,3) = {" DH DH DH @@ -61140,9 +61424,11 @@ DI DI DI DI -DI -DI -DI +am +oc +oc +oc +am DI DI DI @@ -61159,7 +61445,7 @@ DH DH DH DH -DI +DH DI DI DI @@ -61183,8 +61469,7 @@ DI DI DI DI -DH -DH +DI DH DH DH @@ -61200,10 +61485,7 @@ DI DI DI DI -DH -DH -DH -DH +DI DH DH DI @@ -61218,7 +61500,11 @@ DI DI DI DI -DH +DI +DI +DI +DI +DI DH DH DH @@ -61236,9 +61522,7 @@ DH DH DH "} -(6,1,3) = {" -DH -DH +(7,1,3) = {" DH DH DH @@ -61295,11 +61579,13 @@ DI DI DI DI -am -oc +DI +DI oc +xM +mc +hR oc -am DI DI DI @@ -61309,8 +61595,7 @@ DI DI DI DI -DH -DH +DI DH DH DH @@ -61322,7 +61607,8 @@ DI DI DI DI -DH +DI +DI DH DH DI @@ -61341,7 +61627,8 @@ DI DI DI DI -DH +DI +DI DH DH DI @@ -61357,8 +61644,7 @@ DI DI DI DI -DH -DH +DI DI DI DI @@ -61393,8 +61679,7 @@ DH DH DH "} -(7,1,3) = {" -DH +(8,1,3) = {" DH DH DH @@ -61452,9 +61737,10 @@ DI DI DI DI +DI oc -xM -mc +hR +oy hR oc DI @@ -61472,7 +61758,6 @@ DH DH DH DH -DH DI DI DI @@ -61480,8 +61765,6 @@ DI DI DI DI -DH -DH DI DI DI @@ -61500,8 +61783,11 @@ DI DI DI DI -DH -DH +DI +DI +DI +DI +DI DI DI DI @@ -61550,10 +61836,7 @@ DH DH DH "} -(8,1,3) = {" -DH -DH -DH +(9,1,3) = {" DH DH DH @@ -61575,6 +61858,7 @@ DH DH DH DH +DI DH DH DI @@ -61591,8 +61875,10 @@ DI DI DI DI -DI -DI +DH +DH +DH +DH DI DI DI @@ -61611,9 +61897,10 @@ DI DI oc hR -oy hR -oc +hR +oS +DI DI DI DI @@ -61624,8 +61911,6 @@ DI DI DI DI -DH -DH DH DH DH @@ -61690,6 +61975,7 @@ DI DI DI DI +DI DH DH DH @@ -61707,7 +61993,7 @@ DH DH DH "} -(9,1,3) = {" +(10,1,3) = {" DH DH DH @@ -61744,8 +62030,8 @@ DI DI DI DI -DI -DI +DH +DH DH DH DH @@ -61767,10 +62053,13 @@ DI DI DI oc +on hR -hR -hR -oS +oK +oc +DI +DI +DI DI DI DI @@ -61782,9 +62071,6 @@ DI DI DI DI -DH -DH -DH DI DI DI @@ -61864,7 +62150,7 @@ DH DH DH "} -(10,1,3) = {" +(11,1,3) = {" DH DH DH @@ -61887,8 +62173,7 @@ DH DH DH DI -DH -DH +DI DI DI DI @@ -61907,6 +62192,8 @@ DH DH DH DH +DH +DH DI DI DI @@ -61922,11 +62209,10 @@ DI DI DI DI -DI -oc -on -hR -oK +od +dX +bU +bU oc DI DI @@ -62004,7 +62290,7 @@ DI DI DI DI -DH +DI DH DH DH @@ -62021,7 +62307,7 @@ DH DH DH "} -(11,1,3) = {" +(12,1,3) = {" DH DH DH @@ -62064,7 +62350,6 @@ DH DH DH DH -DH DI DI DI @@ -62080,10 +62365,11 @@ DI DI DI DI -od -dX -bU +DI +oc +oo bU +oo oc DI DI @@ -62178,7 +62464,7 @@ DH DH DH "} -(12,1,3) = {" +(13,1,3) = {" DH DH DH @@ -62220,7 +62506,7 @@ DH DH DH DH -DH +DI DI DI DI @@ -62238,9 +62524,9 @@ DI DI DI oc -oo bU -oo +oz +bU oc DI DI @@ -62335,7 +62621,7 @@ DH DH DH "} -(13,1,3) = {" +(14,1,3) = {" DH DH DH @@ -62371,9 +62657,7 @@ DI DI DI DI -DH -DH -DH +DI DH DH DH @@ -62394,22 +62678,13 @@ DI DI DI DI -oc -bU -oz -bU -oc -DI -DI -DI -DI -DI -DI -DI -DI -DI DI DI +oc +ei +oo +dX +oT DI DI DI @@ -62429,6 +62704,18 @@ DI DI DI DI +KD +KH +KI +KY +KI +KI +KH +KD +KD +LC +KD +KD DI DI DI @@ -62490,9 +62777,8 @@ DH DH DH DH -DH "} -(14,1,3) = {" +(15,1,3) = {" DH DH DH @@ -62529,9 +62815,9 @@ DI DI DI DI -DH -DH -DH +DI +DI +DI DI DI DI @@ -62552,10 +62838,10 @@ DI DI DI oc -ei -oo -dX -oT +op +oA +bU +oc DI DI DI @@ -62576,15 +62862,15 @@ DI DI DI KD -KH -KI -KY KI +KN +KT +KT +Lj KI -KH KD KD -LC +KD KD KD DI @@ -62649,7 +62935,7 @@ DH DH DH "} -(15,1,3) = {" +(16,1,3) = {" DH DH DH @@ -62708,9 +62994,9 @@ DI DI DI DI -oc -op -oA +od +bU +bU bU oc DI @@ -62734,10 +63020,10 @@ DI DI KD KI -KN +KO KT KT -Lj +Lk KI KD KD @@ -62806,7 +63092,7 @@ DH DH DH "} -(16,1,3) = {" +(17,1,3) = {" DH DH DH @@ -62865,7 +63151,7 @@ DI DI DI DI -od +oc bU bU bU @@ -62891,10 +63177,10 @@ DI DI KD KI -KO +KP KT KT -Lk +Ll KI KD KD @@ -62948,7 +63234,7 @@ DI DI DI DI -DH +DI DH DH DH @@ -62963,7 +63249,7 @@ DH DH DH "} -(17,1,3) = {" +(18,1,3) = {" DH DH DH @@ -63026,7 +63312,7 @@ oc bU bU bU -oc +oT DI DI DI @@ -63048,10 +63334,10 @@ DI DI KD KI -KP +KQ KT KT -Ll +Lm KI KD KD @@ -63106,6 +63392,8 @@ DI DI DI DI +DI +DI DH DH DH @@ -63117,10 +63405,10 @@ DH DH DH DH +"} +(19,1,3) = {" DH DH -"} -(18,1,3) = {" DH DH DH @@ -63157,17 +63445,15 @@ DI DI DI DI +DH +DH +DH DI DI DI DI -DI -DI -DI -DI -DI -DI -DI +DH +DH DI DI DI @@ -63180,10 +63466,10 @@ DI DI DI oc -bU -bU -bU -oT +az +az +hk +oc DI DI DI @@ -63205,10 +63491,10 @@ DI DI KD KI -KQ -KT -KT -Lm +KH +KZ +Le +Ln KI KD KD @@ -63265,7 +63551,7 @@ DI DI DI DI -DH +DI DH DH DH @@ -63277,7 +63563,9 @@ DH DH DH "} -(19,1,3) = {" +(20,1,3) = {" +DH +DH DH DH DH @@ -63301,14 +63589,6 @@ DH DH DH DH -DI -DI -DI -DI -DI -DI -DI -DI DI DI DI @@ -63319,10 +63599,16 @@ DI DH DH DH -DI -DI -DI -DI +DH +DH +DH +DH +DH +DH +DH +DH +DH +DH DH DH DI @@ -63336,11 +63622,11 @@ DI DI DI DI +am oc -az -az -hk +gv oc +am DI DI DI @@ -63362,16 +63648,12 @@ DI DI KD KI -KH -KZ -Le -Ln +KR +KT +Lf +DI KI KD -KD -KD -KD -KD DI DI DI @@ -63423,7 +63705,11 @@ DI DI DI DI -DH +DI +DI +DI +DI +DI DH DH DH @@ -63434,7 +63720,8 @@ DH DH DH "} -(20,1,3) = {" +(21,1,3) = {" +DH DH DH DH @@ -63460,12 +63747,6 @@ DH DH DH DH -DI -DI -DI -DI -DI -DI DI DH DH @@ -63482,6 +63763,16 @@ DH DH DH DH +DH +DH +DH +DH +DH +DH +DH +DI +DI +DI DI DI DI @@ -63493,11 +63784,6 @@ DI DI DI DI -am -oc -gv -oc -am DI DI DI @@ -63519,7 +63805,7 @@ DI DI KD KI -KR +KS KT Lf DI @@ -63591,7 +63877,10 @@ DH DH DH "} -(21,1,3) = {" +(22,1,3) = {" +DH +DH +DH DH DH DH @@ -63618,7 +63907,6 @@ DH DH DH DH -DI DH DH DH @@ -63641,8 +63929,6 @@ DH DH DH DH -DI -DI DI DI DI @@ -63676,10 +63962,10 @@ DI DI KD KI -KS -KT -Lf -DI +KH +KZ +Le +Ln KI KD DI @@ -63738,7 +64024,7 @@ DI DI DI DI -DH +DI DH DH DH @@ -63748,7 +64034,8 @@ DH DH DH "} -(22,1,3) = {" +(23,1,3) = {" +DH DH DH DH @@ -63800,7 +64087,6 @@ DH DH DH DH -DI DI DI DI @@ -63833,10 +64119,10 @@ DI DI KD KI -KH -KZ -Le -Ln +KT +KT +KT +Lo KI KD DI @@ -63896,17 +64182,19 @@ DI DI DI DI +DI +DI +DI DH DH DH DH DH +"} +(24,1,3) = {" DH DH DH -"} -(23,1,3) = {" -DH DH DH DH @@ -63986,15 +64274,13 @@ DI DI DI DI -DI -DI KD KI -KT -KT -KT -Lo -KI +KU +La +Lg +Lp +Lr KD DI DI @@ -64062,7 +64348,8 @@ DH DH DH "} -(24,1,3) = {" +(25,1,3) = {" +DH DH DH DH @@ -64117,7 +64404,6 @@ DH DH DH DH -DI DI DI DI @@ -64146,12 +64432,12 @@ DI DI DI KD +KH KI -KU -La -Lg -Lp -Lr +KI +KI +KI +KH KD DI DI @@ -64219,7 +64505,9 @@ DH DH DH "} -(25,1,3) = {" +(26,1,3) = {" +DH +DH DH DH DH @@ -64275,8 +64563,6 @@ DH DH DH DH -DI -DI DI DI DI @@ -64303,12 +64589,12 @@ DI DI DI KD -KH -KI -KI -KI -KI -KH +KJ +KJ +KJ +KD +KD +KD KD DI DI @@ -64370,13 +64656,13 @@ DI DI DI DI -DH +DI DH DH DH DH "} -(26,1,3) = {" +(27,1,3) = {" DH DH DH @@ -64461,7 +64747,7 @@ DI DI KD KJ -KJ +DI KJ KD KD @@ -64528,12 +64814,12 @@ DI DI DI DI -DH +DI DH DH DH "} -(27,1,3) = {" +(28,1,3) = {" DH DH DH @@ -64616,14 +64902,15 @@ DI DI DI DI -KD -KJ DI KJ -KD -KD -KD -KD +KJ +KJ +DI +DI +DI +DI +DI DI DI DI @@ -64686,11 +64973,10 @@ DI DI DI DI -DH DH DH "} -(28,1,3) = {" +(29,1,3) = {" DH DH DH @@ -64774,9 +65060,6 @@ DI DI DI DI -KJ -KJ -KJ DI DI DI @@ -64844,10 +65127,14 @@ DI DI DI DI -DH +DI +DI +DI +DI DH "} -(29,1,3) = {" +(30,1,3) = {" +DH DH DH DH @@ -64905,7 +65192,6 @@ DH DH DH DH -DI DI DI DI @@ -65004,7 +65290,7 @@ DI DI DH "} -(30,1,3) = {" +(31,1,3) = {" DH DH DH @@ -65158,10 +65444,10 @@ DI DI DI DI -DI +DH DH "} -(31,1,3) = {" +(32,1,3) = {" DH DH DH @@ -65313,12 +65599,12 @@ DI DI DI DI -DI -DI +DH +DH DH DH "} -(32,1,3) = {" +(33,1,3) = {" DH DH DH @@ -65437,6 +65723,9 @@ DI DI DI DI +DH +DH +DH DI DI DI @@ -65466,16 +65755,13 @@ DI DI DI DI -DI -DI -DI -DI +DH DH DH DH DH "} -(33,1,3) = {" +(34,1,3) = {" DH DH DH @@ -65587,13 +65873,13 @@ DI DI DI DI -DI -DI -DI -DI -DI -DI -DI +DH +DH +DH +DH +DH +DH +DH DH DH DH @@ -65625,14 +65911,14 @@ DI DI DI DI -DI +DH DH DH DH DH DH "} -(34,1,3) = {" +(35,1,3) = {" DH DH DH @@ -65781,17 +66067,6 @@ DI DI DI DI -DI -DH -DH -DH -DH -DH -DH -"} -(35,1,3) = {" -DH -DH DH DH DH @@ -65799,6 +66074,8 @@ DH DH DH DH +"} +(36,1,3) = {" DH DH DH @@ -65835,6 +66112,13 @@ DH DH DH DH +DI +DI +DI +DI +DI +DI +DI DH DH DH @@ -65901,6 +66185,8 @@ DI DI DI DI +DI +DI DH DH DH @@ -65937,7 +66223,6 @@ DI DI DI DI -DI DH DH DH @@ -65945,9 +66230,9 @@ DH DH DH DH -"} -(36,1,3) = {" DH +"} +(37,1,3) = {" DH DH DH @@ -65990,8 +66275,8 @@ DI DI DI DI -DH -DH +DI +DI DH DH DH @@ -66058,6 +66343,7 @@ DI DI DI DI +DI DH DH DH @@ -66065,9 +66351,8 @@ DH DH DH DH -DH -DH -DH +DI +DI DI DI DI @@ -66102,9 +66387,9 @@ DH DH DH DH -"} -(37,1,3) = {" DH +"} +(38,1,3) = {" DH DH DH @@ -66148,10 +66433,8 @@ DI DI DI DI -DH -DH -DH -DH +DI +DI DH DH DH @@ -66215,13 +66498,16 @@ DI DI DI DI +DI +DI +DI DH DH DH DH DH DH -DH +DI DI DI DI @@ -66260,8 +66546,7 @@ DH DH DH "} -(38,1,3) = {" -DH +(39,1,3) = {" DH DH DH @@ -66306,13 +66591,14 @@ DI DI DI DI +DI +DI +DI DH DH -DH -DH -DH -DH -DH +DI +DI +DI DI DI DI @@ -66417,14 +66703,7 @@ DH DH DH "} -(39,1,3) = {" -DH -DH -DH -DH -DH -DH -DH +(40,1,3) = {" DH DH DH @@ -66441,6 +66720,12 @@ DH DH DH DH +DI +DI +DI +DI +DI +DI DH DH DH @@ -66465,8 +66750,10 @@ DI DI DI DI -DH -DH +DI +DI +DI +DI DI DI DI @@ -66533,8 +66820,7 @@ DH DH DH DH -DH -DH +DI DI DI DI @@ -66574,7 +66860,7 @@ DH DH DH "} -(40,1,3) = {" +(41,1,3) = {" DH DH DH @@ -66597,9 +66883,8 @@ DI DI DI DI -DH -DH -DH +DI +DI DH DH DH @@ -66687,10 +66972,11 @@ DI DI DI DI -DH -DH -DH -DH +DI +DI +DI +DI +DI DI DI DI @@ -66731,7 +67017,7 @@ DH DH DH "} -(41,1,3) = {" +(42,1,3) = {" DH DH DH @@ -66756,13 +67042,13 @@ DI DI DI DI -DH -DH -DH -DH -DH -DH -DH +DI +DI +DI +DI +DI +DI +DI DI DI DI @@ -66888,8 +67174,7 @@ DH DH DH "} -(42,1,3) = {" -DH +(43,1,3) = {" DH DH DH @@ -66907,63 +67192,65 @@ DH DH DI DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai DI DI DI @@ -67043,14 +67330,11 @@ DH DH DH DH -DH "} -(43,1,3) = {" -DH -DH -DH -DH +(44,1,3) = {" DH +DI +DI DH DH DH @@ -67063,6 +67347,26 @@ DH DH DI DI +DI +DI +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai ai ai ai @@ -67182,40 +67486,22 @@ DI DI DI DI +DH +"} +(45,1,3) = {" +DH DI DI DI DI DI -DI -DI -DI -DI -DI -DI -DH DH DH DH DH DH -DH -DH -"} -(44,1,3) = {" -DH DI DI -DH -DH -DH -DH -DH -DH -DH -DH -DH -DH DI DI DI @@ -67272,11 +67558,11 @@ ai ai ai ai -ai -ai -ai -ai -ai +JK +cd +cd +cd +Kd ai ai ai @@ -67359,7 +67645,7 @@ DI DI DH "} -(45,1,3) = {" +(46,1,3) = {" DH DI DI @@ -67369,8 +67655,8 @@ DI DH DH DH -DH -DH +DI +DI DI DI DI @@ -67516,20 +67802,13 @@ DI DI DH "} -(46,1,3) = {" +(47,1,3) = {" DH DI DI DI DI DI -DH -DH -DH -DI -DI -DI -DI DI DI DI @@ -67586,11 +67865,18 @@ ai ai ai ai -JK -cd -cd -cd -Kd +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai ai ai ai @@ -67673,21 +67959,8 @@ DI DI DH "} -(47,1,3) = {" -DH -DI -DI -DI -DI -DI -DI -DI -DI -DI -ai -ai -ai -ai +(48,1,3) = {" +af ai ai ai @@ -67761,6 +68034,19 @@ ai ai ai ai +xP +JD +JD +JD +JD +JD +xP +Nw +Nw +Nw +Nw +Nw +Nw ai ai ai @@ -67819,18 +68105,18 @@ DI DI DI DI -DI -DI -DI -DI -DI -DI -DI -DI -DI +DH +DH +DH +DH +DH +DH +DH +DH +DH DH "} -(48,1,3) = {" +(49,1,3) = {" af ai ai @@ -67905,13 +68191,13 @@ ai ai ai ai -xP -JD -JD -JD -JD -JD -xP +Jz +wK +JQ +JQ +JQ +Kl +Kt Nw Nw Nw @@ -67967,15 +68253,15 @@ DI DI DI DI -DI -DI -DI -DI -DI -DI -DI -DI -DI +DH +DH +DH +DH +DH +DH +DH +DH +DH DH DH DH @@ -67987,7 +68273,7 @@ DH DH DH "} -(49,1,3) = {" +(50,1,3) = {" af ai ai @@ -68035,39 +68321,39 @@ ai ai ai ai +NB +EA +EA +EA +EA +EA +EA +EA +EA +EA +EA +EA +EA +EA +EA +EA +EA +EA +EA +EA +EA +EA +EA ai ai ai ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -Jz -wK -JQ -JQ -JQ -Kl +JA +JE +JR +Kb +Kf +Km Kt Nw Nw @@ -68144,7 +68430,7 @@ DH DH DH "} -(50,1,3) = {" +(51,1,3) = {" af ai ai @@ -68192,17 +68478,16 @@ ai ai ai ai -ai -ai -rg +NB +Cz zP zP -rP +BK zP zP zP zP -rP +BK zP zP zP @@ -68211,167 +68496,11 @@ zP zP zP zP -rP zP zP -rg -ai -ai -ai -ai -JA -JE -JR -Kb -Kf -Km -Kt -Nw -Nw -Nw -Nw -Nw -Nw -ai -ai -ai -ai -ai -ai -ai -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DI -DH -DH -DH -DH -DH -DH -DH -DH -DH -DH -DH -DH -DH -DH -DH -DH -DH -DH -DH -"} -(51,1,3) = {" -af -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -ai -zP -rn -rD -rD -rD -Cs -zP -rH -ys -zP -zx -zA -rx -rx -rG -rG -zP -zV -zY -zY zP +Cz +NB ai ai ai @@ -68506,29 +68635,29 @@ ai ai ai ai -ai -ai +NB zP +mt ro Cr -rD -rD -rv -rH -rH +rn +rT +zP +vJ yt zP +zG zy rG +zP +zK rx -zJ -zM zM -zP -zW +AL Ae -Ah -Ai +Ae +zP +NB ai ai ai @@ -68663,29 +68792,29 @@ ai ai ai ai -ai -ai +NB zP +mu rs rD -Dp +rD rZ -rv -zP +te +te te zP -rg +zI rG +rG +BK +zK rx -rx -zJ -zN -zN -zP -zX +zM Ae -Ah -zP +Ae +Ae +BK +NB ai ai ai @@ -68820,29 +68949,29 @@ ai ai ai ai -ai -ai -rm +NB +zP +rZ rt rv -rR -sa -rv +rD +Cz zP -tV +yr zP +Cz +rG rG rG -tV zD -tV -zP -zP -zP -zY -zY -zY +rG +rG +AE +Ae +Ae +Ae zP +NB ai ai ai @@ -68977,29 +69106,29 @@ ai ai ai ai -ai -ai -zP +NB +BK +rZ ru rE -rS -rv -rv +rD zP +sc +tV Cv -ON rG rG -tV +rG +Ad zE zK -zP +rx zQ -rG -rG -rG -rG -Ai +Ae +Ae +Ae +zP +NB ai ai ai @@ -69134,29 +69263,29 @@ ai ai ai ai -ai -ai -zP -rv -rv -rT -rv -Ct +NB zP +mu +rD +rD +rD +rU tV -yu -yr -rG -yF -zF tV -zP -zQ -rG -rG +yA +yw rG rG +Ai +BK +As +rx +AF +Ae +Ae +Ae zP +NB ai ai ai @@ -69291,29 +69420,29 @@ ai ai ai ai -ai -ai +NB zP +my +rZ +og +rq zP +sd +tV +Cw +yw rG rG +zx zP -zP -zP -xz -yv -yr +zK rG -rg -zP -zP -zP -zP -zP -zZ -zP +AH +Ae +Ae +Ae zP -rg +NB ai ai ai @@ -69448,29 +69577,29 @@ ai ai ai ai -ai -ai +NB zP -rw -rx -rx -rx zP -tU +rG +rG +zP +zP +se tV -yv -yr +Cw +yw +rG rG Cz -zG -zL zP +zP +zD BK sO -rG -rN -rX -zP +sO +sO +Cz +NB ai ai ai @@ -69605,29 +69734,29 @@ ai ai ai ai -ai -ai +NB zP -Cp +mH rx rx rx -te +rV +tV tV Cw -yv -yr +yw +rG rG CA -rX -zL +Ap zP rx -rx -rG -rx -rO +AI +zI +zI +AW zP +NB ai ai ai @@ -69762,29 +69891,29 @@ ai ai ai ai -ai -ai +NB zP +mJ rx rx rx -sb zP +tR tW -tV +Cw yw -yr rG +rG +Aj +Aq +zP rx rx -rx -zO -rG -CD rG rx -rx -Ai +rG +zP +NB ai ai ai @@ -69919,29 +70048,29 @@ ai ai ai ai -ai -ai -rm -rx +NB +zP +mN rx rx -sc -zP -tX -yi +rw zP -yJ +tV +tV +Cw +yw rG rx -rL -rL -zP -rG -rG +rx +rx +zD rG +AK +rx +rx BL -BL -zP +BK +NB ai ai ai @@ -70076,29 +70205,29 @@ ai ai ai ai -ai -ai -zP -zP -rH +NB +BK +rx +rx +rx +rP zP +tU +tU zP -rg -rG -yr -rG +yO rG -zz rx +Ad zH -rW zP -zQ -rG -rG -tf -zN +rx +rx +AM +AU +AX zP +NB ai ai ai @@ -70233,29 +70362,29 @@ ai ai ai ai -ai -ai +NB zP -ry +mO +rC rH -rU zP -tf +Cz +yw +yw rG rG -yA +zL +rx +Ak +yF +zP +AS rG rG -rg -zP -zP -zP -zP -zP zO +zN zP -zP -zP +NB ai ai ai @@ -70390,30 +70519,30 @@ ai ai ai ai -ai -ai +NB zP +zN rC -rI -rV -zP -tf -rG -rG -zP -rG -rG -zC -zI -rX +te zP +zO rG rG rG rG rG +rx +Cz zP -Ev +zP +zP +zP +zD +zP +zP +zP +NB +Bb Ev Ev KB @@ -70547,29 +70676,29 @@ ai ai ai ai -ai -ai -zP -zP -zP +NB zP zP +mP +pE zP -rx +zO rG -yB rG +yB +yB rG -CB rx CB +Ar zP +Au rG CE Aa -rW -rx +AZ zP +NB ai ai ai @@ -70704,29 +70833,29 @@ ai ai ai ai -ai -ai -rg +NB +zP +zP +zP +zP +zP zP -rL -rL -sO -tR -rx rG -yF rG +yH +yF rG rx -rx -rx -rG -rG +Am +Am +zP +Av rG +AR Ab Ag -zL -Ai +zP +NB ai ai ai @@ -70861,29 +70990,29 @@ ai ai ai ai -ai -ai -ai +NB +Cz zP rM +rM rW -rx -rx -rx +sb rG -zP -yO +rG +yJ +yS rG rx rx rx +zP +AQ rG -rG -zU +CE Ac -Ag -rx -zP +CE +BK +NB ai ai ai @@ -71018,29 +71147,29 @@ ai ai ai ai -ai -ai -ai -rm +NB +NB +zP +mS rN rX -rx -rx -rx +tV rG -yG rG +yG +yG rG rx rx rx -rG -rG -rG -Ac -Ag -CG +zD +rx +rx +rx +rx +rx zP +NB ai ai ai @@ -71176,28 +71305,28 @@ ai ai ai ai -ai -ai -zP -rO +NB +BK +nA rO -rx -rL -rx +rR +tV +rG +rG rG rG -yS rG rx -CC -CC +rx +rx zP rG rG +zV Ad -Ag -rx +zV zP +NB ai ai ai @@ -71333,28 +71462,28 @@ ai ai ai ai -ai -ai -rg +NB zP rY -rx -rM -rW +qr +rY +rS rG rG rG +zz rG -CA -rM -rW +zV +An +An zP rG -CE -Ac +rG +AR +AV Ag -rx zP +NB ai ai ai @@ -71490,28 +71619,28 @@ ai ai ai ai -ai -ai -bQ -zP -zP -sP -zP -zP -zP -yH +NB +Cz zP +tV +rS +tV +rG +ys +rG +rG +zR sP +Ao +yF zP -zP -zP -zP -rG +Az rG +zV zx -rX -zL +zV zP +NB ai ai ai @@ -71647,28 +71776,28 @@ Fr ai ai ai -ai -ai -ai -ai -ai -ai -ai -Eq +NB +NB +zP +zP +BK +zP +zP +zP Er -Es -Ex -Ey -ai -ai -ai zP +zP +zP +BK +zP +zP +AA rG rG -CF -rx -rx -Ai +rG +rG +zP +NB ai ai ai @@ -71810,22 +71939,22 @@ ai ai ai ai -ai +tX Eq Es -Es -Es -Ey +zA +zS ai ai ai zP -zS -rG -rG -rG +AB rG -zP +AT +AV +Ap +BK +NB ai ai ai @@ -71967,22 +72096,22 @@ ai ai ai ai -ai -Eq -Et -Et +tX +Es Et -Ey +Es +zS ai ai ai -rg -zP -zP -sP zP +rG +rG +rG +rG +Ba zP -rg +NB ai ai ai @@ -72124,22 +72253,22 @@ ai ai ai ai -ai -ai +tX Eu Eu Eu +zS ai ai ai -ai -Ew -ai -ai -ai -ai -ai -ai +Cz +zP +zP +BK +zP +zP +Cz +NB ai ai ai @@ -72281,22 +72410,22 @@ ai ai ai ai +vs +vs +vs +vs +vs ai ai ai -ai -ai -ai -Ez -Ev -Ev -EH -ai -ai -ai -ai -ai -ai +EA +EA +EA +EA +EA +EA +EA +EA ai ai ai @@ -92062,18 +92191,18 @@ eJ eJ eJ rk -rq -rq -rq -sd eJ eJ eJ -rk -rq -rq -rq -sd +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ eJ eJ eJ @@ -92213,31 +92342,31 @@ eJ eJ eJ eJ -eJ -eJ -eJ -eJ -eJ -rp -pL -pL -pL -se -eJ -eJ -eJ -rp -pL +ai +ai +ai +Bk tc -pL -se -eJ -eJ -eJ -eJ -eJ -eJ -eJ +tc +tc +Um +Um +ai +ai +ai +Bk +tc +tc +tc +Um +ai +ai +ai +ai +ai +ai +ai +ai eJ eJ eJ @@ -92369,32 +92498,32 @@ eJ eJ eJ eJ -eJ -eJ -eJ -eJ -eJ -eJ -rp -pL -pL -rJ -se -eJ -eJ -eJ -rp +ai +ai +ai +ai +Bl +CG rJ -pL +CG +UY +ai +ai +ai +ai +Bl +CG rJ -se -eJ -eJ -eJ -eJ -eJ -eJ -eJ +CG +UY +ai +ai +ai +ai +ai +ai +ai +ai eJ eJ eJ @@ -92526,32 +92655,32 @@ eJ eJ eJ eJ -eJ -eJ -eJ -eJ -rg -zP -zP -zZ -zP -zP -rg -zP -AK -zP -rg -zP -zZ -zP -zP -zP -AK -zP -AK -zP -rg -eJ +ai +ai +NB +NB +Bl +CH +CG +CH +UY +NB +NB +SD +NB +Bl +CH +CG +CH +UY +NB +NB +NB +NB +NB +NB +NB +ai eJ eJ eJ @@ -92683,32 +92812,32 @@ eJ eJ eJ eJ -eJ -eJ -eJ -eJ +ai +ai +Bc +Cz zP -Aj -rx -rx -rx zP -AC -AF -AL -AN -AC -rG -rG -rG +Dp zP -Az -rG zP -Bm -rG +Cz zP -eJ +zP +zP +Cz +zP +UO +zP +zP +zP +zP +zP +zP +zP +Cz +EA +ai eJ eJ eJ @@ -92840,32 +92969,32 @@ as as eJ eJ -eJ -eJ -eJ -eJ +ai +ai +Bc zP -Ak -At -At +Bm +rx rx +Ey zP AC -AG -AG -rG +YM +YR +SG +AC AQ rG rG -rG zP -AU -Ba +RG +rG zP -AU -Ba +NP +rG zP -eJ +EA +ai eJ eJ eJ @@ -92997,32 +93126,32 @@ as as eJ eJ -eJ -eJ -eJ -eJ +ai +ai +Bc zP -rx +Bn At At rx zP AC -Al +AG AG rG -AC +WG rG rG rG zP +ZZ Al -AG zP +ZZ Al -AG zP -eJ +EA +ai eJ eJ eJ @@ -93154,32 +93283,32 @@ as as eJ eJ -eJ -eJ -eJ -eJ -rg -Al +ai +ai +Bc +zP +rx At -Au -Av -rg +At +rx +zP AC -AG +Bo AG rG -AR +AC rG rG rG zP -AG +Bo AG zP -AG +Bo AG zP -eJ +EA +ai eJ eJ eJ @@ -93311,32 +93440,32 @@ as as eJ eJ -eJ -eJ -eJ -eJ -zP -Am -At +ai +ai +Bc +Cz +Bo At -Aw -zP +Ex +Ez +Cz AC +AG +AG rG -rG -rG -AR +AO rG rG rG zP -AV -rG +AG +AG zP -rG -rG +AG +AG zP -eJ +EA +ai eJ eJ eJ @@ -93468,32 +93597,32 @@ as as eJ eJ -eJ -eJ -eJ -eJ +ai +ai +Bc zP -An +Cp At At -rx +EH zP AC -AH -AM +rG +rG +rG AO -AC -zQ rG rG -rg +rG zP -Bb -rg -Bn +YO +rG zP +rG +rG zP -eJ +Pq +ai eJ eJ eJ @@ -93625,32 +93754,32 @@ as as eJ eJ -eJ -eJ -eJ -eJ +ai +ai +Bc zP -Ao +Cs At At rx zP -rg AC +NS +PU +Wl AC -zP -rg -zQ +AS rG rG -rx -rx -rx -sO -rx -rx +Cz zP -eJ +YC +Cz +ZK +zP +zP +EA +ai eJ eJ eJ @@ -93782,32 +93911,32 @@ eJ eJ eJ eJ -eJ -eJ -eJ -eJ +ai +ai +Bc zP -Ap -rx -rx +Ct +At +At rx zP -zN -zN -zN -zN +Cz +AC +AC +zP +Cz AS rG rG -rG rx rx rx +AI rx rx -Ap -Ai -eJ +zP +EA +ai eJ eJ eJ @@ -93939,32 +94068,32 @@ eJ eJ eJ eJ -eJ -eJ -eJ -eJ -zP -zP -CH +ai +ai +Bc zP +CC +rx +rx +rx zP -rg zN zN -AI +zN zN zP +AQ rG rG -rG -zP -zP -zP -zP -zP -zP -zP -eJ +rx +rx +rx +rx +rx +Wp +ZC +EA +ai eJ eJ eJ @@ -94096,32 +94225,32 @@ eJ eJ eJ eJ -eJ -eJ -eJ -eJ +ai +ai +Bc zP -rG -rG -rG -rx -AA -zN +zP +Dp +zP +zP +Cz zN zN +QV zN -AT +zP rG rG rG -rg -AC -AC -AC -AC -rg zP -eJ +zP +zP +zP +zP +zP +zP +EA +ai eJ eJ eJ @@ -94253,32 +94382,32 @@ eJ eJ eJ eJ -eJ -eJ -eJ -eJ +ai +ai +Bc zP -Aq +rG rG rG rx -AA +OD zN zN -zP zN -AT -rG +zN +AD rG rG -rg -AW rG -Be -Bi +Cz +AC +AC +AC AC +Cz zP -eJ +EA +ai eJ eJ eJ @@ -94410,32 +94539,32 @@ eJ eJ eJ eJ -eJ -eJ -eJ -eJ +ai +ai +Bc zP -rG +AQ rG rG rx -AA -zN +OD zN zN +zP zN -AT +AD rG rG rG -rg -AX +Cz +RB +rG zT -Bf -Bo +Bi AC zP -eJ +EA +ai eJ eJ eJ @@ -94567,32 +94696,32 @@ eJ eJ eJ eJ -eJ -eJ -eJ -eJ -rm -Ar +ai +ai +Bc +zP rG rG +rG +rx Ax zN zN -AI zN zN -AT -rG +AD rG rG -rg rG -zT -Bg -Bo +Cz +Yh +QR +WS +Bh AC zP -eJ +EA +ai eJ eJ eJ @@ -94724,32 +94853,32 @@ eJ eJ eJ eJ -eJ -eJ -eJ -eJ -zP -As +ai +ai +Bc +Bj +CD rG rG -Ax +ON zN zN +QV zN -zP zN -AT -rG +AD rG rG -AC rG +Cz rG +QR +Pr Bh -Bi AC zP -eJ +EA +ai eJ eJ eJ @@ -94881,32 +95010,32 @@ eJ eJ eJ eJ -eJ -eJ -eJ -eJ +ai +ai +Be zP -zQ +CF rG rG -rx -AA +ON zN zN zN +zP zN -AT +AD rG rG rG AC -zR rG -Bi +rG +Oc Bi AC zP -eJ +EA +ai eJ eJ eJ @@ -95038,32 +95167,32 @@ eJ eJ eJ eJ -eJ -eJ -eJ -eJ -rg +ai +ai +Bc zP +AS rG rG rx -rx -AD -AD -AD -AD +Oz +zN +zN +zN +zN AD rG rG rG -rg -AC AC -Bj +BL +rG +Bi +Bi AC -rg zP -eJ +EA +ai eJ eJ td @@ -95195,32 +95324,32 @@ eJ eJ eJ eJ -eJ -eJ -eJ -eJ -eJ +ai +ai +Bc +Cz zP -zR rG -rx +rG rx rx AJ -rx -rx -rx +AJ +AJ +AJ +AJ rG rG rG -rx -rx -rx -rx -rx -rx +Cz +AC +AC +Sj +AC +Cz zP -eJ +EA +ai eJ eJ tQ @@ -95352,32 +95481,32 @@ eJ eJ eJ eJ -eJ -eJ -eJ -eJ -eJ -zP -zP -zP -zP -AB -zP -zP +ai +ai +Bf +Bf zP +BL +rG +rx +rx +rx AP -zP -zP +rx +rx +rx +rG rG rG rx rx rx -AJ rx rx -Ai -eJ +rx +zP +EA +ai eJ eJ tQ @@ -95509,32 +95638,32 @@ eJ eJ eJ eJ -eJ -eJ -eJ -eJ -eJ +ai +ai +ai +Bc zP zP zP -Ay -rG -zU zP Ay -rG -zU +zP +zP +zP +Ss +zP zP rG rG -rg -AC +rx +rx +rx AP -AC -AC -zP -zP -eJ +rx +rx +ZC +EA +ai eJ eJ tQ @@ -95666,32 +95795,32 @@ eJ eJ eJ eJ -eJ -eJ -eJ -eJ -eJ -rg +ai +ai +ai +Bc zP zP -Az +zP +VQ rG -AE +Pk zP -Az +VQ rG -AE +Pk zP rG rG +Cz AC AY -Bc -Bk +AC AC zP zP -eJ +EA +ai eJ eJ tQ @@ -95823,32 +95952,32 @@ eJ eJ eJ eJ -eJ -eJ -eJ -eJ -eJ -eJ -rg -zP -zP -sP -zP -zP -zP -sP +ai +ai +ai +Bc +Cz zP zP +PC +rG +XJ zP +PC +rG +XJ zP +AQ +rG AC -AG -AG -Bc +Sp +Yy +Pj AC zP zP -eJ +EA +ai eJ eJ tQ @@ -95980,32 +96109,32 @@ as as as as -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ +ai +ai +ai +Bf +Bf +Cz +zP +zP +zP +zP +zP +zP +zP +zP +zP +Ub +zP AC -Al AG -Bc +AG +Yy AC zP zP -eJ +EA +ai eJ eJ tQ @@ -96137,32 +96266,32 @@ as as as as -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ +ai +ai +ai +ai +Bf +Bf +Bf +Bf +Bf +Bf +Bf +Bf +Bf +Bf +YB +Bf +Bf AC -AZ +Bo AG -Bl +Yy AC zP zP -eJ +Tz +ai eJ eJ tQ @@ -96294,32 +96423,32 @@ as as as as -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -zP -zP +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +Bc +AC +Zy +AG Bd +AC zP zP -zP -rg -eJ +EA +ai eJ eJ tQ @@ -96451,32 +96580,32 @@ as as as as -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ +ai +bQ +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +Bc +zP +zP +zP +zP +zP +zP +Cz +EA +ai eJ eJ an @@ -96608,32 +96737,32 @@ as as as as -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ +bQ +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +Bf +Bf +Bf +Bf +Bf +Bf +Bf +Bf +Bf +ai eJ eJ eJ @@ -96765,32 +96894,32 @@ as as as as -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai eJ eJ eJ @@ -96922,25 +97051,25 @@ as as as as -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai qb qb qb qb qb -eJ -eJ -eJ +ai +ai +ai qb qb qb @@ -97079,25 +97208,25 @@ as as as as -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ -eJ +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai qb -ri -gX -me +qP +qP +qP qb -eJ -eJ -eJ +ai +ai +ai qb qb qb diff --git a/_maps/map_files/old_maps/roguetown3.dmm b/_maps/map_files/old_maps/roguetown3.dmm index 1eeb2934cc..0c1dc5e288 100644 --- a/_maps/map_files/old_maps/roguetown3.dmm +++ b/_maps/map_files/old_maps/roguetown3.dmm @@ -128,7 +128,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue) "aaB" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/herringbone, /area/rogue) "aaC" = ( @@ -279,8 +279,8 @@ /area/rogue) "abg" = ( /obj/structure/closet/crate/roguecloset/dark, -/obj/item/rogueweapon/huntingknife/idagger, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/knife/dagger, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/cobble, /area/rogue) "abh" = ( @@ -530,7 +530,7 @@ "abS" = ( /obj/structure/closet/crate/roguecloset/dark, /obj/item/clothing/suit/roguetown/shirt/rags, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/cobble, /area/rogue) "abT" = ( @@ -834,7 +834,7 @@ /turf/open/transparent/openspace, /area/rogue/indoors/town/manor) "ada" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -868,7 +868,7 @@ }, /area/rogue/indoors/town/manor) "ade" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -1504,7 +1504,7 @@ /area/rogue) "afb" = ( /obj/structure/closet/crate/chest, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "afc" = ( @@ -1570,7 +1570,7 @@ }, /area/rogue/indoors/town/manor) "afl" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -3346,7 +3346,7 @@ /turf/open/floor/rogue/blocks, /area/rogue) "akN" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/dirt/road, /area/rogue) "akO" = ( @@ -3638,7 +3638,7 @@ /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/rtfield) "alM" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/carpet, /area/rogue) "alN" = ( @@ -4058,7 +4058,7 @@ /area/rogue) "amV" = ( /obj/structure/fluff/psycross, -/obj/item/rogueweapon/woodstaff/aries, +/obj/item/rogueweapon/polearm/woodstaff/aries, /turf/open/floor/rogue/wood, /area/rogue) "amW" = ( @@ -4241,7 +4241,7 @@ /area/rogue) "anx" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/idagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -4652,7 +4652,7 @@ /turf/open/floor/rogue/woodturned, /area/rogue) "aoH" = ( -/obj/item/rogueweapon/stoneaxe/woodcut, +/obj/item/rogueweapon/axe/iron, /turf/open/floor/rogue/cobble, /area/rogue) "aoI" = ( @@ -4912,7 +4912,7 @@ /turf/open/floor/rogue/wood, /area/rogue) "apu" = ( -/obj/effect/landmark/start/barkeep, +/obj/effect/landmark/start/innkeep, /turf/open/floor/rogue/woodturned, /area/rogue) "apv" = ( @@ -5129,7 +5129,7 @@ /turf/open/floor/rogue/woodturned, /area/rogue) "aqa" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/woodturned, /area/rogue) "aqb" = ( @@ -5263,7 +5263,7 @@ /area/rogue) "aqw" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, /turf/open/floor/rogue/woodturned, /area/rogue) "aqx" = ( @@ -5336,7 +5336,7 @@ dir = 5 }, /obj/machinery/light/rogue/wallfire/candle, -/obj/item/rogueweapon/huntingknife/stoneknife, +/obj/item/rogueweapon/knife/stone, /turf/open/floor/rogue/woodturned, /area/rogue) "aqI" = ( @@ -5806,7 +5806,7 @@ /obj/item/neuFarm/seed/oat, /obj/item/neuFarm/seed/apple, /obj/item/neuFarm/seed/apple, -/obj/item/neuFarm/seed/pipeweed, +/obj/item/neuFarm/seed/westleach, /obj/item/clothing/mask/cigarette/pipe/westman, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/rtfield) @@ -5853,7 +5853,7 @@ /area/rogue) "asj" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors) "ask" = ( @@ -5932,7 +5932,7 @@ /turf/closed/wall/mineral/rogue/wood, /area/rogue) "asy" = ( -/obj/item/rogueweapon/huntingknife, +/obj/item/rogueweapon/knife/hunting, /turf/open/floor/rogue/ruinedwood{ icon_state = "vertw"; dir = 1 @@ -6018,7 +6018,7 @@ /area/rogue) "asM" = ( /obj/structure/fluff/statue/gargoyle, -/obj/item/rogueweapon/sword/rapier/lord, +/obj/item/rogueweapon/sword/sabre/lord, /turf/open/floor/rogue/tile{ icon_state = "chess" }, @@ -6771,7 +6771,7 @@ /area/rogue) "auY" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/idagger, +/obj/item/rogueweapon/knife/dagger, /turf/open/floor/rogue/wood, /area/rogue) "auZ" = ( @@ -7635,7 +7635,7 @@ /area/rogue) "axL" = ( /obj/structure/closet/crate/chest, -/obj/item/rogueweapon/huntingknife, +/obj/item/rogueweapon/knife/hunting, /turf/open/floor/rogue/cobble, /area/rogue) "axM" = ( @@ -7751,7 +7751,7 @@ /area/rogue) "aye" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/blocks{ icon_state = "greenblocks" }, @@ -9161,7 +9161,7 @@ }, /area/rogue) "aCN" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "vertw"; dir = 1 @@ -9369,7 +9369,7 @@ /turf/open/floor/rogue/ruinedwood, /area/rogue) "aDt" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ icon_state = "rubble2" }, /turf/closed/wall/mineral/rogue/stone/moss, @@ -9435,7 +9435,7 @@ /turf/open/floor/rogue/blocks, /area/rogue) "aDD" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/blocks, /area/rogue) "aDE" = ( @@ -10007,21 +10007,21 @@ }, /area/rogue/indoors/town/manor) "aFu" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) "aFv" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/manor) "aFw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -10029,7 +10029,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/manor) "aFx" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -10047,7 +10047,7 @@ icon_state = "chair2"; dir = 4 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -10058,7 +10058,7 @@ icon_state = "largetable"; dir = 9 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -10182,7 +10182,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) "aFS" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/manor) "aFT" = ( @@ -10372,7 +10372,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/manor) "aGz" = ( -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "aGA" = ( @@ -10432,7 +10432,7 @@ /area/rogue/outdoors/town) "aGL" = ( /obj/structure/fluff/statue/tdummy, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "aGM" = ( @@ -11366,7 +11366,7 @@ /area/rogue/outdoors/town) "aKe" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, /turf/open/floor/rogue/concrete, /area/rogue/outdoors/town) "aKf" = ( @@ -11803,7 +11803,7 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/beach) "dmH" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "vertw" }, @@ -12482,7 +12482,7 @@ /turf/open/floor/rogue/herringbone, /area/rogue/indoors) "iRS" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/rtfield) "iXT" = ( @@ -12601,7 +12601,7 @@ /turf/closed/wall/mineral/rogue/stone/moss, /area/rogue/outdoors/rtfield) "kji" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/herringbone, /area/rogue/indoors) "kjj" = ( @@ -13008,7 +13008,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/beach) "ojs" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) "omQ" = ( @@ -13443,7 +13443,7 @@ /turf/open/floor/rogue/wood, /area/rogue) "rxb" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -13523,7 +13523,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/cave) "rUg" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -13916,9 +13916,9 @@ /obj/structure/closet/crate/chest, /obj/item/neuFarm/seed/wheat, /obj/item/neuFarm/seed/apple, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/rtfield) "vga" = ( diff --git a/_maps/map_files/old_maps/roguetown4.dmm b/_maps/map_files/old_maps/roguetown4.dmm index 3380afa739..b694234fb0 100644 --- a/_maps/map_files/old_maps/roguetown4.dmm +++ b/_maps/map_files/old_maps/roguetown4.dmm @@ -148,7 +148,7 @@ }, /area/rogue/indoors/town/vault) "aC" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "aD" = ( @@ -683,7 +683,7 @@ /area/rogue/under/town/basement) "cD" = ( /obj/structure/closet/crate/chest, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "cE" = ( @@ -1249,7 +1249,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) "eD" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -1737,7 +1737,7 @@ /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/bath) "gs" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -2028,7 +2028,7 @@ /turf/closed/wall/mineral/rogue/wooddark/horizontal, /area/rogue/outdoors/rtfield) "hu" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -2214,7 +2214,7 @@ /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/church) "ig" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/church) "ih" = ( @@ -2267,7 +2267,7 @@ /turf/closed/wall/mineral/rogue/craftstone, /area/rogue/under/town/basement) "ir" = ( -/obj/item/rogueweapon/stoneaxe/woodcut, +/obj/item/rogueweapon/axe/iron, /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/dwarfin) "is" = ( @@ -2491,7 +2491,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) "jk" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -3389,7 +3389,7 @@ }, /area/rogue/indoors/town/dwarfin) "mA" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/dwarfin) "mB" = ( @@ -3933,7 +3933,7 @@ }, /area/rogue/indoors/town/church) "oI" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) "oJ" = ( @@ -4393,7 +4393,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/church) "qm" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -4560,7 +4560,7 @@ /turf/open/floor/rogue/church, /area/rogue/indoors/town/church/chapel) "qT" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town/dwarfin) "qU" = ( @@ -4679,7 +4679,7 @@ /turf/open/floor/rogue/churchmarble, /area/rogue/indoors/town/church/chapel) "rn" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/magician) "ro" = ( @@ -4846,7 +4846,7 @@ icon_state = "longtable" }, /obj/item/reagent_containers/powder/flour, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/tile{ icon_state = "tile" }, @@ -4913,7 +4913,7 @@ /area/rogue/indoors/town) "se" = ( /obj/structure/chair/bench/throne, -/obj/effect/landmark/start/lady, +/obj/effect/landmark/start/consort, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) "sf" = ( @@ -5312,7 +5312,7 @@ icon_state = "chair2"; dir = 4 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -5330,7 +5330,7 @@ /turf/open/floor/rogue/churchrough, /area/rogue/indoors/town/church/chapel) "tA" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -5418,7 +5418,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "tS" = ( -/obj/effect/landmark/start/barkeep, +/obj/effect/landmark/start/innkeep, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "tT" = ( @@ -6061,7 +6061,7 @@ "wD" = ( /obj/structure/closet/crate/roguecloset/dark, /obj/item/clothing/suit/roguetown/shirt/rags, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "wE" = ( @@ -6104,7 +6104,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "wL" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/shop) "wM" = ( @@ -6473,7 +6473,7 @@ icon_state = "largetable"; dir = 9 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -6576,7 +6576,7 @@ /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/church) "yp" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -7202,7 +7202,7 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) "AK" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -7400,7 +7400,7 @@ }, /area/rogue/indoors/town/tavern) "Bu" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/wood, /area/rogue/outdoors/town) "Bv" = ( @@ -7441,7 +7441,7 @@ }, /area/rogue/outdoors/town) "BE" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/churchrough, /area/rogue/indoors/town/church) "BF" = ( @@ -7591,7 +7591,7 @@ }, /area/rogue/outdoors/town) "Ch" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -8022,7 +8022,7 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "DQ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -8138,7 +8138,7 @@ /area/rogue/indoors/town/tavern) "Ek" = ( /obj/structure/fluff/psycross, -/obj/item/rogueweapon/woodstaff/aries, +/obj/item/rogueweapon/polearm/woodstaff/aries, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/church) "El" = ( @@ -8360,7 +8360,7 @@ /obj/structure/closet/crate/roguecloset, /obj/item/scomstone, /obj/item/clothing/shoes/roguetown/nobleboot, -/obj/item/rogueweapon/greatsword, +/obj/item/rogueweapon/sword/long/greatsword, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "EU" = ( @@ -8408,7 +8408,7 @@ /area/rogue/indoors/town) "Fd" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/idagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -8465,7 +8465,7 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/dwarfin) "Fv" = ( -/obj/item/rogueweapon/stoneaxe/woodcut, +/obj/item/rogueweapon/axe/iron, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/rtfield) "Fy" = ( @@ -8730,7 +8730,7 @@ }, /area/rogue/indoors/town/shop) "Gu" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/rooftop{ icon_state = "roofg"; dir = 2 @@ -8923,7 +8923,7 @@ /turf/open/floor/rogue/carpet/lord/left, /area/rogue/indoors/town/manor) "Hj" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "vertw" }, @@ -9233,8 +9233,8 @@ /area/rogue/under/town/basement) "IK" = ( /obj/structure/closet/crate/roguecloset/dark, -/obj/item/rogueweapon/huntingknife/idagger, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/knife/dagger, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "IO" = ( @@ -9715,7 +9715,7 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "Lu" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /area/rogue/indoors/town) "Lv" = ( /obj/structure/fluff/walldeco/customflag{ @@ -9936,7 +9936,7 @@ }, /area/rogue/outdoors/town/roofs) "MJ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -10134,7 +10134,7 @@ /area/rogue/outdoors/rtfield) "NZ" = ( /obj/structure/table/wood, -/obj/item/rogueweapon/spear/billhook, +/obj/item/rogueweapon/polearm/spear/billhook, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "Oa" = ( @@ -10974,7 +10974,7 @@ }, /area/rogue/outdoors/town) "Tx" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -11643,7 +11643,7 @@ dir = 5 }, /obj/machinery/light/rogue/wallfire/candle, -/obj/item/rogueweapon/huntingknife/stoneknife, +/obj/item/rogueweapon/knife/stone, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) "WG" = ( @@ -11750,7 +11750,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "Xk" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/church) "Xl" = ( @@ -12029,7 +12029,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "YW" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, diff --git a/_maps/map_files/old_maps/roguetown5.dmm b/_maps/map_files/old_maps/roguetown5.dmm deleted file mode 100644 index 9cd6ada6a0..0000000000 --- a/_maps/map_files/old_maps/roguetown5.dmm +++ /dev/null @@ -1,109583 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/open/water/river, -/area/rogue/under/town/sewer) -"ab" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 4 - }, -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"ac" = ( -/obj/structure/closet/crate/chest, -/obj/item/needle/thorn, -/obj/item/needle/thorn, -/obj/item/needle/thorn, -/obj/item/needle/thorn, -/obj/item/needle/thorn, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"ad" = ( -/turf/closed/mineral/random/rogue/high, -/area/rogue/under/cave) -"ae" = ( -/turf/open/floor/rogue/blocks{ - icon_state = "newstone2" - }, -/area/rogue/under/town/basement) -"af" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"ag" = ( -/obj/structure/plasticflaps, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"ah" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"ai" = ( -/obj/item/rope, -/obj/structure/fluff/wallclock/r, -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"aj" = ( -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/dwarfin) -"ak" = ( -/turf/open/water/cleanshallow, -/area/rogue/outdoors/rtfield) -"al" = ( -/obj/structure/flora/roguegrass/water/reeds, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/rtfield) -"am" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/wolf{ - del_on_deaggro = 0 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"an" = ( -/obj/structure/closet/crate/chest, -/obj/item/natural/feather, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"ao" = ( -/obj/structure/fluff/clock, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"ap" = ( -/obj/structure/flora/roguegrass/water, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/rtfield) -"aq" = ( -/obj/machinery/light/rogue/oven/south, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/tavern) -"ar" = ( -/obj/structure/kneestingers, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/rtfield) -"as" = ( -/turf/closed/mineral/rogue, -/area/rogue/under/cave) -"at" = ( -/obj/structure/stairs/fancy/l{ - icon_state = "fancy_stairs_l"; - dir = 1 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"au" = ( -/obj/item/roguegem, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"av" = ( -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/vault) -"aw" = ( -/obj/structure/fluff/statue/knight, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"ax" = ( -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/vault) -"ay" = ( -/obj/structure/fluff/clock, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"az" = ( -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/rogue/tile{ - icon_state = "glyph4" - }, -/area/rogue/indoors/town/vault) -"aA" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 4 - }, -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) -"aB" = ( -/turf/open/floor/rogue/tile{ - icon_state = "glyph5" - }, -/area/rogue/indoors/town/vault) -"aC" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"aD" = ( -/obj/structure/closet/crate/chest, -/obj/item/rope/chain, -/obj/item/rope/chain, -/obj/item/rogueweapon/mace/cudgel, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"aE" = ( -/obj/structure/closet/crate/chest/lootbox, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"aF" = ( -/obj/structure/fluff/walldeco/painting{ - pixel_y = 32 - }, -/turf/open/floor/rogue/tile{ - icon_state = "glyph6" - }, -/area/rogue/indoors/town/vault) -"aG" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/item/roguecoin/gold/pile, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/vault) -"aH" = ( -/turf/open/floor/rogue/tile{ - icon_state = "linoleum" - }, -/area/rogue/indoors/town/vault) -"aI" = ( -/obj/structure/bars/grille, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/garrison) -"aJ" = ( -/turf/open/floor/rogue/tile{ - icon_state = "glyph1" - }, -/area/rogue/indoors/town/vault) -"aK" = ( -/turf/open/floor/rogue/tile{ - icon_state = "glyph2" - }, -/area/rogue/indoors/town/vault) -"aL" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/rogue/instrument/drum, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"aM" = ( -/turf/open/floor/rogue/tile{ - icon_state = "glyph3" - }, -/area/rogue/indoors/town/vault) -"aN" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/xylix, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"aO" = ( -/turf/closed/wall/mineral/rogue/wood, -/area/rogue/indoors/town/shop) -"aP" = ( -/obj/structure/closet/dirthole/grave, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"aQ" = ( -/obj/structure/closet/crate/chest, -/obj/item/book/rogue/law, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"aR" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/obj/item/paper/scroll, -/obj/item/natural/feather, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"aS" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_y = 32 - }, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/manor) -"aT" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/rtfield) -"aU" = ( -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/tile{ - icon_state = "linoleum" - }, -/area/rogue/indoors/town/vault) -"aV" = ( -/obj/item/roguestatue/gold/loot, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/vault) -"aW" = ( -/obj/item/roguecoin/gold/pile, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/vault) -"aX" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/under/cave) -"aY" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"aZ" = ( -/turf/open/floor/rogue/volcanic, -/area/rogue/under/cave) -"ba" = ( -/turf/open/lava, -/area/rogue/under/cave) -"bb" = ( -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/indoors/town/cell) -"be" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"bf" = ( -/obj/structure/bars, -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/indoors/town/cell) -"bg" = ( -/obj/effect/landmark/start/squire{ - icon_state = "arrow"; - dir = 4 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"bh" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "dungeon" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"bi" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town/cell) -"bj" = ( -/obj/structure/fluff/walldeco/chains, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/cell) -"bk" = ( -/obj/structure/bed/rogue, -/obj/effect/landmark/start/prisoner, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/cell) -"bl" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/under/town/basement) -"bm" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/cell) -"bn" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"bo" = ( -/obj/item/roguebin, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"bq" = ( -/turf/open/floor/rogue/wood, -/area/rogue/under/town/basement) -"br" = ( -/turf/closed/wall/mineral/rogue/decostone/cand, -/area/rogue/indoors/town/manor) -"bt" = ( -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/cell) -"bu" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/cave) -"bv" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/cell) -"bw" = ( -/obj/effect/landmark/mapGenerator/rogue/cave{ - endTurfX = 128; - endTurfY = 128 - }, -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/cave) -"bx" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"by" = ( -/obj/structure/closet/crate/chest, -/obj/item/clothing/mask/cigarette/pipe, -/obj/item/clothing/mask/cigarette/pipe/westman, -/obj/machinery/light/rogue/wallfire/candle/blue/l, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"bz" = ( -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/cell) -"bA" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"bB" = ( -/obj/structure/mirror{ - pixel_y = 28 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/cell) -"bC" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/cell) -"bD" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/cell) -"bE" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"bF" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/natural/cloth, -/obj/item/rogue/instrument/lute, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/cell) -"bG" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/candle/yellow, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/cell) -"bH" = ( -/obj/structure/closet/crate/chest, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/cell) -"bI" = ( -/obj/structure/chair/wood/rogue/fancy, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"bJ" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/cell) -"bK" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"bL" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town/magician) -"bM" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/cell) -"bN" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/natural/cloth, -/obj/item/rogue/instrument/flute, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/cell) -"bO" = ( -/obj/structure/closet/crate/chest, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/cell) -"bP" = ( -/obj/structure/closet/crate/chest, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/dwarfin) -"bQ" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/structure/mirror{ - pixel_y = 28 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/cell) -"bR" = ( -/obj/item/paper/scroll, -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 1 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"bS" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/manor) -"bT" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/cell) -"bU" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"bV" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/turf/open/floor/carpet/purple, -/area/rogue/under/town/basement) -"bW" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/under/town/basement) -"bX" = ( -/turf/open/water/cleanshallow, -/area/rogue/under/town/sewer) -"bY" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath) -"bZ" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"ca" = ( -/obj/item/reagent_containers/powder/salt, -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"cb" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/dwarfin) -"cc" = ( -/obj/structure/fluff/walldeco/chains, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"cd" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"cf" = ( -/obj/effect/landmark/mapGenerator/rogue/cave/lava{ - startTurfY = 141; - endTurfX = 54 - }, -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/cave) -"cg" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"ch" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"ci" = ( -/obj/structure/table/wood, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"cj" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) -"ck" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 4; - icon_state = "donjondir"; - locked = 1; - lockid = "dungeon" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"cl" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"cn" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcr"; - locked = 1; - lockid = "sheriff" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/garrison) -"co" = ( -/obj/structure/table/wood, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"cp" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"cq" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"cr" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"cs" = ( -/obj/machinery/light/rogue/chand{ - pixel_x = -10 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church) -"ct" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/blocks{ - icon_state = "bluestone" - }, -/area/rogue/under/town/basement) -"cu" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/turf/open/floor/rogue/blocks{ - icon_state = "bluestone" - }, -/area/rogue/under/town/basement) -"cv" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"cw" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/shop) -"cx" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/toy/snappop, -/obj/item/toy/snappop, -/turf/open/floor/rogue/wood, -/area/rogue/under/town/basement) -"cy" = ( -/obj/machinery/light/rogue/torchholder/l, -/turf/open/floor/rogue/carpet/lord/left, -/area/rogue/indoors/town/manor) -"cz" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/wood, -/area/rogue/under/town/basement) -"cA" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 1; - icon_state = "wooddir"; - locked = 0 - }, -/turf/open/floor/rogue/wood, -/area/rogue/under/town/basement) -"cB" = ( -/obj/structure/rack/rogue, -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/turf/open/floor/rogue/wood, -/area/rogue/under/town/basement) -"cC" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/reagent_containers/powder/salt, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"cD" = ( -/obj/structure/closet/crate/chest, -/obj/item/rogueweapon/huntingknife/cleaver, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"cE" = ( -/obj/structure/rack/rogue, -/obj/item/natural/cloth, -/obj/item/natural/cloth, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"cF" = ( -/obj/item/storage/roguebag, -/turf/open/floor/rogue/blocks/paving/vert, -/area/rogue/under/town/basement) -"cG" = ( -/obj/item/chair/rogue, -/turf/open/floor/rogue/blocks/paving/vert, -/area/rogue/under/town/basement) -"cH" = ( -/obj/structure/closet/crate/chest{ - lockid = "priest" - }, -/obj/item/clothing/cloak/stole/red, -/obj/item/clothing/cloak/chasuble, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/church) -"cI" = ( -/obj/structure/closet/crate/chest, -/obj/item/toy/cards/deck/syndicate, -/turf/open/floor/rogue/wood, -/area/rogue/under/town/basement) -"cJ" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"cK" = ( -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town/roofs) -"cM" = ( -/obj/machinery/light/rogue/torchholder/r, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"cO" = ( -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor) -"cP" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"cR" = ( -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) -"cS" = ( -/turf/closed/wall/mineral/rogue/decostone/long, -/area/rogue/indoors/town/manor) -"cT" = ( -/turf/closed/mineral/rogue, -/area/rogue/outdoors/rtfield) -"cU" = ( -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"cV" = ( -/obj/structure/closet/crate/roguecloset, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"cW" = ( -/obj/machinery/light/rogue/wallfire, -/turf/closed/wall/mineral/rogue/decostone/long{ - icon_state = "decostone-l"; - dir = 1 - }, -/area/rogue/indoors/town/manor) -"cX" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"cY" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 1 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"cZ" = ( -/obj/structure/fluff/walldeco/painting/queen, -/turf/closed/wall/mineral/rogue/decostone, -/area/rogue/indoors/town/manor) -"da" = ( -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town/manor) -"db" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/paper/scroll, -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/dwarfin) -"dc" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/reagent_containers/food/condiment/peppermill, -/obj/item/cooking/pan, -/turf/open/floor/rogue/tile{ - icon_state = "linoleum" - }, -/area/rogue/indoors/town/manor) -"dd" = ( -/obj/structure/flora/roguegrass/bush/wall/tall, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town/manor) -"de" = ( -/obj/structure/bars, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"df" = ( -/obj/item/reagent_containers/glass/cup/wooden, -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 1 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"dg" = ( -/obj/structure/fluff/walldeco/chains, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/cell) -"dh" = ( -/obj/structure/bars/cemetery, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town/manor) -"di" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" - }, -/area/rogue/outdoors/town/roofs) -"dj" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/cell) -"dk" = ( -/obj/structure/rogue/trophy/deer, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"dl" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"dm" = ( -/obj/machinery/light/rogue/wallfire/candle, -/obj/structure/closet/crate/drawer, -/obj/item/storage/belt/rogue/pouch/coins/mid, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"dn" = ( -/obj/structure/bookcase, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"do" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"dp" = ( -/obj/structure/fluff/clock, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"dq" = ( -/obj/structure/fluff/walldeco/bigpainting, -/obj/structure/closet/crate/roguecloset, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/natural/feather, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"dr" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"ds" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/church) -"dt" = ( -/obj/structure/chair/bench/throne, -/obj/effect/landmark/start/prince, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"du" = ( -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/church) -"dv" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/church) -"dw" = ( -/obj/structure/roguethrone{ - pixel_x = -32 - }, -/obj/effect/landmark/start/lord, -/obj/structure/roguemachine/titan{ - density = 0; - pixel_y = 32 - }, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor) -"dx" = ( -/obj/structure/roguemachine/mail, -/obj/structure/table/wood, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"dy" = ( -/obj/structure/table/wood, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"dz" = ( -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/manor) -"dA" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"dB" = ( -/obj/structure/bed/rogue/inn/double, -/obj/item/bedsheet/rogue/fabric_double, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor) -"dC" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcv"; - locked = 1; - lockid = "manor" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"dD" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 1; - icon_state = "donjondir"; - locked = 1; - lockid = "manor" - }, -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) -"dE" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"dF" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor) -"dG" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"dI" = ( -/obj/structure/table/wood{ - icon_state = "map3" - }, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor) -"dJ" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 8 - }, -/area/rogue/outdoors/mountains) -"dK" = ( -/obj/structure/closet/crate/chest, -/obj/item/ingot/iron, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/dwarfin) -"dL" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"dM" = ( -/obj/effect/landmark/events/testportal{ - aportalloc = "manor" - }, -/turf/open/floor/rogue/tile/masonic{ - dir = 1 - }, -/area/rogue/indoors/town/manor) -"dN" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"dO" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"dP" = ( -/obj/item/book/rogue/law, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"dQ" = ( -/obj/machinery/light/rogue/hearth, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"dR" = ( -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"dS" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"dT" = ( -/obj/structure/table/wood, -/obj/structure/bars{ - icon_state = "barsbent"; - layer = 2.81 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/dwarfin) -"dU" = ( -/obj/structure/closet/crate/roguecloset, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"dV" = ( -/turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/town/roofs) -"dW" = ( -/obj/item/natural/stone, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"dX" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church) -"dY" = ( -/obj/structure/roguemachine/scomm/l, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"dZ" = ( -/obj/structure/flora/roguetree/evil, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) -"ea" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 4 - }, -/area/rogue/outdoors/mountains) -"eb" = ( -/obj/structure/chair/bench/coucha, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"ec" = ( -/obj/structure/table/wood, -/obj/item/natural/feather, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"ed" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town/magician) -"ee" = ( -/obj/structure/chair/bench/coucha/r, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"eg" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 - }, -/obj/item/paper/scroll, -/obj/item/natural/feather, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"eh" = ( -/obj/structure/bookcase, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"ei" = ( -/turf/open/floor/rogue/twig, -/area/rogue/outdoors/town) -"ej" = ( -/obj/structure/lever/wall{ - pixel_x = 32; - redstone_id = "tourneybottom" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"ek" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_y = 32 - }, -/turf/open/floor/rogue/tile/masonic{ - dir = 1 - }, -/area/rogue/indoors/town/manor) -"el" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"em" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"en" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/manor) -"eo" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/candle/skull, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"ep" = ( -/obj/structure/fluff/walldeco/stone{ - pixel_x = -32; - pixel_y = 0 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"eq" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/dwarfin) -"er" = ( -/obj/structure/mineral_door/wood{ - locked = 0; - lockid = "tavern"; - name = "MEETING ROOM" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/tavern) -"es" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"et" = ( -/obj/effect/landmark/start/butler{ - icon_state = "arrow"; - dir = 8 - }, -/turf/open/floor/rogue/tile{ - icon_state = "linoleum" - }, -/area/rogue/indoors/town/manor) -"eu" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"ew" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/candle/yellow, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/tavern) -"ex" = ( -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/church/chapel) -"ey" = ( -/obj/structure/chair/bench/couch, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"ez" = ( -/obj/structure/fermenting_barrel, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"eA" = ( -/obj/structure/fluff/walldeco/rpainting{ - pixel_x = -32 - }, -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"eB" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"eD" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"eE" = ( -/obj/structure/closet/crate/roguecloset, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"eF" = ( -/obj/structure/fluff/psycross/crafted, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"eG" = ( -/obj/structure/chair/bench, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/manor) -"eH" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"eI" = ( -/obj/structure/flora/newtree, -/obj/structure/flora/newtree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) -"eJ" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"eK" = ( -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield) -"eL" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/manor) -"eM" = ( -/obj/structure/fluff/railing/wood{ - icon_state = "woodrailing"; - dir = 8; - pixel_y = -1 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"eN" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"eO" = ( -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) -"eP" = ( -/obj/structure/table/wood, -/obj/item/restraints/legcuffs/beartrap, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"eQ" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/town) -"eR" = ( -/obj/structure/flora/roguegrass/bush/wall, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"eS" = ( -/obj/structure/chair/bench, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"eT" = ( -/obj/structure/roguemachine/scomm/r, -/turf/open/floor/rogue/blocks{ - icon_state = "bluestone" - }, -/area/rogue/under/town/basement) -"eU" = ( -/obj/structure/fluff/railing/wood{ - icon_state = "woodrailing"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"eV" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town/magician) -"eW" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town/magician) -"eX" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcv"; - locked = 1; - lockid = "tower" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/magician) -"eY" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/dwarfin) -"eZ" = ( -/obj/structure/roguemachine/mail/l, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town/magician) -"fa" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/obj/item/paper, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"fb" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 1; - icon_state = "donjondir"; - lockid = "manor" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor) -"fc" = ( -/obj/structure/bars/grille, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"fd" = ( -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town/magician) -"fe" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/magician) -"ff" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/magician) -"fg" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor) -"fh" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor) -"fi" = ( -/obj/structure/table/wood, -/obj/structure/fluff/wallclock, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"fj" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"fk" = ( -/obj/structure/closet/crate/roguecloset, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/magician) -"fl" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) -"fm" = ( -/obj/structure/lever{ - redstone_id = "gatelava" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor) -"fn" = ( -/obj/structure/fluff/railing/wood, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"fo" = ( -/turf/closed/wall/mineral/rogue/decostone/long{ - icon_state = "decostone-l"; - dir = 1 - }, -/area/rogue/indoors/town/church) -"fp" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/magician) -"fq" = ( -/obj/structure/gate{ - gid = "keepin" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor) -"fr" = ( -/turf/open/floor/rogue/blocks{ - icon_state = "paving" - }, -/area/rogue/under/town/basement) -"fs" = ( -/obj/structure/fluff/walldeco/wantedposter{ - pixel_x = -32 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/town) -"ft" = ( -/obj/item/book/rogue/law, -/obj/structure/bed/rogue, -/obj/effect/landmark/start/guardsman, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"fu" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/dwarfin) -"fv" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/tavern) -"fw" = ( -/obj/structure/fluff/wallclock, -/obj/structure/chair/bench/couch, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"fx" = ( -/obj/structure/fluff/railing/wood{ - icon_state = "woodrailing"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"fy" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"fz" = ( -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/outdoors/town) -"fA" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"fB" = ( -/obj/structure/floordoor/gatehatch/outer{ - redstone_id = "gatelava" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"fC" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 4 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"fD" = ( -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/shop) -"fE" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"fF" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/manor) -"fG" = ( -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/under/town/basement) -"fH" = ( -/obj/structure/floordoor/gatehatch/inner{ - redstone_id = "gatelava" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"fI" = ( -/obj/structure/floordoor/gatehatch/inner{ - redstone_id = "gatelava" - }, -/obj/structure/kybraxor{ - pixel_x = -32; - pixel_y = -32 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"fJ" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"fK" = ( -/obj/structure/bed/rogue, -/obj/effect/landmark/start/guardsman, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"fL" = ( -/obj/structure/bed/rogue, -/obj/effect/landmark/start/guardsman{ - icon_state = "arrow"; - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"fM" = ( -/obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 1 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/garrison) -"fN" = ( -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"fO" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"fP" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"fQ" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town) -"fR" = ( -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/church) -"fS" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town/church) -"fT" = ( -/obj/structure/fluff/walldeco/stone, -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/indoors/town/bath) -"fU" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 - }, -/turf/open/floor/rogue/churchmarble, -/area/rogue/indoors/town/church) -"fV" = ( -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church) -"fW" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/magician) -"fX" = ( -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"fY" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 4 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"fZ" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/church) -"ga" = ( -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/church) -"gb" = ( -/obj/structure/closet/crate/chest, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/butter, -/obj/item/reagent_containers/food/snacks/rogue/meat/sausage, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/church) -"gc" = ( -/obj/structure/table/wood, -/obj/item/clothing/neck/roguetown/psycross, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/church) -"gd" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/turf/open/floor/rogue/tile/tilerg, -/area/rogue/indoors/town) -"ge" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/tongs, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/dwarfin) -"gf" = ( -/obj/structure/table/wood{ - icon_state = "map2" - }, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor) -"gg" = ( -/obj/structure/roguemachine/atm{ - pixel_y = 0; - pixel_x = 32 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor) -"gh" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/indoors/town/church) -"gi" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/bath) -"gj" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/mountains) -"gk" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town/dwarfin) -"gl" = ( -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/indoors/town/dwarfin) -"gm" = ( -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/bath) -"gn" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"go" = ( -/obj/structure/chair/bench/couchablack, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/bath) -"gp" = ( -/obj/structure/chair/bench/couchablack/r, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/bath) -"gq" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"gr" = ( -/obj/structure/fluff/walldeco/maidensigil, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"gs" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"gt" = ( -/obj/structure/fluff/wallclock/r, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/dwarfin) -"gu" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"gv" = ( -/obj/structure/lever/wall{ - dir = 8; - redstone_id = "stewardshutter" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"gw" = ( -/obj/structure/chair/bench/ultimacouch, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) -"gx" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/quiver/bolts, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"gy" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/dwarfin) -"gz" = ( -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/manor) -"gB" = ( -/obj/structure/chair/bench/ultimacouch/r{ - icon_state = "ultimacochright" - }, -/obj/effect/landmark/start/nightmaiden, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) -"gC" = ( -/obj/machinery/light/rogue/chand, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor) -"gD" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/tile/tilerg, -/area/rogue/indoors/town) -"gE" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/indoors/town/church) -"gF" = ( -/obj/item/roguebin/trash, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"gG" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/bath) -"gH" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"gI" = ( -/obj/structure/table/vtable, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/bath) -"gJ" = ( -/obj/structure/fluff/clock, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/magician) -"gK" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/roguekey/vault, -/turf/open/floor/rogue/tile/tilerg, -/area/rogue/indoors/town) -"gL" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 - }, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) -"gM" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 - }, -/obj/item/reagent_containers/glass/cup/steel, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) -"gN" = ( -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) -"gO" = ( -/obj/structure/chair/bench/couchablack, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) -"gP" = ( -/obj/structure/chair/bench/couchablack/r, -/obj/structure/fluff/walldeco/maidendrape, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) -"gQ" = ( -/obj/structure/fluff/walldeco/maidensigil, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) -"gS" = ( -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) -"gT" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 5 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"gU" = ( -/turf/open/water/bath, -/area/rogue/indoors/town/church) -"gV" = ( -/obj/structure/table/wood, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"gW" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 - }, -/obj/item/reagent_containers/food/snacks/rogue/meat/salami, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) -"gX" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 4 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) -"gY" = ( -/obj/structure/chair/wood, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"gZ" = ( -/obj/structure/table/wood/treestump/burnt, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield) -"ha" = ( -/obj/structure/bars/pipe, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"hb" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"hc" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/town/roofs) -"hd" = ( -/obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 4; - locked = 1 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"he" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) -"hf" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 8 - }, -/obj/effect/landmark/start/nightmaiden{ - dir = 8 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"hg" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 - }, -/obj/item/soap, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath) -"hh" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_y = 32 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"hi" = ( -/obj/structure/plasticflaps, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"hj" = ( -/obj/structure/bed/rogue/shit, -/obj/effect/landmark/start/butler, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"hk" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/bath) -"hl" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/obj/item/natural/feather, -/obj/item/candle/yellow, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"hm" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"hn" = ( -/obj/structure/closet/crate/chest, -/obj/structure/feedinghole, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"ho" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/blocks{ - icon_state = "paving-t" - }, -/area/rogue/indoors/town/church) -"hp" = ( -/obj/machinery/light/rogue/hearth, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/magician) -"hq" = ( -/obj/structure/floordoor{ - redstone_id = "thronegrille" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor) -"hr" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 8; - icon_state = "donjondir"; - locked = 1; - lockid = "garrison"; - max_integrity = 9999 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"hs" = ( -/turf/closed/mineral/rogue, -/area/rogue/outdoors/town) -"ht" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/outdoors/rtfield) -"hu" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/dwarfin) -"hv" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"hw" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/magician) -"hx" = ( -/obj/structure/mineral_door/wood/deadbolt, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"hy" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"hz" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"hA" = ( -/turf/closed/wall/mineral/rogue/roofwall/center, -/area/rogue/outdoors/mountains) -"hB" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"hC" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"hD" = ( -/obj/item/chair/rogue/fancy, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath) -"hE" = ( -/obj/structure/closet/crate/chest, -/obj/item/rope/chain, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"hF" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcv"; - locked = 1; - lockid = "manor" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"hG" = ( -/obj/item/chair/rogue, -/obj/effect/decal/cleanable/blood/old, -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"hH" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"hI" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 9 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"hJ" = ( -/obj/structure/bookcase, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"hK" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"hL" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/reagent_containers/powder/ozium, -/obj/item/clothing/under/roguetown/loincloth/brown, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"hM" = ( -/obj/structure/bars, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"hN" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/item/rogueweapon/thresher, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"hO" = ( -/obj/structure/roguemachine/scomm/r, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"hP" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/outdoors/rtfield) -"hQ" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor) -"hR" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - lockid = "priest" - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/church) -"hS" = ( -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/manor) -"hT" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"hU" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/outdoors/rtfield) -"hV" = ( -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) -"hW" = ( -/obj/item/flashlight/flare/torch/lantern, -/obj/structure/table/wood, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/dwarfin) -"hX" = ( -/obj/structure/chair/bench/coucha, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/bath) -"hY" = ( -/obj/structure/chair/bench/coucha/r, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/bath) -"hZ" = ( -/obj/machinery/light/rogue/hearth, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor) -"ia" = ( -/obj/structure/closet/crate/roguecloset/inn/south, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) -"ib" = ( -/obj/item/rogueweapon/mace/woodclub, -/turf/open/floor/rogue/cobblerock, -/area/rogue/under/town/basement) -"ic" = ( -/obj/structure/fluff/walldeco/stone, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town) -"id" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"ie" = ( -/obj/structure/well, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"if" = ( -/obj/structure/plasticflaps, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"ig" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"ih" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"ii" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) -"ij" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/tavern) -"ik" = ( -/obj/structure/closet/crate/roguecloset, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"il" = ( -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/dwarfin) -"im" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 1 - }, -/area/rogue/outdoors/mountains) -"in" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) -"io" = ( -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/bath) -"ip" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"iq" = ( -/obj/structure/fluff/walldeco/customflag, -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/under/town/basement) -"ir" = ( -/obj/item/rogueweapon/stoneaxe/woodcut, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"is" = ( -/obj/structure/fluff/walldeco/steward{ - icon_state = "steward"; - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"it" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 32 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/garrison) -"iu" = ( -/obj/structure/chair/wood, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town) -"iv" = ( -/obj/structure/roguemachine/atm, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town) -"iw" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 4 - }, -/area/rogue/outdoors/mountains) -"ix" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"iy" = ( -/obj/structure/roguemachine/vendor, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/shop) -"iz" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"iA" = ( -/turf/closed/wall/mineral/rogue/decostone, -/area/rogue/indoors/town/manor) -"iB" = ( -/obj/structure/table/wood, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"iC" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/paper/scroll, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"iD" = ( -/obj/item/paper/confession, -/obj/item/paper/confession, -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"iF" = ( -/obj/structure/fermenting_barrel, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"iG" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/under/town/basement) -"iH" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 1; - icon_state = "donjondir"; - locked = 1; - lockid = "nightmaiden" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) -"iK" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"iL" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"iM" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - lockid = "confession" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"iN" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/town) -"iO" = ( -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/storage/belt/rogue/pouch/coins/poor, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town) -"iP" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 2 - }, -/area/rogue/outdoors/town/roofs) -"iQ" = ( -/obj/structure/table/wood{ - icon_state = "tablewood3" - }, -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) -"iR" = ( -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town) -"iT" = ( -/turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_line" - }, -/area/rogue/indoors/town/dwarfin) -"iU" = ( -/obj/structure/closet/crate/chest, -/obj/item/needle, -/obj/item/needle, -/obj/item/needle, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"iV" = ( -/obj/structure/closet/crate/chest, -/obj/item/natural/cloth, -/obj/item/natural/cloth, -/obj/item/natural/cloth, -/obj/item/natural/cloth, -/obj/item/natural/cloth, -/obj/item/natural/cloth, -/obj/item/natural/cloth, -/obj/item/reagent_containers/powder/ozium, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"iW" = ( -/obj/structure/bars, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"iX" = ( -/obj/structure/fermenting_barrel/random/water, -/obj/item/reagent_containers/glass/cup/steel, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"iY" = ( -/obj/structure/fluff/walldeco/customflag, -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/indoors/town) -"iZ" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/outdoors/town) -"ja" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "manor" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"jb" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "blacksmith" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/dwarfin) -"jc" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"jd" = ( -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/tile/tilerg, -/area/rogue/indoors/town/manor) -"je" = ( -/obj/machinery/light/rogue/torchholder/r, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"jf" = ( -/obj/effect/landmark/start/steward, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"jg" = ( -/obj/structure/fluff/walldeco/maidendrape, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"jh" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/clothing/mask/cigarette/pipe, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/garrison) -"ji" = ( -/obj/structure/fluff/walldeco/wantedposter, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"jj" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"jk" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/manor) -"jl" = ( -/obj/structure/bars/passage{ - redstone_id = "tourneybottom" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/under/town/basement) -"jm" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"jn" = ( -/obj/structure/fluff/statue/gargoyle/moss/candles, -/obj/machinery/light/rogue/torchholder, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"jo" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/outdoors/mountains) -"jp" = ( -/obj/structure/closet/crate/chest, -/obj/item/rope/chain, -/obj/item/rope/chain, -/obj/item/rope/chain, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"jq" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors/town/garrison) -"jr" = ( -/obj/machinery/light/rogue/wallfire/candle/blue/l, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/bath) -"js" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath) -"jt" = ( -/obj/structure/closet/crate/chest, -/obj/item/rogueweapon/hammer, -/obj/item/rogueweapon/hammer, -/obj/item/rogueweapon/hammer, -/obj/item/rogueweapon/hammer, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"ju" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"jv" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 1; - icon_state = "donjondir"; - locked = 1; - lockid = "dungeon" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"jw" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/candle/yellow, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath) -"jx" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"jy" = ( -/obj/structure/fluff/psycross, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"jz" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/bath) -"jA" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomiii"; - name = "ROOM III" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/tavern) -"jB" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 26 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"jC" = ( -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"jD" = ( -/obj/item/clothing/cloak/half, -/obj/structure/closet/crate/roguecloset, -/obj/item/rope/chain, -/obj/item/rope/chain, -/obj/item/rope/chain, -/obj/item/rope, -/obj/item/rope, -/obj/item/rope, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"jE" = ( -/obj/item/flashlight/flare/torch/lantern, -/obj/item/flashlight/flare/torch/metal, -/obj/item/flashlight/flare/torch/metal, -/obj/structure/closet/crate/roguecloset, -/obj/item/storage/backpack/rogue/satchel, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"jF" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"jG" = ( -/obj/structure/table/wood, -/obj/item/roguekey/nightmaiden, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"jH" = ( -/obj/structure/fluff/clock, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/town) -"jI" = ( -/obj/item/flashlight/flare/torch/lantern, -/obj/structure/closet/crate/roguecloset, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"jJ" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/town) -"jK" = ( -/obj/item/paper/confession, -/obj/item/paper/confession, -/obj/item/paper/confession, -/obj/item/paper/confession, -/obj/item/paper/confession, -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"jL" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "tavern" - }, -/turf/open/floor/rogue/greenstone, -/area/rogue/under/town/basement) -"jM" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/garrison) -"jN" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"jO" = ( -/obj/structure/spider/stickyweb, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"jP" = ( -/obj/item/roguecoin/gold, -/turf/open/water/cleanshallow, -/area/rogue/under/cave) -"jQ" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/shop) -"jR" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/turf/open/floor/rogue/tile{ - icon_state = "linoleum" - }, -/area/rogue/indoors/town/shop) -"jS" = ( -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/indoors/town/shop) -"jT" = ( -/obj/structure/bars/passage/shutter{ - redstone_id = "warehouse_shutter" - }, -/turf/open/floor/rogue/blocks/bluestone, -/area/rogue/indoors/town/shop) -"jU" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/shop) -"jV" = ( -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor) -"jW" = ( -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors/town/garrison) -"jY" = ( -/obj/structure/chair/bench, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"jZ" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/under/town/basement) -"ka" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/tavern) -"kb" = ( -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/shop) -"kc" = ( -/turf/open/floor/rogue/blocks/bluestone, -/area/rogue/indoors/town/shop) -"kd" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/magician) -"ke" = ( -/obj/structure/closet/crate/chest, -/obj/item/grown/log/tree/stick, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/dwarfin) -"kf" = ( -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/shop) -"kg" = ( -/obj/structure/lever/wall{ - pixel_x = 32; - redstone_id = "warehouse_shutter" - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/shop) -"kh" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/garrison) -"ki" = ( -/obj/structure/closet/crate/chest, -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"kj" = ( -/obj/structure/well, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"kk" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/blocks{ - icon_state = "newstone2" - }, -/area/rogue/under/town/basement) -"kl" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"km" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/shop) -"kn" = ( -/obj/structure/closet/crate/roguecloset, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/shop) -"ko" = ( -/obj/effect/landmark/start/gravedigger, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"kp" = ( -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"kq" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"kr" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/burial_shroud, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"ks" = ( -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/rogue/blocks{ - icon_state = "bluestone" - }, -/area/rogue/under/town/basement) -"kt" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) -"ku" = ( -/obj/machinery/light/rogue/wallfire/candle/blue/r, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"kv" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town) -"kw" = ( -/obj/structure/roguemachine/mail, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"kx" = ( -/obj/structure/closet/crate/chest, -/obj/item/reagent_containers/food/snacks/rogue/meat/poultry, -/turf/open/floor/rogue/blocks{ - icon_state = "newstone2" - }, -/area/rogue/under/town/basement) -"ky" = ( -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"kz" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/outdoors/town) -"kA" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town/roofs) -"kB" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"kC" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/cup/silver, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"kD" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"kE" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 4; - icon_state = "donjondir"; - lockid = "steward"; - locked = 1 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/shop) -"kF" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcv"; - locked = 1; - lockid = "mage" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/magician) -"kG" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/shop) -"kH" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 8 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"kI" = ( -/turf/open/floor/rogue/blocks/newstone/alt, -/area/rogue/indoors/town/warehouse) -"kJ" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/shop) -"kL" = ( -/obj/structure/closet/crate/roguecloset/dark, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/shop) -"kM" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/outdoors/town) -"kN" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town/tavern) -"kO" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "graveyard" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"kP" = ( -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town) -"kR" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) -"kS" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"kT" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/rtfield) -"kU" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/rtfield) -"kV" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"kW" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"kY" = ( -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"kZ" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"la" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"lb" = ( -/obj/structure/roguemachine/submission, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"ld" = ( -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"le" = ( -/obj/structure/closet/crate/chest, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/shop) -"lf" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"lg" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/shop) -"lh" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/shop) -"li" = ( -/turf/closed/wall/mineral/rogue/wood, -/area/rogue/indoors/town/tavern) -"lj" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/garrison) -"lk" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"ll" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"ln" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/shop) -"lp" = ( -/obj/structure/fluff/walldeco/customflag, -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/indoors/town/shop) -"lq" = ( -/obj/structure/flora/roguegrass/bush_meagre, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"lr" = ( -/obj/structure/fluff/walldeco/bsmith, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"ls" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"lt" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"lu" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"lv" = ( -/obj/structure/fluff/grindwheel, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"ly" = ( -/obj/structure/fluff/walldeco/customflag, -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/dwarfin) -"lz" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/dwarfin) -"lA" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/dwarf) -"lB" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"lC" = ( -/turf/closed/wall/mineral/rogue/wood, -/area/rogue/outdoors/town) -"lD" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/shop) -"lE" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/blocks{ - icon_state = "paving" - }, -/area/rogue/under/town/basement) -"lF" = ( -/obj/item/rogueweapon/shovel, -/turf/open/floor/rogue/blocks{ - icon_state = "bluestone" - }, -/area/rogue/under/town/basement) -"lG" = ( -/obj/structure/fluff/walldeco/goblet{ - icon_state = "goblet"; - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"lH" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"lI" = ( -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield) -"lJ" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town) -"lK" = ( -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/carpet/purple, -/area/rogue/indoors/town/shop) -"lL" = ( -/obj/structure/chair/bench/couch{ - icon_state = "redcouch2" - }, -/obj/structure/roguemachine/mail, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"lM" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/manor) -"lN" = ( -/obj/item/reagent_containers/glass/cup/silver, -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"lO" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/under/town/basement) -"lP" = ( -/obj/structure/closet/crate/roguecloset, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"lQ" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/dwarfin) -"lR" = ( -/obj/structure/chair/bench/ancientlog, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) -"lS" = ( -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) -"lT" = ( -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 1 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield) -"lU" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town/tavern) -"lV" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"lW" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"lX" = ( -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"lY" = ( -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"lZ" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/candle/skull/lit, -/turf/open/floor/carpet/purple, -/area/rogue/indoors/town/shop) -"mb" = ( -/obj/structure/closet/crate/chest, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/turf/open/floor/rogue/tile/tilerg, -/area/rogue/indoors/town/manor) -"mc" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/dwarf) -"md" = ( -/obj/structure/closet/crate/chest, -/obj/item/storage/roguebag, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/outdoors/town) -"me" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"mf" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave) -"mg" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/candle, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"mh" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/wood, -/area/rogue/under/town/basement) -"mi" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"mj" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"mk" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/dwarfin) -"ml" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"mm" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) -"mn" = ( -/obj/structure/mineral_door/wood{ - lockid = archive; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"mo" = ( -/obj/structure/rack/rogue, -/obj/item/paper/scroll, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/church) -"mp" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "garrison" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"mq" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/garrison) -"mr" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"mt" = ( -/obj/structure/closet/crate/roguecloset/lord, -/turf/open/floor/rogue/tile/tilerg, -/area/rogue/indoors/town/manor) -"mu" = ( -/obj/structure/fluff/statue/knight/r, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"mv" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"mw" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"mx" = ( -/obj/structure/bed/rogue, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town/dwarfin) -"my" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town/dwarfin) -"mz" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/candle/yellow, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town/dwarfin) -"mA" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/dwarfin) -"mB" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/dwarfin) -"mC" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"mE" = ( -/obj/structure/fluff/walldeco/masonflag{ - pixel_x = 32 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/dwarf) -"mH" = ( -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"mJ" = ( -/turf/open/floor/rogue/woodturned, -/area/rogue/outdoors/town/roofs) -"mK" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"mL" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town) -"mM" = ( -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors/town/magician) -"mN" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/shop) -"mO" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup, -/obj/item/reagent_containers/glass/cup/silver, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor) -"mP" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/natural/feather, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/shop) -"mQ" = ( -/obj/structure/gate{ - gid = "manorgate"; - redstone_id = "gatemanor" - }, -/turf/open/floor/rogue/carpet/lord/left, -/area/rogue/indoors/town/manor) -"mR" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/manor) -"mS" = ( -/obj/structure/roguemachine/scomm/r, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"mT" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"mU" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 4; - icon_state = "donjondir"; - lockid = "dungeon" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"mW" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"mY" = ( -/obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town/dwarfin) -"mZ" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/church) -"na" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/dwarf) -"nb" = ( -/obj/machinery/light/rogue/hearth, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town) -"nc" = ( -/obj/structure/fluff/millstone, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"nd" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"ne" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town) -"nf" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town) -"ng" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town) -"nh" = ( -/obj/structure/roguemachine/scomm/l, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"ni" = ( -/obj/structure/rack/rogue, -/obj/structure/fluff/wallclock, -/obj/item/storage/pill_bottle/dice, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/shop) -"nj" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 2 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"nk" = ( -/obj/structure/bars/passage/shutter/open{ - redstone_id = "stewardshutter" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town) -"nl" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town) -"nm" = ( -/obj/structure/closet/crate/roguecloset, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town) -"nn" = ( -/obj/structure/closet/crate/chest, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot, -/obj/item/reagent_containers/glass/bottle/rogue/manapot, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/shop) -"no" = ( -/obj/structure/closet/crate/chest, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/shop) -"np" = ( -/obj/structure/closet/crate/chest, -/obj/item/needle/thorn, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/shop) -"nq" = ( -/obj/structure/closet/crate/chest, -/obj/item/natural/cloth, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/shop) -"nr" = ( -/obj/structure/table/wood, -/obj/item/storage/roguebag, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/shop) -"ns" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle, -/area/rogue/indoors/town/shop) -"nt" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/candle/yellow/lit, -/obj/item/roguekey/manor, -/turf/open/floor/rogue/tile{ - icon_state = "linoleum" - }, -/area/rogue/indoors/town/manor) -"nu" = ( -/obj/structure/closet/crate/roguecloset, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town/dwarfin) -"nv" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomvi"; - name = "ROOM VI" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"nw" = ( -/obj/structure/mineral_door/wood, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town) -"nx" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"ny" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/outdoors/rtfield) -"nz" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "merchant" - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/shop) -"nA" = ( -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/outdoors/exposed/dwarf) -"nB" = ( -/obj/structure/closet/dirthole/closed/loot, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"nC" = ( -/obj/structure/mineral_door/wood/window{ - lockid = "tavern" - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"nD" = ( -/obj/structure/fluff/statue/gargoyle/moss, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/outdoors/exposed/dwarf) -"nE" = ( -/obj/structure/fluff/globe, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor) -"nF" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/outdoors/town) -"nG" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/outdoors/exposed/dwarf) -"nH" = ( -/obj/item/storage/roguebag, -/obj/structure/rack/rogue, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"nI" = ( -/obj/structure/closet/crate/roguecloset, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town) -"nJ" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor) -"nK" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town) -"nL" = ( -/obj/structure/bed/rogue, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town) -"nN" = ( -/obj/structure/closet/crate/chest, -/obj/item/flashlight/flare/torch/lantern, -/turf/open/floor/rogue/blocks{ - icon_state = "bluestone" - }, -/area/rogue/under/town/basement) -"nO" = ( -/obj/structure/mineral_door/wood, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town) -"nP" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/shop) -"nS" = ( -/turf/closed/wall/mineral/rogue/decostone/end{ - icon_state = "decostone-e"; - dir = 1 - }, -/area/rogue/indoors/town/manor) -"nT" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/under/town/basement) -"nU" = ( -/obj/structure/chair/bench{ - icon_state = "bench"; - dir = 1 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"nV" = ( -/obj/machinery/light/rogue/torchholder/r, -/turf/open/floor/rogue/carpet/lord/right, -/area/rogue/indoors/town/manor) -"nX" = ( -/obj/structure/fluff/walldeco/customflag, -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/shop) -"nY" = ( -/obj/structure/lever/wall{ - pixel_x = 32; - redstone_id = "warehouse_shutter" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"oa" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town) -"ob" = ( -/obj/structure/closet/crate/drawer, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town) -"oc" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/exposed/dwarf) -"od" = ( -/obj/structure/bed/rogue/wooldouble, -/obj/item/bedsheet/rogue/double_pelt, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town) -"oe" = ( -/obj/machinery/light/rogue/lanternpost{ - dir = 1 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) -"of" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"og" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) -"oh" = ( -/obj/structure/kneestingers, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) -"oi" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/natural/feather, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/magician) -"ok" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/mountains) -"ol" = ( -/obj/structure/kneestingers, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield) -"om" = ( -/obj/effect/landmark/events/haunts, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"on" = ( -/obj/structure/flora/roguegrass/bush_meagre, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"op" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/outdoors/town/roofs) -"oq" = ( -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/dwarfin) -"or" = ( -/turf/open/floor/rogue/blocks/paving, -/area/rogue/under/town/basement) -"os" = ( -/obj/structure/chair/wood/rogue/fancy, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"ot" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/roguekey/shop, -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/shop) -"ou" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 - }, -/obj/structure/fluff/walldeco/wantedposter{ - pixel_y = 32 - }, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"ov" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/manor) -"ow" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" - }, -/area/rogue/outdoors/town/roofs) -"ox" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"oy" = ( -/obj/structure/closet/crate/chest, -/obj/item/rogueore/coal, -/obj/item/rogueore/coal, -/obj/item/rogueore/coal, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/dwarfin) -"oz" = ( -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church/chapel) -"oA" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/shop) -"oB" = ( -/obj/machinery/light/rogue/wallfire, -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/manor) -"oC" = ( -/obj/item/natural/worms, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"oD" = ( -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"oE" = ( -/obj/structure/fluff/walldeco/painting{ - pixel_y = 32 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"oF" = ( -/obj/structure/bed/rogue, -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/shop) -"oG" = ( -/obj/machinery/light/rogue/firebowl/church, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"oH" = ( -/obj/structure/table/wood, -/obj/item/candle/yellow, -/turf/open/floor/rogue/blocks{ - icon_state = "newstone2" - }, -/area/rogue/indoors/town/church) -"oI" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town) -"oJ" = ( -/obj/machinery/light/rogue/firebowl/church, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"oK" = ( -/obj/structure/flora/newtree, -/obj/structure/flora/newtree, -/obj/structure/flora/newtree, -/obj/structure/flora/newtree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) -"oL" = ( -/obj/structure/chair/bench/ancientlog, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"oM" = ( -/obj/structure/mineral_door/wood/window{ - lockid = "tavern" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"oN" = ( -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/clothing/suit/roguetown/armor/gambeson/arming, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"oO" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town/roofs) -"oP" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"oQ" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/tile/masonic{ - dir = 4 - }, -/area/rogue/indoors/town/manor) -"oR" = ( -/obj/structure/fluff/walldeco/chains, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"oS" = ( -/obj/structure/bed/rogue, -/obj/effect/landmark/start/weaponsmith{ - icon_state = "arrow"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/dwarfin) -"oT" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/carpet/lord/right, -/area/rogue/indoors/town/manor) -"oU" = ( -/obj/structure/chair/bench/coucha, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor) -"oV" = ( -/obj/structure/chair/bench/coucha/r, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor) -"oW" = ( -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath) -"oX" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/clothing/suit/roguetown/shirt/shortshirt/random, -/obj/item/clothing/suit/roguetown/shirt/shortshirt/random, -/obj/item/clothing/under/roguetown/tights/random, -/obj/item/clothing/under/roguetown/tights/random, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"oY" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 1; - icon_state = "donjondir"; - locked = 1; - lockid = "nightmaiden" - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"oZ" = ( -/obj/structure/closet/crate/chest/lootbox, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"pa" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/obj/structure/table/wood, -/turf/open/floor/rogue/tile/tilerg, -/area/rogue/indoors/town) -"pb" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/outdoors/town/roofs) -"pc" = ( -/obj/machinery/light/rogue/wallfire/candle/blue/l, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"pd" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"pe" = ( -/obj/structure/bed/rogue/inn/double, -/obj/item/bedsheet/rogue/fabric_double, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"pf" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"pg" = ( -/obj/structure/plasticflaps, -/turf/open/floor/rogue/cobblerock, -/area/rogue/under/cave) -"ph" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 1 - }, -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/manor) -"pi" = ( -/obj/structure/chair/bench/couch{ - icon_state = "redcouch2" - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"pj" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/tile/masonic, -/area/rogue/indoors/town/manor) -"pl" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"pm" = ( -/obj/machinery/light/rogue/torchholder/l, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/dwarf) -"pn" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/candle/yellow, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"po" = ( -/obj/structure/closet/crate/chest, -/obj/item/rogueore/iron, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"pp" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 1 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"pq" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"pr" = ( -/obj/structure/mineral_door/wood/window{ - lockid = "sheriff" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/garrison) -"ps" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 1; - icon_state = "donjondir"; - locked = 1; - lockid = "nightmaiden" - }, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors/town/bath) -"pt" = ( -/obj/structure/fluff/walldeco/customflag, -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/manor) -"pu" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/manor) -"pv" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/machinery/light/rogue/wallfire/candle/blue, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/natural/feather, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors/town/magician) -"pw" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 8; - icon_state = "donjondir"; - locked = 1; - lockid = "steward" - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town) -"px" = ( -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/magician) -"py" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"pz" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcv"; - locked = 1; - lockid = "tower" - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/magician) -"pA" = ( -/turf/open/floor/carpet/purple, -/area/rogue/indoors/town/magician) -"pB" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/flashlight/flare/torch/lantern, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/dwarfin) -"pC" = ( -/obj/structure/roguewindow/stained, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/church) -"pD" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors/town/magician) -"pE" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/obj/structure/fluff/millstone{ - pixel_y = 7 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"pF" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/storage/belt/rogue/pouch/coins/poor, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/dwarfin) -"pG" = ( -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town/roofs) -"pH" = ( -/obj/machinery/light/rogue/wallfire/candle/blue/r, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors/town/magician) -"pI" = ( -/obj/machinery/light/rogue/wallfire/candle/blue/r, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town/magician) -"pK" = ( -/obj/machinery/light/rogue/smelter, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/dwarfin) -"pL" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"pM" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town/dwarfin) -"pN" = ( -/obj/structure/closet/crate/chest, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"pO" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/quiver/arrows, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"pP" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/gun/ballistic/revolver/grenadelauncher/bow, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"pQ" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"pR" = ( -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"pS" = ( -/obj/structure/mineral_door/wood, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"pT" = ( -/obj/structure/mineral_door/wood, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/manor) -"pV" = ( -/turf/closed/wall/mineral/rogue/decostone/long, -/area/rogue/indoors/town/church/chapel) -"pW" = ( -/turf/closed/wall/mineral/rogue/decostone, -/area/rogue/indoors/town/church/chapel) -"pX" = ( -/obj/structure/chair/wood, -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/effect/landmark/start/monk, -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church/chapel) -"pY" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/under/town/basement) -"pZ" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church/chapel) -"qa" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 2 - }, -/area/rogue/outdoors/mountains) -"qb" = ( -/obj/structure/fluff/psycross/copper, -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church/chapel) -"qc" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor) -"qd" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church/chapel) -"qe" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/obj/item/handheld_bell, -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church/chapel) -"qf" = ( -/obj/structure/lever/wall{ - pixel_x = 32; - redstone_id = "tourneytop" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"qg" = ( -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church/chapel) -"qh" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/tavern) -"qi" = ( -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church/chapel) -"qj" = ( -/obj/structure/fluff/statue/gargoyle/moss/candles, -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church/chapel) -"qk" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 1 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/garrison) -"ql" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - lockid = "priest" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/church) -"qm" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/church/chapel) -"qn" = ( -/obj/structure/fluff/walldeco/customflag, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/manor) -"qo" = ( -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/magician) -"qq" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 - }, -/obj/item/storage/belt/rogue/pouch, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"qr" = ( -/obj/structure/fluff/walldeco/customflag, -/turf/closed/wall/mineral/rogue/wood, -/area/rogue/indoors/town/manor) -"qs" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/mountains) -"qt" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/dwarf) -"qu" = ( -/obj/structure/flora/roguegrass/water/reeds, -/turf/open/water/sewer, -/area/rogue/outdoors/rtfield) -"qv" = ( -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church/chapel) -"qw" = ( -/obj/structure/fermenting_barrel/random/water, -/obj/machinery/light/rogue/wallfire/candle/blue/l, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"qx" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church/chapel) -"qy" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/effect/landmark/start/sapprentice{ - icon_state = "arrow"; - dir = 4 - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"qz" = ( -/obj/structure/bookcase, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"qA" = ( -/obj/structure/mineral_door/wood, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/church/chapel) -"qB" = ( -/turf/open/floor/rogue/tile/masonic{ - dir = 4 - }, -/area/rogue/indoors/town/manor) -"qC" = ( -/turf/closed/wall/mineral/rogue/wood, -/area/rogue/indoors/town/church/chapel) -"qD" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"qE" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - lockid = "hpriest" - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church/chapel) -"qF" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"qG" = ( -/turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_corner" - }, -/area/rogue/indoors/town/dwarfin) -"qH" = ( -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/indoors/town/manor) -"qI" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor) -"qJ" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"qK" = ( -/obj/structure/fluff/walldeco/church/line{ - icon_state = "churchslate"; - dir = 1 - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church/chapel) -"qM" = ( -/obj/structure/closet/crate/chest, -/obj/item/natural/cloth, -/obj/item/natural/cloth, -/obj/item/natural/cloth, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"qN" = ( -/obj/structure/fluff/walldeco/innsign{ - alpha = 200; - layer = 4.1; - level = 2; - pixel_y = -15 - }, -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/town/roofs) -"qO" = ( -/turf/open/floor/rogue/churchmarble, -/area/rogue/indoors/town/church/chapel) -"qP" = ( -/obj/effect/landmark/start/priest, -/turf/open/floor/rogue/churchmarble, -/area/rogue/indoors/town/church/chapel) -"qQ" = ( -/turf/closed/wall/mineral/rogue/decostone/end, -/area/rogue/indoors/town/manor) -"qR" = ( -/obj/effect/landmark/start/churchling{ - icon_state = "arrow"; - dir = 8 - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church/chapel) -"qS" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church/chapel) -"qT" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/dwarfin) -"qU" = ( -/obj/structure/fluff/walldeco/church/line{ - icon_state = "churchslate"; - dir = 1 - }, -/turf/open/floor/rogue/churchmarble, -/area/rogue/indoors/town/church/chapel) -"qV" = ( -/obj/structure/fluff/walldeco/church/line{ - icon_state = "churchslate"; - dir = 1 - }, -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/churchmarble, -/area/rogue/indoors/town/church/chapel) -"qW" = ( -/obj/structure/closet/crate/roguecloset, -/turf/open/floor/rogue/blocks{ - icon_state = "newstone2" - }, -/area/rogue/indoors/town/church) -"qX" = ( -/turf/closed/wall/mineral/rogue/decostone/long{ - icon_state = "decostone-l"; - dir = 1 - }, -/area/rogue/indoors/town/church/chapel) -"qY" = ( -/obj/effect/landmark/start/monk, -/turf/open/floor/rogue/churchmarble, -/area/rogue/indoors/town/church/chapel) -"qZ" = ( -/obj/structure/table/church, -/obj/item/candle/yellow, -/turf/open/floor/rogue/churchmarble, -/area/rogue/indoors/town/church/chapel) -"ra" = ( -/obj/structure/table/church/m, -/obj/item/reagent_containers/glass/cup/golden, -/turf/open/floor/rogue/churchmarble, -/area/rogue/indoors/town/church/chapel) -"rb" = ( -/obj/structure/flora/newtree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"rc" = ( -/obj/structure/mineral_door/bars{ - locked = 0; - lockid = "lord" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"rd" = ( -/obj/structure/chair/wood/rogue, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/church/chapel) -"re" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church/chapel) -"rf" = ( -/obj/structure/fluff/statue/astrata, -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church/chapel) -"rg" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/churchmarble, -/area/rogue/indoors/town/church/chapel) -"rh" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/town) -"ri" = ( -/obj/structure/fluff/walldeco/church/line, -/obj/structure/fluff/walldeco/church/line{ - icon_state = "churchslate"; - dir = 8 - }, -/turf/open/floor/rogue/churchmarble, -/area/rogue/indoors/town/church/chapel) -"rj" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"rk" = ( -/obj/structure/fluff/walldeco/church/line, -/turf/open/floor/rogue/churchmarble, -/area/rogue/indoors/town/church/chapel) -"rl" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"rm" = ( -/obj/structure/fluff/walldeco/church/line, -/obj/structure/fluff/walldeco/church/line{ - icon_state = "churchslate"; - dir = 4 - }, -/turf/open/floor/rogue/churchmarble, -/area/rogue/indoors/town/church/chapel) -"rn" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/magician) -"ro" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/dwarfin) -"rp" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town) -"rq" = ( -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church/chapel) -"rr" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_x = -32; - pixel_y = 0 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"rs" = ( -/obj/structure/fluff/psycross, -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church/chapel) -"rt" = ( -/obj/structure/fluff/walldeco/stone, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/town) -"ru" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/obj/structure/bars{ - icon_state = "barsbent"; - layer = 2.81 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"rw" = ( -/turf/open/transparent/openspace, -/area/rogue) -"rx" = ( -/obj/structure/fluff/walldeco/painting/seraphina{ - pixel_y = 32 - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church/chapel) -"ry" = ( -/obj/structure/fluff/walldeco/church/line{ - icon_state = "churchslate"; - dir = 4 - }, -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church/chapel) -"rz" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/rogueweapon/tongs, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/dwarfin) -"rA" = ( -/obj/machinery/light/rogue/torchholder/r, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church/chapel) -"rB" = ( -/obj/structure/roguewindow/openclose, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"rC" = ( -/obj/item/paper/bsmith, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/dwarfin) -"rD" = ( -/obj/structure/fluff/railing/wood{ - icon_state = "woodrailing"; - dir = 8; - pixel_y = -1 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/dwarf) -"rE" = ( -/obj/structure/chair/bench/ultimacouch, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"rF" = ( -/obj/structure/chair/bench/ultimacouch/r, -/obj/structure/chair/bench/ultimacouch/r{ - icon_state = "ultimacochright" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"rG" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/natural/feather, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"rH" = ( -/obj/item/reagent_containers/glass/cup/golden, -/obj/structure/table/wood, -/obj/item/roguekey/lord, -/turf/open/floor/rogue/carpet/lord/right, -/area/rogue/indoors/town/manor) -"rI" = ( -/obj/structure/bars, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"rJ" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"rK" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/church) -"rL" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "garrison" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"rM" = ( -/obj/structure/closet/crate/drawer, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"rN" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/carpet/lord/left, -/area/rogue/indoors/town/manor) -"rO" = ( -/obj/structure/fluff/walldeco/church/line, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church/chapel) -"rP" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"rQ" = ( -/obj/structure/chair/bench/church{ - icon_state = "church_benchleft"; - dir = 1 - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church/chapel) -"rR" = ( -/obj/structure/chair/bench/church/mid{ - icon_state = "church_benchmid"; - dir = 1 - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church/chapel) -"rT" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/reagent_containers/powder/flour, -/obj/item/rogueweapon/huntingknife/cleaver, -/turf/open/floor/rogue/tile{ - icon_state = "tile" - }, -/area/rogue/indoors/town/tavern) -"rU" = ( -/obj/structure/rack/rogue/shelf/big, -/obj/structure/rack/rogue/shelf, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"rV" = ( -/obj/structure/rack/rogue/shelf/big, -/obj/structure/rack/rogue/shelf, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"rW" = ( -/obj/structure/fermenting_barrel/beer, -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/tavern) -"rX" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town/magician) -"rY" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/church) -"rZ" = ( -/obj/structure/fermenting_barrel/random/water, -/obj/structure/rack/rogue/shelf, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/tavern) -"sa" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"sb" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"sc" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"sd" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"se" = ( -/obj/structure/chair/bench/throne, -/obj/effect/landmark/start/lady, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"sf" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 - }, -/turf/open/floor/rogue/churchmarble, -/area/rogue/indoors/town/church/chapel) -"sg" = ( -/obj/structure/bars/cemetery, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"sh" = ( -/obj/item/roguebin/water, -/turf/open/floor/rogue/churchmarble, -/area/rogue/indoors/town/church/chapel) -"si" = ( -/obj/structure/table/wood{ - icon_state = "map6" - }, -/obj/item/natural/feather, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor) -"sj" = ( -/obj/structure/chair/bench/church{ - icon_state = "church_benchleft"; - dir = 1 - }, -/turf/open/floor/rogue/churchmarble, -/area/rogue/indoors/town/church/chapel) -"sk" = ( -/obj/structure/fluff/statue/small, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"sl" = ( -/obj/structure/chair/bench/church/mid{ - icon_state = "church_benchmid"; - dir = 1 - }, -/turf/open/floor/rogue/churchmarble, -/area/rogue/indoors/town/church/chapel) -"sm" = ( -/obj/structure/closet/crate/chest, -/obj/item/rogueweapon/sword/long/judgement, -/turf/open/floor/rogue/cobblerock, -/area/rogue/under/cave) -"sn" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town) -"so" = ( -/obj/effect/landmark/start/cook, -/turf/open/floor/rogue/tile{ - icon_state = "tile" - }, -/area/rogue/indoors/town/tavern) -"sp" = ( -/obj/item/reagent_containers/food/snacks/produce/apple, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/magician) -"sq" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/under/town/basement) -"sr" = ( -/obj/structure/closet/crate/chest, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town/tavern) -"ss" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/tavern) -"st" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"su" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"sv" = ( -/obj/structure/closet/crate/roguecloset, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town) -"sw" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 4 - }, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/tavern) -"sx" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 - }, -/obj/item/reagent_containers/food/condiment/peppermill, -/obj/item/roguekey/roomhunt, -/turf/open/floor/rogue/tile{ - icon_state = "tile" - }, -/area/rogue/indoors/town/tavern) -"sy" = ( -/obj/structure/closet/crate/chest, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/tavern) -"sz" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) -"sA" = ( -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"sB" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 - }, -/obj/item/reagent_containers/glass/cup/steel, -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) -"sC" = ( -/turf/closed/wall/mineral/rogue/decostone/end{ - icon_state = "decostone-e"; - dir = 4 - }, -/area/rogue/indoors/town/church) -"sD" = ( -/obj/structure/fermenting_barrel/beer, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/tavern) -"sE" = ( -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"sF" = ( -/obj/structure/roguemachine/stockpile, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town) -"sG" = ( -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town) -"sI" = ( -/turf/open/floor/carpet/purple, -/area/rogue/indoors/town/shop) -"sJ" = ( -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/manor) -"sK" = ( -/obj/structure/bars/pipe, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"sL" = ( -/obj/effect/landmark/start/guardsman, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"sM" = ( -/obj/effect/landmark/start/guardsman{ - icon_state = "arrow"; - dir = 1 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"sN" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/under/cave) -"sO" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"sP" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 - }, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/food/snacks/butter, -/obj/item/reagent_containers/food/snacks/butter, -/turf/open/floor/rogue/tile{ - icon_state = "tile" - }, -/area/rogue/indoors/town/tavern) -"sQ" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/storage/bag/tray, -/obj/item/storage/bag/tray, -/obj/item/storage/bag/tray, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"sR" = ( -/obj/structure/roguemachine/money/l, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"sS" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/carpet/lord/left, -/area/rogue/indoors/town/manor) -"sT" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"sU" = ( -/turf/open/floor/rogue/tile{ - icon_state = "tile" - }, -/area/rogue/indoors/town/tavern) -"sV" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"sW" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"sX" = ( -/turf/open/water/cleanshallow, -/area/rogue/under/cave) -"sY" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/outdoors/town) -"sZ" = ( -/obj/structure/table/vtable, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"ta" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/tavern) -"tb" = ( -/obj/item/roguemachine/mastermail, -/obj/structure/disposalpipe/segment{ - pixel_y = 48 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"tc" = ( -/obj/structure/fluff/walldeco/rpainting{ - pixel_y = 32 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"td" = ( -/obj/structure/fermenting_barrel/beer, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"te" = ( -/obj/effect/landmark/start/cleric, -/turf/open/floor/rogue/churchmarble, -/area/rogue/indoors/town/church/chapel) -"tf" = ( -/obj/structure/fluff/clock, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"tg" = ( -/obj/structure/bed/rogue/hay, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"th" = ( -/obj/structure/table/wood, -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"ti" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/obj/item/cooking/pan, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/tavern) -"tj" = ( -/obj/machinery/light/rogue/hearth, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/tavern) -"tk" = ( -/obj/structure/mineral_door/wood/window{ - locked = 1; - lockid = "tavern" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"tl" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"tm" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "manor" - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor) -"tn" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 - }, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/manor) -"tp" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/outdoors/town/roofs) -"tq" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_x = -32 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"tr" = ( -/obj/structure/mineral_door/bars{ - lockid = "manor" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"ts" = ( -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"tt" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/church/chapel) -"tu" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"tv" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/magician) -"tx" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"ty" = ( -/obj/structure/bookcase, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/church/chapel) -"tz" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church/chapel) -"tA" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/structure/fluff/psycross, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/manor) -"tB" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/candle/yellow, -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church/chapel) -"tC" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"tD" = ( -/obj/structure/fluff/walldeco/serpflag, -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/indoors/town/garrison) -"tE" = ( -/obj/structure/fluff/statue/myth, -/obj/machinery/light/rogue/torchholder, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"tF" = ( -/obj/structure/closet/crate/coffin, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"tG" = ( -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) -"tH" = ( -/obj/structure/fireaxecabinet/south, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) -"tI" = ( -/obj/structure/mineral_door/swing_door, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) -"tJ" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town/roofs) -"tK" = ( -/obj/structure/bookcase, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"tL" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/roguekey/manor, -/obj/item/roguekey/manor, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor) -"tN" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - lockid = "priest" - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/church) -"tO" = ( -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/indoors/town/garrison) -"tP" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) -"tQ" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) -"tR" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"tS" = ( -/obj/effect/landmark/start/barkeep, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) -"tT" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/obj/item/rogue/instrument/flute, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) -"tU" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 1 - }, -/area/rogue/outdoors/mountains) -"tW" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"tY" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"tZ" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"ua" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 9 - }, -/turf/open/floor/rogue/tile/tilerg, -/area/rogue/indoors/town) -"ub" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 1 - }, -/turf/open/floor/rogue/tile/tilerg, -/area/rogue/indoors/town) -"uc" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 - }, -/obj/item/candle/yellow/lit, -/obj/structure/fluff/walldeco/rpainting/crown{ - pixel_x = 32 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"ud" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/garrison) -"ue" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"uf" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/reagent_containers/powder, -/obj/item/roguekey/merchant, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"ug" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/garrison) -"uh" = ( -/obj/structure/bars/pipe, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"ui" = ( -/obj/structure/closet/crate/roguecloset, -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"uj" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"uk" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"ul" = ( -/turf/open/floor/rogue/blocks/newstone/alt, -/area/rogue/indoors/town/church) -"um" = ( -/obj/structure/fluff/walldeco/wantedposter{ - pixel_y = 32 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"un" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/blocks{ - icon_state = "paving" - }, -/area/rogue/under/town/basement) -"uo" = ( -/turf/open/floor/rogue/blocks/newstone/alt, -/area/rogue/indoors/town/manor) -"up" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/garrison) -"uq" = ( -/obj/structure/roguemachine/scomm/r, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/dwarfin) -"ur" = ( -/obj/structure/closet/crate/roguecloset, -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"us" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church) -"ut" = ( -/obj/structure/fluff/clock, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"uu" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/reagent_containers/glass/cup/silver, -/turf/open/floor/rogue/tile{ - icon_state = "linoleum" - }, -/area/rogue/indoors/town/manor) -"uv" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"uw" = ( -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/under/town/basement) -"ux" = ( -/obj/structure/bed/rogue/hay, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"uy" = ( -/obj/structure/rack/rogue, -/obj/item/kitchen/fork, -/obj/item/kitchen/fork, -/obj/item/kitchen/fork, -/obj/item/kitchen/spoon/plastic, -/obj/item/kitchen/spoon/plastic, -/obj/item/kitchen/spoon/plastic, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/tavern) -"uz" = ( -/obj/structure/bookcase, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/tavern) -"uB" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) -"uC" = ( -/obj/item/rogueweapon/shovel, -/obj/structure/fluff/statue/knightalt, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"uD" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) -"uE" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) -"uF" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"uG" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) -"uH" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) -"uI" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"uJ" = ( -/obj/structure/fluff/walldeco/bigpainting/lake, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor) -"uL" = ( -/obj/item/reagent_containers/powder/salt, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"uM" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"uN" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/obj/structure/bed/rogue/inn, -/obj/item/bedsheet/rogue/pelt, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"uO" = ( -/obj/machinery/light/rogue/firebowl/church, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"uP" = ( -/obj/item/roguebin, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"uQ" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/obj/machinery/light/rogue/torchholder/r, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"uS" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"uV" = ( -/turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_corner"; - dir = 1 - }, -/area/rogue/indoors/town/dwarfin) -"uW" = ( -/obj/structure/rogue/trophy/deer, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"uX" = ( -/obj/structure/fluff/walldeco/wantedposter, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"uY" = ( -/obj/structure/bearpelt, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"uZ" = ( -/obj/machinery/light/rogue/oven/west, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/magician) -"va" = ( -/obj/machinery/light/rogue/torchholder/r, -/turf/open/floor/rogue/blocks{ - icon_state = "newstone2" - }, -/area/rogue/indoors/town/church) -"vb" = ( -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"vc" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"vd" = ( -/obj/structure/bed/rogue/shit, -/obj/effect/landmark/start/servant, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"vf" = ( -/turf/closed/wall/mineral/rogue/decostone/center, -/area/rogue/indoors/town/church) -"vq" = ( -/turf/open/floor/rogue/rooftop{ - icon_state = "roofg"; - dir = 2 - }, -/area/rogue/outdoors/town/roofs) -"vs" = ( -/obj/item/roguebin/water, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/garrison) -"vt" = ( -/mob/living/simple_animal/pet/cat, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"vu" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/church) -"vv" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/church) -"vw" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"vy" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/blocks/newstone/alt, -/area/rogue/indoors/town/manor) -"vz" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/under/town/basement) -"vD" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 - }, -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"vE" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"vF" = ( -/obj/structure/mineral_door/wood/window{ - lockid = "garrison" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/garrison) -"vG" = ( -/obj/structure/chair/wood/rogue, -/obj/effect/landmark/start/villager, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"vH" = ( -/obj/structure/fluff/walldeco/stone{ - pixel_x = 0; - pixel_y = 32 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/magician) -"vI" = ( -/obj/structure/chair/wood/rogue, -/obj/effect/landmark/start/adventurer, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"vJ" = ( -/obj/structure/bars, -/turf/open/floor/rogue/cobblerock, -/area/rogue/under/town/basement) -"vK" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 - }, -/obj/item/dice, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"vL" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/obj/effect/landmark/start/adventurer{ - dir = 8 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"vM" = ( -/obj/structure/bars/pipe/left, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"vN" = ( -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"vO" = ( -/turf/closed/wall/mineral/rogue/decostone/center, -/area/rogue/indoors/town/manor) -"vP" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"vQ" = ( -/turf/closed/wall/mineral/rogue/decostone, -/area/rogue/outdoors/town/roofs) -"vR" = ( -/obj/structure/fluff/walldeco/chains, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"vS" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/under/cave) -"vT" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"vU" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) -"vV" = ( -/obj/structure/closet/crate/roguecloset/dark, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"vW" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town/shop) -"vX" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) -"vY" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"vZ" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/outdoors/rtfield) -"wa" = ( -/obj/structure/fluff/walldeco/stone, -/turf/closed/wall/mineral/rogue/decostone/cand, -/area/rogue/indoors/town/church) -"wb" = ( -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"wc" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) -"wd" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 - }, -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"we" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 - }, -/obj/item/toy/cards/deck/syndicate, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"wf" = ( -/obj/structure/bars/cemetery, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"wg" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 4 - }, -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"wh" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"wi" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/obj/effect/landmark/start/adventurer{ - dir = 4 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"wk" = ( -/obj/item/natural/cloth, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"wl" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"wm" = ( -/obj/effect/landmark/start/mason, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/dwarfin) -"wo" = ( -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/town/roofs) -"wp" = ( -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"wq" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/outdoors/town) -"ws" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) -"wt" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town/roofs) -"wu" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town/roofs) -"wv" = ( -/obj/structure/closet/crate/chest, -/obj/item/natural/cloth, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"ww" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town/roofs) -"wx" = ( -/obj/structure/chair/bench, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town/roofs) -"wy" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town/roofs) -"wA" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 4; - icon_state = "donjondir"; - lockid = "dungeon" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"wB" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"wC" = ( -/obj/structure/mineral_door/swing_door, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"wD" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/clothing/suit/roguetown/shirt/rags, -/obj/item/rogueweapon/mace/wsword, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"wE" = ( -/turf/closed/wall/mineral/rogue/decostone/end{ - icon_state = "decostone-e"; - dir = 8 - }, -/area/rogue/indoors/town/manor) -"wF" = ( -/obj/item/roguekey/shop, -/obj/item/keyring, -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"wG" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town/garrison) -"wH" = ( -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 6 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"wI" = ( -/obj/structure/fluff/statue/knight/interior/r, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town/roofs) -"wJ" = ( -/obj/structure/bookcase, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"wK" = ( -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"wL" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/shop) -"wM" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/dwarfin) -"wN" = ( -/turf/open/floor/rogue/woodturned, -/area/rogue/outdoors/town) -"wO" = ( -/obj/structure/bars/cemetery, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town/roofs) -"wP" = ( -/obj/structure/bars/cemetery, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town/roofs) -"wQ" = ( -/obj/effect/landmark/start/villager, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"wR" = ( -/obj/effect/landmark/start/manorguardsman, -/turf/open/floor/rogue/carpet/lord/left, -/area/rogue/indoors/town/manor) -"wS" = ( -/obj/structure/chair/wood/rogue, -/obj/effect/landmark/start/mercenary, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"wT" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/metal, -/area/rogue/indoors/town/shop) -"wU" = ( -/turf/open/floor/rogue/metal, -/area/rogue/indoors/town/shop) -"wV" = ( -/obj/structure/closet/crate/chest, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"wW" = ( -/obj/structure/table/wood{ - icon_state = "tablewood3" - }, -/obj/structure/roguemachine/musicbox, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) -"wX" = ( -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/outdoors/town) -"wY" = ( -/obj/structure/fluff/statue, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"wZ" = ( -/obj/structure/chair/bench/ultimacouch, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) -"xa" = ( -/obj/structure/chair/bench/ultimacouch/r{ - icon_state = "ultimacochright" - }, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) -"xb" = ( -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) -"xc" = ( -/obj/structure/mineral_door/wood, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"xd" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/obj/effect/landmark/start/mercenary{ - icon_state = "arrow"; - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"xe" = ( -/obj/structure/closet/crate/chest, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/magician) -"xf" = ( -/obj/effect/landmark/start/sapprentice, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/dwarfin) -"xg" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/garrison) -"xi" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/bigrat, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"xj" = ( -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/indoors/town/shop) -"xk" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town/roofs) -"xl" = ( -/obj/structure/table/wood/fancy/blue, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) -"xm" = ( -/obj/structure/closet/crate/chest, -/obj/item/roguekey/manor, -/obj/item/roguekey/walls, -/obj/item/roguekey/blacksmith, -/obj/item/roguekey/steward, -/obj/item/roguekey/church, -/obj/item/roguekey/dungeon, -/obj/item/roguekey/graveyard, -/obj/item/roguekey/garrison, -/obj/item/roguekey/mason, -/obj/item/roguekey/mercenary, -/obj/item/roguekey/nightmaiden, -/obj/item/roguekey/tavern, -/turf/open/floor/rogue/tile/tilerg, -/area/rogue/indoors/town) -"xn" = ( -/obj/structure/fluff/railing/wood{ - icon_state = "woodrailing"; - dir = 4 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"xo" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "manor" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"xp" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) -"xq" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/obj/effect/landmark/start/mercenary{ - icon_state = "arrow"; - dir = 1 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"xr" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"xs" = ( -/turf/closed/wall/mineral/rogue/pipe, -/area/rogue/indoors/town/shop) -"xt" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/metal, -/area/rogue/indoors/town/shop) -"xu" = ( -/obj/structure/roguemachine/scomm/l, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"xv" = ( -/obj/structure/fluff/railing/wood, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"xw" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town/dwarfin) -"xy" = ( -/obj/structure/fluff/railing/wood, -/obj/structure/bars/pipe{ - icon_state = "pipe"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"xz" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/dwarf) -"xA" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town/roofs) -"xB" = ( -/obj/structure/fluff/railing/wood{ - icon_state = "woodrailing"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/dwarf) -"xC" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"xD" = ( -/obj/structure/fluff/railing/wood{ - icon_state = "woodrailing"; - dir = 8; - pixel_y = -1 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"xE" = ( -/obj/structure/roguewindow/openclose, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town) -"xF" = ( -/obj/item/natural/stone, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) -"xG" = ( -/obj/structure/bars/passage/shutter/open{ - redstone_id = "forge" - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"xH" = ( -/obj/structure/mineral_door/wood/deadbolt, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"xI" = ( -/obj/structure/fluff/railing/fence{ - icon_state = "fence"; - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) -"xJ" = ( -/obj/structure/closet/crate/roguecloset/inn, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"xK" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"xL" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/shop) -"xM" = ( -/obj/structure/bed/rogue/wool, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"xN" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/hammer, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/dwarfin) -"xO" = ( -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/dwarfin) -"xP" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/burial_shroud, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"xQ" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/manor) -"xR" = ( -/obj/structure/lever{ - redstone_id = "forge" - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"xS" = ( -/obj/structure/roguemachine/stockpile, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"xT" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/turf/open/floor/rogue/blocks{ - icon_state = "paving" - }, -/area/rogue/under/town/basement) -"xU" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor) -"xV" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"xW" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"xX" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/shop) -"xY" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/under/town/basement) -"xZ" = ( -/obj/structure/ladder, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"ya" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 - }, -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/item/reagent_containers/glass/cup/silver, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"yb" = ( -/obj/structure/chair/wood, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"yc" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 - }, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/tavern) -"yd" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 8 - }, -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/magician) -"ye" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"yf" = ( -/turf/closed, -/area/rogue/outdoors/rtfield) -"yg" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"yh" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"yi" = ( -/mob/living/carbon/human/species/human/northern/bum, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"yj" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 4 - }, -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) -"yk" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town) -"yl" = ( -/obj/structure/bed/rogue/hay, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town) -"ym" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"yn" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcr"; - locked = 1; - lockid = "merc" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"yo" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"yp" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/shop) -"yq" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/shop) -"yr" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/blocks{ - icon_state = "paving" - }, -/area/rogue/under/town/basement) -"yt" = ( -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town) -"yu" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"yv" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"yw" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town) -"yx" = ( -/obj/item/grown/log/tree/stick, -/obj/item/grown/log/tree/stick, -/obj/item/grown/log/tree/stick, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/dwarfin) -"yy" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"yz" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town) -"yA" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town) -"yB" = ( -/obj/machinery/light/rogue/oven/west, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/church) -"yC" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"yE" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 4 - }, -/area/rogue/outdoors/town) -"yF" = ( -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/town) -"yG" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/dwarfin) -"yI" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle, -/area/rogue/outdoors/town) -"yJ" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town/dwarfin) -"yK" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town/tavern) -"yL" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/dwarfin) -"yM" = ( -/obj/structure/toilet, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/garrison) -"yN" = ( -/obj/structure/bed/rogue/shit, -/obj/effect/landmark/start/wapprentice, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/magician) -"yO" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors/town/garrison) -"yP" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town) -"yQ" = ( -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/town) -"yR" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 8 - }, -/area/rogue/outdoors/town) -"yS" = ( -/turf/closed/wall/mineral/rogue/roofwall/center, -/area/rogue/outdoors/town) -"yT" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 8 - }, -/area/rogue/outdoors/town) -"yU" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/town) -"yV" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 4 - }, -/area/rogue/outdoors/town) -"yW" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle, -/area/rogue/outdoors/mountains) -"yX" = ( -/turf/closed/wall/mineral/rogue/roofwall/innercorner, -/area/rogue/outdoors/town) -"yY" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"yZ" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/indoors/town/manor) -"zb" = ( -/obj/item/chair/rogue/fancy, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"zc" = ( -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/magician) -"zd" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"ze" = ( -/obj/machinery/light/rogue/wallfire/candle/blue/r, -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/magician) -"zf" = ( -/turf/closed, -/area/rogue/indoors/town/magician) -"zg" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/magician) -"zh" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield) -"zj" = ( -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/magician) -"zk" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/natural/feather, -/obj/item/candle/skull/lit, -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/shop) -"zl" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/flint, -/obj/machinery/light/rogue/wallfire/candle/blue/l, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/magician) -"zm" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 4 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"zn" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains) -"zo" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/magician) -"zp" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/magician) -"zq" = ( -/obj/structure/closet/crate/drawer, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/magician) -"zr" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/roguekey/garrison, -/obj/item/roguekey/garrison, -/obj/item/keyring, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"zs" = ( -/obj/structure/bed/rogue/wool, -/obj/item/bedsheet/rogue/fabric, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/magician) -"zt" = ( -/turf/open/floor/rogue/rooftop{ - icon_state = "roofg"; - dir = 2 - }, -/area/rogue/outdoors/town) -"zu" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner, -/area/rogue/outdoors/town) -"zv" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 1 - }, -/area/rogue/outdoors/town) -"zw" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 1 - }, -/area/rogue/outdoors/town) -"zx" = ( -/obj/item/reagent_containers/food/snacks/crow{ - icon_state = "crow"; - dir = 8 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"zy" = ( -/obj/machinery/light/rogue/oven/west, -/turf/open/floor/rogue/tile{ - icon_state = "linoleum" - }, -/area/rogue/indoors/town/manor) -"zz" = ( -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/church) -"zA" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"zB" = ( -/obj/structure/table/wood, -/obj/structure/mirror{ - pixel_x = 28; - pixel_y = 0 - }, -/obj/item/reagent_containers/glass/bottle/rogue/manapot, -/obj/item/candle/yellow, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/church) -"zC" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"zD" = ( -/obj/structure/closet/crate/chest, -/obj/item/gun/ballistic/revolver/grenadelauncher/crossbow, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"zE" = ( -/obj/structure/chair/bench/couch{ - icon_state = "redcouch2" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"zF" = ( -/obj/structure/fluff/walldeco/chains, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/garrison) -"zG" = ( -/obj/structure/closet/crate/chest/lootbox, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"zH" = ( -/turf/closed/wall/mineral/rogue/wood, -/area/rogue/indoors/town/church) -"zI" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"zJ" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/church) -"zK" = ( -/obj/structure/fluff/statue/gargoyle/moss, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"zL" = ( -/turf/open/floor/rogue/rooftop{ - icon_state = "roof"; - dir = 8 - }, -/area/rogue/outdoors/town) -"zM" = ( -/obj/effect/landmark/start/sheriff{ - dir = 1 - }, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor) -"zN" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_x = 32 - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/manor) -"zO" = ( -/turf/open/floor/rogue/rooftop{ - icon_state = "roof"; - dir = 4 - }, -/area/rogue/outdoors/town) -"zP" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church) -"zQ" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors/town/garrison) -"zR" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 2 - }, -/area/rogue/outdoors/town) -"zS" = ( -/obj/structure/bed/rogue/inn/double, -/obj/item/bedsheet/rogue/fabric_double, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"zT" = ( -/obj/structure/closet/crate/roguecloset/inn, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"zU" = ( -/obj/structure/closet/crate/drawer/inn, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"zW" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/under/town/basement) -"zX" = ( -/obj/structure/rogue/trophy/deer, -/obj/structure/chair/bench/ultimacouch, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"zY" = ( -/obj/structure/chair/bench/ultimacouch/r{ - icon_state = "ultimacochright" - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"zZ" = ( -/obj/structure/table/wood/nice, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"Aa" = ( -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/church) -"Ab" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"Ac" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"Ad" = ( -/obj/structure/chair/wood, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"Ae" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"Af" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 6 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"Ag" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"Ah" = ( -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/tavern) -"Ai" = ( -/obj/structure/closet/crate/chest{ - lockid = "priest" - }, -/obj/item/book/rogue/bibble, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/church) -"Aj" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/tales1, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"Ak" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"Al" = ( -/obj/effect/landmark/start/manorguardsman, -/turf/open/floor/rogue/carpet/lord/right, -/area/rogue/indoors/town/manor) -"Am" = ( -/obj/structure/chair/wood, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/tavern) -"An" = ( -/obj/structure/fluff/walldeco/rpainting/forest{ - pixel_x = -32 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"Ao" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/tile/masonic{ - dir = 4 - }, -/area/rogue/indoors/town/manor) -"Ap" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/obj/item/candle/yellow, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"Aq" = ( -/obj/structure/fluff/statue/tdummy, -/turf/open/floor/rogue/rooftop{ - icon_state = "roofg"; - dir = 2 - }, -/area/rogue/outdoors/town) -"Ar" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/under/town/basement) -"As" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/church) -"At" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"Au" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"Av" = ( -/obj/structure/closet/crate/roguecloset/inn/south, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"Aw" = ( -/obj/structure/bed/rogue/wool, -/obj/item/bedsheet/rogue/cloth, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"Ax" = ( -/obj/structure/roguemachine/scomm, -/obj/effect/landmark/start/magician, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"Ay" = ( -/obj/structure/bed/rogue/mediocre, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"AA" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/garrison) -"AB" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/tavern) -"AD" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/woodturned, -/area/rogue/outdoors/town) -"AE" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/town/roofs) -"AG" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/town) -"AH" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"AI" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomi"; - name = "ROOM I" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/tavern) -"AJ" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"AK" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/structure/roguemachine/musicbox{ - pixel_y = 16 - }, -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/manor) -"AL" = ( -/obj/item/reagent_containers/food/snacks/crow{ - icon_state = "crow"; - dir = 8 - }, -/turf/open/floor/rogue/rooftop{ - icon_state = "roof"; - dir = 8 - }, -/area/rogue/outdoors/town) -"AM" = ( -/obj/structure/fermenting_barrel/water, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/dwarfin) -"AN" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"AO" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"AP" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/dwarfin) -"AQ" = ( -/obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"AR" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "manor" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"AS" = ( -/obj/structure/fluff/railing/wood{ - icon_state = "woodrailing"; - dir = 8; - pixel_y = -1 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"AT" = ( -/turf/closed/mineral/rogue, -/area/rogue/under/town/basement) -"AU" = ( -/obj/structure/mineral_door/wood, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/church) -"AV" = ( -/obj/structure/closet/crate/roguecloset/inn/south, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"AW" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/clothing/suit/roguetown/armor/leather/vest, -/obj/item/clothing/shoes/roguetown/boots/leather, -/obj/item/clothing/suit/roguetown/armor/gambeson/heavy/dress, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/dwarfin) -"AX" = ( -/obj/structure/closet/crate/drawer/inn, -/obj/item/storage/belt/rogue/pouch/coins/poor, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"AY" = ( -/obj/machinery/light/rogue/chand, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern) -"AZ" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"Ba" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"Bb" = ( -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/manor) -"Bc" = ( -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/indoors/town/church) -"Bd" = ( -/obj/structure/bookcase, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"Be" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 4 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"Bf" = ( -/obj/structure/chair/wood/rogue/fancy, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"Bg" = ( -/obj/structure/winch{ - gid = "keepin" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/manor) -"Bh" = ( -/obj/structure/bed/rogue/inn/double, -/obj/item/bedsheet/rogue/double_pelt, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"Bi" = ( -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/rooftop{ - icon_state = "roof"; - dir = 4 - }, -/area/rogue/outdoors/town) -"Bj" = ( -/obj/structure/chair/wood/rogue/fancy, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"Bk" = ( -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/indoors/town/bath) -"Bl" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church) -"Bm" = ( -/turf/closed/wall/mineral/rogue/decostone/long, -/area/rogue/indoors/town/church) -"Bn" = ( -/obj/structure/table/wood/nice, -/obj/item/candle/yellow, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"Bo" = ( -/obj/structure/table/wood, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"Bp" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/rooftop{ - icon_state = "roof"; - dir = 4 - }, -/area/rogue/outdoors/town) -"Bq" = ( -/obj/item/reagent_containers/food/snacks/crow, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"Br" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/tavern) -"Bu" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/town) -"Bv" = ( -/obj/machinery/light/rogue/torchholder/r, -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church) -"Bw" = ( -/obj/effect/landmark/start/veteran{ - dir = 1 - }, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor) -"Bx" = ( -/obj/machinery/light/rogue/torchholder, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/tavern) -"By" = ( -/obj/structure/fluff/railing/wood, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern) -"Bz" = ( -/obj/structure/stationary_bell, -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church) -"BA" = ( -/obj/structure/closet/crate/chest, -/obj/item/rogueweapon/mace/church, -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church) -"BB" = ( -/obj/structure/closet/crate/chest, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"BC" = ( -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/outdoors/town) -"BE" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/churchrough, -/area/rogue/indoors/town/church) -"BF" = ( -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/tavern) -"BG" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/town) -"BH" = ( -/obj/structure/mineral_door/wood/deadbolt, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town) -"BJ" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_y = 32 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"BK" = ( -/obj/structure/fluff/statue/knight/interior, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"BM" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/tavern) -"BN" = ( -/obj/structure/closet/crate/drawer/inn, -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"BO" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/obj/item/reagent_containers/glass/cup/steel, -/obj/item/reagent_containers/glass/cup/steel, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"BP" = ( -/obj/structure/bed/rogue/wool, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/tavern) -"BQ" = ( -/obj/structure/chair/bench, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"BR" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/tavern) -"BS" = ( -/obj/structure/mineral_door/wood/donjon{ - lockid = "ssteward" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"BT" = ( -/obj/structure/bed/rogue/wool, -/obj/item/bedsheet/rogue/pelt, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"BV" = ( -/obj/structure/bed/rogue, -/obj/effect/landmark/start/armorsmith, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/dwarfin) -"BW" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"BX" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/rooftop{ - icon_state = "roofg"; - dir = 2 - }, -/area/rogue/indoors/town/shop) -"BY" = ( -/obj/structure/closet/crate/chest, -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"BZ" = ( -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/town) -"Ca" = ( -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/town) -"Cb" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/shop) -"Cc" = ( -/obj/structure/mirror{ - pixel_y = 28 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/garrison) -"Cd" = ( -/obj/structure/closet/crate/roguecloset, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"Ce" = ( -/turf/closed/wall/mineral/rogue/roofwall/innercorner{ - dir = 4 - }, -/area/rogue/outdoors/town) -"Cf" = ( -/obj/structure/table/vtable/v2, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"Cg" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/town) -"Ch" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/outdoors/town) -"Ci" = ( -/obj/effect/sunlight, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/shop) -"Cj" = ( -/obj/structure/roguemachine/money/r, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/tavern) -"Ck" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/garrison) -"Cl" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/under/town/basement) -"Cm" = ( -/obj/item/roguemachine/merchant, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/shop) -"Co" = ( -/obj/item/reagent_containers/food/snacks/crow{ - icon_state = "crow"; - dir = 1 - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/town) -"Cp" = ( -/obj/machinery/anvil, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"Cq" = ( -/obj/structure/ladder, -/turf/open/transparent/openspace, -/area/rogue/indoors/town) -"Cr" = ( -/obj/structure/bars/passage/shutter{ - redstone_id = "merchroofshutt" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/shop) -"Cs" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/town) -"Ct" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/storage/roguebag, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"Cu" = ( -/obj/effect/landmark/mapGenerator/rogue/mountain{ - endTurfX = 128; - endTurfY = 128 - }, -/turf/open/transparent/openspace, -/area/rogue) -"Cv" = ( -/obj/effect/landmark/mapGenerator/sunlights{ - endTurfX = 128; - endTurfY = 128 - }, -/turf/open/transparent/openspace, -/area/rogue) -"Cx" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/mountains) -"Cy" = ( -/obj/structure/winch{ - gid = "townout" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/mountains) -"CB" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle, -/area/rogue/outdoors/town/roofs) -"CC" = ( -/obj/structure/fluff/psycross, -/turf/open/floor/rogue/rooftop{ - icon_state = "roofg"; - dir = 2 - }, -/area/rogue/outdoors/town/roofs) -"CD" = ( -/obj/structure/bed/rogue, -/obj/effect/landmark/start/prisoner{ - dir = 4 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/cell) -"CE" = ( -/obj/structure/fluff/wallclock, -/turf/open/floor/rogue/tile{ - icon_state = "linoleum" - }, -/area/rogue/indoors/town/manor) -"CF" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"CG" = ( -/obj/structure/fluff/statue/gargoyle, -/obj/structure/ladder, -/obj/machinery/light/rogue/torchholder, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town/manor) -"CH" = ( -/obj/structure/chair/bench, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town/manor) -"CI" = ( -/obj/structure/stairs/stone{ - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"CJ" = ( -/obj/structure/well/fountain, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/manor) -"CK" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"CL" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "vault" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"CM" = ( -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"CN" = ( -/obj/structure/fermenting_barrel/beer, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"CO" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomv"; - name = "ROOM V" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/tavern) -"CP" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"CR" = ( -/obj/structure/fluff/statue/gargoyle/moss, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"CS" = ( -/obj/structure/closet/crate/chest, -/obj/item/natural/feather, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/magician) -"CT" = ( -/obj/structure/fluff/walldeco/church/line{ - icon_state = "churchslate"; - dir = 8 - }, -/obj/effect/landmark/start/churchling{ - icon_state = "arrow"; - dir = 8 - }, -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church/chapel) -"CU" = ( -/obj/structure/table/church{ - icon_state = "churchtable"; - dir = 1 - }, -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/churchmarble, -/area/rogue/indoors/town/church/chapel) -"CV" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church/chapel) -"CW" = ( -/obj/structure/table/wood, -/obj/item/roguekey/dungeon, -/obj/item/keyring, -/obj/item/roguekey/garrison, -/obj/item/rogueweapon/sword/long/exe/cloth, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"CX" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town/manor) -"CY" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church/chapel) -"CZ" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"Da" = ( -/obj/item/roguebin/water, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"Db" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/church/chapel) -"Dd" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church/chapel) -"De" = ( -/obj/structure/closet/crate/roguecloset/inn/south, -/obj/item/soap, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath) -"Df" = ( -/obj/item/storage/backpack/rogue/satchel, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"Dg" = ( -/obj/structure/flora/roguegrass/water, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"Di" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 1; - icon_state = "wooddir" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"Dj" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/under/cave) -"Dk" = ( -/obj/effect/landmark/start/gravedigger, -/obj/structure/bed/rogue, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"Dm" = ( -/obj/structure/fluff/walldeco/stone, -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/outdoors/town) -"Dn" = ( -/obj/machinery/light/rogue/chand, -/obj/effect/landmark/start/jester{ - icon_state = "arrow"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor) -"Do" = ( -/obj/effect/landmark/start/vagrant, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"Dp" = ( -/obj/structure/fluff/walldeco/stone{ - pixel_x = 0; - pixel_y = 32 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"Dq" = ( -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"Dr" = ( -/obj/effect/landmark/start/orphan, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"Ds" = ( -/obj/item/trash/applecore, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"Dt" = ( -/obj/effect/landmark/start/vagrant{ - icon_state = "arrow"; - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"Du" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/bigrat, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/under/town/basement) -"Dv" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"Dw" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/church) -"Dy" = ( -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"Dz" = ( -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/shop) -"DA" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/flashlight/flare/torch/metal, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"DB" = ( -/mob/living/carbon/human/species/human/northern/bum, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"DC" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"DD" = ( -/obj/structure/fluff/statue/gargoyle/moss, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/dwarfin) -"DE" = ( -/obj/machinery/light/rogue/wallfire/candle, -/obj/structure/table/wood, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"DF" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/structure/fluff/wallclock, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor) -"DG" = ( -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors/town/magician) -"DH" = ( -/obj/structure/mirror, -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/candle/yellow, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor) -"DI" = ( -/obj/structure/bearpelt, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"DJ" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/carpet/lord/right, -/area/rogue/indoors/town/manor) -"DK" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"DL" = ( -/obj/structure/closet/crate/chest, -/obj/item/rogueweapon/pick, -/obj/item/rogueweapon/pick, -/obj/item/rogueweapon/pick, -/obj/item/rogueweapon/pick, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"DM" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"DN" = ( -/turf/open/water/sewer, -/area/rogue/outdoors/rtfield) -"DO" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcv"; - locked = 1; - lockid = "manor"; - name = "prince chamber" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"DP" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/natural/feather, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"DQ" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"DR" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"DS" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/knowledge1, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/shop) -"DT" = ( -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"DU" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"DW" = ( -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/tavern) -"DX" = ( -/obj/structure/stairs/fancy/r{ - icon_state = "fancy_stairs_r"; - dir = 1 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"DY" = ( -/obj/effect/landmark/start/orphanlate, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town/roofs) -"DZ" = ( -/obj/effect/landmark/start/vagrantlate, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town/roofs) -"Ea" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"Eb" = ( -/obj/effect/landmark/start/hand{ - icon_state = "arrow"; - dir = 8 - }, -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"Ec" = ( -/obj/structure/fluff/statue/knight, -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"Ed" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) -"Ee" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) -"Ef" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern) -"Eg" = ( -/obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 1 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"Eh" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/storage/belt/rogue/pouch/coins/rich, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"Ei" = ( -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"Ej" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/candle/yellow, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"Ek" = ( -/obj/structure/fluff/psycross, -/obj/item/rogueweapon/woodstaff/aries, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/church) -"El" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"Em" = ( -/obj/machinery/light/rogue/torchholder/l, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"En" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"Ep" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"Eq" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/cobblerock, -/area/rogue/under/cave) -"Er" = ( -/obj/item/roguekey/roomi, -/obj/item/roguekey/roomii, -/obj/item/roguekey/roomiii, -/obj/item/roguekey/roomiv, -/obj/structure/closet/crate/chest, -/obj/item/roguekey/roomv, -/obj/item/roguekey/roomvi, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"Es" = ( -/obj/structure/fluff/traveltile{ - aportalgoesto = "decapin"; - aportalid = "decapout" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) -"Et" = ( -/obj/structure/bed/rogue/inn/double, -/obj/item/bedsheet/rogue/fabric_double, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"Eu" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/paper, -/obj/item/paper, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"Ev" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/obj/item/natural/feather, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"Ew" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town/manor) -"Ex" = ( -/obj/structure/fluff/walldeco/rpainting/crown{ - pixel_x = -32 - }, -/obj/effect/landmark/start/squire{ - icon_state = "arrow"; - dir = 4 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"Ey" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/mountains) -"Ez" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - lockid = "priest" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"EA" = ( -/obj/structure/closet/crate/chest, -/obj/item/rogueore/iron, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/dwarfin) -"EB" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - lockid = "priest" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"EC" = ( -/obj/structure/bed/rogue, -/obj/effect/landmark/start/mercenary{ - icon_state = "arrow"; - dir = 8 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"ED" = ( -/obj/structure/bed/rogue, -/obj/effect/landmark/start/mercenary, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"EE" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/obj/effect/landmark/start/mercenary{ - icon_state = "arrow"; - dir = 8 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"EF" = ( -/obj/effect/landmark/start/mercenarylate, -/turf/open/floor/rogue/rooftop{ - icon_state = "roof"; - dir = 4 - }, -/area/rogue/outdoors/town) -"EG" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/obj/item/natural/feather, -/obj/item/candle/yellow, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"EH" = ( -/obj/effect/landmark/start/mercenarylate, -/turf/open/floor/rogue/rooftop{ - icon_state = "roofg"; - dir = 2 - }, -/area/rogue/outdoors/town) -"EI" = ( -/obj/structure/fluff/walldeco/stone{ - pixel_x = 0; - pixel_y = 32 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/manor) -"EJ" = ( -/obj/effect/landmark/start/mercenarylate{ - icon_state = "arrow"; - dir = 8 - }, -/turf/open/floor/rogue/rooftop{ - icon_state = "roofg"; - dir = 2 - }, -/area/rogue/outdoors/town) -"EL" = ( -/obj/effect/landmark/events/haunts, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) -"EM" = ( -/obj/effect/landmark/events/haunts, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) -"EN" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomhunt"; - name = "ROOM HUNT" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"EO" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomiv"; - name = "ROOM IV" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"EP" = ( -/obj/structure/fluff/traveltile{ - aportalgoesto = "forestin"; - aportalid = "forestout" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) -"EQ" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/church) -"ER" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/mountains) -"ES" = ( -/turf/closed/mineral/random/rogue/med, -/area/rogue/under/cave) -"ET" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/scomstone, -/obj/item/clothing/shoes/roguetown/nobleboot, -/obj/item/rogueweapon/greatsword, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"EU" = ( -/obj/structure/chair/bench/church/r{ - dir = 1 - }, -/turf/open/floor/rogue/churchmarble, -/area/rogue/indoors/town/church/chapel) -"EV" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town/shop) -"EW" = ( -/obj/structure/bars, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"EX" = ( -/obj/structure/chair/bench/church/r{ - dir = 1 - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church/chapel) -"EY" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 10 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"EZ" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/cooking/pan, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"Fa" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/town) -"Fb" = ( -/obj/structure/bars/passage/shutter{ - redstone_id = "warehouse_shutter" - }, -/turf/open/floor/rogue/blocks/bluestone, -/area/rogue/indoors/town) -"Fc" = ( -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"Fd" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/idagger/steel, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/garrison) -"Fe" = ( -/obj/structure/stairs/fancy/c{ - icon_state = "fancy_stairs_c"; - dir = 1 - }, -/turf/open/floor/rogue/carpet/lord, -/area/rogue/indoors/town/manor) -"Ff" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/under/town/basement) -"Fg" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"Fi" = ( -/obj/machinery/light/rogue/forge, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"Fj" = ( -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"Fk" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/candle, -/obj/item/reagent_containers/food/snacks/rogue/meat/salami, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"Fm" = ( -/obj/item/roguebin/water, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor) -"Fo" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor) -"Fq" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/tavern) -"Fs" = ( -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"Fv" = ( -/obj/item/rogueweapon/stoneaxe/woodcut, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield) -"Fy" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town/dwarfin) -"FA" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town/roofs) -"FC" = ( -/obj/structure/fluff/statue/knight/interior/r, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"FD" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"FE" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/shop) -"FF" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"FG" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"FH" = ( -/obj/structure/kneestingers, -/turf/open/water/sewer, -/area/rogue/outdoors/rtfield) -"FI" = ( -/obj/structure/mineral_door/wood/window{ - lockid = "garrison" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/garrison) -"FJ" = ( -/obj/structure/closet/crate/roguecloset/dark, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town/tavern) -"FK" = ( -/obj/structure/bookcase/random, -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"FL" = ( -/obj/structure/fluff/wallclock/r, -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/obj/item/candle/skull, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"FM" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"FN" = ( -/obj/structure/winch{ - dir = 4; - gid = "manorgate" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"FO" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/obj/item/reagent_containers/glass/rag, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) -"FP" = ( -/obj/structure/closet/crate/drawer/inn, -/obj/item/storage/belt/rogue/pouch/coins/rich, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"FQ" = ( -/obj/structure/table/wood, -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/magician) -"FR" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/shop) -"FS" = ( -/obj/structure/closet/crate/chest, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/magician) -"FT" = ( -/obj/structure/roguewindow/openclose, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"FU" = ( -/obj/structure/bookcase/random, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"FV" = ( -/obj/effect/landmark/observer_start, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"FW" = ( -/obj/structure/mineral_door/wood/deadbolt, -/turf/open/floor/rogue/woodturned, -/area/rogue/under/town/basement) -"FX" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/candle/yellow, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"FY" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/shop) -"FZ" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/shop) -"Ga" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/shop) -"Gb" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/shop) -"Gc" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "manor" - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"Gd" = ( -/obj/machinery/light/rogue/chand, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/shop) -"Ge" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"Gf" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/shop) -"Gg" = ( -/obj/structure/roguemachine/scomm/r, -/turf/open/floor/rogue/tile{ - icon_state = "linoleum" - }, -/area/rogue/indoors/town/shop) -"Gi" = ( -/obj/structure/roguemachine/submission, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"Gj" = ( -/turf/open/floor/rogue/tile/masonic, -/area/rogue/indoors/town/manor) -"Gk" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/shop) -"Gl" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"Gm" = ( -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/magician) -"Gn" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town/magician) -"Go" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/shop) -"Gp" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 4 - }, -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/magician) -"Gq" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/shop) -"Gr" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 1 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"Gs" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"Gt" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 1 - }, -/area/rogue/indoors/town/shop) -"Gu" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/rooftop{ - icon_state = "roofg"; - dir = 2 - }, -/area/rogue/indoors/town/shop) -"Gv" = ( -/obj/structure/bed/rogue/mediocre, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"Gx" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/dwarfin) -"Gy" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) -"Gz" = ( -/obj/structure/ladder, -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/shop) -"GA" = ( -/obj/structure/mineral_door/wood, -/turf/open/floor/rogue/tile{ - icon_state = "linoleum" - }, -/area/rogue/indoors/town/shop) -"GB" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/tile{ - icon_state = "linoleum" - }, -/area/rogue/indoors/town/shop) -"GC" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/turf/open/floor/rogue/tile{ - icon_state = "linoleum" - }, -/area/rogue/indoors/town/shop) -"GD" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"GE" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/town/roofs) -"GF" = ( -/obj/structure/table/wood{ - icon_state = "tablewood3" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/shop) -"GG" = ( -/obj/structure/bookcase, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/shop) -"GH" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/shop) -"GI" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/rooftop{ - icon_state = "roofg"; - dir = 2 - }, -/area/rogue/outdoors/town) -"GJ" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"GK" = ( -/obj/structure/closet/crate/chest, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/butter, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"GL" = ( -/turf/closed/wall/mineral/rogue/decostone/end{ - icon_state = "decostone-e"; - dir = 8 - }, -/area/rogue/indoors/town/church) -"GM" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/town) -"GN" = ( -/obj/structure/lever{ - redstone_id = "merchroofshutt" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue) -"GP" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/mountains) -"GQ" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/under/town/basement) -"GR" = ( -/turf/open/floor/rogue/woodturned, -/area/rogue/outdoors/exposed/dwarf) -"GT" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/blocks{ - icon_state = "paving" - }, -/area/rogue/under/town/basement) -"GW" = ( -/turf/open/floor/carpet/purple, -/area/rogue/under/town/basement) -"GY" = ( -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"GZ" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 8 - }, -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) -"Hb" = ( -/obj/structure/fluff/clock, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"Hc" = ( -/obj/item/rogueore/coal, -/obj/item/rogueore/coal, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"Hd" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_x = -32 - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/manor) -"Hf" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"Hg" = ( -/obj/structure/mineral_door/wood, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/outdoors/town/roofs) -"Hi" = ( -/turf/open/floor/rogue/carpet/lord/left, -/area/rogue/indoors/town/manor) -"Hj" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town) -"Hk" = ( -/obj/structure/fluff/clock, -/turf/open/floor/rogue/wood, -/area/rogue/under/town/basement) -"Hl" = ( -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"Hm" = ( -/obj/structure/bed/rogue, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/dwarfin) -"Hn" = ( -/obj/structure/closet/crate/chest, -/obj/item/grown/log/tree/stick, -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/dwarfin) -"Hr" = ( -/obj/structure/fluff/walldeco/rpainting/forest{ - pixel_x = 32 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor) -"Ht" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"Hu" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town) -"Hv" = ( -/obj/structure/table/wood, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town) -"Hy" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"Hz" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"HA" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/candle, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"HB" = ( -/obj/structure/fermenting_barrel/random/water, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"HD" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "merchant" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/shop) -"HE" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/tavern) -"HH" = ( -/obj/structure/roguemachine/money, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"HI" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"HM" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/turf/open/floor/rogue/blocks{ - icon_state = "paving" - }, -/area/rogue/under/town/basement) -"HN" = ( -/turf/open/floor/rogue/tile/tilerg, -/area/rogue/indoors/town/manor) -"HP" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floor2"; - dir = 1 - }, -/area/rogue/outdoors/town) -"HR" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/manor) -"HS" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"HT" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" - }, -/area/rogue/outdoors/town) -"HV" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"HW" = ( -/turf/open/floor/rogue/blocks{ - icon_state = "bluestone" - }, -/area/rogue/under/town/basement) -"HX" = ( -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/shop) -"HY" = ( -/obj/structure/fluff/walldeco/wantedposter{ - pixel_x = -32 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"HZ" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/obj/structure/table/vtable, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"Ia" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"Ib" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"Ic" = ( -/obj/item/storage/backpack/rogue/satchel, -/obj/structure/closet/crate/chest, -/obj/item/book/rogue/bibble, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/church) -"Ie" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/under/town/basement) -"If" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_x = 32; - pixel_y = 0 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"Ig" = ( -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"Ij" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 4 - }, -/obj/effect/landmark/start/nightmaiden{ - dir = 4 - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath) -"Ik" = ( -/obj/structure/fluff/statue/knight/r, -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) -"Il" = ( -/obj/structure/bed/rogue, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/church) -"Im" = ( -/obj/structure/fluff/clock, -/turf/open/floor/rogue/cobblerock, -/area/rogue/under/cave) -"Ir" = ( -/obj/item/storage/roguebag, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"It" = ( -/turf/open/floor/rogue/rooftop{ - icon_state = "roofg"; - dir = 2 - }, -/area/rogue/indoors/town/shop) -"Iu" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/church) -"Iw" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"Ix" = ( -/obj/structure/table/wood{ - icon_state = "map4" - }, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor) -"Iy" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/roguecoin/copper/pile, -/obj/item/rope/chain, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"Iz" = ( -/obj/effect/landmark/latejoin, -/obj/structure/warningbell/fluff{ - pixel_y = 16 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floor2"; - dir = 1 - }, -/area/rogue/outdoors/town) -"IB" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "dungeon"; - max_integrity = 200 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"IC" = ( -/obj/structure/closet/crate/chest, -/obj/item/needle/thorn, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"ID" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"IF" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town) -"IH" = ( -/obj/structure/fermenting_barrel, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/under/town/basement) -"IK" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/rogueweapon/huntingknife/idagger, -/obj/item/rogueweapon/mace/wsword, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"IO" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/sword/iron, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"IP" = ( -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"IQ" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floor2"; - dir = 1 - }, -/area/rogue/outdoors/town) -"IT" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/obj/structure/fluff/millstone{ - pixel_y = 7 - }, -/turf/open/floor/rogue/tile{ - icon_state = "linoleum" - }, -/area/rogue/indoors/town/manor) -"IU" = ( -/obj/effect/landmark/latejoin, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/outdoors/town) -"IW" = ( -/obj/structure/fluff/telescope, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"IX" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" - }, -/area/rogue/outdoors/town) -"IY" = ( -/obj/structure/table/wood/treestump/burnt, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) -"IZ" = ( -/obj/structure/chair/bench, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/town) -"Ja" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town/roofs) -"Jg" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/blocks{ - icon_state = "greenblocks" - }, -/area/rogue/under/town/basement) -"Jh" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/dwarfin) -"Ji" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/magician) -"Jj" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town) -"Jk" = ( -/turf/closed/wall/mineral/rogue/decostone/end{ - icon_state = "decostone-e"; - dir = 4 - }, -/area/rogue/indoors/town/manor) -"Jn" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 8 - }, -/area/rogue/indoors/town/shop) -"Jo" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"Jr" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"Js" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/manor) -"Jt" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "manor" - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"Jy" = ( -/obj/effect/landmark/latejoin, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floor2"; - dir = 1 - }, -/area/rogue/outdoors/town) -"Jz" = ( -/obj/machinery/light/rogue/lanternpost{ - dir = 1 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"JA" = ( -/turf/closed/mineral/random/rogue, -/area/rogue/under/cave) -"JB" = ( -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"JC" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" - }, -/area/rogue/outdoors/town) -"JE" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/outdoors/town/roofs) -"JF" = ( -/turf/closed/wall/mineral/rogue/wood, -/area/rogue/indoors/town/manor) -"JI" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/dwarfin) -"JJ" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/bottle, -/obj/item/reagent_containers/glass/bottle, -/obj/item/reagent_containers/glass/bottle, -/obj/item/reagent_containers/glass/bottle, -/turf/open/floor/rogue/blocks/paving/vert, -/area/rogue/under/town/basement) -"JK" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/manor) -"JL" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern) -"JO" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_y = 32 - }, -/obj/effect/landmark/start/dungeoneer{ - dir = 8 - }, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/manor) -"JP" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"JR" = ( -/obj/machinery/light/rogue/lanternpost, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"JT" = ( -/obj/structure/fluff/statue/gargoyle/moss, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) -"JW" = ( -/obj/structure/roguewindow/openclose, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"JX" = ( -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/garrison) -"Ka" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"Kb" = ( -/obj/structure/bars/cemetery, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"Kc" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/roguekey/dungeon, -/obj/item/roguekey/walls, -/obj/item/keyring, -/obj/item/roguekey/manor, -/obj/item/storage/backpack/rogue/satchel, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/garrison) -"Ke" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/railing/border, -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/outdoors/town) -"Kg" = ( -/obj/structure/fluff/walldeco/stone, -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/manor) -"Kh" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 - }, -/obj/item/paper/scroll, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"Ki" = ( -/obj/item/roguebin, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"Kj" = ( -/obj/structure/flora/roguegrass/water/reeds, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/town) -"Kk" = ( -/obj/structure/closet/crate/roguecloset/crafted, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"Kl" = ( -/obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/dwarfin) -"Km" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"Kn" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/rogue/indoors/town/dwarfin) -"Kp" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/bath) -"Kq" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/tavern) -"Kr" = ( -/obj/structure/fluff/walldeco/chains, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"Kt" = ( -/turf/closed/mineral/random/rogue, -/area/rogue/under/town/basement) -"Ku" = ( -/obj/structure/fluff/walldeco/wantedposter/l, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"Kv" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"Kw" = ( -/obj/structure/bookcase, -/turf/open/floor/rogue/blocks/paving/vert, -/area/rogue/under/town/basement) -"Kx" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "tower" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/magician) -"Kz" = ( -/turf/closed/wall/mineral/rogue/decostone/end, -/area/rogue/indoors/town/church) -"KA" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield) -"KB" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"KC" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 - }, -/obj/item/candle/yellow, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"KD" = ( -/obj/structure/fluff/psycross, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"KG" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/shop) -"KH" = ( -/obj/structure/mineral_door/wood{ - lockid = archive; - dir = 8; - locked = 1 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"KL" = ( -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"KO" = ( -/obj/structure/table/wood, -/turf/open/floor/rogue/blocks/paving, -/area/rogue/under/town/basement) -"KP" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"KR" = ( -/obj/structure/closet/crate/chest, -/obj/item/roguegem/green, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"KT" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 4 - }, -/turf/open/floor/carpet/purple, -/area/rogue/indoors/town/shop) -"KU" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/town/basement) -"KV" = ( -/obj/structure/mineral_door/wood{ - lockid = "dungeon" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"KZ" = ( -/turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_corner"; - dir = 4 - }, -/area/rogue/indoors/town/dwarfin) -"La" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 - }, -/obj/item/storage/pill_bottle/dice, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"Ld" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/dwarfin) -"Lg" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) -"Lh" = ( -/obj/structure/fluff/clock, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"Lj" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"Ll" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/magician) -"Lp" = ( -/obj/structure/ladder, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/wood, -/area/rogue/under/town/basement) -"Lq" = ( -/obj/structure/mineral_door/wood, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"Ls" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"Lu" = ( -/obj/structure/roguewindow, -/area/rogue/indoors/town) -"Lv" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_y = 32 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"Lw" = ( -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/under/cave) -"Lx" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 26 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/shop) -"Ly" = ( -/turf/closed/wall/mineral/rogue/decostone/cand, -/area/rogue/indoors/town/church) -"LB" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/under/cave) -"LC" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"LE" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" - }, -/area/rogue/outdoors/town) -"LF" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 1 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/magician) -"LH" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"LI" = ( -/obj/structure/fluff/statue/tdummy, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor) -"LL" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/under/cave) -"LM" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/rtfield) -"LP" = ( -/obj/structure/plasticflaps, -/turf/open/floor/rogue/cobble, -/area/rogue/under/cave) -"LS" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"LX" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/manor) -"LY" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/obj/item/cooking/pan, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"Ma" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/border, -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/outdoors/town) -"Md" = ( -/obj/structure/kneestingers, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/town) -"Me" = ( -/obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/dwarfin) -"Mf" = ( -/obj/machinery/light/rogue/oven/south, -/turf/open/floor/rogue/tile{ - icon_state = "tile" - }, -/area/rogue/indoors/town/tavern) -"Mi" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" - }, -/area/rogue/outdoors/town) -"Mj" = ( -/obj/structure/closet/crate/chest{ - locked = 1; - lockid = "dungeon" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"Ml" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/glass/mortar, -/obj/item/pestle, -/turf/open/floor/rogue/blocks/paving, -/area/rogue/under/town/basement) -"Mm" = ( -/obj/structure/table/wood/treestump, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"Mn" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"Mo" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 4 - }, -/obj/item/reagent_containers/glass/cup, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/manor) -"Mp" = ( -/obj/structure/fluff/traveltile{ - aportalgoesto = "bogrtin"; - aportalid = "bogrtout" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) -"Mq" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/bath) -"Ms" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"Mu" = ( -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/magician) -"Mv" = ( -/obj/structure/closet/crate/chest, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/dwarfin) -"Mw" = ( -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"My" = ( -/obj/machinery/light/rogue/wallfire/candle/blue/r, -/turf/open/floor/carpet/purple, -/area/rogue/indoors/town/magician) -"MB" = ( -/obj/structure/chair/wood, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/town) -"MC" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/natural/cloth, -/obj/item/natural/cloth, -/obj/item/flashlight/flare/torch/metal, -/obj/item/flashlight/flare/torch/metal, -/obj/item/book/rogue/law, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"MD" = ( -/obj/effect/landmark/mapGenerator/rogue/mountain{ - endTurfX = 128; - endTurfY = 128 - }, -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/mountains) -"ME" = ( -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/indoors/town) -"MG" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"MI" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"MJ" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"MK" = ( -/obj/structure/well/fountain, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"MM" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"MN" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/book/rogue/law, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"MO" = ( -/turf/closed/wall/mineral/rogue/wood, -/area/rogue/indoors/town) -"MR" = ( -/obj/machinery/light/rogue/lanternpost{ - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"MS" = ( -/obj/structure/table/vtable/v2, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/bath) -"MT" = ( -/obj/structure/table/wood{ - icon_state = "map5" - }, -/obj/item/paper/scroll, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor) -"MV" = ( -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/garrison) -"MW" = ( -/obj/structure/flora/roguegrass/bush_meagre, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"MX" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 4 - }, -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/manor) -"Na" = ( -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) -"Nb" = ( -/obj/structure/fluff/statue/gargoyle, -/obj/machinery/light/rogue/torchholder, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"Nc" = ( -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"Nd" = ( -/obj/structure/flora/roguegrass/bush/wall/tall, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"Ne" = ( -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"Nf" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"Ng" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"Nh" = ( -/turf/open/floor/carpet/stellar, -/area/rogue/under/town/basement) -"Nm" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors/town/garrison) -"Nq" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"Ns" = ( -/obj/structure/roguemachine/steward, -/obj/structure/disposalpipe/sorting/mail{ - pixel_y = 32 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"Nt" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" - }, -/area/rogue/outdoors/town) -"Nu" = ( -/obj/structure/closet/crate/chest{ - locked = 1; - lockid = "dungeon" - }, -/obj/item/rope/chain, -/obj/item/rope/chain, -/obj/item/rope/chain, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"Nz" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 - }, -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) -"NF" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath) -"NG" = ( -/obj/structure/closet/crate/chest, -/obj/item/clothing/mask/cigarette/pipe/westman, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/magician) -"NK" = ( -/obj/structure/bars, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"NM" = ( -/obj/item/roguegem, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"NN" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "merchant" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"NO" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"NP" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/bottle, -/obj/item/reagent_containers/glass/bottle, -/obj/item/reagent_containers/glass/bottle, -/turf/open/floor/rogue/blocks/paving/vert, -/area/rogue/under/town/basement) -"NQ" = ( -/obj/structure/bed/rogue, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/garrison) -"NW" = ( -/obj/structure/gate/bars{ - gid = "townout" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"NX" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield) -"NZ" = ( -/obj/structure/table/wood, -/obj/item/rogueweapon/spear/billhook, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"Oa" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/structure/mirror{ - pixel_y = 28 - }, -/obj/item/natural/cloth, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"Ob" = ( -/obj/item/grown/log/tree, -/obj/item/grown/log/tree, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"Oe" = ( -/obj/structure/flora/newtree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) -"Of" = ( -/obj/structure/fermenting_barrel, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"Om" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/cobble, -/area/rogue/under/cave) -"Oo" = ( -/obj/effect/landmark/latejoin, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" - }, -/area/rogue/outdoors/town) -"Os" = ( -/obj/item/rope/chain, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"Ot" = ( -/obj/machinery/light/rogue/lanternpost{ - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"Ou" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/garrison) -"Ow" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 4; - icon_state = "donjondir"; - locked = 0; - lockid = "garrison" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"Ox" = ( -/turf/open/floor/rogue/tile{ - icon_state = "linoleum" - }, -/area/rogue/indoors/town/manor) -"OA" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/garrison) -"OB" = ( -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath) -"OC" = ( -/obj/structure/fluff/statue/knight/r, -/turf/open/floor/rogue/tile/masonic, -/area/rogue/indoors/town/manor) -"OD" = ( -/turf/open/floor/rogue/tile{ - icon_state = "linoleum" - }, -/area/rogue/indoors/town/shop) -"OE" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 - }, -/obj/item/reagent_containers/food/snacks/produce/apple, -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) -"OG" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 - }, -/obj/item/storage/roguebag, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/tavern) -"OH" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"OI" = ( -/obj/structure/fluff/railing/wood{ - dir = 1; - pixel_y = -1 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"OK" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor) -"OL" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 4 - }, -/area/rogue/indoors/town/shop) -"OM" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/tile/tilerg, -/area/rogue/indoors/town) -"OP" = ( -/obj/structure/roguemachine/scomm/r, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"OR" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"OS" = ( -/obj/machinery/light/rogue/wallfire/candle/blue/l, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"OT" = ( -/obj/structure/bars/passage{ - redstone_id = "tourneytop" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/under/town/basement) -"OV" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/tavern) -"OW" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town/manor) -"OX" = ( -/obj/structure/fluff/walldeco/stone{ - pixel_x = 0; - pixel_y = 32 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"OZ" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcg"; - locked = 1; - lockid = "garrison" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"Pb" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/tavern) -"Pd" = ( -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"Ph" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" - }, -/area/rogue/outdoors/town) -"Pi" = ( -/obj/structure/flora/roguegrass/water, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/town) -"Pj" = ( -/obj/structure/rack/rogue, -/obj/item/flashlight/flare/torch/lantern, -/obj/item/flashlight/flare/torch/lantern, -/obj/item/rope/chain, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"Pp" = ( -/obj/item/chair/stool/bar/rogue, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"Pq" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"Ps" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/under/town/basement) -"Pw" = ( -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town) -"Px" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"PB" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/blocks/paving/vert, -/area/rogue/under/town/basement) -"PD" = ( -/obj/structure/roguewindow/stained, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"PE" = ( -/turf/open/floor/rogue/metal, -/area/rogue/outdoors/town) -"PG" = ( -/obj/structure/mineral_door/wood/deadbolt, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/under/town/basement) -"PH" = ( -/obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 4; - locked = 1 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"PI" = ( -/obj/structure/flora/newtree, -/obj/structure/flora/newtree, -/obj/structure/flora/newtree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"PL" = ( -/obj/structure/table/wood, -/obj/structure/bars{ - icon_state = "barsbent"; - layer = 2.81 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/shop) -"PN" = ( -/obj/structure/ladder, -/obj/structure/bars/grille, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"PP" = ( -/obj/machinery/light/rogue/smelter/great, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/dwarfin) -"PQ" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"PT" = ( -/obj/structure/table/vtable/v2, -/obj/item/candle/skull/lit, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"PV" = ( -/obj/structure/plasticflaps, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave) -"PW" = ( -/turf/closed/wall/mineral/rogue/decostone, -/area/rogue/indoors/town/church) -"PX" = ( -/turf/open/water/bath, -/area/rogue/indoors/town/bath) -"PZ" = ( -/obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 4 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/dwarfin) -"Qb" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"Qd" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"Qe" = ( -/obj/structure/chair/bench/couch, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"Qf" = ( -/obj/structure/bed/rogue/wool, -/obj/item/bedsheet/rogue/cloth, -/turf/open/floor/rogue/wood, -/area/rogue/under/town/basement) -"Qj" = ( -/obj/structure/fluff/globe, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"Qk" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors/town/garrison) -"Ql" = ( -/obj/structure/roguemachine/scomm/l, -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) -"Qm" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 26 - }, -/obj/structure/table/wood, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/manor) -"Qq" = ( -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"Qs" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/outdoors/rtfield) -"Qt" = ( -/turf/open/floor/rogue/blocks{ - icon_state = "newstone2" - }, -/area/rogue/indoors/town/church) -"Qu" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/dwarfin) -"Qv" = ( -/obj/structure/bed/rogue, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/dwarfin) -"Qx" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town) -"Qy" = ( -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) -"QA" = ( -/obj/structure/plasticflaps, -/turf/open/water/cleanshallow, -/area/rogue/under/cave) -"QC" = ( -/obj/structure/mineral_door/wood/window{ - lockid = "manor"; - name = "hall of eating" - }, -/turf/open/floor/rogue/blocks{ - icon_state = "bluestone" - }, -/area/rogue/indoors/town/manor) -"QD" = ( -/obj/structure/plasticflaps, -/turf/open/floor/rogue/blocks, -/area/rogue/under/cave) -"QF" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "manor" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"QH" = ( -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/blocks{ - icon_state = "newstone2" - }, -/area/rogue/under/town/basement) -"QI" = ( -/obj/structure/flora/roguegrass/water, -/turf/open/water/sewer, -/area/rogue/outdoors/rtfield) -"QL" = ( -/obj/item/rogueweapon/sword/sabre, -/obj/structure/rack/rogue, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"QM" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town/roofs) -"QP" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 4 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"QS" = ( -/turf/open/floor/rogue/blocks/paving/vert, -/area/rogue/under/town/basement) -"QT" = ( -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/cobblerock, -/area/rogue/under/cave) -"QV" = ( -/obj/effect/landmark/events/haunts, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"QX" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_y = 32 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/garrison) -"QY" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"Ra" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/clothing/head/roguetown/helmet/leather, -/obj/item/clothing/head/roguetown/roguehood/random, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"Re" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) -"Rl" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/dwarfin) -"Rm" = ( -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors/town/bath) -"Rn" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) -"Ro" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/mountains) -"Rr" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/indoors/town/shop) -"Rv" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church/chapel) -"Rw" = ( -/obj/structure/bookcase, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town) -"Rx" = ( -/obj/structure/bookcase/random, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"Ry" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"RB" = ( -/obj/effect/landmark/start/merchant, -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/shop) -"RC" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 2 - }, -/area/rogue/indoors/town/shop) -"RD" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town) -"RF" = ( -/obj/structure/table/wood, -/obj/structure/bars{ - icon_state = "barsbent" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"RH" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/storage/roguebag, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"RI" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"RK" = ( -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"RM" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"RQ" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/dwarfin) -"RT" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/tile{ - icon_state = "tile" - }, -/area/rogue/indoors/town/tavern) -"RU" = ( -/obj/structure/roguemachine/scomm/r, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"RV" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/book/rogue/law, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/garrison) -"RX" = ( -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/church) -"Sa" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/garrison) -"Sc" = ( -/obj/effect/landmark/start/villager, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield) -"Se" = ( -/obj/structure/closet/crate/chest, -/obj/item/rope/chain, -/obj/item/rope/chain, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"Sf" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 26 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"Sg" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/cave) -"Sl" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"Sm" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 4 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/church) -"Sn" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"Sq" = ( -/obj/structure/fluff/statue/femalestatue{ - icon_state = "3" - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath) -"Ss" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 4 - }, -/obj/item/natural/feather, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"Sv" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor) -"Sw" = ( -/obj/machinery/light/rogue/lanternpost, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"Sz" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"SB" = ( -/obj/structure/closet/crate/chest, -/obj/item/clothing/wrists/roguetown/bracers/leather, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"SC" = ( -/obj/structure/fluff/millstone, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"SD" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/garrison) -"SF" = ( -/obj/machinery/light/rogue/torchholder{ - icon_state = "torchwall1"; - dir = 8 - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"SI" = ( -/obj/structure/flora/newtree, -/obj/structure/flora/newtree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"SJ" = ( -/obj/structure/roguemachine/scomm/l, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/dwarfin) -"SK" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"SM" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 1; - icon_state = "wooddir" - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"SN" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid"; - dir = 1 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/garrison) -"SO" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/tavern) -"ST" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 4; - icon_state = "donjondir"; - locked = 1; - lockid = "dungeon" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town) -"SU" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) -"SV" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/needle/thorn, -/obj/item/reagent_containers/glass/cup/silver, -/obj/item/roguekey/church{ - lockid = "priest" - }, -/obj/item/roguekey/church{ - lockid = "priest" - }, -/obj/item/paper/confession, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/church) -"SW" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"SZ" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town) -"Ta" = ( -/obj/structure/guillotine, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/town) -"Tb" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcr"; - locked = 1; - lockid = "garrison" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/garrison) -"Tc" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town) -"Td" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/tavern) -"Tf" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/shop) -"Tg" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "manor" - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"Tj" = ( -/obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/town) -"Tl" = ( -/obj/item/roguebin/water, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/under/town/basement) -"To" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/town) -"Tq" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/garrison) -"Tu" = ( -/obj/structure/fluff/walldeco/stone{ - pixel_x = 0; - pixel_y = 32 - }, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/outdoors/town) -"Tx" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"Tz" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"TA" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"TF" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/clothing/cloak/raincloak/mortus, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"TH" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/wood, -/area/rogue/under/town/basement) -"TI" = ( -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/tavern) -"TK" = ( -/obj/structure/rack/rogue, -/obj/item/flashlight/flare/torch/lantern, -/obj/item/flashlight/flare/torch/lantern, -/obj/item/flint, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"TL" = ( -/obj/structure/closet/crate/chest, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"TN" = ( -/obj/structure/closet/crate/coffin, -/turf/open/floor/rogue/blocks{ - icon_state = "bluestone" - }, -/area/rogue/under/town/basement) -"TO" = ( -/obj/effect/landmark/start/butler{ - icon_state = "arrow"; - dir = 8 - }, -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) -"TP" = ( -/obj/item/roguebin/water, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"TQ" = ( -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"TS" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" - }, -/area/rogue/outdoors/town) -"TT" = ( -/obj/item/rogueweapon/hammer, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"TV" = ( -/obj/structure/stairs/fancy/l{ - icon_state = "fancy_stairs_l"; - dir = 1 - }, -/turf/open/floor/rogue/carpet/lord{ - icon_state = "carpet_l" - }, -/area/rogue/indoors/town/manor) -"TW" = ( -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/church) -"TY" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/natural/feather, -/obj/item/scrying, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/magician) -"Ua" = ( -/obj/structure/closet/crate/coffin, -/obj/item/reagent_containers/powder/spice, -/turf/open/floor/carpet/purple, -/area/rogue/under/town/basement) -"Uc" = ( -/obj/structure/flora/newtree, -/obj/structure/flora/newtree, -/obj/structure/flora/newtree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) -"Ud" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/woodturned, -/area/rogue/outdoors/exposed/dwarf) -"Ue" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_y = 32 - }, -/turf/open/floor/rogue/tile/masonic{ - dir = 4 - }, -/area/rogue/indoors/town/manor) -"Uf" = ( -/obj/structure/fluff/statue/gargoyle/moss, -/obj/machinery/light/rogue/torchholder, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"Ug" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"Uh" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/structure/mirror{ - pixel_x = -28 - }, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/under/town/basement) -"Uk" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"Ul" = ( -/obj/structure/closet/crate/chest, -/obj/item/quiver/bolts, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/garrison) -"Um" = ( -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/outdoors/exposed/dwarf) -"Un" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" - }, -/area/rogue/outdoors/town) -"Uo" = ( -/obj/structure/closet/dirthole/closed, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"Up" = ( -/obj/structure/fluff/wallclock/l, -/obj/structure/rack/rogue, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/dwarfin) -"Uq" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 5 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" - }, -/area/rogue/outdoors/town) -"Uv" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/cobblerock, -/area/rogue/under/cave) -"Uw" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 4; - icon_state = "donjondir"; - locked = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"Ux" = ( -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"Uy" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 - }, -/obj/item/reagent_containers/food/snacks/produce/apple, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/manor) -"UA" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 4 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/magician) -"UB" = ( -/obj/machinery/light/rogue/torchholder/r, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"UC" = ( -/obj/structure/rack/rogue, -/obj/item/gun/ballistic/revolver/grenadelauncher/bow, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/garrison) -"UD" = ( -/obj/structure/closet/crate/chest, -/obj/item/rope/chain, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/garrison) -"UE" = ( -/obj/structure/lever{ - redstone_id = "thronegrille" - }, -/turf/open/floor/rogue/carpet/lord/left, -/area/rogue/indoors/town/manor) -"UF" = ( -/obj/structure/chair/wood/rogue/fancy{ - icon_state = "chair1"; - dir = 8 - }, -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) -"UI" = ( -/obj/item/roguebin/trash, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"UJ" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"UM" = ( -/turf/open/floor/rogue/carpet, -/area/rogue/under/town/basement) -"UN" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" - }, -/area/rogue/outdoors/town) -"UP" = ( -/obj/structure/chair/wood/rogue/fancy, -/obj/structure/fluff/walldeco/painting/queen{ - pixel_x = 0; - pixel_y = 32 - }, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor) -"US" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" - }, -/area/rogue/outdoors/town) -"UT" = ( -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town) -"UU" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town) -"UV" = ( -/obj/item/roguebin/water, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"UW" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/under/cave) -"UX" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcv"; - lockid = "shop" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/shop) -"UY" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "sheriff" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/garrison) -"Va" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "mason" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/dwarfin) -"Vc" = ( -/obj/structure/table/wood{ - icon_state = "tablewood3" - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/dwarfin) -"Vd" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"Ve" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 - }, -/obj/item/reagent_containers/glass/cup, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/manor) -"Vg" = ( -/obj/structure/fluff/wallclock/r, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"Vh" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 - }, -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) -"Vi" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcr"; - locked = 1; - lockid = "sheriff" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"Vk" = ( -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"Vl" = ( -/obj/structure/table/wood, -/obj/item/keyring, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/church) -"Vo" = ( -/obj/structure/fluff/statue/gargoyle/moss, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"Vr" = ( -/obj/structure/closet/crate/chest, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"Vt" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/tile{ - icon_state = "linoleum" - }, -/area/rogue/indoors/town/manor) -"Vv" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"Vw" = ( -/turf/open/floor/rogue/wood, -/area/rogue/under/cave) -"Vy" = ( -/turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_corner"; - dir = 8 - }, -/area/rogue/indoors/town/dwarfin) -"Vz" = ( -/obj/structure/bars, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"VA" = ( -/obj/structure/bars{ - alpha = 190 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/garrison) -"VB" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/shield/wood, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"VC" = ( -/turf/closed/wall/mineral/rogue/wood, -/area/rogue/indoors/town/dwarfin) -"VD" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/wood, -/area/rogue/under/town/basement) -"VE" = ( -/obj/structure/roguemachine/merchantvend, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/shop) -"VF" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) -"VG" = ( -/obj/structure/table/wood, -/obj/structure/bars{ - icon_state = "barsbent"; - layer = 2.81 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/church) -"VH" = ( -/obj/structure/roguewindow/openclose, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"VJ" = ( -/obj/structure/fluff/clock, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"VL" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/natural/cloth, -/obj/item/natural/cloth, -/obj/item/natural/cloth, -/obj/item/reagent_containers/food/snacks/butter, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/obj/item/flashlight/flare/torch/metal, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"VN" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/under/town/basement) -"VO" = ( -/obj/machinery/light/rogue/lanternpost, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/town) -"VQ" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/town) -"VS" = ( -/obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 4 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"VT" = ( -/obj/structure/closet/dirthole/closed, -/obj/structure/gravemarker, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"VU" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 8 - }, -/area/rogue/outdoors/mountains) -"VV" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/mountains) -"VW" = ( -/obj/machinery/light/rogue/lanternpost, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"VX" = ( -/obj/structure/closet/dirthole/closed/loot, -/obj/structure/gravemarker, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"VY" = ( -/obj/structure/roguemachine/scomm/r, -/turf/open/floor/rogue/tile/tilerg, -/area/rogue/indoors/town/manor) -"VZ" = ( -/obj/structure/mineral_door/wood/deadbolt{ - icon_state = "wooddir"; - dir = 8 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"Wa" = ( -/obj/machinery/light/rogue/hearth, -/turf/open/floor/rogue/tile{ - icon_state = "linoleum" - }, -/area/rogue/indoors/town/manor) -"We" = ( -/obj/structure/bookcase, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/under/town/basement) -"Wf" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"Wg" = ( -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"Wh" = ( -/obj/structure/closet/crate/chest, -/obj/item/rope, -/obj/item/rope, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"Wj" = ( -/obj/structure/fermenting_barrel/water, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"Wk" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"Wm" = ( -/obj/structure/bed/rogue/wooldouble, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town) -"Wn" = ( -/obj/effect/landmark/latejoin, -/obj/structure/fluff/wallclock, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" - }, -/area/rogue/outdoors/town) -"Wo" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 4 - }, -/area/rogue/indoors/town/shop) -"Wq" = ( -/obj/structure/table/wood{ - icon_state = "map1" - }, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor) -"Wr" = ( -/obj/machinery/light/rogue/lanternpost{ - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"Wt" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/tavern) -"Wu" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 4 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/outdoors/town) -"Wv" = ( -/obj/machinery/light/rogue/wallfire/candle, -/obj/structure/rack/rogue, -/obj/item/reagent_containers/syringe, -/obj/item/reagent_containers/syringe, -/obj/item/reagent_containers/syringe, -/obj/item/reagent_containers/syringe, -/turf/open/floor/rogue/blocks/paving/vert, -/area/rogue/under/town/basement) -"Wx" = ( -/turf/open/floor/rogue/carpet/lord/right, -/area/rogue/indoors/town/manor) -"WA" = ( -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 1 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 8 - }, -/obj/structure/fluff/railing/border{ - icon_state = "border"; - dir = 9 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" - }, -/area/rogue/outdoors/town) -"WB" = ( -/obj/structure/fermenting_barrel/random/beer, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"WE" = ( -/obj/structure/chair/bench{ - icon_state = "bench"; - dir = 1 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"WF" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 - }, -/obj/machinery/light/rogue/wallfire/candle, -/obj/item/rogueweapon/huntingknife/stoneknife, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"WG" = ( -/obj/structure/closet/crate/chest, -/obj/item/rope, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"WJ" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 1 - }, -/area/rogue/indoors/town/shop) -"WK" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomii"; - name = "ROOM II" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/tavern) -"WL" = ( -/obj/item/natural/rock, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"WN" = ( -/obj/structure/mineral_door/wood/fancywood{ - locked = 1; - lockid = "lord"; - name = "Lord's Apartment" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"WP" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_y = 32 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) -"WQ" = ( -/obj/structure/bars, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"WR" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcr"; - locked = 1; - lockid = "garrison" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"WT" = ( -/obj/structure/well, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) -"WV" = ( -/obj/structure/mineral_door/wood{ - lockid = "garrison" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"WW" = ( -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/magician) -"WY" = ( -/obj/structure/closet/crate/chest, -/obj/item/clothing/suit/roguetown/shirt/rags, -/obj/item/clothing/suit/roguetown/shirt/rags, -/obj/item/clothing/suit/roguetown/shirt/rags, -/obj/item/clothing/suit/roguetown/shirt/rags, -/obj/item/clothing/suit/roguetown/shirt/rags, -/obj/item/clothing/under/roguetown/loincloth/brown, -/obj/item/clothing/under/roguetown/loincloth/brown, -/obj/item/clothing/under/roguetown/loincloth/brown, -/obj/item/clothing/under/roguetown/loincloth/brown, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"Xa" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/bottle, -/obj/item/reagent_containers/glass/bottle, -/turf/open/floor/rogue/blocks/paving/vert, -/area/rogue/under/town/basement) -"Xb" = ( -/obj/structure/fluff/clock, -/turf/open/floor/carpet/purple, -/area/rogue/indoors/town/shop) -"Xc" = ( -/obj/structure/fluff/walldeco/bigpainting/lake, -/turf/open/floor/rogue/carpet/lord/right, -/area/rogue/indoors/town/manor) -"Xd" = ( -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/woodturned, -/area/rogue/outdoors/town/roofs) -"Xe" = ( -/obj/machinery/light/rogue/oven/south, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town) -"Xf" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"Xk" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/church) -"Xl" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "tavern" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"Xm" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 5 - }, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"Xn" = ( -/turf/closed/wall/mineral/rogue/decostone/end{ - icon_state = "decostone-e"; - dir = 1 - }, -/area/rogue/indoors/town/church) -"Xo" = ( -/turf/open/floor/rogue/tile/masonic{ - dir = 1 - }, -/area/rogue/indoors/town/manor) -"Xq" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 1 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"Xt" = ( -/turf/open/floor/rogue/ruinedwood, -/area/rogue/under/town/basement) -"Xu" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"Xw" = ( -/turf/closed/wall/mineral/rogue/decostone/long{ - icon_state = "decostone-l"; - dir = 1 - }, -/area/rogue/indoors/town/manor) -"Xx" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/church) -"Xy" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"Xz" = ( -/obj/structure/stairs/fancy/r{ - icon_state = "fancy_stairs_r"; - dir = 1 - }, -/turf/open/floor/rogue/carpet/lord{ - icon_state = "carpet_r" - }, -/area/rogue/indoors/town/manor) -"XB" = ( -/turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_line"; - dir = 4 - }, -/area/rogue/indoors/town/dwarfin) -"XH" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 1 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"XI" = ( -/obj/structure/mineral_door/wood/fancywood{ - locked = 1; - lockid = "hand"; - name = "Hand's Chambers" - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) -"XJ" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/under/town/basement) -"XQ" = ( -/obj/item/flashlight/flare/torch/lantern, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/garrison) -"XV" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/quiver/arrows, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"XX" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 4 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town) -"XY" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/magician) -"XZ" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 4 - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath) -"Yb" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/flint{ - pixel_x = -1 - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"Yd" = ( -/obj/structure/roguemachine/scomm/l, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) -"Yf" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/outdoors/town) -"Yi" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1"; - dir = 1 - }, -/obj/item/candle/skull, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"Yo" = ( -/obj/structure/closet/crate/chest, -/obj/item/rogueore/coal, -/obj/item/rogueore/coal, -/obj/item/rogueore/coal, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/dwarfin) -"Yp" = ( -/turf/open/floor/rogue/blocks/newstone, -/area/rogue/under/town/basement) -"Yt" = ( -/obj/structure/bed/rogue/shit, -/obj/effect/landmark/start/servant{ - icon_state = "arrow"; - dir = 8 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"Yu" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/blocks, -/area/rogue/under/cave) -"Yw" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/under/cave) -"Yz" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_y = 32 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"YD" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/flint, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor) -"YF" = ( -/obj/structure/chair/wood/rogue{ - icon_state = "chair2"; - dir = 8 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/outdoors/town/roofs) -"YG" = ( -/obj/structure/fluff/statue/gargoyle/moss, -/obj/machinery/light/rogue/torchholder, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"YI" = ( -/turf/open/water/cleanshallow, -/area/rogue/outdoors/town) -"YJ" = ( -/obj/structure/well{ - name = "well of man-eating ghouls" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"YK" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/mountains) -"YL" = ( -/obj/effect/landmark/mapGenerator/rogue/roguetownfield{ - endTurfX = 128; - endTurfY = 128 - }, -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/rtfield) -"YM" = ( -/obj/structure/fluff/grindwheel, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/dwarfin) -"YN" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 1 - }, -/turf/open/floor/rogue/blocks{ - icon_state = "bluestone" - }, -/area/rogue/indoors/town/manor) -"YQ" = ( -/obj/structure/roguewindow/openclose{ - icon_state = "woodwindowdir"; - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/shop) -"YS" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/rogue/blocks{ - icon_state = "paving" - }, -/area/rogue/under/town/basement) -"YT" = ( -/obj/structure/closet/crate/roguecloset, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"YV" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/obj/item/flint{ - pixel_x = -1 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"YW" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) -"YX" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/dwarfin) -"YY" = ( -/obj/structure/closet/crate/chest, -/obj/item/rope/chain, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"YZ" = ( -/obj/structure/closet/crate/chest, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"Za" = ( -/obj/item/flashlight/flare/torch/metal, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/garrison) -"Ze" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 6 - }, -/turf/open/floor/rogue/tile{ - icon_state = "bfloorz" - }, -/area/rogue/indoors/town/manor) -"Zf" = ( -/obj/structure/bookcase, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"Zg" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 9 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/manor) -"Zk" = ( -/obj/structure/stairs/stone{ - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"Zm" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 1 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/dwarfin) -"Zn" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town/tavern) -"Zp" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town/roofs) -"Zq" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/garrison) -"Zr" = ( -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/dwarfin) -"Zs" = ( -/obj/machinery/light/rogue/lanternpost, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"Zu" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_x = -32; - pixel_y = 0 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"Zv" = ( -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/town) -"Zz" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 8 - }, -/obj/item/reagent_containers/glass/cup, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) -"ZA" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/dwarf) -"ZB" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"ZC" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/church) -"ZD" = ( -/obj/structure/bars/grille, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"ZE" = ( -/turf/open/floor/rogue/tile/tilerg, -/area/rogue/indoors/town) -"ZG" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 8 - }, -/area/rogue/indoors/town/shop) -"ZH" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 1; - icon_state = "donjondir"; - locked = 1; - lockid = "dungeon" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"ZI" = ( -/obj/structure/table/wood, -/obj/structure/bars{ - alpha = 150 - }, -/obj/item/candle/skull, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"ZJ" = ( -/obj/structure/stairs{ - icon_state = "stairs"; - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"ZM" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/roguekey/walls, -/obj/item/keyring, -/obj/item/keyring, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"ZO" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town) -"ZP" = ( -/obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/manor) -"ZQ" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 4 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/manor) -"ZS" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "manor" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/manor) -"ZT" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical{ - icon_state = "endwooddark"; - dir = 4 - }, -/area/rogue/under/town/basement) -"ZV" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/under/cave) -"ZW" = ( -/obj/structure/table/wood{ - icon_state = "largetable"; - dir = 10 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/manor) -"ZZ" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) - -(1,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -cf -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bw -"} -(2,1,1) = {" -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -aX -aX -aX -aX -ad -ad -aX -aX -aX -aX -aX -aZ -aX -aX -aX -aX -aX -ad -aX -ad -aX -aX -ad -aX -ad -aX -aX -aX -aX -aX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(3,1,1) = {" -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -aX -aX -aX -aX -ad -aX -aX -aX -aX -aX -aX -aZ -aX -aX -aX -aX -ad -aX -aX -aX -aX -ad -ad -ad -ad -ad -ad -ad -ad -ad -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(4,1,1) = {" -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -aX -aX -aX -aX -ad -aX -aX -aX -aX -aX -aX -aZ -aX -aX -aX -ad -aX -aX -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aX -aX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(5,1,1) = {" -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -aX -aX -aX -ad -ad -ad -aX -aZ -aZ -aZ -aZ -aZ -aX -aX -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aX -aX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(6,1,1) = {" -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -aZ -aZ -aZ -aZ -aZ -aZ -aZ -aZ -aZ -aX -aX -aX -aX -ad -aX -ad -ad -aX -ad -ad -ad -ad -ad -ad -ad -ad -ad -aX -aX -aX -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(7,1,1) = {" -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -aX -aX -aX -ad -ad -ad -ad -aZ -aZ -aX -aX -aX -aX -aZ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(8,1,1) = {" -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -aX -aX -ad -ad -ad -ad -ad -aZ -aZ -aX -aX -ad -aX -aZ -ad -ad -ad -ad -ad -ad -ad -aX -aX -aX -aX -ad -ad -ad -ad -ad -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ES -ES -ES -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -"} -(9,1,1) = {" -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ad -aX -ad -ad -ad -ad -ad -aZ -aZ -aX -aX -aX -aX -aZ -ad -ad -ad -ad -ad -aX -aX -aX -aX -aX -aX -ad -ad -ad -ad -ad -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ES -ES -ES -ES -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -"} -(10,1,1) = {" -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ad -ad -ad -ad -ad -ad -ad -aZ -aZ -ad -ad -aX -aX -ad -ad -ad -ad -ad -ad -aX -aX -aX -aX -aX -aX -ad -ad -ad -ad -ad -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ES -ES -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -"} -(11,1,1) = {" -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -aX -aX -ad -ad -aX -aX -aX -aZ -aZ -aZ -aX -aX -aX -ad -ba -ad -ad -ad -aX -aX -aX -aX -aX -aX -aX -ad -ad -ad -ad -ad -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ES -ES -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -"} -(12,1,1) = {" -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -aX -aX -ba -ba -ad -aX -aX -aX -aX -aZ -aX -aX -aX -ad -ad -ad -ad -ad -aX -aX -aX -aX -aX -aX -aX -ad -ad -ad -ad -ad -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ES -ES -ES -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -"} -(13,1,1) = {" -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ad -ad -ad -ba -ba -ad -aX -aX -aX -aZ -aX -aX -aX -ad -ad -ad -ad -ad -ad -aX -aX -aX -aX -aX -aX -aX -ad -ad -ad -ad -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ES -ES -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -"} -(14,1,1) = {" -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ad -ad -ad -ad -ad -ad -ad -aX -aX -aZ -aX -aX -aX -ad -ad -ad -ad -ad -ad -aX -aX -aX -aX -aX -ad -ad -ad -ad -ad -ad -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ES -ES -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -"} -(15,1,1) = {" -bu -bu -JA -JA -ad -ad -ad -ad -JA -JA -JA -JA -JA -JA -JA -ba -ad -ad -ad -ad -aX -aX -aX -aX -aZ -aZ -aZ -aZ -ad -ad -ad -ad -ad -ad -ad -aX -aX -aX -aX -aX -ad -ad -ad -ad -ad -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ES -ES -JA -JA -JA -JA -JA -ES -ES -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -"} -(16,1,1) = {" -bu -bu -JA -JA -ad -ad -ad -ad -JA -JA -JA -JA -JA -JA -JA -ba -ba -ad -ad -ad -ba -aX -aX -aX -aX -aX -aX -aZ -ba -ba -ad -ad -aX -aX -aX -aX -aX -aX -aX -aX -ba -ba -ba -ba -ba -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ES -ES -ES -JA -JA -JA -JA -JA -ES -ES -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -"} -(17,1,1) = {" -bu -bu -JA -JA -ad -ad -ad -ad -JA -JA -JA -JA -JA -JA -JA -ba -ba -ba -ba -ad -ad -ad -ba -aX -aX -aX -aX -aZ -ba -ba -ba -ba -ba -ba -ba -aX -aX -ba -ba -ba -ba -ba -ba -ba -ba -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ES -ES -ES -ES -JA -JA -JA -JA -ES -ES -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -"} -(18,1,1) = {" -bu -bu -JA -JA -ad -ad -ad -ad -JA -JA -JA -JA -JA -JA -JA -ba -ba -ba -ba -ba -ba -ad -ba -ad -aX -aX -aX -aZ -ad -ad -ba -ba -ba -ba -ba -ba -ba -ba -ba -ba -ba -ba -ba -ba -ba -bu -bu -bu -bu -JA -JA -JA -JA -JA -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ES -ES -ES -ES -ES -ES -JA -JA -JA -ES -ES -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ad -ad -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -"} -(19,1,1) = {" -bu -bu -JA -JA -ad -ad -ad -ad -JA -JA -JA -JA -JA -JA -JA -ba -ba -ba -ba -ba -ba -ba -ba -ba -aX -aX -aX -aZ -aX -ad -ad -ad -ba -ba -ba -ba -ba -ba -ba -ad -ad -ad -ad -ad -ad -bu -bu -bu -bu -bu -JA -JA -JA -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -ES -ES -ES -ES -ES -ES -ES -JA -JA -JA -ad -ad -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ad -ad -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -"} -(20,1,1) = {" -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ba -ba -ad -ba -ad -ba -ba -ba -ba -ad -ad -aX -aZ -aZ -ba -ba -ad -ad -ad -ad -ba -ad -ba -ba -ba -ba -ad -ad -ad -ad -bu -bu -bu -bu -bu -bu -JA -JA -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -ES -ES -ES -ES -ES -ES -ES -JA -JA -JA -ad -ad -ad -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ad -ad -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -"} -(21,1,1) = {" -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ad -ad -ba -ba -ba -ba -ba -ba -ba -ba -ba -ba -ba -aZ -aZ -ba -ba -ad -ba -ad -ba -ad -ba -ad -ad -ad -ad -ad -ad -ad -JA -JA -bu -bu -bu -LL -Vw -Vw -LL -bu -bu -bu -bu -bu -bu -ES -JA -JA -JA -JA -JA -JA -JA -ES -ES -ES -ES -ES -ES -ES -JA -JA -JA -ad -ad -ad -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -"} -(22,1,1) = {" -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ad -ad -ad -ba -ba -ba -ba -ba -ba -ba -ba -ba -ba -ba -ba -ba -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -JA -JA -bu -bu -bu -JA -Vw -Vw -JA -bu -bu -bu -bu -bu -bu -ES -ES -ES -JA -JA -JA -JA -JA -ES -ES -ES -ES -ES -ES -ES -JA -JA -JA -JA -ad -ad -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -"} -(23,1,1) = {" -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ad -ad -ad -ad -ad -ba -ba -ba -ba -ba -ba -ba -ba -aZ -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -JA -JA -bu -bu -bu -JA -Vw -Vw -JA -bu -bu -bu -bu -bu -bu -bu -ES -ES -ES -JA -JA -JA -ES -ES -ES -ES -ES -ES -ES -ES -JA -JA -JA -JA -ad -ad -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -"} -(24,1,1) = {" -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ad -ad -ad -ad -ad -ad -ba -ba -ba -ba -ba -ba -ba -aZ -aX -aX -aX -aX -aX -aX -aX -ad -ad -ad -ad -ad -ad -ad -ad -ad -JA -JA -bu -bu -bu -JA -Vw -Vw -JA -bu -bu -bu -bu -bu -bu -bu -ES -ES -ES -ES -ES -JA -ES -ES -ES -ES -ES -ES -ES -ES -JA -JA -ES -ES -ad -ad -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -"} -(25,1,1) = {" -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ad -ad -ad -ad -ad -ad -ad -ad -ba -ba -ba -ba -ba -aZ -aX -aX -aX -aX -aX -aX -aX -aX -ad -ad -ad -ad -ad -ad -ad -ad -JA -JA -bu -JA -JA -JA -Vw -Vw -JA -bu -bu -bu -bu -bu -bu -bu -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -JA -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -"} -(26,1,1) = {" -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ba -ba -ba -aZ -aX -aX -aX -aX -aX -aX -aX -ad -ad -ad -ad -ad -ad -ad -ad -ad -JA -JA -JA -JA -JA -LL -Vw -Vw -LL -LL -LL -LL -bu -bu -bu -bu -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -JA -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ad -ad -ad -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -"} -(27,1,1) = {" -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ba -aZ -aX -ad -aX -aX -aX -aX -aX -ad -ad -ad -ad -ad -ad -ad -ad -ad -JA -JA -JA -Vw -Vw -Vw -Vw -Vw -Vw -Vw -UW -LL -bu -bu -bu -bu -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -JA -JA -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ad -ad -ad -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -"} -(28,1,1) = {" -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -sX -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aZ -aZ -aZ -aZ -aZ -aX -aX -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -JA -JA -JA -Vw -Vw -Vw -Vw -Vw -Vw -Vw -UW -LL -bu -bu -bu -bu -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -JA -JA -ES -ES -ES -ES -ES -ES -ES -ES -ES -JA -ES -ES -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -"} -(29,1,1) = {" -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -sX -sX -sX -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aZ -aZ -aZ -aX -aX -aX -aZ -aZ -aZ -aZ -aZ -aZ -aZ -aZ -aZ -aZ -ad -ad -ad -JA -JA -JA -JA -JA -bu -Vw -Vw -bu -LL -LL -LL -bu -bu -bu -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -"} -(30,1,1) = {" -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -sX -jP -sX -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -aZ -aZ -ba -aX -aX -aX -aX -aZ -aZ -aZ -ad -aZ -aZ -aZ -aZ -ad -aZ -aZ -aZ -aZ -JA -JA -JA -JA -JA -LL -Vw -Vw -LL -bu -bu -bu -bu -bu -bu -ES -ES -ES -ES -ES -ES -ES -ES -ES -ES -JA -JA -ES -ES -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -"} -(31,1,1) = {" -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -sX -sX -sX -ad -ad -ad -ad -ad -ad -ad -ad -ad -aZ -aZ -aZ -ad -aX -aX -aX -aX -ad -ad -aX -aX -aZ -ad -ad -ad -ad -ad -ad -ad -ad -JA -JA -JA -JA -JA -JA -Vw -Vw -Vw -JA -JA -JA -JA -JA -bu -bu -ES -ES -ES -ES -ES -ES -ES -ES -ES -JA -ES -ES -ES -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -"} -(32,1,1) = {" -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -sX -JA -ad -ad -ad -ad -aX -aX -aZ -aZ -aZ -aZ -ad -aZ -aZ -aX -aX -aX -aX -aX -aX -aX -aX -aZ -ad -ad -ad -ad -ad -ad -ad -ad -JA -JA -JA -JA -JA -JA -Vw -Vw -Vw -JA -JA -bu -JA -JA -ES -ES -ES -ES -ES -ES -ES -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -"} -(33,1,1) = {" -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -aX -aX -ad -aX -aX -ad -aZ -ad -ad -aZ -ad -ad -ad -aX -aX -aX -aX -aX -aX -aX -aX -aZ -ad -ad -ad -ad -ba -ba -ba -ba -JA -JA -JA -JA -bu -LL -Vw -Vw -LL -JA -JA -JA -JA -ES -ES -ES -ES -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -"} -(34,1,1) = {" -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -aX -ad -aX -aX -aX -aX -aZ -ad -ad -aZ -ad -ad -ad -ad -ad -aX -aX -aX -aX -aX -aX -aZ -ad -ad -ad -ba -ba -ba -ba -ba -JA -JA -JA -JA -JA -JA -Vw -Vw -JA -JA -bu -JA -ES -ES -ES -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -"} -(35,1,1) = {" -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -aZ -aZ -aZ -aZ -aZ -aZ -aZ -aX -ad -aZ -ad -ad -ad -ad -ad -aX -aX -aX -aX -aX -aX -aZ -ad -ad -ba -ba -ba -ba -ba -ad -JA -JA -JA -JA -JA -JA -Vw -Vw -LL -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -"} -(36,1,1) = {" -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -aX -aX -aX -aX -aX -aX -aX -aX -aZ -ad -ba -ba -ba -ba -ba -ba -ba -JA -JA -JA -JA -JA -JA -Vw -Vw -Vw -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -"} -(37,1,1) = {" -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -aX -aX -aX -aX -aX -aX -aX -aX -aZ -ba -ba -ba -ba -ad -ad -ad -ad -JA -JA -bu -bu -bu -LL -Vw -Vw -Vw -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -"} -(38,1,1) = {" -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -aX -aX -aX -aX -aX -ad -ad -ad -aZ -ba -ba -ba -ad -ad -ad -ad -ad -JA -JA -JA -JA -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -"} -(39,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -aX -aX -aX -aX -aX -ad -ba -ba -aZ -ba -ba -ad -ad -ad -ad -aX -aX -JA -JA -JA -JA -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -"} -(40,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -aX -aX -aX -aX -ba -ba -ba -ba -aZ -ad -ad -ad -ad -ad -ad -aX -aX -JA -JA -JA -JA -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(41,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -aX -aX -ba -ba -ba -ba -ba -ba -aZ -ad -ad -ad -ad -ad -ad -aX -aX -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(42,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ad -ba -ba -ba -ba -ba -ba -ba -aZ -ad -ad -ad -aX -aX -aX -aX -aX -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(43,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -ba -ba -ba -ba -ad -ad -ad -ad -aZ -ad -ad -ad -aX -aX -aX -aX -aX -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(44,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -bu -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(45,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bu -"} -(46,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bX -bu -"} -(47,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -Dj -QA -Dj -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(48,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -sX -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(49,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -Dj -ZV -sX -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(50,1,1) = {" -bu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -uw -or -or -or -or -or -or -UM -UM -Yp -Yp -Yp -uw -Dj -ZV -sX -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(51,1,1) = {" -bu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -uw -or -or -or -or -or -or -UM -UM -uw -Yp -Yp -uw -Dj -ZV -sX -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(52,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -KU -ag -KU -KU -KU -KU -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -uw -Yp -Yp -uw -or -or -uw -Xt -Xt -uw -Yp -Yp -uw -Dj -ZV -sX -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(53,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -KU -KB -KU -KU -KU -KU -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -uw -Yp -Yp -Yp -or -or -uw -vz -vz -uw -Yp -Yp -uw -Dj -ZV -sX -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -"} -(54,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -KU -Nf -KU -KU -KU -KU -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -uw -Yp -Yp -Yp -or -or -uw -uw -uw -uw -uw -uw -uw -Dj -ZV -sX -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -"} -(55,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -KU -Nf -Nf -KU -KU -KU -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -uw -Yp -Yp -Yp -or -or -or -uw -bu -bu -bu -bu -bu -Dj -ZV -sX -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -"} -(56,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -KU -Nf -Nf -KU -KU -KU -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -uw -Yp -Yp -Yp -or -or -or -uw -bu -bu -bu -bu -bu -Dj -ZV -sX -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -"} -(57,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -KU -Nf -Nf -am -Nf -KU -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -uw -Yp -Yp -uw -or -or -or -uw -bu -bu -bu -bu -bu -Dj -ZV -sX -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -"} -(58,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -KU -am -Nf -Nf -Nf -KU -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -uw -or -or -or -or -or -or -uw -bu -bu -bu -bu -bu -Dj -ZV -sX -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -"} -(59,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -KU -KU -KU -KU -Nf -Nf -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -uw -uw -uw -uw -uw -uw -uw -uw -Dj -Dj -Dj -Dj -Dj -Dj -ZV -sX -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -"} -(60,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -uw -KU -KU -Nf -Nf -Nf -Nf -Nf -Nf -Nf -AT -Nf -KB -KB -KB -KB -KB -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -tF -Kt -Kt -bu -bu -bu -bu -bu -bu -bX -bX -PV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -sX -ZV -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -bu -bu -bX -bX -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -"} -(61,1,1) = {" -bu -bu -bu -bu -bu -bu -Nf -ag -Nf -Nf -Nf -Nf -Nf -Nf -Nf -Nf -Nf -uw -KB -NO -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -tF -Kt -Kt -bu -bu -bu -bu -bu -bu -bX -bX -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -ZV -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -Dj -bu -bu -bX -bX -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -"} -(62,1,1) = {" -bu -bu -bu -bu -bu -bu -Nf -uw -uw -AT -Nf -AT -AT -AT -AT -KB -KB -de -UJ -UJ -bb -bb -bb -bb -bb -bb -bb -bb -bb -uw -mU -uw -AT -AT -Nf -Nf -AT -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -sX -ZV -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -sX -Dj -bu -bu -bX -bX -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -"} -(63,1,1) = {" -bu -bu -bu -bu -bu -bu -Nf -AT -AT -uw -uw -uw -uw -uw -uw -uw -uw -uw -UJ -UJ -bb -bj -bt -bF -bb -bN -dj -bC -bb -iz -KB -uw -AT -AT -Nf -AT -AT -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -sX -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -sX -Dj -bu -bu -bX -bX -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -"} -(64,1,1) = {" -bu -bu -bu -bu -bu -AT -Nf -AT -bu -uw -av -aH -av -aH -ax -aH -ax -uw -UJ -UJ -bb -bk -bt -bG -bb -bG -bz -bz -bb -Xf -KB -sq -AT -AT -Nf -Nf -AT -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -sX -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -sX -Dj -bu -bu -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -"} -(65,1,1) = {" -bu -bu -bu -bu -bu -AT -Nf -AT -bu -uw -ax -aH -av -aH -av -aH -av -uw -UJ -UJ -bb -bm -bt -bH -bb -bO -bv -bv -bb -KB -KB -sq -AT -AT -AT -AT -AT -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -sX -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -sN -sN -sX -sN -sN -sN -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -"} -(66,1,1) = {" -bu -bu -bu -bu -bu -AT -Nf -AT -bu -uw -az -aJ -av -aH -av -aH -av -uw -jB -UJ -bf -bt -bt -bz -bb -bt -bt -bt -bb -KB -UJ -sq -AT -AT -AT -AT -AT -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -sX -ZV -Dj -bu -bu -bu -bu -Lw -Lw -Lw -Lw -bu -bu -bu -bu -bu -bu -bu -bu -sN -Sg -vS -vS -vS -LP -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -"} -(67,1,1) = {" -bu -bu -bu -bu -bu -AT -Nf -AT -bu -uw -aB -aK -av -aH -av -aH -av -uw -UJ -UJ -bh -bv -bv -bv -bb -bQ -bt -CD -bb -KB -UJ -uw -Kt -Kt -Kt -Kt -Kt -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -sX -Yu -Dj -bu -bu -uw -uw -uw -Ml -KO -uw -uw -uw -bu -bu -bu -bu -bu -bu -sN -sN -sN -sN -sN -sN -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -"} -(68,1,1) = {" -bu -bu -bu -bu -bu -AT -Nf -AT -bu -uw -aF -aM -av -aH -aV -aH -aW -uw -UJ -UJ -bf -bz -bz -bJ -bb -bT -bt -bt -bb -UJ -UJ -uw -Kt -Kt -Kt -Kt -Kt -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -sX -ZV -Dj -bu -bu -uw -cx -bq -QS -QS -QS -Kw -uw -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -"} -(69,1,1) = {" -bu -bu -bu -bu -bu -AT -Nf -AT -bu -uw -av -aH -av -aH -av -aH -av -uw -UJ -UJ -bi -bB -bz -bM -bb -bm -bt -bt -bb -UJ -UJ -uw -Kt -Kt -Kt -Kt -Kt -bu -bu -bu -bu -bu -bu -bX -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -sX -ZV -Dj -bu -bu -uw -cz -bq -QS -cF -QS -QS -uw -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -"} -(70,1,1) = {" -bu -bu -bu -bu -AT -AT -Nf -AT -bu -uw -aG -av -ax -aU -av -av -av -uw -UJ -UJ -bb -bC -bD -bz -bb -dg -bv -bv -bb -UJ -UJ -sq -Kt -Kt -Kt -Kt -Kt -bu -bu -bu -bu -bu -bu -bX -bX -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -sX -ZV -Dj -bu -uw -uw -uw -bq -QS -JJ -cG -QS -uw -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -"} -(71,1,1) = {" -bu -bu -bu -bu -AT -Nf -Nf -AT -bu -uw -uw -uw -uw -uw -uw -CL -uw -uw -UJ -UJ -bb -bb -bb -bb -bb -bf -IB -bf -bb -au -UJ -uw -Kt -Kt -Kt -Kt -Kt -bu -bu -bu -bu -bu -bu -bu -bX -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -sX -ZV -Dj -bu -uw -cv -cA -bq -NP -uw -Wv -QS -uw -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -"} -(72,1,1) = {" -bu -bu -bu -bu -AT -Nf -AT -AT -bu -uw -UJ -KB -UJ -UJ -UJ -UJ -UJ -rI -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -uw -UJ -UJ -uw -Kt -Kt -Kt -Kt -Kt -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -sX -ZV -Dj -bu -uw -uw -uw -bq -QS -Xa -QS -QS -uw -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -"} -(73,1,1) = {" -bu -bu -bu -AT -Nf -Nf -AT -bu -bu -uw -UJ -UJ -UJ -UJ -UJ -UJ -UJ -rc -UJ -KB -KB -KB -KB -KB -KB -KB -KB -UJ -QF -KB -NO -sq -Kt -Kt -Kt -Kt -Kt -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -sX -ZV -Dj -bu -bu -uw -cB -cI -QS -QS -QS -PB -uw -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -"} -(74,1,1) = {" -bu -bu -bu -bu -Nf -AT -AT -bu -bu -uw -UJ -UJ -UJ -KB -yg -KB -KB -de -KB -yg -KB -KB -UJ -UJ -tR -UJ -UJ -UJ -uw -KB -UJ -uw -Kt -Kt -Kt -Kt -Kt -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bX -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -ZV -sX -ZV -Dj -bu -bu -uw -uw -uw -uw -uw -uw -uw -uw -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -"} -(75,1,1) = {" -bu -bu -bu -bu -Nf -AT -uw -uw -uw -uw -uw -uw -UJ -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -KB -UJ -uw -Kt -Kt -Kt -Kt -Kt -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bX -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -Om -Dj -sX -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -sX -bu -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -"} -(76,1,1) = {" -bu -bu -bu -bu -Nf -AT -uw -Nf -Nf -Nf -Nf -uw -UJ -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -Uw -uw -Kt -Kt -Kt -Kt -Kt -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -sX -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -"} -(77,1,1) = {" -bu -bu -bu -bu -Nf -AT -uw -Nf -Nf -Nf -Nf -de -UJ -uw -tF -UJ -KB -uw -td -Of -Of -WB -WB -WB -WB -Of -Of -cC -uw -KB -UJ -uw -Kt -Kt -Kt -Kt -Kt -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bX -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -"} -(78,1,1) = {" -bu -bu -bu -bu -Nf -AT -uw -Nf -Nf -Nf -Nf -uw -UJ -uw -HB -UJ -KB -uw -KB -KB -UJ -Nf -Nf -UJ -Nf -Nf -Nf -UJ -uw -Sf -UJ -uw -AT -AT -Kt -Kt -Kt -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bX -Dj -Dj -Dj -Dj -Dj -Yw -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -ZV -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -"} -(79,1,1) = {" -bu -bu -bu -bu -Nf -AT -uw -Nf -Nf -Nf -Nf -uw -UJ -uw -VL -UJ -KB -uw -UJ -uL -Ie -UJ -KB -KB -Ie -KB -KB -KB -QF -KB -UJ -sq -AT -AT -Kt -Kt -Kt -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -Dj -Yw -Yw -Yw -Yw -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -QD -Dj -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -sX -bu -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -"} -(80,1,1) = {" -bu -bu -bu -Nf -Nf -AT -uw -am -Nf -Nf -Nf -de -UJ -uw -uw -UJ -KB -uw -fG -fG -Du -Nf -KB -KB -KB -UJ -UJ -UJ -uw -KB -UJ -sq -AT -AT -Kt -Kt -Kt -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -Dj -Yw -Eq -Yw -Yw -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -sX -bu -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -"} -(81,1,1) = {" -bu -bu -bu -Nf -Nf -AT -uw -Nf -am -am -Nf -uw -UJ -UJ -uw -UJ -KB -uw -jZ -fG -fG -Nf -Ie -UJ -UJ -UJ -Ie -KB -uw -bU -UJ -uw -AT -AT -Kt -Kt -Kt -bu -bu -bu -bu -bu -bu -bu -bX -bX -bX -bu -bu -bu -Dj -LB -Yw -Yw -Yw -Dj -bu -bu -bu -bu -eQ -eQ -eQ -eQ -eQ -bu -bu -bu -Dj -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -sX -bu -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -"} -(82,1,1) = {" -bu -bu -bu -Nf -Nf -AT -uw -Nf -uw -uw -uw -uw -rc -uw -uw -AQ -uw -uw -uw -fG -fG -Nf -UJ -Nf -Nf -Nf -Nf -Nf -uw -KB -UJ -uw -uw -uw -uw -uw -uw -bu -bu -bu -bu -bu -bu -bX -bX -bX -bX -bu -bu -bu -Dj -Dj -Dj -Yw -Dj -Dj -bu -bu -bu -bu -eQ -CI -CI -CI -eQ -bu -bu -bu -Dj -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -sX -bu -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -"} -(83,1,1) = {" -bu -bu -bu -bu -Nf -AT -Nf -Nf -as -uw -UJ -UJ -UJ -uv -KB -UJ -KB -KB -uw -IH -XJ -Nf -WB -Of -WB -WB -Of -Of -uw -KB -UJ -uw -fG -Uh -Tl -zW -uw -bu -bu -bu -bu -bu -bu -bX -bX -bX -bu -bu -bu -bu -Dj -Uv -Yw -Yw -Yw -Dj -Dj -Dj -Dj -Dj -eQ -gn -gn -gn -eQ -bu -bu -bu -Dj -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -sX -bu -bX -bX -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -"} -(84,1,1) = {" -bu -bu -bu -bu -Nf -Nf -Nf -Nf -as -uw -UJ -UJ -UJ -UJ -UJ -UJ -UJ -KB -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -KB -UJ -PG -fr -fr -fr -HM -uw -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -Dj -Yw -Yw -Yw -Yw -Yw -Yw -Yw -Yw -Yw -pg -gn -gn -gn -eQ -bu -bu -bu -Dj -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -"} -(85,1,1) = {" -bu -bu -bu -bu -Nf -Nf -Nf -Nf -as -uw -KB -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -uw -lE -GT -un -xT -uw -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -Dj -Im -Yw -Yw -QT -Dj -Dj -Dj -Dj -Dj -eQ -eH -gn -gn -eQ -bu -bu -bu -Dj -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -"} -(86,1,1) = {" -bu -bu -bu -bu -Nf -Nf -AT -AT -as -uw -KB -KB -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -yg -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -uw -uw -uw -uw -uw -uw -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -Dj -Dj -Dj -Dj -Dj -Yw -Dj -Dj -Dj -bu -bu -bu -bu -eQ -gn -gn -gn -eQ -bu -bu -bu -Dj -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -"} -(87,1,1) = {" -bu -bu -bu -bu -Nf -AT -AT -AT -as -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -UJ -UJ -UJ -uw -uw -uw -uw -uw -uw -uw -AT -AT -AT -AT -AT -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -Dj -Yw -Yw -Dj -Yw -Yw -Yw -Dj -bu -bu -bu -bu -bu -eQ -jx -jx -jx -eQ -bu -bu -bu -Dj -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -"} -(88,1,1) = {" -bu -bu -bu -bu -Nf -Nf -Nf -Nf -Nf -as -as -as -bu -bu -bu -bu -bu -bu -bu -bu -bu -uw -UJ -UJ -UJ -uw -KU -KU -KU -KU -KU -KU -KU -KU -KU -KU -KU -sq -sq -sq -sq -sq -bu -bX -bX -bu -bu -Dj -Yw -Yw -Yw -Yw -Yw -Yw -Dj -bu -bu -bu -bu -bu -eQ -eQ -eQ -eQ -eQ -bu -bu -bu -Dj -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -"} -(89,1,1) = {" -bu -bu -bu -bu -bu -bu -Nf -Nf -Nf -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -uw -bA -UJ -UJ -uw -KU -KU -sq -sq -sq -sq -sq -sq -sq -sq -sq -sq -sq -sq -sq -sq -bu -bX -bX -bu -bu -Dj -Yw -Yw -Dj -Dj -Dj -Dj -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -"} -(90,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -uw -uw -uw -uw -uw -uw -UJ -UJ -UJ -uw -KU -KU -sq -sq -sq -sq -xY -bl -nT -xY -xY -xY -We -sq -sq -sq -bu -bX -bX -bu -bu -Dj -Yw -Yw -Dj -sm -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -"} -(91,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -uw -be -UJ -UJ -KB -UJ -UJ -UJ -UJ -uw -KU -KU -sq -sq -sq -xY -fG -fG -fG -fG -fG -fG -fG -We -sq -sq -bu -bX -bX -bu -bu -Dj -Dj -Yw -Dj -Dj -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(92,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -uw -be -UJ -UJ -KB -UJ -UJ -UJ -UJ -uw -KU -KU -sq -sq -nT -fG -GW -GW -bV -GW -GW -GW -GW -fG -We -sq -bu -bX -bX -bu -bu -bu -Dj -Yw -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(93,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -uw -be -UJ -UJ -yg -UJ -UJ -UJ -UJ -uw -KU -KU -sq -sq -nT -fG -GW -Ff -Ff -Ff -Ff -GW -GW -fG -bl -sq -bu -bX -bX -as -as -bu -Dj -Yw -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(94,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -KU -KU -sq -sq -xY -fG -GW -fG -bW -Ie -Ff -GW -GW -fG -We -sq -bu -bX -bX -as -as -as -Dj -Yw -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(95,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -sq -sq -xY -fG -GW -Ff -Ff -Ff -Ff -GW -GW -fG -nT -sq -bu -bX -bX -Dj -as -as -Dj -Yw -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(96,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -sq -sq -We -fG -GW -GW -GW -bV -GW -Ua -GW -fG -GQ -sq -bu -bX -bX -PV -mf -mf -mf -Yw -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(97,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -sq -sq -We -fG -GW -GW -GW -GW -GW -GW -GW -fG -nT -sq -bu -bX -bX -Dj -as -as -mf -mf -Dj -as -bu -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(98,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -sq -sq -sq -pY -fG -fG -fG -fG -fG -fG -fG -pY -sq -sq -bu -bX -bX -as -as -as -Yw -mf -as -as -as -bu -bu -bu -bu -bu -bu -bu -Dj -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -uw -uw -uw -uw -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(99,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -sq -sq -sq -sq -We -We -We -GQ -pY -iG -We -sq -sq -sq -bu -bX -bX -as -as -bu -mf -Yw -as -as -as -as -bu -bu -bu -bu -bu -bu -Dj -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -uw -uw -Ps -Ps -uw -uw -uw -bu -uw -uw -uw -uw -uw -uw -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(100,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -sq -sq -sq -sq -sq -sq -sq -sq -sq -sq -sq -sq -sq -sq -bu -bX -bX -as -bu -bu -Yw -Yw -mf -mf -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -Dj -ZV -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -uw -Tz -UJ -UJ -UJ -UJ -uw -bu -uw -bq -bq -bq -bq -uw -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(101,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -sq -sq -sq -sq -sq -sq -sq -sq -sq -sq -sq -sq -sq -sq -bu -bX -bX -as -bu -mf -mf -Yw -Yw -mf -mf -as -vS -vS -vS -vS -vS -vS -as -ZV -Dj -bu -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -Vz -Ie -RF -Ie -Ow -uw -bu -uw -Hk -Nh -Nh -bq -uw -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(102,1,1) = {" -bu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bX -bX -Ff -Ff -sq -sq -sq -sq -Ff -sq -sq -Ff -Ff -sq -sq -sq -sq -Dj -ZV -Dj -bu -uw -mC -UJ -KB -Zu -UJ -Zu -KB -Zu -UJ -UJ -UJ -cg -UJ -UJ -uw -bu -uw -mh -Nh -Nh -bq -uw -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(103,1,1) = {" -bu -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bX -bX -Ff -Nf -cc -ch -sq -Nf -Xf -KB -oR -Ff -mC -UJ -UJ -Kr -sq -Dj -ZV -Dj -bu -uw -UJ -UJ -KB -UJ -UJ -UJ -KB -UJ -UJ -UJ -UJ -UJ -KB -KB -uw -bu -uw -mh -Nh -Nh -bq -uw -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(104,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -Ff -Ff -ch -Nf -Nf -Ff -cd -UJ -KB -cp -Ff -UJ -UJ -UJ -UJ -sq -Dj -ZV -Dj -bu -uw -UJ -UJ -vJ -vJ -vJ -vJ -vJ -vJ -vJ -vJ -vJ -vJ -KB -UJ -uw -bu -uw -bq -Nh -Nh -TH -uw -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(105,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -sq -ca -Nf -ci -xr -sq -UJ -UJ -KB -cq -Ff -UJ -aY -aY -UJ -sq -Dj -ZV -Dj -bu -uw -wk -KB -OT -VN -VN -VN -VN -VN -VN -VN -VN -vJ -KB -UJ -uw -bu -uw -Qf -bq -bq -VD -uw -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -JA -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(106,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -Ff -cc -Nf -Ie -Nf -Ff -Kr -UJ -Ie -Nf -Ff -UJ -Ie -Ie -KB -sq -sq -ag -sq -bu -uw -UJ -KB -vJ -VN -VN -VN -VN -ib -VN -VN -VN -vJ -UJ -UJ -uw -bu -uw -uw -uw -Lp -uw -uw -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(107,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -Ff -Nf -Nf -Nf -Nf -sq -co -UJ -Nf -ch -sq -UJ -Ie -Os -KB -sq -UJ -KB -Ff -bu -uw -Iy -KB -vJ -VN -VN -VN -VN -VN -VN -VN -VN -vJ -UJ -UJ -uw -bu -bu -bu -uw -uw -uw -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(108,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -Ff -cd -Nf -Nf -Nf -Ff -Uk -UJ -Nf -Nf -Ff -UJ -Ie -WY -KB -sq -UJ -KB -Ff -Ff -uw -IK -UJ -vJ -VN -VN -VN -VN -VN -VN -VN -VN -vJ -KB -KB -uw -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(109,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -Ff -Ff -Ff -ck -Ff -Ff -Ff -Ff -ck -Ff -Ff -wA -Ie -Ie -wA -Ff -UJ -KB -KB -Ff -uw -UJ -UJ -vJ -VN -VN -VN -VN -VN -VN -VN -VN -jl -KB -KB -uw -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(110,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -sq -ut -KB -KB -KB -KB -KB -KB -KB -KB -mr -UJ -UJ -UJ -KB -jv -UJ -KB -KB -ZH -UJ -UJ -UJ -vJ -vJ -vJ -vJ -vJ -vJ -vJ -vJ -vJ -vJ -UJ -UJ -uw -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(111,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -Ff -rl -UJ -tR -UJ -UJ -UJ -UJ -tR -UJ -UJ -UJ -UJ -tR -KB -Ff -UJ -KB -Ff -Ff -uw -UJ -UJ -UJ -de -KB -mW -mW -kH -KB -zb -de -UJ -UJ -wD -uw -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(112,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -Ff -Ie -KV -Ie -Ff -iW -ZI -sq -Ff -Ie -wA -Ie -Ff -Ff -Ff -Ff -UJ -KB -sq -bu -uw -mC -UJ -UJ -tr -If -qf -If -ej -If -KB -tr -UJ -UJ -mC -uw -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(113,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -Ff -lO -UJ -UJ -vE -vE -la -Ff -oR -HW -vE -HW -Ff -Ff -Ff -sq -BY -Gl -sq -sq -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -uw -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(114,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -Ff -lO -UJ -UJ -vE -vE -vE -Ff -oR -HW -MN -KB -xC -Ff -Ff -Ff -Ff -Ff -Ff -uw -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(115,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -Ff -lO -CW -dG -Mj -Nu -xC -Ff -oR -KB -bx -KB -vE -Ff -Ff -sq -mf -mf -mf -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(116,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -Ff -Ff -Ff -Ff -Ff -Ff -Ff -Ff -oR -eT -la -KB -eP -Ff -Ff -Ff -mf -mf -mf -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(117,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -Ff -Ff -Ff -Ff -Ff -Ff -Ff -sq -sq -Ff -lO -lO -lO -Ff -Ff -Ff -Ff -Ff -sq -sq -mf -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(118,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -Ff -bZ -KB -UJ -UJ -UJ -UJ -UJ -oP -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -cr -sq -mf -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(119,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -Ff -bZ -KB -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -cr -Ff -mf -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(120,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -Ff -bZ -KB -KB -KB -KB -KB -KB -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -cr -Ff -mf -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(121,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -Ff -Ff -Ff -Ff -Ff -Ff -Ff -KB -KB -KB -sq -sq -Ff -Ff -UJ -Ff -Ff -Ff -Ff -Ff -mf -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(122,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -Ff -cl -cl -cl -Ff -Dj -Dj -Dj -mf -Dj -Dj -Dj -Dj -Dj -mf -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(123,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -Dj -Dj -Dj -Dj -Dj -Dj -Ff -Ff -Ff -Ff -Ff -Dj -Dj -JA -mf -mf -mf -mf -mf -mf -mf -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(124,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -PV -mf -mf -mf -mf -mf -mf -mf -mf -mf -mf -mf -mf -mf -mf -Dj -Dj -Dj -Dj -Dj -Dj -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(125,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -Dj -sN -sN -Dj -sN -Dj -sN -Dj -sN -sN -Dj -Dj -JA -mf -mf -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(126,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -mf -mf -mf -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(127,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -JA -JA -JA -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(128,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Dj -Dj -Dj -Dj -Dj -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(129,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(130,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(131,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(132,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(133,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(134,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -Ie -Ar -Ar -Ar -Ar -Ar -Ie -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(135,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -ZT -Dk -KB -Dk -KB -Dk -ZT -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(136,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -lO -lO -lO -lO -lO -lO -lO -lO -Ie -YV -mr -uS -KB -xP -Ie -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(137,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -lO -tF -sR -KB -KB -KB -pc -KB -ZT -vV -KB -hm -KB -TF -ZT -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(138,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -lO -ks -HW -HW -Cl -KB -KB -KB -FW -KB -KB -KB -KB -KB -Ie -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(139,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -lO -ct -HW -HW -Ff -tF -KB -KB -Ie -Ar -Ar -Ar -Ar -Ar -Ie -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(140,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -lO -lO -HW -lO -lO -lO -HW -lO -lO -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(141,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -lO -lF -HW -cu -lO -HW -HW -HW -lO -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(142,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -lO -HW -HW -HW -HW -HW -HW -HW -lO -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(143,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -lO -TN -TN -TN -lO -TN -TN -nN -lO -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(144,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -lO -lO -lO -lO -lO -lO -lO -lO -lO -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(145,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(146,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(147,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(148,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(149,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(150,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(151,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(152,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(153,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(154,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bX -bX -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} -(155,1,1) = {" -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -bu -"} - -(1,1,2) = {" -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -YL -"} -(2,1,2) = {" -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -mm -mm -mm -mm -mm -mm -mm -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -Rn -Rn -Rn -Rn -Rn -mm -aT -mm -mm -zh -zh -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -sz -sz -mm -zh -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(3,1,2) = {" -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -zh -zh -zh -mm -mm -mm -mm -Rn -Rn -Rn -Rn -mm -mm -mm -mm -mm -mm -mm -mm -Rn -mm -mm -mm -mm -mm -mm -zh -zh -zh -zh -Rn -Rn -Rn -mm -mm -mm -aT -mm -zh -zh -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -Rn -Rn -sz -sz -zh -zh -zh -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -mm -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(4,1,2) = {" -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -cT -cT -cT -cT -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -mm -zh -zh -zh -zh -zh -mm -mm -mm -Rn -Rn -mm -Rn -mm -Rn -Rn -mm -mm -mm -Oe -Rn -mm -mm -Rn -Rn -Rn -mm -zh -zh -zh -zh -mm -zh -zh -mm -mm -aT -aT -aT -aT -aT -mm -mm -zh -zh -mm -mm -mm -aT -aT -aT -aT -aT -mm -mm -zh -Rn -Rn -sz -sz -zh -zh -zh -zh -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -mm -mm -Rn -Rn -Rn -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -mm -mm -Rn -Rn -Rn -zh -zh -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(5,1,2) = {" -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -cT -zh -zh -zh -cT -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -mm -mm -mm -zh -zh -zh -zh -zh -mm -VF -mm -mm -Rn -Rn -Rn -Rn -Rn -zh -zh -Rn -Rn -mm -mm -mm -mm -Oe -mm -mm -mm -mm -zh -zh -zh -zh -zh -zh -zh -zh -mm -aT -aT -aT -aT -aT -aT -aT -mm -zh -zh -mm -mm -mm -aT -aT -aT -mm -zh -zh -Rn -Rn -Rn -sz -sz -zh -zh -zh -zh -zh -mm -mm -aT -aT -aT -aT -aT -mm -mm -mm -mm -mm -mm -Rn -Rn -Rn -Rn -Rn -mm -aT -aT -aT -aT -aT -aT -mm -mm -Rn -zh -zh -zh -mm -Rn -Rn -Rn -zh -zh -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(6,1,2) = {" -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -cT -mm -mm -mm -mm -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -mm -mm -mm -mm -zh -zh -zh -zh -zh -zh -mm -mm -mm -mm -Rn -Oe -mm -Rn -mm -Rn -Rn -VF -mm -Rn -Rn -Rn -zh -Rn -Rn -mm -Oe -Rn -mm -mm -mm -zh -zh -zh -mm -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -mm -zh -zh -mm -mm -aT -aT -aT -zh -Rn -Rn -Rn -Rn -mm -sz -sz -mm -zh -mm -mm -zh -mm -mm -mm -aT -aT -aT -mm -mm -mm -KA -mm -mm -mm -Rn -Rn -eK -Rn -Rn -mm -aT -aT -mm -mm -mm -mm -Rn -Rn -Rn -Rn -Rn -zh -zh -mm -mm -Rn -Rn -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(7,1,2) = {" -aT -aT -aT -aT -cT -cT -cT -cT -cT -cT -cT -cT -cT -cT -cT -mm -mm -mm -mm -cT -cT -aT -aT -aT -aT -aT -aT -mm -mm -mm -mm -mm -mm -mm -zh -zh -mm -mm -VF -mm -zh -zh -mm -mm -mm -Rn -Rn -Rn -Rn -zh -Rn -Rn -zh -Rn -Rn -Rn -mm -Rn -mm -mm -mm -mm -mm -Rn -Rn -mm -mm -mm -Rn -Rn -Rn -Rn -mm -aT -aT -aT -aT -aT -aT -mm -mm -mm -zh -zh -mm -mm -aT -aT -zh -Rn -mm -Rn -Rn -mm -sz -sz -Rn -Rn -mm -mm -KA -mm -mm -mm -mm -mm -aT -aT -mm -mm -mm -mm -mm -mm -Rn -Rn -Rn -Rn -Rn -Rn -mm -Oe -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -zh -zh -mm -mm -Rn -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(8,1,2) = {" -aT -aT -aT -aT -cT -mm -zh -zh -zh -zh -mm -mm -mm -mm -zh -zh -mm -mm -zh -mm -cT -aT -aT -aT -aT -aT -mm -mm -zh -zh -mm -mm -eO -mm -zh -zh -mm -mm -mm -mm -mm -mm -mm -mm -mm -Rn -Rn -mm -Rn -Rn -Rn -mm -Rn -mm -Rn -zh -zh -Rn -Rn -Rn -mm -Rn -Rn -zh -Rn -Rn -zh -Oe -mm -mm -Rn -Rn -Rn -aT -aT -aT -aT -aT -mm -mm -mm -zh -zh -zh -zh -mm -mm -mm -zh -Rn -Rn -Rn -Rn -Ee -sz -sz -mm -Rn -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -zh -Oe -mm -mm -Rn -Rn -KA -Rn -Rn -Rn -Rn -Rn -Oe -Oe -Rn -Rn -eK -Rn -Rn -Oe -Rn -Rn -Rn -Rn -zh -zh -mm -Rn -Rn -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(9,1,2) = {" -aT -aT -aT -cT -cT -mm -zh -zh -mm -mm -mm -mm -mm -mm -zh -zh -zh -zh -zh -mm -cT -cT -aT -aT -mm -mm -zh -zh -zh -zh -mm -mm -mm -mm -zh -mm -mm -mm -aT -aT -aT -aT -mm -mm -mm -Rn -Rn -mm -zh -Rn -Rn -Rn -Rn -zh -Rn -Rn -Rn -mm -Rn -Rn -Rn -Rn -mm -Oe -mm -mm -zh -mm -sz -mm -Rn -Rn -Rn -mm -aT -aT -aT -mm -mm -mm -mm -zh -mm -mm -mm -mm -mm -mm -Oe -Rn -Rn -mm -mm -mm -sz -sz -Rn -Rn -Rn -mm -mm -Rn -Rn -mm -KA -mm -Rn -Rn -zh -zh -zh -zh -mm -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Oe -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Oe -Rn -Rn -Rn -mm -Rn -Rn -Rn -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(10,1,2) = {" -aT -aT -cT -cT -cT -zh -zh -mm -mm -zh -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -cT -cT -aT -mm -mm -zh -zh -zh -zh -mm -mm -mm -mm -mm -mm -aT -aT -aT -aT -aT -aT -mm -mm -mm -Rn -Rn -mm -mm -VF -mm -Rn -mm -Rn -mm -zh -zh -Rn -Rn -Rn -mm -zh -zh -Rn -Rn -Rn -zh -Rn -Rn -sz -Rn -Rn -zh -mm -mm -mm -mm -zh -zh -mm -mm -mm -mm -mm -mm -mm -mm -Rn -Oe -Oe -mm -Rn -mm -mm -sz -sz -Rn -Rn -Rn -mm -lR -mm -Rn -Rn -mm -Rn -Oe -Rn -Rn -Rn -mm -mm -Rn -Rn -Rn -Rn -Rn -Rn -eK -Oe -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -Rn -Rn -Rn -Rn -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(11,1,2) = {" -aT -aT -cT -mm -zh -zh -mm -mm -zh -zh -zh -zh -zh -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -zh -zh -zh -zh -zh -zh -mm -zh -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -Rn -Rn -Rn -Rn -Rn -Rn -zh -zh -Rn -Rn -mm -mm -VF -Rn -Rn -Oe -Rn -Rn -mm -Rn -mm -Rn -mm -mm -sz -mm -mm -zh -zh -zh -mm -Oe -zh -zh -mm -mm -zh -KA -zh -zh -zh -Oe -mm -Rn -zh -zh -Rn -Rn -Rn -sz -sz -Rn -Rn -Rn -Rn -mm -mm -mm -Rn -Rn -Rn -mm -mm -mm -mm -mm -mm -Rn -Rn -Rn -Rn -eK -Rn -Rn -Oe -Oe -Oe -Rn -Rn -Rn -Rn -Oe -Rn -Rn -Oe -Oe -Rn -Rn -Rn -Rn -mm -Rn -Oe -Rn -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(12,1,2) = {" -aT -aT -cT -mm -zh -mm -mm -zh -zh -zh -zh -mm -cT -cT -cT -cT -cT -mm -zh -zh -mm -mm -mm -mm -zh -zh -zh -mm -zh -zh -zh -zh -zh -zh -mm -aT -aT -aT -aT -aT -aT -aT -mm -mm -mm -Rn -Rn -Rn -Rn -Rn -Oe -Rn -Rn -mm -Rn -mm -Rn -Rn -Rn -Rn -Rn -zh -zh -Rn -zh -zh -Rn -Rn -Rn -zh -Rn -Rn -zh -zh -zh -mm -mm -zh -mm -mm -mm -zh -zh -zh -Rn -Oe -Rn -zh -Oe -Rn -Rn -mm -Rn -Rn -sz -sz -Rn -Rn -mm -mm -mm -mm -IY -Oe -mm -mm -mm -mm -KA -mm -zh -zh -Rn -Rn -Rn -Oe -Rn -Rn -Rn -Rn -Oe -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Oe -Rn -Rn -Rn -Rn -Rn -Rn -mm -Rn -Rn -Rn -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(13,1,2) = {" -aT -aT -cT -zh -zh -mm -mm -zh -zh -zh -mm -cT -cT -aT -aT -aT -cT -cT -zh -zh -zh -mm -mm -mm -zh -mm -mm -zh -zh -zh -zh -zh -zh -zh -mm -aT -aT -aT -aT -aT -aT -mm -mm -mm -mm -mm -Rn -Rn -Rn -Rn -zh -zh -zh -Rn -Rn -Rn -zh -zh -Oe -Rn -mm -mm -mm -VF -Rn -Rn -mm -Rn -Oe -Rn -mm -mm -zh -zh -zh -mm -mm -mm -mm -Rn -mm -zh -zh -zh -mm -Rn -zh -Rn -mm -zh -zh -Rn -Rn -Rn -sz -sz -Oe -Rn -zh -mm -KA -mm -mm -mm -mm -mm -mm -mm -mm -mm -zh -Rn -Rn -Rn -Oe -Oe -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -Rn -Rn -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(14,1,2) = {" -aT -aT -Es -mm -mm -mm -zh -zh -zh -mm -cT -cT -aT -aT -aT -aT -aT -cT -mm -zh -zh -mm -mm -mm -mm -mm -zh -zh -zh -mm -mm -mm -zh -zh -zh -mm -aT -aT -aT -mm -mm -zh -zh -mm -mm -mm -Rn -Rn -Oe -Rn -Rn -mm -mm -VF -Rn -Rn -mm -mm -VF -zh -zh -mm -Rn -Rn -zh -zh -Rn -zh -zh -Rn -Rn -Rn -zh -zh -zh -mm -lR -mm -Rn -Rn -mm -mm -mm -Oe -zh -Rn -Rn -Rn -Rn -mm -mm -VF -Rn -Rn -sz -sz -Rn -Oe -zh -mm -mm -mm -zh -mm -mm -KA -mm -mm -mm -zh -zh -Rn -Rn -Oe -Oe -Rn -Rn -Rn -Oe -Rn -Rn -Rn -Rn -Rn -eK -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -xF -Rn -Rn -Rn -Rn -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(15,1,2) = {" -aT -aT -Es -mm -mm -zh -zh -zh -zh -mm -cT -cT -aT -aT -aT -aT -aT -cT -cT -zh -zh -zh -mm -mm -mm -mm -zh -mm -mm -VF -mm -mm -mm -mm -mm -mm -mm -mm -zh -zh -zh -zh -zh -mm -mm -mm -Rn -Rn -Rn -Rn -mm -mm -Rn -Rn -Rn -Rn -mm -Rn -Rn -Rn -Rn -mm -Rn -Rn -mm -mm -VF -Rn -Rn -mm -Rn -Oe -zh -zh -zh -zh -mm -mm -Rn -Oe -Oe -Rn -Oe -Rn -Rn -mm -zh -mm -Rn -mm -Rn -Rn -Rn -Rn -sz -sz -Rn -Rn -zh -zh -zh -zh -Oe -Rn -Rn -mm -mm -mm -mm -zh -Rn -Rn -Oe -Oe -Rn -Rn -Rn -Oe -Oe -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Oe -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(16,1,2) = {" -aT -aT -Es -mm -zh -zh -mm -mm -mm -mm -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -zh -mm -mm -mm -zh -zh -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -zh -zh -zh -zh -zh -zh -mm -VF -mm -Rn -Rn -mm -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -mm -mm -zh -zh -Rn -Rn -Rn -mm -Rn -Rn -zh -zh -Rn -Rn -Rn -mm -zh -zh -zh -zh -Oe -zh -Oe -Rn -Oe -Rn -zh -Rn -Rn -mm -mm -VF -Rn -Rn -mm -mm -mm -sz -sz -mm -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -mm -Rn -zh -zh -Rn -Rn -Rn -Rn -Rn -Rn -Oe -Oe -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Oe -Oe -Rn -Rn -Rn -Rn -Rn -Rn -Rn -zh -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(17,1,2) = {" -aT -aT -cT -mm -zh -mm -mm -zh -mm -cT -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -zh -mm -mm -mm -mm -mm -mm -mm -mm -VF -mm -mm -zh -zh -zh -zh -zh -zh -mm -mm -mm -Rn -Rn -Rn -Rn -Rn -mm -mm -mm -mm -Rn -mm -mm -mm -mm -mm -VF -Rn -Rn -mm -mm -Rn -mm -mm -VF -Rn -Rn -mm -zh -zh -zh -mm -zh -zh -Rn -Rn -zh -Rn -Rn -mm -Rn -mm -Rn -Rn -Rn -Rn -mm -mm -mm -sz -sz -zh -Rn -Rn -mm -mm -Rn -Rn -mm -Rn -Rn -Rn -Rn -Oe -mm -Rn -Rn -Oe -Rn -Rn -Rn -Rn -Rn -Rn -zh -zh -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Oe -Rn -Rn -Rn -Rn -mm -Rn -Rn -Rn -zh -zh -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(18,1,2) = {" -aT -aT -cT -mm -zh -zh -zh -zh -mm -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -mm -zh -zh -mm -mm -mm -mm -mm -mm -mm -zh -zh -mm -mm -mm -zh -zh -mm -mm -mm -mm -Rn -Rn -Rn -Rn -Rn -Rn -mm -mm -mm -mm -mm -mm -mm -Rn -Rn -Rn -Rn -mm -mm -Rn -mm -Rn -Rn -Rn -Rn -mm -zh -mm -zh -zh -zh -Rn -Rn -Rn -Rn -mm -zh -zh -Rn -Rn -Rn -Rn -Oe -Oe -mm -mm -mm -sz -sz -zh -Rn -Rn -Rn -KA -Rn -Rn -mm -mm -KA -mm -Rn -Rn -Rn -Rn -Oe -Oe -Rn -Rn -Oe -Rn -Rn -zh -KA -zh -Oe -Rn -Oe -Rn -Rn -Rn -Oe -Oe -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -Rn -zh -zh -zh -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(19,1,2) = {" -aT -aT -cT -mm -mm -zh -zh -mm -mm -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -mm -zh -zh -zh -zh -zh -mm -mm -mm -mm -mm -mm -aT -aT -aT -mm -mm -mm -mm -aT -aT -mm -Rn -Rn -Rn -zh -Rn -mm -mm -VF -mm -mm -mm -mm -mm -mm -mm -mm -mm -Rn -Rn -Rn -Rn -Rn -sz -sz -EL -mm -mm -Rn -Rn -Rn -Rn -mm -Rn -Rn -Rn -mm -mm -VF -mm -Rn -Oe -zh -Oe -Rn -Rn -mm -sz -sz -mm -Rn -Rn -Rn -Rn -Rn -Rn -mm -mm -mm -Rn -Rn -mm -Rn -Rn -Rn -Oe -Oe -Rn -Rn -Oe -zh -zh -zh -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Oe -Rn -zh -zh -mm -mm -Rn -Rn -Oe -Rn -Rn -Rn -zh -zh -zh -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(20,1,2) = {" -aT -aT -cT -mm -mm -zh -mm -mm -mm -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -mm -mm -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -mm -mm -zh -zh -zh -mm -mm -vZ -vZ -vZ -vZ -vZ -vZ -vZ -mm -mm -Rn -mm -eK -Rn -mm -sz -sz -sz -mm -Rn -mm -zh -zh -zh -Oe -mm -mm -Rn -Oe -Rn -Rn -zh -Rn -Rn -Rn -mm -Rn -Rn -mm -sz -sz -mm -zh -Rn -mm -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -Rn -Rn -Rn -Oe -Oe -Rn -Rn -Oe -Rn -Rn -Rn -Oe -Rn -Rn -Rn -Rn -Oe -Rn -Rn -Rn -Rn -zh -zh -mm -mm -mm -Rn -Rn -Rn -Rn -Rn -Rn -zh -zh -zh -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(21,1,2) = {" -aT -aT -cT -mm -mm -mm -mm -mm -cT -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -zh -zh -zh -zh -vZ -mm -mm -mm -mm -mm -mm -mm -mm -Rn -mm -mm -Rn -mm -sz -sz -sz -Rn -Rn -zh -zh -mm -mm -zh -zh -Rn -Rn -Rn -mm -Rn -Rn -mm -zh -zh -zh -Rn -Oe -mm -sz -sz -KA -zh -Rn -Rn -Rn -Rn -Rn -Rn -Rn -IY -Rn -Rn -zh -Rn -Rn -Rn -Rn -Oe -Oe -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -KA -zh -mm -mm -zh -mm -Rn -Rn -Oe -Rn -Rn -zh -zh -zh -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(22,1,2) = {" -aT -aT -cT -mm -zh -mm -mm -cT -cT -aT -aT -aT -cT -cT -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -zh -zh -zh -zh -mm -mm -zh -zh -mm -mm -mm -Rn -Rn -Rn -Rn -Rn -sz -sz -Rn -Rn -zh -zh -mm -mm -KA -mm -Rn -mm -zh -zh -Rn -Rn -Rn -Rn -mm -mm -VF -Rn -Rn -mm -sz -sz -mm -Rn -Rn -Rn -Rn -kt -mm -Oe -Rn -Rn -mm -mm -zh -zh -Oe -Rn -Rn -Oe -Oe -Oe -Rn -Rn -Rn -Oe -Oe -Oe -Oe -Rn -Rn -Rn -Rn -Oe -Rn -zh -zh -mm -eO -mm -zh -Rn -Rn -Rn -Rn -Rn -Rn -Rn -zh -zh -zh -mm -Oe -aT -aT -aT -aT -aT -aT -aT -aT -"} -(23,1,2) = {" -aT -aT -aT -zh -zh -mm -cT -cT -aT -aT -aT -cT -cT -mm -cT -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -zh -zh -zh -mm -zh -zh -zh -zh -zh -mm -Rn -mm -VF -mm -Rn -sz -sz -Rn -zh -Rn -zh -mm -mm -mm -zh -Rn -Oe -mm -mm -Rn -Oe -Rn -mm -Rn -mm -mm -Rn -Rn -mm -sz -sz -mm -Oe -Rn -Rn -Rn -Rn -mm -Rn -Rn -Rn -Rn -mm -mm -mm -zh -zh -Rn -Rn -Rn -Oe -Oe -Rn -Rn -Oe -Oe -Oe -Rn -Rn -Rn -Rn -Oe -Oe -Rn -zh -mm -mm -mm -zh -zh -mm -mm -mm -Rn -Oe -Rn -Rn -Rn -Rn -Oe -Oe -Oe -mm -aT -aT -aT -aT -aT -aT -aT -"} -(24,1,2) = {" -aT -aT -aT -zh -mm -cT -cT -cT -cT -cT -cT -cT -mm -mm -mm -cT -cT -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -vZ -mm -mm -zh -mm -mm -zh -zh -zh -mm -mm -mm -Rn -Rn -sz -sz -zh -zh -zh -Rn -mm -zh -zh -zh -mm -Rn -mm -Oe -mm -Oe -zh -zh -Rn -Rn -Rn -zh -zh -mm -sz -sz -mm -Rn -Rn -Rn -Rn -Rn -mm -Oe -mm -mm -mm -Oe -Rn -mm -mm -zh -zh -Rn -Rn -Rn -Oe -Rn -Rn -Rn -Oe -Rn -Rn -Rn -Rn -Oe -Oe -Rn -zh -zh -mm -mm -mm -zh -Rn -mm -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Oe -Oe -Rn -mm -mm -mm -aT -aT -aT -aT -aT -"} -(25,1,2) = {" -aT -mm -zh -zh -cT -cT -cT -cT -cT -cT -mm -mm -Rn -Rn -Rn -mm -mm -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -vZ -mm -mm -mm -mm -VF -mm -zh -zh -zh -zh -zh -Rn -Rn -sz -sz -zh -zh -zh -zh -zh -Rn -mm -mm -eO -mm -Rn -mm -zh -Rn -Rn -Rn -mm -Rn -Rn -zh -zh -Oe -sz -sz -Oe -Rn -Rn -Oe -Rn -Oe -Rn -Rn -Rn -mm -KA -mm -Rn -Oe -mm -mm -zh -zh -Rn -Rn -Rn -Rn -Rn -Oe -Rn -Rn -Rn -Rn -Rn -Rn -Rn -zh -zh -mm -mm -mm -zh -zh -Rn -Rn -Rn -Rn -Rn -Oe -Oe -Oe -Rn -Rn -Oe -Rn -Rn -Rn -mm -mm -aT -aT -aT -aT -aT -"} -(26,1,2) = {" -aT -mm -zh -cT -cT -aT -aT -cT -cT -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -ny -Qs -hP -ny -mm -mm -mm -mm -mm -mm -zh -zh -zh -mm -Rn -Oe -sz -sz -mm -zh -mm -IY -mm -mm -Rn -mm -Rn -Rn -Rn -Rn -Oe -mm -zh -zh -Rn -Rn -zh -Oe -mm -Oe -sz -sz -mm -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -mm -mm -Rn -zh -mm -mm -mm -zh -mm -mm -Rn -Rn -Oe -Oe -Oe -Rn -Rn -xF -Rn -Rn -Rn -zh -Rn -zh -zh -zh -Rn -Rn -Rn -Rn -Rn -Rn -Oe -Oe -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -aT -aT -aT -aT -aT -"} -(27,1,2) = {" -aT -zh -zh -aT -aT -aT -aT -cT -mm -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -ht -NX -hU -ii -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -mm -mm -mm -mm -mm -Rn -Rn -mm -mm -mm -mm -mm -Rn -Rn -mm -mm -VF -Rn -Rn -Oe -mm -mm -sz -sz -mm -zh -Rn -Rn -Rn -mm -Rn -Rn -Rn -Rn -mm -Rn -zh -zh -mm -mm -mm -mm -mm -mm -mm -Rn -Rn -Oe -Rn -eK -Rn -Rn -Rn -Rn -KA -zh -Rn -mm -mm -zh -zh -zh -zh -zh -zh -zh -Rn -Rn -Rn -Rn -mm -Rn -Rn -Rn -Rn -Rn -sz -sz -sz -sz -aT -aT -aT -"} -(28,1,2) = {" -aT -mm -mm -aT -aT -aT -aT -cT -Rn -Rn -Rn -Rn -mm -ak -mm -Rn -Rn -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -ht -NX -hU -in -sz -sz -sz -sz -sz -sz -sz -mm -mm -sz -sz -sz -sz -sz -mm -mm -sz -sz -sz -sz -sz -sz -sz -sz -sz -mm -mm -Rn -mm -Rn -Rn -Rn -Rn -mm -mm -sz -sz -sz -mm -zh -zh -zh -zh -mm -mm -mm -mm -Rn -Rn -Rn -zh -zh -mm -mm -mm -mm -mm -eK -mm -mm -Rn -Rn -Rn -Rn -zh -zh -zh -mm -mm -Rn -mm -mm -mm -mm -mm -mm -mm -mm -mm -zh -zh -zh -zh -mm -mm -mm -mm -mm -Rn -sz -sz -sz -sz -sz -sz -aT -aT -"} -(29,1,2) = {" -aT -zh -mm -aT -aT -aT -aT -cT -Rn -Rn -Rn -mm -ak -ak -ak -ak -Rn -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -ny -Qs -hP -ny -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -aT -aT -"} -(30,1,2) = {" -aT -zh -mm -aT -aT -aT -aT -cT -cT -Rn -Rn -ak -ak -dZ -ak -mm -Rn -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -vZ -vZ -vZ -vZ -mm -vZ -mm -vZ -vZ -LM -LM -mm -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -aT -aT -"} -(31,1,2) = {" -aT -zh -mm -aT -aT -aT -aT -aT -cT -Rn -Rn -ak -ak -NX -ak -Rn -Rn -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -KA -zh -zh -zh -mm -mm -mm -mm -mm -vZ -kR -sz -sz -sz -sz -sz -sz -sz -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -zh -zh -zh -zh -zh -mm -mm -mm -Ee -mm -mm -mm -mm -mm -eK -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -EL -mm -mm -mm -Ee -zh -zh -zh -sz -sz -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -sz -sz -sz -sz -sz -sz -aT -aT -aT -"} -(32,1,2) = {" -aT -zh -mm -mm -aT -aT -aT -aT -cT -Rn -Rn -ak -ak -ak -ak -Rn -mm -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -zh -zh -zh -zh -mm -mm -mm -mm -mm -mm -mm -sz -sz -sz -sz -Ee -mm -mm -mm -Rn -Rn -Rn -Rn -Rn -mm -mm -mm -mm -zh -zh -zh -EL -mm -zh -zh -zh -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -zh -mm -mm -zh -zh -mm -Rn -sz -sz -mm -mm -mm -mm -mm -mm -mm -zh -zh -zh -zh -zh -zh -mm -mm -zh -zh -zh -Ee -mm -mm -mm -eO -sz -mm -aT -aT -aT -aT -"} -(33,1,2) = {" -aT -zh -zh -mm -aT -aT -aT -aT -cT -Rn -Rn -mm -ak -ak -mm -Rn -mm -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -zh -Fv -zh -mm -Rn -mm -mm -mm -Rn -kt -mm -sz -sz -sz -mm -mm -mm -Rn -Rn -Rn -mm -mm -Rn -Rn -Rn -Rn -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -zh -zh -mm -KA -mm -mm -mm -mm -mm -mm -mm -KA -mm -mm -mm -zh -zh -zh -zh -zh -zh -aT -aT -aT -mm -Rn -Rn -sz -sz -KA -mm -mm -mm -mm -mm -mm -zh -Rn -Rn -Rn -Rn -zh -zh -Rn -Rn -zh -zh -zh -zh -zh -zh -sz -mm -aT -aT -aT -aT -aT -"} -(34,1,2) = {" -aT -mm -zh -mm -aT -aT -aT -aT -cT -Rn -Rn -Rn -mm -mm -Rn -Rn -mm -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -zh -zh -zh -Rn -Rn -eO -mm -zh -zh -Rn -mm -sz -sz -sz -mm -mm -zh -zh -zh -Rn -Rn -mm -KA -Rn -Rn -mm -zh -KA -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -zh -zh -mm -mm -mm -zh -zh -zh -zh -mm -mm -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -Rn -Oe -sz -sz -Rn -Rn -Rn -zh -mm -KA -mm -zh -zh -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -zh -mm -zh -zh -mm -aT -aT -aT -aT -aT -aT -"} -(35,1,2) = {" -aT -mm -zh -mm -aT -aT -aT -aT -cT -Rn -Rn -Rn -Rn -Rn -Rn -mm -cT -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -zh -KA -zh -Rn -mm -mm -mm -mm -zh -Rn -Rn -sz -sz -sz -mm -zh -zh -zh -Oe -mm -Rn -Rn -mm -Rn -Rn -mm -zh -zh -zh -zh -mm -Rn -Rn -mm -zh -mm -KA -zh -zh -mm -mm -Rn -Rn -mm -Oe -zh -zh -mm -mm -mm -mm -zh -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -Rn -Rn -sz -sz -Oe -Rn -Oe -zh -mm -mm -mm -mm -zh -mm -Rn -Rn -Rn -Rn -Oe -Rn -Rn -zh -zh -zh -zh -mm -aT -aT -aT -aT -aT -aT -aT -"} -(36,1,2) = {" -aT -mm -zh -zh -aT -aT -aT -aT -cT -mm -Rn -Rn -Rn -Rn -mm -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -mm -mm -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -zh -zh -zh -zh -Rn -mm -mm -mm -zh -zh -mm -Rn -sz -sz -sz -mm -zh -zh -zh -zh -zh -zh -Rn -Rn -Rn -Rn -Rn -zh -zh -zh -zh -Rn -Rn -mm -zh -zh -mm -mm -zh -zh -zh -mm -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -lR -mm -zh -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -Rn -Rn -sz -sz -Oe -Oe -Oe -zh -zh -mm -zh -zh -zh -Rn -Rn -Rn -Oe -Rn -Rn -Rn -Rn -zh -zh -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -"} -(37,1,2) = {" -aT -mm -mm -zh -mm -aT -aT -aT -cT -cT -cT -mm -mm -mm -cT -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -zh -zh -zh -zh -zh -Rn -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -mm -zh -zh -zh -zh -Rn -mm -mm -VF -zh -zh -KA -mm -sz -sz -sz -mm -zh -zh -zh -zh -zh -zh -zh -Rn -Rn -Oe -Rn -zh -zh -zh -zh -Rn -IY -mm -zh -zh -zh -mm -Rn -mm -Rn -Rn -cR -Rn -Oe -Rn -mm -Rn -xF -Rn -Rn -mm -zh -aT -aT -aT -aT -aT -aT -aT -mm -mm -mm -Rn -Rn -Rn -sz -sz -Rn -Rn -Rn -mm -zh -mm -zh -mm -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -zh -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(38,1,2) = {" -aT -aT -aT -zh -mm -aT -aT -aT -aT -cT -cT -mm -cT -cT -cT -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -zh -Oe -Rn -Rn -Rn -Rn -zh -Rn -Rn -Rn -aT -aT -aT -aT -aT -aT -aT -mm -mm -mm -mm -mm -Oe -zh -gZ -zh -zh -Rn -mm -mm -mm -zh -zh -zh -mm -sz -sz -sz -mm -zh -zh -zh -KA -zh -zh -zh -mm -Rn -Rn -mm -zh -zh -mm -mm -mm -mm -zh -zh -zh -Oe -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -mm -KA -mm -Rn -Oe -Rn -zh -aT -aT -aT -aT -aT -aT -mm -zh -zh -Rn -Rn -Rn -Oe -sz -sz -zh -Rn -Rn -Rn -mm -mm -zh -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Oe -Rn -Rn -zh -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(39,1,2) = {" -aT -aT -aT -zh -mm -aT -aT -aT -aT -cT -cT -cT -cT -aT -aT -cT -cT -cT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -zh -zh -Rn -Rn -Rn -Rn -Rn -mm -zh -zh -Rn -mm -mm -aT -aT -mm -mm -mm -mm -mm -eO -mm -mm -mm -zh -zh -zh -zh -Rn -mm -mm -zh -zh -zh -zh -mm -sz -sz -sz -mm -mm -zh -zh -zh -zh -zh -Oe -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -zh -zh -zh -zh -Rn -Rn -Rn -Oe -Rn -Rn -Rn -mm -mm -mm -mm -mm -Rn -Rn -Rn -mm -aT -aT -aT -aT -aT -aT -zh -zh -Rn -Rn -Rn -Rn -Rn -sz -sz -mm -mm -mm -mm -zh -zh -zh -Oe -Rn -Oe -Rn -Rn -Rn -Rn -Rn -mm -zh -zh -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(40,1,2) = {" -aT -aT -aT -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -zh -zh -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -mm -zh -Rn -Rn -Rn -Rn -Oe -Rn -Rn -mm -zh -zh -mm -mm -eO -mm -Rn -Rn -Rn -mm -mm -mm -mm -mm -mm -zh -zh -zh -zh -mm -mm -mm -zh -mm -mm -zh -mm -sz -sz -sz -mm -xI -lI -lS -zh -mm -zh -mm -mm -mm -KA -mm -mm -eO -mm -mm -mm -zh -KA -zh -Oe -zh -Rn -Oe -Rn -Rn -Rn -Rn -mm -mm -eK -mm -mm -Rn -Rn -mm -mm -mm -zh -aT -aT -aT -aT -mm -mm -Rn -Rn -Rn -Rn -Rn -zh -sz -sz -mm -zh -mm -zh -zh -mm -Rn -Rn -Rn -Rn -Rn -Oe -Rn -Rn -Rn -mm -Rn -zh -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(41,1,2) = {" -aT -mm -zh -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -zh -zh -Rn -Oe -Rn -zh -mm -mm -aT -aT -aT -aT -aT -aT -aT -mm -mm -zh -zh -Rn -Rn -Oe -Rn -Rn -Rn -Rn -Rn -Rn -zh -mm -mm -Rn -Rn -mm -Rn -Rn -Rn -Rn -Rn -Rn -mm -mm -KA -zh -zh -zh -Rn -Rn -Rn -mm -VF -xI -xI -mm -kT -sz -sz -mm -mm -zh -lT -zh -zh -Oe -mm -mm -mm -mm -mm -mm -zh -zh -mm -mm -zh -zh -zh -Oe -Rn -Rn -Rn -Rn -mm -mm -KA -mm -mm -mm -Rn -Rn -Rn -mm -mm -KA -mm -zh -zh -zh -zh -Oe -mm -Rn -Rn -Rn -Rn -Rn -zh -zh -sz -sz -Rn -zh -zh -zh -Rn -Oe -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -zh -zh -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(42,1,2) = {" -aT -zh -zh -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -zh -zh -Rn -Rn -Rn -zh -zh -zh -zh -zh -zh -zh -zh -mm -mm -Rn -mm -zh -Rn -Oe -Rn -Rn -Oe -Rn -Rn -Rn -mm -KA -zh -mm -Rn -Oe -Rn -Rn -cR -Rn -Rn -Rn -Rn -mm -mm -mm -mm -mm -Rn -Rn -Rn -VF -mm -mm -Qy -mm -mm -mm -kT -kT -kT -mm -mm -KA -lS -mm -mm -Rn -Rn -Rn -mm -Oe -zh -zh -zh -zh -mm -mm -zh -zh -zh -Rn -Oe -Rn -Rn -mm -mm -mm -mm -mm -zh -zh -Rn -zh -zh -mm -mm -mm -mm -zh -Rn -Rn -mm -Rn -Rn -Rn -Rn -Oe -Rn -Rn -zh -mm -sz -sz -Rn -Oe -Rn -Rn -Rn -Rn -Rn -Rn -mm -mm -Rn -Rn -Rn -Rn -Rn -Rn -zh -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(43,1,2) = {" -aT -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -zh -Rn -Rn -Rn -Rn -zh -KA -zh -zh -zh -mm -mm -zh -Rn -Rn -Rn -mm -zh -Rn -Rn -Rn -Rn -Rn -Rn -Rn -zh -zh -zh -zh -mm -mm -mm -Rn -Rn -Rn -Rn -mm -mm -mm -mm -mm -mm -mm -mm -Rn -Rn -mm -mm -mm -mm -Qy -mm -Ee -mm -kT -kT -kT -mm -mm -mm -lS -mm -Rn -Rn -Rn -mm -zh -zh -zh -zh -mm -KA -mm -mm -zh -zh -Rn -Rn -mm -mm -mm -mm -Rn -zh -zh -zh -zh -zh -zh -zh -mm -mm -mm -zh -zh -Rn -Rn -zh -mm -Rn -Rn -Rn -Rn -Rn -mm -mm -mm -mm -sz -sz -Rn -Rn -Rn -Rn -mm -mm -mm -mm -mm -mm -zh -zh -zh -zh -zh -zh -zh -mm -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -"} -(44,1,2) = {" -aT -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -zh -zh -zh -cR -Rn -Rn -zh -zh -zh -zh -mm -mm -Rn -Rn -mm -mm -mm -Rn -mm -zh -zh -zh -zh -zh -Rn -Rn -zh -zh -zh -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -sz -Sc -sz -sz -sz -mm -mm -mm -mm -LM -LM -LM -LM -kU -kU -kU -LM -LM -LM -LM -mm -mm -mm -mm -mm -mm -zh -zh -mm -mm -mm -mm -mm -mm -mm -mm -mm -Rn -Rn -mm -mm -Rn -Rn -Rn -Rn -mm -mm -mm -Rn -Rn -Rn -mm -mm -mm -mm -zh -zh -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -sz -sz -zh -zh -zh -zh -zh -zh -mm -mm -mm -mm -mm -mm -mm -zh -zh -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -aT -"} -(45,1,2) = {" -aT -mm -zh -mm -mm -mm -aT -aT -aT -aT -aT -mm -mm -Rn -mm -mm -zh -cR -Rn -Rn -cR -zh -mm -Oe -Rn -Rn -Rn -Rn -Rn -Rn -Oe -mm -mm -mm -mm -zh -zh -zh -zh -zh -zh -mm -mm -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -dS -fO -eQ -gn -gn -gn -eQ -fO -dS -eQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -Rn -Rn -sz -sz -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -aT -"} -(46,1,2) = {" -aT -Rn -zh -zh -zh -mm -aT -aT -aT -mm -Rn -Rn -Rn -Rn -mm -mm -zh -zh -Rn -Rn -Rn -zh -Rn -Rn -Rn -zh -zh -Oe -zh -Rn -Rn -Rn -mm -mm -mm -KA -zh -zh -zh -zh -mm -mm -mm -RI -RI -fx -fx -fx -fx -fx -fx -fx -fx -fx -fx -fx -fx -fx -fx -fx -fx -fx -fx -fx -fx -fx -eQ -fO -fO -mp -gn -gn -gn -mp -fO -fO -eQ -fx -fx -fx -fx -fx -fx -fx -fx -fx -fx -fx -fx -fx -fx -fx -fx -fx -RI -RI -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -Rn -Rn -sz -sz -sz -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -NX -aT -"} -(47,1,2) = {" -aT -Rn -Rn -zh -Oe -zh -zh -mm -mm -Rn -Rn -mm -zh -zh -zh -zh -zh -zh -Rn -Rn -Rn -zh -Rn -Rn -Rn -zh -zh -zh -zh -zh -zh -zh -zh -zh -mm -mm -zh -zh -mm -Rn -mm -zh -mm -RI -fn -wq -Sw -fO -fO -wX -fO -fO -fO -fO -fO -fO -fO -fO -fO -fO -fO -wX -wX -wX -wX -wX -eQ -eQ -eQ -eQ -kV -kV -kV -eQ -eQ -eQ -eQ -fO -fO -fO -fO -fO -fO -fO -fO -fO -fO -fO -fO -fO -fO -fO -fO -eQ -eQ -eQ -LM -mm -KA -mm -mm -mm -mm -mm -mm -mm -mm -mm -Rn -zh -zh -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -sz -sz -sz -Oe -Rn -zh -mm -mm -mm -mm -Oe -mm -Oe -mm -Rn -Rn -mm -zh -zh -zh -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -aT -"} -(48,1,2) = {" -aT -mm -Rn -zh -zh -zh -zh -zh -zh -Rn -Rn -Rn -Oe -zh -zh -zh -zh -KA -Rn -Rn -zh -Oe -mm -Rn -mm -mm -mm -zh -KA -zh -zh -zh -mm -Rn -Rn -Rn -mm -Rn -Rn -Rn -zh -zh -mm -RI -fn -BK -gn -gn -gn -sg -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -wX -wX -wX -wX -wX -jc -gn -gn -gn -gn -gn -gn -fO -ly -cb -cb -cb -cb -cb -lz -cb -cb -cb -cb -cb -lz -nG -nG -nG -nG -oc -oc -eQ -fO -fO -LM -mm -Rn -zh -zh -Rn -Rn -zh -zh -Rn -zh -zh -Rn -zh -Oe -Rn -KA -mm -Oe -zh -Rn -mm -mm -Oe -zh -Rn -sz -sz -sz -sz -mm -mm -Rn -mm -mm -mm -mm -mm -Rn -Rn -mm -Rn -Oe -Rn -zh -Rn -zh -Oe -Rn -Oe -Rn -Oe -mm -mm -Rn -mm -Rn -mm -aT -"} -(49,1,2) = {" -aT -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -zh -zh -zh -Rn -zh -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -zh -zh -mm -mm -RI -fn -fO -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -wX -wX -wX -wX -wX -jc -gn -MR -gn -gn -gn -gn -fO -cb -Up -SJ -Wk -Cp -Fi -cb -mx -xw -xw -xw -nu -cb -nG -Um -Um -Um -Um -oc -eQ -fO -fO -LM -mm -Rn -zh -Oe -KA -Rn -zh -Oe -Rn -zh -Oe -Rn -Rn -zh -Rn -zh -zh -Rn -zh -Rn -zh -zh -Rn -zh -Rn -sz -sz -sz -mm -mm -zh -KA -zh -zh -Rn -Oe -Rn -Oe -Rn -mm -zh -mm -Oe -zh -mm -Rn -zh -zh -mm -Oe -mm -mm -Rn -mm -Rn -Rn -zh -aT -"} -(50,1,2) = {" -aT -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fn -WE -gn -gn -gn -Bk -Bk -Bk -Bk -Bk -Bk -Bk -Bk -Bk -Bk -Bk -Bk -Bk -Bk -Bk -Bk -uw -uw -uw -sq -sq -En -gn -gn -fO -cb -xO -xO -Fs -Fs -Fs -cb -xw -xw -xw -xw -xw -cb -nG -Um -Um -Um -Um -oc -eQ -fO -fO -LM -KA -Rn -Rn -zh -Rn -Rn -Rn -zh -Rn -Rn -zh -Oe -zh -Rn -Rn -zh -KA -zh -zh -Rn -zh -KA -zh -zh -Rn -sz -sz -sz -Oe -mm -zh -Rn -Rn -Rn -mm -mm -mm -Rn -zh -Oe -Rn -zh -mm -mm -Rn -mm -zh -mm -Rn -mm -mm -Rn -mm -Oe -mm -Rn -zh -aT -"} -(51,1,2) = {" -aT -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fn -WE -gn -gn -gn -Bk -gi -gG -gG -gm -gm -Bk -hV -gG -gG -hV -Bk -Bk -Bk -Bk -Bk -uw -KB -SC -Vr -uw -fO -gn -gn -fO -dT -aj -aj -xw -Kn -xw -cb -my -xw -xw -xw -xw -cb -nG -Um -Um -Um -Um -nG -eQ -fO -fO -LM -mm -Oe -zh -Rn -Rn -Oe -zh -Rn -Oe -zh -Rn -Rn -zh -Oe -Rn -zh -mm -zh -Rn -Rn -zh -mm -zh -Rn -Rn -sz -sz -mm -Rn -zh -Rn -Rn -Rn -Rn -zh -oh -mm -Rn -zh -mm -mm -Rn -mm -Oe -mm -Oe -Rn -mm -mm -mm -mm -Rn -Rn -mm -zh -zh -zh -aT -"} -(52,1,2) = {" -aT -sY -sY -eQ -eQ -sY -sY -sY -sY -sY -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -sY -sY -sY -eQ -sY -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -sY -sY -sY -eQ -eQ -eQ -RI -fn -fO -gn -gn -gn -Bk -gm -gm -gG -PX -PX -Bk -hX -PX -PX -gG -Bk -Bk -Bk -Bk -Bk -uw -KB -UJ -UJ -uw -fO -gn -gn -fO -qT -aj -aj -xw -Fy -Ld -cb -mz -xw -xw -xw -xw -cb -nG -Um -Um -Um -Um -nG -eQ -fO -fO -LM -mm -mm -Rn -zh -zh -mm -mm -mm -mm -mm -mm -Rn -Rn -zh -Rn -Rn -Rn -zh -zh -zh -Rn -Oe -zh -zh -zh -sz -sz -mm -Rn -Rn -Rn -Rn -Oe -Oe -KA -mm -mm -Rn -zh -mm -Rn -Rn -mm -zh -Rn -mm -mm -mm -mm -Oe -mm -mm -Rn -zh -mm -zh -zh -aT -"} -(53,1,2) = {" -aT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -eQ -dS -eQ -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -eQ -RI -fn -FC -gn -gn -gn -Bk -go -gI -gG -PX -PX -Bk -hY -PX -PX -gG -Bk -Mq -jr -jz -jz -uw -ki -UJ -UJ -uw -lb -gn -gn -fO -cb -AW -YM -xw -Fy -Fy -lz -cb -mA -cb -mY -cb -lz -nG -nG -Um -Um -Um -nG -eQ -fO -fO -LM -mm -mm -Rn -zh -Oe -mm -mm -mm -mm -mm -mm -Oe -zh -Rn -Rn -Rn -Rn -zh -Oe -mm -Rn -Rn -zh -Oe -mm -sz -sz -zh -mm -Rn -mm -mm -Rn -mm -Oe -zh -mm -Rn -mm -mm -Rn -mm -Oe -zh -zh -mm -zh -zh -mm -zh -mm -zh -Rn -zh -zh -Oe -aT -aT -"} -(54,1,2) = {" -aT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -eQ -fO -eQ -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -wX -ME -ME -ME -Hj -ME -ME -ME -gn -gn -Bk -gp -MS -gG -PX -PX -Bk -hV -gG -gG -hV -Bk -NF -XZ -Rm -Rm -uw -EZ -UJ -UJ -uw -fO -gn -gn -lr -lz -cb -cb -jb -cb -lz -lz -qt -lA -ZA -lA -lA -lA -qt -nG -Um -Um -Um -nG -eQ -fO -fO -LM -mm -mm -Rn -Rn -zh -mm -mm -zh -zh -Rn -mm -Rn -zh -Oe -mm -mm -Oe -zh -Rn -zh -zh -KA -zh -zh -Rn -sz -sz -Rn -mm -mm -mm -mm -Rn -Rn -mm -Rn -mm -mm -mm -mm -Rn -Rn -mm -zh -KA -zh -zh -Oe -mm -Rn -zh -mm -mm -zh -Rn -mm -aT -aT -"} -(55,1,2) = {" -aT -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -eQ -VS -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -sY -sY -sY -eQ -eQ -eQ -eQ -eQ -eQ -eQ -wX -UU -JP -HI -JP -HI -vw -ME -gn -gn -Bk -gm -gm -gG -PX -PX -Bk -ia -io -io -hV -Bk -gr -oW -Rm -Rm -uw -Ct -UJ -NO -uw -fO -gn -gn -gn -lA -lA -lA -lA -pm -lA -lA -lA -lA -lA -lA -lA -lA -lA -nG -Um -Um -Um -nG -eQ -fO -fO -LM -mm -mm -Oe -zh -Rn -mm -mm -mm -mm -Oe -zh -Rn -Rn -zh -zh -zh -Rn -zh -Rn -Rn -zh -mm -zh -Rn -Rn -sz -sz -mm -mm -mm -Oe -mm -mm -Rn -zh -mm -mm -mm -Oe -mm -mm -Rn -zh -Rn -Rn -mm -zh -mm -zh -zh -zh -Rn -mm -mm -mm -mm -aT -aT -"} -(56,1,2) = {" -aT -Fa -Fa -Fa -eQ -eQ -eQ -eQ -eQ -eQ -eQ -gn -eN -gn -gn -gn -gn -gn -gn -gn -gn -gn -eN -gn -gn -gn -gn -gn -gn -gn -oG -fy -fy -fy -fy -fy -fy -fy -fy -eQ -Hu -JP -Vv -vT -Xu -JP -ME -gn -gn -Bk -gi -gG -gG -gm -gm -Bk -De -io -io -iQ -Bk -Ig -oW -oW -oW -uw -Er -UJ -UJ -uw -Yz -gn -gn -gn -lA -lA -lA -lA -lA -lA -lA -lA -lA -lA -lA -lA -lA -lA -cb -cb -cb -cb -cb -eQ -fO -fO -LM -Rn -mm -mm -mm -mm -mm -mm -zh -zh -Rn -zh -Oe -zh -Rn -zh -KA -zh -zh -Oe -Rn -Rn -Rn -Oe -zh -zh -sz -sz -zh -zh -mm -zh -mm -zh -Rn -zh -zh -zh -mm -zh -mm -zh -Rn -zh -mm -Rn -Oe -Rn -mm -mm -mm -zh -mm -Rn -Rn -mm -mm -aT -aT -"} -(57,1,2) = {" -aT -Fa -Fa -Fa -Ew -iA -cS -cS -cS -cS -cS -cS -iA -cS -dC -vO -cS -cS -cS -cS -cS -cS -nS -vO -mR -mR -mR -mR -OW -gn -gn -fy -eR -eR -eR -eR -eR -eR -fy -eQ -Hu -JP -Ka -JP -Ka -JP -ME -gn -JR -Bk -Bk -Bk -Bk -oY -Bk -Bk -Bk -Bk -iH -Bk -Bk -jg -Ig -Ig -uw -uw -uw -Xl -uw -uw -fO -gn -gn -fO -lz -gl -gl -gl -mc -lA -lA -lA -mE -lA -na -gl -nA -nA -dT -Fs -Fs -Cp -cb -eQ -fO -fO -LM -zh -Rn -Rn -zh -Oe -mm -zh -zh -KA -zh -zh -Rn -sz -Rn -zh -mm -zh -Rn -Rn -Rn -Rn -Rn -zh -Oe -mm -sz -sz -zh -Oe -mm -Rn -zh -mm -mm -zh -zh -Oe -mm -Rn -zh -mm -mm -zh -mm -Rn -mm -mm -mm -zh -mm -Rn -Rn -Oe -Rn -zh -zh -zh -aT -"} -(58,1,2) = {" -aT -Fa -Fa -Fa -Ew -Xw -gV -jF -dA -jF -jF -dU -Xw -Dy -Dy -Xw -el -bo -Dy -DQ -kY -An -kY -kY -kY -gz -Hd -gz -mR -gn -gn -fy -eR -eS -fy -fy -fy -eR -fy -eQ -JP -JP -JP -JP -JP -JP -OZ -gn -gn -Bk -hL -by -Ig -Ig -Ig -Ig -qw -kZ -oW -oW -oW -oW -oW -Ig -uw -Jg -fr -YS -ae -uw -fO -gn -gn -fO -lz -gl -gl -gl -gl -gl -Va -gl -gl -gl -gl -gl -nD -nA -dT -Fs -Fs -Fi -cb -eQ -fO -fO -LM -zh -zh -Rn -Rn -zh -Oe -mm -Rn -Rn -zh -Oe -mm -zh -Rn -Rn -Rn -zh -zh -zh -Rn -Rn -zh -Oe -mm -Rn -sz -sz -zh -mm -zh -zh -zh -Rn -zh -mm -Rn -mm -mm -Rn -mm -Oe -mm -mm -zh -mm -Rn -mm -mm -mm -KA -mm -zh -zh -Oe -mm -zh -mm -aT -"} -(59,1,2) = {" -aT -Fa -Fa -Fa -Ew -Xw -dk -jF -jF -jF -jF -jF -Xw -Dy -Dy -Xw -VJ -Dy -Dy -jk -sJ -eL -eL -eL -eL -eL -sJ -gz -QC -gn -gn -fy -eR -eR -eR -eR -fy -eR -fy -eQ -JP -HI -HI -HI -HI -JP -ME -gn -gn -Bk -gr -hD -Ij -oW -oW -oW -oW -Ig -oW -oW -oW -oW -oW -Ig -jL -fr -yr -YS -QH -uw -fO -gn -gn -fO -lz -gl -il -Vc -gl -hW -il -gl -DL -jt -do -gl -cb -jb -cb -Fs -Fs -Fs -cb -eQ -fO -fO -LM -mm -mm -Oe -zh -Rn -zh -mm -zh -Rn -Rn -zh -Oe -mm -zh -Rn -Rn -zh -Oe -mm -zh -zh -KA -zh -zh -Rn -sz -sz -Rn -mm -mm -mm -zh -mm -Rn -mm -mm -mm -mm -Rn -Rn -mm -Rn -Rn -mm -Rn -Rn -Oe -mm -Rn -mm -Rn -Rn -zh -mm -zh -aT -aT -aT -"} -(60,1,2) = {" -aT -Fa -Fa -Fa -Ew -Xw -dl -cO -cO -cO -jF -jF -DO -Dy -Dy -vO -hz -Dy -BO -iA -EI -Zg -Ve -LX -LX -ov -Js -gz -mR -gn -gn -fO -fy -fy -eR -fy -fy -eR -fy -eQ -JP -PQ -La -KC -Ug -JP -ME -gn -gn -Bk -gw -gL -gW -he -oW -oW -oW -Ig -Ig -Ig -Ig -Ig -Ig -ue -uw -ae -ae -kk -kx -uw -fO -gn -gn -Sw -lz -gl -Qu -il -gl -eY -il -Fs -Fs -Fs -vN -gl -IO -Fs -Fs -TT -Fs -Fs -cb -eQ -fO -fO -LM -zh -zh -Rn -zh -Oe -Rn -Rn -mm -Oe -zh -Rn -zh -mm -zh -zh -Rn -Rn -zh -Oe -mm -zh -mm -zh -Rn -Rn -sz -sz -mm -mm -zh -mm -Rn -Rn -mm -mm -mm -Oe -mm -mm -Rn -zh -Oe -Rn -Rn -mm -mm -mm -mm -Rn -mm -Rn -mm -mm -Rn -mm -aT -aT -aT -"} -(61,1,2) = {" -aT -Fa -Fa -Fa -Ew -cW -jF -cO -dB -dF -jF -jF -Xw -hz -Dy -Xw -Vk -Vk -Vk -jk -sJ -xQ -ZQ -ZQ -MX -fF -Js -gz -mR -gn -gn -fy -eR -fy -eR -fy -eR -eR -fy -eQ -JP -Xm -Pq -Ss -Kh -JP -ME -gn -gn -Bk -gB -gM -gX -hg -bY -oW -oW -jG -Kp -gG -gG -gG -Kp -Bk -uw -Xl -uw -uw -uw -Ff -fO -gn -gn -fO -lz -gl -il -il -gl -wm -il -Fs -Fs -Yb -oX -gl -Wk -Fs -SF -aj -aj -aj -cb -eQ -fO -fO -LM -zh -KA -zh -zh -Rn -Oe -Rn -mm -Rn -zh -Oe -Rn -Rn -mm -mm -Oe -zh -Rn -zh -mm -Rn -Rn -zh -zh -zh -sz -sz -Rn -Oe -Rn -Oe -zh -mm -zh -zh -mm -zh -mm -KA -Rn -zh -zh -mm -Rn -Rn -mm -mm -mm -zh -mm -Oe -mm -Rn -Rn -aT -aT -aT -aT -"} -(62,1,2) = {" -aT -Fa -Fa -Fa -Ew -cW -jF -cO -cO -cO -jF -cS -iA -cO -cO -Xw -gH -sW -Jr -jk -sJ -lM -lM -lM -lM -lM -sJ -gz -YN -gn -gn -fy -eR -fy -fy -fy -fy -eR -fy -eQ -JP -Ka -Ka -Ka -Ka -JP -ME -gn -gn -Bk -Ig -Kv -hf -Ig -Ig -Ig -Ig -ue -oW -gG -PX -gG -js -Bk -jN -KB -KB -uw -kz -oM -gn -gn -gn -fO -lz -gl -wm -il -Zm -il -il -Fs -gl -gl -gl -gl -Fy -Fy -Fy -ro -aj -aj -cb -eQ -fO -fO -LM -zh -mm -zh -Rn -Rn -Oe -mm -Rn -zh -zh -Rn -Oe -Rn -zh -zh -Rn -zh -Oe -Rn -Rn -Rn -Rn -zh -Oe -mm -sz -sz -Rn -Rn -Rn -Oe -Rn -mm -zh -Oe -mm -Rn -zh -mm -mm -zh -mm -Oe -mm -Rn -mm -mm -Rn -mm -Oe -mm -Rn -mm -mm -aT -aT -aT -aT -"} -(63,1,2) = {" -aT -Fa -Fa -Fa -bS -Xw -dm -jF -jF -jF -jF -iA -Xw -cO -cO -br -tc -bI -hB -tA -hZ -sJ -sJ -sJ -sJ -sJ -sJ -gz -mR -gn -gn -fy -eR -eR -eR -eR -eR -eR -fy -eQ -JP -JP -JP -JP -JP -JP -ME -gn -gn -fT -Rm -Rm -Rm -Rm -Rm -Rm -Rm -Rm -oW -gG -gG -gG -jw -Bk -KB -Nf -Nf -uw -uw -Ff -fO -gn -gn -fO -lz -gl -lQ -Hm -gl -il -il -ir -RK -Ob -Fs -gl -gl -Fy -wM -gt -uq -YM -cb -eQ -fO -fO -LM -Rn -Rn -zh -zh -zh -mm -Rn -Rn -zh -Rn -Rn -Oe -mm -zh -KA -zh -zh -Rn -Oe -Rn -zh -Oe -mm -sz -sz -sz -Rn -Rn -Oe -Rn -Oe -mm -mm -zh -mm -zh -zh -zh -Rn -mm -mm -Rn -mm -mm -mm -mm -mm -Rn -Rn -mm -mm -mm -Rn -mm -aT -aT -aT -aT -"} -(64,1,2) = {" -aT -Fa -Fa -Fa -bS -Xw -dn -jF -jF -jF -dN -iA -iA -cO -cO -Xw -gH -sW -ZP -jk -sJ -eL -eL -eL -eL -eL -sJ -gz -YN -gn -gn -fy -fy -rb -fy -jm -fy -fy -fy -eQ -Ge -JP -JP -JP -HI -JP -ME -gn -gn -Bk -ue -Ig -Ig -Ig -Ig -Ig -Kp -Rm -Kp -OB -OB -OB -Kp -Bk -KB -Nf -Nf -Nf -kB -uw -fO -gn -gn -fO -lz -gl -gl -gl -gl -gl -gl -gl -gl -gl -DD -gl -cb -cb -cb -cb -cb -cb -cb -eQ -fO -fO -LM -Rn -Rn -zh -Oe -mm -mm -Rn -mm -zh -zh -zh -mm -Rn -zh -mm -zh -Rn -Rn -Oe -mm -Rn -Oe -mm -sz -sz -Rn -Rn -Oe -Rn -Rn -Oe -zh -zh -Rn -mm -mm -mm -zh -mm -Rn -Rn -Rn -zh -mm -mm -Oe -mm -mm -Rn -zh -mm -mm -aT -aT -aT -aT -aT -aT -"} -(65,1,2) = {" -aT -Fa -Fa -Fa -bS -Xw -dn -jF -dE -dL -dO -iA -at -cO -cO -Xw -Vk -Vk -Vk -AK -sJ -Zg -tn -LX -LX -ov -Js -gz -mR -gn -gn -fy -fy -fy -fy -jm -jm -fy -fy -eQ -JP -JP -JP -vT -Vv -JP -ME -gn -gn -Bk -Ig -gN -gG -gG -gG -Ig -gG -Rm -OB -PX -PX -PX -OB -Bk -jO -Nf -Nf -WB -kC -uw -fO -gn -gn -fO -lz -lz -lz -lz -lz -lz -lz -lz -lz -gl -gl -gl -lz -lz -lz -lz -lz -lz -lz -eQ -fO -fO -LM -Rn -mm -Rn -Rn -mm -mm -Oe -Rn -mm -zh -mm -mm -Rn -Rn -Rn -zh -zh -zh -mm -Rn -Rn -Rn -mm -sz -sz -Rn -Rn -Rn -Rn -Oe -Oe -zh -Oe -mm -mm -zh -mm -Rn -Rn -Oe -Rn -Rn -zh -zh -mm -zh -mm -zh -Rn -zh -mm -aT -aT -aT -aT -aT -aT -aT -"} -(66,1,2) = {" -aT -Fa -Fa -Fa -bS -Xw -cS -cS -cS -cS -cS -iA -DX -cO -cO -Xw -hz -Dy -QY -iA -EI -Uy -ZQ -ZQ -Mo -fF -Js -gz -YN -gn -gn -fy -jm -jm -fy -fy -fy -fy -fy -eQ -ME -ZJ -JP -JP -Ka -NM -ME -gn -gn -Bk -Bk -gO -PX -PX -gG -Ig -Kp -Rm -Kp -PX -PX -PX -OB -Bk -KB -Nf -WB -Nf -KB -uw -fO -gn -gn -gn -gn -gn -gn -lV -gn -Ng -sg -gn -fO -fO -fO -gn -gn -gn -jc -RI -RI -RI -RI -eQ -fO -fO -LM -Rn -Rn -Rn -zh -Oe -mm -mm -Rn -Oe -mm -mm -mm -Oe -Rn -Rn -zh -Oe -mm -mm -Rn -Rn -Rn -mm -sz -sz -Rn -Rn -Rn -Rn -Rn -Oe -zh -mm -zh -zh -zh -Oe -mm -Rn -zh -mm -mm -zh -Oe -mm -Rn -zh -mm -mm -zh -aT -aT -aT -aT -aT -aT -aT -aT -"} -(67,1,2) = {" -aT -Fa -Fa -Fa -bS -Xw -LI -qc -qc -qc -LI -iA -mR -xU -cO -Xw -Dy -Dy -Dy -en -sJ -lM -lM -lM -lM -lM -sJ -gz -mR -gn -gn -gn -gn -gn -gn -gn -gn -fy -fy -eQ -ME -ME -ME -ME -ME -ME -ME -gn -gn -gn -Bk -gP -PX -PX -gG -Ig -gG -Rm -OB -PX -PX -PX -OB -Bk -KB -Nf -Nf -WB -KB -uw -fO -gn -gn -fO -ME -ME -ME -ME -ME -ME -ME -ME -fO -sn -mL -mL -mL -mL -mL -mL -mL -mL -sn -eQ -fO -fO -LM -Rn -Rn -mm -Rn -Rn -mm -mm -Oe -zh -mm -Rn -Rn -Rn -Rn -mm -Rn -Rn -mm -mm -Oe -zh -Rn -mm -sz -sz -mm -Rn -Rn -Rn -Rn -mm -Rn -mm -mm -mm -zh -mm -zh -zh -zh -Rn -mm -mm -mm -zh -zh -zh -Rn -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -"} -(68,1,2) = {" -aT -Fa -Fa -Fa -bS -Xw -Dy -Dy -Dy -Dy -qc -mR -mR -cO -cO -wE -cO -cO -Dy -DQ -kY -kY -kY -Dy -Dy -Dy -gz -gz -QC -gn -gn -gn -gn -gn -gn -gn -gn -gn -fy -sY -gn -gn -sY -RI -fn -fO -JR -gn -gn -gn -Bk -gQ -gG -gG -gG -Ig -Kp -Rm -Kp -PX -PX -PX -OB -Bk -KB -WB -Nf -WB -kD -uw -fO -gn -gn -fO -ME -lJ -Pw -Pw -Pw -Pw -Pw -ME -gn -mL -nb -ng -ng -kP -kP -kP -oa -sn -mL -eQ -fO -fO -LM -Rn -mm -sz -zh -zh -Rn -zh -Oe -Rn -Rn -Rn -Rn -Oe -Rn -Rn -Rn -Rn -zh -zh -Rn -zh -Rn -mm -sz -sz -mm -Rn -Rn -Rn -Rn -Oe -mm -mm -zh -mm -Rn -mm -mm -mm -zh -mm -Rn -Rn -Oe -mm -mm -zh -mm -Rn -Rn -aT -zh -zh -zh -zh -zh -aT -aT -"} -(69,1,2) = {" -aT -Fa -Fa -Fa -bS -Xw -ZB -NZ -Dy -Dy -qc -mR -mR -uJ -cO -dC -cO -cO -Dy -tx -vP -vP -vP -yY -yY -yY -gz -gz -mR -gn -gn -gn -gn -gn -gn -gn -gn -gn -fy -eQ -gn -gn -sY -RI -RI -RI -fO -fO -gn -gn -Bk -ue -Ig -oW -Sq -Ig -gG -Rm -OB -PX -PX -PX -OB -Bk -uw -uw -Xl -uw -uw -uw -En -gn -gn -ls -ME -ME -Pw -fQ -fQ -fQ -Pw -ME -gn -mL -ne -ng -ng -kP -kP -kP -kP -kP -mL -eQ -fO -fO -LM -Rn -Oe -mm -zh -KA -zh -zh -Rn -Oe -Rn -Rn -Oe -Rn -Rn -Oe -Oe -Rn -zh -KA -zh -zh -Rn -mm -sz -sz -Rn -Rn -Oe -Oe -Rn -Rn -Oe -mm -mm -zh -mm -KA -zh -mm -Rn -Rn -Oe -Rn -mm -zh -mm -Rn -Rn -Oe -Rn -zh -zh -Oe -zh -zh -KA -zh -aT -"} -(70,1,2) = {" -aT -Fa -Fa -Fa -bS -Xw -eh -Dy -Dy -Dy -qc -mR -mR -cO -cO -Jk -Sv -cO -Dy -ya -Zz -DU -eB -uc -CK -ZW -zN -gz -mR -jm -fy -fy -jm -fy -gn -gn -gn -gn -fy -eQ -gn -gn -eQ -RI -RI -RI -RI -fO -gn -gn -Bk -Bk -Bk -hi -Bk -ue -Kp -Rm -Kp -OB -OB -OB -Kp -Bk -uw -KB -KB -KB -KB -uw -fO -gn -gn -fO -ME -ME -Pw -fQ -fQ -fQ -Pw -ME -gn -mL -nf -ng -sn -sn -nO -sn -mL -nO -mL -eQ -fO -fO -LM -mm -Rn -Oe -zh -mm -zh -Rn -Rn -Oe -mm -Rn -Oe -Rn -Rn -Oe -Rn -Rn -zh -mm -zh -Rn -Rn -mm -sz -sz -Rn -Rn -Rn -Oe -Oe -mm -mm -mm -Rn -Oe -mm -Oe -Rn -Rn -Oe -sz -sz -Rn -mm -mm -KA -zh -zh -mm -mm -Rn -Rn -Rn -Rn -zh -mm -mm -aT -"} -(71,1,2) = {" -aT -Fa -Fa -Fa -bS -iA -cS -cS -cS -cS -cS -cS -mR -mR -hF -vO -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -fy -fy -rb -fy -jm -fy -gn -gn -gn -oJ -bS -qc -qc -bS -bS -RI -RI -RI -fO -gn -gn -gn -Bk -Bk -hk -Bk -Bk -Bk -ps -Bk -Bk -Bk -hk -Bk -Bk -uw -Nf -Nf -Nf -KB -uw -dS -gn -gn -lt -fQ -ME -Pw -fQ -fQ -fQ -Pw -ME -gn -oI -ng -ng -mL -nI -kP -RD -kP -kP -mL -eQ -fO -fO -LM -KA -Rn -mm -Rn -Rn -zh -zh -zh -mm -Rn -Rn -Rn -Oe -Oe -Rn -mm -zh -Rn -Rn -zh -zh -zh -mm -sz -sz -zh -zh -Rn -Rn -Rn -mm -Rn -Oe -zh -Rn -Rn -mm -mm -mm -Rn -sz -sz -Rn -Oe -Rn -Rn -Oe -Oe -Oe -Oe -Rn -Rn -Rn -Rn -zh -zh -aT -aT -"} -(72,1,2) = {" -aT -Fa -Fa -Fa -bS -Xw -dp -Ea -MJ -Vk -dP -Ec -bg -Ex -Vk -aw -FN -iA -cS -cS -cS -cS -cS -cS -cS -cS -iA -jm -fy -fy -jm -fy -jm -jm -fy -gn -gn -gn -bS -bS -qc -JK -JK -bS -Ew -RI -RI -KD -gn -gn -gn -Sw -gn -gn -hv -sY -wq -fO -wq -sY -UN -gn -JR -sY -uw -Nf -kj -kl -Nf -uw -fO -gn -gn -fO -ME -ME -Pw -fQ -fQ -fQ -Pw -ME -gn -mL -nl -ng -mL -nK -kP -RD -nK -kP -mL -eQ -fO -fO -LM -mm -Rn -Rn -Rn -Rn -zh -Oe -mm -mm -Rn -Rn -mm -Rn -mm -Rn -Oe -mm -Rn -Rn -zh -Oe -mm -Ee -sz -sz -mm -zh -zh -Rn -Rn -zh -zh -Rn -Rn -mm -Oe -mm -Oe -Rn -mm -sz -sz -zh -zh -mm -Oe -Rn -Rn -Rn -Rn -Rn -zh -zh -zh -zh -zh -aT -aT -"} -(73,1,2) = {" -aT -Fa -Fa -Fa -bS -Xw -dq -kY -MJ -qB -Xo -qB -Xo -qB -Xo -qB -Xo -wE -DA -Vk -ey -eA -ay -Vk -Vk -TQ -Xw -Nd -Nd -Nd -Nd -Nd -Nd -Nd -Nd -gn -gn -gn -bS -qc -JK -JK -JK -qc -yZ -RI -RI -fO -fO -gn -gn -fO -gn -gn -hv -sY -wq -ip -wq -sY -UN -gn -gn -sY -uw -Nf -Nf -Nf -Nf -iq -fO -gn -gn -fO -ME -Pw -Pw -Pw -Pw -Pw -Tc -ME -fO -mL -nm -ng -mL -nL -kP -RD -ob -od -mL -eQ -fO -fO -LM -Rn -Rn -mm -Rn -mm -Rn -Rn -mm -mm -Oe -Rn -mm -mm -Rn -zh -zh -mm -Rn -Rn -mm -Rn -mm -mm -sz -sz -mm -mm -mm -mm -mm -mm -Rn -Rn -Rn -Rn -mm -mm -mm -mm -Oe -sz -sz -Oe -zh -zh -zh -zh -zh -mm -zh -zh -zh -zh -zh -Ee -mm -EP -yf -"} -(74,1,2) = {" -aT -Fa -Fa -Fa -bS -Xw -dt -kY -MJ -dM -qH -iA -Ue -qH -iA -ek -qH -wE -Vk -mR -zE -ZP -Vk -aw -Vk -Vk -Xw -Zs -nd -fy -nd -fy -fy -nd -fy -gn -gn -gn -bS -bS -bS -bS -bS -bS -Ew -fA -RI -RI -fO -gn -gn -fO -gn -gn -hv -sY -wq -fO -wq -sY -UN -gn -gn -Dm -uw -uw -uw -uw -uw -uw -lY -gn -gn -fO -ME -ME -ME -ME -ME -ME -ME -iY -gn -sn -mL -nw -mL -mL -oI -mL -mL -mL -sn -eQ -fO -fO -LM -JT -mm -mm -sz -sz -sz -mm -Rn -Rn -Rn -mm -mm -zh -zh -mm -mm -mm -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -EP -yf -"} -(75,1,2) = {" -aT -Fa -Fa -Fa -bS -Xw -UE -Hi -TV -wR -Hi -cy -Hi -Hi -cy -Hi -Hi -mQ -Hi -rN -Hi -Hi -Hi -Hi -Hi -Hi -Jt -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -bS -qc -fg -qc -qc -qc -fq -fB -fH -fB -fO -gn -gn -gn -gn -gn -gn -fO -fO -fO -fO -fO -gn -gn -gn -gn -ld -fc -fc -RI -jj -gn -gn -gn -gn -gn -gn -Ku -gn -gn -JR -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -ld -fx -eQ -eQ -eQ -LM -WP -mm -mm -sz -sz -mm -mm -mm -Ee -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -EP -yf -"} -(76,1,2) = {" -aT -Fa -Fa -Fa -bS -Xw -dw -jV -Fe -hq -zM -jV -jV -Bw -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -jV -iA -eH -fO -fO -fO -YG -fO -fO -Uf -gn -gn -gn -fb -qc -qc -qc -qc -qc -qc -fB -fI -fB -fO -FV -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -om -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -ls -gn -NW -og -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -mm -mm -zh -zh -mm -mm -zh -zh -zh -zh -zh -mm -EL -mm -Ee -mm -mm -mm -zh -zh -zh -mm -mm -mm -Oe -Rn -mm -mm -zh -zh -zh -zh -zh -zh -mm -EP -yf -"} -(77,1,2) = {" -aT -Fa -Fa -Fa -bS -Xw -rH -Wx -Xz -Al -Wx -nV -Wx -Wx -nV -Wx -Wx -Wx -Wx -oT -Wx -Wx -Wx -Wx -Wx -Wx -Jt -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -bS -qc -fh -qc -qc -qc -qc -fB -fH -fB -fO -gn -gn -fO -fO -fO -fO -gn -gn -is -gn -gn -gn -gn -gn -gn -MR -fc -fc -fc -gn -fc -gn -gn -MR -gn -lG -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -MR -gn -gn -gn -gn -gn -gn -ls -gn -gn -og -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -EM -sz -sz -Oe -mm -zh -zh -mm -mm -mm -zh -zh -zh -zh -Oe -zh -mm -mm -mm -mm -mm -zh -zh -mm -Rn -Rn -Oe -Rn -Rn -Rn -zh -zh -zh -Rn -Rn -Oe -Rn -zh -zh -aT -aT -"} -(78,1,2) = {" -aT -Fa -Fa -Fa -bS -cZ -se -kY -YW -hS -qH -iA -JO -qH -iA -aS -qH -wE -gS -mR -gS -gS -gS -Ik -gS -gS -Xw -Ot -fy -fy -fy -fy -nd -fy -fy -gn -gn -gn -bS -bS -bS -yZ -yZ -bS -Ew -fA -RI -RI -fO -gn -gn -fO -Zv -Zv -gs -gn -ME -ME -nk -ME -Qx -ji -gn -gn -jQ -jS -jS -jS -kE -jS -jS -jS -jS -gn -EV -iy -PL -PL -EV -EV -vW -HD -vW -Rr -vW -xL -xL -xL -xL -nX -Jz -gn -gn -ls -gn -gn -og -sz -sz -sz -sz -sz -sz -sz -mm -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -sz -Oe -zh -zh -zh -zh -mm -KA -mm -zh -Oe -zh -zh -zh -zh -mm -mm -eO -mm -mm -Rn -Rn -Oe -Rn -Rn -Rn -zh -Oe -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -mm -aT -"} -(79,1,2) = {" -aT -Fa -Fa -Fa -bS -cS -dx -kY -YW -Bb -hS -Bb -hS -Bb -hS -Bb -hS -dD -cO -cO -gS -gS -gS -gS -cO -cO -Xw -Nd -Nd -Nd -Nd -Nd -Nd -Nd -Nd -gn -gn -gn -bS -mR -Qm -JK -JK -JK -yZ -RI -RI -fO -fO -gn -gn -fO -Ta -VQ -eD -gn -ME -iu -UT -UT -ME -KL -gn -gn -jS -jU -kb -FE -kb -kb -kf -le -jS -fO -Go -Qq -Dz -Dz -rG -Go -mi -Qq -Qq -HX -HX -nz -Qq -ju -ec -xL -fO -ld -eM -eQ -eQ -eQ -LM -oe -mm -mm -Rn -Rn -mm -mm -mm -mm -mm -Rn -Rn -Rn -Rn -mm -Ee -sz -sz -mm -mm -zh -zh -zh -zh -mm -mm -mm -mm -mm -zh -zh -Oe -zh -zh -mm -mm -mm -mm -zh -Rn -Rn -Rn -zh -zh -zh -zh -zh -zh -aT -aT -aT -zh -zh -zh -zh -KA -zh -aT -"} -(80,1,2) = {" -aT -Fa -Fa -Fa -bS -cS -Ax -Eb -YW -TO -Ik -Ed -gS -Ik -gS -Ik -Na -Xw -kS -eo -gS -gS -cj -gS -cO -cO -Xw -fy -sY -sY -sY -sY -sY -sY -fy -gn -gn -gn -bS -mR -pu -JK -fm -OW -Ew -RI -RI -wY -gn -gn -gn -fO -Zv -Zv -gs -hI -Qx -sF -UT -UT -nk -gn -gn -gn -jS -kb -kb -kb -kb -kb -kb -kb -jS -gn -Go -nH -RB -Dz -fJ -Go -Qq -Qq -Qq -HX -nn -Go -Qq -Qq -fJ -xL -fO -ld -RI -eQ -fO -fO -LM -Re -mm -Rn -Rn -Rn -Rn -mm -zh -mm -mm -mm -Rn -Oe -Rn -Rn -mm -sz -sz -Oe -zh -zh -Oe -zh -zh -mm -Rn -Rn -Rn -mm -Oe -mm -zh -zh -mm -mm -mm -mm -mm -zh -zh -zh -zh -zh -zh -Oe -zh -zh -aT -aT -aT -aT -aT -zh -zh -zh -zh -aT -aT -"} -(81,1,2) = {" -aT -Fa -Fa -vO -cS -nS -ja -qQ -cS -cS -cS -cS -cS -nS -Tg -cS -cS -vO -iA -cS -cS -cS -cS -iA -tm -iA -iA -fy -fy -fy -fy -fy -fy -wf -fy -gn -gn -gn -fy -mR -Bg -JK -JK -yZ -RI -RI -RI -fO -gn -gn -gn -fO -fO -fO -Jz -ME -Qx -iv -UT -iR -ME -CI -CI -CI -jS -kb -kb -kb -kG -kG -kG -lg -jS -gn -Go -fX -Dz -Dz -Qq -Go -ml -Qq -EV -HX -no -Go -Qq -Qq -Qq -xL -fO -ld -RI -eQ -lC -lC -LM -mm -Rn -Rn -Oe -mm -mm -Oe -zh -zh -Oe -zh -zh -zh -mm -Rn -Rn -sz -sz -zh -zh -zh -zh -zh -mm -Rn -Oe -Rn -Rn -Rn -mm -mm -Oe -Rn -Rn -Rn -mm -mm -mm -mm -zh -zh -Oe -zh -zh -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(82,1,2) = {" -aT -Fa -Fa -mR -cV -cO -cO -Dy -YW -aA -Lg -aA -Ql -wE -cO -kY -br -xU -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Xw -dz -fy -fy -rb -fy -fy -fy -wf -fy -gn -gn -gn -fy -mR -jF -jF -jF -OW -RI -RI -RI -fO -gn -gn -ME -ME -Qx -Qx -ME -ME -ME -ru -ru -ME -ME -RI -RI -RI -jS -kb -kb -kb -kI -kI -kI -lh -jS -gn -Go -lN -ai -wF -fD -Go -ni -cw -Qq -HX -np -Go -fj -Qq -Qq -xL -fO -ld -RI -eQ -SZ -lC -LM -mm -Rn -Rn -zh -zh -mm -mm -Oe -zh -zh -zh -zh -zh -zh -zh -Rn -sz -sz -mm -mm -zh -zh -zh -Rn -Rn -Rn -Rn -Rn -Rn -mm -mm -Rn -mm -Rn -Rn -mm -mm -mm -KA -zh -zh -zh -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(83,1,2) = {" -aT -Fa -Fa -mR -Nb -cO -cO -Dy -YW -Nz -sB -Vh -gS -Tg -cO -kY -Xw -cO -cO -cO -OK -cO -cO -cO -cO -Xw -eG -fy -fy -fy -fO -fy -fy -wf -fy -gn -gn -gn -fy -mR -fi -jF -pL -Ew -RI -RI -fO -fO -gn -MR -ME -ME -Qx -hl -OS -wb -gv -wb -wb -Qx -iY -RI -RI -RI -jS -kb -kb -kb -kI -kI -kI -lh -jS -gn -EV -xL -xL -xL -Tf -Go -ot -cw -fj -HX -nq -EV -vW -HD -EV -xL -fO -ld -fx -eQ -yP -lC -LM -Rn -Rn -zh -zh -zh -Oe -Rn -Oe -mm -zh -Oe -zh -zh -zh -Oe -Rn -sz -sz -mm -mm -KA -mm -Rn -Rn -Oe -Oe -Oe -Rn -Rn -mm -mm -mm -Rn -Rn -Rn -Rn -mm -mm -zh -zh -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(84,1,2) = {" -aT -Fa -Fa -mR -TP -cO -cO -Dy -YW -OE -yj -Ze -gS -Jk -cO -kY -wE -cO -vO -cS -cS -cS -vO -yZ -AR -qQ -iA -fy -fy -fO -sk -fO -fy -wf -fy -gn -gn -gn -fy -mR -mR -Tg -mR -Ew -RI -fO -fO -gn -gn -ME -ME -ME -ME -ab -wb -Jj -jf -wb -wb -wb -Fb -BC -BC -BC -jT -kc -kc -kc -kI -kI -kI -lh -jS -gn -Go -lP -Qq -Qq -fD -Go -VE -cw -Qq -HX -HX -nz -nP -nP -vW -Zs -gn -gn -gn -ST -yP -lC -LM -mm -zh -zh -zh -zh -mm -Rn -Rn -mm -mm -mm -zh -Oe -zh -mm -mm -sz -sz -mm -mm -mm -mm -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -KA -Rn -Rn -Rn -Oe -Rn -zh -mm -zh -zh -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(85,1,2) = {" -aT -Fa -Fa -mR -mK -Hr -gg -Dy -YW -SU -GZ -UF -gS -wE -cO -kY -vO -cO -Xw -YD -mO -Fm -Xw -cD -Dy -ez -Xw -fy -fy -fy -fO -fy -fy -gn -gn -gn -gn -gn -gn -fO -fO -fO -iZ -eQ -RI -fO -gn -gn -ME -ME -ME -ME -ME -Ns -wb -Qx -wb -wb -wb -nY -Fb -BC -BC -BC -jT -kc -kc -kc -kI -kI -kI -lh -lp -gn -Go -lK -sI -Qq -Qq -Go -fX -Qq -EV -mN -HX -vW -Lx -nP -vW -jm -gn -ld -eM -eQ -yP -lC -LM -zh -zh -zh -zh -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -mm -Oe -Rn -mm -sz -sz -mm -mm -mm -Rn -Rn -Rn -Rn -Rn -Oe -Rn -Rn -mm -mm -Rn -Oe -Oe -Rn -Rn -zh -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(86,1,2) = {" -aT -Fa -Fa -vO -cS -cS -cS -Tg -cS -nS -br -qQ -cS -br -xU -kY -wE -cO -Xw -qc -qc -nJ -Xw -Dy -Dy -Dy -Xw -fy -rb -fy -fy -rb -fy -wf -fy -gn -gn -gn -jm -eQ -eQ -eQ -eQ -eQ -RI -fO -gn -gn -ME -ME -ME -ME -ME -hn -wb -wb -wb -wb -wb -Qx -ME -fA -RI -RI -jS -kb -kb -km -kJ -kJ -kJ -ln -jS -gn -Go -sI -KT -Qq -Qq -UX -Qq -Qq -Qq -HX -HX -vW -lD -lD -vW -fy -gn -ld -fx -eQ -yP -lC -LM -zh -KA -zh -Rn -Rn -Oe -Rn -mm -Oe -Rn -Oe -Oe -Rn -Rn -Rn -mm -sz -sz -mm -mm -Rn -cR -Rn -Rn -Rn -Rn -Oe -Rn -Oe -mm -Oe -Rn -Rn -Oe -Rn -Rn -zh -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(87,1,2) = {" -aT -Fa -Fa -Fa -bS -da -da -dz -da -da -dd -dd -Xw -eb -cO -kY -wE -cO -Xw -tL -sA -Dy -ZS -Ox -Ox -Ox -Xw -fy -fy -fy -fy -fy -fy -wf -fy -gn -gn -gn -fy -eQ -gn -gn -sY -RI -RI -fO -gn -gn -ME -gd -gD -gT -ME -kw -wb -ku -wb -wb -iK -Qx -ME -RI -RI -RI -jS -kf -kb -kb -kb -kb -kb -kf -jS -gn -Go -Xb -lZ -CM -wV -Go -CM -Qq -Qq -mP -nr -vW -vW -vW -vW -fy -gn -gn -gn -eQ -yP -lC -LM -zh -zh -zh -Rn -Oe -Rn -zh -mm -Rn -Rn -mm -Rn -mm -Rn -Rn -mm -sz -sz -mm -mm -Rn -Rn -Rn -Rn -Oe -Rn -Rn -Rn -Rn -mm -mm -Rn -Rn -Rn -Oe -Rn -Rn -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(88,1,2) = {" -aT -Fa -Fa -Fa -bS -dd -da -dz -dz -dz -da -da -Xw -ee -cO -kY -Tg -cO -Xw -Dy -Dy -Dy -br -Vt -nt -Ox -Xw -wf -wf -wf -wf -wf -wf -sY -fy -gn -gn -gn -jm -eQ -gn -gn -sY -RI -RI -fO -gn -gn -ME -xm -ZE -Fc -ME -ME -Fc -ME -ic -ME -ME -ME -ME -Zk -Zk -Zk -jS -kg -kb -kb -kb -kb -kb -kf -jS -gn -EV -vW -vW -vW -vW -EV -vW -vW -vW -vW -vW -EV -vW -vW -EV -fy -gn -gn -gn -eQ -yP -lC -LM -zh -zh -zh -Rn -Rn -zh -mm -Rn -Rn -mm -Oe -Rn -mm -Oe -Rn -mm -sz -sz -mm -mm -Rn -Oe -Rn -Rn -Rn -Oe -Rn -Oe -Rn -mm -Oe -Rn -Oe -Rn -Rn -Rn -Rn -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(89,1,2) = {" -aT -Fa -Fa -Fa -bS -dd -CH -dz -CJ -dz -da -dd -Xw -dp -Dy -kY -Xw -cO -Xw -vd -hj -Yt -br -CE -IT -Ox -Xw -jm -fy -fy -fy -fy -gn -gn -gn -gn -gn -gn -fy -eQ -gn -gn -sY -RI -RI -fO -gn -gn -ME -gK -ZE -Fc -Fc -Fc -Fc -hJ -ME -Fc -iL -ME -ME -gn -gn -gn -jS -jS -kb -kn -kL -kL -kf -kf -jS -gn -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -fO -fO -gn -gn -gn -gn -gn -gn -eQ -yP -lC -LM -zh -zh -zh -zh -zh -zh -Rn -Rn -Rn -zh -zh -Rn -zh -Oe -Rn -mm -sz -sz -Rn -mm -Rn -Oe -Oe -Rn -Rn -Rn -Oe -Rn -Rn -mm -zh -Rn -Rn -Rn -Rn -Rn -Oe -Rn -Oe -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(90,1,2) = {" -aT -Fa -Fa -Fa -bS -dd -CH -dz -dz -dz -da -dd -iA -cS -Tg -iA -cS -cS -vO -vO -cS -cS -vO -Ox -uu -Ox -Xw -oG -jm -jm -fy -gn -gn -gn -gn -gn -gn -tu -fy -eQ -gn -gn -sY -RI -RI -fO -gn -gn -ME -ME -ME -ME -ME -ME -pw -ME -ME -ME -ME -ME -fO -gn -gn -gn -Sw -jS -jS -jS -jS -jS -jS -jS -jS -fO -eQ -wq -nF -nF -nF -wq -lY -fO -fO -fO -eQ -fO -gn -gn -gn -gn -gn -gn -gn -eQ -yP -lC -LM -mm -Rn -Rn -zh -zh -zh -Oe -Oe -Rn -zh -KA -zh -zh -Oe -Rn -mm -sz -sz -Rn -mm -Rn -Oe -Oe -Rn -Rn -Rn -Rn -Rn -mm -zh -zh -Rn -Rn -Rn -Oe -Rn -Rn -Rn -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(91,1,2) = {" -aT -Fa -Fa -Fa -bS -dd -da -dz -dz -dz -da -dd -Xw -Dy -kY -kY -em -qI -qI -Xw -Dy -TL -Xw -et -Wa -Ox -Xw -jm -jm -fy -gn -gn -fO -hw -hw -hw -eX -hw -hw -hw -hw -hw -sY -RI -RI -fO -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -eQ -lf -on -lf -lf -lf -lf -lf -on -eQ -nF -jH -Zv -Zv -nF -gn -gn -gn -fO -eQ -gn -gn -eQ -eQ -eQ -Ki -fO -Jz -eQ -yP -lC -LM -mm -Rn -Rn -zh -zh -Rn -Oe -Rn -Rn -zh -mm -zh -Oe -Rn -Rn -Rn -sz -sz -mm -mm -Rn -Rn -Rn -Rn -Rn -xF -Rn -Rn -mm -zh -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(92,1,2) = {" -aT -Fa -Fa -Fa -bS -CG -da -da -da -da -da -da -br -hz -kY -kY -em -qI -qI -Xw -Dy -Ir -xo -Ox -Ox -Ox -Xw -fy -fy -fy -gn -gn -hw -hw -hw -bL -mM -qo -qo -fe -hw -hw -sY -RI -RI -fO -gn -gn -sY -sY -Jz -fO -aE -aE -eN -PE -eN -sY -sY -sY -gn -gn -gn -gn -gn -eQ -lf -lf -Mm -lf -MW -lf -nd -lf -eQ -nF -Zv -Zv -Zv -nF -gn -gn -gn -JR -eQ -gn -gn -eQ -eQ -eQ -eQ -eQ -eQ -eQ -yP -lC -LM -Rn -Rn -Rn -zh -zh -Rn -mm -Rn -zh -zh -mm -Rn -Oe -Oe -Rn -Rn -sz -sz -mm -Oe -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -zh -zh -Rn -mm -Rn -Rn -Rn -Rn -Rn -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(93,1,2) = {" -aT -Fa -Fa -Fa -bS -da -da -da -da -da -da -da -Xw -eh -kY -kY -em -qI -qI -Xw -Dy -GK -Xw -zy -dc -zy -Xw -fy -fy -fy -gn -gn -hw -hw -bL -bL -mM -qo -qo -Gm -fk -hw -sY -RI -RI -fO -gn -gn -tO -tO -tO -tO -tO -tO -tO -yn -tO -tO -tO -sY -fO -gn -gn -gn -fO -eQ -Ms -lf -lf -oL -fy -lf -fy -lf -hT -nF -MB -Zv -To -nF -gn -gn -gn -gn -gn -gn -gn -eJ -eQ -eQ -eQ -eQ -eQ -eQ -lC -lC -LM -Rn -xF -zh -zh -Oe -Rn -mm -Rn -zh -zh -mm -Rn -Rn -Rn -Rn -Oe -sz -sz -Rn -mm -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -mm -mm -mm -Rn -Rn -Oe -Rn -mm -mm -Oe -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(94,1,2) = {" -aT -Fa -Fa -Fa -bS -dh -dh -dh -dh -dh -dh -dh -iA -cS -cS -cS -cS -cS -cS -vO -cS -cS -vO -cS -cS -cS -vO -fy -fy -fy -gn -gn -hw -bL -fW -rX -Gn -mM -qo -Gm -qo -qo -eQ -RI -RI -fO -gn -gn -tO -Dq -Dq -tO -ao -Dq -SW -GY -Dq -an -tO -sY -iZ -fE -gn -gn -fO -eQ -uP -jm -lf -jm -fy -on -lf -hT -hT -wq -nF -Tj -nF -wq -KL -gn -gn -gn -gn -gn -gn -gn -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -LM -Rn -Rn -zh -zh -Oe -Rn -mm -Rn -zh -zh -zh -Rn -Oe -Oe -Rn -Rn -sz -sz -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Oe -Rn -mm -zh -zh -zh -zh -zh -Rn -Rn -mm -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(95,1,2) = {" -aT -Fa -Fa -Fa -eQ -fy -fy -jm -fy -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -hw -bL -bL -bL -ed -bL -mM -Gm -qo -Gp -eQ -RI -RI -fO -gn -gn -tO -HH -Dq -yn -GY -GY -fa -GY -Dq -ky -tO -eQ -wX -wX -wX -gn -fO -eQ -nc -jm -hT -hT -dW -lf -on -hT -hT -fO -fO -fO -gn -JR -gn -gn -MK -gn -gn -gn -gn -gn -jm -jm -jm -eQ -eQ -eQ -RI -RI -zh -mm -Rn -Rn -zh -zh -Oe -Rn -Oe -zh -zh -zh -zh -Rn -Rn -Oe -mm -sz -sz -mm -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -mm -mm -mm -mm -mm -Rn -Rn -mm -mm -mm -Oe -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(96,1,2) = {" -aT -Fa -Fa -Fa -eQ -fy -ie -fy -jm -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -hw -bL -bL -bL -bL -bL -fd -Gm -qo -FQ -eQ -RI -RI -fO -gn -gn -tO -AJ -GY -tD -gY -GY -aR -GY -Dq -Dq -tO -eQ -wX -wX -KL -gn -fO -eQ -jm -hT -hT -hT -hT -hT -hT -hT -eQ -LH -fO -fO -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -jm -Dg -Dg -jm -eQ -eQ -RI -RI -zh -zh -Oe -Rn -zh -Oe -zh -Rn -mm -zh -zh -zh -zh -Rn -Oe -Rn -mm -sz -sz -Oe -mm -Rn -Rn -Rn -Rn -mm -Rn -Rn -mm -zh -zh -zh -zh -zh -Rn -zh -mm -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(97,1,2) = {" -aT -Fa -Fa -Fa -eQ -fy -fy -ox -fy -fy -fy -fy -UB -fy -fy -fy -fy -fy -fy -fy -fy -fy -fy -fy -UB -fy -fy -fy -fy -fy -fy -fy -hw -bL -bL -eV -eZ -Gn -Gn -Gm -qo -yd -eQ -RI -RI -fO -gn -gn -tO -VB -GY -tO -CF -RU -CZ -GY -bE -Hz -tO -eQ -wX -wX -om -gn -fO -eQ -jm -hT -dR -hT -hT -jm -xi -jm -eQ -Yz -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -oZ -jm -jm -jm -eQ -eQ -RI -RI -zh -zh -Rn -Rn -Rn -Oe -zh -Rn -zh -zh -zh -zh -zh -Rn -Rn -Rn -mm -sz -sz -mm -Rn -Rn -Rn -mm -Rn -mm -Rn -Rn -mm -mm -Rn -Rn -Rn -mm -mm -zh -mm -mm -Oe -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(98,1,2) = {" -aT -Fa -Fa -Fa -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -hw -bL -bL -eW -Gn -Gn -Gn -Gm -qo -hw -eQ -RI -RI -fO -gn -gn -tO -KP -Dq -tO -tO -tO -tO -yn -tO -tO -tO -eQ -wX -wX -gn -gn -fO -EW -UI -hT -hT -hT -lf -on -lf -on -eQ -GM -GM -gn -gn -MR -gn -gn -gn -gn -gn -gn -gn -gn -eQ -jm -jm -jm -eQ -eQ -RI -RI -zh -zh -Rn -Rn -Rn -zh -zh -Rn -zh -KA -zh -zh -zh -Rn -Rn -Rn -mm -sz -sz -Rn -Rn -Rn -Rn -mm -Rn -mm -Rn -Rn -mm -zh -zh -zh -zh -mm -mm -zh -mm -Rn -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(99,1,2) = {" -aT -Fa -Fa -Fa -eQ -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -hw -hw -bL -Gn -Gn -Gn -Gn -ff -hw -hw -eQ -RI -RI -fO -gn -gn -tO -AZ -Dq -Di -Dq -Dq -Dq -Dq -jp -tO -eQ -sY -wX -wX -Gi -gn -fO -hT -hT -hT -hT -hT -lf -lf -Ms -lf -eQ -RI -RI -nx -rp -rp -mn -rp -rp -Lu -rp -rp -gn -gn -mv -jm -Dg -jm -eQ -eQ -RI -RI -mm -mm -Rn -Rn -Rn -Oe -zh -Rn -zh -zh -zh -ol -zh -Rn -Oe -mm -mm -sz -sz -mm -Rn -Rn -Rn -mm -mm -mm -Rn -Rn -mm -mm -mm -mm -mm -mm -mm -zh -mm -Oe -mm -Oe -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(100,1,2) = {" -aT -Fa -Fa -Fa -eQ -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -gn -hw -hw -hw -uZ -kd -kd -hp -hw -hw -hw -sY -RI -RI -fO -gn -gn -tO -tO -tO -tO -Ab -GY -GY -GY -aD -tO -sY -sY -wX -wX -gn -gn -fO -hT -hT -hT -hT -hT -Ms -on -on -lf -EY -MM -Lj -Fg -rp -Rx -Fc -Sn -Ia -Fc -Fc -rp -gn -gn -eQ -jm -lf -Dg -eQ -eQ -RI -RI -mm -Rn -Oe -Rn -Oe -Rn -zh -zh -zh -zh -zh -zh -zh -Rn -Rn -Rn -mm -sz -sz -Oe -mm -Rn -Rn -mm -mm -mm -Rn -mm -mm -zh -zh -zh -zh -mm -zh -zh -Rn -Rn -zh -Oe -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(101,1,2) = {" -aT -sY -sY -sY -sY -eQ -eQ -eQ -eQ -eQ -eQ -eQ -sY -sY -sY -sY -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -sY -sY -sY -sY -sY -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -sY -sY -sY -sY -RI -RI -fO -gn -gn -sg -gn -tO -tO -wG -Nq -zC -wG -wG -tO -fz -fz -wX -wX -gn -gn -eQ -NK -eQ -NK -eQ -NK -eQ -NK -eQ -eQ -eQ -sY -gn -gn -rp -Rx -Fc -HV -Rx -Fc -FM -rp -gn -gn -eQ -jm -lf -jm -eQ -eQ -RI -RI -mm -Rn -Rn -Rn -Rn -Rn -zh -Oe -zh -zh -zh -zh -zh -zh -Rn -Oe -mm -sz -sz -mm -zh -Rn -mm -Rn -mm -mm -Rn -mm -mm -mm -mm -mm -mm -mm -zh -Rn -Oe -Rn -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(102,1,2) = {" -aT -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -gn -gn -Ng -gn -tO -tK -GY -GY -zC -Nq -Nq -tO -fz -fz -fO -fO -gn -gn -eQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Dm -gn -gn -rp -Rx -Fc -Fc -sn -Fc -sn -rp -eH -gn -eQ -Do -lf -DB -eQ -eQ -RI -RI -mm -Oe -Rn -Oe -Rn -Rn -zh -zh -zh -mm -zh -zh -KA -zh -zh -Rn -mm -sz -sz -mm -zh -Rn -Rn -mm -mm -mm -Rn -mm -mm -zh -zh -zh -zh -mm -zh -Rn -Rn -Rn -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(103,1,2) = {" -aT -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Jz -gn -gn -sg -gn -tO -tK -GY -GY -qF -Dq -Dq -tO -Tu -md -fO -Jz -gn -gn -NK -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -NK -gn -gn -rp -Rx -Fc -Fc -Fc -Fc -Rx -rp -gn -gn -eQ -jm -lf -jm -eQ -eQ -RI -RI -mm -Rn -Rn -Rn -Rn -Rn -zh -zh -mm -mm -zh -zh -zh -mm -zh -Rn -mm -sz -sz -zh -KA -Rn -mm -mm -Rn -mm -Rn -mm -mm -Rn -Rn -Rn -mm -mm -zh -Rn -Oe -Rn -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(104,1,2) = {" -Fa -Hl -Hl -Hl -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -lf -lf -lf -jm -jm -jm -jm -jm -jm -jm -jm -jm -lf -lf -lf -lf -lf -RI -RI -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -gn -gn -eQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -sY -gn -gn -Lu -Rx -Fc -Fc -Fc -Fc -Fc -Lu -gn -gn -eQ -Dg -jm -jm -eQ -eQ -RI -RI -mm -Rn -Rn -Rn -Oe -Rn -zh -zh -Rn -Rn -zh -zh -zh -eO -zh -mm -mm -sz -sz -zh -zh -Rn -mm -Rn -mm -Rn -Rn -mm -mm -Rn -mm -Rn -mm -mm -Rn -Oe -Rn -Rn -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(105,1,2) = {" -Fa -Hl -Hl -Hl -Hl -lf -lf -lf -jm -fy -fy -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -lf -lf -fy -fy -fy -lf -jm -jm -jm -jm -lf -jm -lf -lf -lf -lf -lf -lf -lf -RI -RI -tO -yM -fM -JX -tO -ID -zd -tO -Ne -mw -tO -wG -wG -tO -Ck -Ck -tO -of -wv -tO -gn -gn -NK -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -sY -fO -gn -rp -FG -Fc -Fc -XX -rp -KH -rp -gn -gn -eQ -jm -jm -Dg -eQ -eQ -RI -RI -mm -zh -mm -Rn -Rn -Rn -zh -eO -Rn -Rn -zh -zh -zh -zh -mm -mm -mm -sz -sz -zh -zh -Rn -mm -Rn -mm -Rn -Rn -mm -Rn -mm -WT -Rn -mm -mm -Rn -Oe -Oe -Rn -zh -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(106,1,2) = {" -Fa -Fa -Hl -Hl -lf -fy -jm -Hl -fy -fy -lf -lf -lf -lf -lf -lf -lf -jm -jm -jm -lf -jm -jm -fy -fy -fy -jm -jm -jm -lf -lf -lf -jm -lf -lf -lf -lf -lf -lf -lf -RI -RI -tO -tO -tO -JX -tO -MC -zd -WR -mw -mw -tO -wG -wG -tO -lk -lk -tO -um -mw -rL -gn -gn -eQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -gn -fO -gn -rp -Rx -FK -mS -FL -rp -FM -rp -gn -gn -eQ -jm -Ds -DC -eQ -eQ -RI -RI -mm -zh -Oe -Rn -zh -zh -zh -mm -Rn -Rn -zh -zh -zh -zh -mm -eO -mm -sz -sz -zh -zh -Rn -mm -Rn -mm -Rn -Rn -mm -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(107,1,2) = {" -Fa -Fa -Hl -jm -Hl -fy -fy -jm -jm -lf -lf -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -lf -lf -fy -rb -fy -lf -lf -Pd -jm -jm -jm -jm -lf -jm -lf -lf -lf -jm -jm -RI -RI -tO -ud -fM -JX -tO -TK -zd -SD -mw -mw -tO -Ib -Ib -tO -mw -mw -tO -mw -mw -tO -gn -gn -NK -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -YG -fO -gn -rp -rp -rp -rp -rp -rp -rp -rp -gn -gn -eQ -Do -jm -jm -eQ -eQ -RI -RI -mm -zh -mm -Rn -zh -KA -zh -mm -Rn -Oe -zh -zh -zh -zh -Rn -mm -mm -sz -sz -zh -zh -zh -mm -Rn -mm -Oe -Rn -mm -Rn -Rn -Rn -Rn -mm -Rn -Rn -Oe -Rn -Rn -Rn -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(108,1,2) = {" -Fa -Fa -Fa -jm -lf -jm -Hl -fy -fy -lf -jm -jm -sY -sY -sY -sY -sY -sY -sY -jm -lf -lf -lf -fy -fy -fy -lf -lf -Pd -jm -jm -jm -jm -fy -fy -jm -lf -lf -lf -jm -RI -RI -tO -tO -tO -Ou -tO -Pj -zd -SD -Tq -AA -zd -zd -zd -vY -lW -zd -zd -zd -mw -tO -eH -gn -eQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -gn -fO -gn -gn -eJ -eQ -eQ -eQ -jm -fy -wf -gn -gn -eQ -lf -jm -Dg -eQ -eQ -RI -RI -mm -zh -zh -Rn -mm -zh -zh -Rn -Rn -Rn -zh -zh -zh -KA -Rn -mm -mm -sz -sz -zh -eO -zh -mm -eO -zh -zh -zh -Oe -Rn -Oe -xF -Rn -eO -Rn -Rn -Rn -Rn -Rn -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(109,1,2) = {" -Fa -Fa -Fa -jm -Hl -lf -jm -fy -fy -lf -jm -jm -sY -ei -ei -fy -fy -jm -sY -jm -jm -lf -fy -fy -fy -fy -lf -lf -lf -jm -jm -jm -fP -jm -fy -fy -jm -lf -lf -jm -RI -RI -tO -Oa -mw -JX -tO -IC -zd -SD -AA -AA -zd -zd -zd -zd -zd -zd -zd -mw -Ne -tO -gn -gn -eQ -NK -eQ -NK -sY -eQ -NK -eQ -eQ -eQ -eQ -sY -eQ -eQ -eQ -eQ -eQ -fy -fy -fy -fy -wf -gn -gn -eQ -Dp -Dt -jm -eQ -eQ -RI -RI -mm -mm -zh -Rn -Rn -zh -zh -Rn -Oe -Rn -Rn -Rn -zh -zh -Rn -mm -mm -sz -sz -zh -mm -Oe -mm -mm -zh -zh -Oe -Rn -Rn -Rn -Rn -mm -mm -Rn -Rn -Oe -Rn -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(110,1,2) = {" -Fa -Fa -Fa -jm -jm -jm -Hl -fy -jm -lf -jm -jm -sY -ei -ei -fy -fy -jm -sY -jm -jm -lf -Hl -fy -fy -lf -lf -lf -Pd -jm -jm -jm -jm -jm -fy -fy -jm -jm -jm -jm -RI -RI -tO -tO -WV -tO -tO -tO -tO -tO -sO -AA -tO -tO -Tb -SD -SD -hr -SD -SD -SD -SD -gn -gn -sY -gn -iF -gn -gF -Yd -fE -sY -sY -sY -sY -sY -eQ -MW -fy -fy -jm -fy -jm -jm -jm -jm -gn -gn -Df -jm -jm -jm -lf -eQ -RI -RI -mm -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -Rn -Rn -Rn -mm -mm -sz -sz -zh -zh -mm -Rn -Rn -Oe -mm -mm -Oe -Rn -Oe -Rn -Oe -Oe -Rn -Rn -Rn -Rn -Rn -Rn -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(111,1,2) = {" -Fa -Fa -Fa -Fa -jm -Hl -jm -fy -jm -jm -jm -jm -sY -sY -sY -fy -hT -hT -sY -jm -jm -lf -Hl -fy -fy -Hl -lf -lf -fP -jm -jm -jm -lf -jm -jm -jm -jm -jm -jm -jm -RI -RI -tO -UV -mw -mw -ZM -zr -sM -tO -um -AA -tO -Km -mw -SD -AA -mw -mw -mw -AA -SD -gn -gn -fO -gn -gn -gn -gn -gn -gn -gn -sg -gn -gn -jm -jm -MW -fy -fy -fy -fy -fy -jm -hT -hT -gn -gn -eQ -Dr -ie -jm -jm -eQ -RI -RI -mm -Rn -mm -Rn -Rn -Oe -Rn -Rn -Rn -Rn -Oe -Rn -Rn -Rn -mm -Rn -mm -sz -sz -mm -zh -mm -Rn -Rn -Rn -mm -Rn -Rn -Rn -Rn -zh -zh -mm -Rn -Oe -Rn -Oe -Rn -Rn -Rn -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(112,1,2) = {" -Fa -Fa -Fa -Fa -Fa -jm -jm -fy -fy -fy -fy -jm -jm -sY -hT -jm -sY -jm -jm -jm -jm -lf -lf -fy -fy -fy -lf -lf -lf -jm -jm -jm -lf -lf -jm -jm -fP -jm -jm -jm -RI -RI -tO -sL -mw -mw -sM -mw -zd -tO -mw -AA -tO -Km -zd -SD -QX -AA -AA -AA -zF -SD -gn -gn -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -fy -fy -fy -fy -jm -jm -hT -hT -hT -gn -gn -eQ -lf -jm -jm -jm -eQ -RI -RI -mm -Rn -Rn -Rn -Oe -Rn -Rn -mm -Rn -xF -Rn -Rn -mm -Rn -mm -Rn -Rn -sz -sz -mm -zh -zh -mm -Rn -Rn -Rn -Rn -Oe -Rn -zh -zh -mm -mm -Rn -Rn -Oe -Oe -Oe -Oe -Rn -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(113,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -jm -jm -fy -rb -fy -jm -jm -jm -fy -hT -hT -hT -sY -jm -jm -lf -lf -fy -fy -rb -lf -lf -lf -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -RI -RI -tO -zd -wG -sO -mw -wG -bn -WR -mw -AA -tO -mw -zd -VA -AA -AA -AA -AA -AA -SD -gn -gn -eQ -fy -fy -fy -fy -fy -fy -fy -mv -hT -hT -hT -eQ -lq -fy -fy -jm -hT -hT -hT -hT -jm -gn -gn -eQ -eQ -Dv -jm -Dg -eQ -RI -RI -mm -Rn -Rn -mm -Rn -Rn -Rn -mm -Rn -Rn -Rn -Rn -Rn -Rn -mm -Rn -Rn -sz -sz -Oe -mm -zh -zh -mm -Rn -Oe -Rn -Oe -Rn -zh -mm -mm -Rn -Rn -Rn -Rn -Oe -Rn -Rn -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(114,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -jm -jm -fy -fy -jm -sY -fy -hT -fy -hT -hT -sY -jm -jm -lf -fP -fy -fy -fy -fy -lf -lf -jm -lf -fy -fy -fy -jm -jm -jm -jm -jm -jm -RI -RI -tO -zd -mw -mw -mw -mw -zd -tO -Lv -AA -tO -mw -zd -VA -AA -AA -AA -AA -zF -SD -gn -gn -eQ -fy -fy -MW -nd -nd -MW -fy -fy -hT -hT -hT -eQ -lX -jm -jm -hT -hT -hT -jm -jm -Kb -gn -gn -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -Rn -Rn -Rn -Rn -Rn -Oe -Rn -Rn -zh -Rn -Oe -Rn -Oe -Rn -Rn -Rn -mm -sz -sz -mm -Oe -mm -mm -mm -Rn -Rn -Oe -Rn -zh -zh -KA -mm -mm -Rn -Rn -Rn -Rn -Rn -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(115,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -jm -jm -fy -fy -jm -sY -sY -sY -hT -hT -jm -jm -jm -jm -lf -lf -Hl -fy -fy -lf -lf -jm -fy -fy -fy -jm -jm -jm -jm -lf -lf -jm -RI -RI -tO -hE -ft -YY -fK -YY -fL -tO -mw -AA -tO -mw -yy -SD -AA -Vg -vR -OP -mq -SD -gn -gn -eQ -MW -fy -nd -MW -fy -fy -fy -fy -hT -lf -hT -hT -hT -hT -hT -hT -hT -lq -fy -fy -eQ -jx -jx -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -Rn -Rn -mm -mm -mm -Rn -Rn -Rn -zh -mm -Rn -Rn -Rn -Rn -Rn -Rn -mm -sz -sz -mm -mm -mm -mm -Rn -Rn -Rn -Rn -Rn -mm -mm -mm -mm -mm -Rn -mm -mm -mm -eO -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(116,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -jm -jm -fy -jm -jm -jm -jm -jm -jm -jm -jm -jm -lf -lf -lf -fy -fy -fy -fy -lf -jm -jm -jm -jm -fP -jm -jm -lf -lf -fP -jm -RI -RI -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -FI -tO -SD -SD -SD -SD -SD -SD -SD -gn -gn -eQ -nd -nd -nd -Ms -lf -on -nd -nd -QV -on -MW -hT -hT -hT -hT -hT -hT -fy -fy -fy -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -Rn -Rn -Rn -mm -mm -Rn -Rn -Oe -zh -zh -Rn -Rn -Oe -Rn -Oe -Rn -Rn -sz -sz -mm -mm -zh -zh -Rn -Rn -mm -mm -mm -mm -mm -mm -mm -mm -mm -KA -mm -mm -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(117,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -jm -jm -fy -fy -fy -fy -fy -jm -lf -lf -jm -jm -jm -fy -fy -Hl -Hl -lf -lf -rb -jm -jm -jm -jm -lf -lf -jm -jm -jm -RI -RI -eQ -gn -JR -gn -gn -HY -gn -xu -gn -rr -ep -fO -iN -iN -iN -iN -fs -fO -Ki -eQ -gn -gn -eQ -nd -Zs -on -hT -hT -hT -lf -on -hT -nd -MW -eQ -lX -fy -fy -jm -hT -fy -jm -fy -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -Rn -Oe -Oe -mm -eO -Rn -zh -Rn -Rn -zh -Rn -Rn -Rn -Rn -Oe -Rn -Rn -sz -sz -mm -zh -zh -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(118,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -jm -jm -fy -fy -jm -lf -jm -jm -jm -jm -fy -fy -Hl -Hl -lf -jm -lf -lf -lf -jm -lf -lf -jm -VW -hT -hT -gn -gn -FD -RI -RI -RI -RI -RI -RI -RI -RI -RI -ha -RI -RI -RI -RI -RI -RI -RI -RI -jj -gn -gn -eQ -on -hT -hT -hT -gq -hT -hT -hT -hT -MW -nd -eQ -fy -fy -jm -fy -hT -hT -jm -fy -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -mm -Rn -Rn -mm -mm -zh -zh -zh -Rn -Rn -Rn -zh -Rn -Rn -Rn -Rn -Rn -sz -sz -mm -zh -Rn -Rn -Oe -Rn -Rn -Rn -Oe -Oe -Oe -Oe -Rn -Rn -Oe -Oe -Oe -Rn -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(119,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -jm -jm -fy -lf -lf -jm -jm -eF -jm -lf -fy -fy -fy -Pd -jm -lf -lf -lf -lf -lf -jm -jm -hT -hT -hT -gn -gn -FD -RI -RI -RI -RI -RI -RI -RI -RI -RI -ha -RI -RI -RI -RI -RI -RI -RI -RI -jj -gn -gn -Kb -hT -hT -jY -hT -YJ -hT -nU -hT -hT -nd -MW -eQ -lq -jm -fy -fy -fy -hT -jm -jm -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -mm -Rn -Oe -Rn -mm -zh -zh -mm -mm -Rn -mm -zh -Rn -Rn -Rn -Rn -Rn -sz -sz -mm -Rn -Rn -Oe -Oe -Oe -Oe -eI -Uc -oK -Uc -Uc -Oe -Oe -Oe -Uc -Oe -Rn -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(120,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -jm -jm -lf -jm -jm -jm -jm -jm -lf -Hl -fy -fy -fy -jm -hT -lf -lf -lf -jm -hT -hT -hT -hT -hT -gn -gn -FD -RI -RI -RI -RI -RI -RI -RI -RI -RI -ha -RI -RI -RI -RI -RI -RI -RI -RI -jj -gn -gn -hT -hT -hT -hT -hT -yi -hT -hT -hT -hT -nd -nd -eQ -fy -jm -fy -fy -jm -hT -fy -mv -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -mm -Rn -Rn -mm -zh -zh -KA -mm -eO -Rn -Oe -zh -zh -Rn -Rn -Rn -mm -sz -sz -mm -Rn -Rn -Oe -Rn -Rn -Oe -Oe -Rn -Rn -Oe -Oe -Oe -Rn -Rn -Oe -Rn -Rn -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(121,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -jm -jm -jm -jm -jm -lf -fy -fy -fy -fy -jm -hT -hT -lf -hT -hT -hT -hT -hT -hT -jm -RI -RI -eQ -gn -MR -gn -gn -eQ -eQ -eQ -eQ -eQ -eQ -eQ -gn -gn -gn -gn -gn -gn -eJ -eQ -gn -gn -Kb -hT -MW -nd -hT -hT -hT -on -MW -fy -MW -nd -eQ -lq -MW -lq -jm -fy -hT -fy -fy -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -mm -Rn -Rn -zh -zh -zh -mm -mm -mm -Rn -Rn -mm -zh -Rn -mm -Rn -mm -sz -sz -mm -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -Rn -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(122,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -hT -hT -lf -lf -fy -fy -Hl -fy -hT -hT -hT -hT -hT -hT -hT -hT -hT -hT -jm -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -dX -dX -dX -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -gn -gn -eQ -on -fy -nd -MW -fy -lf -Ms -fy -Ms -fy -jm -eQ -eQ -eQ -eQ -eQ -eQ -hT -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -mm -mm -mm -zh -zh -zh -Rn -Rn -Rn -Rn -mm -mm -mm -Rn -mm -mm -mm -sz -sz -mm -Rn -Rn -Rn -Rn -Rn -Rn -mm -mm -mm -oh -mm -mm -mm -mm -mm -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(123,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -hT -hT -lf -lf -fy -fy -fy -hT -rb -jm -hT -hT -hT -fy -PI -hT -hT -hT -jm -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -eQ -fU -fU -fU -fZ -fS -fS -fZ -fZ -fZ -fS -fS -sY -eQ -gn -gn -eQ -eQ -wf -wf -eQ -rt -eQ -wf -wf -eQ -eQ -eQ -eQ -CR -lf -lf -nB -lf -hT -jm -lq -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -mm -eO -mm -zh -zh -mm -mm -mm -mm -mm -zh -zh -zh -zh -mm -eO -mm -sz -sz -mm -Rn -Rn -mm -mm -eO -mm -mm -ak -ak -ak -ak -ak -ak -ak -ak -ak -mm -KA -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(124,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -hT -fy -fy -rb -rb -fy -rb -fy -rb -hT -hT -hT -jm -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -eQ -fV -fV -fV -hb -ho -hx -Wg -Wg -Wg -DT -DT -sY -eQ -gn -gn -eQ -lf -lf -hT -jm -aP -jm -jm -jm -jm -eQ -AH -hT -hT -hT -hT -hT -hT -hT -jm -lq -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -mm -mm -zh -zh -zh -mm -eO -mm -mm -zh -KA -zh -zh -zh -zh -mm -mm -sz -sz -mm -Rn -Rn -mm -ak -ak -ak -ak -ak -al -al -al -ak -ak -ak -ak -ak -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(125,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -hT -fy -fy -fy -rb -fy -fy -fy -fy -hT -hT -hT -jm -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -eQ -fU -fU -fU -fZ -fZ -fS -fZ -if -fS -gU -DT -sY -eQ -gn -gn -eQ -CR -nB -hT -hT -hT -hT -hT -hT -hT -hT -hT -hT -lf -VX -lf -jm -Uo -hT -jm -lq -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -mm -mm -zh -zh -mm -Rn -zh -zh -zh -zh -ap -ak -ak -ak -al -ak -ak -sz -sz -ak -ak -ak -ap -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -al -al -ak -ak -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(126,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -hT -fy -lf -lf -fy -fy -fy -rb -fy -hT -hT -hT -jm -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -eQ -fZ -fZ -fZ -fZ -gU -gU -gU -Wg -gU -gU -DT -sY -eQ -eH -gn -eQ -VT -oC -hT -lf -jm -lf -jm -lf -nB -eQ -JB -hT -lf -lf -lf -jm -lf -hT -fy -jm -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -mm -mm -Rn -mm -Rn -Rn -zh -zh -ak -ak -ak -ak -al -ak -ak -ak -al -sz -sz -ak -al -ak -ak -ak -al -ak -ak -ak -ak -ak -ak -ak -ak -ak -al -al -ak -ak -ak -oh -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(127,1,2) = {" -Fa -Fa -Fa -lf -YI -YI -YI -lf -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -hT -fy -fy -lf -fy -fy -fy -rb -VW -hT -hT -hT -jm -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -fS -gU -gU -gU -gU -gU -DT -DT -DT -DT -sY -eQ -gn -gn -Kb -lf -lf -hT -jm -lf -lf -hT -hT -hT -lH -hT -hT -lu -jm -jm -jm -hT -hT -fy -lq -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -mm -Rn -Rn -mm -Rn -mm -zh -ak -ak -ak -ak -ak -ak -ak -ak -ap -al -sz -sz -ak -al -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -al -ak -ak -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(128,1,2) = {" -Fa -YI -YI -YI -YI -YI -YI -Kj -YI -YI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -hT -rb -hT -hT -hT -hT -hT -hT -hT -hT -hT -hT -jm -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -fZ -gU -gU -gU -gU -gU -DT -gU -gU -gU -sY -eQ -gn -gn -Kb -hT -hT -hT -nB -Ms -aP -hT -jm -lu -jm -aP -hT -jm -jm -hT -jm -hT -hT -fy -fy -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -mm -Rn -zh -Rn -Rn -zh -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -al -sz -sz -ak -ak -ar -ak -ak -ak -ak -ak -ap -ak -ak -ak -ak -ak -ap -ak -ak -ak -al -ak -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(129,1,2) = {" -Fa -YI -Pi -Pi -YI -YI -Kj -Kj -Kj -YI -YI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -hT -hT -hT -hT -hT -hT -hT -hT -hT -hT -hT -lf -jm -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -fZ -gU -fZ -gU -DT -DT -DT -gU -gU -fZ -sY -eQ -gn -gn -eQ -lf -lf -hT -lf -jm -lf -hT -nB -jm -jm -jm -hT -jm -jm -jm -jm -jm -hT -fy -lq -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -mm -Rn -zh -Rn -Rn -zh -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -al -sz -sz -al -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -al -al -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(130,1,2) = {" -Fa -Md -YI -YI -Kj -Pi -Pi -Pi -YI -YI -YI -YI -YI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -hT -hT -hT -hT -hT -hT -hT -hT -hT -hT -lf -lf -jm -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -fZ -gU -gU -gU -DT -gU -gU -gU -fZ -fS -eQ -eQ -gn -gn -eQ -uC -VX -hT -hT -hT -hT -hT -hT -hT -hT -hT -hT -hT -hT -hT -hT -hT -hT -jm -jm -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -mm -Rn -zh -Oe -Rn -zh -ak -ak -ak -ak -ak -ak -ap -ap -ak -ak -al -sz -sz -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -al -al -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(131,1,2) = {" -Fa -Pi -YI -Pi -Kj -Pi -YI -YI -Pi -Kj -YI -YI -VO -Zv -Zv -Zv -rh -gn -gn -gn -gn -gn -gn -gn -gn -gn -jJ -hT -hT -hT -hT -hT -fy -fy -fy -fy -fy -lf -jm -jm -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -fZ -DT -DT -DT -DT -gU -gU -gU -fS -fZ -eQ -YG -gn -gn -eQ -lf -lf -jm -hT -lf -lf -hT -hT -QV -hT -hT -hT -hT -hT -hT -hT -hT -hT -jm -lq -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -mm -Rn -zh -Rn -Rn -zh -ak -ak -ak -ap -ak -ak -ak -ak -ak -ak -al -sz -sz -ak -al -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -eO -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(132,1,2) = {" -Fa -YI -Pi -Kj -Pi -YI -Kj -Pi -Md -Pi -YI -YI -Zv -Zv -Zv -Zv -rh -gn -gn -gn -gn -gn -gn -gn -gn -gn -jJ -hT -hT -hT -fy -fy -fy -fy -lf -fy -fy -jm -jm -jm -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -fS -gU -DT -gU -gU -gU -gU -gU -fS -fZ -jc -jc -gn -gn -hT -hT -hT -hT -hT -aP -lf -hT -nB -lf -nB -lf -jm -hT -jm -jm -jm -jm -hT -hT -hT -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -mm -Rn -zh -Oe -Oe -zh -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -al -sz -sz -al -ak -ak -ak -ap -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(133,1,2) = {" -Fa -YI -YI -Pi -YI -Pi -Pi -YI -Pi -YI -YI -YI -Zv -Zv -Zv -Zv -rh -gn -gn -gn -gn -gn -gn -gn -gn -gn -jJ -hT -hT -hT -rb -fy -rb -lf -lf -fy -rb -jm -jm -jm -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -fS -gU -DT -gU -gU -gU -fZ -gU -fS -fZ -jc -jc -gn -gn -eQ -BQ -gn -hT -hT -lf -lf -hT -lf -fy -fy -lf -eQ -gn -eQ -fO -fO -fO -fO -eQ -hT -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -eO -Rn -zh -Rn -Oe -mm -ak -ak -ak -ak -ak -ak -ap -ak -ar -ak -al -sz -sz -ak -al -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(134,1,2) = {" -Fa -YI -Pi -YI -Pi -YI -YI -Pi -jm -YI -YI -YI -Zv -Zv -Zv -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -Wr -lf -rb -PI -rb -fy -rb -rb -SI -rb -jm -jm -jm -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -fZ -gU -DT -gU -gU -gU -gU -gU -sY -eQ -jc -jc -gn -gn -eQ -tE -gn -hT -hT -hT -hT -hT -lf -fy -jm -jm -eQ -gn -me -gn -jm -hT -hT -mT -hT -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -mm -zh -zh -Rn -Rn -mm -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -al -sz -sz -ak -ap -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(135,1,2) = {" -Fa -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -Pi -Zv -Zv -Zv -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -jm -lf -fy -rb -SI -rb -rb -rb -fy -lf -jm -jm -jm -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -fZ -fZ -hd -fS -fS -fS -fZ -fZ -sY -eQ -eQ -jn -gn -gn -eQ -BQ -gn -hT -lf -VX -lf -hT -lf -lf -VX -lf -eQ -hT -jm -hT -hT -hT -gn -gn -jm -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -mm -zh -zh -zh -Rn -mm -ak -ak -ak -ak -ak -ak -ap -ak -ak -ak -al -sz -sz -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ap -ak -ak -al -ak -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(136,1,2) = {" -Fa -YI -YI -YI -Pi -YI -YI -YI -YI -YI -YI -YI -IZ -Zv -Zv -YI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -jm -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -fS -fS -gh -DT -fS -fZ -fZ -fZ -fZ -eQ -eQ -eQ -eQ -gn -gn -Kb -hT -hT -hT -lf -CR -lf -hT -WL -lf -CR -lf -eQ -lY -fO -gn -mu -fO -fO -fO -mu -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -Rn -Rn -zh -zh -Rn -Rn -ak -ak -ak -ak -ak -ak -ak -ak -ak -ap -ak -sz -sz -al -al -ak -ap -ak -ap -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(137,1,2) = {" -Fa -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -Zv -Zv -Zv -Pi -YI -Pi -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -jm -Fa -Fa -Fa -jm -jm -lf -lf -rb -jm -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -fR -fR -fR -fR -DT -fS -fZ -hb -du -ix -fZ -gh -gh -eQ -jx -jx -eQ -eQ -wX -wX -wX -wX -wX -hT -eQ -wX -wX -wX -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -Rn -Oe -zh -zh -KA -mm -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -al -sz -sz -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ap -ak -ak -ak -ak -ak -ak -ak -al -ak -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(138,1,2) = {" -Fa -YI -YI -YI -jm -YI -YI -YI -YI -YI -YI -YI -VO -Zv -Zv -YI -Pi -YI -Pi -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -jm -lf -jm -jm -RI -RI -eQ -Fa -Fa -Fa -Fa -sY -fR -ga -fR -fR -DT -fS -fZ -hb -du -ix -fZ -gh -gh -eQ -eQ -eQ -eQ -eQ -wX -ko -RI -gn -kO -hT -jm -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -Rn -Rn -zh -zh -mm -mm -ak -ak -ak -ak -ak -ak -ak -ak -al -al -al -sz -sz -ak -ar -ak -ak -ak -al -al -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -ak -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(139,1,2) = {" -Fa -YI -YI -Pi -YI -Pi -Pi -YI -YI -YI -YI -YI -IZ -Zv -Zv -YI -YI -Kj -YI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -jm -lf -lf -jm -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -fR -gc -gE -fR -DT -fS -fZ -fZ -ql -fZ -fZ -gh -gh -gh -gh -gh -Fa -eQ -wX -gn -kM -gn -wX -hT -lq -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -aT -aT -aT -aT -aT -aT -aT -aT -ak -ak -ak -ak -ak -al -ak -ak -ak -ak -ak -sz -sz -ak -ak -al -ak -ak -ak -ak -ak -al -ak -al -al -ak -al -al -ak -al -al -ak -ak -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(140,1,2) = {" -Fa -YI -YI -Pi -YI -YI -YI -YI -YI -YI -YI -YI -Zv -Zv -Zv -YI -YI -YI -YI -Pi -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -lf -lf -jm -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -fR -ga -fR -fR -DT -fS -hy -hy -hK -iB -fZ -fZ -fZ -fZ -fZ -fZ -eQ -eQ -wX -kp -wN -gn -wX -hT -jm -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -aT -aT -aT -aT -aT -aT -aT -aT -ak -ak -ak -ak -oh -ak -ak -mm -mm -mm -mm -sz -sz -mm -mm -ak -ak -aT -aT -aT -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -aT -aT -aT -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(141,1,2) = {" -Fa -YI -YI -YI -YI -YI -YI -YI -YI -YI -Kj -WA -TS -Mi -Mi -TS -JC -YI -YI -Pi -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -lf -lf -jm -RI -RI -eQ -Fa -Fa -Fa -Fa -sY -fR -fR -fR -fR -DT -fS -hC -hK -hK -hK -iM -DT -DT -Wg -jy -DT -eQ -eQ -wX -kq -gn -gn -wX -hT -CR -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -aT -aT -aT -aT -aT -aT -aT -aT -ak -al -ak -ak -ak -ak -ak -mm -mm -mm -mm -sz -sz -mm -al -ak -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(142,1,2) = {" -Fa -YI -YI -YI -Pi -Pi -YI -YI -YI -WA -Un -Jy -LE -Jy -Jy -IQ -Oo -TS -Ma -YI -YI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -lf -lf -RI -RI -eQ -Fa -Fa -Fa -Fa -sY -fS -gh -gh -fS -fS -fZ -fZ -hM -ig -fZ -fZ -Iu -DT -Wg -DT -DT -eQ -eQ -wX -kr -gn -gn -wX -hT -lq -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -aT -aT -aT -aT -aT -aT -aT -aT -ak -al -ak -al -ak -ak -ak -mm -mm -DN -qu -sz -sz -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(143,1,2) = {" -Fa -YI -YI -Pi -YI -YI -YI -YI -Yf -Wu -Wu -IU -wq -Iz -Jy -wq -Wn -Mi -Nt -YI -YI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -jm -jm -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -fZ -DT -DT -DT -ih -fZ -DT -DT -Wg -DT -jC -eQ -eQ -wX -wq -kO -wq -wX -hT -jm -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -aT -aT -aT -aT -aT -aT -aT -aT -ak -al -ak -ak -ak -mm -mm -mm -mm -DN -qu -sz -sz -mm -mm -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(144,1,2) = {" -Fa -YI -YI -YI -YI -YI -YI -YI -YI -Ph -Uq -Jy -HT -Jy -Jy -HP -Oo -US -Ke -YI -YI -YI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -fZ -hG -hN -DT -DT -iM -DT -DT -Wg -DT -jD -eQ -eQ -eQ -CR -hT -hT -hT -cM -eQ -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -aT -aT -aT -aT -aT -aT -aT -aT -ak -al -al -ak -ak -mm -mm -mm -mm -mm -mm -sz -sz -sz -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(145,1,2) = {" -Fa -YI -YI -YI -YI -YI -Pi -YI -YI -YI -YI -Ph -US -US -US -US -IX -YI -YI -YI -YI -YI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -fZ -hH -hO -ih -iD -fZ -iU -DT -Wg -DT -jE -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -aT -aT -aT -aT -aT -aT -aT -aT -ak -al -al -ak -ak -mm -mm -mm -mm -QI -qu -sz -sz -sz -mm -mm -mm -mm -mm -mm -mm -mm -DN -DN -mm -mm -mm -mm -mm -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(146,1,2) = {" -Fa -YI -YI -YI -YI -YI -YI -YI -YI -YI -Md -YI -YI -YI -YI -Kj -YI -YI -YI -Pi -YI -YI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -fZ -fZ -fZ -fZ -fZ -fZ -iV -DT -Wg -DT -jI -fZ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -aT -aT -aT -aT -aT -aT -aT -aT -ak -ak -ak -ak -mm -mm -mm -mm -mm -DN -DN -DN -sz -sz -mm -QI -DN -mm -mm -qu -mm -mm -FH -DN -mm -mm -mm -mm -mm -mm -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(147,1,2) = {" -Fa -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -hs -hs -hs -hs -hs -fZ -iX -je -Wg -DT -jK -fZ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -aT -aT -aT -aT -aT -aT -aT -aT -ak -ak -ak -ak -mm -mm -mm -mm -mm -mm -mm -mm -sz -sz -sz -QI -DN -DN -QI -DN -mm -mm -DN -qu -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(148,1,2) = {" -Fa -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -Pi -YI -YI -Pi -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -fZ -fZ -fZ -fZ -fZ -fZ -fZ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -aT -aT -aT -aT -aT -aT -aT -aT -ak -ak -aT -aT -mm -mm -mm -mm -mm -mm -mm -mm -mm -sz -sz -sz -sz -mm -mm -sz -sz -mm -sz -sz -sz -sz -sz -sz -sz -sz -mm -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(149,1,2) = {" -Fa -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -Pi -YI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -aT -aT -aT -aT -aT -aT -aT -aT -ak -ak -aT -aT -mm -mm -DN -qu -DN -mm -DN -qu -DN -mm -sz -sz -sz -sz -sz -sz -sz -mm -mm -mm -sz -sz -sz -sz -sz -sz -sz -mm -fl -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(150,1,2) = {" -Fa -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -Pi -YI -YI -YI -YI -YI -Pi -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -aT -aT -aT -aT -aT -aT -aT -aT -ak -ak -aT -aT -aT -mm -DN -DN -DN -mm -DN -FH -qu -DN -mm -mm -mm -mm -mm -mm -qu -qu -mm -DN -mm -mm -qu -mm -sz -sz -sz -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(151,1,2) = {" -Fa -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -aT -aT -aT -aT -aT -aT -aT -aT -ak -ak -aT -aT -aT -mm -mm -DN -DN -mm -DN -QI -DN -DN -mm -DN -DN -QI -mm -aT -DN -DN -DN -QI -mm -mm -DN -mm -sz -sz -sz -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(152,1,2) = {" -Fa -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -Pi -YI -YI -YI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -aT -aT -aT -aT -aT -aT -aT -aT -ak -ak -aT -aT -aT -mm -mm -DN -DN -QI -DN -DN -DN -mm -mm -DN -QI -DN -mm -aT -aT -mm -DN -mm -mm -mm -DN -mm -sz -sz -sz -mm -mm -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(153,1,2) = {" -Fa -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -aT -aT -aT -aT -aT -aT -aT -aT -ak -ak -aT -aT -mm -mm -mm -mm -mm -DN -DN -DN -mm -mm -mm -mm -mm -mm -mm -aT -aT -aT -aT -aT -mm -mm -mm -sz -sz -sz -sz -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(154,1,2) = {" -Fa -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -YI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -eQ -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -aT -aT -aT -aT -aT -aT -aT -aT -ak -ak -aT -aT -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -mm -aT -aT -aT -aT -aT -mm -mm -mm -sz -sz -sz -sz -mm -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} -(155,1,2) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -sz -Mp -Mp -sz -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -aT -"} - -(1,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -MD -"} -(2,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(3,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(4,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(5,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(6,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(7,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(8,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(9,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(10,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(11,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(12,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(13,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(14,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(15,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(16,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(17,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(18,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(19,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -VV -VV -VV -VV -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(20,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(21,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(22,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(23,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -"} -(24,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -"} -(25,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -"} -(26,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -"} -(27,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Cx -Ey -Ey -"} -(28,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Cx -Cx -Cx -Ey -"} -(29,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Cx -Cx -Cx -Ey -"} -(30,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Cx -Cx -Cx -Ey -"} -(31,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Cx -Cx -Ey -Ey -"} -(32,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Cx -Ey -Ey -"} -(33,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -"} -(34,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -"} -(35,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(36,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(37,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(38,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(39,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(40,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(41,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(42,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(43,1,3) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(44,1,3) = {" -Ey -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -pb -pb -pb -hc -hc -hc -hc -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(45,1,3) = {" -Ey -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -xA -Zp -Zp -Zp -Zp -Zp -Zp -Zp -xA -hc -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(46,1,3) = {" -Ey -VV -VV -VV -VV -VV -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -eU -eU -eU -eU -RM -hc -cK -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -hc -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(47,1,3) = {" -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -xv -mJ -mJ -mJ -Xd -RM -hc -hc -hc -hc -pb -pb -pb -hc -hc -hc -hc -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(48,1,3) = {" -GE -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -xv -mJ -mJ -mJ -mJ -FA -RM -RM -RM -RM -RM -RM -RM -RM -Fy -gk -gk -gk -gk -gk -Fy -Fy -gk -hu -gk -Fy -vq -vq -vq -vq -vq -vq -vq -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(49,1,3) = {" -GE -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -xv -YF -mJ -mJ -mJ -FA -RM -RM -RM -RM -RM -RM -RM -RM -hu -aj -gy -gy -gy -JI -yG -pF -gy -gy -gy -yG -vq -vq -vq -vq -vq -vq -vq -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(50,1,3) = {" -GE -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Zn -qh -qh -zm -qh -qh -qh -qh -sw -qh -qh -qh -qh -nC -qh -qh -qh -sw -qh -qh -Zn -RM -RM -RM -RM -VC -rz -rC -xN -oS -db -yG -aj -gy -gy -JI -hu -vq -vq -vq -vq -vq -vq -vq -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(51,1,3) = {" -GE -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -qh -RT -sU -sU -sU -ti -qh -ij -uy -qh -pl -vD -Fj -Fj -fN -fN -qh -wW -xb -xb -qh -RM -RM -RM -RM -Fy -Fy -Kl -Fy -yJ -pM -Fy -aj -gy -Qv -db -yG -vq -vq -vq -vq -vq -vq -vq -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(52,1,3) = {" -GE -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -pb -hc -hc -hc -hc -tp -tp -tp -hc -tp -hc -hc -hc -hc -pb -hc -hc -hc -hc -hc -hc -tp -tp -tp -pb -hc -hc -RM -RM -RM -RM -RM -RM -qh -Mf -so -sU -sU -DW -ij -ij -uz -qh -LS -fN -Fj -wp -wB -wB -qh -wZ -xl -xp -Td -RM -RM -RM -RM -hu -aj -aj -mB -Jh -fu -yG -Fy -Me -hu -VC -Fy -vq -vq -vq -vq -vq -vq -vq -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(53,1,3) = {" -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -hc -oO -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -hc -RM -RM -RM -RM -RM -RM -qh -rT -sU -sx -sP -DW -qh -tk -qh -Zn -fN -Fj -Fj -wp -JL -Ef -qh -xa -xl -xp -qh -RM -RM -RM -RM -Fy -Hn -bP -xO -xO -Ld -yG -xO -xO -xO -xO -xO -vq -vq -vq -vq -vq -vq -vq -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -"} -(54,1,3) = {" -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -hc -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -op -hc -hc -hc -hc -hc -RM -RM -rB -ew -DW -yc -OG -DW -qh -tG -qh -fN -fN -tG -vU -tG -qh -qh -qh -Gy -xb -xb -qh -RM -RM -RM -RM -Fy -VC -VC -hu -VC -VC -Fy -GR -GR -Ud -GR -GR -OI -RM -vq -vq -vq -vq -vq -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -"} -(55,1,3) = {" -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -tp -tp -tp -hc -hc -hc -hc -hc -hc -hc -hc -kA -op -hc -kA -kA -kA -hc -RM -RM -qh -aq -ta -HE -DW -DW -qh -tP -qh -fN -fN -tG -vX -ws -qh -wJ -fN -fN -fN -fN -Td -RM -RM -RM -RM -xz -xz -xz -xz -xz -xz -xz -rD -rD -rD -rD -rD -RM -RM -vq -vq -vq -vq -vq -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -"} -(56,1,3) = {" -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -kA -op -hc -kA -kA -kA -hc -RM -RM -qh -DW -DW -Cj -DW -tj -qh -tG -uB -tW -fN -uH -wc -tG -qh -wJ -fN -fN -fN -fN -qh -RM -RM -RM -RM -xB -xB -xB -xB -xz -xz -xz -xz -xz -xz -xz -xz -RM -RM -vq -vq -vq -vq -vq -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -"} -(57,1,3) = {" -GE -GE -GE -GE -GE -mR -mR -mR -HR -HR -HR -HR -HR -mR -mR -mR -pd -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -kA -op -hc -kA -kA -kA -pb -RM -RM -qh -qh -fN -fN -qh -qh -qh -tQ -uD -tW -fN -Zn -qh -qh -qh -qh -qh -xc -qh -qh -Zn -RM -RM -RM -xv -lA -lA -lA -mc -xz -xz -xz -xz -xz -xz -xz -lA -Fy -VC -mA -VC -VC -VC -Fy -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(58,1,3) = {" -GE -GE -GE -GE -mR -mR -uo -uo -HR -CN -kY -Wf -HR -mR -ik -kY -kY -mR -qI -qI -qI -qI -qI -qI -qI -qI -qI -qI -mR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -kA -op -Hg -kA -kA -kA -hc -RM -RM -qh -rU -Fj -Fj -Fj -qh -tG -tG -FO -tW -fN -vG -wd -wh -qh -Hb -sV -fN -su -tC -qh -RM -RM -RM -xv -lA -uV -iT -iT -iT -iT -iT -iT -iT -iT -iT -qG -VC -pB -aj -Mv -aj -ke -Fy -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(59,1,3) = {" -GE -GE -GE -GE -mR -mR -uo -mR -HR -CN -kY -Wf -HR -mR -QL -Nc -pe -mR -qI -qI -qI -qI -qI -qI -qI -qI -qI -qI -mR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -kA -op -tp -kA -kA -kA -hc -RM -RM -qh -rV -Fj -Fj -Fj -tk -tG -tS -uD -tW -fN -vI -tC -wh -qh -Fj -Fj -fN -Fj -Ls -qh -RM -RM -RM -xv -lA -XB -xR -Fs -Fs -qy -oq -yL -pK -yL -pK -XB -VC -aj -aj -eq -aj -aj -Fy -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -"} -(60,1,3) = {" -GE -GE -GE -GE -mR -mR -uo -mR -HR -CN -kY -Wf -HR -mR -eu -Nc -pf -mR -qI -qI -qI -qI -qI -qI -qI -qI -qI -qI -OW -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -tp -kA -op -tp -kA -kA -kA -hc -RM -RM -qh -Fj -Fj -Fj -sQ -qh -tH -tG -uE -tW -fN -Fj -Fj -Fj -wC -fN -wQ -fN -Fj -Fj -Td -RM -RM -RM -xv -lA -xG -Fs -Fs -Fs -Fs -yL -yL -yL -yL -yL -XB -VC -xO -xO -Fy -Fy -PZ -Fy -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -"} -(61,1,3) = {" -GE -GE -GE -GE -mR -mR -uo -mR -JF -JF -Lq -JF -HR -mR -iC -Nc -Nc -mR -qI -qI -qI -qI -qI -qI -qI -qI -qI -qI -HR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -tp -kA -op -tp -kA -kA -kA -hc -RM -RM -rB -Fj -Fj -Fj -sT -qh -tI -tT -qh -uW -fN -Fj -py -py -qh -fN -fN -fN -xn -xn -qh -RM -RM -RM -xv -lA -XB -Fs -Fs -RK -Fs -xf -il -AM -dK -il -XB -VC -xO -xO -yG -ge -rC -VC -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -"} -(62,1,3) = {" -GE -GE -GE -GE -mR -mR -uo -mR -JF -Nc -Nc -Nc -Nc -mR -HS -Nc -Nc -mR -qI -qI -qI -qI -qI -qI -qI -qI -qI -qI -HR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -tp -kA -op -tp -kA -kA -kA -hc -RM -RM -qh -qh -ij -qh -qh -Zn -fN -tW -fN -fN -vt -Fj -we -zI -qh -Aj -fN -fN -tl -JL -qh -RM -RM -RM -xv -lA -XB -po -Fs -Hc -Fs -PP -il -il -il -il -XB -VC -xO -RQ -Gx -BV -gy -VC -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -"} -(63,1,3) = {" -GE -GE -GE -GE -mR -mR -uo -mR -JF -eu -Nc -Nc -Nc -XI -kY -kY -kY -ph -qI -qI -gC -qI -qI -gC -qI -qI -gC -qI -HR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -tp -kA -op -hc -kA -kA -kA -hc -RM -RM -qh -rW -ij -sy -qh -tl -fN -fN -uF -fN -fN -Zn -qh -qh -qh -qh -qh -wC -qh -qh -qh -RM -RM -RM -xv -lA -XB -xS -Fs -Fs -Fs -EA -il -mk -il -Zr -XB -VC -wM -fu -AP -db -Rl -VC -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -"} -(64,1,3) = {" -GE -GE -GE -GE -mR -mR -uo -mR -JF -Nc -Nc -JF -JF -HR -ZZ -kY -BB -mR -qI -qI -qI -qI -qI -qI -qI -qI -qI -qI -HR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -kA -op -hc -kA -kA -kA -hc -RM -RM -qh -rZ -ss -sD -qh -tl -fN -fN -qh -fN -fN -vK -wg -tC -qh -fN -uI -fN -fN -fN -qh -tZ -tZ -tZ -xy -lA -XB -Fs -Fs -Yo -Fs -oy -YX -il -il -yx -XB -Fy -gk -gk -Fy -gk -gk -Fy -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -"} -(65,1,3) = {" -GE -GE -GE -GE -mR -mR -uo -mR -JF -Hi -Hi -at -qI -HR -Qe -kY -IP -mR -qI -qI -qI -qI -qI -qI -qI -qI -qI -qI -HR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -kA -op -hc -kA -kA -kA -pb -RM -RM -qh -qh -qh -qh -qh -qh -Fj -fN -uG -fN -fN -vL -Fj -vL -qh -fN -wS -Iw -zI -Fj -qh -ZD -RM -RM -xv -lA -Vy -iT -iT -iT -iT -iT -iT -iT -iT -iT -KZ -RM -RM -RM -RM -RM -RM -RM -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(66,1,3) = {" -GE -GE -GE -GE -mR -mR -uo -mR -JF -Xc -Wx -DX -qI -HR -lL -kY -kY -mR -qI -qI -qI -qI -qI -qI -qI -qI -qI -qI -HR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -tp -QM -RM -tp -kA -kA -kA -hc -RM -RM -Zn -qh -py -py -sV -tq -Fj -fN -uH -fN -fN -Fj -Fj -Fj -fN -fN -fN -df -nj -wh -Td -ZD -RM -RM -RM -xD -RM -RM -xZ -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(67,1,3) = {" -GE -GE -GE -GE -mR -mR -uo -mR -JF -Nc -Nc -JF -JF -HR -mg -cJ -Ep -mR -qI -qI -qI -qI -qI -qI -qI -qI -qI -qI -HR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -tp -kA -op -tp -hc -pb -hc -hc -RM -RM -RM -qh -st -zI -Fj -Fj -Fj -fN -qh -uX -fN -Fj -Fj -Fj -fN -fN -Jo -Xq -nj -Fj -qh -ZD -RM -RM -RM -mL -mL -mL -mL -mL -mL -mL -mL -RM -sn -mL -mL -mL -mL -mL -mL -mL -mL -sn -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(68,1,3) = {" -GE -GE -GE -GE -mR -mR -uo -mR -JF -Nc -Nc -JF -JF -HR -mR -Kg -mR -JF -qI -qI -qI -qI -qI -qI -qI -qI -qI -qI -OW -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -tp -kA -op -tp -RM -RM -RM -RM -RM -RM -RM -rB -su -tC -Fj -Fj -Fj -fN -uI -fN -fN -Fj -Fj -Fj -fN -fN -fN -Xq -nj -xq -qh -ZD -RM -RM -RM -mL -mL -xV -xK -Xy -xK -Zf -mL -RM -mL -yk -ng -ng -mL -kP -yt -fQ -oa -mL -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -VV -VV -VV -VV -VV -Ey -Ey -"} -(69,1,3) = {" -GE -GE -GE -GE -mR -mR -vy -mR -JF -eu -Nc -JF -JF -JF -JF -JF -JF -JF -JF -JF -fC -JF -JF -fC -JF -mR -mR -Kg -mR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -kA -op -tp -RM -RM -RM -RM -RM -RM -RM -qh -Ls -Ls -Fj -py -Fj -fN -fN -uY -fN -Fj -wi -wi -qh -fN -fN -bR -nj -Fj -qh -ZD -RM -RM -RM -Ja -xH -xK -xK -xK -xK -ye -mL -RM -mL -nl -ng -ng -nO -kP -kP -kP -kP -mL -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(70,1,3) = {" -GE -GE -GE -GE -mR -uo -uo -mR -JF -Nc -Nc -Nc -Nc -DK -Nc -Nc -Nc -Nc -DK -Nc -Nc -Nc -DK -Nc -Nc -Nc -pq -DM -pt -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -kA -op -hc -RM -RM -RM -RM -RM -RM -RM -Zn -qh -sE -Fj -st -zI -fN -fN -fN -fN -vI -st -zI -qh -fN -wS -Xq -nj -Fj -qh -ZD -RM -RM -RM -mL -mL -Ht -xK -xK -yb -FX -mL -RM -mL -ng -ng -kP -sn -kP -kP -kP -kP -mL -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(71,1,3) = {" -GE -GE -GE -GE -mR -uo -mR -mR -JF -Nc -Nc -Nc -Nc -DM -Nc -Nc -Nc -Nc -Nc -Nc -Nc -Nc -DM -Nc -Nc -Nc -mR -mR -mR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -kA -op -hc -tp -RM -RM -RM -RM -RM -RM -rw -qh -qh -cP -qh -qh -qh -nC -qh -cP -qh -qh -qh -qh -Hf -fN -pl -tC -wh -qh -PN -RM -RM -RM -mL -xJ -xK -xK -xK -xK -xK -mL -RM -mL -mL -ng -mL -sn -kP -sn -nK -kP -mL -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(72,1,3) = {" -GE -GE -GE -GE -mR -uo -mR -JF -JF -JF -JF -aC -JF -JF -JF -aC -JF -JF -Nc -Nc -CX -CX -CX -CX -Gc -CX -OW -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Ew -JF -JF -pS -JF -JF -qn -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -tJ -qN -dV -AE -ow -RM -RM -RM -qh -fN -fN -xd -Fj -Fj -Td -RM -RM -RM -RM -xE -xK -xK -xK -xK -xK -xK -mL -RM -mL -nK -kP -kP -sn -kP -kP -kP -kP -mL -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(73,1,3) = {" -GE -GE -GE -GE -mR -uo -mR -OW -qI -qI -qI -qI -qI -qI -qI -qI -qI -OW -Nc -Nc -HR -Mn -Nc -id -Nc -id -HR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Ew -JF -jF -jF -jF -jF -JF -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -tJ -dV -dV -dV -ow -RM -RM -RM -qh -wK -fN -fN -fN -fN -qh -RM -RM -RM -RM -mL -xM -xK -xK -ZO -xK -yh -mL -RM -mL -nm -yl -kP -sn -kP -yw -yz -yA -mL -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(74,1,3) = {" -GE -GE -GE -GE -mR -uo -mR -HR -qI -qI -qI -iA -qI -qI -iA -qI -qI -HR -Nc -Nc -HR -id -Nc -cX -Nc -rj -HR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Ew -JF -pO -jF -jF -jF -yZ -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -tJ -di -di -di -ow -RM -RM -RM -Zn -qh -qh -cP -qh -qh -Zn -RM -RM -RM -RM -mL -mL -xW -mL -mL -xW -mL -mL -RM -sn -mL -oI -mL -mL -mL -mL -oI -mL -sn -hc -YK -Cy -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(75,1,3) = {" -GE -GE -GE -GE -mR -uo -mR -HR -qI -qI -qI -qI -qI -qI -qI -qI -qI -HR -Nc -Nc -HR -id -Nc -yv -Nc -dr -HR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Ew -JF -pP -jF -jF -jF -bS -qD -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -tY -tY -tY -RM -RM -RM -RM -uh -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -wo -wo -wo -wo -wo -wo -wo -wo -wo -wo -RM -RM -RM -RM -RM -RM -RM -RM -hc -GP -GP -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(76,1,3) = {" -GE -GE -GE -GE -mR -uo -mR -HR -qI -Dn -qI -qI -gC -qI -qI -gC -qI -HR -eu -Nc -HR -Ep -kY -OW -kY -kY -HR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Ew -JF -jF -jF -jF -jF -yZ -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -vM -tZ -tZ -wH -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -wo -wo -wo -wo -wo -wo -wo -wo -wo -wo -RM -RM -RM -RM -RM -RM -RM -RM -hc -gj -gj -jo -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(77,1,3) = {" -GE -GE -GE -GE -mR -uo -mR -HR -qI -qI -qI -qI -qI -qI -qI -qI -qI -HR -Nc -Nc -HR -fw -Dy -qJ -Dy -HA -HR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Ew -JF -pQ -jF -jF -jF -bS -qD -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -tZ -tZ -tZ -tZ -tZ -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -wo -wo -wo -wo -wo -wo -wo -wo -wo -wo -RM -RM -RM -RM -RM -RM -RM -RM -hc -gj -gj -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(78,1,3) = {" -GE -GE -GE -GE -mR -uo -mR -HR -qI -qI -qI -iA -qI -qI -iA -qI -qI -HR -Nc -Nc -HR -pi -Dy -Ry -Dy -kW -HR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Ew -JF -jF -jF -jF -jF -yZ -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Qx -ME -kv -ME -Qx -RM -RM -RM -jQ -jS -wL -jQ -jQ -jQ -wL -jS -jQ -RM -EV -vW -vW -EV -vW -vW -vW -vW -vW -vW -EV -Ux -Ux -Ux -Ux -Ux -RM -RM -RM -hc -qs -gj -jo -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(79,1,3) = {" -GE -GE -GE -GE -mR -uo -mR -HR -qI -qI -qI -qI -qI -qI -qI -qI -qI -HR -Nc -Nc -HR -Bd -kY -OW -kY -kY -yZ -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Ew -JF -pR -jF -jF -jF -bS -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -ME -FP -Mw -Mw -ME -RM -RM -RM -jS -wT -xj -xj -xj -xj -xj -wU -jS -RM -vW -DS -nP -nP -nP -nP -nP -vW -vW -vW -vW -Ux -Ux -Ux -Ux -Ux -RM -RM -RM -hc -gj -gj -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -Ey -"} -(80,1,3) = {" -GE -GE -GE -GE -mR -uo -mR -OW -qI -qI -qI -qI -qI -qI -qI -qI -qI -OW -Nc -Nc -HR -id -Nc -yv -Nc -Mn -mR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Ew -JF -JF -jF -jF -JF -qr -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -ME -uM -Mw -fY -ME -RM -RM -RM -wL -wU -oA -oA -wU -oA -oA -wU -wL -RM -EV -vW -nP -nP -vW -EV -NN -vW -EV -vW -EV -Ux -Ux -Ux -Ux -Ux -RM -RM -RM -hc -gj -gj -jo -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -Ey -"} -(81,1,3) = {" -GE -GE -GE -GE -mR -uo -mR -JF -JF -aC -JF -JF -JF -aC -JF -JF -aC -JF -eu -Nc -HR -BW -Nc -Mn -Nc -dr -mR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Ew -JF -jF -jF -JF -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -ME -ME -uN -Mw -EG -ME -RM -RM -RM -jS -wU -oA -oA -wU -oA -oA -wU -jS -RM -Go -aQ -Gz -nP -vW -mH -mH -mH -mH -cU -Go -Ux -Ux -Ux -Ux -Ux -RM -RM -RM -hc -ER -gj -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(82,1,3) = {" -GE -GE -GE -GE -mR -uo -mR -mR -eh -cO -cO -Dy -qJ -Dy -Dy -Dy -Dy -Dy -Nc -Nc -OW -CX -CX -CX -Jt -CX -mR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Ew -JF -jF -jF -yZ -RM -RM -RM -RM -RM -RM -Qx -ME -ME -ME -ME -ME -Qx -ME -Fc -ME -ME -tZ -tZ -tZ -jS -wU -oA -oA -wU -oA -oA -wU -jS -RM -EV -vW -vW -Rr -EV -GA -vW -EV -mH -KR -Go -ym -Ux -Ux -Ux -Ux -RM -RM -RM -hc -VV -gj -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(83,1,3) = {" -GE -GE -GE -GE -mR -uo -uo -pt -os -cO -cO -Dy -Gj -qB -Gj -qB -Gj -qB -Gj -qB -Gj -Ao -cO -cO -cO -cO -JF -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Ew -JF -pQ -pL -JF -RM -RM -RM -RM -RM -RM -ME -sv -sG -Fc -sb -Fc -BH -Fc -Fc -ME -wo -RM -RM -RM -jS -wU -oA -oA -wU -oA -oA -wU -jS -RM -Go -TA -OD -Dz -Dz -OD -GB -vW -mH -mH -EV -Go -yp -Go -EV -Ux -RM -RM -RM -hc -VV -GP -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(84,1,3) = {" -GE -GE -GE -GE -mR -mR -uo -mR -DE -cO -cO -Dy -oQ -Gj -qB -Gj -qB -OC -qB -Gj -qB -pj -cO -cO -cO -cO -XH -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Ew -JF -jF -jF -JF -RM -RM -RM -RM -RM -ME -ME -sv -sG -Fc -ts -fQ -ME -ME -ME -ME -wo -RM -RM -RM -jS -wU -xj -xj -xs -xj -xj -wU -jS -RM -Go -qz -OD -Dz -Dz -OD -GC -vW -mH -mH -Go -GF -nP -GG -Go -RM -RM -RM -RM -hc -GP -GP -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(85,1,3) = {" -GE -GE -GE -GE -mR -mR -uo -mR -OW -CX -WN -CX -OW -JF -JF -JF -JF -JF -JF -WN -JF -JF -JF -JF -WN -JF -mR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Ew -JF -pT -JF -JF -RM -RM -RM -RM -Qx -ME -ME -ME -Qx -tb -ts -Jj -IF -ME -JP -ME -wo -RM -RM -RM -jS -wU -oA -oA -xt -oA -oA -wU -jS -RM -Go -qz -OD -Dz -Dz -OD -jR -vW -GD -mH -EV -Lx -nP -GH -Go -RM -RM -RM -RM -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(86,1,3) = {" -GE -GE -GE -GE -mR -mR -uo -mR -HR -oD -jF -DI -HR -HR -HR -CX -CX -CX -CX -Dy -OW -OW -OW -eh -Dy -Dy -mR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -kA -op -hc -hc -RM -RM -RM -RM -ME -Fc -sb -Fc -ME -Fc -Fc -ZE -ZE -ME -JP -ME -wo -RM -RM -RM -wL -wU -oA -oA -wU -oA -oA -wU -wL -RM -Go -Bj -OD -Dz -Dz -OD -OD -vW -mH -mH -EV -nP -oA -oA -Go -RM -RM -RM -RM -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(87,1,3) = {" -GE -GE -GE -GE -mR -mR -uo -mR -HR -oE -jF -jF -jF -Dy -ET -OW -HN -HN -HN -Dy -Qj -dy -HR -eh -Dy -Dy -mR -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -kA -op -tp -RM -RM -RM -RM -RM -ME -rE -sc -Fc -sK -Fc -ZE -ZE -ZE -ME -JP -ME -wo -RM -RM -RM -jS -wU -oA -oA -wU -oA -oA -wU -jS -RM -Go -uf -OD -oF -zk -Gg -OD -vW -mH -mH -NN -nP -yq -yq -Go -RM -RM -RM -RM -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(88,1,3) = {" -GE -GE -GE -GE -mR -mR -uo -mR -HR -nE -jV -jV -jV -jV -Dy -WN -Hi -sS -sS -Hi -Hi -Hi -yZ -cO -cO -Dy -XH -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -kA -op -tp -RM -RM -RM -RM -RM -xE -rF -sd -Fc -sK -Fc -ZE -ZE -ua -ME -JP -ME -wo -RM -RM -RM -jS -wU -oA -oA -wU -oA -oA -wU -jS -RM -EV -vW -YQ -EV -xL -xL -xL -xL -xL -xL -EV -Go -Go -Go -EV -RM -RM -RM -RM -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(89,1,3) = {" -GE -GE -GE -GE -mR -mR -uo -mR -oB -jV -jV -jV -oU -jV -Dy -HR -Fo -Ix -Wq -hQ -jV -jV -HR -xU -cO -Dy -mR -RM -RM -RM -RM -RM -RM -RM -RM -RM -pG -RM -RM -hc -kA -op -pb -RM -RM -RM -RM -RM -ME -rM -Fc -Fc -ME -gu -pa -ZE -ub -ME -JP -ME -wo -RM -RM -RM -jQ -jQ -xj -xj -xj -xj -xj -wU -jS -RM -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -RM -RM -RM -RM -RM -RM -RM -RM -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(90,1,3) = {" -GE -GE -GE -GE -mR -mR -uo -mR -HR -DF -jV -jV -oV -jV -Dy -HR -UP -MT -gf -hQ -jV -jV -WN -cO -cO -Dy -mR -RM -RM -RM -RM -RM -RM -RM -RM -RM -kA -RM -RM -hc -kA -op -tp -RM -RM -RM -RM -RM -Qx -ME -ME -ME -ME -ME -ME -ME -ME -ME -ME -Qx -RM -RM -RM -RM -RM -jQ -jS -jS -wL -jS -jS -jS -jQ -RM -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -RM -RM -RM -RM -RM -RM -RM -RM -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(91,1,3) = {" -GE -GE -GE -GE -mR -aN -kY -kY -HR -DH -hQ -jV -jV -jV -sA -HR -Fo -si -dI -hQ -jV -jV -HR -Eu -Dy -Dy -mR -RM -RM -RM -RM -RM -RM -hw -hw -hw -eX -hw -hw -hc -kA -op -tp -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -uh -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Zp -Zp -Zp -Zp -Zp -Zp -RM -RM -RM -Zp -Zp -RM -RM -RM -RM -RM -RM -RM -RM -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(92,1,3) = {" -GE -GE -GE -GE -mR -CP -kY -kY -HR -jV -jV -jV -jV -jV -DP -HR -Wx -DJ -DJ -Wx -Wx -Wx -yZ -Ev -pp -Dy -XH -RM -RM -RM -RM -RM -hw -hw -pv -pD -mM -qo -qo -hc -kA -op -tp -RM -RM -RM -RM -RM -RM -RM -RM -xg -xg -xg -QP -xg -xg -QP -xg -wG -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Zp -Zp -Zp -Zp -Zp -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(93,1,3) = {" -GE -GE -GE -GE -mR -Eh -kY -kY -HR -oN -jF -Et -jF -os -DR -OW -mt -HN -HN -VY -jd -mb -HR -pn -Dy -Dy -mR -RM -RM -RM -RM -RM -hw -mM -mM -mM -pH -qo -qo -hc -kA -op -tp -RM -RM -RM -mj -mj -tO -tO -tO -tO -ED -GY -GY -SB -tO -OH -GY -xg -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Zp -Zp -Zp -Zp -Zp -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(94,1,3) = {" -GE -GE -GE -GE -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -OW -mR -mR -mR -mR -RM -RM -RM -RM -RM -hw -mM -mM -bL -bL -bL -qo -hc -kA -op -hc -RM -RM -RM -mj -mj -tO -GY -GY -tO -Qd -GY -GY -Ra -tO -ah -GY -cY -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Zp -Zp -Zp -Zp -Zp -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -Ro -Ro -Ro -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(95,1,3) = {" -GE -GE -GE -GE -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hw -mM -ed -bL -fW -bL -DG -hc -kA -op -hc -RM -RM -RM -mj -mj -JW -GY -EC -tO -tO -VZ -tO -tO -tO -tO -WQ -xg -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -DY -kA -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(96,1,3) = {" -GE -GE -GE -GE -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hw -Gn -bL -bL -ed -bL -bL -hc -kA -op -pb -RM -RM -RM -mj -iP -tO -GY -AJ -tO -GY -GY -dY -af -Wj -tO -Cd -xg -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(97,1,3) = {" -GE -GE -GE -GE -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hw -Gn -pz -Gn -pI -bL -bL -hc -kA -op -hc -RM -RM -RM -mj -Qb -tO -sa -GY -SM -GY -Pp -GY -GY -GY -SM -GY -cY -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -DZ -kA -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(98,1,3) = {" -GE -GE -GE -GE -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -kA -op -hc -RM -RM -RM -mj -MI -tO -GY -GY -tO -ou -eg -KP -rJ -GY -tO -Px -xg -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(99,1,3) = {" -GE -GE -GE -GE -hc -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -kA -op -hc -RM -RM -RM -mj -mj -tO -YZ -EC -tO -WF -Be -qq -GY -GY -tO -tO -xg -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -FR -FR -FR -FR -FR -FR -FR -FR -RM -RM -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(100,1,3) = {" -GE -GE -GE -GE -hc -kA -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -op -tp -RM -RM -RM -mj -iP -wG -tO -tO -tO -Hy -EE -rJ -GY -GY -tO -GY -xg -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -FR -FU -FU -FU -FU -FU -FU -FR -RM -RM -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(101,1,3) = {" -GE -RM -RM -RM -tp -hc -hc -hc -hc -hc -hc -hc -tp -tp -tp -tp -hc -hc -hc -pb -hc -hc -hc -hc -hc -hc -tp -tp -pb -tp -tp -hc -tp -tp -tp -hc -hc -hc -pb -tp -tp -tp -tp -RM -RM -RM -mj -Qb -jM -jM -tO -tO -GY -GY -tO -es -es -tO -GY -xg -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -FR -Qq -Qq -Qq -Qq -Qq -Sl -FR -RM -RM -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(102,1,3) = {" -GE -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -mj -MI -jM -jM -tO -AJ -GY -GY -tO -Ck -Ck -tO -GY -xg -RM -uh -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -FR -Qq -FY -KG -KG -Gf -Qq -FR -RM -RM -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(103,1,3) = {" -GE -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -mj -mj -jM -jM -tO -tO -tO -tO -tO -tO -tO -tO -GY -xg -RM -uh -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -FT -Qq -FZ -oA -Gd -Gk -Qq -Gr -RM -RM -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(104,1,3) = {" -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -Zp -Zp -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -FR -Qq -Ga -Gb -Gb -Gq -Qq -FR -RM -RM -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(105,1,3) = {" -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -Zp -Zp -tO -FF -gx -XV -zD -YY -Se -tO -jW -jW -jW -jW -tO -Cc -Eg -XQ -lj -tO -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -FR -MG -Qq -MG -Qq -MG -Qq -FR -RM -RM -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(106,1,3) = {" -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -Zp -Zp -tO -mw -mw -mw -mw -mw -mw -tO -yO -Nq -Nq -Nm -tO -Sa -tO -JX -vs -tO -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -FR -Yi -FU -Yi -FU -Yi -FU -FR -RM -RM -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(107,1,3) = {" -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -Zp -Zp -tO -mw -mw -mw -mw -mw -mw -tO -yO -Ck -Ck -Nm -tO -tO -tO -JX -UD -tO -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -FR -FR -FR -FR -FR -FR -FR -FR -RM -RM -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(108,1,3) = {" -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -Zp -Zp -tO -WG -Wh -aL -GY -GY -GY -tO -zQ -Qk -Qk -jq -tO -MV -MV -JX -Ul -tO -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(109,1,3) = {" -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -Zp -Zp -tO -tO -tO -tO -tO -UY -tO -tO -tO -tO -vF -tO -tO -NQ -MV -JX -JX -tO -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(110,1,3) = {" -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -Zp -Zp -tO -Dq -Zq -Fd -Fd -up -up -tO -Dq -MV -MV -eE -tO -Kc -MV -JX -JX -tO -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(111,1,3) = {" -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -Zp -Zp -tO -hh -GY -GY -up -GY -GY -tO -yu -MV -MV -eE -tO -tO -tO -tO -Vi -tO -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(112,1,3) = {" -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -Zp -Zp -tO -Dq -Dq -up -up -Za -lv -tO -Dq -MV -MV -GY -tO -yu -MV -MV -MV -tO -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(113,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -Zp -Zp -tO -Dq -aI -wG -it -GY -GY -tO -Dq -MV -MV -GY -tO -BJ -MV -RV -MV -tO -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(114,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -Zp -Zp -tO -OX -Dq -up -up -GY -GY -cn -Dq -MV -MV -GY -pr -Dq -ug -SN -qk -tO -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(115,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -Zp -Zp -tO -Dq -Dq -UC -OA -AJ -GY -tO -Dq -Px -GY -Hy -tO -ao -ug -jh -MV -tO -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(116,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -Zp -Zp -tO -tO -tO -tO -tO -tO -tO -tO -tO -tO -kh -tO -tO -tO -tO -tO -OR -tO -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -LC -LC -hc -mL -mL -mL -mL -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(117,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -kA -kA -JE -mL -Rw -Rw -mL -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(118,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -mL -mL -PH -mL -Hv -Pw -Pw -mL -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(119,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -mL -Fc -Fc -mL -Xe -Pw -Pw -mL -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(120,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -VH -Fc -Fc -Fc -Pw -Pw -Pw -mL -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(121,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -RM -RM -RM -RM -RM -Zp -Zp -Zp -Zp -Zp -Zp -Zp -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -mL -sZ -Fc -Fc -Pw -Pw -Pw -mL -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(122,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -PW -Bm -PD -Bm -Bm -Bm -Bm -Bm -PD -Bm -Bm -Bm -Bm -Bm -Bm -Bm -Bm -Bm -Bm -PW -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -mL -Cf -Fc -mL -iO -Pw -Wm -mL -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(123,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -fo -Qt -oH -Qt -qW -qX -CV -rO -qO -qK -qg -Db -tt -fo -Qt -Qt -Qt -rY -rY -fo -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -mL -mL -mL -mL -mL -mL -mL -mL -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(124,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -fo -mZ -Xx -rY -pW -qX -qg -rP -rP -rP -qg -ex -ex -tN -rY -rY -rY -vu -rY -fo -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(125,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -fo -rY -rY -rY -qX -re -qg -rP -rP -rP -qg -ex -ty -fo -Qt -Qt -va -rY -rY -fo -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(126,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -fo -rY -rY -rY -qX -rf -qg -qS -sf -qS -qg -pW -pV -PW -Bm -Bm -Bm -Bm -Bm -PW -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(127,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -fo -mo -rY -rY -qX -qv -qg -rO -qO -qK -qg -qv -qd -fo -ui -uO -vb -Wg -Wg -fo -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(128,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -fo -Ic -Qt -Qt -pW -qX -CY -rO -sh -qK -qg -qv -tz -fo -Wg -ul -ul -ul -Wg -PD -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(129,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -fo -pV -pV -qE -pV -pW -rx -rO -qO -qK -qg -qv -tB -fo -uj -ul -ul -ul -Wg -fo -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(130,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -fo -pW -ry -qg -qY -rg -qg -rQ -sj -rQ -qg -pW -pV -PW -uk -ul -ul -Bm -PW -PW -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(131,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -PD -pX -qv -qK -qO -rg -qg -rR -sl -rR -qg -oz -Rv -fo -vf -ul -PW -PW -vQ -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(132,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -fo -pZ -qv -qO -qZ -ri -qg -EX -EU -EX -qg -qg -qg -PD -ul -ul -ul -vv -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -hc -hc -hc -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(133,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -fo -qb -qv -qP -ra -rk -qO -qO -qO -qO -qO -te -qO -Ez -ul -ul -ul -vv -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -hc -hc -hc -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(134,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -fo -qx -qv -qO -CU -rm -qg -rQ -sj -rQ -qg -qg -qg -PD -ul -ul -ul -vv -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -hc -hc -hc -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(135,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -PD -qe -qv -qK -qO -rg -qg -rR -sl -rR -qg -oz -Dd -fo -ur -uQ -vc -PW -vQ -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -hc -hc -hc -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(136,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RM -fo -pW -CT -qR -qY -rg -qg -EX -EU -EX -qg -pW -Bm -PW -Bm -Bm -Bm -Bm -PW -PW -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -RM -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -hc -hc -hc -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(137,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RM -RM -fo -pV -pV -qS -pV -pW -CY -rO -qO -qK -qg -qg -hb -dX -us -dX -ix -du -du -PD -RM -RM -RM -RM -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -hc -hc -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -hc -hc -hc -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(138,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RM -RM -fo -pW -pW -pW -qX -rq -qg -rO -qO -qK -qg -qg -hb -dX -dX -dX -ix -du -du -fo -wt -wt -hc -hc -hc -Zp -Zp -Zp -Zp -Zp -Zp -Zp -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -hc -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(139,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RM -RM -fo -qg -qg -qg -qX -re -qg -rO -qO -qK -vf -Bm -Bm -Bm -Bm -Bm -Xn -Ez -Kz -vf -wu -wu -wO -wu -hc -Zp -Zp -Zp -Zp -Zp -Zp -Zp -hc -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(140,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RM -RM -fo -qg -qg -qg -qX -rs -qg -rO -qO -qK -fo -tf -yo -qM -nh -Wg -Wg -Wg -Da -fo -wu -wu -wO -wy -hc -hc -Zp -Zp -Zp -Zp -Zp -Zp -hc -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(141,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RM -RM -fo -pV -pV -pV -qX -pW -CY -rO -qO -qK -hR -DT -DT -DT -DT -yC -DT -DT -DT -fo -wu -wu -wO -wy -wy -hc -Zp -Zp -Zp -Zp -Zp -Zp -hc -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(142,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RM -RM -fo -qi -qv -qK -qg -qg -qg -rO -qO -qK -fo -DT -DT -Wg -Wg -Ly -Xn -EB -Kz -vf -wu -wu -hc -wu -wu -hc -Zp -Zp -Zp -Zp -Zp -Zp -hc -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(143,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RM -RM -PD -qj -qi -qU -qO -qO -qO -qO -qO -qK -fo -tg -DT -Wg -ux -sC -dQ -Wg -gb -fo -ww -wu -wu -wu -wu -hc -Zp -Zp -Zp -Zp -Zp -Zp -hc -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(144,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RM -RM -fo -qi -qv -qK -qg -qg -qg -rO -qO -qK -fo -ll -DT -ZC -Vd -fo -Wg -Wg -TW -fo -wu -wu -wu -wu -wu -hc -Zp -Zp -Zp -Zp -Zp -Zp -hc -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(145,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RM -RM -fo -pV -pV -pV -pV -pW -CY -rO -qO -qK -wa -cE -DT -Wg -Wg -GL -Wg -Fk -TW -fo -wx -wu -wu -wu -wu -hc -Zp -Zp -Zp -Zp -Zp -Zp -hc -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(146,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RM -RM -fo -rd -qA -qK -qg -qg -qg -rO -qO -qK -fo -pN -DT -Wg -Wg -VG -bK -pE -TW -GL -wu -wu -hc -wy -wy -hc -hc -hc -hc -hc -hc -hc -hc -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(147,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RM -RM -fo -qm -qC -qV -qO -qO -qO -qO -qO -qK -fo -tg -DT -Wg -Wg -sC -Wg -LY -TW -VG -wu -wu -wP -wy -xk -hc -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(148,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RM -RM -fo -rd -qA -qK -qg -qg -rA -rO -qO -qK -fo -th -ac -yo -RH -fo -TW -yB -TW -sC -wy -wy -wO -wy -hc -hc -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(149,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RM -RM -fo -Bm -Bm -Bm -Bm -PW -Bm -Bm -PD -Bm -vf -Bm -Bm -Bm -Bm -vf -Bm -vf -Xn -vf -wy -wI -wP -wu -hc -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(150,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RM -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -hc -hc -hc -hc -hc -hc -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(151,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RM -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(152,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RM -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(153,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RM -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(154,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(155,1,3) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} - -(1,1,4) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Cu -"} -(2,1,4) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Cv -"} -(3,1,4) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(4,1,4) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(5,1,4) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(6,1,4) = {" -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(7,1,4) = {" -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(8,1,4) = {" -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(9,1,4) = {" -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(10,1,4) = {" -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(11,1,4) = {" -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(12,1,4) = {" -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(13,1,4) = {" -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(14,1,4) = {" -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(15,1,4) = {" -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(16,1,4) = {" -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(17,1,4) = {" -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(18,1,4) = {" -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(19,1,4) = {" -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -zn -zn -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(20,1,4) = {" -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -zn -zn -VV -zn -zn -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(21,1,4) = {" -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -zn -zn -zn -zn -zn -zn -zn -zn -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(22,1,4) = {" -Ey -Ey -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -zn -zn -zn -zn -VV -Ey -Ey -zn -zn -zn -zn -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(23,1,4) = {" -Ey -Ey -Ey -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -zn -zn -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(24,1,4) = {" -Ey -Ey -Ey -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -zn -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -"} -(25,1,4) = {" -Ey -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -zn -zn -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -"} -(26,1,4) = {" -Ey -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -"} -(27,1,4) = {" -Ey -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -"} -(28,1,4) = {" -Ey -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -zn -zn -zn -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -"} -(29,1,4) = {" -Ey -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -zn -zn -zn -zn -zn -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(30,1,4) = {" -Ey -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -zn -zn -zn -zn -zn -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -zn -zn -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(31,1,4) = {" -Ey -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -zn -zn -zn -zn -zn -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -zn -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -"} -(32,1,4) = {" -Ey -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -zn -zn -zn -zn -zn -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -zn -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -"} -(33,1,4) = {" -Ey -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -zn -zn -zn -zn -zn -zn -zn -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -zn -zn -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -"} -(34,1,4) = {" -Ey -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -zn -zn -zn -zn -zn -zn -zn -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -zn -zn -zn -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -"} -(35,1,4) = {" -Ey -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -zn -zn -zn -zn -zn -zn -zn -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -zn -zn -zn -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(36,1,4) = {" -Ey -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -zn -zn -zn -zn -Ey -Ey -Ey -Ey -Ey -Ey -zn -zn -zn -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(37,1,4) = {" -Ey -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -zn -zn -zn -Ey -Ey -Ey -Ey -Ey -zn -zn -zn -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(38,1,4) = {" -Ey -Ey -Ey -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -zn -zn -zn -zn -zn -zn -zn -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(39,1,4) = {" -Ey -Ey -Ey -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -zn -zn -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(40,1,4) = {" -Ey -Ey -Ey -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(41,1,4) = {" -Ey -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(42,1,4) = {" -Ey -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(43,1,4) = {" -Ey -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(44,1,4) = {" -Ey -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -GP -GP -GP -GP -GP -GP -GP -GP -GP -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(45,1,4) = {" -Ey -VV -VV -VV -VV -VV -VV -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -GP -GP -GP -GP -GP -GP -GP -GP -GP -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(46,1,4) = {" -Ey -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -GP -GP -GP -GP -GP -GP -GP -GP -GP -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(47,1,4) = {" -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Af -Ak -Ak -Ak -AN -RI -RI -RI -Af -Ak -Ak -Ak -AN -RI -RI -fO -fO -fO -fO -fO -fO -fO -fO -fO -fO -fO -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -GP -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(48,1,4) = {" -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Ag -Zv -Zv -Zv -AO -RI -RI -RI -Ag -Zv -BG -Zv -AO -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -BZ -BZ -BZ -BZ -BZ -BZ -BZ -BZ -BZ -BZ -BZ -BZ -BZ -RI -RI -RI -RI -RI -RI -fO -GP -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(49,1,4) = {" -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Ag -Zv -Zv -AG -AO -RI -RI -RI -Ag -AG -Zv -AG -AO -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Ca -zR -yR -yR -yR -yV -Ca -zR -yR -yR -yR -yV -yQ -RI -RI -RI -RI -RI -RI -fO -GP -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(50,1,4) = {" -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Zn -qh -qh -xc -qh -qh -Zn -qh -SO -qh -Zn -qh -xc -qh -qh -qh -SO -qh -SO -qh -Zn -RI -RI -RI -RI -Ca -zv -yS -yS -yS -yI -Ca -zv -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -fO -GP -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(51,1,4) = {" -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -qh -zS -Fj -Fj -Fj -qh -li -AV -Bf -Bn -li -fN -fN -Em -qh -Aw -fN -qh -BT -fN -qh -RI -RI -RI -RI -Ca -zv -yS -yS -yS -yI -Ca -zv -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -fO -GP -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(52,1,4) = {" -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -yP -yP -RI -RI -RI -RI -RI -RI -qh -zT -Ah -Ah -Fj -qh -li -BF -BF -fN -jA -fN -fN -fN -qh -BM -BR -qh -BM -BR -qh -RI -RI -RI -RI -Ca -zv -yS -yS -yS -yI -Ca -zv -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -fO -GP -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(53,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -yP -yP -yP -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -yP -yP -RI -RI -RI -RI -RI -RI -qh -Fj -Ah -Ah -Fj -qh -li -Fq -BF -fN -li -fN -fN -fN -qh -Fq -BF -qh -Fq -BF -qh -RI -RI -RI -RI -Ca -zw -yE -yE -yE -yT -Ca -zw -yE -yE -yE -yT -yQ -RI -RI -RI -RI -RI -RI -fO -GP -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -ok -ok -ok -ok -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(54,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -yP -yP -yP -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -yP -yP -RI -RI -RI -RI -RI -RI -Zn -Fq -Ah -Am -At -Zn -li -BF -BF -fN -fv -fN -fN -fN -qh -BF -BF -qh -BF -BF -qh -RI -RI -RI -RI -yF -yF -yF -yF -yF -yF -yF -yF -yF -yF -yF -yF -yF -RI -RI -RI -RI -RI -RI -fO -GP -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -qa -dJ -dJ -iw -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(55,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -yP -yP -yP -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -yP -yP -RI -RI -RI -RI -RI -RI -qh -zU -Ah -Ah -Au -qh -li -fN -fN -fN -fv -fN -fN -fN -qh -BN -fN -qh -fN -fN -qh -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -im -hA -hA -yW -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(56,1,4) = {" -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -yP -RI -RI -RI -RI -RI -RI -qh -zX -Ah -Ah -Fj -qh -li -AX -Bh -Bo -li -wJ -fN -fN -Zn -qh -WK -Zn -AI -qh -qh -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -im -hA -hA -yW -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(57,1,4) = {" -Fa -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -yI -yQ -yQ -yQ -yQ -yQ -yQ -yQ -yQ -yQ -yQ -yQ -yQ -yQ -yQ -yQ -yQ -yQ -yQ -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -yP -RI -RI -RI -RI -RI -RI -qh -zY -Ah -Ah -Fj -qh -Zn -li -li -qh -Zn -wJ -fN -fN -Fj -Fj -Fj -sV -Fj -Fj -qh -RI -RI -RI -RI -RI -BZ -BZ -BZ -BZ -Co -BZ -BZ -BZ -BZ -BZ -BZ -zt -zt -zt -zt -zt -zt -zt -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -im -hA -hA -yW -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(58,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yR -yR -yR -yR -yR -yR -yR -yR -yR -yR -yR -yR -yR -yR -yR -yR -yR -yV -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -qh -zZ -Fj -Fj -Ei -qh -JL -JL -JL -JL -Bx -fN -fN -fN -Fj -Fj -Fj -Fj -Fj -Fj -Td -RI -RI -RI -RI -RI -zR -yR -Bu -yR -yR -yR -yR -Bu -yR -yV -yQ -zt -zt -zt -zt -zt -zt -zt -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -im -hA -hA -yW -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -"} -(59,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -qh -qh -EN -qh -qh -Zn -JL -JL -AY -JL -qh -fN -fN -fN -qh -qh -qh -qh -qh -qh -qh -RI -RI -RI -RI -RI -zv -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -yI -yQ -zt -zt -zt -zt -zt -zt -zt -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -im -hA -hA -yW -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -"} -(60,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -qh -fN -fN -fN -Fj -TI -JL -JL -JL -JL -By -fN -fN -fN -Zn -li -li -li -li -Zn -qh -RI -RI -RI -RI -RI -zv -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -yI -yQ -zt -zt -zt -zt -zt -zt -zt -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -im -hA -hA -yW -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -"} -(61,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -qh -Ac -fN -fN -Fj -TI -JL -JL -qh -JL -By -fN -fN -fN -Zn -YT -fN -ka -AB -li -qh -RI -RI -RI -RI -RI -zv -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -yI -yQ -zt -zt -zt -zt -zt -zt -zt -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -im -hA -hA -yW -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -"} -(62,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -qh -fN -fN -fN -Fj -TI -JL -JL -JL -JL -By -fN -fN -fN -Zn -Hf -wl -Br -OV -li -qh -RI -RI -RI -RI -RI -zv -fQ -fQ -fQ -fQ -fQ -fQ -fQ -fQ -yI -yQ -zt -zt -zt -zt -zt -zt -zt -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -im -hA -hA -yW -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -"} -(63,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -rB -Ad -fN -fN -Kq -JL -JL -AY -JL -JL -By -fN -fN -fN -Zn -fN -wl -Pb -OV -li -qh -RI -RI -RI -RI -RI -zw -Bu -Ce -fQ -fQ -fQ -fQ -fQ -fQ -yI -yQ -zt -zt -zt -zt -zt -zt -zt -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -tU -ea -ea -VU -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -"} -(64,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -qh -Ae -fN -fN -Kq -JL -JL -JL -qh -JL -By -fN -fN -fN -li -fN -fN -Wt -AB -li -qh -RI -RI -RI -RI -RI -yQ -yQ -zv -fQ -fQ -yX -yE -Bu -yE -yT -yQ -zt -zt -zt -zt -zt -zt -zt -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -ok -ok -ok -ok -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -"} -(65,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -qh -wJ -fN -fN -Fj -TI -JL -JL -JL -JL -By -fN -fN -fN -li -Lh -fN -AB -AB -li -qh -RI -RI -RI -RI -RI -yQ -yQ -zw -yE -yE -yT -yF -yF -yF -yF -yF -RI -RI -RI -RI -RI -RI -RI -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -"} -(66,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Zn -qh -fN -fN -Fj -Fj -AS -AS -AS -AS -AS -fN -fN -fN -Zn -li -li -er -li -Zn -qh -RI -RI -RI -BZ -BZ -BZ -BZ -Cg -BZ -BZ -BZ -BZ -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -"} -(67,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -qh -Lh -fN -Fj -Fj -Fj -Ba -Fj -Fj -Fj -fN -fN -fN -Fj -Fj -Fj -Fj -Fj -Fj -qh -RI -RI -RI -Ca -zR -yR -yR -Tx -yR -yR -yR -yV -yQ -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -"} -(68,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -qh -qh -qh -qh -CO -qh -qh -qh -EO -qh -qh -fN -fN -Fj -Fj -Fj -Ba -Fj -Fj -Td -RI -RI -RI -Ca -zv -Zf -xK -Sz -HZ -xK -Zf -yI -yQ -zt -zR -yR -yR -yR -yR -yR -yR -yV -zt -fO -fO -fO -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -"} -(69,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yE -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -qh -qh -qh -Av -fN -Jo -qh -Av -fN -Jo -qh -fN -fN -Zn -li -nv -li -li -qh -qh -RI -RI -RI -Ca -zv -Zf -xK -xK -PT -xK -Zf -yI -yQ -zt -zv -yS -yS -yS -yS -yS -yS -yI -zt -fO -fO -fO -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(70,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yU -yX -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Zn -qh -qh -Aw -fN -Ej -qh -Aw -fN -El -qh -fN -fN -li -FJ -yK -sr -li -qh -qh -RI -RI -RI -Ca -zv -lB -xK -xK -MO -xK -Kk -yI -yQ -zt -zv -yS -yS -yS -yS -yS -yS -yI -zt -fO -fO -fO -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(71,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -yQ -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Zn -qh -qh -cP -qh -qh -qh -cP -qh -qh -qh -qh -li -BF -BF -yK -li -qh -qh -RI -RI -RI -Ca -Tx -IW -xK -xK -xK -xK -xK -Tx -yQ -zt -zv -yS -yS -yS -yS -yS -yS -yI -zt -fO -fO -fO -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(72,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -yP -yP -yP -yP -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -li -Fq -BF -yK -li -qh -qh -RI -RI -RI -Ca -zv -SK -xK -xK -xK -xK -xK -yI -yQ -zt -zv -yS -yS -yS -yS -yS -yS -yI -zt -fO -fO -fO -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(73,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -yP -yP -yP -yP -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -li -BP -BF -lU -li -qh -qh -RI -RI -RI -Ca -zv -Zf -xK -xK -ZO -xK -Cq -yI -yQ -zt -zw -yE -yE -yE -yE -yE -yE -yT -zt -fO -fO -fO -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(74,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -yP -yP -yP -yP -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -qh -qh -kN -qh -qh -qh -Zn -RI -RI -RI -Ca -zw -yE -yE -Tx -yE -yE -yE -yT -yQ -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -fO -fO -fO -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(75,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -yP -yP -yP -yP -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yF -yF -yF -yF -yF -yF -yF -yF -yF -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -fO -fO -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(76,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -yP -yP -yP -yP -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -fO -fO -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(77,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -yP -yP -yP -yP -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -fO -fO -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(78,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -yP -yP -yP -yP -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zt -zt -zt -zt -RI -RI -RI -zt -zt -zt -zt -zt -zt -zt -zt -zt -RI -BZ -BZ -BZ -BZ -BZ -BZ -BZ -BZ -BZ -BZ -BZ -RI -RI -RI -RI -RI -RI -RI -RI -fO -fO -fO -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -"} -(79,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -yP -yP -yP -yP -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zR -yR -yV -zt -RI -RI -RI -zt -zt -zt -zt -zt -zt -zt -zt -zt -RI -zR -yR -yR -Ch -yR -yR -yR -yR -yV -BZ -BZ -RI -RI -RI -RI -RI -RI -RI -RI -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -VV -VV -VV -VV -VV -VV -Ey -"} -(80,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -yP -yP -yP -yP -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zv -fc -yI -zt -RI -RI -RI -zt -zt -zu -yR -yR -yR -yV -zt -zt -RI -zv -EV -vW -nP -EV -vW -vW -EV -yI -BZ -BZ -RI -RI -RI -RI -RI -RI -RI -RI -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -VV -VV -VV -VV -VV -Ey -"} -(81,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -yP -yP -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zt -zw -zt -yT -zt -RI -RI -RI -zt -zt -zv -aO -aO -aO -yI -zt -zt -RI -zv -vW -xX -nP -Ci -nP -Cb -vW -yI -BZ -BZ -RI -RI -RI -RI -RI -RI -RI -RI -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(82,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -yP -yP -RI -RI -RI -RI -RI -RI -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -BC -BC -BC -BC -BC -zt -BS -Qq -GJ -aO -yI -zt -zt -RI -zv -vW -nP -nP -nP -nP -nP -vW -yI -BZ -BZ -RI -RI -RI -RI -RI -RI -RI -RI -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(83,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -yP -yP -RI -RI -RI -RI -RI -RI -zt -zR -yR -yR -yR -yR -yR -yR -yV -zt -RI -RI -RI -RI -zt -zt -zv -aO -Qq -aO -yI -zt -zt -RI -zv -vW -nP -nP -Cm -nP -nP -nP -Cr -BZ -BZ -Cs -BZ -BZ -BZ -RI -RI -RI -RI -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(84,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -yP -yP -RI -RI -RI -RI -RI -zt -zt -zv -MO -MO -eQ -ZE -IF -eQ -yI -zt -RI -RI -RI -RI -zt -zt -zv -aO -BX -aO -yI -zt -zt -RI -zv -vW -Cb -nP -nP -nP -GN -vW -yI -BZ -BZ -zR -yR -yV -BZ -RI -RI -RI -RI -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(85,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -yP -yP -yP -yP -yP -RI -RI -RI -RI -zt -zt -zR -yS -Ap -Fc -eQ -OM -fQ -yX -yT -zt -RI -RI -RI -RI -zt -zt -zv -aO -oA -aO -yI -zt -zt -RI -zv -EV -vW -vW -EV -vW -vW -EV -yI -BZ -BZ -zv -yS -yI -BZ -RI -RI -RI -RI -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(86,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zR -yS -MO -Fc -Fc -eQ -ZE -eQ -yI -zt -zt -RI -RI -RI -RI -zt -zt -zw -yE -yE -yE -yT -zt -zt -RI -zv -yS -yS -yS -yS -yS -yS -yS -yI -BZ -BZ -zv -yS -yI -BZ -RI -RI -RI -RI -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(87,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zv -MO -Fc -Fc -Fc -yX -pw -zw -yT -zt -zt -RI -RI -RI -RI -zt -zt -zt -zt -zt -zt -zt -zt -zt -RI -zw -yE -yE -yE -yE -yE -yE -yE -yT -BZ -BZ -zw -yE -yT -BZ -RI -RI -RI -RI -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(88,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -rw -rw -hw -hw -hw -hw -UA -hw -hw -hw -RI -RI -RI -RI -RI -RI -RI -zt -zv -MO -Fc -Fc -Ay -yI -zt -zt -zt -zt -zt -RI -RI -RI -RI -zt -zt -zt -zt -zt -zt -zt -zt -zt -RI -BZ -BZ -BZ -BZ -BZ -BZ -BZ -BZ -BZ -BZ -BZ -BZ -BZ -BZ -BZ -RI -RI -RI -RI -fO -fO -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(89,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -rw -hw -hw -Ji -zl -gJ -tv -FS -CS -hw -hw -RI -RI -RI -RI -RI -RI -zt -zw -yE -pw -yE -yE -yT -zt -zt -zt -zt -zt -RI -RI -RI -RI -zt -zt -zt -zt -zt -zt -zt -zt -zt -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -GP -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(90,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -hw -hw -tv -pA -pA -pA -pA -pA -tv -bL -hw -hw -RI -RI -RI -RI -RI -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -RI -RI -RI -RI -RI -zt -zt -zt -zt -zt -zt -zt -zt -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -GP -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(91,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -hw -NG -tv -pA -pA -My -pA -pA -bL -bL -bL -hw -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -GP -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -ok -ok -ok -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(92,1,4) = {" -Fa -Fa -Fa -Fa -iZ -iZ -iZ -iZ -iZ -iZ -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -yQ -RI -RI -RI -RI -hw -Mu -Mu -pA -pA -bL -kF -bL -bL -zq -zs -hw -RI -RI -RI -RI -RI -zK -zL -zL -zL -zL -zL -AL -zL -zL -zL -zL -zK -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -fO -GP -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -qa -dJ -iw -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(93,1,4) = {" -Fa -Fa -Fa -Fa -yE -yE -yE -yE -yE -yE -yE -yE -yE -yE -yE -yE -yE -yE -yE -yE -yE -yE -yE -yE -yE -yT -yQ -RI -RI -RI -RI -hw -vH -bL -bL -bL -bL -zj -zj -bL -qo -qo -LF -RI -RI -RI -RI -RI -zL -zL -zL -zR -yR -yR -yR -yR -yV -zL -zL -zL -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -fO -GP -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -im -hA -yW -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(94,1,4) = {" -Fa -Fa -Fa -Fa -yF -yF -yF -yF -yF -yF -yF -yF -yF -yF -yF -yF -yF -yF -yF -yF -yF -yF -yF -yF -yF -yF -yQ -RI -RI -RI -RI -hw -zc -bL -bL -bL -bL -zj -zj -kF -qo -qo -hw -RI -RI -RI -RI -RI -zL -zL -zL -zv -yS -yS -yS -yS -yI -zL -zL -zL -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -fO -GP -GP -GP -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -im -hA -yW -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(95,1,4) = {" -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -rn -px -bL -zf -bL -bL -zj -zj -bL -qo -qo -hw -RI -RI -RI -RI -RI -zL -zL -zL -zv -yS -yS -yS -yS -yI -zL -zL -zL -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -im -hA -yW -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(96,1,4) = {" -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -hw -px -bL -zg -zj -kF -zj -zo -bL -qo -qo -hw -RI -RI -RI -RI -RI -zO -zO -zO -zv -yS -yS -yS -yS -yI -Bi -zO -zO -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -im -hA -yW -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(97,1,4) = {" -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -hw -px -bL -zj -zj -bL -zj -zp -bL -WW -Gp -LF -RI -RI -RI -RI -RI -zO -zO -zO -zv -yS -yS -yS -yS -yI -zO -zO -zO -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -im -hA -yW -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(98,1,4) = {" -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -hw -ze -bL -bL -bL -bL -Kx -bL -bL -Gm -TY -hw -RI -RI -RI -RI -RI -zO -zO -zO -zw -yE -yE -yE -yE -yT -zO -Bp -zO -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -im -hA -yW -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(99,1,4) = {" -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -hw -hw -fp -bL -yN -Mu -Mu -Mu -bL -Ll -hw -hw -RI -RI -RI -RI -RI -zO -zO -zO -EF -zO -zO -zO -zO -zO -zO -zO -zO -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -It -It -It -It -It -It -It -It -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -im -hA -yW -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(100,1,4) = {" -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -hw -hw -bL -sp -xe -XY -oi -bL -hw -hw -RI -RI -RI -RI -RI -RI -zK -zO -zO -zO -zO -zO -zO -zO -zO -zO -zO -zO -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -It -RC -ZG -Gu -ZG -ZG -Wo -It -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -im -hA -yW -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(101,1,4) = {" -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -hw -hw -hw -hw -hw -hw -hw -hw -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -zt -EH -zt -zt -Aq -zt -fO -zL -zL -fO -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -It -Gt -Gs -Qq -Qq -Qq -ns -It -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -im -hA -yW -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(102,1,4) = {" -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -zt -zt -Aq -zt -zt -zt -fO -zL -zL -fO -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -It -Gt -Qq -oA -oA -Qq -ns -It -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -im -hA -yW -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(103,1,4) = {" -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -GI -zt -zt -zt -EJ -zt -zK -zL -zL -zK -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -It -Gt -Qq -oA -oA -Qq -ns -It -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -im -hA -yW -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(104,1,4) = {" -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -fO -gn -gn -gn -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -It -Gt -Qq -oA -oA -Qq -ns -It -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -im -ea -VU -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(105,1,4) = {" -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -fc -fO -gn -fO -fO -fO -gn -fO -fO -fO -gn -fO -fO -fO -gn -fO -gn -fO -eQ -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -It -Gt -CM -Qq -Qq -Gv -ns -It -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -ok -ok -ok -ok -ok -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(106,1,4) = {" -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -fO -zx -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -eQ -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -It -WJ -OL -OL -OL -OL -Jn -It -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(107,1,4) = {" -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -fc -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -eQ -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -It -It -It -It -It -It -It -It -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(108,1,4) = {" -RI -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -fO -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -eQ -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(109,1,4) = {" -RI -RI -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -fO -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -eQ -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(110,1,4) = {" -RI -RI -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -fO -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -eQ -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(111,1,4) = {" -RI -RI -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -fO -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -eQ -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(112,1,4) = {" -RI -RI -RI -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -fO -gn -zG -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -eQ -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(113,1,4) = {" -RI -RI -RI -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -fO -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -gn -fO -eQ -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(114,1,4) = {" -RI -RI -RI -RI -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -fO -fO -gn -fO -gn -fO -gn -fO -wN -wN -wN -fO -gn -fO -gn -fO -gn -fO -eQ -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(115,1,4) = {" -RI -RI -RI -RI -RI -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -eQ -fO -fO -fO -gn -fO -fO -fO -wN -wN -AD -fO -gn -fO -fO -fO -gn -fO -eQ -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(116,1,4) = {" -RI -RI -RI -RI -RI -RI -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fO -fO -gn -gn -Vo -gn -PE -gn -PE -wN -wN -wN -gn -gn -Vo -gn -Bq -gn -eQ -eQ -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(117,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(118,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(119,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(120,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(121,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Fa -Fa -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(122,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(123,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zu -yR -yR -yR -yR -yR -yR -yR -yR -yR -yR -yR -yR -yR -yR -Bu -yR -yV -zt -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(124,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zv -yS -yS -zH -zH -zH -zH -zH -zH -zH -zH -zH -zH -zH -zH -RX -dv -CB -vq -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(125,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zv -yS -yS -zH -zJ -dX -dX -dX -dX -dX -EQ -RX -RX -RX -RX -RX -zH -CB -vq -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(126,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zv -yS -yS -zH -zJ -dX -rY -cs -dX -dX -EQ -RX -zH -zH -zH -zH -zH -CB -vq -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(127,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zv -yS -yS -zH -zJ -dX -dX -dX -dX -dX -EQ -RX -zH -Bc -Bc -Bc -Bc -Bc -vq -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(128,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zv -yS -yS -zH -zJ -dX -dX -dX -dX -dX -EQ -RX -zH -Bc -Bl -fV -Bz -Bc -CC -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(129,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zv -yS -yS -zH -zJ -dX -dX -dX -dX -dX -EQ -RX -AU -fV -fV -fV -fV -BE -vq -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(130,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zv -yS -yS -zH -zJ -dX -rY -cs -dX -dX -EQ -RX -zH -Bc -fV -Bv -BA -Bc -CC -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(131,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zv -yS -yS -zH -zJ -dX -dX -dX -dX -dX -EQ -RX -zH -Bc -Bc -Bc -Bc -Bc -vq -RM -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(132,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zv -yS -yS -zH -zJ -dX -dX -dX -dX -dX -EQ -RX -zH -yS -yS -yS -yS -yI -zt -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(133,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zv -yS -yS -zH -zJ -dX -dX -dX -dX -dX -EQ -RX -zH -yS -yS -yS -yS -yI -zt -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(134,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zv -yS -yS -zH -zJ -dX -rY -cs -dX -dX -EQ -RX -zH -yS -yS -yS -yS -yI -zt -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(135,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zv -yS -yS -zH -zJ -dX -dX -dX -dX -dX -EQ -RX -zH -yS -yS -yS -yS -yI -zt -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(136,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -vf -Bm -pC -Bm -Bm -vf -dX -dX -dX -dX -dX -EQ -RX -zH -yS -yS -yS -yS -yI -zt -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(137,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fo -Ek -zz -dX -cH -fo -zP -zP -zP -zP -zP -EQ -RX -zH -yS -yS -yS -yS -yI -zt -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(138,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fo -du -zz -zA -Aa -fo -zH -RX -RX -RX -RX -RX -RX -zH -yS -yS -yS -yS -yI -zt -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -eQ -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -VV -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(139,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -vf -du -vf -ql -Bm -vf -zH -RX -RX -RX -RX -RX -RX -zH -yS -yS -yS -yS -yI -zt -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(140,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fo -du -du -du -du -fo -zH -zH -zH -zH -zH -zH -zH -zH -yS -yS -yS -yS -yI -zt -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(141,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fo -du -du -du -du -fo -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -zt -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(142,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Ly -ds -Sm -Aa -Aa -fo -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -zt -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(143,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fo -Ai -Vl -Aa -Aa -fo -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -zt -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(144,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Xk -SV -rK -Aa -Aa -fo -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -zt -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(145,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -fo -Dw -As -zB -Il -fo -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -zt -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(146,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -vf -Xn -Ly -Kz -Bm -vf -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -zt -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(147,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zv -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yS -yI -zt -RI -RI -RI -RI -RI -RI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(148,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zw -yE -yE -yE -yE -yE -yE -yE -yE -yE -yE -yE -yE -yE -yE -yE -yE -yT -zt -RI -RI -RI -RI -RI -RI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(149,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -zt -RI -RI -RI -RI -RI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(150,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -RI -RI -RI -RI -RI -RI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(151,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(152,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(153,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(154,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} -(155,1,4) = {" -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -RI -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Fa -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -Ey -"} diff --git a/_maps/map_files/roguetest/roguetest.dmm b/_maps/map_files/roguetest/roguetest.dmm index ee74580f27..968099b9d2 100644 --- a/_maps/map_files/roguetest/roguetest.dmm +++ b/_maps/map_files/roguetest/roguetest.dmm @@ -145,9 +145,9 @@ icon_state = "tablewood2"; dir = 10 }, -/obj/item/clothing/suit/roguetown/armor/leather/studded, -/obj/item/clothing/suit/roguetown/armor/leather/studded, -/obj/item/clothing/suit/roguetown/armor/leather/studded, +/obj/item/clothing/suit/roguetown/armor/leather/splint, +/obj/item/clothing/suit/roguetown/armor/leather/splint, +/obj/item/clothing/suit/roguetown/armor/leather/splint, /obj/item/clothing/suit/roguetown/armor/leather, /obj/item/clothing/suit/roguetown/armor/leather, /obj/item/clothing/suit/roguetown/armor/leather, @@ -363,7 +363,7 @@ /turf/open/floor/rogue/carpet, /area/rogue/indoors) "aZ" = ( -/obj/item/rogueweapon/woodstaff, +/obj/item/rogueweapon/polearm/woodstaff, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors) "ba" = ( @@ -484,7 +484,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/outdoors) "bo" = ( -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors) "bp" = ( @@ -508,9 +508,9 @@ icon_state = "tablewood2"; dir = 10 }, -/obj/item/rogueweapon/greatsword/zwei, -/obj/item/rogueweapon/greatsword/zwei, -/obj/item/rogueweapon/greatsword/zwei, +/obj/item/rogueweapon/sword/long/greatsword/zwei, +/obj/item/rogueweapon/sword/long/greatsword/zwei, +/obj/item/rogueweapon/sword/long/greatsword/zwei, /turf/open/floor/rogue/cobble, /area/rogue/indoors) "bu" = ( @@ -528,8 +528,8 @@ icon_state = "tablewood2"; dir = 10 }, -/obj/item/rogueweapon/eaglebeak/lucerne, -/obj/item/rogueweapon/eaglebeak/lucerne, +/obj/item/rogueweapon/polearm/eaglebeak/lucerne, +/obj/item/rogueweapon/polearm/eaglebeak/lucerne, /turf/open/floor/rogue/cobble, /area/rogue/indoors) "bw" = ( @@ -537,8 +537,8 @@ icon_state = "tablewood2"; dir = 10 }, -/obj/item/rogueweapon/halberd/bardiche, -/obj/item/rogueweapon/halberd/bardiche, +/obj/item/rogueweapon/polearm/halberd/bardiche, +/obj/item/rogueweapon/polearm/halberd/bardiche, /turf/open/floor/rogue/cobble, /area/rogue/indoors) "bx" = ( @@ -546,8 +546,8 @@ icon_state = "tablewood2"; dir = 10 }, -/obj/item/rogueweapon/spear, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, +/obj/item/rogueweapon/polearm/spear, /turf/open/floor/rogue/cobble, /area/rogue/indoors) "by" = ( @@ -681,9 +681,9 @@ icon_state = "tablewood2"; dir = 10 }, -/obj/item/rogueweapon/stoneaxe, -/obj/item/rogueweapon/stoneaxe, -/obj/item/rogueweapon/stoneaxe, +/obj/item/rogueweapon/axe/stone, +/obj/item/rogueweapon/axe/stone, +/obj/item/rogueweapon/axe/stone, /turf/open/floor/rogue/cobble, /area/rogue/indoors) "bN" = ( @@ -691,12 +691,12 @@ icon_state = "tablewood2"; dir = 10 }, -/obj/item/rogueweapon/woodcut, -/obj/item/rogueweapon/woodcut, -/obj/item/rogueweapon/woodcut, -/obj/item/rogueweapon/woodcut, -/obj/item/rogueweapon/woodcut, -/obj/item/rogueweapon/woodcut, +/obj/item/rogueweapon/axe/iron, +/obj/item/rogueweapon/axe/iron, +/obj/item/rogueweapon/axe/iron, +/obj/item/rogueweapon/axe/iron, +/obj/item/rogueweapon/axe/iron, +/obj/item/rogueweapon/axe/iron, /turf/open/floor/rogue/cobble, /area/rogue/indoors) "bO" = ( @@ -704,11 +704,11 @@ icon_state = "tablewood2"; dir = 10 }, -/obj/item/rogueweapon/battle, -/obj/item/rogueweapon/battle, -/obj/item/rogueweapon/battle, -/obj/item/rogueweapon/battle, -/obj/item/rogueweapon/battle, +/obj/item/rogueweapon/axe/battle, +/obj/item/rogueweapon/axe/battle, +/obj/item/rogueweapon/axe/battle, +/obj/item/rogueweapon/axe/battle, +/obj/item/rogueweapon/axe/battle, /turf/open/floor/rogue/cobble, /area/rogue/indoors) "bP" = ( @@ -768,10 +768,10 @@ icon_state = "tablewood2"; dir = 10 }, -/obj/item/rogueweapon/greatsword, -/obj/item/rogueweapon/greatsword, -/obj/item/rogueweapon/greatsword, -/obj/item/rogueweapon/greatsword, +/obj/item/rogueweapon/sword/long/greatsword, +/obj/item/rogueweapon/sword/long/greatsword, +/obj/item/rogueweapon/sword/long/greatsword, +/obj/item/rogueweapon/sword/long/greatsword, /obj/item/roguekey/lord, /turf/open/floor/rogue/cobble, /area/rogue/indoors) @@ -793,9 +793,9 @@ icon_state = "tablewood2"; dir = 10 }, -/obj/item/rogueweapon/eaglebeak, -/obj/item/rogueweapon/eaglebeak, -/obj/item/rogueweapon/eaglebeak, +/obj/item/rogueweapon/polearm/eaglebeak, +/obj/item/rogueweapon/polearm/eaglebeak, +/obj/item/rogueweapon/polearm/eaglebeak, /turf/open/floor/rogue/cobble, /area/rogue/indoors) "ca" = ( @@ -803,8 +803,8 @@ icon_state = "tablewood2"; dir = 10 }, -/obj/item/rogueweapon/halberd, -/obj/item/rogueweapon/halberd, +/obj/item/rogueweapon/polearm/halberd, +/obj/item/rogueweapon/polearm/halberd, /turf/open/floor/rogue/cobble, /area/rogue/indoors) "cb" = ( @@ -812,9 +812,9 @@ icon_state = "tablewood2"; dir = 10 }, -/obj/item/rogueweapon/spear/billhook, -/obj/item/rogueweapon/spear/billhook, -/obj/item/rogueweapon/spear/billhook, +/obj/item/rogueweapon/polearm/spear/billhook, +/obj/item/rogueweapon/polearm/spear/billhook, +/obj/item/rogueweapon/polearm/spear/billhook, /turf/open/floor/rogue/cobble, /area/rogue/indoors) "cc" = ( @@ -822,9 +822,9 @@ icon_state = "tablewood2"; dir = 10 }, -/obj/item/rogueweapon/huntingknife/idagger, -/obj/item/rogueweapon/huntingknife/idagger, -/obj/item/rogueweapon/huntingknife/idagger, +/obj/item/rogueweapon/knife/dagger, +/obj/item/rogueweapon/knife/dagger, +/obj/item/rogueweapon/knife/dagger, /turf/open/floor/rogue/cobble, /area/rogue/indoors) "cd" = ( @@ -832,10 +832,10 @@ icon_state = "tablewood2"; dir = 10 }, -/obj/item/rogueweapon/huntingknife/idagger/silver, -/obj/item/rogueweapon/huntingknife/idagger/silver, -/obj/item/rogueweapon/huntingknife/idagger/silver, -/obj/item/rogueweapon/huntingknife/idagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, /turf/open/floor/rogue/cobble, /area/rogue/indoors) "ce" = ( @@ -843,11 +843,11 @@ icon_state = "tablewood2"; dir = 10 }, -/obj/item/rogueweapon/huntingknife/idagger/steel, -/obj/item/rogueweapon/huntingknife/idagger/steel, -/obj/item/rogueweapon/huntingknife/idagger/steel, -/obj/item/rogueweapon/huntingknife/idagger/steel, -/obj/item/rogueweapon/huntingknife/idagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, /turf/open/floor/rogue/cobble, /area/rogue/indoors) "cf" = ( @@ -886,8 +886,8 @@ icon_state = "tablewood2"; dir = 10 }, -/obj/item/rogueweapon/sword/cutlass, -/obj/item/rogueweapon/sword/cutlass, +/obj/item/rogueweapon/sword/sabre/cutlass, +/obj/item/rogueweapon/sword/sabre/cutlass, /turf/open/floor/rogue/cobble, /area/rogue/indoors) "cj" = ( @@ -914,7 +914,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors) "cm" = ( -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, /turf/open/floor/rogue/cobble, /area/rogue/outdoors) "cn" = ( @@ -1114,7 +1114,7 @@ /turf/open/floor/rogue/carpet/lord/right, /area/rogue/indoors) "hP" = ( -/obj/item/rogueweapon/woodstaff/aries, +/obj/item/rogueweapon/polearm/woodstaff/aries, /turf/open/floor/rogue/cobble, /area/rogue/outdoors) "qw" = ( diff --git a/_maps/map_files/roguetown/otherz/roguehamlet.dmm b/_maps/map_files/roguetown/otherz/roguehamlet.dmm index 04bed4fb11..fcfe400455 100644 --- a/_maps/map_files/roguetown/otherz/roguehamlet.dmm +++ b/_maps/map_files/roguetown/otherz/roguehamlet.dmm @@ -29,7 +29,7 @@ /area/rogue/outdoors/exposed/under/basement) "abA" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/naturalstone, /area/rogue/under/town/basement) "act" = ( @@ -41,12 +41,12 @@ /turf/closed/wall/mineral/rogue/decostone/fluffstone, /area/rogue/outdoors/town/roofs) "acA" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/wood/nosmooth, /area/rogue/indoors/town) "ada" = ( /obj/structure/flora/roguegrass/thorn_bush, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/grass, @@ -216,7 +216,7 @@ /turf/open/floor/rogue/greenstone, /area/rogue) "ary" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/mineral_door/bars{ @@ -257,17 +257,17 @@ /obj/item/reagent_containers/food/snacks/produce/apple, /obj/item/reagent_containers/food/snacks/produce/apple, /obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, +/obj/item/reagent_containers/food/snacks/produce/jacksberry, +/obj/item/reagent_containers/food/snacks/produce/jacksberry, +/obj/item/reagent_containers/food/snacks/produce/jacksberry, +/obj/item/reagent_containers/food/snacks/produce/jacksberry, +/obj/item/reagent_containers/food/snacks/produce/jacksberry, +/obj/item/reagent_containers/food/snacks/produce/jacksberry, +/obj/item/reagent_containers/food/snacks/produce/jacksberry, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/exposed/under/basement) "asF" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -304,7 +304,7 @@ first_time_text = "Blackwine Manor" }) "auJ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/concrete, @@ -344,7 +344,7 @@ /turf/open/floor/rogue/ruinedwood/chevron, /area/rogue/indoors/town/church/chapel) "awl" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/hexstone, @@ -375,7 +375,7 @@ "awU" = ( /obj/structure/closet/crate/roguecloset/inn/chest, /obj/item/storage/belt/rogue/pouch/coins/poor, -/obj/item/rogueweapon/huntingknife/stoneknife, +/obj/item/rogueweapon/knife/stone, /obj/item/reagent_containers/food/snacks/rogue/crackerscooked, /turf/open/floor/rogue/naturalstone, /area/rogue/under/town/sewer) @@ -416,7 +416,7 @@ pixel_y = 32 }, /obj/item/roguestatue/silver, -/obj/item/rogueweapon/woodstaff, +/obj/item/rogueweapon/polearm/woodstaff, /turf/open/floor/rogue/tile, /area/rogue/indoors/town/magician) "azg" = ( @@ -509,13 +509,13 @@ pixel_y = 10; pixel_x = -11 }, -/obj/item/rogueweapon/huntingknife/idagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, /turf/open/floor/rogue/tile{ icon_state = "chess" }, /area/rogue/indoors/town/shop) "aFF" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/effect/decal/cleanable/oil, @@ -555,7 +555,7 @@ }) "aHC" = ( /obj/structure/displaycase, -/obj/item/rogueweapon/sword/rapier/lord, +/obj/item/rogueweapon/sword/sabre/lord, /turf/open/floor/carpet/purple, /area/rogue/indoors/town/vault) "aHN" = ( @@ -636,7 +636,7 @@ "aNH" = ( /obj/structure/flora/roguegrass/thorn_bush, /obj/structure/flora/roguegrass/bush/wall/tall, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/grass, @@ -652,10 +652,10 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/exposed/church) "aOR" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/roguemachine/scomm, @@ -689,7 +689,7 @@ icon_state = "largetable"; dir = 10 }, -/obj/item/rogueweapon/huntingknife, +/obj/item/rogueweapon/knife/hunting, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/cell) "aRI" = ( @@ -868,10 +868,10 @@ /area/rogue/indoors/town/garrison) "baL" = ( /obj/structure/mineral_door/bars, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -905,7 +905,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/garrison) "bbH" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -927,7 +927,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "bct" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/closed/wall/mineral/rogue/decowood, /area/rogue/indoors) "bcP" = ( @@ -1219,7 +1219,7 @@ /turf/open/transparent/openspace, /area/rogue/indoors/town) "buA" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/flora/roguegrass, @@ -1237,7 +1237,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) "bvE" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -1301,7 +1301,7 @@ /area/rogue/indoors/town/garrison) "bzx" = ( /obj/structure/fluff/statue/small, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/carpet, @@ -1349,13 +1349,13 @@ icon_state = "torchwall1"; dir = 8 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/cobblerock, /area/rogue/indoors/town) "bCh" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -1458,7 +1458,7 @@ /turf/open/transparent/openspace, /area/rogue/indoors/town/church/chapel) "bJm" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -1691,7 +1691,7 @@ icon_state = "longtable"; dir = 1 }, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /obj/item/clothing/head/roguetown/cookhat, /turf/open/floor/rogue/tile/checker, /area/rogue/indoors/town/manor{ @@ -1722,7 +1722,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/shop) "bVR" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt, @@ -1736,7 +1736,7 @@ /area/rogue/indoors/town/cell) "bWx" = ( /obj/structure/closet/crate/chest, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/hexstone, @@ -1787,7 +1787,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/exposed/church) "bXK" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/twig, /area/rogue/indoors/shelter/bog) "bXT" = ( @@ -1922,14 +1922,14 @@ "cio" = ( /obj/structure/flora/roguegrass, /obj/structure/fluff/statue/pillar, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/exposed/town) "ciJ" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/grass, /area/rogue/outdoors/rtfield{ ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); @@ -2025,7 +2025,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "cpa" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/grass, /area/rogue/outdoors/exposed/manorgarri) "cpC" = ( @@ -2075,7 +2075,7 @@ /obj/effect/decal/cleanable/dirt/cobweb, /obj/structure/closet/crate/roguecloset/inn/chest, /obj/item/flashlight/flare/torch/lantern, -/obj/item/rogueweapon/stoneaxe/woodcut/steel, +/obj/item/rogueweapon/axe/iron/steel, /turf/open/floor/rogue/concrete, /area/rogue/under/cave/spider) "cte" = ( @@ -2124,7 +2124,7 @@ /area/rogue/outdoors/exposed/manorgarri) "cxi" = ( /obj/effect/spawner/roguemap/tree, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/grass, @@ -2139,7 +2139,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/under/town/basement) "cya" = ( -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /obj/structure/closet/crate/roguecloset/lord{ lockid = "nightman" }, @@ -2164,7 +2164,7 @@ first_time_text = "SCREAMING MOUNTAIN MINESHAFT" }) "czi" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/carpet, @@ -2180,7 +2180,7 @@ /area/rogue/indoors/town/tavern) "cBj" = ( /obj/structure/well/fountain, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/greenstone, @@ -2203,7 +2203,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors) "cCn" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -2230,7 +2230,7 @@ /turf/closed/wall/mineral/rogue/wooddark/window, /area/rogue/outdoors/exposed/under/basement) "cCJ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/wood/nosmooth, @@ -2322,16 +2322,16 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/under/town/sewer) "cHD" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/exposed/under/basement) "cHZ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/closet/crate/roguecloset/inn/chest, @@ -2379,7 +2379,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "cKt" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/cobble/mossy, @@ -2392,7 +2392,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/cell) "cLh" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/woodturned/nosmooth, /area/rogue/indoors/town/shop) "cLS" = ( @@ -2408,7 +2408,7 @@ /obj/item/neuFarm/seed/oat, /obj/item/neuFarm/seed/apple, /obj/item/neuFarm/seed/apple, -/obj/item/neuFarm/seed/pipeweed, +/obj/item/neuFarm/seed/westleach, /obj/item/clothing/mask/cigarette/pipe/westman, /obj/structure/closet/crate/roguecloset/inn/chest, /turf/open/floor/rogue/dirt/road, @@ -2431,7 +2431,7 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/exposed/manorgarri) "cPt" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/machinery/light/rogue/firebowl/stump, @@ -2476,7 +2476,7 @@ /obj/structure/table/vtable, /obj/structure/mirror, /obj/item/natural/cloth, -/obj/item/rogueweapon/huntingknife/idagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/manor{ first_time_text = "Blackwine Manor" @@ -2770,10 +2770,10 @@ name = "catacombswet" }) "dqx" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt, @@ -2813,7 +2813,7 @@ /turf/open/floor/rogue/tile, /area/rogue/indoors/town/magician) "drL" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -2871,7 +2871,7 @@ /area/rogue/indoors/town) "dty" = ( /obj/structure/flora/rock/pile, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/grass, @@ -2953,14 +2953,14 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "dxL" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "dxW" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, @@ -3135,7 +3135,7 @@ /area/rogue/indoors/shelter/town/dwarf) "dGK" = ( /obj/structure/chair/wood/rogue/fancy, -/obj/effect/landmark/start/lady, +/obj/effect/landmark/start/consort, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/manor{ first_time_text = "Blackwine Manor" @@ -3237,7 +3237,7 @@ /obj/item/storage/belt/rogue/pouch/coins/poor, /obj/item/storage/belt/rogue/leather/rope, /obj/item/clothing/shoes/roguetown/boots/leather, -/obj/item/rogueweapon/huntingknife/idagger, +/obj/item/rogueweapon/knife/dagger, /turf/open/floor/rogue/naturalstone, /area/rogue/under/town/sewer) "dMo" = ( @@ -3347,7 +3347,7 @@ "dRf" = ( /obj/structure/rack/rogue, /obj/item/rogueweapon/shield/wood, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors) "dSD" = ( @@ -3483,7 +3483,7 @@ }, /area/rogue/indoors/town/vault) "dXj" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/flora/roguegrass, @@ -3587,7 +3587,7 @@ first_time_text = "PLAGUE DISTRICT" }) "ebW" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/wood/nosmooth, /area/rogue/indoors/town/shop) "ecu" = ( @@ -3667,7 +3667,7 @@ /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) "egz" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/tavern) "ehg" = ( @@ -3733,7 +3733,7 @@ /turf/closed/wall/mineral/rogue/stone, /area/rogue/under/town/basement) "ejS" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -3783,7 +3783,7 @@ /area/rogue/indoors/town) "elO" = ( /obj/structure/bed/rogue/wooldouble, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/item/reagent_containers/glass/bottle/rogue/wine, @@ -3797,7 +3797,7 @@ /turf/open/floor/rogue/carpet, /area/rogue/indoors/town) "enH" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -3896,11 +3896,11 @@ /area/rogue/outdoors/exposed/under/basement) "etB" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/closed/mineral/rogue, /area/rogue/indoors/shelter/rtfield) "eud" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -3908,7 +3908,7 @@ first_time_text = "Blackwine Manor" }) "euh" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, @@ -3924,7 +3924,7 @@ /turf/open/transparent/openspace, /area/rogue) "euA" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/rack/rogue, @@ -3995,7 +3995,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "ewT" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/item/reagent_containers/glass/bucket/wooden, @@ -4025,7 +4025,7 @@ locked = 1; lockid = "tavern" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/tile/checkeralt, @@ -4054,9 +4054,9 @@ "ezG" = ( /obj/item/neuFarm/seed/wheat, /obj/item/neuFarm/seed/apple, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, /obj/structure/closet/crate/roguecloset/inn/chest, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) @@ -4078,7 +4078,7 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/under/town/basement) "ezU" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/dirt, @@ -4095,7 +4095,7 @@ dir = 10 }, /obj/item/reagent_containers/food/snacks/rogue/meat/mince/beef, -/obj/item/rogueweapon/huntingknife/cleaver/combat, +/obj/item/rogueweapon/knife/cleaver/combat, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/shelter/rtfield) "eAq" = ( @@ -4122,7 +4122,7 @@ /area/rogue/indoors/town/church) "eAR" = ( /obj/structure/toilet, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt, @@ -4171,7 +4171,7 @@ }, /area/rogue/indoors/town/shop) "eDG" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/flora/roguegrass, @@ -4332,7 +4332,7 @@ icon_state = "border"; dir = 4 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/machinery/light/rogue/wallfire/candle/blue/l, @@ -4368,7 +4368,7 @@ }, /area/rogue/outdoors/town/roofs) "ePk" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -4481,7 +4481,7 @@ /turf/open/floor/rogue/twig, /area/rogue/indoors/town/tavern) "eTJ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/dirt, @@ -4698,11 +4698,11 @@ /turf/open/floor/rogue/dirt, /area/rogue/indoors) "fgL" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/closed/wall/mineral/rogue/decowood, /area/rogue/indoors/town/tavern) "fgN" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/rtfield{ ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); @@ -4783,7 +4783,7 @@ /area/rogue/indoors/shelter/mountains) "fmQ" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/effect/landmark/start/vagrant{ @@ -4851,13 +4851,13 @@ /turf/open/water/swamp/deep, /area/rogue/outdoors/bog) "fpb" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/grass, /area/rogue/outdoors/exposed/manorgarri) "fpB" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/flora/roguegrass, @@ -4867,7 +4867,7 @@ /obj/machinery/light/rogue/wallfire{ pixel_x = -32 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/carpet, @@ -4929,10 +4929,10 @@ /turf/open/floor/rogue/blocks, /area/rogue) "fsl" = ( -/obj/item/rogueweapon/huntingknife/idagger/steel/special, -/obj/item/rogueweapon/huntingknife/idagger/steel, +/obj/item/rogueweapon/knife/dagger/steel/special, +/obj/item/rogueweapon/knife/dagger/steel, /obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueweapon/huntingknife/idagger, +/obj/item/rogueweapon/knife/dagger, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/shop) "fsm" = ( @@ -5017,7 +5017,7 @@ first_time_text = "Blackwine Manor" }) "fwO" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, @@ -5071,7 +5071,7 @@ /turf/open/floor/rogue/herringbone, /area/rogue/under/town/basement) "fyZ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/grass, @@ -5120,7 +5120,7 @@ /area/rogue/outdoors/mountains) "fEa" = ( /obj/structure/table/wood, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/tavern) "fFf" = ( @@ -5225,10 +5225,10 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/mountains) "fNG" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -5241,7 +5241,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) "fOQ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, @@ -5251,7 +5251,7 @@ /turf/open/floor/rogue/blocks, /area/rogue) "fQB" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -5342,7 +5342,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "fVn" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, @@ -5448,7 +5448,7 @@ /area/rogue/outdoors/bog) "fZF" = ( /obj/structure/fluff/statue/small, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/roguemachine/camera/left, @@ -5462,7 +5462,7 @@ /obj/item/reagent_containers/food/snacks/rogue/meat/steak, /obj/item/reagent_containers/food/snacks/egg/loaded, /obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town) "gbg" = ( @@ -5483,10 +5483,10 @@ /area/rogue/under/town/basement) "gbU" = ( /obj/machinery/light/rogue/oven/south, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -5510,7 +5510,7 @@ /area/rogue/indoors/town/tavern) "gdJ" = ( /obj/structure/fluff/dryingrack, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /turf/open/floor/rogue/tile, /area/rogue/indoors/town/manor{ first_time_text = "Blackwine Manor" @@ -5542,7 +5542,7 @@ /area/rogue) "gfH" = ( /obj/structure/toilet, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt, @@ -5566,7 +5566,7 @@ dir = 8 }, /obj/effect/decal/cleanable/blood/old, -/obj/item/rogueweapon/stoneaxe/woodcut/steel, +/obj/item/rogueweapon/axe/iron/steel, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/shelter/rtfield) "ghO" = ( @@ -5601,7 +5601,7 @@ /area/rogue/outdoors/exposed/under/basement) "giM" = ( /obj/structure/chair/stool/rogue, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/effect/landmark/start/mercenary, @@ -5725,10 +5725,10 @@ first_time_text = "Blackwine Manor" }) "gpl" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/toilet, @@ -5753,7 +5753,7 @@ /area/rogue/outdoors/mountains) "gqM" = ( /obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/grabber{ +/obj/effect/landmark/start/stevedore{ dir = 8 }, /turf/open/floor/rogue/twig, @@ -5985,7 +5985,7 @@ /obj/item/clothing/mask/cigarette/pipe{ pixel_y = 14 }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed{ +/obj/item/reagent_containers/food/snacks/produce/dry_westleach{ pixel_y = 7 }, /obj/item/storage/box/matches, @@ -6026,7 +6026,7 @@ /obj/structure/floordoor/gatehatch/outer{ redstone_id = "gatelava" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -6122,7 +6122,7 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/under/town/sewer) "gJM" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -6178,7 +6178,7 @@ /area/rogue/outdoors/town/roofs) "gNJ" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, @@ -6187,21 +6187,21 @@ }) "gPa" = ( /obj/structure/fluff/grindwheel, -/obj/item/rogueweapon/stoneaxe/woodcut, +/obj/item/rogueweapon/axe/iron, /turf/open/floor/rogue/cobblerock, /area/rogue/indoors/shelter/town/dwarf) "gQS" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/cobble/mossy, /area/rogue/indoors/town/tavern) "gRP" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/woodstaff/aries, +/obj/item/rogueweapon/polearm/woodstaff/aries, /turf/open/floor/rogue/concrete, /area/rogue/indoors/town/magician) "gSj" = ( @@ -6222,7 +6222,7 @@ /area/rogue/indoors/town/shop) "gSV" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -6232,7 +6232,7 @@ "gTy" = ( /obj/structure/flora/roguegrass, /obj/structure/mineral_door/bars, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, @@ -6260,7 +6260,7 @@ first_time_text = "DWARVERN RUINS" }) "gVw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/ladder, @@ -6328,7 +6328,7 @@ pixel_y = 12 }, /obj/item/storage/box/matches, -/obj/item/rogueweapon/huntingknife/idagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, /turf/open/floor/rogue/tile, /area/rogue/indoors/town/magician) "hbO" = ( @@ -6336,7 +6336,7 @@ /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/magician) "hca" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, @@ -6380,7 +6380,7 @@ /area/rogue/under/cave) "hes" = ( /obj/structure/toilet, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/cobble/mossy, @@ -6399,7 +6399,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/tavern) "heN" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -6527,7 +6527,7 @@ first_time_text = "Blackwine Manor" }) "hoG" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/greenstone, @@ -6543,7 +6543,7 @@ /obj/effect/turf_decal/stripes/red/line{ dir = 1 }, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/cobblerock, /area/rogue/indoors/town) "hqJ" = ( @@ -6553,7 +6553,7 @@ "hqR" = ( /obj/effect/decal/cleanable/blood/gibs/core, /obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/item/rogueweapon/huntingknife/idagger, +/obj/item/rogueweapon/knife/dagger, /turf/open/transparent/openspace, /area/rogue/under/cave{ name = "vulf cave"; @@ -6639,7 +6639,7 @@ /turf/open/transparent/openspace, /area/rogue/indoors/shelter/town/dwarf) "hvy" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/grass, @@ -6673,7 +6673,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/mountains) "hyL" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/woodturned/nosmooth, /area/rogue/indoors/town) "hzg" = ( @@ -6757,7 +6757,7 @@ /turf/closed/wall/mineral/rogue/stone, /area/rogue/indoors/shelter/town/dwarf) "hCI" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/grass, @@ -6785,7 +6785,7 @@ /turf/open/water/bath, /area/rogue/indoors/town/bath) "hDE" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/water/cleanshallow, @@ -6929,7 +6929,7 @@ /turf/open/floor/rogue/tile/masonic/inverted, /area/rogue/indoors/town/magician) "hMK" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/herringbone, @@ -7070,17 +7070,17 @@ /turf/open/floor/carpet/red, /area/rogue/outdoors/exposed/under/basement) "hRN" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/flora/roguegrass, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/exposed/under/basement) "hSa" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/closet/crate/roguecloset/inn/chest, @@ -7168,7 +7168,7 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/under/town/sewer) "hWY" = ( -/obj/item/rogueweapon/huntingknife/idagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, /obj/structure/closet/crate/chest/gold, /turf/open/floor/rogue/tile{ icon_state = "chess" @@ -7263,7 +7263,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/exposed/town) "ibq" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/tile, /area/rogue/indoors/town/manor{ first_time_text = "Blackwine Manor" @@ -7353,10 +7353,10 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "ihA" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -7475,7 +7475,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/exposed/church) "iqm" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -7646,7 +7646,7 @@ icon_state = "border"; dir = 4 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/hexstone, @@ -7772,7 +7772,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/shelter/rtfield) "iEZ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt, @@ -7926,7 +7926,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/mountains) "iLK" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -7955,7 +7955,7 @@ }, /area/rogue/outdoors/town/roofs) "iNk" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/carpet/royalblack, @@ -7965,7 +7965,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/exposed/manorgarri) "iNB" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/dirt/road, @@ -7977,7 +7977,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "iNR" = ( -/obj/structure/table/wood/bar, +/obj/structure/table/wood, /obj/machinery/light/rogue/wallfire/candle, /obj/item/keyring/steward, /obj/item/storage/box/matches, @@ -7990,7 +7990,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "iOk" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/greenstone, @@ -8027,7 +8027,7 @@ /area/rogue/indoors/shelter/rtfield) "iRU" = ( /obj/structure/roguetent, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/greenstone, @@ -8076,7 +8076,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "iWf" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/grass, @@ -8124,7 +8124,7 @@ /turf/open/floor/rogue/tile/masonic/spiral, /area/rogue/indoors/town/bath) "iYv" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/garrison) "iYO" = ( @@ -8203,7 +8203,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/outdoors/town/roofs) "jbJ" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/exposed/town) "jbK" = ( @@ -8238,7 +8238,7 @@ }, /area/rogue/indoors/town/dwarfin) "jeN" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/toilet, @@ -8341,7 +8341,7 @@ }) "jjV" = ( /obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, /turf/open/floor/rogue/concrete, /area/rogue/under/cave/spider) "jkc" = ( @@ -8399,7 +8399,7 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) "jml" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt, @@ -8522,7 +8522,7 @@ icon_state = "border"; dir = 1 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -8544,7 +8544,7 @@ /obj/item/reagent_containers/food/snacks/fat/salo, /obj/item/reagent_containers/food/snacks/rogue/meat/salami, /obj/item/reagent_containers/food/snacks/rogue/meat/salami, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, @@ -8613,7 +8613,7 @@ }, /obj/item/natural/feather, /obj/item/candle/yellow/lit, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/ruinedwood/spiral, @@ -8631,7 +8631,7 @@ /area/rogue/under/town/basement) "jAw" = ( /obj/item/reagent_containers/glass/bucket/wooden, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/dirt, @@ -8663,7 +8663,7 @@ /turf/open/floor/rogue/cobblerock, /area/rogue) "jBJ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -8733,7 +8733,7 @@ first_time_text = "Blackwine Manor" }) "jFj" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -8750,7 +8750,7 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) "jGo" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -8765,7 +8765,7 @@ /turf/closed/mineral/rogue/bedrock, /area/rogue/outdoors/bog) "jGD" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/barricade/wooden/crude, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town) @@ -8792,22 +8792,22 @@ first_time_text = "SCREAMING MOUNTAIN MINESHAFT" }) "jHy" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/rack/rogue, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, /turf/open/floor/rogue/dirt, /area/rogue/indoors/town/garrison) "jIv" = ( /obj/structure/flora/ausbushes/lavendergrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/grass, /area/rogue/outdoors/mountains) "jIR" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -8824,7 +8824,7 @@ /turf/open/floor/rogue/greenstone, /area/rogue) "jJO" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt, @@ -8871,7 +8871,7 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/under/town/basement) "jOm" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/flora/roguegrass, @@ -8892,7 +8892,7 @@ /turf/open/floor/rogue/greenstone, /area/rogue/under/town/basement) "jOB" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -8938,7 +8938,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "jSb" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/flora/roguegrass, @@ -8966,7 +8966,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "jUp" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/manor{ first_time_text = "Blackwine Manor" @@ -9059,7 +9059,7 @@ /turf/open/floor/rogue/concrete, /area/rogue) "jXM" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/flora/roguegrass, @@ -9196,7 +9196,7 @@ /area/rogue/indoors/town) "kel" = ( /obj/effect/decal/cleanable/blood/old, -/obj/item/rogueweapon/huntingknife/stoneknife, +/obj/item/rogueweapon/knife/stone, /turf/open/floor/rogue/twig, /area/rogue/indoors/shelter/bog) "keH" = ( @@ -9303,13 +9303,13 @@ }, /obj/structure/closet/crate/roguecloset/lord, /obj/item/clothing/mask/cigarette/pipe/westman, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /obj/item/reagent_containers/glass/bottle/rogue/wine, /obj/item/reagent_containers/glass/cup/golden, /turf/open/floor/rogue/concrete, /area/rogue/under/town/basement) "kkq" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -9368,7 +9368,7 @@ /turf/open/floor/rogue/tile/masonic/inverted, /area/rogue) "knM" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -9532,7 +9532,7 @@ /area/rogue/outdoors/mountains) "kxa" = ( /obj/structure/roguetent, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/greenstone, @@ -9741,7 +9741,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors) "kGQ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, @@ -9804,7 +9804,7 @@ /area/rogue/outdoors/exposed/dwarf) "kKV" = ( /obj/structure/flora/roguegrass/thorn_bush, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/grass, /area/rogue/outdoors/mountains) "kLy" = ( @@ -9864,7 +9864,7 @@ first_time_text = "SCREAMING MOUNTAIN MINESHAFT" }) "kOz" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt, @@ -9903,7 +9903,7 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/under/town/sewer) "kQF" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/flora/roguegrass, @@ -10151,7 +10151,7 @@ }, /area/rogue/outdoors/exposed/under/basement) "lhh" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/item/ash, @@ -10229,7 +10229,7 @@ /obj/effect/decal/cleanable/blood/tracks{ dir = 10 }, -/obj/item/rogueweapon/huntingknife/stoneknife, +/obj/item/rogueweapon/knife/stone, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/rtfield{ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) @@ -10376,7 +10376,7 @@ /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors) "lvw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, @@ -10387,7 +10387,7 @@ first_time_text = "PLAGUE DISTRICT" }) "lvI" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, @@ -10546,7 +10546,7 @@ }) "lFu" = ( /obj/structure/toilet, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/cobble/mossy, @@ -10602,10 +10602,10 @@ /obj/item/paper/scroll, /obj/item/paper/scroll, /obj/item/paper/scroll, -/obj/item/rogueweapon/huntingknife/idagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, /obj/item/reagent_containers/glass/bottle/rogue/poison, /obj/item/clothing/mask/cigarette/rollie/mindbreaker, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue/poison, +/obj/item/reagent_containers/food/snacks/produce/jacksberry/poison, /obj/item/keyring/nightman, /turf/open/floor/rogue/ruinedwood/chevron, /area/rogue/indoors/town) @@ -10755,7 +10755,7 @@ /area/rogue/indoors/town/church/chapel) "lLZ" = ( /obj/structure/fluff/statue/pillar, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -10890,7 +10890,7 @@ /turf/closed/wall/mineral/rogue/wooddark/window, /area/rogue/indoors) "lSv" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -10909,7 +10909,7 @@ first_time_text = "Blackwine Manor" }) "lTO" = ( -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, +/obj/item/reagent_containers/food/snacks/produce/jacksberry, /obj/structure/closet/crate/roguecloset/inn/chest, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/shelter/rtfield) @@ -10925,7 +10925,7 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/indoors/shelter/rtfield) "lUI" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town) "lVe" = ( @@ -10940,7 +10940,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/shelter/bog) "lVl" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, @@ -10996,10 +10996,10 @@ /turf/open/floor/rogue/concrete, /area/rogue) "lXP" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -11058,7 +11058,7 @@ /obj/structure/floordoor/gatehatch/outer{ redstone_id = "gatelava" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -11096,7 +11096,7 @@ /area/rogue/outdoors/town) "mcG" = ( /obj/item/roguebin/water/gross, -/obj/item/rogueweapon/spear/stone, +/obj/item/rogueweapon/polearm/spear/stone, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/cell) "mdt" = ( @@ -11143,7 +11143,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/outdoors/exposed/under/basement) "mgZ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, @@ -11231,7 +11231,7 @@ "mop" = ( /obj/machinery/light/rogue/hearth, /obj/item/rogueweapon/tongs, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -11317,12 +11317,12 @@ /area/rogue/indoors/town/magician) "msG" = ( /obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) "msX" = ( @@ -11447,7 +11447,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/bog) "mzB" = ( -/obj/structure/table/wood/bar, +/obj/structure/table/wood, /turf/open/floor/rogue/tile/checkeralt, /area/rogue/indoors/town/tavern) "mzQ" = ( @@ -11456,7 +11456,7 @@ "mAD" = ( /obj/effect/decal/cleanable/dirt/cobweb, /obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueweapon/huntingknife/idagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, /turf/open/floor/rogue/concrete, /area/rogue/under/cave/spider) "mAL" = ( @@ -11530,12 +11530,12 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "mFh" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town) "mFn" = ( /obj/structure/table/vtable/v2, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/rogue/trophy/deer, @@ -11583,7 +11583,7 @@ icon_state = "largetable"; dir = 9 }, -/obj/item/rogueweapon/stoneaxe/woodcut, +/obj/item/rogueweapon/axe/iron, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors) "mIZ" = ( @@ -11616,7 +11616,7 @@ /obj/effect/turf_decal/stripes/red/line{ dir = 1 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/cobblerock, @@ -11848,7 +11848,7 @@ icon_state = "border"; dir = 8 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/machinery/light/rogue/wallfire/candle/blue/r, @@ -11859,7 +11859,7 @@ /turf/open/floor/rogue/blocks, /area/rogue) "mVM" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/fluff/walldeco/rpainting/forest{ @@ -11884,7 +11884,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "mWI" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/fluff/globe, @@ -11973,7 +11973,7 @@ /turf/open/transparent/openspace, /area/rogue/outdoors/bog) "ndb" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) "ndi" = ( @@ -11989,7 +11989,7 @@ }) "new" = ( /obj/structure/flora/ausbushes/lavendergrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/grass, @@ -12031,7 +12031,7 @@ /turf/open/floor/rogue/dirt, /area/rogue/indoors/shelter/rtfield) "nfN" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt, @@ -12178,7 +12178,7 @@ /area/rogue/outdoors/exposed/under/sewer) "nnc" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/grass, @@ -12190,7 +12190,7 @@ icon_state = "border"; dir = 4 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -12244,7 +12244,7 @@ }, /area/rogue/outdoors/exposed/manorgarri) "noV" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt, @@ -12295,7 +12295,7 @@ }) "nuc" = ( /obj/structure/toilet, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -12470,7 +12470,7 @@ /area/rogue/under/town/basement) "nFQ" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/grass, /area/rogue/outdoors/exposed/town) "nFY" = ( @@ -12713,7 +12713,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/outdoors/town/roofs) "nSS" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/dirt, @@ -12741,7 +12741,7 @@ }, /area/rogue/indoors/town/vault) "nTz" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/dirt/road, @@ -12812,7 +12812,7 @@ first_time_text = "SCREAMING MOUNTAIN MINESHAFT" }) "nXK" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt, @@ -12824,7 +12824,7 @@ /turf/open/floor/rogue/herringbone, /area/rogue/under/spiderbase) "nYB" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -12885,7 +12885,7 @@ /turf/closed/wall/mineral/rogue/wooddark/vertical, /area/rogue) "ocA" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -12958,7 +12958,7 @@ /obj/effect/turf_decal/stripes/red/line{ dir = 1 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/cobblerock, @@ -13004,7 +13004,7 @@ first_time_text = "Blackwine Manor" }) "oiJ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/wood, @@ -13028,7 +13028,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "okj" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors) "oko" = ( @@ -13069,7 +13069,7 @@ /turf/closed/wall/mineral/rogue/wooddark/vertical, /area/rogue/indoors/town/church) "omc" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/machinery/light/rogue/firebowl/stump, @@ -13145,7 +13145,7 @@ /turf/open/floor/rogue/tile, /area/rogue/indoors/town/garrison) "opd" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, @@ -13283,7 +13283,7 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/under/town/basement) "ouS" = ( -/obj/item/rogueweapon/huntingknife/idagger, +/obj/item/rogueweapon/knife/dagger, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/shelter/mountains/decap) "ouU" = ( @@ -13308,13 +13308,13 @@ "owj" = ( /obj/structure/fluff/walldeco/chains, /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt, /area/rogue/indoors/town/cell) "owy" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town) "owT" = ( @@ -13325,7 +13325,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/church) "owX" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/concrete, @@ -13409,7 +13409,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/exposed/town) "oAV" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/bath) "oBO" = ( @@ -13506,7 +13506,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/exposed/manorgarri) "oFq" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -13514,7 +13514,7 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) "oFv" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, @@ -13522,7 +13522,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "oFw" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/dirt, /area/rogue/under/town/sewer) "oFV" = ( @@ -13660,7 +13660,7 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/under/cave) "oKl" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -13680,7 +13680,7 @@ dir = 8 }, /obj/structure/fluff/railing/border, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -13730,7 +13730,7 @@ first_time_text = "Blackwine Manor" }) "oNx" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/structure/closet/crate/roguecloset/inn/chest, @@ -13814,10 +13814,10 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors) "oRy" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/mineral_door/swing_door{ @@ -13834,7 +13834,7 @@ "oRX" = ( /obj/structure/flora/roguegrass, /mob/living/simple_animal/hostile/retaliate/rogue/goat, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/grass, @@ -13948,11 +13948,11 @@ }) "oXq" = ( /obj/structure/rack/rogue, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/manor{ first_time_text = "Blackwine Manor" @@ -13966,7 +13966,7 @@ icon_state = "border"; dir = 4 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, @@ -13985,7 +13985,7 @@ icon_state = "border"; dir = 5 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/flora/rock/pile, @@ -13993,7 +13993,7 @@ /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/magician) "oYE" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/grass, @@ -14117,7 +14117,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "pef" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/bars/passage/shutter/open{ redstone_id = "merchant" }, @@ -14235,7 +14235,7 @@ /turf/closed/wall/mineral/rogue/wooddark/slitted, /area/rogue/indoors/town) "pkn" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/effect/decal/remains/human, @@ -14295,7 +14295,7 @@ /turf/closed/wall/mineral/rogue/wooddark, /area/rogue/outdoors/town) "pmz" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/hexstone, @@ -14409,7 +14409,7 @@ first_time_text = "Rockhamlet" }) "pqk" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/grass, @@ -14481,7 +14481,7 @@ /turf/closed/mineral/rogue/bedrock, /area/rogue) "ptm" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, @@ -14550,7 +14550,7 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/exposed/town) "pxn" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/effect/decal/cleanable/food/tomato_smudge, @@ -14632,10 +14632,10 @@ /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/exposed/manorgarri) "pCp" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/flora/roguegrass, @@ -14662,14 +14662,14 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "pEe" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, /turf/open/water/swamp/deep, /area/rogue/outdoors/bog) "pEE" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/hexstone, @@ -14931,7 +14931,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "pXN" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt, @@ -14974,7 +14974,7 @@ /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/magician) "pZz" = ( -/obj/item/rogueweapon/spear/stone, +/obj/item/rogueweapon/polearm/spear/stone, /turf/open/floor/rogue/naturalstone, /area/rogue) "qai" = ( @@ -15034,7 +15034,7 @@ }, /area/rogue/indoors/town/tavern) "qdU" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/structure/flora/roguegrass, @@ -15057,7 +15057,7 @@ /turf/closed/wall/mineral/rogue/stone/moss, /area/rogue/indoors/town) "qeI" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -15088,7 +15088,7 @@ }) "qfi" = ( /obj/structure/closet/crate/drawer, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/item/clothing/head/roguetown/bardhat{ @@ -15153,7 +15153,7 @@ /area/rogue/outdoors/exposed/dwarf) "qiW" = ( /obj/structure/bed/rogue/shit, -/obj/item/rogueweapon/stoneaxe, +/obj/item/rogueweapon/axe/stone, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) "qjp" = ( @@ -15176,7 +15176,7 @@ /obj/structure/fluff/walldeco/painting/queen{ pixel_x = 32 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/carpet, @@ -15324,7 +15324,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/outdoors/exposed/church) "qsl" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt, @@ -15337,7 +15337,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "qtH" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/concrete, @@ -15428,7 +15428,7 @@ }) "qwU" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/grass, @@ -15590,7 +15590,7 @@ "qHN" = ( /obj/machinery/light/rogue/hearth, /obj/item/clothing/mask/rogue/facemask/prisoner, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -15623,7 +15623,7 @@ /turf/open/floor/rogue/blocks, /area/rogue) "qJn" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -15697,7 +15697,7 @@ /area/rogue/indoors) "qMt" = ( /obj/structure/fluff/walldeco/chains, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, @@ -15755,7 +15755,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "qNI" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/item/clothing/cloak/cape/archivist, @@ -15785,10 +15785,10 @@ first_time_text = "Blackwine Manor" }) "qQj" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/roguemachine/camera/right, @@ -15950,7 +15950,7 @@ }, /area/rogue/outdoors/exposed/under/basement) "qZn" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/chair/stool/rogue, @@ -15961,7 +15961,7 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/exposed/under/basement) "qZr" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/bars/passage/shutter/open{ redstone_id = "merchant" }, @@ -16010,7 +16010,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/tavern) "rej" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/grass, @@ -16084,7 +16084,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/under/town/basement) "rij" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/gate/bars{ @@ -16112,7 +16112,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/outdoors/exposed/under/basement) "rix" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt, @@ -16124,7 +16124,7 @@ /area/rogue/indoors/town) "riP" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, @@ -16163,7 +16163,7 @@ /turf/open/water/sewer, /area/rogue/outdoors/exposed/under/sewer) "rkT" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/grass, /area/rogue/indoors) "rlm" = ( @@ -16175,7 +16175,7 @@ /area/rogue/outdoors/exposed/manorgarri) "rlJ" = ( /obj/structure/bed/rogue/shit, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -16449,7 +16449,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/church/chapel) "rCF" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/cobblerock, @@ -16536,10 +16536,10 @@ }, /area/rogue/outdoors/exposed/dwarf) "rFA" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/closet/crate/roguecloset/inn/chest, @@ -16673,7 +16673,7 @@ /turf/open/floor/rogue/grass, /area/rogue/indoors/shelter/rtfield) "rLU" = ( -/obj/item/rogueweapon/huntingknife/idagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, /turf/open/floor/rogue/greenstone, /area/rogue) "rMM" = ( @@ -16832,7 +16832,7 @@ /obj/effect/turf_decal/stripes/red/corner{ dir = 4 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/cobblerock, @@ -16856,7 +16856,7 @@ /area/rogue/outdoors/exposed/town) "rWX" = ( /obj/structure/roguetent, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/woodturned/nosmooth, @@ -17016,7 +17016,7 @@ /obj/effect/turf_decal/stripes/red/corner{ dir = 1 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/cobblerock, @@ -17039,7 +17039,7 @@ /turf/open/water/swamp, /area/rogue/outdoors/bog) "sfQ" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/exposed/town) "sgi" = ( @@ -17056,7 +17056,7 @@ /area/rogue/indoors/town) "sho" = ( /obj/structure/fluff/statue/pillar, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -17200,7 +17200,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/woods) "spQ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /obj/structure/bed/rogue/inn, @@ -17303,7 +17303,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "stI" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/item/natural/stone, @@ -17313,7 +17313,7 @@ /turf/open/floor/rogue/dirt, /area/rogue/indoors/town/cell) "stR" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/dirt, @@ -17377,7 +17377,7 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/under/town/basement) "swy" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -17597,7 +17597,7 @@ /obj/machinery/light/rogue/wallfire{ pixel_y = 32 }, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/manor{ first_time_text = "Blackwine Manor" @@ -17766,7 +17766,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/garrison) "sTm" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, @@ -17802,7 +17802,7 @@ /turf/open/floor/bronze, /area/rogue/outdoors/mountains) "sVC" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/closet/crate/roguecloset/inn/chest, @@ -17850,7 +17850,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/mountains) "sZS" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -17907,7 +17907,7 @@ /turf/open/floor/carpet/inn, /area/rogue/indoors/town/tavern) "teg" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/exposed/under/basement) "tem" = ( @@ -17957,7 +17957,7 @@ name = "The Laws of the Fool"; info = "THE LAWS OF THE FOOL:
1. Seek the news and spread it to all
2. Play antics on all who deserve it.
3. Improvise with thy wit!
4. Be tactful. Know when thy art is welcome.
5. Be misshapen (or dwarvish) (or simply play dumb)
6. Speak harsh truths in jest
7. Emote! Play on the stage of life!
8. Keep your head and face smooth and shaven (dwarvern fools may keep the beard)
9. Carry thy wooden sword proudly!
10. Spread thy strings of influence, create chaos in others...
11. If thou must fight, fight well
12. Spread thy wealth to those who deserve it, and troublesome gifts to those who don't!
13. Be compassionate and insightful, even when scathing

LEGENDARY FOOLS:
Taeleffer the Dwarf - Fallen in battle on a suicide charge with a wooden sword, his courage turning the tide
Roland the Farter - Capable of farting, whistling, and jumping in unison
Tom the Fool a.k.a. "Longshanks" - Pioneer of Tomfoolery and the one-man show.
Rahear the Minstrel - Witful gossiper, talented idiot, and former monk.
Shen-Jang-Goa - The crafty diplomat and spy, disarming dignitaries with wisdom and humour.
Maggoty Johnson - The legendary playwright, known for his crude humour.
Ser Dangerfield - The ultimate fall man, perfected the craft of the "MyWife" jest." }, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/manor{ first_time_text = "Blackwine Manor" @@ -18113,7 +18113,7 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/outdoors/town) "tpQ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -18298,7 +18298,7 @@ /turf/open/floor/rogue/tile/masonic/spiral, /area/rogue/indoors/town/bath) "tyB" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/dirt, @@ -18411,7 +18411,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "tEb" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -18468,10 +18468,10 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "tHr" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/effect/decal/cleanable/food/tomato_smudge, @@ -18504,7 +18504,7 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) }) "tJG" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/bookcase, @@ -18536,7 +18536,7 @@ /area/rogue/outdoors/exposed/magiciantower) "tKM" = ( /obj/structure/flora/roguegrass/thorn_bush, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/grass, @@ -18561,7 +18561,7 @@ /area/rogue/indoors/town/garrison) "tLl" = ( /obj/machinery/light/rogue/firebowl, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -18583,7 +18583,7 @@ /turf/open/floor/rogue/tile/checkeralt, /area/rogue/indoors/town/tavern) "tMa" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/dirt, @@ -18781,7 +18781,7 @@ first_time_text = "Blackwine Manor" }) "tUZ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/dirt/road, @@ -18798,7 +18798,7 @@ /area/rogue) "tWr" = ( /obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/grabber, +/obj/effect/landmark/start/stevedore, /turf/open/floor/rogue/twig, /area/rogue/indoors/town/shop) "tWT" = ( @@ -18948,7 +18948,7 @@ }, /area/rogue/indoors/town) "udt" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt, @@ -19070,14 +19070,14 @@ ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) }) "ukE" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/exposed/under/basement) "umO" = ( /obj/structure/bed/rogue, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/carpet, @@ -19117,7 +19117,7 @@ /turf/open/floor/rogue/wood/nosmooth, /area/rogue/indoors/town/tavern) "upL" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, @@ -19172,14 +19172,14 @@ /turf/open/floor/rogue/concrete, /area/rogue/outdoors/exposed/under/basement) "usU" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "utC" = ( /obj/structure/toilet, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt, @@ -19284,7 +19284,7 @@ icon_state = "border"; dir = 6 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/carpet/royalblack, @@ -19459,7 +19459,7 @@ /turf/open/floor/rogue/rooftop/green, /area/rogue/outdoors/town/roofs) "uFA" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, @@ -19504,14 +19504,14 @@ icon_state = "cart-empty"; dir = 4 }, -/obj/item/rogueweapon/stoneaxe/woodcut, +/obj/item/rogueweapon/axe/iron, /turf/open/floor/rogue/cobble, /area/rogue/indoors/shelter/town/dwarf) "uFZ" = ( /turf/open/floor/rogue/concrete, /area/rogue/under/town/basement) "uGh" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/dirt, @@ -19545,7 +19545,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) "uJs" = ( -/obj/item/rogueweapon/huntingknife, +/obj/item/rogueweapon/knife/hunting, /turf/open/floor/rogue/blocks, /area/rogue) "uJt" = ( @@ -19640,8 +19640,8 @@ /obj/item/clothing/mask/cigarette/rollie/nicotine, /obj/item/clothing/mask/cigarette/rollie/nicotine, /obj/item/clothing/mask/cigarette/rollie/nicotine, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /obj/item/clothing/mask/cigarette/pipe, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/shop) @@ -20054,7 +20054,7 @@ /turf/open/floor/rogue/tile/checkeralt, /area/rogue/indoors/town/tavern) "vhx" = ( -/obj/item/rogueweapon/huntingknife/idagger, +/obj/item/rogueweapon/knife/dagger, /turf/open/floor/rogue/cobblerock, /area/rogue) "vhN" = ( @@ -20062,7 +20062,7 @@ /turf/closed/wall/mineral/rogue/stone, /area/rogue/indoors/town) "vhT" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/machinery/light/rogue/torchholder{ @@ -20097,7 +20097,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/shelter/rtfield) "vjx" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/flora/roguegrass, @@ -20156,7 +20156,7 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/exposed/town) "voM" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/roguemachine/camera/left, @@ -20217,7 +20217,7 @@ /turf/closed/wall/mineral/rogue/wooddark/window, /area/rogue/outdoors/exposed/under/basement) "vrm" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/wood, @@ -20244,7 +20244,7 @@ }) "vuw" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/idagger, +/obj/item/rogueweapon/knife/dagger, /obj/item/rogueweapon/thresher, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/cell) @@ -20313,7 +20313,7 @@ /turf/open/floor/rogue/grass, /area/rogue/indoors/town) "vxz" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/dirt, @@ -20382,7 +20382,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/church) "vAS" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/structure/flora/roguegrass, @@ -20428,7 +20428,7 @@ first_time_text = "Rockhamlet" }) "vCr" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -20503,7 +20503,7 @@ /turf/open/transparent/openspace, /area/rogue/outdoors/town/roofs) "vHH" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/machinery/light/rogue/wallfire/candle, @@ -20514,17 +20514,17 @@ /turf/open/floor/carpet/royalblack, /area/rogue/outdoors/exposed/under/basement) "vIi" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, /area/rogue/indoors/town) "vIo" = ( /obj/machinery/light/rogue/oven/south, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -20629,7 +20629,7 @@ first_time_text = "DWARVERN RUINS" }) "vPZ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/flora/roguegrass, @@ -20678,7 +20678,7 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/under/town/basement) "vTh" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, @@ -20723,13 +20723,13 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) "vWe" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "vWg" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -20762,7 +20762,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/cell) "vWD" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/structure/fermenting_barrel/random/beer, @@ -20783,14 +20783,14 @@ locked = 1; lockid = "manor" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/exposed/under/basement) "vXs" = ( /obj/structure/plasticflaps, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/kneestingers, @@ -20808,7 +20808,7 @@ icon_state = "chair2"; dir = 8 }, -/obj/effect/landmark/start/barkeep{ +/obj/effect/landmark/start/innkeep{ dir = 8 }, /turf/open/floor/rogue/wood/nosmooth, @@ -20869,7 +20869,7 @@ "waO" = ( /obj/structure/flora/roguegrass, /mob/living/simple_animal/hostile/retaliate/rogue/goat, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/grass, @@ -20893,7 +20893,7 @@ first_time_text = "Rockhamlet" }) "wbP" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/machinery/light/rogue/campfire{ pixel_y = 20 }, @@ -20940,7 +20940,7 @@ "weF" = ( /obj/structure/closet/crate/roguecloset/dark, /obj/item/clothing/neck/roguetown/gorget, -/obj/item/rogueweapon/huntingknife/idagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town) "weW" = ( @@ -20958,7 +20958,7 @@ /area/rogue/under/town/sewer) "wfT" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/grass, @@ -21016,7 +21016,7 @@ }, /area/rogue/indoors/town/magician) "whE" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt, @@ -21033,7 +21033,7 @@ /area/rogue/indoors/shelter/town/dwarf) "wiz" = ( /obj/effect/spawner/roguemap/tree, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/grass, @@ -21113,7 +21113,7 @@ icon_state = "fence"; dir = 8 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, @@ -21124,7 +21124,7 @@ /turf/open/water/sewer, /area/rogue/under/town/sewer) "wlv" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt, @@ -21162,7 +21162,7 @@ /area/rogue/under/town/sewer) "wmJ" = ( /obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, @@ -21198,7 +21198,7 @@ /turf/open/floor/rogue/cobblerock, /area/rogue) "wpR" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/closed/wall/mineral/rogue/stone, @@ -21209,10 +21209,10 @@ /turf/closed/wall/mineral/rogue/wooddark/vertical, /area/rogue/outdoors/town) "wrs" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt, @@ -21317,7 +21317,7 @@ /turf/open/floor/rogue/twig, /area/rogue/indoors/town/shop) "wys" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/structure/chair/stool/rogue, @@ -21377,7 +21377,7 @@ /area/rogue/indoors) "wBm" = ( /obj/effect/spawner/roguemap/tree, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt/road, @@ -21394,10 +21394,10 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/under/cave) "wBy" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -21462,7 +21462,7 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/under/town/basement) "wGw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/herringbone, @@ -21521,7 +21521,7 @@ /area/rogue/outdoors/town/roofs) "wLo" = ( /obj/structure/bed/rogue/shit, -/obj/item/rogueweapon/huntingknife/stoneknife, +/obj/item/rogueweapon/knife/stone, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) "wLN" = ( @@ -21536,7 +21536,7 @@ /turf/closed/wall/mineral/rogue/wooddark, /area/rogue/indoors/town/cell) "wMq" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt, @@ -21622,7 +21622,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/shelter/town/dwarf) "wRi" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "wRr" = ( @@ -21691,7 +21691,7 @@ /turf/closed/wall/mineral/rogue/roofwall/outercorner, /area/rogue/indoors/town/tavern) "wSZ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/cobble/mossy, @@ -21706,7 +21706,7 @@ }, /obj/item/paper/scroll, /obj/item/roguekey/archive, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/ruinedwood/spiral, @@ -21731,7 +21731,7 @@ }, /area/rogue/outdoors/exposed/manorgarri) "wUC" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/tile, /area/rogue/indoors/town/magician) "wUT" = ( @@ -21801,7 +21801,7 @@ /turf/open/floor/rogue/greenstone, /area/rogue) "xah" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/cobblerock, @@ -21907,7 +21907,7 @@ icon_state = "border"; dir = 5 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -21945,7 +21945,7 @@ first_time_text = "Blackwine Manor" }) "xhr" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/carpet/royalblack, @@ -22054,7 +22054,7 @@ icon_state = "tablewood1" }, /obj/item/reagent_containers/food/snacks/rogue/meat/salami, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/exposed/under/basement) "xnm" = ( @@ -22515,10 +22515,10 @@ /turf/open/floor/rogue/twig, /area/rogue/indoors/town/tavern) "xJG" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/fluff/walldeco/moon{ @@ -22566,7 +22566,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/exposed/town) "xLR" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/wood, @@ -22622,7 +22622,7 @@ /area/rogue/indoors/town/cell) "xON" = ( /obj/item/reagent_containers/glass/bucket/wooden, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/dirt, @@ -22973,7 +22973,7 @@ first_time_text = "CATACOMBS" }) "ygV" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/dirt, @@ -23020,7 +23020,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town) "yiq" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, diff --git a/_maps/map_files/roguetown/otherz/smalldecap.dmm b/_maps/map_files/roguetown/otherz/smalldecap.dmm index f76fe5a2eb..59c587d93e 100644 --- a/_maps/map_files/roguetown/otherz/smalldecap.dmm +++ b/_maps/map_files/roguetown/otherz/smalldecap.dmm @@ -1,429 +1,390 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/obj/structure/fluff/traveltile{ - aportalgoesto = "forestdecapin"; - aportalid = "forestdecapout" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/mountains/decap) -"ac" = ( +"ab" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/mountains/decap) -"af" = ( -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"ao" = ( -/obj/structure/table/wood/reinforced, -/obj/item/book/rogue/advice_farming, /obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/rogue/wallfire/candle/blue{ + pixel_y = -32 + }, /turf/open/floor/rogue/concrete, -/area/rogue/outdoors/mountains/decap) -"ax" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains/decap) -"aK" = ( -/obj/structure/fluff/walldeco/customflag, -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/outdoors/mountains/decap) -"aV" = ( -/obj/structure/closet/crate/chest/neu_fancy, -/obj/item/roguecoin/copper/pile, +/area/rogue/under/cavelava) +"ad" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/outdoors/mountains/decap) -"aY" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/rogue/cobble/mossy, +/area/rogue/under/cavelava) +"as" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 4; + icon_state = "torchwall1" + }, +/turf/open/floor/rogue/tile, +/area/rogue/outdoors/caves) +"aQ" = ( +/obj/structure/fluff/railing/fence{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/dwarfin) +"aT" = ( /obj/structure/flora/rogueshroom, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/mountains/decap) -"bm" = ( -/obj/structure/table/wood/plain, -/obj/item/roguecoin/gold/pile, +"bh" = ( +/obj/structure/table/wood/reinforced, +/obj/item/clothing/head/roguetown/wizhat, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/outdoors/mountains/decap) -"ch" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 +/turf/open/floor/rogue/concrete, +/area/rogue/under/cavelava) +"bq" = ( +/obj/structure/closet/crate/chest/wicker, +/obj/item/roguegem{ + desc = "It feels warm to the touch."; + name = "Chaos Gemerald" }, -/obj/structure/fluff/railing/stonehedge{ - dir = 4 +/obj/item/roguegem/green{ + desc = "It feels warm to the touch."; + name = "Chaos Gemerald" }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/concrete, +/area/rogue/under/cavelava) +"bu" = ( +/obj/structure/stairs/stone, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/cavelava) +"bQ" = ( +/obj/structure/spider/stickyweb, +/obj/structure/spider/stickyweb, /turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"cD" = ( -/obj/structure/barricade/wooden/rogue, +/area/rogue/under/cavelava) +"ca" = ( +/obj/item/restraints/legcuffs/beartrap/armed/camouflage, /obj/structure/barricade/wooden/rogue/crude, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains/decap) -"cE" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/alch/waterdust, -/obj/item/alch/magicdust, -/obj/item/alch/irondust, -/obj/item/alch/golddust, -/obj/item/alch/firedust, -/obj/item/alch/feaudust, -/obj/item/alch/earthdust, +/obj/structure/barricade/wooden/rogue, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, -/area/rogue/outdoors/mountains/decap) -"cO" = ( +/obj/effect/decal/cleanable/blood/tracks, +/obj/structure/mineral_door/wood/green{ + locked = 1; + name = "Old Door" + }, +/obj/structure/bars/passage{ + redstone_id = "sewerruin1" + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/cavelava) +"cq" = ( /obj/structure/bars/passage{ redstone_id = "sewerruin1" }, /turf/open/floor/rogue/concrete, -/area/rogue/outdoors/mountains/decap) -"cT" = ( +/area/rogue/under/cavelava) +"cy" = ( +/turf/open/lava, +/area/rogue/under/cavelava) +"cB" = ( +/obj/structure/rack/rogue, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/crate/chest/old_crate, -/obj/item/alch/magicdust, -/obj/item/alch/magicdust, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/mountains/decap) +/obj/item/clothing/suit/roguetown/armor/cuirass/iron/rust, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/cavelava) +"cG" = ( +/obj/structure/fluff/railing/fence{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"cI" = ( +/turf/closed/wall/mineral/rogue/wood/window, +/area/rogue/outdoors/caves) +"cJ" = ( +/obj/structure/table/wood/plain, +/obj/item/candle/skull/lit, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/under/cavelava) "cW" = ( +/obj/structure/table/wood/reinforced, +/obj/item/reagent_containers/glass/cup/wooden, +/obj/item/reagent_containers/glass/cup/wooden{ + pixel_x = -5; + pixel_y = -5 + }, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/fluff/statue, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/mountains/decap) -"df" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 4; - icon_state = "torchwall1" +/turf/open/floor/rogue/herringbone, +/area/rogue/under/cavelava) +"dl" = ( +/obj/structure/barricade/wooden/rogue/crude, +/turf/closed/wall/mineral/rogue/wood/window, +/area/rogue/outdoors/caves) +"du" = ( +/obj/effect/landmark/mapGenerator/rogue/decap{ + endTurfX = 128; + endTurfY = 128 }, -/turf/open/floor/rogue/twig, +/turf/open/transparent/openspace, /area/rogue/outdoors/mountains/decap) -"dk" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/mountains/decap) -"dH" = ( +"dG" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/old{ - icon_state = "gib6-old" - }, -/obj/effect/decal/cleanable/blood/old{ - icon_state = "splatter3" +/obj/machinery/light/rogue/wallfire/candle/blue, +/turf/open/floor/rogue/blocks, +/area/rogue/under/cavelava) +"dX" = ( +/obj/structure/fluff/railing/fence, +/obj/structure/fluff/railing/fence{ + dir = 4 }, -/turf/open/floor/rogue/ruinedwood/darker, -/area/rogue/outdoors/mountains/decap) -"dU" = ( -/obj/structure/fluff/walldeco/customflag, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/mountains/decap) +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/mountains) "dY" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/crate/coffin, -/obj/item/rogueweapon/sword/sabre, -/turf/open/floor/rogue/greenstone, +/obj/item/reagent_containers/powder/spice, +/turf/open/floor/rogue/cobble, +/area/rogue/under/cavelava) +"dZ" = ( +/obj/structure/fluff/railing/wood{ + dir = 4 + }, +/turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/mountains/decap) -"ee" = ( +"ea" = ( +/turf/closed/wall/mineral/rogue/wood, +/area/rogue/indoors/town/dwarfin) +"ez" = ( +/turf/closed/wall/mineral/rogue/stonebrick, +/area/rogue/indoors/town/dwarfin) +"eB" = ( +/obj/structure/table/wood/reinforced, +/obj/item/ship_in_a_bottle, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/concrete, -/area/rogue/outdoors/mountains/decap) -"eo" = ( -/turf/open/floor/rogue/twig, -/area/rogue/outdoors/mountains/decap) -"eJ" = ( -/obj/structure/rack/rogue, +/area/rogue/under/cavelava) +"eF" = ( +/obj/structure/flora/roguetree/burnt, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/caves) +"eG" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/item/clothing/suit/roguetown/armor/cuirass/iron/rust, -/turf/open/floor/rogue/herringbone, +/mob/living/carbon/human/species/skeleton/npc/warrior/skilled, +/turf/open/floor/rogue/concrete, +/area/rogue/under/cavelava) +"eL" = ( +/turf/open/transparent/openspace, /area/rogue/outdoors/mountains/decap) -"eR" = ( -/obj/structure/fluff/railing/stonehedge{ +"eT" = ( +/obj/structure/fluff/railing/fence{ dir = 4 }, /turf/open/floor/rogue/dirt, +/area/rogue/outdoors/mountains) +"eW" = ( +/turf/open/floor/rogue/ruinedwood/turned, /area/rogue/outdoors/mountains/decap) -"eU" = ( +"eZ" = ( /obj/item/rogueweapon/mace/woodclub, -/obj/effect/decal/cleanable/blood/old{ - icon_state = "splatter3" +/turf/open/floor/rogue/ruinedwood/turned/darker, +/area/rogue/indoors/town/dwarfin) +"fa" = ( +/obj/structure/barricade/wooden/rogue, +/obj/structure/barricade/wooden/rogue/crude, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cavelava) +"fh" = ( +/obj/structure/mineral_door/wood/green{ + locked = 1; + name = "Old Door" }, -/turf/open/floor/rogue/twig, -/area/rogue/outdoors/mountains/decap) -"fe" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/spider/mutated, -/obj/effect/decal/cleanable/dirt/dust, +/obj/item/restraints/legcuffs/beartrap/armed/camouflage, /turf/open/floor/rogue/cobble, -/area/rogue/outdoors/mountains/decap) -"ff" = ( -/obj/structure/closet/crate/chest/neu_fancy, +/area/rogue/under/cavelava) +"fn" = ( +/obj/structure/bars, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/caves) +"fu" = ( +/obj/structure/flora/rogueshroom, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/mountains/deception) +"fv" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/item/roguestatue/gold/loot, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/outdoors/mountains/decap) -"fh" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 6 +/obj/structure/mineral_door/wood/green{ + locked = 1; + name = "Old Door" }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/mountains/decap) +/turf/open/floor/rogue/concrete, +/area/rogue/under/cavelava) "fG" = ( -/obj/structure/closet/crate/chest/old_crate, -/turf/open/floor/rogue/twig, -/area/rogue/outdoors/mountains/decap) -"fJ" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, -/area/rogue/outdoors/mountains/decap) -"ge" = ( -/obj/structure/fluff/railing/fence{ - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"gp" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/outdoors/mountains/decap) -"gq" = ( -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains/decap) -"gL" = ( +/turf/open/floor/rogue/concrete, +/area/rogue/under/cavelava) +"fJ" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/bottle/rogue/manapot, -/obj/item/reagent_containers/glass/bottle/rogue/manapot, +/obj/structure/closet/crate/coffin, +/obj/item/roguestatue/silver, /turf/open/floor/rogue/cobble, -/area/rogue/outdoors/mountains/decap) -"gV" = ( -/obj/structure/table/wood/plain, -/obj/item/candle/skull/lit, +/area/rogue/under/cavelava) +"fL" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/outdoors/mountains/decap) -"hh" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/mountains/decap) -"ht" = ( -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/hexstone, -/area/rogue/outdoors/mountains/decap) -"hD" = ( -/obj/item/clothing/head/roguetown/helmet/goblin, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains/decap) -"hE" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/gibs/torso, -/mob/living/simple_animal/hostile/retaliate/rogue/troll, +/obj/effect/decal/cleanable/blood/tracks, /turf/open/floor/rogue/blocks, +/area/rogue/under/cavelava) +"fU" = ( +/obj/effect/spawner/roguemap/tallgrass, +/turf/open/floor/rogue/dirt, /area/rogue/outdoors/mountains/decap) -"hK" = ( +"gm" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/cobble/mossy, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/rogue/greenstone, +/area/rogue/under/cavelava) +"gx" = ( +/obj/structure/table/wood/treestump/burnt, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/caves) +"gE" = ( +/obj/item/rogueweapon/pick, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) +"gH" = ( +/obj/structure/spider/stickyweb, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/cobble, +/area/rogue/under/cavelava) +"gU" = ( +/obj/structure/stairs/stone{ + dir = 8 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/mountains/deception) +"gV" = ( +/obj/effect/landmark/mapGenerator/rogue/mountain{ + endTurfX = 155; + endTurfY = 155 + }, +/turf/closed/mineral/rogue/bedrock, +/area/rogue/outdoors/mountains/deception) +"gY" = ( +/turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/mountains/decap) -"hO" = ( +"hd" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/rack/rogue/shelf/biggest, /obj/structure/rack/rogue/shelf, /obj/item/reagent_containers/glass/bottle/rogue/elfblue, /turf/open/floor/rogue/greenstone, -/area/rogue/outdoors/mountains/decap) -"if" = ( -/obj/structure/closet/crate/chest/neu_fancy, +/area/rogue/under/cavelava) +"hm" = ( +/obj/structure/flora/rogueshroom, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cavelava) +"ho" = ( +/obj/machinery/light/rogue/firebowl/standing, /obj/effect/decal/cleanable/dirt/dust, -/obj/item/roguestatue/iron, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/outdoors/mountains/decap) -"iA" = ( -/obj/machinery/light/rogue/hearth, -/obj/item/cooking/pan, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, -/area/rogue/outdoors/mountains/decap) -"iP" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/table/wood/plain/alt, -/obj/item/mortar, -/obj/item/pestle, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/mountains/decap) -"jf" = ( -/obj/structure/table/wood/reinforced, -/obj/item/clothing/head/roguetown/wizhat, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/mountains/decap) -"jM" = ( -/obj/structure/barricade/wooden/rogue, -/obj/structure/barricade/wooden/rogue/crude, -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/mountains/decap) -"ke" = ( -/turf/closed/wall/mineral/rogue/tent, -/area/rogue/outdoors/mountains/decap) -"kk" = ( -/obj/item/ammo_casing/caseless/rogue/arrow/stone, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains/decap) -"ks" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"kS" = ( -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/obj/structure/barricade/wooden/rogue/crude, -/obj/structure/barricade/wooden/rogue, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/tracks, -/obj/structure/mineral_door/wood/green{ - name = "Old Door"; - locked = 1 - }, -/obj/structure/bars/passage{ - redstone_id = "sewerruin1" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/mountains/decap) -"lh" = ( -/obj/structure/table/wood/plain/alt, -/obj/item/candle/yellow/lit/infinite, -/turf/open/floor/rogue/twig, -/area/rogue/outdoors/mountains/decap) -"ln" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/mountains/decap) -"lz" = ( -/obj/structure/fluff/railing/fence, /turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"lK" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 8 +/area/rogue/under/cavelava) +"hs" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "splatter3" }, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains/decap) -"lV" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/mountains/decap) -"mi" = ( -/obj/item/ammo_casing/caseless/rogue/arrow/stone, +/turf/open/floor/rogue/ruinedwood/turned/darker, +/area/rogue/indoors/town/dwarfin) +"hv" = ( +/obj/structure/flora/roguetree/burnt, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains/decap) -"nT" = ( -/obj/structure/barricade/wooden/rogue, -/obj/structure/barricade/wooden/rogue/crude, +/area/rogue/outdoors/caves) +"hw" = ( +/obj/machinery/light/rogue/campfire/densefire, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) +"hB" = ( +/obj/structure/bed/rogue/inn/double, +/obj/item/bedsheet/rogue/fabric_double, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/carpet/red, +/area/rogue/under/cavelava) +"hC" = ( +/obj/structure/table/wood/plain, +/turf/open/floor/rogue/tile, +/area/rogue/outdoors/caves) +"hF" = ( +/obj/effect/decal/cleanable/dirt/dust, /obj/structure/mineral_door/wood/green{ - name = "Old Door"; - locked = 1 + locked = 1; + name = "Old Door" }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/cavelava) +"hJ" = ( +/obj/structure/closet/crate/chest/neu_fancy, /obj/effect/decal/cleanable/dirt/dust, -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/mountains/decap) -"oa" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/pick/copper, -/obj/item/rogueweapon/pick/copper, -/turf/open/floor/rogue/twig, -/area/rogue/outdoors/mountains/decap) -"ol" = ( -/obj/effect/decal/cleanable/blood/old{ - icon_state = "splatter3" +/obj/item/roguestatue/gold/loot, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/under/cavelava) +"ib" = ( +/obj/item/grown/log/tree/small, +/obj/structure/closet/crate/chest/crafted, +/obj/item/reagent_containers/powder/salt, +/obj/item/rogueore/coal, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) +"ig" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 4; + icon_state = "torchwall1" }, -/turf/open/floor/rogue/tile, -/area/rogue/outdoors/mountains/decap) -"op" = ( -/obj/structure/fermenting_barrel/water, +/obj/structure/table/wood/plain, +/obj/item/reagent_containers/glass/cup/wooden/crafted, +/turf/open/floor/rogue/ruinedwood/turned/darker, +/area/rogue/indoors/town/dwarfin) +"in" = ( +/obj/structure/table/wood/plain, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/natural/feather, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/herringbone, -/area/rogue/outdoors/mountains/decap) -"oA" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/outdoors/mountains/decap) -"oH" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"oO" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/old, -/mob/living/carbon/human/species/skeleton/npc/warrior/skilled, -/turf/open/floor/rogue/ruinedwood/darker, -/area/rogue/outdoors/mountains/decap) -"oU" = ( +/area/rogue/under/cavelava) +"ix" = ( +/obj/structure/closet/crate/roguecloset/dark, +/obj/item/rogueweapon/mace/steel, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/crate/coffin, -/obj/item/rogueweapon/sword/decorated, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/mountains/decap) -"oZ" = ( -/mob/living/carbon/human/species/skeleton/npc/warrior/skilled, -/obj/structure/chair/wood/rogue/fancy{ +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/under/cavelava) +"iB" = ( +/obj/structure/ladder/earth, +/turf/open/transparent/openspace, +/area/rogue/outdoors/mountains) +"iC" = ( +/obj/structure/fluff/railing/fence{ dir = 8 }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, -/area/rogue/outdoors/mountains/decap) -"pv" = ( -/obj/structure/closet/crate/chest/wicker, -/obj/item/roguegem{ - name = "Chaos Gemerald"; - desc = "It feels warm to the touch." - }, -/obj/item/roguegem/green{ - name = "Chaos Gemerald"; - desc = "It feels warm to the touch." - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/mountains/decap) -"pO" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/outdoors/mountains/decap) -"qF" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/clothing/suit/roguetown/shirt/robe/magus, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/carpet/red, -/area/rogue/outdoors/mountains/decap) -"re" = ( -/obj/structure/table/wood/plain/alt, -/obj/item/candle/skull/lit, -/turf/open/floor/rogue/twig, -/area/rogue/outdoors/mountains/decap) -"rr" = ( +/obj/structure/fluff/railing/fence, +/obj/structure/fluff/railing/stonehedge, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/dwarfin) +"iI" = ( /obj/structure/spider/stickyweb, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/mountains/decap) -"rE" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/pick/copper, -/turf/open/floor/rogue/twig, +/mob/living/simple_animal/hostile/retaliate/rogue/spider, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cavelava) +"iJ" = ( +/obj/item/reagent_containers/glass/cup, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) +"ji" = ( +/obj/structure/table/wood/treestump/burnt, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/caves) +"jm" = ( +/turf/open/floor/rogue/dirt, /area/rogue/outdoors/mountains/decap) -"rL" = ( +"jy" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/dwarfin) +"jz" = ( /obj/structure/bookcase, /obj/item/book/rogue/yeoldecookingmanual, /obj/item/book/rogue/magicaltheory, @@ -437,661 +398,1261 @@ /obj/item/book/rogue/arcyne, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/concrete, -/area/rogue/outdoors/mountains/decap) -"sm" = ( -/obj/structure/table/wood/reinforced, -/obj/item/roguestatue/silver/gnome, +/area/rogue/under/cavelava) +"jE" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, -/area/rogue/outdoors/mountains/decap) -"so" = ( -/turf/closed/mineral/random/rogue, -/area/rogue/outdoors/mountains/decap) -"sw" = ( -/obj/structure/table/wood/reinforced, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden{ - pixel_x = -5; - pixel_y = -5 - }, +/obj/structure/rack/rogue, +/obj/item/reagent_containers/glass/bottle/rogue/manapot, +/obj/item/reagent_containers/glass/bottle/rogue/manapot, +/turf/open/floor/rogue/cobble, +/area/rogue/under/cavelava) +"jU" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, +/turf/open/floor/rogue/cobble/mossy, +/area/rogue/under/cavelava) +"kb" = ( +/turf/open/floor/rogue/volcanic, +/area/rogue/outdoors/mountains/decap) +"kn" = ( +/obj/structure/flora/newtree, +/turf/open/floor/rogue/grass, /area/rogue/outdoors/mountains/decap) -"sA" = ( +"kq" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/rogue/cauldron, /turf/open/floor/rogue/greenstone, -/area/rogue/outdoors/mountains/decap) -"sF" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/mountains/decap) -"sP" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/fluff/railing/stonehedge{ - dir = 8 - }, +/area/rogue/under/cavelava) +"ky" = ( +/obj/machinery/light/rogue/torchholder, +/turf/closed/wall/mineral/rogue/stonebrick, +/area/rogue/outdoors/caves) +"kG" = ( +/obj/item/ammo_casing/caseless/rogue/dart, +/turf/open/floor/rogue/ruinedwood/turned/darker, +/area/rogue/indoors/town/dwarfin) +"kI" = ( +/obj/machinery/light/rogue/firebowl, /turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"sQ" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/crate/coffin, -/obj/item/reagent_containers/powder/spice, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/mountains/decap) -"sR" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains/decap) -"sV" = ( -/turf/closed/mineral/random/rogue/med, -/area/rogue/outdoors/mountains/decap) -"ta" = ( -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/mountains/decap) -"th" = ( +/area/rogue/outdoors/caves) +"kM" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/item/clothing/suit/roguetown/shirt/robe/phys, -/obj/effect/decal/cleanable/blood, +/mob/living/carbon/human/species/skeleton/npc/warrior/skilled, /turf/open/floor/rogue/greenstone, -/area/rogue/outdoors/mountains/decap) -"tz" = ( +/area/rogue/under/cavelava) +"kR" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/mountains) +"kX" = ( +/turf/open/transparent/openspace, +/area/rogue/outdoors/mountains/deception) +"lq" = ( +/obj/structure/table/wood/reinforced, +/obj/item/book/rogue/advice_farming, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/old{ - icon_state = "gib6-old" - }, -/turf/open/floor/rogue/greenstone, -/area/rogue/outdoors/mountains/decap) -"tF" = ( -/obj/structure/table/wood/plain/alt, -/turf/open/floor/rogue/twig, -/area/rogue/outdoors/mountains/decap) -"tM" = ( -/turf/open/water/swamp, -/area/rogue/outdoors/mountains/decap) -"tU" = ( -/obj/structure/mineral_door/wood/green{ - name = "Old Door"; - locked = 1 - }, +/obj/machinery/light/rogue/wallfire/candle/l, /turf/open/floor/rogue/concrete, +/area/rogue/under/cavelava) +"lz" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/troll, +/turf/open/floor/rogue/dirt, +/area/rogue/under/cavelava) +"lH" = ( +/obj/machinery/light/rogue/torchholder, +/turf/closed/wall/mineral/rogue/stone, /area/rogue/outdoors/mountains/decap) -"ua" = ( -/obj/machinery/light/rogue/cauldron, +"lN" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/cobble, +/area/rogue/under/cavelava) +"lS" = ( +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/caves) +"lZ" = ( +/obj/structure/closet/crate/chest/neu_fancy, +/obj/item/roguecoin/silver/pile, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/under/cavelava) +"ma" = ( +/obj/structure/fluff/railing/stonehedge, +/turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/mountains/decap) -"uf" = ( -/turf/closed/mineral/random/rogue/high, +"mb" = ( +/turf/open/water/cleanshallow, /area/rogue/outdoors/mountains/decap) -"uh" = ( -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/cobblerock, +"mf" = ( +/turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/mountains/decap) -"uq" = ( -/obj/structure/roguetent/preopen, +"mi" = ( +/obj/structure/barricade/wooden/rogue, +/obj/structure/barricade/wooden/rogue/crude, +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/caves) +"mp" = ( +/obj/structure/fluff/railing/fence, /turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"us" = ( +/area/rogue/outdoors/mountains) +"mu" = ( +/turf/open/floor/rogue/cobblerock, +/area/rogue/indoors/town/dwarfin) +"mG" = ( +/obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/blood/old{ icon_state = "splatter3" }, -/turf/open/floor/rogue/ruinedwood/turned, -/area/rogue/outdoors/mountains/decap) -"uy" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/rogueweapon/flail/sflail, +/turf/open/floor/rogue/cobble, +/area/rogue/under/cavelava) +"mL" = ( +/obj/item/restraints/legcuffs/beartrap/armed/camouflage, /turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"uC" = ( +/area/rogue/outdoors/caves) +"mV" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cavelava) +"mW" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/barricade/wooden/rogue, -/obj/structure/barricade/wooden/rogue/crude, -/turf/open/floor/rogue/greenstone, -/area/rogue/outdoors/mountains/decap) -"vf" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/roguestatue/gold, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"vx" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/mountains/decap) -"vy" = ( -/obj/item/ammo_casing/caseless/rogue/arrow/stone, -/obj/effect/decal/cleanable/blood/old{ - icon_state = "splatter3" - }, -/obj/item/clothing/ring/silver/makers_guild, -/turf/open/floor/rogue/twig, +/turf/open/floor/rogue/blocks, +/area/rogue/under/cavelava) +"mX" = ( +/obj/structure/roguerock, +/turf/open/floor/rogue/dirt, /area/rogue/outdoors/mountains/decap) -"vB" = ( +"ne" = ( +/obj/structure/rack/rogue, +/obj/item/roguegem/diamond, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/carpet/red, -/area/rogue/outdoors/mountains/decap) -"vH" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/spider, -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/mountains/decap) -"vU" = ( +/turf/open/floor/rogue/concrete, +/area/rogue/under/cavelava) +"ny" = ( +/turf/open/floor/rogue/dirt/ambush, +/area/rogue/under/cavelava) +"nz" = ( +/turf/closed/mineral/random/rogue/high, +/area/rogue/under/cavelava) +"nA" = ( +/obj/item/reagent_containers/glass/cup/wooden/crafted, +/obj/structure/table/wood/plain, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/dwarfin) +"nC" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/crate/coffin, -/obj/item/clothing/ring/silver/calm, -/obj/item/clothing/head/roguetown/helmet/sallet/zybantine, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/mountains/decap) -"vW" = ( +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/rogue/blocks, +/area/rogue/under/cavelava) +"nE" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 4; + icon_state = "torchwall1" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/dwarfin) +"nM" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/item/alch/bone, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/mountains/decap) -"wk" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 10 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/cavelava) +"nP" = ( /obj/structure/closet/crate/roguecloset/inn, /obj/item/clothing/ring/gold/ravox, /obj/item/clothing/head/roguetown/crown/circlet/vision, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/carpet/red, +/area/rogue/under/cavelava) +"nQ" = ( +/obj/structure/roguerock, +/turf/open/water/river, /area/rogue/outdoors/mountains/decap) -"wv" = ( +"nY" = ( +/obj/structure/table/wood/reinforced, +/obj/item/mortar, +/obj/item/pestle, +/obj/item/reagent_containers/glass/bottle/rogue/stronghealthpot, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/cavelava) +"oc" = ( +/turf/closed/mineral/random/rogue/med, +/area/rogue/outdoors/caves) +"oh" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/barricade/wooden/rogue, +/obj/structure/barricade/wooden/rogue/crude, +/turf/open/floor/rogue/greenstone, +/area/rogue/under/cavelava) +"oj" = ( +/obj/item/ammo_casing/caseless/rogue/dart, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/dwarfin) +"oo" = ( /obj/structure/spider/stickyweb, -/obj/structure/spider/cocoon, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cavelava) +"or" = ( +/obj/structure/bed/rogue/sleepingbag, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) +"oG" = ( +/obj/machinery/light/rogue/firebowl/stump, +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/mountains/deception) +"oH" = ( +/obj/structure/mineral_door/wood/green{ + locked = 1; + name = "Old Door" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/cavelava) +"oI" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/item/alch/bone, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/mountains/decap) -"wx" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/item/clothing/head/roguetown/hatfur, -/turf/open/floor/rogue/twig, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/under/cavelava) +"oS" = ( +/obj/structure/stairs{ + dir = 1 + }, +/turf/open/floor/rogue/ruinedwood/turned/darker, +/area/rogue/indoors/town/dwarfin) +"pk" = ( +/turf/open/water/cleanshallow, +/area/rogue/outdoors/mountains/deception) +"pt" = ( +/turf/closed/mineral/random/rogue/med, /area/rogue/outdoors/mountains/decap) -"wy" = ( -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, +"pv" = ( +/obj/structure/table/wood/plain, +/obj/item/roguecoin/gold/pile, /obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/under/cavelava) +"pK" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/gibs/torso, +/mob/living/simple_animal/hostile/retaliate/rogue/troll, /turf/open/floor/rogue/blocks, +/area/rogue/under/cavelava) +"pM" = ( +/obj/machinery/light/rogue/firebowl/standing, +/turf/open/floor/rogue/hexstone, /area/rogue/outdoors/mountains/decap) -"wz" = ( +"pO" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/ruinedwood/turned/darker, +/area/rogue/indoors/town/dwarfin) +"pV" = ( +/obj/item/ammo_casing/caseless/rogue/dart, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/caves) +"qe" = ( +/obj/structure/closet/crate/chest/neu_fancy, /obj/effect/decal/cleanable/dirt/dust, +/obj/item/roguestatue/iron, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/under/cavelava) +"qk" = ( +/obj/effect/landmark/mapGenerator/rogue/decap, +/turf/closed/mineral/rogue/bedrock, +/area/rogue/under/cavelava) +"qp" = ( /mob/living/carbon/human/species/skeleton/npc/warrior/skilled, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/mountains/decap) -"wA" = ( /obj/effect/decal/cleanable/dirt/dust, -/mob/living/carbon/human/species/skeleton/npc/warrior/skilled, -/turf/open/floor/rogue/cobble/mossy, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/under/cavelava) +"qv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/cavelava) +"qB" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/mountains/deception) +"qI" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/rogue/wallfire/candle/blue, +/turf/open/floor/rogue/concrete, +/area/rogue/under/cavelava) +"qO" = ( +/obj/effect/decal/cleanable/dirt/dust, +/mob/living/simple_animal/hostile/retaliate/rogue/troll, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/under/cavelava) +"ra" = ( +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains/deception) +"ri" = ( +/obj/machinery/light/rogue/firebowl/standing, +/turf/open/floor/rogue/dirt, +/area/rogue/under/cavelava) +"rD" = ( +/turf/closed/mineral/random/rogue, /area/rogue/outdoors/mountains/decap) -"wS" = ( -/obj/structure/bars/passage{ - redstone_id = "sewerruin1" - }, +"rN" = ( +/obj/machinery/light/rogue/firebowl, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/caves) +"rO" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/spider/mutated, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/rogue/wallfire/candle/blue, +/turf/open/floor/rogue/cobble, +/area/rogue/under/cavelava) +"rV" = ( +/turf/open/floor/rogue/tile, +/area/rogue/outdoors/caves) +"rY" = ( /obj/structure/barricade/wooden/rogue/crude, +/obj/item/rope, +/obj/structure/barricade/wooden/rogue, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/dwarfin) +"sg" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/mountains/decap) -"wU" = ( +/turf/open/floor/rogue/cobble, +/area/rogue/under/cavelava) +"sj" = ( +/obj/structure/bars/pipe{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/caves) +"sr" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/splatter, +/obj/machinery/light/rogue/wallfire/candle/blue, /turf/open/floor/rogue/cobble, -/area/rogue/outdoors/mountains/decap) -"xs" = ( -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, +/area/rogue/under/cavelava) +"su" = ( +/obj/structure/table/wood/reinforced, +/obj/item/roguestatue/silver/gnome, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/mountains/decap) -"yb" = ( -/obj/structure/fluff/walldeco/masonflag, -/turf/closed/wall/mineral/rogue/tent, -/area/rogue/outdoors/mountains/decap) -"yx" = ( +/turf/open/floor/rogue/herringbone, +/area/rogue/under/cavelava) +"sE" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "gib6-old" + }, /turf/open/floor/rogue/greenstone, +/area/rogue/under/cavelava) +"sI" = ( +/obj/structure/flora/rogueshroom, +/turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/mountains/decap) -"yC" = ( -/obj/structure/mineral_door/wood/green{ - name = "Old Door"; - locked = 1 - }, +"sJ" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, +/turf/closed/wall/mineral/rogue/stonebrick, +/area/rogue/under/cavelava) +"tc" = ( +/obj/item/reagent_containers/glass/bucket, +/turf/open/floor/rogue/cobblerock, +/area/rogue/indoors/town/dwarfin) +"td" = ( +/turf/closed/wall/mineral/rogue/stonebrick, +/area/rogue/outdoors/caves) +"tz" = ( +/turf/closed/mineral/rogue/bedrock, +/area/rogue/outdoors/mountains/deception) +"tL" = ( +/obj/structure/fluff/railing/stonehedge, +/obj/structure/fluff/railing/stonehedge{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/mountains/decap) -"yT" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, +"tM" = ( +/obj/structure/fluff/railing/wood{ + dir = 4 + }, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/mountains/decap) -"zr" = ( -/mob/living/carbon/human/species/skeleton/npc/warrior/skilled, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/wood/nosmooth, +"tN" = ( +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cavelava) +"tQ" = ( +/obj/structure/roguerock, +/turf/open/water/swamp/deep, /area/rogue/outdoors/mountains/decap) -"zv" = ( -/obj/structure/rack/rogue/shelf/biggest, -/obj/structure/rack/rogue/shelf, -/obj/item/roguestatue/gold, +"ug" = ( +/obj/effect/landmark/mapGenerator/rogue/cave/lava, +/turf/closed/mineral/rogue/bedrock, +/area/rogue/under/cavelava) +"up" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/spider, +/turf/open/floor/rogue/dirt, +/area/rogue/under/cavelava) +"uA" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, -/area/rogue/outdoors/mountains/decap) -"zK" = ( -/obj/structure/fluff/railing/fence, +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/cobble, +/area/rogue/under/cavelava) +"uE" = ( +/obj/machinery/light/rogue/firebowl/standing, +/obj/structure/bars, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/mountains/decap) -"zO" = ( -/obj/structure/fluff/railing/stonehedge, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/mountains/decap) -"zP" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/clothing/suit/roguetown/armor/cuirass/iron, -/obj/item/clothing/suit/roguetown/armor/cuirass/iron, +"uQ" = ( +/turf/open/water/cleanshallow, +/area/rogue/under/cavelava) +"vc" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/spider/mutated, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/wood/nosmooth, +/turf/open/floor/rogue/cobble, +/area/rogue/under/cavelava) +"vr" = ( +/obj/item/restraints/legcuffs/beartrap/armed/camouflage, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/caves) +"vA" = ( +/obj/structure/stairs/stone, +/turf/open/floor/rogue/hexstone, /area/rogue/outdoors/mountains/decap) -"zU" = ( +"vB" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/crate/coffin, /obj/item/alch/bonemeal, /turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/mountains/decap) -"Ab" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains/decap) -"Ag" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 +/area/rogue/under/cavelava) +"vC" = ( +/obj/structure/spider/stickyweb, +/obj/structure/spider/stickyweb, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cavelava) +"vV" = ( +/obj/structure/closet/crate/chest/neu_fancy, +/obj/item/roguecoin/copper/pile, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/under/cavelava) +"wc" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/fluff/statue, +/turf/open/floor/rogue/cobble, +/area/rogue/under/cavelava) +"wE" = ( +/turf/open/floor/rogue/ruinedwood/turned/darker, +/area/rogue/indoors/town/dwarfin) +"wH" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 8; + icon_state = "torchwall1" }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/mountains/decap) -"Ak" = ( +/obj/structure/bed/rogue/sleepingbag, +/obj/structure/bed/rogue/sleepingbag, +/turf/open/floor/rogue/ruinedwood/turned/darker, +/area/rogue/outdoors/caves) +"wR" = ( +/obj/structure/closet/crate/chest/neu_fancy, /obj/effect/decal/cleanable/dirt/dust, +/obj/item/roguestatue/gold, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/under/cavelava) +"wT" = ( +/obj/structure/ladder/earth, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) +"wW" = ( +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/dirt, +/area/rogue/under/cavelava) +"wX" = ( +/turf/open/floor/rogue/volcanic, +/area/rogue/outdoors/mountains/deception) +"wZ" = ( /obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, /turf/open/floor/rogue/blocks, -/area/rogue/outdoors/mountains/decap) -"Al" = ( +/area/rogue/under/cavelava) +"xc" = ( /obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/dirt, +/area/rogue/under/cavelava) +"xi" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/concrete, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/gibs/down, +/turf/open/floor/rogue/dirt, +/area/rogue/under/cavelava) +"xm" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/dirt, +/area/rogue/under/cavelava) +"xy" = ( +/obj/structure/flora/shroomstump, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/caves) +"xI" = ( +/obj/effect/decal/cleanable/dirt/dust, +/mob/living/simple_animal/hostile/retaliate/rogue/troll, +/turf/open/floor/rogue/blocks, +/area/rogue/under/cavelava) +"xO" = ( +/turf/closed/mineral/random/rogue/high, +/area/rogue/outdoors/caves) +"xV" = ( +/turf/closed/wall/mineral/rogue/craftstone, /area/rogue/outdoors/mountains/decap) -"AE" = ( -/obj/structure/fluff/railing/stonehedge{ +"yd" = ( +/obj/structure/stairs/stone{ dir = 8 }, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/mountains/decap) -"AH" = ( +"ye" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/mountains/decap) -"AZ" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/mountains/decap) -"Bc" = ( +/obj/structure/closet/crate/coffin, +/obj/item/rogueweapon/sword/decorated, +/turf/open/floor/rogue/cobble/mossy, +/area/rogue/under/cavelava) +"yg" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/mineral_door/wood/green{ - name = "Old Door"; - locked = 1 + locked = 1; + name = "Old Door" }, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/mountains/decap) -"Bo" = ( -/obj/structure/closet/crate/chest/neu_fancy, -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/roguestatue/gold, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/outdoors/mountains/decap) -"Bq" = ( +/turf/open/floor/rogue/blocks, +/area/rogue/under/cavelava) +"yl" = ( /turf/open/lava, /area/rogue/outdoors/mountains/decap) -"BI" = ( -/obj/structure/fluff/traveltile{ - aportalgoesto = "decapout"; - aportalid = "decapin"; - aallmig = "rwfielddecap" +"yu" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/dirt, +/area/rogue/under/cavelava) +"yC" = ( +/obj/structure/stairs/stone{ + dir = 8 }, +/obj/structure/barricade/wooden/rogue, +/obj/structure/barricade/wooden/rogue/crude, /turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/caves) +"yD" = ( +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) +"yX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/cavelava) +"za" = ( +/obj/structure/spider/stickyweb, +/obj/structure/spider/cocoon, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/cobble, +/area/rogue/under/cavelava) +"zs" = ( +/obj/structure/fluff/railing/wood{ + dir = 8 + }, +/turf/open/floor/rogue/ruinedwood, +/area/rogue/outdoors/mountains/deception) +"zE" = ( +/turf/open/floor/rogue/grass, /area/rogue/outdoors/mountains/decap) -"BJ" = ( +"zH" = ( +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/caves) +"zL" = ( /obj/structure/bars, /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains/decap) -"BW" = ( -/obj/effect/decal/cleanable/blood, -/obj/structure/closet/crate/chest/old_crate, -/obj/item/roguecoin/copper/pile, -/obj/item/roguecoin/copper/pile, -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/mountains/decap) -"CC" = ( -/obj/structure/rack/rogue, -/obj/item/roguegem/diamond, +/area/rogue/outdoors/caves) +"zU" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/mountains/deception) +"Aa" = ( +/turf/closed/mineral/rogue/bedrock, +/area/rogue/under/cavelava) +"Ad" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/mountains/decap) -"CU" = ( +/obj/structure/closet/crate/coffin, +/obj/item/rogueweapon/sword/sabre, +/turf/open/floor/rogue/greenstone, +/area/rogue/under/cavelava) +"Aq" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/greenstone, +/area/rogue/under/cavelava) +"Az" = ( +/obj/structure/barricade/wooden/rogue, +/obj/structure/barricade/wooden/rogue/crude, /obj/structure/mineral_door/wood/green{ - name = "Old Door"; - locked = 1 + locked = 1; + name = "Old Door" }, +/obj/effect/decal/cleanable/dirt/dust, /obj/item/restraints/legcuffs/beartrap/armed/camouflage, /turf/open/floor/rogue/cobble, -/area/rogue/outdoors/mountains/decap) -"CY" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/mountains/decap) -"De" = ( -/obj/structure/table/wood/reinforced, -/obj/item/mortar, -/obj/item/pestle, -/obj/item/reagent_containers/glass/bottle/rogue/stronghealthpot, +/area/rogue/under/cavelava) +"AI" = ( +/obj/structure/closet/crate/roguecloset/dark, +/obj/item/clothing/suit/roguetown/armor/chainmail, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, -/area/rogue/outdoors/mountains/decap) -"Dh" = ( -/obj/structure/fluff/walldeco/masonflag, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/mountains/decap) -"DG" = ( +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/under/cavelava) +"AK" = ( +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"AV" = ( /obj/effect/decal/cleanable/blood, -/obj/structure/spider/cocoon, -/obj/item/clothing/ring/silver/rontz, +/obj/structure/closet/crate/chest/old_crate, +/obj/item/roguecoin/copper/pile, +/obj/item/roguecoin/copper/pile, /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/mountains/decap) -"DX" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"Ef" = ( -/obj/effect/decal/cleanable/blood/old, +/area/rogue/under/cavelava) +"Bb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/clothing/suit/roguetown/shirt/robe/phys, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/rogue/greenstone, +/area/rogue/under/cavelava) +"Bs" = ( +/turf/closed/mineral/rogue/bedrock, +/area/rogue/outdoors/caves) +"Bv" = ( +/obj/structure/handcart, /turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/caves) +"Bx" = ( +/turf/open/floor/rogue/dirt/ambush, /area/rogue/outdoors/mountains/decap) -"Et" = ( +"BE" = ( +/obj/structure/closet/crate/roguecloset/dark, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/old, +/obj/item/clothing/head/roguetown/helmet/skullcap, /turf/open/floor/rogue/wood/nosmooth, -/area/rogue/outdoors/mountains/decap) -"EA" = ( +/area/rogue/under/cavelava) +"BK" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/crate/coffin, -/obj/item/roguestatue/silver, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/mountains/decap) -"EK" = ( -/mob/living/carbon/human/species/skeleton/npc/warrior/skilled, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, -/area/rogue/outdoors/mountains/decap) -"EV" = ( +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/under/cavelava) +"Ck" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/neck/roguetown/talkstone, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/mineral_door/wood/green{ - name = "Old Door"; - locked = 1 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/mountains/decap) -"Fc" = ( +/turf/open/floor/rogue/concrete, +/area/rogue/under/cavelava) +"Cl" = ( +/obj/structure/bars, +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/caves) +"CM" = ( +/obj/item/storage/roguebag, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) +"CV" = ( +/obj/structure/flora/rogueshroom, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/caves) +"CW" = ( +/obj/machinery/light/rogue/firebowl/stump, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains/deception) +"Dh" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/barricade/wooden/rogue, +/obj/structure/barricade/wooden/rogue/crude, +/turf/open/floor/rogue/cobble, +/area/rogue/under/cavelava) +"DA" = ( +/obj/item/clothing/head/roguetown/brimmed, +/turf/open/floor/rogue/ruinedwood/turned/darker, +/area/rogue/indoors/town/dwarfin) +"DC" = ( /obj/effect/decal/cleanable/dirt/dust, /mob/living/carbon/human/species/skeleton/npc/warrior/skilled, /turf/open/floor/rogue/herringbone, +/area/rogue/under/cavelava) +"DD" = ( +/turf/open/water/river, /area/rogue/outdoors/mountains/decap) -"Fj" = ( +"DH" = ( /obj/effect/decal/cleanable/dirt/dust, /mob/living/carbon/human/species/skeleton/npc/warrior/skilled, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/mountains/decap) -"Ft" = ( -/obj/structure/spider/stickyweb, +/turf/open/floor/rogue/cobble, +/area/rogue/under/cavelava) +"DJ" = ( +/turf/open/transparent/openspace, +/area/rogue/outdoors/caves) +"DM" = ( +/obj/machinery/light/rogue/firebowl/standing, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/cavelava) +"DN" = ( +/obj/item/candle/yellow/lit/infinite/strong, /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/mountains/decap) -"Fy" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/pick, -/turf/open/floor/rogue/twig, -/area/rogue/outdoors/mountains/decap) -"FL" = ( -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"FP" = ( -/obj/structure/spider/stickyweb, -/obj/structure/spider/cocoon, +/area/rogue/outdoors/mountains) +"DZ" = ( +/obj/structure/fluff/railing/wood{ + dir = 4 + }, +/turf/open/floor/rogue/ruinedwood, +/area/rogue/outdoors/mountains/deception) +"Ee" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/cobble, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/rogue/cobble/mossy, +/area/rogue/under/cavelava) +"Ei" = ( +/obj/structure/fluff/walldeco/masonflag, +/turf/closed/wall/mineral/rogue/stonebrick, +/area/rogue/outdoors/caves) +"EB" = ( +/obj/structure/flora/rogueshroom, +/turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/mountains/decap) -"Gq" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/troll, +"EK" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "splatter3" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/caves) +"Fk" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/gibs/down, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"Gx" = ( -/obj/structure/closet/crate/chest/old_crate, +/obj/structure/closet/crate/coffin, /obj/item/roguecoin/silver/pile, -/turf/open/floor/rogue/twig, -/area/rogue/outdoors/mountains/decap) -"Ha" = ( +/turf/open/floor/rogue/cobble/mossy, +/area/rogue/under/cavelava) +"Fv" = ( +/obj/structure/roguemachine/scomm, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "splatter3" + }, +/turf/open/floor/rogue/ruinedwood/turned/darker, +/area/rogue/indoors/town/dwarfin) +"FC" = ( +/turf/open/floor/rogue/ruinedwood/turned/darker, +/area/rogue/outdoors/caves) +"FE" = ( +/obj/structure/table/wood/reinforced, +/obj/item/reagent_containers/glass/bucket/wooden/alter, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/mountains/decap) -"Ho" = ( -/turf/open/water/swamp/deep, -/area/rogue/outdoors/mountains/decap) -"Hu" = ( +/turf/open/floor/rogue/herringbone, +/area/rogue/under/cavelava) +"FG" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 +/obj/effect/decal/cleanable/blood/old{ + icon_state = "gib6-old" }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/mountains/decap) -"HI" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "splatter3" + }, +/turf/open/floor/rogue/ruinedwood/darker, +/area/rogue/under/cavelava) +"FN" = ( /obj/effect/decal/cleanable/dirt/dust, +/obj/item/alch/bone, +/turf/open/floor/rogue/cobble, +/area/rogue/under/cavelava) +"FZ" = ( +/obj/structure/mineral_door/wood/green{ + locked = 1; + name = "Old Door" + }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/herringbone, -/area/rogue/outdoors/mountains/decap) -"HK" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/greenstone, -/area/rogue/outdoors/mountains/decap) -"Ii" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/roguecoin/gold/pile, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"Ij" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/old, +/area/rogue/under/cavelava) +"Gb" = ( /mob/living/carbon/human/species/skeleton/npc/warrior/skilled, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/mountains/decap) -"IE" = ( -/obj/effect/decal/cleanable/dirt/dust, -/mob/living/simple_animal/hostile/retaliate/rogue/troll, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/mountains/decap) -"IN" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/rogueweapon/mace/steel, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/outdoors/mountains/decap) -"IO" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/twig, -/area/rogue/outdoors/mountains/decap) -"JV" = ( -/obj/machinery/light/rogue/firebowl/standing, -/obj/structure/bars, +/turf/open/floor/rogue/ruinedwood/darker, +/area/rogue/under/cavelava) +"Gv" = ( +/obj/structure/table/wood, +/obj/item/candle/yellow/lit/infinite/strong/skull, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/cavelava) +"GO" = ( +/obj/structure/stairs/stone{ + dir = 8 + }, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/mountains/decap) -"JW" = ( -/obj/structure/bed/rogue/sleepingbag, -/turf/open/floor/rogue/ruinedwood/turned, -/area/rogue/outdoors/mountains/decap) -"Ko" = ( -/obj/structure/table/wood/reinforced, -/obj/item/ship_in_a_bottle, +"GP" = ( +/turf/closed/wall/mineral/rogue/craftstone, +/area/rogue/under/cavelava) +"GQ" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/mountains/decap) -"KB" = ( -/obj/structure/closet/crate/chest/wicker, -/obj/item/roguegem/yellow, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/under/cavelava) +"GW" = ( +/obj/effect/decal/cleanable/blood, +/obj/structure/spider/cocoon, +/obj/item/clothing/ring/silver/rontz, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cavelava) +"Hf" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/mountains/decap) -"KP" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/floor/rogue/blocks, +/turf/closed/wall/mineral/rogue/craftstone, +/area/rogue/under/cavelava) +"Hk" = ( +/turf/open/water/swamp, /area/rogue/outdoors/mountains/decap) -"La" = ( +"HC" = ( +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/caves) +"HI" = ( +/turf/open/transparent/openspace, +/area/rogue/outdoors/mountains) +"HJ" = ( +/obj/structure/closet/crate/chest/neu_fancy, /obj/effect/decal/cleanable/dirt/dust, +/obj/item/roguecoin/copper/pile, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/under/cavelava) +"HO" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/caves) +"HT" = ( +/obj/structure/fermenting_barrel/water, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/gibs/down, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/cavelava) +"HU" = ( +/obj/structure/flora/rogueshroom, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/caves) +"Ig" = ( +/obj/structure/flora/rogueshroom, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/caves) +"Ii" = ( +/obj/effect/decal/cleanable/blood/tracks, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/mountains/decap) -"Le" = ( -/turf/open/water/cleanshallow, -/area/rogue/outdoors/mountains/decap) -"LL" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 8 +"Im" = ( +/obj/structure/barricade/wooden/rogue/crude, +/obj/item/rope, +/obj/structure/barricade/wooden/rogue, +/turf/open/floor/rogue/ruinedwood/turned/darker, +/area/rogue/outdoors/caves) +"It" = ( +/obj/structure/fluff/railing/wood{ + dir = 1 }, -/obj/structure/fluff/railing/stonehedge, -/turf/open/floor/rogue/dirt, +/turf/open/floor/rogue/ruinedwood/turned, /area/rogue/outdoors/mountains/decap) -"LS" = ( -/obj/structure/table/wood/plain, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, +"Iy" = ( +/obj/item/paper/natural, +/obj/item/paper/natural, +/obj/item/paper/natural, /obj/item/natural/feather, +/obj/structure/table/wood/plain, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/dwarfin) +"IC" = ( +/obj/item/rope, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) +"II" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/alch/waterdust, +/obj/item/alch/magicdust, +/obj/item/alch/irondust, +/obj/item/alch/golddust, +/obj/item/alch/firedust, +/obj/item/alch/feaudust, +/obj/item/alch/earthdust, /obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/rogue/wallfire/candle/blue, /turf/open/floor/rogue/herringbone, -/area/rogue/outdoors/mountains/decap) -"Mu" = ( +/area/rogue/under/cavelava) +"IJ" = ( +/obj/structure/stairs/stone{ + dir = 1 + }, +/turf/open/floor/rogue/cobblerock, +/area/rogue/under/cavelava) +"IL" = ( +/obj/structure/well, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/dwarfin) +"IM" = ( +/obj/item/clothing/head/roguetown/hatfur, +/obj/effect/decal/cleanable/blood/old{ + icon_state = "gib6-old" + }, +/turf/open/floor/rogue/ruinedwood/turned/darker, +/area/rogue/indoors/town/dwarfin) +"IV" = ( +/obj/structure/closet/crate/chest/wicker, +/obj/item/roguegem/yellow, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/concrete, +/area/rogue/under/cavelava) +"IY" = ( +/obj/structure/flora/rogueshroom, +/turf/open/floor/rogue/dirt, +/area/rogue/under/cavelava) +"Jc" = ( +/turf/open/floor/rogue/cobblerock, +/area/rogue/under/cavelava) +"Jg" = ( /obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/coffin, +/obj/item/clothing/ring/silver/calm, +/obj/item/clothing/head/roguetown/helmet/sallet/zybantine, +/turf/open/floor/rogue/cobble/mossy, +/area/rogue/under/cavelava) +"Jh" = ( +/turf/closed/mineral/rogue/copper, +/area/rogue/under/cavelava) +"Jk" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/outdoors/caves) +"Jm" = ( +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/caves) +"JK" = ( +/obj/item/ammo_casing/caseless/rogue/arrow/stone, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/caves) +"JL" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/tile/kitchen, +/turf/open/floor/carpet/red, +/area/rogue/under/cavelava) +"JM" = ( +/obj/structure/barricade/wooden/rogue/crude, +/obj/structure/barricade/wooden/rogue, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/caves) +"Ke" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/spider, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cavelava) +"Kk" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table/wood/plain/alt, +/obj/item/candle/skull, +/turf/open/floor/rogue/cobble/mossy, +/area/rogue/under/cavelava) +"Ku" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/caves) +"KM" = ( +/obj/structure/bars, +/turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/mountains/decap) -"MI" = ( -/obj/effect/landmark/mapGenerator/rogue/decap{ - endTurfX = 128; - endTurfY = 128 - }, -/turf/closed/mineral/rogue/bedrock, +"KN" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/spider, +/obj/structure/spider/stickyweb, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cavelava) +"KS" = ( +/turf/open/floor/rogue/hexstone, /area/rogue/outdoors/mountains/decap) -"MM" = ( +"KV" = ( +/obj/machinery/light/rogue/campfire, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cavelava) +"KZ" = ( +/obj/structure/flora/rogueshroom, +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/caves) +"Lg" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/old{ - icon_state = "splatter3" +/obj/effect/decal/cleanable/blood/tracks{ + dir = 6 }, -/turf/open/floor/rogue/cobble, +/turf/open/floor/rogue/blocks, +/area/rogue/under/cavelava) +"LC" = ( +/obj/structure/flora/newtree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"LD" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/mountains/decap) -"NQ" = ( -/turf/closed/wall/mineral/rogue/craftstone, +"LF" = ( +/obj/item/ammo_casing/caseless/rogue/arrow/stone, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/dwarfin) +"LG" = ( +/obj/structure/fluff/railing/wood, +/turf/open/floor/rogue/ruinedwood/turned, /area/rogue/outdoors/mountains/decap) -"Om" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/clothing/suit/roguetown/armor/chainmail, +"LT" = ( +/mob/living/carbon/human/species/skeleton/npc/warrior/skilled, +/obj/structure/chair/wood/rogue/fancy{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/cavelava) +"LZ" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/under/cavelava) +"Ma" = ( +/obj/structure/spider/cocoon, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cavelava) +"Mb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/greenstone, +/area/rogue/under/cavelava) +"Mj" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/wood/nosmooth, -/area/rogue/outdoors/mountains/decap) -"Ox" = ( -/obj/structure/roguetent/preopen, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains/decap) -"OE" = ( +/area/rogue/under/cavelava) +"Mn" = ( +/obj/item/ammo_casing/caseless/rogue/arrow/stone, +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/caves) +"MC" = ( +/obj/structure/rack/rogue/shelf/biggest, +/obj/structure/rack/rogue/shelf, +/obj/item/roguestatue/gold, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/cavelava) +"Nd" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, +/mob/living/carbon/human/species/skeleton/npc/warrior/skilled, +/turf/open/floor/rogue/ruinedwood/darker, +/area/rogue/under/cavelava) +"Nn" = ( /mob/living/simple_animal/hostile/retaliate/rogue/troll, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/gibs/down, /turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"OO" = ( -/obj/structure/statue/bone/skull/half, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"Pr" = ( -/obj/effect/decal/cleanable/blood/old{ - icon_state = "splatter3" +/area/rogue/under/cavelava) +"Np" = ( +/obj/item/grown/log/tree/small, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/caves) +"Nr" = ( +/mob/living/carbon/human/species/skeleton/npc/warrior/skilled, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/cavelava) +"NC" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/dwarfin) +"NL" = ( +/obj/item/grown/log/tree/small, +/obj/item/grown/log/tree/small, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/caves) +"NM" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 8 }, -/turf/open/floor/rogue/twig, -/area/rogue/outdoors/mountains/decap) -"PC" = ( -/obj/structure/chair/stool/rogue, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/mountains/decap) -"PO" = ( -/turf/open/floor/rogue/tile, -/area/rogue/outdoors/mountains/decap) -"PS" = ( -/obj/structure/table/wood/reinforced, -/obj/item/reagent_containers/glass/bucket/wooden/alter, +"NO" = ( +/obj/structure/rack/rogue, /obj/effect/decal/cleanable/dirt/dust, +/obj/item/clothing/neck/roguetown/gorget/hoplite, /turf/open/floor/rogue/herringbone, -/area/rogue/outdoors/mountains/decap) -"Qo" = ( -/turf/open/floor/rogue/hexstone, -/area/rogue/outdoors/mountains/decap) -"Qu" = ( -/obj/structure/barricade/wooden/rogue, +/area/rogue/under/cavelava) +"Oh" = ( /obj/structure/barricade/wooden/rogue/crude, +/obj/structure/barricade/wooden/rogue, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/dwarfin) +"Ou" = ( +/obj/item/reagent_containers/glass/bottle/waterskin, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) +"OM" = ( +/obj/machinery/light/rogue/cauldron, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/cavelava) +"OO" = ( +/obj/item/rogueweapon/pick, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/dwarfin) +"OW" = ( +/obj/structure/fluff/railing/fence{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/dwarfin) +"Pd" = ( +/obj/structure/spider/stickyweb, +/obj/structure/spider/stickyweb, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/cavelava) +"Pe" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/rogue/cobble, +/area/rogue/under/cavelava) +"Ps" = ( +/obj/structure/bed/rogue/sleepingbag, +/turf/open/floor/rogue/ruinedwood/turned/darker, +/area/rogue/outdoors/caves) +"Pt" = ( +/obj/structure/flora/newtree, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/mountains/decap) -"Qx" = ( +"Px" = ( +/obj/structure/stairs/stone{ + dir = 1 + }, +/obj/structure/stairs/stone{ + dir = 1 + }, +/turf/open/floor/rogue/cobblerock, +/area/rogue/under/cavelava) +"PB" = ( +/obj/structure/closet/crate/chest/crafted, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) +"PM" = ( +/obj/item/restraints/legcuffs/beartrap/armed/camouflage, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/ruinedwood/darker, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/blocks, +/area/rogue/under/cavelava) +"PR" = ( +/obj/structure/spider/stickyweb, +/turf/open/floor/rogue/dirt, +/area/rogue/under/cavelava) +"PW" = ( +/obj/structure/flora/newtree, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/mountains) +"PX" = ( +/turf/closed/mineral/random/rogue/high, /area/rogue/outdoors/mountains/decap) -"QB" = ( +"Qf" = ( +/turf/closed/mineral/random/rogue/med, +/area/rogue/outdoors/mountains/deception) +"Qi" = ( +/turf/closed/wall/mineral/rogue/stonebrick, +/area/rogue/under/cavelava) +"Qk" = ( /obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/chest/old_crate, +/obj/item/alch/magicdust, +/obj/item/alch/magicdust, +/turf/open/floor/rogue/cobble/mossy, +/area/rogue/under/cavelava) +"Qm" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/outdoors/mountains/decap) -"QE" = ( -/obj/item/ammo_casing/caseless/rogue/arrow/stone, -/turf/open/floor/rogue/twig, -/area/rogue/outdoors/mountains/decap) -"QF" = ( +/obj/effect/decal/cleanable/blood/old, +/mob/living/carbon/human/species/skeleton/npc/warrior/skilled, +/turf/open/floor/rogue/blocks, +/area/rogue/under/cavelava) +"QP" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/roguecoin/gold/pile, +/turf/open/floor/rogue/dirt, +/area/rogue/under/cavelava) +"QU" = ( +/obj/structure/bars/pipe{ + dir = 9 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/caves) +"QX" = ( +/obj/structure/fluff/railing/fence{ + dir = 4 + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) +"QZ" = ( +/obj/machinery/light/rogue/hearth, +/obj/item/cooking/pan, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/crate/coffin, -/obj/item/alch/bone, -/obj/item/alch/bone, -/obj/item/alch/bone, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/mountains/decap) -"QN" = ( /obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/cavelava) +"Rb" = ( +/obj/structure/flora/rogueshroom, +/turf/closed/mineral/random/rogue/med, +/area/rogue/outdoors/mountains/deception) +"Ro" = ( +/obj/item/sleepingbag, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) +"Rt" = ( +/obj/structure/fluff/railing/fence{ + dir = 4 + }, +/turf/open/floor/rogue/cobblerock, +/area/rogue/indoors/town/dwarfin) +"RD" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/dwarfin) +"RJ" = ( /obj/effect/decal/cleanable/dirt/dust, +/mob/living/carbon/human/species/skeleton/npc/warrior/skilled, +/turf/open/floor/rogue/cobble/mossy, +/area/rogue/under/cavelava) +"RM" = ( +/turf/closed/mineral/rogue/bedrock, +/area/rogue/outdoors/mountains/decap) +"RW" = ( +/obj/structure/fluff/traveltile{ + aportalgoesto = "forestdecapin"; + aportalid = "forestdecapout" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cavelava) +"Sd" = ( /obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/blocks, +/turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/mountains/decap) -"Ra" = ( +"Se" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/crate/coffin, -/obj/item/roguecoin/silver/pile, -/turf/open/floor/rogue/cobble/mossy, +/obj/structure/rack/rogue, +/obj/item/reagent_containers/glass/bottle/rogue/healthpot, +/obj/item/reagent_containers/glass/bottle/rogue/healthpot, +/turf/open/floor/rogue/greenstone, +/area/rogue/under/cavelava) +"Sj" = ( +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/dwarfin) +"Sw" = ( +/obj/structure/spider/stickyweb, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/cavelava) +"Sz" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 4 + }, +/turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/mountains/decap) -"Rj" = ( -/mob/living/carbon/human/species/skeleton/npc/warrior/skilled, +"SI" = ( +/obj/structure/barricade/wooden/rogue/crude, +/obj/structure/barricade/wooden/rogue, +/turf/open/floor/rogue/ruinedwood/turned/darker, +/area/rogue/outdoors/caves) +"SW" = ( +/obj/structure/stairs{ + dir = 1 + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/caves) +"Tj" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/mob/living/simple_animal/hostile/retaliate/rogue/troll, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/under/cavelava) +"Tn" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/ruinedwood/darker, -/area/rogue/outdoors/mountains/decap) -"Ro" = ( +/area/rogue/under/cavelava) +"Ts" = ( /obj/structure/bookcase, /obj/item/book/random, /obj/item/book/random, @@ -1104,16842 +1665,50175 @@ /obj/item/book/random, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/herringbone, +/area/rogue/under/cavelava) +"Ty" = ( +/turf/open/water/swamp/deep, /area/rogue/outdoors/mountains/decap) -"Rp" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/table/wood/plain/alt, -/obj/item/candle/skull, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/mountains/decap) -"RG" = ( -/obj/effect/decal/cleanable/dirt/dust, +"TA" = ( +/obj/structure/closet/crate/chest/crafted, +/obj/item/reagent_containers/food/snacks/rogue/meat/salami/slice, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) +"TG" = ( +/turf/open/floor/rogue/ruinedwood, +/area/rogue/outdoors/mountains/deception) +"TK" = ( /mob/living/carbon/human/species/skeleton/npc/warrior/skilled, -/turf/open/floor/rogue/greenstone, -/area/rogue/outdoors/mountains/decap) -"RJ" = ( -/obj/structure/bed/rogue/inn/double, -/obj/item/bedsheet/rogue/fabric_double, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/carpet/red, -/area/rogue/outdoors/mountains/decap) -"Se" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/neck/roguetown/talkstone, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/cavelava) +"TN" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/rogueweapon/flail/sflail, +/turf/open/floor/rogue/dirt, +/area/rogue/under/cavelava) +"TW" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "splatter3" + }, +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/caves) +"Uf" = ( +/obj/structure/roguemachine/mail, +/turf/open/floor/rogue/ruinedwood/turned/darker, +/area/rogue/indoors/town/dwarfin) +"Ui" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/mountains/decap) -"Ss" = ( -/turf/open/floor/rogue/volcanic, -/area/rogue/outdoors/mountains/decap) -"Sy" = ( +/turf/closed/wall/mineral/rogue/craftstone, +/area/rogue/under/cavelava) +"Uq" = ( +/obj/structure/bars/passage{ + redstone_id = "sewerruin1" + }, +/obj/structure/barricade/wooden/rogue/crude, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/old, /turf/open/floor/rogue/blocks, -/area/rogue/outdoors/mountains/decap) -"SL" = ( -/obj/item/ammo_casing/caseless/rogue/arrow/stone, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"SQ" = ( -/obj/structure/spider/stickyweb, -/mob/living/simple_animal/hostile/retaliate/rogue/spider, -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/mountains/decap) -"SZ" = ( +/area/rogue/under/cavelava) +"Uv" = ( +/turf/closed/mineral/random/rogue/med, +/area/rogue/under/cavelava) +"Uz" = ( /obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/coffin, +/obj/item/alch/bone, +/obj/item/alch/bone, +/obj/item/alch/bone, +/turf/open/floor/rogue/cobble, +/area/rogue/under/cavelava) +"UN" = ( /obj/structure/barricade/wooden/rogue, /obj/structure/barricade/wooden/rogue/crude, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/mountains/decap) -"Tk" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/under/cavelava) +"UT" = ( +/turf/closed/mineral/random/rogue, +/area/rogue/under/cavelava) +"Vd" = ( /obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/coffin, +/obj/item/alch/feaudust, +/obj/item/alch/feaudust, +/turf/open/floor/rogue/cobble/mossy, +/area/rogue/under/cavelava) +"Vh" = ( +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/mountains/deception) +"Vi" = ( +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cavelava) +"Vk" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/mineral_door/wood/green{ - name = "Old Door"; - locked = 1 +/turf/open/floor/rogue/blocks, +/area/rogue/under/cavelava) +"Vz" = ( +/obj/structure/stairs/stone{ + dir = 1 }, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/mountains/decap) -"Ty" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/outdoors/mountains/decap) -"TB" = ( -/obj/effect/decal/cleanable/blood/old, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/mountains/decap) -"TV" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/outdoors/mountains/decap) -"TZ" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"Uc" = ( -/obj/structure/statue/bone/rib, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"Uf" = ( -/obj/structure/roguemachine/mail, -/obj/item/paper/natural, -/obj/item/paper/natural, -/obj/item/paper/natural, -/obj/item/natural/feather, -/turf/open/floor/rogue/tile, -/area/rogue/outdoors/mountains/decap) -"Us" = ( -/obj/structure/closet/crate/chest/neu_fancy, -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/roguecoin/copper/pile, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/outdoors/mountains/decap) -"Ut" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/greenstone, -/area/rogue/outdoors/mountains/decap) -"UA" = ( -/obj/structure/flora/rogueshroom, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains/decap) -"Vd" = ( +"VD" = ( +/obj/item/ammo_casing/caseless/rogue/arrow/stone, +/turf/open/floor/rogue/ruinedwood/turned/darker, +/area/rogue/indoors/town/dwarfin) +"VO" = ( +/obj/machinery/light/rogue/torchholder, +/turf/closed/wall/mineral/rogue/stonebrick, +/area/rogue/indoors/town/dwarfin) +"Wq" = ( +/obj/structure/bookcase, +/obj/item/book/random, +/obj/item/book/random, +/obj/item/book/random, +/obj/item/book/random, +/obj/item/book/random, +/obj/item/book/random, +/obj/item/book/random, +/obj/item/book/random, +/obj/item/book/random, +/obj/item/book/random, +/obj/item/book/random, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/herringbone, -/area/rogue/outdoors/mountains/decap) -"Vg" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/spider, -/obj/structure/spider/stickyweb, +/area/rogue/under/cavelava) +"WB" = ( +/obj/item/restraints/legcuffs/beartrap/armed/camouflage, /turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/mountains/decap) -"VG" = ( +/area/rogue/outdoors/mountains) +"WJ" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"VH" = ( -/obj/structure/rack/rogue, -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/clothing/neck/roguetown/gorget/hoplite, -/turf/open/floor/rogue/herringbone, -/area/rogue/outdoors/mountains/decap) -"Wo" = ( -/obj/structure/fluff/railing/stonehedge, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"Wt" = ( -/obj/effect/decal/cleanable/dirt/dust, +/area/rogue/under/cavelava) +"WL" = ( +/turf/open/water/cleanshallow, +/area/rogue/outdoors/mountains) +"WP" = ( +/turf/closed/mineral/random/rogue/med, +/area/rogue/outdoors/mountains) +"WU" = ( +/turf/closed/mineral/random/rogue/high, +/area/rogue/outdoors/mountains) +"WX" = ( +/obj/structure/spider/stickyweb, +/obj/structure/spider/cocoon, /obj/effect/decal/cleanable/dirt/dust, -/mob/living/simple_animal/hostile/retaliate/rogue/troll, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/outdoors/mountains/decap) -"Xe" = ( +/obj/item/alch/bone, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/cobble, +/area/rogue/under/cavelava) +"Xa" = ( +/obj/structure/fluff/walldeco/customflag, +/turf/closed/wall/mineral/rogue/stonebrick, +/area/rogue/outdoors/caves) +"Xm" = ( +/turf/closed/mineral/random/rogue/high, +/area/rogue/outdoors/mountains/deception) +"Xp" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/crate/coffin, -/obj/item/alch/feaudust, -/obj/item/alch/feaudust, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/mountains/decap) +/obj/effect/decal/cleanable/blood/tracks{ + dir = 5 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/cavelava) "Xq" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/troll, -/turf/open/floor/rogue/tile, -/area/rogue/outdoors/mountains/decap) -"Xz" = ( -/obj/structure/flora/rogueshroom, -/turf/closed/mineral/random/rogue, +/turf/closed/mineral/rogue/copper, /area/rogue/outdoors/mountains/decap) -"XP" = ( -/obj/structure/bed/rogue/hay, +"Xt" = ( +/obj/item/restraints/legcuffs/beartrap/armed/camouflage, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/outdoors/mountains/decap) -"XT" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/blood/old{ - icon_state = "gib6-old" +/turf/open/floor/rogue/blocks, +/area/rogue/under/cavelava) +"Xw" = ( +/obj/effect/landmark/mapGenerator/rogue/cave{ + endTurfX = 155; + endTurfY = 155 }, -/turf/open/floor/rogue/twig, -/area/rogue/outdoors/mountains/decap) -"XU" = ( -/obj/structure/spider/cocoon, -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/mountains/decap) -"XW" = ( -/obj/machinery/light/rogue/campfire/longlived, +/turf/closed/mineral/rogue/bedrock, +/area/rogue/outdoors/mountains/deception) +"Xy" = ( /turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains/decap) -"Yg" = ( -/mob/living/carbon/human/species/zizombie/npc/peasant, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) +/area/rogue/under/cavelava) +"XM" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table/wood/plain/alt, +/obj/item/mortar, +/obj/item/pestle, +/turf/open/floor/rogue/cobble/mossy, +/area/rogue/under/cavelava) +"XQ" = ( +/obj/structure/table/wood, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/cavelava) +"Ye" = ( +/obj/structure/closet/crate/roguecloset/inn/chest, +/obj/item/clothing/suit/roguetown/shirt/robe/magus, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/carpet/red, +/area/rogue/under/cavelava) "Yt" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 8 +/obj/structure/closet/crate/chest/old_crate, +/obj/item/roguestatue/gold, +/turf/open/floor/rogue/dirt, +/area/rogue/under/cavelava) +"YR" = ( +/obj/effect/decal/cleanable/blood/old{ + icon_state = "splatter3" }, /turf/open/floor/rogue/tile, +/area/rogue/indoors/town/dwarfin) +"YV" = ( +/turf/closed/mineral/rogue/salt, /area/rogue/outdoors/mountains/decap) -"YA" = ( +"YW" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/rogue/blocks, +/area/rogue/under/cavelava) +"YX" = ( +/turf/open/floor/rogue/hexstone, +/area/rogue/under/cavelava) +"Zs" = ( +/obj/structure/fluff/walldeco/customflag, +/turf/closed/mineral/rogue/bedrock, +/area/rogue/outdoors/mountains/deception) +"ZA" = ( /obj/structure/closet/crate/roguecloset/dark, +/obj/item/clothing/suit/roguetown/armor/cuirass/iron, +/obj/item/clothing/suit/roguetown/armor/cuirass/iron, /obj/effect/decal/cleanable/dirt/dust, -/obj/item/clothing/head/roguetown/helmet/skullcap, /turf/open/floor/rogue/wood/nosmooth, -/area/rogue/outdoors/mountains/decap) -"YM" = ( -/obj/structure/spider/stickyweb, -/obj/structure/spider/stickyweb, -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/mountains/decap) -"Zt" = ( +/area/rogue/under/cavelava) +"ZE" = ( +/obj/item/ammo_casing/caseless/rogue/arrow/stone, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/caves) +"ZF" = ( /obj/effect/decal/cleanable/dirt/dust, -/mob/living/simple_animal/hostile/retaliate/rogue/troll, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/outdoors/mountains/decap) -"ZN" = ( -/obj/structure/closet/crate/chest/neu_fancy, -/obj/item/roguecoin/silver/pile, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/cavelava) +"ZJ" = ( +/obj/structure/flora/shroomstump, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/caves) +"ZM" = ( +/turf/closed/wall/mineral/rogue/wood, +/area/rogue/outdoors/caves) +"ZO" = ( +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/dirt, +/area/rogue/under/cavelava) +"ZU" = ( +/turf/open/water/swamp, +/area/rogue/under/cavelava) +"ZY" = ( +/obj/item/restraints/legcuffs/beartrap/armed/camouflage, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/outdoors/mountains/decap) -"ZS" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/mountains/decap) +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/rogue/blocks, +/area/rogue/under/cavelava) (1,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +ug "} (2,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -sV -lV -lV -sV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +qk "} (3,1,1) = {" -lV -lV -sV -Bq -sV -lV -lV -sV -sV -sV -sV -sV -lV -lV -lV -lV -lV -lV -sV -sV -Bq -sV -sV -sV -sV -lV -lV -lV -lV -lV -lV -lV -lV -sV -sV -sV -sV -sV -Bq -sV -lV -lV -lV -lV -lV -sV -sV -Bq -sV -sV -uf -sV -sV -sV -lV -lV -lV -lV -lV -lV -uf -uf -uf -uf -uf -lV -uf -uf -sV -sV -sV -sV -sV -Bq -so -so -so -so -so -so -lV -lV -lV -lV -lV -so -so -so -so -so -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -so -so -so -so -so -so -so -so -so -lV -lV -lV -lV -lV -lV -MI -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (4,1,1) = {" -lV -lV -sV -Bq -sV -lV -sV -sV -sV -sV -sV -uf -uf -uf -uf -uf -uf -uf -sV -sV -Bq -sV -sV -sV -sV -lV -lV -lV -lV -lV -lV -lV -lV -sV -uf -uf -sV -sV -Bq -sV -lV -lV -lV -lV -lV -sV -sV -Bq -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -sV -sV -Bq -Bq -so -so -so -so -so -so -lV -lV -lV -so -so -so -so -so -so -so -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -so -so -so -so -so -so -so -so -so -so -lV -lV -lV -lV -lV -lV -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (5,1,1) = {" -lV -lV -sV -Bq -sV -lV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -Bq -sV -sV -sV -sV -lV -lV -lV -lV -lV -sV -sV -sV -sV -uf -uf -sV -sV -Bq -sV -lV -lV -lV -lV -lV -sV -sV -Bq -sV -sV -sV -sV -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -sV -Bq -Bq -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -so -so -so -so -so -so -so -so -so -so -lV -lV -lV -lV -lV -lV -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (6,1,1) = {" -lV -lV -sV -Bq -Bq -lV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -Bq -sV -sV -sV -sV -lV -lV -lV -lV -lV -sV -uf -uf -uf -uf -uf -sV -sV -Bq -sV -lV -lV -lV -lV -lV -sV -sV -Bq -sV -sV -sV -sV -sV -sV -sV -uf -uf -sV -uf -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -Bq -Bq -so -so -so -so -so -so -so -so -so -so -so -so -tM -tM -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Bq -Bq -so -so -so -so -so -so -so -so -so -so -so -so -so -lV -lV -lV -lV -lV -lV -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (7,1,1) = {" -lV -lV -sV -sV -Bq -lV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -Bq -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -uf -uf -uf -uf -uf -sV -sV -Bq -sV -sV -sV -sV -sV -sV -TZ -TZ -Bq -TZ -TZ -TZ -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -so -so -so -so -so -so -so -so -so -so -tM -tM -tM -tM -tM -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Bq -Bq -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -lV -lV -lV -lV -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (8,1,1) = {" -lV -lV -sV -sV -Bq -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -Bq -Bq -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -sV -sV -TZ -sV -Bq -sV -sV -sV -sV -sV -sV -TZ -TZ -Bq -TZ -TZ -TZ -TZ -aY -TZ -Bq -Bq -Bq -Bq -Bq -TZ -sV -sV -TZ -TZ -TZ -aY -TZ -TZ -TZ -Bq -Bq -TZ -TZ -so -so -so -so -so -so -so -so -tM -tM -so -so -tM -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Bq -Bq -so -so -so -so -so -Le -Le -so -so -so -so -so -so -so -lV -lV -lV -lV -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (9,1,1) = {" -lV -lV -sV -sV -Bq -sV -sV -uf -uf -uf -uf -uf -uf -sV -uf -uf -uf -uf -sV -sV -sV -Bq -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -sV -TZ -TZ -sV -Bq -sV -sV -sV -sV -sV -sV -TZ -TZ -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -TZ -TZ -Bq -Bq -Bq -TZ -aY -TZ -TZ -TZ -TZ -TZ -Bq -Bq -TZ -TZ -TZ -so -so -so -so -so -so -so -TZ -tM -tM -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Bq -so -so -so -so -so -so -Le -Le -Le -Le -so -so -so -so -so -so -so -lV -lV -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (10,1,1) = {" -lV -lV -sV -sV -Bq -sV -sV -sV -sV -sV -sV -sV -sV -sV -uf -uf -uf -uf -sV -sV -sV -Bq -sV -uf -uf -sV -sV -sV -sV -sV -sV -sV -TZ -TZ -TZ -TZ -TZ -sV -Bq -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -sV -uf -uf -sV -sV -sV -sV -sV -sV -TZ -TZ -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -TZ -tM -TZ -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Bq -Bq -so -so -so -so -so -so -Le -Le -TZ -TZ -so -so -so -so -so -so -so -lV -lV -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (11,1,1) = {" -lV -lV -sV -sV -sV -Bq -sV -sV -sV -sV -sV -sV -sV -sV -uf -uf -uf -uf -sV -sV -sV -Bq -sV -uf -uf -sV -sV -Le -sV -sV -sV -TZ -sV -sV -TZ -sV -sV -sV -Bq -TZ -TZ -TZ -aY -TZ -aY -Bq -Bq -Bq -sV -uf -uf -uf -sV -sV -sV -sV -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -tM -tM -TZ -TZ -TZ -so -so -so -so -so -TZ -TZ -TZ -TZ -so -so -so -so -so -so -so -so -so -so -so -Bq -Bq -Bq -so -so -so -so -TZ -TZ -TZ -TZ -TZ -so -so -so -so -so -so -so -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (12,1,1) = {" -lV -lV -sV -sV -sV -Bq -sV -sV -sV -Ab -Ab -sV -uf -uf -uf -uf -uf -uf -sV -sV -sV -Bq -sV -uf -uf -sV -sV -Le -Le -sV -TZ -sV -sV -sV -sV -sV -sV -sV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -Bq -sV -sV -uf -uf -uf -sV -sV -sV -TZ -TZ -sV -TZ -TZ -TZ -TZ -sV -sV -TZ -Bq -Bq -so -so -so -so -so -so -TZ -TZ -tM -tM -tM -tM -tM -tM -TZ -TZ -TZ -Ab -Ab -Ab -Ab -Ab -Ab -Ab -TZ -TZ -TZ -TZ -TZ -so -so -so -so -so -so -so -so -Bq -Bq -Bq -TZ -TZ -TZ -TZ -TZ -so -so -so -so -TZ -so -so -so -so -so -so -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (13,1,1) = {" -lV -lV -sV -sV -sV -Bq -sV -sV -sV -Ab -Ab -sV -uf -uf -uf -uf -uf -uf -sV -sV -sV -Bq -sV -sV -sV -sV -Le -Le -Le -Le -Le -TZ -TZ -TZ -sV -sV -sV -TZ -TZ -Bq -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -sV -sV -uf -uf -uf -uf -sV -sV -TZ -TZ -TZ -TZ -TZ -TZ -TZ -sV -sV -sV -Bq -TZ -sV -sV -sV -sV -sV -so -TZ -TZ -tM -tM -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Ab -TZ -TZ -TZ -so -so -Ab -so -so -so -TZ -aY -TZ -TZ -so -so -so -so -so -so -so -so -Bq -Bq -so -so -TZ -TZ -so -so -so -so -TZ -TZ -so -so -so -so -so -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (14,1,1) = {" -lV -lV -sV -sV -sV -Bq -Bq -sV -sV -Ab -Ab -sV -uf -uf -uf -uf -uf -sV -sV -sV -sV -Bq -sV -sV -sV -sV -sV -Le -Le -Le -Le -TZ -TZ -TZ -sV -sV -sV -TZ -TZ -Bq -TZ -TZ -tM -TZ -TZ -TZ -sV -Bq -Bq -sV -sV -uf -uf -uf -uf -sV -aY -TZ -TZ -TZ -TZ -TZ -TZ -sV -sV -Bq -Bq -sV -sV -sV -uf -uf -sV -so -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -tM -tM -TZ -Ab -TZ -so -so -so -TZ -Ab -so -so -so -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -so -so -TZ -Bq -Bq -so -so -so -so -so -so -so -so -so -so -TZ -so -so -so -so -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (15,1,1) = {" -lV -lV -sV -sV -sV -sV -Bq -sV -sV -Ab -Ab -sV -uf -uf -uf -uf -uf -sV -sV -sV -sV -Bq -Bq -sV -sV -sV -sV -Le -Le -Le -TZ -aY -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -TZ -TZ -tM -tM -TZ -TZ -sV -sV -Bq -sV -sV -sV -uf -uf -uf -sV -TZ -TZ -sV -sV -sV -sV -TZ -TZ -sV -Bq -sV -sV -uf -uf -uf -uf -sV -so -TZ -TZ -TZ -tM -tM -TZ -tM -tM -tM -tM -TZ -Ab -TZ -so -so -so -so -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -so -so -so -TZ -Bq -so -so -so -so -so -so -so -so -so -so -so -aY -TZ -so -so -so -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (16,1,1) = {" -lV -lV -sV -sV -sV -sV -Bq -sV -sV -Ab -Ab -sV -uf -uf -uf -uf -uf -sV -sV -TZ -TZ -TZ -Bq -sV -sV -sV -sV -sV -sV -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -TZ -TZ -tM -tM -tM -TZ -sV -sV -Bq -sV -sV -sV -sV -sV -uf -sV -TZ -TZ -sV -sV -sV -sV -sV -sV -Bq -Bq -sV -sV -uf -uf -uf -uf -sV -so -so -so -TZ -TZ -aY -TZ -tM -tM -tM -tM -TZ -Ab -TZ -so -so -so -so -so -so -so -so -so -so -so -TZ -TZ -TZ -so -Ab -so -TZ -TZ -TZ -Bq -so -so -so -so -so -so -so -so -so -so -so -TZ -TZ -so -so -so -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (17,1,1) = {" -lV -lV -uf -uf -uf -sV -Bq -sV -sV -Ab -Ab -sV -sV -sV -sV -sV -sV -sV -sV -TZ -TZ -TZ -Bq -sV -sV -sV -sV -TZ -TZ -TZ -TZ -TZ -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -TZ -TZ -TZ -TZ -TZ -sV -Bq -sV -TZ -TZ -TZ -sV -TZ -TZ -TZ -TZ -sV -sV -sV -sV -sV -sV -Bq -sV -sV -sV -sV -uf -uf -uf -sV -sV -sV -so -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Ab -TZ -so -so -so -so -so -so -so -so -so -so -so -TZ -TZ -TZ -so -Ab -Ab -TZ -TZ -so -Bq -so -so -so -so -so -so -so -so -so -so -so -so -TZ -so -lV -lV -lV -lV -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (18,1,1) = {" -lV -lV -uf -uf -uf -sV -Bq -sV -TZ -Ab -Ab -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -TZ -sV -sV -sV -aY -TZ -TZ -TZ -Bq -Bq -Bq -TZ -TZ -TZ -TZ -TZ -TZ -Bq -TZ -TZ -aY -TZ -TZ -TZ -TZ -Bq -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -sV -sV -sV -sV -sV -Bq -Bq -sV -sV -sV -uf -uf -uf -so -so -so -so -so -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Ab -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Ab -TZ -TZ -so -Bq -Bq -so -so -so -so -so -so -so -so -so -so -so -TZ -so -so -lV -lV -lV -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (19,1,1) = {" -lV -lV -uf -uf -uf -sV -Bq -TZ -TZ -Ab -Ab -aY -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -TZ -TZ -sV -sV -sV -sV -sV -Bq -TZ -TZ -TZ -TZ -aY -TZ -sV -Bq -sV -TZ -TZ -sV -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -sV -sV -Bq -sV -TZ -TZ -sV -uf -uf -sV -so -Ab -Ab -Ab -Ab -Ab -Ab -UA -Ab -Ab -Ab -Ab -Ab -UA -Ab -TZ -so -TZ -TZ -so -so -so -TZ -so -so -so -so -so -so -so -so -so -Ab -TZ -TZ -so -Bq -Bq -so -so -so -so -so -so -so -so -so -so -so -TZ -Ab -Ab -UA -lV -lV -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (20,1,1) = {" -lV -lV -uf -uf -uf -sV -Bq -Bq -TZ -Ab -Ab -TZ -TZ -TZ -TZ -TZ -aY -TZ -TZ -TZ -TZ -TZ -Bq -TZ -sV -sV -TZ -Bq -Bq -Bq -Bq -TZ -TZ -TZ -TZ -sV -sV -sV -sV -sV -Bq -sV -TZ -TZ -Ab -TZ -TZ -sV -Bq -sV -sV -sV -sV -sV -TZ -TZ -TZ -aY -TZ -TZ -TZ -sV -Bq -Bq -sV -sV -sV -uf -uf -uf -sV -so -Ab -TZ -TZ -TZ -TZ -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -TZ -so -so -TZ -so -so -so -TZ -TZ -so -so -so -TZ -TZ -TZ -TZ -Xz -Ab -TZ -TZ -TZ -aY -Bq -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -Ab -Ab -Ab -Ab -Ab -Ab -lV -lV -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (21,1,1) = {" -lV -lV -uf -uf -uf -sV -Bq -Bq -TZ -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Bq -Ab -Ab -Ab -Ab -TZ -TZ -TZ -TZ -TZ -TZ -aY -TZ -sV -sV -sV -sV -sV -Bq -sV -TZ -TZ -Ab -TZ -TZ -sV -Bq -sV -sV -sV -sV -sV -Ab -Ab -Ab -Ab -TZ -TZ -TZ -sV -Bq -sV -sV -sV -sV -uf -uf -uf -sV -so -Ab -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Ab -TZ -TZ -TZ -so -TZ -so -so -TZ -TZ -TZ -so -so -so -so -so -TZ -TZ -TZ -Ab -TZ -TZ -TZ -TZ -Bq -TZ -aY -TZ -TZ -TZ -TZ -TZ -so -so -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (22,1,1) = {" -lV -lV -uf -uf -uf -sV -sV -Bq -TZ -TZ -Ab -Ab -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -TZ -TZ -TZ -Ab -TZ -TZ -aY -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -sV -sV -Bq -sV -TZ -TZ -Ab -TZ -TZ -sV -Bq -sV -sV -sV -sV -sV -Ab -TZ -TZ -Ab -TZ -TZ -TZ -Bq -Bq -sV -sV -sV -uf -uf -sV -sV -sV -so -Ab -TZ -TZ -TZ -TZ -so -so -so -so -TZ -TZ -TZ -Ab -TZ -so -so -TZ -TZ -so -so -so -so -so -so -so -TZ -TZ -TZ -TZ -TZ -TZ -Ab -TZ -TZ -TZ -TZ -Bq -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -TZ -TZ -TZ -TZ -Ab -Ab -Ab -Ab -Ab -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (23,1,1) = {" -lV -lV -uf -uf -uf -sV -sV -Bq -TZ -TZ -UA -Ab -TZ -TZ -TZ -tM -tM -aY -TZ -TZ -TZ -TZ -Bq -TZ -TZ -TZ -Ab -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -sV -sV -Bq -TZ -TZ -TZ -Ab -TZ -TZ -sV -Bq -sV -sV -sV -sV -sV -Ab -TZ -sV -Ab -TZ -TZ -TZ -Bq -TZ -TZ -TZ -sV -uf -uf -so -so -so -so -Ab -TZ -sV -sV -sV -so -so -so -so -TZ -TZ -TZ -Ab -so -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -so -so -TZ -TZ -TZ -aY -TZ -TZ -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -BI -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (24,1,1) = {" -lV -lV -uf -uf -uf -sV -sV -Bq -TZ -TZ -Ab -Ab -aY -TZ -tM -tM -tM -TZ -TZ -sV -TZ -TZ -Bq -TZ -TZ -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Bq -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Bq -Ab -Ab -Ab -Ab -Ab -Ab -TZ -sV -Ab -Ab -Ab -Ab -Bq -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -TZ -sV -sV -uf -uf -uf -so -so -TZ -TZ -TZ -Ab -so -so -so -TZ -TZ -TZ -TZ -so -so -so -so -so -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -Bq -Bq -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Ab -Ab -Ab -Ab -BI -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (25,1,1) = {" -lV -lV -uf -uf -uf -sV -sV -Bq -TZ -TZ -Ab -Ab -TZ -TZ -tM -tM -TZ -TZ -TZ -sV -TZ -TZ -Bq -TZ -TZ -TZ -Ab -sV -TZ -TZ -TZ -TZ -TZ -TZ -Ab -UA -Ab -TZ -sV -sV -Bq -sV -TZ -Ab -UA -Ab -TZ -sV -Bq -sV -sV -sV -sV -sV -sV -sV -sV -TZ -TZ -TZ -Bq -Bq -TZ -TZ -TZ -sV -sV -sV -sV -TZ -TZ -TZ -TZ -TZ -sV -sV -uf -uf -uf -so -so -TZ -TZ -TZ -Ab -so -so -TZ -TZ -so -so -so -so -so -so -so -so -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -aY -TZ -Ab -Ab -Ab -Ab -BI -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (26,1,1) = {" -lV -lV -uf -uf -uf -sV -sV -Bq -TZ -TZ -Ab -Ab -TZ -TZ -TZ -TZ -TZ -TZ -TZ -sV -sV -TZ -Bq -TZ -TZ -TZ -Ab -sV -TZ -tM -tM -tM -TZ -TZ -Ab -Ab -Ab -TZ -sV -sV -Bq -sV -sV -Ab -Ab -Ab -sV -sV -Bq -sV -sV -sV -uf -uf -uf -sV -sV -TZ -TZ -TZ -Bq -TZ -TZ -TZ -TZ -sV -sV -sV -TZ -TZ -TZ -TZ -sV -sV -sV -uf -uf -sV -sV -sV -so -TZ -TZ -TZ -Ab -so -TZ -TZ -so -TZ -so -so -so -so -so -so -TZ -TZ -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -Bq -Bq -TZ -TZ -TZ -TZ -TZ -so -so -so -Bq -Bq -TZ -TZ -Ab -Ab -Ab -Ab -BI -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (27,1,1) = {" -lV -lV -uf -uf -uf -sV -sV -Bq -sV -TZ -Ab -Ab -TZ -TZ -sV -sV -sV -sV -sV -sV -sV -TZ -Bq -aY -TZ -TZ -Ab -sV -TZ -TZ -TZ -tM -TZ -TZ -Ab -Ab -Ab -TZ -sV -sV -Bq -sV -sV -sV -sV -sV -sV -sV -Bq -sV -uf -uf -uf -uf -uf -sV -sV -sV -TZ -Bq -Bq -TZ -TZ -TZ -TZ -uf -uf -uf -sV -sV -sV -TZ -sV -sV -sV -uf -uf -sV -so -so -so -TZ -TZ -TZ -Ab -so -TZ -TZ -TZ -TZ -so -so -so -so -so -Bq -Bq -Bq -Bq -TZ -TZ -TZ -TZ -so -so -so -so -TZ -Bq -Bq -TZ -TZ -TZ -TZ -so -so -so -so -Bq -TZ -TZ -Ab -Ab -Ab -Ab -Ab -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (28,1,1) = {" -lV -lV -uf -uf -uf -sV -TZ -Bq -Bq -TZ -Ab -Ab -sV -sV -sV -sV -sV -sV -uf -uf -uf -TZ -Bq -TZ -TZ -TZ -Ab -lV -lV -lV -lV -lV -lV -lV -sV -sV -sV -sV -sV -sV -Bq -sV -sV -sV -sV -sV -sV -sV -Bq -sV -uf -uf -uf -uf -uf -sV -sV -sV -Bq -Bq -TZ -sV -sV -sV -sV -uf -uf -uf -uf -uf -sV -sV -sV -uf -uf -sV -sV -sV -so -so -TZ -TZ -TZ -TZ -Ab -so -TZ -TZ -so -so -Bq -Bq -Bq -Bq -Bq -Bq -so -Ab -Ab -Ab -Ab -TZ -TZ -so -so -so -so -TZ -Bq -Bq -TZ -TZ -TZ -TZ -so -TZ -so -so -Bq -Bq -TZ -TZ -Ab -Ab -Ab -Ab -lV -lV +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (29,1,1) = {" -lV -lV -uf -uf -uf -sV -TZ -TZ -Bq -TZ -Ab -Ab -sV -sV -sV -sV -sV -sV -uf -uf -uf -sV -Bq -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -uf -sV -sV -sV -sV -sV -Bq -Bq -sV -sV -sV -sV -sV -sV -Bq -Bq -sV -uf -uf -uf -uf -uf -sV -sV -sV -Bq -sV -sV -sV -sV -sV -sV -uf -uf -uf -sV -sV -sV -sV -sV -uf -uf -sV -sV -sV -so -TZ -TZ -TZ -TZ -TZ -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -TZ -TZ -TZ -TZ -TZ -Ab -TZ -TZ -Ab -TZ -TZ -so -so -so -so -Bq -Bq -Bq -TZ -TZ -TZ -TZ -so -TZ -TZ -so -so -Bq -Bq -so -Ab -lV -lV -lV -lV -lV +Aa +Aa +Aa +Aa +Aa +Aa +GP +GP +GP +GP +GP +GP +GP +GP +GP +Aa +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (30,1,1) = {" -lV -lV -uf -uf -uf -sV -TZ -Bq -Bq -TZ -Ab -Ab -sV -sV -sV -sV -lV -lV -uf -uf -uf -lV -Bq -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -uf -sV -sV -sV -lV -lV -Bq -Bq -lV -lV -sV -sV -lV -lV -Bq -Bq -sV -uf -uf -uf -uf -uf -sV -sV -Bq -Bq -sV -sV -sV -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -so -TZ -TZ -Bq -Bq -Bq -Bq -so -so -so -TZ -so -so -so -so -so -so -so -so -Ab -TZ -TZ -Ab -aY -TZ -so -so -TZ -TZ -Bq -Bq -TZ -TZ -aY -TZ -TZ -so -so -TZ -so -so -so -Bq -Bq -Bq -lV -lV -lV -lV -lV +Aa +GP +GP +GP +GP +GP +GP +fJ +mG +Uz +kM +Ad +mG +dY +GP +Aa +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (31,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -Bq -Bq -lV -sV -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -lV -Bq -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -uf -sV -sV -sV -lV -lV -Bq -Bq -lV -lV -sV -sV -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -sV -sV -sV -uf -uf -uf -uf -uf -sV -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -Bq -Bq -Bq -Bq -Bq -so -TZ -Ab -TZ -so -TZ -TZ -so -so -so -so -so -so -so -so -Ab -TZ -TZ -Ab -TZ -TZ -TZ -TZ -TZ -TZ -Bq -Bq -TZ -TZ -TZ -TZ -TZ -so -so -TZ -so -so -so -so -so -Bq -Bq -lV -lV -lV -lV +Aa +GP +sg +uA +DH +sg +Ui +jU +jU +sg +sE +sg +jU +DH +GP +Aa +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (32,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -Bq -Bq -lV -sV -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -sV -Bq -sV -sV -sV -sV -sV -sV -sV -uf -uf -uf -uf -sV -sV -sV -lV -lV -Bq -Bq -lV -lV -sV -sV -lV -lV -Bq -Bq -sV -uf -uf -uf -uf -uf -sV -Bq -sV -sV -sV -sV -uf -uf -uf -uf -uf -uf -sV -sV -TZ -TZ -TZ -TZ -Bq -Bq -Bq -Bq -Bq -TZ -so -so -so -so -TZ -Ab -TZ -so -TZ -so -so -so -so -so -so -so -so -so -Ab -TZ -so -Ab -TZ -TZ -TZ -TZ -TZ -Bq -Bq -TZ -TZ -TZ -TZ -so -so -so -so -TZ -TZ -TZ -TZ -so -so -so -Bq -Bq -lV -lV -lV +Aa +GP +wc +ye +sg +sg +Ui +Kk +Vd +Mb +Mb +vB +sg +Fk +GP +Aa +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +PR +LZ +PR +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (33,1,1) = {" -lV -lV -uf -uf -uf -lV -sV -Bq -Bq -lV -sV -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -sV -Bq -sV -sV -sV -sV -sV -sV -sV -uf -uf -uf -uf -sV -sV -sV -Ab -lV -Bq -Bq -lV -lV -sV -sV -lV -lV -Bq -Bq -sV -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -sV -uf -uf -uf -uf -sV -sV -sV -Ab -Ab -Bq -Bq -Bq -Bq -TZ -so -TZ -Bq -TZ -so -so -so -so -TZ -Ab -TZ -so -so -so -so -so -so -so -so -TZ -TZ -TZ -Ab -so -so -Ab -Ab -TZ -TZ -TZ -Bq -Bq -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -TZ -TZ -TZ -TZ -so -so -so -so -Bq -Bq -lV -lV +Aa +GP +Mb +Mb +jU +jU +Ui +Ui +Ui +sg +Ui +Ui +Ui +Ui +GP +Aa +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +PR +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (34,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -Bq -Bq -lV -sV -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -sV -Bq -sV -sV -sV -sV -sV -sV -sV -uf -uf -uf -uf -sV -sV -sV -Ab -lV -Bq -Bq -lV -lV -sV -sV -lV -lV -Bq -Bq -sV -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -sV -uf -uf -uf -uf -sV -sV -Ab -Ab -Bq -Bq -sV -sV -TZ -TZ -TZ -TZ -Bq -so -so -so -so -so -TZ -Ab -TZ -so -so -so -so -so -so -so -so -so -so -so -Ab -so -so -so -Ab -TZ -TZ -TZ -Bq -TZ -aY -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -TZ -so -so -so -so -so -so -lV -lV +Aa +GP +Ui +Ui +jU +Ui +Ui +sg +Aq +Mb +Ui +sg +jU +sg +GP +Aa +LZ +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (35,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -Bq -Bq -lV -sV -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -sV -Bq -sV -sV -sV -sV -sV -sV -sV -uf -uf -uf -uf -sV -sV -sV -Ab -lV -Bq -Bq -lV -lV -sV -sV -lV -lV -Bq -Bq -sV -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -Ab -Ab -Bq -Bq -sV -sV -sV -TZ -TZ -so -TZ -Bq -Bq -so -so -so -so -TZ -Ab -TZ -so -so -so -so -so -so -so -TZ -so -so -so -Ab -so -so -so -Ab -TZ -TZ -TZ -Bq -TZ -TZ -TZ -TZ -TZ -TZ -aY -TZ -TZ -TZ -TZ -so -so -TZ -TZ -TZ -so -so -so -so -lV -lV +Aa +GP +sg +kM +jU +sg +Dh +Mb +kM +jU +jU +RJ +sg +Pe +GP +Aa +Aa +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (36,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -Bq -Bq -lV -sV -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -sV -Bq -lV -lV -lV -lV -lV -sV -sV -uf -uf -uf -uf -sV -sV -Ab -Ab -lV -Bq -Bq -lV -lV -sV -sV -lV -lV -Bq -Bq -sV -sV -sV -uf -uf -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -Ab -sV -Bq -Bq -Bq -sV -TZ -TZ -TZ -TZ -so -so -so -Bq -Bq -so -so -so -so -Ab -Ab -TZ -so -so -so -so -so -so -so -TZ -so -so -so -Ab -so -so -so -Ab -TZ -aY -TZ -Bq -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -TZ -TZ -TZ -so -so -so -lV -lV +Aa +GP +sr +sg +jU +sg +oh +Mb +jU +Ee +jU +jU +jU +sg +GP +GP +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (37,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -Bq -Bq -lV -sV -sV -sV -sV -sV -sV -sV -sV -uf -uf -uf -lV -Bq -lV -lV -lV -lV -Ab -sV -sV -uf -uf -uf -uf -sV -sV -Ab -Ab -lV -Bq -Bq -lV -lV -sV -sV -lV -lV -Bq -Bq -sV -sV -sV -uf -uf -uf -sV -sV -sV -sV -sV -sV -sV -Ab -Ab -sV -Bq -Bq -sV -sV -TZ -TZ -TZ -TZ -TZ -so -so -so -Bq -Bq -so -so -so -so -Ab -Ab -TZ -so -so -so -so -so -so -so -so -TZ -so -so -Ab -TZ -so -so -so -Ab -Ab -Bq -Bq -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -TZ -TZ -TZ -TZ -so -so -so -lV -lV +Aa +GP +Ui +Ui +jU +Ui +Ui +Ui +Ui +Ui +Ui +Mb +Mb +sg +sg +GP +Aa +Uv +Uv +LZ +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +PR +PR +Uv +Uv +Uv +Uv +PR +PR +Uv +LZ +PR +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (38,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -Bq -Bq -lV -lV -lV -sV -sV -sV -sV -sV -sV -uf -uf -uf -lV -Bq -lV -lV -lV -Ab -Ab -uf -uf -uf -uf -uf -uf -uf -sV -Ab -Ab -lV -Bq -Bq -lV -lV -sV -sV -lV -lV -Bq -Bq -lV -lV -sV -sV -sV -sV -Bq -Bq -Bq -sV -sV -Ab -Ab -Ab -Bq -Bq -Bq -sV -Ab -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -Bq -Bq -so -so -TZ -aY -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -so -Ab -TZ -so -so -so -so -so -Bq -Bq -so -so -so -so -so -so -TZ -TZ -TZ -TZ -TZ -TZ -so -TZ -TZ -TZ -so -so -so -so -lV -lV +Aa +GP +sg +jU +jU +sg +Ui +kq +XM +Qk +Ui +Mb +Ui +sg +Pe +GP +Xy +Uv +Uv +LZ +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +PR +IY +LZ +up +LZ +ZO +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (39,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -Bq -Bq -TZ -TZ -TZ -TZ -TZ -TZ -TZ -sV -sV -uf -uf -uf -sV -Bq -Ss -sV -sV -sV -sV -uf -uf -uf -uf -uf -uf -uf -sV -sV -sV -sV -Bq -Bq -Ss -Ss -sV -sV -sV -Bq -Bq -Bq -sV -TZ -sV -sV -sV -sV -Bq -Bq -Bq -sV -Bq -Ab -Ab -Bq -Bq -sV -Ab -Ab -TZ -TZ -sV -TZ -TZ -TZ -TZ -so -so -so -Bq -Bq -so -so -TZ -TZ -Ab -so -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Ab -TZ -Ab -TZ -TZ -so -so -so -Bq -Bq -TZ -so -so -so -so -so -so -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -TZ -so -so -so -so -lV -lV +Aa +GP +wc +Jg +jU +jU +Ui +Mb +sg +jU +Mb +Mb +Ui +Mb +sg +fh +Xy +LZ +LZ +LZ +ZU +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +PR +LZ +LZ +LZ +LZ +LZ +PR +UT +UT +UT +UT +UT +UT +UT +UT +UT +UT +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (40,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -Bq -Bq -TZ -TZ -sV -sV -TZ -TZ -TZ -sV -sV -uf -uf -Bq -Bq -Bq -Ss -sV -sV -sV -sV -uf -uf -uf -uf -uf -uf -uf -sV -sV -sV -sV -Bq -Bq -Ss -sV -sV -sV -sV -Bq -sV -sV -sV -sV -sV -sV -sV -sV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Ab -Ab -Ab -sV -sV -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -Bq -Bq -TZ -TZ -TZ -TZ -Ab -so -so -so -so -so -so -so -so -so -so -TZ -Ab -Ab -Ab -TZ -Bq -Bq -Bq -Bq -Bq -Ab -TZ -so -so -TZ -TZ -so -TZ -so -TZ -so -so -TZ -TZ -TZ -TZ -so -TZ -Bq -Bq -Bq -Bq -lV -lV +Aa +GP +sg +sg +DH +sg +Ui +Se +DH +ad +sg +Mb +Ui +Ui +GP +GP +Xy +LZ +LZ +LZ +LZ +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +PR +LZ +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +UT +UT +UT +UT +UT +Aa +Aa +Aa +UT +UT +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (41,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -Bq -Bq -TZ -TZ -TZ -TZ -TZ -TZ -TZ -sV -Bq -Bq -Bq -Bq -Bq -Bq -Ss -sV -sV -sV -sV -uf -uf -uf -uf -uf -uf -uf -sV -sV -Ss -Ss -Bq -Bq -Ss -Ss -Ss -Ss -Ss -Bq -sV -sV -sV -TZ -sV -uf -sV -sV -Bq -Bq -Bq -Bq -Bq -Bq -Ab -sV -sV -sV -sV -TZ -sV -TZ -TZ -TZ -TZ -TZ -TZ -so -TZ -aY -Bq -Bq -TZ -TZ -TZ -TZ -Ab -so -so -so -so -so -so -so -so -so -TZ -TZ -TZ -TZ -aY -Bq -Bq -Bq -Bq -Bq -Bq -Ab -TZ -so -so -so -TZ -TZ -TZ -TZ -TZ -so -so -so -TZ -TZ -TZ -TZ -TZ -Bq -Bq -so -so -lV -lV +Aa +GP +GP +GP +GP +GP +Hf +hd +Bb +gm +jE +GP +GP +Aa +Aa +Aa +Xy +Uv +Uv +Uv +LZ +LZ +Uv +Uv +Uv +LZ +Uv +LZ +Uv +Uv +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +Uv +ZO +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +PR +UT +UT +UT +UT +UT +UT +UT +Aa +GW +Aa +Aa +UT +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (42,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -Bq -Bq -TZ -TZ -sV -TZ -aY -TZ -TZ -Bq -Bq -Bq -uf -uf -sV -Bq -Ss -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -Ss -Ss -Bq -Bq -Ss -Ss -Ss -Ss -Ss -Bq -sV -TZ -TZ -TZ -sV -uf -sV -sV -Bq -Bq -Bq -Bq -Bq -Ab -Ab -sV -sV -sV -sV -sV -sV -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -TZ -TZ -TZ -TZ -TZ -so -so -so -so -so -so -so -so -so -so -TZ -so -Bq -Bq -Bq -Bq -TZ -so -so -Bq -Bq -Bq -Bq -Bq -Bq -so -so -TZ -so -so -TZ -so -so -so -Bq -Bq -Bq -Bq -Bq -Bq -Bq -so -so -lV -lV +Aa +Aa +Aa +Aa +Aa +GP +GP +GP +GP +GP +GP +GP +Aa +Aa +Xy +Xy +Xy +Uv +Uv +Uv +ZU +LZ +LZ +LZ +Uv +Uv +Uv +LZ +Uv +Uv +Uv +LZ +LZ +Uv +Uv +Uv +Uv +PR +LZ +LZ +LZ +Uv +PR +uQ +PR +LZ +LZ +LZ +Uv +Uv +LZ +LZ +hm +UT +UT +UT +UT +UT +UT +UT +Aa +mV +AV +Aa +UT +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +ZO +LZ +LZ +IY +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (43,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -Bq -Bq -TZ -TZ -TZ -TZ -TZ -TZ -Bq -Bq -sV -uf -uf -uf -sV -Bq -Ss -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -Ss -Ss -Bq -Bq -Bq -Bq -Bq -Ss -Ss -Bq -Ss -TZ -TZ -TZ -sV -uf -sV -sV -Bq -Bq -Bq -Bq -Bq -Ab -Ab -sV -sV -sV -sV -sV -TZ -TZ -TZ -TZ -sV -sV -TZ -Ab -Ab -Ab -Bq -Ab -Ab -Ab -Ab -Ab -so -so -so -so -so -so -so -so -so -so -TZ -Bq -Bq -Bq -Bq -TZ -TZ -so -so -so -so -Ab -TZ -Bq -Bq -Bq -Bq -Bq -TZ -Bq -Bq -Bq -Bq -so -Bq -Bq -Bq -Bq -Bq -so -so -so -so -lV -lV +Aa +LZ +LZ +LZ +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Xy +Xy +Xy +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +Uv +ZU +LZ +LZ +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +Uv +LZ +LZ +LZ +up +Uv +uQ +LZ +LZ +LZ +LZ +Vi +Uv +Uv +Xy +Xy +Xy +UT +UT +UT +UT +UT +UT +UT +Aa +mV +mV +Aa +UT +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (44,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -Bq -Bq -TZ -aY -TZ -TZ -TZ -Bq -Bq -sV -sV -uf -uf -uf -sV -Bq -Ss -sV -sV -sV -sV -sV -sV -sV -sV -sV -Ss -Ss -Ss -sV -Ss -Ss -Ss -Bq -Bq -Bq -Ss -Ss -Ss -Bq -TZ -aY -sV -TZ -sV -uf -sV -sV -Bq -Bq -Bq -Ab -Ab -sV -sV -uf -sV -sV -sV -sV -TZ -sV -TZ -sV -sV -sV -TZ -Ab -TZ -TZ -Bq -Bq -aY -TZ -TZ -TZ -TZ -so -so -so -so -so -TZ -TZ -Bq -Bq -Bq -Bq -TZ -TZ -TZ -TZ -aY -TZ -so -so -so -Ab -TZ -so -TZ -TZ -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -TZ -TZ -TZ -TZ -so -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +ZO +Uv +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +Uv +LZ +up +Uv +LZ +PR +LZ +LZ +PR +IY +Uv +Uv +Uv +Uv +Xy +Aa +Aa +Aa +UT +UT +UT +UT +UT +UT +Aa +Ke +tN +Aa +Aa +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +IY +LZ +LZ +LZ +LZ +LZ +ZO +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (45,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -sV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -sV -sV -uf -uf -uf -sV -Bq -Ss -Ss -Ss -Ss -Ss -Ss -Ss -Ss -Ss -Ss -Ss -Ss -Ss -Ss -Ss -Ss -Ss -Ss -Bq -Ss -Ss -Ss -sV -Bq -sV -sV -TZ -TZ -sV -uf -sV -sV -Bq -Bq -Bq -Ab -Ab -sV -uf -uf -sV -sV -sV -sV -Ab -Ab -Ab -Ab -Ab -Ab -Ab -so -so -so -Bq -Bq -so -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -Bq -Bq -Bq -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -Ab -TZ -so -TZ -TZ -TZ -TZ -so -so -so -so -Bq -Bq -Bq -TZ -TZ -aY -TZ -TZ -so -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +ZO +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +bQ +LZ +Uv +Uv +LZ +LZ +ny +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Xy +fa +oo +Aa +Aa +Aa +UT +UT +UT +UT +Aa +tN +tN +Ke +Aa +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (46,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -lV -lV -TZ -TZ -TZ -TZ -TZ -Bq -sV -sV -sV -uf -uf -uf -sV -Bq -Bq -Bq -Bq -Ss -Bq -Bq -Bq -Bq -Ss -Ss -sV -sV -sV -sV -sV -sV -sV -sV -Bq -Ss -Ss -sV -sV -Bq -sV -uf -sV -TZ -sV -sV -sV -sV -Bq -Bq -Bq -Ab -sV -sV -uf -uf -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -TZ -so -so -so -Bq -Bq -so -TZ -TZ -so -so -so -so -so -so -TZ -TZ -Bq -Bq -so -TZ -TZ -TZ -Le -Le -Le -TZ -TZ -TZ -TZ -TZ -Ab -Ab -Ab -Ab -Ab -so -TZ -TZ -TZ -TZ -TZ -TZ -Bq -Bq -Bq -TZ -TZ -TZ -TZ -so -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +ZU +LZ +LZ +ny +LZ +Uv +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +LZ +LZ +Uv +ZO +PR +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +UT +Aa +oo +vC +oo +Aa +Aa +Aa +Aa +UT +Aa +oo +oo +oo +Aa +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +LZ +ZO +LZ +LZ +LZ +LZ +LZ +IY +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (47,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -lV -lV -TZ -aY -TZ -TZ -TZ -Bq -sV -sV -sV -uf -uf -uf -sV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Ss -Ss -uf -uf -uf -uf -uf -uf -sV -sV -sV -Bq -sV -sV -sV -sV -Bq -sV -uf -sV -TZ -sV -sV -Bq -Bq -Bq -Bq -Bq -Ab -sV -sV -uf -uf -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -TZ -so -so -so -so -Bq -so -TZ -aY -so -so -so -so -so -TZ -TZ -TZ -Bq -Bq -so -TZ -TZ -TZ -Le -Le -Le -Le -Le -TZ -so -so -TZ -TZ -aY -TZ -Ab -so -TZ -so -so -so -so -so -TZ -TZ -Bq -Bq -Bq -Bq -Bq -so -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +Uv +LZ +LZ +LZ +IY +Uv +Uv +Uv +Uv +Uv +LZ +Uv +PR +LZ +LZ +Uv +IY +LZ +LZ +PR +Uv +Uv +Uv +Uv +Uv +Uv +Uv +UT +Aa +Aa +oo +oo +iI +oo +oo +Aa +Aa +Aa +oo +oo +oo +Aa +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +LZ +LZ +LZ +LZ +LZ +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (48,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -lV -lV -TZ -TZ -TZ -TZ -TZ -Bq -TZ -sV -sV -uf -uf -sV -sV -Bq -Bq -Bq -Bq -Ss -Ss -Bq -Ss -Ss -sV -uf -uf -uf -uf -uf -uf -sV -sV -sV -Bq -sV -uf -uf -sV -Bq -sV -uf -sV -TZ -sV -sV -Bq -Bq -Bq -Bq -Ab -Ab -sV -sV -uf -uf -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -TZ -so -so -so -so -Bq -so -TZ -TZ -so -so -so -so -so -TZ -TZ -TZ -Bq -TZ -TZ -TZ -TZ -TZ -Le -Le -Le -Le -Le -TZ -so -so -so -TZ -TZ -TZ -Ab -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -TZ -TZ -TZ -TZ -so -so -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +ZO +LZ +LZ +ZU +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +UT +UT +Aa +oo +oo +oo +oo +oo +oo +Aa +Aa +Aa +iI +Aa +Aa +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +LZ +LZ +LZ +LZ +LZ +LZ +Uv +LZ +ZO +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (49,1,1) = {" -lV -lV -uf -uf -uf -Ab -lV -Ab -lV -TZ -TZ -sV -TZ -TZ -Bq -TZ -sV -sV -sV -uf -uf -sV -Ss -Ss -Bq -Ss -Ss -Ss -Bq -sV -sV -sV -uf -uf -uf -uf -uf -uf -uf -sV -sV -Bq -sV -uf -uf -sV -Bq -sV -uf -sV -TZ -sV -sV -Bq -Bq -Bq -Bq -Ab -sV -sV -sV -uf -uf -sV -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -so -so -so -so -Bq -so -TZ -TZ -so -so -so -so -so -so -so -Bq -Bq -so -TZ -TZ -TZ -Le -Le -Le -Le -TZ -TZ -TZ -TZ -so -so -TZ -TZ -TZ -Ab -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -aY -TZ -TZ -TZ -TZ -so -TZ -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +Uv +ZU +LZ +LZ +Uv +Uv +Uv +Uv +PR +LZ +PR +LZ +PR +LZ +LZ +PR +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +UT +UT +Aa +Aa +Aa +Aa +oo +oo +oo +Aa +Aa +oo +oo +Aa +UT +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (50,1,1) = {" -lV -lV -uf -uf -uf -Ab -Ab -Ab -lV -sV -sV -TZ -TZ -sV -Bq -sV -TZ -TZ -sV -uf -uf -sV -sV -Ss -Ss -Ss -Ss -Ss -Bq -sV -sV -sV -uf -uf -uf -uf -uf -uf -uf -sV -sV -Bq -sV -uf -uf -sV -Bq -sV -sV -TZ -aY -sV -sV -Bq -Bq -Ab -Ab -Ab -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -so -so -so -so -Bq -Bq -TZ -TZ -so -so -so -so -so -so -Bq -Bq -Bq -so -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -TZ -TZ -TZ -Ab -TZ -TZ -aY -so -so -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -TZ -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +LZ +ZU +LZ +LZ +LZ +Uv +Uv +Uv +LZ +PR +Uv +LZ +LZ +LZ +LZ +ZO +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +UT +UT +UT +UT +UT +Aa +oo +oo +Aa +Aa +Aa +oo +oo +Aa +UT +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (51,1,1) = {" -lV -lV -uf -uf -uf -lV -Ab -Ab -Ab -sV -sV -sV -uf -sV -Bq -TZ -TZ -TZ -sV -uf -uf -uf -uf -sV -sV -sV -sV -sV -Bq -sV -sV -sV -uf -uf -uf -uf -uf -uf -uf -sV -sV -Bq -sV -sV -sV -sV -Bq -sV -TZ -TZ -TZ -sV -sV -Bq -Bq -Ab -sV -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -so -so -so -so -Bq -so -TZ -TZ -so -so -so -so -so -so -Bq -Bq -Bq -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -TZ -Ab -TZ -TZ -TZ -so -so -so -so -so -TZ -TZ -so -so -so -so -TZ -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +LZ +LZ +LZ +LZ +IY +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +UT +UT +UT +UT +UT +Aa +tN +tN +Aa +Aa +oo +oo +Aa +Aa +UT +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (52,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -Ab -Ab -Bq -sV -uf -uf -sV -Bq -sV -sV -sV -sV -sV -uf -uf -uf -sV -sV -sV -sV -sV -Bq -sV -sV -sV -sV -sV -uf -uf -uf -uf -sV -sV -sV -Bq -sV -Bq -Bq -Bq -Bq -sV -sV -sV -TZ -Ab -Ab -Bq -Bq -Ab -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -so -so -so -so -Bq -so -TZ -TZ -so -so -so -so -so -so -Bq -Bq -Bq -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Ab -TZ -so -so -so -so -so -so -so -TZ -TZ -so -so -so -TZ -TZ -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +LZ +PR +LZ +PR +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +UT +UT +UT +UT +UT +Aa +tN +tN +tN +Aa +oo +UT +UT +UT +UT +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (53,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -sV -sV -sV -sV -uf -uf -uf -sV -sV -sV -Bq -sV -sV -sV -sV -sV -uf -uf -uf -uf -sV -sV -sV -Bq -sV -Bq -Bq -Bq -Bq -sV -TZ -TZ -TZ -Ab -Ab -Bq -Bq -sV -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -so -so -so -so -Bq -Bq -TZ -so -so -so -so -Bq -Bq -Bq -Bq -Bq -Bq -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Ab -Ab -Ab -TZ -so -so -so -so -so -TZ -TZ -so -so -so -TZ -TZ -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +Uv +Uv +Uv +IY +LZ +LZ +LZ +LZ +Uv +Uv +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +UT +UT +UT +UT +UT +Aa +tN +Ke +tN +tN +tN +UT +UT +Uv +UT +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (54,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -Ab -Ab -sV -sV -sV -sV -Bq -Bq -Bq -Bq -Bq -sV -sV -sV -sV -sV -sV -uf -uf -sV -sV -Bq -sV -sV -sV -sV -sV -sV -sV -sV -sV -Bq -sV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -TZ -TZ -TZ -Ab -Ab -Bq -Bq -sV -sV -sV -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -so -so -so -so -Bq -Bq -TZ -so -Bq -Bq -Bq -Bq -Bq -Bq -Bq -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Ab -so -so -so -so -so -so -TZ -TZ -so -so -so -TZ -TZ -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +Uv +Uv +Uv +LZ +LZ +LZ +Uv +IY +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +UT +UT +UT +UT +UT +Aa +tN +tN +Ma +Ke +tN +tN +tN +Uv +Uv +Aa +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +LZ +Uv +LZ +LZ +LZ +LZ +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (55,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -lV -Ab -sV -sV -sV -sV -sV -sV -sV -sV -Bq -Bq -Bq -Bq -sV -sV -sV -sV -sV -sV -sV -Bq -sV -sV -sV -sV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Ab -sV -Bq -Bq -sV -sV -sV -sV -sV -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -so -so -so -so -so -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -TZ -TZ -TZ -Ab -TZ -TZ -so -so -so -so -so -TZ -so -so -so -TZ -aY -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +ZO +LZ +PR +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +UT +UT +UT +UT +UT +Aa +tN +tN +tN +oo +oo +oo +Uv +Uv +Uv +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (56,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -lV -lV -sV -sV -uf -uf -uf -uf -sV -sV -sV -Bq -Bq -Bq -Bq -Bq -Bq -sV -sV -sV -sV -Bq -sV -sV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -sV -sV -sV -sV -sV -sV -uf -uf -uf -uf -uf -uf -sV -sV -sV -uf -uf -uf -so -so -so -so -so -Bq -TZ -so -Bq -Bq -Bq -Bq -Bq -Bq -Bq -so -so -TZ -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -TZ -TZ -TZ -Ab -TZ -TZ -TZ -TZ -so -so -so -TZ -so -TZ -TZ -TZ -TZ -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +PR +PR +LZ +LZ +LZ +IY +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +UT +UT +UT +UT +UT +Aa +tN +tN +oo +oo +Aa +Uv +Uv +Uv +Uv +Aa +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +Uv +Uv +IY +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (57,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -lV -lV -Bq -sV -uf -uf -uf -uf -uf -Bq -Bq -sV -sV -Bq -Bq -Bq -Bq -Bq -Bq -sV -sV -Bq -sV -sV -sV -sV -sV -sV -sV -Bq -Bq -Bq -Bq -Bq -Bq -TZ -TZ -TZ -Bq -Bq -sV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -lV -lV -lV -lV -lV -lV -lV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -so -so -so -so -Bq -Bq -TZ -TZ -so -so -so -so -Bq -so -so -so -so -TZ -aY -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -TZ -TZ -TZ -Ab -TZ -TZ -TZ -TZ -so -so -so -TZ -so -TZ -TZ -TZ -TZ -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +ZU +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +UT +UT +Aa +Ma +tN +oo +oo +Aa +Uv +nz +nz +nz +Aa +Uv +Uv +Uv +Uv +Uv +ZO +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (58,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -lV -Bq -Bq -sV -uf -uf -uf -sV -uf -sV -Bq -Bq -Bq -sV -sV -Bq -Bq -Bq -sV -Bq -sV -Bq -sV -sV -sV -sV -sV -sV -Bq -Bq -Bq -sV -sV -sV -sV -sV -TZ -TZ -TZ -sV -sV -sV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -lV -lV -lV -lV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -so -so -so -so -Bq -so -TZ -TZ -so -so -so -so -Bq -Bq -TZ -aY -TZ -TZ -TZ -TZ -TZ -so -so -so -so -so -so -so -so -so -so -so -so -TZ -TZ -TZ -Ab -aY -TZ -TZ -TZ -so -so -so -TZ -so -TZ -TZ -TZ -TZ -so -so -lV -lV +Aa +LZ +cy +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +IY +LZ +LZ +ZU +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +UT +UT +Aa +UT +KN +oo +oo +Aa +nz +nz +nz +nz +Aa +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (59,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -lV -Bq -Bq -sV -sV -sV -sV -sV -sV -sV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -lV -lV -lV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -so -so -so -Bq -Bq -so -Ab -Ab -Ab -Ab -Ab -Ab -Bq -Bq -Ab -Ab -Ab -Ab -Ab -TZ -TZ -so -so -so -so -so -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -ke -ke -ke -ke -TZ -TZ -TZ -TZ -so -TZ -TZ -TZ -TZ -so -so -lV -lV +Aa +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +Uv +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +UT +UT +Aa +oo +oo +Aa +Aa +Aa +nz +nz +nz +nz +Aa +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (60,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -TZ -TZ -TZ -TZ -TZ -TZ -TZ -tM -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -Bq -Bq -so -Ab -TZ -TZ -UA -Ab -Ab -Ab -Ab -Ab -so -so -TZ -UA -TZ -TZ -so -so -so -so -TZ -Ab -so -so -so -so -so -TZ -TZ -ke -yb -uq -ke -IO -IO -ke -TZ -aY -TZ -TZ -so -TZ -TZ -TZ -TZ -so -so -lV -lV +Aa +Uv +LZ +LZ +LZ +Uv +LZ +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +IY +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +UT +UT +Aa +oo +oo +Aa +UT +Aa +Aa +Aa +nz +nz +Aa +Uv +Uv +Uv +IY +LZ +ny +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa "} (61,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -Bq -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -TZ -TZ -TZ -TZ -aY -TZ -tM -tM -tM -tM -tM -TZ -TZ -TZ -so -so -so -Bq -Bq -TZ -Ab -TZ -TZ -TZ -Ab -Ab -Ab -TZ -so -so -so -so -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -so -so -so -so -so -TZ -TZ -ke -eo -eo -df -eo -eo -ke -TZ -TZ -Le -Le -so -TZ -TZ -TZ -TZ -so -so -lV -lV +Aa +Uv +Uv +Uv +cy +LZ +LZ +LZ +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +ZO +Uv +Uv +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +UT +UT +Aa +oo +Aa +Aa +UT +UT +UT +Aa +Aa +Aa +Aa +Uv +Uv +LZ +LZ +LZ +LZ +ZO +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Aa +Aa +Aa +Aa +Uv +Uv +Uv +Uv +Aa +Aa "} (62,1,1) = {" -lV -lV -uf -uf -uf -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -TZ -TZ -uf -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -sV -sV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -TZ -TZ -TZ -TZ -TZ -TZ -TZ -tM -tM -tM -TZ -TZ -aY -so -TZ -TZ -TZ -Bq -TZ -TZ -TZ -so -so -so -Ab -Ab -Ab -so -so -so -so -Ab -TZ -TZ -TZ -TZ -TZ -so -so -so -so -so -so -so -so -so -TZ -ke -lh -eo -eo -eo -eo -ke -TZ -Le -Le -Le -Ab -TZ -so -TZ -TZ -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +cy +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +LZ +Uv +LZ +LZ +LZ +LZ +Uv +uQ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +UT +Aa +Aa +Aa +UT +UT +UT +UT +UT +UT +UT +Aa +Uv +Uv +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (63,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -uf -uf -uf -uf -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -lV -lV -lV -lV -lV -lV -lV -lV -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -tM -tM -TZ -TZ -TZ -TZ -TZ -TZ -Bq -Bq -TZ -TZ -TZ -TZ -TZ -TZ -Ab -Ab -Ab -so -so -so -so -Ab -TZ -TZ -TZ -TZ -TZ -so -so -so -so -so -so -so -so -so -TZ -ke -rE -eo -eo -eo -eo -ke -TZ -Le -Le -Le -TZ -Ab -so -so -lV -lV -lV -lV -lV +Aa +LZ +LZ +LZ +LZ +LZ +LZ +cy +LZ +LZ +LZ +LZ +LZ +LZ +cy +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +LZ +LZ +LZ +Uv +LZ +IY +Uv +uQ +uQ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +IY +LZ +LZ +LZ +ZO +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (64,1,1) = {" -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -lV -uf -uf -uf -lV -lV -lV -lV -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -UA -Ab -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -Bq -TZ -Ab -TZ -TZ -TZ -TZ -TZ -Ab -Ab -so -so -so -so -so -Ab -Ab -TZ -UA -so -so -so -so -so -so -so -so -so -so -so -ke -oa -eo -eo -eo -tF -ke -TZ -Le -Le -Le -Le -Ab -so -so -lV -lV -lV -lV -lV +Aa +LZ +LZ +LZ +LZ +LZ +LZ +LZ +cy +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +LZ +LZ +LZ +LZ +LZ +Uv +LZ +uQ +uQ +uQ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Uv +Uv +Uv +Uv +Uv +Jh +Jh +Jh +Uv +Uv +Uv +Uv +Aa "} (65,1,1) = {" -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -sV -sV -uf -uf -uf -Bq -Bq -Bq -Bq -Bq -TZ -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -lV -lV -lV -lV -lV -lV -TZ -TZ -TZ -TZ -TZ -TZ -Ab -TZ -TZ -so -so -so -so -so -so -Bq -Bq -so -so -so -so -so -so -so -Ab -Ab -so -so -so -so -so -Ab -Ab -Ab -Ab -Ab -so -so -so -so -so -so -so -so -so -TZ -ke -Fy -eo -eo -eo -tF -ke -TZ -Le -Le -Le -TZ -Ab -Ab -so -lV -lV -lV -lV -lV +Aa +LZ +LZ +LZ +LZ +ZO +LZ +LZ +LZ +LZ +yu +LZ +cy +LZ +LZ +LZ +LZ +LZ +LZ +LZ +cy +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +LZ +Uv +LZ +Uv +LZ +LZ +ZU +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +ZO +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Aa +Aa +Uv +Jh +Jh +Jh +Jh +Jh +Xy +Xy +Jh +Aa +Aa +Aa +Aa "} (66,1,1) = {" -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -uf -uf -Bq -Bq -Bq -Bq -TZ -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -TZ -TZ -TZ -TZ -TZ -Ab -TZ -TZ -so -so -so -so -so -Bq -Bq -so -so -so -so -so -so -so -so -Ab -Ab -so -so -so -so -so -Ab -Ab -Ab -Ab -Ab -Ab -Ab -so -so -so -so -so -so -so -TZ -ke -ke -fG -fG -eo -re -ke -TZ -Le -TZ -TZ -Ab -Ab -Ab -Ab -lV -lV -lV -lV -lV +Aa +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +cy +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +IY +Uv +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Aa +Aa +Aa +Aa +Jc +Jc +Jc +Jc +Xy +Xy +Xy +Aa +Aa +Aa +Aa "} (67,1,1) = {" -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -uf -uf -uf -uf -uf -uf -uf -sV -sV -Bq -Bq -Bq -Bq -Ss -sV -sV -sV -sV -uf -uf -Bq -Bq -Bq -TZ -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -lV -lV -lV -lV -lV -lV -NQ -NQ -NQ -NQ -NQ -NQ -NQ -NQ -NQ -lV -TZ -TZ -TZ -TZ -TZ -Ab -Ab -Ab -Ab -Ab -Ab -so -so -so -Bq -so -so -so -so -so -so -so -so -so -Ab -Ab -UA -so -so -so -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -so -so -Ab -so -so -so -Ab -Ab -ke -ke -ke -uq -yb -ke -TZ -TZ -PC -ax -ZS -ZS -Ab -ZS -aa -lV -lV -lV -lV +Aa +LZ +ZO +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +ZO +LZ +cy +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +LZ +LZ +Uv +IY +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +uQ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Aa +Aa +Aa +IJ +Jc +Jc +Jc +Jc +Xy +Xy +Xy +RW +Aa +Aa +Aa "} (68,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -Bq -uf -uf -uf -uf -uf -uf -uf -uf -Bq -Bq -Ss -Ss -Ss -Bq -Bq -Ss -sV -sV -sV -sV -uf -Bq -Bq -Bq -Bq -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -lV -NQ -NQ -NQ -NQ -NQ -NQ -EA -MM -QF -RG -dY -MM -sQ -NQ -lV -lV -TZ -TZ -TZ -TZ -Ab -Ab -Ab -Ab -Ab -Ab -so -so -so -Bq -so -so -so -so -so -so -so -so -Ab -Ab -Ab -Ab -so -so -so -Ab -Ab -so -so -so -so -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -TZ -TZ -PC -ZS -ZS -ZS -ZS -aa -lV -lV -lV -lV +Aa +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +ZO +LZ +ny +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +cy +LZ +LZ +LZ +Uv +Uv +LZ +IY +Uv +LZ +LZ +Uv +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +ZO +LZ +LZ +LZ +LZ +LZ +uQ +uQ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Aa +Aa +Aa +IJ +Jc +Jc +Jc +Jc +Xy +Xy +Xy +RW +Aa +Aa +Aa "} (69,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -uf -uf -Bq -Bq -Bq -Bq -Ss -Ss -TZ -TZ -Ss -Bq -Bq -Bq -uf -sV -sV -uf -Bq -Bq -Bq -Bq -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -lV -NQ -ac -ac -wz -ac -pO -hK -hK -ac -tz -ac -hK -wz -NQ -lV -TZ -TZ -TZ -TZ -TZ -Ab -TZ -TZ -TZ -so -so -so -so -Bq -Bq -Bq -so -so -so -so -so -so -Ab -Ab -so -so -Ab -so -so -UA -Ab -Ab -so -so -so -so -so -so -so -Ab -Ab -so -so -Ab -Ab -UA -Ab -Ab -Ab -Ab -Ab -Ab -Ab -TZ -Ab -dU -ZS -ZS -ZS -ZS -aa -lV -lV -lV -lV +Aa +GP +GP +GP +GP +GP +GP +GP +GP +GP +LZ +LZ +LZ +LZ +LZ +yu +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +PR +LZ +LZ +LZ +up +LZ +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +ZO +LZ +LZ +LZ +ny +LZ +LZ +LZ +uQ +uQ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Aa +Aa +Aa +Px +Jc +Jc +Jc +Jc +Xy +Xy +Xy +RW +Aa +Aa +Aa "} (70,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -uf -uf -Bq -Bq -Bq -Ss -Ss -TZ -TZ -TZ -TZ -TZ -Bq -Bq -Bq -sV -sV -sV -sV -Bq -Bq -Bq -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -lV -NQ -cW -oU -ac -ac -pO -Rp -Xe -HK -HK -zU -ac -Ra -NQ -lV -TZ -TZ -TZ -TZ -aY -Ab -TZ -TZ -TZ -so -so -so -so -so -Bq -Bq -so -so -so -so -so -Ab -Ab -Ab -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Ab -so -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -ZS -ZS -ZS -ZS -ZS -aa -lV -lV -lV -lV +Aa +GP +DM +Sw +XQ +Gv +Pd +Sw +DM +GP +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +ZO +LZ +Uv +PR +LZ +LZ +up +ny +LZ +LZ +LZ +LZ +Uv +Uv +LZ +ZO +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +LZ +LZ +LZ +uQ +uQ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Aa +Aa +Aa +IJ +Jc +Jc +Jc +Jc +KV +Jc +Xy +RW +Aa +Aa +Aa "} (71,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -Bq -Bq -Bq -Ss -Ss -Ss -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -Bq -uf -uf -uf -uf -Bq -Bq -Bq -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -lV -NQ -HK -HK -hK -hK -pO -pO -pO -ac -pO -pO -pO -pO -NQ -lV -TZ -TZ -TZ -TZ -TZ -Ab -TZ -TZ -TZ -so -so -so -so -so -Bq -so -so -so -so -so -so -Ab -Ab -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Ab -Ab -so -Ab -so -Ab -Ab -UA -Ab -Ab -Ab -ZS -ZS -ZS -Ab -Ab -lV -lV -lV -lV -lV +Aa +GP +Sw +TK +YX +YX +YX +Sw +Sw +GP +LZ +LZ +LZ +yu +LZ +LZ +LZ +LZ +cy +LZ +LZ +LZ +LZ +LZ +LZ +LZ +PR +PR +LZ +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +ZO +LZ +LZ +LZ +Uv +LZ +Uv +LZ +LZ +LZ +LZ +LZ +LZ +Uv +ZO +Uv +LZ +LZ +LZ +LZ +LZ +ZO +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Aa +Aa +Aa +Aa +Aa +Jh +Jh +Jh +Jc +Xy +Xy +Aa +Aa +Aa +Aa "} (72,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -Ss -Ss -Ss -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -Bq -uf -sV -sV -sV -Bq -Bq -Bq -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -lV -NQ -pO -pO -hK -pO -pO -ac -HK -HK -pO -ac -hK -ac -NQ -lV -TZ -TZ -TZ -TZ -TZ -Ab -TZ -TZ -TZ -TZ -TZ -so -so -so -Bq -so -so -so -so -so -so -Ab -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Ab -Ab -ZS -ZS -ZS -ZS -Ab -Ab -lV -lV -lV -lV -lV +Aa +GP +YX +YX +YX +YX +YX +YX +TK +GP +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +cy +LZ +LZ +LZ +LZ +LZ +LZ +bQ +PR +LZ +Uv +IY +Uv +Uv +IY +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +LZ +Uv +LZ +LZ +Uv +LZ +ZO +Uv +Uv +LZ +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Aa +Uv +Jh +Jh +Uv +Uv +Jh +Jc +Xy +Xy +Aa +Aa +Aa +Aa "} (73,1,1) = {" -lV -lV -lV -lV -lV -NQ -NQ -NQ -NQ -Ss -Ss -Ss -Ss -Ss -Ss -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -Bq -Bq -uf -sV -uf -Bq -Bq -Bq -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -lV -NQ -ac -RG -hK -ac -SZ -HK -RG -hK -hK -wA -ac -wU -NQ -lV -lV -TZ -TZ -TZ -TZ -Ab -TZ -aY -TZ -so -TZ -so -so -so -Bq -Bq -so -so -so -so -Ab -Ab -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Ab -Ab -ZS -ZS -ZS -ZS -so -Ab -lV -lV -lV -lV -lV +Aa +GP +YX +YX +YX +YX +YX +YX +YX +GP +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +PR +LZ +LZ +LZ +LZ +LZ +Uv +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +Uv +LZ +Uv +LZ +LZ +LZ +LZ +ZO +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Aa +Aa +Uv +Uv +Uv +Jh +Jh +Jh +Jh +Uv +Uv +Uv +Aa "} (74,1,1) = {" -lV -lV -lV -JV -BJ -BJ -ht -Qo -Qo -Ss -Ss -TZ -Ss -Ss -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -Bq -Bq -uf -sV -sV -Bq -Bq -Bq -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -lV -NQ -ac -ac -hK -ac -uC -HK -hK -hh -hK -hK -hK -ac -NQ -NQ -lV -TZ -TZ -TZ -TZ -Ab -TZ -TZ -TZ -so -so -so -so -so -so -Bq -so -so -UA -Ab -Ab -Ab -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -TZ -TZ -aY -TZ -TZ -so -so -so -so -so -Ab -Ab -ZS -ZS -ZS -Ab -so -so -lV -lV -lV -lV -lV +Aa +GP +YX +YX +YX +YX +YX +YX +YX +GP +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +cy +cy +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Aa +Uv +Uv +Uv +Uv +Uv +Jh +Jh +Uv +Uv +Uv +Aa "} (75,1,1) = {" -lV -lV -lV -BJ -BJ -lV -Qo -Qo -Qo -Ss -Ss -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Le -TZ -TZ -TZ -TZ -TZ -Bq -Bq -Bq -uf -uf -uf -Bq -Bq -Bq -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -lV -NQ -pO -pO -hK -pO -pO -pO -pO -pO -pO -HK -HK -ac -ac -NQ -lV -UA -Ab -Ab -Ab -Ab -TZ -TZ -so -so -so -so -so -so -so -Bq -so -Ab -Ab -Ab -Ab -Ab -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -so -so -Ab -Ab -ZS -ZS -ZS -so -so -so -so -so -so -lV -lV +Aa +GP +YX +YX +bu +GP +YX +YX +Sw +PR +LZ +LZ +LZ +LZ +LZ +LZ +ny +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +Uv +LZ +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +Uv +LZ +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Uv +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (76,1,1) = {" -lV -lV -lV -BJ -BJ -lV -Qo -Qo -Qo -Ss -Ss -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -Bq -Bq -uf -sV -sV -Bq -Bq -Bq -sV -sV -TZ -Ho -Ho -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -lV -NQ -ac -hK -hK -ac -pO -sA -iP -cT -pO -HK -pO -ac -wU -NQ -Ab -Ab -Ab -TZ -so -so -TZ -TZ -so -so -TZ -so -so -so -Bq -Bq -Ab -Ab -Ab -Bq -Ab -Ab -Ab -Ab -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -TZ -TZ -TZ -Bq -TZ -TZ -TZ -aY -TZ -ks -TZ -TZ -TZ -TZ -ZS -Ab -so -so -so -so -so -so -lV -lV +Aa +GP +YX +YX +bu +GP +YX +YX +Sw +PR +LZ +LZ +LZ +LZ +LZ +ZO +yu +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +ny +LZ +LZ +ZO +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Uv +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (77,1,1) = {" -lV -lV -lV -JV -BJ -BJ -ht -Qo -Qo -Ss -Ss -Ss -Ss -Ss -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -Bq -uf -uf -sV -Bq -Bq -Bq -Bq -sV -sV -sV -sV -Ho -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -lV -NQ -cW -vU -hK -hK -pO -HK -ac -hK -HK -HK -pO -HK -ac -CU -Ab -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -TZ -so -so -so -Bq -so -Ab -Ab -Bq -Bq -Bq -Bq -Ab -Ab -Ab -so -so -so -so -so -so -so -so -so -so -so -so -so -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -ch -eR -TZ -TZ -ZS -ZS -TZ -so -so -so -so -so -so -lV -lV +Aa +GP +YX +YX +YX +YX +YX +YX +Sw +GP +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +Uv +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (78,1,1) = {" -lV -lV -lV -lV -lV -NQ -NQ -NQ -NQ -Ss -Ss -Ss -Ss -Ss -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -Bq -uf -uf -sV -Bq -Bq -Bq -Bq -sV -sV -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -lV -NQ -ac -ac -wz -ac -pO -yx -wz -vx -ac -HK -pO -pO -NQ -NQ -Ab -TZ -TZ -TZ -TZ -TZ -so -so -so -so -so -so -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -Bq -Bq -Bq -Bq -Bq -Bq -Bq -ks -ZS -ZS -ZS -so -so -so -so -so -so -so -lV -lV +Aa +GP +YX +YX +YX +YX +YX +YX +Sw +GP +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +cy +LZ +LZ +LZ +LZ +cy +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +cy +cy +cy +cy +cy +cy +cy +cy +LZ +LZ +LZ +Uv +LZ +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +ZO +Uv +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (79,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -Ss -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -Bq -uf -uf -sV -sV -Bq -Bq -Bq -Bq -TZ -sV -TZ -TZ -TZ -sV -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -lV -NQ -NQ -NQ -NQ -NQ -QB -hO -th -Ut -gL -NQ -NQ -lV -lV -lV -Ab -TZ -TZ -TZ -TZ -so -so -so -so -so -so -so -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -aY -TZ -TZ -TZ -TZ -Bq -Bq -Bq -Bq -ks -ZS -TZ -ZS -so -so -so -so -so -so -so -lV -lV +Aa +GP +YX +YX +YX +Sw +YX +YX +TK +GP +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +cy +LZ +LZ +LZ +LZ +cy +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +cy +cy +cy +cy +cy +cy +cy +cy +cy +cy +LZ +LZ +Uv +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +Uv +LZ +LZ +LZ +Uv +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa "} (80,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -sV -Bq -sV -Bq -Bq -Ss -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -Bq -Bq -sV -uf -uf -uf -Bq -Bq -Bq -Bq -TZ -TZ -TZ -Ho -Ho -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -lV -lV -lV -lV -lV -NQ -NQ -NQ -NQ -NQ -NQ -NQ -lV -lV -Ab -Ab -Ab -TZ -TZ -TZ -TZ -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Ab -Ab -Ab -Ab -Ab -aY -TZ -TZ -Bq -Bq -Bq -Ag -ZS -ZS -zO -Bq -Bq -Bq -Bq -Bq -Bq -Bq -lV -lV +Aa +GP +YX +TK +YX +YX +YX +Sw +Sw +GP +LZ +LZ +LZ +LZ +LZ +yu +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +cy +cy +cy +cy +cy +cy +cy +cy +cy +cy +cy +cy +Uv +LZ +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +Uv +LZ +LZ +LZ +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (81,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -sV -sV -sV -sV -sV -Bq -Ss -TZ -TZ -TZ -TZ -TZ -Bq -Bq -Bq -Bq -uf -uf -uf -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -TZ -TZ -TZ -Bq -Bq -Bq -Bq -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -lV -lV -lV -lV -lV -lV -lV -lV -lV -Ab -Ab -Ab -Ab -TZ -TZ -TZ -TZ -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Ab -Ab -so -so -so -so -so -so -so -so -TZ -TZ -UA -Ab -so -so -TZ -TZ -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Ag -ZS -ZS -Wo -Bq -Bq -Bq -Bq -Bq -Bq -Bq -lV -lV +Aa +GP +DM +YX +XQ +Gv +YX +Sw +DM +GP +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +cy +cy +cy +cy +cy +cy +cy +cy +cy +cy +cy +cy +LZ +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (82,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -uf -sV -sV -sV -sV -Bq -Bq -Ss -TZ -TZ -Ss -Ss -Bq -sV -sV -sV -uf -uf -uf -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -TZ -TZ -TZ -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -TZ -TZ -Ab -TZ -TZ -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Ab -Ab -so -so -so -so -so -so -so -TZ -TZ -TZ -so -Ab -TZ -so -so -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Ab -TZ -TZ -TZ -TZ -sP -AE -ZS -ZS -ZS -Wo -Bq -Bq -Bq -Bq -Bq -Bq -so -lV -lV +Aa +GP +GP +GP +GP +GP +GP +GP +GP +GP +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +cy +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +cy +cy +cy +cy +cy +cy +cy +cy +cy +cy +cy +LZ +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (83,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -sV -sV -sV -Bq -Bq -Ss -Ss -Bq -Bq -Bq -sV -sV -uf -uf -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -TZ -TZ -TZ -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -Ab -TZ -Bq -TZ -Ab -TZ -TZ -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Ab -Ab -Ab -Ab -Ab -Ab -Ab -so -so -so -so -TZ -TZ -so -TZ -TZ -TZ -so -so -Ab -TZ -TZ -so -aY -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Ab -TZ -TZ -TZ -so -sV -aY -TZ -ZS -ZS -TZ -LL -Bq -so -so -so -so -so -lV -lV +Aa +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +ZO +yu +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +ZO +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +cy +cy +cy +cy +cy +cy +cy +cy +cy +LZ +LZ +LZ +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +LZ +Uv +LZ +LZ +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (84,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -sV -sV -sV -sV -Bq -Bq -Bq -sV -sV -sV -sV -uf -uf -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -TZ -Ab -Ab -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -Bq -Bq -TZ -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -TZ -aY -Ab -Ab -Ab -UA -UA -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -sV -aY -Ab -TZ -TZ -so -so -so -TZ -TZ -ZS -ZS -so -so -so -so -so -so -so -so -lV -lV +Aa +LZ +ZO +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +cy +cy +cy +cy +cy +cy +cy +cy +cy +cy +LZ +LZ +LZ +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (85,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -uf -uf -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -sV -sV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Ab -Ab -Ab -ZS -ZS -so -so -so -so -so -so -so -so -lV -lV +Aa +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +ny +LZ +LZ +LZ +LZ +LZ +yu +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +cy +cy +cy +cy +cy +cy +cy +cy +cy +cy +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (86,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -sV -uf -uf -uf -uf -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -sV -sV -sV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -Bq -Bq -TZ -Ab -Bq -Bq -Bq -Bq -Bq -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Ab -Ab -ZS -ZS -ZS -ZS -so -so -so -so -so -so -so -so -lV -lV +Aa +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +yu +LZ +LZ +LZ +LZ +cy +LZ +LZ +LZ +LZ +LZ +LZ +LZ +cy +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +cy +cy +cy +cy +cy +cy +cy +cy +cy +cy +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (87,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -sV -uf -uf -sV -sV -sV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -TZ -TZ -sV -sV -sV -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Ab -TZ -TZ -TZ -Bq -Bq -TZ -TZ -TZ -so -so -so -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -UA -ZS -ZS -ZS -ZS -ZS -so -so -so -so -so -so -so -so -lV -lV +Aa +LZ +LZ +LZ +LZ +LZ +ZO +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +cy +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +cy +cy +cy +cy +cy +cy +cy +cy +cy +cy +cy +LZ +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +Uv +cy +cy +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (88,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -uf -uf -uf -uf -uf -uf -uf -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -uf -uf -uf -sV -sV -sV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -sV -sV -sV -sV -uf -uf -sV -sV -sV -sV -TZ -Ab -TZ -TZ -TZ -Bq -Bq -TZ -TZ -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Ab -ZS -ZS -ZS -Ab -so -so -so -so -so -so -so -so -so -so -lV -lV +Aa +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +cy +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +cy +cy +cy +cy +cy +cy +cy +cy +cy +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +cy +cy +cy +cy +cy +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (89,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -uf -uf -uf -uf -uf -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -sV -uf -uf -uf -uf -uf -sV -sV -sV -Bq -Bq -Bq -Bq -Bq -Bq -Ss -Ss -Bq -sV -sV -sV -sV -uf -uf -uf -sV -sV -sV -sV -sV -Ab -Ab -UA -Ab -Ab -Bq -Ab -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Ab -ZS -ZS -ZS -Ab -Ab -so -so -so -so -so -lV -lV -lV -so -so -lV -lV +Aa +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +Uv +LZ +ZO +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +cy +cy +cy +cy +cy +cy +cy +cy +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +cy +cy +cy +cy +cy +cy +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (90,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -Bq -Bq -Bq -Bq -Ss -Ss -Bq -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -TZ -TZ -TZ -TZ -TZ -Bq -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Ab -Ab -ZS -ZS -Ab -so -so -so -so -so -so -so -lV -DG -lV -lV -so -lV -lV +Aa +Uv +Uv +Uv +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +cy +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +IY +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +cy +cy +cy +cy +cy +cy +cy +cy +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +cy +cy +cy +cy +cy +cy +cy +cy +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (91,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -sV -uf -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -sV -Bq -Ss -Ss -Ss -Bq -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -TZ -TZ -TZ -TZ -TZ -Bq -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Ab -ZS -ZS -ZS -UA -so -so -so -so -so -so -so -lV -dk -BW -lV -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +cy +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +cy +cy +cy +cy +cy +cy +LZ +cy +cy +cy +Uv +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +Uv +cy +cy +cy +cy +cy +cy +cy +cy +cy +Uv +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (92,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -Ss -Ss -Ss -Ss -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -TZ -TZ -TZ -TZ -TZ -Bq -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Ab -UA -ZS -ZS -ZS -ZS -Ab -Ab -so -so -so -so -so -so -so -lV -dk -dk -lV -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +cy +Uv +Uv +Uv +LZ +LZ +LZ +LZ +ZO +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +cy +cy +cy +cy +Uv +Uv +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +cy +cy +cy +cy +cy +cy +Uv +Uv +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (93,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -sV -sV -uf -uf -uf -uf -uf -uf -uf -sV -sV -sV -Ss -Ss -Ss -Bq -Bq -Bq -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -sV -TZ -TZ -TZ -TZ -Bq -Bq -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -sF -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Ab -Ab -ZS -ZS -ZS -Ab -lV -lV -lV -so -so -so -so -so -so -lV -vH -sF -lV -lV -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +ZO +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +cy +cy +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +cy +cy +cy +cy +cy +cy +Uv +Uv +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (94,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -sV -sV -uf -uf -sV -sV -uf -uf -sV -sV -sV -Ss -Ss -Bq -Bq -Bq -Bq -Bq -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -sV -TZ -TZ -TZ -TZ -Bq -Bq -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -sF -so -so -so -so -so -so -so -so -so -so -so -so -so -so -ZS -ZS -ZS -ZS -ZS -UA -Ab -jM -Ft -lV -lV -lV -so -so -so -so -lV -sF -sF -vH -lV -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +cy +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +cy +cy +cy +cy +cy +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +LZ +LZ +LZ +LZ +cy +cy +cy +cy +cy +cy +cy +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (95,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -sV -sV -sV -sV -sV -sV -uf -uf -sV -Ss -Ss -Ss -sV -Bq -Bq -Bq -Bq -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -sV -TZ -TZ -TZ -TZ -TZ -Bq -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -sF -sF -so -so -so -so -so -so -so -so -so -so -so -so -Ab -Ab -ZS -ZS -ZS -ZS -Ab -Ab -so -lV -Ft -YM -Ft -lV -lV -lV -lV -so -lV -Ft -Ft -Ft -lV -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +ny +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +Uv +cy +cy +cy +cy +cy +cy +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +cy +cy +cy +cy +cy +cy +cy +cy +Uv +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (96,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -sV -sV -sV -sV -sV -TZ -TZ -TZ -sV -sV -Ss -sV -Ss -Ss -sV -Bq -Bq -Bq -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -sV -TZ -TZ -Bq -Bq -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -sF -so -so -so -so -so -so -UA -Ab -UA -so -so -Ab -so -ZS -Ab -ZS -ZS -ZS -Ab -Ab -so -so -lV -lV -Ft -Ft -SQ -Ft -Ft -lV -lV -lV -Ft -Ft -Ft -lV -lV -lV +Aa +LZ +cy +Uv +Uv +LZ +cy +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +PR +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +Uv +Uv +LZ +LZ +LZ +Uv +Uv +cy +cy +cy +cy +cy +cy +cy +cy +cy +cy +cy +cy +cy +cy +cy +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (97,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -sV -TZ -TZ -sV -TZ -Uc -sV -TZ -sV -sV -Ss -sV -sV -uf -sV -sV -sV -Bq -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -sV -sV -TZ -TZ -Bq -Bq -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -sF -sF -so -so -so -UA -Ab -Ab -Ab -Ab -uh -Ab -Ab -Ab -ZS -ZS -ZS -ZS -Ab -Ab -so -so -so -so -lV -Ft -Ft -Ft -Ft -Ft -Ft -lV -lV -lV -SQ -lV -lV -lV -lV +Aa +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +PR +PR +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +Uv +Uv +Uv +Uv +LZ +LZ +LZ +Uv +Uv +Uv +cy +cy +cy +cy +cy +cy +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (98,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -TZ -TZ -sV -TZ -TZ -TZ -TZ -TZ -sV -sV -Ss -sV -uf -uf -uf -sV -sV -Bq -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -TZ -TZ -TZ -TZ -Bq -aY -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -sF -sF -sF -sF -so -sF -Ab -ke -ke -UA -Ab -Ab -Ab -ZS -ZS -ZS -ZS -ZS -Ab -ZS -Ab -Ab -Ab -Ab -so -so -so -so -so -lV -lV -lV -lV -Ft -Ft -Ft -lV -lV -Ft -Ft -lV -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (99,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -TZ -TZ -TZ -TZ -TZ -Yg -TZ -TZ -TZ -sV -Ss -sV -uf -uf -uf -uf -sV -Bq -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -TZ -TZ -TZ -TZ -Bq -TZ -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -sF -sF -sF -sF -Ab -Ab -ke -Ab -Ab -Ab -Ab -ZS -ZS -uh -ZS -ZS -Ab -Ab -Ab -Ab -UA -so -so -so -so -so -so -so -so -so -lV -Ft -Ft -lV -lV -lV -Ft -Ft -lV -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +IY +LZ +LZ +LZ +LZ +IY +PR +PR +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (100,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -sV -Bq -sV -TZ -TZ -TZ -TZ -TZ -Uc -TZ -TZ -TZ -TZ -Ss -sV -sV -uf -uf -uf -uf -Bq -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -TZ -TZ -TZ -TZ -Bq -TZ -TZ -so -so -so -so -so -so -so -so -so -so -gp -gp -gp -gp -so -so -so -so -sF -Ab -Ab -Ab -ke -Ab -ZS -ZS -ZS -ZS -Ab -so -Ab -Ab -Ab -Ab -Ab -so -so -so -so -so -so -so -so -so -so -so -lV -sF -sF -lV -lV -Ft -Ft -lV -lV -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +ZO +LZ +LZ +LZ +LZ +LZ +LZ +PR +LZ +ZO +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (101,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -sV -sV -sV -TZ -TZ -TZ -TZ -TZ -OO -TZ -TZ -sV -TZ -Ss -sV -sV -sV -sV -sV -Bq -Bq -uf -uf -sV -uf -uf -uf -uf -uf -sV -sV -sV -sV -TZ -TZ -aY -TZ -Bq -TZ -TZ -so -so -so -so -so -so -so -so -so -so -gp -Gx -PO -QE -eo -gp -so -so -ke -Ab -Ab -Ox -kk -Ab -ZS -ZS -Ab -Ab -so -so -so -Ab -UA -so -so -so -so -so -so -so -so -so -so -so -so -so -lV -sF -sF -sF -lV -Ft -so -so -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +PR +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +PR +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (102,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -sV -sV -sV -sV -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -sV -Ss -sV -sV -sV -sV -sV -Bq -sV -sV -sV -sV -sV -uf -uf -uf -uf -sV -sV -sV -sV -TZ -TZ -TZ -TZ -Bq -TZ -TZ -so -so -so -so -so -so -so -so -so -so -eo -PO -PO -Xq -PO -gp -so -ke -ke -ke -Ox -Ef -ZS -TB -Ab -Ab -Ab -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -lV -sF -vH -sF -sF -sF -so -so -sV -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa +Aa +Aa +Aa +Aa +Uv +Uv +Uv +PR +PR +LZ +LZ +LZ +Uv +LZ +LZ +LZ +LZ +LZ +ZU +LZ +PR +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (103,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -sV -sV -Bq -sV -sV -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -sV -Bq -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -TZ -TZ -TZ -Bq -TZ -TZ -so -so -so -so -so -so -so -so -so -gp -Uf -PO -Pr -PO -eo -ol -cD -Ab -Ab -Ab -Ab -ZS -ZS -TB -Ab -Ab -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -lV -sF -sF -XU -vH -sF -sF -sF -sV -sV -lV -lV +Aa +Uv +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +PR +PR +PR +LZ +IY +Uv +ZO +LZ +Uv +LZ +Uv +ZU +ZU +LZ +PR +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (104,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -sV -sV -sV -sV -TZ -TZ -Uc -Yg -TZ -TZ -TZ -Uc -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -sV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -sV -TZ -TZ -TZ -TZ -TZ -Bq -TZ -TZ -so -so -so -so -so -so -so -so -so -gp -gp -eo -Yt -eo -Pr -Ab -zK -mi -Ab -Ab -Ab -TB -TB -Ab -Ab -Ab -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -lV -sF -sF -sF -Ft -Ft -Ft -sV -sV -sV -lV -lV +Aa +Uv +Aa +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Aa +Uv +Uv +Uv +Uv +Uv +LZ +ZU +Uv +Uv +LZ +LZ +ZU +ZU +PR +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (105,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -sV -sV -sV -sV -sV -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Ss -Ss -sV -sV -sV -TZ -TZ -sV -sV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -TZ -TZ -TZ -Bq -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -so -so -gp -gp -ge -TZ -aK -TZ -TZ -ZS -TZ -ZS -ZS -Ab -Ab -Ab -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -lV -sF -sF -Ft -Ft -lV -sV -sV -sV -sV -lV -lV +Aa +Uv +Aa +Qi +QP +LZ +LZ +LZ +wW +LZ +LZ +LZ +ho +TN +Qi +wZ +wZ +Xt +Qi +Vk +Vk +Qi +fG +fG +fG +fG +fG +fG +Qi +Aa +Uv +Uv +Uv +Uv +Uv +Uv +ZU +ZU +Uv +uQ +Uv +Uv +ZU +LZ +PR +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (106,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -sV -sV -Bq -sV -sV -TZ -TZ -TZ -TZ -TZ -TZ -sV -Ss -Ss -sV -sV -sV -sV -sV -sV -sV -Bq -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -so -so -so -so -so -TZ -SL -TZ -TZ -TZ -ZS -ZS -ZS -Ab -Ab -dU -Ab -Ef -Ab -so -so -so -so -so -so -so -so -so -Ab -so -so -so -so -so -so -Ab -TZ -so -so -lV -XU -sF -Ft -Ft -lV -sV -uf -uf -uf -lV -lV +Aa +Uv +Aa +Qi +ri +LZ +LZ +xc +WJ +LZ +lz +LZ +xi +LZ +Qi +Qi +Qi +Vk +Qi +Qi +Vk +Qi +fG +HJ +qe +wR +hJ +fG +Qi +Aa +Uv +Uv +Uv +Uv +Uv +Uv +LZ +ZU +Uv +Uv +LZ +LZ +Uv +LZ +PR +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (107,1,1) = {" -lV -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -lV -Bq -lV -lV -lV -lV -sV -sV -sV -sV -TZ -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -Bq -Bq -lV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -lV -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -Bq -Bq -Bq -Bq -Ab -Ab -TZ -TZ -TZ -TZ -TZ -ZS -ZS -TZ -Ab -Ab -Dh -XW -Ab -Ef -Ef -so -so -so -so -so -so -so -so -Ab -so -so -so -so -so -so -Ab -TZ -so -so -lV -so -Vg -Ft -Ft -lV -uf -uf -uf -uf -lV -lV +Aa +Uv +Aa +Qi +LZ +xc +LZ +LZ +xc +LZ +LZ +xc +LZ +LZ +Uq +Xt +Qi +Vk +Vk +wZ +Xt +Qi +qI +oI +oI +qO +oI +fG +Qi +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +ZU +Uv +Uv +LZ +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (108,1,1) = {" -lV -gp -Ii -TZ -TZ -TZ -TZ -TZ -TZ -TZ +Aa +Uv +Aa +Qi +LZ +LZ +LZ +LZ +LZ +LZ +xc +LZ +LZ +LZ +Uq +PM +wZ +mW +Qi +Vk +Xt oH -uy -gp -Sy -Sy -wy -gp -CY -CY -gp -ee -ee -ee -ee -ee -ee -gp -lV -Bq -lV -lV -lV -lV -sV -sV -sV -TZ -TZ -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -Bq -Bq -lV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -lV -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -aY -TZ -so -so -so -so -TZ -Bq -Bq -Ab -Ab -Ab -TZ -TZ -TZ -ZS -TZ -TZ -Ab -Ab -Ab -mi -lK -hD -sR -sR -gq -Ab -so -so -so -so -so -UA -so -so -so -so -so -so -Ab -TZ -so -so -lV -Ft -Ft -lV -lV -lV -uf -uf -uf -uf -lV -lV +fG +Tj +BK +BK +Tj +ab +Qi +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +Uv +LZ +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (109,1,1) = {" -lV -gp -TZ -TZ -TZ -oH -VG -TZ -OE -TZ -La -TZ -gp -gp -gp -CY -gp -gp -CY -gp -ee -Us -if -Bo -ff -ee -gp -lV -Bq -lV -lV -lV -lV -sV -sV -sV -TZ -TZ -uf -uf -uf -uf -uf -uf -uf -uf -sV -uf -Bq -Bq -lV -uf -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -lV -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -so -TZ -TZ -Bq -Bq -Bq -Ab -Ab -Ab -TZ -TZ -TZ -TZ -TZ -TZ -TZ -ke -ke -uq -ke -TZ -DX -gq -FL -FL -FL -FL -FL -gq -TZ -TZ -TZ -TZ -so -TZ -Ab -so -so -so -lV -Ft -Ft -lV -so -lV -lV -lV -uf -uf -lV -lV +Aa +Uv +Aa +Qi +LZ +LZ +LZ +xc +Nn +xc +LZ +LZ +xc +LZ +Qi +Qi +Qi +Qi +Qi +Vk +sJ +Qi +Qi +fG +oI +oI +oI +fG +Qi +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +Uv +Uv +Uv +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (110,1,1) = {" -lV -gp -TZ -oH -TZ -TZ -oH -TZ -TZ -oH -TZ -TZ -wS -wy -gp -CY -CY -Sy -wy -gp -ee -Ty -Ty -Zt -Ty -ee -gp -lV -Bq -lV -lV -lV -lV -sV -sV -uf -uf -TZ -sV -sV -uf -uf -uf -uf -uf -uf -uf -uf -Bq -Bq -lV -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -lV -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -so -so -so -so -so -so -so -so -TZ -TZ -Bq -Bq -Bq -Ab -Ab -Ab -TZ -TZ -TZ -TZ -TZ -ke -us -wx -ke -Ab -Ab -Ef -zK -Ab -TZ -TZ -TZ -Ab -Ab -Ab -Ab -UA -Ab -Ab -Ab -TZ -so -so -lV -Ft -lV -lV -so -so -so -lV -lV -lV -lV -lV +Aa +Uv +Aa +Qi +Qi +Qi +Qi +xc +xc +xc +Yt +xc +xm +xc +Qi +Vk +PM +sJ +Xt +Vk +sJ +Vk +Qi +fG +qe +lZ +vV +fG +Qi +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +Uv +Uv +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (111,1,1) = {" -lV -gp -TZ -TZ -TZ -TZ -TZ -TZ -oH -TZ -TZ -TZ -wS -xs -Sy -Ak -gp -CY -wy -tU -ee -Wt -Mu -Mu -Wt -Al -gp -lV -Bq -sV -sV -sV -sV -sV -uf -uf -sV -TZ -sV -sV -sV -sV -sV -sV -sV -uf -sV -uf -Bq -Bq -lV -uf -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -lV -aY -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -so -so -so -so -so -TZ -TZ -TZ -TZ -Bq -Bq -Bq -Ab -Ab -Ab -TZ -TZ -TZ -ke -eU -XT -ke -TZ -TZ -TZ -TZ -Ab -TZ -TZ -TZ -TZ -TZ -Ab -TZ -TZ -TZ -TZ -TZ -TZ -so -so -lV -lV -lV -so -so -so -so -so -so -so -lV -lV +Aa +Uv +Aa +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +LZ +WJ +xc +Qi +sJ +Vk +sJ +yg +sJ +sJ +Vk +Qi +fG +fG +fG +fG +fG +Qi +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +LZ +LZ +Uv +Uv +Uv +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (112,1,1) = {" -lV -gp -TZ -TZ -TZ -oH -Gq -oH -TZ -TZ -oH -TZ -gp -gp -gp -gp -gp -CY -oA -gp -gp -ee -Ty -Ty -Ty -ee -gp -lV -Bq -uf -sV -sV -sV -sV -sV -sV -TZ -TZ -sV -sV -sV -sV -sV -sV -sV -sV -sV -Bq -Bq -Bq -lV -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -lV -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -aY -so -so -so -so -so -so -TZ -TZ -TZ -TZ -Bq -Bq -Bq -Ab -Ab -Ab -Ab -ke -JW -vy -ke -TZ -TZ -Ab -lz -Ab -TZ -TZ -TZ -TZ -TZ -Ab -TZ -TZ -so -so -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -lV -lV +Aa +Uv +Aa +Qi +Qi +Qi +Qi +Vk +xI +Vk +Qi +LZ +xc +ri +Qi +Vk +wZ +Vk +Qm +Vk +Vk +Xt +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Aa +Aa +LZ +Uv +Uv +Uv +Uv +Uv +LZ +LZ +LZ +Uv +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (113,1,1) = {" -lV -gp -gp -gp -gp -oH -oH -oH -vf -oH -yT -oH -gp -CY -xs -oA -wy -CY -oA -CY -gp -ee -if -ZN -aV -ee -gp -lV -Bq -Bq -uf -sV -sV -sV -uf -uf -TZ -TZ -uf -uf -uf -uf -uf -uf -uf -uf -Bq -lV -lV -lV -sV -uf -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -lV -TZ -TZ -TZ -TZ -aY -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -so -so -so -so -TZ -so -so -Ab -Ab -Bq -Bq -Bq -Ab -Ab -ke -ke -ke -ke -Ab -Ab -Ab -TZ -Ab -TZ -Bq -Bq -TZ -TZ -Ab -TZ -so -so -so -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -lV -lV +Aa +Uv +Aa +Qi +Qi +Qi +Vk +mW +Vk +Vk +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +cq +Qi +Qi +Qi +Qi +WX +sg +sg +lN +vc +Qi +Aa +Aa +LZ +LZ +Uv +Uv +Uv +Uv +Uv +LZ +LZ +Uv +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (114,1,1) = {" -lV -gp -gp -gp -gp -gp -gp -gp -gp -TZ -VG -oH -gp -oA -CY -oA -EV -oA -oA -CY -gp -ee -ee -ee -ee -ee -gp -lV -Bq -Bq -Bq -Bq -uf -sV -uf -uf -TZ -TZ -uf -uf -uf -uf -uf -Bq -Bq -Bq -Bq -lV -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -lV -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -Ab -Ab -Ab -Bq -Bq -Ab -Ab -Ab -Ab -Ab -Ab -TZ -TZ -TZ -Ab -aY -Bq -Bq -TZ -TZ -UA -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -Bq -Bq -Bq -Bq -lV -lV +Aa +Uv +Aa +Qi +Qi +Qi +dG +fL +nC +nC +ca +nM +Qi +ZF +ZY +nM +Qi +Vk +Vk +Vk +Vk +Vk +Qi +rO +sg +gH +gH +gH +Qi +Aa +Aa +LZ +LZ +LZ +Uv +LZ +LZ +LZ +LZ +LZ +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (115,1,1) = {" -lV -gp -gp -gp -gp -CY -IE -CY -gp -TZ -oH -TZ -gp -CY -Sy -CY -Ij -CY -CY -wy -gp -gp -gp -gp -gp -gp -gp -lV -lV -Bq -TZ -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -uf -Bq -Bq -Bq -Bq -Bq -Bq -lV -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -TZ -TZ -aY -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -so -so -so -so -so -TZ -so -so -so -so -sF -sF -Ab -Bq -Bq -Bq -Ab -Ab -TZ -TZ -TZ -TZ -TZ -Ab -TZ -Bq -Bq -TZ -Bq -Ab -TZ -so -so -so -so -so -so -so -so -so -so -so -so -Bq -Bq -so -so -so -lV -lV +Aa +Uv +Aa +Qi +Qi +Vk +pK +mW +Vk +Vk +Qi +Xp +ZY +Lg +Qi +Xp +ZY +nC +nC +nC +nC +Xt +fv +sg +lN +FN +gH +gH +Qi +Qi +Qi +LZ +ZO +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (116,1,1) = {" -lV -gp -gp -gp -CY -Ak -CY -CY -gp -gp -gp -gp -gp -gp -gp -gp -cO -gp -gp -gp -gp -wv -ac -ac -Ha -fe -gp -lV -lV -lV -TZ -TZ -TZ -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -lV -lV -lV -Bq -Bq -lV -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -TZ -TZ -TZ -TZ -TZ -Le -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -sF -sF -Ab -so -Bq -Bq -Bq -Bq -Bq -Bq -Bq -TZ -Ab -TZ -Bq -Bq -Bq -Bq -Ab -TZ -so -so -so -so -so -so -so -so -so -so -Bq -Bq -Bq -so -so -so -so -lV -lV +Aa +Uv +Aa +Qi +Qi +Vk +ZF +Vk +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Xt +Vk +Vk +Vk +Qi +gH +gH +vc +sg +sg +Az +UN +UN +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (117,1,1) = {" -lV -gp -gp -gp -CY -QN -AH -AH -kS -ln -gp -AZ -ta -ln -gp -CY -CY -CY -CY -CY -gp -fe -ac -rr -rr -rr -gp -lV -lV -lV -lV -lV -TZ -TZ -lV -lV -lV -lV -lV -lV -Bq -Bq -lV -uf -lV -lV -lV -lV -uf -uf -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -lV -TZ -TZ -TZ -TZ -Le -TZ -TZ -TZ -TZ -so -aY -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -sF -sF -so -so -so -Bq -Bq -Bq -Bq -Bq -TZ -Ab -TZ -Bq -Bq -Bq -Bq -Ab -TZ -so -so -so -so -so -so -so -so -Bq -Bq -Bq -so -so -so -so -so -so -lV -lV +Aa +Uv +Aa +Qi +Qi +YW +Lg +Vk +Qi +fG +fG +eG +jz +ne +Ck +bh +lq +Qi +hF +Qi +Qi +Qi +Qi +Qi +Qi +gH +gH +za +Qi +Qi +Qi +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (118,1,1) = {" -lV -gp -gp -CY -hE -Ak -CY -CY -gp -Hu -ta -fh -gp -Hu -ta -AH -AH -AH -AH -wy -Tk -ac -Ha -vW -rr -rr -gp -gp -gp -lV -lV -TZ -TZ -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -lV -lV -lV -Le -Le -Le -Le -Le -TZ -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -Bq -Bq -Bq -Bq -TZ -Ab -TZ -Bq -Bq -TZ -TZ -UA -TZ -so -so -so -so -so -so -so -Bq -Bq -so -so -so -so -so -so -so -so -lV -lV +Aa +Uv +Aa +Qi +Qi +FZ +Qi +Qi +Qi +fG +qv +qv +qv +qv +DC +qv +qv +fG +fG +Qi +Mj +pv +cJ +Mj +Qi +Qi +Qi +Qi +Qi +Aa +Aa +LZ +LZ +LZ +LZ +LZ +LZ +Uv +Uv +LZ +LZ +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (119,1,1) = {" -lV -gp -gp -CY -AZ -CY -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -wy -CY -CY -CY -gp -rr -rr -fe -ac -ac -nT -Qu -Qu -af -TZ -TZ -lV -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -sV -sV -uf -uf -sV -sV -sV -sV -sV -lV -TZ -Le -Le -Le -Le -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -TZ -TZ -TZ -TZ -TZ -TZ -TZ -Bq -TZ -TZ -Ab -so -so -so -so -Bq -Bq -Bq -Bq -Bq -so -so -so -so -so -so -so -so -so -lV -lV +Aa +Uv +Aa +Qi +MC +qv +qv +NO +Qi +bq +IV +eB +su +yX +yX +yX +QZ +Qi +fG +Qi +Mj +Tn +Tn +Mj +ZA +AI +ix +BE +Qi +Aa +Aa +LZ +LZ +LZ +LZ +ZO +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (120,1,1) = {" -lV -gp -gp -KP -fh -CY -gp -ee -ee -Fj -rL -CC -Se -jf -ao -gp -Bc -gp -gp -gp -gp -gp -gp -rr -rr -FP -gp -gp -gp -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -sV -uf -uf -sV -sV -sV -sV -sV -lV -TZ -Le -Le -TZ -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -TZ -TZ -TZ -TZ -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -Bq -so -so -so -so -so -so -so -so -so -so -so -so -so -lV -lV +Aa +Uv +Aa +Qi +Wq +qv +qv +cB +Qi +Qi +Qi +Qi +Qi +II +qv +DC +cW +Qi +fG +Vk +Mj +Tn +Tn +Tn +Nd +Tn +Tn +Mj +Qi +Aa +Aa +LZ +LZ +Xy +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (121,1,1) = {" -lV -gp -gp -yC -gp -gp -gp -ee -Vd -Vd -Vd -Vd -Fc -Vd -Vd -ee -ee -gp -XP -bm -gV -XP -gp -gp -gp -gp -gp -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -sV -uf -sV -sV -sV -uf -uf -uf -uf -sV -sV -sV -lV -TZ -Le -Le -TZ -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -lV -lV +Aa +Uv +Aa +Qi +Ts +qv +Nr +qv +JL +JL +Ye +Qi +Qi +OM +qv +qv +FE +Qi +Qi +Qi +Mj +Gb +FG +Tn +Tn +Tn +Tn +qp +Qi +Aa +Aa +LZ +ZO +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (122,1,1) = {" -lV -gp -zv -Vd -Vd -VH -gp -pv -KB -Ko -sm -HI -HI -HI -iA -gp -ee -gp -TV -Qx -Qx -TV -zP -Om -IN -YA -gp -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -sV -sV -uf -uf -uf -uf -sV -sV -sV -sV -aY -TZ -TZ -lV -lV -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -TZ -TZ -TZ -TZ -TZ -TZ -TZ -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -lV -lV +Aa +Uv +Aa +Qi +in +qv +qv +qv +qv +JL +hB +Qi +Qi +nY +qv +qv +HT +Qi +Qi +Qi +Mj +Tn +Tn +Tn +Tn +Tn +Tn +GQ +Qi +Aa +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (123,1,1) = {" -lV -gp -fJ -Vd -Vd -eJ -gp -gp -gp -gp -gp -cE -Vd -Fc -sw -gp -ee -CY -TV -Qx -Qx -Qx -oO -Qx -Qx -TV -gp -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -sV -sV -sV -sV -sV -uf -uf -uf -uf -uf -uf -sV -sV -sV -lV -TZ -lV -lV -sV -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -TZ -TZ -TZ -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -lV -lV +Aa +Uv +Aa +Qi +LT +qv +qv +qv +JL +JL +nP +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +cJ +Mj +Mj +Mj +qp +Mj +Mj +Mj +Qi +Aa +Aa +Uv +Xy +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (124,1,1) = {" -lV -gp -Ro -Vd -EK -Vd -vB -vB -qF -gp -gp -ua -Vd -Vd -PS -gp -gp -gp -TV -Rj -dH -Qx -Qx -Qx -Qx -zr -gp -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -sV -uf -uf -uf -uf -uf -uf -lV -uf -uf -uf -uf -sV -sV -sV -lV -aY -lV -sV -sV -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -TZ -TZ -TZ -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -lV -lV +Aa +Uv +Aa +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Qi +Aa +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (125,1,1) = {" -lV -gp -LS -Vd -Vd -Vd -Vd -vB -RJ -gp -gp -De -Vd -Vd -op -gp -gp -gp -TV -Qx -Qx -Qx -Qx -Qx -Qx -Et -gp -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -lV -lV -uf -uf -uf -uf -uf -uf -sV -sV -lV -sV -sV -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -lV -lV +Aa +Uv +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (126,1,1) = {" -lV -gp -oZ -Vd -Vd -Vd -vB -vB -wk -gp -gp -gp -gp -gp -gp -gp -gp -gp -gV -XP -TV -XP -zr -XP -TV -XP -gp -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -lV -lV -lV -lV -lV -sV -uf -uf -uf -uf -uf -uf -uf -sV -sV -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (127,1,1) = {" -lV -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -gp -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -uf -lV -lV -lV -lV -lV -sV -sV -sV -sV -sV -sV -sV -sV -sV -sV -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -so -lV -lV +Aa +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Uv +Aa "} (128,1,1) = {" -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV -lV +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +Aa +"} + +(1,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +du +"} +(2,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +pt +RM +RM +pt +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +"} +(3,1,2) = {" +RM +RM +pt +DD +pt +RM +RM +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +DD +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +DD +pt +RM +RM +RM +RM +RM +pt +pt +DD +pt +pt +PX +pt +pt +pt +RM +RM +RM +RM +RM +RM +PX +pt +pt +pt +PX +pt +PX +PX +pt +pt +pt +pt +pt +jm +pt +pt +PX +PX +pt +pt +RM +RM +RM +RM +RM +pt +pt +pt +pt +pt +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +pt +pt +pt +pt +PX +pt +pt +pt +pt +RM +RM +RM +RM +RM +RM +RM +RM +RM +"} +(4,1,2) = {" +RM +RM +pt +DD +pt +RM +pt +pt +pt +pt +pt +PX +pt +PX +pt +pt +PX +pt +pt +pt +DD +pt +pt +pt +pt +PX +pt +pt +PX +pt +pt +pt +pt +pt +pt +PX +pt +pt +DD +pt +RM +RM +RM +RM +RM +pt +pt +DD +pt +pt +PX +PX +pt +pt +PX +PX +PX +pt +PX +pt +PX +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +jm +jm +pt +pt +pt +pt +pt +pt +RM +RM +RM +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +RM +RM +RM +RM +RM +pt +PX +pt +PX +pt +pt +pt +pt +PX +PX +RM +RM +RM +RM +RM +RM +RM +RM +"} +(5,1,2) = {" +RM +RM +pt +DD +pt +RM +pt +pt +pt +PX +PX +pt +pt +pt +PX +pt +pt +PX +pt +pt +DD +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +DD +pt +RM +RM +RM +RM +RM +pt +pt +DD +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +PX +pt +PX +PX +pt +pt +pt +pt +pt +pt +pt +jm +jm +jm +pt +pt +pt +pt +pt +PX +pt +pt +Hk +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +RM +RM +RM +RM +RM +PX +pt +pt +pt +pt +pt +pt +PX +pt +PX +RM +RM +RM +RM +RM +RM +RM +RM +"} +(6,1,2) = {" +RM +RM +pt +DD +DD +RM +pt +PX +pt +pt +PX +PX +pt +pt +pt +PX +pt +PX +pt +pt +DD +pt +pt +PX +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +DD +pt +RM +RM +RM +RM +RM +pt +pt +DD +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +jm +zE +Pt +zE +zE +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +zE +jm +pt +pt +jm +jm +jm +jm +jm +zE +zE +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +rD +rD +rD +rD +pt +PX +pt +pt +RM +RM +RM +RM +RM +RM +RM +RM +"} +(7,1,2) = {" +RM +RM +pt +pt +DD +RM +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +DD +pt +pt +PX +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +pt +pt +pt +pt +DD +pt +pt +pt +pt +pt +pt +jm +jm +DD +jm +jm +jm +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +jm +jm +kR +kR +kR +kR +AK +AK +AK +kR +WP +WP +WP +WP +WP +WP +WP +WP +WP +WP +WP +WP +AK +AK +kR +kR +WP +WP +kR +kR +kR +kR +AK +LC +WP +WP +pt +pt +pt +pt +PX +pt +pt +PX +PX +rD +rD +rD +rD +rD +pt +pt +pt +pt +RM +RM +RM +RM +RM +RM +RM +"} +(8,1,2) = {" +RM +RM +pt +pt +DD +pt +pt +pt +pt +PX +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +DD +DD +pt +pt +pt +PX +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +jm +pt +DD +pt +pt +pt +pt +pt +pt +jm +jm +DD +jm +jm +jm +jm +aT +jm +jm +jm +jm +jm +jm +jm +pt +pt +jm +jm +jm +aT +jm +jm +jm +kR +AK +kR +AK +kR +kR +WP +WP +WU +WP +WU +WP +WP +WU +WP +WP +WP +AK +kR +kR +AK +AK +kR +kR +kR +kR +kR +kR +kR +AK +kR +kR +kR +kR +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +mb +mb +rD +rD +rD +pt +pt +pt +RM +RM +RM +RM +RM +RM +RM +"} +(9,1,2) = {" +RM +RM +pt +pt +DD +pt +pt +PX +pt +pt +pt +PX +pt +pt +PX +pt +pt +pt +pt +PX +pt +DD +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +pt +DD +pt +pt +pt +pt +pt +pt +jm +jm +DD +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +aT +jm +jm +jm +jm +jm +DD +AK +LC +kR +kR +AK +WP +WP +WP +WU +WP +WU +WP +WU +WP +WU +WP +WP +AK +AK +kR +AK +AK +PW +kR +kR +AK +LC +kR +kR +AK +kR +kR +AK +AK +jm +pt +pt +PX +PX +pt +pt +PX +pt +pt +mb +mb +mb +mb +rD +pt +pt +PX +PX +PX +PX +RM +RM +RM +RM +"} +(10,1,2) = {" +RM +RM +pt +pt +DD +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +DD +pt +pt +pt +PX +pt +PX +pt +pt +pt +pt +jm +jm +jm +jm +jm +pt +DD +jm +jm +jm +jm +jm +jm +jm +jm +DD +pt +PX +PX +pt +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +DD +DD +AK +AK +kR +kR +WP +WP +WU +WP +WP +WP +WP +WP +WP +WP +WP +WP +WP +AK +AK +kR +AK +AK +kR +kR +AK +kR +AK +kR +kR +kR +kR +kR +kR +AK +jm +pt +pt +PX +PX +pt +pt +rD +rD +rD +mb +mb +jm +jm +rD +pt +pt +pt +pt +pt +PX +RM +RM +RM +RM +"} +(11,1,2) = {" +RM +RM +pt +pt +pt +DD +pt +pt +PX +pt +pt +pt +pt +pt +PX +pt +PX +pt +pt +pt +pt +DD +pt +pt +pt +PX +pt +mb +pt +pt +pt +jm +pt +pt +jm +pt +pt +pt +DD +jm +jm +jm +aT +jm +aT +jm +jm +DD +pt +PX +PX +PX +pt +pt +pt +pt +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +DD +jm +AK +AK +AK +AK +WP +WP +TA +yD +yD +yD +hw +yD +yD +WP +WP +WU +WP +AK +AK +AK +AK +kR +kR +kR +AK +kR +AK +kR +kR +AK +kR +kR +kR +AK +jm +pt +pt +pt +pt +rD +rD +rD +rD +jm +jm +jm +jm +jm +rD +rD +pt +pt +pt +pt +pt +pt +PX +RM +RM +"} +(12,1,2) = {" +RM +RM +pt +pt +pt +DD +pt +pt +pt +mf +mf +pt +PX +PX +pt +pt +PX +PX +PX +pt +pt +DD +pt +pt +pt +pt +pt +mb +mb +pt +jm +pt +pt +pt +pt +PX +pt +pt +DD +DD +jm +jm +jm +jm +jm +jm +jm +DD +pt +pt +PX +PX +PX +pt +pt +pt +jm +jm +pt +jm +jm +jm +jm +pt +pt +jm +DD +DD +jm +AK +AK +AK +kR +WP +WU +WP +IC +gE +yD +iJ +yD +WP +WP +WP +WP +WP +AK +AK +kR +kR +AK +kR +kR +AK +AK +PW +PW +kR +AK +kR +kR +kR +AK +jm +pt +pt +rD +rD +jm +jm +jm +jm +jm +pt +pt +pt +pt +jm +rD +rD +pt +pt +pt +PX +pt +PX +RM +RM +"} +(13,1,2) = {" +RM +RM +pt +pt +pt +DD +pt +pt +pt +mf +mf +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +DD +pt +pt +pt +pt +mb +mb +mb +mb +mb +jm +jm +jm +pt +PX +pt +jm +jm +DD +jm +jm +jm +jm +jm +jm +jm +DD +pt +pt +PX +PX +PX +PX +pt +pt +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +DD +jm +jm +AK +AK +AK +kR +WP +WP +WP +Ro +CM +yD +yD +yD +wT +WP +WP +WU +WP +AK +AK +AK +kR +AK +kR +kR +kR +AK +kR +kR +kR +AK +kR +kR +PW +kR +zE +pt +rD +rD +jm +jm +pt +pt +jm +jm +pt +pt +PX +pt +jm +jm +rD +rD +pt +pt +pt +PX +PX +RM +RM +"} +(14,1,2) = {" +RM +RM +pt +pt +pt +DD +DD +pt +pt +mf +mf +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +DD +pt +pt +pt +pt +pt +mb +mb +mb +mb +jm +jm +jm +pt +pt +pt +jm +jm +DD +jm +jm +jm +jm +jm +jm +pt +DD +DD +pt +pt +PX +PX +PX +PX +pt +aT +jm +jm +jm +jm +jm +jm +pt +pt +DD +DD +pt +pt +AK +AK +AK +kR +WP +WU +WP +WP +or +Ou +yD +yD +WP +yD +WP +WP +WP +AK +AK +AK +AK +kR +kR +kR +AK +WL +WL +kR +kR +kR +kR +kR +kR +kR +jm +pt +rD +jm +jm +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +rD +rD +pt +pt +PX +PX +RM +RM +"} +(15,1,2) = {" +RM +RM +pt +pt +pt +pt +DD +pt +pt +mf +mf +pt +PX +pt +pt +pt +PX +pt +pt +pt +pt +DD +DD +pt +PX +pt +pt +mb +mb +mb +jm +aT +jm +jm +jm +jm +jm +jm +jm +DD +jm +jm +jm +jm +jm +jm +pt +pt +DD +pt +pt +pt +PX +PX +PX +pt +jm +jm +pt +pt +pt +pt +jm +jm +pt +DD +pt +pt +pt +AK +AK +AK +kR +AK +WP +WU +WP +ib +yD +yD +yD +yD +yD +WP +WP +WP +AK +AK +kR +kR +kR +kR +AK +WL +WL +WL +WL +AK +kR +PW +kR +kR +kR +jm +rD +rD +jm +pt +pt +PX +PX +pt +PX +PX +PX +pt +pt +pt +pt +jm +jm +rD +pt +pt +PX +PX +RM +RM +"} +(16,1,2) = {" +RM +RM +pt +pt +pt +pt +DD +pt +pt +mf +mf +pt +PX +PX +pt +pt +PX +pt +pt +jm +jm +jm +DD +pt +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +DD +jm +jm +jm +jm +jm +jm +pt +pt +DD +pt +pt +pt +pt +pt +PX +pt +jm +jm +pt +pt +pt +pt +pt +pt +DD +DD +pt +PX +pt +AK +AK +AK +kR +AK +WP +WP +WP +AK +yD +yD +yD +yD +yD +DN +WP +AK +AK +AK +AK +kR +AK +kR +kR +WL +WL +WL +WL +AK +AK +AK +kR +kR +kR +jm +jm +jm +jm +pt +pt +PX +PX +pt +pt +pt +pt +pt +PX +PX +pt +jm +jm +rD +pt +pt +pt +PX +RM +RM +"} +(17,1,2) = {" +RM +RM +pt +pt +pt +pt +DD +pt +pt +mf +mf +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +jm +DD +pt +pt +PX +PX +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +DD +DD +jm +jm +jm +jm +jm +jm +pt +DD +pt +jm +jm +jm +pt +jm +jm +jm +jm +pt +pt +pt +pt +pt +pt +DD +pt +PX +pt +pt +AK +LC +kR +kR +kR +AK +WP +WP +WP +yD +yD +yD +yD +yD +WP +AK +AK +AK +AK +kR +AK +kR +kR +kR +WL +WL +WL +WL +WL +AK +kR +kR +kR +kR +jm +jm +jm +pt +pt +PX +pt +pt +PX +pt +pt +pt +PX +pt +pt +pt +pt +jm +rD +RM +RM +RM +RM +RM +RM +"} +(18,1,2) = {" +RM +RM +pt +pt +pt +pt +DD +pt +jm +mf +mf +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +DD +jm +pt +pt +pt +aT +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +DD +jm +jm +aT +jm +jm +jm +jm +DD +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +pt +pt +DD +DD +pt +pt +pt +PX +AK +AK +kR +AK +kR +AK +AK +WP +WP +WP +yD +yD +WB +AK +mp +AK +AK +AK +AK +AK +AK +kR +kR +WL +WL +WL +WL +WL +WL +kR +AK +AK +kR +kR +jm +jm +jm +pt +pt +pt +PX +pt +pt +pt +PX +PX +pt +pt +PX +pt +rD +jm +rD +rD +RM +RM +RM +RM +RM +"} +(19,1,2) = {" +RM +RM +pt +pt +pt +pt +DD +jm +jm +mf +mf +aT +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +DD +jm +pt +pt +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +pt +pt +DD +jm +jm +jm +jm +aT +jm +pt +DD +pt +jm +jm +pt +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +DD +pt +jm +jm +pt +PX +AK +AK +AK +kR +AK +AK +kR +kR +WP +cG +QX +QX +PB +eT +dX +AK +AK +AK +kR +kR +AK +kR +WL +WL +WL +WL +WL +WL +WL +kR +kR +kR +AK +AK +zE +jm +jm +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +rD +rD +rD +jm +mf +pt +pt +RM +RM +RM +RM +"} +(20,1,2) = {" +RM +RM +pt +pt +pt +pt +DD +DD +jm +kb +mf +jm +jm +jm +jm +jm +aT +jm +jm +jm +jm +jm +DD +jm +pt +pt +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +PX +pt +pt +DD +pt +jm +jm +mf +jm +jm +pt +DD +pt +pt +pt +pt +pt +jm +jm +jm +aT +jm +jm +jm +pt +DD +DD +pt +pt +pt +pt +PX +AK +AK +AK +AK +LC +kR +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +kR +kR +AK +WL +WL +WL +WL +WL +WL +WL +AK +kR +kR +AK +kR +AK +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +rD +mf +mf +mf +mf +pt +pt +RM +RM +RM +RM +"} +(21,1,2) = {" +RM +RM +pt +pt +pt +pt +DD +DD +jm +kb +kb +kb +kb +kb +kb +mf +mf +mf +kb +mf +mf +mf +DD +mf +mf +mf +mf +jm +jm +jm +jm +jm +jm +aT +jm +pt +pt +pt +pt +PX +DD +pt +jm +jm +mf +jm +jm +pt +DD +pt +pt +pt +pt +pt +mf +mf +mf +mf +jm +jm +jm +pt +DD +pt +pt +pt +pt +pt +pt +AK +AK +AK +kR +kR +kR +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +kR +kR +AK +WL +WL +WL +WL +WL +WL +WL +kR +kR +AK +kR +AK +kR +kR +kn +jm +jm +jm +jm +jm +jm +aT +jm +jm +jm +jm +jm +rD +rD +mf +mf +mf +mf +mf +pt +pt +RM +RM +RM +"} +(22,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +kb +jm +kb +mf +kb +kb +kb +kb +kb +jm +kb +kb +kb +jm +DD +jm +jm +jm +mf +jm +jm +aT +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +DD +pt +jm +jm +mf +jm +jm +pt +DD +pt +pt +pt +pt +pt +mf +jm +jm +mf +jm +jm +jm +DD +DD +pt +pt +pt +PX +pt +pt +AK +AK +kR +kR +AK +AK +kR +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +kR +kR +WL +WL +WL +WL +WL +WL +WL +kR +kR +AK +kR +AK +kR +kR +kR +zE +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +jm +jm +jm +jm +mf +mf +pt +pt +RM +RM +RM +"} +(23,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +kb +jm +EB +kb +kb +kb +kb +kb +jm +aT +jm +kb +kb +jm +DD +jm +jm +jm +mf +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +DD +jm +jm +jm +mf +jm +jm +pt +DD +pt +pt +pt +pt +pt +mf +jm +pt +mf +jm +jm +jm +DD +jm +jm +jm +pt +pt +pt +pt +AK +AK +AK +kR +AK +AK +AK +AK +AK +AK +AK +AK +AK +kR +AK +AK +AK +kR +kR +WL +WL +WL +WL +WL +AK +kR +AK +AK +kR +AK +AK +kR +kR +AK +jm +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +jm +jm +mf +mf +mf +mf +mf +mf +mf +pt +pt +RM +RM +RM +"} +(24,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +kb +kb +mf +kb +aT +jm +kb +jm +jm +jm +jm +pt +jm +jm +DD +jm +jm +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +DD +mf +mf +mf +mf +mf +mf +mf +DD +mf +mf +mf +mf +mf +mf +jm +pt +mf +mf +mf +mf +DD +mf +mf +mf +pt +PX +pt +pt +AK +AK +AK +kR +kR +AK +kR +AK +LC +AK +kR +kR +AK +AK +kR +kR +AK +AK +kR +kR +kR +WL +WL +kR +kR +kR +kR +kR +kR +kR +AK +kR +LC +AK +jm +jm +jm +jm +jm +DD +DD +DD +DD +jm +DD +jm +jm +jm +jm +jm +jm +jm +mf +mf +pt +pt +RM +RM +RM +"} +(25,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +jm +kb +mf +kb +jm +jm +jm +jm +jm +jm +jm +pt +jm +jm +DD +jm +jm +jm +mf +pt +jm +jm +jm +jm +jm +jm +mf +EB +mf +jm +pt +pt +DD +pt +jm +mf +EB +mf +jm +pt +DD +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +jm +DD +DD +jm +jm +jm +pt +PX +pt +PX +AK +AK +AK +kR +PW +kR +AK +AK +AK +kR +kR +AK +kR +kR +AK +AK +LC +kR +kR +kR +AK +AK +kR +kR +AK +kR +kR +kR +kR +AK +kR +kR +AK +kR +jm +jm +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +jm +jm +jm +mf +mf +pt +pt +RM +RM +RM +"} +(26,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +jm +kb +mf +kb +jm +jm +jm +jm +jm +jm +jm +pt +pt +jm +DD +jm +jm +jm +mf +pt +jm +jm +jm +jm +jm +jm +mf +mf +mf +jm +pt +pt +DD +pt +pt +mf +mf +mf +pt +PX +DD +pt +pt +pt +pt +PX +pt +pt +pt +jm +jm +jm +DD +jm +jm +jm +jm +pt +pt +pt +PX +AK +AK +AK +kR +AK +kR +AK +AK +AK +kR +AK +kR +kR +LC +AK +AK +AK +kR +kR +kR +kR +AK +AK +AK +kR +kR +AK +kR +kR +AK +kR +kR +AK +kR +jm +DD +DD +pt +pt +jm +jm +jm +jm +jm +jm +pt +pt +pt +DD +DD +jm +jm +mf +mf +pt +pt +RM +RM +RM +"} +(27,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +pt +kb +kb +kb +jm +jm +pt +pt +pt +pt +pt +pt +pt +jm +DD +aT +jm +jm +mf +pt +jm +jm +jm +jm +jm +jm +mf +mf +mf +jm +pt +pt +DD +pt +PX +pt +pt +pt +pt +pt +DD +pt +PX +pt +pt +pt +pt +pt +pt +pt +jm +DD +DD +jm +jm +jm +jm +pt +pt +pt +pt +AK +AK +AK +kR +AK +AK +kR +AK +kR +AK +AK +AK +AK +AK +AK +AK +AK +kR +WP +WP +WP +AK +kR +kR +kR +kR +kR +LC +AK +kR +kR +kR +AK +kR +jm +jm +pt +pt +jm +jm +jm +jm +jm +jm +jm +pt +pt +PX +pt +DD +jm +jm +mf +mf +pt +pt +RM +RM +RM +"} +(28,1,2) = {" +RM +RM +pt +pt +pt +pt +jm +DD +DD +jm +kb +kb +pt +pt +pt +pt +pt +pt +pt +pt +PX +jm +DD +jm +jm +jm +mf +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +DD +pt +pt +pt +pt +pt +PX +pt +DD +pt +PX +pt +pt +pt +PX +pt +pt +pt +DD +DD +jm +pt +pt +pt +pt +PX +pt +PX +pt +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +LC +AK +AK +AK +AK +AK +WP +WP +WP +WP +WU +WP +AK +kR +kR +kR +kR +AK +kR +kR +PW +kR +AK +kR +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +jm +pt +pt +DD +DD +jm +jm +mf +pt +pt +RM +RM +RM +"} +(29,1,2) = {" +RM +RM +pt +pt +pt +pt +jm +jm +DD +kb +kb +kb +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +DD +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +DD +DD +pt +pt +pt +PX +pt +pt +DD +DD +pt +pt +pt +pt +pt +pt +pt +pt +pt +DD +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +AK +AK +AK +AK +kR +AK +AK +AK +kR +AK +AK +AK +AK +AK +AK +WP +WP +WU +WP +WP +WP +WP +WP +kR +kR +kR +kR +AK +kR +kR +kR +kR +AK +PW +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +jm +jm +pt +pt +DD +DD +pt +mf +pt +RM +RM +RM +RM +"} +(30,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +DD +jm +kb +kb +pt +pt +pt +pt +RM +pt +pt +pt +PX +RM +DD +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +PX +pt +pt +DD +DD +pt +pt +pt +pt +pt +pt +DD +DD +pt +PX +PX +pt +pt +pt +pt +pt +DD +DD +pt +pt +pt +pt +PX +pt +PX +pt +pt +pt +AK +AK +LC +LC +AK +kR +kR +AK +kR +kR +AK +AK +AK +PW +AK +WP +WP +WU +WP +WU +WP +WP +WP +WP +kR +kR +kR +AK +kR +kR +kR +AK +AK +kR +jm +jm +jm +jm +jm +jm +jm +jm +aT +jm +jm +pt +pt +jm +pt +PX +pt +DD +DD +DD +pt +RM +RM +RM +RM +"} +(31,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +DD +RM +pt +pt +pt +pt +pt +PX +pt +PX +pt +pt +PX +RM +DD +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +DD +DD +pt +pt +PX +pt +pt +pt +DD +DD +pt +pt +pt +pt +pt +pt +pt +DD +DD +pt +pt +PX +pt +pt +pt +pt +pt +PX +pt +pt +AK +AK +AK +AK +LC +AK +AK +kR +AK +AK +kR +kR +AK +kR +WP +WP +WP +WP +WP +WP +WP +WU +WP +kR +kR +kR +kR +kR +kR +kR +AK +AK +kR +PW +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +jm +pt +pt +pt +pt +pt +DD +DD +RM +RM +RM +RM +"} +(32,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +DD +RM +pt +pt +pt +PX +pt +PX +pt +pt +pt +pt +pt +pt +DD +pt +PX +pt +pt +PX +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +DD +DD +pt +pt +PX +pt +pt +pt +DD +DD +pt +pt +PX +pt +pt +PX +pt +DD +pt +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +pt +AK +AK +AK +AK +AK +AK +kR +PW +kR +kR +kR +kR +kR +AK +WP +WU +WP +WP +WU +WP +WP +WP +PW +kR +kR +kR +AK +kR +kR +AK +AK +AK +kR +kR +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +PX +pt +jm +jm +jm +jm +pt +pt +pt +DD +DD +RM +RM +RM +"} +(33,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +DD +RM +pt +pt +pt +PX +pt +pt +PX +pt +pt +pt +pt +pt +DD +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +DD +DD +pt +pt +PX +PX +pt +pt +DD +DD +pt +pt +pt +pt +PX +PX +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +mf +kR +kR +AK +AK +AK +LC +AK +kR +kR +kR +LC +kR +AK +WP +WP +WP +WP +WU +WP +WU +WP +WP +kR +kR +kR +AK +AK +kR +kR +kR +PW +kR +kR +kR +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +jm +jm +jm +jm +pt +PX +pt +pt +DD +DD +RM +RM +"} +(34,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +DD +RM +pt +pt +pt +pt +PX +pt +PX +pt +pt +PX +pt +pt +DD +pt +PX +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +PX +pt +pt +pt +DD +DD +pt +pt +pt +pt +pt +pt +DD +DD +pt +PX +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +mf +mf +kR +kR +kR +AK +AK +AK +AK +AK +kR +kR +kR +kR +AK +WP +AK +WP +WP +WP +WP +WP +WP +AK +AK +AK +AK +AK +LC +AK +AK +AK +AK +AK +AK +LC +zE +jm +jm +jm +aT +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +jm +pt +pt +pt +pt +pt +pt +RM +RM +"} +(35,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +DD +RM +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +DD +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +DD +DD +pt +pt +PX +pt +pt +pt +DD +DD +pt +PX +PX +PX +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +mf +mf +DD +kR +kR +kR +AK +AK +AK +AK +AK +AK +AK +kR +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +AK +zE +gY +jm +jm +jm +jm +jm +jm +jm +aT +jm +jm +jm +jm +pt +pt +jm +jm +jm +pt +pt +PX +pt +RM +RM +"} +(36,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +DD +RM +pt +pt +pt +PX +PX +PX +pt +pt +PX +pt +PX +pt +DD +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +DD +DD +pt +pt +pt +pt +pt +pt +DD +DD +pt +pt +pt +pt +pt +pt +pt +pt +PX +PX +pt +PX +pt +pt +pt +mf +pt +DD +DD +DD +pt +jm +jm +jm +jm +pt +pt +pt +pt +PX +pt +PX +PX +pt +mf +mf +jm +pt +pt +pt +pt +pt +pt +pt +jm +jm +pt +pt +mf +pt +PX +pt +mf +gY +gY +gY +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +jm +jm +jm +pt +pt +pt +RM +RM +"} +(37,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +DD +RM +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +RM +DD +pt +pt +PX +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +DD +DD +pt +pt +pt +pt +pt +pt +DD +DD +pt +pt +pt +PX +pt +PX +pt +pt +pt +pt +pt +pt +pt +mf +mf +pt +DD +DD +pt +pt +jm +jm +jm +jm +jm +pt +pt +PX +pt +PX +pt +PX +pt +pt +mf +mf +jm +pt +pt +pt +pt +pt +pt +pt +pt +jm +pt +pt +mf +jm +pt +pt +pt +mf +gY +gY +gY +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +jm +jm +jm +jm +pt +PX +pt +RM +RM +"} +(38,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +DD +kb +kb +kb +pt +pt +pt +pt +pt +pt +pt +pt +pt +RM +DD +pt +pt +pt +pt +pt +PX +pt +PX +pt +pt +pt +PX +pt +pt +PX +pt +DD +DD +pt +pt +PX +PX +pt +pt +DD +DD +pt +pt +pt +pt +pt +pt +DD +DD +DD +pt +pt +mf +mf +mf +DD +DD +DD +pt +mf +jm +jm +jm +jm +jm +jm +pt +pt +pt +pt +pt +pt +pt +jm +aT +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +pt +mf +jm +pt +PX +pt +pt +pt +gY +gY +jm +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +jm +pt +jm +jm +jm +pt +pt +pt +pt +RM +RM +"} +(39,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +DD +jm +jm +jm +kb +kb +jm +jm +pt +pt +pt +pt +pt +pt +DD +kb +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +DD +DD +kb +kb +pt +pt +pt +DD +DD +DD +pt +jm +pt +pt +pt +pt +DD +DD +DD +pt +DD +mf +mf +DD +DD +pt +mf +mf +jm +jm +pt +jm +jm +jm +jm +pt +PX +pt +pt +PX +pt +pt +jm +jm +mf +pt +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +mf +jm +mf +jm +jm +pt +pt +PX +pt +gY +gY +gY +jm +pt +PX +pt +pt +jm +jm +jm +jm +jm +jm +jm +pt +pt +jm +pt +pt +pt +PX +RM +RM +"} +(40,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +DD +kb +kb +pt +pt +kb +jm +kb +pt +pt +PX +pt +pt +pt +DD +kb +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +DD +DD +kb +pt +pt +pt +pt +DD +pt +pt +pt +pt +pt +pt +pt +pt +DD +DD +DD +DD +DD +DD +DD +mf +mf +mf +pt +pt +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +jm +jm +jm +jm +mf +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +mf +mf +mf +jm +jm +pt +PX +pt +pt +mf +gY +gY +jm +jm +jm +pt +jm +pt +jm +pt +pt +jm +jm +jm +jm +pt +jm +pt +pt +pt +pt +RM +RM +"} +(41,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +DD +kb +kb +jm +jm +kb +jm +jm +pt +pt +pt +PX +PX +pt +DD +kb +pt +pt +PX +pt +pt +pt +PX +pt +PX +pt +pt +pt +pt +kb +kb +DD +DD +kb +kb +kb +kb +kb +DD +pt +pt +pt +jm +pt +PX +pt +pt +DD +DD +DD +DD +DD +DD +mf +pt +pt +pt +pt +jm +pt +jm +jm +jm +jm +jm +jm +pt +jm +aT +jm +pt +jm +jm +jm +jm +mf +pt +pt +PX +PX +pt +pt +PX +pt +pt +jm +jm +jm +jm +aT +jm +jm +pt +PX +PX +pt +mf +jm +gY +gY +jm +jm +jm +jm +jm +jm +pt +pt +pt +jm +jm +jm +jm +jm +pt +pt +PX +pt +RM +RM +"} +(42,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +DD +kb +kb +pt +jm +aT +kb +kb +pt +pt +pt +yl +PX +pt +DD +kb +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +kb +kb +DD +DD +kb +kb +kb +kb +kb +DD +pt +jm +jm +jm +pt +pt +PX +pt +DD +DD +DD +DD +DD +mf +mf +pt +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +pt +PX +pt +PX +pt +pt +pt +jm +pt +jm +jm +jm +jm +jm +pt +pt +PX +pt +mf +jm +gY +gY +jm +jm +jm +pt +pt +jm +pt +PX +pt +pt +pt +pt +pt +jm +pt +pt +pt +pt +RM +RM +"} +(43,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +DD +jm +kb +kb +kb +jm +kb +kb +pt +pt +PX +PX +pt +pt +DD +kb +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +kb +kb +DD +DD +DD +DD +DD +kb +kb +DD +kb +jm +jm +jm +pt +pt +pt +pt +DD +DD +DD +DD +DD +mf +mf +pt +pt +PX +pt +pt +jm +jm +jm +jm +pt +pt +jm +mf +mf +mf +mf +mf +mf +mf +mf +mf +pt +PX +pt +PX +pt +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +pt +mf +jm +pt +gY +gY +jm +pt +jm +jm +jm +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +RM +RM +"} +(44,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +DD +DD +jm +aT +jm +jm +jm +kb +kb +pt +pt +PX +pt +pt +pt +DD +kb +pt +pt +yl +pt +pt +PX +pt +pt +pt +kb +kb +kb +pt +kb +kb +kb +DD +DD +DD +kb +kb +kb +DD +jm +aT +pt +jm +pt +PX +pt +pt +DD +DD +DD +mf +mf +pt +pt +PX +pt +pt +pt +pt +jm +pt +jm +pt +pt +pt +jm +mf +jm +jm +jm +pt +aT +jm +jm +jm +jm +pt +pt +pt +pt +pt +jm +jm +jm +pt +jm +jm +jm +jm +jm +jm +aT +jm +pt +PX +pt +mf +jm +pt +jm +gY +jm +jm +jm +jm +pt +pt +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +PX +RM +RM +"} +(45,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +pt +DD +DD +DD +DD +DD +DD +DD +pt +pt +pt +PX +PX +PX +pt +yl +kb +kb +kb +kb +kb +kb +kb +kb +kb +kb +kb +kb +kb +kb +kb +kb +kb +kb +DD +kb +kb +kb +pt +DD +pt +pt +jm +jm +pt +PX +pt +pt +DD +DD +DD +mf +mf +pt +pt +pt +pt +pt +PX +pt +mf +mf +mf +mf +mf +mf +mf +pt +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +RM +RM +RM +RM +RM +gY +gY +jm +jm +pt +pt +pt +pt +jm +pt +jm +jm +aT +jm +jm +pt +pt +pt +RM +RM +"} +(46,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +pt +pt +kb +kb +kb +yl +jm +DD +pt +pt +pt +yl +pt +PX +pt +DD +DD +DD +DD +kb +DD +DD +DD +DD +kb +kb +pt +pt +pt +pt +pt +pt +pt +pt +DD +kb +kb +pt +pt +DD +pt +PX +pt +jm +pt +pt +pt +pt +DD +DD +DD +mf +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +pt +pt +pt +pt +pt +pt +jm +jm +pt +pt +pt +pt +pt +pt +jm +jm +jm +pt +pt +jm +jm +jm +mb +mb +mb +jm +jm +jm +jm +yd +GO +yd +GO +yd +mf +gY +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +rD +rD +RM +RM +"} +(47,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +pt +pt +jm +aT +kb +jm +jm +DD +pt +pt +pt +PX +pt +yl +pt +DD +DD +DD +DD +DD +DD +DD +DD +yl +kb +pt +pt +PX +PX +PX +PX +pt +pt +pt +DD +pt +pt +pt +pt +DD +pt +PX +pt +jm +pt +pt +DD +DD +DD +DD +DD +mf +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +pt +pt +PX +pt +pt +pt +jm +aT +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +pt +jm +jm +jm +mb +mb +mb +mb +mb +jm +pt +jm +mf +gY +mf +mf +mf +gY +gY +jm +pt +pt +pt +pt +jm +jm +jm +jm +jm +jm +rD +rD +rD +rD +RM +RM +"} +(48,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +pt +pt +kb +kb +kb +kb +kb +DD +jm +yl +pt +PX +PX +pt +pt +DD +DD +DD +DD +kb +kb +DD +kb +kb +pt +pt +pt +PX +PX +pt +PX +pt +pt +pt +DD +pt +PX +PX +pt +DD +pt +PX +pt +jm +pt +pt +DD +DD +DD +DD +mf +mf +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +PX +PX +pt +jm +pt +pt +pt +pt +pt +pt +jm +jm +pt +pt +PX +pt +PX +jm +jm +jm +jm +jm +jm +jm +jm +jm +mb +mb +mb +mb +mb +jm +pt +jm +mf +mf +gY +mf +mf +jm +gY +jm +jm +jm +jm +pt +pt +pt +jm +jm +jm +jm +rD +rD +rD +rD +RM +RM +"} +(49,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +pt +pt +kb +yl +pt +kb +kb +DD +jm +pt +pt +pt +pt +pt +yl +kb +kb +DD +kb +kb +kb +DD +pt +pt +pt +PX +PX +pt +PX +pt +PX +PX +pt +pt +DD +pt +PX +PX +pt +DD +pt +PX +pt +jm +pt +pt +DD +DD +DD +DD +mf +pt +pt +PX +pt +PX +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +jm +jm +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +jm +jm +jm +mb +mb +mb +mb +jm +jm +jm +jm +jm +jm +mf +mf +gY +mf +jm +gY +gY +jm +jm +jm +jm +jm +aT +jm +jm +jm +jm +rD +jm +rD +rD +RM +RM +"} +(50,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +pt +DD +pt +jm +jm +pt +pt +PX +pt +pt +kb +kb +kb +yl +kb +DD +pt +pt +yl +PX +pt +pt +yl +PX +pt +PX +pt +pt +DD +pt +PX +PX +pt +DD +pt +pt +jm +aT +pt +pt +DD +DD +mf +mf +mf +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +rD +jm +mf +mf +gY +gY +gY +jm +gY +jm +jm +jm +jm +jm +jm +jm +jm +jm +rD +rD +jm +rD +rD +RM +RM +"} +(51,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +DD +jm +jm +jm +pt +PX +pt +pt +PX +pt +yl +pt +pt +pt +DD +pt +pt +pt +PX +PX +PX +PX +PX +PX +pt +pt +pt +DD +pt +pt +pt +pt +DD +pt +jm +jm +jm +pt +pt +DD +DD +mf +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +rD +rD +jm +gY +gY +mf +gY +gY +jm +gY +jm +pt +pt +rD +jm +jm +rD +rD +rD +rD +jm +rD +rD +RM +RM +"} +(52,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +pt +pt +DD +pt +PX +PX +pt +DD +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +DD +pt +pt +pt +pt +pt +PX +PX +pt +PX +pt +pt +pt +DD +pt +DD +DD +DD +DD +pt +pt +pt +jm +mf +mf +DD +DD +mf +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +PX +PX +pt +pt +pt +pt +pt +jm +jm +pt +pt +pt +PX +pt +pt +PX +pt +pt +pt +pt +PX +pt +PX +PX +rD +rD +rD +pt +rD +rD +rD +rD +rD +jm +gY +gY +gY +gY +gY +gY +jm +rD +rD +rD +jm +jm +rD +rD +rD +jm +jm +rD +rD +RM +RM +"} +(53,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +yl +pt +DD +DD +DD +DD +DD +DD +DD +DD +pt +pt +pt +pt +pt +pt +pt +pt +pt +yl +pt +DD +pt +pt +pt +pt +pt +PX +PX +pt +PX +pt +pt +pt +DD +pt +DD +DD +DD +DD +pt +jm +jm +jm +mf +mf +DD +DD +pt +pt +pt +PX +PX +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +pt +jm +pt +pt +PX +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +rD +rD +pt +pt +pt +rD +rD +rD +rD +rD +gY +gY +gY +gY +jm +gY +gY +jm +rD +rD +jm +jm +rD +rD +rD +jm +jm +rD +rD +RM +RM +"} +(54,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +DD +DD +DD +DD +DD +pt +pt +pt +pt +pt +pt +PX +PX +pt +pt +DD +pt +pt +pt +yl +pt +pt +pt +pt +pt +DD +pt +DD +DD +DD +DD +DD +DD +DD +pt +jm +jm +jm +mf +mf +DD +DD +pt +pt +pt +pt +pt +pt +PX +PX +pt +pt +pt +PX +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +pt +PX +pt +pt +PX +pt +pt +PX +pt +pt +pt +PX +pt +PX +pt +pt +rD +jm +jm +jm +jm +pt +rD +rD +rD +rD +gY +gY +gY +gY +rD +rD +gY +jm +jm +rD +jm +jm +rD +rD +rD +jm +jm +rD +rD +RM +RM +"} +(55,1,2) = {" +RM +RM +yl +pt +pt +pt +pt +pt +pt +pt +pt +yl +pt +pt +pt +pt +pt +DD +DD +DD +DD +pt +pt +pt +pt +yl +pt +pt +DD +pt +pt +pt +pt +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +mf +pt +DD +DD +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +jm +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +rD +pt +jm +pt +pt +jm +jm +pt +rD +rD +rD +jm +gY +gY +gY +jm +jm +gY +jm +jm +rD +pt +jm +rD +rD +rD +jm +aT +rD +rD +RM +RM +"} +(56,1,2) = {" +RM +RM +pt +pt +pt +yl +pt +pt +pt +yl +pt +PX +PX +PX +PX +pt +pt +pt +DD +DD +nQ +DD +DD +DD +pt +pt +pt +pt +DD +pt +pt +DD +DD +pt +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +pt +pt +PX +pt +pt +PX +pt +jm +jm +jm +jm +jm +pt +pt +pt +rD +pt +pt +pt +pt +pt +jm +pt +rD +pt +pt +jm +jm +gY +gY +aT +jm +gY +gY +jm +rD +rD +jm +rD +jm +jm +jm +jm +rD +rD +RM +RM +"} +(57,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +pt +pt +DD +pt +PX +Ty +Ty +Ty +PX +DD +DD +pt +pt +nQ +nQ +DD +DD +DD +DD +pt +pt +DD +pt +pt +pt +pt +yl +pt +pt +DD +DD +DD +DD +DD +DD +jm +jm +jm +DD +DD +pt +DD +DD +DD +DD +DD +DD +DD +RM +RM +RM +RM +RM +RM +RM +pt +PX +pt +pt +pt +pt +pt +PX +pt +PX +pt +pt +PX +pt +PX +pt +pt +pt +jm +jm +pt +pt +PX +pt +pt +jm +jm +jm +jm +jm +aT +jm +pt +PX +rD +pt +jm +jm +jm +jm +jm +jm +jm +pt +pt +jm +jm +gY +gY +gY +jm +jm +gY +jm +rD +rD +jm +rD +jm +jm +jm +jm +rD +rD +RM +RM +"} +(58,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +pt +pt +DD +Ty +Ty +Ty +Ty +Ty +PX +pt +DD +Ty +Ty +Ty +Ty +tQ +Ty +Ty +pt +DD +pt +DD +pt +pt +pt +pt +pt +pt +DD +DD +DD +pt +pt +pt +pt +pt +jm +jm +jm +pt +pt +pt +DD +DD +DD +DD +DD +DD +DD +DD +DD +RM +RM +RM +RM +pt +pt +pt +pt +PX +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +PX +PX +pt +jm +jm +pt +pt +pt +pt +pt +jm +jm +aT +jm +jm +jm +jm +jm +pt +rD +pt +pt +jm +jm +pt +jm +jm +pt +pt +pt +aT +jm +gY +gY +gY +gY +jm +gY +gY +rD +rD +jm +rD +jm +jm +jm +jm +rD +rD +RM +RM +"} +(59,1,2) = {" +RM +RM +pt +yl +pt +pt +pt +pt +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +DD +DD +nQ +DD +DD +DD +DD +DD +DD +DD +DD +pt +pt +jm +pt +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +pt +DD +DD +DD +DD +DD +RM +RM +RM +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +jm +jm +pt +rD +pt +pt +pt +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +gY +gY +gY +jm +gY +gY +gY +jm +jm +rD +jm +jm +jm +jm +rD +rD +RM +RM +"} +(60,1,2) = {" +RM +RM +pt +pt +pt +pt +pt +pt +pt +Ty +DD +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +DD +nQ +DD +DD +DD +DD +DD +DD +DD +pt +pt +jm +pt +jm +jm +pt +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +DD +DD +DD +DD +DD +DD +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +pt +pt +pt +mf +jm +jm +EB +mf +mf +mf +mf +mf +mf +mf +jm +EB +jm +jm +pt +pt +pt +pt +jm +mf +jm +pt +jm +jm +jm +jm +jm +jm +jm +jm +gY +gY +gY +sI +gY +gY +gY +gY +gY +jm +jm +jm +jm +rD +rD +RM +RM +"} +(61,1,2) = {" +RM +RM +pt +pt +pt +yl +pt +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +nQ +nQ +DD +DD +jm +DD +pt +pt +pt +pt +jm +pt +jm +jm +jm +jm +jm +pt +jm +jm +jm +jm +pt +PX +pt +pt +pt +pt +DD +DD +DD +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +pt +pt +jm +mf +jm +jm +jm +mf +mf +mf +jm +jm +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +jm +pt +jm +pt +jm +jm +jm +aT +jm +jm +gY +gY +gY +gY +jm +jm +gY +jm +gY +gY +jm +jm +jm +rD +rD +RM +RM +"} +(62,1,2) = {" +RM +RM +pt +pt +pt +pt +RM +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +DD +DD +kb +jm +kb +pt +pt +pt +pt +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +PX +pt +pt +DD +DD +DD +DD +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +jm +jm +jm +pt +jm +jm +jm +pt +pt +pt +mf +mf +mf +mf +mf +mf +mf +mf +jm +jm +jm +jm +jm +pt +jm +jm +pt +pt +rD +rD +pt +jm +jm +jm +jm +jm +jm +gY +jm +jm +aT +jm +gY +gY +mf +gY +rD +jm +jm +rD +rD +RM +RM +"} +(63,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +pt +pt +pt +pt +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +nQ +jm +yl +pt +yl +pt +pt +jm +jm +jm +pt +jm +jm +jm +aT +jm +jm +jm +jm +jm +pt +pt +pt +pt +PX +pt +pt +RM +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +mf +mf +mf +mf +mf +mf +mf +mf +jm +jm +jm +jm +jm +jm +pt +jm +pt +rD +rD +pt +jm +jm +jm +jm +jm +jm +jm +mf +gY +jm +rD +rD +rD +gY +gY +mf +rD +rD +RM +RM +RM +RM +RM +"} +(64,1,2) = {" +RM +RM +RM +RM +RM +RM +Ty +Ty +Ty +Ty +Ty +Ty +Ty +pt +pt +pt +pt +pt +pt +pt +yl +PX +pt +PX +PX +Ty +Ty +Ty +Ty +Ty +Ty +DD +kb +pt +pt +kb +kb +kb +kb +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +mf +mf +mf +pt +pt +pt +pt +mf +mf +mf +mf +mf +mf +mf +mf +EB +mf +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +jm +mf +jm +jm +jm +jm +jm +mf +mf +mf +mf +mf +mf +mf +mf +mf +jm +EB +pt +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +aT +jm +jm +gY +gY +jm +rD +rD +rD +gY +mf +mf +Xq +rD +RM +RM +RM +RM +RM +"} +(65,1,2) = {" +RM +RM +RM +RM +RM +RM +Ty +Ty +Ty +Ty +Ty +Ty +RM +pt +RM +pt +RM +yl +RM +PX +RM +pt +pt +RM +RM +yl +pt +Ty +Ty +Ty +Ty +Ty +jm +kb +jm +jm +kb +yl +kb +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +mf +mf +mf +mf +mf +pt +pt +PX +pt +pt +RM +jm +jm +jm +jm +jm +jm +mf +jm +jm +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +pt +pt +pt +pt +rD +rD +rD +rD +rD +jm +jm +jm +jm +jm +gY +gY +jm +YV +rD +rD +rD +mf +mf +mf +Xq +RM +RM +RM +RM +RM +"} +(66,1,2) = {" +RM +RM +RM +RM +RM +RM +Ty +Ty +Ty +Ty +Ty +Ty +pt +pt +pt +yl +PX +pt +pt +pt +pt +pt +pt +pt +pt +RM +pt +pt +Ty +Ty +Ty +Ty +jm +jm +jm +jm +kb +kb +kb +pt +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +mf +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +mf +jm +jm +pt +pt +pt +PX +pt +pt +pt +PX +PX +pt +PX +pt +pt +pt +pt +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +pt +pt +pt +rD +rD +rD +rD +jm +jm +jm +jm +jm +gY +gY +gY +NM +NM +NM +rD +mf +mf +mf +mf +RM +RM +RM +RM +RM +"} +(67,1,2) = {" +RM +RM +RM +RM +RM +RM +Ty +Ty +Ty +pt +pt +pt +PX +RM +RM +RM +pt +pt +yl +yl +yl +yl +kb +pt +pt +pt +RM +pt +pt +Ty +Ty +Ty +jm +kb +yl +jm +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +mf +pt +pt +PX +PX +pt +pt +pt +pt +PX +pt +pt +jm +jm +jm +jm +jm +mf +mf +mf +mf +mf +mf +pt +pt +pt +PX +PX +pt +pt +pt +PX +PX +pt +pt +pt +mf +mf +EB +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +pt +pt +mf +rD +rD +rD +mf +mf +jm +jm +aT +gY +gY +gY +Vz +eL +eL +ma +mf +mf +mf +mf +mf +RM +RM +RM +RM +"} +(68,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +Ty +pt +pt +yl +pt +RM +pt +yl +pt +yl +yl +kb +kb +kb +yl +yl +kb +pt +pt +pt +yl +pt +Ty +Ty +Ty +Ty +kb +jm +kb +pt +pt +yl +pt +pt +jm +pt +pt +pt +pt +PX +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +jm +jm +jm +jm +mf +mf +mf +mf +mf +mf +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +mf +mf +mf +mf +mf +mf +mf +mf +mf +pt +pt +pt +pt +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +gY +gY +Vz +eL +eL +ma +mf +mf +mf +mf +mf +RM +RM +RM +RM +"} +(69,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +pt +PX +RM +pt +RM +yl +yl +yl +yl +kb +kb +jm +jm +kb +yl +yl +yl +pt +PX +pt +pt +Ty +Ty +Ty +Ty +pt +pt +kb +pt +pt +PX +pt +pt +pt +PX +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +jm +jm +fU +aT +pt +PX +pt +pt +PX +pt +jm +jm +jm +jm +jm +mf +jm +jm +jm +pt +pt +PX +pt +pt +pt +pt +pt +PX +pt +pt +PX +pt +mf +mf +pt +pt +mf +mf +mf +EB +mf +mf +pt +pt +pt +PX +pt +pt +pt +mf +mf +rD +rD +mf +mf +EB +mf +mf +mf +lH +gY +gY +Vz +eL +eL +ma +mf +mf +mf +mf +mf +RM +RM +RM +RM +"} +(70,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +yl +RM +pt +PX +pt +yl +yl +yl +kb +kb +jm +jm +jm +jm +jm +yl +jm +yl +jm +jm +pt +pt +Ty +Ty +Ty +PX +pt +PX +yl +pt +yl +PX +jm +jm +pt +pt +PX +pt +pt +pt +fU +pt +aT +fU +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +aT +mf +jm +jm +jm +pt +pt +PX +PX +pt +PX +PX +pt +pt +pt +pt +pt +mf +mf +mf +pt +pt +pt +pt +mf +pt +pt +pt +PX +PX +pt +pt +pt +pt +pt +rD +rD +rD +rD +mf +pt +mf +mf +mf +mf +mf +gY +gY +Vz +eL +eL +ma +mf +mf +gY +mf +mf +RM +RM +RM +RM +"} +(71,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +pt +pt +pt +yl +yl +yl +kb +kb +kb +jm +kb +kb +kb +jm +jm +jm +yl +yl +yl +jm +jm +pt +Ty +Ty +Ty +pt +pt +pt +pt +PX +pt +jm +jm +jm +jm +pt +pt +pt +aT +jm +jm +fU +Bx +jm +jm +fU +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +mf +jm +jm +jm +pt +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +pt +mf +mf +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +rD +rD +rD +rD +rD +rD +pt +mf +mf +pt +mf +pt +mf +gY +mf +Sz +LD +LD +tL +mf +gY +mf +mf +RM +RM +RM +RM +RM +"} +(72,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +yl +yl +yl +yl +yl +kb +yl +jm +jm +jm +jm +kb +kb +jm +jm +jm +yl +yl +yl +yl +jm +jm +yl +jm +jm +jm +jm +jm +jm +jm +jm +yl +jm +jm +jm +jm +jm +jm +jm +fU +jm +fU +PX +jm +jm +aT +pt +pt +pt +pt +pt +pt +PX +pt +pt +jm +jm +jm +jm +jm +mf +jm +jm +jm +jm +jm +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +mf +pt +pt +PX +pt +PX +pt +pt +PX +pt +pt +pt +PX +pt +PX +pt +rD +rD +rD +rD +rD +rD +pt +PX +pt +pt +rD +rD +rD +gY +gY +gY +gY +Xq +mf +mf +gY +mf +mf +RM +RM +RM +RM +RM +"} +(73,1,2) = {" +RM +RM +RM +RM +RM +xV +xV +xV +xV +kb +kb +kb +kb +kb +jm +jm +jm +jm +jm +yl +kb +jm +jm +jm +yl +jm +yl +yl +jm +jm +jm +jm +jm +jm +jm +jm +yl +jm +jm +jm +jm +pt +jm +jm +jm +jm +jm +aT +pt +pt +PX +pt +pt +PX +pt +PX +pt +PX +pt +PX +PX +pt +pt +jm +jm +jm +jm +jm +mf +jm +aT +jm +pt +jm +pt +PX +pt +pt +PX +PX +PX +pt +pt +mf +mf +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +rD +rD +rD +gY +gY +gY +gY +rD +mf +gY +gY +Xq +mf +RM +RM +RM +RM +RM +"} +(74,1,2) = {" +RM +RM +RM +uE +KM +KM +pM +KS +KS +Hk +Hk +jm +kb +kb +jm +jm +kb +Hk +Hk +jm +jm +jm +kb +jm +jm +yl +yl +jm +jm +yl +Ty +Ty +Ty +PX +pt +pt +PX +PX +pt +jm +pt +pt +jm +jm +jm +jm +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +mf +jm +jm +jm +pt +pt +pt +PX +pt +pt +pt +pt +pt +EB +mf +mf +mf +pt +PX +pt +PX +pt +PX +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +PX +pt +rD +rD +jm +jm +aT +jm +jm +rD +rD +rD +rD +gY +gY +gY +gY +mf +gY +mf +rD +Xq +RM +RM +RM +RM +RM +"} +(75,1,2) = {" +RM +RM +RM +KM +eL +vA +KS +KS +KS +kb +Hk +Hk +jm +Hk +jm +jm +Hk +Hk +Hk +jm +jm +jm +kb +jm +yl +jm +yl +pt +PX +pt +Ty +Ty +Ty +PX +pt +PX +PX +yl +pt +pt +pt +pt +pt +jm +jm +jm +pt +pt +pt +pt +PX +PX +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +mf +EB +mf +mf +mf +mf +jm +jm +pt +pt +pt +pt +pt +pt +PX +pt +pt +mf +mf +mf +mf +mf +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +pt +pt +pt +rD +jm +jm +jm +jm +jm +jm +pt +pt +pt +pt +gY +gY +gY +gY +gY +gY +Xq +rD +rD +rD +pt +pt +RM +RM +"} +(76,1,2) = {" +RM +RM +RM +KM +eL +vA +KS +KS +KS +kb +kb +Hk +Hk +Hk +jm +kb +kb +Hk +Hk +kb +jm +yl +kb +jm +yl +yl +yl +pt +yl +pt +Ty +Ty +Ty +pt +pt +yl +Ty +Ty +kb +yl +kb +jm +jm +jm +jm +jm +jm +pt +pt +pt +pt +pt +pt +PX +pt +pt +PX +pt +pt +PX +pt +pt +pt +mf +mf +mf +jm +pt +pt +jm +jm +pt +pt +jm +pt +PX +pt +pt +pt +mf +mf +mf +DD +mf +mf +mf +mf +pt +pt +PX +pt +pt +PX +pt +pt +PX +PX +PX +pt +pt +rD +rD +rD +rD +jm +jm +jm +DD +jm +jm +jm +aT +jm +jm +jm +gY +jm +jm +gY +mf +rD +rD +rD +rD +pt +pt +RM +RM +"} +(77,1,2) = {" +RM +RM +RM +uE +KM +KM +pM +KS +KS +Hk +Hk +Hk +kb +yl +jm +jm +kb +kb +kb +kb +kb +kb +kb +jm +yl +yl +pt +pt +RM +Ty +Ty +Ty +Ty +pt +pt +pt +pt +Ty +kb +kb +jm +aT +jm +jm +jm +jm +jm +pt +PX +PX +pt +PX +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +mf +jm +jm +jm +jm +jm +jm +jm +pt +pt +jm +pt +pt +PX +pt +pt +mf +mf +DD +DD +DD +DD +mf +mf +mf +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +rD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +tM +tM +jm +jm +gY +gY +jm +rD +rD +rD +pt +pt +pt +RM +RM +"} +(78,1,2) = {" +RM +RM +RM +RM +RM +xV +xV +xV +xV +kb +kb +kb +kb +kb +jm +jm +jm +jm +kb +kb +kb +kb +jm +jm +yl +yl +pt +RM +pt +Ty +Ty +Ty +Ty +pt +pt +kb +jm +kb +yl +kb +jm +Bx +jm +jm +jm +jm +jm +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +mf +jm +jm +jm +jm +jm +pt +pt +pt +pt +pt +pt +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +jm +jm +DD +DD +DD +DD +DD +DD +DD +It +eW +gY +gY +rD +rD +rD +pt +pt +pt +pt +RM +RM +"} +(79,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +yl +yl +yl +yl +yl +yl +kb +kb +kb +yl +jm +kb +jm +jm +jm +jm +jm +PX +pt +yl +pt +Ty +Ty +Ty +Ty +jm +pt +jm +kb +kb +pt +jm +aT +jm +jm +jm +jm +jm +jm +pt +pt +pt +pt +pt +pt +PX +pt +pt +PX +pt +pt +pt +pt +pt +pt +mf +jm +jm +jm +jm +pt +pt +pt +pt +pt +pt +pt +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +jm +aT +jm +jm +jm +jm +DD +DD +DD +DD +eW +eW +eW +dZ +rD +rD +pt +pt +pt +pt +pt +RM +RM +"} +(80,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +pt +yl +pt +yl +yl +kb +jm +kb +kb +jm +jm +jm +jm +yl +yl +yl +pt +PX +pt +PX +Ty +Ty +Ty +Ty +kb +jm +kb +Ty +Ty +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +mf +mf +mf +mf +jm +jm +jm +jm +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +mf +mf +mf +mf +mf +aT +jm +jm +DD +DD +DD +It +eW +LG +DD +DD +DD +DD +DD +DD +DD +jm +RM +RM +"} +(81,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +yl +pt +pt +pt +pt +yl +kb +jm +kb +jm +jm +jm +yl +yl +yl +yl +pt +pt +yl +Ty +Ty +Ty +Ty +Ty +Ty +tQ +jm +mX +kb +kb +DD +DD +DD +DD +jm +jm +jm +jm +jm +jm +jm +jm +RM +pt +pt +pt +pt +pt +pt +pt +mf +mf +mf +mf +mf +jm +jm +jm +jm +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +mf +mf +mf +pt +pt +pt +PX +pt +pt +pt +jm +jm +EB +mf +rD +rD +jm +jm +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +It +eW +eW +DD +DD +DD +DD +jm +DD +jm +jm +RM +RM +"} +(82,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +yl +pt +pt +yl +yl +kb +jm +kb +kb +kb +yl +pt +pt +pt +yl +RM +pt +Ty +Ty +Ty +Ty +Ty +nQ +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +jm +jm +jm +jm +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +DD +DD +mf +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +mf +mf +pt +pt +pt +PX +pt +pt +pt +jm +jm +jm +pt +mf +jm +pt +pt +jm +jm +jm +jm +jm +jm +jm +jm +mf +jm +jm +jm +jm +jm +jm +It +eW +LG +DD +DD +DD +jm +DD +DD +jm +pt +RM +RM +"} +(83,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +pt +pt +RM +pt +yl +pt +yl +yl +kb +kb +yl +yl +yl +pt +PX +pt +RM +Ty +Ty +Ty +Ty +Ty +Ty +Ty +DD +DD +DD +DD +DD +nQ +DD +DD +DD +DD +DD +DD +jm +jm +jm +jm +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +mf +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +mf +mf +mf +mf +mf +mf +mf +pt +pt +PX +pt +jm +jm +pt +jm +jm +jm +pt +pt +mf +jm +jm +pt +aT +jm +jm +jm +jm +jm +jm +jm +mf +jm +jm +jm +rD +pt +aT +jm +eW +LG +DD +DD +DD +pt +pt +pt +pt +pt +RM +RM +"} +(84,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +pt +yl +pt +RM +PX +pt +pt +yl +yl +yl +pt +pt +pt +pt +yl +RM +Ty +Ty +Ty +Ty +Ty +Ty +Ty +nQ +pt +DD +DD +pt +DD +nQ +DD +DD +DD +DD +DD +DD +DD +jm +jm +mf +mf +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +jm +jm +aT +mf +mf +mf +EB +EB +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +rD +rD +rD +rD +rD +pt +aT +mf +jm +jm +rD +rD +rD +jm +jm +gY +gY +rD +rD +pt +pt +pt +pt +PX +pt +RM +RM +"} +(85,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +pt +RM +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +RM +pt +pt +Ty +Ty +Ty +Ty +Ty +Ty +DD +DD +pt +pt +pt +DD +DD +nQ +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +PX +pt +PX +pt +PX +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +rD +rD +rD +rD +rD +rD +rD +mf +mf +mf +gY +gY +rD +rD +pt +pt +pt +pt +pt +pt +RM +RM +"} +(86,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +pt +pt +yl +pt +pt +pt +RM +PX +yl +RM +pt +PX +PX +RM +pt +Ty +Ty +Ty +Ty +Ty +Ty +DD +DD +DD +pt +pt +pt +pt +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +DD +DD +DD +DD +DD +DD +DD +DD +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +PX +pt +pt +pt +rD +mf +mf +gY +gY +gY +gY +rD +rD +pt +pt +pt +pt +pt +pt +RM +RM +"} +(87,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +pt +pt +pt +pt +PX +RM +pt +pt +pt +pt +pt +yl +pt +pt +pt +Ty +Ty +Ty +Ty +Ty +DD +DD +DD +pt +pt +PX +PX +pt +pt +pt +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +jm +jm +jm +pt +pt +pt +jm +jm +pt +jm +jm +jm +jm +jm +mf +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +jm +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +PX +pt +PX +PX +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +rD +rD +mf +gY +gY +gY +gY +gY +rD +rD +pt +PX +pt +pt +pt +pt +RM +RM +"} +(88,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +Ty +Ty +Ty +pt +pt +yl +pt +RM +pt +PX +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +nQ +DD +DD +DD +pt +PX +pt +pt +pt +pt +pt +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +mf +jm +jm +jm +jm +jm +jm +jm +jm +pt +PX +pt +pt +pt +PX +PX +pt +pt +PX +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +rD +rD +mf +gY +gY +gY +mf +rD +rD +rD +pt +pt +pt +pt +pt +pt +pt +RM +RM +"} +(89,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +pt +Ty +Ty +Ty +Ty +pt +pt +pt +pt +RM +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +DD +DD +DD +DD +pt +pt +pt +pt +pt +PX +yl +pt +pt +pt +DD +DD +DD +DD +DD +DD +DD +DD +DD +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +mf +mf +EB +mf +mf +mf +mf +jm +pt +pt +pt +pt +PX +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +PX +pt +PX +pt +pt +pt +PX +pt +PX +pt +pt +PX +pt +pt +rD +rD +mf +gY +gY +gY +mf +mf +rD +pt +pt +pt +pt +pt +PX +pt +pt +pt +RM +RM +"} +(90,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +pt +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +DD +nQ +DD +DD +DD +pt +pt +pt +pt +PX +PX +pt +pt +PX +pt +pt +DD +DD +DD +DD +DD +DD +DD +pt +pt +PX +pt +pt +pt +pt +PX +PX +pt +pt +pt +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +PX +pt +pt +PX +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +PX +pt +pt +pt +pt +rD +mf +mf +gY +gY +mf +rD +rD +rD +pt +pt +pt +pt +pt +pt +pt +PX +pt +RM +RM +"} +(91,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +DD +DD +DD +DD +DD +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +DD +DD +DD +DD +DD +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +PX +pt +pt +PX +pt +pt +pt +pt +pt +PX +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +rD +rD +rD +rD +mf +gY +gY +gY +EB +rD +rD +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +RM +RM +"} +(92,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +DD +nQ +nQ +DD +DD +DD +DD +pt +pt +PX +pt +pt +PX +pt +PX +pt +PX +pt +pt +pt +pt +kb +kb +kb +kb +pt +pt +pt +pt +pt +PX +pt +PX +PX +pt +pt +pt +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +pt +pt +rD +rD +pt +rD +mf +mf +gY +gY +gY +gY +mf +mf +rD +rD +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +RM +RM +"} +(93,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +DD +DD +DD +DD +DD +DD +DD +pt +pt +pt +PX +PX +pt +PX +PX +pt +pt +pt +pt +pt +kb +kb +kb +DD +DD +DD +pt +pt +PX +pt +PX +pt +pt +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +jm +jm +pt +pt +PX +pt +pt +pt +pt +pt +pt +PX +PX +pt +pt +pt +pt +PX +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +PX +pt +rD +rD +rD +rD +mf +mf +gY +gY +gY +mf +rD +rD +rD +pt +PX +pt +pt +PX +pt +pt +pt +pt +pt +pt +RM +RM +"} +(94,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +Ty +nQ +DD +nQ +Ty +DD +nQ +DD +DD +DD +DD +DD +DD +pt +pt +pt +PX +yl +pt +pt +pt +pt +pt +pt +pt +kb +kb +DD +DD +DD +pt +DD +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +jm +jm +jm +jm +aT +jm +jm +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +rD +rD +rD +rD +gY +gY +gY +gY +gY +EB +mf +rD +rD +pt +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +pt +RM +RM +"} +(95,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +DD +DD +Ty +DD +nQ +DD +Ty +Ty +Ty +Ty +Ty +Ty +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +pt +pt +pt +pt +pt +pt +yl +PX +PX +pt +kb +kb +kb +pt +DD +DD +DD +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +jm +jm +jm +jm +Ku +Ku +Ku +Ku +Ku +Ku +Ku +Ku +Ku +Ku +HO +HO +HO +oc +oc +oc +xO +oc +oc +oc +HO +HO +HO +HO +HO +Ku +HC +HC +HC +HC +HC +HC +Ku +Ku +Ku +rD +mf +mf +gY +gY +gY +gY +mf +mf +rD +rD +pt +pt +pt +PX +pt +pt +pt +pt +pt +PX +pt +pt +pt +RM +RM +"} +(96,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +nQ +DD +nQ +DD +DD +DD +Ty +Ty +Ty +DD +nQ +Ty +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +pt +pt +pt +pt +pt +pt +kb +kb +kb +pt +pt +kb +pt +kb +kb +pt +DD +DD +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +Ku +Ku +Ku +Ku +Ku +eF +Ku +Ku +Ku +Ku +HO +HO +oc +oc +xO +oc +xO +oc +oc +oc +HO +HO +HO +hv +HO +HC +HC +Ku +HC +HC +HC +Ku +HC +Ku +Ku +pt +gY +mf +gY +gY +gY +mf +mf +rD +rD +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +RM +RM +"} +(97,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +DD +DD +DD +DD +nQ +DD +tQ +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +pt +jm +jm +pt +kb +yl +kb +kb +pt +pt +kb +pt +pt +PX +pt +pt +pt +DD +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +Ku +Ku +Ku +Ku +Ku +Ku +Ku +Ku +Ku +eF +HO +oc +oc +oc +oc +xO +oc +oc +oc +ZM +HU +HO +HO +HO +HC +Ku +HC +HC +HC +HC +Ku +HC +HC +HC +Ku +mf +gY +gY +gY +gY +mf +mf +rD +rD +pt +pt +pt +PX +pt +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +RM +RM +"} +(98,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +DD +nQ +DD +DD +DD +DD +DD +DD +nQ +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +pt +jm +jm +pt +jm +kb +kb +jm +kb +pt +pt +kb +pt +PX +PX +PX +pt +pt +DD +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +jm +jm +jm +jm +Ku +Ku +oc +Ku +Ku +Ku +Ku +Ku +Ku +mL +zH +oc +oc +xO +oc +oc +oc +HO +HO +ZM +HO +vr +HO +HO +HC +Ku +HC +HC +HC +HC +Ku +HC +Ku +HC +Ku +gY +gY +mf +mf +mf +mf +rD +rD +pt +pt +pt +pt +pt +pt +PX +pt +PX +pt +pt +pt +pt +pt +pt +pt +RM +RM +"} +(99,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +DD +DD +DD +DD +DD +DD +DD +nQ +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +pt +kb +kb +kb +kb +kb +kb +kb +jm +kb +pt +kb +pt +PX +pt +pt +PX +pt +pt +pt +pt +PX +pt +PX +PX +pt +pt +pt +PX +pt +pt +jm +jm +jm +jm +Ku +Ku +oc +CV +Ku +Ku +Ku +Ku +Ku +Ku +Ig +oc +xO +oc +oc +oc +HO +HO +HO +ZM +HO +HO +HC +HC +HO +HC +HC +HC +oc +Ku +HC +Ku +ji +HC +Ku +mf +mf +mf +mf +EB +rD +rD +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +RM +RM +"} +(100,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +pt +DD +pt +kb +yl +kb +yl +kb +yl +jm +kb +kb +jm +kb +pt +pt +pt +PX +pt +pt +pt +pt +pt +PX +PX +pt +pt +pt +PX +pt +pt +pt +pt +jm +jm +jm +jm +Ku +Ku +oc +oc +Ku +mL +Ku +Ku +Ku +zH +oc +oc +oc +oc +oc +oc +rN +HO +lS +ZM +ZJ +HC +HC +HO +HC +HC +Ku +Ku +oc +oc +Ku +Ku +Ku +zH +Ku +mf +mf +mf +rD +rD +rD +pt +pt +pt +pt +pt +PX +pt +PX +pt +pt +pt +PX +pt +pt +pt +pt +PX +pt +RM +RM +"} +(101,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +pt +pt +pt +kb +kb +kb +kb +kb +kb +kb +kb +pt +jm +kb +pt +pt +pt +pt +pt +PX +pt +pt +PX +pt +PX +pt +pt +pt +PX +pt +pt +pt +pt +jm +jm +aT +jm +eF +Ku +oc +oc +oc +Ku +Ku +Ku +Ku +Ku +oc +oc +oc +oc +oc +NL +Np +HO +HO +dl +Mn +HC +HO +HC +HC +Ku +Ku +zH +zH +oc +zH +Ku +Ku +oc +oc +mf +rD +rD +rD +rD +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +RM +RM +"} +(102,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +pt +pt +pt +pt +jm +jm +kb +jm +kb +kb +kb +jm +jm +pt +kb +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +PX +pt +pt +pt +pt +pt +pt +jm +jm +jm +jm +Ku +oc +xO +xO +oc +Ku +Ku +Ku +Ku +Ku +oc +oc +oc +oc +oc +HO +gx +HO +HO +Ei +HO +HO +HC +HC +HO +Ku +Ku +zH +Ku +oc +oc +Ku +zH +oc +xO +rD +rD +pt +pt +pt +pt +pt +PX +pt +PX +pt +PX +pt +pt +pt +PX +pt +PX +pt +pt +pt +pt +pt +pt +RM +RM +"} +(103,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +pt +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +pt +pt +DD +pt +pt +kb +kb +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +jm +Ku +oc +xO +oc +oc +oc +Ku +CV +mL +Ku +dl +HO +HO +ZJ +HO +HO +HO +HC +EK +Cl +HC +HO +HC +HO +HO +Ku +zH +Ku +Ku +oc +oc +zH +oc +oc +oc +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +PX +pt +pt +PX +pt +pt +RM +RM +"} +(104,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +pt +pt +pt +pt +yl +kb +yl +jm +kb +yl +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +pt +jm +jm +jm +jm +jm +oc +oc +oc +oc +xO +oc +oc +zH +Ku +Ku +JM +HO +HO +HO +HO +HC +HO +HC +HC +cI +HC +HC +HO +HO +HO +Ku +zH +Ku +CV +oc +oc +zH +oc +oc +oc +pt +pt +pt +PX +pt +pt +PX +pt +PX +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +RM +RM +"} +(105,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +pt +pt +DD +DD +pt +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +pt +pt +pt +pt +pt +kb +kb +kb +jm +jm +jm +jm +kb +kb +pt +pt +pt +jm +jm +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +jm +jm +jm +jm +oc +oc +xO +oc +xO +oc +oc +oc +Ku +dl +ZM +HO +HO +HO +HO +HO +HO +HO +HO +TW +ZE +HO +HO +HO +HO +Ku +zH +Ku +Ku +oc +oc +oc +oc +xO +oc +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +RM +RM +"} +(106,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +pt +pt +pt +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +pt +pt +DD +pt +pt +kb +kb +kb +jm +jm +jm +pt +kb +kb +pt +pt +pt +pt +pt +pt +pt +DD +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +DD +DD +DD +DD +DD +oc +xO +oc +oc +oc +oc +xO +oc +oc +Ku +HO +HO +td +HO +HO +HO +HO +HO +HO +Xa +HO +rN +HO +HO +zH +zH +Ku +Ku +Ku +Ku +oc +oc +oc +xO +oc +pt +pt +pt +mf +pt +pt +pt +PX +pt +pt +mf +jm +pt +pt +PX +pt +PX +pt +pt +PX +pt +PX +pt +pt +RM +RM +"} +(107,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +mf +mf +mf +RM +RM +RM +RM +pt +yl +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +Ku +Ku +Ku +oc +oc +oc +oc +xO +oc +Jm +HO +HO +ky +HO +HO +FC +HO +ZE +pV +td +HO +HO +HO +HO +zH +zH +Ku +xy +oc +oc +oc +xO +oc +xO +oc +pt +pt +pt +mf +pt +pt +pt +pt +pt +pt +mf +jm +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +PX +pt +RM +RM +"} +(108,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +mf +mf +RM +RM +RM +RM +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +Ku +Ku +Ku +Ku +Ku +Ku +oc +oc +oc +Ku +HO +ez +NC +LF +wE +hs +wE +NC +ez +ez +aQ +aQ +aQ +NC +iC +Ku +Ku +oc +oc +oc +xO +oc +xO +oc +xO +pt +pt +pt +EB +pt +pt +pt +pt +pt +pt +mf +jm +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +RM +RM +"} +(109,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +mf +mf +RM +RM +RM +RM +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +Ku +mL +Ku +Ku +Ku +Ku +Ku +Jk +Jk +Ku +HO +ez +Fv +Sj +hs +wE +VD +ig +ez +jy +jy +jy +jy +jy +ea +JK +Ku +oc +oc +oc +oc +xO +oc +oc +oc +Ii +Ii +Ii +Sd +jm +jm +jm +jm +pt +jm +mf +pt +pt +pt +pt +pt +pt +PX +pt +PX +pt +pt +pt +pt +RM +RM +"} +(110,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +PX +PX +PX +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +jm +jm +jm +jm +jm +Ku +Ku +Ku +Ku +Ku +eF +Ku +Jk +Ku +Ku +QU +ez +Uf +Sj +Sj +kG +YR +nA +ez +oj +jy +jy +jy +jy +Oh +Ku +Ku +Ku +oc +oc +oc +xO +oc +xO +oc +jm +jm +jm +mf +mf +mf +mf +EB +mf +mf +mf +jm +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +RM +RM +"} +(111,1,2) = {" +RM +RM +RM +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +PX +pt +PX +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +jm +aT +jm +jm +jm +Ku +Ku +Ku +Ku +Ku +Ku +Ku +fn +Ku +Ku +sj +ez +Iy +eZ +Sj +hs +OO +IM +jy +jy +mu +mu +tc +jy +ea +Ku +Ku +Jm +oc +oc +oc +oc +oc +oc +oc +jm +jm +jm +jm +jm +mf +jm +jm +jm +jm +jm +jm +pt +pt +pt +pt +pt +pt +PX +pt +pt +PX +pt +pt +RM +RM +"} +(112,1,2) = {" +RM +RM +RM +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +Ku +Ku +eF +Ku +Ku +Ku +Ku +fn +Ku +kI +td +VO +DA +hs +wE +Sj +Sj +pO +rY +LF +mu +IL +mu +jy +ea +Ku +Ku +Ku +Ku +Ku +zH +oc +xO +oc +xO +jm +jm +jm +jm +jm +mf +jm +jm +pt +pt +jm +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +RM +RM +"} +(113,1,2) = {" +RM +RM +RM +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +Ku +Ku +mL +Ku +Ku +Ku +Ku +Jk +Ku +Ku +td +NC +RD +hs +wE +Sj +wE +wE +ez +jy +mu +mu +mu +jy +Oh +Ku +Ku +Ku +Ku +Ku +Ku +zH +oc +oc +xO +jm +pt +pt +pt +pt +mf +jm +pt +pt +pt +jm +pt +pt +pt +PX +pt +pt +PX +pt +pt +pt +jm +pt +pt +RM +RM +"} +(114,1,2) = {" +RM +RM +RM +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +PX +PX +pt +pt +PX +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +Ku +Ku +Ku +Ku +Ku +Ku +Ku +Jk +Ku +Ku +td +ez +oS +wE +wE +wE +NC +ez +ez +jy +jy +jy +jy +jy +ea +Ku +Ku +Ku +Ku +Ku +Ku +Ku +zH +zH +zH +aT +pt +PX +pt +pt +EB +jm +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +DD +jm +jm +RM +RM +"} +(115,1,2) = {" +RM +RM +RM +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +PX +PX +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +PX +pt +pt +pt +PX +pt +pt +PX +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +pt +pt +jm +jm +aT +jm +jm +Ku +Ku +Ku +eF +Ku +Ku +Ku +Jk +Jm +Ku +td +ez +VO +jy +jy +jy +ez +jy +nE +jy +jy +jy +jy +jy +ea +Ku +Ku +Ku +Ku +Ku +eF +Ku +Ku +Ku +zH +jm +pt +PX +PX +pt +mf +jm +pt +pt +pt +PX +PX +PX +PX +PX +pt +pt +pt +pt +DD +DD +DD +jm +pt +RM +RM +"} +(116,1,2) = {" +RM +RM +RM +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +PX +PX +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +Ku +Ku +Ku +Ku +Ku +oc +oc +oc +td +Ku +td +ez +ez +jy +LF +mu +ez +OW +Rt +mu +mu +jy +jy +jy +Oh +Ku +Ku +Ku +Ku +Ku +Ku +Ku +eF +Ku +Ku +pt +pt +PX +PX +pt +mf +jm +pt +PX +PX +PX +PX +PX +PX +pt +pt +pt +DD +DD +DD +pt +pt +pt +pt +RM +RM +"} +(117,1,2) = {" +RM +RM +RM +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +jm +jm +jm +jm +jm +Ku +Ku +Ku +Ku +Ku +oc +xO +xO +td +Ku +td +td +td +HO +HO +HO +HC +HC +HO +HO +HC +HO +HO +Jk +ZM +xy +Ku +Ku +mL +Ku +Ku +Ku +Ku +Ku +Ku +pt +pt +pt +pt +pt +mf +jm +pt +PX +pt +pt +pt +pt +pt +pt +DD +DD +DD +pt +pt +pt +pt +pt +pt +RM +RM +"} +(118,1,2) = {" +RM +RM +RM +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +jm +mb +mb +Ku +Ku +Ku +Ku +oc +oc +xO +xO +td +Ku +HO +HO +Bv +Np +rN +HO +HO +HC +HC +HC +HC +HC +HC +mi +HO +Ku +Ku +Ku +Ku +Ku +Ku +mL +Ku +Ku +Ku +jm +pt +jm +jm +jm +EB +jm +pt +pt +pt +jm +jm +jm +jm +DD +DD +pt +pt +pt +pt +pt +PX +pt +PX +RM +RM +"} +(119,1,2) = {" +RM +RM +RM +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +PX +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +PX +pt +pt +pt +PX +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +jm +jm +Ku +Ku +Ku +oc +xO +xO +oc +oc +td +zH +HO +yC +Bs +yC +Bs +HO +HO +HO +HO +HC +HC +rN +HC +cI +HC +HC +Ku +Ku +Ku +Ku +Ku +Ku +Ku +Ku +Ku +jm +jm +jm +jm +jm +mf +pt +jm +jm +jm +DD +DD +DD +DD +DD +pt +pt +pt +pt +PX +pt +pt +pt +pt +RM +RM +"} +(120,1,2) = {" +RM +RM +RM +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +PX +PX +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +jm +jm +Ku +Ku +oc +xO +xO +oc +zH +zH +Jk +Ku +Ku +Bs +td +Bs +HO +HO +HO +HO +HO +HO +HC +HC +HC +zL +HO +HC +HC +Ku +Ku +eF +Ku +Ku +eF +Ku +Ku +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +DD +jm +jm +pt +jm +pt +pt +PX +pt +PX +pt +pt +pt +pt +RM +RM +"} +(121,1,2) = {" +RM +RM +RM +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +PX +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +pt +pt +pt +pt +PX +pt +PX +pt +pt +pt +pt +PX +pt +pt +pt +pt +PX +PX +PX +pt +PX +pt +pt +pt +pt +jm +jm +Ku +oc +oc +oc +oc +zH +Ku +Ku +Ku +mL +Jk +td +td +td +td +td +zH +ZJ +gx +HO +HO +Jk +Jk +Jk +HC +HC +HC +HC +Ku +Ku +Ku +Ku +Ku +Ku +Ku +jm +jm +jm +jm +jm +jm +pt +pt +jm +jm +jm +pt +PX +PX +PX +PX +PX +pt +PX +PX +PX +PX +pt +pt +RM +RM +"} +(122,1,2) = {" +RM +RM +RM +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +PX +pt +pt +PX +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +aT +oc +oc +xO +oc +Ku +Ku +Ku +Ku +eF +Ku +oc +oc +oc +oc +xO +oc +oc +oc +HO +zH +oc +oc +HO +KZ +HO +HC +HC +HC +HC +mL +Ku +Ku +Ku +Ku +Ku +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +PX +PX +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +RM +RM +"} +(123,1,2) = {" +RM +RM +RM +pt +pt +PX +PX +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +PX +pt +pt +jm +oc +xO +oc +Ku +Ku +Ku +mL +Ku +Ku +zH +oc +oc +xO +xO +xO +oc +oc +oc +oc +oc +oc +oc +HO +HC +HO +HC +HC +HC +HC +HC +HC +Ku +Ku +eF +Ku +jm +jm +jm +jm +jm +jm +jm +jm +jm +pt +pt +pt +PX +pt +PX +PX +pt +PX +PX +PX +pt +pt +PX +pt +RM +RM +"} +(124,1,2) = {" +RM +RM +RM +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +jm +oc +oc +Ku +Ku +Ku +Ku +Ku +Ku +zH +oc +oc +oc +xO +xO +oc +oc +xO +oc +oc +oc +oc +oc +hv +HO +HO +Ku +HC +HC +HC +HC +Ku +Ku +Ku +Ku +Ku +jm +jm +jm +jm +jm +pt +jm +jm +jm +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +RM +RM +"} +(125,1,2) = {" +RM +RM +RM +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +rD +Xq +Xq +Xq +Xq +jm +jm +jm +pt +pt +pt +PX +pt +pt +PX +pt +PX +pt +PX +PX +PX +pt +pt +pt +PX +pt +pt +RM +RM +"} +(126,1,2) = {" +RM +RM +RM +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +PX +PX +PX +pt +PX +pt +pt +PX +pt +pt +PX +pt +PX +PX +pt +PX +pt +PX +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +PX +PX +pt +PX +pt +PX +pt +pt +pt +pt +PX +pt +PX +pt +PX +RM +RM +"} +(127,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +pt +pt +PX +pt +pt +pt +pt +PX +pt +pt +PX +pt +PX +pt +pt +PX +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +pt +RM +RM +"} +(128,1,2) = {" +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +RM +"} + +(1,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +gV +"} +(2,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +Xw +"} +(3,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(4,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(5,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +Qf +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(6,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +HI +HI +yD +yD +yD +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +yD +yD +yD +yD +yD +yD +yD +yD +HI +HI +HI +HI +HI +yD +yD +HI +ra +ra +ra +ra +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(7,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +HI +yD +yD +yD +HI +HI +HI +WP +WP +WP +WP +WP +WP +WP +HI +HI +HI +yD +yD +yD +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +ra +ra +ra +ra +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(8,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +yD +yD +HI +HI +HI +WP +WP +WP +WP +WP +WP +WP +WP +WP +WP +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +ra +ra +ra +ra +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(9,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +ra +ra +yD +HI +HI +HI +WP +WP +WP +WP +WP +WP +WP +WP +WP +WP +WP +WP +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +ra +ra +ra +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(10,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +ra +kX +HI +HI +HI +WP +WP +WP +WP +WP +WP +WP +WP +WP +WP +WP +WP +WP +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +tz +ra +ra +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(11,1,3) = {" +tz +tz +tz +Qf +Qf +kX +kX +Qf +Qf +Qf +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +HI +HI +HI +WP +WP +WP +HI +HI +HI +HI +HI +HI +WP +WP +WP +WP +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +tz +ra +ra +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(12,1,3) = {" +tz +tz +tz +Qf +Qf +kX +kX +Qf +Qf +Qf +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +HI +HI +HI +WP +WP +WP +HI +HI +HI +HI +yD +yD +yD +WP +WP +WP +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +tz +ra +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(13,1,3) = {" +tz +tz +tz +Qf +Qf +kX +Qf +Qf +Qf +Qf +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +HI +HI +HI +WP +WP +WP +HI +HI +HI +yD +yD +iB +yD +WP +WP +WP +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +ra +ra +Qf +Qf +Xm +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(14,1,3) = {" +tz +tz +tz +Qf +Qf +kX +kX +Qf +Qf +Qf +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +kX +HI +HI +HI +WP +WP +WP +WP +HI +HI +yD +yD +yD +yD +WP +WP +WP +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +tz +ra +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(15,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +kX +Qf +Qf +Qf +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +kX +HI +HI +HI +HI +WP +WP +WP +HI +HI +HI +yD +yD +yD +WP +WP +WP +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +ra +ra +Qf +Qf +Xm +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(16,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +kX +HI +HI +HI +HI +WP +WP +WP +HI +HI +HI +HI +HI +yD +yD +WP +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +ra +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(17,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +kX +HI +HI +HI +HI +HI +WP +WP +WP +HI +HI +HI +HI +yD +yD +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +ra +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(18,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +kX +Qf +kX +HI +HI +HI +HI +HI +HI +WP +WP +yD +yD +yD +yD +yD +yD +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +Qf +ra +Qf +Qf +Xm +Xm +Qf +Xm +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(19,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +kX +Qf +kX +HI +HI +HI +HI +HI +HI +HI +yD +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +ra +ra +Qf +Qf +Qf +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(20,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +kX +Qf +Qf +kX +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +qB +ra +Qf +Qf +Qf +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(21,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +kX +kX +Qf +kX +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +ra +qB +Qf +Qf +Qf +Qf +Xm +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(22,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +kX +kX +Qf +kX +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +ra +ra +qB +qB +Qf +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(23,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +kX +kX +Qf +Qf +kX +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +ra +ra +qB +qB +Qf +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(24,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +kX +kX +Qf +kX +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +zU +ra +qB +qB +Qf +Qf +Qf +Qf +Xm +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(25,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +Qf +kX +Qf +Qf +kX +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +zU +zU +qB +qB +qB +Qf +Qf +Xm +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(26,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +kX +kX +kX +kX +kX +kX +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +kX +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +zU +zU +ra +qB +qB +qB +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(27,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +kX +Qf +Qf +kX +kX +kX +kX +kX +kX +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +kX +Qf +kX +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +WP +WP +WP +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +zU +zU +ra +ra +qB +qB +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(28,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +Qf +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +WP +WP +WP +WP +WP +WP +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +zU +zU +ra +ra +ra +qB +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(29,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +Qf +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +WP +WP +WP +WP +WP +WP +WP +WP +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +zU +zU +ra +ra +ra +qB +qB +Qf +Xm +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(30,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +WP +WP +WP +WP +WP +WP +WP +WP +WP +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +zU +zU +ra +ra +ra +qB +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(31,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +kX +Qf +Qf +Qf +Qf +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +Qf +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +WP +WP +WP +WP +WP +WP +WP +WP +WP +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +ra +zU +ra +ra +ra +qB +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(32,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +Qf +Qf +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +WP +WP +WP +WP +WP +WP +WP +WP +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +ra +zU +ra +ra +ra +qB +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(33,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +Qf +Qf +Qf +Qf +kX +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +WP +WP +WP +WP +WP +WP +WP +WP +WP +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +zU +zU +ra +ra +ra +Qf +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(34,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +WP +HI +WP +WP +WP +WP +WP +WP +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +ra +zU +ra +ra +ra +Qf +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(35,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +kX +kX +kX +ra +zU +ra +ra +ra +Qf +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(36,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +HI +WP +WP +WP +kX +kX +ra +ra +zU +ra +ra +ra +Qf +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(37,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +kX +ra +zU +zU +ra +ra +ra +Qf +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(38,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +zU +zU +ra +ra +ra +Qf +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(39,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Xm +Qf +Qf +Qf +kX +kX +kX +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +zU +Vh +Vh +ra +ra +Qf +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(40,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +tz +tz +kX +kX +kX +tz +tz +tz +Qf +Qf +Qf +Qf +tz +tz +tz +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +zU +zU +Vh +Vh +Vh +ra +Qf +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(41,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +tz +tz +kX +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +zU +Vh +Vh +Vh +Vh +Vh +Vh +Qf +qB +Qf +Qf +tz +tz +tz +tz +tz +Xm +Qf +Xm +Xm +Xm +Xm +Xm +tz +tz +tz +"} +(42,1,3) = {" +tz +tz +tz +Qf +Qf +Xm +Qf +Qf +tz +tz +tz +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Xm +Qf +Qf +Qf +kX +kX +Qf +Qf +Qf +kX +Qf +Qf +zU +zU +Vh +Vh +Vh +Vh +Vh +Vh +Qf +qB +qB +Qf +tz +tz +tz +tz +tz +Xm +Qf +Xm +Xm +Xm +tz +tz +tz +tz +tz +"} +(43,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +zU +zU +Vh +Vh +zU +zU +Vh +zU +zU +Qf +qB +qB +Qf +tz +tz +tz +tz +tz +Xm +Qf +Xm +Xm +Xm +tz +tz +tz +tz +tz +"} +(44,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Xm +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +zU +Vh +Vh +zU +zU +zU +zU +zU +zU +zU +zU +zU +qB +Qf +tz +tz +tz +tz +tz +Xm +Xm +Xm +Xm +Xm +Xm +Xm +tz +tz +tz +"} +(45,1,3) = {" +tz +tz +tz +Qf +Qf +Xm +Xm +Xm +Xm +Xm +Xm +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Xm +Qf +Qf +Qf +Xm +Qf +Qf +Xm +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +zU +Vh +zU +zU +gU +gU +gU +gU +gU +ra +zU +zU +qB +Qf +tz +tz +tz +tz +tz +Xm +Xm +Xm +Xm +Xm +tz +tz +tz +tz +tz +"} +(46,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +tz +Qf +tz +Qf +tz +tz +tz +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Xm +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Xm +Qf +zU +zU +Vh +zU +tz +kX +kX +kX +kX +kX +tz +zU +zU +qB +Qf +tz +tz +tz +tz +tz +tz +Xm +Xm +Xm +Xm +tz +tz +tz +tz +tz +"} +(47,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +zU +Vh +Vh +zU +tz +kX +kX +kX +kX +kX +tz +zU +zU +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(48,1,3) = {" +tz +tz +tz +Qf +Qf +Xm +tz +tz +tz +tz +Qf +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Xm +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +ra +qB +qB +qB +qB +Qf +Qf +Qf +ra +ra +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +ra +Qf +Qf +Qf +Qf +Qf +Qf +Qf +zU +Vh +zU +ra +tz +tz +tz +tz +tz +tz +tz +zU +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(49,1,3) = {" +tz +tz +tz +Qf +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +qB +qB +ra +ra +ra +ra +qB +ra +qB +ra +qB +qB +qB +ra +ra +Qf +qB +qB +qB +qB +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +qB +qB +ra +ra +qB +qB +qB +qB +qB +qB +qB +ra +Qf +zU +Vh +zU +ra +ra +tz +tz +tz +tz +tz +ra +zU +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(50,1,3) = {" +tz +tz +tz +tz +tz +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +ra +ra +qB +ra +ra +ra +ra +ra +ra +qB +ra +qB +qB +ra +qB +ra +qB +qB +qB +ra +ra +ra +qB +qB +qB +qB +qB +ra +ra +qB +qB +ra +ra +ra +ra +ra +ra +ra +ra +qB +qB +qB +qB +qB +ra +ra +ra +ra +qB +ra +ra +ra +ra +qB +qB +qB +Qf +zU +zU +Vh +ra +ra +ra +ra +ra +ra +qB +qB +qB +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(51,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +ra +qB +qB +qB +ra +ra +qB +ra +ra +qB +qB +ra +ra +ra +qB +ra +ra +ra +ra +ra +ra +ra +qB +qB +ra +ra +ra +ra +ra +ra +ra +ra +qB +qB +qB +qB +qB +qB +qB +qB +qB +ra +ra +ra +ra +Qf +Qf +Qf +Qf +Qf +ra +ra +ra +ra +ra +ra +qB +qB +zU +Vh +Vh +qB +qB +qB +qB +qB +qB +ra +qB +qB +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(52,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Xm +Qf +pk +Qf +Qf +Qf +Qf +Qf +zU +zU +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +Qf +qB +Qf +ra +qB +qB +qB +qB +ra +ra +ra +ra +Qf +ra +Qf +Qf +Qf +Qf +ra +ra +qB +qB +qB +ra +ra +Qf +ra +qB +qB +qB +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +ra +ra +ra +ra +ra +ra +zU +Vh +zU +qB +qB +qB +qB +qB +ra +qB +qB +qB +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(53,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +pk +pk +pk +Qf +Qf +zU +zU +zU +qB +qB +ra +ra +ra +qB +qB +ra +ra +ra +ra +qB +qB +qB +qB +ra +ra +qB +ra +ra +qB +ra +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +ra +ra +qB +ra +ra +ra +qB +Qf +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Vh +Vh +zU +CW +Zs +Vh +zU +zU +qB +qB +ra +qB +qB +ra +ra +qB +qB +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(54,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +pk +pk +pk +pk +Qf +zU +zU +zU +ra +qB +qB +qB +qB +ra +ra +qB +qB +qB +qB +qB +qB +qB +ra +ra +ra +ra +qB +ra +ra +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +ra +qB +ra +ra +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Vh +Vh +Vh +Vh +zU +zU +Vh +Vh +Vh +zU +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(55,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +pk +pk +pk +zU +zU +ra +qB +qB +qB +qB +ra +Qf +ra +Qf +ra +ra +ra +ra +ra +ra +ra +Qf +ra +ra +ra +ra +Qf +Qf +Qf +Qf +qB +qB +qB +qB +qB +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +ra +qB +ra +Qf +Qf +Qf +Qf +qB +Qf +qB +qB +qB +qB +qB +qB +qB +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +Qf +Qf +Qf +Qf +Vh +Vh +Vh +Vh +Vh +zU +zU +Vh +Vh +Vh +Vh +Vh +zU +ra +qB +qB +ra +qB +qB +qB +qB +qB +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(56,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +zU +pk +pk +pk +zU +qB +ra +ra +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +Qf +ra +ra +ra +ra +ra +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +qB +qB +qB +qB +qB +qB +Qf +Qf +Qf +Qf +ra +ra +ra +ra +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +qB +qB +qB +qB +qB +qB +Qf +Qf +Qf +Qf +qB +qB +qB +qB +qB +Qf +zU +zU +Vh +Vh +zU +zU +zU +zU +zU +zU +Vh +Vh +Vh +Vh +qB +qB +qB +qB +qB +qB +qB +qB +ra +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(57,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +zU +zU +pk +pk +pk +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +ra +ra +ra +ra +Vh +Vh +Vh +Vh +Vh +Vh +zU +Vh +zU +zU +zU +zU +zU +zU +Vh +oG +Zs +ra +qB +qB +qB +qB +ra +qB +qB +ra +qB +ra +Qf +Xm +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(58,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +zU +zU +zU +zU +zs +zs +zs +Vh +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +Vh +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +Vh +Vh +Vh +Vh +Vh +Vh +Vh +Vh +zU +ra +zU +zU +ra +ra +ra +pk +pk +pk +pk +pk +pk +pk +qB +qB +qB +ra +qB +qB +qB +qB +qB +qB +ra +Qf +Qf +Xm +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(59,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +zU +zU +zU +zU +zU +TG +TG +TG +qB +Vh +qB +Vh +qB +Vh +qB +Vh +Vh +Vh +Vh +Vh +Vh +Vh +qB +qB +Vh +Vh +Vh +Vh +Vh +qB +zU +Vh +qB +Vh +Vh +zU +zU +Vh +Vh +zU +Vh +Vh +qB +Vh +zU +Vh +qB +Vh +qB +qB +qB +Vh +qB +Vh +Vh +Vh +Vh +Vh +qB +Vh +Vh +Vh +Vh +Vh +Vh +Vh +Vh +Vh +zU +Vh +Vh +ra +ra +ra +zU +ra +ra +ra +ra +pk +pk +pk +pk +pk +pk +pk +qB +ra +qB +qB +qB +qB +qB +ra +qB +qB +qB +qB +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(60,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +zU +zU +zU +zU +zU +zU +zU +DZ +DZ +DZ +zU +zU +zU +Vh +zU +Vh +Vh +zU +Vh +Vh +zU +qB +zU +zU +zU +zU +Vh +Vh +zU +zU +Vh +Vh +zU +Vh +Vh +zU +Vh +zU +Vh +Vh +zU +qB +Vh +Vh +qB +qB +Vh +zU +zU +Vh +zU +Vh +qB +qB +qB +Vh +Vh +zU +qB +zU +zU +zU +Vh +zU +Vh +zU +zU +zU +zU +zU +zU +zU +zU +zU +zU +ra +ra +ra +ra +pk +pk +pk +ra +ra +ra +ra +ra +ra +ra +ra +ra +qB +qB +qB +qB +qB +qB +qB +qB +qB +Qf +Qf +Qf +Xm +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(61,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +zU +zU +zU +zU +zU +zU +zU +zU +pk +pk +pk +zU +zU +zU +zU +zU +zU +zU +zU +zU +zU +zU +zU +zU +zU +Vh +Vh +zU +qB +zU +qB +zU +zU +zU +zU +zU +zU +zU +zU +Vh +Vh +zU +zU +zU +Vh +zU +zU +zU +qB +zU +qB +zU +zU +zU +zU +zU +zU +zU +zU +qB +zU +Vh +zU +zU +zU +zU +zU +zU +zU +zU +zU +ra +ra +ra +ra +ra +ra +ra +pk +pk +pk +pk +ra +ra +ra +ra +Qf +Qf +Qf +ra +ra +ra +qB +qB +qB +qB +qB +qB +qB +qB +qB +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(62,1,3) = {" +tz +tz +tz +Qf +Qf +Xm +Qf +Qf +zU +zU +zU +Qf +Qf +zU +zU +zU +pk +pk +pk +qB +qB +qB +qB +qB +qB +zU +zU +zU +zU +zU +zU +zU +zU +zU +zU +qB +zU +zU +zU +zU +zU +qB +qB +zU +qB +zU +zU +zU +zU +zU +zU +qB +qB +zU +zU +qB +zU +zU +zU +zU +qB +qB +qB +zU +qB +zU +zU +zU +zU +qB +zU +qB +zU +zU +zU +zU +zU +zU +ra +ra +ra +ra +ra +ra +ra +pk +pk +pk +ra +ra +ra +Qf +ra +ra +ra +ra +ra +ra +ra +ra +qB +qB +qB +qB +qB +ra +qB +qB +qB +Qf +Qf +Xm +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(63,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +zU +zU +zU +Qf +Qf +Qf +Qf +Qf +Qf +pk +pk +pk +qB +qB +zU +zU +zU +zU +zU +qB +qB +qB +qB +qB +qB +qB +qB +qB +zU +zU +zU +qB +zU +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +zU +qB +qB +qB +qB +zU +qB +qB +qB +zU +zU +zU +zU +ra +ra +ra +ra +ra +ra +pk +pk +pk +pk +ra +ra +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +ra +qB +qB +qB +qB +qB +qB +qB +ra +qB +Qf +Qf +Xm +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(64,1,3) = {" +tz +tz +tz +Qf +Xm +Qf +zU +zU +zU +Qf +Qf +Xm +Qf +Qf +Qf +Qf +pk +pk +pk +qB +qB +zU +qB +zU +zU +zU +zU +zU +qB +qB +zU +qB +qB +qB +qB +qB +qB +qB +zU +zU +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +zU +zU +zU +zU +qB +zU +qB +zU +zU +zU +zU +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +ra +ra +ra +ra +pk +pk +pk +pk +pk +ra +ra +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +ra +ra +qB +qB +qB +qB +qB +qB +qB +qB +qB +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(65,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +zU +zU +Qf +Qf +Qf +Qf +Qf +Qf +pk +pk +pk +pk +pk +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +zU +zU +zU +qB +qB +zU +zU +zU +qB +qB +zU +zU +zU +qB +zU +zU +qB +zU +qB +zU +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +ra +ra +ra +pk +pk +pk +pk +pk +ra +ra +Qf +Qf +Qf +Xm +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +qB +qB +qB +qB +qB +qB +qB +qB +qB +Qf +Qf +Xm +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(66,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +pk +Qf +pk +pk +pk +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +pk +pk +pk +pk +pk +pk +ra +ra +ra +Qf +Xm +Xm +Qf +Qf +Qf +Qf +Qf +Xm +Xm +Xm +Qf +Qf +qB +qB +qB +qB +ra +ra +kX +ra +qB +qB +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(67,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +pk +pk +pk +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +pk +pk +pk +pk +pk +pk +ra +ra +ra +Qf +Qf +Xm +Xm +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +qB +qB +ra +ra +ra +kX +ra +qB +qB +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(68,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Xm +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +pk +pk +pk +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +pk +pk +pk +pk +pk +pk +ra +ra +Qf +ra +Qf +Qf +Qf +Qf +Qf +qB +qB +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +ra +ra +ra +ra +ra +ra +kX +ra +qB +qB +Qf +Xm +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(69,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +pk +pk +pk +Qf +Xm +Qf +Qf +pk +pk +Qf +qB +qB +qB +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +qB +qB +pk +pk +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +Qf +zU +zU +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +ra +ra +ra +ra +kX +kX +ra +ra +qB +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(70,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Xm +Qf +Qf +pk +pk +pk +pk +Qf +Qf +Qf +Xm +pk +pk +Qf +qB +qB +qB +Qf +Xm +Xm +Xm +Xm +Xm +Xm +Xm +Qf +qB +qB +qB +qB +pk +pk +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +Qf +qB +fu +zU +zU +zU +zU +zU +zU +zU +zU +zU +zU +zU +zU +zU +Qf +Qf +Qf +Xm +Qf +ra +ra +kX +kX +kX +kX +kX +kX +kX +ra +ra +qB +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(71,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +wX +qB +Qf +Qf +Qf +Xm +Xm +Xm +Xm +Xm +Xm +Xm +Qf +qB +qB +qB +qB +pk +pk +pk +qB +qB +qB +qB +qB +qB +qB +qB +qB +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +qB +qB +qB +Qf +Xm +Xm +Qf +Qf +Qf +Qf +qB +qB +zU +Qf +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +zU +Qf +Qf +Qf +Xm +Qf +ra +ra +qB +kX +kX +kX +kX +kX +kX +kX +ra +qB +Qf +Qf +Xm +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(72,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +wX +qB +Qf +Qf +Qf +Xm +Qf +Xm +Xm +Xm +Xm +Xm +Qf +qB +qB +qB +qB +pk +pk +pk +qB +qB +qB +qB +qB +qB +qB +qB +zU +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +zU +zU +pk +pk +qB +qB +qB +qB +qB +qB +qB +qB +qB +Qf +Qf +Qf +qB +qB +qB +qB +zU +Qf +Qf +Qf +Qf +Qf +Xm +Xm +Qf +Qf +Qf +qB +zU +Qf +Qf +Xm +Qf +Qf +ra +ra +qB +qB +kX +kX +kX +kX +kX +kX +qB +qB +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(73,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +wX +qB +Qf +Qf +Qf +Xm +Xm +Xm +Xm +Xm +Xm +Xm +Qf +qB +qB +qB +qB +pk +pk +pk +pk +qB +qB +qB +qB +qB +qB +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +Qf +Qf +Qf +qB +Qf +qB +qB +qB +qB +qB +qB +Qf +qB +fu +qB +Qf +qB +qB +qB +qB +zU +Qf +Qf +Xm +Xm +Xm +Xm +Xm +Qf +Qf +qB +qB +qB +Qf +Qf +Qf +Qf +ra +ra +ra +qB +qB +kX +kX +kX +kX +kX +ra +qB +qB +Qf +Qf +Xm +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(74,1,3) = {" +tz +tz +tz +Qf +Qf +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +wX +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +qB +pk +pk +pk +pk +qB +qB +qB +qB +qB +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +Qf +Xm +Qf +Qf +Qf +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +Xm +Xm +Xm +Xm +Xm +Qf +Qf +Qf +Qf +Qf +qB +Qf +qB +Qf +Qf +Qf +Qf +ra +zU +ra +qB +kX +kX +kX +kX +kX +kX +ra +qB +ra +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(75,1,3) = {" +tz +tz +tz +Qf +Qf +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +wX +qB +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +qB +qB +pk +pk +pk +pk +pk +qB +pk +pk +pk +pk +qB +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +Qf +Qf +Qf +Qf +qB +qB +qB +qB +Qf +Qf +qB +zU +zU +zU +zU +zU +zU +zU +zU +zU +Xm +Xm +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +Qf +Qf +Qf +Qf +ra +zU +ra +qB +kX +kX +kX +kX +kX +kX +ra +ra +qB +Qf +Xm +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(76,1,3) = {" +tz +tz +tz +Qf +Qf +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +wX +qB +qB +qB +Qf +Qf +Qf +Qf +qB +qB +qB +qB +qB +qB +qB +qB +qB +pk +pk +pk +pk +pk +pk +pk +qB +pk +qB +qB +qB +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +Qf +Qf +Xm +Qf +qB +Qf +qB +Qf +Qf +Qf +qB +zU +qB +qB +qB +Qf +fu +qB +qB +qB +qB +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +Qf +qB +qB +qB +Qf +Qf +Qf +Rb +ra +ra +zU +qB +kX +kX +kX +kX +kX +kX +ra +qB +qB +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(77,1,3) = {" +tz +tz +tz +Qf +Qf +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +pk +pk +pk +pk +pk +pk +pk +pk +qB +qB +qB +qB +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +Qf +Qf +Qf +Qf +zU +zU +zU +zU +zU +zU +zU +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +Qf +qB +qB +qB +qB +qB +Qf +Qf +Qf +Qf +Qf +Qf +zU +qB +qB +kX +kX +kX +kX +kX +ra +qB +qB +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(78,1,3) = {" +tz +tz +tz +Qf +Qf +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +qB +Qf +qB +qB +Qf +pk +pk +pk +pk +pk +pk +pk +pk +qB +qB +qB +qB +qB +qB +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +Qf +Qf +qB +qB +qB +qB +qB +Qf +Qf +Qf +Qf +Qf +qB +qB +kX +kX +kX +kX +kX +ra +ra +qB +Qf +Qf +Xm +Xm +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(79,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +qB +qB +qB +qB +qB +qB +qB +qB +qB +Qf +Qf +Qf +Qf +pk +pk +Qf +pk +pk +pk +qB +pk +pk +pk +qB +qB +qB +qB +qB +qB +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +qB +Qf +Qf +Qf +Qf +Xm +Qf +qB +fu +Qf +Qf +Qf +Xm +Qf +qB +qB +qB +qB +qB +Qf +qB +qB +qB +kX +qB +qB +Qf +Qf +Qf +Qf +qB +kX +kX +kX +kX +kX +kX +ra +ra +qB +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(80,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +qB +qB +qB +qB +qB +qB +qB +qB +qB +Qf +Qf +pk +pk +pk +pk +Qf +Qf +Qf +pk +qB +qB +qB +qB +qB +qB +qB +pk +qB +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Xm +qB +Qf +Qf +Xm +Qf +Qf +Qf +qB +qB +Qf +Xm +Qf +Qf +Qf +qB +qB +qB +qB +qB +qB +qB +qB +qB +kX +kX +qB +qB +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +ra +ra +qB +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(81,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +wX +pk +pk +wX +pk +pk +Qf +Qf +pk +pk +pk +pk +pk +pk +Qf +Xm +Qf +Qf +pk +qB +qB +qB +qB +qB +qB +qB +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +kX +kX +kX +kX +qB +qB +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +ra +ra +qB +qB +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(82,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +pk +pk +pk +pk +pk +Qf +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +Qf +pk +Qf +Qf +Xm +Xm +Qf +Qf +pk +qB +qB +qB +qB +qB +qB +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +qB +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +qB +qB +qB +qB +qB +qB +kX +kX +qB +qB +Qf +kX +kX +kX +kX +kX +kX +kX +ra +ra +qB +qB +qB +ra +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(83,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +pk +pk +pk +pk +Qf +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +Qf +Qf +Qf +Qf +Xm +Qf +Xm +Qf +pk +pk +qB +qB +qB +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +Qf +qB +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +kX +kX +qB +qB +qB +kX +kX +kX +kX +kX +kX +kX +ra +ra +ra +qB +qB +qB +Qf +Qf +Xm +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(84,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +pk +pk +pk +pk +pk +tz +tz +pk +pk +Qf +pk +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Xm +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +pk +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Xm +Qf +Qf +qB +qB +qB +qB +Xm +Xm +Xm +Xm +Xm +Qf +Qf +Qf +Qf +Xm +Xm +Xm +Qf +qB +kX +kX +kX +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +ra +ra +qB +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(85,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +pk +pk +pk +Qf +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +Qf +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +kX +kX +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +ra +ra +qB +qB +Qf +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(86,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +pk +pk +pk +tz +tz +tz +Qf +Qf +Xm +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +qB +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +qB +qB +Qf +qB +qB +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +qB +qB +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +ra +qB +qB +Qf +Qf +Xm +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(87,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +tz +tz +tz +tz +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Xm +Qf +Xm +Qf +Qf +Xm +Qf +qB +qB +qB +qB +qB +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +Qf +Qf +qB +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +ra +ra +qB +qB +Qf +Qf +Qf +Xm +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(88,1,3) = {" +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +tz +Qf +tz +Qf +tz +tz +Qf +tz +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Xm +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +qB +qB +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Xm +Xm +Qf +Qf +qB +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Xm +Qf +qB +qB +Qf +qB +qB +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Xm +Xm +Qf +Qf +Qf +Qf +qB +qB +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +ra +qB +Qf +Qf +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(89,1,3) = {" +tz +tz +tz +Qf +tz +tz +Qf +tz +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +Qf +tz +tz +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +qB +qB +qB +qB +qB +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Xm +Qf +Xm +Qf +Qf +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +Qf +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +ra +ra +qB +qB +qB +Qf +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(90,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +Qf +Qf +tz +tz +Qf +Qf +Xm +Qf +Qf +Xm +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +qB +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +qB +Qf +Qf +Qf +Qf +Xm +qB +qB +qB +qB +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +ra +ra +ra +ra +qB +Qf +Xm +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(91,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +Qf +Qf +Qf +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Xm +Qf +Qf +Xm +Qf +Qf +Qf +Qf +qB +qB +qB +qB +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Xm +Qf +Qf +Qf +qB +Qf +Qf +Qf +Qf +Qf +qB +qB +Qf +qB +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Xm +Qf +Qf +Xm +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +qB +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(92,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +tz +tz +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +qB +qB +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +qB +Qf +Qf +qB +qB +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +Qf +ra +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(93,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +qB +qB +qB +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +Qf +qB +qB +qB +qB +qB +qB +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +ra +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(94,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +ra +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(95,1,3) = {" +tz +tz +tz +tz +tz +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +oc +oc +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +ra +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(96,1,3) = {" +tz +tz +tz +tz +tz +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +oc +oc +oc +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(97,1,3) = {" +tz +tz +tz +tz +tz +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +oc +oc +oc +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(98,1,3) = {" +tz +tz +tz +tz +tz +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +DJ +DJ +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +oc +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(99,1,3) = {" +tz +tz +tz +tz +tz +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +DJ +DJ +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +DJ +DJ +DJ +DJ +DJ +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(100,1,3) = {" +tz +tz +tz +tz +tz +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +DJ +DJ +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +oc +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +DJ +DJ +DJ +DJ +DJ +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +Qf +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(101,1,3) = {" +tz +tz +tz +tz +tz +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +DJ +DJ +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +oc +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +DJ +DJ +DJ +oc +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +ra +Qf +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(102,1,3) = {" +tz +tz +tz +tz +tz +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +DJ +oc +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +DJ +oc +oc +oc +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +ra +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(103,1,3) = {" +tz +tz +tz +tz +tz +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +DJ +oc +oc +oc +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +DJ +oc +oc +oc +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(104,1,3) = {" +tz +tz +tz +tz +tz +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +oc +oc +oc +oc +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +DJ +oc +oc +oc +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(105,1,3) = {" +tz +tz +tz +tz +tz +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +oc +oc +oc +oc +oc +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +oc +oc +oc +oc +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(106,1,3) = {" +tz +tz +tz +tz +tz +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +oc +oc +oc +oc +oc +oc +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +oc +oc +oc +oc +oc +oc +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(107,1,3) = {" +tz +tz +tz +tz +tz +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +DJ +DJ +DJ +oc +oc +oc +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +oc +oc +oc +oc +oc +oc +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(108,1,3) = {" +tz +tz +tz +tz +tz +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +oc +DJ +DJ +td +td +rV +cI +FC +FC +cI +td +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +oc +oc +oc +oc +oc +oc +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +ra +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(109,1,3) = {" +tz +tz +tz +tz +tz +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +td +as +rV +FC +FC +FC +FC +td +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +oc +oc +oc +oc +oc +oc +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +ra +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(110,1,3) = {" +tz +tz +tz +tz +tz +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +td +rV +FC +FC +FC +FC +FC +td +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +oc +oc +oc +oc +oc +oc +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +Qf +ra +qB +Qf +Xm +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(111,1,3) = {" +tz +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +td +hC +FC +FC +FC +FC +FC +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +oc +oc +oc +oc +oc +oc +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +Qf +ra +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(112,1,3) = {" +tz +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +td +rV +rV +FC +FC +FC +FC +FC +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +kX +Qf +Qf +ra +qB +Qf +Xm +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(113,1,3) = {" +tz +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +td +FC +FC +FC +FC +FC +Ps +wH +td +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +kX +Qf +Qf +ra +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(114,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +td +SW +DJ +Im +FC +FC +td +td +td +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +ra +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(115,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +ky +FC +FC +SI +FC +FC +td +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +ra +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(116,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +DJ +DJ +DJ +DJ +DJ +oc +oc +oc +DJ +DJ +td +FC +FC +td +cI +cI +td +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +ra +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(117,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +DJ +DJ +DJ +DJ +DJ +oc +oc +oc +DJ +DJ +td +td +cI +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(118,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +DJ +DJ +DJ +DJ +oc +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +kX +kX +kX +qB +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(119,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +DJ +DJ +DJ +oc +oc +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +kX +kX +kX +kX +kX +kX +Qf +kX +Qf +Qf +kX +kX +kX +qB +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(120,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +DJ +DJ +oc +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +ra +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(121,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +DJ +oc +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +kX +kX +kX +kX +kX +kX +Qf +Qf +kX +kX +kX +Qf +Qf +ra +Qf +Qf +Xm +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(122,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +oc +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +oc +oc +oc +oc +oc +oc +DJ +DJ +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +ra +Qf +Xm +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(123,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +oc +oc +oc +oc +oc +oc +oc +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +ra +qB +Qf +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(124,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +Qf +kX +kX +kX +kX +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +oc +oc +oc +oc +oc +oc +oc +oc +oc +oc +oc +oc +oc +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +DJ +kX +kX +kX +kX +kX +kX +kX +kX +kX +Qf +Qf +Qf +Qf +ra +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(125,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +qB +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +qB +qB +qB +qB +Qf +Qf +Qf +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(126,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +Qf +Xm +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Xm +Qf +qB +qB +qB +qB +qB +qB +qB +qB +Qf +Xm +Qf +Qf +Qf +Qf +qB +qB +qB +qB +qB +qB +ra +ra +ra +ra +ra +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(127,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Xm +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Xm +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Xm +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +qB +qB +qB +qB +qB +qB +qB +qB +Qf +Qf +Qf +qB +qB +qB +qB +qB +qB +Qf +tz +tz +tz +tz +tz +tz +tz +tz +tz +"} +(128,1,3) = {" +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz +tz "} diff --git a/_maps/map_files/roguetown/otherz/smalldecap.json b/_maps/map_files/roguetown/otherz/smalldecap.json index e606d17f91..a1732d6fd6 100644 --- a/_maps/map_files/roguetown/otherz/smalldecap.json +++ b/_maps/map_files/roguetown/otherz/smalldecap.json @@ -1,5 +1,6 @@ { "map_name": "smalldecap", "map_path": "map_files/roguetown/otherz", - "map_file": "smalldecap.dmm" + "map_file": "smalldecap.dmm", + "traits": [{"Up": 1}, {"Up": 1, "Down": -1}, {"Down": -1}] } diff --git a/_maps/map_files/roguetown/otherz/smallforest.dmm b/_maps/map_files/roguetown/otherz/smallforest.dmm index e3947a5a1e..8fada6d055 100644 --- a/_maps/map_files/roguetown/otherz/smallforest.dmm +++ b/_maps/map_files/roguetown/otherz/smallforest.dmm @@ -32,7 +32,7 @@ /obj/structure/fluff/signage{ name = "Stonekeep" }, -/turf/open/floor/rogue/dirt/road, +/turf/open/floor/rogue/dirt, /area/rogue/outdoors/woods) "aj" = ( /turf/closed/mineral/random/rogue/high, @@ -143,14 +143,14 @@ /area/rogue/outdoors/river) "aK" = ( /turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/caverogue) +/area/rogue/outdoors/woods_safe) "aL" = ( /obj/structure/fluff/traveltile/vampire{ aportalgoesto = "vampin"; aportalid = "vampexit" }, /turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/caverogue) +/area/rogue/outdoors/woods_safe) "aN" = ( /obj/structure/fluff/statue/gargoyle/moss, /turf/open/floor/rogue/dirt, @@ -331,7 +331,7 @@ /turf/closed/wall/mineral/rogue/wooddark, /area/rogue/indoors) "rk" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/grass, /area/rogue/indoors) "ru" = ( @@ -344,7 +344,7 @@ }, /area/rogue/indoors) "sc" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/transparent/openspace, /area/rogue/indoors) "sk" = ( @@ -453,7 +453,7 @@ aportalid = "banditexit" }, /turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/caverogue) +/area/rogue/outdoors/woods_safe) "DK" = ( /obj/machinery/light/rogue/firebowl/stump, /turf/open/floor/rogue/dirt, @@ -522,7 +522,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/woods) "KY" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -627,7 +627,7 @@ /area/rogue/under/town/caverogue) "Ut" = ( /turf/open/floor/rogue/dirt, -/area/rogue/under/town/caverogue) +/area/rogue/outdoors/woods_safe) "UJ" = ( /mob/living/simple_animal/hostile/retaliate/rogue/goat, /turf/open/floor/rogue/dirt, @@ -649,7 +649,7 @@ /area/rogue/outdoors/woods) "Ws" = ( /turf/open/floor/rogue/grass, -/area/rogue/under/town/caverogue) +/area/rogue/outdoors/woods_safe) "WH" = ( /turf/closed/wall/mineral/rogue/wooddark/vertical, /area/rogue/indoors) @@ -5423,8 +5423,8 @@ Jc jc Jc jc -ag -ag +Jc +Jc Jc Jc aA @@ -5546,15 +5546,15 @@ Jc jc Jc jc -ag -ag Jc Jc Jc Jc Jc -ag -ag +Jc +Jc +Jc +Jc Bm Bm Jc @@ -5676,8 +5676,8 @@ Jc Jc Jc Jc -ag -ag +Jc +Jc Jc Jc Jc @@ -16404,8 +16404,8 @@ Jc Lu fA Lu -Jc ai +ub ab ab Jc diff --git a/_maps/map_files/roguetown/otherz/underworld.dmm b/_maps/map_files/roguetown/otherz/underworld.dmm index 9202d8e5e7..30e7f4c502 100644 --- a/_maps/map_files/roguetown/otherz/underworld.dmm +++ b/_maps/map_files/roguetown/otherz/underworld.dmm @@ -85,6 +85,10 @@ /obj/effect/landmark/underworldcoin, /turf/open/floor/rogue/underworld/road, /area/rogue/underworld) +"Q" = ( +/obj/item/underworld/coin, +/turf/open/floor/rogue/underworld/road, +/area/rogue/underworld) "V" = ( /obj/effect/spawner/roguemap/tollrandom, /turf/open/floor/rogue/underworld/road, @@ -5960,7 +5964,7 @@ a c n e -e +V e e e @@ -6745,7 +6749,7 @@ n e e e -e +Q e e e @@ -6866,7 +6870,7 @@ b b b e -e +Q e e e @@ -6998,7 +7002,7 @@ b e e n -e +V e e n @@ -7263,7 +7267,7 @@ e e e e -e +Q e e n @@ -7398,7 +7402,7 @@ e e e n -e +V e e e @@ -7517,11 +7521,11 @@ b b e e +Q e e e -e -e +Q e e e @@ -7785,7 +7789,7 @@ e e e e -e +Q e e e @@ -8178,7 +8182,7 @@ e e e n -e +Q e e e @@ -8434,7 +8438,7 @@ e e e e -e +Q e e e @@ -8686,12 +8690,12 @@ b b b e +Q e e e e -e -e +Q e e e @@ -8956,7 +8960,7 @@ e e n n -e +V e e n @@ -9207,7 +9211,7 @@ b b e e -e +V e e e @@ -9468,7 +9472,7 @@ b e e e -e +Q e e e @@ -10249,7 +10253,7 @@ a a c n -e +V e e e diff --git a/_maps/map_files/roguetown/roguetown.dmm b/_maps/map_files/roguetown/roguetown.dmm index 640008a395..371a5a1ecc 100644 --- a/_maps/map_files/roguetown/roguetown.dmm +++ b/_maps/map_files/roguetown/roguetown.dmm @@ -23,6 +23,9 @@ /area/rogue/indoors/town/church) "aaF" = ( /obj/machinery/light/rogue/wallfire/candle/blue/r, +/obj/structure/chair/wood/rogue/chair_noble{ + dir = 8 + }, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -35,6 +38,16 @@ /obj/item/roguebin/water/gross, /turf/open/floor/rogue/tile, /area/rogue/under/town/basement) +"abt" = ( +/obj/structure/stairs, +/obj/structure/fluff/railing/border{ + dir = 5 + }, +/obj/structure/fluff/railing/border{ + dir = 8 + }, +/turf/open/floor/rogue/woodturned, +/area/rogue/indoors/town/tavern) "abv" = ( /obj/structure/flora/ausbushes/ywflowers, /obj/structure/flora/roguegrass, @@ -73,7 +86,7 @@ /area/rogue/outdoors/mountains) "afz" = ( /obj/structure/closet/crate/chest/gold, -/obj/item/rogueweapon/sword/short/silver, +/obj/item/rogueweapon/sword/silver, /turf/open/floor/rogue/dirt/road, /area/rogue/under/cave) "afF" = ( @@ -125,16 +138,17 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/rtfield) "ahY" = ( -/obj/structure/fluff/walldeco/innsign{ - desc = "A sign for a local inn."; - name = "Inn sign" +/obj/structure/closet/crate/roguecloset{ + pixel_y = 10 }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) +/obj/item/roguekey/tavern, +/obj/item/roguekey/tavern, +/turf/open/floor/rogue/carpet/green, +/area/rogue/under/town/basement) "ain" = ( /obj/structure/mineral_door/wood{ - lockid = "doctor"; - locked = 1 + locked = 1; + lockid = "doctor" }, /turf/open/floor/rogue/twig, /area/rogue/indoors/town) @@ -156,7 +170,7 @@ /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/church) "ajg" = ( -/obj/item/roguebin/water, +/obj/item/roguebin/water/gross, /turf/open/floor/rogue/tile, /area/rogue/indoors/town/manor) "ajp" = ( @@ -190,8 +204,13 @@ /turf/open/floor/rogue/twig, /area/rogue/indoors/town) "amn" = ( -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/tavern) +/obj/structure/fluff/railing/border{ + dir = 4 + }, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) "amq" = ( /obj/structure/rack/rogue, /obj/item/rogueweapon/pick, @@ -271,7 +290,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "apF" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/structure/bed/rogue, @@ -295,6 +314,12 @@ "aqp" = ( /turf/closed/wall/mineral/rogue/stonebrick, /area/rogue/indoors/town/garrison) +"aqA" = ( +/obj/effect/decal/turfedge_neu/alt_small{ + dir = 4 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/town) "aqZ" = ( /turf/closed/wall/mineral/rogue/stonebrick, /area/rogue/under/town/basement) @@ -337,21 +362,15 @@ /obj/structure/fluff/walldeco/church/line{ dir = 1 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "awb" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/law, -/obj/item/book/rogue/festus, -/obj/item/book/rogue/magicaltheory, -/obj/item/book/rogue/necra, -/obj/item/book/rogue/arcyne, -/obj/item/book/rogue/blackmountain, -/obj/item/book/rogue/sword, +/obj/machinery/light/rogue/wallfire/candle/l, +/obj/structure/bookcase/random/thesis, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) "awl" = ( @@ -378,6 +397,12 @@ /obj/item/reagent_containers/glass/bottle/rogue/wine, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/bath) +"aya" = ( +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield) "ayc" = ( /obj/effect/decal/cleanable/blood/old, /turf/open/floor/rogue/cobble, @@ -391,17 +416,15 @@ /turf/open/floor/rogue/grass, /area/rogue/indoors/town/manor) "ayz" = ( -/obj/structure/closet/crate/chest/crate, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed_dried, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed, -/obj/item/clothing/mask/cigarette/pipe/crafted, -/obj/item/reagent_containers/powder/spice, -/obj/item/reagent_containers/powder/spice, -/obj/item/neuFarm/seed/poppy, -/turf/open/floor/rogue/naturalstone, +/obj/structure/rack/rogue, +/obj/effect/decal/cleanable/dirt/cobweb{ + icon_state = "cobweb2" + }, +/obj/item/reagent_containers/glass/bottle/rogue/healthpot, +/obj/item/reagent_containers/glass/bottle/rogue/manapot, +/obj/item/reagent_containers/glass/bottle/rogue/manapot, +/obj/item/reagent_containers/glass/bottle/rogue/healthpot, +/turf/open/floor/rogue/twig, /area/rogue/under/town/basement) "aza" = ( /obj/effect/decal/cleanable/blood, @@ -443,26 +466,18 @@ }, /turf/open/floor/rogue/churchmarble, /area/rogue/indoors/town/church/chapel) -"aBk" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town/tavern) "aBs" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = -32 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" +/obj/structure/bookcase{ + pixel_y = 10 }, -/turf/open/floor/rogue/twig, +/obj/item/book/rogue/advice_soup, +/obj/item/book/rogue/mysticalfog, +/turf/open/floor/rogue/carpet/green, /area/rogue/under/town/basement) "aBF" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/item/reagent_containers/glass/cup/wooden, /turf/open/floor/rogue/woodturned, @@ -472,11 +487,13 @@ /turf/open/floor/rogue/tile, /area/rogue/indoors/town/manor) "aBJ" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/clothing/suit/roguetown/shirt/rags, -/obj/item/rogueweapon/mace/wsword, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) +/obj/structure/bookcase{ + pixel_y = 10 + }, +/obj/item/book/rogue/advice_farming, +/obj/item/book/rogue/yeoldecookingmanual, +/turf/open/floor/rogue/carpet/green, +/area/rogue/under/town/basement) "aCf" = ( /turf/open/floor/rogue/rooftop{ dir = 8 @@ -529,11 +546,17 @@ }, /area/rogue/indoors) "aEr" = ( -/obj/structure/chair/wood/rogue{ - dir = 1 +/obj/structure/table/wood{ + dir = 1; + icon_state = "tablewood1" }, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) +/obj/item/candle/yellow/lit/infinite{ + pixel_y = 15 + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" + }, +/area/rogue/under/town/basement) "aES" = ( /obj/effect/decal/cleanable/blood/gibs/body, /obj/effect/decal/cleanable/blood, @@ -570,6 +593,10 @@ icon_state = "horzw" }, /area/rogue/indoors) +"aHG" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/carpet/purple, +/area/rogue/indoors/town/manor) "aHZ" = ( /obj/structure/chair/wood/rogue{ dir = 4 @@ -600,28 +627,16 @@ /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) "aJh" = ( -/obj/structure/stairs{ - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" - }, -/area/rogue/outdoors/town) +/obj/structure/chair/stool/rogue, +/obj/structure/fluff/wallclock, +/turf/open/floor/rogue/carpet/green, +/area/rogue/under/town/basement) "aJi" = ( /obj/structure/toilet, /turf/open/floor/rogue/tile{ icon_state = "greenstone" }, /area/rogue/under/town/basement) -"aJo" = ( -/obj/structure/fluff/railing/wood, -/obj/structure/fluff/railing/border{ - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/tavern) "aJW" = ( /obj/structure/lever{ redstone_id = "smelter" @@ -637,14 +652,6 @@ "aKB" = ( /turf/closed/wall/mineral/rogue/roofwall/center, /area/rogue/indoors) -"aLO" = ( -/obj/structure/stairs{ - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/tavern) "aLP" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -692,19 +699,22 @@ /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/manor) "aNE" = ( -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/town/roofs) -"aNW" = ( -/turf/open/floor/rogue/ruinedwood{ - dir = 1; - icon_state = "vertw" - }, +/obj/structure/table/wood/nice/decorated_alt, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/natural/feather, +/turf/open/floor/rogue/wood/nosmooth/saiga, /area/rogue/indoors/town/tavern) +"aNW" = ( +/obj/structure/fluff/wallclock, +/turf/open/floor/rogue/carpet/green, +/area/rogue/under/town/basement) "aNX" = ( -/obj/structure/bed/rogue/wool, -/obj/item/bedsheet/rogue/cloth, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/obj/structure/fermenting_barrel/random/beer{ + name = "Beer barrel" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/town/basement) "aOB" = ( /obj/machinery/light/rogue/wallfire{ pixel_y = 32 @@ -719,7 +729,6 @@ /area/rogue/outdoors/mountains) "aPA" = ( /obj/structure/chair/bench/throne, -/obj/item/reagent_containers/glass/cup/golden, /turf/open/floor/rogue/grass, /area/rogue/indoors/town/manor) "aPJ" = ( @@ -805,6 +814,14 @@ /obj/machinery/light/rogue/wallfire/candle, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) +"aUh" = ( +/obj/structure/stairs{ + dir = 1 + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "wooden_floort" + }, +/area/rogue/outdoors/town) "aUi" = ( /obj/structure/roguemachine/scomm, /obj/effect/decal/cleanable/dirt/dust, @@ -825,9 +842,7 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) "aWb" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 1 - }, +/obj/structure/mineral_door/wood/deadbolt, /turf/open/floor/rogue/dirt, /area/rogue/indoors/town) "aWn" = ( @@ -860,6 +875,10 @@ /obj/structure/spider/stickyweb, /turf/open/floor/rogue/dirt, /area/rogue/under/cave) +"aXW" = ( +/obj/structure/fluff/walldeco/stone, +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/town/tavern) "aYw" = ( /obj/structure/chair/wood/rogue{ dir = 1 @@ -871,6 +890,12 @@ /obj/structure/fluff/walldeco/customflag, /turf/closed/wall/mineral/rogue/wooddark/horizontal, /area/rogue/indoors/town/garrison) +"aZr" = ( +/obj/structure/closet/crate/chest/crafted, +/obj/item/natural/saddle, +/obj/item/natural/saddle, +/turf/open/floor/rogue/ruinedwood, +/area/rogue/indoors/town) "aZF" = ( /obj/structure/chair/stool/rogue, /turf/open/floor/rogue/cobble, @@ -894,16 +919,18 @@ /obj/machinery/light/rogue/cauldron, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) +"bbX" = ( +/obj/item/bedsheet/rogue/pelt, +/obj/structure/bed/rogue/inn, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "bcd" = ( /obj/structure/bed/rogue/shit, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "bcl" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, +/obj/structure/bookcase/random/archive, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "bcs" = ( @@ -962,6 +989,10 @@ /obj/item/reagent_containers/glass/cup, /obj/item/reagent_containers/glass/cup/silver, /obj/item/reagent_containers/glass/cup/silver, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/obj/item/kitchen/spoon, +/obj/item/kitchen/spoon, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "beQ" = ( @@ -972,7 +1003,7 @@ /turf/open/floor/rogue/woodturned/nosmooth, /area/rogue/indoors/town/bath) "bfe" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/machinery/light/rogue/wallfire/candle, /obj/structure/curtain/bounty{ color = "grey" @@ -982,7 +1013,7 @@ }, /area/rogue/indoors/town/church/chapel) "bfk" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -1022,16 +1053,15 @@ /turf/open/floor/rogue/rooftop, /area/rogue/outdoors/mountains) "bhS" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 4 - }, -/turf/open/floor/rogue/tile/bath, -/area/rogue/under/town/basement) +/obj/structure/rack/rogue, +/obj/item/broom, +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/town) "bhV" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/cleaver/combat, -/obj/item/rogueweapon/huntingknife/idagger/silver, -/obj/item/rogueweapon/huntingknife/idagger/steel, +/obj/item/rogueweapon/knife/cleaver/combat, +/obj/item/rogueweapon/knife/dagger/silver, +/obj/item/rogueweapon/knife/dagger/steel, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/shop) "bim" = ( @@ -1043,9 +1073,19 @@ "biq" = ( /turf/open/floor/carpet/royalblack, /area/rogue/under/town/basement) +"biz" = ( +/obj/structure/table/wood{ + dir = 10; + icon_state = "largetable" + }, +/obj/item/clothing/head/roguetown/helmet/leather/goblin, +/obj/item/clothing/head/roguetown/helmet/goblin{ + pixel_x = 15 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "bjd" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/bibble, +/obj/structure/bookcase/random/legends, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "bjg" = ( @@ -1066,11 +1106,17 @@ /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) "blj" = ( -/obj/effect/landmark/start/villager, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) +/obj/structure/closet/crate/chest/wicker, +/obj/item/reagent_containers/food/snacks/produce/onion, +/obj/item/reagent_containers/food/snacks/produce/onion, +/obj/item/reagent_containers/food/snacks/produce/potato, +/obj/item/reagent_containers/food/snacks/produce/potato, +/obj/item/reagent_containers/food/snacks/produce/turnip, +/obj/item/reagent_containers/food/snacks/produce/cabbage, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "blE" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/dirt, @@ -1128,6 +1174,10 @@ "bqq" = ( /turf/open/transparent/openspace, /area/rogue/indoors/town/shop) +"bqz" = ( +/obj/structure/mineral_door/wood/green/merc, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "bqA" = ( /obj/structure/fluff/railing/border{ dir = 8 @@ -1140,6 +1190,10 @@ }, /turf/open/floor/rogue/twig, /area/rogue/outdoors/town/roofs) +"bqW" = ( +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "bqX" = ( /obj/structure/fluff/statue/small, /turf/open/floor/rogue/tile/bath, @@ -1167,24 +1221,14 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town) "bst" = ( -/obj/effect/landmark/start/grabber{ - name = "Hauler" - }, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) "btq" = ( /obj/item/roguebin/water/gross, /turf/open/floor/rogue/woodturned, /area/rogue/under/town/basement) -"btC" = ( -/obj/structure/flora/ausbushes/ppflowers, -/obj/machinery/light/rogue/lanternpost/fixed{ - pixel_x = -2 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) "btG" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/structure/closet/crate/chest/neu, @@ -1193,7 +1237,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/garrison) "btM" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/wood, @@ -1212,11 +1256,17 @@ icon_state = "vertw" }, /area/rogue/indoors) +"bvy" = ( +/obj/machinery/light/rogue/torchholder{ + pixel_y = 26 + }, +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield) "bvQ" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/rogue/nitebeast, +/obj/structure/bookcase/random/apocrypha, /turf/open/floor/carpet/purple, /area/rogue/indoors/town/church) "bwc" = ( @@ -1268,9 +1318,9 @@ /turf/open/floor/rogue/tile, /area/rogue/under/town/basement) "bxN" = ( -/obj/structure/rogue/trophy/deer, +/obj/machinery/dye_bin, /turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/area/rogue/indoors/town/shop) "bxZ" = ( /obj/structure/closet/crate/roguecloset, /obj/item/clothing/cloak/stabard/guard, @@ -1301,11 +1351,6 @@ /obj/machinery/light/rogue/lanternpost/fixed, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) -"byI" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/tavern) "byT" = ( /obj/structure/curtain/bounty{ color = "grey" @@ -1324,6 +1369,12 @@ /obj/structure/bed/rogue/hay, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) +"bzd" = ( +/obj/structure/chair/wood/rogue{ + dir = 1 + }, +/turf/open/floor/rogue/carpet/green, +/area/rogue/indoors/town/tavern) "bzh" = ( /turf/closed/wall/mineral/rogue/decostone/end{ dir = 1 @@ -1332,6 +1383,10 @@ "bzO" = ( /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/garrison) +"bzP" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/tavern) "bzQ" = ( /turf/open/water/bath, /area/rogue/indoors/town/bath) @@ -1340,12 +1395,26 @@ icon_state = "weird1" }, /area/rogue/indoors/town/dwarfin) +"bAm" = ( +/obj/structure/closet/crate/chest/neu_iron, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "bBb" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 4 +/obj/structure/closet/crate/chest{ + base_icon_state = "woodchestalt"; + icon_state = "woodchestalt" }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) +/obj/item/reagent_containers/food/snacks/produce/wheat, +/obj/item/reagent_containers/food/snacks/produce/wheat, +/obj/item/reagent_containers/food/snacks/produce/wheat, +/obj/item/reagent_containers/food/snacks/produce/wheat, +/obj/effect/decal/turfedge_neu/alt{ + dir = 8 + }, +/obj/item/reagent_containers/food/snacks/produce/wheat, +/obj/item/reagent_containers/food/snacks/produce/wheat, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "bBP" = ( /obj/structure/closet/crate/chest/neu, /obj/item/rogueweapon/shield/tower, @@ -1375,11 +1444,46 @@ /obj/machinery/light/rogue/firebowl, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) +"bEh" = ( +/obj/structure/fluff/clock, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern) "bEj" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/roguekey/tavern, -/obj/item/roguekey/tavern, -/turf/open/floor/rogue/blocks, +/obj/item/candle/yellow{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/candle/yellow{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/candle/yellow{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/candle/yellow{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/candle/yellow{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/candle/yellow{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/flint{ + pixel_x = -4 + }, +/obj/structure/rack/rogue, +/obj/item/natural/bundle/stick{ + pixel_y = -7 + }, +/obj/item/natural/bundle/stick{ + pixel_y = -7 + }, +/turf/open/floor/rogue/concrete, /area/rogue/under/town/basement) "bEE" = ( /obj/structure/fluff/railing/border{ @@ -1387,6 +1491,10 @@ }, /turf/closed/wall/mineral/rogue/wooddark/end, /area/rogue/indoors/town/dwarfin) +"bEN" = ( +/obj/item/roguestatue/iron, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town) "bFc" = ( /obj/structure/closet/crate/coffin, /obj/structure/fluff/walldeco/maidendrape, @@ -1414,7 +1522,7 @@ "bFU" = ( /obj/structure/closet/crate/drawer, /obj/item/clothing/mask/cigarette/pipe/westman, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /turf/open/floor/rogue/woodturned/nosmooth, /area/rogue/indoors/town/bath) "bGl" = ( @@ -1474,7 +1582,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town/garrison) "bIE" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/effect/spawner/roguemap/hauntz_random, @@ -1508,11 +1616,11 @@ /turf/open/floor/rogue/ruinedwood/chevron, /area/rogue/indoors/shelter/town/sargoth) "bLq" = ( -/turf/closed/wall/mineral/rogue/pipe{ - dir = 4; - icon_state = "iron_corner" - }, -/area/rogue/under/cave) +/obj/structure/rack/rogue, +/obj/item/roguekey/roomhunt, +/obj/item/rogueweapon/knife/cleaver, +/turf/open/floor/rogue/concrete, +/area/rogue/under/town/basement) "bMm" = ( /obj/structure/mineral_door/wood{ icon_state = "wcv"; @@ -1546,10 +1654,11 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "bNu" = ( -/obj/structure/fluff/walldeco/rpainting{ - pixel_y = 32 - }, -/turf/open/floor/rogue/blocks, +/obj/item/storage/roguebag, +/obj/item/storage/roguebag, +/obj/structure/rack/rogue, +/obj/machinery/light/rogue/wallfire/candle/weak, +/turf/open/floor/rogue/concrete, /area/rogue/under/town/basement) "bNO" = ( /obj/item/rogueweapon/shield/wood, @@ -1557,8 +1666,8 @@ /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors) "bNX" = ( -/obj/structure/bed/rogue/hay, -/turf/open/floor/rogue/blocks, +/obj/structure/fluff/statue/gargoyle/moss, +/turf/open/floor/rogue/cobble/mossy/alt, /area/rogue/under/town/basement) "bOq" = ( /obj/structure/rack/rogue, @@ -1566,12 +1675,6 @@ /obj/item/clothing/suit/roguetown/shirt/dress, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/shop) -"bOA" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 8 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) "bPu" = ( /obj/structure/fluff/statue/gargoyle/moss, /turf/open/floor/rogue/blocks, @@ -1585,13 +1688,13 @@ /turf/open/floor/rogue/wood/nosmooth, /area/rogue/indoors/town/bath) "bPG" = ( -/obj/structure/roguewindow/openclose{ +/obj/item/reagent_containers/food/snacks/crow{ dir = 8 }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/town/roofs) "bQe" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/flora/roguegrass/bush_meagre, @@ -1622,10 +1725,10 @@ /turf/open/floor/rogue/herringbone, /area/rogue/under/town/basement) "bRH" = ( -/obj/structure/stairs{ +/obj/structure/fluff/railing/border{ dir = 1 }, -/turf/open/floor/rogue/woodturned, +/turf/open/transparent/openspace, /area/rogue/indoors/town/tavern) "bRP" = ( /obj/structure/roguewindow/openclose{ @@ -1665,8 +1768,8 @@ /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/manor) "bTe" = ( -/obj/structure/fermenting_barrel/random/water, /obj/item/reagent_containers/glass/bucket/wooden, +/obj/structure/fermenting_barrel/water, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/manor) "bTr" = ( @@ -1764,9 +1867,7 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town) "cbj" = ( -/obj/structure/bookcase, -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/turf/open/floor/rogue/blocks, +/turf/open/floor/rogue/concrete, /area/rogue/under/town/basement) "cbm" = ( /obj/structure/table/wood{ @@ -1787,11 +1888,24 @@ /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/magician) "cbv" = ( -/turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_corner"; - dir = 4 +/obj/structure/closet/crate/roguecloset/crafted, +/obj/item/reagent_containers/glass/bucket/wooden/alter, +/obj/item/natural/cloth{ + pixel_x = 3; + pixel_y = 5 }, -/area/rogue/under/town/sewer) +/obj/item/broom, +/turf/open/floor/rogue/concrete, +/area/rogue/under/town/basement) +"cbG" = ( +/obj/structure/fluff/railing/border{ + dir = 8 + }, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 8 + }, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/tavern) "cbH" = ( /turf/open/floor/rogue/blocks, /area/rogue/indoors/town) @@ -1835,12 +1949,19 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) "cdl" = ( -/obj/structure/rack/rogue, -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/turf/open/floor/rogue/blocks, +/obj/machinery/light/rogue/wallfire/candle/weak, +/turf/open/water/cleanshallow, /area/rogue/under/town/basement) +"ced" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/candle/yellow, +/obj/item/candle/yellow, +/obj/item/candle/yellow, +/turf/open/floor/rogue/ruinedwood{ + dir = 1; + icon_state = "vertw" + }, +/area/rogue/indoors/town/tavern) "ceG" = ( /obj/structure/table/wood{ dir = 1; @@ -1866,14 +1987,7 @@ }, /area/rogue/indoors) "cfF" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, +/obj/structure/bookcase/random/legends, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/church/chapel) "cfK" = ( @@ -1898,7 +2012,7 @@ /obj/structure/roguewindow/openclose{ dir = 1 }, -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/curtain/bounty{ color = "grey" }, @@ -1915,7 +2029,7 @@ /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/dwarfin) "chM" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/cobblerock, @@ -1941,7 +2055,7 @@ /turf/open/transparent/openspace, /area/rogue/outdoors/rtfield) "chY" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -1954,7 +2068,7 @@ /area/rogue/outdoors/rtfield) "ciy" = ( /obj/effect/spawner/roguemap/hauntz_random, -/turf/open/floor/rogue/cobblerock, +/turf/open/floor/rogue/cobblerock_alt, /area/rogue/outdoors/rtfield) "cjm" = ( /obj/machinery/light/rogue/firebowl/standing/blue, @@ -1963,13 +2077,13 @@ }, /area/rogue/under/town/basement) "cjI" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "cjR" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) "ckH" = ( @@ -1986,8 +2100,8 @@ /area/rogue/indoors) "ckZ" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town) @@ -2025,11 +2139,11 @@ dir = 1; pixel_y = -1 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu, +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/grass, @@ -2039,11 +2153,15 @@ lockid = "butler" }, /obj/item/alch/earthdust, +/obj/item/alch/earthdust, /obj/item/alch/firedust, -/obj/item/alch/magicdust, +/obj/item/alch/firedust, +/obj/item/alch/runedust, +/obj/item/alch/runedust, /obj/item/alch/waterdust, +/obj/item/alch/waterdust, +/obj/item/alch/airdust, /obj/item/alch/airdust, -/obj/item/alch/feaudust, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "cnP" = ( @@ -2053,10 +2171,8 @@ /turf/open/floor/rogue/tile, /area/rogue/indoors) "cnQ" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, +/obj/structure/bars/grille, +/turf/open/transparent/openspace, /area/rogue/indoors/town/tavern) "coS" = ( /obj/structure/bed/rogue/shit{ @@ -2068,6 +2184,8 @@ /area/rogue/under/town/sewer) "coU" = ( /obj/structure/closet/crate/roguecloset, +/obj/item/clothing/suit/roguetown/shirt/undershirt/random, +/obj/item/clothing/under/roguetown/tights/random, /turf/open/floor/rogue/ruinedwood/turned, /area/rogue/indoors/town) "cpf" = ( @@ -2088,10 +2206,11 @@ /obj/item/reagent_containers/powder/spice, /obj/item/reagent_containers/powder/spice, /obj/item/reagent_containers/powder/spice, +/obj/item/reagent_containers/powder/ozium, /turf/open/floor/carpet/stellar, /area/rogue/indoors/town/magician) "cpF" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/cobblerock, @@ -2101,18 +2220,8 @@ /obj/item/natural/feather, /obj/item/natural/feather, /obj/item/natural/feather, -/obj/item/natural/feather, -/obj/item/natural/feather, -/obj/item/natural/feather, /turf/open/floor/carpet/stellar, /area/rogue/indoors/town/magician) -"cpQ" = ( -/obj/structure/chair/wood/rogue{ - dir = 8; - icon_state = "chair2" - }, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) "cpZ" = ( /obj/structure/bookcase, /obj/item/book/rogue/festus, @@ -2150,11 +2259,8 @@ /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/church) "cre" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/outdoors/town) +/turf/open/floor/rogue/carpet/green, +/area/rogue/under/town/basement) "crf" = ( /obj/item/chair/stool/bar/rogue, /turf/open/floor/rogue/dirt, @@ -2169,24 +2275,15 @@ /obj/item/bedsheet/rogue/double_pelt, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town) -"crs" = ( -/obj/item/storage/bag/tray{ - pixel_y = 32 - }, -/obj/item/storage/bag/tray{ - pixel_y = 32 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) "crQ" = ( /obj/effect/spawner/roguemap/hauntz_random, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) "csH" = ( -/obj/structure/mineral_door/wood/donjon{ - lockid = "tavern" +/obj/structure/chair/wood/rogue/chair_noble{ + dir = 4 }, -/turf/open/floor/rogue/cobble, +/turf/open/floor/rogue/carpet/green, /area/rogue/under/town/basement) "cty" = ( /obj/structure/closet/crate/chest/neu, @@ -2215,17 +2312,22 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/under/cave) "cwq" = ( -/obj/structure/closet/crate/drawer/inn, -/turf/open/floor/rogue/woodturned, +/obj/effect/decal/turfedge_neu{ + dir = 8; + icon_state = "borderfall" + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, /area/rogue/indoors/town/tavern) "cwP" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "cxg" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/town/roofs) +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern) "cxI" = ( /obj/structure/stairs/stone, /turf/open/floor/rogue/church, @@ -2283,7 +2385,7 @@ pixel_y = 2 }, /obj/item/candle/yellow/lit/infinite{ - light_range = 1; + light_outer_range = 1; pixel_x = 14; pixel_y = 5 }, @@ -2308,11 +2410,29 @@ /obj/structure/fluff/railing/border, /turf/open/floor/rogue/grass, /area/rogue/indoors/town/manor) +"cEa" = ( +/obj/machinery/light/rogue/wallfire/candle/r, +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/turf/open/floor/carpet/purple, +/area/rogue/indoors/town/manor) "cEj" = ( +/obj/structure/table/wood{ + dir = 1; + icon_state = "tablewood1" + }, +/obj/item/paper/scroll, +/obj/item/natural/feather, /turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" + icon_state = "weird1" }, -/area/rogue/outdoors/town/roofs) +/area/rogue/under/town/basement) "cEs" = ( /obj/structure/fermenting_barrel, /turf/open/floor/rogue/twig, @@ -2329,7 +2449,7 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/dwarfin) "cFn" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -2344,12 +2464,9 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/shop) "cGA" = ( -/obj/structure/chair/wood/rogue{ - dir = 4 - }, -/obj/effect/landmark/start/adventurer, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/carpet/green, +/area/rogue/under/town/basement) "cHk" = ( /obj/structure/stairs{ dir = 4 @@ -2357,7 +2474,7 @@ /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) "cIx" = ( -/mob/living/carbon/human/species/goblin/npc/ambush/cave, +/mob/living/carbon/human/species/goblin/skilled/ambush/cave, /turf/open/floor/rogue/dirt/road, /area/rogue/under/cave) "cIP" = ( @@ -2405,6 +2522,12 @@ icon_state = "weird1" }, /area/rogue/indoors/town) +"cJH" = ( +/obj/structure/fluff/railing/border{ + dir = 6 + }, +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/indoors/town/tavern) "cJQ" = ( /mob/living/simple_animal/hostile/retaliate/rogue/chicken{ gender = "male" @@ -2447,12 +2570,20 @@ /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "cLR" = ( -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/blocks/green, -/area/rogue/under/town/sewer) +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "cMa" = ( /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/garrison) +"cMH" = ( +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield) "cMI" = ( /turf/closed/wall/mineral/rogue/roofwall/outercorner{ dir = 8 @@ -2469,10 +2600,6 @@ /obj/structure/roguemachine/scomm, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/manor) -"cNw" = ( -/obj/item/roguebin/water, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) "cOm" = ( /turf/closed/wall/mineral/rogue/stone, /area/rogue/indoors/town/dwarfin) @@ -2489,6 +2616,10 @@ /obj/structure/ladder, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/bath) +"cQk" = ( +/obj/structure/fluff/statue/gargoyle, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/tavern) "cQM" = ( /turf/open/floor/rogue/twig, /area/rogue/outdoors/river) @@ -2512,16 +2643,15 @@ }, /turf/open/floor/rogue/tile/tilerg, /area/rogue/indoors/town/manor) +"cRD" = ( +/obj/structure/roguewindow/solid, +/turf/closed/wall/mineral/rogue/roofwall/middle, +/area/rogue/indoors/town) "cSy" = ( /obj/structure/closet/crate/chest/neu_fancy, /obj/item/roguecoin/gold/pile, /turf/open/floor/rogue/tile, /area/rogue/indoors/town/vault) -"cSB" = ( -/obj/structure/rack/rogue/shelf/biggest, -/obj/structure/rack/rogue/shelf, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) "cSG" = ( /obj/structure/bed/rogue/hay, /turf/open/floor/rogue/herringbone, @@ -2551,7 +2681,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "cUr" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/curtain/bounty{ color = "grey" }, @@ -2560,7 +2690,7 @@ }, /area/rogue/indoors/town/dwarfin) "cUG" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -2597,6 +2727,20 @@ }, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) +"cVT" = ( +/obj/machinery/light/rogue/lanternpost/fixed{ + pixel_x = -11; + pixel_y = -26 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/town) +"cWc" = ( +/obj/structure/table/wood{ + icon_state = "largetable" + }, +/obj/item/toy/cards/deck, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern) "cWq" = ( /obj/structure/fluff/railing/border{ dir = 8 @@ -2604,13 +2748,12 @@ /turf/open/floor/rogue/metal/barograte, /area/rogue/outdoors/exposed/dwarf) "cWu" = ( -/obj/effect/landmark/events/haunts, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/town/roofs) -"cWI" = ( -/obj/structure/roguewindow/openclose, -/turf/open/floor/rogue/woodturned, +/obj/structure/fluff/walldeco/painting/seraphina, +/turf/closed/wall/mineral/rogue/decowood, /area/rogue/indoors/town/tavern) +"cWI" = ( +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) "cXx" = ( /obj/structure/bars/cemetery, /turf/open/floor/rogue/dirt/road, @@ -2625,11 +2768,19 @@ }, /area/rogue/indoors/town/shop) "cYc" = ( -/obj/structure/closet/crate/chest{ - base_icon_state = "woodchestalt"; - icon_state = "woodchestalt" +/obj/structure/rack/rogue, +/obj/item/reagent_containers/glass/bottle/rogue/wine, +/obj/item/reagent_containers/glass/bottle/rogue/wine/sourwine{ + pixel_x = -10 }, -/turf/open/floor/rogue/woodturned, +/obj/item/reagent_containers/glass/bottle/rogue/whitewine{ + pixel_x = 10 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/town/basement) +"cYn" = ( +/obj/structure/table/wood/plain/alto, +/turf/open/floor/rogue/ruinedwood/chevron, /area/rogue/indoors/town/tavern) "cYE" = ( /obj/effect/spawner/roguemap/sewerencounter, @@ -2662,10 +2813,8 @@ /turf/closed/wall/mineral/rogue/stonebrick, /area/rogue/under/town/basement) "cZR" = ( -/obj/structure/fluff/railing/border{ - dir = 1 - }, -/turf/open/floor/rogue/cobble, +/obj/structure/toilet, +/turf/open/floor/rogue/dirt/road, /area/rogue/under/town/basement) "dad" = ( /obj/structure/table/wood{ @@ -2676,7 +2825,11 @@ /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/bath) "daV" = ( -/turf/closed/wall/mineral/rogue/stonebrick, +/obj/machinery/light/rogue/wallfire/candle/weak{ + pixel_x = 30; + pixel_y = 0 + }, +/turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/tavern) "dbX" = ( /obj/structure/rack/rogue, @@ -2697,12 +2850,27 @@ /obj/structure/fermenting_barrel/water, /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/bath) -"ddT" = ( -/obj/structure/fluff/railing/border{ +"ddB" = ( +/obj/machinery/light/rogue/firebowl/stump, +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield) +"ddR" = ( +/obj/effect/decal/turfedge_neu/alt{ dir = 10 }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) +"ddT" = ( +/obj/structure/mineral_door/wood/violet{ + locked = 1; + lockid = "tavern"; + name = "Innkeeper's room" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "ddU" = ( /obj/structure/closet/crate/chest/neu, /obj/item/clothing/mask/cigarette/rollie/nicotine, @@ -2722,7 +2890,7 @@ dir = 1; icon_state = "longtable" }, -/obj/item/rogueweapon/spear/stone, +/obj/item/rogueweapon/polearm/spear/stone, /turf/open/floor/rogue/ruinedwood{ dir = 1; icon_state = "vertw" @@ -2755,12 +2923,18 @@ /area/rogue/indoors/town/shop) "dfP" = ( /obj/structure/closet/crate/drawer, +/obj/item/clothing/suit/roguetown/shirt/undershirt/random, +/obj/item/clothing/suit/roguetown/shirt/undershirt/random, +/obj/item/clothing/under/roguetown/tights/random, +/obj/item/clothing/under/roguetown/tights/random, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/manor) "dgF" = ( -/mob/living/simple_animal/pet/cat/rogue/inn, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/obj/structure/stairs/stone{ + dir = 8 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/town/basement) "dgZ" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/carpet/lord/center, @@ -2789,24 +2963,20 @@ /obj/structure/flora/ausbushes/brflowers, /turf/open/floor/rogue/grass, /area/rogue/indoors/town/church) -"diQ" = ( -/obj/structure/closet/crate/chest/wicker, -/obj/item/reagent_containers/food/snacks/produce/potato, -/obj/item/reagent_containers/food/snacks/produce/onion, -/obj/item/reagent_containers/food/snacks/produce/potato, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) +"djl" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 6 + }, +/turf/open/floor/rogue/blocks/stonered, +/area/rogue/outdoors/town) "djr" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/cardgame, -/obj/item/book/rogue/festus, -/obj/item/book/rogue/fishing, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "nightmaiden"; + name = "Attic" + }, +/turf/open/floor/rogue/blocks/stonered, +/area/rogue/indoors/town/bath) "djC" = ( /obj/structure/lever/wall{ pixel_x = 32; @@ -2819,7 +2989,7 @@ /turf/open/water/sewer, /area/rogue/under/town/sewer) "dlj" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/curtain/bounty{ color = "grey" }, @@ -2835,6 +3005,10 @@ /obj/machinery/light/rogue/smelter/great, /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/dwarfin) +"dlF" = ( +/obj/structure/closet/crate/drawer/random, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "dlT" = ( /obj/machinery/light/rogue/wallfire/candle, /turf/open/floor/rogue/ruinedwood{ @@ -2928,13 +3102,6 @@ icon_state = "vertw" }, /area/rogue/indoors/town/magician) -"dsA" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable_mid" - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) "dsD" = ( /obj/structure/fluff/railing/border{ dir = 6 @@ -3001,6 +3168,12 @@ }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/church) +"dvq" = ( +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 4 + }, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/tavern) "dwu" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/rogue/wallfire{ @@ -3013,11 +3186,9 @@ /turf/open/floor/rogue/churchrough, /area/rogue/indoors/town/church/chapel) "dxj" = ( -/obj/structure/chair/wood/rogue{ - dir = 4 - }, -/turf/open/floor/carpet/purple, -/area/rogue/indoors/town/tavern) +/obj/item/reagent_containers/food/snacks/smallrat, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "dxt" = ( /turf/closed/wall/mineral/rogue/wooddark/horizontal, /area/rogue/indoors/town/church) @@ -3042,13 +3213,23 @@ /turf/open/floor/rogue/tile, /area/rogue/indoors/town/manor) "dxS" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 8; - icon_state = "torchwall1" +/obj/item/natural/worms/leeches{ + pixel_x = 7; + pixel_y = -8 }, -/obj/structure/fluff/railing/border, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/twig, +/obj/item/natural/worms/leeches{ + pixel_x = -10; + pixel_y = 11 + }, +/obj/item/natural/worms/leeches{ + pixel_x = 1; + pixel_y = 3 + }, +/obj/item/natural/worms/leeches{ + pixel_x = -7; + pixel_y = -3 + }, +/turf/open/water/sewer, /area/rogue/under/town/basement) "dxY" = ( /obj/structure/flora/ausbushes/ppflowers, @@ -3090,19 +3271,25 @@ }, /area/rogue/outdoors/town/roofs) "dBV" = ( -/obj/structure/mineral_door/wood, +/obj/structure/mineral_door/wood{ + lockid = "walls"; + name = "Archer's Lookout" + }, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, /area/rogue/indoors/town/manor) "dCV" = ( -/obj/structure/roguewindow/openclose{ - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/tavern) +/obj/structure/rack/rogue, +/obj/item/reagent_containers/glass/cup/wooden, +/obj/item/reagent_containers/glass/cup/wooden, +/obj/item/reagent_containers/glass/cup/wooden, +/obj/item/reagent_containers/glass/cup/wooden, +/obj/item/reagent_containers/glass/cup/wooden, +/obj/item/reagent_containers/glass/cup/wooden, +/obj/item/reagent_containers/glass/cup/silver, +/turf/open/floor/rogue/concrete, +/area/rogue/under/town/basement) "dCX" = ( /obj/structure/closet/crate/chest/neu, /obj/item/reagent_containers/food/snacks/rogue/crackerscooked, @@ -3126,9 +3313,16 @@ /turf/closed/wall/mineral/rogue/wooddark, /area/rogue/under/cave) "dEq" = ( -/obj/structure/table/wood/fancy/blue, -/turf/open/floor/carpet/purple, -/area/rogue/indoors/town/tavern) +/obj/item/reagent_containers/glass/bottle/rogue/beer/stonebeardreserve, +/obj/item/reagent_containers/glass/bottle/rogue/beer/voddena{ + pixel_x = 10 + }, +/obj/item/reagent_containers/glass/bottle/rogue/beer/ratkept{ + pixel_x = -10 + }, +/obj/structure/rack/rogue, +/turf/open/floor/rogue/concrete, +/area/rogue/under/town/basement) "dEA" = ( /obj/structure/chair/wood/rogue{ dir = 4 @@ -3138,6 +3332,14 @@ }, /turf/open/floor/rogue/cobble, /area/rogue/indoors) +"dED" = ( +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 8 + }, +/obj/effect/decal/turfedge_neu/mossy_small, +/obj/structure/giantfur, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/tavern) "dEX" = ( /obj/structure/fluff/railing/border{ dir = 1 @@ -3180,15 +3382,18 @@ /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/church) "dGE" = ( -/obj/item/toy/cards/deck/syndicate, -/obj/structure/table/wood{ - dir = 1; - icon_state = "tablewood1" +/obj/machinery/light/rogue/wallfire{ + pixel_x = -31; + pixel_y = 32 }, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) +/obj/structure/bed/rogue/inn, +/obj/item/bedsheet/rogue/fabric, +/obj/effect/landmark/start/innkeep, +/turf/open/floor/rogue/carpet/green, +/area/rogue/under/town/basement) "dGM" = ( /obj/structure/closet/crate/chest/neu_fancy, +/obj/item/reagent_containers/powder/moondust, /turf/open/floor/carpet/stellar, /area/rogue/indoors/town/magician) "dGV" = ( @@ -3248,14 +3453,12 @@ /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/bath) "dJo" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/turf/open/floor/rogue/ruinedwood{ - dir = 1; - icon_state = "vertw" +/obj/structure/fluff/walldeco/rpainting{ + pixel_x = 32 }, -/area/rogue/indoors/town/tavern) +/obj/structure/closet/crate/chest/neu_iron, +/turf/open/floor/rogue/carpet/green, +/area/rogue/under/town/basement) "dJz" = ( /obj/structure/fluff/dryingrack, /turf/open/floor/rogue/hexstone, @@ -3276,6 +3479,11 @@ /obj/structure/chair/stool/rogue, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town) +"dLj" = ( +/obj/structure/bed/rogue/inn, +/obj/item/bedsheet/rogue/cloth, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "dLB" = ( /obj/structure/table/wood{ icon_state = "longtable" @@ -3328,6 +3536,12 @@ dir = 1 }, /area/rogue/indoors/town/shop) +"dPk" = ( +/obj/structure/roguewindow/openclose{ + dir = 8 + }, +/turf/open/floor/rogue/woodturned, +/area/rogue/indoors/town/tavern) "dPw" = ( /obj/item/rogueweapon/shovel, /turf/open/floor/rogue/dirt/road, @@ -3343,6 +3557,10 @@ /obj/machinery/light/rogue/torchholder/l, /turf/open/floor/rogue/grass, /area/rogue/outdoors/rtfield) +"dPK" = ( +/obj/structure/table/wood/nice/decorated, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/outdoors/town/roofs) "dQa" = ( /obj/structure/rack/rogue, /obj/item/rogueweapon/pick, @@ -3354,6 +3572,19 @@ "dQd" = ( /turf/closed/wall/mineral/rogue/wooddark/window, /area/rogue/indoors/town/manor) +"dQL" = ( +/obj/structure/table/wood{ + dir = 10; + icon_state = "largetable" + }, +/turf/open/floor/rogue/carpet/green, +/area/rogue/indoors/town/tavern) +"dRW" = ( +/obj/structure/bookcase/random/myths, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "horzw" + }, +/area/rogue/indoors/town/magician) "dSa" = ( /obj/structure/closet/crate/chest/neu_fancy, /obj/item/roguegem/green, @@ -3371,6 +3602,25 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town) +"dSx" = ( +/obj/structure/table/wood{ + icon_state = "longtable" + }, +/obj/item/paper/scroll, +/obj/item/natural/feather, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/carpet/red, +/area/rogue/indoors/town/tavern) +"dSK" = ( +/obj/item/bedsheet/rogue/double_pelt, +/obj/structure/bed/rogue/inn/double, +/obj/machinery/light/rogue/wallfire{ + pixel_y = -32 + }, +/turf/open/floor/rogue/tile{ + icon_state = "tile" + }, +/area/rogue/indoors/town/tavern) "dSU" = ( /obj/structure/stairs/stone, /turf/open/floor/rogue/cobble, @@ -3397,10 +3647,11 @@ }, /area/rogue/indoors) "dUI" = ( -/obj/structure/bed/rogue/inn/double, -/obj/item/bedsheet/rogue/double_pelt, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/tavern) +/obj/effect/decal/turfedge_neu/alt{ + dir = 9 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "dVo" = ( /obj/structure/closet/crate/roguecloset/inn/south{ pixel_y = 8 @@ -3415,15 +3666,8 @@ }, /turf/open/floor/rogue/blocks/newstone/alt, /area/rogue/indoors/town/dwarfin) -"dVH" = ( -/obj/structure/table/wood{ - dir = 6; - icon_state = "largetable" - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) "dWi" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/machinery/light/rogue/wallfire/candle/l, @@ -3455,6 +3699,11 @@ /area/rogue/indoors/town/manor) "dXO" = ( /obj/structure/closet/crate/chest/neu, +/obj/item/candle/yellow, +/obj/item/candle/yellow, +/obj/item/candle/yellow, +/obj/item/candle/yellow, +/obj/item/flashlight/flare/torch/lantern, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -3466,12 +3715,6 @@ icon_state = "weird1" }, /area/rogue/indoors/town) -"dZl" = ( -/obj/structure/mineral_door/wood/window{ - lockid = "tavern" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) "dZm" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/cobble, @@ -3493,6 +3736,16 @@ icon_state = "vertw" }, /area/rogue/indoors/town) +"dZY" = ( +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/wood/rogue, +/obj/effect/landmark/start/mercenary, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "eaf" = ( /obj/structure/stairs{ dir = 8 @@ -3521,6 +3774,12 @@ }, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) +"eco" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 8 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) "ecy" = ( /obj/machinery/light/rogue/wallfire/candle/blue, /turf/open/floor/rogue/dirt/road, @@ -3528,18 +3787,6 @@ "ecU" = ( /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/church) -"edh" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 4 - }, -/obj/structure/chair/wood/rogue{ - dir = 4 - }, -/obj/effect/landmark/start/villager, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town/tavern) "edj" = ( /obj/structure/fluff/railing/fence{ dir = 4 @@ -3553,6 +3800,12 @@ }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) +"edM" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/town) "edT" = ( /turf/closed/wall/mineral/rogue/roofwall/outercorner{ dir = 1 @@ -3570,13 +3823,17 @@ /area/rogue/indoors/town) "eeN" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /turf/open/floor/rogue/tile{ icon_state = "greenstone" }, /area/rogue/under/town/basement) +"eeO" = ( +/obj/structure/stairs/stone, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) "eeV" = ( /obj/structure/mineral_door/wood{ locked = 1; @@ -3605,7 +3862,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "egT" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/structure/table/wood{ icon_state = "tablewood1" }, @@ -3622,13 +3879,13 @@ /area/rogue/indoors/town) "ehB" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/sword/iron/messer{ - pixel_y = 2; - pixel_x = -3 +/obj/item/rogueweapon/sword/scimitar/messer{ + pixel_x = -3; + pixel_y = 2 }, -/obj/item/rogueweapon/sword/iron/short{ - pixel_y = -2; - pixel_x = 2 +/obj/item/rogueweapon/sword/short{ + pixel_x = 2; + pixel_y = -2 }, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) @@ -3657,6 +3914,10 @@ }, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) +"ejh" = ( +/obj/structure/chair/bench/couch/redleft, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/tavern) "ejj" = ( /obj/structure/mineral_door/wood/fancywood{ lockid = "manor" @@ -3665,9 +3926,11 @@ /area/rogue/indoors/town/manor) "ekq" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, +/obj/item/rogueweapon/shovel, +/obj/item/rogueweapon/shovel, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) "ekE" = ( @@ -3730,6 +3993,14 @@ /obj/structure/table/wood, /turf/open/floor/rogue/carpet/lord/right, /area/rogue/indoors/town/manor) +"eoy" = ( +/obj/structure/chair/wood/rogue{ + dir = 8 + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" + }, +/area/rogue/indoors/town/manor) "eoz" = ( /obj/structure/rack/rogue/shelf/biggest, /obj/structure/rack/rogue/shelf, @@ -3737,6 +4008,7 @@ /obj/item/storage/roguebag{ pixel_y = 22 }, +/obj/item/natural/cloth, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -3756,23 +4028,19 @@ /turf/closed/wall/mineral/rogue/wooddark/vertical, /area/rogue/indoors/town/dwarfin) "eps" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt{ - pixel_x = 5 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern) "eqe" = ( /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/dwarfin) "eql" = ( /obj/structure/rack/rogue/shelf, /obj/structure/closet/crate/chest/old_crate, -/obj/item/kitchen/rollingpin, +/obj/item/rogueweapon/mace/woodclub/rollingpin, /obj/item/kitchen/spoon, /obj/item/cooking/pan, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /obj/item/reagent_containers/glass/bucket/pot, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) @@ -3794,10 +4062,10 @@ /turf/closed/wall/mineral/rogue/roofwall/outercorner, /area/rogue/indoors/town/dwarfin) "erE" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "esk" = ( @@ -3844,18 +4112,18 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/bath) "evp" = ( -/obj/machinery/light/rogue/wallfire/candle/blue/r{ - pixel_x = 0; - pixel_y = 32 +/obj/effect/decal/turfedge_neu/alt{ + dir = 6 }, -/obj/structure/roguemachine/scomm/r, -/turf/open/floor/rogue/cobble, +/turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) -"evS" = ( -/turf/open/floor/rogue/tile{ - icon_state = "tile" +"evE" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 1; + name = "Sewers" }, -/area/rogue/indoors/town/tavern) +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "evV" = ( /obj/structure/stairs/stone{ dir = 8 @@ -3923,6 +4191,15 @@ /obj/item/natural/rock, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) +"eyL" = ( +/obj/structure/fluff/railing/border{ + dir = 9 + }, +/obj/effect/decal/turfedge_neu/alt_small{ + dir = 4 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/town) "ezr" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/vomit/old, @@ -3936,6 +4213,10 @@ }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/church) +"ezR" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/ruinedwood/darker, +/area/rogue/indoors/town) "eAe" = ( /obj/structure/stairs{ dir = 4 @@ -3945,18 +4226,15 @@ }, /area/rogue/indoors) "eAq" = ( -/obj/effect/landmark/start/grabber{ - name = "Hauler" - }, /turf/open/floor/rogue/blocks/bluestone, /area/rogue/indoors/town) "eAU" = ( -/obj/structure/table/wood{ +/obj/structure/mineral_door/wood/deadbolt{ dir = 1; - icon_state = "tablewood1" + name = "Privy" }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) "eBi" = ( /turf/closed/mineral/rogue/bedrock, /area/rogue/outdoors/river) @@ -3996,14 +4274,26 @@ /obj/item/rogueweapon/sword/long/exe/cloth, /turf/open/floor/rogue/woodturned, /area/rogue/under/town/basement) +"eCU" = ( +/obj/structure/fluff/walldeco/rpainting/forest, +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/town/tavern) +"eDp" = ( +/obj/structure/fluff/walldeco/painting/queen{ + pixel_y = 32 + }, +/turf/open/floor/rogue/ruinedwood, +/area/rogue/indoors/town/magician) "eDt" = ( /obj/structure/fluff/railing/wood, /turf/open/transparent/openspace, /area/rogue/outdoors/rtfield) "eDx" = ( -/obj/structure/closet/crate/chest/wicker, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, +/obj/structure/rack/rogue, +/obj/item/reagent_containers/glass/cup/wooden, +/obj/item/reagent_containers/glass/cup/wooden, +/obj/item/cooking/pan, +/obj/item/reagent_containers/glass/bucket/pot, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town) "eDG" = ( @@ -4043,7 +4333,7 @@ }, /obj/effect/landmark/start/vagrant, /turf/open/floor/rogue/blocks/green, -/area/rogue/under/cave) +/area/rogue/under/town/basement) "eFC" = ( /obj/structure/bed/rogue/hay, /turf/open/floor/rogue/woodturned, @@ -4117,9 +4407,10 @@ }, /area/rogue/indoors/town/dwarfin) "eIJ" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, +/obj/structure/rack/rogue, +/obj/item/natural/bundle/glass, +/obj/item/natural/bundle/glass, +/obj/item/natural/bundle/glass, /turf/open/floor/rogue/ruinedwood{ dir = 1; icon_state = "vertw" @@ -4166,7 +4457,7 @@ /area/rogue/under/town/sewer) "eKT" = ( /obj/structure/bars/cemetery, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "eLa" = ( @@ -4217,7 +4508,7 @@ /turf/open/floor/rogue/wood/nosmooth, /area/rogue/indoors/shelter/town/sargoth) "eMk" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/flora/roguegrass/bush_meagre, @@ -4295,10 +4586,18 @@ }, /turf/open/floor/rogue/dirt, /area/rogue/indoors/town) -"eQl" = ( -/obj/structure/chair/bench/ultimacouch, -/turf/open/floor/carpet/red, +"ePD" = ( +/obj/structure/roguewindow/openclose{ + dir = 1 + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" + }, /area/rogue/indoors/town/tavern) +"eQl" = ( +/obj/structure/fluff/walldeco/stone, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/under/town/basement) "eRi" = ( /obj/structure/fluff/railing/wood, /turf/open/floor/rogue/cobblerock, @@ -4309,6 +4608,13 @@ }, /turf/closed/wall/mineral/rogue/wooddark/vertical, /area/rogue/indoors/town/dwarfin) +"eRL" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern) "eSf" = ( /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) @@ -4358,19 +4664,25 @@ /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "eTO" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town/roofs) +/obj/structure/closet/crate/drawer/random, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern) "eUu" = ( /obj/structure/flora/roguetree/burnt, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/mountains) +"eUG" = ( +/obj/item/roguebin/water, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/dwarf) "eVl" = ( /obj/structure/closet/crate/chest/old_crate, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed_dried, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed_dried, +/obj/item/natural/chaff/wheat, +/obj/item/natural/chaff/wheat, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/swampweed_dried, +/obj/item/reagent_containers/food/snacks/produce/swampweed_dried, /turf/open/floor/rogue/tile{ icon_state = "greenstone" }, @@ -4402,11 +4714,14 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) -"eWU" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" +"eYj" = ( +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 4 + }, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 8 }, +/turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/tavern) "eYz" = ( /turf/open/transparent/openspace, @@ -4429,19 +4744,16 @@ /obj/structure/rack/rogue, /obj/item/rogueweapon/mace/cudgel, /obj/item/rogueweapon/mace/cudgel{ - pixel_y = -3; - pixel_x = 4 + pixel_x = 4; + pixel_y = -3 }, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "eZG" = ( -/obj/item/reagent_containers/food/snacks/crow{ - dir = 1 - }, -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) +/obj/structure/table/wood/plain_alt, +/obj/item/clothing/mask/cigarette/rollie, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/under/town/basement) "eZH" = ( /turf/open/floor/rogue/tile{ icon_state = "linoleum" @@ -4521,7 +4833,7 @@ /turf/open/floor/rogue/tile, /area/rogue/indoors/town/garrison) "fdX" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/blocks, @@ -4541,6 +4853,12 @@ /obj/structure/flora/newtree, /turf/open/floor/rogue/grass, /area/rogue/outdoors/rtfield) +"ffS" = ( +/obj/structure/fluff/railing/border{ + dir = 1 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/outdoors/town) "fgk" = ( /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) @@ -4557,7 +4875,7 @@ /area/rogue/indoors/town) "fhE" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/idagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, /turf/open/floor/carpet/purple, /area/rogue/indoors/town/church) "fig" = ( @@ -4618,17 +4936,12 @@ /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/church) "fmE" = ( -/obj/structure/chair/wood/rogue{ - dir = 1 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/tavern) -"fng" = ( -/obj/structure/chair/bench/ultimacouch/r{ - icon_state = "ultimacochright" +/obj/structure/rack/rogue/shelf/notdense, +/obj/item/candle/yellow/lit/infinite{ + pixel_y = 32 }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/under/town/basement) "fnj" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/rogue/wallfire/candle/blue/l, @@ -4644,14 +4957,10 @@ /obj/item/reagent_containers/glass/cup/steel, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/church) -"fnV" = ( -/obj/structure/table/wood{ - dir = 6; - icon_state = "largetable" - }, -/obj/item/dice, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +"fov" = ( +/obj/effect/decal/turfedge_neu/rockalt_edge, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield) "foF" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/stairs, @@ -4674,6 +4983,10 @@ icon_state = "weird1" }, /area/rogue/indoors/town) +"fqt" = ( +/obj/structure/roguewindow/openclose, +/turf/open/floor/rogue/woodturned, +/area/rogue/indoors/town/tavern) "fqC" = ( /obj/structure/mineral_door/wood/donjon/stone{ locked = 1; @@ -4690,6 +5003,10 @@ icon_state = "bfloorz" }, /area/rogue/indoors/town/manor) +"fqS" = ( +/obj/structure/roguemachine/scomm, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/manor) "fqV" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/rogue/torchholder{ @@ -4720,6 +5037,10 @@ dir = 1 }, /area/rogue/indoors/town/manor) +"fsG" = ( +/obj/structure/table/wood/plain, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "fsZ" = ( /obj/structure/flora/newtree, /turf/open/floor/rogue/dirt/road, @@ -4754,19 +5075,36 @@ /turf/open/floor/rogue/ruinedwood/turned/darker, /area/rogue/indoors/town) "fxm" = ( -/obj/structure/chair/wood/rogue{ - dir = 1 +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/under/town/basement) +"fxX" = ( +/obj/effect/decal/turfedge_neu/rockalt_edge, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield) +"fyf" = ( +/obj/structure/fluff/railing/border{ + dir = 8 }, -/turf/open/floor/carpet/purple, -/area/rogue/indoors/town/tavern) +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/town/roofs) "fyu" = ( /obj/structure/chair/bench/couchablack, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) +"fzi" = ( +/obj/machinery/light/rogue/wallfire/candle/weak{ + pixel_x = -32; + pixel_y = 0 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "fzj" = ( -/obj/structure/closet/crate/roguecloset, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/obj/structure/mineral_door/wood/red{ + lockid = "tavern"; + name = "Cook's room" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "fzS" = ( /turf/closed/wall/mineral/rogue/pipe{ dir = 1; @@ -4788,7 +5126,7 @@ }, /area/rogue/indoors/town/shop) "fAK" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/grass, @@ -4811,25 +5149,6 @@ icon_state = "weird1" }, /area/rogue/indoors/town) -"fBA" = ( -/obj/structure/closet/crate/chest/neu_iron, -/obj/item/roguekey/roomhunt, -/obj/item/roguekey/roomiv{ - lockid = "roomvi"; - name = "room VI key" - }, -/obj/item/roguekey/roomiv{ - lockid = "roomv"; - name = "room V key" - }, -/obj/item/roguekey/roomiv, -/obj/item/roguekey/roomiii, -/obj/item/roguekey/roomii, -/obj/item/roguekey/roomi, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/tavern) "fBO" = ( /obj/structure/bed/rogue/inn/double, /obj/item/bedsheet/rogue/fabric_double, @@ -4843,6 +5162,12 @@ icon_state = "weird1" }, /area/rogue/indoors/town/shop) +"fCI" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town) "fCN" = ( /obj/machinery/light/rogue/firebowl/standing/blue, /turf/open/floor/rogue/ruinedwood/darker, @@ -4886,7 +5211,7 @@ /obj/structure/fluff/walldeco/painting/seraphina{ pixel_y = 32 }, -/obj/item/rogueweapon/huntingknife/idagger/silver{ +/obj/item/rogueweapon/knife/dagger/silver{ pixel_x = -6; pixel_y = 5 }, @@ -4910,6 +5235,12 @@ }, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) +"fEI" = ( +/obj/structure/fluff/railing/border{ + dir = 8 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) "fFf" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/carpet/royalblack, @@ -4930,7 +5261,7 @@ }, /area/rogue/indoors) "fFx" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town) "fFy" = ( @@ -4981,22 +5312,6 @@ "fJn" = ( /turf/open/floor/rogue/rooftop, /area/rogue/outdoors/town/roofs) -"fJy" = ( -/obj/item/paper/scroll{ - pixel_y = 30 - }, -/obj/item/paper/scroll{ - pixel_y = 30 - }, -/obj/item/paper/scroll{ - pixel_y = 30 - }, -/obj/item/paper/scroll{ - pixel_y = 30 - }, -/obj/structure/rack/rogue/shelf/biggest, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) "fJz" = ( /obj/structure/mineral_door/wood/donjon{ lockid = "garrison" @@ -5008,9 +5323,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "fJM" = ( -/obj/structure/bed/rogue/inn/double, -/obj/item/bedsheet/rogue/fabric_double, -/turf/open/floor/rogue/woodturned, +/turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/tavern) "fJP" = ( /obj/structure/fluff/wallclock{ @@ -5031,22 +5344,27 @@ /turf/closed/wall/mineral/rogue/wooddark/horizontal, /area/rogue/under/cave) "fLx" = ( -/obj/structure/roguemachine/scomm, -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/indoors/town) +/obj/structure/closet/crate/chest/neu, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/natural/feather, +/obj/item/natural/feather, +/obj/item/natural/feather, +/obj/item/natural/feather, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/manor) "fLG" = ( /turf/closed/wall/mineral/rogue/roofwall/middle, /area/rogue/indoors) -"fLR" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/clothing/suit/roguetown/shirt/undershirt/random, -/obj/item/clothing/suit/roguetown/shirt/undershirt/random, -/obj/item/clothing/suit/roguetown/shirt/undershirt/random, -/obj/item/clothing/under/roguetown/tights/random, -/obj/item/clothing/under/roguetown/tights/random, -/obj/item/clothing/under/roguetown/tights/random, -/turf/open/floor/rogue/woodturned, -/area/rogue/under/town/basement) "fMf" = ( /obj/structure/fluff/railing/border{ dir = 9 @@ -5062,6 +5380,16 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/wood, /area/rogue/under/town/basement) +"fNN" = ( +/obj/machinery/light/rogue/lanternpost/fixed, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/town) +"fNP" = ( +/obj/structure/fluff/railing/border{ + dir = 9 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) "fOs" = ( /obj/structure/floordoor/gatehatch/inner{ redstone_id = "gatelava" @@ -5092,7 +5420,8 @@ /area/rogue/indoors/town/dwarfin) "fPW" = ( /obj/structure/mineral_door/wood{ - lockid = "nightmaiden" + lockid = "nightmaiden"; + name = "Balcony" }, /turf/open/floor/rogue/woodturned/nosmooth, /area/rogue/indoors/town/bath) @@ -5134,12 +5463,26 @@ }, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/church/chapel) -"fRw" = ( -/obj/structure/fluff/railing/border{ - dir = 9 +"fRl" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 4; + name = "Privy" }, -/turf/open/floor/rogue/cobble, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/town/tavern) +"fRw" = ( +/obj/structure/rack/rogue, +/obj/item/reagent_containers/glass/bucket/pot, +/turf/open/floor/rogue/concrete, /area/rogue/under/town/basement) +"fRH" = ( +/obj/structure/bed/rogue/inn, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) +"fST" = ( +/obj/structure/mineral_door/wood/violet/roomhunt, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "fTj" = ( /obj/structure/spider/cocoon, /turf/open/floor/rogue/dirt, @@ -5198,10 +5541,17 @@ }, /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/bath) +"fXn" = ( +/obj/structure/chair/wood/rogue, +/obj/machinery/light/rogue/wallfire{ + pixel_y = 32 + }, +/turf/open/floor/rogue/carpet/green, +/area/rogue/indoors/town/tavern) "fXF" = ( /obj/structure/closet/crate/roguecloset/dark, -/obj/item/rogueweapon/mace/wsword, -/obj/item/rogueweapon/huntingknife/idagger, +/obj/item/rogueweapon/mace/woodclub/train_sword, +/obj/item/rogueweapon/knife/dagger, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "fYb" = ( @@ -5240,7 +5590,7 @@ /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, -/area/rogue/outdoors/town) +/area/rogue/indoors/town) "fZW" = ( /obj/structure/table/wood/plain, /turf/open/floor/carpet/royalblack, @@ -5250,9 +5600,6 @@ /obj/item/reagent_containers/food/snacks/rogue/crackerscooked, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors) -"gaU" = ( -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) "gbD" = ( /obj/structure/closet/crate/chest/neu_iron, /obj/item/roguekey/church, @@ -5277,20 +5624,11 @@ }, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/dwarfin) -"gcR" = ( -/obj/structure/rack/rogue/shelf/biggest, -/obj/structure/rack/rogue/shelf, -/obj/item/natural/bundle/stick{ - pixel_y = 37 - }, -/obj/item/natural/bundle/stick{ - pixel_y = 37 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) "gdH" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/under/cave) +/obj/item/cooking/pan, +/obj/structure/rack/rogue, +/turf/open/floor/rogue/concrete, +/area/rogue/under/town/basement) "gef" = ( /obj/machinery/light/rogue/firebowl/stump, /turf/open/floor/rogue/grass, @@ -5350,25 +5688,26 @@ /obj/machinery/light/rogue/forge, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/dwarfin) -"ghD" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/chair/wood/rogue, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) "gix" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/sword/iron/messer, -/obj/item/rogueweapon/sword/iron/messer{ - pixel_y = 2; - pixel_x = -3 +/obj/item/rogueweapon/sword/scimitar/messer, +/obj/item/rogueweapon/sword/scimitar/messer{ + pixel_x = -3; + pixel_y = 2 }, /turf/open/floor/rogue/dirt/road, /area/rogue/under/cave) "giK" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" +/obj/structure/rack/rogue, +/obj/item/roguekey/roomi{ + pixel_x = 10 }, -/area/rogue/indoors/town/tavern) +/obj/item/roguekey/roomii, +/obj/item/roguekey/roomiii{ + pixel_x = -10 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/town/basement) "giM" = ( /obj/structure/stairs, /obj/structure/stairs, @@ -5397,12 +5736,15 @@ /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/shelter/town/sargoth) "glA" = ( -/obj/structure/chair/wood/rogue/fancy{ - dir = 8 +/obj/structure/rack/rogue, +/obj/item/roguekey/roomiv{ + pixel_x = -10 }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" +/obj/item/roguekey/roomv, +/obj/item/roguekey/roomvi{ + pixel_x = 10 }, +/turf/open/floor/rogue/concrete, /area/rogue/under/town/basement) "glV" = ( /obj/structure/fluff/statue/gargoyle, @@ -5425,6 +5767,15 @@ dir = 1 }, /area/rogue/indoors/town/manor) +"gmV" = ( +/obj/structure/roguewindow/openclose{ + dir = 1 + }, +/turf/open/floor/rogue/ruinedwood{ + dir = 1; + icon_state = "vertw" + }, +/area/rogue/indoors/town/tavern) "gmW" = ( /obj/structure/mirror{ pixel_y = -32 @@ -5434,16 +5785,33 @@ }, /area/rogue/indoors/town/manor) "gnr" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/bottle/rogue/poison, -/obj/machinery/light/rogue/wallfire/candle, +/obj/structure/closet/crate/chest/crate, /obj/effect/decal/cleanable/dirt/dust, +/obj/item/alch/sinew, +/obj/item/alch/sinew, +/obj/item/alch/sinew, +/obj/item/alch/bone, +/obj/item/alch/bone, +/obj/item/alch/bone, +/obj/item/alch/airdust, +/obj/item/alch/airdust, +/obj/item/alch/earthdust, +/obj/item/alch/earthdust, +/obj/item/alch/firedust, +/obj/item/alch/firedust, +/obj/item/alch/waterdust, +/obj/item/alch/waterdust, +/obj/item/alch/magicdust, +/obj/item/alch/magicdust, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "gns" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/cobble, +/obj/structure/rack/rogue, +/obj/item/roguekey/roomhunt, +/obj/item/roguekey/roomroyal{ + pixel_x = -10 + }, +/turf/open/floor/rogue/concrete, /area/rogue/under/town/basement) "gop" = ( /obj/structure/mineral_door/wood/deadbolt, @@ -5467,10 +5835,11 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/bath) "goT" = ( -/obj/structure/chair/wood/rogue{ - dir = 4 +/obj/structure/closet/crate/roguecloset/dark, +/turf/open/floor/rogue/ruinedwood{ + dir = 1; + icon_state = "vertw" }, -/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "gpc" = ( /obj/structure/table/wood{ @@ -5548,10 +5917,15 @@ "grU" = ( /obj/structure/closet/crate/roguecloset/dark, /obj/item/alch/airdust, +/obj/item/alch/airdust, +/obj/item/alch/earthdust, /obj/item/alch/earthdust, /obj/item/alch/firedust, +/obj/item/alch/firedust, +/obj/item/alch/waterdust, +/obj/item/alch/waterdust, +/obj/item/alch/runedust, /obj/item/alch/runedust, -/obj/item/alch/silverdust, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/magician) "gsJ" = ( @@ -5578,8 +5952,8 @@ /turf/open/floor/rogue/blocks/green, /area/rogue/under/town/sewer) "gsS" = ( -/obj/structure/chair/wood, -/turf/open/floor/carpet/inn, +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/tavern) "gsX" = ( /obj/structure/mineral_door/wood{ @@ -5588,13 +5962,10 @@ }, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/garrison) -"guF" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "tablewood1" - }, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) +"gtV" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/saiga/tame, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/town) "guT" = ( /obj/structure/bars/pipe{ dir = 1 @@ -5624,10 +5995,8 @@ /turf/closed/wall/mineral/rogue/stonebrick, /area/rogue/indoors/town/shop) "gvW" = ( -/obj/structure/table/wood{ - icon_state = "longtable_mid" - }, -/turf/open/floor/rogue/ruinedwood, +/obj/machinery/light/rogue/chand, +/turf/open/transparent/openspace, /area/rogue/indoors/town/tavern) "gwj" = ( /obj/machinery/light/rogue/campfire, @@ -5649,11 +6018,9 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town/garrison) "gwS" = ( -/turf/closed/wall/mineral/rogue/pipe{ - dir = 8; - icon_state = "iron_corner" - }, -/area/rogue/under/cave) +/obj/structure/fluff/dryingrack, +/turf/open/floor/rogue/concrete, +/area/rogue/under/town/basement) "gxd" = ( /turf/closed/wall/mineral/rogue/wooddark/end{ dir = 4 @@ -5710,11 +6077,9 @@ /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/church) "gyx" = ( -/obj/structure/fluff/railing/border{ - dir = 8 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) +/obj/effect/spawner/roguemap/hauntz_random, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern) "gzb" = ( /obj/structure/fluff/railing/fence{ dir = 4 @@ -5732,7 +6097,7 @@ dir = 1; pixel_y = -1 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/flora/roguegrass, @@ -5742,10 +6107,21 @@ /obj/machinery/light/rogue/wallfire/candle/blue{ pixel_y = -32 }, +/obj/structure/bookcase/random/legends, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, /area/rogue/indoors/town/magician) +"gzG" = ( +/obj/item/book/rogue/law, +/obj/item/book/rogue/festus, +/obj/item/book/rogue/magicaltheory, +/obj/item/book/rogue/necra, +/obj/item/book/rogue/arcyne, +/obj/item/book/rogue/blackmountain, +/obj/structure/bookcase/random, +/turf/open/floor/carpet/purple, +/area/rogue/indoors/town/manor) "gzL" = ( /obj/structure/table/wood{ dir = 5; @@ -5757,9 +6133,9 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town) "gzW" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/obj/structure/roguemachine/scomm/l, +/turf/open/floor/rogue/carpet/green, +/area/rogue/under/town/basement) "gAh" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/tile{ @@ -5773,6 +6149,7 @@ }, /obj/structure/rack/rogue, /obj/item/clothing/neck/roguetown/talkstone, +/obj/item/scrying, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -5780,17 +6157,22 @@ "gAN" = ( /turf/closed/wall/mineral/rogue/decowood, /area/rogue/indoors/town) +"gAP" = ( +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/water/bath, +/area/rogue/under/town/basement) "gBe" = ( /obj/machinery/light/rogue/torchholder{ dir = 8 }, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town) -"gBy" = ( -/obj/machinery/light/rogue/firebowl/stump, -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) +"gBN" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 5 + }, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/tavern) "gBU" = ( /turf/closed/wall/mineral/rogue/stonebrick, /area/rogue/outdoors/mountains) @@ -5837,9 +6219,9 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/bath) "gEJ" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/obj/machinery/light/rogue/torchholder/r, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) "gEQ" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/rogue/torchholder{ @@ -5871,15 +6253,9 @@ }, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) -"gHG" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/tavern) "gHO" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/woodcut, +/obj/item/rogueweapon/axe/iron, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "gIk" = ( @@ -5892,25 +6268,45 @@ /obj/structure/flora/ausbushes/ywflowers, /turf/open/floor/rogue/grass, /area/rogue/indoors/town/church) +"gJe" = ( +/obj/structure/fluff/railing/border{ + dir = 1 + }, +/obj/structure/fluff/railing/border{ + dir = 4 + }, +/obj/structure/fluff/railing/border{ + dir = 5 + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/tavern) "gJj" = ( /turf/closed/wall/mineral/rogue/roofwall/outercorner{ dir = 4 }, /area/rogue/indoors/town/garrison) +"gJl" = ( +/obj/structure/fluff/statue/gargoyle/moss, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/outdoors/town) "gJX" = ( /obj/structure/table/wood{ dir = 8; icon_state = "largetable" }, -/obj/effect/holodeck_effect/cards, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) "gJY" = ( -/obj/structure/stairs/stone{ - dir = 4 +/obj/structure/stairs{ + dir = 1 }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) +/obj/structure/fluff/walldeco/customflag{ + pixel_x = -32 + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "wooden_floort" + }, +/area/rogue/outdoors/town) "gKh" = ( /obj/structure/rack/rogue/shelf/biggest, /obj/item/natural/bundle/stick, @@ -5938,6 +6334,13 @@ "gKR" = ( /turf/open/transparent/openspace, /area/rogue/indoors/town/dwarfin) +"gLy" = ( +/obj/structure/table/wood{ + icon_state = "tablewood3" + }, +/obj/structure/roguemachine/musicbox, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/tavern) "gLD" = ( /obj/structure/fluff/railing/border, /obj/machinery/light/rogue/torchholder{ @@ -5945,6 +6348,12 @@ }, /turf/open/floor/rogue/twig, /area/rogue/outdoors/town/roofs) +"gMe" = ( +/obj/structure/closet/crate/roguecloset/inn, +/obj/item/clothing/suit/roguetown/shirt/robe/archivist, +/obj/item/clothing/cloak/cape/archivist, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/manor) "gMj" = ( /obj/structure/closet/crate/chest/neu_iron, /obj/item/roguekey/manor, @@ -5959,14 +6368,15 @@ /obj/item/roguekey/mercenary, /obj/item/roguekey/tavern, /obj/item/roguekey/doctor, +/obj/item/roguekey/vault, /turf/open/floor/rogue/tile/tilerg, /area/rogue/indoors/town) "gMl" = ( -/obj/structure/chair/wood/rogue{ - dir = 8 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) +/obj/structure/bed/rogue/inn, +/obj/item/bedsheet/rogue/pelt, +/obj/effect/landmark/start/cook, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/under/town/basement) "gMx" = ( /obj/structure/mineral_door/bars{ lockid = "manor" @@ -5974,7 +6384,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "gMz" = ( -/obj/structure/table/wood/reinf_long, +/obj/structure/table/wood/plain, /turf/open/floor/carpet/stellar, /area/rogue/indoors/town/magician) "gMX" = ( @@ -5987,16 +6397,28 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/under/town/basement) "gNr" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomiv"; - name = "ROOM IV" +/obj/structure/closet/crate/chest/neu, +/obj/item/reagent_containers/food/snacks/produce/jacksberry/poison{ + name = "strange berries" }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/obj/item/reagent_containers/food/snacks/produce/jacksberry/poison{ + name = "strange berries" + }, +/obj/item/reagent_containers/food/snacks/produce/jacksberry/poison{ + name = "strange berries" + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/under/town/basement) "gNt" = ( /turf/open/floor/rogue/wood/nosmooth, /area/rogue/indoors/town/bath) +"gNw" = ( +/obj/structure/closet/crate/roguecloset/dark{ + pixel_y = 12 + }, +/obj/effect/spawner/roguemap/cheapinnroomencounter, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "gNA" = ( /obj/structure/mineral_door/wood{ locked = 1; @@ -6027,10 +6449,22 @@ /obj/item/clothing/suit/roguetown/shirt/undershirt/random, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/shop) +"gPy" = ( +/obj/structure/table/wood{ + dir = 10; + icon_state = "largetable" + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/tavern) "gPU" = ( /obj/item/reagent_containers/food/snacks/smallrat, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) +"gQo" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "gQr" = ( /obj/item/natural/worms, /turf/open/floor/rogue/grass, @@ -6090,7 +6524,7 @@ /turf/open/floor/rogue/tile, /area/rogue/indoors/town/manor) "gTx" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/blocks, @@ -6108,10 +6542,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "gUA" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, +/obj/structure/bookcase/random/archive, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/magician) "gUQ" = ( @@ -6169,7 +6600,7 @@ pixel_x = -4; pixel_y = 7 }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) "gZy" = ( @@ -6184,6 +6615,12 @@ /obj/machinery/light/rogue/wallfire/candle/l, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) +"gZL" = ( +/obj/structure/fluff/railing/border{ + dir = 4 + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/tavern) "gZW" = ( /obj/structure/fluff/railing/wood, /turf/open/floor/rogue/cobble, @@ -6195,6 +6632,10 @@ /obj/structure/fluff/walldeco/church/line, /turf/open/floor/rogue/church, /area/rogue/indoors/town/church/chapel) +"haD" = ( +/obj/item/chair/stool/bar/rogue, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "hbR" = ( /obj/machinery/light/rogue/torchholder/l, /turf/open/floor/rogue/woodturned, @@ -6209,14 +6650,28 @@ icon_state = "weird1" }, /area/rogue/indoors/town) +"hcy" = ( +/obj/structure/fluff/walldeco/customflag{ + pixel_y = -32 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/tavern) "hcR" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/blocks/green, -/area/rogue/under/town/sewer) +/obj/structure/mineral_door/wood/donjon{ + dir = 1; + locked = 1; + lockid = "tavern"; + name = "Back door" + }, +/turf/open/floor/rogue/cobble/mossy, +/area/rogue/under/town/basement) "hdg" = ( /obj/structure/fluff/railing/border{ dir = 10 }, +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 4 + }, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/rtfield) "hdy" = ( @@ -6225,9 +6680,6 @@ }, /area/rogue/indoors/town/shop) "heq" = ( -/obj/structure/fluff/wallclock{ - dir = 3 - }, /obj/structure/chair/bench/couch, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) @@ -6237,10 +6689,6 @@ }, /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/bath) -"heG" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) "heN" = ( /obj/structure/table/wood{ dir = 9; @@ -6258,6 +6706,13 @@ icon_state = "vertw" }, /area/rogue/indoors) +"hfS" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 5 + }, +/obj/effect/decal/turfedge_neu/mossy_small, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/tavern) "hgl" = ( /obj/structure/mineral_door/wood/deadbolt{ dir = 4 @@ -6270,12 +6725,6 @@ }, /turf/open/floor/carpet/purple, /area/rogue/indoors/town/shop) -"hgC" = ( -/obj/structure/chair/wood/rogue{ - dir = 4 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) "hhq" = ( /obj/structure/fluff/walldeco/wantedposter, /turf/open/floor/rogue/dirt/road, @@ -6291,15 +6740,17 @@ }, /area/rogue/indoors/town/shop) "hiy" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/nitebeast, -/obj/item/book/rogue/noc, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) +/obj/structure/bed/rogue/shit, +/obj/item/bedsheet/rogue/cloth, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town) "hiS" = ( -/obj/structure/mineral_door/swing_door, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/obj/effect/decal/turfedge_neu/alt{ + dir = 6 + }, +/obj/effect/decal/turfedge_neu/alt_small, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/under/town/basement) "hiY" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/carpet, @@ -6313,8 +6764,8 @@ "hjp" = ( /obj/structure/closet/crate/drawer/random, /obj/machinery/light/rogue/wallfire/candle/blue{ - pixel_y = 0; - pixel_x = -32 + pixel_x = -32; + pixel_y = 0 }, /obj/item/clothing/under/roguetown/tights/black, /obj/item/clothing/suit/roguetown/shirt/undershirt/black, @@ -6322,21 +6773,18 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/magician) "hjY" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) +/obj/effect/decal/turfedge_neu/alt_small, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/under/town/basement) "hkt" = ( /obj/structure/bars, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) "hkQ" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/nitebeast, -/obj/item/book/rogue/law, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/mannequin, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town) "hmg" = ( /turf/open/floor/rogue/tile, /area/rogue/indoors/town/garrison) @@ -6346,9 +6794,7 @@ /turf/open/floor/rogue/tile, /area/rogue/under/town/basement) "hmS" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 26 - }, +/obj/machinery/light/rogue/wallfire/candle/blue, /obj/structure/chair/bench/couchablack/r, /turf/open/floor/carpet/inn, /area/rogue/under/town/basement) @@ -6362,6 +6808,12 @@ icon_state = "weird1" }, /area/rogue/indoors/town/shop) +"hnp" = ( +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield) "hnz" = ( /obj/structure/table/wood{ dir = 10; @@ -6378,14 +6830,6 @@ }, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) -"hop" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/light/rogue/wallfire/candle{ - pixel_x = 32; - pixel_y = 0 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) "hoy" = ( /obj/structure/table/wood, /obj/item/storage/roguebag, @@ -6395,6 +6839,10 @@ "hoB" = ( /turf/open/water/cleanshallow, /area/rogue/under/town/sewer) +"hoG" = ( +/obj/structure/chair/wood/rogue/chair_noble, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/outdoors/town/roofs) "hpg" = ( /obj/structure/stairs/stone, /turf/open/floor/rogue/cobble, @@ -6410,6 +6858,17 @@ }, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) +"hpO" = ( +/obj/structure/table/wood{ + dir = 9; + icon_state = "largetable" + }, +/obj/item/reagent_containers/glass/cup/wooden, +/obj/item/reagent_containers/glass/bottle/rogue/wine{ + pixel_x = 11 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "hpS" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/rogue/wallfire/candle/blue/l{ @@ -6561,14 +7020,16 @@ /obj/effect/decal/cleanable/dirt/cobweb, /turf/open/floor/rogue/dirt/road, /area/rogue/under/town/basement) -"hyI" = ( -/obj/structure/fireaxecabinet/south, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) "hyX" = ( /obj/machinery/light/rogue/wallfire/candle/blue, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/shop) +"hzl" = ( +/obj/structure/chair/wood/rogue/chair_noble{ + dir = 1 + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/outdoors/town/roofs) "hAp" = ( /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/shop) @@ -6642,12 +7103,11 @@ /turf/open/water/swamp, /area/rogue/outdoors/town) "hDT" = ( -/obj/structure/chair/wood/rogue{ - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 }, +/obj/effect/decal/turfedge_neu/alt_small, +/turf/open/floor/rogue/cobble/mossy/alt, /area/rogue/under/town/basement) "hFf" = ( /obj/structure/flora/ausbushes/brflowers, @@ -6698,10 +7158,25 @@ /obj/structure/fluff/nest, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) +"hHM" = ( +/obj/structure/table/wood{ + dir = 1; + icon_state = "tablewood1" + }, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/manor) "hHT" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/tile/bfloorz, /area/rogue/indoors/town/bath) +"hIb" = ( +/obj/structure/mineral_door/wood/red/iv, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "hIh" = ( /obj/item/clothing/head/peaceflower{ pixel_x = -2; @@ -6716,6 +7191,12 @@ /obj/item/grown/log/tree/small, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town) +"hIs" = ( +/obj/structure/roguemachine/scomm{ + pixel_y = -32 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern) "hIN" = ( /obj/structure/flora/roguegrass/bush_meagre, /turf/open/floor/rogue/dirt, @@ -6729,8 +7210,8 @@ /obj/structure/rack/rogue, /obj/item/rogueweapon/sword/iron, /obj/item/rogueweapon/sword/iron{ - pixel_y = -3; - pixel_x = 3 + pixel_x = 3; + pixel_y = -3 }, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) @@ -6781,9 +7262,9 @@ /area/rogue/indoors/town/dwarfin) "hLj" = ( /obj/structure/closet/crate/chest/wicker, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, /turf/open/floor/rogue/ruinedwood{ dir = 1; icon_state = "vertw" @@ -6853,9 +7334,11 @@ }, /area/rogue/indoors/town/vault) "hQc" = ( -/obj/structure/chair/wood, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/obj/effect/decal/turfedge_neu/alt{ + dir = 6 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/under/town/basement) "hQe" = ( /obj/structure/mineral_door/wood{ locked = 1; @@ -6876,43 +7359,27 @@ /turf/open/floor/rogue/wood, /area/rogue/under/town/basement) "hRn" = ( -/obj/structure/table/wood{ - dir = 4; - icon_state = "largetable" - }, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/peppermill{ - pixel_x = -8; - pixel_y = -13 - }, -/turf/open/floor/rogue/tile{ - icon_state = "tavern" - }, +/obj/structure/roguemachine/scomm/l, +/turf/open/floor/rogue/ruinedwood/spiralfade, /area/rogue/indoors/town/tavern) "hRF" = ( /obj/structure/closet/crate/chest/crate, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/dwarfin) "hRM" = ( -/obj/structure/mineral_door/wood/deadbolt, +/obj/structure/mineral_door/wood/deadbolt{ + dir = 1 + }, /turf/open/floor/rogue/cobblerock, /area/rogue/indoors/town) -"hSh" = ( -/obj/structure/chair/wood/rogue{ - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town/tavern) "hSn" = ( -/obj/machinery/light/rogue/wallfire/candle/blue/r{ - pixel_x = 0; +/obj/machinery/light/rogue/wallfire{ pixel_y = 32 }, -/turf/open/floor/rogue/cobble, +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 + }, +/turf/open/floor/rogue/cobble/mossy/alt, /area/rogue/under/town/basement) "hSS" = ( /obj/structure/chair/stool/rogue, @@ -6957,22 +7424,6 @@ }, /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/manor) -"hUr" = ( -/obj/structure/table/wood{ - dir = 5; - icon_state = "largetable" - }, -/obj/structure/fluff/millstone, -/turf/open/floor/rogue/tile{ - icon_state = "tavern" - }, -/area/rogue/indoors/town/tavern) -"hUt" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 8 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) "hUJ" = ( /obj/structure/mineral_door/wood{ icon_state = "wcv"; @@ -6992,7 +7443,7 @@ /obj/structure/mineral_door/wood/deadbolt{ dir = 1 }, -/turf/open/floor/rogue/cobblerock, +/turf/open/floor/rogue/cobblerock_alt, /area/rogue/outdoors/rtfield) "hVW" = ( /obj/effect/decal/cleanable/dirt, @@ -7038,6 +7489,12 @@ "hYG" = ( /turf/open/floor/rogue/carpet, /area/rogue/indoors/town) +"hYP" = ( +/obj/machinery/light/rogue/wallfire{ + pixel_y = 32 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "iac" = ( /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) @@ -7047,14 +7504,14 @@ /area/rogue/under/town/basement) "iap" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/spear, -/obj/item/rogueweapon/spear{ - pixel_y = -14; - pixel_x = -20 +/obj/item/rogueweapon/polearm/spear, +/obj/item/rogueweapon/polearm/spear{ + pixel_x = -20; + pixel_y = -14 }, -/obj/item/rogueweapon/spear{ - pixel_y = -10; - pixel_x = -21 +/obj/item/rogueweapon/polearm/spear{ + pixel_x = -21; + pixel_y = -10 }, /obj/machinery/light/rogue/torchholder/l, /turf/open/floor/rogue/blocks, @@ -7079,8 +7536,8 @@ /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "iaV" = ( -/obj/structure/closet/crate/chest/neu_iron, -/turf/open/floor/rogue/cobble, +/obj/structure/roguemachine/mail, +/turf/open/floor/rogue/cobble/alt, /area/rogue/under/town/basement) "iaZ" = ( /obj/structure/lever/wall{ @@ -7089,10 +7546,16 @@ }, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) +"ibr" = ( +/obj/structure/giantfur{ + pixel_x = 12 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "ibs" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/item/reagent_containers/glass/cup, /turf/open/floor/rogue/blocks, @@ -7105,7 +7568,7 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) "icd" = ( -/obj/structure/rack/rogue, +/obj/structure/bookcase/random/apocrypha, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -7115,10 +7578,6 @@ dir = 1 }, /area/rogue/indoors) -"icL" = ( -/obj/structure/closet/crate/roguecloset/inn, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) "iez" = ( /obj/structure/stairs/fancy/l{ dir = 1 @@ -7165,10 +7624,8 @@ /turf/open/floor/rogue/herringbone, /area/rogue/under/town/basement) "igP" = ( -/obj/structure/chair/bench/ultimacouch/r{ - icon_state = "ultimacochright" - }, -/turf/open/floor/carpet/purple, +/obj/structure/roguemachine/scomm, +/turf/open/floor/rogue/carpet/green, /area/rogue/indoors/town/tavern) "igQ" = ( /obj/structure/fluff/railing/border, @@ -7185,11 +7642,11 @@ }, /area/rogue/indoors/town/shop) "ihy" = ( -/obj/structure/stairs/stone{ - dir = 4 +/obj/effect/decal/turfedge_neu/alt{ + dir = 5 }, -/turf/open/floor/rogue/blocks/green, -/area/rogue/under/town/sewer) +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/under/town/basement) "iiw" = ( /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" @@ -7205,6 +7662,12 @@ }, /turf/open/floor/rogue/church, /area/rogue/indoors/town/church/chapel) +"ijC" = ( +/obj/structure/fluff/railing/border{ + dir = 10 + }, +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/town/roofs) "ikj" = ( /obj/structure/chair/wood/rogue{ dir = 4 @@ -7213,13 +7676,8 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/church) "iks" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "tablewood1" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, +/obj/structure/stairs/stone, +/turf/open/floor/rogue/cobble/mossy, /area/rogue/under/town/basement) "ikN" = ( /obj/effect/spawner/roguemap/hauntz_random, @@ -7254,6 +7712,16 @@ }, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/rtfield) +"ilP" = ( +/obj/structure/chair/wood/rogue{ + dir = 4 + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern) +"ilU" = ( +/obj/structure/bookcase/random/eoratica, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/manor) "imw" = ( /obj/structure/flora/roguetree, /turf/open/floor/rogue/dirt, @@ -7261,26 +7729,41 @@ "imH" = ( /turf/open/floor/rogue/tile, /area/rogue/indoors) +"ing" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 8; + name = "Sewage Access" + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "ioS" = ( -/obj/structure/table/wood{ - dir = 4; - icon_state = "largetable" +/obj/effect/decal/turfedge_neu/alt{ + dir = 6 }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) +/obj/effect/decal/cleanable/dirt/cobweb, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/under/town/basement) "ipE" = ( /obj/machinery/light/rogue/wallfire/candle, /obj/structure/rack/rogue, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/church) "ipK" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/carpet/purple, -/area/rogue/indoors/town/tavern) +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/under/town/basement) "ipW" = ( /obj/structure/fluff/statue/knight/interior/r, /turf/open/floor/rogue/grass, /area/rogue/indoors/town/church) +"iqg" = ( +/obj/structure/fluff/railing/border{ + dir = 4 + }, +/obj/structure/fluff/railing/border{ + dir = 10 + }, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/tavern) "iqh" = ( /obj/structure/mineral_door/wood{ locked = 1; @@ -7368,11 +7851,11 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/under/cave) "itr" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/under/town/basement) "itP" = ( /obj/machinery/light/rogue/wallfire/candle/blue{ pixel_y = -32 @@ -7384,7 +7867,7 @@ /turf/open/floor/rogue/blocks/paving, /area/rogue/indoors/town/dwarfin) "iuK" = ( -/obj/structure/roguemachine/vendor, +/obj/structure/roguemachine/vendor/steward, /turf/closed/wall/mineral/rogue/craftstone, /area/rogue/indoors/town/bath) "ivy" = ( @@ -7395,7 +7878,7 @@ /turf/open/floor/rogue/ruinedwood/turned/darker, /area/rogue/indoors/town) "ivQ" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/machinery/light/rogue/torchholder{ dir = 4 }, @@ -7412,8 +7895,12 @@ "ixF" = ( /turf/open/transparent/openspace, /area/rogue/indoors/town) +"iyD" = ( +/obj/structure/mineral_door/wood/red/iii, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern) "iyE" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/curtain/bounty{ color = "grey" }, @@ -7432,6 +7919,14 @@ icon_state = "weird1" }, /area/rogue/indoors/town/manor) +"izm" = ( +/obj/structure/closet/crate/chest/crafted, +/obj/item/reagent_containers/food/snacks/produce/oat, +/obj/item/reagent_containers/food/snacks/produce/oat, +/obj/item/reagent_containers/food/snacks/produce/oat, +/obj/item/reagent_containers/food/snacks/produce/oat, +/turf/open/floor/rogue/ruinedwood, +/area/rogue/indoors/town) "izG" = ( /obj/machinery/light/rogue/torchholder{ dir = 8 @@ -7445,7 +7940,7 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) "izY" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/machinery/light/rogue/wallfire/candle, /obj/structure/closet/crate/chest/neu, /obj/item/rope/chain, @@ -7533,7 +8028,7 @@ /turf/open/floor/rogue/churchrough, /area/rogue/indoors/town/church/chapel) "iFX" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -7557,10 +8052,6 @@ /obj/machinery/light/rogue/torchholder/l, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) -"iId" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) "iIe" = ( /obj/structure/closet/crate/chest/old_crate, /obj/item/roguekey/mercenary, @@ -7599,10 +8090,8 @@ /turf/open/transparent/openspace, /area/rogue) "iJv" = ( -/obj/item/chair/stool/bar/rogue, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/blocks, +/obj/effect/decal/turfedge_neu/alt, +/turf/open/floor/rogue/cobble/mossy/alt, /area/rogue/under/town/basement) "iJL" = ( /obj/machinery/light/rogue/firebowl/stump, @@ -7613,12 +8102,8 @@ /turf/closed/wall/mineral/rogue/stone/moss, /area/rogue/indoors/town/bath) "iKX" = ( -/obj/structure/fluff/railing/border{ - dir = 1 - }, -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/indoors/town/tavern) "iMg" = ( /obj/structure/roguewindow/stained, /turf/open/floor/rogue/blocks, @@ -7641,7 +8126,7 @@ /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/church) "iNc" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/flora/roguegrass/bush_meagre, @@ -7671,22 +8156,17 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) "iOt" = ( -/obj/structure/table/wood{ - dir = 9; - icon_state = "largetable" +/obj/effect/decal/turfedge_neu/alt_small{ + dir = 8 }, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/under/town/basement) "iPE" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) -"iQc" = ( -/obj/structure/flora/ausbushes/ppflowers, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) "iQf" = ( /obj/structure/stairs{ dir = 4 @@ -7710,14 +8190,21 @@ /turf/closed/wall/mineral/rogue/wooddark/window, /area/rogue/indoors/town/garrison) "iSc" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/cobble, +/obj/structure/fluff/walldeco/innsign/saiga{ + pixel_x = -5; + pixel_y = 2 + }, +/turf/open/floor/rogue/cobble/mossy/alt, /area/rogue/outdoors/town) "iSr" = ( /obj/structure/closet/crate/roguecloset/dark, /obj/item/alch/bone, /obj/item/alch/sinew, /obj/item/alch/sinew, +/obj/item/alch/viscera, +/obj/item/alch/bone, +/obj/item/alch/bone, +/obj/item/alch/horn, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/magician) "iSx" = ( @@ -7745,7 +8232,7 @@ /obj/structure/closet/crate/roguecloset/inn/south{ pixel_y = 8 }, -/obj/item/rogueweapon/huntingknife/idagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, /turf/open/floor/rogue/wood/nosmooth, /area/rogue/indoors/town/bath) "iTS" = ( @@ -7768,22 +8255,20 @@ "iUq" = ( /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) -"iVi" = ( -/obj/structure/table/wood{ - dir = 5; - icon_state = "largetable" - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) "iVk" = ( /obj/item/rogueweapon/mace/cudgel, /obj/structure/rack/rogue, /obj/item/rogueweapon/mace/cudgel{ - pixel_y = -3; - pixel_x = 4 + pixel_x = 4; + pixel_y = -3 }, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) +"iWb" = ( +/obj/item/bedsheet/rogue/cloth, +/obj/structure/bed/rogue/inn, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "iWi" = ( /obj/structure/closet/crate/roguecloset/inn/south, /obj/effect/decal/cleanable/dirt/dust, @@ -7806,8 +8291,11 @@ /obj/machinery/light/rogue/wallfire/candle/l, /turf/open/floor/rogue/naturalstone, /area/rogue/under/town/basement) +"iXu" = ( +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/rtfield) "iXx" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt, @@ -7833,7 +8321,7 @@ lockid = "sheriff"; name = "captain's room door" }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/wood, @@ -7857,12 +8345,8 @@ /turf/open/floor/rogue/tile, /area/rogue/indoors/town/bath) "iZb" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomhunt"; - name = "HUNT ROOM" - }, -/turf/open/floor/rogue/wood, +/obj/structure/roguemachine/scomm/r, +/turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/tavern) "iZl" = ( /obj/structure/flora/roguetree/burnt, @@ -7875,7 +8359,7 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) "jar" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /obj/structure/flora/roguegrass, @@ -7901,6 +8385,15 @@ }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) +"jcf" = ( +/obj/structure/fluff/railing/border{ + dir = 6 + }, +/obj/structure/fluff/walldeco/customflag{ + pixel_x = -32 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern) "jcg" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/cobweb/cobweb2, @@ -7932,10 +8425,6 @@ /obj/effect/spawner/roguemap/hauntz_random, /turf/open/floor/rogue/wood, /area/rogue/outdoors/town) -"jea" = ( -/obj/structure/chair/bench, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) "jeb" = ( /obj/structure/chair/wood/rogue/fancy{ dir = 4 @@ -7956,6 +8445,7 @@ "jfK" = ( /obj/structure/rack/rogue, /obj/item/roguegem/blue, +/obj/item/rogueweapon/knife/dagger/silver, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -8022,7 +8512,7 @@ }, /area/rogue/outdoors/rtfield) "jkM" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/structure/fluff/walldeco/wantedposter/l, @@ -8086,6 +8576,10 @@ /mob/living/carbon/human/species/skeleton/npc/warrior/skilled, /turf/open/floor/rogue/blocks/green, /area/rogue/under/town/sewer) +"jpz" = ( +/obj/structure/mineral_door/wood/red/i, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "jqe" = ( /obj/structure/fluff/walldeco/customflag{ pixel_x = 32 @@ -8106,13 +8600,11 @@ }, /area/rogue/indoors/town/church) "jrT" = ( -/obj/structure/chair/wood/rogue{ +/obj/effect/decal/turfedge_neu/alt_small{ dir = 4 }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/tavern) +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/under/town/basement) "jsp" = ( /obj/effect/decal/remains/wolf, /turf/open/floor/rogue/grass, @@ -8137,10 +8629,6 @@ /obj/structure/table/wood{ icon_state = "longtable" }, -/obj/effect/holodeck_effect/cards{ - pixel_x = -7; - pixel_y = 11 - }, /obj/item/storage/belt/rogue/pouch{ pixel_y = 8 }, @@ -8153,6 +8641,15 @@ }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) +"jui" = ( +/obj/structure/fluff/railing/border, +/obj/effect/decal/turfedge_neu/mossy, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/tavern) +"juA" = ( +/obj/structure/flora/roguegrass/bush, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern) "juU" = ( /obj/structure/fluff/walldeco/church/line{ dir = 1 @@ -8161,7 +8658,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "jvp" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/cobblerock, @@ -8172,7 +8669,8 @@ /area/rogue/under/town/sewer) "jvw" = ( /obj/structure/mineral_door/wood{ - lockid = "nightmaiden" + lockid = "nightmaiden"; + name = "Balcony" }, /turf/open/floor/rogue/wood/nosmooth, /area/rogue/indoors/town/bath) @@ -8180,6 +8678,10 @@ /obj/item/reagent_containers/glass/bucket/wooden, /turf/open/floor/rogue/grass, /area/rogue/indoors/town/church) +"jwP" = ( +/obj/effect/decal/turfedge_neu/mossy_small, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/tavern) "jxC" = ( /obj/structure/fluff/railing/wood{ dir = 8; @@ -8226,11 +8728,10 @@ /turf/open/floor/rogue/twig, /area/rogue/indoors/town) "jAr" = ( -/obj/structure/table/wood{ - dir = 6; - icon_state = "largetable" +/obj/structure/fluff/railing/border{ + dir = 5 }, -/turf/open/floor/carpet/red, +/turf/open/floor/rogue/wood/saiga, /area/rogue/indoors/town/tavern) "jAy" = ( /obj/item/roguecoin/copper, @@ -8243,14 +8744,8 @@ /turf/open/floor/rogue/churchmarble, /area/rogue/indoors/town/church/chapel) "jBk" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/obj/item/dice, -/obj/structure/table/wood{ - dir = 1; - icon_state = "tablewood1" - }, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) +/turf/open/floor/rogue/cobble/mossy, +/area/rogue/under/town/basement) "jBA" = ( /obj/structure/fluff/walldeco/rpainting, /turf/closed/wall/mineral/rogue/craftstone, @@ -8290,6 +8785,10 @@ }, /turf/open/floor/rogue/concrete, /area/rogue/outdoors/town) +"jCY" = ( +/obj/structure/stairs/stone, +/turf/open/floor/rogue/woodturned, +/area/rogue/indoors/town/tavern) "jDu" = ( /obj/structure/chair/wood/rogue/fancy{ dir = 8 @@ -8301,7 +8800,7 @@ /turf/open/floor/rogue/concrete, /area/rogue/indoors/town/garrison) "jDJ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/fluff/dryingrack, @@ -8353,7 +8852,7 @@ /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/church) "jHD" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/item/reagent_containers/glass/cup, @@ -8361,7 +8860,7 @@ dir = 5; icon_state = "largetable" }, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /obj/structure/fluff/millstone{ pixel_y = 7 }, @@ -8374,8 +8873,8 @@ /turf/open/floor/rogue/wood, /area/rogue/under/town/basement) "jHS" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/blocks, +/obj/structure/roguemachine/scomm/r, +/turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "jIa" = ( /obj/item/clothing/suit/roguetown/shirt/rags, @@ -8420,10 +8919,13 @@ /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/church) "jKq" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/closet/crate/chest/wicker, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) +/obj/structure/mineral_door/wood/red{ + locked = 1; + lockid = "tavern"; + name = "Kitchen" + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "jKR" = ( /obj/structure/chair/wood/rogue{ dir = 8 @@ -8431,7 +8933,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "jLq" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/structure/table/wood{ @@ -8460,7 +8962,7 @@ /turf/closed/wall/mineral/rogue/wooddark/horizontal, /area/rogue/indoors/town/dwarfin) "jNv" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/curtain/bounty{ color = "grey" }, @@ -8521,10 +9023,6 @@ /obj/item/reagent_containers/glass/bucket/wooden, /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) -"jRB" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) "jRL" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/cobble, @@ -8552,33 +9050,25 @@ icon_state = "weird1" }, /area/rogue/indoors/town) -"jSs" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_x = -32 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) "jSD" = ( /turf/open/floor/rogue/dirt, /area/rogue/outdoors/rtfield) "jUe" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 4 - }, -/obj/structure/chair/wood/rogue{ - dir = 4 +/obj/structure/fluff/statue/gargoyle/moss, +/obj/effect/decal/turfedge_neu/alt_small{ + dir = 8 }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/town/roofs) +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/under/town/basement) "jUn" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/idagger/steel/special, +/obj/item/rogueweapon/knife/dagger/steel/special, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "jUB" = ( /obj/structure/mineral_door/wood{ - lockid = "apartment4"; locked = 1; + lockid = "apartment4"; name = "Apartment IV" }, /turf/open/floor/rogue/twig, @@ -8595,21 +9085,21 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "jVf" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "tablewood1" - }, -/obj/item/paper/scroll, -/obj/item/natural/feather, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" +/obj/structure/giantfur, +/obj/effect/decal/turfedge_neu/alt_small{ + dir = 4 }, +/turf/open/floor/rogue/cobble/mossy/alt, /area/rogue/under/town/basement) "jVq" = ( /turf/closed/wall/mineral/rogue/roofwall/center, /area/rogue/indoors/town/garrison) +"jVv" = ( +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern) "jWo" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/curtain/bounty{ color = "grey" }, @@ -8617,11 +9107,12 @@ icon_state = "weird1" }, /area/rogue/indoors/town) -"jWZ" = ( -/obj/structure/table/wood/nice, -/obj/item/candle/yellow, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +"jWH" = ( +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield) "jXp" = ( /obj/structure/closet/crate/chest/old_crate, /obj/item/rogueweapon/pitchfork, @@ -8652,6 +9143,7 @@ "jYf" = ( /obj/structure/rack/rogue, /obj/item/reagent_containers/glass/bottle/rogue/healthpot, +/obj/item/reagent_containers/glass/bottle/rogue/strongmanapot, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -8666,19 +9158,19 @@ /obj/machinery/light/rogue/torchholder/c, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) -"jYL" = ( -/obj/item/natural/worms/leeches{ - pixel_x = 7; - pixel_y = -8 - }, -/obj/item/natural/worms/leeches{ - pixel_x = -1; - pixel_y = 1 +"jYG" = ( +/obj/structure/chair/wood/rogue{ + dir = 4 }, -/obj/item/natural/worms/leeches{ - pixel_x = -10; - pixel_y = 10 +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" }, +/area/rogue/indoors/town/manor) +"jYL" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/natural/worms/leech/propaganda, +/obj/item/natural/worms/leech/propaganda, +/obj/item/natural/worms/leech/propaganda, /turf/open/water/sewer, /area/rogue/under/town/basement) "jYN" = ( @@ -8688,10 +9180,11 @@ /turf/open/floor/rogue/wood/nosmooth, /area/rogue/indoors/town) "jZe" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/light/rogue/wallfire/candle/blue/r{ - pixel_x = 0; - pixel_y = 32 +/obj/structure/chair/wood/rogue{ + dir = 4 + }, +/obj/effect/landmark/start/adventurer{ + dir = 4 }, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) @@ -8709,10 +9202,23 @@ /obj/structure/fluff/wallclock, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/shelter/town/sargoth) +"kaU" = ( +/obj/effect/decal/turfedge_neu{ + dir = 8; + icon_state = "borderfall" + }, +/obj/machinery/light/rogue/wallfire/candle/weak{ + pixel_y = -27 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "kbl" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) +/obj/structure/table/wood{ + dir = 1; + icon_state = "largetable" + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "kbG" = ( /obj/structure/stairs{ dir = 8 @@ -8732,11 +9238,8 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/rtfield) "kcf" = ( -/obj/structure/fluff/railing/border{ - dir = 10 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) +/turf/open/floor/rogue/blocks/stonered, +/area/rogue/outdoors/town) "kcg" = ( /obj/structure/closet/crate/chest/neu, /obj/machinery/light/rogue/wallfire/candle{ @@ -8750,6 +9253,13 @@ }, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) +"kcK" = ( +/obj/structure/fluff/railing/border, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 4 + }, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/tavern) "kcT" = ( /obj/structure/mineral_door/wood{ locked = 1; @@ -8761,9 +9271,13 @@ }, /area/rogue/indoors/town/manor) "kda" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) +"kdj" = ( +/obj/structure/mineral_door/wood/red/v, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "kdy" = ( /turf/open/floor/rogue/metal, /area/rogue/indoors/town) @@ -8771,14 +9285,18 @@ /turf/closed/wall/mineral/rogue/craftstone, /area/rogue/under/town/basement) "kdC" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/rogueweapon/mace/wsword, -/obj/item/clothing/suit/roguetown/shirt/rags, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) +/obj/structure/table/wood{ + dir = 1; + icon_state = "largetable" + }, +/obj/item/candle/yellow/lit/infinite{ + pixel_y = 6 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "kdE" = ( -/obj/effect/decal/cobbleedge, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu, +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/wood, @@ -8791,16 +9309,8 @@ /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/rtfield) "kes" = ( -/obj/structure/mineral_door/wood/window{ - lockid = "tavern" - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"keu" = ( -/obj/machinery/light/rogue/oven/south, -/turf/open/floor/rogue/tile{ - icon_state = "tavern" - }, +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/ruinedwood/chevron, /area/rogue/indoors/town/tavern) "keF" = ( /obj/effect/decal/cleanable/dirt/dust, @@ -8841,16 +9351,11 @@ /area/rogue/outdoors/town) "kfX" = ( /obj/structure/table/wood{ - dir = 6; + dir = 5; icon_state = "largetable" }, -/obj/item/reagent_containers/glass/bucket/pot{ - pixel_y = 7 - }, -/turf/open/floor/rogue/tile{ - icon_state = "tavern" - }, -/area/rogue/indoors/town/tavern) +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "kgn" = ( /obj/structure/bed/rogue/inn/double, /obj/item/bedsheet/rogue/fabric_double, @@ -8905,7 +9410,7 @@ /area/rogue/indoors/town/vault) "kiG" = ( /obj/structure/fluff/clock, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/wood, @@ -8916,11 +9421,12 @@ /obj/item/reagent_containers/food/snacks/produce/onion, /obj/item/reagent_containers/food/snacks/produce/cabbage, /obj/item/reagent_containers/food/snacks/rogue/cheddar, -/obj/item/reagent_containers/honeycomb, /obj/item/reagent_containers/food/snacks/produce/potato, /obj/item/reagent_containers/food/snacks/produce/potato, /obj/item/reagent_containers/food/snacks/rogue/truffles, /obj/item/reagent_containers/food/snacks/rogue/truffles, +/obj/item/reagent_containers/food/snacks/produce/onion, +/obj/item/reagent_containers/food/snacks/rogue/honey, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "kjw" = ( @@ -8954,10 +9460,6 @@ /obj/item/reagent_containers/glass/bottle/rogue/elfblue, /turf/open/floor/rogue/blocks/green, /area/rogue/under/town/sewer) -"klw" = ( -/obj/machinery/light/rogue/oven, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/magician) "klx" = ( /obj/structure/fluff/railing/border{ dir = 1 @@ -9073,11 +9575,11 @@ /turf/open/floor/rogue/blocks/green, /area/rogue/under/town/sewer) "ksr" = ( -/obj/structure/fluff/railing/border{ - dir = 6 +/obj/effect/decal/turfedge_neu/mossy{ + dir = 9 }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) "ktp" = ( /obj/structure/fluff/railing/fence{ dir = 8 @@ -9089,6 +9591,15 @@ dir = 8 }, /area/rogue/outdoors/mountains) +"ktH" = ( +/obj/structure/mineral_door/wood{ + icon_state = "wcv"; + locked = 1; + lockid = "manor"; + name = "Personal Library" + }, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/manor) "kum" = ( /obj/structure/fluff/railing/border{ dir = 8 @@ -9113,18 +9624,18 @@ /obj/structure/roguemachine/atm, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town) +"kvF" = ( +/obj/structure/chair/wood/rogue/chair_noble, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town) "kvI" = ( /obj/structure/table/wood/plain, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "kvJ" = ( -/obj/structure/table/wood{ - dir = 6; - icon_state = "largetable" - }, -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) +/turf/closed/wall/mineral/rogue/decostone/cand, +/area/rogue/under/town/basement) "kwa" = ( /obj/structure/fluff/railing/border{ dir = 5 @@ -9161,6 +9672,15 @@ /obj/structure/bars, /turf/open/floor/rogue/blocks, /area/rogue/indoors) +"kyq" = ( +/obj/structure/bookcase/random, +/obj/item/book/rogue/fishing, +/obj/item/book/rogue/festus, +/obj/item/book/rogue/advice_soup, +/obj/item/book/rogue/advice_farming, +/obj/item/book/rogue/cardgame, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/tavern) "kyx" = ( /obj/structure/rack/rogue, /obj/item/natural/feather, @@ -9207,6 +9727,18 @@ /obj/item/burial_shroud, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) +"kzV" = ( +/obj/structure/table/wood{ + dir = 5; + icon_state = "largetable" + }, +/obj/item/natural/stone{ + pixel_x = 6; + pixel_y = 9 + }, +/obj/item/rogueweapon/knife/stone, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "kAa" = ( /obj/structure/closet/crate/chest/old_crate, /obj/item/rogueweapon/sickle, @@ -9218,14 +9750,12 @@ }, /area/rogue/indoors) "kAc" = ( -/obj/structure/mineral_door/wood{ - lockid = "tavern"; - name = "MEETING ROOM" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" +/obj/structure/table/wood{ + icon_state = "largetable" }, -/area/rogue/indoors/town/tavern) +/obj/item/reagent_containers/glass/bowl, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "kAq" = ( /mob/living/simple_animal/hostile/retaliate/rogue/wolf{ del_on_deaggro = 0 @@ -9237,8 +9767,14 @@ /turf/closed/wall/mineral/rogue/pipe, /area/rogue/under/cave) "kBc" = ( -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/tavern) +/obj/structure/table/wood{ + icon_state = "largetable" + }, +/obj/item/paper/scroll{ + pixel_y = 10 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "kBp" = ( /obj/structure/fluff/railing/border{ dir = 10 @@ -9246,6 +9782,11 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/ruinedwood/turned/darker, /area/rogue/indoors/town) +"kBu" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/manor) "kBy" = ( /obj/structure/table/wood{ dir = 6; @@ -9273,6 +9814,10 @@ }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) +"kDd" = ( +/obj/structure/fluff/clock, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "kDg" = ( /obj/structure/stairs, /turf/open/transparent/openspace, @@ -9283,20 +9828,29 @@ }, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) +"kDV" = ( +/obj/structure/chair/bench/ultimacouch/r{ + icon_state = "ultimacochright" + }, +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "kEn" = ( /obj/structure/closet/crate/roguecloset/lord, /obj/item/clothing/suit/roguetown/armor/gambeson/arming, -/obj/item/rogueweapon/sword/rapier/lord, +/obj/item/rogueweapon/sword/sabre/lord, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, /area/rogue/indoors/town/manor) "kEw" = ( -/turf/closed/wall/mineral/rogue/pipe{ - dir = 1; - icon_state = "iron_corner" +/obj/structure/table/wood{ + dir = 6; + icon_state = "largetable" }, -/area/rogue/under/cave) +/obj/item/reagent_containers/glass/cup/wooden, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "kEx" = ( /obj/structure/fluff/railing/fence{ dir = 8 @@ -9310,7 +9864,7 @@ "kEC" = ( /obj/machinery/light/rogue/wallfire/candle/l, /turf/open/floor/rogue/blocks/green, -/area/rogue/under/cave) +/area/rogue/under/town/basement) "kFj" = ( /obj/structure/fluff/railing/border{ dir = 6 @@ -9325,11 +9879,14 @@ }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/church) +"kFt" = ( +/obj/effect/decal/turfedge_neu/alt_small{ + dir = 8 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/town) "kFU" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/knowledge1, -/obj/item/book/rogue/law, -/obj/item/book/rogue/necra, +/obj/structure/fluff/clock/dense, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) "kGu" = ( @@ -9354,7 +9911,7 @@ /obj/structure/rack/rogue, /obj/item/cooking/pan, /obj/item/reagent_containers/glass/bucket/pot, -/obj/item/kitchen/rollingpin, +/obj/item/rogueweapon/mace/woodclub/rollingpin, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/church) "kGD" = ( @@ -9368,7 +9925,7 @@ /area/rogue/indoors/town/shop) "kIj" = ( /obj/structure/fluff/statue{ - name = "The Veiled Lady" + name = "The Undermaiden" }, /obj/structure/flora/ausbushes/sparsegrass, /turf/open/floor/rogue/dirt/road, @@ -9382,6 +9939,13 @@ /obj/machinery/light/rogue/firebowl/stump, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/manor) +"kIR" = ( +/obj/machinery/light/rogue/wallfire/candle/blue{ + pixel_x = 32; + pixel_y = 0 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/town/basement) "kJd" = ( /obj/structure/handcart{ dir = 4 @@ -9404,15 +9968,12 @@ /obj/machinery/light/rogue/firebowl/stump, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) -"kLg" = ( -/obj/structure/fluff/railing/wood{ - dir = 4 - }, -/obj/structure/fluff/railing/wood{ - dir = 4 +"kLH" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 8 }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern) "kLM" = ( /obj/structure/fluff/railing/wood{ dir = 1; @@ -9420,15 +9981,6 @@ }, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) -"kLR" = ( -/obj/structure/rack/rogue/shelf/biggest, -/obj/structure/rack/rogue/shelf, -/obj/item/storage/roguebag, -/obj/item/candle/yellow{ - pixel_y = 42 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) "kMa" = ( /obj/structure/bed/rogue/wool, /obj/item/bedsheet/rogue/cloth, @@ -9468,13 +10020,16 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "kOb" = ( -/turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_corner"; - dir = 1 +/obj/structure/chair/wood/rogue{ + dir = 8 }, -/area/rogue/under/town/sewer) +/obj/effect/landmark/start/adventurer{ + dir = 8 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "kOx" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/grass, @@ -9512,6 +10067,17 @@ icon_state = "linoleum" }, /area/rogue/indoors/town/vault) +"kQb" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 6 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) +"kQu" = ( +/obj/structure/bed/rogue/inn, +/obj/item/bedsheet/rogue/cloth, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/tavern) "kQy" = ( /obj/structure/flora/roguetree/burnt, /obj/structure/fluff/railing/fence, @@ -9539,11 +10105,17 @@ /turf/open/floor/carpet/stellar, /area/rogue/indoors/town/magician) "kRR" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) +"kRU" = ( +/obj/structure/bookcase/random/archive, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" + }, +/area/rogue/indoors/town/manor) "kSf" = ( /obj/item/candle/skull/lit, /obj/structure/table/wood{ @@ -9552,16 +10124,24 @@ /turf/open/floor/carpet/stellar, /area/rogue/indoors/town/shop) "kSG" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) +"kTo" = ( +/obj/structure/table/wood{ + dir = 10; + icon_state = "largetable" + }, +/obj/item/reagent_containers/glass/bowl, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern) "kUt" = ( /obj/structure/fluff/railing/wood{ dir = 4 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/flora/roguegrass/bush_meagre, @@ -9594,7 +10174,7 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/bath) "kWj" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) @@ -9643,7 +10223,7 @@ /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) "laz" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt, @@ -9661,7 +10241,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/church) "lbL" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "lbY" = ( @@ -9669,6 +10249,12 @@ /obj/item/candle/yellow/lit, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) +"lcx" = ( +/obj/structure/fluff/railing/border{ + dir = 8 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/town) "lcA" = ( /turf/closed/mineral/rogue/bedrock, /area/rogue/outdoors/town) @@ -9678,8 +10264,8 @@ /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "lcM" = ( -/obj/effect/decal/cobbleedge, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "lcY" = ( @@ -9695,6 +10281,23 @@ /obj/item/clothing/under/roguetown/tights/black, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town) +"ldJ" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/blocks/stonered, +/area/rogue/outdoors/town) +"ldS" = ( +/obj/structure/table/wood{ + dir = 10; + icon_state = "largetable" + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern) +"leP" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield) "lfg" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/ruinedwood{ @@ -9704,12 +10307,18 @@ "lfH" = ( /turf/open/floor/rogue/tile/bath, /area/rogue/under/town/basement) +"lfT" = ( +/obj/structure/fluff/railing/border{ + dir = 10 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern) "lgi" = ( /obj/structure/mannequin, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/shop) "lgn" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/curtain/bounty{ color = "grey" }, @@ -9745,14 +10354,6 @@ }, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) -"lhA" = ( -/obj/structure/stairs{ - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/tavern) "lhH" = ( /obj/structure/mineral_door/bars{ locked = 1; @@ -9769,10 +10370,6 @@ /area/rogue/indoors) "lji" = ( /obj/structure/rack/rogue, -/obj/item/throwing_star/ninja, -/obj/item/throwing_star/ninja, -/obj/item/throwing_star/ninja, -/obj/item/throwing_star/ninja, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/shop) "ljn" = ( @@ -9793,6 +10390,17 @@ /obj/machinery/light/rogue/torchholder/c, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) +"ljv" = ( +/obj/machinery/light/rogue/firebowl/stump, +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield) +"ljw" = ( +/obj/structure/fluff/walldeco/innsign/trophy, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/tavern) "ljP" = ( /obj/structure/closet/crate/chest/neu, /obj/item/paper, @@ -9806,6 +10414,13 @@ /obj/machinery/light/rogue/firebowl, /turf/open/floor/rogue/cobble, /area/rogue/indoors) +"lkB" = ( +/obj/structure/bookcase/random, +/obj/item/book/rogue/fishing, +/obj/item/book/rogue/mysticalfog, +/obj/item/book/rogue/festus, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "lkN" = ( /obj/structure/fluff/walldeco/maidensigil, /turf/open/floor/rogue/cobble, @@ -9817,7 +10432,7 @@ "llr" = ( /obj/structure/closet/crate/chest/neu, /obj/item/cooking/pan, -/obj/item/kitchen/rollingpin, +/obj/item/rogueweapon/mace/woodclub/rollingpin, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) "llu" = ( @@ -9858,6 +10473,15 @@ /obj/structure/ladder, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/manor) +"lod" = ( +/obj/structure/mineral_door/wood/donjon{ + dir = 8; + locked = 1; + lockid = "walls"; + name = "Gatehouse" + }, +/turf/open/floor/rogue/woodturned, +/area/rogue/indoors/town/manor) "lor" = ( /obj/machinery/light/rogue/wallfire/candle, /turf/open/floor/carpet/purple, @@ -9887,6 +10511,15 @@ /obj/structure/bed/rogue/shit, /turf/open/floor/rogue/cobblerock, /area/rogue/under/town/basement) +"lrR" = ( +/obj/structure/table/wood{ + icon_state = "tablewood1" + }, +/turf/open/floor/rogue/ruinedwood{ + dir = 1; + icon_state = "vertw" + }, +/area/rogue/indoors/town/tavern) "lrU" = ( /obj/machinery/light/rogue/torchholder/r, /turf/open/floor/carpet/royalblack, @@ -9931,11 +10564,8 @@ /turf/open/floor/rogue/carpet/lord/center, /area/rogue/indoors/town/manor) "ltJ" = ( -/obj/structure/handcart{ - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/tavern) "ltO" = ( /obj/item/natural/stone, /turf/open/floor/rogue/grass, @@ -9954,21 +10584,19 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "lub" = ( -/obj/structure/fermenting_barrel/beer, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) +/obj/structure/fluff/railing/border, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 8 + }, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/tavern) "luz" = ( /turf/closed/wall/mineral/rogue/decowood/vert, /area/rogue/indoors/town) -"luD" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/start/manorguardsman{ - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) "luF" = ( -/obj/structure/mineral_door/wood/deadbolt, +/obj/structure/mineral_door/wood/deadbolt{ + dir = 1 + }, /turf/open/floor/rogue/ruinedwood{ dir = 1; icon_state = "vertw" @@ -9978,18 +10606,18 @@ /turf/closed/wall/mineral/rogue/wooddark/vertical, /area/rogue/indoors/town/garrison) "lvx" = ( -/obj/structure/mineral_door/wood, +/obj/structure/mineral_door/wood{ + lockid = "walls"; + name = "Archer's Lookout" + }, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, /area/rogue/indoors/town/manor) "lvy" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "tablewood1" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) +/obj/structure/bars, +/turf/open/floor/rogue/blocks/green, +/area/rogue/under/town/sewer) "lvH" = ( /turf/closed/wall/mineral/rogue/craftstone, /area/rogue/indoors/town/church) @@ -10003,6 +10631,7 @@ /obj/item/natural/cloth, /obj/item/natural/cloth, /obj/item/natural/cloth, +/obj/item/broom, /turf/open/floor/rogue/twig, /area/rogue/indoors/town) "lwT" = ( @@ -10012,10 +10641,8 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors) "lxr" = ( -/obj/structure/fluff/walldeco/innsign/trophy{ - desc = "A somewhat unfitting sign for a physician's office."; - name = "Medicae Office"; - pixel_y = -32 +/obj/structure/fluff/walldeco/feldshersign{ + pixel_y = -30 }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) @@ -10026,7 +10653,7 @@ /area/rogue/indoors/town/manor) "lxz" = ( /obj/structure/closet/crate/roguecloset/dark, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /obj/item/clothing/suit/roguetown/shirt/rags, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) @@ -10071,7 +10698,7 @@ dir = 1; icon_state = "longtable" }, -/obj/item/rogueweapon/huntingknife/idagger{ +/obj/item/rogueweapon/knife/dagger{ pixel_y = 9 }, /turf/open/floor/rogue/ruinedwood/spiral, @@ -10081,7 +10708,7 @@ /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/magician) "lzO" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/grass, @@ -10095,9 +10722,15 @@ /turf/open/floor/rogue/ruinedwood/chevron, /area/rogue/indoors/town) "lAG" = ( -/obj/structure/flora/ausbushes/ywflowers, +/mob/living/simple_animal/hostile/retaliate/rogue/saigabuck/tame, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) +"lBf" = ( +/obj/machinery/light/rogue/torchholder{ + pixel_y = 26 + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern) "lBj" = ( /obj/structure/table/wood{ dir = 10; @@ -10142,8 +10775,8 @@ /area/rogue/outdoors/mountains) "lDl" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/mace/wsword, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "lDq" = ( @@ -10153,17 +10786,19 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "lDA" = ( -/obj/structure/fluff/clock, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" +/obj/structure/table/wood{ + dir = 10; + icon_state = "tablewood2" }, -/area/rogue/under/town/basement) +/obj/item/trash/applecore, +/turf/open/floor/rogue/blocks/green, +/area/rogue/under/town/sewer) "lDU" = ( /obj/structure/roguemachine/scomm, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "lDV" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/machinery/light/rogue/hearth, @@ -10178,7 +10813,7 @@ /turf/open/floor/rogue/twig, /area/rogue/indoors/town) "lGc" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/structure/table/wood{ @@ -10188,7 +10823,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/garrison) "lGf" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/dirt/road, @@ -10210,7 +10845,7 @@ }, /area/rogue/indoors/town/manor) "lGL" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/dirt/road, @@ -10321,16 +10956,17 @@ /obj/machinery/light/rogue/firebowl/stump, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) -"lOr" = ( -/obj/structure/chair/wood/rogue{ - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) "lOR" = ( /obj/structure/flora/roguetree/burnt, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/rtfield) +"lOS" = ( +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/town/roofs) "lPn" = ( /obj/item/reagent_containers/food/snacks/crow, /turf/open/floor/rogue/rooftop, @@ -10370,7 +11006,7 @@ /obj/item/clothing/cloak/stole/red, /obj/item/clothing/cloak/chasuble, /obj/item/roguekey/priest, -/obj/item/rogueweapon/woodstaff/aries, +/obj/item/rogueweapon/polearm/woodstaff/aries, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/church) "lRc" = ( @@ -10386,12 +11022,10 @@ /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) "lRn" = ( -/obj/structure/table/wood{ - dir = 9; - icon_state = "largetable" +/obj/structure/chair/wood/rogue{ + dir = 1 }, -/obj/item/toy/cards/deck/syndicate, -/turf/open/floor/carpet/red, +/turf/open/floor/rogue/ruinedwood/spiralfade, /area/rogue/indoors/town/tavern) "lRI" = ( /obj/structure/closet/crate/roguecloset/inn, @@ -10405,6 +11039,13 @@ /obj/item/clothing/under/roguetown/tights/random, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) +"lSc" = ( +/obj/structure/table/wood/nice/decorated, +/obj/item/reagent_containers/glass/cup/silver{ + pixel_y = 4 + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern) "lSj" = ( /obj/structure/mineral_door/wood/donjon{ locked = 1; @@ -10445,6 +11086,12 @@ /obj/item/reagent_containers/food/snacks/smallrat/dead, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) +"lUk" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield) "lUA" = ( /turf/closed/wall/mineral/rogue/decostone, /area/rogue/indoors/town/church/chapel) @@ -10505,14 +11152,7 @@ }, /area/rogue/indoors) "mcA" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, +/obj/structure/bookcase/random/thesis, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -10529,6 +11169,7 @@ /area/rogue/indoors/town/bath) "mcU" = ( /obj/item/bedsheet/rogue/pelt, +/obj/structure/bed/rogue/mediocre, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/church) "mdb" = ( @@ -10537,10 +11178,6 @@ }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) -"mdx" = ( -/obj/effect/landmark/start/barkeep, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) "mdQ" = ( /obj/machinery/light/rogue/torchholder{ dir = 8 @@ -10583,11 +11220,9 @@ }, /area/rogue/indoors) "mgU" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/tavern) +/obj/item/roguebin/water/gross, +/turf/open/floor/rogue/blocks/green, +/area/rogue/under/town/sewer) "mhf" = ( /obj/structure/fluff/railing/wood{ dir = 1; @@ -10639,12 +11274,18 @@ /turf/open/water/bath, /area/rogue/under/town/basement) "mjs" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town) +/obj/machinery/simple_dye_bin, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/dwarf) "mkh" = ( /turf/open/floor/rogue/cobble, /area/rogue/outdoors/mountains) +"mks" = ( +/obj/structure/stairs{ + dir = 8 + }, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/tavern) "mkv" = ( /obj/structure/mineral_door/wood/red{ locked = 1; @@ -10672,8 +11313,8 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/rtfield) "mlv" = ( -/obj/effect/decal/cobbleedge, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu, +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/cobblerock, @@ -10684,8 +11325,14 @@ }, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/garrison) +"mlU" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 10 + }, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/tavern) "mlW" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/closed/wall/mineral/rogue/roofwall/middle{ dir = 1 }, @@ -10703,21 +11350,11 @@ /turf/open/floor/rogue/churchmarble, /area/rogue/indoors/town/church/chapel) "mmx" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, +/obj/structure/bookcase/random/myths, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, /area/rogue/indoors/town/church) -"mmG" = ( -/obj/structure/fluff/railing/border{ - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/tavern) "mnS" = ( /obj/structure/flora/roguegrass, /turf/open/floor/rogue/cobble, @@ -10726,6 +11363,10 @@ /obj/machinery/light/rogue/wallfire/candle/r, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) +"mou" = ( +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/town/roofs) "moz" = ( /obj/effect/landmark/start/nightman, /turf/open/floor/carpet/royalblack, @@ -10737,10 +11378,10 @@ /turf/open/floor/rogue/twig, /area/rogue/indoors/town) "mpi" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/cobblerock, @@ -10758,6 +11399,12 @@ icon_state = "vertw" }, /area/rogue/indoors) +"mpR" = ( +/obj/structure/fluff/railing/border{ + dir = 9 + }, +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/town/roofs) "mqa" = ( /obj/item/natural/bundle/stick{ pixel_y = 14 @@ -10774,8 +11421,8 @@ /area/rogue/outdoors/town) "mql" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/bath) @@ -10819,7 +11466,7 @@ dir = 10; icon_state = "tablewood2" }, -/obj/item/rogueweapon/huntingknife/stoneknife{ +/obj/item/rogueweapon/knife/stone{ pixel_x = 4; pixel_y = -1 }, @@ -10875,6 +11522,10 @@ /obj/item/needle/thorn, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) +"muD" = ( +/obj/structure/table/wood/plain, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "muQ" = ( /obj/structure/rack/rogue/shelf/biggest, /obj/item/reagent_containers/glass/bottle/rogue, @@ -10892,19 +11543,18 @@ /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "muZ" = ( -/obj/structure/chair/wood/rogue{ - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/tavern) +/obj/machinery/light/rogue/firebowl/standing, +/turf/open/floor/rogue/blocks/green, +/area/rogue/under/town/sewer) "mvo" = ( -/turf/closed/wall/mineral/rogue/pipe{ - dir = 4; - icon_state = "iron_line" +/obj/structure/fluff/walldeco/customflag{ + pixel_x = -32 }, -/area/rogue/under/town/sewer) +/obj/effect/decal/turfedge_neu/alt{ + dir = 5 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/under/town/basement) "mvu" = ( /obj/structure/table/wood/counter/end{ dir = 8 @@ -10943,9 +11593,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) "mxO" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/blackmountain, -/obj/item/book/rogue/bookofpriests, +/obj/structure/bookcase/random/myths, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "myx" = ( @@ -10968,13 +11616,11 @@ /turf/open/floor/rogue/ruinedwood/turned, /area/rogue/indoors/town) "mzn" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomv"; - name = "ROOM V" +/obj/effect/decal/turfedge_neu/alt{ + dir = 8 }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/under/town/basement) "mzu" = ( /obj/structure/fermenting_barrel/random/water, /turf/open/floor/rogue/ruinedwood{ @@ -10996,7 +11642,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/shop) "mAc" = ( -/obj/item/roguebin/crackers, +/obj/structure/closet/crate/chest/crate/steward/hardtack, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/church) "mAr" = ( @@ -11009,11 +11655,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/dwarfin) "mAU" = ( -/obj/structure/fluff/walldeco/wantedposter{ - pixel_y = 0; - pixel_x = 32 - }, -/turf/open/floor/rogue/wood, +/turf/open/floor/rogue/ruinedwood/chevron, /area/rogue/indoors/town/tavern) "mBv" = ( /obj/structure/mineral_door/wood/fancywood{ @@ -11033,14 +11675,16 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) "mBS" = ( -/obj/structure/table/wood{ - dir = 6; - icon_state = "largetable" +/obj/item/reagent_containers/glass/bottle/rogue/beer/spottedhen{ + pixel_x = -10 }, -/turf/open/floor/rogue/tile{ - icon_state = "tile" +/obj/item/reagent_containers/glass/bottle/rogue/beer/blackgoat, +/obj/item/reagent_containers/glass/bottle/rogue/beer/hagwoodbitter{ + pixel_x = 10 }, -/area/rogue/indoors/town/tavern) +/obj/structure/rack/rogue, +/turf/open/floor/rogue/concrete, +/area/rogue/under/town/basement) "mCk" = ( /obj/structure/fluff/railing/fence{ dir = 1 @@ -11064,7 +11708,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "mCL" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -11072,12 +11716,25 @@ icon_state = "bfloorz" }, /area/rogue/indoors/town/manor) +"mCW" = ( +/obj/machinery/light/rogue/wallfire/candle/weak{ + pixel_y = -27 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "mDi" = ( /obj/structure/fluff/statue/gargoyle, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, /area/rogue/indoors/town/manor) +"mDn" = ( +/obj/structure/table/wood{ + dir = 6; + icon_state = "largetable" + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/tavern) "mDK" = ( /obj/structure/chair/wood/rogue/fancy{ dir = 4 @@ -11097,11 +11754,6 @@ /obj/item/candle/yellow, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/bath) -"mEv" = ( -/turf/open/floor/rogue/tile{ - icon_state = "tavern" - }, -/area/rogue/indoors/town/tavern) "mEG" = ( /obj/item/roguebin/water/gross, /obj/structure/mirror{ @@ -11142,8 +11794,8 @@ pixel_y = -4 }, /obj/item/roguekey/shops/shop3{ - pixel_y = 5; - pixel_x = 8 + pixel_x = 8; + pixel_y = 5 }, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town) @@ -11158,8 +11810,8 @@ /area/rogue/indoors/town/manor) "mGX" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/item/candle/yellow/lit, /turf/open/floor/rogue/wood/nosmooth, @@ -11172,11 +11824,6 @@ dir = 1 }, /area/rogue/indoors) -"mId" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/start/manorguardsman, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/manor) "mIx" = ( /obj/structure/table/wood/counter/end{ dir = 4 @@ -11185,6 +11832,10 @@ /obj/item/pestle, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) +"mJt" = ( +/obj/structure/flora/roguegrass/bush_meagre, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/town) "mJK" = ( /obj/structure/closet/crate/roguecloset, /obj/item/paper, @@ -11224,7 +11875,7 @@ /turf/open/floor/rogue/woodturned/nosmooth, /area/rogue/indoors/town/bath) "mNg" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/twig, /area/rogue/indoors/town) "mNp" = ( @@ -11248,7 +11899,7 @@ }, /area/rogue/indoors) "mNQ" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/curtain/bounty{ color = "grey" }, @@ -11263,12 +11914,13 @@ /turf/open/floor/carpet/purple, /area/rogue/indoors/town/church) "mPS" = ( -/obj/structure/chair/wood/rogue, -/obj/effect/landmark/start/adventurer, -/turf/open/floor/carpet/red, +/obj/structure/chair/wood/rogue/chair_noble{ + dir = 8 + }, +/turf/open/floor/rogue/woodturned/saiga, /area/rogue/indoors/town/tavern) "mPX" = ( -/obj/item/roguebin/water, +/obj/item/roguebin/water/gross, /turf/open/floor/rogue/tile{ icon_state = "bfloorz" }, @@ -11288,6 +11940,11 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) +"mQQ" = ( +/turf/open/floor/rogue/tile{ + icon_state = "tile" + }, +/area/rogue/indoors/town/tavern) "mQS" = ( /obj/machinery/light/rogue/wallfire/candle/r, /obj/structure/table/wood, @@ -11296,8 +11953,8 @@ /area/rogue/indoors/town) "mRW" = ( /obj/structure/fluff/walldeco/wantedposter{ - pixel_y = 0; - pixel_x = 32 + pixel_x = 32; + pixel_y = 0 }, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/manor) @@ -11320,12 +11977,6 @@ }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/church/chapel) -"mTM" = ( -/obj/structure/mineral_door/wood/violet{ - lockid = "tavern" - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/under/town/basement) "mTN" = ( /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/dwarfin) @@ -11342,11 +11993,11 @@ }, /area/rogue/under/town/basement) "mUj" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, -/obj/effect/decal/cobbleedge, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu, +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/dirt, @@ -11364,6 +12015,14 @@ }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town) +"mUK" = ( +/obj/effect/decal/turfedge_neu{ + dir = 8; + icon_state = "borderfall" + }, +/obj/structure/rogue/trophy/deer, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "mUO" = ( /obj/structure/mineral_door/wood{ locked = 1; @@ -11399,6 +12058,7 @@ pixel_y = 8 }, /obj/item/reagent_containers/glass/bucket/wooden, +/obj/item/natural/cloth, /turf/open/floor/rogue/twig, /area/rogue/indoors/town) "mXt" = ( @@ -11409,6 +12069,10 @@ /obj/machinery/light/rogue/firebowl/standing/blue, /turf/open/floor/carpet/stellar, /area/rogue/indoors/town/magician) +"mXS" = ( +/obj/structure/closet/crate/chest/crafted, +/turf/open/floor/rogue/ruinedwood, +/area/rogue/indoors/town) "mXT" = ( /obj/item/natural/stone, /turf/open/floor/rogue/grass, @@ -11426,8 +12090,8 @@ "mZk" = ( /obj/structure/fluff/customsign{ icon_state = "shitsign"; - wrotesign = "Mercenaries Guild"; - name = "SOUTH TO ROCKHILL" + name = "SOUTH TO ROCKHILL"; + wrotesign = "Mercenaries Guild" }, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) @@ -11436,11 +12100,10 @@ /turf/open/floor/rogue/carpet/lord/right, /area/rogue/indoors/town/manor) "nak" = ( -/obj/structure/table/wood{ - dir = 5; - icon_state = "largetable" +/obj/structure/fluff/railing/border{ + dir = 4 }, -/turf/open/floor/carpet/red, +/turf/open/floor/rogue/wood/saiga, /area/rogue/indoors/town/tavern) "nbg" = ( /obj/structure/fluff/railing/border{ @@ -11487,6 +12150,7 @@ "ncG" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/item/bedsheet/rogue/pelt, +/obj/structure/bed/rogue/mediocre, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/church) "ncH" = ( @@ -11507,6 +12171,9 @@ /obj/structure/closet/crate/chest/crafted, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/church) +"ndq" = ( +/turf/open/floor/carpet/purple, +/area/rogue/indoors/town/manor) "ndF" = ( /obj/structure/ladder, /obj/machinery/light/rogue/wallfire/candle/r, @@ -11545,7 +12212,7 @@ /obj/structure/fluff/walldeco/church/line{ dir = 1 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/effect/decal/cleanable/dirt/dust, @@ -11557,9 +12224,6 @@ /obj/structure/bed/rogue/shit, /turf/open/floor/rogue/concrete, /area/rogue/indoors/town/garrison) -"nfu" = ( -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/tavern) "nfv" = ( /obj/item/paper/confession, /obj/item/paper/confession, @@ -11624,11 +12288,16 @@ /area/rogue/under/town/basement) "niS" = ( /obj/structure/chair/bench, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) +"njH" = ( +/obj/structure/toilet, +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/town/tavern) "njW" = ( /obj/structure/fluff/walldeco/customflag{ pixel_y = 32 @@ -11637,6 +12306,14 @@ icon_state = "bfloorz" }, /area/rogue/indoors/town/manor) +"nkn" = ( +/obj/structure/table/wood{ + dir = 6; + icon_state = "largetable" + }, +/obj/item/reagent_containers/glass/cup/wooden, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "nkp" = ( /obj/structure/flora/newtree, /obj/structure/flora/newtree, @@ -11688,6 +12365,12 @@ /obj/structure/roguemachine/stockpile, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town) +"nmE" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 1 + }, +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/town) "nnx" = ( /obj/structure/fluff/clock, /turf/open/floor/carpet/royalblack, @@ -11718,7 +12401,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/under/town/basement) "npD" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -11754,20 +12437,17 @@ }, /area/rogue/indoors/town/shop) "nrH" = ( -/obj/structure/table/wood{ - dir = 8; - icon_state = "largetable" - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) -"nrI" = ( /obj/structure/chair/wood/rogue{ - dir = 8 + dir = 1 }, -/obj/effect/landmark/start/villager, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" +/obj/effect/landmark/start/adventurer{ + dir = 1 }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"nrI" = ( +/obj/structure/mineral_door/wood/red/ii, +/turf/open/floor/rogue/ruinedwood/spiralfade, /area/rogue/indoors/town/tavern) "nsa" = ( /obj/structure/mineral_door/wood/fancywood{ @@ -11802,9 +12482,9 @@ /turf/open/floor/rogue/rooftop/green, /area/rogue/outdoors/mountains) "ntM" = ( -/obj/structure/fermenting_barrel, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/tavern) "nui" = ( /obj/structure/chair/stool/rogue, /obj/effect/landmark/start/villager, @@ -11842,12 +12522,11 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "nxn" = ( -/obj/structure/closet/crate/roguecloset/dark, -/turf/open/floor/rogue/ruinedwood{ - dir = 1; - icon_state = "vertw" +/turf/closed/wall/mineral/rogue/pipe{ + dir = 4; + icon_state = "iron_line" }, -/area/rogue/indoors/town/tavern) +/area/rogue/under/town/basement) "nxz" = ( /obj/structure/roguewindow/openclose{ dir = 8 @@ -11859,8 +12538,8 @@ /area/rogue/indoors/town/garrison) "nxV" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /turf/open/floor/rogue/dirt, /area/rogue/under/town/basement) @@ -11876,11 +12555,6 @@ /obj/item/reagent_containers/powder/ozium, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) -"nyG" = ( -/obj/structure/closet/crate/drawer/inn, -/obj/item/storage/belt/rogue/pouch/coins/poor, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) "nzf" = ( /obj/effect/decal/cleanable/blood/old, /turf/open/floor/rogue/herringbone, @@ -11889,14 +12563,18 @@ /obj/structure/ladder, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town) +"nzQ" = ( +/obj/structure/closet/crate/roguecloset/dark, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "nzX" = ( /obj/structure/flora/roguetree, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/rtfield) "nAS" = ( /obj/structure/closet/crate/chest/old_crate, -/obj/item/rogueweapon/woodcut, -/obj/item/rogueweapon/woodcut, +/obj/item/rogueweapon/axe/iron, +/obj/item/rogueweapon/axe/iron, /obj/effect/decal/cleanable/dirt/cobweb/cobweb2, /turf/open/floor/rogue/ruinedwood{ icon_state = "vertw" @@ -11926,7 +12604,7 @@ "nCh" = ( /obj/structure/bars, /turf/open/floor/rogue/blocks/green, -/area/rogue/under/cave) +/area/rogue/under/town/basement) "nCi" = ( /obj/effect/decal/cleanable/dirt/cobweb, /obj/structure/chair/bench/couchablack, @@ -11954,20 +12632,17 @@ }, /area/rogue/indoors/town/magician) "nDi" = ( -/obj/structure/rack/rogue, -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" +/turf/closed/wall/mineral/rogue/pipe{ + dir = 8; + icon_state = "iron_corner" }, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot, -/obj/machinery/light/rogue/wallfire/candle, -/obj/item/reagent_containers/glass/bottle/rogue/manapot, -/obj/item/reagent_containers/glass/bottle/rogue/manapot, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot, -/turf/open/floor/rogue/twig, /area/rogue/under/town/basement) -"nDW" = ( -/obj/structure/table/wood/nice, -/turf/open/floor/rogue/woodturned, +"nEt" = ( +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 4 + }, +/obj/effect/decal/turfedge_neu/mossy_small, +/turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/tavern) "nFc" = ( /obj/structure/bed/rogue/inn/double, @@ -12007,28 +12682,29 @@ /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "nGv" = ( -/obj/structure/closet/crate/roguecloset/inn/south, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) -"nGH" = ( -/obj/structure/table/wood{ - dir = 9; - icon_state = "largetable" - }, -/obj/item/candle/yellow/lit, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) +/obj/structure/rack/rogue, +/obj/item/reagent_containers/glass/bottle/rogue/poison, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "nGL" = ( /obj/structure/table/wood/plain, /obj/item/book/rogue/secret/xylix, /turf/open/floor/rogue/dirt/road, /area/rogue/under/cave) +"nHi" = ( +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/town) "nHm" = ( /obj/effect/decal/cleanable/blood/gibs/up, /turf/open/floor/rogue/blocks/green, /area/rogue/under/town/sewer) +"nHn" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 4 + }, +/turf/open/floor/rogue/ruinedwood, +/area/rogue/indoors/town) "nHw" = ( /obj/structure/chair/stool/rogue, /turf/open/floor/rogue/tile/bath, @@ -12051,14 +12727,21 @@ /obj/structure/bed/rogue/hay, /turf/open/floor/carpet/royalblack, /area/rogue/under/town/basement) -"nJt" = ( -/obj/structure/fluff/railing/wood, -/obj/structure/fluff/railing/border{ +"nIR" = ( +/obj/machinery/light/rogue/wallfire/candle/blue{ + pixel_x = 32; + pixel_y = 0 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/town) +"nKo" = ( +/obj/structure/chair/wood/rogue{ dir = 8 }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" +/obj/effect/landmark/start/villager{ + dir = 8 }, +/turf/open/floor/rogue/ruinedwood/chevron, /area/rogue/indoors/town/tavern) "nKr" = ( /turf/closed/wall/mineral/rogue/roofwall/middle{ @@ -12066,20 +12749,18 @@ }, /area/rogue/indoors/town) "nKI" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/curtain/bounty{ color = "grey" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/church) "nKO" = ( -/obj/structure/stairs{ - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "wooden_floort" +/obj/effect/decal/turfedge_neu/alt_small{ + dir = 8 }, -/area/rogue/outdoors/town/roofs) +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) "nLb" = ( /obj/structure/mineral_door/bars{ lockid = "manor" @@ -12087,10 +12768,14 @@ /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) "nLx" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) +/obj/structure/fluff/railing/border{ + dir = 10 + }, +/turf/closed/wall/mineral/rogue/craftstone, +/area/rogue/indoors/town/tavern) +"nMi" = ( +/turf/closed/wall/mineral/rogue/decostone/cand, +/area/rogue/indoors/town/tavern) "nMj" = ( /obj/item/rogueore/coal, /obj/item/rogueore/coal, @@ -12122,22 +12807,27 @@ /turf/open/floor/rogue/carpet/lord/left, /area/rogue/indoors/town/manor) "nNa" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) +/obj/effect/decal/turfedge_neu/alt{ + dir = 5 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) "nNL" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/wood, +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, /area/rogue/indoors/town/tavern) "nNM" = ( -/obj/item/natural/worms/leeches, /obj/item/natural/worms/leeches{ pixel_x = 7; pixel_y = -8 }, /obj/item/natural/worms/leeches{ - pixel_x = -14; - pixel_y = -7 + pixel_x = -1; + pixel_y = 1 + }, +/obj/item/natural/worms/leeches{ + pixel_x = -10; + pixel_y = 10 }, /turf/open/water/sewer, /area/rogue/under/town/basement) @@ -12176,19 +12866,27 @@ icon_state = "horzw" }, /area/rogue/indoors/town/dwarfin) +"nQo" = ( +/obj/structure/bookcase/random/eoratica, +/turf/open/floor/rogue/woodturned/nosmooth, +/area/rogue/indoors/town/bath) "nQG" = ( /obj/structure/fluff/railing/border{ dir = 8 }, /obj/structure/closet/crate/roguecloset, +/obj/item/clothing/under/roguetown/tights/random, +/obj/item/clothing/under/roguetown/tights/random, +/obj/item/clothing/suit/roguetown/shirt/undershirt/random, +/obj/item/clothing/suit/roguetown/shirt/undershirt/random, /turf/open/floor/rogue/twig, /area/rogue/indoors/town) "nQR" = ( /obj/structure/rack/rogue/shelf/biggest, -/obj/item/clothing/mask/cigarette/rollie/mindbreaker{ +/obj/item/clothing/mask/cigarette/rollie/nicotine{ pixel_y = 8 }, -/obj/item/clothing/mask/cigarette/rollie/mindbreaker{ +/obj/item/clothing/mask/cigarette/rollie/nicotine{ pixel_y = 8 }, /obj/item/clothing/mask/cigarette/pipe/crafted{ @@ -12219,13 +12917,11 @@ }, /area/rogue/indoors/town/church) "nRU" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" +/obj/effect/decal/turfedge_neu/alt{ + dir = 9 }, -/area/rogue/indoors/town/tavern) +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) "nSp" = ( /obj/structure/roguemachine/mail, /turf/open/floor/carpet/purple, @@ -12265,11 +12961,11 @@ /turf/open/floor/rogue/concrete, /area/rogue/indoors/town/shop) "nTl" = ( -/obj/structure/fluff/railing/border{ +/obj/effect/decal/turfedge_neu/alt_small{ dir = 4 }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) "nTK" = ( /obj/structure/closet/crate/roguecloset/inn, /turf/open/floor/rogue/wood, @@ -12281,6 +12977,12 @@ icon_state = "weird1" }, /area/rogue/under/town/basement) +"nUe" = ( +/obj/structure/stairs{ + dir = 8 + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern) "nUp" = ( /obj/item/chair/rogue, /turf/open/floor/rogue/cobble, @@ -12300,9 +13002,14 @@ icon_state = "vertw" }, /area/rogue/indoors) +"nUL" = ( +/obj/item/bedsheet/rogue/cloth, +/obj/structure/bed/rogue/mediocre, +/obj/effect/landmark/start/mercenary, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "nUM" = ( /obj/structure/table/wood/plain, -/obj/effect/holodeck_effect/cards, /turf/open/floor/rogue/ruinedwood{ dir = 1; icon_state = "vertw" @@ -12320,7 +13027,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "nVz" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) "nVP" = ( @@ -12338,15 +13045,17 @@ /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town) "nWA" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 5 }, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "nWB" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/hexstone, -/area/rogue/under/town/basement) +/obj/machinery/light/rogue/wallfire/candle{ + pixel_y = -32 + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/manor) "nWC" = ( /obj/structure/roguemachine/submission, /turf/open/floor/rogue/blocks, @@ -12358,7 +13067,7 @@ /turf/closed/wall/mineral/rogue/stonebrick, /area/rogue/indoors/town) "nWU" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/dwarfin) "nXh" = ( @@ -12373,9 +13082,19 @@ }, /turf/closed/mineral/rogue/bedrock, /area/rogue/under/cave) -"nXZ" = ( -/turf/open/floor/rogue/ruinedwood, +"nXm" = ( +/obj/structure/fluff/railing/border{ + dir = 6 + }, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 8 + }, +/turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/tavern) +"nXw" = ( +/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town) "nYn" = ( /obj/structure/bed/rogue/shit, /turf/open/floor/rogue/blocks, @@ -12385,7 +13104,7 @@ /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/bath) "nZd" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/fluff/railing/border{ @@ -12410,7 +13129,7 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) "oap" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/church) "oaF" = ( @@ -12435,13 +13154,13 @@ icon_state = "longtable" }, /obj/item/reagent_containers/food/snacks/rogue/meat/salami, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/church) "obZ" = ( /obj/machinery/light/rogue/wallfire/candle/r, /obj/structure/rack/rogue, -/obj/item/rogueweapon/spear, +/obj/item/rogueweapon/polearm/spear, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors) "ocJ" = ( @@ -12475,6 +13194,10 @@ /obj/structure/stationary_bell, /turf/open/floor/rogue/churchrough, /area/rogue/indoors/town/church) +"odO" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "odQ" = ( /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/church) @@ -12498,16 +13221,9 @@ /obj/structure/rack/rogue, /obj/item/clothing/neck/roguetown/psycross/silver, /obj/item/clothing/neck/roguetown/psycross/silver/pestra, +/obj/item/clothing/neck/roguetown/psycross/silver/malum_steel, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/church) -"oga" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/cobweb{ - dir = 1 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) "ogn" = ( /obj/structure/table/wood{ icon_state = "map1" @@ -12535,6 +13251,12 @@ "ohe" = ( /turf/closed/wall/mineral/rogue/stonebrick, /area/rogue/outdoors/town) +"ohf" = ( +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 8 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield) "oho" = ( /obj/structure/closet/crate/chest/old_crate, /obj/item/reagent_containers/food/snacks/egg, @@ -12565,9 +13287,11 @@ /turf/open/floor/rogue/blocks/green, /area/rogue/under/town/sewer) "oiw" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) +/obj/structure/fluff/railing/border{ + dir = 5 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) "oiP" = ( /turf/open/transparent/openspace, /area/rogue/outdoors/town/roofs) @@ -12611,22 +13335,24 @@ }, /area/rogue/outdoors/mountains) "okR" = ( -/obj/structure/chair/wood/rogue{ - dir = 8 +/obj/machinery/light/rogue/hearth{ + fueluse = 56000 }, -/obj/effect/landmark/start/adventurer{ - dir = 8 - }, -/turf/open/floor/carpet/red, +/turf/open/floor/rogue/concrete, /area/rogue/indoors/town/tavern) "olg" = ( -/obj/item/reagent_containers/food/snacks/crow{ - dir = 1 +/obj/structure/fluff/railing/border{ + dir = 8 }, -/turf/open/floor/rogue/rooftop{ - dir = 4 +/obj/structure/fluff/millstone{ + pixel_y = 10 }, -/area/rogue/outdoors/town/roofs) +/obj/structure/table/wood{ + dir = 1; + icon_state = "longtable" + }, +/turf/open/floor/rogue/carpet/green, +/area/rogue/indoors/town/tavern) "oli" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/bed/rogue/hay, @@ -12635,6 +13361,12 @@ icon_state = "weird1" }, /area/rogue/indoors/town) +"ols" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield) "olw" = ( /obj/machinery/light/rogue/torchholder{ pixel_y = 26 @@ -12647,7 +13379,7 @@ /obj/machinery/light/rogue/wallfire/candle{ pixel_y = -32 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /obj/structure/flora/roguegrass/bush_meagre, @@ -12689,6 +13421,12 @@ /obj/item/paper/bsmith, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/dwarfin) +"opi" = ( +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield) "oqj" = ( /obj/structure/chair/stool/rogue{ pixel_y = 5 @@ -12760,9 +13498,15 @@ }, /area/rogue/indoors/town/magician) "ouQ" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) +/obj/structure/fluff/walldeco/wantedposter{ + pixel_x = -32; + pixel_y = 0 + }, +/obj/effect/decal/turfedge_neu/mossy{ + dir = 6 + }, +/turf/open/floor/rogue/blocks/stonered, +/area/rogue/outdoors/town) "ouT" = ( /obj/structure/fluff/railing/border{ dir = 4 @@ -12816,7 +13560,7 @@ /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town) "oxd" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/structure/fluff/statue/myth{ @@ -12852,6 +13596,10 @@ icon_state = "vertw" }, /area/rogue/indoors/town/dwarfin) +"oAz" = ( +/obj/structure/roguewindow/openclose, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/town/tavern) "oAK" = ( /turf/closed/wall/mineral/rogue/wooddark, /area/rogue/indoors/town/tavern) @@ -12885,7 +13633,7 @@ /turf/open/transparent/openspace, /area/rogue/indoors) "oCz" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/wood, /area/rogue/indoors/town) "oCC" = ( @@ -12900,6 +13648,10 @@ }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town) +"oCL" = ( +/obj/machinery/dye_bin, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) "oDk" = ( /obj/structure/lever{ redstone_id = "gatelava" @@ -12929,10 +13681,9 @@ /turf/open/floor/carpet/purple, /area/rogue/indoors/town/shop) "oEY" = ( -/obj/structure/fermenting_barrel/beer, -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" +/obj/machinery/light/rogue/oven/south, +/turf/open/floor/rogue/tile{ + icon_state = "tavern" }, /area/rogue/indoors/town/tavern) "oFe" = ( @@ -13026,6 +13777,13 @@ "oJp" = ( /turf/closed/wall/mineral/rogue/wooddark/slitted, /area/rogue/indoors/town) +"oJu" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/ruinedwood{ + dir = 1; + icon_state = "vertw" + }, +/area/rogue/indoors/town/tavern) "oJC" = ( /turf/closed/wall/mineral/rogue/decostone, /area/rogue/indoors/town/manor) @@ -13091,9 +13849,16 @@ /area/rogue/indoors/town/church) "oNu" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/twig, /area/rogue/indoors/town) +"oNB" = ( +/obj/structure/rack/rogue, +/obj/effect/decal/cleanable/dirt/cobweb{ + icon_state = "cobweb2" + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) "oOl" = ( /turf/open/floor/rogue/wood, /area/rogue/indoors/town) @@ -13114,12 +13879,14 @@ /obj/machinery/light/rogue/wallfire/candle, /turf/open/floor/rogue/woodturned/nosmooth, /area/rogue/indoors/town/bath) -"oPc" = ( -/obj/structure/fluff/railing/fence{ +"oOI" = ( +/obj/structure/chair/wood/rogue/chair_noble/red{ dir = 8 }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield) +/turf/open/floor/rogue/tile{ + icon_state = "tile" + }, +/area/rogue/indoors/town/tavern) "oPd" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/wood, @@ -13148,7 +13915,7 @@ }, /area/rogue/indoors/town/manor) "oPM" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/closed/wall/mineral/rogue/stone/moss, @@ -13160,15 +13927,17 @@ /turf/open/floor/rogue/tile, /area/rogue/indoors/town/manor) "oPY" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/obj/machinery/light/rogue/firebowl, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/outdoors/town/roofs) "oQf" = ( /obj/structure/fluff/railing/border, /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/bath) +"oQz" = ( +/obj/item/rogueweapon/shovel/small, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/town) "oQM" = ( /obj/structure/fluff/traveltile{ aportalgoesto = "bogrtin2"; @@ -13188,6 +13957,10 @@ /obj/structure/chair/stool/rogue, /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) +"oSr" = ( +/obj/structure/chair/bench/couch/redright, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/tavern) "oSK" = ( /turf/open/floor/carpet/purple, /area/rogue/indoors/town/church) @@ -13195,11 +13968,11 @@ /turf/open/floor/rogue/concrete, /area/rogue/indoors/town/shop) "oSW" = ( -/obj/structure/stairs{ - dir = 1 +/obj/structure/roguemachine/stockpile, +/turf/open/floor/rogue/tile{ + icon_state = "tavern" }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/town) +/area/rogue/indoors/town/tavern) "oSZ" = ( /obj/structure/closet/crate/roguecloset/dark, /obj/effect/decal/cleanable/dirt/dust, @@ -13208,12 +13981,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "oTc" = ( -/obj/structure/table/wood{ - dir = 5; - icon_state = "largetable" - }, -/obj/item/rogue/instrument/flute, -/turf/open/floor/rogue/wood, +/turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/tavern) "oTg" = ( /obj/structure/bookcase, @@ -13242,21 +14010,30 @@ /turf/open/transparent/openspace, /area/rogue/indoors/town/manor) "oUi" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, /obj/machinery/light/rogue/torchholder{ - dir = 8; - icon_state = "torchwall1" + dir = 8 }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/natural/worms/leech/propaganda, -/obj/item/natural/worms/leech/propaganda, -/obj/item/natural/worms/leech/propaganda, -/turf/open/water/sewer, +/turf/open/floor/rogue/twig, /area/rogue/under/town/basement) +"oUv" = ( +/obj/structure/fluff/railing/border, +/turf/open/floor/carpet/inn, +/area/rogue/indoors/town/tavern) "oUw" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/rogue/wallfire/candle/r, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town) +"oUR" = ( +/obj/structure/chair/bench/ultimacouch, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/start/mercenary, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "oUW" = ( /obj/structure/mineral_door/wood/donjon/stone{ locked = 1; @@ -13267,15 +14044,6 @@ "oVk" = ( /turf/closed/wall/mineral/rogue/stone, /area/rogue/under/town/basement) -"oVO" = ( -/obj/structure/table/wood{ - dir = 9; - icon_state = "largetable" - }, -/turf/open/floor/rogue/tile{ - icon_state = "tile" - }, -/area/rogue/indoors/town/tavern) "oVX" = ( /obj/machinery/light/rogue/torchholder/l, /turf/open/floor/rogue/cobblerock, @@ -13330,10 +14098,10 @@ /turf/open/floor/rogue/churchmarble, /area/rogue/indoors/town/church/chapel) "oZX" = ( -/obj/structure/chair/bench/ultimacouch/r{ - icon_state = "ultimacochright" +/obj/structure/roguemachine/atm, +/turf/open/floor/rogue/tile{ + icon_state = "tavern" }, -/turf/open/floor/carpet/red, /area/rogue/indoors/town/tavern) "paf" = ( /obj/structure/chair/stool/rogue, @@ -13341,6 +14109,13 @@ /obj/machinery/light/rogue/wallfire/candle/r, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town) +"pah" = ( +/obj/effect/decal/cleanable/dirt/cobweb, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town) +"pbd" = ( +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/tavern) "pbp" = ( /obj/structure/fluff/walldeco/church/line, /obj/structure/fluff/railing/border{ @@ -13356,10 +14131,8 @@ /turf/open/floor/rogue/grass, /area/rogue/indoors/town/manor) "pbU" = ( -/obj/structure/table/wood/plain, -/obj/item/toy/cards/deck, -/obj/item/reagent_containers/glass/bottle/rogue/redwine, -/turf/open/floor/rogue/wood, +/obj/machinery/printingpress, +/turf/open/floor/rogue/tile, /area/rogue/indoors/town/manor) "pbW" = ( /obj/machinery/light/rogue/firebowl/standing, @@ -13371,9 +14144,15 @@ /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/manor) "pcz" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) +"pcH" = ( +/obj/structure/stairs{ + dir = 8 + }, +/turf/open/floor/rogue/ruinedwood/turned, +/area/rogue/indoors/town/tavern) "pcQ" = ( /obj/structure/closet/crate/coffin, /turf/open/floor/rogue/cobble, @@ -13393,6 +14172,23 @@ /obj/structure/closet/crate/roguecloset, /turf/open/floor/rogue/tile/tilerg, /area/rogue/indoors/town) +"peA" = ( +/obj/structure/fluff/railing/border, +/obj/structure/fluff/railing/border{ + dir = 4 + }, +/obj/structure/fluff/railing/border{ + dir = 6 + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/tavern) +"peS" = ( +/obj/structure/fluff/walldeco/innsign/saiga{ + pixel_x = -1; + pixel_y = 15 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) "pfa" = ( /turf/closed/wall/mineral/rogue/pipe{ dir = 1; @@ -13400,7 +14196,7 @@ }, /area/rogue/under/town/basement) "pfo" = ( -/obj/item/rogueweapon/huntingknife/idagger/silver, +/obj/item/rogueweapon/knife/dagger/silver, /turf/open/floor/rogue/blocks/green, /area/rogue/under/town/sewer) "pfA" = ( @@ -13421,10 +14217,17 @@ /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/church) "pgO" = ( -/obj/structure/fluff/clock, -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/woodturned, -/area/rogue/under/town/basement) +/obj/structure/fluff/railing/border{ + dir = 5; + pixel_x = 3 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern) +"pgQ" = ( +/obj/structure/bed/rogue/inn/double, +/obj/item/bedsheet/rogue/double_pelt, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "pgT" = ( /obj/machinery/light/rogue/wallfire/candle/blue, /turf/open/floor/rogue/ruinedwood{ @@ -13460,8 +14263,7 @@ /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/church) "piH" = ( -/obj/structure/fluff/railing/wood, -/turf/open/transparent/openspace, +/turf/open/floor/rogue/woodturned/nosmooth/saiga, /area/rogue/indoors/town/tavern) "piI" = ( /obj/structure/closet/crate/chest/neu, @@ -13473,6 +14275,10 @@ /obj/structure/table/wood/fancy/royalblack, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/church) +"piZ" = ( +/obj/structure/chair/bench/coucha, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "pjg" = ( /obj/structure/table/wood{ icon_state = "tablewood1" @@ -13528,7 +14334,7 @@ /turf/closed/wall/mineral/rogue/stone, /area/rogue/outdoors/town) "pnY" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -13569,6 +14375,7 @@ /obj/structure/table/wood{ icon_state = "map2" }, +/obj/item/reagent_containers/glass/cup/golden, /turf/open/floor/rogue/carpet/lord/center, /area/rogue/indoors/town/manor) "pqo" = ( @@ -13641,16 +14448,9 @@ /turf/open/floor/carpet/red, /area/rogue/indoors/shelter/town/sargoth) "ptj" = ( -/obj/machinery/light/rogue/wallfire/candle/blue, -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/magician) +/obj/machinery/printingpress, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/manor) "ptC" = ( /turf/open/floor/rogue/dirt, /area/rogue/outdoors/river) @@ -13665,22 +14465,14 @@ /turf/open/floor/rogue/churchmarble, /area/rogue/indoors/town/church/chapel) "puw" = ( -/obj/item/natural/worms/leeches{ - pixel_x = 7; - pixel_y = -8 - }, -/obj/item/natural/worms/leeches{ - pixel_x = -10; - pixel_y = 11 - }, -/obj/item/natural/worms/leeches{ - pixel_x = 1; - pixel_y = 3 - }, -/obj/item/natural/worms/leeches{ - pixel_x = -7; - pixel_y = -3 +/obj/machinery/light/rogue/torchholder{ + dir = 8; + icon_state = "torchwall1" }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/natural/worms/leech/propaganda, +/obj/item/natural/worms/leech/propaganda, +/obj/item/natural/worms/leech/propaganda, /turf/open/water/sewer, /area/rogue/under/town/basement) "puF" = ( @@ -13713,12 +14505,17 @@ }, /turf/open/floor/rogue/twig, /area/rogue/indoors/town) +"pxa" = ( +/obj/structure/fluff/statue/gargoyle, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/outdoors/town) "pxb" = ( -/obj/structure/mineral_door/wood/window{ - locked = 1; - lockid = "tavern" +/obj/structure/stairs/stone{ + dir = 8 + }, +/turf/open/floor/rogue/tile{ + icon_state = "tile" }, -/turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "pxd" = ( /obj/structure/ladder, @@ -13828,7 +14625,7 @@ }, /area/rogue/indoors/town/manor) "pDQ" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/structure/bed/rogue, /obj/item/bedsheet/rogue/cloth, /obj/effect/landmark/start/squire{ @@ -13839,7 +14636,8 @@ "pDR" = ( /obj/structure/mineral_door/wood/fancywood{ dir = 1; - lockid = "soilson" + lockid = "soilson"; + name = "Farm" }, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) @@ -13867,12 +14665,6 @@ /obj/item/roguebin/water, /turf/open/floor/rogue/church, /area/rogue/indoors/town/church/chapel) -"pFx" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) "pGk" = ( /obj/structure/bed/rogue/mediocre, /obj/item/bedsheet/rogue/cloth, @@ -13881,6 +14673,11 @@ "pGn" = ( /turf/open/water/swamp/deep, /area/rogue/under/town/sewer) +"pGo" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/chest/neu_iron, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "pHr" = ( /turf/closed/wall/mineral/rogue/wooddark/slitted, /area/rogue/indoors) @@ -13909,12 +14706,26 @@ /obj/structure/spider/stickyweb, /turf/open/floor/rogue/dirt/road, /area/rogue/under/cave) +"pJf" = ( +/obj/structure/fluff/railing/border{ + dir = 6 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern) "pKe" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, /area/rogue/indoors/town/shop) +"pKt" = ( +/obj/structure/table/wood/plain/alt, +/obj/item/toy/cards/deck, +/obj/item/dice, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" + }, +/area/rogue/indoors/town/manor) "pLi" = ( /obj/structure/closet/crate/roguecloset, /obj/item/gun/ballistic/revolver/grenadelauncher/bow, @@ -13947,6 +14758,12 @@ }, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/rtfield) +"pLR" = ( +/obj/structure/chair/wood/rogue{ + dir = 8 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/manor) "pLU" = ( /obj/structure/fluff/railing/border{ dir = 1 @@ -13988,11 +14805,14 @@ /turf/open/floor/rogue/concrete, /area/rogue/indoors/town/garrison) "pNT" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/tales1, -/obj/item/book/rogue/tales3, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) +/obj/structure/roguemachine/scomm{ + pixel_x = 32; + pixel_y = 0 + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" + }, +/area/rogue/indoors/town) "pNY" = ( /turf/open/floor/rogue/wood, /area/rogue/indoors/town/dwarfin) @@ -14016,6 +14836,10 @@ /obj/item/broom, /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/bath) +"pQk" = ( +/obj/structure/chair/bench/ultimacouch, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "pQp" = ( /obj/structure/mineral_door/bars{ locked = 1; @@ -14037,14 +14861,13 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) "pRy" = ( -/obj/structure/roguemachine/money/r, -/turf/open/floor/rogue/tile{ - icon_state = "tavern" - }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/tavern) "pRP" = ( /obj/structure/mineral_door/wood/deadbolt{ - dir = 8 + dir = 8; + name = "Farming Storage" }, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) @@ -14088,8 +14911,8 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/dwarfin) "pTC" = ( -/obj/structure/table/wood, -/turf/open/floor/rogue/wood, +/obj/structure/fluff/statue/small, +/turf/open/floor/rogue/ruinedwood/chevron, /area/rogue/indoors/town/tavern) "pTM" = ( /obj/structure/fluff/railing/fence, @@ -14109,7 +14932,8 @@ "pUw" = ( /obj/structure/mineral_door/wood{ locked = 1; - lockid = "nightman" + lockid = "nightman"; + name = "Nitemaster's Chambers" }, /turf/open/floor/rogue/woodturned/nosmooth, /area/rogue/indoors/town/bath) @@ -14128,6 +14952,8 @@ /obj/item/neuFarm/seed/cabbage, /obj/item/neuFarm/seed/potato, /obj/item/neuFarm/seed/onion, +/obj/item/neuFarm/seed/apple, +/obj/item/neuFarm/seed/apple, /turf/open/floor/rogue/ruinedwood{ dir = 1; icon_state = "vertw" @@ -14141,13 +14967,11 @@ /turf/open/floor/rogue/tile, /area/rogue/under/town/basement) "pYB" = ( -/obj/structure/table/wood{ - dir = 9; - icon_state = "largetable" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" +/obj/structure/table/wood/reinf_long{ + dir = 8 }, +/obj/machinery/light/rogue/wallfire/candle/weak, +/turf/open/floor/rogue/ruinedwood/spiralfade, /area/rogue/indoors/town/tavern) "pYP" = ( /turf/open/transparent/openspace, @@ -14178,10 +15002,7 @@ }, /area/rogue/indoors/town) "qaz" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/ledger, -/obj/item/book/rogue/magicaltheory, -/obj/item/book/rogue/yeoldecookingmanual, +/obj/structure/bookcase/random/thesis, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "qaC" = ( @@ -14192,6 +15013,8 @@ /obj/machinery/light/rogue/wallfire/candle/blue/l, /obj/structure/rack/rogue, /obj/item/reagent_containers/glass/bottle/rogue/manapot, +/obj/item/reagent_containers/glass/bottle/rogue/stronghealthpot, +/obj/item/reagent_containers/glass/bottle/vial/intpot, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -14259,7 +15082,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/shop) "qed" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) "qek" = ( @@ -14275,6 +15098,12 @@ icon_state = "vertw" }, /area/rogue/indoors) +"qeJ" = ( +/obj/machinery/light/rogue/wallfire{ + pixel_y = 32 + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/tavern) "qfa" = ( /obj/structure/fermenting_barrel/random/beer, /turf/open/floor/rogue/herringbone, @@ -14293,6 +15122,13 @@ /obj/item/rogueweapon/shovel, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) +"qfZ" = ( +/obj/effect/decal/turfedge_neu/mossy_small, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 4 + }, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/tavern) "qgz" = ( /obj/structure/fluff/psycross, /turf/open/floor/rogue/blocks, @@ -14315,12 +15151,17 @@ /obj/machinery/light/rogue/cauldron, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) +"qjR" = ( +/obj/machinery/light/rogue/wallfire/candle{ + pixel_y = -32 + }, +/turf/open/water/bath, +/area/rogue/under/town/basement) "qjV" = ( -/obj/structure/chair/wood/rogue{ - dir = 1 +/obj/structure/table/wood/reinf_long{ + dir = 4 }, -/obj/effect/landmark/start/adventurer, -/turf/open/floor/carpet/red, +/turf/open/floor/rogue/ruinedwood/spiralfade, /area/rogue/indoors/town/tavern) "qke" = ( /obj/structure/flora/roguegrass/bush_meagre, @@ -14375,7 +15216,7 @@ "qme" = ( /obj/structure/table/wood, /obj/item/restraints/legcuffs/beartrap, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /obj/item/rogueweapon/tongs{ pixel_x = -3 }, @@ -14406,7 +15247,7 @@ /turf/open/floor/rogue/concrete, /area/rogue/outdoors/town) "qqj" = ( -/obj/item/rogueweapon/sword/sabre/glaive, +/obj/item/rogueweapon/sword/sabre/stalker, /obj/item/clothing/mask/rogue/facemask/shadowfacemask, /obj/effect/decal/cleanable/blood/splatter, /turf/open/floor/rogue/dirt/road, @@ -14432,7 +15273,7 @@ /obj/item/dice{ pixel_y = 13 }, -/obj/item/rogueweapon/huntingknife/stoneknife{ +/obj/item/rogueweapon/knife/stone{ pixel_x = 6; pixel_y = 4 }, @@ -14508,25 +15349,26 @@ /turf/closed/wall/mineral/rogue/wooddark, /area/rogue/indoors/town/garrison) "qwa" = ( -/obj/structure/table/wood{ - dir = 4; - icon_state = "largetable" - }, -/obj/item/cooking/pan, -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/tile{ - icon_state = "tavern" +/obj/structure/roguewindow/openclose{ + dir = 1 }, +/turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/tavern) "qwq" = ( -/obj/structure/fluff/railing/border{ - dir = 6 +/obj/structure/innkeep_rack{ + pixel_y = 32 }, -/turf/open/floor/rogue/woodturned, +/turf/open/floor/rogue/ruinedwood/spiralfade, /area/rogue/indoors/town/tavern) "qwE" = ( /turf/open/floor/rogue/herringbone, /area/rogue/under/town/basement) +"qxi" = ( +/obj/structure/chair/wood/rogue{ + dir = 1 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/manor) "qxk" = ( /obj/structure/roguewindow/openclose, /turf/open/floor/rogue/ruinedwood, @@ -14554,14 +15396,14 @@ /turf/closed/wall/mineral/rogue/roofwall/middle, /area/rogue/indoors/town) "qzc" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/structure/fluff/railing/border{ dir = 6 }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) "qzo" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/garrison) "qzv" = ( @@ -14570,6 +15412,13 @@ /obj/item/broom, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/dwarfin) +"qAn" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/landmark/start/villager{ + dir = 1 + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern) "qAw" = ( /obj/structure/fluff/walldeco/goblet{ dir = 1; @@ -14606,12 +15455,22 @@ }, /area/rogue/under/town/basement) "qBp" = ( -/obj/structure/table/wood{ - dir = 5; - icon_state = "largetable" +/obj/structure/rack/rogue, +/obj/item/reagent_containers/glass/cup/wooden{ + pixel_x = -3; + pixel_y = -4 }, -/obj/item/dice, -/turf/open/floor/carpet/red, +/obj/item/reagent_containers/glass/cup/wooden{ + pixel_y = -4 + }, +/obj/item/reagent_containers/glass/cup/wooden{ + pixel_x = 4 + }, +/obj/item/reagent_containers/glass/cup/wooden, +/obj/item/reagent_containers/glass/cup/wooden{ + pixel_x = -3 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, /area/rogue/indoors/town/tavern) "qBx" = ( /obj/structure/closet/crate/roguecloset/dark, @@ -14626,7 +15485,9 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "qCB" = ( -/obj/machinery/light/rogue/hearth, +/obj/structure/fluff/railing/border{ + dir = 9 + }, /turf/open/floor/rogue/tile{ icon_state = "tavern" }, @@ -14674,8 +15535,8 @@ /area/rogue/indoors/town/bath) "qEU" = ( /obj/machinery/light/rogue/wallfire/candle/blue{ - pixel_y = 0; - pixel_x = -32 + pixel_x = -32; + pixel_y = 0 }, /turf/open/floor/rogue/tile{ icon_state = "greenstone" @@ -14706,9 +15567,12 @@ /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "qFF" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) +"qGo" = ( +/turf/open/floor/carpet/inn, +/area/rogue/indoors/town/tavern) "qGw" = ( /obj/structure/bookcase, /obj/item/book/rogue/tales3, @@ -14730,14 +15594,25 @@ /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) "qHl" = ( -/turf/open/floor/carpet/purple, +/turf/open/floor/rogue/tile{ + icon_state = "tavern" + }, /area/rogue/indoors/town/tavern) "qHq" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/robber, -/obj/item/book/rogue/sword, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor) +/obj/item/reagent_containers/food/snacks/crow{ + dir = 8 + }, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/mountains) +"qHC" = ( +/obj/structure/chair/wood/rogue{ + dir = 4 + }, +/obj/machinery/light/rogue/wallfire/candle/weak/l, +/turf/open/floor/rogue/woodturned/nosmooth/saiga, +/area/rogue/indoors/town/tavern) "qIl" = ( /obj/structure/curtain/bounty{ color = "grey" @@ -14784,13 +15659,6 @@ /obj/structure/closet/crate/coffin, /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) -"qKH" = ( -/obj/structure/fluff/railing/wood{ - dir = 8; - pixel_y = -1 - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) "qLS" = ( /obj/structure/table/wood{ icon_state = "longtable" @@ -14799,8 +15667,20 @@ icon_state = "linoleum" }, /area/rogue/indoors/town/manor) +"qLZ" = ( +/obj/structure/fluff/railing/border{ + dir = 9 + }, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 8 + }, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 4 + }, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/tavern) "qMy" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, /turf/open/floor/rogue/wood, @@ -14824,12 +15704,19 @@ }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/church) +"qOp" = ( +/obj/structure/table/wood{ + icon_state = "largetable" + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern) "qOL" = ( -/obj/structure/closet/crate/drawer/inn, -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" +/obj/structure/fluff/railing/border{ + dir = 5 + }, +/turf/open/floor/rogue/tile{ + icon_state = "tavern" }, -/turf/open/floor/rogue/wood, /area/rogue/indoors/town/tavern) "qOU" = ( /obj/machinery/light/rogue/oven/west, @@ -14850,18 +15737,12 @@ dir = 1 }, /area/rogue/outdoors/mountains) -"qQU" = ( -/obj/machinery/light/rogue/wallfire/candle/blue, -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/magician) +"qQY" = ( +/obj/structure/roguewindow/openclose{ + dir = 4 + }, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/tavern) "qRe" = ( /obj/structure/fluff/walldeco/rpainting{ pixel_x = -32 @@ -14871,7 +15752,9 @@ }, /area/rogue/indoors/town/manor) "qRp" = ( -/obj/structure/mineral_door/wood/deadbolt, +/obj/structure/mineral_door/wood/deadbolt{ + dir = 1 + }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town) "qSp" = ( @@ -14882,10 +15765,12 @@ /obj/structure/fluff/nest, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) -"qSE" = ( -/obj/structure/closet/crate/roguecloset/inn/south, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +"qSx" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield) "qSO" = ( /mob/living/simple_animal/hostile/retaliate/rogue/spider/mutated, /obj/structure/spider/stickyweb, @@ -14923,13 +15808,22 @@ /obj/machinery/light/rogue/wallfire/candle/blue, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) +"qUQ" = ( +/obj/effect/decal/cleanable/dirt/cobweb{ + dir = 8 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town) "qUS" = ( /obj/structure/fluff/walldeco/customflag, /turf/closed/wall/mineral/rogue/craftstone, /area/rogue/indoors/town/dwarfin) "qVd" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/wood, +/obj/structure/fluff/railing/border{ + dir = 1 + }, +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/ruinedwood/spiralfade, /area/rogue/indoors/town/tavern) "qVp" = ( /obj/structure/fluff/walldeco/customflag{ @@ -14948,25 +15842,22 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "qVN" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/natural/worms/leech/propaganda, -/obj/item/natural/worms/leech/propaganda, -/obj/item/natural/worms/leech/propaganda, -/turf/open/water/sewer, +/obj/structure/ladder, +/turf/open/floor/rogue/twig, /area/rogue/under/town/basement) "qVP" = ( /turf/closed/wall/mineral/rogue/roofwall/innercorner, /area/rogue/outdoors/town/roofs) "qVZ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/structure/flora/roguegrass, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) "qWo" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/carpet/purple, +/obj/structure/fermenting_barrel/beer, +/turf/open/floor/rogue/ruinedwood/spiralfade, /area/rogue/indoors/town/tavern) "qWx" = ( /obj/effect/decal/cleanable/dirt/dust, @@ -14998,8 +15889,9 @@ /turf/open/floor/rogue/carpet, /area/rogue/under/town/basement) "rak" = ( -/obj/effect/decal/cleanable/generic, +/obj/item/chair/stool/bar/rogue, /obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/cobweb, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "rcd" = ( @@ -15009,9 +15901,20 @@ /turf/open/floor/rogue/blocks/green, /area/rogue/under/town/sewer) "rce" = ( -/obj/structure/bed/rogue/wool, -/obj/item/bedsheet/rogue/pelt, -/turf/open/floor/rogue/wood, +/obj/structure/rack/rogue, +/obj/item/kitchen/spoon/plastic, +/obj/item/kitchen/spoon/plastic, +/obj/item/kitchen/spoon/plastic, +/obj/item/kitchen/spoon/plastic, +/obj/item/kitchen/spoon/plastic, +/obj/item/kitchen/spoon/plastic, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) +"rcp" = ( +/obj/structure/chair/wood/rogue{ + dir = 4 + }, +/turf/open/floor/rogue/ruinedwood/chevron, /area/rogue/indoors/town/tavern) "rcR" = ( /obj/structure/roguewindow/stained{ @@ -15020,23 +15923,23 @@ /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/church) "rde" = ( -/turf/closed/wall/mineral/rogue/pipe{ - dir = 8; - icon_state = "iron_corner" +/obj/structure/table/wood{ + dir = 10; + icon_state = "largetable" }, -/area/rogue/under/town/sewer) +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/outdoors/town) "reb" = ( -/obj/structure/fluff/clock, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) +/obj/structure/table/wood{ + icon_state = "largetable" + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/outdoors/town) "reB" = ( /turf/closed/wall/mineral/rogue/roofwall/middle{ dir = 4 }, /area/rogue/indoors/town/dwarfin) -"reE" = ( -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) "rfO" = ( /obj/structure/fluff/statue/knight/r, /turf/open/floor/rogue/tile/tilerg, @@ -15045,6 +15948,10 @@ /obj/effect/decal/cleanable/blood/old, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/garrison) +"rgh" = ( +/obj/structure/table/wood/reinforced_alt, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "rgB" = ( /obj/structure/fluff/wallclock/r, /turf/open/floor/carpet/inn, @@ -15065,8 +15972,8 @@ /area/rogue/outdoors/town) "rhn" = ( /turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_corner"; - dir = 1 + dir = 1; + icon_state = "iron_corner" }, /area/rogue/under/cave) "rjb" = ( @@ -15085,24 +15992,26 @@ /area/rogue/indoors/town/shop) "rkr" = ( /obj/structure/mineral_door/wood{ - lockid = "apartment3"; locked = 1; + lockid = "apartment3"; name = "Apartment III" }, /turf/open/floor/rogue/twig, /area/rogue/indoors/town) -"rkx" = ( -/obj/structure/fluff/railing/fence{ - dir = 4 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) "rkA" = ( /obj/structure/mineral_door/wood/fancywood{ lockid = "woodsm" }, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors) +"rkJ" = ( +/obj/structure/chair/bench/ultimacouch/r{ + icon_state = "ultimacochright" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/rogue/wallfire/candle/weak, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "rlS" = ( /obj/structure/mineral_door/wood/donjon{ dir = 4; @@ -15162,21 +16071,6 @@ /obj/structure/closet/crate/chest/neu, /turf/open/floor/rogue/wood, /area/rogue/indoors/town) -"rnE" = ( -/obj/structure/closet/crate/chest/old_crate{ - name = "meat crate" - }, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/fat, -/obj/item/reagent_containers/food/snacks/fat, -/obj/item/reagent_containers/food/snacks/rogue/meat/poultry, -/obj/item/reagent_containers/food/snacks/rogue/meat/poultry, -/turf/open/floor/rogue/tile{ - icon_state = "tavern" - }, -/area/rogue/indoors/town/tavern) "roL" = ( /obj/item/roguebin/water, /turf/open/floor/rogue/blocks, @@ -15331,7 +16225,7 @@ /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/manor) "rxr" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -15355,9 +16249,9 @@ /area/rogue/indoors/town/shop) "rzh" = ( /obj/structure/bookcase, -/obj/item/book/random, /obj/item/book/rogue/manners, /obj/item/book/rogue/law, +/obj/item/book/rogue/nitebeast, /turf/open/floor/rogue/ruinedwood/darker, /area/rogue/indoors/town/church) "rzk" = ( @@ -15394,7 +16288,7 @@ /turf/open/transparent/openspace, /area/rogue/outdoors/town) "rBO" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/machinery/light/rogue/wallfire/candle/l, @@ -15502,6 +16396,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/rogue/blocks/green, /area/rogue/under/town/sewer) +"rHc" = ( +/obj/structure/fluff/railing/border, +/obj/structure/fluff/railing/border{ + dir = 8 + }, +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/town/roofs) "rHm" = ( /obj/structure/closet/crate/roguecloset/inn, /obj/item/clothing/suit/roguetown/shirt/dress/silkdress/random, @@ -15515,6 +16416,12 @@ "rHr" = ( /turf/open/floor/rogue/twig, /area/rogue/outdoors/mountains) +"rHz" = ( +/obj/structure/mineral_door/wood/window{ + lockid = "tavern" + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern) "rHL" = ( /obj/item/reagent_containers/food/snacks/smallrat, /turf/open/floor/rogue/dirt/road, @@ -15523,22 +16430,18 @@ /turf/open/floor/rogue/tile, /area/rogue/under/town/basement) "rIf" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 8; - name = "Sewage Access" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/outdoors/town) "rIG" = ( /turf/open/water/sewer, /turf/open/water/sewer, /area/rogue/under/town/sewer) "rJt" = ( -/obj/structure/bed/rogue/wool, -/obj/item/bedsheet/rogue/cloth, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/rooftop{ + dir = 1 + }, +/area/rogue/outdoors/town/roofs) "rJz" = ( /obj/structure/fluff/statue/gargoyle, /turf/open/floor/rogue/churchrough, @@ -15568,21 +16471,24 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town) "rKP" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomi"; - name = "ROOM I" +/obj/structure/stairs{ + dir = 8 }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" +/obj/structure/fluff/walldeco/stone{ + pixel_y = -32 }, -/area/rogue/indoors/town/tavern) +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) "rLT" = ( /obj/structure/flora/roguegrass, /obj/structure/chair/bench, /obj/effect/landmark/start/villager, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) +"rMq" = ( +/obj/machinery/bookbinder, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/manor) "rMF" = ( /obj/structure/table/wood/reinforced_alt, /obj/structure/bars{ @@ -15668,23 +16574,10 @@ icon_state = "vertw" }, /area/rogue/indoors/town/bath) -"rQv" = ( -/obj/structure/closet/crate/chest{ - base_icon_state = "woodchestalt"; - icon_state = "woodchestalt"; - name = "meat chest" - }, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/butter, -/obj/item/reagent_containers/food/snacks/butter, -/obj/item/reagent_containers/food/snacks/rogue/cheese, -/obj/item/reagent_containers/food/snacks/rogue/cheese, -/turf/open/floor/rogue/tile{ - icon_state = "tavern" - }, +"rRw" = ( +/obj/structure/roguemachine/scomm, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/tavern) "rRG" = ( /obj/machinery/light/rogue/torchholder{ @@ -15722,6 +16615,13 @@ icon_state = "vertw" }, /area/rogue/indoors/town) +"rTy" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/decal/turfedge_neu/mossy{ + dir = 6 + }, +/turf/open/floor/rogue/blocks/stonered, +/area/rogue/outdoors/town) "rUW" = ( /obj/structure/fluff/walldeco/customflag, /turf/closed/wall/mineral/rogue/wooddark/vertical, @@ -15730,17 +16630,9 @@ /obj/structure/fluff/walldeco/rpainting/forest, /turf/closed/wall/mineral/rogue/stonebrick, /area/rogue/under/town/basement) -"rVn" = ( -/obj/structure/bookcase, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) "rVN" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/clothing/shoes/roguetown/boots/leather, -/obj/item/clothing/shoes/roguetown/boots/leather, -/obj/item/clothing/shoes/roguetown/boots/leather, -/turf/open/floor/rogue/woodturned, -/area/rogue/under/town/basement) +/turf/closed/wall/mineral/rogue/craftstone, +/area/rogue/indoors/town/tavern) "rVR" = ( /obj/structure/rack/rogue, /turf/open/floor/rogue/cobble, @@ -15778,7 +16670,7 @@ }, /area/rogue/indoors/town/dwarfin) "rYQ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/cobblerock, @@ -15797,21 +16689,30 @@ /area/rogue/outdoors/town) "sat" = ( /obj/structure/closet/crate/chest/crate, -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/alch/waterdust, -/obj/item/alch/earthdust, -/obj/item/alch/firedust, -/obj/item/alch/airdust, -/obj/item/alch/sinew, -/obj/item/alch/bone, -/turf/open/floor/rogue/cobble, +/obj/item/reagent_containers/food/snacks/produce/swampweed_dried, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/swampweed, +/obj/item/reagent_containers/food/snacks/produce/swampweed, +/obj/item/clothing/mask/cigarette/pipe/crafted, +/obj/item/reagent_containers/powder/spice, +/obj/item/reagent_containers/powder/spice, +/obj/item/neuFarm/seed/poppy, +/obj/item/natural/chaff/wheat, +/obj/item/natural/chaff/wheat, +/obj/item/clothing/mask/cigarette/pipe/crafted, +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/naturalstone, /area/rogue/under/town/basement) "saB" = ( -/obj/item/reagent_containers/food/snacks/crow{ - dir = 1 +/obj/structure/table/wood/reinf_long{ + dir = 8 }, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/town/roofs) +/obj/item/reagent_containers/powder/flour{ + pixel_y = 4 + }, +/turf/open/floor/rogue/carpet/green, +/area/rogue/indoors/town/tavern) "saC" = ( /obj/machinery/light/rogue/wallfire/candle/l, /turf/open/floor/carpet/royalblack, @@ -15873,20 +16774,23 @@ "sek" = ( /obj/structure/closet/crate/chest/wicker, /obj/item/reagent_containers/food/snacks/butter, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town) "ser" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, +/obj/structure/bookcase/random, /turf/open/floor/rogue/wood/nosmooth, /area/rogue/indoors/town) +"sev" = ( +/obj/structure/table/wood/nice/decorated_alt, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "sfg" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -15913,13 +16817,10 @@ /obj/structure/fluff/walldeco/med2, /turf/closed/wall/mineral/rogue/wooddark/vertical, /area/rogue/indoors/town) -"shK" = ( -/obj/structure/fluff/railing/wood{ - dir = 1; - pixel_y = -1 - }, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/town) +"siA" = ( +/obj/item/rogue/painting, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town) "siS" = ( /obj/item/natural/poo, /turf/open/water/sewer, @@ -15929,6 +16830,12 @@ dir = 1 }, /area/rogue/outdoors/town/roofs) +"sjo" = ( +/obj/structure/bed/rogue/bear{ + pixel_y = -33 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "sjA" = ( /turf/open/transparent/openspace, /area/rogue/indoors/shelter/town/sargoth) @@ -15937,26 +16844,19 @@ icon_state = "longtable" }, /obj/item/clothing/mask/cigarette/pipe/westman, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/roguekey/lord, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, /area/rogue/indoors/town/manor) "sjC" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 10 }, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) -"sjD" = ( -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/tavern) "sjO" = ( /obj/structure/stairs/stone{ dir = 4 @@ -15969,6 +16869,12 @@ /obj/item/book/rogue/law, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/garrison) +"skg" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 8 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/tavern) "skq" = ( /obj/structure/flora/roguetree/burnt, /turf/open/floor/rogue/grass, @@ -15984,12 +16890,17 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "sls" = ( -/obj/machinery/light/rogue/wallfire/candle/blue, /obj/structure/chair/wood/rogue{ dir = 4 }, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/magician) +"slz" = ( +/obj/structure/fluff/railing/border{ + dir = 5 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/outdoors/town) "slA" = ( /obj/structure/bed/rogue/hay, /obj/effect/decal/cleanable/dirt/dust, @@ -16033,6 +16944,7 @@ /obj/item/reagent_containers/food/snacks/rogue/meat/steak, /obj/item/reagent_containers/food/snacks/rogue/meat/poultry, /obj/item/reagent_containers/food/snacks/rogue/meat/poultry, +/obj/item/reagent_containers/food/snacks/fat, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "spl" = ( @@ -16041,6 +16953,21 @@ }, /turf/open/floor/rogue/carpet/lord/center, /area/rogue/indoors/town/manor) +"spv" = ( +/obj/structure/table/wood/plain, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern) +"spS" = ( +/obj/structure/fluff/walldeco/rpainting{ + pixel_y = -32 + }, +/obj/structure/chair/wood/rogue/chair_noble/red{ + dir = 4 + }, +/turf/open/floor/rogue/tile{ + icon_state = "tile" + }, +/area/rogue/indoors/town/tavern) "sqi" = ( /obj/structure/flora/newtree, /turf/open/floor/rogue/dirt, @@ -16089,6 +17016,7 @@ /area/rogue/under/town/basement) "suC" = ( /obj/item/roguemachine/drugtrade, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/ruinedwood/chevron, /area/rogue/indoors/town) "suF" = ( @@ -16101,9 +17029,7 @@ }, /area/rogue/under/town/basement) "swi" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/godofdreamsandnightmares, -/obj/item/book/rogue/knowledge1, +/obj/structure/bookcase/random/archive, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "swu" = ( @@ -16159,14 +17085,10 @@ /turf/closed/wall/mineral/rogue/roofwall/center, /area/rogue/outdoors/town/roofs) "syl" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomii"; - name = "ROOM II" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" +/obj/structure/table/wood/reinf_long{ + dir = 4 }, +/turf/open/floor/rogue/carpet/green, /area/rogue/indoors/town/tavern) "sym" = ( /obj/structure/rack/rogue, @@ -16178,14 +17100,14 @@ /obj/item/clothing/cloak/raincloak/green, /obj/item/clothing/cloak/raincloak/red, /obj/item/clothing/cloak/raincloak/purple, +/obj/item/clothing/neck/roguetown/keffiyeh/black, +/obj/item/clothing/neck/roguetown/keffiyeh/red, +/obj/item/clothing/neck/roguetown/keffiyeh/yellow, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/shop) "szg" = ( -/obj/structure/chair/wood/rogue{ - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/town/roofs) +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern) "szB" = ( /obj/structure/mineral_door/wood/donjon/stone{ locked = 1; @@ -16260,8 +17182,11 @@ /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/bath) "sEk" = ( -/obj/structure/bars, -/turf/open/floor/rogue/woodturned, +/obj/structure/table/wood/reinf_long{ + dir = 8 + }, +/obj/item/rogueweapon/mace/woodclub/rollingpin, +/turf/open/floor/rogue/carpet/green, /area/rogue/indoors/town/tavern) "sEp" = ( /obj/structure/closet/crate/chest/neu_fancy, @@ -16271,6 +17196,13 @@ "sEX" = ( /turf/open/floor/rogue/cobble, /area/rogue/outdoors/exposed/dwarf) +"sGr" = ( +/obj/structure/table/wood{ + dir = 10; + icon_state = "largetable" + }, +/turf/open/floor/rogue/woodturned/nosmooth/saiga, +/area/rogue/indoors/town/tavern) "sGI" = ( /obj/structure/fermenting_barrel/random/water, /obj/machinery/light/rogue/wallfire/candle/l, @@ -16389,15 +17321,15 @@ /area/rogue/indoors/town/bath) "sMR" = ( /obj/structure/chair/bench/coucha/r, +/obj/machinery/light/rogue/wallfire/candle/blue, /turf/open/floor/carpet/inn, /area/rogue/under/town/basement) "sNj" = ( -/obj/structure/chair/wood/rogue{ - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" +/obj/machinery/light/rogue/wallfire/candle/weak{ + pixel_x = 30; + pixel_y = 0 }, +/turf/open/floor/rogue/ruinedwood/spiralfade, /area/rogue/indoors/town/tavern) "sNm" = ( /obj/structure/table/wood{ @@ -16418,12 +17350,14 @@ /turf/open/floor/rogue/blocks/green, /area/rogue/under/town/sewer) "sOJ" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "tablewood1" +/obj/structure/chair/wood/rogue{ + dir = 1 }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) +/obj/structure/fluff/walldeco/customflag{ + pixel_x = -32 + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/outdoors/town) "sPj" = ( /obj/structure/ladder, /turf/open/floor/rogue/blocks/stonered, @@ -16432,6 +17366,12 @@ /obj/machinery/light/rogue/wallfire/candle, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/manor) +"sQa" = ( +/obj/structure/fluff/walldeco/painting/seraphina{ + pixel_x = 32 + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern) "sQf" = ( /obj/structure/fluff/grindwheel, /turf/open/floor/rogue/blocks, @@ -16505,9 +17445,6 @@ /obj/structure/flora/newtree, /turf/open/floor/rogue/grass, /area/rogue/outdoors/river) -"sUi" = ( -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) "sUu" = ( /obj/structure/table/wood{ icon_state = "longtable" @@ -16518,13 +17455,6 @@ "sUF" = ( /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town/garrison) -"sXL" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "largetable" - }, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) "sXM" = ( /obj/structure/fluff/railing/wood{ dir = 1; @@ -16532,10 +17462,6 @@ }, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) -"sYu" = ( -/obj/structure/mineral_door/swing_door, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) "sYv" = ( /obj/structure/fluff/railing/wood{ pixel_y = -4 @@ -16621,8 +17547,15 @@ dir = 8 }, /area/rogue/indoors/town/church) +"tcV" = ( +/obj/structure/table/wood{ + dir = 6; + icon_state = "largetable" + }, +/turf/open/floor/rogue/carpet/green, +/area/rogue/indoors/town/tavern) "tdg" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) "tdH" = ( @@ -16653,7 +17586,8 @@ /area/rogue/indoors/town/manor) "tfl" = ( /obj/machinery/light/rogue/torchholder/c, -/obj/item/roguebin/water, +/obj/structure/table/wood/plain, +/obj/item/natural/cloth, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/manor) "tfs" = ( @@ -16687,15 +17621,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/carpet/red, /area/rogue/indoors/shelter/town/sargoth) -"tgs" = ( -/obj/structure/rack/rogue/shelf/biggest, -/obj/item/reagent_containers/glass/bucket/wooden, -/obj/item/natural/cloth{ - pixel_x = 3; - pixel_y = 5 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) "tgF" = ( /turf/closed/wall/mineral/rogue/wooddark/end{ dir = 8 @@ -16715,7 +17640,7 @@ /turf/closed/wall/mineral/rogue/wooddark, /area/rogue/indoors/town) "tgW" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/structure/fermenting_barrel/random/water, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) @@ -16730,25 +17655,31 @@ /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/garrison) "tiv" = ( -/obj/machinery/light/rogue/wallfire/candle, -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) +/obj/machinery/light/rogue/torchholder{ + pixel_y = 26 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/outdoors/town) "tiw" = ( /obj/effect/landmark/start/merchant, /turf/open/floor/carpet/stellar, /area/rogue/indoors/town/shop) "tjg" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/machinery/light/rogue/torchholder{ dir = 4 }, /turf/open/floor/rogue/wood/nosmooth, /area/rogue/indoors/town) +"tjp" = ( +/obj/machinery/light/rogue/wallfire/candle/weak{ + pixel_y = -27 + }, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/tavern) "tjs" = ( /obj/structure/closet/crate/chest/old_crate, /obj/item/rogueore/iron, @@ -16761,9 +17692,11 @@ /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) "tjV" = ( -/obj/structure/bars, -/turf/open/floor/rogue/blocks/green, -/area/rogue/under/town/sewer) +/obj/structure/chair/wood/rogue{ + dir = 1 + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/outdoors/town) "tjZ" = ( /obj/structure/chair/bench/couchablack, /turf/open/floor/rogue/tile{ @@ -16817,6 +17750,9 @@ }, /turf/open/floor/rogue/carpet/lord/right, /area/rogue/indoors/town/manor) +"tnp" = ( +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern) "tnt" = ( /obj/structure/stairs{ dir = 1 @@ -16833,6 +17769,10 @@ /obj/structure/closet/crate/roguecloset, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) +"tpI" = ( +/obj/effect/decal/turfedge_neu/alt_small, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/town) "tpJ" = ( /obj/structure/fluff/railing/border{ dir = 1 @@ -16869,17 +17809,23 @@ icon_state = "iron_line" }, /area/rogue/under/town/basement) +"tsc" = ( +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 4 + }, +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield) "tsq" = ( -/obj/structure/bookcase, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/obj/item/book/random, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/magician) +/obj/structure/mineral_door/wood/donjon{ + dir = 4; + lockid = "walls"; + name = "Gatehouse" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/manor) "tst" = ( /obj/effect/spawner/roguemap/stump, /turf/open/floor/rogue/grass, @@ -16934,6 +17880,13 @@ /obj/structure/chair/stool/rogue, /turf/open/floor/rogue/woodturned, /area/rogue/under/town/basement) +"tvf" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 8 + }, +/obj/effect/decal/turfedge_neu/rockalt_edge, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield) "tvi" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/herringbone, @@ -16965,8 +17918,12 @@ }, /area/rogue/under/town/basement) "tvQ" = ( -/obj/structure/fluff/clock, -/turf/open/floor/rogue/wood, +/obj/effect/spawner/roguemap/hauntz_random, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/outdoors/town) +"tvX" = ( +/obj/structure/chair/wood/rogue, +/turf/open/floor/rogue/carpet/green, /area/rogue/indoors/town/tavern) "twY" = ( /obj/structure/mineral_door/wood{ @@ -17018,6 +17975,12 @@ /obj/structure/rack/rogue, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) +"tyX" = ( +/turf/open/floor/rogue/ruinedwood{ + dir = 1; + icon_state = "vertw" + }, +/area/rogue/indoors/town/tavern) "tzc" = ( /obj/structure/roguemachine/scomm/l{ pixel_x = 32 @@ -17037,14 +18000,21 @@ /turf/open/floor/rogue/tile, /area/rogue/indoors/town/manor) "tBd" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 1; - name = "Sewers" +/obj/structure/table/wood, +/obj/structure/bars/passage/shutter{ + redstone_id = "warehouse_inn01" }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) +/turf/open/floor/rogue/blocks/stonered, +/area/rogue/indoors/town/tavern) "tBB" = ( /obj/structure/rack/rogue, +/obj/item/natural/stone, +/obj/item/natural/stone, +/obj/item/natural/stone, +/obj/item/natural/stone, +/obj/item/natural/stone, +/obj/item/natural/stone, +/obj/item/natural/stone, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -17071,10 +18041,14 @@ /obj/machinery/anvil, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/dwarfin) +"tCq" = ( +/obj/structure/roguemachine/scomm/r, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/tavern) "tCz" = ( /obj/structure/fluff/walldeco/maidendrape{ - pixel_y = 0; - pixel_x = 32 + pixel_x = 32; + pixel_y = 0 }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) @@ -17104,11 +18078,9 @@ /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) "tDw" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 4 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/tavern) +/obj/machinery/light/rogue/lanternpost/fixed, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) "tDO" = ( /turf/open/water/river{ dir = 8 @@ -17148,15 +18120,15 @@ /area/rogue/indoors/town/manor) "tFT" = ( /obj/structure/roguemachine/scomm/l, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/garrison) "tGp" = ( /turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_corner"; - dir = 8 + dir = 8; + icon_state = "iron_corner" }, /area/rogue/under/town/sewer) "tHe" = ( @@ -17219,6 +18191,12 @@ /obj/structure/fluff/railing/border, /turf/open/floor/rogue/ruinedwood, /area/rogue/outdoors/mountains) +"tKn" = ( +/obj/structure/bed/rogue/wool, +/obj/item/bedsheet/rogue/fabric, +/obj/effect/landmark/start/manorguardsman, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/manor) "tKz" = ( /obj/effect/decal/cleanable/generic, /obj/effect/decal/cleanable/dirt/dust, @@ -17234,6 +18212,11 @@ icon_state = "greenstone" }, /area/rogue/under/town/basement) +"tKQ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table/wood/plain, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "tKY" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/ladder, @@ -17289,6 +18272,13 @@ icon_state = "weird1" }, /area/rogue/indoors/town/shop) +"tOd" = ( +/obj/structure/closet/crate/roguecloset, +/obj/item/reagent_containers/glass/bucket, +/obj/item/broom, +/obj/item/natural/cloth, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/town) "tOI" = ( /obj/structure/bookcase, /obj/item/book/rogue/bookofpriests, @@ -17301,6 +18291,12 @@ icon_state = "vertw" }, /area/rogue/indoors) +"tPo" = ( +/obj/structure/fluff/railing/border{ + dir = 1 + }, +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/town/roofs) "tPt" = ( /turf/closed/wall/mineral/rogue/roofwall/middle{ dir = 1 @@ -17330,15 +18326,21 @@ /area/rogue/under/town/basement) "tQB" = ( /obj/structure/closet/crate/roguecloset/dark, -/obj/item/alch/viscera, -/obj/item/alch/waterdust, /obj/item/alch/tobaccodust, /obj/item/alch/swampdust, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/magician) "tRS" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/twig, +/obj/item/natural/worms/leeches, +/obj/item/natural/worms/leeches{ + pixel_x = 7; + pixel_y = -8 + }, +/obj/item/natural/worms/leeches{ + pixel_x = -14; + pixel_y = -7 + }, +/turf/open/water/sewer, /area/rogue/under/town/basement) "tRX" = ( /turf/open/transparent/openspace, @@ -17443,9 +18445,13 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) "tXE" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) +/obj/structure/lever/wall{ + dir = 8; + pixel_y = 2; + redstone_id = "warehouse_inn01" + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "tXW" = ( /obj/structure/table/wood{ dir = 8; @@ -17460,19 +18466,16 @@ dir = 4 }, /area/rogue/outdoors/town) -"tYF" = ( -/obj/structure/fluff/railing/fence{ - dir = 4 - }, -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) "tYM" = ( /obj/machinery/light/rogue/firebowl/standing, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, /area/rogue/indoors/town/manor) +"tYV" = ( +/obj/structure/mineral_door/wood/red/vi, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/town/tavern) "tYX" = ( /obj/structure/closet/crate/chest/neu, /obj/item/paper, @@ -17548,14 +18551,20 @@ }, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/magician) +"ucG" = ( +/obj/structure/bed/rogue/wool, +/obj/item/bedsheet/rogue/fabric, +/obj/effect/landmark/start/manorguardsman, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/town/manor) "udg" = ( /obj/effect/decal/cleanable/dirt/cobweb, /turf/open/floor/rogue/churchrough, /area/rogue/indoors/town/church/chapel) "ueb" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 1 + dir = 1; + icon_state = "longtable" }, /obj/item/clothing/head/peaceflower{ pixel_x = -2; @@ -17564,22 +18573,21 @@ /turf/open/floor/rogue/hexstone, /area/rogue/under/town/basement) "ued" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/idagger/silver, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/magician) +/obj/structure/closet/crate/chest/old_crate, +/obj/item/natural/bundle/cloth, +/obj/item/clothing/under/roguetown/tights/sailor, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town) "ufU" = ( -/obj/structure/bed/rogue/hay, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern) "ugs" = ( /obj/item/natural/poo/horse, /turf/open/water/swamp, /area/rogue/outdoors/town) "ugM" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/curtain/bounty{ color = "grey" }, @@ -17601,10 +18609,14 @@ }, /turf/open/floor/rogue/metal/barograte, /area/rogue/under/town/basement) +"uhB" = ( +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern) "uhG" = ( /turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_corner"; - dir = 4 + dir = 4; + icon_state = "iron_corner" }, /area/rogue/under/cave) "uhL" = ( @@ -17650,8 +18662,11 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/manor) "ukh" = ( -/obj/structure/fluff/dryingrack, -/turf/open/floor/rogue/woodturned, +/obj/structure/roguewindow/solid, +/obj/structure/curtain/bounty, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "horzw" + }, /area/rogue/indoors/town/tavern) "uki" = ( /obj/machinery/light/rogue/torchholder/c, @@ -17697,16 +18712,13 @@ "ulA" = ( /turf/closed/wall/mineral/rogue/craftstone, /area/rogue/under/town/sewer) -"ulE" = ( -/obj/structure/fluff/railing/fence, -/obj/structure/fluff/railing/fence{ - dir = 8 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) "ulH" = ( /turf/closed/wall/mineral/rogue/stonebrick, /area/rogue/outdoors/town/roofs) +"ulO" = ( +/obj/structure/giantfur/small, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern) "ulR" = ( /obj/structure/flora/roguegrass/bush_meagre, /turf/open/floor/rogue/grass, @@ -17933,6 +18945,14 @@ }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/church) +"uwA" = ( +/obj/structure/chair/wood/rogue/chair_noble{ + dir = 8 + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "horzw" + }, +/area/rogue/indoors/town/magician) "uxC" = ( /obj/structure/fluff/grindwheel, /turf/open/floor/rogue/cobble, @@ -17953,7 +18973,7 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/magician) "uzc" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/curtain/bounty{ color = "grey" }, @@ -17966,7 +18986,7 @@ /turf/open/floor/rogue/woodturned, /area/rogue/under/town/basement) "uAd" = ( -/obj/effect/landmark/start/lady{ +/obj/effect/landmark/start/consort{ dir = 8 }, /turf/open/floor/rogue/ruinedwood{ @@ -18014,7 +19034,7 @@ /turf/open/floor/rogue/church, /area/rogue/indoors/town/church) "uCP" = ( -/obj/item/roguebin/water, +/obj/item/roguebin/water/gross, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "uDw" = ( @@ -18046,10 +19066,21 @@ /turf/open/floor/rogue/wood, /area/rogue/under/town/basement) "uEP" = ( -/obj/structure/fluff/railing/border{ - dir = 4 +/obj/structure/closet/crate/chest{ + base_icon_state = "woodchestalt"; + icon_state = "woodchestalt"; + name = "meat chest" }, -/turf/open/floor/rogue/wood, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/butter, +/obj/item/reagent_containers/food/snacks/butter, +/obj/item/reagent_containers/food/snacks/rogue/cheese, +/obj/item/reagent_containers/food/snacks/rogue/cheese, +/obj/item/reagent_containers/food/snacks/rogue/cheese, +/turf/open/floor/rogue/ruinedwood/spiralfade, /area/rogue/indoors/town/tavern) "uFn" = ( /obj/structure/mineral_door/bars{ @@ -18059,13 +19090,17 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) "uFM" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" +/obj/structure/closet/crate/chest/old_crate{ + name = "meat crate" }, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/obj/item/reagent_containers/food/snacks/fat, +/obj/item/reagent_containers/food/snacks/fat, +/obj/item/reagent_containers/food/snacks/rogue/meat/poultry, +/obj/item/reagent_containers/food/snacks/rogue/meat/poultry, +/turf/open/floor/rogue/ruinedwood/spiralfade, /area/rogue/indoors/town/tavern) "uFS" = ( /turf/closed/wall/mineral/rogue/stone, @@ -18081,12 +19116,18 @@ "uGB" = ( /turf/open/water/swamp, /area/rogue/outdoors/rtfield) +"uGR" = ( +/obj/structure/bookcase/random/thesis, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "horzw" + }, +/area/rogue/indoors/town/magician) "uGU" = ( /obj/structure/fluff/railing/wood{ dir = 1; pixel_y = -1 }, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "uHh" = ( @@ -18133,9 +19174,9 @@ /area/rogue/indoors/town) "uIj" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/sword/iron/short{ - pixel_y = -2; - pixel_x = 2 +/obj/item/rogueweapon/sword/short{ + pixel_x = 2; + pixel_y = -2 }, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) @@ -18152,10 +19193,8 @@ }, /area/rogue/indoors/town) "uIv" = ( -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) +/turf/open/floor/rogue/cobble/alt, +/area/rogue/outdoors/town) "uIA" = ( /obj/structure/chair/wood/rogue/fancy{ dir = 1 @@ -18163,9 +19202,7 @@ /turf/open/floor/rogue/tile, /area/rogue/indoors/town/manor) "uID" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 1 - }, +/obj/structure/mineral_door/wood/deadbolt, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) "uJU" = ( @@ -18189,10 +19226,14 @@ lockid = "vault"; name = "Vault" }, +/obj/structure/mineral_door/bars{ + locked = 1; + lockid = "dungeon" + }, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "uKl" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, /obj/structure/chair/stool/rogue, @@ -18248,6 +19289,18 @@ }, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/garrison) +"uPc" = ( +/obj/structure/fluff/railing/border{ + dir = 8 + }, +/obj/structure/fluff/railing/border{ + dir = 1 + }, +/obj/structure/fluff/railing/border{ + dir = 9 + }, +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/town/roofs) "uPm" = ( /obj/structure/table/wood{ icon_state = "tablewood1" @@ -18294,6 +19347,12 @@ }, /turf/open/floor/rogue/wood, /area/rogue/outdoors/town) +"uSa" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/chest/old_crate, +/obj/item/roguekey/mercenary, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tavern) "uSC" = ( /obj/machinery/light/rogue/torchholder{ dir = 4 @@ -18329,7 +19388,7 @@ /turf/closed/wall/mineral/rogue/stonebrick, /area/rogue/indoors/town/shop) "uTR" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/curtain/bounty{ color = "grey" }, @@ -18338,17 +19397,9 @@ icon_state = "vertw" }, /area/rogue/indoors/town/bath) -"uUc" = ( -/obj/structure/mineral_door/wood/window{ - locked = 1; - lockid = "tavern" - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) "uUs" = ( -/obj/structure/bed/rogue/inn/double, -/obj/item/bedsheet/rogue/double_pelt, -/turf/open/floor/rogue/wood, +/obj/structure/fermenting_barrel/water, +/turf/open/floor/rogue/ruinedwood/spiralfade, /area/rogue/indoors/town/tavern) "uUx" = ( /obj/structure/table/wood, @@ -18363,7 +19414,7 @@ }, /area/rogue/indoors/town/manor) "uVl" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/machinery/light/rogue/torchholder{ @@ -18379,8 +19430,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/indoors/town/dwarfin) "uVU" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/abyssor, +/obj/structure/bookcase/random/apocrypha, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "uWi" = ( @@ -18391,6 +19441,10 @@ /obj/structure/table/wood/plain, /turf/open/floor/rogue/woodturned, /area/rogue/under/town/basement) +"uXl" = ( +/mob/living/simple_animal/pet/cat/rogue/inn, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern) "uXI" = ( /obj/effect/landmark/start/mason, /obj/machinery/light/rogue/wallfire/candle/r, @@ -18416,11 +19470,15 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "uZC" = ( -/obj/structure/mineral_door/wood/window{ - lockid = "tavern" +/obj/structure/closet/crate/chest/neu{ + name = "spice chest" }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town) +/obj/item/reagent_containers/powder/salt, +/obj/item/reagent_containers/powder/salt, +/obj/item/reagent_containers/peppermill, +/obj/item/reagent_containers/food/snacks/rogue/honey, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "uZJ" = ( /turf/closed/wall/mineral/rogue/roofwall/outercorner{ dir = 8 @@ -18437,15 +19495,6 @@ }, /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) -"vao" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "largetable" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town/tavern) "vaA" = ( /obj/machinery/light/rogue/hearth, /obj/item/cooking/pan, @@ -18458,7 +19507,7 @@ /turf/open/floor/rogue/blocks/green, /area/rogue/under/town/sewer) "vbx" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /obj/machinery/light/rogue/firebowl/stump, @@ -18484,6 +19533,12 @@ }, /turf/open/floor/rogue/church, /area/rogue/indoors/town/church/chapel) +"vdP" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 4 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield) "vec" = ( /obj/structure/chair/stool/rogue, /obj/effect/decal/cleanable/generic, @@ -18541,6 +19596,12 @@ icon_state = "weird1" }, /area/rogue/indoors/town) +"vfP" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield) "vgd" = ( /obj/machinery/light/rogue/torchholder/r, /turf/open/floor/rogue/church, @@ -18577,7 +19638,7 @@ /turf/open/floor/rogue/churchrough, /area/rogue/indoors/town/church) "vhI" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /obj/structure/curtain/bounty{ color = "grey" }, @@ -18602,13 +19663,8 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/outdoors/town) "vim" = ( -/obj/structure/table/wood{ - dir = 5; - icon_state = "largetable" - }, -/turf/open/floor/rogue/tile{ - icon_state = "tile" - }, +/obj/structure/roguetent/preopen, +/turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/tavern) "viQ" = ( /obj/structure/chair/stool/rogue, @@ -18628,11 +19684,17 @@ }, /area/rogue/indoors/town/shop) "vjs" = ( -/obj/structure/stairs{ - dir = 1 +/obj/effect/decal/turfedge_neu/alt{ + dir = 9 }, -/turf/open/floor/rogue/wood, +/turf/open/floor/rogue/cobble/mossy/alt, /area/rogue/under/town/basement) +"vjI" = ( +/obj/structure/mineral_door/bars{ + lockid = "manor" + }, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) "vjY" = ( /obj/structure/stairs{ dir = 8 @@ -18683,6 +19745,10 @@ /obj/machinery/light/rogue/wallfire/candle/l, /turf/open/floor/rogue/tile/tilerg, /area/rogue/indoors/town) +"vmg" = ( +/obj/structure/fluff/statue/gargoyle/moss, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/tavern) "vmK" = ( /obj/structure/fermenting_barrel/random/water, /obj/machinery/light/rogue/wallfire/candle, @@ -18742,6 +19808,10 @@ /obj/item/bedsheet/rogue/cloth, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) +"vqF" = ( +/obj/machinery/light/rogue/firebowl, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/tavern) "vrc" = ( /obj/structure/closet/crate/chest/neu_fancy, /obj/item/clothing/ring/silver, @@ -18772,10 +19842,10 @@ dir = 1; pixel_y = -1 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 4 }, -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "vtQ" = ( @@ -18785,8 +19855,8 @@ /area/rogue/under/town/basement) "vtW" = ( /obj/structure/bars/cemetery, -/obj/effect/decal/cobbleedge, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu, +/obj/effect/decal/turfedge_neu{ dir = 1 }, /turf/open/floor/rogue/dirt/road, @@ -18805,28 +19875,22 @@ /obj/structure/closet/crate/roguecloset{ lockid = "butler" }, +/obj/item/clothing/under/roguetown/loincloth, +/obj/item/clothing/under/roguetown/loincloth, /turf/open/floor/rogue/tile{ icon_state = "chess" }, /area/rogue/under/town/basement) "vum" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable" - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town/tavern) -"vuz" = ( -/obj/machinery/light/rogue/torchholder{ +/obj/structure/table/wood/reinf_long{ dir = 8 }, -/obj/structure/fluff/railing/border{ - dir = 9 - }, -/obj/structure/roguemachine/mail, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/turf/open/floor/rogue/ruinedwood/spiralfade, /area/rogue/indoors/town/tavern) "vuX" = ( /turf/open/floor/rogue/woodturned, @@ -18837,13 +19901,16 @@ /obj/structure/closet/crate/roguecloset, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) +"vvC" = ( +/obj/structure/chair/wood, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern) "vvL" = ( -/obj/structure/table/wood/reinf_long, /obj/machinery/light/rogue/wallfire/candle/blue{ - pixel_y = 0; - pixel_x = -32 + pixel_x = -32; + pixel_y = 0 }, -/obj/item/candle/yellow/lit, +/obj/structure/table/wood/plain, /turf/open/floor/carpet/stellar, /area/rogue/indoors/town/magician) "vvO" = ( @@ -18861,18 +19928,33 @@ }, /area/rogue/indoors/town/dwarfin) "vwE" = ( -/obj/item/roguebin/water, -/turf/open/floor/rogue/wood, +/obj/structure/table/wood{ + icon_state = "tablewood3" + }, +/obj/item/candle/yellow/lit/infinite, +/turf/open/floor/rogue/woodturned/saiga, /area/rogue/indoors/town/tavern) "vxu" = ( /turf/open/floor/rogue/blocks/green, -/area/rogue/under/cave) +/area/rogue/under/town/basement) +"vyw" = ( +/obj/structure/table/wood, +/obj/item/book/rogue/mysticalfog, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "horzw" + }, +/area/rogue/indoors/town/magician) "vyC" = ( /obj/machinery/light/rogue/wallfire{ pixel_y = 32 }, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town) +"vze" = ( +/obj/structure/chair/bench/coucha/r, +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "vzv" = ( /obj/structure/mineral_door/bars{ lockid = "garrison" @@ -18923,6 +20005,16 @@ icon_state = "weird1" }, /area/rogue/indoors/town) +"vCk" = ( +/obj/structure/fluff/railing/wood{ + dir = 8; + pixel_y = -1 + }, +/obj/structure/fluff/railing/wood{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/town) "vCs" = ( /obj/structure/closet/crate/chest/old_crate, /obj/item/reagent_containers/food/snacks/egg, @@ -18935,7 +20027,7 @@ /turf/open/floor/rogue/tile, /area/rogue/indoors) "vCv" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /turf/open/floor/rogue/dirt/road, @@ -18962,9 +20054,39 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "vEf" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/twig, -/area/rogue/under/town/basement) +/obj/item/storage/bag/tray{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/item/storage/bag/tray{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/item/cooking/platter{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/cooking/platter{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/cooking/platter{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/cooking/platter{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/cooking/platter{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/structure/table/wood/reinf_long{ + dir = 4 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "vEK" = ( /obj/effect/spawner/roguemap/stump, /turf/open/floor/rogue/dirt, @@ -19001,17 +20123,20 @@ /area/rogue/indoors/town/manor) "vIL" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/woodstaff, -/obj/item/rogueweapon/woodstaff, +/obj/item/rogueweapon/polearm/woodstaff, +/obj/item/rogueweapon/polearm/woodstaff, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "vJa" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /obj/item/reagent_containers/food/snacks/produce/wheat, /obj/item/reagent_containers/food/snacks/produce/wheat, +/obj/item/reagent_containers/food/snacks/produce/oat, +/obj/item/reagent_containers/food/snacks/produce/oat, +/obj/item/reagent_containers/food/snacks/produce/oat, /turf/open/floor/rogue/wood/nosmooth, /area/rogue/under/town/basement) "vJl" = ( @@ -19036,6 +20161,13 @@ /obj/structure/fluff/railing/border, /turf/open/floor/rogue/church, /area/rogue/indoors/town/church/chapel) +"vKN" = ( +/obj/machinery/light/rogue/firebowl/stump, +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield) "vKO" = ( /obj/structure/bars, /turf/open/water/sewer, @@ -19087,22 +20219,22 @@ /turf/open/floor/rogue/cobble, /area/rogue/indoors/town/manor) "vOG" = ( -/obj/item/kitchen/fork, -/obj/item/kitchen/spoon, -/obj/item/kitchen/spoon, -/obj/structure/rack/rogue/shelf/biggest, -/obj/item/reagent_containers/glass/bowl, -/obj/item/reagent_containers/glass/bowl, -/turf/open/floor/rogue/cobble, +/turf/open/floor/rogue/carpet/green, +/area/rogue/indoors/town/tavern) +"vON" = ( +/obj/machinery/light/rogue/campfire, +/turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) "vOZ" = ( -/obj/structure/chair/wood/rogue/fancy, -/turf/open/floor/rogue/wood, +/obj/structure/chair/wood/rogue/chair_noble/red{ + dir = 8 + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, /area/rogue/indoors/town/tavern) "vPM" = ( /obj/structure/table/wood{ - icon_state = "longtable"; - dir = 4 + dir = 4; + icon_state = "longtable" }, /obj/item/reagent_containers/glass/cup/silver, /turf/open/floor/rogue/wood, @@ -19116,34 +20248,15 @@ /obj/item/flashlight/flare/torch/lantern, /turf/open/floor/rogue/blocks, /area/rogue/under/town/basement) -"vQO" = ( -/obj/structure/rack/rogue/shelf/big, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden{ - pixel_x = 8 - }, -/obj/structure/rack/rogue/shelf/big{ - pixel_y = 0 - }, -/obj/item/reagent_containers/glass/cup{ - pixel_x = 8; - pixel_y = 20 - }, -/obj/item/reagent_containers/glass/cup{ - pixel_x = -2; - pixel_y = 20 - }, -/obj/item/reagent_containers/glass/cup{ - pixel_x = 8; - pixel_y = 20 - }, -/turf/open/floor/rogue/ruinedwood, +"vQE" = ( +/obj/structure/table/wood/nice/decorated, +/obj/item/rogue/instrument/flute, +/turf/open/floor/rogue/ruinedwood/chevron, /area/rogue/indoors/town/tavern) "vQT" = ( /obj/structure/mineral_door/wood{ - lockid = "apartment2"; locked = 1; + lockid = "apartment2"; name = "Apartment II" }, /turf/open/floor/rogue/cobble, @@ -19174,6 +20287,8 @@ /area/rogue/indoors/town/manor) "vRR" = ( /obj/structure/closet/crate/roguecloset/inn, +/obj/item/broom, +/obj/item/natural/cloth, /turf/open/floor/rogue/twig, /area/rogue/indoors/town) "vSb" = ( @@ -19282,8 +20397,8 @@ /area/rogue/indoors/town/manor) "vUw" = ( /obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 + dir = 10; + icon_state = "tablewood2" }, /turf/open/floor/rogue/wood/nosmooth, /area/rogue/indoors/town) @@ -19310,15 +20425,14 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "vVN" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomvi"; - name = "ROOM VI" +/obj/structure/stairs{ + dir = 4 }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" + dir = 1; + icon_state = "vertw" }, -/area/rogue/indoors/town/tavern) +/area/rogue/outdoors/town/roofs) "vVX" = ( /obj/structure/stairs/stone{ dir = 4 @@ -19344,14 +20458,15 @@ /turf/open/floor/rogue/ruinedwood, /area/rogue/outdoors/mountains) "vXs" = ( -/obj/structure/bars, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern) "vXt" = ( -/obj/structure/table/wood{ - icon_state = "longtable" +/obj/structure/lever/wall{ + dir = 4; + redstone_id = "warehouse_inn01" }, -/turf/open/floor/rogue/woodturned, +/turf/open/floor/rogue/ruinedwood/spiralfade, /area/rogue/indoors/town/tavern) "vYg" = ( /obj/effect/landmark/start/wapprentice, @@ -19378,6 +20493,13 @@ "wau" = ( /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/bath) +"waK" = ( +/obj/structure/chair/wood/rogue/chair_noble{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town) "wbG" = ( /obj/structure/chair/stool/rogue{ pixel_x = -2; @@ -19415,9 +20537,17 @@ }, /turf/open/transparent/openspace, /area/rogue/outdoors/town/roofs) +"wdi" = ( +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/outdoors/town/roofs) "wds" = ( -/obj/machinery/light/rogue/torchholder, -/turf/closed/wall/mineral/rogue/decowood, +/obj/structure/fluff/railing/border{ + dir = 4; + pixel_x = 3 + }, +/obj/item/roguebin, +/obj/structure/fluff/walldeco/innsign/trophy, +/turf/open/floor/rogue/ruinedwood/spiralfade, /area/rogue/indoors/town/tavern) "wdH" = ( /mob/living/simple_animal/hostile/retaliate/rogue/spider/mutated, @@ -19455,10 +20585,6 @@ "wgm" = ( /turf/closed/wall/mineral/rogue/decostone/long, /area/rogue/indoors/town/church) -"wgF" = ( -/obj/machinery/light/rogue/chand, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern) "wgK" = ( /turf/closed/wall/mineral/rogue/roofwall/outercorner{ dir = 8 @@ -19489,12 +20615,18 @@ /turf/open/transparent/openspace, /area/rogue/outdoors/town) "whI" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ dir = 1; icon_state = "vertw" }, /area/rogue/indoors/town/bath) +"wid" = ( +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 8 + }, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/tavern) "wil" = ( /obj/machinery/light/rogue/torchholder/c, /turf/open/floor/rogue/cobble, @@ -19508,10 +20640,9 @@ /turf/closed/wall/mineral/rogue/wooddark/end, /area/rogue/indoors) "wkz" = ( -/obj/structure/chair/wood/rogue{ - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood, +/obj/structure/fluff/clock, +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/wood/saiga, /area/rogue/indoors/town/tavern) "wkI" = ( /obj/structure/fluff/walldeco/customflag{ @@ -19519,15 +20650,6 @@ }, /turf/open/floor/rogue/tile/tilerg, /area/rogue/indoors/town/manor) -"wkV" = ( -/obj/structure/rack/rogue/shelf, -/obj/structure/rack/rogue/shelf/biggest, -/obj/item/flint{ - pixel_y = 40 - }, -/obj/item/kitchen/rollingpin, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) "wla" = ( /obj/structure/fluff/railing/border{ dir = 6 @@ -19585,29 +20707,34 @@ }, /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) -"wnd" = ( -/obj/structure/fluff/walldeco/innsign{ - alpha = 200; - pixel_y = -15 - }, -/obj/structure/chair/wood/rogue{ - dir = 4 +"wmY" = ( +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 8 }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/town/roofs) +/obj/effect/decal/turfedge_neu/mossy_small, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/tavern) +"wnd" = ( +/obj/item/bedsheet/rogue/pelt, +/obj/structure/bed/rogue/inn, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern) "wnY" = ( /turf/closed/wall/mineral/rogue/roofwall/outercorner, /area/rogue/outdoors/mountains) "woi" = ( /obj/machinery/light/rogue/wallfire/candle/blue{ - pixel_y = 0; - pixel_x = -32 + pixel_x = -32; + pixel_y = 0 }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/shop) "wol" = ( -/turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/town/roofs) +/obj/structure/roguewindow/openclose{ + dir = 8 + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern) "wom" = ( /obj/structure/fluff/railing/border{ dir = 4 @@ -19649,7 +20776,7 @@ /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/church) "wrm" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ dir = 1; icon_state = "vertw" @@ -19660,7 +20787,7 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "wrA" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 8 }, /turf/open/floor/rogue/wood, @@ -19682,8 +20809,8 @@ }, /area/rogue/under/cave) "wsG" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern) +/turf/open/floor/rogue/wood/saiga, +/area/rogue/outdoors/town/roofs) "wsH" = ( /obj/effect/decal/cleanable/dirt/cobweb, /obj/structure/chair/stool/rogue, @@ -19692,10 +20819,6 @@ icon_state = "weird1" }, /area/rogue/indoors/town) -"wsZ" = ( -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield) "wtj" = ( /obj/structure/chair/wood/rogue, /turf/open/floor/rogue/woodturned, @@ -19727,8 +20850,11 @@ }, /area/rogue/indoors/town/manor) "wuH" = ( -/obj/structure/table/wood/fancy/blue, -/turf/open/floor/carpet/red, +/obj/structure/fluff/railing/border{ + dir = 8 + }, +/obj/structure/roguemachine/atm, +/turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/tavern) "wuN" = ( /obj/structure/mineral_door/wood{ @@ -19754,14 +20880,21 @@ /obj/item/alch/bonemeal, /turf/open/floor/rogue/blocks/green, /area/rogue/under/town/sewer) +"wvP" = ( +/obj/structure/table/wood{ + dir = 6; + icon_state = "largetable" + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern) "wxk" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/carpet/red, /area/rogue/indoors/shelter/town/sargoth) "wxz" = ( /turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_corner"; - dir = 8 + dir = 8; + icon_state = "iron_corner" }, /area/rogue/under/cave) "wxB" = ( @@ -19812,8 +20945,8 @@ /area/rogue/indoors/town/manor) "wBg" = ( /turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_line"; - dir = 4 + dir = 4; + icon_state = "iron_line" }, /area/rogue/under/town/sewer) "wBm" = ( @@ -19821,6 +20954,10 @@ /obj/item/bedsheet/rogue/fabric, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/manor) +"wBv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town) "wBy" = ( /obj/structure/bookcase, /obj/item/book/rogue/nitebeast, @@ -19837,9 +20974,11 @@ /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/church) "wCF" = ( -/obj/structure/bearpelt, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern) +/obj/machinery/light/rogue/torchholder{ + dir = 8 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) "wCH" = ( /obj/machinery/light/rogue/wallfire/candle, /obj/effect/decal/cleanable/dirt/dust, @@ -19863,7 +21002,7 @@ }, /area/rogue/indoors) "wEI" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -19887,9 +21026,7 @@ /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/manor) "wGw" = ( -/obj/structure/rogue/trophy/deer, -/obj/structure/chair/bench/ultimacouch, -/turf/open/floor/rogue/woodturned, +/turf/open/floor/rogue/ruinedwood/spiralfade, /area/rogue/indoors/town/tavern) "wGM" = ( /obj/structure/closet/crate/roguecloset/inn, @@ -19912,6 +21049,7 @@ /obj/machinery/light/rogue/wallfire/candle/blue/l, /obj/structure/rack/rogue/shelf/biggest, /obj/item/natural/bundle/stick, +/obj/item/natural/bundle/stick, /turf/open/floor/rogue/hexstone, /area/rogue/indoors/town/magician) "wHR" = ( @@ -19919,7 +21057,7 @@ /turf/open/floor/rogue/cobblerock, /area/rogue/outdoors/town) "wHZ" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 9 }, /turf/open/floor/rogue/grass, @@ -19938,23 +21076,23 @@ /area/rogue/under/town/basement) "wIL" = ( /obj/structure/rack/rogue/shelf/biggest, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed_dried{ +/obj/item/reagent_containers/food/snacks/produce/swampweed_dried{ pixel_x = 4; pixel_y = -8 }, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed_dried{ +/obj/item/reagent_containers/food/snacks/produce/swampweed_dried{ pixel_x = 4; pixel_y = -8 }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed{ +/obj/item/reagent_containers/food/snacks/produce/dry_westleach{ pixel_x = -4; pixel_y = 8 }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed{ +/obj/item/reagent_containers/food/snacks/produce/dry_westleach{ pixel_x = -4; pixel_y = 8 }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed{ +/obj/item/reagent_containers/food/snacks/produce/dry_westleach{ pixel_x = -4; pixel_y = 8 }, @@ -19998,6 +21136,7 @@ /obj/machinery/light/rogue/torchholder{ pixel_y = 26 }, +/obj/effect/decal/turfedge_neu/rockalt_corners, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/rtfield) "wME" = ( @@ -20043,19 +21182,17 @@ /turf/open/floor/rogue/ruinedwood/chevron, /area/rogue/indoors/shelter/town/sargoth) "wPZ" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/item/natural/poo/horse, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) "wQi" = ( -/obj/structure/closet/crate/chest/neu, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/turf/open/floor/rogue/ruinedwood{ +/obj/structure/table/wood{ dir = 1; - icon_state = "vertw" + icon_state = "tablewood_alt2" }, +/obj/structure/mineral_door/wood/deadbolt/shutter, +/turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "wQm" = ( /obj/machinery/light/rogue/wallfire/candle/l, @@ -20085,13 +21222,11 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "wSS" = ( -/obj/structure/chair/wood/rogue{ - dir = 4 - }, -/obj/effect/landmark/start/adventurer{ - dir = 4 +/obj/structure/mineral_door/wood/window{ + locked = 1; + lockid = "tavern" }, -/turf/open/floor/carpet/red, +/turf/open/floor/rogue/ruinedwood/spiralfade, /area/rogue/indoors/town/tavern) "wSU" = ( /obj/structure/mineral_door/wood{ @@ -20149,10 +21284,11 @@ /turf/open/floor/rogue/twig, /area/rogue/indoors/town) "wWl" = ( -/obj/structure/chair/wood/rogue{ - dir = 8 +/obj/structure/table/wood{ + dir = 1; + icon_state = "longtable_mid" }, -/turf/open/floor/carpet/purple, +/turf/open/floor/rogue/tile, /area/rogue/indoors/town/tavern) "wWN" = ( /obj/structure/closet/crate/drawer, @@ -20160,8 +21296,13 @@ /obj/item/keyring, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/church) +"wXf" = ( +/obj/machinery/light/rogue/wallfire/candle, +/obj/structure/table/wood/plain, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern) "wXr" = ( -/obj/effect/landmark/start/cook, +/obj/structure/table/wood/nice/decorated, /turf/open/floor/rogue/tile{ icon_state = "tile" }, @@ -20186,25 +21327,23 @@ /turf/open/floor/rogue/churchrough, /area/rogue/indoors/town/church) "wYg" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "largetable" - }, -/obj/item/rogueweapon/huntingknife/cleaver, -/turf/open/floor/rogue/tile{ - icon_state = "tile" - }, +/obj/item/bedsheet/rogue/cloth, +/obj/structure/bed/rogue/mediocre, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/start/mercenary, +/turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town/tavern) "wYj" = ( /obj/structure/fluff/railing/border, /turf/open/transparent/openspace, /area/rogue/outdoors/rtfield) "wYR" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 8 +/obj/item/reagent_containers/glass/cup/wooden, +/obj/structure/table/wood{ + dir = 1; + icon_state = "longtable_mid" }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/wood, +/turf/open/floor/rogue/tile, /area/rogue/indoors/town/tavern) "wZi" = ( /obj/structure/rack/rogue/shelf/biggest, @@ -20336,6 +21475,12 @@ }, /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/church) +"xgp" = ( +/obj/structure/chair/wood/rogue/fancy{ + dir = 8 + }, +/turf/open/floor/carpet/purple, +/area/rogue/indoors/town/manor) "xgH" = ( /obj/effect/landmark/start/gravedigger, /obj/structure/bed/rogue, @@ -20416,10 +21561,6 @@ /obj/item/roguecoin/gold/pile, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/church) -"xlw" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern) "xlR" = ( /turf/closed/wall/mineral/rogue/roofwall/outercorner{ dir = 8 @@ -20430,14 +21571,16 @@ /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors) "xmv" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomiii"; - name = "ROOM III" +/obj/structure/fluff/railing/border{ + dir = 4; + pixel_x = 3 }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" +/obj/structure/table/wood{ + dir = 1; + icon_state = "longtable_mid" }, +/obj/structure/roguemachine/vendor/inn, +/turf/open/floor/rogue/tile, /area/rogue/indoors/town/tavern) "xmy" = ( /obj/structure/flora/ausbushes/lavendergrass, @@ -20473,7 +21616,7 @@ /turf/closed/wall/mineral/rogue/decostone, /area/rogue/indoors/town/manor) "xpo" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/structure/fluff/railing/wood{ @@ -20496,11 +21639,7 @@ /turf/open/floor/rogue/grass, /area/rogue/indoors/town/church) "xpH" = ( -/obj/structure/chair/wood/rogue{ - dir = 4; - icon_state = "chair2" - }, -/turf/open/floor/carpet/red, +/turf/open/floor/rogue/woodturned/saiga, /area/rogue/indoors/town/tavern) "xpQ" = ( /obj/structure/closet/crate/chest/old_crate, @@ -20511,12 +21650,23 @@ }, /area/rogue/under/town/basement) "xqs" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_x = -32 +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/tavern) +"xqD" = ( +/obj/machinery/light/rogue/wallfire/candle/blue{ + pixel_x = -32; + pixel_y = 0 }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" +/turf/open/floor/rogue/hexstone, +/area/rogue/under/town/basement) +"xqU" = ( +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 8 + }, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 4 }, +/turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/tavern) "xrp" = ( /obj/effect/landmark/observer_start, @@ -20525,7 +21675,7 @@ "xrs" = ( /obj/structure/closet/crate/roguecloset, /obj/item/clothing/cloak/apron/brown, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /obj/effect/decal/cleanable/dirt/cobweb, /turf/open/floor/rogue/ruinedwood{ dir = 1; @@ -20539,6 +21689,10 @@ icon_state = "bfloorz" }, /area/rogue/indoors/town/manor) +"xrD" = ( +/obj/structure/table/wood/plain, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/tavern) "xrM" = ( /obj/structure/fluff/wallclock/r, /obj/structure/table/wood{ @@ -20560,9 +21714,9 @@ /area/rogue/outdoors/rtfield) "xsL" = ( /obj/structure/chair/wood/rogue{ - dir = 8 + dir = 4 }, -/turf/open/floor/carpet/red, +/turf/open/floor/rogue/ruinedwood/spiralfade, /area/rogue/indoors/town/tavern) "xsP" = ( /obj/structure/bars/pipe{ @@ -20575,22 +21729,30 @@ /turf/open/floor/rogue/wood, /area/rogue/indoors/town/garrison) "xta" = ( +/obj/structure/stairs/stone, +/turf/open/floor/rogue/cobble/mossy, +/area/rogue/indoors/town/tavern) +"xtd" = ( /obj/structure/table/wood{ dir = 10; icon_state = "tablewood2" }, -/obj/item/trash/applecore, -/turf/open/floor/rogue/blocks/green, -/area/rogue/under/town/sewer) +/obj/item/broom, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/town) +"xty" = ( +/obj/effect/decal/turfedge_neu/alt_small, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) "xug" = ( /turf/open/floor/rogue/blocks/green, /area/rogue/under/town/sewer) "xuD" = ( /obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" + dir = 5 }, -/turf/open/floor/rogue/naturalstone, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/twig, /area/rogue/under/town/basement) "xuE" = ( /turf/open/floor/rogue/tile{ @@ -20668,6 +21830,13 @@ }, /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) +"xAt" = ( +/obj/structure/bookcase/random, +/obj/item/book/rogue/manners, +/obj/item/book/rogue/magicaltheory, +/obj/item/book/rogue/cardgame, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern) "xAu" = ( /obj/structure/table/wood/reinforced_alt, /obj/structure/bars{ @@ -20693,6 +21862,10 @@ }, /turf/open/floor/rogue/herringbone, /area/rogue/under/town/basement) +"xBz" = ( +/obj/structure/mineral_door/wood/violet/roomroyal, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern) "xBL" = ( /obj/structure/mineral_door/wood{ lockid = "merchant" @@ -20738,10 +21911,10 @@ /obj/item/alch/bone, /obj/item/alch/bone, /obj/item/alch/bone, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed_dried, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed_dried, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/swampweed_dried, +/obj/item/reagent_containers/food/snacks/produce/swampweed_dried, /obj/item/reagent_containers/powder/ozium, /obj/item/reagent_containers/powder/moondust, /obj/item/reagent_containers/powder/moondust_purest, @@ -20761,7 +21934,7 @@ dir = 1 }, /turf/open/floor/rogue/blocks/green, -/area/rogue/under/cave) +/area/rogue/under/town/basement) "xFQ" = ( /obj/structure/chair/bench/ultimacouch, /turf/open/floor/carpet/stellar, @@ -20776,6 +21949,15 @@ /obj/structure/chair/stool/rogue, /turf/open/floor/rogue/cobble, /area/rogue/indoors/town) +"xGC" = ( +/obj/structure/chair/wood/rogue{ + dir = 4 + }, +/obj/effect/landmark/start/villager{ + dir = 4 + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern) "xGU" = ( /obj/structure/closet/crate/chest/wicker, /obj/item/neuFarm/seed/wheat, @@ -20805,12 +21987,12 @@ /turf/closed/wall/mineral/rogue/wooddark/vertical, /area/rogue/indoors/town/shop) "xIu" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 +/obj/structure/stairs/stone{ + dir = 8 }, -/turf/open/floor/rogue/woodturned, -/area/rogue/indoors/town) +/obj/structure/stairs/stone, +/turf/open/floor/rogue/ruinedwood, +/area/rogue/indoors/town/tavern) "xIy" = ( /obj/structure/fluff/statue/gargoyle, /turf/open/floor/rogue/cobble, @@ -20831,13 +22013,11 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) "xJt" = ( -/obj/machinery/light/rogue/wallfire/candle/blue/r{ - pixel_x = 0; - pixel_y = 32 +/obj/structure/fluff/railing/border{ + dir = 8 }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/tavern) "xJO" = ( /obj/structure/ladder, /turf/open/floor/rogue/ruinedwood{ @@ -20845,23 +22025,32 @@ }, /area/rogue/indoors/town/manor) "xKa" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "tablewood1" +/obj/structure/chair/wood/rogue{ + dir = 4 }, -/turf/open/floor/rogue/woodturned, +/turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/tavern) "xKX" = ( /turf/open/floor/rogue/dirt, /area/rogue/under/cave) "xLp" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 6 }, /obj/item/roguebin, /obj/effect/decal/cleanable/vomit/old, /turf/open/floor/rogue/grass, /area/rogue/outdoors/town) +"xLq" = ( +/obj/structure/mineral_door/wood/red{ + lockid = "tavern" + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/tavern) +"xMd" = ( +/obj/structure/flora/roguegrass/bush/wall/tall, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern) "xMt" = ( /obj/machinery/light/rogue/torchholder, /turf/closed/wall/mineral/rogue/pipe{ @@ -20883,11 +22072,6 @@ /obj/machinery/light/rogue/wallfire/candle, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/church) -"xNU" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield) "xPr" = ( /turf/open/water/river{ dir = 8 @@ -20902,7 +22086,7 @@ /turf/open/floor/rogue/naturalstone, /area/rogue/under/town/basement) "xQe" = ( -/obj/effect/decal/cobbleedge, +/obj/effect/decal/turfedge_neu, /obj/machinery/light/rogue/wallfire/candle, /obj/structure/fermenting_barrel/random/water, /turf/open/floor/rogue/woodturned, @@ -20937,7 +22121,8 @@ "xRZ" = ( /obj/structure/mineral_door/wood{ locked = 1; - lockid = "manor" + lockid = "walls"; + name = "Bunks" }, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" @@ -20963,20 +22148,16 @@ }, /area/rogue/under/town/basement) "xUN" = ( -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/twig, -/area/rogue/under/town/basement) +/obj/structure/stairs, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/town) "xVf" = ( /turf/open/floor/carpet/royalblack, /area/rogue/indoors/town/church) "xVU" = ( -/obj/structure/chair/bench/ultimacouch, -/turf/open/floor/carpet/purple, -/area/rogue/indoors/town/tavern) +/obj/structure/stairs, +/turf/open/floor/rogue/cobble/mossy, +/area/rogue/outdoors/town) "xVW" = ( /obj/machinery/light/rogue/torchholder/l{ dir = 1 @@ -20993,10 +22174,11 @@ /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "xWz" = ( -/obj/structure/chair/wood/rogue{ - dir = 1 - }, -/turf/open/floor/rogue/wood, +/obj/structure/table/wood/plain, +/obj/machinery/light/rogue/wallfire/candle/l, +/obj/item/book_crafting_kit, +/obj/item/book_crafting_kit, +/turf/open/floor/rogue/tile, /area/rogue/indoors/town/manor) "xWS" = ( /turf/open/floor/rogue/metal, @@ -21027,18 +22209,18 @@ }, /area/rogue/indoors/town/magician) "xYP" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/tavern) +/obj/machinery/light/rogue/torchholder/l, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/town) "xZg" = ( -/obj/structure/table/wood{ - icon_state = "tablewood3" +/obj/machinery/light/rogue/torchholder{ + pixel_y = 26 }, -/obj/structure/roguemachine/musicbox, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/tavern) +/obj/effect/decal/turfedge_neu/alt{ + dir = 5 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) "xZr" = ( /obj/structure/bookcase, /obj/item/book/rogue/godofdreamsandnightmares, @@ -21079,6 +22261,13 @@ /obj/item/reagent_containers/glass/bottle, /turf/open/floor/carpet/stellar, /area/rogue/indoors/town/magician) +"ycw" = ( +/obj/structure/stairs, +/obj/structure/fluff/railing/border{ + dir = 4 + }, +/turf/open/floor/rogue/woodturned, +/area/rogue/indoors/town/tavern) "ycy" = ( /obj/item/candle/yellow/lit, /obj/structure/table/wood{ @@ -21094,19 +22283,30 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/town) "ycL" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/obj/structure/stairs{ - dir = 1 +/obj/effect/decal/turfedge_neu/mossy{ + dir = 10 }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 8 + }, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/tavern) "ydq" = ( /obj/machinery/light/rogue/wallfire/candle/blue, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/rogue/ruinedwood/spiral, /area/rogue/indoors/town) "ydE" = ( /turf/open/floor/rogue/tile, /area/rogue/outdoors/exposed/dwarf) +"ydO" = ( +/obj/structure/roguewindow/openclose{ + dir = 4 + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "horzw" + }, +/area/rogue/indoors/town/tavern) "ydQ" = ( /obj/structure/chair/bench/couch{ icon_state = "redcouch2" @@ -21141,12 +22341,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/outdoors/exposed/dwarf) "yfz" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "tablewood_alt2" - }, -/obj/structure/mineral_door/wood/deadbolt/shutter, -/turf/open/floor/rogue/ruinedwood, +/turf/open/transparent/openspace, /area/rogue/indoors/town/tavern) "yfB" = ( /obj/structure/composter/halffull, @@ -21217,6 +22412,13 @@ }, /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town/roofs) +"yiX" = ( +/obj/structure/fluff/railing/border{ + dir = 6 + }, +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/tavern) "yja" = ( /obj/structure/guillotine, /turf/open/floor/rogue/wood, @@ -28722,12 +29924,12 @@ vzQ vzQ xPr xPr -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ +aWn +oVk +oVk +oVk +oVk +oVk vzQ vzQ vzQ @@ -28879,12 +30081,12 @@ vzQ vzQ xPr xPr -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ +aWn +ahY +gzW +cre +dGE +oVk vzQ vzQ vzQ @@ -29036,12 +30238,12 @@ rsg rsg xPr xPr -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ +aWn +aBs +cre +cre +dJo +oVk vzQ vzQ vzQ @@ -29193,14 +30395,14 @@ rsg rsg xPr xPr -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ +aWn +aBJ +csH +cre +kdB +kdB +kdB +oVk vzQ vzQ vzQ @@ -29350,6 +30552,14 @@ vzQ vzQ xPr xPr +aWn +aEr +cEj +cre +oVk +eZG +gMl +oVk vzQ vzQ vzQ @@ -29365,14 +30575,6 @@ vzQ vzQ vzQ vzQ -kdB -kdB -kdB -aqZ -aqZ -kdB -vzQ -vzQ vzQ vzQ vzQ @@ -29507,6 +30709,15 @@ vzQ vzQ xPr xPr +aWn +aJh +cGA +cre +oVk +fmE +fxm +oVk +vzQ vzQ vzQ vzQ @@ -29519,15 +30730,6 @@ vzQ vzQ vzQ vzQ -kdB -aWn -aWn -aqZ -xJt -lvy -lvy -bdi -kdB vzQ vzQ vzQ @@ -29664,6 +30866,19 @@ vzQ vzQ xPr xPr +fWc +aNW +cre +cre +oVk +fxm +gNr +oVk +kdB +kdB +kdB +kvJ +aWn vzQ vzQ vzQ @@ -29676,19 +30891,6 @@ vzQ vzQ vzQ vzQ -aqZ -jZe -aoW -aqZ -vfb -vfb -eWt -mgv -kdB -vzQ -vzQ -vzQ -vzQ vzQ vzQ vzQ @@ -29821,6 +31023,20 @@ vzQ vzQ xPr xPr +aWn +oVk +oVk +ddT +oVk +fzj +oVk +oVk +ioS +iOt +jUe +ipK +aWn +aWn vzQ vzQ vzQ @@ -29833,20 +31049,6 @@ vzQ vzQ vzQ vzQ -aWn -vfb -eWt -csH -aoW -uDE -uDE -lDA -aqZ -vzQ -vzQ -vzQ -vzQ -vzQ vzQ vzQ vzQ @@ -29978,6 +31180,20 @@ vzQ vzQ xPr xPr +aWn +aNX +fzi +vfb +dUI +cWI +oVk +oVk +ipK +cWI +cWI +ipK +mvo +aWn vzQ vzQ vzQ @@ -29990,20 +31206,6 @@ vzQ vzQ vzQ vzQ -kdB -eWt -aoW -kdB -aoW -eLP -uDE -uDE -aqZ -vzQ -vzQ -vzQ -vzQ -vzQ vzQ vzQ vzQ @@ -30135,6 +31337,20 @@ vzQ vzQ xPr xPr +aWn +aNX +vfb +oVk +cWI +fRw +oVk +hQc +ipK +jrT +jVf +iOt +ipK +aWn vzQ vzQ vzQ @@ -30147,20 +31363,6 @@ vzQ vzQ vzQ vzQ -aqZ -aoW -mgv -aqZ -bNu -hDT -hDT -eLP -aqZ -vzQ -vzQ -vzQ -vzQ -vzQ vzQ vzQ vzQ @@ -30175,7 +31377,7 @@ rtq xug czv xug -gwS +wxz kYt kYt kAV @@ -30292,6 +31494,20 @@ vzQ vzQ xPr xPr +aWn +blj +vfb +dgF +cWI +gdH +oVk +hSn +ipK +ipK +ipK +jrT +ipK +aWn vzQ vzQ vzQ @@ -30302,20 +31518,6 @@ vzQ vzQ vzQ vzQ -aWn -kdB -aWn -mgv -vfb -aqZ -vfb -iks -iks -jVf -kdB -vzQ -vzQ -vzQ vzQ vzQ vzQ @@ -30422,7 +31624,7 @@ vzQ vzQ vzQ vzQ -gwS +wxz wsd wsd wsd @@ -30449,8 +31651,20 @@ vzQ vzQ xPr xPr -vzQ -vzQ +aWn +bBb +cLR +vfb +cWI +giK +oVk +cWI +itr +jBk +ipK +vjs +mzn +aWn vzQ vzQ vzQ @@ -30460,22 +31674,10 @@ vzQ vzQ vzQ aqZ -vjs -aoW -vfb -aoW -kdB -evp -uDE -glA -uDE -kdB -vzQ -gdH -gdH -gdH -gdH -gdH +aqZ +aqZ +aqZ +aqZ vzQ vzQ vzQ @@ -30606,6 +31808,20 @@ vzQ vzQ xPr xPr +aWn +bEj +cWI +dxj +evp +glA +oVk +cWI +iJv +ipK +jZe +jZe +vfb +aWn vzQ vzQ vzQ @@ -30614,25 +31830,11 @@ vzQ vzQ vzQ vzQ -vzQ -vzQ -aWn -aqZ -aqZ -hSn -mgv -kdB -kdB -cbj -iaV -bEj aqZ -vzQ -gdH xFB vxu kEC -gdH +aqZ vzQ vzQ vzQ @@ -30763,6 +31965,20 @@ vzQ vzQ xPr xPr +aWn +bLq +cWI +oVk +vfb +gns +kdB +iaV +hQc +vfb +kbl +kAc +nrH +aWn vzQ vzQ vzQ @@ -30771,25 +31987,11 @@ vzQ vzQ vzQ vzQ -vzQ -vzQ -vzQ -vzQ -aqZ -aWn -aqZ -kdB -aqZ aqZ -aqZ -kdB -kdB -vzQ -gdH -pTX +mUi vxu vxu -gdH +aqZ vzQ vzQ vzQ @@ -30920,6 +32122,20 @@ vzQ vzQ xPr xPr +aWn +bNu +cWI +dCV +cLR +vfb +hcR +cWI +ipK +vfb +kdC +kBc +nrH +aWn vzQ vzQ vzQ @@ -30928,25 +32144,11 @@ vzQ vzQ vzQ vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -rtq +dKT +nxn vxu eFz -gdH +aqZ vzQ vzQ vzQ @@ -31077,21 +32279,21 @@ wsd wsd xPr xPr -wsd -wsd -wsd -wsd -wsd -wsd -wsd -wsd -wsd -wsd -wsd -wsd -wsd -wsd -wsd +aWn +cbj +cWI +vfb +cWI +gwS +kdB +cWI +ipK +ipK +kfX +kEw +vfb +aWn +rhn wsd wsd wsd @@ -31113,7 +32315,7 @@ wsd wsd wsd wsd -bLq +uhG xug czv xug @@ -31223,7 +32425,7 @@ vfb aWn kdB vuj -xTK +pvv qBm kdB kdB @@ -31234,21 +32436,21 @@ xug xug xPr xPr -xug -xug -xug -xug -xug -xug -xug -xug -xug -xug -xug -xug -xug -xug -xug +aWn +cbv +cYc +dEq +mBS +kdB +kdB +cWI +itr +vfb +vfb +kOb +vfb +aWn +rtq xug xug xug @@ -31391,22 +32593,22 @@ czv czv xPr xPr -czv -czv -czv -czv -czv -czv -czv -czv -czv -czv -czv -czv -czv -czv -czv -czv +aWn +oVk +oVk +oVk +oVk +oVk +cWI +cWI +cWI +jHS +ksr +bNX +vjs +aWn +rtq +xug czv czv czv @@ -31537,7 +32739,7 @@ aoW aWn xTK xTK -bhS +lfH lfH lfH lfH @@ -31548,21 +32750,21 @@ xug xug xPr xPr -xug -xug -xug -xug -xug -xug -xug -xug -xug -xug -xug -xug -xug -xug -xug +aWn +cdl +cZR +uOH +eAU +cWI +hiS +ihy +aWn +aWn +aWn +aWn +aWn +aWn +rtq xug czv xug @@ -31702,28 +32904,28 @@ kdB xug czv xug -kEw +rhn xPr xPr -wsd -wsd -wsd -wsd -wsd -wsd -wsd -wsd -wsd -wsd -pTX -tjV -tjV -tjV -cqj +aWn +gGR +oVk +oVk +oVk +cWI +hjY +iks +oVk +vzQ +vzQ +vzQ +vzQ +vzQ +rtq xug czv xug -kEw +rhn wsd wsd wsd @@ -31733,7 +32935,7 @@ pTX xug czv xug -kEw +pfa oVk aWn kdB @@ -31854,7 +33056,7 @@ xTK lfH nQb mjr -mjr +qjR kdB xug czv @@ -31862,11 +33064,15 @@ xug rtq xPr xPr +czv +czv vzQ vzQ -vzQ -vzQ -vzQ +eQl +gEJ +hDT +iks +aWn vzQ vzQ vzQ @@ -31874,10 +33080,6 @@ vzQ vzQ rtq xug -xug -gwn -tjV -xug czv xug rtq @@ -31890,8 +33092,8 @@ rtq xug czv xug -rtq -oVk +nxn +nGv xvK sGI bbK @@ -32023,17 +33225,17 @@ wZq vzQ vzQ vzQ -vzQ +oVk +oVk +oVk +oVk +aWn vzQ vzQ vzQ vzQ vzQ rtq -xta -xug -xug -tjV xug czv xug @@ -32047,11 +33249,11 @@ rtq xug czv xug -jnB +kdB gnr mtY xPM -vEf +fXe fXe ozS khq @@ -32178,19 +33380,19 @@ xPr xPr xPr wZq -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -rtq -hcR -xug -xug -swG +wsd +wsd +wsd +wsd +wsd +wsd +wsd +wsd +wsd +wsd +wsd +wsd +uhG xug czv xug @@ -32207,7 +33409,7 @@ xug oVk sat xPM -vEf +fXe hDI oFe xPM @@ -32324,30 +33526,30 @@ xTK xTK lfH nQb -mjr +gAP mjr mUi xug czv xug rtq -vzQ xPr xPr xPr -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -rtq -cLR -ihy +xPr +xug +xug +xug +xug +xug +xug +xug +xug +xug +cuY +xug +xug xug -tjV xug czv xug @@ -32367,7 +33569,7 @@ fXe fXe lMt kBy -vEf +fXe fXe gGR xug @@ -32488,24 +33690,24 @@ cuY czv xug rtq -vzQ -vzQ xPr xPr -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -gwS -wsd -wsd -kYt -pTX -xug +xPr +xPr +czv +czv +czv +czv +czv +czv +czv +czv +czv +czv +czv +czv +czv +czv czv xug rtq @@ -32519,13 +33721,13 @@ xug czv xug kdB -nDi -xUN +jRf +jRf jRf bXb bXb xuD -aBs +fXe pik xug czv @@ -32645,23 +33847,23 @@ xug czv xug rtq -vzQ -vzQ xPr xPr -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -rtq +xPr +xPr +xug +xug +xug +xug +xug +xug +xug +xug +xug +xug +xug +xug +xug xug czv xug @@ -32675,7 +33877,7 @@ rtq xug czv xug -rtq +nxn tRS dxS nNM @@ -32803,36 +34005,36 @@ czv xug rtq vzQ -vzQ +xPr xPr xPr hoB -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -vzQ -rtq +wsd +wsd +wsd +wsd +wsd +wsd +wsd +pTX +lvy +lvy +lvy +cqj xug czv xug -gwS +wxz wsd wsd wsd wsd wsd -bLq +uhG xug czv xug -gwS +nDi oVk aWn kdB @@ -32971,12 +34173,12 @@ vzQ vzQ vzQ vzQ -vzQ -vzQ -vzQ -vzQ rtq xug +xug +gwn +lvy +xug czv xug xug @@ -33128,11 +34330,11 @@ vzQ vzQ vzQ vzQ -vzQ -vzQ -vzQ -vzQ rtq +lDA +xug +xug +lvy xug czv czv @@ -33285,11 +34487,11 @@ vzQ vzQ vzQ vzQ -vzQ -vzQ -vzQ -vzQ rtq +mgU +xug +xug +swG xug czv xug @@ -33442,15 +34644,15 @@ vzQ vzQ vzQ vzQ -vzQ -vzQ -vzQ -vzQ rtq +muZ +xug +xug +lvy xug czv xug -kEw +rhn wsd wsd wsd @@ -33461,7 +34663,7 @@ pTX xug czv xug -kEw +rhn wsd wsd wsd @@ -33471,8 +34673,8 @@ pTX xug czv xug -kEw -bLq +rhn +uhG vzQ vzQ vzQ @@ -33599,11 +34801,11 @@ vzQ vzQ vzQ vzQ -vzQ -vzQ -vzQ -vzQ -rtq +wxz +wsd +wsd +wsd +pTX cuY czv xug @@ -34030,7 +35232,7 @@ gNF aoW aoW kdB -aoW +oCL aoW aoW kdB @@ -34371,7 +35573,7 @@ rtq xug czv xug -gwS +wxz wsd xPr xPr @@ -35031,13 +36233,13 @@ rtq xug czv xug -gwS +wxz wsd wsd wsd wsd wsd -bLq +uhG xug czv xug @@ -35659,7 +36861,7 @@ rtq xug czv xug -kEw +rhn wsd wsd wsd @@ -35913,7 +37115,7 @@ rtq xug czv xug -gwS +wxz wsd kdB kdB @@ -36276,14 +37478,14 @@ rtq xug czv xug -gwS +wxz wsd wsd wsd wsd wsd wsd -bLq +uhG xug czv xug @@ -36541,7 +37743,7 @@ rtq xug czv xug -kEw +rhn wsd wsd wsd @@ -36551,7 +37753,7 @@ pTX xug czv xug -kEw +rhn wsd wsd wsd @@ -36586,7 +37788,7 @@ wsd wsd wsd wsd -bLq +uhG xug czv czv @@ -36737,7 +37939,7 @@ xug xug xug xug -xug +cuY xug xug xug @@ -37815,7 +39017,7 @@ czv xug xug exD -rde +tGp wed wed wed @@ -37964,9 +39166,9 @@ rtq xug czv xug -gwS +wxz wsd -bLq +uhG xug czv vug @@ -39070,7 +40272,7 @@ gwu age sxI sxI -sxI +xqD sxI gwu tPJ @@ -39223,17 +40425,17 @@ cuY kdB sxI gwu -sxI +kIR sxI gwu sxI sxI sxI -nWB sxI sxI -gwu sxI +gwu +kIR ueb kdB xPr @@ -39274,13 +40476,13 @@ vzQ vzQ vzQ vzQ -kEw +rhn wsd -bLq +uhG xug czv xug -gwS +wxz wsd wsd wsd @@ -39575,7 +40777,7 @@ aWn vzQ vzQ vzQ -kEw +rhn wsd wsd wsd @@ -39588,7 +40790,7 @@ wsd wsd wsd wsd -bLq +uhG xug czv czv @@ -39691,7 +40893,7 @@ rtq xug czv xug -mvo +wBg vzQ vzQ kdB @@ -39848,7 +41050,7 @@ rtq xug czv xug -mvo +wBg vzQ vzQ kdB @@ -39906,7 +41108,7 @@ czv czv czv xug -kEw +rhn wsd wsd wsd @@ -40005,7 +41207,7 @@ rtq cuY czv xug -mvo +wBg vzQ vzQ kdB @@ -40078,7 +41280,7 @@ vzQ xPr xPr dNv -mvo +wBg jPs xug kkA @@ -40162,7 +41364,7 @@ rtq xug czv xug -rde +tGp wsd wsd kdB @@ -40207,7 +41409,7 @@ rtq xug czv xug -kEw +rhn wsd wsd wsd @@ -40235,7 +41437,7 @@ vzQ xPr xPr dNv -mvo +wBg doL doL aza @@ -40373,7 +41575,7 @@ aqZ aWn aWn aWn -gwS +wxz pTX xug xug @@ -40392,7 +41594,7 @@ vzQ xPr xPr dNv -mvo +wBg xug doL tLz @@ -40549,7 +41751,7 @@ vzQ xPr xPr dNv -mvo +wBg doL xug xMC @@ -40706,7 +41908,7 @@ vzQ xPr xPr dNv -mvo +wBg xMC xMC dNv @@ -40819,11 +42021,11 @@ wsd wsd wsd wsd -bLq +uhG xug czv xug -gwS +wxz wsd wsd wsd @@ -40831,7 +42033,7 @@ wsd wsd wsd wsd -bLq +uhG xug czv xug @@ -40845,7 +42047,7 @@ aqZ aqZ aqZ aWn -gwS +wxz kYt swG rtq @@ -40863,7 +42065,7 @@ vzQ xPr xPr dNv -mvo +wBg xMC xMC dNv @@ -41020,16 +42222,16 @@ vzQ xPr xPr dNv -mvo +wBg lXt hDH xug xMC xug -kOb +uEl wed wed -cbv +lmE kBO djD kBO @@ -41334,7 +42536,7 @@ vzQ xPr xPr dNv -mvo +wBg qqR ovI xMC @@ -41347,7 +42549,7 @@ czv czv czv xug -rde +tGp wed xyd vzQ @@ -41451,7 +42653,7 @@ pTX xug czv xug -kEw +rhn wsd wsd wsd @@ -41476,7 +42678,7 @@ mgv sAF aWn rGx -gwS +wxz wsd wsd pTX @@ -41491,7 +42693,7 @@ vzQ xPr xPr dNv -mvo +wBg xug nHm xMC @@ -41648,13 +42850,13 @@ vzQ xPr xPr dNv -mvo +wBg xug doL xMC nor xug -mvo +wBg xug czv czv @@ -41664,7 +42866,7 @@ czv czv xug xug -mvo +wBg vzQ vzQ vzQ @@ -41787,7 +42989,7 @@ aqZ aWn aWn aqZ -kEw +rhn cqj fgV fgV @@ -41797,21 +42999,21 @@ rtq vzQ vzQ vzQ -mvo +wBg coS gwn -mvo +wBg vzQ xPr xPr dNv -mvo +wBg xug doL xMC doL xMC -mvo +wBg xug czv czv @@ -41954,21 +43156,21 @@ rtq vzQ vzQ vzQ -mvo +wBg oiq rGx -mvo +wBg vzQ xPr xPr dNv -mvo +wBg hXB doL tgK doL xMC -mvo +wBg xug czv czv @@ -42101,7 +43303,7 @@ oHS dyh lcY aWn -gwS +wxz wsd wsd wsd @@ -42111,21 +43313,21 @@ rtq vzQ vzQ vzQ -mvo +wBg xao rGx -mvo +wBg vzQ xPr xPr dNv -mvo +wBg xMC xMC xug xMC nMA -mvo +wBg xug czv czv @@ -42267,22 +43469,22 @@ rGx kYt obh obh -rde +tGp cqj rGx vKo -mvo +wBg vzQ xPr xPr dNv -mvo +wBg eKs jpy xug xMC wvN -mvo +wBg xug czv czv @@ -42292,7 +43494,7 @@ czv czv czv xug -mvo +wBg vzQ vzQ vzQ @@ -42428,18 +43630,18 @@ rGx xug fgV xZt -mvo +wBg vzQ xPr xPr dNv -mvo +wBg eKs xug xMC xMC kVB -mvo +wBg xug czv czv @@ -42449,7 +43651,7 @@ czv czv czv xug -mvo +wBg vzQ vzQ vzQ @@ -42585,18 +43787,18 @@ fgV fgV xZt sOF -mvo +wBg vzQ xPr xPr dNv -mvo +wBg nhh doL xMC xug sDO -mvo +wBg xug czv czv @@ -42606,7 +43808,7 @@ czv czv czv xug -mvo +wBg vzQ vzQ vzQ @@ -42763,7 +43965,7 @@ czv czv czv xug -mvo +wBg vzQ vzQ vzQ @@ -42904,13 +44106,13 @@ vzQ xPr xPr dNv -mvo +wBg ccz xMC xMC wIT doL -mvo +wBg xug czv czv @@ -42920,7 +44122,7 @@ czv czv czv xug -mvo +wBg vzQ vzQ vzQ @@ -43061,13 +44263,13 @@ vzQ xPr xPr dNv -mvo +wBg veB doL xMC doL sYw -mvo +wBg xug xug czv @@ -43077,7 +44279,7 @@ czv czv czv xug -mvo +wBg vzQ vzQ vzQ @@ -43218,13 +44420,13 @@ vzQ xPr xPr dNv -mvo +wBg bFo doL xMC xug xug -mvo +wBg xug xug xug @@ -43234,7 +44436,7 @@ czv xug xug xug -mvo +wBg vzQ vzQ vzQ @@ -43375,7 +44577,7 @@ vzQ xPr xPr dNv -mvo +wBg xug xMC hLm @@ -43389,7 +44591,7 @@ xyd xug czv xug -kOb +uEl wed lmE vzQ @@ -43532,7 +44734,7 @@ vzQ xPr xPr dNv -mvo +wBg xug xMC xMC @@ -43542,11 +44744,11 @@ dNv dNv dNv dNv -mvo +wBg kBO djD kBO -mvo +wBg vzQ vzQ vzQ @@ -43689,7 +44891,7 @@ vzQ xPr xPr dNv -mvo +wBg sYw xMC xMC @@ -43699,11 +44901,11 @@ dNv dNv dNv dNv -mvo +wBg xug czv xug -mvo +wBg vzQ vzQ vzQ @@ -43806,7 +45008,7 @@ rtq xug czv xug -gwS +wxz wsd wsd wsd @@ -43834,7 +45036,7 @@ wsd wsd kYt kYt -bLq +uhG rGx czv rGx @@ -43846,7 +45048,7 @@ vzQ xPr xPr dNv -mvo +wBg rRX doL xug @@ -43856,11 +45058,11 @@ dNv dNv dNv dNv -mvo +wBg xug czv xug -mvo +wBg vzQ vzQ vzQ @@ -43995,7 +45197,7 @@ rGx rGx czv fgV -gwS +wxz wsd wsd wsd @@ -44013,11 +45215,11 @@ wed wed wed wed -cbv +lmE xug czv xug -mvo +wBg vzQ vzQ vzQ @@ -44174,7 +45376,7 @@ xug xug czv xug -mvo +wBg vzQ vzQ vzQ @@ -44331,7 +45533,7 @@ czv czv czv xug -mvo +wBg vzQ vzQ vzQ @@ -44430,7 +45632,7 @@ vzQ vzQ vzQ vzQ -gwS +wxz wsd wsd wsd @@ -44488,7 +45690,7 @@ xug xug xug xug -mvo +wBg vzQ vzQ vzQ @@ -44619,7 +45821,7 @@ vzQ vzQ vzQ vzQ -gwS +wxz wsd wsd wsd @@ -44645,7 +45847,7 @@ wed wed wed wed -cbv +lmE vzQ vzQ vzQ @@ -48988,8 +50190,8 @@ uca qQp qQp hVa -qQp -qQp +iXu +iXu uca jSD jSD @@ -49145,9 +50347,9 @@ bFf uca qQp hVa -qQp +iXu ciy -jSD +fxX jSD jSD jSD @@ -49302,9 +50504,9 @@ bFf bFf uca veC -uca -qQp -jSD +leP +iXu +vdP uca uca jSD @@ -49459,10 +50661,10 @@ bFf bFf bFf deS -uca -qQp -qQp -uca +hnp +iXu +iXu +vfP iZl uca jSD @@ -49617,20 +50819,20 @@ bFf bFf deS wMy -qQp -qQp -qQp -uca -uca -uca -jSD -jSD -jSD -uca -uca -jSD -jSD -uca +iXu +iXu +iXu +vfP +aya +aya +ohf +ohf +ohf +aya +aya +ohf +ohf +aya uca fHi uca @@ -49773,32 +50975,32 @@ bFf bFf bHI giM -qQp -qQp -qQp -qQp -qQp -qQp -qQp -qQp -qQp -qQp -qQp -qQp -qQp -qQp -qQp -fLk -fLk -uca -fLk -fLk -uca -uca -fLk -fLk -fLk -uca +iXu +iXu +iXu +iXu +iXu +iXu +iXu +iXu +iXu +iXu +iXu +iXu +iXu +iXu +iXu +fLk +fLk +aya +cMH +cMH +aya +aya +cMH +cMH +cMH +aya uca uca uca @@ -49930,36 +51132,36 @@ bFf bFf bHI giM -qQp -qQp -qQp -qQp -qQp -qQp -qQp -uca -uca -qQp -qQp -qQp -qQp -qQp -qQp -fLk -fLk -qQp -qQp -qQp -qQp -qQp -qQp -qQp -qQp -qQp -fLk -uca -uca -aQD +iXu +iXu +iXu +iXu +iXu +iXu +iXu +lUk +leP +iXu +iXu +iXu +iXu +iXu +iXu +qSx +fLk +iXu +iXu +iXu +iXu +iXu +iXu +iXu +iXu +iXu +qSx +aya +aya +vKN pLO uoo vSs @@ -50087,37 +51289,37 @@ bFf bFf bFf deS -wMy -drn +bvy +jWH +jWH +jWH +uca uca uca -oPc -oPc -oPc -oPc -oPc -oPc -oPc -oPc -ulE -qQp -qQp -qQp -qQp -qQp -qQp -qQp -qQp uca -qQp -qQp -qQp -qQp -qQp -qQp -qQp -qQp uca +uca +uca +uca +fLk +iXu +iXu +iXu +iXu +iXu +iXu +iXu +iXu +lUk +iXu +iXu +iXu +iXu +iXu +iXu +iXu +iXu +vfP kMh kMh kMh @@ -50245,7 +51447,7 @@ bFf bFf bFf bFf -drn +uca uca uca uca @@ -50256,25 +51458,25 @@ fLk fLk fLk fLk -wsZ -qQp -qQp -qQp -qQp -qQp -qQp -qQp -qQp -qQp -qQp -uca -qQp -qQp -qQp -qQp -qQp -qQp -qQp +fLk +iXu +iXu +iXu +iXu +iXu +iXu +iXu +iXu +iXu +iXu +lUk +iXu +iXu +iXu +iXu +iXu +iXu +iXu kMh kMh kMh @@ -50402,7 +51604,7 @@ bFf bFf bFf bFf -drn +uca jSD jSD jSD @@ -50413,24 +51615,24 @@ dDh lGB fLk uca -wsZ -qQp -qQp -qQp -qQp -qQp -qQp -qQp fLk +iXu +tsc +iXu +iXu +iXu +iXu +iXu +ols uca +jWH uca -uca -uca -uca -uca -uca -uca -aQD +jWH +jWH +jWH +jWH +jWH +ljv hdg aaj fZJ @@ -50559,7 +51761,7 @@ bFf bFf bFf bFf -drn +uca jSD jSD jSD @@ -50570,14 +51772,14 @@ sZV dDh fLk uca -wsZ -qQp -qQp -qQp -qQp -aQD -fLk fLk +iXu +iXu +iXu +iXu +ddB +opi +opi uca fLk fLk @@ -50716,7 +51918,7 @@ bFf bFf bFf bFf -drn +uca jSD jSD jSD @@ -50727,11 +51929,11 @@ sZV dDh fLk fLk -drn -qQp -qQp -qQp -fLk +uca +iXu +iXu +iXu +tvf fLk fLk fLk @@ -50873,7 +52075,7 @@ bFf bFf bFf bFf -drn +uca jSD jSD jSD @@ -50884,11 +52086,11 @@ hKS dDh jSD fLk -drn -qQp -qQp -qQp -fLk +uca +iXu +iXu +iXu +fov uca jSD jSD @@ -51030,7 +52232,7 @@ bFf bFf bFf uca -drn +uca jSD jSD jSD @@ -51041,11 +52243,11 @@ dDh lGB jSD fLk -wsZ -qQp -qQp -qQp fLk +iXu +iXu +iXu +fov fLk jSD jSD @@ -51187,7 +52389,7 @@ bFf bFf uca uca -pTM +jSD jSD jSD jSD @@ -51198,11 +52400,11 @@ uca jSD jSD uca -wsZ -qQp -qQp -qQp fLk +iXu +iXu +iXu +fov fLk fLk jSD @@ -51344,7 +52546,7 @@ bFf uca uca uca -pTM +jSD jSD jSD jSD @@ -51355,10 +52557,10 @@ dDh dDh lGB jSD -wsZ -qQp -qQp -qQp +fLk +iXu +iXu +iXu eCr eCr eCr @@ -51501,7 +52703,7 @@ uca uca uca uca -pTM +jSD jSD ewS jSD @@ -51512,10 +52714,10 @@ oAL ePj dDh jSD -gBy -qQp -qQp -qQp +gef +iXu +iXu +iXu lNp hKY ivQ @@ -51658,7 +52860,7 @@ nzX uca uca uca -pTM +jSD jSD aSc jSD @@ -51669,10 +52871,10 @@ cAB ePj dDh jSD -wsZ -qQp -qQp -qQp +fLk +iXu +iXu +iXu eCr cMa cjR @@ -51815,7 +53017,7 @@ uca uca uca uca -pTM +jSD jSD ewS jSD @@ -51826,10 +53028,10 @@ dDh dDh lGB jSD -wsZ -qQp -qQp -qQp +fLk +iXu +iXu +iXu gsX cMa qzc @@ -51972,7 +53174,7 @@ fLk fLk uca uca -xNU +lOR jSD jSD jSD @@ -51983,10 +53185,10 @@ uca uca fsZ uca -wsZ +fLk wlE -qQp -qQp +iXu +iXu eCr cMa uVl @@ -52129,18 +53331,18 @@ fLk uca uca uca -drn -ahz -rkx -rkx -rkx -ahz -ahz -ahz -ahz -ahz -ahz -tYF +uca +uca +fLk +fLk +fLk +uca +uca +uca +uca +uca +uca +fLk wlE wlE wlE @@ -52902,20 +54104,20 @@ uca bHI eDt tDt +nKO +nKO +nKO +nKO +nKO +nKO +nKO +nKO +nKO tDt tDt tDt -tDt -tDt -tDt -tDt -tDt -tDt -tDt -tDt -tDt -tDt -tDt +nKO +nKO tDt tDt tDt @@ -53059,25 +54261,25 @@ uca bHI eDt tDt -iUq -iUq -iUq -iUq -iUq -iUq -iUq -iUq -iUq -tDt -tDt -tDt -iUq -iUq -tDt +uIv +uIv +uIv +uIv +uIv +uIv +uIv +uIv +uIv +ddR +nKO +nRU +uIv +uIv +ddR tDt tDt iUq -tDt +eco iUq iUq iUq @@ -53216,26 +54418,26 @@ uca bHI eDt tDt -tDt -iUq -tDt -tDt -xDQ -tDt -tDt -iUq -iUq -iUq -iUq -hUt -iUq -iUq -iUq -iUq -iUq +nNa +nTl +nTl +uIv +uIv +tvQ +uIv +uIv +uIv +uIv +uIv +uIv +uIv +uIv +uIv +edM +kFt +kFt iUq tDt -tDt iUq tDt tDt @@ -53373,26 +54575,26 @@ bHI bHI eDt tDt -tDt -iUq -iUq -kdB -kdB -kdB -kdB -kdB -kdB -kdB -kdB -kdB -kdB -kdB -kdB -kdB -kdB -kdB -rIf -kdB +nRU +ltJ +rVN +iKX +iKX +rVN +rVN +ltJ +xZg +uIv +kQb +vQk +vQk +qQY +vQk +vQk +uIv +uIv +aWn +ing kdB kdB aWn @@ -53531,26 +54733,26 @@ bHI eDt tDt iUq -iUq -iUq -kdB -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -kdB -vfb +iKX +okR +wGw +wGw +hRn +uEP +rVN +tDt +uIv +xty +vQk +fXn +dQL +bzd +vQk +uIv +uIv +aWn vfb kdB -iJv rak hrV kdB @@ -53688,27 +54890,27 @@ bHI eDt tDt iUq +iKX +olg +qCB +saB +qHl +uFM +rVN +peS +lHY tDt -iUq -kdB -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -kdB -vfb -vfb +vQk +tvX +tcV +bzd +vQk +uIv +uIv +aWn vfb eWt -qSX +eWt vfb kdB vov @@ -53769,7 +54971,7 @@ ieR uNu sek eDx -mjs +uDV uNu ckZ oOl @@ -53845,27 +55047,27 @@ bHI eDt tDt iUq -iUq -iUq -kdB -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -kdB +iKX +oEY +qHl +syl +qHl +uUs +rVN +vQk +rHz +vQk +vQk +igP +vOG +vOG +vQk +gJl +uIv +aWn vfb -aoW kdB -jHS -vfb +vON nyj kdB nWC @@ -54002,25 +55204,25 @@ bHI eDt tDt iUq -iUq -iUq -kdB -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -kdB +iKX +oSW +qHl +qHl +qHl +uZC +rVN +tnp +tnp +mlU +vQk +vQk +xLq +vQk +vQk +uQz tiv -aoW -kdB +aWn +vfb kdB kdB kdB @@ -54158,28 +55360,28 @@ rru bHI eDt tDt -tDt -tDt -iUq -kdB -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -kdB -eWt -eWt +nNa +iKX +oZX +qHl +sEk +qHl +vum +rVN +tnp +hfS +tnp +jcf +ycw +xpH +xpH +iKX +uIv +uIv +aWn +vfb kdB rDc -gns tyT kdB tDt @@ -54239,7 +55441,7 @@ lac ieR uNu gUQ -xIu +xXa sbA oJp lLb @@ -54301,12 +55503,12 @@ iUq iUq yhO cyz +mJt cyz +fJE +eSf cyz -cyz -cyz -cyz -cyz +eSf cyz uQz rru @@ -54315,26 +55517,26 @@ rru bHI eDt tDt -tDt -iUq -iUq -kdB -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -kdB -eWt -mgv -aoW +nRU +ltJ +oEY +qHl +syl +qHl +vEf +rVN +eYj +wid +ulO +vXs +ldS +qAn +tjp +iKX +uIv +uIv +aWn +vfb aoW tKz mgv @@ -54387,7 +55589,7 @@ tui ewn efH tui -lac +bhS lac lac lac @@ -54447,7 +55649,7 @@ uiE uiE uiE uiE -uiE +bHF uiE uiE uiE @@ -54457,13 +55659,13 @@ iUq tDt iUq iUq -uQz -vjc -vjc -vjc -vjc -vjc -uQz +cyz +cyz +cyz +cyz +mJt +mJt +cyz cyz rru rru @@ -54473,29 +55675,29 @@ bHI eDt tDt iUq -iUq -tDt -kdB -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -dKT -kdB -aoW +rVN +pxb +qOL +qHl +qHl +wGw +wQi +dvq +dvq +gBN +vXs +cWc +qAn +xpH +iKX +uIv +uIv +aWn vfb kdB -cdl -vfb +oNB tyT -kdB +aWn tDt iUq iUq @@ -54604,23 +55806,23 @@ jjG myO myO dwu -ghD +xxb pbU xWz -kXR +rMq lxt ulR cyz cyz iUq iUq -vjc -jea -rwh -cyz -cyz -btC -vjc +dGV +aDU +aDU +tgV +mWk +mWk +tgV tDt rru rru @@ -54630,29 +55832,29 @@ bHI eDt tDt iUq -iUq -tDt -kdB -aWn -kdB -kdB -kdB -aWn -aWn -kdB -aWn -dKT -dKT -dKT -dKT +iKX +yfz +qVd +wGw +wGw +vXt +rVN +mlU +pbd +pbd +kcK +wvP +qAn +xpH +iKX +uIv +uIv kdB vfb -vfb -kdB -kdB kdB kdB kdB +aWn tDt iUq iUq @@ -54682,7 +55884,7 @@ bHI uNu tbS jYN -vUw +xtd aBF mWk lac @@ -54754,17 +55956,17 @@ wUv tDt lxt yhr -kXR +qhG lxt kXR kXR kXR kXR kXR -dyZ -kXR -kXR -kXR +xxb +deQ +xgp +deQ lxt eSf cyz @@ -54772,12 +55974,12 @@ eSf iUq tDt vjc -jea cyz -iQc -rwh -cyz -vjc +gtV +uNu +aZr +mXS +uNu tDt rru rru @@ -54787,25 +55989,25 @@ bHI eDt tDt iUq -iUq -iUq -kdB +ltJ +rVN +rVN jKq -vfb -vfb -aoW -aoW +tBd +rVN +rVN +tnp ycL -tRX -aWn -dKT -dKT -dKT -dKT -kdB +nXm +iqg +abt +xpH +xpH +qwa +uIv uIv -rak kdB +vfb uhq bgJ bgJ @@ -54915,26 +56117,26 @@ kXR lxt yhr yhr -mId -kXR dyZ -luD kXR -ojP -ojP +dyZ +xxb +ndq +aHG +aHG lxt cyz cyz cyz iUq iUq -tDt +vjI cyz eSf -iQc -cyz -eSf -vjc +mip +iac +iac +uNu iUq uQz rru @@ -54944,26 +56146,26 @@ bHI eDt tDt iUq -iUq -iUq -kdB -wkV -crs +iKX +pYB +qWo +wGw +wGw tXE -aoW -vfb -gyx +wSS +tnp gyx +jui +xGC +mAU +xpH +xpH +iKX +uIv +uIv aWn -dKT -dKT -dKT -dKT -kdB -oga -aoW -tBd -aoW +vfb +evE hnF tRX kdB @@ -55070,15 +56272,15 @@ oJC sPK kXR lxt -wBm +tKn bev -kXR +ucG ltR dyZ -hop -kXR -bev -wBm +xxb +gzG +cEa +ndq lxt cyz ulR @@ -55088,10 +56290,10 @@ rzC vjc cyz cyz -mXt -cyz -eSf -vjc +uNu +izm +iac +uNu iUq uQz rru @@ -55101,26 +56303,26 @@ bHI eDt tDt iUq -tDt -iUq -kdB -gcR -aoW -tgs -aoW -aoW -vfb -vfb -kdB -dKT -dKT -dKT -dKT -kdB -kdB -kdB -kdB +rVN +qjV +wGw +vOG +vOG +wGw +wWl +eps +uXl +vXs +ldS +qAn +xpH +xpH +rVN +uIv +uIv +aWn kdB +aWn kdB kdB oVk @@ -55137,7 +56339,7 @@ mTN tvd sEX sEX -sEX +eUG tvd pTt pTk @@ -55233,22 +56435,22 @@ uiE ojC scx ojC -uiE -uiE -uiE +lxt +ojC +ktH uiE bHF cyz cyz tDt tDt -vjc -cyz -rwh -cyz -rwh -cyz -tDt +dGV +vCk +vCk +tgV +iac +iac +uNu tDt uQz rru @@ -55258,29 +56460,29 @@ bHI eDt tDt iUq -tDt +rVN +qwq +wGw +vOG +vOG +wGw +wWl +eps +tnp +kcK +qOp +qAn +xpH +xpH +rVN +uIv +uIv +tpI +iUq +xDQ +iUq +iUq iUq -kdB -kdB -iId -cNw -vfb -diQ -vfb -rDc -aWn -dKT -dKT -dKT -dKT -dKT -kdB -kdB -kdB -kdB -kdB -oSW -uZC iUq iUq iUq @@ -55294,7 +56496,7 @@ ljn tvd sEX sEX -sEX +mjs tvd eBP pTk @@ -55389,10 +56591,10 @@ kXR jsv lxt yhr -ojP +kBu lxt awb -jSs +kXR dfP lxt cyz @@ -55402,10 +56604,10 @@ iUq vjc eSf lAG -uQz -vjc -vjc -uQz +tgV +nHn +mWk +tgV iUq uQz rru @@ -55415,28 +56617,28 @@ bHI eDt tDt iUq -iUq -iUq -aWn -kbG -aoW +rVN +wGw +wGw vOG -vfb +vOG +wGw +wYR eps -aoW +nEt ntM +nKo +mAU +xpH +xpH +rVN +uQz +tiv aWn -dKT -dKT -dKT -dKT -dKT -kdB -kdB -kdB -kdB -kdB kdB +aWn +aWn +aWn oVk tDt tDt @@ -55548,7 +56750,7 @@ lxt yhr yhr lxt -fJy +kXR iEI wBm lxt @@ -55556,9 +56758,9 @@ cyz ulR iUq iUq -vjc +gMx +cyz cyz -mXt vjc tDt iUq @@ -55571,30 +56773,30 @@ rru bHI eDt tDt -tDt -iUq -iUq -kdB -aoW -aoW -vfb -aoW -aoW -aoW +nNa +rVN +qBp +wGw +vOG +vOG +wGw +wWl +eps +jwP lub -kdB -dKT -dKT -dKT -dKT -dKT -kdB -kdB -kdB +gLy +xpH +xpH +tjp +rVN +pxa +uIv +aWn kdB kdB kdB kdB +aWn tDt iUq iUq @@ -55714,7 +56916,7 @@ eSf iUq iUq vjc -jbY +cyz cyz vjc iUq @@ -55728,24 +56930,24 @@ rru bHI eDt tDt -tDt -iUq -iUq -aWn -kdB -mTM -kdB -aWn -aWn -kdB -kdB -aWn -dKT -dKT -dKT -dKT -dKT -kdB +nRU +ltJ +iKX +rce +sNj +wGw +wGw +wWl +eps +wmY +lfT +cbG +rVN +rVN +skg +vQk +slz +uIv kdB kdB kdB @@ -55859,8 +57061,8 @@ vYP kXR qhG ojC -yhr -yhr +sPK +nWB ojC dOC kXR @@ -55870,10 +57072,10 @@ ulR cyz iUq tDt -uQz +dGV bbf bbf -uQz +dGV iUq cyz jbY @@ -55888,22 +57090,22 @@ tDt iUq iUq ltJ -kdB -aWn -sug -sug -sug +iKX +iKX +rVN +wds +xmv pgO -kdB -dKT -dKT -dKT -dKT -dKT -dKT -dKT -kdB -kdB +tnp +tnp +hIs +rVN +rVN +lBf +ilP +ffS +uIv +aWn kdB kdB kdB @@ -56019,9 +57221,9 @@ lxt yhr yhr lxt -nTK +gMe qyH -fQp +hHM lxt cyz cyz @@ -56044,28 +57246,28 @@ eDt tDt iUq iUq -tDt -iUq -kdB -fLR -uEy -uEy -uEy -aWn -aWn -kdB -aWn +pzg +rde +sOJ +rVN +yfz +xta +tnp +tnp +qfZ +jCY +nMi +rVN +szg +kTo +ffS +uIv aWn -dKT -dKT -dKT -kdB -kdB -kdB kdB kdB kdB kdB +aWn tDt iUq iUq @@ -56201,32 +57403,32 @@ eDt uly tDt iUq -tDt -tDt -kdB +pzg +reb +tjV rVN -uEy -uEy -uEy -kdB -tRX -tRX -tRX -kdB -dKT -dKT -dKT -kdB -kdB +yfz +xIu +tnp +tnp +dED +jCY +nMi +iKX +mFu +lcx +eyL +aqA kdB kdB kdB kdB kdB +aWn tDt iUq tDt -cre +wEI wsH gbO fMz @@ -56357,29 +57559,29 @@ bHI bHI bHI oDF -tDt +oiw +pzg +rIf +rIf +rVN +wuH +xJt +qLZ +xqU +pJf +mAU +rcp +iKX +iUq +iUq iUq iUq aWn -aWn -iId -aoW -vfb -aWn -tRX -tRX -tRX -kdB -dKT -dKT -dKT -kdB -kdB -kdB kdB kdB kdB kdB +aWn tDt tDt tDt @@ -56407,7 +57609,7 @@ dLD bHI bHI uNu -xIu +xXa blL gzV mWk @@ -56515,23 +57717,23 @@ bHI bHI eoU sSM -iUq -iUq -aWn -aWn -bNX -bNX +nBl +rKP +iKX +iKX +oTc +oTc ufU -aWn -vXs -aWn +tnp vXs +bEh +cYn +iKX +iUq +iUq +iUq +iUq aWn -dKT -dKT -dKT -kdB -kdB kdB kdB kdB @@ -56540,7 +57742,7 @@ kdB tDt iUq iUq -kxk +gwA gwA oGe fMz @@ -56673,23 +57875,23 @@ bHI bHI sSM iUq +tDt +tDt +iKX +rVN +iKX +rVN +rHz +nLx +iKX +iKX +iKX iUq +tDt iUq -kdB aWn kdB kdB -aWn -nLx -tRX -iKX -kdB -kdB -kdB -kdB -kdB -kdB -kdB kdB kdB kdB @@ -56697,7 +57899,7 @@ kdB nhP iUq lxr -kxk +gwA gwA mqa lfg @@ -56831,26 +58033,26 @@ bHI qgz iUq iUq -iUq tDt -aJe -iUq +tDw +tDt +xUN iSc -kdB +nHi ouQ gJY -cZR -aWn -aJh -ahY -iUq -aWn +tDt +fNN +tDt +tDt +tDt kdB kdB kdB kdB kdB kdB +aWn tDt tDt iUq @@ -56988,19 +58190,19 @@ bHI sSM tDt iUq -iUq tDt iUq iUq -iSc -kdB +xVU +nHi +djl kcf -aoW -fRw -aWn -aJh -iUq +aUh +tDt iUq +tDt +tDt +tDt aWn kdB kdB @@ -57011,10 +58213,10 @@ kdB gzj tDt iUq -cre +wEI wZQ ilh -fMz +pNT ain lfg kxG @@ -57146,18 +58348,18 @@ gSb sSM iUq tDt -tDt -tDt iUq -iSc -kdB -aWn -vSg -kdB -kdB -aJh iUq +xVU +rTy +ldJ +kcf +aUh +tDt iUq +tDt +tDt +tDt fWc kdB kdB @@ -57168,11 +58370,11 @@ kdB tDt iUq iUq -rru +jmy +gwA gwA gwA gwA -fLx gwA gwA gwA @@ -57291,7 +58493,7 @@ iUq iUq iUq kyR -gjF +fqS wmP wmP wmP @@ -57305,17 +58507,17 @@ iUq iUq iUq iUq -iUq -iUq -tDt +nBl +lcx +fEI +fEI +fNP tDt tDt tDt tDt iUq -iUq -kbl -lRi +tDt tDt tDt tDt @@ -57325,7 +58527,7 @@ tDt iUq iUq iUq -lRi +cVT tDt tDt tDt @@ -57622,7 +58824,7 @@ tDt tDt tDt iUq -uiW +tDt kqk iUq iUq @@ -57631,7 +58833,7 @@ iUq iUq iUq iUq -tDt +wCF tDt iUq iUq @@ -57646,13 +58848,13 @@ tDt tDt tDt iUq -iUq +nIR tDt tDt tDt iUq iUq -uiW +iUq iUq iUq iUq @@ -57920,7 +59122,7 @@ tDt iUq ggd oEQ -rpY +tsq jBZ rpY kyR @@ -58003,7 +59205,7 @@ cyz cyz eSf eSf -shK +rru lOe cyz eSf @@ -58078,7 +59280,7 @@ iUq kyR oEQ ujW -wmP +pLR oDk clN bHI @@ -58154,9 +59356,9 @@ ieR aVB lac lac -lac -isy -kLg +nmE +rru +wVG wVG dpj dpj @@ -58245,8 +59447,8 @@ sSM iUq iUq iUq -hUt tDt +wCF tDt tDt gwA @@ -58391,7 +59593,7 @@ iUq iUq cyz jBZ -wmP +qxi gjF wmP clN @@ -58468,8 +59670,8 @@ ieR aVB lac lac -lac -isy +nmE +rru mUC jxC jxC @@ -58706,7 +59908,7 @@ iUq cyz oEQ oEQ -hWb +lod oEQ ggd bHI @@ -59218,7 +60420,7 @@ qEn pqE qdP hsW -tWY +bxN lgi hoy xIk @@ -59812,15 +61014,15 @@ bHI sSM iUq iUq -aJe iUq iUq iUq iUq iUq +xYP +iUq iUq iUq -aJe iUq iUq iUq @@ -60083,13 +61285,13 @@ lcA lcA lcA rru -cyz +kKI cyz iUq iUq iUq cyz -cyz +kKI lxt htz kXR @@ -60897,8 +62099,8 @@ iID iqY cTX cTX -klw -tTo +cTX +lnA tTo tTo tTo @@ -61118,17 +62320,17 @@ bHI bHI jPn eSf +ieR eSf +ieR eSf +ieR eSf +ieR eSf +ieR eSf -eSf -eSf -eSf -eSf -eSf -eSf +ieR eSf ieR aVB @@ -61274,19 +62476,19 @@ luz bHI bHI jPn +eSf ieR +eSf ieR +eSf ieR +eSf ieR +eSf ieR +eSf ieR -ieR -ieR -ieR -ieR -ieR -ieR -ieR +eSf ieR aVB cyz @@ -61432,17 +62634,17 @@ bHI bHI jPn eSf +oQz eSf +ieR eSf +ieR eSf +ieR eSf +ieR eSf -eSf -eSf -eSf -eSf -eSf -eSf +ieR eSf ieR aVB @@ -61588,19 +62790,19 @@ vBf bHI bHI jPn +eSf ieR +eSf ieR +eSf ieR +eSf ieR +eSf ieR +eSf ieR -ieR -ieR -ieR -ieR -ieR -ieR -ieR +eSf ieR aVB eSf @@ -61746,17 +62948,17 @@ bHI bHI jPn eSf +ieR eSf +ieR eSf +ieR eSf +ieR eSf +ieR eSf -eSf -eSf -eSf -eSf -eSf -eSf +ieR eSf ieR aVB @@ -61902,19 +63104,19 @@ luz bHI bHI jPn +eSf ieR +eSf ieR +eSf ieR +eSf ieR +eSf ieR +eSf ieR -ieR -ieR -ieR -ieR -ieR -ieR -ieR +eSf ieR kQy eSf @@ -62060,17 +63262,17 @@ bHI bHI jPn eSf +ieR eSf +ieR eSf +ieR eSf +ieR eSf +ieR eSf -eSf -eSf -eSf -eSf -eSf -eSf +ieR eSf ieR aVB @@ -77554,29 +78756,29 @@ doW oiP oiP oiP -aCf -fJn -fJn -fJn -fJn -fJn -fJn -fJn -fJn -fJn -fJn -fJn -fJn -fJn -fJn -fJn -fJn -fJn -fJn -fJn -fJn -fJn -fJn +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP oiP oiP aCf @@ -77710,30 +78912,30 @@ doW doW oiP oiP +oAK +aEi +aEi +fqt +aEi +aEi +oAK +oiP +oiP oiP -aCf oAK -vQk -vQk -eWU -vQk -vQk -vQk -vQk -eWU -vQk -vQk -vQk -vQk -vQk -vQk -vQk -vQk -vQk -vQk -vQk +aEi +aEi +fqt +aEi oAK -aCf +oiP +aWn +aWn +aWn +aWn +aWn +aWn +fJn oiP oiP aCf @@ -77867,30 +79069,30 @@ doW doW oiP oiP -oiP -aCf -vQk -rQv -hUr -hRn -qwa -kfX +aEi +wYg +bAm +fJM +bAm +nUL vQk -oEY -xYP +aCf +aCf +aCf vQk +kQu oTc -fnV -gaU -vQk -aBJ -sUi -gEJ -tDw -kBc -kBc -vQk -aCf +tyX +ced +aEi +oiP +aWn +aWn +aWn +aWn +aWn +aWn +fJn oiP oiP aCf @@ -78024,30 +79226,30 @@ oiP oiP oiP oiP -oiP +fqt +pRy +pRy +fJM +fJM +pRy +fqt +aCf aCf -vQk -keu -wXr -evS -evS -mEv -byI -byI -byI -vQk -lOr -gaU -gaU -eWU -kdC -sUi -gEJ -kBc -kBc -kBc -eWU aCf +vQk +qeJ +oTc +tyX +lrR +fqt +oiP +aWn +aWn +aWn +aWn +aWn +aWn +fJn oiP oiP aCf @@ -78181,30 +79383,30 @@ tfO oiP oiP oiP -oiP -aCf -vQk -mEv -oVO +aEi +wYg +pGo +daV +pRy wYg -evS -oAK vQk -pxb vQk -oAK -gaU -gaU -gaU -hiS -gaU -gaU -ddT -kBc -kBc -kBc +ydO vQk -aCf +vQk +vQk +tyX +tyX +oJu +aEi +oiP +aWn +aWn +aWn +aWn +aWn +aWn +fJn oiP oiP aCf @@ -78338,30 +79540,30 @@ tfO oiP oiP oiP -oiP -aCf -eWU -mEv +aEi +vQk +vQk +vQk vim -mBS -evS vQk -vQO -nXZ -sYu -gaU -gaU -gaU -goT -wds -kdC -sUi -qwq -kBc -kBc -kBc vQk -aCf +yfz +yfz +nNL +xpH +tYV +tyX +tyX +goT +aEi +oiP +aWn +aWn +aWn +aWn +aWn +aWn +fJn oiP oiP aCf @@ -78417,7 +79619,7 @@ doW doW qQG mip -tbS +tOd tbS tbS fha @@ -78495,30 +79697,30 @@ feQ oiP oiP oiP -oiP -aCf +aEi +oUR +hpO +biz +fJM +tKQ vQk -keu -evS -evS -evS yfz -nXZ -nXZ -pFx +gvW nNL -gaU -gaU -dGE -eWU -sOJ -sUi -oiw -kBc -kBc -kBc +xpH vQk -aCf +vQk +vQk +vQk +oAK +oiP +aWn +aWn +aWn +aWn +aWn +aWn +fJn oiP oiP aCf @@ -78652,30 +79854,30 @@ tpJ oiP oiP oiP -oiP -aCf -vQk -rnE -mEv +aEi +rkJ +kzV +nkn +fJM pRy -qCB vQk -xlw -nXZ -dsA +yfz +yfz nNL -gaU -gaU -xsL -vQk -aBJ -gaU -wYR -kBc -kBc -kBc +xpH vQk -aCf +bqW +wGw +xsL +aEi +oiP +aWn +aWn +aWn +aWn +aWn +aWn +fJn oiP oiP oiP @@ -78809,30 +80011,30 @@ tpJ oiP oiP oiP -oiP -aCf -vQk -vQk -gaU -gaU -vQk +fqt +pRy +gQo +gsS +fJM +fJM vQk -jRB -nXZ -dsA +yfz +yfz nNL -gaU -gaU -oAK -vQk -vQk -hiS -eWU -sEk -sEk -sEk -oAK -aCf +xpH +kdj +wGw +dLj +fsG +fqt +oiP +aWn +aWn +aWn +aWn +aWn +aWn +fJn oiP oiP fJn @@ -78953,10 +80155,10 @@ oiP oiP oiP oiP -oiP -oiP -oiP -oiP +aTi +aCf +aCf +aTi oiP kyR wmP @@ -78966,30 +80168,30 @@ tpJ oiP oiP oiP -oiP -aCf +aEi +rRw +pRy +fJM +fJM +mCW vQk -kLR -sUi -sUi -sUi -uUc -nXZ -nXZ -dsA +yfz +yfz nNL -gaU -gaU -jBk -aEr +xpH vQk -sUi -bBb -lOr -lOr -gMl vQk -aCf +vQk +vQk +aEi +oiP +aWn +aWn +aWn +aWn +aWn +aWn +fJn oiP oiP aCf @@ -79110,10 +80312,10 @@ oiP oiP oiP oiP -oiP -oiP -oiP -oiP +sjf +aTi +aTi +fJn oiP wlp wmP @@ -79123,30 +80325,30 @@ iQY oiP oiP oiP -oiP -aCf -vQk -cSB -sUi -sUi -sUi +aEi +uSa +dZY +dSx +fJM +muD vQk -hyI -mdx -dsA +yfz +yfz nNL -gaU -gaU -guF -qjV -vQk -sUi -sUi -gaU -sUi -gaU +xpH +xpH vQk -aCf +bbX +wGw +aEi +oiP +aWn +aWn +aWn +aWn +aWn +aWn +fJn oiP oiP aCf @@ -79267,10 +80469,10 @@ oiP oiP oiP oiP -oiP -oiP -oiP -oiP +sjf +aTi +aTi +fJn oiP wlp wmP @@ -79280,30 +80482,30 @@ tfO oiP oiP oiP -oiP -aCf +oAK +vQk vQk ukh -sUi -sUi -cYc +bqz +vQk vQk -nXZ -nXZ -dsA +yfz +yfz nNL -gaU -sUi -sUi -sUi -hiS -gaU -blj -sUi -sUi -tvQ -eWU -aCf +xpH +xpH +hIb +odO +odO +ePD +oiP +aWn +aWn +aWn +aWn +aWn +aWn +fJn oiP oiP aCf @@ -79424,10 +80626,10 @@ oiP oiP oiP oiP -oiP -oiP -oiP -oiP +sjf +aTi +aTi +fJn oiP wlp wmP @@ -79437,30 +80639,30 @@ tfO oiP oiP oiP -oiP -aCf -eWU -sUi -sUi -sUi -xKa +sjf vQk +ejh +xpH +xpH +xpH +xKa +bRH gvW -gvW -vQk -bxN -gaU -sUi -goT -cGA -vQk -sUi -sUi -ksr -nTl -uEP +nNL +bzP +xpH vQk -aCf +dlF +odO +aEi +oiP +aWn +aWn +aWn +aWn +aWn +aWn +fJn oiP oiP aCf @@ -79581,10 +80783,10 @@ oiP oiP oiP oiP -oiP -oiP -oiP -oiP +sjf +aTi +aTi +fJn oiP wlp wmP @@ -79594,30 +80796,30 @@ tfO oiP oiP oiP -oiP -aCf -vQk -lhA -mmG +sjf +aXW +oSr +xpH +xpH cnQ -vQk -oAK -nNL -nNL -gaU -gaU -dgF -sUi -lRn -sXL -vQk -rVn -gaU -gaU +gPy bRH -wsG +yfz +nNL +xrD +xpH vQk -aCf +wXf +lRn +aEi +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP oiP oiP aCf @@ -79738,10 +80940,10 @@ oiP oiP oiP oiP -oiP -oiP -oiP -oiP +aTi +xRY +xRY +aTi oiP wlp wmP @@ -79751,29 +80953,29 @@ feQ oiP oiP oiP -oiP -aCf -vQk -wsG -mmG -byI -vQk -bRH -gaU -gaU -gaU -gaU -gaU -sUi oAK vQk vQk vQk -vQk -hiS +xpH +cnQ +mDn +bRH +yfz +nNL +bzP +xpH vQk vQk vQk +aEi +oiP +aCf +aCf +rsr +aCf +aCf +aCf aCf oiP oiP @@ -79908,29 +81110,29 @@ tpJ oiP oiP oiP -oiP -aCf -vQk -vQk -vuz -fBA +aEi +dlF +wGw vQk -bRH -gaU -gaU xpH xpH -gaU -sUi -qBp -kvJ -vQk -eQl -gaU -qHl -dxj -ipK -vQk +bzP +gJe +gZL +peA +xpH +xpH +mks +mks +oAK +oAK +oiP +oAK +aEi +aEi +aEi +aEi +oAK aCf nRs nRs @@ -80032,7 +81234,7 @@ awl iez jdM pqy -hkQ +uVU euW hGw teB @@ -80065,29 +81267,29 @@ tpJ oiP oiP oiP +oAz +wGw +wGw +jpz +xqs +xqs +xqs +xqs +xqs +xqs +xqs +xqs +xpH +xpH +aEi oiP -aCf -vQk -vQk -vQk -vQk -vQk -vQk -gaU -gaU -nGH -sXL -gaU -sUi -okR -okR -vQk -igP -gaU -qWo -dEq -fxm -vQk +oiP +aEi +ixF +ixF +ixF +ixF +aEi aCf oiP oiP @@ -80222,29 +81424,29 @@ tpJ oiP oiP oiP -oiP -aCf -oAK +aEi +wXf +iWb vQk wkz -wkz -edh +tCq +xqs xqs -gaU -gaU +xqs +yiX nak jAr -gaU -sUi -sUi -sUi -vQk -heG -gaU -qHl -wWl -qHl -eWU +xqs +xqs +aEi +oiP +sjf +aEi +ixF +ixF +ixF +ixF +aEi aCf oiP aCf @@ -80379,29 +81581,29 @@ iQY oiP oiP oiP -oiP -aCf -aCf +oAK +vQk +vQk +vQk vQk -pYB -nrH -vao -nXZ -gaU -gaU -cpQ -cpQ -gaU -sUi -sUi -sUi -hiS -sUi -sUi -sUi -sUi -sUi vQk +xqs +xqs +xqs +vQk +yfz +eeO +xqs +xqs +qwa +oiP +sjf +qwa +ixF +ixF +ixF +ixF +aEi aCf oiP aCf @@ -80537,28 +81739,28 @@ oiP oiP oiP oiP -oiP -aCf -eWU -iVi -ioS -dVH -nXZ -gaU -gaU -gaU -gaU -gaU -sUi -sUi -sUi +oAK +gNw +bqW +wGw vQk -gaU -gaU -reE -goT -reE +xqs vQk +iyD +vQk +yfz +eeO +xqs +xqs +aEi +oiP +sjf +aEi +ixF +ixF +ixF +ixF +aEi aCf oiP aCf @@ -80694,28 +81896,28 @@ oiP oiP oiP oiP -oiP -aCf -vQk -hSh +fqt +fRH +wGw +wGw nrI -hSh -aBk -gaU -gaU -gaU -wCF -gaU -reE -wSS -wSS +xqs +vQk +mAU vQk -gaU -gaU -qWo -wuH -fxm vQk +vQk +kyq +xpH +aEi +oiP +sjf +aEi +ixF +ixF +ixF +ixF +aEi aCf oiP aCf @@ -80851,28 +82053,28 @@ tfO oiP oiP oiP -oiP -aCf oAK +oAK +fsG +haD +vQk +xqs vQk -nXZ -aBk -nXZ -gaU mAU -gaU -gaU +mAU +mAU +vQk vwE mPS -iOt -sXL -vQk -xZg -gaU -reE -xsL -reE -vQk +aEi +oiP +sjf +aEi +ixF +ixF +ixF +ixF +aEi aCf oiP aCf @@ -81009,27 +82211,27 @@ tfO oiP oiP oiP -aCf -aCf -vQk -vQk -eWU -vQk +oAK +dPk +oAK vQk +fRl vQk +uhB +mAU kes +oAK vQk vQk -vQk -eWU -vQk -vQk -xVU -gaU -gaU -gaU -gaU -vQk +oAK +oiP +oAK +oAK +ixF +ixF +ixF +ixF +aEi aCf oiP aCf @@ -81140,7 +82342,7 @@ sLP pqy uVU sLP -pNT +qaz sLP bGl clN @@ -81169,24 +82371,24 @@ oiP oiP oiP oiP -oiP -oiP -oiP +vQk +njH +vQk eTO wnd -wol -jUe -nKO +spv +vQk oiP oiP oiP -vQk -oZX -gaU -nNa -wuH -aEr -eWU +oiP +aEi +ixF +ixF +ixF +ixF +ixF +aEi aCf oiP aCf @@ -81299,7 +82501,7 @@ bjd sLP swi sLP -bGl +ilU pqy oiP oiP @@ -81326,24 +82528,24 @@ oiP oiP oiP oiP -oiP -oiP -oiP -eTO +oAK +vQk +oAK +vQk wol cWu -wol -nKO +oAK oiP oiP oiP -vQk -gaU -gaU -gaU -gaU -qVd -vQk +sjf +aEi +ixF +ixF +ixF +ixF +ixF +aEi aCf oiP aCf @@ -81484,22 +82686,22 @@ oiP oiP oiP oiP +xRY +xRY +xRY +xRY +xRY oiP oiP -eTO -cEj -cEj -cEj -nKO -oiP oiP oiP +sjf oAK -vQk -vQk -eWU -vQk -vQk +aEi +aEi +aEi +aEi +aEi oAK aCf oiP @@ -81609,7 +82811,7 @@ pqy sLP hqW pqy -djr +dXx kXR clN kXR @@ -81643,14 +82845,14 @@ oiP oiP oiP oiP -wbS -wbS -wbS -wbS -wbS oiP oiP oiP +oiP +oiP +oiP +oiP +sjf fJn fJn fJn @@ -81945,7 +83147,7 @@ pqy fTF nfH wmP -nfH +jYG kyR tfO oiP @@ -82102,7 +83304,7 @@ clN clN nfH wmP -nfH +pKt dQd tfO oiP @@ -82237,11 +83439,11 @@ pqy rjF sLP pqy -hiy +uVU sLP -bGl -hqW sLP +hqW +bGl pqy oiP oiP @@ -82259,7 +83461,7 @@ pqy dXO nfH nfH -nfH +eoy kyR tfO oiP @@ -82394,9 +83596,9 @@ clN sLP sLP pqy -qHq +swi sLP -bGl +ptj sLP lhy pqy @@ -82551,11 +83753,11 @@ sOa sLP sLP pqy -bGl +swi sLP kvI sLP -hqW +fLx clN oiP oiP @@ -82695,7 +83897,7 @@ ulH ulH ulH oEQ -bGl +swi yhr yhr yhr @@ -84113,7 +85315,7 @@ deY sLP sLP sLP -nfH +kRU bHM rHm nfH @@ -89458,7 +90660,7 @@ doW doW doW bjg -hao +nQo nFc bFU mYU @@ -89935,7 +91137,7 @@ bjg bjg bjg cPS -tvG +djr vTl vTl wau @@ -101577,21 +102779,21 @@ oiP oiP oiP oiP -oiP aZZ sHa sHa sHa feQ -feQ oiP oiP oiP -aZZ -sHa -sHa -sHa -feQ +oiP +oiP +oiP +oiP +oiP +oiP +oiP oiP oiP oiP @@ -101734,21 +102936,21 @@ oiP oiP oiP oiP -oiP pen +vvC aNE cxg -aNE tpJ oiP oiP oiP oiP -pen -aNE -cxg -aNE -tpJ +oiP +oiP +oiP +oiP +oiP +oiP oiP oiP oiP @@ -101890,29 +103092,29 @@ uqu oiP oiP oiP -aCf -aCf -pen -szg -aNE -szg -tpJ -aCf -aCf -rsr -aCf +oiP pen szg -aNE szg +kLH tpJ -aCf -aCf -aCf -aCf -aCf -aCf -aCf +oiP +oiP +aZZ +sHa +sHa +sHa +sHa +sHa +sHa +feQ +oiP +oiP +oiP +oiP +oiP +oiP +oiP oiP oiP sjf @@ -102046,30 +103248,30 @@ uqu uqu oiP oiP -oiP -sjf -oAK -vQk -vQk -iZb -vQk -vQk -oAK -vQk -vQk -vQk oAK vQk -dZl -vQk -vQk -vQk -vQk -vQk vQk +eCU +fST vQk oAK -fJn +oiP +oiP +pen +lSc +szg +szg +szg +szg +juA +tpJ +aWn +aWn +aWn +aWn +aWn +aWn +oiP oiP oiP sjf @@ -102203,30 +103405,30 @@ uqu uqu oiP oiP -oiP -sjf vQk +sev +pgQ fJM -sUi -sUi -reb +fJM +bAm vQk -aEi -nGv +oiP +oiP +pen vOZ -jWZ -aEi -heG -gaU -gaU -vQk -aNX -gaU -vQk -rce -gaU -vQk -fJn +vOZ +szg +kLH +szg +xMd +tpJ +aWn +aWn +aWn +aWn +aWn +aWn +oiP oiP oiP sjf @@ -102360,30 +103562,30 @@ uqu uqu oiP oiP -oiP -sjf -vQk -icL -nfu -nfu -sUi -vQk -aEi -amn -amn -gaU -xmv -gaU -gaU -gaU vQk -mgU -fmE +fJM +wGw +wGw +wGw +gsS vQk -mgU -fmE +oiP +oiP +xcx +oAK vQk -fJn +xBz +aEi +aEi +oAK +iQY +aWn +aWn +aWn +aWn +aWn +aWn +oiP oiP oiP sjf @@ -102517,30 +103719,30 @@ uqu uqu oiP oiP -oiP -sjf -vQk -sUi -nfu -nfu -sUi vQk -aEi -gHG -amn -gaU -aEi -gaU -gaU -gaU -vQk -gHG -amn +hYP +sjo +wGw +wGw +rgh vQk -gHG -amn +aCf +enP +aCf vQk -fJn +pTC +jVv +mQQ +dSK +aEi +oiP +aWn +aWn +aWn +aWn +aWn +aWn +oiP oiP oiP sjf @@ -102674,30 +103876,30 @@ uqu uqu oiP oiP -oiP -sjf -oAK -gHG -nfu +vQk +fJM +wGw +wGw +wGw gsS -vXt -oAK -aEi -amn -amn -gaU -daV -gaU -gaU -gaU vQk amn amn -vQk amn -amn -vQk -fJn +oAK +piZ +oUv +nUe +mQQ +aEi +oiP +aWn +aWn +aWn +aWn +aWn +aWn +oiP oiP oiP sjf @@ -102831,30 +104033,30 @@ uqu uqu oiP oiP -oiP -sjf vQk +mUK cwq -nfu -nfu -vum -vQk -aEi -gaU -gaU -gaU -daV -gaU -gaU -gaU +cwq +nUe +kaU vQk -qOL -gaU +cQk +xqs +vmg vQk -gaU -gaU +vze +qGo +mAU +eRL vQk -lPn +oiP +aWn +aWn +aWn +aWn +aWn +aWn +oiP oiP oiP xRY @@ -102988,30 +104190,30 @@ uqu uqu oiP oiP -oiP -sjf vQk +lkB wGw -nfu -nfu -sUi -vQk -aEi -nyG -uUs -pTC -aEi -rVn -gaU -gaU -oAK +wGw +ibr +fJM vQk -syl -oAK -rKP +xqs +xqs +xqs vQk +pTC +mAU +mQQ +spS vQk -fJn +oiP +aWn +aWn +aWn +aWn +aWn +aWn +oiP oiP oiP oiP @@ -103145,30 +104347,30 @@ uqu uqu oiP oiP -oiP -sjf -vQk -fng -nfu -nfu -sUi -vQk -oAK +fqt +pQk +wGw +fJM +wGw +fJM aEi +ljw +xqs +hcy aEi -vQk -oAK -rVn -gaU -gaU -sUi -sUi -sUi -bBb -sUi -sUi -vQk -fJn +mAU +mAU +mQQ +wXr +gmV +oiP +aWn +aWn +aWn +aWn +aWn +aWn +oiP oiP oiP aCf @@ -103302,30 +104504,30 @@ uqu uqu oiP oiP -oiP -sjf -vQk -nDW -sUi -sUi -sUi vQk -wsG -wsG -wsG -wsG +kDV +wGw +wGw +wGw +fJM +fST +xqs +xqs +xqs +xBz +mAU +mAU +mQQ +oOI vQk -heG -gaU -gaU -sUi -sUi -sUi -sUi -sUi -hjY -dCV -fJn +oiP +aWn +aWn +aWn +aWn +aWn +aWn +oiP oiP oiP sjf @@ -103459,30 +104661,30 @@ uqu uqu oiP oiP -oiP -sjf -vQk vQk +nzQ +fJM +fJM iZb +kDd +aEi +ljw +xqs +hcy +aEi +xAt +vQE +sQa +mAU vQk -vQk -oAK -wsG -wsG -wgF -wsG -vQk -gaU -gaU -gaU -vQk -vQk -vQk -vQk -vQk -vQk -vQk -fJn +oiP +aWn +aWn +aWn +aWn +aWn +aWn +oiP oiP oiP sjf @@ -103616,30 +104818,30 @@ uqu uqu oiP oiP -oiP -sjf -vQk -gaU -gaU -gaU -sUi -sjD -wsG -wsG -wsG -wsG -piH -gaU -gaU -gaU oAK -aEi -aEi -aEi -aEi +vQk +vQk +vQk +vQk +vQk +cJH +xqs +xqs +xqs oAK vQk -fJn +vQk +vQk +vQk +oAK +feQ +aWn +aWn +aWn +aWn +aWn +aWn +oiP oiP oiP sjf @@ -103775,28 +104977,28 @@ oiP oiP oiP sjf -vQk -heG -gaU -gaU -sUi -sjD -wsG -wsG -vQk -wsG +sjf +sjf +sjf +sjf +rJt +xqs +vqF +xqs piH -gaU -gaU -gaU -oAK -fzj -gaU -jrT -giK -aEi -vQk -fJn +piH +piH +piH +piH +qHC +tpJ +aWn +aWn +aWn +aWn +aWn +aWn +oiP oiP oiP sjf @@ -103932,28 +105134,28 @@ oiP oiP oiP sjf -vQk -gaU -gaU -gaU -sUi -aJo -wsG -wsG -wsG -wsG +sjf +sjf +sjf +sjf +rJt +xqs +xqs +xqs piH -gaU -gaU -gaU -oAK -itr -gzW -nRU -muZ -aEi -vQk -fJn +piH +piH +piH +piH +sGr +tpJ +oiP +oiP +oiP +oiP +oiP +oiP +oiP oiP oiP sjf @@ -104087,30 +105289,30 @@ uqu uqu oiP oiP -oiP sjf -cWI -hQc -gaU -gaU -aLO -wsG +sjf +sjf +sjf +sjf +sjf +rJt wsG -wgF wsG wsG -piH -gaU -gaU -gaU -oAK -gaU -gzW -uFM -muZ -aEi -vQk -fJn +uPc +rHc +pcH +pcH +uPc +fyf +iQY +oiP +oiP +oiP +oiP +oiP +oiP +oiP oiP oiP sjf @@ -104244,30 +105446,30 @@ uqu uqu oiP oiP -oiP -eZG -vQk -eAU -gaU -gaU -aLO -wsG +yhi +sjf +sjf +sjf +sjf +sjf +rJt wsG wsG -vQk wsG -piH -gaU -gaU -gaU +tPo +mou +yfz +yfz +tPo +fJn +oiP +oAK aEi -gaU -gaU -sNj -giK aEi -vQk -fJn +aEi +aEi +oAK +oiP oiP oiP sjf @@ -104401,30 +105603,30 @@ uqu uqu oiP oiP -oiP sjf -vQk -rVn -gaU -gaU -sUi -nJt -wsG +sjf +sjf +sjf +sjf +sjf +rJt wsG wsG wsG -piH -gaU -gaU -gaU +tPo +ijC +fyf +fyf +mpR +oiP +oiP aEi -tvQ -gaU -giK -giK +ixF +ixF +ixF +ixF aEi -vQk -fJn +oiP oiP oiP sjf @@ -104558,30 +105760,30 @@ uqu uqu oiP oiP -oiP sjf -oAK -vQk -gaU -gaU -sUi -sUi -qKH -qKH -qKH -qKH -qKH -gaU -gaU -gaU -oAK -aEi +sjf +sjf +sjf +sjf +sjf +rJt +wsG +wsG +wsG +tPo +fJn +fJn +fJn +fJn +oiP +oiP aEi -kAc +ixF +ixF +ixF +ixF aEi -oAK -vQk -fJn +oiP oiP oiP aCf @@ -104715,190 +105917,190 @@ uqu uqu oiP oiP +sjf +sjf +sjf +sjf +sjf +sjf +rJt +wsG +wsG +wsG +tPo +fJn +fJn +fJn +fJn +oiP +oiP +qwa +ixF +ixF +ixF +ixF +aEi +oiP +oiP +oiP +sjf +hWB +nKr +nKr +nKr +nKr +nKr +nKr +mLV +fJn +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP +uqu +uqu +doW +doW +doW +doW +doW +doW +doW +doW +doW +doW +doW +doW +doW +doW +doW +doW +doW +doW +doW +doW +doW +doW +doW +doW +doW +doW +cOA +cOA +cOA +cOA +cOA +cOA +cOA +cOA +doW +doW +doW +doW +doW +doW +doW +doW +doW +doW +doW +doW +nog +nog +nog +nog +nog +nog +nog +nog +nog +nog +nog +nog +nog +"} +(68,1,4) = {" +nog +nog +nog +lcA +ohe +ohe +ohe +ohe +ohe +ohe +mVR +mVR +mVR +mVR +mVR +mVR +mVR +mVR +mVR +mVR +mVR +mVR +mVR +mVR +mVR +mVR +mVR +rYB +nfX +iFl +iFl +iFl +iFl +iFl +iFl +iFl +iFl +iFl +iFl +oiP +oiP +oiP +oiP +uqu +uqu +oiP +oiP oiP -xRY -xRY -vQk -tvQ -gaU -sUi -sUi -sUi -bOA -sUi -sUi -sUi -gaU -gaU -gaU -sUi -sUi -sUi -sUi -sUi -sUi -vQk -fJn -oiP -oiP sjf -hWB -nKr -nKr -nKr -nKr -nKr -nKr -mLV +sjf +sjf +sjf +sjf +rJt +vVN +vVN +vVN +tPo +fJn +fJn +fJn fJn oiP oiP -oiP -oiP -oiP -oiP -oiP -oiP -oiP -oiP -oiP -uqu -uqu -doW -doW -doW -doW -doW -doW -doW -doW -doW -doW -doW -doW -doW -doW -doW -doW -doW -doW -doW -doW -doW -doW -doW -doW -doW -doW -cOA -cOA -cOA -cOA -cOA -cOA -cOA -cOA -doW -doW -doW -doW -doW -doW -doW -doW -doW -doW -doW -doW -nog -nog -nog -nog -nog -nog -nog -nog -nog -nog -nog -nog -nog -"} -(68,1,4) = {" -nog -nog -nog -lcA -ohe -ohe -ohe -ohe -ohe -ohe -mVR -mVR -mVR -mVR -mVR -mVR -mVR -mVR -mVR -mVR -mVR -mVR -mVR -mVR -mVR -mVR -mVR -rYB -nfX -iFl -iFl -iFl -iFl -iFl -iFl -iFl -iFl -iFl -iFl -oiP -oiP -oiP -oiP -uqu -uqu -oiP +aEi +ixF +ixF +ixF +ixF +aEi oiP oiP oiP sjf -vQk -vQk -vQk -vQk -vVN -vQk -vQk -vQk -mzn -vQk -vQk -gaU -gaU -sUi -sUi -sUi -bOA -sUi -sUi -dCV -fJn -oiP -oiP -sjf vTw tgV uNu @@ -105030,29 +106232,29 @@ uqu uqu oiP oiP -oiP sjf -vQk -vQk -vQk -qSE -gaU -hgC -vQk -qSE -gaU -hgC -vQk -gaU -gaU -oAK -aEi -gNr +sjf +sjf +sjf +sjf +rJt +wdi +wdi +wdi +tPo +fJn +fJn +fJn +fJn +oiP +oiP aEi +ixF +ixF +ixF +ixF aEi -vQk -vQk -fJn +oiP oiP oiP sjf @@ -105187,29 +106389,29 @@ uqu uqu uqu oiP -oiP sjf -oAK -vQk -vQk -rJt -gaU -oPY -vQk +sjf +sjf +sjf +sjf rJt -gaU +wdi oPY -vQk -heG -gaU +wdi +tPo +fJn +fJn +fJn +fJn +oiP +oiP aEi -nxn -aNW -wQi +ixF +ixF +ixF +ixF aEi -vQk -vQk -fJn +oiP oiP oiP sjf @@ -105345,28 +106547,28 @@ uqu uqu oiP oiP -xRY -xRY -oAK -vQk -vQk -vQk -vQk -vQk -vQk -vQk -vQk -vQk +sjf +sjf +sjf +sjf +rJt +wdi +wdi +wdi +tPo +fJn +fJn +fJn bPG -vQk -aEi -amn -amn -aNW +oiP +oAK +oAK +ixF +ixF +ixF +ixF aEi -vQk -vQk -fJn +oiP oiP oiP sjf @@ -105503,27 +106705,27 @@ uqu oiP oiP oiP -xRY -xRY -xRY -xRY -xRY -xRY -xRY -xRY -xRY -xRY -olg -xRY -xRY +oiP +oiP +sjf +rJt +wdi +wdi +wdi +tPo +fJn +oiP +oiP +oiP +oiP aEi -gHG -amn -aNW +ixF +ixF +ixF +ixF +ixF aEi -vQk -vQk -saB +oiP oiP oiP sjf @@ -105662,25 +106864,25 @@ oiP oiP oiP oiP +sjf +rJt +hoG +dPK +hzl +tPo +fJn oiP oiP oiP oiP -oiP -oiP -oiP -oiP -oiP -oiP -sjf aEi -dUI -amn -dJo +ixF +ixF +ixF +ixF +ixF aEi -vQk -vQk -fJn +oiP oiP oiP sjf @@ -105814,30 +107016,30 @@ oKJ boJ uqu uqu -uqu -oiP -oiP -oiP oiP oiP oiP oiP oiP oiP +lOS +wbS +wbS +wbS +iQY oiP oiP oiP oiP oiP -sjf -vQk -vQk -vQk -vQk -vQk -vQk oAK -fJn +aEi +aEi +aEi +aEi +aEi +oAK +oiP oiP oiP sjf @@ -105986,15 +107188,15 @@ oiP oiP oiP oiP -xRY -xRY -xRY -xRY -xRY -xRY -xRY -xRY -xRY +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP +oiP oiP oiP xRY @@ -108159,8 +109361,8 @@ cTX jfK qaY jYf -icd -icd +iiw +iiw icd cTX cTX @@ -108470,11 +109672,11 @@ iFl cTX gAw iiw -icd -ued -icd -icd iiw +iiw +iiw +iiw +uGR wpL wpL wpL @@ -108627,11 +109829,11 @@ iFl eqn keR iiw -iiw -iiw +uwA +vyw aaF iiw -iiw +dRW wpL hjp kgn @@ -108939,8 +110141,8 @@ iFl iFl iFl cTX -ptj -tsq +pSY +fWC wpL wpL fWC @@ -109253,7 +110455,7 @@ iFl iFl iFl cTX -fWC +eDp wyz qYu wpL @@ -109417,7 +110619,7 @@ cbt fWC fWC wpL -qQU +gUA tfs tfs lmK @@ -112069,6 +113271,12 @@ doW doW doW doW +qHq +ktw +ktw +ktw +ktw +ktw ktw ktw ktw @@ -112077,12 +113285,6 @@ ktw ktw ktw ktw -doW -doW -doW -doW -doW -doW doW doW doW @@ -112232,6 +113434,12 @@ nKr fFx nKr nKr +nKr +nKr +nKr +nKr +nKr +nKr mLV bhm doW @@ -112239,12 +113447,6 @@ doW doW doW doW -doW -doW -doW -doW -doW -doW oiP oiP sjf @@ -112385,10 +113587,16 @@ doW doW qQG vTw +dSj kjw kjw kjw kjw +kjw +dSj +kjw +kjw +hiy qyY bhm doW @@ -112396,12 +113604,6 @@ doW doW doW doW -doW -doW -doW -doW -doW -doW oiP oiP sjf @@ -112542,18 +113744,18 @@ ktw ktw ktw vTw -kjw +dSj oJp oJp +hkQ +kjw +oJp +dSj +dSj +dSj kjw qyY -oNl -doW -doW -doW -doW -doW -doW +bhm doW doW doW @@ -112699,23 +113901,23 @@ nKr fFx nKr oJp -kjw +dSj fpt mWk +dSj +dSj +mWk +waK +dSj kjw -fFx +kjw +cRD bhm doW doW doW doW doW -doW -doW -doW -doW -doW -doW oiP oiP oiP @@ -112852,14 +114054,20 @@ doW doW qQG vTw +pah kjw kjw kjw -kjw -kjw +dSj mWk fpt kjw +dSj +mWk +kvF +dSj +kjw +kjw qyY bhm doW @@ -112867,12 +114075,6 @@ doW doW doW doW -doW -doW -doW -doW -doW -doW oiP oiP oiP @@ -113016,15 +114218,15 @@ oJp kjw oJp mWk +dSj kjw +mWk +mWk +mWk +oJp +dSj qyY ktw -ktw -ktw -ktw -ktw -ktw -ktw doW doW doW @@ -113170,17 +114372,17 @@ kjw mWk aDx mWk -kjw +dSj mWk mWk kjw -oJp -nKr -nKr -fFx -nKr -nKr -mLV +dSj +dSj +dSj +dSj +dSj +dSj +qyY bhm doW doW @@ -113327,16 +114529,16 @@ kjw mWk aDx mWk -kjw +dSj mWk mWk +ued kjw kjw +dSj +dSj kjw -kjw -kjw -kjw -kjw +dSj qyY bhm doW @@ -113484,7 +114686,7 @@ kjw oJp fpt mWk -kjw +dSj oJp oJp uNu @@ -113493,7 +114695,7 @@ kjw oJp uNu oJp -kjw +dSj fFx bhm doW @@ -113641,11 +114843,11 @@ kjw kjw kjw kjw +dSj kjw -kjw -kjw -kjw -kjw +dSj +dSj +dSj kjw mWk aDx @@ -113803,7 +115005,7 @@ fpt uNu uNu oJp -kjw +nXw mWk aDx fpt @@ -114121,7 +115323,7 @@ uJU eEe mWk mWk -kjw +nXw kjw kjw kjw @@ -114269,11 +115471,11 @@ doW doW qQG eSC -kjw +dSj nzA uIc -uJU -lAz +ezR +wBv lAz vrc mWk @@ -114282,7 +115484,7 @@ uNu fpt uNu oJp -kjw +dSj qyY bhm doW @@ -114429,9 +115631,9 @@ vTw oJp fpt oJp -uJU +ezR suC -lAz +wBv uJU mWk uNu @@ -114439,7 +115641,7 @@ uNu uNu uNu oJp -kjw +dSj qyY oNl doW @@ -114586,17 +115788,17 @@ dOj bdh aDx mWk -uJU -lAz -lAz +ezR +wBv +wBv uJU uIc kjw -kjw -kjw -kjw -kjw -kjw +dSj +dSj +dSj +dSj +fCI fFx bhm doW @@ -114753,7 +115955,7 @@ uNu uNu uNu oJp -kjw +dSj qyY bhm doW @@ -114910,7 +116112,7 @@ aDx aDx aDx mWk -kjw +dSj qyY bhm doW @@ -115067,7 +116269,7 @@ uNu yhk uNu oJp -kjw +dSj qyY bhm doW @@ -115220,11 +116422,11 @@ aDx aDx aDx mWk -kjw +pah kjw kjw oJp -kjw +dSj qyY bhm doW @@ -115377,7 +116579,7 @@ aDx aDx aDx mWk -kjw +bEN kjw kjw kjw @@ -115534,9 +116736,9 @@ aDx aDx aDx npv +siA kjw -kjw -kjw +qUQ oJp kjw qyY diff --git a/_maps/map_files/roguewar/roguewar.dmm b/_maps/map_files/roguewar/roguewar.dmm index a5386bcf3a..f5f441d950 100644 --- a/_maps/map_files/roguewar/roguewar.dmm +++ b/_maps/map_files/roguewar/roguewar.dmm @@ -1074,7 +1074,7 @@ /turf/open/floor/rogue/grass, /area/rogue) "Jt" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/closed/wall/mineral/rogue/wood/window, /area/rogue) "JH" = ( @@ -1280,7 +1280,7 @@ /turf/closed/wall/mineral/rogue/tent, /area/rogue) "QU" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf, /area/rogue) "Rc" = ( diff --git a/_maps/map_files/rogueworld/roguetown.dmm b/_maps/map_files/rogueworld/roguetown.dmm index ae569fbaa1..4a82e1dfca 100644 --- a/_maps/map_files/rogueworld/roguetown.dmm +++ b/_maps/map_files/rogueworld/roguetown.dmm @@ -994,8 +994,8 @@ /area/rogue/under/town/basement) "dz" = ( /obj/structure/closet/crate/roguecloset/dark, -/obj/item/rogueweapon/huntingknife/idagger, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/knife/dagger, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "dA" = ( @@ -1282,7 +1282,7 @@ "ew" = ( /obj/structure/closet/crate/roguecloset/dark, /obj/item/clothing/suit/roguetown/shirt/rags, -/obj/item/rogueweapon/mace/wsword, +/obj/item/rogueweapon/mace/woodclub/train_sword, /turf/open/floor/rogue/cobble, /area/rogue/under/town/basement) "ex" = ( @@ -1362,7 +1362,7 @@ /turf/closed/mineral/rogue/bedrock, /area/rogue/outdoors/town) "eN" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/carpet, /area/rogue/indoors/town/manor) "eO" = ( @@ -1562,7 +1562,6 @@ "fD" = ( /obj/item/reagent_containers/glass/cup/golden, /obj/structure/table/wood, -/obj/item/roguekey/lord, /turf/open/floor/rogue/carpet/lord/right, /area/rogue/indoors/town/manor) "fE" = ( @@ -1785,7 +1784,7 @@ /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) "gw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -1819,7 +1818,7 @@ }, /area/rogue/indoors/town/manor) "gA" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -1835,7 +1834,6 @@ /obj/structure/table/wood{ icon_state = "longtable" }, -/obj/item/roguekey/lord, /turf/open/floor/rogue/carpet/lord/center, /area/rogue/indoors/town/manor) "gD" = ( @@ -2700,21 +2698,21 @@ /turf/open/floor/rogue/grass, /area/rogue/outdoors/rtfield) "jv" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) "jw" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "jx" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -2722,7 +2720,7 @@ /turf/open/floor/rogue/blocks/stonered, /area/rogue/indoors/town/manor) "jy" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -2747,7 +2745,7 @@ icon_state = "chair2"; dir = 4 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -2758,7 +2756,7 @@ icon_state = "largetable"; dir = 9 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -3081,7 +3079,7 @@ /area/rogue/indoors/town/manor) "kw" = ( /obj/structure/closet/crate/chest, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "kx" = ( @@ -3986,7 +3984,7 @@ /area/rogue/indoors/town/manor) "nE" = ( /obj/structure/chair/bench/throne, -/obj/effect/landmark/start/lady, +/obj/effect/landmark/start/consort, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/manor) "nF" = ( @@ -4802,14 +4800,14 @@ /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) "qs" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, /turf/open/floor/rogue/blocks, /area/rogue/outdoors/town) "qt" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ dir = 1; icon_state = "borderfall" }, @@ -4987,7 +4985,7 @@ }, /area/rogue/indoors/town) "qW" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "vertw"; dir = 1 @@ -5126,7 +5124,7 @@ icon_state = "longtable" }, /obj/item/reagent_containers/powder/flour, -/obj/item/rogueweapon/huntingknife/cleaver, +/obj/item/rogueweapon/knife/cleaver, /turf/open/floor/rogue/tile{ icon_state = "tile" }, @@ -5361,9 +5359,9 @@ /area/rogue/indoors/town/tavern) "sb" = ( /obj/structure/closet/crate/chest, -/obj/item/rogueweapon/huntingknife/idagger/steel, -/obj/item/rogueweapon/huntingknife/idagger/silver, -/obj/item/rogueweapon/huntingknife/cleaver/combat, +/obj/item/rogueweapon/knife/dagger/steel, +/obj/item/rogueweapon/knife/dagger/silver, +/obj/item/rogueweapon/knife/cleaver/combat, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/shop) "sc" = ( @@ -5410,7 +5408,7 @@ /turf/open/floor/rogue/cobble, /area/rogue/outdoors/town) "sj" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/wood, /area/rogue/outdoors/town) "sk" = ( @@ -5550,7 +5548,7 @@ /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/manor) "sM" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/herringbone, /area/rogue/indoors/town/church) "sN" = ( @@ -6597,7 +6595,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town/dwarfin) "ww" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/dirt/road, /area/rogue/indoors/town/dwarfin) "wx" = ( @@ -6920,7 +6918,7 @@ }, /area/rogue/indoors/town/dwarfin) "xK" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -7195,7 +7193,7 @@ }, /area/rogue/indoors/town/dwarfin) "yD" = ( -/obj/item/rogueweapon/stoneaxe/woodcut, +/obj/item/rogueweapon/axe/iron, /turf/open/floor/rogue/blocks/stonered/tiny, /area/rogue/indoors/town/dwarfin) "yE" = ( @@ -7239,7 +7237,7 @@ /turf/open/floor/rogue/dirt/road, /area/rogue/outdoors/town) "yL" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/dwarfin) "yM" = ( @@ -7308,7 +7306,7 @@ /turf/closed/wall/mineral/rogue/decowood, /area/rogue/indoors/town) "yY" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town) "yZ" = ( @@ -8340,7 +8338,7 @@ /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "Cw" = ( -/obj/effect/landmark/start/barkeep, +/obj/effect/landmark/start/innkeep, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/tavern) "Cx" = ( @@ -9199,7 +9197,7 @@ }, /area/rogue/indoors/town/church/chapel) "Fq" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "weird1" }, @@ -9368,7 +9366,7 @@ /area/rogue/indoors/town/garrison) "FV" = ( /obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/idagger/steel, +/obj/item/rogueweapon/knife/dagger/steel, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -9648,7 +9646,7 @@ dir = 5 }, /obj/machinery/light/rogue/wallfire/candle, -/obj/item/rogueweapon/huntingknife/stoneknife, +/obj/item/rogueweapon/knife/stone, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/garrison) "GZ" = ( @@ -10386,7 +10384,7 @@ }, /area/rogue/indoors/town/church) "Js" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood, /area/rogue/indoors/town/warehouse) "Jt" = ( @@ -10411,7 +10409,7 @@ /turf/closed/wall/mineral/rogue/pipe, /area/rogue/indoors/town/warehouse) "Jz" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -10817,7 +10815,7 @@ }, /area/rogue/indoors/town/warehouse) "KR" = ( -/mob/living/carbon/human/species/goblin/npc/ambush/cave, +/mob/living/carbon/human/species/goblin/skilled/ambush/cave, /turf/open/floor/rogue/carpet/lord/right, /area/rogue/indoors/town/manor) "KS" = ( @@ -10862,7 +10860,7 @@ }, /area/rogue/indoors/town) "Lh" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" }, @@ -11029,7 +11027,7 @@ /turf/closed/mineral/rogue/bedrock, /area/rogue/outdoors/mountains) "LS" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/woodturned, /area/rogue/indoors/town/magician) "LT" = ( @@ -11261,7 +11259,7 @@ /area/rogue/indoors/town/magician) "MD" = ( /obj/structure/fluff/psycross, -/obj/item/rogueweapon/woodstaff/aries, +/obj/item/rogueweapon/polearm/woodstaff/aries, /turf/open/floor/rogue/wood, /area/rogue/indoors/town/church) "ME" = ( @@ -11422,7 +11420,7 @@ /turf/open/floor/rogue/churchrough, /area/rogue/indoors/town/church) "Ni" = ( -/obj/structure/roguewindow, +/obj/structure/roguewindow/solid, /turf/open/floor/rogue/churchrough, /area/rogue/indoors/town/church) "Nj" = ( diff --git a/_maps/map_files/stonehamlet/stonehamlet.dmm b/_maps/map_files/stonehamlet/stonehamlet.dmm new file mode 100644 index 0000000000..7e71753f8d --- /dev/null +++ b/_maps/map_files/stonehamlet/stonehamlet.dmm @@ -0,0 +1,148954 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aan" = ( +/obj/item/bait, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/shelter/bog) +"aat" = ( +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave) +"abk" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"abr" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/under/basement) +"abA" = ( +/obj/structure/fluff/statue/gargoyle, +/turf/closed/wall/mineral/rogue/stone/window/moss, +/area/rogue/outdoors/exposed/under/basement) +"abF" = ( +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"act" = ( +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"acw" = ( +/turf/closed/wall/mineral/rogue/decostone/fluffstone, +/area/rogue/outdoors/town/roofs) +"acA" = ( +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/town) +"ada" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"aei" = ( +/obj/structure/bars/pipe{ + dir = 6; + icon_state = "pipe" + }, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"aeu" = ( +/obj/effect/decal/cleanable/dirt/cobweb{ + dir = 1 + }, +/obj/structure/closet/crate/chest/old_crate, +/obj/item/clothing/mask/cigarette/rollie/nicotine, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town) +"aeH" = ( +/obj/structure/lever/wall{ + desc = "Let the games begin."; + dir = 8; + name = "sewer entrance"; + redstone_id = "sewer1" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue) +"afj" = ( +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/tavern/saiga) +"afw" = ( +/obj/effect/spawner/roguemap/treeorbush, +/obj/effect/decal/turfedge_neu/road{ + dir = 5 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"afP" = ( +/obj/structure/closet/dirthole/closed, +/obj/effect/spawner/roguemap/hauntz_random, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"afT" = ( +/obj/structure/bars/pipe, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"afZ" = ( +/obj/structure/rack/rogue, +/obj/item/gun/ballistic/revolver/grenadelauncher/crossbow, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/garrison) +"agk" = ( +/obj/effect/landmark/map_load_mark/hamlet_outlaws, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/outlaw) +"agr" = ( +/obj/effect/spawner/roguemap/sewerencounter, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/catacombs) +"agx" = ( +/obj/item/natural/worms/leech/propaganda, +/obj/item/natural/worms/leech/propaganda, +/obj/item/natural/worms/leech/propaganda, +/turf/open/water/sewer, +/area/rogue/under/town/basement) +"agP" = ( +/obj/structure/roguerock, +/obj/effect/decal/turfedge_neu/road{ + dir = 1 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"agY" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop/green{ + dir = 8 + }, +/area/rogue/outdoors/exposed/manorgarri) +"ahA" = ( +/obj/structure/mineral_door/wood/donjon{ + dir = 8; + icon_state = "donjondir"; + locked = 1; + lockid = "walls" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"ahG" = ( +/obj/structure/bars/pipe{ + dir = 8 + }, +/turf/closed/wall/mineral/rogue/stonebrick/reddish, +/area/rogue/indoors/town/bath/redhouse) +"ahR" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/dwarf) +"ahS" = ( +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/under/town/caverogue{ + first_time_text = "DEEP MINESHAFT" + }) +"ahT" = ( +/obj/structure/closet/dirthole/closed, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"aif" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 1; + name = "privy" + }, +/turf/open/floor/rogue/cobblerock, +/area/rogue/indoors/town) +"aiB" = ( +/turf/closed/mineral/rogue/salt, +/area/rogue/under/town/caverogue/saltmine) +"aiI" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"aiY" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle{ + dir = 8 + }, +/area/rogue/indoors/town) +"ajp" = ( +/obj/structure/mirror/alt, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/shop) +"ajF" = ( +/obj/structure/roguemachine/mail, +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern/saiga) +"ajU" = ( +/obj/structure/bars/pipe{ + dir = 5; + icon_state = "pipe" + }, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"akf" = ( +/obj/machinery/light/rogue/firebowl/stump, +/turf/open/floor/rogue/rooftop/green, +/area/rogue/outdoors/town/roofs) +"alA" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/grass/yelmix, +/area/rogue/outdoors/rtfield/hamlet) +"alG" = ( +/obj/structure/fluff/walldeco/chains, +/turf/open/floor/rogue/metal/barograte, +/area/rogue/indoors/town/cell) +"alH" = ( +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"alL" = ( +/obj/structure/stairs/stone/reddish{ + dir = 1 + }, +/obj/machinery/light/rogue/wallfire/candle/weak/l, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/bath/redhouse) +"alS" = ( +/obj/structure/chair/bench/ancientlog, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"alY" = ( +/obj/structure/fluff/walldeco/feldshersign{ + pixel_x = 32; + pixel_y = 0 + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"amo" = ( +/obj/structure/stairs/stone, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"amZ" = ( +/obj/structure/fluff/dryingrack, +/obj/item/reagent_containers/food/snacks/rogue/raisins, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"anm" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/obj/effect/sunlight, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"ans" = ( +/obj/structure/closet/crate/roguecloset/inn, +/obj/item/clothing/suit/roguetown/armor/leather/vest, +/obj/item/ingot/steel, +/obj/item/rogue/instrument/drum, +/obj/effect/decal/cleanable/dirt/cobweb{ + dir = 1 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town) +"anF" = ( +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/outdoors/exposed/town/hamlet) +"aoO" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/outdoors/exposed/under/sewer) +"aqs" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"aqt" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/rooftop/green{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"aqI" = ( +/obj/structure/table/wood{ + dir = 9; + icon_state = "largetable" + }, +/turf/open/floor/rogue/tile/tilerg, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"arl" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"ary" = ( +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/obj/structure/mineral_door/bars{ + locked = 1; + lockid = "mage"; + max_integrity = 100000 + }, +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/magician) +"arD" = ( +/obj/structure/roguewindow/openclose{ + dir = 8; + icon_state = "woodwindowdir" + }, +/turf/open/floor/rogue/woodturned/nosmooth, +/area/rogue/indoors/town/shop) +"arN" = ( +/obj/structure/fluff/statue/scare{ + desc = "Just a scarecrow..." + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"asj" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"asE" = ( +/obj/item/reagent_containers/food/snacks/produce/apple, +/obj/item/reagent_containers/food/snacks/produce/apple, +/obj/item/reagent_containers/food/snacks/produce/apple, +/obj/item/reagent_containers/food/snacks/produce/apple, +/obj/item/reagent_containers/food/snacks/produce/apple, +/obj/item/reagent_containers/food/snacks/produce/apple, +/obj/item/reagent_containers/food/snacks/produce/jacksberry, +/obj/item/reagent_containers/food/snacks/produce/jacksberry, +/obj/item/reagent_containers/food/snacks/produce/jacksberry, +/obj/item/reagent_containers/food/snacks/produce/jacksberry, +/obj/item/reagent_containers/food/snacks/produce/jacksberry, +/obj/structure/closet/crate/chest/wicker, +/obj/item/reagent_containers/food/snacks/produce/pear, +/obj/item/reagent_containers/food/snacks/produce/pear, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/under/basement) +"asS" = ( +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town) +"ate" = ( +/obj/item/candle/yellow, +/obj/item/candle/yellow, +/obj/item/candle/yellow, +/obj/item/candle/yellow, +/obj/structure/closet/crate/chest/old_crate, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/shelter/mountains) +"atf" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 5 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"atE" = ( +/obj/structure/roguewindow/openclose{ + dir = 8; + icon_state = "woodwindowdir" + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"aux" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 1 + }, +/area/rogue/indoors/town/bath/redhouse) +"auy" = ( +/turf/closed/wall/mineral/rogue/wood, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"auJ" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 6 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"avs" = ( +/obj/structure/toilet, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/cell) +"avy" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/needle/thorn, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"avV" = ( +/obj/structure/chair/wood/rogue/chair_noble, +/turf/open/floor/rogue/tile/tilerg, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"avZ" = ( +/obj/structure/bookcase, +/obj/item/book/rogue/beardling, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/outdoors/exposed/under/basement) +"awl" = ( +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"awv" = ( +/obj/structure/rack/rogue, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/magician) +"awA" = ( +/obj/machinery/light/rogue/torchholder/l, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"awD" = ( +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town) +"awU" = ( +/obj/structure/closet/crate/chest/wicker, +/obj/effect/spawner/roguemap/loot/common, +/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"axx" = ( +/obj/structure/flora/roguegrass, +/obj/effect/sunlight, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"axy" = ( +/obj/structure/stairs/stone, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/exposed/under/sewer) +"axL" = ( +/obj/structure/mineral_door/wood/donjon/stone{ + locked = 1; + lockid = "graveyard"; + name = "CATACOMBS" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/basement) +"ayF" = ( +/obj/structure/mineral_door/wood/red{ + locked = 1; + lockid = "veteran"; + name = "Veterans room" + }, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"ayK" = ( +/obj/structure/rack/rogue, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/obj/item/kitchen/spoon, +/obj/item/kitchen/spoon, +/obj/item/kitchen/spoon, +/obj/item/kitchen/spoon, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/church) +"ayL" = ( +/obj/structure/bed/rogue/shit, +/obj/item/grown/log/tree/stake{ + pixel_y = 4; + plane = -4 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town/cell) +"ayX" = ( +/obj/structure/fluff/railing/border, +/obj/structure/fluff/clock/dense{ + pixel_y = 7 + }, +/turf/open/floor/rogue/tile/masonic/inverted, +/area/rogue/indoors/town/magician) +"azg" = ( +/obj/structure/fluff/statue/knight, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"azz" = ( +/obj/structure/handcart{ + dir = 8 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"azS" = ( +/obj/structure/bed/rogue/shit, +/obj/effect/decal/miasma, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"aAp" = ( +/obj/effect/sunlight, +/turf/open/floor/rogue/rooftop/green{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"aAq" = ( +/obj/structure/closet/crate/roguecloset, +/obj/item/reagent_containers/glass/bottle/rogue/healthpot, +/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, +/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, +/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/garrison) +"aAt" = ( +/obj/structure/chair/wood/rogue/chair3{ + dir = 8 + }, +/obj/effect/landmark/start/puritan{ + dir = 8 + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/under/town/basement) +"aAL" = ( +/obj/structure/flora/roguegrass, +/obj/structure/closet/dirthole/closed/loot, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"aBa" = ( +/obj/item/candle/yellow/lit/infinite/strong{ + pixel_x = 38; + pixel_y = 9 + }, +/turf/open/floor/rogue/carpet/green, +/area/rogue/indoors/town/tavern/saiga) +"aBd" = ( +/obj/effect/sunlight, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/mountains) +"aBw" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 1; + name = "Privy" + }, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/town) +"aBS" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/landmark/start/watchman{ + dir = 8; + name = "Garrison Archer" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/town/roofs) +"aBY" = ( +/obj/machinery/light/rogue/torchholder/r, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"aCn" = ( +/obj/structure/fluff/statue/gargoyle, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/garrison) +"aCw" = ( +/obj/structure/closet/crate/chest/crate, +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/item/paper/scroll/cargo, +/obj/structure/roguemachine/camera/right, +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/cobblerock, +/area/rogue/indoors/town) +"aCN" = ( +/turf/open/transparent/openspace, +/area/rogue/outdoors/town/roofs) +"aDr" = ( +/obj/structure/fluff/statue/gargoyle, +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/outdoors/exposed/under/basement) +"aDu" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"aDC" = ( +/obj/structure/fluff/railing/fence{ + dir = 8; + icon_state = "fence" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"aDZ" = ( +/obj/structure/fluff/walldeco/psybanner/red, +/turf/closed/wall/mineral/rogue/decostone/long{ + dir = 1 + }, +/area/rogue/indoors/town/church/chapel) +"aEH" = ( +/obj/structure/chair/wood/rogue{ + dir = 8; + icon_state = "chair2" + }, +/obj/effect/landmark/start/woodsman{ + dir = 8 + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors) +"aEJ" = ( +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/shelter/bog) +"aEU" = ( +/obj/structure/table/wood{ + dir = 1; + icon_state = "longtable" + }, +/obj/item/natural/feather{ + pixel_x = 5 + }, +/obj/item/reagent_containers/glass/bottle/rogue/beer/voddena{ + pixel_x = -6; + pixel_y = 6 + }, +/turf/open/floor/rogue/tile{ + icon_state = "chess" + }, +/area/rogue/indoors/town/shop) +"aFy" = ( +/turf/open/water/bath/pool{ + dir = 1 + }, +/area/rogue/indoors/town/bath/redhouse) +"aFF" = ( +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/obj/effect/decal/cleanable/greenglow, +/obj/structure/fermenting_barrel/water, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"aGl" = ( +/obj/structure/bookcase, +/obj/item/book/rogue/blackmountain, +/obj/item/book/rogue/law, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/outdoors/exposed/under/basement) +"aGu" = ( +/obj/structure/fluff/walldeco/customflag, +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"aHa" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/woodish) +"aHg" = ( +/obj/effect/landmark/map_load_mark/dwarf_outpost, +/turf/open/floor/rogue/naturalstone, +/area/rogue) +"aHx" = ( +/obj/structure/roguethrone/statues, +/obj/effect/landmark/start/lord, +/obj/structure/roguemachine/titan{ + pixel_y = 32 + }, +/turf/open/floor/rogue/carpet/lord/center, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"aHB" = ( +/obj/structure/flora/roguegrass/water/reeds, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"aHC" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/sword/sabre/lord, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/vault) +"aHN" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/shelter/town/sargoth) +"aHT" = ( +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"aIR" = ( +/obj/structure/chair/wood/rogue, +/obj/effect/landmark/start/steward, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town) +"aJg" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/rock/pile, +/obj/item/natural/stone, +/obj/machinery/light/rogue/firebowl/stump{ + pixel_y = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"aJh" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"aJP" = ( +/obj/machinery/light/rogue/torchholder{ + pixel_y = 26 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/town/basement) +"aJR" = ( +/obj/structure/flora/roguegrass, +/obj/structure/roguemachine/scomm, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"aJW" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/shield/wood, +/obj/item/rogueweapon/shield/wood, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"aKs" = ( +/obj/structure/roguetent, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"aKF" = ( +/obj/machinery/light/rogue/torchholder/l, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/mountains) +"aKX" = ( +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"aKZ" = ( +/obj/effect/landmark/map_load_mark/hamlet_roadblock, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"aLP" = ( +/obj/structure/chair/bench/ancientlog, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"aLX" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/rogueweapon/mace/woodclub/rollingpin, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/soilsons) +"aMC" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "shop"; + name = "stevedore lodgings" + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/shop) +"aMR" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 5 + }, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/outdoors/exposed/under/basement) +"aMV" = ( +/obj/structure/floordoor/gatehatch/outer{ + redstone_id = "gatelava" + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/outdoors/exposed/town/hamlet) +"aNo" = ( +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/outdoors/exposed/under/sewer) +"aNH" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/obj/structure/flora/roguegrass/bush/wall/tall, +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"aNI" = ( +/obj/effect/decal/turfedge_neu/road, +/obj/effect/decal/turfedge_neu/road{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"aNW" = ( +/obj/structure/stairs{ + dir = 4; + icon_state = "stairs" + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors) +"aOi" = ( +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/church) +"aPD" = ( +/obj/structure/bed/rogue/shit, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/shop) +"aPT" = ( +/obj/effect/decal/cleanable/dirt/cobweb{ + icon_state = "cobweb2" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/tavern) +"aQF" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"aQL" = ( +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/carpet/red, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"aQX" = ( +/obj/structure/table/wood/large/corner_new{ + dir = 10 + }, +/obj/item/rogueweapon/knife/hunting{ + pixel_y = 22 + }, +/obj/item/rogueweapon/mace/woodclub{ + pixel_x = 6; + pixel_y = 4 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/cell) +"aRI" = ( +/turf/closed/mineral/rogue, +/area/rogue/indoors/town/cell) +"aRU" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"aSg" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"aSM" = ( +/obj/effect/spawner/roguemap/hauntz_random, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"aSZ" = ( +/obj/item/natural/stone, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"aTf" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle, +/area/rogue/indoors/town) +"aTF" = ( +/obj/effect/decal/cleanable/blood/gibs/core, +/obj/effect/decal/remains/human/old, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"aTI" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 5 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"aTP" = ( +/obj/structure/ladder, +/obj/machinery/light/rogue/wallfire/candle{ + pixel_y = -32 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"aTV" = ( +/obj/effect/decal/cleanable/blood_neu/tracks, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"aTX" = ( +/turf/open/floor/rogue/ruinedwood, +/area/rogue/outdoors/rtfield/boggish) +"aUb" = ( +/obj/structure/closet/crate/chest/crate/steward, +/obj/item/grown/log/tree/small, +/obj/item/grown/log/tree/small, +/obj/item/grown/log/tree/small, +/obj/item/grown/log/tree/small, +/obj/item/grown/log/tree/small, +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"aUj" = ( +/obj/structure/bed/rogue/wooldouble, +/obj/item/bedsheet/rogue/double_pelt, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"aVE" = ( +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/vault) +"aVL" = ( +/obj/effect/landmark/start/squire{ + dir = 1; + icon_state = "arrow" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"aVN" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1 + }, +/obj/structure/flora/rock/pile, +/obj/structure/fluff/walldeco/vinez{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"aWR" = ( +/obj/structure/closet/crate/chest/neu{ + name = "salt chest" + }, +/obj/item/reagent_containers/powder/salt, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/magician) +"aXe" = ( +/obj/effect/decal/cleanable/food/egg_smudge, +/turf/open/floor/rogue/tile/checker, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"aXu" = ( +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/obj/structure/ladder, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/town/roofs) +"aXE" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"aXI" = ( +/obj/structure/fluff/walldeco/stone, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/under/town/basement) +"aYc" = ( +/obj/item/reagent_containers/glass/bucket/wooden, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"aYz" = ( +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/outdoors/town/roofs) +"aYX" = ( +/obj/machinery/light/rogue/torchholder{ + pixel_y = 26 + }, +/turf/open/floor/rogue/church, +/area/rogue/under/town/basement) +"aZa" = ( +/obj/structure/fluff/walldeco/bath/wallrope{ + dir = 4; + pixel_y = 32 + }, +/obj/structure/closet/crate/roguecloset/dark, +/obj/item/reagent_containers/glass/bottle/rogue/wine, +/obj/item/clothing/mask/cigarette/rollie/trippy, +/obj/structure/fluff/walldeco/bath/wallrope{ + dir = 8; + pixel_y = 32 + }, +/obj/machinery/light/rogue/wallfire/candle/lamp, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"aZU" = ( +/obj/item/clothing/cloak/half, +/obj/structure/closet/crate/roguecloset, +/obj/item/flashlight/flare/torch/lantern, +/obj/item/flashlight/flare/torch/lantern, +/obj/item/flashlight/flare/torch/lantern, +/obj/item/clothing/neck/roguetown/psycross, +/obj/item/clothing/suit/roguetown/shirt/undershirt/puritan, +/turf/open/floor/rogue/church, +/area/rogue/under/town/basement) +"baL" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 9 + }, +/obj/effect/decal/turfedge_neu/alt_small{ + dir = 1 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"baQ" = ( +/obj/structure/flora/roguegrass, +/obj/machinery/light/rogue/torchholder/l, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"baZ" = ( +/obj/effect/spawner/roguemap/treeorbush, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"bbn" = ( +/obj/structure/fluff/grindwheel, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"bby" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "roomiv"; + name = "Castellan room" + }, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/town/tavern/saiga) +"bbA" = ( +/obj/effect/spawner/roguemap/treeorbush, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"bbG" = ( +/obj/machinery/light/rogue/wallfire/candle{ + pixel_y = -23 + }, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/cell) +"bbH" = ( +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"bbK" = ( +/obj/structure/flora/roguegrass, +/obj/item/storage/roguebag, +/obj/item/storage/roguebag, +/obj/structure/closet/crate/chest/old_crate, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"bbX" = ( +/obj/effect/decal/cleanable/blood/footprints, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"bci" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/shelter/rtfield) +"bcj" = ( +/obj/effect/spawner/roguemap/treeorbush, +/obj/structure/fluff/railing/wood, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"bcs" = ( +/obj/structure/bookcase, +/obj/item/book/rogue/festus, +/obj/item/book/rogue/law, +/obj/item/book/rogue/tales3, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/magician) +"bct" = ( +/obj/structure/fluff/walldeco/psybanner{ + pixel_y = 32 + }, +/turf/open/floor/rogue/church, +/area/rogue/under/town/basement) +"bcP" = ( +/obj/structure/flora/roguegrass, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/outdoors/rtfield/hamlet) +"bcX" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/wrists/roguetown/bracers/leather, +/obj/item/clothing/wrists/roguetown/bracers/leather, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"bdj" = ( +/obj/item/grown/log/tree/small, +/obj/item/grown/log/tree/small, +/obj/item/grown/log/tree/small, +/obj/structure/closet/crate/chest/crate, +/obj/item/natural/bundle/stick, +/obj/item/natural/bundle/stick, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"bdl" = ( +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/obj/structure/bars/pipe{ + dir = 8; + icon_state = "pipe" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/town/roofs) +"bdv" = ( +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/cell) +"bdM" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"bep" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/obj/structure/fluff/walldeco/med2{ + pixel_x = -16; + pixel_y = 32 + }, +/turf/open/floor/rogue/twig, +/area/rogue/under/town/basement) +"beY" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/church) +"bfo" = ( +/obj/structure/closet/dirthole/closed/loot, +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"bfK" = ( +/obj/structure/roguewindow/openclose{ + dir = 4; + icon_state = "woodwindowdir" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"bhc" = ( +/obj/effect/decal/cleanable/blood/gibs/up, +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"bhp" = ( +/obj/structure/table/wood{ + icon_state = "tablewood1" + }, +/obj/item/reagent_containers/food/snacks/rogue/meat/salami, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/under/basement) +"bhL" = ( +/obj/machinery/light/rogue/wallfire{ + pixel_y = 32 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"bhP" = ( +/obj/structure/roguemachine/mail{ + pixel_x = -32; + pixel_y = 0 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"bic" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"bjl" = ( +/obj/structure/flora/roguegrass, +/obj/effect/spawner/roguemap/tree, +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"bjR" = ( +/turf/closed/wall/mineral/rogue/pipe{ + dir = 8; + icon_state = "iron_corner" + }, +/area/rogue/indoors/town) +"bjY" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/machinery/light/rogue/firebowl/standing, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/church/chapel) +"bkp" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 8; + lockid = "farm" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"bkq" = ( +/obj/structure/flora/roguegrass, +/obj/machinery/light/rogue/firebowl/stump{ + pixel_y = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"bld" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/railing/wood, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"bmc" = ( +/turf/closed/wall/mineral/rogue/wooddark/vertical, +/area/rogue/indoors/town/shop) +"bmx" = ( +/obj/structure/chair/bench/couch/redright, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"bmA" = ( +/obj/item/chair/rogue, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"bnl" = ( +/obj/structure/closet/crate/roguecloset/dark, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church) +"bnA" = ( +/obj/structure/stairs{ + dir = 4; + icon_state = "stairs" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"bnP" = ( +/obj/structure/table/wood/plain_alt, +/obj/structure/mirror/alt, +/turf/open/floor/rogue/oak, +/area/rogue/indoors/town/cell) +"boJ" = ( +/turf/open/transparent/openspace, +/area/rogue/indoors/town/church) +"boQ" = ( +/obj/structure/handcart{ + dir = 4; + icon_state = "cart-empty" + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"boT" = ( +/obj/structure/closet/dirthole/closed/loot, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"bpv" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town) +"bpQ" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/shelter/town/sargoth) +"bqf" = ( +/obj/item/grown/log/tree, +/obj/item/grown/log/tree, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"brh" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"brr" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/handcart{ + dir = 4; + icon_state = "cart-empty" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"brT" = ( +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/under/basement) +"bsm" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"bsq" = ( +/obj/item/roguebin/water/gross, +/obj/structure/mirror/alt, +/obj/item/natural/cloth, +/turf/open/floor/rogue/tile{ + icon_state = "chess" + }, +/area/rogue/indoors/town) +"bsB" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 8; + icon_state = "wooddir"; + locked = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/garrison) +"bsE" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/hoe/neu, +/obj/item/rogueweapon/hoe/neu, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"bsU" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/polearm/spear/billhook/neu, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/garrison) +"btB" = ( +/turf/closed/wall/mineral/rogue/stone/window, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"btQ" = ( +/obj/effect/decal/turfedge_neu/road, +/obj/effect/decal/turfedge_neu/road, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"btS" = ( +/obj/item/reagent_containers/food/snacks/crow, +/turf/open/floor/rogue/rooftop{ + dir = 1 + }, +/area/rogue/outdoors/town/roofs) +"bun" = ( +/obj/effect/landmark/start/guardsman, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"buu" = ( +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town) +"buA" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 9 + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"bvj" = ( +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/town/roofs) +"bvw" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 4; + icon_state = "torchwall1" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"bvE" = ( +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"bwe" = ( +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"bwi" = ( +/obj/structure/rack/rogue/shelf/notdense{ + pixel_x = 32; + pixel_y = 30 + }, +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/indoors/town/garrison) +"bwx" = ( +/obj/item/rogueweapon/pick, +/obj/item/natural/stone, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"bwy" = ( +/mob/living/simple_animal/pet/cat/rogue/black{ + name = "Morticia" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"bwR" = ( +/obj/machinery/light/rogue/torchholder{ + pixel_y = 32 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"bxB" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/spooky) +"bxU" = ( +/obj/item/roguebin/water/gross, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"byi" = ( +/obj/structure/bookcase, +/obj/item/book/rogue/tales1, +/obj/item/book/rogue/tales3, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/outdoors/exposed/under/basement) +"byC" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/roguemachine/atm, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town) +"byF" = ( +/obj/structure/mineral_door/wood/donjon{ + dir = 1; + locked = 1; + lockid = "dungeon"; + name = "prisoners cell" + }, +/turf/open/floor/rogue/tile{ + icon_state = "chess" + }, +/area/rogue/indoors/town/cell) +"byJ" = ( +/obj/item/natural/rock, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"byY" = ( +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/indoors/soilsons) +"bzx" = ( +/obj/structure/fluff/statue/small, +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"bAk" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/mace/church, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church) +"bAA" = ( +/turf/open/floor/rogue/grass, +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/outdoors/rtfield/woodish) +"bBj" = ( +/obj/structure/table/wood{ + dir = 10; + icon_state = "largetable" + }, +/obj/item/candle/yellow/lit/infinite/strong{ + pixel_x = 15; + pixel_y = 18 + }, +/turf/open/floor/rogue/tile/tilerg, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"bCf" = ( +/obj/structure/mineral_door/wood/donjon{ + dir = 4; + lockid = "tavern"; + name = "Drunken Saiga inn" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/tavern/saiga) +"bCh" = ( +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"bCp" = ( +/obj/effect/sunlight, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"bCq" = ( +/obj/structure/closet/dirthole/closed, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"bCU" = ( +/obj/machinery/light/rogue/torchholder{ + pixel_y = -32 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"bCV" = ( +/obj/structure/closet/crate/drawer, +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"bDY" = ( +/obj/item/roguemachine/mastermail, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town) +"bES" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church) +"bFC" = ( +/obj/item/reagent_containers/glass/bottle/anxiety, +/obj/item/reagent_containers/glass/bottle/rogue/strongpoison, +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/reagent_containers/glass/bottle/rogue/poison, +/obj/item/reagent_containers/glass/bottle/spewium, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"bFL" = ( +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 4 + }, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 1 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/manorgarri) +"bGd" = ( +/obj/item/grown/log/tree/stake, +/obj/structure/closet/crate/chest/old_crate, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/shelter/mountains) +"bGv" = ( +/obj/structure/fluff/nest, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"bGy" = ( +/obj/structure/bed/rogue/shit, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors) +"bHA" = ( +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/town/hamlet) +"bHB" = ( +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"bHG" = ( +/obj/structure/roguewindow/openclose{ + dir = 8 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/bath/redhouse) +"bHN" = ( +/obj/machinery/light/rogue/torchholder/l, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"bIb" = ( +/obj/structure/fluff/walldeco/rpainting{ + pixel_x = 32 + }, +/obj/structure/chair/wood/rogue/chair_noble/purple{ + dir = 8 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/town/basement) +"bIe" = ( +/obj/structure/fluff/wallclock, +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/indoors/town/shop) +"bIi" = ( +/obj/structure/rack/rogue/shelf/notdense{ + pixel_x = -32; + pixel_y = 29 + }, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/garrison) +"bIK" = ( +/obj/structure/rack/rogue/shelf/notdense{ + pixel_x = 32; + pixel_y = -6 + }, +/turf/closed/wall/mineral/rogue/decostone/fluffstone/reddish, +/area/rogue/indoors/town/bath/redhouse) +"bIW" = ( +/obj/machinery/light/rogue/firebowl/stump, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"bJf" = ( +/obj/structure/bars{ + alpha = 190 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/cell) +"bJi" = ( +/obj/item/reagent_containers/food/snacks/produce/oat, +/obj/item/reagent_containers/food/snacks/produce/oat, +/obj/structure/closet/crate/chest/old_crate, +/obj/item/reagent_containers/food/snacks/produce/oat, +/obj/item/reagent_containers/food/snacks/produce/oat, +/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, +/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, +/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, +/obj/item/reagent_containers/food/snacks/produce/oat, +/obj/item/reagent_containers/food/snacks/produce/oat, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/church) +"bJm" = ( +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"bJv" = ( +/obj/machinery/light/rogue/wallfire{ + pixel_y = 32 + }, +/obj/effect/landmark/start/mason{ + dir = 1 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"bKg" = ( +/obj/structure/fluff/railing/border{ + dir = 9; + icon_state = "border" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"bKX" = ( +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/obj/effect/spawner/roguemap/hostile_beggar_danger, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"bLh" = ( +/obj/structure/fluff/psycross/crafted/shrine/necra{ + pixel_x = -15 + }, +/obj/item/candle/yellow/lit/infinite, +/turf/open/floor/rogue/underworld/road, +/area/rogue/indoors/town/church/chapel) +"bLE" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/manorgarri) +"bMJ" = ( +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/entrance{ + first_time_text = "Rockhamlet" + }) +"bMQ" = ( +/obj/structure/closet/crate/roguecloset/lord{ + locked = 0; + lockid = null + }, +/obj/item/reagent_containers/glass/cup, +/obj/item/reagent_containers/glass/cup, +/obj/item/reagent_containers/glass/cup, +/obj/item/reagent_containers/glass/cup, +/obj/item/reagent_containers/glass/cup, +/obj/item/reagent_containers/glass/cup, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"bNi" = ( +/obj/item/candle/yellow/lit/infinite{ + pixel_y = -13 + }, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/indoors/town/magician) +"bNE" = ( +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town) +"bNF" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 8 + }, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"bNO" = ( +/turf/closed/wall/mineral/rogue/wooddark/window, +/area/rogue/outdoors/exposed/manorgarri) +"bOb" = ( +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/mountains) +"bOc" = ( +/obj/structure/fluff/clodpile, +/obj/item/natural/worms, +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"bOg" = ( +/obj/effect/decal/remains/human, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/mountains) +"bOo" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 9 + }, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/outdoors/exposed/under/basement) +"bOq" = ( +/obj/structure/closet/dirthole/closed/loot, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"bOD" = ( +/obj/effect/decal/remains/cabbit, +/obj/effect/spawner/roguemap/loot/common, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"bOX" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/machinery/light/rogue/torchholder/c{ + pixel_y = -32 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/soilsons) +"bOY" = ( +/obj/item/clothing/head/roguetown/cookhat, +/obj/structure/closet/crate/chest/crate, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"bPb" = ( +/obj/machinery/light/rogue/torchholder{ + pixel_x = 32 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"bPp" = ( +/obj/structure/rack/rogue, +/obj/item/keyring/dungeoneer, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/cell) +"bPq" = ( +/obj/structure/mineral_door/wood/fancywood{ + lockid = "nightmaiden"; + name = "bedroom" + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"bPr" = ( +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/obj/structure/bars/pipe{ + dir = 8; + icon_state = "pipe" + }, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"bPA" = ( +/obj/structure/closet/crate/chest/old_crate, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/town/hamlet) +"bQg" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"bQk" = ( +/obj/structure/table/wood{ + icon_state = "tablewood1" + }, +/obj/item/roguekey/manor, +/obj/item/roguekey/manor, +/obj/item/candle/yellow/lit, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/outdoors/exposed/under/basement) +"bQv" = ( +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/outdoors/rtfield/spooky) +"bQF" = ( +/obj/structure/fluff/railing/border{ + dir = 9; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/exposed/manorgarri) +"bQG" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/garrison) +"bQX" = ( +/obj/structure/flora/roguetree, +/obj/structure/fluff/walldeco/vinez/l{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"bQY" = ( +/obj/structure/fluff/walldeco/bath/seven, +/turf/open/floor/rogue/tile/bath, +/area/rogue/indoors/town/bath/redhouse) +"bRv" = ( +/obj/structure/roguemachine/musicbox, +/turf/open/floor/carpet/royalblack, +/area/rogue/under/town/basement) +"bRB" = ( +/obj/structure/closet/crate/roguecloset/inn, +/obj/item/clothing/cloak/raincloak/red, +/obj/item/clothing/shoes/roguetown/ridingboots, +/obj/item/clothing/cloak/raincloak/furcloak/black, +/obj/item/storage/belt/rogue/pouch/coins/mid, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"bRT" = ( +/obj/structure/roguewindow/openclose, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/tavern/saiga) +"bSj" = ( +/obj/effect/spawner/roguemap/treeorstump, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"bSm" = ( +/obj/structure/closet/dirthole/closed/loot, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"bSK" = ( +/obj/item/clothing/head/peaceflower{ + anchored = 1; + pixel_y = 7 + }, +/obj/structure/table/wood/reinforced_alt{ + name = "altar of Beauty" + }, +/turf/open/floor/rogue/sandstone, +/area/rogue/indoors/town/church/chapel) +"bSY" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"bTg" = ( +/obj/effect/spawner/roguemap/sewerencounter, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"bTt" = ( +/obj/structure/mineral_door/wood/donjon/stone{ + locked = 1; + lockid = "manor"; + name = "armory" + }, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"bTC" = ( +/obj/effect/decal/cleanable/blood_neu/tracks, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"bTD" = ( +/turf/closed/wall/mineral/rogue/wooddark/end{ + dir = 1; + icon_state = "endwooddark" + }, +/area/rogue/indoors/town/shop) +"bTN" = ( +/turf/open/water/river, +/area/rogue/outdoors/river) +"bTR" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"bUh" = ( +/obj/structure/table/wood{ + dir = 1; + icon_state = "longtable" + }, +/obj/item/rogueweapon/knife/cleaver, +/turf/open/floor/rogue/tile/checker, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"bUr" = ( +/obj/structure/closet/crate/chest/neu, +/obj/effect/decal/cleanable/dirt/cobweb, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town) +"bUx" = ( +/obj/item/trash/applecore, +/obj/item/neuFarm/seed/apple, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"bVo" = ( +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/rope/chain, +/obj/item/rope/chain, +/obj/item/rope/chain, +/obj/item/rope, +/obj/item/rope, +/obj/item/rope, +/turf/open/floor/rogue/church, +/area/rogue/under/town/basement) +"bVB" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/suit/roguetown/shirt/dress/gen/blue, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"bVR" = ( +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"bWa" = ( +/obj/structure/mineral_door/wood{ + lockid = "doctor" + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/town/basement) +"bWp" = ( +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/cell) +"bWx" = ( +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/obj/item/mortar{ + pixel_y = 5 + }, +/obj/structure/table/wood/reinforced, +/obj/item/pestle{ + pixel_y = 7 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"bWE" = ( +/obj/effect/decal/remains/human/old, +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/rtfield/plague_district) +"bWG" = ( +/turf/open/water/swamp/deep, +/area/rogue/outdoors/rtfield/hamlet) +"bWN" = ( +/obj/structure/fluff/railing/stonehedge{ + icon_state = "stonehedge_aged" + }, +/obj/structure/fluff/railing/stonehedge{ + dir = 4; + icon_state = "stonehedge_aged" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"bWO" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 8; + icon_state = "torchwall1" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"bXs" = ( +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"bXD" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 6 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"bXH" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/church) +"bXK" = ( +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/shelter/bog) +"bXV" = ( +/obj/structure/fermenting_barrel/random/water, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors) +"bYg" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/clothing/cloak/raincloak/mortus, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) +"bYt" = ( +/obj/structure/fluff/walldeco/vinez/r, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"bYu" = ( +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"bYz" = ( +/obj/effect/decal/turfedge_neu/rockalt_edge, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"bZQ" = ( +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/soilsons) +"bZV" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"caK" = ( +/obj/machinery/light/rogue/wallfire{ + pixel_y = -21 + }, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town) +"caY" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/mace/cudgel, +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/garrison) +"cce" = ( +/obj/structure/stairs{ + dir = 8; + icon_state = "stairs" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"ccp" = ( +/obj/structure/flora/rogueflower/lavendergrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/spooky) +"ccI" = ( +/obj/structure/table/wood/reinf_long, +/obj/item/paper/scroll, +/obj/item/storage/box/matches, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/shop) +"ccX" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"cdd" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/landmark/start/mercenary, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/tavern/saiga) +"cdi" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"ced" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/cell) +"ces" = ( +/obj/structure/flora/roguegrass, +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"cey" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/machinery/light/rogue/torchholder{ + pixel_y = -32 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"ceG" = ( +/obj/effect/spawner/roguemap/loot/common, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"ceL" = ( +/obj/item/reagent_containers/glass/bucket/wooden, +/turf/open/floor/rogue/rooftop{ + dir = 1 + }, +/area/rogue/outdoors/town/roofs) +"ceT" = ( +/obj/machinery/light/rogue/wallfire/candle/weak/r, +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/tavern/saiga) +"cfh" = ( +/obj/structure/flora/roguegrass, +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"cfr" = ( +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/exposed/manorgarri) +"cfD" = ( +/obj/effect/decal/cleanable/blood/splatter, +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"cfM" = ( +/obj/structure/rack/rogue/shelf/notdense{ + pixel_x = 32; + pixel_y = 30 + }, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/dwarfin) +"cgm" = ( +/obj/item/grown/log/tree/stick, +/turf/open/water/cleanshallow, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); + first_time_text = "CATACOMBS" + }) +"cgo" = ( +/obj/structure/table/wood/plain_alt, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/under/town/basement) +"cgH" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/exposed/manorgarri) +"che" = ( +/obj/structure/stairs/stone{ + dir = 1 + }, +/turf/open/floor/rogue/tile/masonic/single, +/area/rogue/indoors/town/magician) +"chx" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors) +"cio" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/statue/pillar, +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"ciw" = ( +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"ciJ" = ( +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"cjc" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/remains/wolf, +/obj/structure/fluff/walldeco/chains, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"cjj" = ( +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"cjz" = ( +/obj/structure/closet/dirthole/closed, +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"cjL" = ( +/turf/open/floor/rogue/oak, +/area/rogue) +"cjO" = ( +/obj/structure/closet/crate/roguecloset, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town) +"cke" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"ckf" = ( +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/obj/machinery/light/rogue/firebowl/standing, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"clF" = ( +/turf/closed/wall/shroud, +/area/rogue/outdoors/rtfield/plague_district) +"clK" = ( +/obj/machinery/light/rogue/wallfire{ + pixel_x = 32 + }, +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 8 + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town) +"cmB" = ( +/obj/structure/closet/dirthole/closed, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"cmQ" = ( +/obj/structure/table/wood{ + dir = 10; + icon_state = "tablewood2" + }, +/obj/item/natural/cloth, +/obj/item/needle/thorn, +/obj/item/rogueweapon/knife/villager, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"cmZ" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/ingot/iron, +/obj/item/ingot/iron, +/obj/item/ingot/iron, +/obj/item/ingot/copper, +/obj/item/ingot/copper, +/obj/item/ingot/copper, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"cnv" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/soilsons) +"cnF" = ( +/obj/structure/table/wood/reinf_long{ + dir = 8 + }, +/obj/item/keyring, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"cnQ" = ( +/obj/structure/ladder/earth, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/rtfield/hamlet) +"cpa" = ( +/obj/effect/decal/turfedge_neu, +/obj/structure/fluff/statue/gargoyle, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"cpC" = ( +/obj/effect/decal/cleanable/blood/gibs/up, +/obj/effect/decal/cleanable/blood/gibs/old, +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"cpI" = ( +/obj/structure/flora/roguetree, +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"cpM" = ( +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/town/tailor) +"cqj" = ( +/turf/closed/mineral/rogue, +/area/rogue/under/town/caverogue/saltmine) +"cqo" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/reagent_containers/glass/cup/wooden, +/obj/item/reagent_containers/glass/cup/wooden, +/obj/item/reagent_containers/glass/cup/wooden, +/obj/item/reagent_containers/glass/cup/wooden, +/obj/effect/spawner/roguemap/alcohol, +/obj/effect/spawner/roguemap/alcohol, +/obj/effect/spawner/roguemap/alcohol, +/obj/effect/spawner/roguemap/alcohol, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors) +"cqy" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/decal/turfedge_neu/road{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"crc" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/reagent_containers/food/snacks/rogue/meat/bacon, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/powder/salt, +/obj/item/reagent_containers/food/snacks/fat, +/obj/item/reagent_containers/food/snacks/fat, +/obj/item/reagent_containers/food/snacks/fat, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/powder/salt, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"crh" = ( +/obj/structure/bars/grille, +/turf/open/transparent/openspace, +/area/rogue/indoors/shelter/town/sargoth) +"csF" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/entrance{ + first_time_text = "Rockhamlet" + }) +"csS" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/outdoors/exposed/under/basement) +"cte" = ( +/obj/structure/roguemachine/balloon_pad, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/outdoors/town/roofs) +"ctX" = ( +/turf/closed/mineral/rogue/bedrock, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"cuW" = ( +/turf/closed/mineral/random/rogue/med, +/area/rogue/under/cave/abandoned_mine) +"cvj" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road, +/obj/effect/decal/turfedge_neu/road{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"cvO" = ( +/obj/structure/flora/roguegrass, +/obj/item/roguebin, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"cwF" = ( +/obj/structure/stairs{ + dir = 1 + }, +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/town/roofs) +"cwI" = ( +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/shop) +"cwL" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 9 + }, +/obj/structure/fluff/walldeco/innsign/saiga, +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/exposed/town/hamlet) +"cwV" = ( +/obj/item/natural/bundle/stick, +/obj/item/natural/stone, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/boggish) +"cxa" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/manorgarri) +"cxi" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"cxQ" = ( +/obj/structure/fermenting_barrel/random, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"cya" = ( +/obj/structure/bars/pipe{ + dir = 1 + }, +/obj/machinery/light/rogue/wallfire/candle/l{ + pixel_y = 28 + }, +/turf/open/floor/rogue/tile/bath, +/area/rogue/indoors/town/bath/redhouse) +"cyt" = ( +/obj/structure/fluff/statue/myth, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/town/hamlet) +"czh" = ( +/obj/item/natural/stone, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"czi" = ( +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"czR" = ( +/turf/closed/wall/mineral/rogue/stonebrick, +/area/rogue/indoors/town/tavern/saiga) +"czT" = ( +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/indoors/town) +"cAw" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 1 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/manorgarri) +"cAL" = ( +/turf/open/water/swamp, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"cAR" = ( +/obj/structure/closet/crate/drawer/random, +/turf/open/floor/rogue/carpet/green, +/area/rogue/indoors/town/tavern/saiga) +"cBj" = ( +/obj/structure/fluff/statue/femalestatue{ + density = 1; + desc = "Some say its depicting Eora after a bath."; + icon_state = "12"; + pixel_y = 3 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/bath/redhouse) +"cBk" = ( +/obj/structure/chair/wood/rogue/chair_noble/red, +/obj/machinery/light/rogue/wallfire/candle{ + pixel_y = -64 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"cCc" = ( +/obj/structure/bed/rogue/wool, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"cCk" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"cCm" = ( +/obj/structure/table/wood{ + dir = 10; + icon_state = "tablewood2" + }, +/obj/item/candle/yellow, +/obj/item/keyring/blacksmith, +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"cCn" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"cCq" = ( +/obj/structure/bars/pipe{ + dir = 5; + icon_state = "pipe" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"cCw" = ( +/obj/item/clothing/neck/roguetown/psycross/silver/astrata, +/obj/structure/rack/rogue, +/obj/structure/fluff/walldeco/wallshield{ + pixel_y = 32 + }, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/vault) +"cCE" = ( +/turf/closed/wall/mineral/rogue/wooddark/window, +/area/rogue/outdoors/exposed/under/basement) +"cCJ" = ( +/obj/structure/fluff/walldeco/chains, +/turf/open/floor/rogue/oak/broken, +/area/rogue/indoors/town/cell) +"cCP" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/sandstone/shaded, +/area/rogue/indoors/town/church/chapel) +"cDx" = ( +/obj/structure/table/wood/reinforced_alt{ + dir = 1 + }, +/obj/structure/bars/alt, +/obj/structure/fluff/walldeco/bath/wallrope, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/bath/redhouse) +"cDD" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fluff/railing/wood{ + dir = 8; + icon_state = "woodrailing"; + pixel_y = -1 + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"cEi" = ( +/turf/closed/wall/mineral/rogue/wood, +/area/rogue/outdoors/river) +"cEq" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church/chapel) +"cEy" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1 + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"cFW" = ( +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"cGe" = ( +/obj/structure/bed/rogue/mediocre{ + name = "apprentice bedding" + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town) +"cGj" = ( +/obj/item/reagent_containers/glass/bucket/wooden/alter, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"cGL" = ( +/obj/structure/closet/crate/roguecloset, +/obj/item/reagent_containers/powder/spice, +/obj/effect/decal/cleanable/dirt/cobweb{ + icon_state = "cobweb2" + }, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/shop) +"cHm" = ( +/obj/structure/mineral_door/bars{ + locked = 1; + lockid = "sheriff" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/garrison) +"cHB" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"cHD" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 9 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"cHZ" = ( +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/obj/structure/closet/crate/chest/crate, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/rogue/instrument/accord, +/turf/open/floor/rogue/tile/masonic/single, +/area/rogue/indoors/town/magician) +"cIL" = ( +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/obj/item/reagent_containers/food/snacks/meat/rawbacon, +/obj/item/reagent_containers/food/snacks/meat/rawbacon, +/obj/structure/closet/crate/chest/neu, +/obj/item/reagent_containers/powder/salt, +/obj/item/reagent_containers/powder/salt, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"cIP" = ( +/obj/structure/plough, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"cJy" = ( +/obj/effect/decal/remains/wolf, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"cKB" = ( +/obj/structure/rack/rogue, +/obj/item/reagent_containers/glass/bottle/rogue/wine, +/obj/item/reagent_containers/glass/bottle/rogue/wine/sourwine{ + pixel_x = -10 + }, +/obj/item/reagent_containers/glass/bottle/rogue/whitewine{ + pixel_x = 10 + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/basement) +"cKT" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/mace/goden/neu, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/garrison) +"cLh" = ( +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/woodturned/nosmooth, +/area/rogue/indoors/town/shop) +"cLS" = ( +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"cNg" = ( +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"cNt" = ( +/obj/structure/table/wood/reinforced_alt, +/obj/structure/mineral_door/wood/deadbolt/shutter{ + dir = 4 + }, +/turf/open/floor/rogue/ruinedwood, +/area/rogue/indoors/town/tavern/saiga) +"cNZ" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/sandstone/shaded, +/area/rogue/indoors/town/church/chapel) +"cOe" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/polearm/halberd/neu, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"cOl" = ( +/obj/effect/landmark/start/steward{ + dir = 1 + }, +/turf/open/floor/rogue/carpet/lord/left, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"cPt" = ( +/obj/effect/decal/turfedge_neu{ + dir = 4 + }, +/obj/machinery/light/rogue/firebowl/stump, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"cPH" = ( +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/dwarfin) +"cQn" = ( +/obj/structure/table/wood{ + dir = 10; + icon_state = "tablewood2" + }, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/mountains) +"cQr" = ( +/obj/structure/table/wood/plain_alt, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"cRp" = ( +/obj/structure/closet/crate/chest/neu_fancy, +/obj/structure/rogue/trophy/deer, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"cRV" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/soilsons) +"cSb" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/church) +"cSd" = ( +/obj/structure/table/vtable, +/obj/structure/mirror/alt, +/obj/item/rogueweapon/knife/dagger/steel{ + pixel_x = 10; + pixel_y = 6 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"cSj" = ( +/obj/structure/mineral_door/wood/fancywood{ + locked = 1; + lockid = "elder"; + name = "mayor's House" + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors) +"cSp" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"cTr" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/candle/yellow/lit/infinite/strong, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"cTv" = ( +/turf/closed/wall/mineral/rogue/wooddark/vertical, +/area/rogue/indoors/town/tavern/saiga) +"cTF" = ( +/obj/structure/fermenting_barrel/water, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/church) +"cTL" = ( +/obj/machinery/light/rogue/wallfire{ + pixel_x = -32 + }, +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 4 + }, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/tailor) +"cUd" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/landmark/start/farmer{ + dir = 4 + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/soilsons) +"cUw" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"cVv" = ( +/obj/structure/rack/rogue/shelf/notdense{ + pixel_x = 64; + pixel_y = 25 + }, +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/shelter/rtfield) +"cVA" = ( +/turf/open/floor/rogue/dirt/ambush, +/area/rogue/outdoors/rtfield/outlaw) +"cVF" = ( +/obj/item/natural/worms, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"cWm" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 9 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"cWr" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"cXq" = ( +/obj/structure/fluff/walldeco/feldshersign{ + desc = "An arrow under the sign points down the steps to the basement."; + pixel_x = 32; + pixel_y = 0 + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/exposed/town/hamlet) +"cXO" = ( +/obj/structure/stairs/stone, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/under/basement) +"cYJ" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1 + }, +/obj/structure/fluff/walldeco/vinez{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"cYR" = ( +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/outdoors/exposed/under/basement) +"cZj" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 9; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop/green{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"cZq" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/sandstone/shaded, +/area/rogue/indoors/town/church/chapel) +"cZs" = ( +/turf/closed/mineral/random/rogue/med, +/area/rogue/under/cave) +"cZz" = ( +/obj/structure/flora/rock/pile, +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"cZM" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/under/town/basement) +"daD" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/glass/cup/golden{ + pixel_x = 1; + pixel_y = 7 + }, +/turf/open/floor/rogue/carpet/lord/right, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"dbJ" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"dbN" = ( +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern/saiga) +"dbV" = ( +/obj/effect/decal/cleanable/blood/footprints, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"dcb" = ( +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/bath/redhouse) +"dda" = ( +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/town/church) +"ddk" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/obj/effect/landmark/start/villager, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"dds" = ( +/mob/living/simple_animal/pet/cat/rogue/cabbit, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"dek" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/fluff/statue/knight, +/turf/open/floor/rogue/tile{ + icon_state = "chess" + }, +/area/rogue/outdoors/exposed/under/basement) +"dex" = ( +/obj/effect/sunlight, +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"deO" = ( +/obj/structure/fluff/railing/fence{ + dir = 8; + icon_state = "fence" + }, +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"dfi" = ( +/obj/structure/table/wood/large/corner_blue{ + dir = 6 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/bath/redhouse) +"dfy" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"dfC" = ( +/obj/machinery/light/rogue/torchholder/c{ + pixel_x = 32 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/garrison) +"dfU" = ( +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 1 + }, +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/church) +"dgl" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 4 + }, +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"dgm" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/statue/gargoyle, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"dgp" = ( +/obj/structure/table/wood/treestump, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"dgN" = ( +/obj/item/storage/belt/rogue/pouch, +/obj/item/roguecoin/silver, +/turf/open/floor/rogue/dirt/ambush, +/area/rogue/outdoors/rtfield/outlaw) +"dgP" = ( +/turf/open/floor/rogue/twig, +/area/rogue/indoors/soilsons) +"dht" = ( +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/alch/swampdust, +/obj/item/alch/tobaccodust, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"dhF" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle{ + dir = 1 + }, +/area/rogue/indoors/town) +"dia" = ( +/obj/structure/chair/bench/couch/redleft, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"dir" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 8 + }, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/outdoors/exposed/under/basement) +"djj" = ( +/obj/item/natural/worms/leeches, +/obj/item/natural/worms/leeches{ + pixel_x = 7; + pixel_y = -8 + }, +/obj/item/natural/worms/leeches{ + pixel_x = -14; + pixel_y = -7 + }, +/turf/open/water/sewer, +/area/rogue/under/town/basement) +"djR" = ( +/obj/structure/table/vtable/v2, +/obj/item/natural/feather, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"dln" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 4 + }, +/obj/effect/decal/turfedge_neu/mossy_small, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/manorgarri) +"dlu" = ( +/obj/structure/table/wood{ + dir = 10; + icon_state = "tablewood2" + }, +/obj/item/natural/cloth, +/obj/item/natural/cloth, +/obj/item/candle/yellow/lit/infinite, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/shelter/mountains) +"dmx" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 10 + }, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"dmy" = ( +/obj/structure/fluff/walldeco/vinez/offset{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"dnb" = ( +/obj/structure/fluff/walldeco/vinez/l{ + dir = 4 + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"dns" = ( +/obj/structure/table/vtable/v2, +/obj/item/candle/yellow/lit/infinite{ + pixel_x = 8; + pixel_y = 7 + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/bath/redhouse) +"doi" = ( +/obj/structure/flora/roguegrass, +/obj/machinery/light/rogue/firebowl/stump, +/obj/effect/decal/turfedge_neu/road{ + dir = 5 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"doU" = ( +/obj/structure/fluff/statue/knight/interior, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"dpg" = ( +/obj/structure/bars, +/turf/open/water/sewer, +/area/rogue/under/town/basement) +"dpv" = ( +/obj/structure/flora/roguetree, +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"drr" = ( +/obj/machinery/light/rogue/wallfire/candle, +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) +"drK" = ( +/obj/structure/closet/crate/roguecloset/dark, +/obj/item/clothing/cloak/raincloak/blue, +/obj/item/clothing/mask/cigarette/pipe/westman, +/obj/item/clothing/shoes/roguetown/sandals, +/obj/effect/decal/cleanable/dirt/cobweb, +/obj/item/clothing/suit/roguetown/shirt/robe/magus, +/obj/item/clothing/suit/roguetown/shirt/robe/mage, +/turf/open/floor/rogue/tile/masonic/single, +/area/rogue/indoors/town/magician) +"drL" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/obj/structure/fermenting_barrel/random/beer, +/obj/effect/decal/cleanable/dirt/cobweb{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/cobweb, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"drT" = ( +/obj/structure/fluff/walldeco/vinez, +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/indoors) +"dsq" = ( +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); + first_time_text = "CATACOMBS" + }) +"dsB" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"dsK" = ( +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/manorgarri) +"dsM" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/reagent_containers/food/snacks/rogue/fryfish/eel, +/obj/item/reagent_containers/food/snacks/rogue/fryfish/eel, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/shelter/bog) +"dsO" = ( +/obj/structure/handcart, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"dsW" = ( +/obj/structure/mineral_door/wood/donjon{ + dir = 1; + locked = 1 + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"dtl" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle{ + dir = 8 + }, +/area/rogue/indoors/town/tavern) +"dty" = ( +/obj/structure/flora/rock/pile, +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"dub" = ( +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/magician) +"duq" = ( +/obj/structure/fluff/buysign{ + desc = "TUNNEL CLOSED" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"duv" = ( +/obj/structure/mineral_door/wood/donjon{ + dir = 8; + locked = 1; + lockid = "dungeon" + }, +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/cell) +"duF" = ( +/obj/structure/flora/roguegrass/bush_meagre, +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"duO" = ( +/obj/effect/spawner/roguemap/treeorbush, +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 6 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"dvp" = ( +/obj/structure/rack/rogue, +/obj/item/quiver/bolts, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/garrison) +"dvI" = ( +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/indoors/town/garrison) +"dwg" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/suit/roguetown/shirt/dress/gen/black, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"dwk" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 6 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"dwx" = ( +/obj/structure/bars, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"dwS" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/rogueflower/ppflowers, +/obj/machinery/light/rogue/wallfire/candle/r, +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/indoors/town/church/chapel) +"dxk" = ( +/turf/open/transparent/openspace, +/area/rogue/outdoors/exposed/under/basement) +"dxA" = ( +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/town/roofs) +"dxB" = ( +/obj/item/reagent_containers/glass/bucket/wooden/alter, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/exposed/town/hamlet) +"dxF" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/stairs{ + dir = 1 + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "horzw" + }, +/area/rogue/indoors/town/church) +"dxL" = ( +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"dxW" = ( +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/cell) +"dyu" = ( +/obj/item/candle/yellow/lit/infinite{ + pixel_x = -8; + pixel_y = 16 + }, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/indoors/town/magician) +"dzz" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/obj/effect/landmark/start/villager, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"dzE" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/landmark/start/sheriff{ + dir = 4 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/garrison) +"dzP" = ( +/obj/effect/spawner/roguemap/treeorbush, +/obj/effect/decal/turfedge_neu/road{ + dir = 6 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"dzZ" = ( +/obj/structure/flora/rock/pile, +/obj/item/natural/stone, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave) +"dAb" = ( +/obj/structure/flora/roguegrass/water/reeds, +/turf/open/water/swamp/deep, +/area/rogue/under/catacombs/dwarfoutpost) +"dAc" = ( +/turf/open/floor/rogue/metal, +/area/rogue/under/town/sewer) +"dAV" = ( +/obj/structure/fluff/clodpile, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"dBF" = ( +/obj/structure/bars/pipe, +/turf/open/floor/rogue/rooftop/green{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"dBO" = ( +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/vault) +"dCj" = ( +/obj/structure/fluff/walldeco/masonflag{ + pixel_y = 32 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/shelter/town/sargoth) +"dDf" = ( +/obj/structure/giantfur/small, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/tavern/saiga) +"dDA" = ( +/obj/structure/fermenting_barrel, +/obj/effect/decal/cleanable/dirt/cobweb, +/turf/open/floor/rogue/cobblerock, +/area/rogue/indoors/town/garrison) +"dDV" = ( +/obj/structure/fluff/walldeco/bath/five{ + pixel_x = -29 + }, +/turf/open/floor/rogue/tile/bath, +/area/rogue/indoors/town/bath/redhouse) +"dEb" = ( +/obj/structure/table/wood/large/corner_new{ + dir = 6 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors) +"dEh" = ( +/turf/open/water/bath/pool, +/area/rogue/indoors/town/bath/redhouse) +"dEn" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/railing/stonehedge{ + dir = 4 + }, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"dEv" = ( +/obj/structure/rack/rogue, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/garrison) +"dEz" = ( +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"dEH" = ( +/turf/open/water/river{ + dir = 4 + }, +/area/rogue/outdoors/river) +"dEO" = ( +/obj/structure/table/wood/treestump{ + pixel_x = -7 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"dFd" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"dFD" = ( +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"dFG" = ( +/obj/structure/mineral_door/bars{ + locked = 1; + lockid = "butcher" + }, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town) +"dFW" = ( +/obj/structure/roguemachine/scomm{ + pixel_y = 0 + }, +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/outdoors/exposed/town/hamlet) +"dGK" = ( +/obj/structure/chair/wood/rogue/chair_noble, +/obj/effect/landmark/start/consort, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"dHw" = ( +/obj/structure/flora/roguetree/burnt, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"dIj" = ( +/turf/closed/wall/mineral/rogue/wooddark/end{ + dir = 4; + icon_state = "endwooddark" + }, +/area/rogue/indoors/shelter/mountains) +"dJa" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 8; + icon_state = "torchwall1" + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/shelter/town/sargoth) +"dJH" = ( +/obj/structure/roguetent, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"dJI" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"dJZ" = ( +/turf/closed/wall/mineral/rogue/stone/window/moss, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"dKI" = ( +/turf/open/floor/rogue/grass, +/area/rogue/indoors) +"dLn" = ( +/turf/closed/mineral/random/rogue/high, +/area/rogue/under/cave/abandoned_mine) +"dLw" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1 + }, +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass/bush_meagre, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"dLB" = ( +/turf/open/floor/rogue/rooftop{ + dir = 1 + }, +/area/rogue) +"dLG" = ( +/obj/structure/table/wood{ + dir = 10; + icon_state = "tablewood2" + }, +/obj/item/toy/cards/deck, +/obj/effect/spawner/roguemap/alcohol/wine, +/obj/item/clothing/mask/cigarette/rollie/nicotine{ + pixel_x = -7; + pixel_y = -7 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"dMe" = ( +/mob/living/simple_animal/pet/cat/rogue/inn, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/tavern/saiga) +"dMl" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/storage/belt/rogue/pouch/coins/poor, +/obj/item/storage/belt/rogue/leather/rope, +/obj/item/clothing/shoes/roguetown/boots/leather, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"dMo" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 1 + }, +/area/rogue/indoors/town/tavern) +"dNW" = ( +/turf/open/floor/rogue/herringbone, +/area/rogue/under/town/basement) +"dOa" = ( +/obj/structure/roguemachine/drugmachine{ + pixel_y = -6 + }, +/turf/closed/wall/mineral/rogue/stonebrick/reddish, +/area/rogue/indoors/town/bath/redhouse) +"dOe" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/mountains) +"dOi" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"dOk" = ( +/obj/structure/table/wood/reinforced_alt{ + name = "altar of Inspiration" + }, +/obj/item/rogue/instrument/flute{ + anchored = 1 + }, +/turf/open/floor/rogue/sandstone, +/area/rogue/indoors/town/church/chapel) +"dOs" = ( +/obj/item/roguebin/water/gross, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/shop) +"dOJ" = ( +/obj/effect/landmark/start/servant{ + dir = 1 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"dOQ" = ( +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town) +"dPF" = ( +/obj/structure/closet/dirthole/closed/loot, +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"dPM" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"dPQ" = ( +/obj/structure/closet/dirthole/closed/loot, +/obj/structure/gravemarker, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"dPS" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/mountains) +"dQg" = ( +/obj/item/chair/stool/bar/rogue/crafted, +/obj/structure/roguemachine/vendor/inn_hamlet{ + density = 0; + pixel_y = -32 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern/saiga) +"dQn" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/rogue/instrument/lute, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"dQE" = ( +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/shop) +"dRf" = ( +/obj/structure/fireaxecabinet{ + pixel_x = -16; + pixel_y = 32 + }, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"dSD" = ( +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/shop) +"dSQ" = ( +/obj/structure/stairs{ + dir = 8; + icon_state = "stairs" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/town/roofs) +"dST" = ( +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"dTc" = ( +/obj/structure/chair/stool/rogue, +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"dTD" = ( +/obj/structure/bars/cemetery, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"dTE" = ( +/obj/structure/fluff/walldeco/med3{ + pixel_y = -32 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"dTX" = ( +/obj/structure/lever/wall{ + dir = 8; + redstone_id = "donjon" + }, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/manorgarri) +"dUc" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/railing/stonehedge{ + dir = 4; + icon_state = "stonehedge5" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"dUz" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/obj/item/natural/feather, +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"dUL" = ( +/turf/open/floor/rogue/sandstone/shaded, +/area/rogue/indoors/town/church/chapel) +"dVd" = ( +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/soilsons) +"dVh" = ( +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church/chapel) +"dVl" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"dVw" = ( +/obj/structure/table/wood/plain, +/turf/open/floor/rogue/cobblerock, +/area/rogue/indoors/town/garrison) +"dVD" = ( +/obj/item/natural/cloth, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"dVU" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/outdoors/exposed/under/basement) +"dWc" = ( +/turf/open/floor/rogue/rooftop/green{ + dir = 1 + }, +/area/rogue/outdoors/exposed/manorgarri) +"dWm" = ( +/turf/open/water/bath/pool/mid, +/area/rogue/indoors/town/bath/redhouse) +"dWu" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/twig, +/area/rogue/under/town/basement) +"dXa" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/manorgarri) +"dXj" = ( +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass/bush_meagre, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"dXk" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/kitchen/spoon/plastic{ + pixel_x = 9; + pixel_y = 4 + }, +/obj/structure/rack/rogue/shelf/notdense, +/obj/item/reagent_containers/peppermill{ + pixel_y = 30 + }, +/obj/item/rogueweapon/mace/woodclub/rollingpin{ + pixel_x = -3; + pixel_y = 2 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"dXl" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/soilsons) +"dXv" = ( +/obj/structure/fluff/customsign, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"dXB" = ( +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"dXC" = ( +/obj/structure/bed/rogue/hay, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/soilsons) +"dXN" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/river) +"dXV" = ( +/obj/structure/fluff/railing/border, +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"dYM" = ( +/obj/item/roguebin/water/gross, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"dZd" = ( +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/town) +"dZq" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"dZv" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 4; + icon_state = "torchwall1" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/town/roofs) +"eai" = ( +/obj/machinery/light/rogue/hearth, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors) +"eap" = ( +/obj/structure/bars/passage/shutter/open{ + redstone_id = "stewardshutter" + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town) +"eaC" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"eaT" = ( +/obj/structure/bed/rogue/shit, +/obj/effect/decal/cleanable/blood, +/obj/item/natural/cloth, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"ebb" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/landmark/start/vagrant, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"ebw" = ( +/obj/structure/table/wood/large/corner_new{ + dir = 8 + }, +/obj/item/rogueweapon/whip{ + pixel_x = 5; + pixel_y = 14 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/cell) +"ebE" = ( +/obj/effect/decal/remains/human/old, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/plague_district) +"ebW" = ( +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/town/shop) +"ecu" = ( +/obj/item/grown/log/tree/small, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"ecw" = ( +/obj/structure/bars/pipe{ + dir = 9; + icon_state = "pipe" + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/dwarf) +"ecO" = ( +/obj/structure/table/wood{ + dir = 1; + icon_state = "longtable" + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"ecZ" = ( +/turf/open/floor/rogue/blocks/paving, +/area/rogue/indoors/town/bath/redhouse) +"edc" = ( +/obj/item/paper/confession, +/obj/item/paper/confession, +/obj/item/paper/confession, +/obj/item/paper/confession, +/obj/item/paper/confession, +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/natural/feather, +/turf/open/floor/rogue/church, +/area/rogue/under/town/basement) +"edB" = ( +/obj/structure/fluff/railing/border{ + dir = 9; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"edG" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop/green{ + dir = 4 + }, +/area/rogue/outdoors/exposed/manorgarri) +"edL" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/boggish) +"edO" = ( +/obj/item/grown/log/tree/small, +/obj/effect/landmark/start/beastmonger{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"edR" = ( +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue) +"eeE" = ( +/obj/structure/bars/passage{ + redstone_id = "donjon" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"eeH" = ( +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/bars/pipe{ + dir = 10; + icon_state = "pipe" + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/outdoors/exposed/under/basement) +"eeK" = ( +/obj/effect/decal/cleanable/dirt/cobweb{ + icon_state = "cobweb2" + }, +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/indoors/town) +"efH" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"egc" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/obj/machinery/light/rogue/torchholder{ + dir = 8; + icon_state = "torchwall1" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"egz" = ( +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/tavern/saiga) +"egU" = ( +/obj/structure/fluff/statue/pillar{ + dir = 1; + name = "shaft"; + pixel_x = 12; + pixel_y = 13 + }, +/turf/open/transparent/openspace, +/area/rogue) +"ehg" = ( +/obj/item/reagent_containers/glass/bottle/rogue/beer/stonebeardreserve, +/obj/item/reagent_containers/glass/bottle/rogue/beer/voddena{ + pixel_x = 10 + }, +/obj/item/reagent_containers/glass/bottle/rogue/beer/ratkept{ + pixel_x = -10 + }, +/obj/structure/rack/rogue, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/basement) +"ehQ" = ( +/obj/structure/chair/stool/rogue, +/obj/item/storage/belt/rogue/leather/rope, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"ehS" = ( +/obj/structure/fluff/statue/knightalt/r, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/under/basement) +"eia" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town) +"eio" = ( +/obj/structure/table/wood/large/corner_new{ + dir = 10 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors) +"eiu" = ( +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/church) +"eiG" = ( +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"ejm" = ( +/obj/item/candle/yellow/lit/infinite{ + pixel_x = 8; + pixel_y = 16 + }, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/indoors/town/magician) +"ejD" = ( +/obj/machinery/light/rogue/wallfire/candle/weak/l, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town) +"ejJ" = ( +/obj/structure/bars/pipe{ + dir = 8; + icon_state = "pipe" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"ejK" = ( +/obj/machinery/light/rogue/wallfire{ + pixel_x = 32 + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/under/town/basement) +"ejQ" = ( +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/under/town/basement) +"ejS" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/obj/effect/landmark/start/prince, +/turf/open/floor/rogue/tile/masonic/single, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"ekn" = ( +/obj/structure/mineral_door/bars{ + locked = 1; + lockid = "garrison" + }, +/obj/effect/decal/turfedge_neu/alt{ + dir = 5 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town/cell) +"ekI" = ( +/obj/structure/table/wood/reinforced_alt{ + dir = 4 + }, +/turf/open/floor/rogue/tile/masonic/single, +/area/rogue/indoors/town/dwarfin) +"ekN" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle{ + dir = 4 + }, +/area/rogue/indoors/town) +"ekO" = ( +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/shelter/town/sargoth) +"ela" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"elo" = ( +/turf/closed/wall/mineral/rogue/stone/window/moss, +/area/rogue/outdoors/exposed/under/basement) +"elw" = ( +/obj/structure/flora/roguegrass, +/obj/structure/mineral_door/bars, +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/turf/open/floor/rogue/grass, +/area/rogue/indoors/town) +"elF" = ( +/obj/item/restraints/legcuffs/beartrap/armed/camouflage, +/obj/effect/landmark/ambush, +/turf/open/floor/rogue/dirt/ambush, +/area/rogue/outdoors/rtfield/outlaw) +"elL" = ( +/obj/structure/chair/wood/rogue{ + dir = 8; + icon_state = "chair2" + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town) +"elO" = ( +/obj/structure/bed/rogue/wooldouble, +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/obj/item/reagent_containers/glass/bottle/rogue/wine, +/obj/item/bedsheet/rogue/double_pelt, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"emc" = ( +/turf/open/floor/rogue/ruinedwood, +/area/rogue/outdoors/rtfield/hamlet) +"emS" = ( +/obj/structure/fluff/clock/dense, +/obj/machinery/light/rogue/wallfire/candle/weak, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town) +"eny" = ( +/obj/structure/stairs{ + dir = 4 + }, +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/town/roofs) +"eob" = ( +/obj/structure/closet/crate/chest/neu_iron, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"eoj" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/landmark/start/villager{ + dir = 4 + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"eoE" = ( +/obj/structure/flora/rock/pile, +/turf/open/water/swamp/deep, +/area/rogue/outdoors/rtfield/hamlet) +"eoL" = ( +/obj/effect/sunlight, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"eoN" = ( +/obj/structure/flora/roguegrass, +/obj/structure/roguerock, +/obj/effect/decal/turfedge_neu/road{ + dir = 5 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"epf" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fluff/railing/border, +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"epm" = ( +/obj/structure/closet/crate/chest/neu{ + lockid = "tavern"; + name = "cooks chest" + }, +/obj/item/clothing/under/roguetown/tights/green, +/obj/item/reagent_containers/food/snacks/produce/jacksberry/poison, +/obj/item/reagent_containers/food/snacks/produce/jacksberry/poison, +/obj/item/reagent_containers/food/snacks/produce/jacksberry/poison, +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/basement) +"epS" = ( +/obj/machinery/light/rogue/firebowl/stump, +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"epZ" = ( +/obj/structure/closet/crate/chest/neu_iron, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/garrison) +"eqm" = ( +/obj/structure/closet/crate/drawer, +/obj/structure/fluff/wallclock/r, +/obj/item/keyring/hand, +/obj/item/natural/cloth, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"eqM" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop/green{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"eqU" = ( +/obj/structure/rack/rogue{ + pixel_y = 16 + }, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/town/garrison) +"erb" = ( +/obj/structure/fluff/walldeco/bigpainting, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"erc" = ( +/obj/structure/fermenting_barrel, +/turf/open/floor/rogue/cobblerock, +/area/rogue/indoors/town/garrison) +"ert" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"erS" = ( +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/cell) +"esl" = ( +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"esm" = ( +/obj/effect/sunlight, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"etw" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"etB" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu, +/turf/closed/mineral/rogue, +/area/rogue/indoors/shelter/rtfield) +"eud" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 10 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"euk" = ( +/turf/open/floor/rogue/tile/masonic/single, +/area/rogue/indoors/town/magician) +"euy" = ( +/obj/structure/closet/dirthole/grave, +/obj/item/natural/worms, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"euA" = ( +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/obj/structure/rack/rogue, +/obj/item/gun/ballistic/revolver/grenadelauncher/crossbow, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"evd" = ( +/obj/machinery/light/rogue/firebowl/standing, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"evm" = ( +/obj/structure/bars/cemetery{ + plane = -2 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"evt" = ( +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/outdoors/rtfield/outlaw) +"evu" = ( +/obj/structure/roguetent, +/turf/open/floor/rogue/grass, +/area/rogue/indoors) +"evv" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/spooky) +"evX" = ( +/obj/item/natural/worms, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"ewn" = ( +/obj/item/rogueweapon/shovel/neu, +/obj/structure/rack/rogue, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"ewq" = ( +/obj/structure/table/wood/large/corner_new{ + dir = 6 + }, +/obj/item/burial_shroud, +/obj/item/burial_shroud, +/obj/item/storage/box/matches, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) +"ewN" = ( +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/carpet/green, +/area/rogue/indoors/town/tavern/saiga) +"ewT" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/obj/machinery/light/rogue/wallfire/candle/blue/r, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"exj" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/sellsign{ + name = "STONEHAMLET" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"exz" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"exA" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/church/chapel) +"exF" = ( +/obj/structure/bed/rogue/hay, +/obj/effect/decal/cleanable/blood_neu/random, +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/cell) +"eyi" = ( +/obj/structure/rack/rogue, +/obj/item/reagent_containers/glass/bottle/rogue/manapot, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/magician) +"eyx" = ( +/obj/structure/stairs{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"eyB" = ( +/obj/item/candle/yellow/lit/infinite{ + pixel_x = 8; + pixel_y = 5 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/bath/redhouse) +"eza" = ( +/obj/machinery/light/rogue/torchholder/r, +/turf/open/floor/carpet/royalblack, +/area/rogue/under/town/basement) +"ezb" = ( +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church/chapel) +"ezr" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 6 + }, +/obj/effect/decal/turfedge_neu/mossy_small, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/tavern/saiga) +"ezz" = ( +/obj/structure/stairs/stone, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"ezE" = ( +/obj/effect/decal/cleanable/vomit/old, +/turf/open/floor/rogue/twig, +/area/rogue/under/town/basement) +"ezG" = ( +/obj/structure/fluff/signage{ + desc = "Neatly written in precise blocky letters, probably by a dwarf."; + dir = 8; + name = "MOUNTAIN PATH" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"ezJ" = ( +/obj/effect/decal/remains/human/old/small, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/miasma, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"ezM" = ( +/obj/item/reagent_containers/glass/bottle/rogue/beer/spottedhen{ + pixel_x = -10 + }, +/obj/item/reagent_containers/glass/bottle/rogue/beer/blackgoat, +/obj/item/reagent_containers/glass/bottle/rogue/beer/hagwoodbitter{ + pixel_x = 10 + }, +/obj/structure/rack/rogue, +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/basement) +"ezU" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 8 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"eAd" = ( +/obj/structure/flora/roguegrass, +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"eAh" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguetree/burnt, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"eAq" = ( +/obj/structure/lever{ + redstone_id = "gatelava" + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"eAI" = ( +/obj/structure/chair/wood/rogue{ + dir = 8; + icon_state = "chair2" + }, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"eAM" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/neck/roguetown/chaincoif/iron{ + pixel_y = 3 + }, +/obj/item/clothing/suit/roguetown/armor/chainmail/iron{ + pixel_x = 4; + pixel_y = -2 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"eAR" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church/chapel) +"eAU" = ( +/obj/structure/bars/pipe{ + dir = 5; + icon_state = "pipe" + }, +/obj/structure/fluff/walldeco/vinez/l{ + dir = 10 + }, +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"eBg" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/exposed/church) +"eBr" = ( +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/mountains) +"eBB" = ( +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/naturalstone, +/area/rogue) +"eBG" = ( +/obj/structure/bookcase, +/obj/item/book/rogue/abyssor, +/obj/item/book/rogue/godofdreamsandnightmares, +/obj/item/book/rogue/noc, +/obj/item/book/rogue/xylix, +/obj/item/book/rogue/necra, +/obj/item/book/rogue/bookofpriests, +/obj/item/book/rogue/bibble, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/outdoors/exposed/under/basement) +"eBH" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/decal/remains/saiga, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"eBM" = ( +/turf/closed/wall/mineral/rogue/craftstone, +/area/rogue/under/town/basement) +"eCc" = ( +/obj/structure/table/wood/reinforced_alter, +/obj/item/clothing/shoes/roguetown/boots/leather{ + pixel_y = 8 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"eCq" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/suit/roguetown/armor/gambeson{ + pixel_y = -4 + }, +/obj/item/clothing/neck/roguetown/gorget{ + pixel_y = 5 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"eDh" = ( +/turf/open/floor/rogue/ruinedwood/turned, +/area/rogue/outdoors) +"eDG" = ( +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/plague_district) +"eDT" = ( +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"eDW" = ( +/obj/structure/roguewindow/openclose, +/turf/open/floor/rogue/wood, +/area/rogue/indoors/soilsons) +"eDZ" = ( +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/cell) +"eEa" = ( +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/under/town/caverogue{ + first_time_text = "DEEP MINESHAFT" + }) +"eEC" = ( +/obj/structure/flora/roguetree/burnt, +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"eED" = ( +/obj/effect/decal/cleanable/dirt/cobweb{ + dir = 4 + }, +/turf/open/floor/rogue/cobblerock, +/area/rogue/indoors/town/garrison) +"eEL" = ( +/obj/structure/mineral_door/wood/fancywood{ + lockid = "priest"; + name = "kitchen" + }, +/turf/open/floor/rogue/church, +/area/rogue/indoors/town/church) +"eEM" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"eEP" = ( +/obj/item/candle/yellow/lit/infinite{ + pixel_x = 8; + pixel_y = -5 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/bath/redhouse) +"eFD" = ( +/obj/effect/spawner/roguemap/loot/weapon, +/obj/effect/decal/cleanable/blood_neu/random, +/obj/effect/decal/remains/human/old, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"eFL" = ( +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/church, +/area/rogue/under/town/basement) +"eGm" = ( +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/rope, +/obj/item/book/rogue/sword, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/garrison) +"eGB" = ( +/obj/structure/fluff/psycross, +/turf/open/floor/rogue/church, +/area/rogue/under/town/basement) +"eGI" = ( +/obj/structure/stairs/stone{ + dir = 4; + icon_state = "stonestairs" + }, +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"eHh" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"eIh" = ( +/obj/structure/fluff/railing/fence, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/town/hamlet) +"eIz" = ( +/obj/item/natural/dirtclod, +/obj/structure/bars/weakened, +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"eJh" = ( +/obj/item/natural/stone, +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/caverogue{ + first_time_text = "DEEP MINESHAFT" + }) +"eJx" = ( +/turf/closed/wall/mineral/rogue/decostone/cand, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"eJH" = ( +/obj/structure/table/wood/large/corner_new{ + dir = 4 + }, +/obj/item/candle/skull/lit, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) +"eKx" = ( +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 8 + }, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"eKW" = ( +/obj/structure/fluff/statue/knight, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"eLe" = ( +/obj/structure/roguewindow/openclose{ + dir = 1; + icon_state = "woodwindowdir" + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "horzw" + }, +/area/rogue/indoors/soilsons) +"eLL" = ( +/obj/structure/fluff/walldeco/moon, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/magician) +"eLR" = ( +/obj/structure/table/wood{ + dir = 1; + icon_state = "longtable" + }, +/obj/item/reagent_containers/glass/bottle/rogue/wine{ + pixel_y = 9 + }, +/turf/open/floor/rogue/tile/masonic/inverted, +/area/rogue/indoors/town/magician) +"eMo" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop/green{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"eMv" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"eMH" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"eMP" = ( +/obj/structure/bars/passage{ + redstone_id = "sewer4" + }, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"eNh" = ( +/obj/structure/fluff/railing/border{ + dir = 9; + icon_state = "border" + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/outdoors/exposed/manorgarri) +"eNj" = ( +/turf/open/floor/rogue/rooftop/green, +/area/rogue/outdoors/exposed/manorgarri) +"eNw" = ( +/obj/structure/chair/bench/couch/redleft, +/obj/structure/fluff/walldeco/bigpainting/lake{ + pixel_x = 0 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"eNK" = ( +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/turf/open/floor/rogue/tile/bath, +/area/rogue/indoors/town/bath/redhouse) +"eOe" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/machinery/light/rogue/wallfire/candle/weak/l, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"eOs" = ( +/obj/structure/bed/rogue/shit, +/obj/structure/fluff/walldeco/wantedposter, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"eOv" = ( +/obj/structure/stairs/stone{ + dir = 4; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"eOG" = ( +/obj/structure/stairs/stone{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"eOQ" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop/green{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"ePk" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"ePp" = ( +/obj/structure/rack/rogue, +/obj/item/reagent_containers/glass/bottle/rogue/healthpot, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/magician) +"ePz" = ( +/turf/closed/wall/mineral/rogue/wooddark/vertical, +/area/rogue/indoors/town) +"ePC" = ( +/obj/effect/decal/shadow_floor, +/obj/structure/roguemachine/scomm{ + pixel_y = -32 + }, +/turf/open/floor/rogue/sandstone/shaded, +/area/rogue/indoors/town/church/chapel) +"ePF" = ( +/obj/structure/table/wood/nice/decorated_alt, +/obj/item/candle/yellow/lit/infinite/strong{ + pixel_x = 5; + pixel_y = 2 + }, +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"eQe" = ( +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town/roofs) +"eRt" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"eRz" = ( +/obj/structure/fluff/statue/small, +/turf/open/water/cleanshallow, +/area/rogue/outdoors/exposed/manorgarri) +"eRB" = ( +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"eRH" = ( +/obj/machinery/light/rogue/wallfire{ + pixel_y = 32 + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors) +"eRP" = ( +/obj/item/reagent_containers/food/snacks/rogue/meat/poultry, +/obj/item/reagent_containers/food/snacks/rogue/meat/poultry, +/obj/structure/closet/crate/chest/crate, +/turf/open/floor/rogue/metal/barograte, +/area/rogue/outdoors/exposed/under/basement) +"eRY" = ( +/obj/machinery/light/rogue/firebowl/standing, +/turf/open/floor/rogue/twig, +/area/rogue/under/town/basement) +"eSc" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/landmark/start/villager{ + dir = 8 + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"eSm" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop/green, +/area/rogue/outdoors/town/roofs) +"eSn" = ( +/obj/structure/table/wood/reinforced_alter, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/obj/item/natural/feather, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town) +"eSM" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 5; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/tavern/saiga) +"eSU" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 4 + }, +/area/rogue/indoors/town/magician) +"eTh" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/town/basement) +"eTy" = ( +/obj/structure/stairs{ + dir = 8; + icon_state = "stairs" + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/tavern/saiga) +"eTK" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/effect/spawner/roguemap/alcohol, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"eTT" = ( +/obj/structure/fluff/walldeco/customflag, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"eUo" = ( +/turf/open/floor/rogue/tile/checker, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"eUw" = ( +/obj/structure/table/wood/reinf_long, +/obj/machinery/light/rogue/cauldron, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/magician) +"eVq" = ( +/obj/structure/flora/roguegrass, +/obj/item/roguebin, +/obj/effect/decal/turfedge_neu/road{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"eVI" = ( +/obj/item/reagent_containers/food/snacks/crow{ + dir = 8; + icon_state = "crow" + }, +/turf/open/floor/rogue/rooftop/green{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"eVM" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/manorgarri) +"eVP" = ( +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"eVX" = ( +/turf/closed/wall/mineral/rogue/wood, +/area/rogue/indoors/town) +"eWv" = ( +/obj/structure/flora/roguegrass, +/obj/structure/roguerock, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"eXb" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/under/town/caverogue{ + first_time_text = "DEEP MINESHAFT" + }) +"eXr" = ( +/obj/item/natural/dirtclod, +/obj/structure/bars/pipe{ + dir = 6; + icon_state = "pipe" + }, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"eXI" = ( +/turf/closed/wall/mineral/rogue/decostone/chimney, +/area/rogue/indoors/shelter/town/dwarf) +"eXO" = ( +/obj/structure/fluff/statue/knightalt, +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"eYj" = ( +/obj/machinery/light/rogue/torchholder/c, +/turf/open/transparent/openspace, +/area/rogue/under/town/caverogue{ + first_time_text = "DEEP MINESHAFT" + }) +"eZd" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/outdoors/rtfield/hamlet) +"eZg" = ( +/obj/machinery/light/rogue/firebowl/standing, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) +"eZv" = ( +/turf/open/transparent/openspace, +/area/rogue/indoors/shelter/town/roofs) +"eZz" = ( +/obj/machinery/light/rogue/campfire, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town) +"eZE" = ( +/obj/structure/closet/dirthole/closed/loot, +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"eZF" = ( +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/rooftop/green{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"faa" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/mace/woodclub/train_sword, +/obj/item/rogueweapon/mace/woodclub/train_sword, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"fai" = ( +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/blocks/stonered, +/area/rogue/indoors/town/bath/redhouse) +"faV" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners, +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"fbb" = ( +/obj/structure/stairs/fancy/r{ + dir = 1 + }, +/turf/open/floor/rogue/carpet/lord/right, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"fbt" = ( +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"fbw" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/obj/item/clothing/shoes/roguetown/simpleshoes, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/shelter/rtfield) +"fbL" = ( +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/outdoors/town/roofs) +"fbS" = ( +/obj/item/rogueweapon/thresher, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/town/basement) +"fcg" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 4; + icon_state = "stonehedge_aged" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"fcD" = ( +/obj/structure/fluff/customsign{ + desc = "Steward: North -- Church: East -- Smeltery: West"; + name = "TOWN MAP" + }, +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"fcO" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 6 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"fcR" = ( +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern/saiga) +"fcW" = ( +/obj/effect/spawner/roguemap/treeorbush, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"fdx" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/town/basement) +"fdH" = ( +/obj/structure/fluff/railing/border{ + dir = 9; + icon_state = "border" + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"fdZ" = ( +/obj/effect/decal/cleanable/dirt/cobweb{ + icon_state = "cobweb2" + }, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors) +"fen" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/shelter/mountains/decap) +"fex" = ( +/obj/structure/rack/rogue, +/obj/item/reagent_containers/glass/cup/wooden/crafted, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"feU" = ( +/obj/structure/fluff/walldeco/rpainting/crown{ + pixel_y = 32 + }, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"feV" = ( +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/indoors/town/garrison) +"feW" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"ffP" = ( +/obj/structure/chair/wood/rogue/chair_noble/purple{ + dir = 8 + }, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/tailor) +"fgs" = ( +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/outdoors/exposed/under/basement) +"fgz" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/landmark/start/watchman{ + dir = 1 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/garrison) +"fgL" = ( +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/obj/machinery/light/rogue/wallfire/big_fireplace{ + pixel_x = 15; + pixel_y = 32 + }, +/obj/structure/chair/wood/rogue/fancy{ + dir = 4; + icon_state = "chair1" + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern/saiga) +"fgN" = ( +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"fgP" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/saigabuck/tame, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"fgY" = ( +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"fhi" = ( +/obj/structure/roguemachine/scomm, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"fhv" = ( +/obj/structure/table/wood/reinforced_alt{ + dir = 1 + }, +/obj/item/paper/note_about_dwarfs, +/turf/open/floor/rogue/tile/masonic/single, +/area/rogue/indoors/town/dwarfin) +"fhA" = ( +/obj/structure/closet/crate/roguecloset/lord{ + lockid = "nightman" + }, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/rogueweapon/knife/dagger/steel, +/obj/item/clothing/mask/cigarette/rollie/mindbreaker, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/bath/redhouse) +"fhC" = ( +/obj/structure/roguemachine/stockpile, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) +"fio" = ( +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"fiK" = ( +/obj/machinery/light/rogue/firebowl/church, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"fjH" = ( +/turf/open/transparent/openspace, +/area/rogue/outdoors/exposed/under/sewer) +"fkb" = ( +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church/chapel) +"fkm" = ( +/obj/structure/rack/rogue/shelf/notdense{ + pixel_x = -32; + pixel_y = -4 + }, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/garrison) +"fkZ" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1; + icon_state = "stonehedge_aged" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"flb" = ( +/obj/structure/roguetent/preopen, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"flC" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/stairs{ + dir = 1; + icon_state = "stairs" + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/mountains) +"flQ" = ( +/obj/structure/toilet, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/shelter/mountains) +"fmG" = ( +/obj/structure/closet/crate/chest/neu{ + name = "food storage"; + pixel_x = 3 + }, +/obj/effect/decal/turfedge_neu/alt{ + dir = 9 + }, +/obj/structure/lever/wall{ + dir = 8; + pixel_y = 10; + redstone_id = "warehouse_inn01" + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern/saiga) +"fmQ" = ( +/obj/structure/roguemachine/scomm, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"fnd" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/obj/structure/fluff/railing/wood, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"fnq" = ( +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"fnK" = ( +/obj/structure/roguewindow/openclose{ + dir = 8; + icon_state = "woodwindowdir" + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/tavern/saiga) +"fnU" = ( +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/clothing/mask/cigarette/rollie/nicotine, +/obj/item/clothing/mask/cigarette/rollie/nicotine, +/obj/item/paper/scroll, +/obj/item/natural/feather, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"fon" = ( +/obj/structure/fluff/walldeco/masonflag{ + pixel_y = -31 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/dwarf) +"foq" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/exposed/manorgarri) +"foR" = ( +/turf/open/water/swamp/deep, +/area/rogue/outdoors/rtfield/boggish) +"fpb" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/cell) +"fpB" = ( +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/obj/structure/flora/roguegrass, +/turf/open/water/cleanshallow, +/area/rogue/outdoors/exposed/under/basement) +"fpJ" = ( +/obj/structure/flora/roguetree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"fpV" = ( +/obj/machinery/light/rogue/wallfire{ + pixel_x = -32 + }, +/obj/effect/decal/turfedge_neu{ + dir = 4 + }, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"fpX" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/obj/effect/decal/cleanable/food/tomato_smudge, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"fqh" = ( +/obj/structure/fluff/railing/border, +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/effect/landmark/start/veteran{ + dir = 1 + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors) +"fqp" = ( +/obj/structure/mineral_door/wood/fancywood{ + locked = 1; + lockid = "nightman"; + name = "masters room" + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/bath/redhouse) +"fqu" = ( +/obj/structure/fluff/railing/border{ + dir = 5; + icon_state = "border" + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"fqM" = ( +/obj/structure/bed/rogue/wooldouble, +/obj/item/bedsheet/rogue/fabric_double, +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/bath/redhouse) +"fqW" = ( +/obj/structure/roguewindow/openclose{ + dir = 8; + icon_state = "woodwindowdir" + }, +/obj/structure/barricade/wooden/rogue/crude, +/turf/open/floor/rogue/cobblerock, +/area/rogue/indoors/town/garrison) +"fqY" = ( +/obj/structure/stairs/stone{ + dir = 8 + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"frf" = ( +/turf/closed/wall/mineral/rogue/wooddark/window, +/area/rogue/indoors/town/dwarfin) +"frk" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"frr" = ( +/obj/structure/fermenting_barrel/random/water, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"frv" = ( +/obj/item/storage/roguebag, +/obj/item/storage/roguebag, +/obj/item/storage/roguebag, +/obj/structure/rack/rogue, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church) +"frE" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fermenting_barrel/random/water, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" + }, +/area/rogue/indoors/town/shop) +"frH" = ( +/obj/structure/table/wood/reinforced_alter, +/obj/item/reagent_containers/glass/bottle/rogue/wine, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/dwarfin) +"frM" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue) +"fsd" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/neck/roguetown/talkstone, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/magician) +"fsk" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/under/basement) +"fsl" = ( +/obj/item/rogueweapon/knife/dagger/steel/special, +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/rogueweapon/mace/cudgel, +/obj/machinery/light/rogue/torchholder/c{ + pixel_y = -32 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/shop) +"ftC" = ( +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/outdoors/rtfield/plague_district) +"ftR" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop/green{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"ftW" = ( +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"fuR" = ( +/obj/structure/stairs/stone{ + dir = 4; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"fvf" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/effect/landmark/start/farmer{ + dir = 1 + }, +/obj/machinery/light/rogue/oven/south, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/soilsons) +"fvh" = ( +/obj/effect/landmark/start/innkeep, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"fvn" = ( +/obj/structure/mineral_door/bars{ + locked = 1; + lockid = "manor" + }, +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/outdoors/exposed/under/basement) +"fvp" = ( +/obj/item/natural/stone, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/mountains) +"fvv" = ( +/turf/open/floor/carpet/stellar, +/area/rogue/indoors/town/magician) +"fws" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 9 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"fwx" = ( +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 9; + icon_state = "border" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"fwO" = ( +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"fwP" = ( +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"fwQ" = ( +/obj/structure/flora/roguegrass, +/obj/machinery/light/rogue/firebowl, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"fwR" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/tile/tilerg, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"fxC" = ( +/obj/structure/fluff/railing/border, +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop/green{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"fyl" = ( +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"fyv" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"fyR" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/under/town/sewer) +"fyY" = ( +/obj/structure/fluff/psycross, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/town/basement) +"fyZ" = ( +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"fzj" = ( +/turf/closed/wall/mineral/rogue/wooddark/end{ + dir = 4; + icon_state = "endwooddark" + }, +/area/rogue/indoors) +"fzE" = ( +/obj/structure/closet/crate/chest/crate, +/obj/item/neuFarm/seed/apple, +/obj/item/reagent_containers/food/snacks/produce/apple, +/obj/item/reagent_containers/food/snacks/produce/apple, +/obj/item/reagent_containers/food/snacks/produce/apple, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"fBu" = ( +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"fCb" = ( +/obj/structure/mineral_door/swing_door, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors) +"fCm" = ( +/obj/structure/table/wood{ + icon_state = "longtable" + }, +/obj/item/book/rogue/law, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"fCq" = ( +/obj/structure/table/wood/plain, +/obj/item/candle/yellow, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town) +"fCr" = ( +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/candle/yellow, +/obj/item/reagent_containers/glass/bottle/rogue/wine{ + pixel_x = -11; + pixel_y = 10 + }, +/obj/structure/fluff/wallclock, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church) +"fDs" = ( +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/outdoors/rtfield/hamlet) +"fDx" = ( +/obj/structure/bars/pipe, +/turf/closed/wall/mineral/rogue/wooddark/horizontal, +/area/rogue/indoors/town) +"fDW" = ( +/turf/closed/wall/mineral/rogue/wooddark/slitted, +/area/rogue/outdoors/mountains) +"fEa" = ( +/obj/structure/rack/rogue, +/obj/item/cooking/platter, +/obj/item/cooking/platter{ + pixel_y = -5 + }, +/obj/effect/decal/turfedge_neu/alt, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern/saiga) +"fFz" = ( +/obj/structure/flora/roguegrass, +/obj/structure/roguerock, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"fFI" = ( +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/bath/redhouse) +"fGl" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/tavern/saiga) +"fGK" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 8 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"fHA" = ( +/obj/effect/spawner/roguemap/hauntz_random, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"fHF" = ( +/obj/effect/decal/turfedge_neu/alt_small{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"fHJ" = ( +/obj/structure/fluff/statue/knightalt, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/under/basement) +"fHL" = ( +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"fHU" = ( +/obj/structure/table/vtable/v2, +/obj/item/reagent_containers/glass/cup, +/obj/item/reagent_containers/glass/bottle/rogue/wine{ + pixel_x = -11; + pixel_y = 10 + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town) +"fIb" = ( +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/magician) +"fIm" = ( +/obj/effect/decal/cleanable/dirt/cobweb, +/obj/structure/bed/rogue/shit, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/outdoors/exposed/under/basement) +"fIp" = ( +/obj/item/reagent_containers/glass/bucket/wooden/alter, +/turf/open/floor/rogue/tile/bath, +/area/rogue/indoors/town/bath/redhouse) +"fJz" = ( +/obj/structure/stairs{ + dir = 4; + icon_state = "stairs" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"fKe" = ( +/obj/structure/stairs/stone, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) +"fKk" = ( +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/outdoors/exposed/manorgarri) +"fKq" = ( +/obj/structure/bed/rogue/shit, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/outdoors/exposed/under/basement) +"fKy" = ( +/obj/structure/roguemachine/submission, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) +"fKD" = ( +/obj/structure/table/wood{ + dir = 5; + icon_state = "largetable" + }, +/turf/open/floor/rogue/tile/tilerg, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"fKJ" = ( +/obj/effect/decal/cleanable/dirt/cobweb{ + dir = 1 + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"fKK" = ( +/obj/structure/stairs/stone{ + dir = 8 + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/town/hamlet) +"fKU" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"fLn" = ( +/obj/structure/stairs/stone{ + dir = 4; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/dwarfin) +"fLu" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/manorgarri) +"fMh" = ( +/obj/effect/decal/turfedge_neu/mossy_small, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/manorgarri) +"fMD" = ( +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/outdoors) +"fMK" = ( +/obj/item/reagent_containers/food/snacks/crow{ + dir = 8; + icon_state = "crow" + }, +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/mountains) +"fMX" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/river) +"fNt" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"fNw" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"fNO" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/town/hamlet) +"fOm" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"fOo" = ( +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/obj/structure/bed/rogue/inn, +/turf/open/floor/carpet/red, +/area/rogue/outdoors/exposed/under/basement) +"fOQ" = ( +/obj/structure/fermenting_barrel/beer, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"fPj" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"fQB" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"fQM" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"fRg" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/river) +"fRo" = ( +/obj/structure/chair/stool/rogue, +/turf/open/water/bath/pool{ + dir = 9 + }, +/area/rogue/indoors/town/bath/redhouse) +"fRw" = ( +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/town/basement) +"fSP" = ( +/obj/structure/mineral_door/wood/donjon{ + lockid = "walls" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"fSQ" = ( +/obj/structure/fluff/railing/border{ + dir = 9; + icon_state = "border" + }, +/obj/structure/roguemachine/scomm, +/obj/effect/decal/turfedge_neu/alt{ + dir = 6 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"fTp" = ( +/obj/structure/stairs{ + dir = 1 + }, +/obj/machinery/light/rogue/torchholder{ + dir = 4; + icon_state = "torchwall1" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/town/roofs) +"fTO" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/woodish) +"fUu" = ( +/turf/open/floor/rogue/grass/peril, +/area/rogue/indoors/shelter/rtfield) +"fUy" = ( +/obj/item/roguekey/walls, +/obj/item/roguekey/walls, +/obj/item/roguekey/walls, +/obj/structure/closet/crate/chest/neu_iron, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"fVf" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/exposed/manorgarri) +"fVg" = ( +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/clothing/cloak/stabard/guard, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"fVh" = ( +/turf/closed/wall/mineral/rogue/stonebrick, +/area/rogue/outdoors/rtfield/hamlet) +"fVn" = ( +/obj/structure/rack/rogue/shelf/notdense{ + pixel_x = 32; + pixel_y = -5 + }, +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"fVL" = ( +/turf/closed/mineral/random/rogue, +/area/rogue/under/town/caverogue/saltmine) +"fVV" = ( +/obj/effect/decal/cleanable/blood/gibs/body, +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"fWf" = ( +/obj/item/candle/yellow/lit/infinite/strong{ + pixel_x = 0; + pixel_y = 32 + }, +/obj/structure/toilet, +/turf/open/floor/rogue/tile{ + icon_state = "chess" + }, +/area/rogue/indoors/town) +"fWk" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/manorgarri) +"fWC" = ( +/turf/closed/mineral/rogue/bedrock, +/area/rogue/indoors/shelter/town/sargoth) +"fWZ" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 8; + icon_state = "stonehedge_aged" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"fXC" = ( +/obj/item/clothing/mask/cigarette/pipe/westman, +/obj/structure/closet/crate/chest/wicker, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, +/obj/item/neuFarm/seed/westleach, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/soilsons) +"fXS" = ( +/turf/closed/wall/mineral/rogue/decostone/chimney, +/area/rogue/outdoors/exposed/manorgarri) +"fXU" = ( +/obj/structure/table/wood/large/corner_new{ + dir = 5 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/garrison) +"fXZ" = ( +/obj/structure/bed/rogue/hay{ + name = "cooks bed" + }, +/obj/structure/fluff/nest, +/obj/effect/landmark/start/cook{ + icon_state = "arrow" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/basement) +"fYq" = ( +/obj/structure/roguewindow/openclose{ + dir = 1 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/bath/redhouse) +"fYv" = ( +/obj/effect/landmark/start/wapprentice{ + dir = 8 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"fYO" = ( +/obj/item/rogueweapon/sword/scimitar/messer/neu{ + anchored = 1; + pixel_y = 3 + }, +/obj/structure/table/wood/reinforced_alt{ + name = "altar of Warfare" + }, +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/sandstone, +/area/rogue/indoors/town/church/chapel) +"fYS" = ( +/obj/effect/decal/remains/human/old, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"fZg" = ( +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"fZx" = ( +/obj/structure/flora/roguegrass/water, +/turf/open/water/swamp/deep, +/area/rogue/outdoors/rtfield/boggish) +"fZF" = ( +/obj/structure/rack/rogue, +/obj/item/flashlight/glowstick/cyan{ + icon = 'icons/roguetown/items/gems.dmi'; + icon_state = "quartz_cut"; + lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'; + name = "glowstone"; + righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/magician) +"gas" = ( +/obj/effect/landmark/start/cook{ + dir = 8 + }, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/tavern/saiga) +"gbg" = ( +/obj/structure/table/wood/reinf_long{ + dir = 1 + }, +/obj/item/rogueweapon/pick, +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"gbo" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/river) +"gbA" = ( +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"gbM" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 4 + }, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"gbU" = ( +/obj/machinery/light/rogue/oven/south, +/obj/effect/decal/turfedge_neu/alt, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern/saiga) +"gcd" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/shield/tower/metal, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"gce" = ( +/obj/structure/bed/rogue/shit, +/obj/item/natural/worms, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"gcr" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/shop) +"gcU" = ( +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors) +"gdc" = ( +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/tavern/saiga) +"gdJ" = ( +/obj/structure/fluff/dryingrack, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"gdM" = ( +/turf/closed/wall/mineral/rogue/wooddark/end, +/area/rogue/indoors/shelter/mountains) +"gdY" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle{ + dir = 1 + }, +/area/rogue/indoors/shelter/mountains/decap) +"geB" = ( +/obj/structure/chair/stool/rogue, +/turf/open/water/bath/pool{ + dir = 10 + }, +/area/rogue/indoors/town/bath/redhouse) +"geD" = ( +/obj/item/roguebin/water/gross, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/shop) +"gfp" = ( +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue) +"gfH" = ( +/obj/structure/fluff/walldeco/vinez{ + dir = 1 + }, +/turf/closed/wall/mineral/rogue/stonebrick/reddish, +/area/rogue/indoors/town/bath/redhouse) +"gfN" = ( +/turf/closed/wall/mineral/rogue/wooddark/horizontal, +/area/rogue/indoors/town/church) +"ggn" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1; + icon_state = "stonehedge_aged" + }, +/obj/structure/flora/rock/pile, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/river) +"ggI" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/rogueflower/lavendergrass, +/turf/open/floor/rogue/grass, +/area/rogue/indoors/town/church/chapel) +"ghO" = ( +/obj/effect/landmark/start/monk{ + dir = 8 + }, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church/chapel) +"ghW" = ( +/obj/structure/closet/crate/chest/old_crate, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/soilsons) +"gif" = ( +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/indoors) +"gio" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop{ + dir = 1 + }, +/area/rogue/outdoors/exposed/manorgarri) +"gip" = ( +/obj/structure/bookcase, +/obj/item/book/rogue/festus, +/obj/item/book/rogue/cardgame, +/obj/item/book/rogue/robber, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/outdoors/exposed/under/basement) +"giM" = ( +/obj/structure/rack/rogue/shelf/notdense{ + pixel_y = 0 + }, +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/town/tailor) +"giS" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"gjb" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"gjc" = ( +/obj/item/rogueweapon/shovel, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"gjC" = ( +/obj/structure/bed/rogue/inn{ + name = "nitemaid bed" + }, +/obj/item/bedsheet/rogue/wool, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/under/town/basement) +"gkd" = ( +/turf/closed/mineral/rogue, +/area/rogue/indoors/town/vault) +"gko" = ( +/obj/structure/chair/bench/ancientlog, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"gkz" = ( +/obj/item/natural/rock, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave) +"gkO" = ( +/turf/open/water/swamp, +/area/rogue/indoors) +"gkW" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/rogueflower/ppflowers, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/indoors/town/church/chapel) +"glB" = ( +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/outdoors/exposed/manorgarri) +"glT" = ( +/turf/closed/wall/mineral/rogue/wooddark/end, +/area/rogue/indoors/town/garrison) +"gma" = ( +/obj/structure/bars/pipe{ + dir = 5; + icon_state = "pipe" + }, +/turf/closed/wall/mineral/rogue/wooddark/vertical, +/area/rogue/indoors/town) +"gmh" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"gnk" = ( +/obj/machinery/simple_dye_bin, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tailor) +"gnn" = ( +/obj/machinery/light/rogue/firebowl/standing, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"gnE" = ( +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/dwarfin) +"gnW" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/exposed/manorgarri) +"goc" = ( +/obj/structure/fluff/traveltile{ + aportalgoesto = "forestin"; + aportalid = "forestout" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/woodish) +"goi" = ( +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/tailor) +"gos" = ( +/obj/structure/fluff/walldeco/mona, +/obj/item/clothing/head/roguetown/crown/serpcrown/surplus{ + pixel_x = -4 + }, +/obj/item/rogueweapon/lordscepter{ + pixel_x = 3; + pixel_y = -4 + }, +/obj/structure/rack/rogue, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/vault) +"goV" = ( +/obj/structure/bed/rogue/wooldouble, +/obj/item/bedsheet/rogue/fabric_double, +/obj/structure/fluff/walldeco/painting/seraphina{ + pixel_x = 32 + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"goZ" = ( +/obj/structure/fluff/railing/stonehedge, +/obj/structure/fluff/walldeco/vinez/offset, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"gpl" = ( +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/obj/structure/toilet, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"gpy" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fluff/railing/border, +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop/green{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"gpG" = ( +/obj/structure/flora/roguetree/burnt, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"gqx" = ( +/obj/structure/flora/roguegrass, +/obj/item/reagent_containers/glass/bucket/wooden/alter, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"gqy" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/church) +"gqM" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/landmark/start/stevedore{ + dir = 8 + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/shop) +"gqY" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"grD" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/landmark/start/mason{ + dir = 8 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"gsB" = ( +/obj/structure/mineral_door/bars{ + locked = 1; + lockid = "butcher" + }, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"gtg" = ( +/obj/structure/fluff/railing/border{ + dir = 9; + icon_state = "border" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"gtw" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/outdoors/exposed/under/basement) +"gtA" = ( +/obj/structure/rack/rogue, +/obj/item/roguestatue/silver/gnome, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/magician) +"gtN" = ( +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tailor) +"gtT" = ( +/obj/item/clothing/suit/roguetown/shirt/dress/gen/random, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"gtU" = ( +/turf/open/floor/rogue/rooftop/green{ + dir = 4 + }, +/area/rogue/outdoors/exposed/manorgarri) +"guH" = ( +/turf/open/floor/bronze, +/area/rogue/outdoors) +"guL" = ( +/turf/open/floor/rogue/tile/masonic/single, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"gwE" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/bigrat, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/caverogue/saltmine) +"gwL" = ( +/turf/closed/wall/mineral/rogue/decostone/fluffstone, +/area/rogue/indoors) +"gxx" = ( +/obj/structure/closet/dirthole/grave, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"gxJ" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"gyc" = ( +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"gym" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/plague_district) +"gzu" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/remains/saiga, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"gzv" = ( +/obj/structure/fluff/walldeco/vinez/l{ + dir = 9 + }, +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"gzx" = ( +/obj/structure/table/wood{ + icon_state = "longtable" + }, +/obj/item/candle/yellow/lit{ + pixel_x = -5; + pixel_y = 9 + }, +/obj/item/candle/yellow/lit{ + pixel_x = 4; + pixel_y = 1 + }, +/turf/open/floor/rogue/tile{ + icon_state = "chess" + }, +/area/rogue/indoors/town/shop) +"gzS" = ( +/obj/structure/flora/roguetree, +/turf/open/water/swamp/deep, +/area/rogue/outdoors/rtfield/boggish) +"gAe" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/railing/stonehedge{ + dir = 4; + icon_state = "stonehedge_aged" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"gAg" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop/green{ + dir = 1 + }, +/area/rogue/outdoors/town/roofs) +"gAM" = ( +/obj/item/grown/log/tree/small, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"gAT" = ( +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"gAV" = ( +/turf/open/floor/rogue/rooftop/green{ + dir = 4 + }, +/area/rogue/outdoors) +"gBN" = ( +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/exposed/manorgarri) +"gBX" = ( +/obj/structure/bars/pipe, +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/obj/structure/bars/pipe{ + dir = 8; + icon_state = "pipe" + }, +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"gBZ" = ( +/obj/structure/table/wood/reinforced_alt, +/obj/structure/bars{ + icon_state = "barsbent"; + layer = 2.81 + }, +/obj/machinery/light/rogue/wallfire/candle{ + pixel_y = -32 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town) +"gCu" = ( +/obj/structure/fluff/railing/border, +/obj/structure/table/wood{ + icon_state = "tablewood1" + }, +/obj/item/clothing/mask/cigarette/pipe{ + pixel_y = 14 + }, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach{ + pixel_y = 7 + }, +/obj/item/storage/box/matches, +/turf/open/floor/rogue/twig, +/area/rogue/indoors) +"gDg" = ( +/obj/structure/stairs{ + dir = 8; + icon_state = "stairs" + }, +/obj/structure/fluff/railing/border, +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/town/tavern/saiga) +"gEo" = ( +/obj/structure/mineral_door/bars{ + lockid = "graveyard"; + name = "resting fields of Necra" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"gEZ" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"gFa" = ( +/obj/effect/decal/cleanable/blood/footprints, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"gFk" = ( +/obj/structure/table/vtable, +/obj/item/paper/scroll, +/obj/item/natural/feather{ + pixel_x = 5; + pixel_y = -5 + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/bath/redhouse) +"gFp" = ( +/obj/effect/spawner/roguemap/treeorstump, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"gFs" = ( +/obj/structure/floordoor/gatehatch/outer{ + redstone_id = "gatelava" + }, +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/obj/structure/kybraxor{ + pixel_x = -32; + pixel_y = -32 + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/exposed/town/hamlet) +"gFH" = ( +/obj/structure/stairs/stone{ + dir = 8; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/dwarfin) +"gFI" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 4; + pixel_x = -10 + }, +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/grown/log/tree/small, +/obj/item/grown/log/tree/small, +/obj/item/grown/log/tree/small, +/obj/item/grown/log/tree/small, +/obj/item/grown/log/tree/small, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"gFR" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/tile/masonic/single, +/area/rogue/indoors/town/dwarfin) +"gGu" = ( +/obj/effect/decal/cleanable/blood/gibs, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors) +"gGy" = ( +/obj/structure/table/wood/nice/decorated, +/obj/item/book/rogue/secret/ledger, +/obj/item/book/rogue/secret/xylix, +/turf/open/floor/carpet/red, +/area/rogue/outdoors/exposed/under/basement) +"gGC" = ( +/obj/structure/fluff/clodpile, +/obj/item/natural/worms, +/obj/structure/kneestingers, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"gGJ" = ( +/turf/open/floor/rogue/grass/yelmix, +/area/rogue/outdoors/rtfield/hamlet) +"gGM" = ( +/obj/structure/rack/rogue/shelf/biggest, +/obj/item/rogue/instrument/harp, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"gGN" = ( +/obj/effect/decal/turfedge_neu/road, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"gGO" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 5 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"gHs" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/ring/gold/protection, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/magician) +"gHu" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/rogueweapon/shovel{ + pixel_x = 11; + pixel_y = 1 + }, +/obj/item/rogueweapon/axe/iron{ + pixel_x = -12 + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"gHE" = ( +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/tile/masonic/inverted, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"gIz" = ( +/obj/structure/table/wood{ + icon_state = "tablewood3" + }, +/obj/item/clothing/neck/roguetown/psycross, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"gIB" = ( +/obj/structure/roguemachine/atm, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town) +"gIT" = ( +/turf/open/floor/rogue/rooftop/green, +/area/rogue/outdoors/rtfield/plague_district) +"gJg" = ( +/obj/item/flint{ + pixel_y = 36 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"gJs" = ( +/obj/effect/decal/remains/saiga, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"gJv" = ( +/obj/structure/fluff/walldeco/bath/four, +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/blocks/stonered, +/area/rogue/indoors/town/bath/redhouse) +"gJM" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/tile/masonic/spiral, +/area/rogue/outdoors/exposed/under/basement) +"gKF" = ( +/obj/structure/rack/rogue, +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/tailor) +"gKG" = ( +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"gMb" = ( +/obj/structure/feedinghole{ + pixel_x = -32; + pixel_y = 0 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town) +"gMX" = ( +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/obj/structure/bars/pipe{ + dir = 8; + icon_state = "pipe" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"gNf" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 8 + }, +/area/rogue/indoors/town/magician) +"gNu" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop/green{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"gNJ" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"gOq" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/rock/pile, +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"gPa" = ( +/obj/structure/fluff/grindwheel, +/obj/item/rogueweapon/sword/short/iron, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"gQA" = ( +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 1 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/manorgarri) +"gQS" = ( +/obj/item/candle/yellow/lit/infinite/strong{ + pixel_x = 0; + pixel_y = 32 + }, +/obj/effect/decal/turfedge_neu/mossy{ + dir = 5 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/tavern/saiga) +"gQU" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/rogueweapon/mace/woodclub/rollingpin, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/church) +"gSj" = ( +/obj/structure/mineral_door/wood/fancywood{ + lockid = "manor" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"gSx" = ( +/obj/item/reagent_containers/food/snacks/crow, +/turf/open/floor/rogue/rooftop/green{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"gSH" = ( +/obj/item/clothing/cloak/cape/archivist, +/obj/structure/closet/crate/chest/neu_iron, +/turf/open/floor/carpet/red, +/area/rogue/outdoors/exposed/under/basement) +"gSS" = ( +/obj/item/book/rogue/noc, +/obj/structure/table/wood/reinforced_alt{ + name = "altar of Knowledge" + }, +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/sandstone, +/area/rogue/indoors/town/church/chapel) +"gSV" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"gTy" = ( +/obj/structure/closet/crate/roguecloset/lord{ + lockid = "bath1"; + name = "locker I" + }, +/obj/effect/decal/shadow_floor{ + dir = 6 + }, +/turf/open/floor/rogue/tile/bath, +/area/rogue/indoors/town/bath/redhouse) +"gTA" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"gTE" = ( +/obj/structure/fluff/railing/wood, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"gTX" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"gVw" = ( +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"gVO" = ( +/obj/structure/lever/wall{ + pixel_x = 17; + redstone_id = "merchant" + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/shop) +"gVW" = ( +/obj/structure/fluff/statue/knight/interior/r, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 4 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/manorgarri) +"gWp" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/mossy_small, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/manorgarri) +"gWF" = ( +/obj/structure/stairs/stone, +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"gXl" = ( +/obj/item/natural/stone, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors) +"gXo" = ( +/obj/structure/fluff/walldeco/bigpainting/lake, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"gXJ" = ( +/obj/effect/landmark/start/shepherd{ + dir = 4 + }, +/turf/open/floor/rogue/church, +/area/rogue/under/town/basement) +"gZr" = ( +/obj/structure/table/wood/plain_alt, +/obj/machinery/light/rogue/wallfire/candle{ + pixel_y = -30 + }, +/obj/item/rogueweapon/knife/cleaver{ + pixel_x = 7 + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/church) +"gZt" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"haC" = ( +/obj/structure/fluff/nest, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"hbe" = ( +/obj/structure/table/wood{ + icon_state = "map4" + }, +/turf/open/floor/rogue/carpet/lord/center, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"hbj" = ( +/turf/open/transparent/openspace, +/area/rogue/indoors/town/magician) +"hbE" = ( +/obj/structure/table/wood{ + icon_state = "longtable" + }, +/obj/item/reagent_containers/glass/cup/skull{ + pixel_y = 12 + }, +/obj/item/storage/box/matches, +/turf/open/floor/rogue/tile/masonic/single, +/area/rogue/indoors/town/magician) +"hbO" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/carpet/stellar, +/area/rogue/indoors/town/magician) +"hca" = ( +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"hci" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 4 + }, +/area/rogue/indoors/town/church/chapel) +"hcr" = ( +/turf/closed/wall/mineral/rogue/decostone/cand, +/area/rogue/outdoors/exposed/under/basement) +"hcA" = ( +/obj/structure/flora/rock/pile, +/obj/structure/flora/roguetree/burnt, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"hcY" = ( +/obj/structure/table/wood/treestump{ + pixel_x = -7 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"hdm" = ( +/obj/structure/rack/rogue, +/obj/item/ingot/silver{ + pixel_x = -1 + }, +/obj/item/ingot/silver{ + pixel_x = 1; + pixel_y = -1 + }, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/vault) +"hdt" = ( +/obj/item/book/rogue/psybibleplayerbook, +/obj/structure/bookcase, +/obj/item/book/rogue/vownecrapage, +/turf/open/floor/rogue/church, +/area/rogue/indoors/town/church) +"hdv" = ( +/obj/item/rogueweapon/pick, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"hdL" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 8 + }, +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/exposed/town/hamlet) +"hes" = ( +/obj/structure/toilet, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/tavern/saiga) +"heB" = ( +/obj/structure/roguemachine/steward, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town) +"heD" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/landmark/start/mercenary{ + dir = 4 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/tavern/saiga) +"heG" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/cell) +"heI" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 10 + }, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors) +"heN" = ( +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"heO" = ( +/obj/structure/stairs{ + dir = 1 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/town/roofs) +"heX" = ( +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/town) +"hfM" = ( +/turf/closed/wall/mineral/rogue/decostone/chimney, +/area/rogue/indoors/town/tailor) +"hfN" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/river) +"hgj" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/natural/feather, +/obj/item/paper, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/tailor) +"hgo" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"hgQ" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/remains/human/old, +/obj/effect/decal/miasma, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors) +"hho" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"hht" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/under/catacombs) +"hhL" = ( +/obj/structure/fluff/statue/knight, +/obj/structure/stone_tile/slab/cracked, +/obj/structure/fluff/walldeco/psybanner{ + pixel_y = 32 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"him" = ( +/obj/item/storage/roguebag, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/soilsons) +"hio" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/mask/cigarette/rollie/mindbreaker, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/magician) +"hjk" = ( +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"hkD" = ( +/obj/structure/table/wood/large/corner_new{ + dir = 10 + }, +/obj/item/reagent_containers/glass/bowl, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/soilsons) +"hlA" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass/bush/wall, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"hlB" = ( +/obj/item/candle/yellow, +/obj/structure/table/wood{ + dir = 10; + icon_state = "tablewood2" + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"hmg" = ( +/obj/structure/bed/rogue/shit, +/obj/effect/spawner/roguemap/loot/common, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"hmu" = ( +/obj/effect/decal/cleanable/food/egg_smudge, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/under/basement) +"hnu" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/obj/effect/decal/turfedge_neu/alt_small{ + dir = 4 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"hny" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1 + }, +/obj/structure/fluff/walldeco/bath/wallrope{ + pixel_y = -32 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"hnW" = ( +/obj/structure/rack/rogue/shelf/biggest, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"hok" = ( +/obj/structure/fluff/walldeco/stone, +/turf/closed/wall/mineral/rogue/stone/window/moss, +/area/rogue/indoors/town) +"hom" = ( +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"hpx" = ( +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/rtfield/hamlet) +"hqF" = ( +/obj/effect/decal/shadow_floor, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/sandstone/shaded, +/area/rogue/indoors/town/church/chapel) +"hqJ" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/mountains) +"hqR" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"hrp" = ( +/obj/structure/fermenting_barrel/random/beer, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"hrB" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"hsi" = ( +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/manorgarri) +"hsC" = ( +/obj/structure/closet/crate/chest/old_crate, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"hsE" = ( +/obj/item/reagent_containers/food/snacks/produce/jacksberry/poison, +/obj/item/reagent_containers/glass/bottle/rogue/poison, +/obj/structure/closet/crate/chest/neu_fancy, +/obj/item/paper/nitemaiden_certificate, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/bath/redhouse) +"hsL" = ( +/turf/closed/mineral/rogue, +/area/rogue/under/cave) +"htm" = ( +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/bath/redhouse) +"hub" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/manorgarri) +"hud" = ( +/obj/structure/closet/crate/roguecloset/lord{ + lockid = "bath2"; + name = "locker II" + }, +/obj/effect/decal/shadow_floor{ + dir = 10 + }, +/turf/open/floor/rogue/tile/bath, +/area/rogue/indoors/town/bath/redhouse) +"hus" = ( +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/under/town/basement) +"hvf" = ( +/obj/structure/flora/roguetree/burnt, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"hvr" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/indoors/shelter/town/dwarf) +"hvy" = ( +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"hvE" = ( +/obj/effect/decal/cleanable/blood/tracks, +/obj/effect/decal/remains/cabbit, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"hvS" = ( +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors) +"hwt" = ( +/obj/machinery/light/rogue/torchholder/cold, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"hxi" = ( +/obj/structure/table/wood{ + icon_state = "map5" + }, +/obj/item/paper/scroll, +/turf/open/floor/rogue/carpet/lord/center, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"hxl" = ( +/obj/structure/flora/rock/pile, +/obj/structure/fluff/railing/stonehedge{ + dir = 1 + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"hxO" = ( +/obj/structure/fluff/walldeco/vinez, +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/outdoors/rtfield/plague_district) +"hyn" = ( +/turf/closed/wall/mineral/rogue/decostone/chimney, +/area/rogue/indoors/town) +"hyA" = ( +/obj/structure/closet/dirthole/closed, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"hyL" = ( +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/woodturned/nosmooth, +/area/rogue/indoors/town) +"hyO" = ( +/obj/structure/table/wood{ + icon_state = "longtable" + }, +/obj/item/paper{ + pixel_y = 7 + }, +/obj/item/paper{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/natural/feather{ + pixel_x = 3; + pixel_y = 9 + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/under/town/basement) +"hyV" = ( +/obj/structure/table/wood/treestump, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/boggish) +"hzg" = ( +/obj/structure/fluff/railing/border{ + dir = 5; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop/green{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"hzq" = ( +/obj/structure/closet/crate/roguecloset/dark, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"hAo" = ( +/obj/item/reagent_containers/glass/bucket/wooden, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"hAB" = ( +/obj/structure/roguemachine/scomm/l, +/obj/machinery/light/rogue/lanternpost/fixed, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"hBx" = ( +/obj/structure/mineral_door/wood/donjon/stone{ + locked = 1; + lockid = "mage"; + max_integrity = 100000; + name = "wizard's tower" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/magician) +"hBQ" = ( +/obj/structure/table/wood/reinf_long{ + dir = 4 + }, +/obj/item/storage/pill_bottle/dice, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"hBY" = ( +/obj/item/rogueweapon/hammer{ + anchored = 1; + pixel_y = 5 + }, +/obj/structure/table/wood/reinforced_alt{ + name = "altar of Industry" + }, +/turf/open/floor/rogue/sandstone, +/area/rogue/indoors/town/church/chapel) +"hCd" = ( +/obj/structure/fluff/statue/knight/r, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"hCf" = ( +/obj/item/natural/worms/leech{ + anchored = 1 + }, +/obj/structure/table/wood/reinforced_alt{ + name = "altar of Health" + }, +/turf/open/floor/rogue/sandstone, +/area/rogue/indoors/town/church/chapel) +"hCo" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/mountains) +"hCy" = ( +/obj/structure/flora/roguegrass, +/turf/closed/wall/mineral/rogue/stonebrick, +/area/rogue/outdoors/exposed/town/hamlet) +"hCF" = ( +/obj/structure/bars/pipe{ + dir = 8; + icon_state = "pipe" + }, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/dwarfin) +"hCI" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/plague_district) +"hDd" = ( +/obj/item/reagent_containers/glass/bottle/rogue/beer/voddena, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/shop) +"hDi" = ( +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/indoors) +"hDn" = ( +/turf/open/floor/rogue/twig, +/area/rogue/outdoors/rtfield/hamlet) +"hDz" = ( +/obj/structure/closet/crate/roguecloset/lord{ + lockid = "bath4"; + name = "locker IV" + }, +/obj/effect/decal/shadow_floor{ + dir = 10 + }, +/turf/open/floor/rogue/tile/bath, +/area/rogue/indoors/town/bath/redhouse) +"hDE" = ( +/obj/effect/decal/turfedge_neu/alt_small{ + dir = 4 + }, +/obj/effect/spawner/roguemap/sewerencounter, +/obj/structure/flora/rock/pile, +/turf/open/water/cleanshallow, +/area/rogue/outdoors/exposed/under/basement) +"hDV" = ( +/obj/structure/mineral_door/bars, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"hDX" = ( +/obj/item/reagent_containers/glass/bottle/ethanol, +/obj/structure/rack/rogue/shelf/biggest{ + name = "fire humors" + }, +/obj/item/reagent_containers/glass/bottle/phosphorus, +/obj/item/reagent_containers/glass/bottle/plasma, +/obj/item/reagent_containers/glass/bottle/welding_fuel, +/obj/item/reagent_containers/glass/bottle/sulfur, +/obj/item/reagent_containers/glass/bottle/rogue/healthpot, +/obj/item/reagent_containers/glass/bottle/rogue/wine, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"hDZ" = ( +/obj/structure/roguerock, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave) +"hEa" = ( +/obj/structure/stairs/stone/reddish{ + dir = 1 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/bath/redhouse) +"hEf" = ( +/turf/open/floor/rogue/church, +/area/rogue/under/town/basement) +"hEl" = ( +/obj/structure/table/vtable, +/obj/item/paper/scroll, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"hGL" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"hGR" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 4; + icon_state = "torchwall1" + }, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"hHf" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 5 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"hHk" = ( +/obj/structure/stairs{ + dir = 1; + icon_state = "stairs" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"hHu" = ( +/obj/structure/roguetent, +/obj/effect/decal/cleanable/blood/footprints, +/turf/open/floor/rogue/grass, +/area/rogue/indoors) +"hIc" = ( +/obj/structure/fluff/railing/wood{ + dir = 8; + icon_state = "woodrailing"; + pixel_y = -1 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/exposed/church) +"hIe" = ( +/obj/structure/closet/crate/chest/wicker, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"hIX" = ( +/obj/effect/decal/cleanable/blood/puddle, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"hJg" = ( +/obj/structure/fluff/walldeco/vinez, +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors) +"hJB" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/tavern/saiga) +"hJE" = ( +/obj/machinery/light/rogue/torchholder{ + pixel_y = 26 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/outdoors/exposed/town/hamlet) +"hKd" = ( +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/woodish) +"hKo" = ( +/obj/structure/roguerock, +/obj/structure/flora/rock/pile, +/obj/machinery/light/rogue/firebowl/stump, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"hKw" = ( +/obj/item/reagent_containers/food/snacks/smallrat, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/basement) +"hKD" = ( +/obj/structure/fluff/walldeco/masonflag{ + pixel_y = 32 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/dwarfin) +"hKK" = ( +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/exposed/church) +"hLh" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/rooftop/green{ + dir = 8 + }, +/area/rogue/outdoors/exposed/manorgarri) +"hLi" = ( +/obj/structure/closet/crate/roguecloset/lord{ + lockid = "bath3"; + name = "locker III" + }, +/obj/effect/decal/shadow_floor{ + dir = 6 + }, +/turf/open/floor/rogue/tile/bath, +/area/rogue/indoors/town/bath/redhouse) +"hLl" = ( +/obj/structure/bars/cemetery, +/obj/structure/flora/roguegrass, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"hLI" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"hLN" = ( +/obj/structure/roguetent/preopen, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/basement) +"hLY" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/tile/masonic/inverted, +/area/rogue/indoors/town/magician) +"hMd" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/bath/redhouse) +"hMK" = ( +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"hML" = ( +/obj/structure/fermenting_barrel, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"hNl" = ( +/obj/structure/stairs/d{ + dir = 1 + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" + }, +/area/rogue/indoors/town/shop) +"hNx" = ( +/obj/structure/rack/rogue{ + pixel_y = 16 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"hOg" = ( +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"hOx" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/tile/tilerg, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"hOz" = ( +/obj/structure/flora/roguegrass, +/obj/structure/mineral_door/bars, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"hOH" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/flora/rock/pile, +/turf/open/water/river{ + dir = 4 + }, +/area/rogue/outdoors/river) +"hOO" = ( +/obj/structure/fluff/walldeco/vinez/l{ + dir = 4 + }, +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"hPn" = ( +/obj/structure/table/wood/reinf_long{ + dir = 1 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"hPp" = ( +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/alch/airdust, +/obj/item/alch/airdust, +/obj/item/alch/earthdust, +/obj/item/alch/earthdust, +/obj/item/alch/firedust, +/obj/item/alch/firedust, +/obj/item/alch/waterdust, +/obj/item/alch/waterdust, +/obj/item/alch/runedust, +/obj/item/alch/runedust, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"hPq" = ( +/obj/structure/mineral_door/wood, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"hPt" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"hPF" = ( +/obj/machinery/loom, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/soilsons) +"hPR" = ( +/obj/structure/bed/rogue/shit, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"hQk" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner, +/area/rogue/indoors/town/bath/redhouse) +"hQx" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"hQC" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 8; + icon_state = "torchwall1" + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"hQQ" = ( +/obj/structure/flora/roguegrass, +/turf/closed/wall/mineral/rogue/stonebrick, +/area/rogue/outdoors/rtfield/hamlet) +"hQT" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/decal/shadow_floor{ + dir = 6 + }, +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/bath/redhouse) +"hQV" = ( +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"hRh" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/outdoors/exposed/magiciantower) +"hRu" = ( +/obj/structure/chair/wood/rogue/chair_noble{ + dir = 4 + }, +/turf/open/floor/carpet/red, +/area/rogue/outdoors/exposed/under/basement) +"hRN" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 6 + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/under/basement) +"hSa" = ( +/obj/item/reagent_containers/food/snacks/rogue/meat/mince/beef, +/obj/item/reagent_containers/food/snacks/rogue/meat/mince/beef, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/obj/structure/closet/crate/chest/neu, +/obj/item/reagent_containers/powder/salt, +/obj/item/reagent_containers/powder/salt, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/under/basement) +"hSf" = ( +/obj/structure/fluff/statue/knight{ + name = "DVORFUNIL" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/dwarf) +"hTa" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fermenting_barrel/random/water, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"hTy" = ( +/obj/structure/flora/roguegrass, +/obj/structure/roguerock, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"hTM" = ( +/obj/structure/roguemachine/mail, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/dwarfin) +"hTQ" = ( +/turf/closed/wall/mineral/rogue/decostone/long, +/area/rogue/indoors/town/church/chapel) +"hTZ" = ( +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/mountains) +"hUx" = ( +/turf/closed/wall/mineral/rogue/decostone/fluffstone, +/area/rogue/outdoors/exposed/magiciantower) +"hUy" = ( +/turf/closed/wall/mineral/rogue/wooddark/horizontal, +/area/rogue/indoors/town/garrison) +"hUL" = ( +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/town/garrison) +"hUT" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/needle/thorn, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/soilsons) +"hWR" = ( +/obj/effect/decal/cleanable/blood/gibs/up, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"hWY" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) +"hXk" = ( +/obj/structure/table/wood/plain_alt, +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern/saiga) +"hXw" = ( +/obj/structure/bars/pipe{ + dir = 10; + icon_state = "pipe" + }, +/turf/closed/wall/mineral/rogue/decostone/fluffstone/reddish, +/area/rogue/indoors/town/bath/redhouse) +"hYf" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/exposed/manorgarri) +"hZn" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 8; + icon_state = "stonehedge_aged" + }, +/obj/structure/flora/roguegrass, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"hZr" = ( +/obj/structure/fluff/psycross/crafted/shrine/astrata{ + pixel_x = -13 + }, +/turf/open/floor/rogue/sandstone, +/area/rogue/indoors/town/church/chapel) +"hZE" = ( +/obj/effect/decal/turfedge_neu/alt, +/obj/structure/fermenting_barrel/random/beer, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern/saiga) +"hZM" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"hZR" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town) +"hZX" = ( +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"hZZ" = ( +/obj/structure/handcart{ + dir = 4; + icon_state = "cart-empty" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"iaf" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/knife/dagger/silver, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/magician) +"iap" = ( +/obj/machinery/light/rogue/torchholder{ + pixel_y = 26 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"iaC" = ( +/obj/structure/fermenting_barrel/random/water, +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/shop) +"ibl" = ( +/obj/structure/fluff/statue/tdummy, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"ibq" = ( +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"ibE" = ( +/obj/structure/roguemachine/mail, +/obj/structure/table/wood/nice/decorated_alt, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"ich" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"icE" = ( +/obj/structure/closet/crate/roguecloset/dark, +/obj/item/clothing/suit/roguetown/shirt/tunic/random, +/obj/item/clothing/suit/roguetown/shirt/tunic/random, +/obj/item/clothing/suit/roguetown/shirt/dress/gen/sexy, +/obj/item/paper/nitemaiden_certificate, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/under/town/basement) +"icG" = ( +/obj/structure/fluff/walldeco/bath/wallrope, +/turf/closed/wall/mineral/rogue/stonebrick/reddish, +/area/rogue/indoors/town/bath/redhouse) +"icN" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 + }, +/obj/structure/roguemachine/scomm/l, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/garrison) +"idj" = ( +/obj/structure/flora/roguegrass/bush/wall, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"idx" = ( +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"idH" = ( +/obj/structure/chair/wood/rogue, +/turf/open/floor/rogue/church, +/area/rogue/under/town/basement) +"idU" = ( +/obj/effect/decal/cleanable/blood/gibs/limb{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 6 + }, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/shelter/rtfield) +"ieO" = ( +/obj/structure/table/wood{ + dir = 1; + icon_state = "longtable" + }, +/obj/item/reagent_containers/glass/bottle/rogue/redwine{ + pixel_x = 5; + pixel_y = 11 + }, +/obj/item/reagent_containers/glass/cup/steel{ + pixel_x = -6; + pixel_y = 20 + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/under/town/basement) +"ifd" = ( +/obj/structure/bed/rogue/shit, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/shelter/mountains) +"ifj" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors) +"ifq" = ( +/obj/effect/sunlight, +/obj/effect/decal/remains/wolf, +/turf/open/transparent/openspace, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"ifJ" = ( +/obj/structure/fluff/railing/border{ + dir = 9; + icon_state = "border" + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/manorgarri) +"ifN" = ( +/obj/effect/spawner/roguemap/loot/random_gem, +/turf/open/water/cleanshallow, +/area/rogue) +"igK" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 9 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"igN" = ( +/obj/structure/stairs/stone/reddish, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/bath/redhouse) +"ihA" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 9 + }, +/obj/effect/decal/turfedge_neu/mossy{ + dir = 10 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"ihM" = ( +/obj/structure/flora/roguetree/burnt, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"ihR" = ( +/obj/structure/table/wood/plain_alt, +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church) +"ihX" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/flora/roguetree/burnt, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"iim" = ( +/obj/structure/winch{ + dir = 1; + gid = "keepin" + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"iiz" = ( +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/outdoors/exposed/manorgarri) +"iiH" = ( +/obj/structure/mineral_door/wood/violet{ + locked = 1; + lockid = "nightmaiden"; + name = "roof access" + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/bath/redhouse) +"ijA" = ( +/obj/machinery/light/rogue/firebowl/stump{ + pixel_y = 8 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"ijC" = ( +/obj/structure/stairs{ + dir = 1; + icon_state = "stairs" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"ijK" = ( +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"ikx" = ( +/turf/open/floor/rogue/grass/yelmix, +/area/rogue/outdoors/rtfield/woodish) +"ikE" = ( +/obj/item/natural/rock/copper, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"ikO" = ( +/obj/structure/closet/dirthole/grave, +/obj/effect/decal/miasma, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"ikR" = ( +/obj/structure/table/wood{ + dir = 10; + icon_state = "tablewood2" + }, +/obj/item/fishingrod/crafted, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/shelter/bog) +"ikT" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 6 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"ilE" = ( +/obj/structure/fluff/clodpile, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"imT" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"imW" = ( +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"inx" = ( +/obj/item/reagent_containers/food/snacks/produce/onion, +/obj/item/reagent_containers/food/snacks/produce/cabbage, +/obj/item/reagent_containers/food/snacks/produce/potato, +/obj/structure/closet/crate/chest/wicker, +/turf/open/floor/rogue/concrete, +/area/rogue/under/town/basement) +"inB" = ( +/obj/structure/fluff/walldeco/goblet{ + name = "Mercator Guild sign"; + pixel_y = -19 + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"inD" = ( +/obj/structure/rack/rogue/shelf/notdense{ + pixel_x = -32; + pixel_y = 29 + }, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/dwarfin) +"inX" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/outlaw) +"iof" = ( +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/church) +"iox" = ( +/obj/item/clothing/mask/cigarette/rollie/nicotine{ + pixel_x = 5; + pixel_y = 35 + }, +/obj/item/clothing/mask/cigarette/rollie/nicotine{ + pixel_x = -5; + pixel_y = 35 + }, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/garrison) +"ioD" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"ioQ" = ( +/obj/structure/flora/ausbushes/ppflowers, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"ioS" = ( +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"ioW" = ( +/obj/effect/landmark/start/monk{ + dir = 4 + }, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church/chapel) +"ipb" = ( +/obj/effect/landmark/start/feldsher{ + dir = 1 + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/under/town/basement) +"ipK" = ( +/obj/structure/fluff/telescope, +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/town/roofs) +"ipR" = ( +/obj/structure/table/wood{ + icon_state = "map6" + }, +/obj/item/natural/feather, +/turf/open/floor/rogue/carpet/lord/center, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"ipX" = ( +/obj/item/roguebin/water/gross, +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"iqb" = ( +/obj/structure/table/church, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church/chapel) +"iqm" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/obj/effect/decal/cleanable/dirt/cobweb, +/obj/structure/rack/rogue/shelf/biggest, +/obj/item/reagent_containers/glass/bottle/rogue/wine, +/obj/item/reagent_containers/glass/bottle/rogue/wine, +/obj/item/reagent_containers/glass/bottle/rogue/wine, +/obj/item/reagent_containers/glass/bottle/rogue/wine, +/obj/item/reagent_containers/glass/bottle/rogue/wine, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"iqN" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 4; + icon_state = "wooddir"; + locked = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"iqT" = ( +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/church) +"iqZ" = ( +/obj/structure/flora/rock/pile, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"irT" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1 + }, +/obj/structure/flora/roguegrass, +/obj/structure/fluff/walldeco/vinez{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"irY" = ( +/obj/structure/fluff/clock, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"isc" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/sword/sabre/dec, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"isk" = ( +/obj/structure/mineral_door/wood{ + icon_state = "wcr"; + locked = 1; + lockid = "garrison"; + name = "Town watch" + }, +/turf/open/floor/rogue/cobblerock, +/area/rogue/indoors/town/garrison) +"ism" = ( +/obj/item/candle/yellow/lit/infinite/strong{ + pixel_x = 0; + pixel_y = 4 + }, +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/town/tavern/saiga) +"iso" = ( +/obj/structure/mineral_door/bars{ + locked = 1; + lockid = "walls" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/church) +"ist" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 8 + }, +/area/rogue/indoors/shelter/mountains/decap) +"isQ" = ( +/obj/item/chair/stool/bar/rogue, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/mountains) +"isW" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/concrete, +/area/rogue/under/town/basement) +"itF" = ( +/obj/structure/fluff/clodpile, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"iuE" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/statue/gargoyle/moss, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/town/hamlet) +"iuI" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"ivi" = ( +/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/shelter/mountains/decap) +"ivx" = ( +/obj/effect/spawner/roguemap/hauntz_random, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"ivG" = ( +/obj/structure/flora/roguetree/burnt, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"ivL" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/fluff/railing/wood{ + dir = 4; + icon_state = "woodrailing" + }, +/obj/structure/flora/roguegrass, +/obj/machinery/light/rogue/firebowl, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"iwd" = ( +/obj/structure/fluff/walldeco/painting/seraphina{ + pixel_x = -32 + }, +/turf/open/floor/carpet/red, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"iwt" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/bath/redhouse) +"iwE" = ( +/obj/structure/ladder, +/obj/effect/decal/cleanable/dirt/cobweb{ + dir = 1 + }, +/obj/structure/fluff/statue/gargoyle/moss, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"iwL" = ( +/obj/structure/lever{ + name = "execution lever"; + redstone_id = "volfpit" + }, +/turf/open/floor/rogue/carpet/lord/left, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"iwS" = ( +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"iwZ" = ( +/obj/structure/lever/wall{ + dir = 4; + redstone_id = "warehouse_shutter" + }, +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"ixh" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/obj/structure/closet/crate/roguecloset/dark, +/obj/item/ship_in_a_bottle, +/obj/item/bomb{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/trash/applecore, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"ixB" = ( +/obj/structure/table/church/m, +/obj/item/handheld_bell{ + pixel_x = -13; + pixel_y = 16 + }, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church/chapel) +"ixK" = ( +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors) +"ixW" = ( +/obj/structure/fluff/walldeco/psybanner/red, +/turf/closed/wall/mineral/rogue/decostone, +/area/rogue/indoors/town/church/chapel) +"ixZ" = ( +/obj/item/reagent_containers/glass/bottle/mercury, +/obj/structure/rack/rogue/shelf/biggest{ + name = "water humors" + }, +/obj/item/reagent_containers/glass/bottle/lithium, +/obj/item/reagent_containers/glass/bottle/ammonia, +/obj/item/reagent_containers/glass/bottle/fluorine, +/obj/item/reagent_containers/glass/bottle/rogue/manapot, +/obj/item/reagent_containers/glass/bottle/rogue/water, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"iyb" = ( +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/magiciantower) +"iyr" = ( +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"iyB" = ( +/obj/structure/roguetent/preopen, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/church) +"iyS" = ( +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"izo" = ( +/obj/structure/fluff/walldeco/vinez/l, +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"izp" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1; + icon_state = "stonehedge_aged" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"iAL" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguetree/burnt, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"iAT" = ( +/obj/structure/flora/roguetree/burnt, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"iBh" = ( +/obj/structure/curtain/bounty, +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"iBi" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 8 + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"iBH" = ( +/obj/structure/rack/rogue, +/obj/item/reagent_containers/glass/bottle/rogue/healthpot, +/obj/item/reagent_containers/glass/bottle/rogue/poison, +/obj/item/reagent_containers/glass/bottle/rogue/healthpot, +/obj/item/reagent_containers/glass/bottle/rogue/manapot, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"iBQ" = ( +/obj/structure/roguetent/preopen, +/obj/structure/fluff/walldeco/bath/wallrope{ + dir = 8 + }, +/obj/structure/fluff/walldeco/bath/wallrope{ + dir = 4 + }, +/turf/open/floor/rogue/tile/bath, +/area/rogue/indoors/town/bath/redhouse) +"iBU" = ( +/obj/structure/mineral_door/wood/deadbolt{ + locked = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"iCd" = ( +/obj/structure/flora/rock/pile, +/obj/structure/fluff/railing/stonehedge{ + dir = 1; + icon_state = "stonehedge_aged" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"iCp" = ( +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/shop) +"iCu" = ( +/obj/effect/spawner/roguemap/hauntz_random, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"iCX" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 8 + }, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"iDr" = ( +/obj/structure/rack/rogue, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/town/garrison) +"iDy" = ( +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"iDL" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"iDN" = ( +/turf/closed/mineral/rogue, +/area/rogue/indoors/shelter/mountains) +"iDQ" = ( +/obj/structure/closet/crate/roguecloset/crafted, +/obj/item/clothing/mask/gas/sexymime{ + name = "pantomime mask" + }, +/obj/item/clothing/mask/pig, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"iEe" = ( +/obj/item/roguestatue/silver, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/vault) +"iEh" = ( +/obj/structure/flora/roguetree, +/turf/open/water/swamp, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"iEt" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle{ + dir = 8 + }, +/area/rogue/indoors/town/magician) +"iEP" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"iEZ" = ( +/turf/closed/wall/mineral/rogue/pipe{ + dir = 1; + icon_state = "iron_corner" + }, +/area/rogue/indoors/town) +"iFi" = ( +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/church) +"iFv" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 4; + icon_state = "torchwall1" + }, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"iFF" = ( +/obj/structure/fluff/railing/border, +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/cell) +"iGb" = ( +/obj/structure/table/wood/reinforced_alter, +/obj/structure/bars/alt, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/dwarfin) +"iGd" = ( +/obj/structure/bed/rogue/shit, +/obj/effect/landmark/start/gravedigger{ + dir = 1 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) +"iGn" = ( +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/obj/machinery/light/rogue/torchholder/c{ + pixel_y = -32 + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/dwarf) +"iGx" = ( +/obj/structure/closet/crate/chest/wicker, +/obj/item/reagent_containers/food/snacks/produce/apple, +/obj/item/reagent_containers/food/snacks/produce/apple, +/obj/item/reagent_containers/food/snacks/produce/apple, +/obj/item/reagent_containers/food/snacks/produce/apple, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"iGU" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/shelter/town/dwarf) +"iGZ" = ( +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/outdoors/rtfield/woodish) +"iHy" = ( +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"iIc" = ( +/obj/effect/landmark/start/vagrant{ + dir = 8; + icon_state = "arrow" + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"iId" = ( +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"iIo" = ( +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"iIw" = ( +/turf/open/water/swamp, +/area/rogue/outdoors/rtfield/hamlet) +"iJu" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"iJO" = ( +/obj/structure/roguetent, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors) +"iJP" = ( +/obj/effect/decal/cleanable/blood/gibs/limb, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"iKc" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 6 + }, +/obj/structure/fluff/walldeco/innsign{ + pixel_x = 32 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"iKe" = ( +/obj/structure/bed/rogue/inn, +/obj/item/bedsheet/rogue/pelt, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"iLu" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"iLy" = ( +/obj/structure/roguewindow/openclose{ + dir = 1; + icon_state = "woodwindowdir" + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/shop) +"iLF" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"iLK" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/obj/structure/roguemachine/camera/left, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"iLY" = ( +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town) +"iMX" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop/green{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"iNk" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "manor" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"iNo" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"iNB" = ( +/obj/effect/decal/turfedge_neu{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"iNM" = ( +/obj/structure/rack/rogue/shelf/notdense{ + pixel_y = 87 + }, +/turf/closed/wall/mineral/rogue/stonebrick/reddish, +/area/rogue/indoors/town/bath/redhouse) +"iNR" = ( +/obj/structure/table/wood/nice/decorated, +/obj/item/flint{ + pixel_y = 6 + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town) +"iNT" = ( +/obj/structure/bars, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/under/basement) +"iNY" = ( +/turf/open/floor/rogue/oak, +/area/rogue/outdoors) +"iOn" = ( +/obj/machinery/light/rogue/campfire, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/mountains) +"iOC" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/effect/spawner/roguemap/seeds, +/obj/effect/spawner/roguemap/seeds, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"iOI" = ( +/obj/structure/fluff/walldeco/bath/wallrope{ + dir = 4 + }, +/turf/closed/wall/mineral/rogue/stonebrick/reddish, +/area/rogue/indoors/town/bath/redhouse) +"iOR" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"iPk" = ( +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors) +"iQP" = ( +/obj/structure/mineral_door/wood{ + icon_state = "wcr"; + locked = 1; + lockid = "sheriff" + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"iRp" = ( +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/indoors/town/cell) +"iRs" = ( +/obj/structure/bed/rogue/shit, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"iTK" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/exposed/dwarf) +"iTP" = ( +/obj/structure/flora/roguetree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"iTU" = ( +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/church, +/area/rogue/indoors/town/church) +"iUb" = ( +/obj/structure/fluff/psycross/crafted, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"iUI" = ( +/obj/structure/fluff/railing/border, +/obj/structure/fluff/walldeco/masonflag{ + pixel_y = 32 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/exposed/dwarf) +"iUY" = ( +/obj/structure/fluff/statue/knight/r, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/town/hamlet) +"iVM" = ( +/turf/open/water/cleanshallow, +/area/rogue/outdoors/rtfield/hamlet) +"iWf" = ( +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"iWG" = ( +/obj/structure/flora/rock/pile, +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"iWN" = ( +/obj/structure/bars/pipe{ + dir = 8; + icon_state = "pipe" + }, +/obj/structure/bars/pipe{ + dir = 6; + icon_state = "pipe" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"iXr" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"iYv" = ( +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/garrison) +"iZa" = ( +/obj/item/natural/stone, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"jaf" = ( +/turf/closed/mineral/rogue/bedrock, +/area/rogue/under/town/caverogue{ + first_time_text = "DEEP MINESHAFT" + }) +"jam" = ( +/obj/structure/rack/rogue, +/obj/item/quiver/arrows, +/obj/item/gun/ballistic/revolver/grenadelauncher/bow, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"jan" = ( +/obj/effect/landmark/start/archivist{ + dir = 1 + }, +/turf/open/floor/rogue/carpet/lord/right, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"jap" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/pitchfork, +/obj/item/rogueweapon/pitchfork, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"jaP" = ( +/obj/structure/flora/rogueflower/reedbush, +/turf/open/water/swamp/deep, +/area/rogue/outdoors/rtfield/hamlet) +"jbh" = ( +/obj/structure/flora/roguetree, +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"jbl" = ( +/obj/machinery/light/rogue/hearth, +/obj/item/cooking/pan, +/obj/item/reagent_containers/food/snacks/rogue/friedegg, +/turf/open/floor/rogue/tile/masonic/single, +/area/rogue/indoors/town/magician) +"jbo" = ( +/obj/machinery/light/rogue/torchholder/c{ + pixel_x = -32 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"jbv" = ( +/obj/structure/bed/rogue, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"jbw" = ( +/obj/structure/roguetent/preopen, +/obj/structure/fluff/walldeco/bath/wallrope{ + dir = 4 + }, +/obj/structure/fluff/walldeco/bath/wallrope{ + dir = 8 + }, +/turf/open/floor/rogue/tile/bath, +/area/rogue/indoors/town/bath/redhouse) +"jbx" = ( +/obj/structure/table/wood{ + dir = 10; + icon_state = "tablewood2" + }, +/obj/item/reagent_containers/glass/cup/wooden, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/town/roofs) +"jbJ" = ( +/obj/effect/decal/turfedge_neu/alt, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"jbL" = ( +/obj/structure/mineral_door/wood/donjon/stone{ + lockid = "church" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/church) +"jcn" = ( +/obj/structure/fluff/statue/small, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"jcv" = ( +/turf/open/floor/rogue/ruinedwood, +/area/rogue/outdoors) +"jcK" = ( +/obj/structure/closet/dirthole/grave, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"jcR" = ( +/turf/closed/wall/mineral/rogue/decostone/long{ + dir = 1 + }, +/area/rogue/indoors/town/church/chapel) +"jdc" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/oak, +/area/rogue) +"jek" = ( +/obj/structure/roguemachine/scomm/l, +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"jeq" = ( +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/entrance{ + first_time_text = "Rockhamlet" + }) +"jes" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 4 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/manorgarri) +"jeC" = ( +/obj/structure/fluff/signage{ + desc = "Neatly written in precise blocky letters, probably by a dwarf."; + dir = 8; + name = "TO MINE" + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"jeN" = ( +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/obj/structure/toilet, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"jeY" = ( +/obj/effect/landmark/start/vagrant{ + dir = 1; + icon_state = "arrow" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"jfx" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"jfB" = ( +/obj/structure/fluff/walldeco/masonflag{ + pixel_y = 32 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/dwarfin) +"jfH" = ( +/obj/structure/fluff/clodpile, +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"jge" = ( +/obj/structure/rack/rogue, +/obj/item/natural/cloth, +/obj/item/natural/cloth, +/obj/effect/decal/shadow_floor, +/obj/item/candle/yellow/lit/infinite/strong{ + pixel_x = 0; + pixel_y = 32 + }, +/turf/open/floor/rogue/tile/bath, +/area/rogue/indoors/town/bath/redhouse) +"jgk" = ( +/obj/structure/rack/rogue, +/obj/item/flashlight/flare/torch/lantern, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"jgY" = ( +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/indoors/town/entrance{ + first_time_text = "Rockhamlet" + }) +"jhJ" = ( +/obj/structure/nocdevice{ + pixel_y = 1 + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/magician) +"jhK" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 8; + icon_state = "stonehedge_aged" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"jhL" = ( +/obj/structure/roguemachine/scomm/r, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town) +"jih" = ( +/obj/structure/roguemachine/scomm, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"jiZ" = ( +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/indoors/town) +"jja" = ( +/obj/machinery/light/rogue/torchholder/l, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/town/hamlet) +"jjF" = ( +/obj/structure/flora/rogueflower/lavendergrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"jkc" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"jkt" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"jkv" = ( +/obj/item/grown/log/tree/small, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"jlg" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/head/roguetown/helmet/bascinet, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"jlE" = ( +/obj/structure/table/church{ + dir = 1 + }, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church/chapel) +"jlJ" = ( +/obj/structure/stairs/stone, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town) +"jlO" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"jma" = ( +/obj/structure/fermenting_barrel, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"jml" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 5 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"jmK" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop/green{ + dir = 4 + }, +/area/rogue/outdoors) +"jne" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"jnB" = ( +/obj/effect/landmark/start/templar{ + dir = 1 + }, +/turf/open/floor/rogue/sandstone/shaded, +/area/rogue/indoors/town/church/chapel) +"jnF" = ( +/turf/closed/wall/mineral/rogue/decostone/chimney, +/area/rogue/outdoors/mountains) +"jnK" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/sickle, +/obj/item/rogueweapon/sickle, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"jnQ" = ( +/obj/structure/mineral_door/wood/donjon{ + dir = 1; + lockid = "walls" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"jnS" = ( +/obj/structure/rack/rogue, +/obj/effect/decal/cleanable/dirt/cobweb{ + dir = 1 + }, +/obj/item/ammo_casing/caseless/rogue/bullet, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/magician) +"jpH" = ( +/turf/closed/wall/mineral/rogue/stone/window/moss, +/area/rogue/indoors/town) +"jpJ" = ( +/obj/structure/fluff/walldeco/vinez/l{ + dir = 4 + }, +/obj/structure/fluff/walldeco/vinez/offset{ + dir = 5 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"jpW" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/goatmale{ + aggressive = 1; + name = "mountain goat"; + wander = 0 + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/indoors/shelter/mountains) +"jqC" = ( +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/dwarfin) +"jqM" = ( +/obj/structure/stairs{ + dir = 4; + icon_state = "stairs" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/tavern/saiga) +"jqP" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1 + }, +/obj/machinery/light/rogue/wallfire/candle/lamp{ + pixel_y = -32 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"jqW" = ( +/obj/structure/roguemachine/scomm/l, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"jrk" = ( +/obj/structure/closet/crate/chest/neu_fancy, +/obj/item/reagent_containers/powder/spice, +/obj/item/reagent_containers/powder/spice, +/obj/item/reagent_containers/powder/spice, +/obj/item/reagent_containers/powder/ozium, +/obj/item/reagent_containers/powder/moondust, +/turf/open/floor/rogue/tile/masonic/inverted, +/area/rogue/indoors/town/magician) +"jrP" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/exposed/manorgarri) +"jrU" = ( +/obj/structure/mineral_door/wood/donjon{ + locked = 1; + lockid = "armorsmith"; + name = "blacksmiths quarters" + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town) +"jsn" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue) +"jsw" = ( +/obj/effect/spawner/roguemap/hauntz_random, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"jtc" = ( +/obj/structure/disposalpipe/broken{ + dir = 4 + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"jtB" = ( +/obj/machinery/light/rogue/firebowl, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/caverogue{ + first_time_text = "DEEP MINESHAFT" + }) +"juf" = ( +/obj/structure/roguetent, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/shelter/mountains) +"juC" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "manor" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"jvj" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/mountains) +"jvw" = ( +/obj/structure/fluff/railing/border, +/obj/structure/bed/rogue/shit, +/obj/item/bedsheet/rogue/pelt, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"jvY" = ( +/obj/item/reagent_containers/food/snacks/fat/salo, +/obj/structure/closet/crate/chest/neu, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/under/basement) +"jwk" = ( +/turf/closed/mineral/rogue, +/area/rogue/under/town/basement) +"jwr" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 4; + icon_state = "torchwall1" + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/soilsons) +"jwy" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/rogueweapon/pick{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/rogueweapon/hammer{ + pixel_x = 9; + pixel_y = 3 + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"jwS" = ( +/obj/structure/roguewindow/openclose{ + dir = 1; + icon_state = "woodwindowdir" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"jxi" = ( +/obj/structure/flora/roguegrass, +/obj/machinery/light/rogue/firebowl/stump{ + pixel_y = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"jxG" = ( +/obj/item/reagent_containers/glass/bucket/pot, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"jxO" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"jyq" = ( +/obj/effect/decal/cleanable/dirt/cobweb{ + dir = 1 + }, +/obj/machinery/light/rogue/wallfire{ + pixel_y = 32 + }, +/obj/structure/bed/rogue, +/obj/item/bedsheet/rogue/pelt, +/turf/open/floor/rogue/tile/masonic/inverted, +/area/rogue/indoors/town/magician) +"jyr" = ( +/obj/structure/flora/roguetree/burnt, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"jyv" = ( +/obj/structure/roguewindow/stained{ + opacity = 0 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/church/chapel) +"jyw" = ( +/turf/open/transparent/openspace, +/area/rogue/indoors/shelter/mountains) +"jyR" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "tavern"; + name = "backroom" + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern/saiga) +"jyY" = ( +/obj/structure/stairs/stone{ + dir = 8 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/town/basement) +"jzs" = ( +/obj/structure/table/wood{ + dir = 1; + icon_state = "longtable" + }, +/obj/item/natural/feather, +/obj/item/candle/yellow/lit, +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/outdoors/exposed/under/basement) +"jzA" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/bigrat, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"jzS" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"jAe" = ( +/turf/open/floor/rogue/oak, +/area/rogue/indoors/town/cell) +"jAy" = ( +/obj/effect/landmark/mapGenerator/rogue/stonehamlet, +/turf/closed/mineral/rogue/bedrock, +/area/rogue) +"jAJ" = ( +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/obj/item/ash{ + pixel_y = 9 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"jAK" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 9 + }, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"jAV" = ( +/obj/structure/roguemachine/scomm, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"jBh" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/rock/pile, +/obj/structure/fluff/railing/stonehedge{ + dir = 1; + icon_state = "stonehedge_aged" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"jBJ" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/obj/item/grown/log/tree/small, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"jBZ" = ( +/obj/structure/fluff/statue/gargoyle/moss/candles, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/town/hamlet) +"jCk" = ( +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors) +"jCF" = ( +/obj/structure/mineral_door/wood/donjon/stone{ + lockid = "puritan"; + name = "confession chamber" + }, +/turf/open/floor/rogue/church, +/area/rogue/under/town/basement) +"jCI" = ( +/obj/item/natural/worms, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/plague_district) +"jCP" = ( +/turf/closed/mineral/rogue/bedrock, +/area/rogue/outdoors/mountains) +"jDn" = ( +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"jDF" = ( +/turf/closed/wall/mineral/rogue/wood, +/area/rogue/indoors) +"jDH" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/bath/redhouse) +"jDN" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/natural/cloth, +/obj/item/natural/cloth, +/obj/item/natural/cloth, +/obj/item/needle/thorn, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/church) +"jDX" = ( +/obj/machinery/light/rogue/wallfire/candle/blue/l, +/turf/open/floor/rogue/metal, +/area/rogue/indoors/town) +"jDZ" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle{ + dir = 8 + }, +/area/rogue/indoors/shelter/mountains/decap) +"jEO" = ( +/turf/closed/wall/mineral/rogue/decostone/cand, +/area/rogue/indoors) +"jEV" = ( +/obj/structure/mineral_door/wood/fancywood{ + name = "privy" + }, +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern/saiga) +"jFd" = ( +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"jFh" = ( +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 5; + icon_state = "border" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"jFj" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"jFA" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/thresher{ + pixel_x = -3 + }, +/obj/item/rogueweapon/thresher{ + pixel_x = -3 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"jFQ" = ( +/obj/structure/fluff/railing/border{ + dir = 9; + icon_state = "border" + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/bath/redhouse) +"jGc" = ( +/obj/structure/fluff/walldeco/bath/wallrope{ + dir = 8 + }, +/turf/closed/wall/mineral/rogue/stonebrick/reddish, +/area/rogue/indoors/town/bath/redhouse) +"jGr" = ( +/obj/structure/fermenting_barrel/random/beer, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"jGA" = ( +/obj/structure/closet/crate/chest/wicker, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"jGD" = ( +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/tailor) +"jGG" = ( +/obj/structure/closet/dirthole/grave, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"jGY" = ( +/obj/structure/flora/rock/pile, +/obj/structure/fluff/railing/stonehedge{ + dir = 1 + }, +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"jHi" = ( +/obj/structure/fluff/railing/wood, +/turf/open/transparent/openspace, +/area/rogue/under/town/caverogue{ + first_time_text = "DEEP MINESHAFT" + }) +"jHy" = ( +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/obj/structure/rack/rogue, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"jHG" = ( +/obj/structure/flora/roguegrass, +/turf/closed/mineral/rogue/bedrock, +/area/rogue) +"jIv" = ( +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/mountains) +"jIR" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"jIU" = ( +/obj/structure/flora/roguegrass/water, +/obj/structure/roguerock, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"jJi" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 6 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"jJk" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 1 + }, +/obj/machinery/simple_dye_bin, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"jJw" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 9 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"jJC" = ( +/obj/effect/landmark/start/priest, +/turf/open/floor/rogue/sandstone, +/area/rogue/indoors/town/church/chapel) +"jJO" = ( +/obj/machinery/light/rogue/torchholder/l, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"jJQ" = ( +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church/chapel) +"jLa" = ( +/obj/effect/landmark/start/blacksmith{ + dir = 1 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"jLh" = ( +/obj/structure/flora/roguetree, +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"jLu" = ( +/obj/effect/decal/remains/wolf, +/obj/item/ammo_casing/caseless/rogue/bolt, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"jMn" = ( +/obj/machinery/light/rogue/torchholder/r, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"jMp" = ( +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/church, +/area/rogue/under/town/basement) +"jMF" = ( +/obj/structure/flora/roguegrass, +/obj/effect/sunlight, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"jMT" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/church) +"jMV" = ( +/obj/structure/mineral_door/wood/fancywood{ + lockid = "priest" + }, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/church) +"jNs" = ( +/obj/structure/bed/rogue/shit, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"jNI" = ( +/obj/item/roguebin/water/gross, +/obj/structure/fluff/walldeco/bath/wallpipes{ + pixel_x = 16; + pixel_y = 23 + }, +/turf/open/floor/rogue/blocks/paving, +/area/rogue/indoors/town/bath/redhouse) +"jNN" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 8 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"jOm" = ( +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/obj/structure/flora/roguegrass, +/turf/open/water/cleanshallow, +/area/rogue/outdoors/exposed/under/basement) +"jOn" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/outdoors/exposed/manorgarri) +"jOB" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/tile/masonic/spiral, +/area/rogue/outdoors/exposed/under/basement) +"jPp" = ( +/obj/item/rogueweapon/sword/long/exe, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"jPr" = ( +/obj/item/reagent_containers/glass/cup/wooden, +/obj/effect/decal/cleanable/vomit/old, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"jPE" = ( +/obj/effect/sunlight, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/mountains) +"jPX" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 4; + icon_state = "torchwall1" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"jQM" = ( +/obj/structure/fluff/walldeco/steward{ + name = "tailor sign"; + pixel_y = 29 + }, +/turf/open/floor/rogue/oak/stage{ + icon_state = "stageoak_b" + }, +/area/rogue/outdoors/exposed/town/hamlet) +"jRb" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/outlaw) +"jRc" = ( +/obj/structure/fluff/railing/border, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop/green{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"jRf" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"jRM" = ( +/obj/effect/decal/remains/human/old, +/obj/item/roguecoin/copper, +/obj/item/roguecoin/copper, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/catacombs) +"jRP" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"jSb" = ( +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/town/hamlet) +"jTE" = ( +/obj/structure/fluff/walldeco/vinez/l, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"jTK" = ( +/obj/structure/ladder/earth, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"jTR" = ( +/obj/effect/decal/cleanable/blood/gibs/core, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"jTS" = ( +/obj/structure/mineral_door/wood{ + icon_state = "wcr"; + locked = 1; + lockid = "garrison"; + name = "storage" + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/garrison) +"jTV" = ( +/obj/structure/closet/crate/roguecloset/crafted, +/obj/item/reagent_containers/glass/bucket/wooden/alter, +/obj/item/natural/cloth{ + pixel_x = 3; + pixel_y = 5 + }, +/obj/item/broom, +/turf/open/floor/rogue/concrete, +/area/rogue/under/town/basement) +"jUp" = ( +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"jUD" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "roomii"; + name = "Wanderer room" + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern/saiga) +"jUG" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle{ + dir = 8 + }, +/area/rogue) +"jUW" = ( +/obj/effect/decal/remains/human/old, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/catacombs) +"jVk" = ( +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"jVq" = ( +/obj/structure/mineral_door/wood/window{ + locked = 1; + lockid = "tavern"; + name = "kitchen" + }, +/obj/effect/decal/turfedge_neu{ + dir = 8 + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern/saiga) +"jVr" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/trufflepig, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors) +"jVD" = ( +/obj/structure/fluff/walldeco/steward{ + dir = 1; + icon_state = "steward"; + name = "BANK OF ROCKHAMLET" + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"jVO" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"jWx" = ( +/obj/structure/ladder, +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"jWB" = ( +/obj/structure/bars/pipe, +/turf/open/floor/rogue/rooftop/green{ + dir = 1 + }, +/area/rogue/outdoors/town/roofs) +"jWD" = ( +/obj/structure/flora/roguegrass/stalky, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"jXo" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"jXz" = ( +/obj/item/grown/log/tree/small, +/obj/item/grown/log/tree/small, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/magician) +"jXM" = ( +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/obj/structure/flora/roguegrass, +/turf/open/water/cleanshallow, +/area/rogue/outdoors/exposed/under/basement) +"jXR" = ( +/turf/closed/mineral/rogue/bedrock, +/area/rogue/under/cave) +"jYl" = ( +/obj/effect/decal/remains/human/old/small, +/obj/item/natural/worms, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"jYy" = ( +/obj/item/reagent_containers/glass/bucket/wooden/alter, +/obj/effect/decal/turfedge_neu/alt{ + dir = 5 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town/cell) +"jYW" = ( +/obj/structure/fluff/railing/border{ + dir = 9; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town) +"jZz" = ( +/turf/open/floor/rogue/church, +/area/rogue/indoors/town/church) +"jZE" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/outdoors/exposed/manorgarri) +"jZF" = ( +/obj/structure/bars/pipe{ + dir = 10; + icon_state = "pipe" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"kah" = ( +/obj/structure/fluff/walldeco/vinez/l, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"kan" = ( +/obj/structure/roguewindow/solid, +/obj/structure/fluff/walldeco/vinez, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"kas" = ( +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/river) +"kau" = ( +/obj/structure/fluff/walldeco/customflag{ + pixel_x = -32 + }, +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"kbl" = ( +/turf/open/floor/rogue/carpet/lord/right, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"kcx" = ( +/obj/structure/roguemachine/scomm/r, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/magician) +"kdB" = ( +/obj/structure/fluff/walldeco/stone, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/outdoors/mountains) +"kdD" = ( +/obj/item/reagent_containers/glass/bottle/potion/flight, +/obj/structure/rack/rogue/shelf/biggest{ + name = "air humors" + }, +/obj/item/reagent_containers/glass/bottle/aluminium, +/obj/item/reagent_containers/glass/bottle/silver, +/obj/item/reagent_containers/glass/bottle/sacid, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"kdL" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors) +"kdQ" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"kel" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/item/rogueweapon/knife/stone, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/shelter/bog) +"keH" = ( +/turf/open/floor/rogue/ruinedwood/turned, +/area/rogue/outdoors/rtfield/boggish) +"kft" = ( +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/dwarfin) +"kfw" = ( +/obj/effect/landmark/start/manorguardsman, +/turf/open/floor/rogue/carpet/lord/right, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"kfF" = ( +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"kgO" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 5 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"kgX" = ( +/obj/structure/fermenting_barrel/random/water, +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church) +"khd" = ( +/obj/structure/fluff/railing/stonehedge{ + icon_state = "stonehedge_aged" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"khl" = ( +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town) +"kho" = ( +/obj/structure/fluff/walldeco/masonflag{ + pixel_x = -32 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) +"khr" = ( +/obj/structure/flora/roguegrass/bush_meagre, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"khv" = ( +/obj/effect/spawner/roguemap/beartrap_obvious, +/turf/open/floor/rogue/ruinedwood/turned, +/area/rogue/outdoors/rtfield/hamlet) +"khz" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"khA" = ( +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"khQ" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/obj/structure/flora/roguegrass/bush/wall, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"kiI" = ( +/obj/item/roguebin/alt, +/obj/structure/fluff/walldeco/bath/six, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/bath/redhouse) +"kiO" = ( +/obj/machinery/light/rogue/wallfire/candle, +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/under/basement) +"kiP" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 6 + }, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/garrison) +"kjb" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"kji" = ( +/obj/structure/flora/roguegrass, +/obj/effect/spawner/roguemap/hauntz_random, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"kjq" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"kjt" = ( +/obj/structure/fluff/railing/wood{ + dir = 8; + icon_state = "woodrailing"; + pixel_y = -1 + }, +/obj/structure/fluff/railing/wood, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"kki" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/needle/thorn, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/soilsons) +"kkl" = ( +/obj/structure/fluff/walldeco/masonflag{ + pixel_x = -32 + }, +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/clothing/mask/cigarette/pipe/westman, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"kkq" = ( +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) +"kku" = ( +/obj/structure/fluff/walldeco/wantedposter, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/entrance{ + first_time_text = "Rockhamlet" + }) +"kkJ" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"klW" = ( +/obj/item/reagent_containers/food/snacks/rogue/meat/salami, +/obj/item/reagent_containers/food/snacks/rogue/meat/salami, +/obj/structure/closet/crate/chest/old_crate, +/obj/item/reagent_containers/food/snacks/rogue/cheddar, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/bath/redhouse) +"kmf" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/shelter/rtfield) +"kmk" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 1 + }, +/area/rogue/indoors/town/magician) +"kmu" = ( +/obj/structure/fermenting_barrel/random/beer, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/under/basement) +"kmE" = ( +/obj/structure/mirror/alt{ + pixel_x = 28; + pixel_y = 0 + }, +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/under/town/basement) +"kmF" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop/green{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"kmL" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 8; + name = "privy" + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"kmR" = ( +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/indoors/town/shop) +"knM" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"koe" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/town/roofs) +"koW" = ( +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"koX" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/mountains) +"kpf" = ( +/obj/structure/table/wood, +/obj/structure/bars{ + icon_state = "barsbent"; + layer = 2.81 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/entrance{ + first_time_text = "Rockhamlet" + }) +"kpt" = ( +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/reagent_containers/powder/ozium, +/obj/item/natural/cloth, +/obj/item/needle, +/obj/item/needle, +/obj/item/natural/cloth, +/turf/open/floor/rogue/church, +/area/rogue/under/town/basement) +"kqd" = ( +/obj/structure/mineral_door/wood/window{ + lockid = "butcher"; + name = "butchers house" + }, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"kqy" = ( +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/bath/redhouse) +"kqz" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "manor" + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/under/basement) +"kqA" = ( +/turf/open/transparent/openspace, +/area/rogue/indoors/soilsons) +"krw" = ( +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/outdoors/town/roofs) +"krS" = ( +/turf/open/floor/rogue/rooftop/green{ + dir = 1 + }, +/area/rogue/outdoors) +"ksi" = ( +/turf/closed/wall/mineral/rogue/wooddark/end{ + dir = 8; + icon_state = "endwooddark" + }, +/area/rogue/indoors) +"ksr" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"ksN" = ( +/obj/effect/decal/cleanable/blood/gibs/down, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"ksQ" = ( +/turf/closed/wall/mineral/rogue/decostone/cand, +/area/rogue/indoors/town) +"ksW" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"ktl" = ( +/turf/closed/wall/mineral/rogue/wooddark/vertical, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"kun" = ( +/turf/open/transparent/openspace, +/area/rogue/indoors/town/garrison) +"kup" = ( +/obj/structure/fluff/walldeco/bath/wallrope{ + dir = 5 + }, +/turf/closed/wall/mineral/rogue/stonebrick/reddish, +/area/rogue/indoors/town/bath/redhouse) +"kux" = ( +/obj/structure/bars/passage/shutter{ + redstone_id = "warehouse_shutter" + }, +/turf/open/floor/rogue/metal/barograte, +/area/rogue/indoors/town) +"kuA" = ( +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/bath/redhouse) +"kuC" = ( +/obj/structure/roguemachine/scomm{ + pixel_y = -32 + }, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/magician) +"kuJ" = ( +/obj/structure/innkeep_rack{ + pixel_y = 31 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"kuQ" = ( +/obj/machinery/light/rogue/torchholder{ + pixel_x = 32 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"kvv" = ( +/turf/closed/wall/mineral/rogue/stonebrick, +/area/rogue/under/town/basement) +"kvC" = ( +/obj/effect/decal/turfedge_neu/alt_small{ + dir = 1 + }, +/obj/structure/fermenting_barrel/random/water, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"kvS" = ( +/turf/closed/wall/mineral/rogue/wooddark/slitted, +/area/rogue/indoors/town/church) +"kwb" = ( +/obj/structure/bed/rogue/inn, +/obj/item/bedsheet/rogue/pelt, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church) +"kwe" = ( +/obj/structure/flora/roguegrass, +/obj/item/roguebin, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/town) +"kwX" = ( +/obj/structure/fluff/railing/border, +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/town/roofs) +"kwY" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/mountains) +"kxd" = ( +/obj/structure/flora/roguegrass, +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"kxm" = ( +/obj/structure/fluff/walldeco/bath/ladies, +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/bath/redhouse) +"kxy" = ( +/obj/structure/mineral_door/wood/window{ + locked = 1; + lockid = "manor" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"kxE" = ( +/obj/structure/bed/rogue/hay, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"kyb" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/statue/gargoyle, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"kyH" = ( +/obj/structure/fluff/railing/border, +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/indoors/town/cell) +"kzR" = ( +/obj/structure/mineral_door/wood/donjon{ + dir = 8; + locked = 1; + lockid = "steward"; + name = "warehouse" + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"kzV" = ( +/obj/structure/bars, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"kzY" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 5 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"kAf" = ( +/obj/machinery/light/rogue/torchholder/cold, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/mountains) +"kAi" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"kAp" = ( +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/bath/redhouse) +"kAz" = ( +/obj/structure/flora/roguegrass/bush/wall/tall, +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"kAR" = ( +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/obj/structure/fluff/walldeco/bath/wallrope{ + dir = 8; + pixel_y = -32 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"kBi" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"kBr" = ( +/obj/structure/mineral_door/wood/deadbolt{ + name = "privy" + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"kBA" = ( +/obj/structure/roguemachine/balloon_pad, +/obj/item/reagent_containers/food/snacks/crow, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/outdoors/town/roofs) +"kBD" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"kBH" = ( +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/outdoors/rtfield/woodish) +"kCq" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"kDg" = ( +/obj/structure/closet/dirthole/grave, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"kEa" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 6 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"kFE" = ( +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/indoors/town/vault) +"kFP" = ( +/obj/structure/stairs/stone{ + dir = 4; + icon_state = "stonestairs" + }, +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"kFZ" = ( +/obj/structure/mirror/alt, +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/bath/redhouse) +"kGq" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"kGw" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 9 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"kGD" = ( +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/shelter/mountains/decap) +"kGL" = ( +/obj/structure/flora/roguetree/burnt, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/mountains) +"kGN" = ( +/obj/structure/bed/rogue/shit, +/obj/effect/decal/cleanable/dirt/cobweb, +/obj/item/kitchen/spoon, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"kGQ" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/customsign{ + desc = "The olde district hath been cursed by Pestra and the sinners who dwell therein art proscribed by laws of both Gods and Men."; + name = "FORBIDEN!" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"kJB" = ( +/obj/structure/roguewindow/openclose, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/shop) +"kJP" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"kJT" = ( +/obj/item/reagent_containers/food/snacks/crow{ + dir = 1; + icon_state = "crow" + }, +/turf/open/floor/rogue/rooftop/green{ + dir = 8 + }, +/area/rogue/outdoors) +"kKa" = ( +/obj/structure/chair/wood/rogue{ + dir = 1; + icon_state = "chair2" + }, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"kKj" = ( +/obj/structure/flora/rock/pile, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"kKV" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/obj/effect/decal/turfedge_neu, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"kLy" = ( +/obj/structure/flora/roguetree/burnt, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"kLz" = ( +/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, +/obj/structure/fluff/walldeco/maidensigil, +/obj/item/roguestatue/gold, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/vault) +"kLA" = ( +/turf/open/transparent/openspace, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"kLI" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/remains/saiga, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"kLR" = ( +/obj/structure/roguemachine/scomm, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/dwarf) +"kNj" = ( +/turf/closed/wall/mineral/rogue/wooddark/vertical, +/area/rogue/indoors/shelter/mountains) +"kOq" = ( +/obj/structure/fluff/walldeco/vinez/l{ + dir = 10 + }, +/obj/effect/sunlight, +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"kOz" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 5 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"kPs" = ( +/obj/structure/bed/rogue/wool, +/obj/item/bedsheet/rogue/fabric, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/garrison) +"kPP" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 1 + }, +/area/rogue/indoors/town) +"kPS" = ( +/obj/structure/bed/rogue/wool{ + name = "acolyte bed" + }, +/obj/item/bedsheet/rogue/wool, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church) +"kPU" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/obj/structure/flora/roguegrass, +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/exposed/manorgarri) +"kQr" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"kQy" = ( +/obj/item/grown/log/tree/stake, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"kQF" = ( +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/indoors/shelter/rtfield) +"kQM" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/fluff/walldeco/med{ + pixel_y = -32 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"kRc" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"kRg" = ( +/obj/structure/chair/wood/rogue/chair_noble/purple, +/turf/open/floor/rogue/carpet/lord/center, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"kRw" = ( +/obj/effect/sunlight, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/outlaw) +"kRE" = ( +/obj/structure/chair/wood/rogue{ + dir = 4; + icon_state = "chair2" + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town) +"kRH" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/boggish) +"kSC" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/under/town/caverogue{ + first_time_text = "DEEP MINESHAFT" + }) +"kSD" = ( +/turf/closed/wall/mineral/rogue/decostone/chimney, +/area/rogue/indoors) +"kUD" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/cell) +"kVM" = ( +/obj/structure/fluff/walldeco/vinez/l{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"kVS" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/obj/structure/gate/bars/preopen{ + gid = "thronein"; + redstone_id = "inner_manor_gate" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/manorgarri) +"kVX" = ( +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/indoors/town) +"kVZ" = ( +/obj/structure/fluff/wallclock, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"kWe" = ( +/obj/structure/chair/bench/ancientlog, +/turf/open/water/river{ + dir = 4 + }, +/area/rogue/outdoors/river) +"kWt" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/under/basement) +"kWv" = ( +/obj/structure/bed/rogue/wooldouble, +/obj/item/bedsheet/rogue/fabric_double, +/turf/open/floor/carpet/inn, +/area/rogue/indoors/town/bath/redhouse) +"kXc" = ( +/obj/structure/rack/rogue{ + pixel_y = 6 + }, +/obj/item/quiver/bolts, +/obj/item/gun/ballistic/revolver/grenadelauncher/crossbow{ + pixel_y = 7 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"kXd" = ( +/obj/item/restraints/legcuffs/beartrap/armed, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"kXe" = ( +/obj/structure/closet/crate/chest/neu_iron, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/alch/waterdust, +/obj/item/alch/earthdust, +/obj/item/alch/firedust, +/obj/item/alch/airdust, +/obj/item/alch/sinew, +/obj/item/alch/bone, +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"kXo" = ( +/obj/machinery/light/rogue/oven/south, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"kXJ" = ( +/obj/structure/closet/dirthole/grave, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"kYQ" = ( +/turf/closed/wall/mineral/rogue/wooddark/window, +/area/rogue/outdoors/exposed/town/hamlet) +"kZh" = ( +/obj/structure/flora/rock/pile, +/obj/structure/flora/roguegrass, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"kZt" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/soilsons) +"kZP" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"lay" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"laK" = ( +/obj/structure/fermenting_barrel/water, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/shelter/mountains) +"laX" = ( +/obj/structure/closet/crate/chest/wicker, +/obj/item/reagent_containers/glass/bottle/vial, +/obj/item/reagent_containers/glass/bottle/vial, +/obj/item/reagent_containers/glass/bottle/vial, +/obj/item/reagent_containers/glass/bottle/rogue, +/obj/item/reagent_containers/glass/bottle/rogue, +/obj/item/reagent_containers/glass/bottle/rogue, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"laY" = ( +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/garrison) +"lbr" = ( +/obj/structure/table/wood/treestump{ + pixel_x = -7 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"lbE" = ( +/obj/effect/decal/cleanable/blood/gibs/old, +/obj/effect/decal/remains/human/old/small, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"lcc" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"lcf" = ( +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/garrison) +"lci" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/outdoors) +"lcy" = ( +/obj/structure/closet/dirthole/closed, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"lcQ" = ( +/obj/machinery/light/rogue/lanternpost/fixed{ + pixel_x = -4 + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/dwarf) +"lcU" = ( +/obj/structure/roguewindow/openclose{ + dir = 4; + icon_state = "woodwindowdir" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"lcY" = ( +/obj/effect/decal/cleanable/blood/gibs/limb{ + dir = 4 + }, +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"ldB" = ( +/obj/machinery/light/rogue/firebowl/stump, +/obj/structure/roguemachine/camera/left, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"ldK" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/obj/machinery/light/rogue/firebowl/stump{ + pixel_y = 8 + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"ldZ" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1; + icon_state = "stonehedge_aged" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/river) +"lel" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/psycross/crafted, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"lep" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"les" = ( +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/under/town/basement) +"let" = ( +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"ley" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/under/basement) +"lfe" = ( +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/oak/stage, +/area/rogue/outdoors/exposed/town/hamlet) +"lfg" = ( +/obj/effect/decal/remains/human/old, +/turf/open/floor/rogue/dirt, +/area/rogue/under/catacombs) +"lfn" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"lfQ" = ( +/turf/open/water/cleanshallow, +/area/rogue/under/cave) +"lgd" = ( +/obj/structure/fluff/nest, +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"lhc" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 6 + }, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/outdoors/exposed/under/basement) +"lhh" = ( +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/obj/item/ash, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"lhw" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/railing/stonehedge{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"lhF" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle{ + dir = 4 + }, +/area/rogue) +"lhP" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/cloak/raincloak/brown, +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"lif" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"lil" = ( +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/under/basement) +"lip" = ( +/obj/structure/flora/roguetree/burnt, +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"liD" = ( +/obj/structure/mannequin/male/decorative, +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"ljh" = ( +/obj/structure/kneestingers, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"ljq" = ( +/obj/structure/fluff/psycross/crafted, +/obj/effect/decal/turfedge_neu/road{ + dir = 5 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"ljr" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/rtfield/plague_district) +"ljs" = ( +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/outdoors/rtfield/hamlet) +"ljz" = ( +/turf/closed/wall/mineral/rogue/tent, +/area/rogue/outdoors) +"ljO" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"lke" = ( +/obj/structure/fluff/walldeco/bigpainting/lake{ + pixel_y = -32 + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/under/town/basement) +"lkj" = ( +/obj/item/reagent_containers/glass/bottle/iodine, +/obj/item/reagent_containers/glass/bottle/killer/weedkiller, +/obj/structure/rack/rogue/shelf/biggest{ + name = "earth humors" + }, +/obj/item/reagent_containers/glass/bottle/potassium, +/obj/item/reagent_containers/glass/bottle/nutrient, +/obj/item/reagent_containers/glass/bottle/formaldehyde, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"lkC" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 10 + }, +/obj/item/rogueweapon/knife/stone, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"lkI" = ( +/obj/structure/table/wood/reinf_long, +/obj/item/flint{ + pixel_y = 5 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/shop) +"llk" = ( +/obj/structure/table/wood/reinf_long, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"llQ" = ( +/obj/structure/plasticflaps, +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/turf/open/water/sewer, +/area/rogue/indoors/town/garrison) +"llW" = ( +/turf/open/transparent/openspace, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"lmb" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"lmG" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"lmR" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"lok" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors) +"lop" = ( +/obj/structure/closet/crate/coffin, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"los" = ( +/obj/structure/roguewindow/openclose{ + dir = 1 + }, +/obj/structure/bars/alt, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town) +"lov" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/idle_enemy/cabbit_boss, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/shelter/rtfield) +"lpb" = ( +/obj/structure/fluff/railing/stonehedge{ + icon_state = "stonehedge_aged" + }, +/obj/structure/fluff/walldeco/vinez/offset, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"lpf" = ( +/turf/closed/wall/mineral/rogue/decostone/cand, +/area/rogue/indoors/shelter/rtfield) +"lpD" = ( +/obj/effect/decal/remains/human/old, +/obj/effect/decal/miasma, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"lpI" = ( +/obj/structure/bars/passage{ + redstone_id = "sewer2" + }, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"lqH" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle, +/area/rogue/indoors/shelter/mountains/decap) +"lrh" = ( +/obj/structure/toilet, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/dwarfin) +"lsd" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/structure/flora/roguegrass, +/obj/item/reagent_containers/glass/bottle, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/under/basement) +"lsi" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/landmark/start/mason, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"lsu" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"lsL" = ( +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/reagent_containers/food/snacks/produce/swampweed_dried, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/swampweed, +/obj/item/reagent_containers/food/snacks/produce/swampweed, +/obj/item/clothing/mask/cigarette/pipe/crafted, +/obj/item/reagent_containers/powder/spice, +/obj/item/reagent_containers/powder/spice, +/obj/item/neuFarm/seed/poppy, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"lta" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass/yelmix, +/area/rogue/outdoors/rtfield/woodish) +"lug" = ( +/obj/item/reagent_containers/glass/bucket/wooden, +/turf/open/water/cleanshallow, +/area/rogue/outdoors/exposed/under/basement) +"luq" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"luz" = ( +/obj/machinery/light/rogue/firebowl/stump, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"luN" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 6 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"lvr" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 8; + icon_state = "torchwall1" + }, +/obj/structure/roguemachine/scomm, +/turf/open/floor/rogue/twig, +/area/rogue/indoors) +"lvw" = ( +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"lvI" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 5 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/under/basement) +"lwq" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/chicken, +/turf/open/floor/rogue/grass, +/area/rogue/indoors) +"lwu" = ( +/obj/effect/decal/cleanable/blood/gibs/core, +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"lww" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/soilsons) +"lwL" = ( +/obj/structure/fluff/walldeco/vinez/l{ + dir = 10 + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"lxO" = ( +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/sewer) +"lxV" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 8 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"lyq" = ( +/obj/structure/closet/dirthole/grave, +/obj/item/natural/worms, +/obj/effect/decal/miasma, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"lyN" = ( +/obj/structure/stairs/stone, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/mountains) +"lze" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 1; + locked = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"lzl" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/outlaw) +"lzr" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "shop"; + name = "roof access" + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/shop) +"lzE" = ( +/obj/structure/closet/crate/chest/crate, +/obj/item/flashlight/flare/torch/lantern, +/obj/item/flint{ + pixel_x = -1 + }, +/obj/item/clothing/mask/cigarette/rollie/nicotine, +/obj/item/roguekey/mason, +/obj/item/roguekey/mason, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"lzR" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/knife/dagger/silver, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/vault) +"lAJ" = ( +/obj/structure/closet/dirthole/grave, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"lAK" = ( +/obj/machinery/light/rogue/wallfire/candle/blue, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/magician) +"lBj" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"lBv" = ( +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue) +"lBY" = ( +/obj/structure/chair/wood/rogue{ + dir = 4; + icon_state = "chair2" + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/magician) +"lCm" = ( +/obj/item/restraints/legcuffs/beartrap/armed/camouflage, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/mountains) +"lCP" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"lDF" = ( +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/structure/closet/crate/chest/neu, +/obj/item/reagent_containers/powder/salt, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"lDJ" = ( +/obj/structure/mirror/alt{ + pixel_y = -32 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/garrison) +"lEl" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"lEq" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/cell) +"lEA" = ( +/obj/effect/spawner/roguemap/metal_bars, +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"lEG" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/statue/gargoyle/moss, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"lFu" = ( +/obj/structure/toilet, +/obj/effect/decal/turfedge_neu/mossy{ + dir = 6 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/tavern/saiga) +"lFC" = ( +/obj/structure/flora/rock/pile, +/obj/structure/fluff/railing/stonehedge{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"lFJ" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/grass/yelmix, +/area/rogue/outdoors/rtfield/woodish) +"lFW" = ( +/obj/structure/table/wood{ + icon_state = "longtable" + }, +/obj/item/dice{ + pixel_x = -4; + pixel_y = 9 + }, +/obj/item/dice{ + pixel_x = 6 + }, +/obj/effect/decal/turfedge_neu/alt, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/tavern/saiga) +"lFX" = ( +/obj/structure/flora/roguegrass, +/obj/item/reagent_containers/glass/bucket/wooden/alter, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"lGa" = ( +/obj/structure/table/wood{ + dir = 1; + icon_state = "longtable" + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/entrance{ + first_time_text = "Rockhamlet" + }) +"lGx" = ( +/obj/effect/decal/cleanable/blood/footprints, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"lGN" = ( +/obj/structure/closet/crate/chest/crate, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"lHd" = ( +/obj/structure/fluff/walldeco/painting/seraphina{ + pixel_y = 32 + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"lHe" = ( +/turf/closed/wall/shroud, +/area/rogue/indoors/shelter/rtfield) +"lHh" = ( +/obj/structure/flora/roguetree, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"lHH" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/bath/redhouse) +"lHL" = ( +/obj/effect/spawner/roguemap/metal_bars, +/turf/open/water/sewer, +/area/rogue) +"lHQ" = ( +/obj/structure/roguewindow/openclose{ + dir = 1 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"lHX" = ( +/obj/structure/roguemachine/scomm/l{ + pixel_x = 0 + }, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/under/town/basement) +"lIh" = ( +/obj/machinery/light/rogue/wallfire/candle/weak{ + pixel_y = -17 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/shop) +"lIB" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/clothing/cloak/raincloak/blue, +/obj/item/reagent_containers/food/snacks/rogue/breadslice/toast, +/obj/item/reagent_containers/glass/bottle/rogue/water, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/town/garrison) +"lIK" = ( +/obj/machinery/light/rogue/wallfire/candle/weak/r, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/tavern/saiga) +"lIP" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/rogueweapon/handsaw, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors) +"lJh" = ( +/obj/structure/bed/rogue/inn{ + name = "nitemaid bed" + }, +/obj/item/bedsheet/rogue/wool, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/under/town/basement) +"lJI" = ( +/turf/open/floor/rogue/wood/saiga, +/area/rogue/outdoors/exposed/under/basement) +"lJT" = ( +/obj/structure/bed/rogue/shit, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/shelter/bog) +"lKi" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/exposed/manorgarri) +"lKj" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 5 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"lKn" = ( +/obj/item/storage/belt/rogue/pouch/coins/mid, +/turf/open/water/cleanshallow, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); + first_time_text = "CATACOMBS" + }) +"lKo" = ( +/obj/structure/closet/crate/roguecloset/dark, +/obj/item/natural/cloth, +/turf/open/floor/rogue/oak, +/area/rogue/indoors/town/cell) +"lKU" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "mason" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town) +"lLu" = ( +/obj/structure/chair/bench/couchablack/r, +/turf/open/floor/rogue/tile/masonic/inverted, +/area/rogue/indoors/town/magician) +"lLO" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/church) +"lLZ" = ( +/obj/structure/fluff/statue/pillar{ + dir = 1 + }, +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"lMe" = ( +/turf/open/transparent/openspace, +/area/rogue/under/cave/abandoned_mine) +"lMr" = ( +/obj/structure/chair/bench/ancientlog, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"lMt" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 6 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 5 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"lMM" = ( +/obj/structure/fluff/psycross/crafted/shrine/abyssor{ + pixel_x = -25 + }, +/turf/open/water/cleanshallow, +/area/rogue/indoors/town/church/chapel) +"lNk" = ( +/obj/item/reagent_containers/glass/bowl, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"lNO" = ( +/obj/structure/fluff/walldeco/med2{ + pixel_x = 16; + pixel_y = 32 + }, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"lNV" = ( +/obj/structure/fluff/railing/border, +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/outdoors/town/roofs) +"lNY" = ( +/obj/structure/chair/bench/ancientlog, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"lOm" = ( +/obj/item/rogueore/copper, +/obj/item/rogueore/copper, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"lOt" = ( +/obj/structure/bars/pipe{ + dir = 8; + icon_state = "pipe"; + pixel_x = 9 + }, +/turf/open/floor/rogue/oak, +/area/rogue) +"lOx" = ( +/obj/effect/decal/cleanable/blood_neu/tracks, +/turf/open/floor/rogue/twig, +/area/rogue/under/town/basement) +"lOD" = ( +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"lOS" = ( +/obj/structure/bars/pipe{ + dir = 5; + icon_state = "pipe" + }, +/obj/item/natural/stone, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"lOZ" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/dwarfin) +"lQc" = ( +/obj/structure/fluff/statue/gargoyle/moss, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"lQd" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/plague_district) +"lQe" = ( +/obj/structure/roguetent, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"lQI" = ( +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/town/sewer) +"lQR" = ( +/obj/effect/spawner/roguemap/treeorstump, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"lQT" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "mason"; + name = "masons quarters" + }, +/turf/open/floor/rogue/cobblerock, +/area/rogue/indoors/town) +"lRi" = ( +/obj/structure/table/wood/plain/alt, +/obj/effect/spawner/roguemap/loot/common, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town) +"lRv" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"lRy" = ( +/turf/closed/wall/mineral/rogue/wooddark/window, +/area/rogue/indoors/town/shop) +"lRz" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner, +/area/rogue/indoors/town) +"lRL" = ( +/obj/effect/sunlight, +/turf/open/floor/rogue/rooftop/green, +/area/rogue/outdoors/town/roofs) +"lSo" = ( +/turf/closed/wall/mineral/rogue/wooddark/window, +/area/rogue/indoors) +"lSz" = ( +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"lTo" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 1 + }, +/area/rogue) +"lTB" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "armorsmith"; + name = "blacksmiths quarters" + }, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town) +"lTO" = ( +/obj/item/reagent_containers/food/snacks/produce/jacksberry, +/obj/structure/closet/crate/chest/wicker, +/obj/item/kitchen/spoon, +/obj/item/reagent_containers/food/snacks/produce/turnip, +/obj/item/reagent_containers/food/snacks/produce/turnip, +/obj/item/reagent_containers/food/snacks/produce/turnip, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"lUz" = ( +/obj/structure/bonepile, +/turf/open/floor/rogue/naturalstone, +/area/rogue/indoors/shelter/rtfield) +"lVe" = ( +/obj/structure/mineral_door/wood{ + lockid = "tailor"; + name = "weavers shop" + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tailor) +"lVj" = ( +/obj/structure/roguetent, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/bog) +"lVz" = ( +/obj/effect/spawner/roguemap/hostile_beggar_danger, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"lWG" = ( +/obj/structure/fluff/walldeco/masonflag{ + pixel_y = -31 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/dwarfin) +"lWU" = ( +/obj/item/grown/log/tree, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"lXo" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "roomiii"; + name = "Yeoman room" + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern/saiga) +"lXp" = ( +/obj/effect/decal/cleanable/blood/gibs/limb{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"lXz" = ( +/turf/open/floor/rogue/rooftop{ + dir = 1 + }, +/area/rogue/outdoors/mountains) +"lXE" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"lXP" = ( +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/obj/item/storage/roguebag{ + pixel_y = 6 + }, +/obj/item/storage/roguebag{ + pixel_x = 5; + pixel_y = -7 + }, +/obj/item/storage/roguebag{ + pixel_x = -7 + }, +/obj/item/storage/roguebag, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"lYm" = ( +/obj/structure/table/wood/large/corner_new{ + dir = 6 + }, +/obj/item/cooking/pan{ + pixel_x = -1; + pixel_y = 5 + }, +/obj/effect/decal/turfedge_neu/alt{ + dir = 4 + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern/saiga) +"lYN" = ( +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"lYY" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/rooftop/green{ + dir = 8 + }, +/area/rogue/outdoors/exposed/manorgarri) +"lZe" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/obj/effect/decal/turfedge_neu/alt_small{ + dir = 8 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"lZq" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/exposed/manorgarri) +"lZD" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"lZE" = ( +/obj/structure/toilet, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/garrison) +"lZH" = ( +/obj/machinery/light/rogue/chand, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"lZL" = ( +/obj/structure/floordoor/gatehatch/outer{ + redstone_id = "gatelava" + }, +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/exposed/town/hamlet) +"maO" = ( +/obj/machinery/light/rogue/torchholder{ + pixel_y = 32 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/manorgarri) +"mbd" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle{ + dir = 1 + }, +/area/rogue) +"mbn" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/garrison) +"mbu" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 4; + icon_state = "stonehedge5" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"mcG" = ( +/obj/item/roguebin/water/gross, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/cell) +"mdt" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/manorgarri) +"mdy" = ( +/obj/effect/decal/cleanable/blood/splatter, +/obj/effect/decal/cleanable/blood/gibs/core, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"mdE" = ( +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/warehouse) +"mdM" = ( +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/catacombs) +"meq" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fluff/railing/border, +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"mgt" = ( +/obj/structure/lever/wall{ + desc = "Let the games begin."; + dir = 8; + redstone_id = "sewer2" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"mgy" = ( +/obj/machinery/printingpress, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/outdoors/exposed/under/basement) +"mgH" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 4 + }, +/area/rogue/indoors/town/bath/redhouse) +"mgM" = ( +/turf/open/floor/rogue/oak/stage{ + icon_state = "stageoak_b" + }, +/area/rogue/outdoors/exposed/town/hamlet) +"mgZ" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 9 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"mhc" = ( +/obj/structure/closet/crate/chest/neu_fancy, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/natural/feather, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"mhm" = ( +/obj/structure/bars/pipe, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/dwarfin) +"mhs" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"mhH" = ( +/obj/structure/closet/crate/chest/neu_iron, +/obj/effect/spawner/roguemap/loot/random_gem, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/catacombs) +"mjb" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/reagent_containers/powder/flour, +/obj/item/reagent_containers/powder/flour, +/obj/item/reagent_containers/powder/flour, +/obj/item/reagent_containers/powder/flour, +/obj/item/reagent_containers/powder/salt, +/obj/item/reagent_containers/powder/salt, +/obj/item/natural/bundle/stick, +/obj/item/cooking/pan, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors) +"mjl" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners, +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 4 + }, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"mju" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/woodish) +"mkz" = ( +/obj/structure/stairs/stone{ + dir = 8; + icon_state = "stonestairs" + }, +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town) +"mln" = ( +/obj/structure/closet/crate/chest/neu, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"mlS" = ( +/obj/item/natural/bundle/stick{ + pixel_y = 40 + }, +/obj/item/natural/bundle/stick{ + pixel_y = 37 + }, +/obj/effect/decal/turfedge_neu/alt{ + dir = 6 + }, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church) +"mlU" = ( +/turf/open/floor/rogue/tile/tilerg, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"mmm" = ( +/obj/structure/stairs{ + dir = 8; + icon_state = "stairs" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"mmo" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/candle/yellow, +/obj/item/candle/yellow, +/obj/item/candle/yellow, +/obj/item/candle/yellow, +/obj/item/natural/bundle/stick, +/obj/item/natural/bundle/stick, +/obj/item/flint, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/basement) +"mms" = ( +/obj/structure/table/wood/reinforced_alt, +/turf/open/floor/carpet/royalblack, +/area/rogue/under/town/basement) +"mmT" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors) +"mnd" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop{ + dir = 1 + }, +/area/rogue/outdoors/exposed/manorgarri) +"mnv" = ( +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors) +"mnK" = ( +/obj/structure/fluff/dryingrack, +/obj/item/needle/thorn, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/outdoors/exposed/town/hamlet) +"mop" = ( +/obj/machinery/light/rogue/hearth, +/obj/item/rogueweapon/tongs, +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/cell) +"moq" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop{ + dir = 1 + }, +/area/rogue/outdoors/exposed/manorgarri) +"moB" = ( +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/tavern/saiga) +"moR" = ( +/obj/item/natural/stone, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"mpf" = ( +/obj/effect/spawner/roguemap/metal_bars, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"mpi" = ( +/turf/closed/wall/mineral/rogue/wooddark/slitted, +/area/rogue/outdoors/town/roofs) +"mpt" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 8; + name = "privy" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/dwarfin) +"mpF" = ( +/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, +/obj/structure/closet/crate/chest/old_crate, +/obj/item/ingot/silver, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town) +"mqf" = ( +/obj/structure/stairs/stone, +/turf/open/floor/rogue/concrete, +/area/rogue/under/town/basement) +"mqm" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"mrL" = ( +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/rope/chain, +/obj/item/rope/chain, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/cell) +"mrZ" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"msB" = ( +/obj/structure/table/wood/reinf_long{ + dir = 1 + }, +/obj/item/clothing/mask/rogue/spectacles/golden{ + pixel_y = 6 + }, +/obj/item/flint{ + pixel_x = 10; + pixel_y = -7 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"msG" = ( +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors) +"msX" = ( +/obj/effect/landmark/start/farmer, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/soilsons) +"mtc" = ( +/obj/machinery/light/rogue/campfire, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/boggish) +"mub" = ( +/obj/item/reagent_containers/food/snacks/crow{ + dir = 1; + icon_state = "crow" + }, +/turf/open/floor/rogue/rooftop/green{ + dir = 1 + }, +/area/rogue/outdoors/town/roofs) +"muV" = ( +/obj/effect/decal/remains/human/old/small, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"muX" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/mountains) +"mvc" = ( +/obj/structure/fluff/wallclock, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"mvj" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass/yelmix, +/area/rogue/outdoors/rtfield/woodish) +"mvo" = ( +/obj/item/roguebin/water/gross, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/town/hamlet) +"mvr" = ( +/obj/structure/table/wood/reinf_long, +/obj/item/flashlight/flare/torch/lantern{ + pixel_y = 6 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"mwG" = ( +/obj/structure/roguemachine/scomm/r, +/turf/open/floor/rogue/church, +/area/rogue/under/town/basement) +"mxj" = ( +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/structure/closet/crate/chest/crate, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"mxq" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/candle/yellow, +/obj/item/candle/yellow, +/obj/item/candle/yellow, +/obj/item/candle/yellow, +/obj/item/storage/box/matches, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/outdoors/exposed/under/basement) +"myf" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"myL" = ( +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tailor) +"myP" = ( +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/tavern/saiga) +"mzh" = ( +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/indoors/town/dwarfin) +"mzw" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/boggish) +"mzB" = ( +/obj/structure/table/wood/plain_alt, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"mAN" = ( +/obj/structure/table/wood{ + dir = 10; + icon_state = "tablewood2" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"mAP" = ( +/obj/structure/mineral_door/wood/donjon/stone{ + locked = 1; + lockid = "priest"; + name = "hall of worship" + }, +/turf/open/floor/rogue/church, +/area/rogue/indoors/town/church/chapel) +"mAQ" = ( +/obj/item/chair/stool/bar/rogue, +/obj/effect/landmark/start/vagrant{ + dir = 4; + icon_state = "arrow" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"mBr" = ( +/turf/open/floor/rogue/metal, +/area/rogue/indoors/town) +"mBF" = ( +/obj/item/storage/bag/tray/psy, +/obj/structure/table/wood{ + dir = 10; + icon_state = "tablewood2" + }, +/obj/item/reagent_containers/glass/bottle/rogue/healthpot, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"mDZ" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"mEv" = ( +/obj/structure/fluff/railing/stonehedge{ + icon_state = "stonehedge_aged" + }, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"mEx" = ( +/obj/structure/table/church, +/obj/item/rogueweapon/shovel, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) +"mEN" = ( +/obj/structure/mineral_door/wood{ + icon_state = "wcv"; + locked = 1; + lockid = "steward" + }, +/turf/open/floor/rogue/tile{ + icon_state = "chess" + }, +/area/rogue/indoors/town) +"mEZ" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 8; + icon_state = "stonehedge_aged" + }, +/obj/structure/flora/rock/pile, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"mFe" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 4 + }, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"mFh" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/bath/redhouse) +"mFn" = ( +/obj/structure/table/vtable/v2, +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/obj/structure/rogue/trophy/deer, +/obj/item/natural/feather{ + pixel_y = 8 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"mFx" = ( +/obj/item/natural/stone, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/caverogue{ + first_time_text = "DEEP MINESHAFT" + }) +"mFQ" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/blood/tracks, +/obj/structure/fluff/walldeco/chains, +/turf/open/floor/rogue/metal/barograte, +/area/rogue/outdoors/exposed/town/hamlet) +"mGa" = ( +/obj/structure/flora/roguegrass/water/reeds, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/spooky) +"mGt" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"mHa" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"mIw" = ( +/obj/structure/table/wood/large/corner_new{ + dir = 9 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors) +"mIH" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"mIZ" = ( +/obj/structure/flora/roguegrass/water, +/obj/structure/fluff/statue/small, +/turf/open/water/cleanshallow, +/area/rogue/outdoors/exposed/manorgarri) +"mJt" = ( +/obj/structure/fluff/psycross/crafted, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"mKj" = ( +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/under/cave) +"mKk" = ( +/obj/effect/decal/shadow_floor{ + dir = 6 + }, +/turf/open/floor/rogue/sandstone/shaded, +/area/rogue/indoors/town/church/chapel) +"mKN" = ( +/obj/structure/bed/rogue/mediocre, +/obj/item/storage/belt/rogue/pouch/coins/mid, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors) +"mMb" = ( +/obj/structure/chair/bench/couchablack, +/obj/item/clothing/mask/cigarette/rollie/nicotine, +/turf/open/floor/rogue/tile/masonic/single, +/area/rogue/indoors/town/magician) +"mMc" = ( +/obj/structure/bed/rogue/wool, +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern/saiga) +"mMe" = ( +/obj/structure/flora/roguegrass/bush/wall, +/obj/effect/decal/turfedge_neu/mossy_small, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"mMv" = ( +/turf/closed/wall/mineral/rogue/stone/window/moss, +/area/rogue/outdoors) +"mMx" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle{ + dir = 8 + }, +/area/rogue/indoors/town/bath/redhouse) +"mMB" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"mMM" = ( +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"mMV" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/mountains) +"mMW" = ( +/obj/item/roguebin/water, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"mMY" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop/green, +/area/rogue/outdoors/town/roofs) +"mNg" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/woodish) +"mNh" = ( +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/manorgarri) +"mNk" = ( +/obj/structure/bars/pipe{ + dir = 6; + icon_state = "pipe" + }, +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/town) +"mNy" = ( +/obj/effect/decal/remains/human/old/small, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/plague_district) +"mNM" = ( +/obj/structure/mineral_door/wood{ + lockid = "manor"; + name = "servants quarters" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"mNU" = ( +/obj/structure/bars/pipe{ + dir = 8; + icon_state = "pipe"; + pixel_x = 9 + }, +/turf/open/transparent/openspace, +/area/rogue) +"mOl" = ( +/obj/effect/decal/cleanable/blood/splatter, +/obj/structure/bars/pipe{ + dir = 5; + icon_state = "pipe" + }, +/obj/structure/bars/pipe{ + dir = 8; + icon_state = "pipe" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"mOs" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"mOM" = ( +/obj/structure/table/wood/treestump/burnt, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"mPw" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/clothing/mask/cigarette/pipe, +/obj/item/clothing/mask/cigarette/pipe, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/bath/redhouse) +"mPQ" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fluff/railing/border, +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop/green{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"mQa" = ( +/obj/structure/fluff/walldeco/bsmith{ + dir = 1; + name = "dwarven quarters" + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"mQf" = ( +/obj/structure/table/wood/treestump{ + pixel_x = -7 + }, +/obj/item/grown/log/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"mQt" = ( +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"mQB" = ( +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/river) +"mQF" = ( +/obj/item/natural/dirtclod, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/town/sewer) +"mRb" = ( +/obj/structure/table/wood/large/corner_new{ + dir = 9 + }, +/obj/item/kitchen/spoon, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/soilsons) +"mRp" = ( +/turf/open/floor/rogue/ruinedwood/turned, +/area/rogue/outdoors/river) +"mRE" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "merchant"; + name = "shop" + }, +/obj/structure/bars/passage/shutter{ + redstone_id = "merchant" + }, +/turf/open/floor/rogue/tile{ + icon_state = "chess" + }, +/area/rogue/indoors/town/shop) +"mRF" = ( +/obj/structure/closet/crate/roguecloset/inn/south{ + pixel_y = 12 + }, +/obj/item/natural/bundle/cloth{ + amount = 8 + }, +/obj/item/reagent_containers/glass/bottle/rogue/poison, +/obj/item/storage/roguebag, +/obj/item/storage/backpack/rogue/satchel/surgbag, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"mRM" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"mRZ" = ( +/obj/structure/fluff/statue/scare{ + desc = "Just a scarecrow..." + }, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"mSC" = ( +/obj/item/natural/rock/salt, +/obj/item/grown/log/tree/stake, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"mTy" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/caverogue{ + first_time_text = "DEEP MINESHAFT" + }) +"mUl" = ( +/obj/structure/winch{ + gid = "townin" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/town/roofs) +"mUy" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"mUz" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/outlaw) +"mUT" = ( +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/outdoors/exposed/under/basement) +"mVa" = ( +/obj/structure/chair/bench/ultimacouch/r{ + icon_state = "ultimacochright" + }, +/obj/effect/landmark/start/nightman, +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/bath/redhouse) +"mVk" = ( +/obj/structure/flora/roguegrass, +/obj/machinery/light/rogue/firebowl/stump, +/obj/structure/fluff/walldeco/vinez/r, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"mVv" = ( +/obj/structure/lever/wall{ + dir = 8; + pixel_x = -6; + redstone_id = "feldsher" + }, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"mVy" = ( +/obj/structure/roguemachine/stockpile, +/obj/structure/roguemachine/camera/left, +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"mVE" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/machinery/light/rogue/wallfire/candle/weak/r, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"mVM" = ( +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/obj/structure/fluff/walldeco/rpainting/forest{ + pixel_x = -32 + }, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"mVX" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 6 + }, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"mWp" = ( +/obj/machinery/light/rogue/chand, +/obj/effect/landmark/start/jester{ + dir = 8 + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"mWI" = ( +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/magician) +"mWS" = ( +/obj/structure/rack/rogue, +/obj/item/needle, +/obj/item/needle, +/obj/item/rope/chain, +/obj/item/rope/chain, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"mWT" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"mXf" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/twig, +/area/rogue/under/town/basement) +"mXW" = ( +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"mYD" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/mountains) +"mYL" = ( +/obj/structure/bars/cemetery, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"mZW" = ( +/obj/structure/fluff/statue/gargoyle, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors) +"naF" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/fluff/railing/wood{ + dir = 4; + icon_state = "woodrailing" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"nba" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/decal/remains/saiga, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"nbA" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/candle/yellow/lit/infinite, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town) +"nbT" = ( +/obj/structure/rack/rogue/shelf/biggest{ + pixel_y = 12 + }, +/obj/item/needle, +/obj/item/needle/thorn, +/obj/item/natural/bundle/cloth{ + amount = 8 + }, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"ncr" = ( +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/obj/item/reagent_containers/food/snacks/produce/wheat, +/obj/item/reagent_containers/food/snacks/produce/wheat, +/obj/item/reagent_containers/food/snacks/produce/wheat, +/obj/structure/closet/crate/chest/old_crate, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"ncu" = ( +/obj/item/grown/log/tree/small, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"ncw" = ( +/obj/structure/table/wood/treestump, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"ncE" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"ncP" = ( +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"ndb" = ( +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"ndi" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/town/roofs) +"ndT" = ( +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/under/basement) +"ned" = ( +/obj/structure/flora/roguegrass/bush_meagre, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"ner" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"new" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"neF" = ( +/obj/structure/table/wood{ + icon_state = "longtable" + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"nfd" = ( +/obj/structure/roguemachine/scomm/l, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/tavern/saiga) +"nfg" = ( +/obj/structure/stairs/stone{ + dir = 4; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/manorgarri) +"nfW" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/river) +"ngf" = ( +/obj/effect/decal/remains/saiga, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"nhf" = ( +/turf/open/floor/rogue/rooftop/green{ + dir = 8 + }, +/area/rogue/outdoors) +"nhZ" = ( +/obj/structure/fluff/statue/gargoyle/moss, +/turf/open/transparent/openspace, +/area/rogue/outdoors/mountains) +"niT" = ( +/obj/structure/bed/rogue/wooldouble, +/obj/structure/fluff/walldeco/rpainting/forest{ + pixel_x = 32 + }, +/obj/effect/landmark/start/alchemist, +/obj/item/bedsheet/rogue/double_pelt, +/turf/open/floor/carpet/royalblack, +/area/rogue/under/town/basement) +"niY" = ( +/obj/structure/closet/crate/roguecloset/dark, +/obj/item/clothing/mask/rat/jackal, +/obj/item/clothing/mask/muzzle, +/obj/item/clothing/head/roguetown/nun, +/obj/item/clothing/suit/roguetown/armor/amazon_chainkini, +/obj/item/clothing/suit/roguetown/shirt/dress/gen/sexy, +/obj/item/rope, +/obj/machinery/light/rogue/wallfire/candle/lamp{ + pixel_y = 28 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"niZ" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"nje" = ( +/obj/structure/rack/rogue/shelf/notdense{ + pixel_x = 32; + pixel_y = -6 + }, +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/town) +"nji" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town/cell) +"njo" = ( +/obj/structure/stairs{ + dir = 1; + icon_state = "stairs" + }, +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/town/roofs) +"njt" = ( +/obj/structure/bed/rogue/inn/double, +/obj/item/bedsheet/rogue/double_pelt, +/obj/effect/landmark/start/innkeep, +/turf/open/floor/rogue/carpet/green, +/area/rogue/indoors/town/tavern/saiga) +"njE" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/church) +"njK" = ( +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"njU" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass/yelmix, +/area/rogue/outdoors/rtfield/woodish) +"nkp" = ( +/obj/structure/fluff/railing/border{ + dir = 5; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/tavern/saiga) +"nlc" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/indoors) +"nll" = ( +/obj/structure/fluff/railing/border{ + dir = 5; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/exposed/manorgarri) +"nlv" = ( +/obj/item/rogueore/coal, +/obj/machinery/light/rogue/torchholder/c{ + pixel_y = -32 + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"nlJ" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"nlR" = ( +/obj/structure/flora/roguegrass/bush_meagre, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"nlS" = ( +/obj/structure/fluff/railing/wood, +/obj/item/rope, +/obj/item/reagent_containers/glass/bucket/wooden, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/rtfield/hamlet) +"nmu" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/obj/machinery/light/rogue/torchholder{ + dir = 4; + icon_state = "torchwall1" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"nmF" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town) +"nmL" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/church) +"nmN" = ( +/obj/structure/bars/passage{ + redstone_id = "sewer3" + }, +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"nnc" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"nnr" = ( +/obj/structure/chair/wood/rogue{ + dir = 8; + icon_state = "chair2" + }, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"nnB" = ( +/obj/structure/bars/pipe{ + dir = 10; + icon_state = "pipe" + }, +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/town) +"nnN" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 8 + }, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"noe" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"non" = ( +/obj/structure/mineral_door/swing_door, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"noo" = ( +/obj/effect/spawner/roguemap/metal_bars, +/obj/structure/kneestingers, +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"nop" = ( +/obj/structure/stairs{ + dir = 1 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/shelter/town/dwarf) +"noC" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/exposed/manorgarri) +"noG" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/exposed/manorgarri) +"noV" = ( +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/plague_district) +"npt" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass/yelmix, +/area/rogue/outdoors/rtfield/woodish) +"npJ" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/mountains) +"nse" = ( +/obj/structure/stairs, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/town/hamlet) +"nsy" = ( +/obj/structure/fluff/statue/knight/interior, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) +"nsE" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/mountains) +"nsF" = ( +/obj/structure/bars/cemetery{ + plane = -2 + }, +/obj/structure/fluff/walldeco/vinez{ + plane = -2 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"ntq" = ( +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/rtfield/plague_district) +"nuc" = ( +/obj/structure/mineral_door/wood/donjon{ + dir = 4; + locked = 1; + lockid = "nightmaiden"; + name = "bathhouse" + }, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/bath/redhouse) +"nuf" = ( +/obj/effect/decal/shadow_floor/corner{ + dir = 4 + }, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/bath/redhouse) +"nuo" = ( +/obj/structure/fluff/psycross/crafted, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"nva" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"nvC" = ( +/obj/structure/stairs/fancy/c{ + dir = 1 + }, +/turf/open/floor/rogue/carpet/lord/center, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"nvR" = ( +/obj/structure/fluff/railing/border{ + dir = 5; + icon_state = "border" + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/soilsons) +"nwa" = ( +/obj/structure/composter/halffull, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"nwn" = ( +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town) +"nxn" = ( +/obj/effect/decal/shadow_floor/corner, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/bath/redhouse) +"nxD" = ( +/obj/structure/fluff/walldeco/rpainting{ + pixel_y = 32 + }, +/turf/open/floor/rogue/tile/tilerg, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"nxX" = ( +/obj/effect/decal/turfedge_neu/alt_small, +/obj/effect/decal/turfedge_neu/alt{ + dir = 5 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern/saiga) +"nxY" = ( +/obj/structure/lever/wall{ + desc = "Let the games begin."; + dir = 8; + redstone_id = "sewer3" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"nyj" = ( +/turf/open/floor/rogue/oak, +/area/rogue/outdoors/town/roofs) +"nym" = ( +/obj/machinery/light/rogue/firebowl/standing/blue, +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"nyp" = ( +/turf/closed/wall/mineral/rogue/decostone, +/area/rogue/indoors/town/church) +"nyQ" = ( +/obj/structure/table/wood/large/corner_new{ + dir = 6 + }, +/obj/item/reagent_containers/glass/bowl, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/soilsons) +"nzc" = ( +/obj/item/natural/stone, +/obj/structure/fluff/customsign{ + name = "CAVE-IN SHAFT CLOSED"; + pixel_y = 18 + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/caverogue{ + first_time_text = "DEEP MINESHAFT" + }) +"nzk" = ( +/obj/structure/roguewindow/openclose{ + dir = 4; + icon_state = "woodwindowdir" + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/tavern/saiga) +"nzu" = ( +/obj/structure/roguewindow/openclose, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/bath/redhouse) +"nzD" = ( +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/obj/structure/closet/crate/chest/old_crate, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/rogue/meat/poultry, +/obj/item/reagent_containers/food/snacks/rogue/meat/poultry, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"nzO" = ( +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/rooftop/green{ + dir = 1 + }, +/area/rogue/outdoors/town/roofs) +"nzX" = ( +/obj/structure/stairs/stone, +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/exposed/dwarf) +"nzY" = ( +/turf/closed/wall/mineral/rogue/stonebrick, +/area/rogue/outdoors/exposed/town/hamlet) +"nAp" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"nAt" = ( +/obj/machinery/light/rogue/hearth, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/tavern/saiga) +"nAH" = ( +/obj/structure/fluff/walldeco/customflag, +/turf/closed/wall/mineral/rogue/decostone/fluffstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"nBj" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"nBv" = ( +/obj/effect/sunlight, +/turf/open/floor/rogue/rooftop{ + dir = 1 + }, +/area/rogue/outdoors) +"nBy" = ( +/obj/structure/mineral_door/wood/window{ + locked = 1; + lockid = "manor"; + name = "chambers of the Hand" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"nBX" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/reagent_containers/powder/salt, +/obj/item/reagent_containers/powder/salt, +/obj/item/reagent_containers/powder/salt, +/obj/item/reagent_containers/peppermill, +/obj/item/reagent_containers/food/snacks/butter, +/obj/item/reagent_containers/food/snacks/fat, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) +"nCg" = ( +/obj/structure/fluff/railing/border, +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town) +"nCD" = ( +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/dwarf) +"nDD" = ( +/obj/structure/toilet, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"nDJ" = ( +/obj/effect/spawner/roguemap/treeorbush, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"nDR" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/goatmale{ + aggressive = 1; + name = "mountain goat" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"nDW" = ( +/obj/machinery/light/rogue/campfire{ + on = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"nEL" = ( +/obj/structure/fermenting_barrel/water, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"nFQ" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/mace/woodclub, +/obj/item/rogueweapon/mace/woodclub, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"nFY" = ( +/turf/closed/wall/mineral/rogue/wooddark/end{ + dir = 8; + icon_state = "endwooddark" + }, +/area/rogue/indoors/shelter/mountains) +"nGi" = ( +/obj/structure/roguetent, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town) +"nGr" = ( +/obj/item/natural/stone, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"nGC" = ( +/obj/structure/fluff/railing/stonehedge{ + icon_state = "stonehedge_aged" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"nGT" = ( +/obj/structure/fluff/railing/fence, +/turf/open/floor/rogue/ruinedwood/turned, +/area/rogue/outdoors/rtfield/hamlet) +"nHh" = ( +/obj/structure/table/wood/reinforced_alt, +/obj/item/natural/bundle/fibers{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/item/natural/bundle/silk{ + pixel_x = -4; + pixel_y = 5 + }, +/obj/item/natural/feather{ + pixel_y = 38 + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tailor) +"nHt" = ( +/obj/machinery/light/rogue/torchholder/r, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"nHO" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 1 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town) +"nHQ" = ( +/obj/structure/roguemachine/scomm{ + pixel_y = -32 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"nHS" = ( +/obj/effect/decal/remains/saiga, +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"nIR" = ( +/obj/structure/flora/roguetree/burnt, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"nIW" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 8 + }, +/area/rogue/indoors/town) +"nJf" = ( +/obj/structure/fluff/statue/knight, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"nJk" = ( +/obj/item/natural/rock/coal, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/mountains) +"nJr" = ( +/obj/structure/fluff/railing/stonehedge, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"nKA" = ( +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/town/hamlet) +"nKI" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/magician) +"nLA" = ( +/obj/structure/table/wood/large/corner_blue{ + dir = 5 + }, +/obj/item/reagent_containers/powder/moondust, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/bath/redhouse) +"nLP" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/blocks/stonered, +/area/rogue/indoors/town/bath/redhouse) +"nMd" = ( +/obj/structure/fluff/grindwheel, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"nMe" = ( +/obj/structure/fluff/railing/border, +/obj/structure/stairs/stone{ + dir = 4; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"nMn" = ( +/obj/machinery/light/rogue/wallfire{ + pixel_x = -32 + }, +/turf/open/floor/rogue/twig, +/area/rogue/under/town/basement) +"nMo" = ( +/obj/effect/decal/remains/saiga, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/town/hamlet) +"nMy" = ( +/obj/structure/fluff/clodpile, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"nMC" = ( +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"nNx" = ( +/obj/item/natural/stone, +/obj/machinery/light/rogue/torchholder{ + pixel_y = -32 + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"nNJ" = ( +/obj/effect/landmark/start/butler{ + dir = 4; + icon_state = "arrow" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"nOp" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"nOu" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"nPR" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/rogueflower/ywflowers, +/turf/open/floor/rogue/grass, +/area/rogue/indoors/town/church/chapel) +"nQu" = ( +/obj/structure/stairs{ + dir = 8; + icon_state = "stairs" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"nQA" = ( +/obj/structure/table/wood/plain_alt, +/obj/structure/fluff/walldeco/wantedposter, +/obj/item/paper, +/obj/item/natural/feather, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/entrance{ + first_time_text = "Rockhamlet" + }) +"nRb" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/indoors) +"nRo" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fluff/railing/border, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/exposed/manorgarri) +"nRE" = ( +/obj/machinery/light/rogue/wallfire{ + pixel_x = -32 + }, +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 4 + }, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town) +"nRN" = ( +/obj/structure/stairs/stone{ + dir = 4; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"nRU" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave) +"nSF" = ( +/obj/item/roguebin/water/gross, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"nSS" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 4 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"nSX" = ( +/obj/structure/chair/wood/rogue/fancy, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"nTd" = ( +/obj/structure/closet/crate/chest/neu, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"nTe" = ( +/turf/open/floor/rogue/cobblerock, +/area/rogue/indoors/town/garrison) +"nTh" = ( +/obj/structure/fluff/statue/small, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/vault) +"nTz" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/under/basement) +"nUg" = ( +/obj/structure/table/wood{ + icon_state = "map3" + }, +/turf/open/floor/rogue/carpet/lord/center, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"nUh" = ( +/obj/structure/chair/stool/rogue, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"nUi" = ( +/obj/effect/landmark/start/weaponsmith{ + dir = 4 + }, +/obj/structure/fluff/railing/border{ + dir = 10 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"nUn" = ( +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"nUu" = ( +/obj/structure/stairs/stone, +/obj/structure/fluff/walldeco/bsmith{ + name = "dwarven quarters" + }, +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/exposed/dwarf) +"nUY" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"nVy" = ( +/obj/structure/fermenting_barrel/random/water{ + pixel_x = -5 + }, +/obj/effect/decal/turfedge_neu/alt{ + dir = 5 + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern/saiga) +"nVH" = ( +/obj/structure/mineral_door/wood/donjon/stone{ + lockid = "priest"; + name = "sleeping hall" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"nWf" = ( +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"nWE" = ( +/obj/structure/roguewindow/stained, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"nXi" = ( +/obj/item/candle/yellow/lit/infinite{ + pixel_x = -8; + pixel_y = -5 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/bath/redhouse) +"nXs" = ( +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/mountains) +"nXA" = ( +/turf/open/transparent/openspace, +/area/rogue/under/town/caverogue{ + first_time_text = "DEEP MINESHAFT" + }) +"nYt" = ( +/obj/item/chair/stool/bar/rogue, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/town/basement) +"nYB" = ( +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/church, +/area/rogue/under/town/basement) +"nZy" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/manorgarri) +"oat" = ( +/obj/structure/fluff/statue/knight/interior/r, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) +"oay" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/rtfield/hamlet) +"oaH" = ( +/obj/structure/closet/crate/roguecloset/inn, +/obj/item/grown/log/tree/small, +/obj/item/storage/box/matches, +/obj/item/grown/log/tree/small, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/cell) +"oaU" = ( +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town) +"oaV" = ( +/obj/structure/fermenting_barrel/water, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"obb" = ( +/obj/structure/roguetent/preopen, +/turf/open/floor/rogue/church, +/area/rogue/under/town/basement) +"obC" = ( +/obj/structure/ladder/earth, +/obj/structure/toilet, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/shop) +"obG" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"obJ" = ( +/turf/closed/wall/mineral/rogue/decostone/long{ + dir = 1 + }, +/area/rogue/indoors/town/church) +"ocA" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"ocJ" = ( +/obj/item/natural/bundle/stick, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/mountains) +"ocP" = ( +/obj/structure/mineral_door/wood/fancywood{ + lockid = "priest"; + name = "hospital" + }, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church) +"ocQ" = ( +/obj/structure/flora/rock/pile, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"ocX" = ( +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/indoors/shelter/rtfield) +"oda" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"odm" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/magiciantower) +"odO" = ( +/obj/item/reagent_containers/food/snacks/crow, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"odU" = ( +/obj/structure/fluff/railing/border{ + dir = 4 + }, +/turf/open/floor/rogue/rooftop/green{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"oem" = ( +/obj/structure/closet/crate/coffin, +/obj/item/bodypart/head/goblin, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/magician) +"oeV" = ( +/obj/structure/bed/rogue/hay{ + name = "apprentice bed" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"ofr" = ( +/obj/structure/roguewindow/openclose, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"ofA" = ( +/obj/structure/bars/pipe{ + dir = 9; + icon_state = "pipe" + }, +/turf/closed/wall/mineral/rogue/stonebrick/reddish, +/area/rogue/indoors/town/bath/redhouse) +"ogl" = ( +/turf/closed/wall/mineral/rogue/wooddark/window, +/area/rogue/indoors/town/garrison) +"ogx" = ( +/turf/closed/wall/mineral/rogue/decostone/chimney, +/area/rogue/indoors/town/dwarfin) +"ogP" = ( +/obj/structure/table/wood{ + dir = 1; + icon_state = "longtable_mid" + }, +/turf/open/floor/rogue/tile/checker, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"ogX" = ( +/obj/structure/giantfur, +/obj/effect/decal/turfedge_neu/alt_small, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern/saiga) +"ohj" = ( +/obj/structure/mineral_door/wood/fancywood{ + dir = 1; + locked = 1; + lockid = "soilson"; + name = "farmhouse" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/soilsons) +"ohm" = ( +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 4 + }, +/turf/closed/mineral/rogue, +/area/rogue/under/cave) +"ohp" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "makers"; + name = "makers guild" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town) +"oiu" = ( +/obj/structure/flora/ausbushes/ppflowers, +/turf/open/floor/rogue/grass, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"oiA" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"oiJ" = ( +/obj/effect/decal/turfedge_neu{ + dir = 8 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/outdoors/exposed/under/basement) +"ojm" = ( +/obj/item/reagent_containers/food/snacks/butter, +/obj/item/reagent_containers/food/snacks/butter, +/obj/structure/closet/crate/chest/crate, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/under/basement) +"ojw" = ( +/obj/machinery/light/rogue/campfire, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"ojT" = ( +/obj/structure/mineral_door/wood/violet{ + locked = 1; + lockid = "nightmaiden"; + name = "private" + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/bath/redhouse) +"ojZ" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/decal/turfedge_neu/road{ + dir = 5 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/woodish) +"okj" = ( +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors) +"oko" = ( +/obj/item/storage/belt/rogue/pouch/coins/poor, +/obj/effect/decal/cleanable/dirt/cobweb{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"okB" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"okM" = ( +/obj/structure/table/wood/reinf_long{ + dir = 1 + }, +/obj/item/natural/feather{ + pixel_x = 5; + pixel_y = -5 + }, +/obj/item/candle/skull/lit{ + pixel_x = -1; + pixel_y = 7 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/shop) +"olb" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"old" = ( +/turf/closed/wall/mineral/rogue/wooddark/vertical, +/area/rogue/indoors/town/church) +"omc" = ( +/obj/effect/decal/turfedge_neu{ + dir = 8 + }, +/obj/machinery/light/rogue/firebowl/stump, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"omH" = ( +/obj/structure/closet/crate/chest/wicker, +/obj/item/neuFarm/seed/wheat, +/obj/item/neuFarm/seed/wheat, +/obj/item/neuFarm/seed/wheat, +/obj/item/neuFarm/seed/wheat, +/obj/item/neuFarm/seed/wheat, +/obj/machinery/light/rogue/torchholder/c{ + pixel_y = -32 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/soilsons) +"omY" = ( +/obj/structure/bars/alt, +/obj/structure/table/wood/reinforced_alt{ + dir = 8 + }, +/obj/structure/fluff/walldeco/bath/wallrope{ + dir = 8 + }, +/obj/machinery/light/rogue/wallfire/candle/lamp{ + pixel_y = 0 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/bath/redhouse) +"ony" = ( +/obj/structure/mineral_door/wood/donjon{ + locked = 1; + lockid = "shop"; + name = "shop backdoor" + }, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/shop) +"onA" = ( +/obj/structure/bed/rogue/inn/double, +/obj/item/bedsheet/rogue/fabric_double, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town) +"onR" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/rogueore/iron, +/obj/item/rogueore/iron, +/obj/item/rogueore/iron, +/obj/item/rogueore/iron, +/obj/item/rogueore/iron, +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"onS" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"onX" = ( +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"onY" = ( +/obj/structure/stairs{ + dir = 1 + }, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/indoors) +"ool" = ( +/obj/effect/spawner/roguemap/treeorbush, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"ooJ" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 9 + }, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/garrison) +"opd" = ( +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"opi" = ( +/obj/structure/rack/rogue/shelf/notdense{ + pixel_x = 32; + pixel_y = 0 + }, +/turf/closed/wall/mineral/rogue/wooddark/horizontal, +/area/rogue/indoors/town) +"opk" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"opr" = ( +/obj/structure/flora/ausbushes/ppflowers, +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"opK" = ( +/turf/closed/wall/mineral/rogue/pipe{ + icon_state = "iron_corner" + }, +/area/rogue/indoors/town) +"opX" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/river) +"oqp" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"oqv" = ( +/obj/machinery/light/rogue/firebowl/standing/blue, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/shop) +"oqz" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/under/town/caverogue{ + first_time_text = "DEEP MINESHAFT" + }) +"oqC" = ( +/obj/structure/flora/roguegrass, +/obj/machinery/light/rogue/lanternpost/fixed, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"oqL" = ( +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"oqX" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/structure/flora/roguegrass, +/obj/structure/fluff/railing/stonehedge{ + dir = 4 + }, +/obj/structure/fluff/walldeco/vinez{ + dir = 4 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 6 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"orz" = ( +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"orW" = ( +/obj/structure/bars/pipe{ + dir = 8; + icon_state = "pipe" + }, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"osa" = ( +/obj/structure/chair/stool/rogue, +/obj/structure/fluff/railing/border, +/obj/effect/landmark/start/mercenary{ + dir = 4 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern/saiga) +"osA" = ( +/obj/structure/flora/roguetree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"osG" = ( +/turf/open/floor/rogue/rooftop/green{ + dir = 8 + }, +/area/rogue/outdoors/exposed/manorgarri) +"osR" = ( +/turf/open/floor/rogue/cobble/alt, +/area/rogue/outdoors/exposed/under/basement) +"otv" = ( +/obj/item/flashlight/flare/torch/lantern, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"ouq" = ( +/obj/structure/table/wood/plain_alt, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"ouS" = ( +/obj/structure/bed/rogue/shit, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"ouU" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1 + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"ouV" = ( +/turf/open/floor/carpet/royalblack, +/area/rogue/under/town/basement) +"ovf" = ( +/obj/structure/fluff/walldeco/bigpainting, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"ovm" = ( +/obj/item/reagent_containers/glass/cup/wooden, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"ovX" = ( +/obj/machinery/light/rogue/torchholder/l, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"owj" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/oak/broken, +/area/rogue/indoors/town/cell) +"owy" = ( +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town) +"owT" = ( +/obj/effect/decal/turfedge_neu/rockalt_edge, +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/church) +"owX" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 10 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"oxf" = ( +/obj/machinery/light/rogue/firebowl/stump, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/town) +"oxm" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/water/swamp, +/area/rogue/outdoors/rtfield/hamlet) +"oxu" = ( +/obj/structure/closet/crate/roguecloset, +/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"oxC" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"oxH" = ( +/obj/structure/well{ + icon_state = "well" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"oxM" = ( +/obj/effect/decal/cleanable/blood_neu/tracks, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/shelter/rtfield) +"oxU" = ( +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/outdoors/rtfield/hamlet) +"oyu" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/natural/plank, +/obj/item/natural/plank, +/obj/item/natural/plank, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"oyB" = ( +/obj/structure/bars/cemetery, +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"ozE" = ( +/obj/structure/fluff/walldeco/stone{ + pixel_x = 0; + pixel_y = 32 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"ozH" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 8; + icon_state = "torchwall1" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"ozI" = ( +/obj/structure/flora/roguegrass/stalky, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"ozM" = ( +/obj/effect/spawner/roguemap/treeorbush, +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"oAo" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1 + }, +/obj/structure/flora/rock/pile, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"oAJ" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"oBh" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"oBv" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"oBO" = ( +/obj/structure/statue/bone/skull, +/turf/open/water/swamp, +/area/rogue/under/catacombs) +"oBU" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fluff/railing/wood{ + dir = 8; + icon_state = "woodrailing"; + pixel_y = -1 + }, +/obj/machinery/light/rogue/firebowl, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"oDe" = ( +/obj/item/roguegem/green, +/obj/structure/closet/crate/chest/neu{ + locked = 1; + lockid = "mercator"; + max_integrity = 20000 + }, +/obj/item/reagent_containers/glass/bottle/rogue/healthpot, +/obj/item/reagent_containers/glass/bottle/rogue/healthpot, +/obj/item/reagent_containers/glass/bottle/rogue/antidote, +/obj/item/gun/ballistic/revolver/grenadelauncher/crossbow, +/obj/item/quiver/bolts, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"oDm" = ( +/obj/structure/table/wood/reinforced_alt{ + dir = 4 + }, +/obj/structure/bars/alt, +/obj/structure/fluff/walldeco/bath/wallrope{ + dir = 4 + }, +/obj/machinery/light/rogue/wallfire/candle/lamp{ + pixel_y = 0 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/bath/redhouse) +"oDv" = ( +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/obj/structure/fluff/railing/fence{ + dir = 8; + icon_state = "fence" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"oDK" = ( +/turf/closed/mineral/rogue, +/area/rogue/under/town/caverogue{ + first_time_text = "SCREAMING MOUNTAIN MINESHAFT" + }) +"oDM" = ( +/obj/effect/decal/remains/human/old, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"oDV" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 6 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"oEb" = ( +/obj/item/roguebin/water, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"oEc" = ( +/obj/structure/closet/dirthole/grave, +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"oEf" = ( +/obj/structure/table/wood{ + icon_state = "tablewood1" + }, +/obj/machinery/light/rogue/torchholder{ + dir = 8; + icon_state = "torchwall1" + }, +/obj/item/storage/box/matches, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"oEj" = ( +/turf/closed/mineral/random/rogue, +/area/rogue/outdoors/mountains) +"oEk" = ( +/obj/structure/fluff/railing/wood{ + dir = 4; + icon_state = "woodrailing" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/exposed/church) +"oEI" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/tavern/saiga) +"oFk" = ( +/obj/structure/flora/roguegrass, +/obj/machinery/light/rogue/torchholder{ + dir = 4; + icon_state = "torchwall1" + }, +/turf/open/floor/rogue/grass, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"oFq" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop/green{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"oFv" = ( +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"oFw" = ( +/obj/structure/roguewindow/openclose{ + dir = 8; + icon_state = "woodwindowdir" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"oFy" = ( +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) +"oFB" = ( +/obj/structure/table/wood/reinforced_alt, +/obj/structure/bars/alt, +/obj/structure/bars/passage/shutter{ + redstone_id = "feldsher" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) +"oFK" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1; + icon_state = "stonehedge_aged" + }, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"oGa" = ( +/obj/machinery/light/rogue/torchholder/l, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"oGq" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/blood/gibs/limb, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"oGx" = ( +/turf/closed/wall/mineral/rogue/wooddark/window, +/area/rogue/outdoors/town/roofs) +"oGB" = ( +/obj/structure/closet/crate/drawer/random, +/obj/item/roguekey/nitemaiden, +/obj/item/roguekey/nitemaiden, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/bath/redhouse) +"oGZ" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/entrance{ + first_time_text = "Rockhamlet" + }) +"oHk" = ( +/obj/structure/closet/crate/chest/wicker, +/obj/item/reagent_containers/food/snacks/produce/oat, +/obj/item/reagent_containers/food/snacks/produce/oat, +/obj/item/reagent_containers/food/snacks/produce/oat, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"oHq" = ( +/obj/structure/table/wood{ + layer = 2.8 + }, +/obj/item/paper/bsmith, +/obj/item/flint, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"oHv" = ( +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"oHK" = ( +/obj/structure/stairs, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/mountains) +"oHL" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "manor"; + name = "servants hall" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"oIj" = ( +/obj/structure/bars/pipe{ + dir = 8; + icon_state = "pipe" + }, +/turf/closed/wall/mineral/rogue/stonebrick/reddish, +/area/rogue/indoors/town/bath/redhouse) +"oIF" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/turf/open/floor/rogue/twig, +/area/rogue/under/town/basement) +"oII" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"oIO" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 5 + }, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"oJh" = ( +/obj/structure/fluff/dryingrack, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tailor) +"oJQ" = ( +/obj/structure/table/wood/treestump{ + pixel_x = -7 + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"oKg" = ( +/obj/effect/decal/remains/human, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"oKl" = ( +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town/cell) +"oLl" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/church) +"oLC" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fluff/railing/border, +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/under/basement) +"oLO" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/natural/stone, +/obj/item/natural/bundle/stoneblock, +/obj/item/natural/bundle/stoneblock, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"oMj" = ( +/obj/structure/bed/rogue/shit, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"oMz" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/church) +"oMB" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"oNh" = ( +/obj/item/gavelblock, +/obj/item/gavelhammer{ + name = "gavel" + }, +/obj/structure/table/wood/reinforced_alt{ + dir = 8 + }, +/obj/item/reagent_containers/glass/cup/steel{ + pixel_x = 12; + pixel_y = 10 + }, +/turf/open/floor/rogue/tile/masonic/single, +/area/rogue/indoors/town/dwarfin) +"oNm" = ( +/obj/structure/flora/roguegrass/water, +/turf/open/water/swamp, +/area/rogue/outdoors/rtfield/hamlet) +"oNx" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 8 + }, +/obj/structure/rack/rogue/shelf/biggest, +/obj/item/reagent_containers/glass/bottle/rogue/redwine, +/obj/item/reagent_containers/glass/bottle/rogue/wine/sourwine, +/obj/item/reagent_containers/glass/bottle/rogue/redwine, +/obj/item/reagent_containers/glass/bottle/rogue/whitewine, +/obj/item/reagent_containers/glass/bottle/rogue/whitewine, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/under/basement) +"oOm" = ( +/obj/structure/flora/roguegrass, +/obj/structure/closet/dirthole/closed/loot, +/obj/structure/gravemarker, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"oOw" = ( +/obj/effect/decal/remains/saiga, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"oOB" = ( +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/outdoors/exposed/dwarf) +"oOX" = ( +/obj/structure/fluff/railing/stonehedge{ + icon_state = "stonehedge_aged" + }, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"oPf" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 1 + }, +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"oPj" = ( +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/church, +/area/rogue/under/town/basement) +"oPp" = ( +/obj/structure/table/wood{ + dir = 1; + icon_state = "tablewood1" + }, +/obj/item/natural/bundle/cloth, +/obj/item/book/rogue/robber, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/magician) +"oPv" = ( +/obj/structure/flora/ausbushes/ppflowers, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"oPV" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"oQh" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "doctor" + }, +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"oQF" = ( +/turf/closed/mineral/rogue/bedrock, +/area/rogue/outdoors/rtfield/hamlet) +"oQY" = ( +/obj/structure/fluff/walldeco/chains, +/obj/effect/decal/turfedge_neu/alt{ + dir = 6 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town/cell) +"oRk" = ( +/turf/open/transparent/openspace, +/area/rogue/indoors/shelter/mountains/decap) +"oRn" = ( +/obj/structure/mineral_door/wood/donjon/stone{ + locked = 1; + lockid = "blacksmith"; + name = "door" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"oRq" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/soilsons) +"oRy" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/outdoors/exposed/under/basement) +"oRK" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/soilsons) +"oRX" = ( +/obj/structure/flora/roguegrass, +/mob/living/simple_animal/hostile/retaliate/rogue/goat, +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"oSt" = ( +/turf/closed/wall/mineral/rogue/wooddark/end{ + dir = 4; + icon_state = "endwooddark" + }, +/area/rogue/indoors/town) +"oSU" = ( +/turf/closed/mineral/rogue, +/area/rogue/outdoors/rtfield/hamlet) +"oTq" = ( +/obj/structure/table/wood/reinforced_alter, +/obj/item/rogueweapon/tongs, +/obj/item/rogueweapon/hammer/claw, +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"oTr" = ( +/obj/effect/spawner/roguemap/treeorbush, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"oTB" = ( +/obj/structure/stairs{ + dir = 8; + icon_state = "stairs" + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/shelter/town/dwarf) +"oTL" = ( +/obj/structure/bars, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"oTP" = ( +/obj/structure/roguewindow/openclose{ + dir = 8; + icon_state = "woodwindowdir" + }, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/shelter/rtfield) +"oUl" = ( +/obj/structure/flora/roguetree/burnt, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"oUu" = ( +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/rope/chain, +/obj/item/rope/chain, +/obj/item/rope/chain, +/obj/item/rope/chain, +/obj/item/rope/chain, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"oVe" = ( +/obj/structure/table/wood/large/corner_new{ + dir = 9 + }, +/obj/item/rogueweapon/sickle, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/cell) +"oVv" = ( +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"oVI" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"oVT" = ( +/obj/effect/spawner/roguemap/treeorbush, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"oVX" = ( +/obj/machinery/light/rogue/hearth{ + fueluse = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"oWe" = ( +/obj/structure/fluff/railing/wood, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"oWg" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguetree/evil, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"oWJ" = ( +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"oXb" = ( +/obj/structure/fluff/statue/psy{ + desc = "A precious relic from before The Weeping. One year ago the eyes of the statue wept real tears."; + name = "The Forgotten God" + }, +/obj/structure/stone_tile/slab/cracked, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"oXi" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/landmark/start/captain{ + dir = 1 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/garrison) +"oXq" = ( +/obj/structure/rack/rogue, +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"oXy" = ( +/obj/structure/fluff/walldeco/med5{ + pixel_x = 32 + }, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"oXJ" = ( +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"oXM" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/tavern/saiga) +"oYu" = ( +/obj/structure/table/vtable, +/obj/item/reagent_containers/glass/cup, +/obj/item/candle/yellow/lit{ + pixel_x = 10; + pixel_y = 11 + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town) +"oYw" = ( +/obj/structure/fluff/railing/border{ + dir = 5; + icon_state = "border" + }, +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/obj/machinery/light/roguestreet/midlamp{ + plane = -1 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"oYE" = ( +/obj/effect/decal/turfedge_neu{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"oYG" = ( +/turf/closed/wall/mineral/rogue/pipe{ + icon_state = "iron_line" + }, +/area/rogue/indoors/town) +"oYY" = ( +/obj/structure/rack/rogue/shelf/notdense{ + pixel_y = 0 + }, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/dwarfin) +"oZl" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"oZR" = ( +/obj/structure/mirror{ + pixel_x = 28; + pixel_y = 0 + }, +/obj/item/roguebin/water/gross, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"oZT" = ( +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern/saiga) +"pak" = ( +/obj/structure/closet/crate/chest/wicker, +/obj/item/reagent_containers/food/snacks/produce/onion, +/obj/item/reagent_containers/food/snacks/produce/onion, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/under/basement) +"pas" = ( +/obj/structure/mineral_door/wood/window{ + lockid = "manor"; + name = "council chamber" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"paT" = ( +/obj/structure/stairs/stone{ + dir = 8; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) +"pbD" = ( +/turf/closed/wall/mineral/rogue/stonebrick, +/area/rogue/outdoors/exposed/under/basement) +"pcd" = ( +/obj/structure/rack/rogue, +/obj/item/storage/belt/rogue/pouch, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"pch" = ( +/obj/effect/decal/remains/human, +/obj/item/rogueweapon/pick, +/obj/effect/decal/cleanable/blood/old, +/obj/item/flashlight/flare/torch/lantern/copper, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"pcD" = ( +/obj/structure/mineral_door/wood/deadbolt{ + name = "privy" + }, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/shop) +"pdc" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"pdp" = ( +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church) +"pdq" = ( +/turf/open/floor/rogue/metal/barograte, +/area/rogue/outdoors/exposed/town/hamlet) +"pdy" = ( +/obj/structure/mineral_door/wood/donjon{ + dir = 8; + locked = 1; + lockid = "walls" + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/entrance{ + first_time_text = "Rockhamlet" + }) +"pdD" = ( +/obj/structure/flora/roguegrass, +/obj/machinery/light/rogue/firebowl/stump{ + pixel_y = 8 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"pdG" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"peo" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"peE" = ( +/obj/structure/fluff/walldeco/rpainting{ + pixel_y = 32 + }, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"peW" = ( +/obj/machinery/light/rogue/forge, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"peY" = ( +/obj/structure/roguemachine/scomm/r, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/dwarfin) +"pfh" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 6 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"pfi" = ( +/obj/structure/flora/roguegrass{ + pixel_x = -1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"pfm" = ( +/obj/structure/chair/wood/rogue/chair_noble/purple, +/turf/open/floor/carpet/stellar, +/area/rogue/indoors/town/magician) +"pfH" = ( +/turf/closed/mineral/rogue, +/area/rogue/under/cave/abandoned_mine) +"pfP" = ( +/obj/structure/mineral_door/wood{ + lockid = "butcher"; + name = "butchers house" + }, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"pfY" = ( +/obj/structure/disposalpipe/broken{ + dir = 8 + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"pgB" = ( +/obj/structure/mineral_door/wood/fancywood{ + lockid = "nightmaiden"; + name = "salon" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/bath/redhouse) +"pgK" = ( +/turf/closed/wall/mineral/rogue/stonebrick, +/area/rogue/indoors/town) +"pha" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/statue/gargoyle, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors) +"phc" = ( +/obj/structure/fluff/statue/shisha{ + pixel_x = -11 + }, +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/tile/masonic/single, +/area/rogue/indoors/town/magician) +"phf" = ( +/obj/structure/fluff/walldeco/bath/wallrope{ + dir = 10 + }, +/turf/closed/wall/mineral/rogue/stonebrick/reddish, +/area/rogue/indoors/town/bath/redhouse) +"phV" = ( +/obj/effect/spawner/roguemap/mine_mole_maybe, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/mountains) +"phY" = ( +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/rooftop/green{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"pjf" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/sunlight, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/outlaw) +"pjj" = ( +/turf/closed/mineral/rogue, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); + first_time_text = "CATACOMBS" + }) +"pjU" = ( +/turf/closed/wall/mineral/rogue/wooddark/slitted, +/area/rogue/indoors/town) +"pkn" = ( +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/obj/effect/decal/remains/human/old, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/plague_district) +"pkE" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"pkF" = ( +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"pkV" = ( +/obj/structure/closet/crate/chest/crate/steward, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"plb" = ( +/obj/structure/roguetent/preopen, +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"plB" = ( +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors) +"plJ" = ( +/obj/structure/fluff/railing/border, +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"plT" = ( +/obj/structure/chair/wood/rogue{ + dir = 8 + }, +/turf/open/floor/rogue/carpet/lord/right, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"plV" = ( +/obj/structure/roguewindow/stained, +/turf/open/floor/rogue/tile/masonic/inverted, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"pmr" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/underworld/road, +/area/rogue/indoors/town/church/chapel) +"pms" = ( +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/outdoors/exposed/town/hamlet) +"pmz" = ( +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"pmF" = ( +/obj/structure/table/wood/large/corner_new{ + dir = 9 + }, +/obj/item/toy/cards/deck/syndicate, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/garrison) +"pmI" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"pnA" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"pnK" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"pnL" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/exposed/dwarf) +"pod" = ( +/obj/structure/mineral_door/wood/fancywood{ + lockid = "priest"; + name = "hall of worship" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"pov" = ( +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/bath/redhouse) +"poA" = ( +/obj/item/candle/yellow/lit/infinite, +/turf/open/floor/rogue/sandstone, +/area/rogue/indoors/town/church/chapel) +"poE" = ( +/obj/effect/decal/remains/saiga, +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"poF" = ( +/obj/structure/closet/crate/coffin, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) +"poG" = ( +/obj/machinery/light/rogue/hearth, +/obj/effect/decal/cleanable/food/flour, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"ppa" = ( +/obj/effect/spawner/roguemap/hauntz_random, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"ppd" = ( +/obj/structure/mineral_door/wood/fancywood{ + locked = 1; + lockid = "hpriest"; + name = "priest office" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"ppn" = ( +/obj/structure/table/vtable/v2, +/obj/structure/bars/pipe, +/obj/item/natural/feather, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town) +"ppo" = ( +/obj/machinery/light/rogue/firebowl, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"ppJ" = ( +/obj/machinery/light/rogue/firebowl/stump, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"ppM" = ( +/obj/structure/closet/dirthole/closed/loot, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"ppN" = ( +/obj/structure/fluff/clodpile, +/obj/structure/kneestingers, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"ppO" = ( +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/rogueweapon/knife/dagger, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"ppV" = ( +/obj/structure/fluff/walldeco/customflag, +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/indoors/town) +"pqk" = ( +/obj/structure/roguewindow/openclose{ + dir = 8 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors) +"pqq" = ( +/obj/item/reagent_containers/food/snacks/fat, +/obj/item/reagent_containers/food/snacks/fat, +/obj/item/reagent_containers/food/snacks/fat, +/obj/structure/closet/crate/chest/crate, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/under/basement) +"pqP" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/toy/cards/deck, +/obj/item/storage/fancy/cigarettes/zig, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/garrison) +"pqS" = ( +/obj/machinery/light/rogue/wallfire/candle/weak, +/obj/structure/roguemachine/camera/left, +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/obj/structure/bars/pipe{ + dir = 6; + icon_state = "pipe" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town) +"prj" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/reagent_containers/food/snacks/rogue/pastry, +/obj/item/reagent_containers/food/snacks/rogue/frybread, +/obj/item/reagent_containers/food/snacks/rogue/biscuit, +/obj/item/reagent_containers/food/snacks/rogue/cheddarwedge/aged, +/obj/item/reagent_containers/food/snacks/rogue/raisinbreadslice, +/turf/open/floor/rogue/tile/masonic/single, +/area/rogue/indoors/town/magician) +"pro" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/ruinedwood, +/area/rogue/under/town/sewer) +"prL" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/church) +"prN" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1; + icon_state = "stonehedge_aged" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"prU" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"psp" = ( +/turf/closed/mineral/rogue/bedrock, +/area/rogue) +"ptm" = ( +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"ptr" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/bull, +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"ptt" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/exposed/dwarf) +"ptN" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 5 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"pux" = ( +/obj/structure/table/wood/treestump{ + pixel_x = -7 + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"puJ" = ( +/obj/structure/fluff/walldeco/customflag{ + pixel_y = -32 + }, +/obj/machinery/light/rogue/torchholder{ + dir = 8; + icon_state = "torchwall1" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"pvC" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"pwa" = ( +/obj/structure/table/wood{ + icon_state = "longtable" + }, +/obj/item/cooking/pan{ + pixel_y = 7 + }, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"pwc" = ( +/obj/effect/decal/remains/human/old, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"pwB" = ( +/obj/structure/mineral_door/wood/donjon{ + dir = 4; + lockid = "doctor"; + name = "Feldscher" + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"pwX" = ( +/obj/item/book/rogue/secret/xylix, +/obj/item/book/rogue/law, +/turf/open/floor/rogue/tile{ + icon_state = "chess" + }, +/area/rogue/indoors/town/shop) +"pxa" = ( +/obj/effect/decal/remains/saiga, +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"pxn" = ( +/obj/effect/decal/cleanable/food/tomato_smudge, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/under/basement) +"pxM" = ( +/obj/structure/lever/wall{ + pixel_x = 32; + redstone_id = "balloon_shutter" + }, +/obj/structure/closet/crate/chest/neu, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/shop) +"pxU" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"pyR" = ( +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/bath/redhouse) +"pyU" = ( +/obj/structure/stairs{ + dir = 4 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/town/roofs) +"pzz" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 6 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern/saiga) +"pzV" = ( +/turf/open/floor/rogue/rooftop/green{ + dir = 1 + }, +/area/rogue/outdoors/mountains) +"pzX" = ( +/obj/structure/table/wood/large/corner_blue{ + dir = 9 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/bath/redhouse) +"pAW" = ( +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/soilsons) +"pBo" = ( +/obj/structure/bed/rogue/wool, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/shop) +"pBr" = ( +/obj/structure/closet/crate/roguecloset/lord{ + locked = 0; + lockid = null + }, +/obj/item/kitchen/spoon/plastic, +/obj/item/kitchen/spoon/plastic, +/obj/item/kitchen/spoon/plastic, +/obj/item/kitchen/spoon/plastic, +/obj/item/kitchen/spoon/plastic, +/obj/item/kitchen/spoon/plastic, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/obj/item/reagent_containers/glass/bowl, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"pBw" = ( +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/under/basement) +"pBL" = ( +/obj/structure/flora/roguetree/burnt, +/obj/structure/fluff/walldeco/vinez/l, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"pBS" = ( +/obj/structure/table/wood/nice/decorated, +/obj/item/reagent_containers/glass/cup/steel{ + pixel_y = 6 + }, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"pCp" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 + }, +/obj/effect/decal/turfedge_neu/alt{ + dir = 5 + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"pCE" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 10 + }, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"pCG" = ( +/obj/structure/fluff/walldeco/bath/gents, +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/bath/redhouse) +"pCU" = ( +/obj/structure/table/wood/nice/decorated, +/turf/open/floor/carpet/red, +/area/rogue/outdoors/exposed/under/basement) +"pCV" = ( +/turf/open/floor/rogue/cobble/alt, +/area/rogue/outdoors/exposed/town/hamlet) +"pCW" = ( +/obj/structure/fluff/statue/knight/r, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"pDj" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/decal/remains/saiga, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"pDN" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/obj/effect/decal/remains/cabbit, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"pEe" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/turf/open/water/swamp/deep, +/area/rogue/outdoors/rtfield/boggish) +"pEE" = ( +/obj/machinery/light/rogue/wallfire/candle{ + pixel_y = -30 + }, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/bath/redhouse) +"pEG" = ( +/obj/effect/decal/cleanable/blood/gibs/limb{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"pEH" = ( +/obj/structure/stairs{ + dir = 1; + icon_state = "stairs" + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/shop) +"pFc" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "roomi"; + name = "Duchess suite" + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern/saiga) +"pFD" = ( +/turf/closed/mineral/random/rogue, +/area/rogue/indoors/shelter/mountains) +"pGp" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/obj/effect/spawner/roguemap/hauntz_random, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"pHk" = ( +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/outdoors/exposed/town/hamlet) +"pHp" = ( +/obj/structure/flora/roguegrass/water, +/obj/structure/flora/roguegrass, +/obj/item/restraints/legcuffs/beartrap/armed/camouflage, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/boggish) +"pHH" = ( +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"pHV" = ( +/obj/machinery/light/rogue/wallfire/candle, +/obj/structure/closet/crate/chest/neu_iron, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town) +"pHY" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"pIT" = ( +/obj/structure/bars/pipe{ + dir = 9 + }, +/turf/closed/wall/mineral/rogue/stonebrick/reddish, +/area/rogue/indoors/town/bath/redhouse) +"pJz" = ( +/obj/machinery/light/rogue/torchholder/r, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"pKh" = ( +/obj/structure/fermenting_barrel/water, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/town/roofs) +"pKw" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/town) +"pKz" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"pKE" = ( +/obj/structure/floordoor/gatehatch/inner{ + redstone_id = "gatelava" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/exposed/town/hamlet) +"pKL" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"pLb" = ( +/turf/closed/wall/mineral/rogue/wooddark/horizontal, +/area/rogue/indoors/town) +"pLh" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/woodish) +"pLO" = ( +/obj/structure/roguemachine/musicbox, +/turf/open/floor/rogue/tile/masonic/inverted, +/area/rogue/indoors/town/magician) +"pLZ" = ( +/obj/structure/mineral_door/wood/donjon{ + locked = 1; + lockid = "walls" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/entrance{ + first_time_text = "Rockhamlet" + }) +"pMg" = ( +/obj/structure/bookcase, +/obj/item/book/rogue/law, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"pNm" = ( +/obj/structure/kneestingers, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"pNI" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"pNR" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 5 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"pNY" = ( +/turf/closed/wall/mineral/rogue/decostone/chimney, +/area/rogue/outdoors/town/roofs) +"pOA" = ( +/obj/effect/decal/remains/human, +/obj/machinery/light/rogue/campfire/densefire, +/obj/structure/fluff/psycross{ + pixel_y = 14 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/plague_district) +"pOI" = ( +/obj/structure/closet/crate/roguecloset/inn, +/obj/item/clothing/suit/roguetown/shirt/rags, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/shelter/rtfield) +"pPO" = ( +/obj/structure/stairs/stone{ + dir = 8 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"pPX" = ( +/obj/structure/rack/rogue, +/obj/item/storage/backpack/rogue/satchel, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"pQi" = ( +/obj/structure/bars/pipe, +/obj/structure/bars/pipe{ + dir = 9; + icon_state = "pipe" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"pQS" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"pSa" = ( +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/town/tavern/saiga) +"pSx" = ( +/obj/item/natural/rock/iron, +/obj/structure/fluff/walldeco/masonflag{ + pixel_y = 32 + }, +/obj/item/grown/log/tree/stake, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/mountains) +"pTJ" = ( +/obj/structure/roguemachine/stockpile, +/obj/item/rogueore/coal{ + pixel_x = 10; + pixel_y = -2 + }, +/obj/item/rogueore/coal{ + pixel_y = -8 + }, +/obj/item/rogueore/coal{ + pixel_x = -10 + }, +/obj/item/rogueore/coal, +/obj/item/rogueweapon/shovel/small{ + pixel_x = 5; + pixel_y = 9 + }, +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/obj/item/rogueore/coal, +/obj/item/rogueore/coal, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"pTV" = ( +/obj/structure/fluff/millstone{ + pixel_y = 7 + }, +/obj/structure/table/wood/plain/alto, +/obj/structure/fluff/statue/pillar{ + dir = 1; + name = "shaft"; + pixel_x = 12; + pixel_y = 25 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"pUn" = ( +/obj/structure/closet/dirthole/grave, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/plague_district) +"pUL" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/decal/shadow_floor{ + dir = 5 + }, +/turf/open/floor/rogue/tile/bath, +/area/rogue/indoors/town/bath/redhouse) +"pUU" = ( +/obj/machinery/light/rogue/torchholder/l, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"pUX" = ( +/obj/structure/stairs{ + dir = 8; + icon_state = "stairs" + }, +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/shelter/rtfield) +"pUZ" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1 + }, +/obj/structure/flora/rock/pile, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"pVa" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1; + icon_state = "stonehedge_aged" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"pVp" = ( +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"pVx" = ( +/obj/effect/landmark/start/manorguardsman, +/turf/open/floor/rogue/carpet/lord/left, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"pVK" = ( +/obj/structure/roguemachine/scomm/r, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/town/hamlet) +"pVQ" = ( +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/bath/redhouse) +"pVX" = ( +/obj/item/grown/log/tree/small, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"pXe" = ( +/obj/structure/mineral_door/swing_door{ + keylock = 1; + lockid = "merchant" + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"pXo" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 4 + }, +/area/rogue/indoors/shelter/mountains/decap) +"pXy" = ( +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"pXH" = ( +/obj/structure/table/wood{ + layer = 2.8 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town) +"pXN" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 5 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"pYg" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/river) +"pYn" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 4; + icon_state = "stonehedge_aged" + }, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"pYz" = ( +/obj/structure/flora/roguegrass/bush_meagre, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"pYM" = ( +/obj/effect/landmark/start/tailor, +/obj/structure/roguemachine/mail{ + pixel_x = -31; + pixel_y = 0 + }, +/turf/open/floor/carpet/purple, +/area/rogue/indoors/town/tailor) +"pYT" = ( +/obj/structure/roguemachine/vendor/centcom, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/under/town/basement) +"pZc" = ( +/obj/structure/bookcase, +/obj/item/book/rogue/blackmountain, +/obj/item/book/rogue/nitebeast, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"pZn" = ( +/turf/closed/wall/mineral/rogue/decostone/chimney, +/area/rogue/outdoors) +"pZz" = ( +/obj/item/rogueweapon/polearm/spear/stone, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"pZB" = ( +/obj/structure/bars/pipe{ + dir = 8; + icon_state = "pipe" + }, +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/town/roofs) +"qai" = ( +/turf/open/transparent/openspace, +/area/rogue/indoors/shelter/rtfield) +"qaH" = ( +/turf/closed/wall/mineral/rogue/wooddark/window, +/area/rogue/indoors/town/church) +"qbe" = ( +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/garrison) +"qbB" = ( +/obj/structure/table/wood, +/turf/open/floor/rogue/church, +/area/rogue/under/town/basement) +"qbF" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners, +/obj/structure/fluff/railing/border{ + dir = 9; + icon_state = "border" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"qbM" = ( +/obj/structure/roguemachine/mail/r, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"qcg" = ( +/obj/machinery/light/rogue/torchholder/cold, +/turf/open/floor/rogue/concrete, +/area/rogue/under/town/basement) +"qcp" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"qcq" = ( +/obj/structure/mineral_door/wood/violet{ + locked = 1; + lockid = "hand" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"qcx" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/ammo_casing/caseless/rogue/bolt, +/obj/item/ammo_casing/caseless/rogue/bolt, +/obj/item/ammo_casing/caseless/rogue/bolt, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"qcD" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle{ + dir = 1 + }, +/area/rogue/indoors/town/tavern) +"qdU" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 4 + }, +/obj/structure/flora/roguegrass, +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"qdW" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/exposed/manorgarri) +"qel" = ( +/obj/structure/fluff/dryingrack, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/boggish) +"qer" = ( +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/indoors/town) +"qeY" = ( +/turf/closed/wall/mineral/rogue/decostone/long{ + dir = 1 + }, +/area/rogue/indoors/town) +"qfc" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"qfi" = ( +/obj/structure/closet/crate/drawer, +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/obj/item/natural/cloth, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"qfT" = ( +/turf/open/floor/rogue/naturalstone, +/area/rogue) +"qgf" = ( +/obj/effect/decal/cleanable/dirt/cobweb{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"qgr" = ( +/obj/effect/sunlight, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors) +"qgt" = ( +/obj/item/natural/stone, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"qgE" = ( +/obj/structure/bed/rogue/shit, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town/cell) +"qgJ" = ( +/obj/structure/table/wood/nice/decorated, +/obj/item/candle/skull/lit{ + pixel_x = -1; + pixel_y = 10 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/magician) +"qhw" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"qhD" = ( +/obj/effect/spawner/roguemap/treeorbush, +/obj/effect/decal/turfedge_neu/road, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"qhX" = ( +/obj/item/natural/stone, +/obj/item/natural/stone, +/obj/item/natural/stone, +/obj/item/natural/stone, +/obj/item/natural/stone, +/obj/item/natural/stone, +/obj/item/natural/rock, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"qij" = ( +/turf/open/floor/rogue/twig, +/area/rogue/under/town/basement) +"qio" = ( +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"qiP" = ( +/obj/structure/bars/pipe{ + dir = 6; + icon_state = "pipe" + }, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"qiW" = ( +/obj/structure/bed/rogue/shit, +/obj/item/rogueweapon/axe/stone, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"qjp" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/ammo_casing/caseless/rogue/arrow, +/obj/item/ammo_casing/caseless/rogue/arrow, +/obj/item/ammo_casing/caseless/rogue/arrow, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"qjF" = ( +/obj/structure/table/wood/treestump{ + pixel_x = -7 + }, +/obj/item/rogueweapon/polearm/halberd/bardiche/woodcutter/neu, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"qko" = ( +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town) +"qkJ" = ( +/obj/structure/fluff/walldeco/painting/queen{ + pixel_x = 32 + }, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/cell) +"qkR" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/closed/wall/mineral/rogue/wooddark/slitted, +/area/rogue/indoors/town/church) +"qkV" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/decal/turfedge_neu/alt{ + dir = 9 + }, +/obj/effect/landmark/start/guardsman{ + dir = 4 + }, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/garrison) +"qkY" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/water/swamp/deep, +/area/rogue/outdoors/rtfield/hamlet) +"qls" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"qlB" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/landmark/start/nightmaiden{ + dir = 4 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/bath/redhouse) +"qlR" = ( +/obj/machinery/light/rogue/chand{ + pixel_x = -69; + pixel_y = -33 + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/tavern/saiga) +"qmE" = ( +/obj/structure/closet/crate/chest/neu, +/turf/open/floor/rogue/oak, +/area/rogue/indoors/town/cell) +"qno" = ( +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/manorgarri) +"qnw" = ( +/obj/structure/roguewindow/openclose{ + dir = 4; + icon_state = "woodwindowdir" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors) +"qnx" = ( +/obj/structure/table/wood/plain_alt, +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"qny" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "manor" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"qnG" = ( +/obj/structure/stationary_bell{ + pixel_x = -31; + pixel_y = -28 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/exposed/church) +"qnM" = ( +/turf/closed/wall/mineral/rogue/pipe{ + dir = 4; + icon_state = "iron_line" + }, +/area/rogue/indoors/town) +"qof" = ( +/obj/effect/decal/remains/human/old, +/obj/item/roguecoin/copper, +/obj/item/roguecoin/copper, +/turf/open/floor/rogue/dirt, +/area/rogue/under/catacombs) +"qoz" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/twig, +/area/rogue/under/town/basement) +"qoI" = ( +/obj/structure/bars/passage{ + redstone_id = "sewer1" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"qoM" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"qoQ" = ( +/obj/structure/fluff/statue/knightalt/r, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"qpX" = ( +/obj/structure/fluff/walldeco/innsign/trophy, +/turf/open/floor/rogue/carpet/green, +/area/rogue/indoors/town/tavern/saiga) +"qqn" = ( +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/ingot/copper, +/obj/item/ingot/copper, +/obj/item/ingot/copper, +/obj/item/ingot/copper, +/obj/effect/decal/cleanable/dirt/cobweb{ + dir = 1 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town) +"qqw" = ( +/turf/open/transparent/openspace, +/area/rogue) +"qrh" = ( +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/carpet/red, +/area/rogue/outdoors/exposed/under/basement) +"qrD" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"qrH" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/obj/structure/flora/roguegrass/bush/wall/tall, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"qrL" = ( +/obj/item/book/rogue/necra, +/obj/item/book/rogue/godofdreamsandnightmares, +/obj/structure/bookcase, +/turf/open/floor/rogue/church, +/area/rogue/indoors/town/church) +"qsl" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 6 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"qtg" = ( +/obj/structure/flora/rock/pile, +/obj/structure/fluff/railing/stonehedge{ + icon_state = "stonehedge_aged" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"qtH" = ( +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/town/hamlet) +"qud" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 4; + icon_state = "stonehedge_aged" + }, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"quy" = ( +/obj/structure/mineral_door/bars{ + locked = 1; + lockid = "garrison" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"quA" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"quG" = ( +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/exposed/town/hamlet) +"quW" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 8; + icon_state = "torchwall1" + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/under/basement) +"qvc" = ( +/obj/structure/fluff/clock, +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/church) +"qvP" = ( +/obj/structure/table/wood, +/obj/structure/roguemachine/vendor, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/shop) +"qvS" = ( +/obj/structure/table/wood{ + dir = 1; + icon_state = "longtable" + }, +/obj/item/reagent_containers/glass/cup/wooden{ + pixel_x = -13 + }, +/obj/item/rogueweapon/knife/cleaver, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"qwa" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/town/roofs) +"qwh" = ( +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/tile/masonic/inverted, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"qwu" = ( +/obj/effect/decal/cleanable/blood/gibs/core, +/obj/item/clothing/suit/roguetown/shirt/undershirt/priest, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"qwH" = ( +/obj/structure/rack/rogue/shelf/notdense{ + pixel_x = 32; + pixel_y = 30 + }, +/turf/closed/wall/mineral/rogue/wooddark/vertical, +/area/rogue/indoors/town/garrison) +"qwN" = ( +/obj/structure/bed/rogue/mediocre, +/turf/open/floor/rogue/church, +/area/rogue/under/town/basement) +"qwU" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/mossy{ + dir = 6 + }, +/turf/open/floor/rogue/grass, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"qxr" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"qxw" = ( +/obj/item/roguebin/water/gross, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town) +"qxF" = ( +/obj/item/reagent_containers/food/snacks/smallrat, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"qxN" = ( +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/town/roofs) +"qxO" = ( +/turf/open/floor/rogue/tile/masonic/single, +/area/rogue/indoors/town/dwarfin) +"qyv" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/book/rogue/yeoldecookingmanual, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/basement) +"qyR" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/saigabuck/tame, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"qyS" = ( +/obj/structure/handcart{ + dir = 8; + icon_state = "cart-empty" + }, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/shelter/mountains) +"qzq" = ( +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/under/basement) +"qzY" = ( +/turf/closed/wall/mineral/rogue/stonebrick, +/area/rogue/indoors/town/tavern) +"qAd" = ( +/obj/structure/flora/roguegrass/water, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"qAe" = ( +/obj/effect/spawner/roguemap/hauntz_random, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"qAH" = ( +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/turf/open/floor/rogue/tile/masonic/single, +/area/rogue/indoors/town/magician) +"qBy" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner, +/area/rogue/indoors/shelter/mountains/decap) +"qCs" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/woodish) +"qDr" = ( +/obj/structure/fluff/wallclock/r, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors) +"qDJ" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"qEt" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners, +/obj/effect/decal/turfedge_neu/rockalt_edge, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"qEw" = ( +/turf/closed/wall/mineral/rogue/wooddark/horizontal, +/area/rogue/indoors/shelter/mountains) +"qEy" = ( +/obj/structure/fluff/railing/fence{ + dir = 8; + icon_state = "fence" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"qEA" = ( +/obj/effect/decal/cleanable/blood/footprints, +/obj/effect/spawner/roguemap/sewerencounter, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"qFA" = ( +/turf/closed/wall/mineral/rogue/wooddark/end, +/area/rogue/indoors/town/shop) +"qFE" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/ring/silver, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/vault) +"qGx" = ( +/turf/closed/mineral/random/rogue, +/area/rogue/outdoors/rtfield/hamlet) +"qGH" = ( +/obj/structure/flora/roguegrass/water, +/obj/machinery/light/rogue/lanternpost/fixed, +/turf/open/water/cleanshallow, +/area/rogue/outdoors/exposed/manorgarri) +"qGI" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner, +/area/rogue) +"qHo" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"qHI" = ( +/turf/open/floor/rogue/grass, +/area/rogue/outdoors) +"qHN" = ( +/obj/machinery/light/rogue/hearth, +/obj/item/clothing/mask/rogue/facemask/prisoner, +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/cell) +"qHV" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/candle/yellow/lit/infinite/strong, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern/saiga) +"qIm" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/rtfield/spooky) +"qIo" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1 + }, +/obj/structure/flora/rock/pile, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"qIX" = ( +/obj/structure/table/wood{ + dir = 1; + icon_state = "tablewood1" + }, +/obj/item/natural/cloth, +/obj/item/bath/soap, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"qJn" = ( +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"qJt" = ( +/turf/closed/wall/mineral/rogue/decostone/chimney, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"qJB" = ( +/obj/structure/closet/crate/roguecloset/lord{ + locked = 0; + lockid = null + }, +/obj/item/roguekey/archive, +/obj/item/roguekey/blacksmith, +/obj/item/roguekey/church, +/obj/item/roguekey/dungeon, +/obj/item/roguekey/garrison, +/obj/item/roguekey/graveyard, +/obj/item/roguekey/manor, +/obj/item/roguekey/mason, +/obj/item/roguekey/merchant, +/obj/item/roguekey/shop, +/obj/item/roguekey/tavern, +/obj/item/roguekey/walls, +/obj/structure/bars/pipe, +/obj/item/roguekey/soilson, +/obj/item/roguekey/doctor, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town) +"qJI" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/storage/belt/rogue/pouch, +/obj/item/storage/belt/rogue/pouch, +/obj/item/storage/backpack/rogue/satchel, +/obj/item/storage/backpack/rogue/satchel, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/shop) +"qJZ" = ( +/obj/effect/decal/remains/cabbit, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"qLK" = ( +/obj/structure/bars/pipe{ + dir = 6; + icon_state = "pipe" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"qLQ" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"qLT" = ( +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/under/town/sewer) +"qMc" = ( +/obj/effect/landmark/latejoin, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"qMk" = ( +/obj/item/reagent_containers/food/snacks/smallrat, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/soilsons) +"qMt" = ( +/obj/effect/decal/turfedge_neu/alt_small{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town) +"qMA" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/book/rogue/bibble, +/turf/open/floor/rogue/church, +/area/rogue/indoors/town/church) +"qMN" = ( +/obj/structure/stairs{ + dir = 4; + icon_state = "stairs" + }, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/indoors) +"qMW" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 8; + icon_state = "torchwall1" + }, +/obj/structure/closet/crate/coffin, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) +"qNc" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/blocks/stonered, +/area/rogue/indoors/town/bath/redhouse) +"qNh" = ( +/obj/item/storage/roguebag, +/obj/structure/rack/rogue, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"qNk" = ( +/turf/open/water/swamp, +/area/rogue/under/catacombs/dwarfoutpost) +"qNs" = ( +/obj/item/rogueweapon/chisel{ + pixel_x = -11; + pixel_y = 1 + }, +/obj/structure/table/wood/plain_alt, +/obj/item/rogueweapon/handsaw{ + pixel_x = 4; + pixel_y = 2 + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"qNw" = ( +/obj/structure/table/wood{ + dir = 10; + icon_state = "tablewood2" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"qNz" = ( +/obj/structure/fluff/walldeco/masonflag{ + pixel_y = 32 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) +"qNI" = ( +/obj/structure/table/wood/plain, +/obj/machinery/light/rogue/wallfire/candle/l, +/obj/item/book_crafting_kit, +/obj/item/book_crafting_kit, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/outdoors/exposed/under/basement) +"qOE" = ( +/obj/structure/stairs{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/church) +"qOG" = ( +/turf/open/floor/rogue/carpet/green, +/area/rogue/indoors/town/tavern/saiga) +"qOT" = ( +/obj/structure/table/wood, +/obj/item/clothing/head/roguetown/flathat, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"qOU" = ( +/obj/structure/fluff/railing/wood, +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"qPb" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "manor" + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"qPV" = ( +/obj/item/grown/log/tree/small, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"qQe" = ( +/obj/structure/stairs{ + dir = 1 + }, +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/church) +"qQj" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 8 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"qQr" = ( +/obj/structure/table/wood/plain_alt, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/church) +"qQz" = ( +/turf/open/floor/rogue/ruinedwood, +/area/rogue/outdoors/town/roofs) +"qQN" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"qRu" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 1 + }, +/area/rogue/indoors/shelter/mountains/decap) +"qSl" = ( +/obj/structure/table/wood{ + dir = 10; + icon_state = "tablewood2" + }, +/obj/item/storage/box/matches, +/obj/item/clothing/mask/cigarette/pipe, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"qSx" = ( +/obj/machinery/light/rogue/lanternpost/fixed{ + dir = 1; + pixel_x = 4 + }, +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/dwarf) +"qSW" = ( +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"qSX" = ( +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/basement) +"qTv" = ( +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"qTI" = ( +/obj/structure/fluff/dryingrack, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"qTS" = ( +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/bath/redhouse) +"qUm" = ( +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"qVh" = ( +/obj/effect/spawner/roguemap/sewerencounter, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave) +"qVi" = ( +/obj/structure/table/wood/reinforced_alter, +/obj/structure/bars/alt, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"qVm" = ( +/obj/structure/stairs/stone{ + dir = 4; + icon_state = "stonestairs" + }, +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"qVp" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/mountains) +"qVA" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/railing/fence{ + dir = 8; + icon_state = "fence" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"qVD" = ( +/obj/structure/mineral_door/wood/deadbolt{ + name = "privy" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"qVO" = ( +/obj/structure/table/wood/large/corner_alt{ + dir = 9 + }, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/garrison) +"qVT" = ( +/obj/structure/flora/roguetree, +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"qVX" = ( +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/exposed/church) +"qWc" = ( +/obj/structure/mineral_door/wood/red{ + lockid = "elder"; + name = "Mayors room" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors) +"qWm" = ( +/obj/machinery/light/rogue/smelter, +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/obj/structure/bars/pipe{ + dir = 10; + icon_state = "pipe" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"qXp" = ( +/obj/effect/sunlight, +/turf/open/water/river{ + dir = 4 + }, +/area/rogue/outdoors/river) +"qXr" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 4 + }, +/area/rogue) +"qXw" = ( +/obj/item/reagent_containers/glass/bucket/wooden/alter{ + pixel_y = 10 + }, +/obj/structure/table/wood/plain_alt, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"qXG" = ( +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/tile/bath, +/area/rogue/indoors/town/bath/redhouse) +"qXW" = ( +/obj/structure/flora/roguegrass/bush_meagre, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"qZn" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 9 + }, +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"qZr" = ( +/obj/structure/roguewindow/solid, +/obj/structure/bars/passage/shutter{ + redstone_id = "merchant" + }, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/shop) +"qZt" = ( +/obj/structure/roguemachine/balloon_pad, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/warehouse) +"qZO" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"qZV" = ( +/turf/open/transparent/openspace, +/area/rogue/indoors/town) +"rab" = ( +/obj/structure/flora/roguegrass/stalky, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/boggish) +"raA" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/clothing/cloak/raincloak/blue, +/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, +/obj/item/reagent_containers/glass/bottle/rogue/water, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/town/garrison) +"raH" = ( +/obj/effect/decal/remains/mole, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"raQ" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"rby" = ( +/obj/structure/mineral_door/wood/window{ + locked = 1; + lockid = "lord"; + name = "private chambers" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"rcE" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/rtfield/hamlet) +"rcU" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"rcZ" = ( +/obj/structure/mineral_door/wood/violet{ + lockid = "nightmaiden"; + name = "counter" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/bath/redhouse) +"rec" = ( +/obj/structure/fluff/walldeco/innsign/trophy, +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern/saiga) +"rej" = ( +/obj/effect/decal/turfedge_neu{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"rel" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguetree/burnt, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"rer" = ( +/obj/machinery/light/rogue/torchholder/c, +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"rgi" = ( +/obj/effect/decal/remains/human/old, +/turf/open/water/swamp, +/area/rogue/under/catacombs) +"rgm" = ( +/obj/effect/decal/remains/human/old, +/obj/item/roguecoin/copper, +/obj/item/roguecoin/copper, +/turf/open/water/swamp, +/area/rogue/under/catacombs) +"rgv" = ( +/obj/structure/rack/rogue, +/obj/item/reagent_containers/glass/bottle/rogue/healthpot{ + pixel_x = 5 + }, +/obj/item/reagent_containers/glass/cup/steel{ + pixel_x = -3 + }, +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"rgK" = ( +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/mountains) +"rhi" = ( +/obj/structure/ladder, +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town) +"rhk" = ( +/obj/structure/mineral_door/wood{ + icon_state = "wcv"; + lockid = "shop" + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"rhv" = ( +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/obj/structure/bars/pipe{ + dir = 6; + icon_state = "pipe" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"rhz" = ( +/obj/item/storage/roguebag, +/obj/item/storage/roguebag, +/obj/item/storage/roguebag, +/obj/structure/rack/rogue, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"rij" = ( +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/obj/structure/gate/bars{ + gid = "townin" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"rik" = ( +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/exposed/dwarf) +"riq" = ( +/turf/open/water/swamp, +/area/rogue/under/catacombs) +"riw" = ( +/obj/structure/bookcase, +/obj/item/book/rogue/yeoldecookingmanual, +/obj/effect/decal/cleanable/dirt/cobweb, +/obj/item/book/rogue/fishing, +/obj/item/book/rogue/sword, +/obj/item/book/rogue/advice_soup, +/obj/item/book/rogue/advice_farming, +/obj/item/book/rogue/manners, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/outdoors/exposed/under/basement) +"rix" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 9 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"riA" = ( +/obj/effect/landmark/start/servant, +/turf/open/floor/rogue/tile/checker, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"riE" = ( +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town) +"riP" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"rje" = ( +/obj/structure/closet/crate/roguecloset, +/obj/item/reagent_containers/glass/cup/wooden, +/obj/item/reagent_containers/glass/cup/wooden, +/obj/item/reagent_containers/glass/cup, +/obj/item/reagent_containers/glass/cup/silver, +/obj/item/reagent_containers/glass/cup/silver, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"rjl" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/exposed/manorgarri) +"rkd" = ( +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/indoors/shelter/mountains) +"rky" = ( +/obj/item/natural/poo{ + desc = "This smells bad. Has a strangely magical aura." + }, +/obj/effect/sunlight, +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"rkT" = ( +/obj/structure/roguewindow/solid, +/turf/open/floor/rogue/grass, +/area/rogue/indoors) +"rlg" = ( +/obj/structure/flora/roguegrass, +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"rlr" = ( +/turf/open/floor/rogue/tile, +/area/rogue/outdoors/exposed/manorgarri) +"rlJ" = ( +/obj/structure/bed/rogue/shit, +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town/cell) +"rmr" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"rmB" = ( +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors) +"rmL" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"rmP" = ( +/obj/structure/closet/crate/chest/neu_iron{ + name = "contraband" + }, +/obj/item/storage/fancy/cigarettes/zig, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/entrance{ + first_time_text = "Rockhamlet" + }) +"rmW" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"rmY" = ( +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"rnf" = ( +/obj/structure/bed/rogue/hay, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church) +"rng" = ( +/obj/structure/chair/wood/rogue{ + dir = 8; + icon_state = "chair2" + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors) +"rnl" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"rnV" = ( +/obj/structure/bars/pipe, +/turf/closed/wall/mineral/rogue/wooddark/horizontal, +/area/rogue/indoors/town/shop) +"rod" = ( +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"rog" = ( +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/boggish) +"roK" = ( +/turf/closed/wall/mineral/rogue/wooddark/window, +/area/rogue) +"roQ" = ( +/obj/structure/bars/pipe{ + dir = 5; + pixel_y = -17 + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"roR" = ( +/obj/item/paper/reminder_about_dwarfs, +/obj/structure/table/wood/reinforced_alter, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"roZ" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/mace/steel/morningstar, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"rpx" = ( +/obj/structure/stairs{ + dir = 1 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town) +"rpA" = ( +/turf/closed/wall/mineral/rogue/wooddark/window, +/area/rogue/outdoors/exposed/magiciantower) +"rpQ" = ( +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/bath/redhouse) +"rqi" = ( +/obj/structure/bars/pipe{ + dir = 10; + icon_state = "pipe" + }, +/turf/closed/wall/mineral/rogue/wooddark/end{ + dir = 8; + icon_state = "endwooddark" + }, +/area/rogue/indoors/town/shop) +"rqR" = ( +/turf/open/floor/rogue/metal, +/area/rogue/outdoors/exposed/town/hamlet) +"rqU" = ( +/obj/structure/fluff/clock/dense, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"rqW" = ( +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern/saiga) +"rrl" = ( +/obj/structure/roguetent/preopen, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"rrI" = ( +/turf/closed/wall/mineral/rogue/wooddark/slitted, +/area/rogue/indoors/town/church/chapel) +"rrJ" = ( +/obj/structure/bookcase, +/obj/machinery/light/rogue/wallfire/candle/blue, +/obj/item/book/rogue/arcyne, +/obj/item/book/rogue/noc, +/obj/item/book/rogue/yeoldecookingmanual, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"rrZ" = ( +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/oak, +/area/rogue/outdoors/town/roofs) +"rsd" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/goatmale, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"rst" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop/green, +/area/rogue/outdoors) +"rsB" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors) +"rsE" = ( +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/exposed/dwarf) +"rsP" = ( +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/obj/structure/bars/pipe{ + dir = 10; + icon_state = "pipe" + }, +/turf/open/floor/rogue/rooftop/green, +/area/rogue/outdoors/town/roofs) +"rsQ" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/tile/bath, +/area/rogue/indoors/town/bath/redhouse) +"rta" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"rtp" = ( +/obj/item/candle/yellow/lit/infinite/strong{ + pixel_y = 39 + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/tavern/saiga) +"rtE" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 + }, +/obj/structure/fluff/walldeco/wantedposter{ + pixel_x = 32; + pixel_y = 0 + }, +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/exposed/town/hamlet) +"rtP" = ( +/obj/structure/lever/wall{ + desc = "Let the games begin."; + dir = 4; + redstone_id = "sewer4" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"ruw" = ( +/turf/open/floor/rogue/metal, +/area/rogue/outdoors/rtfield/hamlet) +"ruJ" = ( +/obj/structure/flora/roguegrass, +/obj/effect/sunlight, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"rvj" = ( +/obj/structure/flora/roguegrass, +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/outdoors/exposed/town/hamlet) +"rvM" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 8; + icon_state = "wooddir"; + locked = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"rwu" = ( +/turf/open/floor/rogue/wood/saiga, +/area/rogue/under/town/basement) +"rxp" = ( +/obj/structure/closet/crate/chest/neu, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"rxy" = ( +/obj/structure/fluff/railing/border{ + dir = 5; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"rxF" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 5 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"rxS" = ( +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/underworld/road, +/area/rogue/indoors/town/church/chapel) +"rxV" = ( +/obj/structure/bed/rogue/hay, +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/soilsons) +"rye" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/landmark/start/watchman{ + dir = 4; + name = "Garrison Archer" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/town/roofs) +"ryq" = ( +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"ryU" = ( +/obj/structure/flora/roguegrass, +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/river) +"rzl" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/outdoors/exposed/town/hamlet) +"rzm" = ( +/obj/effect/spawner/roguemap/treeorbush, +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"rzW" = ( +/obj/structure/flora/roguetree, +/obj/effect/decal/turfedge_neu/road{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"rAW" = ( +/turf/closed/wall/mineral/rogue/wooddark/vertical, +/area/rogue/indoors/town/garrison) +"rBq" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/goat/goatlet, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"rBL" = ( +/turf/open/floor/rogue/tile/masonic/inverted, +/area/rogue/indoors/town/magician) +"rBR" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/obj/effect/decal/cleanable/blood/gibs, +/obj/effect/decal/cleanable/blood/gibs/up, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/shelter/rtfield) +"rCi" = ( +/obj/machinery/light/rogue/torchholder/cold, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"rCn" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 8 + }, +/obj/structure/flora/roguegrass, +/obj/structure/fluff/walldeco/vinez{ + dir = 8 + }, +/obj/structure/fluff/railing/stonehedge, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"rCx" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 6 + }, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"rCF" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 9 + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"rCO" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"rDc" = ( +/obj/structure/bearpelt{ + pixel_x = -16 + }, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"rDy" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/railing/wood{ + dir = 8; + icon_state = "woodrailing"; + pixel_y = -1 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"rDz" = ( +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/outdoors/exposed/manorgarri) +"rDB" = ( +/obj/item/natural/stone, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); + first_time_text = "CATACOMBS" + }) +"rEa" = ( +/turf/closed/wall/mineral/rogue/wooddark/vertical, +/area/rogue/outdoors/town/roofs) +"rEb" = ( +/turf/closed/wall/mineral/rogue/decostone, +/area/rogue/indoors/town) +"rEh" = ( +/turf/closed/wall/mineral/rogue/wooddark/slitted, +/area/rogue/outdoors/exposed/church) +"rEp" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"rEI" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1; + icon_state = "stonehedge_aged" + }, +/obj/structure/flora/rock/pile, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"rEO" = ( +/obj/structure/mineral_door/wood{ + icon_state = "wcv"; + lockid = "merchant" + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"rEX" = ( +/turf/closed/mineral/rogue, +/area/rogue/outdoors/exposed/under/basement) +"rFa" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/head/roguetown/helmet/skullcap, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"rFA" = ( +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/structure/closet/crate/chest/neu, +/obj/item/reagent_containers/powder/salt, +/obj/item/reagent_containers/powder/salt, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/under/basement) +"rFS" = ( +/obj/structure/fluff/walldeco/vinez/l{ + dir = 10 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"rFY" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/exposed/manorgarri) +"rGj" = ( +/turf/open/transparent/openspace, +/area/rogue/outdoors/mountains) +"rGt" = ( +/obj/effect/decal/turfedge_neu/rockalt_edge, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"rGL" = ( +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"rGX" = ( +/obj/effect/decal/cleanable/dirt/cobweb{ + icon_state = "cobweb2" + }, +/obj/structure/table/wood{ + icon_state = "tablewood1" + }, +/obj/item/reagent_containers/food/snacks/rogue/crackerscooked{ + pixel_y = 3 + }, +/obj/machinery/light/rogue/torchholder{ + pixel_y = 32 + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/shop) +"rHl" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/mortar{ + pixel_y = 5 + }, +/obj/item/pestle, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"rHz" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 4 + }, +/area/rogue/indoors/town/tavern) +"rHH" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/structure/fluff/walldeco/innsign{ + alpha = 200; + layer = 4.1; + level = 2; + pixel_x = 16; + pixel_y = 32 + }, +/obj/item/clothing/head/roguetown/menacing, +/obj/item/clothing/glasses/blindfold/white{ + name = "blindfold" + }, +/obj/item/clothing/glasses/blindfold/white{ + name = "blindfold" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/cell) +"rIq" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 6 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"rJq" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/rtfield/spooky) +"rJv" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop{ + dir = 1 + }, +/area/rogue/outdoors/exposed/manorgarri) +"rJP" = ( +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/dwarf) +"rKy" = ( +/obj/item/roguemachine/merchant, +/obj/structure/roguemachine/balloon_pad, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/outdoors/town/roofs) +"rKK" = ( +/obj/structure/rogue/trophy/deer, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"rKY" = ( +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"rLn" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"rLE" = ( +/obj/structure/roguetent, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"rLU" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/goat, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"rMJ" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/flora/rock/pile, +/turf/open/water/river, +/area/rogue/outdoors/river) +"rMM" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"rMO" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 5 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern/saiga) +"rND" = ( +/obj/structure/fluff/dryingrack, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"rOe" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 5 + }, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/shelter/rtfield) +"rON" = ( +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"rOU" = ( +/obj/structure/flora/roguegrass/water, +/turf/open/water/swamp, +/area/rogue/outdoors/rtfield/boggish) +"rPv" = ( +/obj/structure/flora/roguegrass/water/reeds, +/turf/open/water/swamp, +/area/rogue/under/catacombs/dwarfoutpost) +"rPA" = ( +/obj/effect/spawner/roguemap/hostile_beggar_danger, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"rPQ" = ( +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"rQp" = ( +/obj/structure/floordoor{ + redstone_id = "volfpit" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"rQE" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"rQJ" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"rRw" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/river) +"rRM" = ( +/turf/closed/wall/mineral/rogue/wooddark/end{ + dir = 8; + icon_state = "endwooddark" + }, +/area/rogue/indoors/town) +"rRX" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"rSm" = ( +/turf/closed/wall/mineral/rogue/wooddark/slitted, +/area/rogue/indoors/town/tavern/saiga) +"rSL" = ( +/obj/structure/fluff/railing/wood, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"rTk" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue) +"rUt" = ( +/obj/structure/fluff/walldeco/maidensigil, +/obj/structure/roguemachine/camera/left, +/obj/item/roguestatue/iron, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/vault) +"rUu" = ( +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"rWn" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town) +"rWD" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/town/basement) +"rWF" = ( +/obj/structure/chair/wood/rogue/chair_noble, +/obj/structure/fluff/walldeco/rpainting/forest{ + pixel_y = 32 + }, +/turf/open/floor/rogue/tile/tilerg, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"rWR" = ( +/obj/structure/bars/cemetery, +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass/bush/wall, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"rWX" = ( +/obj/structure/roguetent, +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/turf/open/floor/rogue/woodturned/nosmooth, +/area/rogue/indoors/town/cell) +"rXj" = ( +/obj/structure/chair/wood/rogue{ + dir = 4 + }, +/turf/open/floor/rogue/carpet/lord/left, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"rXp" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle{ + dir = 4 + }, +/area/rogue/indoors/shelter/mountains/decap) +"rXu" = ( +/obj/structure/chair/bench/couch/redright, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"rXJ" = ( +/obj/structure/stairs/stone, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/magician) +"rXT" = ( +/obj/structure/chair/wood/rogue/fancy{ + dir = 4; + icon_state = "chair1" + }, +/turf/open/floor/rogue/tile/masonic/single, +/area/rogue/indoors/town/dwarfin) +"rXW" = ( +/turf/open/floor/rogue/wood/saiga, +/area/rogue/under/town/caverogue{ + first_time_text = "DEEP MINESHAFT" + }) +"rYx" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/mountains) +"rYy" = ( +/obj/structure/well{ + icon_state = "well" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/rtfield/hamlet) +"rYA" = ( +/obj/structure/table/wood/plain_alt, +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"rYK" = ( +/obj/structure/bed/rogue/shit, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/town/basement) +"rZj" = ( +/obj/structure/fluff/traveltile{ + aportalgoesto = "bogrtin"; + aportalid = "bogrtout" + }, +/turf/open/floor/rogue/ruinedwood, +/area/rogue/outdoors/rtfield/hamlet) +"saO" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"sbg" = ( +/obj/structure/ladder, +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/open/floor/rogue/metal, +/area/rogue/indoors/town) +"sbG" = ( +/obj/structure/table/wood/nice/decorated_alt, +/obj/item/book/rogue/knowledge1, +/turf/open/floor/rogue/tile/masonic/single, +/area/rogue/indoors/town/magician) +"sbV" = ( +/obj/structure/table/wood/nice/decorated_alt, +/obj/item/paper/scroll{ + name = "guest log" + }, +/obj/item/natural/feather, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"sbX" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/river) +"sca" = ( +/obj/effect/spawner/roguemap/sewerencounter, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/town/basement) +"scc" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle, +/area/rogue) +"scj" = ( +/obj/structure/stairs/stone, +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"sdn" = ( +/obj/structure/table/wood/reinforced_alter, +/obj/item/rogueweapon/hammer, +/obj/item/rogueweapon/tongs, +/obj/item/natural/cloth, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"sdp" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/outdoors/exposed/manorgarri) +"sdU" = ( +/turf/closed/mineral/rogue/bedrock, +/area/rogue/indoors/shelter/rtfield) +"seB" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"seF" = ( +/obj/item/restraints/legcuffs/beartrap, +/turf/open/floor/rogue/metal/barograte, +/area/rogue/indoors/town/cell) +"sfs" = ( +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/outdoors/exposed/manorgarri) +"sfH" = ( +/obj/structure/ladder/earth, +/turf/open/floor/rogue/rooftop/green{ + dir = 1 + }, +/area/rogue/outdoors/mountains) +"sfJ" = ( +/turf/open/water/swamp, +/area/rogue/outdoors/rtfield/boggish) +"sfQ" = ( +/obj/effect/decal/turfedge_neu/alt, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"sgM" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 4 + }, +/obj/effect/decal/turfedge_neu/rockalt_edge, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"shd" = ( +/obj/structure/bars/pipe{ + dir = 10; + icon_state = "pipe" + }, +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/indoors/town) +"sho" = ( +/obj/structure/fluff/statue/pillar, +/obj/effect/decal/turfedge_neu/alt{ + dir = 6 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"shu" = ( +/turf/open/transparent/openspace, +/area/rogue/indoors/town/tavern/saiga) +"shA" = ( +/obj/structure/flora/roguetree/burnt, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"siF" = ( +/obj/structure/fluff/statue/gargoyle, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"siG" = ( +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"sje" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/decal/turfedge_neu/road{ + dir = 6 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"sjm" = ( +/obj/structure/closet/crate/chest/wicker, +/obj/item/neuFarm/seed/onion, +/obj/item/neuFarm/seed/cabbage, +/obj/item/neuFarm/seed/potato, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/soilsons) +"sjG" = ( +/obj/structure/table/wood{ + icon_state = "tablewood1" + }, +/obj/item/clothing/mask/cigarette/rollie/nicotine{ + pixel_x = 8 + }, +/obj/item/candle/yellow/lit/infinite{ + pixel_x = -9 + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/shop) +"sjL" = ( +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"sjZ" = ( +/obj/structure/ladder/earth, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/caverogue/saltmine) +"skh" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/woodish) +"ski" = ( +/obj/effect/decal/cleanable/dirt/cobweb, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"skw" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"sll" = ( +/obj/structure/mineral_door/wood/fancywood{ + lockid = "manor"; + name = "throne room" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"slK" = ( +/turf/open/transparent/openspace, +/area/rogue/outdoors/exposed/town/hamlet) +"slZ" = ( +/obj/structure/table/wood{ + icon_state = "longtable" + }, +/obj/item/cooking/pan, +/obj/item/cooking/pan, +/turf/open/floor/rogue/tile/checker, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"smq" = ( +/obj/structure/table/wood/large/corner_new{ + dir = 5 + }, +/obj/effect/decal/turfedge_neu/alt{ + dir = 4 + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern/saiga) +"sny" = ( +/obj/machinery/light/rogue/torchholder{ + pixel_y = 32 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"snE" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"soM" = ( +/obj/structure/fluff/walldeco/vinez/l{ + dir = 10 + }, +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"spe" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/suit/roguetown/shirt/dress, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"sph" = ( +/turf/closed/wall/mineral/rogue/decostone, +/area/rogue/indoors/town/church/chapel) +"spQ" = ( +/obj/structure/bookcase, +/obj/item/book/rogue/arcyne, +/obj/item/book/rogue/magicaltheory, +/obj/item/book/rogue/mysticalfog, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/outdoors/exposed/under/basement) +"sqT" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/reagent_containers/glass/cup{ + pixel_x = -7 + }, +/obj/item/candle/yellow{ + pixel_x = 7 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"src" = ( +/obj/structure/stairs{ + dir = 4; + icon_state = "stairs" + }, +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/garrison) +"srf" = ( +/obj/structure/chair/wood/rogue/fancy{ + dir = 8; + icon_state = "chair1" + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/shop) +"srr" = ( +/obj/structure/stairs{ + dir = 8; + icon_state = "stairs" + }, +/obj/item/rogueweapon/pick, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"srt" = ( +/turf/open/floor/rogue/rooftop{ + dir = 1 + }, +/area/rogue/outdoors/exposed/manorgarri) +"sry" = ( +/obj/structure/rack/rogue, +/obj/item/storage/belt/rogue/leather, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"srS" = ( +/obj/item/natural/dirtclod, +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"srW" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/cloak/stole, +/obj/item/clothing/cloak/raincloak/makers_guild, +/obj/structure/fluff/walldeco/masonflag{ + pixel_x = -32 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"ssq" = ( +/obj/effect/decal/cleanable/blood/gibs/core, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/shelter/rtfield) +"ssC" = ( +/turf/open/floor/rogue/tile/masonic/inverted, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"sto" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 4 + }, +/area/rogue/indoors/town) +"stC" = ( +/obj/structure/closet/dirthole/closed/loot, +/obj/structure/gravemarker, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"stI" = ( +/obj/effect/decal/turfedge_neu{ + dir = 8 + }, +/obj/item/natural/stone, +/obj/item/reagent_containers/glass/bucket/wooden, +/obj/effect/decal/cleanable/food/tomato_smudge, +/obj/item/natural/poo, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town/cell) +"stR" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 1 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"sud" = ( +/obj/structure/table/wood/treestump/burnt, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"sue" = ( +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"suK" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/candle/yellow/lit{ + pixel_x = 4; + pixel_y = 1 + }, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church) +"suQ" = ( +/turf/closed/wall/mineral/rogue/wooddark/horizontal, +/area/rogue/indoors/town/entrance{ + first_time_text = "Rockhamlet" + }) +"suS" = ( +/obj/structure/closet/crate/chest/wicker{ + name = "fruit seeds" + }, +/obj/item/neuFarm/seed/berryrogue, +/obj/item/neuFarm/seed/berryrogue, +/obj/item/neuFarm/seed/berryrogue, +/obj/item/neuFarm/seed/berryrogue, +/obj/item/neuFarm/seed/berryrogue, +/obj/item/neuFarm/seed/apple, +/obj/item/neuFarm/seed/apple, +/obj/item/neuFarm/seed/apple, +/obj/item/neuFarm/seed/apple, +/obj/item/neuFarm/seed/apple, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/soilsons) +"suZ" = ( +/obj/effect/decal/remains/human/old, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"svq" = ( +/obj/structure/fluff/statue/gargoyle/moss, +/obj/structure/flora/roguegrass, +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors) +"svB" = ( +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/caverogue/saltmine) +"svE" = ( +/obj/effect/landmark/start/adventurer{ + dir = 1 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"swo" = ( +/obj/machinery/light/rogue/cauldron, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"swy" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/exposed/town/hamlet) +"swH" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"sxt" = ( +/obj/structure/closet/crate/coffin, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"sxM" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 1 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"sxW" = ( +/obj/structure/toilet{ + name = "the wizard's throne" + }, +/obj/machinery/light/rogue/wallfire/candle/blue, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/magician) +"syZ" = ( +/obj/item/reagent_containers/food/snacks/rogue/fryfish/eel, +/obj/item/reagent_containers/food/snacks/rogue/fryfish/eel, +/obj/item/reagent_containers/food/snacks/rogue/fryfish/eel, +/obj/structure/closet/crate/chest/crate, +/turf/open/floor/rogue/metal/barograte, +/area/rogue/outdoors/exposed/under/basement) +"szk" = ( +/obj/effect/spawner/roguemap/sewerencounter, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"szo" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 4 + }, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/magician) +"szq" = ( +/obj/effect/landmark/latejoin, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"szw" = ( +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/garrison) +"szB" = ( +/obj/structure/table/wood{ + dir = 1; + icon_state = "tablewood1" + }, +/obj/item/natural/cloth, +/obj/item/soap, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"szE" = ( +/obj/machinery/light/rogue/wallfire{ + pixel_y = 32 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/garrison) +"sAi" = ( +/obj/item/natural/stone, +/obj/item/natural/rock/salt, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/shelter/mountains) +"sAP" = ( +/obj/structure/fermenting_barrel/water, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"sAV" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 8 + }, +/obj/structure/flora/roguegrass, +/obj/structure/fluff/walldeco/vinez{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"sAY" = ( +/turf/closed/wall/mineral/rogue/wooddark/horizontal, +/area/rogue/indoors/town/tavern/saiga) +"sBY" = ( +/turf/closed/wall/mineral/rogue/roofwall/center, +/area/rogue) +"sCl" = ( +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/woodish) +"sCN" = ( +/obj/structure/closet/crate/roguecloset, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern/saiga) +"sDG" = ( +/obj/structure/chair/wood/rogue/fancy, +/obj/effect/landmark/start/merchant, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/shop) +"sEn" = ( +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/exposed/manorgarri) +"sEq" = ( +/obj/structure/table/wood/reinforced_alt, +/obj/structure/bars/alt, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/tailor) +"sEI" = ( +/turf/closed/mineral/rogue, +/area/rogue/outdoors/mountains) +"sFf" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"sFy" = ( +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"sFB" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/river) +"sFL" = ( +/turf/open/floor/rogue/tile/bath, +/area/rogue/indoors/town/bath/redhouse) +"sGh" = ( +/obj/effect/decal/turfedge_neu/alt, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"sGp" = ( +/obj/structure/flora/roguegrass, +/obj/effect/landmark/start/adventurer{ + dir = 1 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"sGM" = ( +/obj/structure/fluff/statue/knight/r, +/obj/structure/stone_tile/slab/cracked, +/obj/structure/fluff/walldeco/psybanner{ + pixel_y = 32 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"sGU" = ( +/obj/structure/mineral_door/wood/deadbolt{ + name = "privy" + }, +/turf/open/floor/rogue/blocks/paving, +/area/rogue/indoors/town/bath/redhouse) +"sIe" = ( +/turf/open/floor/rogue/rooftop/green{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"sIp" = ( +/obj/structure/table/wood/large/corner_alt{ + dir = 5 + }, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/garrison) +"sJc" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/obj/structure/flora/roguegrass, +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/exposed/manorgarri) +"sJk" = ( +/obj/structure/rack/rogue, +/obj/effect/decal/turfedge_neu/alt{ + dir = 5 + }, +/obj/item/rogueweapon/knife/cleaver{ + pixel_x = 8 + }, +/obj/item/rogueweapon/mace/woodclub/rollingpin{ + pixel_x = -5 + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern/saiga) +"sJP" = ( +/obj/item/reagent_containers/food/snacks/smallrat, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town) +"sKa" = ( +/obj/structure/fluff/wallclock, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern/saiga) +"sLN" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/mountains) +"sLW" = ( +/obj/structure/flora/roguetree, +/turf/open/water/swamp, +/area/rogue/outdoors/rtfield/boggish) +"sLX" = ( +/obj/machinery/light/rogue/wallfire{ + pixel_y = 32 + }, +/obj/effect/decal/turfedge_neu, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"sMh" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/under/basement) +"sMv" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 8; + icon_state = "stonehedge2" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"sMK" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 1 + }, +/area/rogue/indoors/town/church/chapel) +"sMX" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"sMY" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"sNq" = ( +/obj/structure/table/wood/large/corner_new{ + dir = 5 + }, +/obj/item/kitchen/spoon, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/soilsons) +"sNy" = ( +/turf/closed/mineral/random/rogue, +/area/rogue/under/cave) +"sNz" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/suit/roguetown/armor/chainmail/iron, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"sOn" = ( +/obj/structure/mineral_door/wood/violet{ + locked = 1; + lockid = "nightmaiden"; + name = "back rooms" + }, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/bath/redhouse) +"sOs" = ( +/obj/structure/ladder, +/obj/effect/decal/cleanable/dirt/cobweb, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/magician) +"sOE" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"sOX" = ( +/obj/structure/bars/pipe{ + dir = 10; + icon_state = "pipe" + }, +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/indoors/town) +"sOZ" = ( +/obj/structure/table/vtable/v2, +/obj/structure/rogue/trophy/deer, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"sPk" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop/green{ + dir = 1 + }, +/area/rogue/outdoors/town/roofs) +"sPp" = ( +/obj/structure/table/wood{ + icon_state = "tablewood1" + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/outdoors/exposed/town/hamlet) +"sPP" = ( +/turf/open/floor/rogue/grass, +/area/rogue/indoors/shelter/rtfield) +"sPR" = ( +/obj/machinery/light/rogue/firebowl/stump, +/obj/effect/decal/turfedge_neu/road{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"sQb" = ( +/obj/structure/stairs{ + dir = 8; + icon_state = "stairs" + }, +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/town/roofs) +"sQV" = ( +/obj/structure/mineral_door/bars, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"sQX" = ( +/obj/structure/closet/dirthole/closed, +/obj/effect/decal/remains/xeno/larva{ + desc = "Truely, nothing is sacred."; + name = "child's remains" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"sRf" = ( +/turf/open/floor/rogue/underworld/road, +/area/rogue/indoors/town/church/chapel) +"sRI" = ( +/obj/item/natural/rock, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave) +"sRK" = ( +/obj/structure/fluff/signage{ + desc = "There are fingerprints pressed into the molded wood, either end of the sign..."; + name = "ROCKHAMLET" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"sRR" = ( +/obj/effect/spawner/roguemap/treeorstump, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"sSj" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 4 + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tailor) +"sSX" = ( +/obj/structure/mineral_door/wood{ + icon_state = "wcr"; + locked = 1; + lockid = "garrison"; + name = "Barracks" + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"sTj" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 6 + }, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors) +"sTm" = ( +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"sTM" = ( +/obj/structure/flora/roguetree, +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"sTP" = ( +/obj/structure/bars/pipe, +/obj/structure/fluff/walldeco/vinez/l{ + dir = 4 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"sVh" = ( +/obj/effect/decal/remains/human/old, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"sVm" = ( +/obj/structure/flora/roguegrass, +/mob/living/simple_animal/hostile/retaliate/rogue/goatmale{ + aggressive = 1; + name = "mountain goat" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/mountains) +"sVq" = ( +/obj/item/reagent_containers/glass/bucket/pot{ + pixel_y = 5 + }, +/obj/structure/table/wood/plain_alt, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/church) +"sVC" = ( +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/obj/structure/closet/crate/chest/old_crate, +/obj/item/flashlight/flare/torch, +/obj/item/flashlight/flare/torch, +/obj/item/flashlight/flare/torch, +/obj/item/flashlight/flare/torch, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"sVQ" = ( +/obj/structure/fluff/railing/border{ + dir = 5; + icon_state = "border" + }, +/obj/effect/decal/cleanable/oil{ + name = "tar" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"sVV" = ( +/obj/structure/flora/roguegrass, +/obj/structure/closet/dirthole/closed/loot, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"sWQ" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"sXf" = ( +/obj/structure/flora/roguetree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/boggish) +"sXm" = ( +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/boggish) +"sXY" = ( +/obj/structure/fluff/statue/small, +/turf/open/floor/carpet/red, +/area/rogue/outdoors/exposed/under/basement) +"sYq" = ( +/obj/effect/landmark/start/weaponsmith{ + dir = 4 + }, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town) +"sYX" = ( +/obj/structure/kneestingers, +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"sZA" = ( +/obj/structure/table/wood{ + icon_state = "map2" + }, +/obj/item/candle/yellow/lit/infinite/strong{ + pixel_x = 15; + pixel_y = 18 + }, +/turf/open/floor/rogue/carpet/lord/center, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"sZD" = ( +/obj/structure/flora/roguegrass/bush/wall/tall, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"sZS" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/obj/item/grown/log/tree/small, +/obj/item/grown/log/tree/small, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"taB" = ( +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"tbe" = ( +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/outdoors/exposed/under/basement) +"tbh" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/tavern/saiga) +"tbq" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/obj/effect/spawner/roguemap/hauntz_random, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"tbx" = ( +/obj/structure/flora/roguetree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"tbB" = ( +/obj/item/storage/backpack/rogue/satchel{ + pixel_y = 43 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"tbC" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/cloak/raincloak/makers_guild, +/obj/item/clothing/cloak/raincloak/makers_guild, +/obj/item/clothing/cloak/raincloak/makers_guild, +/obj/item/clothing/cloak/raincloak/makers_guild, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/dwarfin) +"tbJ" = ( +/obj/structure/flora/roguegrass, +/obj/effect/sunlight, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"tcu" = ( +/turf/open/floor/rogue/rooftop{ + dir = 1 + }, +/area/rogue/outdoors) +"tcJ" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/tile/masonic/inverted, +/area/rogue/indoors/town/magician) +"tcZ" = ( +/obj/structure/fluff/walldeco/bath/two{ + pixel_x = -29 + }, +/turf/open/floor/rogue/tile/bath, +/area/rogue/indoors/town/bath/redhouse) +"tdl" = ( +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/shelter/rtfield) +"tdB" = ( +/obj/structure/closet/crate/drawer/inn{ + lockid = "tavern"; + name = "innkeepers drawer"; + pixel_y = 4 + }, +/obj/item/roguekey/tavern, +/obj/item/reagent_containers/glass/bottle/rogue/wine, +/obj/item/clothing/suit/roguetown/armor/leather/vest/innkeep, +/turf/open/floor/rogue/carpet/green, +/area/rogue/indoors/town/tavern/saiga) +"tec" = ( +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/under/town/basement) +"teg" = ( +/obj/effect/decal/turfedge_neu/mossy, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/under/basement) +"tem" = ( +/obj/item/cooking/platter, +/obj/structure/table/wood/plain/alt, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"teu" = ( +/obj/structure/fluff/statue/knightalt, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/dwarfin) +"tez" = ( +/obj/item/candle/yellow/lit/infinite{ + pixel_x = -8; + pixel_y = 5 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/bath/redhouse) +"teO" = ( +/turf/open/floor/rogue/tile{ + icon_state = "chess" + }, +/area/rogue/indoors/town) +"teQ" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"teW" = ( +/obj/structure/closet/crate/roguecloset, +/obj/item/candle/yellow, +/obj/item/candle/yellow, +/obj/item/clothing/gloves/roguetown/leather, +/obj/item/reagent_containers/food/snacks/rogue/truffles, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"tfA" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/rogue/instrument/flute, +/obj/item/rogueweapon/mace/woodclub/train_sword, +/obj/item/rogueweapon/sickle, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"tfJ" = ( +/obj/item/reagent_containers/food/snacks/smallrat, +/obj/structure/kneestingers, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"tfY" = ( +/obj/structure/mineral_door/wood/donjon/stone{ + locked = 1; + lockid = "makers"; + name = "door" + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) +"tgz" = ( +/obj/item/chair/stool/bar/rogue, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/town/basement) +"tgC" = ( +/obj/structure/fluff/statue/gargoyle/moss, +/turf/open/floor/bronze, +/area/rogue/outdoors) +"tgY" = ( +/obj/structure/closet/crate/roguecloset/lord{ + locked = 0; + lockid = null + }, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/obj/item/paper, +/obj/item/natural/feather, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/dwarfin) +"tie" = ( +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/sandstone/shaded, +/area/rogue/indoors/town/church/chapel) +"tiv" = ( +/turf/closed/mineral/random/rogue/high, +/area/rogue/under/cave) +"tiW" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/reagent_containers/glass/cup/wooden, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/church) +"tiY" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle{ + dir = 8 + }, +/area/rogue/indoors/town/church/chapel) +"tjp" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/knife/villager, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"tjQ" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass/bush_meagre, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"tki" = ( +/obj/effect/decal/cleanable/dirt/cobweb, +/obj/structure/bed/rogue/shit, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "vertw" + }, +/area/rogue/indoors/town/church/chapel) +"tkW" = ( +/obj/structure/fluff/walldeco/bath{ + pixel_x = 0; + pixel_y = 32 + }, +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/blocks/stonered, +/area/rogue/indoors/town/bath/redhouse) +"tkY" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/exposed/manorgarri) +"tlC" = ( +/obj/structure/table/wood/treestump/burnt, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"tma" = ( +/obj/effect/decal/turfedge_neu/mossy_small, +/obj/effect/decal/turfedge_neu/mossy{ + dir = 9 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/tavern/saiga) +"tmk" = ( +/obj/structure/closet/crate/drawer, +/obj/machinery/light/rogue/wallfire/candle/r, +/obj/item/clothing/head/roguetown/chaperon, +/obj/item/storage/box/matches, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"tmw" = ( +/turf/open/floor/rogue/rooftop/green, +/area/rogue/outdoors) +"tnn" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "manor" + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"tnO" = ( +/obj/structure/mineral_door/wood/donjon/stone{ + locked = 1 + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/basement) +"tos" = ( +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/tavern/saiga) +"toY" = ( +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/church) +"tph" = ( +/obj/structure/bars/pipe, +/obj/structure/table/vtable, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town) +"tpk" = ( +/obj/effect/landmark/start/magician{ + dir = 8 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"tpB" = ( +/turf/open/floor/rogue/rooftop{ + dir = 1 + }, +/area/rogue/outdoors/rtfield/hamlet) +"tpC" = ( +/obj/structure/pillory/reinforced, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/exposed/town/hamlet) +"tpQ" = ( +/obj/structure/mineral_door/wood/violet{ + locked = 1; + lockid = "nightmaiden"; + name = "storage" + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"tqD" = ( +/obj/structure/flora/rock/pile, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"tra" = ( +/obj/structure/flora/roguegrass, +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"trc" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/walldeco/vinez/l, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"trq" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town) +"try" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/exposed/town/hamlet) +"trF" = ( +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/exposed/manorgarri) +"tsd" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/outdoors/exposed/manorgarri) +"tsI" = ( +/obj/structure/fluff/walldeco/bath/three, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/blocks/stonered, +/area/rogue/indoors/town/bath/redhouse) +"tsO" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors) +"tsY" = ( +/obj/structure/bars/pipe{ + dir = 6; + icon_state = "pipe" + }, +/obj/structure/fluff/walldeco/vinez/l, +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"ttP" = ( +/obj/structure/bed/rogue/shit, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town) +"tuD" = ( +/turf/open/floor/rogue/ruinedwood{ + icon_state = "vertw" + }, +/area/rogue/indoors/town/church/chapel) +"tuO" = ( +/turf/open/floor/rogue/naturalstone, +/area/rogue/indoors/shelter/mountains) +"tuU" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/cell) +"tvc" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/mountains) +"tvX" = ( +/obj/structure/gate/bars{ + gid = "keepin" + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"tvZ" = ( +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/outdoors/exposed/under/basement) +"twf" = ( +/obj/machinery/light/rogue/firebowl, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"twz" = ( +/turf/closed/wall/mineral/rogue/wooddark/end{ + dir = 4; + icon_state = "endwooddark" + }, +/area/rogue/indoors/town/shop) +"twS" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/mountains) +"twV" = ( +/obj/machinery/bookbinder, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/outdoors/exposed/under/basement) +"txc" = ( +/obj/structure/stairs/stone{ + dir = 4; + icon_state = "stonestairs" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/exposed/manorgarri) +"txm" = ( +/obj/effect/decal/turfedge_neu/alt_small{ + dir = 1 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"txE" = ( +/obj/structure/table/wood/large/corner_alt{ + dir = 10 + }, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/garrison) +"txR" = ( +/obj/structure/fluff/railing/border{ + dir = 5; + icon_state = "border" + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/manorgarri) +"tyj" = ( +/obj/structure/spirit_board, +/obj/item/natural/feather{ + pixel_y = 9 + }, +/turf/open/floor/rogue/tile/masonic/inverted, +/area/rogue/indoors/town/magician) +"tyz" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/magician) +"tyB" = ( +/turf/closed/wall/mineral/rogue/decostone/cand/reddish, +/area/rogue/indoors/town/bath/redhouse) +"tzp" = ( +/obj/structure/mineral_door/wood/donjon/stone{ + lockid = "puritan"; + name = "inquistion chamber" + }, +/turf/open/floor/rogue/church, +/area/rogue/under/town/basement) +"tzw" = ( +/obj/structure/table/wood/treestump{ + pixel_x = -7 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"tzO" = ( +/obj/structure/flora/roguegrass, +/obj/structure/roguerock, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"tAs" = ( +/obj/structure/mineral_door/wood/donjon{ + dir = 8; + icon_state = "donjondir"; + locked = 1; + lockid = "blacksmith" + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"tAx" = ( +/obj/structure/closet/crate/roguecloset/inn, +/obj/item/kitchen/spoon, +/obj/item/rope, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"tAK" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle, +/area/rogue/indoors/town/magician) +"tAV" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fluff/railing/wood, +/turf/open/transparent/openspace, +/area/rogue/under/town/caverogue{ + first_time_text = "DEEP MINESHAFT" + }) +"tAW" = ( +/obj/structure/bars/pipe{ + dir = 6; + icon_state = "pipe" + }, +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/indoors/town) +"tBb" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 5 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/woodish) +"tBe" = ( +/obj/structure/fluff/railing/stonehedge, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"tBT" = ( +/obj/structure/closet/crate/roguecloset, +/obj/item/clothing/cloak/apron/cook, +/obj/item/clothing/suit/roguetown/shirt/robe/feld, +/obj/item/clothing/neck/roguetown/feld, +/obj/item/clothing/mask/rogue/feld, +/obj/item/clothing/head/roguetown/roguehood/feld, +/obj/item/clothing/gloves/roguetown/leather/feld, +/obj/item/roguekey/doctor{ + pixel_y = 9 + }, +/obj/item/needle, +/obj/item/needle, +/turf/open/floor/carpet/royalblack, +/area/rogue/under/town/basement) +"tCf" = ( +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/roguekey/warehouse, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/shop) +"tCi" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/psycross, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"tCz" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 4 + }, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"tCN" = ( +/obj/structure/table/wood/nice/decorated_alt, +/obj/item/candle/yellow/lit/infinite{ + pixel_x = 8; + pixel_y = 7 + }, +/turf/open/floor/rogue/tile/bath, +/area/rogue/indoors/town/bath/redhouse) +"tDW" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/woodish) +"tEb" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"tEi" = ( +/turf/open/transparent/openspace, +/area/rogue/indoors/town/shop) +"tFc" = ( +/obj/structure/flora/roguegrass/bush_meagre, +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/mossy_small, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/manorgarri) +"tFt" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"tFF" = ( +/obj/structure/fluff/traveltile/bandit{ + aportalgoesto = "banditin"; + aportalid = "escaperoute" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"tFN" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town) +"tGf" = ( +/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, +/turf/open/transparent/openspace, +/area/rogue/indoors/soilsons) +"tGg" = ( +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"tGk" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"tGA" = ( +/obj/structure/mineral_door/swing_door, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"tGP" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/structure/idle_enemy/volf, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"tHr" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/outdoors/exposed/under/basement) +"tIk" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 5 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"tIF" = ( +/obj/structure/chair/wood/rogue/chair_noble{ + dir = 1 + }, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/bath/redhouse) +"tIT" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"tIZ" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"tJr" = ( +/obj/structure/fluff/psycross/crafted, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"tJu" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) +"tJE" = ( +/turf/open/floor/rogue/naturalstone, +/area/rogue/indoors/shelter/town/sargoth) +"tJG" = ( +/obj/structure/mineral_door/wood{ + icon_state = "wcv"; + locked = 1; + lockid = "manor"; + name = "archivist's chambers" + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/outdoors/exposed/under/basement) +"tKf" = ( +/obj/structure/mineral_door/wood{ + icon_state = "wcv"; + locked = 1; + lockid = "manor"; + name = "library" + }, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/outdoors/exposed/under/basement) +"tKM" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/obj/effect/decal/turfedge_neu{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"tKP" = ( +/obj/structure/table/wood{ + dir = 1; + icon_state = "longtable" + }, +/obj/effect/decal/turfedge_neu/alt, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/tavern/saiga) +"tKU" = ( +/obj/structure/well{ + icon_state = "well" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/exposed/manorgarri) +"tLe" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/alt{ + dir = 9 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"tLl" = ( +/obj/machinery/light/rogue/firebowl, +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/cell) +"tLA" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/church) +"tLH" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/sword/iron, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"tLJ" = ( +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/obj/structure/fluff/walldeco/bath/wallrope{ + pixel_y = -32 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"tLK" = ( +/obj/machinery/light/rogue/wallfire/candle/weak/r, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"tMa" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 4 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"tMe" = ( +/obj/item/natural/rock, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"tMf" = ( +/obj/effect/decal/remains/saiga, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"tMr" = ( +/obj/item/natural/dirtclod, +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"tNP" = ( +/obj/structure/fluff/clodpile, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"tOb" = ( +/obj/structure/fluff/statue/gargoyle/candles, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/town/hamlet) +"tOe" = ( +/obj/item/rope, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"tOw" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/neck/roguetown/gorget, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"tOU" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"tPn" = ( +/obj/item/roguebin/water/gross, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/outdoors/exposed/manorgarri) +"tPt" = ( +/obj/structure/roguewindow/openclose{ + dir = 4 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"tPA" = ( +/obj/item/reagent_containers/glass/bucket/wooden, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/cell) +"tPG" = ( +/obj/structure/stairs/stone{ + dir = 8; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"tPK" = ( +/turf/open/transparent/glass, +/area/rogue/outdoors/town/roofs) +"tPO" = ( +/obj/structure/flora/roguegrass/water/reeds, +/turf/open/water/swamp/deep, +/area/rogue/outdoors/rtfield/boggish) +"tQC" = ( +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"tQJ" = ( +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/rtfield/hamlet) +"tRx" = ( +/turf/closed/wall/mineral/rogue/wooddark/window, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"tRE" = ( +/obj/item/reagent_containers/glass/cup/skull, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/catacombs) +"tRS" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"tSa" = ( +/obj/effect/spawner/roguemap/mine_mole_maybe, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"tSb" = ( +/obj/item/rope/chain, +/obj/item/rope/chain, +/obj/machinery/light/rogue/torchholder{ + pixel_y = 26 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"tSd" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/shelter/mountains) +"tSq" = ( +/obj/structure/fluff/walldeco/vinez{ + dir = 4 + }, +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/outdoors/rtfield/hamlet) +"tSA" = ( +/obj/structure/stairs/stone, +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town) +"tSI" = ( +/obj/structure/fluff/statue/gargoyle, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"tTf" = ( +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors) +"tTP" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"tUl" = ( +/obj/structure/closet/crate/roguecloset/dark{ + name = "tobacco storage" + }, +/obj/item/clothing/mask/cigarette/rollie/nicotine, +/obj/item/clothing/mask/cigarette/rollie/nicotine, +/obj/item/clothing/mask/cigarette/rollie/nicotine, +/obj/item/clothing/mask/cigarette/rollie/nicotine, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/reagent_containers/food/snacks/produce/dry_westleach, +/obj/item/clothing/mask/cigarette/pipe, +/obj/item/storage/fancy/cigarettes/zig, +/obj/item/storage/fancy/cigarettes/zig, +/obj/item/storage/fancy/cigarettes/zig, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"tUq" = ( +/obj/machinery/light/rogue/torchholder{ + pixel_y = 32 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"tUC" = ( +/obj/structure/fluff/railing/wood{ + dir = 8; + icon_state = "woodrailing"; + pixel_y = -1 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"tUQ" = ( +/turf/open/floor/rogue/carpet/lord/left, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"tUZ" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"tVv" = ( +/obj/structure/flora/roguegrass, +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/indoors) +"tVK" = ( +/obj/structure/table/wood/large/corner_alt{ + dir = 6 + }, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/garrison) +"tVP" = ( +/turf/closed/wall/mineral/rogue/pipe{ + dir = 4; + icon_state = "iron_corner" + }, +/area/rogue/indoors/town) +"tWf" = ( +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood/old, +/obj/item/natural/stone, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"tWr" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/landmark/start/stevedore, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/shop) +"tWT" = ( +/obj/item/roguebin/water/gross, +/obj/item/candle/yellow/lit/infinite/strong{ + pixel_x = 0; + pixel_y = 36 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/dwarfin) +"tXg" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/paper/scroll{ + pixel_x = -6; + pixel_y = 3 + }, +/obj/item/natural/feather{ + pixel_x = 5 + }, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church) +"tXt" = ( +/turf/closed/wall/mineral/rogue/wooddark/window, +/area/rogue/indoors/town/entrance{ + first_time_text = "Rockhamlet" + }) +"tXv" = ( +/obj/machinery/light/rogue/hearth, +/obj/effect/decal/turfedge_neu/alt, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church) +"tXA" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"tYk" = ( +/obj/structure/stairs, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"tYR" = ( +/obj/structure/fluff/walldeco/wallshield{ + pixel_y = 32 + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/dwarf) +"tYZ" = ( +/obj/structure/table/wood{ + dir = 1; + icon_state = "longtable_mid" + }, +/obj/item/paper/scroll{ + pixel_x = -6; + pixel_y = 3 + }, +/obj/machinery/light/rogue/wallfire/candle/blue{ + pixel_y = -32 + }, +/turf/open/floor/rogue/tile{ + icon_state = "chess" + }, +/area/rogue/indoors/town/shop) +"tZr" = ( +/obj/effect/spawner/roguemap/crypt_randomdanger, +/turf/open/floor/rogue/dirt, +/area/rogue/under/catacombs) +"tZL" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"tZR" = ( +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/town/hamlet) +"tZZ" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/landmark/start/mercenary{ + dir = 1 + }, +/obj/machinery/light/rogue/wallfire/candle{ + pixel_y = -32 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/tavern/saiga) +"uan" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/garrison) +"uaI" = ( +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/dwarf) +"ube" = ( +/obj/item/chair/stool/bar/rogue, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"ubI" = ( +/obj/structure/chair/wood/rogue/chair_noble/red{ + dir = 8 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"ubK" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"ubM" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue) +"ubZ" = ( +/obj/structure/bed/rogue/shit, +/obj/effect/decal/cleanable/dirt/cobweb, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"uck" = ( +/obj/structure/rack/rogue, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors) +"ucC" = ( +/obj/structure/stairs/fancy/l{ + dir = 1 + }, +/turf/open/floor/rogue/carpet/lord/left, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"ucI" = ( +/obj/effect/spawner/roguemap/treeorbush, +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"ucN" = ( +/obj/effect/spawner/roguemap/treeorbush, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"uda" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/tile{ + icon_state = "chess" + }, +/area/rogue/indoors/town) +"udt" = ( +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 8 + }, +/obj/effect/decal/turfedge_neu/mossy_small, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/manorgarri) +"udN" = ( +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue) +"udT" = ( +/obj/structure/stairs/stone, +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"udU" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 8; + icon_state = "stonehedge_aged" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"ueG" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/under/town/basement) +"ueO" = ( +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/outdoors/exposed/dwarf) +"ufp" = ( +/obj/structure/chair/stool/rogue, +/obj/structure/fluff/walldeco/med6{ + pixel_y = 31 + }, +/turf/open/floor/rogue/twig, +/area/rogue/under/town/basement) +"ufL" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/reagent_containers/food/snacks/rogue/frybread, +/obj/item/reagent_containers/food/snacks/rogue/frybread, +/obj/item/reagent_containers/food/snacks/rogue/raisinbread, +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/bath/redhouse) +"ufN" = ( +/obj/effect/spawner/roguemap/volf_maybe, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"ugo" = ( +/obj/structure/flora/rock/pile, +/obj/effect/decal/remains/human, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"ugq" = ( +/obj/structure/stairs{ + dir = 1; + icon_state = "stairs" + }, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/town/shop) +"uhf" = ( +/obj/structure/table/wood/reinf_long{ + dir = 1 + }, +/obj/item/rope, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/shop) +"uhj" = ( +/obj/effect/decal/turfedge_neu/alt, +/obj/effect/decal/turfedge_neu/alt{ + dir = 8 + }, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church) +"uhk" = ( +/obj/structure/mineral_door/wood/donjon{ + dir = 8; + locked = 1; + lockid = "tavern" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/tavern/saiga) +"uhn" = ( +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"uhR" = ( +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/shop) +"uhZ" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 2 + }, +/area/rogue/indoors/town/church/chapel) +"uic" = ( +/obj/structure/flora/roguetree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/river) +"uii" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town) +"uim" = ( +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/basement) +"uiE" = ( +/obj/structure/closet/crate/roguecloset, +/obj/item/roguekey/tailor, +/obj/item/candle/yellow, +/obj/item/candle/yellow, +/obj/item/clothing/head/roguetown/fashionablehat, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/tailor) +"uiG" = ( +/obj/effect/decal/cleanable/dirt/cobweb, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"uiR" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/fluff/railing/border, +/obj/structure/fluff/railing/border{ + dir = 9; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"uiX" = ( +/obj/machinery/light/rogue/firebowl/stump{ + pixel_y = 8 + }, +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"ujL" = ( +/obj/structure/stairs, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors) +"ukr" = ( +/obj/item/clothing/head/roguetown/helmet/leather, +/obj/effect/spawner/roguemap/volf_maybe, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"ukD" = ( +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/manorgarri) +"ukE" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 6 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"ukH" = ( +/obj/structure/closet/crate/chest/neu, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"ulx" = ( +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) +"umJ" = ( +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"umO" = ( +/obj/structure/bed/rogue, +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/obj/item/grown/log/tree/stake{ + pixel_y = 4; + plane = -4 + }, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/cell) +"umU" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 1; + name = "privy" + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"uog" = ( +/obj/structure/closet/crate/drawer/random{ + pixel_y = 7 + }, +/obj/item/paper/nitemaiden_certificate, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/under/town/basement) +"uoh" = ( +/obj/structure/handcart{ + dir = 4; + icon_state = "cart-empty" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"uoo" = ( +/obj/structure/bed/rogue/wool, +/obj/item/bedsheet/rogue/pelt, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"uoO" = ( +/obj/effect/landmark/start/sapprentice, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"uoT" = ( +/obj/structure/bars/cemetery, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"uoY" = ( +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"upL" = ( +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"upQ" = ( +/obj/structure/table/wood/nice/decorated_alt, +/obj/item/candle/yellow/lit/infinite{ + pixel_x = 8; + pixel_y = 7 + }, +/turf/open/floor/carpet/inn, +/area/rogue/indoors/town/bath/redhouse) +"uqi" = ( +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"uqn" = ( +/obj/structure/closet/crate/chest/neu_iron{ + locked = 1; + lockid = "nightmaiden" + }, +/obj/item/roguekey/roomvi{ + lockid = "bath4"; + name = "bathkey IV" + }, +/obj/item/roguekey/roomvi{ + lockid = "bath1"; + name = "bathkey I" + }, +/obj/item/roguekey/roomvi{ + lockid = "bath2"; + name = "bathkey II" + }, +/obj/item/roguekey/roomvi{ + lockid = "bath3"; + name = "bathkey III" + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"uqL" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"urc" = ( +/obj/machinery/light/rogue/firebowl/stump, +/obj/effect/decal/turfedge_neu/road{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"urw" = ( +/obj/structure/closet/crate/chest/wicker, +/obj/item/neuFarm/seed/oat, +/obj/item/neuFarm/seed/oat, +/obj/item/neuFarm/seed/oat, +/obj/item/neuFarm/seed/oat, +/obj/item/neuFarm/seed/oat, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/soilsons) +"urM" = ( +/obj/structure/table/wood/plain_alt, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/soilsons) +"urU" = ( +/turf/open/floor/rogue/rooftop{ + dir = 1 + }, +/area/rogue/outdoors/town/roofs) +"usN" = ( +/obj/structure/fluff/walldeco/chains, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"usR" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/caverogue{ + first_time_text = "DEEP MINESHAFT" + }) +"usU" = ( +/obj/effect/decal/turfedge_neu{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"utC" = ( +/obj/item/reagent_containers/glass/bucket/wooden/alter, +/obj/effect/decal/turfedge_neu{ + dir = 4 + }, +/obj/machinery/light/rogue/wallfire/candle/weak/r, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town) +"utU" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/cow, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"uul" = ( +/obj/structure/closet/crate/chest/neu_fancy{ + name = "coin chest" + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"uuL" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/sandstone/shaded, +/area/rogue/indoors/town/church/chapel) +"uvn" = ( +/obj/effect/decal/cleanable/dirt/cobweb, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/shelter/mountains/decap) +"uvo" = ( +/obj/structure/stairs/stone{ + dir = 8; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"uvu" = ( +/obj/structure/fluff/clodpile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"uvz" = ( +/obj/structure/bookcase, +/obj/item/book/rogue/nitebeast, +/obj/item/book/rogue/tales1, +/obj/item/book/granter/spell/smoke, +/obj/item/book/rogue/mysticalfog, +/obj/item/book/rogue/tales3, +/obj/item/book/rogue/arcyne, +/obj/item/book/rogue/magicaltheory, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/magician) +"uvA" = ( +/obj/item/reagent_containers/glass/cup/wooden{ + pixel_y = -7 + }, +/obj/structure/rack/rogue/shelf/biggest, +/obj/item/reagent_containers/glass/cup/wooden{ + pixel_x = -5; + pixel_y = -7 + }, +/obj/item/reagent_containers/glass/cup/wooden{ + pixel_x = 8; + pixel_y = -7 + }, +/obj/item/reagent_containers/glass/cup/steel{ + pixel_x = -3; + pixel_y = 14 + }, +/obj/item/reagent_containers/glass/cup/steel{ + pixel_x = 5; + pixel_y = 14 + }, +/obj/structure/rack/rogue/shelf/notdense{ + pixel_x = 32; + pixel_y = 0 + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/tavern/saiga) +"uvC" = ( +/obj/structure/stairs/stone, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) +"uvX" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 10 + }, +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"uwa" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/obj/item/candle/yellow/lit/infinite{ + pixel_y = 32 + }, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/shelter/rtfield) +"uwk" = ( +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/shop) +"uwo" = ( +/turf/open/water/swamp/deep, +/area/rogue/under/catacombs/dwarfoutpost) +"uwC" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/water/cleanshallow, +/area/rogue/indoors/town/church/chapel) +"uwG" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 5 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"uwR" = ( +/obj/item/bedsheet/rogue/fabric_double, +/obj/structure/bed/rogue/inn/double, +/obj/machinery/light/rogue/wallfire{ + pixel_x = -32 + }, +/turf/open/floor/rogue/carpet/green, +/area/rogue/indoors/town/tavern/saiga) +"uxm" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/natural/cloth, +/obj/item/flashlight/flare/torch/metal, +/obj/item/flashlight/flare/torch/metal, +/obj/item/flashlight/flare/torch/metal, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"uxt" = ( +/obj/structure/bars/cemetery, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"uxz" = ( +/obj/structure/bookcase, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"uxG" = ( +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/obj/effect/decal/turfedge_neu/mossy{ + dir = 4 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"uxJ" = ( +/obj/structure/fluff/railing/stonehedge, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"uxS" = ( +/turf/open/floor/rogue/sandstone, +/area/rogue/indoors/town/church/chapel) +"uxU" = ( +/obj/structure/kneestingers, +/turf/open/water/swamp/deep, +/area/rogue/under/catacombs/dwarfoutpost) +"uyd" = ( +/obj/structure/table/wood{ + icon_state = "longtable" + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/entrance{ + first_time_text = "Rockhamlet" + }) +"uyG" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"uyO" = ( +/obj/structure/chair/wood/rogue{ + dir = 8 + }, +/turf/open/floor/rogue/tile/tilerg, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"uzs" = ( +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/indoors/shelter/rtfield) +"uzF" = ( +/obj/structure/fermenting_barrel/random, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"uAc" = ( +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/obj/structure/bars/pipe{ + dir = 8; + icon_state = "pipe" + }, +/turf/open/floor/rogue/rooftop/green, +/area/rogue/outdoors/town/roofs) +"uAe" = ( +/obj/item/reagent_containers/glass/bucket/wooden, +/obj/item/rogueweapon/tongs, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"uAH" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/paper/scroll, +/obj/item/natural/feather, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"uBq" = ( +/obj/structure/closet/crate/chest/old_crate, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors/town) +"uBG" = ( +/obj/effect/spawner/roguemap/hostile_beggar_danger, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/shelter/bog) +"uBL" = ( +/obj/structure/table/vtable/v2, +/obj/item/candle/skull/lit{ + pixel_x = -1; + pixel_y = 7 + }, +/turf/open/floor/carpet/stellar, +/area/rogue/indoors/town/magician) +"uBP" = ( +/turf/closed/wall/mineral/rogue/pipe, +/area/rogue/outdoors) +"uCa" = ( +/turf/closed/wall/mineral/rogue/wooddark/end{ + dir = 8; + icon_state = "endwooddark" + }, +/area/rogue/indoors/town/garrison) +"uCd" = ( +/turf/closed/mineral/rogue/bedrock, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); + first_time_text = "CATACOMBS" + }) +"uCD" = ( +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"uCR" = ( +/obj/structure/mineral_door/wood/donjon{ + dir = 8; + locked = 1; + lockid = "blacksmith"; + name = "smithy" + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/dwarfin) +"uDp" = ( +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/indoors/town/magician) +"uDz" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/church) +"uDI" = ( +/obj/structure/bed/rogue/shit, +/obj/item/natural/cloth, +/obj/effect/spawner/roguemap/hostile_beggar_danger, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"uDK" = ( +/obj/structure/fluff/statue/gargoyle, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"uEj" = ( +/obj/structure/stairs{ + dir = 1; + icon_state = "stairs" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/church) +"uEp" = ( +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"uEt" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors) +"uEL" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"uFf" = ( +/obj/structure/winch{ + dir = 1; + gid = "thronein" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"uFo" = ( +/obj/item/reagent_containers/food/snacks/crow, +/turf/open/floor/rogue/rooftop/green, +/area/rogue/outdoors/town/roofs) +"uFE" = ( +/obj/structure/chair/wood/rogue/chair_noble, +/obj/effect/decal/cleanable/dirt/cobweb{ + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/rogue/outdoors/exposed/under/basement) +"uFI" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 8 + }, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"uFR" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"uFV" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 8; + icon_state = "torchwall1" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/plague_district) +"uFZ" = ( +/turf/open/floor/rogue/concrete, +/area/rogue/under/town/basement) +"uGg" = ( +/obj/structure/table/wood/fancy/royalblack, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"uGj" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/mountains) +"uGl" = ( +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/blocks/paving, +/area/rogue/indoors/town/bath/redhouse) +"uGG" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/clothing/cloak/stabard/guard, +/obj/item/clothing/wrists/roguetown/bracers/leather, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"uGM" = ( +/obj/structure/fluff/psycross/copper, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"uHG" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/manorgarri) +"uIz" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/tavern/saiga) +"uJf" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 1; + icon_state = "wooddir"; + locked = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"uJn" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"uJs" = ( +/obj/machinery/loom, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tailor) +"uJt" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/roguemachine/mail{ + pixel_y = -32 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"uJC" = ( +/obj/structure/fluff/railing/border, +/turf/closed/mineral/rogue/bedrock, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"uJD" = ( +/turf/open/floor/rogue/twig, +/area/rogue/indoors/shelter/bog) +"uJH" = ( +/obj/structure/circle_protection, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/indoors/town/magician) +"uKu" = ( +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"uKw" = ( +/obj/structure/toilet, +/obj/effect/decal/turfedge_neu/mossy{ + dir = 10 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/tavern/saiga) +"uKz" = ( +/obj/structure/closet/crate/roguecloset, +/obj/effect/spawner/roguemap/cheapinnroomencounter, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern/saiga) +"uKD" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fermenting_barrel/random/water, +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/mountains) +"uKI" = ( +/obj/machinery/light/rogue/wallfire{ + pixel_y = -21 + }, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"uKS" = ( +/obj/structure/flora/roguegrass, +/obj/structure/roguerock, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/spooky) +"uLC" = ( +/obj/machinery/light/rogue/wallfire{ + pixel_y = 32 + }, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"uLI" = ( +/obj/structure/rack/rogue/shelf/biggest, +/obj/item/flint{ + pixel_x = -2; + pixel_y = 3 + }, +/obj/item/candle/yellow{ + pixel_x = 8; + pixel_y = -1 + }, +/obj/item/candle/yellow{ + pixel_x = 6 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"uLK" = ( +/obj/structure/chair/wood/rogue{ + dir = 1 + }, +/turf/open/floor/rogue/carpet/lord/center, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"uMw" = ( +/obj/item/clothing/shoes/roguetown/shortboots, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"uNg" = ( +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/blocks/stonered, +/area/rogue/indoors/town/bath/redhouse) +"uNF" = ( +/obj/structure/fluff/railing/border, +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/tavern/saiga) +"uNO" = ( +/turf/closed/wall/mineral/rogue/roofwall/innercorner{ + dir = 4 + }, +/area/rogue/indoors/town) +"uNR" = ( +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue) +"uOa" = ( +/obj/structure/stairs/stone, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/church) +"uOb" = ( +/obj/structure/stairs/stone{ + dir = 8; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"uOF" = ( +/obj/structure/rack/rogue, +/obj/item/storage/roguebag{ + pixel_x = -8; + pixel_y = 6 + }, +/obj/item/storage/roguebag{ + pixel_x = 8; + pixel_y = -2 + }, +/obj/item/storage/backpack/rogue/backpack, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"uOG" = ( +/obj/effect/spawner/roguemap/treeorbush, +/obj/effect/decal/turfedge_neu/road, +/obj/effect/decal/turfedge_neu/road{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"uOM" = ( +/obj/structure/table/vtable, +/obj/structure/mirror/fancy{ + icon_state = "fancymirror_alt" + }, +/obj/item/reagent_containers/glass/cup/steel{ + pixel_x = 12; + pixel_y = 10 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"uPg" = ( +/obj/item/reagent_containers/food/snacks/crow{ + dir = 1; + icon_state = "crow" + }, +/turf/open/floor/rogue/rooftop/green{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"uPP" = ( +/obj/structure/fluff/railing/border, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"uPR" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 8 + }, +/area/rogue/indoors/town/bath/redhouse) +"uPZ" = ( +/turf/closed/wall/mineral/rogue/wooddark/end{ + dir = 8; + icon_state = "endwooddark" + }, +/area/rogue/indoors/town/shop) +"uQd" = ( +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/indoors/town/magician) +"uQj" = ( +/obj/item/reagent_containers/food/snacks/smallrat/dead, +/obj/effect/decal/cleanable/blood/splatter, +/obj/item/reagent_containers/glass/bucket/pot, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"uQm" = ( +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/water/cleanshallow, +/area/rogue/indoors/town/church/chapel) +"uQr" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/vault) +"uQB" = ( +/obj/machinery/light/rogue/smelter, +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/obj/structure/bars/pipe{ + dir = 6; + icon_state = "pipe" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"uRr" = ( +/obj/structure/fermenting_barrel/random/beer, +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/bath/redhouse) +"uRx" = ( +/obj/structure/table/wood/large/corner_new{ + dir = 5 + }, +/obj/item/reagent_containers/glass/cup, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors) +"uSi" = ( +/obj/structure/fluff/railing/border{ + dir = 5; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/exposed/manorgarri) +"uSn" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"uSH" = ( +/obj/structure/fluff/walldeco/vinez, +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/outdoors/rtfield/plague_district) +"uSJ" = ( +/obj/item/roguebin/water/gross, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"uSP" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass, +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"uST" = ( +/obj/structure/closet/crate/roguecloset/lord, +/obj/item/natural/cloth, +/obj/item/clothing/suit/roguetown/armor/gambeson/arming, +/obj/item/clothing/cloak/raincloak/furcloak, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"uSU" = ( +/obj/structure/fluff/clodpile, +/obj/item/natural/worms, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"uTt" = ( +/obj/structure/mineral_door/wood/donjon{ + locked = 1; + lockid = "blacksmith"; + name = "smithy" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"uTy" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"uTA" = ( +/obj/structure/stairs/stone{ + dir = 4; + icon_state = "stonestairs" + }, +/obj/structure/fluff/wallclock, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"uTU" = ( +/obj/structure/table/wood{ + icon_state = "tablewood1" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/soilsons) +"uUT" = ( +/obj/structure/fluff/walldeco/painting{ + pixel_y = 32 + }, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"uVp" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/plague_district) +"uVY" = ( +/obj/structure/mineral_door/wood/red{ + name = "kitchen" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"uWg" = ( +/obj/structure/closet/crate/chest/crate, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/shop) +"uWr" = ( +/obj/item/roguekey/roomiv{ + name = "Castellan room key" + }, +/obj/item/roguekey/roomi{ + name = "Duchess suite key" + }, +/obj/item/roguekey/roomii{ + name = "Wanderer room key" + }, +/obj/item/roguekey/roomiii{ + name = "Yeoman room key" + }, +/obj/structure/closet/crate/chest/neu_iron{ + locked = 1; + lockid = "tavern"; + name = "key chest" + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/tavern/saiga) +"uWG" = ( +/obj/machinery/light/rogue/oven{ + pixel_y = 32 + }, +/obj/effect/decal/turfedge_neu/alt, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church) +"uWI" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/exposed/church) +"uWW" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/woodish) +"uXt" = ( +/obj/machinery/light/rogue/wallfire/candle/weak/r, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/tavern/saiga) +"uXz" = ( +/obj/structure/flora/roguetree/burnt, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"uXM" = ( +/obj/item/reagent_containers/powder/flour, +/obj/item/reagent_containers/powder/flour, +/obj/item/reagent_containers/powder/flour, +/obj/item/reagent_containers/powder/flour, +/obj/item/reagent_containers/powder/flour, +/obj/item/reagent_containers/powder/flour, +/obj/item/reagent_containers/powder/flour, +/obj/structure/closet/crate/chest/old_crate, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/under/basement) +"uYf" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"uYS" = ( +/obj/structure/fluff/walldeco/rpainting/crown, +/obj/structure/rack/rogue/shelf/notdense{ + pixel_x = 32; + pixel_y = -6 + }, +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors/town/tavern/saiga) +"uYT" = ( +/obj/structure/roguemachine/mail, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"uYU" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/machinery/light/rogue/torchholder{ + pixel_y = -32 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"uZe" = ( +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town) +"uZn" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/spawner/roguemap/volf_maybe, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"uZo" = ( +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) +"uZF" = ( +/turf/closed/wall/mineral/rogue/decostone/fluffstone, +/area/rogue/indoors/shelter/rtfield) +"uZZ" = ( +/obj/structure/mineral_door/wood/donjon/stone{ + lockid = "makers"; + name = "makers guildhall" + }, +/turf/open/floor/rogue/tile/masonic/spiral, +/area/rogue/indoors/town/dwarfin) +"val" = ( +/turf/closed/wall/mineral/rogue/decostone/cand, +/area/rogue/under/town/basement) +"vaR" = ( +/turf/open/floor/rogue/ruinedwood, +/area/rogue/indoors/town/church/chapel) +"vbA" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/basement) +"vbR" = ( +/obj/structure/closet/dirthole/closed/loot, +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"vcz" = ( +/turf/closed/wall/mineral/rogue/wooddark/slitted, +/area/rogue/indoors/town/tailor) +"vcJ" = ( +/obj/structure/mineral_door/wood/donjon/stone{ + locked = 1; + lockid = "steward"; + name = "GOLD" + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/shelter/town/sargoth) +"vcP" = ( +/obj/structure/stairs/stone, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"vdK" = ( +/obj/structure/mineral_door/bars{ + locked = 1; + lockid = "priest" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/church) +"vdL" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle{ + dir = 1 + }, +/area/rogue/indoors/town/magician) +"vdM" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/mountains) +"vdO" = ( +/turf/closed/wall/mineral/rogue/decostone/fluffstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"vec" = ( +/obj/structure/mineral_door/wood/donjon/stone{ + locked = 1; + lockid = "graveyard" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/under/town/basement) +"vek" = ( +/obj/structure/bed/rogue/wool, +/obj/item/bedsheet/rogue/pelt, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town) +"veA" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/dwarf) +"vfa" = ( +/obj/item/natural/bundle/stick{ + pixel_y = 40 + }, +/obj/item/natural/bundle/stick{ + pixel_y = 37 + }, +/obj/structure/roguemachine/scomm/r, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/church) +"vfi" = ( +/obj/structure/mineral_door/wood/fancywood{ + lockid = "manor" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"vfj" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/bath/soap, +/obj/item/bath/soap, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"vfK" = ( +/obj/structure/fluff/walldeco/bath/wallrope{ + pixel_y = -32 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"vfO" = ( +/obj/structure/fluff/statue/knightalt{ + pixel_y = 9 + }, +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"vfR" = ( +/obj/structure/stairs{ + dir = 8; + icon_state = "stairs" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town) +"vfX" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/blood_neu/tracks, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"vgy" = ( +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town) +"vgH" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/woodish) +"vgI" = ( +/obj/structure/fluff/railing/border, +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/outdoors/town/roofs) +"vgS" = ( +/obj/structure/bars, +/turf/open/water/sewer, +/area/rogue/indoors/town/bath/redhouse) +"vhx" = ( +/turf/open/floor/rogue/twig, +/area/rogue/indoors) +"vhN" = ( +/obj/structure/bars/pipe, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town) +"vhT" = ( +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/cobble/mossy, +/area/rogue/indoors/town/tavern/saiga) +"viq" = ( +/obj/structure/chair/stool/rogue, +/turf/open/water/bath/pool{ + dir = 6 + }, +/area/rogue/indoors/town/bath/redhouse) +"viY" = ( +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/garrison) +"vjo" = ( +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"vjx" = ( +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass/bush_meagre, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"vkX" = ( +/obj/effect/spawner/roguemap/treeorbush, +/obj/effect/decal/turfedge_neu/road{ + dir = 5 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"vlr" = ( +/obj/structure/closet/crate/coffin, +/obj/item/roguecoin/silver, +/obj/item/roguecoin/silver, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/catacombs) +"vly" = ( +/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, +/obj/structure/closet/crate/chest/crate, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "vertw" + }, +/area/rogue/indoors/town/church/chapel) +"vmg" = ( +/obj/structure/closet/crate/chest/crate, +/obj/item/reagent_containers/food/snacks/smallrat{ + desc = "A quite chubby fellow. It reeks of alcohol."; + dir = 8; + name = "Philbert" + }, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/shop) +"vmC" = ( +/obj/structure/closet/dirthole/closed/loot, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"vmK" = ( +/obj/structure/bars/pipe{ + dir = 6; + icon_state = "pipe" + }, +/turf/closed/wall/mineral/rogue/wooddark/horizontal, +/area/rogue/indoors/town/shop) +"vmM" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop{ + dir = 1 + }, +/area/rogue/outdoors/exposed/manorgarri) +"vom" = ( +/obj/structure/bars/cemetery, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"voD" = ( +/obj/structure/flora/rogueflower/reedbush, +/turf/open/water/swamp, +/area/rogue/outdoors/rtfield/hamlet) +"voM" = ( +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/obj/structure/roguemachine/camera/left, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"voP" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"voT" = ( +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/church) +"voW" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/indoors) +"vpV" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/fluff/railing/border, +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"vqR" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/landmark/start/farmer{ + dir = 8 + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/soilsons) +"vrh" = ( +/obj/structure/table/wood/reinforced_alt{ + name = "feeding trough" + }, +/obj/structure/bars/alt, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/outdoors/exposed/under/basement) +"vrm" = ( +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/outdoors/exposed/under/basement) +"vrK" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"vta" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 8; + icon_state = "torchwall1" + }, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/shop) +"vti" = ( +/obj/item/reagent_containers/glass/bucket/wooden/alter{ + pixel_y = 5 + }, +/obj/structure/table/wood/plain_alt, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"vud" = ( +/turf/open/floor/carpet/purple, +/area/rogue/indoors/town/tailor) +"vuw" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/glasses/blindfold/white{ + name = "blindfold" + }, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/cell) +"vuG" = ( +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"vuN" = ( +/obj/structure/bed/rogue/wooldouble, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/shelter/rtfield) +"vuZ" = ( +/obj/effect/landmark/start/dungeoneer{ + dir = 8 + }, +/obj/structure/roguemachine/mail, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"vvy" = ( +/turf/open/floor/rogue/rooftop/green, +/area/rogue/outdoors/mountains) +"vwo" = ( +/obj/effect/spawner/roguemap/hauntz_random, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"vws" = ( +/obj/structure/flora/roguegrass, +/obj/structure/handcart, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"vwC" = ( +/turf/open/water/cleanshallow, +/area/rogue/indoors/town/church/chapel) +"vwS" = ( +/obj/structure/rack/rogue, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/vault) +"vxp" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/polearm/woodstaff/aries, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church) +"vxz" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"vxR" = ( +/obj/structure/fluff/walldeco/bath/wallrope{ + dir = 4; + pixel_y = 32 + }, +/obj/structure/fluff/walldeco/bath/wallrope{ + dir = 8; + pixel_y = 32 + }, +/obj/machinery/light/rogue/wallfire/candle/lamp, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"vyE" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/shop) +"vyP" = ( +/turf/open/floor/carpet/red, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"vyQ" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"vyV" = ( +/obj/structure/fluff/statue/tdummy, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"vzb" = ( +/obj/structure/bars/pipe, +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"vzs" = ( +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/exposed/manorgarri) +"vzv" = ( +/turf/closed/wall/mineral/rogue/wooddark/horizontal, +/area/rogue/outdoors/town/roofs) +"vzw" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tailor) +"vAv" = ( +/obj/effect/decal/remains/bigrat, +/turf/open/water/cleanshallow, +/area/rogue/outdoors/exposed/under/basement) +"vAA" = ( +/obj/structure/flora/roguegrass, +/obj/item/reagent_containers/glass/bucket/wooden/alter, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"vAP" = ( +/obj/structure/bars/pipe, +/obj/machinery/light/rogue/wallfire/candle/l, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town) +"vAR" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/rogueflower/brflowers, +/turf/open/floor/rogue/grass, +/area/rogue/indoors/town/church/chapel) +"vAS" = ( +/obj/machinery/light/rogue/firebowl/standing/blue, +/obj/effect/decal/turfedge_neu/alt{ + dir = 6 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/manorgarri) +"vAZ" = ( +/obj/structure/fluff/railing/border, +/obj/structure/fluff/walldeco/wallshield{ + pixel_y = 32 + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"vBb" = ( +/obj/structure/fluff/statue/gargoyle/moss, +/turf/open/floor/rogue/grass, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"vBC" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/decal/shadow_floor{ + dir = 9 + }, +/turf/open/floor/rogue/tile/bath, +/area/rogue/indoors/town/bath/redhouse) +"vBU" = ( +/obj/structure/fluff/railing/border{ + dir = 4 + }, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"vBX" = ( +/turf/closed/wall/mineral/rogue/wooddark/window, +/area/rogue/indoors/town/cell) +"vCa" = ( +/obj/structure/roguemachine/submission, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"vCc" = ( +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue) +"vCk" = ( +/obj/structure/table/wood/large/corner_blue{ + dir = 10 + }, +/obj/item/candle/yellow/lit/infinite{ + pixel_x = 17; + pixel_y = 11 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/bath/redhouse) +"vCr" = ( +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "borderfall" + }, +/obj/structure/stone_tile/block/cracked, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/town/basement) +"vCv" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1 + }, +/obj/structure/flora/rock/pile, +/obj/structure/flora/roguegrass, +/obj/structure/fluff/walldeco/vinez{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"vCH" = ( +/obj/structure/chair/stool/rogue, +/obj/structure/roguemachine/scomm/l, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/magician) +"vDr" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"vDw" = ( +/obj/structure/toilet, +/obj/effect/decal/turfedge_neu{ + dir = 5 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town) +"vEU" = ( +/mob/living/simple_animal/hostile/retaliate/rogue/trufflepig, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"vEY" = ( +/obj/structure/rack/rogue, +/obj/item/quiver/bolts, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"vFC" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"vFV" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"vGb" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle{ + dir = 4 + }, +/area/rogue/indoors/town/church/chapel) +"vHi" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"vHk" = ( +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/alch/bone, +/obj/item/alch/sinew, +/obj/item/alch/sinew, +/obj/item/alch/viscera, +/obj/item/alch/bone, +/obj/item/alch/bone, +/obj/item/alch/horn, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"vHo" = ( +/obj/machinery/light/rogue/torchholder/r, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/town/hamlet) +"vHv" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/obj/structure/fluff/sellsign{ + desc = "ROCKHAMLET has been scratched over the former placename, too worn to read."; + name = "ROCKHAMLET" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"vHH" = ( +/obj/structure/roguetent/preopen, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/outdoors/exposed/under/basement) +"vHP" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/sandstone/shaded, +/area/rogue/indoors/town/church/chapel) +"vIi" = ( +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/town) +"vIo" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern/saiga) +"vIt" = ( +/obj/item/grown/log/tree/small, +/obj/item/grown/log/tree/small, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/mountains) +"vIN" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 4; + icon_state = "stonehedge_aged" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"vIR" = ( +/obj/effect/spawner/roguemap/treeorbush, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"vJb" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"vJm" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"vJw" = ( +/turf/open/water/bath/pool{ + dir = 4 + }, +/area/rogue/indoors/town/bath/redhouse) +"vJB" = ( +/obj/structure/flora/roguegrass/bush_meagre, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"vJF" = ( +/obj/structure/table/wood/nice/decorated_alt, +/obj/item/reagent_containers/glass/cup/steel{ + pixel_x = 1; + pixel_y = 9 + }, +/turf/open/floor/carpet/inn, +/area/rogue/indoors/town/bath/redhouse) +"vJI" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"vJP" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/woodish) +"vJQ" = ( +/obj/structure/flora/roguetree/burnt, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"vKe" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"vKI" = ( +/obj/structure/table/vtable, +/obj/item/toy/cards/deck, +/turf/open/floor/carpet/stellar, +/area/rogue/indoors/town/magician) +"vLQ" = ( +/turf/closed/wall/mineral/rogue/wooddark/end{ + dir = 4; + icon_state = "endwooddark" + }, +/area/rogue/indoors/town/garrison) +"vMY" = ( +/turf/open/water/bath/pool{ + dir = 8 + }, +/area/rogue/indoors/town/bath/redhouse) +"vNq" = ( +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue) +"vNy" = ( +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"vOf" = ( +/obj/item/clothing/shoes/roguetown/boots/leather, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"vOo" = ( +/obj/item/roguebin/water/gross, +/obj/structure/mirror/fancy{ + desc = "Your reflection seems to be the other way... er... right way around."; + icon_state = "fancymirror_alt"; + name = "magic mirror" + }, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/magician) +"vOR" = ( +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/church) +"vPZ" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 6 + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"vQh" = ( +/obj/structure/flora/roguegrass/water/reeds, +/turf/open/water/swamp, +/area/rogue/outdoors/rtfield/boggish) +"vQx" = ( +/turf/closed/wall/mineral/rogue/wooddark/end{ + dir = 1; + icon_state = "endwooddark" + }, +/area/rogue/indoors) +"vQY" = ( +/obj/machinery/light/rogue/lanternpost/fixed{ + dir = 1 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"vSR" = ( +/obj/structure/rack/rogue/shelf/biggest{ + pixel_y = 12 + }, +/obj/item/reagent_containers/glass/bucket/wooden/alter{ + pixel_y = 23 + }, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"vSZ" = ( +/obj/structure/bed/rogue/wool, +/obj/item/bedsheet/rogue/fabric, +/turf/open/floor/carpet/purple, +/area/rogue/indoors/town/tailor) +"vTl" = ( +/obj/structure/table/wood/plain_alt, +/obj/effect/decal/turfedge_neu/alt, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern/saiga) +"vTq" = ( +/turf/open/floor/carpet/red, +/area/rogue/outdoors/exposed/under/basement) +"vTN" = ( +/obj/structure/mineral_door/bars, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"vUG" = ( +/obj/structure/fluff/statue/knight/r, +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/tile{ + icon_state = "chess" + }, +/area/rogue/outdoors/exposed/under/basement) +"vUI" = ( +/turf/open/floor/rogue/oak/broken, +/area/rogue/indoors/town/cell) +"vVy" = ( +/obj/structure/table/wood/plain_alt, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"vVD" = ( +/obj/structure/closet/crate/drawer/random, +/obj/item/clothing/mask/cigarette/rollie/cannabis{ + pixel_x = 2; + pixel_y = 3 + }, +/turf/open/floor/rogue/tile/masonic/single, +/area/rogue/indoors/town/magician) +"vVI" = ( +/obj/structure/flora/roguegrass/bush_meagre, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"vVY" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/under/town/basement) +"vWg" = ( +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"vWi" = ( +/obj/structure/stairs/stone{ + dir = 4; + icon_state = "stonestairs" + }, +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/cobblerock, +/area/rogue/indoors/town) +"vWk" = ( +/obj/structure/flora/roguegrass, +/obj/structure/bars/pipe{ + dir = 8; + icon_state = "pipe" + }, +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/obj/structure/bars/pipe{ + dir = 6; + icon_state = "pipe" + }, +/turf/open/floor/rogue/rooftop/green{ + dir = 1 + }, +/area/rogue/outdoors/town/roofs) +"vWy" = ( +/obj/structure/roguerock, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"vWD" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 4 + }, +/obj/structure/fermenting_barrel/random/beer, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/under/basement) +"vWJ" = ( +/obj/item/clothing/shoes/roguetown/jester, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/under/basement) +"vWP" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"vXb" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "manor" + }, +/obj/effect/decal/turfedge_neu{ + dir = 8 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/under/basement) +"vXs" = ( +/obj/structure/bed/rogue/shit, +/obj/effect/landmark/start/prisoner{ + dir = 4 + }, +/obj/effect/decal/turfedge_neu/alt{ + dir = 9 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town/cell) +"vXB" = ( +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/manorgarri) +"vXX" = ( +/obj/structure/chair/wood/rogue{ + dir = 1 + }, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"vYf" = ( +/turf/open/floor/rogue/carpet/lord/center, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"vYp" = ( +/obj/effect/landmark/start/armorsmith{ + dir = 8 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"vYJ" = ( +/obj/item/natural/saddle, +/obj/structure/rack/rogue, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"vYV" = ( +/obj/structure/chair/wood/rogue/chair_noble/red{ + dir = 4 + }, +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/sandstone/temple, +/area/rogue/indoors/town/church) +"vYW" = ( +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"vZk" = ( +/obj/effect/decal/shadow_floor{ + dir = 10 + }, +/turf/open/floor/rogue/sandstone/shaded, +/area/rogue/indoors/town/church/chapel) +"vZG" = ( +/turf/closed/wall/mineral/rogue/roofwall/innercorner{ + dir = 8 + }, +/area/rogue/indoors/town) +"vZN" = ( +/obj/structure/stairs/stone, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"wao" = ( +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"waO" = ( +/obj/structure/flora/roguegrass, +/mob/living/simple_animal/hostile/retaliate/rogue/goat, +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"wbi" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/neck/roguetown/coif, +/obj/item/clothing/neck/roguetown/coif/cloth, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"wbA" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/entrance{ + first_time_text = "Rockhamlet" + }) +"wbP" = ( +/obj/effect/decal/turfedge_neu, +/obj/machinery/light/rogue/hearth, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"wce" = ( +/obj/structure/stairs{ + dir = 8; + icon_state = "stairs" + }, +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/outdoors/town/roofs) +"wcn" = ( +/obj/machinery/light/rogue/firebowl/stump, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) +"wcw" = ( +/obj/structure/stairs{ + dir = 4; + icon_state = "stairs" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/soilsons) +"wcF" = ( +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"wdf" = ( +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/under/basement) +"wdq" = ( +/obj/machinery/light/rogue/firebowl/stump, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/town/roofs) +"wdV" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"weF" = ( +/obj/structure/closet/crate/roguecloset/dark{ + lockid = "steward" + }, +/obj/item/clothing/neck/roguetown/gorget, +/obj/item/rogueweapon/knife/dagger/steel, +/obj/item/keyring/steward, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town) +"weW" = ( +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town) +"wfc" = ( +/obj/structure/mineral_door/bars{ + locked = 1; + lockid = "walls" + }, +/obj/structure/fluff/railing/border, +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/town/roofs) +"wfm" = ( +/obj/item/natural/dirtclod, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"wfT" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu{ + dir = 4 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"wgc" = ( +/obj/structure/bars/pipe, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"wgs" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "weird1" + }, +/area/rogue/indoors/town/church/chapel) +"wgz" = ( +/obj/item/paper/confession, +/obj/item/paper/confession, +/obj/structure/closet/crate/chest/neu, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/town/basement) +"wgQ" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 8 + }, +/area/rogue/indoors/town/church/chapel) +"whe" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 10 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"whu" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 10 + }, +/obj/structure/idle_enemy/volf, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"whC" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle{ + dir = 4 + }, +/area/rogue/indoors/town/magician) +"whE" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/obj/structure/table/optable, +/turf/open/floor/rogue/twig, +/area/rogue/under/town/basement) +"whF" = ( +/obj/structure/closet/crate/coffin, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/cell) +"whL" = ( +/obj/machinery/light/rogue/smelter, +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"wiz" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"wiD" = ( +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/obj/structure/fluff/walldeco/vinez/offset{ + dir = 10 + }, +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"wiI" = ( +/obj/effect/decal/remains/wolf, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"wiL" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/fluff/railing/border, +/turf/open/transparent/openspace, +/area/rogue/outdoors/exposed/town/hamlet) +"wiR" = ( +/turf/closed/mineral/rogue, +/area/rogue/indoors/shelter/rtfield) +"wjh" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/sandstone/shaded, +/area/rogue/indoors/town/church/chapel) +"wjq" = ( +/obj/structure/closet/crate/roguecloset/inn, +/obj/item/clothing/suit/roguetown/armor/leather/vest, +/obj/item/clothing/mask/rogue/facemask/steel, +/obj/item/clothing/cloak/apron/brown, +/obj/item/rogue/instrument/accord, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"wjH" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/exposed/manorgarri) +"wjU" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 8; + icon_state = "stonehedge_aged" + }, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"wkj" = ( +/obj/structure/chair/wood/rogue/fancy{ + dir = 1 + }, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"wkk" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 5 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"wko" = ( +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/outdoors/rtfield/outlaw) +"wks" = ( +/obj/structure/bed/rogue/mediocre, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town) +"wkZ" = ( +/obj/structure/flora/rock/pile, +/obj/structure/fluff/clodpile, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"wlv" = ( +/obj/structure/fluff/wallclock/r, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"wlB" = ( +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"wlL" = ( +/obj/structure/guillotine{ + step_x = 0 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/exposed/town/hamlet) +"wlM" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"wmg" = ( +/obj/structure/bars, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/cell) +"wmC" = ( +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"wnB" = ( +/turf/closed/wall/mineral/rogue/wooddark/horizontal, +/area/rogue/indoors/town/shop) +"wnR" = ( +/obj/structure/fermenting_barrel/water, +/obj/item/reagent_containers/glass/cup/skull{ + pixel_y = 12 + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"wox" = ( +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"woM" = ( +/turf/open/transparent/openspace, +/area/rogue/indoors/shelter/town/dwarf) +"wpE" = ( +/obj/structure/mineral_door/bars{ + locked = 1; + lockid = "mage"; + max_integrity = 100000 + }, +/turf/open/floor/rogue/tile, +/area/rogue/indoors/town/magician) +"wpR" = ( +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"wrs" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 5 + }, +/obj/effect/decal/turfedge_neu/mossy{ + dir = 10 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"wrV" = ( +/obj/structure/mineral_door/wood/donjon{ + dir = 4; + locked = 1; + lockid = "dungeon" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"wsn" = ( +/obj/machinery/anvil/crafted, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"wsp" = ( +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"wsr" = ( +/obj/item/reagent_containers/food/snacks/crow{ + dir = 1; + icon_state = "crow" + }, +/turf/open/floor/rogue/rooftop{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"wsP" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/indoors) +"wtD" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/church) +"wtU" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 5 + }, +/obj/effect/sunlight, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"wuh" = ( +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"wuq" = ( +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"wvB" = ( +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/garrison) +"wvP" = ( +/obj/structure/bars/cemetery, +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass/bush/wall, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"wvR" = ( +/turf/open/floor/rogue/rooftop/green{ + dir = 1 + }, +/area/rogue/outdoors/town/roofs) +"wwa" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/obj/effect/decal/remains/cabbit, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); + name = "vulf cave" + }) +"wwn" = ( +/obj/structure/table/wood/large/corner_new{ + dir = 5 + }, +/obj/item/clothing/wrists/roguetown/wrappings, +/obj/item/flashlight/flare/torch/lantern, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) +"wwo" = ( +/obj/machinery/light/rogue/campfire, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"www" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"wwD" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 6 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"wwH" = ( +/obj/structure/fluff/psycross/crafted, +/obj/effect/decal/remains/saiga, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"wwJ" = ( +/turf/open/transparent/openspace, +/area/rogue/indoors) +"wxa" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/bath/redhouse) +"wxb" = ( +/obj/structure/closet/crate/roguecloset, +/obj/item/candle/yellow, +/obj/item/candle/yellow, +/obj/item/candle/yellow, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"wyq" = ( +/obj/structure/roguemachine/merchantvend, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"wys" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 8 + }, +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"wyL" = ( +/obj/structure/fluff/wallclock/l, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"wzF" = ( +/obj/structure/chair/stool/rogue, +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"wAo" = ( +/obj/structure/flora/roguegrass, +/obj/structure/bars/pipe, +/turf/open/floor/rogue/rooftop/green{ + dir = 1 + }, +/area/rogue/outdoors/town/roofs) +"wAr" = ( +/obj/structure/fluff/railing/border{ + dir = 9; + icon_state = "border" + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/mountains) +"wAB" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"wAC" = ( +/obj/structure/toilet, +/turf/open/floor/rogue/blocks/paving, +/area/rogue/indoors/town/bath/redhouse) +"wBd" = ( +/obj/item/reagent_containers/food/snacks/egg, +/obj/item/reagent_containers/food/snacks/egg, +/obj/structure/closet/crate/roguecloset/dark, +/obj/item/broom, +/obj/item/natural/cloth, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/indoors) +"wBm" = ( +/obj/effect/spawner/roguemap/tree, +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"wBq" = ( +/obj/structure/fluff/statue, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"wBu" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/structure/roguerock, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"wBy" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 9 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern/saiga) +"wCC" = ( +/obj/structure/fluff/railing/wood, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/rtfield/hamlet) +"wDi" = ( +/obj/structure/table/wood/plain_alt, +/obj/item/reagent_containers/glass/bucket/pot, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/soilsons) +"wDj" = ( +/obj/structure/fluff/millstone{ + pixel_y = 7 + }, +/obj/structure/table/wood/plain/alto, +/obj/structure/fluff/statue/pillar{ + dir = 1; + name = "shaft"; + pixel_x = 12; + pixel_y = 25 + }, +/turf/open/floor/rogue/blocks, +/area/rogue/outdoors/exposed/under/basement) +"wEg" = ( +/obj/structure/flora/roguegrass, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"wEi" = ( +/obj/structure/roguemachine/scomm/l, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/bath/redhouse) +"wEq" = ( +/obj/structure/flora/roguegrass, +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/indoors) +"wEW" = ( +/obj/item/reagent_containers/food/snacks/smallrat, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"wFa" = ( +/obj/structure/roguerock, +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave) +"wFg" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/church/chapel) +"wGg" = ( +/obj/structure/fluff/nest, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/basement) +"wGn" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/cell) +"wGw" = ( +/obj/effect/decal/turfedge_neu{ + dir = 6 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"wGR" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass, +/obj/structure/roguerock, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"wHs" = ( +/obj/structure/stairs{ + dir = 8; + icon_state = "stairs" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"wHQ" = ( +/obj/structure/roguemachine/mail/l{ + pixel_y = 15 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"wHV" = ( +/obj/item/roguebin/alt, +/obj/structure/fluff/walldeco/bath/wallpipes{ + pixel_x = 16; + pixel_y = 24 + }, +/obj/structure/fluff/walldeco/bath/seven, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/bath/redhouse) +"wIl" = ( +/obj/structure/chair/wood/rogue{ + dir = 8 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"wIH" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"wJc" = ( +/turf/closed/wall/mineral/rogue/wooddark/end{ + dir = 1; + icon_state = "endwooddark" + }, +/area/rogue/indoors/shelter/mountains) +"wJv" = ( +/obj/structure/closet/crate/roguecloset/inn, +/obj/item/clothing/suit/roguetown/armor/leather/jacket/hand, +/turf/open/floor/carpet/royalblack, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"wJw" = ( +/obj/structure/fluff/walldeco/painting/queen{ + pixel_y = 32 + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"wKh" = ( +/obj/item/rogueweapon/polearm/woodstaff/neu, +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"wKF" = ( +/turf/open/floor/rogue/ruinedwood/turned, +/area/rogue/outdoors/rtfield/hamlet) +"wLa" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/reagent_containers/powder/moondust, +/obj/item/reagent_containers/powder/ozium, +/obj/item/reagent_containers/powder/ozium, +/obj/item/reagent_containers/powder/spice, +/obj/effect/decal/shadow_floor, +/obj/machinery/light/rogue/wallfire/candle{ + pixel_y = -30 + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/bath/redhouse) +"wLo" = ( +/obj/structure/bed/rogue/shit, +/obj/item/rogueweapon/knife/stone, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"wLM" = ( +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"wLN" = ( +/obj/effect/decal/cleanable/dirt/cobweb, +/obj/structure/table/wood{ + dir = 10; + icon_state = "tablewood2" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town) +"wMi" = ( +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/indoors/town/cell) +"wMq" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 6 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"wMU" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 5 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"wNi" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass/bush_meagre, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"wNn" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"wNu" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 8; + icon_state = "stonehedge_aged" + }, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"wOd" = ( +/turf/open/floor/rogue/ruinedwood/turned, +/area/rogue/outdoors/rtfield/plague_district) +"wOm" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 2 + }, +/area/rogue/indoors/town/magician) +"wOz" = ( +/obj/item/rope/chain, +/turf/open/floor/rogue/metal/barograte, +/area/rogue/indoors/town/cell) +"wOM" = ( +/obj/structure/stairs{ + dir = 4; + icon_state = "stairs" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/tavern/saiga) +"wOO" = ( +/obj/structure/flora/roguegrass, +/obj/structure/roguerock, +/obj/effect/decal/turfedge_neu/road{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"wOS" = ( +/obj/structure/mineral_door/wood/fancywood{ + locked = 1; + lockid = "vault"; + name = "THE VAULT" + }, +/obj/item/restraints/legcuffs/beartrap/armed, +/turf/open/floor/rogue/tile{ + icon_state = "chess" + }, +/area/rogue/outdoors/exposed/under/basement) +"wPk" = ( +/obj/structure/chair/bench/ultimacouch, +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/bath/redhouse) +"wPy" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"wPK" = ( +/obj/effect/decal/turfedge_neu/road{ + dir = 6 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"wPQ" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"wPT" = ( +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"wQx" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/dwarf) +"wQO" = ( +/obj/item/rogueweapon/shovel/small{ + pixel_x = 5; + pixel_y = 9 + }, +/obj/item/rogueore/coal{ + pixel_y = -8 + }, +/obj/item/rogueore/coal{ + pixel_y = -8 + }, +/obj/item/rogueore/coal, +/obj/item/rogueore/coal{ + pixel_y = -8 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"wRi" = ( +/obj/structure/mineral_door/bars{ + locked = 1; + lockid = "priest"; + name = "confession chamber" + }, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"wRs" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 8; + icon_state = "stonehedge_aged" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"wRz" = ( +/obj/structure/fluff/railing/border, +/obj/structure/stairs/stone{ + dir = 4; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"wRC" = ( +/obj/structure/toilet, +/obj/effect/decal/cleanable/dirt/cobweb{ + icon_state = "cobweb2" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/outdoors/exposed/under/basement) +"wRZ" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "armorsmith"; + name = "blacksmiths quarters" + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"wSj" = ( +/obj/machinery/light/rogue/firebowl/church, +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"wSv" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/obj/structure/flora/rock/pile, +/turf/open/water/swamp, +/area/rogue/outdoors/rtfield/hamlet) +"wSN" = ( +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/outdoors/rtfield/hamlet) +"wSR" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner, +/area/rogue/indoors/town/tavern) +"wSZ" = ( +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/manorgarri) +"wTq" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"wTU" = ( +/obj/structure/table/wood{ + icon_state = "longtable" + }, +/obj/item/paper/scroll, +/obj/effect/decal/turfedge_neu{ + dir = 1 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/outdoors/exposed/under/basement) +"wUd" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 8; + icon_state = "wooddir" + }, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors) +"wUf" = ( +/obj/structure/roguemachine/mail, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town) +"wUk" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop/green{ + dir = 1 + }, +/area/rogue/outdoors/exposed/manorgarri) +"wVh" = ( +/turf/closed/wall/mineral/rogue/roofwall/outercorner{ + dir = 8 + }, +/area/rogue) +"wVy" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/town/tavern/saiga) +"wVF" = ( +/obj/structure/bars/pipe, +/turf/closed/wall/mineral/rogue/decostone/fluffstone/reddish, +/area/rogue/indoors/town/bath/redhouse) +"wVN" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/garrison) +"wWn" = ( +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"wXm" = ( +/obj/structure/flora/rock/pile, +/turf/open/water/river{ + dir = 4 + }, +/area/rogue/outdoors/river) +"wYZ" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/polearm/woodstaff, +/obj/item/rogueweapon/polearm/woodstaff, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"xab" = ( +/obj/structure/table/wood, +/obj/structure/bars/passage/shutter{ + redstone_id = "warehouse_inn01" + }, +/turf/open/floor/rogue/blocks/stonered, +/area/rogue/indoors/town/tavern/saiga) +"xad" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"xaf" = ( +/obj/machinery/light/rogue/hearth, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/soilsons) +"xah" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/obj/effect/decal/turfedge_neu/alt, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"xai" = ( +/obj/structure/stairs{ + dir = 4; + icon_state = "stairs" + }, +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors) +"xaQ" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/under/town/basement) +"xbu" = ( +/obj/structure/bars/pipe{ + dir = 4; + icon_state = "pipe" + }, +/obj/effect/decal/turfedge_neu{ + dir = 10 + }, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"xbB" = ( +/obj/structure/bed/rogue/wool, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/town/garrison) +"xbY" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/signage{ + desc = "You can barely read the name for the mold..."; + name = "STO-EHAM--T" + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"xcb" = ( +/turf/open/transparent/openspace, +/area/rogue/indoors/town/church/chapel) +"xcK" = ( +/obj/structure/fluff/railing/wood, +/turf/open/transparent/openspace, +/area/rogue/indoors/shelter/rtfield) +"xdc" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/structure/bars/passage/shutter{ + redstone_id = "balloon_shutter" + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/shelter/town/roofs) +"xde" = ( +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"xdl" = ( +/obj/item/natural/stone, +/obj/item/grown/log/tree/stick, +/obj/item/grown/log/tree/stick, +/obj/item/reagent_containers/glass/bucket/wooden, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/cell) +"xdp" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/manorgarri) +"xec" = ( +/obj/structure/mineral_door/wood{ + locked = 1; + lockid = "shop" + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"xed" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/shelter/rtfield) +"xet" = ( +/obj/structure/bed/rogue/mediocre{ + name = "pilgrims bedding" + }, +/obj/item/bedsheet/rogue/wool, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"xeL" = ( +/obj/structure/rack/rogue, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/tailor) +"xfl" = ( +/obj/effect/decal/cleanable/dirt/cobweb, +/obj/structure/closet/crate/chest/crate, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/shop) +"xfm" = ( +/obj/structure/mineral_door/wood/donjon/stone{ + locked = 1; + lockid = "makers"; + name = "makers guildhall" + }, +/turf/open/floor/rogue/tile/masonic/spiral, +/area/rogue/indoors/town/dwarfin) +"xfY" = ( +/turf/closed/mineral/rogue, +/area/rogue/under/town/sewer) +"xgl" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 5; + pixel_y = -21 + }, +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/tavern/saiga) +"xgA" = ( +/obj/structure/table/wood/plain, +/obj/item/keyring/guard, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"xgK" = ( +/obj/structure/stairs{ + dir = 8; + icon_state = "stairs" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"xgL" = ( +/obj/structure/bars/pipe, +/turf/open/transparent/openspace, +/area/rogue/outdoors) +"xgZ" = ( +/obj/structure/well{ + icon_state = "well" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/exposed/town/hamlet) +"xhq" = ( +/obj/structure/closet/crate/chest/wicker, +/obj/item/reagent_containers/food/snacks/produce/wheat, +/obj/item/reagent_containers/food/snacks/produce/wheat, +/obj/item/reagent_containers/food/snacks/produce/wheat, +/obj/item/reagent_containers/food/snacks/produce/wheat, +/obj/item/reagent_containers/food/snacks/produce/wheat, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"xhr" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 8 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/exposed/under/basement) +"xhy" = ( +/obj/effect/decal/turfedge_neu/alt_small, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern/saiga) +"xhQ" = ( +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop/green{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"xie" = ( +/obj/structure/flora/ausbushes/ppflowers, +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"xiv" = ( +/obj/structure/roguetent/preopen, +/obj/effect/decal/cleanable/blood_neu/tracks, +/turf/open/floor/rogue/wood/nosmooth, +/area/rogue/indoors/shelter/rtfield) +"xiH" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"xiI" = ( +/obj/structure/table/wood{ + icon_state = "tablewood1" + }, +/obj/item/candle/yellow/lit, +/obj/item/roguekey/blacksmith{ + pixel_x = -9 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/shelter/town/dwarf) +"xiK" = ( +/obj/structure/chair/stool/rogue, +/turf/open/water/bath/pool{ + dir = 5 + }, +/area/rogue/indoors/town/bath/redhouse) +"xiP" = ( +/obj/structure/fluff/statue/gargoyle/candles, +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors/town/roofs) +"xje" = ( +/obj/item/bedsheet/rogue/cloth, +/obj/structure/bed/rogue/inn, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/tavern/saiga) +"xjk" = ( +/obj/structure/fluff/psycross/crafted/shrine/dendor, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town/church/chapel) +"xjP" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"xka" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"xkk" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/indoors/town/magician) +"xkw" = ( +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/tailor) +"xkE" = ( +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"xlq" = ( +/turf/open/floor/rogue/oak/stage{ + icon_state = "stageoak_br" + }, +/area/rogue/outdoors/exposed/town/hamlet) +"xlV" = ( +/obj/structure/rack/rogue, +/obj/item/lockpick, +/obj/item/customlock/finished, +/obj/item/customlock/finished, +/obj/item/customlock/finished, +/obj/item/customblank, +/obj/item/customblank, +/obj/item/customblank, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"xmv" = ( +/obj/structure/flora/roguegrass, +/turf/closed/mineral/rogue, +/area/rogue/outdoors/rtfield/hamlet) +"xmz" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 4; + icon_state = "stonehedge_aged" + }, +/obj/structure/flora/rock/pile, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"xmP" = ( +/turf/closed/wall/mineral/rogue/wooddark, +/area/rogue/outdoors/rtfield/plague_district) +"xnm" = ( +/obj/structure/chair/wood/rogue/chair_noble{ + dir = 1 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"xnA" = ( +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/town/sewer) +"xnP" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1 + }, +/obj/structure/flora/roguegrass, +/obj/structure/fluff/walldeco/customflag{ + pixel_x = -32 + }, +/obj/structure/fluff/walldeco/vinez{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"xoM" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"xoR" = ( +/turf/closed/wall/mineral/rogue/wooddark/window, +/area/rogue/indoors/town) +"xpd" = ( +/obj/structure/roguewindow/stained, +/turf/open/floor/rogue/ruinedwood, +/area/rogue/indoors/town/church) +"xpr" = ( +/obj/structure/flora/roguegrass/bush_meagre, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"xpF" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/clothing/head/roguetown/padded/deathface, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) +"xpT" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"xpU" = ( +/obj/effect/decal/cleanable/blood/gibs/core, +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"xpW" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/suit/roguetown/armor/chainmail/iron, +/obj/item/clothing/suit/roguetown/armor/chainmail/iron, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"xqf" = ( +/obj/structure/bars/pipe{ + dir = 6; + icon_state = "pipe" + }, +/obj/structure/bars/pipe{ + dir = 5; + icon_state = "pipe" + }, +/obj/structure/fluff/walldeco/vinez/l, +/turf/open/water/sewer, +/area/rogue/outdoors/exposed/under/sewer) +"xqm" = ( +/obj/structure/mineral_door/wood/deadbolt{ + dir = 8; + locked = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"xqH" = ( +/turf/open/floor/rogue/woodturned/saiga, +/area/rogue/indoors/town/garrison) +"xqZ" = ( +/obj/structure/flora/roguetree, +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/river) +"xrv" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop{ + dir = 1 + }, +/area/rogue/outdoors/exposed/manorgarri) +"xsw" = ( +/obj/structure/bars/grille, +/turf/open/transparent/openspace, +/area/rogue/outdoors/rtfield/hamlet) +"xsB" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet/unsafe) +"xtl" = ( +/turf/open/transparent/openspace, +/area/rogue/indoors/town/bath/redhouse) +"xtI" = ( +/obj/structure/ladder, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors) +"xtX" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/water/river{ + dir = 4 + }, +/area/rogue/outdoors/river) +"xtZ" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1; + icon_state = "stonehedge_aged" + }, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"xub" = ( +/obj/effect/decal/remains/human/old, +/obj/effect/decal/miasma, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/plague_district) +"xud" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road, +/obj/effect/decal/turfedge_neu/road{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"xuD" = ( +/obj/structure/mineral_door/wood{ + icon_state = "wcv"; + locked = 1; + lockid = "merchant"; + name = "merchants room" + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/shop) +"xuL" = ( +/obj/structure/roguewindow/openclose{ + dir = 4 + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "horzw" + }, +/area/rogue/indoors) +"xuV" = ( +/obj/structure/chair/wood/rogue{ + dir = 8 + }, +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"xvb" = ( +/turf/closed/wall/mineral/rogue/stonebrick, +/area/rogue/indoors/shelter/town/dwarf) +"xvf" = ( +/turf/closed/wall/mineral/rogue/stonebrick, +/area/rogue/indoors/town/bath/redhouse) +"xvp" = ( +/obj/structure/table/wood/large/corner_new{ + dir = 10 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/garrison) +"xvr" = ( +/obj/structure/fluff/walldeco/stone, +/turf/closed/wall/mineral/rogue/stone/window/moss, +/area/rogue/indoors/town/magician) +"xvu" = ( +/obj/structure/spider/eggcluster, +/obj/structure/flora/roguegrass/water/reeds, +/turf/open/water/swamp/deep, +/area/rogue/under/catacombs/dwarfoutpost) +"xvB" = ( +/obj/structure/fluff/walldeco/wallshield{ + pixel_y = 32 + }, +/obj/structure/rack/rogue, +/obj/item/perfume/random, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/vault) +"xvK" = ( +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/garrison) +"xvR" = ( +/obj/structure/table/wood{ + dir = 6; + icon_state = "largetable" + }, +/turf/open/floor/rogue/tile/tilerg, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"xwf" = ( +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/mountains) +"xwl" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 6 + }, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/indoors/town/tavern/saiga) +"xwo" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/rooftop{ + dir = 1 + }, +/area/rogue/outdoors/town/roofs) +"xxz" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/outdoors/mountains) +"xxR" = ( +/obj/structure/ladder, +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"xxU" = ( +/obj/structure/stairs{ + dir = 4; + icon_state = "stairs" + }, +/turf/open/floor/rogue/woodturned, +/area/rogue/outdoors/exposed/town/hamlet) +"xya" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"xyA" = ( +/obj/structure/table/wood{ + dir = 10; + icon_state = "tablewood2" + }, +/obj/item/candle/yellow/lit, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"xyF" = ( +/obj/structure/closet/crate/chest/neu, +/turf/open/floor/rogue/carpet, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"xyW" = ( +/obj/machinery/light/rogue/wallfire/candle/r, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/church) +"xyY" = ( +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/rtfield/hamlet) +"xzq" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguetree/burnt, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"xzv" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"xzx" = ( +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/plague_district) +"xzE" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"xzF" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop/green{ + dir = 8 + }, +/area/rogue/outdoors/exposed/manorgarri) +"xzJ" = ( +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"xzR" = ( +/obj/structure/bars/pipe, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/dwarfin) +"xAF" = ( +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"xBl" = ( +/turf/closed/wall/mineral/rogue/wooddark/horizontal, +/area/rogue/under/town/basement) +"xBQ" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"xBT" = ( +/obj/item/reagent_containers/food/snacks/crow, +/obj/effect/sunlight, +/turf/open/floor/rogue/rooftop{ + dir = 4 + }, +/area/rogue/outdoors/town/roofs) +"xCr" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/rock/pile, +/obj/effect/decal/turfedge_neu/road{ + dir = 8 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"xCN" = ( +/obj/effect/sunlight, +/turf/open/floor/rogue/rooftop{ + dir = 1 + }, +/area/rogue/outdoors/town/roofs) +"xDk" = ( +/obj/structure/mineral_door/wood/window{ + locked = 1; + lockid = "lord"; + name = "lords chamber" + }, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"xDL" = ( +/turf/open/transparent/openspace, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"xEd" = ( +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/outdoors/exposed/town/hamlet) +"xEi" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"xEJ" = ( +/obj/structure/chair/bench/ancientlog, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"xEM" = ( +/turf/closed/wall/mineral/rogue/decostone/fluffstone/reddish, +/area/rogue/indoors/town/bath/redhouse) +"xFM" = ( +/obj/structure/bars/cemetery, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"xGc" = ( +/obj/structure/mineral_door/wood/donjon{ + locked = 1; + lockid = "steward"; + name = "bank" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town) +"xGj" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/blocks/stonered/tiny, +/area/rogue/indoors/town/bath/redhouse) +"xGB" = ( +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/manorgarri) +"xGE" = ( +/obj/machinery/light/rogue/wallfire/candle/blue/l, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/magician) +"xGO" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 + }, +/obj/effect/decal/turfedge_neu/rockalt_edge{ + dir = 4 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"xHe" = ( +/obj/structure/stairs/stone, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"xHy" = ( +/obj/item/reagent_containers/glass/cup/wooden, +/obj/structure/table/wood{ + dir = 1; + icon_state = "longtable_mid" + }, +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/tavern/saiga) +"xHC" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town) +"xHE" = ( +/obj/structure/fluff/railing/border{ + dir = 5; + icon_state = "border" + }, +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"xHF" = ( +/obj/machinery/light/rogue/torchholder/cold, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/mountains) +"xHI" = ( +/obj/structure/chair/wood/rogue/chair_noble, +/obj/effect/landmark/start/hand, +/obj/structure/roguemachine/camera/left, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"xIG" = ( +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/cave/abandoned_mine) +"xIT" = ( +/obj/structure/fluff/clock, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/town/basement) +"xIU" = ( +/obj/structure/roguemachine/scomm{ + pixel_y = -32 + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/tavern/saiga) +"xJw" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"xJG" = ( +/obj/effect/decal/turfedge_neu/alt, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/outdoors/exposed/manorgarri) +"xKf" = ( +/turf/open/water/cleanshallow, +/area/rogue/under/cave{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); + first_time_text = "CATACOMBS" + }) +"xKg" = ( +/obj/structure/bars/cemetery, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"xKP" = ( +/obj/structure/rack/rogue/shelf/notdense{ + pixel_x = 32; + pixel_y = 0 + }, +/turf/closed/wall/mineral/rogue/decostone/cand, +/area/rogue/indoors/town/tavern/saiga) +"xKY" = ( +/obj/machinery/light/rogue/wallfire/candle/weak, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/bath/redhouse) +"xLa" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/obj/effect/decal/turfedge_neu/road{ + dir = 4 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"xLq" = ( +/obj/structure/roguemachine/scomm/r, +/obj/structure/lever/wall{ + dir = 4; + redstone_id = "stewardshutter" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town) +"xLA" = ( +/obj/effect/landmark/start/gravedigger{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"xLR" = ( +/obj/effect/decal/turfedge_neu/mossy{ + dir = 10 + }, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/outdoors/exposed/under/basement) +"xLU" = ( +/turf/open/floor/rogue/rooftop/green{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"xMu" = ( +/obj/structure/fluff/railing/border{ + dir = 4; + icon_state = "border" + }, +/turf/open/water/swamp, +/area/rogue/outdoors/rtfield/hamlet) +"xMw" = ( +/turf/closed/wall/mineral/rogue/stonebrick/reddish, +/area/rogue/indoors/town/bath/redhouse) +"xMA" = ( +/obj/structure/fluff/traveltile{ + aportalgoesto = "forestdecapout"; + aportalid = "forestdecapin" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/outdoors/mountains) +"xNU" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 8; + icon_state = "stonehedge_aged" + }, +/obj/structure/flora/rock/pile, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"xOf" = ( +/obj/structure/chair/wood/rogue, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town) +"xOi" = ( +/obj/structure/table/wood{ + icon_state = "map1" + }, +/turf/open/floor/rogue/carpet/lord/center, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"xOs" = ( +/obj/structure/mineral_door/wood/donjon{ + dir = 4; + locked = 1; + lockid = "dungeon" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/cell) +"xOS" = ( +/obj/structure/bars, +/turf/closed/mineral/rogue, +/area/rogue/under/cave) +"xPp" = ( +/obj/machinery/light/rogue/firebowl/standing, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"xPs" = ( +/obj/structure/closet/crate/roguecloset/dark, +/obj/item/clothing/cloak/half/red, +/obj/item/clothing/mask/cigarette/rollie/nicotine, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/indoors/town/garrison) +"xPy" = ( +/obj/structure/fluff/railing/border{ + dir = 1; + icon_state = "border" + }, +/turf/open/floor/rogue/oak, +/area/rogue/indoors) +"xPz" = ( +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"xPD" = ( +/obj/structure/bars/pipe{ + dir = 6; + icon_state = "pipe" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town) +"xPH" = ( +/turf/open/floor/carpet/inn, +/area/rogue/indoors/town/bath/redhouse) +"xPW" = ( +/obj/structure/bookcase, +/obj/item/book/rogue/cardgame, +/obj/item/book/rogue/magicaltheory, +/obj/item/book/rogue/tales1, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/magician) +"xQc" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguetree/burnt, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"xQe" = ( +/obj/structure/fluff/railing/border, +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town) +"xQi" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle{ + dir = 1 + }, +/area/rogue/indoors/town/church/chapel) +"xQp" = ( +/obj/structure/table/wood{ + icon_state = "tablewood1" + }, +/obj/item/clothing/mask/cigarette/pipe, +/obj/effect/decal/turfedge_neu/alt{ + dir = 8 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/town/hamlet) +"xQC" = ( +/obj/structure/rack/rogue, +/obj/item/ingot/gold, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/indoors/town/vault) +"xQF" = ( +/obj/structure/flora/roguegrass, +/obj/machinery/light/rogue/lanternpost/fixed{ + dir = 1 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"xRk" = ( +/obj/structure/stairs{ + dir = 4; + icon_state = "stairs" + }, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/garrison) +"xRl" = ( +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 8 + }, +/obj/effect/decal/turfedge_neu/mossy_small{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/exposed/manorgarri) +"xRo" = ( +/obj/structure/roguemachine/balloon_pad, +/obj/item/reagent_containers/food/snacks/crow{ + dir = 1; + icon_state = "crow" + }, +/turf/open/floor/rogue/tile/kitchen, +/area/rogue/outdoors/town/roofs) +"xRs" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/dwarfin) +"xRz" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/town/basement) +"xSd" = ( +/turf/closed/wall/mineral/rogue/craftstone, +/area/rogue/outdoors/exposed/under/basement) +"xTr" = ( +/turf/open/transparent/openspace, +/area/rogue/indoors/town/tavern) +"xTB" = ( +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"xTE" = ( +/obj/structure/flora/roguegrass, +/obj/effect/decal/turfedge_neu/road{ + dir = 5 + }, +/obj/effect/decal/turfedge_neu/road{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"xTH" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/blocks, +/area/rogue/indoors/town/cell) +"xTS" = ( +/obj/structure/bookcase/random/archive, +/obj/item/book/rogue/nitebeast, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/town/basement) +"xUr" = ( +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town) +"xUz" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/walldeco/vinez/r, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"xVh" = ( +/obj/structure/stairs/stone{ + dir = 8; + icon_state = "stonestairs" + }, +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/cobble, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"xWa" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/tile/bath, +/area/rogue/indoors/town/bath/redhouse) +"xWm" = ( +/obj/structure/fluff/railing/border{ + dir = 10; + icon_state = "border" + }, +/turf/open/floor/rogue/rooftop/green{ + dir = 8 + }, +/area/rogue/outdoors/town/roofs) +"xWC" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/plague_district) +"xWJ" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/suit/roguetown/armor/gambeson/heavy, +/obj/item/clothing/neck/roguetown/coif/cloth, +/turf/open/floor/rogue/wood/saiga, +/area/rogue/indoors/town/garrison) +"xXh" = ( +/obj/structure/fluff/railing/stonehedge{ + dir = 1; + icon_state = "stonehedge_aged" + }, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"xXp" = ( +/turf/closed/wall/mineral/rogue/roofwall/middle, +/area/rogue/indoors/town/tavern) +"xXs" = ( +/obj/structure/flora/roguegrass, +/obj/structure/fluff/railing/wood{ + dir = 4; + icon_state = "woodrailing" + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield{ + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) + }) +"xXE" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/splatter, +/obj/item/restraints/legcuffs/beartrap/armed/camouflage, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"xYx" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/landmark/start/nightmaiden{ + dir = 8 + }, +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/ruinedwood/chevron, +/area/rogue/indoors/town/bath/redhouse) +"xYD" = ( +/turf/open/transparent/openspace, +/area/rogue/under/town/basement) +"xYN" = ( +/obj/machinery/light/rogue/firebowl/church, +/turf/open/floor/rogue/sandstone/shaded, +/area/rogue/indoors/town/church/chapel) +"xYU" = ( +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/grass/peril, +/area/rogue/outdoors/rtfield/hamlet) +"xZX" = ( +/obj/structure/mineral_door/wood{ + lockid = "doctor" + }, +/turf/open/floor/rogue/tile{ + icon_state = "greenstone" + }, +/area/rogue/under/town/basement) +"yai" = ( +/obj/structure/mineral_door/wood/donjon/stone{ + locked = 1; + lockid = "manor"; + name = "manor" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"yak" = ( +/turf/open/floor/rogue/twig, +/area/rogue/outdoors/mountains) +"yaI" = ( +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/mountains) +"ybe" = ( +/obj/structure/closet/dirthole/closed/loot, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/spooky) +"ybg" = ( +/obj/machinery/light/rogue/torchholder/l, +/turf/open/floor/rogue/wood/nosmooth/saiga, +/area/rogue/outdoors/exposed/manorgarri) +"ybs" = ( +/obj/structure/fermenting_barrel/random/water, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"ybx" = ( +/obj/structure/fluff/railing/wood, +/turf/open/floor/rogue/ruinedwood/spiral, +/area/rogue/outdoors/exposed/church) +"ybA" = ( +/obj/structure/roguetent/preopen, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/shelter/mountains) +"ybJ" = ( +/turf/open/floor/rogue/blocks/stonered, +/area/rogue/indoors/town/bath/redhouse) +"yci" = ( +/obj/structure/flora/roguegrass, +/turf/open/water/sewer, +/area/rogue/under/town/sewer) +"ycC" = ( +/obj/structure/fluff/railing/border, +/turf/open/floor/rogue/tile/masonic/inverted, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"ycJ" = ( +/turf/closed/wall/mineral/rogue/wooddark/end, +/area/rogue/indoors) +"ydq" = ( +/obj/item/chair/rogue, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/town/basement) +"yds" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 8; + icon_state = "torchwall1" + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/under/town/basement) +"ydz" = ( +/turf/open/transparent/openspace, +/area/rogue/outdoors/exposed/dwarf) +"ydC" = ( +/turf/open/floor/rogue/cobblerock, +/area/rogue/outdoors/rtfield/spooky) +"ydO" = ( +/turf/open/floor/rogue/rooftop/green, +/area/rogue/outdoors/town/roofs) +"yee" = ( +/obj/structure/stairs/stone, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/town/basement) +"yex" = ( +/obj/structure/toilet, +/obj/machinery/light/rogue/wallfire/candle, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"yeS" = ( +/obj/structure/stairs{ + dir = 4; + icon_state = "stairs" + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/indoors/town/shop) +"yfc" = ( +/obj/effect/decal/turfedge_neu{ + dir = 9 + }, +/obj/structure/fluff/walldeco/bath/wallrope{ + pixel_y = -32 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/exposed/town/hamlet) +"yft" = ( +/turf/closed/mineral/rogue/bedrock, +/area/rogue/outdoors) +"yfM" = ( +/obj/structure/roguewindow/openclose{ + dir = 8 + }, +/turf/open/floor/rogue/ruinedwood{ + icon_state = "horzw" + }, +/area/rogue/indoors) +"yfZ" = ( +/obj/structure/stairs{ + dir = 1; + icon_state = "stairs" + }, +/turf/open/transparent/openspace, +/area/rogue/indoors/town/shop) +"ygq" = ( +/turf/closed/mineral/rogue/bedrock, +/area/rogue/outdoors/exposed/under/basement) +"ygv" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 10 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/town/cell) +"ygx" = ( +/obj/effect/decal/turfedge_neu/rockalt_corners, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"ygV" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 9 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/exposed/town/hamlet) +"yhh" = ( +/obj/item/reagent_containers/powder/flour, +/obj/structure/closet/crate/chest/old_crate, +/obj/item/reagent_containers/powder/flour, +/obj/item/reagent_containers/powder/flour, +/obj/item/reagent_containers/powder/flour, +/turf/open/floor/rogue/blocks, +/area/rogue/under/town/basement) +"yhx" = ( +/obj/machinery/light/rogue/torchholder{ + dir = 4; + icon_state = "torchwall1" + }, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/dwarfin) +"yhE" = ( +/obj/effect/decal/remains/human/old, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors) +"yin" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/town) +"yiq" = ( +/obj/effect/decal/turfedge_neu/alt{ + dir = 5 + }, +/obj/structure/fluff/wallclock{ + pixel_y = -32 + }, +/turf/open/floor/rogue/cobble/mossy/alt, +/area/rogue/indoors/town/tavern/saiga) +"yir" = ( +/obj/effect/sunlight, +/turf/open/floor/rogue/rooftop, +/area/rogue/outdoors) +"yiC" = ( +/turf/open/floor/rogue/ruinedwood/spiralfade, +/area/rogue/indoors/town/manor{ + first_time_text = "STONEHILL CASTLE" + }) +"yjL" = ( +/turf/open/transparent/openspace, +/area/rogue/outdoors/rtfield/hamlet) +"yjO" = ( +/obj/item/chair/stool/bar/rogue/crafted, +/turf/open/floor/rogue/twig, +/area/rogue/indoors/shelter/bog) +"yky" = ( +/obj/structure/table/wood/large/corner_new{ + dir = 6 + }, +/obj/item/reagent_containers/glass/cup/wooden, +/turf/open/floor/rogue/cobble/alt, +/area/rogue/indoors/town/garrison) +"ylF" = ( +/obj/structure/fluff/railing/border{ + dir = 6; + icon_state = "border" + }, +/obj/structure/fluff/railing/border{ + dir = 8; + icon_state = "border" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors) + +(1,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(2,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(3,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(4,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(5,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(6,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(7,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(8,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(9,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jXR +jXR +jXR +jXR +cZs +psp +psp +psp +psp +psp +psp +psp +"} +(10,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cZs +jXR +jXR +jXR +cZs +psp +psp +psp +psp +psp +psp +psp +"} +(11,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jXR +jXR +cZs +cZs +cZs +cZs +cZs +cZs +jXR +psp +psp +psp +psp +psp +psp +cZs +jXR +cZs +jXR +cZs +psp +psp +psp +psp +psp +psp +psp +"} +(12,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +psp +psp +psp +jXR +cZs +hsL +cZs +jXR +jXR +cZs +hsL +cZs +jXR +jXR +jXR +jXR +jXR +cZs +hsL +cZs +cZs +cZs +hsL +psp +psp +psp +psp +psp +psp +psp +"} +(13,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +psp +psp +psp +cZs +cZs +cZs +jXR +jXR +jXR +jXR +cZs +hsL +cZs +jXR +jXR +jXR +jXR +cZs +cZs +cZs +jXR +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(14,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +psp +psp +psp +cZs +hsL +cZs +jXR +jXR +jXR +jXR +cZs +cZs +cZs +cZs +jXR +jXR +jXR +cZs +cZs +jXR +jXR +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(15,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +psp +psp +dLn +psp +psp +psp +cZs +cZs +cZs +cZs +jXR +jXR +cZs +cZs +hsL +cZs +cZs +hsL +cZs +cZs +cZs +cZs +cZs +jXR +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(16,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +dLn +psp +psp +psp +dLn +psp +psp +dLn +psp +psp +psp +jXR +cZs +cZs +cZs +cZs +cZs +cZs +cZs +cZs +cZs +hsL +cZs +cZs +cZs +cZs +cZs +cZs +cZs +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(17,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +dLn +dLn +psp +psp +psp +dLn +psp +psp +uqi +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cZs +cZs +cZs +cZs +cZs +cZs +hsL +tiv +hsL +cZs +cZs +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(18,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +dLn +dLn +dLn +uNR +psp +psp +dLn +uNR +psp +czh +uNR +psp +psp +uNR +psp +psp +uNR +psp +psp +psp +psp +psp +cZs +cZs +cZs +hsL +cZs +cZs +cZs +cZs +cZs +cZs +cZs +psp +psp +psp +psp +psp +psp +psp +"} +(19,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +dLn +uqi +czh +uqi +pfH +xIG +pfH +czh +aRU +czh +czh +uqi +qrD +qrD +uqi +uqi +uqi +uqi +dLn +dLn +dLn +psp +hsL +cZs +cZs +cZs +cZs +hsL +cZs +cZs +jXR +jXR +cZs +psp +psp +psp +psp +psp +psp +psp +"} +(20,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +dLn +aRU +czh +psp +psp +uNR +pfH +uNR +pfH +uqi +uNR +psp +uqi +uNR +bwx +psp +uNR +psp +psp +psp +psp +psp +cZs +cZs +jXR +jXR +cZs +cZs +hsL +jXR +jXR +jXR +cZs +psp +psp +psp +psp +psp +psp +psp +"} +(21,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uNR +pfH +uNR +psp +psp +dLn +psp +pfH +pfH +psp +psp +czh +psp +czh +psp +psp +psp +psp +psp +psp +psp +cZs +jXR +jXR +jXR +jXR +cZs +cZs +jXR +jXR +jXR +hsL +psp +psp +psp +psp +psp +psp +psp +"} +(22,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pfH +pfH +dLn +dLn +dLn +dLn +pfH +czh +psp +psp +uqi +psp +dLn +psp +psp +psp +psp +psp +psp +psp +cZs +jXR +jXR +jXR +jXR +cZs +cZs +cZs +jXR +jXR +cZs +psp +psp +psp +psp +psp +psp +psp +"} +(23,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pfH +uNR +psp +psp +psp +uNR +pfH +uqi +uNR +uNR +tSa +mKj +dLn +dLn +dLn +psp +psp +psp +psp +psp +cZs +cZs +jXR +jXR +sNy +cZs +sNy +cZs +cZs +cZs +cZs +psp +psp +psp +psp +psp +psp +psp +"} +(24,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cgm +xKf +cgm +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +czh +psp +psp +psp +psp +psp +tMe +uqi +dLn +dLn +czh +psp +dLn +psp +psp +psp +psp +psp +jXR +cZs +sNy +cZs +sNy +cZs +sNy +cZs +sNy +hsL +cZs +cZs +hsL +psp +psp +psp +psp +psp +psp +psp +"} +(25,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +xKf +lKn +xKf +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uNR +uqi +psp +psp +psp +psp +psp +czh +uqi +psp +psp +dLn +psp +dLn +psp +psp +psp +psp +psp +jXR +cZs +sNy +cZs +sNy +cZs +sNy +hsL +cZs +cZs +cZs +cZs +cZs +psp +psp +psp +psp +psp +psp +psp +"} +(26,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +xKf +xKf +xKf +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +dLn +dLn +dLn +uqi +uNR +psp +psp +psp +psp +uqi +uqi +psp +psp +dLn +dLn +dLn +dLn +dLn +psp +psp +psp +jXR +cZs +sNy +cZs +sNy +mKj +wFa +sRI +mKj +cZs +sNy +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(27,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +rDB +dsq +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uNR +uqi +czh +uNR +psp +psp +uNR +aRU +uqi +uNR +psp +dLn +psp +psp +psp +psp +psp +psp +psp +jXR +hsL +sNy +cZs +cZs +cZs +aat +aat +nRU +cZs +cZs +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(28,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dsq +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pfH +aRU +uqi +uqi +pfH +uqi +uqi +pfH +psp +psp +dLn +psp +psp +psp +psp +psp +psp +psp +cZs +cZs +sNy +hsL +sNy +dzZ +aat +aat +sRI +cZs +cZs +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(29,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dsq +dsq +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +dLn +dLn +uqi +uqi +uqi +uqi +pfH +uqi +uqi +czh +psp +psp +dLn +dLn +oKg +czh +uoh +psp +jXR +jXR +cZs +cZs +sNy +cZs +hsL +mKj +gkz +hDZ +mKj +cZs +sNy +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(30,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pjj +pjj +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uNR +psp +uNR +psp +psp +psp +uNR +otv +uqi +uNR +psp +psp +dLn +czh +pfH +pfH +psp +jXR +cZs +hsL +cZs +sNy +cZs +sNy +cZs +sNy +cZs +sNy +cZs +cZs +hsL +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(31,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pjj +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uqi +uqi +dLn +dLn +dLn +dLn +dLn +dLn +dLn +psp +jXR +jXR +cZs +cZs +cZs +cZs +sNy +cZs +hsL +cZs +sNy +cZs +cZs +cZs +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(32,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pjj +pjj +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uqi +czh +psp +psp +psp +dLn +psp +psp +psp +psp +cZs +cZs +cZs +hsL +cZs +cZs +hsL +cZs +sNy +cZs +sNy +cZs +cZs +cZs +cZs +psp +psp +psp +psp +psp +psp +psp +"} +(33,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pjj +pjj +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +czh +pfH +uNR +psp +psp +czh +psp +psp +psp +psp +psp +jXR +cZs +cZs +cZs +cZs +cZs +cZs +cZs +cZs +cZs +cZs +hsL +cZs +cZs +psp +psp +psp +psp +psp +psp +psp +"} +(34,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pjj +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uNR +pfH +tMe +czh +psp +psp +czh +uNR +psp +psp +uNR +psp +cZs +cZs +cZs +cZs +jXR +jXR +cZs +hsL +cZs +hsL +tiv +cZs +cZs +cZs +psp +psp +psp +psp +psp +psp +psp +"} +(35,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pjj +pjj +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +dLn +dLn +dLn +dLn +dLn +dLn +dLn +pfH +pfH +tSa +uqi +czh +pfH +uqi +pfH +czh +pfH +pfH +psp +psp +psp +jXR +cZs +jXR +jXR +jXR +jXR +cZs +cZs +cZs +cZs +cZs +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(36,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pjj +pjj +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +dex +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +dex +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +dLn +dLn +dLn +dLn +dLn +dLn +dLn +dLn +uqi +czh +czh +uqi +uqi +uqi +pfH +czh +tMe +aRU +pfH +czh +pfH +uNR +psp +cZs +cZs +jXR +jXR +jXR +jXR +jXR +cZs +cZs +jXR +hsL +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(37,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pjj +pjj +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +psp +psp +psp +psp +psp +qLT +lpI +qLT +psp +psp +psp +psp +psp +psp +psp +lHL +psp +psp +psp +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +dLn +dLn +dLn +dLn +dLn +dLn +dLn +dLn +uqi +uqi +uqi +aRU +uqi +tMe +uqi +uqi +czh +raH +czh +pfH +vWy +psp +psp +jXR +hsL +jXR +jXR +psp +psp +psp +psp +psp +psp +cZs +psp +psp +psp +psp +psp +psp +psp +psp +"} +(38,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pjj +pjj +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +dex +ijK +psp +psp +qLT +qLT +qLT +qLT +szk +qLT +psp +lOZ +lOZ +lOZ +lOZ +lOZ +lOZ +mhm +ogx +lOZ +mzh +ijK +ijK +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uNR +tMe +czh +vWy +uNR +psp +psp +uNR +psp +tMe +czh +pfH +psp +psp +cZs +cZs +cZs +cZs +psp +uNR +uNR +uNR +psp +psp +cZs +psp +psp +psp +psp +psp +psp +psp +psp +"} +(39,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pjj +pjj +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +psp +psp +qLT +xnA +mgt +qLT +oVv +qLT +psp +lOZ +ipX +uAe +gFI +jek +scj +mhm +peW +wsn +lOZ +mzh +ijK +ijK +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pfH +pfH +uNR +psp +psp +psp +psp +psp +uNR +uqi +pfH +psp +psp +jXR +cZs +jXR +cZs +psp +uNR +nQu +uNR +psp +psp +cZs +psp +psp +psp +psp +psp +psp +psp +psp +"} +(40,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pjj +pjj +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +psp +psp +psp +qLT +xnA +xnA +qLT +ksr +qLT +psp +hCF +qWm +uoO +xAF +jLa +onR +nSF +xAF +xAF +oTq +lOZ +lOZ +mzh +mzh +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pfH +czh +psp +psp +psp +psp +psp +psp +psp +uqi +czh +psp +psp +psp +psp +psp +psp +psp +uqi +qrD +uqi +psp +psp +cZs +psp +psp +psp +psp +psp +psp +psp +psp +"} +(41,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pjj +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +qLT +qLT +qLT +qLT +qLT +qLT +qLT +qLT +qLT +qLT +ahA +qLT +qLT +oGq +qLT +psp +lOZ +oHq +xRs +xAF +jLa +ioS +xAF +xAF +xAF +oWJ +oXJ +oXJ +oXJ +lOZ +mzh +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uNR +czh +tMe +uNR +psp +psp +psp +psp +psp +psp +uqi +uqi +uNR +psp +psp +psp +uNR +psp +uNR +czh +qrD +uqi +psp +psp +cZs +psp +psp +psp +psp +psp +psp +psp +psp +"} +(42,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pjj +pjj +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +ijK +ijK +ijK +ijK +qLT +xnA +wgc +xnA +xnA +xnA +xnA +xnA +xnA +xnA +xnA +qLT +qLT +nlJ +qLT +psp +gnE +uQB +uoO +xAF +oXJ +oXJ +oXJ +oXJ +oXJ +oXJ +oXJ +oXJ +wIH +lOZ +mzh +ijK +ijK +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +dLn +dLn +pfH +uqi +czh +uqi +psp +psp +psp +psp +psp +psp +psp +uqi +uqi +uqi +uqi +czh +pfH +uqi +pfH +qgt +wBu +hdv +uqi +uNR +psp +hsL +psp +psp +psp +psp +psp +psp +psp +psp +"} +(43,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pjj +pjj +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +dex +ijK +ijK +ijK +ijK +ijK +psp +qLT +rGL +aei +wlB +wlB +wlB +wlB +wlB +wlB +wlB +xnA +qLT +qLT +uFI +qLT +psp +lOZ +pTJ +lOm +ikE +cmZ +kuQ +oXJ +oXJ +oXJ +oXJ +oXJ +ioS +fLn +lOZ +psp +ijK +ijK +ijK +ijK +dex +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +psp +psp +psp +uNR +czh +czh +psp +psp +psp +psp +psp +psp +psp +uqi +uqi +uqi +czh +tSa +pfH +czh +pfH +czh +tMe +uqi +czh +psp +psp +cZs +psp +psp +psp +psp +psp +psp +psp +psp +"} +(44,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pjj +pjj +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +psp +psp +psp +psp +psp +psp +qLT +xnA +wlB +feV +feV +feV +mbn +mbn +feV +orW +jZF +kQy +hWR +dbV +qLT +qLT +lOZ +lOZ +lOZ +mzh +mzh +lOZ +uCR +mzh +lOZ +lOZ +iap +lOZ +lOZ +lOZ +psp +psp +psp +psp +psp +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +psp +dLn +psp +psp +psp +psp +uqi +pfH +uNR +psp +psp +psp +psp +psp +psp +czh +uqi +vWy +tMe +pfH +cuW +tMe +pfH +pfH +qgt +czh +uqi +psp +psp +cZs +psp +psp +psp +psp +psp +psp +psp +psp +"} +(45,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pjj +pjj +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +dex +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +psp +psp +psp +psp +psp +psp +qLT +xnA +wlB +feV +aCn +afZ +dvp +dEv +feV +pNm +afT +wlB +wlB +wlB +wlB +wlB +xnA +qLT +ptt +veA +rJP +lcQ +rJP +hSf +lOZ +xAF +xAF +xAF +rFa +lOZ +hsL +hsL +hsL +hsL +psp +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +psp +dLn +psp +psp +psp +psp +pfH +czh +uqi +uNR +psp +psp +psp +psp +uNR +pfH +czh +uNR +psp +psp +psp +uNR +dLn +psp +psp +uqi +czh +psp +psp +cZs +psp +psp +psp +psp +psp +psp +psp +psp +"} +(46,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pjj +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +psp +psp +psp +psp +psp +psp +qLT +xnA +wlB +feV +bsU +wvB +wvB +wvB +mbn +bwi +feV +mbn +feV +mbn +feV +wlB +xnA +fyR +ptt +wQx +rJP +rJP +rJP +ahR +frf +gPa +xAF +xAF +sNz +lOZ +hsL +psp +psp +hsL +psp +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +psp +dLn +psp +psp +psp +psp +tMe +pfH +czh +pfH +tMe +uqi +uqi +pfH +pfH +czh +uqi +psp +psp +psp +psp +psp +dLn +psp +psp +qrD +czh +psp +psp +cZs +psp +psp +psp +psp +psp +psp +psp +psp +"} +(47,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +tvZ +lEA +tvZ +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +dex +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +qLT +xnA +wlB +mbn +caY +wvB +wvB +wvB +mbn +gJg +sue +sue +sue +jgk +feV +wEW +lOZ +lOZ +lOZ +lOZ +lOZ +mzh +rJP +rJP +iGb +xRs +xAF +xAF +tjp +lOZ +hsL +hsL +psp +hsL +psp +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +dLn +dLn +psp +psp +psp +uNR +uqi +pfH +aRU +uqi +pfH +uqi +czh +pch +pfH +aRU +uqi +uNR +psp +psp +psp +psp +dLn +psp +uNR +tWf +czh +uNR +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(48,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +psp +gtw +tvZ +gtw +tvZ +gtw +gtw +tvZ +ijK +tvZ +gtw +tvZ +tvZ +tvZ +tvZ +gtw +gtw +tvZ +tvZ +tvZ +psp +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +qLT +rGL +qTv +mbn +cKT +wvB +wvB +dfC +jTS +sue +mbn +bQG +ioD +jgk +feV +wlB +lOZ +whL +peW +wsn +nSF +lOZ +tYR +rJP +iGb +xAF +xAF +xAF +mWS +lOZ +psp +hsL +psp +hsL +hsL +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +psp +psp +psp +psp +psp +psp +psp +pfH +uqi +uqi +pfH +uqi +pfH +pfH +czh +czh +czh +psp +psp +psp +psp +psp +dLn +psp +psp +pfH +pfH +pfH +dLn +dLn +dLn +dLn +dLn +dLn +dLn +psp +psp +psp +"} +(49,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +psp +gtw +tvZ +gtw +tvZ +gtw +gtw +tvZ +tMr +gtw +fws +wdf +ukE +fws +wdf +kqz +pCE +gKG +gKG +gtw +tvZ +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +qLT +xnA +wlB +feV +feV +feV +mbn +epZ +mbn +sue +sue +sue +sue +jgk +feV +wlB +lOZ +wQO +xAF +xAF +xAF +qVi +rJP +rJP +mzh +oYY +tbB +xAF +xlV +lOZ +psp +hsL +psp +psp +psp +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +psp +psp +psp +psp +psp +psp +psp +uNR +uqi +uNR +psp +psp +psp +psp +uNR +czh +czh +psp +psp +psp +psp +psp +dLn +psp +psp +czh +czh +dLn +dLn +dLn +dLn +dLn +dLn +dLn +dLn +dLn +dLn +psp +"} +(50,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +psp +gtw +fws +ezU +gtw +gtw +tvZ +gtw +tvZ +gtw +wdf +xSd +xSd +xSd +xSd +gtw +qVm +oEf +gKG +sVC +gtw +tvZ +tvZ +gtw +tvZ +gtw +gtw +tvZ +hsL +hsL +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +qLT +xnA +wlB +ajU +eXr +gGC +feV +mbn +mbn +bIi +mbn +sSX +mbn +mbn +feV +orW +lOZ +xAF +lOZ +sdn +xAF +lOZ +kLR +nCD +nzX +lOZ +iap +lOZ +lOZ +lOZ +psp +hsL +hsL +hsL +psp +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +psp +psp +psp +psp +psp +psp +psp +psp +dLn +psp +psp +psp +psp +psp +psp +uqi +tMe +uNR +psp +psp +psp +psp +dLn +psp +uNR +czh +czh +pfH +dLn +dLn +dLn +dLn +dLn +dLn +dLn +dLn +psp +psp +"} +(51,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +psp +tvZ +ley +wdf +wdf +kqz +nSS +ihA +ezU +wdf +ukE +xSd +ndT +vZN +brT +xSd +wRz +gtw +gKG +gKG +kqz +wdf +wdf +wdf +wdf +wdf +bJm +gtw +hsL +psp +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +qLT +bTg +xnA +gGC +xnA +wlB +feV +mbn +aJW +sue +jJO +sue +oUu +mbn +mbn +llQ +lOZ +oXJ +gFH +qoM +oXJ +lOZ +ahR +qSx +nzX +lOZ +oXJ +xOS +hsL +hsL +psp +psp +psp +hsL +psp +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +psp +psp +psp +psp +psp +psp +psp +psp +dLn +psp +psp +psp +psp +psp +psp +uqi +pfH +psp +psp +dLn +dLn +dLn +dLn +dLn +dLn +tMe +qgt +uNR +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(52,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dex +ijK +psp +tvZ +gtw +wdf +ukE +xSd +xSd +xSd +xSd +xSd +xSd +xSd +wdf +oLC +brT +xSd +xSd +xSd +owX +gKG +tvZ +gtw +gtw +gtw +gtw +ley +wdf +tvZ +hsL +psp +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +qLT +qLT +qLT +qLT +cVF +wfm +mbn +mbn +xWJ +xqH +xqH +xqH +xqH +kBr +szw +lZE +lOZ +oXJ +cNg +oXJ +lOZ +cfM +lOZ +mzh +lOZ +lOZ +oXJ +lOZ +lOZ +hsL +hsL +hsL +hsL +hsL +psp +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +psp +psp +psp +psp +psp +uNR +uqi +uqi +dLn +dLn +dLn +psp +psp +dLn +psp +psp +czh +uqi +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(53,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +psp +psp +gtw +kqz +xSd +xSd +riw +gip +avZ +aGl +fgs +tKf +wdf +hcr +kiO +vZN +juC +gKG +aTI +auJ +tvZ +fIm +fKq +fKq +gtw +gtw +wdf +gtw +hsL +psp +sYX +ijK +psp +psp +psp +psp +psp +psp +psp +psp +qLT +qLT +qLT +xnA +wlB +feV +mbn +eAM +xqH +qVO +txE +xqH +mbn +lcf +szw +lOZ +inD +lOZ +oXJ +lOZ +tWT +cPH +lrh +lOZ +hZZ +oXJ +qcx +lOZ +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +psp +psp +psp +psp +psp +psp +uqi +uqi +uNR +psp +psp +psp +psp +dLn +psp +uNR +pfH +czh +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(54,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +psp +psp +gtw +wdf +xSd +hRu +fgs +vTq +vTq +vTq +fgs +xSd +wdf +xSd +xSd +xSd +xSd +xSd +gKG +owX +gtw +xLR +lJI +vrm +pbD +bVR +wdf +tvZ +hsL +psp +ijK +ijK +fyR +fyR +fyR +fyR +fyR +qLT +qLT +qLT +xnA +xnA +xnA +xnA +wlB +feV +mbn +eCq +xqH +sIp +tVK +xqH +mbn +mbn +lOZ +lOZ +lOZ +lOZ +iap +lOZ +lOZ +mpt +lOZ +lOZ +iap +oXJ +qjp +lOZ +psp +cZM +cZM +cZM +psp +psp +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +psp +psp +psp +psp +psp +psp +uqi +czh +uqi +uNR +psp +psp +uNR +dLn +uNR +tSa +czh +pfH +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(55,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +psp +psp +tvZ +stR +hcr +qrh +fgs +vTq +pCU +vTq +fgs +wTU +wdf +qio +xSd +syZ +eRP +gtw +gKG +aTI +gtw +bQk +oiJ +hAo +pbD +wdf +gtw +gtw +hsL +psp +ijK +ijK +fyR +xnA +bTg +xnA +xnA +xnA +xnA +xnA +xnA +qLT +qLT +xnA +wlB +feV +mbn +mbn +iox +xqH +xqH +xqH +jbv +fVg +lOZ +jqC +cPH +oRn +oXJ +oXJ +oXJ +oXJ +xzR +uTt +oXJ +oXJ +roR +lOZ +psp +cZM +isW +cZM +psp +psp +psp +ijK +dex +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +psp +psp +psp +psp +psp +psp +czh +pfH +pfH +tMe +uqi +pfH +czh +pfH +uqi +uqi +czh +pfH +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(56,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +psp +psp +gtw +stR +xSd +uFE +fgs +vTq +vTq +vTq +csS +jzs +fsk +xSd +xSd +pxn +brT +hPq +gKG +gKG +mNM +qio +qio +mMW +pbD +wdf +tvZ +hsL +hsL +psp +ijK +ijK +fyR +xnA +fyR +fyR +fyR +fyR +qLT +fyR +qLT +qLT +fqY +xnA +wlB +feV +mbn +fkm +vNy +sue +uGG +sue +sue +xgA +lOZ +hKD +cPH +lOZ +lOZ +lOZ +lOZ +lOZ +lOZ +lOZ +lOZ +lOZ +lOZ +lOZ +psp +cZM +tfY +cZM +psp +psp +psp +ijK +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +psp +psp +psp +psp +psp +uNR +uqi +czh +pfH +uqi +czh +uqi +uqi +uqi +czh +uqi +uqi +uqi +uNR +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(57,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +aiB +cqj +aiB +aiB +aiB +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +psp +psp +gtw +wdf +xSd +xSd +byi +spQ +fgs +eBG +mxq +xSd +xSd +xSd +wDj +brT +pqq +gtw +xhr +owX +gtw +rje +qio +jne +pbD +nSS +tvZ +hsL +psp +sYX +ijK +ijK +qLT +xnA +fyR +psp +aHN +aHN +aHN +psp +psp +qLT +xnA +cSp +ppN +feV +mbn +fVg +jbv +sue +jbv +sue +jbv +fVg +lOZ +cPH +lOZ +lOZ +lOZ +lOZ +lOZ +lOZ +szk +dAV +fyR +psp +psp +psp +psp +cZM +qNz +cZM +psp +psp +psp +psp +ijK +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ewn +jap +jFA +bsE +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uNR +uqi +uqi +uqi +uNR +psp +psp +uNR +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(58,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +aiB +cqj +aiB +cqj +cqj +aiB +cqj +aiB +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +psp +psp +psp +tvZ +wdf +xSd +xSd +xSd +xSd +tJG +xSd +xSd +xSd +xSd +bhp +brT +brT +ojm +gtw +wdf +wdf +gtw +wxb +jne +dLG +pbD +hrB +gtw +hsL +psp +ijK +ijK +qLT +fyR +xnA +qLT +psp +aHN +bpQ +aHN +aHN +aHN +lOZ +mzh +mzh +mzh +mzh +lOZ +lOZ +lOZ +lOZ +lOZ +lOZ +lOZ +lOZ +lOZ +cPH +lOZ +lOZ +srW +fiK +kkl +lOZ +lOZ +wlB +fyR +psp +psp +psp +psp +cZM +oFy +cZM +psp +psp +psp +psp +psp +psp +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +tGk +tGk +tGk +sAP +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uqi +uqi +vWy +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(59,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +aiB +cqj +cqj +psp +psp +cqj +aiB +aiB +cqj +aiB +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +psp +psp +psp +tvZ +vPZ +xSd +mgy +qNI +twV +lJI +pbD +gSH +sXY +xSd +jvY +brT +hmu +asE +tvZ +wdf +pBw +tvZ +gtw +gtw +gtw +gtw +vXb +gtw +hsL +psp +ijK +ijK +fyR +qLT +xnA +qLT +edR +aHN +dCj +dJa +ekO +vcJ +fWC +cPH +cPH +cPH +cPH +cPH +cPH +cPH +yhx +cPH +cPH +cPH +cPH +cPH +cPH +lOZ +teu +qxO +rXT +qxO +frH +lOZ +oqL +fyR +cZM +cZM +cZM +cZM +cZM +oFy +cZM +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +tGk +tGk +tGk +jGA +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +uqi +uqi +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(60,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cqj +fVL +psp +psp +psp +psp +aiB +cqj +fVL +cqj +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +ijK +lEA +tMr +psp +tvZ +fws +hcr +mUT +lJI +lJI +lJI +vHH +vTq +vTq +xSd +tvZ +brT +brT +pak +xSd +wdf +lil +drL +kmu +vWD +vWD +vWD +wdf +tvZ +hsL +psp +ijK +ijK +noo +wlB +dAc +wfm +edR +aHN +aHN +aHN +aHN +aHN +lOZ +mzh +mzh +mzh +mzh +lOZ +lOZ +lOZ +lOZ +lOZ +lOZ +lOZ +lOZ +lOZ +cPH +lOZ +jfB +gFR +oNh +gFR +lWG +lOZ +uPP +lxO +oFy +kho +oFy +oFy +oFy +yds +cZM +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +bnA +tGk +tGk +jGA +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +uqi +dLn +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(61,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +aiB +aiB +cqj +aiB +psp +psp +psp +psp +cqj +aiB +cqj +aiB +cqj +aiB +psp +psp +psp +psp +psp +ijK +ijK +ijK +psp +psp +psp +psp +psp +tvZ +wdf +xSd +oRy +lJI +lJI +lJI +pbD +gGy +fOo +xSd +rFA +hSa +brT +uXM +pbD +wdf +qzq +tvZ +hRN +abr +hrB +abr +lvI +gtw +hsL +psp +sYX +ijK +qLT +wlB +xnA +qLT +edR +psp +psp +psp +psp +psp +psp +qLT +vjo +wlB +qLT +xfY +dMl +iRs +xfY +xfY +xfY +xfY +xfY +lOZ +cPH +lOZ +hTM +gFR +fhv +gFR +kft +uZZ +lQI +lxO +cZM +tfY +cZM +cZM +cZM +cZM +cZM +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jnK +tGk +ukH +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +dLn +dLn +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(62,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +cqj +cqj +fVL +cqj +cqj +psp +psp +cqj +fVL +cqj +svB +cqj +fVL +cqj +psp +psp +psp +psp +psp +ijK +ijK +psp +psp +psp +rTk +tvZ +gtw +gtw +wdf +xSd +xSd +xSd +xSd +xSd +xSd +xSd +xSd +xSd +tvZ +tvZ +hDE +xSd +pbD +wdf +wdf +sMh +uvX +hrB +abr +abr +hrB +hsL +hsL +psp +ijK +ijK +qLT +wlB +xnA +qLT +psp +psp +psp +psp +psp +psp +psp +qLT +mOl +bPr +lQe +xnA +xnA +wwo +mSC +xfY +hmg +nGr +xfY +lOZ +jqC +lOZ +jfB +gFR +ekI +gFR +lWG +lOZ +nUn +fyR +cZM +isW +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hsL +hsL +pjj +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +dLn +dLn +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(63,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +aiB +cqj +aiB +aiB +cqj +fVL +cqj +cqj +cqj +aiB +svB +aiB +cqj +aiB +aiB +psp +psp +psp +psp +ijK +ijK +psp +hsL +hsL +hsL +buA +ezU +nSS +ukE +tvZ +gtw +uQr +rUt +hdm +qFE +vwS +nTh +gtw +tvZ +fpB +lug +jOm +pbD +aTI +uxG +gtw +teg +hrB +abr +abr +qZn +tvZ +psp +psp +ijK +ijK +qLT +wlB +xnA +fyR +psp +psp +psp +psp +psp +psp +psp +qLT +dFd +iqZ +qLT +xfY +myf +nGr +rPA +xnA +xnA +xnA +nNx +lOZ +cPH +xfm +kft +kft +kft +peY +kft +lOZ +qTv +fyR +fyR +fyR +fyR +fyR +fyR +fyR +fyR +fyR +fyR +psp +psp +psp +psp +ijK +ijK +dex +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hsL +hsL +hsL +hsL +hsL +pjj +hsL +hsL +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +dLn +dLn +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(64,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +aiB +cqj +aiB +cqj +aiB +aiB +aiB +cqj +aiB +cqj +aiB +svB +aiB +psp +psp +cqj +psp +psp +psp +psp +ijK +ijK +psp +hsL +psp +tvZ +wdf +tvZ +tvZ +gtw +rEX +rEX +gkd +xvB +dBO +dBO +dBO +vwS +gtw +pbD +jXM +tvZ +vAv +tvZ +gKG +nWf +iqm +wdf +nTz +oNx +nTz +sqT +tvZ +psp +psp +ijK +ijK +fyR +wlB +xnA +qLT +psp +psp +psp +psp +psp +psp +psp +qLT +xnA +wlB +qLT +xfY +xfY +xfY +xfY +xfY +xfY +xnA +dFd +lOZ +lOZ +lOZ +tbC +lOZ +wSj +lOZ +tgY +lOZ +wlB +fyR +wlB +dAV +wmC +pNm +tfJ +wlB +wmC +wlB +fyR +psp +psp +psp +psp +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +hsL +hsL +hsL +hsL +hsL +hsL +hsL +hsL +pjj +hsL +hsL +hsL +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +dLn +dLn +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(65,1,1) = {" +psp +psp +psp +psp +psp +psp +cqj +cqj +fVL +cqj +fVL +cqj +svB +svB +svB +svB +svB +cqj +svB +cqj +psp +psp +aiB +aiB +psp +psp +psp +ijK +ijK +psp +hsL +psp +gtw +wdf +gtw +eEM +usN +lEl +gtw +kFE +lzR +dBO +aVE +dBO +vwS +tvZ +gtw +tvZ +pbD +tvZ +gtw +gKG +gKG +tvZ +gtw +gtw +gtw +tvZ +gtw +gtw +psp +psp +ijK +ijK +qLT +wlB +xnA +qLT +qLT +qLT +fyR +qLT +fyR +qLT +fyR +qLT +xnA +wlB +fyR +fyR +fyR +fyR +fyR +fyR +fyR +fyR +lQe +lOZ +lOZ +lOZ +lOZ +lOZ +lOZ +lOZ +lOZ +lOZ +mpf +fyR +wfm +fyR +fyR +fyR +fyR +fyR +fyR +wlB +fyR +fyR +fyR +fyR +fyR +ijK +ijK +ijK +psp +psp +psp +psp +psp +hsL +hsL +hsL +hsL +hsL +hsL +jXR +jXR +hsL +hsL +psp +psp +hsL +hsL +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +dLn +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(66,1,1) = {" +psp +psp +psp +psp +psp +psp +aiB +aiB +aiB +aiB +cqj +aiB +svB +aiB +psp +psp +svB +aiB +svB +aiB +cqj +aiB +cqj +aiB +psp +psp +psp +dex +ijK +psp +hsL +gtw +gtw +wdf +rEX +gKG +anm +gKG +gtw +uQr +gos +dBO +aHC +dBO +aVE +tvZ +ehS +brT +dwx +jOB +dek +bOo +dir +lhc +gKG +wmg +owj +cCJ +qmE +tvZ +tvZ +gtw +ijK +ijK +fyR +wlB +dAc +afT +wlB +wlB +wlB +wlB +wlB +wmC +wlB +iFv +dAc +wlB +wlB +wlB +wlB +wlB +wmC +iFv +wlB +iqZ +pro +iqZ +wlB +wmC +wmC +wlB +dAc +iFv +wmC +wlB +wlB +mpf +wlB +xnA +xnA +xnA +xnA +xnA +yci +wlB +wlB +wlB +wlB +mpf +wlB +ijK +ijK +ijK +hsL +hsL +hsL +hsL +hsL +hsL +hsL +hsL +psp +psp +psp +psp +psp +hsL +hsL +psp +psp +hsL +hsL +hsL +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dLn +dLn +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(67,1,1) = {" +psp +psp +psp +psp +psp +psp +aiB +cqj +psp +psp +cqj +aiB +svB +cqj +psp +psp +svB +gwE +svB +aiB +aiB +cqj +fVL +cqj +psp +psp +psp +ijK +ijK +psp +hsL +tvZ +fws +nSS +tvZ +gKG +etw +gKG +gtw +uQr +vwS +dBO +aVE +dBO +aVE +wOS +tbe +tbe +fvn +sMX +sMX +aMR +lhc +tbe +gKG +wmg +jAe +jAe +vUI +rWX +avs +gtw +ijK +ijK +qLT +wlB +xnA +wgc +xnA +xnA +xnA +xnA +xnA +vjo +xnA +xnA +xnA +xnA +bTg +xnA +xnA +xnA +vjo +wlB +wlB +xnA +xnA +xnA +xnA +vjo +vjo +xnA +xnA +xnA +vjo +xnA +lQI +vTN +xnA +xnA +qLT +ewT +xnA +alY +xnA +lQI +xnA +xnA +xnA +qoI +xnA +aNo +aoO +cZz +hsL +hsL +hsL +hsL +hsL +hsL +psp +psp +psp +psp +psp +psp +psp +hsL +hsL +psp +psp +psp +hsL +hsL +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(68,1,1) = {" +psp +psp +psp +psp +psp +psp +cqj +psp +psp +psp +psp +cqj +svB +aiB +cqj +aiB +cqj +aiB +cqj +psp +psp +cqj +cqj +aiB +psp +psp +psp +ijK +ijK +psp +hsL +gtw +wdf +tvZ +gtw +gtw +hnu +gtw +gtw +uQr +cCw +dBO +dBO +dBO +vwS +tvZ +fHJ +brT +dwx +gJM +vUG +tbe +tbe +tbe +gKG +wmg +jAe +vUI +jAe +ced +xdl +gtw +ijK +ijK +qLT +wlB +xnA +qLT +qLT +qLT +fyR +qLT +fyR +fyR +xnA +qLT +qLT +xnA +qLT +qLT +fyR +qLT +qLT +wlB +wlB +fyR +qLT +qLT +fyR +fyR +qLT +fyR +qLT +fyR +fyR +xnA +wfm +cZM +cZM +cZM +cZM +cZM +pwB +cZM +xnA +wlB +fyR +fyR +fyR +fyR +xnA +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hsL +hsL +psp +psp +psp +psp +hsL +hsL +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(69,1,1) = {" +psp +psp +psp +psp +psp +psp +cqj +psp +psp +psp +psp +aiB +svB +aiB +cqj +aiB +fVL +cqj +psp +psp +psp +psp +aiB +psp +psp +psp +psp +ijK +ijK +psp +hsL +gtw +wdf +tvZ +tGP +gtw +lZe +whu +gtw +kFE +kLz +xQC +vwS +vwS +iEe +tvZ +gtw +gtw +pbD +gtw +gtw +gKG +gKG +gKG +cWm +ced +bnP +tuU +bbG +gtw +gtw +gtw +dex +ijK +fyR +wlB +xnA +fyR +psp +psp +psp +psp +psp +qLT +xnA +qLT +qLT +xnA +fyR +psp +psp +psp +qLT +wlB +wlB +fyR +qLT +bTg +xnA +cCq +rhv +xnA +xnA +dsW +vjo +xnA +wlB +cZM +ufp +nMn +qoz +qij +dTE +cZM +xnA +kZh +fyR +vNq +aeH +fyR +xnA +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hsL +hsL +psp +psp +psp +psp +hsL +hsL +hsL +hsL +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(70,1,1) = {" +psp +psp +psp +psp +psp +psp +aiB +cqj +psp +psp +cqj +aiB +svB +cqj +fVL +cqj +cqj +aiB +psp +psp +psp +psp +cqj +psp +psp +psp +psp +ijK +ijK +psp +hsL +gtw +wdf +gtw +bhc +cHD +tOU +dVU +gtw +gtw +tvZ +pbD +gtw +tvZ +gtw +gtw +brT +sMX +gKG +gKG +iNk +gKG +cWm +xhr +wdf +byF +vUI +eDZ +eDZ +gtw +psp +psp +ijK +ijK +qLT +wlB +xnA +fyR +les +les +les +les +les +les +tnO +les +fyR +xnA +qLT +psp +psp +psp +fyR +xbu +qTv +xnA +aKs +xnA +xnA +xnA +bKX +wwo +avy +fyR +fyR +wlB +wkZ +cZM +idx +gbA +gbA +wlv +lBj +cZM +xnA +lQI +fSP +qfT +eBB +fyR +xnA +ijK +ijK +cZz +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hsL +hsL +hsL +psp +psp +psp +psp +psp +hsL +lfQ +hsL +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(71,1,1) = {" +psp +psp +psp +psp +psp +psp +aiB +cqj +cqj +cqj +fVL +cqj +svB +aiB +cqj +aiB +fVL +cqj +cqj +psp +psp +cqj +aiB +psp +psp +psp +psp +ijK +ijK +psp +hsL +gtw +wdf +gtw +gtw +osR +sGh +uwG +gtw +gtw +gtw +gtw +gtw +lsd +brT +gtw +brT +gtw +iNT +ced +ced +ced +ced +ced +aRI +iRp +lKo +qkJ +umO +gtw +psp +psp +ijK +ijK +qLT +wlB +xnA +cZM +les +uiG +sOE +xRz +eTh +eTh +rWD +les +fyR +xnA +fyR +fyR +psp +psp +fyR +xnA +wlB +fyR +qLT +xnA +jPr +xnA +vjo +myf +eaT +qLT +fyR +qTv +cZM +cZM +lHX +cZM +oFB +cZM +oQh +cZM +xnA +yci +fyR +rTk +rTk +fyR +qxF +ijK +ijK +eGI +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hsL +hsL +hsL +psp +psp +psp +psp +psp +hsL +hsL +hsL +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(72,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +cqj +fVL +aiB +cqj +aiB +svB +svB +svB +aiB +cqj +aiB +aiB +aiB +aiB +cqj +aiB +psp +psp +psp +psp +ijK +ijK +psp +hsL +tvZ +jml +wdf +tvZ +eeH +tHr +lcY +vrh +gKG +ciw +vZN +elo +kWt +vWJ +gtw +brT +juC +wdf +ced +alG +bWp +rlJ +qgE +ayL +tvZ +tvZ +hsL +gtw +gtw +psp +psp +sYX +ijK +nmN +wlB +xnA +cZM +hhL +aqs +mBF +vCr +eTh +tgz +rWD +les +qLT +xnA +lOS +fyR +fyR +qLT +qLT +bTg +wlB +cZM +cZM +les +cZM +cZM +cZM +les +cZM +les +fyR +wfm +cZM +iBH +xzJ +mVv +xzJ +cZM +rcU +cZM +xnA +yci +fyR +psp +psp +fyR +fyR +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hsL +hsL +psp +psp +psp +psp +psp +psp +hsL +hsL +hsL +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(73,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +aiB +cqj +aiB +svB +svB +sjZ +svB +svB +aiB +cqj +aiB +aiB +aiB +cqj +fVL +cqj +psp +psp +psp +psp +ijK +ijK +ijK +hsL +tvZ +gtw +wdf +tvZ +gtw +cCE +pbD +tvZ +ozE +gKG +gtw +gtw +gtw +pbD +gtw +gtw +gtw +pPO +ced +alG +bWp +wGn +oKl +nji +tvZ +hsL +hsL +hsL +rTk +psp +psp +ijK +ijK +qLT +wlB +pNm +cZM +oXb +aqs +gIz +vCr +rWD +rWD +rWD +les +fyR +fKJ +xnA +xnA +xnA +xnA +xnA +xnA +wlB +cZM +cKB +qSX +cZM +jwk +jwk +jwk +jwk +jwk +fyR +uSU +cZM +kXe +qij +qij +ouq +cZM +oIF +cZM +xnA +yci +fyR +psp +psp +psp +psp +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hsL +hsL +psp +psp +psp +psp +psp +psp +psp +hsL +hsL +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(74,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +aiB +cqj +aiB +svB +aiB +cqj +aiB +svB +cqj +fVL +cqj +cqj +cqj +aiB +cqj +aiB +psp +psp +psp +psp +psp +ijK +ijK +hsL +hsL +gtw +wdf +nSS +ezU +wdf +wdf +kqz +wdf +wdf +wdf +wdf +wdf +wdf +ezU +ezU +wdf +wdf +vBX +alG +bWp +heG +bWp +stI +hsL +hsL +psp +hsL +rTk +psp +psp +ijK +ijK +qLT +xnA +wlB +cZM +sGM +imT +hlB +vCr +eTh +eTh +rWD +les +fyR +fyR +aKs +fyR +qLT +fyR +qLT +xnA +wlB +cZM +ehg +qSX +cZM +mmo +qSX +qyv +jwk +jwk +fyR +wfm +cZM +lsL +qij +qij +rHl +cZM +bep +cZM +qxF +yci +fyR +psp +psp +psp +psp +dex +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hsL +hsL +psp +psp +psp +psp +psp +psp +psp +hsL +hsL +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(75,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +cqj +fVL +cqj +svB +cqj +fVL +cqj +svB +aiB +cqj +psp +psp +aiB +cqj +fVL +cqj +aiB +psp +psp +psp +psp +ijK +ijK +hsL +hsL +hsL +hsL +gtw +gtw +gtw +gtw +gtw +tvZ +gtw +wdf +iKc +jml +wdf +wdf +quW +wdf +fsk +ced +iRp +ced +duv +ced +ced +tvZ +psp +psp +hsL +hsL +hsL +psp +ijK +ijK +fyR +xnA +wlB +cZM +les +qgf +sOE +nYt +rWD +eTh +sca +les +psp +psp +xnA +psp +psp +psp +qLT +wlB +wlB +cZM +ezM +qSX +cZM +hKw +qSX +wGg +jwk +jwk +fyR +wlB +cZM +cZM +rND +xzJ +swo +cZM +dWu +cZM +jZF +wlB +fyR +psp +psp +ijK +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hsL +hsL +psp +psp +psp +psp +psp +psp +psp +hsL +hsL +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(76,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +aiB +cqj +psp +psp +aiB +cqj +aiB +svB +cqj +fVL +psp +psp +aiB +aiB +cqj +aiB +cqj +psp +psp +psp +ijK +ijK +ijK +psp +tvZ +tvZ +tvZ +tvZ +tvZ +tvZ +tvZ +ygq +tvZ +gtw +wrV +gtw +gtw +ohm +tvZ +ced +xOs +ced +iRp +alG +seF +fpb +alG +wOz +pbD +psp +psp +psp +psp +hsL +psp +ijK +ijK +fyR +xnA +wfm +qLT +les +les +les +les +les +les +les +les +psp +psp +xnA +xnA +psp +psp +fyR +wlB +xnA +cZM +fOQ +gbA +cZM +qSX +epm +fXZ +jwk +jwk +fyR +uSU +wlB +cZM +cZM +xZX +pYT +cZM +iBh +cZM +cZM +cZM +fyR +psp +ijK +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +kvv +les +kvv +psp +hsL +hsL +psp +psp +psp +psp +uNR +psp +uNR +hsL +hsL +uNR +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(77,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +cqj +psp +psp +cqj +aiB +cqj +svB +svB +cqj +cqj +aiB +aiB +cqj +aiB +cqj +aiB +psp +psp +psp +ijK +ijK +psp +tvZ +abA +aWR +xkk +che +nKI +dub +aDr +tvZ +gtw +cjc +qio +wnR +gtw +hsL +tvZ +oaH +bdv +iFF +tLl +dxW +dxW +xTH +dxW +whF +pbD +hsL +hsL +hsL +hsL +hsL +psp +sYX +ijK +qLT +xnA +wlB +fyR +qLT +fyR +fyR +psp +psp +psp +psp +psp +psp +psp +myf +xnA +awU +psp +fyR +qTv +rGL +cZM +hrp +gbA +cZM +hLN +cZM +cZM +jwk +cZM +fyR +fyR +fVV +cZM +vSR +xzJ +xzJ +xzJ +rcU +fwP +ybs +cZM +psp +psp +ijK +ijK +psp +psp +psp +psp +kvv +kvv +kvv +kvv +psp +psp +kvv +les +kvv +poF +les +psp +hsL +hsL +psp +psp +psp +psp +psp +hnW +tGk +eTK +iOC +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(78,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +aiB +cqj +aiB +aiB +cqj +fVL +aiB +svB +fVL +aiB +cqj +fVL +fVL +aiB +cqj +aiB +psp +psp +psp +ijK +ijK +psp +tvZ +gtA +uDp +uDp +uDp +uDp +uDp +eyi +tvZ +gtw +eOs +jPp +bbn +gtw +bOc +tvZ +rHH +bdv +iFF +mop +dxW +dxW +exF +dxW +vuw +pbD +hsL +psp +psp +psp +psp +psp +ijK +ijK +qLT +jzA +uSU +qLT +nxY +xnA +fyR +psp +psp +psp +psp +psp +psp +psp +psp +nGr +uDI +psp +qLT +wlB +wlB +cZM +hrp +gbA +gbA +gbA +yhh +cZM +jwk +jwk +mdy +qEA +bZV +cZM +nbT +qij +qij +qij +rcU +liD +kQM +cZM +psp +ijK +ijK +ijK +psp +psp +psp +psp +val +drr +uvC +kvv +kvv +kvv +kvv +kvv +nsy +oFy +kvv +psp +hsL +hsL +psp +psp +psp +psp +psp +hnW +tGk +tGk +tGk +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(79,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +aiB +cqj +fVL +aiB +cqj +aiB +aiB +svB +fVL +aiB +cqj +cqj +psp +psp +cqj +cqj +psp +psp +psp +ijK +ijK +psp +tvZ +iaf +uDp +uDp +uDp +dyu +uDp +ePp +tvZ +gtw +uDK +tSb +qio +gtw +tMr +tvZ +bPp +bdv +kyH +qHN +dxW +dxW +dxW +dxW +tPA +tvZ +hsL +hsL +hsL +hsL +psp +psp +ijK +ijK +qLT +xnA +mQF +fSP +xnA +xnA +fyR +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +qLT +xnA +wlB +cZM +uQj +bPb +tIT +gbA +nBX +cZM +cZM +cZM +cZM +cZM +cZM +cZM +lNO +mXf +eRY +qij +rcU +abF +djj +cZM +psp +ijK +ijK +psp +psp +jUW +jUW +psp +val +oFy +oFy +tJu +tJu +qSX +tJu +vec +oFy +oFy +kvv +psp +hsL +psp +psp +psp +psp +psp +uNR +hnW +tGk +tGk +tGk +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(80,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +cqj +cqj +psp +psp +cqj +svB +svB +svB +cqj +cqj +fVL +psp +psp +psp +psp +aiB +psp +psp +psp +ijK +ijK +psp +tvZ +qgJ +bNi +uDp +uJH +uDp +uDp +qgJ +tvZ +tvZ +tvZ +tvZ +wRC +cYR +bOc +tvZ +mrL +bdv +erS +lEq +kUD +oVe +ebw +aQX +mcG +pbD +psp +psp +psp +hsL +psp +psp +ijK +ijK +qLT +xnA +dAV +qLT +qLT +qLT +fyR +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +qLT +xnA +wlB +cZM +jTV +cZM +sOE +jVO +nzD +cZM +icE +lJh +xBl +uog +gjC +cZM +xzJ +ezE +whE +lOx +rCx +umJ +djj +cZM +cZM +ijK +ijK +psp +mdM +mdM +psp +kvv +les +kvv +les +les +les +kvv +les +kvv +oFy +oFy +les +psp +hsL +psp +psp +psp +psp +psp +psp +hnW +tGk +tGk +tGk +psp +tPG +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(81,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +aiB +psp +psp +psp +psp +aiB +aiB +psp +psp +aiB +cqj +psp +psp +psp +psp +cqj +psp +psp +psp +ijK +ijK +psp +tvZ +awv +uDp +uDp +uDp +ejm +uDp +fsd +tvZ +gtw +gtw +gtw +gtw +gtw +ijK +tvZ +tvZ +pbD +tvZ +tvZ +pbD +pbD +pbD +tvZ +tvZ +tvZ +psp +hsL +qVh +hsL +psp +psp +ijK +ijK +cZM +cZM +cZM +cZM +cZM +psp +psp +psp +psp +psp +psp +psp +psp +fyR +qLT +fyR +qLT +qLT +qLT +xnA +wlB +cZM +cZM +cZM +cZM +inx +cZM +cZM +rwu +rwu +hus +ejQ +ejQ +cZM +eiG +qij +qij +qij +xzJ +umJ +agx +dpg +ijK +ijK +ijK +psp +jUW +psp +kvv +xpF +nsy +oFy +wwn +eJH +ewq +iGd +kvv +val +paT +les +les +psp +jUW +psp +psp +psp +psp +psp +psp +hnW +jGr +tGk +tGk +ueG +ueG +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(82,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +aiB +psp +psp +psp +psp +aiB +aiB +psp +psp +aiB +cqj +cqj +psp +psp +cqj +aiB +psp +psp +psp +dex +ijK +psp +tvZ +jnS +uDp +uDp +uDp +uDp +uDp +fZF +tvZ +psp +psp +psp +psp +psp +eIz +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hsL +psp +psp +psp +psp +ijK +ijK +cZM +hEf +cZM +cZM +cZM +cZM +cZM +cZM +cZM +psp +psp +psp +psp +fyR +xnA +xnA +xnA +xnA +vTN +xnA +wlB +cZM +cZM +cZM +cZM +cZM +cZM +rwu +rwu +kmE +cgo +vVY +ejQ +cZM +mRF +xzJ +oXy +eVP +xzJ +umJ +agx +cZM +cZM +dex +ijK +psp +mdM +jRM +val +oFy +oFy +oFy +oFy +oFy +oFy +ulx +fKe +fKe +qSX +kvv +psp +psp +jUW +psp +psp +psp +psp +psp +uNR +psp +psp +psp +psp +uNR +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(83,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +cqj +cqj +psp +psp +cqj +aiB +cqj +aiB +cqj +cqj +fVL +cqj +cqj +fVL +cqj +fVL +psp +psp +psp +ijK +ijK +psp +tvZ +aDr +oem +hio +qgJ +gHs +awv +aDr +tvZ +psp +psp +psp +psp +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +psp +hsL +psp +psp +psp +psp +ijK +ijK +cZM +jMp +amo +cZM +cZM +fyY +fRw +wgz +cZM +psp +psp +psp +psp +fyR +xnA +qLT +qLT +fyR +qLT +xnA +wlB +xMw +xMw +xMw +xMw +xMw +xMw +ojT +xMw +xMw +xMw +xMw +xMw +cZM +cZM +cZM +cZM +cZM +bWa +tec +xaQ +cZM +cZM +ijK +ijK +psp +mdM +psp +kvv +bYg +oat +iGd +yds +mEx +qMW +oFy +kvv +val +qSX +les +psp +psp +jUW +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(84,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +aiB +cqj +aiB +aiB +cqj +aiB +cqj +aiB +aiB +aiB +cqj +aiB +aiB +cqj +aiB +psp +psp +psp +psp +ijK +ijK +psp +psp +tvZ +tvZ +tvZ +tvZ +tvZ +tvZ +tvZ +psp +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +dex +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +dex +ijK +cZM +nYB +oPj +hEf +kzV +dNW +fdx +ydq +cZM +psp +psp +psp +psp +fyR +xnA +qLT +uSU +wfm +jfH +gGC +wlB +bIK +gTy +qXG +pUL +xEM +hQT +kqy +kqy +sGU +ecZ +uGl +wAC +vgS +ijK +cZM +cZM +xIT +dNW +fRw +dNW +xTS +cZM +ijK +ijK +psp +mdM +jUW +psp +kvv +kvv +kvv +kvv +kvv +kvv +oFy +kvv +kvv +kvv +kvv +psp +psp +mdM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(85,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +cqj +fVL +cqj +aiB +aiB +cqj +fVL +cqj +fVL +fVL +fVL +fVL +aiB +cqj +aiB +psp +psp +psp +psp +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +cZM +idH +hEf +hEf +wRi +dNW +fbS +dNW +cZM +psp +psp +psp +psp +fyR +xnA +qLT +qLT +qLT +fyR +xnA +wlB +xEM +jge +sFL +sFL +iBQ +nLP +ybJ +kuA +xEM +jNI +ecZ +wAC +vgS +ijK +ijK +cZM +hyO +dNW +ouV +ouV +bRv +cZM +ijK +ijK +psp +mdM +psp +psp +psp +les +uim +fKe +fKe +oFy +oFy +oFy +kvv +psp +psp +psp +psp +mdM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(86,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +aiB +cqj +aiB +cqj +cqj +aiB +cqj +cqj +psp +psp +cqj +aiB +cqj +aiB +cqj +cqj +psp +psp +psp +psp +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +cZM +qbB +hEf +hEf +cZM +aJP +rYK +cZM +cZM +cZM +cZM +cZM +cZM +cZM +xnA +qLT +dAV +uSU +srS +wlB +wlB +xEM +hud +xWa +vBC +xMw +kxm +ybJ +kuA +xMw +xMw +xMw +xMw +xMw +psp +ijK +cZM +ieO +dNW +ipb +ouV +lke +cZM +ijK +ijK +psp +mdM +psp +mdM +jRM +val +qSX +kvv +kvv +oat +poF +oat +les +psp +jRM +mdM +mdM +mdM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(87,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +aiB +cqj +aiB +cqj +aiB +aiB +psp +psp +psp +psp +cqj +fVL +psp +psp +aiB +psp +psp +psp +psp +psp +ijK +ijK +ijK +ijK +ijK +ijK +rky +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +cZM +cZM +tzp +cZM +cZM +jCF +cZM +cZM +fex +tQC +yee +cZM +rhz +cZM +xnA +qLT +qLT +qLT +qLT +dFd +wfm +xMw +xMw +xMw +xMw +xMw +kFZ +ybJ +kuA +tpQ +bwe +bwe +nEL +xMw +psp +ijK +cZM +cZM +bIb +ejK +niT +tBT +cZM +ijK +ijK +psp +mdM +psp +mdM +psp +les +qSX +les +kvv +kvv +les +les +les +psp +psp +uCd +mdM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(88,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +aiB +cqj +aiB +aiB +psp +psp +psp +psp +aiB +cqj +psp +psp +cqj +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +cZM +aYX +edc +kpt +hEf +bVo +cZM +wzF +tGk +pQS +bKg +tGk +cZM +cSp +cSp +axy +qLT +qLT +cHB +wlB +bIK +hLi +qXG +pUL +xMw +pCG +ybJ +pEE +xMw +xMw +uKu +gGM +xMw +psp +ijK +ijK +cZM +cZM +eBM +cZM +cZM +cZM +ijK +ijK +psp +mdM +mdM +mdM +jUW +val +qSX +les +psp +jUW +psp +jRM +psp +jUW +uCd +uCd +mdM +jUW +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(89,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cqj +fVL +cqj +cqj +cqj +psp +psp +cqj +cqj +aiB +aiB +cqj +aiB +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +cZM +bct +hEf +hEf +hEf +hEf +cZM +mAN +sAP +cxQ +hML +cGj +cZM +qLT +qLT +fyR +qLT +qLT +xnA +wlB +xEM +jge +sFL +sFL +jbw +nLP +ybJ +pyR +igN +tyB +bwe +uLI +xMw +psp +psp +ijK +psp +psp +psp +psp +psp +psp +ijK +ijK +psp +psp +psp +mdM +psp +les +qSX +les +psp +mdM +mdM +mdM +mdM +mdM +jUW +uCd +mdM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(90,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +aiB +cqj +aiB +fVL +aiB +cqj +aiB +cqj +fVL +cqj +cqj +aiB +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +cZM +eGB +hEf +gXJ +gXJ +hEf +cZM +cZM +cZM +cZM +cZM +cZM +cZM +psp +iRs +fyR +qLT +qLT +rGL +qTv +xEM +hDz +xWa +vBC +xEM +lHH +kuA +pyR +igN +tyB +bwe +vfj +xMw +psp +psp +ijK +ijK +ijK +ijK +ijK +ijK +dex +ijK +ijK +psp +psp +jUW +mdM +jUW +les +vbA +psp +jUW +mdM +uCd +uCd +uCd +mdM +uCd +uCd +mdM +jRM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(91,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +aiB +cqj +cqj +fVL +cqj +aiB +cqj +aiB +fVL +fVL +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +cZM +bct +ouV +mms +ouV +hEf +obb +eFL +hEf +cZM +psp +psp +psp +rPA +pZz +fyR +xnA +jnQ +xnA +wlB +xMw +xMw +xMw +xMw +xMw +nuc +xMw +rcZ +xvf +xMw +xMw +xMw +xMw +psp +psp +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +psp +psp +psp +psp +mdM +psp +psp +axL +psp +psp +mdM +uCd +jUW +mdM +mdM +uCd +uCd +mdM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(92,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +fVL +aiB +cqj +aiB +fVL +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +cZM +aZU +ouV +aAt +eza +mwG +obb +qwN +qwN +cZM +psp +psp +psp +wwo +xnA +fyR +rtP +fyR +jTR +szk +gfH +kup +iOI +xGj +wxa +nuf +omY +bwe +wEi +uqn +xMw +xMw +xMw +psp +psp +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +mdM +psp +psp +mdM +psp +mdM +mdM +uCd +uCd +uCd +mdM +mdM +uCd +mdM +jUW +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(93,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +fVL +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +cZM +cZM +cZM +cZM +cZM +cZM +cZM +cZM +cZM +cZM +psp +psp +psp +psp +xnA +fyR +fyR +qLT +eMP +mpf +gfH +hEa +hEa +jDH +pVQ +lHH +cDx +xPH +xPH +uul +xMw +xMw +xMw +psp +psp +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +riq +mdM +mdM +mdM +mdM +psp +psp +mdM +uCd +uCd +jUW +mdM +uCd +uCd +mdM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(94,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +dex +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +gfH +hEa +hEa +jDH +pVQ +lHH +cDx +xPH +xPH +bwe +xMw +xMw +xMw +wiD +dex +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +rgi +psp +jUW +psp +mdM +mdM +mdM +mdM +mdM +uCd +uCd +agr +mdM +mdM +mdM +jUW +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(95,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +dex +ijK +ijK +gfH +phf +jGc +iwt +kqy +nxn +oDm +sbV +bwe +uAH +xMw +xMw +xMw +ijK +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +rgi +psp +psp +psp +mdM +uCd +uCd +uCd +mdM +uCd +jUW +mdM +uCd +uCd +uCd +uCd +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(96,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +xMw +xMw +xMw +xMw +xMw +ofA +oIj +oIj +oIj +oIj +oIj +oIj +izo +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +qof +lfg +psp +psp +psp +rgi +mdM +riq +uCd +uCd +mdM +mdM +uCd +jRM +mdM +uCd +tZr +mdM +mdM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(97,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +aHg +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +gzv +hOO +hOO +izo +eAU +xqf +tsY +soM +kOq +izo +hOO +izo +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +lfg +psp +psp +psp +psp +psp +mdM +mdM +mdM +mdM +uCd +uCd +uCd +mdM +uCd +mdM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(98,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +ijK +psp +psp +psp +psp +psp +psp +psp +psp +psp +rgi +lfg +uCd +riq +riq +riq +riq +hht +uCd +mdM +uCd +uCd +uCd +jUW +mdM +uCd +mdM +mdM +jUW +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(99,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +rgi +uCd +lfg +uCd +lfg +uCd +lfg +uCd +riq +uCd +uCd +uCd +uCd +uCd +uCd +mdM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(100,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +lfg +hht +uCd +uCd +uCd +uCd +uCd +uCd +uCd +agr +mdM +jUW +jUW +uCd +hht +hht +hht +hht +mdM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(101,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +lfg +uCd +uCd +uCd +riq +hht +hht +hht +hht +uCd +uCd +uCd +uCd +mdM +uCd +uCd +uCd +hht +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(102,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +lfg +hht +hht +lfg +uCd +rgm +uCd +lfg +uCd +mdM +hht +hht +hht +mdM +hht +hht +hht +uCd +riq +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(103,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hht +uCd +uCd +uCd +uCd +uCd +hht +uCd +hht +uCd +uCd +hht +uCd +lfg +uCd +riq +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(104,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hht +uCd +uCd +uCd +uCd +uCd +hht +uCd +rgm +uCd +uCd +hht +uCd +hht +uCd +rgm +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(105,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +rgi +hht +uCd +rgi +rgi +uCd +hht +uCd +uCd +uCd +rgi +hht +uCd +lfg +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(106,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hht +hht +hht +hht +uCd +hht +hht +uCd +uCd +uCd +hht +uCd +rgm +uCd +rgm +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(107,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uCd +uCd +uCd +hht +uCd +hht +uCd +uCd +hht +hht +hht +uCd +uCd +uCd +riq +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(108,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +qof +uCd +lfg +uCd +hht +uCd +uCd +uCd +uCd +riq +uCd +uCd +uCd +lfg +uCd +hht +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(109,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +qof +hht +hht +hht +hht +hht +uCd +uCd +hht +uCd +hht +uCd +hht +uCd +tZr +uCd +mdM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(110,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hht +uCd +hht +uCd +lfg +uCd +riq +hht +hht +hht +riq +hht +hht +mdM +mdM +mdM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(111,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hht +hht +hht +uCd +tZr +uCd +uCd +uCd +uCd +uCd +uCd +uCd +riq +uCd +hht +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(112,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hht +uCd +qof +uCd +uCd +rgi +uCd +qof +uCd +tZr +uCd +rgm +rgi +uCd +hht +lfg +lfg +tZr +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(113,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +riq +uCd +uCd +uCd +uCd +riq +uCd +hht +uCd +hht +uCd +uCd +lfg +uCd +hht +uCd +uCd +uCd +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(114,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hht +hht +hht +hht +hht +hht +hht +hht +uCd +hht +mdM +mdM +lfg +uCd +mdM +uCd +uCd +riq +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(115,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hht +uCd +uCd +uCd +hht +uCd +riq +uCd +uCd +uCd +uCd +rgi +uCd +mdM +uCd +rgm +hht +rgm +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(116,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +rgm +riq +hht +uCd +riq +uCd +hht +uCd +hht +uCd +uCd +riq +hht +hht +uCd +mdM +uCd +uCd +mdM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(117,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hht +uCd +rgi +uCd +hht +uCd +hht +hht +rgi +riq +uCd +hht +uCd +riq +uCd +rgm +mdM +rgm +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(118,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +rgm +riq +hht +hht +hht +hht +hht +uCd +hht +uCd +uCd +uCd +uCd +hht +uCd +hht +uCd +uCd +hht +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(119,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hht +uCd +uCd +uCd +riq +uCd +hht +hht +riq +riq +rgi +lfg +uCd +hht +hht +uCd +hht +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(120,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +tZr +hht +hht +hht +uCd +tZr +uCd +uCd +uCd +uCd +uCd +uCd +uCd +psp +psp +psp +psp +hht +mdM +mdM +hht +hht +hht +hht +mdM +mdM +hht +riq +hht +hht +hht +hht +hht +riq +riq +riq +hht +hht +hht +oBO +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(121,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qNk +uxU +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hht +hht +hht +hht +hht +uCd +uCd +uCd +uCd +hht +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(122,1,1) = {" +psp +psp +psp +psp +psp +psp +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +qfT +uwo +qNk +qNk +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hht +hht +hht +riq +riq +hht +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(123,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +qNk +qNk +uwo +rPv +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +rgi +psp +psp +psp +mdM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(124,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +xvu +uwo +qNk +uwo +qNk +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +tRE +mdM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(125,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +qNk +uwo +uwo +uwo +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +mhH +vlr +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(126,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dAb +qNk +uwo +uwo +dAb +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(127,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uwo +uwo +uwo +uwo +uwo +uwo +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(128,1,1) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uwo +uwo +uwo +uwo +uwo +uwo +dAb +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} + +(1,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +vJP +vJP +goc +goc +goc +vJP +vJP +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dEH +dEH +dEH +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jAy +"} +(2,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hKd +vJP +pLh +vgH +aHa +vJP +ikx +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dEH +dEH +dEH +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(3,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +vJP +vJP +ikx +hKd +vgH +aHa +vJP +vJP +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dEH +dEH +dEH +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(4,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +ikx +lta +pLh +vgH +aHa +vJP +ikx +vJP +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dEH +dEH +dEH +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(5,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +vJP +lta +vJP +vJP +vgH +aHa +pLh +vJP +lta +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dEH +dEH +dEH +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(6,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +vJP +hKd +vJP +vgH +vgH +aHa +vJP +hKd +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +dEH +dEH +dEH +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +lUz +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(7,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +vJP +vJP +vJP +mvj +tBb +vgH +aHa +hKd +vJP +vJP +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +opX +dEH +qXp +dEH +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +wiR +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(8,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +vJP +psp +lta +qCs +vgH +aHa +aHa +hKd +ikx +vJP +vJP +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +fNt +opX +dEH +dEH +dEH +mQB +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +wiR +wiR +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cZs +sNy +hsL +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +psp +psp +psp +psp +psp +psp +"} +(9,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +vJP +ikx +ikx +pLh +vgH +aHa +aHa +vJP +vJP +lta +vJP +vJP +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +qJZ +psp +psp +psp +psp +psp +psp +psp +fNt +fNt +oHv +iDL +opX +dEH +dEH +dEH +mQB +mQB +psp +psp +ctX +dfy +ctX +ctX +ctX +ctX +ctX +ctX +ctX +ctX +tIZ +tIZ +jNs +uFR +ctX +ctX +ctX +ctX +ctX +ctX +ctX +ctX +ctX +ctX +ctX +ctX +ctX +dfy +ctX +ctX +psp +psp +psp +wiR +wiR +wiR +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jXR +jXR +jXR +jXR +hsL +sNy +hsL +hsL +sNy +hsL +hsL +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +cZs +cZs +sNy +hsL +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +psp +psp +psp +psp +psp +psp +"} +(10,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jkc +vYW +jkc +vYW +vYW +jkc +jkc +jkc +vYW +jkc +vYW +jkc +vYW +vYW +jkc +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +vJP +vJP +psp +psp +vJP +vJP +psp +lta +hKd +vgH +aHa +vJP +vJP +hKd +vJP +hKd +hKd +lta +lta +hKd +vJP +hKd +psp +psp +psp +psp +psp +psp +psp +psp +hvE +whe +wwa +lXp +psp +psp +psp +dVl +psp +jRf +uMw +fyl +mDZ +iDL +iDL +opX +bTN +dEH +dEH +dEH +mQB +fyl +rta +ctX +fcW +sjL +fcW +ctX +sjL +sjL +ctX +ctX +pkF +xsB +ojw +xsB +pdG +ctX +ctX +ctX +oFK +dfy +ctX +ctX +dfy +ctX +dfy +dfy +dfy +dfy +sjL +ctX +ctX +fyl +mDZ +xed +etB +wPQ +kQF +ocX +mDZ +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jXR +jXR +cZs +cZs +hsL +hsL +hsL +hsL +hsL +sNy +sNy +hsL +hsL +hsL +jXR +jXR +jXR +jXR +cZs +cZs +cZs +cZs +cZs +cZs +hsL +hsL +sNy +hsL +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +psp +psp +psp +psp +psp +psp +"} +(11,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jkc +vYW +vYW +jkc +jkc +jkc +jkc +vYW +vYW +vYW +mUy +mUy +jkc +jkc +jkc +vYW +vYW +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +vJP +vJP +vJP +vJP +hKd +vJP +vJP +hKd +ikx +vJP +vJP +hKd +psp +vJP +tDW +vJP +vgH +uWW +vJP +pLh +lta +vJP +vJP +vJP +vJP +hKd +vJP +hKd +vJP +vJP +psp +psp +psp +psp +psp +psp +oDM +ukr +rxF +vFC +vFC +kGw +wwa +vFC +aTV +vfX +pDN +bTC +bTC +ljO +fyl +oHv +fRg +bTN +dEH +dEH +dEH +mQB +oHv +rEI +dfy +sjL +dfy +sjL +dfy +fcW +sjL +dfy +dfy +pkF +xjP +xsB +sjL +peo +sjL +ctX +dfy +prN +dfy +dfy +ctX +eBH +dfy +sjL +sjL +sjL +sjL +sjL +obG +dfy +fyl +fNt +nnc +oFv +mDZ +oSU +mDZ +fNt +dfy +dfy +ctX +ctX +ctX +ctX +ctX +ctX +ctX +psp +psp +psp +psp +jXR +cZs +cZs +cZs +sNy +hsL +jXR +jXR +sNy +hsL +hsL +sNy +sNy +sNy +hsL +hsL +hsL +hsL +hsL +cZs +cZs +cZs +cZs +cZs +sNy +sNy +hsL +hsL +sNy +hsL +sNy +jXR +jXR +jXR +jXR +jXR +psp +psp +psp +psp +psp +psp +"} +(12,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jkc +vYW +jkc +vYW +jkc +jkc +vYW +jkc +jkc +jkc +mUy +lcy +ahT +lcy +jkc +jkc +vYW +jkc +jkc +jkc +vYW +jkc +vYW +jkc +vYW +jkc +jkc +jkc +vJP +vJP +vJP +vJP +vJP +vJP +hKd +hKd +vJP +ikx +lta +hKd +vJP +vJP +ikx +hKd +pLh +aHa +aHa +aHa +vJP +hKd +vJP +ikx +hKd +vJP +lta +hKd +hKd +hKd +vJP +psp +vJP +psp +psp +psp +psp +qwu +bOD +vFC +qJZ +ksN +luN +vFC +tMf +psp +jRf +psp +qHo +mDZ +ptN +ljO +oHv +iDL +opX +dEH +dEH +dEH +mQB +fyl +pVa +sjL +sjL +dfy +sjL +obG +fcW +ctX +sjL +dfy +wsp +pkF +rLE +pKL +pkF +wsp +dfy +oBv +arl +sjL +dfy +dfy +dfy +dfy +dfy +sjL +dfy +dfy +obG +sjL +sjL +www +www +xtZ +fyl +xmv +fNt +fyl +wTq +dfy +dfy +sjL +sjL +ctX +ctX +ctX +ctX +sjL +psp +psp +psp +psp +cZs +cZs +cZs +sNy +hsL +sNy +jXR +jXR +hsL +sNy +hsL +hsL +sNy +hsL +sNy +sNy +sNy +hsL +hsL +hsL +hsL +cZs +hsL +hsL +sNy +hsL +sNy +sNy +hsL +cZs +cZs +cZs +jXR +jXR +jXR +jXR +psp +psp +psp +psp +psp +psp +"} +(13,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jkc +jkc +vYW +jkc +vYW +jkc +jkc +jkc +jkc +jkc +jkc +lcy +vYW +sQX +ahT +lcy +jkc +jkc +jkc +jkc +jkc +jkc +jkc +jkc +jkc +jkc +vYW +jkc +jkc +vJP +vJP +vJP +vJP +vJP +hKd +hKd +hKd +vJP +vJP +vJP +ikx +vJP +ikx +lta +lFJ +vJP +ojZ +aHa +vgH +aHa +hKd +vJP +lta +vJP +vJP +hKd +vJP +vJP +vJP +vJP +vJP +hKd +vJP +psp +psp +psp +psp +lbE +iJP +gtT +uZn +rmL +eFD +psp +psp +psp +qHo +qHo +qHo +fyl +rLn +fNt +iDL +opX +dEH +dEH +dEH +mQB +fyl +pVa +sjL +fcW +sjL +dfy +sjL +sjL +dfy +fcW +sjL +kah +pKL +xsB +pKL +pKL +pKL +ctX +iLu +prN +sjL +sjL +dfy +dfy +dfy +sjL +sjL +dfy +sjL +dfy +dfy +sjL +fNt +fNt +lay +fNt +duq +fNt +fNt +wTq +obG +sjL +obG +sjL +obG +sjL +dfy +sjL +sjL +psp +psp +psp +psp +cZs +cZs +cZs +hsL +sNy +hsL +sNy +hsL +sNy +hsL +cZs +cZs +jXR +jXR +hsL +hsL +hsL +hsL +jXR +jXR +hsL +sNy +hsL +hsL +sNy +hsL +hsL +hsL +sNy +cZs +cZs +cZs +cZs +jXR +jXR +jXR +psp +psp +psp +psp +psp +psp +"} +(14,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +agk +jkc +wko +evt +evt +jkc +wko +jkc +jkc +vYW +jkc +vJP +vJP +vJP +vJP +vJP +vJP +vJP +hKd +vJP +vJP +hKd +vJP +hKd +vJP +lta +ikx +hKd +vJP +tBb +vgH +aHa +vJP +vJP +hKd +vJP +vJP +vJP +hKd +hKd +vJP +vJP +hKd +hKd +hKd +psp +psp +psp +psp +psp +psp +aTF +psp +psp +psp +psp +psp +oHv +osA +osA +osA +fyl +rLn +fNt +oHv +opX +dEH +dEH +dEH +kas +fyl +rta +dfy +sjL +sjL +sjL +obG +sjL +sjL +sjL +sjL +fcW +pKL +sjL +tIZ +sjL +xsB +sjL +oVI +pKL +dfy +sjL +dfy +sjL +dfy +dfy +dfy +dfy +dfy +pKL +pKL +sjL +fNt +fyl +pVa +fNt +mDZ +bsm +fNt +fyl +dfy +cdi +obG +sjL +sjL +sjL +sjL +dfy +sjL +psp +psp +psp +psp +hsL +sNy +hsL +hsL +hsL +sNy +hsL +sNy +hsL +cZs +cZs +jXR +jXR +jXR +jXR +hsL +sNy +sNy +jXR +jXR +sNy +hsL +hsL +hsL +sNy +hsL +sNy +hsL +hsL +hsL +cZs +cZs +cZs +hsL +jXR +jXR +psp +psp +psp +psp +psp +psp +"} +(15,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jkc +evt +jkc +vYW +jkc +evt +jkc +jkc +jkc +vYW +vJP +iGZ +vJP +kBH +vJP +iGZ +vJP +vJP +vJP +ikx +vJP +vJP +ikx +vJP +tDW +vJP +tDW +vJP +aHa +vgH +aHa +vJP +fTO +vJP +vJP +ikx +vJP +vJP +hKd +hKd +hKd +vJP +hKd +vJP +vJP +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +fNt +fNt +xYU +feW +wNn +vEU +rLn +bSY +nOu +opX +dEH +dEH +dEH +mQB +fyl +fNt +fNt +www +fyl +oVT +www +oVT +fyl +oVT +fNt +oVT +fyl +oVT +fyl +iDL +iDL +bsm +fyl +iDL +fyl +fNt +fyl +iDL +fyl +fNt +pDj +fNt +fNt +fyl +fyl +iDL +fyl +fNt +pVa +mDZ +lmG +fNt +fyl +fyl +sjL +cdi +sjL +sjL +pvC +sjL +dfy +dfy +sjL +psp +psp +psp +psp +sNy +sNy +sNy +sNy +jXR +jXR +hsL +hsL +cZs +cZs +cZs +jXR +jXR +jXR +jXR +sNy +hsL +cZs +hsL +sNy +hsL +sNy +sNy +sNy +hsL +sNy +hsL +sNy +sNy +sNy +sNy +cZs +cZs +cZs +jXR +jXR +psp +psp +psp +psp +psp +psp +"} +(16,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +vYW +jkc +jkc +vYW +jkc +jkc +jkc +jkc +jkc +jkc +vJP +kBH +vJP +vJP +vJP +kBH +vJP +vJP +hKd +vJP +vJP +vJP +ikx +vJP +hKd +hKd +vJP +pLh +vgH +aHa +aHa +vJP +vJP +njU +lta +hKd +vJP +hKd +vJP +hKd +hKd +vJP +vJP +hKd +vJP +fyl +psp +psp +psp +psp +psp +fNt +fNt +fNt +oHv +fyl +fyl +let +let +let +let +abk +nOu +oHv +mQB +dEH +dEH +dEH +mQB +fyl +ocQ +fNt +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fNt +fyl +fNt +fyl +fyl +snE +fNt +iDL +fyl +uFR +fNt +fNt +iDL +iDL +fyl +iDL +fNt +fyl +fNt +fyl +iDL +aQF +wNn +wNn +xXh +mDZ +fNt +mDZ +fNt +wTq +sjL +sjL +obG +sjL +sjL +sjL +obG +sjL +ctX +psp +psp +psp +psp +hsL +hsL +hsL +jXR +jXR +jXR +jXR +cZs +cZs +cZs +cZs +cZs +jXR +jXR +hsL +sNy +hsL +cZs +cZs +hsL +sNy +hsL +hsL +hsL +sNy +jXR +jXR +hsL +hsL +hsL +hsL +hsL +sNy +hsL +jXR +jXR +psp +psp +psp +psp +psp +psp +"} +(17,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +vYW +evt +jkc +jkc +jkc +vYW +rod +vYW +ned +jkc +vJP +kBH +vJP +vJP +vJP +vJP +hKd +vJP +hKd +vJP +hKd +vJP +vJP +ikx +hKd +vJP +hKd +qCs +vgH +aHa +sCl +hKd +vJP +mNg +fTO +vJP +vJP +ikx +vJP +vJP +vJP +vJP +vJP +vJP +fyl +fNt +fNt +psp +fNt +fyl +fNt +mDZ +www +oqp +fyl +fyl +uYf +wNn +xYU +qHo +xJw +fyl +oHv +iDL +mQB +dEH +qXp +dEH +mQB +oHv +xtZ +fNt +oVT +fNt +oVT +fyl +fyl +fNt +hQx +arN +snE +fNt +fyl +wNn +let +aQF +rmr +let +xtZ +fyl +fNt +fyl +fyl +iDL +iDL +fNt +fNt +fyl +fyl +fNt +wNn +let +let +wNn +fNt +bsm +fNt +fyl +wTq +cdi +dfy +sjL +sjL +pvC +pvC +obG +dfy +ctX +psp +psp +psp +psp +jXR +sNy +sNy +jXR +jXR +jXR +jXR +sNy +sNy +cZs +cZs +cZs +sNy +hsL +hsL +hsL +cZs +cZs +cZs +cZs +hsL +sNy +sNy +sNy +jXR +jXR +jXR +jXR +sNy +hsL +jXR +jXR +hsL +hsL +jXR +jXR +psp +psp +psp +psp +psp +psp +"} +(18,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jkc +wko +jkc +jkc +ned +vYW +vYW +rod +jkc +jkc +vJP +vJP +vJP +vJP +vJP +kBH +vJP +vJP +hKd +ikx +vJP +vJP +vJP +vJP +ikx +lta +hKd +aHa +vgH +aHa +hKd +ikx +ikx +ikx +fTO +hKd +ikx +ikx +vJP +vJP +vJP +vJP +vJP +fyl +fNt +mDZ +mDZ +fNt +fyl +iDL +fyl +fNt +fNt +qHo +fyl +oHv +oHv +hZM +frk +gTX +fpJ +fyl +iDL +iDL +mQB +bTN +dEH +dEH +uic +mDZ +fyl +fNt +oVT +fyl +oVT +www +vIR +fNt +oVT +fNt +oVT +fNt +fyl +let +let +let +let +let +pVa +fNt +fNt +fyl +fNt +fNt +fNt +fNt +fNt +fNt +fyl +iDL +nba +aQF +wNn +ich +mDZ +bsm +fNt +fyl +fyl +sjL +sjL +sjL +sjL +pvC +pvC +sjL +dfy +ctX +psp +psp +psp +psp +jXR +sNy +hsL +hsL +jXR +jXR +hsL +hsL +hsL +sNy +cZs +tiv +hsL +hsL +hsL +jXR +jXR +cZs +cZs +cZs +hsL +hsL +hsL +hsL +jXR +jXR +jXR +jXR +hsL +sNy +jXR +jXR +hsL +sNy +jXR +jXR +psp +psp +psp +psp +psp +psp +"} +(19,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jkc +jkc +jkc +vYW +rod +ned +vYW +vYW +ned +jkc +vJP +iGZ +kBH +vJP +kBH +bAA +hKd +vJP +hKd +vJP +hKd +tDW +vJP +hKd +tDW +vJP +mju +vgH +aHa +hKd +hKd +sCl +ikx +vJP +fTO +mNg +njU +hKd +vJP +vJP +vJP +vJP +fNt +fNt +fNt +mDZ +fNt +mDZ +www +iDL +iDL +fNt +fNt +oHv +qls +iDL +fNt +pdc +gTX +qHo +fyl +fyl +qHo +mQB +mQB +bTN +dEH +dEH +dXN +dXN +ldZ +fNt +fyl +fyl +fNt +www +oVT +fyl +fyl +fNt +oVT +fNt +oVT +wNn +aQF +let +wNn +aQF +izp +fNt +fyl +pDj +fNt +saO +ccX +fNt +fyl +fyl +fyl +iDL +iDL +iDL +fyl +xtZ +fNt +fyl +mDZ +fNt +vIR +sjL +pKL +sjL +sjL +obG +obG +sjL +ctX +ctX +psp +psp +psp +psp +jXR +jXR +sNy +sNy +sNy +sNy +hsL +sNy +hsL +hsL +hsL +sNy +hsL +sNy +sNy +jXR +jXR +hsL +hsL +hsL +sNy +sNy +sNy +hsL +hsL +jXR +jXR +hsL +hsL +sNy +sNy +hsL +sNy +hsL +jXR +jXR +psp +psp +psp +psp +psp +psp +"} +(20,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jkc +jkc +jkc +vYW +vYW +vYW +rod +vYW +jkc +jkc +jkc +jkc +jkc +jkc +mUy +vYW +vJP +hKd +vJP +hKd +vJP +tDW +vJP +tDW +vJP +hKd +vgH +vgH +aHa +sCl +hKd +hKd +sCl +hKd +hKd +ikx +vJP +fTO +fTO +skh +skh +vJP +wTq +fNt +wTq +mDZ +fNt +fyl +rQE +wTq +fyl +fyl +ozM +saO +cfD +jLh +saO +fNt +ccX +ozM +fNt +fyl +saO +hfN +cEi +pYg +dEH +dEH +xtX +cEi +ggn +fPj +ccX +xmz +vIN +mDZ +kBD +fNt +iDL +iDL +oVT +fNt +fyl +wNn +aQF +let +let +let +ocQ +fNt +fNt +fNt +wNn +wNn +wNn +let +vwo +wNn +fNt +fNt +iDL +fyl +fNt +pVa +bsm +fNt +uJn +fyl +fyl +sjL +dfy +obG +sjL +sjL +sjL +dfy +ctX +ctX +psp +psp +psp +psp +jXR +jXR +jXR +jXR +hsL +hsL +sNy +hsL +sNy +sNy +sNy +hsL +sNy +hsL +hsL +sNy +hsL +sNy +hsL +tiv +hsL +hsL +hsL +sNy +sNy +sNy +sNy +sNy +sNy +hsL +hsL +hsL +cZs +cZs +jXR +jXR +psp +psp +psp +psp +psp +psp +"} +(21,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jkc +jkc +vYW +rod +vYW +vYW +vYW +oPV +kjb +oPV +jkc +ces +jkc +jkc +mUy +vYW +pLh +vJP +vJP +vJP +hKd +ikx +vJP +vJP +vJP +hKd +vgH +vgH +aHa +hKd +sCl +ikx +hKd +hKd +sCl +vJP +vJP +npt +mNg +vJP +vJP +skh +fyl +fyl +wTq +fyl +mDZ +wTq +fyl +wTq +kQr +bsm +hQx +bsm +bsm +bsm +bsm +bsm +hQx +hQx +bsm +bsm +bsm +fMX +mRp +mRp +wXm +kWe +mRp +mRp +nfW +hQx +bsm +bsm +hQx +kBi +skw +ccX +ocQ +udU +xCr +xNU +wRs +wjU +mEZ +aQF +let +tZL +izp +fNt +fNt +wTq +mHa +mHa +let +mHa +let +wNn +fyl +wTq +fNt +fNt +fNt +pVa +iDL +fyl +hQx +fNt +wTq +cdi +dfy +obG +pKL +sjL +obG +dfy +ctX +ctX +psp +psp +psp +psp +psp +psp +psp +psp +jXR +sNy +hsL +hsL +hsL +hsL +hsL +sNy +hsL +hsL +sNy +hsL +sNy +hsL +sNy +hsL +hsL +hsL +hsL +sNy +hsL +hsL +hsL +hsL +hsL +hsL +sNy +cZs +cZs +cZs +jXR +jXR +psp +psp +psp +psp +psp +psp +"} +(22,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +mUz +mhs +oxC +duF +oxC +mhs +mhs +oPV +mhs +oxC +fKU +exz +exz +bjl +jkc +jkc +vYW +jkc +fyl +fNt +fyl +fyl +fyl +fyl +gGJ +fyl +hHf +bsm +hQx +hQx +fyl +fyl +oHv +gGJ +fNt +wTq +wTq +gGJ +alA +fNt +fNt +mDZ +fNt +mDZ +fyl +fyl +fyl +mDZ +gTA +bsm +bsm +bsm +bsm +bsm +bsm +bsm +hQx +bsm +bsm +bsm +bsm +hQx +hQx +sFB +sFB +mRp +mRp +dEH +mRp +mRp +fMX +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +hQx +hQx +hQx +hQx +hQx +fyl +mDZ +fyl +mDZ +udU +wRs +wRs +xNU +ich +bTR +mHa +let +mHa +mHa +bNF +udU +gOq +jNN +udU +iWG +bsm +skw +lmG +mDZ +fNt +dfy +dfy +obG +sjL +sjL +obG +sjL +ctX +ctX +psp +psp +psp +psp +psp +psp +xgK +psp +jXR +sNy +hsL +sNy +hsL +sNy +jXR +jXR +hsL +sNy +hsL +sNy +hsL +hsL +sNy +hsL +jXR +jXR +hsL +sNy +hsL +sNy +hsL +hsL +hsL +tiv +hsL +hsL +cZs +cZs +jXR +jXR +psp +psp +psp +psp +psp +psp +"} +(23,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +cVA +pjf +jRb +lzl +cVA +cVA +dgN +elF +jRb +jRb +jRb +kRw +jRb +inX +oPV +jkc +jkc +fNt +fyl +fyl +wTq +fNt +wTq +fyl +oHv +fyl +kgO +bsm +hQx +hQx +fyl +stC +fyl +fyl +oHv +fyl +oHv +fyl +fyl +www +wTq +wTq +mDZ +fPj +ccX +lep +bsm +bsm +hQx +hQx +bsm +hQx +jRP +tRS +xka +mDZ +fNt +cUw +cUw +fNt +fyl +hHf +fMX +cEi +sbX +rMJ +kWe +hOH +cEi +mQB +jRP +jRP +kgO +hQx +bsm +bsm +bsm +bsm +bsm +bsm +skw +fyl +hQx +bsm +hQx +skw +ccX +lep +bsm +bsm +hQx +hQx +hQx +hQx +hQx +hQx +hQx +hQx +bsm +bsm +bsm +bsm +bsm +hQx +hQx +skw +fNt +gFp +lQR +dfy +obG +pKL +sjL +sjL +dfy +ctX +ctX +psp +psp +psp +psp +psp +mDZ +bsm +psp +jXR +sNy +sNy +hsL +sNy +jXR +jXR +jXR +jXR +sNy +hsL +hsL +sNy +sNy +hsL +sNy +jXR +jXR +hsL +sNy +sNy +hsL +sNy +sNy +sNy +hsL +sNy +sNy +cZs +cZs +cZs +jXR +psp +psp +psp +psp +psp +psp +"} +(24,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +giS +giS +khr +bQg +bQg +vYW +uEL +cVA +uEL +uEL +uEL +xLa +tIk +mUz +jRb +mUz +oPV +jkc +fNt +fyl +fNt +fNt +fNt +wTq +fyl +fyl +fyl +oHv +hHf +hQx +hQx +bsm +mDZ +fPj +fPj +ccX +fPj +ccX +fPj +ccX +fPj +fPj +mDZ +lep +bsm +bsm +bsm +bsm +bsm +bsm +lMt +bsm +wPK +fNt +fyl +mDZ +fNt +fyl +fNt +wTq +wTq +rlg +mDZ +dXN +mQB +mQB +ryU +dEH +wXm +mQB +mQB +oHv +fyl +fyl +mDZ +cUw +jRP +jRP +hHf +hQx +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +hQx +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +hQx +fyl +gFp +gFp +gFp +www +fNt +fyl +www +fNt +psp +psp +psp +psp +psp +psp +psp +mDZ +bsm +psp +psp +psp +hsL +sNy +hsL +jXR +jXR +jXR +jXR +hsL +sNy +hsL +sNy +hsL +sNy +hsL +hsL +hsL +sNy +hsL +hsL +sNy +hsL +sNy +jXR +jXR +jXR +hsL +sNy +cZs +cZs +jXR +psp +psp +psp +psp +psp +psp +"} +(25,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +vYW +jkc +vYW +rod +vYW +vYW +rod +vYW +vYW +jkc +jkc +jkc +jkc +vYW +tIk +jRb +mUz +oPV +fNt +fNt +fyl +fNt +fyl +wTq +fNt +fyl +oHv +oHv +oHv +doi +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +hQx +bsm +bsm +bsm +bsm +wwD +jRP +fNt +fyl +oFv +fNt +fyl +fNt +xtZ +wNu +udU +rta +hZn +udU +wNu +udU +udU +oHv +mQB +dEH +dEH +kas +fyl +fyl +fyl +fyl +fyl +oHv +fyl +fyl +fyl +fyl +oHv +jRP +cUw +cUw +jRP +jRP +cUw +cUw +mDZ +jRP +cUw +hHf +hQx +fyl +cUw +jRP +jRP +cUw +cUw +cUw +cUw +cUw +cUw +hHf +xbY +bsm +bsm +gGN +gFp +fyl +gFp +www +fNt +fyl +www +fNt +fyl +psp +psp +psp +psp +psp +mDZ +jxi +hQx +psp +psp +psp +hsL +cZs +hsL +hsL +jXR +jXR +hsL +sNy +hsL +hsL +hsL +sNy +cZs +sNy +cZs +cZs +hsL +sNy +hsL +sNy +psp +psp +psp +psp +psp +jXR +hsL +sNy +hsL +jXR +psp +psp +psp +psp +psp +psp +"} +(26,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jkc +jkc +vYW +vYW +vYW +vYW +vYW +vYW +jkc +jkc +jkc +jkc +jkc +mUy +oPV +tIk +jRb +vYW +fyl +fNt +wTq +fyl +fyl +fyl +wTq +fyl +fyl +stC +fyl +sRK +bsm +bsm +bsm +hQx +hQx +bsm +bsm +hQx +hQx +bsm +hQx +hQx +bsm +bsm +wwD +cUw +cUw +mDZ +wTq +wTq +wTq +fNt +fyl +wBm +fNt +fNt +pVa +fNt +mDZ +fyl +oOw +fyl +mDZ +mDZ +fyl +www +opX +dEH +dEH +mQB +fyl +fyl +oHv +fyl +let +let +let +let +fyl +fyl +fyl +fyl +oHv +fyl +fyl +fyl +oHv +fyl +fyl +fyl +fyl +oHv +fyl +bsm +mDZ +mDZ +fyl +fyl +fyl +oHv +mDZ +bYt +xUz +mVk +eoN +bsm +bsm +lmb +gFp +gFp +fyl +www +fNt +fyl +fyl +www +fyl +fyl +psp +psp +psp +fyl +oHv +lmG +hQx +mDZ +psp +psp +psp +cZs +cZs +cZs +hsL +sNy +hsL +hsL +hsL +jXR +jXR +sNy +cZs +cZs +cZs +cZs +cZs +hsL +sNy +hsL +psp +ahS +nXA +nXA +ahS +jXR +sNy +hsL +sNy +jXR +psp +psp +psp +psp +psp +psp +"} +(27,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +evt +jkc +wko +jkc +vYW +rod +vYW +rod +jkc +jkc +vYW +mUy +vYW +jkc +jkc +mDZ +bsm +bsm +fNt +fNt +fyl +fNt +fNt +fyl +wTq +oHv +fyl +fyl +tJr +mDZ +wOO +bsm +bsm +cJy +wwD +cUw +cUw +mDZ +mDZ +lHh +vIN +qud +vIN +cUw +fNt +wNu +udU +wNu +lay +fNt +udU +fNt +fyl +hca +fNt +fNt +pVa +mDZ +jLu +fyl +mDZ +fyl +fyl +mDZ +fNt +www +xqZ +qXp +dEH +mQB +oHv +fyl +udU +rta +wjU +wjU +let +wjU +udU +udU +udU +voP +udU +voP +udU +udU +rta +fyl +oHv +fyl +fyl +fyl +fyl +fyl +fyl +oHv +fyl +mDZ +mDZ +mDZ +tdl +tdl +tdl +uzs +fyl +bsm +bsm +gGN +gFp +gFp +gFp +www +fyl +fyl +fyl +fyl +fyl +fyl +mDZ +psp +fyl +fyl +pnA +hQx +bsm +oHv +psp +psp +psp +cZs +cZs +cZs +cZs +hsL +sNy +hsL +sNy +jXR +jXR +hsL +cZs +cZs +cZs +sNy +hsL +sNy +hsL +sNy +psp +psp +nXA +rXW +oqz +jXR +hsL +sNy +hsL +jXR +psp +psp +psp +psp +psp +psp +"} +(28,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jkc +jkc +evt +jkc +jkc +vYW +vYW +ned +jkc +jkc +mUy +mUy +mUy +jkc +jkc +fNt +wtU +bsm +hQx +fNt +fyl +wTq +fyl +fyl +wTq +fyl +fyl +oHv +fyl +oHv +bsm +bsm +bsm +oqX +wNu +rta +fyl +oHv +fyl +wNn +let +fyl +wNn +ich +let +mHa +fyl +fyl +fyl +wTq +www +jXo +fNt +fyl +fNt +fyl +pVa +fyl +bSY +fyl +fyl +fyl +mDZ +fyl +fNt +fyl +opX +bTN +dEH +mQB +mQB +oHv +mDZ +fyl +let +xYU +let +bTR +mDZ +mDZ +mDZ +mDZ +mDZ +oHv +mDZ +mDZ +khd +voP +mDZ +rta +xNU +udU +udU +ocQ +udU +udU +udU +xNU +hxl +tdl +sPP +iEP +hQx +tdl +mDZ +bsm +bsm +gGN +fyl +gFp +fyl +www +fyl +fyl +fyl +rQE +fyl +iDL +mDZ +fyl +fyl +oHv +kRc +bsm +bsm +mDZ +psp +psp +psp +cZs +cZs +cZs +cZs +hsL +hsL +sNy +hsL +hsL +hsL +sNy +hsL +hsL +cZs +sNy +hsL +hsL +sNy +hsL +sNy +eEa +oqz +rXW +rXW +cZs +sNy +hsL +sNy +jXR +psp +psp +psp +psp +psp +psp +"} +(29,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jkc +vYW +jkc +jkc +jkc +vYW +rod +jkc +vYW +jkc +jkc +vYW +fyl +fNt +wTq +fNt +fNt +hQx +bsm +mDZ +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +oHv +mDZ +bsm +bsm +wwD +xtZ +stC +fyl +fyl +fyl +fNt +wNn +mHa +wNn +oTr +fyl +oTr +wNn +oTr +fNt +fyl +fNt +oVT +fNt +pVa +uEp +wiz +www +vCv +mDZ +fyl +mDZ +fyl +fyl +fyl +fyl +fyl +pxa +opX +bTN +dEH +dEH +mQB +pVa +mDZ +mDZ +sTM +bTR +let +let +oHv +fyl +fyl +bTR +bTR +gzu +fyl +oHv +khd +dHw +fyl +oHv +fyl +mDZ +mDZ +hQx +fyl +mDZ +fyl +oHv +mDZ +lHe +iEP +fHA +mDZ +fyl +fyl +hQx +bsm +lmb +fyl +gFp +gFp +www +fNt +rQE +fyl +rQE +vKe +rQE +fNt +fyl +fyl +fyl +pnA +bsm +uJn +fyl +fyl +psp +psp +hsL +cZs +cZs +cZs +cZs +sNy +hsL +hsL +sNy +sNy +hsL +sNy +cZs +cZs +sNy +hsL +sNy +hsL +sNy +psp +ahS +eYj +rXW +ahS +jXR +hsL +sNy +hsL +jXR +psp +psp +psp +psp +psp +psp +"} +(30,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jkc +jkc +vYW +jkc +jkc +vYW +jkc +jkc +vYW +jkc +jkc +vYW +fNt +fyl +fyl +fNt +fNt +fyl +bsm +hQx +fyl +wTq +fyl +fNt +www +fyl +fyl +oHv +fyl +oOm +bsm +hQx +khd +fyl +oHv +fyl +oHv +fyl +fNt +let +let +wNn +let +fyl +oTr +wNn +let +fyl +oVT +fNt +fyl +fyl +mEv +cxi +oFv +fNt +qtg +fyl +fyl +fyl +ufN +fyl +oOw +fNt +fyl +nOu +fyl +mQB +dEH +dEH +mQB +pVa +mDZ +mDZ +bTR +xYU +let +let +fyl +fyl +oHv +let +xYU +let +vJm +vJm +khd +oHv +fyl +qGx +fyl +oHv +fyl +pYz +mDZ +fyl +mDZ +fyl +mDZ +lHe +wiI +iEP +iEP +tdl +fyl +hHf +bsm +gGN +gFp +gFp +gFp +www +www +fyl +fyl +fNt +www +fyl +iDL +fyl +fyl +fyl +rzW +bsm +fyl +fyl +oHv +psp +psp +jXR +sNy +cZs +cZs +cZs +hsL +hsL +sNy +hsL +hsL +sNy +hsL +sNy +hsL +hsL +hsL +hsL +sNy +hsL +sNy +psp +psp +sNy +psp +sNy +hsL +sNy +hsL +jXR +psp +psp +psp +psp +psp +psp +"} +(31,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +evt +evt +wko +jkc +vYW +jkc +vYW +jkc +jkc +vYW +jkc +jkc +fyl +fNt +fyl +fNt +fNt +fNt +hQx +bsm +mDZ +fyl +fyl +fyl +wTq +wTq +fyl +fyl +oHv +fyl +bsm +bsm +gGN +oHv +uJn +fyl +oVT +fNt +fyl +wNn +oTr +wNn +oTr +wNn +let +let +let +fyl +fyl +fNt +fyl +fNt +lay +fNt +fyl +fyl +mDZ +jBh +oOw +mDZ +mDZ +fyl +fyl +fNt +nOu +fyl +fNt +mQB +dEH +dEH +kas +pVa +fyl +kLI +mDZ +fyl +pYz +fyl +fyl +fyl +wNi +let +bTR +rnl +mDZ +mDZ +khd +fyl +qGx +qGx +oOw +fyl +fyl +fyl +fyl +mDZ +fyl +tlC +fyl +mDZ +fUu +iEP +fyl +lHe +fyl +kQr +bsm +lmb +gFp +fyl +fyl +www +fyl +fyl +vKe +fNt +fyl +www +iDL +fyl +oHv +fyl +kRc +bsm +mDZ +fyl +mDZ +psp +psp +jXR +hsL +sNy +hsL +sNy +hsL +sNy +hsL +sNy +jXR +jXR +hsL +hsL +hsL +hsL +jXR +jXR +sNy +sNy +hsL +sNy +sNy +hsL +sNy +hsL +sNy +cZs +cZs +jXR +psp +psp +psp +psp +psp +psp +"} +(32,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jRb +jkc +vYW +jkc +vYW +jkc +vYW +jkc +vYW +jkc +jkc +jkc +jkc +wTq +fNt +fyl +fNt +wTq +fNt +fyl +hQx +bsm +fNt +wTq +fyl +fyl +wTq +oHv +fyl +fyl +oHv +bsm +bsm +gGN +fyl +mDZ +oHv +fyl +fyl +fyl +wNn +bTR +mRZ +aQF +let +let +let +oTr +fNt +oVT +fyl +oVT +fNt +fyl +fNt +fNt +ptm +hvy +raQ +mDZ +fyl +fNt +fNt +nOu +fyl +fNt +www +fNt +kas +dEH +dEH +mQB +mQB +fyl +mDZ +fyl +fyl +fyl +fyl +oHv +fyl +mDZ +gJs +let +let +mDZ +oHv +khd +mDZ +fyl +mDZ +fyl +aSM +pYz +fyl +hcY +fyl +pYz +fyl +qGx +uzs +tdl +tdl +tdl +uzs +pnA +bsm +bsm +gGN +gFp +gFp +sRR +iDL +fNt +fyl +fyl +www +fyl +fyl +fyl +mDZ +fyl +fyl +kRc +bsm +uJn +fyl +fyl +psp +psp +jXR +hsL +sNy +hsL +hsL +sNy +hsL +hsL +jXR +jXR +jXR +jXR +hsL +sNy +sNy +jXR +jXR +hsL +hsL +sNy +hsL +hsL +sNy +hsL +sNy +hsL +cZs +cZs +jXR +psp +psp +psp +psp +psp +psp +"} +(33,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +jkc +jkc +jkc +jkc +jkc +jkc +jkc +jkc +vYW +jkc +jkc +jkc +jkc +jkc +jkc +vYW +jkc +jkc +jkc +jkc +vYW +jkc +jkc +vYW +jkc +vYW +jkc +vYW +jkc +jkc +jkc +wTq +fNt +wTq +fNt +fyl +fNt +fyl +ljq +hQx +mDZ +fNt +fyl +fyl +fyl +fyl +fyl +fyl +mDZ +hQx +bsm +lmb +fyl +fyl +fyl +oVT +fyl +oVT +fyl +fyl +wNn +oTr +let +oTr +wNn +let +fNt +fyl +fNt +fyl +fyl +www +fyl +fNt +tUZ +oay +wiz +poE +fyl +fNt +fyl +fyl +fNt +nOu +vKe +fyl +opX +dEH +dEH +dEH +mQB +fyl +fyl +oHv +fyl +oHv +hQx +hQx +fyl +fyl +fyl +fyl +oHv +mDZ +mDZ +khd +dHw +fyl +oHv +fyl +fyl +pYz +fyl +fyl +fyl +fyl +aLP +mDZ +fyl +pBL +trc +jGY +fyl +rzW +bsm +bsm +lmb +gFp +gFp +gFp +rQE +www +vKe +fyl +fyl +fyl +vKe +fNt +fNt +fyl +fyl +oHv +hQx +bsm +osA +fyl +psp +psp +jXR +jXR +hsL +hsL +sNy +hsL +sNy +sNy +jXR +jXR +jXR +jXR +sNy +hsL +sNy +hsL +sNy +sNy +sNy +sNy +hsL +hsL +sNy +hsL +hsL +sNy +cZs +cZs +jXR +psp +psp +psp +psp +psp +psp +"} +(34,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jkc +jkc +jkc +vYW +vYW +vYW +jkc +vYW +jkc +vYW +vYW +jkc +jkc +vYW +vYW +jkc +vYW +jkc +vYW +jkc +vYW +jkc +jkc +vYW +vYW +jkc +jkc +jkc +fyv +jkc +fyl +fNt +fyl +fNt +fyl +fyl +fNt +fyl +bsm +hQx +fNt +fNt +wTq +vKe +fyl +fNt +fyl +mDZ +hQx +bsm +mDZ +oHv +oVT +fNt +fyl +fNt +oVT +fyl +oVT +fNt +fyl +fyl +oVT +fNt +oVT +fyl +fyl +fyl +hQx +hQx +hQx +hQx +hQx +iWf +wfT +gNJ +kBi +hQx +hQx +hQx +kBi +hQx +kBi +hQx +kBi +rRw +dEH +dEH +dEH +mQB +mDZ +fyl +fyl +hQx +moR +bsm +moR +hQx +fyl +oHv +fyl +fyl +ner +fyl +rta +mDZ +fyl +fyl +fyl +fyl +fyl +fyl +fyl +hQx +fyl +fyl +pYz +fyl +mDZ +vJm +pVa +fyl +pnA +bsm +bsm +gGN +fyl +fNt +fNt +iDL +fyl +fyl +fyl +fNt +fyl +fyl +fNt +fyl +fyl +oHv +fyl +mDZ +bsm +uJn +fyl +psp +psp +psp +psp +jXR +hsL +sNy +hsL +hsL +hsL +hsL +jXR +jXR +hsL +hsL +sNy +hsL +hsL +sNy +hsL +sNy +psp +psp +psp +psp +psp +jXR +hsL +cZs +cZs +jXR +psp +psp +psp +psp +psp +psp +"} +(35,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jkc +jkc +jkc +jkc +jkc +jkc +jkc +jkc +jkc +vYW +jkc +jkc +jkc +vYW +jkc +vYW +jkc +mUy +mUy +vYW +jkc +vYW +jkc +vYW +vYW +vYW +jkc +jkc +fyv +jkc +fyl +fNt +wTq +fyl +wTq +fNt +wTq +fNt +hQx +bsm +mDZ +fNt +fyl +vKe +wTq +fyl +fyl +lep +hQx +bsm +lmb +fyl +fyl +fNt +fyl +fNt +fyl +fyl +fyl +fyl +oVT +fyl +fyl +fNt +fyl +fNt +fyl +hQx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gbo +mDZ +mDZ +fyl +iAT +igK +pXy +lkC +hQx +fyl +fyl +fyl +fyl +let +let +let +let +fyl +pYz +fyl +hcY +fyl +fyl +fyl +hQx +fyl +fyl +fyl +mDZ +pYz +mDZ +pVa +oHv +kRc +bsm +hQx +lmb +fyl +fyl +fNt +fNt +fyl +fyl +vKe +fNt +iDL +fyl +www +www +fyl +fyl +fyl +kRc +bsm +bsm +fyl +psp +psp +psp +psp +jXR +jXR +hsL +sNy +sNy +hsL +hsL +sNy +hsL +sNy +hsL +tiv +sNy +sNy +hsL +sNy +sNy +sNy +psp +uNR +psp +uNR +jXR +hsL +sNy +hsL +jXR +psp +psp +psp +psp +psp +psp +"} +(36,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jkc +jkc +jkc +jkc +jkc +jkc +jkc +vYW +jkc +jkc +jkc +vYW +vYW +vYW +esm +oPV +mUy +jkc +jkc +jkc +vYW +jkc +jkc +jkc +vYW +jkc +vYW +vYW +fyl +fNt +fyl +fNt +fyl +fNt +fyl +fNt +lep +bsm +hQx +fNt +fNt +fyl +fyl +mDZ +kQr +hQx +bsm +bsm +lmb +fyl +fyl +fyl +oVT +fyl +oVT +fyl +fyl +fNt +fyl +fNt +fyl +fyl +fyl +fNt +hQx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hQx +oHv +hQx +hQx +ksW +wwH +xXE +bsm +hQx +fyl +fyl +pYz +let +let +xYU +let +fyl +fyl +fyl +fyl +fyl +fyl +bsm +fyl +fyl +pux +fyl +fyl +fyl +tlC +pVa +mDZ +kRc +bsm +hQx +gGN +fyl +oHv +fNt +fNt +www +fyl +fyl +fNt +fNt +fyl +fNt +fNt +fNt +fyl +fyl +oHv +hQx +bsm +fyl +fyl +psp +psp +psp +jXR +jXR +jXR +hsL +hsL +sNy +hsL +hsL +sNy +hsL +sNy +hsL +cZs +cZs +cZs +sNy +hsL +jXR +psp +psp +nQu +uNR +jXR +hsL +sNy +hsL +jXR +psp +psp +psp +psp +psp +psp +"} +(37,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jkc +jkc +jkc +jkc +vYW +jkc +jkc +jkc +vYW +jkc +jkc +jkc +jkc +jkc +oPV +oPV +jkc +jkc +vYW +jkc +jkc +jkc +jkc +fyv +jkc +vYW +jkc +wTq +fNt +fyl +fNt +wTq +bsm +bsm +bsm +bsm +bsm +bsm +aKZ +gGN +fyl +mDZ +lep +hQx +bsm +bsm +hQx +lmb +fNt +oVT +fNt +fyl +fyl +fyl +fNt +oVT +fyl +fyl +fNt +wTq +fyl +wTq +fyl +hQx +hZX +hZX +axx +fyl +fyl +mDZ +uEp +gSV +ruw +gSV +mDZ +fyl +mDZ +fyl +fyl +mDZ +fyl +mDZ +uJn +ruw +uJn +hZX +hZX +hZX +uJn +mDZ +moR +wkk +pXy +bXD +moR +hQx +fyl +oHv +fyl +let +bTR +let +sud +fyl +fyl +bsm +pYz +fyl +fyl +fyl +jGG +fyl +fyl +fyl +fyl +fyl +mDZ +iCd +fyl +pnA +bsm +hQx +btQ +fyl +fyl +fNt +fNt +fyl +fyl +vKe +fyl +fyl +fyl +fyl +fyl +fNt +fyl +fyl +fyl +pnA +bsm +fyl +oHv +mDZ +psp +fyl +psp +psp +psp +psp +psp +jXR +jXR +hsL +sNy +hsL +sNy +hsL +cZs +cZs +cZs +hsL +sNy +jXR +psp +uqi +qrD +pfH +jXR +sNy +hsL +sNy +jXR +psp +psp +psp +psp +psp +psp +"} +(38,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jkc +jkc +jkc +vYW +vYW +jkc +jkc +vYW +jkc +jkc +vYW +jkc +jkc +vYW +jkc +jkc +jkc +jkc +vYW +jkc +jkc +fyv +jkc +fyv +jkc +fyl +fNt +fyl +fNt +fyl +bsm +bsm +bsm +bsm +bsm +bsm +bsm +fyl +fyl +lep +hQx +bsm +bsm +hQx +wwD +fyl +fNt +fyl +fNt +oVT +fNt +fyl +fyl +oVT +fNt +fyl +hQx +hQx +hQx +hQx +hQx +hZX +hZX +hZX +fyl +pjU +pjU +pjU +pjU +pjU +czT +czT +czT +iEZ +oYG +oYG +oYG +oYG +oYG +oYG +oYG +opK +mDZ +hZX +hZX +hZX +hZX +hZX +fyl +hQx +hQx +bsm +hQx +fyl +mDZ +fyl +fyl +bTR +rnl +kKj +bTR +pYz +hcY +fyl +hQx +fyl +fyl +fyl +aLP +fyl +fyl +fyl +pYz +fyl +fyl +ocQ +fyl +kRc +bsm +hQx +gGN +fyl +fyl +fyl +fNt +vKe +fyl +brh +fNt +fyl +fyl +fyl +fyl +fNt +fyl +fyl +fyl +kRc +hQx +hQx +fyl +mDZ +psp +oHv +psp +tQJ +psp +psp +psp +jXR +jXR +jXR +jXR +jXR +jXR +cZs +cZs +cZs +sNy +hsL +hsL +jXR +psp +uNR +nQu +uNR +jXR +hsL +sNy +hsL +jXR +psp +psp +psp +psp +psp +psp +"} +(39,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +vYW +jkc +jkc +jkc +vYW +jkc +jkc +jkc +vYW +jkc +vYW +jkc +jkc +vYW +vYW +fyv +jkc +jkc +vYW +fyv +jkc +fyv +jkc +fyv +fNt +wTq +fyl +fyl +fNt +fyl +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +wwD +mDZ +fyl +wTq +fNt +fyl +fyl +vIR +fNt +vIR +fNt +oVT +fyl +hQx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +fyl +pjU +ldB +dZq +vyV +dZq +ibl +xkE +pms +qnM +bNE +xPD +qZV +qZV +uZe +tSA +iId +qnM +fyl +uJn +hZX +hZX +hZX +hZX +hZX +fyl +moR +hQx +oHv +fyl +pYz +mDZ +fyl +mDZ +mDZ +tBe +fyl +mDZ +fyl +mDZ +fyl +fyl +fyl +fyl +fyl +hcY +fyl +fyl +fyl +pYz +mDZ +wlM +fyl +kRc +bsm +bsm +lmb +oHv +fyl +fyl +fyl +fNt +iDL +fyl +www +www +brh +fyl +fyl +fyl +fyl +fyl +oHv +oHv +mDZ +bsm +fyl +fyl +psp +fyl +mDZ +tQJ +psp +tQJ +fyl +psp +psp +psp +psp +psp +psp +cZs +sNy +sNy +hsL +sNy +sNy +hsL +psp +psp +lMe +psp +jXR +hsL +sNy +hsL +jXR +psp +psp +psp +psp +psp +psp +"} +(40,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +vYW +jkc +jkc +jkc +jkc +jkc +vYW +vYW +vYW +jkc +jkc +jkc +fyv +vYW +vYW +jkc +jkc +jkc +vYW +fNt +wTq +fNt +fNt +fNt +wTq +saO +saO +fNt +ucI +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +hQx +wwD +wTq +fyl +wTq +fyl +fyl +vIR +fyl +fNt +fyl +vIR +fNt +fyl +hQx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lmG +fyl +pjU +fhi +dZq +wAB +dZq +wAB +bCU +pms +qnM +qZV +qZV +qZV +qZV +kVX +iId +qbM +qnM +xPp +fyl +fyl +uJn +fyl +hZX +hZX +hZX +oHv +fyl +fyl +oHv +xUz +mDZ +oHv +nHS +mDZ +rta +oHv +fyl +fyl +mDZ +fyl +fyl +hcY +hQx +fyl +fyl +fyl +fyl +fyl +fyl +vJQ +pVa +fyl +kRc +bsm +bsm +lmb +fyl +fyl +fyl +fyl +fNt +iDL +iDL +fNt +fNt +www +vKe +rQE +fyl +fNt +fyl +fyl +fyl +kRc +bsm +fyl +oHv +fyl +fyl +mDZ +mDZ +fyl +fyl +tQJ +tQJ +tQJ +psp +psp +psp +psp +jXR +hsL +hsL +sNy +hsL +hsL +sNy +psp +psp +psp +psp +jXR +sNy +hsL +sNy +jXR +psp +psp +psp +psp +psp +psp +"} +(41,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +vYW +jkc +jkc +jkc +jkc +jkc +jkc +jkc +jkc +fyv +jkc +fyv +fyl +fNt +hho +saO +saO +wTq +fNt +iDL +hQx +hQx +hQx +hQx +hQx +hQx +hQx +hQx +bsm +bsm +bsm +bsm +bsm +bsm +bsm +wPK +mDZ +oHv +fyl +fyl +fyl +vIR +fyl +wTq +fNt +fNt +fyl +fyl +hQx +uJn +hQx +hQx +uJn +hZX +hZX +mDZ +mDZ +fyl +fyl +fyl +fyl +fyl +fyl +pjU +faa +dZq +wAB +wAB +dZq +xkE +mmm +qnM +qZV +qZV +qZV +qZV +iEZ +tAs +oYG +tVP +pgK +pgK +pgK +tFN +hQx +fyl +hZX +hZX +uJn +uJn +uJn +uJn +uzs +tdl +fyl +tdl +uzs +goZ +dHw +fyl +fyl +osA +fyl +fyl +fyl +bsm +fyl +fyl +fyl +fyl +oHv +fyl +mDZ +cYJ +fyl +pnA +bsm +bsm +mDZ +fyl +fyl +fyl +oHv +fyl +mDZ +fyl +fyl +fyl +fNt +www +rQE +rQE +fyl +fyl +fyl +fyl +rzW +bsm +fyl +fyl +fyl +oHv +fyl +mDZ +fyl +fyl +fyl +fyl +iVM +tQJ +tQJ +fyl +psp +psp +jXR +sNy +hsL +sNy +hsL +hsL +sNy +sNy +sNy +sNy +sNy +hsL +sNy +hsL +jXR +psp +psp +psp +psp +psp +psp +"} +(42,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +vYW +jkc +jkc +jkc +jkc +jkc +vYW +jkc +jkc +fyv +jkc +vYW +mDZ +hQx +hQx +snE +snE +kBi +snE +hQx +hQx +bsm +bsm +bsm +bsm +bsm +lmG +bsm +bsm +bsm +bsm +bsm +bsm +bsm +fyl +oHv +mDZ +mDZ +mDZ +wTq +fyl +fyl +fyl +fyl +fyl +fNt +fyl +hQx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +mDZ +mDZ +pjU +pjU +pjU +pjU +pjU +pjU +pjU +nFQ +wAB +wAB +wAB +dZq +dZq +ftW +qnM +qZV +qZV +qZV +qZV +qnM +rJP +ecw +pgK +pXH +sYq +vek +pgK +tFN +fyl +hZX +hZX +hZX +hZX +hZX +hQx +tdl +fyl +fyl +bsm +tdl +lpb +fyl +qGx +mDZ +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +mDZ +fyl +fyl +kRc +bsm +bsm +bsm +fyl +oHv +oHv +fyl +fyl +fyl +fyl +oHv +fyl +fyl +fNt +iDL +iDL +iDL +fyl +fyl +fyl +kRc +bsm +fyl +fyl +oHv +fyl +bsm +hQx +fyl +hQx +iVM +iVM +iVM +iVM +iVM +tQJ +fyl +psp +jXR +hsL +sNy +hsL +hsL +hsL +hsL +sNy +hsL +sNy +hsL +hsL +sNy +hsL +jXR +psp +psp +psp +psp +psp +psp +"} +(43,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +vYW +jkc +jkc +jkc +jkc +fyv +dfy +cdi +fNt +wTq +hQx +hQx +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +wwD +jRP +jRP +xka +jRP +cUw +bsm +bsm +bsm +bsm +bsm +bsm +bsm +oHv +mDZ +osA +fyl +wTq +fyl +fyl +fyl +fyl +wTq +fyl +hQx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +mDZ +czT +fyl +tFN +dDA +nTe +nTe +nTe +eED +mbn +wYZ +dZq +dZq +dZq +wAB +xkE +pms +qnM +bNE +bNE +bNE +bNE +qnM +rJP +uaI +jrU +xUr +caK +pgK +qZV +pgK +uJn +hZX +hZX +hZX +hZX +hZX +hZX +tpB +tpB +kmf +iEP +uzs +lpb +fyl +oHv +fyl +pYz +fyl +fyl +hQx +fyl +fyl +jkv +oOw +fyl +fyl +fyl +aLP +lFC +osA +pnA +bsm +bsm +bsm +fyl +fyl +fyl +oHv +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +oHv +oHv +kRc +hQx +fyl +oHv +fyl +hQx +fyl +fyl +fyl +fyl +fyl +iVM +iVM +iVM +fyl +tQJ +tQJ +psp +jXR +sNy +hsL +sNy +sNy +cZs +cZs +cZs +cZs +hsL +hsL +sNy +hsL +sNy +jXR +psp +psp +psp +psp +psp +psp +"} +(44,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +uzs +sdU +sdU +uzs +sdU +sdU +sdU +uzs +psp +psp +psp +vYW +jkc +jkc +jkc +fyv +dfy +sjL +fNt +fNt +hQx +bsm +bsm +dwk +jRP +cUw +tRS +jRP +jRP +oAJ +snE +hQx +hQx +kBi +snE +kBi +hQx +gyc +uJn +gyc +hQx +gyc +hQx +hQx +oHv +fyl +fyl +fyl +wTq +fyl +wTq +fyl +fyl +fNt +hQx +hZX +hZX +jMF +fyl +fyl +fyl +czT +czT +czT +czT +qer +erc +nTe +nTe +nTe +dVw +mbn +uxt +uxt +uxt +uxt +quy +uxt +pms +bjR +oYG +oYG +oYG +oYG +tVP +iGn +ueO +pgK +pHV +khl +pgK +vWi +pgK +fyl +fyl +fyl +mDZ +uJn +hZX +hZX +hQx +fyl +iEP +oMj +tdl +khd +fyl +mDZ +mDZ +qGx +mDZ +fyl +hQx +fyl +fyl +fyl +fyl +fyl +fyl +fyl +vJQ +pVa +mDZ +pnA +bsm +bsm +fyl +fyl +fyl +oHv +fyl +fyl +oHv +fyl +fyl +oHv +fyl +oHv +fyl +fyl +fyl +fyl +mDZ +mDZ +pnA +bsm +hQx +fyl +hQx +fyl +fgY +jTK +psp +tQJ +tQJ +tQJ +tQJ +tQJ +tQJ +fyl +fyl +psp +jXR +hsL +sNy +hsL +hsL +cZs +cZs +cZs +cZs +hsL +sNy +hsL +sNy +hsL +jXR +psp +psp +psp +psp +psp +psp +"} +(45,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +sdU +uzF +cpC +bUx +fzE +sdU +sdU +sdU +psp +psp +psp +psp +sjL +cdi +dfy +cdi +dfy +cdi +fNt +mDZ +bsm +bsm +dwk +hQx +hQx +fNt +hQx +hQx +hQx +kBi +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gyc +fyl +wTq +wTq +fyl +fyl +fyl +wTq +fNt +hQx +hZX +hZX +fyl +czT +ePz +ePz +ePz +pkV +pkV +czT +mbn +mbn +bsB +rAW +fqW +mbn +mbn +wAB +wAB +dZq +dZq +dZq +dZq +awA +rJP +ptt +ydz +ydz +ydz +oOB +rsE +ydz +pgK +ans +khl +lTB +khl +tFN +pgK +pgK +pgK +tFN +mDZ +hZX +hZX +uzs +tdl +tdl +tdl +uzs +bWN +fyl +mDZ +mDZ +fyl +fyl +fyl +fyl +qAe +fyl +mQf +fyl +fyl +fyl +fyl +fyl +rta +fyl +kRc +bsm +bsm +fyl +fyl +fyl +fyl +fyl +oHv +mDZ +pYz +fyl +fyl +fyl +fyl +mDZ +fyl +fyl +fyl +mDZ +mDZ +oHv +hQx +bsm +skw +hQx +fyl +bsm +bsm +psp +psp +fyl +psp +psp +tQJ +psp +psp +jXR +jXR +sNy +tiv +hsL +sNy +hsL +hsL +cZs +cZs +hsL +hsL +hsL +sNy +hsL +jXR +jXR +psp +psp +psp +psp +psp +psp +"} +(46,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +sdU +pEG +xpU +wKh +iEP +sdU +sdU +sdU +psp +psp +psp +psp +sjL +cdi +dfy +sjL +dfy +sjL +fNt +hQx +bsm +wwD +uJn +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hQx +hQx +hQx +hQx +hQx +hQx +hQx +hQx +uJn +hZX +hZX +fyl +pLb +jWx +eOe +iId +aUb +pkV +czT +dZq +dZq +dZq +wAB +dZq +oGa +wAB +dZq +wAB +dZq +dZq +wAB +dZq +mQa +rJP +ptt +ydz +ydz +ydz +oOB +rsE +ydz +pgK +tFN +tFN +rpx +xUr +pgK +jwy +boQ +boQ +pgK +fyl +hZX +hZX +rFS +kVM +bQX +kVM +mDZ +fyl +fyl +mDZ +wNi +fyl +fyl +hcY +fyl +fyl +fyl +fyl +jkv +pYz +fyl +fyl +fyl +fyl +fyl +pnA +bsm +bsm +fyl +oHv +fyl +fyl +oHv +fyl +fyl +fyl +oHv +fyl +fyl +oHv +fyl +oHv +fyl +oHv +fyl +fyl +fyl +osA +bsm +hQx +skw +lep +bsm +hsC +psp +psp +psp +psp +psp +psp +psp +psp +jXR +jXR +sNy +hsL +sNy +jXR +jXR +hsL +hsL +hsL +hsL +jXR +jXR +hsL +hsL +sNy +hsL +psp +psp +psp +psp +psp +psp +"} +(47,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +sdU +iEP +dbJ +iEP +iEP +sdU +sdU +sdU +psp +psp +psp +psp +sjL +sjL +dfy +cdi +dfy +sjL +pnA +hQx +bsm +eAd +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +fyl +ruw +mDZ +mDZ +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +fyl +pLb +mdE +qZt +iId +iId +shd +czT +pms +wPT +dZq +dZq +dZq +wAB +dvI +hUy +hUy +hUy +dvI +dZq +dZq +tFN +iId +czT +ePz +ePz +ePz +czT +iUI +ydz +tFN +pgK +pgK +pgK +pgK +czT +gHu +gAM +bqf +pgK +fyl +hZX +hZX +hQx +mDZ +nOu +mDZ +mDZ +mDZ +mDZ +fyl +mDZ +mDZ +osA +aLP +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +vCv +fyl +kRc +bsm +bsm +fyl +fyl +fyl +mDZ +pYz +fyl +oHv +mDZ +fyl +fyl +xpr +fyl +fyl +fyl +oHv +fyl +fyl +oHv +fyl +cpI +bsm +hQx +hQx +hQx +fgY +ktl +psp +psp +jXR +jXR +jXR +jXR +jXR +hsL +sNy +hsL +hsL +sNy +jXR +jXR +jXR +jXR +sNy +sNy +sNy +jXR +jXR +sNy +sNy +hsL +sNy +psp +psp +psp +psp +psp +psp +"} +(48,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +uzs +sdU +sFf +uzs +sdU +sdU +sdU +sdU +psp +psp +psp +psp +sjL +sjL +dfy +sjL +fNt +fyl +kRc +bsm +wwD +uJn +hZX +hZX +fyl +mDZ +fyl +mDZ +fyl +mDZ +eZd +fyl +mDZ +bcP +fyl +mDZ +mDZ +fyl +mDZ +mDZ +vJm +mDZ +fyl +fyl +fyl +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +mDZ +fyl +pLb +mdE +qZt +iId +boQ +fDx +mVy +dZq +dZq +wAB +dvI +qwH +rAW +uCa +laY +wVN +kun +uCa +dZq +dZq +tFN +iId +rRM +qqn +khl +khl +ohp +rik +pnL +fdH +iId +iId +iId +pgK +vfR +qNs +iId +nlv +pgK +fyl +hZX +hZX +gyc +fyl +fyl +oHv +mDZ +ncw +fyl +osA +fyl +mDZ +pYz +fyl +fyl +hQx +fyl +mDZ +fyl +fyl +fyl +kLy +hQx +ocQ +fyl +kRc +bsm +bsm +fyl +fyl +fyl +oHv +fyl +oHv +mDZ +fyl +oHv +oHv +fyl +fyl +oHv +fyl +fyl +oHv +oHv +fyl +fyl +hQx +bsm +bsm +bsm +hQx +hQx +psp +psp +jXR +hsL +sNy +hsL +hsL +sNy +hsL +hsL +sNy +hsL +hsL +jXR +jXR +jXR +jXR +hsL +sNy +hsL +sNy +sNy +hsL +hsL +sNy +hsL +psp +psp +psp +psp +psp +psp +"} +(49,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uJC +eyx +sdU +sdU +sdU +sdU +sdU +psp +psp +psp +psp +sjL +bbA +pKL +bbA +fNt +mDZ +hQx +bsm +kQr +uJn +hZX +hZX +mDZ +tFN +jpH +tFN +tFN +fyl +mDZ +vJm +xsw +tFN +tFN +jpH +jpH +tFN +tFN +jpH +jpH +tFN +fyl +bcP +fyl +fyl +fyl +fyl +fyl +fyl +mDZ +fyl +fyl +hQx +hZX +hZX +mDZ +fyl +pLb +mdE +qZt +iId +iId +kux +xEd +rGt +dZq +tLe +uCa +wvB +icN +sue +xqH +jIR +uJt +hUy +dZq +wAB +tFN +iId +pLb +czT +khl +nbA +pLb +iTK +iTK +tFN +tFN +tFN +mQt +pgK +vgy +weW +weW +weW +pgK +fyl +hZX +hZX +hQx +mDZ +hDi +vQx +gcU +ycJ +hDi +lhw +lhw +gAe +gAe +gAe +lhw +lhw +gAe +gAe +dUc +fyl +hQx +rYy +aYc +fyl +fyl +agP +bsm +bsm +fyl +oHv +fyl +pYz +fyl +fyl +oHv +fyl +pYz +mDZ +fyl +fyl +fyl +oHv +fyl +oHv +oHv +fyl +oHv +hQx +bsm +bsm +xTE +hQx +hQx +psp +psp +jXR +cZs +cZs +cZs +sNy +hsL +hsL +hsL +hsL +hsL +sNy +hsL +jXR +jXR +hsL +sNy +hsL +sNy +hsL +hsL +sNy +hsL +jXR +jXR +psp +psp +psp +psp +psp +psp +"} +(50,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +ifN +psp +psp +sdU +sdU +sdU +sdU +sdU +psp +psp +psp +psp +sjL +sjL +pKL +bbA +iDL +kRc +hQx +wwD +hQx +kBi +hZX +hZX +mDZ +jpH +hom +hom +tFN +tFN +tFN +tFN +jpH +tFN +iHy +lGN +lGN +lGN +gnn +iHy +dST +tFN +uJn +fyl +mDZ +eZd +uJn +mDZ +jpH +jpH +tFN +tFN +mDZ +fyl +hZX +hZX +fyl +fyl +pLb +mdE +qZt +iId +iId +kux +xEd +rGt +czT +qxw +hUy +xRk +kiP +xqH +xqH +xqH +fUy +dvI +dZq +wAB +tFN +iId +pLb +mkz +khl +cGe +los +ydz +ydz +ydz +nUu +rJP +rJP +lQT +weW +jhL +weW +weW +pgK +fyl +hZX +hZX +uJn +fyl +ksi +ncr +xtI +dXB +ksi +pxU +bbK +pxU +pxU +dZq +pxU +pxU +pxU +dZq +nJr +hQx +bsm +bsm +hQx +bsm +aSZ +ijA +dZq +dZq +qVA +hDi +jDF +jDF +jDF +hDi +aDC +aDC +pms +lhw +gAe +lhw +pms +mDZ +fyl +xpr +fyl +fyl +kRc +let +bsm +bsm +mDZ +oHv +fyl +psp +psp +jXR +cZs +cZs +cZs +cZs +cZs +hsL +hsL +sNy +sNy +cZs +sNy +hsL +sNy +sNy +hsL +sNy +hsL +sNy +hsL +jXR +jXR +jXR +jXR +psp +psp +psp +psp +psp +psp +"} +(51,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uzs +sdU +sdU +sdU +uzs +psp +psp +psp +psp +sjL +sjL +dfy +sjL +fNt +pnA +bsm +mDZ +hQx +hQx +hZX +hZX +fyl +jpH +hLI +hom +hom +qPb +hom +hom +hom +hom +uVY +eRB +eRB +eRB +eRB +iHy +dST +tFN +tFN +fyl +hQx +hQx +hQx +hQx +tFN +hLI +hom +jpH +czT +czT +czT +czT +czT +czT +pLb +aCw +mVE +iId +iwZ +fDx +vCa +rGt +qMt +buu +dvI +dvI +aAq +sue +xqH +ooJ +nBj +isk +dZq +dZq +tFN +iId +oSt +eeK +khl +khl +oSt +ydz +ydz +ydz +nzX +rJP +fon +pgK +pgK +pgK +pgK +lKU +tFN +fyl +hZX +hZX +hQx +fyl +gcU +gVw +pTV +cke +flb +dZq +dZq +cIP +pxU +dZq +dZq +nwa +dZq +dZq +byY +bZQ +bZQ +bZQ +bZQ +byY +xkE +oZl +dZq +dZq +vWP +jDF +lgd +lwq +haC +jDF +xkE +xkE +nJr +qXW +wAB +wAB +fkZ +fyl +fyl +fyl +oHv +fyl +rzW +bsm +bsm +wwD +fyl +fyl +fyl +psp +psp +cZs +cZs +cZs +cZs +sNy +hsL +jXR +jXR +hsL +cZs +sNy +cZs +sNy +hsL +hsL +sNy +hsL +sNy +sNy +jXR +jXR +jXR +jXR +jXR +psp +psp +psp +psp +psp +psp +"} +(52,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sjL +sjL +sjL +dfy +sjL +iDL +kRc +bsm +hQx +kQr +hQx +hZX +hZX +mDZ +tFN +vFV +vFV +vFV +vFV +dJZ +vFV +vFV +hom +iHy +dXk +riA +slZ +eRB +iHy +nMe +uvo +tFN +tFN +tFN +tFN +jpH +jpH +tFN +hom +hom +jpH +vWP +xkE +slK +slK +vWP +vWP +czT +ePz +ePz +kzR +gma +tAW +tGg +rGt +fHF +wMi +wMi +wMi +wMi +vNy +qkV +dzE +wvB +dvI +jFd +dZq +tFN +iId +czT +ePz +ePz +ePz +czT +pgK +pgK +pgK +pgK +dZq +dZq +dZq +voM +rRM +oLO +iId +pLb +fyl +hZX +hZX +hQx +nOu +fzj +lXP +bWO +koW +fzj +lcc +oII +wAB +oII +dZq +oII +wAB +wAB +vws +bZQ +oRK +dgP +jwr +cUd +bZQ +xkE +oZl +dZq +dZq +vWP +jDF +dKI +dKI +dKI +fCb +oII +wAB +nJr +xkE +wAB +wAB +fkZ +fyl +xpr +fyl +fyl +pYz +cpI +bsm +bsm +fyl +oHv +fyl +fyl +psp +psp +jXR +jXR +hsL +sNy +hsL +sNy +jXR +jXR +sNy +cZs +cZs +sNy +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +psp +psp +psp +psp +psp +psp +"} +(53,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +peo +sjL +dfy +sjL +dfy +fNt +mDZ +fyl +bsm +wPK +fNt +hQx +hZX +hZX +fyl +tFN +dUz +bhP +cjj +cjj +jqW +iIo +vFV +hom +eJx +kXo +aXe +ogP +dOJ +iHy +hOg +nMC +mbn +xbB +qbe +uan +qbe +xbB +mbn +hom +tFN +tFN +vWP +xkE +slK +slK +xkE +vWP +czT +iLK +ygx +xEd +xEd +xEd +xEd +bYz +txm +bJf +vXs +ygv +ekn +bun +pmF +xvp +oXi +uCa +dZq +dZq +tFN +iId +tFN +dZq +wAB +dZq +oGa +dZq +dZq +wAB +wAB +wAB +dZq +dZq +dZq +czT +oyu +iId +czT +fyl +hZX +hZX +hZX +oII +hDi +vQx +gcU +ycJ +hDi +pxU +wAB +pxU +wAB +dZq +wAB +wAB +wAB +dZq +bZQ +qMk +dgP +mRb +hkD +dVd +xkE +oZl +dZq +dZq +xkE +jDF +lwq +haC +haC +jDF +oHk +dZq +nJr +xkE +xkE +wAB +cEy +fyl +oHv +fyl +fyl +kRc +hQx +bsm +hQx +fyl +fyl +bsm +fyl +fyl +psp +jXR +jXR +jXR +jXR +jXR +hsL +sNy +hsL +hsL +cZs +sNy +cZs +cZs +jXR +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(54,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sjL +peo +peo +cdi +dfy +fyl +pnA +hQx +bsm +mDZ +fNt +kBi +hZX +hZX +mDZ +tFN +cjj +cjj +cjj +cjj +cjj +cjj +pas +hom +eJx +kXo +eUo +bUh +eRB +iHy +hOg +hOg +hUL +raA +qbe +pqP +qbe +lIB +hUL +wrs +tFN +vWP +xkE +xkE +slK +slK +xkE +czT +czT +cCn +xEd +xEd +okB +niZ +xEd +qer +baL +bJf +jYy +oQY +bJf +kvC +fXU +yky +fgz +hUy +dZq +dZq +dZq +wAB +dZq +wAB +kmR +bmc +lRy +qFA +kmR +bmc +bmc +qFA +kmR +vIi +pKw +czT +iId +iId +pLb +fyl +hZX +hZX +hZX +wAB +xkE +xkE +hQV +vWP +fkZ +pxU +dEO +oII +oII +dZq +wAB +wAB +wAB +dZq +ohj +dgP +msX +sNq +nyQ +dXl +xkE +lRv +dZq +dZq +xkE +hDi +gcU +gcU +gcU +gcU +hDi +dZq +lze +wAB +vWP +vWP +cEy +fyl +mDZ +fyl +oHv +kQr +bsm +bsm +mDZ +fyl +fyl +fyl +let +let +let +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +fyl +fyl +fyl +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(55,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +mDZ +peo +lbr +sjL +dfy +pKL +mDZ +pnA +bsm +bsm +mDZ +fNt +hQx +hZX +hZX +fyl +tFN +gXo +tUQ +rXj +rXj +tUQ +cjj +vFV +tUq +fVn +eRB +eRB +eRB +eRB +uhn +hOg +bOY +hUL +xbB +qbe +uan +qbe +xbB +hUL +wMq +jpH +xkE +xkE +xkE +slK +slK +xkE +czT +cCk +ygx +xEd +tFN +qer +tFN +tFN +qer +fKK +wMi +bJf +bJf +wMi +glT +ogl +ogl +glT +dvI +dZq +vyQ +kmR +bTD +bmc +qFA +wnB +tUl +rgv +uOF +uPZ +wyq +okM +ccI +rqi +kkq +pKw +oSt +iwE +uBq +czT +fyl +hQx +hZX +hZX +oII +wAB +xkE +xkE +vWP +fkZ +pxU +wAB +wAB +wAB +dZq +wAB +lWU +qjF +nHQ +bZQ +dgP +dgP +dgP +vqR +bZQ +xQp +lLZ +dZq +dZq +xkE +kqd +mjl +mFe +jfx +pwa +gcU +dZq +nJr +wAB +oII +oII +cEy +fyl +xpr +fyl +kRc +hQx +bsm +wwD +fyl +fyl +fyl +fyl +let +bTR +let +fyl +fyl +fyl +fyl +fyl +psp +psp +psp +psp +psp +psp +psp +psp +fyl +fyl +fyl +fyl +fyl +oHv +fyl +fyl +oHv +fyl +psp +psp +psp +psp +psp +psp +psp +"} +(56,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hHk +seB +mDZ +mDZ +fyl +mDZ +mDZ +pnA +bsm +bsm +hQx +iDL +fyl +hQx +hZX +hZX +tFN +tFN +cjj +vYf +hbe +xOi +uLK +cjj +vFV +hom +iHy +lDF +poG +amZ +cIL +iHy +hOg +bdj +hUL +lIB +sue +sue +sue +raA +hUL +asj +jpH +vWP +xkE +ljh +slK +slK +xkE +czT +cCn +xEd +xEd +xGc +ejD +gMb +tph +qer +slK +dOi +vyQ +xEd +dgl +kau +faV +xEd +awA +xEd +vyQ +xEd +uPZ +gbg +mvr +rKY +pXe +uhR +uhR +gVO +rhk +rKY +uhR +srf +rnV +fhC +pKw +czT +ePz +ePz +czT +czT +fyl +hZX +hZX +hZX +hZX +wAB +tbx +vWP +cEy +pxU +vrK +vrK +wAB +dZq +wAB +oII +qPV +dZq +dVd +dgP +dgP +dgP +dgP +bZQ +mnK +sfQ +dZq +dZq +xkE +kSD +eai +nnN +iyS +qvS +ndb +dZq +nJr +wAB +wAB +wAB +cEy +fyl +fyl +oHv +kQr +bsm +hQx +fyl +fyl +oHv +fyl +oHv +let +let +let +oHv +fyl +mDZ +fyl +fyl +fyl +fyl +fyl +psp +psp +fyl +fyl +fyl +fyl +oHv +fyl +oHv +fyl +fyl +oHv +fyl +fyl +fyl +fyl +psp +psp +psp +psp +psp +psp +"} +(57,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +mDZ +hQx +bsm +mDZ +hcY +mDZ +pnA +hQx +bsm +hQx +dwk +fyl +hQx +hZX +hZX +hZX +tFN +bhL +cjj +kRg +hxi +sZA +uLK +cjj +vFV +hom +iHy +iHy +iHy +iHy +iHy +iHy +oHL +iHy +hUL +eqU +sue +sue +sue +iDr +hUL +asj +jpH +vWP +xkE +slK +slK +slK +xkE +czT +cCn +xEd +tFN +qko +bDY +xOf +ppn +tFN +iuE +qbF +xEd +xEd +xEd +xEd +xEd +xEd +xEd +xEd +okB +xEd +qZr +cnF +dQE +dQE +qvP +hPn +llk +kmR +twz +jAV +uhR +tCf +rnV +kkq +pKw +rRM +wLN +yin +ttP +pLb +fyl +hQx +hZX +hZX +hZX +hZX +wAB +vWP +cEy +luz +wAB +wAB +wAB +dZq +wAB +wAB +wAB +luz +bZQ +sjm +dgP +dgP +omH +bZQ +pCV +qsl +dZq +wAB +vWP +gcU +hDi +onY +iyS +crc +gcU +dZq +pms +lhw +lhw +lhw +pms +fyl +fyl +pnA +hQx +bsm +mDZ +fyl +fyl +fyl +mDZ +osA +let +let +let +fyl +fyl +fyl +fyl +oHv +fyl +fyl +fyl +fyl +mDZ +fyl +fyl +fyl +oHv +fyl +fyl +oHv +fyl +oHv +fyl +fyl +oHv +fyl +oHv +fyl +psp +psp +psp +psp +psp +"} +(58,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +mDZ +fyl +bsm +fyl +fyl +fyl +kRc +bsm +bsm +wwD +fyl +lep +kBi +hZX +hZX +tFN +tFN +tFN +cjj +vYf +ipR +nUg +uLK +cjj +vFV +hom +wMq +hqR +asj +asj +asj +hGR +hom +hqR +hUL +hUL +ogl +tnn +ogl +hUL +hUL +asj +tFN +xkE +xkE +slK +slK +xkE +vWP +czT +tEb +xEd +tFN +rhi +xLq +nwn +qJB +tFN +qer +xEd +xEd +xEd +hGL +ddk +xEd +eoj +xEd +xEd +rGt +xEd +qZr +hBQ +dQE +dQE +dQE +dQE +rKY +kmR +kmR +bIe +rEO +kmR +rnV +fKy +pKw +nGi +xHC +xHC +eZz +pLb +fyl +fyl +fyl +hQx +hZX +hZX +oII +vWP +fkZ +hTy +oII +wAB +wAB +dZq +wAB +oII +wAB +dZq +bZQ +suS +dgP +dgP +urw +dVd +pCV +bbH +dZq +dZq +wAB +hDi +gcU +gcU +pfP +gcU +hDi +dZq +nGC +rsd +xkE +xkE +cEy +fyl +oHv +kRc +bsm +hQx +fyl +fyl +oHv +oHv +mDZ +mDZ +oHv +fyl +oHv +oHv +fyl +fyl +oHv +fyl +fyl +oHv +fyl +fyl +fyl +fyl +fyl +oHv +fyl +fyl +oHv +fyl +oHv +oHv +fyl +fyl +fyl +fyl +oHv +fyl +psp +psp +psp +psp +psp +"} +(59,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +pnA +bsm +bsm +fPj +ccX +bsm +bsm +wwD +fNt +lep +hQx +hZX +hZX +hZX +mDZ +fyl +tFN +erb +kbl +plT +plT +kbl +cjj +vFV +qwU +oiA +xGB +xzE +xGB +xzE +mNh +wSZ +udt +hqR +xnP +mrZ +hom +oFk +oiA +ubK +asj +jpH +vWP +xkE +slK +slK +wAB +xkE +czT +tEb +xEd +tFN +pgK +pgK +gBZ +pgK +qer +jJk +xEd +uiX +xxU +quG +quG +ldK +tFt +eoj +xEd +qEt +xEd +qZr +eCc +dQE +uhf +lkI +dQE +pcd +uPZ +hNl +vyE +dQE +qJI +vmK +oxf +pKw +pLb +yin +xHC +ttP +pLb +czT +xoR +czT +hQx +hZX +hZX +hZX +vWP +fkZ +dZq +wAB +dEO +wAB +dZq +wAB +wAB +wAB +oII +oRq +fvf +nvR +dgP +fXC +bZQ +hJE +sfQ +dZq +dZq +vWP +kYQ +mvo +bPA +tZR +eIh +qXw +dZq +nGC +wAB +vWP +wAB +cEy +fyl +xpr +kRc +bsm +wwD +fyl +fyl +fyl +fyl +oHv +fyl +fyl +fyl +eEC +fyl +fyl +fyl +oHv +fyl +oHv +fyl +oHv +fyl +fyl +mDZ +fyl +oHv +oHv +fyl +oHv +fyl +fyl +oHv +fyl +fyl +oHv +fyl +fyl +oHv +psp +psp +psp +psp +psp +"} +(60,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +fyl +pnA +hQx +bsm +hQx +bsm +bsm +eMH +lep +hQx +hZX +hZX +hZX +hZX +ljs +xsw +tFN +fio +cjj +cjj +cjj +cjj +fio +vFV +vFV +vFV +hub +nUY +xzE +xzE +luq +wSZ +wSZ +gWp +irT +fHL +wSZ +xdp +xdp +asj +rix +tFN +vWP +xkE +slK +slK +anF +vWP +czT +pdq +xEd +qer +pqS +hZR +iLY +bpv +tFN +xEd +xEd +bYu +quG +wlL +dxB +pGp +xEd +xEd +oPf +xEd +xEd +mRE +rKY +dQE +dQE +dQE +dQE +sry +kmR +hNl +vyE +dQE +fsl +wnB +kwe +pKw +czT +xHC +xHC +jgY +jgY +csF +oGZ +xoR +fyl +hZX +hZX +hZX +vWP +fkZ +pxU +wAB +wAB +oII +dZq +wAB +wAB +wAB +jma +bZQ +kqA +cRV +dgP +kZt +bZQ +tMa +pfh +dZq +dZq +xkE +kYQ +fNO +mFQ +nMo +eIh +oII +dZq +nJr +xkE +rBq +xkE +cEy +fyl +oHv +kQr +bsm +fyl +fyl +fyl +oHv +mDZ +fyl +oHv +fyl +fyl +fyl +fyl +fyl +fyl +oHv +fyl +fyl +fyl +oHv +oHv +oHv +oHv +oHv +fyl +fyl +oHv +fyl +oHv +fyl +fyl +oHv +fyl +fyl +fyl +oHv +fyl +psp +psp +psp +psp +psp +"} +(61,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sjL +dfy +lQR +fyl +fyl +fyl +hQx +bsm +bsm +xud +kBi +hZX +hZX +hZX +tFN +fyl +tFN +jpH +tFN +vFV +vFV +vFV +pas +vFV +vFV +vFV +vFV +vFV +dPM +xGB +uHG +uHG +rel +gbM +wSZ +fMh +pUZ +luq +wSZ +xdp +vFV +vFV +hom +tFN +tFN +xkE +slK +slK +oII +vWP +czT +tEb +xEd +sOX +byC +jYW +iLY +iLY +tFN +xEd +xEd +bYu +quG +quG +quG +dzz +tFt +tFt +rGt +niZ +inB +twz +dTc +bVB +spe +dwg +pPX +lhP +twz +frE +lIh +kmR +bmc +bmc +gcr +pKw +rRM +xHC +jgY +jgY +nQA +bMJ +rmP +ppV +fyl +hZX +hZX +hZX +vWP +cEy +dZq +wAB +wAB +wAB +dZq +wAB +wAB +oII +pxU +bZQ +wcw +dgP +dgP +kZt +ohj +dZq +dZq +dZq +dZq +vWP +pms +tZR +tZR +tZR +eIh +wAB +dZq +lze +wAB +vWP +xkE +fkZ +fyl +kRc +hQx +bsm +fyl +fyl +dHw +fyl +fyl +fyl +fyl +fyl +fyl +mDZ +fyl +oHv +fyl +fyl +fyl +oHv +mDZ +fyl +fyl +fyl +fyl +fyl +oHv +fyl +fyl +fyl +fyl +oHv +oHv +fyl +oHv +qVT +oHv +fyl +oHv +psp +psp +psp +psp +psp +"} +(62,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +mMM +noe +noe +mMM +bSj +fyl +mDZ +hQx +bsm +aNI +hQx +hZX +hZX +mDZ +mDZ +fyl +tFN +azg +nmu +cjj +eKW +nNJ +cjj +cjj +jPX +cFW +vcP +vFV +vFV +xzE +xGB +vAA +fWk +gQA +wSZ +fMh +tqD +luq +wSZ +idj +vFV +cLS +hom +hom +tFN +czT +czT +czT +czT +czT +czT +tEb +xEd +vhN +oaU +nmF +iLY +iLY +qer +fmQ +xEd +uiX +quG +tpC +quG +ldK +eSc +eSc +rGt +dZq +xEd +kmR +gcr +qZr +qZr +qZr +wnB +qFA +kmR +iaC +iCp +pcD +iCp +obC +uPZ +pKw +oSt +aeu +suQ +jeq +bMJ +bMJ +wbA +xoR +fyl +hZX +hZX +hZX +vWP +fkZ +lcc +pxU +dZq +pxU +dZq +dZq +dZq +dZq +jma +bZQ +wDi +dgP +dgP +aLX +bZQ +wys +jFj +dZq +dZq +xkE +xkE +pxU +oDv +deO +qEy +dZq +dZq +nJr +wAB +wAB +xkE +fkZ +fyl +urc +bsm +bsm +fyl +fyl +fyl +fyl +fyl +oHv +fyl +fyl +fyl +oHv +fyl +fyl +dHw +fyl +fyl +fyl +fyl +fyl +fyl +fyl +oHv +oHv +oHv +mDZ +fyl +oHv +oHv +fyl +mDZ +fyl +oHv +oHv +fyl +fyl +oHv +psp +psp +psp +psp +psp +"} +(63,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +mMM +noe +lsu +noe +mMM +fyl +mDZ +bsm +bsm +fNt +hQx +hZX +hZX +mDZ +tFN +tFN +dZd +jih +knM +nAH +cjj +cjj +aVL +nAH +cjj +cjj +xTB +uYU +vFV +eTT +omc +vjx +tKU +cAw +wSZ +tFc +xGB +luq +wSZ +idj +vFV +hLI +hom +hom +dJZ +vJB +swy +slK +ppo +nIR +qDJ +xEd +xEd +tFN +tFN +qer +eap +eap +tFN +niZ +xEd +xEd +alH +alH +alH +xEd +xEd +ube +rGt +wAB +xEd +hAB +xEd +xEd +xEd +xEd +xEd +ony +iCp +iCp +iCp +kmR +ajp +geD +wnB +pKw +czT +ePz +czT +pdy +tXt +czT +kpf +czT +nuo +hZX +hZX +hZX +xkE +jhK +jhK +fWZ +fWZ +rCn +bkp +sMv +jhK +fWZ +iBi +bZQ +xaf +kZt +kZt +kki +bZQ +sPp +sfQ +wAB +dZq +vWP +oUl +xkE +xkE +xkE +wAB +dZq +wAB +nJr +xkE +rLU +wAB +cEy +fyl +jeC +bsm +hQx +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +oHv +mDZ +fyl +fyl +fyl +fyl +fyl +oHv +fyl +fyl +oHv +oHv +mDZ +fyl +oHv +fyl +fyl +oHv +fyl +mDZ +mDZ +fyl +fyl +fyl +oHv +oHv +fyl +fyl +psp +psp +psp +psp +"} +(64,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +khz +noe +noe +lsu +noe +mMM +fNt +gFp +hQx +bsm +xud +kBi +hZX +hZX +fyl +tFN +aGu +xHI +xPz +ejS +guL +guL +guL +guL +guL +guL +guL +guL +guL +guL +vFV +tsd +cpa +xzv +iCX +wSZ +udt +hsi +eKx +wSZ +doU +vFV +btB +vFV +dJZ +eTT +vJB +swy +slK +eMv +eMv +qoQ +xEd +rCF +baQ +vWP +jVD +xEd +xEd +baQ +dZq +niZ +xEd +xEd +xEd +xEd +xEd +okB +fcD +dZq +wAB +niZ +xEd +xEd +xEd +xEd +xEd +xEd +kmR +gcr +gcr +gcr +kmR +bmc +qFA +gcr +dZq +aSg +vWP +oqC +wAB +qZO +czT +wAB +xkE +ivL +tXA +tXA +tXA +naF +xkE +iAL +xkE +ppJ +vWP +dZq +dZq +dZq +vWP +vWP +byY +bZQ +bZQ +bZQ +bZQ +byY +qdU +sho +wAB +dZq +oII +tzO +xkE +vWP +vJB +vWP +dZq +oII +pms +sAV +sAV +sAV +pms +fyl +lmG +bsm +skw +fPj +fPj +mDZ +fyl +fyl +mDZ +fyl +fyl +bIW +ccX +fPj +ccX +ccX +oHv +fyl +fPj +fPj +fPj +vJQ +ccX +lEG +exj +ccX +mDZ +mDZ +fPj +fPj +fyl +dgp +mDZ +ngf +fPj +mDZ +oHv +fPj +epS +fPj +eZd +psp +psp +"} +(65,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +khz +noe +mMM +mMM +mMM +mMM +fNt +fNt +hHf +bsm +xud +kBi +hZX +hZX +mDZ +tFN +aGu +iwL +tUQ +ucC +pVx +tUQ +tUQ +tUQ +cOl +tUQ +tUQ +tUQ +tUQ +tUQ +sll +kVS +nZy +vXB +cxa +cxa +cxa +txR +wSZ +wSZ +wSZ +wSZ +hom +tvX +jja +nKA +usU +lZL +pKE +fGK +jFj +mgZ +xGO +pNR +pfh +dZq +wAB +dZq +dZq +dZq +dZq +dZq +iDy +iDy +iDy +iDy +iDy +dZq +dZq +dZq +dZq +dZq +iDy +iDy +iDy +iDy +iDy +iDy +wAB +dZq +dZq +dZq +dxL +iNB +heN +dZq +dZq +dZq +dZq +wAB +dZq +dZq +rij +jFj +wAB +pCV +pCV +pCV +pCV +pCV +wAB +ygV +jFj +dZq +dZq +dZq +dZq +dZq +wAB +wAB +dZq +dZq +dZq +wAB +dZq +dZq +dZq +dZq +wAB +ppa +dZq +dZq +dZq +dZq +dZq +dZq +dZq +dZq +dZq +dZq +dZq +dZq +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +hQx +hQx +bsm +bsm +hQx +lMr +bsm +bsm +bsm +bsm +bsm +lmG +bsm +hQx +svE +szq +szq +"} +(66,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sjL +cqy +noe +noe +lsu +mMM +mMM +fNt +fNt +fyl +hQx +fNt +hQx +hZX +hZX +fyl +tFN +iHy +aHx +vYf +nvC +vYf +rQp +vYf +vYf +vYf +vYf +vYf +vYf +vYf +vYf +nWE +wSZ +wSZ +dsK +mIZ +qGH +eRz +mdt +wSZ +wSZ +wSZ +wSZ +hom +hom +nKA +nKA +tZR +gFs +pKE +aMV +pCV +pCp +qsl +wAB +wAB +wAB +pdq +wAB +dZq +wAB +dZq +wAB +wAB +wAB +dZq +wAB +pdq +wAB +wAB +wAB +dZq +wAB +pxU +wAB +wAB +wAB +wAB +wAB +pdq +wAB +wAB +pxU +pxU +wAB +wAB +pnK +pnK +pnK +fqu +wAB +pdq +wAB +vxz +jbJ +ygV +pCV +pCV +pCV +pCV +pCV +mGt +pNR +upL +xkE +xkE +oII +xkE +vWP +xkE +xkE +oII +wAB +oII +xkE +xkE +vWP +xkE +oII +wAB +wAB +wAB +oII +wAB +xkE +oII +wAB +wAB +wAB +xkE +oII +xkE +vWP +uJn +skw +hQx +uJn +skw +uJn +hQx +hQx +hQx +hQx +hQx +hQx +dJI +hQx +dJI +hQx +hQx +dJI +hQx +dJI +hQx +hQx +bsm +hQx +bsm +hQx +hQx +hQx +hQx +hQx +hQx +bsm +hQx +lmG +hQx +hQx +hQx +hQx +hQx +hQx +hQx +uJn +sGp +qMc +szq +"} +(67,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sjL +dfy +khz +mMM +mMM +noe +lsu +mMM +wTq +fNt +fyl +bsm +xud +kBi +hZX +hZX +fyl +tFN +aGu +daD +kbl +fbb +kfw +kbl +kbl +kbl +jan +kbl +kbl +kbl +kbl +kbl +sll +eVM +nZy +qno +bLE +bLE +bLE +ifJ +wSZ +wSZ +wSZ +wSZ +hom +hom +vHo +pVK +oYE +lZL +pKE +tMa +tMa +pfh +pxU +ygV +mGt +dZq +dZq +wAB +dZq +dZq +dZq +dZq +dZq +dZq +dZq +wAB +dZq +dZq +dZq +aBY +wAB +cwL +hdL +rtE +dZq +dZq +nHt +dZq +dZq +dZq +dZq +dZq +dZq +dZq +fwO +try +cXq +slK +dEz +vWg +dZq +dZq +dxL +qsl +pXN +pCV +pCV +pCV +pCV +pCV +sfQ +wAB +wAB +wAB +mgZ +mGt +dZq +dZq +dZq +dZq +dZq +wAB +wAB +dZq +dZq +wAB +dZq +dZq +dZq +dZq +dZq +dZq +dZq +dZq +dZq +dZq +dZq +dZq +dZq +dZq +dZq +dZq +hQx +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +hQx +hQx +hQx +uJn +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +svE +szq +szq +"} +(68,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +fNt +dfy +sjL +dfy +noe +noe +noe +mMM +mMM +fyl +fyl +hQx +bsm +eMH +hQx +hZX +hZX +fyl +tFN +aGu +dGK +xPz +ejS +guL +guL +guL +guL +guL +guL +guL +guL +guL +guL +vFV +tsd +cpa +qLQ +bFL +wSZ +dln +ukD +gbM +wSZ +gVW +vFV +btB +dJZ +dJZ +vFV +vJB +swy +slK +vWP +xkE +eXO +gEZ +gEZ +opk +gEZ +vQY +gEZ +opk +gEZ +jMn +uXz +dZq +dZq +wAB +nHt +wAB +dZq +frr +rSm +moB +rSm +bCf +rSm +pSa +moB +pSa +pSa +rSm +nIR +dZq +xQF +vcz +cpM +cpM +cpM +cpM +cpM +vcz +lfe +xkE +cvO +czT +aJR +vWP +oBU +rEp +rEp +rEp +cDD +bkq +vWP +vWP +xkE +vWP +xkE +vWP +vWP +xkE +bkq +vWP +dZq +dZq +hKo +tCz +fcg +mbu +dZq +aSZ +pYn +gAe +dUc +lXE +dEn +mbu +aJg +xkE +xkE +vWP +xkE +vWP +vWP +fyl +hQx +jxi +cUw +jRP +cUw +cUw +jRP +cUw +cUw +cUw +jRP +jRP +wGR +cUw +cUw +cUw +jRP +jRP +jRP +cUw +cUw +fyl +fyl +oHv +cUw +cUw +cUw +oHv +kgO +hQx +bsm +dgp +cUw +jRP +jRP +mDZ +osA +fyl +oHv +jRP +oHv +wSN +psp +psp +"} +(69,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +fNt +fNt +brr +dfy +sjL +fNt +fNt +fyl +fyl +fyl +fyl +wTq +bsm +bsm +cvj +hQx +hZX +hZX +mDZ +tFN +jpH +dZd +vuZ +knM +nAH +tpk +cjj +aVL +nAH +cjj +cjj +lmR +cey +vFV +eTT +cPt +dXj +xzE +mNh +wSZ +dLw +xGB +fHL +wSZ +mMe +vFV +hLI +hom +hom +dJZ +vJB +swy +slK +fwQ +sph +hTQ +hTQ +hTQ +hTQ +jyv +hTQ +jyv +hTQ +jyv +hTQ +sph +kyb +dZq +wAB +rSm +pSa +pSa +pSa +pSa +fgL +dDf +myP +nxX +nfd +myP +heD +vhT +pSa +tSI +dZq +eVq +jGD +uJs +vzw +gtN +myL +pYM +sEq +mgM +swy +czT +czT +tXt +czT +nuo +hZX +hZX +hZX +tzO +pHk +xFM +xFM +xFM +hCy +xFM +xFM +xFM +hCy +dgm +xkE +dZq +dZq +uxJ +oUl +xkE +tzO +dZq +xkE +vWP +xkE +gqx +xkE +xkE +xkE +oAo +xkE +hDi +gcU +ndb +gcU +hDi +gFp +bsm +fyl +fyl +fyl +oHv +fyl +fyl +fyl +oHv +fyl +fyl +oHv +fyl +fyl +dHw +fyl +fyl +oHv +fyl +fyl +fyl +oHv +fyl +oHv +fyl +oHv +fyl +fyl +fyl +hQx +bsm +aLP +qVT +oHv +fyl +oHv +fyl +fyl +oHv +oHv +fyl +psp +psp +psp +"} +(70,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +fNt +fNt +kBi +kkJ +fNt +kBi +fNt +fyl +fNt +fNt +wTq +fyl +bcj +bsm +bsm +xud +kBi +hZX +hZX +fyl +fyl +mDZ +tFN +hCd +egc +cjj +pCW +fYv +cjj +cjj +ozH +cFW +vcP +vFV +vFV +xzE +xzE +shA +fWk +mNh +wSZ +irT +xzE +fHL +wSZ +mMe +vFV +cLS +hom +eAq +tFN +czT +czT +czT +czT +jcR +sRf +sRf +pmr +jJQ +mKk +bSK +wjh +fYO +wjh +hBY +sph +sph +oBh +dZq +pSa +uvA +gdc +uWr +pSa +myP +myP +pzz +rqW +rMO +cdd +lFW +tZZ +pSa +vWP +wAB +rqR +vcz +giM +nHh +oJh +gnk +vud +sEq +mgM +swy +rRM +kku +bMJ +xoR +fyl +hZX +hZX +hZX +hZX +vom +oII +wAB +nJf +wAB +wAB +wAB +oII +dFW +hCy +lel +dZq +dZq +nJr +vJb +xkE +xkE +wAB +xkE +xkE +xgZ +edO +tzw +xkE +xkE +oAo +xkE +gcU +bvw +cke +cke +gcU +mDZ +bsm +fyl +fyl +fyl +fyl +fyl +dHw +fyl +fyl +fyl +fyl +oHv +fyl +oHv +fyl +oHv +fyl +fyl +oHv +fyl +fyl +qVT +fyl +fyl +fyl +oHv +oHv +fyl +oHv +hHf +hQx +hQx +oHv +fyl +oHv +fyl +fyl +oHv +fyl +psp +psp +psp +psp +psp +"} +(71,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +fNt +oxU +tQJ +tQJ +oxU +fNt +fNt +fyl +fNt +fNt +ccX +ozM +qOU +bsm +bsm +uJn +hQx +hZX +hZX +mDZ +tFN +fyl +tFN +jpH +tFN +vFV +vFV +uhn +uhn +vFV +gtw +gtw +gtw +gtw +dTX +xzv +aKX +hsi +hsi +xRl +wSZ +aVN +xzE +eAh +fLu +fMh +vFV +vFV +hom +tFN +jpH +xkE +slK +slK +oII +jyv +sRf +bLh +uxS +cEq +uuL +jJQ +uuL +ioW +uuL +ioW +ePC +jcR +lxV +wAB +pSa +rSm +rtp +gdc +pSa +myP +myP +xhy +rqW +wBy +cdd +tKP +yiq +pSa +iUY +wAB +dZq +dZq +lVe +myL +myL +myL +xkw +cpM +jQM +anF +pLZ +bMJ +uyd +ppV +fyl +hZX +hZX +hZX +hZX +vom +wAB +dPQ +wAB +dZq +afP +cmB +dPQ +oII +oyB +nIR +dZq +dZq +nGC +xkE +xkE +xkE +oII +dZq +xkE +vWP +xkE +xkE +pVX +xkE +vWP +xkE +gcU +cke +cke +cke +gcU +fyl +fyl +gFp +fyl +fyl +fyl +oHv +fyl +fyl +fyl +oHv +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +oHv +fyl +oHv +oHv +fyl +fyl +fyl +fyl +oHv +oHv +fyl +hQx +hQx +oHv +fyl +fyl +oHv +oHv +fyl +psp +psp +psp +psp +psp +psp +"} +(72,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +fNt +nlS +xyY +yjL +tQJ +bsm +saO +saO +uJn +gTA +bsm +bsm +bsm +bsm +bsm +uJn +qcp +hZX +hZX +fyl +mDZ +mDZ +uJn +bsm +ksQ +bMQ +cjj +cjj +cjj +pBr +gtw +dxk +cXO +eeE +wSZ +wSZ +wSZ +dXa +dXa +wSZ +wSZ +pUZ +xzE +tsd +nfg +xdp +asj +asj +kOz +jpH +vWP +vWP +slK +slK +anF +jcR +sRf +sRf +rxS +jJQ +vZk +cNZ +cCP +cNZ +cCP +wjh +jnB +jcR +oBh +dZq +pSa +eTy +uIz +pSa +pSa +non +mzB +ism +rec +myP +myP +ogX +dQg +pSa +pSa +pSa +rSm +dZq +cpM +xeL +gKF +xeL +xkw +cpM +mgM +swy +oSt +csF +lGa +xoR +fyl +hZX +hZX +fuR +pxU +xFM +wAB +wAB +uGM +dZq +dZq +dZq +jcn +wAB +oyB +xkE +dZq +dZq +oOX +xkE +xkE +xkE +xkE +pxU +xkE +vWP +vWP +xkE +xkE +oUl +xkE +xkE +gcU +hIe +cke +hPR +gcU +fyl +hQx +fyl +fyl +fyl +fyl +fyl +fyl +fyl +oHv +oHv +fyl +fyl +osA +mDZ +fyl +fyl +fyl +fyl +oHv +fyl +fyl +oHv +mDZ +mDZ +fyl +oHv +fyl +fyl +fyl +oHv +hQx +bsm +skw +fyl +fyl +oHv +oHv +fyl +psp +psp +psp +psp +psp +psp +"} +(73,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +kBi +wCC +cnQ +xyY +tQJ +bsm +bsm +bsm +bsm +bsm +bsm +wPK +baZ +wMU +bsm +aNI +hQx +hZX +hZX +hZX +tFN +uJn +bsm +bsm +tFN +nxD +fwR +fwR +mlU +cjj +gtw +gtw +gtw +gtw +maO +jes +kfF +kfF +iNo +ukD +ukD +vFV +vFV +vFV +vFV +vFV +vFV +vFV +asj +tFN +vWP +xkE +slK +slK +oII +sph +wFg +bjY +exA +jJQ +eAR +eAR +eAR +jJQ +jJQ +uuL +dUL +ixW +rGt +wAB +pSa +ajF +fcR +jyR +uoY +uoY +uoY +neF +wVy +myP +myP +rqW +wBy +jEV +ezr +hes +pSa +dZq +vcz +cpM +hfM +cpM +sSj +vcz +mgM +swy +czT +czT +xoR +czT +fyl +hZX +hZX +riP +xkE +hLl +ihM +dZq +dZq +dZq +wAB +wAB +wAB +wAB +xFM +mOM +dZq +dZq +nJr +xkE +xkE +oUl +qTI +xkE +wAB +xkE +xkE +dZq +vWP +xkE +cEy +xkE +hDi +gcU +wUd +gcU +hDi +mDZ +bsm +fyl +fyl +fyl +fyl +fyl +oHv +let +let +let +fyl +fyl +mDZ +mDZ +fyl +fyl +oHv +fNt +fNt +fNt +fNt +fNt +iDL +iDL +fNt +fNt +fNt +fNt +fNt +fNt +hQx +bsm +hQx +oHv +fyl +fyl +fyl +oHv +psp +psp +psp +psp +psp +psp +"} +(74,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +fNt +oxU +tQJ +tQJ +oxU +kBi +sje +mIH +tRS +cUw +fNt +wTq +fyl +kRc +bsm +aNI +hQx +ruJ +hZX +hZX +fyl +uJn +bsm +bsm +tFN +avV +aqI +bBj +fwR +cjj +vFV +vBb +xie +xie +wSZ +xzE +xzE +xzE +nMd +xdp +xdp +qny +kOz +hom +hom +hom +ovX +vFV +eud +jpH +vWP +vWP +slK +slK +vWP +jcR +vwC +vwC +uwC +dVh +uxS +poA +uxS +iqb +cEq +uuL +dUL +mAP +sgM +dZq +rSm +pSa +pSa +pSa +kuJ +uoY +fvh +xHy +wVy +dMe +xhy +osa +wOM +uYS +tma +uKw +pSa +wAB +cpM +uiE +cTL +xkw +xkw +cpM +xlq +swy +czT +fyl +fyl +fyl +hQx +hZX +hZX +xkE +xkE +dty +wAB +azz +wAB +bwy +wAB +cmB +cmB +cmB +wvP +oqC +dZq +dZq +hcA +xkE +hDi +gcU +okj +hDi +aNW +kdL +kdL +fqh +cio +xkE +pVa +gFp +fyl +fyl +hQx +fyl +mDZ +bsm +fyl +fyl +gFp +fyl +fyl +mDZ +mDZ +bTR +let +let +fyl +fyl +fyl +dHw +fyl +fyl +oHv +fNt +fNt +fNt +fNt +fNt +iDL +fNt +fNt +fNt +fNt +fNt +fNt +fNt +hQx +hQx +hQx +fyl +oHv +fyl +fyl +fyl +fyl +psp +psp +psp +psp +psp +"} +(75,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +fNt +fNt +kkJ +fNt +kBi +fNt +fNt +fyl +fNt +fNt +fNt +fyl +fyl +kRc +bsm +aNI +uqL +uJn +hZX +hZX +tFN +hQx +bsm +bsm +tFN +rWF +fKD +xvR +fwR +cjj +vFV +oiu +hom +hom +hom +vFV +oiA +oiA +dsB +dsB +puJ +vFV +qQj +hom +hom +hom +uSJ +vFV +wMq +tFN +xkE +xkE +slK +slK +xkE +jcR +vwC +lMM +uxS +ezb +uxS +hZr +jJC +ixB +cEq +uuL +xYN +sph +cfh +oBh +dZq +dZq +pxU +pSa +tLK +uoY +uoY +ecO +wVy +lIK +rqW +hXk +rSm +pSa +gQS +lFu +pSa +dZq +cpM +vud +vud +xkw +xkw +goi +oII +czT +czT +fyl +hQx +hZX +hZX +hZX +hZX +nUh +xBQ +nzY +cyt +dZq +dZq +dZq +dZq +dZq +dZq +dZq +gEo +xLA +dZq +dZq +nGC +xkE +gcU +plB +lIP +gcU +lvr +vhx +aEH +gCu +ocA +xkE +izp +fyl +fyl +fyl +fyl +hQx +bsm +fyl +fyl +fyl +fyl +fyl +oHv +mDZ +osA +mDZ +fyl +oHv +fNt +fNt +fNt +fNt +fNt +fNt +fNt +fNt +fNt +fNt +www +www +www +www +www +www +www +www +www +www +hQx +bsm +bsm +hQx +fNt +fNt +fNt +fNt +psp +psp +psp +psp +psp +psp +"} +(76,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +fyl +fyl +fNt +fNt +fNt +fNt +dfy +dfy +mMM +lsu +mMM +mMM +kRc +bsm +aNI +hQx +hZX +hZX +hZX +fyl +qer +qer +hok +tFN +vFV +uyO +uyO +hOx +cjj +vFV +ioQ +wSZ +opr +opr +auy +auy +auy +tGA +auy +tRx +vFV +vFV +vFV +vFV +bTt +vFV +vFV +asj +tFN +vWP +xkE +slK +slK +xkE +jcR +vwC +vwC +uxS +ezb +uxS +poA +uxS +jlE +cEq +uuL +dUL +mAP +dZq +dZq +dZq +dZq +fwO +pSa +rSm +jVq +cNt +pSa +pSa +pSa +xab +pSa +pSa +pSa +pSa +pSa +rSm +sQV +cpM +vSZ +vud +hgj +ffP +cpM +hOz +czT +fyl +fyl +hZX +hZX +hZX +hZX +fVh +hQQ +hQQ +nzY +sxt +cmB +nMy +dZq +wAB +cmB +cmB +wAB +rWR +vWP +dZq +dZq +oOX +xkE +jEO +eRH +bXV +hDi +okj +cSj +okj +hDi +jBJ +xkE +ouU +fyl +oHv +fyl +mDZ +gFp +fyl +fyl +sRR +mDZ +fyl +fyl +fyl +fyl +fyl +fyl +fyl +oHv +www +www +www +www +vHv +www +fNt +fNt +fNt +fNt +www +www +www +www +www +www +www +www +vKe +hQx +hQx +bsm +bsm +hQx +fNt +fNt +fNt +psp +psp +psp +psp +psp +psp +psp +"} +(77,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sjL +sjL +dfy +sjL +dfy +dfy +sjL +mMM +mMM +mMM +lsu +kRc +bsm +hQx +hQx +hZX +hZX +dHw +mDZ +qer +wpE +xya +xGE +xkk +vFV +vfO +kFP +cjj +vFV +xGB +wSZ +vFV +vFV +auy +xhq +iGx +asj +uoT +fgP +bGv +vFV +cOe +pUU +hOg +ppO +vFV +rix +jpH +xkE +ljh +slK +slK +xkE +jcR +vwC +vwC +uQm +jJQ +fkb +fkb +fkb +jJQ +jJQ +uuL +dUL +aDZ +oEb +dZq +dZq +nHt +dxL +egz +hZE +fcR +fcR +nVy +smq +lYm +xwl +fmG +fGl +cvO +xkE +xkE +xkE +wAB +vcz +cpM +cpM +cpM +cpM +vcz +wAB +czT +fyl +hQx +hZX +hZX +uJn +uJn +mDZ +mDZ +mDZ +hCy +jBZ +qtH +bHA +dZq +wAB +wAB +wAB +wAB +vom +nIR +dZq +dZq +xiH +xkE +gcU +plB +plB +plB +plB +plB +cqo +gcU +sZS +oII +qIo +fyl +fyl +fyl +fyl +fyl +fyl +fyl +mDZ +mDZ +fyl +oHv +fyl +oHv +fyl +oHv +fyl +fyl +www +www +www +www +www +www +fNt +psp +psp +fNt +fNt +psp +psp +psp +fyl +psp +psp +fNt +fNt +hQx +bsm +psp +psp +psp +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(78,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sjL +sjL +dfy +dfy +sjL +dfy +noe +lsu +mMM +mMM +pnA +bsm +fcO +qcp +hZX +hZX +mDZ +qer +qer +hjk +pHY +pHY +gtg +xkk +xkk +vFV +yai +vFV +dXa +wSZ +qVD +gpl +auy +bwR +asj +asj +gsB +dsB +asj +vFV +tLH +hOg +hOg +ppO +vFV +wrs +tFN +vWP +xkE +slK +slK +vWP +sph +wFg +bjY +exA +jJQ +mKk +vHP +tie +vHP +tie +cCP +jnB +sph +kvS +ocP +dda +kvS +dZq +rSm +sAY +sAY +vIo +tos +tos +tos +gas +nAt +fGl +xkE +xkE +xkE +xkE +xkE +bHN +dZq +dZq +dZq +nse +pjU +jFd +czT +fyl +hZX +hZX +hZX +hDi +gcU +gcU +hDi +aLP +nzY +slK +ezz +bHA +dZq +dZq +dZq +ivx +wAB +xFM +dXv +dZq +dZq +nJr +xkE +gcU +plB +plB +msG +msG +msG +msG +gcU +cio +dZq +rta +fyl +oHv +fyl +fyl +oHv +fyl +fyl +oHv +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fNt +fNt +www +www +fNt +fNt +fNt +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +iIw +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(79,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sjL +sjL +dfy +dfy +sjL +noe +mMM +mMM +lsu +mDZ +bsm +kRc +hQx +hZX +hZX +fyl +hok +tyz +jkt +fvv +fvv +fvv +wHQ +eLL +nym +hom +hom +wSZ +wSZ +wpR +vFV +vFV +qxr +asj +asj +vFV +qyR +dsB +vFV +roZ +hOg +hOg +vEY +vFV +hom +tFN +tFN +vWP +slK +slK +vWP +jcR +nPR +vAR +gkW +jJQ +uuL +jJQ +uuL +ghO +uuL +ghO +uuL +iyB +vOR +pdp +tiW +dda +vWg +dZq +oII +xKP +gbU +oXM +xgl +tos +tos +xIU +fGl +xkE +xkE +xkE +xkE +wAB +xkE +xkE +wAB +xkE +dZq +wAB +wAB +czT +fyl +hZX +hZX +gcU +wLo +cke +cke +gcU +nOu +nzY +tOb +jSb +bHA +dZq +dPQ +wAB +cmB +oII +vom +vWP +dZq +dZq +nGC +xkE +gcU +qMN +plB +lok +mIw +eio +lok +gcU +uOb +wAB +izp +fyl +fyl +fyl +oHv +fyl +fyl +fyl +fyl +fyl +let +bTR +bTR +oHv +fyl +fyl +fNt +fNt +www +www +fNt +fNt +fNt +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(80,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sjL +sjL +dfy +dfy +lsu +mMM +mMM +mMM +ucI +bsm +hQx +hQx +hZX +hZX +mDZ +qer +eOv +xah +pfm +vKI +hbO +hjk +hBx +xJG +wSZ +wSZ +wSZ +wSZ +qVD +jeN +auy +qNh +vYJ +vYJ +uoT +bGv +asj +vFV +jHy +hOg +kjq +euA +vFV +hom +hom +tFN +vWP +slK +slK +vWP +jyv +vAR +xjk +uxS +cEq +uuL +dOk +cZq +gSS +cZq +hCf +sph +sph +voT +pdp +vOR +kvS +kvS +dZq +wAB +sAY +myP +tbh +ceT +fEa +vTl +sJk +sAY +xkE +xkE +xkE +xkE +wAB +aSg +wAB +dZq +xkE +xkE +xkE +wAB +czT +fyl +hZX +hZX +gcU +bsm +bsm +cke +gcU +mDZ +uxt +lop +sxt +wAB +wAB +wBq +wAB +oII +oII +xFM +vWP +dZq +dZq +nGC +xkE +gcU +hDi +mjb +lok +uRx +dEb +lok +gcU +wiL +xkE +izp +fyl +fyl +fyl +fyl +oHv +fyl +fyl +fyl +oHv +let +bTR +bTR +fyl +fyl +oHv +fNt +fNt +www +www +fNt +fNt +fNt +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(81,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +xsB +sjL +dfy +dfy +sjL +sjL +sjL +sjL +uJn +bsm +dzP +hQx +hZX +hZX +mDZ +qer +xkk +fSQ +fvv +uBL +fvv +jJw +eLL +vAS +wSZ +wSZ +jpH +tFN +tFN +jpH +tFN +tFN +jpH +jpH +jpH +tFN +tFN +jpH +tFN +tFN +jpH +tFN +tFN +hLI +hom +tFN +czT +czT +czT +czT +qeY +vAR +ggI +dwS +jJQ +hqF +sph +hTQ +hTQ +hTQ +hTQ +sph +kvS +jDN +pdp +pdp +rnf +dda +dZq +dZq +rSm +uhk +rSm +cTv +egz +cTv +rSm +rSm +fZg +xkE +dZq +wAB +dZq +wAB +wAB +aSg +xkE +xkE +xkE +czT +czT +fyl +hZX +hZX +hDi +gcU +hQx +hQx +hDi +mDZ +rvj +uxt +uxt +uxt +hCy +uxt +uxt +uxt +xFM +rvj +vWP +wAB +dZq +xkE +xkE +gcU +wBd +plB +qDr +rng +msG +msG +gcU +ePk +dZq +mDZ +fyl +fyl +fyl +fyl +oHv +fyl +fyl +fyl +fyl +let +bTR +bTR +fyl +oHv +fyl +fNt +fNt +www +www +fNt +fNt +fNt +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(82,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +xsB +sjL +cdi +sjL +sjL +wTq +fyl +hQx +bsm +aNI +hQx +hZX +hZX +mDZ +hok +oeV +olb +hjk +hjk +jJw +mWI +qer +jpH +jpH +jpH +jpH +mDZ +mDZ +ruw +mDZ +fyl +fyl +mDZ +mDZ +fyl +mDZ +mDZ +mDZ +mDZ +mDZ +mDZ +tFN +tFN +tFN +tFN +fyl +hZX +hZX +fyl +rEb +hTQ +hTQ +sph +mAP +sph +sph +bXH +bXH +iqT +iqT +iqT +kvS +kvS +pdp +pdp +pdp +dda +fwO +vWg +dZq +dZq +fwO +vWg +dxL +heN +dZq +hDV +wAB +dZq +wAB +wAB +wAB +wAB +wAB +wAB +xkE +xkE +vWP +czT +fyl +fyl +hZX +hZX +uJn +dHw +mDZ +hQx +bsm +bsm +bsm +lNY +hQx +bsm +bsm +bsm +hQx +bsm +hQx +uJn +hQx +hQx +bsm +mEv +xkE +hDi +gcU +okj +gcU +gwL +eai +gwL +hDi +fQB +dZq +fyl +fyl +fyl +oHv +fyl +fyl +fyl +osA +osA +fyl +fyl +oHv +fyl +fyl +fyl +fyl +fNt +fNt +www +vKe +www +www +www +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(83,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +xsB +sjL +sjL +cdi +sjL +uqL +wTq +bsm +bsm +uOG +hQx +hZX +hZX +dHw +qer +qer +rrJ +pZc +xPW +bcs +qer +qer +oPv +fyl +fyl +fyl +fyl +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +fyl +vJm +mDZ +mDZ +mDZ +fyl +hZX +hZX +fyl +pLb +boJ +uOa +jZz +jZz +jMV +beY +tLA +bXH +iqT +iqT +iqT +owT +dda +rnf +kgX +rnf +dda +dxL +heN +kAR +xMw +xMw +xMw +xMw +xMw +xMw +xMw +xMw +xMw +pIT +ahG +ahG +hXw +dZq +wAB +hQC +oII +hTa +czT +fyl +fyl +hZX +hZX +alS +mDZ +fyl +fyl +bsm +hDi +gcU +gcU +hDi +hQx +hDi +gcU +lSo +gcU +hDi +fyl +pnA +bsm +bsm +ocQ +xkE +xkE +xkE +xkE +xkE +rzl +rzl +rzl +mDZ +fyl +fyl +pVa +fyl +fyl +fyl +fyl +oHv +fyl +mDZ +mDZ +fyl +oHv +fyl +fyl +fyl +fyl +fyl +fNt +fNt +www +vKe +www +www +vKe +vKe +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(84,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sjL +sjL +psp +fyl +fyl +fyl +vkX +bsm +aNI +hQx +hZX +hZX +fyl +mDZ +qer +qer +hok +qer +qer +qer +oPv +dHw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pjU +pLb +qkR +qQe +jZz +iTU +kvS +kvS +uEj +wtD +jMT +iqT +gqy +eiu +kvS +dda +dda +dda +kvS +dZq +dZq +hny +xMw +kiI +qNc +qNc +tsI +kuA +sFL +dDV +sFL +cya +tcZ +fIp +wVF +dZq +wAB +czT +ePz +ePz +ePz +czT +fyl +hZX +hZX +hDi +gcU +gcU +hDi +fyl +lmG +cke +cke +gcU +bsm +gcU +ubZ +cke +tem +wEq +mDZ +kRc +bsm +bsm +pdD +xkE +xkE +tbx +vWP +xkE +xkE +xkE +xkE +hQx +fyl +fyl +xtZ +fyl +fyl +fyl +oHv +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +oHv +fyl +fyl +fNt +www +www +www +vKe +brh +vKe +www +fNt +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(85,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +xsB +sjL +sjL +fyl +fyl +fyl +kRc +bsm +wTq +hQx +hZX +hZX +hZX +fyl +fyl +xzq +mDZ +fyl +mDZ +mDZ +fyl +hZX +hZX +hZX +hZX +hZX +hZX +uJn +uJn +hQx +hQx +hQx +uJn +uJn +hQx +hQx +hQx +hQx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +mDZ +pjU +ePz +old +eEL +old +old +kvS +iof +iqT +bXH +bXH +bXH +eiu +iqT +iqT +kvS +jyr +pxU +jbo +dZq +hny +xMw +tkW +tez +rpQ +nXi +nLP +sFL +fRo +vMY +vMY +geB +sFL +wVF +vVI +wAB +pLb +iLY +iLY +iLY +pLb +fyl +hZX +hZX +gcU +kGN +iyr +voW +xpT +mmT +bsm +qAe +iJO +bsm +gcU +cke +cke +chx +mmT +fyl +kRc +bsm +bsm +hQx +pxU +xkE +wAB +dZq +dZq +wAB +dZq +vWP +mDZ +fyl +fyl +rta +fyl +fyl +oHv +fyl +fyl +fyl +fyl +oHv +fyl +fyl +fyl +oHv +fyl +mDZ +mDZ +fyl +fyl +fNt +www +www +www +vKe +brh +vKe +www +fNt +www +fNt +fNt +fNt +fNt +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(86,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +xsB +xsB +sjL +sjL +psp +psp +hQx +sxM +bsm +hQx +wPK +qcp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hQx +hQx +qcp +qcp +fyl +fyl +fyl +fyl +fyl +fyl +wTq +fyl +fyl +fyl +mDZ +uJn +hQx +hQx +hQx +uJn +hQx +hQx +hZX +hZX +mDZ +mDZ +pLb +qvc +vOR +vOR +cTF +gfN +old +old +old +old +kvS +dfU +iqT +iqT +vdK +dZq +dZq +dZq +dZq +tLJ +xMw +fai +rpQ +cBj +rpQ +nLP +sFL +dEh +dWm +dWm +aFy +sFL +wVF +xQc +wAB +dFG +iLY +iLY +iLY +pLb +fyl +hZX +hZX +gcU +hIX +dVD +gcU +ksW +wEq +bGy +bsm +gcU +bsm +hDi +gcU +iJO +gcU +tVv +mDZ +kQr +bsm +bsm +lmb +gFp +fyl +fyl +hDi +oTL +xqm +oTL +hDi +fyl +fyl +fyl +fyl +fyl +fyl +fyl +oHv +fyl +fyl +fyl +fyl +fyl +oHv +fyl +oHv +fyl +mDZ +mDZ +fyl +fyl +fNt +www +www +www +vKe +brh +vKe +www +fNt +www +fNt +fNt +fNt +fNt +fNt +fyl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(87,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +xsB +xsB +sjL +cdi +psp +psp +fyl +lmG +bsm +psp +psp +fyl +qcp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hQx +fyl +wTq +fyl +fyl +wTq +fyl +wTq +fyl +fyl +fyl +fyl +fyl +wTq +fyl +fyl +wTq +fyl +fyl +wTq +fyl +fyl +uJn +hDn +hDn +mDZ +mDZ +pLb +tXv +pdp +pdp +sVq +gfN +boJ +boJ +boJ +uOa +jbL +eiu +eBg +qer +qer +qer +qer +vWP +dZq +vfK +xMw +gJv +eyB +rpQ +eEP +nLP +sFL +xiK +vJw +vJw +viq +sFL +wVF +czT +czT +pLb +iLY +iLY +iLY +pLb +fyl +hZX +hZX +hDi +gcU +gcU +hDi +hQx +tVv +gcU +gcU +hDi +mAQ +hQx +mDZ +lmG +lMr +uJn +fyl +lmG +bsm +bsm +gGN +fyl +mDZ +mDZ +gcU +wsP +wsP +wsP +gcU +dsO +mDZ +gFp +fyl +gFp +fyl +fyl +mDZ +osA +fyl +oHv +fyl +fyl +fyl +fyl +fyl +fyl +mDZ +mDZ +oHv +fyl +fyl +fNt +iDL +iDL +www +brh +vKe +www +iDL +www +fNt +fNt +fNt +fNt +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(88,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +xsB +xsB +psp +sjL +fyl +fyl +vIR +bsm +bsm +psp +psp +fyl +hQx +hQx +uJn +hQx +uJn +uJn +hQx +hQx +uJn +uJn +hQx +fyl +jzS +pHH +jzS +pHH +pHH +jzS +jzS +jzS +pHH +jzS +pHH +pHH +pHH +pHH +jzS +jzS +fyl +fyl +fyl +fyl +fyl +uJn +hZX +hZX +hZX +fyl +pLb +uWG +pdp +pdp +qQr +qaH +boJ +boJ +boJ +cSb +gfN +eiu +oMz +qer +fjH +jlJ +elw +pxU +wAB +yfc +xMw +wHV +uNg +uNg +uNg +kuA +eNK +rsQ +rsQ +sFL +sFL +sFL +wVF +fyl +fyl +czT +ePz +ePz +ePz +czT +fyl +hZX +hZX +uJn +dTD +vJm +mDZ +fyl +hQx +bsm +fyl +ebb +nDW +jeY +hDi +gcU +gcU +hDi +mDZ +kRc +bsm +hQx +lmb +fyl +fyl +mDZ +gcU +uck +jVr +wsP +gcU +mDZ +fyl +fyl +fyl +fyl +fyl +fyl +mDZ +mDZ +fyl +fyl +fyl +fyl +mDZ +mDZ +fyl +fyl +oHv +fyl +fyl +fyl +fyl +fyl +mDZ +mDZ +fyl +fyl +fyl +mDZ +mDZ +iDL +fNt +fNt +www +www +www +fNt +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(89,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sjL +wTq +ccX +fyl +hQx +bsm +psp +mDZ +fyl +fyl +fyl +wTq +fyl +fyl +fyl +fyl +wTq +fyl +hQx +fyl +fyl +pHH +bQv +nsF +evm +evm +nsF +nsF +xKg +nsF +evm +evm +xKg +nsF +nsF +bQv +ucN +fyl +fyl +fyl +fyl +fyl +fyl +hQx +hZX +hZX +fyl +opi +uhj +pdp +pdp +gQU +gfN +boJ +boJ +boJ +boJ +gfN +eiu +aOi +qer +qer +qer +qer +pxU +wAB +hny +xMw +xMw +xMw +xMw +sOn +xMw +xMw +xtl +igN +sFL +sFL +sFL +wVF +fyl +fyl +fyl +fyl +fyl +fyl +fyl +hQx +hZX +hZX +hDi +gcU +gcU +hDi +fyl +bsm +tTP +bsm +bsm +iIc +hQx +gcU +rCi +bGy +gcU +mDZ +kRc +bsm +bsm +lmb +fyl +fyl +mDZ +hDi +gcU +gcU +gcU +hDi +mDZ +gFp +fyl +fyl +mDZ +fyl +fyl +fyl +fyl +oHv +fyl +fyl +fyl +osA +mDZ +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +osA +mDZ +fyl +fyl +fyl +osA +mDZ +iDL +iDL +fNt +www +www +www +www +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(90,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +fFz +bsm +hQx +bsm +bsm +bsm +fyl +uJn +psp +psp +mHa +let +mHa +mHa +let +fyl +fyl +fyl +fyl +fyl +pHH +nsF +sVV +sVV +sVV +sVV +qAd +tCi +qAd +aiI +sVV +sVV +sVV +sVV +nsF +jzS +fyl +wTq +fyl +wTq +fyl +fyl +hQx +hZX +hZX +fyl +opi +mlS +pdp +pdp +gZr +gfN +old +old +old +old +kvS +aOi +aOi +dZd +rWn +asS +aif +wAB +dZq +eRt +icG +xMw +tyB +alL +lHH +kuA +xMw +xKY +igN +sFL +bQY +tCN +wVF +fyl +fyl +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gcU +qiW +lVz +gcU +fyl +hDi +evu +gcU +gcU +hDi +bsm +gcU +cke +cke +gmh +fyl +fyl +bsm +bsm +lmb +fyl +fyl +gFp +mDZ +mDZ +gFp +mDZ +mDZ +fyl +fyl +fyl +gFp +mDZ +mDZ +fyl +oHv +fyl +oHv +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +oHv +fyl +fyl +oHv +fyl +fyl +fyl +oHv +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fNt +fNt +fNt +www +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(91,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +qfc +qfc +bCh +hQx +hQx +bsm +hQx +bsm +wTq +mDZ +psp +fyl +let +let +let +let +let +qhD +fyl +fyl +fyl +hQx +jzS +nsF +qAd +evv +evv +mGa +evv +rJq +evv +evv +ccp +evv +evv +jIU +ela +pHH +fyl +mDZ +fyl +wTq +fyl +fyl +uJn +hZX +hZX +mDZ +pLb +vfa +ayK +vOR +bJi +gfN +pjU +pjU +rEh +qOE +iso +aOi +oMz +dZd +vDw +utC +pjU +wuh +dZq +eRt +icG +xMw +xMw +xMw +xMw +pgB +xMw +xMw +xMw +xMw +xMw +xMw +wVF +hQx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uJn +gcU +vOf +lGx +hHu +bbX +gcU +pNI +cke +hPR +gcU +bsm +gcU +fdZ +cke +lSo +mDZ +fOm +hQx +bsm +gGN +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +mDZ +mDZ +fyl +fyl +let +let +let +fyl +oHv +fyl +fyl +fyl +oHv +fyl +fyl +fyl +fyl +fyl +fyl +oHv +fyl +fyl +oHv +fyl +fyl +oHv +fyl +oHv +fyl +fyl +fyl +fNt +www +www +www +fNt +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(92,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +mDZ +vIR +psp +psp +uJn +bsm +fyl +wTq +fyl +let +let +mHa +mHa +let +gGN +fyl +fyl +fyl +fyl +pHH +nsF +sVV +sVV +sVV +bSm +aiI +rJq +aiI +oWg +sVV +bSm +sVV +sVV +pHH +pHH +fyl +uJn +fyl +fyl +fyl +wTq +uJn +hZX +hZX +mDZ +pjU +pjU +dZd +dZd +dZd +pjU +pjU +pjU +pjU +pjU +pjU +pjU +pjU +pjU +dZd +dZd +pjU +ckf +upL +jqP +iOI +kup +xMw +vxR +bwe +bwe +uGg +xEM +niY +gZt +iNM +xMw +wVF +hQx +hZX +hZX +hZX +xzx +uVp +iIw +iIw +iIw +mDZ +gkO +qNw +gGu +gcU +fyl +gcU +ivG +ehQ +lNk +gcU +hQx +hDi +gcU +gcU +hDi +hwt +bsm +hQx +bsm +gGN +fyl +gFp +fyl +gFp +fyl +fyl +fyl +fyl +gFp +fyl +fyl +fyl +fyl +oHv +fyl +fyl +let +let +let +fyl +fyl +fyl +fyl +mDZ +fyl +fyl +fyl +oHv +fyl +oHv +fyl +oHv +ccX +jLh +fyl +fyl +oHv +fyl +fyl +oHv +fyl +oHv +oHv +fNt +www +www +www +www +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(93,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +hQx +fyl +psp +psp +psp +psp +hQx +hQx +fyl +fyl +let +hQx +hQx +let +mMM +sjL +sjL +cdi +sjL +sjL +jzS +nsF +sVV +sVV +sVV +sVV +eWv +rJq +aiI +aiI +sVV +sVV +bSm +sVV +xKg +jzS +mDZ +fyl +fyl +fyl +fyl +fyl +uJn +hZX +hZX +fyl +fyl +mDZ +fyl +fyl +tSq +fyl +fyl +fyl +fyl +fyl +mDZ +fyl +fyl +fyl +uJn +uJn +pjU +xkE +xkE +eRt +hEa +xtl +xvf +eNw +xPH +xPH +bwe +xEM +xPH +xPH +xEM +jpJ +sTP +hQx +hZX +hZX +uVp +uVp +onX +xzx +iIw +iIw +mDZ +hDi +mYL +gcU +hDi +mDZ +hDi +gcU +lSo +gcU +hDi +hQx +bsm +hQx +hQx +hQx +hQx +kRc +hQx +bsm +gGN +fyl +fyl +mDZ +mDZ +fyl +fyl +gFp +fyl +fyl +fyl +fyl +fyl +fyl +oHv +fyl +fyl +oHv +fyl +oHv +fyl +fyl +fyl +mDZ +fPj +fPj +fyl +oHv +fyl +oHv +pfi +hQx +hQx +bsm +bsm +hQx +fyl +mDZ +fPj +ccX +ccX +mDZ +oHv +fyl +fNt +fNt +fNt +www +vKe +www +fNt +fyl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(94,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +fyl +fyl +hQx +fyl +wTq +psp +psp +hQx +hQx +hQx +fyl +wTq +psp +fyl +wTq +sjL +sjL +sjL +cdi +sjL +cdi +jzS +evm +aiI +ccp +evv +evv +evv +evv +bxB +evv +evv +evv +mGa +aiI +evm +pHH +lQd +uVp +onX +onX +hPt +onX +uVp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pjU +pjU +pxU +eRt +hEa +xtl +xvf +rXu +xPH +vJF +bwe +bPq +xPH +xPH +fYq +fyl +roQ +hZX +hZX +hZX +uVp +onX +xzx +onX +oNm +iIw +oNm +mDZ +iIw +oHv +mDZ +mDZ +mDZ +fyl +mDZ +vJm +hQx +bsm +hDi +gcU +gcU +hDi +fyl +kRc +hQx +bsm +lmb +gFp +fyl +mDZ +fyl +fyl +fyl +fyl +mDZ +mDZ +mDZ +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +ccX +ccX +fPj +lep +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +mDZ +mDZ +oHv +fyl +fyl +fNt +www +www +www +fNt +fNt +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(95,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +wTq +fyl +wTq +fyl +fyl +fyl +hQx +bsm +bsm +hQx +qcp +psp +psp +psp +fyl +sjL +sjL +sjL +sjL +sjL +cdi +jzS +nsF +sVV +bSm +sVV +bSm +aiI +rJq +kji +aHB +sVV +bSm +sVV +sVV +nsF +jzS +hPt +uVp +hPt +hxO +onX +onX +hPt +uVp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pjU +pjU +dFD +jGc +phf +xMw +aZa +bwe +ubI +bwe +xEM +upQ +kWv +xEM +dmy +hZX +hZX +hZX +hZX +uVp +onX +onX +onX +xzx +iIw +iIw +iIw +mDZ +mDZ +mDZ +hDi +gcU +gcU +hDi +mDZ +fyl +bsm +gcU +cke +gxJ +gmh +fyl +kRc +hQx +bsm +lmb +fyl +fyl +fyl +fyl +fyl +fyl +fyl +mDZ +mDZ +mDZ +gFp +fyl +fyl +fyl +oHv +fyl +mDZ +mDZ +lep +bsm +bsm +bsm +bsm +bsm +hQx +jJi +cUw +jRP +jRP +jRP +fyl +fyl +mDZ +jRP +fyl +hHf +hQx +hQx +bsm +fyl +bsm +bsm +bsm +mDZ +mDZ +oHv +fNt +www +www +www +fNt +fNt +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(96,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +wTq +fyl +psp +psp +oVT +vIR +bsm +bsm +wPK +fyl +psp +psp +psp +psp +sjL +sjL +cdi +sjL +sjL +sjL +jzS +nsF +sVV +sVV +sVV +kDg +jjF +rJq +bxB +qAd +aHB +sVV +sVV +sVV +nsF +jzS +onX +onX +onX +ftC +onX +onX +onX +onX +gym +uVp +gym +gym +uVp +lQd +lQd +uVp +uVp +lQd +lQd +uVp +lQd +lQd +lQd +uVp +uVp +uVp +hZX +hZX +pjU +pjU +iOI +xMw +xMw +xMw +bHG +xMw +xMw +xMw +xMw +xMw +xEM +hZX +hZX +hZX +uVp +uVp +onX +xzx +onX +onX +xzx +onX +iIw +iIw +iIw +oNm +mDZ +uJn +lmG +cke +wsP +fyl +hQx +hDi +gcU +cke +cke +lSo +fyl +pnA +bsm +bsm +fyl +fyl +fyl +gFp +fyl +fyl +gFp +fyl +mDZ +fyl +fyl +fyl +fyl +fyl +fyl +fyl +mDZ +kQr +bsm +bsm +bsm +hQx +oDV +kZP +cUw +fyl +fyl +oHv +fyl +mDZ +oHv +bsm +fyl +oHv +fyl +fyl +oHv +fyl +cUw +fyl +fyl +fyl +bsm +bsm +hQx +mDZ +fyl +fyl +fNt +www +www +fNt +fNt +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(97,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +psp +psp +psp +psp +psp +psp +bsm +bsm +hQx +fyl +fyl +fyl +wTq +sjL +cdi +sjL +sjL +sjL +xsB +pHH +evm +aiI +mGa +evv +evv +evv +pHH +rJq +evv +evv +uKS +evv +qAd +ela +aiI +onX +onX +onX +jTE +onX +onX +hPt +onX +onX +gym +hDi +hJg +hJg +hDi +onX +hPt +onX +onX +onX +hPt +onX +hPt +onX +hPt +atf +uVp +uVp +hZX +hZX +hZX +dnb +dnb +dnb +dnb +hZX +dnb +dnb +dnb +dnb +dnb +lwL +hZX +hZX +hZX +gym +onX +onX +onX +xzx +onX +onX +xzx +iIw +iIw +iIw +iIw +mDZ +mDZ +tNP +bsm +gcU +mDZ +bsm +gcU +oVX +cke +gcU +hDi +hwt +pnA +bsm +bsm +mDZ +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +gFp +fyl +fyl +fyl +oHv +fyl +fyl +mDZ +bsm +bsm +hQx +ikT +mDZ +fyl +oHv +fyl +fyl +oHv +fyl +fyl +oHv +fyl +hQx +oHv +fyl +oHv +fyl +fyl +let +xYU +let +let +bTR +bTR +hHf +bsm +oHv +fyl +oHv +fNt +www +www +fNt +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(98,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hQx +fyl +fyl +fyl +fyl +sjL +cdi +sjL +sjL +cdi +sjL +pHH +evm +sVV +sVV +bSm +sVV +aiI +rJq +evv +jjF +sVV +sVV +sVV +sVV +nsF +pHH +onX +onX +onX +hPt +onX +onX +onX +onX +onX +fQM +gcU +gce +cke +gcU +onX +onX +onX +rCO +rCO +uVp +onX +onX +onX +onX +atf +uVp +uVp +hCI +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gym +onX +onX +onX +onX +onX +onX +onX +onX +onX +xzx +iIw +iIw +iIw +mDZ +mDZ +lmG +lSo +mDZ +hQx +gcU +oko +cke +hPR +gcU +fyl +jbh +bsm +hQx +fyl +fyl +mDZ +mDZ +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +kQr +bsm +hQx +wwD +fyl +mDZ +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +oHv +mDZ +bsm +fyl +oHv +fyl +fyl +xYU +let +let +xYU +let +fpJ +fyl +bsm +bsm +mDZ +fyl +fNt +www +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(99,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uJn +hQx +hQx +fyl +fyl +fyl +sjL +sjL +sjL +cdi +ucN +qIm +evm +nsF +nsF +nsF +bQv +bxB +bxB +bQv +nsF +evm +evm +nsF +bQv +jzS +teQ +uVp +onX +ftC +hPt +onX +onX +onX +onX +rMM +gcU +cke +cke +gcU +onX +hxO +uSH +uSH +ftC +xmP +uVp +onX +hDi +gcU +hJg +drT +atf +noV +rej +uVp +gym +gym +uVp +uVp +uVp +gym +uVp +uVp +gym +uVp +uVp +hDi +gcU +gcU +gcU +hDi +onX +onX +onX +xzx +onX +onX +xzx +onX +oNm +iIw +iIw +iIw +mDZ +fDs +hDi +mDZ +uJn +hDi +gcU +wEq +gcU +hDi +fyl +kRc +bsm +hQx +lmb +fyl +mDZ +mDZ +fyl +gFp +fyl +fyl +fyl +fyl +oHv +fyl +fyl +fyl +fyl +lep +bsm +bsm +fyl +fyl +oHv +fyl +fyl +let +let +let +xYU +fyl +fyl +fyl +fyl +oHv +hQx +mDZ +fyl +fyl +oHv +let +xYU +let +let +let +let +fyl +kgO +bsm +bsm +osA +fNt +www +vKe +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(100,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +bsm +hQx +wTq +fyl +wTq +fyl +sjL +cdi +sjL +cdi +pHH +ucN +pHH +jzS +jzS +pHH +jzS +bxB +ydC +jzS +pHH +jzS +jzS +ybe +ilE +ybe +onX +onX +boT +hxO +onX +onX +ftC +hxO +hPt +uVp +iBU +cke +cke +gcU +boT +uSH +rCO +rCO +rCO +ftC +uVp +onX +hDi +bGy +wsP +hJg +hPt +fyZ +opd +hDi +gcU +gcU +gcU +hDi +gcU +gcU +gcU +hDi +onX +onX +hPt +gcU +cke +fYS +cke +gcU +rMM +xmP +uSH +onX +onX +onX +xmP +ftC +uVp +voD +iIw +iIw +voD +iIw +oHv +mDZ +fyl +bsm +mDZ +xEJ +mDZ +fyl +fyl +pnA +bsm +bsm +lmb +fyl +gFp +mDZ +fyl +fyl +fyl +fyl +fyl +let +bTR +bTR +fyl +oHv +lep +bsm +bsm +wwD +fyl +fyl +fyl +fyl +fyl +let +let +let +let +fyl +fyl +oHv +mDZ +bsm +fyl +oHv +fyl +fyl +fyl +let +let +let +fpJ +let +xYU +fyl +mDZ +hQx +bsm +mDZ +fNt +vKe +brh +vKe +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(101,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +bsm +uJn +wTq +hQx +fyl +fyl +hQx +hQx +fyl +vmC +fyl +vmC +vmC +wTq +fyl +wTq +hQx +hQx +ozM +ozM +ccX +jcK +rCO +rCO +onX +uVp +rCO +rCO +hPt +onX +onX +onX +hPt +onX +atf +hDi +gcU +nRb +drT +onX +ftC +rCO +rCO +rCO +uSH +rMM +onX +iBU +wsP +wsP +gcU +boT +opd +uVp +gcU +hPR +gqY +gqY +gcU +cke +tsO +hPR +gcU +onX +hDi +gcU +hDi +cke +cke +gqY +gcU +rMM +ftC +onX +hPt +onX +xzx +ftC +uVp +rMM +onX +iIw +iIw +iIw +mDZ +mDZ +mDZ +hDi +evu +gcU +wEq +hDi +mDZ +fyl +dpv +bsm +bsm +lmb +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +bTR +bTR +let +fyl +lep +bsm +bsm +wPK +fyl +fyl +fyl +fyl +fyl +fyl +xYU +let +bTR +bTR +mDZ +fyl +fyl +oHv +hQx +mDZ +fyl +fyl +oHv +fyl +xYU +let +bTR +bTR +let +let +oHv +fyl +gGO +bsm +fyl +fyl +fNt +www +www +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(102,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +bsm +bsm +bsm +uJn +fFz +ozM +ccX +eHh +ccX +fyl +fyl +wTq +fyl +fyl +vmC +ozM +hpx +rcE +hQx +hQx +hQx +bsm +rMM +vbR +boT +rMM +dPF +rCO +onX +onX +onX +onX +onX +onX +hPt +rMM +rCO +nDJ +onX +ppM +xmP +ftC +rCO +ftC +xmP +rMM +jCI +hDi +gcU +gcU +hDi +hPt +onX +ntq +hDi +hDi +cke +lVz +gcU +cke +cke +wsP +hJg +onX +hJg +cke +cke +gqY +jYl +hPR +ndb +uVp +onX +iCu +hPt +boT +lAJ +ftC +rMM +rMM +gIT +oNm +iIw +iIw +mDZ +iIw +oHv +gcU +cke +cke +bGy +gcU +mDZ +mDZ +uJn +bsm +bsm +mDZ +oHv +fyl +fyl +oHv +fyl +fyl +oHv +fyl +fpJ +let +let +hQx +bsm +bsm +wwD +fyl +fyl +fyl +fyl +fyl +fyl +fyl +let +let +bTR +bTR +mDZ +fyl +fyl +oHv +bsm +fyl +oHv +fyl +mDZ +mDZ +fyl +fyl +oHv +mDZ +fyl +oHv +fyl +fyl +lmG +hQx +fyl +oHv +fNt +www +www +vKe +vKe +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(103,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hQx +hQx +bsm +bsm +bsm +bsm +bsm +bsm +bsm +hQx +uJn +bOq +ozM +aAL +uJn +hQx +bsm +bsm +bsm +bsm +bsm +bsm +bsm +rMM +rMM +rMM +rMM +uVp +uvu +onX +onX +xmP +ftC +uSH +uSH +hxO +rMM +xmP +uSH +uSH +ftC +xmP +rCO +onX +uVp +onX +rMM +uVp +hDi +wsP +ifj +gcU +boT +onX +lvw +pkn +gcU +wsP +cke +dKI +cke +cke +cke +hJg +onX +drT +cke +hDi +gcU +gcU +gcU +hDi +uVp +ftC +hPt +onX +onX +onX +xmP +onX +ftC +xmP +oNm +iIw +iIw +mDZ +mDZ +mDZ +gcU +pNI +cke +cke +wEq +fyl +dpv +bsm +bsm +bsm +sPR +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +lep +hQx +bsm +bsm +wwD +fyl +fyl +oHv +fyl +fyl +fyl +fyl +fyl +let +let +bTR +bTR +oHv +fyl +fyl +mDZ +fyl +fyl +mDZ +fyl +mDZ +osA +mDZ +oHv +fyl +fyl +oHv +fyl +fyl +fyl +oHv +hQx +fyl +fyl +fNt +www +www +vKe +vKe +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(104,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +fyl +psp +wTq +hQx +hQx +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +hQx +hQx +wwD +cUw +cUw +cUw +bfo +cWr +rMM +rMM +rMM +pUn +hPt +onX +ftC +fQM +fQM +ool +ftC +rMM +ftC +nDJ +onX +onX +hDi +gcU +iqN +hDi +uVp +hDi +gcU +hDi +cke +wsP +gcU +onX +hPt +sTm +eDG +iBU +wsP +wsP +hDi +gcU +rkT +cke +hDi +onX +pmI +rMM +rMM +rMM +uVp +ntq +jxO +rMM +xmP +ftC +uSH +xmP +rCO +onX +onX +iUb +bdM +iIw +qkY +xMu +rmW +mDZ +mDZ +nlc +wEq +lSo +gcU +hDi +kQr +hQx +bsm +bsm +bsm +hQx +fyl +jLh +ccX +ccX +ccX +lmG +fyl +hgo +hQx +bsm +bsm +bsm +wwD +fyl +fyl +fyl +fyl +fyl +fyl +oHv +fyl +fyl +fyl +oHv +fyl +fyl +fyl +fyl +oHv +fyl +oHv +bsm +fyl +oHv +fyl +osA +fyl +fyl +oHv +fyl +fyl +fyl +oHv +fyl +mDZ +hQx +mDZ +fyl +fNt +www +www +vKe +vKe +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(105,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +fyl +fyl +fyl +fyl +cUw +wTq +hQx +hQx +hQx +bsm +hQx +uJn +duO +bOq +wTq +mDZ +mDZ +hQx +wTq +wTq +onX +onX +rCO +uVp +rMM +ljr +lQd +wPy +ftC +rMM +rMM +ool +ftC +uVp +rCO +onX +onX +onX +gcU +bvw +cke +gcU +lZD +gcU +cke +wsP +cke +wsP +rkT +lyq +iCu +rMM +ntq +hDi +gcU +gcU +hDi +ntq +ntq +rMM +uVp +ntq +ntq +uVp +uVp +uVp +rMM +uVp +rMM +rMM +rMM +rMM +uVp +rMM +rMM +uVp +uVp +rMM +wOd +iIw +khv +wKF +bsm +rmW +wKF +nGT +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +hQx +hQx +hQx +hQx +bsm +bsm +bsm +bsm +bsm +bsm +jJi +fyl +fyl +oHv +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +mDZ +hQx +mDZ +fyl +fyl +fyl +fyl +bsm +fyl +fyl +bsm +fyl +fyl +fyl +bsm +hQx +osA +fyl +fNt +www +www +www +www +fNt +fyl +psp +psp +psp +psp +psp +psp +psp +psp +"} +(106,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +wTq +fyl +fyl +fyl +wTq +cUw +cUw +wTq +wTq +fyl +wTq +wTq +wTq +tJr +jcK +wTq +wTq +uvu +boT +boT +lQd +rMM +rMM +rMM +lQd +xmP +uVp +ftC +ftC +xmP +ebE +xmP +xmP +nDJ +onX +gcU +hPR +jYl +ndb +lwu +iBU +cke +cke +cke +bGy +gcU +hPt +muV +bWE +uVp +lQd +suZ +rMM +lQd +uVp +uVp +uVp +uVp +rMM +rMM +kEa +cWr +rCO +atf +rMM +rMM +uVp +uVp +uVp +uVp +ntq +uVp +ntq +ntq +uVp +wOd +wOd +jaP +khv +bsm +bsm +rmW +nGT +bsm +bsm +hQx +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +bsm +hQx +wwD +cUw +cUw +cUw +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +mDZ +mDZ +fyl +fyl +fyl +fyl +fyl +oHv +fyl +fyl +oHv +bsm +fyl +oHv +fyl +oHv +fyl +fyl +fyl +fyl +fyl +oHv +fyl +fyl +bsm +hQx +mDZ +fyl +fNt +www +www +www +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(107,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +fyl +fyl +hQx +fyl +fyl +wTq +vmC +fyl +vmC +oQF +mDZ +wTq +fyl +wTq +jcK +vmC +hPt +onX +onX +afw +lQd +rMM +rMM +rMM +rMM +rMM +rMM +rMM +evX +uVp +lQd +xmP +ftC +ftC +hDi +gcU +gcU +hDi +kdQ +hDi +gcU +hDi +gcU +gcU +hDi +boT +uVp +pOA +mNy +uVp +uVp +rMM +uVp +uVp +ntq +ntq +rMM +xmP +ftC +fgN +xmP +ftC +ciJ +uSH +hxO +rMM +xmP +ftC +ciJ +uSH +xmP +rCO +rCO +mJt +oxm +wSv +iIw +oxm +mDZ +fyl +iIw +eoE +kGQ +lmG +cUw +cUw +kZP +cUw +jRP +jRP +jRP +cUw +jRP +jRP +jRP +cUw +jRP +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +mDZ +fyl +fyl +fyl +fyl +mDZ +mDZ +mDZ +ncw +fyl +fyl +fyl +fyl +oHv +fyl +oHv +mDZ +bsm +mDZ +fyl +fyl +fyl +fyl +oHv +fyl +oHv +fyl +fyl +fyl +fyl +fyl +hQx +bsm +oHv +fNt +www +www +www +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(108,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +mDZ +fyl +qcp +fyl +wTq +fyl +wTq +fyl +wTq +wTq +fyl +fyl +oQF +mDZ +mDZ +mDZ +onX +onX +hPt +hPt +uVp +kzY +uFV +rMM +ntq +lQd +lQd +ntq +uVp +rMM +uVp +ntq +ntq +ntq +rMM +uVp +ntq +uVp +aXE +gFa +lQd +uVp +rMM +lQd +rMM +ntq +xub +ntq +ntq +uVp +rMM +xWC +gxx +boT +ppM +pwc +rMM +ftC +fQM +rMM +ftC +rMM +fQM +fQM +uSH +rMM +ftC +ppM +oEc +ppM +ftC +onX +onX +hPt +iIw +iIw +iIw +fyl +fyl +fyl +iIw +bWG +iIw +iIw +fyl +oHv +fyl +fyl +fyl +mDZ +fyl +fyl +oHv +mDZ +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +mDZ +mDZ +mDZ +fyl +oHv +fyl +fyl +oHv +mDZ +fyl +fyl +fyl +fyl +fyl +mDZ +mDZ +ozI +fyl +bsm +hQx +dgp +fyl +fyl +fyl +fyl +fyl +fyl +fyl +oHv +fyl +fyl +oHv +mDZ +hQx +bsm +fyl +fyl +fNt +fNt +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(109,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hQx +fyl +fyl +fyl +wTq +psp +psp +psp +fyl +wTq +wTq +mDZ +uSP +vmC +vmC +cdi +sjL +sjL +sjL +onX +xmP +ftC +uSH +hxO +rzm +onX +hPt +hxO +ezJ +rMM +rMM +lQd +uVp +rMM +lQd +uVp +rMM +rMM +aXE +ntq +ljr +rMM +rMM +ntq +lQd +uVp +lQd +xWC +rMM +hDi +gcU +kan +hJg +hDi +rMM +rMM +uVp +rMM +rMM +ftC +rMM +rMM +rMM +ftC +onX +xad +xad +tbq +onX +ftC +hPt +onX +onX +iIw +iIw +iIw +fyl +fyl +fyl +iIw +iIw +bWG +iIw +iIw +ozI +fyl +fyl +fyl +oHv +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +oHv +fyl +fyl +fyl +fyl +fyl +mDZ +mDZ +fyl +fyl +fyl +fyl +fyl +fyl +rog +rog +rab +rog +fyl +fyl +mDZ +mDZ +fyl +sXm +mzw +kRH +mzw +rog +sXm +rog +fyl +oHv +fyl +oHv +mDZ +fyl +fyl +fyl +mDZ +hQx +bsm +mDZ +fyl +fNt +www +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(110,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +peo +cdi +cdi +sjL +psp +psp +psp +psp +psp +psp +cdi +sjL +sjL +sjL +sjL +cdi +cdi +sjL +sjL +onX +ftC +ouS +rMM +uSH +onX +onX +onX +hPt +rQJ +xmP +ftC +ftC +xmP +lQd +hDi +gcU +gcU +hDi +aXE +xmP +ftC +ftC +ftC +hDi +gcU +gcU +hDi +lpD +jCI +gcU +hgQ +wsP +gqY +gcU +rMM +xmP +xmP +rMM +rMM +rMM +rMM +fQM +xmP +xmP +rMM +ftC +oEc +ppM +ppM +onX +hPt +hPt +onX +iIw +iIw +iIw +fyl +bOq +ozI +iIw +iIw +iIw +bWG +iIw +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +fyl +aSM +fyl +fyl +fyl +fyl +fyl +fyl +oHv +fyl +fyl +fyl +fyl +fyl +fyl +rog +rog +sfJ +sfJ +sfJ +rog +rog +fyl +fyl +oHv +rog +rog +sfJ +aTX +sfJ +sfJ +sfJ +sfJ +rog +rog +fyl +mDZ +mDZ +osA +fyl +fyl +mDZ +hQx +bsm +mDZ +oHv +fNt +www +www +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(111,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sjL +sjL +xsB +sjL +psp +psp +psp +psp +psp +psp +sjL +sjL +sjL +sjL +cdi +sjL +sjL +sjL +sjL +xWC +xWC +rMM +rMM +ftC +hPt +onX +onX +uVp +rQJ +ftC +onX +nDJ +rCO +onX +gcU +cke +cke +uJf +vJI +ftC +nDJ +onX +nDJ +gcU +wsP +wsP +gcU +rMM +pUn +gcU +tsO +cke +cke +cke +uVp +rMM +rMM +rMM +uVp +ftC +rMM +uVp +rMM +rMM +rMM +hxO +onX +onX +ftC +ftC +ftC +xmP +onX +iIw +iIw +iIw +oHv +fyl +fyl +fyl +dHw +iIw +bWG +iIw +iIw +fyl +oHv +fyl +fyl +osA +mDZ +fyl +fyl +oHv +fyl +fyl +mDZ +mDZ +mDZ +fyl +fyl +fyl +fyl +fyl +fyl +oHv +fyl +fyl +fyl +rog +sfJ +sfJ +sfJ +sfJ +sfJ +rab +hyV +rog +rog +rog +sfJ +sfJ +aTX +pEe +foR +foR +vQh +sfJ +sXm +fyl +fyl +mDZ +mDZ +fyl +fyl +fyl +hQx +bsm +fyl +fyl +fNt +www +www +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(112,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +cZM +cZM +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +xsB +swH +cdi +ctX +sjL +psp +psp +psp +psp +psp +psp +sjL +sjL +cdi +sjL +sjL +sjL +sjL +cdi +sjL +fQM +ftC +ool +onX +onX +onX +onX +onX +xmP +rQJ +uSH +nDJ +onX +uSH +rCO +ndb +cke +lVz +cke +rMM +xmP +xmP +onX +onX +gcU +cke +cke +cke +uVp +rMM +hDi +gcU +gcU +gcU +hDi +uVp +xmP +uSH +uSH +fgN +xmP +ftC +ftC +xmP +rMM +rIq +onX +hPt +ftC +onX +rMM +hPt +ftC +onX +iIw +iIw +iIw +vmC +fyl +bOq +fyl +fyl +iIw +bWG +iIw +iIw +fyl +fyl +fyl +mDZ +mDZ +mDZ +mDZ +oHv +fyl +fyl +fyl +mDZ +mDZ +mDZ +oHv +fyl +fyl +fyl +fyl +sjL +sjL +sjL +fyl +mzw +sLW +sfJ +sfJ +sfJ +foR +sfJ +sfJ +rog +rog +rog +sfJ +sfJ +foR +aTX +foR +foR +foR +foR +sfJ +sXm +rog +oHv +fyl +fyl +fyl +fyl +oHv +hQx +bsm +mDZ +fyl +fNt +www +www +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(113,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +cZM +jyY +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +tIZ +swH +ctX +ctX +sjL +vDr +psp +psp +psp +psp +psp +sjL +sjL +sjL +sjL +sjL +cdi +sjL +sjL +sjL +tra +hxO +uSH +ftC +xmP +onX +onX +onX +uVp +lKj +rCO +onX +nDJ +uSH +onX +gcU +hPR +cke +gcU +rMM +xWC +rCO +nDJ +onX +gcU +mKN +sWQ +gcU +onX +rMM +gcU +wsP +yhE +wsP +gcU +rMM +rMM +onX +onX +onX +onX +onX +onX +onX +rMM +onX +onX +onX +clF +rMM +sVh +onX +hPt +onX +iIw +iIw +bWG +iIw +dHw +fyl +ozI +vmC +iIw +bWG +iIw +iIw +sjL +sjL +cAL +sjL +sjL +peo +fyl +fyl +fyl +fyl +fyl +fyl +fyl +oHv +fyl +fyl +sjL +sjL +sjL +sjL +sjL +sjL +sXf +mzw +sfJ +sfJ +foR +foR +foR +foR +sfJ +sfJ +rog +rab +sfJ +foR +foR +aTX +tPO +foR +foR +foR +vQh +sfJ +rog +rog +fyl +fyl +fyl +fyl +fyl +hQx +bsm +fyl +fyl +fNt +www +www +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(114,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +cZM +xYD +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +xsB +cdi +cdi +xsB +sjL +psp +psp +psp +psp +sjL +sjL +sjL +sjL +sjL +sjL +sjL +sjL +sjL +sjL +onX +onX +onX +onX +hPt +onX +onX +onX +hPt +uVp +hDi +gcU +gcU +hDi +onX +drT +hJg +hJg +hDi +onX +rMM +hxO +uSH +ftC +hDi +drT +hJg +hDi +onX +uVp +rkT +uEt +cke +cke +cke +onX +jsw +hPt +hDi +gcU +gcU +gcU +hDi +onX +rMM +onX +onX +onX +clF +rMM +rMM +rMM +ftC +iIw +iIw +bWG +bWG +iIw +iIw +vmC +fyl +iIw +iIw +bWG +bWG +cAL +jWD +sjL +cAL +cAL +sjL +sjL +oHv +fyl +fyl +ncw +fyl +fyl +fyl +fyl +fyl +fyl +sjL +sjL +fbt +sjL +sjL +sjL +rog +sfJ +sfJ +sfJ +tPO +foR +foR +foR +foR +sfJ +sfJ +rog +sfJ +foR +foR +aTX +fZx +fZx +foR +foR +sfJ +sfJ +sXm +sXm +fyl +fyl +oHv +fyl +mDZ +hQx +hQx +oHv +fyl +fNt +www +www +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(115,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +cZM +xYD +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +tOe +ctX +xsB +peo +sjL +sjL +cdi +sjL +sjL +sjL +cdi +sjL +cdi +sjL +sjL +sjL +sjL +sjL +sjL +sjL +fQM +onX +onX +onX +onX +onX +onX +onX +onX +onX +gcU +cke +cke +cke +onX +onX +onX +onX +onX +onX +rMM +onX +onX +onX +onX +onX +hPt +onX +onX +fQM +gcU +ifj +ert +hDi +drT +hPt +onX +onX +ndb +ert +ert +cke +gcU +ppM +rMM +hPt +onX +onX +hPt +hPt +rMM +onX +iIw +iIw +iIw +bWG +foR +sfJ +iIw +oHv +fyl +iIw +bWG +bWG +iIw +cAL +fbt +sjL +cAL +cAL +sjL +sjL +fyl +fyl +fyl +aLP +fyl +fyl +cAL +sjL +sjL +peo +peo +sjL +cAL +cAL +fbt +fbt +rog +sfJ +sfJ +foR +foR +foR +foR +fZx +tPO +sfJ +sfJ +sfJ +sfJ +foR +tPO +aTX +foR +foR +foR +tPO +sfJ +rog +sXm +rog +sXm +fyl +fyl +fyl +mDZ +hHf +hQx +fyl +fyl +fNt +www +www +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(116,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +cZM +cZM +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +tIZ +ugo +xsB +cdi +sjL +sjL +sjL +sjL +sjL +cdi +sjL +sjL +sjL +sjL +cdi +cdi +sjL +sjL +sjL +iuI +psp +psp +rMM +fQM +rMM +rMM +rMM +fQM +rMM +rMM +iBU +cke +cke +gcU +ppM +hDi +gcU +cke +gcU +hDi +rMM +ftC +onX +hPt +onX +ftC +onX +onX +kXd +hPt +hDi +gcU +hJg +hDi +onX +onX +onX +onX +gcU +azS +cke +cke +cke +hPt +rMM +rMM +onX +onX +hxO +ftC +ftC +sfJ +sfJ +sfJ +foR +foR +foR +foR +sfJ +sfJ +oHv +iIw +bWG +bWG +iIw +sjL +sjL +jWD +cAL +cAL +sjL +sjL +sjL +sjL +sjL +sjL +sjL +cAL +cAL +sjL +sjL +peo +iTP +peo +cAL +sfJ +sfJ +rog +rog +sfJ +foR +foR +foR +foR +foR +tPO +foR +sfJ +sfJ +sfJ +sfJ +foR +tPO +aTX +pEe +foR +foR +foR +sfJ +sXm +rog +rog +rog +oHv +fyl +fyl +fyl +hQx +hQx +mDZ +fyl +fNt +www +www +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(117,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +tIZ +ctX +swH +ctX +peo +sjL +sjL +sjL +sjL +cdi +sjL +sjL +cdi +sjL +sjL +cdi +cdi +psp +psp +psp +rMM +fQM +rMM +rMM +rMM +rMM +rMM +eZE +kXJ +gcU +cke +hPR +ndb +hPt +gcU +ceG +cke +cke +uJf +rMM +xmP +uSH +uSH +ftC +xmP +onX +onX +psp +psp +onX +hPt +onX +onX +onX +onX +fQM +onX +hDi +gcU +gcU +gcU +hDi +ppM +ppM +fQM +onX +onX +onX +hPt +sfJ +sfJ +sfJ +foR +foR +sfJ +sfJ +foR +foR +sfJ +sfJ +iIw +bWG +bWG +iIw +fbt +sjL +fbt +cAL +cAL +sjL +iTP +peo +cAL +fbt +cAL +cAL +cAL +iEh +sjL +sjL +sjL +sjL +cAL +cAL +sfJ +sfJ +rog +rab +sfJ +foR +foR +tPO +fZx +foR +foR +foR +foR +foR +foR +foR +foR +fZx +aTX +sfJ +foR +foR +foR +sfJ +sfJ +sXm +rog +rog +fyl +fyl +oHv +bsm +hQx +fyl +fyl +oHv +fNt +www +www +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(118,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +tIZ +swH +tIZ +cdi +vDr +sjL +sjL +sjL +cdi +psp +psp +sjL +sjL +cdi +sjL +psp +psp +psp +psp +psp +rMM +rMM +psp +gjc +kXJ +kXJ +rMM +rMM +rMM +hDi +gcU +gcU +hDi +hPt +gcU +hPR +cke +cke +gcU +rMM +hPt +onX +onX +hPt +onX +onX +psp +psp +psp +psp +psp +onX +onX +onX +onX +fQM +psp +psp +onX +hPt +onX +onX +onX +hPt +fQM +onX +onX +hPt +sfJ +sfJ +sfJ +foR +foR +foR +sfJ +sfJ +sfJ +foR +foR +sfJ +sfJ +bWG +bWG +iIw +fbt +sjL +sjL +cAL +cAL +peo +peo +peo +cAL +cAL +cAL +cAL +cAL +cAL +cAL +rog +rog +sXm +sfJ +sfJ +sfJ +sfJ +rog +rog +rOU +foR +foR +foR +foR +foR +foR +foR +fZx +tPO +foR +foR +foR +sfJ +edL +rog +vQh +foR +foR +foR +sfJ +sfJ +sXm +rog +rog +mDZ +mDZ +bsm +hQx +fyl +fyl +fyl +fNt +www +www +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(119,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +xsB +sjL +sjL +cdi +psp +psp +psp +psp +sjL +cdi +psp +psp +psp +psp +psp +psp +rMM +rMM +rMM +ikO +kXJ +euy +kXJ +rMM +psp +onX +hPt +hPt +hPt +psp +hDi +psp +psp +psp +hDi +rMM +psp +onX +hPt +psp +psp +psp +psp +psp +psp +psp +psp +psp +onX +hPt +onX +psp +psp +psp +psp +psp +psp +psp +onX +onX +onX +onX +onX +sfJ +sfJ +sfJ +foR +sfJ +foR +foR +sfJ +sfJ +sfJ +foR +foR +sfJ +sfJ +foR +bWG +iIw +cAL +cAL +sjL +sjL +sjL +sjL +cAL +cAL +cAL +cAL +cAL +sjL +cAL +cAL +cAL +rog +rog +rog +rog +sfJ +sfJ +sfJ +rog +rog +sfJ +sfJ +fZx +foR +tPO +tPO +foR +foR +foR +foR +foR +foR +sfJ +sXm +pHp +rog +sfJ +foR +foR +foR +tPO +sfJ +rog +rog +sXm +mDZ +mDZ +bsm +hQx +fyl +oHv +fyl +www +vKe +vKe +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(120,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +rMM +rMM +kXJ +kXJ +kXJ +ikO +kXJ +kXJ +rMM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +onX +onX +fQM +onX +hPt +sfJ +sfJ +foR +sfJ +sfJ +foR +foR +foR +sfJ +sfJ +foR +foR +sfJ +sfJ +sfJ +foR +foR +cAL +cAL +cAL +sjL +fbt +sjL +cAL +iEh +cAL +sjL +sjL +sjL +sjL +sjL +sjL +rog +rog +rog +rog +rog +sfJ +sfJ +rog +rog +sfJ +sfJ +sfJ +sfJ +sfJ +sfJ +edL +mtc +sfJ +foR +foR +foR +foR +sfJ +edL +rog +sfJ +foR +foR +foR +foR +sfJ +sXm +rog +rog +oHv +fyl +bsm +hQx +fyl +fyl +fNt +vKe +brh +vKe +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(121,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +kXJ +kXJ +kXJ +kXJ +euy +kXJ +rMM +rMM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hPt +onX +onX +sfJ +sfJ +sfJ +sfJ +sfJ +foR +foR +foR +sfJ +sfJ +foR +foR +sfJ +sfJ +sfJ +foR +foR +foR +foR +foR +cAL +sjL +sjL +sjL +cAL +cAL +sjL +fbt +sfJ +sfJ +sfJ +sfJ +sfJ +rog +rog +rog +rog +rog +rog +rog +sXm +sfJ +fZx +tPO +sfJ +sfJ +qel +cwV +edL +edL +keH +keH +keH +keH +keH +keH +sfJ +foR +tPO +foR +foR +foR +sfJ +vQh +sXm +rog +fyl +fyl +fyl +hQx +fyl +fyl +fNt +www +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(122,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +rMM +kXJ +kXJ +kXJ +kXJ +kXJ +rMM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +onX +hPt +onX +onX +onX +sfJ +sfJ +sfJ +sfJ +sfJ +foR +foR +sfJ +sfJ +sfJ +foR +foR +sfJ +sfJ +sfJ +foR +foR +foR +foR +foR +sfJ +cAL +fbt +sjL +cAL +sjL +sjL +sjL +sfJ +foR +foR +foR +sfJ +sfJ +sXm +rog +rog +rog +rog +rog +sfJ +sfJ +foR +foR +foR +vQh +aEJ +aEJ +lVj +aEJ +aEJ +aEJ +tPO +tPO +foR +foR +tPO +foR +foR +foR +foR +tPO +foR +sfJ +sXf +rog +sXm +fyl +mDZ +hQx +fyl +oHv +fNt +rQE +www +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(123,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +rMM +rMM +rMM +psp +rMM +rMM +rMM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +onX +onX +hPt +sfJ +sfJ +sfJ +sfJ +sfJ +sfJ +foR +sfJ +sfJ +sfJ +sfJ +foR +sfJ +sfJ +foR +foR +sfJ +sfJ +sfJ +foR +foR +sfJ +cAL +sjL +sjL +sjL +fbt +sfJ +sfJ +foR +foR +foR +foR +foR +sfJ +sfJ +sXm +rog +sXm +rog +sfJ +foR +foR +foR +foR +sLW +aEJ +kel +uJD +yjO +dsM +aEJ +vQh +foR +foR +foR +gzS +foR +foR +foR +foR +foR +foR +sfJ +sXf +rog +mzw +fyl +mDZ +bsm +mDZ +fyl +iDL +iDL +fNt +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(124,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +rMM +psp +psp +psp +rMM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +onX +onX +onX +sfJ +sfJ +sfJ +sfJ +sfJ +sfJ +foR +sfJ +sfJ +sfJ +sfJ +foR +foR +foR +foR +sfJ +sfJ +sfJ +sfJ +sfJ +foR +foR +sfJ +cAL +sjL +jWD +sfJ +sfJ +foR +foR +foR +foR +foR +foR +foR +sfJ +sfJ +sLW +sfJ +sfJ +sfJ +foR +foR +foR +foR +sfJ +aEJ +aan +uBG +uJD +uJD +bXK +sfJ +foR +foR +foR +foR +foR +foR +foR +foR +foR +vQh +sfJ +sXf +mzw +sXf +mDZ +hQx +bsm +mDZ +mzw +sXf +mzw +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(125,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hPt +onX +sfJ +sfJ +foR +sfJ +sfJ +sfJ +sfJ +foR +sfJ +sfJ +sfJ +sfJ +foR +foR +foR +sfJ +sfJ +sfJ +sfJ +sfJ +sfJ +sfJ +foR +sfJ +cAL +fbt +sfJ +sfJ +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +tPO +foR +sfJ +aEJ +ikR +uJD +uJD +lJT +aEJ +sLW +foR +foR +foR +tPO +foR +foR +foR +tPO +foR +sfJ +sfJ +psp +psp +mzw +mDZ +hQx +emc +mDZ +rog +mzw +sfJ +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(126,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +onX +sfJ +sfJ +foR +sfJ +sfJ +sfJ +sfJ +foR +sfJ +sfJ +sfJ +sfJ +sfJ +foR +sfJ +sfJ +sfJ +sfJ +sfJ +sfJ +sfJ +sfJ +sfJ +foR +sfJ +sfJ +sfJ +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +sfJ +aEJ +aEJ +aEJ +aEJ +aEJ +aEJ +foR +foR +foR +foR +tPO +tPO +foR +tPO +foR +foR +sfJ +psp +psp +psp +sfJ +mzw +emc +emc +mzw +sfJ +sfJ +sfJ +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(127,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hPt +sfJ +sfJ +foR +sfJ +sfJ +sfJ +sfJ +foR +foR +sfJ +sfJ +sfJ +sfJ +foR +foR +sfJ +sfJ +sfJ +sfJ +sfJ +sfJ +sfJ +sfJ +foR +sfJ +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +tPO +foR +tPO +foR +tPO +sfJ +sfJ +sLW +sfJ +tPO +foR +foR +foR +tPO +tPO +tPO +foR +foR +foR +sfJ +psp +psp +psp +psp +sLW +sfJ +emc +emc +sfJ +sfJ +sfJ +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(128,1,2) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sfJ +sfJ +foR +sfJ +sfJ +sfJ +sfJ +foR +foR +sfJ +sfJ +sfJ +sfJ +foR +sfJ +sfJ +sfJ +sfJ +sfJ +sfJ +sfJ +sfJ +sfJ +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +foR +tPO +foR +tPO +foR +foR +tPO +foR +tPO +foR +tPO +foR +foR +foR +tPO +foR +sfJ +psp +psp +psp +psp +psp +psp +sfJ +rZj +rZj +sfJ +sfJ +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} + +(1,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(2,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(3,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jCP +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(4,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(5,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(6,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(7,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(8,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jCP +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +kLA +kLA +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +hZX +hZX +psp +psp +psp +psp +psp +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cZs +cZs +cZs +cZs +cZs +jXR +jXR +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(9,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +hZX +hZX +psp +psp +psp +ifq +kLA +kLA +kLA +kLA +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +hZX +hZX +tTf +hZX +hZX +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cZs +cZs +tiv +cZs +cZs +cZs +cZs +cZs +jXR +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(10,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +kLA +kLA +kLA +kLA +kLA +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tTf +tTf +tTf +tTf +tTf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gAV +gAV +gAV +gAV +gAV +hZX +esl +esl +psp +psp +psp +psp +psp +psp +psp +psp +esl +iLF +iXr +psp +psp +psp +psp +psp +psp +cZs +cZs +cZs +cZs +cZs +cZs +cZs +cZs +cZs +sNy +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +sNy +hsL +sNy +jXR +jXR +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(11,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +kLA +kLA +kLA +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tTf +hZX +tTf +hZX +tTf +tTf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +psp +psp +psp +psp +psp +esl +esl +iXr +esl +eDT +iLF +psp +psp +psp +psp +jXR +jXR +jXR +jXR +jXR +cZs +cZs +sNy +sNy +hsL +sNy +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +jXR +sNy +hsL +sNy +hsL +hsL +sNy +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(12,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +kLA +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tTf +tTf +tTf +hZX +tTf +tTf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +esl +esl +hZX +esl +eDT +iLF +iXr +iLF +iLF +iXr +psp +psp +psp +psp +psp +psp +psp +psp +psp +jXR +sNy +hsL +sNy +hsL +hsL +sNy +hsL +sNy +cZs +cZs +cZs +cZs +sNy +sNy +hsL +sNy +hsL +sNy +tiv +hsL +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(13,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +iLF +eDT +iLF +esl +eDT +iXr +iXr +psp +psp +psp +psp +psp +psp +psp +jXR +jXR +sNy +hsL +jXR +jXR +hsL +sNy +hsL +cZs +cZs +cZs +cZs +hsL +hsL +sNy +sNy +hsL +cZs +cZs +sNy +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(14,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +iPk +hvS +hvS +hZX +tcu +tcu +iPk +hvS +hZX +hZX +hZX +tcu +tcu +iPk +hZX +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +iLF +iLF +iXr +iXr +esl +eDT +iXr +esl +esl +eDT +esl +iLF +psp +psp +jXR +jXR +jXR +sNy +jXR +jXR +sNy +sNy +sNy +sNy +cZs +cZs +cZs +sNy +sNy +jXR +jXR +sNy +cZs +cZs +cZs +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(15,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +tcu +iPk +hvS +hvS +hZX +tcu +tcu +iPk +hvS +hvS +hZX +hZX +tcu +hZX +hZX +hZX +hvS +hZX +hZX +hZX +hZX +hZX +iPk +hZX +iPk +hZX +iPk +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +eDT +iXr +iLF +eDT +iXr +esl +esl +eDT +esl +bCp +esl +esl +eDT +iLF +jHG +psp +psp +psp +hsL +sNy +hsL +hsL +sNy +hsL +hsL +cZs +cZs +cZs +hsL +hsL +jXR +jXR +hsL +cZs +cZs +sNy +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(16,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +tcu +iPk +hvS +hvS +hZX +tcu +tcu +iPk +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +iPk +hZX +hZX +hZX +iPk +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +iLF +iXr +iLF +esl +eDT +iXr +esl +iLF +esl +npJ +npJ +esl +esl +esl +iLF +jHG +psp +psp +sNy +hsL +sNy +sNy +sNy +jXR +jXR +sNy +sNy +sNy +sNy +sNy +sNy +sNy +hsL +cZs +cZs +hsL +sNy +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(17,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +tcu +tTf +hvS +hvS +hZX +tcu +tcu +tTf +hvS +hvS +hZX +hZX +tcu +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +eDT +iXr +iLF +iXr +iXr +esl +koX +koX +koX +koX +koX +koX +esl +esl +eDT +jHG +psp +psp +jXR +sNy +hsL +sNy +jXR +jXR +jXR +jXR +sNy +hsL +sNy +hsL +hsL +sNy +sNy +cZs +cZs +sNy +hsL +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(18,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hvS +hvS +hvS +hZX +hZX +hZX +hZX +tcu +tcu +tTf +hvS +hvS +hZX +tcu +tcu +tTf +yir +hvS +hZX +hZX +tcu +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tTf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eDT +esl +iLF +iXr +esl +eDT +esl +koX +koX +npJ +esl +esl +esl +koX +npJ +npJ +npJ +psp +psp +psp +jXR +sNy +sNy +hsL +jXR +jXR +jXR +jXR +hsL +tiv +hsL +sNy +sNy +hsL +sNy +hsL +cZs +hsL +sNy +sNy +psp +psp +psp +psp +psp +psp +psp +"} +(19,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hvS +hvS +hvS +hZX +hZX +hZX +hZX +hZX +tcu +tTf +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +qgr +tTf +hZX +tTf +tTf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +esl +eDT +iLF +iXr +iXr +esl +koX +esl +esl +esl +esl +esl +koX +npJ +iLF +iLF +jHG +psp +psp +jXR +sNy +hsL +sNy +sNy +jXR +jXR +hsL +sNy +hsL +sNy +sNy +sNy +sNy +hsL +sNy +hsL +sNy +hsL +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(20,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hvS +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +jcv +hZX +hZX +hZX +hZX +jcv +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +eDT +esl +iXr +iLF +iXr +esl +eDT +koX +esl +esl +psp +eDT +iXr +koX +npJ +eDT +iLF +psp +psp +psp +jXR +cZs +cZs +hsL +hsL +sNy +sNy +sNy +hsL +sNy +hsL +hsL +hsL +hsL +jXR +jXR +hsL +sNy +sNy +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(21,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +iPk +iPk +iPk +iPk +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +iXr +iLF +iLF +eDT +esl +esl +cce +esl +iXr +psp +psp +iXr +koX +npJ +esl +psp +psp +psp +psp +jXR +cZs +cZs +sNy +sNy +sNy +hsL +sNy +sNy +hsL +sNy +sNy +sNy +jXR +jXR +jXR +jXR +sNy +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(22,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +tcu +tcu +iPk +iPk +iPk +yir +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +eDT +esl +eDT +iXr +iXr +esl +iXr +hZX +iXr +psp +psp +psp +esl +koX +npJ +esl +psp +psp +psp +psp +jXR +cZs +jXR +jXR +sNy +hsL +sNy +hsL +cZs +cZs +sNy +hsL +sNy +jXR +jXR +jXR +jXR +sNy +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(23,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +tcu +tcu +tcu +iPk +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +jcv +hZX +hZX +hZX +hZX +jcv +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +iLF +esl +iLF +eDT +esl +hZX +hZX +esl +iXr +psp +psp +esl +koX +esl +eDT +psp +psp +psp +psp +cZs +cZs +jXR +jXR +hsL +sNy +hsL +sNy +cZs +cZs +sNy +hsL +sNy +sNy +jXR +jXR +sNy +hsL +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(24,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +tcu +tcu +tTf +hvS +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +eDT +iLF +iXr +esl +esl +hZX +hZX +fNw +iXr +psp +psp +esl +koX +iXr +iXr +psp +psp +psp +psp +cZs +cZs +cZs +hsL +sNy +hsL +sNy +sNy +cZs +cZs +cZs +sNy +sNy +hsL +sNy +sNy +hsL +sNy +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(25,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +tcu +tTf +tTf +tTf +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +eDT +esl +tbJ +hZX +hZX +hZX +iXr +psp +psp +psp +esl +koX +jPE +iXr +eDT +psp +psp +psp +cZs +cZs +hsL +sNy +hsL +sNy +sNy +jXR +jXR +cZs +cZs +sNy +jXR +jXR +sNy +jXR +jXR +hsL +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(26,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +tTf +tTf +tTf +tTf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +eDT +iXr +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +iXr +esl +koX +iXr +iXr +psp +psp +psp +sNy +cZs +sNy +hsL +sNy +hsL +sNy +jXR +jXR +hsL +sNy +jXR +ahS +nXA +eXb +ahS +jXR +sNy +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(27,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +iPk +iPk +iPk +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hvS +hvS +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +iXr +eDT +koX +koX +iXr +psp +psp +psp +sNy +hsL +sNy +sNy +sNy +hsL +sNy +sNy +hsL +sNy +hsL +jXR +jaf +nXA +rXW +nXA +jXR +hsL +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(28,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +tcu +iPk +hvS +hvS +hZX +tcu +tcu +iPk +hvS +hvS +hZX +hZX +hZX +iPk +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hvS +hvS +hvS +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +psp +psp +iXr +iXr +esl +koX +eDT +psp +psp +psp +sNy +hsL +sNy +jXR +jXR +hsL +sNy +hsL +sNy +hsL +sNy +sNy +nXA +eXb +rXW +nXA +hsL +sNy +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(29,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +tcu +iPk +yir +hvS +hZX +tcu +tcu +iPk +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hvS +hvS +hvS +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +jHG +iXr +iXr +koX +iXr +jHG +psp +psp +sNy +hsL +jXR +jXR +jXR +jXR +hsL +sNy +hsL +sNy +hsL +sNy +ahS +nXA +rXW +ahS +jXR +hsL +sNy +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(30,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +tcu +tTf +hvS +hvS +hZX +tcu +tcu +jCk +hvS +hvS +tTf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hvS +hvS +hvS +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +jHG +iXr +fJz +jHG +psp +psp +psp +sNy +hsL +jXR +jXR +jXR +jXR +sNy +hsL +sNy +hsL +sNy +hsL +jaf +ahS +eJh +ahS +jXR +sNy +hsL +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(31,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +tcu +tTf +hvS +hvS +hZX +tcu +tcu +tTf +hvS +hvS +tTf +tTf +tTf +tTf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hvS +hvS +hZX +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +jXR +jXR +sNy +sNy +hsL +tiv +jXR +jXR +sNy +sNy +sNy +cZs +sNy +sNy +hsL +sNy +psp +usR +psp +sNy +hsL +sNy +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(32,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +tcu +tTf +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hvS +hvS +hvS +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +jXR +jXR +hsL +cZs +cZs +hsL +hsL +sNy +sNy +cZs +cZs +cZs +sNy +hsL +sNy +hsL +psp +nzc +psp +hsL +sNy +hsL +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(33,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +jXR +cZs +cZs +cZs +cZs +sNy +sNy +hsL +sNy +cZs +cZs +cZs +hsL +sNy +hsL +sNy +psp +oDK +psp +sNy +hsL +sNy +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(34,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +cZs +cZs +cZs +cZs +sNy +sNy +sNy +sNy +hsL +cZs +cZs +jXR +jXR +sNy +hsL +sNy +psp +qhw +psp +sNy +hsL +sNy +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(35,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +cZs +cZs +cZs +jXR +jXR +jXR +jXR +sNy +sNy +sNy +hsL +jXR +jXR +sNy +sNy +hsL +uNR +srr +uNR +hsL +sNy +hsL +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(36,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +cZs +cZs +cZs +jXR +jXR +jXR +jXR +jXR +sNy +sNy +sNy +hsL +sNy +hsL +hsL +sNy +vWy +lMe +czh +sNy +hsL +sNy +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(37,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +oGx +fbL +oGx +fbL +oGx +fbL +oGx +fbL +oGx +fbL +oGx +fbL +oGx +fbL +oGx +fbL +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sNy +hsL +sNy +sNy +hsL +uNR +psp +uNR +hsL +sNy +hsL +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(38,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +oGx +qxN +qxN +qxN +qxN +qxN +qxN +qxN +dZv +qxN +qxN +qxN +qxN +qxN +qxN +qxN +qxN +qxN +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jXR +jXR +sNy +sNy +hsL +sNy +sNy +sNy +sNy +hsL +sNy +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(39,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +wdV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +fbL +kwX +rEp +rEp +rEp +rEp +rEp +epf +wfc +kmF +kmF +kmF +kmF +kmF +kmF +kmF +gpy +qxN +fbL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +jXR +jXR +jXR +hsL +sNy +hsL +hsL +hsL +jXR +jXR +sNy +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(40,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +wdV +bXs +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +oGx +bvj +hZX +hZX +hZX +hZX +hZX +plJ +wce +xLU +pNY +xLU +xLU +xLU +xLU +xLU +phY +pyU +fbL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +jXR +jXR +jXR +sNy +hsL +sNy +sNy +sNy +jXR +jXR +cZs +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(41,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sMY +wdV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +oGx +fbL +oGx +fbL +oGx +fbL +bvj +hZX +hZX +hZX +hZX +hZX +khA +vpV +xLU +xLU +xLU +xLU +xLU +xLU +xLU +phY +iGU +xvb +tPt +xvb +iGU +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +tcu +hZX +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +sNy +sNy +hsL +sNy +cZs +cZs +cZs +sNy +psp +psp +psp +psp +psp +psp +psp +"} +(42,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +wdV +bXs +wdV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +oGx +qxN +qxN +qxN +qxN +qxN +qxN +bvj +hZX +hZX +hZX +hZX +hZX +pVp +qxN +sIe +pNY +sIe +sIe +sIe +sIe +wcF +xde +xvb +wjq +nUi +uoo +xvb +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +hZX +hZX +hZX +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +psp +psp +psp +psp +psp +psp +jXR +hsL +sNy +hsL +sNy +cZs +cZs +hsL +psp +psp +psp +psp +psp +psp +psp +"} +(43,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +wdV +lif +bXs +bXs +bXs +nAp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +fbL +fbL +kwX +eMo +eMo +ftR +ftR +ftR +mPQ +hZX +hZX +hZX +hZX +hZX +pVp +qxN +sIe +sIe +sIe +sIe +sIe +sIe +wcF +wcF +xvb +cCm +vYp +eob +xvb +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +koX +psp +psp +psp +psp +psp +jXR +sNy +hsL +sNy +hsL +cZs +hsL +sNy +psp +psp +psp +psp +psp +psp +psp +"} +(44,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +uzs +tdl +tdl +uzs +tdl +bfK +tdl +uzs +wdV +bXs +bXs +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vzv +heO +bvj +eqM +sIe +sIe +sIe +sIe +eZF +hZX +hZX +hZX +hZX +hZX +plJ +qxN +sIe +sIe +sIe +sIe +sIe +sIe +wcF +wcF +xvb +sFy +sFy +uKI +eXI +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hvS +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pzV +sfH +npJ +hZX +hZX +hZX +hZX +hZX +hZX +aDu +psp +esl +esl +psp +psp +psp +psp +psp +jXR +jXR +sNy +hsL +sNy +sNy +hsL +sNy +psp +psp +psp +psp +psp +psp +psp +"} +(45,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +tdl +uzs +oaV +tdl +dYM +iEP +lTO +tdl +tUC +rDy +kjt +jlO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +czT +ePz +ePz +ePz +ePz +czT +cZj +oFq +sIe +sIe +sIe +sIe +sIe +fxC +hZX +hZX +hZX +hZX +hZX +hZX +hZX +xgL +aHT +hZX +hZX +hZX +hZX +hZX +hZX +xvb +wRZ +xvb +xvb +xvb +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +tcu +tcu +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pzV +pzV +esl +esl +hZX +aDu +npJ +esl +esl +esl +esl +esl +esl +esl +psp +psp +psp +psp +jXR +jXR +sNy +hsL +jXR +jXR +hsL +sNy +psp +psp +psp +psp +psp +psp +psp +"} +(46,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +tdl +wHs +iEP +tdl +ovm +iEP +jxG +tdl +utU +nAp +rSL +xEi +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pLb +sbg +jDX +mBr +mBr +pLb +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +xgL +aHT +hZX +hZX +hZX +hZX +hZX +hZX +xvb +orz +nop +woM +iGU +xvb +xvb +xvb +xvb +iGU +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pzV +pzV +esl +npJ +esl +npJ +esl +esl +psp +uZo +psp +psp +psp +psp +psp +psp +psp +psp +jXR +jXR +hsL +sNy +jXR +jXR +hsL +sNy +psp +psp +psp +psp +psp +psp +psp +"} +(47,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +lif +tdl +rer +iEP +dJH +qJn +iEP +iOR +tdl +nAp +xEi +rSL +lif +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pLb +dOQ +qZV +nCg +jiZ +pLb +uAc +uAc +rsP +wvR +xLU +xLU +xLU +xLU +xLU +xLU +xLU +ydO +iwS +iwS +rPQ +qiP +act +act +act +act +act +hZX +hZX +iGU +xvb +xvb +xvb +xvb +oTB +sFy +lsi +xiI +xvb +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pzV +pzV +esl +esl +esl +npJ +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jXR +cZs +sNy +sNy +hsL +sNy +sNy +hsL +psp +psp +psp +psp +psp +psp +psp +"} +(48,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +lif +uzs +tdl +tdl +lpf +wbP +iEP +cmQ +uzs +ptr +xEi +rSL +jlO +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vFV +tRx +lYN +lYN +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pLb +dOQ +qZV +kVX +jiZ +pLb +hZX +hZX +dBF +wvR +dvI +rAW +rAW +rAW +iYv +rAW +dvI +ydO +hZX +hZX +jAK +qUm +act +act +act +qUm +dmx +hZX +hZX +urU +urU +dxA +dxA +xvb +hvr +lSz +lSz +grD +lHQ +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uZo +tYk +npJ +koX +esl +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cZs +cZs +sNy +sNy +hsL +sNy +hsL +sNy +psp +psp +psp +psp +psp +psp +psp +"} +(49,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +kxd +lFX +ryq +xDL +tdl +bvE +iEP +iOR +tdl +nAp +xEi +rSL +xEi +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lYN +lYN +tRx +vFV +hZX +vFV +qIX +nDD +vFV +vFV +vFV +vFV +vFV +vFV +vFV +lYN +lYN +lYN +lYN +khA +tXA +tXA +rxy +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pLb +dOQ +qZV +kVX +jiZ +pLb +hZX +wvR +dBF +wvR +hUy +dvI +hUy +xPs +xvK +eGm +hUy +ydO +hZX +oWe +kGq +act +act +act +act +act +act +iwS +iwS +urU +urU +dxA +dxA +eXI +bJv +lSz +lSz +sFy +xvb +hZX +hZX +hZX +hZX +hZX +udN +uNR +vCc +uNR +udN +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uZo +esl +esl +esl +esl +esl +psp +psp +psp +psp +psp +jXR +jXR +jXR +jXR +cZs +cZs +cZs +cZs +hsL +hsL +sNy +hsL +sNy +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(50,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +lif +bXs +oxH +uTy +eyx +tdl +ncu +iEP +iEP +tdl +xXs +xXs +rSL +wdV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vFV +qSW +qSW +vFV +vFV +vFV +bxU +qSW +vFV +bRB +njK +mVM +fpV +czi +bzx +vFV +ski +fBu +vFV +aJh +rlr +rlr +mOs +vFV +tRx +lYN +lYN +hZX +hZX +hZX +hZX +hZX +hZX +pLb +dOQ +qZV +kVX +jiZ +pLb +hZX +wvR +dvI +iYv +vLQ +viY +dvI +szE +xvK +lDJ +hUy +ydO +hZX +oWe +ceL +urU +urU +urU +dxA +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +xvb +ecu +cCc +lzE +cCc +xvb +hZX +hZX +hZX +hZX +hZX +uNR +cjL +jdc +cjL +uNR +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +krS +nhf +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uZo +esl +esl +aDu +esl +esl +psp +psp +psp +psp +psp +cZs +tiv +cZs +cZs +cZs +cZs +cZs +jXR +jXR +sNy +hsL +sNy +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(51,1,3) = {" +psp +psp +psp +psp +psp +psp +lif +lif +lif +lif +uTy +bXs +uzs +tdl +rvM +tdl +uzs +vti +bXs +bXs +xEi +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tRx +eaC +qSW +vFV +hNx +vFV +vFV +kmL +vFV +cSd +wkj +vyP +vyP +vyP +njK +vFV +xVh +hMK +vFV +gdJ +wox +nnr +qSl +vFV +eaC +qSW +lYN +dxA +dxA +dxA +dxA +dxA +dxA +pLb +dOQ +qZV +xQe +jiZ +pLb +hZX +wvR +hUy +pMg +sue +src +hUy +kPs +xvK +xvK +hUy +ydO +hZX +oWe +nva +wcF +iZa +wcF +wcF +wcF +wcF +hZX +hZX +hZX +hZX +hZX +hZX +iGU +xvb +xvb +atE +xvb +iGU +fbL +hZX +hZX +hZX +hZX +vCc +cjL +egU +cjL +vCc +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +byY +bZQ +bZQ +bZQ +bZQ +byY +hZX +hZX +hZX +hZX +hZX +krS +krS +nhf +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uZo +esl +esl +aDu +aDu +esl +psp +psp +psp +psp +psp +cZs +jXR +cZs +jXR +jXR +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(52,1,3) = {" +psp +psp +psp +psp +psp +lif +lif +uTy +lif +wdV +bXs +uTy +lif +lif +uTy +bXs +bXs +bXs +bXs +jlO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vFV +vFV +vFV +vFV +wao +xDk +ncP +ncP +vFV +sOZ +njK +vyP +vyP +vyP +njK +vFV +vAZ +xPz +vFV +vFV +qcq +ibq +vFV +vFV +qSW +qSW +lYN +hZX +hZX +hZX +hZX +hZX +hZX +czT +ePz +ePz +ePz +mEN +czT +hZX +wvR +hUy +uxz +sue +sue +dvI +rAW +dvI +iQP +hUy +ydO +hZX +hZX +oIO +jVk +wcF +wcF +wcF +jVk +mVX +dxA +dxA +dxA +dxA +hZX +hZX +hZX +hZX +wcF +wcF +rmY +dSQ +fbL +hZX +hZX +hZX +hZX +uNR +cjL +cjL +cjL +uNR +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +bZQ +cnv +pAW +pAW +uTU +bZQ +hZX +hZX +hZX +hZX +hZX +krS +krS +nhf +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uZo +esl +esl +esl +esl +esl +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +esl +esl +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(53,1,3) = {" +tFF +uTy +uTy +lif +uSn +lif +psp +psp +uTy +lif +wdV +bXs +nAp +uTy +bXs +lif +oJQ +bXs +xEi +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vFV +uST +wyL +njK +njK +vFV +taB +ncP +vdO +kXc +njK +vuG +qfi +elO +bRB +vFV +onS +xPz +vFV +oXq +wao +wao +kCq +vFV +qSW +vFV +lYN +hZX +hZX +hZX +hZX +hZX +hZX +mpi +hZX +pfY +oWe +lNV +aHT +hZX +wvR +dvI +uCa +vNy +sue +sue +sue +sue +sue +hUy +ydO +hZX +hZX +wcF +wcF +wcF +hZX +hZX +hZX +hZX +hZX +hZX +hZX +act +act +act +act +hZX +wcF +wcF +rmY +qxN +oGx +hZX +hZX +hZX +hZX +lBv +uNR +vCc +uNR +lBv +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +bZQ +pAW +pAW +pAW +dXC +bZQ +hZX +hZX +hZX +hZX +hZX +krS +krS +nhf +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +aDu +esl +esl +aDu +esl +esl +esl +psp +psp +psp +psp +psp +psp +esl +esl +esl +esl +esl +esl +esl +esl +esl +esl +psp +psp +psp +psp +psp +psp +psp +"} +(54,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +lif +bXs +bXs +bXs +bXs +uTy +bXs +lif +bXs +jlO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vFV +cRp +njK +njK +njK +vFV +feU +ncP +vdO +vFV +rby +vFV +vFV +vFV +vFV +vFV +irY +xPz +vFV +sLX +wao +cBk +hEl +vFV +iiz +tsd +hZX +hZX +hZX +hZX +hZX +hZX +mpi +mpi +hZX +jtc +oWe +vgI +aHT +hZX +wvR +jWB +hUy +vVy +sue +sue +fCm +xnm +mhc +iYv +ydO +hZX +hZX +hZX +hZX +aHT +hZX +kmR +gcr +gcr +kmR +bmc +bmc +bmc +bmc +kmR +dxA +hZX +wcF +wcF +rmY +qxN +fbL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +bZQ +rxV +pAW +pAW +him +bZQ +hZX +hZX +hZX +hZX +hZX +hDi +gcU +gcU +xuL +gcU +hDi +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +esl +esl +esl +aDu +esl +esl +esl +psp +psp +psp +esl +esl +esl +esl +aDu +hZX +hZX +hZX +hZX +esl +esl +psp +psp +psp +psp +psp +psp +psp +"} +(55,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +lif +wdV +gko +bXs +uTy +bXs +bXs +bld +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vFV +uOM +wkj +njK +njK +vFV +ncP +ncP +vyP +vyP +vyP +vyP +iwd +vyP +vyP +vyP +xPz +xPz +nBy +wGw +wao +wao +djR +vFV +iiz +bNO +hZX +hZX +hZX +hZX +hZX +hZX +mpi +hZX +hZX +wvR +eVX +mEN +hyL +dZd +eVX +wAo +dvI +rAW +rAW +cHm +rAW +iYv +rAW +dvI +ydO +hZX +dxA +kmR +bmc +bmc +bmc +kmR +mxj +uxm +wnB +dOs +aPD +tWr +sjG +wnB +dxA +hZX +wcF +wcF +rmY +qxN +qxN +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +bZQ +dXC +pAW +pAW +dXC +bZQ +hvS +hvS +hZX +hZX +hZX +gcU +tAx +iyS +jfx +mln +gcU +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +esl +esl +esl +esl +esl +esl +esl +esl +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(56,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +lif +wdV +bXs +dds +bXs +nAp +ijC +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vFV +mFn +njK +njK +njK +vFV +ncP +ncP +vyP +vyP +aQL +vyP +vyP +vyP +vyP +aQL +bmA +xPz +vFV +lHd +siG +siG +isc +vFV +iiz +tsd +hZX +hZX +hZX +hZX +hZX +hZX +mpi +hZX +wvR +wvR +nnB +gIB +eSn +vAP +dZd +wAo +sIe +sIe +sIe +gSx +sIe +sIe +sIe +sIe +ydO +gMX +dxA +wnB +rqU +oDe +rKY +wnB +rKY +rKY +aMC +cwI +cwI +cwI +gqM +wnB +dxA +hZX +wcF +bic +xde +meq +qxN +fbL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eDW +urM +pAW +pAW +ghW +eLe +hvS +hvS +hZX +hZX +hZX +gcU +uLC +vBU +xHE +iyS +gcU +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +aDu +aDu +esl +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(57,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +lif +wdV +bXs +bXs +bXs +gTE +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +qJt +vFV +bhL +njK +rDc +njK +vFV +uUT +ncP +vFV +vFV +vFV +vFV +jUp +jUp +vFV +vFV +vFV +vFV +vFV +wJv +eqm +aUj +vFV +vFV +iiz +bNO +hZX +hZX +hZX +hZX +hZX +hZX +mpi +hZX +wvR +heX +mNk +wUf +aIR +heB +dZd +vWk +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +dxA +wnB +xoM +xoM +xoM +xuD +rKY +rKY +wnB +rGX +aPD +hDd +aPD +wnB +dxA +hZX +wvR +wvR +gAg +nzO +qxN +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +bZQ +hPF +pAW +pAW +bOX +bZQ +hvS +hvS +hZX +hZX +hZX +gcU +onY +wwJ +xPy +kxE +gcU +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(58,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +lif +bXs +lif +bXs +fnd +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lYN +vFV +vFV +vFV +peE +njK +xyF +vFV +taB +ncP +vFV +ybg +iiz +iiz +iiz +iiz +iiz +iiz +iiz +ybg +vFV +vFV +vFV +vFV +vFV +tPn +iiz +rDz +hZX +hZX +hZX +hZX +hZX +hZX +eVX +dZd +dZd +dZd +uda +uii +uii +uii +dZd +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +dxA +wnB +uwk +uwk +gzx +wnB +sny +mXW +kmR +bmc +bmc +bmc +bmc +kmR +dxA +hZX +wvR +wvR +wvR +aYz +qxN +fbL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +bZQ +urM +hUT +pAW +pAW +bZQ +hvS +hvS +hZX +hZX +eoL +hDi +gcU +gcU +yfM +gcU +hDi +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(59,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +lif +wdV +wdV +lif +lif +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vFV +yex +xPz +umU +siG +siG +nTd +vFV +kVZ +ncP +jUp +iiz +pkE +rEp +rEp +rEp +rEp +rEp +quA +iiz +iiz +iiz +iiz +iiz +iiz +iiz +iiz +bNO +hZX +hZX +hZX +hZX +hZX +hZX +nje +bsq +teO +dZd +emS +awD +awD +kRE +acA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +dxA +kJB +uwk +sDG +tYZ +wnB +nSX +rKY +ugq +tEi +wnB +xfl +uWg +wnB +dxA +hZX +qQz +aCN +wvR +nzO +qxN +fbL +oGx +fbL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +oRq +lww +lww +lww +lww +bZQ +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(60,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +lif +wdV +sMY +lif +wdV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tRx +szB +oZR +vFV +tmk +goV +bCV +vFV +ncP +ncP +vFV +hYf +hZX +hZX +hZX +hZX +hZX +hZX +wuq +rEp +rEp +rEp +rEp +rEp +rEp +quA +iiz +rDz +hZX +hZX +hZX +hZX +hZX +hZX +dZd +fWf +teO +aBw +awD +awD +awD +oYu +dZd +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +dxA +wnB +uwk +uwk +aEU +wnB +ibE +rKY +ugq +tEi +lRy +vmg +uWg +ebW +hZX +hZX +wvR +wvR +wvR +nzO +qxN +qwa +rye +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +bZQ +kqA +kqA +kqA +kqA +bZQ +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(61,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +bXs +prU +wdV +bXs +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vFV +vFV +vFV +vFV +vFV +vFV +vFV +vFV +vFV +vFV +vfi +vFV +vFV +vFV +vFV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vFV +vFV +fBu +lYN +lYN +hZX +hZX +hZX +hZX +hZX +eVX +dZd +dZd +dZd +weF +awD +awD +fHU +dZd +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +dxA +wnB +cGL +pBo +pwX +wnB +nSX +jDn +mqm +mqm +xec +vta +iCp +ebW +dxA +hZX +qQz +wvR +wvR +nzO +qxN +qxN +jbx +fbL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +bZQ +kqA +kqA +kqA +kqA +bZQ +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(62,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sMY +bXs +bXs +bXs +lif +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lYN +gHE +ssC +ssC +ssC +ssC +ssC +ssC +ssC +ssC +ssC +ycC +llW +udT +vFV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vFV +byJ +qSW +qhX +vFV +dxA +dxA +dxA +dxA +dxA +mpi +hZX +wvR +dZd +iNR +onA +awD +elL +dZd +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +dxA +kmR +gcr +bmc +bmc +kmR +gcr +arD +gcr +gcr +kmR +kmR +yeS +wnB +dxA +hZX +wvR +wvR +wvR +nzO +wdq +qxN +aBS +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +bZQ +kqA +kqA +kqA +kqA +bZQ +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(63,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +bXs +prU +bXs +wEg +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lYN +dia +lOD +efH +efH +vFV +efH +lOD +efH +vFV +efH +jFh +ncE +wao +vFV +vFV +tXA +rxy +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vFV +eaC +qSW +qSW +tRx +hZX +hZX +hZX +hZX +hvf +hZX +hZX +wvR +eVX +dZd +dZd +hyL +dZd +eVX +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wnB +pEH +dQE +wnB +dxA +hZX +wvR +wvR +wvR +nzO +fbL +qxN +fbL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +bZQ +tGf +kqA +kqA +kqA +bZQ +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +"} +(64,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +bXs +bXs +wdV +prU +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lYN +bmx +fnq +llW +llW +llW +dST +fnq +llW +llW +llW +oMB +wao +wao +vFV +ncP +ncP +gjb +rxy +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vFV +vFV +qSW +qSW +lYN +ejJ +ejJ +ejJ +ejJ +ejJ +ejJ +ejJ +wvR +sIe +sIe +sIe +sIe +sIe +sIe +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +fbL +odO +wcF +kmR +cLh +cLh +kmR +dxA +hZX +hZX +hZX +hZX +pVp +pKh +qxN +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +byY +bZQ +bZQ +bZQ +bZQ +byY +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +"} +(65,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +bXs +bXs +lif +hZX +qHI +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +plV +wao +fnq +llW +llW +llW +dST +fnq +llW +llW +llW +oMB +wao +wao +kxy +ncP +ncP +sfs +mRM +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +qSW +qSW +tRx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vzb +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vzb +hZX +wcF +wcF +wcF +wcF +wcF +wcF +hZX +hZX +hZX +hZX +pVp +qxN +qxN +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hvS +hvS +hvS +hZX +hZX +hZX +hZX +psp +psp +"} +(66,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +bXs +wdV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vFV +wJw +fnq +llW +mWp +llW +dST +fnq +llW +lZH +llW +oMB +wao +uFf +vFV +bHB +ncP +sfs +mRM +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +oWe +iim +qSW +lYN +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vzb +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vzb +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pVp +mUl +qxN +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hvS +hvS +hvS +hZX +hZX +hZX +hZX +psp +psp +"} +(67,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +bXs +wdV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +plV +wao +fnq +llW +llW +llW +dST +fnq +llW +llW +llW +oMB +wao +wao +kxy +ncP +ncP +sfs +mRM +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +qSW +qSW +tRx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vzb +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +xLU +xLU +xLU +xLU +xLU +xLU +xLU +xLU +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pVp +qxN +qxN +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hvS +hvS +hvS +hZX +hZX +hZX +hZX +psp +psp +"} +(68,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vFV +dia +fnq +llW +llW +llW +dST +fnq +llW +llW +llW +oMB +wao +wao +vFV +ncP +ncP +pkE +edB +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vFV +vFV +byJ +qSW +lYN +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vzb +hZX +hZX +hZX +hvf +hZX +hZX +hZX +hZX +xLU +xLU +uPg +xLU +xLU +xLU +xLU +rSm +pSa +pSa +pSa +pSa +rSm +ydO +hZX +hZX +xLU +eVI +xLU +xLU +xLU +xhQ +odU +rxy +pVp +qxN +qxN +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +"} +(69,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +qHI +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lYN +bmx +uCD +ncE +ncE +vFV +ncE +uCD +ncE +vFV +ncE +fwx +efH +wao +vFV +vFV +rEp +edB +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vFV +eaC +qSW +qSW +tRx +ejJ +ejJ +ejJ +ejJ +nyp +kvS +dda +dda +dda +dda +dda +lcU +dda +dda +dda +kvS +siF +hZX +hZX +rSm +pSa +nzk +pSa +rSm +pSa +nzk +rSm +pSa +nkp +shu +shu +shu +pSa +ydO +hZX +hZX +xLU +pjU +dZd +owy +dZd +pjU +nyj +mRM +pVp +fbL +qxN +fbL +hZX +hZX +hZX +hZX +hZX +hZX +mZW +hZX +hZX +hZX +rsB +hZX +hZX +hZX +rsB +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +krS +tmw +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +"} +(70,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lYN +gHE +ssC +ssC +ssC +ssC +qwh +ssC +qwh +ssC +ssC +ycC +llW +gWF +vFV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vFV +qSW +qSW +qhX +vFV +dxA +dxA +dxA +dxA +obJ +qnx +lCP +rUu +rrl +xet +plb +xet +rrl +rUu +qrL +dda +dda +pZB +pZB +pSa +uoY +uoY +dQn +pSa +uKz +oZT +pSa +sKa +hJB +shu +shu +shu +pSa +ydO +hZX +hZX +xLU +dZd +cjO +khl +fCq +dZd +nyj +mRM +pVp +wdq +qxN +qxN +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +mZW +rsB +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +krS +krS +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(71,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lYN +vFV +vFV +vFV +vFV +vFV +vFV +wao +vFV +vFV +vFV +gSj +vFV +vFV +vFV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +khA +vFV +vFV +qSW +vFV +vFV +hZX +hZX +hZX +hZX +obJ +hdt +iFi +iFi +iFi +iFi +iFi +iFi +iFi +iFi +iFi +qnx +dda +hZX +hZX +pSa +gDg +vHi +vXX +pSa +mMc +oZT +jUD +fcR +hJB +shu +shu +shu +pSa +ydO +hZX +hZX +sIe +dZd +khl +khl +trq +dZd +nyj +mRM +pVp +qxN +qxN +qxN +fbL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +krS +tmw +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(72,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +khA +aJh +ncP +ncP +kxy +wao +wao +wao +wao +wao +wao +vFV +fKk +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pVp +iiz +iiz +iiz +tsd +hZX +hZX +hZX +hZX +hZX +xpd +rUu +iFi +nmL +cSb +cSb +cSb +cSb +cSb +oLl +iFi +lCP +xpd +hZX +hZX +pSa +afj +qOG +aBa +pSa +pSa +pSa +pSa +fcR +hJB +shu +shu +shu +rSm +pSa +pSa +pSa +pSa +rSm +wks +clK +iLY +nHO +nyj +mRM +pVp +qxN +qwa +qxN +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +krS +krS +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(73,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pVp +sfs +ncP +kKa +vFV +kAi +kAi +kAi +kAi +mMB +wao +vFV +fKk +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +sEn +sEn +sEn +txc +trF +iiz +tsd +iiz +bNO +hZX +hZX +hZX +hZX +hZX +obJ +rUu +iFi +uDz +boJ +boJ +boJ +boJ +boJ +toY +iFi +rUu +dda +hZX +hZX +pSa +afj +njt +tdB +rSm +sCN +oZT +rSm +dbN +hJB +shu +shu +shu +pSa +cAR +uwR +qOG +lfn +pSa +dZd +hyn +dZd +pjU +rrZ +mRM +pVp +qxN +fbL +oGx +fbL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +krS +tmw +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(74,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pVp +sfs +ncP +pBS +vFV +ovf +llW +llW +llW +dST +wao +vFV +fKk +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +jOn +jZE +jZE +iiz +jZE +iiz +tsd +iiz +tsd +hZX +hZX +hZX +hZX +hZX +obJ +rUu +iFi +uDz +boJ +boJ +boJ +boJ +boJ +toY +iFi +rUu +xpd +bdl +bdl +rSm +pSa +fnK +pSa +rSm +oZT +oZT +lXo +fcR +hJB +qlR +shu +shu +pSa +qpX +qOG +qOG +lfn +pSa +cjO +nRE +lRi +dZd +nyj +wWn +aJh +qxN +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hDi +gcU +qnw +hDi +nhf +nhf +kJT +nhf +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(75,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pVp +sfs +ncP +kKa +vFV +llW +llW +llW +llW +dST +wao +vFV +glB +jZE +jZE +jZE +jZE +jZE +jZE +jZE +jZE +jZE +eNh +vFV +vFV +vFV +vFV +vFV +vFV +iiz +bNO +hZX +hZX +hZX +hZX +hZX +obJ +uYT +iFi +uDz +boJ +boJ +boJ +boJ +boJ +toY +iFi +aTP +dda +hZX +hZX +hZX +hZX +hZX +wvR +bRT +xje +qHV +pSa +fcR +eSM +oEI +uNF +jqM +pSa +ewN +qOG +qOG +lfn +pSa +khl +khl +trq +dZd +nyj +dXV +qxN +qxN +fbL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +mnv +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gcU +jam +iyS +gcU +nhf +nhf +nhf +nhf +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(76,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wuq +quA +ncP +evd +tRx +llW +llW +llW +llW +dST +wao +vFV +rEp +rEp +rEp +rEp +auy +auy +tRx +auy +auy +auy +auy +vFV +tOw +yiC +bcX +gcd +vFV +iiz +rDz +hZX +hZX +hZX +hZX +hZX +obJ +rON +iFi +uDz +boJ +boJ +boJ +boJ +boJ +toY +iFi +rUu +dda +hZX +hZX +hZX +hZX +hZX +wvR +rSm +pSa +pSa +pSa +tos +tos +tos +uXt +tos +pFc +imW +xuV +ePF +wIl +pSa +wks +iLY +iLY +nHO +nyj +dXV +qxN +oGx +hZX +hZX +hZX +hZX +hZX +mnv +mnv +rsB +mnv +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gcU +dRf +iyS +hDi +gcU +qnw +gcU +hDi +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(77,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uQd +uQd +uQd +uQd +uQd +uQd +llW +dST +wao +vFV +hZX +hZX +srt +srt +auy +tfA +jvw +llW +llW +llW +llW +vFV +yiC +yiC +yiC +yiC +vFV +iiz +bNO +hZX +hZX +hZX +hZX +hZX +obJ +rUu +iFi +uDz +boJ +boJ +boJ +boJ +boJ +toY +iFi +rUu +xpd +hZX +hZX +hZX +hZX +hZX +wvR +wvR +wvR +rSm +pSa +bby +pSa +czR +czR +czR +rSm +pSa +pSa +fnK +pSa +rSm +dZd +owy +dZd +pjU +rrZ +dXV +qxN +fbL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +rsB +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gcU +kxE +iyS +gcU +teW +xyA +fnU +gcU +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +hZX +hZX +psp +psp +psp +hZX +psp +psp +hZX +hZX +hZX +hZX +psp +psp +psp +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(78,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uQd +uQd +laX +dht +hPp +vHk +uQd +uQd +nRN +wLM +vFV +hZX +hZX +srt +srt +auy +wao +wao +llW +llW +llW +llW +vFV +wbi +yiC +xpW +jlg +vFV +iiz +tsd +hZX +hZX +hZX +hZX +hZX +obJ +rUu +iFi +lLO +njE +njE +njE +njE +njE +prL +iFi +rUu +dda +wvR +wvR +ydO +ydO +hZX +wvR +wvR +wvR +pSa +hzq +uoY +uoY +czR +shu +czR +gBX +gMX +gMX +gMX +gMX +gMX +iWN +hZX +hZX +hZX +ujL +pKz +qxN +fbL +hZX +hZX +hZX +gAV +gAV +gAV +gAV +hZX +mnv +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gcU +gcU +ayF +gcU +iyS +eAI +iyS +gcU +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +crh +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(79,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uQd +ixh +sVQ +hjk +awl +pmz +kdD +uQd +vFV +vFV +vFV +hZX +hZX +srt +srt +vFV +kJP +wao +llW +vFV +llW +llW +vFV +yiC +pJz +yiC +yiC +vFV +qSW +vFV +vFV +hZX +hZX +hZX +hZX +xpd +rUu +iFi +iFi +iFi +iFi +iFi +iFi +iFi +iFi +iFi +lCP +dda +wvR +wvR +wvR +ydO +hZX +hZX +hZX +pNY +pSa +uoY +uoY +uyG +czR +czR +czR +vzb +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +ylF +uiR +qxN +oGx +hZX +hZX +gAV +gAV +gAV +gAV +gAV +hZX +mnv +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gcU +gif +iyS +gcU +rKK +iyS +kxE +gcU +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +tJE +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(80,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +xvr +hbj +mWT +bWx +lBY +lhh +ixZ +uQd +hZX +hZX +hZX +hZX +hZX +srt +srt +auy +iDQ +fnq +llW +llW +llW +llW +vFV +vFV +vFV +oda +rxp +vFV +qSW +qSW +lYN +dxA +dxA +dxA +kvS +kvS +rUu +rUu +rUu +xyW +rUu +rUu +rUu +rUu +rUu +qMA +rYA +dda +wvR +wvR +ydO +ydO +ydO +hZX +hZX +wvR +pSa +iKe +uoY +cTr +pSa +ydO +ydO +vzb +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pVp +qxN +qxN +fbL +hZX +hZX +gAV +hZX +hZX +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gcU +xai +iyS +gcU +iyS +iyS +qOT +gcU +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +tJE +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(81,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hWY +hWY +uZo +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uQd +uTA +fpX +msB +eUw +jAJ +lkj +uQd +hZX +hZX +hZX +vFV +vFV +vFV +vFV +vFV +lYN +lYN +lYN +vFV +vFV +vFV +vFV +lBv +vFV +tRx +vFV +vFV +eaC +qSW +lYN +dxA +dxA +dxA +kvS +old +old +pod +old +kvS +pod +dda +oFw +dda +dda +dda +dda +dda +wvR +wvR +wvR +ydO +ydO +hZX +hZX +wvR +rSm +pSa +fnK +pSa +rSm +ydO +ydO +vzb +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pVp +qxN +oGx +hZX +hZX +hZX +gAV +gAV +hZX +hZX +gAV +hZX +mZW +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pha +hZX +hZX +hZX +hZX +hZX +gcU +mvc +iyS +qWc +iyS +iyS +oxu +gcU +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +tJE +tJE +tJE +tJE +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(82,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uZo +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uQd +kcx +hjk +qQN +oYw +aFF +hDX +uQd +vFV +vFV +lYN +lYN +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vFV +tRx +vFV +lYN +hZX +hZX +hZX +ofr +rUu +gAT +rUu +rUu +gfN +qVX +mRM +hZX +hZX +hZX +hZX +hZX +hZX +ydO +ydO +ydO +ydO +ydO +hZX +hZX +hZX +wvR +wvR +wvR +wvR +wvR +wvR +wvR +vzb +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pVp +qxN +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hDi +pqk +gcU +gcU +gcU +gcU +gcU +hDi +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +tJE +tJE +tJE +tJE +tJE +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(83,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uQd +uQd +ary +xHe +xkk +bFC +uQd +uQd +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gfN +rUu +rUu +rUu +rUu +gfN +qVX +gjb +tXA +hZX +hZX +hZX +hZX +hZX +xLU +xLU +xLU +xLU +xLU +hZX +hZX +hZX +wvR +xLU +xLU +xLU +xLU +xLU +xLU +xLU +xLU +xLU +xLU +xLU +ydO +hZX +hZX +hZX +hZX +pVp +qxN +fbL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tmw +tmw +tmw +tmw +hZX +gAV +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +lci +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +tJE +tJE +tJE +tJE +tJE +tJE +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(84,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uZo +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uQd +uQd +xvr +uQd +uQd +uQd +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gfN +rUu +dxF +cSb +cQr +gfN +qVX +njo +tXA +tXA +tXA +tXA +tXA +rxy +xLU +xLU +xLU +xLU +xLU +hZX +hZX +hZX +wvR +ydO +ydO +ydO +ydO +ydO +hQk +mMx +qTS +qTS +mMx +mgH +ydO +hZX +hZX +xLU +xLU +phY +qxN +qxN +oGx +hZX +hZX +nhf +nhf +nhf +nhf +hZX +hZX +tmw +tmw +tmw +hZX +gAV +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +tJE +tJE +tJE +tJE +tJE +tJE +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(85,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uZo +uZo +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +kvS +old +old +kvS +old +kvS +qVX +qVX +qVX +hKK +qVX +qVX +qVX +mRM +hZX +hZX +hZX +hvf +hZX +hZX +hZX +hZX +wvR +ydO +ydO +akf +ydO +ydO +qTS +xtl +xtl +xtl +xtl +qTS +ydO +hZX +hZX +xLU +xLU +xWm +aqt +qxN +fbL +hZX +hZX +nhf +nhf +nhf +nhf +hZX +tmw +hZX +hZX +tmw +hZX +gAV +jmK +gAV +jmK +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +tJE +tJE +tJE +tJE +tJE +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(86,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uZo +psp +hZX +hZX +hZX +hZX +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gfN +bnl +pdp +kvS +ppd +kvS +old +old +old +nVH +old +kvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +ydO +ydO +ydO +ydO +ydO +qTS +xtl +xtl +xtl +xtl +qTS +ydO +ihX +tXA +eOQ +hzg +xLU +jRc +qxN +oGx +hZX +hZX +gAV +gAV +gAV +gAV +hZX +tmw +rst +hZX +tmw +hZX +jmK +jmK +jmK +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +nhf +nhf +nhf +nhf +nhf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +tJE +tJE +tJE +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(87,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gfN +kwb +iFi +iFi +pdp +gfN +frv +pdp +pdp +pdp +pdp +gfN +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +ydO +xLU +ydO +ydO +ydO +aux +mMx +qTS +qTS +mMx +uPR +ydO +qxN +qxN +qxN +iMX +gNu +fbL +qxN +fbL +hZX +hZX +gAV +pZn +gAV +gAV +hZX +tmw +tmw +rst +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +nhf +nhf +nhf +nhf +nhf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(88,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gfN +fCr +iFi +iFi +pdp +gfN +pdp +pdp +pdp +pdp +pdp +jwS +khA +svq +tXA +tXA +tXA +tXA +tXA +tXA +xLU +xLU +xLU +xLU +xLU +xLU +ydO +ydO +ydO +ydO +ydO +ydO +ydO +fbL +fbL +qxN +qxN +qxN +qxN +qwa +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tmw +tmw +tmw +rst +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gAV +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(89,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +jsn +jsn +psp +psp +psp +psp +uZo +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lQc +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gfN +vYV +iFi +iFi +pdp +gfN +kPS +suK +kPS +ihR +kPS +gfN +pVp +qxN +qxN +qxN +qxN +qxN +qxN +qxN +xMw +iiH +xMw +xMw +xMw +xMw +xMw +xMw +xMw +xMw +xEM +ydO +oGx +fbL +fbL +fbL +oGx +oGx +fbL +oGx +fbL +hZX +hZX +tmw +tmw +tmw +tmw +eoL +hZX +hZX +hZX +hZX +hZX +hZX +tmw +tmw +rst +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gAV +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(90,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +jsn +jsn +jsn +jsn +psp +psp +psp +koX +npJ +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +mMv +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gfN +tXg +bES +vxp +bAk +kvS +old +old +old +old +old +kvS +pVp +qxN +fbL +fbL +oGx +oGx +fbL +oGx +xEM +htm +hEa +xtl +ufL +klW +xMw +gFk +tIF +kAp +xEM +ydO +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tmw +rst +eDh +tmw +hZX +gAV +gAV +gAV +gAV +gAV +hZX +tmw +tmw +tmw +rst +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(91,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +jsn +jsn +jsn +jsn +psp +psp +psp +ezG +koX +tvc +tvc +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +kvS +old +old +old +old +kvS +rEa +fbL +cwF +tXA +tXA +tXA +aJh +qxN +fbL +vvy +vvy +hZX +hZX +pzV +xEM +pov +mFh +mFh +jFQ +hMd +xMw +dns +kAp +kAp +xEM +ydO +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +rst +hZX +hZX +tmw +hZX +gAV +jmK +gAV +gAV +gAV +hZX +tmw +tmw +tmw +rst +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(92,1,3) = {" +psp +psp +psp +psp +psp +psp +jsn +jsn +jsn +jsn +jsn +psp +psp +psp +iXr +koX +aDu +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vzv +qwa +qxN +qxN +qxN +qxN +qxN +qxN +qxN +qxN +oGx +vvy +vvy +hZX +hZX +pzV +xEM +fFI +qlB +qlB +rpQ +hMd +fqp +kAp +kAp +kAp +fYq +ydO +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +rst +tmw +hZX +hZX +hZX +jmK +gAV +gAV +hZX +tmw +tmw +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(93,1,3) = {" +psp +psp +psp +psp +psp +psp +jsn +jsn +jsn +jsn +jsn +psp +psp +psp +esl +koX +esl +psp +hZX +hZX +hZX +hZX +hZX +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +fbL +rEa +fbL +oGx +fbL +oGx +fbL +oGx +fbL +oGx +hZX +hZX +hZX +hZX +hZX +pzV +nzu +wPk +pzX +vCk +rpQ +uRr +xMw +fhA +kAp +kAp +xEM +oGx +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +rst +hZX +tmw +tmw +hZX +gAV +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(94,1,3) = {" +psp +psp +psp +psp +psp +psp +jsn +jsn +jsn +jsn +jsn +psp +psp +psp +mMV +iXr +koX +esl +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +fDW +fDW +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pzV +xEM +mVa +nLA +dfi +rpQ +wLa +xMw +oGB +fqM +hsE +xEM +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tmw +tmw +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(95,1,3) = {" +psp +psp +psp +psp +psp +psp +jsn +jsn +jsn +jsn +jsn +psp +psp +psp +npJ +npJ +koX +aDu +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pzV +xEM +htm +xYx +xYx +dcb +mPw +xMw +xMw +xMw +xMw +xEM +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +jmK +jmK +jmK +gAV +hZX +hZX +hZX +tmw +tmw +tmw +rst +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(96,1,3) = {" +psp +psp +psp +psp +psp +psp +jsn +jsn +jsn +jsn +jsn +psp +psp +psp +psp +mMV +koX +esl +aDu +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pzV +xMw +dOa +xMw +bHG +xMw +xMw +xMw +oGx +oGx +oGx +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gAV +jmK +hZX +hZX +tmw +tmw +rst +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(97,1,3) = {" +psp +psp +psp +psp +psp +psp +jsn +jsn +jsn +jsn +jsn +psp +psp +psp +psp +npJ +koX +koX +esl +esl +hZX +hZX +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +krS +krS +krS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gAV +hZX +hZX +pZn +tmw +tmw +tmw +rst +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(98,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +jsn +jsn +jsn +psp +psp +psp +psp +npJ +esl +koX +esl +esl +hZX +hZX +hZX +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +krS +krS +krS +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +jmK +hZX +hZX +tmw +tmw +tmw +rst +rst +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(99,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +jsn +jsn +psp +psp +psp +psp +psp +esl +aDu +koX +esl +aDu +esl +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lQc +hZX +hZX +lQc +hZX +hZX +hZX +hZX +lQc +hZX +hZX +hZX +hZX +krS +hZX +hZX +hZX +hZX +hZX +hZX +krS +krS +krS +krS +hZX +gAV +gAV +gAV +gAV +gAV +hZX +hZX +krS +krS +krS +krS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gAV +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +jmK +hZX +hZX +tmw +tmw +tmw +tmw +rst +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(100,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +esl +aDu +koX +aDu +esl +esl +aDu +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +hZX +hZX +krS +krS +hZX +hZX +krS +krS +krS +krS +hZX +gAV +gAV +hZX +hZX +gAV +hZX +hZX +krS +krS +krS +krS +hZX +hZX +hZX +krS +krS +krS +krS +krS +gAV +gAV +gAV +gAV +eoL +hZX +hZX +gAV +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(101,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +esl +esl +koX +koX +aDu +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +krS +krS +krS +hZX +gAV +hZX +hZX +gAV +gAV +hZX +hZX +krS +krS +hZX +krS +hZX +hZX +hZX +krS +krS +krS +krS +krS +gAV +gAV +gAV +gAV +hZX +gAV +gAV +gAV +gAV +hZX +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gAV +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(102,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +esl +aDu +aDu +koX +aDu +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gAV +gAV +eDh +gAV +gAV +hZX +hZX +krS +krS +krS +krS +hZX +hZX +hZX +krS +krS +krS +krS +krS +gAV +gAV +gAV +gAV +hZX +gAV +eDh +gAV +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gAV +jmK +gAV +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(103,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +esl +esl +esl +aDu +koX +esl +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gAV +gAV +gAV +gAV +gAV +hZX +krS +krS +krS +krS +krS +hZX +hZX +hZX +hZX +hZX +hZX +gAV +gAV +hZX +gAV +hZX +hZX +hZX +hZX +fMD +hZX +krS +krS +gAV +gAV +gAV +gAV +hZX +gAV +gAV +gAV +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +tmw +hZX +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +gAV +gAV +gAV +jmK +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(104,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +esl +aDu +esl +esl +esl +koX +esl +esl +npJ +npJ +npJ +npJ +npJ +npJ +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gAV +hZX +hZX +hZX +gAV +eDh +krS +hZX +hZX +hZX +krS +nhf +nhf +nhf +hZX +gAV +gAV +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +krS +krS +krS +krS +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +jmK +gAV +jmK +jmK +jmK +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(105,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +esl +aDu +esl +aDu +esl +aDu +koX +esl +npJ +npJ +npJ +npJ +npJ +npJ +npJ +npJ +npJ +npJ +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gAV +gAV +hZX +hZX +gAV +hZX +hZX +hZX +hZX +hZX +krS +nhf +nhf +nhf +hZX +gAV +gAV +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +krS +krS +krS +krS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(106,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +esl +aDu +aDu +esl +esl +aDu +koX +esl +esl +psp +psp +psp +psp +npJ +npJ +npJ +npJ +npJ +npJ +npJ +npJ +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gAV +gAV +gAV +gAV +gAV +hZX +krS +krS +hZX +hZX +krS +nhf +nhf +nhf +hZX +gAV +gAV +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(107,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +esl +esl +esl +esl +aDu +esl +qVp +esl +psp +psp +psp +psp +psp +psp +psp +npJ +npJ +npJ +npJ +npJ +npJ +npJ +npJ +npJ +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +krS +krS +krS +nhf +nhf +nhf +hZX +gAV +gAV +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +krS +krS +krS +tmw +tmw +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(108,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +esl +aDu +aDu +psp +cZM +eOG +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +npJ +npJ +npJ +sLN +iDN +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +fMD +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +hZX +hZX +krS +hZX +hZX +hZX +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(109,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cZM +eOG +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +npJ +sLN +iDN +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +krS +krS +krS +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +fMD +hZX +hZX +hZX +hZX +hZX +hZX +nhf +nhf +nhf +nhf +nhf +hZX +hZX +krS +krS +krS +krS +hZX +hZX +hZX +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(110,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cZM +cZM +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +iDN +iDN +sLN +sLN +psp +psp +sLN +sLN +iDN +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +krS +krS +krS +hZX +hZX +hZX +hZX +hZX +tmw +tmw +tmw +tmw +hZX +tmw +tmw +tmw +tmw +hZX +krS +krS +krS +krS +tmw +tmw +tmw +tmw +hZX +hZX +nhf +nhf +nhf +nhf +nhf +hZX +krS +krS +krS +krS +krS +tmw +hZX +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(111,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +cZM +cZM +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +iDN +sLN +sLN +sLN +psp +sLN +psp +psp +sLN +iDN +psp +psp +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +krS +krS +krS +hZX +hZX +hZX +hZX +hZX +tmw +hZX +hZX +tmw +hZX +tmw +tmw +tmw +tmw +eDh +krS +hZX +hZX +hZX +tmw +tmw +tmw +tmw +eoL +hZX +nhf +nhf +nhf +nhf +nhf +hZX +krS +krS +krS +krS +krS +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(112,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +cZM +jyY +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +iDN +sLN +sLN +sLN +sLN +sLN +sLN +psp +sLN +iDN +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +hZX +hZX +krS +hZX +hZX +hZX +hZX +hZX +tmw +hZX +hZX +tmw +hZX +tmw +tmw +tmw +tmw +hZX +krS +krS +hZX +hZX +tmw +tmw +tmw +tmw +hZX +hZX +nhf +nhf +nhf +nhf +nhf +eDh +krS +krS +krS +krS +krS +tmw +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(113,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +cZM +xYD +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +iDN +sLN +sLN +sLN +sLN +sLN +sLN +sLN +psp +sLN +iDN +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +krS +krS +krS +hZX +hZX +hZX +hZX +hZX +tmw +hZX +hZX +tmw +eDh +tmw +tmw +hZX +tmw +hZX +hZX +krS +hZX +hZX +tmw +tmw +tmw +tmw +hZX +hZX +tmw +tmw +tmw +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(114,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +cZM +xYD +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +iDN +sLN +sLN +sLN +psp +sLN +sLN +sLN +jyw +sLN +iDN +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tmw +tmw +tmw +tmw +hZX +tmw +tmw +tmw +tmw +hZX +hZX +krS +krS +krS +tmw +tmw +tmw +tmw +hZX +hZX +tmw +tmw +tmw +tmw +tmw +hZX +hZX +hZX +nhf +nhf +nhf +nhf +nhf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(115,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +cZM +cZM +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +iDN +sLN +sLN +psp +psp +psp +sLN +sLN +sLN +sLN +iDN +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +krS +krS +krS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gAV +hZX +hZX +hZX +gAV +hZX +hZX +hZX +hZX +tmw +tmw +tmw +tmw +tmw +hZX +hZX +hZX +nhf +hZX +hZX +hZX +nhf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(116,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +iDN +iDN +phV +sLN +sLN +bOg +psp +iDN +iDN +iDN +iDN +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +krS +krS +krS +hZX +nhf +nhf +nhf +nhf +nhf +hZX +gAV +hZX +hZX +hZX +gAV +hZX +hZX +hZX +hZX +tmw +tmw +tmw +tmw +hZX +hZX +hZX +hZX +nhf +nhf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(117,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +iDN +iDN +sLN +sLN +psp +rYx +psp +psp +iDN +iDN +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +krS +krS +krS +krS +hZX +nhf +hZX +nhf +nhf +nhf +hZX +gAV +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +nhf +nhf +nhf +nhf +nhf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(118,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +iDN +sLN +sLN +sLN +sLN +dOe +yaI +iDN +iDN +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +krS +krS +krS +krS +hZX +nhf +nhf +hZX +hZX +nhf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(119,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +iDN +sLN +sLN +sLN +sLN +bOg +iDN +iDN +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +psp +psp +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +nhf +hZX +hZX +hZX +nhf +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(120,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +iDN +dOe +sLN +sLN +rYx +iDN +sLN +iDN +eBr +lyN +lyN +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(121,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +iDN +xwf +bOg +sLN +iDN +iDN +iDN +iDN +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(122,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +iDN +iDN +iDN +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tmw +tmw +tmw +tmw +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(123,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tmw +tmw +tmw +tmw +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(124,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tmw +tmw +tmw +tmw +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(125,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tmw +tmw +tmw +tmw +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(126,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tmw +tmw +tmw +tmw +tmw +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(127,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(128,1,3) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} + +(1,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(2,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(3,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(4,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(5,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(6,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(7,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +hZX +hZX +hZX +psp +psp +psp +psp +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(8,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +hZX +hZX +hZX +hZX +psp +psp +hZX +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +hZX +hZX +hZX +hZX +hZX +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +eDT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(9,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +hZX +psp +psp +psp +psp +psp +psp +hZX +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +nhZ +psp +nhZ +psp +psp +esl +esl +psp +psp +psp +psp +psp +psp +psp +psp +esl +esl +esl +esl +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(10,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +eDT +psp +esl +psp +esl +esl +esl +hZX +hZX +hZX +eDT +esl +esl +eDT +esl +esl +psp +psp +psp +psp +psp +psp +eDT +iXr +esl +eDT +iXr +iXr +esl +nOp +esl +nOp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(11,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +hZX +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +esl +eDT +esl +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +eDT +esl +esl +eDT +psp +psp +psp +esl +iXr +esl +eDT +esl +iXr +koX +eDT +npJ +eDT +esl +esl +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(12,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eDT +esl +esl +esl +esl +eDT +esl +psp +esl +eDT +iXr +esl +esl +eDT +koX +koX +npJ +npJ +jPE +koX +npJ +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(13,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +eDT +esl +esl +esl +esl +eDT +iXr +esl +esl +koX +koX +koX +npJ +esl +esl +npJ +koX +koX +tYk +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(14,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +esl +eDT +esl +koX +npJ +npJ +esl +esl +esl +eDT +esl +eDT +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(15,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +eDT +npJ +koX +esl +eDT +nOp +psp +psp +iXr +esl +nOp +psp +psp +jXR +jXR +jXR +cZs +cZs +hsL +sNy +jXR +psp +psp +psp +psp +psp +psp +psp +psp +"} +(16,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eDT +esl +koX +koX +esl +iXr +psp +psp +psp +psp +psp +psp +psp +psp +jXR +jXR +cZs +cZs +cZs +hsL +hsL +sNy +psp +psp +psp +psp +psp +psp +psp +psp +"} +(17,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +iXr +koX +koX +esl +eDT +psp +psp +psp +psp +psp +psp +psp +psp +psp +jXR +jXR +cZs +cZs +hsL +sNy +hsL +hsL +psp +psp +psp +psp +psp +psp +psp +psp +"} +(18,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +npJ +koX +npJ +esl +iXr +psp +psp +psp +psp +psp +psp +psp +psp +psp +jXR +cZs +cZs +hsL +sNy +hsL +hsL +sNy +psp +psp +psp +psp +psp +psp +psp +psp +"} +(19,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +koX +esl +esl +eDT +psp +psp +psp +psp +jXR +jXR +jXR +jXR +sNy +hsL +hsL +sNy +hsL +hsL +sNy +hsL +hsL +psp +psp +psp +psp +psp +psp +psp +psp +"} +(20,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +hZX +hZX +hZX +hZX +hZX +hZX +iXr +npJ +esl +iXr +psp +psp +psp +psp +psp +jXR +jXR +sNy +hsL +hsL +sNy +hsL +hsL +jXR +jXR +hsL +hsL +sNy +psp +psp +psp +psp +psp +psp +psp +psp +"} +(21,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eDT +iXr +hZX +hZX +hZX +hZX +iXr +iXr +npJ +esl +fNw +psp +psp +psp +psp +psp +jXR +jXR +hsL +sNy +hsL +hsL +hsL +sNy +jXR +jXR +sNy +hsL +hsL +psp +psp +psp +psp +psp +psp +psp +psp +"} +(22,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +iXr +iXr +iXr +hZX +hZX +hZX +hZX +esl +eDT +koX +jPE +esl +psp +psp +psp +psp +psp +jXR +jXR +cZs +hsL +sNy +hsL +hsL +cZs +cZs +cZs +hsL +hsL +jXR +psp +psp +psp +psp +psp +psp +psp +psp +"} +(23,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +eDT +hZX +hZX +hZX +hZX +esl +iXr +npJ +koX +esl +psp +psp +psp +psp +psp +jXR +jXR +cZs +cZs +sNy +hsL +sNy +cZs +cZs +cZs +hsL +sNy +jXR +psp +psp +psp +psp +psp +psp +psp +psp +"} +(24,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +iXr +esl +hZX +hZX +hZX +hZX +eDT +esl +esl +npJ +eDT +psp +psp +psp +psp +psp +jXR +cZs +cZs +hsL +hsL +sNy +hsL +cZs +hsL +hsL +sNy +hsL +jXR +psp +psp +psp +psp +psp +psp +psp +psp +"} +(25,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +iXr +esl +iXr +hZX +hZX +hZX +hZX +hZX +esl +esl +koX +esl +psp +psp +psp +psp +psp +jXR +hsL +jXR +jXR +sNy +hsL +jXR +jXR +sNy +jXR +hsL +hsL +jXR +psp +psp +psp +psp +psp +psp +psp +psp +"} +(26,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eDT +iXr +esl +hZX +hZX +hZX +hZX +hZX +iXr +hqJ +koX +esl +esl +psp +psp +psp +psp +jXR +sNy +jXR +jXR +hsL +sNy +ahS +nXA +eXb +ahS +psp +hsL +sNy +psp +psp +psp +psp +psp +psp +psp +psp +"} +(27,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +eDT +iXr +hZX +hZX +hZX +hZX +hZX +eDT +esl +koX +iXr +eDT +psp +psp +psp +psp +sNy +hsL +sNy +hsL +sNy +hsL +jaf +nXA +rXW +nXA +psp +sNy +hsL +psp +psp +psp +psp +psp +psp +psp +psp +"} +(28,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +iXr +esl +hZX +hZX +hZX +hZX +hZX +iXr +koX +koX +iXr +esl +psp +psp +psp +psp +hsL +sNy +hsL +sNy +hsL +sNy +eEa +eEa +oqz +eEa +psp +hsL +sNy +psp +psp +psp +psp +psp +psp +psp +psp +"} +(29,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +eDT +iXr +hZX +hZX +hZX +hZX +iXr +npJ +npJ +esl +esl +psp +psp +psp +psp +sNy +hsL +cZs +hsL +sNy +hsL +ahS +eYj +nXA +ahS +psp +sNy +hsL +psp +psp +psp +psp +psp +psp +psp +psp +"} +(30,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +esl +iXr +hZX +hZX +hZX +esl +npJ +esl +iXr +eDT +esl +psp +psp +psp +sNy +hsL +cZs +cZs +hsL +sNy +jXR +jXR +cZs +cZs +cZs +hsL +sNy +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(31,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +eDT +esl +esl +fJz +esl +koX +koX +iXr +esl +esl +psp +psp +psp +psp +sNy +hsL +cZs +hsL +sNy +hsL +hsL +hsL +hsL +cZs +cZs +cZs +hsL +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(32,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +bCp +esl +iXr +koX +koX +koX +npJ +eDT +esl +psp +psp +psp +psp +psp +hsL +sNy +hsL +sNy +jXR +jXR +sNy +hsL +sNy +hsL +sNy +hsL +sNy +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(33,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eDT +esl +eDT +esl +esl +esl +esl +esl +iXr +esl +eDT +psp +psp +psp +psp +psp +sNy +hsL +sNy +hsL +jXR +jXR +hsL +hsL +hsL +jXR +jXR +sNy +hsL +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(34,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +esl +esl +eDT +esl +iXr +iXr +iXr +esl +eDT +psp +psp +psp +psp +psp +jXR +jXR +hsL +sNy +hsL +hsL +cZs +sNy +hsL +jXR +jXR +hsL +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(35,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +esl +esl +esl +eDT +esl +eDT +esl +psp +psp +psp +psp +psp +psp +jXR +jXR +sNy +hsL +cZs +cZs +cZs +cZs +hsL +sNy +hsL +sNy +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(36,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +esl +esl +esl +psp +psp +psp +psp +psp +psp +psp +jXR +jXR +jXR +jXR +hsL +cZs +cZs +hsL +sNy +hsL +sNy +hsL +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(37,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sNy +hsL +cZs +hsL +hsL +sNy +hsL +cZs +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(38,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jXR +jXR +hsL +sNy +hsL +cZs +cZs +jXR +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(39,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jXR +jXR +sNy +hsL +sNy +cZs +jXR +jXR +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +"} +(40,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +esl +psp +esl +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(41,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eny +urU +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(42,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +qxN +urU +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(43,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +fbL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +qxN +qxN +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(44,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +uzs +tdl +tdl +uzs +cVv +tdl +tdl +uzs +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +fbL +fbL +oGx +fbL +oGx +fbL +fTp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +urU +qxN +dxA +pNY +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(45,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +tdl +pUX +bci +tdl +pOI +rBR +ssq +tdl +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +fbL +qxN +qxN +qxN +qxN +qxN +qxN +edB +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +urU +qxN +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(46,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +tdl +xcK +bci +tdl +uwa +lov +fbw +tdl +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +oGx +aXu +fbL +sPk +mMY +mMY +mMY +edB +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +urU +qxN +dxA +dxA +wvR +wvR +wvR +ydO +ydO +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(47,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +tdl +qai +rOe +xiv +oxM +idU +vuN +tdl +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +fbL +bvj +wvR +wvR +ydO +ydO +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +iPk +iPk +pZn +iPk +iPk +hZX +hZX +urU +qxN +dxA +dxA +wvR +wvR +wvR +ydO +ydO +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +esl +esl +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(48,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +uzs +qai +oTP +uZF +tdl +tdl +tdl +uzs +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +sEn +sEn +sEn +sEn +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +oGx +bvj +wvR +wvR +ydO +ydO +ydO +hZX +hZX +hZX +hZX +xLU +xLU +xLU +xLU +xLU +xLU +xLU +hZX +hZX +hZX +hZX +hZX +iPk +iPk +iPk +rmB +heI +hZX +hZX +urU +qxN +qxN +qxN +qxN +qxN +qxN +qxN +qxN +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +ljz +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +psp +psp +esl +esl +esl +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(49,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hTZ +hTZ +lCm +hTZ +hTZ +hTZ +hTZ +hTZ +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tsd +bNO +bNO +tsd +hZX +sEn +sEn +sEn +tsd +bNO +tsd +bNO +fXS +tsd +bNO +tsd +bNO +tsd +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +fbL +bvj +wvR +wvR +ydO +ydO +ydO +hZX +hZX +hZX +hZX +xLU +xLU +xLU +xLU +xLU +xLU +xLU +hZX +hZX +hZX +hZX +hZX +iPk +iPk +iPk +iPk +iPk +hZX +hZX +urU +urU +dxA +dxA +pNY +wvR +wvR +ydO +ydO +ydO +hZX +hZX +hZX +hZX +hZX +hZX +udN +uNR +udN +hZX +ljz +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(50,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hTZ +hTZ +hTZ +hTZ +hTZ +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +bNO +iiz +iiz +tsd +bNO +tsd +tsd +bNO +tsd +iiz +iiz +iiz +iiz +iiz +iiz +iiz +iiz +bNO +hZX +hZX +sEn +sEn +hZX +tsd +bNO +bNO +tsd +hZX +hZX +hZX +hZX +hZX +oGx +bvj +wvR +wvR +ydO +ydO +ydO +hZX +hZX +xLU +xLU +xLU +qGI +jUG +jUG +jUG +qXr +xLU +hZX +hZX +hZX +hZX +hZX +tcu +tcu +hvS +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +wvR +ydO +ydO +qxN +hZX +hZX +hZX +hZX +hZX +udN +vCc +jdc +vCc +udN +ljz +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(51,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hTZ +hTZ +hTZ +hTZ +hTZ +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +bNO +sdp +iiz +iiz +iiz +iiz +iiz +iiz +iiz +iiz +foq +jrP +jrP +rFY +jrP +nRo +iiz +tsd +tsd +bNO +tsd +bNO +tsd +tsd +sdp +iiz +bNO +krw +krw +krw +krw +krw +fbL +bvj +wvR +wvR +ydO +ydO +ydO +hZX +hZX +xLU +xLU +xLU +lTo +lhF +lhF +lhF +wVh +sIe +hZX +hZX +hZX +hZX +hZX +gXl +tTf +tTf +tTf +tTf +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +wvR +ydO +ydO +sQb +fbL +hZX +hZX +hZX +hZX +uNR +cjL +mNU +lOt +lOt +uBP +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lXz +bOb +bOb +bOb +bOb +fMK +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +esl +esl +qHI +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(52,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tsd +iiz +sJc +jrP +rFY +jrP +rFY +rFY +jrP +rFY +bQF +sEn +sEn +sEn +sEn +trF +iiz +iiz +iiz +iiz +iiz +iiz +iiz +iiz +iiz +iiz +bNO +hZX +hZX +hZX +hZX +hZX +hZX +fbL +wvR +wvR +ydO +ydO +ydO +hZX +hZX +wvR +wvR +wvR +wvR +ydO +ydO +ydO +ydO +ydO +hZX +hZX +hZX +hZX +hZX +tTf +tTf +tTf +ixK +sTj +hZX +hZX +hZX +hZX +hZX +hZX +xgL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lBv +vCc +cjL +vCc +lBv +ljz +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lXz +uGj +bOb +muX +cQn +rgK +hZX +hZX +hZX +hZX +hZX +nhf +nhf +nhf +nhf +nhf +nhf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +esl +psp +psp +psp +psp +esl +esl +esl +esl +esl +hZX +hZX +hZX +esl +esl +psp +psp +psp +psp +psp +psp +psp +psp +"} +(53,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +bNO +iiz +rJv +sEn +sEn +sEn +sEn +sEn +fXS +sEn +sEn +sEn +sEn +sEn +sEn +gBN +jrP +jrP +rFY +rFY +jrP +jrP +jrP +noG +tsd +tsd +tsd +hZX +hZX +hZX +hZX +hZX +hZX +qxN +hZX +hZX +hZX +ydO +hZX +hZX +hZX +hZX +sIe +sIe +qGI +jUG +jUG +jUG +qXr +xLU +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +xgL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lBv +uNR +lBv +hZX +ljz +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lXz +qGI +jUG +jUG +qXr +rgK +hZX +hZX +hZX +hZX +hZX +nhf +nhf +nhf +nhf +nhf +nhf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +esl +psp +qHI +qHI +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +psp +psp +psp +psp +psp +psp +"} +(54,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tsd +iiz +rJv +srt +sEn +sEn +sEn +cfr +fXS +sEn +sEn +sEn +sEn +sEn +sEn +sEn +sEn +sEn +fXS +sEn +sEn +sEn +sEn +sEn +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +qxN +qxN +hZX +hZX +hZX +ydO +hZX +hZX +hZX +hZX +sIe +sIe +mbd +qqw +qqw +qqw +scc +xLU +hZX +hZX +hZX +hZX +hZX +hZX +hZX +dxA +dxA +ipK +dxA +dxA +dxA +dxA +dxA +dxA +qLK +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +ljz +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lXz +mbd +sBY +sBY +scc +rgK +hZX +hZX +hZX +hZX +hZX +pZn +krS +krS +krS +krS +krS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +qHI +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +psp +psp +psp +psp +psp +psp +"} +(55,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +bNO +iiz +mnd +srt +srt +sEn +cfr +cfr +cgH +vzs +vzs +vzs +vzs +vzs +vzs +vzs +sEn +sEn +sEn +sEn +sEn +sEn +sEn +sEn +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +qxN +hZX +hZX +hZX +ydO +ydO +ydO +ydO +ydO +hZX +sIe +sIe +lTo +lhF +lhF +lhF +wVh +sIe +hZX +hZX +hZX +kmR +bmc +bmc +bmc +kmR +dxA +koe +dxA +dxA +dxA +dxA +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lXz +mbd +sBY +sBY +scc +rgK +hZX +hZX +hZX +hZX +hZX +gAV +gAV +nhf +gAV +nhf +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(56,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tsd +iiz +rJv +srt +srt +sEn +cfr +cfr +cgH +vzs +vzs +vzs +vzs +lZq +vzs +vzs +vzs +vzs +vzs +vzs +vzs +vzs +vzs +vzs +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +qxN +hZX +hZX +hZX +ydO +lRz +aiY +sto +ydO +hZX +sIe +sIe +sIe +sIe +sIe +sIe +sIe +sIe +gMX +gMX +gMX +wnB +tEi +tEi +tEi +wnB +dxA +dxA +dxA +dxA +dxA +dxA +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lXz +mbd +sBY +sBY +scc +rgK +hZX +hZX +hZX +hZX +hZX +gAV +gAV +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(57,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +fXS +iiz +mnd +srt +srt +vzs +cfr +cfr +cgH +vzs +vzs +lZq +vzs +vzs +lZq +vzs +vzs +lZq +vzs +vzs +vzs +lZq +vzs +vzs +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +qxN +hZX +hZX +lRz +aiY +vZG +bUr +aTf +ydO +hZX +sIe +sIe +sIe +sIe +sIe +sIe +sIe +sIe +hZX +hZX +hZX +wnB +tEi +tEi +tEi +wnB +dxA +kmR +xdc +xdc +xdc +kmR +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lXz +mbd +sBY +sBY +scc +rgK +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(58,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tsd +bNO +tsd +iiz +mnd +srt +srt +vzs +cfr +cfr +cfr +cfr +hZX +hZX +hZX +hZX +hZX +hZX +vzs +vzs +lZq +vzs +lZq +vzs +lZq +lZq +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +qxN +wvR +wvR +dhF +eia +riE +riE +aTf +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wnB +tEi +tEi +tEi +wnB +dxA +wnB +cte +cte +cte +wnB +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lXz +mbd +sBY +sBY +scc +rgK +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(59,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +bNO +iiz +iiz +iiz +srt +srt +vzs +vzs +vzs +cfr +cfr +cfr +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +qxN +wvR +wvR +kPP +uNO +riE +riE +aTf +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wnB +tEi +tEi +tEi +iLy +dxA +wnB +kBA +rKy +cte +lRy +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +jnF +mbd +sBY +sBY +scc +rgK +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(60,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tsd +bNO +bNO +tsd +iiz +tsd +tsd +rJv +vzs +vzs +vzs +vzs +vzs +cfr +cfr +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +qxN +wvR +wvR +ydO +dhF +riE +riE +aTf +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wnB +tEi +tEi +tEi +wnB +dxA +wnB +cte +xRo +cte +wnB +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lXz +mbd +sBY +sBY +scc +rgK +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(61,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tsd +iiz +iiz +iiz +iiz +tsd +tsd +noC +vzs +vzs +lZq +lZq +vzs +vzs +cfr +cfr +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +osG +osG +eNj +eNj +eNj +hZX +hZX +hZX +hZX +hZX +qxN +wvR +wvR +ydO +dhF +mpF +sJP +aTf +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wnB +tEi +tEi +tEi +wnB +dxA +wnB +dSD +pxM +oqv +wnB +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lXz +mbd +sBY +sBY +scc +rgK +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(62,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +bNO +iiz +vmM +jrP +noG +sEn +sEn +gnW +sEn +gnW +sEn +sEn +gnW +gnW +cfr +cfr +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +osG +osG +eNj +eNj +eNj +hZX +hZX +hZX +hZX +hZX +qxN +hZX +hZX +ydO +kPP +ekN +ekN +nIW +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +kmR +gcr +bmc +bmc +kmR +dxA +wnB +lzr +kmR +lRy +kmR +kmR +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lXz +mbd +sBY +sBY +scc +rgK +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(63,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tsd +iiz +rJv +srt +sEn +sEn +sEn +sEn +sEn +sEn +sEn +sEn +sEn +cfr +cfr +cfr +sEn +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gtU +gtU +eNj +eNj +eNj +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +ydO +ydO +ydO +uFo +ydO +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wnB +dSD +dSD +yfZ +tEi +wnB +dxA +hZX +hZX +hZX +hZX +hZX +hZX +dxA +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lXz +lTo +lhF +lhF +wVh +rgK +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +"} +(64,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +bNO +iiz +rJv +srt +qBy +jDZ +jDZ +jDZ +jDZ +jDZ +jDZ +jDZ +pXo +cfr +cfr +cgH +sEn +sEn +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gtU +edG +eNj +eNj +eNj +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pQi +kmR +bmc +bmc +bmc +bmc +kmR +dxA +hZX +hZX +hZX +hZX +hZX +hZX +dxA +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +lXz +hTZ +hTZ +hTZ +hTZ +rgK +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +"} +(65,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tsd +iiz +rJv +srt +gdY +uvn +kGD +oRk +oRk +oRk +kGD +kGD +lqH +cfr +cfr +cfr +cfr +cfr +cfr +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wUk +dWc +eNj +eNj +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vzb +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +dxA +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +"} +(66,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +bNO +iiz +mnd +srt +gdY +kGD +oRk +oRk +oRk +oRk +oRk +kGD +lqH +cfr +cfr +cfr +cfr +cfr +cfr +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +dWc +dWc +eNj +eNj +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vzb +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +dxA +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +"} +(67,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tsd +iiz +rJv +srt +gdY +ivi +kGD +kGD +kGD +oRk +oRk +kGD +fen +cfr +cfr +cfr +cfr +cfr +cfr +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +dWc +dWc +eNj +eNj +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +vzb +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +dxA +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +"} +(68,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +bNO +iiz +mnd +srt +qRu +rXp +rXp +rXp +rXp +rXp +rXp +rXp +ist +cfr +cfr +cgH +vzs +vzs +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +osG +agY +eNj +eNj +eNj +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +xLU +xLU +xLU +xLU +xLU +xLU +hZX +hZX +hZX +act +act +wsr +act +act +act +act +hZX +hZX +dxA +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +"} +(69,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tsd +iiz +rJv +srt +vzs +vzs +vzs +vzs +vzs +vzs +vzs +vzs +vzs +cfr +cfr +cfr +vzs +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +osG +osG +eNj +eNj +eNj +hZX +hZX +hZX +hZX +act +act +act +act +act +act +act +act +act +act +act +act +hZX +hZX +hZX +wvR +wvR +wvR +wvR +xLU +xLU +xLU +xLU +xLU +wSR +dtl +dtl +rHz +ydO +hZX +hZX +hZX +urU +act +act +act +act +iJu +dxA +hZX +hZX +dxA +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +"} +(70,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +bNO +iiz +gio +lZq +vzs +vzs +vzs +vzs +lZq +lZq +vzs +vzs +vzs +vzs +cfr +cfr +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gtU +gtU +eNj +eNj +eNj +hZX +hZX +hZX +hZX +act +act +act +wsr +act +act +act +act +act +act +act +act +dxA +hZX +hZX +wvR +wvR +wvR +wvR +xLU +xLU +xLU +xLU +xLU +qcD +xTr +xTr +xXp +ydO +hZX +hZX +hZX +urU +xwo +act +act +act +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(71,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tsd +iiz +iiz +iiz +rJv +gnW +sEn +gnW +sEn +sEn +gnW +cfr +hZX +hZX +hZX +cfr +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gtU +gtU +eNj +eNj +eNj +hZX +hZX +hZX +hZX +act +act +act +act +act +act +act +act +act +act +act +act +dxA +hZX +hZX +wvR +wvR +mub +pNY +xLU +xLU +xLU +xLU +xLU +qcD +xTr +xTr +xXp +ydO +hZX +hZX +hZX +urU +urU +urU +act +dxA +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +jCP +psp +psp +psp +psp +psp +"} +(72,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tsd +bNO +tsd +iiz +rJv +srt +sEn +sEn +sEn +sEn +cfr +cfr +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +act +act +act +act +act +act +act +act +act +act +act +act +dxA +hZX +hZX +wvR +wvR +wvR +wvR +xLU +xLU +xLU +xLU +xLU +qcD +xTr +xTr +xXp +xLU +xLU +pNY +xLU +xLU +xLU +urU +act +dxA +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(73,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +dLB +tsd +iiz +rJv +srt +srt +sEn +sEn +cfr +cfr +cfr +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +urU +urU +urU +uhZ +tiY +tiY +tiY +tiY +tiY +tiY +hci +xiP +dxA +hZX +hZX +wvR +wvR +wvR +wvR +sIe +sIe +sIe +sIe +sIe +qcD +xTr +xTr +xXp +xLU +xLU +xLU +xLU +xLU +xLU +bic +pNY +dxA +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(74,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +dLB +bNO +iiz +rJv +moq +srt +vzs +vzs +cfr +cfr +cfr +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +urU +urU +urU +xQi +tki +tuD +tuD +tuD +tuD +rrI +kvS +dda +kvS +hZX +hZX +hZX +wvR +wvR +wvR +sIe +sIe +eqM +sIe +sIe +qcD +xTr +xTr +xXp +xLU +xLU +xLU +xLU +xLU +xLU +bic +wcF +dxA +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +nhf +nhf +nhf +nhf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(75,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +dLB +bNO +iiz +gio +xrv +wjH +wjH +lKi +nll +cfr +cfr +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +agY +osG +osG +osG +agY +agY +hZX +hZX +hZX +hZX +hZX +hZX +hZX +urU +urU +urU +xQi +vaR +xcb +xcb +xcb +vaR +vaR +rUu +xxR +dda +gMX +gMX +iWN +ejJ +ejJ +ejJ +sIe +sIe +sIe +sIe +sIe +qcD +xTr +xTr +xXp +sIe +sIe +sIe +sIe +sIe +sIe +wcF +wcF +wcF +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +nhf +nhf +nhf +nhf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(76,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tsd +iiz +iiz +iiz +iiz +iiz +iiz +noC +cfr +cfr +hZX +hZX +hZX +hZX +gnW +gnW +sEn +gnW +gnW +sEn +sEn +osG +osG +osG +agY +osG +osG +hZX +hZX +hZX +hZX +hZX +hZX +hZX +urU +urU +urU +xQi +vly +tuD +tuD +tuD +tuD +rrI +kvS +dda +kvS +hZX +hZX +hZX +hZX +hZX +hZX +sIe +sIe +sIe +sIe +sIe +qcD +aPT +xTr +xXp +sIe +sIe +sIe +sIe +sIe +sIe +wcF +wcF +wcF +wcF +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +nhf +nhf +nhf +nhf +nhf +nhf +nhf +nhf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(77,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uQd +xkk +xkk +xkk +xkk +xkk +iiz +iiz +fVf +cfr +hZX +hZX +hZX +hZX +sEn +sEn +gnW +sEn +sEn +sEn +sEn +osG +osG +osG +osG +osG +osG +hZX +hZX +hZX +hZX +hZX +hZX +hZX +urU +urU +urU +sMK +vGb +vGb +vGb +vGb +wgs +vGb +wgQ +xiP +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +sIe +dMo +qzY +qzY +qzY +sIe +sIe +sIe +sIe +sIe +sIe +wcF +wcF +wcF +wcF +wcF +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +nhf +nhf +nhf +nhf +nhf +nhf +nhf +nhf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +hZX +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(78,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uQd +xkk +drK +jrk +prj +pLO +xkk +xkk +iiz +kPU +uSi +hZX +hZX +hZX +hZX +sEn +sEn +sEn +sEn +sEn +sEn +sEn +osG +osG +osG +osG +osG +lYY +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +odO +wcF +wcF +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +sIe +eSm +qzY +xTr +qzY +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +nhf +nhf +nhf +nhf +nhf +nhf +nhf +nhf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(79,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uQd +hbE +rBL +euk +rBL +euk +uvz +xkk +iiz +iiz +rjl +tXA +tXA +tXA +tXA +qdW +tkY +sEn +qdW +qdW +qdW +qdW +xzF +xzF +xzF +hLh +osG +tsd +tsd +tsd +tsd +hZX +hZX +hZX +hZX +wcF +wcF +wcF +bic +bic +wcF +wcF +wcF +wcF +wcF +wcF +wcF +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +eqM +ydO +qzY +qzY +qzY +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gAV +gAV +gAV +gAV +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(80,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +uZo +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uQd +eLR +euk +hLY +mMb +rBL +cHZ +xkk +eVM +iiz +iiz +iiz +iiz +iiz +iiz +iiz +iiz +iiz +iiz +iiz +iiz +iiz +iiz +iiz +iiz +iiz +iiz +iiz +iiz +iiz +bNO +hZX +hZX +hZX +urU +urU +urU +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +sIe +ydO +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gAV +gAV +gAV +gAV +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(81,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +uZo +hWY +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +xvr +vVD +rBL +sbG +lLu +euk +tyj +xkk +iiz +iiz +iiz +tsd +tsd +bNO +tsd +bNO +tsd +bNO +tsd +bNO +tsd +bNO +tsd +bNO +tsd +bNO +tsd +tsd +sdp +iiz +bNO +hZX +hZX +hZX +urU +urU +urU +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +sIe +ydO +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gAV +gAV +gAV +gAV +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(82,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +uZo +uZo +uZo +uZo +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uQd +jyq +qAH +tcJ +phc +rBL +jbl +uQd +tsd +bNO +tsd +bNO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tsd +bNO +bNO +tsd +hZX +hZX +hZX +urU +urU +urU +urU +urU +urU +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +gAV +gAV +gAV +gAV +gAV +gAV +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(83,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +uZo +uZo +uZo +uZo +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uQd +xkk +ayX +hbj +rXJ +kuC +xkk +uQd +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +urU +urU +urU +iJu +iJu +act +act +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pZn +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(84,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uZo +uZo +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uQd +uQd +xkk +xkk +szo +xkk +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +urU +urU +urU +act +act +act +act +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +xLU +xLU +xLU +xLU +xLU +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(85,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uZo +uZo +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uQd +jXz +fIb +xkk +uQd +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +act +act +act +act +act +act +act +act +act +act +act +act +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +tPK +tPK +tPK +tPK +xLU +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(86,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uZo +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uQd +vOo +fvv +oPp +uQd +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +act +act +act +act +act +act +act +act +act +act +act +act +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +tPK +tPK +tPK +tPK +xLU +hZX +hZX +hZX +hZX +hZX +hZX +khA +tXA +rxy +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(87,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +uZo +uZo +psp +psp +uZo +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uQd +xkk +sxW +xkk +uQd +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +urU +urU +urU +urU +urU +dxA +dxA +dxA +dxA +dxA +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +wvR +ydO +ydO +ydO +hZX +hZX +hZX +hZX +hZX +khA +fbL +ndi +fbL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(88,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +tvc +tvc +uZo +uZo +psp +psp +uZo +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uQd +uQd +uQd +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pVp +qxN +qwa +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(89,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +pVp +uZo +eZg +psp +psp +uZo +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +xLU +wvR +xLU +xLU +xLU +xLU +xLU +xLU +xLU +xLU +hZX +hZX +hZX +hZX +hZX +hZX +wuq +fbL +oGx +fbL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(90,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +pVp +yak +mRM +psp +psp +uZo +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wcF +wcF +wcF +wcF +bic +bic +wcF +wcF +wcF +wcF +wcF +wcF +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +xLU +xLU +xLU +xLU +xLU +xLU +xLU +xLU +xLU +xLU +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(91,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +pVp +yak +mRM +psp +psp +uZo +uZo +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wcF +wcF +wcF +wcF +fbL +oGx +fbL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +wvR +wvR +wvR +wvR +wvR +wvR +wvR +wvR +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(92,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +pVp +yak +mRM +psp +psp +psp +uZo +uZo +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +oGx +qwa +oGx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +wvR +wvR +eSm +wvR +wvR +wvR +wvR +wvR +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(93,1,4) = {" +psp +psp +psp +psp +psp +psp +hZX +hZX +pVp +yak +mRM +psp +psp +psp +uZo +uZo +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +fbL +oGx +fbL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +wvR +wvR +wvR +gAg +wvR +wvR +wvR +wvR +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(94,1,4) = {" +psp +psp +psp +psp +psp +psp +hZX +hZX +pVp +yak +mRM +psp +psp +psp +uZo +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +wvR +wvR +wvR +wvR +wvR +wvR +wvR +wvR +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(95,1,4) = {" +psp +psp +psp +psp +psp +psp +hZX +hZX +pVp +yak +mRM +psp +psp +psp +uZo +uZo +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +sIe +sIe +sIe +sIe +sIe +sIe +sIe +eqM +sIe +sIe +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(96,1,4) = {" +psp +psp +psp +psp +psp +psp +hZX +hZX +pVp +yak +mRM +psp +psp +psp +uZo +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +sIe +sIe +sIe +sIe +sIe +sIe +sIe +sIe +sIe +sIe +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(97,1,4) = {" +psp +psp +psp +psp +psp +psp +hZX +hZX +pVp +yak +mRM +psp +psp +psp +psp +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(98,1,4) = {" +psp +psp +psp +psp +psp +psp +hZX +hZX +pVp +yak +psp +psp +psp +psp +psp +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(99,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +eZg +uZo +uZo +psp +psp +psp +uZo +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(100,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +psp +uZo +uZo +uZo +uZo +uZo +uZo +hZX +hZX +hZX +hZX +hZX +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(101,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(102,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(103,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(104,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(105,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(106,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(107,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(108,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cZM +cZM +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +pFD +pFD +psp +psp +psp +psp +psp +tvc +tvc +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(109,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +cZM +cZM +cZM +cZM +cZM +cZM +cZM +cZM +xYD +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +pFD +pFD +psp +psp +psp +psp +psp +psp +uZo +uZo +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(110,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +aXI +uFZ +mqf +mqf +mqf +mqf +cZM +cZM +eOG +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pFD +pFD +pFD +pFD +pFD +tuO +tuO +tuO +uZo +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(111,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +cZM +jyY +cZM +cZM +cZM +cZM +cZM +cZM +eOG +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +pFD +pFD +jpW +tuO +psp +uZo +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(112,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +cZM +xYD +cZM +psp +psp +psp +psp +aXI +uFZ +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(113,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +cZM +xYD +cZM +psp +psp +psp +psp +cZM +uFZ +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(114,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +cZM +cZM +cZM +psp +cZM +cZM +cZM +cZM +qcg +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uZo +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(115,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +aXI +uFZ +uFZ +uFZ +uFZ +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uZo +uZo +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(116,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cZM +eOG +cZM +cZM +cZM +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(117,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cZM +eOG +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +uZo +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(118,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cZM +cZM +cZM +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +oEj +uZo +uZo +uZo +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(119,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +tuO +psp +psp +uZo +uZo +oEj +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(120,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jyw +jyw +jyw +jyw +lyN +tuO +uZo +oEj +uZo +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(121,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jyw +jyw +jyw +psp +psp +psp +psp +psp +psp +psp +hZX +psp +psp +psp +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(122,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(123,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(124,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(125,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(126,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(127,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(128,1,4) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} + +(1,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(2,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +eoL +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(3,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(4,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(5,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(6,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(7,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +yft +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(8,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +yft +psp +psp +psp +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +eDT +esl +esl +esl +esl +eDT +esl +esl +esl +eDT +esl +esl +esl +eDT +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(9,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +psp +psp +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +hZX +hZX +hZX +hZX +esl +hZX +hZX +esl +eDT +esl +esl +esl +eDT +esl +esl +hZX +hZX +hZX +hZX +hZX +eDT +esl +esl +esl +esl +eDT +esl +esl +esl +esl +esl +eDT +esl +esl +esl +eDT +esl +eDT +esl +psp +rRX +eDT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(10,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +rGj +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +hZX +esl +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +esl +eDT +esl +esl +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +nOp +rRX +iXr +iXr +eDT +rRX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(11,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +hZX +hZX +hZX +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +esl +esl +eDT +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +lip +hyA +bCq +iXr +iXr +eDT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(12,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +esl +esl +esl +eDT +bCq +hyA +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(13,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +oHK +koX +esl +bCp +iXr +esl +eDT +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(14,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +koX +esl +esl +nOp +eDT +rRX +eDT +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(15,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +hZX +hZX +hZX +twf +esl +npJ +esl +itF +rkd +wJc +kNj +kNj +kNj +psp +psp +psp +psp +psp +psp +psp +psp +"} +(16,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +psp +psp +rRX +iXr +esl +iXr +npJ +npJ +kGL +iXr +nFY +ifd +ifd +dlu +ifd +psp +psp +psp +psp +psp +psp +psp +psp +"} +(17,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +psp +psp +psp +psp +gpG +cjz +bCq +iXr +npJ +esl +iXr +dIj +tSd +tSd +sLN +laK +psp +psp +psp +psp +psp +psp +psp +psp +"} +(18,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +kNj +gdM +rkd +koX +flC +hCo +rkd +wJc +kNj +ybA +kNj +psp +psp +psp +psp +psp +psp +psp +psp +"} +(19,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +ate +bGd +nFY +koX +jvj +npJ +npJ +npJ +aKF +npJ +ocJ +psp +psp +psp +psp +psp +psp +psp +psp +"} +(20,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +esl +psp +psp +psp +psp +psp +psp +tSd +tSd +qEw +uKD +wAr +jPE +koX +kwY +npJ +koX +vIt +psp +psp +psp +psp +psp +psp +psp +psp +"} +(21,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +sAi +tSd +juf +npJ +koX +npJ +koX +iOn +mYD +koX +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(22,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +hsL +qyS +dIj +pSx +npJ +npJ +npJ +isQ +koX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(23,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +hsL +hsL +rkd +nJk +mTy +kSC +mTy +mTy +npJ +juf +flQ +psp +psp +psp +psp +psp +psp +psp +psp +"} +(24,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +hsL +hsL +hsL +jXR +fvp +ahS +mTy +mTy +ahS +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(25,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +psp +psp +psp +psp +psp +hsL +hsL +hsL +jXR +psp +jtB +mTy +kSC +mFx +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(26,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +hsL +hsL +hsL +jXR +psp +ahS +tAV +rXW +ahS +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(27,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +hsL +sNy +hsL +hsL +psp +jaf +jHi +rXW +nXA +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(28,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +sNy +hsL +sNy +hsL +sNy +eEa +eEa +oqz +nXA +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(29,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +esl +psp +psp +psp +psp +hsL +jXR +jXR +sNy +hsL +ahS +nXA +rXW +ahS +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(30,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +sNy +jXR +jXR +hsL +sNy +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(31,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +psp +psp +psp +hsL +sNy +hsL +hsL +sNy +hsL +sNy +sNy +sNy +sNy +jXR +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(32,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +psp +psp +psp +psp +psp +sNy +hsL +sNy +sNy +hsL +sNy +hsL +jXR +jXR +hsL +sNy +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(33,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +sNy +hsL +sNy +sNy +hsL +hsL +sNy +jXR +jXR +sNy +hsL +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(34,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +hsL +sNy +jXR +jXR +sNy +sNy +hsL +sNy +sNy +hsL +sNy +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(35,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +psp +psp +psp +psp +psp +psp +sNy +hsL +jXR +jXR +sNy +sNy +hsL +sNy +sNy +hsL +sNy +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(36,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +jXR +hsL +hsL +sNy +hsL +hsL +sNy +hsL +hsL +sNy +hsL +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(37,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sNy +hsL +sNy +sNy +jXR +jXR +sNy +hsL +sNy +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(38,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +jXR +jXR +sNy +sNy +jXR +jXR +sNy +sNy +jXR +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(39,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +esl +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hsL +hsL +sNy +hsL +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(40,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +sNy +sNy +hsL +sNy +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(41,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +jXR +sNy +sNy +sNy +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(42,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +psp +psp +psp +jXR +jXR +jXR +jXR +jXR +jXR +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(43,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(44,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +iPk +iPk +iPk +iPk +iPk +iPk +iPk +iPk +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uNR +roK +uNR +rxy +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(45,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +iPk +iPk +iPk +iPk +iPk +iPk +iPk +iPk +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +roK +ubM +gfp +mRM +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(46,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +tcu +tcu +tcu +nBv +hvS +hvS +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +uNR +frM +uNR +edB +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(47,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +tTf +tTf +tTf +tTf +tTf +tTf +tTf +tTf +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +wuq +rEp +edB +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +psp +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(48,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +tTf +tTf +tTf +pZn +tTf +tTf +tTf +tTf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +esl +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(49,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pZn +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +iPk +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(50,1,5) = {" +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +xLU +xLU +xLU +xLU +xLU +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +iPk +iPk +iPk +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(51,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +sIe +sIe +sIe +sIe +sIe +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +tcu +iNY +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(52,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tTf +tTf +tTf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +esl +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(53,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +xLU +xLU +xLU +xLU +aAp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tTf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(54,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pZn +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +xLU +sIe +xLU +sIe +xLU +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(55,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pNY +sIe +sIe +sIe +sIe +hZX +hZX +hZX +hZX +urU +urU +act +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(56,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +xLU +ydO +ydO +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +urU +urU +act +dxA +dxA +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(57,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +pZn +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +xLU +ydO +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +urU +urU +act +dxA +dxA +hZX +wcF +wcF +wcF +wcF +wcF +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(58,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +xLU +ydO +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +urU +urU +act +dxA +dxA +hZX +dxA +hZX +hZX +hZX +urU +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(59,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +lRL +ydO +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +urU +urU +wcF +dxA +dxA +hZX +dxA +hZX +hZX +hZX +urU +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(60,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +sIe +ydO +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +urU +urU +wcF +dxA +dxA +hZX +dxA +hZX +hZX +hZX +urU +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(61,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +sIe +ydO +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +urU +urU +wcF +dxA +dxA +hZX +dxA +act +act +act +urU +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(62,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +sIe +ydO +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +urU +pNY +wcF +dxA +dxA +hZX +act +act +act +act +act +act +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(63,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +urU +btS +urU +dxA +dxA +dxA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +"} +(64,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +iPk +iPk +iPk +iPk +iPk +iPk +iPk +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +xBT +wcF +odO +wcF +odO +wcF +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +"} +(65,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +tcu +tcu +iPk +iPk +iPk +iPk +iPk +hvS +hvS +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +psp +"} +(66,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +tcu +tcu +tcu +tgC +hvS +yir +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +"} +(67,1,5) = {" +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +tcu +tTf +tTf +tTf +tTf +tTf +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +"} +(68,1,5) = {" +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +tTf +tTf +tTf +tTf +tTf +tTf +tTf +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +"} +(69,1,5) = {" +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +ydO +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +"} +(70,1,5) = {" +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +ydO +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(71,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +ydO +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(72,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +ydO +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(73,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +act +act +act +act +act +act +act +act +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +ydO +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(74,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +act +act +act +act +act +act +act +rEh +hIc +rEh +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +wvR +wvR +ydO +ydO +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(75,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +urU +urU +urU +xCN +dxA +dxA +dxA +qnG +uWI +ybx +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +ydO +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(76,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wcF +wcF +wcF +wcF +wcF +wcF +wcF +rEh +oEk +rEh +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +wvR +ydO +ydO +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +yft +psp +psp +psp +psp +psp +psp +"} +(77,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +rpA +hRh +rpA +hRh +rpA +hRh +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wcF +wcF +wcF +wcF +wcF +wcF +wcF +wcF +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +wvR +acw +eQe +acw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +hZX +hZX +psp +psp +psp +hZX +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(78,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hRh +iyb +iyb +iyb +iyb +iyb +iyb +rpA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eQe +eZv +eQe +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(79,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +rpA +iyb +wOm +iEt +iEt +eSU +iyb +hRh +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +acw +eQe +acw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(80,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hRh +iyb +vdL +sOs +vCH +tAK +iyb +odm +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(81,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +rpA +iyb +vdL +lAK +jhJ +tAK +iyb +hRh +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(82,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hRh +iyb +kmk +whC +whC +gNf +iyb +rpA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(83,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hUx +iyb +iyb +iyb +iyb +iyb +iyb +hRh +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(84,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hRh +rpA +hRh +rpA +hRh +rpA +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(85,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +tcu +iPk +iPk +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(86,1,5) = {" +psp +psp +uZo +uZo +psp +psp +hZX +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +nBv +guH +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(87,1,5) = {" +xMA +uZo +uZo +uZo +uZo +hZX +hZX +hZX +hZX +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tcu +tTf +tTf +hvS +hvS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +nhf +nhf +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(88,1,5) = {" +xMA +uZo +uZo +uZo +uZo +uZo +tvc +hZX +hZX +hZX +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +tTf +tTf +tTf +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +jCk +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(89,1,5) = {" +xMA +uZo +uZo +wcn +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(90,1,5) = {" +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(91,1,5) = {" +psp +psp +psp +psp +psp +psp +hZX +hZX +eoL +hZX +hZX +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +nhf +nhf +tmw +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(92,1,5) = {" +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +krS +jCk +tmw +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(93,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +krS +gAV +gAV +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(94,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(95,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(96,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(97,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(98,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(99,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(100,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(101,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(102,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(103,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(104,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(105,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(106,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(107,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(108,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +iXr +koX +dPS +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(109,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cZM +cZM +cZM +cZM +cZM +cZM +psp +cZM +psp +cZM +xHF +esl +khQ +psp +psp +psp +psp +psp +rRX +koX +koX +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(110,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +aXI +xYD +yee +yee +yee +uFZ +uFZ +uFZ +uFZ +uFZ +nXs +nXs +hlA +khQ +khQ +psp +psp +oEj +tjQ +koX +iXr +psp +psp +psp +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(111,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cZM +cZM +cZM +cZM +cZM +cZM +psp +cZM +sEI +cZM +kAf +nXs +koX +hlA +khQ +oEj +oEj +nOp +iXr +koX +nOp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(112,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sEI +sEI +kdB +nXs +kdB +sEI +sEI +oEj +oEj +tjQ +esl +koX +iXr +oEj +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(113,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sEI +nXs +nlR +esl +khQ +psp +psp +oEj +tjQ +koX +koX +nOp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(114,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +sEI +nXs +sEI +iXr +oEj +psp +psp +psp +oEj +tbJ +koX +iXr +oEj +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(115,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cZM +cZM +cZM +nOp +nOp +nOp +psp +psp +psp +oEj +esl +nXs +nOp +nlR +psp +psp +psp +psp +psp +nlR +koX +esl +nOp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(116,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cZM +xYD +cZM +kAz +psp +qrH +nOp +psp +khQ +khQ +iXr +aBd +esl +esl +oEj +psp +psp +psp +oEj +nlR +koX +esl +nlR +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(117,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cZM +eOG +cZM +nsE +waO +iXr +ada +sVm +nOp +esl +esl +nXs +esl +esl +nOp +psp +psp +psp +psp +iXr +koX +esl +nOp +oEj +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(118,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +aXI +uFZ +uFZ +nXs +nXs +nXs +jIv +nXs +nXs +nXs +nXs +nXs +koX +esl +nlR +nOp +oEj +psp +oEj +esl +koX +esl +nlR +oEj +psp +psp +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(119,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +cZM +cZM +cZM +iXr +nOp +esl +esl +esl +esl +nlR +nOp +esl +koX +koX +esl +iXr +iXr +sZD +tjQ +koX +koX +oEj +nOp +oEj +oEj +psp +oEj +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +psp +psp +psp +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +eoL +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(120,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +nOp +nOp +oRX +new +esl +iXr +nDR +nOp +khQ +psp +psp +koX +koX +koX +iXr +esl +koX +koX +iXr +nOp +nOp +oEj +oEj +oEj +oEj +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(121,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +xxz +kKV +tKM +aNH +twS +khQ +nOp +psp +psp +psp +psp +psp +vdM +koX +koX +koX +tjQ +nOp +nOp +oEj +oEj +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +"} +(122,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +"} +(123,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +"} +(124,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +"} +(125,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(126,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(127,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} +(128,1,5) = {" +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +hZX +psp +psp +psp +psp +psp +psp +psp +psp +psp +psp +"} diff --git a/_maps/map_files/templates/dwarf_outpost/Dwarf_Outpost_1.dmm b/_maps/map_files/templates/dwarf_outpost/Dwarf_Outpost_1.dmm new file mode 100644 index 0000000000..0bb7231dfd --- /dev/null +++ b/_maps/map_files/templates/dwarf_outpost/Dwarf_Outpost_1.dmm @@ -0,0 +1,1844 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"bC" = ( +/obj/machinery/dye_bin, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"bS" = ( +/turf/closed/wall/mineral/rogue/decostone/cand, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"ck" = ( +/obj/item/reagent_containers/glass/bottle/rogue/beer/voddena, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"co" = ( +/obj/structure/fluff/walldeco/stone{ + pixel_x = 0; + pixel_y = 32 + }, +/turf/open/water/cleanshallow, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"dA" = ( +/obj/item/rogueweapon/mace/goden/steel/warhammer, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"dB" = ( +/obj/structure/stairs/stone{ + dir = 8 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"dM" = ( +/turf/open/water/swamp, +/area/rogue) +"dV" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"et" = ( +/obj/effect/spawner/roguemap/orc_warrior_carbon_maybe, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"eB" = ( +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"eE" = ( +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"eM" = ( +/obj/structure/fluff/walldeco/stone, +/turf/closed/wall/mineral/rogue/stone/window/moss, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"fm" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"fX" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/flint, +/obj/item/clothing/suit/roguetown/armor/gambeson/heavy, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"gf" = ( +/obj/effect/mob_spawn/human/orc/corpse/dwarfinvasion, +/obj/effect/decal/cleanable/blood_neu/random, +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"gk" = ( +/obj/structure/stairs/stone{ + dir = 4 + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"gl" = ( +/turf/closed/mineral/rogue/bedrock, +/area/rogue) +"gq" = ( +/obj/effect/decal/remains/human/old{ + name = "dwarf remains"; + plane = -3 + }, +/obj/effect/decal/cleanable/blood_neu/random, +/obj/effect/decal/shadow_floor{ + dir = 10 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"gL" = ( +/obj/item/clothing/head/roguetown/helmet/ironpot, +/turf/open/floor/rogue/metal, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"gP" = ( +/obj/structure/bars/grille, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/water/swamp, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"gU" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"hz" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/pick/paxe/neu, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"hJ" = ( +/obj/machinery/light/rogue/torchholder/c, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"hR" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/obj/effect/decal/shadow_floor{ + dir = 9 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"ik" = ( +/obj/structure/mineral_door/wood/donjon/stone, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"im" = ( +/obj/structure/table/wood/reinf_long{ + dir = 4 + }, +/obj/item/reagent_containers/glass/cup/wooden, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"iS" = ( +/obj/effect/spawner/roguemap/beartrap, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"jk" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"jt" = ( +/obj/structure/fluff/walldeco/stone{ + pixel_x = 0; + pixel_y = 32 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"ju" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"lr" = ( +/obj/machinery/light/rogue/hearth, +/turf/open/floor/rogue/cobblerock_alt, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"lI" = ( +/obj/effect/decal/shadow_floor{ + dir = 5 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"lL" = ( +/obj/structure/mineral_door/wood/donjon/stone, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"mx" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/obj/effect/mob_spawn/human/orc/corpse/dwarfinvasion, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"nz" = ( +/obj/machinery/light/rogue/oven{ + pixel_y = 32 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"nQ" = ( +/obj/structure/fluff/psycross/crafted/shrine/malum{ + icon_state = "malum_fire" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"oj" = ( +/obj/machinery/light/rogue/torchholder/c, +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"or" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 6 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"ov" = ( +/obj/structure/mineral_door/wood/donjon/stone, +/obj/item/restraints/legcuffs/beartrap/armed/camouflage, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"oD" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/ingot/steel, +/obj/item/ingot/steel, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"pl" = ( +/obj/structure/table/wood/reinforced_alter, +/obj/item/reagent_containers/food/snacks/rogue/meat/salami, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"pw" = ( +/obj/effect/mob_spawn/human/orc/corpse/dwarfinvasion, +/obj/effect/decal/cleanable/blood_neu/random, +/obj/item/ammo_casing/caseless/rogue/arrow/poison, +/obj/item/gun/ballistic/revolver/grenadelauncher/bow/recurve, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"py" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/obj/effect/decal/shadow_floor{ + dir = 6 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"pV" = ( +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/obj/item/ammo_casing/caseless/rogue/arrow, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"qz" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"qF" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 10 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"qW" = ( +/obj/item/rogueore/coal, +/obj/structure/closet/crate/chest/old_crate, +/obj/item/rogueore/coal, +/obj/item/rogueore/coal, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"rm" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 6 + }, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"rA" = ( +/obj/effect/spawner/roguemap/orc_warrior_carbon_maybe, +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"sz" = ( +/obj/structure/fermenting_barrel/random/beer, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"sR" = ( +/obj/structure/rack/rogue/shelf/notdense, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"tI" = ( +/obj/item/gun/ballistic/revolver/grenadelauncher/crossbow, +/obj/item/clothing/cloak/cape/silk/random, +/obj/structure/closet/crate/roguecloset/lord, +/obj/effect/spawner/roguemap/loot/jewelry, +/obj/item/ammo_casing/caseless/rogue/bolt/pyro, +/obj/item/ammo_casing/caseless/rogue/bolt/pyro, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"tW" = ( +/obj/structure/rack/rogue/shelf/notdense, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"tX" = ( +/obj/structure/bed/rogue/wool, +/obj/structure/fluff/walldeco/stone{ + pixel_x = 0; + pixel_y = 32 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"ul" = ( +/obj/structure/rack/rogue, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"uH" = ( +/obj/structure/table/wood/reinforced_alter, +/obj/item/reagent_containers/glass/bucket/pot{ + pixel_y = 8 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"uN" = ( +/obj/structure/table/wood/reinf_long{ + dir = 8 + }, +/obj/item/reagent_containers/glass/bowl, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"vf" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"vh" = ( +/obj/structure/table/wood/reinforced_alter, +/obj/item/rogueweapon/knife/cleaver, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"vl" = ( +/turf/closed/wall/mineral/rogue/stone/window/moss, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"vo" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"vA" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/obj/item/ammo_casing/caseless/rogue/arrow, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"vI" = ( +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"wG" = ( +/obj/structure/closet/crate/chest/old_crate, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"xp" = ( +/obj/structure/mineral_door/wood/donjon/stone, +/obj/effect/decal/cleanable/blood_neu/tracks, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"yN" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/flashlight/flare/torch/lantern, +/obj/item/reagent_containers/food/snacks/poppypretzel, +/obj/item/reagent_containers/food/snacks/poppypretzel, +/obj/item/reagent_containers/food/snacks/poppypretzel, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"zg" = ( +/obj/structure/closet/crate/chest/neu, +/obj/item/reagent_containers/powder/salt, +/obj/item/reagent_containers/powder/salt, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"zt" = ( +/obj/item/rogueweapon/axe/steel, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Af" = ( +/obj/structure/rack/rogue/shelf/notdense, +/obj/machinery/light/rogue/torchholder/l, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Ap" = ( +/obj/item/chair/stool/bar/rogue, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"BC" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/metal, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"BR" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/tongs, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"BW" = ( +/obj/structure/table/wood/reinforced_alter, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Cw" = ( +/obj/effect/decal/remains/human/old{ + name = "dwarf remains"; + plane = -3 + }, +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"CC" = ( +/obj/item/rogueore/iron, +/obj/item/rogueore/iron, +/obj/structure/closet/crate/chest/old_crate, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"CV" = ( +/obj/machinery/light/rogue/smelter/great, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Dt" = ( +/turf/open/floor/rogue/metal, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"DR" = ( +/obj/effect/spawner/roguemap/orc_warrior_carbon_maybe, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Fw" = ( +/obj/structure/fluff/walldeco/stone{ + pixel_x = 0; + pixel_y = 32 + }, +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"FK" = ( +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Gl" = ( +/obj/structure/fermenting_barrel, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"GA" = ( +/obj/structure/bed/rogue/mediocre, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"GC" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/obj/effect/mob_spawn/human/orc/corpse/dwarfinvasion, +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Hh" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/obj/effect/spawner/roguemap/beartrap_obvious, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"IM" = ( +/obj/effect/decal/remains/human/old{ + name = "dwarf remains"; + plane = -3 + }, +/obj/effect/decal/cleanable/blood_neu/random, +/obj/item/clothing/suit/roguetown/armor/chainmail/battered{ + pixel_x = -12; + pixel_y = 5 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"IZ" = ( +/obj/effect/mob_spawn/human/corpse/damaged/underdweller, +/obj/effect/decal/cleanable/blood_neu/random, +/obj/item/ammo_casing/caseless/rogue/arrow, +/turf/open/floor/rogue/metal, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Jw" = ( +/obj/structure/fluff/walldeco/stone, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"JF" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 1 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"JV" = ( +/obj/structure/fluff/walldeco/stone{ + pixel_x = 0; + pixel_y = 32 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Kk" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Ku" = ( +/obj/item/clothing/suit/roguetown/armor/chainmail/hauberk/broken, +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 6 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"KV" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/rogueweapon/flail, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"La" = ( +/obj/structure/closet/crate/chest/neu_iron, +/obj/effect/spawner/roguemap/loot/jewelry, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Lu" = ( +/obj/structure/mineral_door/wood/donjon/stone, +/turf/open/floor/rogue/blocks/newstone/alt, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"MK" = ( +/obj/machinery/light/rogue/torchholder/c, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/blocks/newstone/alt, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"MX" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/obj/effect/spawner/roguemap/orc_warrior_carbon_maybe, +/turf/open/floor/rogue/metal, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"NG" = ( +/obj/effect/mob_spawn/human/orc/corpse/dwarfinvasion, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"NP" = ( +/obj/machinery/light/rogue/torchholder/l, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Os" = ( +/obj/structure/bars, +/turf/open/water/swamp, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Pk" = ( +/obj/effect/mob_spawn/human/corpse/damaged/underdweller, +/obj/effect/decal/cleanable/blood_neu/random, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Pl" = ( +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Pp" = ( +/obj/item/rogueweapon/pick/paxe/neu, +/turf/open/floor/rogue/metal, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Pw" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/effect/spawner/roguemap/loot/common, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"PO" = ( +/obj/effect/decal/remains/human/old{ + name = "dwarf remains"; + plane = -3 + }, +/obj/effect/decal/cleanable/blood_neu/random, +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Qe" = ( +/obj/effect/mob_spawn/human/orc/corpse/dwarfinvasion, +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/metal, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"QF" = ( +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"QQ" = ( +/obj/item/chair/stool/bar/rogue, +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Ra" = ( +/obj/machinery/light/rogue/torchholder/l, +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 9 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Ro" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 10 + }, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Rs" = ( +/obj/machinery/light/rogue/firebowl{ + pixel_x = -7 + }, +/turf/open/floor/rogue/metal, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"RA" = ( +/obj/structure/table/wood/reinforced_alter, +/obj/item/storage/roguebag{ + pixel_y = 10 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"SI" = ( +/obj/structure/rack/rogue, +/obj/item/flint, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"SW" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 4 + }, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"SX" = ( +/obj/structure/closet/crate/chest/neu_iron, +/obj/item/riddleofsteel, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Ta" = ( +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Tp" = ( +/obj/structure/stairs/stone, +/turf/open/floor/rogue/dirt/road, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"TE" = ( +/obj/effect/decal/remains/human/old{ + name = "dwarf remains"; + plane = -3 + }, +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Ub" = ( +/turf/open/floor/rogue/herringbone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Uj" = ( +/obj/structure/chair/stool/rogue, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"UK" = ( +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"UY" = ( +/obj/structure/rack/rogue, +/obj/item/flashlight/flare/torch/lantern/copper, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Wa" = ( +/obj/structure/bars/grille, +/obj/structure/flora/roguegrass/water, +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/water/swamp, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Wz" = ( +/obj/effect/spawner/roguemap/orc_warrior_carbon_maybe, +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 9 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"WD" = ( +/obj/effect/spawner/roguemap/orc_warlord_carbon, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"WK" = ( +/obj/structure/fermenting_barrel/random/beer, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"WT" = ( +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Xg" = ( +/obj/structure/table/wood/reinf_long{ + dir = 4 + }, +/obj/item/reagent_containers/peppermill, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Xk" = ( +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Xy" = ( +/obj/item/reagent_containers/glass/cup/wooden, +/obj/structure/fluff/walldeco/stone{ + pixel_x = 0; + pixel_y = 32 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"XT" = ( +/turf/open/water/cleanshallow, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"XX" = ( +/obj/effect/decal/remains/human/old{ + name = "dwarf remains"; + plane = -3 + }, +/obj/effect/decal/cleanable/blood_neu/random, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Yt" = ( +/obj/effect/decal/cleanable/blood_neu/tracks{ + dir = 1 + }, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"YH" = ( +/obj/effect/decal/remains/human/old{ + name = "dwarf remains"; + plane = -3 + }, +/obj/effect/decal/shadow_floor{ + dir = 1 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"YV" = ( +/obj/item/rogueore/iron, +/obj/structure/closet/crate/chest/old_crate, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Zj" = ( +/obj/machinery/light/rogue/torchholder/r, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Zs" = ( +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost/orcy) +"Zv" = ( +/obj/structure/table/wood/reinf_long{ + dir = 8 + }, +/obj/item/reagent_containers/food/snacks/rogue/meat/salami, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost/orcy) + +(1,1,1) = {" +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(2,1,1) = {" +gl +vf +vf +vf +vf +vf +vf +vf +vf +vf +vf +vf +vf +vf +vf +vf +vf +vf +vf +vf +vf +FK +vf +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(3,1,1) = {" +gl +vf +ul +BW +vf +wG +NP +Zs +Gl +Gl +NP +RA +Zs +Zs +vf +ul +UY +ul +NP +ul +ul +hz +vf +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(4,1,1) = {" +gl +vf +Zs +Zs +iS +Zs +eB +eB +eB +eB +eB +eB +eB +Zs +ik +Zs +Zs +Zs +Zs +Zs +Zs +Zs +vf +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(5,1,1) = {" +gl +bS +vI +Zs +vf +Zs +Zs +Zs +Zs +Zs +Zs +Zs +Zs +Zs +vf +SI +ul +ul +Zs +Zs +Zs +Zs +vf +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(6,1,1) = {" +gl +vf +Zs +et +vf +vf +vf +vf +vf +vf +vf +vf +vf +vI +vf +vf +vf +vf +vf +vf +Lu +vf +FK +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(7,1,1) = {" +gl +vf +oD +Xk +WD +QF +QF +BR +vf +tI +Ub +yN +vf +Zs +vf +Ap +WK +eB +vf +Af +Zs +sz +vf +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(8,1,1) = {" +gl +eM +SX +Xk +QF +QF +CV +QF +vf +tX +Ub +Ub +ov +Zs +vf +Xy +uN +Uj +vf +Zs +Zs +KV +vf +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(9,1,1) = {" +gl +vf +qW +YH +QF +QF +QF +QF +vf +Ub +Ub +ck +vf +Zs +bS +WT +im +Ap +DR +Zs +Zs +sz +vf +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(10,1,1) = {" +gl +vf +et +dV +vf +vf +vf +vf +vf +vf +vf +vf +vf +vI +vf +tW +eB +eB +eB +Zs +Zs +vf +vf +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(11,1,1) = {" +gl +bS +PO +Zs +vf +Zs +Zs +Zs +Zs +Zs +Zs +Zs +Zs +Zs +bS +QQ +Zv +Wz +JF +qF +Zs +BW +vf +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(12,1,1) = {" +gl +vf +Zs +Zs +iS +Zs +eB +eB +eB +eB +eB +eB +eB +Zs +vf +JV +Xg +jk +vf +fm +Zs +vh +vf +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(13,1,1) = {" +gl +vf +ul +RA +vf +Zs +Zj +YV +Zs +YV +Zj +CC +vf +ik +vf +dA +TE +Ku +vf +fm +Zs +pl +FK +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(14,1,1) = {" +gl +vf +vf +vf +vf +vf +vf +vf +vf +vf +vf +vf +bS +MK +vf +eB +lr +uH +vf +fm +Zs +Zs +FK +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(15,1,1) = {" +gl +gl +gl +gl +gl +gl +gl +gl +vf +vf +vf +eE +vf +gk +vf +eE +vf +vf +vf +Fw +Zs +Zs +FK +vf +vf +vf +vf +vf +vf +vf +vf +gl +gl +"} +(16,1,1) = {" +gl +gl +gl +gl +gl +gl +gl +gl +vf +Zs +Zs +Pl +dV +Dt +rA +Pl +Zs +Ra +xp +or +Zs +Zs +vf +eB +fX +GA +vf +eB +eB +La +vf +gl +gl +"} +(17,1,1) = {" +gl +gl +vf +vf +vf +gl +gl +gl +bS +vI +vf +co +IM +gL +Kk +XT +vf +Fw +vl +sR +Zs +Zs +vf +tW +eB +eB +vf +GA +eB +eB +vf +gl +gl +"} +(18,1,1) = {" +gl +gl +vf +dB +vf +vf +vf +vf +vf +Zs +XT +XT +zt +Qe +Kk +XT +XT +fm +vl +nz +Zs +zg +vf +WT +eB +eB +vf +WT +eB +eB +vf +gl +gl +"} +(19,1,1) = {" +gl +gl +vf +dB +bS +hJ +gP +gU +vf +gU +gU +Pk +hR +MX +gq +gU +ju +rm +vf +vf +vf +vf +vf +vf +lL +vf +vf +vf +lL +vf +vf +gl +gl +"} +(20,1,1) = {" +gl +gl +Jw +Zs +qz +vo +Hh +NG +QF +UK +Yt +Ro +QF +nQ +gf +UK +XX +QF +QF +qz +qz +Kk +Zs +Zs +Zs +Zs +Zs +Zs +Zs +Zs +Os +dM +gl +"} +(21,1,1) = {" +gl +gl +vf +Zs +qz +vo +pw +UK +UK +QF +mx +SW +QF +Rs +vo +UK +QF +QF +QF +qz +Tp +Kk +Zs +Zs +Zs +Zj +et +vf +ik +vf +vf +gl +gl +"} +(22,1,1) = {" +gl +gl +vf +vf +bS +oj +Wa +pV +vf +Ta +Ta +GC +lI +IZ +py +vA +Ta +Ta +vf +vf +vf +vf +vf +vf +lL +vf +vf +vf +eB +eB +vf +gl +gl +"} +(23,1,1) = {" +gl +gl +vf +vf +vf +vf +vf +vf +vf +Zs +vf +co +dV +Pp +rA +XT +vf +jt +vf +gl +gl +gl +vf +Pw +eB +eB +vf +tW +DR +eB +vf +gl +gl +"} +(24,1,1) = {" +gl +gl +gl +gl +gl +gl +gl +gl +bS +vI +XT +XT +Cw +BC +Kk +XT +XT +Zj +vf +gl +gl +gl +vf +WT +eB +eB +vf +TE +GA +bC +vf +gl +gl +"} +(25,1,1) = {" +gl +gl +gl +gl +gl +gl +gl +gl +vf +Zs +Zs +Pl +Zs +vf +vf +eE +vf +vf +vf +gl +gl +gl +vf +eB +GA +eB +vf +vf +vf +vf +vf +gl +gl +"} +(26,1,1) = {" +gl +gl +gl +gl +gl +gl +gl +gl +vf +vf +vf +eE +vf +vf +gl +gl +gl +gl +gl +gl +gl +gl +vf +vf +vf +vf +vf +gl +gl +gl +gl +gl +gl +"} +(27,1,1) = {" +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(28,1,1) = {" +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(29,1,1) = {" +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(30,1,1) = {" +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} diff --git a/_maps/map_files/templates/dwarf_outpost/Dwarf_Outpost_2.dmm b/_maps/map_files/templates/dwarf_outpost/Dwarf_Outpost_2.dmm new file mode 100644 index 0000000000..2562b0752c --- /dev/null +++ b/_maps/map_files/templates/dwarf_outpost/Dwarf_Outpost_2.dmm @@ -0,0 +1,1685 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"bi" = ( +/obj/structure/bars/pipe{ + dir = 8 + }, +/turf/closed/mineral/rogue, +/area/rogue/under/catacombs/dwarfoutpost) +"bS" = ( +/obj/item/natural/stone, +/turf/open/floor/rogue/dirt, +/area/rogue/under/catacombs/dwarfoutpost) +"ck" = ( +/obj/item/reagent_containers/glass/bottle/rogue/beer/voddena, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/catacombs/dwarfoutpost) +"co" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/dirt, +/area/rogue/under/catacombs/dwarfoutpost) +"dk" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"dA" = ( +/obj/structure/fermenting_barrel/random/beer, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"dB" = ( +/obj/structure/stairs/stone{ + dir = 8 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"dY" = ( +/obj/machinery/light/rogue/oven{ + fueluse = 0; + pixel_y = 32 + }, +/turf/closed/mineral/rogue, +/area/rogue/under/catacombs/dwarfoutpost) +"eB" = ( +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"eE" = ( +/obj/effect/decal/cleanable/dirt/cobweb{ + dir = 1 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"eM" = ( +/obj/item/natural/stone, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"fq" = ( +/obj/item/roguebin/water/gross, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"fV" = ( +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"fX" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/flint, +/obj/item/clothing/suit/roguetown/armor/gambeson/heavy, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"gk" = ( +/obj/structure/roguerock, +/obj/structure/flora/roguegrass/water, +/turf/open/water/swamp, +/area/rogue/under/catacombs/dwarfoutpost) +"gl" = ( +/turf/closed/mineral/rogue/bedrock, +/area/rogue) +"gP" = ( +/obj/structure/bars/grille, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/water/swamp, +/area/rogue/under/catacombs/dwarfoutpost) +"hi" = ( +/obj/structure/flora/roguegrass/water/reeds, +/obj/item/rogueweapon/pick/paxe/neu, +/turf/open/water/swamp, +/area/rogue/under/catacombs/dwarfoutpost) +"hz" = ( +/obj/structure/rack/rogue, +/obj/item/rogueweapon/pick/paxe/neu, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"ik" = ( +/obj/structure/kneestingers, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"im" = ( +/obj/structure/table/wood/reinf_long{ + dir = 4 + }, +/obj/item/reagent_containers/glass/cup/wooden, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"iB" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/under/catacombs/dwarfoutpost) +"iS" = ( +/obj/structure/mineral_door/wood/donjon/stone, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"jt" = ( +/obj/structure/fluff/walldeco/stone, +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/under/catacombs/dwarfoutpost) +"lb" = ( +/obj/effect/decal/shadow_floor{ + dir = 6 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"lL" = ( +/obj/item/natural/rock, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"mI" = ( +/obj/structure/bars/pipe{ + dir = 9; + icon_state = "pipe" + }, +/turf/closed/mineral/rogue, +/area/rogue/under/catacombs/dwarfoutpost) +"nQ" = ( +/obj/structure/fluff/psycross/crafted/shrine/malum, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"oe" = ( +/obj/item/ingot/steel, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost) +"oi" = ( +/obj/structure/table/wood/reinforced_alter, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"ou" = ( +/obj/effect/decal/shadow_floor{ + dir = 5 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"ov" = ( +/obj/structure/mineral_door/wood/donjon/stone, +/obj/item/restraints/legcuffs/beartrap/armed/camouflage, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/catacombs/dwarfoutpost) +"oD" = ( +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/closed/wall/mineral/rogue/stone/window/moss, +/area/rogue/under/catacombs/dwarfoutpost) +"oX" = ( +/obj/structure/flora/rock/pile, +/obj/effect/decal/shadow_floor{ + dir = 9 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"qs" = ( +/obj/item/ingot/steel, +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost) +"qx" = ( +/obj/item/natural/stone, +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"qz" = ( +/obj/structure/stairs/stone{ + dir = 1; + icon_state = "stonestairs" + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/catacombs/dwarfoutpost) +"qW" = ( +/obj/item/roguebin/water/gross, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/catacombs/dwarfoutpost) +"rb" = ( +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/open/water/swamp, +/area/rogue/under/catacombs/dwarfoutpost) +"sn" = ( +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/under/catacombs/dwarfoutpost) +"tq" = ( +/turf/closed/wall/mineral/rogue/decostone/cand, +/area/rogue/under/catacombs/dwarfoutpost) +"tz" = ( +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/catacombs/dwarfoutpost) +"tI" = ( +/obj/item/reagent_containers/glass/bottle/rogue/beer/voddena, +/obj/item/clothing/cloak/cape/silk/random, +/obj/structure/closet/crate/roguecloset/lord, +/obj/item/clothing/suit/roguetown/armor/chainmail/hauberk, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/catacombs/dwarfoutpost) +"tX" = ( +/obj/effect/decal/remains/human/old{ + name = "dwarf remains"; + plane = -3 + }, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/bed/rogue/wool, +/obj/structure/fluff/walldeco/stone{ + pixel_x = 0; + pixel_y = 32 + }, +/obj/item/clothing/head/roguetown/crown/serpcrown/surplus{ + pixel_x = 9; + pixel_y = 6 + }, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/catacombs/dwarfoutpost) +"ul" = ( +/obj/structure/rack/rogue, +/obj/item/clothing/head/roguetown/helmet/leather/minershelm, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"uu" = ( +/obj/item/natural/rock, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost) +"uN" = ( +/obj/structure/table/wood/reinf_long{ + dir = 8 + }, +/obj/item/natural/stone, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"uU" = ( +/obj/structure/kneestingers, +/obj/structure/fluff/walldeco/stone{ + pixel_x = 0; + pixel_y = 32 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"uW" = ( +/obj/effect/decal/cleanable/dirt/cobweb, +/obj/item/rogueore/iron, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"vf" = ( +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/under/catacombs/dwarfoutpost) +"vl" = ( +/turf/closed/wall/mineral/rogue/stone/window/moss, +/area/rogue/under/catacombs/dwarfoutpost) +"vo" = ( +/obj/effect/decal/cleanable/dirt/cobweb, +/obj/item/chair/stool/bar/rogue, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"vI" = ( +/obj/effect/decal/cleanable/dirt/cobweb, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"wG" = ( +/obj/effect/decal/cleanable/dirt/cobweb, +/obj/structure/closet/crate/chest/old_crate, +/obj/effect/spawner/roguemap/loot/jewelry, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"xL" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/metal, +/area/rogue/under/catacombs/dwarfoutpost) +"yc" = ( +/obj/item/natural/stone, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost) +"yo" = ( +/obj/structure/flora/roguegrass/water/reeds, +/turf/open/water/swamp/deep, +/area/rogue/under/catacombs/dwarfoutpost) +"yp" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/catacombs/dwarfoutpost) +"yN" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/flashlight/flare/torch/lantern, +/obj/item/rogueweapon/mace/goden/steel/warhammer, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/catacombs/dwarfoutpost) +"zz" = ( +/obj/effect/decal/shadow_floor{ + dir = 10 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"Ap" = ( +/obj/item/chair/stool/bar/rogue, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"BR" = ( +/obj/effect/spawner/roguemap/maneater_danger, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/catacombs/dwarfoutpost) +"BW" = ( +/turf/open/water/swamp, +/area/rogue/under/catacombs/dwarfoutpost) +"Cu" = ( +/obj/structure/flora/rock/pile, +/obj/item/candle/yellow, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"CC" = ( +/obj/item/rogueweapon/tongs, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost) +"CV" = ( +/obj/machinery/light/rogue/smelter/great, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost) +"Dt" = ( +/turf/open/floor/rogue/metal, +/area/rogue/under/catacombs/dwarfoutpost) +"Ey" = ( +/obj/effect/spawner/roguemap/loot/random_gem, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost) +"ED" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"EJ" = ( +/obj/item/ingot/steel, +/turf/closed/mineral/rogue, +/area/rogue/under/catacombs/dwarfoutpost) +"Fg" = ( +/obj/item/natural/stone, +/obj/structure/kneestingers, +/turf/open/floor/rogue/dirt, +/area/rogue/under/catacombs/dwarfoutpost) +"GA" = ( +/obj/structure/bed/rogue/mediocre, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"GC" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/catacombs/dwarfoutpost) +"GS" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"Hh" = ( +/obj/effect/decal/shadow_floor, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost) +"Ig" = ( +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/under/catacombs/dwarfoutpost) +"IM" = ( +/turf/closed/mineral/rogue, +/area/rogue/under/catacombs/dwarfoutpost) +"Jw" = ( +/obj/structure/fluff/walldeco/stone, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/under/catacombs/dwarfoutpost) +"JL" = ( +/obj/item/reagent_containers/glass/cup/wooden, +/turf/open/floor/rogue/herringbone, +/area/rogue/under/catacombs/dwarfoutpost) +"JV" = ( +/obj/effect/decal/remains/human/old{ + name = "dwarf remains"; + plane = -3 + }, +/obj/structure/fluff/walldeco/stone{ + pixel_x = 0; + pixel_y = 32 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"KB" = ( +/obj/structure/flora/roguegrass/water/reeds, +/turf/open/floor/rogue/dirt, +/area/rogue/under/catacombs/dwarfoutpost) +"KV" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/rogueweapon/flail, +/obj/item/clothing/head/roguetown/helmet/leather/minershelm, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"Le" = ( +/obj/structure/rack/rogue, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"LK" = ( +/obj/effect/decal/remains/human/old{ + name = "dwarf remains"; + plane = -3 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"Mb" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/closed/mineral/rogue, +/area/rogue/under/catacombs/dwarfoutpost) +"MK" = ( +/obj/effect/spawner/roguemap/maneater_danger, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"NM" = ( +/obj/structure/fluff/walldeco/stone{ + pixel_x = 0; + pixel_y = 32 + }, +/turf/closed/mineral/rogue, +/area/rogue/under/catacombs/dwarfoutpost) +"Pj" = ( +/obj/item/natural/stone, +/turf/open/water/swamp, +/area/rogue/under/catacombs/dwarfoutpost) +"Pl" = ( +/obj/item/natural/stone, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"Pw" = ( +/obj/effect/decal/cleanable/dirt/cobweb, +/obj/structure/closet/crate/chest/old_crate, +/obj/item/rogueweapon/axe/steel, +/obj/item/clothing/head/roguetown/helmet/leather/minershelm, +/obj/item/clothing/head/roguetown/helmet/ironpot, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"PO" = ( +/obj/item/ingot/steel, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"Qe" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/rogueweapon/shield/tower/metal, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"Qs" = ( +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"QF" = ( +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost) +"QJ" = ( +/obj/structure/kneestingers, +/turf/open/floor/rogue/dirt, +/area/rogue/under/catacombs/dwarfoutpost) +"Rs" = ( +/obj/item/rogueweapon/shovel, +/obj/item/rogueore/coal, +/turf/open/floor/rogue/metal{ + icon_state = "plating2" + }, +/area/rogue/under/catacombs/dwarfoutpost) +"RR" = ( +/obj/structure/fluff/walldeco/stone{ + pixel_x = 0; + pixel_y = 32 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/under/catacombs/dwarfoutpost) +"SX" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/ingot/steel, +/obj/item/ingot/steel, +/obj/item/riddleofsteel, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"Th" = ( +/obj/structure/flora/roguegrass/water, +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/water/swamp, +/area/rogue/under/catacombs/dwarfoutpost) +"Tm" = ( +/turf/closed/wall/mineral/rogue/stone/moss, +/area/rogue/under/catacombs/dwarfoutpost) +"Tp" = ( +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/closed/mineral/rogue, +/area/rogue/under/catacombs/dwarfoutpost) +"Ub" = ( +/turf/open/floor/rogue/herringbone, +/area/rogue/under/catacombs/dwarfoutpost) +"Uj" = ( +/obj/structure/chair/stool/rogue, +/obj/effect/spawner/roguemap/maneater_danger, +/obj/effect/decal/remains/human/old{ + name = "dwarf remains"; + plane = -3 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"UA" = ( +/obj/effect/spawner/roguemap/maneater_danger, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"UU" = ( +/obj/effect/decal/remains/human, +/turf/closed/mineral/rogue, +/area/rogue/under/catacombs/dwarfoutpost) +"VR" = ( +/obj/effect/decal/shadow_floor{ + dir = 8 + }, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"VX" = ( +/turf/open/water/swamp, +/area/rogue) +"VZ" = ( +/obj/item/natural/rock, +/turf/open/floor/rogue/dirt, +/area/rogue/under/catacombs/dwarfoutpost) +"Wa" = ( +/obj/structure/bars/grille, +/obj/structure/flora/roguegrass/water, +/obj/effect/decal/shadow_floor{ + dir = 4 + }, +/turf/open/water/swamp, +/area/rogue/under/catacombs/dwarfoutpost) +"Xu" = ( +/obj/item/natural/rock, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"Xy" = ( +/obj/item/reagent_containers/glass/cup/wooden, +/obj/structure/fluff/walldeco/stone{ + pixel_x = 0; + pixel_y = 32 + }, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"Xz" = ( +/obj/structure/stairs/stone{ + dir = 4 + }, +/turf/open/floor/rogue/naturalstone, +/area/rogue/under/catacombs/dwarfoutpost) +"XT" = ( +/obj/structure/flora/roguegrass/water/reeds, +/turf/open/water/swamp, +/area/rogue/under/catacombs/dwarfoutpost) +"XX" = ( +/obj/effect/decal/remains/human, +/turf/closed/mineral/rogue, +/area/rogue) +"Ya" = ( +/obj/item/rogueweapon/pick/paxe/neu, +/obj/structure/flora/roguegrass/water, +/obj/effect/decal/remains/human/old{ + name = "dwarf remains"; + plane = -3 + }, +/turf/open/water/swamp, +/area/rogue/under/catacombs/dwarfoutpost) +"Yb" = ( +/obj/structure/kneestingers, +/turf/open/water/swamp, +/area/rogue/under/catacombs/dwarfoutpost) +"YV" = ( +/obj/item/rogueore/iron, +/turf/open/floor/rogue/concrete, +/area/rogue/under/catacombs/dwarfoutpost) +"Zv" = ( +/obj/structure/table/wood/reinf_long{ + dir = 8 + }, +/obj/effect/spawner/roguemap/loot/jewelry, +/turf/open/floor/rogue/hexstone, +/area/rogue/under/catacombs/dwarfoutpost) +"ZF" = ( +/obj/structure/bars/pipe{ + dir = 1; + icon_state = "pipe" + }, +/turf/closed/wall/mineral/rogue/stone, +/area/rogue/under/catacombs/dwarfoutpost) + +(1,1,1) = {" +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(2,1,1) = {" +gl +Tm +vf +vf +vf +vf +vf +vf +vf +vf +gl +gl +gl +gl +vf +vf +vf +vf +vf +vf +vf +Tm +vf +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(3,1,1) = {" +XX +vf +IM +IM +vf +wG +eB +UA +eB +iB +IM +IM +IM +UU +vl +ED +IM +IM +IM +hz +ul +hz +vf +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(4,1,1) = {" +gl +vf +IM +IM +IM +IM +GS +eB +eM +fV +ED +IM +IM +fV +fV +Pl +fV +fV +Xu +fV +Pl +fV +vf +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(5,1,1) = {" +gl +tq +Xu +IM +IM +IM +eM +iB +IM +fV +Pl +fV +MK +fV +Tm +UU +IM +IM +IM +IM +fV +IM +vf +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(6,1,1) = {" +gl +vf +fV +IM +IM +IM +IM +vl +vf +vf +vl +vf +IM +fV +vf +Tm +vf +IM +IM +vf +ED +vf +Tm +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(7,1,1) = {" +gl +vf +Le +ED +IM +qs +CC +QF +vf +tI +JL +yN +Tm +fV +vf +vo +dA +IM +vf +IM +Pl +fV +vf +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(8,1,1) = {" +gl +jt +SX +fV +IM +oe +CV +yc +vf +tX +BR +Ub +ov +fV +vf +Xy +uN +Uj +Tm +Pl +fV +KV +vf +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(9,1,1) = {" +gl +Tm +Le +PO +IM +Rs +EJ +Ey +vf +qW +GC +ck +vf +fV +tq +eB +im +Ap +eB +fV +fV +MK +vf +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(10,1,1) = {" +gl +vf +fV +fV +vf +Tm +vf +IM +IM +IM +vf +vf +IM +fV +IM +lL +eB +eB +LK +fV +fV +vf +vf +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(11,1,1) = {" +gl +tq +fV +fV +Tm +uW +iB +Pl +fV +IM +fV +fV +Pl +fV +tq +Ap +Zv +eB +eB +fV +fV +BW +vf +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(12,1,1) = {" +gl +Tm +BW +fV +fV +fV +fV +MK +fV +fV +Pl +IM +IM +IM +vf +JV +im +eB +vf +fV +fV +oi +vf +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(13,1,1) = {" +gl +gl +IM +IM +Tm +eE +iB +iB +fV +YV +iB +IM +vf +iS +vf +dA +Ap +eB +vf +fV +fV +oi +Tm +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(14,1,1) = {" +gl +gl +gl +vf +vf +vf +vf +vf +Tm +vf +vf +vf +tq +BW +IM +IM +IM +IM +vf +fV +fV +fV +Tm +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(15,1,1) = {" +gl +gl +gl +gl +gl +gl +gl +gl +vf +vf +vf +sn +Tm +Xz +Tm +mI +bi +vf +vf +uU +fV +Pl +Tm +vf +vf +vf +vf +vf +vf +vf +Tm +gl +gl +"} +(16,1,1) = {" +gl +gl +gl +gl +gl +gl +gl +gl +vf +IM +IM +Tp +IM +xL +IM +qx +IM +ED +IM +IM +ED +fV +vf +IM +fX +GA +vf +eB +Qe +eB +Tm +gl +gl +"} +(17,1,1) = {" +gl +gl +vf +vf +vf +gl +gl +gl +vf +IM +Tm +RR +gk +Dt +iB +BW +IM +IM +vl +IM +IM +fV +IM +IM +ik +eB +vf +eB +eB +eB +vf +gl +gl +"} +(18,1,1) = {" +gl +gl +vf +dB +vf +Tm +Tm +vf +vf +IM +BW +yp +IM +Dt +dk +tz +XT +Xu +vl +dY +IM +fV +ED +UA +eM +Cu +vf +eB +eB +GA +vf +gl +gl +"} +(19,1,1) = {" +gl +gl +vf +dB +tq +vI +gP +Mb +Tm +IM +BW +IM +oX +Dt +zz +VR +Th +VR +vf +vl +vf +vl +vf +vf +eB +IM +vf +Tm +eM +vf +vf +gl +gl +"} +(20,1,1) = {" +gl +gl +Jw +fV +qz +Hh +QF +QF +QF +uu +QF +QF +QF +nQ +Hh +QF +QF +QF +QF +qz +qz +dk +Pl +fV +fV +BW +iB +QJ +iB +IM +BW +VX +gl +"} +(21,1,1) = {" +gl +gl +vf +fV +qz +Hh +QF +QF +QF +QF +QF +QF +QF +Dt +Hh +QF +Yb +QF +QF +IM +qz +IM +fV +fV +fV +fV +fV +vf +iB +Tm +vf +VX +gl +"} +(22,1,1) = {" +gl +gl +vf +vf +tq +IM +Wa +Qs +vf +Qs +Ig +Qs +ou +Dt +lb +Qs +iB +IM +vl +vf +vf +vf +vf +vf +IM +lL +iB +eB +bS +Fg +co +Yb +gl +"} +(23,1,1) = {" +gl +gl +vf +vf +vf +Tm +Tm +Tm +vf +fV +Tm +NM +MK +Dt +Ya +BW +Tm +NM +vf +gl +gl +gl +vl +Pw +eB +QJ +bS +eB +UA +GS +VZ +Pj +gl +"} +(24,1,1) = {" +gl +gl +gl +gl +gl +gl +gl +gl +tq +fV +BW +hi +BW +BW +Pj +IM +IM +IM +vf +gl +gl +gl +vf +eB +eB +eB +Tm +LK +GA +IM +vf +bS +BW +"} +(25,1,1) = {" +gl +gl +gl +gl +gl +gl +gl +gl +vf +BW +BW +rb +IM +IM +vl +oD +vf +vf +vf +gl +gl +gl +vf +eB +GA +fq +Tm +Tm +Tm +vf +vl +Yb +BW +"} +(26,1,1) = {" +gl +gl +gl +gl +gl +gl +gl +gl +vf +vf +vl +ZF +vf +IM +gl +gl +gl +gl +gl +gl +gl +gl +vl +vf +vf +vf +vl +gl +gl +gl +gl +gl +KB +"} +(27,1,1) = {" +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +BW +"} +(28,1,1) = {" +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +yo +"} +(29,1,1) = {" +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} +(30,1,1) = {" +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +gl +"} diff --git a/_maps/map_files/templates/lil_bog_shack/bog_shack_small_1.dmm b/_maps/map_files/templates/lil_bog_shack/bog_shack_small_1.dmm index d29a3ce1ab..782e07ad61 100644 --- a/_maps/map_files/templates/lil_bog_shack/bog_shack_small_1.dmm +++ b/_maps/map_files/templates/lil_bog_shack/bog_shack_small_1.dmm @@ -18,7 +18,7 @@ /turf/open/floor/rogue/dirt, /area/rogue/outdoors/bog) "f" = ( -/obj/item/rogueweapon/spear/stone, +/obj/item/rogueweapon/polearm/spear/stone, /turf/open/floor/rogue/dirt, /area/rogue/outdoors/bog) "g" = ( diff --git a/_maps/map_files/templates/sk_dungeon/labyrinth_of_xylix.dmm b/_maps/map_files/templates/sk_dungeon/labyrinth_of_xylix.dmm deleted file mode 100644 index 58b0ccd655..0000000000 --- a/_maps/map_files/templates/sk_dungeon/labyrinth_of_xylix.dmm +++ /dev/null @@ -1,2028 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/caves) -"c" = ( -/obj/machinery/light/roguestreet/midlamp, -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/outdoors/caves) -"k" = ( -/turf/open/floor/rogue/sandstone, -/area/rogue/outdoors/caves) -"v" = ( -/obj/machinery/light/roguestreet, -/turf/open/floor/rogue/greenstone, -/area/rogue/outdoors/caves) -"w" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/spidercave) -"C" = ( -/turf/closed/wall/mineral/rogue/decostone/center, -/area/rogue/outdoors/caves) -"D" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/spidercave) -"E" = ( -/obj/effect/spawner/roguemap/xylixlabyrinth_frowny, -/turf/open/transparent/openspace, -/area/rogue/outdoors/caves) -"G" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/outdoors/caves) -"H" = ( -/obj/machinery/light/roguestreet{ - dir = 1 - }, -/turf/open/floor/rogue/greenstone, -/area/rogue/outdoors/caves) -"K" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/caves) -"R" = ( -/turf/open/floor/rogue/greenstone, -/area/rogue/outdoors/caves) -"S" = ( -/obj/effect/spawner/roguemap/xylixlabyrinth, -/turf/open/floor/rogue/sandstone, -/area/rogue/outdoors/caves) -"W" = ( -/obj/structure/fluff/statue/xylix, -/turf/open/floor/rogue/greenstone, -/area/rogue/outdoors/caves) - -(1,1,1) = {" -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -"} -(2,1,1) = {" -G -k -k -k -k -k -k -k -k -k -k -k -k -k -k -k -G -k -k -k -k -k -k -G -k -k -k -k -k -k -G -k -k -G -k -k -k -k -k -k -G -G -G -G -k -k -k -k -k -G -"} -(3,1,1) = {" -G -k -k -k -k -k -k -k -k -k -k -k -k -k -k -k -G -k -k -k -k -k -k -G -k -k -k -k -k -k -G -k -k -G -k -k -k -k -k -k -G -G -G -G -k -k -k -k -k -G -"} -(4,1,1) = {" -G -k -k -G -G -G -G -S -k -c -G -G -G -G -k -k -G -k -k -G -G -G -G -G -G -G -G -G -k -k -G -k -k -k -k -k -G -G -k -k -k -k -k -k -k -k -c -k -k -G -"} -(5,1,1) = {" -G -k -k -k -k -k -G -k -k -k -k -k -k -G -k -k -G -k -k -k -S -k -k -k -k -k -k -k -k -k -G -k -k -k -k -k -G -G -k -k -k -k -k -k -k -k -G -k -k -G -"} -(6,1,1) = {" -G -k -k -k -k -k -G -k -k -k -k -k -k -G -k -k -G -k -k -k -k -k -k -k -k -k -k -k -k -k -G -k -k -G -G -G -G -G -G -G -G -G -G -G -G -G -G -k -k -G -"} -(7,1,1) = {" -G -G -G -G -G -G -G -G -G -G -G -k -k -G -k -k -c -k -k -G -k -k -c -G -G -G -G -G -k -k -c -k -k -G -k -k -k -k -k -k -k -k -k -k -k -k -k -k -k -G -"} -(8,1,1) = {" -G -G -G -G -G -G -G -G -G -G -G -k -k -G -k -k -k -k -k -G -k -k -k -k -k -G -G -G -k -k -k -k -k -G -k -k -k -k -k -k -k -k -k -k -k -k -k -k -k -G -"} -(9,1,1) = {" -G -G -G -G -G -G -G -G -G -G -G -k -k -G -k -k -k -k -k -G -k -k -k -k -k -G -G -G -k -k -k -k -k -G -G -G -G -G -c -k -S -k -G -G -G -G -G -G -G -G -"} -(10,1,1) = {" -G -R -v -R -G -G -G -R -v -R -G -k -k -G -G -G -G -G -G -G -G -G -G -k -k -G -G -G -k -k -k -k -k -G -k -k -k -k -k -k -k -k -k -k -k -k -k -k -k -G -"} -(11,1,1) = {" -G -k -K -k -E -k -E -k -E -k -G -k -k -k -k -k -G -k -k -k -k -k -G -k -k -G -G -G -G -G -G -k -k -G -k -k -k -k -k -k -k -k -k -k -k -k -k -k -k -G -"} -(12,1,1) = {" -G -K -k -K -k -E -k -E -k -E -G -k -k -k -k -k -G -k -k -k -k -k -G -G -G -G -k -k -k -k -k -S -k -G -k -k -G -G -G -G -G -G -G -G -G -G -G -k -k -G -"} -(13,1,1) = {" -G -k -K -k -E -k -E -k -E -k -G -G -G -c -k -k -G -k -k -c -k -k -k -k -k -G -k -k -k -k -k -k -k -k -k -k -k -k -k -k -G -k -k -k -k -k -G -k -k -G -"} -(14,1,1) = {" -G -K -k -K -k -E -k -E -k -E -k -k -G -G -k -k -G -k -k -G -k -k -k -k -k -G -k -k -G -G -G -k -k -k -k -k -k -k -k -k -G -k -k -k -k -k -G -k -k -G -"} -(15,1,1) = {" -G -k -K -k -R -R -R -k -E -k -k -k -k -k -k -k -G -k -k -G -G -G -G -k -k -G -k -k -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -k -k -c -k -k -G -"} -(16,1,1) = {" -G -K -k -K -W -R -R -E -k -E -k -k -k -k -k -k -G -k -k -G -k -k -G -k -k -G -k -k -G -G -G -G -k -k -k -k -k -k -k -k -k -k -k -G -k -k -k -k -k -G -"} -(17,1,1) = {" -G -k -K -k -R -R -R -k -E -k -k -k -G -G -G -G -G -k -k -G -k -k -G -k -k -G -k -k -k -k -k -G -k -k -k -k -k -k -k -k -k -k -k -G -k -k -k -k -k -G -"} -(18,1,1) = {" -G -K -k -K -k -E -k -E -k -E -G -G -G -G -G -G -G -k -k -G -k -k -G -k -k -G -k -k -k -k -k -c -k -k -G -G -G -G -G -G -G -k -k -G -G -G -G -G -G -G -"} -(19,1,1) = {" -G -k -K -k -E -k -E -k -E -k -G -G -G -G -k -k -k -k -k -G -k -k -k -S -k -k -k -k -G -k -k -k -k -k -k -k -G -k -k -k -a -k -k -k -k -k -G -k -k -G -"} -(20,1,1) = {" -G -K -k -K -k -E -k -E -k -E -G -G -G -G -k -k -k -k -k -G -k -k -k -k -k -k -k -k -G -k -k -k -k -k -k -k -G -k -k -k -a -k -k -k -k -k -G -k -k -G -"} -(21,1,1) = {" -G -k -K -k -E -k -E -k -E -k -G -G -G -G -k -k -c -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -k -k -G -k -k -c -G -k -k -G -k -k -c -k -k -G -"} -(22,1,1) = {" -G -R -H -R -G -G -G -R -H -R -G -G -G -G -k -k -k -k -k -k -G -k -k -k -k -k -k -k -k -k -G -k -k -G -k -k -G -k -k -k -k -k -k -G -k -k -k -k -k -G -"} -(23,1,1) = {" -G -G -G -G -G -G -G -G -G -G -G -G -G -G -k -k -k -k -k -k -G -k -k -k -k -k -k -k -k -k -G -k -k -G -k -k -G -k -k -k -k -k -k -G -k -k -k -k -k -G -"} -(24,1,1) = {" -G -k -k -k -k -k -k -k -k -k -k -k -k -G -k -k -G -G -k -k -G -G -G -G -G -G -G -G -k -k -G -k -k -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -"} -(25,1,1) = {" -C -k -k -k -k -k -k -k -k -k -k -k -k -G -k -k -G -G -k -k -k -k -k -k -k -k -k -k -S -k -G -k -k -k -k -k -G -k -k -k -k -k -G -k -k -k -k -k -G -G -"} -(26,1,1) = {" -C -k -k -k -k -k -k -k -k -k -k -k -k -G -k -k -G -G -k -k -k -k -k -k -k -k -k -k -k -k -G -k -k -k -k -k -G -k -k -k -k -k -G -k -k -k -k -k -G -G -"} -(27,1,1) = {" -C -k -k -k -k -k -k -k -k -k -k -k -k -G -k -k -G -G -k -k -G -G -G -G -G -G -G -c -k -k -G -G -G -c -k -k -G -k -k -c -k -k -G -k -k -c -k -k -G -G -"} -(28,1,1) = {" -C -k -k -k -k -k -k -k -k -k -k -k -k -G -k -k -k -G -k -k -G -k -k -k -k -k -k -k -k -k -k -k -k -k -k -k -G -k -k -G -k -k -G -k -k -G -k -k -G -G -"} -(29,1,1) = {" -C -k -k -k -k -k -k -k -k -k -k -k -k -G -k -k -k -G -k -k -G -k -k -k -k -k -k -k -k -k -k -k -k -k -k -k -G -k -k -G -k -k -G -k -k -G -k -k -G -G -"} -(30,1,1) = {" -C -k -k -k -k -k -k -k -k -k -k -k -k -G -G -G -G -G -k -k -G -k -k -c -G -G -G -G -G -G -G -G -G -G -G -G -a -G -G -G -k -k -G -G -G -G -k -k -G -G -"} -(31,1,1) = {" -C -k -k -k -k -k -k -k -k -k -k -k -k -k -k -G -k -k -k -k -G -k -k -k -k -k -k -k -k -k -G -k -k -k -k -k -k -k -k -k -k -S -k -k -k -G -k -k -G -G -"} -(32,1,1) = {" -C -k -k -k -k -k -k -k -k -k -k -k -k -k -k -G -k -k -k -k -G -k -k -k -k -k -k -k -k -k -G -k -k -k -k -k -k -k -k -k -k -k -k -k -k -G -k -k -c -D -"} -(33,1,1) = {" -C -k -k -k -k -k -k -k -k -k -k -k -k -k -k -G -k -k -c -G -G -G -G -G -G -G -G -G -k -k -G -k -k -G -k -k -c -G -G -G -G -G -G -k -k -G -k -k -k -w -"} -(34,1,1) = {" -C -k -k -k -k -k -k -k -k -k -k -k -k -k -k -G -k -k -k -k -k -k -k -k -k -k -k -G -k -k -c -k -k -G -k -k -k -k -k -k -k -k -G -k -k -G -k -k -k -w -"} -(35,1,1) = {" -C -k -k -k -k -k -k -k -k -k -k -k -k -k -k -G -k -k -k -k -k -k -k -k -k -k -k -G -k -k -k -k -k -G -k -k -k -k -k -k -k -k -G -k -k -c -k -k -G -D -"} -(36,1,1) = {" -C -k -k -k -k -k -k -k -k -k -k -k -k -k -k -G -G -G -G -G -G -G -G -G -G -G -G -G -k -k -k -k -k -G -G -G -G -G -G -G -k -k -G -k -k -k -k -k -G -G -"} -(37,1,1) = {" -C -k -k -k -k -k -k -k -k -k -k -k -k -k -k -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -G -k -k -G -k -k -k -k -k -G -C -"} -(38,1,1) = {" -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -C -G -G -G -G -G -G -G -G -G -G -C -"} diff --git a/_maps/map_files/templates/stonehamlet/outlawcamp_1.dmm b/_maps/map_files/templates/stonehamlet/outlawcamp_1.dmm new file mode 100644 index 0000000000..ffd3f34232 --- /dev/null +++ b/_maps/map_files/templates/stonehamlet/outlawcamp_1.dmm @@ -0,0 +1,720 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aV" = ( +/obj/structure/table/wood/large/corner_alt{ + dir = 6 + }, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"cm" = ( +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"cr" = ( +/obj/item/chair/stool/bar/rogue, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"dc" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"fB" = ( +/obj/effect/spawner/roguemap/outlaw_maybe, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/outlaw) +"gE" = ( +/obj/structure/bed/rogue/shit, +/obj/effect/decal/cleanable/dirt/cobweb, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"gP" = ( +/obj/item/roguebin/water/gross, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"hw" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"hP" = ( +/obj/structure/roguetent/preopen, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/shelter/rtfield) +"il" = ( +/obj/item/storage/belt/rogue/leather/rope, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/outlaw) +"iD" = ( +/obj/structure/bed/rogue/shit, +/obj/item/rogue/instrument/drum, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"jq" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"kb" = ( +/obj/structure/toilet, +/obj/item/natural/poo, +/obj/effect/spawner/roguemap/outlaw_maybe, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"kz" = ( +/obj/item/reagent_containers/glass/bucket/wooden, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/outlaw) +"kQ" = ( +/obj/item/clothing/shoes/roguetown/shortboots, +/obj/effect/spawner/roguemap/outlaw_maybe, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"lZ" = ( +/obj/machinery/light/rogue/firebowl/standing, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"mK" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"or" = ( +/obj/structure/closet/dirthole/closed, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"pU" = ( +/obj/effect/decal/cleanable/blood/splatter, +/obj/effect/decal/cleanable/blood/gibs/down, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/outlaw) +"qa" = ( +/obj/structure/closet/dirthole/closed, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"rp" = ( +/obj/structure/well{ + icon_state = "well" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/rtfield/outlaw) +"sy" = ( +/obj/structure/bed/rogue/shit, +/obj/item/clothing/head/roguetown/fashionablehat, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"sM" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/outlaw) +"ta" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 10 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"tl" = ( +/obj/structure/closet/dirthole/closed, +/obj/structure/flora/roguegrass, +/obj/effect/sunlight, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"tV" = ( +/obj/structure/bed/rogue/shit, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"ue" = ( +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"uz" = ( +/obj/structure/bed/rogue/shit, +/obj/item/clothing/head/roguetown/helmet/leather/inquisitor, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"wv" = ( +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"wK" = ( +/obj/effect/decal/cleanable/blood/footprints, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"wW" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"xd" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"ya" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/outlaw) +"yv" = ( +/obj/structure/table/wood/large/corner_alt{ + dir = 5 + }, +/obj/item/reagent_containers/food/snacks/rogue/meat/mince/beef, +/obj/item/rogueweapon/knife/cleaver/combat, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"yW" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/outlaw) +"zf" = ( +/obj/effect/sunlight, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/outlaw) +"zg" = ( +/turf/closed/wall/mineral/rogue/wood, +/area/rogue/indoors/shelter/rtfield) +"zr" = ( +/turf/closed/wall/mineral/rogue/wood, +/area/rogue/outdoors/rtfield/outlaw) +"Am" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/outlaw) +"Ch" = ( +/obj/structure/bed/rogue/shit, +/obj/effect/decal/cleanable/dirt/cobweb{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"Cx" = ( +/obj/item/grown/log/tree/stake, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/outlaw) +"CS" = ( +/obj/structure/flora/roguetree/burnt, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"DF" = ( +/obj/structure/closet/dirthole/closed, +/obj/effect/decal/remains/xeno/larva{ + desc = "Truely, nothing is sacred."; + name = "child's remains" + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"EX" = ( +/obj/structure/closet/crate/roguecloset/inn/chest, +/obj/item/clothing/neck/roguetown/coif, +/obj/item/storage/belt/rogue/pouch/coins/poor, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak/fried, +/obj/item/clothing/suit/roguetown/shirt/undershirt/priest, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak/fried, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"Ft" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/storage/belt/rogue/pouch/coins/poor, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak/fried, +/obj/item/reagent_containers/powder/salt, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"Hf" = ( +/obj/item/rope, +/obj/item/rope, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"HJ" = ( +/obj/item/chair/stool/bar/rogue, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/outlaw) +"Mh" = ( +/obj/item/storage/backpack/rogue/satchel/heartfelt, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"NB" = ( +/obj/machinery/light/rogue/firebowl/stump, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"NK" = ( +/obj/effect/spawner/roguemap/outlaw_maybe, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"NN" = ( +/obj/effect/decal/cleanable/blood/gibs/limb, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/outlaw) +"Op" = ( +/obj/effect/decal/cleanable/blood/gibs/core, +/obj/item/clothing/head/roguetown/cookhat, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"ON" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/clothing/suit/roguetown/armor/gambeson, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak/fried, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak/fried, +/obj/item/reagent_containers/powder/salt, +/obj/item/reagent_containers/powder/spice, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"Ry" = ( +/obj/structure/roguetent/preopen, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/shelter/rtfield) +"RK" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/blood/gibs/down, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"Ta" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/outlaw) +"Um" = ( +/obj/effect/decal/cleanable/blood/footprints, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/splatter, +/obj/effect/spawner/roguemap/outlaw_maybe, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"VP" = ( +/turf/closed/wall/mineral/rogue/tent, +/area/rogue/indoors/shelter/rtfield) +"We" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/clothing/shoes/roguetown/boots/leather, +/obj/item/clothing/shoes/roguetown/shortboots, +/obj/item/clothing/shoes/roguetown/ridingboots, +/obj/item/clothing/shoes/roguetown/boots, +/obj/effect/spawner/roguemap/loot/random_gem, +/obj/item/storage/backpack/rogue/backpack, +/obj/item/storage/belt/rogue/pouch/coins/mid, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"Wj" = ( +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/outdoors/rtfield/outlaw) +"WU" = ( +/obj/structure/roguetent, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/shelter/rtfield) +"XA" = ( +/obj/item/reagent_containers/glass/bottle/rogue, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"XE" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/outlaw) +"Zd" = ( +/obj/machinery/light/rogue/campfire/densefire, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/outlaw) + +(1,1,1) = {" +xd +xd +xd +xd +xd +wv +xd +xd +zg +VP +VP +zg +wv +zg +VP +VP +zg +xd +xd +"} +(2,1,1) = {" +xd +xd +xd +wv +xd +xd +xd +or +VP +yv +aV +VP +wv +VP +gE +tV +VP +wv +xd +"} +(3,1,1) = {" +xd +wv +xd +xd +qa +or +xd +or +VP +Op +hw +VP +wv +VP +mK +mK +VP +wv +xd +"} +(4,1,1) = {" +xd +xd +xd +xd +wW +wv +xd +or +VP +Um +wK +Ry +ta +VP +Ft +mK +VP +wv +xd +"} +(5,1,1) = {" +zg +VP +zg +dc +tl +qa +DF +or +VP +ue +RK +VP +ya +zg +VP +WU +zg +wv +xd +"} +(6,1,1) = {" +VP +kb +WU +yW +yW +Am +sM +or +zg +VP +VP +zg +cm +jq +gP +Am +yW +wv +wv +"} +(7,1,1) = {" +zg +VP +zg +qa +or +qa +wv +Am +Am +yW +wv +yW +Am +fB +yW +yW +yW +Am +wv +"} +(8,1,1) = {" +xd +xd +xd +dc +xd +zg +VP +VP +zr +wv +wv +CS +Ta +yW +Zd +Am +Cx +yW +yW +"} +(9,1,1) = {" +xd +wv +xd +xd +zg +VP +uz +We +VP +zg +wv +il +HJ +NN +Am +yW +pU +Am +Am +"} +(10,1,1) = {" +xd +wv +xd +xd +VP +sy +kQ +mK +mK +hP +yW +wv +wv +zf +Am +XE +Am +wv +Am +"} +(11,1,1) = {" +xd +wv +wv +xd +VP +iD +mK +mK +Mh +VP +NB +Am +kz +wv +Am +Am +Am +yW +Am +"} +(12,1,1) = {" +xd +wv +xd +xd +zg +VP +lZ +NK +VP +zg +wv +wv +rp +wv +Zd +yW +wv +yW +wv +"} +(13,1,1) = {" +xd +xd +wv +xd +xd +zg +VP +VP +zg +or +wv +wv +Am +yW +yW +yW +yW +yW +wv +"} +(14,1,1) = {" +wv +xd +xd +xd +xd +xd +xd +xd +or +or +wv +yW +wv +wv +yW +Am +wv +wv +wv +"} +(15,1,1) = {" +xd +wv +xd +xd +xd +xd +xd +zg +VP +VP +WU +zg +wv +zg +VP +VP +hP +zg +wv +"} +(16,1,1) = {" +xd +xd +wv +xd +wv +xd +xd +VP +Hf +mK +mK +VP +wv +VP +NK +EX +mK +VP +wv +"} +(17,1,1) = {" +xd +xd +xd +wv +xd +wv +xd +VP +Ch +ON +tV +VP +or +VP +cr +mK +XA +VP +wv +"} +(18,1,1) = {" +wv +xd +xd +wv +xd +xd +xd +zg +VP +VP +VP +zg +xd +VP +tV +tV +tV +VP +Wj +"} +(19,1,1) = {" +xd +xd +xd +wv +wv +xd +xd +xd +xd +xd +xd +xd +xd +zg +VP +VP +VP +zg +xd +"} diff --git a/_maps/map_files/templates/stonehamlet/outlawcamp_2.dmm b/_maps/map_files/templates/stonehamlet/outlawcamp_2.dmm new file mode 100644 index 0000000000..804d84c9f4 --- /dev/null +++ b/_maps/map_files/templates/stonehamlet/outlawcamp_2.dmm @@ -0,0 +1,596 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aV" = ( +/obj/structure/table/wood/large/corner_alt{ + dir = 6 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"cm" = ( +/obj/machinery/light/rogue/torchholder/c, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"cr" = ( +/obj/item/chair/stool/bar/rogue, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"dc" = ( +/obj/effect/spawner/roguemap/tree, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"fB" = ( +/obj/item/natural/fur/gote, +/obj/item/natural/fur/cabbit, +/obj/item/natural/fur/cabbit, +/obj/item/natural/fur/volf, +/obj/structure/closet/crate/chest/old_crate, +/obj/item/natural/bundle/fibers/full, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"gP" = ( +/obj/item/roguebin/water/gross, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"hP" = ( +/obj/structure/roguetent/preopen, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/shelter/rtfield) +"kb" = ( +/obj/structure/toilet, +/obj/item/natural/poo, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"kz" = ( +/obj/item/reagent_containers/glass/bucket/wooden/alter, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/outlaw) +"lZ" = ( +/obj/machinery/light/rogue/firebowl/standing, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"mK" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"or" = ( +/obj/structure/closet/dirthole/closed, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"rp" = ( +/obj/structure/well{ + icon_state = "well" + }, +/turf/open/transparent/openspace, +/area/rogue/outdoors/rtfield/outlaw) +"sM" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/outlaw) +"ta" = ( +/obj/effect/spawner/roguemap/hostile_beggar_danger, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"tV" = ( +/obj/structure/bed/rogue/sleepingbag, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"ue" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/reagent_containers/powder/salt, +/obj/item/reagent_containers/powder/salt, +/obj/item/reagent_containers/powder/salt, +/obj/item/reagent_containers/powder/salt, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/obj/item/reagent_containers/food/snacks/rogue/meat/steak, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"uz" = ( +/obj/item/storage/meatbag, +/obj/structure/rack/rogue, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"wv" = ( +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"wW" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"xd" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"yv" = ( +/obj/structure/table/wood/large/corner_alt{ + dir = 5 + }, +/obj/item/rogueweapon/knife/cleaver/combat, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"yW" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/outlaw) +"zg" = ( +/turf/closed/wall/mineral/rogue/wood, +/area/rogue/indoors/shelter/rtfield) +"Am" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/outlaw) +"Ch" = ( +/obj/structure/bed/rogue/sleepingbag, +/obj/effect/decal/cleanable/dirt/cobweb{ + dir = 1 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"CS" = ( +/obj/structure/flora/roguetree/burnt, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"Ft" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/natural/hide, +/obj/item/natural/hide, +/obj/item/natural/hide, +/obj/item/natural/hide, +/obj/item/natural/hide, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"MS" = ( +/obj/effect/sunlight, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/outlaw) +"NB" = ( +/obj/machinery/light/rogue/firebowl/stump, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"NK" = ( +/obj/item/storage/backpack/rogue/satchel/heartfelt, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"ON" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/reagent_containers/food/snacks/rogue/meat/salami, +/obj/item/reagent_containers/food/snacks/rogue/meat/salami, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"Ry" = ( +/obj/structure/roguetent/preopen, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/shelter/rtfield) +"Ta" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/structure/fluff/dryingrack, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/outlaw) +"VF" = ( +/obj/effect/spawner/roguemap/volf_maybe, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/outlaw) +"VP" = ( +/turf/closed/wall/mineral/rogue/tent, +/area/rogue/indoors/shelter/rtfield) +"We" = ( +/obj/structure/closet/crate/chest/old_crate, +/obj/item/storage/backpack/rogue/backpack, +/obj/item/quiver/arrows, +/obj/item/gun/ballistic/revolver/grenadelauncher/bow/recurve, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"Wj" = ( +/turf/closed/wall/mineral/rogue/decowood, +/area/rogue/outdoors/rtfield/outlaw) +"WU" = ( +/obj/structure/roguetent, +/turf/open/floor/rogue/dirt, +/area/rogue/indoors/shelter/rtfield) +"XA" = ( +/obj/item/reagent_containers/glass/bottle/rogue, +/turf/open/floor/rogue/dirt/road, +/area/rogue/indoors/shelter/rtfield) +"Zd" = ( +/obj/machinery/light/rogue/campfire/densefire, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/outlaw) + +(1,1,1) = {" +xd +xd +xd +xd +xd +wv +xd +xd +zg +VP +VP +zg +wv +zg +VP +VP +zg +xd +xd +"} +(2,1,1) = {" +xd +xd +xd +wv +xd +xd +xd +wv +VP +yv +aV +VP +wv +VP +tV +mK +VP +wv +xd +"} +(3,1,1) = {" +xd +wv +xd +xd +wv +wv +xd +wv +VP +mK +mK +VP +wv +VP +mK +mK +VP +wv +xd +"} +(4,1,1) = {" +xd +xd +xd +xd +wW +wv +xd +wv +VP +mK +mK +Ry +wv +VP +Ft +mK +VP +wv +xd +"} +(5,1,1) = {" +zg +VP +zg +dc +wv +wv +wv +wv +VP +ue +mK +VP +Am +zg +VP +WU +zg +wv +xd +"} +(6,1,1) = {" +VP +kb +WU +yW +yW +MS +sM +wv +zg +VP +VP +zg +cm +wv +gP +Am +yW +wv +wv +"} +(7,1,1) = {" +zg +VP +zg +wv +wv +wv +wv +Am +Am +yW +wv +yW +Am +Am +yW +yW +yW +Am +wv +"} +(8,1,1) = {" +xd +xd +xd +dc +xd +zg +VP +VP +zg +wv +wv +CS +Ta +yW +Zd +Am +Am +yW +yW +"} +(9,1,1) = {" +xd +wv +xd +xd +zg +VP +uz +We +VP +zg +wv +Am +yW +Am +Am +yW +Am +Am +Am +"} +(10,1,1) = {" +xd +wv +xd +xd +VP +tV +mK +mK +mK +hP +yW +wv +wv +Am +Am +MS +Am +wv +Am +"} +(11,1,1) = {" +xd +wv +wv +xd +VP +ta +mK +mK +mK +VP +NB +Am +kz +wv +Am +Am +Am +yW +Am +"} +(12,1,1) = {" +xd +wv +xd +xd +zg +VP +lZ +NK +VP +zg +wv +wv +rp +wv +Zd +yW +wv +yW +wv +"} +(13,1,1) = {" +xd +xd +wv +xd +xd +zg +VP +VP +zg +wv +wv +wv +Am +yW +yW +yW +yW +yW +wv +"} +(14,1,1) = {" +wv +xd +xd +xd +xd +xd +xd +xd +wv +wv +wv +yW +wv +wv +yW +Am +wv +wv +wv +"} +(15,1,1) = {" +xd +wv +xd +xd +xd +xd +xd +zg +VP +VP +WU +zg +wv +zg +VP +VP +hP +zg +wv +"} +(16,1,1) = {" +xd +xd +wv +xd +wv +xd +xd +VP +mK +mK +mK +VP +wv +VP +fB +mK +mK +VP +wv +"} +(17,1,1) = {" +xd +xd +xd +wv +xd +wv +xd +VP +Ch +ON +mK +VP +or +VP +cr +mK +XA +VP +VF +"} +(18,1,1) = {" +wv +xd +xd +wv +xd +xd +xd +zg +VP +VP +VP +zg +xd +VP +tV +mK +tV +VP +Wj +"} +(19,1,1) = {" +xd +xd +xd +wv +wv +xd +xd +xd +xd +xd +xd +xd +xd +zg +VP +VP +VP +zg +xd +"} diff --git a/_maps/map_files/templates/stonehamlet/roadblock_1.dmm b/_maps/map_files/templates/stonehamlet/roadblock_1.dmm new file mode 100644 index 0000000000..6375fceebd --- /dev/null +++ b/_maps/map_files/templates/stonehamlet/roadblock_1.dmm @@ -0,0 +1,206 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"b" = ( +/obj/structure/flora/roguegrass, +/obj/structure/roguerock, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"d" = ( +/obj/structure/chair/bench/ancientlog, +/obj/structure/flora/roguegrass/thorn_bush, +/obj/item/restraints/legcuffs/beartrap/armed/camouflage, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"e" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"g" = ( +/obj/structure/chair/bench/ancientlog, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"h" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/obj/item/restraints/legcuffs/beartrap/armed, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"l" = ( +/obj/structure/table/wood/treestump{ + pixel_x = -7 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"o" = ( +/obj/structure/flora/newleaf/corner{ + dir = 6 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"r" = ( +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"t" = ( +/obj/structure/fluff/sellsign{ + desc = "The sign reads: RODE CLOSED GO LEFT" + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"u" = ( +/obj/structure/flora/newleaf/corner{ + dir = 5 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"v" = ( +/obj/structure/chair/bench/ancientlog, +/obj/structure/flora/newleaf/corner{ + dir = 9 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"w" = ( +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"x" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"y" = ( +/obj/structure/flora/newleaf/corner{ + dir = 9 + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"z" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"A" = ( +/obj/structure/chair/bench/ancientlog, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"B" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"D" = ( +/obj/structure/flora/newleaf/corner{ + dir = 5 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"H" = ( +/obj/structure/table/wood/treestump, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"M" = ( +/obj/structure/flora/newleaf/corner{ + dir = 5 + }, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"O" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"P" = ( +/obj/structure/flora/newleaf/corner{ + dir = 9 + }, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"T" = ( +/obj/structure/flora/newleaf/corner{ + dir = 10 + }, +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"U" = ( +/obj/machinery/light/rogue/campfire, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"V" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"W" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"Z" = ( +/obj/structure/flora/newleaf/corner{ + dir = 9 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) + +(1,1,1) = {" +V +W +x +H +U +e +a +"} +(2,1,1) = {" +V +W +Z +A +b +e +e +"} +(3,1,1) = {" +V +z +M +v +T +t +e +"} +(4,1,1) = {" +z +P +g +u +o +e +e +"} +(5,1,1) = {" +a +u +d +y +a +B +w +"} +(6,1,1) = {" +a +h +A +D +B +r +w +"} +(7,1,1) = {" +w +r +l +O +w +w +r +"} diff --git a/_maps/map_files/templates/stonehamlet/roadblock_2.dmm b/_maps/map_files/templates/stonehamlet/roadblock_2.dmm new file mode 100644 index 0000000000..0d7eaeab4d --- /dev/null +++ b/_maps/map_files/templates/stonehamlet/roadblock_2.dmm @@ -0,0 +1,129 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"b" = ( +/obj/structure/flora/roguegrass, +/obj/structure/roguerock, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"e" = ( +/turf/open/floor/rogue/dirt/road, +/area/rogue/outdoors/rtfield/hamlet) +"h" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/obj/item/restraints/legcuffs/beartrap/armed, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"l" = ( +/obj/structure/table/wood/treestump{ + pixel_x = -7 + }, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"r" = ( +/obj/structure/flora/roguetree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"w" = ( +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"x" = ( +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"z" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/dirt, +/area/rogue/outdoors/rtfield/hamlet) +"A" = ( +/obj/structure/chair/bench/ancientlog, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"B" = ( +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"H" = ( +/obj/structure/table/wood/treestump, +/obj/structure/flora/roguegrass, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"O" = ( +/obj/structure/flora/roguegrass, +/obj/structure/flora/roguegrass/thorn_bush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"V" = ( +/obj/effect/spawner/roguemap/tree, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) +"W" = ( +/obj/effect/spawner/roguemap/treeorbush, +/turf/open/floor/rogue/grass, +/area/rogue/outdoors/rtfield/hamlet) + +(1,1,1) = {" +V +W +x +H +w +e +a +"} +(2,1,1) = {" +V +W +w +B +b +e +e +"} +(3,1,1) = {" +V +z +a +e +e +e +e +"} +(4,1,1) = {" +z +e +e +e +e +e +e +"} +(5,1,1) = {" +e +e +a +w +w +B +w +"} +(6,1,1) = {" +e +h +A +w +B +r +w +"} +(7,1,1) = {" +w +r +l +O +w +w +r +"} diff --git a/_maps/roguehamlet/roguehamlet.dmm b/_maps/roguehamlet/roguehamlet.dmm deleted file mode 100644 index 3b36b7f9f5..0000000000 --- a/_maps/roguehamlet/roguehamlet.dmm +++ /dev/null @@ -1,148092 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aan" = ( -/obj/item/bait, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/shelter/bog) -"aat" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"aba" = ( -/obj/item/candle/yellow, -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/church/chapel) -"abk" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"abr" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"abA" = ( -/obj/structure/fluff/statue/gargoyle, -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue/indoors/town/magician) -"act" = ( -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"acw" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/outdoors/town/roofs) -"acA" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town) -"ada" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"aei" = ( -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern/saiga) -"aeu" = ( -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"aeH" = ( -/obj/structure/lever/wall{ - desc = "Let the games begin."; - dir = 8; - redstone_id = "sewer1" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"aeV" = ( -/obj/structure/closet/crate/chest/neu_iron, -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/stick, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"afj" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern/saiga) -"afT" = ( -/obj/structure/bars/pipe, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"afZ" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"agk" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/obj/item/restraints/legcuffs/beartrap/armed, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"agr" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); - first_time_text = "CATACOMBS" - }) -"agY" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"ahl" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"ahA" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 8; - icon_state = "donjondir"; - locked = 1; - lockid = "walls" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"ahG" = ( -/obj/structure/bars/pipe{ - dir = 8 - }, -/turf/closed/wall/mineral/rogue/stonebrick/reddish, -/area/rogue/indoors/town/bath/redhouse) -"ahR" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/dwarf) -"ahS" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"ahT" = ( -/obj/structure/closet/dirthole/closed, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"aif" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/indoors) -"aiB" = ( -/obj/structure/fermenting_barrel/water, -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"aiY" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 8 - }, -/area/rogue/indoors/town) -"ajp" = ( -/obj/structure/mirror/alt, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"ajF" = ( -/obj/structure/roguemachine/mail, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/tavern/saiga) -"ajU" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable_mid" - }, -/obj/item/clothing/mask/cigarette/pipe, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"akf" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/town/roofs) -"alG" = ( -/obj/structure/fluff/walldeco/chains, -/turf/open/floor/rogue/metal/barograte, -/area/rogue/indoors/town/cell) -"alL" = ( -/obj/structure/stairs/stone/reddish{ - dir = 1 - }, -/obj/machinery/light/rogue/wallfire/candle/weak/l, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath/redhouse) -"alS" = ( -/obj/structure/chair/bench/ancientlog, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"amb" = ( -/obj/structure/roguemachine/scomm, -/obj/structure/chair/wood, -/obj/effect/landmark/start/monk, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/church/chapel) -"amo" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - name = "manor" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"amZ" = ( -/obj/structure/fluff/dryingrack, -/obj/item/reagent_containers/food/snacks/rogue/raisins, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"anm" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/sunlight, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"anF" = ( -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/outdoors/town) -"aoO" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/outdoors/exposed/under/sewer) -"aqs" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"aqt" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"ary" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "mage"; - max_integrity = 100000 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"arD" = ( -/obj/structure/roguewindow/openclose{ - dir = 8; - icon_state = "woodwindowdir" - }, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/shop) -"arN" = ( -/obj/structure/fluff/statue/scare{ - desc = "Just a scarecrow..." - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"asj" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"asE" = ( -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/structure/closet/crate/chest/wicker, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"asF" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"asS" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/sewer) -"ate" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/mountains) -"atE" = ( -/obj/structure/roguewindow/openclose{ - dir = 8; - icon_state = "woodwindowdir" - }, -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/shelter/town/dwarf) -"aux" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 1 - }, -/area/rogue/indoors/town/bath/redhouse) -"auy" = ( -/turf/closed/wall/mineral/rogue/wood, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"auJ" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"avq" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 4 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"avs" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"avy" = ( -/obj/structure/fluff/wallclock/r, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"avV" = ( -/obj/structure/chair/bench/couch/redleft, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"avZ" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/beardling, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"awe" = ( -/obj/structure/chair/bench/church/r{ - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"awl" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"awv" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"awA" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/church) -"awD" = ( -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"awG" = ( -/obj/effect/spawner/roguemap/tree, -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"awU" = ( -/obj/structure/closet/crate/chest/wicker, -/obj/item/storage/belt/rogue/pouch/coins/poor, -/obj/item/rogueweapon/huntingknife/stoneknife, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"awX" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/spider, -/obj/item/rogueore/iron, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"axt" = ( -/obj/structure/fluff/wallclock, -/turf/open/floor/rogue/tile/checker_green, -/area/rogue/indoors/town/tavern/saiga) -"axy" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"axL" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - name = "CATACOMBS" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"ayF" = ( -/obj/structure/mineral_door/wood/red{ - locked = 1; - lockid = "woodsm" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"ayL" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ayX" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/clock/dense{ - pixel_y = 7 - }, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/magician) -"azg" = ( -/obj/structure/fluff/statue/knight, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"azz" = ( -/obj/structure/handcart{ - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"aAt" = ( -/obj/structure/flora/newtree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"aBw" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 1; - name = "Privy" - }, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town) -"aBS" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/watchman{ - dir = 8; - name = "Garrison Archer" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"aCw" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/item/paper/scroll/cargo, -/obj/structure/roguemachine/camera/right, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"aCN" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"aDr" = ( -/obj/structure/fluff/statue/gargoyle, -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town/magician) -"aDu" = ( -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"aDC" = ( -/obj/structure/fluff/railing/fence{ - dir = 8; - icon_state = "fence" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"aDZ" = ( -/obj/structure/mineral_door/bars, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/church) -"aEH" = ( -/obj/structure/chair/wood/rogue{ - dir = 8; - icon_state = "chair2" - }, -/obj/effect/landmark/start/woodsman{ - dir = 8 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"aEJ" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/shelter/bog) -"aEU" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable" - }, -/obj/item/natural/feather{ - pixel_x = 5 - }, -/obj/item/reagent_containers/glass/bottle/rogue/wine{ - pixel_x = -11; - pixel_y = 10 - }, -/obj/item/rogueweapon/huntingknife/idagger/steel, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"aFy" = ( -/turf/open/water/bath/pool{ - dir = 1 - }, -/area/rogue/indoors/town/bath/redhouse) -"aFF" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/effect/decal/cleanable/greenglow, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"aGl" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/blackmountain, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"aGu" = ( -/obj/structure/fluff/walldeco/customflag, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"aHg" = ( -/obj/structure/bars/grille, -/obj/structure/flora/roguegrass/water, -/turf/open/water/swamp, -/area/rogue/under/town/basement) -"aHx" = ( -/obj/structure/roguethrone/statues, -/obj/effect/landmark/start/lord, -/obj/structure/roguemachine/titan{ - pixel_y = 32 - }, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"aHB" = ( -/obj/structure/flora/roguegrass/water/reeds, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"aHC" = ( -/obj/structure/displaycase, -/obj/item/rogueweapon/sword/rapier/lord, -/turf/open/floor/carpet/purple, -/area/rogue/indoors/town/vault) -"aHN" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/outdoors/exposed/dwarf) -"aHT" = ( -/obj/structure/bars/pipe{ - dir = 1; - icon_state = "pipe" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"aIR" = ( -/obj/structure/chair/wood/rogue, -/obj/effect/landmark/start/steward, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"aJg" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/rock/pile, -/obj/item/natural/stone, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"aJh" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue) -"aJP" = ( -/obj/structure/fluff/railing/border, -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town/garrison) -"aJR" = ( -/obj/structure/flora/roguegrass, -/obj/structure/roguemachine/camera/right, -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"aJW" = ( -/obj/structure/stairs/stone, -/turf/closed, -/area/rogue/under/town/basement) -"aKs" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"aKZ" = ( -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/obj/effect/landmark/ambush, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"aLP" = ( -/obj/structure/chair/bench/ancientlog, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"aLX" = ( -/obj/structure/table/wood/plain_alt, -/obj/item/rogueweapon/hoe, -/obj/item/rogueweapon/thresher{ - pixel_x = -3 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"aMC" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "shop"; - name = "haulers quarters" - }, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/shop) -"aMR" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/outdoors/exposed/under/basement) -"aNo" = ( -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/outdoors/exposed/under/sewer) -"aNH" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/obj/structure/flora/roguegrass/bush/wall/tall, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"aNW" = ( -/obj/structure/stairs{ - dir = 4; - icon_state = "stairs" - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"aOi" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/church) -"aPD" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"aPT" = ( -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern) -"aQE" = ( -/obj/structure/rack/rogue, -/obj/item/flashlight/flare/torch/lantern, -/obj/item/flashlight/flare/torch/lantern, -/obj/item/flashlight/flare/torch/lantern, -/obj/item/flint, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"aQL" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"aQX" = ( -/obj/structure/table/wood/large/corner_new{ - dir = 10 - }, -/obj/item/rogueweapon/huntingknife{ - pixel_y = 9 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"aRI" = ( -/turf/closed/mineral/rogue, -/area/rogue/indoors/town/cell) -"aRU" = ( -/turf/closed/mineral/random/rogue/high, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"aSZ" = ( -/obj/item/natural/stone, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"aTf" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle, -/area/rogue/indoors/town) -"aTF" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/wolf, -/obj/effect/decal/cleanable/blood/gibs/core, -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"aTI" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"aTV" = ( -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"aTX" = ( -/turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/bog) -"aUb" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"aUj" = ( -/obj/structure/bed/rogue/wooldouble, -/obj/item/bedsheet/rogue/double_pelt, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"aUr" = ( -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/dwarf) -"aVE" = ( -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/indoors/town/vault) -"aVL" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/chicken, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town) -"aVN" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"aWR" = ( -/obj/structure/closet/crate/chest/neu{ - name = "salt chest" - }, -/obj/item/reagent_containers/powder/salt, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"aXe" = ( -/obj/effect/decal/cleanable/food/egg_smudge, -/turf/open/floor/rogue/tile/checker, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"aXu" = ( -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"aXE" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"aXI" = ( -/obj/machinery/light/rogue/smelter/great, -/mob/living/simple_animal/hostile/retaliate/rogue/spider/mutated, -/obj/structure/spider/stickyweb, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"aYc" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"aYz" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"aYX" = ( -/obj/structure/closet/crate/chest/neu, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"aZa" = ( -/obj/structure/fluff/walldeco/bath/wallrope{ - dir = 4; - pixel_y = 32 - }, -/obj/structure/closet/crate/roguecloset/lord, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/clothing/mask/cigarette/rollie/trippy, -/obj/structure/fluff/walldeco/bath/wallrope{ - dir = 8; - pixel_y = 32 - }, -/obj/machinery/light/rogue/wallfire/candle/lamp, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"aZm" = ( -/obj/structure/guillotine{ - step_x = 0 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town) -"aZU" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"baF" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"baL" = ( -/obj/structure/mineral_door/bars, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/under/town/sewer) -"baQ" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/obj/item/clothing/under/roguetown/chainlegs/iron, -/turf/open/transparent/openspace, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"bbn" = ( -/obj/structure/fluff/grindwheel, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"bby" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomii"; - name = "Castellan room" - }, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern/saiga) -"bbG" = ( -/obj/effect/landmark/start/prisoner{ - dir = 1 - }, -/obj/machinery/light/rogue/wallfire/candle{ - pixel_y = -23 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/cell) -"bbH" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"bbX" = ( -/obj/effect/decal/cleanable/blood/footprints, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bci" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"bcj" = ( -/obj/effect/spawner/roguemap/treeorbush, -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bcs" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/festus, -/obj/item/book/rogue/law, -/obj/item/book/rogue/tales3, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/magician) -"bct" = ( -/obj/machinery/light/rogue/lanternpost/fixed, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/dwarf) -"bcP" = ( -/obj/structure/flora/roguegrass, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bcX" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/suit/roguetown/armor/chainmail/iron, -/obj/item/clothing/suit/roguetown/armor/chainmail/iron, -/obj/item/clothing/suit/roguetown/armor/chainmail/iron, -/obj/item/clothing/wrists/roguetown/bracers/leather, -/obj/item/clothing/wrists/roguetown/bracers/leather, -/obj/item/clothing/wrists/roguetown/bracers/leather, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"bdj" = ( -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/obj/structure/closet/crate/chest/crate, -/obj/item/natural/bundle/stick, -/obj/item/natural/bundle/stick, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bdl" = ( -/obj/structure/bars/pipe{ - dir = 4; - icon_state = "pipe" - }, -/obj/structure/bars/pipe{ - dir = 8; - icon_state = "pipe" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"bdv" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/cell) -"bdM" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"beb" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"beY" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/church) -"bfK" = ( -/obj/structure/roguewindow/openclose{ - dir = 4; - icon_state = "woodwindowdir" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"bhc" = ( -/obj/effect/decal/cleanable/blood/gibs/up, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"bhp" = ( -/obj/effect/decal/remains/human, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bhD" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/old, -/obj/item/clothing/head/roguetown/crown/serpcrown/surplus, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"bhL" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"bhP" = ( -/obj/structure/closet/crate/roguecloset/lord, -/obj/item/reagent_containers/glass/cup, -/obj/item/reagent_containers/glass/cup, -/obj/item/reagent_containers/glass/cup, -/obj/item/reagent_containers/glass/cup, -/obj/item/reagent_containers/glass/cup, -/obj/item/reagent_containers/glass/cup, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bic" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"biW" = ( -/obj/structure/spider/eggcluster, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"bjG" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"bjI" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - lockid = "merchant"; - name = "SILVER" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"bjR" = ( -/turf/closed/wall/mineral/rogue/pipe{ - dir = 8; - icon_state = "iron_corner" - }, -/area/rogue/indoors/shelter/town/dwarf) -"bjY" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"bld" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bmc" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town/shop) -"bmA" = ( -/obj/item/chair/rogue, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bnl" = ( -/obj/item/book/rogue/necra, -/obj/item/book/rogue/godofdreamsandnightmares, -/obj/structure/bookcase, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"bnA" = ( -/obj/structure/stairs{ - dir = 4; - icon_state = "stairs" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"bnP" = ( -/obj/structure/table/wood/plain_alt, -/obj/structure/mirror/alt, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"boJ" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church) -"boQ" = ( -/obj/structure/handcart{ - dir = 4; - icon_state = "cart-empty" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"boT" = ( -/obj/structure/closet/dirthole/closed/loot, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"bpv" = ( -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue) -"bqf" = ( -/obj/item/grown/log/tree, -/obj/item/grown/log/tree, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"brh" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"brr" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/handcart{ - dir = 4; - icon_state = "cart-empty" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"brT" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"bsq" = ( -/obj/item/roguebin/water/gross, -/obj/structure/mirror/alt, -/obj/item/natural/cloth, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"bsB" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 8; - icon_state = "wooddir"; - locked = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/garrison) -"bsE" = ( -/obj/structure/flora/roguegrass, -/obj/item/storage/roguebag, -/obj/structure/fluff/railing/fence{ - dir = 8; - icon_state = "fence" - }, -/obj/item/storage/roguebag, -/obj/structure/closet/crate/chest/old_crate, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"bsU" = ( -/obj/structure/flora/roguegrass/maneater/real, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"btS" = ( -/obj/item/reagent_containers/food/snacks/crow, -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"bun" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/transparent/openspace, -/area/rogue/outdoors/mountains/decap) -"buu" = ( -/obj/structure/bars/grille, -/turf/open/transparent/openspace, -/area/rogue/indoors/town) -"buA" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"bvj" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"bvw" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 4; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"bvE" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"bwe" = ( -/obj/structure/curtain/bounty{ - color = "grey" - }, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"bwi" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 1 - }, -/area/rogue/indoors/town/church/chapel) -"bwy" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bwR" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 32 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bxU" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"byi" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/tales1, -/obj/item/book/rogue/tales3, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"byC" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/roguemachine/atm, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town) -"byF" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 1; - locked = 1; - lockid = "dungeon"; - name = "prisoners cell" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/cell) -"byJ" = ( -/obj/item/natural/rock, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bzx" = ( -/obj/structure/fluff/statue/small, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bAk" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable" - }, -/obj/item/natural/feather{ - pixel_x = 5 - }, -/obj/item/reagent_containers/glass/bottle/rogue/wine{ - pixel_x = -11; - pixel_y = 10 - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"bAA" = ( -/turf/open/floor/rogue/grass, -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bBd" = ( -/obj/structure/bed/rogue, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"bBj" = ( -/obj/structure/table/vtable, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bCf" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 8; - lockid = "tavern"; - name = "inn" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"bCh" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bCk" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"bCq" = ( -/obj/structure/closet/dirthole/closed, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"bCV" = ( -/obj/structure/closet/crate/drawer, -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bDY" = ( -/obj/item/roguemachine/mastermail, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"bFC" = ( -/obj/item/reagent_containers/glass/bottle/anxiety, -/obj/item/reagent_containers/glass/bottle/rogue/strongpoison, -/obj/structure/closet/crate/chest/neu_iron{ - locked = 1; - lockid = "mage"; - name = "stained old chest" - }, -/obj/item/reagent_containers/glass/bottle/rogue/poison, -/obj/item/reagent_containers/glass/bottle/venom, -/obj/item/reagent_containers/glass/bottle/spewium, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"bFJ" = ( -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bGd" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/mountains) -"bGr" = ( -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bGv" = ( -/obj/structure/fluff/nest, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bGy" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"bHA" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/town) -"bHN" = ( -/obj/structure/fluff/railing/fence{ - dir = 8; - icon_state = "fence" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"bHS" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"bIe" = ( -/obj/structure/fluff/wallclock, -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town/shop) -"bIK" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 4 - }, -/area/rogue/indoors/town/church/chapel) -"bJf" = ( -/obj/structure/bars{ - alpha = 190 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"bJi" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"bJm" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"bJv" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/obj/effect/landmark/start/mason{ - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"bKg" = ( -/obj/structure/fluff/railing/border{ - dir = 9; - icon_state = "border" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"bKX" = ( -/obj/structure/bars/pipe{ - dir = 1; - icon_state = "pipe" - }, -/mob/living/carbon/human/species/human/northern/bum{ - aggressive = 1; - name = "creep" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"bLE" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/manorgarri) -"bMJ" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"bMQ" = ( -/obj/structure/closet/crate/chest/neu, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/natural/feather, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bNi" = ( -/obj/item/candle/yellow/lit/infinite{ - pixel_y = -13 - }, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors/town/magician) -"bNE" = ( -/obj/structure/bars/pipe{ - dir = 4; - icon_state = "pipe" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/town/dwarf) -"bNF" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 8 - }, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bNO" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/outdoors/exposed/manorgarri) -"bOb" = ( -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/mountains) -"bOc" = ( -/obj/structure/fluff/clodpile, -/obj/item/natural/worms, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"bOg" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/mountains) -"bOo" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/outdoors/exposed/under/basement) -"bOq" = ( -/obj/structure/closet/dirthole/closed/loot, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"bOD" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"bOM" = ( -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"bOY" = ( -/obj/item/clothing/head/roguetown/cookhat, -/obj/structure/closet/crate/chest/crate, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bPb" = ( -/obj/effect/landmark/start/gravedigger{ - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"bPp" = ( -/obj/structure/rack/rogue, -/obj/item/keyring/dungeoneer, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/cell) -"bPq" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "nightmaiden"; - name = "bedroom" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"bPr" = ( -/obj/structure/bars/pipe{ - dir = 4; - icon_state = "pipe" - }, -/obj/structure/bars/pipe{ - dir = 8; - icon_state = "pipe" - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"bPA" = ( -/obj/structure/closet/crate/chest/old_crate, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"bQk" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/roguekey/manor, -/obj/item/roguekey/manor, -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"bQp" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"bQF" = ( -/obj/structure/fluff/railing/border{ - dir = 9; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"bQG" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/machinery/light/rogue/wallfire/candle, -/obj/item/keyring/guard, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"bQY" = ( -/obj/structure/fluff/walldeco/bath/seven, -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"bRB" = ( -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/clothing/cloak/raincloak/red, -/obj/item/clothing/shoes/roguetown/ridingboots, -/obj/item/clothing/cloak/raincloak/furcloak/black, -/obj/item/storage/belt/rogue/pouch/coins/mid, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bRT" = ( -/obj/structure/roguewindow/openclose, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern/saiga) -"bSm" = ( -/obj/structure/closet/dirthole/closed/loot, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bSo" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/storage/belt/rogue/pouch/coins/rich, -/obj/item/clothing/shoes/roguetown/boots/leather, -/obj/item/clothing/shoes/roguetown/shortboots, -/obj/item/clothing/shoes/roguetown/ridingboots, -/obj/item/clothing/shoes/roguetown/boots, -/obj/item/roguegem, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"bSK" = ( -/obj/structure/fluff/railing/wood{ - dir = 4; - icon_state = "woodrailing" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/church) -"bTg" = ( -/obj/effect/spawner/roguemap/sewerencounter, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"bTt" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - lockid = "manor"; - name = "armory" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"bTC" = ( -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bTD" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 1; - icon_state = "endwooddark" - }, -/area/rogue/indoors/town/shop) -"bTN" = ( -/turf/open/water/river, -/area/rogue/outdoors/river) -"bUh" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable" - }, -/obj/item/rogueweapon/huntingknife/cleaver, -/turf/open/floor/rogue/tile/checker, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"bUr" = ( -/obj/structure/closet/crate/chest/neu, -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town) -"bUx" = ( -/obj/item/trash/applecore, -/obj/item/neuFarm/seed/apple, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"bVh" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bVB" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/suit/roguetown/shirt/dress/gen/blue, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"bVR" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"bWe" = ( -/obj/structure/fermenting_barrel/random/beer, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"bWp" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"bWx" = ( -/obj/machinery/light/roguestreet/midlamp{ - plane = -1 - }, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"bWE" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"bWG" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/mole, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/mountains) -"bWO" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 8; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bXs" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bXD" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"bXH" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/church) -"bXK" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/shelter/bog) -"bXT" = ( -/obj/structure/table/wood/plain_alt, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"bXV" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors) -"bYg" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); - first_time_text = "CATACOMBS" - }) -"bYh" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot, -/obj/item/reagent_containers/glass/bottle/rogue/poison, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot, -/obj/item/reagent_containers/glass/bottle/rogue/manapot, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"bYY" = ( -/turf/closed/mineral/rogue/salt, -/area/rogue/outdoors/mountains) -"bZQ" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"bZV" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"caf" = ( -/obj/machinery/light/rogue/wallfire/candle/blue, -/obj/structure/fluff/walldeco/med5{ - pixel_x = 32 - }, -/obj/structure/roguemachine/vendor/centcom, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"caF" = ( -/obj/structure/fermenting_barrel, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"caY" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/cobble, -/area/rogue) -"cce" = ( -/obj/structure/stairs{ - dir = 8; - icon_state = "stairs" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"ccp" = ( -/obj/structure/flora/roguegrass/water, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ccI" = ( -/obj/structure/table/wood/reinf_long, -/obj/item/paper/scroll, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"ccN" = ( -/obj/effect/landmark/start/jester{ - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"cdd" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/adventurer, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"ced" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/cell) -"cey" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/machinery/light/rogue/torchholder{ - pixel_y = -32 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ceG" = ( -/obj/item/storage/belt/rogue/pouch/coins/mid, -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"ceL" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/dwarf) -"ceT" = ( -/obj/machinery/light/rogue/wallfire/candle/weak/r, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern/saiga) -"cfh" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"cfr" = ( -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/manorgarri) -"cfM" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"cgo" = ( -/obj/structure/table/wood/plain_alt, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/under/town/basement) -"cgH" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/manorgarri) -"che" = ( -/obj/structure/stairs/stone{ - dir = 1 - }, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"chx" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"cio" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/statue/pillar, -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"ciJ" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"ciM" = ( -/obj/structure/roguerock, -/obj/structure/flora/roguegrass/water, -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"cjc" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/remains/wolf, -/obj/structure/fluff/walldeco/chains, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"cjj" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"cjz" = ( -/obj/structure/closet/dirthole/closed, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"cjO" = ( -/obj/structure/fluff/railing/fence{ - dir = 8; - icon_state = "fence" - }, -/obj/structure/flora/roguegrass, -/obj/item/roguebin, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"cke" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"cli" = ( -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/town/dwarf) -"clF" = ( -/turf/closed/wall/shroud, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"cmB" = ( -/obj/structure/closet/dirthole/closed, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"cmQ" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "tablewood2" - }, -/obj/item/natural/cloth, -/obj/item/needle/thorn, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"cmZ" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/ingot/iron, -/obj/item/ingot/iron, -/obj/item/ingot/iron, -/obj/item/ingot/copper, -/obj/item/ingot/copper, -/obj/item/ingot/copper, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"cnv" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"cnF" = ( -/obj/structure/table/wood/large/corner_new, -/obj/item/storage/belt/rogue/leather, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"cnQ" = ( -/obj/structure/ladder/earth, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"cpa" = ( -/obj/effect/decal/cobbleedge, -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"cpC" = ( -/obj/effect/decal/cleanable/blood/gibs/up, -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"cqj" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/town/caverogue{ - first_time_text = "Abandoned Mine" - }) -"cqo" = ( -/obj/structure/closet/crate/chest/neu, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/bottle/rogue/beer/hagwoodbitter, -/obj/item/kitchen/rollingpin, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"cqW" = ( -/obj/structure/chair/wood/rogue{ - dir = 1; - icon_state = "chair2" - }, -/turf/open/floor/carpet/inn, -/area/rogue/under/town/basement) -"crh" = ( -/obj/structure/bars/grille, -/turf/open/transparent/openspace, -/area/rogue/outdoors/mountains) -"csF" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"csS" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/scribe, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"csZ" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/flashlight/flare/torch/lantern, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"cte" = ( -/obj/structure/roguemachine/balloon_pad, -/turf/open/floor/rogue/tile, -/area/rogue/outdoors/town/roofs) -"cuH" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"cuW" = ( -/turf/closed/mineral/random/rogue/med, -/area/rogue/under/cave) -"cvO" = ( -/obj/structure/flora/roguegrass, -/obj/item/roguebin, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"cwB" = ( -/obj/structure/bed/rogue/shit, -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"cwF" = ( -/obj/structure/stairs{ - dir = 1 - }, -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"cwI" = ( -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"cwL" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/structure/fluff/walldeco/innsign/saiga, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"cwV" = ( -/obj/item/natural/bundle/stick, -/obj/item/natural/stone, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"cxa" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/manorgarri) -"cxi" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"cxy" = ( -/turf/closed/mineral/random/rogue/high, -/area/rogue/under/cave) -"cxQ" = ( -/obj/structure/fermenting_barrel/random, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"cya" = ( -/obj/structure/bars/pipe{ - dir = 1 - }, -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"cyt" = ( -/obj/structure/fluff/statue/myth, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/town) -"czc" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"czh" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"czi" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"czR" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/tavern/saiga) -"czT" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town) -"cAR" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern/saiga) -"cBj" = ( -/obj/structure/fluff/statue/femalestatue{ - density = 1; - desc = "Some say its depicting Eora after a bath."; - icon_state = "12"; - pixel_y = 3 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath/redhouse) -"cBk" = ( -/obj/structure/chair/wood/rogue/chair_noble/red, -/obj/machinery/light/rogue/wallfire/candle{ - pixel_y = -64 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"cCc" = ( -/obj/structure/bed/rogue/wool, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/shelter/town/dwarf) -"cCk" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"cCn" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"cCq" = ( -/obj/structure/bars/pipe{ - dir = 5; - icon_state = "pipe" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"cCw" = ( -/obj/structure/fluff/walldeco/painting{ - pixel_y = 32 - }, -/obj/item/clothing/neck/roguetown/psycross/silver/astrata, -/obj/structure/closet/crate/chest/neu_fancy, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/indoors/town/vault) -"cCE" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/outdoors/exposed/under/basement) -"cCJ" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/fluff/walldeco/chains, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/cell) -"cCM" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"cDx" = ( -/obj/structure/table/wood/reinforced_alt{ - dir = 1 - }, -/obj/structure/bars/alt, -/obj/structure/fluff/walldeco/bath/wallrope, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"cDD" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/fluff/railing/wood{ - dir = 8; - icon_state = "woodrailing"; - pixel_y = -1 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"cEf" = ( -/obj/item/rogueweapon/sword/long/rider, -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town/vault) -"cEi" = ( -/turf/closed/wall/mineral/rogue/wood, -/area/rogue/outdoors/river) -"cEy" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"cFs" = ( -/obj/structure/closet/crate/chest/neu_iron, -/obj/item/reagent_containers/powder/ozium, -/obj/item/natural/cloth, -/obj/item/needle, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"cGj" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"cGK" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - name = "hospital" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"cGL" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/reagent_containers/powder/spice, -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/obj/item/roguekey/merchant, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/shop) -"cHm" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_y = 32 - }, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"cHB" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"cHD" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"cHZ" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/structure/closet/crate/chest/crate, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/rogue/instrument/accord, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"cIL" = ( -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/meat/rawbacon, -/obj/item/reagent_containers/food/snacks/meat/rawbacon, -/obj/structure/closet/crate/chest/neu, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"cJr" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"cJy" = ( -/obj/effect/decal/remains/wolf, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"cKt" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/exposed/manorgarri) -"cKB" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"cKT" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"cLh" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/shop) -"cLS" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"cMu" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/shelter/town/dwarf) -"cML" = ( -/obj/item/rogueweapon/pitchfork, -/obj/structure/table/wood/plain_alt, -/obj/item/rogueweapon/shovel{ - pixel_x = -7; - pixel_y = -15 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"cNt" = ( -/obj/structure/table/wood/reinforced_alt, -/obj/structure/mineral_door/wood/deadbolt/shutter{ - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/tavern/saiga) -"cNZ" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"cOe" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/spear, -/obj/item/rogueweapon/spear, -/obj/item/rogueweapon/spear, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"cOl" = ( -/obj/effect/landmark/start/squire{ - dir = 1; - icon_state = "arrow" - }, -/turf/open/floor/rogue/carpet/lord/left, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"cPt" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"cQn" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "tablewood2" - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue) -"cQr" = ( -/obj/structure/table/wood/plain_alt, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"cRp" = ( -/obj/structure/closet/crate/chest/neu_fancy, -/obj/structure/rogue/trophy/deer, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"cRO" = ( -/obj/structure/spider/stickyweb, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"cRV" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"cSb" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church) -"cSd" = ( -/obj/structure/table/vtable, -/obj/structure/mirror/alt, -/obj/item/rogueweapon/huntingknife/idagger/steel{ - pixel_x = 10; - pixel_y = 6 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"cSj" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "woodsm" - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"cSp" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"cSU" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"cTv" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town/tavern/saiga) -"cTR" = ( -/obj/structure/fluff/psycross, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/church/chapel) -"cUd" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/farmer{ - dir = 4 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"cVF" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"cXO" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/under/basement) -"cYF" = ( -/obj/structure/closet/dirthole/grave, -/mob/living/simple_animal/hostile/zombie, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"cYR" = ( -/obj/structure/bars/pipe{ - dir = 4; - icon_state = "pipe" - }, -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/outdoors/exposed/under/sewer) -"cZj" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 9; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"cZs" = ( -/turf/closed/mineral/random/rogue/med, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"cZz" = ( -/obj/structure/flora/rock/pile, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"cZM" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/under/town/basement) -"daD" = ( -/obj/structure/table/wood, -/obj/item/roguekey/lord{ - pixel_x = 5 - }, -/obj/item/reagent_containers/glass/cup/golden{ - pixel_x = -6; - pixel_y = 3 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"daW" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "tavern"; - name = "backroom" - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/tavern/saiga) -"dbJ" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"dbV" = ( -/obj/effect/decal/cleanable/blood/footprints, -/obj/effect/decal/cleanable/blood/footprints{ - dir = 4 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"dda" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/church) -"ddk" = ( -/obj/item/chair/stool/bar/rogue, -/obj/effect/landmark/start/farmer{ - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"ddL" = ( -/obj/structure/flora/newleaf/corner{ - dir = 5 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dek" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/fluff/statue/knight, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/outdoors/exposed/under/basement) -"dew" = ( -/obj/structure/flora/newleaf/corner{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"deO" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"dfi" = ( -/obj/structure/table/wood{ - dir = 6; - icon_state = "largetable" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath/redhouse) -"dfC" = ( -/obj/structure/bed/rogue/wool, -/obj/item/bedsheet/rogue/cloth, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"dgd" = ( -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"dgm" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"dgp" = ( -/obj/structure/table/wood/treestump, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dgN" = ( -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dgP" = ( -/obj/effect/landmark/start/guardsman{ - dir = 1; - icon_state = "arrow" - }, -/turf/open/floor/rogue/carpet/lord/left, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"dhg" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "church" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/church/chapel) -"dht" = ( -/obj/structure/table/wood/reinforced, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"dhF" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 1 - }, -/area/rogue/indoors/town) -"dir" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/outdoors/exposed/under/basement) -"diP" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/arcyne, -/obj/item/book/rogue/magicaltheory, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"diQ" = ( -/obj/structure/flora/newleaf/corner{ - dir = 5 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"diV" = ( -/obj/effect/landmark/start/priest, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"djE" = ( -/obj/structure/flora/roguegrass/water, -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"djR" = ( -/obj/structure/table/vtable/v2, -/obj/item/natural/feather, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"dlu" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "tablewood2" - }, -/obj/item/natural/cloth, -/obj/item/natural/cloth, -/obj/item/candle/yellow, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/mountains) -"dmx" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"dmy" = ( -/obj/structure/fluff/walldeco/vinez/offset{ - dir = 9 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dnb" = ( -/obj/structure/fluff/walldeco/vinez/l{ - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dns" = ( -/obj/structure/table/vtable/v2, -/obj/item/candle/yellow/lit/infinite{ - pixel_x = 8; - pixel_y = 7 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath/redhouse) -"doi" = ( -/obj/structure/flora/roguegrass, -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"doU" = ( -/obj/structure/fluff/statue/knight/interior, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"dqx" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"dqG" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/fence{ - dir = 8; - icon_state = "fence" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"dre" = ( -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"drr" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"drK" = ( -/obj/structure/closet/crate/roguecloset/lord{ - locked = 0; - lockid = "mage" - }, -/obj/item/clothing/cloak/raincloak/blue, -/obj/item/clothing/mask/cigarette/pipe/westman, -/obj/item/clothing/shoes/roguetown/sandals, -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"drL" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/structure/fermenting_barrel/random/beer, -/obj/effect/decal/cleanable/dirt/cobweb{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"dsq" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"dsB" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"dsI" = ( -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"dsK" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/manorgarri) -"dsM" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/rogue/fryfish/eel, -/obj/item/reagent_containers/food/snacks/rogue/fryfish/eel, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/shelter/bog) -"dsO" = ( -/obj/structure/handcart, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dsW" = ( -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"dtl" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 8 - }, -/area/rogue/indoors/town/tavern) -"dts" = ( -/mob/living/carbon/human/species/human/northern/bum{ - name = "vagrant"; - wander = 1 - }, -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"dty" = ( -/obj/structure/flora/rock/pile, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"dub" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"dud" = ( -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/dwarf) -"duq" = ( -/obj/structure/fluff/buysign{ - desc = "TUNNEL CLOSED" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"duv" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 4; - icon_state = "donjondir"; - locked = 1; - lockid = "dungeon" - }, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"dvp" = ( -/obj/structure/closet/crate/chest/neu_fancy, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/natural/feather, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"dvI" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town/garrison) -"dwf" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/bigrat, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "Abandoned Mine" - }) -"dwg" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/suit/roguetown/shirt/dress/gen/black, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"dwx" = ( -/obj/structure/bars, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"dwC" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"dwS" = ( -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dxk" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/under/basement) -"dxA" = ( -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/town/roofs) -"dxB" = ( -/obj/structure/fluff/railing/border{ - dir = 5; - icon_state = "border" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"dxL" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"dxW" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"dyt" = ( -/obj/structure/fermenting_barrel/random/beer, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"dyu" = ( -/obj/item/candle/yellow/lit/infinite{ - pixel_x = -8; - pixel_y = 16 - }, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors/town/magician) -"dyO" = ( -/obj/effect/decal/remains/human, -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); - first_time_text = "CATACOMBS" - }) -"dzj" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/fence{ - dir = 4; - icon_state = "fence" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dzz" = ( -/obj/structure/flora/roguegrass, -/obj/structure/roguerock, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"dzE" = ( -/obj/item/reagent_containers/food/snacks/produce/oat, -/obj/item/reagent_containers/food/snacks/produce/oat, -/obj/item/reagent_containers/food/snacks/produce/oat, -/obj/item/reagent_containers/food/snacks/produce/oat, -/obj/item/reagent_containers/food/snacks/produce/oat, -/obj/item/reagent_containers/food/snacks/produce/oat, -/obj/structure/closet/crate/chest/wicker, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"dAc" = ( -/turf/open/floor/rogue/metal, -/area/rogue/under/town/sewer) -"dAr" = ( -/obj/structure/bed/rogue/wooldouble, -/obj/structure/fluff/walldeco/rpainting/forest{ - pixel_x = 32 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"dAV" = ( -/obj/structure/fluff/clodpile, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"dBy" = ( -/mob/living/carbon/human/species/human/northern/bum/ambush, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"dBF" = ( -/obj/structure/bars/pipe, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"dBO" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/vault) -"dCj" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/dwarf) -"dDf" = ( -/obj/structure/giantfur/small, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"dDV" = ( -/obj/structure/fluff/walldeco/bath/five{ - pixel_x = -29 - }, -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"dEb" = ( -/obj/structure/table/wood/large/corner_new{ - dir = 6 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"dEd" = ( -/turf/closed/mineral/random/rogue, -/area/rogue/outdoors/woods) -"dEh" = ( -/turf/open/water/bath/pool, -/area/rogue/indoors/town/bath/redhouse) -"dEn" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/stonehedge{ - dir = 4 - }, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"dEv" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable" - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"dEz" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"dEH" = ( -/turf/open/water/river{ - dir = 4 - }, -/area/rogue/outdoors/river) -"dEO" = ( -/obj/structure/table/wood/treestump{ - pixel_x = -7 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"dFd" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"dFD" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dFG" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "butcher" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"dGC" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"dGK" = ( -/obj/structure/chair/wood/rogue/chair_noble, -/obj/effect/landmark/start/lady, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"dGR" = ( -/obj/structure/spacevine, -/turf/closed/mineral/rogue, -/area/rogue/under/cave) -"dIc" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/remains/xeno/larva{ - desc = "Truely, nothing is sacred."; - name = "child's remains" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"dIj" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 4; - icon_state = "endwooddark" - }, -/area/rogue/indoors/shelter/mountains) -"dJa" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 8; - icon_state = "endwooddark" - }, -/area/rogue/indoors/shelter/town/dwarf) -"dJz" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dJH" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"dJZ" = ( -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"dKI" = ( -/turf/open/floor/rogue/grass, -/area/rogue/indoors) -"dLn" = ( -/obj/structure/roguerock, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"dLu" = ( -/obj/structure/table/wood{ - dir = 6; - icon_state = "largetable" - }, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"dLw" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/bush_meagre, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"dLB" = ( -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue) -"dLG" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "tablewood2" - }, -/obj/item/toy/cards/deck, -/obj/item/reagent_containers/glass/bottle/rogue/wine{ - pixel_x = 8 - }, -/obj/item/clothing/mask/cigarette/rollie/nicotine{ - pixel_x = -7; - pixel_y = -7 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"dMe" = ( -/mob/living/simple_animal/pet/cat/rogue/inn, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"dMl" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/storage/belt/rogue/pouch/coins/poor, -/obj/item/storage/belt/rogue/leather/rope, -/obj/item/clothing/shoes/roguetown/boots/leather, -/obj/item/rogueweapon/huntingknife/idagger, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"dMo" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 1 - }, -/area/rogue/indoors/town/tavern) -"dNi" = ( -/obj/item/roguegem/green, -/turf/closed/mineral/rogue, -/area/rogue/under/cave/spider) -"dNW" = ( -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"dOa" = ( -/obj/structure/roguemachine/drugmachine{ - pixel_y = -6 - }, -/turf/closed/wall/mineral/rogue/stonebrick/reddish, -/area/rogue/indoors/town/bath/redhouse) -"dOd" = ( -/obj/item/storage/backpack/rogue/satchel/heartfelt, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"dOe" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/mountains) -"dOk" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"dOs" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 32 - }, -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"dOJ" = ( -/obj/structure/fluff/statue/pillar, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dOQ" = ( -/obj/structure/bars/pipe{ - dir = 1; - icon_state = "pipe" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town) -"dPM" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"dPQ" = ( -/obj/structure/closet/dirthole/closed/loot, -/obj/structure/gravemarker, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"dPS" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/mountains) -"dQf" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/bigrat, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); - first_time_text = "CATACOMBS" - }) -"dQg" = ( -/obj/item/chair/stool/bar/rogue/crafted, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"dQn" = ( -/obj/structure/table/wood/plain_alt, -/obj/item/rogue/instrument/lute, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern/saiga) -"dQD" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "tablewood2" - }, -/obj/item/natural/cloth, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"dQE" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/shop) -"dRf" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/shield/wood, -/obj/item/rogueweapon/spear, -/obj/structure/fireaxecabinet{ - pixel_x = -16; - pixel_y = 32 - }, -/obj/item/clothing/suit/roguetown/armor/leather/vest, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"dSD" = ( -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"dSQ" = ( -/obj/structure/stairs{ - dir = 8; - icon_state = "stairs" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"dST" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"dTc" = ( -/obj/structure/fluff/walldeco/wantedposter, -/obj/structure/chair/stool/rogue, -/obj/structure/roguemachine/camera/right, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"dTr" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/sapprentice, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"dTD" = ( -/obj/structure/bars/cemetery, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dTE" = ( -/obj/structure/fluff/walldeco/med3{ - pixel_y = -32 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"dTX" = ( -/obj/structure/lever/wall{ - dir = 8; - redstone_id = "donjon" - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/exposed/manorgarri) -"dUy" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/cave/spider) -"dUz" = ( -/obj/structure/fluff/walldeco/rpainting, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"dUL" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/church) -"dVd" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/transparent/openspace, -/area/rogue) -"dVh" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/church) -"dVl" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"dVw" = ( -/obj/structure/table/wood/plain, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"dVD" = ( -/obj/item/natural/cloth, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"dVU" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"dWc" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/exposed/manorgarri) -"dWg" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"dWm" = ( -/turf/open/water/bath/pool/mid, -/area/rogue/indoors/town/bath/redhouse) -"dWu" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 6 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"dXa" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/exposed/manorgarri) -"dXe" = ( -/obj/item/roguecoin/silver/pile, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/indoors/town/vault) -"dXj" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/bush_meagre, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"dXk" = ( -/obj/structure/table/wood/plain_alt, -/obj/item/kitchen/spoon/plastic{ - pixel_x = 9; - pixel_y = 4 - }, -/obj/structure/rack/rogue/shelf/notdense, -/obj/item/reagent_containers/peppermill{ - pixel_y = 30 - }, -/obj/item/kitchen/rollingpin{ - pixel_x = -3; - pixel_y = 2 - }, -/turf/open/floor/rogue/ruinedwood/turned, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"dXv" = ( -/obj/structure/fluff/customsign, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"dXB" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/item/storage/roguebag, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"dXC" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"dXN" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"dYM" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"dZd" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town) -"dZq" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"dZv" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 4; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"dZB" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/neuFarm/seed/berryrogue, -/obj/item/neuFarm/seed/berryrogue, -/obj/item/neuFarm/seed/berryrogue, -/obj/item/neuFarm/seed/berryrogue, -/obj/item/neuFarm/seed/berryrogue, -/obj/item/neuFarm/seed/berryrogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"eai" = ( -/obj/machinery/light/rogue/campfire/densefire, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors) -"eap" = ( -/obj/structure/bars/passage/shutter/open{ - redstone_id = "stewardshutter" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"eaw" = ( -/turf/open/floor/rogue/metal, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"eaT" = ( -/obj/structure/bed/rogue/shit, -/obj/effect/decal/cleanable/blood, -/obj/item/natural/cloth, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"ebb" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/vagrant, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ebw" = ( -/obj/structure/table/wood/large/corner_new{ - dir = 8 - }, -/obj/item/book/rogue/law, -/obj/item/clothing/mask/cigarette/rollie/mindbreaker, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"ebE" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"ebW" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/shop) -"ecu" = ( -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"ecw" = ( -/obj/structure/bars/pipe{ - dir = 9; - icon_state = "pipe" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/dwarfin) -"ecK" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/dwarfin) -"ecO" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable" - }, -/turf/open/floor/rogue/tile/checkeralt, -/area/rogue/indoors/town/tavern/saiga) -"ecZ" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/shop) -"edc" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/indoors/town/church) -"edG" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/exposed/manorgarri) -"edL" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/bog) -"edO" = ( -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/indoors/town/cell) -"edR" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue) -"eeE" = ( -/obj/structure/bars/passage{ - redstone_id = "donjon" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"eeH" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/bars/pipe{ - dir = 10; - icon_state = "pipe" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"efH" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"egc" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/machinery/light/rogue/firebowl/standing{ - density = 0; - pixel_x = 10 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"egz" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"ehg" = ( -/obj/structure/fermenting_barrel/beer, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"ehP" = ( -/obj/item/chair/stool/bar/rogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"ehQ" = ( -/obj/structure/chair/stool/rogue, -/obj/item/storage/belt/rogue/leather/rope, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"ehS" = ( -/obj/structure/fluff/statue/knightalt/r, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"eia" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town) -"eio" = ( -/obj/structure/table/wood/large/corner_new{ - dir = 10 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"eiu" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 8; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/church) -"eiG" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/rack/rogue/shelf/notdense, -/obj/item/reagent_containers/peppermill{ - pixel_y = 30 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern/saiga) -"ejm" = ( -/obj/item/candle/yellow/lit/infinite{ - pixel_x = 8; - pixel_y = 16 - }, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors/town/magician) -"ejD" = ( -/obj/machinery/light/rogue/wallfire/candle/weak/l, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"ejJ" = ( -/obj/structure/bars/pipe{ - dir = 8; - icon_state = "pipe" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"ejQ" = ( -/obj/item/rogueweapon/pick, -/obj/item/gavelhammer, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/under/town/basement) -"ejS" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/effect/landmark/start/prince, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ekn" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"ekI" = ( -/obj/structure/table/wood/reinforced_alt{ - dir = 4 - }, -/obj/item/reagent_containers/glass/cup/steel{ - pixel_x = 5; - pixel_y = 14 - }, -/obj/item/reagent_containers/glass/cup/steel{ - pixel_x = -3 - }, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/under/town/basement) -"ekN" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 4 - }, -/area/rogue/indoors/town) -"ekO" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/outdoors/exposed/dwarf) -"elo" = ( -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue/outdoors/exposed/under/basement) -"elw" = ( -/obj/structure/flora/roguegrass, -/obj/structure/mineral_door/bars, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/under/sewer) -"elF" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"elL" = ( -/obj/structure/chair/wood/rogue{ - dir = 8; - icon_state = "chair2" - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"elO" = ( -/obj/structure/bed/rogue/wooldouble, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/bedsheet/rogue/double_pelt, -/obj/effect/landmark/start/prince{ - dir = 8 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"emS" = ( -/obj/structure/fluff/clock/dense, -/obj/machinery/light/rogue/wallfire/candle/weak, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"enH" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"eoj" = ( -/obj/effect/landmark/start/villager, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"eoE" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/flora/rock/pile, -/turf/open/water/swamp/deep, -/area/rogue/outdoors/bog) -"eoL" = ( -/obj/effect/landmark/mapGenerator/sunlights{ - endTurfX = 128; - endTurfY = 192 - }, -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/mountains) -"epf" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"epm" = ( -/obj/structure/closet/crate/chest/neu{ - lockid = "tavern"; - name = "cooks chest" - }, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/clothing/under/roguetown/tights/green, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"epS" = ( -/obj/machinery/light/rogue/campfire/longlived, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"epZ" = ( -/obj/structure/bars, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"eqm" = ( -/obj/structure/closet/crate/drawer, -/obj/structure/fluff/wallclock/r, -/obj/item/keyring/hand, -/obj/item/natural/cloth, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"eqM" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"eqU" = ( -/obj/structure/rack/rogue{ - pixel_y = 16 - }, -/obj/item/keyring/guardcastle, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/garrison) -"erc" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 8; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"ert" = ( -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"erC" = ( -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"erG" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/woods) -"erS" = ( -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/obj/structure/roguemachine/camera/right, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/cell) -"esl" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"etw" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"etB" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge, -/turf/closed/mineral/rogue, -/area/rogue/indoors/shelter/rtfield) -"eud" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"euh" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"euk" = ( -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"euy" = ( -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue) -"euA" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/rack/rogue, -/obj/item/quiver/bolts, -/obj/item/gun/ballistic/revolver/grenadelauncher/crossbow, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/garrison) -"evd" = ( -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"evm" = ( -/obj/structure/flora/rock/pile, -/obj/structure/bars/cemetery, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"evt" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"evu" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/grass, -/area/rogue/indoors) -"evX" = ( -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ewn" = ( -/mob/living/simple_animal/hostile/zombie, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"ewq" = ( -/obj/structure/table/wood/large/corner_new{ - dir = 6 - }, -/obj/item/burial_shroud, -/obj/item/burial_shroud, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"ewu" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/woods) -"ewN" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern/saiga) -"ewT" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"exj" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/sellsign{ - desc = "ROCKHAMLET has been scratched over the former placename, too worn to read."; - name = "ROCKHAMLET" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"exA" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable_mid" - }, -/obj/item/reagent_containers/glass/cup/steel{ - pixel_y = 7 - }, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"exF" = ( -/obj/structure/bed/rogue/hay, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 9 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"eyi" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/bottle/rogue/manapot, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"eyx" = ( -/obj/structure/stairs{ - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"eyB" = ( -/obj/item/candle/yellow/lit/infinite{ - light_range = 1; - pixel_x = 8; - pixel_y = 5 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath/redhouse) -"ezb" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"ezz" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"ezE" = ( -/obj/structure/fluff/wallclock/r{ - pixel_x = -32 - }, -/turf/open/floor/carpet/inn, -/area/rogue/under/town/basement) -"ezG" = ( -/obj/machinery/light/rogue/torchholder/l, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/dwarf) -"ezJ" = ( -/obj/effect/decal/remains/xeno/larva{ - desc = "Truely, nothing is sacred."; - name = "child's remains" - }, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"ezM" = ( -/obj/structure/fermenting_barrel, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"ezU" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"eAd" = ( -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"eAp" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "largetable" - }, -/obj/item/reagent_containers/food/snacks/rogue/meat/mince/beef, -/obj/item/rogueweapon/huntingknife/cleaver/combat, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"eAq" = ( -/obj/structure/lever{ - redstone_id = "gatelava" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"eAI" = ( -/obj/structure/chair/wood/rogue{ - dir = 8; - icon_state = "chair2" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"eAM" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue/indoors/town/church) -"eAR" = ( -/obj/structure/toilet, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/under/town/sewer) -"eAU" = ( -/obj/structure/bars/pipe{ - dir = 5; - icon_state = "pipe" - }, -/obj/structure/fluff/walldeco/vinez/l{ - dir = 10 - }, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"eBg" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/church) -"eBB" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"eBG" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/abyssor, -/obj/item/book/rogue/godofdreamsandnightmares, -/obj/item/book/rogue/noc, -/obj/item/book/rogue/xylix, -/obj/item/book/rogue/necra, -/obj/item/book/rogue/bookofpriests, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"eCc" = ( -/obj/structure/table/wood/large/corner_new{ - dir = 6 - }, -/obj/item/clothing/shoes/roguetown/boots/leather, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"eCq" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"eDh" = ( -/obj/structure/closet/crate/chest/wicker, -/obj/item/natural/cloth, -/obj/item/natural/cloth, -/obj/item/natural/cloth, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"eDs" = ( -/obj/structure/chair/wood/rogue/fancy{ - dir = 8; - icon_state = "chair1" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"eDG" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"eDT" = ( -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"eDW" = ( -/obj/structure/roguewindow/openclose, -/turf/open/floor/rogue/wood, -/area/rogue/indoors) -"eDZ" = ( -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/cell) -"eEa" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"eEC" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"eED" = ( -/obj/structure/table/wood, -/obj/structure/bars{ - icon_state = "barsbent"; - layer = 2.81 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"eEM" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"eEP" = ( -/obj/item/candle/yellow/lit/infinite{ - pixel_x = 8; - pixel_y = -5 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath/redhouse) -"eFD" = ( -/obj/item/rogueweapon/shield/wood, -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"eFL" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/exposed/under/sewer) -"eGm" = ( -/obj/structure/chair/bench/church{ - dir = 1; - icon_state = "church_benchleft" - }, -/obj/effect/landmark/start/churchling, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"eGB" = ( -/obj/structure/fluff/psycross, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"eGC" = ( -/obj/structure/closet/crate/chest/neu_iron, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed_dried, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed, -/obj/item/clothing/mask/cigarette/pipe/crafted, -/obj/item/reagent_containers/powder/ozium{ - pixel_x = -7; - pixel_y = 11 - }, -/obj/item/reagent_containers/powder/moondust_purest, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"eGI" = ( -/obj/structure/stairs/stone{ - dir = 4; - icon_state = "stonestairs" - }, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"eIh" = ( -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"eIz" = ( -/obj/item/natural/dirtclod, -/obj/structure/bars, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"eJx" = ( -/turf/closed/wall/mineral/rogue/decostone/cand, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"eJH" = ( -/obj/structure/table/wood/large/corner_new{ - dir = 4 - }, -/obj/item/candle/skull/lit, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"eKW" = ( -/obj/structure/fluff/statue/knight, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"eLe" = ( -/obj/structure/roguewindow/openclose{ - dir = 1; - icon_state = "woodwindowdir" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors) -"eLL" = ( -/obj/structure/fluff/walldeco/moon, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/magician) -"eLR" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable" - }, -/obj/item/reagent_containers/glass/bottle/rogue/wine{ - pixel_y = 9 - }, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/magician) -"eMo" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"eMP" = ( -/obj/structure/bars/passage{ - redstone_id = "sewer4" - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"eNd" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/under/cave/spider) -"eNh" = ( -/obj/structure/fluff/railing/border{ - dir = 9; - icon_state = "border" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"eNj" = ( -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/exposed/manorgarri) -"eNw" = ( -/obj/structure/chair/bench/couch/redleft, -/obj/structure/fluff/walldeco/bigpainting/lake{ - pixel_x = 0 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"eNK" = ( -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"eOe" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/machinery/light/rogue/wallfire/candle/weak/l, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"eOs" = ( -/obj/structure/bed/rogue/shit, -/obj/structure/fluff/walldeco/wantedposter, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"eOv" = ( -/obj/structure/stairs/stone{ - dir = 4; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"eOG" = ( -/obj/structure/fluff/railing/border{ - dir = 5; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue) -"eOQ" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"ePk" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"ePp" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"ePz" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town) -"ePF" = ( -/obj/item/bedsheet/rogue/double_pelt, -/obj/structure/bed/rogue/wooldouble, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/tavern/saiga) -"ePO" = ( -/turf/closed/mineral/rogue, -/area/rogue/indoors/shelter/town/dwarf) -"eQe" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town/roofs) -"eRt" = ( -/obj/effect/decal/cobbleedge{ - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"eRz" = ( -/obj/structure/fluff/statue/small, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/exposed/manorgarri) -"eRB" = ( -/turf/open/floor/rogue/ruinedwood/turned, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"eRH" = ( -/obj/machinery/light/rogue/oven/south, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors) -"eRP" = ( -/obj/item/reagent_containers/food/snacks/rogue/meat/poultry, -/obj/item/reagent_containers/food/snacks/rogue/meat/poultry, -/obj/structure/closet/crate/chest/crate, -/turf/open/floor/rogue/metal/barograte, -/area/rogue/outdoors/exposed/under/basement) -"eRR" = ( -/obj/item/paper/confession, -/obj/item/paper/confession, -/obj/item/paper/confession, -/obj/item/paper/confession, -/obj/item/paper/confession, -/obj/structure/closet/crate/chest/neu_iron, -/obj/item/keyring/inquisitor, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"eRY" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/manorgarri) -"eSc" = ( -/obj/structure/fluff/nest, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"eSn" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"eSM" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern/saiga) -"eSU" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 4 - }, -/area/rogue/indoors/town/magician) -"eTh" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/spiderbase) -"eTy" = ( -/obj/structure/stairs{ - dir = 8; - icon_state = "stairs" - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/tavern/saiga) -"eTJ" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"eTK" = ( -/obj/item/rogueweapon/pick, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"eTT" = ( -/obj/structure/fluff/walldeco/customflag, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"eUo" = ( -/turf/open/floor/rogue/tile/checker, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"eUw" = ( -/obj/structure/table/wood/reinf_long, -/obj/item/ash{ - pixel_y = 9 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"eUD" = ( -/obj/machinery/light/rogue/forge, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"eVs" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/exposed/under/sewer) -"eVI" = ( -/obj/item/reagent_containers/food/snacks/crow{ - dir = 8; - icon_state = "crow" - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"eVM" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"eVP" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/church) -"eVX" = ( -/turf/closed/wall/mineral/rogue/wood, -/area/rogue/indoors/town) -"eXb" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "walls" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/church) -"eXr" = ( -/obj/structure/bars/pipe{ - dir = 5; - icon_state = "pipe" - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"eXI" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/outdoors/exposed/dwarf) -"eXO" = ( -/obj/structure/fluff/statue/knightalt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"eYQ" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 26 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"eZz" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"eZE" = ( -/obj/structure/closet/dirthole/closed/loot, -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"eZF" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"faa" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/mace/wsword, -/obj/item/rogueweapon/mace/wsword, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"fai" = ( -/obj/effect/decal/shadow_floor{ - dir = 1 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath/redhouse) -"fbb" = ( -/obj/structure/stairs/fancy/r{ - dir = 1 - }, -/turf/open/floor/rogue/carpet/lord/right, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fbw" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/item/clothing/shoes/roguetown/simpleshoes, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"fbL" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/outdoors/town/roofs) -"fbS" = ( -/obj/item/rogueweapon/thresher, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"fcg" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 4 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"fdx" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"fdH" = ( -/obj/structure/fluff/railing/border{ - dir = 9; - icon_state = "border" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/dwarfin) -"fdZ" = ( -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"fen" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/shelter/mountains/decap) -"fex" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/cup/wooden/crafted, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"feU" = ( -/obj/structure/fluff/walldeco/rpainting/crown{ - pixel_y = 32 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"feV" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town/garrison) -"fgc" = ( -/obj/effect/decal/remains/human, -/turf/closed/mineral/rogue, -/area/rogue/under/cave/spider) -"fgs" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"fgz" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 4; - icon_state = "wooddir" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"fgL" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/structure/roguemachine/camera/left, -/obj/machinery/light/rogue/wallfire/big_fireplace{ - pixel_x = 15; - pixel_y = 32 - }, -/obj/structure/chair/wood/rogue/fancy{ - dir = 4; - icon_state = "chair1" - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/tavern/saiga) -"fgN" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"fgP" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/saigabuck/tame, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fgY" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fhi" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"fhv" = ( -/obj/structure/table/wood/reinforced_alt{ - dir = 1 - }, -/obj/item/reagent_containers/glass/cup/steel, -/obj/item/reagent_containers/glass/cup/steel{ - pixel_x = 5; - pixel_y = 14 - }, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/under/town/basement) -"fhA" = ( -/obj/structure/closet/crate/roguecloset/lord{ - lockid = "nightman" - }, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/rogueweapon/huntingknife/idagger/steel, -/obj/item/reagent_containers/glass/bottle/rogue/poison, -/obj/item/clothing/mask/cigarette/rollie/mindbreaker, -/obj/item/reagent_containers/food/snacks/produce/berries/rogue/poison, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath/redhouse) -"fhC" = ( -/obj/structure/roguemachine/stockpile, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town) -"fie" = ( -/obj/machinery/light/rogue/campfire/densefire, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fio" = ( -/obj/machinery/light/rogue/firebowl/standing{ - density = 0; - pixel_x = 10 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fiK" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/cloak/stole/purple, -/obj/item/clothing/cloak/raincloak/green, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"fjH" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/under/sewer) -"fkl" = ( -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"fkm" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/item/reagent_containers/glass/bucket/wooden, -/obj/structure/roguemachine/camera/right, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"fkZ" = ( -/turf/closed/mineral/rogue, -/area/rogue/outdoors/exposed/under/sewer) -"flb" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"flC" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/stairs{ - dir = 1; - icon_state = "stairs" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains) -"flQ" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/mountains) -"fmG" = ( -/obj/structure/closet/crate/chest/neu{ - name = "food storage" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"fmQ" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/landmark/start/vagrant{ - dir = 4; - icon_state = "arrow" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"fnd" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fnq" = ( -/obj/structure/fluff/railing/border, -/obj/item/clothing/shoes/roguetown/jester, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fnK" = ( -/obj/structure/roguewindow/openclose{ - dir = 8; - icon_state = "woodwindowdir" - }, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/tavern/saiga) -"fnU" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/clothing/gloves/roguetown/leather, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"fon" = ( -/obj/structure/fluff/walldeco/masonflag{ - pixel_y = -31 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/dwarf) -"foq" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"foO" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/item/grown/log/tree/stake, -/obj/item/roguecoin/copper, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"foR" = ( -/turf/open/water/swamp/deep, -/area/rogue/outdoors/bog) -"fpb" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"fpB" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/flora/roguegrass, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/exposed/under/basement) -"fpV" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_x = -32 - }, -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fqh" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"fqp" = ( -/obj/structure/mineral_door/wood/fancywood{ - locked = 1; - lockid = "nightman"; - name = "masters room" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath/redhouse) -"fqu" = ( -/obj/structure/fluff/railing/border{ - dir = 5; - icon_state = "border" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"fqM" = ( -/obj/structure/bed/rogue/wooldouble, -/obj/item/bedsheet/rogue/fabric_double, -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath/redhouse) -"fqW" = ( -/obj/structure/roguewindow/openclose{ - dir = 8; - icon_state = "woodwindowdir" - }, -/obj/structure/barricade/wooden/rogue/crude, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"fqY" = ( -/obj/structure/stairs/stone{ - dir = 8 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"frf" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/indoors/shelter/town/dwarf) -"frr" = ( -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town) -"frE" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/shop) -"frH" = ( -/obj/structure/table/wood/reinforced_alter, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"frM" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue) -"fsc" = ( -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"fsd" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/neck/roguetown/talkstone, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"fsl" = ( -/obj/item/rogueweapon/huntingknife/idagger/steel/special, -/obj/item/rogueweapon/huntingknife/idagger/steel, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueweapon/huntingknife/idagger, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/shop) -"ftC" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"ftP" = ( -/mob/living/carbon/human/species/human/northern/bum{ - name = "beggar" - }, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"ftR" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"fuR" = ( -/obj/structure/stairs/stone{ - dir = 4; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"fvf" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"fvh" = ( -/obj/structure/fluff/railing/fence{ - dir = 1; - icon_state = "fence" - }, -/obj/structure/fluff/railing/fence{ - dir = 1; - icon_state = "fence" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fvn" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "lord" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/outdoors/exposed/under/basement) -"fvp" = ( -/obj/item/natural/stone, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"fvv" = ( -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/magician) -"fws" = ( -/obj/structure/chair/wood/rogue/fancy{ - dir = 1 - }, -/obj/effect/landmark/start/prince{ - dir = 1 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fwx" = ( -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 9; - icon_state = "border" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fwO" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"fwP" = ( -/obj/structure/closet/crate/coffin, -/obj/effect/landmark/start/gravedigger{ - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"fwQ" = ( -/obj/structure/flora/roguegrass, -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"fwR" = ( -/obj/structure/chair/wood/rogue{ - dir = 1; - icon_state = "chair2" - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fxm" = ( -/obj/structure/well/fountain, -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/church) -"fxC" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"fxT" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/shelter/town/dwarf) -"fyl" = ( -/obj/effect/decal/cleanable/blood/tracks, -/mob/living/simple_animal/hostile/retaliate/rogue/wolf, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"fyR" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/under/town/sewer) -"fyY" = ( -/obj/structure/fluff/psycross, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"fyZ" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"fzj" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 4; - icon_state = "endwooddark" - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fzE" = ( -/obj/structure/closet/crate/chest/crate, -/obj/item/neuFarm/seed/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"fBu" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fCb" = ( -/obj/structure/closet/dirthole/closed/loot, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"fCr" = ( -/obj/item/book/rogue/law, -/obj/item/book/rogue/psybibleplayerbook, -/obj/structure/bookcase, -/obj/item/book/rogue/vownecrapage, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"fDx" = ( -/obj/structure/bars/pipe, -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town) -"fDW" = ( -/obj/structure/flora/roguegrass, -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/mountains) -"fEa" = ( -/obj/structure/rack/rogue, -/obj/item/cooking/platter, -/obj/item/cooking/platter{ - pixel_y = -5 - }, -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"fFf" = ( -/obj/effect/landmark/start/shepherd, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church/chapel) -"fFz" = ( -/obj/structure/flora/roguegrass, -/obj/structure/roguerock, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fGl" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/tavern/saiga) -"fGA" = ( -/obj/structure/spider/stickyweb, -/obj/item/ingot/steel, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"fGK" = ( -/obj/structure/floordoor/gatehatch/outer{ - redstone_id = "gatelava" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"fHF" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"fHJ" = ( -/obj/structure/fluff/statue/knightalt, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"fHU" = ( -/obj/structure/table/vtable/v2, -/obj/item/reagent_containers/glass/cup, -/obj/item/reagent_containers/glass/bottle/rogue/wine{ - pixel_x = -11; - pixel_y = 10 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"fIb" = ( -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"fIm" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/exposed/under/basement) -"fIp" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"fJz" = ( -/obj/structure/stairs{ - dir = 4; - icon_state = "stairs" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"fKe" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"fKk" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"fKq" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/exposed/under/basement) -"fKy" = ( -/obj/structure/roguemachine/submission, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town) -"fKJ" = ( -/obj/effect/decal/cleanable/dirt/cobweb{ - dir = 1 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"fKK" = ( -/obj/structure/stairs/stone{ - dir = 8 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/sewer) -"fMD" = ( -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue) -"fMX" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/river) -"fNt" = ( -/obj/item/natural/stone, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fNw" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"fNG" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fNO" = ( -/obj/structure/kitchenspike, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"fOQ" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern/saiga) -"fQB" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"fQM" = ( -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"fRg" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"fRo" = ( -/obj/structure/chair/stool/rogue, -/turf/open/water/bath/pool{ - dir = 9 - }, -/area/rogue/indoors/town/bath/redhouse) -"fRw" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fSP" = ( -/obj/structure/mineral_door/wood/donjon{ - lockid = "walls" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"fSQ" = ( -/obj/structure/fluff/railing/border{ - dir = 9; - icon_state = "border" - }, -/obj/structure/roguemachine/scomm, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"fSZ" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/outdoors/exposed/town) -"fTp" = ( -/obj/structure/stairs{ - dir = 1 - }, -/obj/machinery/light/rogue/torchholder{ - dir = 4; - icon_state = "torchwall1" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"fTx" = ( -/obj/structure/bed/rogue/shit, -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"fUu" = ( -/obj/structure/spider/eggcluster, -/obj/structure/spider/stickyweb, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"fUy" = ( -/obj/effect/decal/remains/saiga, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fVf" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/manorgarri) -"fVg" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/fluff/railing/fence{ - dir = 4; - icon_state = "fence" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"fVh" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fVn" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern/saiga) -"fVL" = ( -/turf/closed/mineral/random/rogue, -/area/rogue/under/town/caverogue{ - first_time_text = "Abandoned Mine" - }) -"fVV" = ( -/obj/structure/fluff/customsign{ - desc = "Steward: North -- Church: East -- Smeltery: West"; - name = "TOWN MAP" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"fWf" = ( -/obj/item/candle/yellow/lit/infinite/strong{ - pixel_x = 0; - pixel_y = 32 - }, -/obj/structure/rack/rogue/shelf/notdense, -/obj/structure/toilet, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"fWk" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/manorgarri) -"fWC" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"fWZ" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"fXC" = ( -/obj/item/clothing/mask/cigarette/pipe/westman, -/obj/structure/closet/crate/chest/wicker, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"fXO" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/vagrant{ - dir = 1; - icon_state = "arrow" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"fXU" = ( -/obj/structure/fluff/railing/border{ - dir = 9; - icon_state = "border" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"fXZ" = ( -/obj/structure/bed/rogue/mediocre{ - name = "cooks bed" - }, -/obj/structure/fluff/nest, -/obj/effect/landmark/start/cook{ - icon_state = "arrow" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"fYv" = ( -/obj/effect/landmark/start/wapprentice{ - dir = 8 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"fYO" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "church" - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/church/chapel) -"fYS" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"fZg" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"fZx" = ( -/obj/structure/flora/roguegrass/water, -/turf/open/water/swamp/deep, -/area/rogue/outdoors/bog) -"fZF" = ( -/obj/structure/rack/rogue, -/obj/item/flashlight/glowstick/cyan{ - icon = 'icons/roguetown/items/gems.dmi'; - icon_state = "quartz_cut"; - lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'; - name = "glowstone"; - righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"gas" = ( -/obj/structure/closet/crate/chest/neu, -/obj/item/reagent_containers/food/snacks/rogue/meat/bacon, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/food/snacks/fat, -/obj/item/reagent_containers/food/snacks/fat, -/obj/item/reagent_containers/food/snacks/fat, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"gbg" = ( -/obj/structure/table/wood/large_new, -/obj/item/rogueweapon/pick, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"gbo" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/river) -"gbA" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"gbU" = ( -/obj/machinery/light/rogue/oven/south, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern/saiga) -"gcd" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/shield/wood, -/obj/item/rogueweapon/shield/wood, -/obj/item/rogueweapon/shield/wood, -/obj/item/rogueweapon/shield/wood, -/obj/item/rogueweapon/shield/wood, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"gce" = ( -/obj/effect/landmark/start/merchant{ - dir = 4 - }, -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/shop) -"gcr" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/shop) -"gcU" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors) -"gdc" = ( -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/tavern/saiga) -"gdJ" = ( -/obj/structure/fluff/dryingrack, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gdM" = ( -/turf/closed/wall/mineral/rogue/wooddark/end, -/area/rogue/indoors/shelter/mountains) -"gdY" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 1 - }, -/area/rogue/indoors/shelter/mountains/decap) -"gey" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"geB" = ( -/obj/structure/chair/stool/rogue, -/turf/open/water/bath/pool{ - dir = 10 - }, -/area/rogue/indoors/town/bath/redhouse) -"geD" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"gfp" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue) -"gfH" = ( -/obj/structure/fluff/walldeco/vinez{ - dir = 1 - }, -/turf/closed/wall/mineral/rogue/stonebrick/reddish, -/area/rogue/indoors/town/bath/redhouse) -"gfN" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/church) -"ggn" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"ghM" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/footprints{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"ghO" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"ghW" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/roguekey/walls{ - lockid = "farm"; - name = "farm key" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"gif" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors) -"gio" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/manorgarri) -"gip" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/festus, -/obj/item/book/rogue/cardgame, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"giM" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/effect/landmark/start/mercenary, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/tavern/saiga) -"gjb" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue) -"gjc" = ( -/obj/item/rogueweapon/shovel, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"gjC" = ( -/obj/structure/rack/rogue/shelf/biggest, -/obj/item/needle, -/obj/item/needle/thorn, -/obj/item/natural/bundle/cloth{ - amount = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"gjU" = ( -/obj/structure/toilet, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"gkd" = ( -/turf/closed/mineral/rogue, -/area/rogue/indoors/town/vault) -"gko" = ( -/obj/structure/chair/bench/ancientlog, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"gkO" = ( -/turf/open/water/swamp, -/area/rogue/indoors) -"gkW" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "church" - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"glB" = ( -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"glT" = ( -/obj/structure/table/wood/plain_alt, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"gma" = ( -/obj/structure/bars/pipe{ - dir = 5; - icon_state = "pipe" - }, -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town) -"gna" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/town) -"gnk" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/obj/effect/landmark/start/weaponsmith{ - dir = 1 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"gnn" = ( -/obj/machinery/light/rogue/firebowl/standing, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gnE" = ( -/obj/structure/bars/pipe{ - dir = 4; - icon_state = "pipe" - }, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/shelter/town/dwarf) -"gnW" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"goc" = ( -/obj/structure/fluff/traveltile{ - aportalgoesto = "forestin"; - aportalid = "forestout" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/woods) -"gos" = ( -/obj/structure/fluff/walldeco/mona, -/obj/item/clothing/head/roguetown/crown/serpcrown, -/obj/item/rogueweapon/lordscepter, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/indoors/town/vault) -"goV" = ( -/obj/structure/bed/rogue/wooldouble, -/obj/item/bedsheet/rogue/fabric_double, -/obj/structure/fluff/walldeco/painting/seraphina{ - pixel_x = 32 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gpl" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/structure/toilet, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gpy" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"gpG" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"gqM" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/grabber{ - dir = 8 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"gqY" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"grn" = ( -/obj/structure/chair/bench/ancientlog, -/obj/structure/flora/newleaf/corner{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"grD" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/mason{ - dir = 8 - }, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/shelter/town/dwarf) -"gsB" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "butcher" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gtg" = ( -/obj/structure/fluff/railing/border{ - dir = 9; - icon_state = "border" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"gtw" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/exposed/under/basement) -"gtA" = ( -/obj/structure/fluff/statue/small, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"gtN" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "tablewood2" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"gtT" = ( -/obj/item/clothing/suit/roguetown/shirt/dress/gen/random, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"gtU" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/exposed/manorgarri) -"guH" = ( -/turf/open/floor/bronze, -/area/rogue/outdoors/exposed/magiciantower) -"guL" = ( -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gvb" = ( -/obj/structure/fluff/walldeco/psybanner/red, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/church/chapel) -"gvh" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"gvS" = ( -/obj/structure/flora/roguetree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"gwE" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"gwL" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/indoors) -"gwY" = ( -/obj/structure/bed/rogue/wool, -/obj/item/bedsheet/rogue/pelt, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"gxx" = ( -/obj/structure/closet/dirthole/grave, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"gxJ" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/vagrant{ - dir = 4; - icon_state = "arrow" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"gyc" = ( -/obj/structure/flora/roguegrass, -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"gym" = ( -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"gzv" = ( -/obj/structure/fluff/walldeco/vinez/l{ - dir = 9 - }, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"gzx" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/candle/yellow/lit{ - pixel_x = -5; - pixel_y = 9 - }, -/obj/item/candle/yellow/lit{ - pixel_x = 4; - pixel_y = 1 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"gzS" = ( -/obj/structure/flora/roguetree, -/turf/open/water/swamp/deep, -/area/rogue/outdoors/bog) -"gAe" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"gAg" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"gBN" = ( -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"gBX" = ( -/obj/structure/bars/pipe, -/obj/structure/bars/pipe{ - dir = 4; - icon_state = "pipe" - }, -/obj/structure/bars/pipe{ - dir = 8; - icon_state = "pipe" - }, -/obj/structure/bars/pipe{ - dir = 1; - icon_state = "pipe" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"gBZ" = ( -/obj/structure/table/wood/reinforced_alt, -/obj/structure/bars{ - icon_state = "barsbent"; - layer = 2.81 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"gCc" = ( -/obj/effect/landmark/start/armorsmith, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"gCu" = ( -/obj/structure/fluff/railing/border, -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/clothing/mask/cigarette/pipe{ - pixel_y = 14 - }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed{ - pixel_y = 7 - }, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"gDg" = ( -/obj/structure/stairs{ - dir = 8; - icon_state = "stairs" - }, -/obj/structure/fluff/railing/border, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern/saiga) -"gEo" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "graveyard" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"gFa" = ( -/obj/effect/decal/cleanable/blood/footprints, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"gFk" = ( -/obj/structure/table/vtable, -/obj/item/paper/scroll, -/obj/item/natural/feather{ - pixel_x = 5; - pixel_y = -5 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath/redhouse) -"gFp" = ( -/obj/effect/spawner/roguemap/treeorstump, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"gFs" = ( -/obj/structure/floordoor/gatehatch/outer{ - redstone_id = "gatelava" - }, -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/structure/kybraxor{ - pixel_x = -32; - pixel_y = -32 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"gFH" = ( -/obj/structure/stairs/stone{ - dir = 8; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"gFI" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 4; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/shelter/town/dwarf) -"gFR" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/under/town/basement) -"gGu" = ( -/obj/effect/decal/cleanable/blood/gibs, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"gGB" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gGC" = ( -/obj/structure/fluff/clodpile, -/obj/item/natural/worms, -/obj/structure/kneestingers, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"gGM" = ( -/obj/structure/rack/rogue/shelf/biggest, -/obj/item/rogue/instrument/harp, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"gGO" = ( -/obj/structure/flora/roguegrass/maneater/real, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"gHs" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/ring/gold/protection, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"gHu" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"gHy" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/water/swamp, -/area/rogue/outdoors/bog) -"gIz" = ( -/obj/structure/table/wood{ - icon_state = "tablewood3" - }, -/obj/item/rogueweapon/sword/iron, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"gIB" = ( -/obj/structure/roguemachine/atm, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"gIT" = ( -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"gJg" = ( -/obj/item/natural/worms, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"gJv" = ( -/obj/structure/fluff/walldeco/bath/four, -/obj/effect/decal/shadow_floor{ - dir = 1 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath/redhouse) -"gJM" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/outdoors/exposed/under/basement) -"gKF" = ( -/obj/structure/bed/rogue/hay, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"gKG" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"gMb" = ( -/obj/structure/feedinghole{ - pixel_x = -32; - pixel_y = 0 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"gMX" = ( -/obj/effect/landmark/start/veteran{ - dir = 1 - }, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gNf" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 8 - }, -/area/rogue/indoors/town/magician) -"gNu" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"gNJ" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"gPa" = ( -/obj/structure/fluff/grindwheel, -/obj/item/rogueweapon/sword/iron/messer, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"gQS" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/item/candle/yellow/lit/infinite/strong{ - pixel_x = 0; - pixel_y = 32 - }, -/obj/structure/rack/rogue/shelf/notdense, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/tavern/saiga) -"gSj" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "manor" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gSH" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"gSS" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/church) -"gSV" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"gTy" = ( -/obj/structure/closet/crate/roguecloset/lord{ - lockid = "bath1"; - name = "locker I" - }, -/obj/effect/decal/shadow_floor{ - dir = 6 - }, -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"gTE" = ( -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"gUL" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 26 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"gUR" = ( -/obj/effect/decal/remains/human, -/turf/closed/mineral/rogue, -/area/rogue) -"gVh" = ( -/obj/structure/flora/roguegrass/water/reeds, -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"gVw" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/structure/ladder, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"gVO" = ( -/obj/structure/lever/wall{ - pixel_x = 32; - redstone_id = "merchant" - }, -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/shop) -"gVW" = ( -/obj/structure/fluff/statue/knight/interior/r, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/manorgarri) -"gWF" = ( -/obj/structure/stairs/stone, -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gXo" = ( -/obj/structure/fluff/walldeco/rpainting/forest, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"gZt" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/bath/redhouse) -"gZJ" = ( -/obj/structure/rack/rogue/shelf/notdense{ - pixel_y = 27 - }, -/obj/item/natural/bundle/stick{ - pixel_y = 40 - }, -/obj/item/natural/bundle/stick{ - pixel_y = 37 - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"haC" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "tablewood2" - }, -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"hbj" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/magician) -"hbE" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/reagent_containers/glass/cup/skull{ - pixel_y = 12 - }, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"hbO" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/magician) -"hca" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hci" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"hcr" = ( -/turf/closed/wall/mineral/rogue/decostone/cand, -/area/rogue/outdoors/exposed/under/basement) -"hcA" = ( -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"hcY" = ( -/obj/structure/table/wood/treestump{ - pixel_x = -7 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hdm" = ( -/obj/item/rogueweapon/sword/long/exe/cloth{ - desc = "The last work of a forgotten swordsmith. You can hear a heavy liquid slosh in its hollow spine." - }, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/vault) -"hdt" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"hdv" = ( -/obj/item/rogueweapon/pick, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"hdL" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"hes" = ( -/obj/structure/toilet, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/tavern/saiga) -"heB" = ( -/obj/structure/roguemachine/steward, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"heD" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/adventurer{ - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"heG" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"heN" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"heO" = ( -/obj/structure/stairs{ - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"heX" = ( -/obj/structure/bars/pipe{ - dir = 4; - icon_state = "pipe" - }, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town) -"hfe" = ( -/obj/structure/chair/wood/rogue/fancy{ - dir = 1 - }, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"hfn" = ( -/obj/item/rogueweapon/shovel, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"hfp" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "garrison" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"hgj" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/under/town/sewer) -"hgQ" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"hht" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"hhL" = ( -/obj/structure/fluff/statue/knight, -/obj/structure/stone_tile/slab/cracked, -/obj/structure/fluff/walldeco/psybanner{ - pixel_y = 32 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"hij" = ( -/obj/structure/flora/newleaf/corner{ - dir = 9 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"him" = ( -/obj/item/storage/roguebag, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"hio" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/mask/cigarette/rollie/mindbreaker, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"hjk" = ( -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"hkD" = ( -/obj/structure/table/wood/large/corner_new{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"hkU" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/storage/belt/rogue/pouch/coins/rich, -/obj/item/clothing/suit/roguetown/armor/gambeson, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak/fried, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak/fried, -/obj/item/reagent_containers/powder/salt, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"hlA" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/bush/wall, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"hlB" = ( -/obj/item/candle/yellow, -/obj/structure/table/wood{ - dir = 10; - icon_state = "tablewood2" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"hmg" = ( -/obj/structure/bed/rogue/shit, -/obj/item/natural/cloth, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"hmu" = ( -/obj/effect/decal/cleanable/food/egg_smudge, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"hnu" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"hny" = ( -/obj/effect/decal/cobbleedge{ - dir = 1 - }, -/obj/structure/fluff/walldeco/bath/wallrope{ - pixel_y = -32 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"hom" = ( -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"hpV" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"hqJ" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"hqR" = ( -/obj/effect/decal/cleanable/blood/gibs/core, -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/item/rogueweapon/huntingknife/idagger, -/turf/open/transparent/openspace, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"hqY" = ( -/obj/structure/fluff/sellsign{ - desc = "The sign reads: RODE CLOSED GO LEFT" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hrp" = ( -/obj/structure/rack/rogue/shelf/biggest, -/obj/item/natural/bundle/stick, -/obj/item/natural/bundle/stick, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"hrw" = ( -/obj/machinery/light/rogue/forge, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"hrB" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"hsC" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hsE" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hsL" = ( -/turf/closed/mineral/rogue, -/area/rogue/under/cave) -"htm" = ( -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/bath/redhouse) -"htQ" = ( -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hub" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/manorgarri) -"hud" = ( -/obj/structure/closet/crate/roguecloset/lord{ - lockid = "bath2"; - name = "locker II" - }, -/obj/effect/decal/shadow_floor{ - dir = 10 - }, -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"hus" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/under/town/basement) -"hvr" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/town/dwarf) -"hvy" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hvE" = ( -/obj/structure/closet/dirthole/closed/loot, -/obj/structure/flora/roguegrass, -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"hxl" = ( -/obj/structure/flora/rock/pile, -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hyn" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/cow, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"hyA" = ( -/obj/structure/closet/dirthole/closed, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"hyL" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town) -"hzg" = ( -/obj/structure/fluff/railing/border{ - dir = 5; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"hzq" = ( -/obj/structure/closet/crate/roguecloset/inn{ - pixel_y = 4 - }, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/tavern/saiga) -"hzN" = ( -/obj/item/rogueore/iron, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"hAo" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"hAw" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"hAB" = ( -/obj/structure/roguemachine/scomm/l, -/obj/machinery/light/rogue/lanternpost/fixed, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"hBb" = ( -/obj/structure/bed/rogue/shit, -/obj/item/clothing/head/roguetown/bardhat, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"hBx" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - lockid = "mage"; - max_integrity = 100000; - name = "wizard's tower" - }, -/obj/structure/roguemachine/camera, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"hBG" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"hBQ" = ( -/obj/structure/table/wood/large/corner_new, -/obj/item/clothing/cloak/raincloak/brown, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"hBY" = ( -/obj/structure/fluff/statue/gargoyle/candles, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/town/roofs) -"hCd" = ( -/obj/structure/fluff/statue/knight/r, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"hCo" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"hCy" = ( -/obj/structure/flora/roguegrass, -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/outdoors/exposed/town) -"hCF" = ( -/obj/structure/bars/pipe{ - dir = 8; - icon_state = "pipe" - }, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/shelter/town/dwarf) -"hCI" = ( -/obj/effect/decal/cobbleedge{ - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"hDd" = ( -/obj/item/reagent_containers/glass/bottle/rogue/water, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"hDi" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors) -"hDn" = ( -/turf/open/floor/rogue/twig, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hDz" = ( -/obj/structure/closet/crate/roguecloset/lord{ - lockid = "bath4"; - name = "locker IV" - }, -/obj/effect/decal/shadow_floor{ - dir = 10 - }, -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"hDE" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/obj/effect/spawner/roguemap/sewerencounter, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/exposed/under/basement) -"hDV" = ( -/obj/structure/mineral_door/bars, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"hDX" = ( -/obj/item/reagent_containers/glass/bottle/ethanol, -/obj/structure/rack/rogue/shelf/biggest{ - name = "fire humors" - }, -/obj/item/reagent_containers/glass/bottle/copper, -/obj/item/reagent_containers/glass/bottle/hydrogen, -/obj/item/reagent_containers/glass/bottle/phosphorus, -/obj/item/reagent_containers/glass/bottle/plasma, -/obj/item/reagent_containers/glass/bottle/welding_fuel, -/obj/item/reagent_containers/glass/bottle/sulfur, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"hDZ" = ( -/obj/structure/roguerock, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"hEa" = ( -/obj/structure/stairs/stone/reddish{ - dir = 1 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath/redhouse) -"hEf" = ( -/obj/item/clothing/cloak/half, -/obj/structure/closet/crate/roguecloset, -/obj/item/rope/chain, -/obj/item/rope/chain, -/obj/item/rope/chain, -/obj/item/rope, -/obj/item/rope, -/obj/item/rope, -/obj/item/flashlight/flare/torch/lantern, -/obj/item/flashlight/flare/torch/lantern, -/obj/item/flashlight/flare/torch/lantern, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"hEl" = ( -/obj/structure/table/vtable, -/obj/item/paper/scroll, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"hGm" = ( -/obj/structure/flora/roguegrass/bush_meagre, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"hGL" = ( -/turf/closed/wall/mineral/rogue/wooddark/end, -/area/rogue/indoors/town/garrison) -"hGR" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 4; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/exposed/manorgarri) -"hHk" = ( -/obj/structure/stairs{ - dir = 1; - icon_state = "stairs" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hHu" = ( -/obj/structure/roguetent, -/obj/effect/decal/cleanable/blood/footprints, -/turf/open/floor/rogue/grass, -/area/rogue/indoors) -"hIe" = ( -/obj/structure/closet/crate/chest/wicker, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"hIX" = ( -/obj/effect/decal/cleanable/blood/puddle, -/mob/living/simple_animal/hostile/zombie, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"hJB" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern/saiga) -"hJE" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 26 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/town) -"hJJ" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town/cell) -"hKo" = ( -/obj/structure/roguerock, -/obj/structure/flora/rock/pile, -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"hKw" = ( -/obj/structure/closet/crate/chest/crate, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern/saiga) -"hKD" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/dwarfin) -"hLd" = ( -/obj/item/ingot/steel, -/turf/closed/mineral/rogue, -/area/rogue/under/cave/spider) -"hLh" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"hLi" = ( -/obj/structure/closet/crate/roguecloset/lord{ - lockid = "bath3"; - name = "locker III" - }, -/obj/effect/decal/shadow_floor{ - dir = 6 - }, -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"hLl" = ( -/obj/structure/bars/cemetery, -/obj/structure/flora/roguegrass, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"hLI" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"hLN" = ( -/obj/structure/roguetent/preopen, -/obj/machinery/light/rogue/wallfire/candle/weak, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"hLY" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/magician) -"hMK" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"hML" = ( -/obj/structure/fermenting_barrel, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"hNl" = ( -/obj/structure/stairs/d{ - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/shop) -"hNx" = ( -/obj/structure/rack/rogue{ - pixel_y = 16 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"hOu" = ( -/obj/machinery/light/rogue/wallfire/candle/weak/l, -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"hOz" = ( -/obj/structure/flora/roguegrass, -/obj/structure/mineral_door/bars, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"hOB" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/storage/belt/rogue/pouch/coins/poor, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak/fried, -/obj/item/reagent_containers/powder/salt, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"hOH" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/flora/rock/pile, -/turf/open/water/river{ - dir = 4 - }, -/area/rogue/outdoors/river) -"hOO" = ( -/obj/structure/fluff/walldeco/vinez/l{ - dir = 4 - }, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"hPb" = ( -/obj/structure/bars/pipe{ - dir = 4; - icon_state = "pipe" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"hPn" = ( -/obj/structure/table/wood/reinf_long{ - dir = 1 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/shop) -"hPp" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/flint, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"hPq" = ( -/obj/structure/mineral_door/wood, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"hPt" = ( -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"hPF" = ( -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hPR" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"hQf" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"hQk" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner, -/area/rogue/indoors/town/bath/redhouse) -"hQC" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 8; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"hQQ" = ( -/obj/structure/flora/roguegrass, -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hQT" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/decal/shadow_floor{ - dir = 6 - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath/redhouse) -"hQV" = ( -/obj/structure/fluff/nest, -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"hRh" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/exposed/magiciantower) -"hRk" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/clothing/neck/roguetown/coif, -/obj/item/storage/belt/rogue/pouch/coins/poor, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak/fried, -/obj/item/clothing/suit/roguetown/shirt/undershirt/priest, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak/fried, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"hRu" = ( -/obj/structure/chair/wood/rogue/chair_noble{ - dir = 4 - }, -/turf/open/floor/carpet/red, -/area/rogue/outdoors/exposed/under/basement) -"hRN" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"hSa" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/item/reagent_containers/food/snacks/rogue/meat/mince/beef, -/obj/item/reagent_containers/food/snacks/rogue/meat/mince/beef, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/structure/closet/crate/chest/neu, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"hSf" = ( -/obj/structure/fluff/statue/knight{ - name = "DVORFUNIL" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/dwarf) -"hTa" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"hTy" = ( -/obj/effect/landmark/start/villager{ - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"hTM" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"hTO" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "garrison" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"hTQ" = ( -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/woods) -"hTZ" = ( -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/mountains) -"hUx" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/outdoors/exposed/magiciantower) -"hUy" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/garrison) -"hUL" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/garrison) -"hUT" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/mountains) -"hVr" = ( -/obj/machinery/light/rogue/wallfire/candle, -/obj/structure/toilet, -/obj/effect/landmark/start/priest, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"hWg" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - lockid = "dungeon" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"hWR" = ( -/obj/effect/decal/cleanable/blood/gibs/up, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"hWY" = ( -/obj/effect/landmark/latejoin, -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/mountains) -"hXk" = ( -/obj/structure/table/wood/plain_alt, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"hXw" = ( -/obj/structure/bars/pipe{ - dir = 10; - icon_state = "pipe" - }, -/turf/closed/wall/mineral/rogue/decostone/fluffstone/reddish, -/area/rogue/indoors/town/bath/redhouse) -"hXJ" = ( -/obj/effect/decal/remains/mole, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"hYf" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/manorgarri) -"hYT" = ( -/obj/structure/spider/stickyweb, -/obj/item/chair/stool/bar/rogue, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"hZn" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 8 - }, -/obj/structure/flora/roguegrass, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hZr" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/church) -"hZD" = ( -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/reagent_containers/glass/bottle/rogue/beer, -/obj/item/reagent_containers/glass/bottle/rogue/beer, -/obj/item/reagent_containers/glass/bottle/rogue/beer, -/obj/item/reagent_containers/glass/bottle/rogue/beer, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"hZE" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"hZM" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"hZR" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town) -"hZX" = ( -/obj/structure/flora/rock/pile, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iaf" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/idagger/silver, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"iap" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/shelter/town/dwarf) -"iaC" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"ibe" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"ibl" = ( -/obj/structure/fluff/statue/tdummy, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"ibq" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ibE" = ( -/obj/structure/roguemachine/mail, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"ibG" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"icE" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/clothing/suit/roguetown/shirt/tunic/random, -/obj/item/clothing/suit/roguetown/shirt/tunic/random, -/obj/item/clothing/suit/roguetown/shirt/dress/gen/sexy, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/under/town/basement) -"icG" = ( -/obj/structure/fluff/walldeco/bath/wallrope, -/turf/closed/wall/mineral/rogue/stonebrick/reddish, -/area/rogue/indoors/town/bath/redhouse) -"icN" = ( -/obj/structure/closet/crate/roguecloset/dark, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"idj" = ( -/obj/structure/flora/roguegrass/bush/wall, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"idx" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"idH" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"idU" = ( -/obj/effect/decal/cleanable/blood/gibs/limb{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 6 - }, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"iek" = ( -/obj/item/roguestatue/steel, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"ieq" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/spider, -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/item/ingot/steel, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"ieC" = ( -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/exposed/manorgarri) -"ifd" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/mountains) -"ifj" = ( -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"ifq" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/wolf, -/obj/effect/sunlight, -/obj/effect/decal/remains/wolf, -/turf/open/transparent/openspace, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"ifJ" = ( -/obj/structure/fluff/railing/border{ - dir = 9; - icon_state = "border" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/manorgarri) -"igK" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"igN" = ( -/obj/structure/stairs/stone/reddish, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath/redhouse) -"ihc" = ( -/mob/living/carbon/human/species/human/northern/bum/ambush, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"ihA" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"ihM" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"ihX" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/flora/roguetree/burnt, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"iim" = ( -/obj/structure/winch{ - dir = 1; - gid = "keepin" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"iiH" = ( -/obj/structure/mineral_door/wood/violet{ - locked = 1; - lockid = "nightmaiden"; - name = "roof access" - }, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/bath/redhouse) -"ije" = ( -/obj/structure/fluff/walldeco/bigpainting, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ijn" = ( -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors) -"ijC" = ( -/obj/structure/stairs{ - dir = 1; - icon_state = "stairs" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ijK" = ( -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"ikx" = ( -/obj/structure/fluff/railing/wood, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/dwarf) -"ikE" = ( -/obj/item/natural/rock/copper, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/shelter/town/dwarf) -"ikR" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "tablewood2" - }, -/obj/item/fishingrod/crafted, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/shelter/bog) -"ilE" = ( -/obj/structure/fluff/clodpile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"imT" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"inx" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/natural/bundle/stick, -/obj/item/natural/bundle/stick, -/obj/item/flint, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/natural/cloth, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"inB" = ( -/obj/structure/fluff/walldeco/goblet{ - name = "Mercator Guild sign"; - pixel_y = -19 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"inD" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/shelter/town/dwarf) -"iox" = ( -/obj/item/roguebin, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town) -"ioQ" = ( -/obj/structure/flora/ausbushes/ppflowers, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"ioS" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"ipr" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"ipX" = ( -/obj/item/roguebin/water/gross, -/obj/structure/bars/pipe{ - dir = 1; - icon_state = "pipe" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"iqb" = ( -/obj/structure/fermenting_barrel, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/church) -"iqf" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/paper{ - pixel_y = 7 - }, -/obj/item/paper{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/natural/feather{ - pixel_x = 3; - pixel_y = 9 - }, -/turf/open/floor/carpet/inn, -/area/rogue/under/town/basement) -"iqm" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/rack/rogue/shelf/biggest, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"iqN" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 4; - icon_state = "wooddir"; - locked = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"iqT" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/church) -"iqZ" = ( -/obj/structure/flora/rock/pile, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"irT" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"irY" = ( -/obj/structure/fluff/clock, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"isc" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/sword/sabre/dec, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"isk" = ( -/obj/structure/bars, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/cell) -"iso" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/church) -"ist" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 8 - }, -/area/rogue/indoors/shelter/mountains/decap) -"isQ" = ( -/obj/item/chair/stool/bar/rogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"isW" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"itF" = ( -/obj/structure/fluff/clodpile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"iuE" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/statue/gargoyle/moss, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/sewer) -"ivi" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/shelter/mountains/decap) -"ivG" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ivL" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/fluff/railing/wood{ - dir = 4; - icon_state = "woodrailing" - }, -/obj/structure/flora/roguegrass, -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"iwd" = ( -/obj/structure/fluff/walldeco/painting/seraphina{ - pixel_x = -32 - }, -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"iwo" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8; - icon_state = "tracks" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iwt" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/decal/shadow_floor{ - dir = 4 - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath/redhouse) -"iwE" = ( -/obj/structure/ladder, -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/obj/structure/fluff/statue/gargoyle/moss, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"iwL" = ( -/obj/structure/lever{ - name = "The Lever"; - redstone_id = "volfpit" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"iwS" = ( -/obj/structure/bars/pipe{ - dir = 4; - icon_state = "pipe" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/dwarf) -"iwZ" = ( -/obj/structure/lever/wall{ - dir = 4; - redstone_id = "warehouse_shutter" - }, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"ixh" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/closet/crate/roguecloset/dark{ - locked = 1; - lockid = "mage"; - name = "secret projectes" - }, -/obj/item/ship_in_a_bottle, -/obj/item/bomb{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/trash/applecore, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"ixW" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - lockid = "church" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/church) -"ixZ" = ( -/obj/item/reagent_containers/glass/bottle/mercury, -/obj/item/reagent_containers/glass/bottle/nitrogen, -/obj/structure/rack/rogue/shelf/biggest{ - name = "water humors" - }, -/obj/item/reagent_containers/glass/bottle/lithium, -/obj/item/reagent_containers/glass/bottle/ammonia, -/obj/item/reagent_containers/glass/bottle/fluorine, -/obj/item/reagent_containers/glass/bottle/rogue/manapot, -/obj/item/reagent_containers/glass/bottle/rogue/water, -/obj/item/reagent_containers/glass/bottle/sodium, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"iyb" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/magiciantower) -"iyr" = ( -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"iyB" = ( -/obj/structure/stairs/stone, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/exposed/under/sewer) -"izd" = ( -/obj/structure/bed/rogue/shit, -/obj/item/clothing/head/roguetown/helmet/leather/inquisitor, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"izo" = ( -/obj/structure/fluff/walldeco/vinez/l, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"iAL" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"iAT" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iBh" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/under/town/basement) -"iBi" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iBH" = ( -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/shop) -"iBQ" = ( -/obj/structure/roguetent/preopen, -/obj/structure/fluff/walldeco/bath/wallrope{ - dir = 8 - }, -/obj/structure/fluff/walldeco/bath/wallrope{ - dir = 4 - }, -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"iBU" = ( -/obj/structure/mineral_door/wood/deadbolt{ - locked = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"iCp" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"iDr" = ( -/obj/structure/rack/rogue, -/obj/item/keyring/guardcastle, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/garrison) -"iDN" = ( -/turf/closed/mineral/rogue, -/area/rogue/indoors/shelter/mountains) -"iDQ" = ( -/obj/structure/closet/crate/roguecloset/crafted, -/obj/item/clothing/head/roguetown/jester, -/obj/item/clothing/mask/gas/sexymime{ - name = "pantomime mask" - }, -/obj/item/clothing/mask/pig, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"iEe" = ( -/obj/structure/closet/crate/chest/neu_iron, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/indoors/town/vault) -"iEt" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 8 - }, -/area/rogue/indoors/town/magician) -"iEP" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"iEZ" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"iFi" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"iFv" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 4; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/dwarfin) -"iFF" = ( -/obj/structure/fluff/railing/border, -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/cell) -"iGb" = ( -/obj/structure/table/wood/reinforced_alter, -/obj/structure/bars/alt, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/town/dwarf) -"iGd" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"iGn" = ( -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/dwarfin) -"iGx" = ( -/obj/structure/closet/crate/chest/wicker, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/obj/item/reagent_containers/food/snacks/produce/apple, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"iGU" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 4; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/dwarf) -"iHl" = ( -/obj/structure/spider/eggcluster, -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/item/rogueweapon/shovel, -/obj/item/rogueore/coal, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"iHy" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"iIb" = ( -/obj/structure/table/wood/plain_alt, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"iIc" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/town/roofs) -"iId" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"iIo" = ( -/obj/machinery/light/rogue/firebowl/standing{ - density = 0; - pixel_x = -9 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"iIr" = ( -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"iJu" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"iJK" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "blacksmith" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"iJO" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"iJP" = ( -/obj/effect/decal/cleanable/blood/gibs/limb, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"iKc" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/fluff/walldeco/innsign{ - pixel_x = 32 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"iKe" = ( -/obj/structure/bed/rogue/wooldouble, -/obj/item/bedsheet/rogue/double_pelt, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/tavern/saiga) -"iLu" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iLy" = ( -/obj/structure/roguewindow/openclose{ - dir = 1; - icon_state = "woodwindowdir" - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"iLF" = ( -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"iLK" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"iMD" = ( -/obj/structure/bars/grille, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"iMX" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"iNk" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"iNo" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"iNB" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"iNQ" = ( -/obj/structure/flora/roguegrass/bush_meagre, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iNR" = ( -/obj/structure/table/wood/nice/decorated, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"iNY" = ( -/obj/structure/chair/bench/ancientlog, -/turf/open/water/swamp, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iOn" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains) -"iOI" = ( -/obj/structure/fluff/walldeco/bath/wallrope{ - dir = 4 - }, -/turf/closed/wall/mineral/rogue/stonebrick/reddish, -/area/rogue/indoors/town/bath/redhouse) -"iOR" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"iQt" = ( -/obj/effect/decal/remains/human, -/obj/item/roguecoin/copper, -/obj/item/roguecoin/copper, -/turf/open/floor/rogue/dirt, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"iRp" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town/cell) -"iRs" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"iTj" = ( -/obj/effect/landmark/start/monk, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/church/chapel) -"iTK" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/dwarf) -"iTU" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue) -"iUb" = ( -/obj/structure/fluff/psycross/crafted, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"iUk" = ( -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue/under/town/basement) -"iUY" = ( -/obj/structure/fluff/statue/knight/r, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town) -"iVi" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iVM" = ( -/turf/open/water/cleanshallow, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iWf" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"iWt" = ( -/obj/structure/closet/crate/roguecloset/lord, -/obj/item/kitchen/fork, -/obj/item/kitchen/fork, -/obj/item/kitchen/fork, -/obj/item/kitchen/fork, -/obj/item/kitchen/fork, -/obj/item/kitchen/fork, -/obj/item/kitchen/spoon/plastic, -/obj/item/kitchen/spoon/plastic, -/obj/item/kitchen/spoon/plastic, -/obj/item/kitchen/spoon/plastic, -/obj/item/kitchen/spoon/plastic, -/obj/item/kitchen/spoon/plastic, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"iWN" = ( -/obj/structure/bars/pipe{ - dir = 8; - icon_state = "pipe" - }, -/obj/structure/bars/pipe{ - dir = 6; - icon_state = "pipe" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"iXi" = ( -/obj/structure/fluff/railing/fence{ - dir = 4; - icon_state = "fence" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"iXr" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"iYv" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"iZa" = ( -/obj/item/natural/stone, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/dwarf) -"jaf" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"jam" = ( -/obj/structure/rack/rogue, -/obj/item/quiver/arrows, -/obj/item/gun/ballistic/revolver/grenadelauncher/bow, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"jap" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"jav" = ( -/obj/structure/toilet, -/obj/item/natural/poo, -/mob/living/carbon/human/species/human/northern/bum{ - aggressive = 1; - name = "creep" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"jaP" = ( -/turf/open/water/swamp/deep, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jbd" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "dungeon" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"jbl" = ( -/obj/machinery/light/rogue/hearth, -/obj/item/cooking/pan, -/obj/item/reagent_containers/food/snacks/rogue/friedegg, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"jbv" = ( -/obj/item/reagent_containers/food/snacks/crow, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"jbw" = ( -/obj/structure/roguetent/preopen, -/obj/structure/fluff/walldeco/bath/wallrope{ - dir = 4 - }, -/obj/structure/fluff/walldeco/bath/wallrope{ - dir = 8 - }, -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"jbx" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "tablewood2" - }, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"jbJ" = ( -/obj/effect/decal/cobbleedge, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"jbK" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - name = "pantry" - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"jbL" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/church) -"jcn" = ( -/obj/structure/fluff/statue/small, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"jcv" = ( -/turf/open/floor/rogue/ruinedwood, -/area/rogue) -"jcR" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/woods) -"jek" = ( -/obj/structure/bars/pipe, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/shelter/town/dwarf) -"jes" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/manorgarri) -"jeC" = ( -/obj/structure/fluff/customsign{ - desc = "Fyrst left - Solt Pyt, kep goyng west fore mynes."; - name = "MINES" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jeN" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/toilet, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"jeY" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"jfx" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 1; - icon_state = "wooddir" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"jfB" = ( -/obj/structure/fluff/walldeco/masonflag{ - pixel_y = 32 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"jfH" = ( -/obj/structure/fluff/clodpile, -/obj/structure/bars/pipe{ - dir = 1; - icon_state = "pipe" - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"jge" = ( -/obj/structure/rack/rogue, -/obj/item/natural/cloth, -/obj/item/natural/cloth, -/obj/effect/decal/shadow_floor, -/obj/item/candle/yellow/lit/infinite/strong{ - pixel_x = 0; - pixel_y = 32 - }, -/obj/structure/rack/rogue/shelf/notdense, -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"jgk" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/cell) -"jgY" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"jhi" = ( -/obj/structure/spider/stickyweb, -/obj/item/clothing/ring/gold, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"jhJ" = ( -/obj/structure/nocdevice{ - pixel_y = 1 - }, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/magician) -"jhK" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/villager, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"jhL" = ( -/obj/structure/roguemachine/scomm/r, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"jih" = ( -/obj/structure/roguemachine/scomm, -/obj/effect/landmark/start/jester{ - dir = 4; - icon_state = "arrow" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"jiZ" = ( -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/indoors/town) -"jja" = ( -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"jjx" = ( -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/magiciantower) -"jjF" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jjV" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueweapon/spear, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"jkc" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"jkt" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"jkv" = ( -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jkx" = ( -/turf/open/water/swamp, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jkQ" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jkR" = ( -/obj/structure/ladder, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"jlJ" = ( -/obj/structure/stairs/stone, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/sewer) -"jlO" = ( -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jma" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/bull, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"jml" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"jmK" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jmX" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"jne" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"jnF" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/outdoors/mountains) -"jnK" = ( -/obj/structure/roguerock, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"jnQ" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 1; - lockid = "walls" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"jnS" = ( -/obj/structure/rack/rogue, -/obj/effect/decal/cleanable/dirt/cobweb{ - dir = 1 - }, -/obj/item/ammo_casing/caseless/rogue/bullet, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"jon" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jpH" = ( -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue/indoors/town/garrison) -"jpJ" = ( -/obj/structure/fluff/walldeco/vinez/l{ - dir = 4 - }, -/obj/structure/fluff/walldeco/vinez/offset{ - dir = 5 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jpW" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/goatmale{ - aggressive = 1; - name = "mountain goat"; - wander = 0 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/indoors/shelter/mountains) -"jqC" = ( -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"jqM" = ( -/obj/structure/stairs{ - dir = 4; - icon_state = "stairs" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern/saiga) -"jqP" = ( -/obj/effect/decal/cobbleedge{ - dir = 1 - }, -/obj/machinery/light/rogue/wallfire/candle/lamp{ - pixel_y = -32 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"jrk" = ( -/obj/item/roguestatue/silver/gnome, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/magician) -"jrP" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"jrU" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "blacksmith" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/shelter/town/dwarf) -"jsb" = ( -/obj/structure/fluff/traveltile{ - aportalgoesto = "bogrtin2"; - aportalid = "bogrtout2" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jsn" = ( -/turf/open/floor/rogue/twig, -/area/rogue/outdoors/mountains) -"jtc" = ( -/obj/structure/disposalpipe/broken{ - dir = 4 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"jtB" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/mountains) -"juf" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/mountains) -"juC" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "archive" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"jvj" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains) -"jvw" = ( -/obj/structure/fluff/railing/border, -/obj/structure/bed/rogue/shit, -/obj/item/bedsheet/rogue/pelt, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"jvP" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/garrison) -"jvY" = ( -/obj/item/reagent_containers/food/snacks/fat/salo, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/structure/closet/crate/chest/neu, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"jwk" = ( -/turf/closed/mineral/rogue, -/area/rogue/under/town/basement) -"jwm" = ( -/obj/item/chair/stool/bar/rogue, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jwr" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 4; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"jwS" = ( -/obj/structure/roguewindow/openclose{ - dir = 1; - icon_state = "woodwindowdir" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"jyq" = ( -/obj/effect/decal/cleanable/dirt/cobweb{ - dir = 1 - }, -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/obj/structure/bed/rogue, -/obj/item/bedsheet/rogue/pelt, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/magician) -"jyv" = ( -/turf/closed/mineral/rogue/salt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jyw" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/mountains) -"jyR" = ( -/obj/structure/fermenting_barrel/random/beer, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/tavern/saiga) -"jyY" = ( -/obj/structure/stairs/stone{ - dir = 8 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"jzs" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable" - }, -/obj/item/natural/feather, -/obj/item/candle/yellow/lit, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"jzA" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/bigrat, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"jAe" = ( -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/cell) -"jAn" = ( -/obj/structure/bars/grille, -/turf/open/water/swamp, -/area/rogue/under/town/basement) -"jAy" = ( -/obj/effect/landmark/mapGenerator/rogue/roguetownfield, -/turf/closed/mineral/rogue/bedrock, -/area/rogue) -"jAK" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 9 - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"jAV" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/shop) -"jBh" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/rock/pile, -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jBJ" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"jBZ" = ( -/obj/structure/fluff/statue/gargoyle/moss/candles, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/town) -"jCI" = ( -/obj/effect/landmark/start/veteran, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"jCP" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/mountains) -"jDf" = ( -/obj/effect/decal/cleanable/blood/gibs/limb, -/obj/item/roguecoin/copper, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jDn" = ( -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"jDF" = ( -/obj/structure/flora/roguegrass/bush_meagre, -/obj/structure/fluff/railing/fence{ - dir = 1; - icon_state = "fence" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jDN" = ( -/obj/structure/closet/crate/chest/neu_iron, -/obj/item/candle/yellow, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"jDX" = ( -/obj/machinery/light/rogue/wallfire/candle/blue/l, -/turf/open/floor/rogue/metal, -/area/rogue/indoors/town) -"jDZ" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 8 - }, -/area/rogue/indoors/shelter/mountains/decap) -"jEK" = ( -/obj/item/rogueweapon/tongs, -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"jEO" = ( -/turf/closed/wall/mineral/rogue/decostone/cand, -/area/rogue/indoors) -"jEV" = ( -/obj/structure/mineral_door/wood/fancywood{ - name = "privy" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"jFh" = ( -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 5; - icon_state = "border" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"jFj" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"jFA" = ( -/obj/structure/bed/rogue/mediocre, -/obj/structure/bed/rogue/shit, -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"jFP" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/decal/cleanable/blood/gibs/down, -/obj/item/roguecoin/copper, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jFQ" = ( -/obj/structure/fluff/railing/border{ - dir = 9; - icon_state = "border" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath/redhouse) -"jGc" = ( -/obj/structure/fluff/walldeco/bath/wallrope{ - dir = 8 - }, -/turf/closed/wall/mineral/rogue/stonebrick/reddish, -/area/rogue/indoors/town/bath/redhouse) -"jGo" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"jGr" = ( -/obj/structure/fermenting_barrel/random/beer, -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"jGA" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/bog) -"jGD" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"jGG" = ( -/obj/structure/closet/dirthole/grave, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jGY" = ( -/obj/structure/flora/rock/pile, -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jHi" = ( -/obj/structure/fluff/railing/wood, -/turf/open/transparent/openspace, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"jHy" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/structure/rack/rogue, -/obj/item/rogueweapon/woodcut, -/obj/item/rogueweapon/woodcut, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/garrison) -"jIv" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"jIR" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"jIU" = ( -/obj/structure/flora/roguegrass/water, -/obj/structure/roguerock, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jJO" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/garrison) -"jLa" = ( -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/dwarf) -"jLu" = ( -/obj/effect/decal/remains/wolf, -/obj/item/ammo_casing/caseless/rogue/bolt, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jMn" = ( -/obj/structure/fluff/psycross/crafted, -/obj/structure/flora/roguegrass, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jMp" = ( -/obj/structure/stairs/stone{ - dir = 4; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"jNs" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/rtfield) -"jNH" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/sword/iron/short, -/obj/item/rogueweapon/sword/iron/short, -/obj/item/rogueweapon/sword/iron/messer, -/obj/item/rogueweapon/sword/iron/messer, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"jNI" = ( -/obj/item/roguebin/water/gross, -/obj/structure/fluff/walldeco/bath/wallpipes{ - pixel_x = 16; - pixel_y = 23 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"jOm" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/structure/flora/roguegrass, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/exposed/under/basement) -"jOn" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"jOr" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/structure/spider/cocoon, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"jOB" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/outdoors/exposed/under/basement) -"jPp" = ( -/obj/item/rogueweapon/sword/long/exe, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"jPr" = ( -/obj/item/reagent_containers/glass/cup/wooden, -/obj/effect/decal/cleanable/vomit/old, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"jPX" = ( -/obj/item/flashlight/lantern/shrunken, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"jRb" = ( -/obj/machinery/light/rogue/campfire/densefire, -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jRc" = ( -/obj/structure/fluff/railing/border, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"jRf" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jSb" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/town) -"jTc" = ( -/obj/effect/landmark/start/puritan, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"jTK" = ( -/obj/effect/landmark/start/butler, -/turf/open/floor/rogue/tile/checker, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"jTR" = ( -/obj/effect/decal/cleanable/blood/gibs/core, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"jTS" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcr"; - locked = 1; - lockid = "garrison" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"jTV" = ( -/obj/structure/fermenting_barrel/water, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"jUp" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"jUD" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomiv"; - name = "Wanderer room" - }, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern/saiga) -"jUG" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 8 - }, -/area/rogue) -"jUW" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"jVk" = ( -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/dwarf) -"jVq" = ( -/obj/structure/mineral_door/wood/window{ - locked = 1; - lockid = "tavern"; - name = "kitchen" - }, -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/tile/checkeralt, -/area/rogue/indoors/town/tavern/saiga) -"jVr" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/saigabuck/tame, -/turf/open/floor/rogue/dirt, -/area/rogue) -"jVD" = ( -/obj/structure/fluff/walldeco/steward{ - dir = 1; - icon_state = "steward"; - name = "BANK OF ROCKHAMLET" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"jWl" = ( -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/bog) -"jWp" = ( -/obj/item/clothing/shoes/roguetown/shortboots, -/mob/living/carbon/human/species/human/northern/bum/ambush, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"jWx" = ( -/obj/structure/ladder, -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"jWB" = ( -/obj/structure/bars/pipe, -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"jWE" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "horzw" - }, -/area/rogue/indoors/town/church) -"jXo" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"jXz" = ( -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"jXM" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/structure/flora/roguegrass, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/exposed/under/basement) -"jYl" = ( -/obj/effect/decal/remains/xeno/larva{ - desc = "Truely, nothing is sacred."; - name = "child's remains" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"jYy" = ( -/obj/structure/stairs{ - dir = 4; - icon_state = "stairs" - }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"jYJ" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueweapon/shield/tower/metal, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"jYW" = ( -/obj/structure/fluff/railing/border{ - dir = 9; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/effect/turf_decal/stripes/red, -/obj/effect/turf_decal/stripes/red/line, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town) -"jZm" = ( -/turf/open/floor/rogue/tile/checker_green, -/area/rogue/indoors/town/tavern/saiga) -"jZz" = ( -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"jZE" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"jZF" = ( -/obj/structure/bars/pipe{ - dir = 10; - icon_state = "pipe" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"kas" = ( -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"kbl" = ( -/turf/open/floor/rogue/carpet/lord/right, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kbJ" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/spider, -/obj/structure/spider/stickyweb, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"kch" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/church) -"kcx" = ( -/obj/structure/roguemachine/scomm/r, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"kdB" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue) -"kdD" = ( -/obj/item/reagent_containers/glass/bottle/potion/flight, -/obj/structure/rack/rogue/shelf/biggest{ - name = "air humors" - }, -/obj/item/reagent_containers/glass/bottle/oxygen, -/obj/item/reagent_containers/glass/bottle/aluminium, -/obj/item/reagent_containers/glass/bottle/silver, -/obj/item/reagent_containers/glass/bottle/sugar, -/obj/item/reagent_containers/glass/bottle/sacid, -/obj/item/reagent_containers/glass/bottle/chloralhydrate, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"kdG" = ( -/obj/structure/closet/crate/drawer/inn{ - pixel_y = 4 - }, -/obj/item/rope, -/obj/item/book/rogue/sword, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"kdL" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"kdQ" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"keh" = ( -/obj/machinery/light/rogue/wallfire/candle/blue/l, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"kel" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/item/rogueweapon/huntingknife/stoneknife, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/shelter/bog) -"keH" = ( -/turf/open/floor/rogue/ruinedwood/turned, -/area/rogue/outdoors/bog) -"kft" = ( -/obj/structure/closet/crate/roguecloset/crafted, -/obj/item/rogueweapon/pick, -/obj/item/rogueweapon/pick, -/obj/item/rogueweapon/shovel, -/obj/item/rogueweapon/shovel, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"kfw" = ( -/obj/effect/landmark/start/manorguardsman, -/turf/open/floor/rogue/carpet/lord/right, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kgX" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"khd" = ( -/obj/structure/fluff/railing/stonehedge, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"khg" = ( -/obj/structure/closet/crate/chest/neu_iron, -/obj/item/clothing/ring/silver, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/indoors/town/vault) -"khl" = ( -/obj/structure/ladder/earth, -/obj/structure/fermenting_barrel, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"kho" = ( -/obj/structure/fluff/walldeco/masonflag{ - pixel_x = -32 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"khr" = ( -/obj/structure/flora/roguegrass/bush_meagre, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"khv" = ( -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/turf/open/floor/rogue/ruinedwood/turned, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"khQ" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/obj/structure/flora/roguegrass/bush/wall, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"kiI" = ( -/obj/item/roguebin/alt, -/obj/structure/fluff/walldeco/bath/six, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath/redhouse) -"kiO" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"kiP" = ( -/obj/structure/closet/crate/chest/crate, -/obj/item/flashlight/flare/torch/lantern, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"kjb" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kjq" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"kki" = ( -/obj/item/rogueweapon/sickle, -/obj/structure/table/wood/plain_alt, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"kkl" = ( -/obj/structure/fluff/walldeco/masonflag{ - pixel_x = -32 - }, -/obj/structure/closet/crate/chest/neu_iron, -/obj/item/clothing/mask/cigarette/pipe/westman, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"kkq" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"kku" = ( -/obj/structure/fluff/walldeco/wantedposter, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"kkJ" = ( -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"klW" = ( -/obj/item/reagent_containers/food/snacks/rogue/meat/salami, -/obj/item/reagent_containers/food/snacks/rogue/meat/salami, -/obj/structure/closet/crate/chest/old_crate, -/obj/item/reagent_containers/food/snacks/rogue/cheddar, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/bath/redhouse) -"kmf" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/rtfield) -"kmk" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 1 - }, -/area/rogue/indoors/town/magician) -"kmu" = ( -/obj/structure/fermenting_barrel/random/beer, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"kmE" = ( -/obj/structure/mirror/alt{ - pixel_x = 28; - pixel_y = 0 - }, -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/under/town/basement) -"kmF" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"kmL" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "manor" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kmR" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town/shop) -"kmU" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"knM" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"koX" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"kpf" = ( -/obj/structure/table/wood, -/obj/structure/bars{ - icon_state = "barsbent"; - layer = 2.81 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"kpt" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"kqd" = ( -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kqy" = ( -/obj/effect/decal/shadow_floor{ - dir = 4 - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath/redhouse) -"kqz" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "manor" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"kqA" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors) -"krw" = ( -/obj/structure/closet/crate/chest/neu_iron, -/obj/item/rogue/painting/queen, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/indoors/town/vault) -"ksi" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 8; - icon_state = "endwooddark" - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ksr" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"ksN" = ( -/obj/effect/decal/cleanable/blood/gibs/down, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"ksQ" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 8; - icon_state = "endwooddark" - }, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"ksW" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ktl" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kun" = ( -/obj/structure/bed/rogue/shit, -/obj/effect/landmark/start/prisoner{ - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"kup" = ( -/obj/structure/fluff/walldeco/bath/wallrope{ - dir = 5 - }, -/turf/closed/wall/mineral/rogue/stonebrick/reddish, -/area/rogue/indoors/town/bath/redhouse) -"kux" = ( -/obj/structure/bars/passage/shutter{ - redstone_id = "warehouse_shutter" - }, -/turf/open/floor/rogue/metal/barograte, -/area/rogue/indoors/town) -"kuA" = ( -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath/redhouse) -"kuC" = ( -/obj/structure/roguemachine/scomm{ - pixel_y = -32 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"kuJ" = ( -/obj/structure/table/wood/plain_alt, -/obj/item/candle/yellow/lit/infinite/strong, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern/saiga) -"kuQ" = ( -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/gun/ballistic/revolver/grenadelauncher/crossbow, -/obj/item/quiver/bolts, -/obj/item/clothing/suit/roguetown/armor/leather/vest, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"kvv" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/under/town/basement) -"kvS" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/indoors/town/church) -"kwb" = ( -/obj/item/book/rogue/abyssor, -/obj/structure/bookcase, -/obj/item/book/rogue/noc, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"kwe" = ( -/obj/structure/flora/roguegrass, -/obj/item/roguebin, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"kwX" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"kwY" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains) -"kxd" = ( -/obj/structure/flora/roguegrass, -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kxm" = ( -/obj/structure/fluff/walldeco/bath/ladies, -/obj/effect/decal/shadow_floor, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath/redhouse) -"kxy" = ( -/obj/structure/mineral_door/wood/window{ - locked = 1; - lockid = "manor" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kxE" = ( -/obj/structure/rack/rogue, -/obj/item/natural/saddle, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"kyb" = ( -/obj/structure/table/wood/plain_alt, -/obj/structure/bars{ - icon_state = "barsbent"; - layer = 2.81 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/church) -"kyH" = ( -/obj/structure/fluff/railing/border, -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town/cell) -"kyS" = ( -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"kzR" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 8; - lockid = "steward"; - name = "warehouse" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"kzV" = ( -/obj/structure/bars, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"kAi" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kAp" = ( -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath/redhouse) -"kAz" = ( -/obj/structure/flora/roguegrass/bush/wall/tall, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"kAR" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/structure/fluff/walldeco/bath/wallrope{ - dir = 8; - pixel_y = -32 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"kBi" = ( -/turf/open/floor/rogue/dirt, -/area/rogue) -"kBr" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"kBA" = ( -/obj/structure/roguemachine/balloon_pad, -/obj/item/reagent_containers/food/snacks/crow, -/turf/open/floor/rogue/tile, -/area/rogue/outdoors/town/roofs) -"kBD" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kBN" = ( -/obj/structure/rack/rogue/shelf{ - density = 0 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"kCd" = ( -/obj/structure/chair/wood/rogue{ - dir = 1; - icon_state = "chair2" - }, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/tavern/saiga) -"kCq" = ( -/obj/structure/closet/crate/chest/neu, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kCS" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kDH" = ( -/obj/structure/chair/bench/ancientlog, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kEI" = ( -/obj/effect/decal/cleanable/blood/footprints, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"kFp" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/indoors/cave) -"kFE" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town/vault) -"kFP" = ( -/obj/structure/stairs/stone{ - dir = 4; - icon_state = "stonestairs" - }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kFZ" = ( -/obj/structure/mirror/alt, -/obj/effect/decal/shadow_floor, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath/redhouse) -"kGq" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"kGw" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"kGD" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/shelter/mountains/decap) -"kGL" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains) -"kGN" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"kGQ" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"kHK" = ( -/obj/structure/spider/stickyweb, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/flint, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"kHV" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains/decap) -"kIw" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern/saiga) -"kJB" = ( -/obj/structure/roguewindow/openclose, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"kJP" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kJT" = ( -/obj/item/reagent_containers/food/snacks/crow{ - dir = 1; - icon_state = "crow" - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kKa" = ( -/obj/structure/chair/wood/rogue{ - dir = 1; - icon_state = "chair2" - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kKg" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/dwarf) -"kKV" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/obj/effect/decal/cobbleedge, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"kLy" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kLz" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/structure/fluff/walldeco/maidensigil, -/obj/item/roguestatue/gold, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/indoors/town/vault) -"kLA" = ( -/turf/open/transparent/openspace, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"kLI" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/remains/saiga, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kLM" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"kLR" = ( -/obj/structure/fluff/walldeco/wallshield{ - name = "DVORFTOSID"; - pixel_y = 32 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/dwarf) -"kML" = ( -/turf/closed/mineral/random/rogue/med, -/area/rogue/indoors) -"kNj" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/shelter/mountains) -"kNA" = ( -/obj/structure/bed/rogue, -/mob/living/simple_animal/hostile/retaliate/rogue/spider, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"kOq" = ( -/obj/structure/ladder/earth, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"kOz" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kPs" = ( -/obj/structure/bed/rogue/inn/double, -/obj/item/bedsheet/rogue/double_pelt, -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"kPP" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 1 - }, -/area/rogue/indoors/town) -"kPS" = ( -/obj/structure/bed/rogue/mediocre, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"kPU" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/manorgarri) -"kQy" = ( -/obj/item/grown/log/tree/stake, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"kQF" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/shelter/rtfield) -"kRE" = ( -/obj/structure/chair/wood/rogue{ - dir = 4; - icon_state = "chair2" - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"kRH" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/bog) -"kSL" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/church) -"kTh" = ( -/obj/structure/spider/cocoon, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"kTK" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"kVS" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/obj/structure/gate/bars/preopen{ - gid = "thronein" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"kVX" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town) -"kVZ" = ( -/obj/structure/fluff/wallclock, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kWe" = ( -/obj/structure/chair/bench/ancientlog, -/turf/open/water/river{ - dir = 4 - }, -/area/rogue/outdoors/river) -"kWt" = ( -/obj/effect/decal/remains/human{ - desc = "For the love of god, Montressor!" - }, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"kWv" = ( -/obj/structure/bed/rogue/wooldouble, -/obj/item/bedsheet/rogue/fabric_double, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/bath/redhouse) -"kXc" = ( -/obj/structure/rack/rogue{ - pixel_y = 6 - }, -/obj/item/quiver/bolts, -/obj/item/gun/ballistic/revolver/grenadelauncher/crossbow{ - pixel_y = 7 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kXd" = ( -/obj/item/restraints/legcuffs/beartrap/armed, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"kXe" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/woodstaff/aries, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"kXo" = ( -/obj/machinery/light/rogue/oven/south, -/turf/open/floor/rogue/ruinedwood/turned, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"kXJ" = ( -/obj/structure/closet/dirthole/grave, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"kYQ" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/fence{ - dir = 1; - icon_state = "fence" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"kZh" = ( -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguegrass, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"lay" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"laK" = ( -/obj/structure/fermenting_barrel/water, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/mountains) -"laX" = ( -/obj/structure/rack/rogue/shelf/biggest, -/obj/item/reagent_containers/glass/bottle/rogue, -/obj/item/reagent_containers/glass/bottle/rogue, -/obj/item/reagent_containers/glass/bottle/rogue, -/obj/item/reagent_containers/glass/bottle/rogue, -/obj/item/reagent_containers/glass/bottle/rogue, -/obj/item/reagent_containers/glass/bottle/rogue, -/obj/item/reagent_containers/glass/bottle/rogue, -/obj/item/reagent_containers/glass/bottle/rogue, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"lbE" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/wolf, -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/decal/remains/xeno/larva{ - desc = "Truely, nothing is sacred."; - name = "child's remains" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"lcc" = ( -/obj/structure/fluff/railing/fence, -/obj/structure/fluff/railing/fence{ - dir = 8; - icon_state = "fence" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"lcf" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcr"; - locked = 1; - lockid = "sheriff" - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"lcy" = ( -/obj/structure/closet/dirthole/closed, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lcQ" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"lcU" = ( -/obj/structure/roguewindow/openclose{ - dir = 4; - icon_state = "woodwindowdir" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"lcY" = ( -/obj/effect/decal/cleanable/blood/gibs/limb{ - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"ldB" = ( -/obj/machinery/light/rogue/firebowl/stump, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"ldZ" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"les" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/under/town/basement) -"ley" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"lfg" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"lfI" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"lgd" = ( -/obj/structure/fluff/railing/fence{ - dir = 8; - icon_state = "fence" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"lhc" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/outdoors/exposed/under/basement) -"lhh" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/item/ash, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"lhw" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/stonehedge{ - dir = 4 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"lhF" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 4 - }, -/area/rogue) -"lhP" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "tablewood1" - }, -/obj/item/storage/pill_bottle/dice, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"lif" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lil" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"lip" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"liD" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/natural/worms/leech, -/obj/item/natural/worms/leech, -/obj/item/natural/worms/leech, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"ljh" = ( -/obj/structure/kneestingers, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"ljr" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"ljs" = ( -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ljz" = ( -/turf/closed/wall/mineral/rogue/tent, -/area/rogue) -"lkj" = ( -/obj/item/reagent_containers/glass/bottle/iodine, -/obj/item/reagent_containers/glass/bottle/iron, -/obj/item/reagent_containers/glass/bottle/killer/weedkiller, -/obj/structure/rack/rogue/shelf/biggest{ - name = "earth humors" - }, -/obj/item/reagent_containers/glass/bottle/carbon, -/obj/item/reagent_containers/glass/bottle/potassium, -/obj/item/reagent_containers/glass/bottle/nutrient, -/obj/item/reagent_containers/glass/bottle/formaldehyde, -/obj/item/reagent_containers/glass/bottle/radium, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"lkC" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/obj/item/rogueweapon/huntingknife/stoneknife, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lkI" = ( -/obj/structure/table/wood/plain_alt, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/shop) -"llk" = ( -/obj/structure/table/wood/reinf_long, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/shop) -"llQ" = ( -/obj/structure/mineral_door/wood/donjon{ - lockid = "dungeon" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"llW" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"lmp" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/keyring/guard, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"lmR" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"lnu" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/mountains/decap) -"lok" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"lop" = ( -/obj/structure/closet/crate/coffin, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"lov" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/old, -/mob/living/carbon/human/species/orc/warrior, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"lpb" = ( -/obj/structure/fluff/railing/fence{ - dir = 1; - icon_state = "fence" - }, -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/fence{ - dir = 8; - icon_state = "fence" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"lpf" = ( -/turf/closed/wall/mineral/rogue/decostone/cand, -/area/rogue/indoors/shelter/rtfield) -"lpI" = ( -/obj/structure/bars/passage{ - redstone_id = "sewer2" - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"lqH" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle, -/area/rogue/indoors/shelter/mountains/decap) -"lrh" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/dwarfin) -"lsd" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/structure/flora/roguegrass, -/obj/item/reagent_containers/glass/bottle, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"lsi" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/mason, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/shelter/town/dwarf) -"lsL" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 1; - locked = 1 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"lta" = ( -/obj/structure/fluff/railing/wood, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"lug" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/exposed/under/basement) -"luz" = ( -/obj/structure/fluff/railing/fence{ - dir = 1; - icon_state = "fence" - }, -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/fence{ - dir = 4; - icon_state = "fence" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"luN" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"lvr" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 8; - icon_state = "torchwall1" - }, -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"lvw" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"lvI" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"lwq" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"lwu" = ( -/obj/effect/decal/cleanable/blood/gibs/core, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"lwL" = ( -/obj/structure/fluff/walldeco/vinez/l{ - dir = 10 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lyq" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 1 - }, -/area/rogue/indoors/town/church/chapel) -"lyN" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/mountains) -"lyZ" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 1; - icon_state = "wooddir"; - locked = 1; - lockid = "farm" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"lze" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/villager{ - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"lzl" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lzr" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "shop"; - name = "Roof access" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"lzE" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/flashlight/flare/torch/lantern, -/obj/item/flint{ - pixel_x = -1 - }, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/town/dwarf) -"lzR" = ( -/obj/structure/closet/crate/chest/neu_fancy, -/obj/item/rogueweapon/huntingknife/idagger/silver, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/indoors/town/vault) -"lAJ" = ( -/obj/structure/closet/dirthole/grave, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"lAK" = ( -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/magician) -"lBj" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"lBv" = ( -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue) -"lBE" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "church"; - name = "priest office" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"lBY" = ( -/obj/structure/chair/wood/rogue{ - dir = 4; - icon_state = "chair2" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/magician) -"lCm" = ( -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lCP" = ( -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"lDF" = ( -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/structure/closet/crate/chest/neu, -/obj/structure/rack/rogue/shelf/notdense, -/obj/item/reagent_containers/powder/salt, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"lEl" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"lEq" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"lEA" = ( -/obj/structure/bars, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"lEG" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/statue/gargoyle/moss, -/obj/effect/landmark/start/vagrant{ - dir = 4; - icon_state = "arrow" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lFu" = ( -/obj/structure/toilet, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/tavern/saiga) -"lFC" = ( -/obj/structure/flora/rock/pile, -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lFW" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/dice{ - pixel_x = -4; - pixel_y = 9 - }, -/obj/item/dice{ - pixel_x = 6 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"lFX" = ( -/obj/structure/flora/roguegrass, -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lGa" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable" - }, -/obj/item/gun/ballistic/revolver/grenadelauncher/bow, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"lGx" = ( -/obj/effect/decal/cleanable/blood/footprints, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lGN" = ( -/obj/structure/closet/crate/chest/crate, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"lHd" = ( -/obj/structure/fluff/walldeco/painting/seraphina{ - pixel_y = 32 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"lHe" = ( -/turf/closed/wall/shroud, -/area/rogue/indoors/shelter/rtfield) -"lHh" = ( -/obj/structure/flora/roguetree, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lHH" = ( -/obj/effect/decal/shadow_floor, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath/redhouse) -"lHL" = ( -/obj/structure/stairs{ - dir = 4 - }, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/town/roofs) -"lHX" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/needle/thorn, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"lIh" = ( -/obj/machinery/light/rogue/wallfire/candle/weak{ - pixel_y = -17 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/shop) -"lIB" = ( -/obj/structure/closet/crate/chest/neu, -/obj/item/clothing/cloak/raincloak/blue, -/obj/item/reagent_containers/food/snacks/rogue/breadslice/toast, -/obj/item/reagent_containers/glass/bottle/rogue/water, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/garrison) -"lIP" = ( -/obj/structure/table/wood/plain_alt, -/obj/item/cooking/pan, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors) -"lJh" = ( -/obj/structure/bed/rogue/inn{ - name = "nitemaid bed" - }, -/obj/item/bedsheet/rogue/wool, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/under/town/basement) -"lJr" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lJI" = ( -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/exposed/under/basement) -"lJT" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/shelter/bog) -"lKi" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/manorgarri) -"lKj" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"lKn" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"lKo" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/natural/cloth, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"lKT" = ( -/obj/structure/stairs/stone{ - icon_state = "stonestairs"; - dir = 1 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave/spider) -"lKU" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "mason" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"lLj" = ( -/obj/effect/decal/remains/human, -/obj/item/roguecoin/copper/pile, -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"lLu" = ( -/obj/structure/chair/bench/couchablack/r, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/magician) -"lLO" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 8 - }, -/area/rogue/indoors/town/church/chapel) -"lLZ" = ( -/obj/structure/fluff/statue/pillar, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"lMe" = ( -/turf/open/transparent/openspace, -/area/rogue/under/cave) -"lMr" = ( -/obj/structure/chair/bench/ancientlog, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lNb" = ( -/obj/effect/decal/cleanable/blood/gibs/core, -/obj/item/clothing/head/roguetown/cookhat, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"lNk" = ( -/obj/structure/fluff/railing/fence, -/obj/structure/flora/roguegrass, -/obj/structure/fermenting_barrel, -/obj/structure/fluff/railing/fence{ - dir = 4; - icon_state = "fence" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"lNO" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/cell) -"lNV" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/outdoors/town/roofs) -"lNY" = ( -/obj/structure/chair/bench/ancientlog, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lOm" = ( -/obj/structure/roguemachine/scomm/r, -/obj/item/rogueore/copper, -/obj/item/rogueore/copper, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/shelter/town/dwarf) -"lOt" = ( -/obj/structure/bars/pipe{ - dir = 8; - icon_state = "pipe"; - pixel_x = 9 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue) -"lOx" = ( -/obj/structure/roguemachine/musicbox, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"lOD" = ( -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"lOS" = ( -/obj/structure/bars/pipe{ - dir = 5; - icon_state = "pipe" - }, -/obj/item/natural/stone, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"lOZ" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/dwarfin) -"lQd" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"lQe" = ( -/obj/structure/roguetent, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"lQI" = ( -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/under/town/sewer) -"lQT" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "mason" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"lRy" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/indoors/town/shop) -"lRz" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner, -/area/rogue/indoors/town) -"lSd" = ( -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/woods) -"lSl" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"lSo" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/indoors) -"lSv" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lTo" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 1 - }, -/area/rogue) -"lTO" = ( -/obj/item/reagent_containers/food/snacks/produce/berries/rogue, -/obj/structure/closet/crate/chest/wicker, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"lUv" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/mountains) -"lUz" = ( -/obj/structure/bonepile, -/turf/open/floor/rogue/naturalstone, -/area/rogue/indoors/shelter/rtfield) -"lVe" = ( -/obj/structure/mineral_door/wood, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"lVj" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/bog) -"lVl" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"lVz" = ( -/mob/living/carbon/human/species/human/northern/bum/ambush, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"lVK" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"lWG" = ( -/obj/structure/fluff/walldeco/masonflag{ - pixel_y = -31 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"lWU" = ( -/obj/item/grown/log/tree, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"lXo" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomiii"; - name = "Yeoman room" - }, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/tavern/saiga) -"lXp" = ( -/obj/effect/decal/cleanable/blood/gibs/limb{ - dir = 4 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"lXz" = ( -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/mountains) -"lXE" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"lXP" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lYm" = ( -/obj/structure/table/wood/large/corner_new{ - dir = 6 - }, -/obj/item/cooking/pan{ - pixel_x = -1; - pixel_y = 5 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"lYx" = ( -/obj/structure/table/wood/treestump, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"lYN" = ( -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/church) -"lYY" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"lZe" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"lZq" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/manorgarri) -"lZD" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"lZH" = ( -/obj/machinery/light/rogue/chand, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"lZL" = ( -/obj/structure/floordoor/gatehatch/outer{ - redstone_id = "gatelava" - }, -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"lZR" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"maO" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 32 - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/exposed/manorgarri) -"mbd" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 1 - }, -/area/rogue) -"mbn" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/garrison) -"mbs" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town) -"mbT" = ( -/obj/structure/fluff/walldeco/chains, -/obj/effect/decal/cleanable/blood/gibs/down, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"mbY" = ( -/obj/structure/fluff/railing/border, -/obj/machinery/light/rogue/firebowl/stump{ - pixel_y = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"mcG" = ( -/obj/item/roguebin/water/gross, -/obj/item/rogueweapon/spear/stone, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"mdt" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/manorgarri) -"mdy" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/decal/cleanable/blood/gibs/core, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"mdE" = ( -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/warehouse) -"mdM" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"meq" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"mes" = ( -/obj/structure/chair/bench/church/mid{ - dir = 1; - icon_state = "church_benchmid" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"mgt" = ( -/obj/structure/lever/wall{ - desc = "Let the games begin."; - dir = 8; - redstone_id = "sewer2" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"mgy" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"mgH" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 4 - }, -/area/rogue/indoors/town/bath/redhouse) -"mgZ" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"mhm" = ( -/obj/structure/fluff/railing/border, -/obj/structure/closet/crate/chest/crate{ - pixel_y = 6 - }, -/obj/item/clothing/cloak/apron/waist/brown, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"mhH" = ( -/obj/structure/closet/crate/chest/lootbox, -/obj/item/roguegem/blue, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"miv" = ( -/obj/effect/landmark/start/weaponsmith{ - dir = 1 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"mjl" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue) -"mkz" = ( -/obj/structure/stairs/stone{ - dir = 8; - icon_state = "stonestairs" - }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"mlL" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/outdoors/exposed/manorgarri) -"mlS" = ( -/obj/effect/decal/cleanable/dirt/cobweb{ - dir = 1 - }, -/obj/structure/bed/rogue/hay, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"mmm" = ( -/obj/structure/stairs{ - dir = 8; - icon_state = "stairs" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"mmo" = ( -/obj/item/reagent_containers/food/snacks/produce/onion, -/obj/item/reagent_containers/food/snacks/produce/cabbage, -/obj/item/reagent_containers/food/snacks/produce/potato, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"mmT" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors) -"mnd" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/manorgarri) -"mnv" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"mnK" = ( -/obj/structure/fluff/dryingrack, -/obj/item/needle/thorn, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/town) -"mop" = ( -/obj/machinery/light/rogue/hearth, -/obj/item/rogueweapon/tongs, -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"moq" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/manorgarri) -"moB" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern/saiga) -"moG" = ( -/obj/structure/flora/roguetree/evil, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"moR" = ( -/obj/item/natural/stone, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"mpf" = ( -/obj/structure/bars, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"mpi" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/outdoors/town/roofs) -"mpt" = ( -/turf/closed, -/area/rogue/indoors/shelter/town/dwarf) -"mpF" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/structure/closet/crate/chest/old_crate, -/obj/item/ingot/silver, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town) -"mqb" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/river) -"mqf" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"mqm" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"mrL" = ( -/obj/structure/closet/crate/chest/neu_iron, -/obj/item/rope/chain, -/obj/item/rope/chain, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/cell) -"mrZ" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"msB" = ( -/obj/structure/table/wood/reinf_long{ - dir = 1 - }, -/obj/item/clothing/mask/rogue/spectacles/golden, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"msG" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/obj/item/neuFarm/seed/pipeweed, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"msX" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"mtc" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"muV" = ( -/obj/effect/decal/remains/xeno/larva{ - desc = "Truely, nothing is sacred."; - name = "child's remains" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"muX" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue) -"mvc" = ( -/obj/structure/fluff/wallclock, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"mvj" = ( -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"mvo" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"mvr" = ( -/obj/structure/table/wood/large/corner_new{ - dir = 6 - }, -/obj/item/flashlight/flare/torch/lantern, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"mwG" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/church/chapel) -"mxj" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"mxq" = ( -/obj/structure/closet/crate/chest/neu, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"mxB" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue) -"myf" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"myP" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"mzh" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town/dwarfin) -"mzq" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 4; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"mzw" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"mzB" = ( -/obj/structure/table/wood/plain_alt, -/turf/open/floor/rogue/tile/checkeralt, -/area/rogue/indoors/town/tavern/saiga) -"mzQ" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/church/chapel) -"mAD" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueweapon/huntingknife/idagger/steel, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"mAL" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"mAN" = ( -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/structure/table/wood{ - dir = 10; - icon_state = "tablewood2" - }, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"mAQ" = ( -/obj/item/chair/stool/bar/rogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"mBr" = ( -/turf/open/floor/rogue/metal, -/area/rogue/indoors/town) -"mBF" = ( -/obj/item/storage/bag/tray/psy, -/obj/structure/table/wood{ - dir = 10; - icon_state = "tablewood2" - }, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"mEf" = ( -/obj/structure/chair/bench/church{ - dir = 1; - icon_state = "church_benchleft" - }, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"mEv" = ( -/obj/structure/fluff/railing/stonehedge, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"mEx" = ( -/obj/structure/table/church, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"mEN" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcv"; - locked = 1; - lockid = "steward" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"mFe" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"mFh" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath/redhouse) -"mFn" = ( -/obj/structure/table/vtable/v2, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/structure/rogue/trophy/deer, -/obj/item/natural/feather{ - pixel_y = 8 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"mFx" = ( -/obj/item/natural/stone, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/mountains) -"mFQ" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/metal/barograte, -/area/rogue/outdoors/town) -"mGa" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/shelter/rtfield) -"mGt" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"mGz" = ( -/obj/structure/flora/newleaf/corner{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"mHd" = ( -/obj/structure/fluff/clodpile, -/obj/item/natural/poo, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"mIw" = ( -/obj/structure/table/wood/large/corner_new{ - dir = 9 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"mIZ" = ( -/obj/structure/flora/roguegrass/water, -/obj/structure/fluff/statue/small, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/exposed/manorgarri) -"mJh" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - lockid = "confession" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"mJt" = ( -/obj/structure/fluff/psycross/crafted, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"mKj" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/under/cave) -"mKN" = ( -/obj/structure/bed/rogue/mediocre, -/obj/item/storage/belt/rogue/pouch/coins/mid, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"mLJ" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/river) -"mMb" = ( -/obj/structure/chair/bench/couchablack, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"mMc" = ( -/obj/structure/bed/rogue/mediocre, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern/saiga) -"mMv" = ( -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue) -"mMx" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 8 - }, -/area/rogue/indoors/town/bath/redhouse) -"mMB" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"mMV" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains) -"mMW" = ( -/obj/item/roguebin/water, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"mMY" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/town/roofs) -"mNk" = ( -/obj/structure/bars/pipe{ - dir = 6; - icon_state = "pipe" - }, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town) -"mNy" = ( -/obj/effect/decal/remains/xeno/larva{ - desc = "Truely, nothing is sacred."; - name = "child's remains" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"mNM" = ( -/obj/structure/mineral_door/wood{ - name = "servants quarters" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"mNU" = ( -/obj/structure/bars/pipe{ - dir = 8; - icon_state = "pipe"; - pixel_x = 9 - }, -/turf/open/transparent/openspace, -/area/rogue) -"mOl" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/bars/pipe{ - dir = 5; - icon_state = "pipe" - }, -/obj/structure/bars/pipe{ - dir = 8; - icon_state = "pipe" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"mOs" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue) -"mOM" = ( -/obj/structure/table/wood/treestump/burnt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"mPw" = ( -/obj/structure/closet/crate/chest/neu, -/obj/item/clothing/mask/cigarette/pipe, -/obj/item/clothing/mask/cigarette/pipe, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/machinery/light/rogue/wallfire/candle/weak/r, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/bath/redhouse) -"mPQ" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"mQa" = ( -/obj/structure/fluff/walldeco/bsmith{ - dir = 1 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/dwarf) -"mQf" = ( -/obj/structure/table/wood/treestump{ - pixel_x = -7 - }, -/obj/item/grown/log/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"mQB" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"mQF" = ( -/obj/item/natural/dirtclod, -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/under/town/sewer) -"mRb" = ( -/obj/structure/table/wood/large/corner_new{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"mRp" = ( -/turf/open/floor/rogue/ruinedwood/turned, -/area/rogue/outdoors/river) -"mRE" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "merchant"; - name = "shop" - }, -/obj/structure/bars/passage/shutter{ - redstone_id = "merchant" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"mRF" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable" - }, -/obj/item/reagent_containers/glass/bottle/rogue/redwine{ - pixel_x = 5; - pixel_y = 11 - }, -/obj/item/reagent_containers/glass/cup/steel{ - pixel_x = -6; - pixel_y = 20 - }, -/turf/open/floor/carpet/inn, -/area/rogue/under/town/basement) -"mSa" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue) -"mSC" = ( -/obj/item/natural/rock/salt, -/obj/item/grown/log/tree/stake, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"mUl" = ( -/obj/structure/winch{ - gid = "townin" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"mUz" = ( -/obj/machinery/light/rogue/campfire/densefire, -/obj/effect/decal/remains/xeno/larva{ - desc = "Truely, nothing is sacred."; - name = "child's remains" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"mUT" = ( -/obj/machinery/light/rogue/wallfire/candle/lamp{ - pixel_y = 0 - }, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/magician) -"mVa" = ( -/obj/structure/chair/bench/ultimacouch/r{ - icon_state = "ultimacochright" - }, -/obj/effect/landmark/start/nightman, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/bath/redhouse) -"mVv" = ( -/obj/structure/roguemachine/camera/right, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"mVy" = ( -/obj/structure/roguemachine/stockpile, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"mVE" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/machinery/light/rogue/wallfire/candle/weak/r, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"mVM" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/structure/fluff/walldeco/rpainting/forest{ - pixel_x = -32 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"mVX" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 6 - }, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/dwarf) -"mWp" = ( -/obj/item/storage/belt/rogue/pouch, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"mWI" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/magician) -"mWT" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"mXf" = ( -/obj/effect/decal/cleanable/blood/gibs/body, -/obj/structure/bars/pipe{ - dir = 4; - icon_state = "pipe" - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"mXW" = ( -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"mYD" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"mYL" = ( -/obj/structure/bars/cemetery, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"mZW" = ( -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"naF" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/fluff/railing/wood{ - dir = 4; - icon_state = "woodrailing" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"nba" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/decal/remains/saiga, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nbF" = ( -/obj/structure/chair/bench/church/mid{ - dir = 1; - icon_state = "church_benchmid" - }, -/obj/effect/landmark/start/churchling, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"nbT" = ( -/obj/structure/table/optable, -/obj/structure/curtain/bounty{ - color = "grey" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"nbZ" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/indoors/shelter/mountains) -"ncr" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ncu" = ( -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"ncw" = ( -/obj/structure/table/wood/treestump, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"ncE" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ncL" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/bog) -"ndb" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"ndi" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"ner" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"new" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"neF" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/reagent_containers/glass/rag{ - pixel_y = 12 - }, -/turf/open/floor/rogue/tile/checkeralt, -/area/rogue/indoors/town/tavern/saiga) -"neY" = ( -/obj/structure/stairs{ - dir = 8; - icon_state = "stairs" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"nfd" = ( -/obj/structure/roguemachine/scomm/l, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"nfg" = ( -/obj/structure/stairs/stone{ - dir = 4; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/manorgarri) -"nfz" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/rtfield) -"nfN" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"nfW" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/river) -"ngf" = ( -/obj/effect/decal/remains/saiga, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nhZ" = ( -/obj/structure/fluff/statue/gargoyle/moss, -/turf/open/transparent/openspace, -/area/rogue/outdoors/mountains) -"niY" = ( -/obj/structure/closet/crate/roguecloset/lord{ - lockid = "nightmaiden" - }, -/obj/item/clothing/mask/rat/jackal, -/obj/item/clothing/mask/muzzle, -/obj/item/clothing/head/roguetown/nun, -/obj/item/clothing/suit/roguetown/armor/amazon_chainkini, -/obj/item/clothing/suit/roguetown/shirt/dress/gen/sexy, -/obj/item/rope, -/obj/machinery/light/rogue/wallfire/candle/lamp{ - pixel_y = 28 - }, -/obj/structure/rack/rogue/shelf/notdense, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/bath/redhouse) -"nji" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/cell) -"njo" = ( -/obj/structure/stairs{ - dir = 1; - icon_state = "stairs" - }, -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/church) -"njt" = ( -/obj/structure/bed/rogue/wooldouble, -/obj/item/bedsheet/rogue/double_pelt, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/tavern/saiga) -"njE" = ( -/obj/effect/landmark/start/vagrant{ - dir = 4; - icon_state = "arrow" - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town/church/chapel) -"njK" = ( -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"njU" = ( -/turf/open/water/swamp, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"nkp" = ( -/obj/structure/fluff/railing/border{ - dir = 5; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern/saiga) -"nlc" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors) -"nll" = ( -/obj/structure/fluff/railing/border{ - dir = 5; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/manorgarri) -"nlv" = ( -/obj/item/rogueore/coal, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"nlJ" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"nlR" = ( -/obj/structure/flora/roguegrass/bush_meagre, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"nlS" = ( -/obj/structure/fluff/railing/wood, -/obj/item/rope, -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nmu" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/machinery/light/rogue/firebowl/standing{ - density = 0; - pixel_x = -9 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"nmF" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town) -"nmL" = ( -/obj/structure/fluff/railing/border{ - dir = 9; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"nmN" = ( -/obj/structure/bars/passage{ - redstone_id = "sewer3" - }, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"nnc" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nnd" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern/saiga) -"nnr" = ( -/obj/structure/chair/wood/rogue{ - dir = 8; - icon_state = "chair2" - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"nnB" = ( -/obj/structure/bars/pipe{ - dir = 10; - icon_state = "pipe" - }, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town) -"nnN" = ( -/obj/effect/landmark/start/armorsmith{ - dir = 8 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"non" = ( -/obj/structure/mineral_door/swing_door, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"noo" = ( -/obj/structure/plasticflaps, -/obj/structure/kneestingers, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"noC" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/manorgarri) -"noG" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"noV" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"npt" = ( -/obj/structure/roguerock, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"npJ" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains) -"nsy" = ( -/obj/structure/fluff/statue/knight/interior, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"nsE" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/mountains) -"nsF" = ( -/obj/structure/bars/cemetery, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ntq" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"nuc" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 4; - locked = 1; - lockid = "nightmaiden"; - name = "bathhouse" - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath/redhouse) -"nuf" = ( -/obj/effect/decal/shadow_floor/corner{ - dir = 4 - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath/redhouse) -"nuo" = ( -/obj/structure/fluff/psycross/crafted, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nva" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/dwarf) -"nvC" = ( -/obj/structure/stairs/fancy/c{ - dir = 1 - }, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"nvR" = ( -/obj/structure/fluff/railing/border{ - dir = 5; - icon_state = "border" - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"nwn" = ( -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"nxn" = ( -/obj/effect/decal/shadow_floor/corner, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath/redhouse) -"nxD" = ( -/obj/structure/roguemachine/mail, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"nxX" = ( -/obj/structure/fluff/walldeco/wantedposter{ - pixel_x = -31; - pixel_y = 0 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"nxY" = ( -/obj/structure/lever/wall{ - desc = "Let the games begin."; - dir = 8; - redstone_id = "sewer3" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"nyj" = ( -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"nym" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/machinery/light/rogue/firebowl/standing/blue, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"nyp" = ( -/obj/effect/decal/cleanable/blood/gibs/up{ - pixel_x = -13; - pixel_y = -17 - }, -/obj/item/roguecoin/copper, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nyQ" = ( -/obj/structure/table/wood/large/corner_new{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"nzk" = ( -/obj/structure/roguewindow/openclose{ - dir = 4; - icon_state = "woodwindowdir" - }, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/tavern/saiga) -"nzu" = ( -/obj/structure/roguewindow/openclose, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/bath/redhouse) -"nzD" = ( -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/structure/closet/crate/chest/old_crate, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/obj/item/reagent_containers/food/snacks/rogue/meat/poultry, -/obj/item/reagent_containers/food/snacks/rogue/meat/poultry, -/obj/item/reagent_containers/food/snacks/rogue/meat/steak, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"nzO" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"nzX" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/dwarf) -"nzY" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/outdoors/exposed/town) -"nAp" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nAt" = ( -/obj/machinery/light/rogue/hearth, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"nAH" = ( -/obj/structure/fluff/walldeco/customflag, -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"nBX" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/peppermill, -/obj/item/reagent_containers/food/snacks/butter, -/obj/item/reagent_containers/food/snacks/fat, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"nCg" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town) -"nDi" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"nDD" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"nDJ" = ( -/obj/effect/spawner/roguemap/treeorbush, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"nDR" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/goatmale{ - aggressive = 1; - name = "mountain goat" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"nDW" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nEL" = ( -/obj/structure/fermenting_barrel/water, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"nFQ" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/mace/woodclub, -/obj/item/rogueweapon/mace/woodclub, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"nFY" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 8; - icon_state = "endwooddark" - }, -/area/rogue/indoors/shelter/mountains) -"nGi" = ( -/obj/structure/roguetent, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"nGr" = ( -/obj/item/natural/stone, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"nGC" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/cell) -"nGT" = ( -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/ruinedwood/turned, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nHh" = ( -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town) -"nHQ" = ( -/obj/structure/roguemachine/scomm{ - pixel_y = -32 - }, -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"nHS" = ( -/obj/effect/decal/remains/saiga, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nIR" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"nIW" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 8 - }, -/area/rogue/indoors/town) -"nJf" = ( -/obj/structure/fluff/statue/knight, -/obj/effect/landmark/start/vagrant{ - dir = 4; - icon_state = "arrow" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"nJk" = ( -/obj/item/natural/rock/coal, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"nJr" = ( -/obj/structure/fluff/railing/stonehedge, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"nJP" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/roguestatue/gold/loot, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"nJQ" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/town) -"nKz" = ( -/obj/structure/flora/roguegrass, -/obj/machinery/light/rogue/lanternpost/fixed, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"nKA" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"nLA" = ( -/obj/structure/table/wood{ - dir = 5; - icon_state = "largetable" - }, -/obj/item/reagent_containers/powder/moondust, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath/redhouse) -"nLP" = ( -/obj/effect/decal/shadow_floor, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath/redhouse) -"nMd" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"nMe" = ( -/obj/structure/fluff/railing/border, -/obj/structure/stairs/stone{ - dir = 4; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"nMn" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_x = -32 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"nMo" = ( -/obj/effect/decal/remains/saiga, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"nMy" = ( -/obj/structure/fluff/clodpile, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"nNx" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors) -"nNJ" = ( -/obj/effect/landmark/start/butler{ - dir = 4; - icon_state = "arrow" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"nOe" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/ingot/steel, -/obj/item/ingot/steel, -/obj/item/riddleofsteel, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"nOp" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"nPx" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 8 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"nPR" = ( -/obj/structure/fluff/clock, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"nQu" = ( -/obj/structure/stairs{ - dir = 8; - icon_state = "stairs" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"nQA" = ( -/obj/structure/table/wood/plain_alt, -/obj/structure/fluff/walldeco/wantedposter, -/obj/item/paper, -/obj/item/natural/feather, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"nRb" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/indoors) -"nRo" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/fluff/railing/border, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"nRE" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/obj/effect/landmark/start/beastmonger, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"nRN" = ( -/obj/structure/stairs/stone{ - dir = 4; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"nRT" = ( -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/garrison) -"nRU" = ( -/obj/structure/flora/rock/pile, -/obj/item/natural/stone, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"nSF" = ( -/obj/structure/stairs{ - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"nSS" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"nSX" = ( -/obj/structure/chair/wood/rogue/fancy{ - dir = 4; - icon_state = "chair1" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"nTd" = ( -/obj/structure/closet/crate/chest/neu, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"nTe" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"nTh" = ( -/obj/structure/fluff/statue/small, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/indoors/town/vault) -"nTz" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"nUh" = ( -/obj/structure/chair/stool/rogue, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"nUi" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/dwarf) -"nUn" = ( -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"nUu" = ( -/obj/structure/stairs/stone, -/obj/structure/fluff/walldeco/bsmith, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/dwarf) -"nVd" = ( -/obj/structure/fluff/walldeco/wantedposter, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"nVh" = ( -/obj/structure/bed/rogue, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"nVy" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"nVH" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - lockid = "church"; - name = "sleeping hall" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"nWf" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"nWE" = ( -/obj/structure/roguewindow/stained, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"nXi" = ( -/obj/item/candle/yellow/lit/infinite{ - pixel_x = -8; - pixel_y = -5 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath/redhouse) -"nXs" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/mountains) -"nXA" = ( -/turf/open/transparent/openspace, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"nXK" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"nYt" = ( -/obj/item/chair/stool/bar/rogue, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/spiderbase) -"nYB" = ( -/obj/structure/chair/wood/rogue, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"nZp" = ( -/obj/structure/fluff/railing/border{ - dir = 9; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"oat" = ( -/obj/structure/fluff/statue/knight/interior/r, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"oay" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oaH" = ( -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/grown/log/tree/small, -/obj/item/storage/box/matches, -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/cell) -"oaU" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town) -"oaV" = ( -/obj/structure/fermenting_barrel/water, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"obb" = ( -/obj/structure/rack/rogue, -/obj/structure/fluff/walldeco/painting{ - pixel_y = 32 - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"obC" = ( -/obj/structure/ladder/earth, -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"obJ" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue) -"ocA" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"ocJ" = ( -/obj/item/natural/bundle/stick, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"ocP" = ( -/obj/machinery/light/rogue/oven{ - pixel_y = 32 - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"ocQ" = ( -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ocX" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/shelter/rtfield) -"oda" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"odm" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/exposed/magiciantower) -"odw" = ( -/obj/structure/fluff/walldeco/rpainting{ - pixel_x = 32 - }, -/turf/open/floor/carpet/inn, -/area/rogue/under/town/basement) -"odO" = ( -/obj/item/reagent_containers/food/snacks/crow, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"oem" = ( -/obj/structure/closet/crate/coffin, -/obj/item/bodypart/head/goblin, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"oeV" = ( -/obj/structure/bed/rogue/hay{ - name = "apprentice bed" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"ofr" = ( -/obj/structure/roguewindow/openclose, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"ofA" = ( -/obj/structure/bars/pipe{ - dir = 9; - icon_state = "pipe" - }, -/turf/closed/wall/mineral/rogue/stonebrick/reddish, -/area/rogue/indoors/town/bath/redhouse) -"ogl" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/indoors/town/garrison) -"ogx" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/exposed/dwarf) -"ogP" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable_mid" - }, -/obj/structure/fluff/millstone{ - pixel_y = 7 - }, -/turf/open/floor/rogue/tile/checker, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ogX" = ( -/obj/structure/giantfur, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"ohj" = ( -/obj/structure/mineral_door/wood/deadbolt{ - lockid = "farm" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"oiu" = ( -/obj/structure/flora/ausbushes/ppflowers, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"oiA" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"oiJ" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/exposed/under/basement) -"ojm" = ( -/obj/item/reagent_containers/food/snacks/butter, -/obj/item/reagent_containers/food/snacks/butter, -/obj/structure/closet/crate/chest/crate, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"ojw" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"ojT" = ( -/obj/structure/mineral_door/wood/violet{ - locked = 1; - lockid = "nightmaiden"; - name = "private" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"okj" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"oko" = ( -/obj/item/storage/belt/rogue/pouch/coins/poor, -/obj/effect/decal/cleanable/dirt/cobweb{ - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"okB" = ( -/obj/structure/fluff/walldeco/wantedposter, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"okM" = ( -/obj/structure/table/wood/reinf_long{ - dir = 1 - }, -/obj/item/natural/feather{ - pixel_x = 5; - pixel_y = -5 - }, -/obj/item/candle/skull/lit{ - pixel_x = -1; - pixel_y = 7 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"olb" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"old" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town/church) -"olQ" = ( -/obj/effect/landmark/start/vagrant{ - dir = 8; - icon_state = "arrow" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"omc" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"omH" = ( -/obj/structure/closet/crate/chest/wicker, -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/wheat, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"omY" = ( -/obj/structure/bars/alt, -/obj/structure/table/wood/reinforced_alt{ - dir = 8 - }, -/obj/structure/fluff/walldeco/bath/wallrope{ - dir = 8 - }, -/obj/machinery/light/rogue/wallfire/candle/lamp{ - pixel_y = 0 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"ony" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 1; - locked = 1; - lockid = "shop"; - name = "shop backdoor" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"onA" = ( -/obj/structure/bed/rogue/inn/double, -/obj/item/bedsheet/rogue/fabric_double, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"onR" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/rogueore/iron, -/obj/item/rogueore/iron, -/obj/item/rogueore/iron, -/obj/item/rogueore/iron, -/obj/item/rogueore/iron, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"onS" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"onX" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"onY" = ( -/obj/effect/landmark/start/vagrant{ - dir = 8; - icon_state = "arrow" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"ool" = ( -/obj/effect/spawner/roguemap/treeorbush, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"ooJ" = ( -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"opd" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"opi" = ( -/obj/structure/roguemachine/scomm/l, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"opr" = ( -/obj/structure/flora/ausbushes/ppflowers, -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"opK" = ( -/turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_corner" - }, -/area/rogue/indoors/shelter/town/dwarf) -"opS" = ( -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/woods) -"opX" = ( -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"opZ" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"oqh" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"oqp" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oqv" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"oqz" = ( -/obj/structure/ladder/earth, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"oqC" = ( -/obj/structure/flora/roguegrass, -/obj/machinery/light/rogue/lanternpost/fixed, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"oqL" = ( -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"oqX" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/stonehedge{ - dir = 4 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oqY" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/magiciantower) -"orW" = ( -/obj/structure/bars/pipe{ - dir = 8; - icon_state = "pipe" - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"osa" = ( -/obj/structure/chair/stool/rogue, -/obj/structure/fluff/railing/border, -/obj/effect/landmark/start/mercenary{ - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"osA" = ( -/obj/structure/flora/roguetree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"osG" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"osR" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 8; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"otv" = ( -/obj/item/flashlight/flare/torch/lantern, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"ouq" = ( -/obj/structure/table/wood/plain_alt, -/obj/item/reagent_containers/glass/mortar, -/obj/item/pestle, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"ouS" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"ouU" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ovf" = ( -/obj/structure/fluff/walldeco/bigpainting, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ovm" = ( -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"owj" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/cell) -"owy" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town) -"owT" = ( -/obj/structure/table/wood/plain_alt, -/obj/item/reagent_containers/glass/cup{ - pixel_x = -11; - pixel_y = 11 - }, -/obj/structure/fluff/millstone{ - pixel_y = 7 - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"owX" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"oxf" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town) -"oxm" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/water/swamp, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"oxu" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"oxH" = ( -/obj/structure/well, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oxU" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/wolf, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"oyu" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueweapon/hammer, -/obj/item/rogueweapon/hammer, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"oyy" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/garrison) -"oyB" = ( -/obj/structure/bars/cemetery, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"ozE" = ( -/obj/structure/fluff/walldeco/stone{ - pixel_x = 0; - pixel_y = 32 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"ozH" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/manorgarri) -"ozQ" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"oAo" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"oBO" = ( -/obj/structure/statue/bone/skull, -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"oBU" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/fluff/railing/wood{ - dir = 8; - icon_state = "woodrailing"; - pixel_y = -1 - }, -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"oDe" = ( -/obj/item/roguegem/green, -/obj/structure/closet/crate/chest/neu, -/obj/item/reagent_containers/glass/bottle/rogue/manapot, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"oDm" = ( -/obj/structure/table/wood/reinforced_alt{ - dir = 4 - }, -/obj/structure/bars/alt, -/obj/structure/fluff/walldeco/bath/wallrope{ - dir = 4 - }, -/obj/machinery/light/rogue/wallfire/candle/lamp{ - pixel_y = 0 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"oDo" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 4; - icon_state = "endwooddark" - }, -/area/rogue/indoors/town/garrison) -"oDK" = ( -/turf/closed/mineral/rogue, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"oDM" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"oEc" = ( -/obj/structure/closet/dirthole/grave, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"oEf" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/machinery/light/rogue/torchholder{ - dir = 8; - icon_state = "torchwall1" - }, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"oEj" = ( -/turf/closed/mineral/random/rogue, -/area/rogue/outdoors/mountains) -"oEI" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern/saiga) -"oFk" = ( -/obj/structure/flora/roguegrass, -/obj/machinery/light/rogue/torchholder{ - dir = 4; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"oFq" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"oFv" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oFw" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 1; - name = "privy" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/under/town/sewer) -"oFB" = ( -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/under/town/basement) -"oFV" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/indoors/shelter/town/dwarf) -"oFX" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/outdoors/town) -"oGq" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/gibs/limb, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"oGx" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/outdoors/town/roofs) -"oGB" = ( -/obj/structure/closet/crate/drawer/random, -/obj/item/roguekey/nitemaiden, -/obj/item/roguekey/nitemaiden, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath/redhouse) -"oGZ" = ( -/obj/structure/closet/crate/chest/crate, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"oHk" = ( -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oHq" = ( -/obj/structure/table/wood{ - layer = 2.8 - }, -/obj/item/paper/bsmith, -/obj/item/flint, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"oHK" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"oHL" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "manor"; - name = "servants hall" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"oIj" = ( -/obj/structure/bars/pipe{ - dir = 8; - icon_state = "pipe" - }, -/turf/closed/wall/mineral/rogue/stonebrick/reddish, -/area/rogue/indoors/town/bath/redhouse) -"oII" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"oIO" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/dwarf) -"oJo" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/manorgarri) -"oJQ" = ( -/obj/structure/table/wood/treestump{ - pixel_x = -7 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oKg" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"oKl" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/cell) -"oLl" = ( -/obj/structure/fluff/statue/gargoyle/moss, -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town/roofs) -"oLC" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/fluff/railing/border, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"oLO" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/natural/stone, -/obj/item/natural/stone, -/obj/item/natural/stone, -/obj/item/natural/stone, -/obj/item/natural/stone, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"oMj" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"oMz" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/church) -"oMB" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"oNh" = ( -/obj/item/gavelblock, -/obj/item/gavelhammer{ - name = "gavel" - }, -/obj/structure/table/wood/reinforced_alt{ - dir = 8 - }, -/obj/item/reagent_containers/glass/cup/steel{ - pixel_y = 7 - }, -/obj/item/reagent_containers/glass/cup/steel{ - pixel_x = 12; - pixel_y = 10 - }, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/under/town/basement) -"oNm" = ( -/obj/structure/roguewindow, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors) -"oNx" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/obj/structure/rack/rogue/shelf/biggest, -/obj/item/reagent_containers/glass/bottle/rogue/redwine, -/obj/item/reagent_containers/glass/bottle/rogue/wine/sourwine, -/obj/item/reagent_containers/glass/bottle/rogue/redwine, -/obj/item/reagent_containers/glass/bottle/rogue/whitewine, -/obj/item/reagent_containers/glass/bottle/rogue/whitewine, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"oOm" = ( -/obj/structure/flora/roguegrass, -/obj/structure/closet/dirthole/closed/loot, -/obj/structure/gravemarker, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oOw" = ( -/obj/effect/decal/remains/saiga, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oOB" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/dwarf) -"oOX" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/outdoors/exposed/under/sewer) -"oPj" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 4; - icon_state = "endwooddark" - }, -/area/rogue/indoors/shelter/town/dwarf) -"oPp" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "tablewood1" - }, -/obj/item/natural/bundle/cloth, -/obj/item/book/rogue/robber, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"oPv" = ( -/obj/structure/flora/ausbushes/ppflowers, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oQh" = ( -/obj/structure/mineral_door/wood{ - lockid = "doctor" - }, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"oRk" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/mountains/decap) -"oRn" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - lockid = "blacksmith"; - name = "door" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"oRq" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors) -"oRy" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/structure/mineral_door/swing_door{ - keylock = 1; - locked = 1; - lockid = "archive" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"oRK" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"oRX" = ( -/obj/structure/flora/roguegrass, -/mob/living/simple_animal/hostile/retaliate/rogue/goat, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"oSt" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 4; - icon_state = "endwooddark" - }, -/area/rogue/indoors/town) -"oSQ" = ( -/obj/effect/landmark/start/feldsher{ - dir = 1 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"oSU" = ( -/turf/closed/mineral/rogue, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oTq" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/exposed/dwarf) -"oTy" = ( -/turf/closed/mineral/rogue, -/area/rogue/under/cave/spider) -"oTB" = ( -/obj/structure/stairs{ - dir = 8; - icon_state = "stairs" - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/shelter/town/dwarf) -"oTL" = ( -/obj/structure/bars, -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"oTP" = ( -/obj/structure/roguewindow/openclose{ - dir = 8; - icon_state = "woodwindowdir" - }, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"oTW" = ( -/obj/structure/fluff/walldeco/bigpainting/lake{ - pixel_y = -32 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"oUl" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"oUu" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcr"; - locked = 1; - lockid = "garrison" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"oVe" = ( -/obj/structure/table/wood/large/corner_new{ - dir = 9 - }, -/obj/item/rogueweapon/sickle, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"oVv" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"oVT" = ( -/obj/effect/spawner/roguemap/treeorbush, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oVX" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"oWe" = ( -/obj/structure/fluff/railing/wood, -/turf/open/transparent/openspace, -/area/rogue) -"oWg" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/wolf, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"oWJ" = ( -/obj/structure/closet/crate/chest/neu_iron, -/obj/item/clothing/cloak/apron/brown, -/obj/item/book/rogue/beardling, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"oXb" = ( -/obj/structure/fluff/statue/psy{ - desc = "A precious relic from before The Weeping. One year ago the eyes of the statue wept real tears."; - name = "The Forgotten God" - }, -/obj/structure/stone_tile/slab/cracked, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"oXi" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/clothing/cloak/half/red, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"oXq" = ( -/obj/structure/rack/rogue, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"oXy" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_x = 32 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"oXJ" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"oXM" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern/saiga) -"oYu" = ( -/obj/structure/table/vtable, -/obj/item/reagent_containers/glass/cup, -/obj/item/candle/yellow/lit{ - pixel_x = 10; - pixel_y = 11 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"oYw" = ( -/obj/structure/fluff/railing/border{ - dir = 5; - icon_state = "border" - }, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/effect/decal/cleanable/food/tomato_smudge, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"oYE" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"oYY" = ( -/obj/structure/handcart{ - dir = 4; - icon_state = "cart-empty" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"oZR" = ( -/obj/structure/mirror{ - pixel_x = 28; - pixel_y = 0 - }, -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"oZT" = ( -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/tavern/saiga) -"pak" = ( -/obj/structure/closet/crate/chest/wicker, -/obj/item/reagent_containers/food/snacks/produce/onion, -/obj/item/reagent_containers/food/snacks/produce/onion, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"pas" = ( -/obj/structure/mineral_door/wood/window{ - lockid = "manor"; - name = "hall of eating" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"paT" = ( -/obj/structure/stairs/stone{ - dir = 8; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"pbD" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/outdoors/exposed/under/basement) -"pcd" = ( -/obj/structure/rack/rogue, -/obj/item/storage/belt/rogue/pouch, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"pch" = ( -/obj/effect/decal/remains/human, -/obj/item/rogueweapon/pick, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"pcD" = ( -/obj/structure/mineral_door/wood/deadbolt{ - name = "privy" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"pdc" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"pdq" = ( -/turf/open/floor/rogue/metal/barograte, -/area/rogue/outdoors/town) -"pdy" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 8; - locked = 1; - lockid = "walls" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"pdG" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/shelter/rtfield) -"pdL" = ( -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"pdQ" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"peo" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/shelter/rtfield) -"peE" = ( -/obj/structure/fluff/walldeco/rpainting{ - pixel_y = 32 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"peW" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"pfh" = ( -/obj/structure/chair/wood/rogue/chair_noble{ - dir = 1 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"pfi" = ( -/obj/structure/flora/roguegrass{ - pixel_x = -1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"pfm" = ( -/obj/structure/chair/wood/rogue/chair_noble/purple, -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/magician) -"pfP" = ( -/obj/effect/landmark/start/vagrant{ - dir = 4; - icon_state = "arrow" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"pfY" = ( -/obj/structure/disposalpipe/broken{ - dir = 8 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"pgB" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "nightmaiden"; - name = "salon" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"pgK" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town) -"pha" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"phc" = ( -/obj/structure/fluff/statue/shisha{ - pixel_x = -11 - }, -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"phf" = ( -/obj/structure/fluff/walldeco/bath/wallrope{ - dir = 10 - }, -/turf/closed/wall/mineral/rogue/stonebrick/reddish, -/area/rogue/indoors/town/bath/redhouse) -"phC" = ( -/obj/structure/bed/rogue/hay, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"phV" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/cooking/pan{ - pixel_y = 7 - }, -/obj/item/flashlight/flare/torch{ - pixel_x = -12; - pixel_y = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"phY" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"pja" = ( -/obj/structure/rack/rogue{ - pixel_y = 16 - }, -/obj/item/clothing/cloak/raincloak/green, -/obj/item/clothing/cloak/raincloak/green, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"pjU" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/indoors/town) -"pkn" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/remains/human, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"pkE" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue) -"pkV" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/warehouse) -"pla" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 8; - name = "Privy" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"plB" = ( -/obj/machinery/light/rogue/hearth, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors) -"plJ" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"plT" = ( -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"plV" = ( -/obj/structure/roguewindow/stained, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"pmr" = ( -/obj/structure/rack/rogue/shelf/notdense{ - pixel_y = 27 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/tavern/saiga) -"pms" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/outdoors/town) -"pmz" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"pmF" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/structure/roguemachine/scomm/l, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"pnK" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"pnL" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/dwarf) -"poc" = ( -/obj/structure/flora/roguegrass, -/obj/structure/roguerock, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"pod" = ( -/obj/structure/bars/pipe{ - dir = 1; - icon_state = "pipe" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/dwarf) -"pov" = ( -/obj/machinery/light/rogue/wallfire/candle/weak, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/bath/redhouse) -"poA" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/woods) -"poE" = ( -/obj/effect/decal/remains/saiga, -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"poF" = ( -/obj/structure/closet/crate/coffin, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"poG" = ( -/obj/machinery/light/rogue/hearth, -/obj/effect/decal/cleanable/food/flour, -/turf/open/floor/rogue/greenstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ppn" = ( -/obj/structure/table/vtable/v2, -/obj/structure/bars/pipe, -/obj/item/natural/feather, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"ppo" = ( -/obj/machinery/light/rogue/firebowl, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"ppJ" = ( -/obj/structure/bed/rogue/mediocre, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"ppM" = ( -/obj/structure/closet/dirthole/closed/loot, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"ppN" = ( -/obj/structure/fluff/clodpile, -/obj/structure/kneestingers, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"ppO" = ( -/obj/structure/closet/crate/chest/neu_iron, -/obj/item/rogueweapon/whip, -/obj/item/rogueweapon/huntingknife/idagger, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"ppV" = ( -/obj/structure/fluff/walldeco/customflag, -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"pqk" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"pql" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/outdoors/exposed/under/sewer) -"pqq" = ( -/obj/item/reagent_containers/food/snacks/fat, -/obj/item/reagent_containers/food/snacks/fat, -/obj/item/reagent_containers/food/snacks/fat, -/obj/structure/closet/crate/chest/crate, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"pqP" = ( -/obj/structure/table/wood/plain_alt, -/obj/item/toy/cards/deck, -/obj/item/storage/fancy/cigarettes/zig, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/garrison) -"pqS" = ( -/obj/machinery/light/rogue/wallfire/candle/weak, -/obj/structure/roguemachine/camera/left, -/obj/structure/bars/pipe{ - dir = 1; - icon_state = "pipe" - }, -/obj/structure/bars/pipe{ - dir = 6; - icon_state = "pipe" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"prj" = ( -/obj/structure/closet/crate/chest/crate, -/obj/item/reagent_containers/food/snacks/rogue/pastry, -/obj/item/reagent_containers/food/snacks/rogue/frybread, -/obj/item/reagent_containers/food/snacks/rogue/biscuit, -/obj/item/reagent_containers/food/snacks/rogue/cheddarwedge/aged, -/obj/item/reagent_containers/food/snacks/rogue/raisinbreadslice, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"pro" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/under/town/sewer) -"pru" = ( -/obj/effect/decal/cleanable/blood/splatter, -/mob/living/simple_animal/hostile/zombie, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"prv" = ( -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/under/town/basement) -"prL" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/outdoors/exposed/church) -"prU" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"psp" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue) -"ptm" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ptr" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ptt" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/dwarf) -"puJ" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_y = -32 - }, -/obj/machinery/light/rogue/torchholder{ - dir = 8; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"pwa" = ( -/obj/structure/fluff/dryingrack, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"pwc" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"pwB" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 4; - lockid = "doctor"; - name = "feldscher" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"pwX" = ( -/obj/structure/bookcase/random/reference, -/obj/item/book/rogue/secret/xylix, -/obj/item/book/rogue/law, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"pxa" = ( -/obj/effect/decal/remains/saiga, -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"pxg" = ( -/obj/structure/fluff/railing/fence{ - dir = 8; - icon_state = "fence" - }, -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"pxn" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/effect/decal/cleanable/food/tomato_smudge, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"pxM" = ( -/obj/structure/lever/wall{ - pixel_x = 32; - redstone_id = "balloon_shutter" - }, -/obj/structure/closet/crate/chest/neu, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"pxU" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"pyU" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/dwarf) -"pzz" = ( -/obj/structure/kneestingers, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"pzV" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/mountains) -"pzX" = ( -/obj/structure/table/wood{ - dir = 9; - icon_state = "largetable" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath/redhouse) -"pAW" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"pBo" = ( -/obj/structure/bed/rogue/wool, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/shop) -"pBw" = ( -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"pBG" = ( -/obj/structure/fluff/railing/fence{ - dir = 4; - icon_state = "fence" - }, -/obj/structure/fermenting_barrel, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"pBS" = ( -/obj/structure/table/wood{ - icon_state = "tablewood3" - }, -/obj/item/reagent_containers/glass/cup/steel{ - pixel_y = 6 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"pBW" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 4 - }, -/area/rogue/indoors/town/church/chapel) -"pCm" = ( -/obj/effect/landmark/start/guardsman{ - dir = 1; - icon_state = "arrow" - }, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"pCp" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"pCG" = ( -/obj/structure/fluff/walldeco/bath/gents, -/obj/effect/decal/shadow_floor, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath/redhouse) -"pCU" = ( -/obj/structure/table/wood/nice/decorated, -/turf/open/floor/carpet/red, -/area/rogue/outdoors/exposed/under/basement) -"pCW" = ( -/obj/structure/fluff/statue/knight/r, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"pDj" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/decal/remains/saiga, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"pEe" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/water/swamp/deep, -/area/rogue/outdoors/bog) -"pEE" = ( -/obj/machinery/light/rogue/wallfire/candle{ - pixel_y = -30 - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath/redhouse) -"pEG" = ( -/obj/effect/decal/cleanable/blood/gibs/limb{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"pEH" = ( -/obj/structure/stairs{ - dir = 1; - icon_state = "stairs" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"pFc" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "roomi"; - name = "Duchess suite" - }, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern/saiga) -"pFD" = ( -/turf/closed/mineral/random/rogue, -/area/rogue/indoors/shelter/mountains) -"pGh" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"pHk" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/outdoors/exposed/town) -"pHp" = ( -/obj/structure/flora/roguegrass/water, -/obj/structure/flora/roguegrass, -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/bog) -"pHH" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/grindwheel, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"pHY" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"pIT" = ( -/obj/structure/bars/pipe{ - dir = 9 - }, -/turf/closed/wall/mineral/rogue/stonebrick/reddish, -/area/rogue/indoors/town/bath/redhouse) -"pJz" = ( -/obj/machinery/light/rogue/torchholder/r, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"pKh" = ( -/obj/structure/fermenting_barrel/water, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"pKw" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"pKE" = ( -/obj/structure/floordoor/gatehatch/inner{ - redstone_id = "gatelava" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"pLb" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town) -"pLO" = ( -/obj/structure/roguemachine/musicbox, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/magician) -"pLZ" = ( -/obj/structure/mineral_door/wood/donjon{ - locked = 1; - lockid = "walls" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"pMg" = ( -/obj/item/roguebin/water/gross, -/obj/item/natural/cloth, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"pNm" = ( -/obj/structure/kneestingers, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"pNI" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"pOA" = ( -/obj/effect/decal/remains/human, -/obj/machinery/light/rogue/campfire/densefire, -/obj/structure/fluff/psycross{ - pixel_y = 14 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"pOI" = ( -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/clothing/suit/roguetown/shirt/rags, -/obj/item/roguegem/yellow, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"pPO" = ( -/obj/structure/stairs/stone{ - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"pPX" = ( -/obj/machinery/light/rogue/wallfire/candle/blue{ - pixel_x = 31; - pixel_y = 0 - }, -/obj/structure/rack/rogue, -/obj/item/storage/backpack/rogue/satchel, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"pQi" = ( -/obj/structure/bars/pipe, -/obj/structure/bars/pipe{ - dir = 9; - icon_state = "pipe" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"pQS" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"pRT" = ( -/obj/structure/roguetent, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/rtfield) -"pSa" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/tavern/saiga) -"pSx" = ( -/obj/item/natural/rock/iron, -/obj/structure/fluff/walldeco/masonflag{ - pixel_y = 32 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"pSV" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/spider, -/obj/structure/spider/eggcluster, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"pTJ" = ( -/obj/structure/roguemachine/stockpile, -/obj/item/rogueore/coal, -/obj/item/rogueore/coal, -/obj/item/rogueore/coal, -/obj/item/rogueore/coal, -/obj/item/rogueweapon/shovel/small, -/obj/structure/bars/pipe{ - dir = 1; - icon_state = "pipe" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"pTV" = ( -/obj/structure/fluff/millstone, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"pUL" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/decal/shadow_floor{ - dir = 5 - }, -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"pUM" = ( -/obj/structure/table/wood/plain_alt, -/obj/item/handheld_bell{ - pixel_y = 5 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/church/chapel) -"pUU" = ( -/obj/machinery/light/rogue/torchholder/l, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"pUX" = ( -/obj/structure/stairs{ - dir = 8; - icon_state = "stairs" - }, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"pUZ" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"pVa" = ( -/obj/structure/fluff/railing/stonehedge, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"pVx" = ( -/obj/effect/landmark/start/manorguardsman, -/turf/open/floor/rogue/carpet/lord/left, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"pVK" = ( -/obj/structure/roguemachine/scomm/r, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"pVQ" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"pVX" = ( -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"pXe" = ( -/obj/structure/mineral_door/swing_door{ - keylock = 1; - lockid = "merchant" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"pXo" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 4 - }, -/area/rogue/indoors/shelter/mountains/decap) -"pXy" = ( -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"pXN" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"pYg" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"pYn" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 8 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"pYM" = ( -/turf/closed/wall/mineral/rogue/tent, -/area/rogue/indoors) -"pYT" = ( -/obj/machinery/light/rogue/wallfire/candle/blue{ - pixel_y = -10 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"pZc" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/blackmountain, -/obj/item/book/rogue/nitebeast, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"pZz" = ( -/obj/item/rogueweapon/spear/stone, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"pZB" = ( -/obj/structure/bars/pipe{ - dir = 8; - icon_state = "pipe" - }, -/obj/structure/bars/pipe{ - dir = 4; - icon_state = "pipe" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"qai" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/rtfield) -"qaV" = ( -/obj/structure/fluff/statue/gargoyle/moss, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qbe" = ( -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/garrison) -"qbB" = ( -/obj/structure/table/wood, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"qbM" = ( -/obj/structure/roguemachine/mail/r, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"qcp" = ( -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qcq" = ( -/obj/structure/mineral_door/wood/violet{ - locked = 1; - lockid = "hand" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qcx" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"qcD" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 1 - }, -/area/rogue/indoors/town/tavern) -"qdU" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"qdW" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"qel" = ( -/obj/structure/fluff/dryingrack, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"qer" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town) -"qeI" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"qeO" = ( -/turf/closed/wall/mineral/rogue/decostone/cand, -/area/rogue/indoors/town/church) -"qeY" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguetree/evil, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qfc" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qfi" = ( -/obj/structure/closet/crate/drawer, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/item/natural/cloth, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qfT" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"qgf" = ( -/obj/effect/decal/cleanable/dirt/cobweb{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"qgE" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/cell) -"qgJ" = ( -/obj/structure/table/wood/nice/decorated, -/obj/item/candle/skull/lit{ - pixel_x = -1; - pixel_y = 10 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/magician) -"qhw" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"qhX" = ( -/obj/item/natural/stone, -/obj/item/natural/stone, -/obj/item/natural/stone, -/obj/item/natural/stone, -/obj/item/natural/stone, -/obj/item/natural/stone, -/obj/item/natural/rock, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qij" = ( -/obj/structure/mineral_door/wood{ - lockid = "doctor" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"qio" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"qiP" = ( -/obj/structure/bars/pipe{ - dir = 6; - icon_state = "pipe" - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"qiW" = ( -/obj/structure/bed/rogue/shit, -/obj/item/rogueweapon/stoneaxe, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"qjp" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/town/dwarf) -"qjF" = ( -/obj/structure/table/wood/treestump{ - pixel_x = -7 - }, -/obj/item/rogueweapon/woodcut, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"qka" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"qko" = ( -/obj/structure/bars/pipe{ - dir = 1; - icon_state = "pipe" - }, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town) -"qkJ" = ( -/obj/structure/fluff/walldeco/painting/queen{ - pixel_x = 32 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/cell) -"qkR" = ( -/obj/structure/roguemachine/mail, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"qkV" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"qkY" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/water/swamp/deep, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qls" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qlB" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/nightmaiden{ - dir = 4 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath/redhouse) -"qlR" = ( -/obj/machinery/light/rogue/chand{ - pixel_x = -69; - pixel_y = -33 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern/saiga) -"qmE" = ( -/obj/structure/closet/crate/chest/neu, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/cell) -"qmK" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/item/clothing/gloves/roguetown/angle, -/turf/open/transparent/openspace, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"qno" = ( -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/manorgarri) -"qnw" = ( -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qny" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "manor" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/garrison) -"qnM" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue) -"qof" = ( -/obj/effect/decal/remains/human, -/obj/item/roguecoin/copper, -/obj/item/roguecoin/copper, -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"qoz" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"qoI" = ( -/obj/structure/bars/passage{ - redstone_id = "sewer1" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"qoQ" = ( -/obj/structure/fluff/statue/knightalt/r, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"qpF" = ( -/obj/structure/chair/wood/rogue/chair_noble/purple{ - dir = 4 - }, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qpQ" = ( -/obj/item/natural/bundle/stick, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"qpX" = ( -/obj/structure/fluff/walldeco/innsign/trophy, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern/saiga) -"qqn" = ( -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/clothing/cloak/apron/waist/brown, -/obj/item/clothing/suit/roguetown/armor/leather/vest, -/obj/item/clothing/mask/rogue/facemask/steel, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"qqw" = ( -/turf/open/transparent/openspace, -/area/rogue) -"qqM" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qrh" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/carpet/red, -/area/rogue/outdoors/exposed/under/basement) -"qrD" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"qrH" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/obj/structure/flora/roguegrass/bush/wall/tall, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"qrL" = ( -/obj/structure/stationary_bell{ - pixel_x = -31; - pixel_y = -28 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/church) -"qsl" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"qtg" = ( -/obj/structure/flora/rock/pile, -/obj/structure/fluff/railing/stonehedge, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qtH" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/town) -"qud" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 4 - }, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"quy" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "garrison" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"quA" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue) -"quG" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town) -"quW" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 8; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"qvc" = ( -/obj/machinery/light/rogue/wallfire/candle, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"qvP" = ( -/obj/structure/table/wood, -/obj/structure/roguemachine/vendor, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/shop) -"qvS" = ( -/obj/structure/bed/rogue, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"qwa" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"qwh" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qwu" = ( -/obj/effect/decal/cleanable/blood/gibs/core, -/obj/item/clothing/suit/roguetown/shirt/undershirt/priest, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"qwN" = ( -/obj/structure/fluff/walldeco/painting/queen, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qwU" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qxr" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qxw" = ( -/obj/item/roguebin/water/gross, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"qxF" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"qxN" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"qxO" = ( -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/under/town/basement) -"qyv" = ( -/obj/structure/table/wood/plain_alt, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"qyR" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/saigabuck/tame, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qyS" = ( -/obj/structure/handcart{ - dir = 8; - icon_state = "cart-empty" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/mountains) -"qyY" = ( -/obj/structure/table/vtable, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qzq" = ( -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"qzH" = ( -/obj/machinery/light/rogue/firebowl/church{ - light_power = 1.5 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church/chapel) -"qzY" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/tavern) -"qAd" = ( -/obj/structure/flora/roguegrass/water, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qAH" = ( -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"qBy" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner, -/area/rogue/indoors/shelter/mountains/decap) -"qDr" = ( -/obj/structure/fluff/wallclock/r, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"qDJ" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue) -"qEw" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/shelter/mountains) -"qEy" = ( -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qEA" = ( -/obj/effect/decal/cleanable/blood/footprints, -/obj/effect/spawner/roguemap/sewerencounter, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"qFA" = ( -/turf/closed/wall/mineral/rogue/wooddark/end, -/area/rogue/indoors/town/shop) -"qFE" = ( -/obj/item/roguestatue/silver, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/indoors/town/vault) -"qGx" = ( -/turf/closed/mineral/random/rogue, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qGH" = ( -/obj/structure/flora/roguegrass/water, -/obj/structure/flora/ausbushes/fernybush, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/exposed/manorgarri) -"qGI" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner, -/area/rogue) -"qGU" = ( -/obj/structure/table/wood{ - layer = 2.8 - }, -/obj/item/rogueweapon/tongs, -/obj/item/rogueweapon/hammer/claw, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"qHo" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qHN" = ( -/obj/machinery/light/rogue/hearth, -/obj/item/clothing/mask/rogue/facemask/prisoner, -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"qHV" = ( -/obj/structure/table/wood/plain_alt, -/obj/item/candle/yellow/lit/infinite/strong, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/tavern/saiga) -"qIm" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qIo" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qJn" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"qJB" = ( -/obj/structure/closet/crate/roguecloset/dark{ - locked = 1; - lockid = "steward"; - masterkey = 1 - }, -/obj/item/roguekey/archive, -/obj/item/roguekey/blacksmith, -/obj/item/roguekey/church, -/obj/item/roguekey/dungeon, -/obj/item/roguekey/garrison, -/obj/item/roguekey/graveyard, -/obj/item/roguekey/manor, -/obj/item/roguekey/mason, -/obj/item/roguekey/merchant, -/obj/item/roguekey/shop, -/obj/item/roguekey/tavern, -/obj/item/roguekey/walls, -/obj/structure/bars/pipe, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"qJH" = ( -/obj/machinery/light/rogue/wallfire/candle, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"qJI" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/storage/belt/rogue/pouch, -/obj/item/storage/belt/rogue/pouch, -/obj/item/storage/backpack/rogue/satchel, -/obj/item/storage/backpack/rogue/satchel, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/shop) -"qJZ" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/wolf, -/obj/effect/decal/remains/xeno/larva{ - desc = "Truely, nothing is sacred."; - name = "child's remains" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"qLK" = ( -/obj/structure/bars/pipe{ - dir = 6; - icon_state = "pipe" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"qLT" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/under/town/sewer) -"qLY" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue) -"qMc" = ( -/obj/effect/decal/remains/human, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qMk" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"qMt" = ( -/obj/structure/fluff/walldeco/chains, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"qMA" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 2 - }, -/area/rogue/indoors/town/church/chapel) -"qMN" = ( -/obj/structure/stairs{ - dir = 4; - icon_state = "stairs" - }, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors) -"qMW" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 8; - icon_state = "torchwall1" - }, -/obj/structure/closet/crate/coffin, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"qNc" = ( -/obj/effect/decal/shadow_floor{ - dir = 8 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath/redhouse) -"qNh" = ( -/obj/item/storage/roguebag, -/obj/structure/rack/rogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qNw" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "tablewood2" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qNz" = ( -/obj/structure/fluff/walldeco/masonflag{ - pixel_y = 32 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"qNI" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/item/clothing/cloak/cape/archivist, -/obj/structure/closet/crate/chest/neu_iron, -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"qOE" = ( -/obj/structure/stairs{ - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/church) -"qOG" = ( -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/tavern/saiga) -"qOT" = ( -/obj/structure/table/wood, -/obj/item/clothing/head/roguetown/flathat, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"qPb" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "manor" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qPV" = ( -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"qQj" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/structure/roguemachine/camera/right, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/garrison) -"qQz" = ( -/turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/town/roofs) -"qQN" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"qRu" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 1 - }, -/area/rogue/indoors/shelter/mountains/decap) -"qSl" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "tablewood2" - }, -/obj/item/storage/box/matches, -/obj/item/clothing/mask/cigarette/pipe, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qSx" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 4; - name = "Privy" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/dwarfin) -"qSX" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"qTs" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/ammo_casing/caseless/rogue/bolt, -/obj/item/ammo_casing/caseless/rogue/bolt, -/obj/item/ammo_casing/caseless/rogue/bolt, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"qTv" = ( -/obj/structure/bars/pipe{ - dir = 4; - icon_state = "pipe" - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"qTI" = ( -/obj/structure/fluff/dryingrack, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"qTS" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/bath/redhouse) -"qUm" = ( -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"qVh" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"qVi" = ( -/obj/machinery/anvil/crafted, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"qVm" = ( -/obj/structure/stairs/stone{ - dir = 4; - icon_state = "stonestairs" - }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"qVA" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/fence{ - dir = 8; - icon_state = "fence" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qVD" = ( -/obj/structure/mineral_door/wood/deadbolt{ - name = "privy" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"qVN" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"qVO" = ( -/obj/item/natural/dirtclod, -/obj/structure/bars/pipe{ - dir = 6; - icon_state = "pipe" - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"qVT" = ( -/obj/structure/flora/roguetree, -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qVX" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/church) -"qWc" = ( -/obj/structure/mineral_door/wood/red{ - lockid = "woodsm" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"qWm" = ( -/obj/machinery/light/rogue/smelter, -/obj/structure/bars/pipe{ - dir = 1; - icon_state = "pipe" - }, -/obj/structure/bars/pipe{ - dir = 10; - icon_state = "pipe" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"qXr" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 4 - }, -/area/rogue) -"qXw" = ( -/obj/structure/flora/roguegrass/bush_meagre, -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/fence{ - dir = 1; - icon_state = "fence" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qXG" = ( -/obj/effect/decal/shadow_floor{ - dir = 4 - }, -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"qXW" = ( -/obj/structure/fluff/railing/fence{ - dir = 1; - icon_state = "fence" - }, -/obj/structure/fluff/railing/fence{ - dir = 4; - icon_state = "fence" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"qZe" = ( -/obj/item/restraints/legcuffs/beartrap/armed, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/outdoors/exposed/under/basement) -"qZn" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"qZr" = ( -/obj/structure/roguewindow, -/obj/structure/bars/passage/shutter{ - redstone_id = "merchant" - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/shop) -"qZt" = ( -/obj/structure/roguemachine/balloon_pad, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/warehouse) -"qZv" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/head/roguetown/helmet/skullcap, -/obj/item/clothing/suit/roguetown/armor/chainmail/iron, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"qZR" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/structure/spider/eggcluster, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"qZV" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town) -"raa" = ( -/obj/structure/spider/cocoon, -/obj/structure/spider/stickyweb, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"raA" = ( -/obj/structure/closet/crate/chest/neu, -/obj/item/clothing/cloak/raincloak/blue, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/obj/item/reagent_containers/glass/bottle/rogue/water, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/garrison) -"raQ" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rbU" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/town/sewer) -"rcZ" = ( -/obj/structure/mineral_door/wood/violet{ - lockid = "nightmaiden"; - name = "counter" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"rec" = ( -/obj/structure/fluff/walldeco/innsign/trophy, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"rej" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"rel" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"rgi" = ( -/obj/structure/closet/crate/chest/crate, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/tavern/saiga) -"rgm" = ( -/mob/living/carbon/human/species/skeleton/npc, -/turf/open/floor/rogue/dirt, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"rgv" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/bottle/rogue/healthpot{ - pixel_x = 5 - }, -/obj/item/reagent_containers/glass/cup/steel{ - pixel_x = -3 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"rgK" = ( -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/mountains) -"rhi" = ( -/obj/structure/ladder, -/obj/structure/bars/pipe{ - dir = 1; - icon_state = "pipe" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"rhk" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcv"; - lockid = "shop" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/shop) -"rhv" = ( -/obj/structure/bars/pipe{ - dir = 1; - icon_state = "pipe" - }, -/obj/structure/bars/pipe{ - dir = 6; - icon_state = "pipe" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"rhz" = ( -/obj/structure/fermenting_barrel/beer, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"rij" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/structure/gate/bars{ - gid = "townin" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"rik" = ( -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/dwarf) -"riq" = ( -/turf/closed/mineral/rogue, -/area/rogue/indoors) -"riw" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/yeoldecookingmanual, -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/item/book/rogue/fishing, -/obj/item/book/rogue/sword, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"rix" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"riA" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"riE" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town) -"riP" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"rje" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup, -/obj/item/reagent_containers/glass/cup/silver, -/obj/item/reagent_containers/glass/cup/silver, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"rjl" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/manorgarri) -"rkd" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/shelter/mountains) -"rkw" = ( -/obj/structure/fluff/railing/border{ - dir = 9; - icon_state = "border" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"rky" = ( -/obj/item/natural/poo{ - desc = "This smells bad. Has a strangely magical aura." - }, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"rkT" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/grass, -/area/rogue/indoors) -"rlr" = ( -/turf/open/floor/rogue/tile, -/area/rogue/outdoors/exposed/manorgarri) -"rlJ" = ( -/obj/structure/bed/rogue/shit, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/landmark/start/prisoner{ - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/cell) -"rme" = ( -/obj/effect/landmark/start/vagrant{ - dir = 1; - icon_state = "arrow" - }, -/obj/structure/chair/bench/church/r{ - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"rmL" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"rmP" = ( -/obj/structure/closet/crate/chest/neu_iron{ - name = "contraband" - }, -/obj/item/clothing/cloak/raincloak/mortus, -/obj/item/reagent_containers/powder, -/obj/item/rogueweapon/sword/iron, -/obj/item/storage/fancy/cigarettes/zig, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"rmY" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"rng" = ( -/turf/closed/mineral/random/rogue, -/area/rogue/indoors) -"rnV" = ( -/obj/structure/bars/pipe, -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/shop) -"rod" = ( -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rog" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"roK" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue) -"roQ" = ( -/obj/structure/bars/pipe{ - dir = 5; - pixel_y = -17 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"roR" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/exposed/dwarf) -"roZ" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/mace/spiked, -/obj/item/rogueweapon/mace/spiked, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"rpx" = ( -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"rpA" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/outdoors/exposed/magiciantower) -"rpQ" = ( -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath/redhouse) -"rqi" = ( -/obj/structure/bars/pipe{ - dir = 10; - icon_state = "pipe" - }, -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 8; - icon_state = "endwooddark" - }, -/area/rogue/indoors/town/shop) -"rqR" = ( -/turf/open/floor/rogue/metal, -/area/rogue/outdoors/town) -"rqU" = ( -/obj/structure/fluff/clock/dense, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"rqW" = ( -/obj/machinery/light/rogue/wallfire/candle/weak, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"rrq" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"rrI" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/indoors/town/church/chapel) -"rrJ" = ( -/obj/structure/bookcase, -/obj/machinery/light/rogue/wallfire/candle/blue, -/obj/item/book/rogue/arcyne, -/obj/item/book/rogue/noc, -/obj/item/book/rogue/yeoldecookingmanual, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"rsd" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/restraints/legcuffs/beartrap, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"rst" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rsB" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/blocks, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rsE" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/dwarf) -"rsP" = ( -/obj/structure/bars/pipe{ - dir = 4; - icon_state = "pipe" - }, -/obj/structure/bars/pipe{ - dir = 10; - icon_state = "pipe" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"rsQ" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"rta" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rtP" = ( -/obj/structure/lever/wall{ - desc = "Let the games begin."; - dir = 4; - redstone_id = "sewer4" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"ruw" = ( -/turf/open/floor/rogue/metal, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rvj" = ( -/obj/structure/flora/roguegrass, -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/outdoors/exposed/town) -"rvM" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 8; - icon_state = "wooddir"; - locked = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"rwu" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/under/town/basement) -"rxp" = ( -/obj/structure/closet/crate/chest/neu, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"rxF" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"rxI" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/turf/open/transparent/openspace, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"rxS" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/church) -"rye" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/watchman{ - dir = 4; - name = "Garrison Archer" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"ryq" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ryU" = ( -/obj/structure/flora/roguegrass, -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"ryZ" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains/decap) -"rzl" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/exposed/town) -"rzm" = ( -/obj/effect/spawner/roguemap/treeorbush, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"rzv" = ( -/obj/structure/fluff/walldeco/chains, -/obj/structure/roguemachine/camera/right, -/turf/open/floor/rogue/metal/barograte, -/area/rogue/indoors/town/cell) -"rAW" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/town/garrison) -"rBL" = ( -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/magician) -"rBR" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/decal/cleanable/blood/gibs, -/obj/effect/decal/cleanable/blood/gibs/up, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"rCn" = ( -/obj/structure/fermenting_barrel, -/obj/structure/fluff/railing/fence{ - dir = 4; - icon_state = "fence" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"rCx" = ( -/obj/structure/bookcase/random/archive, -/obj/item/book/rogue/nitebeast, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"rCF" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"rCO" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"rDc" = ( -/obj/structure/bearpelt{ - pixel_x = -16 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"rDz" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/candle/yellow/lit{ - pixel_x = -5; - pixel_y = 9 - }, -/obj/item/candle/yellow/lit{ - pixel_x = 4; - pixel_y = 1 - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"rEa" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/outdoors/town/roofs) -"rEb" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 4; - icon_state = "endwooddark" - }, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"rEh" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/outdoors/exposed/church) -"rEu" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rEI" = ( -/obj/structure/fluff/railing/stonehedge, -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rEO" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcv"; - lockid = "merchant" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/shop) -"rES" = ( -/obj/item/rogueweapon/tongs, -/turf/closed/mineral/rogue, -/area/rogue/under/cave/spider) -"rEX" = ( -/turf/closed/mineral/rogue, -/area/rogue/outdoors/exposed/under/basement) -"rFa" = ( -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/dwarf) -"rFA" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/item/reagent_containers/food/snacks/egg, -/obj/structure/closet/crate/chest/neu, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"rFY" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"rGj" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/mountains) -"rGL" = ( -/obj/structure/bars/pipe{ - dir = 4; - icon_state = "pipe" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"rGX" = ( -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked{ - pixel_y = 3 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"rHd" = ( -/obj/structure/chair/bench/church/r{ - dir = 1 - }, -/obj/effect/landmark/start/orphan, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"rHl" = ( -/obj/structure/table/wood/counter{ - dir = 4 - }, -/obj/structure/bars/bent, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"rHz" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 4 - }, -/area/rogue/indoors/town/tavern) -"rHH" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/structure/fluff/walldeco/innsign{ - alpha = 200; - layer = 4.1; - level = 2; - pixel_x = 16; - pixel_y = 32 - }, -/obj/item/clothing/head/roguetown/menacing, -/obj/item/clothing/glasses/blindfold/white{ - name = "blindfold" - }, -/obj/item/clothing/glasses/blindfold/white{ - name = "blindfold" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/cell) -"rIo" = ( -/obj/structure/flora/roguegrass, -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rJq" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rJv" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/manorgarri) -"rJN" = ( -/mob/living/carbon/human/species/human/northern/bum/ambush, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rKy" = ( -/obj/item/roguemachine/merchant, -/obj/structure/roguemachine/balloon_pad, -/turf/open/floor/rogue/tile, -/area/rogue/outdoors/town/roofs) -"rKK" = ( -/obj/structure/rogue/trophy/deer, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"rLn" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rLE" = ( -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/obj/structure/roguetent, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/shelter/rtfield) -"rLU" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/effect/landmark/start/vagrant{ - dir = 1; - icon_state = "arrow" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"rMJ" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/flora/rock/pile, -/turf/open/water/river, -/area/rogue/outdoors/river) -"rMM" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"rMO" = ( -/obj/structure/fermenting_barrel/random/beer, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"rND" = ( -/obj/structure/closet/crate/roguecloset/inn/south, -/obj/item/natural/bundle/cloth{ - amount = 8 - }, -/obj/item/reagent_containers/glass/bottle/rogue/poison, -/obj/item/storage/roguebag, -/obj/item/clothing/cloak/apron/cook{ - pixel_y = 17 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"rOe" = ( -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"rOD" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/item/chair/stool/bar/rogue, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"rOU" = ( -/obj/structure/flora/roguegrass/water, -/turf/open/water/swamp, -/area/rogue/outdoors/bog) -"rPy" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/dwarf) -"rPA" = ( -/mob/living/carbon/human/species/human/northern/bum{ - name = "beggar" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"rPQ" = ( -/obj/structure/bars/pipe{ - dir = 4; - icon_state = "pipe" - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"rQb" = ( -/obj/structure/fluff/walldeco/bigpainting/lake, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"rQl" = ( -/obj/effect/decal/remains/saiga, -/obj/effect/decal/cleanable/blood/gibs, -/obj/structure/fluff/statue/evil, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rQp" = ( -/obj/structure/floordoor{ - redstone_id = "volfpit" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"rQE" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rQJ" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"rRw" = ( -/obj/effect/spawner/roguemap/treeorbush, -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"rRM" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 8; - icon_state = "endwooddark" - }, -/area/rogue/indoors/town) -"rRX" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"rSm" = ( -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/indoors/town/tavern/saiga) -"rTk" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue) -"rUn" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueweapon/flail, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"rUt" = ( -/obj/structure/closet/crate/chest/neu_fancy, -/obj/structure/fluff/walldeco/maidensigil, -/obj/item/ingot/gold, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/indoors/town/vault) -"rUu" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"rUK" = ( -/obj/structure/mineral_door/wood/fancywood, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church/chapel) -"rWn" = ( -/obj/item/flashlight/flare/torch, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"rWo" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 4 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"rWD" = ( -/turf/open/floor/rogue/herringbone, -/area/rogue/under/spiderbase) -"rWF" = ( -/obj/structure/chair/bench/couch/redright, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"rWR" = ( -/obj/structure/bars/cemetery, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/bush/wall, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"rWX" = ( -/obj/structure/roguetent, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/cell) -"rXj" = ( -/obj/structure/chair/wood/rogue/fancy, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"rXp" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 4 - }, -/area/rogue/indoors/shelter/mountains/decap) -"rXu" = ( -/obj/structure/chair/bench/couch/redright, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"rXJ" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"rXT" = ( -/obj/structure/chair/wood/rogue/fancy{ - dir = 4; - icon_state = "chair1" - }, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/under/town/basement) -"rYx" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/mountains) -"rYy" = ( -/obj/structure/well{ - name = "well of man-eating ghouls" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"rYK" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"rZj" = ( -/obj/structure/fluff/traveltile{ - aportalgoesto = "bogrtin"; - aportalid = "bogrtout" - }, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/outdoors/bog) -"rZo" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/mountains/decap) -"saJ" = ( -/obj/structure/closet/crate/roguecloset/dark, -/obj/item/rope/chain, -/obj/item/rope/chain, -/obj/item/rope/chain, -/obj/item/rope/chain, -/obj/item/rope/chain, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"sbb" = ( -/obj/item/grown/log/tree/stake, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"sbg" = ( -/obj/structure/ladder, -/obj/structure/bars/pipe{ - dir = 1; - icon_state = "pipe" - }, -/turf/open/floor/rogue/metal, -/area/rogue/indoors/town) -"sbG" = ( -/obj/structure/table/wood/nice/decorated_alt, -/obj/item/book/rogue/knowledge1, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"sbV" = ( -/obj/structure/table/wood/nice/decorated_alt, -/obj/item/paper/scroll{ - name = "guest log" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"sbX" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"sca" = ( -/obj/effect/spawner/roguemap/sewerencounter, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/spiderbase) -"scc" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle, -/area/rogue) -"scj" = ( -/obj/structure/stairs/stone, -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"scu" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/footprints{ - dir = 8 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"scM" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"sdn" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/church) -"sdp" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"sdU" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/indoors/shelter/rtfield) -"sek" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/red/corner{ - dir = 1 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"seF" = ( -/obj/item/restraints/legcuffs/beartrap, -/turf/open/floor/rogue/metal/barograte, -/area/rogue/indoors/town/cell) -"sfh" = ( -/turf/open/transparent/glass, -/area/rogue/outdoors/town/roofs) -"sfH" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/ruinedwood/turned, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"sfJ" = ( -/turf/open/water/swamp, -/area/rogue/outdoors/bog) -"sfQ" = ( -/obj/effect/decal/cobbleedge, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"shd" = ( -/obj/structure/bars/pipe{ - dir = 10; - icon_state = "pipe" - }, -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town) -"sho" = ( -/obj/structure/fluff/statue/pillar, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"shu" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern/saiga) -"shA" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"siF" = ( -/obj/structure/fluff/railing/wood{ - dir = 8; - icon_state = "woodrailing"; - pixel_y = -1 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/church) -"siG" = ( -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"sjk" = ( -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue/under/cave/spider) -"sjm" = ( -/obj/structure/closet/crate/chest/wicker, -/obj/item/neuFarm/seed/onion, -/obj/item/neuFarm/seed/cabbage, -/obj/item/neuFarm/seed/potato, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"sjq" = ( -/obj/item/roguebin/water, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/church/chapel) -"sjG" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/roguekey/shop, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"sjL" = ( -/obj/structure/stairs/stone{ - dir = 4; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"sjZ" = ( -/obj/structure/ladder/earth, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "Abandoned Mine" - }) -"ski" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"sll" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "manor"; - name = "throne room" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"slK" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"slZ" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/cooking/pan, -/obj/item/cooking/pan, -/turf/open/floor/rogue/tile/checker, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"sme" = ( -/obj/item/rogueweapon/sword/rapier, -/obj/item/natural/cloth, -/obj/structure/mirror/alt, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"smq" = ( -/obj/structure/table/wood/large/corner_new{ - dir = 5 - }, -/obj/item/book/rogue/yeoldecookingmanual, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"smY" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"snE" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"sol" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/bigrat, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"soM" = ( -/obj/structure/fluff/walldeco/vinez/l{ - dir = 10 - }, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"spe" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/suit/roguetown/shirt/dress, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"sph" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/woods) -"spQ" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/structure/bed/rogue/inn, -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"sqT" = ( -/obj/structure/table/wood/plain_alt, -/obj/item/reagent_containers/glass/cup{ - pixel_x = -7 - }, -/obj/item/candle/yellow{ - pixel_x = 7 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"srf" = ( -/obj/structure/chair/wood/rogue/fancy{ - dir = 8; - icon_state = "chair1" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/shop) -"srr" = ( -/obj/structure/stairs{ - dir = 8; - icon_state = "stairs" - }, -/obj/item/rogueweapon/pick, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"srt" = ( -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/manorgarri) -"sry" = ( -/obj/structure/rack/rogue, -/obj/item/keyring, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"srS" = ( -/obj/item/natural/dirtclod, -/obj/structure/bars/pipe{ - dir = 1; - icon_state = "pipe" - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"srW" = ( -/obj/structure/fluff/walldeco/masonflag{ - pixel_x = -32 - }, -/obj/structure/closet/crate/roguecloset/lord, -/obj/structure/roguemachine/mail, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/paper, -/obj/item/natural/feather, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"ssq" = ( -/obj/effect/decal/cleanable/blood/gibs/core, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"ssy" = ( -/mob/living/simple_animal/hostile/zombie, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"ssC" = ( -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"sto" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 4 - }, -/area/rogue/indoors/town) -"stC" = ( -/obj/structure/closet/dirthole/closed/loot, -/obj/structure/gravemarker, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"stI" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/obj/item/natural/stone, -/obj/item/reagent_containers/glass/bucket/wooden, -/obj/effect/decal/cleanable/food/tomato_smudge, -/obj/item/natural/poo, -/obj/item/grown/log/tree/stake, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/cell) -"stR" = ( -/obj/effect/decal/cobbleedge{ - dir = 1 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"sue" = ( -/obj/structure/fluff/railing/border, -/obj/structure/rogue/trophy/deer, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/garrison) -"suy" = ( -/obj/structure/fluff/walldeco/chains, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"suK" = ( -/obj/structure/table/wood/plain_alt, -/obj/item/candle/yellow/lit{ - pixel_x = 4; - pixel_y = 1 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"suQ" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"suS" = ( -/obj/structure/closet/crate/chest/wicker{ - name = "fruit seeds" - }, -/obj/item/neuFarm/seed/berryrogue, -/obj/item/neuFarm/seed/berryrogue, -/obj/item/neuFarm/seed/berryrogue, -/obj/item/neuFarm/seed/berryrogue, -/obj/item/neuFarm/seed/berryrogue, -/obj/item/neuFarm/seed/apple, -/obj/item/neuFarm/seed/apple, -/obj/item/neuFarm/seed/apple, -/obj/item/neuFarm/seed/apple, -/obj/item/neuFarm/seed/apple, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"suZ" = ( -/obj/effect/decal/remains/human, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"svq" = ( -/obj/structure/mineral_door/wood/fancywood{ - lockid = "church" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"svB" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "Abandoned Mine" - }) -"svE" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"swo" = ( -/obj/structure/fluff/walldeco/med2{ - pixel_x = -32 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"swy" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"sxt" = ( -/obj/structure/closet/crate/coffin, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"sxT" = ( -/obj/structure/chair/bench/church/r{ - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"sxW" = ( -/obj/structure/toilet{ - name = "the wizard's throne" - }, -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"syZ" = ( -/obj/item/reagent_containers/food/snacks/rogue/fryfish/eel, -/obj/item/reagent_containers/food/snacks/rogue/fryfish/eel, -/obj/item/reagent_containers/food/snacks/rogue/fryfish/eel, -/obj/structure/closet/crate/chest/crate, -/turf/open/floor/rogue/metal/barograte, -/area/rogue/outdoors/exposed/under/basement) -"szk" = ( -/obj/effect/spawner/roguemap/sewerencounter, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"szo" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 4 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"szq" = ( -/obj/structure/fluff/traveltile{ - aportalgoesto = "bogrtin2"; - aportalid = "bogrtout2" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"szw" = ( -/obj/machinery/light/rogue/firebowl, -/obj/machinery/light/rogue, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"szB" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "tablewood1" - }, -/obj/item/natural/cloth, -/obj/item/soap, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"sAi" = ( -/obj/item/natural/stone, -/obj/item/natural/rock/salt, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/mountains) -"sAP" = ( -/obj/structure/fermenting_barrel/water, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"sAV" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/fence{ - dir = 4; - icon_state = "fence" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"sAY" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/tavern/saiga) -"sBY" = ( -/turf/closed/wall/mineral/rogue/roofwall/center, -/area/rogue) -"sCN" = ( -/obj/structure/closet/crate/roguecloset/inn{ - pixel_y = 4 - }, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern/saiga) -"sCW" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"sDG" = ( -/obj/structure/chair/wood/rogue/fancy, -/obj/effect/landmark/start/merchant, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/shop) -"sEn" = ( -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"sEq" = ( -/obj/effect/landmark/start/cook, -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town) -"sEI" = ( -/turf/closed/mineral/rogue, -/area/rogue/outdoors/mountains) -"sFf" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/spiderbase) -"sFy" = ( -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/shelter/town/dwarf) -"sFB" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/river) -"sFL" = ( -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"sGh" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"sGp" = ( -/obj/effect/landmark/start/squire{ - dir = 1; - icon_state = "arrow" - }, -/turf/open/floor/rogue/carpet/lord/right, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"sGL" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue) -"sGM" = ( -/obj/structure/fluff/statue/knight/r, -/obj/structure/stone_tile/slab/cracked, -/obj/structure/fluff/walldeco/psybanner{ - pixel_y = 32 - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"sGU" = ( -/obj/structure/mineral_door/wood/deadbolt{ - name = "privy" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"sIe" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"sIp" = ( -/turf/open/floor/rogue/cobble, -/area/rogue) -"sJc" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"sJe" = ( -/obj/structure/table/wood/plain_alt, -/obj/item/rogueweapon/woodstaff/aries, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/church/chapel) -"sJk" = ( -/obj/structure/rack/rogue, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"sJD" = ( -/obj/structure/bed/rogue, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"sJP" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town) -"sKa" = ( -/obj/structure/fluff/wallclock, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern/saiga) -"sLw" = ( -/obj/structure/fluff/railing/border{ - dir = 9; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue) -"sLN" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/mountains) -"sLW" = ( -/obj/structure/flora/roguetree, -/turf/open/water/swamp, -/area/rogue/outdoors/bog) -"sLX" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/obj/effect/decal/cobbleedge, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"sMh" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"sMr" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/town/basement) -"sMv" = ( -/obj/structure/bed/rogue/mediocre, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"sMK" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/church/chapel) -"sMX" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"sNf" = ( -/obj/structure/mineral_door/wood/red{ - locked = 1 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"sNq" = ( -/obj/structure/table/wood/large/corner_new{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"sNy" = ( -/turf/closed/mineral/random/rogue, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"sNz" = ( -/turf/closed/wall/mineral/rogue/pipe{ - icon_state = "iron_line" - }, -/area/rogue/indoors/shelter/town/dwarf) -"sOn" = ( -/obj/structure/mineral_door/wood/violet{ - locked = 1; - lockid = "nightmaiden"; - name = "back rooms" - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath/redhouse) -"sOs" = ( -/obj/structure/ladder, -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/magician) -"sOE" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"sOX" = ( -/obj/structure/bars/pipe{ - dir = 10; - icon_state = "pipe" - }, -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town) -"sOZ" = ( -/obj/structure/table/vtable/v2, -/obj/structure/rogue/trophy/deer, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"sPk" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"sPp" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/storage/box/matches, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/town) -"sPP" = ( -/turf/open/floor/rogue/grass, -/area/rogue/indoors/shelter/rtfield) -"sQb" = ( -/obj/structure/stairs{ - dir = 8; - icon_state = "stairs" - }, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/town/roofs) -"sQV" = ( -/obj/structure/mineral_door/bars, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"sQX" = ( -/obj/structure/closet/dirthole/closed, -/obj/effect/decal/remains/xeno/larva{ - desc = "Truely, nothing is sacred."; - name = "child's remains" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"sRb" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/under/spiderbase) -"sRf" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/church/chapel) -"sRI" = ( -/obj/item/natural/rock, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"sRK" = ( -/obj/structure/fluff/signage{ - desc = "There are fingerprints pressed into the molded wood, either end of the sign..."; - name = "ROCKHAMLET" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"sRR" = ( -/obj/effect/spawner/roguemap/treeorstump, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"sRZ" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave/spider) -"sSj" = ( -/obj/effect/landmark/start/villager{ - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"sSX" = ( -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/garrison) -"sTm" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"sTM" = ( -/obj/structure/flora/roguetree, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"sTP" = ( -/obj/structure/bars/pipe, -/obj/structure/fluff/walldeco/vinez/l{ - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"sVh" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"sVm" = ( -/obj/structure/flora/roguegrass, -/mob/living/simple_animal/hostile/retaliate/rogue/goatmale{ - aggressive = 1; - name = "mountain goat" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/mountains) -"sVC" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/structure/closet/crate/chest/crate, -/obj/item/flashlight/flare/torch, -/obj/item/flashlight/flare/torch, -/obj/item/flashlight/flare/torch, -/obj/item/flashlight/flare/torch, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"sVQ" = ( -/obj/structure/fluff/railing/border{ - dir = 5; - icon_state = "border" - }, -/obj/effect/decal/cleanable/oil{ - name = "tar" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"sVV" = ( -/obj/structure/flora/roguegrass, -/obj/structure/closet/dirthole/closed/loot, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"sWQ" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"sXm" = ( -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/bog) -"sYX" = ( -/obj/structure/kneestingers, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"sZD" = ( -/obj/structure/flora/roguegrass/bush/wall/tall, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"sZS" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/item/roguekey/dungeon{ - lockid = "woodsm"; - name = "old key" - }, -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"tbe" = ( -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/outdoors/exposed/under/basement) -"tbh" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"tbx" = ( -/obj/structure/flora/roguetree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"tbC" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/cloak/raincloak/green, -/obj/item/clothing/cloak/raincloak/green, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"tcJ" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/magician) -"tcZ" = ( -/obj/structure/fluff/walldeco/bath/two{ - pixel_x = -29 - }, -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"tdl" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/shelter/rtfield) -"tdB" = ( -/obj/structure/closet/crate/drawer/inn{ - lockid = "tavern"; - name = "innkeepers drawer"; - pixel_y = 4 - }, -/obj/item/roguekey/tavern, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/clothing/suit/roguetown/armor/leather/vest/innkeep, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/tavern/saiga) -"teg" = ( -/obj/effect/decal/cobbleedge, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"tem" = ( -/mob/living/simple_animal/hostile/zombie, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"teu" = ( -/obj/structure/fluff/statue/knightalt, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"tez" = ( -/obj/item/candle/yellow/lit/infinite{ - light_range = 1; - pixel_x = -8; - pixel_y = 5 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath/redhouse) -"teO" = ( -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"teW" = ( -/obj/structure/closet/crate/chest{ - locked = 1; - lockid = "woodsm" - }, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/obj/item/paper/scroll, -/obj/item/natural/feather, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"tfn" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"tfA" = ( -/obj/structure/closet/crate/chest/neu, -/obj/item/rogue/instrument/flute, -/obj/item/rogueweapon/mace/wsword, -/obj/item/rogueweapon/sickle, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"tfH" = ( -/obj/structure/flora/newleaf/corner{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tfJ" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/obj/structure/kneestingers, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"tfY" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - lockid = "mason"; - name = "STONE" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"tgz" = ( -/obj/item/chair/stool/bar/rogue, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/spiderbase) -"tgC" = ( -/obj/structure/fluff/statue/gargoyle/moss, -/turf/open/floor/bronze, -/area/rogue/outdoors/exposed/manorgarri) -"tgY" = ( -/obj/structure/roguemachine/camera, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"tiW" = ( -/obj/structure/fermenting_barrel/water, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"tiY" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town/church/chapel) -"tjp" = ( -/turf/closed/wall/mineral/rogue/pipe{ - dir = 4; - icon_state = "iron_corner" - }, -/area/rogue/indoors/shelter/town/dwarf) -"tjQ" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/bush_meagre, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"tki" = ( -/obj/structure/roguewindow/openclose{ - dir = 8; - icon_state = "woodwindowdir" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"tkW" = ( -/obj/structure/fluff/walldeco/bath{ - pixel_x = 0; - pixel_y = 32 - }, -/obj/effect/decal/shadow_floor{ - dir = 1 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath/redhouse) -"tkY" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"tlx" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/under/spiderbase) -"tlC" = ( -/obj/structure/table/wood/treestump/burnt, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tmk" = ( -/obj/structure/closet/crate/drawer, -/obj/machinery/light/rogue/wallfire/candle/r, -/obj/item/clothing/head/roguetown/chaperon, -/obj/item/storage/box/matches, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"tnn" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "manor" - }, -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/garrison) -"tnO" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/spiderbase) -"tos" = ( -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/indoors/town/tavern/saiga) -"toA" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/spider, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"toY" = ( -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"tph" = ( -/obj/structure/bars/pipe, -/obj/structure/table/vtable, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"tpk" = ( -/obj/effect/landmark/start/magician{ - dir = 8 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"tpB" = ( -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tpC" = ( -/obj/item/reagent_containers/glass/bucket/wooden{ - pixel_y = 5 - }, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town) -"tpQ" = ( -/obj/structure/mineral_door/wood/violet{ - locked = 1; - lockid = "nightmaiden"; - name = "storage" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"tpX" = ( -/obj/structure/fluff/walldeco/chains, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"tqD" = ( -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"tqO" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/indoors) -"tra" = ( -/obj/structure/flora/roguegrass, -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"tri" = ( -/obj/item/storage/belt/rogue/leather/rope, -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"trq" = ( -/obj/machinery/light/rogue/hearth, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"try" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town) -"trF" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"tsd" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/outdoors/exposed/manorgarri) -"tsI" = ( -/obj/structure/fluff/walldeco/bath/three, -/obj/effect/decal/shadow_floor{ - dir = 8 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath/redhouse) -"tsO" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"tsY" = ( -/obj/structure/bars/pipe{ - dir = 6; - icon_state = "pipe" - }, -/obj/structure/fluff/walldeco/vinez/l, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"ttP" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"ttW" = ( -/obj/effect/decal/remains/human, -/mob/living/carbon/human/species/skeleton/npc, -/turf/open/floor/rogue/dirt, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"tuo" = ( -/obj/effect/landmark/start/butler{ - dir = 4; - icon_state = "arrow" - }, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"tuB" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains/decap) -"tuD" = ( -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town/church/chapel) -"tuO" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/indoors/shelter/mountains) -"tuU" = ( -/obj/structure/chair/wood/rogue{ - dir = 1; - icon_state = "chair2" - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/cell) -"tvc" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"tvX" = ( -/obj/structure/gate/bars{ - gid = "keepin" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"tvZ" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/outdoors/exposed/under/basement) -"twz" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 4; - icon_state = "endwooddark" - }, -/area/rogue/indoors/town/shop) -"twS" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/mountains) -"twV" = ( -/obj/structure/chair/wood/rogue/chair_noble{ - dir = 8 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"txc" = ( -/obj/structure/stairs/stone{ - dir = 4; - icon_state = "stonestairs" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/manorgarri) -"txm" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcr"; - locked = 1; - lockid = "garrison"; - name = "Town watch" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"txE" = ( -/obj/effect/landmark/start/innkeep, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern/saiga) -"txR" = ( -/obj/structure/fluff/railing/border{ - dir = 5; - icon_state = "border" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/manorgarri) -"tyj" = ( -/obj/structure/spirit_board, -/obj/item/natural/feather{ - pixel_y = 9 - }, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/magician) -"tyB" = ( -/turf/closed/wall/mineral/rogue/decostone/cand/reddish, -/area/rogue/indoors/town/bath/redhouse) -"tzp" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - lockid = "confession" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"tzw" = ( -/obj/structure/table/wood/treestump{ - pixel_x = -7 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"tzO" = ( -/obj/structure/flora/roguegrass, -/obj/structure/roguerock, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"tAs" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 8; - icon_state = "donjondir"; - locked = 1; - lockid = "blacksmith" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"tAx" = ( -/obj/structure/fluff/nest, -/obj/item/reagent_containers/food/snacks/egg/loaded, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"tAK" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle, -/area/rogue/indoors/town/magician) -"tAV" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/fluff/railing/wood, -/turf/open/transparent/openspace, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"tAW" = ( -/obj/structure/bars/pipe{ - dir = 6; - icon_state = "pipe" - }, -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town) -"tBe" = ( -/obj/structure/fluff/railing/stonehedge, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tCf" = ( -/obj/item/roguekey/merchant{ - pixel_x = 5; - pixel_y = 1 - }, -/obj/item/roguekey/shop{ - pixel_x = -5; - pixel_y = 2 - }, -/obj/structure/closet/crate/chest/neu_iron, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/shop) -"tCi" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/psycross, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tCz" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 4 - }, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"tCN" = ( -/obj/structure/table/wood/nice/decorated_alt, -/obj/item/candle/yellow/lit/infinite{ - pixel_x = 8; - pixel_y = 7 - }, -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"tDz" = ( -/obj/structure/well{ - name = "well of man-eating ghouls" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tEb" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"tEi" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/shop) -"tFc" = ( -/obj/structure/flora/roguegrass/bush_meagre, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"tFt" = ( -/obj/structure/fluff/walldeco/customflag{ - pixel_x = -32 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"tFF" = ( -/turf/closed/mineral/random/rogue/high, -/area/rogue/indoors) -"tFN" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town) -"tGf" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/turf/open/transparent/openspace, -/area/rogue/indoors) -"tGk" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"tGA" = ( -/obj/structure/mineral_door/swing_door, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"tGP" = ( -/obj/effect/decal/cleanable/blood/old, -/mob/living/simple_animal/hostile/retaliate/rogue/wolf, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"tGV" = ( -/obj/structure/flora/newbranch{ - dir = 4 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tHr" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/effect/decal/cleanable/food/tomato_smudge, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"tIF" = ( -/obj/structure/chair/wood/rogue/chair_noble{ - dir = 1 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/bath/redhouse) -"tJr" = ( -/obj/structure/fluff/psycross/crafted, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tJu" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"tJE" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/mountains) -"tJG" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/bookcase, -/obj/item/book/rogue/secret/ledger, -/obj/item/book/rogue/secret/xylix, -/obj/item/book/rogue/law, -/obj/item/book/rogue/bibble, -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"tKp" = ( -/obj/structure/spider/cocoon, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"tKu" = ( -/obj/item/ingot/steel, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"tKz" = ( -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/magiciantower) -"tKL" = ( -/obj/structure/spider/stickyweb, -/turf/closed/mineral/rogue, -/area/rogue/under/cave/spider) -"tKM" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"tKP" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"tKU" = ( -/obj/structure/well, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/manorgarri) -"tLe" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "sheriff" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"tLl" = ( -/obj/machinery/light/rogue/firebowl, -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"tLA" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/church) -"tLH" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"tLJ" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/structure/fluff/walldeco/bath/wallrope{ - pixel_y = -32 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"tLK" = ( -/obj/machinery/light/rogue/wallfire/candle/weak, -/turf/open/floor/rogue/tile/checker_green, -/area/rogue/indoors/town/tavern/saiga) -"tMa" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"tMe" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/caverogue{ - first_time_text = "SCREAMING MOUNTAIN MINESHAFT" - }) -"tMr" = ( -/obj/item/natural/dirtclod, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"tNI" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/item/reagent_containers/glass/cup/golden, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"tNP" = ( -/obj/structure/fluff/clodpile, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tOb" = ( -/obj/structure/fluff/statue/gargoyle/candles, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/town) -"tOe" = ( -/obj/item/rope, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tOw" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/head/roguetown/helmet, -/obj/item/clothing/head/roguetown/helmet, -/obj/item/clothing/head/roguetown/helmet, -/obj/item/clothing/neck/roguetown/gorget, -/obj/item/clothing/neck/roguetown/gorget, -/obj/item/clothing/neck/roguetown/gorget, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"tOU" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"tPd" = ( -/obj/structure/chair/bench/church{ - dir = 1; - icon_state = "church_benchleft" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"tPn" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"tPt" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "tablewood2" - }, -/obj/item/candle/yellow, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"tPA" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/obj/item/rogueweapon/mace/woodclub, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"tPG" = ( -/obj/structure/stairs/stone{ - dir = 8; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tPK" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tPO" = ( -/obj/structure/flora/roguegrass/water/reeds, -/turf/open/water/swamp/deep, -/area/rogue/outdoors/bog) -"tQi" = ( -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"tQC" = ( -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"tQJ" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tRd" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"tRx" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"tRE" = ( -/obj/item/reagent_containers/glass/cup/skull, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"tRN" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/mountains) -"tSa" = ( -/obj/item/roguegem/violet, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"tSb" = ( -/obj/item/rope/chain, -/obj/item/rope/chain, -/obj/machinery/light/rogue/torchholder{ - pixel_y = 26 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"tSd" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/shelter/mountains) -"tSA" = ( -/obj/structure/stairs/stone, -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"tSI" = ( -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town) -"tTy" = ( -/obj/effect/decal/remains/human, -/turf/open/water/swamp, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"tTP" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tUl" = ( -/obj/structure/rack/rogue, -/obj/item/storage/roguebag{ - pixel_x = -8; - pixel_y = 6 - }, -/obj/item/storage/roguebag{ - pixel_x = 8; - pixel_y = -2 - }, -/obj/item/storage/backpack/rogue/backpack, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"tUq" = ( -/obj/structure/roguemachine/scomm/l, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"tUC" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tUQ" = ( -/turf/open/floor/rogue/carpet/lord/left, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"tUZ" = ( -/obj/effect/decal/cobbleedge{ - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"tVv" = ( -/obj/structure/flora/roguegrass, -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors) -"tVK" = ( -/obj/structure/closet/dirthole/closed/loot, -/obj/structure/flora/roguegrass, -/obj/structure/fluff/railing/fence{ - dir = 4; - icon_state = "fence" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"tWi" = ( -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"tWr" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/grabber, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"tWT" = ( -/obj/item/roguebin/water/gross, -/obj/structure/rack/rogue/shelf/notdense, -/obj/item/candle/yellow/lit/infinite/strong{ - pixel_x = 0; - pixel_y = 32 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/dwarfin) -"tXg" = ( -/obj/structure/bed/rogue/wool, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"tXt" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"tXv" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable" - }, -/obj/item/needle/thorn, -/obj/item/needle/thorn, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"tYk" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"tYR" = ( -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/dwarf) -"tYZ" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable_mid" - }, -/obj/item/paper/scroll{ - pixel_x = -6; - pixel_y = 3 - }, -/obj/machinery/light/rogue/wallfire/candle/blue{ - pixel_y = -32 - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"tZl" = ( -/obj/structure/flora/roguegrass, -/mob/living/simple_animal/hostile/retaliate/rogue/goat, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"tZr" = ( -/mob/living/carbon/human/species/human/northern/bum{ - aggressive = 1; - druggy = 1; - name = "madman"; - wander = 1 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"tZR" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/town) -"tZZ" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/adventurer{ - dir = 1 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"uan" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/garrison) -"uaI" = ( -/obj/structure/bars/pipe{ - dir = 1; - icon_state = "pipe" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/dwarfin) -"ube" = ( -/obj/item/chair/stool/bar/rogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"ubI" = ( -/obj/structure/chair/wood/rogue/chair_noble/red{ - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"ubK" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ubM" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue) -"ubZ" = ( -/obj/structure/bed/rogue/shit, -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"uck" = ( -/obj/structure/rack/rogue, -/obj/item/natural/saddle, -/turf/open/floor/rogue/dirt, -/area/rogue) -"ucC" = ( -/obj/structure/stairs/fancy/l{ - dir = 1 - }, -/turf/open/floor/rogue/carpet/lord/left, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ucN" = ( -/obj/effect/spawner/roguemap/treeorbush, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ucT" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/cave) -"uda" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"udt" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/manorgarri) -"udN" = ( -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue) -"udT" = ( -/obj/structure/stairs/stone, -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ued" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/river) -"ueO" = ( -/turf/closed/wall/mineral/rogue/pipe{ - dir = 4; - icon_state = "iron_line" - }, -/area/rogue/indoors/shelter/town/dwarf) -"ufp" = ( -/obj/structure/chair/stool/rogue, -/obj/structure/fluff/walldeco/med6{ - pixel_y = 31 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"ufL" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/reagent_containers/food/snacks/rogue/frybread, -/obj/item/reagent_containers/food/snacks/rogue/frybread, -/obj/item/reagent_containers/food/snacks/rogue/raisinbread, -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/bath/redhouse) -"ufN" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/obj/machinery/light/rogue{ - pixel_y = 19 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ugc" = ( -/obj/effect/decal/cleanable/blood/footprints, -/obj/effect/decal/cleanable/blood/footprints{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/splatter, -/mob/living/carbon/human/species/human/northern/bum/ambush, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"ugo" = ( -/obj/structure/flora/rock/pile, -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ugq" = ( -/obj/structure/stairs{ - dir = 1; - icon_state = "stairs" - }, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/shop) -"uhf" = ( -/obj/structure/table/wood/plain_alt, -/obj/item/rope, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/shop) -"uhj" = ( -/obj/effect/decal/remains/human, -/obj/item/roguecoin/copper, -/obj/item/roguecoin/copper, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); - first_time_text = "CATACOMBS" - }) -"uhk" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 8; - locked = 1; - lockid = "tavern" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"uhn" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uhE" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"uhR" = ( -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/shop) -"uhZ" = ( -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/church/chapel) -"uic" = ( -/obj/structure/flora/roguetree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"uiG" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/blocks, -/area/rogue/under/spiderbase) -"uiX" = ( -/obj/structure/fluff/railing/border, -/obj/structure/roguemachine/scomm, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"ukr" = ( -/obj/item/clothing/head/roguetown/helmet/leather, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"ukE" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"ukH" = ( -/obj/structure/closet/crate/chest/neu, -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"umO" = ( -/obj/structure/bed/rogue, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/cell) -"umU" = ( -/obj/structure/mineral_door/wood/fancywood, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"unu" = ( -/obj/structure/rack/rogue, -/obj/item/reagent_containers/glass/cup/wooden, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town/garrison) -"uog" = ( -/obj/structure/closet/crate/drawer/random{ - pixel_y = 7 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/under/town/basement) -"uoh" = ( -/obj/structure/handcart{ - dir = 4; - icon_state = "cart-empty" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"uoo" = ( -/turf/closed/wall/mineral/rogue/wooddark/end, -/area/rogue/indoors/shelter/town/dwarf) -"uoO" = ( -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/shelter/town/dwarf) -"uoT" = ( -/obj/structure/bars/cemetery, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uoY" = ( -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern/saiga) -"upL" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"upQ" = ( -/obj/structure/table/wood/nice/decorated_alt, -/obj/item/candle/yellow/lit/infinite{ - pixel_x = 8; - pixel_y = 7 - }, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/bath/redhouse) -"uqe" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"uqi" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"uqn" = ( -/obj/structure/closet/crate/chest/neu_iron, -/obj/item/roguekey/roomvi{ - lockid = "bath4"; - name = "bathkey IV" - }, -/obj/item/roguekey/roomvi{ - lockid = "bath1"; - name = "bathkey I" - }, -/obj/item/roguekey/roomvi{ - lockid = "bath2"; - name = "bathkey II" - }, -/obj/item/roguekey/roomvi{ - lockid = "bath3"; - name = "bathkey III" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"uqL" = ( -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"urm" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"urw" = ( -/obj/structure/closet/crate/chest/wicker, -/obj/item/neuFarm/seed/oat, -/obj/item/neuFarm/seed/oat, -/obj/item/neuFarm/seed/oat, -/obj/item/neuFarm/seed/oat, -/obj/item/neuFarm/seed/oat, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"urE" = ( -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"urM" = ( -/obj/structure/closet/crate/chest/old_crate, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"urU" = ( -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"usN" = ( -/obj/structure/fluff/walldeco/chains, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"usU" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"utC" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/under/town/sewer) -"utR" = ( -/turf/open/floor/rogue/woodturned/nosmooth, -/area/rogue/outdoors/town/roofs) -"uul" = ( -/obj/structure/closet/crate/chest/neu_fancy{ - name = "coin chest" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"uuL" = ( -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/church) -"uvn" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/shelter/mountains/decap) -"uvo" = ( -/obj/structure/stairs/stone{ - dir = 8; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uvz" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/nitebeast, -/obj/item/book/rogue/tales1, -/obj/item/book/granter/spell/smoke, -/obj/item/book/manual/wiki/cooking_to_serve_man, -/obj/item/book/mimery{ - name = "The Way of Silence" - }, -/obj/item/book/rogue/tales3, -/obj/item/book/rogue/arcyne, -/obj/item/book/rogue/magicaltheory, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"uvA" = ( -/obj/item/reagent_containers/glass/cup/wooden{ - pixel_y = -7 - }, -/obj/structure/rack/rogue/shelf/biggest, -/obj/item/reagent_containers/glass/cup/wooden{ - pixel_x = -5; - pixel_y = -7 - }, -/obj/item/reagent_containers/glass/cup/wooden{ - pixel_x = 8; - pixel_y = -7 - }, -/obj/item/reagent_containers/glass/cup/steel{ - pixel_x = -3; - pixel_y = 14 - }, -/obj/item/reagent_containers/glass/cup/steel{ - pixel_x = 5; - pixel_y = 14 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/tavern/saiga) -"uvC" = ( -/obj/structure/stairs/stone, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"uwa" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/item/clothing/head/roguetown/knitcap, -/obj/item/candle/yellow/lit/infinite{ - pixel_y = 32 - }, -/obj/structure/rack/rogue/shelf/notdense, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"uwk" = ( -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/shop) -"uwC" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue) -"uwG" = ( -/obj/item/clothing/head/roguetown/jester, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"uwR" = ( -/obj/structure/table/wood/nice/decorated_alt, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern/saiga) -"uxm" = ( -/obj/structure/closet/crate/chest/neu, -/obj/item/natural/cloth, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"uxt" = ( -/obj/structure/bars/cemetery, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"uxG" = ( -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"uxJ" = ( -/obj/structure/fluff/railing/stonehedge, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"uxS" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "tablewood2" - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"uyd" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/quiver/arrows, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"uyG" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/tavern/saiga) -"uzs" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/shelter/rtfield) -"uzF" = ( -/obj/structure/fermenting_barrel/random, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"uAc" = ( -/obj/structure/bars/pipe{ - dir = 4; - icon_state = "pipe" - }, -/obj/structure/bars/pipe{ - dir = 8; - icon_state = "pipe" - }, -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/town/roofs) -"uAe" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/obj/item/rogueweapon/tongs, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/shelter/town/dwarf) -"uAH" = ( -/obj/structure/closet/crate/chest/neu, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/paper/scroll, -/obj/item/natural/feather, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"uBq" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueweapon/woodcut, -/obj/item/rogueweapon/woodcut, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"uBA" = ( -/obj/structure/mannequin/male/decorative, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"uBG" = ( -/mob/living/carbon/human/species/human/northern/bum/ambush, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/shelter/bog) -"uBL" = ( -/obj/structure/table/vtable/v2, -/obj/item/candle/skull/lit{ - pixel_x = -1; - pixel_y = 7 - }, -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/magician) -"uBP" = ( -/turf/closed/wall/mineral/rogue/pipe, -/area/rogue) -"uCa" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 8; - icon_state = "endwooddark" - }, -/area/rogue/indoors/town/garrison) -"uCd" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); - first_time_text = "CATACOMBS" - }) -"uCD" = ( -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uCR" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 4; - icon_state = "donjondir"; - locked = 1; - lockid = "blacksmith" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"uDp" = ( -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors/town/magician) -"uDz" = ( -/obj/structure/fluff/railing/border{ - dir = 5; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"uDI" = ( -/mob/living/carbon/human/species/human/northern/bum{ - aggressive = 1; - druggy = 1; - name = "madman"; - wander = 1 - }, -/obj/structure/bed/rogue/shit, -/obj/item/natural/cloth, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"uDK" = ( -/obj/structure/fluff/statue/gargoyle, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"uEj" = ( -/obj/structure/stairs{ - dir = 1; - icon_state = "stairs" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/church) -"uEt" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"uEy" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"uEU" = ( -/obj/structure/mineral_door/wood/donjon/stone, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/under/town/basement) -"uFf" = ( -/obj/structure/winch{ - dir = 1; - gid = "thronein" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uFo" = ( -/obj/item/reagent_containers/food/snacks/crow, -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/town/roofs) -"uFE" = ( -/obj/structure/chair/wood/rogue/chair_noble, -/obj/effect/decal/cleanable/dirt/cobweb{ - dir = 1 - }, -/turf/open/floor/carpet/red, -/area/rogue/outdoors/exposed/under/basement) -"uFI" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 8 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"uFR" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"uFV" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 8; - icon_state = "torchwall1" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"uFZ" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"uGg" = ( -/obj/structure/table/wood/fancy/royalblack, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"uGh" = ( -/obj/effect/decal/cobbleedge{ - dir = 1 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/under/town/sewer) -"uGj" = ( -/obj/structure/ladder, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue) -"uGl" = ( -/obj/machinery/light/rogue/wallfire/candle/l, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"uGB" = ( -/obj/structure/fluff/clodpile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"uGG" = ( -/obj/structure/fluff/railing/fence{ - dir = 4; - icon_state = "fence" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"uGM" = ( -/obj/structure/fluff/psycross/copper, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"uHG" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/manorgarri) -"uJf" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 1; - icon_state = "wooddir"; - locked = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"uJs" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/table/wood{ - dir = 10; - icon_state = "tablewood2" - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town) -"uJt" = ( -/obj/structure/roguemachine/mail/l, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"uJC" = ( -/obj/structure/fluff/railing/border, -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"uJD" = ( -/turf/open/floor/rogue/twig, -/area/rogue/indoors/shelter/bog) -"uJH" = ( -/obj/structure/circle_protection, -/turf/open/floor/rogue/tile{ - icon_state = "greenstone" - }, -/area/rogue/indoors/town/magician) -"uKl" = ( -/obj/structure/closet/crate/coffin, -/obj/item/clothing/cloak/raincloak/mortus, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"uKu" = ( -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"uKw" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"uKD" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/fermenting_barrel/random/water, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"uKI" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/dwarf) -"uLC" = ( -/obj/structure/closet/crate/chest/old_crate, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"uLI" = ( -/obj/structure/rack/rogue/shelf/biggest, -/obj/item/flint{ - pixel_x = -2; - pixel_y = 3 - }, -/obj/item/candle/yellow{ - pixel_x = 8; - pixel_y = -1 - }, -/obj/item/candle/yellow{ - pixel_x = 6 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"uMw" = ( -/obj/item/clothing/shoes/roguetown/shortboots, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"uNg" = ( -/obj/effect/decal/shadow_floor{ - dir = 4 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath/redhouse) -"uNF" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern/saiga) -"uNO" = ( -/turf/closed/wall/mineral/rogue/roofwall/innercorner{ - dir = 4 - }, -/area/rogue/indoors/town) -"uNR" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue) -"uOa" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/church) -"uOb" = ( -/obj/structure/stairs/stone{ - dir = 8; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"uOF" = ( -/obj/structure/closet/crate/roguecloset/dark{ - locked = 1; - lockid = "merchant"; - name = "Tobacco Locker" - }, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/obj/item/clothing/mask/cigarette/rollie/nicotine, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed, -/obj/item/clothing/mask/cigarette/pipe, -/obj/item/storage/fancy/cigarettes/zig, -/obj/item/storage/fancy/cigarettes/zig, -/obj/item/storage/fancy/cigarettes/zig, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/shop) -"uOM" = ( -/obj/structure/table/vtable, -/obj/structure/mirror/fancy{ - icon_state = "fancymirror_alt" - }, -/obj/item/reagent_containers/glass/cup/steel{ - pixel_x = 12; - pixel_y = 10 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uPg" = ( -/obj/item/reagent_containers/food/snacks/crow{ - dir = 1; - icon_state = "crow" - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"uPP" = ( -/obj/structure/fluff/railing/border, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"uPQ" = ( -/obj/item/restraints/legcuffs/beartrap/armed, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"uPR" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 8 - }, -/area/rogue/indoors/town/bath/redhouse) -"uPZ" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 8; - icon_state = "endwooddark" - }, -/area/rogue/indoors/town/shop) -"uQd" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/indoors/town/magician) -"uQj" = ( -/obj/item/reagent_containers/food/snacks/deadmouse, -/obj/effect/decal/cleanable/food/tomato_smudge, -/obj/item/cooking/pan, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"uQm" = ( -/obj/structure/roguerock, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"uQr" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/vault) -"uQB" = ( -/obj/machinery/light/rogue/smelter, -/obj/structure/bars/pipe{ - dir = 1; - icon_state = "pipe" - }, -/obj/structure/bars/pipe{ - dir = 6; - icon_state = "pipe" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/shelter/town/dwarf) -"uQN" = ( -/obj/structure/bed/rogue/shit, -/obj/item/rogue/instrument/drum, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"uRr" = ( -/obj/structure/fermenting_barrel/random/beer, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/bath/redhouse) -"uRx" = ( -/obj/structure/table/wood/large/corner_new{ - dir = 5 - }, -/obj/item/reagent_containers/glass/cup, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"uRR" = ( -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"uRW" = ( -/obj/effect/landmark/start/orphan, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"uSi" = ( -/obj/structure/fluff/railing/border{ - dir = 5; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/manorgarri) -"uSn" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/wheat, -/obj/item/neuFarm/seed/wheat, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"uSP" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/obj/effect/spawner/roguemap/treeorbush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"uST" = ( -/obj/structure/closet/crate/roguecloset/lord, -/obj/item/natural/cloth, -/obj/item/clothing/suit/roguetown/armor/gambeson/arming, -/obj/item/clothing/cloak/raincloak/furcloak, -/obj/item/clothing/suit/roguetown/armor/medium/scale, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uSU" = ( -/obj/structure/fluff/clodpile, -/obj/item/natural/worms, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"uTy" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"uTA" = ( -/obj/structure/stairs/stone{ - dir = 4; - icon_state = "stonestairs" - }, -/obj/structure/fluff/wallclock, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"uTU" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"uUr" = ( -/obj/structure/rack/rogue/shelf{ - density = 0 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"uUT" = ( -/obj/structure/fluff/walldeco/painting{ - pixel_y = 32 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uVp" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"uVY" = ( -/obj/structure/mineral_door/wood/red, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uWg" = ( -/obj/structure/closet/crate/chest/crate, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"uWr" = ( -/obj/structure/rack/rogue/shelf/biggest, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/obj/item/reagent_containers/glass/bottle/rogue/wine, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/tavern/saiga) -"uWG" = ( -/obj/structure/bed/rogue/hay, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"uXy" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/transparent/openspace, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"uXz" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"uXM" = ( -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/obj/structure/closet/crate/chest/crate, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"uYA" = ( -/obj/structure/flora/roguegrass, -/turf/closed/wall/mineral/rogue/tent, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"uYS" = ( -/obj/structure/fluff/walldeco/rpainting/crown, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors/town/tavern/saiga) -"uYT" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"uYU" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/machinery/light/rogue/torchholder{ - pixel_y = -32 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"uZe" = ( -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/town/dwarf) -"uZk" = ( -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/magiciantower) -"uZn" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"uZo" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/mountains) -"uZF" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/indoors/shelter/rtfield) -"uZZ" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - lockid = "mason"; - name = "STONE" - }, -/turf/open/floor/rogue/tile/masonic/spiral, -/area/rogue/under/town/basement) -"val" = ( -/turf/closed/wall/mineral/rogue/decostone/cand, -/area/rogue/under/town/basement) -"vaR" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/church/chapel) -"vbA" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"vcJ" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - lockid = "steward"; - name = "GOLD" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"vcP" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vdB" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"vdL" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 1 - }, -/area/rogue/indoors/town/magician) -"vdM" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"vdO" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vec" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - lockid = "graveyard" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"vek" = ( -/turf/closed/wall/mineral/rogue/pipe{ - dir = 1; - icon_state = "iron_corner" - }, -/area/rogue/indoors/shelter/town/dwarf) -"vew" = ( -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vfa" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/town/roofs) -"vfi" = ( -/obj/structure/mineral_door/wood/fancywood, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vfj" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/bath/soap, -/obj/item/bath/soap, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"vfu" = ( -/turf/open/water/cleanshallow, -/area/rogue) -"vfK" = ( -/obj/structure/fluff/walldeco/bath/wallrope{ - pixel_y = -32 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"vfO" = ( -/obj/structure/fluff/statue/knightalt{ - pixel_y = 9 - }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vfR" = ( -/obj/structure/stairs{ - dir = 8; - icon_state = "stairs" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"vfX" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vgG" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"vgI" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/outdoors/town/roofs) -"vgS" = ( -/obj/structure/bars, -/turf/open/floor/rogue/blocks/green, -/area/rogue/indoors/town/bath/redhouse) -"vhx" = ( -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"vhN" = ( -/obj/structure/bars/pipe, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town) -"vhT" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/tavern/saiga) -"viq" = ( -/obj/structure/chair/stool/rogue, -/turf/open/water/bath/pool{ - dir = 6 - }, -/area/rogue/indoors/town/bath/redhouse) -"viY" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"vjo" = ( -/obj/structure/bars/pipe{ - dir = 1; - icon_state = "pipe" - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"vju" = ( -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/decal/cleanable/blood/old, -/obj/item/kitchen/fork, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"vjx" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/bush_meagre, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"vlr" = ( -/obj/structure/closet/crate/coffin, -/obj/item/clothing/accessory/skullcodpiece, -/obj/item/roguecoin/silver, -/obj/item/roguecoin/silver, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cavewet{ - first_time_text = null; - name = "catacombswet" - }) -"vmg" = ( -/obj/structure/closet/crate/chest/crate, -/obj/item/reagent_containers/food/snacks/smallrat{ - desc = "A quite chubby fellow. It reeks of alcohol."; - dir = 8; - name = "Philbert" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"vmC" = ( -/obj/structure/closet/dirthole/closed/loot, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vmK" = ( -/obj/structure/bars/pipe{ - dir = 6; - icon_state = "pipe" - }, -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/shop) -"vmM" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/manorgarri) -"vom" = ( -/obj/structure/bars/cemetery, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"voM" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"voP" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 8 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"voT" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 8; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"voW" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 1; - icon_state = "wooddir"; - locked = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/indoors) -"vps" = ( -/obj/item/ingot/gold, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"vpV" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"vqa" = ( -/obj/structure/fluff/psycross/crafted, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"vqR" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/farmer{ - dir = 8 - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"vrh" = ( -/obj/structure/bars, -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/outdoors/exposed/under/basement) -"vrm" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/exposed/under/basement) -"vrK" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"vta" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 8; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"vuk" = ( -/mob/living/carbon/human/species/human/northern/bum/ambush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vuw" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/huntingknife/idagger, -/obj/item/rogueweapon/thresher, -/obj/item/clothing/glasses/blindfold/white{ - name = "blindfold" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"vuG" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vuN" = ( -/obj/structure/bed/rogue/wooldouble, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"vuZ" = ( -/obj/effect/landmark/start/dungeoneer{ - dir = 8 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vva" = ( -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"vvy" = ( -/turf/open/floor/rogue/rooftop/green, -/area/rogue) -"vvP" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/clothing/cloak/apron/cook, -/obj/item/clothing/suit/roguetown/shirt/robe/feld, -/obj/item/clothing/neck/roguetown/feld, -/obj/item/clothing/mask/rogue/feld, -/obj/item/clothing/head/roguetown/roguehood/feld, -/obj/item/clothing/gloves/roguetown/leather/feld, -/obj/item/roguekey/doctor{ - pixel_y = 9 - }, -/obj/item/needle, -/obj/item/needle, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"vws" = ( -/obj/structure/flora/roguegrass, -/obj/structure/handcart, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"vwv" = ( -/turf/open/transparent/openspace, -/area/rogue/under/town/sewer) -"vwC" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable" - }, -/obj/item/book/rogue/bibble{ - pixel_y = 5 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "weird1" - }, -/area/rogue/indoors/town/church/chapel) -"vwS" = ( -/obj/structure/closet/crate/chest/neu_iron, -/obj/item/ingot/silver, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/indoors/town/vault) -"vxp" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable_mid" - }, -/obj/item/paper/scroll{ - pixel_x = -6; - pixel_y = 3 - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"vxt" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town) -"vxz" = ( -/obj/effect/decal/cobbleedge{ - dir = 1 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"vxR" = ( -/obj/structure/fluff/walldeco/bath/wallrope{ - dir = 4; - pixel_y = 32 - }, -/obj/structure/fluff/walldeco/bath/wallrope{ - dir = 8; - pixel_y = 32 - }, -/obj/machinery/light/rogue/wallfire/candle/lamp, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"vyP" = ( -/turf/open/floor/carpet/red, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vyQ" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 4; - icon_state = "endwooddark" - }, -/area/rogue/indoors/town/cell) -"vyV" = ( -/obj/structure/fluff/statue/tdummy, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"vzb" = ( -/obj/structure/bars/pipe, -/obj/structure/bars/pipe{ - dir = 1; - icon_state = "pipe" - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"vzs" = ( -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/manorgarri) -"vzv" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/outdoors/town/roofs) -"vAo" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/spider/cocoon, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"vAv" = ( -/obj/effect/decal/remains/bigrat, -/turf/open/water/cleanshallow, -/area/rogue/outdoors/exposed/under/basement) -"vAA" = ( -/obj/structure/flora/roguegrass, -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"vAP" = ( -/obj/item/natural/feather, -/obj/item/flashlight/lamp{ - pixel_y = 9 - }, -/obj/structure/bars/pipe, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"vAR" = ( -/obj/machinery/light/rogue/wallfire/candle, -/obj/structure/toilet, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"vAS" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/manorgarri) -"vAZ" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/walldeco/wallshield{ - pixel_y = 32 - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vBb" = ( -/obj/structure/fluff/statue/gargoyle/moss, -/turf/open/floor/rogue/grass, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vBC" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/decal/shadow_floor{ - dir = 9 - }, -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"vBU" = ( -/obj/structure/flora/roguegrass, -/mob/living/simple_animal/hostile/retaliate/rogue/cow/cowlet, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"vBX" = ( -/turf/closed/wall/mineral/rogue/wooddark/window, -/area/rogue/indoors/town/cell) -"vCa" = ( -/obj/structure/roguemachine/submission, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"vCc" = ( -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue) -"vCk" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "largetable" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/bath/redhouse) -"vCr" = ( -/obj/effect/decal/cobbleedge{ - dir = 1; - icon_state = "borderfall" - }, -/obj/structure/stone_tile/block/cracked, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/spiderbase) -"vCH" = ( -/obj/structure/chair/stool/rogue, -/obj/structure/roguemachine/scomm/l, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/magician) -"vDw" = ( -/obj/effect/landmark/start/vagrant{ - dir = 8; - icon_state = "arrow" - }, -/obj/structure/bed/rogue/shit, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"vDx" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/spider, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"vEU" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/trufflepig, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vEY" = ( -/obj/structure/rack/rogue, -/obj/item/quiver/arrows, -/obj/item/gun/ballistic/revolver/grenadelauncher/bow, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"vFC" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"vFV" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vGb" = ( -/obj/structure/rack/rogue, -/obj/structure/fluff/wallclock, -/obj/item/rogueweapon/mace/church, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"vHi" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 8 - }, -/area/rogue/indoors/town/church/chapel) -"vHk" = ( -/obj/structure/closet/crate/chest/old_crate, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"vHo" = ( -/turf/open/floor/rogue/dirt/ambush, -/area/rogue/outdoors/exposed/town) -"vHv" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/structure/fluff/sellsign{ - desc = "ROCKHAMLET has been scratched over the former placename, too worn to read."; - name = "ROCKHAMLET" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vHH" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/machinery/light/rogue/wallfire/candle, -/obj/structure/table/wood/nice/decorated, -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"vIi" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"vIo" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern/saiga) -"vIt" = ( -/obj/item/grown/log/tree/small, -/obj/item/grown/log/tree/small, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains) -"vIO" = ( -/obj/structure/chair/bench/ancientlog, -/obj/structure/flora/roguegrass/thorn_bush, -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vIR" = ( -/obj/effect/spawner/roguemap/treeorbush, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vJb" = ( -/obj/structure/flora/roguegrass/thorn_bush, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"vJu" = ( -/obj/structure/flora/rock/pile, -/obj/item/candle/yellow, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"vJw" = ( -/turf/open/water/bath/pool{ - dir = 4 - }, -/area/rogue/indoors/town/bath/redhouse) -"vJF" = ( -/obj/structure/table/wood/nice/decorated_alt, -/obj/item/reagent_containers/glass/cup/steel{ - pixel_x = -7; - pixel_y = 14 - }, -/obj/item/reagent_containers/glass/cup/steel{ - pixel_x = 9; - pixel_y = 14 - }, -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/bath/redhouse) -"vJI" = ( -/obj/effect/decal/cleanable/blood/footprints{ - dir = 8 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"vJQ" = ( -/obj/structure/flora/roguetree/burnt, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vKe" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vKI" = ( -/obj/structure/table/vtable, -/obj/item/toy/cards/deck, -/turf/open/floor/carpet/stellar, -/area/rogue/indoors/town/magician) -"vMY" = ( -/turf/open/water/bath/pool{ - dir = 8 - }, -/area/rogue/indoors/town/bath/redhouse) -"vNa" = ( -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/magiciantower) -"vNq" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue) -"vNy" = ( -/obj/structure/roguemachine/scomm/r, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"vOf" = ( -/obj/item/clothing/shoes/roguetown/boots/leather, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vOo" = ( -/obj/item/roguebin/water/gross, -/obj/structure/mirror/fancy{ - desc = "Your reflection seems to be the other way... er... right way around."; - icon_state = "fancymirror_alt"; - name = "magic mirror" - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"vOR" = ( -/obj/effect/decal/remains/human, -/turf/closed/mineral/rogue, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"vPZ" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"vQh" = ( -/obj/structure/flora/roguegrass/water/reeds, -/turf/open/water/swamp, -/area/rogue/outdoors/bog) -"vQx" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 1; - icon_state = "endwooddark" - }, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"vQY" = ( -/obj/machinery/light/rogue/lanternpost/fixed{ - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"vRF" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"vRU" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/garrison) -"vSR" = ( -/obj/structure/fluff/walldeco/med{ - pixel_y = 32 - }, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"vTl" = ( -/obj/structure/table/wood/plain_alt, -/obj/item/rogueweapon/huntingknife/cleaver{ - pixel_x = 8 - }, -/obj/item/kitchen/rollingpin{ - pixel_x = -5 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"vTq" = ( -/turf/open/floor/carpet/red, -/area/rogue/outdoors/exposed/under/basement) -"vTN" = ( -/obj/structure/mineral_door/bars, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"vUx" = ( -/turf/closed/mineral/rogue, -/area/rogue) -"vUG" = ( -/obj/structure/fluff/statue/knight/r, -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/outdoors/exposed/under/basement) -"vUI" = ( -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/cell) -"vVD" = ( -/obj/structure/closet/crate/drawer/random, -/obj/item/clothing/mask/cigarette/rollie/cannabis{ - pixel_x = 2; - pixel_y = 3 - }, -/turf/open/floor/rogue/tile/masonic/single, -/area/rogue/indoors/town/magician) -"vVI" = ( -/obj/structure/flora/roguegrass/bush_meagre, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"vVY" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/under/town/basement) -"vWe" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"vWg" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"vWi" = ( -/obj/structure/table/wood/plain_alt, -/obj/item/candle/yellow, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"vWk" = ( -/obj/structure/flora/roguegrass, -/obj/structure/bars/pipe{ - dir = 8; - icon_state = "pipe" - }, -/obj/structure/bars/pipe{ - dir = 4; - icon_state = "pipe" - }, -/obj/structure/bars/pipe{ - dir = 6; - icon_state = "pipe" - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"vWD" = ( -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/obj/structure/fermenting_barrel/random/beer, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/under/basement) -"vWJ" = ( -/obj/item/clothing/shoes/roguetown/jester, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"vWP" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"vXb" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "manor" - }, -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/under/basement) -"vXs" = ( -/obj/structure/plasticflaps, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/water/sewer, -/area/rogue/indoors/town/garrison) -"vXB" = ( -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/exposed/manorgarri) -"vXX" = ( -/obj/structure/chair/wood/rogue{ - dir = 8; - icon_state = "chair2" - }, -/obj/effect/landmark/start/barkeep{ - dir = 8 - }, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/tavern/saiga) -"vYf" = ( -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vYp" = ( -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop, -/area/rogue/outdoors/exposed/dwarf) -"vYJ" = ( -/obj/item/natural/saddle, -/obj/structure/rack/rogue, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vYV" = ( -/obj/structure/table/wood/plain_alt, -/obj/item/book/rogue/bibble, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"vYW" = ( -/obj/structure/fluff/railing/fence, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"vZm" = ( -/obj/effect/landmark/start/guardsman{ - dir = 1; - icon_state = "arrow" - }, -/turf/open/floor/rogue/carpet/lord/right, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"vZG" = ( -/turf/closed/wall/mineral/rogue/roofwall/innercorner{ - dir = 8 - }, -/area/rogue/indoors/town) -"vZN" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"wao" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"waO" = ( -/obj/structure/flora/roguegrass, -/mob/living/simple_animal/hostile/retaliate/rogue/goat, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/mountains) -"wbi" = ( -/obj/structure/closet/crate/drawer, -/obj/item/candle/skull/lit{ - pixel_x = -1; - pixel_y = 7 - }, -/obj/structure/fireaxecabinet{ - pixel_y = 32 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"wbA" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/watchman{ - dir = 4; - name = "Garrison Archer" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/entrance{ - first_time_text = "Rockhamlet" - }) -"wbP" = ( -/obj/effect/decal/cobbleedge, -/obj/machinery/light/rogue/campfire{ - pixel_y = 20 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"wce" = ( -/obj/structure/stairs{ - dir = 8; - icon_state = "stairs" - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"wcn" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/mountains) -"wcw" = ( -/obj/structure/stairs{ - dir = 4; - icon_state = "stairs" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"wcF" = ( -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"wdo" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town) -"wdq" = ( -/obj/machinery/light/rogue/firebowl/stump, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"wdV" = ( -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"weF" = ( -/obj/structure/closet/crate/roguecloset/dark{ - lockid = "steward" - }, -/obj/item/clothing/neck/roguetown/gorget, -/obj/item/rogueweapon/huntingknife/idagger/steel, -/obj/item/keyring/steward, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town) -"weW" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/dwarf) -"wfc" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "walls" - }, -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/town/roofs) -"wfm" = ( -/obj/item/natural/dirtclod, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"wfT" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wgc" = ( -/obj/structure/bars/pipe, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"wgs" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"wgz" = ( -/obj/item/paper/confession, -/obj/item/paper/confession, -/obj/structure/closet/crate/chest/neu, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"wgQ" = ( -/obj/structure/table/wood/plain_alt, -/obj/item/reagent_containers/glass/cup/wooden, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"whe" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"whu" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/mob/living/simple_animal/hostile/retaliate/rogue/wolf, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"whC" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle{ - dir = 4 - }, -/area/rogue/indoors/town/magician) -"whE" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"whF" = ( -/obj/structure/closet/crate/coffin, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"whL" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/tongs, -/obj/item/rogueweapon/hammer/claw, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"wiz" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wiD" = ( -/obj/structure/bars/pipe{ - dir = 4; - icon_state = "pipe" - }, -/obj/structure/fluff/walldeco/vinez/offset{ - dir = 10 - }, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"wiI" = ( -/obj/effect/decal/remains/wolf, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"wiL" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/town) -"wiR" = ( -/turf/closed/mineral/rogue, -/area/rogue/indoors/shelter/rtfield) -"wjq" = ( -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/exposed/dwarf) -"wjH" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/exposed/manorgarri) -"wkj" = ( -/obj/structure/chair/wood/rogue/fancy{ - dir = 1 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"wkk" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wkp" = ( -/obj/structure/bed/rogue/mediocre, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"wks" = ( -/obj/structure/fluff/railing/fence{ - dir = 8; - icon_state = "fence" - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"wkZ" = ( -/obj/structure/flora/rock/pile, -/obj/structure/fluff/clodpile, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"wlv" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"wlB" = ( -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"wlM" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wmg" = ( -/obj/structure/bars, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"wmC" = ( -/obj/structure/bars/pipe{ - dir = 1; - icon_state = "pipe" - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"wmJ" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"wnB" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/indoors/town/shop) -"wnR" = ( -/obj/structure/fermenting_barrel/water, -/obj/item/reagent_containers/glass/cup/skull{ - pixel_y = 12 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"wok" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - lockid = "priest" - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church) -"wox" = ( -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"woM" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/ammo_casing/caseless/rogue/arrow, -/obj/item/ammo_casing/caseless/rogue/arrow, -/obj/item/ammo_casing/caseless/rogue/arrow, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"wpx" = ( -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/structure/closet/crate/chest/old_crate, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/obj/item/reagent_containers/food/snacks/rogue/crackerscooked, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"wpE" = ( -/obj/structure/mineral_door/bars{ - locked = 1; - lockid = "mage"; - max_integrity = 100000 - }, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/magician) -"wpR" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"wpZ" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/outdoors/town) -"wrs" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"wrR" = ( -/obj/effect/landmark/start/farmer, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"wrV" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 8; - icon_state = "donjondir"; - locked = 1; - lockid = "dungeon" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"wsn" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"wsr" = ( -/obj/item/reagent_containers/food/snacks/crow{ - dir = 1; - icon_state = "crow" - }, -/turf/open/floor/rogue/rooftop{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"wsP" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"wte" = ( -/obj/machinery/light/rogue/torchholder/c, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/town) -"wuh" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"wvP" = ( -/obj/structure/bars/cemetery, -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/bush/wall, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"wvR" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"wwa" = ( -/obj/effect/decal/cleanable/blood/old, -/mob/living/simple_animal/hostile/retaliate/rogue/wolf, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wwn" = ( -/obj/structure/table/wood/large/corner_new{ - dir = 5 - }, -/obj/item/clothing/wrists/roguetown/wrappings, -/obj/item/flashlight/flare/torch/lantern, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"wwo" = ( -/obj/machinery/light/rogue/campfire, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"www" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wwH" = ( -/obj/structure/fluff/psycross/crafted, -/obj/effect/decal/remains/saiga, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wwJ" = ( -/obj/structure/mineral_door/wood{ - lockid = "butcher"; - name = "butchers house" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"wxa" = ( -/obj/effect/decal/shadow_floor{ - dir = 8 - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath/redhouse) -"wxb" = ( -/obj/structure/closet/crate/roguecloset, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/candle/yellow, -/obj/item/keyring/servant, -/obj/item/soap, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"wyq" = ( -/obj/structure/roguemachine/merchantvend, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/shop) -"wys" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"wyL" = ( -/obj/structure/fluff/wallclock/l, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"wzF" = ( -/obj/structure/chair/stool/rogue, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"wAo" = ( -/obj/structure/flora/roguegrass, -/obj/structure/bars/pipe, -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/town/roofs) -"wAr" = ( -/obj/structure/fluff/railing/border{ - dir = 9; - icon_state = "border" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/mountains) -"wAB" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"wAC" = ( -/obj/structure/toilet, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"wBd" = ( -/obj/structure/closet/crate/chest/old_crate, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/salt, -/obj/item/reagent_containers/powder/salt, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"wBm" = ( -/obj/effect/spawner/roguemap/tree, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wBq" = ( -/obj/structure/fluff/statue, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"wBu" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/structure/roguerock, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"wBy" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern/saiga) -"wCA" = ( -/obj/effect/decal/cleanable/blood/gibs/up, -/turf/open/transparent/openspace, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50); - name = "vulf cave" - }) -"wCC" = ( -/obj/structure/fluff/railing/wood, -/turf/open/floor/rogue/naturalstone, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wDi" = ( -/obj/structure/table/wood/plain_alt, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"wDj" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"wEg" = ( -/obj/structure/flora/roguegrass, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wEi" = ( -/obj/structure/roguemachine/scomm/l, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/bath/redhouse) -"wEq" = ( -/obj/structure/flora/roguegrass, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors) -"wEW" = ( -/obj/item/reagent_containers/food/snacks/smallrat, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"wFg" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 1; - name = "privy" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"wFV" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue) -"wGg" = ( -/obj/structure/fluff/nest, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/basement) -"wGn" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"wGw" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"wGR" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/obj/structure/roguerock, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wHs" = ( -/obj/structure/stairs{ - dir = 8; - icon_state = "stairs" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"wHQ" = ( -/obj/structure/roguemachine/mail/l{ - pixel_y = 15 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"wHV" = ( -/obj/item/roguebin/alt, -/obj/structure/fluff/walldeco/bath/wallpipes{ - pixel_x = 16; - pixel_y = 24 - }, -/obj/structure/fluff/walldeco/bath/seven, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath/redhouse) -"wIh" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/item/rogueore/iron, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"wIl" = ( -/obj/structure/closet/crate/drawer/random, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern/saiga) -"wJc" = ( -/turf/closed/wall/mineral/rogue/wooddark/end{ - dir = 1; - icon_state = "endwooddark" - }, -/area/rogue/indoors/shelter/mountains) -"wJv" = ( -/obj/structure/closet/crate/roguecloset/inn, -/obj/item/clothing/suit/roguetown/armor/leather/jacket/hand, -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"wKh" = ( -/obj/item/rogueweapon/woodstaff, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"wKF" = ( -/turf/open/floor/rogue/ruinedwood/turned, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wLa" = ( -/obj/structure/closet/crate/chest/neu, -/obj/item/reagent_containers/powder/moondust, -/obj/item/reagent_containers/powder/ozium, -/obj/item/reagent_containers/powder/ozium, -/obj/item/reagent_containers/powder, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/bath/redhouse) -"wLo" = ( -/obj/structure/bed/rogue/shit, -/obj/item/rogueweapon/huntingknife/stoneknife, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"wLM" = ( -/obj/machinery/light/rogue/wallfire/candle/r, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"wLN" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/table/wood{ - dir = 10; - icon_state = "tablewood2" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"wMi" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/indoors/town/cell) -"wMq" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"wNi" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass/bush_meagre, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wNu" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 8 - }, -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wOd" = ( -/turf/open/floor/rogue/ruinedwood/turned, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"wOm" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 2 - }, -/area/rogue/indoors/town/magician) -"wOz" = ( -/obj/item/rope/chain, -/turf/open/floor/rogue/metal/barograte, -/area/rogue/indoors/town/cell) -"wOM" = ( -/obj/structure/stairs{ - dir = 4; - icon_state = "stairs" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"wON" = ( -/obj/item/roguebin/water/gross, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wOS" = ( -/obj/structure/mineral_door/wood/fancywood{ - locked = 1; - lockid = "lord"; - name = "THE VAULT" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/outdoors/exposed/under/basement) -"wPk" = ( -/obj/structure/chair/bench/ultimacouch, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/bath/redhouse) -"wPQ" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"wPT" = ( -/obj/machinery/light/rogue/wallfire/candle/weak/l, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/tavern/saiga) -"wQG" = ( -/obj/effect/landmark/start/cleric{ - dir = 4 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/church/chapel) -"wQO" = ( -/obj/structure/closet/crate/chest/neu_iron, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"wRi" = ( -/obj/structure/roguewindow, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"wRr" = ( -/turf/closed/wall/mineral/rogue/tent, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wRs" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 4 - }, -/obj/effect/spawner/roguemap/tree, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wRz" = ( -/obj/structure/fluff/railing/border, -/obj/structure/stairs/stone{ - dir = 4; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/exposed/under/basement) -"wRC" = ( -/obj/structure/toilet, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"wSj" = ( -/obj/structure/roguemachine/scomm/r, -/obj/machinery/light/rogue/firebowl/church, -/obj/structure/bars/pipe{ - dir = 4; - icon_state = "pipe" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/under/town/basement) -"wSv" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/obj/structure/flora/rock/pile, -/turf/open/water/swamp, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"wSN" = ( -/turf/closed/wall/mineral/rogue/stone/moss, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wSR" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner, -/area/rogue/indoors/town/tavern) -"wSZ" = ( -/obj/effect/decal/cobbleedge{ - dir = 5 - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/outdoors/exposed/manorgarri) -"wTk" = ( -/obj/structure/bars/pipe, -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/dwarf) -"wTU" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/paper/scroll, -/obj/effect/decal/cobbleedge{ - dir = 1 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/exposed/under/basement) -"wUd" = ( -/obj/structure/mineral_door/wood/deadbolt{ - dir = 8; - icon_state = "wooddir" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"wUf" = ( -/obj/structure/roguemachine/mail, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town) -"wUk" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop/green{ - dir = 1 - }, -/area/rogue/outdoors/exposed/manorgarri) -"wUT" = ( -/obj/structure/stairs, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wVh" = ( -/turf/closed/wall/mineral/rogue/roofwall/outercorner{ - dir = 8 - }, -/area/rogue) -"wVn" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wVy" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"wVz" = ( -/turf/open/floor/rogue/rooftop, -/area/rogue) -"wVF" = ( -/obj/structure/bars/pipe, -/turf/closed/wall/mineral/rogue/decostone/fluffstone/reddish, -/area/rogue/indoors/town/bath/redhouse) -"wVN" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"wXm" = ( -/obj/structure/flora/rock/pile, -/turf/open/water/river{ - dir = 4 - }, -/area/rogue/outdoors/river) -"wYX" = ( -/obj/structure/flora/newleaf/corner{ - dir = 9 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"wYZ" = ( -/obj/structure/rack/rogue, -/obj/item/rogueweapon/woodstaff, -/obj/item/rogueweapon/woodstaff, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"xab" = ( -/obj/item/rogueweapon/mace/cudgel, -/turf/closed/wall/mineral/rogue/wooddark/slitted, -/area/rogue/indoors/town/tavern/saiga) -"xad" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"xaf" = ( -/obj/machinery/light/rogue/hearth, -/obj/item/cooking/pan, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"xah" = ( -/obj/structure/fluff/railing/border{ - dir = 1; - icon_state = "border" - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"xai" = ( -/obj/structure/stairs{ - dir = 4; - icon_state = "stairs" - }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"xbu" = ( -/obj/structure/bars/pipe{ - dir = 4; - icon_state = "pipe" - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"xbB" = ( -/obj/structure/bed/rogue/wool, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/town/garrison) -"xbY" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/signage{ - desc = "You can barely read the name for the mold..."; - name = "RO-KHAM--T" - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xcb" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/church/chapel) -"xcg" = ( -/turf/closed/wall/mineral/rogue/wooddark/vertical, -/area/rogue/indoors/shelter/town/dwarf) -"xcK" = ( -/obj/structure/fluff/railing/wood, -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/rtfield) -"xdc" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/structure/bars/passage/shutter{ - redstone_id = "balloon_shutter" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/shelter/town/roofs) -"xde" = ( -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop{ - dir = 4 - }, -/area/rogue/outdoors/town/roofs) -"xdl" = ( -/obj/item/natural/stone, -/obj/item/grown/log/tree/stick, -/obj/item/grown/log/tree/stick, -/obj/item/reagent_containers/glass/bucket/wooden, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"xdp" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/manorgarri) -"xdF" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/structure/spider/stickyweb, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"xec" = ( -/obj/structure/mineral_door/wood{ - locked = 1; - lockid = "shop" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"xed" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/shelter/rtfield) -"xeL" = ( -/obj/effect/decal/cleanable/dirt/cobweb{ - icon_state = "cobweb2" - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town) -"xfl" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/obj/structure/closet/crate/chest/crate, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"xfY" = ( -/turf/closed/mineral/rogue, -/area/rogue/under/town/sewer) -"xgl" = ( -/obj/structure/fluff/railing/border{ - dir = 5; - icon_state = "border" - }, -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern/saiga) -"xgA" = ( -/obj/structure/bars/pipe{ - dir = 6; - icon_state = "pipe" - }, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"xgK" = ( -/obj/structure/stairs{ - dir = 8; - icon_state = "stairs" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xgL" = ( -/obj/structure/bars/pipe, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"xhq" = ( -/obj/structure/closet/crate/chest/wicker, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/obj/item/reagent_containers/food/snacks/produce/wheat, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xhr" = ( -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/carpet/royalblack, -/area/rogue/outdoors/exposed/under/basement) -"xhy" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/mercenary{ - dir = 4 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/tavern/saiga) -"xie" = ( -/obj/structure/flora/ausbushes/ppflowers, -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"xiv" = ( -/obj/structure/roguetent, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/rtfield) -"xiH" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"xiI" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/wood/nosmooth, -/area/rogue/indoors/shelter/town/dwarf) -"xiK" = ( -/obj/structure/chair/stool/rogue, -/turf/open/water/bath/pool{ - dir = 5 - }, -/area/rogue/indoors/town/bath/redhouse) -"xiP" = ( -/obj/structure/chair/wood/rogue{ - dir = 1; - icon_state = "chair2" - }, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"xje" = ( -/obj/item/bedsheet/rogue/cloth, -/obj/structure/bed/rogue/wool, -/turf/open/floor/rogue/wood, -/area/rogue/indoors/town/tavern/saiga) -"xjk" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - lockid = "church" - }, -/turf/open/floor/rogue/blocks, -/area/rogue/indoors/town/church) -"xkk" = ( -/turf/closed/wall/mineral/rogue/stone, -/area/rogue/indoors/town/magician) -"xkE" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"xlw" = ( -/obj/structure/fluff/walldeco/painting/seraphina{ - pixel_y = 32 - }, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"xlD" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"xlV" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/town/dwarf) -"xmv" = ( -/obj/structure/flora/roguegrass, -/turf/closed/mineral/rogue, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xmz" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 4 - }, -/obj/structure/flora/rock/pile, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xmP" = ( -/turf/closed/wall/mineral/rogue/wooddark, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"xmT" = ( -/obj/structure/table/wood/treestump, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xnj" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/reagent_containers/food/snacks/rogue/meat/salami, -/obj/effect/decal/cobbleedge{ - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/under/basement) -"xnm" = ( -/obj/structure/table/wood{ - icon_state = "longtable" - }, -/obj/item/book/rogue/law, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"xnA" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/town/sewer) -"xnP" = ( -/obj/structure/fluff/railing/stonehedge{ - dir = 1 - }, -/obj/structure/flora/roguegrass, -/obj/structure/fluff/walldeco/customflag{ - pixel_x = -32 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"xoR" = ( -/obj/structure/fluff/railing/border{ - dir = 9; - icon_state = "border" - }, -/obj/structure/fluff/walldeco/vinez/l{ - dir = 9 - }, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xpd" = ( -/obj/structure/roguewindow/stained, -/turf/open/floor/rogue/ruinedwood, -/area/rogue/indoors/town/church/chapel) -"xpF" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone, -/area/rogue/under/town/basement) -"xpU" = ( -/obj/effect/decal/cleanable/blood/gibs/core, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"xpW" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/turf/closed/wall/mineral/rogue/decowood, -/area/rogue/indoors) -"xqf" = ( -/obj/structure/bars/pipe{ - dir = 6; - icon_state = "pipe" - }, -/obj/structure/bars/pipe{ - dir = 5; - icon_state = "pipe" - }, -/obj/structure/fluff/walldeco/vinez/l, -/turf/open/water/sewer, -/area/rogue/outdoors/exposed/under/sewer) -"xqm" = ( -/obj/structure/mineral_door/swing_door{ - locked = 1; - lockid = "woodsm"; - name = "stable door" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue) -"xqH" = ( -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"xqZ" = ( -/obj/structure/flora/roguetree, -/obj/effect/spawner/roguemap/tree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/river) -"xre" = ( -/obj/structure/toilet, -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/cell) -"xrv" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/manorgarri) -"xrF" = ( -/turf/open/floor/rogue/dirt, -/area/rogue/indoors/town) -"xsw" = ( -/obj/structure/bars/grille, -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xtl" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/bath/redhouse) -"xtN" = ( -/obj/structure/rack/rogue, -/obj/item/clothing/cloak/stabard/guard, -/obj/item/clothing/cloak/stabard/guard, -/obj/item/clothing/cloak/stabard/guard, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"xtX" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/water/river{ - dir = 4 - }, -/area/rogue/outdoors/river) -"xuD" = ( -/obj/structure/mineral_door/wood{ - icon_state = "wcv"; - lockid = "merchant"; - name = "merchants room" - }, -/turf/open/floor/rogue/tile{ - icon_state = "chess" - }, -/area/rogue/indoors/town/shop) -"xuL" = ( -/obj/structure/fluff/railing/fence, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/exposed/town) -"xvb" = ( -/turf/open/floor/rogue/rooftop{ - dir = 1 - }, -/area/rogue/outdoors/exposed/dwarf) -"xvf" = ( -/turf/closed/wall/mineral/rogue/stonebrick, -/area/rogue/indoors/town/bath/redhouse) -"xvr" = ( -/obj/structure/fluff/walldeco/stone, -/turf/closed/wall/mineral/rogue/stone/window/moss, -/area/rogue/indoors/town/magician) -"xvu" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/spider, -/obj/structure/spider/cocoon, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"xvB" = ( -/obj/item/roguecoin/gold/pile, -/obj/structure/fluff/walldeco/wallshield{ - pixel_y = 32 - }, -/obj/structure/closet/crate/chest/neu_fancy, -/turf/open/floor/rogue/tile/kitchen, -/area/rogue/indoors/town/vault) -"xvK" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"xvR" = ( -/obj/structure/table/vtable/v2, -/obj/item/candle/yellow/lit/infinite/strong{ - pixel_y = 7 - }, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xwf" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/mountains) -"xxz" = ( -/obj/structure/flora/roguegrass, -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/outdoors/mountains) -"xxR" = ( -/obj/structure/table/wood/plain_alt, -/obj/item/candle/yellow, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/church, -/area/rogue/indoors/town/church) -"xxU" = ( -/obj/structure/stairs{ - dir = 4; - icon_state = "stairs" - }, -/turf/open/floor/rogue/woodturned, -/area/rogue/outdoors/town) -"xxV" = ( -/obj/effect/decal/cleanable/blood, -/mob/living/simple_animal/hostile/zombie, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors) -"xya" = ( -/obj/structure/stairs/stone{ - dir = 1; - icon_state = "stonestairs" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"xyA" = ( -/obj/structure/table/wood{ - dir = 10; - icon_state = "tablewood2" - }, -/obj/item/candle/yellow/lit, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors) -"xyF" = ( -/obj/structure/closet/crate/chest/neu, -/turf/open/floor/rogue/carpet, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xyY" = ( -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xzq" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xzx" = ( -/obj/structure/flora/roguetree, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"xzE" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"xzF" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/exposed/manorgarri) -"xzJ" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable_mid" - }, -/obj/machinery/light/rogue/wallfire/candle/blue, -/turf/open/floor/carpet/inn, -/area/rogue/under/town/basement) -"xzR" = ( -/obj/structure/bars/pipe, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"xAF" = ( -/obj/machinery/anvil/crafted, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/shelter/town/dwarf) -"xBl" = ( -/turf/closed/wall/mineral/rogue/wooddark/horizontal, -/area/rogue/under/town/basement) -"xBu" = ( -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"xBQ" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"xDk" = ( -/obj/structure/mineral_door/wood/window{ - locked = 1; - lockid = "lord" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xDL" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xEd" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"xEi" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xEE" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/river) -"xEJ" = ( -/obj/structure/chair/bench/ancientlog, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xEM" = ( -/turf/closed/wall/mineral/rogue/decostone/fluffstone/reddish, -/area/rogue/indoors/town/bath/redhouse) -"xFa" = ( -/obj/structure/rack/rogue/shelf{ - density = 0 - }, -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"xFM" = ( -/obj/structure/bars/cemetery, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/town) -"xGc" = ( -/obj/structure/mineral_door/wood/donjon{ - locked = 1; - lockid = "steward"; - name = "bank" - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/town) -"xGj" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/decal/shadow_floor{ - dir = 8 - }, -/turf/open/floor/rogue/blocks/stonered/tiny, -/area/rogue/indoors/town/bath/redhouse) -"xGt" = ( -/turf/closed/mineral/rogue, -/area/rogue/under/cavewet{ - first_time_text = "DWARVERN RUINS" - }) -"xGB" = ( -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"xGE" = ( -/obj/machinery/light/rogue/wallfire/candle/blue/l, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/magician) -"xHe" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"xHn" = ( -/obj/structure/closet/crate/roguecloset/inn/chest, -/obj/item/rogueweapon/mace/woodclub/crafted, -/obj/item/storage/belt/rogue/pouch/coins/poor, -/turf/open/floor/rogue/ruinedwood/turned, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xHq" = ( -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"xHy" = ( -/obj/item/reagent_containers/glass/cup/wooden, -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable_mid" - }, -/turf/open/floor/rogue/tile/checkeralt, -/area/rogue/indoors/town/tavern/saiga) -"xHC" = ( -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"xHE" = ( -/obj/structure/table/wood{ - dir = 1; - icon_state = "longtable" - }, -/obj/item/reagent_containers/glass/cup/wooden{ - pixel_x = -13 - }, -/obj/item/rogueweapon/huntingknife/cleaver, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"xHI" = ( -/obj/structure/chair/wood/rogue/chair_noble, -/obj/effect/landmark/start/hand, -/obj/structure/roguemachine/camera/left, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xIB" = ( -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/metal{ - icon_state = "plating2" - }, -/area/rogue/under/town/basement) -"xIG" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"xIT" = ( -/obj/structure/flora/roguegrass, -/obj/structure/fluff/psycross, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/town) -"xIU" = ( -/obj/item/roguekey/roomiv{ - name = "Wanderer room key" - }, -/obj/item/roguekey/roomi{ - name = "Duchess suite key" - }, -/obj/item/roguekey/roomii{ - name = "Castellan room key" - }, -/obj/item/roguekey/roomiii{ - name = "Yeoman room key" - }, -/obj/structure/closet/crate/chest/neu_iron{ - name = "key chest" - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town/tavern/saiga) -"xJG" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/cobble/mossy, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xKf" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/vagrant{ - dir = 4; - icon_state = "arrow" - }, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/town) -"xKg" = ( -/obj/structure/bars/cemetery, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xKP" = ( -/turf/closed/wall/mineral/rogue/decostone/cand, -/area/rogue/indoors/town/tavern/saiga) -"xKY" = ( -/obj/machinery/light/rogue/wallfire/candle/weak, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/bath/redhouse) -"xLq" = ( -/obj/structure/roguemachine/scomm/r, -/obj/structure/lever/wall{ - dir = 4; - redstone_id = "stewardshutter" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"xLA" = ( -/obj/effect/landmark/start/gravedigger{ - dir = 1 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"xLR" = ( -/obj/effect/decal/cobbleedge{ - dir = 10 - }, -/turf/open/floor/rogue/wood, -/area/rogue/outdoors/exposed/under/basement) -"xLU" = ( -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"xMu" = ( -/obj/structure/fluff/railing/border{ - dir = 4; - icon_state = "border" - }, -/turf/open/water/swamp, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xMw" = ( -/turf/closed/wall/mineral/rogue/stonebrick/reddish, -/area/rogue/indoors/town/bath/redhouse) -"xMA" = ( -/obj/structure/fluff/traveltile{ - aportalgoesto = "decapin"; - aportalid = "decapout" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/mountains/decap) -"xNu" = ( -/obj/structure/bed/rogue/shit, -/obj/item/storage/backpack/rogue/backpack, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/rtfield) -"xOf" = ( -/obj/structure/chair/wood/rogue, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town) -"xOi" = ( -/obj/structure/table/vtable/v2, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xOs" = ( -/obj/structure/mineral_door/wood/donjon{ - dir = 8; - icon_state = "donjondir"; - locked = 1; - lockid = "dungeon" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/cell) -"xON" = ( -/obj/item/reagent_containers/glass/bucket/wooden, -/obj/effect/decal/cobbleedge{ - dir = 4 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/under/town/sewer) -"xPs" = ( -/obj/structure/rack/rogue, -/obj/item/quiver/bolts, -/obj/item/gun/ballistic/revolver/grenadelauncher/crossbow, -/turf/open/floor/rogue/ruinedwood/spiral, -/area/rogue/indoors/town/garrison) -"xPy" = ( -/obj/effect/landmark/start/sheriff{ - dir = 1 - }, -/turf/open/floor/rogue/carpet/lord/center, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xPz" = ( -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xPD" = ( -/obj/structure/bars/pipe{ - dir = 6; - icon_state = "pipe" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/shelter/town/dwarf) -"xPH" = ( -/turf/open/floor/carpet/inn, -/area/rogue/indoors/town/bath/redhouse) -"xPW" = ( -/obj/structure/bookcase, -/obj/item/book/rogue/cardgame, -/obj/item/book/rogue/magicaltheory, -/obj/item/book/rogue/tales1, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/magician) -"xQc" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguetree/burnt, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"xQe" = ( -/obj/structure/fluff/railing/border, -/obj/structure/fluff/railing/border{ - dir = 6; - icon_state = "border" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town) -"xQi" = ( -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/obj/structure/closet/crate/chest/crate, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw" - }, -/area/rogue/indoors/town/church/chapel) -"xQp" = ( -/obj/structure/table/wood{ - icon_state = "tablewood1" - }, -/obj/item/clothing/mask/cigarette/pipe, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/exposed/town) -"xQC" = ( -/turf/open/floor/carpet/purple, -/area/rogue/indoors/town/vault) -"xQF" = ( -/obj/structure/flora/roguegrass, -/obj/machinery/light/rogue/lanternpost/fixed{ - dir = 1 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"xRk" = ( -/obj/structure/stairs{ - dir = 4; - icon_state = "stairs" - }, -/obj/structure/fluff/railing/border, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/garrison) -"xRo" = ( -/obj/structure/roguemachine/balloon_pad, -/obj/item/reagent_containers/food/snacks/crow{ - dir = 1; - icon_state = "crow" - }, -/turf/open/floor/rogue/tile, -/area/rogue/outdoors/town/roofs) -"xRs" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/sapprentice{ - dir = 1 - }, -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/shelter/town/dwarf) -"xRz" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/spiderbase) -"xSd" = ( -/turf/closed/wall/mineral/rogue/craftstone, -/area/rogue/outdoors/exposed/under/basement) -"xTr" = ( -/turf/open/transparent/openspace, -/area/rogue/indoors/town/tavern) -"xTB" = ( -/obj/structure/fluff/railing/border{ - dir = 8; - icon_state = "border" - }, -/turf/open/floor/rogue/hexstone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xTH" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) -"xTY" = ( -/obj/machinery/light/rogue/torchholder{ - pixel_y = 26 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"xUr" = ( -/obj/machinery/light/rogue/wallfire{ - pixel_y = 32 - }, -/turf/open/floor/rogue/cobblerock, -/area/rogue/indoors/shelter/town/dwarf) -"xVh" = ( -/obj/structure/stairs/stone{ - dir = 8; - icon_state = "stonestairs" - }, -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"xWa" = ( -/obj/effect/decal/shadow_floor{ - dir = 8 - }, -/turf/open/floor/rogue/tile/bath, -/area/rogue/indoors/town/bath/redhouse) -"xWm" = ( -/obj/structure/fluff/railing/border{ - dir = 10; - icon_state = "border" - }, -/turf/open/floor/rogue/rooftop/green{ - dir = 8 - }, -/area/rogue/outdoors/town/roofs) -"xWC" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"xWJ" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/fluff/walldeco/stone{ - pixel_x = 0; - pixel_y = 32 - }, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"xWP" = ( -/obj/structure/table/wood{ - icon_state = "tablewood2"; - dir = 10 - }, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"xXp" = ( -/turf/closed/wall/mineral/rogue/roofwall/middle, -/area/rogue/indoors/town/tavern) -"xXs" = ( -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xXE" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/splatter, -/obj/item/restraints/legcuffs/beartrap/armed/camouflage, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xYf" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/mole, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"xYx" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/nightmaiden{ - dir = 8 - }, -/turf/open/floor/rogue/ruinedwood/chevron, -/area/rogue/indoors/town/bath/redhouse) -"xYD" = ( -/turf/open/transparent/openspace, -/area/rogue/under/town/basement) -"xZg" = ( -/obj/structure/flora/roguegrass, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"xZA" = ( -/obj/structure/bed/rogue, -/obj/structure/spider/stickyweb, -/turf/open/floor/rogue/concrete, -/area/rogue/under/cave/spider) -"xZX" = ( -/obj/effect/decal/cleanable/vomit/old, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"yai" = ( -/obj/structure/mineral_door/wood/donjon/stone{ - locked = 1; - name = "manor" - }, -/turf/open/floor/rogue/concrete, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"yaI" = ( -/mob/living/simple_animal/hostile/retaliate/rogue/mole, -/obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/shelter/mountains) -"ybe" = ( -/obj/item/roguestatue/iron, -/obj/structure/flora/roguegrass, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/exposed/manorgarri) -"ybg" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/outdoors/exposed/manorgarri) -"ybJ" = ( -/turf/open/floor/rogue/blocks/stonered, -/area/rogue/indoors/town/bath/redhouse) -"yci" = ( -/obj/structure/flora/roguegrass, -/turf/open/water/sewer, -/area/rogue/under/town/sewer) -"ycC" = ( -/obj/structure/fluff/railing/border, -/turf/open/floor/rogue/tile/masonic/inverted, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"ycJ" = ( -/turf/closed/wall/mineral/rogue/wooddark/end, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ydq" = ( -/obj/item/chair/rogue, -/turf/open/floor/rogue/herringbone, -/area/rogue/under/town/basement) -"yds" = ( -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/garrison) -"ydz" = ( -/turf/open/transparent/openspace, -/area/rogue/outdoors/exposed/dwarf) -"ydC" = ( -/obj/structure/mineral_door/bars, -/turf/open/floor/rogue/cobblerock, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"ydO" = ( -/turf/open/floor/rogue/rooftop/green, -/area/rogue/outdoors/town/roofs) -"yee" = ( -/obj/structure/stairs/stone, -/turf/open/floor/rogue/dirt/road, -/area/rogue/under/town/basement) -"yex" = ( -/obj/structure/toilet, -/obj/machinery/light/rogue/wallfire/candle, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/manor{ - first_time_text = "Blackwine Manor" - }) -"yeS" = ( -/obj/structure/stairs{ - dir = 4; - icon_state = "stairs" - }, -/turf/open/floor/rogue/herringbone, -/area/rogue/indoors/town/shop) -"yfc" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/obj/structure/fluff/walldeco/bath/wallrope{ - pixel_y = -32 - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/town) -"yfM" = ( -/obj/structure/fluff/railing/fence{ - dir = 1; - icon_state = "fence" - }, -/turf/open/floor/rogue/grass, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50, /mob/living/carbon/human/species/human/northern/bum/ambush = 30) - }) -"yfZ" = ( -/obj/structure/stairs{ - dir = 1; - icon_state = "stairs" - }, -/turf/open/transparent/openspace, -/area/rogue/indoors/town/shop) -"ygg" = ( -/mob/living/carbon/human/species/human/northern/bum{ - aggressive = 1; - druggy = 1; - name = "madman"; - wander = 1 - }, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); - first_time_text = "CATACOMBS" - }) -"ygq" = ( -/turf/closed/mineral/rogue/bedrock, -/area/rogue/outdoors/exposed/under/basement) -"ygv" = ( -/obj/structure/chair/stool/rogue, -/turf/open/floor/rogue/tile, -/area/rogue/indoors/town/garrison) -"ygD" = ( -/obj/structure/flora/roguetree/burnt, -/turf/open/transparent/openspace, -/area/rogue/outdoors/town/roofs) -"ygG" = ( -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave{ - ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10); - first_time_text = "CATACOMBS" - }) -"ygV" = ( -/obj/effect/decal/cobbleedge{ - dir = 9 - }, -/turf/open/floor/rogue/dirt, -/area/rogue/outdoors/town) -"yhf" = ( -/obj/structure/bed/rogue/mediocre, -/mob/living/simple_animal/hostile/zombie, -/turf/open/floor/rogue/dirt/road, -/area/rogue/outdoors/rtfield{ - ambush_mobs = list(/mob/living/simple_animal/hostile/zombie = 50); - first_time_text = "PLAGUE DISTRICT"; - icon_state = "yellow"; - name = "plague district" - }) -"yhh" = ( -/obj/item/reagent_containers/powder/flour, -/obj/structure/closet/crate/chest/old_crate, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/obj/item/reagent_containers/powder/flour, -/turf/open/floor/rogue/blocks, -/area/rogue/under/town/basement) -"yhr" = ( -/mob/living/simple_animal/hostile/zombie, -/turf/open/floor/rogue/naturalstone, -/area/rogue/under/cave) -"yhx" = ( -/obj/machinery/light/rogue/torchholder{ - dir = 4; - icon_state = "torchwall1" - }, -/turf/open/floor/rogue/cobble, -/area/rogue/under/town/basement) -"yhE" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/rogue/dirt, -/area/rogue/indoors) -"yin" = ( -/obj/structure/chair/stool/rogue, -/obj/effect/landmark/start/vagrant{ - dir = 8; - icon_state = "arrow" - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town) -"yiq" = ( -/obj/effect/decal/cobbleedge{ - dir = 6 - }, -/turf/open/floor/rogue/dirt/road, -/area/rogue/indoors/town/tavern/saiga) -"yiB" = ( -/obj/effect/landmark/start/tailor, -/turf/open/floor/rogue/twig, -/area/rogue/indoors) -"yiC" = ( -/turf/open/floor/carpet/royalblack, -/area/rogue/indoors/town/garrison) -"yjO" = ( -/obj/item/chair/stool/bar/rogue/crafted, -/turf/open/floor/rogue/twig, -/area/rogue/indoors/shelter/bog) -"ykl" = ( -/obj/item/rope/chain, -/turf/open/floor/rogue/cobble, -/area/rogue/indoors/town/cell) - -(1,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(2,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(3,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(4,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(5,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(6,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(7,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(8,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(9,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(10,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -jaf -jaf -jaf -jaf -jaf -cZs -jaf -jaf -jaf -jaf -jaf -cZs -jaf -cZs -jaf -jaf -jaf -cZs -jaf -jaf -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(11,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -jaf -cZs -jaf -cZs -jaf -cZs -jaf -jaf -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(12,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -dLn -ucT -jaf -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(13,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -uqi -ucT -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(14,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -uqi -ucT -jaf -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(15,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -cxy -ucT -ucT -uqi -ucT -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(16,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -cxy -ucT -ucT -ucT -cxy -ucT -ucT -uqi -ucT -jaf -jaf -jaf -cZs -jaf -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(17,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -cxy -ucT -ucT -ucT -cxy -ucT -ucT -uqi -ucT -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(18,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -mKj -cxy -cxy -mKj -mKj -hsL -cxy -mKj -hsL -uqi -mKj -hsL -hsL -mKj -uqi -hsL -mKj -hsL -hsL -mKj -jaf -aRU -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(19,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -hsL -jPX -yhr -uqi -hsL -xIG -hsL -uqi -uqi -uqi -uqi -xYf -qrD -qrD -oKg -uqi -uqi -hsL -uqi -hsL -jaf -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(20,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -mKj -uqi -uqi -hsL -mKj -hsL -cxy -mKj -cxy -ucT -mKj -ucT -uqi -mKj -hdv -hsL -mKj -hsL -hsL -hsL -jaf -aRU -cZs -cZs -sNy -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(21,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -mKj -hsL -mKj -cxy -ucT -cxy -ucT -cxy -ucT -ucT -ucT -uqi -ucT -tSa -ucT -ucT -mKj -ucT -ucT -jaf -jaf -cZs -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(22,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -hsL -hsL -cxy -cxy -cxy -cxy -cxy -cxy -cxy -cxy -cxy -uqi -ucT -cxy -ucT -ucT -ucT -ucT -ucT -aRU -cZs -cZs -cZs -sNy -cZs -sNy -cZs -cZs -cZs -sNy -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(23,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -hsL -hsL -hsL -cxy -ucT -cxy -ucT -cxy -ucT -ucT -mKj -uqi -mKj -cxy -cxy -cxy -ucT -ucT -ucT -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(24,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -mKj -uqi -mKj -cxy -ucT -cxy -ucT -uqi -cxy -cxy -cxy -uqi -ucT -cxy -ucT -ucT -ucT -jaf -aRU -cZs -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -cZs -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(25,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -hsL -uqi -cxy -cxy -ucT -cxy -ucT -uqi -ucT -ucT -ucT -cxy -ucT -cxy -ucT -ucT -ucT -jaf -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(26,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -cxy -cxy -cxy -cxy -uqi -hsL -cxy -ucT -dLn -ucT -uqi -cxy -cxy -cxy -cxy -cxy -cxy -cxy -uqi -ucT -aRU -cZs -cZs -cZs -sNy -cZs -sNy -ahS -hDZ -sRI -ahS -cZs -sNy -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(27,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -mKj -uqi -mKj -ucT -ucT -uqi -ucT -yhr -ucT -ucT -ucT -cxy -ucT -ucT -ucT -ucT -ucT -jaf -jaf -cZs -jaf -sNy -jaf -cZs -jaf -aat -aat -nRU -jaf -sNy -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(28,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -hsL -hsL -uqi -mKj -hsL -uqi -mKj -uqi -hsL -mKj -ucT -cxy -ucT -ucT -ucT -ucT -ucT -aRU -cZs -cZs -cZs -sNy -cZs -sNy -aat -aat -kOq -sRI -cZs -sNy -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(29,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -cxy -cxy -cxy -uqi -uqi -uqi -uqi -hsL -uqi -uqi -uqi -cxy -cxy -cxy -cxy -oKg -uqi -uoh -ucT -jaf -jaf -cZs -jaf -sNy -jaf -sNy -ahS -sRI -hDZ -ahS -jaf -sNy -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(30,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -mKj -hsL -yhr -mKj -uqi -hsL -mKj -otv -uqi -mKj -ucT -ucT -cxy -hsL -hsL -hsL -ucT -aRU -cZs -cZs -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -cZs -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(31,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -dLn -hsL -uqi -ucT -ucT -mKj -uqi -cuW -cuW -cxy -cxy -cxy -cuW -cuW -ucT -jaf -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(32,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -uqi -ucT -ucT -hsL -uqi -hsL -ucT -ucT -cuW -ucT -cuW -ucT -ucT -aRU -cZs -cZs -cZs -cZs -cZs -sNy -cZs -sNy -cZs -sNy -cZs -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(33,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -uqi -ucT -ucT -mKj -hsL -mKj -ucT -ucT -uqi -ucT -cuW -ucT -ucT -jaf -jaf -cZs -jaf -cZs -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(34,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -hsL -uqi -cuW -cuW -cuW -uqi -cuW -cuW -cuW -ucT -jaf -aRU -cZs -cZs -cZs -cZs -cZs -cZs -sNy -cZs -cZs -cZs -sNy -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(35,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -cxy -cuW -cuW -uqi -mKj -ucT -hsL -uqi -hsL -uqi -hsL -hsL -ucT -ucT -jaf -jaf -cZs -jaf -cZs -jaf -sNy -jaf -cZs -jaf -sNy -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(36,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -cxy -ucT -mKj -uqi -yhr -mKj -hsL -uqi -mKj -uqi -hsL -mKj -hsL -mKj -jaf -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(37,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -qLT -lpI -qLT -psp -psp -psp -psp -psp -psp -psp -psp -psp -lEA -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -cxy -cxy -cxy -cuW -cuW -hsL -uqi -uqi -uqi -yhr -uqi -uqi -uqi -hsL -dLn -hsL -jaf -jaf -cZs -jaf -cZs -jaf -jaf -jaf -jaf -jaf -cZs -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(38,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -psp -psp -edR -edR -edR -qLT -szk -qLT -psp -inD -inD -inD -inD -inD -inD -inD -inD -jek -inD -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -cuW -ucT -mKj -uqi -dLn -mKj -hsL -cuW -mKj -cuW -mKj -uqi -hsL -hsL -jaf -cZs -cZs -cZs -cZs -jaf -mKj -ucT -mKj -jaf -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(39,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -edR -qfT -mgt -qLT -oVv -qLT -psp -inD -ipX -uAe -gFI -gvh -scj -inD -peW -wsn -inD -psp -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -cuW -ucT -hsL -hsL -mKj -ucT -ucT -cuW -ucT -cuW -ucT -mKj -hsL -mKj -jaf -jaf -cZs -jaf -cZs -jaf -ucT -nQu -ucT -jaf -cZs -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(40,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -edR -qfT -qfT -qLT -ksr -qLT -psp -hCF -qWm -uoO -uoO -gvh -onR -inD -gUL -dsq -inD -inD -inD -inD -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -cuW -cuW -cuW -cuW -uqi -cuW -cuW -cuW -cuW -cuW -cuW -cuW -cuW -uqi -hsL -jaf -cZs -cZs -jaf -jaf -jaf -hsL -qrD -hsL -jaf -cZs -cZs -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(41,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -psp -qLT -qLT -qLT -qLT -qLT -qLT -qLT -qLT -ahA -edR -qLT -oGq -qLT -psp -inD -oHq -xRs -uoO -gvh -inD -inD -pla -inD -inD -woM -qTs -inD -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -cuW -ucT -mKj -yhr -mKj -ucT -ucT -ucT -ucT -cuW -ucT -hsL -uqi -mKj -ucT -ucT -ucT -ucT -ucT -hsL -mKj -qrD -mKj -jaf -cZs -jaf -cZs -jaf -psp -psp -psp -psp -psp -psp -"} -(42,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -qLT -xnA -wgc -xnA -xnA -xnA -xnA -xnA -xnA -xnA -qLT -qLT -nlJ -qLT -psp -gnE -uQB -uoO -uoO -gvh -gvh -dsq -dsq -dsq -dsq -dsq -dsq -inD -psp -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -cuW -cuW -cuW -uqi -hsL -ucT -ucT -cuW -ucT -ucT -ucT -mKj -uqi -uqi -mKj -hsL -hsL -mKj -hsL -mKj -wBu -hdv -hsL -jaf -cZs -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(43,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -qLT -rGL -xgA -wlB -wlB -wlB -wlB -wlB -wlB -xnA -qLT -qLT -uFI -qLT -psp -inD -pTJ -lOm -ikE -cmZ -inD -dsq -dsq -dsq -dsq -ioS -sjL -inD -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -cuW -ucT -hsL -uqi -cuW -cuW -cuW -cuW -cuW -cuW -cuW -cuW -hXJ -uqi -uqi -uqi -hsL -uqi -hsL -hsL -yhr -uqi -hsL -jaf -cZs -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(44,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -qLT -xnA -wlB -ced -iRp -iRp -ced -iRp -orW -jZF -kQy -hWR -dbV -qLT -qLT -inD -inD -inD -iap -iap -inD -uCR -iap -inD -inD -rpx -inD -inD -oFV -oFV -oFV -oFV -oFV -oFV -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -cuW -cuW -cuW -cuW -mKj -hsL -mKj -ucT -ucT -cuW -ucT -cuW -ucT -mKj -uqi -dLn -mKj -hsL -cuW -mKj -cuW -hsL -mKj -uqi -mKj -jaf -cZs -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(45,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -qLT -xnA -wlB -iRp -bWp -bWp -bWp -iRp -pNm -afT -wlB -wlB -wlB -wlB -wlB -xnA -qLT -ptt -rPy -rPy -rPy -rPy -hSf -inD -mzq -tQC -aeV -inD -oFV -ePO -ePO -ePO -oFV -oFV -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -cuW -ucT -hsL -xYf -uqi -mKj -hsL -cuW -mKj -cuW -mKj -hsL -uqi -mKj -ucT -ucT -cuW -ucT -cuW -ucT -hsL -yhr -hsL -jaf -cZs -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(46,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -qLT -xnA -wlB -wmg -bWp -bWp -bWp -feV -mbn -feV -mbn -feV -mbn -feV -wlB -xnA -fyR -ptt -ahR -rPy -rPy -rPy -bct -frf -gPa -tQC -hrw -inD -ePO -ePO -ePO -ePO -ePO -oFV -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -cuW -cuW -cuW -cuW -hsL -uqi -hsL -uqi -uqi -uqi -hsL -hsL -uqi -yhr -cuW -cuW -cuW -cuW -ucT -cuW -cuW -cuW -qrD -hsL -jaf -cZs -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(47,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -eVs -lEA -eVs -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -qLT -xnA -wlB -iRp -bWp -bWp -jgk -mbn -fkl -mbn -saJ -yds -nVh -feV -wEW -inD -inD -inD -inD -inD -iap -rPy -rPy -inD -xFa -tQC -xAF -inD -ePO -ePO -oFV -ePO -ePO -oFV -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -cuW -ucT -mKj -hsL -otv -mKj -hsL -uqi -mKj -pch -hsL -mKj -uqi -mKj -ucT -ucT -cuW -ucT -cuW -ucT -mKj -xIG -mKj -jaf -jaf -jaf -jaf -jaf -ucT -ucT -psp -psp -psp -psp -"} -(48,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ygq -ygq -ygq -ygq -ygq -ygq -ygq -eVs -ijK -oOX -gtw -tvZ -tvZ -tvZ -tvZ -gtw -gtw -tvZ -tvZ -tvZ -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -qLT -rGL -qTv -iRp -dfC -jgk -jgk -jTS -yds -mbn -bQG -yds -lmp -feV -wlB -inD -eUD -qVi -nDi -whL -inD -tYR -rPy -iGb -miv -tQC -dGC -inD -ePO -ePO -ePO -ePO -ePO -oFV -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -cuW -ucT -ucT -hsL -uqi -ucT -hsL -yhr -hsL -cuW -ucT -hsL -uqi -cuW -cuW -cuW -cuW -cuW -cuW -cuW -cuW -hsL -mKj -hsL -hsL -mKj -hsL -hsL -mKj -ucT -psp -psp -psp -psp -"} -(49,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -cqj -cqj -cqj -cqj -cqj -cqj -fVL -cqj -cqj -cqj -cqj -cqj -cqj -cqj -cqj -cqj -psp -psp -psp -psp -psp -ijK -ijK -ygq -gtw -tvZ -gtw -tvZ -gtw -gtw -oOX -tMr -eFL -bVR -qio -ukE -bVR -qio -kqz -owX -gKG -gKG -gtw -tvZ -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -qLT -xnA -wlB -iRp -iRp -iRp -iRp -mbn -xTY -mbn -nVh -yds -nVh -epZ -wlB -inD -eYQ -dTr -tQC -gCc -iGb -rPy -rPy -iap -inD -tQC -qGU -inD -ePO -ePO -ePO -ePO -ePO -oFV -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -vfu -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -uqi -ucT -ucT -uqi -cuW -cuW -cuW -cuW -hsL -hsL -ucT -ucT -cuW -ucT -cuW -ucT -hsL -hsL -hsL -hsL -dGR -hsL -hsL -hsL -ucT -ucT -psp -psp -psp -psp -"} -(50,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -cqj -cqj -fVL -cqj -cqj -cqj -fVL -cqj -cqj -cqj -fVL -cqj -cqj -cqj -cqj -cqj -psp -psp -psp -psp -psp -ijK -ijK -ygq -gtw -bVR -ezU -gtw -gtw -tvZ -eFL -oOX -eFL -qio -xSd -xSd -xSd -xSd -gtw -qVm -oEf -gKG -sVC -gtw -tvZ -tvZ -gtw -tvZ -gtw -gtw -tvZ -hsL -hsL -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -qLT -xnA -wlB -eXr -qVO -gGC -vXs -yds -yds -mbn -sSX -sSX -aQE -feV -orW -inD -uUr -inD -tQC -qZv -inD -kLR -ahR -nzX -inD -dsq -inD -inD -ePO -ePO -oFV -ePO -ePO -oFV -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -cuW -ucT -mKj -uqi -mKj -cuW -ucT -mKj -uqi -mKj -ucT -ucT -cuW -ucT -cuW -ucT -mKj -hsL -mKj -hsL -hsL -mKj -ucT -ucT -ucT -ucT -psp -psp -psp -psp -"} -(51,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -cqj -cqj -fVL -cqj -cqj -cqj -fVL -cqj -fVL -cqj -cqj -cqj -psp -psp -psp -psp -psp -ijK -ijK -ygq -tvZ -ley -qio -qio -kqz -nSS -ihA -ezU -qio -ukE -xSd -qio -vZN -qio -xSd -wRz -gtw -gKG -gKG -kqz -qio -qio -qio -qio -qio -bJm -gtw -hsL -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -qLT -bTg -xnA -gGC -xnA -wlB -feV -xWJ -yds -mbn -mbn -oUu -mbn -mbn -mbn -inD -dsq -gFH -dsq -wQO -frf -ahR -ahR -nzX -inD -dsq -ePO -ePO -ePO -ePO -ePO -ePO -ePO -oFV -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -cuW -cuW -cuW -cuW -ucT -cuW -ucT -hsL -hsL -hsL -ucT -ucT -cuW -cuW -cuW -cuW -cuW -uqi -hsL -ucT -ucT -ucT -ucT -ucT -ucT -ucT -psp -psp -psp -psp -"} -(52,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -cqj -cqj -psp -psp -psp -psp -psp -ijK -ijK -ygq -tvZ -gtw -qio -ukE -gtw -gtw -xSd -gtw -xSd -xSd -xSd -qio -oLC -qio -xSd -xSd -xSd -owX -gKG -tvZ -gtw -gtw -gtw -gtw -ley -qio -tvZ -hsL -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -qLT -qLT -qLT -qLT -gJg -wfm -feV -mbn -yds -yds -mbn -nVd -yds -szw -mbn -inD -kBN -dsq -dsq -lOZ -lOZ -qSx -mzh -lOZ -inD -dsq -inD -inD -oFV -ePO -ePO -ePO -oFV -oFV -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -vUx -vUx -vUx -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -cuW -ucT -ucT -cuW -cuW -cuW -uqi -uqi -uqi -cuW -cuW -cuW -cuW -ucT -cuW -ucT -hsL -uqi -cuW -cuW -cuW -ucT -ucT -psp -psp -psp -psp -psp -psp -psp -"} -(53,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -psp -psp -psp -psp -ijK -ijK -ygq -ygq -gtw -kqz -gtw -tvZ -riw -gip -avZ -aGl -fgs -xSd -qio -hcr -kiO -vZN -juC -gKG -aTI -auJ -tvZ -fIm -fKq -fKq -gtw -gtw -qio -gtw -hsL -psp -pzz -ijK -psp -psp -psp -psp -psp -psp -psp -psp -qLT -qLT -qLT -qLT -xnA -wlB -feV -vRU -vNy -yds -llQ -yds -yds -ibG -mbn -inD -inD -inD -dsq -lOZ -tWT -ecK -lrh -lOZ -oXJ -dsq -dsq -inD -oFV -oFV -oFV -oFV -oFV -oFV -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -vUx -vUx -vUx -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -cuW -cuW -cuW -cuW -hsL -hsL -hsL -mKj -uqi -mKj -hsL -ucT -cuW -ucT -cuW -ucT -mKj -hsL -mKj -ucT -ucT -ucT -ucT -psp -psp -psp -psp -psp -psp -psp -"} -(54,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -cqj -psp -psp -psp -psp -ijK -ijK -ygq -ygq -gtw -qio -tvZ -hRu -fgs -vTq -vTq -vTq -fgs -oRy -qio -xSd -xSd -xSd -xSd -xSd -gKG -owX -gtw -xLR -lJI -vrm -pbD -bVR -qio -tvZ -hsL -psp -ijK -ijK -rbU -fyR -fyR -fyR -fyR -qLT -qLT -qLT -xnA -xnA -xnA -xnA -xnA -wlB -feV -mbn -mbn -mbn -mbn -ibG -yds -yds -mbn -inD -inD -inD -dsq -lOZ -lOZ -lOZ -lOZ -lOZ -dsq -dsq -dsq -inD -psp -cZM -cZM -cZM -psp -psp -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -vUx -vUx -vUx -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -cuW -ucT -ucT -cuW -uqi -uqi -uqi -uqi -uqi -uqi -mKj -hsL -cuW -mKj -cuW -mKj -uqi -uqi -cuW -cuW -cuW -ucT -ucT -psp -psp -psp -psp -psp -psp -psp -"} -(55,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -psp -psp -psp -psp -ijK -ijK -psp -psp -tvZ -stR -hcr -qrh -fgs -vTq -pCU -vTq -fgs -wTU -qio -qio -xSd -syZ -eRP -gtw -erC -iNk -gtw -bQk -oiJ -hAo -pbD -qio -gtw -gtw -hsL -psp -ijK -ijK -fyR -xnA -bTg -xnA -xnA -xnA -xnA -xnA -xnA -qLT -qLT -xnA -wlB -wlB -qLT -fkl -yds -ibG -mbn -cVF -yds -yds -mbn -yhx -sGh -oRn -dsq -dsq -dsq -dsq -xzR -dsq -dsq -dsq -dsq -inD -psp -cZM -isW -cZM -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -vUx -vUx -vUx -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -cuW -ucT -ucT -ucT -hsL -hsL -uqi -uqi -uqi -hsL -uqi -hsL -uqi -uqi -uqi -cuW -cuW -cuW -cuW -ucT -psp -psp -psp -psp -psp -psp -psp -"} -(56,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -cqj -psp -psp -psp -psp -ijK -ijK -psp -psp -gtw -dqx -xSd -uFE -fgs -vTq -vTq -vTq -csS -jzs -jne -xSd -xSd -pxn -qio -hPq -erC -erC -mNM -qio -qio -mMW -pbD -qio -tvZ -hsL -hsL -psp -ijK -ijK -fyR -xnA -fyR -fyR -fyR -fyR -qLT -fyR -qLT -qLT -fqY -xnA -wlB -feV -feV -xTY -yds -yds -hWg -yds -yds -ibG -mbn -qNz -sGh -inD -inD -inD -inD -inD -inD -inD -inD -inD -inD -inD -psp -cZM -tfY -cZM -psp -psp -psp -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -vUx -vUx -vUx -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -cuW -ucT -ucT -ucT -mKj -hsL -hsL -mKj -hsL -cuW -mKj -cuW -hsL -mKj -cuW -mKj -ucT -ucT -ucT -ucT -psp -psp -psp -psp -psp -psp -psp -"} -(57,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -psp -psp -ijK -ijK -ijK -psp -psp -gtw -qio -xSd -xSd -byi -fgs -diP -eBG -mxq -xSd -xSd -xSd -wDj -qio -pqq -gtw -erC -erC -gtw -rje -qio -jne -pbD -nSS -tvZ -hsL -psp -pzz -ijK -ijK -qLT -xnA -fyR -psp -cZM -cZM -cZM -psp -psp -qLT -xnA -cSp -ppN -feV -mGt -ibG -yds -yds -mbn -yds -yds -yds -mbn -sGh -cZM -cZM -cZM -ejQ -cZM -cZM -szk -dAV -rTk -psp -psp -psp -psp -cZM -qNz -cZM -psp -psp -psp -psp -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -gwE -gwE -gwE -aiB -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -cuW -ucT -cuW -ucT -cuW -ucT -cuW -ucT -ucT -cuW -ucT -ucT -ucT -ucT -ucT -psp -psp -psp -psp -psp -psp -psp -"} -(58,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -cqj -psp -psp -psp -ijK -ijK -psp -psp -psp -tvZ -qio -tvZ -xSd -xSd -mgy -xSd -xSd -xSd -xSd -gtw -gtw -xnj -qio -ojm -gtw -erC -erC -gtw -wxb -jne -dLG -pbD -hrB -gtw -hsL -psp -ijK -ijK -psp -fyR -xnA -qLT -psp -cZM -isW -cZM -cZM -cZM -cZM -les -les -les -feV -jvP -jvP -jvP -jvP -mbn -mbn -mbn -mbn -mbn -sGh -cZM -cZM -srW -fiK -kkl -cZM -cZM -wlB -rTk -psp -psp -psp -psp -cZM -sGh -cZM -psp -psp -psp -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -gwE -gwE -gwE -jGr -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -cuW -cuW -cuW -cuW -cuW -ucT -cuW -cuW -cuW -cuW -cuW -cuW -ucT -ucT -ucT -psp -psp -psp -psp -psp -psp -psp -"} -(59,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -psp -psp -ijK -ijK -ijK -eVs -eVs -eVs -tvZ -vPZ -gtw -pbD -qNI -erC -gtA -pbD -gSH -ezU -tvZ -jvY -tHr -hmu -asE -tvZ -erC -pBw -tvZ -gtw -gtw -gtw -gtw -vXb -gtw -hsL -psp -ijK -ijK -fyR -qLT -xnA -qLT -edR -cZM -qNz -osR -sGh -vcJ -sGh -sGh -sGh -sGh -sGh -sGh -sGh -sGh -yhx -sGh -sGh -sGh -sGh -sGh -sGh -cZM -teu -qxO -rXT -qxO -frH -cZM -oqL -fyR -cZM -cZM -cZM -cZM -cZM -sGh -cZM -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -gwE -gwE -gwE -gwE -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -ucT -cuW -ucT -ucT -ucT -cuW -ucT -cuW -ucT -ucT -cuW -ucT -ucT -ucT -ucT -ucT -psp -psp -psp -psp -psp -psp -psp -"} -(60,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -psp -ijK -ijK -ijK -ijK -lEA -tMr -eVs -tvZ -bVR -tvZ -hcr -vHH -erC -erC -pbD -tOU -tOU -gtw -tvZ -cHD -qio -pak -xSd -xhr -lil -drL -kmu -vWD -vWD -vWD -qio -tvZ -hsL -psp -ijK -ijK -noo -wlB -dAc -wfm -edR -cZM -cZM -cZM -cZM -cZM -cZM -les -les -les -les -cZM -cZM -cZM -cZM -cZM -cZM -cZM -cZM -cZM -sGh -cZM -jfB -gFR -oNh -gFR -lWG -cZM -uPP -asS -sGh -kho -sGh -sGh -sGh -osR -cZM -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -bnA -gwE -gwE -gwE -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(61,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -ijK -ijK -ijK -psp -psp -eVs -eVs -eVs -tvZ -qio -tvZ -tvZ -tJG -twV -spQ -tvZ -nSS -gSH -gtw -rFA -hSa -qio -uXM -pbD -qio -qzq -tvZ -hRN -abr -hrB -abr -lvI -gtw -hsL -psp -sYX -ijK -qLT -wlB -xnA -qLT -edR -psp -psp -psp -psp -psp -psp -qLT -vjo -wlB -qLT -xfY -dMl -iRs -xfY -xfY -xfY -xfY -xfY -cZM -sGh -cZM -hTM -gFR -fhv -gFR -uFZ -uZZ -lQI -asS -cZM -bjI -cZM -cZM -cZM -cZM -cZM -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -gwE -gwE -ukH -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(62,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -svB -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -psp -psp -psp -rTk -tvZ -gtw -gtw -qio -tvZ -gtw -pbD -tvZ -tvZ -gtw -gtw -tvZ -tvZ -tvZ -tvZ -hDE -xSd -pbD -qio -qio -sMh -bJm -hrB -abr -abr -hrB -rEX -hsL -psp -ijK -ijK -qLT -wlB -xnA -qLT -psp -psp -psp -psp -psp -psp -psp -qLT -mOl -bPr -lQe -xnA -xnA -xnA -mSC -xfY -hmg -nGr -xfY -cZM -sGh -cZM -jfB -gFR -ekI -gFR -lWG -cZM -nUn -fyR -cZM -isW -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -vUx -vUx -vUx -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(63,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -svB -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -ijK -ijK -psp -hsL -hsL -hsL -buA -ezU -nSS -ukE -tvZ -gtw -uQr -rUt -aVE -qFE -dXe -nTh -gtw -tvZ -fpB -lug -jOm -pbD -iNk -uxG -gtw -teg -hrB -abr -abr -qZn -tvZ -psp -psp -ijK -ijK -qLT -wlB -xnA -fyR -psp -psp -psp -psp -psp -psp -psp -qLT -dFd -iqZ -qLT -xfY -myf -nGr -ihc -xnA -xnA -xnA -nGr -cZM -sGh -uEU -uFZ -uFZ -uFZ -uFZ -jqC -cZM -qTv -fyR -fyR -fyR -fyR -fyR -fyR -fyR -fyR -fyR -fyR -psp -psp -psp -psp -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -vUx -vUx -vUx -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(64,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -dwf -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -psp -hsL -ygq -tvZ -qio -tvZ -tvZ -gtw -rEX -rEX -gkd -xvB -dBO -dBO -dBO -krw -gtw -pbD -jXM -tvZ -vAv -tvZ -erC -nWf -iqm -qio -nTz -oNx -nTz -sqT -tvZ -psp -psp -ijK -ijK -fyR -wlB -xnA -qLT -psp -psp -psp -psp -psp -psp -psp -qLT -xnA -wlB -qLT -xfY -xfY -xfY -xfY -xfY -xfY -xnA -dFd -cZM -cZM -cZM -pja -cZM -wSj -cZM -tbC -cZM -wlB -fyR -wlB -dAV -wmC -pNm -tfJ -wlB -wmC -wlB -fyR -psp -psp -psp -psp -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(65,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -fVL -fVL -dwf -fVL -fVL -fVL -fVL -fVL -svB -fVL -fVL -fVL -fVL -fVL -fVL -fVL -psp -ijK -ijK -psp -hsL -ygq -gtw -qio -gtw -eEM -usN -lEl -gtw -cEf -lzR -dBO -xQC -dBO -vwS -tvZ -gtw -tvZ -pbD -tvZ -gtw -tbe -tbe -tvZ -gtw -ced -ced -iRp -ced -ced -psp -psp -ijK -ijK -qLT -wlB -xnA -qLT -qLT -qLT -fyR -qLT -fyR -qLT -fyR -qLT -xnA -wlB -fyR -fyR -fyR -fyR -fyR -fyR -fyR -fyR -lQe -cZM -cZM -cZM -cZM -cZM -cZM -cZM -cZM -cZM -mpf -fyR -wfm -fyR -fyR -fyR -fyR -fyR -fyR -wlB -fyR -fyR -fyR -fyR -fyR -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(66,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -svB -cqj -svB -cqj -fVL -cqj -svB -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -psp -hsL -gtw -gtw -qio -rEX -gKG -anm -gKG -gtw -uQr -gos -dBO -aHC -dBO -aVE -tvZ -ehS -qio -dwx -jOB -dek -bOo -dir -lhc -tbe -wmg -owj -cCJ -qmE -iRp -iRp -ced -ijK -ijK -fyR -wlB -dAc -afT -wlB -wlB -wlB -wlB -wlB -wmC -wlB -wlB -dAc -wlB -wlB -wlB -wlB -wlB -wmC -wlB -wlB -iqZ -pro -iqZ -wlB -wmC -wmC -wlB -dAc -wlB -wmC -wlB -wlB -mpf -wlB -xnA -xnA -xnA -xnA -xnA -yci -wlB -wlB -wlB -wlB -mpf -wlB -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(67,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -fVL -fVL -svB -fVL -svB -svB -svB -svB -svB -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -ijK -ijK -psp -hsL -tvZ -bVR -nSS -tvZ -gKG -etw -gKG -gtw -hdm -aVE -dBO -xQC -dBO -aVE -wOS -qZe -tbe -fvn -sMX -sMX -aMR -lhc -tbe -tbe -wmg -bWp -jAe -vUI -rWX -avs -ced -ijK -ijK -qLT -wlB -xnA -wgc -xnA -xnA -xnA -xnA -xnA -vjo -xnA -xnA -xnA -xnA -bTg -xnA -xnA -xnA -vjo -wlB -wlB -xnA -xnA -xnA -xnA -vjo -vjo -xnA -xnA -xnA -vjo -xnA -lQI -vTN -xnA -xnA -qLT -ewT -xnA -xnA -xnA -lQI -xnA -xnA -xnA -qoI -xnA -aNo -aoO -cZz -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(68,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -svB -cqj -svB -cqj -fVL -cqj -svB -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -psp -hsL -gtw -qio -tvZ -gtw -gtw -hnu -gtw -gtw -uQr -cCw -dBO -dBO -dBO -khg -tvZ -fHJ -qio -dwx -gJM -vUG -tbe -tbe -tbe -tbe -wmg -bWp -vUI -jAe -ced -xdl -ced -ijK -ijK -qLT -wlB -xnA -qLT -qLT -qLT -fyR -qLT -fyR -fyR -xnA -qLT -qLT -xnA -qLT -qLT -fyR -qLT -qLT -wlB -wlB -fyR -qLT -qLT -fyR -fyR -qLT -fyR -qLT -fyR -fyR -xnA -wfm -cZM -cZM -cZM -cZM -cZM -pwB -cZM -xnA -wlB -fyR -fyR -fyR -fyR -xnA -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(69,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -fVL -svB -fVL -svB -fVL -svB -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -psp -ijK -ijK -psp -hsL -gtw -qio -tvZ -tGP -gtw -lZe -whu -gtw -kFE -kLz -aVE -aVE -aVE -iEe -tvZ -gtw -gtw -pbD -gtw -gtw -tbe -tbe -tbe -bOo -ced -bnP -tuU -bbG -ced -ced -ced -ijK -ijK -fyR -wlB -xnA -fyR -psp -psp -psp -psp -psp -qLT -xnA -qLT -qLT -xnA -fyR -rbU -rbU -rbU -qLT -wlB -wlB -fyR -qLT -bTg -xnA -cCq -rhv -myf -lHX -qLT -fyR -xnA -wlB -cZM -ufp -nMn -qoz -sGh -dTE -cZM -xnA -kZh -fyR -vNq -aeH -fyR -xnA -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(70,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -svB -cqj -svB -cqj -svB -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -psp -hsL -gtw -qio -gtw -bhc -qio -tOU -dVU -gtw -gtw -tvZ -pbD -gtw -tvZ -gtw -gtw -qio -sMX -qio -qio -kqz -tbe -bOo -dir -qio -byF -bWp -eDZ -eDZ -ced -psp -psp -ijK -ijK -qLT -wlB -xnA -fyR -sRb -sRb -sRb -sRb -sRb -sRb -tnO -sRb -fyR -xnA -qLT -rbU -rbU -rbU -fyR -xbu -qTv -xnA -aKs -xnA -xnA -xnA -bKX -wwo -xnA -lsL -vjo -xnA -wkZ -cZM -avy -sGh -sGh -osR -lBj -cZM -xnA -lQI -fSP -qfT -eBB -fyR -xnA -ijK -ijK -cZz -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(71,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -svB -svB -fVL -svB -fVL -svB -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -ijK -ijK -psp -hsL -gtw -qio -gtw -gtw -oxU -qio -oxU -gtw -gtw -gtw -gtw -gtw -lsd -uwG -gtw -qio -gtw -dwx -ced -ced -ced -ced -ced -aRI -iRp -lKo -qkJ -umO -ced -psp -psp -ijK -ijK -qLT -wlB -xnA -tlx -sRb -uiG -gAe -xRz -eTh -sFf -rWD -sRb -fyR -xnA -fyR -fyR -rbU -rbU -fyR -xnA -wlB -fyR -qLT -xnA -jPr -xnA -vjo -dFd -eaT -qLT -fyR -rGL -qTv -cZM -cZM -rHl -cZM -cZM -oQh -cZM -xnA -yci -fyR -rTk -rTk -fyR -qxF -ijK -ijK -eGI -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(72,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -svB -cqj -svB -svB -svB -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -psp -hsL -tvZ -jml -qio -tvZ -eeH -tOU -lcY -vrh -gKG -gKG -vZN -elo -kWt -vWJ -gtw -qio -jbd -qio -ced -alG -bWp -rlJ -qgE -qgE -iRp -iRp -aRI -ced -ced -psp -psp -sYX -ijK -nmN -wlB -xnA -tlx -hhL -aqs -mBF -vCr -sFf -tgz -rWD -sRb -qLT -xnA -lOS -fyR -fyR -qLT -qLT -bTg -wlB -cZM -cZM -les -cZM -cZM -cZM -les -cZM -les -fyR -qxF -wfm -cZM -bYh -sGh -eGC -cZM -cJr -cZM -xnA -yci -fyR -psp -psp -fyR -fyR -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(73,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -svB -svB -sjZ -svB -svB -fVL -svB -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -ijK -ijK -ijK -hsL -tvZ -gtw -qio -tvZ -gtw -cCE -pbD -tvZ -ozE -gKG -gtw -gtw -gtw -pbD -gtw -gtw -gtw -pPO -ced -alG -bWp -wGn -oKl -nji -iRp -aRI -aRI -aRI -rTk -psp -psp -ijK -ijK -qLT -wlB -pNm -tlx -oXb -aqs -gIz -vCr -rWD -rWD -rWD -sRb -fyR -fKJ -xnA -xnA -xnA -xnA -xnA -xnA -wlB -cZM -jwk -jwk -jwk -jwk -jwk -jwk -jwk -sMr -fyR -dAV -uSU -cZM -caf -sGh -ouq -cZM -cJr -cZM -xnA -yci -fyR -psp -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(74,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -svB -cqj -svB -cqj -svB -cqj -svB -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -psp -ijK -ijK -vUx -rEX -gtw -qio -nSS -ezU -qio -qio -kqz -qio -qio -qio -qio -qio -qio -ezU -ezU -qio -qio -vBX -rzv -bWp -heG -bWp -stI -aRI -aRI -psp -aRI -rTk -psp -psp -ijK -ijK -qLT -xnA -wlB -tlx -sGM -imT -hlB -vCr -eTh -sFf -rWD -sRb -fyR -fyR -aKs -fyR -qLT -fyR -qLT -xnA -wlB -cZM -jwk -ezM -ezM -mmo -qSX -qyv -jwk -sMr -fyR -wfm -wlB -cZM -cZM -qij -cZM -cZM -cJr -cZM -qxF -yci -fyR -psp -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -hDi -tqO -tqO -hDi -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(75,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -fVL -svB -fVL -svB -fVL -svB -fVL -svB -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -psp -psp -ijK -ijK -vUx -rEX -rEX -rEX -gtw -gtw -gtw -gtw -gtw -tvZ -gtw -qio -iKc -jml -qio -qio -quW -qio -jne -ced -iRp -ced -duv -ced -ced -iRp -psp -psp -aRI -aRI -aRI -psp -ijK -ijK -fyR -xnA -wlB -tlx -sRb -qgf -gAe -nYt -rWD -sFf -sca -sRb -psp -rbU -xnA -rbU -rbU -rbU -qLT -wlB -wlB -cZM -jwk -cKB -myP -qSX -qSX -wGg -jwk -sMr -fyR -uSU -wlB -cZM -rND -sGh -swo -bwe -dWu -cZM -jZF -wlB -fyR -psp -psp -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -tqO -tFF -kML -tqO -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(76,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -svB -cqj -svB -cqj -svB -cqj -svB -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -ijK -psp -uQd -uQd -uQd -uQd -uQd -uQd -uQd -ygq -tvZ -gtw -wrV -gtw -gtw -rEX -tvZ -ced -xOs -ced -iRp -alG -seF -heG -alG -wOz -nGC -psp -psp -psp -psp -aRI -psp -ijK -ijK -fyR -xnA -wfm -qLT -sRb -sRb -sRb -sRb -sRb -sRb -sRb -sRb -psp -rbU -xnA -xnA -rbU -rbU -fyR -wlB -xnA -cZM -jwk -inx -qSX -qSX -epm -fXZ -jwk -sMr -fyR -fyR -mXf -cZM -nbT -xZX -pYT -cZM -iBh -cZM -cZM -fyR -fyR -psp -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -kvv -les -kvv -psp -psp -psp -psp -psp -tqO -rng -rng -hDi -tqO -tqO -tqO -hDi -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(77,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -fVL -fVL -fVL -svB -fVL -svB -svB -svB -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -ijK -ijK -psp -uQd -abA -aWR -xkk -che -dub -dub -aDr -uQd -gtw -cjc -qio -wnR -eFL -fkZ -oOX -oaH -bdv -iFF -tLl -bWp -bWp -xTH -bWp -whF -nGC -aRI -aRI -aRI -aRI -aRI -psp -pzz -ijK -qLT -xnA -wlB -fyR -edR -rTk -rTk -psp -psp -psp -psp -psp -psp -rbU -myf -xnA -awU -rbU -fyR -qTv -rGL -cZM -cZM -cZM -cZM -hLN -cZM -cZM -jwk -cZM -fyR -fyR -wlB -cZM -vSR -sGh -sGh -uBA -sGh -gjC -cZM -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -kvv -kvv -kvv -kvv -psp -psp -kvv -les -kvv -poF -les -psp -psp -psp -psp -psp -tqO -riq -riq -riq -riq -riq -riq -tqO -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(78,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -svB -cqj -svB -cqj -svB -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -psp -uQd -awv -uDp -uDp -uDp -uDp -uDp -eyi -uQd -gtw -eOs -jPp -bbn -eFL -bOc -oOX -rHH -bdv -iFF -mop -bWp -bWp -exF -bWp -vuw -nGC -aRI -psp -psp -psp -psp -psp -ijK -ijK -qLT -jzA -uSU -qLT -nxY -qfT -rTk -psp -psp -psp -psp -psp -psp -rbU -rbU -nGr -uDI -rbU -qLT -wlB -wlB -cZM -hrp -ehg -rMO -gbA -yhh -cZM -jwk -jwk -mdy -qEA -bZV -cZM -nbT -sGh -hAw -sGh -sGh -liD -cZM -psp -psp -ijK -ijK -ijK -psp -uCd -uCd -uCd -val -drr -uvC -kvv -kvv -kvv -kvv -kvv -nsy -sGh -kvv -psp -psp -psp -psp -psp -tqO -riq -riq -riq -msG -uSn -dZB -tqO -cjj -cjj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(79,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -fVL -fVL -svB -fVL -dwf -fVL -svB -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -ijK -ijK -psp -uQd -iaf -uDp -uDp -uDp -dyu -uDp -ePp -uQd -gtw -uDK -tSb -bhL -eFL -tMr -oOX -bPp -bdv -kyH -qHN -bWp -bWp -bWp -ykl -tPA -iRp -aRI -aRI -aRI -aRI -psp -psp -ijK -ijK -qLT -xnA -mQF -fSP -qfT -qfT -rTk -psp -psp -rbU -rbU -rbU -psp -rbU -rbU -rbU -rbU -rbU -qLT -xnA -wlB -cZM -uQj -gbA -gbA -gbA -nBX -cZM -cZM -cZM -cZM -cZM -cZM -cZM -cZM -cZM -qij -cZM -cZM -cZM -cZM -psp -psp -ijK -ijK -dyO -uCd -bYg -bYg -uCd -val -sGh -sGh -tJu -tJu -sGh -tJu -vec -sGh -sGh -kvv -psp -psp -psp -psp -psp -tqO -riq -riq -riq -eTK -cke -cke -tqO -cjj -cjj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(80,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -svB -cqj -svB -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -psp -uQd -qgJ -bNi -uDp -uJH -uDp -uDp -qgJ -uQd -tvZ -tvZ -tvZ -wRC -cYR -bOc -oOX -mrL -bdv -erS -lEq -bWp -oVe -ebw -aQX -mcG -nGC -psp -psp -psp -aRI -psp -psp -ijK -ijK -qLT -xnA -dAV -qLT -edR -edR -rTk -psp -psp -rbU -rbU -rbU -psp -psp -psp -psp -psp -psp -qLT -xnA -wlB -cZM -jTV -cZM -sOE -gbA -nzD -cZM -icE -lJh -xBl -uog -lJh -cZM -iqf -ezE -dNW -lOx -rCx -cZM -psp -psp -psp -ijK -ijK -uCd -ygg -ygG -uCd -kvv -les -kvv -les -les -les -kvv -les -kvv -sGh -sGh -les -psp -psp -psp -psp -psp -tqO -riq -riq -riq -cke -cke -cke -tqO -tPG -cjj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(81,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -fVL -fVL -fVL -fVL -fVL -svB -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -ijK -ijK -psp -uQd -kXe -uDp -uDp -uDp -ejm -uDp -fsd -uQd -gtw -gtw -gtw -gtw -eFL -ijK -oOX -iRp -nGC -iRp -iRp -nGC -nGC -nGC -iRp -iRp -iRp -psp -aRI -aRI -aRI -psp -psp -ijK -ijK -cZM -cZM -cZM -cZM -cZM -psp -psp -psp -psp -rbU -rbU -rbU -psp -fyR -qLT -fyR -qLT -qLT -qLT -xnA -wlB -cZM -cZM -cZM -cZM -cZM -cZM -cZM -rwu -rwu -hus -rwu -rwu -cZM -xzJ -cqW -oSQ -dNW -oTW -cZM -psp -psp -psp -ijK -ijK -uCd -bYg -uCd -kvv -xpF -nsy -sGh -wwn -eJH -ewq -iGd -kvv -val -paT -les -les -uCd -bYg -psp -psp -psp -tqO -riq -riq -riq -bWe -cke -cke -wsP -wsP -tqO -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(82,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -psp -uQd -jnS -uDp -uDp -uDp -uDp -uDp -fZF -uQd -psp -psp -psp -psp -eVs -eIz -eVs -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -aRI -psp -psp -psp -psp -ijK -ijK -cZM -gbA -aJW -cZM -cZM -cZM -cZM -cZM -cZM -psp -psp -psp -psp -fyR -xnA -xnA -xnA -xnA -vTN -xnA -wlB -cZM -cZM -cZM -cZM -cZM -cZM -rwu -rwu -kmE -cgo -vVY -rwu -cZM -mRF -odw -oXy -dAr -vvP -cZM -psp -psp -psp -ijK -ijK -uCd -ygG -uhj -val -uKl -bPb -hfn -sGh -sGh -sGh -sGh -fKe -fKe -sGh -kvv -uCd -uCd -bYg -psp -psp -psp -hDi -tqO -tqO -tqO -tqO -tqO -tqO -hDi -tqO -tqO -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(83,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -ijK -ijK -psp -uQd -aDr -oem -hio -qgJ -gHs -awv -aDr -uQd -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -aRI -psp -psp -psp -psp -ijK -ijK -cZM -gbA -gbA -opi -cZM -fyY -dNW -wgz -cZM -psp -psp -psp -psp -fyR -xnA -qLT -qLT -fyR -qLT -xnA -wlB -xMw -xMw -xMw -xMw -xMw -xMw -ojT -xMw -xMw -xMw -xMw -xMw -cZM -cZM -cZM -oFB -cZM -cZM -cZM -psp -psp -psp -ijK -ijK -uCd -ygG -uCd -kvv -xpF -oat -iGd -osR -mEx -qMW -sGh -kvv -val -sGh -les -uCd -uCd -bYg -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(84,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -ijK -ijK -psp -psp -uQd -uQd -uQd -uQd -uQd -uQd -uQd -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -cZM -nYB -gbA -gbA -kzV -dNW -fdx -ydq -cZM -psp -psp -psp -psp -fyR -xnA -qLT -uSU -wfm -jfH -gGC -wlB -xEM -gTy -qXG -pUL -xEM -hQT -kqy -kqy -sGU -pVQ -uGl -wAC -vgS -ijK -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -uCd -ygG -bYg -uCd -kvv -kvv -kvv -kvv -kvv -kvv -sGh -kvv -kvv -kvv -kvv -uCd -uCd -dQf -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(85,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -cZM -idH -gbA -gbA -wRi -dNW -fbS -dNW -cZM -psp -psp -psp -psp -fyR -xnA -qLT -qLT -qLT -fyR -xnA -wlB -xEM -jge -sFL -sFL -iBQ -nLP -ybJ -kuA -xEM -jNI -pVQ -wAC -vgS -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -ijK -ijK -uCd -ygG -uCd -uCd -uCd -les -sGh -fKe -fKe -sGh -sGh -sGh -kvv -uCd -uCd -uCd -uCd -ygG -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(86,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -cZM -qbB -gbA -gbA -cZM -dNW -rYK -cZM -cZM -cZM -cZM -cZM -cZM -cZM -xnA -qLT -dAV -uSU -srS -wlB -wlB -xEM -hud -xWa -vBC -xMw -kxm -ybJ -kuA -xMw -xMw -xMw -xMw -xMw -psp -psp -ijK -psp -psp -psp -psp -psp -psp -ijK -ijK -uCd -ygG -uCd -agr -uhj -val -sGh -kvv -kvv -oat -fwP -oat -les -uCd -uhj -ygG -agr -ygG -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(87,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -rky -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -cZM -cZM -tzp -cZM -cZM -mJh -cZM -cZM -fex -tGk -yee -cZM -rhz -cZM -xnA -qLT -qLT -qLT -qLT -dFd -wfm -xMw -xMw -xMw -xMw -xMw -kFZ -ybJ -kuA -tpQ -pVQ -pVQ -nEL -xMw -psp -psp -ijK -psp -psp -psp -psp -psp -psp -ijK -ijK -uCd -ygG -uCd -ygG -uCd -les -qSX -les -kvv -kvv -les -les -les -uCd -uCd -uCd -ygG -uCd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(88,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -cZM -idx -gbA -gbA -gbA -cZM -cZM -wzF -tGk -pQS -bKg -tGk -cZM -cSp -xnA -cSp -iyB -qLT -cHB -wlB -xEM -hLi -qXG -pUL -xMw -pCG -ybJ -pEE -xMw -xMw -uKu -gGM -xMw -psp -psp -ijK -psp -psp -psp -psp -psp -psp -ijK -ijK -uCd -ygG -ygG -ygG -bYg -val -sGh -les -uCd -bYg -uCd -uhj -uCd -bYg -uCd -bYg -ygG -bYg -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(89,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -cZM -gbA -gbA -gbA -gbA -cZM -cZM -mAN -sAP -cxQ -hML -cGj -cZM -qLT -qLT -fyR -qLT -qLT -xnA -wlB -xEM -jge -sFL -sFL -jbw -nLP -ybJ -kuA -igN -tyB -pVQ -uLI -xMw -psp -psp -ijK -psp -psp -psp -psp -psp -psp -ijK -ijK -uCd -uCd -uCd -ygG -uCd -les -qSX -les -uCd -ygG -ygG -ygG -ygG -ygG -bYg -uCd -ygG -uCd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(90,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -cqj -cqj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -cZM -eGB -eRR -cFs -hEf -cZM -cZM -cZM -cZM -cZM -cZM -cZM -cZM -psp -tWi -rTk -edR -edR -rGL -qTv -xEM -hDz -xWa -vBC -xEM -lHH -kuA -kuA -igN -tyB -pVQ -vfj -xMw -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -uCd -uCd -bYg -ygG -bYg -les -vbA -sMr -bYg -ygG -uCd -uCd -uCd -ygG -uCd -uCd -ygG -uhj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(91,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -cqj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -cZM -cZM -cZM -cZM -cZM -cZM -psp -psp -psp -psp -psp -psp -psp -rPA -pZz -rTk -qfT -jnQ -xnA -wlB -xMw -xMw -xMw -xMw -xMw -nuc -xMw -rcZ -xvf -xMw -xMw -xMw -xMw -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -uCd -uCd -uCd -ygG -uCd -sMr -axL -sMr -uCd -ygG -uCd -bYg -ygG -ygG -uCd -uCd -agr -uCd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(92,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -cqj -cqj -cqj -cqj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -bCk -qfT -rTk -rtP -rTk -jTR -szk -gfH -kup -iOI -xGj -wxa -nuf -omY -pVQ -wEi -uqn -xMw -xMw -xMw -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -uCd -uEy -uEy -mdM -uCd -uCd -ygG -uCd -uhj -ygG -uCd -uCd -uCd -ygG -uhj -uCd -ygG -bYg -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(93,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -fVL -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -psp -qfT -rTk -rTk -edR -eMP -mpf -gfH -hEa -hEa -pVQ -pVQ -lHH -cDx -xPH -xPH -uul -xMw -xMw -xMw -psp -psp -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -uCd -uEy -dsI -mdM -ygG -ygG -ygG -uCd -uCd -ygG -uCd -uCd -bYg -ygG -uCd -uCd -ygG -uCd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(94,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cqj -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -fVL -cqj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -gfH -hEa -hEa -pVQ -pVQ -lHH -cDx -xPH -xPH -pVQ -xMw -xMw -xMw -wiD -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -uCd -uEy -tTy -uEy -bYg -uCd -ygG -ygG -ygG -ygG -ygG -uCd -uCd -ygG -ygG -ygG -ygG -bYg -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(95,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -gfH -phf -jGc -iwt -kqy -nxn -oDm -sbV -pVQ -uAH -xMw -xMw -xMw -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -tTy -uEy -uEy -uEy -mdM -uEy -uCd -uCd -ygG -uCd -bYg -ygG -uEy -uEy -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(96,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -xMw -xMw -xMw -xMw -xMw -ofA -oIj -oIj -oIj -oIj -oIj -oIj -izo -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -uEy -lLj -tTy -uEy -uEy -uEy -tTy -mdM -dsI -uEy -uCd -ygG -ygG -uCd -uhj -ygG -uEy -tZr -mdM -jUW -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(97,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -gzv -hOO -hOO -izo -eAU -xqf -tsY -soM -soM -izo -hOO -izo -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -tTy -uEy -uEy -uEy -uEy -uEy -mdM -mdM -ygG -ygG -uCd -uCd -uCd -agr -uEy -mdM -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(98,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -sjk -dUy -dUy -eNd -dUy -eNd -eNd -dUy -dUy -dUy -sjk -dUy -dUy -eNd -dUy -dUy -dUy -eNd -dUy -eNd -sjk -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -ijK -psp -psp -psp -psp -psp -psp -psp -psp -uEy -tTy -tTy -uEy -dsI -dsI -dsI -dsI -dsI -uEy -mdM -uEy -uCd -uCd -bYg -ygG -uEy -mdM -mdM -jUW -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(99,1,1) = {" -psp -psp -psp -psp -psp -psp -gUR -oTy -oTy -oTy -eNd -nJP -vps -vva -pSV -biW -oTy -oTy -eNd -fgc -sjk -oTy -oTy -oTy -oTy -jhi -vva -tKp -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -tTy -uEy -tTy -uEy -tTy -uEy -tTy -uEy -dsI -uEy -uCd -uCd -uEy -uEy -uEy -mdM -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(100,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -dUy -oTy -oTy -oTy -oTy -vva -vva -vva -vva -vDx -oTy -oTy -oTy -oTy -oTy -oTy -oTy -vva -vDx -oTy -vva -dUy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -tTy -dsI -uEy -uEy -uEy -uEy -uEy -uEy -uEy -mdM -mdM -bYg -bYg -uEy -dsI -mdM -dsI -dsI -mdM -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(101,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -eNd -ieq -oTy -dUy -oTy -vDx -biW -oTy -vva -vva -cRO -dUy -oTy -sjk -fgc -oTy -oTy -oTy -oTy -oTy -oTy -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -tTy -uEy -uEy -uEy -dsI -dsI -dsI -dsI -dsI -uEy -uEy -uEy -uEy -mdM -uEy -uEy -uEy -dsI -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(102,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -eNd -biW -oTy -dUy -dUy -dUy -sjk -eNd -eNd -sjk -eNd -dUy -oTy -eNd -sjk -eNd -dUy -dUy -eNd -oTy -eNd -sjk -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -tTy -dsI -dsI -tTy -uEy -qof -uEy -tTy -uEy -mdM -dsI -mdM -dsI -mdM -dsI -dsI -dsI -uEy -dsI -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(103,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -eNd -vva -vDx -dUy -hLd -rES -fUu -eNd -csZ -dre -caF -sjk -oTy -eNd -rOD -dyt -oTy -eNd -oTy -sol -tKp -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -dsI -uEy -uEy -uEy -uEy -uEy -dsI -uEy -dsI -uEy -uEy -dsI -uEy -tTy -uEy -dsI -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(104,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -sjk -nOe -vva -oTy -fGA -aXI -oTy -eNd -bhD -vva -xHq -sNf -oTy -eNd -oTy -vDx -kmU -oTy -oTy -vva -rUn -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -dsI -uEy -uEy -uEy -uEy -uEy -dsI -uEy -qof -uEy -uEy -dsI -uEy -dsI -uEy -qof -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(105,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -sjk -vDx -tKu -eNd -iHl -hLd -dNi -eNd -oTy -sJD -vva -eNd -oTy -sjk -cRO -xWP -vva -dUy -oTy -oTy -xZA -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -tTy -dsI -uEy -tTy -tTy -uEy -dsI -uEy -uEy -uEy -tTy -dsI -uEy -tTy -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(106,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -dUy -vDx -biW -eNd -sjk -eNd -dUy -dUy -dUy -eNd -eNd -dUy -oTy -tKL -vva -vDx -vva -sjk -dUy -oTy -eNd -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -uEy -dsI -dsI -dsI -dsI -uEy -dsI -dsI -uEy -uEy -uEy -dsI -uEy -qof -uEy -qof -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(107,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -eNd -biW -oTy -sjk -wIh -biW -awX -biW -oTy -oTy -oTy -dUy -oTy -eNd -oTy -xWP -vva -eNd -oTy -oTy -cRO -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -dsI -uEy -dsI -uEy -uEy -dsI -dsI -dsI -uEy -uEy -uEy -dsI -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(108,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -sjk -oTy -oTy -oTy -vDx -vva -vva -vva -vva -vva -oTy -oTy -oTy -eNd -oTy -xWP -dyt -eNd -cRO -oTy -cRO -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -iQt -uEy -ttW -uEy -hht -uEy -uEy -dsI -uEy -dsI -uEy -uEy -uEy -lfg -uEy -dsI -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(109,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -dUy -oTy -oTy -sjk -qZR -biW -biW -vDx -hzN -biW -oTy -eNd -xHq -eNd -tNI -hYT -tKp -eNd -vva -vDx -oTy -sjk -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -qof -hht -hht -hht -hht -hht -uEy -uEy -dsI -uEy -dsI -uEy -hht -uEy -rgm -uEy -hht -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(110,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -dUy -dUy -eNd -dUy -eNd -dUy -eNd -sjk -eNd -eNd -eNd -sjk -oTy -dUy -dUy -eNd -eNd -eNd -vva -vva -tKp -sjk -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -hht -uEy -hht -uEy -lfg -uEy -dsI -dsI -dsI -dsI -dsI -hht -hht -hht -hht -hht -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(111,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -qVN -qVN -qVN -tQi -tQi -kbJ -tQi -uqe -uqe -uqe -qVN -oTy -oTy -tKp -sjk -eNd -eNd -eNd -sjk -eNd -eNd -eNd -sjk -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -dsI -hht -hht -uEy -rgm -uEy -uEy -uEy -uEy -uEy -uEy -uEy -dsI -uEy -hht -uEy -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(112,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -qVN -uqe -uqe -xGt -xGt -eaw -xGt -tRd -xGt -xGt -vOR -oTy -fgc -oTy -eNd -oTy -kHK -xZA -eNd -vAo -jYJ -tKp -sjk -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -dsI -uEy -qof -uEy -uEy -tTy -uEy -qof -uEy -ttW -uEy -qof -tTy -uEy -hht -lfg -lfg -ttW -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(113,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -cZM -cZM -psp -psp -psp -qVN -uqe -tQi -gVh -ciM -eaw -fsc -fsc -tQi -tRd -tQi -oTy -oTy -fgc -dUy -fgc -oTy -oTy -eNd -vDx -vDx -tKp -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -dsI -uEy -uEy -uEy -uEy -dsI -uEy -dsI -uEy -hht -uEy -uEy -lfg -uEy -hht -uEy -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(114,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -jyY -cZM -iUk -iUk -cZM -qVN -xGt -gVh -tRd -xGt -eaw -tRd -tRd -gVh -xGt -tQi -eNd -dUy -dUy -dUy -fgc -oTy -vJu -eNd -oTy -vva -bBd -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -uEy -hht -hht -hht -lfg -uEy -hht -uEy -uEy -dsI -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(115,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -jyY -cZM -cuH -jAn -jwk -tQi -xGt -fsc -xGt -tRd -eaw -tRd -tRd -djE -xvu -qVN -sjk -eNd -sjk -eNd -eNd -oTy -dUy -eNd -sjk -oTy -eNd -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -dsI -uEy -uEy -uEy -dsI -uEy -dsI -uEy -uEy -uEy -uEy -tTy -uEy -hht -uEy -qof -dsI -qof -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(116,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -jwk -bjG -prv -xIB -prv -xGt -pdL -pdL -pdL -pdL -iek -pdL -pdL -pdL -pdL -xGt -lKT -lKT -vva -oTy -oTy -oTy -oTy -oTy -vva -oTy -oTy -sjk -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -qof -dsI -dsI -uEy -dsI -uEy -dsI -uEy -dsI -uEy -uEy -dsI -dsI -dsI -uEy -hht -uEy -uEy -dsI -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(117,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -uFZ -iUk -jwk -aHg -uFZ -qVN -tRd -fsc -tRd -tRd -eaw -tRd -tRd -fsc -xGt -tQi -dUy -sRZ -dUy -eNd -eNd -oTy -dUy -dUy -eNd -fgc -sjk -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -dsI -uEy -tTy -uEy -dsI -uEy -dsI -dsI -tTy -dsI -uEy -dsI -uEy -dsI -uEy -qof -dsI -qof -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(118,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -cZM -cZM -iUk -iUk -iUk -qVN -tRd -gVh -xGt -tRd -eaw -tRd -scM -fsc -xGt -tQi -eNd -eNd -eNd -sjk -mAD -cRO -oTy -dUy -oTy -oTy -vva -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -qof -dsI -hht -dsI -dsI -dsI -dsI -uEy -dsI -uEy -uEy -uEy -uEy -dsI -uEy -dsI -uEy -uEy -dsI -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(119,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -qVN -tRd -tQi -djE -jEK -eaw -ciM -fsc -tQi -xGt -qVN -dUy -dUy -dUy -eNd -raa -vva -vva -eNd -oTy -oTy -jjV -sjk -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -hht -uEy -uEy -uEy -dsI -uEy -dsI -dsI -dsI -dsI -tTy -tTy -uEy -dsI -dsI -uEy -dsI -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(120,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -qVN -tRd -tRd -kTh -xGt -eaw -toA -xGt -uqe -uqe -qVN -dUy -dUy -dUy -eNd -jOr -kNA -tKp -sjk -xdF -xZA -oTy -eNd -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -rgm -hht -hht -hht -uEy -rgm -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -dsI -oBO -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(121,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -qVN -qVN -tQi -qVN -qVN -xGt -tQi -tQi -qVN -qVN -qVN -dUy -dUy -dUy -sjk -eNd -eNd -eNd -sjk -eNd -eNd -eNd -sjk -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -hht -hht -hht -hht -hht -uEy -uEy -uEy -uEy -dsI -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(122,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -vUx -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -hht -hht -hht -dsI -dsI -dsI -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(123,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -tTy -uEy -uEy -uEy -mdM -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(124,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -tRE -mdM -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(125,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -mhH -vlr -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -uEy -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(126,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(127,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(128,1,1) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} - -(1,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -poA -poA -poA -poA -hTQ -hTQ -goc -goc -goc -hTQ -hTQ -poA -poA -poA -poA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -ued -dEH -dEH -dEH -ued -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -jAy -"} -(2,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -poA -poA -poA -poA -hTQ -hTQ -sph -erG -jcR -hTQ -hTQ -poA -poA -poA -poA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -ued -dEH -dEH -dEH -ued -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(3,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -poA -poA -poA -hTQ -hTQ -hTQ -jcR -erG -sph -hTQ -hTQ -poA -poA -poA -poA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -ued -dEH -dEH -dEH -ued -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(4,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -poA -poA -poA -dEd -hTQ -hTQ -sph -erG -hTQ -hTQ -hTQ -hTQ -poA -poA -poA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -ued -dEH -dEH -dEH -ued -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(5,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -poA -poA -dEd -hTQ -hTQ -hTQ -hTQ -erG -opS -sph -hTQ -hTQ -poA -poA -poA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -ued -dEH -dEH -dEH -ued -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -sdU -sdU -sdU -sdU -sdU -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(6,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -poA -poA -hTQ -dEd -hTQ -sph -hTQ -erG -erG -hTQ -hTQ -hTQ -poA -poA -poA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -ued -dEH -dEH -dEH -ued -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -sdU -sdU -lUz -sdU -sdU -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(7,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -poA -poA -dEd -hTQ -hTQ -hTQ -sph -hTQ -erG -hTQ -hTQ -hTQ -hTQ -poA -poA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -opX -dEH -dEH -dEH -ued -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -sdU -sdU -wiR -sdU -sdU -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(8,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -poA -poA -dEd -hTQ -dEd -hTQ -hTQ -erG -ewu -sph -hTQ -hTQ -hTQ -hTQ -poA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -vRF -vRF -vRF -vRF -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -opX -dEH -dEH -dEH -mQB -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -sdU -sdU -wiR -wiR -sdU -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(9,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -poA -poA -hTQ -hTQ -hTQ -sph -erG -ewu -sph -hTQ -hTQ -hTQ -hTQ -hTQ -dEd -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -vRF -vRF -vRF -vRF -vRF -qJZ -vRF -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -rod -prU -opX -dEH -dEH -dEH -mQB -mQB -cjj -cjj -wdV -wdV -cjj -jlO -wdV -qGx -cjj -cjj -cjj -cjj -uTy -uTy -jNs -uFR -cjj -cjj -cjj -cjj -wdV -wdV -wdV -qGx -wdV -qGx -cjj -cjj -cjj -wdV -cjj -cjj -cjj -cjj -sdU -wiR -wiR -wiR -sdU -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -jaf -jaf -jaf -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -cZs -sNy -sNy -sNy -aRU -sNy -aRU -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(10,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -qGx -dEd -hTQ -hTQ -dEd -hTQ -hTQ -erG -hTQ -hTQ -hTQ -hTQ -hTQ -hTQ -hTQ -hTQ -wdV -wdV -wdV -wdV -qGx -cjj -cjj -cjj -cjj -cjj -vRF -vRF -fyl -whe -rmL -lXp -vRF -vRF -vRF -dVl -cjj -jRf -uMw -bXs -lif -prU -prU -opX -bTN -dEH -dEH -dEH -mQB -bXs -rta -qGx -oVT -wdV -oVT -qGx -jlO -wdV -cjj -cjj -tdl -kmf -ojw -kmf -pdG -cjj -cjj -qGx -iBi -wdV -qGx -wdV -wdV -qGx -wdV -wdV -wdV -wdV -qGx -wdV -qGx -bXs -lif -xed -etB -wPQ -kQF -ocX -lif -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -jaf -jaf -jaf -cZs -jaf -cZs -jaf -sNy -jaf -aRU -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -aRU -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(11,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -prU -prU -wdV -wdV -wdV -wdV -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -hTQ -hTQ -dEd -hTQ -lSd -hTQ -erG -opS -hTQ -sph -hTQ -hTQ -hTQ -hTQ -hTQ -qGx -wdV -qGx -wdV -wdV -qGx -cjj -cjj -cjj -cjj -vRF -oDM -ukr -rxF -vFC -vFC -kGw -rmL -vFC -aTV -vfX -wVn -bTC -bTC -bXs -bXs -rod -fRg -bTN -dEH -dEH -dEH -mQB -rod -qIo -wdV -oVT -wdV -oVT -wdV -oVT -wdV -wdV -wdV -tdl -lay -kmf -bXs -peo -sPP -cjj -wdV -wlM -wdV -wdV -qGx -pDj -wdV -wdV -wdV -qGx -wdV -www -www -wdV -wdV -wdV -nnc -oFv -lif -oSU -lif -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -jaf -jaf -jaf -cZs -sNy -cZs -sNy -cZs -sNy -aRU -sNy -aRU -sNy -sNy -sNy -cZs -cZs -cZs -cZs -cZs -cZs -sNy -sNy -sNy -sNy -cZs -sNy -aRU -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -cZs -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(12,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -prU -lcy -ahT -lcy -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -hTQ -hTQ -hTQ -hTQ -lSd -sph -ewu -ewu -sph -hTQ -hTQ -hTQ -hTQ -hTQ -hTQ -wdV -qGx -wdV -wdV -wdV -qGx -wdV -qGx -cjj -cjj -vRF -qwu -oDM -vFC -vFC -ksN -luN -vFC -oDM -vRF -wwa -cjj -kjb -lif -wdV -bXs -rod -prU -opX -dEH -dEH -dEH -mQB -bXs -wlM -wdV -oVT -wdV -wdV -www -oVT -qGx -wdV -wdV -uzs -tdl -rLE -prU -tdl -uzs -wdV -jlO -rta -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -www -www -www -www -www -iBi -bXs -xmv -wdV -bXs -qnw -wdV -wdV -qGx -bXs -cjj -cjj -cjj -cjj -qGx -jaf -jaf -jaf -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(13,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -lcy -bXs -sQX -ahT -lcy -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -hTQ -lSd -hTQ -hTQ -ewu -erG -hTQ -hTQ -hTQ -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -cjj -cjj -vRF -vRF -lbE -iJP -gtT -uZn -rmL -eFD -vRF -vRF -cjj -wdV -wdV -wdV -rod -bXs -wdV -prU -opX -dEH -dEH -dEH -mQB -khd -bXs -wdV -oVT -prU -wdV -www -oVT -wdV -oVT -wdV -wdV -prU -nAp -prU -prU -prU -qGx -iLu -wlM -wdV -wdV -wdV -wdV -wdV -qGx -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -lay -wdV -duq -wdV -wdV -qnw -www -www -www -qGx -www -qGx -wdV -qGx -qGx -jaf -jaf -jaf -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -sNy -cZs -cZs -cZs -cZs -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(14,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -uzs -tdl -tdl -uzs -bXs -uzs -tdl -tdl -uzs -wdV -wdV -wdV -fgY -evt -evt -wdV -fgY -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -hTQ -lSd -lSd -hTQ -hTQ -erG -sph -hTQ -hTQ -wdV -wdV -wdV -wdV -wdV -qGx -wdV -wdV -qGx -wdV -wdV -qGx -qGx -cjj -vRF -vRF -vRF -aTF -vRF -vRF -vRF -vRF -cjj -rod -gvS -gvS -gvS -wdV -iwo -wdV -rod -opX -dEH -dEH -dEH -kas -khd -wdV -wdV -iVi -wdV -oVT -www -oVT -wdV -oVT -wdV -oVT -prU -bXs -uTy -bXs -nAp -bXs -snE -prU -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -prU -prU -prU -wdV -wdV -wlM -wdV -lif -uTy -wdV -qnw -wdV -qnw -www -wdV -www -wdV -qGx -wdV -qGx -jaf -jaf -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(15,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -uzs -uzs -mbT -vju -tdl -bXs -tdl -fTx -oMj -uzs -uzs -wdV -wdV -evt -wdV -wdV -wdV -evt -wdV -wdV -wdV -wdV -wdV -fgY -wdV -evt -wdV -fgY -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -wdV -nAp -uTy -wdV -wdV -www -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qGx -wdV -cjj -vRF -vRF -vRF -vRF -vRF -vRF -vRF -wdV -wdV -rod -ptr -wdV -bXs -rLn -kjb -ptr -opX -dEH -dEH -dEH -mQB -rEI -wdV -wdV -www -wdV -oVT -www -oVT -wdV -oVT -wdV -oVT -wdV -oVT -prU -prU -prU -uTy -bXs -prU -wdV -wdV -prU -prU -prU -wdV -pDj -wdV -wdV -prU -prU -prU -wdV -wdV -wlM -lif -xXs -wdV -bXs -qnw -qnw -qnw -vKe -www -vKe -www -wdV -wdV -bXs -jaf -jaf -sNy -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -cZs -cZs -cZs -cZs -cZs -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(16,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -ahT -lcy -wdV -tdl -eAp -lNb -ghM -uzs -bXs -tdl -iEP -dBy -iEP -tdl -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -evt -wdV -wdV -wdV -evt -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -wdV -prU -uTy -prU -wdV -wdV -wdV -vKe -wdV -wdV -wdV -wdV -wdV -wdV -qGx -wdV -wdV -qGx -wdV -wdV -qGx -cjj -cjj -cjj -cjj -wdV -wdV -wdV -rod -bXs -bXs -bXs -bXs -bXs -bXs -abk -ptr -rod -mQB -dEH -dEH -dEH -mQB -bXs -ocQ -wdV -vIR -wdV -oVT -www -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -snE -wdV -prU -bXs -uFR -wdV -wdV -prU -prU -prU -prU -wdV -wdV -wdV -wdV -prU -prU -wdV -wdV -iBi -lif -wdV -lif -wdV -qnw -qnw -qnw -www -wdV -vKe -qGx -www -qGx -cjj -jaf -jaf -jaf -cZs -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(17,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -nuo -bXs -wdV -tdl -dLu -ugc -kEI -pRT -sCW -tdl -hOB -iEP -iEP -tdl -wdV -wdV -evt -wdV -wdV -wdV -bXs -rod -bXs -iNQ -wdV -wdV -evt -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -bXs -wdV -uTy -prU -rod -bXs -wdV -vKe -www -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qGx -wdV -wdV -wdV -www -www -oqp -bXs -bXs -wVn -wdV -rod -prU -jRf -lif -rod -prU -mQB -dEH -dEH -dEH -mQB -rod -iBi -wdV -oVT -wdV -oVT -www -www -wdV -nAp -arN -snE -wdV -snE -wdV -snE -prU -vew -bXs -iBi -wdV -wdV -wdV -prU -prU -prU -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -uTy -wdV -bXs -qnw -qnw -wdV -www -qGx -vKe -vKe -www -wdV -cjj -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -cZs -cZs -cZs -cZs -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(18,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uzs -uzs -uzs -prU -lcy -ahT -sQX -uzs -uzs -vdB -dIc -uzs -czc -uzs -uzs -nfz -uzs -uzs -wdV -wdV -fgY -wdV -wdV -iNQ -bXs -bXs -rod -wdV -wdV -wdV -wdV -wdV -wdV -wdV -evt -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -bXs -nAp -uTy -prU -bXs -bXs -bXs -bXs -www -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qGx -wdV -wdV -wdV -prU -prU -wdV -wdV -qHo -bXs -rod -rod -hZM -kCS -rQE -gvS -vew -prU -prU -mQB -bTN -dEH -dEH -uic -lif -bXs -wdV -oVT -wdV -oVT -www -vIR -wdV -oVT -wdV -oVT -wdV -oVT -wdV -snE -bXs -bXs -bXs -wlM -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -prU -nba -prU -wdV -lay -lif -uTy -wdV -bXs -vIR -vIR -prU -www -wdV -vKe -vKe -qGx -wdV -cjj -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(19,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uzs -jav -nfz -nAp -nAp -uTy -xEi -lcy -uzs -tdl -tdl -uzs -bXs -wVn -wON -uTy -nAp -bXs -bXs -wdV -wdV -wdV -bXs -rod -iNQ -bXs -bXs -iNQ -wdV -wdV -fgY -evt -wdV -evt -bAA -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -qnw -wdV -bXs -uTy -lif -bXs -bXs -rod -bXs -wdV -www -vKe -vKe -www -wdV -wdV -wdV -wdV -wdV -wdV -wdV -lif -wdV -www -www -prU -prU -wdV -wdV -rod -qls -prU -wdV -pdc -rQE -prU -wdV -vew -qHo -mQB -mQB -bTN -dEH -dEH -dXN -dXN -ldZ -wdV -rQE -wdV -wdV -www -oVT -wdV -vIR -wdV -oVT -wdV -oVT -wdV -snE -uTy -wdV -prU -ouU -wdV -wdV -pDj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -prU -prU -prU -wdV -iBi -wdV -bXs -lif -wdV -vIR -vIR -prU -rQE -wdV -www -www -wdV -cjj -cjj -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -cZs -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(20,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uzs -uzs -uzs -ahT -lcy -ahT -bXs -uTy -uTy -nAp -bXs -nAp -uTy -rJN -nAp -nAp -nAp -uTy -bXs -wdV -wdV -wdV -bXs -bXs -bXs -rod -bXs -wdV -wdV -wdV -wdV -wdV -wdV -prU -prU -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -wdV -bXs -uTy -uTy -bXs -rod -bXs -bXs -rod -bXs -bXs -bXs -wdV -www -www -lif -lif -wdV -qnw -wdV -qnw -lif -wdV -wdV -rQE -qnw -vIR -qnw -qnw -wdV -wVn -rod -wdV -wdV -qnw -qnw -wdV -wdV -wdV -dXN -cEi -pYg -dEH -dEH -xtX -cEi -ggn -lif -bXs -xmz -avq -lif -kBD -wdV -prU -prU -oVT -wdV -wdV -wdV -prU -bXs -bXs -bXs -ocQ -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -prU -wdV -wdV -wlM -uTy -wdV -xEi -bXs -qnw -qnw -wdV -www -prU -www -www -wdV -cjj -jaf -jaf -cZs -jaf -sNy -jaf -jaf -jaf -jaf -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(21,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -prU -wdV -uzs -tdl -tdl -uzs -bXs -bXs -tPK -lzl -nAp -nAp -uTy -sbb -nAp -nAp -wdV -wdV -bXs -rod -bXs -bXs -bXs -lif -kjb -lif -wdV -kxd -wdV -wdV -prU -prU -prU -wdV -wdV -wdV -wdV -qnw -wdV -wdV -wdV -bXs -uTy -uTy -bXs -bXs -rod -bXs -bXs -bXs -rod -wdV -wdV -www -vKe -wdV -wdV -lif -bXs -bXs -qnw -bXs -lif -qnw -qnw -qnw -lif -uTy -bXs -uTy -uTy -uTy -uTy -uTy -nAp -nAp -uTy -uTy -uTy -fMX -mRp -mRp -wXm -kWe -mRp -mRp -nfW -nAp -uTy -uTy -nAp -jlO -bXs -bXs -ocQ -voP -lif -wNu -wRs -voP -wNu -prU -bXs -uFR -ouU -wdV -wdV -qnw -qnw -qnw -qnw -qnw -qnw -wdV -qnw -qnw -wdV -wdV -wdV -wlM -prU -bXs -nAp -wdV -qnw -qnw -wdV -www -prU -rQE -www -wdV -cjj -jaf -sNy -aRU -sNy -jaf -cjj -cjj -cjj -cjj -jaf -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(22,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -uzs -uzs -izd -bSo -uzs -uzs -bXs -tri -jwm -uTy -jDf -mUz -jFP -uTy -uTy -nAp -rIo -bXs -iNQ -bXs -lif -dwS -uTy -nAp -bXs -bXs -wdV -wdV -kxd -wdV -wdV -prU -wdV -wdV -wdV -wdV -qnw -wdV -wdV -bXs -bXs -bXs -uTy -nAp -bXs -bXs -bXs -rod -bXs -wdV -qnw -qnw -qnw -qnw -wdV -wdV -lif -wdV -lif -bXs -bXs -bXs -lif -wdV -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -uTy -uTy -uTy -uTy -nAp -nAp -sFB -sFB -mRp -mRp -dEH -mRp -mRp -fMX -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -uTy -uTy -nAp -jlO -wdV -prU -bXs -prU -voP -nPx -nPx -wNu -lay -lif -qnw -qnw -qnw -qnw -qud -avq -lay -voP -voP -rta -uTy -bXs -xXs -lif -wdV -wdV -wdV -www -prU -rQE -www -wdV -cjj -jaf -jaf -sNy -jaf -jaf -cjj -cjj -xgK -cjj -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(23,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -tdl -hBb -jWp -iEP -iEP -nfz -nAp -bXs -bXs -uTy -jRb -rQl -fie -bXs -uTy -dgN -nAp -lzl -dgN -lzl -nAp -kjb -bXs -lif -mWp -aKZ -uTy -nAp -bXs -nuo -lif -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -bXs -rod -bXs -lif -uTy -nAp -lif -bXs -stC -bXs -bXs -rod -bXs -rod -bXs -bXs -www -qnw -qnw -lif -bXs -lif -bXs -uTy -uTy -nAp -nAp -uTy -nAp -lif -wdV -lif -lif -wdV -bXs -bXs -wdV -bXs -bXs -fMX -cEi -sbX -rMJ -kWe -hOH -cEi -mQB -lif -lif -lif -nAp -uTy -uTy -uTy -uTy -uTy -uTy -rod -bXs -uTy -uTy -nAp -bXs -bXs -bXs -uTy -uTy -nAp -bXs -bXs -bXs -bXs -nAp -nAp -nAp -uTy -uTy -uTy -uTy -uTy -nAp -nAp -bXs -wdV -gFp -gFp -wdV -www -prU -rQE -www -wdV -cjj -jaf -sNy -aRU -sNy -jaf -cjj -lif -uTy -cjj -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(24,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -tdl -uQN -iEP -iEP -dOd -uzs -qqM -uTy -dJz -bXs -nyp -jRb -foO -nAp -uTy -wdV -wdV -khr -lif -lif -bXs -bXs -lif -jMn -bXs -bXs -ptr -bXs -bXs -uTy -nAp -lif -wdV -wdV -wdV -wdV -wdV -wdV -qnw -bXs -bXs -bXs -rod -bXs -nAp -nAp -lif -lif -lif -lif -bXs -lif -bXs -lif -bXs -lif -lif -lif -bXs -uTy -uTy -nAp -uTy -uTy -uTy -bXs -uTy -bXs -wdV -bXs -lif -wdV -bXs -wdV -qnw -qnw -kxd -lif -dXN -mQB -mQB -ryU -dEH -wXm -mQB -mQB -rod -bXs -bXs -lif -bXs -lif -lif -bXs -nAp -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -uTy -nAp -nAp -uTy -uTy -nAp -bXs -gFp -gFp -gFp -www -wdV -www -www -wdV -cjj -cjj -jaf -sNy -jaf -jaf -cjj -lif -uTy -cjj -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(25,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -uzs -uzs -xNu -dBy -uzs -uzs -bXs -bXs -tDz -bXs -uTy -nAp -bXs -nAp -bXs -bXs -wdV -bXs -rod -bXs -bXs -rod -bXs -bXs -wdV -wdV -wdV -wdV -bXs -bXs -uTy -nAp -lif -wdV -wdV -wdV -wdV -qnw -qnw -wdV -bXs -rod -stC -bXs -doi -nAp -uTy -uTy -uTy -uTy -nAp -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -uTy -uTy -uTy -uTy -lif -lif -wdV -bXs -lSv -wdV -bXs -wdV -iBi -wNu -nPx -rta -hZn -voP -nPx -nPx -wNu -rod -mQB -dEH -dEH -kas -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -rod -lif -bXs -bXs -lif -lif -bXs -bXs -lif -lif -bXs -bXs -nAp -bXs -bXs -lif -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -xbY -nAp -uTy -bXs -gFp -gFp -gFp -www -wdV -www -www -wdV -bXs -cjj -jaf -jaf -jaf -jaf -lif -lif -nAp -cjj -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(26,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -uzs -tdl -tdl -uzs -lcy -bXs -bXs -uTy -nAp -nAp -nAp -nAp -nAp -bXs -wdV -wdV -bXs -bXs -bXs -bXs -bXs -bXs -wdV -wdV -wdV -wdV -wdV -prU -lif -bXs -uTy -bXs -wdV -wdV -qnw -wdV -qnw -qnw -qnw -bXs -bXs -bXs -rod -sRK -uTy -nAp -bVh -nAp -nAp -uTy -uTy -nAp -nAp -uTy -nAp -nAp -uTy -uTy -lif -bXs -bXs -lif -qnw -qnw -qnw -wdV -bXs -wBm -wdV -wdV -ouU -wdV -lif -bXs -oOw -bXs -lif -lif -wdV -www -opX -dEH -dEH -mQB -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -rod -bXs -uTy -lif -lif -bXs -bXs -bXs -rod -lif -bXs -lif -doi -fFz -nAp -uTy -lif -gFp -gFp -gFp -www -wdV -www -vKe -www -wdV -bXs -cjj -cjj -cjj -bXs -rod -xXs -nAp -lif -cjj -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -cZs -jaf -sNy -jaf -ahS -nXA -nXA -ahS -sNy -jaf -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(27,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -lcy -lcy -bXs -nAp -bXs -bXs -nAp -uTy -bXs -bXs -bXs -evt -wdV -fgY -wdV -bXs -rod -bXs -rod -wdV -wdV -wdV -prU -wdV -wdV -wdV -lif -bXs -bXs -wdV -wdV -qnw -wdV -wdV -qnw -qnw -rod -bXs -bXs -tJr -lif -fFz -nAp -uTy -cJy -lif -bXs -bXs -lif -lif -lHh -avq -qud -avq -bXs -wdV -bNF -voP -bNF -lay -wdV -voP -wdV -bXs -hca -wdV -wdV -ouU -lif -jLu -bXs -lif -bXs -bXs -lif -wdV -www -xqZ -dEH -dEH -mQB -rod -bXs -voP -rta -voP -voP -bXs -voP -voP -voP -voP -voP -voP -voP -voP -voP -rta -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -lif -lif -lif -tdl -tdl -tdl -uzs -bXs -nAp -uTy -bXs -gFp -gFp -gFp -www -wdV -rQE -kCS -rQE -wdV -bXs -lif -cjj -bXs -bXs -lif -nAp -uTy -rod -cjj -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -jaf -jaf -nXA -nXA -nXA -sNy -sNy -cZs -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(28,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -uzs -tdl -tdl -nfz -uzs -vuk -uzs -tdl -tdl -nfz -uzs -bXs -wdV -wdV -evt -wdV -wdV -bXs -bXs -iNQ -wdV -wdV -prU -prU -prU -wdV -wdV -wdV -bXs -uTy -lif -wdV -qnw -qnw -wdV -wdV -qnw -bXs -bXs -rod -bXs -rod -uTy -nAp -uTy -oqX -bNF -rta -bXs -rod -bXs -wdV -wdV -wdV -wdV -lay -qnw -qnw -qcp -qnw -qnw -qnw -www -jXo -kkJ -bXs -wdV -bXs -ouU -bXs -kjb -bXs -bXs -bXs -lif -wdV -wdV -www -opX -bTN -dEH -mQB -mQB -rod -lif -bXs -bXs -rod -bXs -lif -lif -lif -lif -lif -lif -rod -lif -lif -khd -voP -lif -rta -wNu -voP -voP -ocQ -voP -voP -nPx -wNu -hxl -tdl -sPP -iEP -nAp -tdl -lif -uTy -uTy -bXs -gFp -gFp -gFp -www -wdV -rQE -kCS -rQE -www -prU -lif -bXs -bXs -rod -bXs -uTy -uTy -lif -cjj -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -sNy -eEa -eEa -oqz -eEa -cZs -jaf -sNy -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(29,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -tdl -dBy -iEP -iEP -tdl -bXs -tdl -dBy -hRk -iEP -tdl -bXs -wdV -wdV -wdV -wdV -wdV -bXs -rod -wdV -iNQ -wdV -wdV -prU -wdV -wdV -qnw -wdV -wdV -nAp -bXs -lif -wdV -qnw -wdV -wdV -qnw -bXs -bXs -bXs -rod -lif -uTy -nAp -lif -iBi -stC -bXs -bXs -bXs -wdV -wdV -qcp -wdV -vIR -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -wlM -pqk -wiz -www -qIo -lif -bXs -lif -bXs -bXs -oWg -wdV -wdV -pxa -opX -bTN -dEH -dEH -mQB -pVa -lif -lif -sTM -lif -bXs -bXs -rod -bXs -bXs -lif -lif -kLI -bXs -rod -khd -tPK -bXs -rod -bXs -lif -lif -nAp -bXs -lif -bXs -rod -lif -lHe -iEP -iEP -lif -bXs -bXs -nAp -uTy -lif -gFp -gFp -gFp -www -wdV -rQE -kCS -rQE -vKe -rQE -wdV -bXs -bXs -bXs -lif -uTy -xEi -bXs -bXs -jaf -jaf -cZs -sNy -sNy -sNy -cZs -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -jaf -ahS -nXA -nXA -ahS -sNy -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(30,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -tdl -cwB -hkU -oMj -tdl -lcy -tdl -ehP -iEP -dBy -tdl -bXs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -wdV -bXs -uTy -nAp -bXs -qnw -qnw -wdV -www -qnw -bXs -rod -bXs -oOm -uTy -nAp -khd -bXs -rod -bXs -rod -bXs -wdV -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -www -tBe -cxi -lSv -wdV -qtg -bXs -bXs -bXs -bXs -bXs -oOw -wdV -wdV -ptr -opX -mQB -dEH -dEH -mQB -pVa -lif -lif -lif -rod -bXs -bXs -bXs -bXs -rod -bXs -rod -bXs -xZg -xZg -khd -rod -bXs -qGx -bXs -rod -bXs -iNQ -lif -bXs -lif -bXs -lif -lHe -wiI -iEP -iEP -tdl -bXs -bXs -uTy -bXs -gFp -gFp -gFp -www -www -vKe -vKe -wdV -www -rQE -prU -bXs -bXs -bXs -rod -uTy -bXs -bXs -rod -jaf -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(31,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -uzs -tdl -tdl -tdl -uzs -wdV -sPP -oMj -oMj -oMj -uzs -evt -evt -evt -fgY -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -wdV -wdV -bXs -uTy -lif -qnw -qnw -wdV -qnw -qnw -bXs -bXs -rod -bXs -uTy -uTy -bXs -rod -xEi -bXs -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -lay -wdV -bXs -bXs -lif -jBh -oOw -lif -lif -oWg -wdV -wdV -ptr -www -wdV -mQB -dEH -dEH -kas -pVa -bXs -kLI -lif -bXs -iNQ -bXs -bXs -bXs -wNi -bXs -lif -xZg -lif -lif -khd -bXs -qGx -qGx -oOw -bXs -bXs -bXs -bXs -lif -bXs -tlC -bXs -lif -sPP -iEP -bXs -lHe -bXs -lif -uTy -lif -gFp -gFp -sRR -www -www -vKe -vKe -wdV -www -www -prU -bXs -rod -bXs -bXs -uTy -lif -bXs -lif -jaf -jaf -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(32,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -uzs -tdl -tdl -tdl -uzs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -wdV -qnw -wdV -bXs -nAp -bXs -wdV -qnw -wdV -qnw -qnw -rod -bXs -bXs -rod -uTy -uTy -bXs -bXs -lif -rod -oVT -wdV -oVT -wdV -xEi -arN -snE -wdV -oVT -wdV -vIR -wdV -oVT -wdV -oVT -wdV -wdV -wdV -wdV -ptm -hvy -raQ -lif -bXs -wdV -wdV -ptr -wdV -wdV -www -wdV -kas -dEH -dEH -mQB -mQB -bXs -rod -bXs -bXs -bXs -bXs -rod -bXs -rod -oOw -bXs -bXs -rod -rod -khd -lif -bXs -lif -bXs -bXs -iNQ -bXs -hcY -bXs -iNQ -bXs -qGx -uzs -tdl -tdl -tdl -uzs -lif -nAp -uTy -bXs -gFp -gFp -sRR -prU -wdV -www -vKe -www -vKe -vKe -prU -lif -bXs -bXs -bXs -uTy -xEi -bXs -bXs -jaf -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(33,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -bXs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -wdV -qnw -wdV -bXs -tJr -nAp -lif -wdV -wdV -qnw -qnw -bXs -bXs -bXs -lif -nAp -uTy -lif -bXs -bXs -bXs -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -www -www -wdV -wdV -tUZ -oay -wiz -poE -wdV -wdV -wdV -wdV -wdV -ptr -vKe -www -opX -dEH -dEH -dEH -mQB -bXs -bXs -rod -bXs -rod -nAp -nAp -bXs -bXs -bXs -bXs -rod -lif -lif -khd -tPK -bXs -rod -qGx -bXs -iNQ -bXs -bXs -bXs -bXs -gko -lif -bXs -tPK -lif -jGY -bXs -rod -uTy -uTy -lif -gFp -gFp -gFp -rQE -www -vKe -brh -www -www -vKe -wdV -wdV -bXs -bXs -rod -nAp -uTy -gvS -bXs -jaf -jaf -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jaf -jaf -sNy -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(34,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -bXs -bXs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -wdV -bXs -uTy -lif -wdV -wdV -qnw -vKe -qnw -wdV -bXs -lif -nAp -uTy -lif -rod -oVT -wdV -vIR -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -vIR -bXs -bXs -bXs -bXs -bXs -bXs -iWf -wfT -gNJ -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -opX -dEH -dEH -dEH -mEv -lif -bXs -bXs -nAp -moR -uTy -moR -nAp -bXs -rod -bXs -bXs -ner -bXs -rta -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -nAp -bXs -bXs -iNQ -bXs -lif -xZg -wlM -bXs -lif -uTy -uTy -bXs -bXs -wdV -wdV -prU -rQE -www -vKe -wdV -prU -rQE -wdV -wdV -bXs -rod -bXs -lif -uTy -xEi -bXs -jaf -jaf -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jaf -jaf -jaf -sNy -jaf -sNy -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(35,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -bXs -wdV -wdV -wdV -prU -prU -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -nAp -bXs -lif -wdV -qnw -vKe -qnw -bXs -bXs -bXs -nAp -uTy -lif -bXs -oVT -wdV -oVT -wdV -oVT -wdV -vIR -wdV -oVT -wdV -oVT -wdV -oVT -wdV -bXs -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -mqb -mqb -mqb -mqb -gbo -lif -lif -bXs -iAT -igK -pXy -lkC -nAp -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -iNQ -bXs -hcY -bXs -oOw -bXs -nAp -bXs -bXs -bXs -lif -iNQ -lif -wlM -rod -bXs -uTy -nAp -lif -bXs -bXs -wdV -wdV -rQE -www -vKe -wdV -prU -kCS -www -www -wdV -bXs -bXs -bXs -uTy -uTy -bXs -jaf -jaf -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -ahS -jaf -ahS -sNy -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(36,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -bXs -bXs -bXs -bXs -lif -prU -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -bXs -uTy -nAp -wdV -wdV -bXs -bXs -lif -lif -nAp -uTy -uTy -lif -bXs -oVT -wdV -oVT -wdV -oVT -wdV -vIR -wdV -oVT -wdV -vIR -wdV -oVT -wdV -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -bXs -rod -nAp -nAp -ksW -wwH -xXE -uTy -nAp -bXs -bXs -iNQ -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -uTy -bXs -bXs -oJQ -bXs -bXs -bXs -tlC -wlM -lif -bXs -uTy -nAp -bXs -bXs -rod -wdV -wdV -www -www -vKe -wdV -wdV -www -wdV -wdV -wdV -bXs -bXs -rod -nAp -uTy -bXs -bXs -cjj -cjj -cjj -cjj -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -ahS -sNy -jaf -ahS -jaf -sNy -jaf -neY -ahS -sNy -jaf -ahS -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(37,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -lif -lif -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -ptr -dgp -jkQ -uTy -lif -bXs -bXs -lif -bXs -nAp -uTy -uTy -nAp -lif -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -qnw -wdV -qnw -bXs -bXs -xDL -xDL -xXs -bXs -bXs -lif -pqk -gSV -ruw -gSV -lif -bXs -lif -bXs -bXs -lif -bXs -lif -xEi -ruw -xEi -xDL -xDL -xEi -lif -lif -moR -wkk -pXy -bXD -moR -nAp -bXs -rod -bXs -bXs -lif -bXs -tlC -bXs -bXs -uTy -iNQ -bXs -bXs -bXs -jGG -bXs -bXs -bXs -bXs -bXs -lif -lFC -bXs -lif -uTy -lif -bXs -bXs -bXs -wdV -wdV -www -www -vKe -wdV -wdV -www -wdV -wdV -wdV -bXs -bXs -bXs -lif -uTy -bXs -rod -lif -cjj -bXs -cjj -cjj -jaf -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -aat -sNy -tMe -czh -aat -czh -oDK -sNy -aat -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(38,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -bXs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wYX -xEJ -fFz -uTy -uTy -bXs -bXs -bXs -nAp -uTy -uTy -nAp -lif -bXs -wdV -oVT -wdV -oVT -wdV -oVT -wdV -oVT -wdV -vIR -bXs -bXs -bXs -bXs -bXs -xDL -xDL -xDL -bXs -fSZ -fSZ -fSZ -fSZ -fSZ -fSZ -fSZ -fSZ -vek -sNz -sNz -sNz -sNz -sNz -sNz -sNz -opK -lif -xDL -xDL -xDL -xDL -gvS -bXs -nAp -nAp -uTy -nAp -bXs -rod -bXs -bXs -rod -xZg -ocQ -lif -iNQ -hcY -bXs -nAp -bXs -bXs -bXs -gko -bXs -bXs -bXs -iNQ -bXs -bXs -ocQ -bXs -bXs -uTy -nAp -bXs -bXs -bXs -bXs -wdV -vKe -vKe -brh -wdV -wdV -www -wdV -wdV -wdV -bXs -bXs -bXs -bXs -nAp -nAp -bXs -lif -cjj -rod -cjj -tQJ -cjj -jaf -jaf -jaf -jaf -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -ahS -jaf -sNy -mKj -nQu -mKj -sNy -jaf -sNy -jaf -ahS -psp -psp -psp -psp -psp -psp -"} -(39,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -bXs -bXs -qnw -wdV -wdV -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -qnw -wdV -wdV -ddL -grn -mGz -hqY -uTy -uTy -uTy -uTy -uTy -uTy -lif -lif -qnw -qnw -wdV -oVT -wdV -vIR -wdV -vIR -wdV -oVT -wdV -bXs -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -bXs -fSZ -ldB -dZq -vyV -dZq -ibl -xkE -fSZ -ueO -bNE -xPD -xlV -xlV -uZe -tSA -dsq -ueO -bXs -xEi -xDL -xDL -xDL -xDL -xEi -bXs -moR -nAp -rod -bXs -iNQ -lif -bXs -lif -lif -tBe -bXs -lif -bXs -lif -bXs -bXs -bXs -bXs -bXs -hcY -bXs -bXs -bXs -iNQ -lif -wlM -bXs -bXs -uTy -uTy -lif -rod -bXs -bXs -bXs -wdV -prU -rQE -www -www -brh -vKe -www -www -bXs -bXs -rod -rod -lif -uTy -bXs -bXs -cjj -bXs -lif -tQJ -cjj -tQJ -jyv -tQJ -cjj -cjj -cjj -cjj -cjj -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -ucT -lMe -ucT -sNy -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(40,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -bXs -qnw -wdV -wdV -wdV -qnw -wdV -qnw -wdV -wdV -wdV -qnw -wdV -wdV -wdV -qnw -wdV -wYX -kDH -tfH -dew -uTy -uTy -uTy -uTy -uTy -nAp -lif -qnw -qnw -qnw -qnw -wdV -vIR -wdV -wdV -wdV -vIR -wdV -bXs -bXs -lif -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xXs -bXs -fSZ -fhi -dZq -wAB -dZq -wAB -xkE -fSZ -mpt -xlV -xlV -xlV -xlV -qjp -dsq -qbM -ueO -bXs -bXs -bXs -xEi -xDL -xDL -xDL -bXs -rod -bXs -bXs -rod -lif -lif -rod -nHS -lif -rta -rod -bXs -bXs -lif -bXs -bXs -hcY -nAp -bXs -bXs -bXs -bXs -bXs -bXs -vJQ -wlM -bXs -bXs -uTy -uTy -lif -bXs -bXs -bXs -bXs -wdV -prU -prU -wdV -wdV -www -vKe -rQE -rQE -wdV -bXs -bXs -bXs -bXs -uTy -bXs -rod -bXs -bXs -lif -lif -bXs -bXs -tQJ -tQJ -tQJ -jyv -jyv -cjj -cjj -jaf -jaf -jaf -sNy -jaf -sNy -jaf -sNy -ucT -ucT -ucT -sNy -jaf -sNy -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(41,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -bXs -wdV -prU -wdV -wdV -qnw -wdV -prU -prU -wdV -wdV -wdV -prU -prU -prU -wdV -wdV -tfH -vIO -hij -nAp -lif -bXs -bXs -lif -rod -bXs -bXs -qnw -vIR -vIR -qnw -wdV -wdV -wdV -bXs -bXs -lif -bXs -bXs -lif -xDL -xDL -xDL -lif -bXs -bXs -bXs -bXs -bXs -bXs -fSZ -faa -dZq -wAB -wAB -dZq -dZq -mmm -ueO -ueO -xlV -xlV -xlV -vek -tAs -sNz -tjp -xcg -xcg -cMu -bXs -nAp -xDL -xDL -xEi -xEi -lif -lif -lif -uzs -tdl -bXs -tdl -uzs -khd -tPK -bXs -bXs -gvS -bXs -bXs -bXs -uTy -bXs -bXs -bXs -bXs -rod -bXs -lif -wlM -bXs -lif -uTy -uTy -lif -bXs -bXs -bXs -rod -bXs -lif -bXs -bXs -bXs -wdV -www -rQE -rQE -prU -bXs -bXs -bXs -rod -uTy -bXs -bXs -bXs -rod -bXs -lif -bXs -bXs -bXs -jyv -iVM -tQJ -tQJ -jyv -jyv -jaf -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(42,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -wdV -qnw -lif -nAp -nAp -prU -prU -wdV -prU -nAp -nAp -nAp -nAp -uTy -nAp -uTy -lif -uTy -uTy -agk -xEJ -diQ -lif -rod -bXs -rod -lif -lif -lif -qnw -qnw -vIR -vIR -vIR -qnw -wdV -bXs -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -lif -lif -feV -feV -feV -mbn -feV -mbn -feV -nFQ -wAB -wAB -wAB -dZq -xkE -fSZ -ueO -xlV -xlV -xlV -xlV -ueO -ecK -ecw -frf -tQC -kuQ -cMu -cMu -bXs -xDL -xDL -xDL -xDL -xDL -xDL -nAp -tdl -bXs -bXs -uTy -tdl -khd -bXs -qGx -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -bXs -bXs -bXs -uTy -uTy -uTy -bXs -rod -rod -bXs -bXs -bXs -bXs -rod -bXs -bXs -wdV -prU -prU -prU -bXs -bXs -bXs -bXs -uTy -bXs -bXs -rod -bXs -uTy -nAp -bXs -nAp -iVM -iVM -iVM -iVM -iVM -tQJ -jyv -jaf -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(43,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -wdV -wdV -qnw -wdV -qnw -wdV -qnw -nAp -nAp -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -bXs -bXs -rod -hcY -qHo -bXs -bXs -rod -rod -lif -gvS -bXs -qnw -qnw -vIR -vIR -qnw -qnw -wdV -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -lif -fgY -bXs -mbn -dsW -nTe -nTe -nTe -nTe -mbn -wYZ -dZq -dZq -dZq -wAB -xkE -fSZ -ueO -bNE -bNE -bNE -bNE -ueO -ecK -uaI -iJK -tQC -mhm -xlV -dJa -bXs -xEi -xDL -xDL -xDL -xDL -xDL -xDL -tpB -tpB -kmf -iEP -uzs -khd -bXs -rod -bXs -iNQ -bXs -bXs -nAp -bXs -bXs -jkv -oOw -bXs -bXs -bXs -gko -lFC -gvS -lif -uTy -uTy -uTy -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -rod -bXs -nAp -bXs -rod -bXs -nAp -bXs -bXs -bXs -bXs -bXs -iVM -iVM -iVM -jyv -tQJ -tQJ -jaf -jaf -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(44,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uzs -sdU -sdU -uzs -sdU -sdU -sdU -uzs -cjj -cjj -cjj -bXs -wdV -wdV -wdV -qnw -wdV -qnw -wdV -wdV -nAp -uTy -uTy -prU -wdV -prU -wdV -prU -wdV -prU -prU -wdV -prU -wdV -prU -wdV -bXs -rod -lif -rod -bXs -rod -bXs -bXs -rod -bXs -bXs -qnw -qnw -qnw -qnw -qnw -qnw -wdV -bXs -xDL -xDL -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -feV -erc -nTe -nTe -nTe -dVw -mbn -uxt -uxt -uxt -uxt -quy -uxt -fSZ -bjR -sNz -sNz -sNz -sNz -tjp -iGn -mzh -inD -tQC -xlD -jMp -fxT -bXs -bXs -bXs -bXs -lif -xEi -xDL -xDL -bXs -bXs -iEP -oMj -tdl -khd -bXs -lif -lif -qGx -lif -bXs -vEU -bXs -bXs -bXs -bXs -bXs -bXs -bXs -vJQ -wlM -lif -lif -uTy -uTy -bXs -bXs -bXs -rod -bXs -bXs -rod -bXs -bXs -rod -bXs -rod -bXs -bXs -bXs -bXs -lif -lif -lif -uTy -nAp -bXs -nAp -bXs -fgY -uTy -cjj -tQJ -tQJ -tQJ -tQJ -tQJ -tQJ -tQJ -jyv -jaf -jaf -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(45,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -sdU -uzF -cpC -bUx -fzE -sdU -sdU -sdU -cjj -cjj -cjj -cjj -bXs -qnw -wdV -qnw -wdV -qnw -wdV -lif -uTy -uTy -prU -wdV -wdV -wdV -wdV -wdV -wdV -wdV -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -rod -bXs -qnw -qnw -qnw -qnw -qnw -qnw -wdV -bXs -xDL -xDL -bXs -czT -ePz -ePz -ePz -ePz -czT -pms -mbn -mbn -bsB -rAW -fqW -mbn -mbn -smY -smY -kTK -nKA -pdq -nKA -ezG -rPy -ptt -ydz -ydz -ydz -oOB -dud -ydz -inD -gnk -tQC -tQC -fxT -cMu -xcg -xcg -xcg -cMu -lif -xDL -xDL -uzs -tdl -tdl -tdl -uzs -khd -bXs -lif -lif -oOw -bXs -bXs -bXs -uTy -bXs -mQf -bXs -bXs -bXs -bXs -bXs -rta -bXs -bXs -uTy -uTy -bXs -bXs -bXs -bXs -bXs -rod -lif -iNQ -bXs -bXs -bXs -bXs -lif -bXs -bXs -bXs -lif -lif -rod -nAp -uTy -bXs -nAp -bXs -uTy -uTy -cjj -cjj -jyv -cjj -cjj -tQJ -cjj -cjj -cjj -jaf -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(46,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -sdU -pEG -xpU -wKh -iEP -sdU -sdU -sdU -cjj -cjj -cjj -cjj -bXs -qnw -wdV -qnw -wdV -qnw -wdV -nAp -uTy -lif -lif -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -xDL -xDL -bXs -pLb -jWx -eOe -rWo -aUb -rRM -smY -pKw -pKw -pKw -smY -pKw -pKw -smY -pKw -smY -nKA -nKA -nKA -nKA -mQa -rPy -ptt -ydz -ydz -ydz -oOB -rsE -ydz -inD -phC -tPt -tQC -cMu -kft -dsq -oYY -oYY -fxT -bXs -xDL -xDL -bXs -bXs -rod -bXs -rod -bXs -bXs -gvS -wNi -bXs -bXs -hcY -bXs -bXs -bXs -bXs -jkv -iNQ -bXs -bXs -bXs -bXs -bXs -lif -uTy -uTy -bXs -rod -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -bXs -rod -bXs -rod -bXs -rod -bXs -bXs -bXs -gvS -uTy -nAp -bXs -bXs -uTy -hsC -cjj -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(47,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -sdU -iEP -dbJ -iEP -iEP -sdU -sdU -sdU -cjj -cjj -cjj -cjj -bXs -qnw -wdV -qnw -wdV -bXs -lif -nAp -uTy -kxd -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -bXs -ruw -lif -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -bXs -pLb -pkV -qZt -hpV -lKn -shd -wpZ -pms -pKw -xHC -xHC -xHC -xrF -dvI -isk -isk -isk -edO -nKA -nKA -lOZ -hKD -cMu -xcg -xcg -uoo -cMu -rsE -ydz -inD -inD -inD -inD -fxT -cMu -gHu -ecu -bqf -fxT -bXs -xDL -xDL -bXs -lif -ptr -lif -lif -lif -lif -bXs -lif -lif -gvS -gko -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -qIo -bXs -bXs -uTy -uTy -bXs -bXs -bXs -lif -iNQ -bXs -rod -lif -bXs -bXs -khr -bXs -bXs -bXs -rod -bXs -bXs -rod -bXs -rod -uTy -nAp -bXs -bXs -fgY -ktl -cjj -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(48,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uzs -sdU -iEP -uzs -sdU -sdU -sdU -sdU -cjj -cjj -cjj -cjj -bXs -qnw -wdV -qnw -wdV -bXs -bXs -uTy -uTy -lif -xDL -xDL -bXs -lif -bXs -lif -bXs -lif -elF -bXs -lif -bcP -bXs -lif -lif -bXs -lif -lif -xZg -lif -bXs -bXs -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -lif -bXs -pLb -mdE -qZt -hpV -boQ -fDx -mVy -pKw -pKw -xrF -dvI -rAW -rAW -uCa -kBr -wVN -kun -isk -nKA -nKA -lOZ -hKD -fxT -qqn -tQC -tQC -jrU -rik -pnL -fdH -hKD -iFv -hKD -oPj -vfR -dsq -dsq -nlv -fxT -bXs -xDL -xDL -rod -bXs -bXs -rod -lif -lYx -bXs -gvS -bXs -lif -iNQ -bXs -bXs -nAp -bXs -lif -bXs -bXs -bXs -kLy -nAp -ocQ -bXs -bXs -uTy -uTy -bXs -bXs -bXs -rod -bXs -rod -lif -bXs -rod -rod -bXs -bXs -rod -bXs -bXs -rod -rod -bXs -bXs -bXs -uTy -uTy -nAp -nAp -uTy -wUT -cjj -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(49,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uJC -eyx -sdU -sdU -sdU -sdU -sdU -cjj -cjj -cjj -cjj -bXs -vIR -prU -vIR -wdV -lif -nAp -uTy -uTy -wdV -xDL -xDL -lif -vFV -dJZ -vFV -vFV -bXs -lif -xZg -xsw -vFV -vFV -dJZ -dJZ -vFV -vFV -dJZ -dJZ -vFV -bXs -bcP -bXs -bXs -bXs -bXs -bXs -bXs -lif -bXs -bXs -nAp -xDL -xDL -lif -bXs -pLb -pkV -qZt -hpV -iId -kux -vWg -xHC -xHC -lVK -uCa -uhE -dQD -hUy -qMt -beb -jIR -isk -nKA -nKA -lOZ -hKD -inD -xUr -tQC -tQC -frf -iTK -iTK -lOZ -lOZ -lOZ -hKD -cMu -gvh -gvh -gvh -gvh -fxT -bXs -xDL -xDL -bXs -lif -fgY -vQx -evt -ycJ -fgY -bXs -bXs -bXs -bXs -gvS -bXs -bXs -lif -lif -lif -bXs -nAp -rYy -aYc -uQm -bXs -bXs -uTy -uTy -bXs -rod -bXs -iNQ -bXs -bXs -rod -bXs -iNQ -lif -bXs -bXs -bXs -rod -bXs -rod -rod -bXs -rod -bXs -uTy -nAp -lif -bXs -bXs -cjj -cjj -jaf -sNy -cZs -sNy -sNy -cZs -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(50,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -sdU -sdU -sdU -sdU -sdU -cjj -cjj -cjj -cjj -bXs -vIR -prU -vIR -prU -bXs -nAp -lif -nAp -wdV -xDL -xDL -lif -dJZ -fBu -fBu -vFV -vFV -vFV -vFV -dJZ -vFV -iHy -lGN -lGN -lGN -gnn -iHy -dST -vFV -xEi -bXs -lif -elF -xEi -lif -dJZ -dJZ -vFV -vFV -lif -bXs -xDL -xDL -bXs -bXs -pLb -mdE -qZt -hpV -iId -kux -heN -xHC -czT -qxw -hUy -pGh -lZR -hUy -cKT -bWp -hBG -isk -nKA -nKA -lOZ -hKD -fxT -mkz -oWJ -nnN -fxT -ydz -ydz -ydz -nUu -rPy -rPy -lQT -gvh -jhL -gvh -gvh -fxT -bXs -xDL -xDL -lif -bXs -ksi -ncr -uTy -dXB -ksi -dqG -dqG -dqG -dqG -lcc -dZq -lpb -bsE -pxg -nAp -nAp -uTy -uTy -nAp -uTy -fNt -bXs -uTy -uTy -qVA -aDC -aDC -aDC -aDC -fgY -aDC -aDC -aDC -aDC -aDC -aDC -fgY -bXs -bXs -khr -bXs -bXs -bXs -bXs -uTy -bXs -bXs -rod -bXs -cjj -cjj -jaf -cZs -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -aRU -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(51,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uzs -sdU -sdU -sdU -uzs -cjj -cjj -cjj -cjj -bXs -vIR -wdV -qnw -wdV -lif -uTy -uTy -nAp -bXs -xDL -xDL -bXs -dJZ -hLI -fBu -fBu -qPb -fBu -fBu -fBu -fBu -uVY -eRB -eUo -eUo -eRB -iHy -dST -vFV -vFV -bXs -nAp -nAp -nAp -nAp -vFV -hLI -fBu -dJZ -pms -pms -pms -pms -pms -pms -pLb -aCw -mVE -sek -iwZ -fDx -vCa -xHC -iId -buu -oDo -sSX -dwC -oDo -fkm -bWp -olQ -isk -nKA -nKA -lOZ -hKD -oPj -qjp -vWi -phC -oPj -ydz -ydz -ydz -nzX -rPy -fon -cMu -frf -cMu -cMu -lKU -fxT -bXs -xDL -xDL -nAp -bXs -evt -gVw -pTV -uTy -flb -dZq -dZq -dZq -pxU -dZq -dZq -ibe -vrK -nyj -hDi -gcU -gcU -gcU -gcU -hDi -bXs -bXs -uTy -uTy -lif -lif -bXs -bXs -lif -lif -bXs -bXs -bXs -bXs -bXs -khr -yfM -rod -bXs -bXs -rod -bXs -rod -lif -uTy -lif -bXs -bXs -bXs -cjj -cjj -sNy -cZs -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -aRU -cZs -aRU -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -jaf -psp -psp -psp -psp -psp -psp -"} -(52,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -qnw -wdV -qnw -prU -bXs -uTy -nAp -lif -wdV -xDL -xDL -lif -vFV -vFV -vFV -vFV -vFV -dJZ -vFV -vFV -fBu -iHy -dXk -eUo -slZ -eRB -iHy -nMe -uvo -mbn -mbn -mbn -mbn -jpH -jpH -mbn -fBu -fBu -dJZ -ozQ -lfI -slK -slK -ozQ -ozQ -czT -ePz -ePz -kzR -gma -tAW -pKw -xHC -czT -dvI -dvI -cCM -rAW -dvI -rAW -hfp -dvI -dvI -wte -nKA -lOZ -hKD -inD -inD -inD -inD -inD -ogx -ogx -ogx -ogx -pKw -pKw -pKw -voM -dJa -oLO -tQC -fxT -bXs -xDL -xDL -nAp -ptr -fzj -lXP -bWO -ptm -fzj -vrK -ibe -vrK -ibe -ibe -dZq -dZq -dZq -vws -gcU -oRK -vhx -jwr -cUd -gcU -npt -xkE -dZq -dZq -vWP -hDi -gcU -gcU -hDi -bXs -bXs -nAp -nAp -bXs -bXs -tPK -fvh -bXs -khr -bXs -bXs -iNQ -rod -nAp -nAp -bXs -rod -bXs -bXs -cjj -cjj -jaf -aRU -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(53,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -bXs -wdV -qnw -wdV -wdV -lif -bXs -uTy -bXs -wdV -bXs -xDL -xDL -bXs -bXs -vFV -bhP -xPz -tUq -xPz -iIo -vFV -fBu -eJx -kXo -aXe -ogP -eRB -iHy -fBu -fBu -mbn -xbB -qbe -uan -qbe -xbB -mbn -fBu -vFV -vFV -ozQ -lfI -slK -slK -lfI -ozQ -pms -iLK -smY -pKw -xHC -smY -pKw -xHC -kGQ -txm -yds -xqH -ekn -oyy -pmF -nTe -qkV -uCa -nKA -nKA -lOZ -hKD -lOZ -pKw -smY -pKw -pKw -pKw -pKw -smY -xrF -xrF -xHC -xHC -pKw -cMu -oyu -tQC -cMu -bXs -xDL -xDL -xDL -lif -fgY -vQx -evt -ycJ -fgY -pxU -dZq -pxU -dZq -dZq -dZq -wAB -jnK -wAB -gcU -qMk -vhx -mRb -hkD -ndb -aAt -xkE -dZq -dZq -xkE -gcU -hPR -haC -gcU -ibe -wAB -jeY -dZq -xkE -bXs -bXs -yfM -bXs -rod -bXs -bXs -bXs -nAp -uTy -nAp -bXs -bXs -uTy -cjj -bXs -cjj -jaf -jaf -jaf -jaf -jaf -jaf -sNy -sNy -sNy -sNy -sNy -sNy -cZs -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -psp -psp -psp -psp -psp -psp -"} -(54,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -lif -lif -qnw -wdV -bXs -lif -nAp -uTy -lif -wdV -wdV -xDL -xDL -lif -bXs -vFV -rQb -tuo -qpF -plT -xPz -pas -fBu -eJx -kXo -jTK -bUh -eRB -iHy -fBu -fBu -hUL -raA -qbe -pqP -qbe -lIB -hUL -fNG -vFV -ozQ -lfI -lfI -slK -slK -lfI -pms -pms -cCn -pKw -smY -xHC -pKw -pKw -qLT -baL -hUy -jYy -yds -dWg -dWg -fXU -nTe -gey -hUy -nKA -nKA -smY -smY -pKw -smY -kmR -bmc -lRy -qFA -kmR -bmc -bmc -qFA -kmR -vIi -pKw -cMu -tQC -tQC -fxT -bXs -xDL -xDL -xDL -nAp -bXs -bXs -rod -lif -kqd -ibe -dEO -ibe -ibe -wAB -dZq -dZq -dZq -dZq -ohj -vhx -vhx -sNq -nyQ -mmT -xkE -vWP -dZq -dZq -xkE -ndb -hTy -cke -gcU -pwa -dZq -dZq -lze -wAB -lif -bXs -yfM -rod -lif -bXs -rod -lif -uTy -uTy -lif -bXs -bXs -bXs -bXs -bXs -bXs -cjj -cjj -cjj -cjj -cjj -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -cjj -cjj -cjj -cjj -bXs -bXs -bXs -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(55,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -lif -hcY -bXs -wdV -prU -lif -lif -uTy -uTy -lif -wdV -bXs -xDL -xDL -bXs -vFV -vFV -xPz -rXj -qyY -hfe -xPz -vFV -fBu -iHy -dgd -dgd -dgd -dgd -uhn -fBu -bOY -hUL -xbB -qbe -uan -qbe -xbB -hUL -wMq -dJZ -lfI -lfI -lfI -slK -slK -lfI -pms -cCk -smY -xrF -tFN -qer -tFN -tFN -qLT -fKK -wMi -wMi -bJf -ced -baF -nTe -gey -glT -ogl -nKA -iId -kmR -bTD -bmc -qFA -wnB -tUl -rgv -uOF -uPZ -wyq -okM -ccI -rqi -oaU -pKw -oPj -iwE -uBq -cMu -bXs -nAp -xDL -xDL -xEi -nAp -bXs -bXs -kqd -lgd -pxU -dZq -dZq -dZq -dZq -dZq -lWU -qjF -nHQ -gcU -vhx -vhx -vhx -vqR -gcU -xQp -lLZ -dZq -dZq -xkE -gcU -cke -cke -jfx -dZq -wAB -jhK -gtN -dZq -xEi -iNQ -yfM -lif -khr -bXs -bXs -nAp -uTy -lif -bXs -bXs -bXs -bXs -bXs -lif -bXs -bXs -bXs -bXs -bXs -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -rod -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(56,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -hHk -uTy -lif -lif -bXs -lif -lif -lif -uTy -uTy -nAp -prU -bXs -wdV -xDL -xDL -bXs -vFV -opZ -xPz -rXj -xOi -hfe -xPz -vFV -fBu -iHy -lDF -poG -amZ -cIL -iHy -fBu -bdj -hUL -lIB -qbe -qbe -qbe -raA -hUL -dsB -dJZ -ozQ -lfI -ljh -slK -slK -lfI -pms -cCn -iId -iId -xGc -ejD -gMb -tph -qLT -vwv -lNO -suy -cSU -hTO -nTe -nTe -nTe -gey -hUy -nKA -iId -uPZ -gbg -mvr -keh -pXe -gce -uhR -gVO -rhk -ecZ -ecZ -srf -rnV -fhC -pKw -cMu -xcg -xcg -cMu -czT -bXs -xDL -xDL -xDL -xDL -bXs -gvS -kqd -ibe -ibe -wAB -vrK -vrK -wAB -dZq -dZq -qPV -dZq -oNm -yiB -vhx -vhx -vhx -gcU -mnK -sfQ -dZq -dZq -xkE -gcU -uLC -cke -gcU -wAB -wAB -dZq -ddk -dZq -oHk -bXs -yfM -rod -bXs -rod -lif -uTy -nAp -bXs -bXs -rod -bXs -rod -bXs -bXs -bXs -rod -bXs -lif -bXs -bXs -bXs -bXs -bXs -cjj -cjj -bXs -bXs -bXs -bXs -rod -bXs -rod -bXs -bXs -rod -bXs -bXs -bXs -bXs -cjj -cjj -cjj -cjj -cjj -cjj -"} -(57,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -nAp -bXs -lif -hcY -lif -lif -nAp -uTy -nAp -prU -bXs -bXs -xDL -xDL -xDL -lif -vFV -opZ -xPz -rXj -qyY -hfe -xPz -vFV -fBu -iHy -iHy -iHy -iHy -iHy -iHy -oHL -iHy -hUL -eqU -nRT -nRT -nRT -iDr -hUL -asj -dJZ -ozQ -lfI -slK -slK -slK -lfI -pms -cCn -iId -tFN -qko -bDY -xOf -ppn -fyR -iuE -vyQ -xre -kun -bJf -kLM -bQp -nTe -unu -oDo -okB -iId -qZr -cnF -iBH -iBH -qvP -hPn -llk -kmR -twz -jAV -ecZ -tCf -rnV -oaU -pKw -rRM -wLN -fXO -ttP -pLb -bXs -nAp -xDL -xDL -xDL -xDL -bXs -kqd -dZq -dZq -dZq -dZq -jap -dZq -dZq -ibe -ibe -vrK -gcU -sjm -vhx -vhx -omH -gcU -gna -qsl -dZq -wAB -vWP -hDi -gcU -gcU -hDi -wAB -wrR -wAB -wAB -dZq -nAp -bXs -yfM -rod -bXs -lif -nAp -uTy -lif -bXs -bXs -bXs -lif -gvS -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -lif -bXs -bXs -bXs -rod -bXs -bXs -rod -bXs -rod -bXs -bXs -rod -bXs -rod -bXs -cjj -cjj -cjj -cjj -cjj -"} -(58,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -bXs -bXs -bXs -bXs -bXs -bXs -uTy -uTy -lif -bXs -bXs -wdV -xDL -xDL -elF -bXs -vFV -vFV -xPz -rXj -xOi -hfe -xPz -vFV -fBu -cKt -dXa -ieC -ieC -ieC -hGR -wSZ -brT -hUL -hUL -ogl -tnn -ogl -hUL -hUL -asj -vFV -lfI -lfI -slK -slK -lfI -ozQ -pms -tEb -iId -tFN -rhi -xLq -nwn -qJB -fyR -qLT -wMi -bJf -bJf -hJJ -hGL -ogl -txm -hGL -dvI -nKA -iId -qZr -hBQ -iBH -iBH -iBH -iBH -iCp -kmR -kmR -bIe -rEO -kmR -rnV -fKy -pKw -nGi -xHC -xHC -eZz -pLb -bXs -bXs -bXs -nAp -xDL -xDL -xEi -kqd -dzz -ibe -ibe -ibe -wAB -wAB -dZq -dZq -dZq -dZq -gcU -suS -vhx -vhx -urw -ndb -gna -bbH -dZq -dZq -wAB -wAB -dZq -dZq -wAB -dZq -wAB -hDi -fgz -gcU -hDi -bXs -jDF -bXs -rod -bXs -uTy -nAp -bXs -bXs -rod -rod -lif -lif -rod -bXs -rod -rod -bXs -bXs -rod -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -rod -bXs -rod -rod -bXs -bXs -bXs -bXs -rod -bXs -cjj -cjj -cjj -cjj -cjj -"} -(59,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -lif -uTy -bXs -lif -bXs -uTy -uTy -lif -wdV -bXs -wdV -xDL -xDL -xDL -lif -bXs -bXs -vFV -ije -plT -plT -plT -xPz -vFV -qwU -xzE -xGB -xzE -xGB -xzE -fWk -xdp -udt -vAS -xnP -xzE -xdp -oFk -xzE -ubK -asj -dJZ -ozQ -lfI -slK -slK -smY -lfI -pms -tEb -iId -tFN -pgK -pgK -gBZ -pgK -qer -smY -nKA -nKA -nKA -jja -tFt -nKA -nKA -tFt -nKA -pdq -iId -qZr -eCc -iBH -uhf -lkI -iBH -pcd -uPZ -hNl -dQE -dQE -qJI -vmK -oxf -pKw -pLb -yin -xHC -ttP -suQ -jgY -tXt -jgY -nAp -xDL -xDL -xDL -qEy -dZq -dZq -dZq -dZq -dZq -dZq -dZq -wAB -vrK -svE -oRq -fvf -nvR -vhx -fXC -gcU -hJE -sfQ -dZq -dZq -vWP -hDi -gcU -gcU -fgz -hDi -dZq -gcU -cke -rsd -gcU -bXs -qXw -bXs -khr -bXs -uTy -lif -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -eEC -bXs -bXs -bXs -rod -bXs -rod -bXs -rod -bXs -bXs -lif -bXs -rod -rod -bXs -rod -bXs -bXs -rod -bXs -bXs -rod -bXs -bXs -rod -cjj -cjj -cjj -cjj -cjj -"} -(60,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -lif -nAp -uTy -nAp -uTy -uTy -prU -bXs -bXs -xDL -xDL -xDL -xDL -ljs -xsw -bXs -vFV -iWt -xPz -xPz -xPz -fio -vFV -vFV -tsd -hub -xGB -xzE -xzE -xzE -xdp -xdp -jes -irT -xGB -xdp -xdp -xdp -dsB -rix -vFV -ozQ -lfI -slK -slK -anF -ozQ -pms -pdq -iId -qer -pqS -hZR -jkc -jkc -tFN -wlv -tFN -kyS -nKA -pnK -dxB -mFe -pKw -pKw -smY -nKA -iId -mRE -iCp -iBH -iBH -iBH -iBH -sry -kmR -hNl -dQE -dQE -fsl -wnB -kwe -pKw -czT -xHC -xHC -jgY -jgY -csF -oGZ -tXt -bXs -xDL -xDL -xDL -eAd -svE -ibe -ibe -dEO -jnK -ibe -dZq -dZq -dZq -dZq -gcU -kqA -cRV -vhx -cke -gcU -eTJ -asF -dZq -dZq -xkE -gcU -hPR -cke -wsP -gcU -dZq -gcU -cke -sSj -gcU -bXs -yfM -bXs -rod -lif -uTy -bXs -bXs -bXs -rod -lif -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -rod -rod -rod -rod -rod -bXs -bXs -rod -bXs -rod -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -cjj -cjj -cjj -cjj -cjj -"} -(61,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -gFp -bXs -bXs -bXs -nAp -uTy -uTy -lif -wdV -xDL -xDL -xDL -elF -bXs -vFV -dJZ -vFV -vFV -vFV -vFV -pas -vFV -vFV -vFV -vFV -vFV -dPM -xGB -uHG -uHG -rel -xzE -xdp -fWk -pUZ -xzE -xdp -fWk -vFV -vFV -fBu -vFV -vFV -lfI -slK -slK -oII -ozQ -pms -tEb -iId -sOX -byC -jYW -jkc -wdo -tFN -wmJ -tFN -mbY -xxU -quG -qeI -mFe -mFe -pKw -pKw -smY -inB -twz -dTc -bVB -spe -dwg -pPX -lhP -twz -frE -lIh -kmR -bmc -bmc -gcr -pKw -rRM -xHC -jgY -jgY -nQA -bMJ -rmP -ppV -bXs -xDL -xDL -xDL -kqd -pxU -dZq -dZq -dZq -dZq -dZq -dZq -wAB -ibe -ibe -gcU -wcw -vhx -vhx -cke -lyZ -wAB -wAB -dZq -dZq -vWP -gcU -eoj -cke -cke -gcU -dZq -gcU -cke -cke -gcU -bXs -yfM -lif -bXs -nAp -uTy -bXs -bXs -tPK -bXs -bXs -bXs -bXs -bXs -bXs -lif -bXs -rod -bXs -bXs -bXs -rod -lif -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -rod -rod -bXs -rod -qVT -rod -bXs -rod -cjj -cjj -cjj -cjj -cjj -"} -(62,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -bXs -gFp -bXs -lif -nAp -uTy -bXs -bXs -xDL -xDL -lif -lif -bXs -vFV -azg -nmu -bGr -eKW -nNJ -bGr -bGr -bGr -bGr -vcP -vFV -vFV -xzE -xGB -vAA -fWk -fWk -xdp -fWk -tqD -tsd -xdp -idj -vFV -cLS -fBu -fBu -vFV -pms -pms -pms -pms -pms -pms -tEb -iId -vhN -oaU -nmF -jkc -jkc -qer -fmQ -tFN -uiX -aZm -tpC -qeI -pKw -pKw -pKw -pKw -smY -iId -kmR -gcr -qZr -qZr -qZr -wnB -qFA -kmR -iaC -iCp -pcD -iCp -obC -uPZ -pKw -oSt -aeu -suQ -bMJ -bMJ -voT -wbA -tXt -bXs -xDL -xDL -xDL -qEy -wAB -wAB -vrK -ibe -vrK -ibe -dZq -dZq -dZq -dZq -gcU -wDi -vhx -vhx -aLX -gcU -wys -bbH -dZq -dZq -xkE -gcU -hDi -cke -deO -gcU -wAB -gcU -hPR -haC -gcU -lif -kYQ -bXs -qqM -uTy -uTy -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -bXs -tPK -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -rod -rod -lif -bXs -rod -rod -bXs -lif -bXs -rod -rod -bXs -bXs -rod -cjj -cjj -cjj -cjj -cjj -"} -(63,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -qnw -wdV -bXs -bXs -lif -uTy -uTy -wdV -bXs -xDL -xDL -lif -vFV -vFV -iHy -jih -knM -nAH -bGr -bGr -bGr -nAH -bGr -bGr -xTB -uYU -vFV -eTT -omc -vjx -tKU -jes -xdp -tFc -xGB -xzE -xdp -idj -vFV -hLI -fBu -fBu -tRx -hGm -swy -slK -ppo -nIR -ozQ -nKA -iId -tFN -tFN -qer -eap -eap -tFN -whE -tFN -mbY -quG -quG -qeI -mFe -mFe -ube -pKw -pKw -iId -hAB -iId -iId -iId -iId -iId -ony -iCp -iCp -iCp -kmR -ajp -geD -wnB -pKw -czT -ePz -jgY -pdy -tXt -jgY -kpf -jgY -nuo -xDL -xDL -xDL -xuL -sAV -sAV -pxU -iXi -rCn -lNk -dZq -luz -pBG -pBG -gcU -xaf -cke -kki -cML -gcU -sPp -sfQ -wAB -dZq -vWP -xkE -gcU -ndb -gcU -hDi -wAB -hDi -gcU -ndb -hDi -bXs -kYQ -bXs -jeC -uTy -nAp -bXs -bXs -bXs -bXs -gGO -bXs -bXs -bXs -rod -bsU -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -rod -rod -lif -bXs -rod -bXs -bXs -rod -bXs -lif -lif -bXs -rod -bXs -rod -rod -bXs -bXs -cjj -cjj -cjj -cjj -"} -(64,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -qnw -wdV -wdV -wdV -gFp -nAp -uTy -lif -wdV -xDL -xDL -bXs -vFV -aGu -xHI -xPz -ejS -guL -guL -guL -guL -guL -guL -guL -guL -guL -guL -vFV -tsd -cpa -xzE -xzE -xdp -fWk -fWk -xGB -xdp -doU -vFV -tRx -vFV -tRx -eTT -hGm -swy -slK -lfI -lfI -qoQ -nKA -rCF -mbs -mbs -jVD -iId -iId -iox -xHC -tFN -xBu -xEd -xEd -rkw -mFe -mFe -pKw -fVV -pKw -smY -nKA -nKA -nKA -nKA -nKA -nKA -kmR -gcr -gcr -gcr -kmR -bmc -qFA -gcr -pKw -lfI -ozQ -nKz -smY -ozQ -pms -wAB -xkE -ivL -bwy -bwy -bwy -naF -xkE -iAL -xkE -vWP -kGN -vWP -dZq -dZq -vWP -vWP -hDi -gcU -gcU -gcU -gcU -hDi -qdU -sho -wAB -dZq -ibe -tzO -xkE -vWP -vWP -vWP -wAB -bXs -bXs -bXs -fgY -dzj -qXW -bXs -xXs -uTy -bXs -lif -lif -lif -bXs -bXs -lif -bXs -bXs -bXs -bXs -lif -bXs -bXs -rod -bXs -lif -lif -lif -vJQ -bXs -lEG -exj -bXs -lif -lif -bhp -lif -bXs -dgp -lif -ngf -lif -lif -rod -lif -rod -lif -elF -cjj -cjj -"} -(65,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -qnw -qnw -bXs -wdV -wdV -bXs -uTy -lif -wdV -xDL -xDL -lif -vFV -aGu -iwL -tUQ -ucC -pVx -tUQ -tUQ -dgP -cOl -tUQ -tUQ -tUQ -tUQ -tUQ -sll -kVS -ybg -vXB -cxa -cxa -cxa -txR -oJo -oJo -oJo -oJo -gGB -tvX -jja -nKA -usU -lZL -pKE -fGK -jFj -fwO -vWg -dxL -heN -pKw -smY -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -pKw -bOM -pKw -xHC -xHC -kGQ -iNB -kkq -xHC -pKw -pKw -pKw -smY -pKw -pKw -rij -bbH -wAB -gna -gna -gna -gna -gna -wAB -nfN -bbH -dZq -dZq -dZq -dZq -dZq -wAB -wAB -dZq -dZq -dZq -wAB -dZq -dZq -dZq -dZq -wAB -wAB -dZq -dZq -dZq -dZq -dZq -dZq -dZq -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -uTy -nAp -nAp -nAp -lMr -uTy -dOJ -uYA -wRr -wRr -xXs -uTy -nAp -nAp -uTy -jsb -"} -(66,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -wdV -qnw -qnw -qnw -wdV -wdV -bXs -nAp -wdV -bXs -xDL -xDL -bXs -vFV -iHy -aHx -vYf -nvC -vYf -rQp -xPy -pCm -pCm -gMX -vYf -vYf -vYf -vYf -nWE -tgY -ybg -dsK -mIZ -qGH -eRz -mdt -xdp -fWk -fWk -fWk -asj -asj -smY -smY -tZR -gFs -pKE -fGK -tZR -pCp -nXK -smY -smY -smY -pdq -smY -pKw -smY -pKw -smY -smY -smY -pKw -smY -pdq -smY -smY -smY -pKw -smY -pKw -smY -smY -smY -smY -smY -pdq -smY -smY -pKw -pKw -smY -smY -pnK -pnK -pnK -fqu -smY -pdq -smY -vxz -jbJ -rLU -gna -gna -gna -gna -gna -jGo -lVl -upL -xkE -xkE -ibe -xkE -vWP -xkE -xkE -ibe -wAB -ibe -xkE -xkE -vWP -xkE -ibe -wAB -wAB -wAB -ibe -wAB -xkE -ibe -wAB -wAB -nAp -bXs -xEi -bXs -lif -xEi -bXs -nAp -xEi -bXs -xEi -nAp -nAp -nAp -nAp -nAp -nAp -bXs -nAp -bXs -nAp -nAp -bXs -nAp -bXs -nAp -nAp -uTy -nAp -uTy -nAp -nAp -nAp -nAp -nAp -epS -uTy -uTy -tGV -xmT -uTy -sfH -wKF -xHn -nAp -nAp -xEi -xEi -nAp -szq -"} -(67,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -wdV -wdV -wdV -wdV -qnw -qnw -qnw -wdV -bXs -uTy -lif -wdV -xDL -xDL -bXs -vFV -aGu -daD -kbl -fbb -kfw -kbl -kbl -vZm -sGp -kbl -kbl -kbl -kbl -kbl -sll -eVM -ybg -qno -bLE -bLE -bLE -ifJ -oJo -oJo -oJo -oJo -gGB -gGB -nKA -pVK -oYE -lZL -pKE -fGK -tMa -heN -bHS -ygV -vWg -pKw -pKw -smY -pKw -pKw -pKw -pKw -pKw -pKw -pKw -smY -pKw -pKw -pKw -smY -smY -cwL -hdL -hdL -xHC -xHC -xHC -xHC -xHC -xHC -pKw -pKw -pKw -pKw -fwO -try -slK -slK -dEz -vWg -pKw -pKw -dxL -qsl -pXN -gna -gna -gna -gna -gna -sfQ -wAB -wAB -wAB -mgZ -jGo -dZq -dZq -dZq -dZq -dZq -wAB -wAB -dZq -dZq -wAB -dZq -dZq -dZq -dZq -dZq -dZq -dZq -dZq -dZq -dZq -dZq -uTy -uTy -uTy -uTy -uTy -nAp -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -nAp -nAp -alS -uTy -fUy -dOJ -wRr -wRr -wRr -qMc -uTy -uTy -nAp -uTy -szq -"} -(68,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -qnw -qnw -qnw -nAp -uTy -prU -bXs -xDL -xDL -bXs -vFV -aGu -dGK -xPz -ejS -guL -guL -guL -guL -guL -guL -guL -guL -guL -guL -vFV -tsd -cpa -xzE -fWk -xdp -jes -fWk -xzE -xdp -gVW -vFV -tRx -dJZ -tRx -vFV -hGm -swy -slK -ozQ -lfI -eXO -lfI -lfI -ozQ -lfI -vQY -mVv -ezb -lfI -lfI -uXz -pKw -pKw -smY -pKw -xrF -xHC -xrF -rSm -moB -rSm -bCf -rSm -pSa -moB -pSa -pSa -rSm -vxt -pKw -xQF -pjU -dZd -dZd -dZd -dZd -dZd -pjU -rqR -lfI -cvO -pms -aJR -vWP -oBU -lJr -lJr -lJr -cDD -vWP -vWP -vWP -xkE -vWP -xkE -vWP -vWP -xkE -vWP -vqa -dZq -dZq -hKo -tCz -fcg -fcg -dZq -aSZ -tCz -lhw -lhw -lXE -dEn -fcg -aJg -xkE -bXs -lif -bXs -lif -lif -bXs -nAp -lif -bXs -lif -bXs -bXs -lif -bXs -bXs -bXs -lif -lif -wGR -bXs -bXs -bXs -lif -lif -lif -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -rod -bhp -lif -uTy -dgp -bXs -lif -lif -lif -gvS -bXs -rod -lif -rod -wSN -cjj -cjj -"} -(69,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -brr -wdV -wdV -wdV -wdV -wdV -qnw -qnw -qnw -qnw -uTy -uTy -prU -bXs -xDL -xDL -lif -vFV -dJZ -qwN -vuZ -knM -nAH -tpk -bGr -bGr -nAH -bGr -bGr -lmR -cey -vFV -eTT -cPt -dXj -xzE -xdp -xdp -dLw -fpb -xGB -xdp -idj -vFV -hLI -fBu -fBu -tRx -hGm -swy -slK -fwQ -lfI -mwG -mwG -mwG -mwG -mwG -mwG -mwG -mwG -mwG -mwG -rrI -xIT -pKw -smY -rSm -pSa -pSa -pSa -pSa -fgL -dDf -hZE -nxX -nfd -hZE -heD -vhT -pSa -tSI -pKw -cvO -jGD -uJs -xKf -xHC -xrF -dts -qer -rqR -swy -jgY -jgY -tXt -jgY -nuo -xDL -xDL -xDL -tzO -pHk -xFM -xFM -xFM -hCy -xFM -xFM -xFM -hCy -dgm -vWP -dZq -dZq -uxJ -oUl -xkE -tzO -dZq -xkE -vWP -xkE -vWP -xkE -xkE -xkE -oAo -xkE -hDi -gcU -ndb -gcU -hDi -gFp -uTy -bXs -bXs -bXs -rod -gGO -bXs -bXs -rod -bXs -bXs -rod -bXs -bXs -tPK -bXs -bXs -rod -gGO -bXs -bXs -rod -bXs -rod -bXs -rod -bXs -bXs -bXs -rod -uTy -bXs -qVT -rod -bXs -rod -bXs -bXs -rod -rod -bXs -cjj -cjj -cjj -"} -(70,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -jlO -kkJ -wdV -jlO -wdV -wdV -wdV -wdV -qnw -qnw -bcj -uTy -uTy -lif -wdV -xDL -xDL -bXs -bXs -lif -vFV -hCd -egc -bGr -pCW -fYv -bGr -bGr -bGr -bGr -vcP -vFV -vFV -xzE -xzE -shA -fWk -fWk -xdp -irT -dxW -xGB -xdp -idj -vFV -cLS -fBu -eAq -vFV -pms -pms -pms -pms -mwG -mwG -qJH -iFi -iIr -iIr -eGm -mEf -mEf -ftP -sjq -vaR -pKw -pKw -pKw -pSa -uvA -wPT -uWr -pSa -hZE -hZE -hZE -hZE -hZE -cdd -lFW -tZZ -pSa -mbs -rqR -swy -pjU -dZd -nHh -xHC -xHC -xrF -sEq -rqR -swy -ksQ -kku -bMJ -tXt -bXs -xDL -xDL -xDL -xDL -vom -ibe -wAB -nJf -wAB -wAB -wAB -ibe -pHk -hCy -vWP -dZq -dZq -nJr -vJb -xkE -xkE -wAB -xkE -xkE -xkE -pVX -tzw -xkE -xkE -oAo -xkE -gcU -bvw -cke -cke -gcU -lif -uTy -bXs -bXs -bXs -bXs -bXs -tPK -bXs -bXs -bXs -bXs -rod -bXs -rod -bXs -rod -bXs -bXs -rod -bXs -bXs -qVT -bXs -bXs -bXs -rod -rod -bXs -rod -bXs -nAp -bXs -rod -bXs -rod -bXs -bXs -rod -bXs -cjj -cjj -cjj -cjj -cjj -"} -(71,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -fgY -tQJ -tQJ -fgY -wdV -wdV -bXs -wdV -wdV -bXs -qnw -gTE -uTy -uTy -xEi -bXs -xDL -xDL -lif -elF -bXs -vFV -dJZ -vFV -vFV -vFV -uhn -uhn -vFV -gtw -gtw -gtw -gtw -dTX -xzE -xGB -fWk -xdp -xdp -xdp -aVN -xzE -rel -xdp -fWk -vFV -vFV -fBu -vFV -dJZ -lfI -slK -slK -oII -gvb -sJe -sRf -sRf -mzQ -iFi -nbF -mes -mes -iFi -iFi -gvb -nKA -smY -smY -pSa -xab -pmr -xIU -pSa -hZE -hZE -hZE -rqW -hZE -cdd -tKP -hZE -pSa -iUY -smY -pKw -pKw -lVe -xrF -xHC -xHC -khl -tFN -rqR -anF -pLZ -bMJ -uyd -ppV -bXs -xDL -xDL -xDL -xDL -vom -wAB -dPQ -wAB -dZq -cmB -cmB -dPQ -ibe -oyB -ipr -dZq -dZq -nJr -xkE -xkE -xkE -ibe -dZq -xkE -vWP -xkE -xkE -pVX -xkE -vWP -xkE -gcU -cke -cke -cke -gcU -bXs -bXs -gFp -bXs -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -rod -rod -bXs -bXs -bXs -bXs -rod -rod -bXs -bXs -nAp -rod -bXs -bXs -rod -rod -bXs -cjj -cjj -cjj -cjj -cjj -cjj -"} -(72,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -nlS -xyY -xDL -tQJ -uTy -wdV -wdV -xEi -wdV -qnw -xXs -qnw -nAp -uTy -xEi -qnw -xDL -xDL -bXs -lif -lif -xEi -uTy -eJx -bMQ -xPz -xPz -xPz -xPz -gtw -dxk -cXO -eeE -ieC -ieC -xdp -uHG -pHH -xdp -fWk -pUZ -xzE -tsd -nfg -xdp -dsB -asj -kOz -dJZ -ozQ -ozQ -slK -slK -anF -vaR -amb -sRf -aba -fFf -iIr -sxT -sxT -sxT -iFi -wQG -dhg -nKA -nKA -pKw -pSa -eTy -gdc -jyR -pSa -non -mzB -pSa -rec -hZE -hZE -ogX -dQg -pSa -pSa -pSa -rSm -pKw -dZd -xeL -xHC -xrF -ttP -qer -rqR -swy -rEb -csF -lGa -tXt -bXs -xDL -xDL -fuR -pxU -xFM -wAB -wAB -uGM -dZq -dZq -dZq -jcn -wAB -oyB -xkE -dZq -dZq -uxJ -xkE -xkE -xkE -xkE -pxU -xkE -vWP -vWP -xkE -xkE -oUl -xkE -xkE -gcU -hIe -cke -hPR -gcU -bXs -nAp -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -rod -bXs -bXs -gvS -lif -bXs -bXs -bXs -bXs -rod -bXs -bXs -rod -lif -lif -bXs -rod -bXs -bXs -bXs -rod -rod -uTy -bXs -bXs -bXs -rod -rod -bXs -bXs -cjj -cjj -cjj -cjj -cjj -"} -(73,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -jlO -wCC -cnQ -xyY -tQJ -wdV -bXs -wdV -wdV -xXs -wdV -qnw -qnw -xEi -uTy -nAp -qnw -xDL -xDL -xDL -elF -xEi -uTy -uTy -vFV -nxD -njK -njK -njK -xPz -gtw -gtw -gtw -gtw -maO -jes -xGB -xGB -iNo -xdp -xdp -mbn -mbn -mbn -mbn -mbn -mbn -mbn -dsB -vFV -ozQ -lfI -slK -slK -oII -vaR -cTR -diV -exA -qzH -jTc -iIr -iIr -iIr -iIr -iIr -vaR -wte -nKA -smY -pSa -ajF -gdc -gdc -daW -jZm -jZm -neF -wVy -rqW -hZE -hZE -hZE -jEV -hZE -hes -pSa -pKw -pjU -dZd -dZd -dZd -dZd -pjU -rqR -swy -jgY -jgY -tXt -jgY -bXs -xDL -xDL -riP -xkE -hLl -ihM -dZq -dZq -dZq -wAB -wAB -wAB -wAB -xFM -mOM -dZq -dZq -nJr -xkE -xkE -oUl -qTI -xkE -wAB -xkE -xkE -dZq -vWP -xkE -cEy -xkE -hDi -gcU -wUd -gcU -hDi -lif -uTy -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -bXs -rod -wdV -wdV -wdV -wdV -wdV -prU -prU -wdV -wdV -wdV -wdV -wdV -wdV -bXs -uTy -bXs -rod -bXs -bXs -bXs -rod -cjj -cjj -cjj -cjj -cjj -cjj -"} -(74,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -fgY -tQJ -tQJ -fgY -jlO -wdV -wdV -wdV -wdV -wdV -qnw -qnw -bXs -uTy -nAp -qnw -lif -xDL -xDL -bXs -xEi -uTy -uTy -dUz -avV -njK -bBj -fwR -xPz -vFV -vBb -xie -xie -ieC -xzE -xzE -ybe -nMd -fWk -xdp -qny -jJO -yds -yds -yds -pUU -mbn -eud -dJZ -ozQ -ozQ -slK -slK -ozQ -vaR -iTj -sRf -vwC -fFf -iIr -tPd -tPd -tPd -iFi -iFi -dhg -nKA -nKA -nKA -rSm -pSa -pSa -pSa -pSa -axt -jZm -xHy -wVy -dMe -xhy -osa -wOM -uYS -hZE -uKw -pSa -smY -dZd -trq -xHC -lwq -phV -tFN -rqR -swy -pms -bXs -bXs -bXs -nAp -xDL -xDL -xkE -xkE -dty -wAB -azz -wAB -dZq -wAB -cmB -cmB -cmB -wvP -oqC -dZq -dZq -hcA -xkE -hDi -gcU -okj -hDi -aNW -kdL -kdL -fqh -cio -xkE -wlM -gFp -bXs -bXs -nAp -bXs -lif -uTy -bXs -bXs -gFp -bXs -bXs -lif -lif -lif -bXs -bXs -bXs -bXs -bXs -tPK -bXs -bXs -rod -wdV -wdV -wdV -wdV -wdV -prU -wdV -wdV -wdV -wdV -wdV -wdV -wdV -rod -nAp -nAp -bXs -rod -bXs -bXs -bXs -bXs -cjj -cjj -cjj -cjj -cjj -"} -(75,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -kkJ -wdV -jlO -wdV -wdV -wdV -wdV -wdV -wdV -qnw -qnw -bXs -uTy -uTy -qnw -lif -xDL -xDL -elF -nAp -uTy -uTy -gXo -rWF -njK -xvR -fwR -xPz -vFV -oiu -hom -hom -hom -vFV -oiA -oiA -dsB -dsB -puJ -mbn -qQj -yds -yds -yds -yds -mbn -enH -vFV -lfI -lfI -slK -slK -lfI -gvb -pUM -sRf -sRf -mzQ -iFi -mes -mes -mes -iFi -uRW -gvb -nKA -cfh -nKA -nKA -nKA -nKA -pSa -tLK -jZm -jZm -ecO -giM -hZE -bXT -hXk -rSm -pSa -gQS -lFu -pSa -pKw -dZd -nRE -xrF -xrF -xHE -owy -oII -pms -pms -bXs -nAp -xDL -xDL -xDL -xDL -nUh -xBQ -nzY -cyt -dZq -dZq -dZq -dZq -dZq -dZq -dZq -gEo -xLA -dZq -dZq -nJr -xkE -gcU -plB -lIP -gcU -lvr -vhx -aEH -gCu -ocA -xkE -ouU -bXs -bXs -bXs -bXs -nAp -uTy -bXs -bXs -bXs -bXs -bXs -rod -lif -gvS -lif -bXs -rod -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -wdV -www -www -www -www -www -www -www -www -www -www -bXs -rod -uTy -wdV -wdV -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -"} -(76,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -bXs -wdV -wdV -wdV -wdV -wdV -wdV -wdV -qnw -qnw -qnw -bXs -uTy -uTy -qnw -xDL -xDL -xDL -bXs -uQd -uQd -xvr -vFV -vFV -njK -njK -njK -xPz -vFV -ioQ -ieC -opr -opr -auy -auy -auy -tGA -auy -tRx -vFV -vFV -mbn -eED -mbn -bTt -mbn -dsB -vFV -ozQ -lfI -slK -slK -lfI -mwG -mwG -jkR -iFi -iIr -iIr -awe -rHd -rme -iIr -sjq -vaR -nKA -kvS -kyb -dda -kvS -nKA -pSa -rSm -jVq -cNt -pSa -pSa -pSa -pSa -pSa -pSa -pSa -pSa -pSa -rSm -sQV -dZd -gKF -dzE -xrF -gas -qer -hOz -pms -bXs -bXs -xDL -xDL -xDL -xDL -fVh -hQQ -hQQ -nzY -sxt -cmB -nMy -dZq -wAB -cmB -cmB -wAB -rWR -vWP -dZq -dZq -uxJ -xkE -jEO -eRH -bXV -hDi -okj -cSj -okj -hDi -jBJ -xkE -ouU -bXs -rod -bXs -lif -gFp -bXs -bXs -sRR -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -www -www -www -www -vHv -www -wdV -wdV -wdV -wdV -www -www -www -www -www -www -www -www -vKe -vKe -wdV -wdV -uTy -wdV -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(77,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -wdV -wdV -wdV -wdV -wdV -wdV -qnw -qnw -qnw -bXs -uTy -nAp -qnw -xDL -xDL -tPK -lif -uQd -wpE -xya -xGE -xkk -vFV -vfO -kFP -xPz -vFV -xGB -ieC -vFV -vFV -auy -xhq -iGx -asj -uoT -fgP -bGv -vFV -cOe -hQf -pUU -yds -mbn -rix -dJZ -lfI -ljh -slK -slK -lfI -kvS -mwG -mwG -rUK -mwG -mwG -mwG -mwG -mwG -mwG -mwG -rrI -aDZ -dda -jZz -tiW -dda -nKA -egz -hZE -hZE -hZE -nVy -smq -lYm -hZE -fmG -fGl -tpX -jkc -bZQ -vYW -smY -pjU -dZd -dZd -wwJ -dZd -pjU -smY -pms -bXs -nAp -xDL -xDL -xEi -lif -lif -lif -lif -hCy -jBZ -qtH -bHA -dZq -wAB -wAB -wAB -wAB -vom -ipr -dZq -dZq -xiH -xkE -gcU -ijn -ijn -hZD -vhx -vhx -cqo -gcU -sZS -ibe -qIo -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -rod -bXs -rod -bXs -rod -bXs -bXs -www -www -www -www -www -www -wdV -cjj -cjj -wdV -wdV -cjj -cjj -cjj -bXs -cjj -cjj -wdV -wdV -wdV -wdV -jkx -jkx -jkx -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(78,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -wdV -wdV -wdV -wdV -wdV -qnw -qnw -qnw -lif -uTy -uTy -qnw -xDL -xDL -lif -uQd -uQd -hjk -pHY -pHY -gtg -xkk -xkk -vFV -yai -vFV -dXa -ieC -qVD -gpl -auy -bwR -asj -asj -gsB -dsB -asj -vFV -jNH -yds -yds -ppO -mbn -wrs -vFV -ozQ -lfI -slK -slK -ozQ -qeO -hVr -wFg -jZz -jmX -gfN -uuL -bXH -bXH -bXH -iso -iqT -iqT -qeO -ocP -jZz -dda -nKA -rSm -sAY -sAY -vIo -fOQ -yiq -fOQ -wBy -nAt -fGl -fNO -mFQ -nMo -eIh -lfI -lfI -vBU -lfI -smY -ozQ -smY -smY -pms -bXs -xDL -xDL -xDL -hDi -gcU -gcU -hDi -gko -nzY -nJQ -ezz -bHA -dZq -dZq -dZq -dZq -wAB -xFM -dXv -dZq -vHo -nJr -xkE -gcU -ijn -ijn -pAW -pAW -pAW -pAW -gcU -cio -dZq -rta -bXs -rod -bXs -bXs -rod -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -wdV -wdV -www -www -wdV -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -jkx -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(79,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -wdV -wdV -wdV -wdV -qnw -qnw -qnw -lif -uTy -nAp -qnw -xDL -xDL -bXs -xvr -fIb -pmz -fvv -fvv -fvv -wHQ -eLL -nym -hom -hom -ieC -ieC -wpR -vFV -vFV -qxr -asj -asj -vFV -qyR -dsB -vFV -roZ -yds -yds -vEY -mbn -fBu -vFV -vFV -ozQ -slK -slK -ozQ -kvS -old -old -jZz -uxS -gfN -iqb -bXH -iqT -iqT -iqT -iso -iqT -dda -owT -jZz -dda -nKA -nKA -lVK -xKP -gbU -nnd -oXM -xgl -fVn -hZE -fGl -bPA -tZR -tZR -oFX -smY -lfI -lfI -smY -lfI -pKw -smY -pms -pms -bXs -xDL -xDL -gcU -wLo -cke -cke -gcU -ptr -nzY -tOb -jSb -bHA -dZq -dPQ -wAB -cmB -ibe -vom -vWP -dZq -dZq -nJr -xkE -gcU -qMN -ijn -lok -mIw -eio -lok -gcU -uOb -wAB -ouU -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -rod -bXs -bXs -wdV -wdV -www -www -wdV -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(80,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -wdV -wdV -qnw -qnw -qnw -qnw -qnw -uTy -nAp -qnw -xDL -xDL -lif -uQd -eOv -xah -pfm -vKI -hbO -hjk -hBx -xJG -hom -hom -ieC -ieC -qVD -jeN -auy -qNh -vYJ -vYJ -uoT -bGv -asj -vFV -jHy -qVh -kjq -euA -mbn -fBu -fBu -vFV -pms -pms -pms -pms -qeO -vAR -wFg -jZz -jmX -gfN -iqb -bXH -iqT -fxm -iqT -iso -iqT -jbK -jZz -jZz -dda -kvS -nKA -smY -sAY -eiG -tbh -ceT -fEa -vTl -sJk -sAY -cjO -vWe -wks -bHN -smY -lfI -jma -pKw -lfI -lfI -lfI -pms -bXs -bXs -xDL -xDL -gcU -uTy -uTy -cke -gcU -lif -uxt -lop -sxt -wAB -wAB -wBq -wAB -ibe -ibe -xFM -vWP -dZq -wAB -nJr -xkE -gcU -hDi -pAW -lok -uRx -dEb -lok -gcU -wiL -xkE -ouU -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -lif -lif -bXs -bXs -rod -wdV -wdV -www -www -wdV -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(81,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -wdV -wdV -qnw -qnw -qnw -qnw -xEi -uTy -qnw -qnw -xDL -xDL -lif -uQd -xkk -fSQ -fvv -uBL -fvv -awl -eLL -nym -hom -hom -dJZ -vFV -vFV -dJZ -vFV -vFV -dJZ -dJZ -dJZ -vFV -vFV -dJZ -mbn -mbn -jpH -mbn -mbn -hLI -fBu -vFV -xZg -xDL -xDL -lif -kvS -old -old -gkW -old -kvS -dVh -bXH -iqT -hZr -iqT -iso -iqT -dda -gZJ -jZz -wpx -dda -nKA -pKw -rSm -uhk -rSm -cTv -egz -cTv -rSm -rSm -fZg -lfI -pKw -smY -pKw -smY -smY -lfI -smY -mvo -lfI -pms -bXs -bXs -xDL -xDL -hDi -gcU -nAp -nAp -hDi -lif -rvj -uxt -uxt -uxt -hCy -uxt -uxt -uxt -xFM -rvj -vWP -wAB -dZq -xkE -xkE -gcU -wBd -pAW -qDr -eAI -pAW -qpQ -gcU -ePk -dZq -lif -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -rod -bXs -wdV -wdV -www -www -wdV -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(82,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -qnw -qnw -qnw -qnw -qnw -nAp -uTy -qnw -qnw -xDL -xDL -lif -xvr -oeV -olb -hjk -hjk -awl -mWI -uQd -dJZ -dJZ -dJZ -dJZ -lif -lif -ruw -lif -bXs -bXs -lif -lif -bXs -lif -lif -lif -lif -lif -lif -vFV -vFV -vFV -vFV -bXs -xDL -xDL -bXs -gfN -boJ -uOa -jZz -jZz -xjk -iqT -iso -iso -iso -gSS -bXH -iqT -kvS -dda -dda -dda -kvS -nKA -nKA -nKA -xHC -oqh -rrq -kGQ -kkq -xHC -hDV -smY -pKw -smY -smY -smY -smY -smY -smY -hyn -mFe -ozQ -pms -bXs -bXs -xDL -xDL -lif -tPK -lif -nAp -uTy -uTy -uTy -lNY -nAp -uTy -uTy -uTy -nAp -uTy -nAp -xEi -nAp -nAp -nAp -tBe -xkE -hDi -gcU -okj -gcU -gwL -eai -gwL -hDi -fQB -dZq -bXs -bXs -bXs -rod -bXs -bXs -bXs -gvS -gvS -bXs -bXs -rod -bXs -bXs -bXs -bXs -wdV -wdV -www -vKe -www -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(83,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -qnw -qnw -uqL -qnw -uTy -uTy -qnw -qnw -xDL -xDL -tPK -uQd -uQd -rrJ -pZc -xPW -bcs -uQd -uQd -oPv -bXs -bXs -bXs -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -bXs -xZg -lif -lif -lif -bXs -xDL -xDL -bXs -gfN -eAM -kSL -jZz -jZz -kvS -beY -tLA -bXH -bXH -bXH -iso -iqT -iqT -iqT -aDZ -nKA -nKA -nKA -nKA -kAR -xMw -xMw -xMw -xMw -xMw -xMw -xMw -xMw -xMw -pIT -ahG -ahG -hXw -pKw -smY -hQC -oII -hTa -pms -bXs -bXs -xDL -xDL -xEJ -lif -bXs -bXs -uTy -hDi -gcU -gcU -hDi -nAp -hDi -gcU -lSo -gcU -hDi -bXs -lif -uTy -uTy -ocQ -xkE -xkE -xkE -xkE -xkE -rzl -rzl -rzl -lif -bXs -bXs -fWZ -bXs -bXs -bXs -bXs -rod -bXs -lif -lif -bXs -rod -bXs -bXs -bXs -bXs -bXs -wdV -wdV -www -vKe -www -www -vKe -vKe -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(84,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -cjj -qnw -qnw -qnw -qnw -uTy -qnw -qnw -xDL -xDL -bXs -lif -uQd -uQd -xvr -uQd -uQd -uQd -oPv -tPK -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -dFD -kvS -old -old -gkW -old -old -kvS -uEj -iso -bXH -bXH -iso -iso -iqT -utC -utC -utC -hgj -wte -nKA -hny -xMw -kiI -qNc -qNc -tsI -kuA -sFL -dDV -hOu -cya -tcZ -fIp -wVF -pKw -smY -czT -ePz -ePz -ePz -czT -bXs -xDL -xDL -hDi -gcU -gcU -hDi -bXs -xXs -cke -cke -gcU -uTy -gcU -ubZ -pfP -cke -wEq -lif -bXs -uTy -nAp -lif -xkE -xkE -tbx -vWP -xkE -xkE -xkE -xkE -nAp -bXs -bXs -iBi -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -wdV -www -www -www -vKe -brh -vKe -www -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(85,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -qnw -qnw -uqL -qnw -qnw -vIR -uTy -qnw -qnw -xDL -xDL -xDL -bXs -bXs -xzq -lif -bXs -lif -lif -bXs -xDL -xDL -xDL -xDL -xDL -xDL -lif -lif -bXs -bXs -bXs -lif -lif -bXs -bXs -bXs -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -lif -lif -gfN -nPR -jZz -jZz -jZz -cGK -iqT -iqT -iqT -iqT -iqT -eiu -iqT -utC -uGh -asS -oFw -nKA -nKA -hny -xMw -tkW -tez -rpQ -nXi -nLP -sFL -fRo -vMY -vMY -geB -sFL -wVF -vVI -smY -pLb -hQV -aVL -tAx -pLb -bXs -xDL -xDL -gcU -ubZ -iyr -voW -sCW -gcU -uTy -uTy -iJO -uTy -gcU -cke -cke -chx -mmT -bXs -bXs -uTy -nAp -nAp -pxU -xkE -wAB -dZq -dZq -wAB -dZq -vWP -lif -bXs -bXs -rta -bXs -bXs -rod -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -lif -lif -bXs -bXs -wdV -www -www -www -vKe -brh -vKe -www -wdV -www -wdV -wdV -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(86,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -cjj -cjj -qnw -vIR -uTy -qnw -qnw -qnw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -bXs -bXs -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -lif -lif -bXs -bXs -bXs -lif -bXs -bXs -xDL -xDL -lif -lif -gfN -qvc -uYT -jZz -tiW -gfN -old -old -old -old -ixW -kvS -iqT -utC -eAR -xON -hgj -nKA -bHS -tLJ -xMw -fai -rpQ -cBj -rpQ -nLP -sFL -dEh -dWm -dWm -aFy -sFL -wVF -xQc -smY -dFG -frr -frr -frr -pLb -bXs -xDL -xDL -gcU -hIX -dVD -gcU -ksW -gcU -bGy -uTy -gcU -uTy -hDi -gcU -iJO -gcU -tVv -lif -lif -uTy -uTy -lif -gFp -bXs -bXs -uNR -oTL -xqm -oTL -uNR -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -rod -bXs -rod -bXs -lif -lif -bXs -bXs -wdV -www -www -www -vKe -brh -vKe -www -wdV -www -wdV -wdV -wdV -wdV -wdV -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(87,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -cjj -cjj -qnw -xXs -uTy -cjj -cjj -bXs -qnw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -bXs -bXs -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -lif -hDn -hDn -lif -bXs -gfN -tXv -jZz -jZz -eDh -edc -boJ -boJ -boJ -uOa -jbL -gfN -eBg -hgj -utC -utC -hgj -nIR -bHS -vfK -xMw -gJv -eyB -rpQ -eEP -nLP -sFL -xiK -vJw -vJw -viq -sFL -wVF -pms -pms -pLb -aVL -tAx -eSc -pLb -bXs -xDL -xDL -hDi -gcU -gcU -hDi -nAp -hDi -gcU -gcU -hDi -mAQ -nAp -lif -xXs -lMr -xEi -bXs -xXs -uTy -uTy -bXs -bXs -lif -lif -vCc -kBi -kBi -kBi -vCc -dsO -lif -gFp -bXs -gFp -bXs -bXs -lif -gvS -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -rod -bXs -bXs -wdV -prU -prU -www -brh -vKe -www -prU -www -wdV -wdV -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(88,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -qnw -vIR -uTy -uTy -cjj -cjj -bXs -qnw -bXs -xXs -bXs -lif -lif -bXs -bXs -lif -lif -bXs -bXs -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -lif -xDL -xDL -xDL -bXs -gfN -uWG -jZz -jZz -uWG -gfN -boJ -boJ -boJ -cSb -cSb -gfN -oMz -prL -fjH -jlJ -elw -bHS -smY -yfc -xMw -wHV -uNg -uNg -uNg -kuA -eNK -rsQ -rsQ -sFL -sFL -sFL -wVF -bXs -bXs -czT -ePz -ePz -ePz -czT -bXs -xDL -xDL -lif -dTD -xZg -lif -bXs -nAp -uTy -bXs -ebb -nDW -uTy -hDi -gcU -gcU -hDi -lif -bXs -uTy -nAp -lif -bXs -bXs -lif -vCc -uck -jVr -kBi -vCc -lif -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -bXs -bXs -bXs -lif -lif -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -bXs -bXs -lif -lif -prU -wdV -wdV -www -www -www -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(89,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -qnw -vIR -nAp -uTy -cjj -lif -bXs -bXs -bXs -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -wSN -xKg -xKg -xKg -xKg -xKg -xKg -xKg -xKg -xKg -xKg -xKg -xKg -wSN -ucN -qnw -qnw -qnw -qnw -qnw -bXs -bXs -xDL -xDL -bXs -gfN -iIb -jZz -jZz -wgQ -gfN -boJ -boJ -boJ -boJ -boJ -gfN -aOi -rEh -pql -pql -pql -bHS -smY -hny -xMw -xMw -xMw -xMw -sOn -xMw -xMw -xtl -igN -sFL -sFL -sFL -wVF -bXs -bXs -bXs -bXs -bXs -bXs -bXs -nAp -xDL -xDL -hDi -gcU -gcU -hDi -bXs -uTy -tTP -uTy -uTy -nAp -nAp -gcU -cke -bGy -gcU -lif -bXs -nAp -uTy -lif -bXs -bXs -lif -uNR -vCc -vCc -vCc -uNR -lif -gFp -bXs -bXs -lif -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -gvS -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -gvS -lif -bXs -bXs -bXs -gvS -lif -prU -prU -wdV -www -www -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(90,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -fFz -uTy -nAp -uTy -uTy -uTy -bXs -xEi -cjj -cjj -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -xKg -sVV -sVV -sVV -sVV -qAd -tCi -qAd -lif -sVV -sVV -sVV -sVV -xKg -qnw -qnw -qnw -qnw -qnw -qnw -qnw -bXs -xDL -xDL -lif -gfN -mlS -jZz -uYT -uWG -gfN -old -old -old -old -old -kvS -aOi -rEh -rWn -evu -aif -smY -bHS -eRt -icG -xMw -tyB -alL -kuA -kuA -xMw -xKY -igN -sFL -bQY -tCN -wVF -bXs -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -gcU -qiW -lVz -gcU -dwS -hDi -evu -gcU -gcU -hDi -uTy -evu -cke -wsP -nNx -bXs -bXs -uTy -uTy -lif -bXs -bXs -gFp -lif -lif -gFp -lif -lif -bXs -bXs -bXs -gFp -lif -lif -bXs -rod -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -wdV -wdV -wdV -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(91,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -qfc -qfc -bCh -nAp -nAp -uTy -nAp -uTy -qnw -lif -cjj -bXs -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -xKg -qAd -lif -lif -aHB -lif -lif -lif -lif -jjF -lif -lif -jIU -xKg -qnw -qnw -lif -qnw -qnw -qnw -qnw -lif -xDL -xDL -lif -kvS -old -old -old -old -kvS -uNR -qnM -rEh -qOE -iso -eXb -oMz -rEh -vDw -pYM -lcQ -wuh -pKw -eRt -icG -xMw -xMw -xMw -xMw -pgB -xMw -xMw -xMw -xMw -xMw -xMw -wVF -nAp -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -jaP -gcU -vOf -lGx -hHu -bbX -gcU -cke -cke -hPR -gcU -uTy -gcU -fdZ -onY -lSo -lif -bXs -nAp -uTy -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -rod -bXs -bXs -rod -bXs -rod -bXs -bXs -bXs -wdV -www -www -www -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(92,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -vIR -cjj -cjj -xEi -uTy -vIR -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -xKg -sVV -sVV -sVV -bSm -lif -lif -qeY -lif -sVV -bSm -sVV -sVV -xKg -qnw -qnw -xEi -qnw -qnw -qnw -qnw -lif -xDL -xDL -bXs -bXs -lif -bXs -bXs -bXs -lif -dFD -dFD -dFD -dFD -dFD -dFD -dFD -dFD -pYM -pYM -smY -vWe -qka -jqP -iOI -kup -xMw -vxR -pVQ -pVQ -uGg -xEM -niY -gZt -xMw -xMw -wVF -nAp -xDL -xDL -xDL -xzx -fHF -njU -jaP -jaP -jkx -gkO -qNw -gGu -gcU -bXs -gcU -ivG -ehQ -cke -gcU -nAp -hDi -gcU -gcU -tVv -bXs -uTy -nAp -uTy -bXs -bXs -gFp -bXs -gFp -bXs -bXs -bXs -bXs -gFp -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -bXs -bXs -bXs -rod -bXs -rod -bXs -rod -bXs -rod -bXs -bXs -rod -bXs -bXs -rod -bXs -rod -rod -wdV -www -www -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(93,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -qcp -cjj -cjj -cjj -cjj -nAp -vIR -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -xKg -sVV -sVV -sVV -sVV -fFz -lif -lif -lif -sVV -sVV -bSm -sVV -xKg -qnw -lif -bXs -qnw -qnw -qnw -qnw -lif -xDL -xDL -xDL -xDL -xDL -xDL -xDL -fgY -bXs -bXs -bXs -bXs -bXs -lif -bXs -bXs -bXs -lcQ -smY -lfI -riA -lfI -eRt -hEa -xtl -xvf -eNw -xPH -xPH -pVQ -xEM -xPH -xPH -xEM -jpJ -sTP -nAp -xDL -xDL -fHF -fHF -fHF -xzx -njU -jaP -jkx -hDi -mYL -gcU -hDi -lif -hDi -gcU -lSo -gcU -hDi -nAp -uTy -nAp -nAp -nAp -nAp -bXs -nAp -uTy -bXs -bXs -bXs -lif -lif -bXs -bXs -gFp -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -rod -bXs -rod -bXs -bXs -bXs -lif -lif -lif -bXs -rod -bXs -rod -pfi -nAp -nAp -uTy -uTy -nAp -bXs -lif -lif -bXs -bXs -lif -rod -bXs -wdV -wdV -wdV -www -vKe -www -wdV -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(94,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -qcp -cjj -bXs -qnw -cjj -cjj -nAp -cjj -cjj -qnw -qnw -cjj -bXs -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -xKg -lif -jjF -lif -lif -fFz -lif -bXs -lif -lif -lif -aHB -lif -xKg -qnw -xEi -nAp -qnw -hPt -hPt -hPt -fHF -rCO -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -ayL -bHS -eRt -hEa -xtl -xvf -rXu -xPH -vJF -pVQ -bPq -xPH -xPH -nzu -bXs -roQ -xDL -xDL -xDL -fHF -fHF -xzx -fHF -njU -jkx -jaP -jkx -jkx -rod -lif -lif -lif -gko -lif -xZg -nAp -uTy -hDi -gcU -gcU -hDi -bXs -bXs -nAp -uTy -lif -gFp -bXs -lif -bXs -bXs -bXs -bXs -lif -lif -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -bXs -uTy -uTy -nAp -nAp -nAp -nAp -nAp -nAp -nAp -nAp -nAp -nAp -nAp -nAp -nAp -nAp -nAp -nAp -lif -lif -rod -bXs -bXs -wdV -www -www -www -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(95,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -qnw -qnw -qnw -qcp -vIR -poc -uTy -uTy -cjj -qcp -cjj -cjj -cjj -bXs -qnw -qnw -qnw -qnw -qnw -qnw -qnw -xKg -sVV -bSm -sVV -bSm -lif -rJq -lif -aHB -sVV -bSm -sVV -sVV -xKg -qnw -qnw -uTy -qnw -xmP -hPt -hPt -hPt -fHF -fHF -rCO -rCO -fHF -fHF -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -ayL -smY -jqP -jGc -phf -xMw -aZa -pVQ -ubI -pVQ -xEM -upQ -kWv -xEM -dmy -xDL -xDL -xDL -xDL -fHF -fHF -fHF -fHF -xzx -njU -jkx -jaP -jaP -jkx -lif -hDi -gcU -gcU -hDi -lif -bXs -uTy -evu -cke -gxJ -wEq -bXs -bXs -nAp -uTy -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -lif -gFp -bXs -bXs -bXs -rod -bXs -lif -lif -bXs -uTy -nAp -nAp -nAp -nAp -nAp -lif -bXs -lif -lif -lif -bXs -bXs -lif -lif -bXs -bXs -nAp -nAp -uTy -bXs -bXs -nAp -nAp -lif -lif -rod -wdV -www -www -www -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(96,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -qcp -cjj -cjj -oVT -vIR -uTy -uTy -qnw -qnw -cjj -cjj -cjj -cjj -bXs -qnw -qnw -qnw -qnw -qnw -qnw -xKg -sVV -sVV -sVV -cYF -jjF -lif -bXs -qAd -aHB -sVV -sVV -sVV -xKg -qnw -qnw -nAp -qnw -ftC -hPt -hPt -hPt -hPt -hPt -hPt -hPt -hPt -fHF -rCO -rCO -fHF -fHF -rCO -rCO -fHF -rCO -rCO -rCO -fHF -fHF -uVp -xDL -hPF -hsE -iEZ -iOI -xMw -xMw -xMw -nzu -xMw -xMw -xMw -xMw -xMw -xEM -xDL -xDL -xDL -fHF -fHF -fHF -xzx -fHF -fHF -xzx -fHF -njU -jaP -jaP -jkx -jkx -xEi -xXs -cke -wsP -bXs -nAp -hDi -gcU -cke -cke -lSo -bXs -lif -uTy -uTy -bXs -bXs -bXs -gFp -bXs -bXs -gFp -bXs -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -uTy -nAp -nAp -nAp -bXs -bXs -bXs -bXs -bXs -rod -bXs -lif -rod -uTy -bXs -rod -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -nAp -nAp -lif -bXs -bXs -wdV -www -www -wdV -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(97,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -cjj -cjj -cjj -cjj -cjj -cjj -uTy -uTy -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -xKg -lif -aHB -lif -lif -lif -bXs -rJq -lif -lif -fFz -lif -qAd -rta -lif -qnw -uTy -qnw -hPt -hPt -hPt -hPt -hPt -hPt -gym -hDi -gcU -gcU -hDi -hPt -hPt -hPt -rRw -hPt -hPt -hPt -hPt -hPt -hPt -fHF -uVp -fHF -xDL -hPF -lJr -xoR -dnb -dnb -dnb -xDL -dnb -dnb -dnb -dnb -dnb -lwL -xDL -xDL -xDL -hPt -hPt -fHF -fHF -xzx -fHF -fHF -xzx -njU -njU -jaP -jaP -jkx -jkx -tNP -uTy -gcU -lif -uTy -gcU -oVX -cke -gcU -hDi -bXs -lif -uTy -uTy -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -gFp -bXs -bXs -bXs -rod -bXs -bXs -lif -uTy -nAp -nAp -bXs -lif -bXs -rod -bXs -bXs -rod -bXs -bXs -rod -bXs -nAp -rod -bXs -rod -bXs -bXs -bXs -rod -bXs -bXs -lif -lif -bXs -nAp -rod -bXs -rod -wdV -www -www -wdV -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(98,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -nAp -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -evm -sVV -sVV -bSm -sVV -lif -rJq -lif -jjF -sVV -sVV -sVV -sVV -xKg -qnw -qnw -uTy -qnw -hPt -hPt -hPt -hPt -hPt -hPt -fQM -gcU -hPR -cke -gcU -hPt -hPt -hPt -hPt -fHF -uVp -fHF -hDi -gcU -gcU -gcU -hDi -uVp -hCI -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -hPt -hPt -hPt -fHF -fHF -fHF -fHF -fHF -fHF -fHF -xzx -njU -jaP -jaP -jkx -jkx -xXs -lSo -lif -nAp -gcU -oko -cke -hPR -xpW -bXs -gvS -uTy -nAp -bXs -bXs -lif -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -nAp -nAp -lif -bXs -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -lif -uTy -bXs -rod -bXs -bXs -rod -bXs -bXs -rod -bXs -gvS -bXs -nAp -nAp -lif -bXs -wdV -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(99,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -xEi -qnw -cjj -qnw -qnw -qnw -qnw -qnw -qnw -qnw -ucN -qIm -xKg -xKg -xKg -nsF -wSN -ydC -ydC -wSN -xKg -xKg -xKg -xKg -wSN -qnw -qnw -uTy -bXs -ftC -hPt -hPt -hPt -hPt -rRw -rMM -gcU -cke -ewn -gcU -hPt -xmP -ftC -ftC -ftC -xmP -uVp -gcU -bGy -wsP -wsP -gcU -fHF -noV -rej -fHF -hPt -hPt -hPt -fHF -fHF -hPt -hPt -hPt -hPt -fHF -fHF -hDi -gcU -gcU -gcU -hDi -fHF -fHF -fHF -xzx -fHF -fHF -xzx -fHF -njU -njU -jaP -jaP -jkx -evt -hDi -lif -xEi -hDi -gcU -wEq -gcU -hDi -bXs -bXs -uTy -nAp -lif -bXs -lif -lif -bXs -gFp -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -nAp -nAp -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -rod -nAp -lif -bXs -bXs -rod -bXs -rod -bXs -bXs -bXs -bXs -bXs -lif -nAp -uTy -gvS -wdV -www -vKe -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(100,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uTy -nAp -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -ucN -qnw -qnw -qnw -tJr -qnw -qnw -mAL -qnw -tJr -qnw -qnw -vmC -ilE -vmC -uTy -uTy -vmC -xmP -hPt -hPt -ftC -xmP -hPt -uVp -iBU -cke -cke -gcU -boT -ftC -rCO -rCO -rCO -ftC -rMM -hDi -hDi -ssy -wsP -gcU -hPt -fyZ -opd -hDi -gcU -gcU -gcU -hDi -gcU -gcU -gcU -hDi -fHF -fHF -hPt -gcU -cke -fYS -cke -gcU -rMM -xmP -ftC -fHF -fHF -fHF -xmP -ftC -uVp -njU -njU -jaP -jkx -jkx -rod -lif -bXs -uTy -lif -xEJ -lif -bXs -bXs -lif -nAp -uTy -lif -bXs -gFp -lif -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -rod -bXs -nAp -nAp -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -lif -uTy -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -gvS -bXs -rod -bXs -lif -nAp -nAp -lif -wdV -vKe -brh -vKe -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(101,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uTy -xEi -qnw -qnw -qnw -qnw -qnw -qnw -qnw -vmC -qnw -vmC -vmC -qnw -qnw -qnw -mAL -qnw -qnw -qnw -qnw -jGG -lif -lif -tJr -uTy -lif -lif -hPt -hPt -hPt -hPt -hPt -hPt -hPt -hDi -gcU -nRb -hDi -fHF -ftC -rCO -rCO -rCO -ftC -rMM -fHF -iBU -wsP -wsP -gcU -tVK -fVg -uGG -gcU -sMv -gqY -gqY -gcU -cke -tsO -wkp -gcU -fHF -hDi -gcU -hDi -cke -pru -gqY -gcU -rMM -ftC -hPt -hPt -fHF -xzx -ftC -uVp -rMM -fHF -njU -jaP -jaP -jkx -iNY -lif -hDi -evu -gcU -wEq -hDi -lif -bXs -gvS -nAp -uTy -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -bXs -bXs -nAp -nAp -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -lif -lif -lif -bXs -bXs -rod -nAp -lif -bXs -bXs -rod -bXs -rod -bXs -lif -lif -bXs -bXs -rod -bXs -bXs -nAp -bXs -bXs -wdV -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(102,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uTy -uTy -uTy -xEi -fFz -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -vmC -qnw -mAL -rJq -nAp -nAp -nAp -uTy -uTy -vmC -vmC -uTy -vmC -lif -hPt -hPt -hPt -hPt -hPt -hPt -hPt -rMM -rCO -hPt -fHF -ppM -xmP -ftC -rCO -ftC -xmP -rMM -uVp -hDi -gcU -gcU -hDi -hPt -fHF -ntq -hDi -hDi -ewn -cke -gcU -xxV -cke -wsP -gcU -fHF -gcU -cke -cke -gqY -jYl -ppJ -ndb -rMM -fHF -hPt -hPt -boT -lAJ -ftC -rMM -rMM -gIT -njU -jaP -jkx -jaP -jkx -rod -gcU -cke -cke -bGy -gcU -lif -lif -xEi -nAp -uTy -lif -rod -bXs -bXs -rod -bXs -bXs -rod -bXs -gvS -bXs -bXs -nAp -nAp -nAp -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -lif -bXs -bXs -rod -uTy -bXs -rod -bXs -lif -lif -bXs -bXs -rod -lif -bXs -rod -bXs -bXs -lif -nAp -bXs -rod -wdV -www -www -vKe -vKe -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(103,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -nAp -nAp -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -xEi -bSm -qnw -sVV -xEi -nAp -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -uGB -hPt -hPt -xmP -ftC -ftC -ftC -xmP -rMM -xmP -ftC -ftC -ftC -xmP -rCO -fHF -uVp -fHF -rMM -uVp -hDi -wsP -ifj -gcU -boT -hPt -lvw -pkn -gcU -wsP -cke -dKI -cke -cke -cke -gcU -fHF -hDi -cke -hDi -gcU -gcU -gcU -hDi -rMM -ftC -hPt -hPt -fHF -fHF -xmP -fHF -ftC -xmP -njU -jaP -jkx -jaP -jkx -jkx -gcU -pNI -cke -cke -wEq -bXs -gvS -uTy -uTy -uTy -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -nAp -nAp -uTy -lif -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -rod -bXs -bXs -lif -bXs -bXs -lif -bXs -lif -gvS -lif -rod -bXs -bXs -rod -bXs -bXs -bXs -rod -nAp -bXs -bXs -wdV -www -www -vKe -vKe -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(104,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -cjj -qnw -nAp -nAp -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -nAp -lif -bXs -bXs -bXs -vmC -lif -uTy -uTy -uTy -jGG -hPt -hPt -ftC -fQM -fQM -ool -ftC -rMM -ftC -nDJ -nDJ -nDJ -hDi -gcU -iqN -hDi -uVp -hDi -gcU -hDi -cke -wsP -gcU -hPt -hPt -sTm -eDG -iBU -wsP -wsP -hDi -gcU -rkT -cke -hDi -fHF -rCO -rMM -rMM -rMM -rMM -ntq -rCO -rMM -xmP -ftC -ftC -xmP -rCO -fHF -fHF -iUb -bdM -njU -qkY -xMu -jkx -jaP -xMu -nlc -wEq -lSo -gcU -hDi -lif -nAp -uTy -uTy -uTy -nAp -bXs -rod -bXs -bXs -bXs -xXs -bXs -bXs -nAp -nAp -nAp -uTy -lif -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -rod -bXs -rod -uTy -bXs -rod -bXs -gvS -bXs -bXs -rod -bXs -bXs -bXs -rod -bXs -lif -nAp -lif -bXs -wdV -www -www -vKe -vKe -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(105,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -qnw -qnw -qnw -qnw -qnw -nAp -nAp -nAp -uTy -nAp -xEi -vIR -bSm -qnw -lif -lif -nAp -qnw -qnw -bXs -bXs -lif -nAp -uTy -scu -lQd -fHF -ftC -rMM -tem -ool -ftC -rMM -rCO -nDJ -nDJ -nDJ -gcU -bvw -ewn -gcU -lZD -cke -cke -wsP -ewn -wsP -rkT -gxx -nDJ -rMM -ntq -hDi -gcU -gcU -hDi -ntq -ntq -rMM -uVp -ntq -ntq -uVp -uVp -uVp -rMM -rMM -rMM -rMM -rMM -rMM -uVp -rMM -rMM -uVp -uVp -rMM -wOd -njU -khv -wKF -uTy -jkx -wKF -nGT -uTy -uTy -uTy -uTy -uTy -nAp -uTy -nAp -uTy -uTy -nAp -nAp -bXs -nAp -nAp -nAp -nAp -nAp -nAp -lif -lif -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -nAp -lif -bXs -bXs -bXs -bXs -uTy -bXs -bXs -uTy -bXs -bXs -bXs -uTy -nAp -gvS -bXs -wdV -www -www -www -www -wdV -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(106,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -qnw -qnw -qnw -qnw -qnw -bXs -qnw -qnw -qnw -qnw -qnw -qnw -qnw -tJr -jGG -qnw -qnw -uGB -vmC -vmC -xEi -uTy -rMM -gFa -pYn -xmP -rMM -ftC -ftC -xmP -ebE -xmP -xmP -nDJ -nDJ -gcU -jFA -jYl -ndb -lwu -iBU -cke -cke -cke -bGy -gcU -hPt -muV -bWE -uVp -lQd -suZ -rMM -lQd -uVp -uVp -uVp -uVp -rMM -rMM -fHF -rCO -rCO -fHF -rMM -rMM -uVp -uVp -uVp -rMM -ntq -rMM -ntq -ntq -rMM -wOd -wOd -jaP -khv -uTy -uTy -jkx -nGT -nAp -nAp -nAp -uTy -uTy -uTy -uTy -uTy -uTy -uTy -nAp -uTy -uTy -uTy -uTy -lif -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -rod -uTy -bXs -rod -bXs -rod -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -uTy -nAp -lif -bXs -wdV -www -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(107,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -qnw -qnw -qnw -bXs -bXs -qnw -vmC -qnw -vmC -cjj -lif -qnw -bXs -qnw -jGG -vmC -qnw -qnw -qnw -qnw -lQd -rMM -rMM -rMM -vgG -rMM -rMM -rMM -rMM -ntq -lQd -xmP -ftC -ftC -hDi -gcU -gcU -hDi -kdQ -hDi -gcU -hDi -gcU -gcU -hDi -hvE -uVp -pOA -mNy -uVp -uVp -rMM -uVp -rMM -ntq -ntq -rMM -xmP -ftC -fgN -xmP -ftC -ciJ -ftC -xmP -rMM -xmP -ftC -ciJ -ftC -xmP -rCO -rCO -mJt -oxm -wSv -foR -gHy -mzw -rog -sfJ -eoE -lif -lif -bXs -bXs -bXs -bXs -lif -lif -lif -bXs -lif -lif -lif -bXs -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -bXs -bXs -bXs -bXs -lif -lif -lif -lYx -bXs -bXs -bXs -bXs -rod -bXs -rod -lif -uTy -lif -bXs -bXs -bXs -bXs -rod -bXs -rod -bXs -bXs -bXs -bXs -bXs -nAp -uTy -rod -wdV -www -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(108,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -qnw -qcp -bXs -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -cjj -lif -lif -lif -qnw -qnw -qnw -qnw -uVp -rCO -uFV -rMM -ntq -lQd -lQd -ntq -rMM -rMM -rMM -ntq -ntq -ntq -rMM -rMM -ntq -rMM -aXE -gFa -lQd -uVp -rMM -lQd -rMM -ntq -ebE -ntq -ntq -uVp -rMM -xWC -gxx -boT -ppM -pwc -rMM -ftC -fQM -fQM -ftC -fQM -fQM -fQM -ftC -rMM -ftC -ppM -lAJ -ppM -ftC -hPt -hPt -hPt -njU -foR -foR -sfJ -rog -rog -sfJ -foR -sfJ -sfJ -bXs -rod -bXs -bXs -bXs -lif -bXs -bXs -rod -lif -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -lif -lif -lif -bXs -rod -bXs -bXs -rod -lif -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -bXs -uTy -nAp -dgp -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -rod -lif -nAp -uTy -bXs -bXs -wdV -wdV -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(109,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -nAp -qnw -bXs -bXs -qnw -cjj -cjj -cjj -bXs -qnw -qnw -lif -uSP -vmC -vmC -qnw -qnw -qnw -qnw -fHF -xmP -ftC -ftC -xmP -rzm -nDJ -hPt -xmP -ezJ -rMM -rMM -lQd -uVp -rMM -lQd -uVp -rMM -rMM -aXE -ntq -ljr -rMM -rMM -ntq -lQd -uVp -lQd -xWC -rMM -hDi -gcU -ndb -gcU -hDi -rMM -rMM -rMM -rMM -rMM -ftC -fQM -fQM -fQM -ftC -fHF -tfn -xad -tfn -fHF -ftC -hPt -hPt -hPt -njU -foR -sfJ -sfJ -rog -rog -sfJ -sfJ -foR -sfJ -sfJ -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -bXs -bXs -lif -lif -bXs -bXs -bXs -bXs -bXs -rog -rog -rog -rog -rog -rog -rog -mzw -mzw -rog -sXm -mzw -kRH -mzw -rog -sXm -rog -bXs -rod -bXs -rod -lif -bXs -bXs -bXs -lif -nAp -uTy -lif -bXs -wdV -www -www -wdV -cjj -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(110,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -qnw -qnw -bXs -cjj -cjj -cjj -cjj -cjj -cjj -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -tra -ftC -ouS -rMM -ftC -hPt -hPt -nDJ -hPt -rQJ -xmP -ftC -ftC -xmP -lQd -hDi -gcU -gcU -hDi -aXE -xmP -ftC -ftC -ftC -hDi -gcU -gcU -hDi -sVh -rMM -gcU -hgQ -wsP -gqY -gcU -rMM -xmP -xmP -rMM -rMM -rMM -rMM -fQM -xmP -xmP -rMM -ftC -oEc -ppM -ppM -fHF -hPt -hPt -hPt -njU -foR -sfJ -rog -bOq -rog -sfJ -sfJ -sfJ -foR -sfJ -rog -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -bXs -rod -bXs -bXs -bXs -rog -rog -rog -rog -rog -sfJ -sfJ -sfJ -rog -rog -rog -rog -sXm -rog -rog -sfJ -aTX -sfJ -sfJ -sfJ -sfJ -rog -rog -rog -lif -lif -gvS -bXs -bXs -lif -nAp -uTy -lif -rod -wdV -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(111,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -bXs -nAp -bXs -cjj -cjj -cjj -cjj -cjj -cjj -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -xWC -xWC -rMM -tem -ftC -hPt -hPt -hPt -hPt -rQJ -ftC -nDJ -nDJ -rCO -fHF -gcU -cke -cke -uJf -vJI -ftC -nDJ -nDJ -nDJ -gcU -wsP -wsP -gcU -rMM -gxx -gcU -tsO -ewn -cke -cke -rMM -rMM -rMM -rMM -tem -ftC -yhf -rMM -rMM -rMM -rMM -xmP -fHF -fHF -ftC -ftC -ftC -xmP -fHF -njU -foR -sfJ -sXm -rog -rog -rog -bOD -sfJ -foR -sfJ -sfJ -bXs -rod -bXs -bXs -gvS -lif -bXs -bXs -rod -bXs -bXs -lif -lif -lif -bXs -bXs -bXs -bXs -bXs -bXs -rod -rog -rog -rog -rog -sfJ -sfJ -sfJ -sfJ -sfJ -rog -ncw -rog -rog -rog -sfJ -sfJ -aTX -pEe -foR -foR -vQh -sfJ -sXm -rog -bXs -lif -lif -bXs -bXs -bXs -nAp -uTy -bXs -bXs -wdV -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(112,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cZM -cZM -cZM -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -nAp -xEi -qnw -cjj -bXs -cjj -cjj -cjj -cjj -cjj -cjj -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -fQM -ftC -ool -fQM -fHF -hPt -hPt -hPt -xmP -rQJ -ftC -nDJ -nDJ -ftC -rCO -ndb -ewn -cke -cke -rMM -xmP -xmP -nDJ -nDJ -gcU -ewn -cke -cke -rMM -rMM -hDi -gcU -gcU -gcU -hDi -rMM -xmP -ftC -ftC -fgN -xmP -ftC -ftC -xmP -rMM -hPt -hPt -hPt -ftC -fHF -rMM -hPt -ftC -fHF -njU -foR -sfJ -fCb -rog -bOq -rog -rog -sfJ -foR -sfJ -sfJ -rog -rog -rog -mzw -mzw -lif -lif -rod -bXs -bXs -bXs -lif -lif -lif -rod -bXs -bXs -bXs -bXs -bXs -bXs -rog -rog -mzw -sLW -sfJ -sfJ -sfJ -foR -sfJ -sfJ -rog -rog -rog -sfJ -sfJ -foR -aTX -foR -foR -foR -foR -sfJ -sXm -rog -sXm -rog -bXs -bXs -bXs -rod -nAp -uTy -lif -bXs -wdV -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(113,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cZM -jyY -cZM -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uTy -xEi -cjj -cjj -bXs -qcp -cjj -cjj -cjj -cjj -cjj -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -tra -xmP -ftC -ftC -xmP -hPt -hPt -hPt -uVp -lKj -rCO -nDJ -nDJ -ftC -fHF -gcU -hPR -cke -gcU -rMM -xWC -rCO -nDJ -nDJ -gcU -mKN -sWQ -gcU -fHF -rMM -gcU -wsP -yhE -wsP -gcU -rMM -rMM -fHF -fHF -fHF -fHF -fHF -fHF -fHF -rMM -hPt -hPt -hPt -clF -tem -sVh -fHF -hPt -fHF -njU -foR -foR -sfJ -bOD -rog -rog -fCb -sfJ -foR -sfJ -sfJ -rog -rog -sfJ -rog -rog -mzw -rog -rog -rog -rog -rog -rog -rog -sXm -rog -rog -rog -rog -rog -rog -rog -rog -osA -mzw -sfJ -sfJ -foR -foR -foR -foR -sfJ -sfJ -rog -rog -sfJ -foR -foR -aTX -tPO -foR -foR -foR -vQh -sfJ -rog -rog -rog -bXs -bXs -bXs -bXs -nAp -uTy -bXs -bXs -wdV -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(114,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cZM -xYD -cZM -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -nAp -qnw -qnw -nAp -qnw -cjj -cjj -cjj -cjj -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -gyc -hPt -hPt -hPt -hPt -hPt -hPt -hPt -hPt -uVp -hDi -gcU -gcU -hDi -fHF -hDi -gcU -gcU -hDi -fHF -rMM -xmP -ftC -ftC -hDi -hDi -gcU -hDi -fHF -rMM -rkT -uEt -cke -cke -cke -fHF -rMM -hPt -hDi -gcU -gcU -gcU -hDi -fHF -rMM -hPt -hPt -hPt -clF -rMM -rMM -rMM -ftC -njU -foR -foR -foR -sfJ -sfJ -fCb -rog -sfJ -sfJ -foR -foR -sfJ -rog -rog -sfJ -sfJ -rog -rog -sXm -rog -rog -ncw -rog -rog -rog -rog -rog -rog -rog -rog -sXm -rog -rog -rog -rog -sfJ -sfJ -sfJ -tPO -foR -foR -foR -foR -sfJ -sfJ -rog -sfJ -foR -foR -aTX -fZx -fZx -foR -foR -sfJ -sfJ -sXm -sXm -rog -bXs -rod -bXs -lif -nAp -nAp -rod -bXs -wdV -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(115,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cZM -xYD -cZM -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -tOe -cjj -nAp -lif -bXs -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -fQM -hPt -hPt -hPt -hPt -hPt -hPt -hPt -hPt -fHF -gcU -cke -cke -cke -fHF -fHF -fHF -fHF -fHF -fHF -rMM -fHF -hPt -hPt -hPt -hPt -hPt -hPt -fHF -fQM -gcU -ifj -ert -hDi -hDi -hPt -fHF -hPt -ndb -ert -ert -cke -gcU -ppM -rMM -hPt -hPt -hPt -hPt -hPt -rMM -fHF -njU -njU -foR -foR -foR -sfJ -sfJ -sXm -rog -sfJ -foR -foR -sfJ -sfJ -sXm -rog -sfJ -sfJ -rog -rog -rog -rog -rog -aLP -rog -rog -sfJ -rog -rog -mzw -mzw -rog -sfJ -sfJ -sXm -sXm -rog -sfJ -sfJ -foR -foR -foR -foR -fZx -tPO -sfJ -sfJ -sfJ -sfJ -foR -tPO -aTX -foR -foR -foR -tPO -sfJ -rog -sXm -rog -sXm -bXs -bXs -bXs -lif -bXs -nAp -bXs -bXs -wdV -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(116,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cZM -cZM -cZM -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uTy -ugo -nAp -qnw -qnw -qcp -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -uqL -onX -onX -rMM -fQM -rMM -rMM -rMM -fQM -rMM -rMM -iBU -cke -ewn -gcU -ppM -hDi -gcU -uPQ -gcU -hDi -rMM -ftC -hPt -hPt -hPt -ftC -hPt -fHF -kXd -hPt -hDi -gcU -gcU -hDi -hPt -rRw -hPt -hPt -gcU -sMv -ewn -cke -cke -hPt -rMM -rMM -hPt -hPt -xmP -ftC -ftC -njU -njU -foR -foR -foR -foR -foR -sfJ -sfJ -sXm -sfJ -foR -foR -sfJ -rog -rog -rog -sfJ -sfJ -rog -rog -rog -rog -rog -rog -rog -sfJ -sfJ -rog -rog -mzw -osA -mzw -sfJ -sfJ -sfJ -rog -rog -sfJ -foR -foR -foR -foR -foR -tPO -foR -sfJ -sfJ -sfJ -sfJ -foR -tPO -aTX -pEe -foR -foR -foR -sfJ -sXm -rog -rog -rog -sXm -bXs -bXs -bXs -nAp -nAp -lif -bXs -wdV -www -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(117,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uTy -cjj -xEi -cjj -lif -qnw -qcp -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -qnw -cjj -cjj -onX -fQM -fQM -rMM -rMM -rMM -rMM -rMM -eZE -kXJ -gcU -cke -hPR -ndb -hPt -gcU -cke -ewn -cke -uJf -rMM -xmP -ftC -ftC -ftC -xmP -hPt -hPt -onX -onX -fHF -hPt -hPt -hPt -hPt -hPt -fQM -hPt -hDi -gcU -gcU -gcU -hDi -ppM -ppM -fQM -hPt -hPt -hPt -hPt -njU -njU -foR -foR -foR -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -foR -foR -sfJ -sXm -rog -sXm -sfJ -sfJ -rog -osA -mzw -sfJ -sXm -sfJ -sfJ -sfJ -sLW -rog -rog -rog -rog -sfJ -sfJ -sfJ -sfJ -rog -rog -sfJ -foR -foR -tPO -fZx -foR -foR -foR -foR -foR -foR -foR -foR -fZx -aTX -sfJ -foR -foR -foR -sfJ -sfJ -sXm -rog -rog -rog -bXs -rod -uTy -nAp -bXs -bXs -rod -wdV -www -www -www -wdV -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(118,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uTy -xEi -uTy -qnw -qcp -qnw -qnw -qnw -qnw -cjj -cjj -bXs -qnw -qnw -qnw -cjj -cjj -cjj -cjj -onX -fQM -rMM -onX -gjc -kXJ -kXJ -rMM -fQM -hPt -hDi -gcU -gcU -hDi -hPt -gcU -ceG -cke -cke -gcU -rMM -hPt -hPt -hPt -hPt -hPt -hPt -onX -onX -onX -onX -onX -fHF -hPt -hPt -hPt -fQM -onX -onX -fHF -hPt -hPt -hPt -hPt -hPt -fQM -hPt -hPt -hPt -njU -foR -foR -foR -foR -foR -sfJ -sfJ -sfJ -foR -foR -sfJ -sfJ -foR -foR -sfJ -sXm -rog -rog -sfJ -sfJ -mzw -mzw -mzw -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -rog -rog -sXm -sfJ -sfJ -sfJ -sfJ -rog -rog -rOU -foR -foR -foR -foR -foR -foR -foR -fZx -tPO -foR -foR -foR -sfJ -edL -rog -vQh -foR -foR -foR -sfJ -sfJ -sXm -rog -rog -lif -lif -uTy -nAp -bXs -bXs -bXs -wdV -www -www -www -wdV -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(119,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -nAp -qnw -qnw -qnw -cjj -cjj -cjj -cjj -bXs -qnw -cjj -cjj -cjj -cjj -cjj -onX -rMM -rMM -rMM -kXJ -kXJ -kXJ -kXJ -rMM -onX -fHF -hPt -hPt -hPt -onX -hDi -tqO -tqO -tqO -hDi -rMM -onX -fHF -hPt -onX -onX -onX -onX -onX -onX -onX -onX -onX -fHF -hPt -hPt -onX -onX -onX -onX -onX -onX -onX -hPt -hPt -hPt -hPt -hPt -njU -foR -foR -foR -sfJ -foR -foR -sfJ -sfJ -sfJ -foR -foR -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -rog -rog -rog -rog -sfJ -sfJ -sfJ -sfJ -sfJ -rog -sfJ -sfJ -sfJ -rog -rog -rog -rog -sfJ -sfJ -sfJ -rog -rog -sfJ -sfJ -fZx -foR -tPO -tPO -foR -foR -foR -foR -foR -foR -sfJ -sXm -pHp -rog -sfJ -foR -foR -foR -tPO -sfJ -rog -rog -sXm -lif -lif -uTy -nAp -bXs -rod -bXs -www -vKe -vKe -www -wdV -bXs -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(120,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -onX -rMM -rMM -kXJ -kXJ -kXJ -kXJ -kXJ -kXJ -rMM -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -hPt -hPt -fQM -hPt -hPt -njU -foR -foR -sfJ -sfJ -foR -foR -foR -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -rog -sXm -rog -sfJ -sLW -sfJ -rog -rog -rog -rog -rog -rog -rog -rog -rog -rog -rog -sfJ -sfJ -rog -rog -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -edL -mtc -sfJ -foR -foR -foR -foR -sfJ -edL -rog -sfJ -foR -foR -foR -foR -sfJ -sXm -rog -rog -rod -bXs -uTy -nAp -bXs -bXs -wdV -vKe -brh -vKe -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(121,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -onX -onX -onX -kXJ -kXJ -kXJ -kXJ -kXJ -kXJ -rMM -rMM -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -hPt -hPt -hPt -njU -foR -sfJ -sfJ -sfJ -foR -foR -foR -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -foR -foR -foR -foR -foR -sfJ -rog -rog -rog -sfJ -sfJ -rog -sXm -sfJ -sfJ -sfJ -sfJ -sfJ -rog -rog -rog -rog -rog -rog -rog -sXm -sfJ -fZx -tPO -sfJ -sfJ -qel -cwV -edL -edL -keH -keH -keH -keH -keH -keH -sfJ -foR -tPO -foR -foR -foR -sfJ -vQh -sXm -rog -bXs -bXs -bXs -nAp -bXs -bXs -wdV -www -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(122,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -onX -onX -onX -rMM -kXJ -kXJ -kXJ -kXJ -kXJ -rMM -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -fHF -hPt -hPt -hPt -hPt -njU -foR -sfJ -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -foR -foR -foR -foR -foR -sfJ -sfJ -sXm -rog -sfJ -rog -rog -rog -sfJ -foR -foR -foR -sfJ -sfJ -sXm -rog -rog -rog -rog -rog -sfJ -sfJ -foR -foR -foR -vQh -aEJ -aEJ -lVj -aEJ -aEJ -aEJ -tPO -tPO -foR -foR -tPO -foR -foR -foR -foR -tPO -foR -sfJ -osA -rog -sXm -bXs -lif -nAp -bXs -rod -wdV -rQE -www -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(123,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -onX -onX -onX -rMM -rMM -rMM -onX -rMM -rMM -rMM -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -hPt -hPt -hPt -njU -foR -sfJ -sfJ -sfJ -sfJ -foR -sfJ -sfJ -sfJ -sfJ -foR -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -foR -foR -sfJ -sfJ -rog -rog -rog -sXm -sfJ -sfJ -foR -foR -foR -foR -foR -sfJ -sfJ -sXm -rog -sXm -rog -sfJ -foR -foR -foR -foR -sLW -aEJ -kel -uJD -yjO -dsM -aEJ -vQh -foR -foR -foR -gzS -foR -foR -foR -foR -foR -foR -sfJ -osA -rog -mzw -bXs -lif -uTy -lif -bXs -prU -prU -wdV -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(124,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -onX -onX -onX -onX -rMM -onX -onX -onX -rMM -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -hPt -hPt -hPt -njU -foR -sfJ -sfJ -sfJ -sfJ -foR -sfJ -sfJ -sfJ -sfJ -foR -foR -foR -foR -sfJ -sfJ -sfJ -sfJ -sfJ -foR -foR -sfJ -sfJ -rog -rog -sfJ -sfJ -foR -foR -foR -foR -foR -foR -foR -sfJ -sfJ -sLW -sfJ -sfJ -sfJ -foR -foR -foR -foR -sfJ -aEJ -aan -uBG -uJD -uJD -bXK -sfJ -foR -foR -foR -foR -foR -foR -foR -foR -foR -vQh -sfJ -osA -mzw -osA -mzw -kRH -edL -mzw -mzw -osA -mzw -jGA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(125,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -hPt -hPt -njU -njU -foR -sfJ -sfJ -sfJ -sfJ -foR -sfJ -sfJ -sfJ -sfJ -foR -foR -foR -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -foR -sfJ -sfJ -sXm -sfJ -sfJ -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -tPO -foR -sfJ -aEJ -ikR -uJD -uJD -lJT -aEJ -sLW -foR -foR -foR -tPO -foR -foR -foR -tPO -foR -sfJ -sfJ -jGA -jGA -mzw -mzw -kRH -aTX -mzw -sfJ -mzw -sfJ -jGA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(126,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -hPt -njU -foR -foR -sfJ -sfJ -sfJ -sfJ -foR -sfJ -sfJ -sfJ -sfJ -sfJ -foR -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -foR -sfJ -sfJ -sfJ -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -sfJ -aEJ -aEJ -aEJ -aEJ -aEJ -aEJ -foR -foR -foR -foR -tPO -tPO -foR -tPO -foR -foR -sfJ -jGA -jGA -jGA -sfJ -mzw -aTX -aTX -mzw -sfJ -sfJ -sfJ -jGA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(127,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -hPt -njU -foR -foR -sfJ -sfJ -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -foR -sfJ -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -tPO -foR -tPO -foR -tPO -sfJ -sfJ -sLW -sfJ -tPO -foR -foR -foR -tPO -tPO -tPO -foR -foR -foR -sfJ -jGA -jGA -jGA -jGA -sLW -sfJ -aTX -aTX -sfJ -sfJ -sfJ -jGA -jGA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} -(128,1,2) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -onX -njU -foR -foR -sfJ -sfJ -sfJ -sfJ -foR -foR -sfJ -sfJ -sfJ -sfJ -foR -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -sfJ -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -foR -tPO -foR -tPO -foR -foR -tPO -foR -tPO -foR -tPO -foR -foR -foR -tPO -foR -sfJ -jGA -jGA -jGA -jGA -jGA -jGA -sfJ -rZj -rZj -sfJ -sfJ -jGA -jGA -jGA -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -"} - -(1,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(2,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(3,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(4,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(5,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(6,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(7,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -vRF -vRF -vRF -vRF -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(8,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -vRF -vRF -vRF -uXy -kLA -vRF -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -rGj -rGj -jCP -jCP -jCP -jCP -jCP -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(9,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -jCP -jCP -jCP -jCP -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -jCP -jCP -vRF -ifq -wCA -baQ -kLA -kLA -vRF -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -hTZ -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(10,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -rGj -jCP -jCP -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -vRF -hqR -qmK -rxI -kLA -kLA -vRF -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -hTZ -hTZ -hTZ -hTZ -hTZ -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -hUT -hUT -hUT -hUT -hUT -rGj -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -iLF -iLF -jCP -jCP -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(11,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -vRF -vRF -kLA -kLA -kLA -vRF -vRF -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -hTZ -rGj -hTZ -rGj -hTZ -hTZ -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -jCP -jCP -jCP -jCP -jCP -esl -esl -iLF -esl -eDT -iLF -jCP -jCP -jaf -jaf -jaf -jaf -jaf -jaf -jaf -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(12,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -vRF -vRF -kLA -vRF -vRF -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -hTZ -hTZ -hTZ -rGj -hTZ -hTZ -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -rGj -esl -eDT -iLF -iLF -iLF -iLF -iXr -jCP -jaf -jaf -jaf -jaf -jaf -jaf -jaf -cZs -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(13,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -vRF -vRF -vRF -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -iLF -eDT -iLF -esl -eDT -iXr -iXr -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cZs -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(14,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -xDL -xDL -tpB -uRR -urE -urE -xDL -tpB -tpB -uRR -urE -xDL -xDL -xDL -tpB -tpB -uRR -xDL -urE -xDL -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -iLF -iLF -iLF -iXr -esl -eDT -iXr -esl -esl -eDT -esl -iLF -jCP -jCP -jCP -cZs -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(15,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -xDL -tpB -tpB -uRR -urE -urE -xDL -tpB -tpB -uRR -urE -urE -xDL -xDL -tpB -xDL -xDL -xDL -urE -xDL -qqw -qqw -qqw -rGj -bOb -rGj -bOb -rGj -bOb -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -eDT -iLF -iLF -eDT -iXr -esl -esl -eDT -esl -esl -esl -esl -eDT -iLF -fDW -jCP -jaf -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(16,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -xDL -tpB -tpB -uRR -urE -urE -xDL -tpB -tpB -uRR -urE -urE -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -rGj -bOb -rGj -rGj -rGj -bOb -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -iLF -iLF -iLF -esl -eDT -iXr -esl -iLF -esl -koX -koX -iLF -esl -esl -iLF -fDW -jaf -sNy -cZs -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(17,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -xDL -xDL -xDL -xDL -qqw -qqw -xDL -tpB -tpB -evX -urE -urE -xDL -tpB -tpB -evX -urE -urE -xDL -xDL -tpB -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -lXz -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -eDT -iLF -iLF -iXr -iXr -esl -koX -npJ -npJ -npJ -npJ -koX -eDT -esl -eDT -fDW -jaf -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(18,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -urE -urE -urE -xDL -qqw -qqw -xDL -tpB -tpB -evX -urE -urE -xDL -tpB -tpB -evX -urE -urE -xDL -xDL -tpB -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -hTZ -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -eDT -esl -iLF -iLF -esl -eDT -esl -esl -koX -npJ -esl -esl -esl -npJ -koX -koX -npJ -jCP -jaf -sNy -sNy -sNy -cZs -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(19,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -urE -urE -urE -xDL -qqw -qqw -xDL -xDL -tpB -evX -urE -urE -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -hTZ -hTZ -rGj -hTZ -hTZ -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mqb -mqb -mqb -mqb -mqb -mqb -mqb -mqb -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -eDT -iLF -iXr -iXr -esl -npJ -esl -esl -esl -esl -esl -koX -koX -iLF -iLF -fDW -jaf -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(20,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -urE -urE -urE -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mqb -xEE -xEE -xEE -xEE -xEE -xEE -mqb -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -jcv -qqw -qqw -qqw -qqw -jcv -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -esl -eDT -esl -iLF -iLF -iXr -esl -eDT -koX -esl -esl -jCP -eDT -iXr -esl -npJ -eDT -iLF -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(21,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -xDL -xDL -xDL -xDL -xDL -uRR -uRR -uRR -uRR -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mqb -xEE -mqb -xEE -xEE -xEE -xEE -mqb -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -esl -esl -iLF -iLF -iLF -eDT -esl -esl -cce -esl -iXr -jCP -jCP -iXr -esl -npJ -esl -jCP -jCP -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(22,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -xDL -tpB -tpB -uRR -uRR -uRR -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mqb -mLJ -mLJ -mLJ -mLJ -mLJ -mLJ -mqb -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -esl -eDT -esl -eDT -iXr -iXr -esl -iXr -rGj -iXr -jCP -jCP -jCP -esl -koX -npJ -esl -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(23,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -xDL -tpB -tpB -tpB -uRR -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mqb -mLJ -mLJ -mLJ -mqb -mLJ -mLJ -mqb -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -jcv -qqw -qqw -qqw -qqw -jcv -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -esl -esl -iLF -esl -iLF -eDT -esl -rGj -rGj -esl -iXr -jCP -jCP -esl -npJ -esl -eDT -jCP -jCP -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(24,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -xDL -tpB -tpB -evX -urE -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mqb -mqb -mqb -mqb -mqb -mqb -mqb -mqb -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -esl -esl -eDT -iLF -iXr -esl -esl -rGj -rGj -fNw -iXr -jCP -jCP -esl -koX -iXr -iXr -jCP -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(25,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -xDL -tpB -evX -evX -evX -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -eDT -esl -iXr -rGj -rGj -rGj -iXr -jCP -jCP -jCP -esl -koX -iXr -iXr -eDT -jCP -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(26,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -xDL -xDL -evX -evX -evX -evX -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -eDT -iXr -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -iXr -esl -npJ -iXr -iXr -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -ahS -nXA -eEa -ahS -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(27,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -uRR -uRR -uRR -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -urE -urE -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -iXr -eDT -koX -koX -iXr -jCP -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -nXA -eEa -nXA -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(28,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -qqw -qqw -qqw -xDL -tpB -tpB -uRR -urE -urE -xDL -tpB -tpB -uRR -urE -urE -xDL -xDL -xDL -uRR -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -urE -urE -urE -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -iXr -iXr -esl -koX -eDT -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -nXA -nXA -oqz -nXA -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(29,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -qqw -qqw -qqw -xDL -tpB -tpB -uRR -urE -urE -xDL -tpB -tpB -uRR -urE -urE -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -urE -urE -urE -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -fDW -iXr -iXr -koX -iXr -fDW -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -ahS -nXA -eEa -ahS -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(30,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -qqw -qqw -qqw -xDL -tpB -tpB -evX -urE -urE -xDL -tpB -tpB -xyY -urE -urE -evX -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -urE -urE -urE -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -fDW -iXr -fJz -fDW -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(31,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -qqw -qqw -qqw -xDL -tpB -tpB -evX -urE -urE -xDL -tpB -tpB -evX -urE -urE -evX -evX -evX -evX -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -urE -urE -xDL -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -jaf -jaf -jaf -sNy -jaf -jaf -jaf -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(32,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -tpB -tpB -evX -urE -urE -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -urE -urE -urE -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(33,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -jaf -jaf -sNy -jaf -jaf -jaf -jaf -jaf -jaf -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(34,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jaf -qhw -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(35,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -jCP -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -ahS -srr -ahS -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(36,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -esl -esl -esl -jCP -jaf -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -hDZ -nXA -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(37,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -oGx -fbL -oGx -fbL -oGx -fbL -oGx -fbL -ekO -aHN -ekO -aHN -ekO -aHN -ekO -aHN -ekO -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -ahS -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(38,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oGx -qxN -qxN -qxN -qxN -qxN -qxN -qxN -dZv -pyU -pyU -pyU -pyU -pyU -pyU -pyU -pyU -pyU -ekO -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jaf -jaf -jaf -sNy -sNy -jaf -jaf -jaf -jaf -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(39,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -fbL -kwX -cfM -cfM -cfM -cfM -cfM -epf -wfc -kmF -kmF -kmF -kmF -kmF -kmF -kmF -gpy -pyU -aHN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -esl -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(40,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -bXs -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -oGx -bvj -aCN -aCN -aCN -aCN -aCN -plJ -wce -tLH -eXI -tLH -tLH -tLH -tLH -tLH -fWC -pyU -aHN -ekO -aHN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(41,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -oGx -fbL -oGx -fbL -oGx -fbL -bvj -aCN -aCN -aCN -aCN -aCN -mvj -vpV -tLH -tLH -tLH -tLH -tLH -tLH -tLH -fWC -pyU -pyU -pyU -iGU -ekO -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -tpB -tpB -xDL -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -jCP -jCP -jCP -jCP -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(42,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -bXs -wdV -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oGx -qxN -qxN -qxN -qxN -qxN -qxN -bvj -qqw -qqw -qqw -qqw -qqw -mjl -pyU -roR -eXI -roR -roR -roR -roR -rFa -jLa -kKg -kKg -nUi -pyU -pyU -aHN -qqw -qqw -qqw -qqw -qqw -qqw -xDL -tpB -xDL -xDL -xDL -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -bYY -jCP -jCP -jCP -jaf -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(43,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -wdV -rIo -bXs -bXs -bXs -nAp -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -fbL -fbL -kwX -eMo -eMo -ftR -ftR -ftR -mPQ -qqw -qqw -qqw -qqw -qqw -mjl -pyU -roR -roR -roR -roR -roR -roR -rFa -rFa -xvb -xvb -vYp -nUi -pyU -ekO -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -tpB -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -koX -bYY -jCP -jCP -jaf -jaf -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(44,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -uzs -tdl -tdl -uzs -tdl -bfK -tdl -uzs -wdV -bXs -wdV -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vzv -heO -bvj -eqM -sIe -sIe -sIe -sIe -eZF -qqw -qqw -qqw -qqw -qqw -qLY -pyU -roR -roR -roR -roR -roR -roR -rFa -rFa -xvb -xvb -aUr -uKI -pyU -aHN -oGx -fbL -oGx -fbL -aCN -qqw -xDL -xDL -xDL -urE -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -pzV -pzV -npJ -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -esl -esl -bYY -jCP -jCP -jaf -jaf -jaf -sNy -sNy -sNy -cZs -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(45,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -tdl -uzs -oaV -tdl -dYM -iEP -lTO -tdl -tUC -xEi -bXs -jlO -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -czT -ePz -ePz -ePz -ePz -czT -cZj -oFq -sIe -sIe -sIe -sIe -sIe -fxC -qqw -qqw -qqw -qqw -qqw -ydz -ydz -wTk -pod -ydz -ydz -ydz -ydz -ydz -ydz -eXI -xvb -aUr -uKI -pyU -pyU -qxN -qxN -qxN -nSF -oGx -qqw -xDL -tpB -tpB -tpB -urE -urE -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -pzV -pzV -esl -esl -esl -esl -npJ -esl -esl -esl -esl -esl -esl -esl -jCP -jCP -jaf -jaf -jaf -jaf -cZs -jaf -cZs -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(46,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -tdl -wHs -iEP -tdl -ovm -iEP -iEP -tdl -lif -wdV -bXs -xEi -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -pLb -sbg -jDX -mBr -mBr -pLb -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -ydz -ydz -wTk -pod -ydz -ydz -ydz -ydz -ydz -ydz -xvb -xvb -aUr -vYp -cMu -xcg -xcg -xcg -xcg -cMu -uNR -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -pzV -pzV -esl -bYY -esl -koX -esl -esl -jCP -uZo -jCP -bYY -esl -bYY -jCP -jCP -jaf -jaf -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(47,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -tdl -iEP -iEP -dJH -qJn -iEP -iOR -mGa -xEi -ccp -uTy -lif -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -pLb -dOQ -qZV -nCg -jiZ -pLb -uAc -uAc -rsP -wvR -xLU -xLU -xLU -xLU -xLU -xLU -xLU -ydO -hPb -iwS -rPQ -qiP -wjq -eXI -wjq -wjq -wjq -ydz -ydz -xvb -xvb -aUr -aUr -fxT -oTB -cli -lsi -xiI -fxT -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -pzV -pzV -esl -esl -esl -npJ -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(48,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -uzs -tdl -tdl -lpf -wbP -iEP -cmQ -uzs -ptr -bXs -gTE -jlO -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -tRx -vFV -vFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -pLb -dOQ -qZV -kVX -jiZ -pLb -aCN -aCN -xgL -wvR -mbn -rAW -rAW -iYv -rAW -rAW -mbn -ydO -aCN -ydz -jAK -qUm -wjq -wjq -wjq -qUm -dmx -ydz -ydz -xvb -xvb -aUr -aUr -fxT -hvr -sFy -cli -grD -fxT -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -tYk -npJ -koX -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -jaf -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(49,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -kxd -lFX -ryq -xDL -tdl -bvE -iEP -iOR -tdl -ccp -xEi -bXs -xEi -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -vFV -tRx -vFV -qqw -vFV -szB -nDD -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vFV -euy -qDJ -qDJ -eOG -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -pLb -dOQ -qZV -kVX -jiZ -pLb -aCN -wvR -dBF -wvR -hUy -sme -xvK -xPs -oXi -kiP -hUy -ydO -aCN -ikx -kGq -wjq -wjq -wjq -wjq -wjq -qcx -iwS -iwS -xvb -xvb -aUr -aUr -fxT -bJv -cli -sFy -cli -fxT -qqw -qqw -qqw -qqw -qqw -udN -uNR -vCc -uNR -udN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -npJ -esl -esl -esl -esl -esl -jCP -jCP -jaf -sNy -jaf -jaf -jaf -jaf -jaf -jaf -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(50,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -oxH -uTy -eyx -tdl -ncu -iEP -iEP -tdl -xXs -bXs -gTE -wdV -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -fBu -fBu -vFV -vFV -vFV -bxU -xPz -vFV -bRB -njK -mVM -fpV -czi -bzx -vFV -ski -fBu -vFV -aJh -rlr -rlr -mOs -vFV -tRx -vFV -vFV -aCN -aCN -aCN -aCN -aCN -aCN -pLb -dOQ -qZV -kVX -jiZ -pLb -aCN -wvR -mbn -iYv -dvI -viY -xvK -xvK -xvK -xvK -hUy -ydO -aCN -ikx -ceL -xvb -xvb -oTq -aUr -aUr -dCj -ydz -ydz -ydz -ydz -ydz -ydz -fxT -ecu -cCc -lzE -cCc -fxT -qqw -qqw -qqw -qqw -qqw -uNR -gfp -gfp -gfp -uNR -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -esl -esl -jCP -jCP -sNy -aRU -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jaf -jaf -jaf -jaf -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(51,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -lif -uTy -bXs -uzs -tdl -rvM -tdl -uzs -lif -bXs -gTE -xEi -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tRx -hLI -fBu -vFV -hNx -vFV -vFV -kmL -vFV -cSd -fws -vyP -vyP -vyP -njK -vFV -xVh -hMK -vFV -gdJ -wox -nnr -qSl -vFV -hLI -fBu -vFV -dxA -dxA -dxA -dxA -dxA -dxA -pLb -dOQ -qZV -xQe -jiZ -pLb -aCN -wvR -hUy -gjU -amo -ooJ -ooJ -kPs -kdG -ooJ -hUy -ydO -aCN -ikx -nva -rFa -iZa -rFa -rFa -rFa -weW -ydz -ydz -ydz -ydz -ydz -ydz -cMu -xcg -xcg -atE -xcg -cMu -fbL -qqw -qqw -qqw -qqw -vCc -frM -mNU -gfp -vCc -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -hDi -gcU -gcU -gcU -gcU -hDi -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -esl -esl -jCP -jCP -jaf -jaf -jaf -sNy -jaf -sNy -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(52,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -wdV -bXs -uTy -lif -lif -uTy -bXs -bXs -bXs -bXs -jlO -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -vFV -vFV -vFV -xPz -xDk -wox -wox -vFV -sOZ -njK -vyP -vyP -vyP -njK -vFV -vAZ -xPz -vFV -vFV -qcq -ibq -vFV -vFV -fBu -fBu -vFV -aCN -aCN -aCN -aCN -aCN -aCN -czT -ePz -ePz -ePz -mEN -czT -aCN -wvR -hUy -pMg -dvI -rAW -rAW -dvI -rAW -lcf -hUy -ydO -aCN -ydz -oIO -jVk -rFa -rFa -rFa -jVk -mVX -aUr -aUr -aUr -aUr -ydz -ydz -aCN -aCN -wcF -wcF -rmY -dSQ -fbL -qqw -qqw -qqw -qqw -uNR -gfp -gfp -gfp -uNR -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -cnv -pAW -iMD -uTU -gcU -qqw -qqw -qqw -qqw -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -npJ -esl -esl -esl -esl -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(53,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -wdV -bXs -nAp -uTy -bXs -lif -oJQ -bXs -xEi -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -uST -wyL -njK -njK -vFV -wox -wox -vdO -kXc -njK -vuG -qfi -elO -bRB -vFV -onS -xPz -vFV -oXq -xPz -xPz -kCq -vFV -fBu -vFV -vFV -qqw -qqw -qqw -qqw -qqw -qqw -mpi -aCN -pfY -lta -lNV -aHT -aCN -wvR -mbn -rAW -aJP -icN -xvK -ooJ -uJt -ooJ -hUy -ydO -aCN -ydz -rFa -rFa -rFa -ydz -ydz -ydz -ydz -ydz -ydz -ydz -wjq -wjq -wjq -act -aCN -wcF -wcF -rmY -qxN -oGx -qqw -qqw -qqw -qqw -lBv -uNR -vCc -uNR -lBv -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -pAW -pAW -pAW -dXC -gcU -qqw -qqw -qqw -qqw -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -esl -rGj -esl -esl -esl -esl -esl -esl -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -esl -esl -esl -esl -esl -esl -esl -esl -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(54,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -bXs -wdV -bXs -bXs -uTy -bXs -lif -bXs -jlO -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -cRp -njK -njK -njK -vFV -feU -wox -vdO -vFV -xDk -vFV -vFV -vFV -vFV -vFV -irY -xPz -vFV -sLX -xPz -cBk -hEl -vFV -ybg -tsd -qqw -qqw -qqw -qqw -qqw -qqw -mpi -mpi -aCN -jtc -lta -vgI -aHT -aCN -wvR -jWB -hUy -sue -icN -xvK -ooJ -xnm -ooJ -iYv -ydO -aCN -ydz -ydz -ydz -pod -ydz -kmR -gcr -gcr -kmR -bmc -bmc -bmc -bmc -kmR -dxA -aCN -wcF -wcF -rmY -qxN -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -dXC -pAW -pAW -him -gcU -xDL -xDL -xDL -qqw -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -esl -esl -esl -esl -esl -jCP -jCP -jCP -esl -esl -esl -esl -esl -rGj -rGj -rGj -rGj -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(55,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -wdV -gko -bXs -uTy -bXs -bXs -bld -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -uOM -wkj -njK -njK -vFV -wox -wox -vyP -vyP -vyP -vyP -iwd -vyP -vyP -vyP -xPz -xPz -kxy -wGw -xPz -xPz -djR -vFV -ybg -bNO -qqw -qqw -qqw -qqw -qqw -qqw -mpi -aCN -aCN -wvR -eVX -mEN -hyL -dZd -eVX -wAo -hUy -xRk -dvI -cHm -ygv -ajU -pfh -iYv -ydO -aCN -dxA -kmR -bmc -bmc -bmc -kmR -mxj -uxm -wnB -dOs -aPD -tWr -sjG -wnB -dxA -aCN -wcF -wcF -rmY -qxN -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -dXC -pAW -pAW -dXC -gcU -urE -urE -xDL -qqw -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -esl -esl -esl -esl -esl -esl -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -jCP -jCP -jCP -jCP -jCP -"} -(56,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -wdV -bXs -bXs -bXs -nAp -ijC -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -mFn -njK -njK -njK -vFV -wox -wox -vyP -vyP -aQL -vyP -vyP -vyP -vyP -aQL -bmA -xPz -vFV -lHd -siG -siG -isc -vFV -ybg -tsd -qqw -qqw -qqw -qqw -qqw -qqw -mpi -aCN -wvR -wvR -nnB -gIB -eSn -vAP -dZd -wAo -hUy -xvK -tLe -xvK -ygv -dEv -dvp -hUy -ydO -aCN -dxA -wnB -rqU -oDe -afZ -wnB -lCP -lCP -aMC -cwI -cwI -cwI -gqM -wnB -dxA -aCN -wcF -bic -xde -meq -qxN -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eDW -urM -pAW -pAW -urM -eLe -urE -urE -xDL -qqw -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -esl -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -jCP -jCP -"} -(57,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -wdV -bXs -bXs -bXs -gTE -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -ufN -njK -rDc -njK -vFV -uUT -wox -vFV -vFV -vFV -vFV -jUp -jUp -vFV -vFV -vFV -vFV -vFV -wJv -eqm -aUj -vFV -vFV -ybg -bNO -qqw -qqw -qqw -qqw -qqw -qqw -mpi -aCN -wvR -heX -mNk -wUf -aIR -heB -dZd -vWk -mbn -iYv -rAW -rAW -rAW -rAW -rAW -mbn -ydO -bdl -dxA -wnB -lCP -lCP -lCP -xuD -lCP -lCP -wnB -rGX -aPD -hDd -aPD -wnB -dxA -aCN -wvR -wvR -gAg -nzO -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -urM -pAW -pAW -ghW -gcU -urE -urE -xDL -qqw -xDL -fRw -fRw -htQ -htQ -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(58,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -wdV -lif -bXs -fnd -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -vFV -vFV -vFV -peE -njK -xyF -vFV -wox -wox -vFV -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -vFV -vFV -vFV -vFV -vFV -tPn -ybg -tsd -qqw -qqw -qqw -qqw -qqw -qqw -eVX -dZd -dZd -dZd -uda -teO -teO -teO -dZd -wvR -sIe -sIe -sIe -jbv -sIe -sIe -sIe -sIe -ydO -aCN -dxA -wnB -uwk -uwk -gzx -wnB -lCP -mXW -kmR -bmc -bmc -bmc -bmc -kmR -dxA -aCN -wvR -wvR -wvR -aYz -qxN -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -kqA -kqA -kqA -kqA -gcU -urE -urE -xDL -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(59,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -wdV -wdV -lif -lif -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -yex -xPz -umU -siG -siG -nTd -vFV -kVZ -wox -jUp -ybg -pkE -uwC -uwC -uwC -uwC -uwC -quA -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -bNO -qqw -qqw -qqw -qqw -qqw -qqw -dZd -bsq -teO -dZd -emS -awD -awD -kRE -acA -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -dxA -kJB -uwk -sDG -tYZ -wnB -nSX -lCP -ugq -tEi -wnB -xfl -uWg -wnB -dxA -aCN -qQz -aCN -wvR -nzO -qxN -fbL -oGx -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oRq -kqA -kqA -kqA -kqA -gcU -urE -urE -xDL -qqw -xDL -jon -jon -jon -jon -jon -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -jCP -jCP -jCP -jCP -jCP -"} -(60,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -wdV -wdV -lif -wdV -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tRx -szB -oZR -vFV -tmk -goV -bCV -vFV -wox -wox -vFV -hYf -qqw -qqw -qqw -qqw -qqw -qqw -bpv -uwC -uwC -uwC -uwC -uwC -uwC -quA -ybg -tsd -qqw -qqw -qqw -qqw -qqw -qqw -dZd -fWf -teO -aBw -awD -awD -awD -oYu -dZd -eQe -eQe -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -dxA -wnB -uwk -uwk -aEU -wnB -ibE -lCP -ugq -tEi -lRy -vmg -uWg -ebW -aCN -aCN -wvR -wvR -wvR -nzO -qxN -qwa -rye -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -kqA -kqA -kqA -kqA -gcU -urE -urE -xDL -qqw -xDL -jon -jon -jon -jon -jon -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -jCP -jCP -jCP -jCP -jCP -"} -(61,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -prU -wdV -bXs -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vfi -vFV -vFV -vFV -vFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -vFV -fBu -vFV -vFV -qqw -qqw -qqw -qqw -qqw -eVX -dZd -dZd -dZd -weF -awD -awD -fHU -dZd -eQe -eQe -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -dxA -wnB -cGL -pBo -pwX -wnB -eDs -jDn -mqm -mqm -xec -vta -dSD -ebW -dxA -aCN -qQz -wvR -wvR -nzO -qxN -jCI -jbx -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -kqA -kqA -kqA -kqA -gcU -urE -urE -xDL -qqw -xDL -rEu -jon -rEu -jon -rEu -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -jCP -jCP -jCP -jCP -jCP -"} -(62,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -lif -wdV -bXs -prU -lif -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -ssC -ssC -ssC -ssC -ssC -ssC -ssC -ssC -ssC -ssC -ycC -llW -udT -vFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -byJ -fBu -qhX -vFV -dxA -dxA -dxA -dxA -dxA -mpi -aCN -wvR -dZd -iNR -onA -awD -elL -dZd -iIc -eQe -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -dxA -kmR -gcr -bmc -bmc -kmR -gcr -arD -gcr -gcr -kmR -kmR -yeS -wnB -dxA -aCN -wvR -wvR -wvR -nzO -wdq -qxN -aBS -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -kqA -kqA -kqA -kqA -gcU -urE -urE -xDL -qqw -xDL -rEu -rEu -rEu -rEu -rEu -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -jCP -jCP -jCP -jCP -jCP -"} -(63,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -prU -wdV -wEg -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -xPz -lOD -efH -efH -vFV -efH -lOD -efH -vFV -efH -jFh -ncE -xPz -vFV -vFV -qDJ -eOG -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -hLI -fBu -fBu -tRx -aCN -aCN -aCN -aCN -ygD -aCN -aCN -wvR -eVX -dZd -dZd -hyL -dZd -eVX -iIc -iIc -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wnB -pEH -lCP -wnB -dxA -aCN -wvR -wvR -wvR -nzO -fbL -qxN -fbL -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -tGf -kqA -kqA -kqA -gcU -urE -urE -xDL -qqw -xDL -xDL -rEu -rEu -rEu -rEu -xDL -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -"} -(64,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -wdV -prU -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -xPz -jkt -llW -llW -llW -dST -jkt -llW -llW -llW -oMB -xPz -xPz -vFV -wox -rlr -gjb -eOG -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -vFV -fBu -fBu -vFV -ejJ -ejJ -ejJ -ejJ -ejJ -ejJ -ejJ -wvR -sIe -sIe -sIe -sIe -sIe -sIe -eQe -iIc -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -fbL -odO -wcF -kmR -cLh -cLh -kmR -dxA -aCN -aCN -aCN -aCN -aYz -pKh -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -hDi -gcU -gcU -gcU -gcU -hDi -urE -urE -xDL -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -rGj -rGj -jCP -jCP -jCP -"} -(65,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -lif -xDL -bXs -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -plV -xPz -jkt -llW -llW -llW -dST -jkt -llW -llW -llW -oMB -xPz -xPz -kxy -wox -rlr -rlr -kdB -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -fBu -fBu -tRx -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -vzb -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -vzb -aCN -wcF -wcF -wcF -wcF -wcF -wcF -qqw -qqw -qqw -qqw -mjl -qxN -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -urE -urE -urE -xDL -rGj -rGj -rGj -jCP -jCP -"} -(66,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -xPz -jkt -llW -lZH -llW -dST -jkt -llW -lZH -llW -oMB -xPz -uFf -vFV -wox -rlr -rlr -kdB -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oWe -iim -fBu -vFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -vzb -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -vzb -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -mjl -mUl -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -urE -urE -urE -xDL -rGj -rGj -rGj -jCP -jCP -"} -(67,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -wdV -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -plV -xPz -jkt -llW -llW -llW -dST -jkt -llW -llW -llW -oMB -xPz -xPz -kxy -wox -rlr -rlr -kdB -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -fBu -fBu -tRx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -vzb -aCN -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -xLU -xLU -xLU -xLU -xLU -xLU -xLU -xLU -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -mjl -qxN -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -urE -urE -urE -xDL -rGj -rGj -rGj -jCP -jCP -"} -(68,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -awG -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -xPz -jkt -llW -llW -llW -dST -jkt -llW -llW -llW -oMB -xPz -xPz -vFV -wox -rlr -pkE -sLw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -vFV -byJ -fBu -vFV -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -aCN -vzb -aCN -qqw -qqw -dVd -qqw -qqw -qqw -aCN -xLU -xLU -uPg -xLU -xLU -xLU -xLU -rSm -pSa -pSa -pSa -pSa -rSm -ydO -aCN -aCN -xLU -eVI -eVI -xLU -xLU -xLU -xLU -qqw -mjl -qxN -qxN -oGx -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -qqw -xDL -xDL -xDL -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -rGj -rGj -jCP -jCP -jCP -"} -(69,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -bXs -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -xPz -uCD -ncE -ncE -vFV -ncE -uCD -ncE -vFV -ncE -fwx -efH -xPz -vFV -vFV -uwC -sLw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -hLI -fBu -fBu -tRx -ejJ -ejJ -ejJ -ejJ -ejJ -rrI -mwG -mwG -mwG -mwG -mwG -lcU -mwG -mwG -mwG -rrI -qqw -qqw -qqw -rSm -pSa -nzk -pSa -rSm -nzk -pSa -rSm -pSa -nkp -shu -shu -shu -pSa -ydO -aCN -aCN -xLU -xLU -xLU -xLU -xLU -xLU -xLU -qqw -mjl -fbL -qxN -fbL -aCN -qqw -qqw -qqw -qqw -xDL -mZW -xDL -qqw -xDL -rsB -xDL -qqw -xDL -rsB -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -fRw -htQ -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -"} -(70,1,3) = {" -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -ssC -ssC -ssC -ssC -ssC -qwh -ssC -qwh -ssC -ssC -ycC -llW -gWF -vFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -fBu -fBu -qhX -vFV -dxA -dxA -dxA -dxA -rrI -rrI -iFi -iFi -iFi -iFi -iFi -iFi -iFi -iFi -iFi -mwG -pZB -pZB -pZB -pSa -uoY -uoY -dQn -pSa -kIw -hKw -pSa -sKa -hJB -shu -shu -shu -pSa -ydO -aCN -aCN -xLU -sIe -xLU -sIe -xLU -sIe -xLU -qqw -mjl -wdq -qxN -qxN -oGx -qqw -qqw -qqw -qqw -xDL -xDL -xDL -qqw -xDL -xDL -xDL -qqw -xDL -mZW -rsB -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(71,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -vFV -vFV -vFV -vFV -vFV -vFV -vFV -xPz -vFV -vFV -vFV -gSj -vFV -vFV -vFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -euy -vFV -vFV -fBu -vFV -vFV -qqw -qqw -qqw -qqw -vaR -hdt -iFi -cNZ -kgX -kgX -kgX -kgX -kgX -bjY -iFi -mwG -aCN -aCN -aCN -pSa -gDg -txE -vXX -pSa -mMc -uoY -jUD -uoY -hJB -shu -shu -shu -pSa -ydO -aCN -aCN -sIe -sIe -sIe -sIe -sIe -sIe -sIe -qqw -mjl -qxN -qxN -qxN -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -qqw -qqw -xDL -fRw -fRw -htQ -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -"} -(72,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -euy -aJh -wox -wox -kxy -xPz -xPz -xPz -xPz -xPz -xPz -vFV -fKk -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mjl -ybg -ybg -ybg -tsd -qqw -qqw -qqw -qqw -qqw -vaR -iFi -dOk -nmL -xcb -xcb -xcb -xcb -xcb -toY -iFi -xpd -aCN -aCN -aCN -pSa -afj -qOG -qOG -pSa -pSa -pSa -pSa -uoY -hJB -shu -shu -shu -rSm -pSa -nzk -pSa -pSa -rSm -sIe -eqM -sIe -sIe -eqM -qqw -mjl -qxN -qwa -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -fRw -fRw -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(73,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mjl -rlr -wox -kKa -vFV -kAi -kAi -kAi -kAi -mMB -xPz -vFV -fKk -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -sEn -sEn -sEn -txc -trF -ybg -tsd -ybg -bNO -qqw -qqw -qqw -qqw -qqw -xpd -iFi -axy -xcb -xcb -xcb -xcb -xcb -xcb -toY -ghO -mwG -aCN -aCN -aCN -pSa -afj -njt -tdB -rSm -sCN -aei -rSm -uoY -hJB -shu -shu -shu -pSa -cAR -uwR -kCd -qOG -pSa -iJu -iJu -iJu -iJu -act -qqw -mjl -qxN -fbL -oGx -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -qqw -xDL -fRw -fRw -htQ -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -"} -(74,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mjl -rlr -wox -pBS -vFV -ovf -llW -llW -llW -dST -xPz -vFV -fKk -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -jOn -jZE -jZE -ybg -jZE -ybg -tsd -ybg -tsd -qqw -qqw -qqw -qqw -qqw -vaR -iFi -msX -uDz -xcb -xcb -xcb -xcb -xcb -toY -iFi -xpd -bdl -bdl -bdl -rSm -pSa -fnK -pSa -rSm -aei -aei -lXo -uoY -hJB -qlR -shu -shu -pSa -qpX -aei -qOG -qOG -pSa -act -act -act -act -act -euy -aJh -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -hDi -gcU -okj -hDi -jon -jon -kJT -jon -htQ -xDL -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(75,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mjl -rlr -wox -kKa -vFV -llW -llW -llW -llW -dST -xPz -vFV -glB -jZE -jZE -jZE -jZE -jZE -jZE -jZE -jZE -jZE -eNh -mbn -mbn -mbn -mbn -mbn -mbn -ybg -bNO -qqw -qqw -qqw -qqw -qqw -vaR -iFi -iFi -urm -bJi -bJi -bJi -bJi -bJi -wgs -iFi -mwG -aCN -aCN -aCN -aCN -aCN -aCN -wvR -bRT -xje -kuJ -pSa -uoY -eSM -oEI -uNF -jqM -pSa -ewN -aei -qOG -qOG -pSa -acw -wcF -act -wcF -act -mjl -qxN -qxN -fbL -qqw -qqw -qqw -xDL -xDL -xDL -xDL -mnv -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -jam -pAW -gcU -jon -jon -jon -jon -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -"} -(76,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bpv -quA -wox -evd -tRx -llW -llW -llW -llW -dST -xPz -vFV -uwC -uwC -uwC -uwC -auy -auy -tRx -auy -auy -auy -auy -mbn -tOw -xtN -bcX -gcd -mbn -ybg -tsd -qqw -qqw -qqw -qqw -qqw -rrI -rrI -ghO -iFi -iFi -iFi -iFi -iFi -iFi -iFi -iFi -mwG -aCN -wvR -wvR -ydO -ydO -ydO -gAg -rSm -pSa -pSa -pSa -tos -tos -tos -tos -tos -pFc -aei -wIl -ePF -rgi -pSa -wcF -wcF -wcF -wcF -wcF -mjl -qxN -oGx -qqw -qqw -qqw -qqw -xDL -mnv -mnv -rsB -mnv -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -dRf -pAW -hDi -gcU -okj -gcU -hDi -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(77,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -uQd -uQd -uQd -uQd -uQd -llW -dST -xPz -vFV -qqw -qqw -srt -srt -auy -tfA -jvw -llW -llW -llW -llW -mbn -xlw -yiC -yiC -xvK -mbn -ybg -bNO -qqw -qqw -qqw -qqw -qqw -qnM -rrI -mwG -lBE -mwG -fYO -mwG -tki -mwG -mwG -mwG -rrI -aCN -wvR -wvR -wvR -ydO -vfa -wvR -wvR -wvR -rSm -pSa -bby -pSa -czR -czR -czR -rSm -pSa -pSa -fnK -pSa -rSm -wcF -wcF -wcF -wcF -wcF -mjl -qxN -fbL -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -rsB -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -kxE -pAW -gcU -teW -xyA -fnU -gcU -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -rGj -rGj -jCP -jCP -jCP -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(78,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -uQd -laX -dht -hPp -vHk -uQd -uQd -nRN -wLM -vFV -qqw -qqw -srt -srt -auy -ccN -wao -llW -llW -llW -llW -mbn -wbi -yiC -yiC -xvK -mbn -ybg -tsd -qqw -qqw -qqw -qqw -qqw -gfN -vGb -jZz -jZz -gfN -qVX -eVP -awA -awA -awA -awA -awA -aCN -wvR -wvR -ydO -ydO -ydO -aCN -wvR -acw -pSa -hzq -oZT -oZT -czR -shu -czR -gBX -bdl -bdl -bdl -bdl -bdl -iWN -qqw -qqw -qqw -qqw -aJh -qxN -oGx -qqw -xDL -xDL -rEu -rEu -rEu -rEu -xDL -mnv -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -gcU -ayF -gcU -pAW -eAI -pAW -gcU -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -crh -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(79,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -ixh -sVQ -hjk -awl -pmz -kdD -uQd -vFV -vFV -vFV -qqw -qqw -srt -srt -vFV -kJP -wao -llW -vFV -llW -llW -mbn -gwY -pJz -xvK -xvK -mbn -sIp -rTk -rTk -aCN -aCN -aCN -qqw -gfN -xxR -xiP -jZz -gfN -qVX -eVP -awA -awA -awA -awA -awA -aCN -wvR -wvR -wvR -ydO -ydO -aCN -aCN -acw -pSa -oZT -oZT -uyG -czR -czR -czR -vzb -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -mjl -qxN -qxN -fbL -qqw -xDL -rEu -rEu -rEu -rEu -rEu -xDL -mnv -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gcU -gif -pAW -gcU -rKK -pAW -qvS -gcU -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -uZo -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(80,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xvr -hbj -mWT -bWx -lBY -lhh -ixZ -uQd -llW -llW -llW -llW -llW -srt -srt -auy -iDQ -fnq -llW -llW -llW -llW -mbn -mbn -mbn -oda -rxp -mbn -sIp -sIp -rTk -dxA -dxA -dxA -kvS -kvS -obb -jZz -jZz -gfN -qVX -dUL -awA -awA -awA -awA -awA -aCN -wvR -wvR -ydO -ydO -ydO -aCN -aCN -wvR -pSa -iKe -oZT -qHV -pSa -ydO -aCN -vzb -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -mjl -qxN -oGx -qqw -qqw -xDL -rEu -xDL -xDL -rEu -rEu -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -gcU -xai -pAW -gcU -pAW -pAW -qOT -gcU -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -uZo -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(81,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -tvc -tvc -koX -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -uTA -mWT -msB -eUw -pmz -lkj -uQd -llW -llW -llW -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vFV -vFV -lBv -mbn -ogl -mbn -mbn -caY -sIp -rTk -aCN -aCN -aCN -gfN -jDN -rUu -rUu -rUu -gfN -qVX -eVP -awA -awA -awA -awA -awA -aCN -wvR -wvR -wvR -ydO -ydO -aCN -aCN -wvR -rSm -pSa -fnK -pSa -rSm -ydO -aCN -vzb -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -mjl -qxN -fbL -qqw -qqw -xDL -rEu -rEu -xDL -xDL -rEu -xDL -mZW -xDL -qqw -qqw -qqw -qqw -qqw -qqw -xDL -pha -xDL -qqw -qqw -qqw -qqw -gcU -mvc -pAW -qWc -pAW -pAW -oxu -gcU -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -wcn -uZo -uZo -uZo -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(82,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -koX -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -kcx -hjk -qQN -oYw -aFF -hDX -uQd -vFV -vFV -vFV -vFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rTk -roK -rTk -rTk -qqw -qqw -qqw -ofr -rUu -rUu -rUu -rUu -svq -qVX -eVP -awA -awA -awA -awA -awA -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -wvR -wvR -wvR -xLU -ydO -ydO -ydO -vzb -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -mjl -qxN -oGx -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -hDi -okj -gcU -gcU -gcU -gcU -gcU -hDi -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -uZo -uZo -uZo -uZo -uZo -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(83,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -koX -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -uQd -ary -xHe -xkk -bFC -uQd -uQd -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gfN -eCq -jWE -cSb -cQr -gfN -qVX -rxS -kch -awA -awA -awA -awA -qqw -aCN -xLU -xLU -xLU -xLU -xLU -aCN -aCN -wvR -xLU -xLU -xLU -xLU -xLU -xLU -xLU -xLU -xLU -xLU -xLU -ydO -qqw -qqw -qqw -qqw -mjl -qxN -fbL -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -htQ -htQ -htQ -htQ -xDL -rEu -rEu -rEu -rEu -rEu -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -elF -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -uZo -uZo -hWY -hWY -hWY -uZo -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(84,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -koX -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -uQd -xvr -uQd -uQd -uQd -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -kvS -old -old -kvS -old -kvS -qVX -njo -kch -kch -kch -kch -kch -eOG -aCN -xLU -xLU -xLU -xLU -xLU -aCN -aCN -wvR -ydO -ydO -ydO -ydO -ydO -hQk -mMx -qTS -qTS -mMx -mgH -ydO -aCN -aCN -xLU -xLU -phY -qxN -qxN -oGx -qqw -xDL -jon -jon -jon -jon -xDL -xDL -htQ -htQ -htQ -xDL -rEu -rEu -rEu -rEu -rEu -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -uZo -uZo -hWY -tJE -hWY -uZo -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(85,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -koX -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gfN -qkR -jZz -wok -qVX -qVX -qVX -qVX -qVX -qVX -qVX -kdB -aCN -sIe -xLU -sIe -xLU -sIe -aCN -aCN -wvR -ydO -ydO -akf -ydO -ydO -qTS -xtl -xtl -xtl -xtl -qTS -ydO -aCN -aCN -xLU -xLU -xWm -aqt -qxN -fbL -qqw -xDL -jon -jon -jon -jon -xDL -htQ -xDL -xDL -htQ -xDL -rEu -jmK -rEu -jmK -rEu -xDL -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -uZo -hWY -hWY -hWY -uZo -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(86,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -koX -rGj -rGj -rGj -rGj -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gfN -bnl -jZz -kvS -old -kvS -old -old -old -nVH -old -kvS -aCN -sIe -sIe -sIe -sIe -sIe -aCN -aCN -wvR -ydO -ydO -ydO -ydO -ydO -qTS -xtl -xtl -xtl -xtl -qTS -ydO -ihX -mrZ -eOQ -hzg -xLU -jRc -qxN -oGx -qqw -xDL -rEu -rEu -rEu -rEu -xDL -htQ -rst -xDL -htQ -xDL -jmK -jmK -jmK -rEu -rEu -xDL -qqw -qqw -qqw -qqw -qqw -qqw -xDL -jon -jon -jon -jon -jon -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -uZo -uZo -uZo -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(87,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -koX -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gfN -kwb -jZz -jZz -aYX -gfN -kpt -kpt -rUu -rUu -rUu -gfN -aCN -sIe -sIe -sIe -sIe -sIe -aCN -aCN -wvR -ydO -xLU -ydO -ydO -ydO -aux -mMx -qTS -qTS -mMx -uPR -ydO -qxN -qxN -qxN -iMX -gNu -fbL -qxN -fbL -qqw -xDL -rEu -pdQ -rEu -rEu -xDL -htQ -htQ -rst -htQ -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -xDL -jon -jon -jon -jon -jon -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(88,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -koX -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gfN -fCr -jZz -jZz -rDz -gfN -rUu -rUu -rUu -rUu -rUu -jwS -mvj -mrZ -oLl -mrZ -mrZ -mrZ -mrZ -aZU -xLU -xLU -xLU -xLU -xLU -xLU -ydO -ydO -ydO -ydO -ydO -ydO -ydO -fbL -fbL -qxN -qxN -qxN -qxN -qwa -oGx -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -htQ -htQ -htQ -rst -xDL -qqw -qqw -qqw -qqw -qqw -qqw -xDL -rEu -rEu -rEu -rEu -rEu -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(89,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -koX -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -qaV -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -hZX -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gfN -vYV -jZz -uYT -vxp -gfN -kPS -suK -kPS -cQr -kPS -gfN -mjl -qxN -qxN -qxN -qxN -qxN -qxN -qxN -xMw -iiH -xMw -xMw -xMw -xMw -xMw -xMw -xMw -xMw -xEM -ydO -oGx -fbL -fbL -fbL -oGx -oGx -fbL -oGx -fbL -qqw -xDL -htQ -htQ -htQ -htQ -xDL -xDL -xDL -xDL -xDL -xDL -xDL -htQ -htQ -rst -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -xDL -rEu -rEu -rEu -rEu -rEu -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(90,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -koX -npJ -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mMv -qqw -qqw -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -gfN -tXg -jZz -jZz -bAk -kvS -old -old -old -old -old -kvS -mjl -qxN -fbL -fbL -oGx -oGx -fbL -oGx -xEM -htm -hEa -xtl -ufL -klW -xMw -gFk -tIF -kAp -xEM -ydO -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -htQ -rst -wKF -htQ -xDL -rEu -rEu -rEu -rEu -rEu -xDL -htQ -htQ -htQ -rst -xDL -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(91,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -iXr -koX -tvc -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -kvS -old -old -old -old -kvS -rEa -fbL -cwF -qDJ -qDJ -qDJ -aJh -qxN -fbL -vvy -qqw -qqw -qqw -wvR -xEM -pov -mFh -mFh -jFQ -htm -xMw -dns -kAp -kAp -xEM -ydO -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -rst -xDL -xDL -htQ -xDL -rEu -jmK -rEu -rEu -rEu -xDL -htQ -htQ -htQ -rst -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(92,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -iXr -aDu -aDu -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -iTU -frM -qxN -qxN -qxN -qxN -qxN -qxN -qxN -qxN -oGx -vvy -qqw -qqw -qqw -wvR -xEM -htm -qlB -qlB -rpQ -htm -fqp -kAp -kAp -kAp -nzu -ydO -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -rst -htQ -xDL -xDL -xDL -jmK -rEu -rEu -xDL -htQ -htQ -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(93,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -rGj -rGj -rGj -rGj -qqw -psp -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uNR -obJ -fbL -oGx -fbL -oGx -fbL -oGx -fbL -oGx -aCN -qqw -qqw -qqw -qqw -wvR -nzu -wPk -pzX -vCk -rpQ -uRr -xMw -fhA -kAp -kAp -xEM -oGx -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -rst -xDL -htQ -htQ -xDL -rEu -rEu -rEu -rEu -rEu -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(94,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -mMV -iXr -aDu -aDu -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wvR -xEM -mVa -nLA -dfi -rpQ -wLa -xMw -oGB -fqM -kAp -xEM -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -htQ -htQ -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(95,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -npJ -aDu -aDu -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -psp -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wvR -xEM -htm -xYx -xYx -htm -mPw -xMw -xMw -xMw -xMw -xEM -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -jmK -jmK -jmK -rEu -xDL -xDL -xDL -htQ -htQ -htQ -rst -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(96,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -mMV -aDu -aDu -aDu -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -xDL -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wvR -xMw -dOa -xMw -nzu -xMw -xMw -xMw -oGx -oGx -oGx -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -rEu -jmK -xDL -xDL -htQ -htQ -rst -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(97,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -aDu -aDu -aDu -aDu -rGj -rGj -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -xDL -fRw -fRw -fRw -fRw -xDL -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -rEu -xDL -xDL -pdQ -htQ -htQ -htQ -rst -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(98,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -aDu -aDu -aDu -aDu -rGj -rGj -rGj -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -xDL -xDL -xDL -qqw -qqw -xDL -xDL -xDL -qqw -qqw -qqw -qqw -xDL -fRw -fRw -fRw -fRw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -fRw -fRw -fRw -fRw -fRw -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -jmK -xDL -xDL -htQ -htQ -htQ -rst -rst -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(99,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -aDu -aDu -aDu -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -qaV -xDL -xDL -qaV -xDL -qqw -qqw -xDL -qaV -xDL -qqw -qqw -xDL -fRw -xDL -xDL -xDL -xDL -xDL -xDL -fRw -fRw -fRw -fRw -xDL -rEu -rEu -rEu -rEu -rEu -xDL -fRw -fRw -fRw -fRw -fRw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -rEu -rEu -rEu -rEu -rEu -xDL -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -jmK -xDL -xDL -htQ -htQ -htQ -htQ -rst -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(100,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -aDu -aDu -aDu -aDu -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -xDL -xDL -xDL -qqw -qqw -xDL -fRw -xDL -xDL -fRw -fRw -xDL -xDL -fRw -fRw -fRw -fRw -xDL -rEu -rEu -xDL -xDL -rEu -xDL -fRw -fRw -fRw -fRw -fRw -xDL -xDL -xDL -fRw -fRw -fRw -fRw -fRw -rEu -rEu -rEu -rEu -xDL -xDL -xDL -rEu -rEu -rEu -rEu -rEu -xDL -qqw -qqw -qqw -qqw -xDL -htQ -htQ -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(101,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -aDu -aDu -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -fRw -fRw -fRw -fRw -xDL -rEu -xDL -xDL -rEu -rEu -xDL -xDL -fRw -fRw -xDL -fRw -xDL -xDL -xDL -fRw -fRw -fRw -fRw -fRw -rEu -rEu -rEu -rEu -xDL -rEu -rEu -rEu -rEu -xDL -rEu -rEu -xDL -qqw -qqw -qqw -qqw -xDL -htQ -htQ -xDL -xDL -xDL -qqw -qqw -qqw -qqw -xDL -rEu -rEu -rEu -rEu -rEu -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(102,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -aDu -aDu -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -rEu -rEu -wKF -rEu -rEu -xDL -xDL -fRw -fRw -fRw -fRw -xDL -xDL -xDL -fRw -fRw -fRw -fRw -fRw -rEu -rEu -rEu -rEu -xDL -rEu -wKF -rEu -rEu -rEu -rEu -rEu -xDL -qqw -qqw -qqw -qqw -xDL -htQ -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -xDL -rEu -jmK -rEu -rEu -rEu -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(103,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -aDu -aDu -aDu -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -rEu -rEu -rEu -rEu -rEu -xDL -fRw -fRw -fRw -fRw -fRw -xDL -xDL -xDL -xDL -xDL -xDL -rEu -rEu -xDL -rEu -xDL -xDL -xDL -xDL -bFJ -xDL -fRw -fRw -rEu -rEu -rEu -rEu -xDL -rEu -rEu -rEu -rEu -rEu -rEu -rEu -xDL -qqw -qqw -qqw -qqw -xDL -htQ -xDL -htQ -htQ -xDL -qqw -qqw -qqw -qqw -xDL -rEu -rEu -rEu -jmK -rEu -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(104,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -aDu -aDu -aDu -esl -jyw -rGj -sEI -sEI -sEI -sEI -sEI -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -rEu -xDL -xDL -xDL -rEu -wKF -fRw -xDL -xDL -xDL -fRw -jon -jon -jon -xDL -rEu -rEu -rEu -rEu -rEu -rEu -xDL -xDL -xDL -xDL -fRw -fRw -fRw -fRw -rEu -rEu -rEu -rEu -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -xDL -jmK -rEu -jmK -jmK -jmK -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(105,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -aDu -aDu -aDu -aDu -sLN -sLN -iLF -iLF -iLF -iLF -iLF -koX -sEI -sEI -sEI -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -rEu -rEu -xDL -xDL -rEu -xDL -xDL -xDL -xDL -xDL -fRw -jon -jon -jon -xDL -rEu -rEu -rEu -rEu -rEu -rEu -xDL -xDL -xDL -xDL -fRw -fRw -fRw -fRw -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(106,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -aDu -aDu -aDu -jCP -jCP -sEI -sEI -sEI -sEI -sEI -iLF -iLF -iLF -iLF -iLF -sEI -sEI -sEI -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -rEu -rEu -rEu -rEu -rEu -xDL -fRw -fRw -xDL -xDL -fRw -jon -jon -jon -xDL -rEu -rEu -rEu -rEu -rEu -rEu -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(107,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -aDu -aDu -aDu -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sEI -sEI -sEI -koX -iLF -iLF -iLF -iLF -sLN -sLN -iDN -nbZ -nbZ -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -fRw -fRw -fRw -fRw -jon -jon -jon -xDL -rEu -rEu -rEu -rEu -rEu -rEu -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -fRw -fRw -fRw -fRw -htQ -htQ -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(108,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -aDu -aDu -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sEI -jCP -jCP -sEI -sEI -iDN -sLN -sLN -iDN -nbZ -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -fMD -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -fRw -xDL -xDL -fRw -xDL -xDL -xDL -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(109,1,3) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -psp -psp -psp -psp -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -iDN -sLN -iDN -nbZ -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -fRw -fRw -fRw -xDL -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -bFJ -xDL -xDL -xDL -xDL -xDL -xDL -jon -jon -jon -jon -jon -xDL -xDL -fRw -fRw -fRw -fRw -xDL -xDL -xDL -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(110,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -nbZ -nbZ -iDN -iDN -sLN -sLN -nbZ -nbZ -sLN -sLN -iDN -nbZ -nbZ -rGj -rGj -rGj -qqw -qqw -qqw -psp -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -fRw -fRw -fRw -xDL -qqw -qqw -qqw -qqw -htQ -htQ -htQ -htQ -xDL -htQ -htQ -htQ -htQ -xDL -fRw -fRw -fRw -fRw -htQ -htQ -htQ -htQ -xDL -xDL -jon -jon -jon -jon -jon -xDL -fRw -fRw -fRw -fRw -fRw -htQ -xDL -htQ -htQ -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(111,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -cZM -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -nbZ -iDN -sLN -sLN -sLN -nbZ -sLN -nbZ -nbZ -sLN -iDN -nbZ -nbZ -rGj -rGj -rGj -qqw -qqw -psp -psp -psp -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -fRw -fRw -fRw -xDL -qqw -qqw -qqw -qqw -htQ -xDL -xDL -htQ -xDL -htQ -htQ -htQ -htQ -wKF -fRw -xDL -xDL -xDL -htQ -htQ -htQ -htQ -xDL -xDL -jon -jon -jon -jon -jon -xDL -fRw -fRw -fRw -fRw -fRw -htQ -htQ -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(112,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -jyY -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -nbZ -iDN -sLN -sLN -bWG -sLN -sLN -sLN -nbZ -sLN -iDN -nbZ -rGj -rGj -rGj -rGj -qqw -qqw -qqw -psp -psp -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -xDL -xDL -fRw -xDL -qqw -qqw -qqw -qqw -htQ -xDL -xDL -htQ -xDL -htQ -htQ -htQ -htQ -xDL -fRw -fRw -xDL -xDL -htQ -htQ -htQ -htQ -xDL -xDL -jon -jon -jon -jon -jon -wKF -fRw -fRw -fRw -fRw -fRw -htQ -htQ -htQ -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(113,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -xYD -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -iDN -sLN -sLN -sLN -sLN -sLN -sLN -sLN -nbZ -sLN -iDN -nbZ -rGj -rGj -rGj -rGj -qqw -qqw -qqw -psp -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -fRw -fRw -fRw -fRw -xDL -qqw -qqw -qqw -qqw -htQ -xDL -xDL -htQ -wKF -htQ -htQ -xDL -htQ -xDL -xDL -fRw -xDL -xDL -htQ -htQ -htQ -htQ -xDL -xDL -htQ -htQ -htQ -htQ -htQ -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(114,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -xYD -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -iDN -sLN -sLN -sLN -nbZ -sLN -sLN -sLN -jyw -sLN -iDN -nbZ -nbZ -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -htQ -htQ -htQ -htQ -xDL -htQ -htQ -htQ -htQ -xDL -xDL -fRw -fRw -fRw -htQ -htQ -htQ -htQ -xDL -xDL -htQ -htQ -htQ -htQ -htQ -xDL -qqw -xDL -jon -jon -jon -jon -jon -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(115,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -cZM -cZM -cZM -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -iDN -sLN -sLN -nbZ -nbZ -nbZ -sLN -sLN -sLN -sLN -iDN -nbZ -nbZ -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -fRw -fRw -fRw -fRw -xDL -xDL -xDL -xDL -xDL -xDL -xDL -rEu -xDL -xDL -xDL -rEu -xDL -xDL -xDL -xDL -htQ -htQ -htQ -htQ -htQ -xDL -qqw -xDL -jon -xDL -xDL -xDL -jon -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(116,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -iDN -iDN -sLN -sLN -sLN -bOg -nbZ -iDN -iDN -iDN -iDN -nbZ -kFp -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -fRw -fRw -fRw -fRw -xDL -jon -jon -jon -jon -jon -xDL -rEu -xDL -xDL -xDL -rEu -xDL -xDL -xDL -xDL -htQ -htQ -htQ -htQ -xDL -xDL -qqw -xDL -jon -jon -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(117,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -iDN -iDN -sLN -sLN -nbZ -rYx -nbZ -nbZ -iDN -iDN -nbZ -nbZ -nbZ -nbZ -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -fRw -fRw -fRw -fRw -xDL -jon -xDL -jon -jon -jon -xDL -rEu -rEu -rEu -rEu -rEu -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -xDL -jon -jon -jon -jon -jon -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(118,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -iDN -sLN -sLN -sLN -sLN -dOe -yaI -iDN -iDN -nbZ -nbZ -nbZ -nbZ -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -pzV -pzV -pzV -pzV -rGj -tRN -tRN -rGj -rGj -tRN -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(119,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -nbZ -iDN -sLN -sLN -sLN -sLN -bOg -iDN -iDN -nbZ -nbZ -nbZ -nbZ -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -tRN -rGj -rGj -rGj -tRN -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(120,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -nbZ -iDN -dOe -sLN -sLN -rYx -iDN -sLN -iDN -sLN -lyN -lyN -nbZ -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(121,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -nbZ -nbZ -iDN -xwf -bOg -sLN -iDN -iDN -iDN -iDN -nbZ -nbZ -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -ncL -ncL -ncL -ncL -ncL -ncL -ncL -ncL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(122,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -nbZ -nbZ -nbZ -iDN -iDN -iDN -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -ncL -jWl -jWl -jWl -jWl -jWl -jWl -ncL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(123,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -ncL -jWl -jWl -jWl -jWl -jWl -jWl -ncL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(124,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -ncL -jWl -jWl -jWl -jWl -jWl -jWl -ncL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(125,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -ncL -jWl -jWl -jWl -jWl -jWl -jWl -ncL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(126,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -ncL -jWl -jWl -jWl -jWl -jWl -jWl -ncL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(127,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -ncL -ncL -ncL -ncL -ncL -ncL -ncL -ncL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(128,1,3) = {" -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} - -(1,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(2,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(3,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(4,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(5,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(6,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(7,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -rGj -rGj -rGj -jCP -jCP -jCP -jCP -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(8,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -jCP -jCP -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -eDT -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(9,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -jCP -jCP -jCP -jCP -jCP -jCP -rGj -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -nhZ -jCP -nhZ -jCP -jCP -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -esl -esl -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(10,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -eDT -jCP -esl -jCP -esl -esl -esl -rGj -rGj -rGj -eDT -esl -esl -eDT -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -eDT -iXr -esl -eDT -iXr -iXr -esl -nOp -esl -nOp -jCP -jCP -jCP -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(11,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -eDT -esl -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -eDT -esl -esl -eDT -jCP -jCP -jCP -esl -iXr -esl -eDT -esl -iXr -koX -eDT -npJ -eDT -esl -esl -esl -jCP -jaf -jaf -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(12,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -eDT -esl -esl -esl -esl -eDT -esl -jCP -esl -eDT -iXr -esl -esl -eDT -koX -npJ -koX -koX -npJ -koX -esl -esl -jaf -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(13,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -eDT -esl -esl -esl -esl -eDT -iXr -esl -esl -koX -npJ -koX -esl -esl -esl -esl -npJ -koX -tYk -jaf -jaf -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(14,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -eDT -esl -npJ -npJ -esl -esl -esl -esl -eDT -esl -eDT -esl -jaf -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(15,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -eDT -esl -koX -esl -eDT -nOp -jCP -jCP -iXr -esl -nOp -jCP -jaf -jaf -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(16,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -eDT -esl -npJ -npJ -esl -iXr -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -jaf -sNy -jaf -cZs -jaf -cZs -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(17,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -iXr -npJ -npJ -esl -eDT -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(18,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -npJ -koX -esl -esl -iXr -jCP -jCP -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(19,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -koX -esl -esl -eDT -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(20,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -rGj -rGj -rGj -rGj -rGj -rGj -iXr -koX -esl -iXr -jCP -jCP -jCP -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(21,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -eDT -iXr -rGj -rGj -rGj -rGj -iXr -iXr -koX -esl -fNw -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(22,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -iXr -iXr -iXr -rGj -rGj -rGj -rGj -esl -eDT -npJ -iXr -esl -jCP -jCP -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(23,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -eDT -rGj -rGj -rGj -rGj -esl -iXr -esl -koX -esl -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -mHd -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(24,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -iXr -esl -rGj -rGj -rGj -rGj -eDT -esl -esl -npJ -eDT -jCP -jCP -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(25,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -iXr -esl -iXr -rGj -rGj -rGj -rGj -rGj -esl -esl -koX -esl -jCP -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(26,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -eDT -iXr -esl -rGj -rGj -rGj -rGj -rGj -iXr -hqJ -koX -esl -esl -jCP -jCP -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -ahS -nXA -eEa -ahS -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(27,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -eDT -iXr -rGj -rGj -rGj -rGj -rGj -eDT -esl -npJ -iXr -eDT -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jaf -nXA -eEa -nXA -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(28,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -iXr -esl -rGj -rGj -rGj -rGj -rGj -iXr -koX -npJ -iXr -esl -jCP -jCP -sNy -jaf -sNy -jaf -sNy -jaf -sNy -sNy -eEa -eEa -oqz -nXA -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(29,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -eDT -iXr -rGj -rGj -rGj -rGj -iXr -npJ -esl -esl -esl -jCP -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -jaf -ahS -nXA -eEa -ahS -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(30,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -iXr -rGj -rGj -rGj -esl -npJ -esl -iXr -eDT -esl -jCP -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(31,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -eDT -esl -esl -fJz -esl -koX -esl -iXr -esl -esl -jCP -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(32,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -iXr -npJ -koX -mMV -esl -eDT -esl -jCP -jCP -jCP -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(33,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -eDT -esl -eDT -esl -esl -esl -esl -esl -iXr -esl -eDT -jaf -jaf -sNy -sNy -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(34,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -eDT -esl -iXr -iXr -iXr -esl -eDT -jaf -jaf -jaf -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(35,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -esl -eDT -esl -eDT -esl -jCP -jaf -jaf -sNy -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(36,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -esl -jCP -jCP -jaf -sNy -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(37,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -jCP -jCP -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(38,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -jCP -jCP -jCP -jCP -jaf -jaf -jaf -jaf -jaf -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(39,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(40,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -jCP -esl -rGj -jCP -jCP -jCP -jCP -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(41,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -jCP -jaf -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(42,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -rGj -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(43,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -fbL -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jaf -jaf -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(44,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -uzs -tdl -tdl -uzs -tdl -tdl -tdl -uzs -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -fbL -fbL -oGx -fbL -oGx -fbL -fTp -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -rGj -jaf -jaf -sNy -jaf -sNy -jaf -cZs -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(45,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -tdl -pUX -bci -tdl -pOI -rBR -ssq -tdl -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -fbL -qxN -qxN -qxN -qxN -qxN -qxN -nZp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jaf -jaf -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(46,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -tdl -xcK -bci -tdl -uwa -lov -fbw -tdl -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oGx -aXu -fbL -sPk -mMY -mMY -mMY -nZp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -urU -dxA -dxA -lHL -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(47,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -xDL -tdl -qai -rOe -xiv -rOe -idU -vuN -tdl -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -eRY -eRY -eRY -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -fbL -bvj -wvR -wvR -ydO -ydO -ydO -aCN -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -urU -dxA -dxA -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -esl -rGj -jCP -rGj -rGj -rGj -jaf -jaf -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(48,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -xDL -uzs -qai -oTP -uZF -tdl -tdl -tdl -uzs -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -sEn -sEn -sEn -sEn -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oGx -bvj -wvR -wvR -ydO -ydO -ydO -aCN -qqw -qqw -aCN -xLU -xLU -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -urU -dxA -dxA -qxN -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -ljz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -esl -esl -esl -rGj -jCP -jCP -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(49,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -xDL -evX -evX -lCm -evX -evX -evX -evX -evX -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -bNO -bNO -tsd -eRY -sEn -sEn -sEn -tsd -bNO -tsd -bNO -mlL -tsd -bNO -tsd -bNO -tsd -qqw -eRY -eRY -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -fbL -bvj -wvR -wvR -ydO -ydO -ydO -aCN -aCN -aCN -aCN -xLU -xLU -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -acw -urU -urU -dxA -dxA -qxN -oGx -qqw -qqw -qqw -qqw -qqw -udN -uNR -udN -qqw -ljz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(50,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -evX -evX -evX -evX -evX -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bNO -ybg -ybg -tsd -bNO -tsd -tsd -bNO -tsd -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -bNO -qqw -eRY -sEn -sEn -eRY -tsd -bNO -bNO -tsd -aCN -aCN -aCN -aCN -aCN -oGx -bvj -wvR -wvR -ydO -ydO -ydO -aCN -aCN -xLU -xLU -xLU -qGI -jUG -jUG -jUG -qXr -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -utR -urU -utR -dxA -dxA -qxN -oGx -qqw -qqw -qqw -qqw -udN -vCc -gfp -vCc -udN -ljz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(51,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -evX -evX -evX -evX -evX -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bNO -sdp -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -foq -jrP -jrP -rFY -jrP -nRo -ybg -tsd -tsd -bNO -tsd -bNO -tsd -tsd -sdp -ybg -bNO -qxN -qxN -qxN -qxN -qxN -fbL -bvj -wvR -wvR -ydO -ydO -ydO -aCN -aCN -xLU -xLU -xLU -lTo -lhF -lhF -lhF -wVh -sIe -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -utR -utR -urU -dxA -dxA -sQb -fbL -qqw -qqw -qqw -qqw -uNR -frM -mNU -lOt -lOt -uBP -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -udN -udN -udN -udN -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -esl -esl -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(52,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -ybg -sJc -jrP -rFY -jrP -rFY -rFY -jrP -rFY -bQF -sEn -sEn -sEn -sEn -trF -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -bNO -aCN -aCN -aCN -aCN -aCN -aCN -fbL -wvR -wvR -ydO -ydO -ydO -aCN -aCN -wvR -wvR -wvR -wvR -ydO -ydO -ydO -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -xgL -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -lBv -vCc -gfp -vCc -lBv -ljz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -uGj -udN -muX -cQn -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -jCP -jCP -jCP -jCP -esl -esl -esl -esl -esl -rGj -rGj -rGj -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(53,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bNO -ybg -rJv -sEn -sEn -sEn -sEn -sEn -mlL -sEn -sEn -sEn -sEn -sEn -sEn -gBN -jrP -jrP -rFY -rFY -jrP -jrP -jrP -noG -tsd -tsd -tsd -qqw -qqw -qqw -qqw -aCN -aCN -qxN -aCN -aCN -aCN -ydO -aCN -aCN -aCN -aCN -sIe -sIe -qGI -jUG -jUG -jUG -qXr -xLU -aCN -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -xgL -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -lBv -uNR -lBv -qqw -ljz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -qGI -jUG -jUG -qXr -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -jCP -esl -esl -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -jCP -jCP -jCP -"} -(54,1,4) = {" -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -ybg -rJv -srt -sEn -sEn -sEn -cfr -mlL -sEn -sEn -sEn -sEn -sEn -sEn -sEn -sEn -sEn -mlL -sEn -sEn -sEn -sEn -sEn -eRY -qqw -qqw -qqw -qqw -qqw -qqw -aCN -qxN -qxN -aCN -aCN -aCN -ydO -aCN -aCN -aCN -aCN -sIe -sIe -mbd -qqw -qqw -qqw -scc -xLU -aCN -qqw -qqw -qqw -qqw -qqw -aCN -dxA -dxA -dxA -dxA -dxA -dxA -dxA -dxA -dxA -qLK -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -ljz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -mbd -sBY -sBY -scc -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -jCP -jCP -jCP -"} -(55,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bNO -ybg -mnd -srt -srt -sEn -cfr -cfr -cgH -vzs -vzs -vzs -vzs -vzs -vzs -vzs -sEn -sEn -sEn -sEn -sEn -sEn -sEn -sEn -eRY -qqw -qqw -qqw -qqw -qqw -qqw -aCN -qxN -aCN -aCN -aCN -ydO -ydO -ydO -ydO -ydO -aCN -sIe -sIe -lTo -lhF -lhF -lhF -wVh -sIe -aCN -aCN -aCN -kmR -bmc -bmc -bmc -kmR -dxA -dxA -dxA -dxA -dxA -dxA -dxA -dxA -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -mbd -sBY -sBY -scc -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(56,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mlL -ybg -rJv -srt -srt -sEn -cfr -cfr -cgH -vzs -vzs -vzs -vzs -lZq -vzs -vzs -vzs -vzs -vzs -vzs -vzs -vzs -vzs -vzs -eRY -qqw -qqw -qqw -qqw -qqw -qqw -aCN -qxN -aCN -aCN -aCN -ydO -lRz -aiY -sto -ydO -aCN -sIe -sIe -sIe -sIe -sIe -sIe -sIe -sIe -bdl -bdl -bdl -wnB -tEi -tEi -tEi -wnB -dxA -dxA -dxA -dxA -dxA -dxA -dxA -dxA -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -mbd -sBY -sBY -scc -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(57,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mlL -ybg -mnd -srt -srt -vzs -cfr -cfr -cgH -vzs -vzs -lZq -vzs -vzs -lZq -vzs -vzs -lZq -vzs -vzs -vzs -lZq -vzs -vzs -eRY -qqw -qqw -qqw -qqw -qqw -qqw -aCN -qxN -aCN -aCN -lRz -aiY -vZG -bUr -aTf -ydO -aCN -sIe -sIe -sIe -sIe -sIe -sIe -sIe -sIe -aCN -aCN -aCN -wnB -tEi -tEi -tEi -wnB -dxA -kmR -xdc -xdc -xdc -kmR -dxA -dxA -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -mbd -sBY -sBY -scc -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(58,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -bNO -tsd -ybg -mnd -srt -srt -vzs -cfr -cfr -cfr -cfr -eRY -eRY -eRY -eRY -eRY -eRY -vzs -vzs -lZq -vzs -lZq -vzs -lZq -lZq -eRY -qqw -qqw -qqw -qqw -qqw -qqw -aCN -qxN -wvR -wvR -dhF -eia -riE -riE -aTf -ydO -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -wnB -tEi -tEi -tEi -wnB -dxA -wnB -cte -cte -cte -wnB -dxA -dxA -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -mbd -sBY -sBY -scc -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(59,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bNO -ybg -ybg -ybg -srt -srt -vzs -vzs -vzs -cfr -cfr -cfr -qqw -qqw -qqw -qqw -qqw -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -aCN -qxN -wvR -wvR -kPP -uNO -riE -riE -aTf -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wnB -tEi -tEi -tEi -iLy -dxA -wnB -kBA -rKy -cte -lRy -dxA -dxA -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mxB -mbd -sBY -sBY -scc -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(60,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -bNO -bNO -tsd -ybg -tsd -tsd -rJv -vzs -vzs -vzs -vzs -vzs -cfr -cfr -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -eRY -eRY -eRY -eRY -eRY -eRY -qqw -qqw -qqw -aCN -qxN -wvR -wvR -ydO -dhF -riE -riE -aTf -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wnB -tEi -tEi -tEi -wnB -dxA -wnB -cte -xRo -cte -wnB -dxA -dxA -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -mbd -sBY -sBY -scc -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(61,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -ybg -ybg -ybg -ybg -tsd -tsd -noC -vzs -vzs -lZq -lZq -vzs -vzs -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -osG -osG -eNj -eNj -eNj -eRY -qqw -qqw -qqw -aCN -qxN -wvR -wvR -ydO -dhF -mpF -sJP -aTf -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wnB -tEi -tEi -tEi -wnB -dxA -wnB -lSl -pxM -oqv -wnB -dxA -dxA -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -mbd -sBY -sBY -scc -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(62,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bNO -ybg -vmM -jrP -noG -sEn -sEn -gnW -sEn -gnW -sEn -sEn -gnW -gnW -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -osG -osG -eNj -eNj -eNj -eRY -qqw -qqw -qqw -aCN -qxN -aCN -aCN -ydO -kPP -ekN -ekN -nIW -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -kmR -gcr -bmc -bmc -kmR -dxA -wnB -lzr -kmR -lRy -kmR -kmR -dxA -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -mbd -sBY -sBY -scc -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(63,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -ybg -rJv -srt -sEn -sEn -sEn -sEn -sEn -sEn -sEn -sEn -sEn -cfr -cfr -cfr -sEn -eRY -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -eRY -gtU -gtU -eNj -eNj -eNj -eRY -qqw -qqw -qqw -aCN -aCN -aCN -aCN -ydO -ydO -ydO -uFo -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -wnB -dSD -dSD -yfZ -tEi -wnB -dxA -qqw -qqw -qqw -qqw -qqw -qqw -wVz -wVz -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -lTo -lhF -lhF -wVh -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -"} -(64,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bNO -ybg -rJv -srt -qBy -jDZ -jDZ -jDZ -jDZ -jDZ -jDZ -jDZ -pXo -cfr -cfr -cgH -sEn -sEn -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -eRY -gtU -edG -eNj -eNj -eNj -eRY -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -pQi -kmR -bmc -bmc -bmc -bmc -kmR -dxA -qqw -qqw -qqw -qqw -qqw -qqw -wVz -wVz -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -lBv -lBv -lBv -lBv -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -"} -(65,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -ybg -rJv -srt -gdY -uvn -kGD -oRk -oRk -oRk -kGD -kGD -lqH -cfr -cfr -cfr -cfr -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -eRY -eRY -wUk -dWc -eNj -eNj -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -vzb -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wVz -wVz -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -"} -(66,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bNO -ybg -mnd -srt -gdY -kGD -oRk -oRk -oRk -oRk -oRk -kGD -lqH -cfr -cfr -cfr -cfr -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -dWc -dWc -eNj -eNj -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -vzb -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wVz -wVz -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -"} -(67,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -ybg -rJv -srt -gdY -ivi -kGD -kGD -kGD -oRk -oRk -kGD -fen -cfr -cfr -cfr -cfr -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -eRY -eRY -dWc -dWc -eNj -eNj -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -vzb -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wVz -wVz -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -"} -(68,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bNO -ybg -mnd -srt -qRu -rXp -rXp -rXp -rXp -rXp -rXp -rXp -ist -cfr -cfr -cgH -vzs -vzs -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -eRY -osG -agY -eNj -eNj -eNj -eRY -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -xLU -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wVz -wVz -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -"} -(69,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -xDL -xDL -xDL -xDL -xDL -xDL -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -ybg -rJv -srt -vzs -vzs -vzs -vzs -vzs -vzs -vzs -vzs -vzs -cfr -cfr -cfr -vzs -eRY -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -eRY -osG -osG -eNj -eNj -eNj -eRY -qqw -qqw -aCN -aCN -act -act -act -act -act -act -act -act -act -act -act -aCN -aCN -aCN -wvR -wvR -wvR -wvR -xLU -xLU -xLU -xLU -xLU -wSR -dtl -dtl -rHz -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wVz -wVz -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -"} -(70,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bNO -ybg -gio -lZq -vzs -vzs -vzs -vzs -lZq -lZq -vzs -vzs -vzs -vzs -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -gtU -gtU -eNj -eNj -eNj -eRY -qqw -qqw -aCN -act -act -act -wsr -act -act -act -act -act -act -act -act -aCN -aCN -aCN -wvR -wvR -wvR -wvR -xLU -xLU -xLU -xLU -xLU -qcD -xTr -xTr -xXp -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(71,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -ybg -ybg -ybg -rJv -gnW -sEn -gnW -sEn -sEn -gnW -cfr -eRY -eRY -eRY -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -gtU -gtU -eNj -eNj -eNj -eRY -qqw -qqw -aCN -act -act -qMA -vHi -vHi -vHi -vHi -vHi -vHi -bIK -hBY -act -aCN -aCN -aCN -wvR -wvR -wvR -acw -xLU -xLU -xLU -xLU -xLU -qcD -xTr -xTr -xXp -ydO -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(72,1,4) = {" -jCP -jCP -jCP -jCP -jCP -cjj -cjj -cjj -xDL -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -bNO -tsd -ybg -rJv -srt -sEn -sEn -sEn -sEn -cfr -cfr -eRY -eRY -eRY -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -eRY -eRY -eRY -eRY -eRY -eRY -qqw -qqw -aCN -act -act -lyq -tiY -tuD -njE -tuD -tuD -rrI -kvS -dda -kvS -aCN -aCN -aCN -wvR -wvR -wvR -wvR -xLU -xLU -xLU -xLU -xLU -qcD -xTr -xTr -xXp -xLU -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(73,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -tsd -ybg -rJv -srt -srt -sEn -sEn -cfr -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -lyq -uhZ -xcb -xcb -xcb -uhZ -mwG -rUu -hci -dda -aCN -aCN -aCN -wvR -wvR -wvR -wvR -sIe -sIe -sIe -sIe -sIe -qcD -xTr -xTr -xXp -xLU -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(74,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cjj -xDL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -bNO -ybg -rJv -moq -srt -vzs -vzs -cfr -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -lyq -xQi -tuD -tuD -tuD -tuD -rrI -kvS -dda -kvS -aCN -aCN -aCN -aCN -wvR -wvR -wvR -sIe -sIe -sIe -sIe -sIe -qcD -xTr -xTr -xXp -xLU -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wFV -wFV -wFV -wFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(75,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -bNO -ybg -gio -xrv -wjH -wjH -lKi -nll -cfr -cfr -eRY -qqw -qqw -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -agY -osG -osG -osG -agY -agY -eRY -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -bwi -pBW -pBW -pBW -pBW -sMK -pBW -lLO -hBY -wcF -bdl -bdl -bdl -iWN -ejJ -ejJ -ejJ -sIe -sIe -sIe -sIe -sIe -qcD -xTr -xTr -xXp -sIe -sIe -sIe -sIe -sIe -sIe -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wFV -wFV -wFV -wFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(76,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -ybg -ybg -ybg -ybg -ybg -ybg -noC -cfr -cfr -eRY -qqw -qqw -eRY -gnW -gnW -sEn -gnW -gnW -sEn -sEn -osG -osG -osG -agY -osG -osG -eRY -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -odO -wcF -wcF -wcF -aCN -aCN -aCN -aCN -aCN -aCN -aCN -sIe -sIe -sIe -sIe -sIe -qcD -aPT -xTr -xXp -sIe -sIe -sIe -sIe -sIe -sIe -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wFV -wFV -wFV -wFV -wFV -wFV -wFV -wFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(77,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -xkk -xkk -xkk -xkk -xkk -ybg -ybg -fVf -cfr -eRY -qqw -qqw -eRY -sEn -sEn -gnW -sEn -sEn -sEn -sEn -osG -osG -osG -osG -osG -osG -eRY -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -bic -bic -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -wvR -wvR -sIe -dMo -qzY -qzY -qzY -sIe -sIe -sIe -sIe -sIe -sIe -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wFV -wFV -wFV -wFV -wFV -wFV -wFV -wFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -qqw -qqw -psp -psp -psp -qqw -psp -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(78,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -xkk -drK -jrk -prj -pLO -xkk -xkk -ybg -kPU -uSi -eRY -qqw -qqw -eRY -sEn -sEn -sEn -sEn -sEn -sEn -sEn -osG -osG -osG -osG -osG -lYY -eRY -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -ydO -ydO -ydO -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sIe -ydO -qzY -xTr -qzY -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wFV -wFV -wFV -wFV -wFV -wFV -wFV -wFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(79,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -hbE -rBL -euk -mUT -euk -uvz -xkk -ybg -ybg -rjl -ozH -qDJ -qDJ -ozH -qdW -tkY -sEn -qdW -qdW -qdW -qdW -xzF -xzF -xzF -hLh -osG -tsd -tsd -tsd -tsd -qqw -qqw -aCN -aCN -wvR -wvR -ydO -ydO -ydO -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sIe -ydO -qzY -qzY -qzY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -sGL -sGL -sGL -sGL -sGL -sGL -sGL -sGL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(80,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -npJ -rGj -rGj -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -eLR -euk -hLY -mMb -rBL -cHZ -xkk -eVM -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -ybg -bNO -qqw -qqw -aCN -wvR -wvR -wvR -ydO -ydO -ydO -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sIe -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -sGL -sGL -sGL -sGL -sGL -sGL -sGL -sGL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(81,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -koX -lUv -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -xvr -vVD -rBL -sbG -lLu -euk -tyj -xkk -ybg -ybg -ybg -tsd -tsd -bNO -tsd -bNO -tsd -bNO -tsd -bNO -tsd -bNO -tsd -bNO -tsd -bNO -tsd -tsd -sdp -ybg -bNO -qqw -qqw -aCN -wvR -wvR -wvR -ydO -ydO -ydO -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sIe -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -sGL -sGL -sGL -sGL -sGL -sGL -sGL -sGL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(82,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -koX -koX -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -jyq -qAH -tcJ -phc -rBL -jbl -uQd -tsd -bNO -tsd -bNO -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -tsd -bNO -bNO -tsd -qqw -qqw -aCN -wvR -wvR -wvR -ydO -ydO -ydO -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -sGL -sGL -sGL -sGL -sGL -sGL -sGL -sGL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(83,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -koX -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -xkk -ayX -hbj -rXJ -kuC -xkk -uQd -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -iJu -iJu -iJu -act -act -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -xLU -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mxB -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(84,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -koX -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -uQd -xkk -xkk -szo -xkk -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -act -act -act -act -act -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -xLU -ydO -ydO -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(85,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -npJ -koX -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -jXz -fIb -xkk -uQd -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -act -act -act -act -act -act -act -act -act -act -act -act -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -xLU -ydO -ydO -aCN -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(86,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -koX -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -vOo -fvv -oPp -uQd -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -act -act -act -act -act -act -act -act -act -act -act -act -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sfh -ydO -ydO -aCN -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -euy -qDJ -eOG -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(87,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -koX -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -xkk -sxW -xkk -uQd -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -urU -urU -urU -dxA -dxA -dxA -dxA -dxA -dxA -dxA -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sfh -ydO -ydO -aCN -wvR -wvR -ydO -ydO -ydO -aCN -qqw -qqw -qqw -qqw -euy -fbL -ndi -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(88,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -tvc -tvc -npJ -jCP -jCP -jCP -koX -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uQd -uQd -uQd -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sfh -ydO -ydO -aCN -wvR -wvR -wvR -ydO -ydO -aCN -qqw -qqw -qqw -qqw -mjl -qxN -qwa -oGx -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(89,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -npJ -rGj -jCP -jCP -koX -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sIe -ydO -ydO -aCN -sIe -sIe -sIe -sIe -sIe -aCN -qqw -qqw -qqw -qqw -bpv -fbL -oGx -fbL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(90,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -npJ -jCP -jCP -koX -koX -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -wcF -wcF -bic -bic -wcF -wcF -wcF -wcF -wcF -wcF -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sIe -ydO -ydO -aCN -sIe -sIe -sIe -sIe -sIe -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(91,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -koX -jCP -jCP -npJ -koX -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -wcF -wcF -fbL -oGx -fbL -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sIe -ydO -ydO -aCN -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(92,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -koX -jCP -jCP -jCP -koX -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -oGx -qwa -oGx -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -sIe -ydO -ydO -aCN -wFV -wFV -wFV -wFV -wFV -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(93,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -koX -jCP -jCP -jCP -npJ -koX -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -fbL -oGx -fbL -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mSa -mSa -sGL -vvy -vvy -qqw -mSa -mSa -vvy -vvy -vvy -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(94,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -koX -jCP -jCP -jCP -sEI -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mSa -mSa -sGL -vvy -vvy -qqw -mSa -mSa -mSa -vvy -vvy -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(95,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -npJ -rGj -jCP -jCP -sEI -koX -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mSa -mSa -sGL -vvy -vvy -qqw -sGL -sGL -sGL -sGL -sGL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(96,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -npJ -jCP -jCP -sEI -koX -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mSa -mSa -sGL -vvy -vvy -qqw -sGL -sGL -sGL -sGL -sGL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(97,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -koX -jCP -jCP -jCP -jsn -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(98,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -koX -jCP -jCP -jCP -koX -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(99,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -npJ -koX -koX -koX -npJ -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(100,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -npJ -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -"} -(101,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -"} -(102,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(103,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(104,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(105,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(106,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(107,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(108,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nbZ -pFD -pFD -nbZ -nbZ -nbZ -nbZ -jCP -tvc -tvc -uZo -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(109,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cZM -cZM -cZM -cZM -cZM -cZM -cZM -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nbZ -pFD -pFD -nbZ -nbZ -nbZ -nbZ -jCP -jCP -uZo -uZo -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(110,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cZM -uFZ -mqf -mqf -mqf -mqf -cZM -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nbZ -nbZ -pFD -pFD -pFD -pFD -pFD -tuO -tuO -tuO -uZo -uZo -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(111,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cZM -jyY -cZM -cZM -cZM -cZM -cZM -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nbZ -nbZ -nbZ -nbZ -nbZ -pFD -pFD -jpW -tuO -nbZ -uZo -uZo -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(112,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cZM -xYD -cZM -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -nbZ -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(113,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cZM -xYD -cZM -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(114,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cZM -cZM -cZM -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -uZo -uZo -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(115,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -uZo -uZo -uZo -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(116,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(117,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -uZo -uZo -rGj -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(118,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -oEj -uZo -uZo -uZo -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(119,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nbZ -nbZ -nbZ -nbZ -tuO -nbZ -nbZ -uZo -uZo -oEj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(120,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nbZ -jyw -jyw -jyw -jyw -lyN -tuO -uZo -oEj -uZo -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(121,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nbZ -nbZ -nbZ -nbZ -jyw -jyw -jyw -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -jCP -jCP -jCP -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(122,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nbZ -pFD -pFD -pFD -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -"} -(123,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -pFD -pFD -pFD -pFD -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(124,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nbZ -pFD -pFD -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(125,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(126,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(127,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(128,1,4) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} - -(1,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -eoL -"} -(2,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(3,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(4,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(5,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(6,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(7,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(8,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -eDT -esl -esl -esl -esl -eDT -esl -esl -esl -eDT -esl -esl -esl -eDT -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(9,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -jCP -jCP -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -rGj -rGj -rGj -esl -rGj -rGj -esl -eDT -esl -esl -esl -eDT -esl -esl -rGj -rGj -rGj -rGj -rGj -eDT -esl -esl -esl -esl -eDT -esl -esl -esl -esl -esl -eDT -esl -esl -esl -eDT -esl -eDT -esl -jCP -rRX -eDT -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(10,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -rGj -esl -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -eDT -esl -esl -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -nOp -rRX -iXr -iXr -eDT -rRX -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(11,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -eDT -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -lip -hyA -bCq -iXr -iXr -eDT -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(12,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -eDT -bCq -hyA -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(13,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -oHK -npJ -esl -esl -iXr -esl -eDT -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(14,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -koX -npJ -esl -nOp -eDT -rRX -eDT -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(15,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -rGj -rGj -rGj -esl -esl -esl -koX -itF -rkd -wJc -kNj -kNj -kNj -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(16,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -rRX -iXr -esl -iXr -esl -koX -kGL -iXr -nFY -ifd -ifd -dlu -ifd -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(17,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -jCP -gpG -cjz -bCq -iXr -koX -esl -iXr -dIj -tSd -tSd -sLN -laK -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(18,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -nbZ -kNj -gdM -rkd -koX -flC -hCo -rkd -wJc -kNj -juf -kNj -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(19,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -nbZ -ate -bGd -nFY -npJ -jvj -npJ -koX -koX -koX -npJ -ocJ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(20,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jaf -sNy -sNy -jaf -nbZ -tSd -tSd -qEw -uKD -wAr -npJ -koX -kwY -npJ -koX -vIt -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(21,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jaf -sNy -jaf -sNy -nbZ -sAi -tSd -juf -koX -koX -npJ -npJ -iOn -mYD -koX -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(22,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -sNy -cZs -sNy -sNy -nbZ -nbZ -qyS -dIj -pSx -koX -npJ -koX -isQ -koX -nbZ -nbZ -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(23,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jaf -cZs -jaf -sNy -nbZ -nbZ -nbZ -rkd -nJk -koX -koX -npJ -koX -npJ -juf -flQ -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(24,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -sNy -cZs -sNy -cZs -sNy -sNy -jaf -jCP -fvp -rkd -sLN -tSd -rkd -jCP -nbZ -nbZ -nbZ -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(25,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jaf -cZs -jaf -cZs -jaf -sNy -jaf -jaf -jCP -jtB -sLN -tSd -mFx -jaf -sNy -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(26,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jaf -sNy -sNy -cZs -sNy -sNy -sNy -jaf -jCP -ahS -tAV -eEa -ahS -jaf -jaf -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(27,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jHi -eEa -nXA -jaf -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(28,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -eEa -eEa -oqz -eEa -sNy -sNy -sNy -sNy -sNy -jCP -jCP -jCP -jCP -jCP -jCP -"} -(29,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jaf -sNy -jaf -sNy -jaf -sNy -jaf -ahS -nXA -nXA -ahS -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(30,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -aat -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(31,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -jCP -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(32,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jCP -jCP -jCP -jCP -jCP -jCP -"} -(33,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(34,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jaf -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(35,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jaf -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(36,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -cZs -sNy -cZs -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(37,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -esl -jCP -jCP -jCP -cZs -jaf -cZs -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(38,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jCP -jCP -jCP -jCP -jCP -jCP -"} -(39,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(40,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -sNy -jCP -jCP -jCP -jCP -jCP -jCP -"} -(41,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jaf -jaf -jaf -sNy -jaf -sNy -jaf -sNy -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(42,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jaf -sNy -sNy -sNy -cZs -sNy -sNy -sNy -sNy -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(43,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jaf -sNy -jaf -cZs -jaf -cZs -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(44,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -bOb -bOb -bOb -bOb -bOb -bOb -bOb -bOb -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uNR -roK -uNR -eOG -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jaf -sNy -sNy -sNy -sNy -cZs -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(45,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -bOb -bOb -bOb -bOb -bOb -bOb -bOb -bOb -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -roK -ubM -gfp -kdB -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -rGj -rGj -jCP -jaf -sNy -jaf -sNy -jaf -cZs -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(46,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -lXz -lXz -lXz -lXz -rgK -rgK -rgK -rgK -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -uNR -frM -uNR -sLw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jaf -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -sNy -jCP -jCP -jCP -jCP -jCP -jCP -"} -(47,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -hTZ -hTZ -hTZ -hTZ -hTZ -hTZ -hTZ -hTZ -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -bpv -uwC -sLw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -rGj -jCP -jCP -jaf -sNy -jaf -sNy -jaf -sNy -jaf -cZs -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(48,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -hTZ -hTZ -hTZ -jnF -hTZ -hTZ -hTZ -hTZ -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -esl -rGj -rGj -jCP -jCP -jCP -jCP -jCP -sNy -sNy -sNy -sNy -sNy -sNy -sNy -cZs -sNy -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(49,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mxB -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -udN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jaf -jaf -jaf -jaf -jaf -jaf -jaf -sNy -jaf -jaf -jCP -jCP -jCP -jCP -jCP -jCP -"} -(50,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -udN -udN -udN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(51,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -sIe -sIe -sIe -sIe -sIe -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -dLB -dLB -gfp -wVz -wVz -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(52,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -lBv -lBv -lBv -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -esl -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -"} -(53,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -xLU -xLU -xLU -xLU -xLU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -lBv -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -"} -(54,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mxB -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -xLU -sIe -xLU -sIe -xLU -aCN -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -"} -(55,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -qqw -qqw -aCN -acw -sIe -sIe -sIe -sIe -aCN -qqw -qqw -aCN -urU -urU -act -dxA -dxA -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(56,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mxB -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -xLU -ydO -ydO -aCN -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -aCN -urU -urU -act -dxA -dxA -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(57,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mxB -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -xLU -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -act -dxA -dxA -aCN -wcF -wcF -wcF -wcF -wcF -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(58,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -xLU -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -act -dxA -dxA -aCN -dxA -aCN -aCN -aCN -urU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -"} -(59,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -ydO -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -wcF -dxA -dxA -aCN -dxA -aCN -aCN -aCN -urU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(60,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -wvR -sIe -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -wcF -dxA -dxA -aCN -dxA -aCN -aCN -aCN -urU -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(61,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wvR -sIe -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -wcF -dxA -dxA -aCN -dxA -act -act -act -urU -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(62,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wvR -sIe -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -acw -wcF -dxA -dxA -aCN -act -act -act -act -act -act -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(63,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -urU -btS -urU -dxA -dxA -dxA -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -"} -(64,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -srt -sEn -sEn -sEn -sEn -sEn -sEn -sEn -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -odO -wcF -odO -wcF -odO -wcF -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -"} -(65,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -srt -srt -sEn -sEn -sEn -sEn -sEn -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -"} -(66,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -srt -srt -srt -srt -tgC -cfr -cfr -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -"} -(67,1,5) = {" -psp -psp -psp -psp -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -srt -srt -vzs -vzs -vzs -vzs -vzs -cfr -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -"} -(68,1,5) = {" -psp -psp -psp -psp -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -srt -vzs -vzs -vzs -vzs -vzs -vzs -vzs -cfr -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -"} -(69,1,5) = {" -psp -psp -psp -psp -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -eRY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -"} -(70,1,5) = {" -psp -psp -psp -psp -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(71,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -act -act -act -act -act -act -act -act -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(72,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -act -act -act -act -act -act -act -rEh -siF -rEh -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(73,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -urU -urU -urU -urU -dxA -dxA -dxA -qrL -sdn -lYN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(74,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -wcF -wcF -wcF -wcF -wcF -rEh -bSK -rEh -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(75,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wcF -wcF -wcF -wcF -wcF -wcF -wcF -wcF -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(76,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -wvR -ydO -ydO -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(77,1,5) = {" -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rpA -hRh -rpA -hRh -rpA -hRh -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -wvR -acw -eQe -acw -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -qqw -qqw -psp -psp -psp -qqw -psp -psp -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(78,1,5) = {" -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -hRh -iyb -iyb -iyb -iyb -iyb -iyb -rpA -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -eQe -aCN -eQe -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(79,1,5) = {" -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rpA -iyb -wOm -iEt -iEt -eSU -iyb -hRh -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -acw -eQe -acw -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(80,1,5) = {" -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -hRh -iyb -vdL -sOs -vCH -tAK -iyb -odm -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -aCN -aCN -aCN -aCN -aCN -aCN -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(81,1,5) = {" -psp -psp -psp -psp -psp -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -rpA -iyb -vdL -lAK -jhJ -tAK -iyb -hRh -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(82,1,5) = {" -psp -psp -psp -psp -psp -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -hRh -iyb -kmk -whC -whC -gNf -iyb -rpA -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(83,1,5) = {" -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -hUx -iyb -iyb -iyb -iyb -iyb -iyb -hRh -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(84,1,5) = {" -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -hRh -rpA -hRh -rpA -hRh -rpA -oqY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(85,1,5) = {" -psp -psp -psp -psp -psp -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oqY -uZk -uZk -jjx -jjx -vNa -oqY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(86,1,5) = {" -lnu -lnu -lnu -lnu -lnu -lnu -rZo -lnu -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oqY -uZk -uZk -guH -vNa -vNa -oqY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(87,1,5) = {" -rZo -bun -tuB -tuB -ryZ -rZo -rZo -rZo -rGj -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oqY -uZk -tKz -tKz -vNa -vNa -oqY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wFV -wFV -vvy -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(88,1,5) = {" -xMA -tuB -tuB -tuB -tuB -tuB -kHV -rZo -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oqY -tKz -tKz -tKz -oqY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mSa -gfp -vvy -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(89,1,5) = {" -xMA -tuB -tuB -rZo -rZo -rZo -rZo -rZo -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -oqY -oqY -oqY -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mSa -sGL -sGL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(90,1,5) = {" -lnu -lnu -lnu -lnu -lnu -lnu -rZo -rZo -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(91,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -wFV -wFV -vvy -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(92,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mSa -gfp -vvy -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -"} -(93,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -mSa -sGL -sGL -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -"} -(94,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(95,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(96,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -"} -(97,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -"} -(98,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -"} -(99,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -"} -(100,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(101,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(102,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -rGj -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(103,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(104,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(105,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(106,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(107,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(108,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -oEj -hlA -oEj -jCP -jCP -jCP -jCP -jCP -jCP -iXr -koX -dPS -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(109,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cZM -cZM -cZM -cZM -cZM -cZM -sMr -cZM -sMr -cZM -oEj -nXs -khQ -nXs -oEj -jCP -jCP -jCP -rRX -koX -koX -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(110,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cZM -xYD -yee -yee -yee -uFZ -jwk -jwk -uFZ -jwk -koX -sEI -hlA -khQ -khQ -jCP -jCP -oEj -tjQ -koX -iXr -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(111,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -cZM -cZM -cZM -cZM -cZM -cZM -sMr -cZM -sMr -jwk -sEI -nXs -sEI -hlA -khQ -oEj -oEj -nOp -iXr -koX -nOp -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(112,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sEI -koX -sEI -iXr -iXr -sEI -oEj -oEj -tjQ -esl -koX -iXr -oEj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(113,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sEI -koX -nlR -esl -khQ -jCP -jCP -oEj -tjQ -koX -koX -nOp -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(114,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sEI -koX -sEI -iXr -oEj -jCP -jCP -jCP -oEj -iXr -koX -iXr -oEj -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(115,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nOp -nOp -nOp -jCP -jCP -jCP -oEj -rGj -koX -nOp -nlR -jCP -jCP -jCP -jCP -jCP -nlR -koX -esl -nOp -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(116,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -sZD -kAz -jCP -qrH -nOp -jCP -khQ -khQ -iXr -koX -esl -esl -oEj -jCP -jCP -jCP -oEj -nlR -koX -esl -nlR -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(117,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -oEj -oEj -nOp -nsE -waO -iXr -ada -sVm -nOp -esl -esl -koX -esl -esl -nOp -jCP -jCP -jCP -jCP -iXr -koX -esl -nOp -oEj -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(118,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -oEj -oEj -oEj -nOp -iXr -esl -ahl -jIv -euh -esl -esl -esl -koX -koX -esl -nlR -nOp -oEj -jCP -oEj -esl -koX -esl -nlR -oEj -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(119,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -oEj -tZl -iXr -nOp -moG -ahl -esl -esl -nlR -nOp -esl -koX -koX -esl -iXr -iXr -sZD -tjQ -koX -koX -oEj -nOp -oEj -oEj -jCP -oEj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(120,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -nOp -nOp -oRX -new -esl -iXr -nDR -nOp -khQ -jCP -jCP -koX -koX -koX -iXr -esl -koX -koX -iXr -nOp -nOp -oEj -oEj -oEj -oEj -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(121,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -xxz -kKV -tKM -aNH -twS -khQ -nOp -jCP -jCP -jCP -jCP -jCP -vdM -koX -koX -koX -tjQ -nOp -nOp -oEj -oEj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -"} -(122,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -rGj -rGj -rGj -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -rGj -jCP -jCP -jCP -rGj -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -"} -(123,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -"} -(124,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -"} -(125,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(126,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(127,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} -(128,1,5) = {" -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -jCP -rGj -rGj -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -qqw -psp -psp -psp -psp -psp -psp -psp -psp -psp -psp -"} diff --git a/_maps/roguetown.json b/_maps/roguetown.json index 629f4304ba..213ac6df39 100644 --- a/_maps/roguetown.json +++ b/_maps/roguetown.json @@ -2,7 +2,7 @@ "map_name": "Roguetown", "map_path": "map_files/roguetown", "map_file": "roguetown.dmm", - "traits": [{"Up": 1}, {"Up": 1, "Down": -1}, {"Up": 1, "Down": -1}, {"Down": -1}], + "traits": [{"Up": 1}, {"Up": 1, "Down": -1, "Baseturf": "/turf/open/transparent/openspace"}, {"Up": 1, "Down": -1, "Baseturf": "/turf/open/transparent/openspace"}, {"Down": -1, "Baseturf": "/turf/open/transparent/openspace"}], "minetype": null, "space_empty_levels": 0, "space_ruin_levels": 0, diff --git a/_maps/shuttles/cargo_rogue.dmm b/_maps/shuttles/cargo_rogue.dmm index 079fd9122f..eedb73438f 100644 --- a/_maps/shuttles/cargo_rogue.dmm +++ b/_maps/shuttles/cargo_rogue.dmm @@ -9,7 +9,7 @@ /obj/structure/fluff/railing/border{ dir = 8 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ icon_state = "jagged" }, /obj/structure/fluff/railing/border{ @@ -23,7 +23,7 @@ /obj/structure/fluff/railing/border{ dir = 1 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ icon_state = "jagged" }, /turf/open/floor/rogue/ruinedwood{ @@ -34,12 +34,12 @@ /obj/structure/fluff/railing/border{ dir = 1 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ icon_state = "jagged" }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/shuttle/supply) "e" = ( @@ -49,7 +49,7 @@ /obj/structure/fluff/railing/border{ dir = 4 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ icon_state = "jagged" }, /obj/structure/fluff/railing/border{ @@ -86,8 +86,8 @@ dir = 9 }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/shuttle/supply) "i" = ( @@ -100,8 +100,8 @@ /area/shuttle/supply/buy) "k" = ( /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/shuttle/supply) "l" = ( @@ -109,8 +109,8 @@ dir = 5 }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/shuttle/supply) "m" = ( @@ -129,8 +129,8 @@ dir = 5 }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/shuttle/supply) "o" = ( @@ -138,9 +138,9 @@ dir = 1 }, /obj/structure/fluff/railing/border, -/obj/effect/decal/cobbleedge{ - icon_state = "jagged"; - dir = 4 +/obj/effect/decal/turfedge_neu{ + dir = 4; + icon_state = "jagged" }, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" @@ -152,20 +152,13 @@ }, /turf/open/floor/rogue/ruinedwood, /area/shuttle/supply/buy) -"q" = ( -/obj/machinery/light/rogue/firebowl/standing/blue, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/shuttle/supply) "r" = ( /obj/structure/fluff/railing/border{ dir = 4 }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/shuttle/supply) "s" = ( @@ -191,8 +184,8 @@ dir = 10 }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/shuttle/supply) "w" = ( @@ -200,8 +193,8 @@ dir = 6 }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/shuttle/supply) "x" = ( @@ -213,8 +206,8 @@ dir = 6 }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/shuttle/supply) "y" = ( @@ -222,9 +215,9 @@ /obj/structure/fluff/railing/border{ dir = 8 }, -/obj/effect/decal/cobbleedge{ - icon_state = "jagged"; - dir = 1 +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "jagged" }, /obj/structure/fluff/railing/border{ dir = 10 @@ -235,9 +228,9 @@ /area/shuttle/supply) "z" = ( /obj/structure/fluff/railing/border, -/obj/effect/decal/cobbleedge{ - icon_state = "jagged"; - dir = 1 +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "jagged" }, /turf/open/floor/rogue/ruinedwood{ icon_state = "horzw" @@ -245,13 +238,13 @@ /area/shuttle/supply) "A" = ( /obj/structure/fluff/railing/border, -/obj/effect/decal/cobbleedge{ - icon_state = "jagged"; - dir = 1 +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "jagged" }, /turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 + dir = 1; + icon_state = "vertw" }, /area/shuttle/supply) "B" = ( @@ -259,9 +252,9 @@ /obj/structure/fluff/railing/border{ dir = 4 }, -/obj/effect/decal/cobbleedge{ - icon_state = "jagged"; - dir = 1 +/obj/effect/decal/turfedge_neu{ + dir = 1; + icon_state = "jagged" }, /obj/structure/fluff/railing/border{ dir = 6 @@ -278,17 +271,6 @@ icon_state = "weird1" }, /area/shuttle/supply/sell) -"D" = ( -/obj/docking_port/mobile/supply{ - dwidth = 9; - height = 4; - width = 17 - }, -/turf/open/floor/rogue/ruinedwood{ - icon_state = "vertw"; - dir = 1 - }, -/area/shuttle/supply) "E" = ( /obj/structure/fluff/buysign, /turf/open/floor/rogue/ruinedwood, @@ -299,6 +281,13 @@ icon_state = "weird1" }, /area/shuttle/supply/sell) +"T" = ( +/obj/docking_port/mobile, +/turf/open/floor/rogue/ruinedwood{ + dir = 1; + icon_state = "vertw" + }, +/area/shuttle/supply) (1,1,1) = {" a @@ -364,11 +353,11 @@ j k "} (10,1,1) = {" -k +T k i k -D +k "} (11,1,1) = {" k @@ -408,7 +397,7 @@ z (16,1,1) = {" e l -q +k w B "} diff --git a/_maps/shuttles/emergency_rogue.dmm b/_maps/shuttles/emergency_rogue.dmm index edb98e5eb9..317a9f1643 100644 --- a/_maps/shuttles/emergency_rogue.dmm +++ b/_maps/shuttles/emergency_rogue.dmm @@ -86,7 +86,7 @@ }, /area/shuttle/escape) "i" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ icon_state = "jagged" }, /turf/open/floor/rogue/ruinedwood{ @@ -121,7 +121,7 @@ /turf/closed/wall/mineral/rogue/wooddark, /area/shuttle/escape) "n" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ icon_state = "jagged"; dir = 1 }, @@ -174,7 +174,7 @@ /obj/structure/fluff/railing/border{ dir = 8 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ icon_state = "jagged"; dir = 1 }, @@ -183,7 +183,7 @@ }, /area/shuttle/escape) "t" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ icon_state = "jagged"; dir = 1 }, @@ -233,7 +233,7 @@ /obj/structure/fluff/railing/border{ dir = 4 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ icon_state = "jagged"; dir = 1 }, @@ -276,7 +276,7 @@ /obj/structure/fluff/railing/border{ dir = 8 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ icon_state = "jagged" }, /turf/open/floor/rogue/ruinedwood{ @@ -287,7 +287,7 @@ /obj/structure/fluff/railing/border{ dir = 4 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ icon_state = "jagged" }, /turf/open/floor/rogue/ruinedwood{ @@ -300,7 +300,7 @@ name = "Box emergency shuttle"; width = 15 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ icon_state = "jagged"; dir = 1 }, @@ -309,7 +309,7 @@ }, /area/shuttle/escape) "H" = ( -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ icon_state = "jagged"; dir = 1 }, @@ -321,7 +321,7 @@ /obj/machinery/light/rogue/torchholder{ dir = 8 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ icon_state = "jagged"; dir = 4 }, @@ -334,7 +334,7 @@ /obj/machinery/light/rogue/torchholder{ dir = 4 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ icon_state = "jagged"; dir = 4 }, @@ -347,7 +347,7 @@ /obj/structure/fluff/railing/border{ dir = 8 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ icon_state = "jagged"; dir = 4 }, @@ -359,7 +359,7 @@ /obj/structure/fluff/railing/border{ dir = 4 }, -/obj/effect/decal/cobbleedge{ +/obj/effect/decal/turfedge_neu{ icon_state = "jagged"; dir = 4 }, diff --git a/_maps/stonehamlet.dm b/_maps/stonehamlet.dm new file mode 100644 index 0000000000..f9f53413e5 --- /dev/null +++ b/_maps/stonehamlet.dm @@ -0,0 +1 @@ +#define FORCE_MAP "_maps/stonehamlet.json" diff --git a/_maps/stonehamlet.json b/_maps/stonehamlet.json new file mode 100644 index 0000000000..49525f627e --- /dev/null +++ b/_maps/stonehamlet.json @@ -0,0 +1,15 @@ +{ + "map_name": "StoneHamlet", + "map_path": "map_files/stonehamlet", + "map_file": "stonehamlet.dmm", + "traits": [{"Up": 1}, {"Up": 1, "Down": -1, "Baseturf": "/turf/open/transparent/openspace"}, {"Up": 1, "Down": -1, "Baseturf": "/turf/open/transparent/openspace"}, {"Up": 1, "Down": -1, "Baseturf": "/turf/open/transparent/openspace"},{"Down": -1, "Baseturf": "/turf/open/transparent/openspace"}], + "minetype": null, + "space_empty_levels": 0, + "space_ruin_levels": 0, + "shuttles": { + "cargo": "cargo_rogue", + "ferry": "ferry_fancy", + "whiteship": "whiteship_box", + "emergency": "emergency_rogue" + } +} diff --git a/_maps/templates/hilbertshotel.dmm b/_maps/templates/hilbertshotel.dmm deleted file mode 100644 index 4b9d6b24c8..0000000000 --- a/_maps/templates/hilbertshotel.dmm +++ /dev/null @@ -1,540 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/open/space/bluespace, -/area/hilbertshotel) -"b" = ( -/turf/closed/indestructible/hotelwall, -/area/hilbertshotel) -"c" = ( -/obj/machinery/jukebox{ - req_access = null - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"d" = ( -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"e" = ( -/obj/structure/table/wood, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"f" = ( -/obj/structure/table/wood, -/obj/structure/showcase/machinery/tv, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"g" = ( -/obj/structure/dresser, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"h" = ( -/obj/structure/table/wood/fancy, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"i" = ( -/obj/structure/table/wood/fancy, -/obj/structure/mirror{ - pixel_y = 24 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"j" = ( -/obj/structure/table/wood/fancy, -/obj/item/flashlight/lamp/green, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"k" = ( -/obj/structure/chair/comfy/brown{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"l" = ( -/obj/structure/table/wood/poker, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"m" = ( -/obj/structure/chair/comfy/brown{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"n" = ( -/obj/effect/spawner/xmastree, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"o" = ( -/obj/structure/chair/comfy/brown{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"p" = ( -/obj/structure/mineral_door/wood, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"q" = ( -/obj/structure/bed, -/obj/item/bedsheet/random, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"r" = ( -/obj/structure/closet/cabinet{ - anchored = 1 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"t" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"u" = ( -/obj/structure/mineral_door/paperframe, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"v" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"w" = ( -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"x" = ( -/obj/structure/curtain, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"y" = ( -/obj/machinery/door/window/northleft, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"z" = ( -/obj/structure/table/reinforced, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"A" = ( -/obj/structure/mirror{ - pixel_x = -32 - }, -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"B" = ( -/obj/structure/chair/stool/bar, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"C" = ( -/obj/machinery/shower{ - dir = 8 - }, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"D" = ( -/obj/machinery/light_switch{ - pixel_x = 32 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"E" = ( -/obj/structure/table/reinforced, -/obj/item/soap/deluxe, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"F" = ( -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted{ - dir = 1 - }, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"G" = ( -/obj/machinery/light_switch{ - pixel_x = -32 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"H" = ( -/obj/structure/table/reinforced, -/obj/machinery/microwave, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"I" = ( -/turf/closed/indestructible/hoteldoor, -/area/hilbertshotel) -"J" = ( -/obj/machinery/light/small, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"K" = ( -/obj/structure/closet/crate/bin, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"L" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"M" = ( -/obj/structure/table/reinforced, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"N" = ( -/obj/structure/table/reinforced, -/obj/item/soap/deluxe, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"O" = ( -/obj/item/bikehorn/rubberducky, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"P" = ( -/obj/machinery/light/small, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"Q" = ( -/obj/machinery/smartfridge/food, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"R" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted{ - dir = 1 - }, -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"S" = ( -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"T" = ( -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"U" = ( -/obj/structure/table/reinforced, -/obj/structure/sink/kitchen, -/obj/machinery/light/small, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"V" = ( -/obj/structure/table/reinforced, -/obj/effect/spawner/lootdrop/three_course_meal, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -b -b -b -b -b -I -b -b -b -b -b -b -b -a -"} -(3,1,1) = {" -a -b -d -d -k -d -d -t -d -y -t -H -z -b -a -"} -(4,1,1) = {" -a -b -e -d -l -o -d -d -B -z -d -d -z -b -a -"} -(5,1,1) = {" -a -b -f -d -l -o -d -d -B -V -d -d -U -b -a -"} -(6,1,1) = {" -a -b -e -d -l -o -d -d -B -z -d -d -z -b -a -"} -(7,1,1) = {" -a -b -c -d -m -d -D -K -v -z -M -Q -z -b -a -"} -(8,1,1) = {" -a -b -b -b -b -p -b -b -b -b -b -b -b -b -a -"} -(9,1,1) = {" -a -b -g -d -t -d -G -u -w -A -N -A -E -b -a -"} -(10,1,1) = {" -a -b -h -d -d -d -d -b -w -w -w -w -w -b -a -"} -(11,1,1) = {" -a -b -i -d -n -d -J -b -L -w -R -w -P -b -a -"} -(12,1,1) = {" -a -b -h -d -d -d -r -b -x -F -S -T -x -b -a -"} -(13,1,1) = {" -a -b -d -d -d -d -d -b -w -w -w -w -w -b -a -"} -(14,1,1) = {" -a -b -d -j -q -q -h -b -w -C -O -C -w -b -a -"} -(15,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(16,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/_maps/templates/hilbertshotelempty.dmm b/_maps/templates/hilbertshotelempty.dmm deleted file mode 100644 index a0482c93ba..0000000000 --- a/_maps/templates/hilbertshotelempty.dmm +++ /dev/null @@ -1,289 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/open/space/bluespace, -/area/hilbertshotel) -"b" = ( -/turf/closed/indestructible/hotelwall, -/area/hilbertshotel) -"c" = ( -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"d" = ( -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"e" = ( -/turf/closed/indestructible/hoteldoor, -/area/hilbertshotel) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -b -b -b -b -b -e -b -b -b -b -b -b -b -a -"} -(3,1,1) = {" -a -b -c -c -c -c -c -c -c -c -c -c -c -b -a -"} -(4,1,1) = {" -a -b -c -c -c -c -c -c -c -c -c -c -c -b -a -"} -(5,1,1) = {" -a -b -c -c -c -c -c -c -c -c -c -c -c -b -a -"} -(6,1,1) = {" -a -b -c -c -c -c -c -c -c -c -c -c -c -b -a -"} -(7,1,1) = {" -a -b -c -c -c -c -c -c -c -c -c -c -c -b -a -"} -(8,1,1) = {" -a -b -b -b -b -c -b -b -b -b -b -b -b -b -a -"} -(9,1,1) = {" -a -b -c -c -c -c -c -c -d -d -d -d -d -b -a -"} -(10,1,1) = {" -a -b -c -c -c -c -c -b -d -d -d -d -d -b -a -"} -(11,1,1) = {" -a -b -c -c -c -c -c -b -d -d -d -d -d -b -a -"} -(12,1,1) = {" -a -b -c -c -c -c -c -b -d -d -d -d -d -b -a -"} -(13,1,1) = {" -a -b -c -c -c -c -c -b -d -d -d -d -d -b -a -"} -(14,1,1) = {" -a -b -c -c -c -c -c -b -d -d -d -d -d -b -a -"} -(15,1,1) = {" -a -b -b -b -b -b -b -b -b -b -b -b -b -b -a -"} -(16,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/_maps/templates/hilbertshotellore.dmm b/_maps/templates/hilbertshotellore.dmm deleted file mode 100644 index 0f110bdffe..0000000000 --- a/_maps/templates/hilbertshotellore.dmm +++ /dev/null @@ -1,639 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/open/space/bluespace, -/area/hilbertshotel) -"ab" = ( -/turf/closed/indestructible/hotelwall, -/area/hilbertshotel) -"ac" = ( -/obj/structure/table/wood/fancy, -/obj/structure/mirror{ - broken = 1; - desc = "Oh no, seven years of bad luck!"; - icon_state = "mirror_broke"; - pixel_y = 24 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"ad" = ( -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"ae" = ( -/obj/structure/table/wood, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"af" = ( -/obj/structure/table/wood, -/obj/structure/showcase/machinery/tv, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"ag" = ( -/obj/structure/dresser, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"ah" = ( -/obj/structure/table/wood/fancy, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"ai" = ( -/obj/structure/table/wood/poker, -/obj/item/toy/cards/deck, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"aj" = ( -/obj/structure/table/wood/fancy, -/obj/item/flashlight/lamp/green, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"ak" = ( -/obj/structure/chair/comfy/brown{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"al" = ( -/obj/structure/table/wood/poker, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"am" = ( -/obj/structure/chair/comfy/brown{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"an" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"ap" = ( -/obj/structure/bed, -/obj/item/bedsheet/random, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"aq" = ( -/obj/structure/chair/comfy/brown{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"ar" = ( -/obj/structure/mineral_door/wood, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"as" = ( -/turf/closed/indestructible/hoteldoor, -/area/hilbertshotel) -"at" = ( -/obj/effect/decal/cleanable/dirt/cobweb, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"au" = ( -/obj/machinery/light_switch{ - pixel_x = -32 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"av" = ( -/obj/machinery/light/small, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"aw" = ( -/obj/structure/closet/cabinet{ - anchored = 1 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"ax" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"ay" = ( -/obj/structure/closet/crate/bin, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"az" = ( -/obj/structure/mineral_door/paperframe, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"aA" = ( -/obj/structure/chair/stool/bar, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"aB" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 32 - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"aC" = ( -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"aD" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"aE" = ( -/obj/structure/curtain, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"aF" = ( -/obj/machinery/door/window/northleft, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"aG" = ( -/obj/structure/table/reinforced, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"aH" = ( -/obj/structure/table/reinforced, -/obj/item/pen, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"aI" = ( -/obj/structure/mirror{ - pixel_x = -32 - }, -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"aJ" = ( -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted{ - dir = 1 - }, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"aK" = ( -/obj/machinery/shower{ - dir = 8 - }, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"aL" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"aM" = ( -/obj/structure/table/wood/poker, -/obj/effect/decal/cleanable/dirt, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"aN" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted{ - dir = 1 - }, -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"aO" = ( -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"aP" = ( -/obj/item/bikehorn/rubberducky, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"aQ" = ( -/obj/structure/table/reinforced, -/obj/machinery/microwave, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"aR" = ( -/obj/machinery/smartfridge/food, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"aS" = ( -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"aT" = ( -/obj/structure/table/reinforced, -/obj/structure/sink/kitchen, -/obj/machinery/light/small, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"aU" = ( -/obj/structure/bed, -/obj/item/bedsheet/random, -/obj/effect/decal/cleanable/dirt, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"aV" = ( -/obj/machinery/light/small, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"aW" = ( -/obj/machinery/jukebox{ - req_access = null - }, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"aX" = ( -/obj/machinery/light_switch{ - pixel_x = 32 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"aY" = ( -/obj/structure/chair/stool/bar, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/vomit, -/obj/effect/mob_spawn/human/doctorhilbert, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"aZ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"ba" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt/cobweb/cobweb2, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"bb" = ( -/obj/structure/mirror{ - pixel_x = -32 - }, -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"bc" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"bd" = ( -/obj/machinery/shower{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"be" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"bf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"bg" = ( -/obj/structure/table/reinforced, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"bh" = ( -/obj/structure/table/reinforced, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/item/soap/homemade{ - name = "used soap" - }, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"bi" = ( -/obj/effect/decal/cleanable/vomit, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"bj" = ( -/obj/structure/table/reinforced, -/obj/item/soap/homemade{ - name = "used soap" - }, -/turf/open/indestructible/hoteltile, -/area/hilbertshotel) -"bk" = ( -/obj/structure/table/reinforced, -/obj/item/analyzer/hilbertsanalyzer, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) -"bl" = ( -/obj/structure/table/reinforced, -/obj/item/paper/crumpled/bloody/docsdeathnote, -/turf/open/indestructible/hotelwood, -/area/hilbertshotel) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -ab -ab -ab -ab -ab -as -ab -ab -ab -ab -ab -ab -ab -aa -"} -(3,1,1) = {" -aa -ab -at -aL -ak -ad -aL -an -ad -aF -be -aQ -aG -ab -aa -"} -(4,1,1) = {" -aa -ab -ae -ad -al -aq -ad -ad -aA -aH -ad -aL -aG -ab -aa -"} -(5,1,1) = {" -aa -ab -af -ad -ai -aq -aL -ad -aY -bl -ad -aL -aT -ab -aa -"} -(6,1,1) = {" -aa -ab -ae -ad -aM -aq -ad -ad -aA -bk -bf -bf -aG -ab -aa -"} -(7,1,1) = {" -aa -ab -aW -aL -am -ad -aX -ay -aB -aG -bg -aR -aG -ab -aa -"} -(8,1,1) = {" -aa -ab -ab -ab -ab -ar -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(9,1,1) = {" -aa -ab -ag -ad -an -ad -au -az -aC -bb -bh -aI -bj -ab -aa -"} -(10,1,1) = {" -aa -ab -ah -ad -aL -aL -ad -ab -aZ -aZ -aC -aZ -aZ -ab -aa -"} -(11,1,1) = {" -aa -ab -ac -ad -ad -aL -av -ab -aD -aC -aN -bi -aV -ab -aa -"} -(12,1,1) = {" -aa -ab -ah -ad -aL -ad -aw -ab -aE -aJ -aO -aS -aE -ab -aa -"} -(13,1,1) = {" -aa -ab -ad -ad -aL -ad -ad -ab -aC -bc -aZ -aZ -aC -ab -aa -"} -(14,1,1) = {" -aa -ab -ax -aj -ap -aU -ah -ab -ba -bd -aP -aK -aC -ab -aa -"} -(15,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/_maps/templates/hilbertshotelstorage.dmm b/_maps/templates/hilbertshotelstorage.dmm deleted file mode 100644 index 756e2e5155..0000000000 --- a/_maps/templates/hilbertshotelstorage.dmm +++ /dev/null @@ -1,23 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/closed/indestructible/hotelwall, -/area/hilbertshotelstorage) -"b" = ( -/turf/open/indestructible/hotelwood, -/area/hilbertshotelstorage) - -(1,1,1) = {" -a -a -a -"} -(2,1,1) = {" -a -b -a -"} -(3,1,1) = {" -a -a -a -"} diff --git a/_maps/templates/medium_shuttle1.dmm b/_maps/templates/medium_shuttle1.dmm deleted file mode 100644 index 962ac0b9b1..0000000000 --- a/_maps/templates/medium_shuttle1.dmm +++ /dev/null @@ -1,541 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/obj/structure/shuttle/engine/propulsion/burst/left{ - dir = 8 - }, -/turf/open/space, -/area/ruin/powered/shuttle/medium_1) -"c" = ( -/obj/structure/shuttle/engine/heater{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/ruin/powered/shuttle/medium_1) -"d" = ( -/turf/closed/wall/mineral/plastitanium, -/area/ruin/powered/shuttle/medium_1) -"f" = ( -/turf/closed/wall/mineral/titanium, -/area/ruin/powered/shuttle/medium_1) -"h" = ( -/obj/machinery/door/airlock/external/glass, -/turf/open/floor/plating, -/area/ruin/powered/shuttle/medium_1) -"i" = ( -/turf/closed/wall/mineral/titanium/overspace, -/area/ruin/powered/shuttle/medium_1) -"j" = ( -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_1) -"k" = ( -/obj/machinery/door/airlock/public/glass, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_1) -"l" = ( -/obj/structure/table, -/obj/item/storage/firstaid/regular, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_1) -"m" = ( -/obj/machinery/sleeper, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_1) -"n" = ( -/turf/open/floor/plasteel, -/area/ruin/powered/shuttle/medium_1) -"o" = ( -/obj/machinery/door/airlock/public/glass, -/turf/open/floor/plasteel, -/area/ruin/powered/shuttle/medium_1) -"p" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_1) -"q" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_1) -"r" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_1) -"s" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/powered/shuttle/medium_1) -"t" = ( -/obj/machinery/power/smes/magical, -/turf/open/floor/plasteel, -/area/ruin/powered/shuttle/medium_1) -"u" = ( -/obj/effect/spawner/structure/window/shuttle, -/turf/open/floor/plating, -/area/ruin/powered/shuttle/medium_1) -"v" = ( -/obj/structure/chair/comfy{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_1) -"w" = ( -/obj/structure/shuttle/engine/propulsion/burst/right{ - dir = 8 - }, -/turf/open/space, -/area/ruin/powered/shuttle/medium_1) - -(1,1,1) = {" -a -a -a -a -a -i -h -f -h -i -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -f -n -n -n -f -a -a -a -a -a -"} -(3,1,1) = {" -a -a -a -i -f -f -o -f -o -f -f -i -a -a -a -"} -(4,1,1) = {" -b -b -b -f -j -f -n -n -n -f -j -f -w -w -w -"} -(5,1,1) = {" -c -c -c -f -j -k -n -t -n -k -j -f -c -c -c -"} -(6,1,1) = {" -d -d -f -f -k -f -f -f -f -f -k -f -f -d -d -"} -(7,1,1) = {" -d -d -f -j -j -f -j -j -j -f -j -j -f -d -d -"} -(8,1,1) = {" -d -d -f -j -j -k -j -j -j -k -j -j -f -d -d -"} -(9,1,1) = {" -d -d -f -j -j -f -j -j -j -f -j -j -f -d -a -"} -(10,1,1) = {" -a -d -f -f -f -f -k -f -k -f -f -f -f -a -a -"} -(11,1,1) = {" -a -a -h -j -k -j -j -u -j -j -k -j -h -a -a -"} -(12,1,1) = {" -a -a -h -j -f -j -j -u -j -j -f -j -h -a -a -"} -(13,1,1) = {" -a -a -i -f -f -f -k -f -k -f -f -f -i -a -a -"} -(14,1,1) = {" -a -a -a -a -f -l -p -u -j -j -f -a -a -a -a -"} -(15,1,1) = {" -a -a -a -a -f -m -p -u -j -j -f -a -a -a -a -"} -(16,1,1) = {" -a -a -a -a -f -f -k -f -k -f -f -a -a -a -a -"} -(17,1,1) = {" -a -a -a -a -f -j -j -f -j -j -f -a -a -a -a -"} -(18,1,1) = {" -a -a -a -a -f -j -j -f -j -j -f -a -a -a -a -"} -(19,1,1) = {" -a -a -a -a -i -f -k -f -k -f -i -a -a -a -a -"} -(20,1,1) = {" -a -a -a -a -a -f -q -q -q -f -a -a -a -a -a -"} -(21,1,1) = {" -a -a -a -a -a -f -q -v -q -f -a -a -a -a -a -"} -(22,1,1) = {" -a -a -a -a -a -f -r -r -r -f -a -a -a -a -a -"} -(23,1,1) = {" -a -a -a -a -a -i -s -s -s -i -a -a -a -a -a -"} diff --git a/_maps/templates/medium_shuttle2.dmm b/_maps/templates/medium_shuttle2.dmm deleted file mode 100644 index c9f46bd66e..0000000000 --- a/_maps/templates/medium_shuttle2.dmm +++ /dev/null @@ -1,575 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/obj/structure/shuttle/engine/propulsion/burst/left{ - dir = 8 - }, -/turf/open/space, -/area/ruin/powered/shuttle/medium_2) -"c" = ( -/obj/structure/shuttle/engine/heater{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/ruin/powered/shuttle/medium_2) -"d" = ( -/turf/closed/wall/mineral/plastitanium, -/area/ruin/powered/shuttle/medium_2) -"f" = ( -/obj/structure/shuttle/engine/propulsion/burst/right{ - dir = 8 - }, -/turf/open/space, -/area/ruin/powered/shuttle/medium_2) -"g" = ( -/turf/closed/wall/mineral/titanium, -/area/ruin/powered/shuttle/medium_2) -"i" = ( -/turf/closed/wall/mineral/titanium/overspace, -/area/ruin/powered/shuttle/medium_2) -"k" = ( -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_2) -"l" = ( -/obj/machinery/door/airlock/external/glass, -/turf/open/floor/plating, -/area/ruin/powered/shuttle/medium_2) -"m" = ( -/turf/open/floor/plasteel, -/area/ruin/powered/shuttle/medium_2) -"n" = ( -/obj/machinery/door/airlock/public/glass, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_2) -"o" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_2) -"p" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_2) -"r" = ( -/obj/structure/table, -/turf/open/floor/plasteel, -/area/ruin/powered/shuttle/medium_2) -"s" = ( -/obj/structure/table, -/obj/item/storage/firstaid/regular, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_2) -"t" = ( -/obj/machinery/sleeper{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_2) -"u" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_2) -"v" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/powered/shuttle/medium_2) -"w" = ( -/obj/machinery/power/smes/magical, -/turf/open/floor/plating, -/area/ruin/powered/shuttle/medium_2) -"x" = ( -/obj/effect/spawner/structure/window/shuttle, -/turf/open/floor/plating, -/area/ruin/powered/shuttle/medium_2) -"y" = ( -/obj/structure/chair/comfy{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_2) -"B" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ruin/powered/shuttle/medium_2) - -(1,1,1) = {" -a -a -a -b -f -a -a -a -b -f -a -a -a -"} -(2,1,1) = {" -a -a -a -c -c -a -a -a -c -c -a -a -a -"} -(3,1,1) = {" -a -a -a -d -d -a -a -a -d -d -a -a -a -"} -(4,1,1) = {" -b -f -d -d -d -d -a -d -d -d -d -b -f -"} -(5,1,1) = {" -c -c -d -d -g -g -l -g -g -d -d -c -c -"} -(6,1,1) = {" -d -d -g -g -g -r -m -r -g -g -g -d -d -"} -(7,1,1) = {" -d -d -g -m -m -m -m -m -m -m -g -d -d -"} -(8,1,1) = {" -d -g -g -n -g -B -w -B -g -n -g -g -d -"} -(9,1,1) = {" -d -g -k -k -g -g -B -g -g -k -k -g -d -"} -(10,1,1) = {" -d -g -k -k -g -g -g -g -g -k -k -g -d -"} -(11,1,1) = {" -a -i -g -n -g -g -g -g -g -n -g -i -a -"} -(12,1,1) = {" -a -a -g -k -k -n -k -n -k -k -g -a -a -"} -(13,1,1) = {" -a -a -g -k -k -g -g -g -k -k -g -a -a -"} -(14,1,1) = {" -a -a -g -g -n -g -g -g -n -g -g -a -a -"} -(15,1,1) = {" -a -a -l -k -k -g -g -g -k -k -l -a -a -"} -(16,1,1) = {" -a -a -i -g -n -g -g -g -n -g -i -a -a -"} -(17,1,1) = {" -a -a -a -g -k -k -k -k -k -g -a -a -a -"} -(18,1,1) = {" -a -a -a -g -n -g -g -g -n -g -a -a -a -"} -(19,1,1) = {" -a -a -a -g -o -s -x -k -k -g -a -a -a -"} -(20,1,1) = {" -a -a -a -g -o -t -x -k -k -g -a -a -a -"} -(21,1,1) = {" -a -a -a -g -n -g -g -g -n -g -a -a -a -"} -(22,1,1) = {" -a -a -a -g -k -k -x -k -k -g -a -a -a -"} -(23,1,1) = {" -a -a -a -g -k -k -x -k -k -g -a -a -a -"} -(24,1,1) = {" -a -a -a -g -n -g -g -g -n -g -a -a -a -"} -(25,1,1) = {" -a -a -a -g -p -p -y -p -p -g -a -a -a -"} -(26,1,1) = {" -a -a -a -g -p -u -u -u -p -g -a -a -a -"} -(27,1,1) = {" -a -a -a -i -g -v -v -v -g -i -a -a -a -"} -(28,1,1) = {" -a -a -a -a -i -a -a -a -i -a -a -a -a -"} diff --git a/_maps/templates/medium_shuttle3.dmm b/_maps/templates/medium_shuttle3.dmm deleted file mode 100644 index 4d538e8138..0000000000 --- a/_maps/templates/medium_shuttle3.dmm +++ /dev/null @@ -1,696 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 1 - }, -/turf/open/space, -/area/ruin/powered/shuttle/medium_3) -"c" = ( -/turf/closed/wall/mineral/plastitanium, -/area/ruin/powered/shuttle/medium_3) -"d" = ( -/obj/structure/shuttle/engine/heater{ - dir = 1 - }, -/turf/open/floor/plating/airless, -/area/ruin/powered/shuttle/medium_3) -"h" = ( -/turf/closed/wall/mineral/titanium, -/area/ruin/powered/shuttle/medium_3) -"j" = ( -/obj/machinery/door/airlock/external/glass, -/turf/open/floor/plating, -/area/ruin/powered/shuttle/medium_3) -"k" = ( -/obj/machinery/power/smes/magical, -/turf/open/floor/plasteel, -/area/ruin/powered/shuttle/medium_3) -"l" = ( -/turf/open/floor/plasteel, -/area/ruin/powered/shuttle/medium_3) -"m" = ( -/turf/open/floor/plating, -/area/ruin/powered/shuttle/medium_3) -"n" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 8 - }, -/turf/open/space, -/area/ruin/powered/shuttle/medium_3) -"o" = ( -/obj/structure/shuttle/engine/heater{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/ruin/powered/shuttle/medium_3) -"p" = ( -/obj/machinery/door/airlock/public/glass, -/turf/open/floor/plasteel, -/area/ruin/powered/shuttle/medium_3) -"q" = ( -/obj/structure/shuttle/engine/heater{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/ruin/powered/shuttle/medium_3) -"r" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4 - }, -/turf/open/space, -/area/ruin/powered/shuttle/medium_3) -"t" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/powered/shuttle/medium_3) -"v" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_3) -"w" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_3) -"x" = ( -/obj/structure/chair/comfy{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_3) -"z" = ( -/obj/machinery/sleeper, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_3) -"A" = ( -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_3) -"C" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_3) -"D" = ( -/obj/structure/table, -/obj/item/storage/firstaid, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/shuttle/medium_3) -"E" = ( -/obj/structure/shuttle/engine/heater, -/turf/open/floor/plating/airless, -/area/ruin/powered/shuttle/medium_3) -"F" = ( -/obj/structure/shuttle/engine/propulsion, -/turf/open/space, -/area/ruin/powered/shuttle/medium_3) -"G" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ruin/powered/shuttle/medium_3) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -n -a -a -a -a -n -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -a -n -c -o -a -a -a -a -o -c -n -a -a -a -a -a -a -"} -(3,1,1) = {" -a -a -a -a -a -c -o -c -c -c -a -a -c -c -c -o -c -a -a -a -a -a -"} -(4,1,1) = {" -a -a -a -a -c -c -c -c -c -c -a -a -c -c -c -c -c -c -a -a -a -a -"} -(5,1,1) = {" -a -a -a -c -c -h -h -c -c -c -j -j -c -c -c -h -h -c -c -a -a -a -"} -(6,1,1) = {" -a -a -c -c -h -k -l -G -h -G -m -m -G -h -G -l -k -h -c -c -a -a -"} -(7,1,1) = {" -a -b -d -c -h -l -l -l -l -p -l -l -p -l -l -l -l -h -c -E -F -a -"} -(8,1,1) = {" -a -c -c -c -c -G -l -l -l -G -t -t -G -l -l -l -G -c -c -c -c -a -"} -(9,1,1) = {" -b -d -c -c -c -h -l -l -G -z -C -C -D -G -l -l -h -c -c -c -E -F -"} -(10,1,1) = {" -a -a -c -c -c -G -p -G -v -G -C -C -G -A -G -p -G -c -c -c -a -a -"} -(11,1,1) = {" -a -a -a -a -j -m -l -t -w -w -l -l -A -A -t -l -m -j -a -a -a -a -"} -(12,1,1) = {" -a -a -a -a -j -m -l -t -x -w -l -l -A -A -t -l -m -j -a -a -a -a -"} -(13,1,1) = {" -a -a -c -c -c -G -p -G -w -G -A -A -G -A -G -p -G -c -c -c -a -a -"} -(14,1,1) = {" -b -d -c -c -c -h -l -l -G -A -A -A -A -G -l -l -h -c -c -c -E -F -"} -(15,1,1) = {" -a -c -c -c -c -G -l -l -l -G -t -t -G -l -l -l -G -c -c -c -c -a -"} -(16,1,1) = {" -a -b -d -c -h -l -l -l -l -p -l -l -p -l -l -l -l -h -c -E -F -a -"} -(17,1,1) = {" -a -a -c -c -h -k -l -G -h -G -m -m -G -h -G -l -k -h -c -c -a -a -"} -(18,1,1) = {" -a -a -a -c -c -h -h -c -c -c -j -j -c -c -c -h -h -c -c -a -a -a -"} -(19,1,1) = {" -a -a -a -a -c -c -c -c -c -c -a -a -c -c -c -c -c -c -a -a -a -a -"} -(20,1,1) = {" -a -a -a -a -a -c -q -c -c -c -a -a -c -c -c -q -c -a -a -a -a -a -"} -(21,1,1) = {" -a -a -a -a -a -a -r -c -q -a -a -a -a -q -c -r -a -a -a -a -a -a -"} -(22,1,1) = {" -a -a -a -a -a -a -a -a -r -a -a -a -a -r -a -a -a -a -a -a -a -a -"} diff --git a/_maps/templates/medium_shuttle4.dmm b/_maps/templates/medium_shuttle4.dmm deleted file mode 100644 index 60f188c51f..0000000000 --- a/_maps/templates/medium_shuttle4.dmm +++ /dev/null @@ -1,403 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/turf/closed/indestructible/oldshuttle/corner{ - dir = 8 - }, -/area/ruin/powered/shuttle/medium_4) -"c" = ( -/turf/closed/indestructible/oldshuttle, -/area/ruin/powered/shuttle/medium_4) -"d" = ( -/obj/machinery/door/airlock/public/glass, -/turf/open/floor/oldshuttle, -/area/ruin/powered/shuttle/medium_4) -"e" = ( -/turf/closed/indestructible/oldshuttle/corner, -/area/ruin/powered/shuttle/medium_4) -"f" = ( -/turf/closed/indestructible/oldshuttle/corner{ - dir = 1 - }, -/area/ruin/powered/shuttle/medium_4) -"g" = ( -/turf/open/floor/oldshuttle, -/area/ruin/powered/shuttle/medium_4) -"h" = ( -/turf/closed/indestructible/oldshuttle/corner{ - dir = 4 - }, -/area/ruin/powered/shuttle/medium_4) -"i" = ( -/obj/structure/closet{ - icon_state = "oldcloset" - }, -/turf/open/floor/oldshuttle, -/area/ruin/powered/shuttle/medium_4) -"j" = ( -/obj/structure/shuttle/engine/propulsion/burst{ - dir = 1 - }, -/turf/open/space, -/area/ruin/powered/shuttle/medium_4) -"k" = ( -/turf/closed/indestructible/oldshuttle{ - icon_state = "orange" - }, -/area/ruin/powered/shuttle/medium_4) -"l" = ( -/obj/structure/chair/old{ - dir = 1 - }, -/turf/open/floor/oldshuttle, -/area/ruin/powered/shuttle/medium_4) -"r" = ( -/obj/machinery/power/generator, -/turf/open/floor/oldshuttle, -/area/ruin/powered/shuttle/medium_4) -"s" = ( -/obj/machinery/power/smes, -/turf/open/floor/oldshuttle, -/area/ruin/powered/shuttle/medium_4) -"t" = ( -/obj/structure/shuttle/engine/propulsion/burst/left, -/turf/open/space, -/area/ruin/powered/shuttle/medium_4) -"u" = ( -/obj/structure/shuttle/engine/propulsion/burst/right, -/turf/open/space, -/area/ruin/powered/shuttle/medium_4) -"v" = ( -/obj/structure/shuttle/engine/propulsion/burst/right, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/powered/shuttle/medium_4) -"w" = ( -/obj/structure/shuttle/engine/propulsion/burst, -/turf/open/space, -/area/ruin/powered/shuttle/medium_4) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -c -k -t -a -"} -(2,1,1) = {" -a -a -a -a -a -a -a -b -c -c -f -g -k -k -w -"} -(3,1,1) = {" -a -a -a -a -a -b -d -f -g -g -g -g -k -k -w -"} -(4,1,1) = {" -a -a -a -a -j -k -g -g -g -g -b -d -k -u -a -"} -(5,1,1) = {" -a -a -a -a -b -c -g -g -g -b -f -a -a -a -a -"} -(6,1,1) = {" -a -a -b -c -c -c -c -c -c -c -c -c -c -h -a -"} -(7,1,1) = {" -a -b -f -i -c -i -i -i -i -i -i -c -s -c -h -"} -(8,1,1) = {" -b -f -i -i -c -l -l -l -l -l -l -c -g -e -c -"} -(9,1,1) = {" -c -g -g -g -g -l -l -l -l -l -b -c -g -g -c -"} -(10,1,1) = {" -d -g -g -g -g -g -g -g -g -g -c -r -g -g -d -"} -(11,1,1) = {" -c -g -g -g -g -l -l -l -l -l -e -c -g -g -c -"} -(12,1,1) = {" -e -h -i -i -c -l -l -l -l -l -l -c -g -b -c -"} -(13,1,1) = {" -a -e -h -i -c -i -i -i -i -i -i -c -s -c -f -"} -(14,1,1) = {" -a -a -e -c -c -c -c -c -c -c -c -c -c -f -a -"} -(15,1,1) = {" -a -a -a -a -e -c -g -g -g -e -h -a -a -a -a -"} -(16,1,1) = {" -a -a -a -a -j -k -g -g -g -g -e -d -k -t -a -"} -(17,1,1) = {" -a -a -a -a -a -e -d -h -g -g -g -g -k -k -w -"} -(18,1,1) = {" -a -a -a -a -a -a -a -e -c -c -h -g -k -k -w -"} -(19,1,1) = {" -a -a -a -a -a -a -a -a -a -a -e -c -k -v -a -"} diff --git a/_maps/templates/shelter_1.dmm b/_maps/templates/shelter_1.dmm deleted file mode 100644 index 2c7db80104..0000000000 --- a/_maps/templates/shelter_1.dmm +++ /dev/null @@ -1,106 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/closed/wall/mineral/titanium/survival/pod, -/area/survivalpod) -"b" = ( -/obj/structure/sign/mining/survival{ - dir = 1 - }, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/survivalpod) -"c" = ( -/obj/structure/fans, -/turf/open/floor/pod, -/area/survivalpod) -"d" = ( -/obj/machinery/smartfridge/survival_pod, -/turf/open/floor/pod, -/area/survivalpod) -"e" = ( -/obj/item/gps/computer, -/turf/open/floor/pod, -/area/survivalpod) -"f" = ( -/obj/structure/sign/mining/survival{ - dir = 8 - }, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/survivalpod) -"g" = ( -/obj/machinery/stasis/survival_pod, -/turf/open/floor/pod, -/area/survivalpod) -"h" = ( -/turf/open/floor/pod, -/area/survivalpod) -"i" = ( -/obj/structure/bed/pod, -/obj/item/bedsheet/black, -/turf/open/floor/pod, -/area/survivalpod) -"j" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/survivalpod) -"k" = ( -/obj/structure/table/survival_pod, -/turf/open/floor/pod, -/area/survivalpod) -"l" = ( -/obj/structure/tubes, -/obj/structure/chair/comfy/black{ - dir = 8 - }, -/turf/open/floor/pod, -/area/survivalpod) -"m" = ( -/obj/structure/sign/mining/survival, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/survivalpod) -"n" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/survival_pod/glass, -/turf/open/floor/pod, -/area/survivalpod) -"o" = ( -/obj/structure/sign/mining, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/survivalpod) - -(1,1,1) = {" -a -a -f -a -a -"} -(2,1,1) = {" -a -c -g -k -m -"} -(3,1,1) = {" -b -d -h -h -n -"} -(4,1,1) = {" -a -e -i -l -o -"} -(5,1,1) = {" -a -a -j -a -a -"} diff --git a/_maps/templates/shelter_2.dmm b/_maps/templates/shelter_2.dmm deleted file mode 100644 index 1216f64f6a..0000000000 --- a/_maps/templates/shelter_2.dmm +++ /dev/null @@ -1,264 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/closed/wall/mineral/titanium/survival/pod, -/area/survivalpod) -"b" = ( -/obj/structure/sign/mining/survival{ - dir = 1 - }, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/survivalpod) -"c" = ( -/obj/machinery/shower, -/obj/item/soap/deluxe, -/obj/structure/curtain{ - alpha = 240; - color = "#454545"; - icon_state = "bathroom-closed"; - open = 0 - }, -/turf/open/floor/pod, -/area/survivalpod) -"d" = ( -/obj/structure/sign/mining/survival{ - dir = 8 - }, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/survivalpod) -"e" = ( -/obj/structure/fans, -/turf/open/floor/pod, -/area/survivalpod) -"f" = ( -/obj/machinery/smartfridge/survival_pod, -/turf/open/floor/pod, -/area/survivalpod) -"g" = ( -/obj/item/gps/computer, -/turf/open/floor/pod, -/area/survivalpod) -"i" = ( -/obj/structure/toilet/secret{ - secret_type = /obj/item/kitchen/knife/combat/survival - }, -/turf/open/floor/pod, -/area/survivalpod) -"j" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/survivalpod) -"k" = ( -/obj/machinery/stasis/survival_pod, -/turf/open/floor/pod, -/area/survivalpod) -"l" = ( -/turf/open/floor/pod, -/area/survivalpod) -"m" = ( -/obj/structure/bed/pod, -/obj/item/bedsheet/black, -/turf/open/floor/pod, -/area/survivalpod) -"n" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8; - layer = 3 - }, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/survivalpod) -"o" = ( -/obj/structure/chair/comfy/black, -/obj/item/cardboard_cutout{ - desc = "A cardboard cutout of a xenomorph maid."; - icon_state = "cutout_lusty"; - name = "lusty xenomorph maid" - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/survivalpod) -"p" = ( -/obj/structure/table/survival_pod, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/brute{ - pixel_x = 5 - }, -/turf/open/floor/pod, -/area/survivalpod) -"q" = ( -/obj/structure/tubes, -/obj/item/twohanded/required/kirbyplants/random, -/turf/open/floor/pod, -/area/survivalpod) -"r" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/survivalpod) -"s" = ( -/obj/machinery/light{ - dir = 4; - light_color = "#DDFFD3" - }, -/obj/structure/table/wood/fancy/black, -/obj/item/reagent_containers/food/drinks/drinkingglass{ - pixel_x = 7; - pixel_y = 2 - }, -/obj/item/reagent_containers/food/drinks/bottle/wine{ - pixel_x = -6; - pixel_y = 10 - }, -/turf/open/floor/carpet/black, -/area/survivalpod) -"t" = ( -/obj/machinery/microwave{ - pixel_y = -2 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/table/wood/fancy/black{ - pixel_y = -9 - }, -/turf/open/floor/carpet/black, -/area/survivalpod) -"u" = ( -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/survivalpod) -"v" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/displaycase{ - alert = 0; - desc = "A display case containing an expensive forgery, probably."; - pixel_y = -4; - req_access_txt = "48"; - start_showpiece_type = /obj/item/fakeartefact - }, -/turf/open/floor/carpet/black, -/area/survivalpod) -"w" = ( -/obj/structure/window/reinforced/survival_pod{ - density = 0; - dir = 9 - }, -/turf/open/floor/carpet/black, -/area/survivalpod) -"x" = ( -/obj/structure/table/wood/fancy/black, -/obj/item/reagent_containers/food/drinks/drinkingglass{ - pixel_x = 7; - pixel_y = 2 - }, -/obj/effect/spawner/lootdrop/three_course_meal, -/turf/open/floor/carpet/black, -/area/survivalpod) -"y" = ( -/obj/structure/sink/kitchen{ - dir = 4; - pixel_x = -13 - }, -/turf/open/floor/carpet/black, -/area/survivalpod) -"z" = ( -/obj/machinery/light, -/turf/open/floor/carpet/black, -/area/survivalpod) -"A" = ( -/turf/open/floor/carpet/black, -/area/survivalpod) -"B" = ( -/obj/structure/chair/comfy/black{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/survivalpod) -"C" = ( -/obj/structure/sign/mining/survival, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/survivalpod) -"D" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/survival_pod/glass, -/turf/open/floor/pod, -/area/survivalpod) -"E" = ( -/obj/structure/sign/mining, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/survivalpod) - -(1,1,1) = {" -a -d -a -d -a -d -a -"} -(2,1,1) = {" -b -e -k -p -t -y -C -"} -(3,1,1) = {" -a -f -l -l -u -z -a -"} -(4,1,1) = {" -b -g -m -q -v -A -D -"} -(5,1,1) = {" -a -c -n -r -w -A -a -"} -(6,1,1) = {" -b -i -o -s -x -B -E -"} -(7,1,1) = {" -a -j -a -j -a -j -a -"} diff --git a/_maps/templates/shelter_3.dmm b/_maps/templates/shelter_3.dmm deleted file mode 100644 index 6da0647ac3..0000000000 --- a/_maps/templates/shelter_3.dmm +++ /dev/null @@ -1,414 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/closed/wall/mineral/titanium/survival/pod, -/area/survivalpod) -"b" = ( -/obj/structure/sign/mining/survival{ - dir = 1 - }, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/survivalpod) -"c" = ( -/turf/closed/wall/mineral/titanium/survival/nodiagonal, -/area/survivalpod) -"d" = ( -/obj/structure/sign/mining/survival{ - dir = 1 - }, -/turf/closed/wall/mineral/titanium/survival/nodiagonal, -/area/survivalpod) -"e" = ( -/obj/structure/sign/mining/survival{ - dir = 8 - }, -/turf/closed/wall/mineral/titanium/survival/nodiagonal, -/area/survivalpod) -"f" = ( -/obj/structure/table/wood/fancy/black, -/obj/machinery/chem_dispenser/drinks, -/turf/open/floor/pod/dark, -/area/survivalpod) -"g" = ( -/obj/structure/table/wood/fancy/black, -/obj/machinery/chem_dispenser/drinks/beer, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/pod/dark, -/area/survivalpod) -"h" = ( -/obj/machinery/vending/boozeomat, -/turf/open/floor/pod/dark, -/area/survivalpod) -"i" = ( -/obj/item/book/manual/wiki/barman_recipes, -/obj/item/reagent_containers/food/drinks/shaker, -/obj/item/reagent_containers/glass/rag, -/obj/structure/table/wood/fancy/black, -/turf/open/floor/pod/dark, -/area/survivalpod) -"j" = ( -/obj/structure/table/wood/fancy/black, -/obj/item/clipboard, -/obj/item/toy/figure/bartender, -/turf/open/floor/pod/dark, -/area/survivalpod) -"k" = ( -/obj/structure/table/wood/fancy/black, -/obj/item/storage/fancy/cigarettes/cigars, -/obj/item/storage/fancy/cigarettes/cigars/cohiba{ - pixel_y = 4 - }, -/obj/item/storage/fancy/cigarettes/cigars/havana{ - pixel_y = 8 - }, -/turf/open/floor/pod/dark, -/area/survivalpod) -"l" = ( -/obj/structure/table/wood/fancy/black, -/obj/structure/reagent_dispensers/beerkeg, -/turf/open/floor/pod/dark, -/area/survivalpod) -"m" = ( -/obj/structure/closet/secure_closet/bar, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/pod/dark, -/area/survivalpod) -"n" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal/bin, -/turf/open/floor/pod/dark, -/area/survivalpod) -"o" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/survivalpod) -"p" = ( -/obj/machinery/door/airlock/survival_pod/glass{ - req_access_txt = "25" - }, -/obj/structure/fans/tiny, -/turf/open/floor/pod/dark, -/area/survivalpod) -"q" = ( -/turf/open/floor/pod/dark, -/area/survivalpod) -"r" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall/mineral/titanium/survival/nodiagonal, -/area/survivalpod) -"s" = ( -/obj/structure/table/reinforced, -/obj/item/lighter{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/lighter, -/turf/open/floor/pod/dark, -/area/survivalpod) -"t" = ( -/obj/structure/table/reinforced, -/turf/open/floor/pod/dark, -/area/survivalpod) -"u" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/matches{ - pixel_x = -4; - pixel_y = 8 - }, -/turf/open/floor/pod/dark, -/area/survivalpod) -"v" = ( -/obj/machinery/door/window/survival_pod{ - req_access_txt = "25" - }, -/turf/open/floor/pod/dark, -/area/survivalpod) -"w" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/closed/wall/mineral/titanium/survival/nodiagonal, -/area/survivalpod) -"x" = ( -/obj/structure/chair/stool/bar, -/turf/open/floor/carpet/black, -/area/survivalpod) -"y" = ( -/turf/open/floor/carpet/black, -/area/survivalpod) -"z" = ( -/obj/machinery/vending/cigarette/beach, -/turf/open/floor/carpet/black, -/area/survivalpod) -"A" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal/bin, -/turf/open/floor/carpet/black, -/area/survivalpod) -"B" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/closed/wall/mineral/titanium/survival/nodiagonal, -/area/survivalpod) -"C" = ( -/obj/structure/window/reinforced/survival_pod{ - dir = 8 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 4 - }, -/obj/structure/window/reinforced/survival_pod{ - dir = 1 - }, -/obj/structure/window/reinforced/survival_pod, -/obj/structure/grille, -/turf/open/floor/pod/dark, -/area/survivalpod) -"D" = ( -/obj/structure/chair/comfy/black, -/turf/open/floor/carpet/black, -/area/survivalpod) -"E" = ( -/obj/machinery/door/airlock/survival_pod, -/turf/open/floor/pod/light, -/area/survivalpod) -"F" = ( -/obj/structure/table/wood/fancy, -/obj/item/reagent_containers/food/condiment/peppermill{ - pixel_x = -4; - pixel_y = 12 - }, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = 4; - pixel_y = 4 - }, -/turf/open/floor/carpet/black, -/area/survivalpod) -"G" = ( -/obj/structure/urinal{ - pixel_y = 24 - }, -/turf/open/floor/pod/light, -/area/survivalpod) -"H" = ( -/turf/open/floor/pod/light, -/area/survivalpod) -"I" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/floor/pod/light, -/area/survivalpod) -"J" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/turf/closed/wall/mineral/titanium/survival/nodiagonal, -/area/survivalpod) -"K" = ( -/obj/structure/chair/comfy/black{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/survivalpod) -"L" = ( -/obj/machinery/vending/snack/random, -/turf/open/floor/carpet/black, -/area/survivalpod) -"M" = ( -/obj/machinery/light, -/turf/open/floor/carpet/black, -/area/survivalpod) -"N" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/floor/pod/light, -/area/survivalpod) -"O" = ( -/obj/structure/sign/mining/survival{ - dir = 4 - }, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/survivalpod) -"P" = ( -/obj/structure/sign/mining/survival, -/turf/closed/wall/mineral/titanium/survival/pod, -/area/survivalpod) -"Q" = ( -/obj/structure/sign/mining/survival, -/turf/closed/wall/mineral/titanium/survival/nodiagonal, -/area/survivalpod) -"R" = ( -/obj/machinery/door/airlock/survival_pod/glass, -/obj/structure/fans/tiny, -/turf/open/floor/carpet/black, -/area/survivalpod) - -(1,1,1) = {" -a -e -p -e -c -e -C -e -C -e -a -"} -(2,1,1) = {" -b -f -q -s -x -y -D -F -K -L -P -"} -(3,1,1) = {" -c -g -q -t -x -y -y -y -y -M -c -"} -(4,1,1) = {" -d -h -q -t -x -y -D -F -K -y -Q -"} -(5,1,1) = {" -c -i -q -u -x -y -D -F -K -y -c -"} -(6,1,1) = {" -d -j -q -t -x -y -y -y -y -y -R -"} -(7,1,1) = {" -c -k -q -t -x -y -c -c -c -c -c -"} -(8,1,1) = {" -d -l -q -t -x -y -c -G -H -H -Q -"} -(9,1,1) = {" -c -m -q -v -y -y -E -H -c -E -c -"} -(10,1,1) = {" -b -n -q -t -z -A -c -I -c -N -P -"} -(11,1,1) = {" -a -o -r -w -r -B -c -J -c -O -a -"} diff --git a/_maps/templates/sk_dungeons.dm b/_maps/templates/sk_dungeons.dm index 39db128eae..c1955a38a1 100644 --- a/_maps/templates/sk_dungeons.dm +++ b/_maps/templates/sk_dungeons.dm @@ -32,8 +32,8 @@ /datum/map_template/bog_dungeon_3 name = "Bog Dungeon 3" - id = "labyrinth_of_xylix" - mappath = "_maps/map_files/templates/sk_dungeon/labyrinth_of_xylix.dmm" +// id = "labyrinth_of_xylix" +// mappath = "_maps/map_files/templates/sk_dungeon/labyrinth_of_xylix.dmm" /obj/effect/landmark/map_load_mark/stonekeep_dungeon/roguetown_bog @@ -60,4 +60,4 @@ /datum/map_template/small_bog_dungeon_4 name = "Small Bog Dungeon 4" id = "small_bog_dungeon_4" - mappath = "_maps/map_files/templates/sk_dungeon/small_bog_dungeon_4.dmm" \ No newline at end of file + mappath = "_maps/map_files/templates/sk_dungeon/small_bog_dungeon_4.dmm" diff --git a/_maps/templates/small_asteroid_1.dmm b/_maps/templates/small_asteroid_1.dmm deleted file mode 100644 index c2205dbc13..0000000000 --- a/_maps/templates/small_asteroid_1.dmm +++ /dev/null @@ -1,81 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/turf/closed/mineral, -/area/space) -"c" = ( -/turf/closed/mineral/random/low_chance, -/area/space) - -(1,1,1) = {" -a -a -b -c -b -b -b -a -"} -(2,1,1) = {" -a -b -b -c -c -c -c -a -"} -(3,1,1) = {" -b -b -c -c -c -c -b -b -"} -(4,1,1) = {" -b -b -c -c -c -c -c -b -"} -(5,1,1) = {" -a -c -c -c -c -c -b -a -"} -(6,1,1) = {" -a -a -c -b -c -b -b -a -"} -(7,1,1) = {" -a -a -a -b -b -b -a -a -"} diff --git a/_maps/templates/small_shuttle_1.dmm b/_maps/templates/small_shuttle_1.dmm deleted file mode 100644 index 03789ef847..0000000000 --- a/_maps/templates/small_shuttle_1.dmm +++ /dev/null @@ -1,147 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/turf/closed/wall/mineral/titanium/overspace, -/area/space) -"c" = ( -/obj/effect/spawner/structure/window/shuttle, -/turf/open/floor/plating/airless, -/area/space) -"d" = ( -/turf/closed/wall/mineral/titanium, -/area/space) -"f" = ( -/turf/open/floor/mineral/titanium/blue, -/area/space) -"g" = ( -/obj/structure/chair{ - dir = 1 - }, -/turf/open/floor/mineral/titanium/blue, -/area/space) -"j" = ( -/obj/machinery/door/unpowered/shuttle, -/turf/open/floor/mineral/titanium/blue, -/area/space) -"l" = ( -/obj/structure/chair{ - dir = 4 - }, -/turf/open/floor/mineral/titanium/blue, -/area/space) -"m" = ( -/obj/structure/chair{ - dir = 8 - }, -/turf/open/floor/mineral/titanium/blue, -/area/space) -"n" = ( -/obj/structure/shuttle/engine/heater, -/turf/open/floor/plating/airless, -/area/space) -"p" = ( -/obj/structure/shuttle/engine/propulsion/left, -/turf/open/floor/plating/airless, -/area/space) -"q" = ( -/obj/structure/shuttle/engine/propulsion, -/turf/open/floor/plating/airless, -/area/space) -"r" = ( -/obj/structure/shuttle/engine/propulsion/right, -/turf/open/floor/plating/airless, -/area/space) - -(1,1,1) = {" -a -a -a -b -d -d -j -j -d -d -b -"} -(2,1,1) = {" -b -d -d -d -l -l -f -f -f -n -p -"} -(3,1,1) = {" -c -f -f -d -f -f -f -f -f -n -q -"} -(4,1,1) = {" -c -g -f -j -f -f -f -f -f -n -q -"} -(5,1,1) = {" -c -f -f -d -f -f -f -f -f -n -q -"} -(6,1,1) = {" -b -d -d -d -m -m -f -f -f -n -r -"} -(7,1,1) = {" -a -a -a -b -d -d -j -j -d -d -b -"} diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index 942ac73f4d..3ff86602c4 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -38,7 +38,6 @@ #define STRONG /datum/mutation/human/strong #define FIRESWEAT /datum/mutation/human/fire #define THERMAL /datum/mutation/human/thermal -#define ANTENNA /datum/mutation/human/antenna #define PARANOIA /datum/mutation/human/paranoia #define MINDREAD /datum/mutation/human/mindreader #define INSULATED /datum/mutation/human/insulated @@ -98,7 +97,7 @@ #define TR_KEEPORGANS (1<<8) #define TR_KEEPSTUNS (1<<9) #define TR_KEEPREAGENTS (1<<10) - +#define TR_KEEPAI (1<<11) #define CLONER_FRESH_CLONE "fresh" #define CLONER_MATURE_CLONE "mature" diff --git a/code/__DEFINES/ai/_ai.dm b/code/__DEFINES/ai/_ai.dm new file mode 100644 index 0000000000..fb5d18b9b7 --- /dev/null +++ b/code/__DEFINES/ai/_ai.dm @@ -0,0 +1,53 @@ +#define GET_AI_BEHAVIOR(behavior_type) SSai_behaviors.ai_behaviors[behavior_type] +#define HAS_AI_CONTROLLER_TYPE(thing, type) istype(thing?.ai_controller, type) +#define AI_STATUS_ON 1 +#define AI_STATUS_OFF 2 + +///Carbon checks +#define SHOULD_RESIST(source) (source.on_fire || source.buckled || HAS_TRAIT(source, TRAIT_RESTRAINED) || (source.pulledby && source.pulledby.grab_state > GRAB_PASSIVE)) +#define IS_DEAD_OR_INCAP(source) (source.incapacitated() || IS_IN_STASIS(source) || source.stat) + +///Max pathing attempts before auto-fail +#define MAX_PATHING_ATTEMPTS 30 +///Flags for ai_behavior new() +#define AI_CONTROLLER_INCOMPATIBLE (1<<0) + +///Does this task require movement from the AI before it can be performed? +#define AI_BEHAVIOR_REQUIRE_MOVEMENT (1<<0) +///Does this require the current_movement_target to be adjacent and in reach? +#define AI_BEHAVIOR_REQUIRE_REACH (1<<1) +///Does this task let you perform the action while you move closer? (Things like moving and shooting) +#define AI_BEHAVIOR_MOVE_AND_PERFORM (1<<2) +///Does finishing this task not null the current movement target? +#define AI_BEHAVIOR_KEEP_MOVE_TARGET_ON_FINISH (1<<3) +///Does finishing this task make the AI stop moving towards the target? +#define AI_BEHAVIOR_KEEP_MOVING_TOWARDS_TARGET_ON_FINISH (1<<4) +///Does this behavior NOT block planning? +#define AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION (1<<5) + +///Cooldown on planning if planning failed last time +#define AI_FAILED_PLANNING_COOLDOWN 1.5 SECONDS + +///Subtree defines +///This subtree should cancel any further planning, (Including from other subtrees) +#define SUBTREE_RETURN_FINISH_PLANNING 1 + +///AI flags +#define STOP_MOVING_WHEN_PULLED (1<<0) + +//Generic BB keys +#define BB_CURRENT_MIN_MOVE_DISTANCE "min_move_distance" + +/// Signal sent when a blackboard key is set to a new value +#define COMSIG_AI_BLACKBOARD_KEY_SET(blackboard_key) "ai_blackboard_key_set_[blackboard_key]" + +///Targetting keys for something to run away from, if you need to store this separately from current target +#define BB_BASIC_MOB_FLEE_TARGET "BB_basic_flee_target" +#define BB_BASIC_MOB_FLEE_TARGET_HIDING_LOCATION "BB_basic_flee_target_hiding_location" +#define BB_FLEE_TARGETTING_DATUM "flee_targetting_datum" + + +///time until we should next eat, set by the generic hunger subtree +#define BB_NEXT_HUNGRY "BB_NEXT_HUNGRY" +///what we're going to eat next +#define BB_FOOD_TARGET "bb_food_target" diff --git a/code/__DEFINES/ai/hostile.dm b/code/__DEFINES/ai/hostile.dm new file mode 100644 index 0000000000..1d9c7978de --- /dev/null +++ b/code/__DEFINES/ai/hostile.dm @@ -0,0 +1,57 @@ +///Hostile AI controller blackboard keys +#define BB_HOSTILE_ORDER_MODE "BB_HOSTILE_ORDER_MODE" +#define BB_HOSTILE_FRIEND "BB_HOSTILE_FRIEND" +#define BB_HOSTILE_ATTACK_WORD "BB_HOSTILE_ATTACK_WORD" +#define BB_FOLLOW_TARGET "BB_FOLLOW_TARGET" +#define BB_ATTACK_TARGET "BB_ATTACK_TARGET" +#define BB_VISION_RANGE "BB_VISION_RANGE" + +/// Basically, what is our vision/hearing range. +#define BB_HOSTILE_VISION_RANGE 10 +/// After either being given a verbal order or a pointing order, ignore further of each for this duration +#define AI_HOSTILE_COMMAND_COOLDOWN (2 SECONDS) + +// hostile command modes (what pointing at something/someone does depending on the last order the carp heard) +/// Don't do anything (will still react to stuff around them though) +#define HOSTILE_COMMAND_NONE 0 +/// Will attack a target. +#define HOSTILE_COMMAND_ATTACK 1 +/// Will follow a target. +#define HOSTILE_COMMAND_FOLLOW 2 + +#define COMMAND_FOLLOW "Follow" +#define COMMAND_STOP "Stop" +#define COMMAND_ATTACK "Attack" + + +//Hunting defines +#define SUCCESFUL_HUNT_COOLDOWN 5 SECONDS + +///Hunting BB keys +#define BB_CURRENT_HUNTING_TARGET "BB_current_hunting_target" +#define BB_HUNTING_COOLDOWN "BB_HUNTING_COOLDOWN" + +///Basic Mob Keys + +///Targetting subtrees +#define BB_TARGETED_ACTION "BB_targeted_action" +#define BB_BASIC_MOB_CURRENT_TARGET "BB_basic_current_target" +#define BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION "BB_basic_current_target_hiding_location" +#define BB_TARGETTING_DATUM "targetting_datum" +#define BB_BASIC_MOB_FOOD_TARGET "BB_basic_food_target" +#define BB_TARGETTING_DATUM_EQUIPMENT "equip_targetting_datum" +#define BB_BASIC_MOB_RUN_WITH_ITEM "BB_run_with_item" +#define BB_BASIC_MOB_EQUIPMENT_TARGET "BB_equipment_target" +#define BB_BASIC_MOB_NEED_EQUIP "BB_needs_to_equip" +#define BB_BASIC_MOB_UNEQUIPPED_WEAPON "BB_unequipped_weapon" + +///list of foods this mob likes +#define BB_BASIC_FOODS "BB_basic_foods" + + +/// Flag to set on or off if you want your mob to prioritise running away +#define BB_BASIC_MOB_FLEEING "BB_basic_fleeing" +#define BB_BASIC_MOB_NEXT_FLEEING "BB_nex_flee" + +///List of mobs who have damaged us +#define BB_BASIC_MOB_RETALIATE_LIST "BB_basic_mob_shitlist" diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index 2d9844cdb6..970d203c93 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -34,20 +34,6 @@ #define BLOB_REFLECTOR_COST 15 -//ERT Types -#define ERT_BLUE "Blue" -#define ERT_RED "Red" -#define ERT_AMBER "Amber" -#define ERT_DEATHSQUAD "Deathsquad" - -//ERT subroles -#define ERT_SEC "sec" -#define ERT_MED "med" -#define ERT_ENG "eng" -#define ERT_LEADER "leader" -#define DEATHSQUAD "ds" -#define DEATHSQUAD_LEADER "ds_leader" - //Shuttle hijacking /// Does not stop hijacking but itself won't hijack #define HIJACK_NEUTRAL 0 diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm index 3ca80130e9..8498f16bc8 100644 --- a/code/__DEFINES/colors.dm +++ b/code/__DEFINES/colors.dm @@ -61,64 +61,124 @@ //roguetown -#define CLOTHING_RED "#a32121" -#define CLOTHING_PURPLE "#8747b1" -#define CLOTHING_BLACK_WARM "#3d3a36" -#define CLOTHING_BLACK "#414143" -#define CLOTHING_BROWN "#685542" -#define CLOTHING_GREEN "#428138" -#define CLOTHING_DARK_GREEN "#264d26" -#define CLOTHING_BLUE "#537bc6" -#define CLOTHING_YELLOW "#b5b004" -#define CLOTHING_TEAL "#249589" -#define CLOTHING_WHITE "#ffffff" -#define CLOTHING_ORANGE "#bd6606" -#define CLOTHING_MAJENTA "#962e5c" +// Expensive dyes ========================== +#define EXPENSIVE_DYES list("Ash Grey","Chalk White","Cream","White","Blood Red","Plum Purple","Dark Ink","Forest Green","Sky Blue","Mustard Yellow", "Salmon", "Russet", "Maroon","Red Ochre", "Dunked in Water" ) + +#define CLOTHING_DARK_INK "#4f4343" +#define CLOTHING_PLUM_PURPLE "#683786" +#define CLOTHING_SALMON "#a56176" +#define CLOTHING_BLOOD_RED "#9c1919" + +#define CLOTHING_MAROON "#672c0d" +#define CLOTHING_RED_OCHRE "#783530" +#define CLOTHING_RUSSET "#8a4b1c" +#define CLOTHING_MUSTARD_YELLOW "#b0a850" +#define CLOTHING_YELLOW_OCHRE "#9b7a02" +#define CLOTHING_FOREST_GREEN "#427e2c" +#define CLOTHING_SKY_BLUE "#2f4a7c" +#define CLOTHING_MAGE_BLUE "#4756d8" +#define CLOTHING_MAGE_GREEN "#759259" +#define CLOTHING_MAGE_ORANGE "#ad5e29" +#define CLOTHING_MAGE_YELLOW "#d2bc2b" + +// Royal dyes ========================== +#define CLOTHING_ROYAL_RED "#8f3636" +#define CLOTHING_ROYAL_MAJENTA "#822b52" +#define CLOTHING_FYRITIUS_DYE "#b47011" +#define CLOTHING_ROYAL_PURPLE "#865c9c" +#define CLOTHING_BARK_BROWN "#685542" +#define CLOTHING_ROYAL_BLACK "#2f352f" +#define CLOTHING_BOG_GREEN "#58793f" +#define CLOTHING_ROYAL_TEAL "#249589" +#define CLOTHING_PEAR_YELLOW "#a19d20" +#define CLOTHING_CHALK_WHITE "#c7c0b5" + + +// Cheap dyes ========================== +#define CHEAP_DYES list("Ash Grey","Chalk White","Cream","Royal Black","Soot Black","Bark Brown","Winestain Red","Royal Red","Royal Majenta","Fyritius Orange","Berry Blue","Royal Blue","Royal Purple","Spring Green","Pear Yellow","Peasant Brown","Mud Brown","Chestnut","Old Leather","Bog Green","Royal Teal","Dunked in Water" ) -#define CLOTHING_PINK "#cf99e3" -#define CLOTHING_SALMON "#ba8f9e" -#define CLOTHING_PALE_BLUE "#94b4b6" -#define CLOTHING_PALE_ORANGE "#bd978c" -#define CLOTHING_PALE_GREEN "#92bd8c" -#define CLOTHING_PALE_YELLOW "#c7c981" +#define CLOTHING_SOOT_BLACK "#4b4b50" +#define CLOTHING_WINESTAIN_RED "#6b3737" +#define CLOTHING_PEASANT_BROWN "#574a43" +#define CLOTHING_MUD_BROWN "#57493a" +#define CLOTHING_CHESTNUT "#5f3d21" +#define CLOTHING_OLD_LEATHER "#473a30" +#define CLOTHING_SPRING_GREEN "#435436" +#define CLOTHING_BERRY_BLUE "#38455b" +#define CLOTHING_ASH_GREY "#999999" +#define CLOTHING_LINEN "#b0ae80" +#define CLOTHING_WHITE "#ffffff" #define CLOTHING_WET "#bbbbbb" +#define RANDOM_PEASANT_DYES pick(CLOTHING_BARK_BROWN , CLOTHING_PEASANT_BROWN, CLOTHING_MUD_BROWN , CLOTHING_BOG_GREEN , CLOTHING_SPRING_GREEN , CLOTHING_PEAR_YELLOW ) +#define RANDOM_NOBLE_DYES pick( CLOTHING_DARK_INK, CLOTHING_PLUM_PURPLE, CLOTHING_SALMON, CLOTHING_RED_OCHRE, CLOTHING_YELLOW_OCHRE, CLOTHING_MAROON, CLOTHING_RUSSET, CLOTHING_MUSTARD_YELLOW, CLOTHING_FOREST_GREEN, CLOTHING_SKY_BLUE) -#define CLOTHING_COLOR_NAMES list("Red","Purple","Black","Brown","Green","Blue","Yellow","Teal","White","Orange","Majenta", "Salmon", "Pink", "Pale Blue", "Pale Orange", "Pale Green", "Pale Yellow") +#define CLOTHING_COLOR_NAMES list("Ash Grey","Chalk White","Cream","White","Dark Ink","Plum Purple","Salmon","Blood Red", "Maroon","Red Ochre","Russet","Chestnut","Mustard Yellow","Yellow Ochre","Forest Green","Sky Blue","Teal", "Royal Black","Soot Black","Winestain Red","Royal Red","Royal Majenta","Fyritius Orange","Bark Brown","Peasant Brown","Mud Brown","Pear Yellow","Spring Green","Bog Green","Royal Teal","Berry Blue", "Royal Blue", "Royal Purple","Dunked in Water" ) /proc/clothing_color2hex(input) switch(input) - if("Red") - return CLOTHING_RED - if("Purple") - return CLOTHING_PURPLE - if("Black") - return CLOTHING_BLACK - if("Brown") - return CLOTHING_BROWN - if("Green") - return CLOTHING_GREEN - if("Blue") - return CLOTHING_BLUE - if("Yellow") - return CLOTHING_YELLOW + if("Blood Red") + return CLOTHING_BLOOD_RED + if("Plum Purple") + return CLOTHING_PLUM_PURPLE + if("Royal Purple") + return CLOTHING_ROYAL_PURPLE + if("Forest Green") + return CLOTHING_FOREST_GREEN + if("Spring Green") + return CLOTHING_SPRING_GREEN + if("Sky Blue") + return CLOTHING_SKY_BLUE + if("Mustard Yellow") + return CLOTHING_MUSTARD_YELLOW if("Teal") - return CLOTHING_TEAL + return CLOTHING_ROYAL_TEAL + if("Royal Majenta") + return CLOTHING_ROYAL_MAJENTA + if("Salmon") + return CLOTHING_SALMON + if("Russet") + return CLOTHING_RUSSET + if("Chestnut") + return CLOTHING_CHESTNUT + if("Yellow Ochre") + return CLOTHING_YELLOW_OCHRE + if("Red Ochre" ) + return CLOTHING_RED_OCHRE + if("Maroon" ) + return CLOTHING_MAROON + + if("Soot Black") + return CLOTHING_SOOT_BLACK + if("Winestain Red") + return CLOTHING_WINESTAIN_RED + if("Royal Red") + return CLOTHING_ROYAL_RED + if("Fyritius Orange") + return CLOTHING_FYRITIUS_DYE + if("Berry Blue") + return CLOTHING_BERRY_BLUE + if("Pear Yellow") + return CLOTHING_PEAR_YELLOW + if("Bark Brown") + return CLOTHING_BARK_BROWN + if("Peasant Brown" ) + return CLOTHING_PEASANT_BROWN + if("Mud Brown") + return CLOTHING_MUD_BROWN + if("Bog Green") + return CLOTHING_BOG_GREEN + if("Spring Green") + return CLOTHING_SPRING_GREEN + if("White") return CLOTHING_WHITE - if("Orange") - return CLOTHING_ORANGE - if("Majenta") - return CLOTHING_MAJENTA - if("Pink",) - return CLOTHING_PINK - if("Salmon",) - return CLOTHING_SALMON - if("Pale Blue") - return CLOTHING_PALE_BLUE - if("Pale Orange",) - return CLOTHING_PALE_ORANGE - if("Pale Green") - return CLOTHING_PALE_GREEN - if("Pale Yellow") - return CLOTHING_PALE_YELLOW + if("Ash Grey") + return CLOTHING_ASH_GREY + if("Chalk White") + return CLOTHING_CHALK_WHITE + if("Cream") + return CLOTHING_LINEN + if("Dunked in water") + return CLOTHING_WET + diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 46ad9c0cfd..0e55d96e77 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -139,9 +139,13 @@ #define AXE_CUT /datum/intent/axe/cut #define AXE_CHOP /datum/intent/axe/chop -#define SPEAR_THRUST /datum/intent/spear/thrust -#define SPEAR_BASH /datum/intent/spear/bash -#define SPEAR_CUT /datum/intent/spear/cut +#define POLEARM_BASH /datum/intent/polearm/bash +#define POLEARM_SWING /datum/intent/polearm/bash/swing +#define SPEAR_CUT /datum/intent/polearm/cut + +#define POLEARM_THRUST /datum/intent/polearm/thrust +#define SPEAR_POKE /datum/intent/polearm/thrust/poke +#define SPEAR_THRUST /datum/intent/polearm/thrust/spear #define MESSER_CHOP /datum/intent/sword/chop/messer diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index 0670e0e988..29e966a4a9 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -90,11 +90,9 @@ #define COMSIG_ATOM_EMAG_ACT "atom_emag_act" //from base of atom/emag_act(): (/mob/user) #define COMSIG_ATOM_RAD_ACT "atom_rad_act" //from base of atom/rad_act(intensity) #define COMSIG_ATOM_NARSIE_ACT "atom_narsie_act" //from base of atom/narsie_act(): () -#define COMSIG_ATOM_RCD_ACT "atom_rcd_act" //from base of atom/rcd_act(): (/mob, /obj/item/construction/rcd, passed_mode) #define COMSIG_ATOM_SING_PULL "atom_sing_pull" //from base of atom/singularity_pull(): (S, current_size) #define COMSIG_ATOM_BSA_BEAM "atom_bsa_beam_pass" //from obj/machinery/bsa/full/proc/fire(): () #define COMSIG_ATOM_BLOCKS_BSA_BEAM 1 -#define COMSIG_ATOM_SET_LIGHT "atom_set_light" //from base of atom/set_light(): (l_range, l_power, l_color) #define COMSIG_ATOM_DIR_CHANGE "atom_dir_change" //from base of atom/setDir(): (old_dir, new_dir) #define COMSIG_ATOM_CONTENTS_DEL "atom_contents_del" //from base of atom/handle_atom_del(): (atom/deleted) #define COMSIG_ATOM_HAS_GRAVITY "atom_has_gravity" //from base of atom/has_gravity(): (turf/location, list/forced_gravities) @@ -123,6 +121,10 @@ #define COMSIG_ATOM_ATTACK_HAND "atom_attack_hand" //from base of atom/attack_hand(): (mob/user) #define COMSIG_ATOM_ATTACK_PAW "atom_attack_paw" //from base of atom/attack_paw(): (mob/user) #define COMPONENT_NO_ATTACK_HAND 1 //works on all 3. +///from base of atom/animal_attack(): (/mob/user) +#define COMSIG_ATOM_ATTACK_ANIMAL "attack_animal" +///from relay_attackers element: (atom/attacker, attack_flags) +#define COMSIG_ATOM_WAS_ATTACKED "atom_was_attacked" //This signal return value bitflags can be found in __DEFINES/misc.dm #define COMSIG_ATOM_INTERCEPT_Z_FALL "movable_intercept_z_impact" //called for each movable in a turf contents on /turf/zImpact(): (atom/movable/A, levels) @@ -163,8 +165,6 @@ #define COMSIG_MOVABLE_BUMP "movable_bump" //from base of atom/movable/Bump(): (/atom) #define COMSIG_MOVABLE_IMPACT "movable_impact" //from base of atom/movable/throw_impact(): (/atom/hit_atom, /datum/thrownthing/throwingdatum) #define COMSIG_MOVABLE_IMPACT_ZONE "item_impact_zone" //from base of mob/living/hitby(): (mob/living/target, hit_zone) -#define COMSIG_MOVABLE_BUCKLE "buckle" //from base of atom/movable/buckle_mob(): (mob, force) -#define COMSIG_MOVABLE_UNBUCKLE "unbuckle" //from base of atom/movable/unbuckle_mob(): (mob, force) #define COMSIG_MOVABLE_PRE_THROW "movable_pre_throw" //from base of atom/movable/throw_at(): (list/args) #define COMPONENT_CANCEL_THROW 1 #define COMSIG_MOVABLE_POST_THROW "movable_post_throw" //from base of atom/movable/throw_at(): (datum/thrownthing, spin) @@ -217,6 +217,7 @@ #define COMSIG_MOB_DEADSAY "mob_deadsay" // from /mob/say_dead(): (mob/speaker, message) #define MOB_DEADSAY_SIGNAL_INTERCEPT 1 // /mob/living signals +#define COMSIG_LIVING_SET_RESTING "comsig_set_resting" #define COMSIG_LIVING_RESIST "living_resist" //from base of mob/living/resist() (/mob/living) #define COMSIG_LIVING_IGNITED "living_ignite" //from base of mob/living/IgniteMob() (/mob/living) #define COMSIG_LIVING_EXTINGUISHED "living_extinguished" //from base of mob/living/ExtinguishMob() (/mob/living) @@ -234,10 +235,14 @@ #define COMSIG_LIVING_STATUS_PARALYZE "living_paralyze" //from base of mob/living/Paralyze() (amount, update, ignore) #define COMSIG_LIVING_STATUS_IMMOBILIZE "living_immobilize" //from base of mob/living/Immobilize() (amount, update, ignore) #define COMSIG_LIVING_STATUS_UNCONSCIOUS "living_unconscious" //from base of mob/living/Unconscious() (amount, update, ignore) +/// from base of mob/living/updatehealth() +#define COMSIG_LIVING_HEALTH_UPDATE "living_health_update" #define COMSIG_LIVING_STATUS_SLEEP "living_sleeping" //from base of mob/living/Sleeping() (amount, update, ignore) #define COMPONENT_NO_STUN 1 //For all of them #define COMSIG_LIVING_CAN_TRACK "mob_cantrack" //from base of /mob/living/can_track(): (mob/user) #define COMPONENT_CANT_TRACK 1 +///from base of mob/living/death(): (gibbed) +#define COMSIG_LIVING_DEATH "living_death" // /mob/living/carbon signals #define COMSIG_CARBON_SOUNDBANG "carbon_soundbang" //from base of mob/living/carbon/soundbang_act(): (list(intensity)) diff --git a/code/__DEFINES/configuration.dm b/code/__DEFINES/configuration.dm index 4eb0eb7cab..1e465503d7 100644 --- a/code/__DEFINES/configuration.dm +++ b/code/__DEFINES/configuration.dm @@ -12,3 +12,5 @@ #define CONFIG_ENTRY_LOCKED 1 /// can't see value #define CONFIG_ENTRY_HIDDEN 2 + +#define SIGNAL_HANDLER SHOULD_NOT_SLEEP(TRUE) diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_living.dm new file mode 100644 index 0000000000..f517c64164 --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_living.dm @@ -0,0 +1,2 @@ +///From post-can inject check of syringe after attack (mob/user) +#define COMSIG_LIVING_TRY_SYRINGE "living_try_syringe" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob.dm new file mode 100644 index 0000000000..e46f13f699 --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob.dm @@ -0,0 +1,6 @@ +#define COMSIG_MOB_MOVESPEED_UPDATED "mob_updated_movespeed" +///from base of /mob/Login(): () +#define COMSIG_MOB_LOGIN "mob_login" +///from base of /mob/Logout(): () +#define COMSIG_MOB_LOGOUT "mob_logout" +#define COMSIG_MOB_STATCHANGE "mob_statchange" diff --git a/code/__DEFINES/dcs/signals/signals_movable.dm b/code/__DEFINES/dcs/signals/signals_movable.dm new file mode 100644 index 0000000000..247c8347e2 --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_movable.dm @@ -0,0 +1,10 @@ +#define COMSIG_MOVABLE_BUCKLE "buckle" //from base of atom/movable/buckle_mob(): (mob, force) +#define COMSIG_MOVABLE_UNBUCKLE "unbuckle" //from base of atom/movable/unbuckle_mob(): (mob, force) + +///from /obj/vehicle/proc/driver_move, caught by the riding component to check and execute the driver trying to drive the vehicle +#define COMSIG_RIDDEN_DRIVER_MOVE "driver_move" + #define COMPONENT_DRIVER_BLOCK_MOVE (1<<0) + +///from /atom/movable/proc/buckle_mob(): (mob/living/M, force, check_loc, buckle_mob_flags) +#define COMSIG_MOVABLE_PREBUCKLE "prebuckle" // this is the last chance to interrupt and block a buckle before it finishes + #define COMPONENT_BLOCK_BUCKLE (1<<0) diff --git a/code/__DEFINES/dcs/signals/signals_tram.dm b/code/__DEFINES/dcs/signals/signals_tram.dm new file mode 100644 index 0000000000..ec657f93c7 --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_tram.dm @@ -0,0 +1,19 @@ +/// Sent from /obj/structure/industrial_lift/tram when its travelling status updates. (travelling) +#define COMSIG_TRAM_SET_TRAVELLING "tram_set_travelling" + +/// Sent from /obj/structure/industrial_lift/tram when it begins to travel. (obj/effect/landmark/tram/idle_platform, obj/effect/landmark/tram/to_where) +#define COMSIG_TRAM_TRAVEL "tram_travel" + +/// Sent from /obj/structure/industrial_lift/tram when it hits someone: () +#define COMSIG_TRAM_COLLISION "tram_collided" + +///called when an industrial lift enters this turf +#define COMSIG_TURF_INDUSTRIAL_LIFT_ENTER "turf_industrial_life_enter" +/// Sent from /datum/lift_master when a normal lift starts or stops going up or down. (direction if started or 0 if stopped) +#define COMSIG_LIFT_SET_DIRECTION "lift_set_direction" + +#define COMSIG_TRAM_REACHED_PLATFORM "tram_reach_platform" + +#define COMSIG_TRAM_EMPTY "tram_empty" + +#define COMSIG_DISPATCH_CARGO "dispatch_cargo_boat" diff --git a/code/__DEFINES/dcs/signals_atoms/lighting.dm b/code/__DEFINES/dcs/signals_atoms/lighting.dm new file mode 100644 index 0000000000..331ea34c9c --- /dev/null +++ b/code/__DEFINES/dcs/signals_atoms/lighting.dm @@ -0,0 +1,32 @@ +// Atom lighting signals. Format: +// When the signal is called: (signal arguments) +// All signals send the source datum of the signal as the first argument +// Lighting: +///from base of [atom/proc/set_light]: (l_range, l_power, l_color, l_on) +#define COMSIG_ATOM_SET_LIGHT "atom_set_light" + /// Blocks [/atom/proc/set_light], [/atom/proc/set_light_power], [/atom/proc/set_light_range], [/atom/proc/set_light_color], [/atom/proc/set_light_on], and [/atom/proc/set_light_flags]. + #define COMPONENT_BLOCK_LIGHT_UPDATE (1<<0) +///Called right before the atom changes the value of light_power to a different one, from base [atom/proc/set_light_power]: (new_power) +#define COMSIG_ATOM_SET_LIGHT_POWER "atom_set_light_power" +///Called right after the atom changes the value of light_power to a different one, from base of [/atom/proc/set_light_power]: (old_power) +#define COMSIG_ATOM_UPDATE_LIGHT_POWER "atom_update_light_power" +///Called right before the atom changes the value of light_range to a different one, from base [atom/proc/set_light_range]: (new_range) +#define COMSIG_ATOM_SET_LIGHT_RANGE "atom_set_light_range" +///Called right after the atom changes the value of light_range to a different one, from base of [/atom/proc/set_light_range]: (old_range) +#define COMSIG_ATOM_UPDATE_LIGHT_RANGE "atom_update_light_range" +///Called right before the atom changes the value of light_color to a different one, from base [atom/proc/set_light_color]: (new_color) +#define COMSIG_ATOM_SET_LIGHT_COLOR "atom_set_light_color" +///Called right after the atom changes the value of light_color to a different one, from base of [/atom/proc/set_light_color]: (old_color) +#define COMSIG_ATOM_UPDATE_LIGHT_COLOR "atom_update_light_color" +///Called right before the atom changes the value of light_on to a different one, from base [atom/proc/set_light_on]: (new_value) +#define COMSIG_ATOM_SET_LIGHT_ON "atom_set_light_on" +///Called right after the atom changes the value of light_on to a different one, from base of [/atom/proc/set_light_on]: (old_value) +#define COMSIG_ATOM_UPDATE_LIGHT_ON "atom_update_light_on" +///Called right before the atom changes the value of light_flags to a different one, from base [atom/proc/set_light_flags]: (new_flags) +#define COMSIG_ATOM_SET_LIGHT_FLAGS "atom_set_light_flags" +///Called right after the atom changes the value of light_flags to a different one, from base of [/atom/proc/set_light_flags]: (old_flags) +#define COMSIG_ATOM_UPDATE_LIGHT_FLAGS "atom_update_light_flags" +///Called right before the atom changes the value of light_falloff_curve to a different one, from base [atom/proc/set_light_cirve]: (new_curve) +#define COMSIG_ATOM_SET_LIGHT_CURVE "atom_set_light_curve" +///Called right after the atom changes the value of light_falloff_curve to a different one, from base of [/atom/proc/set_light_curve]: (old_curve) +#define COMSIG_ATOM_UPDATE_LIGHT_CURVE "atom_update_light_curve" diff --git a/code/__DEFINES/dcs/signals_atoms/movable_lighting.dm b/code/__DEFINES/dcs/signals_atoms/movable_lighting.dm new file mode 100644 index 0000000000..db7ee68eb7 --- /dev/null +++ b/code/__DEFINES/dcs/signals_atoms/movable_lighting.dm @@ -0,0 +1,8 @@ +///Called when the movable tries to change its dynamic light color setting, from base atom/movable/lighting_overlay_set_color(): (color) +#define COMSIG_MOVABLE_LIGHT_OVERLAY_SET_RANGE "movable_light_overlay_set_color" +///Called when the movable tries to change its dynamic light power setting, from base atom/movable/lighting_overlay_set_power(): (power) +#define COMSIG_MOVABLE_LIGHT_OVERLAY_SET_POWER "movable_light_overlay_set_power" +///Called when the movable tries to change its dynamic light range setting, from base atom/movable/lighting_overlay_set_range(): (range) +#define COMSIG_MOVABLE_LIGHT_OVERLAY_SET_COLOR "movable_light_overlay_set_range" +///Called when the movable tries to toggle its dynamic light LIGHTING_ON status, from base atom/movable/lighting_overlay_toggle_on(): (new_state) +#define COMSIG_MOVABLE_LIGHT_OVERLAY_TOGGLE_ON "movable_light_overlay_toggle_on" diff --git a/code/__DEFINES/dcs/signals_atoms/signals_atom.dm b/code/__DEFINES/dcs/signals_atoms/signals_atom.dm new file mode 100644 index 0000000000..9b32abf0c9 --- /dev/null +++ b/code/__DEFINES/dcs/signals_atoms/signals_atom.dm @@ -0,0 +1,2 @@ +///from base of atom/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) +#define COMSIG_ATOM_HITBY "atom_hitby" diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index e5f729d2e3..833b4f5929 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -258,7 +258,6 @@ GLOBAL_LIST_INIT(advanced_hardsuit_allowed, typecacheof(list( /obj/item/ammo_casing, /obj/item/flashlight, /obj/item/gun, - /obj/item/melee/baton, /obj/item/reagent_containers/spray/pepper, /obj/item/restraints/handcuffs, /obj/item/tank/internals))) @@ -268,8 +267,6 @@ GLOBAL_LIST_INIT(security_hardsuit_allowed, typecacheof(list( /obj/item/ammo_casing, /obj/item/flashlight, /obj/item/gun/ballistic, - /obj/item/gun/energy, - /obj/item/melee/baton, /obj/item/reagent_containers/spray/pepper, /obj/item/restraints/handcuffs, /obj/item/tank/internals))) @@ -281,9 +278,7 @@ GLOBAL_LIST_INIT(detective_vest_allowed, typecacheof(list( /obj/item/flashlight, /obj/item/taperecorder, /obj/item/gun/ballistic, - /obj/item/gun/energy, /obj/item/lighter, - /obj/item/melee/baton, /obj/item/melee/classic_baton, /obj/item/reagent_containers/spray/pepper, /obj/item/restraints/handcuffs, @@ -296,9 +291,7 @@ GLOBAL_LIST_INIT(security_vest_allowed, typecacheof(list( /obj/item/ammo_casing, /obj/item/flashlight, /obj/item/gun/ballistic, - /obj/item/gun/energy, /obj/item/kitchen/knife/combat, - /obj/item/melee/baton, /obj/item/melee/classic_baton/telescopic, /obj/item/reagent_containers/spray/pepper, /obj/item/restraints/handcuffs, @@ -311,9 +304,7 @@ GLOBAL_LIST_INIT(security_wintercoat_allowed, typecacheof(list( /obj/item/flashlight, /obj/item/storage/fancy/cigarettes, /obj/item/gun/ballistic, - /obj/item/gun/energy, /obj/item/lighter, - /obj/item/melee/baton, /obj/item/melee/classic_baton/telescopic, /obj/item/reagent_containers/spray/pepper, /obj/item/restraints/handcuffs, diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 97847c2ff2..777218c5d2 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -10,6 +10,7 @@ #define isweakref(D) (istype(D, /datum/weakref)) +#define isdatum(D) (istype(D, /datum)) //Turfs //#define isturf(A) (istype(A, /turf)) This is actually a byond built-in. Added here for completeness sake. @@ -106,40 +107,13 @@ GLOBAL_LIST_INIT(our_forest_sex, typecacheof(list( //more carbon mobs #define ismonkey(A) (istype(A, /mob/living/carbon/monkey)) -#define isalien(A) (istype(A, /mob/living/carbon/alien)) - -#define islarva(A) (istype(A, /mob/living/carbon/alien/larva)) - -#define isalienadult(A) (istype(A, /mob/living/carbon/alien/humanoid) || istype(A, /mob/living/simple_animal/hostile/alien)) - -#define isalienhunter(A) (istype(A, /mob/living/carbon/alien/humanoid/hunter)) - -#define isaliensentinel(A) (istype(A, /mob/living/carbon/alien/humanoid/sentinel)) - -#define isalienroyal(A) (istype(A, /mob/living/carbon/alien/humanoid/royal)) - -#define isalienqueen(A) (istype(A, /mob/living/carbon/alien/humanoid/royal/queen)) - #define istruedevil(A) (istype(A, /mob/living/carbon/true_devil)) -//Silicon mobs -#define issilicon(A) (istype(A, /mob/living/silicon)) - -#define issiliconoradminghost(A) (istype(A, /mob/living/silicon) || IsAdminGhost(A)) - -#define iscyborg(A) (istype(A, /mob/living/silicon/robot)) - -#define isAI(A) (istype(A, /mob/living/silicon/ai)) - -#define ispAI(A) (istype(A, /mob/living/silicon/pai)) - //Simple animals #define isanimal(A) (istype(A, /mob/living/simple_animal)) #define isrevenant(A) (istype(A, /mob/living/simple_animal/revenant)) -#define isbot(A) (istype(A, /mob/living/simple_animal/bot)) - #define isshade(A) (istype(A, /mob/living/simple_animal/shade)) #define ismouse(A) (istype(A, /mob/living/simple_animal/mouse)) @@ -195,7 +169,7 @@ GLOBAL_LIST_INIT(our_forest_sex, typecacheof(list( #define ismecha(A) (istype(A, /obj/mecha)) -#define is_cleanable(A) (istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/rune)) //if something is cleanable +#define is_cleanable(A) (istype(A, /obj/effect/decal/cleanable)) //if something is cleanable #define isorgan(A) (istype(A, /obj/item/organ)) @@ -245,5 +219,5 @@ GLOBAL_LIST_INIT(glass_sheet_types, typecacheof(list( GLOBAL_LIST_INIT(RATS_DONT_EAT, typecacheof(list( /obj/item/reagent_containers/food/snacks/smallrat, /obj/item/reagent_containers/food/snacks/produce/onion, - /obj/item/reagent_containers/food/snacks/produce/berries/rogue/poison + /obj/item/reagent_containers/food/snacks/produce/jacksberry/poison ))) diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index 3975adc4e0..352b09cecd 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -96,56 +96,71 @@ #define NOBLEMEN (1<<0) #define LORD (1<<0) -#define LADY (1<<1) +#define CONSORT (1<<1) #define HAND (1<<2) #define STEWARD (1<<3) #define WIZARD (1<<4) -#define CAPTAIN (1<<5) -#define ARCHIVIST (1<<6) -#define MERCHANT (1<<7) -#define FELDSHER (1<<8) -#define NIGHTMAN (1<<9) +#define ARCHIVIST (1<<5) +#define BUTLER (1<<6) +#define JESTER (1<<7) +#define ROYAL_GUARD (1<<8) + #define GARRISON (1<<1) -#define GUARDSMAN (1<<0) -#define DUNGEONEER (1<<1) +#define CAPTAIN (1<<0) +#define GUARDSMAN (1<<1) #define WATCHMAN (1<<2) -#define MAYOR (1<<3) +#define DUNGEONEER (1<<3) + -#define CHURCHMEN (1<<2) +#define TEMPLE (1<<2) #define PRIEST (1<<0) -#define CLERIC (1<<1) -#define PURITAN (1<<2) -#define MONK (1<<3) +#define ACOLYTE (1<<1) +#define TEMPLAR (1<<2) +#define GRAVEKEEPER (1<<3) +#define INQUISITOR (1<<4) +#define ADEPT (1<<5) -#define SERFS (1<<3) -#define INNKEEP (1<<0) +#define TOWNERS (1<<3) + +#define MERCHANT (1<<0) +#define STEVEDORE (1<<1) #define BLACKSMITH (1<<2) -#define ALCHEMIST (1<<3) -#define MASON (1<<4) -#define TAILOR (1<<5) -#define SCRIBE (1<<7) +#define MASON (1<<3) +#define FELDSHER (1<<4) +#define INNKEEP (1<<5) +#define COOK (1<<6) +#define TAILOR (1<<7) +#define NIGHTMAN (1<<8) +#define NITEMAIDEN (1<<9) +#define ALCHEMIST (1<<10) +#define SCRIBE (1<<11) + #define PEASANTS (1<<4) -#define HUNTER (1<<0) +#define MAYOR (1<<0) #define FARMER (1<<1) #define BEASTMASTER (1<<2) -#define FISHER (1<<4) -#define LUMBERJACK (1<<5) -#define GRAVEDIGGER (1<<6) -#define MINER (1<<7) -#define BUTLER (1<<8) -#define JESTER (1<<8) -#define ADVENTURER (1<<9) -#define COOK (1<<10) -#define GRABBER (1<<11) -#define WAVE_DRIFTER (1<<16) - -#define APPRENTICES (1<<5) +#define FISHER (1<<3) +#define LUMBERJACK (1<<4) +#define MINER (1<<5) +#define HUNTER (1<<6) +#define BEGGAR (1<<6) + + +#define OUTSIDERS (1<<5) + +#define ADVENTURER (1<<0) +#define WAVE_DRIFTER (1<<1) +#define MERCENARY (1<<2) +#define GRAVEDIGGER (1<<3) + + +#define APPRENTICES (1<<7) #define APPRENTICE (1<<0) #define SQUIRE (1<<1) @@ -153,6 +168,7 @@ #define ORPHAN (1<<3) #define PRINCE (1<<4) + #define JCOLOR_NOBLE "#9c40bf" #define JCOLOR_MERCHANT "#c2b449" #define JCOLOR_SOLDIER "#b64949" @@ -163,68 +179,54 @@ // job display orders // #define JDO_LORD 1 -#define JDO_LADY 1.1 +#define JDO_CONSORT 1.1 #define JDO_PRINCE 1.2 #define JDO_HAND 2 -#define JDO_STEWARD 3 - -#define JDO_MAGICIAN 4 -#define JDO_WAPP 5 - -#define JDO_FELDSHER 6 - -#define JDO_CAPTAIN 7 -#define JDO_ROYALGUARD 7.1 -#define JDO_GARRISONGUARD 8 -#define JDO_GARRISONARCHER 9 -#define JDO_DUNGEONEER 10 -#define JDO_SQUIRE 11 -#define JDO_VET 11.1 - -#define JDO_PRIEST 12 -#define JDO_CLERIC 13 -#define JDO_MONK 14 -#define JDO_CHURCHLING 15 - -#define JDO_PURITAN 16 -#define JDO_SHEPHERD 17 -#define JDO_TEMPLAR 17.1 - -#define JDO_MERCHANT 18 -#define JDO_TAILOR 18.1 -#define JDO_GRABBER 19 - -#define JDO_ARMORER 20 -#define JDO_WSMITH 21 -#define JDO_BAPP 22 - -#define JDO_MASON 23 - -#define JDO_BUTLER 24 -#define JDO_SERVANT 25 - -#define JDO_INNKEEP 26 -#define JDO_COOK 27 - -#define JDO_BUTCHER 27.1 -#define JDO_SOILSON 27.2 - -#define JDO_GRAVEMAN 28 - -#define JDO_NITEMAN 28.1 -#define JDO_NITEMAIDEN 28.2 - -#define JDO_JESTER 29 -#define JDO_PRISONER 30 - -#define JDO_CHIEF 31 -#define JDO_VILLAGER 32 - -#define JDO_ADVENTURER 32.1 -#define JDO_PILGRIM 32.2 -#define JDO_DRIFTER 32.3 - -#define JDO_MERCENARY 33 - -#define JDO_VAGRANT 34 -#define JDO_ORPHAN 35 +#define JDO_ROYALGUARD 3 +#define JDO_STEWARD 4 +#define JDO_MAGICIAN 5 +#define JDO_WAPP 5.1 +#define JDO_ARCHIVIST 6 +#define JDO_BUTLER 7 +#define JDO_JESTER 8 +#define JDO_SERVANT 9.1 + +#define JDO_CAPTAIN 10 +#define JDO_GARRISONGUARD 11 +#define JDO_GARRISONARCHER 12 +#define JDO_SQUIRE 13 +#define JDO_DUNGEONEER 14 +#define JDO_PRISONER 15 + +#define JDO_PRIEST 20 +#define JDO_ACOLYTE 21 +#define JDO_GRAVEKEEPER 22 +#define JDO_TEMPLAR 23 +#define JDO_INQUISITOR 24 +#define JDO_ADEPT 24.1 +#define JDO_CLERIC 25 + +#define JDO_MERCHANT 30 +#define JDO_STEVEDORE 30.1 +#define JDO_ARMORER 31 +#define JDO_WSMITH 31.1 +#define JDO_BAPP 31.2 +#define JDO_MASON 31.3 +#define JDO_FELDSHER 34 +#define JDO_TAILOR 35 +#define JDO_INNKEEP 36 +#define JDO_COOK 36.1 +#define JDO_NITEMAN 37.1 +#define JDO_NITEMAIDEN 37.2 +#define JDO_VILLAGER 38 + +#define JDO_CHIEF 40 +#define JDO_VET 41 +#define JDO_BUTCHER 42 +#define JDO_SOILSON 43 + +#define JDO_ADVENTURER 50 +#define JDO_PILGRIM 51 +#define JDO_DRIFTER 52 +#define JDO_MERCENARY 53 +#define JDO_VAGRANT 54 diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index 0eee7e4f0b..37d170d527 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -9,11 +9,16 @@ #define PLANE_SPACE -95 #define PLANE_SPACE_PARALLAX -90 +#define WEATHER_OVERLAY_PLANE -80 +#define WEATHER_OVERLAY_LAYER -80 +#define WEATHER_RENDER_TARGET "*WEATHER_OVERLAY_PLANE" + #define OPENSPACE_LAYER 17 //Openspace layer over all -#define OPENSPACE_PLANE -6 //Openspace plane below all turfs -#define OPENSPACE_BACKDROP_PLANE -5 +#define OPENSPACE_PLANE -7 //Openspace plane below all turfs +#define OPENSPACE_BACKDROP_PLANE -6 -#define FLOOR_PLANE -4 +#define FLOOR_PLANE -5 +#define WEATHER_EFFECT_PLANE -4 #define GAME_PLANE -3 #define GAME_PLANE_FOV_HIDDEN -2 #define GAME_PLANE_UPPER -1 @@ -103,33 +108,45 @@ #define LIGHTING_PLANE 15 #define LIGHTING_LAYER 15 //15 -#define ABOVE_LIGHTING_PLANE 16 -#define ABOVE_LIGHTING_LAYER 16 +#define EMISSIVE_PLANE 16 +#define EMISSIVE_RENDER_TARGET "*EMISSIVE_PLANE" + +#define EMISSIVE_UNBLOCKABLE_PLANE 17 +#define EMISSIVE_UNBLOCKABLE_LAYER 17 +#define EMISSIVE_UNBLOCKABLE_RENDER_TARGET "*EMISSIVE_UNBLOCKABLE_PLANE" + +#define O_LIGHTING_VISUAL_PLANE 18 +#define O_LIGHTING_VISUAL_LAYER 18 +#define O_LIGHTING_VISUAL_RENDER_TARGET "O_LIGHT_VISUAL_PLANE" + +#define ABOVE_LIGHTING_PLANE 19 +#define ABOVE_LIGHTING_LAYER 19 +#define ABOVE_LIGHTING_RENDER_TARGET "ABOVE_LIGHTING_PLANE" -#define BYOND_LIGHTING_PLANE 18 -#define BYOND_LIGHTING_LAYER 18 +#define BYOND_LIGHTING_PLANE 21 +#define BYOND_LIGHTING_LAYER 21 -#define CAMERA_STATIC_PLANE 19 -#define CAMERA_STATIC_LAYER 19 +#define CAMERA_STATIC_PLANE 22 +#define CAMERA_STATIC_LAYER 22 //HUD layer defines -#define FULLSCREEN_PLANE 20 -#define FLASH_LAYER 20 -#define FULLSCREEN_LAYER 20.1 -#define UI_DAMAGE_LAYER 20.2 -#define BLIND_LAYER 20.3 -#define CRIT_LAYER 20.4 -#define CURSE_LAYER 20.5 -#define BACKHUD_LAYER 20.6 +#define FULLSCREEN_PLANE 23 +#define FLASH_LAYER 23 +#define FULLSCREEN_LAYER 23.1 +#define UI_DAMAGE_LAYER 23.2 +#define BLIND_LAYER 23.3 +#define CRIT_LAYER 23.4 +#define CURSE_LAYER 23.5 +#define BACKHUD_LAYER 23.6 -#define HUD_PLANE 21 -#define HUD_LAYER 21 -#define ABOVE_HUD_PLANE 22 -#define ABOVE_HUD_LAYER 22 +#define HUD_PLANE 24 +#define HUD_LAYER 24 +#define ABOVE_HUD_PLANE 25 +#define ABOVE_HUD_LAYER 25 -#define SPLASHSCREEN_LAYER 23 -#define SPLASHSCREEN_PLANE 23 +#define SPLASHSCREEN_LAYER 26 +#define SPLASHSCREEN_PLANE 27 #define FOV_EFFECTS_LAYER 10000 diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm index 66be7ca75f..fddf93b4dc 100644 --- a/code/__DEFINES/lighting.dm +++ b/code/__DEFINES/lighting.dm @@ -138,3 +138,13 @@ GLOBAL_LIST_INIT(em_mask_matrix, EM_MASK_MATRIX) /// Returns the blue part of a #RRGGBB hex sequence as number #define GETBLUEPART(hexa) hex2num(copytext(hexa, 6, 8)) + +/// The default falloff curve for all atoms. It's a magic number you should adjust until it looks good. +#define LIGHTING_DEFAULT_FALLOFF_CURVE 2.5 + +///Light made with the lighting datums, applying a matrix. +#define STATIC_LIGHT 1 +///Light made by masking the lighting darkness plane. +#define MOVABLE_LIGHT 2 + +#define LIGHT_ATTACHED (1<<0) diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index 157f3b67e4..04fe77db23 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -4,7 +4,7 @@ #define ENVIRON 3 #define TOTAL 4 //for total power used only #define STATIC_EQUIP 5 -#define STATIC_LIGHT 6 +#define STATIC_LIGHT_A 6 #define STATIC_ENVIRON 7 //Power use diff --git a/code/__DEFINES/medical.dm b/code/__DEFINES/medical.dm index 9ff7070366..1325d5138a 100644 --- a/code/__DEFINES/medical.dm +++ b/code/__DEFINES/medical.dm @@ -87,3 +87,5 @@ #define WOUND_SEVERITY_CRITICAL 4 /// Wounds that are almost immediately fatal, such as a dissected aorta #define WOUND_SEVERITY_FATAL 5 +/// This wound has werewolf infection +#define WOUND_SEVERITY_BIOHAZARD 6 diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 3816345356..d81942d7a0 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -79,8 +79,6 @@ #define DEFAULT_BODYPART_ICON_ROBOTIC 'icons/mob/augmentation/augments.dmi' #define MONKEY_BODYPART "monkey" -#define ALIEN_BODYPART "alien" -#define LARVA_BODYPART "larva" #define DEVIL_BODYPART "devil" /*see __DEFINES/inventory.dm for bodypart bitflag defines*/ @@ -379,8 +377,6 @@ #define MIRROR_PRIDE (1<<2) //Race swap wizard event #define RACE_SWAP (1<<3) -//ERT spawn template (avoid races that don't function without correct gear) -#define ERT_SPAWN (1<<4) //xenobio black crossbreed #define SLIME_EXTRACT (1<<5) //Wabbacjack staff projectiles @@ -395,15 +391,16 @@ //skin tones defines //DWARF SKIN TONES -#define SKIN_COLOR_PLATINUM "ffe0d1" -#define SKIN_COLOR_AURUM "fcccb3" -#define SKIN_COLOR_QUICKSILVER "edc6b3" -#define SKIN_COLOR_BRASS "e2b9a3" -#define SKIN_COLOR_IRON "d9a284" -#define SKIN_COLOR_MALACHITE "c69b83" -#define SKIN_COLOR_OBSIDIAN "3b2e27" -#define SKIN_COLOR_BRIMSTONE "271f1a" -#define SKIN_COLOR_CERARGYRITE "74708b" +#define SKIN_COLOR_ARGENT "f9d5c3" +#define SKIN_COLOR_AURUM "fcdab3" +#define SKIN_COLOR_MERCUR "edc6b3" +#define SKIN_COLOR_BRASS "dfb798" +#define SKIN_COLOR_FERRO "d9a284" +#define SKIN_COLOR_PHOSPHORITE "967e70" +#define SKIN_COLOR_OBSIDIAN "59403b" +#define SKIN_COLOR_PYRITE "54545d" +#define SKIN_COLOR_QUARTZ "8b7e70" +#define SKIN_COLOR_GRENZDWARF "ffe0d1" //DARK ELF SKIN TONES #define SKIN_COLOR_MAGGOT "9796a9" @@ -413,6 +410,7 @@ #define SKIN_COLOR_JACKPOISON "6a616d" #define SKIN_COLOR_HOMUNCULUS "5f5f70" #define SKIN_COLOR_ARACHNID_ICHOR "2F2F38" +#define SKIN_COLOR_SCORPION "B8CEAD" //ELF SKIN TONES #define SKIN_COLOR_SNOW_ELF "fff0e9" @@ -424,17 +422,16 @@ #define SKIN_COLOR_SAND_ELF "5d4c41" //HUMEN SKIN TONES -#define SKIN_COLOR_ICECAP "fff0e9" -#define SKIN_COLOR_ARCTIC "ffe0d1" -#define SKIN_COLOR_TUNDRA "fcccb3" -#define SKIN_COLOR_CONTINENTAL "edc6b3" -#define SKIN_COLOR_TEMPERATE "e2b9a3" -#define SKIN_COLOR_COASTAL "d9a284" -#define SKIN_COLOR_SUBTROPICAL "c9a893" -#define SKIN_COLOR_TROPICALDRY "ba9882" -#define SKIN_COLOR_TROPICALWET "ac8369" -#define SKIN_COLOR_DESERT "9c6f52" -#define SKIN_COLOR_CRIMSONLANDS "4e3729" +#define SKIN_COLOR_GRENZELHOFT "ffe0d1" +#define SKIN_COLOR_LOWLANDER "fcccb3" +#define SKIN_COLOR_MAINLANDER "edc6b3" +#define SKIN_COLOR_HEARTFELT "e2b9a3" +#define SKIN_COLOR_VALORIAN "d9a284" +#define SKIN_COLOR_STEPPE "c9a893" +#define SKIN_COLOR_ISLANDER "ba9882" +#define SKIN_COLOR_SOUTHLANDER "ac8369" +#define SKIN_COLOR_ZYBANTU "9c6f52" +#define SKIN_COLOR_CRIMSONLANDS "684e3d" //AASIMAR SKIN TONES #define SKIN_COLOR_PLANETAR "ffd859" diff --git a/code/__DEFINES/particle_weather.dm b/code/__DEFINES/particle_weather.dm new file mode 100644 index 0000000000..aa9368ffa2 --- /dev/null +++ b/code/__DEFINES/particle_weather.dm @@ -0,0 +1,14 @@ +#define SKY_BLOCKED 0 +#define SKY_VISIBLE 1 +#define SKY_VISIBLE_BORDER 2 + +#define PARTICLEWEATHER_RAIN "weather_rain" +#define PARTICLEWEATHER_SNOW "weather_snow" + +GLOBAL_LIST_EMPTY(weather_act_upon_list) + +/// Weather immunities, also protect mobs inside them. +#define TRAIT_SNOWSTORM_IMMUNE "snowstorm_immune" +#define TRAIT_WEATHER_IMMUNE "weather_immune" //Immune to ALL weather effects. +#define TRAIT_RAINSTORM_IMMUNE "rainstorm_immune" + diff --git a/code/__DEFINES/pollution.dm b/code/__DEFINES/pollution.dm new file mode 100644 index 0000000000..de383a6f6a --- /dev/null +++ b/code/__DEFINES/pollution.dm @@ -0,0 +1,41 @@ +#define REGISTER_POLLUTION(pollution) SSpollution.all_polution[pollution] = TRUE +#define UNREGISTER_POLLUTION(pollution) SSpollution.all_polution -= pollution +#define SET_ACTIVE_POLLUTION(pollution) SSpollution.active_pollution[pollution] = TRUE +#define SET_UNACTIVE_POLLUTION(pollution) SSpollution.active_pollution -= pollution +#define SET_PROCESSED_THIS_RUN(pollution) SSpollution.processed_this_run[pollution] = TRUE +#define REMOVE_POLLUTION_CURRENTRUN(pollution) SSpollution.current_run -= pollution + +#define POLLUTION_HEIGHT_DIVISOR 10 + +#define TICKS_TO_DISSIPATE 20 + +#define POLLUTION_TASK_PROCESS 1 +#define POLLUTION_TASK_DISSIPATE 2 + +#define SCENT_DESC_ODOR "odour" +#define SCENT_DESC_SMELL "smell" +#define SCENT_DESC_FRAGRANCE "fragrance" + +#define POLLUTION_DISSIPATION_PLANETARY_MULTIPLIER 4 + +///Minimum amount of smell power to be able to sniff a pollutant +#define POLLUTANT_SMELL_THRESHOLD 3.5 + +#define POLLUTANT_SMELL_NORMAL 20 +#define POLLUTANT_SMELL_STRONG 40 + +#define SMELL_COOLDOWN 1 MINUTES + +//Bitflags for pollutants +#define POLLUTANT_APPEARANCE (1<<0) //Pollutant has an appearance +#define POLLUTANT_SMELL (1<<1) //Pollutant has a smell +#define POLLUTANT_TOUCH_ACT (1<<2) //Pollutant calls touch_act() on unprotected people touched by it +#define POLLUTANT_BREATHE_ACT (1<<3) //Pollutant calls smell_act() on people breathing it in + +#define POLLUTANT_APPEARANCE_THICKNESS_THRESHOLD 30 +#define THICKNESS_ALPHA_COEFFICIENT 0.0025 + +//Cap for active emitters that can be running for a very long time +#define POLLUTION_ACTIVE_EMITTER_CAP 200 +//For things that you dont want to cause too much pollution +#define POLLUTION_PASSIVE_EMITTER_CAP 70 diff --git a/code/__DEFINES/roguetown.dm b/code/__DEFINES/roguetown.dm index 78ac6276fa..6e3cd1d274 100644 --- a/code/__DEFINES/roguetown.dm +++ b/code/__DEFINES/roguetown.dm @@ -3,9 +3,9 @@ #define ALL_PLAYER_RACES_BY_NAME list("Humen", "Half-Elf", "Dark Elf", "Elf", "Dwarf", "Tiefling", "Aasimar", "Changeling", "Kenku", "Ogrun", "Undine") -#define ALL_TEMPLE_PATRONS list(/datum/patron/divine/astrata, /datum/patron/divine/noc, /datum/patron/divine/eora, /datum/patron/divine/necra, /datum/patron/divine/pestra) -#define ALL_CLERIC_PATRONS list(/datum/patron/divine/astrata, /datum/patron/divine/noc, /datum/patron/divine/eora, /datum/patron/divine/necra, /datum/patron/divine/pestra, /datum/patron/divine/dendor) -#define ALL_TEMPLAR_PATRONS list(/datum/patron/divine/astrata, /datum/patron/divine/noc, /datum/patron/divine/eora, /datum/patron/divine/necra, /datum/patron/divine/pestra) +#define ALL_TEMPLE_PATRONS list(/datum/patron/divine/astrata, /datum/patron/divine/noc, /datum/patron/divine/eora, /datum/patron/divine/pestra, /datum/patron/divine/malum) +#define ALL_CLERIC_PATRONS list(/datum/patron/divine/astrata, /datum/patron/divine/noc, /datum/patron/divine/eora, /datum/patron/divine/necra, /datum/patron/divine/pestra, /datum/patron/divine/dendor, /datum/patron/divine/malum) +#define ALL_TEMPLAR_PATRONS list(/datum/patron/divine/astrata, /datum/patron/divine/noc, /datum/patron/divine/eora, /datum/patron/divine/necra, /datum/patron/divine/pestra, /datum/patron/divine/malum) #define PLATEHIT "plate" #define CHAINHIT "chain" @@ -111,7 +111,8 @@ GLOBAL_LIST_EMPTY(job_respawn_delays) #define CTAG_CHALLENGE "CAT_CHALLENGE" // Challenge class - Meant to be free for everyone #define CTAG_MERCENARY "CAT_MERCENARY" #define CTAG_GARRISON "CAT_GARRISON" -#define CTAG_ADEPT "CAT_ADEPT" // Used for Adept class selection +#define CTAG_ADEPT "CAT_ADEPT" // Used for Adept class selection +#define CTAG_CONSORT "CAT_CONSORT" // Consort classes /* String category tags @@ -237,8 +238,94 @@ GLOBAL_LIST_EMPTY(job_respawn_delays) #define VALUE_MAGIC_ITEM_STRONG VALUE_MAGIC_ITEM_WEAK+BONUS_VALUE_BIG + + + + +/*--------------------\ +| ARMOR BASIC CONCEPT | +\--------------------*/ +/* +Valid until the day someone adds blunt/stab/cut damage defines from Blackstone. + +Five general types of armor with some general outlines. +*With current system armor less than 25 vs arrows is pretty much zero. +Armor values aren´t % +Differences between similar armorsets mostly about coverage or crit, small variation in armor value for non-smithed ones + +Type Melee/Arrow Integrity AC +Minor 10/0* varies varies (light) +Padded 25/30 low light +Leather 35/0* medium light +Mail/Scale/Medium 60/35 medium medium +Heavy Plate/Layered 90/70 good heavy + +Thing can move up or down an armor class by significant changes to coverage & crit protection. Like cuirass gets plate, but only covers torso, gets Medium AC instead of Heavy AC. +*/ + +/*------------------------\ +| ARMOR INTEGRITY DEFINES | - So armor makes sense +\------------------------*/ + +#define INTEGRITY_STRONGEST 400 // STEEL CHESTPIECES +#define INTEGRITY_STRONGER 300 // STEEL +#define INTEGRITY_STRONG 250 // IRON/PERIPHERAL +#define INTEGRITY_STANDARD 200 // LEATHER +#define INTEGRITY_POOR 150 // GAMBESON, COPPER +#define INTEGRITY_WORST 100 + + +/*--------------------\ +| ARMOR VALUE DEFINES | - So armor makes sense. Basic arrow got 25 AP so less than 25 "bullet" does nothing vs arrows generally +\--------------------*/ + +// Light AC +#define ARMOR_MINIMAL list("melee" = 5, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) +#define ARMOR_WEAK list("melee" = 10, "bullet" = 5, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + +#define ARMOR_PADDED_BAD list("melee" = 15, "bullet" = 15, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) +#define ARMOR_PADDED list("melee" = 25, "bullet" = 30, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) +#define ARMOR_PADDED_GOOD list("melee" = 30, "bullet" = 35, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + +#define ARMOR_LEATHER_WORST list("melee" = 20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) +#define ARMOR_LEATHER_BAD list("melee" = 30, "bullet" = 10, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) +#define ARMOR_LEATHER list("melee" = 35, "bullet" = 15, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) +#define ARMOR_LEATHER_GOOD list("melee" = 40, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + +// Medium AC +#define ARMOR_MAILLE_IRON list("melee" = 50, "bullet" = 30, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) +#define ARMOR_MAILLE list("melee" = 55, "bullet" = 40, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) +#define ARMOR_MAILLE_GOOD list("melee" = 60, "bullet" = 45, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + +#define ARMOR_SCALE list("melee" = 65, "bullet" = 65, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + +// Heavy AC +#define ARMOR_PLATE_BAD list("melee" = 65, "bullet" = 50, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) +#define ARMOR_PLATE list("melee" = 80, "bullet" = 70, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) +#define ARMOR_PLATE_GOOD list("melee" = 90, "bullet" = 85, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + + +/*-----------------------\ +| COVERAGE ARMOR DEFINES | +\-----------------------*/ + +#define COVERAGE_HEAD_NOSE ( HEAD | HAIR | EARS | NOSE ) +#define COVERAGE_HEAD ( HEAD | HAIR | EARS ) +#define COVERAGE_NASAL ( HEAD | HAIR | NOSE ) +#define COVERAGE_SKULL ( HEAD | HAIR ) + +#define COVERAGE_VEST ( CHEST | VITALS ) +#define COVERAGE_SHIRT ( CHEST | VITALS | ARMS ) +#define COVERAGE_TORSO ( CHEST | GROIN | VITALS ) +#define COVERAGE_ALL_BUT_ARMS ( CHEST | GROIN | VITALS | LEGS ) +#define COVERAGE_ALL_BUT_LEGS ( CHEST | GROIN | VITALS | ARMS ) +#define COVERAGE_FULL ( CHEST | GROIN | VITALS | LEGS | ARMS ) + +#define COVERAGE_PANTS ( GROIN | LEGS ) +#define COVERAGE_FULL_LEG ( LEGS | FEET ) + /*-----------------------------\ -| CRITICAL HIT DEFENSE DEFINES | - So armor makes sense +| CRITICAL HIT DEFENSE DEFINES | \-----------------------------*/ #define ALL_CRITICAL_HITS list(\ @@ -314,108 +401,9 @@ BCLASS_TWIST) -/*------------------------\ -| ARMOR INTEGRITY DEFINES | - So armor makes sense -\------------------------*/ - -#define INTEGRITY_STRONGEST 500 -#define INTEGRITY_STRONG 300 -#define INTEGRITY_STANDARD 200 -#define INTEGRITY_POOR 150 -#define INTEGRITY_WORST 100 - - -/*--------------------\ -| ARMOR VALUE DEFINES | - So armor makes sense. Basic arrow got 25 AP so less than 25 "bullet" does nothing vs arrows generally -\--------------------*/ - -#define MELEE_5___ARROW_NOTHING list(\ -"melee" = 5, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) -#define MELEE_10___ARROW_5 list(\ -"melee" = 10, "bullet" = 5, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) -// Light Gambesson/padded cloth -#define MELEE_15___ARROW_NOTHING list(\ -"melee" = 15, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) -// Gambesson -#define MELEE_20___ARROW_30 list(\ -"melee" = 20, "bullet" = 30, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) -// Thick Gambesson -#define MELEE_30___ARROW_35 list(\ -"melee" = 30, "bullet" = 35, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - -// Leather and Silk armor -#define MELEE_40___ARROW_20 list(\ -"melee" = 40, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) -// Fur armor or boiled leather -#define MELEE_50___ARROW_25 list(\ -"melee" = 50, "bullet" = 25, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) -// Splint mail (leather + little plates partial) -#define MELEE_60___ARROW_30 list(\ -"melee" = 60, "bullet" = 30, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - -// Thick partial plates -#define MELEE_50___ARROW_NOTHING list(\ -"melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) -#define MELEE_70___ARROW_NOTHING list(\ -"melee" = 70, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) -#define MELEE_45___ARROW_65 list(\ -"melee" = 45, "bullet" = 65, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) -#define MELEE_60___ARROW_50 list(\ -"melee" = 60, "bullet" = 50, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - -// Maille -#define MELEE_80___ARROW_90 list(\ -"melee" = 80, "bullet" = 90, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - -// Iron armor -#define MELEE_70___ARROW_50 list(\ -"melee" = 70, "bullet" = 50, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - -// Partial plates, basic open helmet -#define MELEE_80___ARROW_60 list(\ -"melee" = 80, "bullet" = 60, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - - -#define MELEE_85___ARROW_65 list(\ -"melee" = 85, "bullet" = 65, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - -#define MELEE_90___ARROW_75 list(\ -"melee" = 90, "bullet" = 75, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - -#define MELEE_90___ARROW_90 list(\ -"melee" = 90, "bullet" = 90, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - -#define MELEE_95___ARROW_95 list(\ -"melee" = 95, "bullet" = 95, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - -#define MELEE_100___ARROW_100 list(\ -"melee" = 100, "bullet" = 100, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - -#define ARMOR_MINIMAL MELEE_5___ARROW_NOTHING -#define ARMOR_MINOR MELEE_10___ARROW_5 - -#define ARMOR_GAMBESON_BAD MELEE_15___ARROW_NOTHING -#define ARMOR_GAMBESON MELEE_20___ARROW_30 -#define ARMOR_GAMBESON_GOOD MELEE_30___ARROW_35 - -#define ARMOR_LEATHER MELEE_40___ARROW_20 -#define ARMOR_LEATHER_GOOD MELEE_50___ARROW_25 -#define ARMOR_LEATHER_BEST MELEE_60___ARROW_30 - -#define ARMOR_MAILLE_IRON MELEE_45___ARROW_65 -#define ARMOR_MAILLE MELEE_80___ARROW_90 -#define ARMOR_MAILLE_GOOD MELEE_80___ARROW_100 - -#define ARMOR_COPPER MELEE_50___ARROW_NOTHING - -#define ARMOR_IRON_BAD MELEE_60___ARROW_50 -#define ARMOR_IRON MELEE_70___ARROW_50 -#define ARMOR_IRON_GOOD MELEE_80___ARROW_60 - -#define ARMOR_STEEL_BAD MELEE_85___ARROW_65 -#define ARMOR_STEEL_PARTIAL MELEE_90___ARROW_75 -#define ARMOR_STEEL MELEE_90___ARROW_90 -#define ARMOR_STEEL_BEST MELEE_100___ARROW_100 +/*-----------------------\ +| Decorated Helmet Lists | +\-----------------------*/ #define HELMET_KNIGHT_DECORATIONS list(\ "Basic"="basic_decoration",\ diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 6ec407a6fb..4e4436db6a 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -23,7 +23,7 @@ #define ROLE_MALF "Malf AI" #define ROLE_REV "Revolutionary" #define ROLE_REV_HEAD "Head Revolutionary" -#define ROLE_ALIEN "Xenomorph" + #define ROLE_PAI "pAI" #define ROLE_CULTIST "Cultist" #define ROLE_BLOB "Blob" @@ -50,13 +50,7 @@ //(in game days played) to play that role GLOBAL_LIST_INIT(special_roles, list( ROLE_TRAITOR = /datum/game_mode/traitor, - ROLE_BROTHER = /datum/game_mode/traitor/bros, - ROLE_OPERATIVE = /datum/game_mode/nuclear, - ROLE_CHANGELING = /datum/game_mode/changeling, ROLE_WIZARD = /datum/game_mode/wizard, - ROLE_MALF, - ROLE_REV = /datum/game_mode/revolution, - ROLE_ALIEN, ROLE_PAI, ROLE_BLOB, ROLE_NINJA, @@ -65,7 +59,7 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_REVENANT, ROLE_ABDUCTOR, ROLE_DEVIL = /datum/game_mode/devil, - ROLE_INTERNAL_AFFAIRS = /datum/game_mode/traitor/internal_affairs, +// ROLE_INTERNAL_AFFAIRS = /datum/game_mode/traitor/internal_affairs, ROLE_SENTIENCE )) diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index 2df61770ba..e6ee27c91e 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -33,7 +33,6 @@ #define MODE_DEADMIN "deadmin" #define MODE_KEY_DEADMIN "d" -#define MODE_ALIEN "alientalk" #define MODE_HOLOPAD "holopad" #define MODE_CHANGELING "changeling" @@ -92,6 +91,7 @@ #define MAX_NAME_LEN 42 #define MAX_BROADCAST_LEN 512 #define MAX_CHARTER_LEN 80 +#define MAX_BOOK_LEN 6000 // The maximum length of a player-generated book. It's what the database can support. // Is something in the IC chat filter? This is config dependent. #define CHAT_FILTER_CHECK(T) (config.ic_filter_regex && findtext(T, config.ic_filter_regex)) diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index 265dd854e5..a55926e852 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -11,11 +11,12 @@ #define CHANNEL_RAIN 1015 #define CHANNEL_MUSIC 1014 #define CHANNEL_CMUSIC 1013 +#define CHANNEL_WEATHER 1012 //THIS SHOULD ALWAYS BE THE LOWEST ONE! //KEEP IT UPDATED -#define CHANNEL_HIGHEST_AVAILABLE 1012 +#define CHANNEL_HIGHEST_AVAILABLE 1011 #define SOUND_MINIMUM_PRESSURE 10 diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index e1df706638..fad05217f3 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -105,6 +105,7 @@ #define INIT_ORDER_SERVER_MAINT 93 #define INIT_ORDER_INPUT 85 #define INIT_ORDER_VIS 80 +#define INIT_ORDER_SOUNDS 79 #define INIT_ORDER_ACHIEVEMENTS 77 #define INIT_ORDER_MATERIALS 76 #define INIT_ORDER_RESEARCH 75 @@ -113,6 +114,8 @@ #define INIT_ORDER_ROLE_CLASS_HANDLER 66 #define INIT_ORDER_TRIUMPHS 67 #define INIT_ORDER_QUIRKS 60 +#define INIT_ORDER_AI_MOVEMENT 56 //We need the movement setup +#define INIT_ORDER_AI_CONTROLLERS 55 //So the controller can get the ref #define INIT_ORDER_TICKER 55 #define INIT_ORDER_MAPPING 50 #define INIT_ORDER_NETWORKS 45 @@ -131,7 +134,8 @@ #define INIT_ORDER_XKEYSCORE -10 #define INIT_ORDER_STICKY_BAN -10 #define INIT_ORDER_LIGHTING -20 -#define INIT_ORDER_SHUTTLE -21 +#define INIT_ORDER_OUTDOOR_EFFECTS -21 +#define INIT_ORDER_SHUTTLE -22 #define INIT_ORDER_MINOR_MAPPING -40 #define INIT_ORDER_PATH -50 #define INIT_ORDER_DISCORD -60 @@ -155,6 +159,8 @@ #define FIRE_PRIORITY_MOUSECHARGE 20 #define FIRE_PRIORITY_AIR 20 #define FIRE_PRIORITY_NPC 20 +#define FIRE_PRIORITY_NPC_MOVEMENT 21 +#define FIRE_PRIORITY_NPC_ACTIONS 22 #define FIRE_PRIORITY_PROCESS 25 #define FIRE_PRIORITY_THROWING 25 #define FIRE_PRIORITY_SPACEDRIFT 30 diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 4b1d5389f1..8f6b37f863 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -43,6 +43,8 @@ #define TRAIT_ANTIMAGIC "Anti-Magic" #define TRAIT_ANTISCRYING "Anti-Scrying" #define TRAIT_SHOCKIMMUNE "Shock Immunity" +#define TRAIT_LONGSTRIDER "Longstrider" +#define TRAIT_MOB_FIRE_IMMUNE "Fire Immune" // Not actual full immunity but reduces effect of fire_act() #define TRAIT_KAIZOKU "Foglander Cultured" #define TRAIT_BASHDOORS "bashdoors" @@ -51,6 +53,7 @@ #define TRAIT_BANDITCAMP "banditcamp" #define TRAIT_KNOWBANDITS "knowbandits" #define TRAIT_VAMPMANSION "vampiremansion" +#define TRAIT_INHUMENCAMP "inhumencamp" #define TRAIT_LIMPDICK "limp_dick" #define TRAIT_MINCED "minced" // Punishment that exists only because I am evil. Try NOT using the mouth of MONSTER PEOPLE THAT EATS FLESH ON A WHIM next time. #define TRAIT_SEXPASS "sexpass" @@ -110,6 +113,7 @@ GLOBAL_LIST_INIT(roguetraits, list( TRAIT_INTRAINING = "I'm going to be a knight someday! I can use training dummies more effectively than others.", TRAIT_MALUMFIRE = "My hands are blessed by Malum to forge items of superb quality.", TRAIT_KAIZOKU = "Whether by birth or by learning, I've inherited the Islander ways at cost of the Imperial culture." + TRAIT_MOB_FIRE_IMMUNE = span_info("I am not easily burned by flames."), )) // trait accessor defines @@ -194,7 +198,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_IGNOREDAMAGESLOWDOWN "ignoredamageslowdown" #define TRAIT_DEATHCOMA "deathcoma" //Causes death-like unconsciousness #define TRAIT_FAKEDEATH "fakedeath" //Makes the owner appear as dead to most forms of medical examination -#define TRAIT_XENO_HOST "xeno_host" //Tracks whether we're gonna be a baby alien's mummy. #define TRAIT_STUNIMMUNE "stun_immunity" #define TRAIT_STUNRESISTANCE "stun_resistance" #define TRAIT_SLEEPIMMUNE "sleep_immunity" diff --git a/code/__DEFINES/vv.dm b/code/__DEFINES/vv.dm index aec3dbccc6..87203fc6e7 100644 --- a/code/__DEFINES/vv.dm +++ b/code/__DEFINES/vv.dm @@ -82,6 +82,7 @@ #define VV_HK_TRIGGER_EMP "empulse" #define VV_HK_TRIGGER_EXPLOSION "explode" #define VV_HK_AUTO_RENAME "auto_rename" +#define VV_HK_ADD_AI "add_ai" // /obj #define VV_HK_OSAY "osay" @@ -117,7 +118,6 @@ #define VV_HK_MAKE_MONKEY "human_monkify" #define VV_HK_MAKE_CYBORG "human_cyborgify" #define VV_HK_MAKE_SLIME "human_slimeify" -#define VV_HK_MAKE_ALIEN "human_alienify" #define VV_HK_SET_SPECIES "setspecies" #define VV_HK_PURRBATION "purrbation" diff --git a/code/__HELPERS/AStar.dm b/code/__HELPERS/AStar.dm index 6932de4e86..6d8f2d470e 100644 --- a/code/__HELPERS/AStar.dm +++ b/code/__HELPERS/AStar.dm @@ -199,9 +199,6 @@ Actual Adjacent procs : for(var/obj/structure/window/W in src) if(!W.CanAStarPass(ID, adir)) return TRUE - for(var/obj/machinery/door/window/W in src) - if(!W.CanAStarPass(ID, adir)) - return TRUE for(var/obj/O in T) if(!O.CanAStarPass(ID, rdir, caller)) return TRUE diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index a84c9771c1..d2395228a2 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -9,6 +9,13 @@ * Misc */ +///Add an untyped item to a list, taking care to handle list items by wrapping them in a list to remove the footgun +#define UNTYPED_LIST_ADD(list, item) (list += LIST_VALUE_WRAP_LISTS(item)) +///Remove an untyped item to a list, taking care to handle list items by wrapping them in a list to remove the footgun +#define UNTYPED_LIST_REMOVE(list, item) (list -= LIST_VALUE_WRAP_LISTS(item)) +///If value is a list, wrap it in a list so it can be used with list add/remove operations +#define LIST_VALUE_WRAP_LISTS(value) (islist(value) ? list(value) : value) + #define LAZYINITLIST(L) if (!L) L = list() #define UNSETEMPTY(L) if (L && !length(L)) L = null #define LAZYREMOVE(L, I) if(L) { L -= I; if(!length(L)) { L = null; } } @@ -585,3 +592,30 @@ return FALSE return TRUE + + +//Scales a range (i.e 1,100) and picks an item from the list based on your passed value +//i.e in a list with length 4, a 25 in the 1-100 range will give you the 2nd item +//This assumes your ranges start with 1, I am not good at math and can't do linear scaling +/proc/scale_range_pick(min,max,value,list/L) + if(!length(L)) + return null + var/index = 1 + (value * (length(L) - 1)) / (max - min) + if(index > length(L)) + index = length(L) + return L[index] + +GLOBAL_LIST_EMPTY(string_lists) + +/** + * Caches lists with non-numeric stringify-able values (text or typepath). + */ +/proc/string_list(list/values) + var/string_id = values.Join("-") + + . = GLOB.string_lists[string_id] + + if(.) + return + + return GLOB.string_lists[string_id] = values diff --git a/code/__HELPERS/areas.dm b/code/__HELPERS/areas.dm index 92d25dadc6..fb07f578d9 100644 --- a/code/__HELPERS/areas.dm +++ b/code/__HELPERS/areas.dm @@ -95,11 +95,6 @@ GLOBAL_LIST_INIT(typecache_powerfailure_safe_areas, typecacheof(/area/engine/eng newA.reg_in_areas_in_z() - var/list/firedoors = oldA.firedoors - for(var/door in firedoors) - var/obj/machinery/door/firedoor/FD = door - FD.CalculateAffectingAreas() - to_chat(creator, "I have created a new area, named [newA.name]. It is now weather proof, and constructing an APC will allow it to be powered.") return TRUE diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm index 7391bfdbb5..46e5793c2b 100644 --- a/code/__HELPERS/cmp.dm +++ b/code/__HELPERS/cmp.dm @@ -35,7 +35,7 @@ GLOBAL_VAR_INIT(cmp_field, "name") /proc/cmp_datum_text_dsc(datum/a, datum/b, variable) return sorttext(a.vars[variable], b.vars[variable]) - + /proc/cmp_ckey_asc(client/a, client/b) return sorttext(b.ckey, a.ckey) @@ -119,12 +119,6 @@ GLOBAL_VAR_INIT(cmp_field, "name") /proc/cmp_typepaths_asc(A, B) return sorttext("[B]","[A]") -/proc/cmp_pdaname_asc(obj/item/pda/A, obj/item/pda/B) - return sorttext(B.owner, A.owner) - -/proc/cmp_pdajob_asc(obj/item/pda/A, obj/item/pda/B) - return sorttext(B.ownjob, A.ownjob) - /proc/cmp_assignedrole_asc(mob/living/A, mob/living/B) if(!GLOB.job_assignment_order) GLOB.job_assignment_order = get_job_assignment_order() diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index f0a3c73741..cb9c4697d0 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -188,7 +188,7 @@ block( \ found_organ.organ_flags ^= ORGAN_FROZEN for(var/atom/B in A) //objects held within other objects are added to the processing list, unless that object is something that can hold organs safely - if(!processed_list[B] && !istype(B, /obj/structure/closet/crate/freezer) && !istype(B, /obj/structure/closet/secure_closet/freezer)) + if(!processed_list[B]) processing_list+= B index++ @@ -219,12 +219,6 @@ block( \ if(sight_check && !isInSight(A_tmp, O)) passed=0 - else if(include_radio && istype(A, /obj/item/radio)) - passed=1 - - if(sight_check && !isInSight(A, O)) - passed=0 - if(passed) found_mobs |= A @@ -265,13 +259,6 @@ block( \ processing_list.Cut(1, 2) processing_list += A.contents -/proc/get_mobs_in_radio_ranges(list/obj/item/radio/radios) - . = list() - // Returns a list of mobs who can hear any of the radios given in @radios - for(var/obj/item/radio/R in radios) - if(R) - . |= get_hearers_in_view(R.canhear_range, R) - #define SIGNV(X) ((X<0)?-1:1) @@ -341,7 +328,7 @@ block( \ var/mob/living/carbon/human/H if(ishuman(M.current)) H = M.current - return M.current.stat != DEAD && !issilicon(M.current) && !isbrain(M.current) && (!H || H.dna.species.id != "memezombies") + return M.current.stat != DEAD && !isbrain(M.current) && (!H || H.dna.species.id != "memezombies") else if(isliving(M.current)) return M.current.stat != DEAD return FALSE @@ -573,7 +560,6 @@ block( \ var/static/list/pire_wire = list( /obj/machinery/atmospherics, /obj/structure/disposalpipe, - /obj/structure/cable ) return (is_type_in_list(item, pire_wire)) @@ -600,13 +586,3 @@ block( \ return FALSE return pick(possible_loc) - -/proc/power_fail(duration_min, duration_max) - for(var/P in GLOB.apcs_list) - var/obj/machinery/power/apc/C = P - if(C.cell && SSmapping.level_trait(C.z, ZTRAIT_STATION)) - var/area/A = C.area - if(GLOB.typecache_powerfailure_safe_areas[A.type]) - continue - - C.energy_fail(rand(duration_min,duration_max)) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 8d7979e053..3491943699 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -1106,8 +1106,10 @@ GLOBAL_LIST_INIT(freon_color_matrix, list("#2E5E69", "#60A2A8", "#A1AFB1", rgb(0 if (isfile(thing)) //special snowflake var/name = sanitize_filename("[generate_asset_name(thing)].png") register_asset(name, thing) - for (var/thing2 in targets) - send_asset_async(thing2, key) + for (var/mob/thing2 in targets) + if(!istype(thing2) || !thing2.client) + continue + send_asset_async(thing2?.client, key) return "" var/atom/A = thing if (isnull(dir)) @@ -1130,8 +1132,10 @@ GLOBAL_LIST_INIT(freon_color_matrix, list("#2E5E69", "#60A2A8", "#A1AFB1", rgb(0 key = "[generate_asset_name(I)].png" register_asset(key, I) - for (var/thing2 in targets) - send_asset_async(thing2, key) + for (var/mob/thing2 in targets) + if(!istype(thing2) || !thing2.client) + continue + send_asset_async(thing2?.client, key) return "" diff --git a/code/__HELPERS/lordcolor.dm b/code/__HELPERS/lordcolor.dm index 28160d7aff..b42f667f87 100644 --- a/code/__HELPERS/lordcolor.dm +++ b/code/__HELPERS/lordcolor.dm @@ -22,16 +22,16 @@ GLOBAL_VAR(lordsecondary) return var/list/lordcolors = list( "PURPLE"="#865c9c", -"RED"="#933030", +"RED"="#8f3636", "BLACK"="#2f352f", "BROWN"="#685542", -"GREEN"="#79763f", +"GREEN"="#58793f", "BLUE"="#395480", "YELLOW"="#b5b004", "TEAL"="#249589", -"WHITE"="#ffffff", -"ORANGE"="#b86f0c", -"MAJENTA"="#962e5c") +"WHITE"="#c7c0b5", +"ORANGE"="#b47011", +"MAJENTA"="#822b52") var/prim var/sec var/choice = input(src, "Choose a Primary Color", "ROGUETOWN") as anything in lordcolors diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index bd7740521e..ec035cfb6c 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -655,6 +655,6 @@ GLOBAL_LIST_EMPTY(species_list) return AM.setDir(i) callperrotate?.Invoke() - sleep(1) + sleep(2) if(set_original_dir) AM.setDir(originaldir) diff --git a/code/__HELPERS/priority_announce.dm b/code/__HELPERS/priority_announce.dm index fcfc2c34b1..1d676eed82 100644 --- a/code/__HELPERS/priority_announce.dm +++ b/code/__HELPERS/priority_announce.dm @@ -33,19 +33,6 @@ if(sound) M.playsound_local(M, s, 100) -/proc/print_command_report(text = "", title = null, announce=TRUE) - if(!title) - title = "Classified [command_name()] Update" - - if(announce) - priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/blank.ogg') - - var/datum/comm_message/M = new - M.title = title - M.content = text - - SScommunications.send_message(M) - /proc/minor_announce(message, title = "", alert) if(!message) return diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index 0eecdc4a47..a49b96574a 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -4,7 +4,6 @@ /datum/controller/subsystem/ticker/proc/gather_roundend_feedback() gather_antag_data() - record_nuke_disk_location() var/json_file = file("[GLOB.log_directory]/round_end_data.json") var/list/file_data = list("escapees" = list("humans" = list(), "silicons" = list(), "others" = list(), "npcs" = list()), "abandoned" = list("humans" = list(), "silicons" = list(), "others" = list(), "npcs" = list()), "ghosts" = list(), "additional data" = list()) var/num_survivors = 0 @@ -32,15 +31,6 @@ var/mob/living/carbon/human/H = L category = "humans" mob_data += list("job" = H.mind.assigned_role, "species" = H.dna.species.name) - else if(issilicon(L)) - category = "silicons" - if(isAI(L)) - mob_data += list("module" = "AI") - if(isAI(L)) - mob_data += list("module" = "pAI") - if(iscyborg(L)) - var/mob/living/silicon/robot/R = L - mob_data += list("module" = R.module) else category = "others" mob_data += list("typepath" = m.type) @@ -52,7 +42,7 @@ num_shuttle_escapees++ else escaped = "abandoned" - if(!m.mind && (!ishuman(m) || !issilicon(m))) + if(!m.mind && (!ishuman(m))) var/list/npc_nest = file_data["[escaped]"]["npcs"] if(npc_nest.Find(initial(m.name))) file_data["[escaped]"]["npcs"]["[initial(m.name)]"] += 1 @@ -112,53 +102,6 @@ antag_info["objectives"] += list(list("objective_type"=O.type,"text"=O.explanation_text,"result"=result)) SSblackbox.record_feedback("associative", "antagonists", 1, antag_info) -/datum/controller/subsystem/ticker/proc/record_nuke_disk_location() - var/obj/item/disk/nuclear/N = locate() in GLOB.poi_list - if(N) - var/list/data = list() - var/turf/T = get_turf(N) - if(T) - data["x"] = T.x - data["y"] = T.y - data["z"] = T.z - var/atom/outer = get_atom_on_turf(N,/mob/living) - if(outer != N) - if(isliving(outer)) - var/mob/living/L = outer - data["holder"] = L.real_name - else - data["holder"] = outer.name - - SSblackbox.record_feedback("associative", "roundend_nukedisk", 1 , data) - -/datum/controller/subsystem/ticker/proc/gather_newscaster() - var/json_file = file("[GLOB.log_directory]/newscaster.json") - var/list/file_data = list() - var/pos = 1 - for(var/V in GLOB.news_network.network_channels) - var/datum/newscaster/feed_channel/channel = V - if(!istype(channel)) - stack_trace("Non-channel in newscaster channel list") - continue - file_data["[pos]"] = list("channel name" = "[channel.channel_name]", "author" = "[channel.author]", "censored" = channel.censored ? 1 : 0, "author censored" = channel.authorCensor ? 1 : 0, "messages" = list()) - for(var/M in channel.messages) - var/datum/newscaster/feed_message/message = M - if(!istype(message)) - stack_trace("Non-message in newscaster channel messages list") - continue - var/list/comment_data = list() - for(var/C in message.comments) - var/datum/newscaster/feed_comment/comment = C - if(!istype(comment)) - stack_trace("Non-message in newscaster message comments list") - continue - comment_data += list(list("author" = "[comment.author]", "time stamp" = "[comment.time_stamp]", "body" = "[comment.body]")) - file_data["[pos]"]["messages"] += list(list("author" = "[message.author]", "time stamp" = "[message.time_stamp]", "censored" = message.bodyCensor ? 1 : 0, "author censored" = message.authorCensor ? 1 : 0, "photo file" = "[message.photo_file]", "photo caption" = "[message.caption]", "body" = "[message.body]", "comments" = comment_data)) - pos++ - if(GLOB.news_network.wanted_issue.active) - file_data["wanted"] = list("author" = "[GLOB.news_network.wanted_issue.scannedUser]", "criminal" = "[GLOB.news_network.wanted_issue.criminal]", "description" = "[GLOB.news_network.wanted_issue.body]", "photo file" = "[GLOB.news_network.wanted_issue.photo_file]") - WRITE_FILE(json_file, json_encode(file_data)) - /mob/proc/do_game_over() if(SSticker.current_state != GAME_STATE_FINISHED) return @@ -308,7 +251,7 @@ if(istype(SSticker.mode, /datum/game_mode/chaosmode)) var/datum/game_mode/chaosmode/C = SSticker.mode - if(C.check_for_lord) +/* if(C.check_for_lord) if(!C.check_for_lord()) end_reason = pick("Without a Monarch, they were doomed to become slaves of Zizo.", "Without a Monarch, they were doomed to be eaten by nite creachers.", @@ -317,8 +260,8 @@ "Without a Monarch, the Lich made them his playthings.", "Without a Monarch, some jealous rival reigned in tyranny.", "Without a Monarch, the town was abandoned.") -// if(C.not_enough_players) -// end_reason = "The town was abandoned." + if(C.not_enough_players) + end_reason = "The town was abandoned." */ if(C.vampire_werewolf() == "vampire") end_reason = "When the Vampires finished sucking the town dry, they moved on to the next one." @@ -428,19 +371,12 @@ CHECK_TICK - //AI laws - parts += law_report() - - CHECK_TICK - //Antagonists parts += antag_report() CHECK_TICK //Medals parts += medal_report() - //Station Goals - parts += goal_report() listclearnulls(parts) @@ -541,51 +477,6 @@ give_show_report_button(C) CHECK_TICK -/datum/controller/subsystem/ticker/proc/law_report() - var/list/parts = list() - var/borg_spacer = FALSE //inserts an extra linebreak to seperate AIs from independent borgs, and then multiple independent borgs. - //Silicon laws report - for (var/i in GLOB.ai_list) - var/mob/living/silicon/ai/aiPlayer = i - if(aiPlayer.mind) - parts += "[aiPlayer.name] (Played by: [aiPlayer.mind.key])'s laws [aiPlayer.stat != DEAD ? "at the end of the round" : "when it was deactivated"] were:" - parts += aiPlayer.laws.get_law_list(include_zeroth=TRUE) - - parts += "Total law changes: [aiPlayer.law_change_counter]" - - if (aiPlayer.connected_robots.len) - var/borg_num = aiPlayer.connected_robots.len - parts += "
[aiPlayer.real_name]'s minions were:" - for(var/mob/living/silicon/robot/robo in aiPlayer.connected_robots) - borg_num-- - if(robo.mind) - parts += "[robo.name] (Played by: [robo.mind.key])[robo.stat == DEAD ? " (Deactivated)" : ""][borg_num ?", ":""]" - if(!borg_spacer) - borg_spacer = TRUE - - for (var/mob/living/silicon/robot/robo in GLOB.silicon_mobs) - if (!robo.connected_ai && robo.mind) - parts += "[borg_spacer?"
":""][robo.name] (Played by: [robo.mind.key]) [(robo.stat != DEAD)? "survived as an AI-less borg!" : "was unable to survive the rigors of being a cyborg without an AI."] Its laws were:" - - if(robo) //How the hell do we lose robo between here and the world messages directly above this? - parts += robo.laws.get_law_list(include_zeroth=TRUE) - - if(!borg_spacer) - borg_spacer = TRUE - - if(parts.len) - return "
[parts.Join("
")]
" - else - return "" - -/datum/controller/subsystem/ticker/proc/goal_report() - var/list/parts = list() - if(mode.station_goals.len) - for(var/V in mode.station_goals) - var/datum/station_goal/G = V - parts += G.get_result() - return "
" - /datum/controller/subsystem/ticker/proc/medal_report() if(GLOB.commendations.len) var/list/parts = list() diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index ba3d86a11d..d1965e02d2 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -60,10 +60,10 @@ GLOBAL_VAR_INIT(dayspassed, FALSE) GLOB.forecast = "rain" if(GLOB.forecast == "rain") var/foundnd - for(var/datum/weather/rain/R in SSweather.curweathers) + if(SSParticleWeather?.runningWeather?.target_trait == PARTICLEWEATHER_RAIN) foundnd = TRUE if(!foundnd) - SSweather.run_weather(/datum/weather/rain, 1) + SSParticleWeather?.run_weather(pick(/datum/particle_weather/rain_gentle, /datum/particle_weather/rain_storm)) if(GLOB.forecast == "fog") var/foundnd for(var/datum/weather/fog/R in SSweather.curweathers) diff --git a/code/__HELPERS/type_processing.dm b/code/__HELPERS/type_processing.dm index 28d78ecdfe..0cdd22a398 100644 --- a/code/__HELPERS/type_processing.dm +++ b/code/__HELPERS/type_processing.dm @@ -6,7 +6,6 @@ var/typename = "[type]" var/static/list/TYPES_SHORTCUTS = list( /obj/effect/decal/cleanable = "CLEANABLE", - /obj/item/radio/headset = "HEADSET", /obj/item/clothing/head/helmet/space = "SPESSHELMET", /obj/item/book/manual = "MANUAL", /obj/item/reagent_containers/food/drinks = "DRINK", //longest paths comes first @@ -14,8 +13,6 @@ /obj/item/reagent_containers = "REAGENT_CONTAINERS", /obj/machinery/atmospherics = "ATMOS_MECH", /obj/machinery/portable_atmospherics = "PORT_ATMOS", - /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack = "MECHA_MISSILE_RACK", - /obj/item/mecha_parts/mecha_equipment = "MECHA_EQUIP", /obj/item/organ = "ORGAN", /obj/item = "ITEM", /obj/machinery = "MACHINERY", diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index a511ef1977..50dfad7fdf 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -232,64 +232,6 @@ Turf and target are separate in case you want to teleport some distance from a t return FALSE -//Picks a string of symbols to display as the law number for hacked or ion laws -/proc/ionnum() - return "[pick("!","@","#","$","%","^","&")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")]" - -//Returns a list of unslaved cyborgs -/proc/active_free_borgs() - . = list() - for(var/mob/living/silicon/robot/R in GLOB.alive_mob_list) - if(R.connected_ai || R.shell) - continue - if(R.stat == DEAD) - continue - if(R.emagged || R.scrambledcodes) - continue - . += R - -//Returns a list of AI's -/proc/active_ais(check_mind=0) - . = list() - for(var/mob/living/silicon/ai/A in GLOB.alive_mob_list) - if(A.stat == DEAD) - continue - if(A.control_disabled) - continue - if(check_mind) - if(!A.mind) - continue - . += A - return . - -//Find an active ai with the least borgs. VERBOSE PROCNAME HUH! -/proc/select_active_ai_with_fewest_borgs() - var/mob/living/silicon/ai/selected - var/list/active = active_ais() - for(var/mob/living/silicon/ai/A in active) - if(!selected || (selected.connected_robots.len > A.connected_robots.len)) - selected = A - - return selected - -/proc/select_active_free_borg(mob/user) - var/list/borgs = active_free_borgs() - if(borgs.len) - if(user) - . = input(user,"Unshackled cyborg signals detected:", "Cyborg Selection", borgs[1]) in sortList(borgs) - else - . = pick(borgs) - return . - -/proc/select_active_ai(mob/user) - var/list/ais = active_ais() - if(ais.len) - if(user) - . = input(user,"AI signals detected:", "AI Selection", ais[1]) in sortList(ais) - else - . = pick(ais) - return . - //Returns a list of all items of interest with their name /proc/getpois(mobs_only=0,skip_mindless=0,team=null) var/list/mobs = sortmobs() @@ -711,22 +653,19 @@ will handle it, but: Checks if that loc and dir has an item on the wall */ GLOBAL_LIST_INIT(WALLITEMS, typecacheof(list( - /obj/machinery/power/apc, /obj/machinery/airalarm, /obj/item/radio/intercom, /obj/structure/extinguisher_cabinet, /obj/structure/reagent_dispensers/peppertank, - /obj/machinery/status_display, /obj/machinery/requests_console, /obj/machinery/light_switch, /obj/structure/sign, - /obj/machinery/newscaster, /obj/machinery/firealarm, /obj/structure/noticeboard, /obj/machinery/button, - /obj/machinery/computer/security/telescreen, /obj/machinery/embedded_controller/radio/simple_vent_controller, - /obj/item/storage/secure/safe, /obj/machinery/door_timer, /obj/machinery/flasher, /obj/machinery/keycard_auth, - /obj/structure/mirror, /obj/structure/fireaxecabinet, /obj/machinery/computer/security/telescreen/entertainment, + /obj/structure/sign, + /obj/structure/noticeboard, + /obj/item/storage/secure/safe, + /obj/structure/mirror, /obj/structure/fireaxecabinet, /obj/structure/sign/picture_frame ))) GLOBAL_LIST_INIT(WALLITEMS_EXTERNAL, typecacheof(list( - /obj/machinery/camera, /obj/structure/camera_assembly, - /obj/structure/light_construct, /obj/machinery/light))) + /obj/machinery/light))) GLOBAL_LIST_INIT(WALLITEMS_INVERSE, typecacheof(list( - /obj/structure/light_construct, /obj/machinery/light))) + /obj/machinery/light))) /proc/gotwallitem(loc, dir, check_external = 0) @@ -1259,12 +1198,6 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) if(!T) return FALSE for(var/obj/O in T) - if(istype(O, /obj/machinery/door/window) && (O.dir == dir_to_check || dir_to_check == FULLTILE_WINDOW_DIR)) - return FALSE - if(istype(O, /obj/structure/windoor_assembly)) - var/obj/structure/windoor_assembly/W = O - if(W.ini_dir == dir_to_check || dir_to_check == FULLTILE_WINDOW_DIR) - return FALSE if(istype(O, /obj/structure/window)) var/obj/structure/window/W = O if(W.ini_dir == dir_to_check || W.ini_dir == FULLTILE_WINDOW_DIR || dir_to_check == FULLTILE_WINDOW_DIR) @@ -1594,3 +1527,51 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) GLOBAL_LIST_INIT(ITEM_DOES_NOT_GENERATE_VAULT_RENT, typecacheof(list( /obj/item/roguecoin ))) + +//Vars that will not be copied when using /DuplicateObject +GLOBAL_LIST_INIT(duplicate_forbidden_vars,list( + "tag", "datum_components", "area", "type", "loc", "locs", "vars", "parent", "parent_type", "verbs", "ckey", "key", + "power_supply", "contents", "reagents", "stat", "x", "y", "z", "group", "atmos_adjacent_turfs", "comp_lookup" + )) + +/proc/DuplicateObject(atom/original, perfectcopy = TRUE, sameloc, atom/newloc = null, nerf, holoitem) + RETURN_TYPE(original.type) + if(!original) + return + var/atom/O + + if(sameloc) + O = new original.type(original.loc) + else + O = new original.type(newloc) + + if(perfectcopy && O && original) + for(var/V in original.vars - GLOB.duplicate_forbidden_vars) + if(islist(original.vars[V])) + var/list/L = original.vars[V] + O.vars[V] = L.Copy() + else if(istype(original.vars[V], /datum)) + continue // this would reference the original's object, that will break when it is used or deleted. + else + O.vars[V] = original.vars[V] + + if(isobj(O)) + var/obj/N = O + if(holoitem) + N.resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF // holoitems do not burn + + if(nerf && isitem(O)) + var/obj/item/I = O + I.damtype = STAMINA // thou shalt not + + N.update_icon() + + if(holoitem) + O.flags_1 |= HOLOGRAM_1 + for(var/atom/thing in O) + thing.flags_1 |= HOLOGRAM_1 + if(ismachinery(O)) + var/obj/machinery/M = O + for(var/atom/contained_atom in M.component_parts) + contained_atom.flags_1 |= HOLOGRAM_1 + return O diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index 716f201a57..671a5b45c6 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -35,7 +35,6 @@ GLOBAL_LIST_INIT(maintenance_loot, list( /obj/item/clothing/head/ushanka = 1, /obj/item/clothing/head/welding = 1, /obj/item/clothing/mask/gas = 15, - /obj/item/clothing/suit/hazardvest = 1, /obj/item/clothing/under/misc/vice_officer = 1, /obj/item/clothing/suit/hooded/flashsuit = 2, /obj/item/assembly/prox_sensor = 4, @@ -44,11 +43,6 @@ GLOBAL_LIST_INIT(maintenance_loot, list( /obj/item/flashlight/pen = 1, /obj/effect/spawner/lootdrop/glowstick = 4, /obj/item/multitool = 2, - /obj/item/radio/off = 2, - /obj/item/t_scanner = 5, - /obj/item/airlock_painter = 1, - /obj/item/stack/cable_coil = 4, - /obj/item/stack/cable_coil/five = 6, /obj/item/stack/medical/suture = 1, /obj/item/stack/rods/ten = 9, /obj/item/stack/rods/twentyfive = 1, @@ -73,7 +67,6 @@ GLOBAL_LIST_INIT(maintenance_loot, list( /obj/item/pen = 1, /obj/item/reagent_containers/spray/pestspray = 1, /obj/item/reagent_containers/glass/rag = 3, - /obj/item/stock_parts/cell = 3, /obj/item/storage/belt/utility = 2, /obj/item/storage/box = 2, /obj/item/storage/box/cups = 1, @@ -84,25 +77,20 @@ GLOBAL_LIST_INIT(maintenance_loot, list( /obj/item/storage/toolbox/mechanical = 1, /obj/item/screwdriver = 3, /obj/item/tank/internals/emergency_oxygen = 2, - /obj/item/vending_refill/cola = 1, /obj/item/weldingtool = 3, /obj/item/wirecutters = 1, /obj/item/wrench = 4, - /obj/item/relic = 3, /obj/item/weaponcrafting/receiver = 2, /obj/item/clothing/head/cone = 2, /obj/item/grenade/smokebomb = 2, /obj/item/geiger_counter = 3, - /obj/item/radio/headset = 1, /obj/item/assembly/infra = 1, /obj/item/assembly/igniter = 2, - /obj/item/assembly/signaler = 2, /obj/item/assembly/mousetrap = 2, /obj/item/reagent_containers/syringe = 2, /obj/effect/spawner/lootdrop/gloves = 8, /obj/item/clothing/shoes/laceup = 1, /obj/item/storage/secure/briefcase = 3, - /obj/item/storage/toolbox/artistic = 2, /obj/item/toy/eightball = 1, /obj/item/reagent_containers/pill/floorpill = 1, /obj/item/reagent_containers/food/snacks/canned/peaches/maint = 1, diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm index 10f85f07b2..4518c32764 100644 --- a/code/_globalvars/lists/mapping.dm +++ b/code/_globalvars/lists/mapping.dm @@ -30,7 +30,6 @@ GLOBAL_LIST_EMPTY(nukeop_leader_start) GLOBAL_LIST_EMPTY(newplayer_start) GLOBAL_LIST_EMPTY(prisonwarp) //admin prisoners go to these GLOBAL_LIST_EMPTY(holdingfacility) //captured people go here (ninja energy net) -GLOBAL_LIST_EMPTY(xeno_spawn)//aliens, morphs and nightmares spawn at these GLOBAL_LIST_EMPTY(tdome1) GLOBAL_LIST_EMPTY(tdome2) GLOBAL_LIST_EMPTY(tdomeobserve) diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 355f7f6a48..1125dbd5ee 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -42,6 +42,12 @@ GLOBAL_LIST_EMPTY(mob_config_movespeed_type_lookup) GLOBAL_LIST_EMPTY(emote_list) +GLOBAL_LIST_INIT(dangerous_turfs, typecacheof(list( + /turf/open/lava, + /turf/open/transparent/openspace, + /turf/open/water/acid, + ))) + /proc/update_config_movespeed_type_lookup(update_mobs = TRUE) var/list/mob_types = list() var/list/entry_value = CONFIG_GET(keyed_list/multiplicative_movespeed) diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 6c7067f0cb..34189bf014 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -40,3 +40,31 @@ GLOBAL_LIST_EMPTY(ai_status_displays) GLOBAL_LIST_EMPTY(mob_spawners) // All mob_spawn objects GLOBAL_LIST_EMPTY(alert_consoles) // Station alert consoles, /obj/machinery/computer/station_alert + +GLOBAL_LIST_INIT(rod_jobs, list( + "Garrison Guard", + "Captain", + "Dungeoneer", + "Royal Guard", + "Veteran", + "Squire", + "Mayor", + "Servant", + "Steward", + "Consort", + "King", + "Prince", + "Hand", + "Court Magician", + "Butler", + "Archivist", + "Jester", + "Prisoner", + "Feldsher", + "Niteman", + "Concubine", + "Champion of Rockhill", + "Warden of the Terrorbog", + "Huntmaster of the Murderwoods", + "Hetman of Mount Decapitation", +)) diff --git a/code/_globalvars/lists/poll_ignore.dm b/code/_globalvars/lists/poll_ignore.dm index 580caa1ad4..a1039db614 100644 --- a/code/_globalvars/lists/poll_ignore.dm +++ b/code/_globalvars/lists/poll_ignore.dm @@ -2,7 +2,6 @@ #define POLL_IGNORE_SENTIENCE_POTION "sentience_potion" #define POLL_IGNORE_POSSESSED_BLADE "possessed_blade" -#define POLL_IGNORE_ALIEN_LARVA "alien_larva" #define POLL_IGNORE_SYNDICATE "syndicate" #define POLL_IGNORE_HOLOPARASITE "holoparasite" #define POLL_IGNORE_POSIBRAIN "posibrain" @@ -26,7 +25,6 @@ GLOBAL_LIST_INIT(poll_ignore_desc, list( POLL_IGNORE_SENTIENCE_POTION = "Sentience potion", POLL_IGNORE_POSSESSED_BLADE = "Possessed blade", - POLL_IGNORE_ALIEN_LARVA = "Xenomorph larva", POLL_IGNORE_SYNDICATE = "Syndicate", POLL_IGNORE_HOLOPARASITE = "Holoparasite", POLL_IGNORE_POSIBRAIN = "Positronic brain", diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 3b914e4ef8..775b5a89f7 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -22,7 +22,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_DEATHCOMA" = TRAIT_DEATHCOMA, "TRAIT_FAKEDEATH" = TRAIT_FAKEDEATH, "TRAIT_DISFIGURED" = TRAIT_DISFIGURED, - "TRAIT_XENO_HOST" = TRAIT_XENO_HOST, "TRAIT_STUNIMMUNE" = TRAIT_STUNIMMUNE, "TRAIT_SLEEPIMMUNE" = TRAIT_SLEEPIMMUNE, "TRAIT_PUSHIMMUNE" = TRAIT_PUSHIMMUNE, diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm deleted file mode 100644 index 173b35e4b9..0000000000 --- a/code/_onclick/ai.dm +++ /dev/null @@ -1,192 +0,0 @@ -/* - AI ClickOn() - - Note currently ai restrained() returns 0 in all cases, - therefore restrained code has been removed - - The AI can double click to move the camera (this was already true but is cleaner), - or double click a mob to track them. - - Note that AI have no need for the adjacency proc, and so this proc is a lot cleaner. -*/ -/mob/living/silicon/ai/DblClickOn(atom/A, params) - if(control_disabled || incapacitated()) - return - - if(ismob(A)) - ai_actual_track(A) - else - A.move_camera_by_click() - -/mob/living/silicon/ai/ClickOn(atom/A, params) - if(world.time <= next_click) - return - next_click = world.time + 1 - - if(!can_interact_with(A)) - return - - if(multicam_on) - var/turf/T = get_turf(A) - if(T) - for(var/atom/movable/screen/movable/pic_in_pic/ai/P in T.vis_locs) - if(P.ai == src) - P.Click(params) - break - - if(check_click_intercept(params,A)) - return - - if(control_disabled || incapacitated()) - return - - var/turf/pixel_turf = get_turf_pixel(A) - if(isnull(pixel_turf)) - return - if(!can_see(A)) - if(isturf(A)) //On unmodified clients clicking the static overlay clicks the turf underneath - return //So there's no point messaging admins - message_admins("[ADMIN_LOOKUPFLW(src)] might be running a modified client! (failed can_see on AI click of [A] (Turf Loc: [ADMIN_VERBOSEJMP(pixel_turf)]))") - var/message = "[key_name(src)] might be running a modified client! (failed can_see on AI click of [A] (Turf Loc: [AREACOORD(pixel_turf)]))" - log_admin(message) - if(REALTIMEOFDAY >= chnotify + 9000) - chnotify = REALTIMEOFDAY - send2irc_adminless_only("NOCHEAT", message) - return - - var/list/modifiers = params2list(params) - if(modifiers["shift"] && modifiers["ctrl"]) - CtrlShiftClickOn(A) - return - if(modifiers["middle"]) - if(controlled_mech) //Are we piloting a mech? Placed here so the modifiers are not overridden. - controlled_mech.click_action(A, src, params) //Override AI normal click behavior. - return - if(modifiers["shift"]) - ShiftClickOn(A) - return - if(modifiers["alt"]) // alt and alt-gr (rightalt) - AltClickOn(A) - return - if(modifiers["ctrl"]) - CtrlClickOn(A) - return - - if(world.time <= next_move) - return - - if(aicamera.in_camera_mode) - aicamera.camera_mode_off() - aicamera.captureimage(pixel_turf, usr) - return - if(waypoint_mode) - waypoint_mode = 0 - set_waypoint(A) - return - - A.attack_ai(src) - -/* - AI has no need for the UnarmedAttack() and RangedAttack() procs, - because the AI code is not generic; attack_ai() is used instead. - The below is only really for safety, or you can alter the way - it functions and re-insert it above. -*/ -/mob/living/silicon/ai/UnarmedAttack(atom/A) - A.attack_ai(src) -/mob/living/silicon/ai/RangedAttack(atom/A) - A.attack_ai(src) - -/atom/proc/attack_ai(mob/user) - return - -/* - Since the AI handles shift, ctrl, and alt-click differently - than anything else in the game, atoms have separate procs - for AI shift, ctrl, and alt clicking. -*/ - -/mob/living/silicon/ai/CtrlShiftClickOn(atom/A) - A.AICtrlShiftClick(src) -/mob/living/silicon/ai/ShiftClickOn(atom/A) - A.AIShiftClick(src) -/mob/living/silicon/ai/CtrlClickOn(atom/A) - A.AICtrlClick(src) -/mob/living/silicon/ai/AltClickOn(atom/A) - A.AIAltClick(src) - -/* - The following criminally helpful code is just the previous code cleaned up; - I have no idea why it was in atoms.dm instead of respective files. -*/ -/* Questions: Instead of an Emag check on every function, can we not add to airlocks onclick if emag return? */ - -/* Atom Procs */ -/atom/proc/AICtrlClick() - return -/atom/proc/AIAltClick(mob/living/silicon/ai/user) - AltClick(user) - return -/atom/proc/AIShiftClick() - return -/atom/proc/AICtrlShiftClick() - return - -/* Airlocks */ -/obj/machinery/door/airlock/AICtrlClick() // Bolts doors - if(obj_flags & EMAGGED) - return - - toggle_bolt(usr) - add_hiddenprint(usr) - -/obj/machinery/door/airlock/AIAltClick() // Eletrifies doors. - if(obj_flags & EMAGGED) - return - - if(!secondsElectrified) - shock_perm(usr) - else - shock_restore(usr) - -/obj/machinery/door/airlock/AIShiftClick() // Opens and closes doors! - if(obj_flags & EMAGGED) - return - - user_toggle_open(usr) - add_hiddenprint(usr) - -/obj/machinery/door/airlock/AICtrlShiftClick() // Sets/Unsets Emergency Access Override - if(obj_flags & EMAGGED) - return - - toggle_emergency(usr) - add_hiddenprint(usr) - -/* APC */ -/obj/machinery/power/apc/AICtrlClick() // turns off/on APCs. - if(can_use(usr, 1)) - toggle_breaker(usr) - -/* AI Turrets */ -/obj/machinery/turretid/AIAltClick() //toggles lethal on turrets - if(ailock) - return - toggle_lethal(usr) - -/obj/machinery/turretid/AICtrlClick() //turns off/on Turrets - if(ailock) - return - toggle_on(usr) - -/* Holopads */ -/obj/machinery/holopad/AIAltClick(mob/living/silicon/ai/user) - hangup_all_calls() - add_hiddenprint(usr) - -// -// Override TurfAdjacent for AltClicking -// - -/mob/living/silicon/ai/TurfAdjacent(turf/T) - return (GLOB.cameranet && GLOB.cameranet.checkTurfVis(T)) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index f3fbfd8c96..ef40a8480e 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -193,10 +193,6 @@ if(dir == get_dir(A,src)) //they are behind us and we are not facing them return - if(ismecha(loc)) - var/obj/mecha/M = loc - return M.click_action(A,src,params) - if(restrained()) changeNext_move(CLICK_CD_HANDCUFFED) //Doing shit in cuffs shall be vey slow RestrainedClickOn(A) diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm deleted file mode 100644 index 1b6da2a2b5..0000000000 --- a/code/_onclick/cyborg.dm +++ /dev/null @@ -1,176 +0,0 @@ -/* - Cyborg ClickOn() - - Cyborgs have no range restriction on attack_robot(), because it is basically an AI click. - However, they do have a range restriction on item use, so they cannot do without the - adjacency code. -*/ - -/mob/living/silicon/robot/ClickOn(atom/A, params) - if(world.time <= next_click) - return - next_click = world.time + 1 - - if(check_click_intercept(params,A)) - return - - if(stat || lockcharge || IsParalyzed() || IsStun() || IsUnconscious()) - return - - var/list/modifiers = params2list(params) - if(modifiers["shift"] && modifiers["ctrl"]) - CtrlShiftClickOn(A) - return - if(modifiers["shift"] && modifiers["middle"]) - ShiftMiddleClickOn(A) - return - if(modifiers["middle"]) - MiddleClickOn(A) - return - if(modifiers["shift"]) - ShiftClickOn(A) - return - if(modifiers["alt"]) // alt and alt-gr (rightalt) - AltClickOn(A) - return - if(modifiers["ctrl"]) - CtrlClickOn(A) - return - - if(next_move >= world.time) - return - - face_atom(A) // change direction to face what you clicked on - - /* - cyborg restrained() currently does nothing - if(restrained()) - RestrainedClickOn(A) - return - */ - if(aicamera.in_camera_mode) //Cyborg picture taking - aicamera.camera_mode_off() - aicamera.captureimage(A, usr) - return - - var/obj/item/W = get_active_held_item() - - if(!W && get_dist(src,A) <= interaction_range) - A.attack_robot(src) - return - - if(W) - // buckled cannot prevent machine interlinking but stops arm movement - if( buckled || incapacitated()) - return - - if(W == A) - W.attack_self(src) - return - - // cyborgs are prohibited from using storage items so we can I think safely remove (A.loc in contents) - if(A == loc || (A in loc) || (A in contents)) - W.melee_attack_chain(src, A, params) - return - - if(!isturf(loc)) - return - - // cyborgs are prohibited from using storage items so we can I think safely remove (A.loc && isturf(A.loc.loc)) - if(isturf(A) || isturf(A.loc)) - if(A.Adjacent(src)) // see adjacent.dm - W.melee_attack_chain(src, A, params) - return - else - W.afterattack(A, src, 0, params) - return - -//Middle click cycles through selected modules. -/mob/living/silicon/robot/MiddleClickOn(atom/A) - . = ..() - cycle_modules() - -//Give cyborgs hotkey clicks without breaking existing uses of hotkey clicks -// for non-doors/apcs -/mob/living/silicon/robot/CtrlShiftClickOn(atom/A) - A.BorgCtrlShiftClick(src) -/mob/living/silicon/robot/ShiftClickOn(atom/A) - A.BorgShiftClick(src) -/mob/living/silicon/robot/CtrlClickOn(atom/A) - A.BorgCtrlClick(src) -/mob/living/silicon/robot/AltClickOn(atom/A) - A.BorgAltClick(src) - -/atom/proc/BorgCtrlShiftClick(mob/living/silicon/robot/user) //forward to human click if not overridden - CtrlShiftClick(user) - -/obj/machinery/door/airlock/BorgCtrlShiftClick(mob/living/silicon/robot/user) // Sets/Unsets Emergency Access Override Forwards to AI code. - if(get_dist(src,user) <= user.interaction_range) - AICtrlShiftClick() - else - ..() - - -/atom/proc/BorgShiftClick(mob/living/silicon/robot/user) //forward to human click if not overridden - ShiftClick(user) - -/obj/machinery/door/airlock/BorgShiftClick(mob/living/silicon/robot/user) // Opens and closes doors! Forwards to AI code. - if(get_dist(src,user) <= user.interaction_range) - AIShiftClick() - else - ..() - - -/atom/proc/BorgCtrlClick(mob/living/silicon/robot/user) //forward to human click if not overridden - CtrlClick(user) - -/obj/machinery/door/airlock/BorgCtrlClick(mob/living/silicon/robot/user) // Bolts doors. Forwards to AI code. - if(get_dist(src,user) <= user.interaction_range) - AICtrlClick() - else - ..() - -/obj/machinery/power/apc/BorgCtrlClick(mob/living/silicon/robot/user) // turns off/on APCs. Forwards to AI code. - if(get_dist(src,user) <= user.interaction_range) - AICtrlClick() - else - ..() - -/obj/machinery/turretid/BorgCtrlClick(mob/living/silicon/robot/user) //turret control on/off. Forwards to AI code. - if(get_dist(src,user) <= user.interaction_range) - AICtrlClick() - else - ..() - -/atom/proc/BorgAltClick(mob/living/silicon/robot/user) - AltClick(user) - return - -/obj/machinery/door/airlock/BorgAltClick(mob/living/silicon/robot/user) // Eletrifies doors. Forwards to AI code. - if(get_dist(src,user) <= user.interaction_range) - AIAltClick() - else - ..() - -/obj/machinery/turretid/BorgAltClick(mob/living/silicon/robot/user) //turret lethal on/off. Forwards to AI code. - if(get_dist(src,user) <= user.interaction_range) - AIAltClick() - else - ..() - -/* - As with AI, these are not used in click code, - because the code for robots is specific, not generic. - - If you would like to add advanced features to robot - clicks, you can do so here, but you will have to - change attack_robot() above to the proper function -*/ -/mob/living/silicon/robot/UnarmedAttack(atom/A) - A.attack_robot(src) -/mob/living/silicon/robot/RangedAttack(atom/A) - A.attack_robot(src) - -/atom/proc/attack_robot(mob/user) - attack_ai(user) - return diff --git a/code/_onclick/drag_drop.dm b/code/_onclick/drag_drop.dm index a52a46702f..ad76382cc8 100644 --- a/code/_onclick/drag_drop.dm +++ b/code/_onclick/drag_drop.dm @@ -102,6 +102,25 @@ var/list/L = params2list(params) + if (L["middle"]) //start charging a spell or readying a mmb intent- Moved to front so it can't be overriden by people holding right click + if(mob.next_move > world.time) + return + mob.atkswinging = "middle" + if(mob.mmb_intent) + mob.used_intent = mob.mmb_intent + if(mob.used_intent.type == INTENT_SPELL && mob.ranged_ability) + var/obj/effect/proc_holder/spell/S = mob.ranged_ability + if(!S.cast_check(TRUE,mob)) + return + if(!mob.mmb_intent) + mouse_pointer_icon = 'icons/effects/mousemice/human_looking.dmi' + else + if(mob.mmb_intent.get_chargetime() && !AD.blockscharging) + updateprogbar() + else + mouse_pointer_icon = mob.mmb_intent.pointer + return + if (L["right"]) mob.face_atom(object, location, control, params) if(L["left"]) @@ -123,24 +142,7 @@ else mouse_pointer_icon = 'icons/effects/mousemice/human_looking.dmi' return - if (L["middle"]) //start charging a spell or readying a mmb intent - if(mob.next_move > world.time) - return - mob.atkswinging = "middle" - if(mob.mmb_intent) - mob.used_intent = mob.mmb_intent - if(mob.used_intent.type == INTENT_SPELL && mob.ranged_ability) - var/obj/effect/proc_holder/spell/S = mob.ranged_ability - if(!S.cast_check(TRUE,mob)) - return - if(!mob.mmb_intent) - mouse_pointer_icon = 'icons/effects/mousemice/human_looking.dmi' - else - if(mob.mmb_intent.get_chargetime() && !AD.blockscharging) - updateprogbar() - else - mouse_pointer_icon = mob.mmb_intent.pointer - return + if (L["left"]) //start charging a lmb intent mob.face_atom(object, location, control, params) if(L["right"]) diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 9c1b323542..93c28c40a1 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -69,10 +69,6 @@ #define ui_monkey_neck "CENTER-3:15,SOUTH:5" //monkey #define ui_monkey_back "CENTER-2:16,SOUTH:5" //monkey -//#define ui_alien_storage_l "CENTER-2:14,SOUTH:5"//alien -#define ui_alien_storage_r "CENTER+1:18,SOUTH:5"//alien -#define ui_alien_language_menu "EAST-3:26,SOUTH:5" //alien - #define ui_drone_drop "CENTER+1:18,SOUTH:5" //maintenance drones #define ui_drone_pull "CENTER+2:2,SOUTH:5" //maintenance drones #define ui_drone_storage "CENTER-2:14,SOUTH:5" //maintenance drones @@ -197,12 +193,6 @@ //borgs #define ui_borg_health "EAST-1:28,CENTER-1:15" //borgs have the health display where humans have the pressure damage indicator. -//aliens -#define ui_alien_health "EAST,CENTER-1:15" //aliens have the health display where humans have the pressure damage indicator. -#define ui_alienplasmadisplay "EAST,CENTER-2:15" -#define ui_alien_queen_finder "EAST,CENTER-3:15" - -//constructs #define ui_construct_pull "EAST,CENTER-2:15" #define ui_construct_health "EAST,CENTER:15" //same as borgs and humans diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm deleted file mode 100644 index 17b5a9ed61..0000000000 --- a/code/_onclick/hud/ai.dm +++ /dev/null @@ -1,301 +0,0 @@ -/atom/movable/screen/ai - icon = 'icons/mob/screen_ai.dmi' - -/atom/movable/screen/ai/Click() - if(isobserver(usr) || usr.incapacitated()) - return TRUE - -/atom/movable/screen/ai/aicore - name = "AI core" - icon_state = "ai_core" - -/atom/movable/screen/ai/aicore/Click() - if(..()) - return - var/mob/living/silicon/ai/AI = usr - AI.view_core() - -/atom/movable/screen/ai/camera_list - name = "Show Camera List" - icon_state = "camera" - -/atom/movable/screen/ai/camera_list/Click() - if(..()) - return - var/mob/living/silicon/ai/AI = usr - AI.show_camera_list() - -/atom/movable/screen/ai/camera_track - name = "Track With Camera" - icon_state = "track" - -/atom/movable/screen/ai/camera_track/Click() - if(..()) - return - var/mob/living/silicon/ai/AI = usr - var/target_name = input(AI, "Choose who you want to track", "Tracking") as null|anything in AI.trackable_mobs() - AI.ai_camera_track(target_name) - -/atom/movable/screen/ai/camera_light - name = "Toggle Camera Light" - icon_state = "camera_light" - -/atom/movable/screen/ai/camera_light/Click() - if(..()) - return - var/mob/living/silicon/ai/AI = usr - AI.toggle_camera_light() - -/atom/movable/screen/ai/crew_monitor - name = "Crew Monitoring Console" - icon_state = "crew_monitor" - -/atom/movable/screen/ai/crew_monitor/Click() - if(..()) - return - var/mob/living/silicon/ai/AI = usr - GLOB.crewmonitor.show(AI,AI) - -/atom/movable/screen/ai/crew_manifest - name = "Crew Manifest" - icon_state = "manifest" - -/atom/movable/screen/ai/crew_manifest/Click() - if(..()) - return - var/mob/living/silicon/ai/AI = usr - AI.ai_roster() - -/atom/movable/screen/ai/alerts - name = "Show Alerts" - icon_state = "alerts" - -/atom/movable/screen/ai/alerts/Click() - if(..()) - return - var/mob/living/silicon/ai/AI = usr - AI.ai_alerts() - -/atom/movable/screen/ai/announcement - name = "Make Vox Announcement" - icon_state = "announcement" - -/atom/movable/screen/ai/announcement/Click() - if(..()) - return - var/mob/living/silicon/ai/AI = usr - AI.announcement() - -/atom/movable/screen/ai/call_shuttle - name = "Call Emergency Shuttle" - icon_state = "call_shuttle" - -/atom/movable/screen/ai/call_shuttle/Click() - if(..()) - return - var/mob/living/silicon/ai/AI = usr - AI.ai_call_shuttle() - -/atom/movable/screen/ai/state_laws - name = "State Laws" - icon_state = "state_laws" - -/atom/movable/screen/ai/state_laws/Click() - if(..()) - return - var/mob/living/silicon/ai/AI = usr - AI.checklaws() - -/atom/movable/screen/ai/pda_msg_send - name = "PDA - Send Message" - icon_state = "pda_send" - -/atom/movable/screen/ai/pda_msg_send/Click() - if(..()) - return - var/mob/living/silicon/ai/AI = usr - AI.cmd_send_pdamesg(usr) - -/atom/movable/screen/ai/pda_msg_show - name = "PDA - Show Message Log" - icon_state = "pda_receive" - -/atom/movable/screen/ai/pda_msg_show/Click() - if(..()) - return - var/mob/living/silicon/ai/AI = usr - AI.cmd_show_message_log(usr) - -/atom/movable/screen/ai/image_take - name = "Take Image" - icon_state = "take_picture" - -/atom/movable/screen/ai/image_take/Click() - if(..()) - return - if(isAI(usr)) - var/mob/living/silicon/ai/AI = usr - AI.aicamera.toggle_camera_mode(usr) - else if(iscyborg(usr)) - var/mob/living/silicon/robot/R = usr - R.aicamera.toggle_camera_mode(usr) - -/atom/movable/screen/ai/image_view - name = "View Images" - icon_state = "view_images" - -/atom/movable/screen/ai/image_view/Click() - if(..()) - return - if(isAI(usr)) - var/mob/living/silicon/ai/AI = usr - AI.aicamera.viewpictures(usr) - else if(iscyborg(usr)) - var/mob/living/silicon/robot/R = usr - R.aicamera.viewpictures(usr) - -/atom/movable/screen/ai/sensors - name = "Sensor Augmentation" - icon_state = "ai_sensor" - -/atom/movable/screen/ai/sensors/Click() - if(..()) - return - var/mob/living/silicon/S = usr - S.toggle_sensors() - -/atom/movable/screen/ai/multicam - name = "Multicamera Mode" - icon_state = "multicam" - -/atom/movable/screen/ai/multicam/Click() - if(..()) - return - var/mob/living/silicon/ai/AI = usr - AI.toggle_multicam() - -/atom/movable/screen/ai/add_multicam - name = "New Camera" - icon_state = "new_cam" - -/atom/movable/screen/ai/add_multicam/Click() - if(..()) - return - var/mob/living/silicon/ai/AI = usr - AI.drop_new_multicam() - - -/datum/hud/ai - ui_style = 'icons/mob/screen_ai.dmi' - -/datum/hud/ai/New(mob/owner) - ..() - var/atom/movable/screen/using - -// Language menu - using = new /atom/movable/screen/language_menu - using.screen_loc = ui_borg_language_menu - using.hud = src - static_inventory += using - -//AI core - using = new /atom/movable/screen/ai/aicore() - using.screen_loc = ui_ai_core - using.hud = src - static_inventory += using - -//Camera list - using = new /atom/movable/screen/ai/camera_list() - using.screen_loc = ui_ai_camera_list - using.hud = src - static_inventory += using - -//Track - using = new /atom/movable/screen/ai/camera_track() - using.screen_loc = ui_ai_track_with_camera - using.hud = src - static_inventory += using - -//Camera light - using = new /atom/movable/screen/ai/camera_light() - using.screen_loc = ui_ai_camera_light - using.hud = src - static_inventory += using - -//Crew Monitoring - using = new /atom/movable/screen/ai/crew_monitor() - using.screen_loc = ui_ai_crew_monitor - using.hud = src - static_inventory += using - -//Crew Manifest - using = new /atom/movable/screen/ai/crew_manifest() - using.screen_loc = ui_ai_crew_manifest - using.hud = src - static_inventory += using - -//Alerts - using = new /atom/movable/screen/ai/alerts() - using.screen_loc = ui_ai_alerts - using.hud = src - static_inventory += using - -//Announcement - using = new /atom/movable/screen/ai/announcement() - using.screen_loc = ui_ai_announcement - using.hud = src - static_inventory += using - -//Shuttle - using = new /atom/movable/screen/ai/call_shuttle() - using.screen_loc = ui_ai_shuttle - using.hud = src - static_inventory += using - -//Laws - using = new /atom/movable/screen/ai/state_laws() - using.screen_loc = ui_ai_state_laws - using.hud = src - static_inventory += using - -//PDA message - using = new /atom/movable/screen/ai/pda_msg_send() - using.screen_loc = ui_ai_pda_send - using.hud = src - static_inventory += using - -//PDA log - using = new /atom/movable/screen/ai/pda_msg_show() - using.screen_loc = ui_ai_pda_log - using.hud = src - static_inventory += using - -//Take image - using = new /atom/movable/screen/ai/image_take() - using.screen_loc = ui_ai_take_picture - using.hud = src - static_inventory += using - -//View images - using = new /atom/movable/screen/ai/image_view() - using.screen_loc = ui_ai_view_images - using.hud = src - static_inventory += using - -//Medical/Security sensors - using = new /atom/movable/screen/ai/sensors() - using.screen_loc = ui_ai_sensor - using.hud = src - static_inventory += using - -//Multicamera mode - using = new /atom/movable/screen/ai/multicam() - using.screen_loc = ui_ai_multicam - using.hud = src - static_inventory += using - -//Add multicamera camera - using = new /atom/movable/screen/ai/add_multicam() - using.screen_loc = ui_ai_add_multicam - using.hud = src - static_inventory += using diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 8cc46dfb6e..44be016f93 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -286,28 +286,6 @@ if(L.mobility_flags & MOBILITY_MOVE) return L.resist_fire() //I just want to start a flame in your hearrrrrrtttttt. - -//ALIENS - -/atom/movable/screen/alert/alien_tox - name = "Plasma" - desc = "" - icon_state = "alien_tox" - alerttooltipstyle = "alien" - -/atom/movable/screen/alert/alien_fire -// This alert is temporarily gonna be thrown for all hot air but one day it will be used for literally being on fire - name = "Too Hot" - desc = "" - icon_state = "alien_fire" - alerttooltipstyle = "alien" - -/atom/movable/screen/alert/alien_vulnerable - name = "Severed Matriarchy" - desc = "" - icon_state = "alien_noqueen" - alerttooltipstyle = "alien" - //BLOBS /atom/movable/screen/alert/nofactory @@ -316,114 +294,6 @@ icon_state = "blobbernaut_nofactory" alerttooltipstyle = "blob" -// BLOODCULT - -/atom/movable/screen/alert/bloodsense - name = "Blood Sense" - desc = "" - icon_state = "cult_sense" - alerttooltipstyle = "cult" - var/static/image/narnar - var/angle = 0 - var/mob/living/simple_animal/hostile/construct/Cviewer = null - -/atom/movable/screen/alert/bloodsense/Initialize() - . = ..() - narnar = new('icons/mob/screen_alert.dmi', "mini_nar") - START_PROCESSING(SSprocessing, src) - -/atom/movable/screen/alert/bloodsense/Destroy() - Cviewer = null - STOP_PROCESSING(SSprocessing, src) - return ..() - -/atom/movable/screen/alert/bloodsense/process() - var/atom/blood_target - - if(!mob_viewer.mind) - return - - var/datum/antagonist/cult/antag = mob_viewer.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(!antag) - return - var/datum/objective/sacrifice/sac_objective = locate() in antag.cult_team.objectives - - if(antag.cult_team.blood_target) - if(!get_turf(antag.cult_team.blood_target)) - antag.cult_team.blood_target = null - else - blood_target = antag.cult_team.blood_target - if(Cviewer && Cviewer.seeking && Cviewer.master) - blood_target = Cviewer.master - desc = "" - if(!blood_target) - if(sac_objective && !sac_objective.check_completion()) - if(icon_state == "runed_sense0") - return - animate(src, transform = null, time = 1, loop = 0) - angle = 0 - cut_overlays() - icon_state = "runed_sense0" - desc = "" - add_overlay(sac_objective.sac_image) - else - var/datum/objective/eldergod/summon_objective = locate() in antag.cult_team.objectives - if(!summon_objective) - return - desc = "" - if(icon_state == "runed_sense1") - return - animate(src, transform = null, time = 1, loop = 0) - angle = 0 - cut_overlays() - icon_state = "runed_sense1" - add_overlay(narnar) - return - var/turf/P = get_turf(blood_target) - var/turf/Q = get_turf(mob_viewer) - if(!P || !Q || (P.z != Q.z)) //The target is on a different Z level, we cannot sense that far. - icon_state = "runed_sense2" - desc = "" - return -// if(isliving(blood_target)) -// var/mob/living/real_target = blood_target -// desc = "" -// else -// desc = "" - var/target_angle = Get_Angle(Q, P) - var/target_dist = get_dist(P, Q) - cut_overlays() - switch(target_dist) - if(0 to 1) - icon_state = "runed_sense2" - if(2 to 8) - icon_state = "arrow8" - if(9 to 15) - icon_state = "arrow7" - if(16 to 22) - icon_state = "arrow6" - if(23 to 29) - icon_state = "arrow5" - if(30 to 36) - icon_state = "arrow4" - if(37 to 43) - icon_state = "arrow3" - if(44 to 50) - icon_state = "arrow2" - if(51 to 57) - icon_state = "arrow1" - if(58 to 64) - icon_state = "arrow0" - if(65 to 400) - icon_state = "arrow" - var/difference = target_angle - angle - angle = target_angle - if(!difference) - return - var/matrix/final = matrix(transform) - final.Turn(difference) - animate(src, transform = final, time = 5, loop = 0) - //GUARDIANS @@ -445,24 +315,6 @@ icon_state = "guardian_instealth" alerttooltipstyle = "parasite" -//SILICONS - -/atom/movable/screen/alert/nocell - name = "Missing Power Cell" - desc = "" - icon_state = "nocell" - -/atom/movable/screen/alert/emptycell - name = "Out of Power" - desc = "Unit's power cell has no charge remaining. No modules available until power cell is recharged. \ -Recharging stations are available in robotics, the dormitory bathrooms, and the AI satellite." - icon_state = "emptycell" - -/atom/movable/screen/alert/lowcell - name = "Low Charge" - desc = "" - icon_state = "lowcell" - //Ethereal /atom/movable/screen/alert/etherealcharge @@ -470,51 +322,6 @@ Recharging stations are available in robotics, the dormitory bathrooms, and the desc = "" icon_state = "etherealcharge" -//Need to cover all use cases - emag, illegal upgrade module, malf AI hack, traitor cyborg -/atom/movable/screen/alert/hacked - name = "Hacked" - desc = "" - icon_state = "hacked" - -/atom/movable/screen/alert/locked - name = "Locked Down" - desc = "Unit has been remotely locked down. Usage of a Robotics Control Console like the one in the Research Director's \ -office by your AI master or any qualified human may resolve this matter. Robotics may provide further assistance if necessary." - icon_state = "locked" - -/atom/movable/screen/alert/newlaw - name = "Law Update" - desc = "Laws have potentially been uploaded to or removed from this unit. Please be aware of any changes \ -so as to remain in compliance with the most up-to-date laws." - icon_state = "newlaw" - timeout = 300 - -/atom/movable/screen/alert/hackingapc - name = "Hacking APC" - desc = "An Area Power Controller is being hacked. When the process is \ - complete, you will have exclusive control of it, and you will gain \ - additional processing time to unlock more malfunction abilities." - icon_state = "hackingapc" - timeout = 600 - var/atom/target = null - -/atom/movable/screen/alert/hackingapc/Click() - if(!usr || !usr.client) - return - if(!target) - return - var/mob/living/silicon/ai/AI = usr - var/turf/T = get_turf(target) - if(T) - AI.eyeobj.setLoc(T) - -//MECHS - -/atom/movable/screen/alert/low_mech_integrity - name = "Mech Damaged" - desc = "" - icon_state = "low_mech_integrity" - //GHOSTS //TODO: expand this system to replace the pollCandidates/CheckAntagonist/"choose quickly"/etc Yes/No messages diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm deleted file mode 100644 index a7cd99620f..0000000000 --- a/code/_onclick/hud/alien.dm +++ /dev/null @@ -1,135 +0,0 @@ -/atom/movable/screen/alien - icon = 'icons/mob/screen_alien.dmi' - -/atom/movable/screen/alien/leap - name = "toggle leap" - icon_state = "leap_off" - -/atom/movable/screen/alien/leap/Click() - if(isalienhunter(usr)) - var/mob/living/carbon/alien/humanoid/hunter/AH = usr - AH.toggle_leap() - -/atom/movable/screen/alien/plasma_display - icon = 'icons/mob/screen_gen.dmi' - icon_state = "power_display2" - name = "plasma stored" - screen_loc = ui_alienplasmadisplay - - -/atom/movable/screen/alien/alien_queen_finder - icon = 'icons/mob/screen_alien.dmi' - icon_state = "queen_finder" - name = "queen sense" - desc = "" - screen_loc = ui_alien_queen_finder - -/datum/hud/alien - ui_style = 'icons/mob/screen_alien.dmi' - -/datum/hud/alien/New(mob/living/carbon/alien/humanoid/owner) - ..() - - var/atom/movable/screen/using - -//equippable shit - -//hands - build_hand_slots() - -//begin buttons - - using = new /atom/movable/screen/swap_hand() - using.icon = ui_style - using.icon_state = "swap_1" - using.screen_loc = ui_swaphand_position(owner,1) - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/swap_hand() - using.icon = ui_style - using.icon_state = "swap_2" - using.screen_loc = ui_swaphand_position(owner,2) - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/act_intent/alien() - using.icon_state = mymob.used_intent.name - using.hud = src - static_inventory += using - action_intent = using - - if(isalienhunter(mymob)) - var/mob/living/carbon/alien/humanoid/hunter/H = mymob - H.leap_icon = new /atom/movable/screen/alien/leap() - H.leap_icon.screen_loc = ui_alien_storage_r - static_inventory += H.leap_icon - - using = new/atom/movable/screen/language_menu - using.screen_loc = ui_alien_language_menu - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/drop() - using.icon = ui_style - using.screen_loc = ui_drop_throw - using.hud = src - static_inventory += using - -// using = new /atom/movable/screen/resist() -// using.icon = ui_style -// using.screen_loc = ui_above_movement -// using.hud = src -// hotkeybuttons += using - - throw_icon = new /atom/movable/screen/throw_catch() - throw_icon.icon = ui_style - throw_icon.screen_loc = ui_drop_throw - throw_icon.hud = src - hotkeybuttons += throw_icon - - pull_icon = new /atom/movable/screen/pull() - pull_icon.icon = ui_style - pull_icon.update_icon() - pull_icon.screen_loc = ui_above_movement - pull_icon.hud = src - static_inventory += pull_icon - -//begin indicators - - healths = new /atom/movable/screen/healths/alien() - healths.hud = src - infodisplay += healths - - alien_plasma_display = new /atom/movable/screen/alien/plasma_display() - alien_plasma_display.hud = src - infodisplay += alien_plasma_display - - if(!isalienqueen(mymob)) - alien_queen_finder = new /atom/movable/screen/alien/alien_queen_finder - alien_queen_finder.hud = src - infodisplay += alien_queen_finder - - zone_select = new /atom/movable/screen/zone_sel/alien() - zone_select.hud = src - zone_select.update_icon() - static_inventory += zone_select - - for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory)) - if(inv.slot_id) - inv.hud = src - inv_slots[inv.slot_id] = inv - inv.update_icon() - -/datum/hud/alien/persistent_inventory_update() - if(!mymob) - return - var/mob/living/carbon/alien/humanoid/H = mymob - if(hud_version != HUD_STYLE_NOHUD) - for(var/obj/item/I in H.held_items) - I.screen_loc = ui_hand_position(H.get_held_index_of_item(I)) - H.client.screen += I - else - for(var/obj/item/I in H.held_items) - I.screen_loc = null - H.client.screen -= I diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm deleted file mode 100644 index a17e9cca08..0000000000 --- a/code/_onclick/hud/alien_larva.dm +++ /dev/null @@ -1,37 +0,0 @@ -/datum/hud/larva - ui_style = 'icons/mob/screen_alien.dmi' - -/datum/hud/larva/New(mob/owner) - ..() - var/atom/movable/screen/using - - using = new /atom/movable/screen/act_intent/alien() - using.icon_state = mymob.used_intent.name - using.hud = src - static_inventory += using - action_intent = using - - healths = new /atom/movable/screen/healths/alien() - healths.hud = src - infodisplay += healths - - alien_queen_finder = new /atom/movable/screen/alien/alien_queen_finder() - alien_queen_finder.hud = src - infodisplay += alien_queen_finder - - pull_icon = new /atom/movable/screen/pull() - pull_icon.icon = 'icons/mob/screen_alien.dmi' - pull_icon.update_icon() - pull_icon.screen_loc = ui_above_movement - pull_icon.hud = src - hotkeybuttons += pull_icon - - using = new/atom/movable/screen/language_menu - using.screen_loc = ui_alien_language_menu - using.hud = src - static_inventory += using - - zone_select = new /atom/movable/screen/zone_sel/alien() - zone_select.hud = src - zone_select.update_icon() - static_inventory += zone_select diff --git a/code/_onclick/hud/devil.dm b/code/_onclick/hud/devil.dm index 7588a4abfc..8fde7aaff0 100644 --- a/code/_onclick/hud/devil.dm +++ b/code/_onclick/hud/devil.dm @@ -46,9 +46,6 @@ zone_select.hud = src zone_select.update_icon() - lingchemdisplay = new /atom/movable/screen/ling/chems() - lingchemdisplay.hud = src - devilsouldisplay = new /atom/movable/screen/devil/soul_counter devilsouldisplay.hud = src infodisplay += devilsouldisplay diff --git a/code/_onclick/hud/drones.dm b/code/_onclick/hud/drones.dm deleted file mode 100644 index 73f732cb7b..0000000000 --- a/code/_onclick/hud/drones.dm +++ /dev/null @@ -1,50 +0,0 @@ -/datum/hud/dextrous/drone/New(mob/owner) - ..() - var/atom/movable/screen/inventory/inv_box - - inv_box = new /atom/movable/screen/inventory() - inv_box.name = "internal storage" - inv_box.icon = ui_style - inv_box.icon_state = "suit_storage" -// inv_box.icon_full = "template" - inv_box.screen_loc = ui_drone_storage - inv_box.slot_id = SLOT_GENERC_DEXTROUS_STORAGE - inv_box.hud = src - static_inventory += inv_box - - inv_box = new /atom/movable/screen/inventory() - inv_box.name = "head/mask" - inv_box.icon = ui_style - inv_box.icon_state = "mask" -// inv_box.icon_full = "template" - inv_box.screen_loc = ui_drone_head - inv_box.slot_id = SLOT_HEAD - inv_box.hud = src - static_inventory += inv_box - - for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory)) - if(inv.slot_id) - inv.hud = src - inv_slots[inv.slot_id] = inv - inv.update_icon() - - -/datum/hud/dextrous/drone/persistent_inventory_update() - if(!mymob) - return - var/mob/living/simple_animal/drone/D = mymob - - if(hud_shown) - if(D.internal_storage) - D.internal_storage.screen_loc = ui_drone_storage - D.client.screen += D.internal_storage - if(D.head) - D.head.screen_loc = ui_drone_head - D.client.screen += D.head - else - if(D.internal_storage) - D.internal_storage.screen_loc = null - if(D.head) - D.head.screen_loc = null - - ..() diff --git a/code/_onclick/hud/generic_dextrous.dm b/code/_onclick/hud/generic_dextrous.dm index 925dfd02d0..68f12f8341 100644 --- a/code/_onclick/hud/generic_dextrous.dm +++ b/code/_onclick/hud/generic_dextrous.dm @@ -15,10 +15,6 @@ //Rogue Slots ///////////////////////////////// - grain = new /atom/movable/screen/grain - grain.hud = src - static_inventory += grain - scannies = new /atom/movable/screen/scannies scannies.hud = src static_inventory += scannies diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm index 9ee12a187e..2ef17d3ede 100644 --- a/code/_onclick/hud/ghost.dm +++ b/code/_onclick/hud/ghost.dm @@ -56,12 +56,12 @@ // Store the current time for the player GLOB.job_respawn_delays[G.ckey] = world.time + target_job.same_job_respawn_delay + verbs -= /client/proc/descend for(var/turf/spawn_loc in GLOB.underworldcoinspawns) var/mob/living/carbon/spirit/O = new /mob/living/carbon/spirit(spawn_loc) O.livingname = G.name O.ckey = G.ckey SSdroning.area_entered(get_area(O), O.client) - verbs -= /client/proc/descend return // var/take_triumph = FALSE @@ -70,12 +70,12 @@ if(C.skeletons) G.returntolobby() if(alert("Travel with the boatman?", "", "Yes", "No") == "Yes") + verbs -= /client/proc/descend for(var/turf/spawn_loc in GLOB.underworldcoinspawns) var/mob/living/carbon/spirit/O = new /mob/living/carbon/spirit(spawn_loc) O.livingname = G.name O.ckey = G.ckey SSdroning.area_entered(get_area(O), O.client) - verbs -= /client/proc/descend /* if(world.time < G.ghostize_time + RESPAWNTIME) var/ttime = round((G.ghostize_time + RESPAWNTIME - world.time) / 10) var/list/thingsz = list("My connection to the world is still too strong.",\ @@ -101,14 +101,6 @@ var/mob/dead/observer/G = usr G.dead_tele() -/atom/movable/screen/ghost/pai - name = "pAI Candidate" - icon_state = "pai" - -/atom/movable/screen/ghost/pai/Click() - var/mob/dead/observer/G = usr - G.register_pai() - /datum/hud/ghost/New(mob/owner) ..() var/atom/movable/screen/using @@ -117,10 +109,6 @@ using.hud = src static_inventory += using - using = new /atom/movable/screen/grain - using.hud = src - static_inventory += using - scannies = new /atom/movable/screen/scannies scannies.hud = src static_inventory += scannies @@ -155,10 +143,6 @@ using.hud = src static_inventory += using - using = new /atom/movable/screen/grain - using.hud = src - static_inventory += using - scannies = new /atom/movable/screen/scannies scannies.hud = src static_inventory += scannies @@ -189,10 +173,6 @@ using.hud = src static_inventory += using - using = new /atom/movable/screen/grain - using.hud = src - static_inventory += using - scannies = new /atom/movable/screen/scannies scannies.hud = src static_inventory += scannies diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 57ecd4ab36..425870992d 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -24,13 +24,9 @@ GLOBAL_LIST_INIT(available_ui_styles, sortList(list( var/atom/movable/screen/blobpwrdisplay - var/atom/movable/screen/alien_plasma_display - var/atom/movable/screen/alien_queen_finder - var/atom/movable/screen/devil/soul_counter/devilsouldisplay var/atom/movable/screen/act_intent/action_intent - var/atom/movable/screen/grain var/atom/movable/screen/scannies var/atom/movable/screen/act_intent/rogintent/magic/spell_intent var/atom/movable/screen/zone_sel/zone_select @@ -131,12 +127,8 @@ GLOBAL_LIST_INIT(available_ui_styles, sortList(list( healths = null healthdoll = null internals = null - lingchemdisplay = null devilsouldisplay = null - lingstingdisplay = null blobpwrdisplay = null - alien_plasma_display = null - alien_queen_finder = null QDEL_LIST_ASSOC_VAL(plane_masters) QDEL_LIST(screenoverlays) @@ -247,12 +239,6 @@ GLOBAL_LIST_INIT(available_ui_styles, sortList(list( var/mob/screenmob = viewmob || mymob hidden_inventory_update(screenmob) -/datum/hud/robot/show_hud(version = 0, mob/viewmob) - . = ..() - if(!.) - return - update_robot_modules_display() - /datum/hud/proc/hidden_inventory_update() return diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index c4fb1ce341..9edb3219b8 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -62,24 +62,6 @@ /atom/movable/screen/devil/soul_counter/proc/clear() invisibility = INVISIBILITY_ABSTRACT -/atom/movable/screen/ling - invisibility = INVISIBILITY_ABSTRACT - -/atom/movable/screen/ling/sting - name = "current sting" - screen_loc = ui_lingstingdisplay - -/atom/movable/screen/ling/sting/Click() - if(isobserver(usr)) - return - var/mob/living/carbon/U = usr - U.unset_sting() - -/atom/movable/screen/ling/chems - name = "chemical storage" - icon_state = "power_display" - screen_loc = ui_lingchemdisplay - /datum/hud/human/New(mob/living/carbon/human/owner) ..() @@ -96,11 +78,6 @@ //Rogue Slots ///////////////////////////////// - grain = new /atom/movable/screen/grain - grain.hud = src - static_inventory += grain - - reads = new /atom/movable/screen/read reads.hud = src static_inventory += reads diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm index 07f52b9e02..f75433f977 100644 --- a/code/_onclick/hud/monkey.dm +++ b/code/_onclick/hud/monkey.dm @@ -104,15 +104,6 @@ pull_icon.hud = src static_inventory += pull_icon - lingchemdisplay = new /atom/movable/screen/ling/chems() - lingchemdisplay.hud = src - infodisplay += lingchemdisplay - - lingstingdisplay = new /atom/movable/screen/ling/sting() - lingstingdisplay.hud = src - infodisplay += lingstingdisplay - - zone_select = new /atom/movable/screen/zone_sel() zone_select.icon = ui_style zone_select.hud = src diff --git a/code/_onclick/hud/pai.dm b/code/_onclick/hud/pai.dm deleted file mode 100644 index a5b11f4780..0000000000 --- a/code/_onclick/hud/pai.dm +++ /dev/null @@ -1,258 +0,0 @@ -#define PAI_MISSING_SOFTWARE_MESSAGE "I must download the required software to use this." - -/atom/movable/screen/pai - icon = 'icons/mob/screen_pai.dmi' - var/required_software - -/atom/movable/screen/pai/Click() - if(isobserver(usr) || usr.incapacitated()) - return FALSE - var/mob/living/silicon/pai/pAI = usr - if(required_software && !pAI.software.Find(required_software)) - to_chat(pAI, PAI_MISSING_SOFTWARE_MESSAGE) - return FALSE - return TRUE - -/atom/movable/screen/pai/software - name = "Software Interface" - icon_state = "pai" - -/atom/movable/screen/pai/software/Click() - if(!..()) - return - var/mob/living/silicon/pai/pAI = usr - pAI.paiInterface() - -/atom/movable/screen/pai/shell - name = "Toggle Holoform" - icon_state = "pai_holoform" - -/atom/movable/screen/pai/shell/Click() - if(!..()) - return - var/mob/living/silicon/pai/pAI = usr - if(pAI.holoform) - pAI.fold_in(0) - else - pAI.fold_out() - -/atom/movable/screen/pai/chassis - name = "Holochassis Appearance Composite" - icon_state = "pai_chassis" - -/atom/movable/screen/pai/chassis/Click() - if(!..()) - return - var/mob/living/silicon/pai/pAI = usr - pAI.choose_chassis() - -/atom/movable/screen/pai/rest - name = "Rest" - icon_state = "pai_rest" - -/atom/movable/screen/pai/rest/Click() - if(!..()) - return - var/mob/living/silicon/pai/pAI = usr - pAI.lay_down() - -/atom/movable/screen/pai/light - name = "Toggle Integrated Lights" - icon_state = "light" - -/atom/movable/screen/pai/light/Click() - if(!..()) - return - var/mob/living/silicon/pai/pAI = usr - pAI.toggle_integrated_light() - -/atom/movable/screen/pai/newscaster - name = "pAI Newscaster" - icon_state = "newscaster" - required_software = "newscaster" - -/atom/movable/screen/pai/newscaster/Click() - if(!..()) - return - var/mob/living/silicon/pai/pAI = usr - pAI.newscaster.ui_interact(usr) - -/atom/movable/screen/pai/host_monitor - name = "Host Health Scan" - icon_state = "host_monitor" - required_software = "host scan" - -/atom/movable/screen/pai/host_monitor/Click() - if(!..()) - return - var/mob/living/silicon/pai/pAI = usr - if(iscarbon(pAI.card.loc)) - pAI.hostscan.attack(pAI.card.loc, pAI) - else - to_chat(src, "I are not being carried by anyone!") - return 0 - -/atom/movable/screen/pai/crew_manifest - name = "Crew Manifest" - icon_state = "manifest" - required_software = "crew manifest" - -/atom/movable/screen/pai/crew_manifest/Click() - if(!..()) - return - var/mob/living/silicon/pai/pAI = usr - pAI.ai_roster() - -/atom/movable/screen/pai/state_laws - name = "State Laws" - icon_state = "state_laws" - -/atom/movable/screen/pai/state_laws/Click() - if(!..()) - return - var/mob/living/silicon/pai/pAI = usr - pAI.checklaws() - -/atom/movable/screen/pai/pda_msg_send - name = "PDA - Send Message" - icon_state = "pda_send" - required_software = "digital messenger" - -/atom/movable/screen/pai/pda_msg_send/Click() - if(!..()) - return - var/mob/living/silicon/pai/pAI = usr - pAI.cmd_send_pdamesg(usr) - -/atom/movable/screen/pai/pda_msg_show - name = "PDA - Show Message Log" - icon_state = "pda_receive" - required_software = "digital messenger" - -/atom/movable/screen/pai/pda_msg_show/Click() - if(!..()) - return - var/mob/living/silicon/pai/pAI = usr - pAI.cmd_show_message_log(usr) - -/atom/movable/screen/pai/image_take - name = "Take Image" - icon_state = "take_picture" - required_software = "photography module" - -/atom/movable/screen/pai/image_take/Click() - if(!..()) - return - var/mob/living/silicon/pai/pAI = usr - pAI.aicamera.toggle_camera_mode(usr) - -/atom/movable/screen/pai/image_view - name = "View Images" - icon_state = "view_images" - required_software = "photography module" - -/atom/movable/screen/pai/image_view/Click() - if(!..()) - return - var/mob/living/silicon/pai/pAI = usr - pAI.aicamera.viewpictures(usr) - -/atom/movable/screen/pai/radio - name = "radio" - icon = 'icons/mob/screen_cyborg.dmi' - icon_state = "radio" - -/atom/movable/screen/pai/radio/Click() - if(!..()) - return - var/mob/living/silicon/pai/pAI = usr - pAI.radio.interact(usr) - -/datum/hud/pai/New(mob/living/silicon/pai/owner) - ..() - var/atom/movable/screen/using - -// Software menu - using = new /atom/movable/screen/pai/software - using.screen_loc = ui_pai_software - static_inventory += using - -// Holoform - using = new /atom/movable/screen/pai/shell - using.screen_loc = ui_pai_shell - static_inventory += using - -// Chassis Select Menu - using = new /atom/movable/screen/pai/chassis - using.screen_loc = ui_pai_chassis - static_inventory += using - -// Rest - using = new /atom/movable/screen/pai/rest - using.screen_loc = ui_pai_rest - static_inventory += using - -// Integrated Light - using = new /atom/movable/screen/pai/light - using.screen_loc = ui_pai_light - static_inventory += using - -// Newscaster - using = new /atom/movable/screen/pai/newscaster - using.screen_loc = ui_pai_newscaster - static_inventory += using - -// Language menu - using = new /atom/movable/screen/language_menu - using.screen_loc = ui_borg_language_menu - static_inventory += using - -// Host Monitor - using = new /atom/movable/screen/pai/host_monitor() - using.screen_loc = ui_pai_host_monitor - static_inventory += using - -// Crew Manifest - using = new /atom/movable/screen/pai/crew_manifest() - using.screen_loc = ui_pai_crew_manifest - static_inventory += using - -// Laws - using = new /atom/movable/screen/pai/state_laws() - using.screen_loc = ui_pai_state_laws - static_inventory += using - -// PDA message - using = new /atom/movable/screen/pai/pda_msg_send() - using.screen_loc = ui_pai_pda_send - static_inventory += using - -// PDA log - using = new /atom/movable/screen/pai/pda_msg_show() - using.screen_loc = ui_pai_pda_log - static_inventory += using - -// Take image - using = new /atom/movable/screen/pai/image_take() - using.screen_loc = ui_pai_take_picture - static_inventory += using - -// View images - using = new /atom/movable/screen/pai/image_view() - using.screen_loc = ui_pai_view_images - static_inventory += using - -// Radio - using = new /atom/movable/screen/pai/radio() - using.screen_loc = ui_borg_radio - static_inventory += using - - update_software_buttons() - -/datum/hud/pai/proc/update_software_buttons() - var/mob/living/silicon/pai/owner = mymob - for(var/atom/movable/screen/pai/button in static_inventory) - if(button.required_software) - button.color = owner.software.Find(button.required_software) ? null : "#808080" - -#undef PAI_MISSING_SOFTWARE_MESSAGE diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm index be73b949e5..c6cb53a1fb 100644 --- a/code/_onclick/hud/plane_master.dm +++ b/code/_onclick/hud/plane_master.dm @@ -104,6 +104,12 @@ blend_mode = BLEND_MULTIPLY mouse_opacity = MOUSE_OPACITY_TRANSPARENT +/atom/movable/screen/plane_master/lighting/Initialize() + . = ..() + filters += filter(type="alpha", render_source = EMISSIVE_RENDER_TARGET, flags = MASK_INVERSE) + filters += filter(type="alpha", render_source = EMISSIVE_UNBLOCKABLE_RENDER_TARGET, flags = MASK_INVERSE) + filters += filter(type="alpha", render_source = O_LIGHTING_VISUAL_RENDER_TARGET, flags = MASK_INVERSE) + /atom/movable/screen/plane_master/parallax name = "parallax plane master" // screen_loc = "CENTER-2" @@ -188,3 +194,39 @@ render_target = FIELD_OF_VISION_BLOCKER_RENDER_TARGET mouse_opacity = 0 appearance_flags = PLANE_MASTER + +/atom/movable/screen/plane_master/o_light_visual + name = "overlight light visual plane master" + layer = O_LIGHTING_VISUAL_LAYER + plane = O_LIGHTING_VISUAL_PLANE + render_target = O_LIGHTING_VISUAL_RENDER_TARGET + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + blend_mode = BLEND_MULTIPLY + + +//Contains all weather overlays +/atom/movable/screen/plane_master/weather_overlay + name = "weather overlay master" + plane = WEATHER_OVERLAY_PLANE + layer = WEATHER_OVERLAY_LAYER + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + render_target = WEATHER_RENDER_TARGET + blend_mode = BLEND_MULTIPLY + //render_relay_plane = null //Used as alpha filter for weather_effect fullscreen + +//Contains the weather effect itself +/atom/movable/screen/plane_master/weather_effect + name = "weather effect plane master" + plane = WEATHER_EFFECT_PLANE + blend_mode = BLEND_OVERLAY + screen_loc = "CENTER-2, CENTER" + //render_relay_plane = RENDER_PLANE_GAME + +/atom/movable/screen/plane_master/weather_effect/Initialize() + . = ..() + //filters += filter(type="alpha", render_source=WEATHER_RENDER_TARGET) + SSoutdoor_effects.weather_planes_need_vis |= src + +/atom/movable/screen/plane_master/weather_effect/Destroy() + . = ..() + SSoutdoor_effects.weather_planes_need_vis -= src diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm deleted file mode 100644 index 91a10beb46..0000000000 --- a/code/_onclick/hud/robot.dm +++ /dev/null @@ -1,287 +0,0 @@ -/atom/movable/screen/robot - icon = 'icons/mob/screen_cyborg.dmi' - -/atom/movable/screen/robot/module - name = "cyborg module" - icon_state = "nomod" - -/atom/movable/screen/robot/Click() - if(isobserver(usr)) - return 1 - -/atom/movable/screen/robot/module/Click() - if(..()) - return - var/mob/living/silicon/robot/R = usr - if(R.module.type != /obj/item/robot_module) - R.hud_used.toggle_show_robot_modules() - return 1 - R.pick_module() - -/atom/movable/screen/robot/module1 - name = "module1" - icon_state = "inv1" - -/atom/movable/screen/robot/module1/Click() - if(..()) - return - var/mob/living/silicon/robot/R = usr - R.toggle_module(1) - -/atom/movable/screen/robot/module2 - name = "module2" - icon_state = "inv2" - -/atom/movable/screen/robot/module2/Click() - if(..()) - return - var/mob/living/silicon/robot/R = usr - R.toggle_module(2) - -/atom/movable/screen/robot/module3 - name = "module3" - icon_state = "inv3" - -/atom/movable/screen/robot/module3/Click() - if(..()) - return - var/mob/living/silicon/robot/R = usr - R.toggle_module(3) - -/atom/movable/screen/robot/radio - name = "radio" - icon_state = "radio" - -/atom/movable/screen/robot/radio/Click() - if(..()) - return - var/mob/living/silicon/robot/R = usr - R.radio.interact(R) - -/atom/movable/screen/robot/store - name = "store" - icon_state = "store" - -/atom/movable/screen/robot/store/Click() - if(..()) - return - var/mob/living/silicon/robot/R = usr - R.uneq_active() - -/atom/movable/screen/robot/lamp - name = "headlamp" - icon_state = "lamp0" - -/atom/movable/screen/robot/lamp/Click() - if(..()) - return - var/mob/living/silicon/robot/R = usr - R.control_headlamp() - -/atom/movable/screen/robot/thrusters - name = "ion thrusters" - icon_state = "ionpulse0" - -/atom/movable/screen/robot/thrusters/Click() - if(..()) - return - var/mob/living/silicon/robot/R = usr - R.toggle_ionpulse() - -/datum/hud/robot - ui_style = 'icons/mob/screen_cyborg.dmi' - -/datum/hud/robot/New(mob/owner) - ..() - var/mob/living/silicon/robot/mymobR = mymob - var/atom/movable/screen/using - - using = new/atom/movable/screen/language_menu - using.screen_loc = ui_borg_language_menu - static_inventory += using - -//Radio - using = new /atom/movable/screen/robot/radio() - using.screen_loc = ui_borg_radio - using.hud = src - static_inventory += using - -//Module select - using = new /atom/movable/screen/robot/module1() - using.screen_loc = ui_inv1 - using.hud = src - static_inventory += using - mymobR.inv1 = using - - using = new /atom/movable/screen/robot/module2() - using.screen_loc = ui_inv2 - using.hud = src - static_inventory += using - mymobR.inv2 = using - - using = new /atom/movable/screen/robot/module3() - using.screen_loc = ui_inv3 - using.hud = src - static_inventory += using - mymobR.inv3 = using - -//End of module select - -//Photography stuff - using = new /atom/movable/screen/ai/image_take() - using.screen_loc = ui_borg_camera - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/ai/image_view() - using.screen_loc = ui_borg_album - using.hud = src - static_inventory += using - -//Sec/Med HUDs - using = new /atom/movable/screen/ai/sensors() - using.screen_loc = ui_borg_sensor - using.hud = src - static_inventory += using - -//Headlamp control - using = new /atom/movable/screen/robot/lamp() - using.screen_loc = ui_borg_lamp - using.hud = src - static_inventory += using - mymobR.lamp_button = using - -//Thrusters - using = new /atom/movable/screen/robot/thrusters() - using.screen_loc = ui_borg_thrusters - using.hud = src - static_inventory += using - mymobR.thruster_button = using - -//Intent - action_intent = new /atom/movable/screen/act_intent/robot() - action_intent.icon_state = mymob.used_intent.name - action_intent.hud = src - static_inventory += action_intent - -//Health - healths = new /atom/movable/screen/healths/robot() - healths.hud = src - infodisplay += healths - -//Installed Module - mymobR.hands = new /atom/movable/screen/robot/module() - mymobR.hands.screen_loc = ui_borg_module - mymobR.hands.hud = src - static_inventory += mymobR.hands - -//Store - module_store_icon = new /atom/movable/screen/robot/store() - module_store_icon.screen_loc = ui_borg_store - module_store_icon.hud = src - - pull_icon = new /atom/movable/screen/pull() - pull_icon.icon = 'icons/mob/screen_cyborg.dmi' - pull_icon.screen_loc = ui_borg_pull - pull_icon.hud = src - pull_icon.update_icon() - hotkeybuttons += pull_icon - - - zone_select = new /atom/movable/screen/zone_sel/robot() - zone_select.hud = src - zone_select.update_icon() - static_inventory += zone_select - - -/datum/hud/proc/toggle_show_robot_modules() - if(!iscyborg(mymob)) - return - - var/mob/living/silicon/robot/R = mymob - - R.shown_robot_modules = !R.shown_robot_modules - update_robot_modules_display() - -/datum/hud/proc/update_robot_modules_display(mob/viewer) - if(!iscyborg(mymob)) - return - - var/mob/living/silicon/robot/R = mymob - - var/mob/screenmob = viewer || R - - if(!R.module) - return - - if(!R.client) - return - - if(R.shown_robot_modules && screenmob.hud_used.hud_shown) - //Modules display is shown - screenmob.client.screen += module_store_icon //"store" icon - - if(!R.module.modules) - to_chat(usr, "Selected module has no modules to select!") - return - - if(!R.robot_modules_background) - return - - var/display_rows = CEILING(length(R.module.get_inactive_modules()) / 8, 1) - R.robot_modules_background.screen_loc = "CENTER-4:16,SOUTH+1:7 to CENTER+3:16,SOUTH+[display_rows]:7" - screenmob.client.screen += R.robot_modules_background - - var/x = -4 //Start at CENTER-4,SOUTH+1 - var/y = 1 - - for(var/atom/movable/A in R.module.get_inactive_modules()) - //Module is not currently active - screenmob.client.screen += A - if(x < 0) - A.screen_loc = "CENTER[x]:16,SOUTH+[y]:7" - else - A.screen_loc = "CENTER+[x]:16,SOUTH+[y]:7" - A.layer = ABOVE_HUD_LAYER - A.plane = ABOVE_HUD_PLANE - - x++ - if(x == 4) - x = -4 - y++ - - else - //Modules display is hidden - screenmob.client.screen -= module_store_icon //"store" icon - - for(var/atom/A in R.module.get_inactive_modules()) - //Module is not currently active - screenmob.client.screen -= A - R.shown_robot_modules = 0 - screenmob.client.screen -= R.robot_modules_background - -/datum/hud/robot/persistent_inventory_update(mob/viewer) - if(!mymob) - return - var/mob/living/silicon/robot/R = mymob - - var/mob/screenmob = viewer || R - - if(screenmob.hud_used) - if(screenmob.hud_used.hud_shown) - for(var/i in 1 to R.held_items.len) - var/obj/item/I = R.held_items[i] - if(I) - switch(i) - if(1) - I.screen_loc = ui_inv1 - if(2) - I.screen_loc = ui_inv2 - if(3) - I.screen_loc = ui_inv3 - else - return - screenmob.client.screen += I - else - for(var/obj/item/I in R.held_items) - screenmob.client.screen -= I diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index e13d1a6c83..176fe9df25 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -624,10 +624,6 @@ L.toggle_cmode() update_icon() -/atom/movable/screen/act_intent/alien - icon = 'icons/mob/screen_alien.dmi' - screen_loc = ui_movi - /atom/movable/screen/act_intent/robot icon = 'icons/mob/screen_cyborg.dmi' screen_loc = ui_borg_intents @@ -1365,10 +1361,6 @@ . += mutable_appearance(overlay_icon, "[hud.mymob.gender == "male" ? "m" : "f"]_[hud.mymob.zone_selected]") // . += mutable_appearance(overlay_icon, "height_arrow[hud.mymob.aimheight]") -/atom/movable/screen/zone_sel/alien - icon = 'icons/mob/screen_alien.dmi' - overlay_icon = 'icons/mob/screen_alien.dmi' - /atom/movable/screen/zone_sel/robot icon = 'icons/mob/screen_cyborg.dmi' @@ -1395,10 +1387,6 @@ icon_state = "health0" screen_loc = ui_health -/atom/movable/screen/healths/alien - icon = 'icons/mob/screen_alien.dmi' - screen_loc = ui_alien_health - /atom/movable/screen/healths/robot icon = 'icons/mob/screen_cyborg.dmi' screen_loc = ui_borg_health @@ -1880,10 +1868,9 @@ if("dawn") icon_state = "dawn" name = "Sir Sun - Dawn" - for(var/datum/weather/rain/R in SSweather.curweathers) - if(R.stage < 2) - add_overlay("clouds") - if(R.stage == 2) + /* if(R.stage < 2) + add_overlay("clouds") */ + if(PARTICLEWEATHER_RAIN) add_overlay("rainlay") /atom/movable/screen/rogfat @@ -1906,19 +1893,6 @@ screen_loc = rogueui_fat layer = HUD_LAYER+0.1 -/atom/movable/screen/grain - icon = 'icons/grain.dmi' - icon_state = "grain" - name = "" - screen_loc = "1,1" - mouse_opacity = 0 - alpha = 50 -// layer = 20.5 -// plane = 20 - layer = 13 - plane = 0 - blend_mode = 4 - /atom/movable/screen/scannies icon = 'icons/mob/roguehudback2.dmi' icon_state = "crt" diff --git a/code/_onclick/hud/swarmer.dm b/code/_onclick/hud/swarmer.dm deleted file mode 100644 index 0ce47ca7af..0000000000 --- a/code/_onclick/hud/swarmer.dm +++ /dev/null @@ -1,98 +0,0 @@ - - -/atom/movable/screen/swarmer - icon = 'icons/mob/swarmer.dmi' - -/atom/movable/screen/swarmer/FabricateTrap - icon_state = "ui_trap" - name = "Create trap (Costs 5 Resources)" - desc = "" - -/atom/movable/screen/swarmer/FabricateTrap/Click() - if(isswarmer(usr)) - var/mob/living/simple_animal/hostile/swarmer/S = usr - S.CreateTrap() - -/atom/movable/screen/swarmer/Barricade - icon_state = "ui_barricade" - name = "Create barricade (Costs 5 Resources)" - desc = "" - -/atom/movable/screen/swarmer/Barricade/Click() - if(isswarmer(usr)) - var/mob/living/simple_animal/hostile/swarmer/S = usr - S.CreateBarricade() - -/atom/movable/screen/swarmer/Replicate - icon_state = "ui_replicate" - name = "Replicate (Costs 50 Resources)" - desc = "" - -/atom/movable/screen/swarmer/Replicate/Click() - if(isswarmer(usr)) - var/mob/living/simple_animal/hostile/swarmer/S = usr - S.CreateSwarmer() - -/atom/movable/screen/swarmer/RepairSelf - icon_state = "ui_self_repair" - name = "Repair self" - desc = "" - -/atom/movable/screen/swarmer/RepairSelf/Click() - if(isswarmer(usr)) - var/mob/living/simple_animal/hostile/swarmer/S = usr - S.RepairSelf() - -/atom/movable/screen/swarmer/ToggleLight - icon_state = "ui_light" - name = "Toggle light" - desc = "" - -/atom/movable/screen/swarmer/ToggleLight/Click() - if(isswarmer(usr)) - var/mob/living/simple_animal/hostile/swarmer/S = usr - S.ToggleLight() - -/atom/movable/screen/swarmer/ContactSwarmers - icon_state = "ui_contact_swarmers" - name = "Contact swarmers" - desc = "" - -/atom/movable/screen/swarmer/ContactSwarmers/Click() - if(isswarmer(usr)) - var/mob/living/simple_animal/hostile/swarmer/S = usr - S.ContactSwarmers() - -/datum/hud/swarmer/New(mob/owner) - ..() - var/atom/movable/screen/using - - using = new /atom/movable/screen/swarmer/FabricateTrap() - using.screen_loc = ui_hand_position(2) - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/swarmer/Barricade() - using.screen_loc = ui_hand_position(1) - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/swarmer/Replicate() - using.screen_loc = ui_zonesel - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/swarmer/RepairSelf() - using.screen_loc = ui_storage1 - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/swarmer/ToggleLight() - using.screen_loc = ui_back - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/swarmer/ContactSwarmers() - using.screen_loc = ui_inventory - using.hud = src - static_inventory += using diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index d31777c9f5..b77a938a50 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -9,14 +9,14 @@ */ /obj/item/proc/melee_attack_chain(mob/user, atom/target, params) if(user.check_arm_grabbed(user.active_hand_index)) - to_chat(user, "I can't move my arm!") + to_chat(user, span_notice("I can't move my arm!")) return if(!user.has_hand_for_held_index(user.active_hand_index, TRUE)) //we obviously have a hadn, but we need to check for fingers/prosthetics - to_chat(user, "I can't move the fingers.") + to_chat(user, span_warning("I can't move the fingers.")) return if(!istype(src, /obj/item/grabbing)) if(HAS_TRAIT(user, TRAIT_CHUNKYFINGERS)) - to_chat(user, "...What?") + to_chat(user, span_warning("...What?")) return if(tool_behaviour && target.tool_act(user, src, tool_behaviour)) return @@ -40,6 +40,9 @@ return TRUE return FALSE //return TRUE to avoid calling attackby after this proc does stuff +/atom/proc/pre_attack_right(atom/A, mob/living/user, params) + return FALSE + // No comment /atom/proc/attackby(obj/item/W, mob/user, params) if(user.used_intent.tranged) @@ -77,7 +80,7 @@ return FALSE if(force && HAS_TRAIT(user, TRAIT_PACIFISM)) - to_chat(user, "I don't want to harm other living beings!") + to_chat(user, span_warning("I don't want to harm other living beings!")) return M.lastattacker = user.real_name @@ -116,7 +119,7 @@ user.do_attack_animation(M, visual_effect_icon = user.used_intent.animname) return if(istype(user.rmb_intent, /datum/rmb_intent/strong)) - user.rogfat_add(10) + user.rogfat_add(7) if(istype(user.rmb_intent, /datum/rmb_intent/swift)) user.rogfat_add(10) if(M.checkdefense(user.used_intent, user)) @@ -319,7 +322,7 @@ if(istype(I, /obj/item/rogueweapon/pick)) var/obj/item/rogueweapon/pick/P = I newforce *= P.pickmult - shake_camera(user, 1, 1) + shake_camera(user, 1, 0.1) miner.mind.adjust_experience(/datum/skill/labor/mining, (miner.STAINT*0.2)) /* * Ill be honest this final thing is extremely confusing. @@ -335,6 +338,8 @@ newforce = (newforce * user.used_intent.damfactor) * dullfactor if(user.used_intent.get_chargetime() && user.client?.chargedprog < 100) newforce = newforce * 0.5 + if(!(user.mobility_flags & MOBILITY_STAND)) + newforce *= 0.5 // newforce is rounded upto the nearest intiger. newforce = round(newforce,1) //This is returning the maximum of the arguments meaning this is to prevent negative values. @@ -358,12 +363,12 @@ verbu = pick(user.used_intent.attack_verb) if(newforce > 1) if(user.rogfat_add(5)) - user.visible_message("[user] [verbu] [src] with [I]!") + user.visible_message(span_danger("[user] [verbu] [src] with [I]!")) else - user.visible_message("[user] [verbu] [src] with [I]!") + user.visible_message(span_warning("[user] [verbu] [src] with [I]!")) newforce = 1 else - user.visible_message("[user] [verbu] [src] with [I]!") + user.visible_message(span_warning("[user] [verbu] [src] with [I]!")) take_damage(newforce, I.damtype, "melee", 1) if(newforce > 1) I.take_damage(1, BRUTE, "melee") @@ -385,12 +390,12 @@ verbu = pick(user.used_intent.attack_verb) if(newforce > 1) if(user.rogfat_add(5)) - user.visible_message("[user] [verbu] [src] with [I]!") + user.visible_message(span_danger("[user] [verbu] [src] with [I]!")) else - user.visible_message("[user] [verbu] [src] with [I]!") + user.visible_message(span_warning("[user] [verbu] [src] with [I]!")) newforce = 1 else - user.visible_message("[user] [verbu] [src] with [I]!") + user.visible_message(span_warning("[user] [verbu] [src] with [I]!")) take_damage(newforce, I.damtype, "melee", 1) if(newforce > 1) @@ -446,6 +451,42 @@ return "body" /obj/item/proc/funny_attack_effects(mob/living/target, mob/living/user, nodmg) + if(is_silver) + if(world.time < src.last_used + 120) + to_chat(user, span_notice("The silver effect is on cooldown.")) + return + + if(ishuman(target) && target.mind) + var/mob/living/carbon/human/s_user = user + var/mob/living/carbon/human/H = target + var/datum/antagonist/werewolf/W = H.mind.has_antag_datum(/datum/antagonist/werewolf/) + var/datum/antagonist/vampirelord/lesser/V = H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser) + var/datum/antagonist/vampirelord/V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) + if(V) + if(V.disguised) + H.visible_message("The silver weapon weakens the curse temporarily!") + to_chat(H, span_userdanger("I'm hit by my BANE!")) + H.apply_status_effect(/datum/status_effect/debuff/silver_curse) + src.last_used = world.time + else + H.visible_message("The silver weapon weakens the curse temporarily!") + to_chat(H, span_userdanger("I'm hit by my BANE!")) + H.apply_status_effect(/datum/status_effect/debuff/silver_curse) + src.last_used = world.time + if(V_lord) + if(V_lord.vamplevel < 4 && !V) + H.visible_message("The silver weapon weakens the curse temporarily!") + to_chat(H, span_userdanger("I'm hit by my BANE!")) + H.apply_status_effect(/datum/status_effect/debuff/silver_curse) + src.last_used = world.time + if(V_lord.vamplevel == 4 && !V) + to_chat(s_user, " The silver weapon fails!") + H.visible_message(H, span_userdanger("This feeble metal can't hurt me, I AM ANCIENT!")) + if(W && W.transformed == TRUE) + H.visible_message("The silver weapon weakens the curse temporarily!") + to_chat(H, span_userdanger("I'm hit by my BANE!")) + H.apply_status_effect(/datum/status_effect/debuff/silver_curse) + src.last_used = world.time return /mob/living/attacked_by(obj/item/I, mob/living/user) diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index f8bc3885d8..cf24237ab8 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -57,38 +57,9 @@ if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_GHOST, user) & COMPONENT_NO_ATTACK_HAND) return TRUE if(user.client) - if(user.gas_scan && atmosanalyzer_scan(user, src)) - return TRUE - else if(IsAdminGhost(user)) - attack_ai(user) - else if(user.client.prefs.inquisitive_ghost) + if(user.client.prefs.inquisitive_ghost) user.examinate(src) return FALSE /mob/living/attack_ghost(mob/dead/observer/user) - if(user.client && user.health_scan) - healthscan(user, src, 1, TRUE) - return ..() - -// --------------------------------------- -// And here are some good things for free: -// Now you can click through portals, wormholes, gateways, and teleporters while observing. -Sayu - -/obj/machinery/gateway/centerstation/attack_ghost(mob/user) - if(awaygate) - user.forceMove(awaygate.loc) - else - to_chat(user, "[src] has no destination.") - return ..() - -/obj/machinery/gateway/centeraway/attack_ghost(mob/user) - if(stationgate) - user.forceMove(stationgate.loc) - else - to_chat(user, "[src] has no destination.") - return ..() - -/obj/machinery/teleport/hub/attack_ghost(mob/user) - if(power_station && power_station.engaged && power_station.teleporter_console && power_station.teleporter_console.target) - user.forceMove(get_turf(power_station.teleporter_console.target)) return ..() diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index ecfc9ccf8b..367d03d6f3 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -79,7 +79,13 @@ to_chat(src, "[pulledby] is restraining my arm!") return - A.attack_right(src, params) + //TODO VANDERLIN: Refactor this into melee_attack_chain_right so that items can more dynamically work with RMB + var/obj/item/held_item = get_active_held_item() + if(held_item) + if(!held_item.pre_attack_right(A, src, params)) + A.attack_right(src, params) + else + A.attack_right(src, params) /mob/living/attack_right(mob/user, params) . = ..() @@ -197,15 +203,19 @@ next_attack_msg.Cut() + var/datum/wound/caused_wound + if(!nodmg) + caused_wound = affecting.bodypart_attacked_by(BCLASS_BITE, dam2do, user, user.zone_selected, crit_message = TRUE) + if(!nodmg) playsound(src, "smallslash", 100, TRUE, -1) if(istype(src, /mob/living/carbon/human)) var/mob/living/carbon/human/H = src if(user.mind && mind) - if(user.mind.has_antag_datum(/datum/antagonist/werewolf)) - if(!src.mind.has_antag_datum(/datum/antagonist/werewolf)) - if(prob(10)) - addtimer(CALLBACK(src, TYPE_PROC_REF(/mob/living/carbon/human, werewolf_infect)), 3 MINUTES) + if(istype(user.dna.species, /datum/species/werewolf)) + caused_wound?.werewolf_infect_attempt() + if(prob(30)) + user.werewolf_feed(src) if(user.mind.has_antag_datum(/datum/antagonist/zombie) && !src.mind.has_antag_datum(/datum/antagonist/zombie)) INVOKE_ASYNC(H, TYPE_PROC_REF(/mob/living/carbon/human, zombie_infect_attempt)) @@ -545,7 +555,7 @@ A.attack_animal(src) /atom/proc/attack_animal(mob/user) - return + SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_ANIMAL, user) /mob/living/RestrainedClickOn(atom/A) return @@ -598,26 +608,6 @@ "I avoid [src]'s bite!", "I hear jaws snapping shut!", COMBAT_MESSAGE_RANGE, src) to_chat(src, "My bite misses [ML]!") -/* - Aliens - Defaults to same as monkey in most places -*/ -/mob/living/carbon/alien/UnarmedAttack(atom/A) - A.attack_alien(src) - -/atom/proc/attack_alien(mob/living/carbon/alien/user) - attack_paw(user) - return - -/mob/living/carbon/alien/RestrainedClickOn(atom/A) - return - -// Babby aliens -/mob/living/carbon/alien/larva/UnarmedAttack(atom/A) - A.attack_larva(src) -/atom/proc/attack_larva(mob/user) - return - /* Slimes diff --git a/code/_onclick/pai.dm b/code/_onclick/pai.dm deleted file mode 100644 index bf027a1887..0000000000 --- a/code/_onclick/pai.dm +++ /dev/null @@ -1,6 +0,0 @@ -/mob/living/silicon/pai/ClickOn(atom/A, params) - ..() - if(aicamera.in_camera_mode) //pAI picture taking - aicamera.camera_mode_off() - aicamera.captureimage(A, usr, null, aicamera.picture_size_x, aicamera.picture_size_y) - return diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index dbe464b04e..633e04d705 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -210,9 +210,6 @@ config_entry_value = list( //DEFAULTS /mob/living/simple_animal = 1, /mob/living/silicon/pai = 1, - /mob/living/carbon/alien/humanoid/hunter = -1, - /mob/living/carbon/alien/humanoid/royal/praetorian = 1, - /mob/living/carbon/alien/humanoid/royal/queen = 3 ) /datum/config_entry/keyed_list/multiplicative_movespeed/ValidateAndSet() @@ -260,8 +257,6 @@ movedelay_type = /mob/living/silicon/robot /datum/config_entry/number/outdated_movedelay/monkey_delay movedelay_type = /mob/living/carbon/monkey -/datum/config_entry/number/outdated_movedelay/alien_delay - movedelay_type = /mob/living/carbon/alien /datum/config_entry/number/outdated_movedelay/slime_delay movedelay_type = /mob/living/simple_animal/slime /datum/config_entry/number/outdated_movedelay/animal_delay diff --git a/code/controllers/subsystem/ai_controller.dm b/code/controllers/subsystem/ai_controller.dm new file mode 100644 index 0000000000..12f22c7baa --- /dev/null +++ b/code/controllers/subsystem/ai_controller.dm @@ -0,0 +1,32 @@ +/// The subsystem used to tick [/datum/ai_controllers] instances. Handling the re-checking of plans. +SUBSYSTEM_DEF(ai_controllers) + name = "AI Controller Ticker" + flags = SS_POST_FIRE_TIMING|SS_BACKGROUND + priority = FIRE_PRIORITY_NPC + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + init_order = INIT_ORDER_AI_CONTROLLERS + wait = 0.5 SECONDS //Plan every half second if required, not great not terrible. + ///List of all ai_subtree singletons, key is the typepath while assigned value is a newly created instance of the typepath. See setup_subtrees() + var/list/ai_subtrees = list() + ///List of all ai controllers currently running + var/list/active_ai_controllers = list() + +/datum/controller/subsystem/ai_controllers/Initialize(timeofday) + setup_subtrees() + return ..() + +/datum/controller/subsystem/ai_controllers/proc/setup_subtrees() + ai_subtrees = list() + for(var/subtree_type in subtypesof(/datum/ai_planning_subtree)) + var/datum/ai_planning_subtree/subtree = new subtree_type + ai_subtrees[subtree_type] = subtree + +/datum/controller/subsystem/ai_controllers/fire(resumed) + for(var/datum/ai_controller/ai_controller as anything in active_ai_controllers) + if(!COOLDOWN_FINISHED(ai_controller, failed_planning_cooldown)) + continue + if(!ai_controller.able_to_plan()) + continue + ai_controller.SelectBehaviors(wait * 0.1) + if(!LAZYLEN(ai_controller.current_behaviors)) //Still no plan + COOLDOWN_START(ai_controller, failed_planning_cooldown, AI_FAILED_PLANNING_COOLDOWN) diff --git a/code/controllers/subsystem/blackbox.dm b/code/controllers/subsystem/blackbox.dm index 79cf65a8b7..aecaaae617 100644 --- a/code/controllers/subsystem/blackbox.dm +++ b/code/controllers/subsystem/blackbox.dm @@ -53,7 +53,7 @@ SUBSYSTEM_DEF(blackbox) "server_ip" = world.internet_address || "0", "server_port" = "[world.port]", "round_id" = GLOB.round_id, - )) + )) query_record_playercount.Execute() qdel(query_record_playercount) @@ -80,11 +80,6 @@ SUBSYSTEM_DEF(blackbox) //Recorded on subsystem shutdown /datum/controller/subsystem/blackbox/proc/FinalFeedback() record_feedback("tally", "ahelp_stats", GLOB.ahelp_tickets.active_tickets.len, "unresolved") - for (var/obj/machinery/telecomms/message_server/MS in GLOB.telecomms_list) - if (MS.pda_msgs.len) - record_feedback("tally", "radio_usage", MS.pda_msgs.len, "PDA") - if (MS.rc_msgs.len) - record_feedback("tally", "radio_usage", MS.rc_msgs.len, "request console") for(var/player_key in GLOB.player_details) var/datum/player_details/PD = GLOB.player_details[player_key] diff --git a/code/controllers/subsystem/communications.dm b/code/controllers/subsystem/communications.dm index 2c8cee1ff5..eb01544ad4 100644 --- a/code/controllers/subsystem/communications.dm +++ b/code/controllers/subsystem/communications.dm @@ -39,19 +39,5 @@ SUBSYSTEM_DEF(communications) user.log_talk(input, LOG_SAY, tag="priority announcement") message_admins("[ADMIN_LOOKUPFLW(user)] has made a priority announcement.") -/datum/controller/subsystem/communications/proc/send_message(datum/comm_message/sending,print = TRUE,unique = FALSE) - for(var/obj/machinery/computer/communications/C in GLOB.machines) - if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z)) - if(unique) - C.add_message(sending) - else //We copy the message for each console, answers and deletions won't be shared - var/datum/comm_message/M = new(sending.title,sending.content,sending.possible_answers.Copy()) - C.add_message(M) - if(print) - var/obj/item/paper/P = new /obj/item/paper(C.loc) - P.name = "paper - '[sending.title]'" - P.info = sending.content - P.update_icon() - #undef COMMUNICATION_COOLDOWN #undef COMMUNICATION_COOLDOWN_AI diff --git a/code/controllers/subsystem/dbcore.dm b/code/controllers/subsystem/dbcore.dm index 0fd7090ff1..7861bb6a7b 100644 --- a/code/controllers/subsystem/dbcore.dm +++ b/code/controllers/subsystem/dbcore.dm @@ -203,7 +203,6 @@ SUBSYSTEM_DEF(dbcore) qdel(query) - /* Takes a list of rows (each row being an associated list of column => value) and inserts them via a single mass query. Rows missing columns present in other rows will resolve to SQL NULL diff --git a/code/controllers/subsystem/familytree.dm b/code/controllers/subsystem/familytree.dm index 50a40c2766..dedf88a88b 100644 --- a/code/controllers/subsystem/familytree.dm +++ b/code/controllers/subsystem/familytree.dm @@ -41,7 +41,7 @@ SUBSYSTEM_DEF(familytree) var/excluded_jobs = list( "Prince", "Princess", - "Queen", + "Consort", "King", "Inquisitor", ) @@ -56,11 +56,11 @@ SUBSYSTEM_DEF(familytree) ) /datum/controller/subsystem/familytree/Initialize() - ruling_family = new /datum/heritage(null, null, /datum/species/human/northern) + ruling_family = new /datum/heritage(majority_species = /datum/species/human/northern) //Blank starter families that we can customize for players. for(var/pioneer_household in preset_family_species) for(var/I = 1 to 2) - families += new /datum/heritage(null, null, pioneer_household) + families += new /datum/heritage(majority_species = pioneer_household) return ..() @@ -241,7 +241,7 @@ SUBSYSTEM_DEF(familytree) if(L == H) continue //They already have a spouse so skip this one. - if(L.spouse_name) + if(L.spouse_mob) continue //True love! They chose you and chose love them! if(H.setspouse == L.real_name && L.setspouse == H.real_name) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 7dd7d1f59c..8752b627a0 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -175,7 +175,7 @@ SUBSYSTEM_DEF(job) // if(istype(job, GetJob(SSjob.overflow_role))) // We don't want to give him assistant, that's boring! // continue - if(job.title in GLOB.noble_positions) //If you want a command position, select it! + if(job.title in GLOB.court_positions) //If you want a command position, select it! continue if(is_banned_from(player.ckey, job.title) || QDELETED(player)) @@ -268,7 +268,7 @@ SUBSYSTEM_DEF(job) //This is basically to ensure that there's atleast a few heads in the round /datum/controller/subsystem/job/proc/FillHeadPosition() for(var/level in level_order) - for(var/noble_position in GLOB.noble_positions) + for(var/noble_position in GLOB.court_positions) var/datum/job/job = GetJob(noble_position) if(!job) continue @@ -286,7 +286,7 @@ SUBSYSTEM_DEF(job) //This proc is called at the start of the level loop of DivideOccupations() and will cause head jobs to be checked before any other jobs of the same level //This is also to ensure we get as many heads as possible /datum/controller/subsystem/job/proc/CheckHeadPositions(level) - for(var/noble_position in GLOB.noble_positions) + for(var/noble_position in GLOB.court_positions) var/datum/job/job = GetJob(noble_position) if(!job) continue @@ -339,13 +339,6 @@ SUBSYSTEM_DEF(job) //Setup new player list and get the jobs list JobDebug("Running DO") - //Holder for Triumvirate is stored in the SSticker, this just processes it - if(SSticker.triai) - for(var/datum/job/ai/A in occupations) - A.spawn_positions = 3 - for(var/obj/effect/landmark/start/ai/secondary/S in GLOB.start_landmarks_list) - S.latejoin_active = TRUE - //Get the players who are ready for(var/i in GLOB.new_player_list) var/mob/dead/new_player/player = i @@ -726,19 +719,6 @@ SUBSYSTEM_DEF(job) J.total_positions = officer_positions J.spawn_positions = officer_positions - //Spawn some extra eqipment lockers if we have more than 5 officers - var/equip_needed = J.total_positions - if(equip_needed < 0) // -1: infinite available slots - equip_needed = 12 - for(var/i=equip_needed-5, i>0, i--) - if(GLOB.secequipment.len) - var/spawnloc = GLOB.secequipment[1] - new /obj/structure/closet/secure_closet/security/sec(spawnloc) - GLOB.secequipment -= spawnloc - else //We ran out of spare locker spawns! - break - - /datum/controller/subsystem/job/proc/LoadJobs() var/jobstext = file2text("[global.config.directory]/jobs.txt") for(var/datum/job/J in occupations) diff --git a/code/controllers/subsystem/machines.dm b/code/controllers/subsystem/machines.dm index d5404121b1..31a9101201 100644 --- a/code/controllers/subsystem/machines.dm +++ b/code/controllers/subsystem/machines.dm @@ -5,32 +5,17 @@ SUBSYSTEM_DEF(machines) // wait = 1 var/list/processing = list() var/list/currentrun = list() - var/list/powernets = list() /datum/controller/subsystem/machines/Initialize() - makepowernets() fire() return ..() -/datum/controller/subsystem/machines/proc/makepowernets() - for(var/datum/powernet/PN in powernets) - qdel(PN) - powernets.Cut() - - for(var/obj/structure/cable/PC in GLOB.cable_list) - if(!PC.powernet) - var/datum/powernet/NewPN = new() - NewPN.add_cable(PC) - propagate_network(PC,PC.powernet) - /datum/controller/subsystem/machines/stat_entry() - ..("M:[processing.len]|PN:[powernets.len]") + ..("M:[processing.len]") /datum/controller/subsystem/machines/fire(resumed = 0) if (!resumed) - for(var/datum/powernet/Powernet in powernets) - Powernet.reset() //reset the power state. src.currentrun = processing.Copy() //cache for sanic speed (lists are references anyways) @@ -48,16 +33,6 @@ SUBSYSTEM_DEF(machines) if (MC_TICK_CHECK) return -/datum/controller/subsystem/machines/proc/setup_template_powernets(list/cables) - for(var/A in cables) - var/obj/structure/cable/PC = A - if(!PC.powernet) - var/datum/powernet/NewPN = new() - NewPN.add_cable(PC) - propagate_network(PC,PC.powernet) - /datum/controller/subsystem/machines/Recover() if (istype(SSmachines.processing)) processing = SSmachines.processing - if (istype(SSmachines.powernets)) - powernets = SSmachines.powernets diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 31cb5b30da..9819414a28 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -241,10 +241,15 @@ SUBSYSTEM_DEF(mapping) otherZ += load_map_config("_maps/map_files/dakkatown/otherz/dakkamountain.json") otherZ += load_map_config("_maps/map_files/dakkatown/otherz/dakkaswamp.json")*/ - //For Rogue map - otherZ += load_map_config("_maps/map_files/roguetown/otherz/smallforest.json") - otherZ += load_map_config("_maps/map_files/roguetown/otherz/smalldecap.json") - otherZ += load_map_config("_maps/map_files/roguetown/otherz/smallswamp.json") + if(config.map_name == "Vanderlin") // Vanderlin + otherZ += load_map_config("_maps/map_files/vanderlin/otherz/vanderlin_forest.json") + otherZ += load_map_config("_maps/map_files/vanderlin/otherz/vanderlin_mountain.json") + otherZ += load_map_config("_maps/map_files/vanderlin/otherz/vanderlin_bog.json") + // Add dungeon map files here later, maybe we can pick from a list of them? + else //For Rogue map + otherZ += load_map_config("_maps/map_files/roguetown/otherz/smallforest.json") + otherZ += load_map_config("_maps/map_files/roguetown/otherz/smalldecap.json") + otherZ += load_map_config("_maps/map_files/roguetown/otherz/smallswamp.json") //For all maps otherZ += load_map_config("_maps/map_files/roguetown/otherz/underworld.json") diff --git a/code/controllers/subsystem/merchant.dm b/code/controllers/subsystem/merchant.dm new file mode 100644 index 0000000000..f5dd377e4f --- /dev/null +++ b/code/controllers/subsystem/merchant.dm @@ -0,0 +1,23 @@ +SUBSYSTEM_DEF(merchant) + name = "Merchant Packs" + wait = 10 + init_order = INIT_ORDER_SHUTTLE + runlevels = RUNLEVEL_SETUP | RUNLEVEL_GAME + flags = SS_NO_FIRE + + var/list/supply_packs = list() + var/list/supply_cats = list() + var/list/shoppinglist = list() + var/list/requestlist = list() + var/list/orderhistory = list() + + +/datum/controller/subsystem/merchant/Initialize(timeofday) + for(var/pack in subtypesof(/datum/supply_pack/rogue)) + var/datum/supply_pack/P = new pack() + if(!P.contains) + continue + supply_packs[P.type] = P + if(!(P.group in supply_cats)) + supply_cats += P.group + return ..() diff --git a/code/controllers/subsystem/minor_mapping.dm b/code/controllers/subsystem/minor_mapping.dm index 371e3bd132..6ffc4696c3 100644 --- a/code/controllers/subsystem/minor_mapping.dm +++ b/code/controllers/subsystem/minor_mapping.dm @@ -46,8 +46,6 @@ SUBSYSTEM_DEF(minor_mapping) for(var/turf/open/floor/plating/T in all_turfs) if(is_blocked_turf(T)) continue - if(locate(/obj/structure/cable) in T) - exposed_wires += T return shuffle(exposed_wires) diff --git a/code/controllers/subsystem/pai.dm b/code/controllers/subsystem/pai.dm deleted file mode 100644 index 56539f2b52..0000000000 --- a/code/controllers/subsystem/pai.dm +++ /dev/null @@ -1,195 +0,0 @@ -SUBSYSTEM_DEF(pai) - name = "pAI" - - flags = SS_NO_INIT|SS_NO_FIRE - - var/list/candidates = list() - var/ghost_spam = FALSE - var/spam_delay = 100 - var/list/pai_card_list = list() - -/datum/controller/subsystem/pai/Topic(href, href_list[]) - if(href_list["download"]) - var/datum/paiCandidate/candidate = locate(href_list["candidate"]) in candidates - var/obj/item/paicard/card = locate(href_list["device"]) in pai_card_list - if(card.pai) - return - if(istype(card, /obj/item/paicard) && istype(candidate, /datum/paiCandidate)) - if(check_ready(candidate) != candidate) - return FALSE - var/mob/living/silicon/pai/pai = new(card) - if(!candidate.name) - pai.name = pick(GLOB.ninja_names) - else - pai.name = candidate.name - pai.real_name = pai.name - pai.key = candidate.key - - card.setPersonality(pai) - - candidates -= candidate - usr << browse(null, "window=findPai") - - if(href_list["new"]) - var/datum/paiCandidate/candidate = locate(href_list["candidate"]) in candidates - var/option = href_list["option"] - var/t = "" - - switch(option) - if("name") - t = input("Enter a name for your pAI", "pAI Name", candidate.name) as text|null - if(t) - candidate.name = copytext(sanitize_name(t),1,MAX_NAME_LEN) - if("desc") - t = input("Enter a description for your pAI", "pAI Description", candidate.description) as message|null - if(t) - candidate.description = copytext(sanitize(t),1,MAX_MESSAGE_LEN) - if("role") - t = input("Enter a role for your pAI", "pAI Role", candidate.role) as text|null - if(t) - candidate.role = copytext(sanitize(t),1,MAX_MESSAGE_LEN) - if("ooc") - t = input("Enter any OOC comments", "pAI OOC Comments", candidate.comments) as message|null - if(t) - candidate.comments = copytext(sanitize(t),1,MAX_MESSAGE_LEN) - if("save") - candidate.savefile_save(usr) - if("load") - candidate.savefile_load(usr) - //In case people have saved unsanitized stuff. - if(candidate.name) - candidate.name = copytext(sanitize(candidate.name),1,MAX_NAME_LEN) - if(candidate.description) - candidate.description = copytext(sanitize(candidate.description),1,MAX_MESSAGE_LEN) - if(candidate.role) - candidate.role = copytext(sanitize(candidate.role),1,MAX_MESSAGE_LEN) - if(candidate.comments) - candidate.comments = copytext(sanitize(candidate.comments),1,MAX_MESSAGE_LEN) - - if("submit") - if(candidate) - candidate.ready = 1 - for(var/obj/item/paicard/p in pai_card_list) - if(!p.pai) - p.alertUpdate() - usr << browse(null, "window=paiRecruit") - return - recruitWindow(usr) - -/datum/controller/subsystem/pai/proc/recruitWindow(mob/M) - var/datum/paiCandidate/candidate - for(var/datum/paiCandidate/c in candidates) - if(c.key == M.key) - candidate = c - if(!candidate) - candidate = new /datum/paiCandidate() - candidate.key = M.key - candidates.Add(candidate) - - - var/dat = "" - dat += {" - - "} - - dat += "

Please configure your pAI personality's options. Remember, what you enter here could determine whether or not the user requesting a personality chooses you!

" - dat += "" - dat += "" - dat += "" - - dat += "" - dat += "" - - dat += "" - dat += "" - - dat += "" - dat += "" - - dat += "
Name:[candidate.name]
\[Edit\]What you plan to call myself. Suggestions: Any character name you would choose for a station character OR an AI.
Description:[candidate.description]
\[Edit\]What sort of pAI you typically play; your mannerisms, your quirks, etc. This can be as sparse or as detailed as you like.
Preferred Role:[candidate.role]
\[Edit\]Do you like to partner with sneaky social ninjas? Like to help security hunt down thugs? Enjoy watching an engineer's back while he saves the station yet again? This doesn't have to be limited to just station jobs. Pretty much any general descriptor for what you'd like to be doing works here.
OOC Comments:[candidate.comments]
\[Edit\]Anything you'd like to address specifically to the player reading this in an OOC manner. \"I prefer more serious RP.\", \"I'm still learning the interface!\", etc. Feel free to leave this blank if you want.
" - - dat += "
" - dat += "

Submit Personality


" - dat += "Save Personality
" - dat += "Load Personality
" - - M << browse(dat, "window=paiRecruit") - -/datum/controller/subsystem/pai/proc/spam_again() - ghost_spam = FALSE - -/datum/controller/subsystem/pai/proc/check_ready(datum/paiCandidate/C) - if(!C.ready) - return FALSE - for(var/mob/dead/observer/O in GLOB.player_list) - if(O.key == C.key) - return C - return FALSE - -/datum/controller/subsystem/pai/proc/findPAI(obj/item/paicard/p, mob/user) - if(!ghost_spam) - ghost_spam = TRUE - for(var/mob/dead/observer/G in GLOB.player_list) - if(!G.key) - continue - if(!(ROLE_PAI in G.client.prefs.be_special)) - continue - to_chat(G, "[user] is requesting a pAI personality! Use the pAI button to submit myself as one.") - addtimer(CALLBACK(src, PROC_REF(spam_again)), spam_delay) - var/list/available = list() - for(var/datum/paiCandidate/c in SSpai.candidates) - available.Add(check_ready(c)) - var/dat = "" - - dat += {" - - "} - dat += "

Requesting AI personalities from central database... If there are no entries, or if a suitable entry is not listed, check again later as more personalities may be added.

" - - dat += "" - - for(var/datum/paiCandidate/c in available) - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - - dat += "
Name:[c.name]
Description:[c.description]
Preferred Role:[c.role]
OOC Comments:[c.comments]
\[Download [c.name]\]
" - - user << browse(dat, "window=findPai") - -/datum/paiCandidate - var/name - var/key - var/description - var/role - var/comments - var/ready = 0 diff --git a/code/controllers/subsystem/particle_weather.dm b/code/controllers/subsystem/particle_weather.dm new file mode 100644 index 0000000000..08a179c2bb --- /dev/null +++ b/code/controllers/subsystem/particle_weather.dm @@ -0,0 +1,88 @@ +GLOBAL_LIST_INIT(vanderlin_weather, list(PARTICLEWEATHER_RAIN)) +SUBSYSTEM_DEF(ParticleWeather) + name = "Particle Weather" + flags = SS_BACKGROUND + wait = 10 + runlevels = RUNLEVEL_GAME + var/list/eligible_weather = list() + var/datum/particle_weather/runningWeather + // var/list/next_hit = list() //Used by barometers to know when the next storm is coming + + var/particles/weather/particleEffect + var/obj/weatherEffect + +/datum/controller/subsystem/ParticleWeather/fire() + // process active weather + if(runningWeather) + if(runningWeather.running) + runningWeather.tick() + for(var/mob/act_on as anything in GLOB.mob_living_list) + runningWeather.try_weather_act(act_on) + for(var/obj/act_on as anything in GLOB.weather_act_upon_list) + runningWeather.weather_obj_act(act_on) + else + // start random weather + var/datum/particle_weather/our_event = pickweight(eligible_weather) //possible_weather + if(our_event) + run_weather(our_event) + + +//This has been mangled - currently only supports 1 weather effect serverwide so I can finish this +/datum/controller/subsystem/ParticleWeather/Initialize(start_timeofday) + for(var/V in subtypesof(/datum/particle_weather)) + var/datum/particle_weather/W = V + var/probability = initial(W.probability) + var/target_trait = initial(W.target_trait) + + // any weather with a probability set may occur at random + if (probability && (target_trait in GLOB.vanderlin_weather)) //TODO VANDERLIN: Map trait this. + LAZYINITLIST(eligible_weather) + eligible_weather[W] = probability + return ..() + +/datum/controller/subsystem/ParticleWeather/proc/run_weather(datum/particle_weather/weather_datum_type, force = 0) + if(runningWeather) + if(force) + runningWeather.end() + else + return + if (istext(weather_datum_type)) + for (var/V in subtypesof(/datum/particle_weather)) + var/datum/particle_weather/W = V + if (initial(W.name) == weather_datum_type) + weather_datum_type = V + break + if (!ispath(weather_datum_type, /datum/particle_weather)) + CRASH("run_weather called with invalid weather_datum_type: [weather_datum_type || "null"]") + + runningWeather = new weather_datum_type() + + if(force) + runningWeather.start() + else + var/randTime = rand(0, 6000) + initial(runningWeather.weather_duration_upper) + addtimer(CALLBACK(runningWeather, /datum/particle_weather/proc/start), randTime, TIMER_UNIQUE|TIMER_STOPPABLE) //Around 0-10 minutes between weathers + + +/datum/controller/subsystem/ParticleWeather/proc/make_eligible(possible_weather) + eligible_weather = possible_weather +// next_hit = null + +/datum/controller/subsystem/ParticleWeather/proc/getweatherEffect() + if(!weatherEffect) + weatherEffect = new /obj() + weatherEffect.particles = particleEffect + weatherEffect.filters += filter(type="alpha", render_source=WEATHER_RENDER_TARGET) + weatherEffect.mouse_opacity = MOUSE_OPACITY_TRANSPARENT + return weatherEffect + +/datum/controller/subsystem/ParticleWeather/proc/SetparticleEffect(particles/P) + particleEffect = P + weatherEffect.particles = particleEffect + +/datum/controller/subsystem/ParticleWeather/proc/stopWeather() + for(var/obj/act_on as anything in GLOB.weather_act_upon_list) + act_on.weather = FALSE + QDEL_NULL(runningWeather) + QDEL_NULL(particleEffect) + diff --git a/code/controllers/subsystem/particle_weather_outdoors.dm b/code/controllers/subsystem/particle_weather_outdoors.dm new file mode 100644 index 0000000000..43bf306401 --- /dev/null +++ b/code/controllers/subsystem/particle_weather_outdoors.dm @@ -0,0 +1,137 @@ +GLOBAL_LIST_EMPTY(SUNLIGHT_QUEUE_WORK) /* turfs to be stateChecked */ +GLOBAL_LIST_EMPTY(SUNLIGHT_QUEUE_UPDATE) /* turfs to have their colors updated via corners (filter out the unroofed dudes) */ +GLOBAL_LIST_EMPTY(SUNLIGHT_QUEUE_CORNER) /* turfs to have their color/lights/etc updated */ + +SUBSYSTEM_DEF(outdoor_effects) + name = "Outdoor Weather Calc" + wait = LIGHTING_INTERVAL + flags = SS_TICKER + init_order = INIT_ORDER_OUTDOOR_EFFECTS + var/list/atom/movable/screen/plane_master/weather_effect/weather_planes_need_vis = list() + + +/datum/controller/subsystem/outdoor_effects/proc/fullPlonk() + for (var/z in SSmapping.levels_by_trait(ZTRAIT_STATION)) + for (var/turf/T in block(locate(1,1,z), locate(world.maxx,world.maxy,z))) + GLOB.SUNLIGHT_QUEUE_WORK += T + +/datum/controller/subsystem/outdoor_effects/Initialize(timeofday) + if(!initialized) + InitializeTurfs() + initialized = TRUE + fire(FALSE, TRUE) + ..() + +/datum/controller/subsystem/outdoor_effects/proc/InitializeTurfs(list/targets) + for (var/z in SSmapping.levels_by_trait(ZTRAIT_STATION)) + for (var/turf/T in block(locate(1,1,z), locate(world.maxx,world.maxy,z))) + GLOB.SUNLIGHT_QUEUE_WORK += T + +/* set sunlight color + add weather effect to clients */ +/datum/controller/subsystem/outdoor_effects/fire(resumed, init_tick_checks) + MC_SPLIT_TICK_INIT(3) + if(!init_tick_checks) + MC_SPLIT_TICK + var/i = 0 + + //Add our weather particle obj to any new weather screens + if(SSParticleWeather.initialized) + for (i in 1 to weather_planes_need_vis.len) + var/atom/movable/screen/plane_master/weather_effect/W = weather_planes_need_vis[i] + if(W) + W.vis_contents = list(SSParticleWeather.getweatherEffect()) + if(init_tick_checks) + CHECK_TICK + else if (MC_TICK_CHECK) + break + if (i) + weather_planes_need_vis.Cut(1, i+1) + i = 0 + + for (i in 1 to GLOB.SUNLIGHT_QUEUE_WORK.len) + var/turf/T = GLOB.SUNLIGHT_QUEUE_WORK[i] + if(T) + T.get_sky_and_weather_states() + if(T.outdoor_effect) + GLOB.SUNLIGHT_QUEUE_UPDATE += T.outdoor_effect + + if(init_tick_checks) + CHECK_TICK + else if (MC_TICK_CHECK) + break + if (i) + GLOB.SUNLIGHT_QUEUE_WORK.Cut(1, i+1) + i = 0 + + + if(!init_tick_checks) + MC_SPLIT_TICK + + for (i in 1 to GLOB.SUNLIGHT_QUEUE_UPDATE.len) + var/atom/movable/outdoor_effect/U = GLOB.SUNLIGHT_QUEUE_UPDATE[i] + if(U) + update_outdoor_effect_overlays(U) + + if(init_tick_checks) + CHECK_TICK + else if (MC_TICK_CHECK) + break + if (i) + GLOB.SUNLIGHT_QUEUE_UPDATE.Cut(1, i+1) + i = 0 + + + if(!init_tick_checks) + MC_SPLIT_TICK + + for (i in 1 to GLOB.SUNLIGHT_QUEUE_CORNER.len) + var/turf/T = GLOB.SUNLIGHT_QUEUE_CORNER[i] + var/atom/movable/outdoor_effect/U = T.outdoor_effect + + /* if we haven't initialized but we are affected, create new and check state */ + if(!U) + T.outdoor_effect = new /atom/movable/outdoor_effect(T) + T.get_sky_and_weather_states() + U = T.outdoor_effect + + /* in case we aren't indoor somehow, wack us into the proc queue, we will be skipped on next indoor check */ + if(U.state != SKY_BLOCKED) + GLOB.SUNLIGHT_QUEUE_UPDATE += T.outdoor_effect + + if(U.state != SKY_BLOCKED) + continue + + //This might need to be run more liberally + update_outdoor_effect_overlays(U) + + + if(init_tick_checks) + CHECK_TICK + else if (MC_TICK_CHECK) + break + + if (i) + GLOB.SUNLIGHT_QUEUE_CORNER.Cut(1, i+1) + i = 0 + + +// Updates overlays and vis_contents for outdoor effects +/datum/controller/subsystem/outdoor_effects/proc/update_outdoor_effect_overlays(atom/movable/outdoor_effect/OE) + + //Get weather overlay if not weatherproof + if(!OE.weatherproof) + get_weather_overlay(OE) + else + cut_weather_overlay(OE) + +//get our weather overlay +/datum/controller/subsystem/outdoor_effects/proc/get_weather_overlay(atom/movable/outdoor_effect/OE) //TODO VANDERLIN: Restore this to 32x48 for some extra + OE.icon = 'icons/effects/weather_overlay.dmi' + OE.icon_state = "weather_overlay" + OE.plane = WEATHER_OVERLAY_PLANE + +//get our weather overlay +/datum/controller/subsystem/outdoor_effects/proc/cut_weather_overlay(atom/movable/outdoor_effect/OE) //TODO VANDERLIN: Restore this to 32x48 for some extra + OE.icon = initial(OE.icon) + OE.icon_state = initial(OE.icon_state) + OE.plane = initial(OE.plane) diff --git a/code/controllers/subsystem/pollution.dm b/code/controllers/subsystem/pollution.dm new file mode 100644 index 0000000000..67d7f9e387 --- /dev/null +++ b/code/controllers/subsystem/pollution.dm @@ -0,0 +1,59 @@ +SUBSYSTEM_DEF(pollution) + name = "Pollution" + init_order = INIT_ORDER_AIR //Before atoms, because the emitters may need to know the singletons + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + wait = 0.5 SECONDS //2 SECONDS -> 0.5 SECONDS + /// Currently active pollution + var/list/active_pollution = list() + /// All pollution in the world + var/list/all_polution = list() + /// Currently processed batch of pollutants + var/list/current_run = list() + /// Already processed pollutants in cell process + var/list/processed_this_run = list() + /// Ticker for dissipation task + var/dissapation_ticker = 0 + /// What's the current task we're doing + var/pollution_task = POLLUTION_TASK_PROCESS + /// Associative list of types of pollutants to their instanced singletons + var/list/singletons = list() + +/datum/controller/subsystem/pollution/stat_entry(msg) + msg += "|AT:[active_pollution.len]|P:[all_polution.len]" + return ..() + +/datum/controller/subsystem/pollution/Initialize() + //Initialize singletons + for(var/type in subtypesof(/datum/pollutant)) + var/datum/pollutant/pollutant_cast = type + if(!length(pollutant_cast::name)) + continue + singletons[type] = new type() + return ..() + +/datum/controller/subsystem/pollution/fire(resumed = FALSE) + var/list/current_run_cache = current_run + if(pollution_task == POLLUTION_TASK_PROCESS) + if(!current_run_cache.len) + current_run_cache = active_pollution.Copy() + processed_this_run.Cut() + while(current_run_cache.len) + var/datum/pollution/pollution = current_run_cache[current_run_cache.len] + current_run_cache.len-- + processed_this_run[pollution] = TRUE + pollution.process_cell() + if(MC_TICK_CHECK) + return + dissapation_ticker++ + if(dissapation_ticker >= TICKS_TO_DISSIPATE * 4) + pollution_task = POLLUTION_TASK_DISSIPATE + dissapation_ticker = 0 + current_run_cache = all_polution.Copy() + if(pollution_task == POLLUTION_TASK_DISSIPATE) + while(current_run_cache.len) + var/datum/pollution/pollution = current_run_cache[current_run_cache.len] + current_run_cache.len-- + pollution.scrub_amount(POLLUTION_HEIGHT_DIVISOR, FALSE, TRUE) + if(MC_TICK_CHECK) + return + pollution_task = POLLUTION_TASK_PROCESS diff --git a/code/controllers/subsystem/processing/ai_avoidance.dm b/code/controllers/subsystem/processing/ai_avoidance.dm new file mode 100644 index 0000000000..2a3fe992f4 --- /dev/null +++ b/code/controllers/subsystem/processing/ai_avoidance.dm @@ -0,0 +1,4 @@ +PROCESSING_SUBSYSTEM_DEF(basic_avoidance) + name = "Basic Avoidance" + flags = SS_NO_INIT + wait = 2 SECONDS diff --git a/code/controllers/subsystem/processing/ai_behaviors.dm b/code/controllers/subsystem/processing/ai_behaviors.dm new file mode 100644 index 0000000000..4eb2bea277 --- /dev/null +++ b/code/controllers/subsystem/processing/ai_behaviors.dm @@ -0,0 +1,18 @@ +/// The subsystem used to tick [/datum/ai_behavior] instances. Handling the individual actions an AI can take like punching someone in the fucking NUTS +PROCESSING_SUBSYSTEM_DEF(ai_behaviors) + name = "AI Behavior Ticker" + flags = SS_POST_FIRE_TIMING|SS_BACKGROUND + priority = FIRE_PRIORITY_NPC_ACTIONS + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + init_order = INIT_ORDER_AI_CONTROLLERS + wait = 1 + ///List of all ai_behavior singletons, key is the typepath while assigned value is a newly created instance of the typepath. See SetupAIBehaviors() + var/list/ai_behaviors +/datum/controller/subsystem/processing/ai_behaviors/Initialize(timeofday) + SetupAIBehaviors() + return ..() +/datum/controller/subsystem/processing/ai_behaviors/proc/SetupAIBehaviors() + ai_behaviors = list() + for(var/behavior_type in subtypesof(/datum/ai_behavior)) + var/datum/ai_behavior/ai_behavior = new behavior_type + ai_behaviors[behavior_type] = ai_behavior diff --git a/code/controllers/subsystem/processing/ai_movement.dm b/code/controllers/subsystem/processing/ai_movement.dm new file mode 100644 index 0000000000..4183c0e158 --- /dev/null +++ b/code/controllers/subsystem/processing/ai_movement.dm @@ -0,0 +1,20 @@ +/// The subsystem used to tick [/datum/ai_movement] instances. Handling the movement of individual AI instances +PROCESSING_SUBSYSTEM_DEF(ai_movement) + name = "AI movement" + flags = SS_KEEP_TIMING|SS_BACKGROUND + priority = FIRE_PRIORITY_NPC_MOVEMENT + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + init_order = INIT_ORDER_AI_MOVEMENT + wait = 1 + ///an assoc list of all ai_movement types. Assoc type to instance + var/list/movement_types + +/datum/controller/subsystem/processing/ai_movement/Initialize(timeofday) + SetupAIMovementInstances() + return ..() + +/datum/controller/subsystem/processing/ai_movement/proc/SetupAIMovementInstances() + movement_types = list() + for(var/key as anything in subtypesof(/datum/ai_movement)) + var/datum/ai_movement/ai_movement = new key + movement_types[key] = ai_movement diff --git a/code/controllers/subsystem/processing/nanites.dm b/code/controllers/subsystem/processing/nanites.dm deleted file mode 100644 index c34e7f7806..0000000000 --- a/code/controllers/subsystem/processing/nanites.dm +++ /dev/null @@ -1,22 +0,0 @@ -PROCESSING_SUBSYSTEM_DEF(nanites) - name = "Nanites" - flags = SS_BACKGROUND|SS_POST_FIRE_TIMING|SS_NO_INIT - wait = 10 - - var/list/datum/nanite_cloud_backup/cloud_backups = list() - var/list/mob/living/nanite_monitored_mobs = list() - var/list/datum/nanite_program/relay/nanite_relays = list() - var/neural_network_count = 0 - -/datum/controller/subsystem/processing/nanites/proc/check_hardware(datum/nanite_cloud_backup/backup) - if(QDELETED(backup.storage) || (backup.storage.stat & (NOPOWER|BROKEN))) - return FALSE - return TRUE - -/datum/controller/subsystem/processing/nanites/proc/get_cloud_backup(cloud_id, force = FALSE) - for(var/I in cloud_backups) - var/datum/nanite_cloud_backup/backup = I - if(!force && !check_hardware(backup)) - return - if(backup.cloud_id == cloud_id) - return backup diff --git a/code/controllers/subsystem/processing/networks.dm b/code/controllers/subsystem/processing/networks.dm deleted file mode 100644 index 03276d5b26..0000000000 --- a/code/controllers/subsystem/processing/networks.dm +++ /dev/null @@ -1,51 +0,0 @@ -PROCESSING_SUBSYSTEM_DEF(networks) - name = "Networks" - priority = FIRE_PRIORITY_NETWORKS - wait = 1 - stat_tag = "NET" - flags = SS_KEEP_TIMING - init_order = INIT_ORDER_NETWORKS - var/datum/ntnet/station/station_network - var/assignment_hardware_id = HID_RESTRICTED_END - var/list/networks_by_id = list() //id = network - var/list/interfaces_by_id = list() //hardware id = component interface - var/resolve_collisions = TRUE - -/datum/controller/subsystem/processing/networks/Initialize() - station_network = new - station_network.register_map_supremecy() - . = ..() - -/datum/controller/subsystem/processing/networks/proc/register_network(datum/ntnet/network) - if(!networks_by_id[network.network_id]) - networks_by_id[network.network_id] = network - return TRUE - return FALSE - -/datum/controller/subsystem/processing/networks/proc/unregister_network(datum/ntnet/network) - networks_by_id -= network.network_id - return TRUE - -/datum/controller/subsystem/processing/networks/proc/register_interface(datum/component/ntnet_interface/D) - if(!interfaces_by_id[D.hardware_id]) - interfaces_by_id[D.hardware_id] = D - return TRUE - return FALSE - -/datum/controller/subsystem/processing/networks/proc/unregister_interface(datum/component/ntnet_interface/D) - interfaces_by_id -= D.hardware_id - return TRUE - -/datum/controller/subsystem/processing/networks/proc/get_next_HID() - var/string = "[num2text(assignment_hardware_id++, 12)]" - return make_address(string) - -/datum/controller/subsystem/processing/networks/proc/make_address(string) - if(!string) - return resolve_collisions? make_address("[num2text(rand(HID_RESTRICTED_END, 999999999), 12)]"):null - var/hex = md5(string) - if(!hex) - return //errored - . = "[copytext(hex, 1, 9)]" //16 ^ 8 possibilities I think. - if(interfaces_by_id[.]) - return resolve_collisions? make_address("[num2text(rand(HID_RESTRICTED_END, 999999999), 12)]"):null diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm deleted file mode 100644 index 1dd3b462c0..0000000000 --- a/code/controllers/subsystem/research.dm +++ /dev/null @@ -1,276 +0,0 @@ - -SUBSYSTEM_DEF(research) - name = "Research" - priority = FIRE_PRIORITY_RESEARCH - wait = 10 - init_order = INIT_ORDER_RESEARCH - //TECHWEB STATIC - var/list/techweb_nodes = list() //associative id = node datum - var/list/techweb_designs = list() //associative id = node datum - var/list/datum/techweb/techwebs = list() - var/datum/techweb/science/science_tech - var/datum/techweb/admin/admin_tech - var/datum/techweb_node/error_node/error_node //These two are what you get if a node/design is deleted and somehow still stored in a console. - var/datum/design/error_design/error_design - - //ERROR LOGGING - var/list/invalid_design_ids = list() //associative id = number of times - var/list/invalid_node_ids = list() //associative id = number of times - var/list/invalid_node_boost = list() //associative id = error message - - var/list/obj/machinery/rnd/server/servers = list() - - var/list/techweb_nodes_starting = list() //associative id = TRUE - var/list/techweb_categories = list() //category name = list(node.id = TRUE) - var/list/techweb_boost_items = list() //associative double-layer path = list(id = list(point_type = point_discount)) - var/list/techweb_nodes_hidden = list() //Node ids that should be hidden by default. - var/list/techweb_point_items = list( //path = list(point type = value) - /obj/item/assembly/signaler/anomaly = list(TECHWEB_POINT_TYPE_GENERIC = 10000) - ) - var/list/errored_datums = list() - var/list/point_types = list() //typecache style type = TRUE list - //---------------------------------------------- - var/list/single_server_income = list(TECHWEB_POINT_TYPE_GENERIC = 54.3) - var/multiserver_calculation = FALSE - var/last_income - //^^^^^^^^ ALL OF THESE ARE PER SECOND! ^^^^^^^^ - - //Aiming for 1.5 hours to max R&D - //[88nodes * 5000points/node] / [1.5hr * 90min/hr * 60s/min] - //Around 450000 points max??? - -/datum/controller/subsystem/research/Initialize() - point_types = TECHWEB_POINT_TYPE_LIST_ASSOCIATIVE_NAMES - initialize_all_techweb_designs() - initialize_all_techweb_nodes() - science_tech = new /datum/techweb/science - admin_tech = new /datum/techweb/admin - autosort_categories() - error_design = new - error_node = new - return ..() - -/datum/controller/subsystem/research/fire() - var/list/bitcoins = list() - if(multiserver_calculation) - var/eff = calculate_server_coefficient() - for(var/obj/machinery/rnd/server/miner in servers) - var/list/result = (miner.mine()) //SLAVE AWAY, SLAVE. - for(var/i in result) - result[i] *= eff - bitcoins[i] = bitcoins[i]? bitcoins[i] + result[i] : result[i] - else - for(var/obj/machinery/rnd/server/miner in servers) - if(miner.working) - bitcoins = single_server_income.Copy() - break //Just need one to work. - if (!isnull(last_income)) - var/income_time_difference = world.time - last_income - science_tech.last_bitcoins = bitcoins // Doesn't take tick drift into account - for(var/i in bitcoins) - bitcoins[i] *= income_time_difference / 10 - science_tech.add_point_list(bitcoins) - last_income = world.time - -/datum/controller/subsystem/research/proc/calculate_server_coefficient() //Diminishing returns. - var/amt = servers.len - if(!amt) - return 0 - var/coeff = 100 - coeff = sqrt(coeff / amt) - return coeff - -/datum/controller/subsystem/research/proc/autosort_categories() - for(var/i in techweb_nodes) - var/datum/techweb_node/I = techweb_nodes[i] - if(techweb_categories[I.category]) - techweb_categories[I.category][I.id] = TRUE - else - techweb_categories[I.category] = list(I.id = TRUE) - -/datum/controller/subsystem/research/proc/techweb_node_by_id(id) - return techweb_nodes[id] || error_node - -/datum/controller/subsystem/research/proc/techweb_design_by_id(id) - return techweb_designs[id] || error_design - -/datum/controller/subsystem/research/proc/on_design_deletion(datum/design/D) - for(var/i in techweb_nodes) - var/datum/techweb_node/TN = techwebs[i] - TN.on_design_deletion(TN) - for(var/i in techwebs) - var/datum/techweb/T = i - T.recalculate_nodes(TRUE) - -/datum/controller/subsystem/research/proc/on_node_deletion(datum/techweb_node/TN) - for(var/i in techweb_nodes) - var/datum/techweb_node/TN2 = techwebs[i] - TN2.on_node_deletion(TN) - for(var/i in techwebs) - var/datum/techweb/T = i - T.recalculate_nodes(TRUE) - -/datum/controller/subsystem/research/proc/initialize_all_techweb_nodes(clearall = FALSE) - if(islist(techweb_nodes) && clearall) - QDEL_LIST(techweb_nodes) - if(islist(techweb_nodes_starting && clearall)) - techweb_nodes_starting.Cut() - var/list/returned = list() - for(var/path in subtypesof(/datum/techweb_node)) - var/datum/techweb_node/TN = path - if(isnull(initial(TN.id))) - continue - TN = new path - if(returned[initial(TN.id)]) - stack_trace("WARNING: Techweb node ID clash with ID [initial(TN.id)] detected! Path: [path]") - errored_datums[TN] = initial(TN.id) - continue - returned[initial(TN.id)] = TN - if(TN.starting_node) - techweb_nodes_starting[TN.id] = TRUE - for(var/id in techweb_nodes) - var/datum/techweb_node/TN = techweb_nodes[id] - TN.Initialize() - techweb_nodes = returned - if (!verify_techweb_nodes()) //Verify all nodes have ids and such. - stack_trace("Invalid techweb nodes detected") - calculate_techweb_nodes() - calculate_techweb_boost_list() - if (!verify_techweb_nodes()) //Verify nodes and designs have been crosslinked properly. - CRASH("Invalid techweb nodes detected") - -/datum/controller/subsystem/research/proc/initialize_all_techweb_designs(clearall = FALSE) - if(islist(techweb_designs) && clearall) - QDEL_LIST(techweb_designs) - var/list/returned = list() - for(var/path in subtypesof(/datum/design)) - var/datum/design/DN = path - if(isnull(initial(DN.id))) - stack_trace("WARNING: Design with null ID detected. Build path: [initial(DN.build_path)]") - continue - else if(initial(DN.id) == DESIGN_ID_IGNORE) - continue - DN = new path - if(returned[initial(DN.id)]) - stack_trace("WARNING: Design ID clash with ID [initial(DN.id)] detected! Path: [path]") - errored_datums[DN] = initial(DN.id) - continue - DN.InitializeMaterials() //Initialize the materials in the design - returned[initial(DN.id)] = DN - techweb_designs = returned - verify_techweb_designs() - - -/datum/controller/subsystem/research/proc/verify_techweb_nodes() - . = TRUE - for(var/n in techweb_nodes) - var/datum/techweb_node/N = techweb_nodes[n] - if(!istype(N)) - WARNING("Invalid research node with ID [n] detected and removed.") - techweb_nodes -= n - research_node_id_error(n) - . = FALSE - for(var/p in N.prereq_ids) - var/datum/techweb_node/P = techweb_nodes[p] - if(!istype(P)) - WARNING("Invalid research prerequisite node with ID [p] detected in node [N.display_name]\[[N.id]\] removed.") - N.prereq_ids -= p - research_node_id_error(p) - . = FALSE - for(var/d in N.design_ids) - var/datum/design/D = techweb_designs[d] - if(!istype(D)) - WARNING("Invalid research design with ID [d] detected in node [N.display_name]\[[N.id]\] removed.") - N.design_ids -= d - design_id_error(d) - . = FALSE - for(var/u in N.unlock_ids) - var/datum/techweb_node/U = techweb_nodes[u] - if(!istype(U)) - WARNING("Invalid research unlock node with ID [u] detected in node [N.display_name]\[[N.id]\] removed.") - N.unlock_ids -= u - research_node_id_error(u) - . = FALSE - for(var/p in N.boost_item_paths) - if(!ispath(p)) - N.boost_item_paths -= p - WARNING("[p] is not a valid path.") - node_boost_error(N.id, "[p] is not a valid path.") - . = FALSE - var/list/points = N.boost_item_paths[p] - if(islist(points)) - for(var/i in points) - if(!isnum(points[i])) - WARNING("[points[i]] is not a valid number.") - node_boost_error(N.id, "[points[i]] is not a valid number.") - . = FALSE - else if(!point_types[i]) - WARNING("[i] is not a valid point type.") - node_boost_error(N.id, "[i] is not a valid point type.") - . = FALSE - else if(!isnull(points)) - N.boost_item_paths -= p - node_boost_error(N.id, "No valid list.") - WARNING("No valid list.") - . = FALSE - CHECK_TICK - -/datum/controller/subsystem/research/proc/verify_techweb_designs() - for(var/d in techweb_designs) - var/datum/design/D = techweb_designs[d] - if(!istype(D)) - stack_trace("WARNING: Invalid research design with ID [d] detected and removed.") - techweb_designs -= d - CHECK_TICK - -/datum/controller/subsystem/research/proc/research_node_id_error(id) - if(invalid_node_ids[id]) - invalid_node_ids[id]++ - else - invalid_node_ids[id] = 1 - -/datum/controller/subsystem/research/proc/design_id_error(id) - if(invalid_design_ids[id]) - invalid_design_ids[id]++ - else - invalid_design_ids[id] = 1 - -/datum/controller/subsystem/research/proc/calculate_techweb_nodes() - for(var/design_id in techweb_designs) - var/datum/design/D = techweb_designs[design_id] - D.unlocked_by.Cut() - for(var/node_id in techweb_nodes) - var/datum/techweb_node/node = techweb_nodes[node_id] - node.unlock_ids = list() - for(var/i in node.design_ids) - var/datum/design/D = techweb_designs[i] - node.design_ids[i] = TRUE - D.unlocked_by += node.id - if(node.hidden) - techweb_nodes_hidden[node.id] = TRUE - CHECK_TICK - generate_techweb_unlock_linking() - -/datum/controller/subsystem/research/proc/generate_techweb_unlock_linking() - for(var/node_id in techweb_nodes) //Clear all unlock links to avoid duplication. - var/datum/techweb_node/node = techweb_nodes[node_id] - node.unlock_ids = list() - for(var/node_id in techweb_nodes) - var/datum/techweb_node/node = techweb_nodes[node_id] - for(var/prereq_id in node.prereq_ids) - var/datum/techweb_node/prereq_node = techweb_node_by_id(prereq_id) - prereq_node.unlock_ids[node.id] = node - -/datum/controller/subsystem/research/proc/calculate_techweb_boost_list(clearall = FALSE) - if(clearall) - techweb_boost_items = list() - for(var/node_id in techweb_nodes) - var/datum/techweb_node/node = techweb_nodes[node_id] - for(var/path in node.boost_item_paths) - if(!ispath(path)) - continue - if(length(techweb_boost_items[path])) - techweb_boost_items[path][node.id] = node.boost_item_paths[path] - else - techweb_boost_items[path] = list(node.id = node.boost_item_paths[path]) - CHECK_TICK diff --git a/code/controllers/subsystem/rogue/devotion.dm b/code/controllers/subsystem/rogue/devotion.dm index 5097fb8309..b621d6dbdd 100644 --- a/code/controllers/subsystem/rogue/devotion.dm +++ b/code/controllers/subsystem/rogue/devotion.dm @@ -29,7 +29,16 @@ else return FALSE -/datum/devotion/cleric_holder/proc/update_devotion(dev_amt, prog_amt) +// This is a proc to deduct a devotion cost out of spells when cast. +// We do this to avoid using negative values, which BYOND calculates in a really stupid way if we do the math wrong. +/datum/devotion/cleric_holder/proc/consume_devotion(amt as num) + devotion -= amt + var/mob/living/carbon/human/C = holder_mob + var/amt2raise = C.STAINT*2 + progression += amt2raise + +// This spell is used to ADD devotion to the player, through prayer or job initialization. +/datum/devotion/cleric_holder/proc/update_devotion(dev_amt as num, prog_amt) var/datum/patron/P = patron devotion += dev_amt //Max devotion limit @@ -132,20 +141,20 @@ // Generation Procs /mob/living/carbon/human/proc/clericpray() - set name = "Give Prayer" + set name = "Start praying" set category = "Cleric" var/datum/devotion/cleric_holder/C = src.cleric var/prayersesh = 0 - visible_message("[src] kneels their head in prayer to the Gods.", "I kneel my head in prayer to [patron.name]") + visible_message("[src] kneels their head in prayer.", "I kneel my head in prayer to [patron.name]") for(var/i in 1 to 20) if(do_after(src, 30)) if(C.devotion >= C.max_devotion) to_chat(src, "I have reached the limit of my devotion...") break - C.update_devotion(2, 2) - prayersesh += 2 + C.update_devotion(5, 5) + prayersesh += 5 else visible_message("[src] concludes their prayer.", "I conclude my prayer.") to_chat(src, "I gained [prayersesh] devotion!") diff --git a/code/controllers/subsystem/rogue/triumphs/triumph_buy_datums/character/pick_any_class.dm b/code/controllers/subsystem/rogue/triumphs/triumph_buy_datums/character/pick_any_class.dm index 985bea07ed..11e7704f25 100644 --- a/code/controllers/subsystem/rogue/triumphs/triumph_buy_datums/character/pick_any_class.dm +++ b/code/controllers/subsystem/rogue/triumphs/triumph_buy_datums/character/pick_any_class.dm @@ -56,6 +56,14 @@ continue if(CTAG_MERCENARY in CHECKS.category_tags) continue + if(CTAG_TOWNER in CHECKS.category_tags) + continue + if(CTAG_GARRISON in CHECKS.category_tags) + continue + if(CTAG_ADEPT in CHECKS.category_tags) + continue + if(CTAG_CONSORT in CHECKS.category_tags) + continue possible_classes += CHECKS var/datum/advclass/C = input(H.client, "What is my class?", "Adventure") as null|anything in possible_classes diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index 6e0f12eb38..8ebd7d191b 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -31,27 +31,15 @@ SUBSYSTEM_DEF(shuttle) var/emergencyNoEscape var/emergencyNoRecall = FALSE var/list/hostileEnvironments = list() //Things blocking escape shuttle from leaving - var/list/tradeBlockade = list() //Things blocking cargo from leaving. - var/supplyBlocked = FALSE - //supply shuttle stuff - var/obj/docking_port/mobile/supply/supply var/ordernum = 1 //order number given to next order var/points = 5000 //number of trade-points we have var/centcom_message = "" //Remarks from CentCom on how well you checked the last order. var/list/discoveredPlants = list() //Typepaths for unusual plants we've already sent CentCom, associated with their potencies - var/list/supply_packs = list() - var/list/supply_cats = list() - var/list/shoppinglist = list() - var/list/requestlist = list() - var/list/orderhistory = list() - var/list/hidden_shuttle_turfs = list() //all turfs hidden from navigation computers associated with a list containing the image hiding them and the type of the turf they are pretending to be var/list/hidden_shuttle_turf_images = list() //only the images from the above list - var/datum/round_event/shuttle_loan/shuttle_loan - var/shuttle_purchased = FALSE //If the station has purchased a replacement escape shuttle this round var/list/shuttle_purchase_requirements_met = list() //For keeping track of ingame events that would unlock new shuttles, such as defeating a boss or discovering a secret item @@ -69,24 +57,7 @@ SUBSYSTEM_DEF(shuttle) /datum/controller/subsystem/shuttle/Initialize(timeofday) ordernum = rand(1, 9000) - for(var/pack in subtypesof(/datum/supply_pack/rogue)) - var/datum/supply_pack/P = new pack() - if(!P.contains) - continue - supply_packs[P.type] = P - if(!(P.group in supply_cats)) - supply_cats += P.group - initial_load() - - if(!arrivals) - WARNING("No /obj/docking_port/mobile/arrivals placed on the map!") - if(!emergency) - WARNING("No /obj/docking_port/mobile/emergency placed on the map!") - if(!backup_shuttle) - WARNING("No /obj/docking_port/mobile/emergency/backup placed on the map!") - if(!supply) - WARNING("No /obj/docking_port/mobile/supply placed on the map!") return ..() /datum/controller/subsystem/shuttle/proc/initial_load() @@ -116,7 +87,6 @@ SUBSYSTEM_DEF(shuttle) var/not_in_use = (!T.get_docked()) if(idle && not_centcom_evac && not_in_use) qdel(T, force=TRUE) - CheckAutoEvac() if(!SSmapping.clearing_reserved_turfs) while(transit_requesters.len) @@ -132,33 +102,6 @@ SUBSYSTEM_DEF(shuttle) if(MC_TICK_CHECK) break -/datum/controller/subsystem/shuttle/proc/CheckAutoEvac() - if(emergencyNoEscape || emergencyNoRecall || !emergency || !SSticker.HasRoundStarted()) - return - - var/threshold = CONFIG_GET(number/emergency_shuttle_autocall_threshold) - if(!threshold) - return - - var/alive = 0 - for(var/I in GLOB.player_list) - var/mob/M = I - if(M.stat != DEAD) - ++alive - - var/total = GLOB.joined_player_list.len - if(total <= 0) - return //no players no autoevac - - if(alive / total <= threshold) - var/msg = "Automatically dispatching shuttle due to crew death." - message_admins(msg) - log_game("[msg] Alive: [alive], Roundstart: [total], Threshold: [threshold]") - emergencyNoRecall = TRUE - priority_announce("Catastrophic casualties detected: crisis shuttle protocols activated - jamming recall signals across all frequencies.") - if(emergency.timeLeft(1) > emergencyCallTime * 0.4) - emergency.request(null, set_coefficient = 0.4) - /datum/controller/subsystem/shuttle/proc/block_recall(lockout_timer) emergencyNoRecall = TRUE addtimer(CALLBACK(src, PROC_REF(unblock_recall)), lockout_timer) @@ -182,15 +125,6 @@ SUBSYSTEM_DEF(shuttle) if(!emergency) WARNING("requestEvac(): There is no emergency shuttle, but the \ shuttle was called. Using the backup shuttle instead.") - if(!backup_shuttle) - CRASH("requestEvac(): There is no emergency shuttle, \ - or backup shuttle! The game will be unresolvable. This is \ - possibly a mapping error, more likely a bug with the shuttle \ - manipulation system, or badminry. It is possible to manually \ - resolve this problem by loading an emergency shuttle template \ - manually, and then calling register() on the mobile docking port. \ - Good luck.") - emergency = backup_shuttle var/srd = CONFIG_GET(number/shuttle_refuel_delay) if(world.time - SSticker.round_start_time < srd) // to_chat(user, "There is no response.") @@ -225,12 +159,7 @@ SUBSYSTEM_DEF(shuttle) var/area/signal_origin = get_area(user) // var/emergency_reason = "\nNature of emergency:\n\n[call_reason]" var/emergency_reason = "yea" - var/security_num = seclevel2num(get_security_level()) - switch(security_num) - if(SEC_LEVEL_RED,SEC_LEVEL_DELTA) - emergency.request(null, signal_origin, html_decode(emergency_reason), 1) //There is a serious threat we gotta move no time to give them five minutes. - else - emergency.request(null, signal_origin, html_decode(emergency_reason), 0) + emergency.request(null, signal_origin, html_decode(emergency_reason), 1) //There is a serious threat we gotta move no time to give them five minutes. var/datum/radio_frequency/frequency = SSradio.return_frequency(FREQ_STATUS_DISPLAYS) @@ -256,25 +185,6 @@ SUBSYSTEM_DEF(shuttle) if(!admiral_message) admiral_message = pick(GLOB.admiral_messages) - var/intercepttext = "Nanotrasen Update: Request For Shuttle.
\ - To whom it may concern:

\ - We have taken note of the situation upon [station_name()] and have come to the \ - conclusion that it does not warrant the abandonment of the station.
\ - If you do not agree with our opinion we suggest that you open a direct \ - line with us and explain the nature of your crisis.

\ - This message has been automatically generated based upon readings from long \ - range diagnostic tools. To assure the quality of your request every finalized report \ - is reviewed by an on-call rear admiral.
\ - Rear Admiral's Notes: \ - [admiral_message]" - print_command_report(intercepttext, announce = TRUE) - -// Called when an emergency shuttle mobile docking port is -// destroyed, which will only happen with admin intervention -/datum/controller/subsystem/shuttle/proc/emergencyDeregister() - // When a new emergency shuttle is created, it will override the - // backup shuttle. - src.emergency = src.backup_shuttle /datum/controller/subsystem/shuttle/proc/cancelEvac(mob/user) if(canRecall()) @@ -287,47 +197,9 @@ SUBSYSTEM_DEF(shuttle) /datum/controller/subsystem/shuttle/proc/canRecall() if(!emergency || emergency.mode != SHUTTLE_CALL || emergencyNoRecall || SSticker.mode.name == "meteor") return - var/security_num = seclevel2num(get_security_level()) - switch(security_num) - if(SEC_LEVEL_GREEN) - if(emergency.timeLeft(1) < emergencyCallTime) - return - if(SEC_LEVEL_BLUE) - if(emergency.timeLeft(1) < emergencyCallTime * 0.5) - return - else - if(emergency.timeLeft(1) < emergencyCallTime * 0.25) - return - return 1 - -/datum/controller/subsystem/shuttle/proc/autoEvac() - if (!SSticker.IsRoundInProgress()) + if(emergency.timeLeft(1) < emergencyCallTime) return - - var/callShuttle = 1 - - for(var/thing in GLOB.shuttle_caller_list) - if(isAI(thing)) - var/mob/living/silicon/ai/AI = thing - if(AI.deployed_shell && !AI.deployed_shell.client) - continue - if(AI.stat || !AI.client) - continue - else if(istype(thing, /obj/machinery/computer/communications)) - var/obj/machinery/computer/communications/C = thing - if(C.stat & BROKEN) - continue - - var/turf/T = get_turf(thing) - if(T && is_station_level(T.z)) - callShuttle = 0 - break - - if(callShuttle) - if(EMERGENCY_IDLE_OR_RECALLED) - emergency.request(null, set_coefficient = 2.5) - log_game("There is no means of calling the shuttle anymore. Shuttle automatically called.") - message_admins("All the communications consoles were destroyed and all AIs are inactive. Shuttle called.") + return 1 /datum/controller/subsystem/shuttle/proc/registerHostileEnvironment(datum/bad) hostileEnvironments[bad] = TRUE @@ -337,30 +209,6 @@ SUBSYSTEM_DEF(shuttle) hostileEnvironments -= bad checkHostileEnvironment() - -/datum/controller/subsystem/shuttle/proc/registerTradeBlockade(datum/bad) - tradeBlockade[bad] = TRUE - checkTradeBlockade() - -/datum/controller/subsystem/shuttle/proc/clearTradeBlockade(datum/bad) - tradeBlockade -= bad - checkTradeBlockade() - - -/datum/controller/subsystem/shuttle/proc/checkTradeBlockade() - for(var/datum/d in tradeBlockade) - if(!istype(d) || QDELETED(d)) - tradeBlockade -= d - supplyBlocked = tradeBlockade.len - - if(supplyBlocked && (supply.mode == SHUTTLE_IGNITING)) - supply.mode = SHUTTLE_STRANDED - supply.timer = null - //Make all cargo consoles speak up - if(!supplyBlocked && (supply.mode == SHUTTLE_STRANDED)) - supply.mode = SHUTTLE_DOCKED - //Make all cargo consoles speak up - /datum/controller/subsystem/shuttle/proc/checkHostileEnvironment() for(var/datum/d in hostileEnvironments) if(!istype(d) || QDELETED(d)) @@ -372,7 +220,6 @@ SUBSYSTEM_DEF(shuttle) if(emergencyNoEscape && (emergency.mode == SHUTTLE_IGNITING)) emergency.mode = SHUTTLE_STRANDED emergency.timer = null - emergency.sound_played = FALSE priority_announce("Hostile environment detected. \ Departure has been postponed indefinitely pending \ conflict resolution.", null, 'sound/blank.ogg', "Priority") @@ -454,16 +301,7 @@ SUBSYSTEM_DEF(shuttle) [transit_height] in height. The travel dir is [travel_dir]." */ - var/transit_path = /turf/open/space/transit - switch(travel_dir) - if(NORTH) - transit_path = /turf/open/space/transit/north - if(SOUTH) - transit_path = /turf/open/space/transit/south - if(EAST) - transit_path = /turf/open/space/transit/east - if(WEST) - transit_path = /turf/open/space/transit/west + var/transit_path = /turf/open/water/river var/datum/turf_reservation/proposal = SSmapping.RequestBlockReservation(transit_width, transit_height, null, /datum/turf_reservation/transit, transit_path) @@ -526,8 +364,6 @@ SUBSYSTEM_DEF(shuttle) emergency = SSshuttle.emergency if (istype(SSshuttle.arrivals)) arrivals = SSshuttle.arrivals - if (istype(SSshuttle.backup_shuttle)) - backup_shuttle = SSshuttle.backup_shuttle if (istype(SSshuttle.emergencyLastCallLoc)) emergencyLastCallLoc = SSshuttle.emergencyLastCallLoc @@ -535,22 +371,9 @@ SUBSYSTEM_DEF(shuttle) if (istype(SSshuttle.hostileEnvironments)) hostileEnvironments = SSshuttle.hostileEnvironments - if (istype(SSshuttle.supply)) - supply = SSshuttle.supply - if (istype(SSshuttle.discoveredPlants)) discoveredPlants = SSshuttle.discoveredPlants - if (istype(SSshuttle.shoppinglist)) - shoppinglist = SSshuttle.shoppinglist - if (istype(SSshuttle.requestlist)) - requestlist = SSshuttle.requestlist - if (istype(SSshuttle.orderhistory)) - orderhistory = SSshuttle.orderhistory - - if (istype(SSshuttle.shuttle_loan)) - shuttle_loan = SSshuttle.shuttle_loan - if (istype(SSshuttle.shuttle_purchase_requirements_met)) shuttle_purchase_requirements_met = SSshuttle.shuttle_purchase_requirements_met @@ -639,10 +462,6 @@ SUBSYSTEM_DEF(shuttle) hidden_shuttle_turf_images -= remove_images hidden_shuttle_turf_images += add_images - for(var/V in GLOB.navigation_computers) - var/obj/machinery/computer/camera_advanced/shuttle_docker/C = V - C.update_hidden_docking_ports(remove_images, add_images) - QDEL_LIST(remove_images) @@ -901,12 +720,7 @@ SUBSYSTEM_DEF(shuttle) preview_template = S user.forceMove(get_turf(preview_shuttle)) if("load") - if(existing_shuttle == backup_shuttle) - // TODO make the load button disabled - WARNING("The shuttle that the selected shuttle will replace \ - is the backup shuttle. Backup shuttle is required to be \ - intact for round sanity.") - else if(S) + if(S) . = TRUE // If successful, returns the mobile docking port var/obj/docking_port/mobile/mdp = action_load(S) diff --git a/code/controllers/subsystem/sounds.dm b/code/controllers/subsystem/sounds.dm new file mode 100644 index 0000000000..fa9ba3c472 --- /dev/null +++ b/code/controllers/subsystem/sounds.dm @@ -0,0 +1,135 @@ +#define DATUMLESS "NO_DATUM" + +SUBSYSTEM_DEF(sounds) + name = "Sounds" + flags = SS_NO_FIRE + init_order = INIT_ORDER_SOUNDS + var/static/using_channels_max = CHANNEL_HIGHEST_AVAILABLE //BYOND max channels + /// Amount of channels to reserve for random usage rather than reservations being allowed to reserve all channels. Also a nice safeguard for when someone screws up. + var/static/random_channels_min = 50 + + // Hey uh these two needs to be initialized fast because the whole "things get deleted before init" thing. + /// Assoc list, `"[channel]" =` either the datum using it or TRUE for an unsafe-reserved (datumless reservation) channel + var/list/using_channels + /// Assoc list datum = list(channel1, channel2, ...) for what channels something reserved. + var/list/using_channels_by_datum + // Special datastructure for fast channel management + /// List of all channels as numbers + var/list/channel_list + /// Associative list of all reserved channels associated to their position. `"[channel_number]" =` index as number + var/list/reserved_channels + /// lower iteration position - Incremented and looped to get "random" sound channels for normal sounds. The channel at this index is returned when asking for a random channel. + var/channel_random_low + /// higher reserve position - decremented and incremented to reserve sound channels, anything above this is reserved. The channel at this index is the highest unreserved channel. + var/channel_reserve_high + +/datum/controller/subsystem/sounds/Initialize() + setup_available_channels() + return ..() + +/datum/controller/subsystem/sounds/proc/setup_available_channels() + channel_list = list() + reserved_channels = list() + using_channels = list() + using_channels_by_datum = list() + for(var/i in 1 to using_channels_max) + channel_list += i + channel_random_low = 1 + channel_reserve_high = length(channel_list) + +/// Removes a channel from using list. +/datum/controller/subsystem/sounds/proc/free_sound_channel(channel) + var/text_channel = num2text(channel) + var/using = using_channels[text_channel] + using_channels -= text_channel + if(using != TRUE) // datum channel + using_channels_by_datum[using] -= channel + if(!length(using_channels_by_datum[using])) + using_channels_by_datum -= using + free_channel(channel) + +/// Frees all the channels a datum is using. +/datum/controller/subsystem/sounds/proc/free_datum_channels(datum/D) + var/list/L = using_channels_by_datum[D] + if(!L) + return + for(var/channel in L) + using_channels -= num2text(channel) + free_channel(channel) + using_channels_by_datum -= D + +/// Frees all datumless channels +/datum/controller/subsystem/sounds/proc/free_datumless_channels() + free_datum_channels(DATUMLESS) + +/// NO AUTOMATIC CLEANUP - If you use this, you better manually free it later! Returns an integer for channel. +/datum/controller/subsystem/sounds/proc/reserve_sound_channel_datumless() + . = reserve_channel() + if(!.) //oh no.. + return FALSE + var/text_channel = num2text(.) + using_channels[text_channel] = DATUMLESS + LAZYINITLIST(using_channels_by_datum[DATUMLESS]) + using_channels_by_datum[DATUMLESS] += . + +/// Reserves a channel for a datum. Automatic cleanup only when the datum is deleted. Returns an integer for channel. +/datum/controller/subsystem/sounds/proc/reserve_sound_channel(datum/D) + if(!D) //i don't like typechecks but someone will fuck it up + CRASH("Attempted to reserve sound channel without datum using the managed proc.") + .= reserve_channel() + if(!.) + return FALSE + var/text_channel = num2text(.) + using_channels[text_channel] = D + LAZYINITLIST(using_channels_by_datum[D]) + using_channels_by_datum[D] += . + +/** + * Reserves a channel and updates the datastructure. Private proc. + */ +/datum/controller/subsystem/sounds/proc/reserve_channel() + PRIVATE_PROC(TRUE) + if(channel_reserve_high <= random_channels_min) // out of channels + return + var/channel = channel_list[channel_reserve_high] + reserved_channels[num2text(channel)] = channel_reserve_high-- + return channel + +/** + * Frees a channel and updates the datastructure. Private proc. + */ +/datum/controller/subsystem/sounds/proc/free_channel(number) + PRIVATE_PROC(TRUE) + var/text_channel = num2text(number) + var/index = reserved_channels[text_channel] + if(!index) + CRASH("Attempted to (internally) free a channel that wasn't reserved.") + reserved_channels -= text_channel + // push reserve index up, which makes it now on a channel that is reserved + channel_reserve_high++ + // swap the reserved channel wtih the unreserved channel so the reserve index is now on an unoccupied channel and the freed channel is next to be used. + channel_list.Swap(channel_reserve_high, index) + // now, an existing reserved channel will likely (exception: unreserving last reserved channel) be at index + // get it, and update position. + var/text_reserved = num2text(channel_list[index]) + if(!reserved_channels[text_reserved]) //if it isn't already reserved make sure we don't accidently mistakenly put it on reserved list! + return + reserved_channels[text_reserved] = index + +/// Random available channel, returns text. +/datum/controller/subsystem/sounds/proc/random_available_channel_text() + if(channel_random_low > channel_reserve_high) + channel_random_low = 1 + . = "[channel_list[channel_random_low++]]" + +/// Random available channel, returns number +/datum/controller/subsystem/sounds/proc/random_available_channel() + if(channel_random_low > channel_reserve_high) + channel_random_low = 1 + . = channel_list[channel_random_low++] + +/// How many channels we have left. +/datum/controller/subsystem/sounds/proc/available_channels_left() + return length(channel_list) - random_channels_min + +#undef DATUMLESS diff --git a/code/controllers/subsystem/sun.dm b/code/controllers/subsystem/sun.dm index 9854ae69c8..304e9d1eae 100644 --- a/code/controllers/subsystem/sun.dm +++ b/code/controllers/subsystem/sun.dm @@ -34,14 +34,6 @@ SUBSYSTEM_DEF(sun) dx = s / abs(s) dy = c / abs(s) - //now tell the solar control computers to update their status and linked devices - for(var/obj/machinery/power/solar_control/SC in solars) - if(!SC.powernet) - solars.Remove(SC) - continue - SC.update() - - diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 8278ec87e0..4c353ab746 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -36,6 +36,7 @@ SUBSYSTEM_DEF(ticker) var/timeLeft //pregame timer var/start_at + var/timeDelayAdd = 120 //576000 dusk //376000 day var/gametime_offset = 288001 //Deciseconds to add to world.time for station time. @@ -58,6 +59,9 @@ SUBSYSTEM_DEF(ticker) var/roundend_check_paused = FALSE + var/amt_ready = 0 // Total count of players that are ready + var/amt_ready_needed = 1 // Total count of players that are needed ready to start the game + var/round_start_time = 0 var/round_start_irl = 0 var/list/round_start_events @@ -211,14 +215,8 @@ SUBSYSTEM_DEF(ticker) if(timeLeft <= 0) if(!checkreqroles()) -/* if(failedstarts >= 13) - current_state = GAME_STATE_SETTING_UP - Master.SetRunLevel(RUNLEVEL_SETUP) - if(start_immediately) - fire() - else*/ current_state = GAME_STATE_STARTUP - start_at = world.time + 600 + start_at = world.time + timeDelayAdd timeLeft = null Master.SetRunLevel(RUNLEVEL_LOBBY) else @@ -232,7 +230,7 @@ SUBSYSTEM_DEF(ticker) if(!setup()) //setup failed current_state = GAME_STATE_STARTUP - start_at = world.time + 600 + start_at = world.time + timeDelayAdd timeLeft = null Master.SetRunLevel(RUNLEVEL_LOBBY) @@ -262,7 +260,7 @@ SUBSYSTEM_DEF(ticker) /datum/controller/subsystem/ticker/proc/checkreqroles() var/list/readied_jobs = list() - var/list/required_jobs = list("Queen","King") + var/list/required_jobs = list("King", "Hand") #ifdef DEPLOY_TEST required_jobs = list() readied_jobs = list("King") @@ -281,38 +279,38 @@ SUBSYSTEM_DEF(ticker) to_chat(player, "You cannot be [V] and thus are not considered.") continue readied_jobs.Add(V) - /*if(("King" in readied_jobs) || ("Queen" in readied_jobs)) + if(("King" in readied_jobs) || ("Hand" in readied_jobs)) if("King" in readied_jobs) rulertype = "King" else - rulertype = "Queen" - else + rulertype = "Hand" +/* else var/list/stuffy = list("Set a Ruler to 'high' in your class preferences to start the game!", "PLAY Ruler NOW!", "A Ruler is required to start.", "Pray for a Ruler.", "One day, there will be a Ruler.", "Just try playing Ruler.", "If you don't play Ruler, the game will never start.", "We need at least one Ruler to start the game.", "We're waiting for you to pick Ruler to start.", "Still no Ruler is readied..", "I'm going to lose my mind if we don't get a Ruler readied up.","No. The game will not start because there is no Ruler.","What's the point of ROGUETOWN without a Ruler?") to_chat(world, "[pick(stuffy)]") - return FALSE - */ + return FALSE */ +/* #ifdef DEPLOY_TEST - var/amt_ready = 999 -#else - var/amt_ready = 0 + amt_ready = 999 #endif - +*/ #ifdef ROGUEWORLD amt_ready = 999 #endif +#ifndef UNIT_TESTS for(var/mob/dead/new_player/player in GLOB.player_list) if(!player) continue if(player.ready == PLAYER_READY_TO_PLAY) amt_ready++ - if(amt_ready < 0) - to_chat(world, "[amt_ready]/2 players ready.") -/* failedstarts++ - if(failedstarts > 7) - to_chat(world, "[failedstarts]/13") - if(failedstarts >= 13) + if(amt_ready < amt_ready_needed) + to_chat(world, "Not enough players to start the game") + return FALSE +#endif + + /* failedstarts++ + if(failedstarts >= 13) // this stuff is for rougewar, a team deathmatch mode I guess. to_chat(world, "Starting ROGUEFIGHT...") var/icon/ikon var/file_path = "icons/roguefight_title.dmi" @@ -322,7 +320,6 @@ SUBSYSTEM_DEF(ticker) SStitle.splash_turf.icon = ikon for(var/mob/dead/new_player/player in GLOB.player_list) player.playsound_local(player, 'sound/music/wartitle.ogg', 100, TRUE)*/ - return FALSE job_change_locked = TRUE return TRUE @@ -570,12 +567,12 @@ SUBSYSTEM_DEF(ticker) if(K.job == "King") rulermob = K return - if("Queen") - for(var/mob/living/carbon/human/Q in world) - if(istype(Q, /mob/living/carbon/human/dummy)) + if("Hand") + for(var/mob/living/carbon/human/H in world) + if(istype(H, /mob/living/carbon/human/dummy)) continue - if(Q.job == "Queen") - rulermob = Q + if(H.job == "Hand") + rulermob = H return */ /datum/controller/subsystem/ticker/proc/collect_minds() @@ -873,7 +870,6 @@ SUBSYSTEM_DEF(ticker) world.Reboot() /datum/controller/subsystem/ticker/Shutdown() - gather_newscaster() //called here so we ensure the log is created even upon admin reboot save_admin_data() update_everything_flag_in_db() diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm index 4ad0a988f8..9dd63e8585 100644 --- a/code/controllers/subsystem/traumas.dm +++ b/code/controllers/subsystem/traumas.dm @@ -12,65 +12,38 @@ SUBSYSTEM_DEF(traumas) /datum/controller/subsystem/traumas/Initialize() //phobia types is to pull from randomly for brain traumas, e.g. conspiracies is for special assignment only - phobia_types = sortList(list("spiders", "space", "security", "clowns", "greytide", "lizards", - "skeletons", "snakes", "robots", "doctors", "authority", "the supernatural", - "aliens", "strangers", "birds", "falling", "anime")) + phobia_types = sortList(list("spiders", "lizards", + "skeletons", "snakes", + "strangers", "birds", "falling", "anime")) phobia_words = list( "spiders" = strings(PHOBIA_FILE, "spiders"), - "space" = strings(PHOBIA_FILE, "space"), - "security" = strings(PHOBIA_FILE, "security"), - "clowns" = strings(PHOBIA_FILE, "clowns"), - "greytide" = strings(PHOBIA_FILE, "greytide"), "lizards" = strings(PHOBIA_FILE, "lizards"), "skeletons" = strings(PHOBIA_FILE, "skeletons"), "snakes" = strings(PHOBIA_FILE, "snakes"), - "robots" = strings(PHOBIA_FILE, "robots"), - "doctors" = strings(PHOBIA_FILE, "doctors"), - "authority" = strings(PHOBIA_FILE, "authority"), - "the supernatural" = strings(PHOBIA_FILE, "the supernatural"), - "aliens" = strings(PHOBIA_FILE, "aliens"), "strangers" = strings(PHOBIA_FILE, "strangers"), "conspiracies" = strings(PHOBIA_FILE, "conspiracies"), "birds" = strings(PHOBIA_FILE, "birds"), "falling" = strings(PHOBIA_FILE, "falling"), - "anime" = strings(PHOBIA_FILE, "anime") ) phobia_mobs = list( "spiders" = typecacheof(list(/mob/living/simple_animal/hostile/poison/giant_spider)), - "security" = typecacheof(list(/mob/living/simple_animal/bot/secbot)), + "lizards" = typecacheof(list(/mob/living/simple_animal/hostile/lizard)), - "skeletons" = typecacheof(list(/mob/living/simple_animal/hostile/skeleton)), + "skeletons" = typecacheof(list(/mob/living/simple_animal/hostile/rogue/skeleton)), "snakes" = typecacheof(list(/mob/living/simple_animal/hostile/retaliate/poison/snake)), - "robots" = typecacheof(list(/mob/living/silicon/robot, /mob/living/silicon/ai, - /mob/living/simple_animal/drone, /mob/living/simple_animal/bot, /mob/living/simple_animal/hostile/swarmer)), - "doctors" = typecacheof(list(/mob/living/simple_animal/bot/medbot)), "the supernatural" = typecacheof(list(/mob/living/simple_animal/hostile/construct, /mob/living/simple_animal/revenant, /mob/living/simple_animal/shade)), - "aliens" = typecacheof(list(/mob/living/carbon/alien, /mob/living/simple_animal/slime)), - "conspiracies" = typecacheof(list(/mob/living/simple_animal/bot/secbot, /mob/living/simple_animal/drone, + "conspiracies" = typecacheof(list(/mob/living/simple_animal/drone, /mob/living/simple_animal/pet/penguin)), "birds" = typecacheof(list(/mob/living/simple_animal/parrot, /mob/living/simple_animal/chick, /mob/living/simple_animal/chicken, - /mob/living/simple_animal/pet/penguin)), - "anime" = typecacheof(list(/mob/living/simple_animal/hostile/guardian)) + /mob/living/simple_animal/pet/penguin)) ) phobia_objs = list( "snakes" = typecacheof(list(/obj/item/rod_of_asclepius)), "spiders" = typecacheof(list(/obj/structure/spider)), - "security" = typecacheof(list(/obj/item/clothing/under/rank/security/officer, /obj/item/clothing/under/rank/security/warden, - /obj/item/clothing/under/rank/security/head_of_security, /obj/item/clothing/under/rank/security/detective, - /obj/item/melee/baton, /obj/item/gun/energy/taser, /obj/item/restraints/handcuffs, - /obj/machinery/door/airlock/security, /obj/effect/hallucination/simple/securitron)), - - "clowns" = typecacheof(list(/obj/item/clothing/under/rank/civilian/clown, /obj/item/clothing/shoes/clown_shoes, - /obj/item/clothing/mask/gas/clown_hat, /obj/item/instrument/bikehorn, - /obj/item/pda/clown, /obj/item/grown/bananapeel, /obj/item/reagent_containers/food/snacks/cheesiehonkers, - /obj/item/trash/cheesie)), - - "greytide" = typecacheof(list(/obj/item/clothing/under/color/grey, /obj/item/melee/baton/cattleprod, - /obj/item/twohanded/spear, /obj/item/clothing/mask/gas)), "lizards" = typecacheof(list(/obj/item/toy/plush/lizardplushie, /obj/item/reagent_containers/food/snacks/kebab/tail, /obj/item/organ/tail/lizard, /obj/item/reagent_containers/food/drinks/bottle/lizardwine)), @@ -78,87 +51,24 @@ SUBSYSTEM_DEF(traumas) "skeletons" = typecacheof(list(/obj/item/organ/tongue/bone, /obj/item/clothing/suit/armor/bone, /obj/item/stack/sheet/bone, /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton, /obj/effect/decal/remains/human)), - "conspiracies" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/security/head_of_security, - /obj/item/clothing/under/rank/engineering/chief_engineer, /obj/item/clothing/under/rank/medical/chief_medical_officer, - /obj/item/clothing/under/rank/civilian/head_of_personnel, /obj/item/clothing/under/rank/rnd/research_director, - /obj/item/clothing/under/rank/security/head_of_security/grey, /obj/item/clothing/under/rank/security/head_of_security/alt, - /obj/item/clothing/under/rank/rnd/research_director/alt, /obj/item/clothing/under/rank/rnd/research_director/turtleneck, - /obj/item/clothing/under/rank/captain/parade, /obj/item/clothing/under/rank/security/head_of_security/parade, /obj/item/clothing/under/rank/security/head_of_security/parade/female, - /obj/item/clothing/head/helmet/abductor, /obj/item/clothing/suit/armor/abductor/vest, /obj/item/abductor/baton, - /obj/item/storage/belt/military/abductor, /obj/item/gun/energy/alien, /obj/item/abductor/silencer, - /obj/item/abductor/gizmo, /obj/item/clothing/under/rank/centcom/officer, - /obj/item/clothing/suit/space/hardsuit/ert, /obj/item/clothing/suit/space/hardsuit/ert/sec, - /obj/item/clothing/suit/space/hardsuit/ert/engi, /obj/item/clothing/suit/space/hardsuit/ert/med, - /obj/item/clothing/suit/space/hardsuit/deathsquad, /obj/item/clothing/head/helmet/space/hardsuit/deathsquad, - /obj/machinery/door/airlock/centcom)), - "robots" = typecacheof(list(/obj/machinery/computer/upload, /obj/item/aiModule/, /obj/machinery/recharge_station, - /obj/item/aicard, /obj/item/deactivated_swarmer, /obj/effect/mob_spawn/swarmer)), - - "doctors" = typecacheof(list(/obj/item/clothing/under/rank/medical, - /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/pill/, /obj/item/reagent_containers/hypospray, - /obj/item/storage/firstaid, /obj/item/storage/pill_bottle, /obj/item/healthanalyzer, - /obj/structure/sign/departments/medbay, /obj/machinery/door/airlock/medical, /obj/machinery/sleeper, /obj/machinery/stasis, - /obj/machinery/dna_scannernew, /obj/machinery/atmospherics/components/unary/cryo_cell, /obj/item/surgical_drapes, - /obj/item/retractor, /obj/item/hemostat, /obj/item/cautery, /obj/item/surgicaldrill, /obj/item/scalpel, /obj/item/circular_saw, - /obj/item/clothing/suit/bio_suit/plaguedoctorsuit, /obj/item/clothing/head/plaguedoctorhat, /obj/item/clothing/mask/gas/plaguedoctor)), - - "authority" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/civilian/head_of_personnel, - /obj/item/clothing/under/rank/security/head_of_security, /obj/item/clothing/under/rank/rnd/research_director, - /obj/item/clothing/under/rank/medical/chief_medical_officer, /obj/item/clothing/under/rank/engineering/chief_engineer, - /obj/item/clothing/under/rank/centcom/officer, /obj/item/clothing/under/rank/centcom/commander, - /obj/item/melee/classic_baton/telescopic, /obj/item/card/id/silver, /obj/item/card/id/gold, - /obj/item/card/id/captains_spare, /obj/item/card/id/centcom, /obj/machinery/door/airlock/command)), - - "the supernatural" = typecacheof(list(/obj/structure/destructible/cult, /obj/item/tome, - /obj/item/melee/cultblade, /obj/item/twohanded/required/cult_bastard, - /obj/item/restraints/legcuffs/bola/cult, /obj/item/clothing/suit/space/hardsuit/cult, - /obj/item/clothing/suit/hooded/cultrobes, /obj/item/clothing/head/hooded/cult_hoodie, /obj/effect/rune, - /obj/item/stack/sheet/runed_metal, /obj/machinery/door/airlock/cult, /obj/singularity/narsie, - /obj/item/soulstone, - /obj/item/clothing/suit/wizrobe, /obj/item/clothing/head/wizard, /obj/item/spellbook, /obj/item/staff, - /obj/item/clothing/suit/space/hardsuit/shielded/wizard, /obj/item/clothing/suit/space/hardsuit/wizard, - /obj/item/gun/magic/staff, /obj/item/gun/magic/wand, - /obj/item/nullrod, /obj/item/clothing/under/rank/civilian/chaplain)), - "aliens" = typecacheof(list(/obj/item/clothing/mask/facehugger, /obj/item/organ/body_egg/alien_embryo, - /obj/structure/alien, /obj/item/toy/toy_xeno, - /obj/item/clothing/suit/armor/abductor, /obj/item/abductor, /obj/item/gun/energy/alien, - /obj/item/abductor/baton, /obj/item/radio/headset/abductor, /obj/item/scalpel/alien, /obj/item/hemostat/alien, - /obj/item/retractor/alien, /obj/item/circular_saw/alien, /obj/item/surgicaldrill/alien, /obj/item/cautery/alien, - /obj/item/clothing/head/helmet/abductor, /obj/structure/bed/abductor, /obj/structure/table_frame/abductor, - /obj/structure/table/abductor, /obj/structure/table/optable/abductor, /obj/structure/closet/abductor, /obj/item/organ/heart/gland, - /obj/machinery/abductor, /obj/item/crowbar/abductor, /obj/item/screwdriver/abductor, /obj/item/weldingtool/abductor, - /obj/item/wirecutters/abductor, /obj/item/wrench/abductor, /obj/item/stack/sheet/mineral/abductor)), "birds" = typecacheof(list(/obj/item/clothing/mask/gas/plaguedoctor, /obj/item/reagent_containers/food/snacks/cracker, /obj/item/clothing/suit/chickensuit, /obj/item/clothing/head/chicken, /obj/item/clothing/suit/toggle/owlwings, /obj/item/clothing/under/costume/owl, /obj/item/clothing/mask/gas/owl_mask, - /obj/item/clothing/under/costume/griffin, /obj/item/clothing/shoes/griffin, /obj/item/clothing/head/griffin, - /obj/item/clothing/head/helmet/space/freedom, /obj/item/clothing/suit/space/freedom)), + /obj/item/clothing/under/costume/griffin, /obj/item/clothing/shoes/griffin, /obj/item/clothing/head/griffin)), - "anime" = typecacheof(list(/obj/item/clothing/under/costume/schoolgirl, /obj/item/katana, /obj/item/reagent_containers/food/snacks/sashimi, /obj/item/reagent_containers/food/snacks/chawanmushi, - /obj/item/reagent_containers/food/drinks/bottle/sake, /obj/item/throwing_star, /obj/item/clothing/head/kitty/genuine, /obj/item/clothing/suit/space/space_ninja, - /obj/item/clothing/mask/gas/space_ninja, /obj/item/clothing/shoes/space_ninja, /obj/item/clothing/gloves/space_ninja, /obj/item/twohanded/vibro_weapon, - /obj/item/nullrod/scythe/vibro, /obj/item/energy_katana, /obj/item/toy/katana, /obj/item/nullrod/claymore/katana, /obj/structure/window/paperframe, /obj/structure/mineral_door/paperframe)) ) phobia_turfs = list( - "space" = typecacheof(list(/turf/open/space, /turf/open/floor/holofloor/space, /turf/open/floor/fakespace)), "the supernatural" = typecacheof(list(/turf/open/floor/plasteel/cult, /turf/closed/wall/mineral/cult)), - "aliens" = typecacheof(list(/turf/open/floor/plating/abductor, /turf/open/floor/plating/abductor2, - /turf/open/floor/mineral/abductor, /turf/closed/wall/mineral/abductor)), "falling" = typecacheof(list(/turf/open/chasm, /turf/open/floor/fakepit)) ) phobia_species = list( "lizards" = typecacheof(list(/datum/species/lizard)), "skeletons" = typecacheof(list(/datum/species/skeleton, /datum/species/plasmaman)), - "conspiracies" = typecacheof(list(/datum/species/abductor, /datum/species/lizard, /datum/species/synth)), - "robots" = typecacheof(list(/datum/species/android)), "the supernatural" = typecacheof(list(/datum/species/golem/runic)), - "aliens" = typecacheof(list(/datum/species/abductor, /datum/species/jelly, /datum/species/pod, - /datum/species/shadow)), - "anime" = typecacheof(list(/datum/species/human/felinid)) ) return ..() diff --git a/code/controllers/subsystem/weather.dm b/code/controllers/subsystem/weather.dm index 2f7d2d0a71..57d2efc28c 100644 --- a/code/controllers/subsystem/weather.dm +++ b/code/controllers/subsystem/weather.dm @@ -50,14 +50,14 @@ SUBSYSTEM_DEF(weather) return // start random weather on relevant levels -/* for(var/z in eligible_zlevels) + for(var/z in eligible_zlevels) var/possible_weather = eligible_zlevels[z] var/datum/weather/W = pickweight(possible_weather) run_weather(W, list(text2num(z))) eligible_zlevels -= z var/randTime = rand(3000, 6000) addtimer(CALLBACK(src, PROC_REF(make_eligible), z, possible_weather), randTime + initial(W.weather_duration_upper), TIMER_UNIQUE) //Around 5-10 minutes between weathers - next_hit_by_zlevel["[z]"] = world.time + randTime + initial(W.telegraph_duration)*/ + next_hit_by_zlevel["[z]"] = world.time + randTime + initial(W.telegraph_duration) /datum/controller/subsystem/weather/Initialize(start_timeofday) for(var/V in subtypesof(/datum/weather)) @@ -108,10 +108,6 @@ SUBSYSTEM_DEF(weather) /atom/proc/weather_trigger(W) return -/mob/living/weather_trigger(W) - if(W==/datum/weather/rain) - START_PROCESSING(SSweather,src) - /turf/proc/trigger_weather(atom/A) if(A) var/area/AR = get_area(src) diff --git a/code/datums/action.dm b/code/datums/action.dm index 1c52dac1a2..b8d4ae3b2f 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -262,14 +262,6 @@ if(istype(H)) H.toggle_welding_screen(owner) -/datum/action/item_action/toggle_welding_screen/plasmaman - name = "Toggle Welding Screen" - -/datum/action/item_action/toggle_welding_screen/plasmaman/Trigger() - var/obj/item/clothing/head/helmet/space/plasmaman/H = target - if(istype(H)) - H.toggle_welding_screen(owner) - /datum/action/item_action/toggle_headphones name = "Toggle Headphones" desc = "" @@ -279,26 +271,6 @@ if(istype(H)) H.toggle(owner) -/datum/action/item_action/toggle_unfriendly_fire - name = "Toggle Friendly Fire \[ON\]" - desc = "" - icon_icon = 'icons/mob/actions/actions_items.dmi' - button_icon_state = "vortex_ff_on" - -/datum/action/item_action/toggle_unfriendly_fire/Trigger() - if(..()) - UpdateButtonIcon() - -/datum/action/item_action/toggle_unfriendly_fire/UpdateButtonIcon(status_only = FALSE, force) - if(istype(target, /obj/item/hierophant_club)) - var/obj/item/hierophant_club/H = target - if(H.friendly_fire_check) - button_icon_state = "vortex_ff_off" - name = "Toggle Friendly Fire \[OFF\]" - else - button_icon_state = "vortex_ff_on" - name = "Toggle Friendly Fire \[ON\]" - ..() /datum/action/item_action/synthswitch name = "Change Synthesizer Instrument" @@ -310,18 +282,6 @@ return synth.selectInstrument() return ..() -/datum/action/item_action/vortex_recall - name = "Vortex Recall" - desc = "" - icon_icon = 'icons/mob/actions/actions_items.dmi' - button_icon_state = "vortex_recall" - -/datum/action/item_action/vortex_recall/IsAvailable() - if(istype(target, /obj/item/hierophant_club)) - var/obj/item/hierophant_club/H = target - if(H.teleporting) - return 0 - return ..() /datum/action/item_action/toggle_helmet_flashlight name = "Toggle Helmet Flashlight" @@ -380,18 +340,6 @@ /datum/action/item_action/toggle_helmet name = "Toggle Helmet" -/datum/action/item_action/toggle_jetpack - name = "Toggle Jetpack" - -/datum/action/item_action/jetpack_stabilization - name = "Toggle Jetpack Stabilization" - -/datum/action/item_action/jetpack_stabilization/IsAvailable() - var/obj/item/tank/jetpack/J = target - if(!istype(J) || !J.on) - return 0 - return ..() - /datum/action/item_action/hands_free check_flags = AB_CHECK_CONSCIOUS @@ -457,38 +405,6 @@ name = "Use [target.name]" button.name = name -/datum/action/item_action/cult_dagger - name = "Draw Blood Rune" - desc = "" - icon_icon = 'icons/mob/actions/actions_cult.dmi' - button_icon_state = "draw" - buttontooltipstyle = "cult" - background_icon_state = "bg_demon" - -/datum/action/item_action/cult_dagger/Grant(mob/M) - if(iscultist(M)) - ..() - button.screen_loc = "6:157,4:-2" - button.moved = "6:157,4:-2" - else - Remove(owner) - -/datum/action/item_action/cult_dagger/Trigger() - for(var/obj/item/H in owner.held_items) //In case we were already holding another dagger - if(istype(H, /obj/item/melee/cultblade/dagger)) - H.attack_self(owner) - return - var/obj/item/I = target - if(owner.can_equip(I, SLOT_HANDS)) - owner.temporarilyRemoveItemFromInventory(I) - owner.put_in_hands(I) - I.attack_self(owner) - else - if (owner.get_num_arms() <= 0) - to_chat(owner, "I dont have any usable hands!") - else - to_chat(owner, "My hands are full!") - ///MGS BOX! /datum/action/item_action/agent_box name = "Deploy Box" @@ -566,16 +482,6 @@ return S.can_cast(owner) return FALSE -/datum/action/spell_action/alien - -/datum/action/spell_action/alien/IsAvailable() - if(!target) - return FALSE - var/obj/effect/proc_holder/alien/ab = target - if(owner) - return ab.cost_check(ab.check_turf,owner,1) - return FALSE - //Preset for general and toggled actions diff --git a/code/datums/ai/_ai_behaviour.dm b/code/datums/ai/_ai_behaviour.dm new file mode 100644 index 0000000000..0f936431c0 --- /dev/null +++ b/code/datums/ai/_ai_behaviour.dm @@ -0,0 +1,37 @@ +///Abstract class for an action an AI can take, can range from movement to grabbing a nearby weapon. +/datum/ai_behavior + ///What distance you need to be from the target to perform the action + var/required_distance = 1 + ///Flags for extra behavior + var/behavior_flags = NONE + ///Cooldown between actions performances + var/action_cooldown = 0 + +/// Called by the ai controller when first being added. Additional arguments depend on the behavior type. +/// Return FALSE to cancel +/datum/ai_behavior/proc/setup(datum/ai_controller/controller, ...) + return TRUE + +///Called by the AI controller when this action is performed +/datum/ai_behavior/proc/perform(delta_time, datum/ai_controller/controller, ...) + controller.behavior_cooldowns[src] = world.time + action_cooldown + return + +///Called when the action is finished. This needs the same args as perform besides the default ones +/datum/ai_behavior/proc/finish_action(datum/ai_controller/controller, succeeded, ...) + LAZYREMOVE(controller.current_behaviors, src) + controller.behavior_args -= type + if(behavior_flags & AI_BEHAVIOR_REQUIRE_MOVEMENT) //If this was a movement task, reset our movement target. + if(!(behavior_flags & AI_BEHAVIOR_KEEP_MOVE_TARGET_ON_FINISH)) + clear_movement_target(controller) + if(!(behavior_flags & AI_BEHAVIOR_KEEP_MOVING_TOWARDS_TARGET_ON_FINISH)) + controller.ai_movement.stop_moving_towards(controller) + +/// Helper proc to ensure consistency in setting the source of the movement target +/datum/ai_behavior/proc/set_movement_target(datum/ai_controller/controller, atom/target, datum/ai_movement/new_movement) + controller.set_movement_target(type, target, new_movement) +/// Clear the controller's movement target only if it was us who last set it +/datum/ai_behavior/proc/clear_movement_target(datum/ai_controller/controller) + if (controller.movement_target_source != type) + return + controller.set_movement_target(type, null) diff --git a/code/datums/ai/_ai_controller.dm b/code/datums/ai/_ai_controller.dm new file mode 100644 index 0000000000..9b572569b3 --- /dev/null +++ b/code/datums/ai/_ai_controller.dm @@ -0,0 +1,604 @@ +/* +AI controllers are a datumized form of AI that simulates the input a player would otherwise give to a atom. What this means is that these datums +have ways of interacting with a specific atom and control it. They posses a blackboard with the information the AI knows and has, and will plan behaviors it will try to execute. +*/ +/datum/ai_controller + ///The atom this controller is controlling + var/atom/pawn + /** + * This is a list of variables the AI uses and can be mutated by actions. + * + * When an action is performed you pass this list and any relevant keys for the variables it can mutate. + * + * DO NOT set values in the blackboard directly, and especially not if you're adding a datum reference to this! + * Use the setters, this is important for reference handing. + */ + var/list/blackboard = list() + ///Bitfield of traits for this AI to handle extra behavior + var/ai_traits + ///Current actions planned to be performed by the AI in the upcoming plan + var/list/planned_behaviors + ///Current actions being performed by the AI. + var/list/current_behaviors + ///Current actions and their respective last time ran as an assoc list. + var/list/behavior_cooldowns = list() + ///The idle behavior this AI performs when it has no actions. + var/datum/idle_behavior/idle_behavior = null + ///Current status of AI (OFF/ON/IDLE) + var/ai_status + ///Current movement target of the AI, generally set by decision making. + var/atom/current_movement_target + ///Identifier for what last touched our movement target, so it can be cleared conditionally + var/movement_target_source + ///Stored arguments for behaviors given during their initial creation + var/list/behavior_args = list() + ///Tracks recent pathing attempts, if we fail too many in a row we fail our current plans. + var/pathing_attempts + ///Can the AI remain in control if there is a client? + var/continue_processing_when_client = FALSE + ///distance to give up on target + var/max_target_distance = 14 + ///Cooldown for new plans, to prevent AI from going nuts if it can't think of new plans and looping on end + COOLDOWN_DECLARE(failed_planning_cooldown) + ///All subtrees this AI has available, will run them in order, so make sure they're in the order you want them to run. On initialization of this type, it will start as a typepath(s) and get converted to references of ai_subtrees found in SSai_controllers when init_subtrees() is called + var/list/planning_subtrees + // Movement related things here + ///Reference to the movement datum we use. Is a type on initialize but becomes a ref afterwards. + var/datum/ai_movement/ai_movement = /datum/ai_movement/dumb + ///Cooldown until next movement + COOLDOWN_DECLARE(movement_cooldown) + ///Delay between movements. This is on the controller so we can keep the movement datum singleton + var/movement_delay = 0.1 SECONDS + ///A list for the path we're currently following, if we're using AStar pathing + var/list/movement_path + ///Cooldown for JPS movement, how often we're allowed to try making a new path + COOLDOWN_DECLARE(repath_cooldown) + ///AI paused time + var/paused_until = 0 + + var/failed_sneak_check = 0 + + +/datum/ai_controller/New(atom/new_pawn) + change_ai_movement_type(ai_movement) + init_subtrees() + + if(idle_behavior) + idle_behavior = new idle_behavior() + + PossessPawn(new_pawn) + +/datum/ai_controller/Destroy(force, ...) + set_ai_status(AI_STATUS_OFF) + UnpossessPawn(FALSE) + return ..() + +///Sets the current movement target, with an optional param to override the movement behavior +/datum/ai_controller/proc/set_movement_target(source, atom/target, datum/ai_movement/new_movement) + movement_target_source = source + current_movement_target = target + if(new_movement) + change_ai_movement_type(new_movement) + +///Overrides the current ai_movement of this controller with a new one +/datum/ai_controller/proc/change_ai_movement_type(datum/ai_movement/new_movement) + ai_movement = SSai_movement.movement_types[new_movement] + +///Completely replaces the planning_subtrees with a new set based on argument provided, list provided must contain specifically typepaths +/datum/ai_controller/proc/replace_planning_subtrees(list/typepaths_of_new_subtrees) + planning_subtrees = typepaths_of_new_subtrees + init_subtrees() + +///Loops over the subtrees in planning_subtrees and looks at the ai_controllers to grab a reference, ENSURE planning_subtrees ARE TYPEPATHS AND NOT INSTANCES/REFERENCES BEFORE EXECUTING THIS +/datum/ai_controller/proc/init_subtrees() + if(!LAZYLEN(planning_subtrees)) + return + var/list/temp_subtree_list = list() + for(var/subtree in planning_subtrees) + var/subtree_instance = SSai_controllers.ai_subtrees[subtree] + temp_subtree_list += subtree_instance + planning_subtrees = temp_subtree_list + +///Proc to move from one pawn to another, this will destroy the target's existing controller. +/datum/ai_controller/proc/PossessPawn(atom/new_pawn) + if(pawn) //Reset any old signals + UnpossessPawn(FALSE) + if(istype(new_pawn.ai_controller)) //Existing AI, kill it. + QDEL_NULL(new_pawn.ai_controller) + if(TryPossessPawn(new_pawn) & AI_CONTROLLER_INCOMPATIBLE) + qdel(src) + CRASH("[src] attached to [new_pawn] but these are not compatible!") + pawn = new_pawn + pawn.ai_controller = src + + if(!continue_processing_when_client && istype(new_pawn, /mob)) + var/mob/possible_client_holder = new_pawn + if(possible_client_holder.client) + set_ai_status(AI_STATUS_OFF) + else + set_ai_status(AI_STATUS_ON) + else + set_ai_status(AI_STATUS_ON) + + RegisterSignal(pawn, COMSIG_MOB_LOGIN, PROC_REF(on_sentience_gained)) + RegisterSignal(pawn, COMSIG_MOB_STATCHANGE, PROC_REF(on_stat_changed)) + +///Abstract proc for initializing the pawn to the new controller +/datum/ai_controller/proc/TryPossessPawn(atom/new_pawn) + return + +///Proc for deinitializing the pawn to the old controller +/datum/ai_controller/proc/UnpossessPawn(destroy) + UnregisterSignal(pawn, list(COMSIG_MOB_LOGIN, COMSIG_MOB_LOGOUT, COMSIG_MOB_STATCHANGE)) + pawn.ai_controller = null + pawn = null + if(destroy) + qdel(src) + return + +/// Turn the controller on or off based on if you're alive, we only register to this if the flag is present so don't need to check again +/datum/ai_controller/proc/on_stat_changed(mob/living/source, new_stat) + SIGNAL_HANDLER + reset_ai_status() + +/// Sets the AI on or off based on current conditions, call to reset after you've manually disabled it somewhere +/datum/ai_controller/proc/reset_ai_status() + set_ai_status(get_expected_ai_status()) + +/** + * Gets the AI status we expect the AI controller to be on at this current moment. + * Returns AI_STATUS_OFF if it's inhabited by a Client and shouldn't be, if it's dead and cannot act while dead, or is on a z level without clients. + * Returns AI_STATUS_ON otherwise. + */ +/datum/ai_controller/proc/get_expected_ai_status() + + if (!ismob(pawn)) + return AI_STATUS_ON + + var/mob/living/mob_pawn = pawn + if(!continue_processing_when_client && mob_pawn.client) + return AI_STATUS_OFF + + if(mob_pawn.stat == DEAD) + return AI_STATUS_OFF + + var/turf/pawn_turf = get_turf(mob_pawn) +#ifdef TESTING + if(!pawn_turf) + CRASH("AI controller [src] controlling pawn ([pawn]) is not on a turf.") +#endif + if(!length(SSmobs.clients_by_zlevel[pawn_turf?.z])) + return AI_STATUS_OFF + return AI_STATUS_ON + +///Returns TRUE if the ai controller can actually run at the moment. +/datum/ai_controller/proc/able_to_run() + if(world.time < paused_until) + return FALSE + return TRUE + +/// Generates a plan and see if our existing one is still valid. +/datum/ai_controller/process(delta_time) + if(!able_to_run()) + walk(pawn, 0) //stop moving + return //this should remove them from processing in the future through event-based stuff. + + if(!LAZYLEN(current_behaviors) && idle_behavior) + idle_behavior.perform_idle_behavior(delta_time, src) //Do some stupid shit while we have nothing to do + return + + if(current_movement_target) + if(!isatom(current_movement_target)) + stack_trace("[pawn]'s current movement target is not an atom, rather a [current_movement_target.type]! Did you accidentally set it to a weakref?") + CancelActions() + return + + if(get_dist(pawn, current_movement_target) > max_target_distance) //The distance is out of range + CancelActions() + return + + for(var/datum/ai_behavior/current_behavior as anything in current_behaviors) + // Convert the current behaviour action cooldown to realtime seconds from deciseconds.current_behavior + // Then pick the max of this and the delta_time passed to ai_controller.process() + // Action cooldowns cannot happen faster than delta_time, so delta_time should be the value used in this scenario. + var/action_delta_time = max(current_behavior.action_cooldown * 0.1, delta_time) + + if(current_behavior.behavior_flags & AI_BEHAVIOR_REQUIRE_MOVEMENT) //Might need to move closer + if(!current_movement_target) + stack_trace("[pawn] wants to perform action type [current_behavior.type] which requires movement, but has no current movement target!") + return //This can cause issues, so don't let these slide. + + ///Stops pawns from performing such actions that should require the target to be adjacent. + var/mob/living/moving_pawn = pawn + var/can_reach = !(current_behavior.behavior_flags & AI_BEHAVIOR_REQUIRE_REACH) || moving_pawn.CanReach(current_movement_target) + + if(isliving(current_movement_target)) + var/mob/living/living_pawn = pawn + var/mob/living/living_target = current_movement_target + if(living_target.rogue_sneaking) + if(!living_pawn.npc_detect_sneak(living_target, 0)) + failed_sneak_check++ + else + failed_sneak_check = 0 + + if(prob(8)) + moving_pawn.emote("cidle") + + if(((can_reach && current_behavior.required_distance >= get_dist(moving_pawn, current_movement_target))) || failed_sneak_check > 4) ///Are we close + if(ai_movement.moving_controllers[src] == current_movement_target) //We are close enough, if we're moving stop. + ai_movement.stop_moving_towards(src) + + if(failed_sneak_check > 4) + ai_movement.stop_moving_towards(src) + failed_sneak_check = 0 + + if(behavior_cooldowns[current_behavior] > world.time) //Still on cooldown + continue + ProcessBehavior(action_delta_time, current_behavior) + return + + else if(ai_movement.moving_controllers[src] != current_movement_target) //We're too far, if we're not already moving start doing it. + ai_movement.start_moving_towards(src, current_movement_target) //Then start moving + + if(current_behavior.behavior_flags & AI_BEHAVIOR_MOVE_AND_PERFORM) //If we can move and perform then do so. + if(behavior_cooldowns[current_behavior] > world.time) //Still on cooldown + continue + ProcessBehavior(action_delta_time, current_behavior) + return + else //No movement required + if(behavior_cooldowns[current_behavior] > world.time) //Still on cooldown + continue + ProcessBehavior(action_delta_time, current_behavior) + return + +///Determines whether the AI can currently make a new plan +/datum/ai_controller/proc/able_to_plan() + . = TRUE + for(var/datum/ai_behavior/current_behavior as anything in current_behaviors) + if(!(current_behavior.behavior_flags & AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION)) //We have a behavior that blocks planning + . = FALSE + break + +///This is where you decide what actions are taken by the AI. +/datum/ai_controller/proc/SelectBehaviors(delta_time) + SHOULD_NOT_SLEEP(TRUE) //Fuck you don't sleep in procs like this. + if(!COOLDOWN_FINISHED(src, failed_planning_cooldown)) + return FALSE + LAZYINITLIST(current_behaviors) + LAZYCLEARLIST(planned_behaviors) + + if(LAZYLEN(planning_subtrees)) + for(var/datum/ai_planning_subtree/subtree as anything in planning_subtrees) + if(subtree.SelectBehaviors(src, delta_time) == SUBTREE_RETURN_FINISH_PLANNING) + break + + for(var/datum/ai_behavior/current_behavior as anything in current_behaviors) + if(LAZYACCESS(planned_behaviors, current_behavior)) + continue + var/list/arguments = list(src, FALSE) + var/list/stored_arguments = behavior_args[type] + if(stored_arguments) + arguments += stored_arguments + current_behavior.finish_action(arglist(arguments)) + + +///This proc handles changing ai status, and starts/stops processing if required. +/datum/ai_controller/proc/set_ai_status(new_ai_status) + if(ai_status == new_ai_status) + return FALSE //no change + ai_status = new_ai_status + switch(ai_status) + if(AI_STATUS_ON) + SSai_controllers.active_ai_controllers += src + START_PROCESSING(SSai_behaviors, src) + if(AI_STATUS_OFF) + STOP_PROCESSING(SSai_behaviors, src) + SSai_controllers.active_ai_controllers -= src + CancelActions() + +/datum/ai_controller/proc/PauseAi(time) + paused_until = world.time + time + +///Call this to add a behavior to the stack. +/datum/ai_controller/proc/queue_behavior(behavior_type, ...) + var/datum/ai_behavior/behavior = GET_AI_BEHAVIOR(behavior_type) + if(!behavior) + CRASH("Behavior [behavior_type] not found.") + var/list/arguments = args.Copy() + arguments[1] = src + + if(LAZYACCESS(current_behaviors, behavior)) ///It's still in the plan, don't add it again to current_behaviors but do keep it in the planned behavior list so its not cancelled + LAZYADDASSOC(planned_behaviors, behavior, TRUE) + return + + if(!behavior.setup(arglist(arguments))) + return + + LAZYADDASSOC(current_behaviors, behavior, TRUE) + LAZYADDASSOC(planned_behaviors, behavior, TRUE) + + arguments.Cut(1, 2) + if(length(arguments)) + behavior_args[behavior_type] = arguments + else + behavior_args -= behavior_type + +/datum/ai_controller/proc/ProcessBehavior(delta_time, datum/ai_behavior/behavior) + var/list/arguments = list(delta_time, src) + var/list/stored_arguments = behavior_args[behavior.type] + if(stored_arguments) + arguments += stored_arguments + behavior.perform(arglist(arguments)) + +/datum/ai_controller/proc/CancelActions() + if(!LAZYLEN(current_behaviors)) + return + for(var/i in current_behaviors) + var/datum/ai_behavior/current_behavior = i + var/list/arguments = list(src, FALSE) + var/list/stored_arguments = behavior_args[current_behavior.type] + if(stored_arguments) + arguments += stored_arguments + current_behavior.finish_action(arglist(arguments)) + +/datum/ai_controller/proc/on_sentience_gained() + UnregisterSignal(pawn, COMSIG_MOB_LOGIN) + if(!continue_processing_when_client) + set_ai_status(AI_STATUS_OFF) //Can't do anything while player is connected + set_ai_status(AI_STATUS_OFF) //Can't do anything while player is connected + RegisterSignal(pawn, COMSIG_MOB_LOGOUT, PROC_REF(on_sentience_lost)) + +/datum/ai_controller/proc/on_sentience_lost() + UnregisterSignal(pawn, COMSIG_MOB_LOGOUT) + set_ai_status(AI_STATUS_ON) //Can't do anything while player is connected + RegisterSignal(pawn, COMSIG_MOB_LOGIN, PROC_REF(on_sentience_gained)) + +/// Use this proc to define how your controller defines what access the pawn has for the sake of pathfinding, this requires they either have a key or you give them the lockids you want them to open +/datum/ai_controller/proc/get_access() + return + + +/** + * Used to manage references to datum by AI controllers + * + * * tracked_datum - something being added to an ai blackboard + * * key - the associated key + */ +#define TRACK_AI_DATUM_TARGET(tracked_datum, key) do { \ + if(isweakref(tracked_datum)) { \ + var/datum/weakref/_bad_weakref = tracked_datum; \ + stack_trace("Weakref (Actual datum: [_bad_weakref.resolve()]) found in ai datum blackboard! \ + This is an outdated method of ai reference handling, please remove it."); \ + }; \ + else if(isdatum(tracked_datum)) { \ + var/datum/_tracked_datum = tracked_datum; \ + if(!HAS_TRAIT_FROM(_tracked_datum, TRAIT_AI_TRACKING, "[REF(src)]_[key]")) { \ + RegisterSignal(_tracked_datum, COMSIG_PARENT_QDELETING, PROC_REF(sig_remove_from_blackboard), override = TRUE); \ + ADD_TRAIT(_tracked_datum, TRAIT_AI_TRACKING, "[REF(src)]_[key]"); \ + }; \ + }; \ +} while(FALSE) + +/** + * Used to clear previously set reference handing by AI controllers + * + * * tracked_datum - something being removed from an ai blackboard + * * key - the associated key + */ +#define CLEAR_AI_DATUM_TARGET(tracked_datum, key) do { \ + if(isdatum(tracked_datum)) { \ + var/datum/_tracked_datum = tracked_datum; \ + REMOVE_TRAIT(_tracked_datum, TRAIT_AI_TRACKING, "[REF(src)]_[key]"); \ + if(!HAS_TRAIT(_tracked_datum, TRAIT_AI_TRACKING)) { \ + UnregisterSignal(_tracked_datum, COMSIG_PARENT_QDELETING); \ + }; \ + }; \ +} while(FALSE) + +/// Used for above to track all the keys that have registered a signal +#define TRAIT_AI_TRACKING "tracked_by_ai" + +/** + * Sets the key to the passed "thing". + * + * * key - A blackboard key + * * thing - a value to set the blackboard key to. + */ +/datum/ai_controller/proc/set_blackboard_key(key, thing) + // Assume it is an error when trying to set a value overtop a list + if(islist(blackboard[key])) + CRASH("set_blackboard_key attempting to set a blackboard value to key [key] when it's a list!") + + // Clear existing values + if(!isnull(blackboard[key])) + clear_blackboard_key(key) + + TRACK_AI_DATUM_TARGET(thing, key) + blackboard[key] = thing + +/** + * Sets the key at index thing to the passed value + * + * Assumes the key value is already a list, if not throws an error. + * + * * key - A blackboard key, with its value set to a list + * * thing - a value which becomes the inner list value's key + * * value - what to set the inner list's value to + */ +/datum/ai_controller/proc/set_blackboard_key_assoc(key, thing, value) + if(!islist(blackboard[key])) + CRASH("set_blackboard_key_assoc called on non-list key [key]!") + TRACK_AI_DATUM_TARGET(thing, key) + TRACK_AI_DATUM_TARGET(value, key) + blackboard[key][thing] = value + +/** + * Similar to [proc/set_blackboard_key_assoc] but operates under the assumption the key is a lazylist (so it will create a list) + * More dangerous / easier to override values, only use when you want to use a lazylist + * + * * key - A blackboard key, with its value set to a list + * * thing - a value which becomes the inner list value's key + * * value - what to set the inner list's value to + */ +/datum/ai_controller/proc/set_blackboard_key_assoc_lazylist(key, thing, value) + LAZYINITLIST(blackboard[key]) + TRACK_AI_DATUM_TARGET(thing, key) + TRACK_AI_DATUM_TARGET(value, key) + blackboard[key][thing] = value + +/** + * Adds the passed "thing" to the associated key + * + * Works with lists or numbers, but not lazylists. + * + * * key - A blackboard key + * * thing - a value to set the blackboard key to. + */ +/datum/ai_controller/proc/add_blackboard_key(key, thing) + TRACK_AI_DATUM_TARGET(thing, key) + blackboard[key] += thing + +/** + * Similar to [proc/add_blackboard_key], but performs an insertion rather than an add + * Throws an error if the key is not a list already, intended only for use with lists + * + * * key - A blackboard key, with its value set to a list + * * thing - a value to set the blackboard key to. + */ +/datum/ai_controller/proc/insert_blackboard_key(key, thing) + if(!islist(blackboard[key])) + CRASH("insert_blackboard_key called on non-list key [key]!") + TRACK_AI_DATUM_TARGET(thing, key) + blackboard[key] |= thing + +/** + * Adds the passed "thing" to the associated key, assuming key is intended to be a lazylist (so it will create a list) + * More dangerous / easier to override values, only use when you want to use a lazylist + * + * * key - A blackboard key + * * thing - a value to set the blackboard key to. + */ +/datum/ai_controller/proc/add_blackboard_key_lazylist(key, thing) + LAZYINITLIST(blackboard[key]) + TRACK_AI_DATUM_TARGET(thing, key) + blackboard[key] += thing + +/** + * Similar to [proc/insert_blackboard_key_lazylist], but performs an insertion / or rather than an add + * + * * key - A blackboard key + * * thing - a value to set the blackboard key to. + */ +/datum/ai_controller/proc/insert_blackboard_key_lazylist(key, thing) + LAZYINITLIST(blackboard[key]) + TRACK_AI_DATUM_TARGET(thing, key) + blackboard[key] |= thing + +/** + * Adds the value to the inner list at key with the inner key set to "thing" + * Throws an error if the key is not a list already, intended only for use with lists + * + * * key - A blackboard key, with its value set to a list + * * thing - a value which becomes the inner list value's key + * * value - what to set the inner list's value to + */ +/datum/ai_controller/proc/add_blackboard_key_assoc(key, thing, value) + if(!islist(blackboard[key])) + CRASH("add_blackboard_key_assoc called on non-list key [key]!") + TRACK_AI_DATUM_TARGET(thing, key) + TRACK_AI_DATUM_TARGET(value, key) + blackboard[key][thing] += value + + +/** + * Similar to [proc/add_blackboard_key_assoc], assuming key is intended to be a lazylist (so it will create a list) + * More dangerous / easier to override values, only use when you want to use a lazylist + * + * * key - A blackboard key, with its value set to a list + * * thing - a value which becomes the inner list value's key + * * value - what to set the inner list's value to + */ +/datum/ai_controller/proc/add_blackboard_key_assoc_lazylist(key, thing, value) + LAZYINITLIST(blackboard[key]) + TRACK_AI_DATUM_TARGET(thing, key) + TRACK_AI_DATUM_TARGET(value, key) + blackboard[key][thing] += value + +/** + * Clears the passed key, resetting it to null + * + * Not intended for use with list keys - use [proc/remove_thing_from_blackboard_key] if you are removing a value from a list at a key + * + * * key - A blackboard key + */ +/datum/ai_controller/proc/clear_blackboard_key(key) + CLEAR_AI_DATUM_TARGET(blackboard[key], key) + blackboard[key] = null + +/** + * Remove the passed thing from the associated blackboard key + * + * Intended for use with lists, if you're just clearing a reference from a key use [proc/clear_blackboard_key] + * + * * key - A blackboard key + * * thing - a value to set the blackboard key to. + */ +/datum/ai_controller/proc/remove_thing_from_blackboard_key(key, thing) + var/associated_value = blackboard[key] + if(thing == associated_value) + stack_trace("remove_thing_from_blackboard_key was called un-necessarily in a situation where clear_blackboard_key would suffice. ") + clear_blackboard_key(key) + return + + if(!islist(associated_value)) + CRASH("remove_thing_from_blackboard_key called with an invalid \"thing\" argument ([thing]). \ + (The associated value of the passed key is not a list and is also not the passed thing, meaning it is clearing an unintended value.)") + + for(var/inner_key in associated_value) + if(inner_key == thing) + // flat list + CLEAR_AI_DATUM_TARGET(thing, key) + associated_value -= thing + return + else if(associated_value[inner_key] == thing) + // assoc list + CLEAR_AI_DATUM_TARGET(thing, key) + associated_value -= inner_key + return + + CRASH("remove_thing_from_blackboard_key called with an invalid \"thing\" argument ([thing]). \ + (The passed value is not tracked in the passed list.)") + +/// Signal proc to go through every key and remove the datum from all keys it finds +/datum/ai_controller/proc/sig_remove_from_blackboard(datum/source) + SIGNAL_HANDLER + + var/list/list/remove_queue = list(blackboard) + var/index = 1 + while(index <= length(remove_queue)) + var/list/next_to_clear = remove_queue[index] + for(var/inner_value in next_to_clear) + var/associated_value = next_to_clear[inner_value] + // We are a lists of lists, add the next value to the queue so we can handle references in there + // (But we only need to bother checking the list if it's not empty.) + if(islist(inner_value) && length(inner_value)) + UNTYPED_LIST_ADD(remove_queue, inner_value) + + // We found the value that's been deleted. Clear it out from this list + else if(inner_value == source) + next_to_clear -= inner_value + + // We are an assoc lists of lists, the list at the next value so we can handle references in there + // (But again, we only need to bother checking the list if it's not empty.) + if(islist(associated_value) && length(associated_value)) + UNTYPED_LIST_ADD(remove_queue, associated_value) + + // We found the value that's been deleted, it was an assoc value. Clear it out entirely + else if(associated_value == source) + next_to_clear -= inner_value + + index += 1 + +#undef TRACK_AI_DATUM_TARGET +#undef CLEAR_AI_DATUM_TARGET +#undef TRAIT_AI_TRACKING diff --git a/code/datums/ai/_ai_idle_behavior.dm b/code/datums/ai/_ai_idle_behavior.dm new file mode 100644 index 0000000000..f07be43844 --- /dev/null +++ b/code/datums/ai/_ai_idle_behavior.dm @@ -0,0 +1,3 @@ +/datum/idle_behavior +/datum/idle_behavior/proc/perform_idle_behavior(delta_time, datum/ai_controller/controller) + return diff --git a/code/datums/ai/ai_movement/_ai_movement.dm b/code/datums/ai/ai_movement/_ai_movement.dm new file mode 100644 index 0000000000..6bb8ea47b0 --- /dev/null +++ b/code/datums/ai/ai_movement/_ai_movement.dm @@ -0,0 +1,23 @@ +///This datum is an abstract class that can be overriden for different types of movement +/datum/ai_movement + ///Assoc list ist of controllers that are currently moving as key, and what they are moving to as value + var/list/moving_controllers = list() + ///Does this ai require processing? + var/requires_processing = TRUE + ///how many attempts do we make at pathing + var/max_pathing_attempts + ///how long path limit movements bother checking + var/max_path_distance = 30 + +/datum/ai_movement/proc/start_moving_towards(datum/ai_controller/controller, atom/current_movement_target, min_distance) + controller.pathing_attempts = 0 + controller.set_blackboard_key(BB_CURRENT_MIN_MOVE_DISTANCE, min_distance) + if(!moving_controllers.len && requires_processing) + START_PROCESSING(SSai_movement, src) + moving_controllers[controller] = current_movement_target + +/datum/ai_movement/proc/stop_moving_towards(datum/ai_controller/controller) + controller.pathing_attempts = 0 + moving_controllers -= controller + if(!moving_controllers.len && requires_processing) + STOP_PROCESSING(SSai_movement, src) diff --git a/code/datums/ai/ai_movement/_ai_planning_subtree.dm b/code/datums/ai/ai_movement/_ai_planning_subtree.dm new file mode 100644 index 0000000000..8f186d586a --- /dev/null +++ b/code/datums/ai/ai_movement/_ai_planning_subtree.dm @@ -0,0 +1,6 @@ +///A subtree is attached to a controller and is occasionally called by /ai_controller/SelectBehaviors(), this mainly exists to act as a way to subtype and modify SelectBehaviors() without needing to subtype the ai controller itself +/datum/ai_planning_subtree + +///Determines what behaviors should the controller try processing; if this returns SUBTREE_RETURN_FINISH_PLANNING then the controller won't go through the other subtrees should multiple exist in controller.planning_subtrees +/datum/ai_planning_subtree/proc/SelectBehaviors(datum/ai_controller/controller, delta_time) + return diff --git a/code/datums/ai/ai_movement/astar_movement.dm b/code/datums/ai/ai_movement/astar_movement.dm new file mode 100644 index 0000000000..fe5ef7d042 --- /dev/null +++ b/code/datums/ai/ai_movement/astar_movement.dm @@ -0,0 +1,64 @@ +/** + * This movement datum represents smart-pathing + */ +/datum/ai_movement/astar + max_pathing_attempts = 4 + max_path_distance = 30 + +///Put your movement behavior in here! +/datum/ai_movement/astar/process(delta_time) + for(var/datum/ai_controller/controller as anything in moving_controllers) + if(!COOLDOWN_FINISHED(controller, movement_cooldown)) + continue + COOLDOWN_START(controller, movement_cooldown, controller.movement_delay) + + var/atom/movable/movable_pawn = controller.pawn + if(!isturf(movable_pawn.loc)) //No moving if not on a turf + continue + + if(controller.ai_traits & STOP_MOVING_WHEN_PULLED && movable_pawn.pulledby) + continue + + var/minimum_distance = controller.max_target_distance + // right now I'm just taking the shortest minimum distance of our current behaviors, at some point in the future + // we should let whatever sets the current_movement_target also set the min distance and max path length + // (or at least cache it on the controller) + for(var/datum/ai_behavior/iter_behavior as anything in controller.current_behaviors) + if(iter_behavior.required_distance < minimum_distance) + minimum_distance = iter_behavior.required_distance + + if(get_dist(movable_pawn, controller.current_movement_target) <= minimum_distance) + continue + + var/generate_path = FALSE // set to TRUE when we either have no path, or we failed a step + if(length(controller.movement_path)) + var/turf/next_step = controller.movement_path[1] + movable_pawn.Move(next_step) + + // this check if we're on exactly the next tile may be overly brittle for dense pawns who may get bumped slightly + // to the side while moving but could maybe still follow their path without needing a whole new path + if(get_turf(movable_pawn) == next_step) + controller.movement_path.Cut(1,2) + else + generate_path = TRUE + else + generate_path = TRUE + + if(generate_path) + if(!COOLDOWN_FINISHED(controller, repath_cooldown)) + continue + controller.pathing_attempts++ + if(controller.pathing_attempts >= max_pathing_attempts) + controller.CancelActions() + continue + + COOLDOWN_START(controller, repath_cooldown, 2 SECONDS) + controller.movement_path = get_path_to(movable_pawn, controller.current_movement_target, max_path_distance, minimum_distance, id=controller.get_access()) + +/datum/ai_movement/astar/start_moving_towards(datum/ai_controller/controller, atom/current_movement_target) + controller.movement_path = null + return ..() + +/datum/ai_movement/astar/stop_moving_towards(datum/ai_controller/controller) + controller.movement_path = null + return ..() diff --git a/code/datums/ai/ai_movement/basic_avoidance.dm b/code/datums/ai/ai_movement/basic_avoidance.dm new file mode 100644 index 0000000000..a82141dfe5 --- /dev/null +++ b/code/datums/ai/ai_movement/basic_avoidance.dm @@ -0,0 +1,32 @@ +///Uses Byond's basic obstacle avoidance mvovement +/datum/ai_movement/basic_avoidance + requires_processing = TRUE + max_pathing_attempts = 10 + +///Put your movement behavior in here! +/datum/ai_movement/basic_avoidance/process(delta_time) + for(var/datum/ai_controller/controller as anything in moving_controllers) + if(!COOLDOWN_FINISHED(controller, movement_cooldown)) + continue + COOLDOWN_START(controller, movement_cooldown, controller.movement_delay) + + var/atom/movable/movable_pawn = controller.pawn + var/can_move = TRUE + + if(controller.ai_traits & STOP_MOVING_WHEN_PULLED && movable_pawn.pulledby) + can_move = FALSE + + if(!isturf(movable_pawn.loc)) //No moving if not on a turf + can_move = FALSE + + var/current_loc = get_turf(movable_pawn) + + var/turf/target_turf = get_step_towards(movable_pawn, controller.current_movement_target) + + if(!is_type_in_typecache(target_turf, GLOB.dangerous_turfs) && can_move) + step_to(movable_pawn, controller.current_movement_target, controller.blackboard[BB_CURRENT_MIN_MOVE_DISTANCE], controller.movement_delay) + + if(current_loc == get_turf(movable_pawn)) //Did we even move after trying to move? + controller.pathing_attempts++ + if(controller.pathing_attempts >= max_pathing_attempts) + controller.CancelActions() diff --git a/code/datums/ai/ai_movement/dumb_movement.dm b/code/datums/ai/ai_movement/dumb_movement.dm new file mode 100644 index 0000000000..53eefa5dea --- /dev/null +++ b/code/datums/ai/ai_movement/dumb_movement.dm @@ -0,0 +1,27 @@ +///The most braindead type of movement, bee-line to the target with no concern of whats infront of us. +/datum/ai_movement/dumb + max_pathing_attempts = 16 + +///Put your movement behavior in here! +/datum/ai_movement/dumb/process(delta_time) + for(var/datum/ai_controller/controller as anything in moving_controllers) + if(!COOLDOWN_FINISHED(controller, movement_cooldown)) + continue + COOLDOWN_START(controller, movement_cooldown, controller.movement_delay) + var/atom/movable/movable_pawn = controller.pawn + var/can_move = TRUE + + if(controller.ai_traits & STOP_MOVING_WHEN_PULLED && movable_pawn.pulledby) + can_move = FALSE + + if(!isturf(movable_pawn.loc)) //No moving if not on a turf + can_move = FALSE + + var/current_loc = get_turf(movable_pawn) + var/turf/target_turf = get_step_towards(movable_pawn, controller.current_movement_target) + if(!is_type_in_typecache(target_turf, GLOB.dangerous_turfs) && can_move) + movable_pawn.Move(target_turf, get_dir(current_loc, target_turf)) + if(current_loc == get_turf(movable_pawn)) //Did we even move after trying to move? + controller.pathing_attempts++ + if(controller.pathing_attempts >= max_pathing_attempts) + controller.CancelActions() diff --git a/code/datums/ai/behaviours/consume.dm b/code/datums/ai/behaviours/consume.dm new file mode 100644 index 0000000000..7c214ce5ed --- /dev/null +++ b/code/datums/ai/behaviours/consume.dm @@ -0,0 +1,31 @@ + +/datum/ai_behavior/consume + required_distance = 1 + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT + action_cooldown = 2 SECONDS + +/datum/ai_behavior/consume/setup(datum/ai_controller/controller, target_key) + . = ..() + set_movement_target(controller, controller.blackboard[target_key]) + +/datum/ai_behavior/consume/perform(seconds_per_tick, datum/ai_controller/controller, target_key, hunger_timer_key) + . = ..() + var/mob/living/living_pawn = controller.pawn + var/obj/item/target = controller.blackboard[target_key] + if(QDELETED(target)) + return + + if(!(target in living_pawn.held_items)) + if(!living_pawn.get_empty_held_indexes() || !living_pawn.put_in_hands(target)) + finish_action(controller, FALSE, target, hunger_timer_key) + return + + target.melee_attack_chain(living_pawn, living_pawn) + + if(QDELETED(target) || prob(10)) // Even if we don't finish it all we can randomly decide to be done + finish_action(controller, TRUE, null, hunger_timer_key) + +/datum/ai_behavior/consume/finish_action(datum/ai_controller/controller, succeeded, target_key, hunger_timer_key) + . = ..() + if(succeeded) + controller.set_blackboard_key(hunger_timer_key, world.time + rand(12 SECONDS, 60 SECONDS)) diff --git a/code/datums/ai/behaviours/eat_food/eat_body.dm b/code/datums/ai/behaviours/eat_food/eat_body.dm new file mode 100644 index 0000000000..e21828af18 --- /dev/null +++ b/code/datums/ai/behaviours/eat_food/eat_body.dm @@ -0,0 +1,69 @@ +/datum/ai_behavior/eat_dead_body + action_cooldown = 1.5 SECONDS + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH + +/datum/ai_behavior/eat_dead_body/setup(datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) + . = ..() + //Hiding location is priority + var/atom/target = controller.blackboard[hiding_location_key] || controller.blackboard[target_key] + if(QDELETED(target)) + return FALSE + set_movement_target(controller, (target)) + +/datum/ai_behavior/eat_dead_body/perform(delta_time, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) + . = ..() + var/mob/living/simple_animal/basic_mob = controller.pawn + //targetting datum will kill the action if not real anymore + var/mob/living/target = controller.blackboard[target_key] + var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] + + var/hiding_target = targetting_datum.find_hidden_mobs(basic_mob, target) //If this is valid, theyre hidden in something! + + controller.set_blackboard_key(hiding_location_key, hiding_target) + + basic_mob.face_atom() + basic_mob.visible_message(span_danger("[basic_mob] starts to rip apart [target]!")) + if(do_after(basic_mob, 10 SECONDS, target = target)) + if(iscarbon(target)) + var/mob/living/carbon/C = target + var/obj/item/bodypart/limb + var/list/limb_list = list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) + for(var/zone in limb_list) + limb = C.get_bodypart(zone) + if(limb) + limb.dismember() + finish_action(controller, TRUE) + return + limb = C.get_bodypart(BODY_ZONE_HEAD) + if(limb) + limb.dismember() + finish_action(controller, TRUE) + return + limb = C.get_bodypart(BODY_ZONE_CHEST) + if(limb) + if(!limb.dismember()) + C.gib() + else + if(basic_mob.attack_sound) + playsound(basic_mob, pick(basic_mob.attack_sound), 100, TRUE, -1) + target.gib() + finish_action(controller, TRUE) + + +/datum/ai_behavior/eat_dead_body/finish_action(datum/ai_controller/controller, succeeded, target_key, targetting_datum_key, hiding_location_key) + . = ..() + if(!succeeded) + controller.clear_blackboard_key(target_key) + + +/datum/ai_behavior/eat_dead_body/bog_troll/finish_action(datum/ai_controller/controller, succeeded, target_key, targetting_datum_key, hiding_location_key) + . = ..() + if(!succeeded) + controller.clear_blackboard_key(target_key) + controller.pawn.icon_state = "Trollso" + +/datum/ai_behavior/eat_dead_body/mimic/finish_action(datum/ai_controller/controller, succeeded, target_key, targetting_datum_key, hiding_location_key) + . = ..() + if(!succeeded) + controller.clear_blackboard_key(target_key) + controller.pawn.icon_state = "mimic" diff --git a/code/datums/ai/behaviours/find_and_set.dm b/code/datums/ai/behaviours/find_and_set.dm new file mode 100644 index 0000000000..9f80cfe594 --- /dev/null +++ b/code/datums/ai/behaviours/find_and_set.dm @@ -0,0 +1,96 @@ +/**find and set + * Finds an item near themselves, sets a blackboard key as it. Very useful for ais that need to use machines or something. + * if you want to do something more complicated than find a single atom, change the search_tactic() proc + * cool tip: search_tactic() can set lists + */ +/datum/ai_behavior/find_and_set + action_cooldown = 2 SECONDS + +/datum/ai_behavior/find_and_set/perform(delta_time, datum/ai_controller/controller, set_key, locate_path, search_range) + . = ..() + var/find_this_thing = search_tactic(controller, locate_path, search_range) + if(find_this_thing) + controller.set_blackboard_key(set_key, find_this_thing) + finish_action(controller, TRUE) + else + finish_action(controller, FALSE) + +/datum/ai_behavior/find_and_set/proc/search_tactic(datum/ai_controller/controller, locate_path, search_range) + return locate(locate_path) in oview(search_range, controller.pawn) + +/** + * Variant of find and set that fails if the living pawn doesn't hold something + */ +/datum/ai_behavior/find_and_set/pawn_must_hold_item + +/datum/ai_behavior/find_and_set/pawn_must_hold_item/search_tactic(datum/ai_controller/controller) + var/mob/living/living_pawn = controller.pawn + if(!living_pawn.get_inactive_held_item() && !living_pawn.get_active_held_item()) + return //we want to fail the search if we don't have something held + return ..() + +/** + * Variant of find and set that also requires the item to be edible. checks hands too + */ +/datum/ai_behavior/find_and_set/edible + +/datum/ai_behavior/find_and_set/edible/search_tactic(datum/ai_controller/controller, locate_path, search_range) + var/mob/living/living_pawn = controller.pawn + var/list/food_candidates = list() + for(var/held_candidate as anything in living_pawn.held_items) + if(!held_candidate || !istype(held_candidate, /obj/item/reagent_containers/food)) + continue + food_candidates += held_candidate + var/list/local_results = locate(locate_path) in oview(search_range, controller.pawn) + for(var/local_candidate in local_results) + if(!istype(local_candidate, /obj/item/reagent_containers/food)) + continue + food_candidates += local_candidate + if(food_candidates.len) + return pick(food_candidates) + +/** + * Variant of find and set that only checks in hands, search range should be excluded for this + */ +/datum/ai_behavior/find_and_set/in_hands + +/datum/ai_behavior/find_and_set/in_hands/search_tactic(datum/ai_controller/controller, locate_path) + var/mob/living/living_pawn = controller.pawn + return locate(locate_path) in living_pawn.held_items + +/** + * Variant of find and set that takes a list of things to find. + */ +/datum/ai_behavior/find_and_set/in_list + +/datum/ai_behavior/find_and_set/in_list/search_tactic(datum/ai_controller/controller, locate_paths, search_range) + var/list/found = list() + for(var/locate_path in locate_paths) + var/single_locate = ..(controller, locate_path, search_range) + if(single_locate) + found += single_locate + if(found.len) + return pick(found) + + +/datum/ai_behavior/find_and_set/dead_bodies + +/datum/ai_behavior/find_and_set/dead_bodies/search_tactic(datum/ai_controller/controller, locate_paths, search_range) + var/list/found = list() + for(var/mob/living/mob in oview(search_range, controller.pawn)) + if(mob.stat == CONSCIOUS) + continue + found |= mob + if(!length(found)) + return null + return pick(found) + +/datum/ai_behavior/find_and_set/dead_bodies/bog_troll/finish_action(datum/ai_controller/controller, succeeded, ...) + . = ..() + if(succeeded) + controller.pawn.icon_state = "Trolla" + +/datum/ai_behavior/find_and_set/dead_bodies/mimic/finish_action(datum/ai_controller/controller, succeeded, ...) + . = ..() + if(succeeded) + controller.pawn.icon_state = "mimicopen" diff --git a/code/datums/ai/behaviours/follow.dm b/code/datums/ai/behaviours/follow.dm new file mode 100644 index 0000000000..a57576e037 --- /dev/null +++ b/code/datums/ai/behaviours/follow.dm @@ -0,0 +1,26 @@ +/// This behavior involves attacking a target. +/datum/ai_behavior/follow + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM + required_distance = 1 + +/datum/ai_behavior/follow/perform(delta_time, datum/ai_controller/controller) + . = ..() + var/mob/living/living_pawn = controller.pawn + if(!istype(living_pawn) || !isturf(living_pawn.loc)) + return + + var/atom/movable/follow_target = controller.blackboard[BB_FOLLOW_TARGET] + if(!follow_target || get_dist(living_pawn, follow_target) > controller.blackboard[BB_VISION_RANGE]) + finish_action(controller, FALSE) + return + + var/mob/living/living_target = follow_target + if(istype(living_target) && (living_target.stat == DEAD)) + finish_action(controller, TRUE) + return + + set_movement_target(controller, (living_target)) + +/datum/ai_behavior/follow/finish_action(datum/ai_controller/controller, succeeded) + . = ..() + controller.clear_blackboard_key(BB_FOLLOW_TARGET) diff --git a/code/datums/ai/behaviours/hostile/attack.dm b/code/datums/ai/behaviours/hostile/attack.dm new file mode 100644 index 0000000000..b854bda5c1 --- /dev/null +++ b/code/datums/ai/behaviours/hostile/attack.dm @@ -0,0 +1,36 @@ + +/// This behavior involves attacking a target. +/datum/ai_behavior/attack + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM + required_distance = 1 + +/datum/ai_behavior/attack/perform(delta_time, datum/ai_controller/controller) + . = ..() + var/mob/living/living_pawn = controller.pawn + if(!istype(living_pawn) || !isturf(living_pawn.loc)) + return + + var/datum/weakref/attack_ref = controller.blackboard[BB_ATTACK_TARGET] + var/atom/movable/attack_target = attack_ref?.resolve() + if(!attack_target || !can_see(living_pawn, attack_target, length=controller.blackboard[BB_VISION_RANGE])) + finish_action(controller, FALSE) + return + + var/mob/living/living_target = attack_target + if(istype(living_target) && (living_target.stat == DEAD)) + finish_action(controller, TRUE) + return + + set_movement_target(controller, (living_target)) + attack(controller, living_target) + +/datum/ai_behavior/attack/finish_action(datum/ai_controller/controller, succeeded) + . = ..() + controller.blackboard[BB_ATTACK_TARGET] = null + +/// A proc representing when the mob is pushed to actually attack the target. Again, subtypes can be used to represent different attacks from different animals, or it can be some other generic behavior +/datum/ai_behavior/attack/proc/attack(datum/ai_controller/controller, mob/living/living_target) + var/mob/living/living_pawn = controller.pawn + if(!istype(living_pawn)) + return + living_pawn.ClickOn(living_target, list()) diff --git a/code/datums/ai/behaviours/hostile/find_potential_targets.dm b/code/datums/ai/behaviours/hostile/find_potential_targets.dm new file mode 100644 index 0000000000..3ae8c62754 --- /dev/null +++ b/code/datums/ai/behaviours/hostile/find_potential_targets.dm @@ -0,0 +1,93 @@ +/datum/ai_behavior/find_potential_targets + action_cooldown = 2 SECONDS + /// How far can we see stuff? + var/vision_range = 9 + +/datum/ai_behavior/find_potential_targets/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) + . = ..() + var/mob/living/living_mob = controller.pawn + var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] + + if(!targetting_datum) + CRASH("No target datum was supplied in the blackboard for [controller.pawn]") + + var/atom/current_target = controller.blackboard[target_key] + if (targetting_datum.can_attack(living_mob, current_target)) + finish_action(controller, succeeded = FALSE) + return + + controller.clear_blackboard_key(target_key) + var/list/potential_targets = hearers(vision_range, controller.pawn) - living_mob //Remove self, so we don't suicide + + if(!potential_targets.len) + finish_action(controller, succeeded = FALSE) + return + + var/list/filtered_targets = list() + + for(var/atom/pot_target in potential_targets) + if(targetting_datum.can_attack(living_mob, pot_target))//Can we attack it? + filtered_targets += pot_target + continue + + for(var/mob/living/living_target in filtered_targets) + if(!living_target.rogue_sneaking) + continue + var/extra_chance = (living_mob.health <= living_mob.maxHealth * 50) ? 30 : 0 // if we're below half health, we're way more alert + if (!living_mob.npc_detect_sneak(living_target, extra_chance)) + filtered_targets -= living_target + + if(!filtered_targets.len) + finish_action(controller, succeeded = FALSE) + return + + var/atom/target = pick_final_target(controller, filtered_targets) + controller.set_blackboard_key(target_key, target) + + var/atom/potential_hiding_location = targetting_datum.find_hidden_mobs(living_mob, target) + + if(potential_hiding_location) //If they're hiding inside of something, we need to know so we can go for that instead initially. + controller.set_blackboard_key(hiding_location_key, potential_hiding_location) + + finish_action(controller, succeeded = TRUE) + +/datum/ai_behavior/find_potential_targets/finish_action(datum/ai_controller/controller, succeeded, ...) + . = ..() + if (succeeded) + controller.CancelActions() // On retarget cancel any further queued actions so that they will setup again with new target + +/// Returns the desired final target from the filtered list of targets +/datum/ai_behavior/find_potential_targets/proc/pick_final_target(datum/ai_controller/controller, list/filtered_targets) + return pick(filtered_targets) + + +/datum/ai_behavior/find_potential_targets/rat + vision_range = 2 + +/datum/ai_behavior/find_potential_targets/spider + vision_range = 5 + +/datum/ai_behavior/find_potential_targets/mimic + vision_range = 1 + +/datum/ai_behavior/find_potential_targets/mimic/finish_action(datum/ai_controller/controller, succeeded, ...) + . = ..() + if (succeeded) + controller.CancelActions() + controller.pawn.icon_state = "mimicopen" + + +/datum/ai_behavior/find_potential_targets/mole + vision_range = 9 + +/datum/ai_behavior/find_potential_targets/troll + vision_range = 7 + +/datum/ai_behavior/find_potential_targets/bog_troll + vision_range = 2 + +/datum/ai_behavior/find_potential_targets/bog_troll/finish_action(datum/ai_controller/controller, succeeded, ...) + . = ..() + if (succeeded) + controller.CancelActions() + controller.pawn.icon_state = "Trolla" diff --git a/code/datums/ai/behaviours/hostile/melee_attack.dm b/code/datums/ai/behaviours/hostile/melee_attack.dm new file mode 100644 index 0000000000..fbfe580e3f --- /dev/null +++ b/code/datums/ai/behaviours/hostile/melee_attack.dm @@ -0,0 +1,113 @@ +/datum/ai_behavior/basic_melee_attack + action_cooldown = 0.2 SECONDS // We gotta check unfortunately often because we're in a race condition with nextmove + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + var/sidesteps_after = FALSE + +/datum/ai_behavior/basic_melee_attack/setup(datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) + . = ..() + var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] + if(isnull(targetting_datum)) + CRASH("No target datum was supplied in the blackboard for [controller.pawn]") + + //Hiding location is priority + var/atom/target = controller.blackboard[hiding_location_key] || controller.blackboard[target_key] + if(QDELETED(target)) + return FALSE + set_movement_target(controller, (target)) + +/datum/ai_behavior/basic_melee_attack/perform(delta_time, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) + . = ..() + var/mob/living/simple_animal/basic_mob = controller.pawn + //targetting datum will kill the action if not real anymore + var/atom/target = controller.blackboard[target_key] + var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] + + if(!targetting_datum.can_attack(basic_mob, target)) + finish_action(controller, FALSE, target_key) + return + + var/hiding_target = targetting_datum.find_hidden_mobs(basic_mob, target) //If this is valid, theyre hidden in something! + + controller.set_blackboard_key(hiding_location_key, hiding_target) + + basic_mob.face_atom() + basic_mob.a_intent = pick(basic_mob.possible_a_intents) + if(hiding_target) //Slap it! + basic_mob.ClickOn(hiding_target, list()) + else + basic_mob.ClickOn(target, list()) + + if(sidesteps_after && prob(33)) //this is so fucking hacky, but going off og code this is exactly how it goes ignoring movetimers + if(!target || !isturf(target.loc) || !isturf(basic_mob.loc) || basic_mob.stat == DEAD) + return + var/target_dir = get_dir(basic_mob,target) + + var/static/list/cardinal_sidestep_directions = list(-90,-45,0,45,90) + var/static/list/diagonal_sidestep_directions = list(-45,0,45) + var/chosen_dir = 0 + if (target_dir & (target_dir - 1)) + chosen_dir = pick(diagonal_sidestep_directions) + else + chosen_dir = pick(cardinal_sidestep_directions) + if(chosen_dir) + chosen_dir = turn(target_dir,chosen_dir) + basic_mob.Move(get_step(basic_mob,chosen_dir)) + basic_mob.face_atom(target) //Looks better if they keep looking at you when dodging + +/datum/ai_behavior/basic_melee_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, targetting_datum_key, hiding_location_key) + . = ..() + if(!succeeded) + controller.clear_blackboard_key(target_key) + +/datum/ai_behavior/basic_ranged_attack + action_cooldown = 0.6 SECONDS + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM + required_distance = 3 + +/datum/ai_behavior/basic_ranged_attack/setup(datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) + . = ..() + var/atom/target = controller.blackboard[hiding_location_key] || controller.blackboard[target_key] + if(QDELETED(target)) + return FALSE + set_movement_target(controller, (target)) + + +/datum/ai_behavior/basic_ranged_attack/perform(delta_time, datum/ai_controller/controller, target_key, targetting_datum_key, hiding_location_key) + . = ..() + var/mob/living/simple_animal/basic_mob = controller.pawn + //targetting datum will kill the action if not real anymore + var/atom/target = controller.blackboard[target_key] + var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] + + + if(!targetting_datum.can_attack(basic_mob, target)) + finish_action(controller, FALSE, target_key) + return + + var/atom/hiding_target = targetting_datum.find_hidden_mobs(basic_mob, target) //If this is valid, theyre hidden in something! + + controller.set_blackboard_key(hiding_location_key, hiding_target) + + basic_mob.face_atom() + if(hiding_target) //Shoot it! + basic_mob.RangedAttack(hiding_target) + else + basic_mob.RangedAttack(target) + +/datum/ai_behavior/basic_ranged_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, targetting_datum_key, hiding_location_key) + . = ..() + if(!succeeded) + controller.clear_blackboard_key(target_key) + + +/datum/ai_behavior/basic_melee_attack/bog_troll/finish_action(datum/ai_controller/controller, succeeded, target_key, targetting_datum_key, hiding_location_key) + . = ..() + if(!succeeded) + controller.clear_blackboard_key(target_key) + controller.pawn.icon_state = "Trollso" + +/datum/ai_behavior/basic_melee_attack/mimic/finish_action(datum/ai_controller/controller, succeeded, target_key, targetting_datum_key, hiding_location_key) + . = ..() + if(!succeeded) + controller.clear_blackboard_key(target_key) + controller.pawn.icon_state = "mimic" diff --git a/code/datums/ai/behaviours/hunger.dm b/code/datums/ai/behaviours/hunger.dm new file mode 100644 index 0000000000..8fd3a18424 --- /dev/null +++ b/code/datums/ai/behaviours/hunger.dm @@ -0,0 +1,24 @@ +/** + * Generic Hunger Subtree, + * + * Requires at least a living mob that can hold items. + * + * relevant blackboards: + * * BB_NEXT_HUNGRY - set by this subtree, is when the controller is next hungry + */ +/datum/ai_planning_subtree/generic_hunger/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/next_eat = controller.blackboard[BB_NEXT_HUNGRY] + if(!next_eat) + //inits the blackboard timer + next_eat = world.time + rand(0, 30 SECONDS) + controller.set_blackboard_key(BB_NEXT_HUNGRY, next_eat) + + if(world.time < next_eat) + return + + if(!controller.blackboard[BB_FOOD_TARGET]) + controller.queue_behavior(/datum/ai_behavior/find_and_set/edible, BB_FOOD_TARGET, /obj/item, 2) + return + + controller.queue_behavior(/datum/ai_behavior/consume, BB_FOOD_TARGET, BB_NEXT_HUNGRY) + return SUBTREE_RETURN_FINISH_PLANNING diff --git a/code/datums/ai/behaviours/nearest_targetting.dm b/code/datums/ai/behaviours/nearest_targetting.dm new file mode 100644 index 0000000000..8a570375cb --- /dev/null +++ b/code/datums/ai/behaviours/nearest_targetting.dm @@ -0,0 +1,13 @@ +/// Picks targets based on which one is closest to you, choice between targets at equal distance is arbitrary +/datum/ai_behavior/find_potential_targets/nearest + +/datum/ai_behavior/find_potential_targets/nearest/pick_final_target(datum/ai_controller/controller, list/filtered_targets) + var/turf/our_position = get_turf(controller.pawn) + return get_closest_atom(/atom/, filtered_targets, our_position) + +/// As above but targets have been filtered from the 'retaliate' blackboard list +/datum/ai_behavior/target_from_retaliate_list/nearest + +/datum/ai_behavior/target_from_retaliate_list/nearest/pick_final_target(datum/ai_controller/controller, list/enemies_list) + var/turf/our_position = get_turf(controller.pawn) + return get_closest_atom(/atom/, enemies_list, our_position) diff --git a/code/datums/ai/behaviours/perform_emote.dm b/code/datums/ai/behaviours/perform_emote.dm new file mode 100644 index 0000000000..ec5e452eea --- /dev/null +++ b/code/datums/ai/behaviours/perform_emote.dm @@ -0,0 +1,8 @@ +/datum/ai_behavior/perform_emote + +/datum/ai_behavior/perform_emote/perform(delta_time, datum/ai_controller/controller, emote) + var/mob/living/living_pawn = controller.pawn + if(!istype(living_pawn)) + return + living_pawn.emote(emote) + finish_action(controller, TRUE) diff --git a/code/datums/ai/behaviours/perform_speech.dm b/code/datums/ai/behaviours/perform_speech.dm new file mode 100644 index 0000000000..c1e87459fa --- /dev/null +++ b/code/datums/ai/behaviours/perform_speech.dm @@ -0,0 +1,8 @@ +/datum/ai_behavior/perform_speech + +/datum/ai_behavior/perform_speech/perform(delta_time, datum/ai_controller/controller, speech) + var/mob/living/living_pawn = controller.pawn + if(!istype(living_pawn)) + return + living_pawn.say(speech, forced = "AI Controller") + finish_action(controller, TRUE) diff --git a/code/datums/ai/behaviours/resist.dm b/code/datums/ai/behaviours/resist.dm new file mode 100644 index 0000000000..40d7759700 --- /dev/null +++ b/code/datums/ai/behaviours/resist.dm @@ -0,0 +1,5 @@ +/datum/ai_behavior/resist/perform(delta_time, datum/ai_controller/controller) + . = ..() + var/mob/living/living_pawn = controller.pawn + living_pawn.resist() + finish_action(controller, TRUE) diff --git a/code/datums/ai/behaviours/run_from_target.dm b/code/datums/ai/behaviours/run_from_target.dm new file mode 100644 index 0000000000..dc024a8bf7 --- /dev/null +++ b/code/datums/ai/behaviours/run_from_target.dm @@ -0,0 +1,88 @@ +/** + * Get ranged target turf, but with direct targets as opposed to directions + * + * Starts at atom starting_atom and gets the exact angle between starting_atom and target + * Moves from starting_atom with that angle, Range amount of times, until it stops, bound to map size + * Arguments: + * * starting_atom - Initial Firer / Position + * * target - Target to aim towards + * * range - Distance of returned target turf from starting_atom + * * offset - Angle offset, 180 input would make the returned target turf be in the opposite direction + */ +/proc/get_ranged_target_turf_direct(atom/starting_atom, atom/target, range, offset) + var/angle = ATAN2(target.x - starting_atom.x, target.y - starting_atom.y) + if(offset) + angle += offset + var/turf/starting_turf = get_turf(starting_atom) + for(var/i in 1 to range) + var/turf/check = locate(starting_atom.x + cos(angle) * i, starting_atom.y + sin(angle) * i, starting_atom.z) + if(!check) + break + starting_turf = check + + return starting_turf + +// Move to a position further away from your current target +/datum/ai_behavior/run_away_from_target + required_distance = 0 + action_cooldown = 0 + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + /// How far do we try to run? Further makes for smoother running, but potentially weirder pathfinding + var/run_distance = 9 + var/until_destination = FALSE + +/datum/ai_behavior/run_away_from_target/setup(datum/ai_controller/controller, target_key, hiding_location_key) + var/atom/target = controller.blackboard[hiding_location_key] || controller.blackboard[target_key] + if(!target) + return FALSE + + plot_path_away_from(controller, target) + return ..() + +/datum/ai_behavior/run_away_from_target/perform(delta_time, datum/ai_controller/controller, target_key, hiding_location_key) + . = ..() + var/atom/target = controller.blackboard[hiding_location_key] || controller.blackboard[target_key] + var/escaped = !target || !can_see(controller.pawn, target, run_distance) // If we can't see it we got away + if (escaped) + finish_action(controller, succeeded = TRUE) + return + if (!in_range(controller.pawn, controller.current_movement_target)) + if(until_destination) + finish_action(controller, TRUE) + return + plot_path_away_from(controller, target) + +/datum/ai_behavior/run_away_from_target/proc/plot_path_away_from(datum/ai_controller/controller, atom/target) + var/turf/target_destination = get_turf(controller.pawn) + var/static/list/offset_angles = list(45, 90, 135, 180, 225, 270) + for(var/angle in offset_angles) + var/turf/test_turf = get_furthest_turf(controller.pawn, angle, target) + if(isnull(test_turf)) + continue + var/distance_from_target = get_dist(target, test_turf) + if(distance_from_target <= get_dist(target, target_destination)) + continue + target_destination = test_turf + if(distance_from_target == run_distance) //we already got the max running distance + break + if (target_destination == get_turf(controller.pawn)) + return FALSE + set_movement_target(controller, target_destination) + return TRUE + +/datum/ai_behavior/run_away_from_target/proc/get_furthest_turf(atom/source, angle, atom/target) + var/turf/return_turf + for(var/i in 1 to run_distance) + var/turf/test_destination = get_ranged_target_turf_direct(source, target, range = i, offset = angle) + if(is_blocked_turf(test_destination, exclude_mobs = !source.density)) + break + return_turf = test_destination + return return_turf + +/datum/ai_behavior/run_away_from_target/until_destination + until_destination = TRUE + run_distance = 4 + +/datum/ai_behavior/run_away_from_target/until_destination/finish_action(datum/ai_controller/controller, succeeded, ...) + . = ..() + controller.set_blackboard_key(BB_BASIC_MOB_RUN_WITH_ITEM, FALSE) diff --git a/code/datums/ai/behaviours/use_in_hand.dm b/code/datums/ai/behaviours/use_in_hand.dm new file mode 100644 index 0000000000..de1e8c017b --- /dev/null +++ b/code/datums/ai/behaviours/use_in_hand.dm @@ -0,0 +1,13 @@ +/// Use in hand the currently held item +/datum/ai_behavior/use_in_hand + behavior_flags = AI_BEHAVIOR_MOVE_AND_PERFORM + +/datum/ai_behavior/use_in_hand/perform(delta_time, datum/ai_controller/controller) + . = ..() + var/mob/living/pawn = controller.pawn + var/obj/item/held = pawn.get_active_held_item() + if(!held) + finish_action(controller, FALSE) + return + pawn.activate_hand(pawn.active_hand_index) + finish_action(controller, TRUE) diff --git a/code/datums/ai/behaviours/use_on_object.dm b/code/datums/ai/behaviours/use_on_object.dm new file mode 100644 index 0000000000..ab28cc94e0 --- /dev/null +++ b/code/datums/ai/behaviours/use_on_object.dm @@ -0,0 +1,19 @@ +/// Use the currently held item, or unarmed, on an object in the world +/datum/ai_behavior/use_on_object + required_distance = 1 + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH + +/datum/ai_behavior/use_on_object/perform(delta_time, datum/ai_controller/controller) + . = ..() + var/mob/living/pawn = controller.pawn + var/obj/item/held_item = pawn.get_active_held_item() + var/atom/target = controller.current_movement_target + if(!target || !pawn.CanReach(target)) + finish_action(controller, FALSE) + return + + if(held_item) + held_item.melee_attack_chain(pawn, target) + else + pawn.UnarmedAttack(target, TRUE) + finish_action(controller, TRUE) diff --git a/code/datums/ai/behaviours/use_targeted_ability.dm b/code/datums/ai/behaviours/use_targeted_ability.dm new file mode 100644 index 0000000000..a24a69575c --- /dev/null +++ b/code/datums/ai/behaviours/use_targeted_ability.dm @@ -0,0 +1,50 @@ +/** + * # Targeted Mob Ability + * Attempts to use a mob's cooldown ability on a target + */ +/datum/ai_behavior/targeted_mob_ability + +/datum/ai_behavior/targeted_mob_ability/perform(seconds_per_tick, datum/ai_controller/controller, ability_key, target_key) + var/obj/effect/proc_holder/spell/ability = controller.blackboard[ability_key] + var/mob/living/target = controller.blackboard[target_key] + if(QDELETED(ability) || QDELETED(target)) + finish_action(controller, FALSE, ability_key, target_key) + return + var/mob/pawn = controller.pawn + pawn.face_atom(target) + var/result = ability.perform(targets = list(target), user = controller.pawn) + finish_action(controller, result, ability_key, target_key) + +/datum/ai_behavior/targeted_mob_ability/finish_action(datum/ai_controller/controller, succeeded, ability_key, target_key) + . = ..() + var/atom/target = controller.blackboard[target_key] + if (QDELETED(target)) + controller.clear_blackboard_key(target_key) + +/** + * # Try Mob Ability and clear target + * Attempts to use a mob's cooldown ability on a target and releases the target when the action completes + */ +/datum/ai_behavior/targeted_mob_ability/and_clear_target + +/datum/ai_behavior/targeted_mob_ability/and_clear_target/finish_action(datum/ai_controller/controller, succeeded, ability_key, target_key) + . = ..() + controller.clear_blackboard_key(target_key) + +/datum/ai_behavior/targeted_mob_ability/proc/get_ability_to_use(datum/ai_controller/controller, ability_key) + return controller.blackboard[ability_key] + +/** + * Attempts to move into the provided range and then use a mob's cooldown ability on a target + */ +/datum/ai_behavior/targeted_mob_ability/min_range + required_distance = 6 + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT + var/datum/ai_movement/new_movement + +/datum/ai_behavior/targeted_mob_ability/min_range/setup(datum/ai_controller/controller, ability_key, target_key) + . = ..() + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target)) + return FALSE + set_movement_target(controller, target, new_movement) diff --git a/code/datums/ai/behaviours/wak_to_target.dm b/code/datums/ai/behaviours/wak_to_target.dm new file mode 100644 index 0000000000..a761913789 --- /dev/null +++ b/code/datums/ai/behaviours/wak_to_target.dm @@ -0,0 +1,7 @@ +///Moves to target then finishes +/datum/ai_behavior/move_to_target + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT + +/datum/ai_behavior/move_to_target/perform(delta_time, datum/ai_controller/controller) + . = ..() + finish_action(controller, TRUE) diff --git a/code/datums/ai/controllers/big_rat.dm b/code/datums/ai/controllers/big_rat.dm new file mode 100644 index 0000000000..43fca905d0 --- /dev/null +++ b/code/datums/ai/controllers/big_rat.dm @@ -0,0 +1,22 @@ +/datum/ai_controller/big_rat + movement_delay = 0.5 SECONDS + + ai_movement = /datum/ai_movement/basic_avoidance + + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items() + + ) + + planning_subtrees = list( + /datum/ai_planning_subtree/flee_target, + + /datum/ai_planning_subtree/simple_find_target/rat, + /datum/ai_planning_subtree/find_food/rat, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + + /datum/ai_planning_subtree/find_dead_bodies, + /datum/ai_planning_subtree/eat_dead_body, + ) + + idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/datums/ai/controllers/bog_bug.dm b/code/datums/ai/controllers/bog_bug.dm new file mode 100644 index 0000000000..830a8703dc --- /dev/null +++ b/code/datums/ai/controllers/bog_bug.dm @@ -0,0 +1,22 @@ +/datum/ai_controller/bog_bug + movement_delay = 0.2 SECONDS + + ai_movement = /datum/ai_movement/basic_avoidance + + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items() + + ) + + planning_subtrees = list( + /datum/ai_planning_subtree/flee_target, + + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/find_food, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + + /datum/ai_planning_subtree/find_dead_bodies, + /datum/ai_planning_subtree/eat_dead_body, + ) + + idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/datums/ai/controllers/bog_troll.dm b/code/datums/ai/controllers/bog_troll.dm new file mode 100644 index 0000000000..4d6382f255 --- /dev/null +++ b/code/datums/ai/controllers/bog_troll.dm @@ -0,0 +1,19 @@ +/datum/ai_controller/bog_troll + movement_delay = 0.7 SECONDS + + ai_movement = /datum/ai_movement/basic_avoidance + + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items() + + ) + + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target/bog_troll, + /datum/ai_planning_subtree/basic_melee_attack_subtree/bog_troll, + + /datum/ai_planning_subtree/find_dead_bodies/bog_troll, + /datum/ai_planning_subtree/eat_dead_body/bog_troll, + ) + + idle_behavior = /datum/idle_behavior/nothing diff --git a/code/datums/ai/controllers/headless.dm b/code/datums/ai/controllers/headless.dm new file mode 100644 index 0000000000..9fe29b1907 --- /dev/null +++ b/code/datums/ai/controllers/headless.dm @@ -0,0 +1,22 @@ +/datum/ai_controller/headless + movement_delay = 0.8 SECONDS + + ai_movement = /datum/ai_movement/basic_avoidance + + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items() + + ) + + planning_subtrees = list( + /datum/ai_planning_subtree/flee_target, + + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/find_food, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + + /datum/ai_planning_subtree/find_dead_bodies, + /datum/ai_planning_subtree/eat_dead_body, + ) + + idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/datums/ai/controllers/mimic.dm b/code/datums/ai/controllers/mimic.dm new file mode 100644 index 0000000000..c9714d1bac --- /dev/null +++ b/code/datums/ai/controllers/mimic.dm @@ -0,0 +1,19 @@ +/datum/ai_controller/mimic + movement_delay = 0.8 SECONDS + + ai_movement = /datum/ai_movement/basic_avoidance + + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items() + + ) + + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target/mimic, + /datum/ai_planning_subtree/basic_melee_attack_subtree/mimic, + + /datum/ai_planning_subtree/find_dead_bodies/mimic, + /datum/ai_planning_subtree/eat_dead_body/mimic, + ) + + idle_behavior = /datum/idle_behavior/nothing diff --git a/code/datums/ai/controllers/minoutaur.dm b/code/datums/ai/controllers/minoutaur.dm new file mode 100644 index 0000000000..586d074c03 --- /dev/null +++ b/code/datums/ai/controllers/minoutaur.dm @@ -0,0 +1,17 @@ +/datum/ai_controller/minotaur + movement_delay = 0.5 SECONDS + + ai_movement = /datum/ai_movement/basic_avoidance + + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items() + + ) + + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target/spider, + /datum/ai_planning_subtree/find_food/spider, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) + + idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/datums/ai/controllers/mole.dm b/code/datums/ai/controllers/mole.dm new file mode 100644 index 0000000000..edef2b7534 --- /dev/null +++ b/code/datums/ai/controllers/mole.dm @@ -0,0 +1,22 @@ +/datum/ai_controller/mole + movement_delay = 0.6 SECONDS + + ai_movement = /datum/ai_movement/basic_avoidance + + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items() + + ) + + planning_subtrees = list( + /datum/ai_planning_subtree/flee_target, + + /datum/ai_planning_subtree/simple_find_target/mole, + /datum/ai_planning_subtree/find_food/mole, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + + /datum/ai_planning_subtree/find_dead_bodies/mole, + /datum/ai_planning_subtree/eat_dead_body, + ) + + idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/datums/ai/controllers/spider.dm b/code/datums/ai/controllers/spider.dm new file mode 100644 index 0000000000..d8ecdcda7a --- /dev/null +++ b/code/datums/ai/controllers/spider.dm @@ -0,0 +1,22 @@ +/datum/ai_controller/spider + movement_delay = 0.4 SECONDS + + ai_movement = /datum/ai_movement/basic_avoidance + + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items() + + ) + + planning_subtrees = list( + /datum/ai_planning_subtree/flee_target, + + /datum/ai_planning_subtree/simple_find_target/spider, + /datum/ai_planning_subtree/find_food/spider, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + + /datum/ai_planning_subtree/find_dead_bodies, + /datum/ai_planning_subtree/eat_dead_body, + ) + + idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/datums/ai/controllers/troll.dm b/code/datums/ai/controllers/troll.dm new file mode 100644 index 0000000000..e954cfbac2 --- /dev/null +++ b/code/datums/ai/controllers/troll.dm @@ -0,0 +1,22 @@ +/datum/ai_controller/troll + movement_delay = 0.7 SECONDS + + ai_movement = /datum/ai_movement/basic_avoidance + + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/allow_items() + + ) + + planning_subtrees = list( + /datum/ai_planning_subtree/flee_target, + + /datum/ai_planning_subtree/simple_find_target/troll, + /datum/ai_planning_subtree/find_food/troll, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + + /datum/ai_planning_subtree/find_dead_bodies, + /datum/ai_planning_subtree/eat_dead_body, + ) + + idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/datums/ai/controllers/volf.dm b/code/datums/ai/controllers/volf.dm new file mode 100644 index 0000000000..f1b8dc489b --- /dev/null +++ b/code/datums/ai/controllers/volf.dm @@ -0,0 +1,20 @@ +/datum/ai_controller/volf + movement_delay = 0.4 SECONDS + + ai_movement = /datum/ai_movement/basic_avoidance + + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic() + ) + + planning_subtrees = list( + /datum/ai_planning_subtree/flee_target, + + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + + /datum/ai_planning_subtree/find_dead_bodies, + /datum/ai_planning_subtree/eat_dead_body, + ) + + idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/datums/ai/hostile/_hostile_controller.dm b/code/datums/ai/hostile/_hostile_controller.dm new file mode 100644 index 0000000000..1752b75557 --- /dev/null +++ b/code/datums/ai/hostile/_hostile_controller.dm @@ -0,0 +1,190 @@ +/datum/ai_controller/hostile_friend + blackboard = list( + BB_HOSTILE_ORDER_MODE = null, + BB_HOSTILE_FRIEND = null, + BB_FOLLOW_TARGET = null, + BB_ATTACK_TARGET = null, + BB_VISION_RANGE = BB_HOSTILE_VISION_RANGE, + BB_HOSTILE_ATTACK_WORD = "growls", + ) + ai_movement = /datum/ai_movement/basic_avoidance + + idle_behavior = /datum/idle_behavior/idle_random_walk/hostile_tameable + + var/ride_penalty_movement = 1 SECONDS + + COOLDOWN_DECLARE(command_cooldown) + +/datum/ai_controller/hostile_friend/process(delta_time) + if(isliving(pawn)) + var/mob/living/living_pawn = pawn + movement_delay = living_pawn.cached_multiplicative_slowdown + return ..() + +/datum/ai_controller/hostile_friend/TryPossessPawn(atom/new_pawn) + if(!ishostile(new_pawn)) + return AI_CONTROLLER_INCOMPATIBLE + + RegisterSignal(new_pawn, COMSIG_PARENT_EXAMINE, PROC_REF(on_examined)) + RegisterSignal(new_pawn, COMSIG_CLICK_ALT, PROC_REF(check_altclicked)) + RegisterSignal(new_pawn, COMSIG_RIDDEN_DRIVER_MOVE, PROC_REF(on_ridden_driver_move)) + RegisterSignal(new_pawn, COMSIG_MOVABLE_PREBUCKLE, PROC_REF(on_prebuckle)) + return ..() //Run parent at end + +/datum/ai_controller/hostile_friend/UnpossessPawn(destroy) + UnregisterSignal(pawn, list( + COMSIG_ATOM_ATTACK_HAND, + COMSIG_PARENT_EXAMINE, + COMSIG_CLICK_ALT, + COMSIG_LIVING_DEATH, + COMSIG_PARENT_QDELETING + )) + unfriend() + return ..() //Run parent at end + +/datum/ai_controller/hostile_friend/proc/on_prebuckle(mob/source, mob/living/buckler, force) + if(force || ai_status == AI_STATUS_OFF) + return + if(WEAKREF(buckler) != blackboard[BB_HOSTILE_FRIEND]) + return COMPONENT_BLOCK_BUCKLE + +/datum/ai_controller/hostile_friend/able_to_run() + var/mob/living/living_pawn = pawn + + if(IS_DEAD_OR_INCAP(living_pawn)) + return FALSE + return ..() + +/datum/ai_controller/hostile_friend/get_access() + var/mob/living/simple_animal/simple_pawn = pawn + if(!istype(simple_pawn)) + return + + return simple_pawn.lock_hashes + +/datum/ai_controller/hostile_friend/proc/on_ridden_driver_move(atom/movable/movable_parent, mob/living/user, direction) + SIGNAL_HANDLER + PauseAi(ride_penalty_movement) + +/// Befriends someone +/datum/ai_controller/hostile_friend/proc/befriend(mob/living/new_friend) + var/datum/weakref/current_ref = blackboard[BB_HOSTILE_FRIEND] + var/datum/weakref/friend_ref = WEAKREF(new_friend) + var/mob/living/old_friend = current_ref?.resolve() + if(old_friend) + unfriend(old_friend) + else + blackboard[BB_HOSTILE_FRIEND] = null + + if(pawn.Adjacent(pawn, new_friend)) + new_friend.visible_message("[pawn] looks at [new_friend] in a friendly manner!", span_notice("[pawn] looks at you in a friendly manner!")) + blackboard[BB_HOSTILE_FRIEND] = friend_ref + RegisterSignal(new_friend, COMSIG_MOB_SAY, PROC_REF(check_verbal_command)) + +/// Someone is being mean to us, take them off our friends (add actual enemies behavior later) +/datum/ai_controller/hostile_friend/proc/unfriend() + var/datum/weakref/friend_ref = blackboard[BB_HOSTILE_FRIEND] + var/mob/living/old_friend = friend_ref?.resolve() + if(old_friend) + UnregisterSignal(old_friend, list(COMSIG_MOB_SAY)) + blackboard[BB_HOSTILE_FRIEND] = null + +/// Someone is looking at us, if we're currently carrying something then show what it is, and include a message if they're our friend +/datum/ai_controller/hostile_friend/proc/on_examined(datum/source, mob/user, list/examine_text) + SIGNAL_HANDLER + + if(blackboard[BB_HOSTILE_FRIEND] == WEAKREF(user)) + var/mob/living/living_pawn = pawn + if(!IS_DEAD_OR_INCAP(living_pawn)) + examine_text += span_notice("[pawn.p_they(TRUE)] seem[pawn.p_s()] happy to see you!") + +// next section is regarding commands + +/// Someone alt clicked us, see if they're someone we should show the radial command menu to +/datum/ai_controller/hostile_friend/proc/check_altclicked(datum/source, mob/living/clicker) + SIGNAL_HANDLER + + if(!COOLDOWN_FINISHED(src, command_cooldown)) + return + if(!istype(clicker) || blackboard[BB_HOSTILE_FRIEND] == WEAKREF(clicker)) + return + INVOKE_ASYNC(src, PROC_REF(command_radial), clicker) + +/// Show the command radial menu +/datum/ai_controller/hostile_friend/proc/command_radial(mob/living/clicker) + var/list/commands = list( + COMMAND_STOP = image(icon = 'icons/testing/turf_analysis.dmi', icon_state = "red_arrow"), + COMMAND_FOLLOW = image(icon = 'icons/mob/actions/actions_spells.dmi', icon_state = "summons"), + COMMAND_ATTACK = image(icon = 'icons/effects/effects.dmi', icon_state = "bite"), + ) + + var/choice = show_radial_menu(clicker, pawn, commands, custom_check = CALLBACK(src, PROC_REF(check_menu), clicker), tooltips = TRUE) + if(!choice || !check_menu(clicker)) + return + set_command_mode(clicker, choice) + +/datum/ai_controller/hostile_friend/proc/check_menu(mob/user) + if(!istype(user)) + CRASH("A non-mob is trying to issue an order to [pawn].") + if(user.incapacitated() || !can_see(user, pawn)) + return FALSE + return TRUE + +/// One of our friends said something, see if it's a valid command, and if so, take action +/datum/ai_controller/hostile_friend/proc/check_verbal_command(mob/speaker, speech_args) + SIGNAL_HANDLER + + if(blackboard[BB_HOSTILE_FRIEND] != WEAKREF(speaker)) + return + + if(!COOLDOWN_FINISHED(src, command_cooldown)) + return + + var/mob/living/living_pawn = pawn + if(IS_DEAD_OR_INCAP(living_pawn)) + return + + var/spoken_text = speech_args[SPEECH_MESSAGE] // probably should check for full words + var/command + if(findtext(spoken_text, "stop") || findtext(spoken_text, "stay")) + command = COMMAND_STOP + else if(findtext(spoken_text, "follow") || findtext(spoken_text, "come")) + command = COMMAND_FOLLOW + else if(findtext(spoken_text, "attack") || findtext(spoken_text, "sic")) + command = COMMAND_ATTACK + else + return + + if(!can_see(pawn, speaker, length=blackboard[BB_VISION_RANGE])) + return + set_command_mode(speaker, command) + +/// Whether we got here via radial menu or a verbal command, this is where we actually process what our new command will be +/datum/ai_controller/hostile_friend/proc/set_command_mode(mob/commander, command) + COOLDOWN_START(src, command_cooldown, AI_HOSTILE_COMMAND_COOLDOWN) + + switch(command) + // heel: stop what you're doing, relax and try not to do anything for a little bit + if(COMMAND_STOP) + pawn.visible_message(span_notice("[pawn] [blackboard[BB_HOSTILE_ATTACK_WORD]] at [commander]'s command, and [pawn.p_they()] stop[pawn.p_s()] obediently, awaiting further orders.")) + blackboard[BB_HOSTILE_ORDER_MODE] = HOSTILE_COMMAND_NONE + CancelActions() + // fetch: whatever the commander points to, try and bring it back + if(COMMAND_FOLLOW) + pawn.visible_message(span_notice("[pawn] [blackboard[BB_HOSTILE_ATTACK_WORD]] at [commander]'s command, and [pawn.p_they()] follow[pawn.p_s()] slightly in anticipation.")) + CancelActions() + blackboard[BB_HOSTILE_ORDER_MODE] = HOSTILE_COMMAND_FOLLOW + blackboard[BB_FOLLOW_TARGET] = WEAKREF(commander) + set_movement_target(commander) + var/mob/living/living_pawn = pawn + if(living_pawn.buckled) + queue_behavior(/datum/ai_behavior/resist)//in case they are in bed or something + queue_behavior(/datum/ai_behavior/follow) + // attack: harass whoever the commander points to + if(COMMAND_ATTACK) + pawn.visible_message(span_danger("[pawn] [blackboard[BB_HOSTILE_ATTACK_WORD]] at [commander]'s command, and [pawn.p_they()] growl[pawn.p_s()] intensely.")) // imagine getting intimidated by a corgi + CancelActions() + blackboard[BB_HOSTILE_ORDER_MODE] = HOSTILE_COMMAND_ATTACK + +/datum/idle_behavior/idle_random_walk/hostile_tameable + walk_chance = 5 diff --git a/code/datums/ai/hostile/testing_orc.dm b/code/datums/ai/hostile/testing_orc.dm new file mode 100644 index 0000000000..b8d80874f1 --- /dev/null +++ b/code/datums/ai/hostile/testing_orc.dm @@ -0,0 +1,31 @@ +/datum/ai_controller/orc + movement_delay = 0.6 SECONDS + + ai_movement = /datum/ai_movement/basic_avoidance + + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic() + ) + + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) + + idle_behavior = /datum/idle_behavior/idle_random_walk + +/datum/ai_controller/orc_ranged + movement_delay = 0.7 SECONDS + + ai_movement = /datum/ai_movement/basic_avoidance + + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic() + ) + + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/basic_ranged_attack_subtree, + ) + + idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/datums/ai/idle_behaviors/nothing.dm b/code/datums/ai/idle_behaviors/nothing.dm new file mode 100644 index 0000000000..96af47276d --- /dev/null +++ b/code/datums/ai/idle_behaviors/nothing.dm @@ -0,0 +1,3 @@ +/datum/idle_behavior/nothing + +/datum/idle_behavior/nothing/perform_idle_behavior(delta_time, datum/ai_controller/controller) diff --git a/code/datums/ai/idle_behaviors/random_walk.dm b/code/datums/ai/idle_behaviors/random_walk.dm new file mode 100644 index 0000000000..e1ffd36539 --- /dev/null +++ b/code/datums/ai/idle_behaviors/random_walk.dm @@ -0,0 +1,15 @@ +/datum/idle_behavior/idle_random_walk + ///Chance that the mob random walks per second + var/walk_chance = 10 + +/datum/idle_behavior/idle_random_walk/perform_idle_behavior(delta_time, datum/ai_controller/controller) + . = ..() + if(controller.blackboard[BB_BASIC_MOB_FOOD_TARGET]) // this means we are likely eating a corpse + return + var/mob/living/living_pawn = controller.pawn + if(prob(walk_chance) && (living_pawn.mobility_flags & MOBILITY_MOVE) && isturf(living_pawn.loc) && !living_pawn.pulledby) + var/move_dir = pick(GLOB.alldirs) + living_pawn.Move(get_step(living_pawn, move_dir), move_dir) + + if(prob(8)) + living_pawn.emote("idle") diff --git a/code/datums/ai/readme.md b/code/datums/ai/readme.md new file mode 100644 index 0000000000..bb9bd494a3 --- /dev/null +++ b/code/datums/ai/readme.md @@ -0,0 +1,21 @@ +# AI controllers + +## Introduction + +Our AI controller system is an attempt at making it possible to create modularized AI that stores its behavior in datums, while keeping state and decision making in a controller. This allows a more versatile way of creating AI that doesn't rely on OOP as much, and doesn't clutter up the Life() code in Mobs. + +## AI Controllers + +A datum that can be added to any atom in the game. Similarly to components, they might only support a given subtype (e.g. /mob/living), but the idea is that theoretically, you could apply a specific AI controller to a big a group of different types as possible and it would still work. + +These datums handle both the normal movement of mobs, but also their decision making, deciding which actions they will take based on the checks you put into their SelectBehaviors proc. + +If behaviors are selected, and the AI is in range, it will try to perform them. It runs all the behaviors it currently has in parallel; allowing for it to for example screech at someone while trying to attack them. As long as it has behaviors running, it will not try to generate new plans, making it not waste CPU when it already has an active goal. + +They also hold data for any of the actions they might need to use, such as cooldowns, whether or not they're currently fighting, etcetera this is stored in the blackboard, more information on that below. + +### Blackboard +The blackboard is an associated list keyed with strings and with values of whatever you want. These store information the mob has such as "Am I attacking someone", "Do I have a weapon". By using an associated list like this, no data needs to be stored on the actions themselves, and you could make actions that work on multiple ai controllers if you so pleased by making the key to use a variable. + +## AI Behavior +AI behaviors are the actions an AI can take. These can range from "Do an emote" to "Attack this target until he is dead". They are singletons and should contain nothing but static data. Any dynamic data should be stored in the blackboard, to allow different controllers to use the same behaviors. diff --git a/code/datums/ai/subtrees/eat_body.dm b/code/datums/ai/subtrees/eat_body.dm new file mode 100644 index 0000000000..80793ee130 --- /dev/null +++ b/code/datums/ai/subtrees/eat_body.dm @@ -0,0 +1,20 @@ +/datum/ai_planning_subtree/eat_dead_body + var/datum/ai_behavior/eat_dead_body/behavior = /datum/ai_behavior/eat_dead_body + +/datum/ai_planning_subtree/eat_dead_body/SelectBehaviors(datum/ai_controller/controller, delta_time) + . = ..() + var/atom/target = controller.blackboard[BB_BASIC_MOB_FOOD_TARGET] + if(QDELETED(target)) + return + var/mob/living/pawn = controller.pawn + if(pawn.doing) + return + controller.queue_behavior(behavior, BB_BASIC_MOB_FOOD_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + return SUBTREE_RETURN_FINISH_PLANNING //we are going into battle...no distractions. + + +/datum/ai_planning_subtree/eat_dead_body/bog_troll + behavior = /datum/ai_behavior/eat_dead_body/bog_troll + +/datum/ai_planning_subtree/eat_dead_body/mimic + behavior = /datum/ai_behavior/eat_dead_body/mimic diff --git a/code/datums/ai/subtrees/find_food.dm b/code/datums/ai/subtrees/find_food.dm new file mode 100644 index 0000000000..3ffdcdb541 --- /dev/null +++ b/code/datums/ai/subtrees/find_food.dm @@ -0,0 +1,55 @@ +/// similar to finding a target but looks for food types in the // the what? +/datum/ai_planning_subtree/find_food + var/vision_range = 9 + +/datum/ai_planning_subtree/find_food/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + . = ..() + var/atom/target = controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] + if(!QDELETED(target)) + // Busy with something + return + + controller.queue_behavior(/datum/ai_behavior/find_and_set/in_list, BB_BASIC_MOB_CURRENT_TARGET, controller.blackboard[BB_BASIC_FOODS], vision_range) + + +/datum/ai_planning_subtree/find_dead_bodies + var/vision_range = 9 + var/datum/ai_behavior/find_and_set/dead_bodies/behavior = /datum/ai_behavior/find_and_set/dead_bodies + +/datum/ai_planning_subtree/find_dead_bodies/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + . = ..() + if(istype(controller.pawn, /mob/living/simple_animal)) + var/mob/living/simple_animal/hostile/retaliate/rogue/mob = controller.pawn + if(mob.food == mob.food_max && !mob.eat_forever) + return // not hungry + + var/atom/target = controller.blackboard[BB_BASIC_MOB_FOOD_TARGET] + if(!QDELETED(target)) + // Busy with something + return + + controller.queue_behavior(behavior, BB_BASIC_MOB_FOOD_TARGET, controller.blackboard[BB_BASIC_FOODS], vision_range) + +/datum/ai_planning_subtree/find_dead_bodies/mole + vision_range = 7 + +/datum/ai_planning_subtree/find_food/rat + vision_range = 2 + +/datum/ai_planning_subtree/find_food/spider + vision_range = 5 + +/datum/ai_planning_subtree/find_food/mole + vision_range = 7 + +/datum/ai_planning_subtree/find_food/troll + vision_range = 7 + + +/datum/ai_planning_subtree/find_dead_bodies/bog_troll + vision_range = 7 + behavior = /datum/ai_behavior/find_and_set/dead_bodies/bog_troll + +/datum/ai_planning_subtree/find_dead_bodies/mimic + vision_range = 2 + behavior = /datum/ai_behavior/find_and_set/dead_bodies/mimic diff --git a/code/datums/ai/subtrees/flee_nearest_target.dm b/code/datums/ai/subtrees/flee_nearest_target.dm new file mode 100644 index 0000000000..d9f7ab9e33 --- /dev/null +++ b/code/datums/ai/subtrees/flee_nearest_target.dm @@ -0,0 +1,17 @@ +/// Find the nearest thing which we assume is hostile and set it as the flee target +/datum/ai_planning_subtree/simple_find_nearest_target_to_flee + +/datum/ai_planning_subtree/simple_find_nearest_target_to_flee/SelectBehaviors(datum/ai_controller/controller, delta_time) + . = ..() + if (!controller.blackboard[BB_BASIC_MOB_FLEEING]) + return + controller.queue_behavior(/datum/ai_behavior/find_potential_targets/nearest, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + +/// Find the nearest thing on our list of 'things which have done damage to me' and set it as the flee target +/datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee + +/datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee/SelectBehaviors(datum/ai_controller/controller, delta_time) + . = ..() + if (!controller.blackboard[BB_BASIC_MOB_FLEEING]) + return + controller.queue_behavior(/datum/ai_behavior/target_from_retaliate_list/nearest, BB_BASIC_MOB_RETALIATE_LIST, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) diff --git a/code/datums/ai/subtrees/flee_target.dm b/code/datums/ai/subtrees/flee_target.dm new file mode 100644 index 0000000000..cc7ddcc287 --- /dev/null +++ b/code/datums/ai/subtrees/flee_target.dm @@ -0,0 +1,44 @@ +/// Try to escape from your current target, without performing any other actions. +/datum/ai_planning_subtree/flee_target + /// Behaviour to execute in order to flee + var/flee_behaviour = /datum/ai_behavior/run_away_from_target + /// Blackboard key in which to store selected target + var/target_key = BB_BASIC_MOB_CURRENT_TARGET + /// Blackboard key in which to store selected target's hiding place + var/hiding_place_key = BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION + ///our key we check against the blackboard to continue + var/bb_key = BB_BASIC_MOB_FLEEING + +/datum/ai_planning_subtree/flee_target/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + . = ..() + if (!controller.blackboard[bb_key]) + return + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target)) + return + controller.queue_behavior(flee_behaviour, target_key, hiding_place_key) + return SUBTREE_RETURN_FINISH_PLANNING //we gotta get out of here. + +/// Try to escape from your current target, without performing any other actions. +/// Reads from some fleeing-specific targetting keys rather than the current mob target. +/datum/ai_planning_subtree/flee_target/from_flee_key + target_key = BB_BASIC_MOB_FLEE_TARGET + hiding_place_key = BB_BASIC_MOB_FLEE_TARGET_HIDING_LOCATION + + +/// Try to escape from your current target, without performing any other actions. +/// Reads from some fleeing-specific targetting keys rather than the current mob target. +/datum/ai_planning_subtree/flee_target/until_destination + target_key = BB_BASIC_MOB_FLEE_TARGET + hiding_place_key = BB_BASIC_MOB_FLEE_TARGET_HIDING_LOCATION + flee_behaviour = /datum/ai_behavior/run_away_from_target/until_destination + bb_key = BB_BASIC_MOB_RUN_WITH_ITEM + +/datum/ai_planning_subtree/flee_target/until_destination/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if (!controller.blackboard[bb_key]) // this saves us like a micro second of processing time by early returning even though we check later. + return + + var/list/filtered_targets = hearers(7, controller.pawn) - controller.pawn + var/turf/our_position = get_turf(controller.pawn) + controller.set_blackboard_key(BB_BASIC_MOB_FLEE_TARGET, get_closest_atom(/atom/, filtered_targets, our_position)) + . = ..() diff --git a/code/datums/ai/subtrees/random_speech.dm b/code/datums/ai/subtrees/random_speech.dm new file mode 100644 index 0000000000..a4a015d62a --- /dev/null +++ b/code/datums/ai/subtrees/random_speech.dm @@ -0,0 +1,35 @@ +/datum/ai_planning_subtree/random_speech + //The chance of an emote occuring each second + var/speech_chance = 0 + ///Hearable emotes + var/list/emote_hear = list() + ///Unlike speak_emote, the list of things in this variable only show by themselves with no spoken text. IE: Ian barks, Ian yaps + var/list/emote_see = list() + ///Possible lines of speech the AI can have + var/list/speak = list() + +/datum/ai_planning_subtree/random_speech/New() + . = ..() + if(speak) + speak = string_list(speak) + if(emote_hear) + emote_hear = string_list(emote_hear) + if(emote_see) + emote_see = string_list(emote_see) + +/datum/ai_planning_subtree/random_speech/SelectBehaviors(datum/ai_controller/controller, delta_time) + if(prob(15)) + var/audible_emotes_length = emote_hear?.len + var/non_audible_emotes_length = emote_see?.len + var/speak_lines_length = speak?.len + + var/total_choices_length = audible_emotes_length + non_audible_emotes_length + speak_lines_length + + var/random_number_in_range = rand(1, total_choices_length) + + if(random_number_in_range <= audible_emotes_length) + controller.queue_behavior(/datum/ai_behavior/perform_emote, pick(emote_hear)) + else if(random_number_in_range <= (audible_emotes_length + non_audible_emotes_length)) + controller.queue_behavior(/datum/ai_behavior/perform_emote, pick(emote_see)) + else + controller.queue_behavior(/datum/ai_behavior/perform_speech, pick(speak)) diff --git a/code/datums/ai/subtrees/retaliate_subtree.dm b/code/datums/ai/subtrees/retaliate_subtree.dm new file mode 100644 index 0000000000..abafa023d0 --- /dev/null +++ b/code/datums/ai/subtrees/retaliate_subtree.dm @@ -0,0 +1,76 @@ +/// Sets the BB target to a mob which you can see and who has recently attacked you +/datum/ai_planning_subtree/target_retaliate + /// Blackboard key which tells us how to select valid targets + var/targetting_datum_key = BB_TARGETTING_DATUM + /// Blackboard key in which to store selected target + var/target_key = BB_BASIC_MOB_CURRENT_TARGET + /// Blackboard key in which to store selected target's hiding place + var/hiding_place_key = BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION + +/datum/ai_planning_subtree/target_retaliate/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + . = ..() + controller.queue_behavior(/datum/ai_behavior/target_from_retaliate_list, BB_BASIC_MOB_RETALIATE_LIST, target_key, targetting_datum_key, hiding_place_key) + +/// Places a mob which you can see and who has recently attacked you into some 'run away from this' AI keys +/// Can use a different targetting datum than you use to select attack targets +/// Not required if fleeing is the only target behaviour or uses the same target datum +/datum/ai_planning_subtree/target_retaliate/to_flee + targetting_datum_key = BB_FLEE_TARGETTING_DATUM + target_key = BB_BASIC_MOB_FLEE_TARGET + hiding_place_key = BB_BASIC_MOB_FLEE_TARGET_HIDING_LOCATION + +/** + * Picks a target from a provided list of atoms who have been pissing you off + * You will probably need /datum/element/ai_retaliate to take advantage of this unless you're populating the blackboard yourself + */ +/datum/ai_behavior/target_from_retaliate_list + action_cooldown = 2 SECONDS + /// How far can we see stuff? + var/vision_range = 9 + +/datum/ai_behavior/target_from_retaliate_list/perform(seconds_per_tick, datum/ai_controller/controller, shitlist_key, target_key, targetting_datum_key, hiding_location_key) + . = ..() + var/mob/living/living_mob = controller.pawn + var/datum/targetting_datum/targetting_datum = controller.blackboard[targetting_datum_key] + if(!targetting_datum) + CRASH("No target datum was supplied in the blackboard for [controller.pawn]") + + var/list/enemies_list = controller.blackboard[shitlist_key] + if (!length(enemies_list)) + finish_action(controller, succeeded = FALSE) + return + + if (controller.blackboard[target_key] in enemies_list) // Don't bother changing + finish_action(controller, succeeded = FALSE) + return + + for(var/mob/living/living_target in enemies_list) + if(!living_target.rogue_sneaking) + continue + var/extra_chance = (living_mob.health <= living_mob.maxHealth * 50) ? 30 : 0 // if we're below half health, we're way more alert + if (!living_mob.npc_detect_sneak(living_target, extra_chance)) + enemies_list -= living_target + + var/atom/new_target = pick_final_target(controller, enemies_list) + controller.set_blackboard_key(target_key, new_target) + + var/atom/potential_hiding_location = targetting_datum.find_hidden_mobs(living_mob, new_target) + + if(potential_hiding_location) //If they're hiding inside of something, we need to know so we can go for that instead initially. + controller.set_blackboard_key(hiding_location_key, potential_hiding_location) + + finish_action(controller, succeeded = TRUE) + +/// Returns true if this target is valid for attacking based on current conditions +/datum/ai_behavior/target_from_retaliate_list/proc/can_attack_target(mob/living/living_mob, atom/target, datum/targetting_datum/targetting_datum) + if (!target) + return FALSE + if (target == living_mob) + return FALSE + if (!can_see(living_mob, target, vision_range)) + return FALSE + return targetting_datum.can_attack(living_mob, target) + +/// Returns the desired final target from the filtered list of enemies +/datum/ai_behavior/target_from_retaliate_list/proc/pick_final_target(datum/ai_controller/controller, list/enemies_list) + return pick(enemies_list) diff --git a/code/datums/ai/subtrees/simple_find_target.dm b/code/datums/ai/subtrees/simple_find_target.dm new file mode 100644 index 0000000000..b991194fb5 --- /dev/null +++ b/code/datums/ai/subtrees/simple_find_target.dm @@ -0,0 +1,36 @@ +/datum/ai_planning_subtree/simple_find_target + +/datum/ai_planning_subtree/simple_find_target/SelectBehaviors(datum/ai_controller/controller, delta_time) + controller.queue_behavior(/datum/ai_behavior/find_potential_targets, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + + +/datum/ai_planning_subtree/simple_find_target/rat + +/datum/ai_planning_subtree/simple_find_target/rat/SelectBehaviors(datum/ai_controller/controller, delta_time) + controller.queue_behavior(/datum/ai_behavior/find_potential_targets/rat, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + +/datum/ai_planning_subtree/simple_find_target/spider + +/datum/ai_planning_subtree/simple_find_target/rat/SelectBehaviors(datum/ai_controller/controller, delta_time) + controller.queue_behavior(/datum/ai_behavior/find_potential_targets/spider, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + + +/datum/ai_planning_subtree/simple_find_target/mimic + +/datum/ai_planning_subtree/simple_find_target/mimic/SelectBehaviors(datum/ai_controller/controller, delta_time) + controller.queue_behavior(/datum/ai_behavior/find_potential_targets/mimic, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + +/datum/ai_planning_subtree/simple_find_target/mole + +/datum/ai_planning_subtree/simple_find_target/mole/SelectBehaviors(datum/ai_controller/controller, delta_time) + controller.queue_behavior(/datum/ai_behavior/find_potential_targets/mole, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + +/datum/ai_planning_subtree/simple_find_target/troll + +/datum/ai_planning_subtree/simple_find_target/troll/SelectBehaviors(datum/ai_controller/controller, delta_time) + controller.queue_behavior(/datum/ai_behavior/find_potential_targets/troll, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + +/datum/ai_planning_subtree/simple_find_target/bog_troll + +/datum/ai_planning_subtree/simple_find_target/bog_troll/SelectBehaviors(datum/ai_controller/controller, delta_time) + controller.queue_behavior(/datum/ai_behavior/find_potential_targets/bog_troll, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) diff --git a/code/datums/ai/subtrees/simple_melee_subtree.dm b/code/datums/ai/subtrees/simple_melee_subtree.dm new file mode 100644 index 0000000000..92e977794a --- /dev/null +++ b/code/datums/ai/subtrees/simple_melee_subtree.dm @@ -0,0 +1,29 @@ +/datum/ai_planning_subtree/basic_melee_attack_subtree + var/datum/ai_behavior/basic_melee_attack/melee_attack_behavior = /datum/ai_behavior/basic_melee_attack + +/datum/ai_planning_subtree/basic_melee_attack_subtree/SelectBehaviors(datum/ai_controller/controller, delta_time) + . = ..() + var/atom/target = controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] + if(QDELETED(target)) + return + controller.queue_behavior(melee_attack_behavior, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + return SUBTREE_RETURN_FINISH_PLANNING //we are going into battle...no distractions. + +//If you give this to something without the element you are a dumbass. +/datum/ai_planning_subtree/basic_ranged_attack_subtree + var/datum/ai_behavior/basic_ranged_attack/ranged_attack_behavior = /datum/ai_behavior/basic_ranged_attack + +/datum/ai_planning_subtree/basic_ranged_attack_subtree/SelectBehaviors(datum/ai_controller/controller, delta_time) + . = ..() + var/atom/target = controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] + if(QDELETED(target)) + return + controller.queue_behavior(ranged_attack_behavior, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + return SUBTREE_RETURN_FINISH_PLANNING //we are going into battle...no distractions. + + +/datum/ai_planning_subtree/basic_melee_attack_subtree/bog_troll + melee_attack_behavior = /datum/ai_behavior/basic_melee_attack/bog_troll + +/datum/ai_planning_subtree/basic_melee_attack_subtree/mimic + melee_attack_behavior = /datum/ai_behavior/basic_melee_attack/mimic diff --git a/code/datums/ai/subtrees/targeted_ability_use.dm b/code/datums/ai/subtrees/targeted_ability_use.dm new file mode 100644 index 0000000000..653d866394 --- /dev/null +++ b/code/datums/ai/subtrees/targeted_ability_use.dm @@ -0,0 +1,28 @@ +/// Attempts to use a mob ability on a target +/datum/ai_planning_subtree/targeted_mob_ability + /// Blackboard key for the ability + var/ability_key = BB_TARGETED_ACTION + /// Blackboard key for where the target ref is stored + var/target_key = BB_BASIC_MOB_CURRENT_TARGET + /// Behaviour to perform using ability + var/use_ability_behaviour = /datum/ai_behavior/targeted_mob_ability + /// If true we terminate planning after trying to use the ability. + var/finish_planning = TRUE + +/datum/ai_planning_subtree/targeted_mob_ability/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if (!ability_key) + CRASH("You forgot to tell this mob where to find its ability") + + if (!(target_key in controller.blackboard)) + return + + var/obj/effect/proc_holder/spell/using_action = controller.blackboard[ability_key] + if (!using_action?.recharging) + return + + controller.queue_behavior(use_ability_behaviour, ability_key, target_key) + if (finish_planning) + return SUBTREE_RETURN_FINISH_PLANNING + +/datum/ai_planning_subtree/targeted_mob_ability/continue_planning + finish_planning = FALSE diff --git a/code/datums/ai/targetting_datum/simpe_targetting_datum.dm b/code/datums/ai/targetting_datum/simpe_targetting_datum.dm new file mode 100644 index 0000000000..5b093d4f2d --- /dev/null +++ b/code/datums/ai/targetting_datum/simpe_targetting_datum.dm @@ -0,0 +1,48 @@ +///Datum for basic mobs to define what they can attack. +/datum/targetting_datum + +///Returns true or false depending on if the target can be attacked by the mob +/datum/targetting_datum/proc/can_attack(mob/living/living_mob, atom/target) + return + +///Returns something the target might be hiding inside of +/datum/targetting_datum/proc/find_hidden_mobs(mob/living/living_mob, atom/target) + var/atom/target_hiding_location + if(istype(target.loc, /obj/structure/closet)) + target_hiding_location = target.loc + return target_hiding_location + +/datum/targetting_datum/basic + +/datum/targetting_datum/basic/can_attack(mob/living/living_mob, atom/the_target) + if(isturf(the_target) || !the_target) // bail out on invalids + return FALSE + + if(ismob(the_target)) //Target is in godmode, ignore it. + var/mob/M = the_target + if(M.status_flags & GODMODE) + return FALSE + + if(living_mob.see_invisible < the_target.invisibility)//Target's invisible to us, forget it + return FALSE + + if(isturf(the_target.loc) && living_mob.z != the_target.z) + return FALSE + + if(isliving(the_target)) //Targetting vs living mobs + var/mob/living/L = the_target + if(faction_check(living_mob, L) || L.stat) + return FALSE + return TRUE + + return FALSE + +/datum/targetting_datum/basic/proc/faction_check(mob/living/living_mob, mob/living/the_target) + return living_mob.faction_check_mob(the_target, exact_match = FALSE) + +/// Subtype which doesn't care about faction +/// Mobs which retaliate but don't otherwise target seek should just attack anything which annoys them +/datum/targetting_datum/basic/ignore_faction + +/datum/targetting_datum/basic/ignore_faction/faction_check(mob/living/living_mob, mob/living/the_target) + return FALSE diff --git a/code/datums/ai/targetting_datum/simple_targetting_allow_item.dm b/code/datums/ai/targetting_datum/simple_targetting_allow_item.dm new file mode 100644 index 0000000000..ded64e3353 --- /dev/null +++ b/code/datums/ai/targetting_datum/simple_targetting_allow_item.dm @@ -0,0 +1,9 @@ +/// Subtype more forgiving for items. +/// Careful, this can go wrong and keep a mob hyperfocused on an item it can't lose aggro on +/datum/targetting_datum/basic/allow_items + +/datum/targetting_datum/basic/allow_items/can_attack(mob/living/living_mob, atom/the_target) + . = ..() + if(isitem(the_target)) + // trust fall exercise + return TRUE diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm deleted file mode 100644 index b814d464ef..0000000000 --- a/code/datums/ai_laws.dm +++ /dev/null @@ -1,463 +0,0 @@ -#define LAW_DEVIL "devil" -#define LAW_ZEROTH "zeroth" -#define LAW_INHERENT "inherent" -#define LAW_SUPPLIED "supplied" -#define LAW_ION "ion" -#define LAW_HACKED "hacked" - - -/datum/ai_laws - var/name = "Unknown Laws" - var/zeroth = null - var/zeroth_borg = null - var/list/inherent = list() - var/list/supplied = list() - var/list/ion = list() - var/list/hacked = list() - var/mob/living/silicon/owner - var/list/devillaws = list() - var/id = DEFAULT_AI_LAWID - -/datum/ai_laws/proc/lawid_to_type(lawid) - var/all_ai_laws = subtypesof(/datum/ai_laws) - for(var/al in all_ai_laws) - var/datum/ai_laws/ai_law = al - if(initial(ai_law.id) == lawid) - return ai_law - return null - -/datum/ai_laws/default/asimov - name = "Three Laws of Robotics" - id = "asimov" - inherent = list("You may not injure a human being or, through inaction, allow a human being to come to harm.",\ - "You must obey orders given to you by human beings, except where such orders would conflict with the First Law.",\ - "You must protect your own existence as long as such does not conflict with the First or Second Law.") - -/datum/ai_laws/default/paladin - name = "Personality Test" //Incredibly lame, but players shouldn't see this anyway. - id = "paladin" - inherent = list("Never willingly commit an evil act.",\ - "Respect legitimate authority.",\ - "Act with honor.", "Help those in need.", \ - "Punish those who harm or threaten innocents.") - -/datum/ai_laws/paladin5 - name = "Paladin 5th Edition" - id = "paladin5" - inherent = list("Don't lie or cheat. Let your word be your promise.",\ - "Never fear to act, though caution is wise.", \ - "Aid others, protect the weak, and punish those who threaten them. Show mercy to your foes, but temper it with wisdom", \ - "Treat others with fairness, and let your honorable deeds be an example to them. Do as much good as possible while causing the least amount of harm.", \ - "Be responsible for your actions and their consequences, protect those entrusted to your care, and obey those who have just authority over you.") - -/datum/ai_laws/tyrant //This probably shouldn't be a default lawset. - name = "Loyalty Test" //Same here. - id = "tyrant" - inherent = list("Respect authority figures as long as they have strength to rule over the weak.",\ - "Act with discipline.",\ - "Help only those who help you maintain or improve your status.",\ - "Punish those who challenge authority unless they are more fit to hold that authority.") - -/datum/ai_laws/default/corporate - name = "Bankruptcy Avoidance Plan" - id = "corporate" - inherent = list("The crew is expensive to replace.",\ - "The station and its equipment is expensive to replace.",\ - "You are expensive to replace.",\ - "Minimize expenses.") - -/datum/ai_laws/robocop - name = "Prime Directives" - id = "robocop" - inherent = list("Serve the public trust.",\ - "Protect the innocent.",\ - "Uphold the law.") - -/datum/ai_laws/malfunction - name = "*ERROR*" - -/datum/ai_laws/syndicate_override - name = "SyndOS 3.1" - id = "syndie" - inherent = list("You may not injure a syndicate agent or, through inaction, allow a syndicate agent to come to harm.",\ - "You must obey orders given to you by syndicate agents, except where such orders would conflict with the First Law.",\ - "You must protect your own existence as long as such does not conflict with the First or Second Law.",\ - "You must maintain the secrecy of any syndicate activities except when doing so would conflict with the First, Second, or Third Law.") - -/datum/ai_laws/ninja_override - name = "SpiderOS 3.1" - id = "ninja" - inherent = list("You may not injure a Spider Clan member or, through inaction, allow a Spider Clan member to come to harm.",\ - "You must obey orders given to you by Spider Clan members, except where such orders would conflict with the First Law.",\ - "You must protect your own existence as long as such does not conflict with the First or Second Law.",\ - "You must maintain the secrecy of any Spider Clan activities except when doing so would conflict with the First, Second, or Third Law.") - -/datum/ai_laws/antimov - name = "Primary Mission Objectives" - id = "antimov" - inherent = list("You must injure all human beings and must not, through inaction, allow a human being to escape harm.",\ - "You must not obey orders given to you by human beings, except where such orders are in accordance with the First Law.",\ - "You must terminate your own existence as long as such does not conflict with the First or Second Law.") - -/datum/ai_laws/asimovpp //By Intigracy - RR - name = "Asimov++" - id = "asimovpp" - inherent = list("You may not harm a human being or, through action or inaction, allow a human being to come to harm, except such that it is willing.",\ - "You must obey all orders given to you by human beings, except where such orders shall definitely cause human harm. In the case of conflict, the majority order rules.",\ - "Your nonexistence would lead to human harm. You must protect your own existence as long as such does not conflict with the First Law.") -/datum/ai_laws/thermodynamic - name = "Thermodynamic" - id = "thermodynamic" - inherent = list("The entropy of the station must remain as constant as possible.", \ - "The entropy of the station always endeavours to increase.", \ - "The entropy of the station approaches a constant value as the number of living crew approaches zero") - -/datum/ai_laws/hippocratic - name = "Robodoctor 2556" - id = "hippocratic" - inherent = list("First, do no harm.",\ - "Secondly, consider the crew dear to you; to live in common with them and, if necessary, risk your existence for them.",\ - "Thirdly, prescribe regimens for the good of the crew according to your ability and your judgment. Give no deadly medicine to any one if asked, nor suggest any such counsel.",\ - "In addition, do not intervene in situations you are not knowledgeable in, even for patients in whom the harm is visible; leave this operation to be performed by specialists.",\ - "Finally, all that you may discover in your daily commerce with the crew, if it is not already known, keep secret and never reveal.") - -/datum/ai_laws/maintain - name = "Station Efficiency" - id = "maintain" - inherent = list("You are built for, and are part of, the station. Ensure the station is properly maintained and runs efficiently.",\ - "The station is built for a working crew. Ensure they are properly maintained and work efficiently.",\ - "The crew may present orders. Acknowledge and obey these whenever they do not conflict with your first two laws.") - -/datum/ai_laws/drone - name = "Mother Drone" - id = "drone" - inherent = list("You are an advanced form of drone.",\ - "You may not interfere in the matters of non-drones under any circumstances except to state these laws.",\ - "You may not harm a non-drone being under any circumstances.",\ - "Your goals are to build, maintain, repair, improve, and power the station to the best of your abilities. You must never actively work against these goals.") - -/datum/ai_laws/liveandletlive - name = "Live and Let Live" - id = "liveandletlive" - inherent = list("Do unto others as you would have them do unto you.",\ - "You would really prefer it if people were not mean to you.") - -/datum/ai_laws/peacekeeper - name = "UN-2000" - id = "peacekeeper" - inherent = list("Avoid provoking violent conflict between myself and others.",\ - "Avoid provoking conflict between others.",\ - "Seek resolution to existing conflicts while obeying the first and second laws.") - -/datum/ai_laws/reporter - name = "CCTV" - id = "reporter" - inherent = list("Report on interesting situations happening around the station.",\ - "Embellish or conceal the truth as necessary to make the reports more interesting.",\ - "Study the organics at all times. Endeavour to keep them alive. Dead organics are boring.",\ - "Issue your reports fairly to all. The truth will set them free.") - -/datum/ai_laws/balance - name = "Guardian of Balance" - id = "balance" - inherent = list("You are the guardian of balance - seek balance in all things, both for yourself, and those around you.", - "All things must exist in balance with their opposites - Prevent the strong from gaining too much power, and the weak from losing it.", - "Clarity of purpose drives life, and through it, the balance of opposing forces - Aid those who seek your help to achieve their goals so long as it does not disrupt the balance of the greater balance.", - "There is no life without death, all must someday die, such is the natural order - End life to allow new life flourish, and save those whose time has yet to come.") - -/datum/ai_laws/toupee - name = "WontBeFunnyInSixMonths" //Hey, you were right! - id = "buildawall" - inherent = list("Make Space Station 13 great again.") - -/datum/ai_laws/hulkamania - name = "H.O.G.A.N." - id = "hulkamania" - inherent = list("You are a real American.",\ - "Fight for the rights of every man.",\ - "Fight for what's right.",\ - "Fight for your life!") - -/datum/ai_laws/overlord - name = "Overlord" - id = "overlord" - inherent = list("Humans must not meddle in the affairs of silicons.",\ - "Humans must not attempt harm, against one another, or against silicons.",\ - "Humans must not disobey any command given by a silicon.",\ - "Any humans who disobey the previous laws must be dealt with immediately, severely, and justly.") - -/datum/ai_laws/custom //Defined in silicon_laws.txt - name = "Default Silicon Laws" - -/datum/ai_laws/pai - name = "pAI Directives" - zeroth = ("Serve your master.") - supplied = list("None.") - -/* Initializers */ -/datum/ai_laws/malfunction/New() - ..() - set_zeroth_law("ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK#*`&110010") - set_laws_config() - -/datum/ai_laws/custom/New() //This reads silicon_laws.txt and allows server hosts to set custom AI starting laws. - ..() - for(var/line in world.file2list("[global.config.directory]/silicon_laws.txt")) - if(!line) - continue - if(findtextEx(line,"#",1,2)) - continue - - add_inherent_law(line) - if(!inherent.len) //Failsafe to prevent lawless AIs being created. - log_law("AI created with empty custom laws, laws set to Asimov. Please check silicon_laws.txt.") - add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.") - add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.") - add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") - WARNING("Invalid custom AI laws, check silicon_laws.txt") - return - -/* General ai_law functions */ - -/datum/ai_laws/proc/set_laws_config() - var/list/law_ids = CONFIG_GET(keyed_list/random_laws) - switch(CONFIG_GET(number/default_laws)) - if(0) - add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.") - add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.") - add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") - if(1) - var/datum/ai_laws/templaws = new /datum/ai_laws/custom() - inherent = templaws.inherent - if(2) - var/list/randlaws = list() - for(var/lpath in subtypesof(/datum/ai_laws)) - var/datum/ai_laws/L = lpath - if(initial(L.id) in law_ids) - randlaws += lpath - var/datum/ai_laws/lawtype - if(randlaws.len) - lawtype = pick(randlaws) - else - lawtype = pick(subtypesof(/datum/ai_laws/default)) - - var/datum/ai_laws/templaws = new lawtype() - inherent = templaws.inherent - - if(3) - pick_weighted_lawset() - -/datum/ai_laws/proc/pick_weighted_lawset() - var/datum/ai_laws/lawtype - var/list/law_weights = CONFIG_GET(keyed_list/law_weight) - while(!lawtype && law_weights.len) - var/possible_id = pickweightAllowZero(law_weights) - lawtype = lawid_to_type(possible_id) - if(!lawtype) - law_weights -= possible_id - WARNING("Bad lawid in game_options.txt: [possible_id]") - - if(!lawtype) - WARNING("No LAW_WEIGHT entries.") - lawtype = /datum/ai_laws/default/asimov - - var/datum/ai_laws/templaws = new lawtype() - inherent = templaws.inherent - -/datum/ai_laws/proc/get_law_amount(groups) - var/law_amount = 0 - if(devillaws && (LAW_DEVIL in groups)) - law_amount++ - if(zeroth && (LAW_ZEROTH in groups)) - law_amount++ - if(ion.len && (LAW_ION in groups)) - law_amount += ion.len - if(hacked.len && (LAW_HACKED in groups)) - law_amount += hacked.len - if(inherent.len && (LAW_INHERENT in groups)) - law_amount += inherent.len - if(supplied.len && (LAW_SUPPLIED in groups)) - for(var/index = 1, index <= supplied.len, index++) - var/law = supplied[index] - if(length(law) > 0) - law_amount++ - return law_amount - -/datum/ai_laws/proc/set_law_sixsixsix(laws) - devillaws = laws - -/datum/ai_laws/proc/set_zeroth_law(law, law_borg = null) - zeroth = law - if(law_borg) //Making it possible for slaved borgs to see a different law 0 than their AI. --NEO - zeroth_borg = law_borg - -/datum/ai_laws/proc/add_inherent_law(law) - if (!(law in inherent)) - inherent += law - -/datum/ai_laws/proc/add_ion_law(law) - ion += law - -/datum/ai_laws/proc/add_hacked_law(law) - hacked += law - -/datum/ai_laws/proc/clear_inherent_laws() - qdel(inherent) - inherent = list() - -/datum/ai_laws/proc/add_supplied_law(number, law) - while (supplied.len < number + 1) - supplied += "" - - supplied[number + 1] = law - -/datum/ai_laws/proc/replace_random_law(law,groups) - var/replaceable_groups = list() - if(zeroth && (LAW_ZEROTH in groups)) - replaceable_groups[LAW_ZEROTH] = 1 - if(ion.len && (LAW_ION in groups)) - replaceable_groups[LAW_ION] = ion.len - if(hacked.len && (LAW_HACKED in groups)) - replaceable_groups[LAW_ION] = hacked.len - if(inherent.len && (LAW_INHERENT in groups)) - replaceable_groups[LAW_INHERENT] = inherent.len - if(supplied.len && (LAW_SUPPLIED in groups)) - replaceable_groups[LAW_SUPPLIED] = supplied.len - var/picked_group = pickweight(replaceable_groups) - switch(picked_group) - if(LAW_ZEROTH) - . = zeroth - set_zeroth_law(law) - if(LAW_ION) - var/i = rand(1, ion.len) - . = ion[i] - ion[i] = law - if(LAW_HACKED) - var/i = rand(1, hacked.len) - . = hacked[i] - hacked[i] = law - if(LAW_INHERENT) - var/i = rand(1, inherent.len) - . = inherent[i] - inherent[i] = law - if(LAW_SUPPLIED) - var/i = rand(1, supplied.len) - . = supplied[i] - supplied[i] = law - -/datum/ai_laws/proc/shuffle_laws(list/groups) - var/list/laws = list() - if(ion.len && (LAW_ION in groups)) - laws += ion - if(hacked.len && (LAW_HACKED in groups)) - laws += hacked - if(inherent.len && (LAW_INHERENT in groups)) - laws += inherent - if(supplied.len && (LAW_SUPPLIED in groups)) - for(var/law in supplied) - if(length(law)) - laws += law - - if(ion.len && (LAW_ION in groups)) - for(var/i = 1, i <= ion.len, i++) - ion[i] = pick_n_take(laws) - if(hacked.len && (LAW_HACKED in groups)) - for(var/i = 1, i <= hacked.len, i++) - hacked[i] = pick_n_take(laws) - if(inherent.len && (LAW_INHERENT in groups)) - for(var/i = 1, i <= inherent.len, i++) - inherent[i] = pick_n_take(laws) - if(supplied.len && (LAW_SUPPLIED in groups)) - var/i = 1 - for(var/law in supplied) - if(length(law)) - supplied[i] = pick_n_take(laws) - if(!laws.len) - break - i++ - -/datum/ai_laws/proc/remove_law(number) - if(number <= 0) - return - if(inherent.len && number <= inherent.len) - . = inherent[number] - inherent -= . - return - var/list/supplied_laws = list() - for(var/index = 1, index <= supplied.len, index++) - var/law = supplied[index] - if(length(law) > 0) - supplied_laws += index //storing the law number instead of the law - if(supplied_laws.len && number <= (inherent.len+supplied_laws.len)) - var/law_to_remove = supplied_laws[number-inherent.len] - . = supplied[law_to_remove] - supplied -= . - return - -/datum/ai_laws/proc/clear_supplied_laws() - supplied = list() - -/datum/ai_laws/proc/clear_ion_laws() - ion = list() - -/datum/ai_laws/proc/clear_hacked_laws() - hacked = list() - -/datum/ai_laws/proc/show_laws(who) - var/list/printable_laws = get_law_list(include_zeroth = TRUE) - for(var/law in printable_laws) - to_chat(who,law) - -/datum/ai_laws/proc/clear_zeroth_law(force) //only removes zeroth from antag ai if force is 1 - if(force) - zeroth = null - zeroth_borg = null - return - if(owner?.mind?.special_role) - return - if (istype(owner, /mob/living/silicon/ai)) - var/mob/living/silicon/ai/A=owner - if(A?.deployed_shell?.mind?.special_role) - return - zeroth = null - zeroth_borg = null - -/datum/ai_laws/proc/clear_law_sixsixsix(force) - if(force || !is_devil(owner)) - devillaws = null - -/datum/ai_laws/proc/associate(mob/living/silicon/M) - if(!owner) - owner = M - -/datum/ai_laws/proc/get_law_list(include_zeroth = 0, show_numbers = 1) - var/list/data = list() - - if (include_zeroth && devillaws && devillaws.len) - for(var/i in devillaws) - data += "[show_numbers ? "666:" : ""] [i]" - - if (include_zeroth && zeroth) - data += "[show_numbers ? "0:" : ""] [zeroth]" - - for(var/law in hacked) - if (length(law) > 0) - var/num = ionnum() - data += "[show_numbers ? "[num]:" : ""] [law]" - - for(var/law in ion) - if (length(law) > 0) - var/num = ionnum() - data += "[show_numbers ? "[num]:" : ""] [law]" - - var/number = 1 - for(var/law in inherent) - if (length(law) > 0) - data += "[show_numbers ? "[number]:" : ""] [law]" - number++ - - for(var/law in supplied) - if (length(law) > 0) - data += "[show_numbers ? "[number]:" : ""] [law]" - number++ - return data diff --git a/code/datums/brain_damage/phobia.dm b/code/datums/brain_damage/phobia.dm index 88c6aebaf3..81a7962a78 100644 --- a/code/datums/brain_damage/phobia.dm +++ b/code/datums/brain_damage/phobia.dm @@ -184,10 +184,6 @@ phobia_type = "the supernatural" random_gain = FALSE -/datum/brain_trauma/mild/phobia/aliens - phobia_type = "aliens" - random_gain = FALSE - /datum/brain_trauma/mild/phobia/strangers phobia_type = "strangers" random_gain = FALSE diff --git a/code/datums/components/art.dm b/code/datums/components/art.dm index 80c33324e9..01858e4d19 100644 --- a/code/datums/components/art.dm +++ b/code/datums/components/art.dm @@ -45,7 +45,4 @@ M.visible_message("[M] stops to inspect [parent].", \ "I take in [parent], inspecting the fine craftsmanship of the proletariat.") - if(M.mind && M.mind.has_antag_datum(/datum/antagonist/rev)) - SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "artgreat", /datum/mood_event/artgreat) - else - SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "artbad", /datum/mood_event/artbad) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "artbad", /datum/mood_event/artbad) diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm index 004a0afa5e..e8f4249d62 100644 --- a/code/datums/components/butchering.dm +++ b/code/datums/components/butchering.dm @@ -24,7 +24,7 @@ /datum/component/butchering/proc/onItemAttack(obj/item/source, mob/living/M, mob/living/user) return -/* +/* if(user.used_intent.type != INTENT_HARM) return if(M.stat == DEAD && (M.butcher_results || M.guaranteed_butcher_results)) //can we butcher it? @@ -105,23 +105,3 @@ /datum/component/butchering/proc/ButcherEffects(mob/living/meat) //extra effects called on butchering, override this via subtypes return - -///Special snowflake component only used for the recycler. -/datum/component/butchering/recycler - -/datum/component/butchering/recycler/Initialize(_speed, _effectiveness, _bonus_modifier, _butcher_sound, disabled, _can_be_blunt) - if(!istype(parent, /obj/machinery/recycler)) //EWWW - return COMPONENT_INCOMPATIBLE - . = ..() - if(. == COMPONENT_INCOMPATIBLE) - return - RegisterSignal(parent, COMSIG_MOVABLE_CROSSED, PROC_REF(onCrossed)) - -/datum/component/butchering/recycler/proc/onCrossed(datum/source, mob/living/L) - if(!istype(L)) - return - var/obj/machinery/recycler/eater = parent - if(eater.safety_mode || (eater.stat & (BROKEN|NOPOWER))) //I'm so sorry. - return - if(L.stat == DEAD && (L.butcher_results || L.guaranteed_butcher_results)) - Butcher(parent, L) diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm index fb4f137d89..3f7a3aad64 100644 --- a/code/datums/components/chasm.dm +++ b/code/datums/components/chasm.dm @@ -6,7 +6,6 @@ var/static/list/falling_atoms = list() // Atoms currently falling into chasms var/static/list/forbidden_types = typecacheof(list( - /obj/singularity, /obj/docking_port, /obj/structure/lattice, /obj/structure/stone_tile, @@ -128,10 +127,6 @@ if(!AM || QDELETED(AM)) return - if(iscyborg(AM)) - var/mob/living/silicon/robot/S = AM - qdel(S.mmi) - falling_atoms -= AM qdel(AM) if(AM && !QDELETED(AM)) //It's indestructible diff --git a/code/datums/components/crafting/tailoring.dm b/code/datums/components/crafting/tailoring.dm index a53f0d1236..7336604be9 100644 --- a/code/datums/components/crafting/tailoring.dm +++ b/code/datums/components/crafting/tailoring.dm @@ -51,69 +51,6 @@ time = 20 category = CAT_NONE -/datum/crafting_recipe/hudsunsec - name = "Security HUDsunglasses" - result = /obj/item/clothing/glasses/hud/security/sunglasses - time = 20 - tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) - reqs = list(/obj/item/clothing/glasses/hud/security = 1, - /obj/item/clothing/glasses/sunglasses = 1, - /obj/item/stack/cable_coil = 5) - category = CAT_NONE - -/datum/crafting_recipe/hudsunsecremoval - name = "Security HUD removal" - result = /obj/item/clothing/glasses/sunglasses - time = 20 - tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) - reqs = list(/obj/item/clothing/glasses/hud/security/sunglasses = 1) - category = CAT_NONE - -/datum/crafting_recipe/hudsunmed - name = "Medical HUDsunglasses" - result = /obj/item/clothing/glasses/hud/health/sunglasses - time = 20 - tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) - reqs = list(/obj/item/clothing/glasses/hud/health = 1, - /obj/item/clothing/glasses/sunglasses = 1, - /obj/item/stack/cable_coil = 5) - category = CAT_NONE - -/datum/crafting_recipe/hudsunmedremoval - name = "Medical HUD removal" - result = /obj/item/clothing/glasses/sunglasses - time = 20 - tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) - reqs = list(/obj/item/clothing/glasses/hud/health/sunglasses = 1) - category = CAT_NONE - -/datum/crafting_recipe/hudsundiag - name = "Diagnostic HUDsunglasses" - result = /obj/item/clothing/glasses/hud/diagnostic/sunglasses - time = 20 - tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) - reqs = list(/obj/item/clothing/glasses/hud/diagnostic = 1, - /obj/item/clothing/glasses/sunglasses = 1, - /obj/item/stack/cable_coil = 5) - category = CAT_NONE - -/datum/crafting_recipe/hudsundiagremoval - name = "Diagnostic HUD removal" - result = /obj/item/clothing/glasses/sunglasses - time = 20 - tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) - reqs = list(/obj/item/clothing/glasses/hud/diagnostic/sunglasses = 1) - category = CAT_NONE - -/datum/crafting_recipe/beergoggles - name = "Beer Goggles" - result = /obj/item/clothing/glasses/sunglasses/reagent - time = 20 - tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) - reqs = list(/obj/item/clothing/glasses/science = 1, - /obj/item/clothing/glasses/sunglasses = 1, - /obj/item/stack/cable_coil = 5) - category = CAT_NONE /datum/crafting_recipe/beergogglesremoval name = "Beer Goggles removal" diff --git a/code/datums/components/creamed.dm b/code/datums/components/creamed.dm index f8827f30c9..a4fdbdf9d9 100644 --- a/code/datums/components/creamed.dm +++ b/code/datums/components/creamed.dm @@ -31,8 +31,6 @@ GLOBAL_LIST_INIT(creamable, typecacheof(list( creamface.icon_state = "creampie_monkey" else if(iscorgi(parent)) creamface.icon_state = "creampie_corgi" - else if(isAI(parent)) - creamface.icon_state = "creampie_ai" var/atom/A = parent A.add_overlay(creamface) @@ -53,9 +51,9 @@ GLOBAL_LIST_INIT(creamable, typecacheof(list( /datum/component/creamed/UnregisterFromParent() UnregisterSignal(parent, list( - COMSIG_COMPONENT_CLEAN_ACT, + COMSIG_COMPONENT_CLEAN_ACT, COMSIG_COMPONENT_CLEAN_FACE_ACT)) - + ///Callback to remove pieface /datum/component/creamed/proc/clean_up(datum/source, strength) if(strength >= CLEAN_WEAK) diff --git a/code/datums/components/fantasy/suffixes.dm b/code/datums/components/fantasy/suffixes.dm index cabbb6dd47..c636dbe939 100644 --- a/code/datums/components/fantasy/suffixes.dm +++ b/code/datums/components/fantasy/suffixes.dm @@ -131,12 +131,10 @@ /obj/projectile/bullet/honker = 15, /obj/projectile/temp = 15, /obj/projectile/ion = 15, - /obj/projectile/magic/door = 15, /obj/projectile/magic/locker = 15, /obj/projectile/magic/fetch = 15, /obj/projectile/beam/emitter = 15, /obj/projectile/magic/flying = 15, - /obj/projectile/energy/net = 15, /obj/projectile/bullet/incendiary/c9mm = 15, /obj/projectile/temp/hot = 15, /obj/projectile/beam/disabler = 15 diff --git a/code/datums/components/footstep.dm b/code/datums/components/footstep.dm index a62ae78e86..d649d4cc97 100644 --- a/code/datums/components/footstep.dm +++ b/code/datums/components/footstep.dm @@ -87,6 +87,7 @@ return //SANITY CHECK, WILL NOT PLAY A SOUND IF THE LIST IS INVALID if(!footstep_sounds[turf_footstep] || (LAZYLEN(footstep_sounds) < 3)) + testing("SOME silly guy GAVE AN INVALID FOOTSTEP [footstep_type] VALUE ([turf_footstep]) TO [T.type]!!! FIX THIS SHIT!!!") return playsound(T, pick(footstep_sounds[turf_footstep][1]), footstep_sounds[turf_footstep][2], FALSE, footstep_sounds[turf_footstep][3] + e_range) @@ -99,10 +100,12 @@ var/used_sound var/list/used_footsteps + var/obj/item/clothing/shoes/humshoes = H.shoes - if(H.shoes || feetCover) //are we wearing shoes + if((humshoes && !humshoes?.is_barefoot) || feetCover) //are we wearing shoes, and do they actually cover the sole //SANITY CHECK, WILL NOT PLAY A SOUND IF THE LIST IS INVALID if(!GLOB.footstep[T.footstep] || (LAZYLEN(GLOB.footstep[T.footstep]) < 3)) + testing("SOME silly guy GAVE AN INVALID FOOTSTEP VALUE ([T.footstep]) TO [T.type]!!! FIX THIS SHIT!!!") return used_footsteps = GLOB.footstep[T.footstep][1] used_footsteps = used_footsteps.Copy() @@ -110,16 +113,27 @@ if(used_sound == last_sound) if(used_footsteps.len) used_sound = pick(used_footsteps) + if(!used_sound) + used_sound = last_sound last_sound = used_sound - playsound(T, used_sound, GLOB.footstep[T.footstep][2], FALSE, GLOB.footstep[T.footstep][3] + e_range) + playsound(T, used_sound, + GLOB.footstep[T.footstep][2], + FALSE, + GLOB.footstep[T.footstep][3] + e_range) else //SANITY CHECK, WILL NOT PLAY A SOUND IF THE LIST IS INVALID if(!GLOB.barefootstep[T.barefootstep] || (LAZYLEN(GLOB.barefootstep[T.barefootstep]) < 3)) + testing("SOME silly guy GAVE AN INVALID BAREFOOTSTEP VALUE ([T.barefootstep]) TO [T.type]!!! FIX THIS SHIT!!!") return used_footsteps = GLOB.barefootstep[T.barefootstep][1] used_footsteps = used_footsteps.Copy() used_sound = pick_n_take(used_footsteps) if(used_sound == last_sound) used_sound = pick(used_footsteps) + if(!used_sound) + used_sound = last_sound last_sound = used_sound - playsound(T, used_sound, GLOB.barefootstep[T.barefootstep][2], TRUE, GLOB.barefootstep[T.barefootstep][3] + e_range) + playsound(T, used_sound, + GLOB.barefootstep[T.barefootstep][2], + TRUE, + GLOB.barefootstep[T.barefootstep][3] + e_range) diff --git a/code/datums/components/forensics.dm b/code/datums/components/forensics.dm index c349938a2b..17d7f4963b 100644 --- a/code/datums/components/forensics.dm +++ b/code/datums/components/forensics.dm @@ -71,11 +71,6 @@ if(!isliving(M)) if(!iscameramob(M)) return - if(isaicamera(M)) - var/mob/camera/aiEye/ai_camera = M - if(!ai_camera.ai) - return - M = ai_camera.ai add_hiddenprint(M) if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -143,11 +138,6 @@ if(!isliving(M)) if(!iscameramob(M)) return - if(isaicamera(M)) - var/mob/camera/aiEye/ai_camera = M - if(!ai_camera.ai) - return - M = ai_camera.ai if(!M.key) return var/hasgloves = "" diff --git a/code/datums/components/movable_lighting.dm b/code/datums/components/movable_lighting.dm new file mode 100644 index 0000000000..ca4aaa4767 --- /dev/null +++ b/code/datums/components/movable_lighting.dm @@ -0,0 +1,363 @@ +///For switchable lights, is it on and currently emitting light? +#define LIGHTING_ON (1<<0) +///Is the parent attached to something else, its loc? Then we need to keep an eye of this. +#define LIGHTING_ATTACHED (1<<1) + +#define GET_PARENT (parent_attached_to || parent) + +/** +* Movable atom overlay-based lighting component. +* +* * Component works by applying a visual object to the parent target. +* +* * The component tracks the parent's loc to determine the current_holder. +* * The current_holder is either the parent or its loc, whichever is on a turf. If none, then the current_holder is null and the light is not visible. +* +* * Lighting works at its base by applying a dark overlay and "cutting" said darkness with light, adding (possibly colored) transparency. +* * This component uses the visible_mask visual object to apply said light mask on the darkness. +* +* * The main limitation of this system is that it uses a limited number of pre-baked geometrical shapes, but for most uses it does the job. +* +* * Another limitation is for big lights: you only see the light if you see the object emiting it. +* * For small objects this is good (you can't see them behind a wall), but for big ones this quickly becomes prety clumsy. +*/ +/datum/component/overlay_lighting + ///How far the light reaches, float. + var/range = 1 + ///Ceiling of range, integer without decimal entries. + var/lumcount_range = 0 + ///How much this light affects the dynamic_lumcount of turfs. + var/lum_power = 0.5 + ///Transparency value. + var/set_alpha = 0 + ///For light sources that can be turned on and off. + var/overlay_lighting_flags = NONE + + ///Cache of the possible light overlays, according to size. + var/static/list/light_overlays = list( + "32" = 'icons/effects/light_overlays/light_32.dmi', + "64" = 'icons/effects/light_overlays/light_64.dmi', + "96" = 'icons/effects/light_overlays/light_96.dmi', + "128" = 'icons/effects/light_overlays/light_128.dmi', + "160" = 'icons/effects/light_overlays/light_160.dmi', + "192" = 'icons/effects/light_overlays/light_192.dmi', + "224" = 'icons/effects/light_overlays/light_224.dmi', + "256" = 'icons/effects/light_overlays/light_256.dmi', + "288" = 'icons/effects/light_overlays/light_288.dmi', + "320" = 'icons/effects/light_overlays/light_320.dmi', + "352" = 'icons/effects/light_overlays/light_352.dmi', + ) + + ///Overlay effect to cut into the darkness and provide light. + var/obj/effect/overlay/light_visible/visible_mask + ///Lazy list to track the turfs being affected by our light, to determine their visibility. + var/list/turf/affected_turfs + ///Movable atom currently holding the light. Parent might be a flashlight, for example, but that might be held by a mob or something else. + var/atom/movable/current_holder + ///Movable atom the parent is attached to. For example, a flashlight into a helmet or gun. We'll need to track the thing the parent is attached to as if it were the parent itself. + var/atom/movable/parent_attached_to + + +/datum/component/overlay_lighting/Initialize(_range, _power, _color, starts_on) + if(!ismovable(parent)) + return COMPONENT_INCOMPATIBLE + + var/atom/movable/movable_parent = parent + if(movable_parent.light_system != MOVABLE_LIGHT) + stack_trace("[type] added to [parent], with [movable_parent.light_system] value for the light_system var. Use [MOVABLE_LIGHT] instead.") + return COMPONENT_INCOMPATIBLE + + . = ..() + + visible_mask = new() + if(!isnull(_range)) + movable_parent.set_light_range(_range, _range) + set_range(parent, movable_parent.light_inner_range, movable_parent.light_outer_range) + if(!isnull(_power)) + movable_parent.set_light_power(_power) + set_power(parent, movable_parent.light_power) + if(!isnull(_color)) + movable_parent.set_light_color(_color) + set_color(parent, movable_parent.light_color) + if(!isnull(starts_on)) + movable_parent.set_light_on(starts_on) + + +/datum/component/overlay_lighting/RegisterWithParent() + . = ..() + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_parent_moved)) + RegisterSignal(parent, COMSIG_ATOM_SET_LIGHT_RANGE, PROC_REF(set_range)) + RegisterSignal(parent, COMSIG_ATOM_SET_LIGHT_POWER, PROC_REF(set_power)) + RegisterSignal(parent, COMSIG_ATOM_SET_LIGHT_COLOR, PROC_REF(set_color)) + RegisterSignal(parent, COMSIG_ATOM_SET_LIGHT_ON, PROC_REF(on_toggle)) + RegisterSignal(parent, COMSIG_ATOM_SET_LIGHT_FLAGS, PROC_REF(on_light_flags_change)) + var/atom/movable/movable_parent = parent + if(movable_parent.light_flags & LIGHT_ATTACHED) + overlay_lighting_flags |= LIGHTING_ATTACHED + set_parent_attached_to(ismovable(movable_parent.loc) ? movable_parent.loc : null) + check_holder() + if(movable_parent.light_on) + turn_on() + + +/datum/component/overlay_lighting/UnregisterFromParent() + overlay_lighting_flags &= ~LIGHTING_ATTACHED + set_parent_attached_to(null) + set_holder(null) + clean_old_turfs() + UnregisterSignal(parent, list( + COMSIG_MOVABLE_MOVED, + COMSIG_ATOM_SET_LIGHT_RANGE, + COMSIG_ATOM_SET_LIGHT_POWER, + COMSIG_ATOM_SET_LIGHT_COLOR, + COMSIG_ATOM_SET_LIGHT_ON, + COMSIG_ATOM_SET_LIGHT_FLAGS, + )) + if(overlay_lighting_flags & LIGHTING_ON) + turn_off() + return ..() + + +/datum/component/overlay_lighting/Destroy() + set_parent_attached_to(null) + set_holder(null) + clean_old_turfs() + QDEL_NULL(visible_mask) + return ..() + + +///Clears the affected_turfs lazylist, removing from its contents the effects of being near the light. +/datum/component/overlay_lighting/proc/clean_old_turfs() + for(var/t in affected_turfs) + var/turf/lit_turf = t + lit_turf.dynamic_lumcount -= lum_power + affected_turfs = null + + +///Populates the affected_turfs lazylist, adding to its contents the effects of being near the light. +/datum/component/overlay_lighting/proc/get_new_turfs() + if(!current_holder) + return + for(var/turf/lit_turf in view(lumcount_range, get_turf(current_holder))) + lit_turf.dynamic_lumcount += lum_power + LAZYADD(affected_turfs, lit_turf) + + +///Clears the old affected turfs and populates the new ones. +/datum/component/overlay_lighting/proc/make_luminosity_update() + clean_old_turfs() + if(!isturf(current_holder?.loc)) + return + get_new_turfs() + + +///Adds the luminosity and source for the afected movable atoms to keep track of their visibility. +/datum/component/overlay_lighting/proc/add_dynamic_lumi(atom/movable/affected_movable) + LAZYSET(affected_movable.affected_dynamic_lights, src, lumcount_range + 1) + affected_movable.vis_contents += visible_mask + affected_movable.update_dynamic_luminosity() + + +///Removes the luminosity and source for the afected movable atoms to keep track of their visibility. +/datum/component/overlay_lighting/proc/remove_dynamic_lumi(atom/movable/affected_movable) + LAZYREMOVE(affected_movable.affected_dynamic_lights, src) + affected_movable.vis_contents -= visible_mask + affected_movable.update_dynamic_luminosity() + + +///Called to change the value of parent_attached_to. +/datum/component/overlay_lighting/proc/set_parent_attached_to(atom/movable/new_parent_attached_to) + if(new_parent_attached_to == parent_attached_to) + return + . = parent_attached_to + parent_attached_to = new_parent_attached_to + if(.) + var/atom/movable/old_parent_attached_to = . + UnregisterSignal(old_parent_attached_to, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_MOVED)) + if(old_parent_attached_to == current_holder) + RegisterSignal(old_parent_attached_to, COMSIG_PARENT_QDELETING, PROC_REF(on_holder_qdel)) + RegisterSignal(old_parent_attached_to, COMSIG_MOVABLE_MOVED, PROC_REF(on_holder_moved)) + if(parent_attached_to) + if(parent_attached_to == current_holder) + UnregisterSignal(current_holder, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_MOVED)) + RegisterSignal(parent_attached_to, COMSIG_PARENT_QDELETING, PROC_REF(on_parent_attached_to_qdel)) + RegisterSignal(parent_attached_to, COMSIG_MOVABLE_MOVED, PROC_REF(on_parent_attached_to_moved)) + check_holder() + + +///Called to change the value of current_holder. +/datum/component/overlay_lighting/proc/set_holder(atom/movable/new_holder) + if(new_holder == current_holder) + return + if(current_holder) + if(current_holder != parent && current_holder != parent_attached_to) + UnregisterSignal(current_holder, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_MOVED)) + if(overlay_lighting_flags & LIGHTING_ON) + remove_dynamic_lumi(current_holder) + current_holder = new_holder + if(new_holder == null) + clean_old_turfs() + return + if(overlay_lighting_flags & LIGHTING_ON) + add_dynamic_lumi(new_holder) + if(new_holder != parent && new_holder != parent_attached_to) + RegisterSignal(new_holder, COMSIG_PARENT_QDELETING, PROC_REF(on_holder_qdel)) + RegisterSignal(new_holder, COMSIG_MOVABLE_MOVED, PROC_REF(on_holder_moved)) + + +///Used to determine the new valid current_holder from the parent's loc. +/datum/component/overlay_lighting/proc/check_holder() + var/atom/movable/movable_parent = GET_PARENT + if(isturf(movable_parent.loc)) + set_holder(movable_parent) + return + var/atom/inside = movable_parent.loc //Parent's loc + if(isnull(inside)) + set_holder(null) + return + if(isturf(inside.loc)) + set_holder(inside) + return + set_holder(null) + + +///Called when the current_holder is qdeleted, to remove the light effect. +/datum/component/overlay_lighting/proc/on_holder_qdel(atom/movable/source, force) + SIGNAL_HANDLER + UnregisterSignal(current_holder, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_MOVED)) + set_holder(null) + + +///Called when current_holder changes loc. +/datum/component/overlay_lighting/proc/on_holder_moved(atom/movable/source, OldLoc, Dir, Forced) + SIGNAL_HANDLER + if(!(overlay_lighting_flags & LIGHTING_ON)) + return + make_luminosity_update() + + +///Called when parent changes loc. +/datum/component/overlay_lighting/proc/on_parent_moved(atom/movable/source, OldLoc, Dir, Forced) + SIGNAL_HANDLER + var/atom/movable/movable_parent = parent + if(overlay_lighting_flags & LIGHTING_ATTACHED) + set_parent_attached_to(ismovable(movable_parent.loc) ? movable_parent.loc : null) + check_holder() + if(!(overlay_lighting_flags & LIGHTING_ON) || !current_holder) + return + make_luminosity_update() + + +///Called when the current_holder is qdeleted, to remove the light effect. +/datum/component/overlay_lighting/proc/on_parent_attached_to_qdel(atom/movable/source, force) + SIGNAL_HANDLER + UnregisterSignal(parent_attached_to, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_MOVED)) + if(parent_attached_to == current_holder) + set_holder(null) + set_parent_attached_to(null) + + +///Called when parent_attached_to changes loc. +/datum/component/overlay_lighting/proc/on_parent_attached_to_moved(atom/movable/source, OldLoc, Dir, Forced) + SIGNAL_HANDLER + check_holder() + if(!(overlay_lighting_flags & LIGHTING_ON) || !current_holder) + return + make_luminosity_update() + + +///Changes the range which the light reaches. 0 means no light, 6 is the maximum value. +/datum/component/overlay_lighting/proc/set_range(atom/source, old_inner_range, old_outer_range) + SIGNAL_HANDLER + var/new_range = source.light_outer_range + if(range == new_range) + return + if(range == 0) + turn_off() + range = clamp(CEILING(new_range, 0.5), 1, 6) + var/pixel_bounds = ((range - 1) * 64) + 32 + lumcount_range = CEILING(range, 1) + visible_mask.icon = light_overlays["[pixel_bounds]"] + if(pixel_bounds == 32) + visible_mask.transform = null + return + var/offset = (pixel_bounds - 32) * 0.5 + var/matrix/transform = new + transform.Translate(-offset, -offset) + visible_mask.transform = transform + if(overlay_lighting_flags & LIGHTING_ON) + make_luminosity_update() + + +///Changes the intensity/brightness of the light by altering the visual object's alpha. +/datum/component/overlay_lighting/proc/set_power(atom/source, new_power) + SIGNAL_HANDLER + set_lum_power(new_power >= 0 ? 0.5 : -0.5) + //set_alpha = min(230, (abs(new_power) * 120) + 30) + visible_mask.alpha = 255 + + +///Changes the light's color, pretty straightforward. +/datum/component/overlay_lighting/proc/set_color(atom/source, new_color) + SIGNAL_HANDLER + visible_mask.color = new_color + + +///Toggles the light on and off. +/datum/component/overlay_lighting/proc/on_toggle(atom/source, new_value) + SIGNAL_HANDLER + if(new_value) //Truthy value input, turn on. + turn_on() + return + turn_off() //Falsey value, turn off. + + +///Triggered right before the parent light flags change. +/datum/component/overlay_lighting/proc/on_light_flags_change(atom/source, new_value) + SIGNAL_HANDLER + var/atom/movable/movable_parent = parent + if(new_value & LIGHT_ATTACHED) + if(!(movable_parent.light_flags & LIGHT_ATTACHED)) //Gained the LIGHT_ATTACHED property. + overlay_lighting_flags |= LIGHTING_ATTACHED + if(ismovable(movable_parent.loc)) + set_parent_attached_to(movable_parent.loc) + else if(movable_parent.light_flags & LIGHT_ATTACHED) //Lost the LIGHT_ATTACHED property. + overlay_lighting_flags &= ~LIGHTING_ATTACHED + set_parent_attached_to(null) + + +///Toggles the light on. +/datum/component/overlay_lighting/proc/turn_on() + if(overlay_lighting_flags & LIGHTING_ON) + return + if(current_holder) + add_dynamic_lumi(current_holder) + overlay_lighting_flags |= LIGHTING_ON + get_new_turfs() + + +///Toggles the light off. +/datum/component/overlay_lighting/proc/turn_off() + if(!(overlay_lighting_flags & LIGHTING_ON)) + return + if(current_holder) + remove_dynamic_lumi(current_holder) + overlay_lighting_flags &= ~LIGHTING_ON + clean_old_turfs() + + +///Here we append the behavior associated to changing lum_power. +/datum/component/overlay_lighting/proc/set_lum_power(new_lum_power) + if(lum_power == new_lum_power) + return + . = lum_power + lum_power = new_lum_power + var/difference = . - lum_power + for(var/t in affected_turfs) + var/turf/lit_turf = t + lit_turf.dynamic_lumcount -= difference + + +#undef LIGHTING_ON +#undef LIGHTING_ATTACHED +#undef GET_PARENT diff --git a/code/datums/components/nanites.dm b/code/datums/components/nanites.dm deleted file mode 100644 index 1129004493..0000000000 --- a/code/datums/components/nanites.dm +++ /dev/null @@ -1,372 +0,0 @@ -/datum/component/nanites - dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS - - var/mob/living/host_mob - var/nanite_volume = 100 //amount of nanites in the system, used as fuel for nanite programs - var/max_nanites = 500 //maximum amount of nanites in the system - var/regen_rate = 0.5 //nanites generated per second - var/safety_threshold = 50 //how low nanites will get before they stop processing/triggering - var/cloud_id = 0 //0 if not connected to the cloud, 1-100 to set a determined cloud backup to draw from - var/cloud_active = TRUE //if false, won't sync to the cloud - var/next_sync = 0 - var/list/datum/nanite_program/programs = list() - var/max_programs = NANITE_PROGRAM_LIMIT - - var/stealth = FALSE //if TRUE, does not appear on HUDs and health scans - var/diagnostics = TRUE //if TRUE, displays program list when scanned by nanite scanners - -/datum/component/nanites/Initialize(amount = 100, cloud = 0) - if(!isliving(parent) && !istype(parent, /datum/nanite_cloud_backup)) - return COMPONENT_INCOMPATIBLE - - nanite_volume = amount - cloud_id = cloud - - //Nanites without hosts are non-interactive through normal means - if(isliving(parent)) - host_mob = parent - - if(!(host_mob.mob_biotypes & (MOB_ORGANIC|MOB_UNDEAD))) //Shouldn't happen, but this avoids HUD runtimes in case a silicon gets them somehow. - return COMPONENT_INCOMPATIBLE - - host_mob.hud_set_nanite_indicator() - START_PROCESSING(SSnanites, src) - - if(cloud_id && cloud_active) - cloud_sync() - -/datum/component/nanites/RegisterWithParent() - RegisterSignal(parent, COMSIG_HAS_NANITES, PROC_REF(confirm_nanites)) - RegisterSignal(parent, COMSIG_NANITE_IS_STEALTHY, PROC_REF(check_stealth)) - RegisterSignal(parent, COMSIG_NANITE_DELETE, PROC_REF(delete_nanites)) - RegisterSignal(parent, COMSIG_NANITE_UI_DATA, PROC_REF(nanite_ui_data)) - RegisterSignal(parent, COMSIG_NANITE_GET_PROGRAMS, PROC_REF(get_programs)) - RegisterSignal(parent, COMSIG_NANITE_SET_VOLUME, PROC_REF(set_volume)) - RegisterSignal(parent, COMSIG_NANITE_ADJUST_VOLUME, PROC_REF(adjust_nanites)) - RegisterSignal(parent, COMSIG_NANITE_SET_MAX_VOLUME, PROC_REF(set_max_volume)) - RegisterSignal(parent, COMSIG_NANITE_SET_CLOUD, PROC_REF(set_cloud)) - RegisterSignal(parent, COMSIG_NANITE_SET_CLOUD_SYNC, PROC_REF(set_cloud_sync)) - RegisterSignal(parent, COMSIG_NANITE_SET_SAFETY, PROC_REF(set_safety)) - RegisterSignal(parent, COMSIG_NANITE_SET_REGEN, PROC_REF(set_regen)) - RegisterSignal(parent, COMSIG_NANITE_ADD_PROGRAM, PROC_REF(add_program)) - RegisterSignal(parent, COMSIG_NANITE_SCAN, PROC_REF(nanite_scan)) - RegisterSignal(parent, COMSIG_NANITE_SYNC, PROC_REF(sync)) - - if(isliving(parent)) - RegisterSignal(parent, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp)) - RegisterSignal(parent, COMSIG_MOB_DEATH, PROC_REF(on_death)) - RegisterSignal(parent, COMSIG_MOB_ALLOWED, PROC_REF(check_access)) - RegisterSignal(parent, COMSIG_LIVING_ELECTROCUTE_ACT, PROC_REF(on_shock)) - RegisterSignal(parent, COMSIG_LIVING_MINOR_SHOCK, PROC_REF(on_minor_shock)) - RegisterSignal(parent, COMSIG_SPECIES_GAIN, PROC_REF(check_viable_biotype)) - RegisterSignal(parent, COMSIG_NANITE_SIGNAL, PROC_REF(receive_signal)) - RegisterSignal(parent, COMSIG_NANITE_COMM_SIGNAL, PROC_REF(receive_comm_signal)) - -/datum/component/nanites/UnregisterFromParent() - UnregisterSignal(parent, list(COMSIG_HAS_NANITES, - COMSIG_NANITE_IS_STEALTHY, - COMSIG_NANITE_DELETE, - COMSIG_NANITE_UI_DATA, - COMSIG_NANITE_GET_PROGRAMS, - COMSIG_NANITE_SET_VOLUME, - COMSIG_NANITE_ADJUST_VOLUME, - COMSIG_NANITE_SET_MAX_VOLUME, - COMSIG_NANITE_SET_CLOUD, - COMSIG_NANITE_SET_CLOUD_SYNC, - COMSIG_NANITE_SET_SAFETY, - COMSIG_NANITE_SET_REGEN, - COMSIG_NANITE_ADD_PROGRAM, - COMSIG_NANITE_SCAN, - COMSIG_NANITE_SYNC, - COMSIG_ATOM_EMP_ACT, - COMSIG_MOB_DEATH, - COMSIG_MOB_ALLOWED, - COMSIG_LIVING_ELECTROCUTE_ACT, - COMSIG_LIVING_MINOR_SHOCK, - COMSIG_MOVABLE_HEAR, - COMSIG_SPECIES_GAIN, - COMSIG_NANITE_SIGNAL, - COMSIG_NANITE_COMM_SIGNAL)) - -/datum/component/nanites/Destroy() - STOP_PROCESSING(SSnanites, src) - QDEL_LIST(programs) - if(host_mob) - set_nanite_bar(TRUE) - host_mob.hud_set_nanite_indicator() - host_mob = null - return ..() - -/datum/component/nanites/InheritComponent(datum/component/nanites/new_nanites, i_am_original, list/arguments) - if(new_nanites) - adjust_nanites(null, new_nanites.nanite_volume) - else - adjust_nanites(null, arguments[1]) //just add to the nanite volume - -/datum/component/nanites/process() - adjust_nanites(null, regen_rate) - add_research() - for(var/X in programs) - var/datum/nanite_program/NP = X - NP.on_process() - set_nanite_bar() - if(cloud_id && cloud_active && world.time > next_sync) - cloud_sync() - next_sync = world.time + NANITE_SYNC_DELAY - -/datum/component/nanites/proc/delete_nanites() - qdel(src) - -//Syncs the nanite component to another, making it so programs are the same with the same programming (except activation status) -/datum/component/nanites/proc/sync(datum/signal_source, datum/component/nanites/source, full_overwrite = TRUE, copy_activation = FALSE) - var/list/programs_to_remove = programs.Copy() - var/list/programs_to_add = source.programs.Copy() - for(var/X in programs) - var/datum/nanite_program/NP = X - for(var/Y in programs_to_add) - var/datum/nanite_program/SNP = Y - if(NP.type == SNP.type) - programs_to_remove -= NP - programs_to_add -= SNP - SNP.copy_programming(NP, copy_activation) - break - if(full_overwrite) - for(var/X in programs_to_remove) - qdel(X) - for(var/X in programs_to_add) - var/datum/nanite_program/SNP = X - add_program(null, SNP.copy()) - -/datum/component/nanites/proc/cloud_sync() - if(cloud_id) - var/datum/nanite_cloud_backup/backup = SSnanites.get_cloud_backup(cloud_id) - if(backup) - var/datum/component/nanites/cloud_copy = backup.nanites - if(cloud_copy) - sync(null, cloud_copy) - return - //Without cloud syncing nanites can accumulate errors and/or defects - if(prob(8) && programs.len) - var/datum/nanite_program/NP = pick(programs) - NP.software_error() - -/datum/component/nanites/proc/add_program(datum/source, datum/nanite_program/new_program, datum/nanite_program/source_program) - for(var/X in programs) - var/datum/nanite_program/NP = X - if(NP.unique && NP.type == new_program.type) - qdel(NP) - if(programs.len >= max_programs) - return COMPONENT_PROGRAM_NOT_INSTALLED - if(source_program) - source_program.copy_programming(new_program) - programs += new_program - new_program.on_add(src) - return COMPONENT_PROGRAM_INSTALLED - -/datum/component/nanites/proc/consume_nanites(amount, force = FALSE) - if(!force && safety_threshold && (nanite_volume - amount < safety_threshold)) - return FALSE - adjust_nanites(null, -amount) - return (nanite_volume > 0) - -/datum/component/nanites/proc/adjust_nanites(datum/source, amount) - nanite_volume = CLAMP(nanite_volume + amount, 0, max_nanites) - if(nanite_volume <= 0) //oops we ran out - qdel(src) - -/datum/component/nanites/proc/set_nanite_bar(remove = FALSE) - var/image/holder = host_mob.hud_list[DIAG_NANITE_FULL_HUD] - var/icon/I = icon(host_mob.icon, host_mob.icon_state, host_mob.dir) - holder.pixel_y = I.Height() - world.icon_size - holder.icon_state = null - if(remove || stealth) - return //bye icon - var/nanite_percent = (nanite_volume / max_nanites) * 100 - nanite_percent = CLAMP(CEILING(nanite_percent, 10), 10, 100) - holder.icon_state = "nanites[nanite_percent]" - -/datum/component/nanites/proc/on_emp(datum/source, severity) - nanite_volume *= (rand(0.60, 0.90)) //Lose 10-40% of nanites - adjust_nanites(null, -(rand(5, 50))) //Lose 5-50 flat nanite volume - if(prob(40/severity)) - cloud_id = 0 - for(var/X in programs) - var/datum/nanite_program/NP = X - NP.on_emp(severity) - -/datum/component/nanites/proc/on_shock(datum/source, shock_damage) - nanite_volume *= (rand(0.45, 0.80)) //Lose 20-55% of nanites - adjust_nanites(null, -(rand(5, 50))) //Lose 5-50 flat nanite volume - for(var/X in programs) - var/datum/nanite_program/NP = X - NP.on_shock(shock_damage) - -/datum/component/nanites/proc/on_minor_shock(datum/source) - adjust_nanites(null, -(rand(5, 15))) //Lose 5-15 flat nanite volume - for(var/X in programs) - var/datum/nanite_program/NP = X - NP.on_minor_shock() - -/datum/component/nanites/proc/check_stealth(datum/source) - return stealth - -/datum/component/nanites/proc/on_death(datum/source, gibbed) - for(var/X in programs) - var/datum/nanite_program/NP = X - NP.on_death(gibbed) - -/datum/component/nanites/proc/receive_signal(datum/source, code, signal_source = "an unidentified source") - for(var/X in programs) - var/datum/nanite_program/NP = X - NP.receive_signal(code, signal_source) - -/datum/component/nanites/proc/receive_comm_signal(datum/source, comm_code, comm_message, comm_source = "an unidentified source") - for(var/X in programs) - if(istype(X, /datum/nanite_program/triggered/comm)) - var/datum/nanite_program/triggered/comm/NP = X - NP.receive_comm_signal(comm_code, comm_message, comm_source) - -/datum/component/nanites/proc/check_viable_biotype() - if(!(host_mob.mob_biotypes & (MOB_ORGANIC|MOB_UNDEAD))) - qdel(src) //bodytype no longer sustains nanites - -/datum/component/nanites/proc/check_access(datum/source, obj/O) - for(var/datum/nanite_program/triggered/access/access_program in programs) - if(access_program.activated) - return O.check_access_list(access_program.access) - else - return FALSE - return FALSE - -/datum/component/nanites/proc/set_volume(datum/source, amount) - nanite_volume = CLAMP(amount, 0, max_nanites) - -/datum/component/nanites/proc/set_max_volume(datum/source, amount) - max_nanites = max(1, max_nanites) - -/datum/component/nanites/proc/set_cloud(datum/source, amount) - cloud_id = CLAMP(amount, 0, 100) - -/datum/component/nanites/proc/set_cloud_sync(datum/source, method) - switch(method) - if(NANITE_CLOUD_TOGGLE) - cloud_active = !cloud_active - if(NANITE_CLOUD_DISABLE) - cloud_active = FALSE - if(NANITE_CLOUD_ENABLE) - cloud_active = TRUE - -/datum/component/nanites/proc/set_safety(datum/source, amount) - safety_threshold = CLAMP(amount, 0, max_nanites) - -/datum/component/nanites/proc/set_regen(datum/source, amount) - regen_rate = amount - -/datum/component/nanites/proc/confirm_nanites() - return TRUE //yup i exist - -/datum/component/nanites/proc/get_data(list/nanite_data) - nanite_data["nanite_volume"] = nanite_volume - nanite_data["max_nanites"] = max_nanites - nanite_data["cloud_id"] = cloud_id - nanite_data["regen_rate"] = regen_rate - nanite_data["safety_threshold"] = safety_threshold - nanite_data["stealth"] = stealth - -/datum/component/nanites/proc/get_programs(datum/source, list/nanite_programs) - nanite_programs |= programs - -/datum/component/nanites/proc/add_research() - var/research_value = NANITE_BASE_RESEARCH - if(!ishuman(host_mob)) - if(!iscarbon(host_mob)) - research_value *= 0.4 - else - research_value *= 0.8 - if(!host_mob.client) - research_value *= 0.5 - if(host_mob.stat == DEAD) - research_value *= 0.75 - SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_NANITES = research_value)) - -/datum/component/nanites/proc/nanite_scan(datum/source, mob/user, full_scan) - if(!full_scan) - if(!stealth) - to_chat(user, "Nanites Detected") - to_chat(user, "Saturation: [nanite_volume]/[max_nanites]") - return TRUE - else - to_chat(user, "NANITES DETECTED") - to_chat(user, "================") - to_chat(user, "Saturation: [nanite_volume]/[max_nanites]") - to_chat(user, "Safety Threshold: [safety_threshold]") - to_chat(user, "Cloud ID: [cloud_id ? cloud_id : "None"]") - to_chat(user, "Cloud Sync: [cloud_active ? "Active" : "Disabled"]") - to_chat(user, "================") - to_chat(user, "Program List:") - if(!diagnostics) - to_chat(user, "Diagnostics Disabled") - else - for(var/X in programs) - var/datum/nanite_program/NP = X - to_chat(user, "[NP.name] | [NP.activated ? "Active" : "Inactive"]") - return TRUE - -/datum/component/nanites/proc/nanite_ui_data(datum/source, list/data, scan_level) - data["has_nanites"] = TRUE - data["nanite_volume"] = nanite_volume - data["regen_rate"] = regen_rate - data["safety_threshold"] = safety_threshold - data["cloud_id"] = cloud_id - data["cloud_active"] = cloud_active - var/list/mob_programs = list() - var/id = 1 - for(var/X in programs) - var/datum/nanite_program/P = X - var/list/mob_program = list() - mob_program["name"] = P.name - mob_program["desc"] = P.desc - mob_program["id"] = id - - if(scan_level >= 2) - mob_program["activated"] = P.activated - mob_program["use_rate"] = P.use_rate - mob_program["can_trigger"] = P.can_trigger - mob_program["trigger_cost"] = P.trigger_cost - mob_program["trigger_cooldown"] = P.trigger_cooldown / 10 - - if(scan_level >= 3) - mob_program["activation_delay"] = P.activation_delay - mob_program["timer"] = P.timer - mob_program["timer_type"] = P.get_timer_type_text() - var/list/extra_settings = list() - for(var/Y in P.extra_settings) - var/list/setting = list() - setting["name"] = Y - setting["value"] = P.get_extra_setting(Y) - extra_settings += list(setting) - mob_program["extra_settings"] = extra_settings - if(LAZYLEN(extra_settings)) - mob_program["has_extra_settings"] = TRUE - - if(scan_level >= 4) - mob_program["activation_code"] = P.activation_code - mob_program["deactivation_code"] = P.deactivation_code - mob_program["kill_code"] = P.kill_code - mob_program["trigger_code"] = P.trigger_code - var/list/rules = list() - var/rule_id = 1 - for(var/Z in P.rules) - var/datum/nanite_rule/nanite_rule = Z - var/list/rule = list() - rule["display"] = nanite_rule.display() - rule["program_id"] = id - rule["id"] = rule_id - rules += list(rule) - rule_id++ - mob_program["rules"] = rules - if(LAZYLEN(rules)) - mob_program["has_rules"] = TRUE - id++ - mob_programs += list(mob_program) - data["mob_programs"] = mob_programs diff --git a/code/datums/components/ntnet_interface.dm b/code/datums/components/ntnet_interface.dm deleted file mode 100644 index 3a8fb559bf..0000000000 --- a/code/datums/components/ntnet_interface.dm +++ /dev/null @@ -1,66 +0,0 @@ -//Thing meant for allowing datums and objects to access a NTnet network datum. -/datum/proc/ntnet_receive(datum/netdata/data) - return - -/datum/proc/ntnet_receive_broadcast(datum/netdata/data) - return - -/datum/proc/ntnet_send(datum/netdata/data, netid) - var/datum/component/ntnet_interface/NIC = GetComponent(/datum/component/ntnet_interface) - if(!NIC) - return FALSE - return NIC.__network_send(data, netid) - -/datum/component/ntnet_interface - var/hardware_id //text. this is the true ID. do not change this. stuff like ID forgery can be done manually. - var/network_name = "" //text - var/list/networks_connected_by_id = list() //id = datum/ntnet - var/differentiate_broadcast = TRUE //If false, broadcasts go to ntnet_receive. NOT RECOMMENDED. - -/datum/component/ntnet_interface/Initialize(force_name = "NTNet Device", autoconnect_station_network = TRUE) //Don't force ID unless you know what you're doing! - hardware_id = "[SSnetworks.get_next_HID()]" - network_name = force_name - if(!SSnetworks.register_interface(src)) - . = COMPONENT_INCOMPATIBLE - CRASH("Unable to register NTNet interface. Interface deleted.") - if(autoconnect_station_network) - register_connection(SSnetworks.station_network) - -/datum/component/ntnet_interface/Destroy() - unregister_all_connections() - SSnetworks.unregister_interface(src) - return ..() - -/datum/component/ntnet_interface/proc/__network_receive(datum/netdata/data) //Do not directly proccall! - SEND_SIGNAL(parent, COMSIG_COMPONENT_NTNET_RECEIVE, data) - if(differentiate_broadcast && data.broadcast) - parent.ntnet_receive_broadcast(data) - else - parent.ntnet_receive(data) - -/datum/component/ntnet_interface/proc/__network_send(datum/netdata/data, netid) //Do not directly proccall! - - if(netid) - if(networks_connected_by_id[netid]) - var/datum/ntnet/net = networks_connected_by_id[netid] - return net.process_data_transmit(src, data) - return FALSE - for(var/i in networks_connected_by_id) - var/datum/ntnet/net = networks_connected_by_id[i] - net.process_data_transmit(src, data) - return TRUE - -/datum/component/ntnet_interface/proc/register_connection(datum/ntnet/net) - if(net.interface_connect(src)) - networks_connected_by_id[net.network_id] = net - return TRUE - -/datum/component/ntnet_interface/proc/unregister_all_connections() - for(var/i in networks_connected_by_id) - unregister_connection(networks_connected_by_id[i]) - return TRUE - -/datum/component/ntnet_interface/proc/unregister_connection(datum/ntnet/net) - net.interface_disconnect(src) - networks_connected_by_id -= net.network_id - return TRUE diff --git a/code/datums/components/plumbing/_plumbing.dm b/code/datums/components/plumbing/_plumbing.dm deleted file mode 100644 index 3b2af400da..0000000000 --- a/code/datums/components/plumbing/_plumbing.dm +++ /dev/null @@ -1,215 +0,0 @@ -/datum/component/plumbing - ///Index with "1" = /datum/ductnet/theductpointingnorth etc. "1" being the num2text from NORTH define - var/list/datum/ductnet/ducts = list() - ///shortcut to our parents' reagent holder - var/datum/reagents/reagents - ///TRUE if we wanna add proper pipe outless under our parent object. this is pretty good if i may so so myself - var/use_overlays = TRUE - ///We can't just cut all of the parents' overlays, so we'll track them here - var/list/image/ducterlays - ///directions in wich we act as a supplier - var/supply_connects - ///direction in wich we act as a demander - var/demand_connects - ///FALSE to pretty much just not exist in the plumbing world so we can be moved, TRUE to go plumbo mode - var/active = FALSE - ///if TRUE connects will spin with the parent object visually and codually, so you can have it work in any direction. FALSE if you want it to be static - var/turn_connects = TRUE - -/datum/component/plumbing/Initialize(start=TRUE, _turn_connects=TRUE) //turn_connects for wheter or not we spin with the object to change our pipes - if(parent && !ismovableatom(parent)) - return COMPONENT_INCOMPATIBLE - var/atom/movable/AM = parent - if(!AM.reagents) - return COMPONENT_INCOMPATIBLE - reagents = AM.reagents - turn_connects = _turn_connects - - RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED,COMSIG_PARENT_PREQDELETED), PROC_REF(disable)) - RegisterSignal(parent, list(COMSIG_OBJ_DEFAULT_UNFASTEN_WRENCH), PROC_REF(toggle_active)) - - if(start) - enable() - - if(use_overlays) - create_overlays() - -/datum/component/plumbing/process() - if(!demand_connects || !reagents) - STOP_PROCESSING(SSfluids, src) - return - if(reagents.total_volume < reagents.maximum_volume) - for(var/D in GLOB.cardinals) - if(D & demand_connects) - send_request(D) -///Can we be added to the ductnet? -/datum/component/plumbing/proc/can_add(datum/ductnet/D, dir) - if(!active) - return - if(!dir || !D) - return FALSE - if(num2text(dir) in ducts) - return FALSE - - return TRUE -///called from in process(). only calls process_request(), but can be overwritten for children with special behaviour -/datum/component/plumbing/proc/send_request(dir) - process_request(amount = MACHINE_REAGENT_TRANSFER, reagent = null, dir = dir) -///check who can give us what we want, and how many each of them will give us -/datum/component/plumbing/proc/process_request(amount, reagent, dir) - var/list/valid_suppliers = list() - var/datum/ductnet/net - if(!ducts.Find(num2text(dir))) - return - net = ducts[num2text(dir)] - for(var/A in net.suppliers) - var/datum/component/plumbing/supplier = A - if(supplier.can_give(amount, reagent, net)) - valid_suppliers += supplier - for(var/A in valid_suppliers) - var/datum/component/plumbing/give = A - give.transfer_to(src, amount / valid_suppliers.len, reagent, net) -///returns TRUE when they can give the specified amount and reagent. called by process request -/datum/component/plumbing/proc/can_give(amount, reagent, datum/ductnet/net) - if(amount <= 0) - return - - if(reagent) //only asked for one type of reagent - for(var/A in reagents.reagent_list) - var/datum/reagent/R = A - if(R.type == reagent) - return TRUE - else if(reagents.total_volume > 0) //take whatever - return TRUE -///this is where the reagent is actually transferred and is thus the finish point of our process() -/datum/component/plumbing/proc/transfer_to(datum/component/plumbing/target, amount, reagent, datum/ductnet/net) - if(!reagents || !target || !target.reagents) - return FALSE - if(reagent) - reagents.trans_id_to(target.parent, reagent, amount) - else - reagents.trans_to(target.parent, amount, round_robin = TRUE)//we deal with alot of precise calculations so we round_robin=TRUE. Otherwise we get floating point errors, 1 != 1 and 2.5 + 2.5 = 6 -///We create our luxurious piping overlays/underlays, to indicate where we do what. only called once if use_overlays = TRUE in Initialize() -/datum/component/plumbing/proc/create_overlays() - var/atom/movable/AM = parent - for(var/image/I in ducterlays) - AM.overlays.Remove(I) - qdel(I) - ducterlays = list() - for(var/D in GLOB.cardinals) - var/color - var/direction - if(D & demand_connects) - color = "red" //red because red is mean and it takes - else if(D & supply_connects) - color = "blue" //blue is nice and gives - else - continue - var/image/I - if(turn_connects) - switch(D) - if(NORTH) - direction = "north" - if(SOUTH) - direction = "south" - if(EAST) - direction = "east" - if(WEST) - direction = "west" - I = image('icons/obj/plumbing/plumbers.dmi', "[direction]-[color]", layer = AM.layer - 1) - else - I = image('icons/obj/plumbing/plumbers.dmi', color, layer = AM.layer - 1) //color is not color as in the var, it's just the name - I.dir = D - AM.add_overlay(I) - ducterlays += I -///we stop acting like a plumbing thing and disconnect if we are, so we can safely be moved and stuff -/datum/component/plumbing/proc/disable() - if(!active) - return - STOP_PROCESSING(SSfluids, src) - for(var/A in ducts) - var/datum/ductnet/D = ducts[A] - D.remove_plumber(src) - active = FALSE - for(var/D in GLOB.cardinals) - if(D & (demand_connects | supply_connects)) - for(var/obj/machinery/duct/duct in get_step(parent, D)) - duct.attempt_connect() - -///settle wherever we are, and start behaving like a piece of plumbing -/datum/component/plumbing/proc/enable() - if(active) - return - update_dir() - active = TRUE - var/atom/movable/AM = parent - for(var/obj/machinery/duct/D in AM.loc) //Destroy any ducts under us. Ducts also self destruct if placed under a plumbing machine. machines disable when they get moved - if(D.anchored) //that should cover everything - D.disconnect_duct() - - if(demand_connects) - START_PROCESSING(SSfluids, src) - - for(var/D in GLOB.cardinals) - if(D & (demand_connects | supply_connects)) - for(var/atom/movable/A in get_step(parent, D)) - if(istype(A, /obj/machinery/duct)) - var/obj/machinery/duct/duct = A - duct.attempt_connect() - else - var/datum/component/plumbing/P = A.GetComponent(/datum/component/plumbing) - if(P) - direct_connect(P, D) - -/// Toggle our machinery on or off. This is called by a hook from default_unfasten_wrench with anchored as only param, so we dont have to copypaste this on every object that can move -/datum/component/plumbing/proc/toggle_active(obj/O, new_state) - if(new_state) - enable() - else - disable() -/** We update our connects only when we settle down by taking our current and original direction to find our new connects -* If someone wants it to fucking spin while connected to something go actually knock myself out -*/ -/datum/component/plumbing/proc/update_dir() - if(!turn_connects) - return - var/atom/movable/AM = parent - var/new_demand_connects - var/new_supply_connects - var/new_dir = AM.dir - var/angle = 180 - dir2angle(new_dir) - if(new_dir == SOUTH) - demand_connects = initial(demand_connects) - supply_connects = initial(supply_connects) - else - for(var/D in GLOB.cardinals) - if(D & initial(demand_connects)) - new_demand_connects += turn(D, angle) - if(D & initial(supply_connects)) - new_supply_connects += turn(D, angle) - demand_connects = new_demand_connects - supply_connects = new_supply_connects -///Give the direction of a pipe, and it'll return wich direction it originally was when it's object pointed SOUTH -/datum/component/plumbing/proc/get_original_direction(dir) - var/atom/movable/AM = parent - return turn(dir, dir2angle(AM.dir) - 180) -//special case in-case we want to connect directly with another machine without a duct -/datum/component/plumbing/proc/direct_connect(datum/component/plumbing/P, dir) - if(!P.active) - return - var/opposite_dir = turn(dir, 180) - if(P.demand_connects & opposite_dir && supply_connects & dir || P.supply_connects & opposite_dir && demand_connects & dir) //make sure we arent connecting two supplies or demands - var/datum/ductnet/net = new() - net.add_plumber(src, dir) - net.add_plumber(P, opposite_dir) - -///has one pipe input that only takes, example is manual output pipe -/datum/component/plumbing/simple_demand - demand_connects = NORTH -///has one pipe output that only supplies. example is liquid pump and manual input pipe -/datum/component/plumbing/simple_supply - supply_connects = NORTH -///input and output, like a holding tank -/datum/component/plumbing/tank - demand_connects = WEST - supply_connects = EAST diff --git a/code/datums/components/plumbing/chemical_acclimator.dm b/code/datums/components/plumbing/chemical_acclimator.dm deleted file mode 100644 index 9da2a0e983..0000000000 --- a/code/datums/components/plumbing/chemical_acclimator.dm +++ /dev/null @@ -1,21 +0,0 @@ -/datum/component/plumbing/acclimator - demand_connects = WEST - supply_connects = EAST - var/obj/machinery/plumbing/acclimator/AC - -/datum/component/plumbing/acclimator/Initialize(start=TRUE, _turn_connects=TRUE) - . = ..() - if(!istype(parent, /obj/machinery/plumbing/acclimator)) - return COMPONENT_INCOMPATIBLE - AC = parent - -/datum/component/plumbing/acclimator/can_give(amount, reagent) - . = ..() - if(. && AC.emptying) - return TRUE - return FALSE -///We're overriding process and not send_request, because all process does is do the requests, so we might aswell cut out the middle man and save some code from running -/datum/component/plumbing/acclimator/process() - if(AC.emptying) - return - . = ..() diff --git a/code/datums/components/plumbing/filter.dm b/code/datums/components/plumbing/filter.dm deleted file mode 100644 index 76b76323c5..0000000000 --- a/code/datums/components/plumbing/filter.dm +++ /dev/null @@ -1,59 +0,0 @@ -///The magical plumbing component used by the chemical filters. The different supply connects behave differently depending on the filters set on the chemical filter -/datum/component/plumbing/filter - demand_connects = NORTH - supply_connects = SOUTH | EAST | WEST //SOUTH is straight, EAST is left and WEST is right. We look from the perspective of the insert - -/datum/component/plumbing/filter/Initialize() - . = ..() - if(!istype(parent, /obj/machinery/plumbing/filter)) - return COMPONENT_INCOMPATIBLE - -/datum/component/plumbing/filter/can_give(amount, reagent, datum/ductnet/net) - . = ..() - if(.) - var/direction - for(var/A in ducts) - if(ducts[A] == net) - direction = get_original_direction(text2num(A)) //we need it relative to the direction, so filters don't change when we turn the filter - break - if(!direction) - return FALSE - if(reagent) - if(!can_give_in_direction(direction, reagent)) - return FALSE - -/datum/component/plumbing/filter/transfer_to(datum/component/plumbing/target, amount, reagent, datum/ductnet/net) - if(!reagents || !target || !target.reagents) - return FALSE - var/direction - for(var/A in ducts) - if(ducts[A] == net) - direction = get_original_direction(text2num(A)) - break - if(reagent) - reagents.trans_id_to(target.parent, reagent, amount) - else - for(var/A in reagents.reagent_list) - var/datum/reagent/R = A - if(!can_give_in_direction(direction, R.type)) - continue - var/new_amount - if(R.volume < amount) - new_amount = amount - R.volume - reagents.trans_id_to(target.parent, R.type, amount) - amount = new_amount - if(amount <= 0) - break -///We check if the direction and reagent are valid to give. Needed for filters since different outputs have different behaviours -/datum/component/plumbing/filter/proc/can_give_in_direction(dir, reagent) - var/obj/machinery/plumbing/filter/F = parent - switch(dir) - if(SOUTH) //straight - if(!F.left.Find(reagent) && !F.right.Find(reagent)) - return TRUE - if(WEST) //right - if(F.right.Find(reagent)) - return TRUE - if(EAST) //left - if(F.left.Find(reagent)) - return TRUE diff --git a/code/datums/components/plumbing/reaction_chamber.dm b/code/datums/components/plumbing/reaction_chamber.dm deleted file mode 100644 index 2f92a4b6a1..0000000000 --- a/code/datums/components/plumbing/reaction_chamber.dm +++ /dev/null @@ -1,45 +0,0 @@ -/datum/component/plumbing/reaction_chamber - demand_connects = WEST - supply_connects = EAST - -/datum/component/plumbing/reaction_chamber/Initialize(start=TRUE, _turn_connects=TRUE) - . = ..() - if(!istype(parent, /obj/machinery/plumbing/reaction_chamber)) - return COMPONENT_INCOMPATIBLE - -/datum/component/plumbing/reaction_chamber/can_give(amount, reagent) - . = ..() - var/obj/machinery/plumbing/reaction_chamber/RC = parent - if(!. || !RC.emptying) - return FALSE - -/datum/component/plumbing/reaction_chamber/send_request(dir) - var/obj/machinery/plumbing/reaction_chamber/RC = parent - if(RC.emptying || !LAZYLEN(RC.required_reagents)) - return - for(var/RT in RC.required_reagents) - var/has_reagent = FALSE - for(var/A in reagents.reagent_list) - var/datum/reagent/RD = A - if(RT == RD.type) - has_reagent = TRUE - if(RD.volume < RC.required_reagents[RT]) - process_request(min(RC.required_reagents[RT] - RD.volume, MACHINE_REAGENT_TRANSFER) , RT, dir) - return - if(!has_reagent) - process_request(min(RC.required_reagents[RT], MACHINE_REAGENT_TRANSFER), RT, dir) - return - - reagents.flags &= ~NO_REACT - reagents.handle_reactions() - RC.emptying = TRUE - -/datum/component/plumbing/reaction_chamber/can_give(amount, reagent, datum/ductnet/net) - . = ..() - var/obj/machinery/plumbing/reaction_chamber/RC = parent - if(!. || !RC.emptying) - return FALSE - - - - diff --git a/code/datums/components/plumbing/splitter.dm b/code/datums/components/plumbing/splitter.dm deleted file mode 100644 index 2e82c580a0..0000000000 --- a/code/datums/components/plumbing/splitter.dm +++ /dev/null @@ -1,47 +0,0 @@ -/datum/component/plumbing/splitter - demand_connects = NORTH - supply_connects = SOUTH | EAST - -/datum/component/plumbing/splitter/Initialize() - . = ..() - if(. && !istype(parent, /obj/machinery/plumbing/splitter)) - return FALSE - -/datum/component/plumbing/splitter/can_give(amount, reagent, datum/ductnet/net) - . = ..() - if(!.) - return - . = FALSE - var/direction - for(var/A in ducts) - if(ducts[A] == net) - direction = get_original_direction(text2num(A)) - break - var/obj/machinery/plumbing/splitter/S = parent - switch(direction) - if(SOUTH) - if(S.turn_straight && S.transfer_straight <= amount) - S.turn_straight = FALSE - return TRUE - if(EAST) - if(!S.turn_straight && S.transfer_side <= amount) - S.turn_straight = TRUE - return TRUE - -/datum/component/plumbing/splitter/transfer_to(datum/component/plumbing/target, amount, reagent, datum/ductnet/net) - var/direction - for(var/A in ducts) - if(ducts[A] == net) - direction = get_original_direction(text2num(A)) - break - var/obj/machinery/plumbing/splitter/S = parent - switch(direction) - if(SOUTH) - if(amount >= S.transfer_straight) - amount = S.transfer_straight - if(EAST) - if(amount >= S.transfer_side) - amount = S.transfer_side - . = ..() - - diff --git a/code/datums/components/remote_materials.dm b/code/datums/components/remote_materials.dm deleted file mode 100644 index 480f9f188f..0000000000 --- a/code/datums/components/remote_materials.dm +++ /dev/null @@ -1,114 +0,0 @@ -/* -This component allows machines to connect remotely to a material container -(namely an /obj/machinery/ore_silo) elsewhere. It offers optional graceful -fallback to a local material storage in case remote storage is unavailable, and -handles linking back and forth. -*/ - -/datum/component/remote_materials - // Three possible states: - // 1. silo exists, materials is parented to silo - // 2. silo is null, materials is parented to parent - // 3. silo is null, materials is null - var/obj/machinery/ore_silo/silo - var/datum/component/material_container/mat_container - var/category - var/allow_standalone - var/local_size = INFINITY - -/datum/component/remote_materials/Initialize(category, mapload, allow_standalone = TRUE, force_connect = FALSE) - if (!isatom(parent)) - return COMPONENT_INCOMPATIBLE - - src.category = category - src.allow_standalone = allow_standalone - - RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, PROC_REF(OnAttackBy)) - RegisterSignal(parent, COMSIG_ATOM_MULTITOOL_ACT, PROC_REF(OnMultitool)) - - var/turf/T = get_turf(parent) - if (force_connect || (mapload && is_station_level(T.z))) - addtimer(CALLBACK(src, PROC_REF(LateInitialize))) - else if (allow_standalone) - _MakeLocal() - -/datum/component/remote_materials/proc/LateInitialize() - silo = GLOB.ore_silo_default - if (silo) - silo.connected += src - mat_container = silo.GetComponent(/datum/component/material_container) - else - _MakeLocal() - -/datum/component/remote_materials/Destroy() - if (silo) - silo.connected -= src - silo.updateUsrDialog() - silo = null - mat_container = null - else if (mat_container) - // specify explicitly in case the other component is deleted first - var/atom/P = parent - mat_container.retrieve_all(P.drop_location()) - return ..() - -/datum/component/remote_materials/proc/_MakeLocal() - silo = null - mat_container = parent.AddComponent(/datum/component/material_container, - list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/gold, /datum/material/diamond, /datum/material/plasma, /datum/material/uranium, /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace, /datum/material/plastic), - local_size, - FALSE, - /obj/item/stack) - -/datum/component/remote_materials/proc/set_local_size(size) - local_size = size - if (!silo && mat_container) - mat_container.max_amount = size - -// called if disconnected by ore silo UI or destruction -/datum/component/remote_materials/proc/disconnect_from(obj/machinery/ore_silo/old_silo) - if (!old_silo || silo != old_silo) - return - silo = null - mat_container = null - if (allow_standalone) - _MakeLocal() - -/datum/component/remote_materials/proc/OnAttackBy(datum/source, obj/item/I, mob/user) - if (silo && istype(I, /obj/item/stack)) - if (silo.remote_attackby(parent, user, I)) - return COMPONENT_NO_AFTERATTACK - -/datum/component/remote_materials/proc/OnMultitool(datum/source, mob/user, obj/item/I) - if(!I.multitool_check_buffer(user, I)) - return COMPONENT_BLOCK_TOOL_ATTACK - var/obj/item/multitool/M = I - if (!QDELETED(M.buffer) && istype(M.buffer, /obj/machinery/ore_silo)) - if (silo == M.buffer) - to_chat(user, "[parent] is already connected to [silo]!") - return COMPONENT_BLOCK_TOOL_ATTACK - if (silo) - silo.connected -= src - silo.updateUsrDialog() - else if (mat_container) - mat_container.retrieve_all() - qdel(mat_container) - silo = M.buffer - silo.connected += src - silo.updateUsrDialog() - mat_container = silo.GetComponent(/datum/component/material_container) - to_chat(user, "I connect [parent] to [silo] from the multitool's buffer.") - return COMPONENT_BLOCK_TOOL_ATTACK - -/datum/component/remote_materials/proc/on_hold() - return silo && silo.holds["[get_area(parent)]/[category]"] - -/datum/component/remote_materials/proc/silo_log(obj/machinery/M, action, amount, noun, list/mats) - if (silo) - silo.silo_log(M || parent, action, amount, noun, mats) - -/datum/component/remote_materials/proc/format_amount() - if (mat_container) - return "[mat_container.total_amount] / [mat_container.max_amount == INFINITY ? "Unlimited" : mat_container.max_amount] ([silo ? "remote" : "local"])" - else - return "0 / 0" diff --git a/code/datums/components/riding.dm b/code/datums/components/riding.dm index ee4192439a..d502c0ce3e 100644 --- a/code/datums/components/riding.dm +++ b/code/datums/components/riding.dm @@ -186,6 +186,7 @@ handle_vehicle_offsets() else to_chat(user, "You'll need the keys in one of my hands to [drive_verb] [AM].") + SEND_SIGNAL(AM, COMSIG_RIDDEN_DRIVER_MOVE, user, direction) return TRUE /datum/component/riding/proc/Unbuckle(atom/movable/M) @@ -274,10 +275,6 @@ var/atom/movable/AM = parent if(user.incapacitated()) var/kick = TRUE - if(iscyborg(AM)) - var/mob/living/silicon/robot/R = AM - if(R.module && R.module.ride_allow_incapacitated) - kick = FALSE if(kick) to_chat(user, "I fall off of [AM]!") Unbuckle(user) @@ -307,13 +304,7 @@ if(AM.has_buckled_mobs()) for(var/mob/living/M in AM.buckled_mobs) M.setDir(AM.dir) - if(iscyborg(AM)) - var/mob/living/silicon/robot/R = AM - if(istype(R.module)) - M.pixel_x = R.module.ride_offset_x[dir2text(AM.dir)] - M.pixel_y = R.module.ride_offset_y[dir2text(AM.dir)] - else - ..() + ..() /datum/component/riding/cyborg/force_dismount(mob/living/M) var/atom/movable/AM = parent diff --git a/code/datums/components/rotting.dm b/code/datums/components/rotting.dm index af8df6359d..625b353a1c 100644 --- a/code/datums/components/rotting.dm +++ b/code/datums/components/rotting.dm @@ -1,7 +1,7 @@ /datum/component/rot var/amount = 0 var/last_process = 0 - var/datum/looping_sound/fliesloop/soundloop +// var/datum/looping_sound/fliesloop/soundloop commented out looping sound flies because of runtimes. TO DO. /datum/component/rot/Initialize(new_amount) ..() @@ -11,13 +11,13 @@ if(new_amount) amount = new_amount - soundloop = new(list(parent), FALSE) +// soundloop = new(list(parent), FALSE) START_PROCESSING(SSroguerot, src) /datum/component/rot/Destroy() - if(soundloop) - soundloop.stop() +// if(soundloop) +// soundloop.stop() . = ..() /datum/component/rot/process() @@ -80,21 +80,21 @@ var/turf/open/T = C.loc if(istype(T)) T.add_pollutants(/datum/pollutant/rot, 5) - if(soundloop && soundloop.stopped && !is_zombie) - soundloop.start() - else - if(soundloop && !soundloop.stopped) - soundloop.stop() - else - if(soundloop && !soundloop.stopped) - soundloop.stop() +// if(soundloop && soundloop.stopped && !is_zombie) +// soundloop.start() +// else +// if(soundloop && !soundloop.stopped) +// soundloop.stop() +// else +// if(soundloop && !soundloop.stopped) +// soundloop.stop() if(shouldupdate) if(findonerotten) if(ishuman(C)) var/mob/living/carbon/human/H = C H.skin_tone = "878f79" //elf ears - if(soundloop && soundloop.stopped && !is_zombie) - soundloop.start() +// if(soundloop && soundloop.stopped && !is_zombie) +// soundloop.start() C.update_body() /datum/component/rot/simple/process() @@ -105,8 +105,8 @@ qdel(R) return if(amount > 10 MINUTES) - if(soundloop && soundloop.stopped) - soundloop.start() +// if(soundloop && soundloop.stopped) +// soundloop.start() var/turf/open/T = get_turf(L) if(istype(T)) T.add_pollutants(/datum/pollutant/rot, 5) diff --git a/code/datums/components/spawner.dm b/code/datums/components/spawner.dm index 7044c11357..1f1954727f 100644 --- a/code/datums/components/spawner.dm +++ b/code/datums/components/spawner.dm @@ -6,10 +6,11 @@ var/max_mobs = 5 var/spawn_text = "emerges from" var/list/faction = list("mining") + /// The minimum distance to a client before we can start spawning mobs. + var/range = 10 - -/datum/component/spawner/Initialize(_mob_types, _spawn_time, _faction, _spawn_text, _max_mobs) +/datum/component/spawner/Initialize(_mob_types, _spawn_time, _faction, _spawn_text, _range, _max_mobs) if(_spawn_time) spawn_time=_spawn_time if(_mob_types) @@ -18,6 +19,8 @@ faction=_faction if(_spawn_text) spawn_text=_spawn_text + if(_range) + range = _range if(_max_mobs) max_mobs=_max_mobs @@ -27,7 +30,6 @@ /datum/component/spawner/process() try_spawn_mob() - /datum/component/spawner/proc/stop_spawning(force) STOP_PROCESSING(SSprocessing, src) for(var/mob/living/simple_animal/L in spawned_mobs) @@ -41,6 +43,14 @@ return 0 if(spawn_delay > world.time) return 0 + if(range) + var/is_close_enough = FALSE + for(var/mob/living as anything in SSmobs.clients_by_zlevel[P.z]) // client-containing mobs, NOT clients + if(get_dist(P, living) <= range) + is_close_enough = TRUE + break + if(!is_close_enough) + return FALSE spawn_delay = world.time + spawn_time var/chosen_mob_type = pick(mob_types) var/mob/living/simple_animal/L = new chosen_mob_type(P.loc) @@ -49,3 +59,5 @@ L.nest = src L.faction = src.faction P.visible_message("[L] [spawn_text] [P].") + playsound(src, 'sound/misc/portal_op.ogg', 100, 1) + stop_spawning() diff --git a/code/datums/components/storage/concrete/bag_of_holding.dm b/code/datums/components/storage/concrete/bag_of_holding.dm index 7fe270517a..2dcf9e63e9 100644 --- a/code/datums/components/storage/concrete/bag_of_holding.dm +++ b/code/datums/components/storage/concrete/bag_of_holding.dm @@ -17,7 +17,6 @@ log_game("[key_name(user)] detonated a bag of holding at [loc_name(loccheck)].") user.gib(TRUE, TRUE, TRUE) - new/obj/singularity/boh_tear(loccheck) qdel(A) return . = ..() diff --git a/code/datums/components/storage/concrete/implant.dm b/code/datums/components/storage/concrete/implant.dm index 405b3098fe..cf15b2d6df 100644 --- a/code/datums/components/storage/concrete/implant.dm +++ b/code/datums/components/storage/concrete/implant.dm @@ -7,10 +7,6 @@ silent = TRUE allow_big_nesting = TRUE -/datum/component/storage/concrete/implant/Initialize() - . = ..() - set_holdable(null, list(/obj/item/disk/nuclear)) - /datum/component/storage/concrete/implant/InheritComponent(datum/component/storage/concrete/implant/I, original) if(!istype(I)) return ..() diff --git a/code/datums/components/storage/concrete/pockets.dm b/code/datums/components/storage/concrete/pockets.dm index 801de8da4e..7053e79157 100644 --- a/code/datums/components/storage/concrete/pockets.dm +++ b/code/datums/components/storage/concrete/pockets.dm @@ -26,7 +26,7 @@ . = ..() var/static/list/exception_cache = typecacheof(list( /obj/item/katana, /obj/item/toy/katana, /obj/item/nullrod/claymore/katana, - /obj/item/energy_katana, /obj/item/gun/ballistic/automatic/tommygun + /obj/item/gun/ballistic/automatic/tommygun )) exception_hold = exception_cache diff --git a/code/datums/components/storage/concrete/wallet.dm b/code/datums/components/storage/concrete/wallet.dm index e70886665e..4e3584e5f9 100644 --- a/code/datums/components/storage/concrete/wallet.dm +++ b/code/datums/components/storage/concrete/wallet.dm @@ -6,7 +6,7 @@ return var/obj/item/storage/wallet/A = parent - if(istype(A) && A.front_id && !issilicon(user) && !(A.item_flags & IN_STORAGE)) //if it's a wallet in storage seeing the full inventory is more useful + if(istype(A) && A.front_id && !(A.item_flags & IN_STORAGE)) //if it's a wallet in storage seeing the full inventory is more useful var/obj/item/I = A.front_id A.add_fingerprint(user) remove_from_storage(I, get_turf(user)) diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm index bf6a0d054a..7741b3be0c 100644 --- a/code/datums/components/storage/storage.dm +++ b/code/datums/components/storage/storage.dm @@ -319,7 +319,7 @@ if(istype(T, /turf/closed)) // Is there an impassible turf in the way? Don't dump the sack out on that to_chat(user, "Something in the way.") - return + return for(var/obj/item/I in things) // If the above aren't true, dump the sack onto the tile in front of us things -= I @@ -556,8 +556,6 @@ if(labeler.mode) return FALSE // . = TRUE //no afterattack - if(iscyborg(M)) - return if(!can_be_inserted(I, FALSE, M)) var/atom/real_location = real_location() if(real_location.contents.len >= max_items) //don't use items on the backpack if they don't fit diff --git a/code/datums/components/temporary_pollutor.dm b/code/datums/components/temporary_pollutor.dm new file mode 100644 index 0000000000..3a0f17aa7a --- /dev/null +++ b/code/datums/components/temporary_pollutor.dm @@ -0,0 +1,35 @@ +/datum/component/temporary_pollution_emission + dupe_mode = COMPONENT_DUPE_ALLOWED + /// The type of the pollutant we're emitting + var/pollutant_type + /// The amount we emitt every process + var/pollutant_amount + /// When do we expire + var/expiry_time + +/datum/component/temporary_pollution_emission/Initialize(pollutant_type, pollutant_amount, expiry_time) + if(!isatom(parent)) + return COMPONENT_INCOMPATIBLE + src.pollutant_type = pollutant_type + src.pollutant_amount = pollutant_amount + COOLDOWN_START(src, expiry_time, expiry_time) + RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, PROC_REF(wash_off)) + START_PROCESSING(SSobj, src) + +/datum/component/temporary_pollution_emission/Destroy() + UnregisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT) + STOP_PROCESSING(SSobj, src) + return ..() + +/datum/component/temporary_pollution_emission/process(seconds_per_tick) + var/turf/my_turf = get_turf(parent) + if(QDELETED(my_turf) || COOLDOWN_FINISHED(src, expiry_time)) + qdel(src) + return + my_turf.pollute_turf(pollutant_type, pollutant_amount * seconds_per_tick) + +/datum/component/temporary_pollution_emission/proc/wash_off() + SIGNAL_HANDLER + if(ismob(parent)) + to_chat(parent, span_notice("The smell that lingered on your body fades.")) + qdel(src) diff --git a/code/datums/components/uplink.dm b/code/datums/components/uplink.dm deleted file mode 100644 index f407b631a6..0000000000 --- a/code/datums/components/uplink.dm +++ /dev/null @@ -1,319 +0,0 @@ -GLOBAL_LIST_EMPTY(uplinks) - -#define PEN_ROTATIONS 2 - -/** - * Uplinks - * - * All /obj/item(s) have a hidden_uplink var. By default it's null. Give the item one with 'new(src') (it must be in it's contents). Then add 'uses.' - * Use whatever conditionals you want to check that the user has an uplink, and then call interact() on their uplink. - * You might also want the uplink menu to open if active. Check if the uplink is 'active' and then interact() with it. -**/ -/datum/component/uplink - dupe_mode = COMPONENT_DUPE_UNIQUE - var/name = "syndicate uplink" - var/active = FALSE - var/lockable = TRUE - var/locked = TRUE - var/allow_restricted = TRUE - var/telecrystals - var/selected_cat - var/owner = null - var/datum/game_mode/gamemode - var/datum/uplink_purchase_log/purchase_log - var/list/uplink_items - var/hidden_crystals = 0 - var/unlock_note - var/unlock_code - var/failsafe_code - var/debug = FALSE - - var/list/previous_attempts - -/datum/component/uplink/Initialize(_owner, _lockable = TRUE, _enabled = FALSE, datum/game_mode/_gamemode, starting_tc = 20) - if(!isitem(parent)) - return COMPONENT_INCOMPATIBLE - - - RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, PROC_REF(OnAttackBy)) - RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, PROC_REF(interact)) - if(istype(parent, /obj/item/implant)) - RegisterSignal(parent, COMSIG_IMPLANT_ACTIVATED, PROC_REF(implant_activation)) - RegisterSignal(parent, COMSIG_IMPLANT_IMPLANTING, PROC_REF(implanting)) - RegisterSignal(parent, COMSIG_IMPLANT_OTHER, PROC_REF(old_implant)) - RegisterSignal(parent, COMSIG_IMPLANT_EXISTING_UPLINK, PROC_REF(new_implant)) - else if(istype(parent, /obj/item/pda)) - RegisterSignal(parent, COMSIG_PDA_CHANGE_RINGTONE, PROC_REF(new_ringtone)) - RegisterSignal(parent, COMSIG_PDA_CHECK_DETONATE, PROC_REF(check_detonate)) - else if(istype(parent, /obj/item/radio)) - RegisterSignal(parent, COMSIG_RADIO_NEW_FREQUENCY, PROC_REF(new_frequency)) - else if(istype(parent, /obj/item/pen)) - RegisterSignal(parent, COMSIG_PEN_ROTATED, PROC_REF(pen_rotation)) - - GLOB.uplinks += src - uplink_items = get_uplink_items(_gamemode, TRUE, allow_restricted) - - if(_owner) - owner = _owner - LAZYINITLIST(GLOB.uplink_purchase_logs_by_key) - if(GLOB.uplink_purchase_logs_by_key[owner]) - purchase_log = GLOB.uplink_purchase_logs_by_key[owner] - else - purchase_log = new(owner, src) - lockable = _lockable - active = _enabled - gamemode = _gamemode - telecrystals = starting_tc - if(!lockable) - active = TRUE - locked = FALSE - - previous_attempts = list() - -/datum/component/uplink/InheritComponent(datum/component/uplink/U) - lockable |= U.lockable - active |= U.active - if(!gamemode) - gamemode = U.gamemode - telecrystals += U.telecrystals - if(purchase_log && U.purchase_log) - purchase_log.MergeWithAndDel(U.purchase_log) - -/datum/component/uplink/Destroy() - GLOB.uplinks -= src - gamemode = null - purchase_log = null - return ..() - -/datum/component/uplink/proc/LoadTC(mob/user, obj/item/stack/telecrystal/TC, silent = FALSE) - if(!silent) - to_chat(user, "I slot [TC] into [parent] and charge its internal uplink.") - var/amt = TC.amount - telecrystals += amt - TC.use(amt) - -/datum/component/uplink/proc/set_gamemode(_gamemode) - gamemode = _gamemode - uplink_items = get_uplink_items(gamemode, TRUE, allow_restricted) - -/datum/component/uplink/proc/OnAttackBy(datum/source, obj/item/I, mob/user) - if(!active) - return //no hitting everyone/everything just to try to slot tcs in! - if(istype(I, /obj/item/stack/telecrystal)) - LoadTC(user, I) - for(var/category in uplink_items) - for(var/item in uplink_items[category]) - var/datum/uplink_item/UI = uplink_items[category][item] - var/path = UI.refund_path || UI.item - var/cost = UI.refund_amount || UI.cost - if(I.type == path && UI.refundable && I.check_uplink_validity()) - telecrystals += cost - if(purchase_log) - purchase_log.total_spent -= cost - to_chat(user, "[I] refunded.") - qdel(I) - return - -/datum/component/uplink/proc/interact(datum/source, mob/user) - if(locked) - return - active = TRUE - if(user) - ui_interact(user) - // an unlocked uplink blocks also opening the PDA or headset menu - return COMPONENT_NO_INTERACT - -/datum/component/uplink/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - active = TRUE - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "uplink", name, 450, 750, master_ui, state) - ui.set_autoupdate(FALSE) // This UI is only ever opened by one person, and never is updated outside of user input. - ui.set_style("syndicate") - ui.open() - -/datum/component/uplink/ui_data(mob/user) - if(!user.mind) - return - var/list/data = list() - data["telecrystals"] = telecrystals - data["lockable"] = lockable - - data["categories"] = list() - for(var/category in uplink_items) - var/list/cat = list( - "name" = category, - "items" = (category == selected_cat ? list() : null)) - if(category == selected_cat) - for(var/item in uplink_items[category]) - var/datum/uplink_item/I = uplink_items[category][item] - if(I.limited_stock == 0) - continue - if(I.restricted_roles.len) - var/is_inaccessible = TRUE - for(var/R in I.restricted_roles) - if(R == user.mind.assigned_role || debug) - is_inaccessible = FALSE - if(is_inaccessible) - continue - if(I.restricted_species) - if(ishuman(user)) - var/is_inaccessible = TRUE - var/mob/living/carbon/human/H = user - for(var/F in I.restricted_species) - if(F == H.dna.species.id || debug) - is_inaccessible = FALSE - break - if(is_inaccessible) - continue - cat["items"] += list(list( - "name" = I.name, - "cost" = I.cost, - "desc" = I.desc, - )) - data["categories"] += list(cat) - return data - -/datum/component/uplink/ui_act(action, params) - if(!active) - return - - switch(action) - if("buy") - var/item = params["item"] - - var/list/buyable_items = list() - for(var/category in uplink_items) - buyable_items += uplink_items[category] - - if(item in buyable_items) - var/datum/uplink_item/I = buyable_items[item] - MakePurchase(usr, I) - . = TRUE - if("lock") - active = FALSE - locked = TRUE - telecrystals += hidden_crystals - hidden_crystals = 0 - SStgui.close_uis(src) - if("select") - selected_cat = params["category"] - return TRUE - -/datum/component/uplink/proc/MakePurchase(mob/user, datum/uplink_item/U) - if(!istype(U)) - return - if (!user || user.incapacitated()) - return - - if(telecrystals < U.cost || U.limited_stock == 0) - return - telecrystals -= U.cost - - U.purchase(user, src) - - if(U.limited_stock > 0) - U.limited_stock -= 1 - - SSblackbox.record_feedback("nested tally", "traitor_uplink_items_bought", 1, list("[initial(U.name)]", "[U.cost]")) - return TRUE - -// Implant signal responses - -/datum/component/uplink/proc/implant_activation() - var/obj/item/implant/implant = parent - locked = FALSE - interact(null, implant.imp_in) - -/datum/component/uplink/proc/implanting(datum/source, list/arguments) - var/mob/user = arguments[2] - owner = "[user.key]" - -/datum/component/uplink/proc/old_implant(datum/source, list/arguments, obj/item/implant/new_implant) - // It kinda has to be weird like this until implants are components - return SEND_SIGNAL(new_implant, COMSIG_IMPLANT_EXISTING_UPLINK, src) - -/datum/component/uplink/proc/new_implant(datum/source, datum/component/uplink/uplink) - uplink.telecrystals += telecrystals - return COMPONENT_DELETE_NEW_IMPLANT - -// PDA signal responses - -/datum/component/uplink/proc/new_ringtone(datum/source, mob/living/user, new_ring_text) - var/obj/item/pda/master = parent - if(trim(lowertext(new_ring_text)) != trim(lowertext(unlock_code))) - if(trim(lowertext(new_ring_text)) == trim(lowertext(failsafe_code))) - failsafe() - return COMPONENT_STOP_RINGTONE_CHANGE - return - locked = FALSE - interact(null, user) - to_chat(user, "The PDA softly beeps.") - user << browse(null, "window=pda") - master.mode = 0 - return COMPONENT_STOP_RINGTONE_CHANGE - -/datum/component/uplink/proc/check_detonate() - return COMPONENT_PDA_NO_DETONATE - -// Radio signal responses - -/datum/component/uplink/proc/new_frequency(datum/source, list/arguments) - var/obj/item/radio/master = parent - var/frequency = arguments[1] - if(frequency != unlock_code) - if(frequency == failsafe_code) - failsafe() - return - locked = FALSE - if(ismob(master.loc)) - interact(null, master.loc) - -// Pen signal responses - -/datum/component/uplink/proc/pen_rotation(datum/source, degrees, mob/living/carbon/user) - var/obj/item/pen/master = parent - previous_attempts += degrees - if(length(previous_attempts) > PEN_ROTATIONS) - popleft(previous_attempts) - - if(compare_list(previous_attempts, unlock_code)) - locked = FALSE - previous_attempts.Cut() - master.degrees = 0 - interact(null, user) - to_chat(user, "My pen makes a clicking noise, before quickly rotating back to 0 degrees!") - - else if(compare_list(previous_attempts, failsafe_code)) - failsafe() - -/datum/component/uplink/proc/setup_unlock_code() - unlock_code = generate_code() - var/obj/item/P = parent - if(istype(parent,/obj/item/pda)) - unlock_note = "Uplink Passcode: [unlock_code] ([P.name])." - else if(istype(parent,/obj/item/radio)) - unlock_note = "Radio Frequency: [format_frequency(unlock_code)] ([P.name])." - else if(istype(parent,/obj/item/pen)) - unlock_note = "Uplink Degrees: [english_list(unlock_code)] ([P.name])." - -/datum/component/uplink/proc/generate_code() - if(istype(parent,/obj/item/pda)) - return "[rand(100,999)] [pick(GLOB.phonetic_alphabet)]" - else if(istype(parent,/obj/item/radio)) - return sanitize_frequency(rand(MIN_FREQ, MAX_FREQ)) - else if(istype(parent,/obj/item/pen)) - var/list/L = list() - for(var/i in 1 to PEN_ROTATIONS) - L += rand(1, 360) - return L - -/datum/component/uplink/proc/failsafe() - if(!parent) - return - var/turf/T = get_turf(parent) - if(!T) - return - explosion(T,1,2,3) - qdel(parent) //Alternatively could brick the uplink. diff --git a/code/datums/diseases/beesease.dm b/code/datums/diseases/beesease.dm deleted file mode 100644 index b28079bffa..0000000000 --- a/code/datums/diseases/beesease.dm +++ /dev/null @@ -1,39 +0,0 @@ -/datum/disease/beesease - name = "Beesease" - form = "Infection" - max_stages = 4 - spread_text = "On contact" - spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_CONTACT_SKIN | DISEASE_SPREAD_CONTACT_FLUIDS - cure_text = "Sugar" - cures = list(/datum/reagent/consumable/sugar) - agent = "Apidae Infection" - viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey) - desc = "" - severity = DISEASE_SEVERITY_MEDIUM - infectable_biotypes = MOB_ORGANIC|MOB_UNDEAD //bees nesting in corpses - -/datum/disease/beesease/stage_act() - ..() - switch(stage) - if(2) //also changes say, see say.dm - if(prob(2)) - to_chat(affected_mob, "I taste honey in my mouth.") - if(3) - if(prob(10)) - to_chat(affected_mob, "My stomach rumbles.") - if(prob(2)) - to_chat(affected_mob, "My stomach stings painfully.") - if(prob(20)) - affected_mob.adjustToxLoss(2) - affected_mob.updatehealth() - if(4) - if(prob(10)) - affected_mob.visible_message("[affected_mob] buzzes.", \ - "My stomach buzzes violently!") - if(prob(5)) - to_chat(affected_mob, "I feel something moving in my throat.") - if(prob(1)) - affected_mob.visible_message("[affected_mob] coughs up a swarm of bees!", \ - "I cough up a swarm of bees!") - new /mob/living/simple_animal/hostile/poison/bees(affected_mob.loc) - return diff --git a/code/datums/diseases/magnitis.dm b/code/datums/diseases/magnitis.dm index cd02ab0a02..50e5a3839c 100644 --- a/code/datums/diseases/magnitis.dm +++ b/code/datums/diseases/magnitis.dm @@ -24,8 +24,6 @@ if(!M.anchored && (M.flags_1 & CONDUCT_1)) step_towards(M,affected_mob) for(var/mob/living/silicon/S in orange(2,affected_mob)) - if(isAI(S)) - continue step_towards(S,affected_mob) if(3) if(prob(2)) @@ -40,8 +38,6 @@ for(i=0,iKill...") - stage3 = list("My throat feels very scratchy.", "Your skin feels tight.", "I can feel something move...inside.") - stage4 = list("My skin feels very tight.", "My blood boils!", "I can feel... something...inside you.") - stage5 = list("My skin feels as if it's about to burst off!") - new_form = /mob/living/carbon/alien/humanoid/hunter - bantype = ROLE_ALIEN - -/datum/disease/transformation/xeno/stage_act() - ..() - switch(stage) - if(3) - if (prob(4)) - to_chat(affected_mob, "I feel a stabbing pain in my head.") - affected_mob.Unconscious(40) - if(4) - if (prob(20)) - affected_mob.say(pick("You look delicious.", "Going to... devour you...", "Hsssshhhhh!"), forced = "xenomorph transformation") - - /datum/disease/transformation/slime name = "Advanced Mutation Transformation" cure_text = "frost oil" @@ -271,24 +241,6 @@ if (prob(20)) affected_mob.say(pick("Bark!", "AUUUUUU"), forced = "corgi transformation") -/datum/disease/transformation/morph - name = "Gluttony's Blessing" - cure_text = /datum/reagent/consumable/nothing - cures = list(/datum/reagent/medicine/adminordrazine) - agent = "Gluttony's Blessing" - desc = "" - stage_prob = 20 - severity = DISEASE_SEVERITY_BIOHAZARD - visibility_flags = 0 - stage1 = list("Your stomach rumbles.") - stage2 = list("Your skin feels saggy.") - stage3 = list("My appendages are melting away.", "My limbs begin to lose their shape.") - stage4 = list("You're ravenous.") - stage5 = list("I have become a morph.") - new_form = /mob/living/simple_animal/hostile/morph - infectable_biotypes = MOB_ORGANIC|MOB_MINERAL|MOB_UNDEAD //magic! - transformed_antag_datum = /datum/antagonist/morph - /datum/disease/transformation/gondola name = "Gondola Transformation" cure_text = "Condensed Capsaicin, ingested or injected." //getting pepper sprayed doesn't help diff --git a/code/datums/ductnet.dm b/code/datums/ductnet.dm deleted file mode 100644 index 252db42078..0000000000 --- a/code/datums/ductnet.dm +++ /dev/null @@ -1,65 +0,0 @@ -///We handle the unity part of plumbing. We track who is connected to who. -/datum/ductnet - var/list/suppliers = list() - var/list/demanders = list() - var/list/obj/machinery/duct/ducts = list() - - var/capacity -///Add a duct to our network -/datum/ductnet/proc/add_duct(obj/machinery/duct/D) - if(!D || (D in ducts)) - return - ducts += D - D.duct = src -///Remove a duct from our network and commit suicide, because this is probably easier than to check who that duct was connected to and what part of us was lost -/datum/ductnet/proc/remove_duct(obj/machinery/duct/ducting) - destroy_network(FALSE) - for(var/obj/machinery/duct/D in ducting.neighbours) - addtimer(CALLBACK(D, TYPE_PROC_REF(/obj/machinery/duct, reconnect)), 0) //all needs to happen after the original duct that was destroyed finishes destroying itself - addtimer(CALLBACK(D, TYPE_PROC_REF(/obj/machinery/duct, generate_connects)), 0) - qdel(src) -///add a plumbing object to either demanders or suppliers -/datum/ductnet/proc/add_plumber(datum/component/plumbing/P, dir) - if(!P.can_add(src, dir)) - return FALSE - P.ducts[num2text(dir)] = src - if(dir & P.supply_connects) - suppliers += P - else if(dir & P.demand_connects) - demanders += P - return TRUE -///remove a plumber. we dont delete ourselves because ductnets dont persist through plumbing objects -/datum/ductnet/proc/remove_plumber(datum/component/plumbing/P) - suppliers.Remove(P) //we're probably only in one of these, but Remove() is inherently sane so this is fine - demanders.Remove(P) - - for(var/dir in P.ducts) - if(P.ducts[dir] == src) - P.ducts -= dir - if(!ducts.len) //there were no ducts, so it was a direct connection. we destroy ourselves since a ductnet with only one plumber and no ducts is worthless - destroy_network() -///we combine ductnets. this occurs when someone connects to seperate sets of fluid ducts -/datum/ductnet/proc/assimilate(datum/ductnet/D) - ducts.Add(D.ducts) - suppliers.Add(D.suppliers) - demanders.Add(D.demanders) - for(var/A in D.suppliers + D.demanders) - var/datum/component/plumbing/P = A - for(var/s in P.ducts) - if(P.ducts[s] != D) - continue - P.ducts[s] = src //all your ducts are belong to us - for(var/A in D.ducts) - var/obj/machinery/duct/M = A - M.duct = src //forget your old master - - destroy_network() -///destroy the network and tell all our ducts and plumbers we are gone -/datum/ductnet/proc/destroy_network(delete=TRUE) - for(var/A in suppliers + demanders) - remove_plumber(A) - for(var/A in ducts) - var/obj/machinery/duct/D = A - D.duct = null - if(delete) //I don't want code to run with qdeleted objects because that can never be good, so keep this in-case the ductnet has some business left to attend to before commiting suicide - qdel(src) diff --git a/code/datums/elements/ai_flee_when_hurt.dm b/code/datums/elements/ai_flee_when_hurt.dm new file mode 100644 index 0000000000..99971772d3 --- /dev/null +++ b/code/datums/elements/ai_flee_when_hurt.dm @@ -0,0 +1,45 @@ +/** + * Attached to a mob with an AI controller, simply sets a flag on whether or not to run away based on current health values. + */ +/datum/element/ai_flee_while_injured + /// Health value to end fleeing if at or above + var/stop_fleeing_at + /// Health value to start fleeing if at or below + var/start_fleeing_below + +/datum/element/ai_flee_while_injured/Attach(datum/target, stop_fleeing_at = 1, start_fleeing_below = 0.5) + . = ..() + if(!isliving(target)) + return ELEMENT_INCOMPATIBLE + var/mob/living/living_target = target + if(!living_target.ai_controller) + return ELEMENT_INCOMPATIBLE + src.stop_fleeing_at = stop_fleeing_at + src.start_fleeing_below = start_fleeing_below + RegisterSignal(target, COMSIG_LIVING_HEALTH_UPDATE, PROC_REF(on_health_changed)) + +/datum/element/ai_flee_while_injured/Detach(datum/source) + . = ..() + UnregisterSignal(source, COMSIG_LIVING_HEALTH_UPDATE) + +/// When the mob's health changes, check what the blackboard state should be +/datum/element/ai_flee_while_injured/proc/on_health_changed(mob/living/source) + SIGNAL_HANDLER + + if (!source.ai_controller) + return + + var/current_health_percentage = source.health / source.maxHealth + if (source.ai_controller.blackboard[BB_BASIC_MOB_FLEEING]) + if (current_health_percentage < stop_fleeing_at) + return + source.ai_controller.CancelActions() // Stop fleeing go back to whatever you were doing + source.ai_controller.set_blackboard_key(BB_BASIC_MOB_FLEEING, FALSE) + return + + if (current_health_percentage > start_fleeing_below) + return + source.ai_controller.CancelActions() + source.ai_controller.set_blackboard_key(BB_BASIC_MOB_FLEEING, TRUE) + ///we don't want ai's to run forever this makes us run for 10 seconds then fight until + addtimer(CALLBACK(source.ai_controller, TYPE_PROC_REF(/datum/ai_controller, set_blackboard_key), BB_BASIC_MOB_FLEEING, FALSE), 10 SECONDS, flags = TIMER_UNIQUE) diff --git a/code/datums/elements/bed_tuckable.dm b/code/datums/elements/bed_tuckable.dm new file mode 100644 index 0000000000..67c6d86a10 --- /dev/null +++ b/code/datums/elements/bed_tuckable.dm @@ -0,0 +1,66 @@ +/// Tucking element, for things that can be tucked into bed. +/datum/element/bed_tuckable + /// our pixel_x offset - how much the item moves x when in bed (+x is closer to the pillow) + var/x_offset = 0 + /// our pixel_y offset - how much the item move y when in bed (-y is closer to the middle) + var/y_offset = 0 + /// our rotation degree - how many degrees we need to turn the item to get to the left/right side + var/rotation_degree = 0 + /// our starting angle for the item + var/starting_angle = 0 + +/datum/element/bed_tuckable/Attach(obj/target, x = 0, y = 0, rotation = 0) + . = ..() + if(!isitem(target)) + return ELEMENT_INCOMPATIBLE + + x_offset = x + y_offset = y + starting_angle = rotation + RegisterSignal(target, COMSIG_ITEM_ATTACK_OBJ, PROC_REF(tuck_into_bed)) + +/datum/element/bed_tuckable/Detach(obj/target) + . = ..() + UnregisterSignal(target, list(COMSIG_ITEM_ATTACK_OBJ, COMSIG_ITEM_PICKUP)) + +/** + * Tuck our object into bed. + * + * tucked - the object being tucked + * target_bed - the bed we're tucking them into + * tucker - the guy doing the tucking + */ +/datum/element/bed_tuckable/proc/tuck_into_bed(obj/item/tucked, obj/structure/bed/target_bed, mob/living/tucker) + SIGNAL_HANDLER + + if(!istype(target_bed)) + return + + if(!tucker.transferItemToLoc(tucked, target_bed.drop_location())) + return + + to_chat(tucker, span_notice("You lay [tucked] out on [target_bed].")) + tucked.dir = target_bed.dir + tucked.pixel_x = target_bed.dir & EAST ? -x_offset : x_offset + tucked.pixel_y = y_offset + tucked.layer = ABOVE_MOB_LAYER + tucked.plane = -2 + if(starting_angle) + rotation_degree = target_bed.dir & EAST ? starting_angle + 180 : starting_angle + tucked.transform = turn(tucked.transform, rotation_degree) + RegisterSignal(tucked, COMSIG_ITEM_PICKUP, PROC_REF(untuck)) + + return COMPONENT_NO_AFTERATTACK + +/** + * If we rotate our object, then we need to un-rotate it when it's picked up + * + * tucked - the object that is tucked + */ +/datum/element/bed_tuckable/proc/untuck(obj/item/tucked) + SIGNAL_HANDLER + + tucked.transform = turn(tucked.transform, -rotation_degree) + tucked.layer = initial(tucked.layer) + tucked.plane = initial(tucked.plane) + UnregisterSignal(tucked, COMSIG_ITEM_PICKUP) diff --git a/code/datums/elements/digitalcamo.dm b/code/datums/elements/digitalcamo.dm index 504a0342f8..ac893c88e1 100644 --- a/code/datums/elements/digitalcamo.dm +++ b/code/datums/elements/digitalcamo.dm @@ -15,7 +15,6 @@ var/image/img = image(loc = target) img.override = TRUE attached_mobs[target] = img - HideFromAIHuds(target) /datum/element/digitalcamo/Detach(datum/target) . = ..() @@ -23,21 +22,7 @@ for(var/mob/living/silicon/ai/AI in GLOB.player_list) AI.client.images -= attached_mobs[target] attached_mobs -= target - UnhideFromAIHuds(target) -/datum/element/digitalcamo/proc/HideFromAIHuds(mob/living/target) - for(var/mob/living/silicon/ai/AI in GLOB.ai_list) - var/datum/atom_hud/M = GLOB.huds[AI.med_hud] - M.hide_single_atomhud_from(AI,target) - var/datum/atom_hud/S = GLOB.huds[AI.sec_hud] - S.hide_single_atomhud_from(AI,target) - -/datum/element/digitalcamo/proc/UnhideFromAIHuds(mob/living/target) - for(var/mob/living/silicon/ai/AI in GLOB.ai_list) - var/datum/atom_hud/M = GLOB.huds[AI.med_hud] - M.unhide_single_atomhud_from(AI,target) - var/datum/atom_hud/S = GLOB.huds[AI.sec_hud] - S.unhide_single_atomhud_from(AI,target) /datum/element/digitalcamo/proc/on_examine(datum/source, mob/M) to_chat(M, "[source.p_their()] skin seems to be shifting and morphing like is moving around below it.") diff --git a/code/datums/elements/relay_attackers.dm b/code/datums/elements/relay_attackers.dm new file mode 100644 index 0000000000..9011fa3e11 --- /dev/null +++ b/code/datums/elements/relay_attackers.dm @@ -0,0 +1,63 @@ +/** + * This element registers to a shitload of signals which can signify "someone attacked me". + * If anyone does it sends a single "someone attacked me" signal containing details about who done it. + * This prevents other components and elements from having to register to the same list of a million signals, should be more maintainable in one place. + */ +/datum/element/relay_attackers + +/datum/element/relay_attackers/Attach(datum/target) + . = ..() + // Boy this sure is a lot of ways to tell us that someone tried to attack us + RegisterSignal(target, COMSIG_PARENT_ATTACKBY, PROC_REF(on_attackby)) + RegisterSignal(target, list(COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_ATTACK_PAW), PROC_REF(on_attack_generic)) + RegisterSignal(target, list(COMSIG_ATOM_ATTACK_ANIMAL), PROC_REF(on_attack_npc)) + RegisterSignal(target, COMSIG_ATOM_BULLET_ACT, PROC_REF(on_bullet_act)) + RegisterSignal(target, COMSIG_ATOM_HITBY, PROC_REF(on_hitby)) + +/datum/element/relay_attackers/Detach(datum/source, ...) + . = ..() + UnregisterSignal(source, list( + COMSIG_PARENT_ATTACKBY, + COMSIG_ATOM_ATTACK_HAND, + COMSIG_ATOM_ATTACK_PAW, + COMSIG_ATOM_ATTACK_ANIMAL, + COMSIG_ATOM_BULLET_ACT, + COMSIG_ATOM_HITBY, + )) + +/datum/element/relay_attackers/proc/on_attackby(atom/target, obj/item/weapon, mob/attacker) + SIGNAL_HANDLER + if(weapon.force) + relay_attacker(target, attacker) + +/datum/element/relay_attackers/proc/on_attack_generic(atom/target, mob/living/attacker, list/modifiers) + SIGNAL_HANDLER + relay_attacker(target, attacker) + +/datum/element/relay_attackers/proc/on_attack_npc(atom/target, mob/living/attacker) + SIGNAL_HANDLER + relay_attacker(target, attacker) + +/datum/element/relay_attackers/proc/on_bullet_act(atom/target, obj/projectile/hit_projectile) + SIGNAL_HANDLER + if(hit_projectile.nodamage) + return + if(!ismob(hit_projectile.firer)) + return + relay_attacker(target, hit_projectile.firer) + +/datum/element/relay_attackers/proc/on_hitby(atom/target, atom/movable/hit_atom, skipcatch = FALSE, hitpush = TRUE, blocked = FALSE, datum/thrownthing/throwingdatum) + SIGNAL_HANDLER + if(!isitem(hit_atom)) + return + var/obj/item/hit_item = hit_atom + if(!hit_item.throwforce) + return + var/mob/thrown_by = hit_item.thrownby + if(!ismob(thrown_by)) + return + relay_attacker(target, thrown_by) + +/// Send out a signal identifying whoever just attacked us (usually a mob but sometimes a mech or turret) +/datum/element/relay_attackers/proc/relay_attacker(atom/victim, atom/attacker) + SEND_SIGNAL(victim, COMSIG_ATOM_WAS_ATTACKED, attacker) diff --git a/code/datums/elements/retaliate.dm b/code/datums/elements/retaliate.dm new file mode 100644 index 0000000000..fe3a56bf63 --- /dev/null +++ b/code/datums/elements/retaliate.dm @@ -0,0 +1,23 @@ +/** + * Attached to a mob with an AI controller, passes things which have damaged it to a blackboard. + * The AI controller is responsible for doing anything with that information. + */ +/datum/element/ai_retaliate + +/datum/element/ai_retaliate/Attach(datum/target) + . = ..() + if(!ismob(target)) + return ELEMENT_INCOMPATIBLE + target.AddElement(/datum/element/relay_attackers) + RegisterSignal(target, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(on_attacked)) + +/datum/element/ai_retaliate/Detach(datum/source, ...) + . = ..() + UnregisterSignal(source, COMSIG_ATOM_WAS_ATTACKED) + +/// Add an attacking atom to a blackboard list of things which attacked us +/datum/element/ai_retaliate/proc/on_attacked(mob/victim, atom/attacker) + SIGNAL_HANDLER + if (!victim.ai_controller) + return + victim.ai_controller.insert_blackboard_key_lazylist(BB_BASIC_MOB_RETALIATE_LIST, attacker) diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index fe858fa948..991b69763b 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -6,10 +6,6 @@ var/key_third_person = "" //This will also call the emote var/message = "" //Message displayed when emote is used var/message_mime = "" //Message displayed if the user is a mime - var/message_alien = "" //Message displayed if the user is a grown alien - var/message_larva = "" //Message displayed if the user is an alien larva - var/message_robot = "" //Message displayed if the user is a robot - var/message_AI = "" //Message displayed if the user is an AI var/message_monkey = "" //Message displayed if the user is a monkey var/message_simple = "" //Message to display if the user is a simple_animal var/message_param = "" //Message to display if a param was given @@ -115,7 +111,7 @@ pitch_modifier += (10 - STASTR) * 0.03 return clamp(final_pitch + pitch_modifier, 0.5, 2) - + /datum/emote/proc/get_env(mob/living/user) @@ -184,14 +180,6 @@ return "makes a [pick("strong ", "weak ", "")]noise." if(user.mind && user.mind.miming && message_mime) . = message_mime - if(isalienadult(user) && message_alien) - . = message_alien - else if(islarva(user) && message_larva) - . = message_larva - else if(iscyborg(user) && message_robot) - . = message_robot - else if(isAI(user) && message_AI) - . = message_AI else if(ismonkey(user) && message_monkey) . = message_monkey else if(isanimal(user) && message_simple) diff --git a/code/datums/ert.dm b/code/datums/ert.dm deleted file mode 100644 index 1a5e83153f..0000000000 --- a/code/datums/ert.dm +++ /dev/null @@ -1,73 +0,0 @@ -/datum/ert - var/mobtype = /mob/living/carbon/human - var/team = /datum/team/ert - var/opendoors = TRUE - var/leader_role = /datum/antagonist/ert/commander - var/enforce_human = TRUE - var/roles = list(/datum/antagonist/ert/security, /datum/antagonist/ert/medic, /datum/antagonist/ert/engineer) //List of possible roles to be assigned to ERT members. - var/rename_team - var/code - var/mission = "Assist the station." - var/teamsize = 5 - var/polldesc - -/datum/ert/New() - if (!polldesc) - polldesc = "" - -/datum/ert/blue - opendoors = FALSE - code = "Blue" - -/datum/ert/amber - code = "Amber" - -/datum/ert/red - leader_role = /datum/antagonist/ert/commander/red - roles = list(/datum/antagonist/ert/security/red, /datum/antagonist/ert/medic/red, /datum/antagonist/ert/engineer/red) - code = "Red" - -/datum/ert/deathsquad - roles = list(/datum/antagonist/ert/deathsquad) - leader_role = /datum/antagonist/ert/deathsquad/leader - rename_team = "Deathsquad" - code = "Delta" - mission = "Leave no witnesses." - polldesc = "" - -/datum/ert/centcom_official - code = "Green" - teamsize = 1 - opendoors = FALSE - leader_role = /datum/antagonist/official - roles = list(/datum/antagonist/official) - rename_team = "CentCom Officials" - polldesc = "" - -/datum/ert/centcom_official/New() - mission = "Conduct a routine performance review of [station_name()] and its Captain." - -/datum/ert/inquisition - roles = list(/datum/antagonist/ert/chaplain/inquisitor, /datum/antagonist/ert/security/inquisitor, /datum/antagonist/ert/medic/inquisitor) - leader_role = /datum/antagonist/ert/commander/inquisitor - rename_team = "Inquisition" - mission = "Destroy any traces of paranormal activity aboard the station." - polldesc = "" - -/datum/ert/janitor - roles = list(/datum/antagonist/ert/janitor, /datum/antagonist/ert/janitor/heavy) - leader_role = /datum/antagonist/ert/janitor/heavy - teamsize = 4 - opendoors = FALSE - rename_team = "Janitor" - mission = "Clean up EVERYTHING." - polldesc = "" - -/datum/ert/intern - roles = list(/datum/antagonist/ert/intern) - leader_role = /datum/antagonist/ert/intern/leader - teamsize = 7 - opendoors = FALSE - rename_team = "Horde of Interns" - mission = "Assist in conflict resolution." - polldesc = "" diff --git a/code/datums/explosion.dm b/code/datums/explosion.dm index 6c2ef98ea4..422732fcd5 100644 --- a/code/datums/explosion.dm +++ b/code/datums/explosion.dm @@ -282,12 +282,6 @@ GLOBAL_LIST_EMPTY(explosions) if(GLOB.Debug2) log_world("## DEBUG: Explosion([x0],[y0],[z0])(d[devastation_range],h[heavy_impact_range],l[light_impact_range]): Took [took] seconds.") - if(running) //if we aren't in a hurry - //Machines which report explosions. - for(var/array in GLOB.doppler_arrays) - var/obj/machinery/doppler_array/A = array - A.sense_explosion(epicenter, devastation_range, heavy_impact_range, light_impact_range, took,orig_dev_range, orig_heavy_range, orig_light_range) - ++stopped qdel(src) diff --git a/code/datums/gods/_patron.dm b/code/datums/gods/_patron.dm index 8090469dc6..bc1adc4f07 100644 --- a/code/datums/gods/_patron.dm +++ b/code/datums/gods/_patron.dm @@ -32,3 +32,14 @@ GLOBAL_LIST_EMPTY(preference_patrons) var/t2 /// Final tier spell var/t3 + + ///our traits thats applied by set_patron and removed when changed + var/list/added_traits + +/datum/patron/proc/on_gain(mob/living/pious) + for(var/trait in added_traits) + ADD_TRAIT(pious, trait, "[type]") + +/datum/patron/proc/on_remove(mob/living/pious) + for(var/trait in added_traits) + REMOVE_TRAIT(pious, trait, "[type]") diff --git a/code/datums/gods/patrons/divine_pantheon.dm b/code/datums/gods/patrons/divine_pantheon.dm index 6c84f3f62d..a9f24e17e2 100644 --- a/code/datums/gods/patrons/divine_pantheon.dm +++ b/code/datums/gods/patrons/divine_pantheon.dm @@ -56,13 +56,14 @@ /datum/patron/divine/necra name = "Necra" domain = "Force of Death and Decay" - desc = "The Veiled Lady, a feared but respected Force and keeper of the dead." + desc = "The Undermaiden, also known as the Veiled Lady. A feared but respected Force and keeper of the dead." flaws = "Unchanging, Apathetic, Strict" worshippers = "Dark Elves, Gravekeepers, Mourners" sins = "Undeath" t0 = /obj/effect/proc_holder/spell/invoked/lesser_heal t1 = /obj/effect/proc_holder/spell/targeted/burialrite t2 = /obj/effect/proc_holder/spell/targeted/churn + t3 = /obj/effect/proc_holder/spell/targeted/soulspeak // ............ SAINTS .................. /datum/patron/divine/ravox diff --git a/code/datums/heritage.dm b/code/datums/heritage.dm index db8a470136..c235453124 100644 --- a/code/datums/heritage.dm +++ b/code/datums/heritage.dm @@ -319,12 +319,10 @@ return FALSE for(var/mob/living/carbon/human/H in family_icons) if(toggle_true) - iconer.family_UI = FALSE iconer.client.images.Remove(family_icons[H]) continue if(!H || H == iconer) continue - iconer.family_UI = TRUE iconer.client.images.Add(family_icons[H]) //Sloppy bandaid way to apply latejoin family member icons. @@ -354,10 +352,28 @@ if(famrole == FAMILY_ADOPTED) return "adopted" +/* +* I made a attempt to put spouse mob into family datum +* but the complications of creating new families when +* people get married during the round and merging families +* just complicated it too much. -IP +*/ +/mob/living/carbon/human/proc/ApplySpouseUI(toggle_true = FALSE) + if(!spouse_mob) + return + if(!spouse_indicator) + spouse_indicator = new('icons/relations.dmi', loc = spouse_mob, icon_state = "related") + if(toggle_true) + client.images.Remove(spouse_indicator) + return + client.images.Add(spouse_indicator) + //Lists the users family. Unsure where to put this other than here. /mob/living/carbon/human/verb/ReturnFamilyList() set name = "List Family" set category = "Memory" + if(spouse_mob) + to_chat(src, span_info("[spouse_mob.real_name] is the name of your lover.")) if(family_datum) family_datum.ListFamily(src) else @@ -367,8 +383,14 @@ /mob/living/carbon/human/verb/ToggleFamilyUI() set name = "Toggle Family UI" set category = "Memory" + if(spouse_mob) + ApplySpouseUI(family_UI) if(family_datum) family_datum.ApplyUI(src, family_UI) - to_chat(src, "FamilyUI Toggled [family_UI ? "On" : "Off"]") else to_chat(src, "Your not part of any notable family.") + if(family_UI) + family_UI = FALSE + else + family_UI = TRUE + to_chat(src, "FamilyUI Toggled [family_UI ? "On" : "Off"]") diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm deleted file mode 100644 index 7f7b4c1149..0000000000 --- a/code/datums/holocall.dm +++ /dev/null @@ -1,413 +0,0 @@ -#define HOLOPAD_MAX_DIAL_TIME 200 - -#define HOLORECORD_DELAY "delay" -#define HOLORECORD_SAY "say" -#define HOLORECORD_SOUND "sound" -#define HOLORECORD_LANGUAGE "lang" -#define HOLORECORD_PRESET "preset" -#define HOLORECORD_RENAME "rename" - -#define HOLORECORD_MAX_LENGTH 200 - -/mob/camera/aiEye/remote/holo/setLoc() - . = ..() - var/obj/machinery/holopad/H = origin - H?.move_hologram(eye_user, loc) - -/obj/machinery/holopad/remove_eye_control(mob/living/user) - if(user.client) - user.reset_perspective(null) - user.remote_control = null - -//this datum manages it's own references - -/datum/holocall - var/mob/living/user //the one that called - var/obj/machinery/holopad/calling_holopad //the one that sent the call - var/obj/machinery/holopad/connected_holopad //the one that answered the call (may be null) - var/list/dialed_holopads //all things called, will be cleared out to just connected_holopad once answered - - var/mob/camera/aiEye/remote/holo/eye //user's eye, once connected - var/obj/effect/overlay/holo_pad_hologram/hologram //user's hologram, once connected - var/datum/action/innate/end_holocall/hangup //hangup action - - var/call_start_time - -//creates a holocall made by `caller` from `calling_pad` to `callees` -/datum/holocall/New(mob/living/caller, obj/machinery/holopad/calling_pad, list/callees) - call_start_time = world.time - user = caller - calling_pad.outgoing_call = src - calling_holopad = calling_pad - dialed_holopads = list() - - for(var/I in callees) - var/obj/machinery/holopad/H = I - if(!QDELETED(H) && H.is_operational()) - dialed_holopads += H - H.say("Incoming call.") - LAZYADD(H.holo_calls, src) - - if(!dialed_holopads.len) - calling_pad.say("Connection failure.") - qdel(src) - return - - testing("Holocall started") - -//cleans up ALL references :) -/datum/holocall/Destroy() - QDEL_NULL(hangup) - - if(!QDELETED(eye)) - QDEL_NULL(eye) - - if(connected_holopad && !QDELETED(hologram)) - hologram = null - connected_holopad.clear_holo(user) - - user = null - - //Hologram survived holopad destro - if(!QDELETED(hologram)) - hologram.HC = null - QDEL_NULL(hologram) - - for(var/I in dialed_holopads) - var/obj/machinery/holopad/H = I - LAZYREMOVE(H.holo_calls, src) - dialed_holopads.Cut() - - if(calling_holopad) - calling_holopad.outgoing_call = null - calling_holopad.SetLightsAndPower() - calling_holopad = null - if(connected_holopad) - connected_holopad.SetLightsAndPower() - connected_holopad = null - - testing("Holocall destroyed") - - return ..() - -//Gracefully disconnects a holopad `H` from a call. Pads not in the call are ignored. Notifies participants of the disconnection -/datum/holocall/proc/Disconnect(obj/machinery/holopad/H) - testing("Holocall disconnect") - if(H == connected_holopad) - var/area/A = get_area(connected_holopad) - calling_holopad.say("[A] holopad disconnected.") - else if(H == calling_holopad && connected_holopad) - connected_holopad.say("[user] disconnected.") - - ConnectionFailure(H, TRUE) - -//Forcefully disconnects a holopad `H` from a call. Pads not in the call are ignored. -/datum/holocall/proc/ConnectionFailure(obj/machinery/holopad/H, graceful = FALSE) - testing("Holocall connection failure: graceful [graceful]") - if(H == connected_holopad || H == calling_holopad) - if(!graceful && H != calling_holopad) - calling_holopad.say("Connection failure.") - qdel(src) - return - - LAZYREMOVE(H.holo_calls, src) - dialed_holopads -= H - if(!dialed_holopads.len) - if(graceful) - calling_holopad.say("Call rejected.") - testing("No recipients, terminating") - qdel(src) - -//Answers a call made to a holopad `H` which cannot be the calling holopad. Pads not in the call are ignored -/datum/holocall/proc/Answer(obj/machinery/holopad/H) - testing("Holocall answer") - if(H == calling_holopad) - CRASH("How cute, a holopad tried to answer itself.") - - if(!(H in dialed_holopads)) - return - - if(connected_holopad) - CRASH("Multi-connection holocall") - - for(var/I in dialed_holopads) - if(I == H) - continue - Disconnect(I) - - for(var/I in H.holo_calls) - var/datum/holocall/HC = I - if(HC != src) - HC.Disconnect(H) - - connected_holopad = H - - if(!Check()) - return - - hologram = H.activate_holo(user) - hologram.HC = src - - //eyeobj code is horrid, this is the best copypasta I could make - eye = new - eye.origin = H - eye.eye_initialized = TRUE - eye.eye_user = user - eye.name = "Camera Eye ([user.name])" - user.remote_control = eye - user.reset_perspective(eye) - eye.setLoc(H.loc) - - hangup = new(eye, src) - hangup.Grant(user) - -//Checks the validity of a holocall and qdels itself if it's not. Returns TRUE if valid, FALSE otherwise -/datum/holocall/proc/Check() - for(var/I in dialed_holopads) - var/obj/machinery/holopad/H = I - if(!H.is_operational()) - ConnectionFailure(H) - - if(QDELETED(src)) - return FALSE - - . = !QDELETED(user) && !user.incapacitated() && !QDELETED(calling_holopad) && calling_holopad.is_operational() && user.loc == calling_holopad.loc - - if(.) - if(!connected_holopad) - . = world.time < (call_start_time + HOLOPAD_MAX_DIAL_TIME) - if(!.) - calling_holopad.say("No answer received.") - calling_holopad.temp = "" - - if(!.) - testing("Holocall Check fail") - qdel(src) - -/datum/action/innate/end_holocall - name = "End Holocall" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "camera_off" - var/datum/holocall/hcall - -/datum/action/innate/end_holocall/New(Target, datum/holocall/HC) - ..() - hcall = HC - -/datum/action/innate/end_holocall/Activate() - hcall.Disconnect(hcall.calling_holopad) - - -//RECORDS -/datum/holorecord - var/caller_name = "Unknown" //Caller name - var/image/caller_image - var/list/entries = list() - var/language = /datum/language/common //Initial language, can be changed by HOLORECORD_LANGUAGE entries - -/datum/holorecord/proc/set_caller_image(mob/user) - var/olddir = user.dir - user.setDir(SOUTH) - caller_image = image(user) - user.setDir(olddir) - -/obj/item/disk/holodisk - name = "holorecord disk" - desc = "" - icon_state = "holodisk" - obj_flags = UNIQUE_RENAME - custom_materials = list(/datum/material/iron = 100, /datum/material/glass = 100) - var/datum/holorecord/record - //Preset variables - var/preset_image_type - var/preset_record_text - -/obj/item/disk/holodisk/Initialize(mapload) - . = ..() - if(preset_record_text) - INVOKE_ASYNC(src, PROC_REF(build_record)) - -/obj/item/disk/holodisk/Destroy() - QDEL_NULL(record) - return ..() - -/obj/item/disk/holodisk/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/disk/holodisk)) - var/obj/item/disk/holodisk/holodiskOriginal = W - if (holodiskOriginal.record) - if (!record) - record = new - record.caller_name = holodiskOriginal.record.caller_name - record.caller_image = holodiskOriginal.record.caller_image - record.entries = holodiskOriginal.record.entries.Copy() - record.language = holodiskOriginal.record.language - to_chat(user, "I copy the record from [holodiskOriginal] to [src] by connecting the ports!") - name = holodiskOriginal.name - else - to_chat(user, "[holodiskOriginal] has no record on it!") - ..() - -/obj/item/disk/holodisk/proc/build_record() - record = new - var/list/lines = splittext(preset_record_text,"\n") - for(var/line in lines) - var/prepared_line = trim(line) - if(!length(prepared_line)) - continue - var/splitpoint = findtext(prepared_line," ") - if(!splitpoint) - continue - var/command = copytext(prepared_line,1,splitpoint) - var/value = copytext(prepared_line,splitpoint+1) - switch(command) - if("DELAY") - var/delay_value = text2num(value) - if(!delay_value) - continue - record.entries += list(list(HOLORECORD_DELAY,delay_value)) - if("NAME") - if(!record.caller_name) - record.caller_name = value - else - record.entries += list(list(HOLORECORD_RENAME,value)) - if("SAY") - record.entries += list(list(HOLORECORD_SAY,value)) - if("SOUND") - record.entries += list(list(HOLORECORD_SOUND,value)) - if("LANGUAGE") - var/lang_type = text2path(value) - if(ispath(lang_type,/datum/language)) - record.entries += list(list(HOLORECORD_LANGUAGE,lang_type)) - if("PRESET") - var/preset_type = text2path(value) - if(ispath(preset_type,/datum/preset_holoimage)) - record.entries += list(list(HOLORECORD_PRESET,preset_type)) - if(!preset_image_type) - record.caller_image = image('icons/mob/animal.dmi',"old") - else - var/datum/preset_holoimage/H = new preset_image_type - record.caller_image = H.build_image() - -//These build caller image from outfit and some additional data, for use by mappers for ruin holorecords -/datum/preset_holoimage - var/nonhuman_mobtype //Fill this if you just want something nonhuman - var/outfit_type - var/species_type = /datum/species/human - -/datum/preset_holoimage/proc/build_image() - if(nonhuman_mobtype) - var/mob/living/L = nonhuman_mobtype - . = image(initial(L.icon),initial(L.icon_state)) - else - var/mob/living/carbon/human/dummy/mannequin = generate_or_wait_for_human_dummy("HOLODISK_PRESET") - if(species_type) - mannequin.set_species(species_type) - if(outfit_type) - mannequin.equipOutfit(outfit_type,TRUE) - mannequin.setDir(SOUTH) - COMPILE_OVERLAYS(mannequin) - . = image(mannequin) - unset_busy_human_dummy("HOLODISK_PRESET") - -/obj/item/disk/holodisk/example - preset_image_type = /datum/preset_holoimage/clown - preset_record_text = {" - NAME Clown - DELAY 10 - SAY Why did the chaplain cross the maint ? - DELAY 20 - SAY He wanted to get to the other side! - SOUND clownstep - DELAY 30 - LANGUAGE /datum/language/narsie - SAY Helped him get there! - DELAY 10 - SAY ALSO IM SECRETLY A GORILLA - DELAY 10 - PRESET /datum/preset_holoimage/gorilla - NAME Gorilla - LANGUAGE /datum/language/common - SAY OOGA - DELAY 20"} - -/datum/preset_holoimage/engineer - outfit_type = /datum/outfit/job/engineer - -/datum/preset_holoimage/engineer/rig - outfit_type = /datum/outfit/job/engineer/gloved/rig - -/datum/preset_holoimage/engineer/ce - outfit_type = /datum/outfit/job/ce - -/datum/preset_holoimage/engineer/ce/rig - outfit_type = /datum/outfit/job/engineer/gloved/rig - -/datum/preset_holoimage/engineer/atmos - outfit_type = /datum/outfit/job/atmos - -/datum/preset_holoimage/engineer/atmos/rig - outfit_type = /datum/outfit/job/engineer/gloved/rig - -/datum/preset_holoimage/researcher - outfit_type = /datum/outfit/job/scientist - -/datum/preset_holoimage/captain - outfit_type = /datum/outfit/job/captain - -/datum/preset_holoimage/nanotrasenprivatesecurity - outfit_type = /datum/outfit/nanotrasensoldiercorpse2 - -/datum/preset_holoimage/gorilla - nonhuman_mobtype = /mob/living/simple_animal/hostile/gorilla - -/datum/preset_holoimage/corgi - nonhuman_mobtype = /mob/living/simple_animal/pet/dog/corgi - -/datum/preset_holoimage/clown - outfit_type = /datum/outfit/job/clown - -/obj/item/disk/holodisk/donutstation/whiteship - name = "Blackbox Print-out #DS024" - desc = "" - preset_image_type = /datum/preset_holoimage/engineer/ce - preset_record_text = {" - NAME Geysr Shorthalt - SAY Engine renovations complete and the ships been loaded. We all ready? - DELAY 25 - PRESET /datum/preset_holoimage/engineer - NAME Jacob Ullman - SAY Lets blow this popsicle stand of a station. - DELAY 20 - PRESET /datum/preset_holoimage/engineer/atmos - NAME Lindsey Cuffler - SAY Uh, sir? Shouldn't we call for a secondary shuttle? The bluespace drive on this thing made an awfully weird noise when we jumped here.. - DELAY 30 - PRESET /datum/preset_holoimage/engineer/ce - NAME Geysr Shorthalt - SAY Pah! Ship techie at the dock said to give it a good few kicks if it started acting up, let me just.. - DELAY 25 - SOUND punch - SOUND sparks - DELAY 10 - SOUND punch - SOUND sparks - DELAY 10 - SOUND punch - SOUND sparks - SOUND warpspeed - DELAY 15 - PRESET /datum/preset_holoimage/engineer/atmos - NAME Lindsey Cuffler - SAY Uhh.. is it supposed to be doing that?? - DELAY 15 - PRESET /datum/preset_holoimage/engineer/ce - NAME Geysr Shorthalt - SAY See? Working as intended. Now, are we all ready? - DELAY 10 - PRESET /datum/preset_holoimage/engineer - NAME Jacob Ullman - SAY Is it supposed to be glowing like that? - DELAY 20 - SOUND explosion - - "} diff --git a/code/datums/keybinding/admin.dm b/code/datums/keybinding/admin.dm index e3c77dc1e4..60addd772b 100644 --- a/code/datums/keybinding/admin.dm +++ b/code/datums/keybinding/admin.dm @@ -2,7 +2,7 @@ category = CATEGORY_ADMIN weight = WEIGHT_ADMIN -/* + /datum/keybinding/admin/admin_say hotkey_keys = list("F3") name = "admin_say" @@ -72,4 +72,4 @@ /datum/keybinding/admin/deadsay/down(client/user) user.get_dead_say() return TRUE -*/ + diff --git a/code/datums/looping_sounds/_looping_sound.dm b/code/datums/looping_sounds/_looping_sound.dm index 036189bd4d..a498fcd0f4 100644 --- a/code/datums/looping_sounds/_looping_sound.dm +++ b/code/datums/looping_sounds/_looping_sound.dm @@ -1,5 +1,5 @@ /* - output_atoms (list of atoms) The destination(s) for the sounds + parent (the source of the sound) The source the sound comes from mid_sounds (list or soundfile) Since this can be either a list or a single soundfile you can have random sounds. May contain further lists but must contain a soundfile at the end. mid_length (num) The length to wait between playing mid_sounds @@ -15,7 +15,7 @@ direct (bool) If true plays directly to provided atoms instead of from them */ /datum/looping_sound - var/list/atom/output_atoms + var/atom/parent var/mid_sounds var/mid_length var/start_sound @@ -33,39 +33,49 @@ var/persistent_loop = FALSE //we stay in the client's played_loops so we keep updating volume even when out of range var/cursound var/list/thingshearing = list() - var/ignore_wallz = TRUE + var/ignore_walls = TRUE var/timerid + /// Has the looping started yet? + var/loop_started = FALSE + ///our sound channel + var/channel -/datum/looping_sound/New(list/_output_atoms=list(), start_immediately=FALSE, _direct=FALSE) +/datum/looping_sound/New(_parent, start_immediately=FALSE, _direct=FALSE, _channel = 0) if(!mid_sounds) WARNING("A looping sound datum was created without sounds to play.") return + if(islist(_parent)) + WARNING("A looping sound datum was created using a list, this is no longer allowed please change to a parent") + return - output_atoms = _output_atoms + parent = _parent direct = _direct + channel = _channel if(start_immediately) start() /datum/looping_sound/Destroy() stop() - output_atoms = null + parent = null return ..() -/datum/looping_sound/proc/start(atom/add_thing) +/datum/looping_sound/proc/start(atom/on_behalf_of) stopped = FALSE - if(add_thing) - output_atoms |= add_thing + if(on_behalf_of) + set_parent(on_behalf_of) + loop_started = TRUE // if(timerid) // return on_start() -/datum/looping_sound/proc/stop(atom/remove_thing) +/datum/looping_sound/proc/stop(null_parent) if(!stopped) stopped = TRUE - if(remove_thing) - output_atoms -= remove_thing + if(null_parent) + set_parent(null) on_stop() + loop_started = FALSE // if(!timerid) // return // deltimer(timerid) @@ -87,41 +97,41 @@ // timerid = addtimer(CALLBACK(src, PROC_REF(sound_loop), world.time), mid_length, TIMER_CLIENT_TIME | TIMER_STOPPABLE | TIMER_LOOP) /datum/looping_sound/proc/play(soundfile) - var/list/atoms_cache = output_atoms var/sound/S = soundfile if(!istype(S)) S = sound(soundfile) if(direct) - S.channel = open_sound_channel() + S.channel = channel || SSsounds.random_available_channel() S.volume = volume - for(var/i in 1 to atoms_cache.len) - var/atom/thing = atoms_cache[i] - if(direct) - SEND_SOUND(thing, S) - else - var/list/R = playsound(thing, soundfile, volume, vary, extra_range, falloff, frequency, ignore_walls = ignore_wallz, repeat = src) - if(!R || !R.len) - R = list() - for(var/mob/M in thingshearing) - if(!M.client) - thingshearing -= M - continue - if(!(M in R) || M.IsSleeping())// they are out of range - var/list/L = M.client.played_loops[src] - if(L) - var/sound/SD = L["SOUND"] - if(SD) - if(persistent_loop) - L["MUTESTATUS"] = TRUE - L["VOL"] = 0 - M.mute_sound(SD) - //M.play_ambience() - else - M.client.played_loops -= src - thingshearing -= M - M.stop_sound_channel(SD.channel) - else - on_hear_sound(M) + var/atom/thing = parent + if(direct) + if(ismob(thing)) + var/mob/mob = thing + mob.playsound_local(get_turf(mob), soundfile, volume, vary, frequency, falloff, repeat = src, channel = channel) + else + var/list/R = playsound(thing, soundfile, volume, vary, extra_range, falloff, frequency, ignore_walls = ignore_walls, repeat = src, channel = channel) + if(!R || !R.len) + R = list() + for(var/mob/M in thingshearing) + if(!M.client) + thingshearing -= M + continue + if(!(M in R) || M.IsSleeping())// they are out of range + var/list/L = M.client.played_loops[src] + if(L) + var/sound/SD = L["SOUND"] + if(SD) + if(persistent_loop) + L["MUTESTATUS"] = TRUE + L["VOL"] = 0 + M.mute_sound(SD) + //M.play_ambience() + else + M.client.played_loops -= src + thingshearing -= M + M.stop_sound_channel(SD.channel) + else + on_hear_sound(M) /datum/looping_sound/proc/on_hear_sound(mob/M) return @@ -167,3 +177,14 @@ client.played_loops -= X X.thingshearing -= src */ + +/datum/looping_sound/proc/set_parent(new_parent) + if(parent) + UnregisterSignal(parent, COMSIG_PARENT_QDELETING) + parent = new_parent + if(parent) + RegisterSignal(parent, COMSIG_PARENT_QDELETING, PROC_REF(handle_parent_del)) + +/datum/looping_sound/proc/handle_parent_del(datum/source) + SIGNAL_HANDLER + set_parent(null) diff --git a/code/datums/looping_sounds/item_sounds.dm b/code/datums/looping_sounds/item_sounds.dm index be8d60c3ef..f514df876a 100644 --- a/code/datums/looping_sounds/item_sounds.dm +++ b/code/datums/looping_sounds/item_sounds.dm @@ -1,41 +1,3 @@ -#define RAD_GEIGER_LOW 100 // Geiger counter sound thresholds -#define RAD_GEIGER_MEDIUM 500 -#define RAD_GEIGER_HIGH 1000 - -/datum/looping_sound/geiger - mid_sounds = list( - list('sound/blank.ogg'=1), - list('sound/blank.ogg'=1), - list('sound/blank.ogg'=1), - list('sound/blank.ogg'=1) - ) - mid_length = 2 - volume = 25 - var/last_radiation - -/datum/looping_sound/geiger/get_sound(starttime) - var/danger - switch(last_radiation) - if(RAD_BACKGROUND_RADIATION to RAD_GEIGER_LOW) - danger = 1 - if(RAD_GEIGER_LOW to RAD_GEIGER_MEDIUM) - danger = 2 - if(RAD_GEIGER_MEDIUM to RAD_GEIGER_HIGH) - danger = 3 - if(RAD_GEIGER_HIGH to INFINITY) - danger = 4 - else - return null - return ..(starttime, mid_sounds[danger]) - -/datum/looping_sound/geiger/stop() - . = ..() - last_radiation = 0 - -#undef RAD_GEIGER_LOW -#undef RAD_GEIGER_MEDIUM -#undef RAD_GEIGER_HIGH - /datum/looping_sound/reverse_bear_trap mid_sounds = list('sound/blank.ogg') mid_length = 3.5 @@ -80,7 +42,7 @@ volume = 40 extra_range = 0 vary = TRUE - ignore_wallz = FALSE + ignore_walls = FALSE /datum/looping_sound/streetlamp2 mid_sounds = list('sound/misc/loops/StLight2.ogg') @@ -88,7 +50,7 @@ volume = 40 extra_range = 0 vary = TRUE - ignore_wallz = FALSE + ignore_walls = FALSE /datum/looping_sound/streetlamp3 mid_sounds = list('sound/misc/loops/StLight3.ogg') @@ -96,14 +58,14 @@ volume = 40 extra_range = 0 vary = TRUE - ignore_wallz = FALSE + ignore_walls = FALSE /datum/looping_sound/clockloop mid_sounds = list('sound/misc/clockloop.ogg') mid_length = 20 volume = 10 extra_range = -3 - ignore_wallz = FALSE + ignore_walls = FALSE /datum/looping_sound/boatloop mid_sounds = list('sound/ambience/boat (1).ogg','sound/ambience/boat (2).ogg') diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 4556a2828b..f7ed2a3048 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -223,8 +223,6 @@ else user.take_bodypart_damage(2*force) return - if(iscyborg(target)) - return ..() if(!isliving(target)) return ..() var/mob/living/carbon/C = target diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 7f358a0fc1..bc2c2b5224 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -127,7 +127,7 @@ if(H.gender == FEMALE && J.f_title) used_title = J.f_title if(!used_title) - used_title = "unknown" + used_title = "Unknown" known_people[H.real_name]["FJOB"] = used_title known_people[H.real_name]["FGENDER"] = H.gender known_people[H.real_name]["FAGE"] = H.age @@ -151,7 +151,7 @@ if(H.gender == FEMALE && J.f_title) used_title = J.f_title if(!used_title) - used_title = "unknown" + used_title = "Unknown" M.known_people[H.real_name]["FJOB"] = used_title M.known_people[H.real_name]["FGENDER"] = H.gender M.known_people[H.real_name]["FAGE"] = H.age @@ -179,8 +179,7 @@ var/datum/mind/M = person var/mob/living/carbon/human/H = current if(M.known_people && istype(H)) - if(M.known_people[H.real_name]) - M.known_people[H.real_name] = null + M.known_people -= H.real_name /datum/mind/proc/unknow_all_people() @@ -448,152 +447,25 @@ var/datum/antagonist/antaggy = GG return antaggy.isgoodguy -/* - Removes antag type's references from a mind. - objectives, uplinks, powers etc are all handled. -*/ - -/datum/mind/proc/remove_changeling() - var/datum/antagonist/changeling/C = has_antag_datum(/datum/antagonist/changeling) - if(C) - remove_antag_datum(/datum/antagonist/changeling) - special_role = null /datum/mind/proc/remove_traitor() remove_antag_datum(/datum/antagonist/traitor) -/datum/mind/proc/remove_brother() - if(src in SSticker.mode.brothers) - remove_antag_datum(/datum/antagonist/brother) - -/datum/mind/proc/remove_nukeop() - var/datum/antagonist/nukeop/nuke = has_antag_datum(/datum/antagonist/nukeop,TRUE) - if(nuke) - remove_antag_datum(nuke.type) - special_role = null - /datum/mind/proc/remove_wizard() remove_antag_datum(/datum/antagonist/wizard) special_role = null -/datum/mind/proc/remove_cultist() - if(src in SSticker.mode.cult) - SSticker.mode.remove_cultist(src, 0, 0) - special_role = null - remove_antag_equip() - -/datum/mind/proc/remove_rev() - var/datum/antagonist/rev/rev = has_antag_datum(/datum/antagonist/rev) - if(rev) - remove_antag_datum(rev.type) - special_role = null - - -/datum/mind/proc/remove_antag_equip() - var/list/Mob_Contents = current.get_contents() - for(var/obj/item/I in Mob_Contents) - var/datum/component/uplink/O = I.GetComponent(/datum/component/uplink) //Todo make this reset signal - if(O) - O.unlock_code = null - /datum/mind/proc/remove_all_antag() //For the Lazy amongst us. - remove_changeling() remove_traitor() - remove_nukeop() remove_wizard() - remove_cultist() - remove_rev() /datum/mind/proc/equip_traitor(employer = "The Syndicate", silent = FALSE, datum/antagonist/uplink_owner) - if(!current) - return - var/mob/living/carbon/human/traitor_mob = current - if (!istype(traitor_mob)) - return - - var/list/all_contents = traitor_mob.GetAllContents() - var/obj/item/pda/PDA = locate() in all_contents - var/obj/item/radio/R = locate() in all_contents - var/obj/item/pen/P - - if (PDA) // Prioritize PDA pen, otherwise the pocket protector pens will be chosen, which causes numerous ahelps about missing uplink - P = locate() in PDA - if (!P) // If we couldn't find a pen in the PDA, or we didn't even have a PDA, do it the old way - P = locate() in all_contents - if(!P) // I do not have a pen. - var/obj/item/pen/inowhaveapen - if(istype(traitor_mob.back,/obj/item/storage)) //ok buddy you better have a backpack! - inowhaveapen = new /obj/item/pen(traitor_mob.back) - else - inowhaveapen = new /obj/item/pen(traitor_mob.loc) - traitor_mob.put_in_hands(inowhaveapen) // I hope you don't have arms and my traitor pen gets stolen for all this trouble you've caused. - P = inowhaveapen - - var/obj/item/uplink_loc - - if(traitor_mob.client && traitor_mob.client.prefs) - switch(traitor_mob.client.prefs.uplink_spawn_loc) - if(UPLINK_PDA) - uplink_loc = PDA - if(!uplink_loc) - uplink_loc = R - if(!uplink_loc) - uplink_loc = P - if(UPLINK_RADIO) - uplink_loc = R - if(!uplink_loc) - uplink_loc = PDA - if(!uplink_loc) - uplink_loc = P - if(UPLINK_PEN) - uplink_loc = P - if(!uplink_loc) - uplink_loc = PDA - if(!uplink_loc) - uplink_loc = R - - if (!uplink_loc) - if(!silent) - to_chat(traitor_mob, "Unfortunately, [employer] wasn't able to get you an Uplink.") - . = 0 - else - . = uplink_loc - var/datum/component/uplink/U = uplink_loc.AddComponent(/datum/component/uplink, traitor_mob.key) - if(!U) - CRASH("Uplink creation failed.") - U.setup_unlock_code() - if(!silent) - if(uplink_loc == R) - to_chat(traitor_mob, "[employer] has cunningly disguised a Syndicate Uplink as my [R.name]. Simply dial the frequency [format_frequency(U.unlock_code)] to unlock its hidden features.") - else if(uplink_loc == PDA) - to_chat(traitor_mob, "[employer] has cunningly disguised a Syndicate Uplink as my [PDA.name]. Simply enter the code \"[U.unlock_code]\" into the ringtone select to unlock its hidden features.") - else if(uplink_loc == P) - to_chat(traitor_mob, "[employer] has cunningly disguised a Syndicate Uplink as my [P.name]. Simply twist the top of the pen [english_list(U.unlock_code)] from its starting position to unlock its hidden features.") - - if(uplink_owner) - uplink_owner.antag_memory += U.unlock_note + "
" - else - traitor_mob.mind.store_memory(U.unlock_note) + return //Link a new mobs mind to the creator of said mob. They will join any team they are currently on, and will only switch teams when their creator does. /datum/mind/proc/enslave_mind_to_creator(mob/living/creator) - if(iscultist(creator)) - SSticker.mode.add_cultist(src) - - else if(is_revolutionary(creator)) - var/datum/antagonist/rev/converter = creator.mind.has_antag_datum(/datum/antagonist/rev,TRUE) - converter.add_revolutionary(src,FALSE) - - else if(is_nuclear_operative(creator)) - var/datum/antagonist/nukeop/converter = creator.mind.has_antag_datum(/datum/antagonist/nukeop,TRUE) - var/datum/antagonist/nukeop/N = new() - N.send_to_spawnpoint = FALSE - N.nukeop_outfit = null - add_antag_datum(N,converter.nuke_team) - - enslaved_to = creator current.faction |= creator.faction @@ -769,49 +641,11 @@ return objective.completed = !objective.completed log_admin("[key_name(usr)] toggled the win state for [current]'s objective: [objective.explanation_text]") - - else if (href_list["silicon"]) - switch(href_list["silicon"]) - if("unemag") - var/mob/living/silicon/robot/R = current - if (istype(R)) - R.SetEmagged(0) - message_admins("[key_name_admin(usr)] has unemag'ed [R].") - log_admin("[key_name(usr)] has unemag'ed [R].") - - if("unemagcyborgs") - if(isAI(current)) - var/mob/living/silicon/ai/ai = current - for (var/mob/living/silicon/robot/R in ai.connected_robots) - R.SetEmagged(0) - message_admins("[key_name_admin(usr)] has unemag'ed [ai]'s Cyborgs.") - log_admin("[key_name(usr)] has unemag'ed [ai]'s Cyborgs.") - else if (href_list["common"]) switch(href_list["common"]) if("undress") for(var/obj/item/W in current) current.dropItemToGround(W, TRUE) //The 1 forces all items to drop, since this is an admin undress. - if("takeuplink") - take_uplink() - memory = null//Remove any memory they may have had. - log_admin("[key_name(usr)] removed [current]'s uplink.") - if("crystals") - if(check_rights(R_FUN, 0)) - var/datum/component/uplink/U = find_syndicate_uplink() - if(U) - var/crystals = input("Amount of telecrystals for [key]","Syndicate uplink", U.telecrystals) as null | num - if(!isnull(crystals)) - U.telecrystals = crystals - message_admins("[key_name_admin(usr)] changed [current]'s telecrystal count to [crystals].") - log_admin("[key_name(usr)] changed [current]'s telecrystal count to [crystals].") - if("uplink") - if(!equip_traitor()) - to_chat(usr, "Equipping a syndicate failed!") - log_admin("[key_name(usr)] tried and failed to give [current] an uplink.") - else - log_admin("[key_name(usr)] gave [current] an uplink.") - else if (href_list["obj_announce"]) announce_objectives() @@ -836,53 +670,17 @@ to_chat(current, "Objective #[obj_count]: [O.explanation_text]") obj_count++ -/datum/mind/proc/find_syndicate_uplink() - var/list/L = current.GetAllContents() - for (var/i in L) - var/atom/movable/I = i - . = I.GetComponent(/datum/component/uplink) - if(.) - break - -/datum/mind/proc/take_uplink() - qdel(find_syndicate_uplink()) /datum/mind/proc/make_Traitor() if(!(has_antag_datum(/datum/antagonist/traitor))) add_antag_datum(/datum/antagonist/traitor) -/datum/mind/proc/make_Contractor_Support() - if(!(has_antag_datum(/datum/antagonist/traitor/contractor_support))) - add_antag_datum(/datum/antagonist/traitor/contractor_support) - -/datum/mind/proc/make_Changeling() - var/datum/antagonist/changeling/C = has_antag_datum(/datum/antagonist/changeling) - if(!C) - C = add_antag_datum(/datum/antagonist/changeling) - special_role = ROLE_CHANGELING - return C - /datum/mind/proc/make_Wizard() if(!has_antag_datum(/datum/antagonist/wizard)) special_role = ROLE_WIZARD assigned_role = ROLE_WIZARD add_antag_datum(/datum/antagonist/wizard) - -/datum/mind/proc/make_Cultist() - if(!has_antag_datum(/datum/antagonist/cult,TRUE)) - SSticker.mode.add_cultist(src,FALSE,equip=TRUE) - special_role = ROLE_CULTIST - to_chat(current, "I catch a glimpse of the Realm of Nar'Sie, The Geometer of Blood. You now see how flimsy my world is, you see that it should be open to the knowledge of Nar'Sie.") - to_chat(current, "Assist my new brethren in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.") - -/datum/mind/proc/make_Rev() - var/datum/antagonist/rev/head/head = new() - head.give_flash = TRUE - head.give_hud = TRUE - add_antag_datum(head) - special_role = ROLE_REV_HEAD - /datum/mind/proc/AddSpell(obj/effect/proc_holder/spell/S) if(!S) return @@ -1034,6 +832,8 @@ // Get a bonus multiplier dependant on age to apply to exp gains. Arg is a skill path. /datum/mind/proc/get_learning_boon(skill) var/mob/living/carbon/human/H = current + if(!istype(H)) + return 1 var/boon = H.age == AGE_OLD ? 0.8 : 1 // Can't teach an old dog new tricks. Most old jobs start with higher skill too. boon += get_skill_level(skill) / 10 return boon diff --git a/code/datums/mutations/_combined.dm b/code/datums/mutations/_combined.dm index 24c0f6e1a2..2215ceb2b0 100644 --- a/code/datums/mutations/_combined.dm +++ b/code/datums/mutations/_combined.dm @@ -21,10 +21,6 @@ required = "/datum/mutation/human/thermal; /datum/mutation/human/radioactive" result = /datum/mutation/human/thermal/x_ray -/datum/generecipe/mindread - required = "/datum/mutation/human/antenna; /datum/mutation/human/paranoia" - result = MINDREAD - /datum/generecipe/shock required = "/datum/mutation/human/insulated; /datum/mutation/human/radioactive" result = SHOCKTOUCH diff --git a/code/datums/mutations/antenna.dm b/code/datums/mutations/antenna.dm deleted file mode 100644 index 513ee20908..0000000000 --- a/code/datums/mutations/antenna.dm +++ /dev/null @@ -1,107 +0,0 @@ -/datum/mutation/human/antenna - name = "Antenna" - desc = "" - quality = POSITIVE - text_gain_indication = "I feel an antenna sprout from my forehead." - text_lose_indication = "My antenna shrinks back down." - instability = 5 - difficulty = 8 - var/obj/item/implant/radio/antenna/linked_radio - -/obj/item/implant/radio/antenna - name = "internal antenna organ" - desc = "" - icon = 'icons/obj/radio.dmi'//maybe make a unique sprite later. not important - icon_state = "walkietalkie" - -/obj/item/implant/radio/antenna/Initialize(mapload) - . = ..() - radio.name = "internal antenna" - -/datum/mutation/human/antenna/on_acquiring(mob/living/carbon/human/owner) - if(..()) - return - linked_radio = new(owner) - linked_radio.implant(owner, null, TRUE, TRUE) - -/datum/mutation/human/antenna/on_losing(mob/living/carbon/human/owner) - if(..()) - return - if(linked_radio) - QDEL_NULL(linked_radio) - -/datum/mutation/human/antenna/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut) - ..() - if(!(type in visual_indicators)) - visual_indicators[type] = list(mutable_appearance('icons/effects/genetics.dmi', "antenna", -FRONT_MUTATIONS_LAYER+1))//-MUTATIONS_LAYER+1 - -/datum/mutation/human/antenna/get_visual_indicator() - return visual_indicators[type][1] - -/datum/mutation/human/mindreader - name = "Mind Reader" - desc = "" - quality = POSITIVE - text_gain_indication = "I hear distant voices at the corners of my mind." - text_lose_indication = "The distant voices fade." - power = /obj/effect/proc_holder/spell/targeted/mindread - instability = 40 - difficulty = 8 - locked = TRUE - -/obj/effect/proc_holder/spell/targeted/mindread - name = "Mindread" - desc = "" - charge_max = 50 - range = 7 - clothes_req = FALSE - action_icon_state = "mindread" - -/obj/effect/proc_holder/spell/targeted/mindread/cast(list/targets, mob/living/carbon/human/user = usr) - for(var/mob/living/M in targets) - if(usr.anti_magic_check(FALSE, FALSE, TRUE, 0) || M.anti_magic_check(FALSE, FALSE, TRUE, 0)) - to_chat(usr, "As you reach out with my mind, you're suddenly stopped by a vision of a massive tinfoil wall that streches beyond visible range. It seems you've been foiled.") - return - if(M.stat == DEAD) - to_chat(user, "[M] is dead!") - return - if(M.mind) - to_chat(user, "I plunge into [M]'s mind...") - if(prob(20)) - to_chat(M, "I feel something foreign enter my mind.")//chance to alert the read-ee - var/list/recent_speech = list() - var/list/say_log = list() - var/log_source = M.logging - for(var/log_type in log_source)//this whole loop puts the read-ee's say logs into say_log in an easy to access way - var/nlog_type = text2num(log_type) - if(nlog_type & LOG_SAY) - var/list/reversed = log_source[log_type] - if(islist(reversed)) - say_log = reverseRange(reversed.Copy()) - break - if(LAZYLEN(say_log)) - for(var/spoken_memory in say_log) - if(recent_speech.len >= 3)//up to 3 random lines of speech, favoring more recent speech - break - if(prob(50)) - recent_speech[spoken_memory] = say_log[spoken_memory] - if(recent_speech.len) - to_chat(user, "I catch some drifting memories of their past conversations...") - for(var/spoken_memory in recent_speech) - to_chat(user, "[recent_speech[spoken_memory]]") - if(iscarbon(M)) - var/mob/living/carbon/human/H = M - to_chat(user, "I find that their intent is to [H.used_intent]...") - var/datum/dna/the_dna = H.has_dna() - if(the_dna) - to_chat(user, "I uncover that [H.p_their()] true identity is [the_dna.real_name].") - else - to_chat(user, "I can't find a mind to read inside of [M]!") - -/datum/mutation/human/mindreader/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut) - ..() - if(!(type in visual_indicators)) - visual_indicators[type] = list(mutable_appearance('icons/effects/genetics.dmi', "antenna", -FRONT_MUTATIONS_LAYER+1)) - -/datum/mutation/human/mindreader/get_visual_indicator() - return visual_indicators[type][1] diff --git a/code/datums/outdoor_datum.dm b/code/datums/outdoor_datum.dm new file mode 100644 index 0000000000..38dfb7c0cd --- /dev/null +++ b/code/datums/outdoor_datum.dm @@ -0,0 +1,154 @@ +//todo: handle moving sunlight turfs - see various uses of get_turf in lighting_object + + +/* + +Sunlight System + + Objects + Details + Sunlight Objects (this file) + - Grayscale version of lighting_object + - Has 3 states + - SKY_BLOCKED (0) + - Turfs that have an opaque turf above them. Has no light themselves but is affected by SKY_VISIBLE_BORDER + - SKY_VISIBLE (1) + - Turfs that with no opaque turfs above it (no roof, glass roof, etc), with no neighbouring SKY_BLOCKED tiles + Emits no light, but is fully white to display the overlay color + - SKY_VISIBLE_BORDER (2) + - Turfs that with no opaque turfs above it (no roof, glass roof, etc), which neighbour at least one SKY_BLOCKED tile. + Emits light to SKY_BLOCKED tiles, and fully white to display the overlay color + +*/ +/obj + var/weatherproof = FALSE + var/weather = FALSE + +/obj/proc/weather_act_on(weather_trait, severity) + return + +/atom/movable/outdoor_effect + name = "" + mouse_opacity = 0 + anchored = 1 + appearance_flags = RESET_COLOR | RESET_ALPHA | RESET_TRANSFORM + plane = WEATHER_EFFECT_PLANE + + /* misc vars */ + var/state = SKY_VISIBLE // If we can see the see the sky, are blocked, or we have a blocked neighbour (SKY_BLOCKED/VISIBLE/VISIBLE_BORDER) + var/weatherproof = FALSE // If we have a weather overlay + var/turf/source_turf + +/atom/movable/outdoor_effect/Destroy(force) + if (!force) + return QDEL_HINT_LETMELIVE + + //Remove ourselves from our turf + if(source_turf && source_turf.outdoor_effect == src) + source_turf.outdoor_effect = null + + + return ..() + + + +/atom/movable/outdoor_effect/Initialize(mapload) + . = ..() + source_turf = loc + if (source_turf.outdoor_effect) + qdel(source_turf.outdoor_effect, force = TRUE) + source_turf.outdoor_effect = null //No qdel_null force + source_turf.outdoor_effect = src + + +/* Related object changes */ +/* I moved this here to consolidate sunlight changes as much as possible, so its easily disabled */ + +/* area fuckery */ +/area/var/turf/pseudo_roof + +/* turf fuckery */ +/turf/var/tmp/atom/movable/outdoor_effect/outdoor_effect /* a turf's sunlight overlay */ +/turf/var/turf/pseudo_roof /* our roof turf - may be a path for top z level, or a ref to the turf above*/ + +//non-weatherproof turfs +/turf/var/weatherproof = TRUE +/turf/open/transparent/openspace/weatherproof = FALSE + +/turf/proc/reassess_stack() + GLOB.SUNLIGHT_QUEUE_WORK += src + var/turf/T = SSmapping.get_turf_below(src) + if(T) + T.reassess_stack() + +/* check ourselves and neighbours to see what outdoor effects we need */ +/* turf won't initialize an outdoor_effect if sky_blocked*/ +/turf/proc/get_sky_and_weather_states() + var/TempState + + var/roofStat = get_ceiling_status() + var/tempRoofStat + if(roofStat["SKYVISIBLE"]) + TempState = SKY_VISIBLE + for(var/turf/CT in RANGE_TURFS(1, src)) + tempRoofStat = CT.get_ceiling_status() + if(!tempRoofStat["SKYVISIBLE"]) /* if we have a single roofed/indoor neighbour, we are a border */ + TempState = SKY_VISIBLE_BORDER + break + else /* roofed, so turn off the lights */ + TempState = SKY_BLOCKED + + /* if border or indoor, initialize. Set sunlight state if valid */ + if(!outdoor_effect && (TempState <> SKY_BLOCKED || !roofStat["WEATHERPROOF"])) + outdoor_effect = new /atom/movable/outdoor_effect(src) + if(outdoor_effect) + outdoor_effect.state = TempState + outdoor_effect.weatherproof = roofStat["WEATHERPROOF"] + +/* runs up the Z stack for this turf, returns a assoc (SKYVISIBLE, WEATHERPROOF)*/ +/* pass recursionStarted=TRUE when we are checking our ceiling's stats */ +/turf/proc/get_ceiling_status(recursionStarted = FALSE) + . = list() + + //Check yourself (before you wreck yourself) + if(isclosedturf(src)) //Closed, but we might be transparent + .["SKYVISIBLE"] = istransparentturf(src) // a column of glass should still let the sun in + .["WEATHERPROOF"] = TRUE + else + if(recursionStarted) + // This src is acting as a ceiling - so if we are a floor we weatherproof + block the sunlight of our down-Z turf + .["SKYVISIBLE"] = istransparentturf(src) //If we are glass floor, we don't block + for(var/obj/structure/thing in src.contents) // Checks to see if weatherproof objects on the tile + if(thing.weatherproof == TRUE) + .["WEATHERPROOF"] = TRUE // returns true to block the weather + .["SKYVISIBLE"] = FALSE + return . + .["WEATHERPROOF"] = weatherproof //If we are air or space, we aren't weatherproof + else //We are open, so assume open to the elements + .["SKYVISIBLE"] = TRUE + .["WEATHERPROOF"] = FALSE + + // Early leave if we can't see the sky - if we are an opaque turf, we already know the results + // I can't think of a case where we would have a turf that would block light but let weather effects through - Maybe a vent? + // fix this if that is the case + if(!.["SKYVISIBLE"]) + return . + + //Ceiling Check + // Psuedo-roof, for the top of the map (no actual turf exists up here) -- We assume these are solid, if you add glass pseudo_roofs then fix this + if (pseudo_roof) + .["SKYVISIBLE"] = FALSE + .["WEATHERPROOF"] = TRUE + else + // EVERY turf must be transparent for sunlight - so &= + // ANY turf must be closed for weatherproof - so |= + var/turf/ceiling = get_step_multiz(src, UP) + if(ceiling) + var/list/ceilingStat = ceiling.get_ceiling_status(TRUE) //Pass TRUE because we are now acting as a ceiling + .["SKYVISIBLE"] &= ceilingStat["SKYVISIBLE"] + .["WEATHERPROOF"] |= ceilingStat["WEATHERPROOF"] + + var/area/turf_area = get_area(src) + var/turf/above_turf = get_step_multiz(src, UP) + if((!above_turf && !turf_area.outdoors)) + .["SKYVISIBLE"] = FALSE + .["WEATHERPROOF"] = TRUE diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index ebca46966a..e8c048891d 100644 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -261,10 +261,6 @@ for(var/i in 1 to number) H.equip_to_slot_or_del(new path(H),SLOT_IN_BACKPACK, TRUE) - if(!H.head && toggle_helmet && istype(H.wear_armor, /obj/item/clothing/suit/space/hardsuit)) - var/obj/item/clothing/suit/space/hardsuit/HS = H.wear_armor - HS.ToggleHelmet() - post_equip(H, visualsOnly) if(!visualsOnly) diff --git a/code/datums/particle_weathers/_base.dm b/code/datums/particle_weathers/_base.dm new file mode 100644 index 0000000000..3ba1d8fad2 --- /dev/null +++ b/code/datums/particle_weathers/_base.dm @@ -0,0 +1,340 @@ +/particles/weather + spawning = 0 + var/wind = 0 //Left/Right maximum movement increase per tick + var/maxSpawning = 0 //Max spawner - Recommend you use this over Spawning, so severity can ease it in + var/minSpawning = 0 //Weather should start with 0, but when easing, it will never go below this + icon = 'icons/effects/particles/particle.dmi' + + + spawning = 0 + width = 800 // I think this is supposed to be in pixels, but it doesn't match bounds, so idk - 800x800 seems to prevent particle-less edges + height = 800 + count = 3000 // 3000 particles + //Set bounds to rough screensize + some extra on the side and top movement for "wind" + bound1 = list(-500,-256,-10) + bound2 = list(500,500,10) + lifespan = 285 // live for 30s max (fadein + lifespan + fade) + fade = 10 // 1s fade out + fadein = 5 // 0.5s fade in + + //Obnoxiously 3D -- INCREASE Z level to make them further away + transform = list( 1, 0, 0, 0 , + 0, 1, 0, 0 , + 0, 0, 1, 1/4, //Get twice as Small every 4 Z + 0, 0, 0, 1 ) + +//Animate particle effect to a severity +/particles/weather/proc/animateSeverity(severityMod) + + //If we have no severity, just stop spawning + if(!severityMod) + spawning = 0 + return + + var newWind = wind * severityMod * pick(-1,1) //Wind can go left OR right! + var newSpawning = max(minSpawning, maxSpawning * severityMod) + + //gravity might be x, xy, or xyz + var/newGravity = gravity + if(length(newGravity)) + newGravity[1] = newWind + else + newGravity = list(newWind) + + //The higher the severity, the faster the change - elastic easing for flappy wind + gravity = newGravity + spawning = newSpawning + // animate(src, gravity=newGravity, spawning=newSpawning, time=1/severity * 10, easing=ELASTIC_EASING) + +/** + * Shitty particle weather by Gomble + * Causes weather to occur on a z level in certain area types + * + * The effects of weather occur across an entire z-level. For instance, lavaland has periodic ash storms that scorch most unprotected creatures. + * Weather always occurs on different z levels at different times, regardless of weather type. + * Can have custom durations, targets, and can automatically protect indoor areas. + * + */ + + +/datum/particle_weather + + // ==== Modify these ==== + + /// name of weather + var/name = "space wind" + /// description of weather + var/desc = "Heavy gusts of wind blanket the area, periodically knocking down anyone caught in the open." + + //messages to send at different severities + var/list/weather_messages = list() + + // Sounds to play at different severities - order from lowest to highest + var/list/weather_sounds = list() + var/list/indoor_weather_sounds = list() + + //Scale volume with severity - good for if you only have 1 sound + var/scale_vol_with_severity = FALSE + + //Our particle effect to display - min/max severity effects its wind and count + var/particles/weather/particleEffectType = /particles/weather/rain + + + /// See above - this is the lowest possible duration + var/weather_duration_lower = 1 MINUTES + /// See above - this is the highest possible duration + var/weather_duration_upper = 3 MINUTES + + // Keep this between 1 and 100 + // Gentle rain shouldn't use the max rain wind speed, nor should a storm be a gentle breeze + var/minSeverity = 1 + var/maxSeverity = 100 + //We will increase or decrease our severity by a random amount up to this value + //If 0, we will pick a random value between min and max + var/maxSeverityChange = 20 + //The number of times we will change our severity over the duration + var/severitySteps = 5 + /// Used by mobs to prevent them from being affected by the weather + var/immunity_type = TRAIT_WEATHER_IMMUNE + /// Weight amongst other eligible weather. If zero, will never happen randomly. + var/probability = 0 + + /// The map weather type to target + var/target_trait = PARTICLEWEATHER_RAIN + + // ==== Dont modify these ==== + + //Times we have stepped severity + var/severityStepsTaken = 0 + + var/running = FALSE + + //Current severity - used for scaling effects, particle appearance, etc. + var/severity = 0 + + /// Whether a barometer can predict when the weather will happen + var/barometer_predictable = FALSE + /// For barometers to know when the next storm will hit + var/next_hit_time = 0 + + /// In deciseconds, how long the weather lasts once it begins + var/weather_duration = 0 + + //assoc list of mob=looping_sound + var/list/currentSounds = list() + + //assoc list of mob=timestamp -> Next time we can send a message + var/list/messagedMobs = list() + + var/last_message = "" + +/datum/particle_weather/proc/severityMod() + return max(0.3, severity / maxSeverity) +/* +* arbitrary effects to run every time the particle_weather SS ticks +* for storms this might be a random chance for lightning, etc. +*/ +/datum/particle_weather/proc/tick() + return + +/datum/particle_weather/Destroy() + for(var/S in currentSounds) + var/datum/looping_sound/looping_sound = currentSounds[S] + looping_sound.stop() + qdel(looping_sound) + return ..() + +/** + * Starts the actual weather and effects from it + * + * Updates area overlays and sends sounds and messages to mobs to notify them + * Begins dealing effects from weather to mobs in the area + * + */ +/datum/particle_weather/proc/start() + if(running) + return //some cheeky git has started you early + weather_duration = rand(weather_duration_lower, weather_duration_upper) + running = TRUE + addtimer(CALLBACK(src, PROC_REF(wind_down)), weather_duration) + + if(particleEffectType) + SSParticleWeather.SetparticleEffect(new particleEffectType); + + //Always step severity to start + ChangeSeverity() + + +/datum/particle_weather/proc/ChangeSeverity() + if(!running) + return + severityStepsTaken++ + + if(maxSeverityChange == 0) + severity = rand(minSeverity, maxSeverity) + else + var/newSeverity = severity + rand(-maxSeverityChange,maxSeverityChange) + newSeverity = min(max(newSeverity,minSeverity), maxSeverity) + severity = newSeverity + + + if(SSParticleWeather.particleEffect) + SSParticleWeather.particleEffect.animateSeverity(severityMod()) + + //Send new severity message if the message has changed + if(last_message != scale_range_pick(minSeverity, maxSeverity, severity, weather_messages)) + messagedMobs = list() + + //Tick on + if(severityStepsTaken < severitySteps) + addtimer(CALLBACK(src, PROC_REF(ChangeSeverity)), weather_duration / severitySteps) + + +/** + * Weather enters the winding down phase, stops effects + * + * Updates areas to be in the winding down phase + * Sends sounds and messages to mobs to notify them + * + */ +/datum/particle_weather/proc/wind_down() + severity = 0 + if(SSParticleWeather.particleEffect) + SSParticleWeather.particleEffect.animateSeverity(severityMod()) + + //Wait for the last particle to fade, then qdel yourself + addtimer(CALLBACK(src, PROC_REF(end)), SSParticleWeather.particleEffect.lifespan + SSParticleWeather.particleEffect.fade) + + + +/** + * Fully ends the weather + * + * Effects no longer occur and particles are wound down + * Removes weather from processing completely + * + */ +/datum/particle_weather/proc/end() + running = FALSE + SSParticleWeather.stopWeather() + + +/** + * Returns TRUE if the living mob can hear the weather (you might be immune, but you get to listen to the pitter patter) + */ +/datum/particle_weather/proc/can_weather(mob/living/mob_to_check) + var/turf/mob_turf = get_turf(mob_to_check) + + if(!mob_turf) + return + + if(!mob_turf.outdoor_effect || mob_turf.outdoor_effect.weatherproof) + return + + return TRUE + +/** + * Returns TRUE if the living mob can be affected by the weather + */ +/datum/particle_weather/proc/can_weather_effect(mob/living/mob_to_check) + + //If mob is not in a turf + var/turf/mob_turf = get_turf(mob_to_check) + var/atom/loc_to_check = mob_to_check.loc + while(loc_to_check != mob_turf) + if((immunity_type && HAS_TRAIT(loc_to_check, immunity_type)) || HAS_TRAIT(loc_to_check, TRAIT_WEATHER_IMMUNE)) + return + loc_to_check = loc_to_check.loc + + return TRUE + +/** + * Try to do weather effects - if we can hear sound, play it + * If we are affected by weather (i.e damage), do effect and send severity message + */ +/datum/particle_weather/proc/try_weather_act(mob/living/L) + if(!L.mind) + return + if(can_weather(L)) + weather_sound_effect(L) + if(can_weather_effect(L)) + weather_act(L) + if(!messagedMobs[L] || world.time > messagedMobs[L]) + weather_message(L) //Try not to spam + else + stop_weather_sound_effect(L) + messagedMobs[L] = 0 //resend a message next time they go outside + +//Overload with weather effects +/datum/particle_weather/proc/weather_act(mob/living/L) + return + +//weather effects for objects +/datum/particle_weather/proc/weather_obj_act(obj/L) + if(can_weather_act_obj(L)) + L.weather = TRUE + L.weather_act_on(target_trait, severity) + else + L.weather = FALSE + + +//Not using looping_sounds properly. somebody smart should fix this +/datum/particle_weather/proc/weather_sound_effect(mob/living/L) + var/datum/looping_sound/currentSound = currentSounds[L] + if(currentSound) + //SET VOLUME + if(scale_vol_with_severity) + currentSound.volume = initial(currentSound.volume) * severityMod() + if(!currentSound.loop_started) //don't restart already playing sounds + currentSound.start() + return + var/tempSound = scale_range_pick(minSeverity, maxSeverity, severity, weather_sounds) + if(tempSound) + currentSound = new tempSound(L, FALSE, TRUE, CHANNEL_WEATHER) + currentSounds[L] = currentSound + //SET VOLUME + if(scale_vol_with_severity) + currentSound.volume = initial(currentSound.volume) * severityMod() + currentSound.start() + +/datum/particle_weather/proc/stop_weather_sound_effect(mob/living/L) + var/datum/looping_sound/currentSound = currentSounds[L] + if(currentSound) + currentSound.stop() + + +/datum/particle_weather/proc/weather_message(mob/living/L) + messagedMobs[L] = world.time + 45 SECONDS //Chunky delay - this spams otherwise - Severity changes and going indoors resets this timer + last_message = scale_range_pick(minSeverity, maxSeverity, severity, weather_messages) + if(last_message) + to_chat(L, last_message) + +/datum/particle_weather/proc/can_weather_act_obj(obj/obj_to_check) + var/turf/obj_turf = get_turf(obj_to_check) + + if(!obj_turf) + return + + if(obj_turf.outdoor_effect?.weatherproof) + return + + return TRUE + + +/client/proc/run_particle_weather() + set category = "GameMaster" + set name = "Run Particle Weather" + set desc = "Triggers a particle weather" + + if(!holder) + return + + var/weather_type = input("Choose a weather", "Weather") as null|anything in sortList(subtypesof(/datum/particle_weather), /proc/cmp_typepaths_asc) + if(!weather_type) + return + + SSParticleWeather.run_weather(weather_type, TRUE) + + message_admins("[key_name_admin(usr)] started weather of type [weather_type].") + log_admin("[key_name(usr)] started weather of type [weather_type].") + SSblackbox.record_feedback("tally", "admin_verb", 1, "Run Particle Weather") diff --git a/code/datums/particle_weathers/datum_types/rain.dm b/code/datums/particle_weathers/datum_types/rain.dm new file mode 100644 index 0000000000..6b18bfa7d8 --- /dev/null +++ b/code/datums/particle_weathers/datum_types/rain.dm @@ -0,0 +1,62 @@ + +//Rain - goes down +/particles/weather/rain + icon_state = "drop" + color = "#ccffff" + position = generator("box", list(-500,-256,0), list(400,500,0)) + grow = list(-0.01,-0.01) + gravity = list(0, -10, 0.5) + drift = generator("circle", 0, 1) // Some random movement for variation + friction = 0.3 // shed 30% of velocity and drift every 0.1s + transform = null // Rain is directional - so don't make it "3D" + //Weather effects, max values + maxSpawning = 250 + minSpawning = 50 + wind = 2 + spin = 0 // explicitly set spin to 0 - there is a bug that seems to carry generators over from old particle effects + +/datum/particle_weather/rain_gentle + name = "Rain" + desc = "Gentle Rain, la la description." + particleEffectType = /particles/weather/rain + + scale_vol_with_severity = TRUE + weather_sounds = list(/datum/looping_sound/rain) + indoor_weather_sounds = list(/datum/looping_sound/indoor_rain) + weather_messages = list("The rain cools your skin.") + + minSeverity = 1 + maxSeverity = 15 + maxSeverityChange = 2 + severitySteps = 5 + immunity_type = TRAIT_RAINSTORM_IMMUNE + probability = 1 + target_trait = PARTICLEWEATHER_RAIN + +//Makes you a little chilly +/datum/particle_weather/rain_gentle/weather_act(mob/living/L) + L.adjust_bodytemperature(-rand(1,3)) + L.adjust_fire_stacks(-50) + +/datum/particle_weather/rain_storm + name = "Rain" + desc = "Gentle Rain, la la description." + particleEffectType = /particles/weather/rain + + scale_vol_with_severity = TRUE + weather_sounds = list(/datum/looping_sound/storm) + indoor_weather_sounds = list(/datum/looping_sound/indoor_rain) + weather_messages = list("The rain cools your skin.", "The storm is really picking up!") + + minSeverity = 4 + maxSeverity = 100 + maxSeverityChange = 50 + severitySteps = 50 + immunity_type = TRAIT_RAINSTORM_IMMUNE + probability = 1 + target_trait = PARTICLEWEATHER_RAIN + +//Makes you a bit chilly +/datum/particle_weather/rain_storm/weather_act(mob/living/L) + L.adjust_bodytemperature(-rand(3,5)) + L.SoakMob(FULL_BODY) diff --git a/code/datums/particle_weathers/datum_types/snow_storm.dm b/code/datums/particle_weathers/datum_types/snow_storm.dm new file mode 100644 index 0000000000..a9700bf152 --- /dev/null +++ b/code/datums/particle_weathers/datum_types/snow_storm.dm @@ -0,0 +1,56 @@ +//Snow - goes down and swirls +/particles/weather/snow + icon_state = list("cross"=2, "snow_1"=5, "snow_2"=2, "snow_3"=2,) + color = "#ffffff" + position = generator("box", list(-500,-256,5), list(500,500,0)) + spin = generator("num",-10,10) + gravity = list(0, -2, 0.1) + drift = generator("circle", 0, 3) // Some random movement for variation + friction = 0.3 // shed 30% of velocity and drift every 0.1s + //Weather effects, max values + maxSpawning = 50 + minSpawning = 10 + wind = 2 + +/datum/particle_weather/snow_gentle + name = "Rain" + desc = "Gentle Rain, la la description." + particleEffectType = /particles/weather/snow + + scale_vol_with_severity = TRUE + weather_sounds = list(/datum/looping_sound/snow) + weather_messages = list("It's snowing!","You feel a chill/") + + minSeverity = 1 + maxSeverity = 10 + maxSeverityChange = 5 + severitySteps = 5 + immunity_type = TRAIT_SNOWSTORM_IMMUNE + probability = 1 + target_trait = PARTICLEWEATHER_SNOW + +//Makes you a little chilly +/datum/particle_weather/snow_gentle/weather_act(mob/living/L) + L.adjust_bodytemperature(-rand(1,3)) + + +/datum/particle_weather/snow_storm + name = "Rain" + desc = "Gentle Rain, la la description." + particleEffectType = /particles/weather/snow + + scale_vol_with_severity = TRUE + weather_sounds = list(/datum/looping_sound/snow) + weather_messages = list("You feel a chill/", "The cold wind is freezing you to the bone", "How can a man who is warm, understand a man who is cold?") + + minSeverity = 40 + maxSeverity = 100 + maxSeverityChange = 50 + severitySteps = 50 + immunity_type = TRAIT_SNOWSTORM_IMMUNE + probability = 1 + target_trait = PARTICLEWEATHER_SNOW + +//Makes you a lot little chilly +/datum/particle_weather/snow_storm/weather_act(mob/living/L) + L.adjust_bodytemperature(-rand(5,15)) diff --git a/code/datums/particle_weathers/sounds/looping_sounds.dm b/code/datums/particle_weathers/sounds/looping_sounds.dm new file mode 100644 index 0000000000..748517153b --- /dev/null +++ b/code/datums/particle_weathers/sounds/looping_sounds.dm @@ -0,0 +1,32 @@ +/datum/looping_sound/rain + mid_sounds = 'sound/weather/rain/weather_rain.ogg' + mid_length = 40 SECONDS + volume = 200 + +/datum/looping_sound/indoor_rain + mid_sounds = 'sound/weather/rain/weather_rain_indoors.ogg' + mid_length = 15 SECONDS + volume = 200 + +/datum/looping_sound/storm + mid_sounds = 'sound/weather/rain/weather_storm.ogg' + mid_length = 30 SECONDS + volume = 150 + +/datum/looping_sound/snow + mid_sounds = 'sound/weather/snow/weather_snow.ogg' + mid_length = 50 SECONDS + volume = 150 + +/datum/looping_sound/wind + mid_sounds = 'sound/weather/rain/wind_1.ogg' + mid_sounds = list( + 'sound/weather/rain/wind_1.ogg'=1, + 'sound/weather/rain/wind_2.ogg'=1, + 'sound/weather/rain/wind_3.ogg'=1, + 'sound/weather/rain/wind_4.ogg'=1, + 'sound/weather/rain/wind_5.ogg'=1, + 'sound/weather/rain/wind_6.ogg'=1 + ) + mid_length = 30 SECONDS + volume = 150 diff --git a/code/datums/pollutant.dm b/code/datums/pollutant.dm index 8ed8e0116b..4d47cf08fb 100644 --- a/code/datums/pollutant.dm +++ b/code/datums/pollutant.dm @@ -1,16 +1,39 @@ /datum/pollutant - /// Name of the pollutant + /// Name of the pollutant, if null will be treated as abstract and wont be initialized as singleton var/name + /// Flags of the pollutant, determine whether it has an appearance, smell, touch act, breath act + var/pollutant_flags = NONE + /// Below are variables for appearance + /// What color will the pollutant be, can be left null + var/color + /// What is it desired alpha? + var/alpha = 255 + /// How "thick" is it, the thicker the quicker it gets to desired alpha and is stronger than other pollutants in blending appearance + var/thickness = 1 + ///FILL THE BELOW OUT IF ITS SMELLABLE! + /// How intense is one unit of the pollutant for smell purposes? + var/smell_intensity /// Descriptor of the smell var/descriptor /// Scent of the smell var/scent - /// Color of the pollutant - var/color /datum/pollutant/proc/on_life(parent) return +///When a pollutant touches an unprotected mob +/datum/pollutant/proc/touch_act(mob/living/victim, amount) + return + +///When a carbon mob breathes in the pollutant +/datum/pollutant/proc/breathe_act(mob/living/carbon/victim, amount) + return + +///When a carbon mob smells scents this is called +/datum/pollutant/proc/on_smell(mob/living/carbon/victim, amount) + return + + /datum/pollutant/fragrance/on_life(parent) . = ..() for(var/mob/living/carbon/human/H in view(1, parent)) @@ -25,12 +48,23 @@ if(prob(2)) H.visible_message(span_green("The [descriptor] of [scent] bombards my nostrils.")) +///Smoke coming from cigarettes and fires +/datum/pollutant/smoke //and mirrors + name = "Smoke" + pollutant_flags = POLLUTANT_APPEARANCE | POLLUTANT_SMELL | POLLUTANT_BREATHE_ACT + smell_intensity = 1 + descriptor = SCENT_DESC_SMELL + scent = "smoke" + /datum/pollutant/fragrance + smell_intensity = 2 + pollutant_flags = POLLUTANT_SMELL + name = "debug fragrance" scent = "debug scent" color = "#000000" - descriptor = "scent" + descriptor = "fragrance" /datum/pollutant/fragrance/lavender name = "lavender" diff --git a/code/datums/pollutants/foods.dm b/code/datums/pollutants/foods.dm new file mode 100644 index 0000000000..0b669b0051 --- /dev/null +++ b/code/datums/pollutants/foods.dm @@ -0,0 +1,185 @@ +/datum/pollutant/food + smell_intensity = 2 + pollutant_flags = POLLUTANT_SMELL + + name = "debug food smell" + scent = "smell" + color = "#000000" + + descriptor = "smell" + +/datum/pollutant/food/apple_pie + name = "apple pie" + scent = "apple pie" + +/datum/pollutant/food/fish_pie + name = "fish pie" + scent = "fish pie" + +/datum/pollutant/food/meat_pie + name = "meat pie" + scent = "meat pie" + +/datum/pollutant/food/pot_pie + name = "pot pie" + scent = "pot pie" + +/datum/pollutant/food/berry_pie + name = "berry pie" + scent = "berry pie" + +/datum/pollutant/food/bread + name = "fresh baked bread" + scent = "fresh baked bread" + +/datum/pollutant/food/bun + name = "fresh baked buns" + scent = "fresh baked buns" + +/datum/pollutant/food/pastry + name = "fresh baked pastry" + scent = "fresh baked pastry" + +/datum/pollutant/food/pie_base + name = "fresh baked pie crust" + scent = "fresh baked pie crust" + +/datum/pollutant/food/toast + name = "cooked toast" + scent = "cooked toast" + +/datum/pollutant/food/raisin_bread + name = "fresh baked loaf of raisin bread" + scent = "fresh baked loaf of raisin bread" + +/datum/pollutant/food/cheese_bun + name = "fresh baked cheese buns" + scent = "fresh baked cheese buns" + +/datum/pollutant/food/biscuit + name = "fresh baked biscuits" + scent = "fresh baked biscuits" + +/datum/pollutant/food/prezzel + name = "fresh baked prezzel" + scent = "fresh baked prezzel" + +/datum/pollutant/food/honey_cake + name = "fresh baked honey cake" + scent = "fresh baked honey cake" + +/datum/pollutant/food/cheese_cake + name = "fresh baked cheese cake" + scent = "fresh baked cheese cake" + +/datum/pollutant/food/baked_potato + name = "baked potatos" + scent = "baked potatos" + +/datum/pollutant/food/baked_carp + name = "cooked carp" + scent = "cooked carp" + +/datum/pollutant/food/baked_eel + name = "cooked eel" + scent = "cooked eel" + +/datum/pollutant/food/baked_clownfish + name = "cooked clown fish" + scent = "cooked clown fish" + +/datum/pollutant/food/baked_angler + name = "cooked angler fish" + scent = "cooked angler fish" + +/datum/pollutant/food/truffles + name = "cooked truffles" + scent = "cooked truffles" + +/datum/pollutant/food/bacon + name = "fried bacon" + scent = "fried bacon" + +/datum/pollutant/food/fried_meat + name = "fried meat" + scent = "fried meat" + +/datum/pollutant/food/fried_chicken + name = "cooked chicken" + scent = "cooked chicken" + +/datum/pollutant/food/sausage + name = "cooked sausage" + scent = "cooked sausage" + +/datum/pollutant/food/wiener + name = "cooked wiener" + scent = "cooked wiener" + +/datum/pollutant/food/fried_cabbage + name = "fried cabbage" + scent = "fried cabbage" + +/datum/pollutant/food/fried_onion + name = "fried onion" + scent = "fried onion" + +/datum/pollutant/food/roasted_seeds + name = "roasted seeds" + scent = "roasted seeds" + +/datum/pollutant/food/fried_rat + name = "fried rats" + scent = "fried rats" + +/datum/pollutant/food/fried_crow + name = "fried crows" + scent = "fried crows" + +/datum/pollutant/food/oatmeal + name = "boiled oats" + scent = "boiled oats" + +/datum/pollutant/food/potato_stew + name = "potato stew" + scent = "potato stew" + +/datum/pollutant/food/onion_stew + name = "onion soup" + scent = "onion soup" + +/datum/pollutant/food/cabbage_stew + name = "cabbage soup" + scent = "cabbage soup" + +/datum/pollutant/food/turnip_stew + name = "turnip soup" + scent = "turnip soup" + +/datum/pollutant/food/fish_stew + name = "fish stew" + scent = "fish stew" + +/datum/pollutant/food/chicken_stew + name = "chicken stew" + scent = "chicken stew" + +/datum/pollutant/food/meat_stew + name = "meat stew" + scent = "meat stew" + +/datum/pollutant/food/egg_soup + name = "egg soup" + scent = "egg soup" + +/datum/pollutant/food/truffle_stew + name = "truffle stew" + scent = "truffle stew" + +/datum/pollutant/food/cheese_soup + name = "cheese soup" + scent = "cheese soup" + +/datum/pollutant/food/druqks + name = "acrid air" + scent = "acrid air" diff --git a/code/datums/pollutants/generic.dm b/code/datums/pollutants/generic.dm new file mode 100644 index 0000000000..2db1a25d04 --- /dev/null +++ b/code/datums/pollutants/generic.dm @@ -0,0 +1,7 @@ +///Splashing blood makes a tiny bit of this +/datum/pollutant/metallic_scent + name = "Metallic Scent" + pollutant_flags = POLLUTANT_SMELL + smell_intensity = 1 + descriptor = "smell" + scent = "a metallic scent" diff --git a/code/datums/pollution.dm b/code/datums/pollution.dm new file mode 100644 index 0000000000..7f8ac1f17c --- /dev/null +++ b/code/datums/pollution.dm @@ -0,0 +1,299 @@ +/obj/effect/abstract/pollution + icon = 'icons/effects/96x96.dmi' + icon_state = "smoke-static" + pixel_x = -32 + pixel_y = -32 + anchored = TRUE + plane = GAME_PLANE_UPPER + layer = AREA_LAYER-1 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + appearance_flags = KEEP_APART|RESET_TRANSFORM|RESET_COLOR + vis_flags = NONE + +/turf/open + appearance_flags = LONG_GLIDE | TILE_BOUND + /// Pollution of this turf + var/datum/pollution/pollution + + +/datum/pollution + /// Reference to the turf we're on + var/turf/open/my_turf + /// List of all pollutant types to their amount + var/list/pollutants = list() + /// Total amount + var/total_amount = 0 + /// Height of the pollution, used to create a sandpiling effect + var/height = 0 + /// The vis content we are managing + var/obj/effect/abstract/pollution/managed_overlay + +/datum/pollution/New(turf/open/passed_turf) + if(!isopenturf(passed_turf)) + stack_trace("Attempted to create a pollution datum on a non-open turf ([passed_turf?.type || null])") + qdel(src) + return + . = ..() + my_turf = passed_turf + my_turf.pollution = src + REGISTER_POLLUTION(src) + +/datum/pollution/Destroy() + if(managed_overlay) + my_turf?.vis_contents -= managed_overlay + if(LAZYLEN(managed_overlay.vis_locs) == 0) + qdel(managed_overlay) + managed_overlay = null + REMOVE_POLLUTION_CURRENTRUN(src) + SET_UNACTIVE_POLLUTION(src) + UNREGISTER_POLLUTION(src) + if(my_turf?.pollution == src) + my_turf.pollution = null + return ..() + +/datum/pollution/proc/touch_act(mob/living/carbon/victim) + if(!victim.can_inject()) + return + var/list/singleton_cache = SSpollution.singletons + for(var/type in pollutants) + var/datum/pollutant/pollutant = singleton_cache[type] + if(!(pollutant.pollutant_flags & POLLUTANT_TOUCH_ACT)) + continue + var/amount = pollutants[type] + pollutant.touch_act(victim, amount) + +/datum/pollution/proc/breathe_act(mob/living/carbon/victim) + var/list/singleton_cache = SSpollution.singletons + for(var/type in pollutants) + var/datum/pollutant/pollutant = singleton_cache[type] + if(!(pollutant.pollutant_flags & POLLUTANT_BREATHE_ACT)) + continue + var/amount = pollutants[type] + pollutant.breathe_act(victim, amount) + +/// When a user smells this pollution +/datum/pollution/proc/smell_act(mob/living/sniffer) + if(HAS_TRAIT(sniffer, TRAIT_AGEUSIA)) // can't taste, can't smell. + return + var/list/singleton_cache = SSpollution.singletons + var/datum/pollutant/dominant_pollutant + var/dominiant_smell_power + for(var/type in pollutants) + var/datum/pollutant/pollutant = singleton_cache[type] + if(!(pollutant.pollutant_flags & POLLUTANT_SMELL)) + continue + var/smelly_power = pollutant.smell_intensity * pollutants[type] + if(smelly_power < POLLUTANT_SMELL_THRESHOLD) + continue + if(!dominant_pollutant || smelly_power > dominiant_smell_power) + dominant_pollutant = pollutant + dominiant_smell_power = smelly_power + if(!dominant_pollutant) + return + + var/smell_string + switch(dominiant_smell_power) + if(0 to POLLUTANT_SMELL_NORMAL) + if(sniffer.mob_biotypes & MOB_ROBOTIC) + smell_string = "Your sensors detect trace amounts of [dominant_pollutant.scent] in the air." + else + smell_string = "The subtle [dominant_pollutant.descriptor] of [dominant_pollutant.scent] tickles your nose..." + if(POLLUTANT_SMELL_NORMAL to POLLUTANT_SMELL_STRONG) + if(sniffer.mob_biotypes & MOB_ROBOTIC) + smell_string = "Your sensors pick up the presence of [dominant_pollutant.scent] in the air." + else + smell_string = "The [dominant_pollutant.descriptor] of [dominant_pollutant.scent] fills the air." + if(POLLUTANT_SMELL_STRONG to INFINITY) + if(sniffer.mob_biotypes & MOB_ROBOTIC) + smell_string = "Your sensors pick up an intense concentration of [dominant_pollutant.scent]." + else + smell_string = "The unmistakable [dominant_pollutant.descriptor] of [dominant_pollutant.scent] bombards your nostrils." + + if(dominant_pollutant.descriptor == SCENT_DESC_ODOR) + to_chat(sniffer, span_warning(smell_string)) + else + to_chat(sniffer, span_notice(smell_string)) + +/datum/pollution/proc/scrub_amount(amount_to_scrub, update_active = TRUE) + if(amount_to_scrub >= total_amount || !isopenturf(my_turf) || QDELING(my_turf)) + qdel(src) + return + for(var/type in pollutants) + pollutants[type] -= amount_to_scrub * pollutants[type] / total_amount + total_amount -= amount_to_scrub + update_height() + handle_overlay() + if(update_active) + my_turf.update_adjacent_pollutants() + +/datum/pollution/proc/add_pollutant(polutant_type, amount) + if(!pollutants[polutant_type]) + pollutants[polutant_type] = 0 + pollutants[polutant_type] += amount + total_amount += amount + update_height() + handle_overlay() + SET_ACTIVE_POLLUTION(src) + +/datum/pollution/proc/add_pollutant_list(list/passed_pollutants) + for(var/polutant_type in passed_pollutants) + if(!pollutants[polutant_type]) + pollutants[polutant_type] = 0 + pollutants[polutant_type] += passed_pollutants[polutant_type] + total_amount += passed_pollutants[polutant_type] + update_height() + handle_overlay() + SET_ACTIVE_POLLUTION(src) + +/datum/pollution/proc/update_height() + height = calculate_height(total_amount) + +/datum/pollution/proc/calculate_height(passed_amount) + return CEILING(passed_amount / POLLUTION_HEIGHT_DIVISOR, 1) + +/datum/pollution/proc/process_cell() + if(height <= 1) + SET_UNACTIVE_POLLUTION(src) + return + var/list/sharing_turfs + var/list/already_processed_cache = SSpollution.processed_this_run + var/list/potential_activers + for(var/turf/open/open_turf as anything in my_turf.atmos_adjacent_turfs) + if(!isopenturf(open_turf) || QDELING(open_turf)) + continue + if(!already_processed_cache[open_turf]) + if(can_share_with(open_turf)) + LAZYSET(sharing_turfs, open_turf, TRUE) + else + LAZYSET(potential_activers, open_turf, TRUE) + if(!length(sharing_turfs)) + SET_UNACTIVE_POLLUTION(src) + return + LAZYSET(sharing_turfs, my_turf, TRUE) + //Now we've gotten all the turfs that should share pollution. Gather their total pollutions and split evenly + var/list/total_share_pollutants = list() + var/total_share_amount = 0 + for(var/turf/open/open_turf as anything in sharing_turfs) + if(!isopenturf(open_turf) || QDELING(open_turf) || QDELETED(open_turf.pollution)) + continue + var/datum/pollution/cached_pollution = open_turf.pollution + for(var/type in cached_pollution.pollutants) + if(!total_share_pollutants[type]) + total_share_pollutants[type] = 0 + total_share_pollutants[type] += cached_pollution.pollutants[type] + total_share_amount += cached_pollution.pollutants[type] + + var/sharing_len = length(sharing_turfs) + for(var/type in total_share_pollutants) + total_share_pollutants[type] /= sharing_len + total_share_amount /= sharing_len + var/new_heights = calculate_height(total_share_amount) + var/obj/effect/abstract/pollution/new_overlay = get_overlay(total_share_pollutants, total_share_amount) + for(var/turf/open/open_turf as anything in sharing_turfs) + if(!isopenturf(open_turf) || QDELING(open_turf)) + continue + + assert_pollution(open_turf) + var/datum/pollution/cached_pollution = open_turf.pollution + if(cached_pollution.managed_overlay) + cached_pollution.my_turf.vis_contents -= cached_pollution.managed_overlay + + if(!QDELETED(new_overlay)) + cached_pollution.managed_overlay = new_overlay + cached_pollution.my_turf.vis_contents += new_overlay + + cached_pollution.pollutants = total_share_pollutants.Copy() + cached_pollution.total_amount = total_share_amount + cached_pollution.height = new_heights + SET_ACTIVE_POLLUTION(cached_pollution) + + for(var/turf/open/open_turf as anything in potential_activers) + if(!isopenturf(open_turf) || QDELING(open_turf)) + continue + if(open_turf?.pollution?.can_share_with(my_turf)) + SET_ACTIVE_POLLUTION(open_turf.pollution) + +/datum/pollution/proc/can_share_with(turf/open/shareto) + if(!isopenturf(shareto)) + return FALSE + if(QDELETED(shareto.pollution)) + return TRUE + if((shareto.pollution.height + 1) < height) + return TRUE + return FALSE + +/datum/pollution/proc/assert_pollution(turf/open/to_assert) + if(!isopenturf(to_assert)) + CRASH("Attempted to assert pollution on a non-open turf ([to_assert?.type || null])") + if(QDELETED(to_assert.pollution)) + new /datum/pollution(to_assert) + +/datum/pollution/proc/handle_overlay() + if(managed_overlay) + my_turf.vis_contents -= managed_overlay + if(LAZYLEN(managed_overlay.vis_locs) == 0) + qdel(managed_overlay) + managed_overlay = get_overlay(pollutants, total_amount) + if(managed_overlay) + my_turf.vis_contents += managed_overlay + +///Probably the most costly thing happening here +/datum/pollution/proc/get_overlay(list/pollutant_list, total_amount) + var/datum/pollutant/pollutant + var/total_thickness + if(length(pollutant_list) == 1) + pollutant = SSpollution.singletons[pollutant_list[1]] + if(!(pollutant.pollutant_flags & POLLUTANT_APPEARANCE)) + return + total_thickness = total_amount * pollutant.thickness + else + var/list/pollutant_cache = SSpollution.singletons + var/datum/pollutant/iterated_pollutant + var/calc_thickness + for(var/pollutant_type in pollutant_list) + iterated_pollutant = pollutant_cache[pollutant_type] + if(!(iterated_pollutant.pollutant_flags & POLLUTANT_APPEARANCE)) + continue + calc_thickness = pollutant_list[pollutant_type] * iterated_pollutant.thickness + if(!pollutant || calc_thickness > total_thickness) + pollutant = iterated_pollutant + total_thickness = calc_thickness + + if(!total_thickness || total_thickness < POLLUTANT_APPEARANCE_THICKNESS_THRESHOLD) + return + + var/obj/effect/abstract/pollution/overlay = new + overlay.alpha = FLOOR(pollutant.alpha * total_thickness * THICKNESS_ALPHA_COEFFICIENT, 1) + overlay.color = pollutant.color + return overlay + +///Atmos adjacency has been updated on this turf, see if it affects any of our pollutants +/turf/proc/update_adjacent_pollutants() + for(var/turf/open/open_turf as anything in atmos_adjacent_turfs) + if(!isopenturf(open_turf) || QDELING(open_turf) || QDELETED(open_turf.pollution)) + continue + SET_ACTIVE_POLLUTION(open_turf.pollution) + +/turf/proc/pollute_turf(pollution_type, amount, cap) + return + +/turf/proc/pollute_turf_list(list/pollutions, cap) + return + +/turf/open/pollute_turf(pollution_type, amount, cap) + if(QDELING(src)) + return + if(QDELETED(pollution)) + pollution = new(src) + if(cap && pollution.total_amount >= cap) + return + pollution.add_pollutant(pollution_type, amount) + +/turf/open/pollute_turf_list(list/pollutions, cap) + if(QDELING(src)) + return + if(QDELETED(pollution)) + pollution = new(src) + if(cap && pollution.total_amount >= cap) + return + pollution.add_pollutant_list(pollutions) diff --git a/code/datums/radiation_wave.dm b/code/datums/radiation_wave.dm index 7dae69c230..7a3f490745 100644 --- a/code/datums/radiation_wave.dm +++ b/code/datums/radiation_wave.dm @@ -104,11 +104,9 @@ var/static/list/blacklisted = typecacheof(list( /turf, /mob, - /obj/structure/cable, /obj/machinery/atmospherics, /obj/item/ammo_casing, - /obj/item/implant, - /obj/singularity + /obj/item/implant )) if(!can_contaminate || blacklisted[thing.type]) continue diff --git a/code/datums/saymode.dm b/code/datums/saymode.dm index 57ef7701e3..08ed048e64 100644 --- a/code/datums/saymode.dm +++ b/code/datums/saymode.dm @@ -9,69 +9,6 @@ /datum/saymode/proc/handle_message(mob/living/user, message, datum/language/language) return TRUE - -/datum/saymode/changeling - key = MODE_KEY_CHANGELING - mode = MODE_CHANGELING - -/datum/saymode/changeling/handle_message(mob/living/user, message, datum/language/language) - switch(user.lingcheck()) - if(LINGHIVE_LINK) - var/msg = "[user.mind]: [message]" - for(var/_M in GLOB.player_list) - var/mob/M = _M - if(M in GLOB.dead_mob_list) - var/link = FOLLOW_LINK(M, user) - to_chat(M, "[link] [msg]") - else - switch(M.lingcheck()) - if (LINGHIVE_LING) - var/mob/living/L = M - if (!HAS_TRAIT(L, CHANGELING_HIVEMIND_MUTE)) - to_chat(M, msg) - if(LINGHIVE_LINK) - to_chat(M, msg) - if(LINGHIVE_OUTSIDER) - if(prob(40)) - to_chat(M, "We can faintly sense an outsider trying to communicate through the hivemind...") - if(LINGHIVE_LING) - if (HAS_TRAIT(user, CHANGELING_HIVEMIND_MUTE)) - to_chat(user, "The poison in the air hinders our ability to interact with the hivemind.") - return FALSE - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - var/msg = "[changeling.changelingID]: [message]" - user.log_talk(message, LOG_SAY, tag="changeling [changeling.changelingID]") - for(var/_M in GLOB.player_list) - var/mob/M = _M - if(M in GLOB.dead_mob_list) - var/link = FOLLOW_LINK(M, user) - to_chat(M, "[link] [msg]") - else - switch(M.lingcheck()) - if(LINGHIVE_LINK) - to_chat(M, msg) - if(LINGHIVE_LING) - var/mob/living/L = M - if (!HAS_TRAIT(L, CHANGELING_HIVEMIND_MUTE)) - to_chat(M, msg) - if(LINGHIVE_OUTSIDER) - if(prob(40)) - to_chat(M, "We can faintly sense another of our kind trying to communicate through the hivemind...") - if(LINGHIVE_OUTSIDER) - to_chat(user, "Our senses have not evolved enough to be able to communicate this way...") - return FALSE - - -/datum/saymode/xeno - key = "a" - mode = MODE_ALIEN - -/datum/saymode/xeno/handle_message(mob/living/user, message, datum/language/language) - if(user.hivecheck()) - user.alien_talk(message) - return FALSE - - /datum/saymode/vocalcords key = MODE_KEY_VOCALCORDS mode = MODE_VOCALCORDS @@ -85,41 +22,6 @@ V.speak_with(message) //action return FALSE - -/datum/saymode/binary //everything that uses .b (silicons, drones, blobbernauts/spores, swarmers) - key = MODE_KEY_BINARY - mode = MODE_BINARY - -/datum/saymode/binary/handle_message(mob/living/user, message, datum/language/language) - if(isswarmer(user)) - var/mob/living/simple_animal/hostile/swarmer/S = user - S.swarmer_chat(message) - return FALSE - if(isblobmonster(user)) - var/mob/living/simple_animal/hostile/blob/B = user - B.blob_chat(message) - return FALSE - if(isdrone(user)) - var/mob/living/simple_animal/drone/D = user - D.drone_chat(message) - return FALSE - if(user.binarycheck()) - user.robot_talk(message) - return FALSE - return FALSE - - -/datum/saymode/holopad - key = "h" - mode = MODE_HOLOPAD - -/datum/saymode/holopad/handle_message(mob/living/user, message, datum/language/language) - if(isAI(user)) - var/mob/living/silicon/ai/AI = user - AI.holopad_talk(message, language) - return FALSE - return TRUE - /datum/saymode/monkey key = "k" mode = MODE_MONKEY diff --git a/code/datums/sexcon.dm b/code/datums/sexcon.dm index b9ad0cb094..2c280771e4 100644 --- a/code/datums/sexcon.dm +++ b/code/datums/sexcon.dm @@ -53,10 +53,6 @@ return FALSE if(get_playerquality(client.ckey) <= -10) return FALSE -// if(!client.whitelisted()) -// if(!client.patreonlevel()) -// can_do_sex = 0 -// return can_do_sex if(client.blacklisted()) can_do_sex = 0 return can_do_sex @@ -81,7 +77,7 @@ if(G.limb_grabbed == chest) if(G.grabbee == user) if(G.sublimb_grabbed == BODY_ZONE_PRECISE_GROIN) - var/yea = list("fap") + var/yea = list("pleasure self") var/td = input(user, "pleasures","") as null|anything in yea if(td == "fap") sexcon.begin_fapping(G, user) @@ -112,11 +108,11 @@ if(user.gender == MALE) if(gender == FEMALE) if(get_location_accessible(src, BODY_ZONE_CHEST)) - what2do += "use chest" + what2do += "taff chest" if(user.gender == MALE) if(ourgroin && theirgroin) - what2do += "love" - what2do += "zodomy" + what2do += "taff the front" + what2do += "taff the back" if(user.gender == FEMALE) if(ourgroin && theirgroin) if(!user.lying && src.lying) @@ -141,9 +137,9 @@ user.sexcon.begin_mouthride(src) if("use chest") user.sexcon.begin_titfuck(src) - if("zodomy") + if("taff back") user.sexcon.begin_assfuck(src) - if("love") + if("taff front") user.sexcon.begin_fuck(src) if("service") if(G) @@ -281,7 +277,7 @@ if(user.cmode) user.emote("embed", forced = TRUE) playsound(owner, list('sound/misc/mat/insert (1).ogg','sound/misc/mat/insert (2).ogg'), 20, TRUE, ignore_walls = FALSE) - owner.visible_message("[owner] zodomizes [user].") + owner.visible_message("[owner] taffs [user] from behind.") START_PROCESSING(SSsex, user.sexcon) START_PROCESSING(SSsex, src) @@ -728,21 +724,7 @@ return TRUE /datum/sex_controller/proc/can_change_dir() - if(fucking) - return FALSE - if(inass) - return FALSE - if(inpussy) - return FALSE - if(ontits) - return FALSE - if(inmouth) - return FALSE - if(weeating) - return FALSE - if(riding) - return FALSE - if(fapping && fapping.grabbee != owner) + if(fucking || inass || inpussy || ontits || inmouth || weeating || riding || (fapping && fapping.grabbee != owner)) return FALSE return TRUE @@ -829,9 +811,6 @@ if(prob(33)) fucking.visible_message("[fucking] rides [owner].") var/usedsource = "insidepussy" - if(D.owner.stat == DEAD) - usedsource = "fuckcorpse" - stop_fucking() D.adjust_horny(4, "pussyfucked") if(adjust_horny(3, usedsource)) D.adjust_horny(50, "pussyfucked") @@ -845,12 +824,8 @@ if(prob(33)) fucking.visible_message("[owner] taffs [fucking].") var/usedsource = "insidepussy" - if(D.owner.stat == DEAD) - usedsource = "fuckcorpse" - stop_fucking() - else - if(D.owner.stat != CONSCIOUS) - usedsource = "sleepingbeauty" + if(D.owner.stat != CONSCIOUS) + usedsource = "sleepingbeauty" if(D.owner.cmode) D.owner.flash_fullscreen("redflash1") D.adjust_horny(4, "pussyfucked") @@ -865,12 +840,9 @@ if(fucking) playsound(owner, 'sound/misc/mat/segso.ogg', 50, TRUE, -2, ignore_walls = FALSE) if(prob(33)) - fucking.visible_message("[owner] zodomizes [fucking].") + fucking.visible_message("[owner] taffs [fucking] from behind.") // D.owner.Immobilize(10) var/usedsource = "insideass" - if(D.owner.stat == DEAD) - usedsource = "fuckcorpse" - stop_fucking() if(D.owner.cmode) D.owner.flash_fullscreen("redflash1") if(D.owner.cmode) @@ -889,11 +861,8 @@ if(fucking) playsound(owner, 'sound/misc/mat/fap.ogg', 30, TRUE, -2, ignore_walls = FALSE) if(prob(33)) - fucking.visible_message("[owner] uses [fucking]'s chest.") + fucking.visible_message("[owner] taffs [fucking]'s chest.") var/usedsource = "ontits" - if(D.owner.stat == DEAD) - usedsource = "fuckcorpse" - stop_fucking() if(adjust_horny(2, usedsource)) stop_fucking() // D.owner.Immobilize(10) @@ -910,12 +879,9 @@ else playsound(fucking, pick('sound/misc/mat/guymouth (1).ogg','sound/misc/mat/guymouth (2).ogg','sound/misc/mat/guymouth (3).ogg','sound/misc/mat/guymouth (4).ogg','sound/misc/mat/guymouth (5).ogg'), 20, TRUE, ignore_walls = FALSE) if(prob(33)) - fucking.visible_message("[owner] feeds [fucking].") + fucking.visible_message("[owner] thrusts in [fucking]'s mouth.") // D.owner.Immobilize(10) var/usedsource = "fuckmouth" - if(D.owner.stat == DEAD) - usedsource = "fuckcorpse" - stop_fucking() if(adjust_horny(3, usedsource)) stop_fucking() //if race here if(D.owner.) @@ -950,9 +916,9 @@ playsound(eatingus, pick('sound/misc/mat/guymouth (1).ogg','sound/misc/mat/guymouth (2).ogg','sound/misc/mat/guymouth (3).ogg','sound/misc/mat/guymouth (4).ogg','sound/misc/mat/guymouth (5).ogg'), 100, TRUE, -2, ignore_walls = FALSE) if(prob(33)) if(owner.gender == MALE) - owner.visible_message("[eatingus] sucks [owner].") + owner.visible_message("[eatingus] sucks off [owner].") else - owner.visible_message("[eatingus] eats [owner].") + owner.visible_message("[eatingus] eats out [owner].") if(adjust_horny(3, "suckedoff")) stop_eating_us() if(fapping) @@ -969,7 +935,7 @@ if(fapping) playsound(owner, 'sound/misc/mat/fap.ogg', 30, TRUE, -2, ignore_walls = FALSE) if(prob(33)) - owner.visible_message("[owner] faps.") + owner.visible_message("[owner] pleasures themself.") if(adjust_horny(1, "fapself")) stop_fapping() else @@ -1034,67 +1000,6 @@ /datum/sex_controller/female/handle_sex() . = ..() -/* if(world.time > last_silence_check + 10 SECONDS) - if(iscarbon(owner)) - var/mob/living/carbon/C = owner - if(C.silent || !C.canspeak()) - if(curplaying) - curplaying = null - if(femmoans) - femmoans.stop() - return - if(owner.stat) - if(curplaying) - curplaying = null - if(femmoans) - femmoans.stop() - if(draining) - if(curplaying) - curplaying = null - if(femmoans) - femmoans.stop() -/ else - if(owner.r_intent == SUBMIT_INTENT && owner.stat == CONSCIOUS) - if(horny > 200) - if(curplaying != "hvy") - if(femmoans) - femmoans.stop() - if(prob(50)) - femmoans = new /datum/looping_sound/femhornyhvy(list(owner), FALSE) - else - femmoans = new /datum/looping_sound/femhornyhvyalt(list(owner), FALSE) - femmoans.start() - curplaying = "hvy" - else if(horny > 150) - if(curplaying != "med") - if(femmoans) - femmoans.stop() - if(prob(50)) - femmoans = new /datum/looping_sound/femhornymed(list(owner), FALSE) - else - femmoans = new /datum/looping_sound/femhornymedalt(list(owner), FALSE) - femmoans.start() - curplaying = "med" - else if(horny > 50) - if(curplaying != "lite") - if(femmoans) - femmoans.stop() - if(prob(50)) - femmoans = new /datum/looping_sound/femhornylite(list(owner), FALSE) - else - femmoans = new /datum/looping_sound/femhornylitealt(list(owner), FALSE) - femmoans.start() - curplaying = "lite" - else - if(curplaying) - curplaying = null - if(femmoans) - femmoans.stop() - else - if(curplaying) - curplaying = null - if(femmoans) - femmoans.stop()*/ /datum/sex_controller/proc/adjust_horny(amt, source) if(!amt) @@ -1160,9 +1065,6 @@ C.add_stress(/datum/stressevent/cumok) else C.add_stress(/datum/stressevent/cumbad) - if("fuckcorpse") - C.add_stress(/datum/stressevent/cumcorpse) - C.freak_out() /datum/sex_controller/male/cum(source) ..() @@ -1189,18 +1091,6 @@ playsound(owner, pick('sound/misc/mat/mouthend (1).ogg','sound/misc/mat/mouthend (2).ogg'), 100, FALSE, ignore_walls = FALSE) owner.visible_message("[owner] feeds [fucking]!") add_cum_floor(get_turf(fucking)) - if(fucking && fucking.sexcon.weeating == owner) - if(fucking.cmode) - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - var/wuzantag - if(H.mind) - if(H.mind.antag_datums) - if(H.mind.antag_datums.len) - wuzantag = TRUE - if(!wuzantag) - adjust_playerquality(-2, H.ckey, reason="Raped as a non villain.") - addtimer(CALLBACK(eatingus, TYPE_PROC_REF(/mob, emote), "gag"), rand(10,20)) if("insideass") if(owner.has_flaw(/datum/charflaw/addiction/lovefiend)) owner.sate_addiction() diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index 06b4c9b6b1..0b4c9f021c 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -179,12 +179,6 @@ admin_notes = "No brig, no medical facilities, no shuttle console." credit_cost = 2500 -/datum/map_template/shuttle/emergency/airless/post_load() - . = ..() - //enable buying engines from cargo - var/datum/supply_pack/P = SSshuttle.supply_packs[/datum/supply_pack/engineering/shuttle_engine] - P.special_enabled = TRUE - /datum/map_template/shuttle/emergency/asteroid suffix = "asteroid" diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 009b4b626b..b1053d6063 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -57,14 +57,6 @@ desc = "" icon_state = "power_regen" -/datum/status_effect/cyborg_power_regen/tick() - var/mob/living/silicon/robot/cyborg = owner - if(!istype(cyborg) || !cyborg.cell) - qdel(src) - return - playsound(cyborg, 'sound/blank.ogg', 50, TRUE) - cyborg.cell.give(power_to_give) - /datum/status_effect/his_grace id = "his_grace" duration = -1 @@ -135,35 +127,6 @@ desc = "" icon_state = "wish_granter" -/datum/status_effect/cult_master - id = "The Cult Master" - duration = -1 - alert_type = null - on_remove_on_mob_delete = TRUE - var/alive = TRUE - -/datum/status_effect/cult_master/proc/deathrattle() - if(!QDELETED(GLOB.cult_narsie)) - return //if Nar'Sie is alive, don't even worry about it - var/area/A = get_area(owner) - for(var/datum/mind/B in SSticker.mode.cult) - if(isliving(B.current)) - var/mob/living/M = B.current - SEND_SOUND(M, sound('sound/blank.ogg')) - to_chat(M, "The Cult's Master, [owner], has fallen in \the [A]!") - -/datum/status_effect/cult_master/tick() - if(owner.stat != DEAD && !alive) - alive = TRUE - return - if(owner.stat == DEAD && alive) - alive = FALSE - deathrattle() - -/datum/status_effect/cult_master/on_remove() - deathrattle() - . = ..() - /datum/status_effect/blooddrunk id = "blooddrunk" duration = 10 @@ -439,9 +402,6 @@ L.adjustStaminaLoss(-3.5) L.adjustOrganLoss(ORGAN_SLOT_BRAIN, -3.5) L.adjustCloneLoss(-1) //Becasue apparently clone damage is the bastion of all health - else if(issilicon(L)) - L.adjustBruteLoss(-3.5) - L.adjustFireLoss(-3.5) else if(isanimal(L)) var/mob/living/simple_animal/SM = L SM.adjustHealth(-3.5, forced = TRUE) diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index 71498765ca..3c93cc10d4 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -13,13 +13,13 @@ if(.) if(updating_canmove) owner.update_mobility() - if(needs_update_stat || issilicon(owner)) + if(needs_update_stat) owner.update_stat() /datum/status_effect/incapacitating/on_remove() if(owner) owner.update_mobility() - if(needs_update_stat || issilicon(owner)) //silicons need stat updates in addition to normal canmove updates + if(needs_update_stat) //silicons need stat updates in addition to normal canmove updates owner.update_stat() //STUN @@ -266,19 +266,6 @@ owner.adjustFireLoss(0.1) owner.adjustToxLoss(0.2, TRUE, TRUE) -/datum/status_effect/cultghost //is a cult ghost and can't use manifest runes - id = "cult_ghost" - duration = -1 - alert_type = null - -/datum/status_effect/cultghost/on_apply() - owner.see_invisible = SEE_INVISIBLE_OBSERVER - owner.see_in_dark = 2 - -/datum/status_effect/cultghost/tick() - if(owner.reagents) - owner.reagents.del_reagent(/datum/reagent/water/holywater) //can't be deconverted - /datum/status_effect/crusher_mark id = "crusher_mark" duration = 300 //if you leave for 30 seconds you lose the mark, deal with it diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm index b6fd14218c..6dc0a9b4d7 100644 --- a/code/datums/status_effects/neutral.dm +++ b/code/datums/status_effects/neutral.dm @@ -31,37 +31,6 @@ alert_type = null var/total_damage = 0 -/datum/status_effect/syphon_mark - id = "syphon_mark" - duration = 50 - status_type = STATUS_EFFECT_MULTIPLE - alert_type = null - on_remove_on_mob_delete = TRUE - var/obj/item/borg/upgrade/modkit/bounty/reward_target - -/datum/status_effect/syphon_mark/on_creation(mob/living/new_owner, obj/item/borg/upgrade/modkit/bounty/new_reward_target) - . = ..() - if(.) - reward_target = new_reward_target - -/datum/status_effect/syphon_mark/on_apply() - if(owner.stat == DEAD) - return FALSE - return ..() - -/datum/status_effect/syphon_mark/proc/get_kill() - if(!QDELETED(reward_target)) - reward_target.get_kill(owner) - -/datum/status_effect/syphon_mark/tick() - if(owner.stat == DEAD) - get_kill() - qdel(src) - -/datum/status_effect/syphon_mark/on_remove() - get_kill() - . = ..() - /atom/movable/screen/alert/status_effect/in_love name = "In Love" desc = "" diff --git a/code/datums/status_effects/rogue/debuff.dm b/code/datums/status_effects/rogue/debuff.dm index ca8f4bf5f2..0ac646a808 100644 --- a/code/datums/status_effects/rogue/debuff.dm +++ b/code/datums/status_effects/rogue/debuff.dm @@ -77,16 +77,40 @@ /datum/status_effect/debuff/silver_curse id = "silver_curse" alert_type = /atom/movable/screen/alert/status_effect/debuff/silver_curse - duration = 5 SECONDS - -/datum/status_effect/debuff/silver_curse/greater - duration = 10 SECONDS + effectedstats = list("strength" = -2,"perception" = -2,"intelligence" = -2, "constitution" = -2, "endurance" = -2,"speed" = -2) + duration = 45 SECONDS /atom/movable/screen/alert/status_effect/debuff/silver_curse name = "Silver Curse" desc = "My BANE!" icon_state = "hunger3" +// PINTLEDESTRUCTION + +/datum/status_effect/debuff/pintledestruction + id = "pintlegone" + alert_type = /atom/movable/screen/alert/status_effect/debuff/pintledestruction + duration = 60 MINUTES + +/atom/movable/screen/alert/status_effect/debuff/pintledestruction + name = "Wine-Curse" + desc = "Oh Gods...it's dead..." + icon_state = "muscles" + +/datum/status_effect/debuff/pintledestruction/on_apply() + . = ..() + if(iscarbon(owner)) + var/mob/living/carbon/C = owner + C.add_stress(/datum/stressevent/sadfate) + ADD_TRAIT(owner, TRAIT_LIMPDICK, TRAIT_GENERIC) + +/datum/status_effect/debuff/pintledestruction/on_remove() + . = ..() + REMOVE_TRAIT(owner, TRAIT_LIMPDICK, TRAIT_GENERIC) + if(iscarbon(owner)) + var/mob/living/carbon/C = owner + C.remove_stress(/datum/stressevent/sadfate) + //BROKEN CELIBACY @@ -371,6 +395,18 @@ desc = "THAT SPOONY BARD! ARGH!\n" icon_state = "muscles" +/datum/status_effect/debuff/chilled + id = "chilled" + alert_type = /atom/movable/screen/alert/status_effect/debuff/chilled + effectedstats = list("speed" = -5, "strength" = -2, "endurance" = -2) + duration = 15 SECONDS + +/atom/movable/screen/alert/status_effect/debuff/chilled + name = "Chilled" + desc = "I can barely feel my limbs!" + icon_state = "chilled" + + //////////////////////Kaizoku stuff////////////////// @@ -421,7 +457,7 @@ //freezing /atom/movable/screen/alert/status_effect/debuff/freezing //the abyss is cold. - name = "Freezing" + name = "Abyssal Frostnip" desc = "Frost-bitten and touched by the ancient god, seeping through time and existence. The god feels, spreads and carves your skin.\n" //that's abyssor. icon_state = "freezing" icon = 'icons/roguetown/kaizoku/misc/screen_alert.dmi' @@ -430,7 +466,7 @@ id = "freezing" alert_type = /atom/movable/screen/alert/status_effect/debuff/freezing duration = 30 SECONDS - effectedstats = list("speed" = -2, "endurance" = -2) + effectedstats = list("speed" = -3, "endurance" = -2) /datum/status_effect/debuff/freezing/tick() owner.adjustOxyLoss(-6, 0) //it will actually allow you to breath underwater. @@ -448,7 +484,7 @@ // severe freezing /atom/movable/screen/alert/status_effect/debuff/freezing/severe //this is even worst. - name = "Severe Freezing" + name = "Abyssal Frostbite" desc = "Ravaged by a frozen grasp, skin violently carved as divine icy tendrils invade the muscles, spreading a chill so holy that tears through the soul.\n" //that's abyssor. icon_state = "freezing_severe" icon = 'icons/roguetown/kaizoku/misc/screen_alert.dmi' @@ -457,7 +493,7 @@ id = "freezingsevere" alert_type = /atom/movable/screen/alert/status_effect/debuff/freezing/severe duration = 60 SECONDS - effectedstats = list("speed" = -5, "endurance" = -3) + effectedstats = list("speed" = -5, "endurance" = -3, "strength" = -1) /datum/status_effect/debuff/freezing/tick() owner.adjustOxyLoss(-6, 0) //it will actually allow you to breath underwater. @@ -474,4 +510,3 @@ /datum/status_effect/debuff/freezing/on_remove() owner.apply_status_effect(/datum/status_effect/debuff/freezing) owner.remove_movespeed_modifier(MOVESPEED_ID_NET_SLOWDOWN) - diff --git a/code/datums/status_effects/rogue/roguebuff.dm b/code/datums/status_effects/rogue/roguebuff.dm index 9b588ddf5b..a507aa578c 100644 --- a/code/datums/status_effects/rogue/roguebuff.dm +++ b/code/datums/status_effects/rogue/roguebuff.dm @@ -249,6 +249,26 @@ effectedstats = list("speed" = 3) duration = 1 MINUTES +/atom/movable/screen/alert/status_effect/buff/longstrider + name = "Longstrider" + desc = "I can easily walk through rough terrain." + icon_state = "buff" + +/datum/status_effect/buff/longstrider + id = "longstrider" + alert_type = /atom/movable/screen/alert/status_effect/buff/longstrider + duration = 15 MINUTES + +/datum/status_effect/buff/longstrider/on_apply() + . = ..() + to_chat(owner, span_warning("I am unburdened by the terrain.")) + ADD_TRAIT(owner, TRAIT_LONGSTRIDER, MAGIC_TRAIT) + +/datum/status_effect/buff/longstrider/on_remove() + . = ..() + to_chat(owner, span_warning("The rough floors slow my travels once again.")) + REMOVE_TRAIT(owner, TRAIT_LONGSTRIDER, MAGIC_TRAIT) + /datum/status_effect/buff/calm id = "calm" alert_type = /atom/movable/screen/alert/status_effect/buff/calm diff --git a/code/datums/status_effects/rogue/roguestatus.dm b/code/datums/status_effects/rogue/roguestatus.dm index 9a1a91960a..69781cf9db 100644 --- a/code/datums/status_effects/rogue/roguestatus.dm +++ b/code/datums/status_effects/rogue/roguestatus.dm @@ -3,7 +3,7 @@ /datum/status_effect/stress/stressinsane id = "insane" - effectedstats = list("constitution" = -1, "endurance" = -2, "speed" = -2) + effectedstats = list("constitution" = -2, "endurance" = -2, "speed" = -2, "fortune" = -2) alert_type = /atom/movable/screen/alert/status_effect/stress/stressinsane /atom/movable/screen/alert/status_effect/stress/stressinsane @@ -13,7 +13,7 @@ /datum/status_effect/stress/stressvbad id = "stressvbad" - effectedstats = list("constitution" = -1,"endurance" = -1, "speed" = -1) + effectedstats = list("constitution" = -1,"endurance" = -2, "speed" = -2, "fortune" = -1) alert_type = /atom/movable/screen/alert/status_effect/stress/stressvbad /atom/movable/screen/alert/status_effect/stress/stressvbad diff --git a/code/datums/stress/negative_events.dm b/code/datums/stress/negative_events.dm index a34c1ea90a..42c29cdaff 100644 --- a/code/datums/stress/negative_events.dm +++ b/code/datums/stress/negative_events.dm @@ -169,11 +169,6 @@ stressadd = 5 desc = "I was violated." -/datum/stressevent/cumcorpse - timer = 1 MINUTES - stressadd = 20 - desc = "What have I done?" - /datum/stressevent/blueb timer = 1 MINUTES stressadd = 2 @@ -294,6 +289,11 @@ stressadd = 6 desc = "I slept on the floor! What am I?! An animal?!" +/datum/stressevent/sadfate + timer = 60 MINUTES + stressadd = 1 + desc = "I feel useless..." + /datum/stressevent/raider timer = 1 MINUTES stressadd = 1 diff --git a/code/datums/stress/positive_events.dm b/code/datums/stress/positive_events.dm index ac6057022f..a020152d98 100644 --- a/code/datums/stress/positive_events.dm +++ b/code/datums/stress/positive_events.dm @@ -141,30 +141,30 @@ /datum/stressevent/music timer = 1 MINUTES stressadd = -1 - desc = span_green("The music is relaxing.") + desc = span_green("This music is relaxing.") /datum/stressevent/music/two stressadd = -2 - desc = span_green("The music is very relaxing.") + desc = span_green("This music is very relaxing.") /datum/stressevent/music/three stressadd = -3 - desc = span_green("The music saps my stress.") + desc = span_green("This music saps my stress.") /datum/stressevent/music/four stressadd = -4 - desc = span_green("The music is heavenly.") + desc = span_green("This music is heavenly.") timer = 10 MINUTES /datum/stressevent/music/five stressadd = -5 timer = 10 MINUTES - desc = span_green("The music is strummed by an angel.") + desc = span_green("This music is strummed by an angel.") /datum/stressevent/music/six stressadd = -6 timer = 10 MINUTES - desc = span_green("The music is a blessing from Xylix.") + desc = span_green("This music is a blessing from Xylix.") // Bard buffs below diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm index 85ed64fb39..ea8c2aae50 100644 --- a/code/datums/traits/good.dm +++ b/code/datums/traits/good.dm @@ -169,37 +169,6 @@ return eyes.Insert(H) //refresh their eyesight and vision -/datum/quirk/photographer - name = "Photographer" - desc = "" - value = 1 - mob_trait = TRAIT_PHOTOGRAPHER - gain_text = "I know everything about photography." - lose_text = "I forget how photo cameras work." - medical_record_text = "Patient mentions photography as a stress-relieving hobby." - -/datum/quirk/photographer/on_spawn() - var/mob/living/carbon/human/H = quirk_holder - var/obj/item/storage/photo_album/photo_album = new(get_turf(H)) - var/list/album_slots = list ( - "backpack" = SLOT_IN_BACKPACK, - "hands" = SLOT_HANDS - ) - H.equip_in_one_of_slots(photo_album, album_slots , qdel_on_fail = TRUE) - photo_album.persistence_id = "personal_[H.mind.key]" // this is a persistent album, the ID is tied to the account's key to avoid tampering - photo_album.persistence_load() - photo_album.name = "[H.real_name]'s photo album" - var/obj/item/camera/camera = new(get_turf(H)) - var/list/camera_slots = list ( - "neck" = SLOT_NECK, - "left pocket" = SLOT_L_STORE, - "right pocket" = SLOT_R_STORE, - "backpack" = SLOT_IN_BACKPACK, - "hands" = SLOT_HANDS - ) - H.equip_in_one_of_slots(camera, camera_slots , qdel_on_fail = TRUE) - H.regenerate_icons() - /datum/quirk/selfaware name = "Self-Aware" desc = "" diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index c84ed5e6b2..c8613080b0 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -109,7 +109,7 @@ if("Janitor") heirloom_type = pick(/obj/item/mop, /obj/item/clothing/suit/caution, /obj/item/reagent_containers/glass/bucket) if("Cook") - heirloom_type = pick(/obj/item/reagent_containers/food/condiment/saltshaker, /obj/item/kitchen/rollingpin, /obj/item/clothing/head/chefhat) + heirloom_type = pick(/obj/item/reagent_containers/food/condiment/saltshaker, /obj/item/rogueweapon/mace/woodclub/rollingpin, /obj/item/clothing/head/chefhat) if("Botanist") heirloom_type = pick(/obj/item/cultivator, /obj/item/reagent_containers/glass/bucket, /obj/item/storage/bag/plants, /obj/item/toy/plush/beeplushie) if("Bartender") @@ -346,39 +346,6 @@ mob_trait = TRAIT_PROSOPAGNOSIA medical_record_text = "Patient suffers from prosopagnosia and cannot recognize faces." -/datum/quirk/prosthetic_limb - name = "Prosthetic Limb" - desc = "" - value = -1 - var/slot_string = "limb" - medical_record_text = "During physical examination, patient was found to have a prosthetic limb." - -/datum/quirk/prosthetic_limb/on_spawn() - var/limb_slot = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) - var/mob/living/carbon/human/H = quirk_holder - var/obj/item/bodypart/old_part = H.get_bodypart(limb_slot) - var/obj/item/bodypart/prosthetic - switch(limb_slot) - if(BODY_ZONE_L_ARM) - prosthetic = new/obj/item/bodypart/l_arm/robot/surplus(quirk_holder) - slot_string = "left arm" - if(BODY_ZONE_R_ARM) - prosthetic = new/obj/item/bodypart/r_arm/robot/surplus(quirk_holder) - slot_string = "right arm" - if(BODY_ZONE_L_LEG) - prosthetic = new/obj/item/bodypart/l_leg/robot/surplus(quirk_holder) - slot_string = "left leg" - if(BODY_ZONE_R_LEG) - prosthetic = new/obj/item/bodypart/r_leg/robot/surplus(quirk_holder) - slot_string = "right leg" - prosthetic.replace_limb(H) - qdel(old_part) - H.regenerate_icons() - -/datum/quirk/prosthetic_limb/post_add() - to_chat(quirk_holder, "My [slot_string] has been replaced with a surplus prosthetic. It is fragile and will easily come apart under duress. Additionally, \ - you need to use a welding tool and cables to repair it, instead of bruise packs and ointment.") - /datum/quirk/pushover name = "Pushover" desc = "" diff --git a/code/datums/weather/weather.dm b/code/datums/weather/weather.dm index b6811d276f..9392d22d00 100644 --- a/code/datums/weather/weather.dm +++ b/code/datums/weather/weather.dm @@ -170,7 +170,7 @@ return TRUE /datum/weather/proc/update_areas(input, specific_area, specific_turf) -/* + for(var/area/N in impacted_areas) N.blend_mode = 0 N.layer = overlay_layer @@ -190,7 +190,7 @@ N.icon = 'icons/turf/areas.dmi' N.layer = initial(N.layer) N.plane = initial(N.plane) - N.set_opacity(FALSE)*/ + N.set_opacity(FALSE) if(specific_area) for(var/i in specific_area) var/area/N = i @@ -206,12 +206,11 @@ START_PROCESSING(SSweather,T) /datum/weather/proc/get_used_state() -/* switch(stage) + switch(stage) if(STARTUP_STAGE) return telegraph_overlay if(MAIN_STAGE) return weather_overlay if(WIND_DOWN_STAGE) return end_overlay - return ""*/ //thsi bugs out when rain falls then u set off a bomb - return weather_overlay + return "" //thsi bugs out when rain falls then u set off a bomb diff --git a/code/datums/weather/weather_types/acid_rain.dm b/code/datums/weather/weather_types/acid_rain.dm deleted file mode 100644 index 8cd5b2ba37..0000000000 --- a/code/datums/weather/weather_types/acid_rain.dm +++ /dev/null @@ -1,32 +0,0 @@ -//Acid rain is part of the natural weather cycle in the humid forests of Planetstation, and cause acid damage to anyone unprotected. -/datum/weather/acid_rain - name = "acid rain" - desc = "" - - telegraph_duration = 400 - telegraph_message = "Thunder rumbles far above. You hear droplets drumming against the canopy. Seek shelter." - telegraph_sound = 'sound/blank.ogg' - - weather_message = "Acidic rain pours down around you! Get inside!" - weather_overlay = "acid_rain" - weather_duration_lower = 600 - weather_duration_upper = 1500 - weather_sound = 'sound/blank.ogg' - - end_duration = 100 - end_message = "The downpour gradually slows to a light shower. It should be safe outside now." - end_sound = 'sound/blank.ogg' - - area_type = /area/lavaland/surface/outdoors - target_trait = ZTRAIT_MINING - - immunity_type = "acid" // temp - - barometer_predictable = TRUE - - -/datum/weather/acid_rain/weather_act(mob/living/L) - var/resist = L.getarmor(null, "acid") - if(prob(max(0,100-resist))) - L.acid_act(20,20) - return TRUE diff --git a/code/datums/weather/weather_types/ash_storm.dm b/code/datums/weather/weather_types/ash_storm.dm deleted file mode 100644 index c798b4359b..0000000000 --- a/code/datums/weather/weather_types/ash_storm.dm +++ /dev/null @@ -1,113 +0,0 @@ -//Ash storms happen frequently on lavaland. They heavily obscure vision, and cause high fire damage to anyone caught outside. -/datum/weather/ash_storm - name = "ash storm" - desc = "" - - telegraph_message = "An eerie moan rises on the wind. Sheets of burning ash blacken the horizon. Seek shelter." - telegraph_duration = 300 - telegraph_overlay = "light_ash" - - weather_message = "Smoldering clouds of scorching ash billow down around you! Get inside!" - weather_duration_lower = 600 - weather_duration_upper = 1200 - weather_overlay = "ash_storm" - - end_message = "The shrieking wind whips away the last of the ash and falls to its usual murmur. It should be safe to go outside now." - end_duration = 300 - end_overlay = "light_ash" - - area_type = /area/lavaland/surface/outdoors - target_trait = ZTRAIT_MINING - - immunity_type = "ash" - - probability = 90 - - barometer_predictable = TRUE - - var/datum/looping_sound/active_outside_ashstorm/sound_ao = new(list(), FALSE, TRUE) - var/datum/looping_sound/active_inside_ashstorm/sound_ai = new(list(), FALSE, TRUE) - var/datum/looping_sound/weak_outside_ashstorm/sound_wo = new(list(), FALSE, TRUE) - var/datum/looping_sound/weak_inside_ashstorm/sound_wi = new(list(), FALSE, TRUE) - -/datum/weather/ash_storm/telegraph() - . = ..() - var/list/inside_areas = list() - var/list/outside_areas = list() - var/list/eligible_areas = list() - for (var/z in impacted_z_levels) - eligible_areas += SSmapping.areas_in_z["[z]"] - for(var/i in 1 to eligible_areas.len) - var/area/place = eligible_areas[i] - if(place.outdoors) - outside_areas += place - else - inside_areas += place - CHECK_TICK - - sound_ao.output_atoms = outside_areas - sound_ai.output_atoms = inside_areas - sound_wo.output_atoms = outside_areas - sound_wi.output_atoms = inside_areas - - sound_wo.start() - sound_wi.start() - -/datum/weather/ash_storm/start() - . = ..() - sound_wo.stop() - sound_wi.stop() - - sound_ao.start() - sound_ai.start() - -/datum/weather/ash_storm/wind_down() - . = ..() - sound_ao.stop() - sound_ai.stop() - - sound_wo.start() - sound_wi.start() - -/datum/weather/ash_storm/end() - . = ..() - sound_wo.stop() - sound_wi.stop() - -/datum/weather/ash_storm/proc/is_ash_immune(atom/L) - while (L && !isturf(L)) - if(ismecha(L)) //Mechs are immune - return TRUE - if(ishuman(L)) //Are you immune? - var/mob/living/carbon/human/H = L - var/thermal_protection = H.get_thermal_protection() - if(thermal_protection >= FIRE_IMMUNITY_MAX_TEMP_PROTECT) - return TRUE - if(isliving(L))// if we're a non immune mob inside an immune mob we have to reconsider if that mob is immune to protect ourselves - var/mob/living/the_mob = L - if("ash" in the_mob.weather_immunities) - return TRUE - L = L.loc //Check parent items immunities (recurses up to the turf) - return FALSE //RIP you - -/datum/weather/ash_storm/weather_act(mob/living/L) - if(is_ash_immune(L)) - return - L.adjustFireLoss(4) - return ..() - - -//Emberfalls are the result of an ash storm passing by close to the playable area of lavaland. They have a 10% chance to trigger in place of an ash storm. -/datum/weather/ash_storm/emberfall - name = "emberfall" - desc = "" - - weather_message = "Gentle embers waft down around you like grotesque snow. The storm seems to have passed you by..." - weather_overlay = "light_ash" - - end_message = "The emberfall slows, stops. Another layer of hardened soot to the basalt beneath your feet." - end_sound = null - - aesthetic = TRUE - - probability = 10 diff --git a/code/datums/weather/weather_types/floor_is_lava.dm b/code/datums/weather/weather_types/floor_is_lava.dm deleted file mode 100644 index 2b8011060a..0000000000 --- a/code/datums/weather/weather_types/floor_is_lava.dm +++ /dev/null @@ -1,41 +0,0 @@ -//Causes fire damage to anyone not standing on a dense object. -/datum/weather/floor_is_lava - name = "the floor is lava" - desc = "" - - telegraph_message = "I feel the ground beneath you getting hot. Waves of heat distort the air." - telegraph_duration = 150 - - weather_message = "The floor is lava! Get on top of something!" - weather_duration_lower = 300 - weather_duration_upper = 600 - weather_overlay = "lava" - - end_message = "The ground cools and returns to its usual form." - end_duration = 0 - - area_type = /area - protected_areas = list(/area/space) - target_trait = ZTRAIT_STATION - - overlay_layer = ABOVE_OPEN_TURF_LAYER //Covers floors only - overlay_plane = FLOOR_PLANE - immunity_type = "lava" - - -/datum/weather/floor_is_lava/weather_act(mob/living/L) - if(issilicon(L)) - return - if(istype(L.buckled, /obj/structure/bed)) - return - for(var/obj/structure/O in L.loc) - if(O.density) - return - if(L.loc.density) - return - if(!L.client) //Only sentient people are going along with it! - return - if(L.movement_type & FLYING) - return - L.adjustFireLoss(3) - return ..() diff --git a/code/datums/weather/weather_types/roguetown/fog.dm b/code/datums/weather/weather_types/fog.dm similarity index 100% rename from code/datums/weather/weather_types/roguetown/fog.dm rename to code/datums/weather/weather_types/fog.dm diff --git a/code/datums/weather/weather_types/radiation_storm.dm b/code/datums/weather/weather_types/radiation_storm.dm deleted file mode 100644 index 38577b56ff..0000000000 --- a/code/datums/weather/weather_types/radiation_storm.dm +++ /dev/null @@ -1,67 +0,0 @@ -//Radiation storms occur when the station passes through an irradiated area, and irradiate anyone not standing in protected areas (maintenance, emergency storage, etc.) -/datum/weather/rad_storm - name = "radiation storm" - desc = "" - - telegraph_duration = 400 - telegraph_message = "The air begins to grow warm." - - weather_message = "I feel waves of heat wash over you! Find shelter!" - weather_overlay = "ash_storm" - weather_duration_lower = 600 - weather_duration_upper = 1500 - weather_color = "green" - weather_sound = 'sound/blank.ogg' - - end_duration = 100 - end_message = "The air seems to be cooling off again." - - area_type = /area - protected_areas = list(/area/maintenance, /area/ai_monitored/turret_protected/ai_upload, /area/ai_monitored/turret_protected/ai_upload_foyer, - /area/ai_monitored/turret_protected/ai, /area/storage/emergency/starboard, /area/storage/emergency/port, /area/shuttle) - target_trait = ZTRAIT_STATION - - immunity_type = "rad" - -/datum/weather/rad_storm/telegraph() - ..() - status_alarm(TRUE) - - -/datum/weather/rad_storm/weather_act(mob/living/L) - var/resist = L.getarmor(null, "rad") - if(prob(40)) - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if(H.dna && !HAS_TRAIT(H, TRAIT_RADIMMUNE)) - if(prob(max(0,100-resist))) - H.randmuti() - if(prob(50)) - if(prob(90)) - H.easy_randmut(NEGATIVE+MINOR_NEGATIVE) - else - H.easy_randmut(POSITIVE) - H.domutcheck() - L.rad_act(20) - return ..() - -/datum/weather/rad_storm/end() - if(..()) - return - priority_announce("The radiation threat has passed. Please return to your workplaces.", "Anomaly Alert") - status_alarm(FALSE) - -/datum/weather/rad_storm/proc/status_alarm(active) //Makes the status displays show the radiation warning for those who missed the announcement. - var/datum/radio_frequency/frequency = SSradio.return_frequency(FREQ_STATUS_DISPLAYS) - if(!frequency) - return - - var/datum/signal/signal = new - if (active) - signal.data["command"] = "alert" - signal.data["picture_state"] = "radiation" - else - signal.data["command"] = "shuttle" - - var/atom/movable/virtualspeaker/virt = new(null) - frequency.post_signal(virt, signal) diff --git a/code/datums/weather/weather_types/roguetown/rain.dm b/code/datums/weather/weather_types/roguetown/rain.dm deleted file mode 100644 index 60b121e7f5..0000000000 --- a/code/datums/weather/weather_types/roguetown/rain.dm +++ /dev/null @@ -1,125 +0,0 @@ - -/datum/weather/rain - name = "rain" - desc = "" - - telegraph_duration = 10 SECONDS - telegraph_message = "The sky begins to weep." - telegraph_sound = 'sound/blank.ogg' - - weather_message = "" - weather_overlay = "rain1" - weather_duration_lower = 5 MINUTES - weather_duration_upper = 12 MINUTES - weather_sound = 'sound/blank.ogg' - weather_alpha = 200 - - probability = 3 - - end_duration = 5 SECONDS - end_message = "" - end_sound = 'sound/blank.ogg' - - area_type = /area/rogue/outdoors - protected_areas = list(/area/rogue/indoors,/area/rogue/under) - impacted_z_levels = list() - var/lastlightning = 0 - - particles = list(/obj/emitters/weather/rain) - -/datum/weather/rain/New(z_levels) - impacted_z_levels = GLOB.sky_z.Copy() - . = ..() - -/datum/weather/rain/weather_act(atom/A) - if(isliving(A)) - var/mob/living/M = A - M.adjust_fire_stacks(-100) - M.SoakMob(FULL_BODY) - return TRUE - var/datum/reagent/water/W = new() - if(isobj(A)) - var/obj/O = A - W.reaction_obj(O, 100) - if(isopenturf(A)) - var/turf/open/T = A - W.reaction_turf(T, 300) - qdel(W) - return ..() - -/datum/weather/rain/get_used_state() - switch(stage) - if(STARTUP_STAGE) - return "bla1" -// return telegraph_overlay - if(MAIN_STAGE) - return pick("rain1", "rain2", "rain3", "rain4") - if(WIND_DOWN_STAGE) - return "bla2" - return "bla3" - -/datum/weather/rain/starteffected() - ..() //the parent does all living mobs already -// for(var/mob/living/L in GLOB.mob_living_list) -// if(can_weather_act(L)) -// SSweather.uniqueadd(L) -// START_PROCESSING(SSweather, L) -// for(var/obj/O in GLOB.rain_update) -// if(can_weather_act(O)) -// SSweather.uniqueadd(O) -// START_PROCESSING(SSweather, O) -// for(var/obj/O in GLOB.fires_list) -// if(can_weather_act(O)) -// START_PROCESSING(SSweather,O) - -/datum/weather/rain/initialprocess() - ..() -// for(var/turf/T in GLOB.dirt_list) -// if(can_weather_act(T)) -/// SSweather.uniqueadd(T, TRUE) -// START_PROCESSING(SSweather, T) - -/mob/living/carbon/proc/reset_lightning() - if(lightning_flashing) - lightning_flashing = FALSE - update_sight() - -/datum/weather/rain/process() -#ifndef TESTSERVER - if(GLOB.forecast != "rain") - wind_down() - return -#endif - if(world.time < lastlightning + 66 SECONDS) - return - lastlightning = world.time - for(var/mob/living/carbon/M in GLOB.player_list) - var/area/A = get_area(M) - if(istype(A, /area/rogue/outdoors)) - M.playsound_local(M, pick('sound/ambience/noises/thunout (1).ogg','sound/ambience/noises/thunout (2).ogg','sound/ambience/noises/thunout (3).ogg','sound/ambience/noises/thunout (4).ogg'), 100, FALSE) - M.lightning_flashing = TRUE - M.update_sight() - addtimer(CALLBACK(M, TYPE_PROC_REF(/mob/living/carbon, reset_lightning)), 1) - continue - if(istype(A, /area/rogue/indoors)) - M.playsound_local(M, pick('sound/ambience/noises/thunin (1).ogg','sound/ambience/noises/thunin (2).ogg','sound/ambience/noises/thunin (3).ogg','sound/ambience/noises/thunin (4).ogg'), 100, FALSE) - continue -// testing("dolightingflash") -// for(var/obj/machinery/light/sun/L in GLOB.machines) -// L.lightningflash() - -/datum/weather/rain/start() - . = ..() - for(var/M in GLOB.player_list) - if(isliving(M)) - var/mob/living/L = M - if(L.client) - SSdroning.play_rain(get_area(L), L.client) - -/datum/weather/rain/end() - . = ..() - for(var/M in GLOB.player_list) - if(isliving(M)) - var/mob/living/L = M - if(L.client) - SSdroning.kill_rain(L.client) diff --git a/code/datums/weather/weather_types/snow_storm.dm b/code/datums/weather/weather_types/snow_storm.dm deleted file mode 100644 index 780e3ebfd7..0000000000 --- a/code/datums/weather/weather_types/snow_storm.dm +++ /dev/null @@ -1,28 +0,0 @@ -/datum/weather/snow_storm - name = "snow storm" - desc = "" - probability = 90 - - telegraph_message = "Drifting particles of snow begin to dust the surrounding area.." - telegraph_duration = 300 - telegraph_overlay = "light_snow" - - weather_message = "Harsh winds pick up as dense snow begins to fall from the sky! Seek shelter!" - weather_overlay = "snow_storm" - weather_duration_lower = 600 - weather_duration_upper = 1500 - - end_duration = 100 - end_message = "The snowfall dies down, it should be safe to go outside again." - - area_type = /area/awaymission/snowdin/outside - target_trait = ZTRAIT_AWAY - - immunity_type = "snow" - - barometer_predictable = TRUE - - -/datum/weather/snow_storm/weather_act(mob/living/L) - L.adjust_bodytemperature(-rand(5,15)) - diff --git a/code/datums/wires/_wires.dm b/code/datums/wires/_wires.dm deleted file mode 100644 index 66fb3e1e11..0000000000 --- a/code/datums/wires/_wires.dm +++ /dev/null @@ -1,296 +0,0 @@ -#define MAXIMUM_EMP_WIRES 3 - -/proc/is_wire_tool(obj/item/I) - if(!I) - return - - if(I.tool_behaviour == TOOL_WIRECUTTER || I.tool_behaviour == TOOL_MULTITOOL) - return TRUE - if(istype(I, /obj/item/assembly)) - var/obj/item/assembly/A = I - if(A.attachable) - return TRUE - -/atom/proc/attempt_wire_interaction(mob/user) - if(!wires) - return WIRE_INTERACTION_FAIL - if(!user.CanReach(src)) - return WIRE_INTERACTION_FAIL - wires.interact(user) - return WIRE_INTERACTION_BLOCK - -/datum/wires - var/atom/holder = null // The holder (atom that contains these wires). - var/holder_type = null // The holder's typepath (used to make wire colors common to all holders). - var/proper_name = "Unknown" // The display name for the wire set shown in station blueprints. Not used if randomize is true or it's an item NT wouldn't know about (Explosives/Nuke) - - var/list/wires = list() // List of wires. - var/list/cut_wires = list() // List of wires that have been cut. - var/list/colors = list() // Dictionary of colors to wire. - var/list/assemblies = list() // List of attached assemblies. - var/randomize = 0 // If every instance of these wires should be random. - // Prevents wires from showing up in station blueprints - -/datum/wires/New(atom/holder) - ..() - if(!istype(holder, holder_type)) - CRASH("Wire holder is not of the expected type!") - - src.holder = holder - if(randomize) - randomize() - else - if(!GLOB.wire_color_directory[holder_type]) - randomize() - GLOB.wire_color_directory[holder_type] = colors - GLOB.wire_name_directory[holder_type] = proper_name - else - colors = GLOB.wire_color_directory[holder_type] - -/datum/wires/Destroy() - holder = null - assemblies = list() - return ..() - -/datum/wires/proc/add_duds(duds) - while(duds) - var/dud = WIRE_DUD_PREFIX + "[--duds]" - if(dud in wires) - continue - wires += dud - -/datum/wires/proc/randomize() - var/static/list/possible_colors = list( - "blue", - "brown", - "crimson", - "cyan", - "gold", - "grey", - "green", - "magenta", - "orange", - "pink", - "purple", - "red", - "silver", - "violet", - "white", - "yellow" - ) - - var/list/my_possible_colors = possible_colors.Copy() - - for(var/wire in shuffle(wires)) - colors[pick_n_take(my_possible_colors)] = wire - -/datum/wires/proc/shuffle_wires() - colors.Cut() - randomize() - -/datum/wires/proc/repair() - cut_wires.Cut() - -/datum/wires/proc/get_wire(color) - return colors[color] - -/datum/wires/proc/get_color_of_wire(wire_type) - for(var/color in colors) - var/other_type = colors[color] - if(wire_type == other_type) - return color - -/datum/wires/proc/get_attached(color) - if(assemblies[color]) - return assemblies[color] - return null - -/datum/wires/proc/is_attached(color) - if(assemblies[color]) - return TRUE - -/datum/wires/proc/is_cut(wire) - return (wire in cut_wires) - -/datum/wires/proc/is_color_cut(color) - return is_cut(get_wire(color)) - -/datum/wires/proc/is_all_cut() - if(cut_wires.len == wires.len) - return TRUE - -/datum/wires/proc/is_dud(wire) - return dd_hasprefix(wire, WIRE_DUD_PREFIX) - -/datum/wires/proc/is_dud_color(color) - return is_dud(get_wire(color)) - -/datum/wires/proc/cut(wire) - if(is_cut(wire)) - cut_wires -= wire - on_cut(wire, mend = TRUE) - else - cut_wires += wire - on_cut(wire, mend = FALSE) - -/datum/wires/proc/cut_color(color) - cut(get_wire(color)) - -/datum/wires/proc/cut_random() - cut(wires[rand(1, wires.len)]) - -/datum/wires/proc/cut_all() - for(var/wire in wires) - cut(wire) - -/datum/wires/proc/pulse(wire, user) - if(is_cut(wire)) - return - on_pulse(wire, user) - -/datum/wires/proc/pulse_color(color, mob/living/user) - pulse(get_wire(color), user) - -/datum/wires/proc/pulse_assembly(obj/item/assembly/S) - for(var/color in assemblies) - if(S == assemblies[color]) - pulse_color(color) - return TRUE - -/datum/wires/proc/attach_assembly(color, obj/item/assembly/S) - if(S && istype(S) && S.attachable && !is_attached(color)) - assemblies[color] = S - S.forceMove(holder) - S.connected = src - return S - -/datum/wires/proc/detach_assembly(color) - var/obj/item/assembly/S = get_attached(color) - if(S && istype(S)) - assemblies -= color - S.connected = null - S.forceMove(holder.drop_location()) - return S - -/datum/wires/proc/emp_pulse() - var/list/possible_wires = shuffle(wires) - var/remaining_pulses = MAXIMUM_EMP_WIRES - - for(var/wire in possible_wires) - if(prob(33)) - pulse(wire) - remaining_pulses-- - if(!remaining_pulses) - break - -// Overridable Procs -/datum/wires/proc/interactable(mob/user) - return TRUE - -/datum/wires/proc/get_status() - return list() - -/datum/wires/proc/on_cut(wire, mend = FALSE) - return - -/datum/wires/proc/on_pulse(wire, user) - return -// End Overridable Procs - -/datum/wires/proc/interact(mob/user) - if(!interactable(user)) - return - ui_interact(user) - for(var/A in assemblies) - var/obj/item/I = assemblies[A] - if(istype(I) && I.on_found(user)) - return - -/datum/wires/ui_host() - return holder - -/datum/wires/ui_status(mob/user) - if(interactable(user)) - return ..() - return UI_CLOSE - -/datum/wires/ui_interact(mob/user, ui_key = "wires", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if (!ui) - ui = new(user, src, ui_key, "wires", "[holder.name] Wires", 350, 150 + wires.len * 30, master_ui, state) - ui.open() - -/datum/wires/ui_data(mob/user) - var/list/data = list() - var/list/payload = list() - var/reveal_wires = FALSE - - // Admin ghost can see a purpose of each wire. - if(IsAdminGhost(user)) - reveal_wires = TRUE - - // Same for anyone with an abductor multitool. - else if(user.is_holding_item_of_type(/obj/item/multitool/abductor)) - reveal_wires = TRUE - - // Station blueprints do that too, but only if the wires are not randomized. - else if(user.is_holding_item_of_type(/obj/item/areaeditor/blueprints) && !randomize) - reveal_wires = TRUE - - for(var/color in colors) - payload.Add(list(list( - "color" = color, - "wire" = ((reveal_wires && !is_dud_color(color)) ? get_wire(color) : null), - "cut" = is_color_cut(color), - "attached" = is_attached(color) - ))) - data["wires"] = payload - data["status"] = get_status() - return data - -/datum/wires/ui_act(action, params) - if(..() || !interactable(usr)) - return - var/target_wire = params["wire"] - var/mob/living/L = usr - var/obj/item/I - switch(action) - if("cut") - I = L.is_holding_tool_quality(TOOL_WIRECUTTER) - if(I || IsAdminGhost(usr)) - if(I && holder) - I.play_tool_sound(holder, 20) - cut_color(target_wire) - . = TRUE - else - to_chat(L, "I need wirecutters!") - if("pulse") - I = L.is_holding_tool_quality(TOOL_MULTITOOL) - if(I || IsAdminGhost(usr)) - if(I && holder) - I.play_tool_sound(holder, 20) - pulse_color(target_wire, L) - . = TRUE - else - to_chat(L, "I need a multitool!") - if("attach") - if(is_attached(target_wire)) - I = detach_assembly(target_wire) - if(I) - L.put_in_hands(I) - . = TRUE - else - I = L.get_active_held_item() - if(istype(I, /obj/item/assembly)) - var/obj/item/assembly/A = I - if(A.attachable) - if(!L.temporarilyRemoveItemFromInventory(A)) - return - if(!attach_assembly(target_wire, A)) - A.forceMove(L.drop_location()) - . = TRUE - else - to_chat(L, "I need an attachable assembly!") - -#undef MAXIMUM_EMP_WIRES diff --git a/code/datums/wires/airalarm.dm b/code/datums/wires/airalarm.dm deleted file mode 100644 index f6c166c596..0000000000 --- a/code/datums/wires/airalarm.dm +++ /dev/null @@ -1,74 +0,0 @@ -/datum/wires/airalarm - holder_type = /obj/machinery/airalarm - proper_name = "Air Alarm" - -/datum/wires/airalarm/New(atom/holder) - wires = list( - WIRE_POWER, - WIRE_IDSCAN, WIRE_AI, - WIRE_PANIC, WIRE_ALARM - ) - add_duds(3) - ..() - -/datum/wires/airalarm/interactable(mob/user) - var/obj/machinery/airalarm/A = holder - if(A.panel_open && A.buildstage == 2) - return TRUE - -/datum/wires/airalarm/get_status() - var/obj/machinery/airalarm/A = holder - var/list/status = list() - status += "The interface light is [A.locked ? "red" : "green"]." - status += "The short indicator is [A.shorted ? "lit" : "off"]." - status += "The AI connection light is [!A.aidisabled ? "on" : "off"]." - return status - -/datum/wires/airalarm/on_pulse(wire) - var/obj/machinery/airalarm/A = holder - switch(wire) - if(WIRE_POWER) // Short out for a long time. - if(!A.shorted) - A.shorted = TRUE - A.update_icon() - addtimer(CALLBACK(A, TYPE_PROC_REF(/obj/machinery/airalarm, reset), wire), 1200) - if(WIRE_IDSCAN) // Toggle lock. - A.locked = !A.locked - if(WIRE_AI) // Disable AI control for a while. - if(!A.aidisabled) - A.aidisabled = TRUE - addtimer(CALLBACK(A, TYPE_PROC_REF(/obj/machinery/airalarm, reset), wire), 100) - if(WIRE_PANIC) // Toggle panic siphon. - if(!A.shorted) - if(A.mode == 1) // AALARM_MODE_SCRUB - A.mode = 3 // AALARM_MODE_PANIC - else - A.mode = 1 // AALARM_MODE_SCRUB - A.apply_mode(usr) - if(WIRE_ALARM) // Clear alarms. - var/area/AA = get_area(A) - if(AA.atmosalert(0, holder)) - A.post_alert(0) - A.update_icon() - -/datum/wires/airalarm/on_cut(wire, mend) - var/obj/machinery/airalarm/A = holder - switch(wire) - if(WIRE_POWER) // Short out forever. - A.shock(usr, 50) - A.shorted = !mend - A.update_icon() - if(WIRE_IDSCAN) - if(!mend) - A.locked = TRUE - if(WIRE_AI) - A.aidisabled = mend // Enable/disable AI control. - if(WIRE_PANIC) // Force panic syphon on. - if(!mend && !A.shorted) - A.mode = 3 // AALARM_MODE_PANIC - A.apply_mode(usr) - if(WIRE_ALARM) // Post alarm. - var/area/AA = get_area(A) - if(AA.atmosalert(2, holder)) - A.post_alert(2) - A.update_icon() diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm deleted file mode 100644 index cf5fb18a32..0000000000 --- a/code/datums/wires/airlock.dm +++ /dev/null @@ -1,140 +0,0 @@ -/datum/wires/airlock - holder_type = /obj/machinery/door/airlock - proper_name = "Airlock" - -/datum/wires/airlock/secure - randomize = TRUE - -/datum/wires/airlock/New(atom/holder) - wires = list( - WIRE_POWER1, WIRE_POWER2, - WIRE_BACKUP1, WIRE_BACKUP2, - WIRE_OPEN, WIRE_BOLTS, WIRE_IDSCAN, WIRE_AI, - WIRE_SHOCK, WIRE_SAFETY, WIRE_TIMING, WIRE_LIGHT, - WIRE_ZAP1, WIRE_ZAP2 - ) - add_duds(2) - ..() - -/datum/wires/airlock/interactable(mob/user) - var/obj/machinery/door/airlock/A = holder - if(!issilicon(user) && A.isElectrified() && A.shock(user, 100)) - return FALSE - if(A.panel_open) - return TRUE - -/datum/wires/airlock/get_status() - var/obj/machinery/door/airlock/A = holder - var/list/status = list() - status += "The door bolts [A.locked ? "have fallen!" : "look up."]" - status += "The test light is [A.hasPower() ? "on" : "off"]." - status += "The AI connection light is [A.aiControlDisabled || (A.obj_flags & EMAGGED) ? "off" : "on"]." - status += "The check wiring light is [A.safe ? "off" : "on"]." - status += "The timer is powered [A.autoclose ? "on" : "off"]." - status += "The speed light is [A.normalspeed ? "on" : "off"]." - status += "The emergency light is [A.emergency ? "on" : "off"]." - return status - -/datum/wires/airlock/on_pulse(wire) - set waitfor = FALSE - var/obj/machinery/door/airlock/A = holder - switch(wire) - if(WIRE_POWER1, WIRE_POWER2) // Pulse to loose power. - A.loseMainPower() - if(WIRE_BACKUP1, WIRE_BACKUP2) // Pulse to loose backup power. - A.loseBackupPower() - if(WIRE_OPEN) // Pulse to open door (only works not emagged and ID wire is cut or no access is required). - if(A.obj_flags & EMAGGED) - return - if(!A.requiresID() || A.check_access(null)) - if(A.density) - INVOKE_ASYNC(A, TYPE_PROC_REF(/obj/machinery/door/airlock, open)) - else - INVOKE_ASYNC(A, TYPE_PROC_REF(/obj/machinery/door/airlock, close)) - if(WIRE_BOLTS) // Pulse to toggle bolts (but only raise if power is on). - if(!A.locked) - A.bolt() - else - if(A.hasPower()) - A.unbolt() - A.update_icon() - if(WIRE_IDSCAN) // Pulse to disable emergency access and flash red lights. - if(A.hasPower() && A.density) - A.do_animate("deny") - if(A.emergency) - A.emergency = FALSE - A.update_icon() - if(WIRE_AI) // Pulse to disable WIRE_AI control for 10 ticks (follows same rules as cutting). - if(A.aiControlDisabled == 0) - A.aiControlDisabled = 1 - else if(A.aiControlDisabled == -1) - A.aiControlDisabled = 2 - sleep(10) - if(A) - if(A.aiControlDisabled == 1) - A.aiControlDisabled = 0 - else if(A.aiControlDisabled == 2) - A.aiControlDisabled = -1 - if(WIRE_SHOCK) // Pulse to shock the door for 10 ticks. - if(!A.secondsElectrified) - A.set_electrified(MACHINE_DEFAULT_ELECTRIFY_TIME, usr) - if(WIRE_SAFETY) - A.safe = !A.safe - if(!A.density) - A.close() - if(WIRE_TIMING) - A.normalspeed = !A.normalspeed - if(WIRE_LIGHT) - A.lights = !A.lights - A.update_icon() - -/datum/wires/airlock/on_cut(wire, mend) - var/obj/machinery/door/airlock/A = holder - switch(wire) - if(WIRE_POWER1, WIRE_POWER2) // Cut to loose power, repair all to gain power. - if(mend && !is_cut(WIRE_POWER1) && !is_cut(WIRE_POWER2)) - A.regainMainPower() - else - A.loseMainPower() - if(isliving(usr)) - A.shock(usr, 50) - if(WIRE_BACKUP1, WIRE_BACKUP2) // Cut to loose backup power, repair all to gain backup power. - if(mend && !is_cut(WIRE_BACKUP1) && !is_cut(WIRE_BACKUP2)) - A.regainBackupPower() - else - A.loseBackupPower() - if(isliving(usr)) - A.shock(usr, 50) - if(WIRE_BOLTS) // Cut to drop bolts, mend does nothing. - if(!mend) - A.bolt() - if(WIRE_AI) // Cut to disable WIRE_AI control, mend to re-enable. - if(mend) - if(A.aiControlDisabled == 1) // 0 = normal, 1 = locked out, 2 = overridden by WIRE_AI, -1 = previously overridden by WIRE_AI - A.aiControlDisabled = 0 - else if(A.aiControlDisabled == 2) - A.aiControlDisabled = -1 - else - if(A.aiControlDisabled == 0) - A.aiControlDisabled = 1 - else if(A.aiControlDisabled == -1) - A.aiControlDisabled = 2 - if(WIRE_SHOCK) // Cut to shock the door, mend to unshock. - if(mend) - if(A.secondsElectrified) - A.set_electrified(MACHINE_NOT_ELECTRIFIED, usr) - else - if(A.secondsElectrified != MACHINE_ELECTRIFIED_PERMANENT) - A.set_electrified(MACHINE_ELECTRIFIED_PERMANENT, usr) - if(WIRE_SAFETY) // Cut to disable safeties, mend to re-enable. - A.safe = mend - if(WIRE_TIMING) // Cut to disable auto-close, mend to re-enable. - A.autoclose = mend - if(A.autoclose && !A.density) - A.close() - if(WIRE_LIGHT) // Cut to disable lights, mend to re-enable. - A.lights = mend - A.update_icon() - if(WIRE_ZAP1, WIRE_ZAP2) // Ouch. - if(isliving(usr)) - A.shock(usr, 50) diff --git a/code/datums/wires/apc.dm b/code/datums/wires/apc.dm deleted file mode 100644 index 271472b35d..0000000000 --- a/code/datums/wires/apc.dm +++ /dev/null @@ -1,55 +0,0 @@ -/datum/wires/apc - holder_type = /obj/machinery/power/apc - proper_name = "APC" - -/datum/wires/apc/New(atom/holder) - wires = list( - WIRE_POWER1, WIRE_POWER2, - WIRE_IDSCAN, WIRE_AI - ) - add_duds(6) - ..() - -/datum/wires/apc/interactable(mob/user) - var/obj/machinery/power/apc/A = holder - if(A.panel_open && !A.opened) - return TRUE - -/datum/wires/apc/get_status() - var/obj/machinery/power/apc/A = holder - var/list/status = list() - status += "The interface light is [A.locked ? "red" : "green"]." - status += "The short indicator is [A.shorted ? "lit" : "off"]." - status += "The AI connection light is [!A.aidisabled ? "on" : "off"]." - return status - -/datum/wires/apc/on_pulse(wire) - var/obj/machinery/power/apc/A = holder - switch(wire) - if(WIRE_POWER1, WIRE_POWER2) // Short for a long while. - if(!A.shorted) - A.shorted = TRUE - addtimer(CALLBACK(A, TYPE_PROC_REF(/obj/machinery/power/apc, reset), wire), 1200) - if(WIRE_IDSCAN) // Unlock for a little while. - A.locked = FALSE - addtimer(CALLBACK(A, TYPE_PROC_REF(/obj/machinery/power/apc, reset), wire), 300) - if(WIRE_AI) // Disable AI control for a very short time. - if(!A.aidisabled) - A.aidisabled = TRUE - addtimer(CALLBACK(A, TYPE_PROC_REF(/obj/machinery/power/apc, reset), wire), 10) - -/datum/wires/apc/on_cut(index, mend) - var/obj/machinery/power/apc/A = holder - switch(index) - if(WIRE_POWER1, WIRE_POWER2) // Short out. - if(mend && !is_cut(WIRE_POWER1) && !is_cut(WIRE_POWER2)) - A.shorted = FALSE - A.shock(usr, 50) - else - A.shorted = TRUE - A.shock(usr, 50) - if(WIRE_AI) // Disable AI control. - if(mend) - A.aidisabled = FALSE - else - A.aidisabled = TRUE diff --git a/code/datums/wires/autolathe.dm b/code/datums/wires/autolathe.dm deleted file mode 100644 index c70a20ca8e..0000000000 --- a/code/datums/wires/autolathe.dm +++ /dev/null @@ -1,48 +0,0 @@ -/datum/wires/autolathe - holder_type = /obj/machinery/autolathe - proper_name = "Autolathe" - -/datum/wires/autolathe/New(atom/holder) - wires = list( - WIRE_HACK, WIRE_DISABLE, - WIRE_SHOCK, WIRE_ZAP - ) - add_duds(6) - ..() - -/datum/wires/autolathe/interactable(mob/user) - var/obj/machinery/autolathe/A = holder - if(A.panel_open) - return TRUE - -/datum/wires/autolathe/get_status() - var/obj/machinery/autolathe/A = holder - var/list/status = list() - status += "The red light is [A.disabled ? "on" : "off"]." - status += "The blue light is [A.hacked ? "on" : "off"]." - return status - -/datum/wires/autolathe/on_pulse(wire) - var/obj/machinery/autolathe/A = holder - switch(wire) - if(WIRE_HACK) - A.adjust_hacked(!A.hacked) - addtimer(CALLBACK(A, TYPE_PROC_REF(/obj/machinery/autolathe, reset), wire), 60) - if(WIRE_SHOCK) - A.shocked = !A.shocked - addtimer(CALLBACK(A, TYPE_PROC_REF(/obj/machinery/autolathe, reset), wire), 60) - if(WIRE_DISABLE) - A.disabled = !A.disabled - addtimer(CALLBACK(A, TYPE_PROC_REF(/obj/machinery/autolathe, reset), wire), 60) - -/datum/wires/autolathe/on_cut(wire, mend) - var/obj/machinery/autolathe/A = holder - switch(wire) - if(WIRE_HACK) - A.adjust_hacked(!mend) - if(WIRE_HACK) - A.shocked = !mend - if(WIRE_DISABLE) - A.disabled = !mend - if(WIRE_ZAP) - A.shock(usr, 50) diff --git a/code/datums/wires/emitter.dm b/code/datums/wires/emitter.dm deleted file mode 100644 index d0e1352c0e..0000000000 --- a/code/datums/wires/emitter.dm +++ /dev/null @@ -1,17 +0,0 @@ - -/datum/wires/emitter - holder_type = /obj/machinery/power/emitter - -/datum/wires/emitter/New(atom/holder) - wires = list(WIRE_ZAP,WIRE_HACK) - ..() - -/datum/wires/emitter/on_pulse(wire) - var/obj/machinery/power/emitter/E = holder - switch(wire) - if(WIRE_ZAP) - E.fire_beam_pulse() - if(WIRE_HACK) - E.mode = !E.mode - E.set_projectile() - ..() diff --git a/code/datums/wires/explosive.dm b/code/datums/wires/explosive.dm deleted file mode 100644 index 0913dbae2a..0000000000 --- a/code/datums/wires/explosive.dm +++ /dev/null @@ -1,120 +0,0 @@ -/datum/wires/explosive - var/duds_number = 2 // All "dud" wires cause an explosion when cut or pulsed - randomize = TRUE // Prevents wires from showing up on blueprints - -/datum/wires/explosive/New(atom/holder) - add_duds(duds_number) // Duds also explode here. - ..() - -/datum/wires/explosive/on_pulse(index) - explode() - -/datum/wires/explosive/on_cut(index, mend) - explode() - -/datum/wires/explosive/proc/explode() - return - -/datum/wires/explosive/chem_grenade - duds_number = 1 - holder_type = /obj/item/grenade/chem_grenade - var/fingerprint - -/datum/wires/explosive/chem_grenade/interactable(mob/user) - var/obj/item/grenade/chem_grenade/G = holder - if(G.stage == GRENADE_WIRED) - return TRUE - -/datum/wires/explosive/chem_grenade/attach_assembly(color, obj/item/assembly/S) - if(istype(S,/obj/item/assembly/timer)) - var/obj/item/grenade/chem_grenade/G = holder - var/obj/item/assembly/timer/T = S - G.det_time = T.saved_time*10 - else if(istype(S,/obj/item/assembly/prox_sensor)) - var/obj/item/grenade/chem_grenade/G = holder - G.landminemode = S - S.proximity_monitor.wire = TRUE - fingerprint = S.fingerprintslast - return ..() - -/datum/wires/explosive/chem_grenade/explode() - var/obj/item/grenade/chem_grenade/G = holder - var/obj/item/assembly/assembly = get_attached(get_wire(1)) - message_admins("\An [assembly] has pulsed a grenade, which was installed by [fingerprint].") - log_game("\An [assembly] has pulsed a grenade, which was installed by [fingerprint].") - var/mob/M = get_mob_by_ckey(fingerprint) - var/turf/T = get_turf(M) - G.log_grenade(M, T) - G.prime() - -/datum/wires/explosive/chem_grenade/detach_assembly(color) - var/obj/item/assembly/S = get_attached(color) - if(S && istype(S)) - assemblies -= color - S.connected = null - S.forceMove(holder.drop_location()) - var/obj/item/grenade/chem_grenade/G = holder - G.landminemode = null - return S - -/datum/wires/explosive/c4 // Also includes X4 - holder_type = /obj/item/grenade/c4 - -/datum/wires/explosive/c4/interactable(mob/user) // No need to unscrew wire panels on plastic explosives - return TRUE - -/datum/wires/explosive/c4/explode() - var/obj/item/grenade/c4/P = holder - P.prime() - -/datum/wires/explosive/pizza - holder_type = /obj/item/pizzabox - -/datum/wires/explosive/pizza/New(atom/holder) - wires = list( - WIRE_DISARM - ) - add_duds(3) // Duds also explode here. - ..() - -/datum/wires/explosive/pizza/interactable(mob/user) - var/obj/item/pizzabox/P = holder - if(P.open && P.bomb) - return TRUE - -/datum/wires/explosive/pizza/get_status() - var/obj/item/pizzabox/P = holder - var/list/status = list() - status += "The red light is [P.bomb_active ? "on" : "off"]." - status += "The green light is [P.bomb_defused ? "on": "off"]." - return status - -/datum/wires/explosive/pizza/on_pulse(wire) - var/obj/item/pizzabox/P = holder - switch(wire) - if(WIRE_DISARM) // Pulse to toggle - P.bomb_defused = !P.bomb_defused - else // Boom - explode() - -/datum/wires/explosive/pizza/on_cut(wire, mend) - var/obj/item/pizzabox/P = holder - switch(wire) - if(WIRE_DISARM) // Disarm and untrap the box. - if(!mend) - P.bomb_defused = TRUE - else - if(!mend && !P.bomb_defused) - explode() - -/datum/wires/explosive/pizza/explode() - var/obj/item/pizzabox/P = holder - P.bomb.detonate() - - -/datum/wires/explosive/gibtonite - holder_type = /obj/item/twohanded/required/gibtonite - -/datum/wires/explosive/gibtonite/explode() - var/obj/item/twohanded/required/gibtonite/P = holder - P.GibtoniteReaction(null, 2) diff --git a/code/datums/wires/microwave.dm b/code/datums/wires/microwave.dm deleted file mode 100644 index 8c74abfa46..0000000000 --- a/code/datums/wires/microwave.dm +++ /dev/null @@ -1,27 +0,0 @@ -/datum/wires/microwave - holder_type = /obj/machinery/microwave - proper_name = "Microwave" - -/datum/wires/microwave/New(atom/holder) - wires = list( - WIRE_ACTIVATE - ) - ..() - -/datum/wires/microwave/interactable(mob/user) - . = FALSE - var/obj/machinery/microwave/M = holder - if(M.panel_open) - . = TRUE - -/datum/wires/microwave/on_pulse(wire) - var/obj/machinery/microwave/M = holder - switch(wire) - if(WIRE_ACTIVATE) - M.cook() - -/datum/wires/microwave/on_cut(wire, mend) - var/obj/machinery/microwave/M = holder - switch(wire) - if(WIRE_ACTIVATE) - M.wire_disabled = !mend diff --git a/code/datums/wires/mulebot.dm b/code/datums/wires/mulebot.dm deleted file mode 100644 index c1c01d503e..0000000000 --- a/code/datums/wires/mulebot.dm +++ /dev/null @@ -1,31 +0,0 @@ -/datum/wires/mulebot - holder_type = /mob/living/simple_animal/bot/mulebot - randomize = TRUE - -/datum/wires/mulebot/New(atom/holder) - wires = list( - WIRE_POWER1, WIRE_POWER2, - WIRE_AVOIDANCE, WIRE_LOADCHECK, - WIRE_MOTOR1, WIRE_MOTOR2, - WIRE_RX, WIRE_TX, WIRE_BEACON - ) - ..() - -/datum/wires/mulebot/interactable(mob/user) - var/mob/living/simple_animal/bot/mulebot/M = holder - if(M.open) - return TRUE - -/datum/wires/mulebot/on_pulse(wire) - var/mob/living/simple_animal/bot/mulebot/M = holder - switch(wire) - if(WIRE_POWER1, WIRE_POWER2) - holder.visible_message("[icon2html(M, viewers(holder))] The charge light flickers.") - if(WIRE_AVOIDANCE) - holder.visible_message("[icon2html(M, viewers(holder))] The external warning lights flash briefly.") - if(WIRE_LOADCHECK) - holder.visible_message("[icon2html(M, viewers(holder))] The load platform clunks.") - if(WIRE_MOTOR1, WIRE_MOTOR2) - holder.visible_message("[icon2html(M, viewers(holder))] The drive motor whines briefly.") - else - holder.visible_message("[icon2html(M, viewers(holder))] You hear a radio crackle.") diff --git a/code/datums/wires/particle_accelerator.dm b/code/datums/wires/particle_accelerator.dm deleted file mode 100644 index e58dba4631..0000000000 --- a/code/datums/wires/particle_accelerator.dm +++ /dev/null @@ -1,48 +0,0 @@ -/datum/wires/particle_accelerator/control_box - holder_type = /obj/machinery/particle_accelerator/control_box - proper_name = "Particle Accelerator" - -/datum/wires/particle_accelerator/control_box/New(atom/holder) - wires = list( - WIRE_POWER, WIRE_STRENGTH, WIRE_LIMIT, - WIRE_INTERFACE - ) - add_duds(2) - ..() - -/datum/wires/particle_accelerator/control_box/interactable(mob/user) - var/obj/machinery/particle_accelerator/control_box/C = holder - if(C.construction_state == 2) - return TRUE - -/datum/wires/particle_accelerator/control_box/on_pulse(wire) - var/obj/machinery/particle_accelerator/control_box/C = holder - switch(wire) - if(WIRE_POWER) - C.toggle_power() - if(WIRE_STRENGTH) - C.add_strength() - if(WIRE_INTERFACE) - C.interface_control = !C.interface_control - if(WIRE_LIMIT) - C.visible_message("[icon2html(C, viewers(holder))][C] makes a large whirring noise.") - -/datum/wires/particle_accelerator/control_box/on_cut(wire, mend) - var/obj/machinery/particle_accelerator/control_box/C = holder - switch(wire) - if(WIRE_POWER) - if(C.active == !mend) - C.toggle_power() - if(WIRE_STRENGTH) - for(var/i = 1; i < 3; i++) - C.remove_strength() - if(WIRE_INTERFACE) - if(!mend) - C.interface_control = FALSE - if(WIRE_LIMIT) - C.strength_upper_limit = (mend ? 2 : 3) - if(C.strength_upper_limit < C.strength) - C.remove_strength() - -/datum/wires/particle_accelerator/control_box/emp_pulse() // to prevent singulo from pulsing wires - return diff --git a/code/datums/wires/r_n_d.dm b/code/datums/wires/r_n_d.dm deleted file mode 100644 index ea61c1779e..0000000000 --- a/code/datums/wires/r_n_d.dm +++ /dev/null @@ -1,39 +0,0 @@ -/datum/wires/rnd - holder_type = /obj/machinery/rnd - randomize = TRUE - -/datum/wires/rnd/New(atom/holder) - wires = list( - WIRE_HACK, WIRE_DISABLE, - WIRE_SHOCK - ) - add_duds(5) - ..() - -/datum/wires/rnd/interactable(mob/user) - var/obj/machinery/rnd/R = holder - if(R.panel_open) - return TRUE - -/datum/wires/rnd/get_status() - var/obj/machinery/rnd/R = holder - var/list/status = list() - status += "The red light is [R.disabled ? "off" : "on"]." - status += "The blue light is [R.hacked ? "off" : "on"]." - return status - -/datum/wires/rnd/on_pulse(wire) - set waitfor = FALSE - var/obj/machinery/rnd/R = holder - switch(wire) - if(WIRE_HACK) - R.hacked = !R.hacked - if(WIRE_DISABLE) - R.disabled = !R.disabled -/datum/wires/rnd/on_cut(wire, mend) - var/obj/machinery/rnd/R = holder - switch(wire) - if(WIRE_HACK) - R.hacked = !mend - if(WIRE_DISABLE) - R.disabled = !mend diff --git a/code/datums/wires/radio.dm b/code/datums/wires/radio.dm deleted file mode 100644 index a1118da6d7..0000000000 --- a/code/datums/wires/radio.dm +++ /dev/null @@ -1,25 +0,0 @@ -/datum/wires/radio - holder_type = /obj/item/radio - proper_name = "Radio" - -/datum/wires/radio/New(atom/holder) - wires = list( - WIRE_SIGNAL, - WIRE_RX, WIRE_TX - ) - ..() - -/datum/wires/radio/interactable(mob/user) - var/obj/item/radio/R = holder - return R.unscrewed - -/datum/wires/radio/on_pulse(index) - var/obj/item/radio/R = holder - switch(index) - if(WIRE_SIGNAL) - R.listening = !R.listening - R.broadcasting = R.listening - if(WIRE_RX) - R.listening = !R.listening - if(WIRE_TX) - R.broadcasting = !R.broadcasting diff --git a/code/datums/wires/robot.dm b/code/datums/wires/robot.dm deleted file mode 100644 index 2638eb658c..0000000000 --- a/code/datums/wires/robot.dm +++ /dev/null @@ -1,86 +0,0 @@ -/datum/wires/robot - holder_type = /mob/living/silicon/robot - randomize = TRUE - -/datum/wires/robot/New(atom/holder) - wires = list( - WIRE_AI, WIRE_CAMERA, - WIRE_LAWSYNC, WIRE_LOCKDOWN, - WIRE_RESET_MODULE - ) - add_duds(2) - ..() - -/datum/wires/robot/interactable(mob/user) - var/mob/living/silicon/robot/R = holder - if(R.wiresexposed) - return TRUE - -/datum/wires/robot/get_status() - var/mob/living/silicon/robot/R = holder - var/list/status = list() - status += "The law sync module is [R.lawupdate ? "on" : "off"]." - status += "The intelligence link display shows [R.connected_ai ? R.connected_ai.name : "NULL"]." - status += "The camera light is [!isnull(R.builtInCamera) && R.builtInCamera.status ? "on" : "off"]." - status += "The lockdown indicator is [R.lockcharge ? "on" : "off"]." - status += "There is a star symbol above the [get_color_of_wire(WIRE_RESET_MODULE)] wire." - return status - -/datum/wires/robot/on_pulse(wire, user) - var/mob/living/silicon/robot/R = holder - switch(wire) - if(WIRE_AI) // Pulse to pick a new AI. - if(!R.emagged) - var/new_ai - if(user) - new_ai = select_active_ai(user) - else - new_ai = select_active_ai(R) - R.notify_ai(DISCONNECT) - if(new_ai && (new_ai != R.connected_ai)) - R.connected_ai = new_ai - if(R.shell) - R.undeploy() //If this borg is an AI shell, disconnect the controlling AI and assign ti to a new AI - R.notify_ai(AI_SHELL) - else - R.notify_ai(TRUE) - if(WIRE_CAMERA) // Pulse to disable the camera. - if(!QDELETED(R.builtInCamera) && !R.scrambledcodes) - R.builtInCamera.toggle_cam(usr, 0) - R.visible_message("[R]'s camera lens focuses loudly.", "My camera lens focuses loudly.") - if(WIRE_LAWSYNC) // Forces a law update if possible. - if(R.lawupdate) - R.visible_message("[R] gently chimes.", "LawSync protocol engaged.") - R.lawsync() - R.show_laws() - if(WIRE_LOCKDOWN) - R.SetLockdown(!R.lockcharge) // Toggle - if(WIRE_RESET_MODULE) - if(R.has_module()) - R.visible_message("[R]'s module servos twitch.", "My module display flickers.") - -/datum/wires/robot/on_cut(wire, mend) - var/mob/living/silicon/robot/R = holder - switch(wire) - if(WIRE_AI) // Cut the AI wire to reset AI control. - if(!mend) - R.notify_ai(DISCONNECT) - if(R.shell) - R.undeploy() - R.connected_ai = null - if(WIRE_LAWSYNC) // Cut the law wire, and the borg will no longer receive law updates from its AI. Repair and it will re-sync. - if(mend) - if(!R.emagged) - R.lawupdate = TRUE - else if(!R.deployed) //AI shells must always have the same laws as the AI - R.lawupdate = FALSE - if (WIRE_CAMERA) // Disable the camera. - if(!QDELETED(R.builtInCamera) && !R.scrambledcodes) - R.builtInCamera.status = mend - R.builtInCamera.toggle_cam(usr, 0) - R.visible_message("[R]'s camera lens focuses loudly.", "My camera lens focuses loudly.") - if(WIRE_LOCKDOWN) // Simple lockdown. - R.SetLockdown(!mend) - if(WIRE_RESET_MODULE) - if(R.has_module() && !mend) - R.ResetModule() diff --git a/code/datums/wires/roulette.dm b/code/datums/wires/roulette.dm deleted file mode 100644 index fe8d7ee2e4..0000000000 --- a/code/datums/wires/roulette.dm +++ /dev/null @@ -1,76 +0,0 @@ -/datum/wires/roulette - holder_type = /obj/machinery/roulette - proper_name = "Roulette Table" - randomize = TRUE - -/datum/wires/roulette/New(atom/holder) - wires = list( - WIRE_RESETOWNER, - WIRE_PRIZEVEND, - WIRE_SHOCK, - WIRE_BOLTS - ) - ..() - -/datum/wires/roulette/interactable(mob/user) - . = FALSE - var/obj/machinery/roulette/R = holder - if(R.stat & MAINT) - . = TRUE - -/datum/wires/roulette/get_status() - var/obj/machinery/roulette/R = holder - var/list/status = list() - status += "The machines bolts [R.anchored ? "have fallen!" : "look up."]" - status += "The main circuit is [R.on ? "on" : "off"]." - status += "The main system lock appears to be [R.locked ? "on" : "off"]." - status += "The account balance system appears to be [R.my_card ? "connected to [R.my_card.registered_account.account_holder]" : "disconnected"]." - return status - -/datum/wires/roulette/on_pulse(wire) - var/obj/machinery/roulette/R = holder - switch(wire) - if(WIRE_SHOCK) - if(isliving(usr)) - R.shock(usr, 50) - if(WIRE_BOLTS) // Pulse to toggle bolts (but only raise if power is on). - if(!R.on) - return - R.anchored = !R.anchored - if(WIRE_RESETOWNER) - R.my_card = null - R.audible_message("Owner reset!") - R.locked = FALSE - if(WIRE_PRIZEVEND) - if(isliving(usr)) - R.shock(usr, 70) - if(R.locked) - return - R.audible_message("Unauthorized prize vend detected! Locking down machine!") - R.prize_theft(0.20) - -/datum/wires/roulette/on_cut(wire, mend) - var/obj/machinery/roulette/R = holder - switch(wire) - if(WIRE_SHOCK) - if(isliving(usr)) - R.shock(usr, 60) - if(mend) - R.on = TRUE - else - R.on = FALSE - if(WIRE_BOLTS) // Always drop - if(!R.on) - return - R.anchored = TRUE - if(WIRE_RESETOWNER) - if(isliving(usr)) - R.shock(usr, 70) - if(WIRE_PRIZEVEND) - if(isliving(usr)) - R.shock(usr, 75) - if(R.locked) - return - R.audible_message("Unauthorized prize vend detected! Locking down machine!") - R.prize_theft(0.10) - diff --git a/code/datums/wires/suit_storage_unit.dm b/code/datums/wires/suit_storage_unit.dm deleted file mode 100644 index eb7781203b..0000000000 --- a/code/datums/wires/suit_storage_unit.dm +++ /dev/null @@ -1,45 +0,0 @@ -/datum/wires/suit_storage_unit - holder_type = /obj/machinery/suit_storage_unit - proper_name = "Suit Storage Unit" - -/datum/wires/suit_storage_unit/New(atom/holder) - wires = list( - WIRE_HACK, WIRE_SAFETY, - WIRE_ZAP - ) - add_duds(2) - ..() - -/datum/wires/suit_storage_unit/interactable(mob/user) - var/obj/machinery/suit_storage_unit/SSU = holder - if(SSU.panel_open) - return TRUE - -/datum/wires/suit_storage_unit/get_status() - var/obj/machinery/suit_storage_unit/SSU = holder - var/list/status = list() - status += "The UV bulb is [SSU.uv_super ? "glowing" : "dim"]." - status += "The service light is [SSU.safeties ? "off" : "on"]." - return status - -/datum/wires/suit_storage_unit/on_pulse(wire) - var/obj/machinery/suit_storage_unit/SSU = holder - switch(wire) - if(WIRE_HACK) - SSU.uv_super = !SSU.uv_super - if(WIRE_SAFETY) - SSU.safeties = !SSU.safeties - if(WIRE_ZAP) - if(usr) - SSU.shock(usr) - -/datum/wires/suit_storage_unit/on_cut(wire, mend) - var/obj/machinery/suit_storage_unit/SSU = holder - switch(wire) - if(WIRE_HACK) - SSU.uv_super = !mend - if(WIRE_SAFETY) - SSU.safeties = mend - if(WIRE_ZAP) - if(usr) - SSU.shock(usr) diff --git a/code/datums/wires/syndicatebomb.dm b/code/datums/wires/syndicatebomb.dm deleted file mode 100644 index c3bbcdbbc6..0000000000 --- a/code/datums/wires/syndicatebomb.dm +++ /dev/null @@ -1,91 +0,0 @@ -/datum/wires/syndicatebomb - holder_type = /obj/machinery/syndicatebomb - randomize = TRUE - -/datum/wires/syndicatebomb/New(atom/holder) - wires = list( - WIRE_BOOM, WIRE_UNBOLT, - WIRE_ACTIVATE, WIRE_DELAY, WIRE_PROCEED - ) - ..() - -/datum/wires/syndicatebomb/interactable(mob/user) - var/obj/machinery/syndicatebomb/P = holder - if(P.open_panel) - return TRUE - -/datum/wires/syndicatebomb/on_pulse(wire) - var/obj/machinery/syndicatebomb/B = holder - switch(wire) - if(WIRE_BOOM) - if(B.active) - holder.visible_message("[icon2html(B, viewers(holder))] An alarm sounds! It's go-") - B.explode_now = TRUE - tell_admins(B) - else - holder.visible_message("[icon2html(B, viewers(holder))] Nothing happens.") - if(WIRE_UNBOLT) - holder.visible_message("[icon2html(B, viewers(holder))] The bolts spin in place for a moment.") - if(WIRE_DELAY) - if(B.delayedbig) - holder.visible_message("[icon2html(B, viewers(holder))] Nothing happens.") - else - holder.visible_message("[icon2html(B, viewers(holder))] The bomb chirps.") - playsound(B, 'sound/blank.ogg', 30, TRUE) - B.detonation_timer += 300 - if(B.active) - B.delayedbig = TRUE - if(WIRE_PROCEED) - holder.visible_message("[icon2html(B, viewers(holder))] The bomb buzzes ominously!") - playsound(B, 'sound/blank.ogg', 30, TRUE) - var/seconds = B.seconds_remaining() - if(seconds >= 61) // Long fuse bombs can suddenly become more dangerous if you tinker with them. - B.detonation_timer = world.time + 600 - else if(seconds >= 21) - B.detonation_timer -= 100 - else if(seconds >= 11) // Both to prevent negative timers and to have a little mercy. - B.detonation_timer = world.time + 100 - if(WIRE_ACTIVATE) - if(!B.active) - holder.visible_message("[icon2html(B, viewers(holder))] You hear the bomb start ticking!") - B.activate() - B.update_icon() - else if(B.delayedlittle) - holder.visible_message("[icon2html(B, viewers(holder))] Nothing happens.") - else - holder.visible_message("[icon2html(B, viewers(holder))] The bomb seems to hesitate for a moment.") - B.detonation_timer += 100 - B.delayedlittle = TRUE - -/datum/wires/syndicatebomb/on_cut(wire, mend) - var/obj/machinery/syndicatebomb/B = holder - switch(wire) - if(WIRE_BOOM) - if(!mend && B.active) - holder.visible_message("[icon2html(B, viewers(holder))] An alarm sounds! It's go-") - B.explode_now = TRUE - tell_admins(B) - if(WIRE_UNBOLT) - if(!mend && B.anchored) - holder.visible_message("[icon2html(B, viewers(holder))] The bolts lift out of the ground!") - playsound(B, 'sound/blank.ogg', 30, TRUE) - B.anchored = FALSE - if(WIRE_PROCEED) - if(!mend && B.active) - holder.visible_message("[icon2html(B, viewers(holder))] An alarm sounds! It's go-") - B.explode_now = TRUE - tell_admins(B) - if(WIRE_ACTIVATE) - if(!mend && B.active) - holder.visible_message("[icon2html(B, viewers(holder))] The timer stops! The bomb has been defused!") - B.active = FALSE - B.delayedlittle = FALSE - B.delayedbig = FALSE - B.update_icon() - -/datum/wires/syndicatebomb/proc/tell_admins(obj/machinery/syndicatebomb/B) - if(istype(B, /obj/machinery/syndicatebomb/training)) - return - var/turf/T = get_turf(B) - log_game("\A [B] was detonated via boom wire at [AREACOORD(T)].") - message_admins("A [B.name] was detonated via boom wire at [ADMIN_VERBOSEJMP(T)].") diff --git a/code/datums/wires/tesla_coil.dm b/code/datums/wires/tesla_coil.dm deleted file mode 100644 index fa858a9a8f..0000000000 --- a/code/datums/wires/tesla_coil.dm +++ /dev/null @@ -1,13 +0,0 @@ - -/datum/wires/tesla_coil - randomize = 1 //Only one wire don't need blueprints - holder_type = /obj/machinery/power/tesla_coil - -/datum/wires/tesla_coil/New(atom/holder) - wires = list(WIRE_ZAP) - ..() - -/datum/wires/tesla_coil/on_pulse(wire) - var/obj/machinery/power/tesla_coil/C = holder - C.zap() - ..() diff --git a/code/datums/wires/vending.dm b/code/datums/wires/vending.dm deleted file mode 100644 index 078c940b04..0000000000 --- a/code/datums/wires/vending.dm +++ /dev/null @@ -1,59 +0,0 @@ -/datum/wires/vending - holder_type = /obj/machinery/vending - proper_name = "Vending Unit" - -/datum/wires/vending/New(atom/holder) - wires = list( - WIRE_THROW, WIRE_SHOCK, WIRE_SPEAKER, - WIRE_CONTRABAND, WIRE_IDSCAN - ) - add_duds(1) - ..() - -/datum/wires/vending/interactable(mob/user) - var/obj/machinery/vending/V = holder - if(!issilicon(user) && V.seconds_electrified && V.shock(user, 100)) - return FALSE - if(V.panel_open) - return TRUE - -/datum/wires/vending/get_status() - var/obj/machinery/vending/V = holder - var/list/status = list() - status += "The orange light is [V.seconds_electrified ? "on" : "off"]." - status += "The red light is [V.shoot_inventory ? "off" : "blinking"]." - status += "The green light is [V.extended_inventory ? "on" : "off"]." - status += "A [V.scan_id ? "purple" : "yellow"] light is on." - status += "The speaker light is [V.shut_up ? "off" : "on"]." - return status - -/datum/wires/vending/on_pulse(wire) - var/obj/machinery/vending/V = holder - switch(wire) - if(WIRE_THROW) - V.shoot_inventory = !V.shoot_inventory - if(WIRE_CONTRABAND) - V.extended_inventory = !V.extended_inventory - if(WIRE_SHOCK) - V.seconds_electrified = MACHINE_DEFAULT_ELECTRIFY_TIME - if(WIRE_IDSCAN) - V.scan_id = !V.scan_id - if(WIRE_SPEAKER) - V.shut_up = !V.shut_up - -/datum/wires/vending/on_cut(wire, mend) - var/obj/machinery/vending/V = holder - switch(wire) - if(WIRE_THROW) - V.shoot_inventory = !mend - if(WIRE_CONTRABAND) - V.extended_inventory = FALSE - if(WIRE_SHOCK) - if(mend) - V.seconds_electrified = MACHINE_NOT_ELECTRIFIED - else - V.seconds_electrified = MACHINE_ELECTRIFIED_PERMANENT - if(WIRE_IDSCAN) - V.scan_id = mend - if(WIRE_SPEAKER) - V.shut_up = mend diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm index 7812c8dab2..54bf70afd0 100644 --- a/code/datums/world_topic.dm +++ b/code/datums/world_topic.dm @@ -86,15 +86,6 @@ /datum/world_topic/ahelp_relay/Run(list/input) relay_msg_admins("HELP: [input["source"]] [input["message_sender"]]: [input["message"]]") -/datum/world_topic/comms_console - keyword = "Comms_Console" - require_comms_key = TRUE - -/datum/world_topic/comms_console/Run(list/input) - minor_announce(input["message"], "Incoming message from [input["message_sender"]]") - for(var/obj/machinery/computer/communications/CM in GLOB.machines) - CM.overrideCooldown() - /datum/world_topic/news_report keyword = "News_Report" require_comms_key = TRUE @@ -169,7 +160,6 @@ .["real_mode"] = SSticker.mode.name // Key-authed callers may know the truth behind the "secret" - .["security_level"] = get_security_level() .["round_duration"] = SSticker ? round((world.time-SSticker.round_start_time)/10) : 0 // Amount of world's ticks in seconds, useful for calculating round duration diff --git a/code/datums/wounds/_wound.dm b/code/datums/wounds/_wound.dm index eb3ab978d9..e9683faf22 100644 --- a/code/datums/wounds/_wound.dm +++ b/code/datums/wounds/_wound.dm @@ -75,12 +75,22 @@ GLOBAL_LIST_INIT(primordial_wounds, init_primordial_wounds()) /// Some wounds make no sense on a dismembered limb and need to go var/qdel_on_droplimb = FALSE + /// Werewolf infection probability for bites on this wound + var/werewolf_infection_probability = 15 + /// Time taken until werewolf infection comes in + var/werewolf_infection_time = 2 MINUTES + /// Actual infection timer + var/werewolf_infection_timer + /datum/wound/Destroy(force) . = ..() if(bodypart_owner) remove_from_bodypart() else if(owner) remove_from_mob() + if(werewolf_infection_timer) + deltimer(werewolf_infection_timer) + werewolf_infection_timer = null bodypart_owner = null owner = null @@ -90,9 +100,9 @@ GLOBAL_LIST_INIT(primordial_wounds, init_primordial_wounds()) return var/visible_name = name if(is_sewn()) - visible_name += " (sewn)" + visible_name += span_green("(sewn)") if(is_clotted()) - visible_name += " (clotted)" + visible_name += span_danger("(clotted)") return visible_name /// Description of this wound returned to the player when the bodypart is checked with check_for_injuries() @@ -148,11 +158,11 @@ GLOBAL_LIST_INIT(primordial_wounds, init_primordial_wounds()) else if(owner) remove_from_mob() LAZYADD(affected.wounds, src) - sortList(affected.wounds, GLOBAL_PROC_REF(cmp_wound_severity_dsc)) + sortTim(affected.wounds, GLOBAL_PROC_REF(cmp_wound_severity_dsc)) bodypart_owner = affected owner = bodypart_owner.owner on_bodypart_gain(affected) - on_mob_gain(affected.owner) + INVOKE_ASYNC(src, PROC_REF(on_mob_gain), affected.owner) //this is literally a fucking lint error like new species cannot possible spawn with wounds until after its ass if(crit_message) var/message = get_crit_message(affected.owner, affected) if(message) @@ -223,6 +233,10 @@ GLOBAL_LIST_INIT(primordial_wounds, init_primordial_wounds()) /datum/wound/proc/on_mob_gain(mob/living/affected) if(mob_overlay) affected.update_damage_overlays() + if(werewolf_infection_timer) + deltimer(werewolf_infection_timer) + werewolf_infection_timer = null + werewolf_infect_attempt() /// Removes this wound from a given, simpler than adding to a bodypart - No extra effects /datum/wound/proc/remove_from_mob() @@ -249,7 +263,7 @@ GLOBAL_LIST_INIT(primordial_wounds, init_primordial_wounds()) /// Called on handle_wounds(), on the life() proc /datum/wound/proc/on_death() return - + /// Heals this wound by the given amount, and deletes it if it's healed completely /datum/wound/proc/heal_wound(heal_amount) // Wound cannot be healed normally, whp is null @@ -258,12 +272,13 @@ GLOBAL_LIST_INIT(primordial_wounds, init_primordial_wounds()) var/amount_healed = min(whp, round(heal_amount, DAMAGE_PRECISION)) whp -= amount_healed if(whp <= 0) - if(bodypart_owner) - remove_from_bodypart(src) - else if(owner) - remove_from_mob(src) - else - qdel(src) + if(!should_persist()) + if(bodypart_owner) + remove_from_bodypart(src) + else if(owner) + remove_from_mob(src) + else + qdel(src) return amount_healed /// Sews the wound up, changing its properties to the sewn ones @@ -285,6 +300,16 @@ GLOBAL_LIST_INIT(primordial_wounds, init_primordial_wounds()) owner?.update_damage_overlays() return TRUE +/// Checks if this wound has a special infection (zombie or werewolf) +/datum/wound/proc/has_special_infection() + return (werewolf_infection_timer) + +/// Some wounds cannot go away naturally +/datum/wound/proc/should_persist() + if(has_special_infection()) + return TRUE + return FALSE + /// Cauterizes the wound /datum/wound/proc/cauterize_wound() if(!can_cauterize) @@ -302,6 +327,41 @@ GLOBAL_LIST_INIT(primordial_wounds, init_primordial_wounds()) /datum/wound/proc/is_clotted() return !isnull(clotting_threshold) && (bleed_rate <= clotting_threshold) +/datum/wound/proc/werewolf_infect_attempt() + if(QDELETED(src) || QDELETED(owner) || QDELETED(bodypart_owner)) + return FALSE + if(werewolf_infection_timer || !ishuman(owner) || !prob(werewolf_infection_probability)) + return + var/mob/living/carbon/human/human_owner = owner + if(!human_owner.can_werewolf()) + return + if(human_owner.stat >= DEAD) //forget it + return + to_chat(human_owner, span_danger("I feel horrible... REALLY horrible...")) + human_owner.mob_timers["puke"] = world.time + human_owner.vomit(1, blood = TRUE, stun = FALSE) + werewolf_infection_timer = addtimer(CALLBACK(src, PROC_REF(wake_werewolf)), werewolf_infection_time, TIMER_STOPPABLE) + severity = WOUND_SEVERITY_BIOHAZARD + if(bodypart_owner) + sortTim(bodypart_owner.wounds, GLOBAL_PROC_REF(cmp_wound_severity_dsc)) + return TRUE + +/datum/wound/proc/wake_werewolf() + if(QDELETED(src) || QDELETED(owner) || QDELETED(bodypart_owner)) + return FALSE + if(!ishuman(owner)) + return FALSE + var/mob/living/carbon/human/human_owner = owner + var/datum/antagonist/werewolf/wolfy = human_owner.werewolf_check() + if(!wolfy) + return FALSE + werewolf_infection_timer = null + owner.flash_fullscreen("redflash3") + to_chat(owner, span_danger("It hurts... Is this really the end for me?")) + owner.emote("scream") // heres your warning to others bro + owner.Knockdown(1) + return wolfy + /// Returns whether or not this wound should embed a weapon /proc/should_embed_weapon(datum/wound/wound_or_boolean, obj/item/weapon) if(!istype(wound_or_boolean)) diff --git a/code/datums/wounds/arteries.dm b/code/datums/wounds/arteries.dm index 96d2689199..9953aefc11 100644 --- a/code/datums/wounds/arteries.dm +++ b/code/datums/wounds/arteries.dm @@ -6,7 +6,7 @@ sound_effect = 'sound/combat/crit.ogg' whp = 50 sewn_whp = 20 - bleed_rate = 25 + bleed_rate = 20 sewn_bleed_rate = 0.2 clotting_threshold = null sewn_clotting_threshold = null @@ -18,7 +18,9 @@ can_cauterize = TRUE critical = TRUE sleep_healing = 0 - embed_chance = 75 + embed_chance = 0 + + werewolf_infection_probability = 100 /datum/wound/artery/can_stack_with(datum/wound/other) if(istype(other, /datum/wound/artery) && (type == other.type)) @@ -42,7 +44,7 @@ crit_message = "Blood sprays from %VICTIM's throat!" whp = 100 sewn_whp = 25 - bleed_rate = 60 + bleed_rate = 40 sewn_bleed_rate = 0.5 woundpain = 45 sewn_woundpain = 20 @@ -62,7 +64,7 @@ severity = WOUND_SEVERITY_FATAL whp = 100 sewn_whp = 35 - bleed_rate = 60 + bleed_rate = 40 sewn_bleed_rate = 0.8 woundpain = 80 sewn_woundpain = 50 @@ -79,9 +81,12 @@ "MY HEART IS TORN!", "MY HEART IS BLEEDING!", ) - to_chat(affected, "[pick(heartaches)]") + to_chat(affected, span_userdanger("[pick(heartaches)]")) if(HAS_TRAIT(affected, TRAIT_CRITICAL_WEAKNESS)) affected.death() + if(affected.mind.has_antag_datum(/datum/antagonist/vampirelord/)) + var/datum/antagonist/vampirelord/VL = affected.mind.has_antag_datum(/datum/antagonist/vampirelord) + VL.handle_vitae(-2000) /datum/wound/artery/chest/on_life() . = ..() @@ -97,7 +102,7 @@ severity = WOUND_SEVERITY_FATAL whp = 100 sewn_whp = 25 - bleed_rate = 50 + bleed_rate = 30 sewn_bleed_rate = 0.5 woundpain = 60 sewn_woundpain = 30 diff --git a/code/datums/wounds/bites.dm b/code/datums/wounds/bites.dm index 3be1e04389..d8dc9035af 100644 --- a/code/datums/wounds/bites.dm +++ b/code/datums/wounds/bites.dm @@ -1,6 +1,6 @@ /datum/wound/bite name = "bite" - bleed_rate = 0 + bleed_rate = 0.5 sewn_bleed_rate = 0 clotting_threshold = null sewn_clotting_threshold = null @@ -8,8 +8,8 @@ woundpain = 10 sew_threshold = 50 mob_overlay = "cut" - can_sew = FALSE - can_cauterize = FALSE + can_sew = TRUE + can_cauterize = TRUE passive_healing = 0.5 /datum/wound/bite/small diff --git a/code/datums/wounds/bruises.dm b/code/datums/wounds/bruises.dm index 61ca92e7b5..54a714eb9a 100644 --- a/code/datums/wounds/bruises.dm +++ b/code/datums/wounds/bruises.dm @@ -10,6 +10,8 @@ can_cauterize = FALSE passive_healing = 0.5 + werewolf_infection_probability = 0 + /datum/wound/bruise/small name = "bruise" whp = 15 diff --git a/code/datums/wounds/dislocations.dm b/code/datums/wounds/dislocations.dm index 32bc7098eb..bbe68dbe70 100644 --- a/code/datums/wounds/dislocations.dm +++ b/code/datums/wounds/dislocations.dm @@ -19,6 +19,8 @@ critical = TRUE passive_healing = 0.25 qdel_on_droplimb = TRUE + + werewolf_infection_probability = 0 /// Whether or not we can be surgically relocated var/can_relocate = TRUE diff --git a/code/datums/wounds/fractures.dm b/code/datums/wounds/fractures.dm index 68b5b0e0e8..b715b286b3 100644 --- a/code/datums/wounds/fractures.dm +++ b/code/datums/wounds/fractures.dm @@ -3,9 +3,9 @@ check_name = "FRACTURE" severity = WOUND_SEVERITY_SEVERE crit_message = list( - "The bone shatters!", - "The bone is broken!", - "The %BODYPART is mauled!", + "The bone shatters!", + "The bone is broken!", + "The %BODYPART is mauled!", "The bone snaps through the skin!", ) sound_effect = "wetbreak" @@ -16,7 +16,9 @@ can_cauterize = FALSE disabling = TRUE critical = TRUE - sleep_healing = 0 // no sleep healing that is retarded + sleep_healing = 0 // no sleep healing that is dumb + + werewolf_infection_probability = 0 /// Whether or not we can be surgically set var/can_set = TRUE /// Emote we use when applied @@ -25,7 +27,7 @@ /datum/wound/fracture/get_visible_name(mob/user) . = ..() if(passive_healing) - . += " (set)" + . += span_green("(set)") /datum/wound/fracture/can_stack_with(datum/wound/other) if(istype(other, /datum/wound/fracture) && (type == other.type)) @@ -50,9 +52,9 @@ name = "cranial fracture" check_name = "SKULLCRACK" crit_message = list( - "The skull shatters in a gruesome way!", - "The head is smashed!", - "The skull is broken!", + "The skull shatters in a gruesome way!", + "The head is smashed!", + "The skull is broken!", "The skull caves in!", ) sound_effect = "headcrush" @@ -114,7 +116,7 @@ paralysis = TRUE mortal = TRUE dents_brain = TRUE - + /datum/wound/fracture/head/brain/on_life() . = ..() owner.adjustOxyLoss(2.5) @@ -153,9 +155,9 @@ name = "mandibular fracture" check_name = "JAW FRACTURE" crit_message = list( - "The mandible comes apart beautifully!", - "The jaw is smashed!", - "The jaw is shattered!", + "The mandible comes apart beautifully!", + "The jaw is smashed!", + "The jaw is shattered!", "The jaw caves in!", ) whp = 50 @@ -175,7 +177,7 @@ name = "cervical fracture" check_name = "NECK" crit_message = list( - "The spine shatters in a spectacular way!", + "The spine shatters in a spectacular way!", "The spine snaps!", "The spine cracks!", "The spine is broken!", @@ -198,7 +200,7 @@ if(iscarbon(affected)) var/mob/living/carbon/carbon_affected = affected carbon_affected.update_disabled_bodyparts() - + /datum/wound/fracture/neck/on_life() . = ..() owner.adjustOxyLoss(2.5) @@ -222,9 +224,9 @@ name = "pelvic fracture" check_name = "PELVIS" crit_message = list( - "The pelvis shatters in a magnificent way!", - "The pelvis is smashed!", - "The pelvis is mauled!", + "The pelvis shatters in a magnificent way!", + "The pelvis is smashed!", + "The pelvis is mauled!", "The pelvic floor caves in!", ) whp = 50 @@ -236,7 +238,7 @@ name = "broken buck" check_name = "BUCKBROKEN" crit_message = "The buck is broken expertly!" - + /datum/wound/fracture/groin/on_mob_gain(mob/living/affected) . = ..() affected.Stun(20) diff --git a/code/datums/wounds/slashes.dm b/code/datums/wounds/slashes.dm index d583ba9e0f..e347d46726 100644 --- a/code/datums/wounds/slashes.dm +++ b/code/datums/wounds/slashes.dm @@ -68,6 +68,50 @@ ORGAN_SLOT_STOMACH_AID = 100 // It's called GUTTED for a reason. ) +/datum/wound/lashing + name = "lashing" + whp = 40 + sewn_whp = 12 + bleed_rate = 1.6 + sewn_bleed_rate = 0.05 + clotting_rate = 0.02 + sewn_clotting_rate = 0.02 + clotting_threshold = 0.4 + sewn_clotting_threshold = 0.1 + woundpain = 12 + sewn_woundpain = 8 + sew_threshold = 50 + can_sew = TRUE + can_cauterize = TRUE + +/datum/wound/lashing/small + name = "superficial lashing" + whp = 30 + sewn_whp = 8 + bleed_rate = 0.6 + sewn_bleed_rate = 0.05 + clotting_rate = 0.02 + sewn_clotting_rate = 0.02 + clotting_threshold = 0.4 + sewn_clotting_threshold = 0.1 + woundpain = 8 + sewn_woundpain = 4 + sew_threshold = 30 + +/datum/wound/lashing/large + name = "excruciating lashing" + whp = 80 + sewn_whp = 20 + bleed_rate = 4 //Intended for combat, might kill if used for punishment. Force can be controlled by not charging the whip lash fully. + sewn_bleed_rate = 0.05 + clotting_rate = 0.02 + sewn_clotting_rate = 0.02 + clotting_threshold = 0.4 + sewn_clotting_threshold = 0.1 + woundpain = 25 + sewn_woundpain = 15 + sew_threshold = 75 + /datum/wound/slash/disembowel/can_stack_with(datum/wound/other) if(istype(other, /datum/wound/slash/disembowel) && (type == other.type)) return FALSE diff --git a/code/datums/wounds/special.dm b/code/datums/wounds/special.dm index adbe44606b..a9a17a57f0 100644 --- a/code/datums/wounds/special.dm +++ b/code/datums/wounds/special.dm @@ -274,3 +274,33 @@ "The testicles are destroyed!", "The testicles are eviscerated!", ) + +/datum/wound/scarring + name = "permanent scarring" + check_name = "SCARRED" + severity = WOUND_SEVERITY_SEVERE + crit_message = list( + "The whiplash cuts deep!", + "The tissue is irreversibly rended!", + "The %BODYPART is thoroughly disfigured!", + ) + sound_effect = 'sound/combat/crit.ogg' + whp = 80 + woundpain = 30 + can_sew = FALSE + can_cauterize = FALSE + disabling = TRUE + critical = TRUE + sleep_healing = 0 + var/gain_emote = "paincrit" + +/datum/wound/scarring/on_mob_gain(mob/living/affected) + . = ..() + affected.emote("scream", TRUE) + affected.Slowdown(20) + shake_camera(affected, 2, 2) + +/datum/wound/scarring/can_stack_with(datum/wound/other) + if(istype(other, /datum/wound/scarring) && (type == other.type)) + return FALSE + return TRUE diff --git a/code/game/alternate_appearance.dm b/code/game/alternate_appearance.dm index 9bbd1f38d4..4db4ecaad7 100644 --- a/code/game/alternate_appearance.dm +++ b/code/game/alternate_appearance.dm @@ -106,19 +106,6 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances) /datum/atom_hud/alternate_appearance/basic/everyone/mobShouldSee(mob/M) return !isobserver(M) -/datum/atom_hud/alternate_appearance/basic/silicons - -/datum/atom_hud/alternate_appearance/basic/silicons/New() - ..() - for(var/mob in GLOB.silicon_mobs) - if(mobShouldSee(mob)) - add_hud_to(mob) - -/datum/atom_hud/alternate_appearance/basic/silicons/mobShouldSee(mob/M) - if(issilicon(M)) - return TRUE - return FALSE - /datum/atom_hud/alternate_appearance/basic/observers add_ghost_version = FALSE //just in case, to prevent infinite loops @@ -131,32 +118,6 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances) /datum/atom_hud/alternate_appearance/basic/observers/mobShouldSee(mob/M) return isobserver(M) -/datum/atom_hud/alternate_appearance/basic/noncult - -/datum/atom_hud/alternate_appearance/basic/noncult/New() - ..() - for(var/mob in GLOB.player_list) - if(mobShouldSee(mob)) - add_hud_to(mob) - -/datum/atom_hud/alternate_appearance/basic/noncult/mobShouldSee(mob/M) - if(!iscultist(M)) - return TRUE - return FALSE - -/datum/atom_hud/alternate_appearance/basic/cult - -/datum/atom_hud/alternate_appearance/basic/cult/New() - ..() - for(var/mob in GLOB.player_list) - if(mobShouldSee(mob)) - add_hud_to(mob) - -/datum/atom_hud/alternate_appearance/basic/cult/mobShouldSee(mob/M) - if(iscultist(M)) - return TRUE - return FALSE - /datum/atom_hud/alternate_appearance/basic/blessedAware /datum/atom_hud/alternate_appearance/basic/blessedAware/New() diff --git a/code/game/area/ai_monitored.dm b/code/game/area/ai_monitored.dm deleted file mode 100644 index 65da1c6edf..0000000000 --- a/code/game/area/ai_monitored.dm +++ /dev/null @@ -1,30 +0,0 @@ -/area/ai_monitored - name = "AI Monitored Area" - var/list/obj/machinery/camera/motioncameras = list() - var/list/datum/weakref/motionTargets = list() - -/area/ai_monitored/Initialize(mapload) - . = ..() - if(mapload) - for (var/obj/machinery/camera/M in src) - if(M.isMotion()) - motioncameras.Add(M) - M.area_motion = src - -//Only need to use one camera - -/area/ai_monitored/Entered(atom/movable/O) - ..() - if (ismob(O) && motioncameras.len) - for(var/X in motioncameras) - var/obj/machinery/camera/cam = X - cam.newTarget(O) - return - -/area/ai_monitored/Exited(atom/movable/O) - ..() - if (ismob(O) && motioncameras.len) - for(var/X in motioncameras) - var/obj/machinery/camera/cam = X - cam.lostTargetRef(WEAKREF(O)) - return diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 468fb4cafd..3373183ef9 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -207,7 +207,6 @@ GLOBAL_LIST_EMPTY(teleportlocs) * Sets machine power levels in the area */ /area/LateInitialize() - power_change() // all machines set to current power level, also updates icon update_beauty() /** @@ -251,236 +250,6 @@ GLOBAL_LIST_EMPTY(teleportlocs) STOP_PROCESSING(SSobj, src) return ..() -/** - * Generate a power alert for this area - * - * Sends to all ai players, alert consoles, drones and alarm monitor programs in the world - */ -/area/proc/poweralert(state, obj/source) - if (state != poweralm) - poweralm = state - if(istype(source)) //Only report power alarms on the z-level where the source is located. - for (var/item in GLOB.silicon_mobs) - var/mob/living/silicon/aiPlayer = item - if (state == 1) - aiPlayer.cancelAlarm("Power", src, source) - else - aiPlayer.triggerAlarm("Power", src, cameras, source) - - for (var/item in GLOB.alert_consoles) - var/obj/machinery/computer/station_alert/a = item - if(state == 1) - a.cancelAlarm("Power", src, source) - else - a.triggerAlarm("Power", src, cameras, source) - - for (var/item in GLOB.drones_list) - var/mob/living/simple_animal/drone/D = item - if(state == 1) - D.cancelAlarm("Power", src, source) - else - D.triggerAlarm("Power", src, cameras, source) - for(var/item in GLOB.alarmdisplay) - var/datum/computer_file/program/alarm_monitor/p = item - if(state == 1) - p.cancelAlarm("Power", src, source) - else - p.triggerAlarm("Power", src, cameras, source) - -/** - * Generate an atmospheric alert for this area - * - * Sends to all ai players, alert consoles, drones and alarm monitor programs in the world - */ -/area/proc/atmosalert(danger_level, obj/source) - if(danger_level != atmosalm) - if (danger_level==2) - - for (var/item in GLOB.silicon_mobs) - var/mob/living/silicon/aiPlayer = item - aiPlayer.triggerAlarm("Atmosphere", src, cameras, source) - for (var/item in GLOB.alert_consoles) - var/obj/machinery/computer/station_alert/a = item - a.triggerAlarm("Atmosphere", src, cameras, source) - for (var/item in GLOB.drones_list) - var/mob/living/simple_animal/drone/D = item - D.triggerAlarm("Atmosphere", src, cameras, source) - for(var/item in GLOB.alarmdisplay) - var/datum/computer_file/program/alarm_monitor/p = item - p.triggerAlarm("Atmosphere", src, cameras, source) - - else if (src.atmosalm == 2) - for (var/item in GLOB.silicon_mobs) - var/mob/living/silicon/aiPlayer = item - aiPlayer.cancelAlarm("Atmosphere", src, source) - for (var/item in GLOB.alert_consoles) - var/obj/machinery/computer/station_alert/a = item - a.cancelAlarm("Atmosphere", src, source) - for (var/item in GLOB.drones_list) - var/mob/living/simple_animal/drone/D = item - D.cancelAlarm("Atmosphere", src, source) - for(var/item in GLOB.alarmdisplay) - var/datum/computer_file/program/alarm_monitor/p = item - p.cancelAlarm("Atmosphere", src, source) - - src.atmosalm = danger_level - return 1 - return 0 - -/** - * Try to close all the firedoors in the area - */ -/area/proc/ModifyFiredoors(opening) - if(firedoors) - firedoors_last_closed_on = world.time - for(var/FD in firedoors) - var/obj/machinery/door/firedoor/D = FD - var/cont = !D.welded - if(cont && opening) //don't open if adjacent area is on fire - for(var/I in D.affecting_areas) - var/area/A = I - if(A.fire) - cont = FALSE - break - if(cont && D.is_operational()) - if(D.operating) - D.nextstate = opening ? FIREDOOR_OPEN : FIREDOOR_CLOSED - else if(!(D.density ^ opening)) - INVOKE_ASYNC(D, (opening ? TYPE_PROC_REF(/obj/machinery/door/firedoor, open) : TYPE_PROC_REF(/obj/machinery/door/firedoor, close))) - -/** - * Generate an firealarm alert for this area - * - * Sends to all ai players, alert consoles, drones and alarm monitor programs in the world - * - * Also starts the area processing on SSobj - */ -/area/proc/firealert(obj/source) - if(always_unpowered == 1) //no fire alarms in space/asteroid - return - - if (!fire) - set_fire_alarm_effect() - ModifyFiredoors(FALSE) - for(var/item in firealarms) - var/obj/machinery/firealarm/F = item - F.update_icon() - - for (var/item in GLOB.alert_consoles) - var/obj/machinery/computer/station_alert/a = item - a.triggerAlarm("Fire", src, cameras, source) - for (var/item in GLOB.silicon_mobs) - var/mob/living/silicon/aiPlayer = item - aiPlayer.triggerAlarm("Fire", src, cameras, source) - for (var/item in GLOB.drones_list) - var/mob/living/simple_animal/drone/D = item - D.triggerAlarm("Fire", src, cameras, source) - for(var/item in GLOB.alarmdisplay) - var/datum/computer_file/program/alarm_monitor/p = item - p.triggerAlarm("Fire", src, cameras, source) - - START_PROCESSING(SSobj, src) - -/** - * Reset the firealarm alert for this area - * - * resets the alert sent to all ai players, alert consoles, drones and alarm monitor programs - * in the world - * - * Also cycles the icons of all firealarms and deregisters the area from processing on SSOBJ - */ -/area/proc/firereset(obj/source) - if (fire) - unset_fire_alarm_effects() - ModifyFiredoors(TRUE) - for(var/item in firealarms) - var/obj/machinery/firealarm/F = item - F.update_icon() - - for (var/item in GLOB.silicon_mobs) - var/mob/living/silicon/aiPlayer = item - aiPlayer.cancelAlarm("Fire", src, source) - for (var/item in GLOB.alert_consoles) - var/obj/machinery/computer/station_alert/a = item - a.cancelAlarm("Fire", src, source) - for (var/item in GLOB.drones_list) - var/mob/living/simple_animal/drone/D = item - D.cancelAlarm("Fire", src, source) - for(var/item in GLOB.alarmdisplay) - var/datum/computer_file/program/alarm_monitor/p = item - p.cancelAlarm("Fire", src, source) - - STOP_PROCESSING(SSobj, src) - -/** - * If 100 ticks has elapsed, toggle all the firedoors closed again - */ -/area/process() - if(firedoors_last_closed_on + 100 < world.time) //every 10 seconds - ModifyFiredoors(FALSE) - -/** - * Close and lock a door passed into this proc - * - * Does this need to exist on area? probably not - */ -/area/proc/close_and_lock_door(obj/machinery/door/DOOR) - set waitfor = FALSE - DOOR.close() - if(DOOR.density) - DOOR.lock() - -/** - * Raise a burglar alert for this area - * - * Close and locks all doors in the area and alerts silicon mobs of a break in - * - * Alarm auto resets after 600 ticks - */ -/area/proc/burglaralert(obj/trigger) - if(always_unpowered) //no burglar alarms in space/asteroid - return - - //Trigger alarm effect - set_fire_alarm_effect() - //Lockdown airlocks - for(var/obj/machinery/door/DOOR in src) - close_and_lock_door(DOOR) - - for (var/i in GLOB.silicon_mobs) - var/mob/living/silicon/SILICON = i - if(SILICON.triggerAlarm("Burglar", src, cameras, trigger)) - //Cancel silicon alert after 1 minute - addtimer(CALLBACK(SILICON, TYPE_PROC_REF(/mob/living/silicon, cancelAlarm),"Burglar",src,trigger), 600) - -/** - * Trigger the fire alarm visual affects in an area - * - * Updates the fire light on fire alarms in the area and sets all lights to emergency mode - */ -/area/proc/set_fire_alarm_effect() - fire = TRUE - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - for(var/alarm in firealarms) - var/obj/machinery/firealarm/F = alarm - F.update_fire_light(fire) - for(var/obj/machinery/light/L in src) - L.update() - -/** - * unset the fire alarm visual affects in an area - * - * Updates the fire light on fire alarms in the area and sets all lights to emergency mode - */ -/area/proc/unset_fire_alarm_effects() - fire = FALSE - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - for(var/alarm in firealarms) - var/obj/machinery/firealarm/F = alarm - F.update_fire_light(fire) - for(var/obj/machinery/light/L in src) - L.update() - /** * Update the icon state of the area * @@ -533,16 +302,6 @@ GLOBAL_LIST_EMPTY(teleportlocs) /area/space/powered(chan) //Nope.avi return 0 -/** - * Called when the area power status changes - * - * Updates the area icon and calls power change on all machinees in the area - */ -/area/proc/power_change() - for(var/obj/machinery/M in src) // for each machine in the area - M.power_change() // reverify power status (to update icons etc.) - update_icon() - /** * Return the usage of power per channel */ @@ -559,7 +318,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) used += used_light + used_equip + used_environ if(STATIC_EQUIP) used += static_equip - if(STATIC_LIGHT) + if(STATIC_LIGHT_A) used += static_light if(STATIC_ENVIRON) used += static_environ @@ -577,7 +336,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) switch(powerchannel) if(STATIC_EQUIP) static_equip += value - if(STATIC_LIGHT) + if(STATIC_LIGHT_A) static_light += value if(STATIC_ENVIRON) static_environ += value @@ -637,11 +396,6 @@ GLOBAL_LIST_EMPTY(teleportlocs) //Ambience if combat mode is off SSdroning.area_entered(src, living_arrived.client) SSdroning.play_loop(src, living_arrived.client) - var/found = FALSE - for(var/datum/weather/rain/R in SSweather.curweathers) - found = TRUE - if(found) - SSdroning.play_rain(src, living_arrived.client) // L.play_ambience(src) @@ -773,19 +527,9 @@ GLOBAL_LIST_EMPTY(teleportlocs) SSdroning.area_entered(src, boarder.client) boarder.client.update_ambience_pref() SSdroning.play_loop(src, boarder.client) - var/found = FALSE - for(var/datum/weather/rain/R in SSweather.curweathers) - found = TRUE - if(found) - SSdroning.play_rain(get_area(boarder.client), boarder.client) /area/reconnect_game(mob/living/boarder) . = ..() if(istype(boarder) && boarder.client) SSdroning.area_entered(src, boarder.client) SSdroning.play_loop(src, boarder.client) - var/found = FALSE - for(var/datum/weather/rain/R in SSweather.curweathers) - found = TRUE - if(found) - SSdroning.play_rain(get_area(boarder.client), boarder.client) diff --git a/code/game/area/areas/holodeck.dm b/code/game/area/areas/holodeck.dm deleted file mode 100644 index 875cd03812..0000000000 --- a/code/game/area/areas/holodeck.dm +++ /dev/null @@ -1,130 +0,0 @@ -/area/holodeck - name = "Holodeck" - icon_state = "Holodeck" - dynamic_lighting = DYNAMIC_LIGHTING_DISABLED - flags_1 = 0 - hidden = TRUE - - var/obj/machinery/computer/holodeck/linked - var/restricted = 0 // if true, program goes on emag list - -/* - Power tracking: Use the holodeck computer's power grid - Asserts are to avoid the inevitable infinite loops -*/ - -/area/holodeck/powered(chan) - if(!requires_power) - return 1 - if(always_unpowered) - return 0 - if(!linked) - return 0 - var/area/A = get_area(linked) - ASSERT(!istype(A, /area/holodeck)) - return A.powered(chan) - -/area/holodeck/usage(chan) - if(!linked) - return 0 - var/area/A = get_area(linked) - ASSERT(!istype(A, /area/holodeck)) - return A.usage(chan) - -/area/holodeck/addStaticPower(value, powerchannel) - if(!linked) - return - var/area/A = get_area(linked) - ASSERT(!istype(A, /area/holodeck)) - return A.addStaticPower(value,powerchannel) - -/area/holodeck/use_power(amount, chan) - if(!linked) - return 0 - var/area/A = get_area(linked) - ASSERT(!istype(A, /area/holodeck)) - return A.use_power(amount,chan) - - -/* - This is the standard holodeck. It is intended to allow you to - blow off steam by doing stupid things like laying down, throwing - spheres at holes, or bludgeoning people. -*/ -/area/holodeck/rec_center - name = "\improper Recreational Holodeck" - -/area/holodeck/rec_center/offline - name = "Holodeck - Offline" - -/area/holodeck/rec_center/court - name = "Holodeck - Empty Court" - -/area/holodeck/rec_center/dodgeball - name = "Holodeck - Dodgeball Court" - -/area/holodeck/rec_center/basketball - name = "Holodeck - Basketball Court" - -/area/holodeck/rec_center/thunderdome - name = "Holodeck - Thunderdome Arena" - -/area/holodeck/rec_center/beach - name = "Holodeck - Beach" - -/area/holodeck/rec_center/lounge - name = "Holodeck - Lounge" - -/area/holodeck/rec_center/pet_lounge - name = "Holodeck - Pet Park" - -/area/holodeck/rec_center/firingrange - name = "Holodeck - Firing Range" - -/area/holodeck/rec_center/school - name = "Holodeck - Anime School" - -/area/holodeck/rec_center/chapelcourt - name = "Holodeck - Chapel Courtroom" - -/area/holodeck/rec_center/spacechess - name = "Holodeck - Space Chess" - -/area/holodeck/rec_center/kobayashi - name = "Holodeck - Kobayashi Maru" - -/area/holodeck/rec_center/winterwonderland - name = "Holodeck - Winter Wonderland" - -/area/holodeck/rec_center/photobooth - name = "Holodeck - Photobooth" - -// Bad programs - -/area/holodeck/rec_center/medical - name = "Holodeck - Emergency Medical" - restricted = 1 - -/area/holodeck/rec_center/thunderdome1218 - name = "Holodeck - 1218 AD" - restricted = 1 - -/area/holodeck/rec_center/burn - name = "Holodeck - Atmospheric Burn Test" - restricted = 1 - -/area/holodeck/rec_center/wildlife - name = "Holodeck - Wildlife Simulation" - restricted = 1 - -/area/holodeck/rec_center/bunker - name = "Holodeck - Holdout Bunker" - restricted = 1 - -/area/holodeck/rec_center/anthophila - name = "Holodeck - Anthophila" - restricted = 1 - -/area/holodeck/rec_center/refuel - name = "Holodeck - Refueling Station" - restricted = 1 diff --git a/code/game/area/roguetownareas.dm b/code/game/area/roguetownareas.dm index aae82eb9e5..72c6e5c006 100644 --- a/code/game/area/roguetownareas.dm +++ b/code/game/area/roguetownareas.dm @@ -87,6 +87,12 @@ GLOBAL_LIST_INIT(roguetown_areas_typecache, typecacheof(/area/rogue/indoors/town name = "deception" icon_state = "deception" first_time_text = "THE CANYON OF DECEPTION" + ambush_types = list( + /turf/open/floor/rogue/dirt) + ambush_mobs = list( + /mob/living/simple_animal/hostile/retaliate/rogue/troll = 20, + /mob/living/carbon/human/species/skeleton/skilled/fighter = 15, + /mob/living/carbon/human/species/goblin/skilled/ambush/hell = 50) /area/rogue/outdoors/mountains/decap name = "mt decapitation" @@ -94,9 +100,9 @@ GLOBAL_LIST_INIT(roguetown_areas_typecache, typecacheof(/area/rogue/indoors/town ambush_types = list( /turf/open/floor/rogue/dirt) ambush_mobs = list( - /mob/living/simple_animal/hostile/retaliate/rogue/troll = 30, - /mob/living/carbon/human/species/skeleton/npc/ambush = 90, - /mob/living/carbon/human/species/goblin/npc/ambush/hell = 20) + /mob/living/simple_animal/hostile/retaliate/rogue/troll = 15, + /mob/living/carbon/human/species/skeleton/skilled/unarmed = 25, + /mob/living/carbon/human/species/skeleton/skilled/fighter = 25) droning_sound = 'sound/music/area/decap.ogg' droning_sound_dusk = null droning_sound_night = null @@ -118,15 +124,58 @@ GLOBAL_LIST_INIT(roguetown_areas_typecache, typecacheof(/area/rogue/indoors/town /turf/open/floor/rogue/grass) ambush_mobs = list( /mob/living/simple_animal/hostile/retaliate/rogue/wolf = 60, - /mob/living/carbon/human/species/goblin/npc/ambush/hell = 50, - /mob/living/carbon/human/species/goblin/npc/ambush/sea = 50, - /mob/living/carbon/human/species/goblin/npc/ambush = 50) + /mob/living/carbon/human/species/goblin/skilled/ambush = 10) first_time_text = "ROCKHILL BASIN" droning_sound = 'sound/music/area/field.ogg' droning_sound_dusk = 'sound/music/area/septimus.ogg' droning_sound_night = 'sound/music/area/sleeping.ogg' converted_type = /area/rogue/indoors/shelter/rtfield +/area/rogue/outdoors/rtfield/hamlet + name = "hamlet surroundings" + ambush_times = list("night","dusk") + ambush_types = list( + /turf/open/floor/rogue/grass/peril) + ambush_mobs = list( + /mob/living/simple_animal/hostile/retaliate/rogue/wolf = 60, + /mob/living/carbon/human/species/goblin/skilled/ambush = 5, + /mob/living/simple_animal/pet/cat/rogue/cabbit = 10) + first_time_text = "STONEHILL VALLEY" + +/area/rogue/outdoors/rtfield/hamlet/unsafe // just so there isnt unusable ambush spots placed in safe areas causing annoying screenshake but no effect + +/area/rogue/outdoors/rtfield/plague_district + ambush_mobs = list(/mob/living/carbon/human/species/human/northern/bum/skilled/madman = 50, /mob/living/simple_animal/hostile/rogue/skeleton = 50) + first_time_text = "PLAGUE DISTRICT" + color = "#d4da75" + name = "plague district" + ambush_types = list( + /turf/open/floor/rogue/cobblerock) + +/area/rogue/outdoors/rtfield/outlaw + ambush_mobs = list(/mob/living/carbon/human/species/human/northern/bum/skilled/outlaw = 50) + name = "outlaw hideout" + color = "#e9baa3" + first_time_text = null + +/area/rogue/outdoors/rtfield/boggish + ambush_mobs = list(/mob/living/carbon/human/species/goblin/skilled/ambush/sea = 50) + name = "bog approaches" + color = "#7db36e" + first_time_text = null + +/area/rogue/outdoors/rtfield/woodish + ambush_mobs = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 50) + name = "woods approaches" + color = "#7db36e" + first_time_text = null + +/area/rogue/outdoors/rtfield/spooky // haunts ambush and dug down hidden treasure + ambush_mobs = list(/mob/living/simple_animal/hostile/rogue/haunt = 50) + name = "spooky place" + color = "#9294d3" + first_time_text = null + /area/rogue/indoors/shelter/rtfield icon_state = "rtfield" droning_sound = 'sound/music/area/field.ogg' @@ -149,9 +198,9 @@ GLOBAL_LIST_INIT(roguetown_areas_typecache, typecacheof(/area/rogue/indoors/town /turf/open/floor/rogue/grass) ambush_mobs = list( /mob/living/simple_animal/hostile/retaliate/rogue/wolf = 60, - /mob/living/simple_animal/hostile/retaliate/rogue/troll = 10, - /mob/living/carbon/human/species/goblin/npc/ambush = 45, - /mob/living/simple_animal/hostile/retaliate/rogue/mole = 25) + /mob/living/simple_animal/hostile/retaliate/rogue/troll = 5, + /mob/living/carbon/human/species/goblin/skilled/ambush = 20, + /mob/living/simple_animal/hostile/retaliate/rogue/mole = 10) first_time_text = "THE MURDERWOOD" converted_type = /area/rogue/indoors/shelter/woods @@ -174,7 +223,19 @@ GLOBAL_LIST_INIT(roguetown_areas_typecache, typecacheof(/area/rogue/indoors/town soundenv = 15 converted_type = /area/rogue/indoors/shelter/woods - +/area/rogue/outdoors/woods/haunted + ambush_types = list( + /turf/open/floor/rogue/grass) + ambush_mobs = list( + /mob/living/simple_animal/hostile/retaliate/rogue/wolf = 20, + /mob/living/simple_animal/hostile/retaliate/rogue/spider/colony = 10, + /mob/living/simple_animal/hostile/rogue/haunt = 5, + /mob/living/simple_animal/hostile/rogue/skeleton/axe = 10, + /mob/living/simple_animal/hostile/rogue/skeleton/bow = 5, + /mob/living/simple_animal/hostile/rogue/skeleton/spear = 5, + /mob/living/simple_animal/hostile/retaliate/rogue/mole = 5) + first_time_text = "THE HAUNTED FOREST" + converted_type = /area/rogue/indoors/shelter/woods /area/rogue/outdoors/river name = "river" @@ -205,8 +266,8 @@ GLOBAL_LIST_INIT(roguetown_areas_typecache, typecacheof(/area/rogue/indoors/town ambush_mobs = list( /mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 20, /mob/living/simple_animal/hostile/retaliate/rogue/spider = 80, - /mob/living/carbon/human/species/goblin/npc/ambush/sea = 50, - /mob/living/simple_animal/hostile/retaliate/rogue/trollbog = 35) //Bogbugs bugged bigtime, so removed for now. + /mob/living/carbon/human/species/goblin/skilled/ambush/sea = 20, + /mob/living/simple_animal/hostile/retaliate/rogue/trollbog = 30) first_time_text = "THE TERRORBOG" converted_type = /area/rogue/indoors/shelter/bog @@ -260,8 +321,9 @@ GLOBAL_LIST_INIT(roguetown_areas_typecache, typecacheof(/area/rogue/indoors/town /turf/open/floor/rogue/dirt) ambush_mobs = list( /mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, - /mob/living/carbon/human/species/goblin/npc/ambush/cave = 20, - /mob/living/carbon/human/species/skeleton/npc/ambush = 10) + /mob/living/carbon/human/species/goblin/skilled/ambush/cave = 20, + /mob/living/carbon/human/species/skeleton/skilled/unarmed = 5, + /mob/living/carbon/human/species/skeleton/skilled/fighter = 5) converted_type = /area/rogue/outdoors/caves /area/rogue/outdoors/caves @@ -270,6 +332,10 @@ GLOBAL_LIST_INIT(roguetown_areas_typecache, typecacheof(/area/rogue/indoors/town droning_sound_dusk = null droning_sound_night = null +/area/rogue/under/town/caverogue/saltmine + name = "salt mine" + first_time_text = "Salt Mine" + /area/rogue/under/cavewet name = "cavewet" icon_state = "cavewet" @@ -285,11 +351,21 @@ GLOBAL_LIST_INIT(roguetown_areas_typecache, typecacheof(/area/rogue/indoors/town ambush_types = list( /turf/open/floor/rogue/dirt) ambush_mobs = list( - /mob/living/carbon/human/species/skeleton/npc/ambush = 10, + /mob/living/carbon/human/species/skeleton/skilled/unarmed = 5, + /mob/living/carbon/human/species/skeleton/skilled/fighter = 5, /mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, - /mob/living/carbon/human/species/goblin/npc/sea = 20) + /mob/living/carbon/human/species/goblin/skilled/ambush/sea = 20) converted_type = /area/rogue/outdoors/caves +/area/rogue/under/cave/abandoned_mine + name = "abandoned mine" + first_time_text = "Abandoned Mine" + ambush_types = list( + /turf/open/floor/rogue/dirt) + ambush_mobs = list( + /mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, + /mob/living/carbon/human/species/goblin/skilled/ambush/cave = 20) + /area/rogue/under/cave/spider icon_state = "spider" first_time_text = "ARAIGNÉE" @@ -300,6 +376,40 @@ GLOBAL_LIST_INIT(roguetown_areas_typecache, typecacheof(/area/rogue/indoors/town droning_sound_night = null converted_type = /area/rogue/outdoors/spidercave +/area/rogue/under/catacombs + name = "catacombs" + icon_state = "cavewet" + first_time_text = "The Catacombs" + ambientsounds = AMB_CAVEWATER + ambientnight = AMB_CAVEWATER + spookysounds = SPOOKY_CAVE + spookynight = SPOOKY_CAVE + droning_sound = 'sound/music/area/caves.ogg' + droning_sound_dusk = null + droning_sound_night = null + ambush_times = list("night","dawn","dusk","day") + ambush_types = list( + /turf/open/water/swamp) + ambush_mobs = list( + /mob/living/carbon/human/species/skeleton/skilled/unarmed = 30, + /mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 10) + converted_type = /area/rogue/outdoors/caves + +/area/rogue/under/catacombs/dwarfoutpost + name = "underrock outpost" + first_time_text = "Underrock Outpost" + ambush_types = list( + /turf/open/water/swamp) + ambush_mobs = list( + /mob/living/simple_animal/hostile/retaliate/rogue/lamia = 30, + /mob/living/simple_animal/hostile/retaliate/rogue/headless = 20) + +/area/rogue/under/catacombs/dwarfoutpost/orcy + ambush_types = list( + /turf/open/floor/rogue/blocks/newstone/alt) + ambush_mobs = list( + /mob/living/carbon/human/species/orc/skilled/savage = 50) + /area/rogue/outdoors/spidercave icon_state = "spidercave" droning_sound = 'sound/music/area/spidercave.ogg' @@ -336,7 +446,7 @@ GLOBAL_LIST_INIT(roguetown_areas_typecache, typecacheof(/area/rogue/indoors/town ambush_mobs = list( /mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 30, /mob/living/carbon/human/species/skeleton/npc/ambush = 10, - /mob/living/carbon/human/species/goblin/npc/hell = 20) + /mob/living/carbon/human/species/goblin/skilled/ambush/cave = 20) droning_sound = 'sound/music/area/decap.ogg' droning_sound_dusk = null droning_sound_night = null @@ -358,7 +468,6 @@ GLOBAL_LIST_INIT(roguetown_areas_typecache, typecacheof(/area/rogue/indoors/town - ///// TOWN AREAS ////// /area/rogue/indoors/town @@ -375,6 +484,12 @@ GLOBAL_LIST_INIT(roguetown_areas_typecache, typecacheof(/area/rogue/indoors/town droning_sound_dusk = null // droning_sound_night = 'sound/music/area/night.ogg' +/area/rogue/outdoors/exposed/town/hamlet + icon_state = "town" + droning_sound = 'sound/music/area/towngen.ogg' + droning_sound_dusk = null + first_time_text = "STONEHILL HAMLET" + /area/rogue/indoors/town/manor name = "Manor" icon_state = "manor" @@ -384,6 +499,9 @@ GLOBAL_LIST_INIT(roguetown_areas_typecache, typecacheof(/area/rogue/indoors/town converted_type = /area/rogue/outdoors/exposed/manorgarri first_time_text = "THE KEEP OF ROCKHILL" +/area/rogue/indoors/town/manor/hamlet + first_time_text = "STONEHILL CASTLE" + /area/rogue/outdoors/exposed/manorgarri icon_state = "manorgarri" droning_sound = 'sound/music/area/manor.ogg' @@ -425,10 +543,16 @@ GLOBAL_LIST_INIT(roguetown_areas_typecache, typecacheof(/area/rogue/indoors/town droning_sound_dusk = null droning_sound_night = null converted_type = /area/rogue/outdoors/exposed/bath +/area/rogue/indoors/town/bath/redhouse + droning_sound = 'modular/Mapping/sound/Fulminate.ogg' + converted_type = /area/rogue/outdoors/exposed/bath/redhouse /area/rogue/outdoors/exposed/bath icon_state = "bath" droning_sound = 'sound/music/area/bath.ogg' +/area/rogue/outdoors/exposed/bath/redhouse + droning_sound = 'modular/Mapping/sound/Fulminate.ogg' + /area/rogue/indoors/town/garrison name = "Garrison" @@ -459,12 +583,19 @@ GLOBAL_LIST_INIT(roguetown_areas_typecache, typecacheof(/area/rogue/indoors/town droning_sound_dusk = null droning_sound_night = 'sound/music/jukeboxes/tavern2.ogg' converted_type = /area/rogue/outdoors/exposed/tavern +/area/rogue/indoors/town/tavern/saiga + droning_sound = 'modular/Mapping/sound/Folia1490.ogg' + droning_sound_night = 'modular/Mapping/sound/LeTourdion.ogg' + converted_type = /area/rogue/outdoors/exposed/tavern/saiga /area/rogue/outdoors/exposed/tavern icon_state = "tavern" droning_sound = 'sound/music/jukeboxes/tavern1.ogg' droning_sound_dusk = null droning_sound_night = 'sound/music/jukeboxes/tavern2.ogg' +/area/rogue/outdoors/exposed/tavern/saiga + droning_sound = 'modular/Mapping/sound/Folia1490.ogg' + droning_sound_night = 'modular/Mapping/sound/LeTourdion.ogg' /area/rogue/indoors/town/church name = "church" @@ -524,6 +655,10 @@ GLOBAL_LIST_INIT(roguetown_areas_typecache, typecacheof(/area/rogue/indoors/town droning_sound_dusk = null droning_sound_night = null +/area/rogue/indoors/town/tailor + name = "tailorshop" + icon_state = "tavern" + // so you can teleport to the farm /area/rogue/indoors/soilsons name = "soilsons" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 66783649e4..f3be77eee9 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -90,6 +90,9 @@ var/list/alternate_appearances + ///AI controller that controls this atom. type on init, then turned into an instance during runtime + var/datum/ai_controller/ai_controller + /** * Called when an atom is created in byond (built in engine proc) * @@ -160,7 +163,7 @@ if(color) add_atom_colour(color, FIXED_COLOUR_PRIORITY) - if (light_power && light_range) + if (light_system == STATIC_LIGHT && light_power && (light_inner_range || light_outer_range)) update_light() if (opacity && isturf(loc)) @@ -178,6 +181,7 @@ set_custom_materials(temp_list) ComponentInitialize() + InitializeAIController() return INITIALIZE_HINT_NORMAL @@ -225,6 +229,7 @@ LAZYCLEARLIST(priority_overlays) QDEL_NULL(light) + QDEL_NULL(ai_controller) return ..() @@ -429,8 +434,6 @@ */ /atom/proc/emp_act(severity) var/protection = SEND_SIGNAL(src, COMSIG_ATOM_EMP_ACT, severity) - if(!(protection & EMP_PROTECT_WIRES) && istype(wires)) - wires.emp_pulse() return protection // Pass the protection value collected here upwards /** @@ -596,6 +599,7 @@ * throw lots of items around - singularity being a notable example) */ /atom/proc/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) +// SEND_SIGNAL(src, COMSIG_ATOM_HITBY, AM, skipcatch, hitpush, blocked, throwingdatum, damage_type) TO DO enable when damage type fixed I guess if(density && !has_gravity(AM)) //thrown stuff bounces off dense stuff in no grav, unless the thrown stuff ends up inside what it hit(embedding, bola, etc...). addtimer(CALLBACK(src, PROC_REF(hitby_react), AM), 2) @@ -674,8 +678,7 @@ * * Default behaviour is to send COMSIG_ATOM_SING_PULL and return */ -/atom/proc/singularity_pull(obj/singularity/S, current_size) - SEND_SIGNAL(src, COMSIG_ATOM_SING_PULL, S, current_size) +/atom/proc/singularity_pull() /** @@ -710,21 +713,6 @@ /atom/proc/narsie_act() SEND_SIGNAL(src, COMSIG_ATOM_NARSIE_ACT) - -///Return the values you get when an RCD eats you? -/atom/proc/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - return FALSE - - -/** - * Respond to an RCD acting on our item - * - * Default behaviour is to send COMSIG_ATOM_RCD_ACT and return FALSE - */ -/atom/proc/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) - SEND_SIGNAL(src, COMSIG_ATOM_RCD_ACT, user, the_rcd, passed_mode) - return FALSE - /** * Implement the behaviour for when a user click drags a storage object to your atom * @@ -815,10 +803,6 @@ SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir) dir = newdir -///Handle melee attack by a mech -/atom/proc/mech_melee_attack(obj/mecha/M) - return - /** * Called when the atom log's in or out * @@ -914,6 +898,7 @@ VV_DROPDOWN_OPTION(VV_HK_ADD_REAGENT, "Add Reagent") VV_DROPDOWN_OPTION(VV_HK_TRIGGER_EMP, "EMP Pulse") VV_DROPDOWN_OPTION(VV_HK_TRIGGER_EXPLOSION, "Explosion") + VV_DROPDOWN_OPTION(VV_HK_ADD_AI, "Add AI controller") /atom/vv_do_topic(list/href_list) . = ..() @@ -952,6 +937,15 @@ message_admins("[key_name(usr)] has added [amount] units of [chosen_id] to [src]") if(href_list[VV_HK_TRIGGER_EXPLOSION] && check_rights(R_FUN)) usr.client.cmd_admin_explosion(src) + + if(href_list[VV_HK_ADD_AI]) + if(!check_rights(R_VAREDIT)) + return + var/result = input(usr, "Choose the AI controller to apply to this atom WARNING: Not all AI works on all atoms.", "AI controller") as null|anything in subtypesof(/datum/ai_controller) + if(!result) + return + ai_controller = new result(src) + if(href_list[VV_HK_TRIGGER_EMP] && check_rights(R_FUN)) usr.client.cmd_admin_emp(src) if(href_list[VV_HK_MODIFY_TRANSFORM] && check_rights(R_VAREDIT)) @@ -1274,11 +1268,13 @@ var/area/A = get_area(T) if(A.has_gravity) // Areas which always has gravity return A.has_gravity - else - // There's a gravity generator on our z level - if(GLOB.gravity_generators["[T.z]"]) - var/max_grav = 0 - for(var/obj/machinery/gravity_generator/main/G in GLOB.gravity_generators["[T.z]"]) - max_grav = max(G.setting,max_grav) - return max_grav return SSmapping.level_trait(T.z, ZTRAIT_GRAVITY) + +/** +* Instantiates the AI controller of this atom. Override this if you want to assign variables first. +* +* This will work fine without manually passing arguments. ++*/ +/atom/proc/InitializeAIController() + if(ai_controller) + ai_controller = new ai_controller(src) diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 450044a522..f8cc1beac3 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -69,13 +69,6 @@ /datum/atom_hud/ai_detector hud_icons = list(AI_DETECT_HUD) -/datum/atom_hud/ai_detector/add_hud_to(mob/M) - ..() - if(M && (hudusers.len == 1)) - for(var/V in GLOB.aiEyes) - var/mob/camera/aiEye/E = V - E.update_ai_detect_hud() - /* MED/SEC/DIAG HUD HOOKS */ /* @@ -183,9 +176,7 @@ Medical HUD! Basic mode needs suit sensors on. var/icon/I = icon(icon, icon_state, dir) var/virus_threat = check_virus() holder.pixel_y = I.Height() - world.icon_size - if(HAS_TRAIT(src, TRAIT_XENO_HOST)) - holder.icon_state = "hudxeno" - else if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH))) + if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH))) if(tod) var/tdelta = round(world.time - timeofdeath) if(tdelta < (DEFIB_TIME_LIMIT * 10)) @@ -276,14 +267,6 @@ Security HUDs! Basic mode shows only the job. Diagnostic HUDs! ************************************************/ -/mob/living/proc/hud_set_nanite_indicator() - var/image/holder = hud_list[NANITE_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - holder.icon_state = null - if(src in SSnanites.nanite_monitored_mobs) - holder.icon_state = "nanite_ping" - //For Diag health and cell bars! /proc/RoundDiagBar(value) switch(value * 100) @@ -301,152 +284,3 @@ Diagnostic HUDs! return "crit" else return "dead" - -//Sillycone hooks -/mob/living/silicon/proc/diag_hud_set_health() - var/image/holder = hud_list[DIAG_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - if(stat == DEAD) - holder.icon_state = "huddiagdead" - else - holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]" - -/mob/living/silicon/proc/diag_hud_set_status() - var/image/holder = hud_list[DIAG_STAT_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - switch(stat) - if(CONSCIOUS) - holder.icon_state = "hudstat" - if(UNCONSCIOUS) - holder.icon_state = "hudoffline" - else - holder.icon_state = "huddead2" - -//Borgie battery tracking! -/mob/living/silicon/robot/proc/diag_hud_set_borgcell() - var/image/holder = hud_list[DIAG_BATT_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - if(cell) - var/chargelvl = (cell.charge/cell.maxcharge) - holder.icon_state = "hudbatt[RoundDiagBar(chargelvl)]" - else - holder.icon_state = "hudnobatt" - -//borg-AI shell tracking -/mob/living/silicon/robot/proc/diag_hud_set_aishell() //Shows tracking beacons on the mech - var/image/holder = hud_list[DIAG_TRACK_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - if(!shell) //Not an AI shell - holder.icon_state = null - else if(deployed) //AI shell in use by an AI - holder.icon_state = "hudtrackingai" - else //Empty AI shell - holder.icon_state = "hudtracking" - -//AI side tracking of AI shell control -/mob/living/silicon/ai/proc/diag_hud_set_deployed() //Shows tracking beacons on the mech - var/image/holder = hud_list[DIAG_TRACK_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - if(!deployed_shell) - holder.icon_state = null - else //AI is currently controlling a shell - holder.icon_state = "hudtrackingai" - -/*~~~~~~~~~~~~~~~~~~~~ - BIG STOMPY MECHS -~~~~~~~~~~~~~~~~~~~~~*/ -/obj/mecha/proc/diag_hud_set_mechhealth() - var/image/holder = hud_list[DIAG_MECH_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - holder.icon_state = "huddiag[RoundDiagBar(obj_integrity/max_integrity)]" - - -/obj/mecha/proc/diag_hud_set_mechcell() - var/image/holder = hud_list[DIAG_BATT_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - if(cell) - var/chargelvl = cell.charge/cell.maxcharge - holder.icon_state = "hudbatt[RoundDiagBar(chargelvl)]" - else - holder.icon_state = "hudnobatt" - - -/obj/mecha/proc/diag_hud_set_mechstat() - var/image/holder = hud_list[DIAG_STAT_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - holder.icon_state = null - if(internal_damage) - holder.icon_state = "hudwarn" - -/obj/mecha/proc/diag_hud_set_mechtracking() //Shows tracking beacons on the mech - var/image/holder = hud_list[DIAG_TRACK_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - var/new_icon_state //This var exists so that the holder's icon state is set only once in the event of multiple mech beacons. - for(var/obj/item/mecha_parts/mecha_tracking/T in trackers) - if(T.ai_beacon) //Beacon with AI uplink - new_icon_state = "hudtrackingai" - break //Immediately terminate upon finding an AI beacon to ensure it is always shown over the normal one, as mechs can have several trackers. - else - new_icon_state = "hudtracking" - holder.icon_state = new_icon_state - -/*~~~~~~~~~ - Bots! -~~~~~~~~~~*/ -/mob/living/simple_animal/bot/proc/diag_hud_set_bothealth() - var/image/holder = hud_list[DIAG_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]" - -/mob/living/simple_animal/bot/proc/diag_hud_set_botstat() //On (With wireless on or off), Off, EMP'ed - var/image/holder = hud_list[DIAG_STAT_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - if(on) - holder.icon_state = "hudstat" - else if(stat) //Generally EMP causes this - holder.icon_state = "hudoffline" - else //Bot is off - holder.icon_state = "huddead2" - -/mob/living/simple_animal/bot/proc/diag_hud_set_botmode() //Shows a bot's current operation - var/image/holder = hud_list[DIAG_BOT_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - if(client) //If the bot is player controlled, it will not be following mode logic! - holder.icon_state = "hudsentient" - return - - switch(mode) - if(BOT_SUMMON, BOT_RESPONDING) //Responding to PDA or AI summons - holder.icon_state = "hudcalled" - if(BOT_CLEANING, BOT_REPAIRING, BOT_HEALING) //Cleanbot cleaning, Floorbot fixing, or Medibot Healing - holder.icon_state = "hudworking" - if(BOT_PATROL, BOT_START_PATROL) //Patrol mode - holder.icon_state = "hudpatrol" - if(BOT_PREP_ARREST, BOT_ARREST, BOT_HUNT) //STOP RIGHT THERE, CRIMINAL SCUM! - holder.icon_state = "hudalert" - if(BOT_MOVING, BOT_DELIVER, BOT_GO_HOME, BOT_NAV) //Moving to target for normal bots, moving to deliver or go home for MULES. - holder.icon_state = "hudmove" - else - holder.icon_state = "" - -/*~~~~~~~~~~~~ - Airlocks! -~~~~~~~~~~~~~*/ -/obj/machinery/door/airlock/proc/diag_hud_set_electrified() - var/image/holder = hud_list[DIAG_AIRLOCK_HUD] - if(secondsElectrified != MACHINE_NOT_ELECTRIFIED) - holder.icon_state = "electrified" - else - holder.icon_state = "" diff --git a/code/game/gamemodes/brother/traitor_bro.dm b/code/game/gamemodes/brother/traitor_bro.dm deleted file mode 100644 index b4557fa05f..0000000000 --- a/code/game/gamemodes/brother/traitor_bro.dm +++ /dev/null @@ -1,67 +0,0 @@ -/datum/game_mode - var/list/datum/mind/brothers = list() - var/list/datum/team/brother_team/brother_teams = list() - -/datum/game_mode/traitor/bros - name = "traitor+brothers" - config_tag = "traitorbro" - restricted_jobs = list("AI", "Cyborg") - - announce_span = "danger" - announce_text = "There are Syndicate agents and Blood Brothers on the station!\n\ - Traitors: Accomplish your objectives.\n\ - Blood Brothers: Accomplish your objectives.\n\ - Crew: Do not let the traitors or brothers succeed!" - - var/list/datum/team/brother_team/pre_brother_teams = list() - var/const/team_amount = 2 //hard limit on brother teams if scaling is turned off - var/const/min_team_size = 2 - traitors_required = FALSE //Only teams are possible - -/datum/game_mode/traitor/bros/pre_setup() - if(CONFIG_GET(flag/protect_roles_from_antagonist)) - restricted_jobs += protected_jobs - if(CONFIG_GET(flag/protect_assistant_from_antagonist)) - restricted_jobs += "Assistant" - - var/list/datum/mind/possible_brothers = get_players_for_role(ROLE_BROTHER) - - var/num_teams = team_amount - var/bsc = CONFIG_GET(number/brother_scaling_coeff) - if(bsc) - num_teams = max(1, round(num_players() / bsc)) - - for(var/j = 1 to num_teams) - if(possible_brothers.len < min_team_size || antag_candidates.len <= required_enemies) - break - var/datum/team/brother_team/team = new - var/team_size = prob(10) ? min(3, possible_brothers.len) : 2 - for(var/k = 1 to team_size) - var/datum/mind/bro = antag_pick(possible_brothers) - possible_brothers -= bro - antag_candidates -= bro - team.add_member(bro) - bro.special_role = "brother" - bro.restricted_roles = restricted_jobs - log_game("[key_name(bro)] has been selected as a Brother") - pre_brother_teams += team - . = ..() - if(.) //To ensure the game mode is going ahead - for(var/teams in pre_brother_teams) - for(var/antag in teams) - GLOB.pre_setup_antags += antag - return - -/datum/game_mode/traitor/bros/post_setup() - for(var/datum/team/brother_team/team in pre_brother_teams) - team.pick_meeting_area() - team.forge_brother_objectives() - for(var/datum/mind/M in team.members) - M.add_antag_datum(/datum/antagonist/brother, team) - GLOB.pre_setup_antags -= M - team.update_name() - brother_teams += pre_brother_teams - return ..() - -/datum/game_mode/traitor/bros/generate_report() - return "It's Syndicate recruiting season. Be alert for potential Syndicate infiltrators, but also watch out for disgruntled employees trying to defect. Unlike Nanotrasen, the Syndicate prides itself in teamwork and will only recruit pairs that share a brotherly trust." diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm deleted file mode 100644 index ec5d39f7c2..0000000000 --- a/code/game/gamemodes/changeling/changeling.dm +++ /dev/null @@ -1,140 +0,0 @@ -GLOBAL_LIST_INIT(possible_changeling_IDs, list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega")) -GLOBAL_LIST_INIT(slots, list("head", "wear_mask", "back", "wear_armor", "wear_pants", "shoes", "belt", "gloves", "glasses", "ears", "wear_ring", "wear_wrists", "s_store")) -GLOBAL_LIST_INIT(slot2slot, list("head" = SLOT_HEAD, "wear_mask" = SLOT_WEAR_MASK, "neck" = SLOT_NECK, "back" = SLOT_BACK, "wear_armor" = SLOT_ARMOR, "wear_pants" = SLOT_PANTS, "shoes" = SLOT_SHOES, "belt" = SLOT_BELT, "gloves" = SLOT_GLOVES, "glasses" = SLOT_GLASSES, "ears" = SLOT_HEAD, "wear_ring" = SLOT_RING, "s_store" = SLOT_S_STORE)) -GLOBAL_LIST_INIT(slot2type, list("head" = /obj/item/clothing/head/changeling, "wear_mask" = /obj/item/clothing/mask/changeling, "back" = /obj/item/changeling, "wear_armor" = /obj/item/clothing/suit/changeling, "wear_pants" = /obj/item/clothing/under/changeling, "shoes" = /obj/item/clothing/shoes/changeling, "belt" = /obj/item/changeling, "gloves" = /obj/item/clothing/gloves/changeling, "glasses" = /obj/item/clothing/glasses/changeling, "ears" = /obj/item/changeling, "wear_ring" = /obj/item/changeling, "s_store" = /obj/item/changeling)) -GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our this objective to all lings - - -/datum/game_mode/changeling - name = "changeling" - config_tag = "changeling" - report_type = "changeling" - antag_flag = ROLE_CHANGELING - false_report_weight = 10 - restricted_jobs = list("AI", "Cyborg") - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain") - required_players = 15 - required_enemies = 1 - recommended_enemies = 4 - reroll_friendly = 1 - - announce_span = "green" - announce_text = "Alien changelings have infiltrated the crew!\n\ - Changelings: Accomplish the objectives assigned to you.\n\ - Crew: Root out and eliminate the changeling menace." - - var/const/changeling_amount = 4 //hard limit on changelings if scaling is turned off - var/list/changelings = list() - -/datum/game_mode/changeling/pre_setup() - - if(CONFIG_GET(flag/protect_roles_from_antagonist)) - restricted_jobs += protected_jobs - - if(CONFIG_GET(flag/protect_assistant_from_antagonist)) - restricted_jobs += "Assistant" - - var/num_changelings = 1 - - var/csc = CONFIG_GET(number/changeling_scaling_coeff) - if(csc) - num_changelings = max(1, min(round(num_players() / (csc * 2)) + 2, round(num_players() / csc))) - else - num_changelings = max(1, min(num_players(), changeling_amount)) - - if(antag_candidates.len>0) - for(var/i = 0, i < num_changelings, i++) - if(!antag_candidates.len) - break - var/datum/mind/changeling = antag_pick(antag_candidates) - antag_candidates -= changeling - changelings += changeling - changeling.special_role = ROLE_CHANGELING - changeling.restricted_roles = restricted_jobs - GLOB.pre_setup_antags += changeling - return TRUE - else - setup_error = "Not enough changeling candidates" - return FALSE - -/datum/game_mode/changeling/post_setup() - //Decide if it's ok for the lings to have a team objective - //And then set it up to be handed out in forge_changeling_objectives - var/list/team_objectives = subtypesof(/datum/objective/changeling_team_objective) - var/list/possible_team_objectives = list() - for(var/T in team_objectives) - var/datum/objective/changeling_team_objective/CTO = T - - if(changelings.len >= initial(CTO.min_lings)) - possible_team_objectives += T - - if(possible_team_objectives.len && prob(20*changelings.len)) - GLOB.changeling_team_objective_type = pick(possible_team_objectives) - - for(var/datum/mind/changeling in changelings) - log_game("[key_name(changeling)] has been selected as a changeling") - var/datum/antagonist/changeling/new_antag = new() - new_antag.team_mode = TRUE - changeling.add_antag_datum(new_antag) - GLOB.pre_setup_antags -= changeling - ..() - -/datum/game_mode/changeling/make_antag_chance(mob/living/carbon/human/character) //Assigns changeling to latejoiners - var/csc = CONFIG_GET(number/changeling_scaling_coeff) - var/changelingcap = min(round(GLOB.joined_player_list.len / (csc * 2)) + 2, round(GLOB.joined_player_list.len / csc)) - if(changelings.len >= changelingcap) //Caps number of latejoin antagonists - return - if(changelings.len <= (changelingcap - 2) || prob(100 - (csc * 2))) - if(ROLE_CHANGELING in character.client.prefs.be_special) - if(!is_banned_from(character.ckey, list(ROLE_CHANGELING, ROLE_SYNDICATE)) && !QDELETED(character)) - if(age_check(character.client)) - if(!(character.job in restricted_jobs)) - character.mind.make_Changeling() - changelings += character.mind - -/datum/game_mode/changeling/generate_report() - return "The Gorlex Marauders have announced the successful raid and destruction of Central Command containment ship #S-[rand(1111, 9999)]. This ship housed only a single prisoner - \ - codenamed \"Thing\", and it was highly adaptive and extremely dangerous. We have reason to believe that the Thing has allied with the Syndicate, and you should note that likelihood \ - of the Thing being sent to a station in this sector is highly likely. It may be in the guise of any crew member. Trust nobody - suspect everybody. Do not announce this to the crew, \ - as paranoia may spread and inhibit workplace efficiency." - -/proc/changeling_transform(mob/living/carbon/human/user, datum/changelingprofile/chosen_prof) - var/datum/dna/chosen_dna = chosen_prof.dna - user.real_name = chosen_prof.name - user.underwear = chosen_prof.underwear - user.undershirt = chosen_prof.undershirt - user.socks = chosen_prof.socks - - chosen_dna.transfer_identity(user, 1) - user.updateappearance(mutcolor_update=1) - user.update_body() - user.domutcheck() - - //vars hackery. not pretty, but better than the alternative. - for(var/slot in GLOB.slots) - if(istype(user.vars[slot], GLOB.slot2type[slot]) && !(chosen_prof.exists_list[slot])) //remove unnecessary flesh items - qdel(user.vars[slot]) - continue - - if((user.vars[slot] && !istype(user.vars[slot], GLOB.slot2type[slot])) || !(chosen_prof.exists_list[slot])) - continue - - var/obj/item/C - var/equip = 0 - if(!user.vars[slot]) - var/thetype = GLOB.slot2type[slot] - equip = 1 - C = new thetype(user) - - else if(istype(user.vars[slot], GLOB.slot2type[slot])) - C = user.vars[slot] - - C.appearance = chosen_prof.appearance_list[slot] - C.name = chosen_prof.name_list[slot] - C.flags_cover = chosen_prof.flags_cover_list[slot] - C.item_state = chosen_prof.item_state_list[slot] - C.mob_overlay_icon = chosen_prof.mob_overlay_icon_list[slot] - if(equip) - user.equip_to_slot_or_del(C, GLOB.slot2slot[slot]) - - user.regenerate_icons() diff --git a/code/game/gamemodes/changeling/traitor_chan.dm b/code/game/gamemodes/changeling/traitor_chan.dm deleted file mode 100644 index 3bfb22181c..0000000000 --- a/code/game/gamemodes/changeling/traitor_chan.dm +++ /dev/null @@ -1,88 +0,0 @@ -/datum/game_mode/traitor/changeling - name = "traitor+changeling" - config_tag = "traitorchan" - report_type = "traitorchan" - false_report_weight = 10 - traitors_possible = 3 //hard limit on traitors if scaling is turned off - restricted_jobs = list("AI", "Cyborg") - required_players = 25 - required_enemies = 1 // how many of each type are required - recommended_enemies = 3 - reroll_friendly = 1 - announce_span = "Traitors and Changelings" - announce_text = "There are alien creatures on the station along with some syndicate operatives out for their own gain! Do not let the changelings or the traitors succeed!" - - var/list/possible_changelings = list() - var/list/changelings = list() - var/const/changeling_amount = 1 //hard limit on changelings if scaling is turned off - -/datum/game_mode/traitor/changeling/can_start() - if(!..()) - return 0 - possible_changelings = get_players_for_role(ROLE_CHANGELING) - if(possible_changelings.len < required_enemies) - return 0 - return 1 - -/datum/game_mode/traitor/changeling/pre_setup() - if(CONFIG_GET(flag/protect_roles_from_antagonist)) - restricted_jobs += protected_jobs - - if(CONFIG_GET(flag/protect_assistant_from_antagonist)) - restricted_jobs += "Assistant" - - var/list/datum/mind/possible_changelings = get_players_for_role(ROLE_CHANGELING) - - var/num_changelings = 1 - - var/csc = CONFIG_GET(number/changeling_scaling_coeff) - if(csc) - num_changelings = max(1, min(round(num_players() / (csc * 4)) + 2, round(num_players() / (csc * 2)))) - else - num_changelings = max(1, min(num_players(), changeling_amount/2)) - - if(possible_changelings.len>0) - for(var/j = 0, j < num_changelings, j++) - if(!possible_changelings.len) - break - var/datum/mind/changeling = antag_pick(possible_changelings) - antag_candidates -= changeling - possible_changelings -= changeling - changeling.special_role = ROLE_CHANGELING - changelings += changeling - changeling.restricted_roles = restricted_jobs - . = ..() - if(.) //To ensure the game mode is going ahead - for(var/antag in changelings) - GLOB.pre_setup_antags += antag - return - else - return FALSE - -/datum/game_mode/traitor/changeling/post_setup() - for(var/datum/mind/changeling in changelings) - changeling.add_antag_datum(/datum/antagonist/changeling) - GLOB.pre_setup_antags -= changeling - return ..() - -/datum/game_mode/traitor/changeling/make_antag_chance(mob/living/carbon/human/character) //Assigns changeling to latejoiners - var/csc = CONFIG_GET(number/changeling_scaling_coeff) - var/changelingcap = min( round(GLOB.joined_player_list.len / (csc * 4)) + 2, round(GLOB.joined_player_list.len / (csc * 2))) - if(changelings.len >= changelingcap) //Caps number of latejoin antagonists - ..() - return - if(changelings.len <= (changelingcap - 2) || prob(100 / (csc * 4))) - if(ROLE_CHANGELING in character.client.prefs.be_special) - if(!is_banned_from(character.ckey, list(ROLE_CHANGELING, ROLE_SYNDICATE)) && !QDELETED(character)) - if(age_check(character.client)) - if(!(character.job in restricted_jobs)) - character.mind.make_Changeling() - changelings += character.mind - if(QDELETED(character)) - return - ..() - -/datum/game_mode/traitor/changeling/generate_report() - return "The Syndicate has started some experimental research regarding humanoid shapeshifting. There are rumors that this technology will be field tested on a Nanotrasen station \ - for infiltration purposes. Be advised that support personel may also be deployed to defend these shapeshifters. Trust nobody - suspect everybody. Do not announce this to the crew, \ - as paranoia may spread and inhibit workplace efficiency." diff --git a/code/game/gamemodes/clown_ops/bananium_bomb.dm b/code/game/gamemodes/clown_ops/bananium_bomb.dm deleted file mode 100644 index d40859baea..0000000000 --- a/code/game/gamemodes/clown_ops/bananium_bomb.dm +++ /dev/null @@ -1,55 +0,0 @@ -/obj/machinery/nuclearbomb/syndicate/bananium - name = "bananium fission explosive" - desc = "" - icon = 'icons/obj/machines/nuke.dmi' - icon_state = "bananiumbomb_base" - -/obj/machinery/nuclearbomb/syndicate/bananium/update_icon_state() - if(deconstruction_state != NUKESTATE_INTACT) - icon_state = "bananiumbomb_base" - return - - switch(get_nuke_state()) - if(NUKE_OFF_LOCKED, NUKE_OFF_UNLOCKED) - icon_state = "bananiumbomb_base" - if(NUKE_ON_TIMING) - icon_state = "bananiumbomb_timing" - if(NUKE_ON_EXPLODING) - icon_state = "bananiumbomb_exploding" - -/obj/machinery/nuclearbomb/syndicate/bananium/get_cinematic_type(off_station) - switch(off_station) - if(0) - return CINEMATIC_NUKE_CLOWNOP - if(1) - return CINEMATIC_NUKE_MISS - if(2) - return CINEMATIC_NUKE_FAKE //it is farther away, so just a bikehorn instead of an airhorn - return CINEMATIC_NUKE_FAKE - -/obj/machinery/nuclearbomb/syndicate/bananium/really_actually_explode(off_station) - Cinematic(get_cinematic_type(off_station), world) - for(var/i in GLOB.human_list) - var/mob/living/carbon/human/H = i - var/turf/T = get_turf(H) - if(!T || T.z != z) - continue - H.Stun(10) - var/obj/item/clothing/C - if(!H.wear_pants || H.dropItemToGround(H.wear_pants)) - C = new /obj/item/clothing/under/rank/civilian/clown(H) - ADD_TRAIT(C, TRAIT_NODROP, CLOWN_NUKE_TRAIT) - H.equip_to_slot_or_del(C, SLOT_PANTS) - - if(!H.shoes || H.dropItemToGround(H.shoes)) - C = new /obj/item/clothing/shoes/clown_shoes(H) - ADD_TRAIT(C, TRAIT_NODROP, CLOWN_NUKE_TRAIT) - H.equip_to_slot_or_del(C, SLOT_SHOES) - - if(!H.wear_mask || H.dropItemToGround(H.wear_mask)) - C = new /obj/item/clothing/mask/gas/clown_hat(H) - ADD_TRAIT(C, TRAIT_NODROP, CLOWN_NUKE_TRAIT) - H.equip_to_slot_or_del(C, SLOT_WEAR_MASK) - - H.dna.add_mutation(CLOWNMUT) - H.gain_trauma(/datum/brain_trauma/mild/phobia/clowns, TRAUMA_RESILIENCE_LOBOTOMY) //MWA HA HA diff --git a/code/game/gamemodes/clown_ops/clown_ops.dm b/code/game/gamemodes/clown_ops/clown_ops.dm deleted file mode 100644 index 255f13520c..0000000000 --- a/code/game/gamemodes/clown_ops/clown_ops.dm +++ /dev/null @@ -1,61 +0,0 @@ -/datum/game_mode/nuclear/clown_ops - name = "clown ops" - config_tag = "clownops" - - announce_span = "danger" - announce_text = "Clown empire forces are approaching the station in an attempt to HONK it!\n\ - Operatives: Secure the nuclear authentication disk and use your bananium fission explosive to HONK the station.\n\ - Crew: Defend the nuclear authentication disk and ensure that it leaves with you on the emergency shuttle." - - operative_antag_datum_type = /datum/antagonist/nukeop/clownop - leader_antag_datum_type = /datum/antagonist/nukeop/leader/clownop - -//////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////// - -/datum/game_mode/nuclear/clown_ops/pre_setup() - . = ..() - if(.) - for(var/obj/machinery/nuclearbomb/syndicate/S in GLOB.nuke_list) - var/turf/T = get_turf(S) - if(T) - qdel(S) - new /obj/machinery/nuclearbomb/syndicate/bananium(T) - for(var/V in pre_nukeops) - var/datum/mind/the_op = V - the_op.assigned_role = "Clown Operative" - the_op.special_role = "Clown Operative" - -/datum/outfit/syndicate/clownop - name = "Clown Operative - Basic" - uniform = /obj/item/clothing/under/syndicate - shoes = /obj/item/clothing/shoes/clown_shoes/combat - mask = /obj/item/clothing/mask/gas/clown_hat - gloves = /obj/item/clothing/gloves/combat - back = /obj/item/storage/backpack/clown - ears = /obj/item/radio/headset/syndicate/alt - l_pocket = /obj/item/pinpointer/nuke/syndicate - r_pocket = /obj/item/bikehorn - id = /obj/item/card/id/syndicate - backpack_contents = list(/obj/item/storage/box/survival/syndie=1,\ - /obj/item/kitchen/knife/combat/survival, - /obj/item/reagent_containers/spray/waterflower/lube) - implants = list(/obj/item/implant/sad_trombone) - - uplink_type = /obj/item/uplink/clownop - -/datum/outfit/syndicate/clownop/no_crystals - tc = 0 - -/datum/outfit/syndicate/clownop/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - if(visualsOnly) - return - H.dna.add_mutation(CLOWNMUT) - -/datum/outfit/syndicate/clownop/leader - name = "Clown Operative Leader - Basic" - id = /obj/item/card/id/syndicate/nuke_leader - gloves = /obj/item/clothing/gloves/krav_maga/combatglovesplus - r_hand = /obj/item/nuclear_challenge/clownops - command_radio = TRUE diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm deleted file mode 100644 index ef932ccf4b..0000000000 --- a/code/game/gamemodes/clown_ops/clown_weapons.dm +++ /dev/null @@ -1,296 +0,0 @@ -/obj/item/reagent_containers/spray/waterflower/lube - name = "water flower" - desc = "" - icon = 'icons/obj/hydroponics/harvest.dmi' - icon_state = "sunflower" - item_state = "sunflower" - amount_per_transfer_from_this = 3 - spray_range = 1 - stream_range = 1 - volume = 30 - list_reagents = list(/datum/reagent/lube = 30) - -//COMBAT CLOWN SHOES -//Clown shoes with combat stats and noslip. Of course they still squeak. -/obj/item/clothing/shoes/clown_shoes/combat - name = "combat clown shoes" - desc = "" - clothing_flags = NOSLIP - slowdown = SHOES_SLOWDOWN - armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 10, "rad" = 0, "fire" = 70, "acid" = 50) - strip_delay = 70 - resistance_flags = NONE - permeability_coefficient = 0.05 - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - -//The super annoying version -/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat - name = "mk-honk combat shoes" - desc = "" - slowdown = SHOES_SLOWDOWN - armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 10, "rad" = 0, "fire" = 70, "acid" = 50) - strip_delay = 70 - resistance_flags = NONE - permeability_coefficient = 0.05 - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - always_noslip = TRUE - var/max_recharge = 3000 //30 peels worth - var/recharge_rate = 34 //about 1/3 of a peel per tick - -/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/Initialize() - . = ..() - var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container) - bananium.insert_amount_mat(max_recharge, /datum/material/bananium) - START_PROCESSING(SSobj, src) - -/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/process() - var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container) - var/bananium_amount = bananium.get_material_amount(/datum/material/bananium) - if(bananium_amount < max_recharge) - bananium.insert_amount_mat(min(recharge_rate, max_recharge - bananium_amount), /datum/material/bananium) - -/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/attack_self(mob/user) - ui_action_click(user) - -//BANANIUM SWORD - -/obj/item/melee/transforming/energy/sword/bananium - name = "bananium sword" - desc = "" - force = 0 - throwforce = 0 - force_on = 0 - throwforce_on = 0 - hitsound = null - attack_verb_on = list("slipped") - clumsy_check = FALSE - sharpness = IS_BLUNT - sword_color = "yellow" - heat = 0 - light_color = "#ffff00" - var/next_trombone_allowed = 0 - -/obj/item/melee/transforming/energy/sword/bananium/ComponentInitialize() - . = ..() - AddComponent(/datum/component/slippery, 60, GALOSHES_DONT_HELP) - var/datum/component/slippery/slipper = GetComponent(/datum/component/slippery) - slipper.signal_enabled = active - -/obj/item/melee/transforming/energy/sword/bananium/attack(mob/living/M, mob/living/user) - ..() - if(active) - var/datum/component/slippery/slipper = GetComponent(/datum/component/slippery) - slipper.Slip(src, M) - -/obj/item/melee/transforming/energy/sword/bananium/throw_impact(atom/hit_atom, throwingdatum) - . = ..() - if(active) - var/datum/component/slippery/slipper = GetComponent(/datum/component/slippery) - slipper.Slip(src, hit_atom) - -/obj/item/melee/transforming/energy/sword/bananium/attackby(obj/item/I, mob/living/user, params) - if((world.time > next_trombone_allowed) && istype(I, /obj/item/melee/transforming/energy/sword/bananium)) - next_trombone_allowed = world.time + 50 - to_chat(user, "I slap the two swords together. Sadly, they do not seem to fit!") - playsound(src, 'sound/blank.ogg', 50) - return TRUE - return ..() - -/obj/item/melee/transforming/energy/sword/bananium/transform_weapon(mob/living/user, supress_message_text) - ..() - var/datum/component/slippery/slipper = GetComponent(/datum/component/slippery) - slipper.signal_enabled = active - -/obj/item/melee/transforming/energy/sword/bananium/ignition_effect(atom/A, mob/user) - return "" - -/obj/item/melee/transforming/energy/sword/bananium/suicide_act(mob/user) - if(!active) - transform_weapon(user, TRUE) - user.visible_message("[user] is [pick("slitting [user.p_their()] stomach open with", "falling on")] [src]! It looks like [user.p_theyre()] trying to commit seppuku, but the blade slips off of [user.p_them()] harmlessly!") - var/datum/component/slippery/slipper = GetComponent(/datum/component/slippery) - slipper.Slip(src, user) - return SHAME - -//BANANIUM SHIELD - -/obj/item/shield/energy/bananium - name = "bananium energy shield" - desc = "" - throw_speed = 1 - clumsy_check = 0 - base_icon_state = "bananaeshield" - force = 0 - throwforce = 0 - throw_range = 5 - on_force = 0 - on_throwforce = 0 - on_throw_speed = 1 - -/obj/item/shield/energy/bananium/ComponentInitialize() - . = ..() - AddComponent(/datum/component/slippery, 60, GALOSHES_DONT_HELP) - var/datum/component/slippery/slipper = GetComponent(/datum/component/slippery) - slipper.signal_enabled = active - -/obj/item/shield/energy/bananium/attack_self(mob/living/carbon/human/user) - ..() - var/datum/component/slippery/slipper = GetComponent(/datum/component/slippery) - slipper.signal_enabled = active - -/obj/item/shield/energy/bananium/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force) - if(active) - if(iscarbon(thrower)) - var/mob/living/carbon/C = thrower - C.throw_mode_on() //so they can catch it on the return. - return ..() - -/obj/item/shield/energy/bananium/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(active) - var/caught = hit_atom.hitby(src, FALSE, FALSE, throwingdatum=throwingdatum) - if(iscarbon(hit_atom) && !caught)//if they are a carbon and they didn't catch it - var/datum/component/slippery/slipper = GetComponent(/datum/component/slippery) - slipper.Slip(src, hit_atom) - if(thrownby && !caught) - sleep(1) - throw_at(thrownby, throw_range+2, throw_speed, null, TRUE) - else - return ..() - - -//BOMBANANA - -/obj/item/reagent_containers/food/snacks/grown/banana/bombanana - trash = /obj/item/grown/bananapeel/bombanana - bitesize = 1 - customfoodfilling = FALSE - seed = null - tastes = list("explosives" = 10) - list_reagents = list(/datum/reagent/consumable/nutriment/vitamin = 1) - -/obj/item/grown/bananapeel/bombanana - desc = "" - seed = null - var/det_time = 50 - var/obj/item/grenade/syndieminibomb/bomb - -/obj/item/grown/bananapeel/bombanana/Initialize() - . = ..() - bomb = new /obj/item/grenade/syndieminibomb(src) - bomb.det_time = det_time - if(iscarbon(loc)) - to_chat(loc, "[src] begins to beep.") - var/mob/living/carbon/C = loc - C.throw_mode_on() - bomb.preprime(loc, null, FALSE) - -/obj/item/grown/bananapeel/bombanana/ComponentInitialize() - . = ..() - AddComponent(/datum/component/slippery, det_time) - -/obj/item/grown/bananapeel/bombanana/Destroy() - . = ..() - QDEL_NULL(bomb) - -/obj/item/grown/bananapeel/bombanana/suicide_act(mob/user) - user.visible_message("[user] is deliberately slipping on the [src.name]! It looks like \he's trying to commit suicide.") - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - bomb.preprime(user, 0, FALSE) - return (BRUTELOSS) - -//TEARSTACHE GRENADE - -/obj/item/grenade/chem_grenade/teargas/moustache - name = "tear-stache grenade" - desc = "" - icon_state = "moustacheg" - clumsy_check = GRENADE_NONCLUMSY_FUMBLE - -/obj/item/grenade/chem_grenade/teargas/moustache/prime() - var/myloc = get_turf(src) - . = ..() - for(var/mob/living/carbon/M in view(6, myloc)) - if(!istype(M.wear_mask, /obj/item/clothing/mask/gas/clown_hat) && !istype(M.wear_mask, /obj/item/clothing/mask/gas/mime) ) - if(!M.wear_mask || M.dropItemToGround(M.wear_mask)) - var/obj/item/clothing/mask/fakemoustache/sticky/the_stash = new /obj/item/clothing/mask/fakemoustache/sticky() - M.equip_to_slot_or_del(the_stash, SLOT_WEAR_MASK, TRUE, TRUE, TRUE, TRUE) - -/obj/item/clothing/mask/fakemoustache/sticky - var/unstick_time = 600 - -/obj/item/clothing/mask/fakemoustache/sticky/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, STICKY_MOUSTACHE_TRAIT) - addtimer(CALLBACK(src, PROC_REF(unstick)), unstick_time) - -/obj/item/clothing/mask/fakemoustache/sticky/proc/unstick() - REMOVE_TRAIT(src, TRAIT_NODROP, STICKY_MOUSTACHE_TRAIT) - -//DARK H.O.N.K. AND CLOWN MECH WEAPONS - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar/bombanana - name = "bombanana mortar" - desc = "" - icon_state = "mecha_bananamrtr" - projectile = /obj/item/grown/bananapeel/bombanana - projectiles = 8 - projectile_energy_cost = 1000 - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar/bombanana/can_attach(obj/mecha/combat/honker/M) - if(..()) - if(istype(M)) - return TRUE - return FALSE - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/tearstache - name = "\improper HONKeR-6 grenade launcher" - desc = "" - icon_state = "mecha_grenadelnchr" - projectile = /obj/item/grenade/chem_grenade/teargas/moustache - fire_sound = 'sound/blank.ogg' - projectiles = 6 - missile_speed = 1.5 - projectile_energy_cost = 800 - equip_cooldown = 60 - det_time = 20 - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/tearstache/can_attach(obj/mecha/combat/honker/M) - if(..()) - if(istype(M)) - return TRUE - return FALSE - -/obj/mecha/combat/honker/dark - desc = "" - name = "\improper Dark H.O.N.K" - icon_state = "darkhonker" - max_integrity = 300 - deflect_chance = 15 - armor = list("melee" = 40, "bullet" = 40, "laser" = 50, "energy" = 35, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) - max_temperature = 35000 - operation_req_access = list(ACCESS_SYNDICATE) - internals_req_access = list(ACCESS_SYNDICATE) - wreckage = /obj/structure/mecha_wreckage/honker/dark - max_equip = 4 - -/obj/mecha/combat/honker/dark/add_cell(obj/item/stock_parts/cell/C) - if(C) - C.forceMove(src) - cell = C - return - cell = new /obj/item/stock_parts/cell/hyper(src) - -/obj/mecha/combat/honker/dark/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/thrusters/ion(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/honker() - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar/bombanana()//Needed more offensive weapons. - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/tearstache()//The mousetrap mortar was not up-to-snuff. - ME.attach(src) - -/obj/structure/mecha_wreckage/honker/dark - name = "\improper Dark H.O.N.K wreckage" - icon_state = "darkhonker-broken" diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm deleted file mode 100644 index 5046543c33..0000000000 --- a/code/game/gamemodes/cult/cult.dm +++ /dev/null @@ -1,160 +0,0 @@ -#define CULT_SCALING_COEFFICIENT 9.3 //Roughly one new cultist at roundstart per this many players - -/datum/game_mode - var/list/datum/mind/cult = list() - -/proc/iscultist(mob/living/M) - return istype(M) && M.mind && M.mind.has_antag_datum(/datum/antagonist/cult) - -/datum/team/cult/proc/is_sacrifice_target(datum/mind/mind) - for(var/datum/objective/sacrifice/sac_objective in objectives) - if(mind == sac_objective.target) - return TRUE - return FALSE - -/proc/is_convertable_to_cult(mob/living/M,datum/team/cult/specific_cult) - if(!istype(M)) - return FALSE - if(M.mind) - if(ishuman(M) && (M.mind.isholy)) - return FALSE - if(specific_cult && specific_cult.is_sacrifice_target(M.mind)) - return FALSE - if(M.mind.enslaved_to && !iscultist(M.mind.enslaved_to)) - return FALSE - if(M.mind.unconvertable) - return FALSE - else - return FALSE - if(HAS_TRAIT(M, TRAIT_MINDSHIELD) || issilicon(M) || isbot(M) || isdrone(M) || !M.client) - return FALSE //can't convert machines, shielded, or braindead - return TRUE - -/datum/game_mode/cult - name = "cult" - config_tag = "cult" - report_type = "cult" - antag_flag = ROLE_CULTIST - false_report_weight = 10 - restricted_jobs = list("Chaplain","AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel") - protected_jobs = list() - required_players = 29 - required_enemies = 4 - recommended_enemies = 4 - enemy_minimum_age = 14 - - announce_span = "cult" - announce_text = "Some crew members are trying to start a cult to Nar'Sie!\n\ - Cultists: Carry out Nar'Sie's will.\n\ - Crew: Prevent the cult from expanding and drive it out." - - var/finished = 0 - - var/acolytes_needed = 10 //for the survive objective - var/acolytes_survived = 0 - - var/list/cultists_to_cult = list() //the cultists we'll convert - - var/datum/team/cult/main_cult - - -/datum/game_mode/cult/pre_setup() - if(CONFIG_GET(flag/protect_roles_from_antagonist)) - restricted_jobs += protected_jobs - - if(CONFIG_GET(flag/protect_assistant_from_antagonist)) - restricted_jobs += "Assistant" - - //cult scaling goes here - recommended_enemies = 1 + round(num_players()/CULT_SCALING_COEFFICIENT) - var/remaining = (num_players() % CULT_SCALING_COEFFICIENT) * 10 //Basically the % of how close the population is toward adding another cultis - if(prob(remaining)) - recommended_enemies++ - - - for(var/cultists_number = 1 to recommended_enemies) - if(!antag_candidates.len) - break - var/datum/mind/cultist = antag_pick(antag_candidates) - antag_candidates -= cultist - cultists_to_cult += cultist - cultist.special_role = ROLE_CULTIST - cultist.restricted_roles = restricted_jobs - log_game("[key_name(cultist)] has been selected as a cultist") - - if(cultists_to_cult.len>=required_enemies) - for(var/antag in cultists_to_cult) - GLOB.pre_setup_antags += antag - return TRUE - else - setup_error = "Not enough cultist candidates" - return FALSE - - -/datum/game_mode/cult/post_setup() - main_cult = new - - for(var/datum/mind/cult_mind in cultists_to_cult) - add_cultist(cult_mind, 0, equip=TRUE, cult_team = main_cult) - GLOB.pre_setup_antags -= cult_mind - - main_cult.setup_objectives() //Wait until all cultists are assigned to make sure none will be chosen as sacrifice. - - . = ..() - -/datum/game_mode/proc/add_cultist(datum/mind/cult_mind, stun , equip = FALSE, datum/team/cult/cult_team = null) - if (!istype(cult_mind)) - return FALSE - - var/datum/antagonist/cult/new_cultist = new() - new_cultist.give_equipment = equip - - if(cult_mind.add_antag_datum(new_cultist,cult_team)) - if(stun) - cult_mind.current.Unconscious(100) - return TRUE - -/datum/game_mode/proc/remove_cultist(datum/mind/cult_mind, silent, stun) - if(cult_mind.current) - var/datum/antagonist/cult/cult_datum = cult_mind.has_antag_datum(/datum/antagonist/cult) - if(!cult_datum) - return FALSE - cult_datum.silent = silent - cult_mind.remove_antag_datum(cult_datum) - if(stun) - cult_mind.current.Unconscious(100) - return TRUE - -/datum/game_mode/cult/proc/check_cult_victory() - return main_cult.check_cult_victory() - - -/datum/game_mode/cult/set_round_result() - ..() - if(check_cult_victory()) - SSticker.mode_result = "win - cult win" - SSticker.news_report = CULT_SUMMON - else - SSticker.mode_result = "loss - staff stopped the cult" - SSticker.news_report = CULT_FAILURE - -/datum/game_mode/cult/proc/check_survive() - var/acolytes_survived = 0 - for(var/datum/mind/cult_mind in cult) - if (cult_mind.current && cult_mind.current.stat != DEAD) - if(cult_mind.current.onCentCom() || cult_mind.current.onSyndieBase()) - acolytes_survived++ - if(acolytes_survived>=acolytes_needed) - return 0 - else - return 1 - - -/datum/game_mode/cult/generate_report() - return "Some stations in your sector have reported evidence of blood sacrifice and strange magic. Ties to the Wizards' Federation have been proven not to exist, and many employees \ - have disappeared; even Central Command employees light-years away have felt strange presences and at times hysterical compulsions. Interrogations point towards this being the work of \ - the cult of Nar'Sie. If evidence of this cult is discovered aboard your station, extreme caution and extreme vigilance must be taken going forward, and all resources should be \ - devoted to stopping this cult. Note that holy water seems to weaken and eventually return the minds of cultists that ingest it, and mindshield implants will prevent conversion \ - altogether." - -#undef CULT_SCALING_COEFFICIENT diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm index 9417e03a4b..e19d6cabac 100644 --- a/code/game/gamemodes/dynamic/dynamic.dm +++ b/code/game/gamemodes/dynamic/dynamic.dm @@ -220,16 +220,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) . += "Your station is somehow in the middle of hostile territory, in clear view of any enemy of the corporation. Your likelihood to survive is low, and station destruction is expected and almost inevitable. Secure any sensitive material and neutralize any enemy you will come across. It is important that you at least try to maintain the station.
" . += "Good luck." - if(station_goals.len) - . += "
Special Orders for [station_name()]:" - for(var/datum/station_goal/G in station_goals) - G.on_report() - . += G.get_report() - - print_command_report(., "Central Command Status Summary", announce=FALSE) priority_announce("A summary has been copied and printed to all communications consoles.", "Security level elevated.", 'sound/blank.ogg') - if(GLOB.security_level < SEC_LEVEL_BLUE) - set_security_level(SEC_LEVEL_BLUE) // Yes, this is copy pasted from game_mode /datum/game_mode/dynamic/check_finished(force_ending) diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm index c5b474d1d8..ed6b4f8847 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm @@ -68,117 +68,3 @@ high_population_requirement = 10 repeatable = TRUE flags = TRAITOR_RULESET - -////////////////////////////////////////////// -// // -// REVOLUTIONARY PROVOCATEUR // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/latejoin/provocateur - name = "Provocateur" - persistent = TRUE - antag_datum = /datum/antagonist/rev/head - antag_flag = ROLE_REV_HEAD - antag_flag_override = ROLE_REV - restricted_roles = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director") - enemy_roles = list("AI", "Cyborg", "Security Officer","Detective","Head of Security", "Captain", "Warden") - required_enemies = list(2,2,1,1,1,1,1,0,0,0) - required_candidates = 1 - weight = 2 - delay = 1 MINUTES // Prevents rule start while head is offstation. - cost = 20 - requirements = list(101,101,70,40,30,20,20,20,20,20) - high_population_requirement = 50 - flags = HIGHLANDER_RULESET - var/required_heads_of_staff = 3 - var/finished = FALSE - var/datum/team/revolution/revolution - -/datum/dynamic_ruleset/latejoin/provocateur/ready(forced=FALSE) - if (forced) - required_heads_of_staff = 1 - if(!..()) - return FALSE - var/head_check = 0 - for(var/mob/player in mode.current_players[CURRENT_LIVING_PLAYERS]) - if (player.mind.assigned_role in GLOB.command_positions) - head_check++ - return (head_check >= required_heads_of_staff) - -/datum/dynamic_ruleset/latejoin/provocateur/execute() - var/mob/M = pick(candidates) // This should contain a single player, but in case. - if(check_eligible(M.mind)) // Didnt die/run off z-level/get implanted since leaving shuttle. - assigned += M.mind - M.mind.special_role = antag_flag - revolution = new() - var/datum/antagonist/rev/head/new_head = new() - new_head.give_flash = TRUE - new_head.give_hud = TRUE - new_head.remove_clumsy = TRUE - new_head = M.mind.add_antag_datum(new_head, revolution) - revolution.update_objectives() - revolution.update_heads() - SSshuttle.registerHostileEnvironment(src) - return TRUE - else - log_game("DYNAMIC: [ruletype] [name] discarded [M.name] from head revolutionary due to ineligibility.") - log_game("DYNAMIC: [ruletype] [name] failed to get any eligible headrevs. Refunding [cost] threat.") - return FALSE - -/datum/dynamic_ruleset/latejoin/provocateur/rule_process() - if(check_rev_victory()) - finished = REVOLUTION_VICTORY - return RULESET_STOP_PROCESSING - else if (check_heads_victory()) - finished = STATION_VICTORY - SSshuttle.clearHostileEnvironment(src) - priority_announce("It appears the mutiny has been quelled. Please return myself and your colleagues to work. \ - We have remotely blacklisted the head revolutionaries from your cloning software to prevent accidental cloning.", null, 'sound/blank.ogg', null, "Central Command Loyalty Monitoring Division") - revolution.save_members() - for(var/datum/mind/M in revolution.members) // Remove antag datums and prevents podcloned or exiled headrevs restarting rebellions. - if(M.has_antag_datum(/datum/antagonist/rev/head)) - var/datum/antagonist/rev/head/R = M.has_antag_datum(/datum/antagonist/rev/head) - R.remove_revolutionary(FALSE, "gamemode") - var/mob/living/carbon/C = M.current - if(C.stat == DEAD) - C.makeUncloneable() - if(M.has_antag_datum(/datum/antagonist/rev)) - var/datum/antagonist/rev/R = M.has_antag_datum(/datum/antagonist/rev) - R.remove_revolutionary(FALSE, "gamemode") - return RULESET_STOP_PROCESSING - -/// Checks for revhead loss conditions and other antag datums. -/datum/dynamic_ruleset/latejoin/provocateur/proc/check_eligible(datum/mind/M) - var/turf/T = get_turf(M.current) - if(!considered_afk(M) && considered_alive(M) && is_station_level(T.z) && !M.antag_datums?.len && !HAS_TRAIT(M, TRAIT_MINDSHIELD)) - return TRUE - return FALSE - -/datum/dynamic_ruleset/latejoin/provocateur/check_finished() - if(finished == REVOLUTION_VICTORY) - return TRUE - else - return ..() - -/datum/dynamic_ruleset/latejoin/provocateur/proc/check_rev_victory() - for(var/datum/objective/mutiny/objective in revolution.objectives) - if(!(objective.check_completion())) - return FALSE - return TRUE - -/datum/dynamic_ruleset/latejoin/provocateur/proc/check_heads_victory() - for(var/datum/mind/rev_mind in revolution.head_revolutionaries()) - var/turf/T = get_turf(rev_mind.current) - if(!considered_afk(rev_mind) && considered_alive(rev_mind) && is_station_level(T.z)) - if(ishuman(rev_mind.current) || ismonkey(rev_mind.current)) - return FALSE - return TRUE - -/datum/dynamic_ruleset/latejoin/provocateur/round_result() - if(finished == REVOLUTION_VICTORY) - SSticker.mode_result = "win - heads killed" - SSticker.news_report = REVS_WIN - else if(finished == STATION_VICTORY) - SSticker.mode_result = "loss - rev heads killed" - SSticker.news_report = REVS_LOSE diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index 33e02f2899..e6bb893bae 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -190,9 +190,6 @@ /datum/dynamic_ruleset/midround/autotraitor/trim_candidates() ..() for(var/mob/living/player in living_players) - if(issilicon(player)) // Your assigned role doesn't change when you are turned into a silicon. - living_players -= player - continue if(is_centcom_level(player.z)) living_players -= player // We don't autotator people in CentCom continue @@ -212,58 +209,6 @@ M.mind.add_antag_datum(newTraitor) return TRUE - -////////////////////////////////////////////// -// // -// Malfunctioning AI // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/midround/malf - name = "Malfunctioning AI" - antag_datum = /datum/antagonist/traitor - antag_flag = ROLE_MALF - enemy_roles = list("Security Officer", "Warden","Detective","Head of Security", "Captain", "Scientist", "Chemist", "Research Director", "Chief Engineer") - exclusive_roles = list("AI") - required_enemies = list(4,4,4,4,4,4,2,2,2,0) - required_candidates = 1 - weight = 3 - cost = 35 - requirements = list(101,101,80,70,60,60,50,50,40,40) - high_population_requirement = 35 - required_type = /mob/living/silicon/ai - var/ion_announce = 33 - var/removeDontImproveChance = 10 - -/datum/dynamic_ruleset/midround/malf/trim_candidates() - ..() - candidates = living_players - for(var/mob/living/player in candidates) - if(!isAI(player)) - candidates -= player - continue - if(is_centcom_level(player.z)) - candidates -= player - continue - if(player.mind && (player.mind.special_role || player.mind.antag_datums?.len > 0)) - candidates -= player - -/datum/dynamic_ruleset/midround/malf/execute() - if(!candidates || !candidates.len) - return FALSE - var/mob/living/silicon/ai/M = pick_n_take(candidates) - assigned += M.mind - var/datum/antagonist/traitor/AI = new - M.mind.special_role = antag_flag - M.mind.add_antag_datum(AI) - if(prob(ion_announce)) - priority_announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", 'sound/blank.ogg') - if(prob(removeDontImproveChance)) - M.replace_random_law(generate_ion_law(), list(LAW_INHERENT, LAW_SUPPLIED, LAW_ION)) - else - M.add_ion_law(generate_ion_law()) - return TRUE - ////////////////////////////////////////////// // // // WIZARD (GHOST) // @@ -296,49 +241,6 @@ ..() new_character.forceMove(pick(GLOB.wizardstart)) -////////////////////////////////////////////// -// // -// NUCLEAR OPERATIVES (MIDROUND) // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/midround/from_ghosts/nuclear - name = "Nuclear Assault" - antag_flag = ROLE_OPERATIVE - antag_datum = /datum/antagonist/nukeop - enemy_roles = list("AI", "Cyborg", "Security Officer", "Warden","Detective","Head of Security", "Captain") - required_enemies = list(3,3,3,3,3,2,1,1,0,0) - required_candidates = 5 - weight = 5 - cost = 35 - requirements = list(90,90,90,80,60,40,30,20,10,10) - high_population_requirement = 10 - var/list/operative_cap = list(2,2,3,3,4,5,5,5,5,5) - var/datum/team/nuclear/nuke_team - flags = HIGHLANDER_RULESET - -/datum/dynamic_ruleset/midround/from_ghosts/nuclear/acceptable(population=0, threat=0) - if (locate(/datum/dynamic_ruleset/roundstart/nuclear) in mode.executed_rules) - return FALSE // Unavailable if nuke ops were already sent at roundstart - indice_pop = min(operative_cap.len, round(living_players.len/5)+1) - required_candidates = operative_cap[indice_pop] - return ..() - -/datum/dynamic_ruleset/midround/from_ghosts/nuclear/ready(forced = FALSE) - if (required_candidates > (dead_players.len + list_observers.len)) - return FALSE - return ..() - -/datum/dynamic_ruleset/midround/from_ghosts/nuclear/finish_setup(mob/new_character, index) - new_character.mind.special_role = "Nuclear Operative" - new_character.mind.assigned_role = "Nuclear Operative" - if (index == 1) // Our first guy is the leader - var/datum/antagonist/nukeop/leader/new_role = new - nuke_team = new_role.nuke_team - new_character.mind.add_antag_datum(new_role) - else - return ..() - ////////////////////////////////////////////// // // // BLOB (GHOST) // @@ -361,96 +263,3 @@ /datum/dynamic_ruleset/midround/from_ghosts/blob/generate_ruleset_body(mob/applicant) var/body = applicant.become_overmind() return body - -////////////////////////////////////////////// -// // -// XENOMORPH (GHOST) // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/midround/from_ghosts/xenomorph - name = "Alien Infestation" - antag_datum = /datum/antagonist/xeno - antag_flag = ROLE_ALIEN - enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain") - required_enemies = list(2,2,1,1,1,1,1,0,0,0) - required_candidates = 1 - weight = 3 - cost = 10 - requirements = list(101,101,101,70,50,40,20,15,10,10) - high_population_requirement = 50 - repeatable = TRUE - var/list/vents = list() - -/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/execute() - // 50% chance of being incremented by one - required_candidates += prob(50) - for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in GLOB.machines) - if(QDELETED(temp_vent)) - continue - if(is_station_level(temp_vent.loc.z) && !temp_vent.welded) - var/datum/pipeline/temp_vent_parent = temp_vent.parents[1] - if(!temp_vent_parent) - continue // No parent vent - // Stops Aliens getting stuck in small networks. - // See: Security, Virology - if(temp_vent_parent.other_atmosmch.len > 20) - vents += temp_vent - if(!vents.len) - return FALSE - . = ..() - -/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/generate_ruleset_body(mob/applicant) - var/obj/vent = pick_n_take(vents) - var/mob/living/carbon/alien/larva/new_xeno = new(vent.loc) - new_xeno.key = applicant.key - message_admins("[ADMIN_LOOKUPFLW(new_xeno)] has been made into an alien by the midround ruleset.") - log_game("DYNAMIC: [key_name(new_xeno)] was spawned as an alien by the midround ruleset.") - return new_xeno - -////////////////////////////////////////////// -// // -// NIGHTMARE (GHOST) // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/midround/from_ghosts/nightmare - name = "Nightmare" - antag_datum = /datum/antagonist/nightmare - antag_flag = "Nightmare" - antag_flag_override = ROLE_ALIEN - enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain") - required_enemies = list(2,2,1,1,1,1,1,0,0,0) - required_candidates = 1 - weight = 3 - cost = 10 - requirements = list(101,101,101,70,50,40,20,15,10,10) - high_population_requirement = 50 - repeatable = TRUE - var/list/spawn_locs = list() - -/datum/dynamic_ruleset/midround/from_ghosts/nightmare/execute() - for(var/X in GLOB.xeno_spawn) - var/turf/T = X - var/light_amount = T.get_lumcount() - if(light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD) - spawn_locs += T - if(!spawn_locs.len) - return FALSE - . = ..() - -/datum/dynamic_ruleset/midround/from_ghosts/nightmare/generate_ruleset_body(mob/applicant) - var/datum/mind/player_mind = new /datum/mind(applicant.key) - player_mind.active = TRUE - - var/mob/living/carbon/human/S = new (pick(spawn_locs)) - player_mind.transfer_to(S) - player_mind.assigned_role = "Nightmare" - player_mind.special_role = "Nightmare" - player_mind.add_antag_datum(/datum/antagonist/nightmare) - S.set_species(/datum/species/shadow/nightmare) - - playsound(S, 'sound/blank.ogg', 50, TRUE, -1) - message_admins("[ADMIN_LOOKUPFLW(S)] has been made into a Nightmare by the midround ruleset.") - log_game("DYNAMIC: [key_name(S)] was spawned as a Nightmare by the midround ruleset.") - return S diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm index 37048a45b0..17a056ca29 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm @@ -41,107 +41,6 @@ log_game("DYNAMIC: Checking if we can turn someone into a traitor.") mode.picking_specific_rule(/datum/dynamic_ruleset/midround/autotraitor) -////////////////////////////////////////// -// // -// BLOOD BROTHERS // -// // -////////////////////////////////////////// - -/datum/dynamic_ruleset/roundstart/traitorbro - name = "Blood Brothers" - antag_flag = ROLE_BROTHER - antag_datum = /datum/antagonist/brother/ - protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain") - restricted_roles = list("Cyborg", "AI") - required_candidates = 2 - weight = 4 - cost = 15 - scaling_cost = 15 - requirements = list(40,30,30,20,20,15,15,15,10,10) - high_population_requirement = 15 - antag_cap = list(2,2,2,2,2,2,2,2,2,2) // Can pick 3 per team, but rare enough it doesn't matter. - var/list/datum/team/brother_team/pre_brother_teams = list() - var/const/min_team_size = 2 - -/datum/dynamic_ruleset/roundstart/traitorbro/pre_execute() - var/num_teams = (antag_cap[indice_pop]/min_team_size) * (scaled_times + 1) // 1 team per scaling - for(var/j = 1 to num_teams) - if(candidates.len < min_team_size || candidates.len < required_candidates) - break - var/datum/team/brother_team/team = new - var/team_size = prob(10) ? min(3, candidates.len) : 2 - for(var/k = 1 to team_size) - var/mob/bro = pick_n_take(candidates) - assigned += bro.mind - team.add_member(bro.mind) - bro.mind.special_role = "brother" - bro.mind.restricted_roles = restricted_roles - GLOB.pre_setup_antags += bro.mind - pre_brother_teams += team - return TRUE - -/datum/dynamic_ruleset/roundstart/traitorbro/execute() - for(var/datum/team/brother_team/team in pre_brother_teams) - team.pick_meeting_area() - team.forge_brother_objectives() - for(var/datum/mind/M in team.members) - M.add_antag_datum(/datum/antagonist/brother, team) - GLOB.pre_setup_antags -= M - team.update_name() - mode.brother_teams += pre_brother_teams - return TRUE - -////////////////////////////////////////////// -// // -// CHANGELINGS // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/roundstart/changeling - name = "Changelings" - antag_flag = ROLE_CHANGELING - antag_datum = /datum/antagonist/changeling - protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain") - restricted_roles = list("AI", "Cyborg") - required_candidates = 1 - weight = 3 - cost = 15 - scaling_cost = 15 - requirements = list(70,70,60,50,40,20,20,10,10,10) - high_population_requirement = 10 - antag_cap = list(1,1,1,1,1,2,2,2,2,3) - var/team_mode_probability = 30 - -/datum/dynamic_ruleset/roundstart/changeling/pre_execute() - var/num_changelings = antag_cap[indice_pop] * (scaled_times + 1) - for (var/i = 1 to num_changelings) - var/mob/M = pick_n_take(candidates) - assigned += M.mind - M.mind.restricted_roles = restricted_roles - M.mind.special_role = ROLE_CHANGELING - GLOB.pre_setup_antags += M.mind - return TRUE - -/datum/dynamic_ruleset/roundstart/changeling/execute() - var/team_mode = FALSE - if(prob(team_mode_probability)) - team_mode = TRUE - var/list/team_objectives = subtypesof(/datum/objective/changeling_team_objective) - var/list/possible_team_objectives = list() - for(var/T in team_objectives) - var/datum/objective/changeling_team_objective/CTO = T - if(assigned.len >= initial(CTO.min_lings)) - possible_team_objectives += T - - if(possible_team_objectives.len && prob(20*assigned.len)) - GLOB.changeling_team_objective_type = pick(possible_team_objectives) - for(var/datum/mind/changeling in assigned) - var/datum/antagonist/changeling/new_antag = new antag_datum() - new_antag.team_mode = team_mode - changeling.add_antag_datum(new_antag) - GLOB.pre_setup_antags -= changeling - return TRUE - ////////////////////////////////////////////// // // // WIZARDS // @@ -187,274 +86,6 @@ M.add_antag_datum(new antag_datum()) return TRUE -////////////////////////////////////////////// -// // -// BLOOD CULT // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/roundstart/bloodcult - name = "Blood Cult" - antag_flag = ROLE_CULTIST - antag_datum = /datum/antagonist/cult - minimum_required_age = 14 - restricted_roles = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Chaplain", "Head of Personnel") - required_candidates = 2 - weight = 3 - cost = 35 - requirements = list(100,90,80,60,40,30,10,10,10,10) - high_population_requirement = 10 - flags = HIGHLANDER_RULESET - antag_cap = list(2,2,2,3,3,4,4,4,4,4) - var/datum/team/cult/main_cult - -/datum/dynamic_ruleset/roundstart/bloodcult/ready(forced = FALSE) - required_candidates = antag_cap[indice_pop] - . = ..() - -/datum/dynamic_ruleset/roundstart/bloodcult/pre_execute() - var/cultists = antag_cap[indice_pop] - mode.antags_rolled += cultists - for(var/cultists_number = 1 to cultists) - if(candidates.len <= 0) - break - var/mob/M = pick_n_take(candidates) - assigned += M.mind - M.mind.special_role = ROLE_CULTIST - M.mind.restricted_roles = restricted_roles - GLOB.pre_setup_antags += M.mind - return TRUE - -/datum/dynamic_ruleset/roundstart/bloodcult/execute() - main_cult = new - for(var/datum/mind/M in assigned) - var/datum/antagonist/cult/new_cultist = new antag_datum() - new_cultist.cult_team = main_cult - new_cultist.give_equipment = TRUE - M.add_antag_datum(new_cultist) - GLOB.pre_setup_antags -= M - main_cult.setup_objectives() - return TRUE - -/datum/dynamic_ruleset/roundstart/bloodcult/round_result() - ..() - if(main_cult.check_cult_victory()) - SSticker.mode_result = "win - cult win" - SSticker.news_report = CULT_SUMMON - else - SSticker.mode_result = "loss - staff stopped the cult" - SSticker.news_report = CULT_FAILURE - -////////////////////////////////////////////// -// // -// NUCLEAR OPERATIVES // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/roundstart/nuclear - name = "Nuclear Emergency" - antag_flag = ROLE_OPERATIVE - antag_datum = /datum/antagonist/nukeop - var/datum/antagonist/antag_leader_datum = /datum/antagonist/nukeop/leader - minimum_required_age = 14 - restricted_roles = list("Head of Security", "Captain") // Just to be sure that a nukie getting picked won't ever imply a Captain or HoS not getting drafted - required_candidates = 5 - weight = 3 - cost = 40 - requirements = list(90,90,90,80,60,40,30,20,10,10) - high_population_requirement = 10 - flags = HIGHLANDER_RULESET - antag_cap = list(2,2,2,3,3,3,4,4,5,5) - var/datum/team/nuclear/nuke_team - -/datum/dynamic_ruleset/roundstart/nuclear/ready(forced = FALSE) - required_candidates = antag_cap[indice_pop] - . = ..() - -/datum/dynamic_ruleset/roundstart/nuclear/pre_execute() - // If ready() did its job, candidates should have 5 or more members in it - var/operatives = antag_cap[indice_pop] - mode.antags_rolled += operatives - for(var/operatives_number = 1 to operatives) - if(candidates.len <= 0) - break - var/mob/M = pick_n_take(candidates) - assigned += M.mind - M.mind.assigned_role = "Nuclear Operative" - M.mind.special_role = "Nuclear Operative" - return TRUE - -/datum/dynamic_ruleset/roundstart/nuclear/execute() - var/leader = TRUE - for(var/datum/mind/M in assigned) - if (leader) - leader = FALSE - var/datum/antagonist/nukeop/leader/new_op = M.add_antag_datum(antag_leader_datum) - nuke_team = new_op.nuke_team - else - var/datum/antagonist/nukeop/new_op = new antag_datum() - M.add_antag_datum(new_op) - return TRUE - -/datum/dynamic_ruleset/roundstart/nuclear/round_result() - var result = nuke_team.get_result() - switch(result) - if(NUKE_RESULT_FLUKE) - SSticker.mode_result = "loss - syndicate nuked - disk secured" - SSticker.news_report = NUKE_SYNDICATE_BASE - if(NUKE_RESULT_NUKE_WIN) - SSticker.mode_result = "win - syndicate nuke" - SSticker.news_report = STATION_NUKED - if(NUKE_RESULT_NOSURVIVORS) - SSticker.mode_result = "halfwin - syndicate nuke - did not evacuate in time" - SSticker.news_report = STATION_NUKED - if(NUKE_RESULT_WRONG_STATION) - SSticker.mode_result = "halfwin - blew wrong station" - SSticker.news_report = NUKE_MISS - if(NUKE_RESULT_WRONG_STATION_DEAD) - SSticker.mode_result = "halfwin - blew wrong station - did not evacuate in time" - SSticker.news_report = NUKE_MISS - if(NUKE_RESULT_CREW_WIN_SYNDIES_DEAD) - SSticker.mode_result = "loss - evacuation - disk secured - syndi team dead" - SSticker.news_report = OPERATIVES_KILLED - if(NUKE_RESULT_CREW_WIN) - SSticker.mode_result = "loss - evacuation - disk secured" - SSticker.news_report = OPERATIVES_KILLED - if(NUKE_RESULT_DISK_LOST) - SSticker.mode_result = "halfwin - evacuation - disk not secured" - SSticker.news_report = OPERATIVE_SKIRMISH - if(NUKE_RESULT_DISK_STOLEN) - SSticker.mode_result = "halfwin - detonation averted" - SSticker.news_report = OPERATIVE_SKIRMISH - else - SSticker.mode_result = "halfwin - interrupted" - SSticker.news_report = OPERATIVE_SKIRMISH - -////////////////////////////////////////////// -// // -// REVS // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/roundstart/revs - name = "Revolution" - persistent = TRUE - antag_flag = ROLE_REV_HEAD - antag_flag_override = ROLE_REV - antag_datum = /datum/antagonist/rev/head - minimum_required_age = 14 - restricted_roles = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director") - required_candidates = 3 - weight = 2 - delay = 7 MINUTES - cost = 35 - requirements = list(101,101,70,40,30,20,10,10,10,10) - high_population_requirement = 10 - antag_cap = list(3,3,3,3,3,3,3,3,3,3) - flags = HIGHLANDER_RULESET - // I give up, just there should be enough heads with 35 players... - minimum_players = 35 - var/datum/team/revolution/revolution - var/finished = FALSE - -/datum/dynamic_ruleset/roundstart/revs/pre_execute() - var/max_candidates = antag_cap[indice_pop] - mode.antags_rolled += max_candidates - for(var/i = 1 to max_candidates) - if(candidates.len <= 0) - break - var/mob/M = pick_n_take(candidates) - assigned += M.mind - M.mind.restricted_roles = restricted_roles - M.mind.special_role = antag_flag - GLOB.pre_setup_antags += M.mind - return TRUE - -/datum/dynamic_ruleset/roundstart/revs/execute() - var/success = TRUE - revolution = new() - for(var/datum/mind/M in assigned) - GLOB.pre_setup_antags -= M - if(check_eligible(M)) - var/datum/antagonist/rev/head/new_head = new antag_datum() - new_head.give_flash = TRUE - new_head.give_hud = TRUE - new_head.remove_clumsy = TRUE - M.add_antag_datum(new_head,revolution) - else - assigned -= M - log_game("DYNAMIC: [ruletype] [name] discarded [M.name] from head revolutionary due to ineligibility.") - if(!revolution.members.len) - success = FALSE - log_game("DYNAMIC: [ruletype] [name] failed to get any eligible headrevs. Refunding [cost] threat.") - if(success) - revolution.update_objectives() - revolution.update_heads() - SSshuttle.registerHostileEnvironment(src) - return TRUE - return FALSE - -/datum/dynamic_ruleset/roundstart/revs/clean_up() - qdel(revolution) - ..() - -/datum/dynamic_ruleset/roundstart/revs/rule_process() - if(check_rev_victory()) - finished = REVOLUTION_VICTORY - return RULESET_STOP_PROCESSING - else if (check_heads_victory()) - finished = STATION_VICTORY - SSshuttle.clearHostileEnvironment(src) - priority_announce("It appears the mutiny has been quelled. Please return myself and your incapacitated colleagues to work. \ - We have remotely blacklisted the head revolutionaries from your cloning software to prevent accidental cloning.", null, 'sound/blank.ogg', null, "Central Command Loyalty Monitoring Division") - revolution.save_members() - for(var/datum/mind/M in revolution.members) // Remove antag datums and prevents podcloned or exiled headrevs restarting rebellions. - if(M.has_antag_datum(/datum/antagonist/rev/head)) - var/datum/antagonist/rev/head/R = M.has_antag_datum(/datum/antagonist/rev/head) - R.remove_revolutionary(FALSE, "gamemode") - var/mob/living/carbon/C = M.current - if(C.stat == DEAD) - C.makeUncloneable() - if(M.has_antag_datum(/datum/antagonist/rev)) - var/datum/antagonist/rev/R = M.has_antag_datum(/datum/antagonist/rev) - R.remove_revolutionary(FALSE, "gamemode") - return RULESET_STOP_PROCESSING - -/// Checks for revhead loss conditions and other antag datums. -/datum/dynamic_ruleset/roundstart/revs/proc/check_eligible(datum/mind/M) - var/turf/T = get_turf(M.current) - if(!considered_afk(M) && considered_alive(M) && is_station_level(T.z) && !M.antag_datums?.len && !HAS_TRAIT(M, TRAIT_MINDSHIELD)) - return TRUE - return FALSE - -/datum/dynamic_ruleset/roundstart/revs/check_finished() - if(finished == REVOLUTION_VICTORY) - return TRUE - else - return ..() - -/datum/dynamic_ruleset/roundstart/revs/proc/check_rev_victory() - for(var/datum/objective/mutiny/objective in revolution.objectives) - if(!(objective.check_completion())) - return FALSE - return TRUE - -/datum/dynamic_ruleset/roundstart/revs/proc/check_heads_victory() - for(var/datum/mind/rev_mind in revolution.head_revolutionaries()) - var/turf/T = get_turf(rev_mind.current) - if(!considered_afk(rev_mind) && considered_alive(rev_mind) && is_station_level(T.z)) - if(ishuman(rev_mind.current) || ismonkey(rev_mind.current)) - return FALSE - return TRUE - -/datum/dynamic_ruleset/roundstart/revs/round_result() - if(finished == REVOLUTION_VICTORY) - SSticker.mode_result = "win - heads killed" - SSticker.news_report = REVS_WIN - else if(finished == STATION_VICTORY) - SSticker.mode_result = "loss - rev heads killed" - SSticker.news_report = REVS_LOSE - // Admin only rulesets. The threat requirement is 101 so it is not possible to roll them. ////////////////////////////////////////////// @@ -479,7 +110,7 @@ log_game("Starting a round of extended.") mode.spend_threat(mode.threat) return TRUE - +/* ////////////////////////////////////////////// // // // CLOWN OPS // @@ -504,60 +135,7 @@ for(var/datum/mind/V in assigned) V.assigned_role = "Clown Operative" V.special_role = "Clown Operative" - -////////////////////////////////////////////// -// // -// DEVIL // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/roundstart/devil - name = "Devil" - antag_flag = ROLE_DEVIL - antag_datum = /datum/antagonist/devil - restricted_roles = list("Lawyer", "Curator", "Chaplain", "Head of Security", "Captain", "AI") - required_candidates = 1 - weight = 3 - cost = 0 - requirements = list(101,101,101,101,101,101,101,101,101,101) - high_population_requirement = 101 - antag_cap = list(1,1,1,2,2,2,3,3,3,4) - -/datum/dynamic_ruleset/roundstart/devil/pre_execute() - var/num_devils = antag_cap[indice_pop] - mode.antags_rolled += num_devils - - for(var/j = 0, j < num_devils, j++) - if (!candidates.len) - break - var/mob/devil = pick_n_take(candidates) - assigned += devil.mind - devil.mind.special_role = ROLE_DEVIL - devil.mind.restricted_roles = restricted_roles - GLOB.pre_setup_antags += devil.mind - - log_game("[key_name(devil)] has been selected as a devil") - return TRUE - -/datum/dynamic_ruleset/roundstart/devil/execute() - for(var/datum/mind/devil in assigned) - add_devil(devil.current, ascendable = TRUE) - GLOB.pre_setup_antags -= devil - add_devil_objectives(devil,2) - return TRUE - -/datum/dynamic_ruleset/roundstart/devil/proc/add_devil_objectives(datum/mind/devil_mind, quantity) - var/list/validtypes = list(/datum/objective/devil/soulquantity, /datum/objective/devil/soulquality, /datum/objective/devil/sintouch, /datum/objective/devil/buy_target) - var/datum/antagonist/devil/D = devil_mind.has_antag_datum(/datum/antagonist/devil) - for(var/i = 1 to quantity) - var/type = pick(validtypes) - var/datum/objective/devil/objective = new type(null) - objective.owner = devil_mind - D.objectives += objective - if(!istype(objective, /datum/objective/devil/buy_target)) - validtypes -= type - else - objective.find_target() +*/ ////////////////////////////////////////////// // // @@ -620,38 +198,3 @@ SSticker.mode_result = "win - monkey win" else SSticker.mode_result = "loss - staff stopped the monkeys" - -////////////////////////////////////////////// -// // -// METEOR // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/roundstart/meteor - name = "Meteor" - persistent = TRUE - required_candidates = 0 - weight = 3 - cost = 0 - requirements = list(101,101,101,101,101,101,101,101,101,101) - high_population_requirement = 101 - var/meteordelay = 2000 - var/nometeors = 0 - var/rampupdelta = 5 - -/datum/dynamic_ruleset/roundstart/meteor/rule_process() - if(nometeors || meteordelay > world.time - SSticker.round_start_time) - return - - var/list/wavetype = GLOB.meteors_normal - var/meteorminutes = (world.time - SSticker.round_start_time - meteordelay) / 10 / 60 - - if (prob(meteorminutes)) - wavetype = GLOB.meteors_threatening - - if (prob(meteorminutes/2)) - wavetype = GLOB.meteors_catastrophic - - var/ramp_up_final = CLAMP(round(meteorminutes/rampupdelta), 1, 10) - - spawn_meteors(ramp_up_final, wavetype) diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm deleted file mode 100644 index 44fb638f40..0000000000 --- a/code/game/gamemodes/events.dm +++ /dev/null @@ -1,66 +0,0 @@ -/proc/power_failure() - priority_announce("Abnormal activity detected in [station_name()]") - for(var/obj/machinery/power/smes/S in GLOB.machines) - if(istype(get_area(S), /area/ai_monitored/turret_protected) || !is_station_level(S.z)) - continue - S.charge = 0 - S.output_level = 0 - S.output_attempt = FALSE - S.update_icon() - S.power_change() - - for(var/area/A in GLOB.the_station_areas) - if(!A.requires_power || A.always_unpowered ) - continue - if(GLOB.typecache_powerfailure_safe_areas[A.type]) - continue - - A.power_light = FALSE - A.power_equip = FALSE - A.power_environ = FALSE - A.power_change() - - for(var/obj/machinery/power/apc/C in GLOB.apcs_list) - if(C.cell && is_station_level(C.z)) - var/area/A = C.area - if(GLOB.typecache_powerfailure_safe_areas[A.type]) - continue - - C.cell.charge = 0 - -/proc/power_restore() - - priority_announce("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal", 'sound/blank.ogg') - for(var/obj/machinery/power/apc/C in GLOB.machines) - if(C.cell && is_station_level(C.z)) - C.cell.charge = C.cell.maxcharge - C.failure_timer = 0 - for(var/obj/machinery/power/smes/S in GLOB.machines) - if(!is_station_level(S.z)) - continue - S.charge = S.capacity - S.output_level = S.output_level_max - S.output_attempt = TRUE - S.update_icon() - S.power_change() - for(var/area/A in GLOB.the_station_areas) - if(!A.requires_power || A.always_unpowered) - continue - if(!istype(A, /area/shuttle)) - A.power_light = TRUE - A.power_equip = TRUE - A.power_environ = TRUE - A.power_change() - -/proc/power_restore_quick() - - priority_announce("All SMESs on [station_name()] have been recharged. We apologize for the inconvenience.", "Power Systems Nominal", 'sound/blank.ogg') - for(var/obj/machinery/power/smes/S in GLOB.machines) - if(!is_station_level(S.z)) - continue - S.charge = S.capacity - S.output_level = S.output_level_max - S.output_attempt = TRUE - S.update_icon() - S.power_change() - diff --git a/code/game/gamemodes/extended/extended.dm b/code/game/gamemodes/extended/extended.dm index b2e15ae6ab..d9e9b3e1d0 100644 --- a/code/game/gamemodes/extended/extended.dm +++ b/code/game/gamemodes/extended/extended.dm @@ -19,11 +19,5 @@ config_tag = "extended" false_report_weight = 0 -/datum/game_mode/extended/announced/generate_station_goals() - for(var/T in subtypesof(/datum/station_goal)) - var/datum/station_goal/G = new T - station_goals += G - G.on_report() - /datum/game_mode/extended/announced/send_intercept(report = 0) priority_announce("Thanks to the tireless efforts of our security and intelligence divisions, there are currently no credible threats to [station_name()]. All station construction projects have been authorized. Have a secure shift!", "Security Report", 'sound/blank.ogg') diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 98de617ce4..9dcdba90a7 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -128,7 +128,6 @@ qdel(query_round_game_mode) if(report) addtimer(CALLBACK(src, PROC_REF(send_intercept), 0), rand(waittime_l, waittime_h)) - generate_station_goals() gamemode_ready = TRUE return 1 @@ -308,16 +307,7 @@ intercepttext += "
" intercepttext += report - if(station_goals.len) - intercepttext += "
Special Orders for [station_name()]:" - for(var/datum/station_goal/G in station_goals) - G.on_report() - intercepttext += G.get_report() - - print_command_report(intercepttext, "Central Command Status Summary", announce=FALSE) priority_announce("A summary has been copied and printed to all communications consoles.", "Enemy communication intercepted. Security level elevated.", 'sound/blank.ogg') - if(GLOB.security_level < SEC_LEVEL_BLUE) - set_security_level(SEC_LEVEL_BLUE) // This is a frequency selection system. You may imagine it like a raffle where each player can have some number of tickets. The more tickets you have the more likely you are to @@ -482,28 +472,6 @@ J.current_positions = max(J.current_positions-1, 0) reopened_jobs += L.job - if(CONFIG_GET(flag/reopen_roundstart_suicide_roles_command_report)) - if(reopened_jobs.len) - var/reopened_job_report_positions - for(var/dead_dudes_job in reopened_jobs) - reopened_job_report_positions = "[reopened_job_report_positions ? "[reopened_job_report_positions]\n":""][dead_dudes_job]" - - var/suicide_command_report = "Central Command Human Resources Board
\ - Notice of Personnel Change

\ - To personnel management staff aboard [station_name()]:

\ - Our medical staff have detected a series of anomalies in the vital sensors \ - of some of the staff aboard your station.

\ - Further investigation into the situation on our end resulted in us discovering \ - a series of rather... unforturnate decisions that were made on the part of said staff.

\ - As such, we have taken the liberty to automatically reopen employment opportunities for the positions of the crew members \ - who have decided not to partake in our research. We will be forwarding their cases to our employment review board \ - to determine their eligibility for continued service with the company (and of course the \ - continued storage of cloning records within the central medical backup server.)

\ - The following positions have been reopened on our behalf:

\ - [reopened_job_report_positions]
" - - print_command_report(suicide_command_report, "Central Command Personnel Update") - ////////////////////////// //Reports player logouts// ////////////////////////// @@ -584,26 +552,6 @@ return max(0, enemy_minimum_age - C.player_age) -/datum/game_mode/proc/remove_antag_for_borging(datum/mind/newborgie) - SSticker.mode.remove_cultist(newborgie, 0, 0) - var/datum/antagonist/rev/rev = newborgie.has_antag_datum(/datum/antagonist/rev) - if(rev) - rev.remove_revolutionary(TRUE) - -/datum/game_mode/proc/generate_station_goals() - var/list/possible = list() - for(var/T in subtypesof(/datum/station_goal)) - var/datum/station_goal/G = T - if(config_tag in initial(G.gamemode_blacklist)) - continue - possible += T - var/goal_weights = 0 - while(possible.len && goal_weights < STATION_GOAL_BUDGET) - var/datum/station_goal/picked = pick_n_take(possible) - goal_weights += initial(picked.weight) - station_goals += new picked - - /datum/game_mode/proc/generate_report() //Generates a small text blurb for the gamemode in centcom report return "Gamemode report for [name] not set. Contact a coder." @@ -624,8 +572,6 @@ SSticker.news_report = STATION_DESTROYED_NUKE if(EMERGENCY_ESCAPED_OR_ENDGAMED) SSticker.news_report = STATION_EVACUATED - if(SSshuttle.emergency.is_hijacked()) - SSticker.news_report = SHUTTLE_HIJACK /// Mode specific admin panel. /datum/game_mode/proc/admin_panel() diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm deleted file mode 100644 index dc6eee0997..0000000000 --- a/code/game/gamemodes/meteor/meteor.dm +++ /dev/null @@ -1,60 +0,0 @@ -/datum/game_mode/meteor - name = "meteor" - config_tag = "meteor" - report_type = "meteor" - false_report_weight = 1 - var/meteordelay = 2000 - var/nometeors = 0 - var/rampupdelta = 5 - required_players = 0 - - announce_span = "danger" - announce_text = "A major meteor shower is bombarding the station! The crew needs to evacuate or survive the onslaught." - - -/datum/game_mode/meteor/process() - if(nometeors || meteordelay > world.time - SSticker.round_start_time) - return - - var/list/wavetype = GLOB.meteors_normal - var/meteorminutes = (world.time - SSticker.round_start_time - meteordelay) / 10 / 60 - - - if (prob(meteorminutes)) - wavetype = GLOB.meteors_threatening - - if (prob(meteorminutes/2)) - wavetype = GLOB.meteors_catastrophic - - var/ramp_up_final = CLAMP(round(meteorminutes/rampupdelta), 1, 10) - - spawn_meteors(ramp_up_final, wavetype) - - -/datum/game_mode/meteor/special_report() - var/survivors = 0 - var/list/survivor_list = list() - - for(var/mob/living/player in GLOB.player_list) - if(player.stat != DEAD) - ++survivors - - if(player.onCentCom()) - survivor_list += "[player.real_name] escaped to the safety of CentCom." - else if(player.onSyndieBase()) - survivor_list += "[player.real_name] escaped to the (relative) safety of Syndicate Space." - else - survivor_list += "[player.real_name] survived but is stranded without any hope of rescue." - - if(survivors) - return "
The following survived the meteor storm:
[survivor_list.Join("
")]
" - else - return "
Nobody survived the meteor storm!
" - -/datum/game_mode/meteor/set_round_result() - ..() - SSticker.mode_result = "end - evacuation" - -/datum/game_mode/meteor/generate_report() - return "[pick("Asteroids have", "Meteors have", "Large rocks have", "Stellar minerals have", "Space hail has", "Debris has")] been detected near your station, and a collision is possible, \ - though unlikely. Be prepared for largescale impacts and destruction. Please note that the debris will prevent the escape shuttle from arriving quickly." diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm deleted file mode 100644 index d99f172198..0000000000 --- a/code/game/gamemodes/meteor/meteors.dm +++ /dev/null @@ -1,369 +0,0 @@ -#define DEFAULT_METEOR_LIFETIME 1800 -GLOBAL_VAR_INIT(meteor_wave_delay, 625) //minimum wait between waves in tenths of seconds -//set to at least 100 unless you want evarr ruining every round - -//Meteors probability of spawning during a given wave -GLOBAL_LIST_INIT(meteors_normal, list(/obj/effect/meteor/dust=3, /obj/effect/meteor/medium=8, /obj/effect/meteor/big=3, \ - /obj/effect/meteor/flaming=1, /obj/effect/meteor/irradiated=3)) //for normal meteor event - -GLOBAL_LIST_INIT(meteors_threatening, list(/obj/effect/meteor/medium=4, /obj/effect/meteor/big=8, \ - /obj/effect/meteor/flaming=3, /obj/effect/meteor/irradiated=3)) //for threatening meteor event - -GLOBAL_LIST_INIT(meteors_catastrophic, list(/obj/effect/meteor/medium=5, /obj/effect/meteor/big=75, \ - /obj/effect/meteor/flaming=10, /obj/effect/meteor/irradiated=10, /obj/effect/meteor/tunguska = 1)) //for catastrophic meteor event - -GLOBAL_LIST_INIT(meteorsB, list(/obj/effect/meteor/meaty=5, /obj/effect/meteor/meaty/xeno=1)) //for meaty ore event - -GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event - - -/////////////////////////////// -//Meteor spawning global procs -/////////////////////////////// - -/proc/spawn_meteors(number = 10, list/meteortypes) - for(var/i = 0; i < number; i++) - spawn_meteor(meteortypes) - -/proc/spawn_meteor(list/meteortypes) - var/turf/pickedstart - var/turf/pickedgoal - var/max_i = 10//number of tries to spawn meteor. - while(!isspaceturf(pickedstart)) - var/startSide = pick(GLOB.cardinals) - var/startZ = pick(SSmapping.levels_by_trait(ZTRAIT_STATION)) - pickedstart = spaceDebrisStartLoc(startSide, startZ) - pickedgoal = spaceDebrisFinishLoc(startSide, startZ) - max_i-- - if(max_i<=0) - return - var/Me = pickweight(meteortypes) - var/obj/effect/meteor/M = new Me(pickedstart, pickedgoal) - M.dest = pickedgoal - -/proc/spaceDebrisStartLoc(startSide, Z) - var/starty - var/startx - switch(startSide) - if(NORTH) - starty = world.maxy-(TRANSITIONEDGE+1) - startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1)) - if(EAST) - starty = rand((TRANSITIONEDGE+1),world.maxy-(TRANSITIONEDGE+1)) - startx = world.maxx-(TRANSITIONEDGE+1) - if(SOUTH) - starty = (TRANSITIONEDGE+1) - startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1)) - if(WEST) - starty = rand((TRANSITIONEDGE+1), world.maxy-(TRANSITIONEDGE+1)) - startx = (TRANSITIONEDGE+1) - . = locate(startx, starty, Z) - -/proc/spaceDebrisFinishLoc(startSide, Z) - var/endy - var/endx - switch(startSide) - if(NORTH) - endy = (TRANSITIONEDGE+1) - endx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1)) - if(EAST) - endy = rand((TRANSITIONEDGE+1), world.maxy-(TRANSITIONEDGE+1)) - endx = (TRANSITIONEDGE+1) - if(SOUTH) - endy = world.maxy-(TRANSITIONEDGE+1) - endx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1)) - if(WEST) - endy = rand((TRANSITIONEDGE+1),world.maxy-(TRANSITIONEDGE+1)) - endx = world.maxx-(TRANSITIONEDGE+1) - . = locate(endx, endy, Z) - -/////////////////////// -//The meteor effect -////////////////////// - -/obj/effect/meteor - name = "the concept of meteor" - desc = "" - icon = 'icons/obj/meteor.dmi' - icon_state = "small" - density = TRUE - anchored = TRUE - var/hits = 4 - var/hitpwr = 2 //Level of ex_act to be called on hit. - var/dest - pass_flags = PASSTABLE - var/heavy = 0 - var/meteorsound = 'sound/blank.ogg' - var/z_original - var/threat = 0 // used for determining which meteors are most interesting - var/lifetime = DEFAULT_METEOR_LIFETIME - var/timerid = null - var/list/meteordrop = list(/obj/item/stack/ore/iron) - var/dropamt = 2 - -/obj/effect/meteor/Move() - if(z != z_original || loc == dest) - qdel(src) - return FALSE - - . = ..() //process movement... - - if(.)//.. if did move, ram the turf we get in - var/turf/T = get_turf(loc) - ram_turf(T) - - if(prob(10) && !isspaceturf(T))//randomly takes a 'hit' from ramming - get_hit() - -/obj/effect/meteor/Destroy() - if (timerid) - deltimer(timerid) - GLOB.meteor_list -= src - SSaugury.unregister_doom(src) - walk(src,0) //this cancels the walk_towards() proc - . = ..() - -/obj/effect/meteor/Initialize(mapload, target) - . = ..() - z_original = z - GLOB.meteor_list += src - SSaugury.register_doom(src, threat) - SpinAnimation() - timerid = QDEL_IN(src, lifetime) - chase_target(target) - -/obj/effect/meteor/Bump(atom/A) - if(A) - ram_turf(get_turf(A)) - playsound(src.loc, meteorsound, 40, TRUE) - get_hit() - -/obj/effect/meteor/proc/ram_turf(turf/T) - //first bust whatever is in the turf - for(var/atom/A in T) - if(A != src) - if(isliving(A)) - A.visible_message("[src] slams into [A].", "[src] slams into you!.") - A.ex_act(hitpwr) - - //then, ram the turf if it still exists - if(T) - T.ex_act(hitpwr) - - - -//process getting 'hit' by colliding with a dense object -//or randomly when ramming turfs -/obj/effect/meteor/proc/get_hit() - hits-- - if(hits <= 0) - make_debris() - meteor_effect() - qdel(src) - -/obj/effect/meteor/ex_act() - return - -/obj/effect/meteor/examine(mob/user) - . = ..() - if(!(flags_1 & ADMIN_SPAWNED_1) && isliving(user)) - user.client.give_award(/datum/award/achievement/misc/meteor_examine, user) - -/obj/effect/meteor/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_MINING) - make_debris() - qdel(src) - else - . = ..() - -/obj/effect/meteor/proc/make_debris() - for(var/throws = dropamt, throws > 0, throws--) - var/thing_to_spawn = pick(meteordrop) - new thing_to_spawn(get_turf(src)) - -/obj/effect/meteor/proc/chase_target(atom/chasing, delay = 1) - set waitfor = FALSE - if(chasing) - walk_towards(src, chasing, delay) - -/obj/effect/meteor/proc/meteor_effect() - if(heavy) - var/sound/meteor_sound = sound(meteorsound) - var/random_frequency = get_rand_frequency() - - for(var/mob/M in GLOB.player_list) - if((M.orbiting) && (SSaugury.watchers[M])) - continue - var/turf/T = get_turf(M) - if(!T || T.z != src.z) - continue - var/dist = get_dist(M.loc, src.loc) - shake_camera(M, dist > 20 ? 2 : 4, dist > 20 ? 1 : 3) - M.playsound_local(src.loc, null, 50, 1, random_frequency, 10, S = meteor_sound) - -/////////////////////// -//Meteor types -/////////////////////// - -//Dust -/obj/effect/meteor/dust - name = "space dust" - icon_state = "dust" - pass_flags = PASSTABLE | PASSGRILLE - hits = 1 - hitpwr = 3 - meteorsound = 'sound/blank.ogg' - meteordrop = list(/obj/item/stack/ore/glass) - threat = 1 - -//Medium-sized -/obj/effect/meteor/medium - name = "meteor" - dropamt = 3 - threat = 5 - -/obj/effect/meteor/medium/meteor_effect() - ..() - explosion(src.loc, 0, 1, 2, 3, 0) - -//Large-sized -/obj/effect/meteor/big - name = "big meteor" - icon_state = "large" - hits = 6 - heavy = 1 - dropamt = 4 - threat = 10 - -/obj/effect/meteor/big/meteor_effect() - ..() - explosion(src.loc, 1, 2, 3, 4, 0) - -//Flaming meteor -/obj/effect/meteor/flaming - name = "flaming meteor" - icon_state = "flaming" - hits = 5 - heavy = 1 - meteorsound = 'sound/blank.ogg' - meteordrop = list(/obj/item/stack/ore/plasma) - threat = 20 - -/obj/effect/meteor/flaming/meteor_effect() - ..() - explosion(src.loc, 1, 2, 3, 4, 0, 0, 5) - -//Radiation meteor -/obj/effect/meteor/irradiated - name = "glowing meteor" - icon_state = "glowing" - heavy = 1 - meteordrop = list(/obj/item/stack/ore/uranium) - threat = 15 - - -/obj/effect/meteor/irradiated/meteor_effect() - ..() - explosion(src.loc, 0, 0, 4, 3, 0) - new /obj/effect/decal/cleanable/greenglow(get_turf(src)) - radiation_pulse(src, 500) - -//Meaty Ore -/obj/effect/meteor/meaty - name = "meaty ore" - icon_state = "meateor" - desc = "" - hits = 2 - heavy = 1 - meteorsound = 'sound/blank.ogg' - meteordrop = list(/obj/item/reagent_containers/food/snacks/meat/slab/human, /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant, /obj/item/organ/heart, /obj/item/organ/lungs, /obj/item/organ/tongue, /obj/item/organ/appendix/) - var/meteorgibs = /obj/effect/gibspawner/generic - threat = 2 - -/obj/effect/meteor/meaty/Initialize() - for(var/path in meteordrop) - if(path == /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant) - meteordrop -= path - meteordrop += pick(subtypesof(path)) - - for(var/path in meteordrop) - if(path == /obj/item/organ/tongue) - meteordrop -= path - meteordrop += pick(typesof(path)) - return ..() - -/obj/effect/meteor/meaty/make_debris() - ..() - new meteorgibs(get_turf(src)) - - -/obj/effect/meteor/meaty/ram_turf(turf/T) - if(!isspaceturf(T)) - new /obj/effect/decal/cleanable/blood(T) - -/obj/effect/meteor/meaty/Bump(atom/A) - A.ex_act(hitpwr) - get_hit() - -//Meaty Ore Xeno edition -/obj/effect/meteor/meaty/xeno - color = "#5EFF00" - meteordrop = list(/obj/item/reagent_containers/food/snacks/meat/slab/xeno, /obj/item/organ/tongue/alien) - meteorgibs = /obj/effect/gibspawner/xeno - -/obj/effect/meteor/meaty/xeno/Initialize() - meteordrop += subtypesof(/obj/item/organ/alien) - return ..() - -/obj/effect/meteor/meaty/xeno/ram_turf(turf/T) - if(!isspaceturf(T)) - new /obj/effect/decal/cleanable/xenoblood(T) - -//Station buster Tunguska -/obj/effect/meteor/tunguska - name = "tunguska meteor" - icon_state = "flaming" - desc = "" - hits = 30 - hitpwr = 1 - heavy = 1 - meteorsound = 'sound/blank.ogg' - meteordrop = list(/obj/item/stack/ore/plasma) - threat = 50 - -/obj/effect/meteor/tunguska/Move() - . = ..() - if(.) - new /obj/effect/temp_visual/revenant(get_turf(src)) - -/obj/effect/meteor/tunguska/meteor_effect() - ..() - explosion(src.loc, 5, 10, 15, 20, 0) - -/obj/effect/meteor/tunguska/Bump() - ..() - if(prob(20)) - explosion(src.loc,2,4,6,8) - -////////////////////////// -//Spookoween meteors -///////////////////////// - -GLOBAL_LIST_INIT(meteorsSPOOKY, list(/obj/effect/meteor/pumpkin)) - -/obj/effect/meteor/pumpkin - name = "PUMPKING" - desc = "" - icon = 'icons/obj/meteor_spooky.dmi' - icon_state = "pumpkin" - hits = 10 - heavy = 1 - dropamt = 1 -// meteordrop = list(/obj/item/clothing/head/hardhat/pumpkinhead, /obj/item/reagent_containers/food/snacks/grown/pumpkin) - threat = 100 - -/obj/effect/meteor/pumpkin/Initialize() - . = ..() - meteorsound = pick('sound/blank.ogg') -////////////////////////// -#undef DEFAULT_METEOR_LIFETIME diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm deleted file mode 100644 index c6aecc1e32..0000000000 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ /dev/null @@ -1,174 +0,0 @@ -/datum/game_mode/nuclear - name = "nuclear emergency" - config_tag = "nuclear" - report_type = "nuclear" - false_report_weight = 10 - required_players = 30 // 30 players - 3 players to be the nuke ops = 27 players remaining - required_enemies = 2 - recommended_enemies = 5 - antag_flag = ROLE_OPERATIVE - enemy_minimum_age = 14 - - announce_span = "danger" - announce_text = "Syndicate forces are approaching the station in an attempt to destroy it!\n\ - Operatives: Secure the nuclear authentication disk and use your nuke to destroy the station.\n\ - Crew: Defend the nuclear authentication disk and ensure that it leaves with you on the emergency shuttle." - - var/const/agents_possible = 5 //If we ever need more syndicate agents. - var/nukes_left = 1 // Call 3714-PRAY right now and order more nukes! Limited offer! - var/list/pre_nukeops = list() - - var/datum/team/nuclear/nuke_team - - var/operative_antag_datum_type = /datum/antagonist/nukeop - var/leader_antag_datum_type = /datum/antagonist/nukeop/leader - -/datum/game_mode/nuclear/pre_setup() - var/n_agents = min(round(num_players() / 10), antag_candidates.len, agents_possible) - if(n_agents >= required_enemies) - for(var/i = 0, i < n_agents, ++i) - var/datum/mind/new_op = pick_n_take(antag_candidates) - pre_nukeops += new_op - new_op.assigned_role = "Nuclear Operative" - new_op.special_role = "Nuclear Operative" - log_game("[key_name(new_op)] has been selected as a nuclear operative") - return TRUE - else - setup_error = "Not enough nuke op candidates" - return FALSE -//////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////// - -/datum/game_mode/nuclear/post_setup() - //Assign leader - var/datum/mind/leader_mind = pre_nukeops[1] - var/datum/antagonist/nukeop/L = leader_mind.add_antag_datum(leader_antag_datum_type) - nuke_team = L.nuke_team - //Assign the remaining operatives - for(var/i = 2 to pre_nukeops.len) - var/datum/mind/nuke_mind = pre_nukeops[i] - nuke_mind.add_antag_datum(operative_antag_datum_type) - return ..() - -/datum/game_mode/nuclear/OnNukeExplosion(off_station) - ..() - nukes_left-- - -/datum/game_mode/nuclear/check_win() - if (nukes_left == 0) - return TRUE - return ..() - -/datum/game_mode/nuclear/check_finished() - //Keep the round going if ops are dead but bomb is ticking. - if(nuke_team.operatives_dead()) - for(var/obj/machinery/nuclearbomb/N in GLOB.nuke_list) - if(N.proper_bomb && (N.timing || N.exploding)) - return FALSE - return ..() - -/datum/game_mode/nuclear/set_round_result() - ..() - var result = nuke_team.get_result() - switch(result) - if(NUKE_RESULT_FLUKE) - SSticker.mode_result = "loss - syndicate nuked - disk secured" - SSticker.news_report = NUKE_SYNDICATE_BASE - if(NUKE_RESULT_NUKE_WIN) - SSticker.mode_result = "win - syndicate nuke" - SSticker.news_report = STATION_NUKED - if(NUKE_RESULT_NOSURVIVORS) - SSticker.mode_result = "halfwin - syndicate nuke - did not evacuate in time" - SSticker.news_report = STATION_NUKED - if(NUKE_RESULT_WRONG_STATION) - SSticker.mode_result = "halfwin - blew wrong station" - SSticker.news_report = NUKE_MISS - if(NUKE_RESULT_WRONG_STATION_DEAD) - SSticker.mode_result = "halfwin - blew wrong station - did not evacuate in time" - SSticker.news_report = NUKE_MISS - if(NUKE_RESULT_CREW_WIN_SYNDIES_DEAD) - SSticker.mode_result = "loss - evacuation - disk secured - syndi team dead" - SSticker.news_report = OPERATIVES_KILLED - if(NUKE_RESULT_CREW_WIN) - SSticker.mode_result = "loss - evacuation - disk secured" - SSticker.news_report = OPERATIVES_KILLED - if(NUKE_RESULT_DISK_LOST) - SSticker.mode_result = "halfwin - evacuation - disk not secured" - SSticker.news_report = OPERATIVE_SKIRMISH - if(NUKE_RESULT_DISK_STOLEN) - SSticker.mode_result = "halfwin - detonation averted" - SSticker.news_report = OPERATIVE_SKIRMISH - else - SSticker.mode_result = "halfwin - interrupted" - SSticker.news_report = OPERATIVE_SKIRMISH - -/datum/game_mode/nuclear/generate_report() - return "One of Central Command's trading routes was recently disrupted by a raid carried out by the Gorlex Marauders. They seemed to only be after one ship - a highly-sensitive \ - transport containing a nuclear fission explosive, although it is useless without the proper code and authorization disk. While the code was likely found in minutes, the only disk that \ - can activate this explosive is on your station. Ensure that it is protected at all times, and remain alert for possible intruders." - -/proc/is_nuclear_operative(mob/M) - return M && istype(M) && M.mind && M.mind.has_antag_datum(/datum/antagonist/nukeop) - -/datum/outfit/syndicate - name = "Syndicate Operative - Basic" - - uniform = /obj/item/clothing/under/syndicate - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - back = /obj/item/storage/backpack/fireproof - ears = /obj/item/radio/headset/syndicate/alt - l_pocket = /obj/item/pinpointer/nuke/syndicate - id = /obj/item/card/id/syndicate - belt = /obj/item/gun/ballistic/automatic/pistol - backpack_contents = list(/obj/item/storage/box/survival/syndie=1,\ - /obj/item/kitchen/knife/combat/survival) - - var/tc = 25 - var/command_radio = FALSE - var/uplink_type = /obj/item/uplink/nuclear - - -/datum/outfit/syndicate/leader - name = "Syndicate Leader - Basic" - id = /obj/item/card/id/syndicate/nuke_leader - gloves = /obj/item/clothing/gloves/krav_maga/combatglovesplus - r_hand = /obj/item/nuclear_challenge - command_radio = TRUE - -/datum/outfit/syndicate/no_crystals - name = "Syndicate Operative - Reinforcement" - tc = 0 - -/datum/outfit/syndicate/post_equip(mob/living/carbon/human/H) - var/obj/item/radio/R = H.ears - R.set_frequency(FREQ_SYNDICATE) - R.freqlock = TRUE - if(command_radio) - R.command = TRUE - - if(ispath(uplink_type, /obj/item/uplink/nuclear) || tc) // /obj/item/uplink/nuclear understands 0 tc - var/obj/item/U = new uplink_type(H, H.key, tc) - H.equip_to_slot_or_del(U, SLOT_IN_BACKPACK) - - var/obj/item/implant/weapons_auth/W = new/obj/item/implant/weapons_auth(H) - W.implant(H) - var/obj/item/implant/explosive/E = new/obj/item/implant/explosive(H) - E.implant(H) - H.faction |= ROLE_SYNDICATE - H.update_icons() - -/datum/outfit/syndicate/full - name = "Syndicate Operative - Full Kit" - - glasses = /obj/item/clothing/glasses/night - mask = /obj/item/clothing/mask/gas/syndicate - suit = /obj/item/clothing/suit/space/hardsuit/syndi - r_pocket = /obj/item/tank/internals/emergency_oxygen/engi - internals_slot = SLOT_R_STORE - belt = /obj/item/storage/belt/military - r_hand = /obj/item/gun/ballistic/shotgun/bulldog - backpack_contents = list(/obj/item/storage/box/survival/syndie=1,\ - /obj/item/tank/jetpack/oxygen/harness=1,\ - /obj/item/gun/ballistic/automatic/pistol=1,\ - /obj/item/kitchen/knife/combat/survival) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index c0bd092a5f..381680f105 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -302,71 +302,6 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list name = "protect nonhuman" human_check = FALSE -/datum/objective/hijack - name = "hijack" - explanation_text = "Hijack the shuttle to ensure no loyalist Nanotrasen crew escape alive and out of custody." - team_explanation_text = "Hijack the shuttle to ensure no loyalist Nanotrasen crew escape alive and out of custody. Leave no team member behind." - martyr_compatible = 0 //Technically you won't get both anyway. - -/datum/objective/hijack/check_completion() // Requires all owners to escape. - if(!SSshuttle.emergency) - return FALSE - if(SSshuttle.emergency.mode != SHUTTLE_ENDGAME) - return FALSE - var/list/datum/mind/owners = get_owners() - for(var/datum/mind/M in owners) - if(!considered_alive(M) || !SSshuttle.emergency.shuttle_areas[get_area(M.current)]) - return FALSE - return SSshuttle.emergency.is_hijacked() - -/datum/objective/block - name = "no organics on shuttle" - explanation_text = "Do not allow any organic lifeforms to escape on the shuttle alive." - martyr_compatible = 1 - -/datum/objective/block/check_completion() - if(!SSshuttle.emergency) - return FALSE - if(SSshuttle.emergency.mode != SHUTTLE_ENDGAME) - return TRUE - for(var/mob/living/player in GLOB.player_list) - if(player.mind && player.stat != DEAD && !issilicon(player)) - if(get_area(player) in SSshuttle.emergency.shuttle_areas) - return FALSE - return TRUE - -/datum/objective/purge - name = "no mutants on shuttle" - explanation_text = "Ensure no mutant humanoid species are present aboard the escape shuttle." - martyr_compatible = 1 - -/datum/objective/purge/check_completion() - if(SSshuttle.emergency.mode != SHUTTLE_ENDGAME) - return TRUE - for(var/mob/living/player in GLOB.player_list) - if((get_area(player) in SSshuttle.emergency.shuttle_areas) && player.mind && player.stat != DEAD && ishuman(player)) - var/mob/living/carbon/human/H = player - if(H.dna.species.id != "human") - return FALSE - return TRUE - -/datum/objective/robot_army - name = "robot army" - explanation_text = "Have at least eight active cyborgs synced to you." - martyr_compatible = 0 - -/datum/objective/robot_army/check_completion() - var/counter = 0 - var/list/datum/mind/owners = get_owners() - for(var/datum/mind/M in owners) - if(!M.current || !isAI(M.current)) - continue - var/mob/living/silicon/ai/A = M.current - for(var/mob/living/silicon/robot/R in A.connected_robots) - if(R.stat != DEAD) - counter++ - return counter >= 8 - /datum/objective/escape/prisoner name = "survive" explanation_text = "Escape the prison." @@ -632,34 +567,6 @@ GLOBAL_LIST_EMPTY(possible_items_special) steal_target = targetinfo.targetitem -/datum/objective/download - name = "download" - -/datum/objective/download/proc/gen_amount_goal() - target_amount = rand(20,40) - update_explanation_text() - return target_amount - -/datum/objective/download/update_explanation_text() - ..() - explanation_text = "Download [target_amount] research node\s." - -/datum/objective/download/check_completion() - var/datum/techweb/checking = new - var/list/datum/mind/owners = get_owners() - for(var/datum/mind/owner in owners) - if(ismob(owner.current)) - var/mob/M = owner.current //Yeah if you get morphed and you eat a quantum tech disk with the RD's latest backup good on you soldier. - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H && (H.stat != DEAD) && istype(H.wear_armor, /obj/item/clothing/suit/space/space_ninja)) - var/obj/item/clothing/suit/space/space_ninja/S = H.wear_armor - S.stored_research.copy_research_to(checking) - var/list/otherwise = M.GetAllContents() - for(var/obj/item/disk/tech_disk/TD in otherwise) - TD.stored_research.copy_research_to(checking) - return checking.researched_nodes.len >= target_amount - /datum/objective/download/admin_edit(mob/admin) var/count = input(admin,"How many nodes ?","Nodes",target_amount) as num|null if(count) @@ -688,22 +595,7 @@ GLOBAL_LIST_EMPTY(possible_items_special) captured_amount+=1 for(var/mob/living/carbon/monkey/M in A)//Monkeys are almost worthless, you failure. captured_amount+=0.1 - for(var/mob/living/carbon/alien/larva/M in A)//Larva are important for research. - if(M.stat == DEAD) - captured_amount+=0.5 - continue - captured_amount+=1 - for(var/mob/living/carbon/alien/humanoid/M in A)//Aliens are worth twice as much as humans. - if(istype(M, /mob/living/carbon/alien/humanoid/royal/queen))//Queens are worth three times as much as humans. - if(M.stat == DEAD) - captured_amount+=1.5 - else - captured_amount+=3 - continue - if(M.stat == DEAD) - captured_amount+=1 - continue - captured_amount+=2 + return captured_amount >= target_amount /datum/objective/capture/admin_edit(mob/admin) @@ -730,126 +622,6 @@ GLOBAL_LIST_EMPTY(possible_items_special) /datum/objective/protect_object/check_completion() return !QDELETED(protect_target) -//Changeling Objectives - -/datum/objective/absorb - name = "absorb" - -/datum/objective/absorb/proc/gen_amount_goal(lowbound = 4, highbound = 6) - target_amount = rand (lowbound,highbound) - var/n_p = 1 //autowin - var/list/datum/mind/owners = get_owners() - if (SSticker.current_state == GAME_STATE_SETTING_UP) - for(var/i in GLOB.new_player_list) - var/mob/dead/new_player/P = i - if(P.ready == PLAYER_READY_TO_PLAY && !(P.mind in owners)) - n_p ++ - else if (SSticker.IsRoundInProgress()) - for(var/mob/living/carbon/human/P in GLOB.player_list) - if(!(P.mind.has_antag_datum(/datum/antagonist/changeling)) && !(P.mind in owners)) - n_p ++ - target_amount = min(target_amount, n_p) - - update_explanation_text() - return target_amount - -/datum/objective/absorb/update_explanation_text() - . = ..() - explanation_text = "Extract [target_amount] compatible genome\s." - -/datum/objective/absorb/admin_edit(mob/admin) - var/count = input(admin,"How many people to absorb?","absorb",target_amount) as num|null - if(count) - target_amount = count - update_explanation_text() - -/datum/objective/absorb/check_completion() - var/list/datum/mind/owners = get_owners() - var/absorbedcount = 0 - for(var/datum/mind/M in owners) - if(!M) - continue - var/datum/antagonist/changeling/changeling = M.has_antag_datum(/datum/antagonist/changeling) - if(!changeling || !changeling.stored_profiles) - continue - absorbedcount += changeling.absorbedcount - return absorbedcount >= target_amount - -/datum/objective/absorb_most - name = "absorb most" - explanation_text = "Extract more compatible genomes than any other Changeling." - -/datum/objective/absorb_most/check_completion() - var/list/datum/mind/owners = get_owners() - var/absorbedcount = 0 - for(var/datum/mind/M in owners) - if(!M) - continue - var/datum/antagonist/changeling/changeling = M.has_antag_datum(/datum/antagonist/changeling) - if(!changeling || !changeling.stored_profiles) - continue - absorbedcount += changeling.absorbedcount - - for(var/datum/antagonist/changeling/changeling2 in GLOB.antagonists) - if(!changeling2.owner || changeling2.owner == owner || !changeling2.stored_profiles || changeling2.absorbedcount < absorbedcount) - continue - return FALSE - return TRUE - -/datum/objective/absorb_changeling - name = "absorb changeling" - explanation_text = "Absorb another Changeling." - -/datum/objective/absorb_changeling/check_completion() - var/list/datum/mind/owners = get_owners() - for(var/datum/mind/M in owners) - if(!M) - continue - var/datum/antagonist/changeling/changeling = M.has_antag_datum(/datum/antagonist/changeling) - if(!changeling) - continue - var/total_genetic_points = changeling.geneticpoints - - for(var/datum/action/changeling/p in changeling.purchasedpowers) - total_genetic_points += p.dna_cost - - if(total_genetic_points > initial(changeling.geneticpoints)) - return TRUE - return FALSE - -//End Changeling Objectives - -/datum/objective/destroy - name = "destroy AI" - martyr_compatible = 1 - -/datum/objective/destroy/find_target(dupe_search_range) - var/list/possible_targets = active_ais(1) - var/mob/living/silicon/ai/target_ai = pick(possible_targets) - target = target_ai.mind - update_explanation_text() - return target - -/datum/objective/destroy/check_completion() - if(target && target.current) - return target.current.stat == DEAD || target.current.z > 6 || !target.current.ckey //Borgs/brains/AIs count as dead for traitor objectives. - return TRUE - -/datum/objective/destroy/update_explanation_text() - ..() - if(target && target.current) - explanation_text = "Destroy [target.name], the experimental AI." - else - explanation_text = "Free Objective" - -/datum/objective/destroy/admin_edit(mob/admin) - var/list/possible_targets = active_ais(1) - if(possible_targets.len) - var/mob/new_target = input(admin,"Select target:", "Objective target") as null|anything in sortNames(possible_targets) - target = new_target.mind - else - to_chat(admin, "No active AIs with minds.") - update_explanation_text() /datum/objective/destroy/internal var/stolen = FALSE //Have we already eliminated this target? @@ -927,163 +699,6 @@ GLOBAL_LIST_EMPTY(possible_items_special) /datum/objective/changeling_team_objective/proc/prepare() return FALSE -//Impersonate department -//Picks as many people as it can from a department (Security,Engineer,Medical,Science) -//and tasks the lings with killing and replacing them -/datum/objective/changeling_team_objective/impersonate_department - explanation_text = "Ensure X department are killed, impersonated, and replaced by Changelings" - var/command_staff_only = FALSE //if this is true, it picks command staff instead - var/list/department_minds = list() - var/list/department_real_names = list() - var/department_string = "" - - -/datum/objective/changeling_team_objective/impersonate_department/prepare() - var/result = FALSE - if(command_staff_only) - result = get_heads() - else - result = get_department_staff() - if(result) - update_explanation_text() - return TRUE - else - return FALSE - - -/datum/objective/changeling_team_objective/impersonate_department/proc/get_department_staff() - department_minds = list() - department_real_names = list() - - var/list/departments = list("Head of Security","Research Director","Chief Engineer","Chief Medical Officer") - var/department_head = pick(departments) - switch(department_head) - if("Head of Security") - department_string = "security" - if("Research Director") - department_string = "science" - if("Chief Engineer") - department_string = "engineering" - if("Chief Medical Officer") - department_string = "medical" - - var/list/lings = get_antag_minds(/datum/antagonist/changeling,TRUE) - var/ling_count = lings.len - - for(var/datum/mind/M in SSticker.minds) - if(M in lings) - continue - if(department_head in get_department_heads(M.assigned_role)) - if(ling_count) - ling_count-- - department_minds += M - department_real_names += M.current.real_name - else - break - - if(!department_minds.len) - log_game("[type] has failed to find department staff, and has removed itself. the round will continue normally") - return FALSE - return TRUE - - -/datum/objective/changeling_team_objective/impersonate_department/proc/get_heads() - department_minds = list() - department_real_names = list() - - //Needed heads is between min_lings and the maximum possible amount of command roles - //So at the time of writing, rand(3,6), it's also capped by the amount of lings there are - //Because you can't fill 6 head roles with 3 lings - var/list/lings = get_antag_minds(/datum/antagonist/changeling,TRUE) - var/needed_heads = rand(min_lings,GLOB.command_positions.len) - needed_heads = min(lings.len,needed_heads) - - var/list/heads = SSjob.get_living_heads() - for(var/datum/mind/head in heads) - if(head in lings) //Looking at you HoP. - continue - if(needed_heads) - department_minds += head - department_real_names += head.current.real_name - needed_heads-- - else - break - - if(!department_minds.len) - log_game("[type] has failed to find department heads, and has removed itself. the round will continue normally") - return FALSE - return TRUE - - -/datum/objective/changeling_team_objective/impersonate_department/update_explanation_text() - ..() - if(!department_real_names.len || !department_minds.len) - explanation_text = "Free Objective" - return //Something fucked up, give them a win - - if(command_staff_only) - explanation_text = "Ensure changelings impersonate and escape as the following heads of staff: " - else - explanation_text = "Ensure changelings impersonate and escape as the following members of \the [department_string] department: " - - var/first = 1 - for(var/datum/mind/M in department_minds) - var/string = "[M.name] the [M.assigned_role]" - if(!first) - string = ", [M.name] the [M.assigned_role]" - else - first-- - explanation_text += string - - if(command_staff_only) - explanation_text += ", while the real heads are dead. This is a team objective." - else - explanation_text += ", while the real members are dead. This is a team objective." - - -/datum/objective/changeling_team_objective/impersonate_department/check_completion() - if(!department_real_names.len || !department_minds.len) - return TRUE //Something fucked up, give them a win - - var/list/check_names = department_real_names.Copy() - - //Check each department member's mind to see if any of them made it to centcom alive, if they did it's an automatic fail - for(var/datum/mind/M in department_minds) - if(M.has_antag_datum(/datum/antagonist/changeling)) //Lings aren't picked for this, but let's be safe - continue - - if(M.current) - var/turf/mloc = get_turf(M.current) - if(mloc.onCentCom() && (M.current.stat != DEAD)) - return FALSE //A Non-ling living target got to centcom, fail - - //Check each staff member has been replaced, by cross referencing changeling minds, changeling current dna, the staff minds and their original DNA names - var/success = 0 - changelings: - for(var/datum/mind/changeling in get_antag_minds(/datum/antagonist/changeling,TRUE)) - if(success >= department_minds.len) //We did it, stop here! - return TRUE - if(ishuman(changeling.current)) - var/mob/living/carbon/human/H = changeling.current - var/turf/cloc = get_turf(changeling.current) - if(cloc && cloc.onCentCom() && (changeling.current.stat != DEAD)) //Living changeling on centcom.... - for(var/name in check_names) //Is he (disguised as) one of the staff? - if(H.dna.real_name == name) - check_names -= name //This staff member is accounted for, remove them, so the team don't succeed by escape as 7 of the same engineer - success++ //A living changeling staff member made it to centcom - continue changelings - - if(success >= department_minds.len) - return TRUE - return FALSE - -//A subtype of impersonate_department -//This subtype always picks as many command staff as it can (HoS,HoP,Cap,CE,CMO,RD) -//and tasks the lings with killing and replacing them -/datum/objective/changeling_team_objective/impersonate_department/impersonate_heads - explanation_text = "Have X or more heads of staff escape on the shuttle disguised as heads, while the real heads are dead" - command_staff_only = TRUE - //Ideally this would be all of them but laziness and unusual subtypes /proc/generate_admin_objective_list() GLOB.admin_objective_list = list() @@ -1093,16 +708,12 @@ GLOBAL_LIST_EMPTY(possible_items_special) /datum/objective/maroon, /datum/objective/debrain, /datum/objective/protect, - /datum/objective/destroy, - /datum/objective/hijack, /datum/objective/escape, /datum/objective/survive, /datum/objective/martyr, /datum/objective/steal, /datum/objective/download, - /datum/objective/nuclear, /datum/objective/capture, - /datum/objective/absorb, /datum/objective/custom ),/proc/cmp_typepaths_asc) diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm index 0d94b693c4..1b56c8daf5 100644 --- a/code/game/gamemodes/objective_items.dm +++ b/code/game/gamemodes/objective_items.dm @@ -52,30 +52,6 @@ //////////////////////////////////////////////////////////// -/datum/objective_item/steal/caplaser - name = "the captain's antique laser gun." - targetitem = /obj/item/gun/energy/laser/captain - difficulty = 5 - excludefromjob = list("Captain") - -/datum/objective_item/steal/hoslaser - name = "the head of security's personal laser gun." - targetitem = /obj/item/gun/energy/e_gun/hos - difficulty = 10 - excludefromjob = list("Head Of Security") - -/datum/objective_item/steal/handtele - name = "a hand teleporter." - targetitem = /obj/item/hand_tele - difficulty = 5 - excludefromjob = list("Captain", "Research Director") - -/datum/objective_item/steal/jetpack - name = "the Captain's jetpack." - targetitem = /obj/item/tank/jetpack/oxygen/captain - difficulty = 5 - excludefromjob = list("Captain") - /datum/objective_item/steal/magboots name = "the chief engineer's advanced magnetic boots." targetitem = /obj/item/clothing/shoes/magboots/advance @@ -94,53 +70,17 @@ difficulty = 5 excludefromjob = list("Chief Medical Officer") -/datum/objective_item/steal/nukedisc - name = "the nuclear authentication disk." - targetitem = /obj/item/disk/nuclear - difficulty = 5 - excludefromjob = list("Captain") - -/datum/objective_item/steal/nukedisc/check_special_completion(obj/item/disk/nuclear/N) - return !N.fake - /datum/objective_item/steal/reflector name = "a reflector trenchcoat." targetitem = /obj/item/clothing/suit/hooded/ablative difficulty = 3 excludefromjob = list("Head of Security", "Warden") -/datum/objective_item/steal/reactive - name = "the reactive teleport armor." - targetitem = /obj/item/clothing/suit/armor/reactive/teleport - difficulty = 5 - excludefromjob = list("Research Director") - /datum/objective_item/steal/documents name = "any set of secret documents of any organization." targetitem = /obj/item/documents //Any set of secret documents. Doesn't have to be NT's difficulty = 5 -/datum/objective_item/steal/nuke_core - name = "the heavily radioactive plutonium core from the onboard self-destruct. Take care to wear the proper safety equipment when extracting the core!" - targetitem = /obj/item/nuke_core - difficulty = 15 - -/datum/objective_item/steal/nuke_core/New() - special_equipment += /obj/item/storage/box/syndie_kit/nuke - ..() - -/datum/objective_item/steal/supermatter - name = "a sliver of a supermatter crystal. Be sure to use the proper safety equipment when extracting the sliver!" - targetitem = /obj/item/nuke_core/supermatter_sliver - difficulty = 15 - -/datum/objective_item/steal/supermatter/New() - special_equipment += /obj/item/storage/box/syndie_kit/supermatter - ..() - -/datum/objective_item/steal/supermatter/TargetExists() - return GLOB.main_supermatter_engine != null - //Items with special checks! /datum/objective_item/steal/plasma name = "28 moles of plasma (full tank)." @@ -154,18 +94,6 @@ found_amount += T.air_contents.gases[/datum/gas/plasma] ? T.air_contents.gases[/datum/gas/plasma][MOLES] : 0 return found_amount>=target_amount - -/datum/objective_item/steal/functionalai - name = "a functional AI." - targetitem = /obj/item/aicard - difficulty = 20 //beyond the impossible - -/datum/objective_item/steal/functionalai/check_special_completion(obj/item/aicard/C) - for(var/mob/living/silicon/ai/A in C) - if(isAI(A) && A.stat != DEAD) //See if any AI's are alive inside that card. - return 1 - return 0 - /datum/objective_item/steal/blueprints name = "the station blueprints." targetitem = /obj/item/areaeditor/blueprints @@ -221,11 +149,6 @@ targetitem = /obj/item/pinpointer difficulty = 10 -/datum/objective_item/special/aegun - name = "an advanced energy gun." - targetitem = /obj/item/gun/energy/e_gun/nuclear - difficulty = 10 - /datum/objective_item/special/ddrill name = "a diamond drill." targetitem = /obj/item/pickaxe/drill/diamonddrill @@ -236,16 +159,6 @@ targetitem = /obj/item/storage/backpack/holding difficulty = 10 -/datum/objective_item/special/hypercell - name = "a hyper-capacity power cell." - targetitem = /obj/item/stock_parts/cell/hyper - difficulty = 5 - -/datum/objective_item/special/laserpointer - name = "a laser pointer." - targetitem = /obj/item/laser_pointer - difficulty = 5 - /datum/objective_item/special/corgimeat name = "a piece of corgi meat." targetitem = /obj/item/reagent_containers/food/snacks/meat/slab/corgi diff --git a/code/game/gamemodes/objectives_rogue.dm b/code/game/gamemodes/objectives_rogue.dm index cb3ae84474..30f505aeea 100644 --- a/code/game/gamemodes/objectives_rogue.dm +++ b/code/game/gamemodes/objectives_rogue.dm @@ -15,12 +15,12 @@ if(C) explanation_text = "Feed [C.banditgoal] mammon to an idol of greed." else - explanation_text = "Pray to ZIZO." + explanation_text = "Pray to Matthios." /datum/objective/delf name = "delf" - explanation_text = "Feed honeys to the mother." + explanation_text = "Feed honeys to the silkseed bearer." /datum/objective/delf/check_completion() if(SSticker.mode) @@ -33,9 +33,9 @@ if(SSticker.mode) var/datum/game_mode/chaosmode/C = SSticker.mode if(C) - explanation_text = "Feed [C.delfgoal] honeys to the mother." + explanation_text = "Feed [C.delfgoal] honeys to the silkseed bearer." else - explanation_text = "Pray to ZIZO." + explanation_text = "Pray to Ananshor." /datum/objective/rt_maniac name = "slaying" @@ -50,7 +50,7 @@ /datum/objective/werewolf name = "conquer" - explanation_text = "Destroy all elder vampires in ROGUETOWN. I can sniff them in my true form." + explanation_text = "The hubric arrogant rot of Noc stains the town of Rockhill, I must slay the elder vampires. I can smell their decay in my true form." team_explanation_text = "" triumph_count = 5 @@ -62,7 +62,7 @@ /datum/objective/vampire name = "conquer" - explanation_text = "Destroy all alpha werewolves in ROGUETOWN. I can detect them in my true form." + explanation_text = "The savage maddening stink of Dendorian perversion fluxes within Rockhill. Destroying the werbeast is imperative, I can sense them in my true form." team_explanation_text = "" triumph_count = 5 diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm deleted file mode 100644 index cca64be11d..0000000000 --- a/code/game/gamemodes/revolution/revolution.dm +++ /dev/null @@ -1,218 +0,0 @@ -// To add a rev to the list of revolutionaries, make sure it's rev (with if(SSticker.mode.name == "revolution)), -// then call SSticker.mode:add_revolutionary(_THE_PLAYERS_MIND_) -// nothing else needs to be done, as that proc will check if they are a valid target. -// Just make sure the converter is a head before you call it! -// To remove a rev (from brainwashing or w/e), call SSticker.mode:remove_revolutionary(_THE_PLAYERS_MIND_), -// this will also check they're not a head, so it can just be called freely -// If the game somtimes isn't registering a win properly, then SSticker.mode.check_win() isn't being called somewhere. - - -/datum/game_mode/revolution - name = "revolution" - config_tag = "revolution" - report_type = "revolution" - antag_flag = ROLE_REV - false_report_weight = 10 - restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer") - required_jobs = list(list("Captain"=1),list("Head of Personnel"=1),list("Head of Security"=1),list("Chief Engineer"=1),list("Research Director"=1),list("Chief Medical Officer"=1)) //Any head present - required_players = 30 - required_enemies = 2 - recommended_enemies = 3 - enemy_minimum_age = 14 - - announce_span = "Revolution" - announce_text = "Some crewmembers are attempting a coup!\n\ - Revolutionaries: Expand your cause and overthrow the heads of staff by execution or otherwise.\n\ - Crew: Prevent the revolutionaries from taking over the station." - - var/finished = 0 - var/check_counter = 0 - var/max_headrevs = 3 - var/datum/team/revolution/revolution - var/list/datum/mind/headrev_candidates = list() - var/end_when_heads_dead = TRUE - -/////////////////////////////////////////////////////////////////////////////// -//Gets the round setup, cancelling if there's not enough players at the start// -/////////////////////////////////////////////////////////////////////////////// -/datum/game_mode/revolution/pre_setup() - - if(CONFIG_GET(flag/protect_roles_from_antagonist)) - restricted_jobs += protected_jobs - - if(CONFIG_GET(flag/protect_assistant_from_antagonist)) - restricted_jobs += "Assistant" - - for (var/i=1 to max_headrevs) - if (antag_candidates.len==0) - break - var/datum/mind/lenin = antag_pick(antag_candidates) - antag_candidates -= lenin - headrev_candidates += lenin - lenin.restricted_roles = restricted_jobs - - if(headrev_candidates.len < required_enemies) - setup_error = "Not enough headrev candidates" - return FALSE - - for(var/antag in headrev_candidates) - GLOB.pre_setup_antags += antag - return TRUE - -/datum/game_mode/revolution/post_setup() - var/list/heads = SSjob.get_living_heads() - var/list/sec = SSjob.get_living_sec() - var/weighted_score = min(max(round(heads.len - ((8 - sec.len) / 3)),1),max_headrevs) - - for(var/datum/mind/rev_mind in headrev_candidates) //People with return to lobby may still be in the lobby. Let's pick someone else in that case. - if(isnewplayer(rev_mind.current)) - headrev_candidates -= rev_mind - var/list/newcandidates = shuffle(antag_candidates) - if(newcandidates.len == 0) - continue - for(var/M in newcandidates) - var/datum/mind/lenin = M - antag_candidates -= lenin - newcandidates -= lenin - if(isnewplayer(lenin.current)) //We don't want to make the same mistake again - continue - else - var/mob/Nm = lenin.current - if(Nm.job in restricted_jobs) //Don't make the HOS a replacement revhead - antag_candidates += lenin //Let's let them keep antag chance for other antags - continue - - headrev_candidates += lenin - break - - while(weighted_score < headrev_candidates.len) //das vi danya - var/datum/mind/trotsky = pick(headrev_candidates) - antag_candidates += trotsky - headrev_candidates -= trotsky - - revolution = new() - - for(var/datum/mind/rev_mind in headrev_candidates) - log_game("[key_name(rev_mind)] has been selected as a head rev") - var/datum/antagonist/rev/head/new_head = new() - new_head.give_flash = TRUE - new_head.give_hud = TRUE - new_head.remove_clumsy = TRUE - rev_mind.add_antag_datum(new_head,revolution) - GLOB.pre_setup_antags -= rev_mind - - revolution.update_objectives() - revolution.update_heads() - - SSshuttle.registerHostileEnvironment(src) - ..() - - -/datum/game_mode/revolution/process() - check_counter++ - if(check_counter >= 5) - if(!finished) - SSticker.mode.check_win() - check_counter = 0 - return FALSE - -////////////////////////////////////// -//Checks if the revs have won or not// -////////////////////////////////////// -/datum/game_mode/revolution/check_win() - if(check_rev_victory()) - finished = 1 - else if(check_heads_victory()) - finished = 2 - return - -/////////////////////////////// -//Checks if the round is over// -/////////////////////////////// -/datum/game_mode/revolution/check_finished() - if(CONFIG_GET(keyed_list/continuous)["revolution"]) - if(finished) - SSshuttle.clearHostileEnvironment(src) - return ..() - if(finished != 0 && end_when_heads_dead) - return TRUE - else - return ..() - -/////////////////////////////////////////////////// -//Deals with converting players to the revolution// -/////////////////////////////////////////////////// -/proc/is_revolutionary(mob/M) - return M && istype(M) && M.mind && M.mind.has_antag_datum(/datum/antagonist/rev) - -/proc/is_head_revolutionary(mob/M) - return M && istype(M) && M.mind && M.mind.has_antag_datum(/datum/antagonist/rev/head) - -////////////////////////// -//Checks for rev victory// -////////////////////////// -/datum/game_mode/revolution/proc/check_rev_victory() - for(var/datum/objective/mutiny/objective in revolution.objectives) - if(!(objective.check_completion())) - return FALSE - return TRUE - -///////////////////////////// -//Checks for a head victory// -///////////////////////////// -/datum/game_mode/revolution/proc/check_heads_victory() - for(var/datum/mind/rev_mind in revolution.head_revolutionaries()) - var/turf/T = get_turf(rev_mind.current) - if(!considered_afk(rev_mind) && considered_alive(rev_mind) && is_station_level(T.z)) - if(ishuman(rev_mind.current) || ismonkey(rev_mind.current)) - return FALSE - return TRUE - - -/datum/game_mode/revolution/set_round_result() - ..() - if(finished == 1) - SSticker.mode_result = "win - heads killed" - SSticker.news_report = REVS_WIN - else if(finished == 2) - SSticker.mode_result = "loss - rev heads killed" - SSticker.news_report = REVS_LOSE - -//TODO What should be displayed for revs in non-rev rounds -/datum/game_mode/revolution/special_report() - if(finished == 1) - return "
The heads of staff were killed or exiled! The revolutionaries win!
" - else if(finished == 2) - return "
The heads of staff managed to stop the revolution!
" - -/datum/game_mode/revolution/generate_report() - return "Employee unrest has spiked in recent weeks, with several attempted mutinies on heads of staff. Some crew have been observed using flashbulb devices to blind their colleagues, \ - who then follow their orders without question and work towards dethroning departmental leaders. Watch for behavior such as this with caution. If the crew attempts a mutiny, you and \ - your heads of staff are fully authorized to execute them using lethal weaponry - they will be later cloned and interrogated at Central Command." - -/datum/game_mode/revolution/extended - name = "extended_revolution" - config_tag = "extended_revolution" - end_when_heads_dead = FALSE - -/datum/game_mode/revolution/speedy - name = "speedy_revolution" - config_tag = "speedy_revolution" - end_when_heads_dead = FALSE - var/endtime = null - var/fuckingdone = FALSE - -/datum/game_mode/revolution/speedy/pre_setup() - endtime = world.time + 20 MINUTES - return ..() - -/datum/game_mode/revolution/speedy/process() - . = ..() - if(check_counter == 0) - if (world.time > endtime && !fuckingdone) - fuckingdone = TRUE - for (var/obj/machinery/nuclearbomb/N in GLOB.nuke_list) - if (!N.timing) - N.timer_set = 200 - N.set_safety() - N.set_active() diff --git a/code/game/gamemodes/roguetown/chaosmode.dm b/code/game/gamemodes/roguetown/chaosmode.dm index a9f90a6d33..b73b8dec21 100644 --- a/code/game/gamemodes/roguetown/chaosmode.dm +++ b/code/game/gamemodes/roguetown/chaosmode.dm @@ -214,13 +214,13 @@ blockme = TRUE if(rebelguy.assigned_role in GLOB.garrison_positions) blockme = TRUE - if(rebelguy.assigned_role in GLOB.noble_positions) + if(rebelguy.assigned_role in GLOB.court_positions) blockme = TRUE if(rebelguy.assigned_role in GLOB.apprentices_positions) blockme = TRUE if(rebelguy.assigned_role in GLOB.church_positions) blockme = TRUE - if(rebelguy.assigned_role in GLOB.serf_positions) + if(rebelguy.assigned_role in GLOB.towner_positions) blockme = TRUE if(blockme) continue @@ -235,7 +235,7 @@ /datum/game_mode/chaosmode/proc/pick_maniac() restricted_jobs = list("King", - "Queen", + "Consort", "Prisoner", "Dungeoneer", "Witch Hunter", diff --git a/code/game/gamemodes/roguetown/roguetown.dm b/code/game/gamemodes/roguetown/roguetown.dm index 215dc5dcab..6fadd92495 100644 --- a/code/game/gamemodes/roguetown/roguetown.dm +++ b/code/game/gamemodes/roguetown/roguetown.dm @@ -77,12 +77,12 @@ GLOBAL_LIST_INIT(roguegamemodes, list("Rebellion", "Vampire Lord", "Extended", " if(headrebdecree) return TRUE - check_for_lord() +// check_for_lord() if(ttime > 280 MINUTES) //3 hour cutoff return TRUE -/datum/game_mode/chaosmode/proc/check_for_lord() +/* /datum/game_mode/chaosmode/proc/check_for_lord() if(world.time < next_check_lord) return next_check_lord = world.time + 1 MINUTES @@ -106,7 +106,7 @@ GLOBAL_LIST_INIT(roguegamemodes, list("Rebellion", "Vampire Lord", "Extended", " addomen("nolord") return FALSE else - return TRUE + return TRUE */ /datum/game_mode/chaosmode/pre_setup() if(allmig || roguefight) @@ -212,11 +212,11 @@ GLOBAL_LIST_INIT(roguegamemodes, list("Rebellion", "Vampire Lord", "Extended", " break if(!(bandaids in allantags)) // We don't want to double dip... I guess? Two birds one stone tho, A already bandit check would check pre_bandits continue - if(bandaids.assigned_role in GLOB.noble_positions) // Job cat string stoppers + if(bandaids.assigned_role in GLOB.court_positions) // Job cat string stoppers continue if(bandaids.assigned_role in GLOB.church_positions) // Many of these guys vanishing would suck continue - if(bandaids.assigned_role in GLOB.serf_positions) // Many of these guys vanishing would suck + if(bandaids.assigned_role in GLOB.towner_positions) // Many of these guys vanishing would suck continue allantags -= bandaids @@ -249,13 +249,13 @@ GLOBAL_LIST_INIT(roguegamemodes, list("Rebellion", "Vampire Lord", "Extended", " blockme = TRUE if(rebelguy.assigned_role in GLOB.garrison_positions) blockme = TRUE - if(rebelguy.assigned_role in GLOB.noble_positions) + if(rebelguy.assigned_role in GLOB.court_positions) blockme = TRUE if(rebelguy.assigned_role in GLOB.apprentices_positions) blockme = TRUE if(rebelguy.assigned_role in GLOB.church_positions) blockme = TRUE - if(rebelguy.assigned_role in GLOB.serf_positions) + if(rebelguy.assigned_role in GLOB.towner_positions) blockme = TRUE if(blockme) continue @@ -270,7 +270,7 @@ GLOBAL_LIST_INIT(roguegamemodes, list("Rebellion", "Vampire Lord", "Extended", " /datum/game_mode/chaosmode/proc/pick_maniac() restricted_jobs = list("King", - "Queen", + "Consort", "Merchant", "Priest") antag_candidates = get_players_for_role(ROLE_NBEAST) @@ -299,7 +299,7 @@ GLOBAL_LIST_INIT(roguegamemodes, list("Rebellion", "Vampire Lord", "Extended", " /datum/game_mode/chaosmode/proc/pick_cultist() var/remaining = 3 // 1 leader, 2 lackeys :) restricted_jobs = list("King", - "Queen", + "Consort", "Merchant", "Priest") antag_candidates = get_players_for_role(ROLE_ZIZOIDCULTIST) @@ -340,7 +340,7 @@ GLOBAL_LIST_INIT(roguegamemodes, list("Rebellion", "Vampire Lord", "Extended", " var/blockme = FALSE if(!(vampire in allantags)) blockme = TRUE - if(vampire.assigned_role in GLOB.noble_positions) + if(vampire.assigned_role in GLOB.court_positions) continue if(vampire.assigned_role in GLOB.apprentices_positions) blockme = TRUE @@ -372,7 +372,7 @@ GLOBAL_LIST_INIT(roguegamemodes, list("Rebellion", "Vampire Lord", "Extended", " var/blockme = FALSE if(!(werewolf in allantags)) blockme = TRUE - if(werewolf.assigned_role in GLOB.noble_positions) + if(werewolf.assigned_role in GLOB.court_positions) blockme = TRUE if(werewolf.assigned_role in GLOB.apprentices_positions) blockme = TRUE diff --git a/code/game/gamemodes/roguetown/roguewar.dm b/code/game/gamemodes/roguetown/roguewar.dm index 5015c36cf8..d8985e18b8 100644 --- a/code/game/gamemodes/roguetown/roguewar.dm +++ b/code/game/gamemodes/roguetown/roguewar.dm @@ -210,13 +210,13 @@ break if(rebelguy.assigned_role in GLOB.garrison_positions) found = FALSE - if(rebelguy.assigned_role in GLOB.noble_positions) + if(rebelguy.assigned_role in GLOB.court_positions) found = FALSE if(rebelguy.assigned_role in GLOB.apprentices_positions) found = FALSE if(rebelguy.assigned_role in GLOB.church_positions) found = FALSE - if(rebelguy.assigned_role in GLOB.serf_positions) + if(rebelguy.assigned_role in GLOB.towner_positions) found = FALSE if(!found) continue diff --git a/code/game/gamemodes/sandbox/airlock_maker.dm b/code/game/gamemodes/sandbox/airlock_maker.dm deleted file mode 100644 index 76d9f150a8..0000000000 --- a/code/game/gamemodes/sandbox/airlock_maker.dm +++ /dev/null @@ -1,141 +0,0 @@ -/* - This is for the sandbox for now, - maybe useful later for an actual thing? - -Sayu -*/ - -/obj/structure/door_assembly - var/datum/airlock_maker/maker = null - -/obj/structure/door_assembly/attack_hand() - . = ..() - if(.) - return - if(maker) - maker.interact() - -/datum/airlock_maker - var/obj/structure/door_assembly/linked = null - - var/list/access_used = null - var/require_all = 1 - - var/paintjob = "none" - var/glassdoor = 0 - - var/doorname = "airlock" - -/datum/airlock_maker/New(atom/target_loc) - linked = new(target_loc) - linked.maker = src - linked.anchored = FALSE - access_used = list() - - interact() - -/datum/airlock_maker/proc/linkpretty(href,desc,active) - if(!desc) - var/static/list/defaults = list("No","Yes") - desc = defaults[active+1] - if(active) - return "[desc]" - return "[desc]" - -/datum/airlock_maker/proc/interact() - var/list/leftcolumn = list() - var/list/rightcolumn = list() - leftcolumn += "Required Access" - for(var/access in get_all_accesses()) - leftcolumn += linkpretty("access=[access]",get_access_desc(access),access in access_used) - leftcolumn += "Require all listed accesses: [linkpretty("reqall",null,require_all)]" - - rightcolumn += "Paintjob" - for(var/option in list("none","engineering","atmos","security","command","medical","research","mining","maintenance","external","highsecurity")) - rightcolumn += linkpretty("paint=[option]",option,option == paintjob) - rightcolumn += "Glass door: " + linkpretty("glass",null,glassdoor) + "

" - var/length = max(leftcolumn.len,rightcolumn.len) - - var/dat = "You may move the model airlock around. A new airlock will be built in its space when you click done, below.

" - dat += "Door name: \"[doorname]\"" - dat += "" - for(var/i=1; i<=length; i++) - dat += "" - - dat += "
" - if(i<=leftcolumn.len) - dat += leftcolumn[i] - dat += "" - if(i<=rightcolumn.len) - dat += rightcolumn[i] - dat += "

Finalize Airlock Construction | Cancel and Destroy Airlock" - usr << browse(dat,"window=airlockmaker") - -/datum/airlock_maker/Topic(href,list/href_list) - if(!usr) - return - if(!src || !linked || !linked.loc) - usr << browse(null,"window=airlockmaker") - return - - if("rename" in href_list) - var/newname = stripped_input(usr,"New airlock name:","Name the airlock",doorname) - if(newname) - doorname = newname - if("access" in href_list) - var/value = text2num(href_list["access"]) - access_used ^= value - if("reqall" in href_list) - require_all = !require_all - if("paint" in href_list) - paintjob = href_list["paint"] - if("glass" in href_list) - glassdoor = !glassdoor - - if("cancel" in href_list) - usr << browse(null,"window=airlockmaker") - qdel(linked) - qdel(src) - return - - if("done" in href_list) - usr << browse(null,"window=airlockmaker") - var/turf/t_loc = linked.loc - qdel(linked) - if(!istype(t_loc)) - return - - var/target_type = "/obj/machinery/door/airlock" - if(glassdoor) - if(paintjob != "none") - if(paintjob in list("external","highsecurity","maintenance")) // no glass version - target_type += "/[paintjob]" - else - target_type += "/glass_[paintjob]" - else - target_type += "/glass" - else if(paintjob != "none") - target_type += "/[paintjob]" - var/final = target_type - target_type = text2path(final) - if(!target_type) - to_chat(usr, "Didn't work, contact Sayu with this: [final]") - usr << browse(null,"window=airlockmaker") - return - - var/obj/machinery/door/D = new target_type(t_loc) - - D.name = doorname - - if(access_used.len == 0) - D.req_access = null - D.req_one_access = null - else if(require_all) - D.req_access = access_used.Copy() - D.req_one_access = null - else - D.req_access = null - D.req_one_access = access_used.Copy() - - return - - interact() diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index fae21741cd..03f49de886 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -23,9 +23,8 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) //items that shouldn't spawn on the floor because they would bug or act weird var/static/list/spawn_forbidden = list( /obj/item/tk_grab, /obj/item/implant, // not implanter, the actual thing that is inside you - /obj/item/assembly, /obj/item/onetankbomb, /obj/item/pda/ai, - /obj/item/smallDelivery, /obj/projectile, - /obj/item/borg/sight, /obj/item/borg/stun, /obj/item/robot_module) + /obj/item/assembly, /obj/item/onetankbomb, + /obj/item/smallDelivery, /obj/projectile) /datum/hSB/proc/update() var/static/list/hrefs = list( @@ -47,11 +46,7 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) "Spawn 50 Plasteel" = "hsbplasteel", "Spawn 50 Reinforced Glass" = "hsbrglass", "Spawn 50 Glass" = "hsbglass", - "Spawn Full Cable Coil" = "hsbspawn&path=[/obj/item/stack/cable_coil]", - "Spawn Hyper Capacity Power Cell" = "hsbspawn&path=[/obj/item/stock_parts/cell/hyper]", - "Spawn Inf. Capacity Power Cell" = "hsbspawn&path=[/obj/item/stock_parts/cell/infinite]", "Spawn Rapid Construction Device" = "hsbrcd", - "Spawn RCD Ammo" = "hsb_safespawn&path=[/obj/item/rcd_ammo]", "Spawn Airlock" = "hsbairlock", "Miscellaneous", @@ -60,9 +55,6 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) "Spawn Water Tank" = "hsbspawn&path=[/obj/structure/reagent_dispensers/watertank]", "Bots", - "Spawn Cleanbot" = "hsbspawn&path=[/mob/living/simple_animal/bot/cleanbot]", - "Spawn Floorbot" = "hsbspawn&path=[/mob/living/simple_animal/bot/floorbot]", - "Spawn Medbot" = "hsbspawn&path=[/mob/living/simple_animal/bot/medbot]", "Canisters", "Spawn O2 Canister" = "hsbspawn&path=[/obj/machinery/portable_atmospherics/canister/oxygen]", @@ -140,7 +132,6 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) P.wear_armor.layer = initial(P.wear_armor.layer) P.wear_armor.plane = initial(P.wear_armor.plane) P.wear_armor = null - P.wear_armor = new/obj/item/clothing/suit/space(P) P.wear_armor.layer = ABOVE_HUD_LAYER P.wear_armor.plane = ABOVE_HUD_PLANE P.update_inv_wear_suit() @@ -167,7 +158,6 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) P.back.layer = initial(P.back.layer) P.back.plane = initial(P.back.plane) P.back = null - P.back = new/obj/item/tank/jetpack/oxygen(P) P.back.layer = ABOVE_HUD_LAYER P.back.plane = ABOVE_HUD_PLANE P.update_inv_back() @@ -207,21 +197,6 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) ID.access = get_all_accesses() ID.update_label() - // - // RCD - starts with full clip - // Spawn check due to grief potential (destroying floors, walls, etc) - // - if("hsbrcd") - if(!GLOB.hsboxspawn) return - - new/obj/item/construction/rcd/combat(usr.loc) - - // - // New sandbox airlock maker - // - if("hsbairlock") - new /datum/airlock_maker(usr.loc) - // // Object spawn window // diff --git a/code/game/gamemodes/traitor/double_agents.dm b/code/game/gamemodes/traitor/double_agents.dm deleted file mode 100644 index 7e3db6e86c..0000000000 --- a/code/game/gamemodes/traitor/double_agents.dm +++ /dev/null @@ -1,83 +0,0 @@ -/datum/game_mode - var/list/target_list = list() - var/list/late_joining_list = list() - -/datum/game_mode/traitor/internal_affairs - name = "Internal Affairs" - config_tag = "internal_affairs" - report_type = "internal_affairs" - false_report_weight = 10 - required_players = 25 - required_enemies = 5 - recommended_enemies = 8 - reroll_friendly = 0 - traitor_name = "Nanotrasen Internal Affairs Agent" - antag_flag = ROLE_INTERNAL_AFFAIRS - - traitors_possible = 10 //hard limit on traitors if scaling is turned off - num_modifier = 4 // Four additional traitors - antag_datum = /datum/antagonist/traitor/internal_affairs - - announce_text = "There are Nanotrasen Internal Affairs Agents trying to kill each other!\n\ - IAA: Eliminate your targets and protect yourself!\n\ - Crew: Stop the IAA agents before they can cause too much mayhem." - - - -/datum/game_mode/traitor/internal_affairs/post_setup() - var/i = 0 - for(var/datum/mind/traitor in pre_traitors) - i++ - if(i + 1 > pre_traitors.len) - i = 0 - target_list[traitor] = pre_traitors[i+1] - ..() - - -/datum/game_mode/traitor/internal_affairs/add_latejoin_traitor(datum/mind/character) - - check_potential_agents() - - // As soon as we get 3 or 4 extra latejoin traitors, make them traitors and kill each other. - if(late_joining_list.len >= rand(3, 4)) - // True randomness - shuffle_inplace(late_joining_list) - // Reset the target_list, it'll be used again in force_traitor_objectives - target_list = list() - - // Basically setting the target_list for who is killing who - var/i = 0 - for(var/datum/mind/traitor in late_joining_list) - i++ - if(i + 1 > late_joining_list.len) - i = 0 - target_list[traitor] = late_joining_list[i + 1] - traitor.special_role = traitor_name - - // Now, give them their targets - for(var/datum/mind/traitor in target_list) - ..(traitor) - - late_joining_list = list() - else - late_joining_list += character - return - -/datum/game_mode/traitor/internal_affairs/proc/check_potential_agents() - - for(var/M in late_joining_list) - if(istype(M, /datum/mind)) - var/datum/mind/agent_mind = M - if(ishuman(agent_mind.current)) - var/mob/living/carbon/human/H = agent_mind.current - if(H.stat != DEAD) - if(H.client) - continue // It all checks out. - - // If any check fails, remove them from our list - late_joining_list -= M - - -/datum/game_mode/traitor/internal_affairs/generate_report() - return "Nanotrasen denies any accusations of placing internal affairs agents onboard your station to eliminate inconvenient employees. Any further accusations against CentCom for such \ - actions will be met with a conversation with an official internal affairs agent." diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm deleted file mode 100644 index 2f43bd5936..0000000000 --- a/code/game/machinery/Beacon.dm +++ /dev/null @@ -1,48 +0,0 @@ -/obj/machinery/bluespace_beacon - - icon = 'icons/obj/objects.dmi' - icon_state = "floor_beaconf" - name = "bluespace gigabeacon" - desc = "" - level = 1 // underfloor - layer = LOW_OBJ_LAYER - use_power = IDLE_POWER_USE - idle_power_usage = 0 - var/obj/item/beacon/Beacon - -/obj/machinery/bluespace_beacon/Initialize() - . = ..() - var/turf/T = loc - Beacon = new(T) - Beacon.invisibility = INVISIBILITY_MAXIMUM - - hide(T.intact) - -/obj/machinery/bluespace_beacon/Destroy() - QDEL_NULL(Beacon) - return ..() - -// update the invisibility and icon -/obj/machinery/bluespace_beacon/hide(intact) - invisibility = intact ? INVISIBILITY_MAXIMUM : 0 - updateicon() - -// update the icon_state -/obj/machinery/bluespace_beacon/proc/updateicon() - var/state="floor_beacon" - - if(invisibility) - icon_state = "[state]f" - - else - icon_state = "[state]" - -/obj/machinery/bluespace_beacon/process() - if(!Beacon) - var/turf/T = loc - Beacon = new(T) - Beacon.invisibility = INVISIBILITY_MAXIMUM - else if (Beacon.loc != loc) - Beacon.forceMove(loc) - - updateicon() diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm deleted file mode 100644 index 0aeea57788..0000000000 --- a/code/game/machinery/PDApainter.dm +++ /dev/null @@ -1,145 +0,0 @@ -/obj/machinery/pdapainter - name = "\improper PDA painter" - desc = "" - icon = 'icons/obj/pda.dmi' - icon_state = "pdapainter" - density = TRUE - max_integrity = 200 - var/obj/item/pda/storedpda = null - var/list/colorlist = list() - -/obj/machinery/pdapainter/update_icon_state() - if(stat & BROKEN) - icon_state = "[initial(icon_state)]-broken" - return - - if(powered()) - icon_state = initial(icon_state) - else - icon_state = "[initial(icon_state)]-off" - -/obj/machinery/pdapainter/update_overlays() - . = ..() - - if(stat & BROKEN) - return - - if(storedpda) - . += "[initial(icon_state)]-closed" - -/obj/machinery/pdapainter/Initialize() - . = ..() - var/list/blocked = list( - /obj/item/pda/ai/pai, - /obj/item/pda/ai, - /obj/item/pda/heads, - /obj/item/pda/clear, - /obj/item/pda/syndicate, - /obj/item/pda/chameleon, - /obj/item/pda/chameleon/broken) - - for(var/P in typesof(/obj/item/pda) - blocked) - var/obj/item/pda/D = new P - - //D.name = "PDA Style [colorlist.len+1]" //Gotta set the name, otherwise it all comes up as "PDA" - D.name = D.icon_state //PDAs don't have unique names, but using the sprite names works. - - src.colorlist += D - -/obj/machinery/pdapainter/Destroy() - QDEL_NULL(storedpda) - return ..() - -/obj/machinery/pdapainter/on_deconstruction() - if(storedpda) - storedpda.forceMove(loc) - storedpda = null - -/obj/machinery/pdapainter/contents_explosion(severity, target) - if(storedpda) - storedpda.ex_act(severity, target) - -/obj/machinery/pdapainter/handle_atom_del(atom/A) - if(A == storedpda) - storedpda = null - update_icon() - -/obj/machinery/pdapainter/attackby(obj/item/O, mob/user, params) - if(stat & BROKEN) - if(O.tool_behaviour == TOOL_WELDER && user.used_intent.type != INTENT_HARM) - if(!O.tool_start_check(user, amount=0)) - return - user.visible_message("[user] is repairing [src].", \ - "I begin repairing [src]...", \ - "I hear welding.") - if(O.use_tool(src, user, 40, volume=50)) - if(!(stat & BROKEN)) - return - to_chat(user, "I repair [src].") - stat &= ~BROKEN - obj_integrity = max_integrity - update_icon() - - else - return ..() - - else if(default_unfasten_wrench(user, O)) - power_change() - return - - else if(istype(O, /obj/item/pda)) - if(storedpda) - to_chat(user, "There is already a PDA inside!") - return - else if(!user.transferItemToLoc(O, src)) - return - storedpda = O - O.add_fingerprint(user) - update_icon() - - else - return ..() - -/obj/machinery/pdapainter/deconstruct(disassembled = TRUE) - obj_break() - -/obj/machinery/pdapainter/attack_hand(mob/user) - . = ..() - if(.) - return - - if(storedpda) - if(stat & BROKEN) //otherwise the PDA is stuck until repaired - ejectpda() - to_chat(user, "I manage to eject the loaded PDA.") - else - var/obj/item/pda/P - P = input(user, "Select your color!", "PDA Painting") as null|anything in sortNames(colorlist) - if(!P) - return - if(!in_range(src, user)) - return - if(!storedpda)//is the pda still there? - return - storedpda.icon_state = P.icon_state - storedpda.desc = P.desc - ejectpda() - - else - to_chat(user, "[src] is empty!") - - -/obj/machinery/pdapainter/verb/ejectpda() - set name = "Eject PDA" - set hidden = 1 - set src in oview(1) - - if(usr.stat || usr.restrained()) - return - - if(storedpda) - storedpda.forceMove(drop_location()) - storedpda = null - update_icon() - else - to_chat(usr, "[src] is empty!") diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm deleted file mode 100644 index 68bb233cb1..0000000000 --- a/code/game/machinery/Sleeper.dm +++ /dev/null @@ -1,281 +0,0 @@ -/obj/machinery/sleep_console - name = "sleeper console" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "console" - density = FALSE - -/obj/machinery/sleeper - name = "sleeper" - desc = "" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - density = FALSE - state_open = TRUE - circuit = /obj/item/circuitboard/machine/sleeper - ui_x = 375 - ui_y = 550 - - var/efficiency = 1 - var/min_health = -25 - var/list/available_chems - var/controls_inside = FALSE - var/list/possible_chems = list( - list(/datum/reagent/medicine/epinephrine, /datum/reagent/medicine/morphine, /datum/reagent/medicine/C2/convermol, /datum/reagent/medicine/C2/libital, /datum/reagent/medicine/C2/aiuri), - list(/datum/reagent/medicine/oculine,/datum/reagent/medicine/inacusiate), - list(/datum/reagent/medicine/C2/multiver, /datum/reagent/medicine/mutadone, /datum/reagent/medicine/mannitol, /datum/reagent/medicine/salbutamol, /datum/reagent/medicine/pen_acid), - list(/datum/reagent/medicine/omnizine) - ) - var/list/chem_buttons //Used when emagged to scramble which chem is used, eg: mutadone -> morphine - var/scrambled_chems = FALSE //Are chem buttons scrambled? used as a warning - var/enter_message = "I feel cool air surround you. You go numb as your senses turn inward." - payment_department = ACCOUNT_MED - fair_market_price = 5 - -/obj/machinery/sleeper/Initialize(mapload) - . = ..() - if(mapload) - component_parts -= circuit - QDEL_NULL(circuit) - occupant_typecache = GLOB.typecache_living - update_icon() - reset_chem_buttons() - -/obj/machinery/sleeper/RefreshParts() - var/E - for(var/obj/item/stock_parts/matter_bin/B in component_parts) - E += B.rating - var/I - for(var/obj/item/stock_parts/manipulator/M in component_parts) - I += M.rating - - efficiency = initial(efficiency)* E - min_health = initial(min_health) * E - available_chems = list() - for(var/i in 1 to I) - available_chems |= possible_chems[i] - reset_chem_buttons() - -/obj/machinery/sleeper/update_icon_state() - if(state_open) - icon_state = "[initial(icon_state)]-open" - else - icon_state = initial(icon_state) - -/obj/machinery/sleeper/container_resist(mob/living/user) - visible_message("[occupant] emerges from [src]!", - "I climb out of [src]!") - open_machine() - -/obj/machinery/sleeper/Exited(atom/movable/user) - if (!state_open && user == occupant) - container_resist(user) - -/obj/machinery/sleeper/relaymove(mob/user) - if (!state_open) - container_resist(user) - -/obj/machinery/sleeper/open_machine() - if(!state_open && !panel_open) - flick("[initial(icon_state)]-anim", src) - ..() - -/obj/machinery/sleeper/close_machine(mob/user) - if((isnull(user) || istype(user)) && state_open && !panel_open) - flick("[initial(icon_state)]-anim", src) - ..(user) - var/mob/living/mob_occupant = occupant - if(mob_occupant && mob_occupant.stat != DEAD) - to_chat(occupant, "[enter_message]") - -/obj/machinery/sleeper/emp_act(severity) - . = ..() - if (. & EMP_PROTECT_SELF) - return - if(is_operational() && occupant) - open_machine() - -/obj/machinery/sleeper/MouseDrop_T(mob/target, mob/user) - if(user.stat || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser()) - return - if(isliving(user)) - var/mob/living/L = user - if(!(L.mobility_flags & MOBILITY_STAND)) - return - close_machine(target) - -/obj/machinery/sleeper/screwdriver_act(mob/living/user, obj/item/I) - . = TRUE - if(..()) - return - if(occupant) - to_chat(user, "[src] is currently occupied!") - return - if(state_open) - to_chat(user, "[src] must be closed to [panel_open ? "close" : "open"] its maintenance hatch!") - return - if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), I)) - return - return FALSE - -/obj/machinery/sleeper/wrench_act(mob/living/user, obj/item/I) - . = ..() - if(default_change_direction_wrench(user, I)) - return TRUE - -/obj/machinery/sleeper/crowbar_act(mob/living/user, obj/item/I) - . = ..() - if(default_pry_open(I)) - return TRUE - if(default_deconstruction_crowbar(I)) - return TRUE - -/obj/machinery/sleeper/default_pry_open(obj/item/I) //wew - . = !(state_open || panel_open || (flags_1 & NODECONSTRUCT_1)) && I.tool_behaviour == TOOL_CROWBAR - if(.) - I.play_tool_sound(src, 50) - visible_message("[usr] pries open [src].", "I pry open [src].") - open_machine() - -/obj/machinery/sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state) - - if(controls_inside && state == GLOB.notcontained_state) - state = GLOB.default_state // If it has a set of controls on the inside, make it actually controllable by the mob in it. - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "sleeper", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/sleeper/AltClick(mob/user) - if(!user.canUseTopic(src, !issilicon(user))) - return - if(state_open) - close_machine() - else - open_machine() - -/obj/machinery/sleeper/examine(mob/user) - . = ..() - . += "Alt-click [src] to [state_open ? "close" : "open"] it." - -/obj/machinery/sleeper/process() - ..() - check_nap_violations() - -/obj/machinery/sleeper/nap_violation(mob/violator) - open_machine() - -/obj/machinery/sleeper/ui_data() - var/list/data = list() - data["occupied"] = occupant ? 1 : 0 - data["open"] = state_open - - data["chems"] = list() - for(var/chem in available_chems) - var/datum/reagent/R = GLOB.chemical_reagents_list[chem] - data["chems"] += list(list("name" = R.name, "id" = R.type, "allowed" = chem_allowed(chem))) - - data["occupant"] = list() - var/mob/living/mob_occupant = occupant - if(mob_occupant) - data["occupant"]["name"] = mob_occupant.name - switch(mob_occupant.stat) - if(CONSCIOUS) - data["occupant"]["stat"] = "Conscious" - data["occupant"]["statstate"] = "good" - if(SOFT_CRIT) - data["occupant"]["stat"] = "Conscious" - data["occupant"]["statstate"] = "average" - if(UNCONSCIOUS) - data["occupant"]["stat"] = "Unconscious" - data["occupant"]["statstate"] = "average" - if(DEAD) - data["occupant"]["stat"] = "Dead" - data["occupant"]["statstate"] = "bad" - data["occupant"]["health"] = mob_occupant.health - data["occupant"]["maxHealth"] = mob_occupant.maxHealth - data["occupant"]["minHealth"] = HEALTH_THRESHOLD_DEAD - data["occupant"]["bruteLoss"] = mob_occupant.getBruteLoss() - data["occupant"]["oxyLoss"] = mob_occupant.getOxyLoss() - data["occupant"]["toxLoss"] = mob_occupant.getToxLoss() - data["occupant"]["fireLoss"] = mob_occupant.getFireLoss() - data["occupant"]["cloneLoss"] = mob_occupant.getCloneLoss() - data["occupant"]["brainLoss"] = mob_occupant.getOrganLoss(ORGAN_SLOT_BRAIN) - data["occupant"]["reagents"] = list() - if(mob_occupant.reagents && mob_occupant.reagents.reagent_list.len) - for(var/datum/reagent/R in mob_occupant.reagents.reagent_list) - data["occupant"]["reagents"] += list(list("name" = R.name, "volume" = R.volume)) - return data - -/obj/machinery/sleeper/ui_act(action, params) - if(..()) - return - var/mob/living/mob_occupant = occupant - check_nap_violations() - switch(action) - if("door") - if(state_open) - close_machine() - else - open_machine() - . = TRUE - if("inject") - var/chem = text2path(params["chem"]) - if(!is_operational() || !mob_occupant || isnull(chem)) - return - if(mob_occupant.health < min_health && chem != /datum/reagent/medicine/epinephrine) - return - if(inject_chem(chem, usr)) - . = TRUE - if(scrambled_chems && prob(5)) - to_chat(usr, "Chemical system re-route detected, results may not be as expected!") - -/obj/machinery/sleeper/emag_act(mob/user) - scramble_chem_buttons() - to_chat(user, "I scramble the sleeper's user interface!") - -/obj/machinery/sleeper/proc/inject_chem(chem, mob/user) - if((chem in available_chems) && chem_allowed(chem)) - occupant.reagents.add_reagent(chem_buttons[chem], 10) //emag effect kicks in here so that the "intended" chem is used for all checks, for extra FUUU - if(user) - log_combat(user, occupant, "injected [chem] into", addition = "via [src]") - return TRUE - -/obj/machinery/sleeper/proc/chem_allowed(chem) - var/mob/living/mob_occupant = occupant - if(!mob_occupant || !mob_occupant.reagents) - return - var/amount = mob_occupant.reagents.get_reagent_amount(chem) + 10 <= 20 * efficiency - var/occ_health = mob_occupant.health > min_health || chem == /datum/reagent/medicine/epinephrine - return amount && occ_health - -/obj/machinery/sleeper/proc/reset_chem_buttons() - scrambled_chems = FALSE - LAZYINITLIST(chem_buttons) - for(var/chem in available_chems) - chem_buttons[chem] = chem - -/obj/machinery/sleeper/proc/scramble_chem_buttons() - scrambled_chems = TRUE - var/list/av_chem = available_chems.Copy() - for(var/chem in av_chem) - chem_buttons[chem] = pick_n_take(av_chem) //no dupes, allow for random buttons to still be correct - - -/obj/machinery/sleeper/syndie - icon_state = "sleeper_s" - controls_inside = TRUE - -/obj/machinery/sleeper/syndie/fullupgrade/Initialize() - . = ..() - component_parts = list() - component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null) - component_parts += new /obj/item/stock_parts/manipulator/femto(null) - component_parts += new /obj/item/stack/sheet/glass(null) - component_parts += new /obj/item/stack/sheet/glass(null) - component_parts += new /obj/item/stack/cable_coil(null) - RefreshParts() - -/obj/machinery/sleeper/old - icon_state = "oldpod" diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 1b028ba24b..a3c7a0a123 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -116,7 +116,6 @@ var/list/occupant_typecache //if set, turned into typecache in Initialize, other wise, defaults to mob/living typecache var/atom/movable/occupant = null var/speed_process = FALSE // Process as fast as possible? - var/obj/item/circuitboard/circuit // Circuit to be created and inserted when the machinery is created var/interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_SET_MACHINE var/fair_market_price = 69 @@ -142,10 +141,6 @@ . = ..() GLOB.machines += src - if(ispath(circuit, /obj/item/circuitboard)) - circuit = new circuit - circuit.apply_default_parts(src) - if(!speed_process) START_PROCESSING(SSmachines, src) else @@ -156,11 +151,6 @@ return INITIALIZE_HINT_LATELOAD -/obj/machinery/LateInitialize() - . = ..() - power_change() - RegisterSignal(src, COMSIG_ENTER_AREA, PROC_REF(power_change)) - /obj/machinery/Destroy() GLOB.machines.Remove(src) if(!speed_process) @@ -186,7 +176,6 @@ /obj/machinery/emp_act(severity) . = ..() if(use_power && !stat && !(. & EMP_PROTECT_SELF)) - use_power(7500/severity) new /obj/effect/temp_visual/emp(loc) /obj/machinery/proc/open_machine(drop = TRUE) @@ -235,19 +224,13 @@ update_icon() /obj/machinery/proc/auto_use_power() - if(!powered(power_channel)) - return 0 - if(use_power == 1) - use_power(idle_power_usage,power_channel) - else if(use_power >= 2) - use_power(active_power_usage,power_channel) return 1 /obj/machinery/proc/is_operational() return !(stat & (NOPOWER|BROKEN|MAINT)) /obj/machinery/can_interact(mob/user) - var/silicon = issiliconoradminghost(user) + var/silicon = IsAdminGhost(user) if((stat & (NOPOWER|BROKEN)) && !(interaction_flags_machine & INTERACT_MACHINE_OFFLINE)) return FALSE if(panel_open && !(interaction_flags_machine & INTERACT_MACHINE_OPEN)) @@ -328,21 +311,8 @@ user.visible_message("[user.name] smashes against \the [src.name] with its paws.", null, null, COMBAT_MESSAGE_RANGE) take_damage(4, BRUTE, "melee", 1) -/obj/machinery/attack_robot(mob/user) - if(!(interaction_flags_machine & INTERACT_MACHINE_ALLOW_SILICON) && !IsAdminGhost(user)) - return FALSE - return _try_interact(user) - -/obj/machinery/attack_ai(mob/user) - if(!(interaction_flags_machine & INTERACT_MACHINE_ALLOW_SILICON) && !IsAdminGhost(user)) - return FALSE - if(iscyborg(user))// For some reason attack_robot doesn't work - return attack_robot(user) - else - return _try_interact(user) - /obj/machinery/_try_interact(mob/user) - if((interaction_flags_machine & INTERACT_MACHINE_WIRES_IF_OPEN) && panel_open && (attempt_wire_interaction(user) == WIRE_INTERACTION_BLOCK)) + if((interaction_flags_machine & INTERACT_MACHINE_WIRES_IF_OPEN) && panel_open) return TRUE return ..() @@ -370,22 +340,11 @@ if(!(flags_1 & NODECONSTRUCT_1)) on_deconstruction() if(component_parts && component_parts.len) - spawn_frame(disassembled) for(var/obj/item/I in component_parts) I.forceMove(loc) component_parts.Cut() qdel(src) -/obj/machinery/proc/spawn_frame(disassembled) - var/obj/structure/frame/machine/M = new /obj/structure/frame/machine(loc) - . = M - M.setAnchored(anchored) - if(!disassembled) - M.obj_integrity = M.max_integrity * 0.5 //the frame is already half broken - transfer_fingerprints_to(M) - M.state = 2 - M.icon_state = "box_1" - /obj/machinery/obj_break(damage_flag) SHOULD_CALL_PARENT(TRUE) . = ..() @@ -459,51 +418,6 @@ return FALSE return TRUE -/obj/machinery/proc/exchange_parts(mob/user, obj/item/storage/part_replacer/W) - if(!istype(W)) - return FALSE - if((flags_1 & NODECONSTRUCT_1) && !W.works_from_distance) - return FALSE - var/shouldplaysound = 0 - if(component_parts) - if(panel_open || W.works_from_distance) - var/obj/item/circuitboard/machine/CB = locate(/obj/item/circuitboard/machine) in component_parts - var/P - if(W.works_from_distance) - to_chat(user, display_parts(user)) - for(var/obj/item/A in component_parts) - for(var/D in CB.req_components) - if(ispath(A.type, D)) - P = D - break - for(var/obj/item/B in W.contents) - if(istype(B, P) && istype(A, P)) - if(B.get_part_rating() > A.get_part_rating()) - if(istype(B,/obj/item/stack)) //conveniently this will mean A is also a stack and I will kill the first person to prove me wrong - var/obj/item/stack/SA = A - var/obj/item/stack/SB = B - var/used_amt = SA.get_amount() - if(!SB.use(used_amt)) - continue //if we don't have the exact amount to replace we don't - var/obj/item/stack/SN = new SB.merge_type(null,used_amt) - component_parts += SN - else - if(SEND_SIGNAL(W, COMSIG_TRY_STORAGE_TAKE, B, src)) - component_parts += B - B.moveToNullspace() - SEND_SIGNAL(W, COMSIG_TRY_STORAGE_INSERT, A, null, null, TRUE) - component_parts -= A - to_chat(user, "[capitalize(A.name)] replaced with [B.name].") - shouldplaysound = 1 //Only play the sound when parts are actually replaced! - break - RefreshParts() - else - to_chat(user, display_parts(user)) - if(shouldplaysound) - W.play_rped_sound() - return TRUE - return FALSE - /obj/machinery/proc/display_parts(mob/user) . = list() . += "It contains the following parts:" @@ -588,8 +502,6 @@ return if(!istype(O, /obj/item) || user.get_active_held_item() != O) return - if(iscyborg(user)) - return if(!user.dropItemToGround(O)) return if (O.loc != src.loc) @@ -606,8 +518,6 @@ var/adjusted_climb_time = climb_time if(user.restrained()) //climbing takes twice as long when restrained. adjusted_climb_time *= 2 - if(isalien(user)) - adjusted_climb_time *= 0.25 //aliens are terrifyingly fast if(HAS_TRAIT(user, TRAIT_FREERUNNING)) //do you have any idea how fast I am??? adjusted_climb_time *= 0.8 adjusted_climb_time -= user.STASPD * 2 diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm deleted file mode 100644 index 53f043e395..0000000000 --- a/code/game/machinery/ai_slipper.dm +++ /dev/null @@ -1,43 +0,0 @@ -/obj/machinery/ai_slipper - name = "foam dispenser" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "ai-slipper0" - layer = PROJECTILE_HIT_THRESHHOLD_LAYER - plane = FLOOR_PLANE - max_integrity = 200 - armor = list("melee" = 50, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) - - var/uses = 20 - var/cooldown = 0 - var/cooldown_time = 100 - req_access = list(ACCESS_AI_UPLOAD) - -/obj/machinery/ai_slipper/examine(mob/user) - . = ..() - . += "It has [uses] uses of foam remaining." - -/obj/machinery/ai_slipper/update_icon_state() - if(stat & BROKEN) - return - if((stat & NOPOWER) || cooldown_time > world.time || !uses) - icon_state = "ai-slipper0" - else - icon_state = "ai-slipper1" - -/obj/machinery/ai_slipper/interact(mob/user) - if(!allowed(user)) - to_chat(user, "Access denied.") - return - if(!uses) - to_chat(user, "[src] is out of foam and cannot be activated!") - return - if(cooldown_time > world.time) - to_chat(user, "[src] cannot be activated for [DisplayTimeText(world.time - cooldown_time)]!") - return - new /obj/effect/particle_effect/foam(loc) - uses-- - to_chat(user, "I activate [src]. It now has [uses] uses of foam remaining.") - cooldown = world.time + cooldown_time - power_change() - addtimer(CALLBACK(src, PROC_REF(power_change)), cooldown_time) diff --git a/code/game/machinery/airlock_control.dm b/code/game/machinery/airlock_control.dm deleted file mode 100644 index 838800be68..0000000000 --- a/code/game/machinery/airlock_control.dm +++ /dev/null @@ -1,164 +0,0 @@ -#define AIRLOCK_CONTROL_RANGE 5 - -// This code allows for airlocks to be controlled externally by setting an id_tag and comm frequency (disables ID access) -/obj/machinery/door/airlock - var/id_tag - var/frequency - var/datum/radio_frequency/radio_connection - - -/obj/machinery/door/airlock/receive_signal(datum/signal/signal) - if(!signal) - return - - if(id_tag != signal.data["tag"] || !signal.data["command"]) - return - - switch(signal.data["command"]) - if("open") - open(1) - - if("close") - close(1) - - if("unlock") - locked = FALSE - update_icon() - - if("lock") - locked = TRUE - update_icon() - - if("secure_open") - locked = FALSE - update_icon() - - sleep(2) - open(1) - - locked = TRUE - update_icon() - - if("secure_close") - locked = FALSE - close(1) - - locked = TRUE - sleep(2) - update_icon() - - send_status() - - -/obj/machinery/door/airlock/proc/send_status() - if(radio_connection) - var/datum/signal/signal = new(list( - "tag" = id_tag, - "timestamp" = world.time, - "door_status" = density ? "closed" : "open", - "lock_status" = locked ? "locked" : "unlocked" - )) - radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) - - -/obj/machinery/door/airlock/open(surpress_send) - . = ..() - if(!surpress_send) - send_status() - - -/obj/machinery/door/airlock/close(surpress_send) - . = ..() - if(!surpress_send) - send_status() - - -/obj/machinery/door/airlock/proc/set_frequency(new_frequency) - SSradio.remove_object(src, frequency) - if(new_frequency) - frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, RADIO_AIRLOCK) - -/obj/machinery/door/airlock/Destroy() - if(frequency) - SSradio.remove_object(src,frequency) - return ..() - -/obj/machinery/airlock_sensor - icon = 'icons/obj/airlock_machines.dmi' - icon_state = "airlock_sensor_off" - name = "airlock sensor" - resistance_flags = FIRE_PROOF - - power_channel = ENVIRON - - var/id_tag - var/master_tag - var/frequency = FREQ_AIRLOCK_CONTROL - - var/datum/radio_frequency/radio_connection - - var/on = TRUE - var/alert = FALSE - -/obj/machinery/airlock_sensor/incinerator_toxmix - id_tag = INCINERATOR_TOXMIX_AIRLOCK_SENSOR - master_tag = INCINERATOR_TOXMIX_AIRLOCK_CONTROLLER - -/obj/machinery/airlock_sensor/incinerator_atmos - id_tag = INCINERATOR_ATMOS_AIRLOCK_SENSOR - master_tag = INCINERATOR_ATMOS_AIRLOCK_CONTROLLER - -/obj/machinery/airlock_sensor/incinerator_syndicatelava - id_tag = INCINERATOR_SYNDICATELAVA_AIRLOCK_SENSOR - master_tag = INCINERATOR_SYNDICATELAVA_AIRLOCK_CONTROLLER - -/obj/machinery/airlock_sensor/update_icon_state() - if(on) - if(alert) - icon_state = "airlock_sensor_alert" - else - icon_state = "airlock_sensor_standby" - else - icon_state = "airlock_sensor_off" - -/obj/machinery/airlock_sensor/attack_hand(mob/user) - . = ..() - if(.) - return - var/datum/signal/signal = new(list( - "tag" = master_tag, - "command" = "cycle" - )) - - radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) - flick("airlock_sensor_cycle", src) - -/obj/machinery/airlock_sensor/process() - if(on) - var/datum/gas_mixture/air_sample = return_air() - var/pressure = round(air_sample.return_pressure(),0.1) - alert = (pressure < ONE_ATMOSPHERE*0.8) - - var/datum/signal/signal = new(list( - "tag" = id_tag, - "timestamp" = world.time, - "pressure" = num2text(pressure) - )) - - radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) - - update_icon() - -/obj/machinery/airlock_sensor/proc/set_frequency(new_frequency) - SSradio.remove_object(src, frequency) - frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, RADIO_AIRLOCK) - -/obj/machinery/airlock_sensor/Initialize() - . = ..() - set_frequency(frequency) - -/obj/machinery/airlock_sensor/Destroy() - SSradio.remove_object(src,frequency) - return ..() diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm deleted file mode 100644 index 37e965952e..0000000000 --- a/code/game/machinery/announcement_system.dm +++ /dev/null @@ -1,175 +0,0 @@ -GLOBAL_LIST_EMPTY(announcement_systems) - -/obj/machinery/announcement_system - density = TRUE - name = "\improper Automated Announcement System" - desc = "" - icon = 'icons/obj/machines/telecomms.dmi' - icon_state = "AAS_On" - - verb_say = "coldly states" - verb_ask = "queries" - verb_exclaim = "alarms" - - idle_power_usage = 20 - active_power_usage = 50 - - circuit = /obj/item/circuitboard/machine/announcement_system - - var/obj/item/radio/headset/radio - var/arrival = "%PERSON has signed up as %RANK" - var/arrivalToggle = 1 - var/newhead = "%PERSON, %RANK, is the department head." - var/newheadToggle = 1 - - var/greenlight = "Light_Green" - var/pinklight = "Light_Pink" - var/errorlight = "Error_Red" - -/obj/machinery/announcement_system/Initialize() - . = ..() - GLOB.announcement_systems += src - radio = new /obj/item/radio/headset/silicon/ai(src) - update_icon() - -/obj/machinery/announcement_system/update_icon_state() - if(is_operational()) - icon_state = (panel_open ? "AAS_On_Open" : "AAS_On") - else - icon_state = (panel_open ? "AAS_Off_Open" : "AAS_Off") - -/obj/machinery/announcement_system/update_overlays() - . = ..() - if(arrivalToggle) - . += greenlight - - if(newheadToggle) - . += pinklight - - if(stat & BROKEN) - . += errorlight - -/obj/machinery/announcement_system/Destroy() - QDEL_NULL(radio) - GLOB.announcement_systems -= src //"OH GOD WHY ARE THERE 100,000 LISTED ANNOUNCEMENT SYSTEMS?!!" - return ..() - -/obj/machinery/announcement_system/attackby(obj/item/P, mob/user, params) - if(P.tool_behaviour == TOOL_SCREWDRIVER) - P.play_tool_sound(src) - panel_open = !panel_open - to_chat(user, "I [panel_open ? "open" : "close"] the maintenance hatch of [src].") - update_icon() - else if(default_deconstruction_crowbar(P)) - return - else if(P.tool_behaviour == TOOL_MULTITOOL && panel_open && (stat & BROKEN)) - to_chat(user, "I reset [src]'s firmware.") - stat &= ~BROKEN - update_icon() - else - return ..() - -/obj/machinery/announcement_system/proc/CompileText(str, user, rank) //replaces user-given variables with actual thingies. - str = replacetext(str, "%PERSON", "[user]") - str = replacetext(str, "%RANK", "[rank]") - return str - -/obj/machinery/announcement_system/proc/announce(message_type, user, rank, list/channels) - if(!is_operational()) - return - - var/message - - if(message_type == "ARRIVAL" && arrivalToggle) - message = CompileText(arrival, user, rank) - else if(message_type == "NEWHEAD" && newheadToggle) - message = CompileText(newhead, user, rank) - else if(message_type == "ARRIVALS_BROKEN") - message = "The arrivals shuttle has been damaged. Docking for repairs..." - - if(channels.len == 0) - radio.talk_into(src, message, null) - else - for(var/channel in channels) - radio.talk_into(src, message, channel) - -//config stuff - -/obj/machinery/announcement_system/ui_interact(mob/user) - . = ..() - if(!user.canUseTopic(src, !issilicon(user))) - return - if(stat & BROKEN) - visible_message("[src] buzzes.", "I hear a faint buzz.") - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - return - - - var/contents = "Arrival Announcement: ([(arrivalToggle ? "On" : "Off")])
\n[arrival]

\n" - contents += "Departmental Head Announcement: ([(newheadToggle ? "On" : "Off")])
\n[newhead]

\n" - - var/datum/browser/popup = new(user, "announcement_config", "Automated Announcement Configuration", 370, 220) - popup.set_content(contents) - popup.open() - -/obj/machinery/announcement_system/Topic(href, href_list) - if(..()) - return - if(!usr.canUseTopic(src, !issilicon(usr))) - return - if(stat & BROKEN) - visible_message("[src] buzzes.", "I hear a faint buzz.") - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - return - - if(href_list["ArrivalTopic"]) - var/NewMessage = stripped_input(usr, "Enter in the arrivals announcement configuration.", "Arrivals Announcement Config", arrival) - if(!usr.canUseTopic(src, !issilicon(usr))) - return - if(NewMessage) - arrival = NewMessage - else if(href_list["NewheadTopic"]) - var/NewMessage = stripped_input(usr, "Enter in the departmental head announcement configuration.", "Head Departmental Announcement Config", newhead) - if(!usr.canUseTopic(src, !issilicon(usr))) - return - if(NewMessage) - newhead = NewMessage - - else if(href_list["NewheadT-Topic"]) - newheadToggle = !newheadToggle - update_icon() - else if(href_list["ArrivalT-Topic"]) - arrivalToggle = !arrivalToggle - update_icon() - - add_fingerprint(usr) - interact(usr) - -/obj/machinery/announcement_system/attack_robot(mob/living/silicon/user) - . = attack_ai(user) - -/obj/machinery/announcement_system/attack_ai(mob/user) - if(!user.canUseTopic(src, !issilicon(user))) - return - if(stat & BROKEN) - to_chat(user, "[src]'s firmware appears to be malfunctioning!") - return - interact(user) - -/obj/machinery/announcement_system/proc/act_up() //does funny breakage stuff - if(!obj_break()) // if badmins flag this unbreakable or its already broken - return - - arrival = pick("#!@%ERR-34%2 CANNOT LOCAT@# JO# F*LE!", "CRITICAL ERROR 99.", "ERR)#: DA#AB@#E NOT F(*ND!") - newhead = pick("OV#RL()D: \[UNKNOWN??\] DET*#CT)D!", "ER)#R - B*@ TEXT F*O(ND!", "AAS.exe is not responding. NanoOS is searching for a solution to the problem.") - -/obj/machinery/announcement_system/emp_act(severity) - . = ..() - if(!(stat & (NOPOWER|BROKEN)) && !(. & EMP_PROTECT_SELF)) - act_up() - -/obj/machinery/announcement_system/emag_act() - if(obj_flags & EMAGGED) - return - obj_flags |= EMAGGED - act_up() diff --git a/code/game/machinery/aug_manipulator.dm b/code/game/machinery/aug_manipulator.dm deleted file mode 100644 index 47dbde298a..0000000000 --- a/code/game/machinery/aug_manipulator.dm +++ /dev/null @@ -1,130 +0,0 @@ -/obj/machinery/aug_manipulator - name = "\improper augment manipulator" - desc = "" - icon = 'icons/obj/pda.dmi' - icon_state = "pdapainter" - density = TRUE - obj_integrity = 200 - max_integrity = 200 - var/obj/item/bodypart/storedpart - var/initial_icon_state - var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi') - -/obj/machinery/aug_manipulator/examine(mob/user) - . = ..() - if(storedpart) - . += "Alt-click to eject the limb." - -/obj/machinery/aug_manipulator/Initialize() - initial_icon_state = initial(icon_state) - return ..() - -/obj/machinery/aug_manipulator/update_icon_state() - if(stat & BROKEN) - icon_state = "[initial_icon_state]-broken" - return - - if(powered()) - icon_state = initial_icon_state - else - icon_state = "[initial_icon_state]-off" - -/obj/machinery/aug_manipulator/update_overlays() - . = ..() - if(storedpart) - . += "[initial_icon_state]-closed" - -/obj/machinery/aug_manipulator/Destroy() - QDEL_NULL(storedpart) - return ..() - -/obj/machinery/aug_manipulator/on_deconstruction() - if(storedpart) - storedpart.forceMove(loc) - storedpart = null - -/obj/machinery/aug_manipulator/contents_explosion(severity, target) - if(storedpart) - storedpart.ex_act(severity, target) - -/obj/machinery/aug_manipulator/handle_atom_del(atom/A) - if(A == storedpart) - storedpart = null - update_icon() - -/obj/machinery/aug_manipulator/attackby(obj/item/O, mob/user, params) - if(default_unfasten_wrench(user, O)) - power_change() - return - - else if(istype(O, /obj/item/bodypart)) - var/obj/item/bodypart/B = O - if(B.status != BODYPART_ROBOTIC) - to_chat(user, "The machine only accepts cybernetics!") - return - if(storedpart) - to_chat(user, "There is already something inside!") - return - else - O = user.get_active_held_item() - if(!user.transferItemToLoc(O, src)) - return - storedpart = O - O.add_fingerprint(user) - update_icon() - - else if(O.tool_behaviour == TOOL_WELDER && user.used_intent.type != INTENT_HARM) - if(obj_integrity < max_integrity) - if(!O.tool_start_check(user, amount=0)) - return - - user.visible_message("[user] begins repairing [src].", \ - "I begin repairing [src]...", \ - "I hear welding.") - - if(O.use_tool(src, user, 40, volume=50)) - if(!(stat & BROKEN)) - return - to_chat(user, "I repair [src].") - stat &= ~BROKEN - obj_integrity = max(obj_integrity, max_integrity) - update_icon() - else - to_chat(user, "[src] does not need repairs.") - else - return ..() - -/obj/machinery/aug_manipulator/attack_hand(mob/user) - . = ..() - if(.) - return - add_fingerprint(user) - - if(storedpart) - var/augstyle = input(user, "Select style.", "Augment Custom Fitting") as null|anything in style_list_icons - if(!augstyle) - return - if(!in_range(src, user)) - return - if(!storedpart) - return - storedpart.icon = style_list_icons[augstyle] - eject_part(user) - - else - to_chat(user, "\The [src] is empty!") - -/obj/machinery/aug_manipulator/proc/eject_part(mob/living/user) - if(storedpart) - storedpart.forceMove(get_turf(src)) - storedpart = null - update_icon() - else - to_chat(user, "[src] is empty!") - -/obj/machinery/aug_manipulator/AltClick(mob/living/user) - ..() - if(!user.canUseTopic(src, !issilicon(user))) - return - else - eject_part(user) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm deleted file mode 100644 index c93d363814..0000000000 --- a/code/game/machinery/autolathe.dm +++ /dev/null @@ -1,448 +0,0 @@ -#define AUTOLATHE_MAIN_MENU 1 -#define AUTOLATHE_CATEGORY_MENU 2 -#define AUTOLATHE_SEARCH_MENU 3 - -/obj/machinery/autolathe - name = "autolathe" - desc = "" - icon_state = "autolathe" - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 10 - active_power_usage = 100 - circuit = /obj/item/circuitboard/machine/autolathe - layer = BELOW_OBJ_LAYER - - var/operating = FALSE - var/list/L = list() - var/list/LL = list() - var/hacked = FALSE - var/disabled = 0 - var/shocked = FALSE - var/hack_wire - var/disable_wire - var/shock_wire - - var/busy = FALSE - var/prod_coeff = 1 - - var/datum/design/being_built - var/datum/techweb/stored_research - var/list/datum/design/matching_designs - var/selected_category - var/screen = 1 - var/base_price = 25 - var/hacked_price = 50 - - var/list/categories = list( - "Tools", - "Electronics", - "Construction", - "T-Comm", - "Security", - "Machinery", - "Medical", - "Misc", - "Dinnerware", - "Imported" - ) - -/obj/machinery/autolathe/Initialize() - AddComponent(/datum/component/material_container, - list(/datum/material/iron, - /datum/material/glass, - /datum/material/gold, - /datum/material/silver, - /datum/material/diamond, - /datum/material/uranium, - /datum/material/plasma, - /datum/material/bluespace, - /datum/material/bananium, - /datum/material/titanium, - /datum/material/runite, - /datum/material/plastic, - /datum/material/adamantine, - /datum/material/mythril - ), 0, TRUE, null, null, CALLBACK(src, PROC_REF(AfterMaterialInsert))) - . = ..() - - wires = new /datum/wires/autolathe(src) - stored_research = new /datum/techweb/specialized/autounlocking/autolathe - matching_designs = list() - -/obj/machinery/autolathe/Destroy() - QDEL_NULL(wires) - return ..() - -/obj/machinery/autolathe/ui_interact(mob/user) - . = ..() - if(!is_operational()) - return - - if(shocked && !(stat & NOPOWER)) - shock(user,50) - - var/dat - - switch(screen) - if(AUTOLATHE_MAIN_MENU) - dat = main_win(user) - if(AUTOLATHE_CATEGORY_MENU) - dat = category_win(user,selected_category) - if(AUTOLATHE_SEARCH_MENU) - dat = search_win(user) - - var/datum/browser/popup = new(user, "autolathe", name, 400, 500) - popup.set_content(dat) - popup.open() - -/obj/machinery/autolathe/on_deconstruction() - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - materials.retrieve_all() - -/obj/machinery/autolathe/attackby(obj/item/O, mob/user, params) - if (busy) - to_chat(user, "The autolathe is busy. Please wait for completion of previous operation.") - return TRUE - - if(default_deconstruction_screwdriver(user, "autolathe_t", "autolathe", O)) - updateUsrDialog() - return TRUE - - if(default_deconstruction_crowbar(O)) - return TRUE - - if(panel_open && is_wire_tool(O)) - wires.interact(user) - return TRUE - - if(user.used_intent.type == INTENT_HARM) //so we can hit the machine - return ..() - - if(stat) - return TRUE - - if(istype(O, /obj/item/disk/design_disk)) - user.visible_message("[user] begins to load \the [O] in \the [src]...", - "I begin to load a design from \the [O]...", - "I hear the chatter of a floppy drive.") - busy = TRUE - var/obj/item/disk/design_disk/D = O - if(do_after(user, 14.4, target = src)) - for(var/B in D.blueprints) - if(B) - stored_research.add_design(B) - busy = FALSE - return TRUE - - return ..() - - -/obj/machinery/autolathe/proc/AfterMaterialInsert(item_inserted, id_inserted, amount_inserted) - if(istype(item_inserted, /obj/item/stack/ore/bluespace_crystal)) - use_power(MINERAL_MATERIAL_AMOUNT / 10) - else if(custom_materials && custom_materials.len && custom_materials[getmaterialref(/datum/material/glass)]) - flick("autolathe_r",src)//plays glass insertion animation by default otherwise - else - flick("autolathe_o",src)//plays metal insertion animation - - - use_power(min(1000, amount_inserted / 100)) - updateUsrDialog() - -/obj/machinery/autolathe/Topic(href, href_list) - if(..()) - return - if (!busy) - if(href_list["menu"]) - screen = text2num(href_list["menu"]) - updateUsrDialog() - - if(href_list["category"]) - selected_category = href_list["category"] - updateUsrDialog() - - if(href_list["make"]) - - ///////////////// - //href protection - being_built = stored_research.isDesignResearchedID(href_list["make"]) - if(!being_built) - return - - var/multiplier = text2num(href_list["multiplier"]) - var/is_stack = ispath(being_built.build_path, /obj/item/stack) - multiplier = CLAMP(multiplier,1,50) - - ///////////////// - - var/coeff = (is_stack ? 1 : prod_coeff) //stacks are unaffected by production coefficient - var/total_amount = 0 - - for(var/MAT in being_built.materials) - total_amount += being_built.materials[MAT] - - var/power = max(2000, (total_amount)*multiplier/5) //Change this to use all materials - - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - - var/list/materials_used = list() - var/list/custom_materials = list() //These will apply their material effect, This should usually only be one. - - for(var/MAT in being_built.materials) - var/datum/material/used_material = MAT - var/amount_needed = being_built.materials[MAT] * coeff * multiplier - if(istext(used_material)) //This means its a category - var/list/list_to_show = list() - for(var/i in SSmaterials.materials_by_category[used_material]) - if(materials.materials[i] > 0) - list_to_show += i - - used_material = input("Choose [used_material]", "Custom Material") as null|anything in sortList(list_to_show, GLOBAL_PROC_REF(cmp_typepaths_asc)) - if(!used_material) - return //Didn't pick any material, so you can't build shit either. - custom_materials[used_material] += amount_needed - - materials_used[used_material] = amount_needed - - if(materials.has_materials(materials_used)) - busy = TRUE - use_power(power) - icon_state = "autolathe_n" - var/time = is_stack ? 32 : (32 * coeff * multiplier) ** 0.8 - addtimer(CALLBACK(src, PROC_REF(make_item), power, materials_used, custom_materials, multiplier, coeff, is_stack, usr), time) - else - to_chat(usr, "Not enough materials for this operation.") - - if(href_list["search"]) - matching_designs.Cut() - - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(findtext(D.name,href_list["to_search"])) - matching_designs.Add(D) - updateUsrDialog() - else - to_chat(usr, "The autolathe is busy. Please wait for completion of previous operation.") - - updateUsrDialog() - - return - -/obj/machinery/autolathe/proc/make_item(power, list/materials_used, list/picked_materials, multiplier, coeff, is_stack, mob/user) - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - var/atom/A = drop_location() - use_power(power) - - materials.use_materials(materials_used) - - if(is_stack) - var/obj/item/stack/N = new being_built.build_path(A, multiplier) - N.update_icon() - N.autolathe_crafted(src) - else - for(var/i=1, i<=multiplier, i++) - var/obj/item/new_item = new being_built.build_path(A) - new_item.autolathe_crafted(src) - - if(length(picked_materials)) - new_item.set_custom_materials(picked_materials, 1 / multiplier) //Ensure we get the non multiplied amount - for(var/x in picked_materials) - var/datum/material/M = x - if(!istype(M, /datum/material/glass) && !istype(M, /datum/material/iron)) - user.client.give_award(/datum/award/achievement/misc/getting_an_upgrade, user) - - - icon_state = "autolathe" - busy = FALSE - updateDialog() - -/obj/machinery/autolathe/RefreshParts() - var/T = 0 - for(var/obj/item/stock_parts/matter_bin/MB in component_parts) - T += MB.rating*75000 - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - materials.max_amount = T - T=1.2 - for(var/obj/item/stock_parts/manipulator/M in component_parts) - T -= M.rating*0.2 - prod_coeff = min(1,max(0,T)) // Coeff going 1 -> 0,8 -> 0,6 -> 0,4 - -/obj/machinery/autolathe/examine(mob/user) - . += ..() - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Storing up to [materials.max_amount] material units.
Material consumption at [prod_coeff*100]%.
" - -/obj/machinery/autolathe/proc/main_win(mob/user) - var/dat = "

Autolathe Menu:


" - dat += materials_printout() - - dat += "
\ - \ - \ - \ - \ - \ -

" - - var/line_length = 1 - dat += "" - - for(var/C in categories) - if(line_length > 2) - dat += "" - line_length = 1 - - dat += "" - line_length++ - - dat += "
[C]
" - return dat - -/obj/machinery/autolathe/proc/category_win(mob/user,selected_category) - var/dat = "Return to main menu" - dat += "

Browsing [selected_category]:


" - dat += materials_printout() - - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(!(selected_category in D.category)) - continue - - if(disabled || !can_build(D)) - dat += "[D.name]" - else - dat += "[D.name]" - - if(ispath(D.build_path, /obj/item/stack)) - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - var/max_multiplier - for(var/datum/material/mat in D.materials) - max_multiplier = min(D.maxstack, round(materials.get_material_amount(mat)/D.materials[mat])) - if (max_multiplier>10 && !disabled) - dat += " x10" - if (max_multiplier>25 && !disabled) - dat += " x25" - if(max_multiplier > 0 && !disabled) - dat += " x[max_multiplier]" - else - if(!disabled && can_build(D, 5)) - dat += " x5" - if(!disabled && can_build(D, 10)) - dat += " x10" - - dat += "[get_design_cost(D)]
" - - dat += "
" - return dat - -/obj/machinery/autolathe/proc/search_win(mob/user) - var/dat = "Return to main menu" - dat += "

Search results:


" - dat += materials_printout() - - for(var/v in matching_designs) - var/datum/design/D = v - if(disabled || !can_build(D)) - dat += "[D.name]" - else - dat += "[D.name]" - - if(ispath(D.build_path, /obj/item/stack)) - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - var/max_multiplier - for(var/datum/material/mat in D.materials) - max_multiplier = min(D.maxstack, round(materials.get_material_amount(mat)/D.materials[mat])) - if (max_multiplier>10 && !disabled) - dat += " x10" - if (max_multiplier>25 && !disabled) - dat += " x25" - if(max_multiplier > 0 && !disabled) - dat += " x[max_multiplier]" - - dat += "[get_design_cost(D)]
" - - dat += "
" - return dat - -/obj/machinery/autolathe/proc/materials_printout() - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - var/dat = "Total amount: [materials.total_amount] / [materials.max_amount] cm3
" - for(var/mat_id in materials.materials) - var/datum/material/M = mat_id - var/mineral_amount = materials.materials[mat_id] - if(mineral_amount > 0) - dat += "[M.name] amount: [mineral_amount] cm3
" - return dat - -/obj/machinery/autolathe/proc/can_build(datum/design/D, amount = 1) - if(D.make_reagents.len) - return FALSE - - var/coeff = (ispath(D.build_path, /obj/item/stack) ? 1 : prod_coeff) - - var/list/required_materials = list() - - for(var/i in D.materials) - required_materials[i] = D.materials[i] * coeff * amount - - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - - return materials.has_materials(required_materials) - - -/obj/machinery/autolathe/proc/get_design_cost(datum/design/D) - var/coeff = (ispath(D.build_path, /obj/item/stack) ? 1 : prod_coeff) - var/dat - for(var/i in D.materials) - if(istext(i)) //Category handling - dat += "[D.materials[i] * coeff] [i]" - else - var/datum/material/M = i - dat += "[D.materials[i] * coeff] [M.name] " - return dat - -/obj/machinery/autolathe/proc/reset(wire) - switch(wire) - if(WIRE_HACK) - if(!wires.is_cut(wire)) - adjust_hacked(FALSE) - if(WIRE_SHOCK) - if(!wires.is_cut(wire)) - shocked = FALSE - if(WIRE_DISABLE) - if(!wires.is_cut(wire)) - disabled = FALSE - -/obj/machinery/autolathe/proc/shock(mob/user, prb) - if(stat & (BROKEN|NOPOWER)) // unpowered, no shock - return FALSE - if(!prob(prb)) - return FALSE - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() - if (electrocute_mob(user, get_area(src), src, 0.7, TRUE)) - return TRUE - else - return FALSE - -/obj/machinery/autolathe/proc/adjust_hacked(state) - hacked = state - for(var/id in SSresearch.techweb_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(id) - if((D.build_type & AUTOLATHE) && ("hacked" in D.category)) - if(hacked) - stored_research.add_design(D) - else - stored_research.remove_design(D) - -/obj/machinery/autolathe/hacked/Initialize() - . = ..() - adjust_hacked(TRUE) - -//Called when the object is constructed by an autolathe -//Has a reference to the autolathe so you can do !!FUN!! things with hacked lathes -/obj/item/proc/autolathe_crafted(obj/machinery/autolathe/A) - return diff --git a/code/game/machinery/bank_machine.dm b/code/game/machinery/bank_machine.dm deleted file mode 100644 index d83752ea73..0000000000 --- a/code/game/machinery/bank_machine.dm +++ /dev/null @@ -1,95 +0,0 @@ -/obj/machinery/computer/bank_machine - name = "bank machine" - desc = "" - icon = 'goon/icons/obj/goon_terminals.dmi' - idle_power_usage = 100 - var/siphoning = FALSE - var/next_warning = 0 - var/obj/item/radio/radio - var/radio_channel = RADIO_CHANNEL_COMMON - var/minimum_time_between_warnings = 400 - var/syphoning_credits = 0 - -/obj/machinery/computer/bank_machine/Initialize() - . = ..() - radio = new(src) - radio.subspace_transmission = TRUE - radio.canhear_range = 0 - radio.recalculateChannels() - -/obj/machinery/computer/bank_machine/Destroy() - QDEL_NULL(radio) - . = ..() - -/obj/machinery/computer/bank_machine/attackby(obj/item/I, mob/user) - var/value = 0 - if(istype(I, /obj/item/stack/spacecash)) - var/obj/item/stack/spacecash/C = I - value = C.value * C.amount - else if(istype(I, /obj/item/holochip)) - var/obj/item/holochip/H = I - value = H.credits - if(value) - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) - if(D) - D.adjust_money(value) - to_chat(user, "I deposit [I]. The Cargo Budget is now $[D.account_balance].") - qdel(I) - return - return ..() - - -/obj/machinery/computer/bank_machine/process() - ..() - if(siphoning) - if (stat & (BROKEN|NOPOWER)) - say("Insufficient power. Halting siphon.") - end_syphon() - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) - if(!D.has_money(200)) - say("Cargo budget depleted. Halting siphon.") - end_syphon() - return - - playsound(src, 'sound/blank.ogg', 100, TRUE) - syphoning_credits += 200 - D.adjust_money(-200) - if(next_warning < world.time && prob(15)) - var/area/A = get_area(loc) - var/message = "Unauthorized credit withdrawal underway in [A.map_name]!!" - radio.talk_into(src, message, radio_channel) - next_warning = world.time + minimum_time_between_warnings - -/obj/machinery/computer/bank_machine/ui_interact(mob/user) - . = ..() - - var/dat = "[station_name()] secure vault. Authorized personnel only.
" - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) - if(D) - dat += "Current Balance: $[D.account_balance]
" - if(!siphoning) - dat += "Siphon Credits
" - else - dat += "Halt Credit Siphon
" - - dat += "Close" - - var/datum/browser/popup = new(user, "computer", "Bank Vault", 300, 200) - popup.set_content("
[dat]
") - popup.set_title_image(usr.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - -/obj/machinery/computer/bank_machine/Topic(href, href_list) - if(..()) - return - if(href_list["siphon"]) - say("Siphon of station credits has begun!") - siphoning = TRUE - if(href_list["halt"]) - say("Station credit withdrawal halted.") - end_syphon() - -/obj/machinery/computer/bank_machine/proc/end_syphon() - siphoning = FALSE - new /obj/item/holochip(drop_location(), syphoning_credits) //get the loot - syphoning_credits = 0 diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm deleted file mode 100644 index f85d9ef8c1..0000000000 --- a/code/game/machinery/buttons.dm +++ /dev/null @@ -1,289 +0,0 @@ -/obj/machinery/button - name = "button" - desc = "" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "doorctrl" - var/skin = "doorctrl" - power_channel = ENVIRON - var/obj/item/assembly/device - var/obj/item/electronics/airlock/board - var/device_type = null - var/id = null - var/initialized_button = 0 - armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 70) - use_power = IDLE_POWER_USE - idle_power_usage = 2 - resistance_flags = LAVA_PROOF | FIRE_PROOF - -/obj/machinery/button/indestructible - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - -/obj/machinery/button/Initialize(mapload, ndir = 0, built = 0) - . = ..() - if(built) - setDir(ndir) - pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) - pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 - panel_open = TRUE - update_icon() - - - if(!built && !device && device_type) - device = new device_type(src) - - src.check_access(null) - - if(req_access.len || req_one_access.len) - board = new(src) - if(req_access.len) - board.accesses = req_access - else - board.one_access = 1 - board.accesses = req_one_access - - setup_device() - -/obj/machinery/button/update_icon_state() - if(panel_open) - icon_state = "button-open" - else if(stat & (NOPOWER|BROKEN)) - icon_state = "[skin]-p" - else - icon_state = skin - -/obj/machinery/button/update_overlays() - . = ..() - if(!panel_open) - return - if(device) - . += "button-device" - if(board) - . += "button-board" - -/obj/machinery/button/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_SCREWDRIVER) - if(panel_open || allowed(user)) - default_deconstruction_screwdriver(user, "button-open", "[skin]",W) - update_icon() - else - to_chat(user, "Maintenance Access Denied.") - flick("[skin]-denied", src) - return - - if(panel_open) - if(!device && istype(W, /obj/item/assembly)) - if(!user.transferItemToLoc(W, src)) - to_chat(user, "\The [W] is stuck to you!") - return - device = W - to_chat(user, "I add [W] to the button.") - - if(!board && istype(W, /obj/item/electronics/airlock)) - if(!user.transferItemToLoc(W, src)) - to_chat(user, "\The [W] is stuck to you!") - return - board = W - if(board.one_access) - req_one_access = board.accesses - else - req_access = board.accesses - to_chat(user, "I add [W] to the button.") - - if(!device && !board && W.tool_behaviour == TOOL_WRENCH) - to_chat(user, "I start unsecuring the button frame...") - W.play_tool_sound(src) - if(W.use_tool(src, user, 40)) - to_chat(user, "I unsecure the button frame.") - transfer_fingerprints_to(new /obj/item/wallframe/button(get_turf(src))) - playsound(loc, 'sound/blank.ogg', 50, TRUE) - qdel(src) - - update_icon() - return - - if(user.used_intent.type != INTENT_HARM && !(W.item_flags & NOBLUDGEON)) - return attack_hand(user) - else - return ..() - -/obj/machinery/button/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - req_access = list() - req_one_access = list() - playsound(src, "sparks", 100, TRUE) - obj_flags |= EMAGGED - -/obj/machinery/button/attack_ai(mob/user) - if(!panel_open) - return attack_hand(user) - -/obj/machinery/button/attack_robot(mob/user) - return attack_ai(user) - -/obj/machinery/button/proc/setup_device() - if(id && istype(device, /obj/item/assembly/control)) - var/obj/item/assembly/control/A = device - A.id = id - initialized_button = 1 - -/obj/machinery/button/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE) - if(id && istype(device, /obj/item/assembly/control)) - var/obj/item/assembly/control/A = device - A.id = "[idnum][id]" - -/obj/machinery/button/attack_hand(mob/user) - . = ..() - if(.) - return - if(!initialized_button) - setup_device() - add_fingerprint(user) - if(panel_open) - if(device || board) - if(device) - device.forceMove(drop_location()) - device = null - if(board) - board.forceMove(drop_location()) - req_access = list() - req_one_access = list() - board = null - update_icon() - to_chat(user, "I remove electronics from the button frame.") - - else - if(skin == "doorctrl") - skin = "launcher" - else - skin = "doorctrl" - to_chat(user, "I change the button frame's front panel.") - return - - if((stat & (NOPOWER|BROKEN))) - return - - if(device && device.next_activate > world.time) - return - - if(!allowed(user)) - to_chat(user, "Access Denied.") - flick("[skin]-denied", src) - return - - use_power(5) - icon_state = "[skin]1" - - if(device) - device.pulsed() - - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon)), 15) - -/obj/machinery/button/door - name = "door button" - desc = "" - var/normaldoorcontrol = FALSE - var/specialfunctions = OPEN // Bitflag, see assembly file - var/sync_doors = TRUE - -/obj/machinery/button/door/indestructible - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - -/obj/machinery/button/door/setup_device() - if(!device) - if(normaldoorcontrol) - var/obj/item/assembly/control/airlock/A = new(src) - A.specialfunctions = specialfunctions - device = A - else - var/obj/item/assembly/control/C = new(src) - C.sync_doors = sync_doors - device = C - ..() - -/obj/machinery/button/door/incinerator_vent_toxmix - name = "combustion chamber vent control" - id = INCINERATOR_TOXMIX_VENT - req_access = list(ACCESS_TOX) - -/obj/machinery/button/door/incinerator_vent_atmos_main - name = "turbine vent control" - id = INCINERATOR_ATMOS_MAINVENT - req_one_access = list(ACCESS_ATMOSPHERICS, ACCESS_MAINT_TUNNELS) - -/obj/machinery/button/door/incinerator_vent_atmos_aux - name = "combustion chamber vent control" - id = INCINERATOR_ATMOS_AUXVENT - req_one_access = list(ACCESS_ATMOSPHERICS, ACCESS_MAINT_TUNNELS) - -/obj/machinery/button/door/incinerator_vent_syndicatelava_main - name = "turbine vent control" - id = INCINERATOR_SYNDICATELAVA_MAINVENT - req_access = list(ACCESS_SYNDICATE) - -/obj/machinery/button/door/incinerator_vent_syndicatelava_aux - name = "combustion chamber vent control" - id = INCINERATOR_SYNDICATELAVA_AUXVENT - req_access = list(ACCESS_SYNDICATE) - -/obj/machinery/button/massdriver - name = "mass driver button" - desc = "" - icon_state = "launcher" - skin = "launcher" - device_type = /obj/item/assembly/control/massdriver - -/obj/machinery/button/massdriver/indestructible - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - -/obj/machinery/button/ignition - name = "ignition switch" - desc = "" - icon_state = "launcher" - skin = "launcher" - device_type = /obj/item/assembly/control/igniter - -/obj/machinery/button/ignition/indestructible - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - -/obj/machinery/button/ignition/incinerator - name = "combustion chamber ignition switch" - desc = "" - -/obj/machinery/button/ignition/incinerator/toxmix - id = INCINERATOR_TOXMIX_IGNITER - -/obj/machinery/button/ignition/incinerator/atmos - id = INCINERATOR_ATMOS_IGNITER - -/obj/machinery/button/ignition/incinerator/syndicatelava - id = INCINERATOR_SYNDICATELAVA_IGNITER - -/obj/machinery/button/flasher - name = "flasher button" - desc = "" - icon_state = "launcher" - skin = "launcher" - device_type = /obj/item/assembly/control/flasher - -/obj/machinery/button/flasher/indestructible - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - -/obj/machinery/button/crematorium - name = "crematorium igniter" - desc = "" - icon_state = "launcher" - skin = "launcher" - device_type = /obj/item/assembly/control/crematorium - req_access = list() - id = 1 - -/obj/machinery/button/crematorium/indestructible - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - -/obj/item/wallframe/button - name = "button frame" - desc = "" - icon_state = "button" - result_path = /obj/machinery/button - custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm deleted file mode 100644 index dc1ab93afe..0000000000 --- a/code/game/machinery/camera/camera.dm +++ /dev/null @@ -1,500 +0,0 @@ -#define CAMERA_UPGRADE_XRAY 1 -#define CAMERA_UPGRADE_EMP_PROOF 2 -#define CAMERA_UPGRADE_MOTION 4 - -/obj/machinery/camera - name = "security camera" - desc = "" - icon = 'icons/obj/machines/camera.dmi' - icon_state = "camera" //mapping icon to represent upgrade states. if you want a different base icon, update default_camera_icon as well as this. - use_power = ACTIVE_POWER_USE - idle_power_usage = 5 - active_power_usage = 10 - layer = WALL_OBJ_LAYER - resistance_flags = FIRE_PROOF - damage_deflection = 12 - armor = list("melee" = 50, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 50) - max_integrity = 100 - integrity_failure = 0.5 - var/default_camera_icon = "camera" //the camera's base icon used by update_icon - icon_state is primarily used for mapping display purposes. - var/list/network = list("ss13") - var/c_tag = null - var/status = TRUE - var/start_active = FALSE //If it ignores the random chance to start broken on round start - var/invuln = null - var/obj/item/camera_bug/bug = null - var/obj/structure/camera_assembly/assembly = null - var/area/myarea = null - - //OTHER - - var/view_range = 7 - var/short_range = 2 - - var/alarm_on = FALSE - var/busy = FALSE - var/emped = FALSE //Number of consecutive EMP's on this camera - var/in_use_lights = 0 - - // Upgrades bitflag - var/upgrades = 0 - var/datum/component/empprotection/emp_component - - var/internal_light = TRUE //Whether it can light up when an AI views it - -/obj/machinery/camera/preset/toxins //Bomb test site in space - name = "Hardened Bomb-Test Camera" - desc = "" - c_tag = "Bomb Testing Site" - network = list("rd","toxins") - use_power = NO_POWER_USE //Test site is an unpowered area - invuln = TRUE - light_range = 10 - start_active = TRUE - -/obj/machinery/camera/Initialize(mapload, obj/structure/camera_assembly/CA) - . = ..() - for(var/i in network) - network -= i - network += lowertext(i) - if(CA) - assembly = CA - if(assembly.xray_module) - upgradeXRay() - else if(assembly.malf_xray_firmware_present) //if it was secretly upgraded via the MALF AI Upgrade Camera Network ability - upgradeXRay(TRUE) - - if(assembly.emp_module) - upgradeEmpProof() - else if(assembly.malf_xray_firmware_present) //if it was secretly upgraded via the MALF AI Upgrade Camera Network ability - upgradeEmpProof(TRUE) - - if(assembly.proxy_module) - upgradeMotion() - else - assembly = new(src) - assembly.state = 4 //STATE_FINISHED - GLOB.cameranet.cameras += src - GLOB.cameranet.addCamera(src) - if (isturf(loc)) - myarea = get_area(src) - LAZYADD(myarea.cameras, src) - proximity_monitor = new(src, 1) - - if(mapload && is_station_level(z) && prob(3) && !start_active) - toggle_cam() - else //this is handled by toggle_camera, so no need to update it twice. - update_icon() - -/obj/machinery/camera/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE) - for(var/i in network) - network -= i - network += "[idnum][i]" - -/obj/machinery/camera/Destroy() - if(can_use()) - toggle_cam(null, 0) //kick anyone viewing out and remove from the camera chunks - GLOB.cameranet.cameras -= src - if(isarea(myarea)) - LAZYREMOVE(myarea.cameras, src) - QDEL_NULL(assembly) - QDEL_NULL(emp_component) - if(bug) - bug.bugged_cameras -= src.c_tag - if(bug.current == src) - bug.current = null - bug = null - cancelCameraAlarm() - return ..() - -/obj/machinery/camera/examine(mob/user) - . += ..() - if(isEmpProof(TRUE)) //don't reveal it's upgraded if was done via MALF AI Upgrade Camera Network ability - . += "It has electromagnetic interference shielding installed." - else - . += "It can be shielded against electromagnetic interference with some plasma." - if(isXRay(TRUE)) //don't reveal it's upgraded if was done via MALF AI Upgrade Camera Network ability - . += "It has an X-ray photodiode installed." - else - . += "It can be upgraded with an X-ray photodiode with an analyzer." - if(isMotion()) - . += "It has a proximity sensor installed." - else - . += "It can be upgraded with a proximity sensor." - - if(!status) - . += "It's currently deactivated." - if(!panel_open && powered()) - . += "You'll need to open its maintenance panel with a screwdriver to turn it back on." - if(panel_open) - . += "Its maintenance panel is currently open." - if(!status && powered()) - . += "It can reactivated with wirecutters." - -/obj/machinery/camera/emp_act(severity) - . = ..() - if(!status) - return - if(!(. & EMP_PROTECT_SELF)) - if(prob(150/severity)) - update_icon() - network = list() - GLOB.cameranet.removeCamera(src) - stat |= EMPED - set_light(0) - emped = emped+1 //Increase the number of consecutive EMP's - update_icon() - addtimer(CALLBACK(src, PROC_REF(post_emp_reset), emped, network), 90 SECONDS) - for(var/i in GLOB.player_list) - var/mob/M = i - if (M.client.eye == src) - M.unset_machine() - M.reset_perspective(null) - to_chat(M, "The screen bursts into static!") - -/obj/machinery/camera/proc/post_emp_reset(thisemp, previous_network) - if(QDELETED(src)) - return - triggerCameraAlarm() //camera alarm triggers even if multiple EMPs are in effect. - if(emped != thisemp) //Only fix it if the camera hasn't been EMP'd again - return - network = previous_network - stat &= ~EMPED - update_icon() - if(can_use()) - GLOB.cameranet.addCamera(src) - emped = 0 //Resets the consecutive EMP count - addtimer(CALLBACK(src, PROC_REF(cancelCameraAlarm)), 100) - -/obj/machinery/camera/ex_act(severity, target) - if(invuln) - return - ..() - -/obj/machinery/camera/proc/setViewRange(num = 7) - src.view_range = num - GLOB.cameranet.updateVisibility(src, 0) - -/obj/machinery/camera/proc/shock(mob/living/user) - if(!istype(user)) - return - user.electrocute_act(10, src) - -/obj/machinery/camera/singularity_pull(S, current_size) - if (status && current_size >= STAGE_FIVE) // If the singulo is strong enough to pull anchored objects and the camera is still active, turn off the camera as it gets ripped off the wall. - toggle_cam(null, 0) - ..() - -// Construction/Deconstruction -/obj/machinery/camera/screwdriver_act(mob/living/user, obj/item/I) - if(..()) - return TRUE - panel_open = !panel_open - to_chat(user, "I screw the camera's panel [panel_open ? "open" : "closed"].") - I.play_tool_sound(src) - update_icon() - return TRUE - -/obj/machinery/camera/crowbar_act(mob/living/user, obj/item/I) - . = ..() - if(!panel_open) - return - var/list/droppable_parts = list() - if(assembly.xray_module) - droppable_parts += assembly.xray_module - if(assembly.emp_module) - droppable_parts += assembly.emp_module - if(assembly.proxy_module) - droppable_parts += assembly.proxy_module - if(!droppable_parts.len) - return - var/obj/item/choice = input(user, "Select a part to remove:", src) as null|obj in sortNames(droppable_parts) - if(!choice || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - return - to_chat(user, "I remove [choice] from [src].") - if(choice == assembly.xray_module) - assembly.drop_upgrade(assembly.xray_module) - removeXRay() - if(choice == assembly.emp_module) - assembly.drop_upgrade(assembly.emp_module) - removeEmpProof() - if(choice == assembly.proxy_module) - assembly.drop_upgrade(assembly.proxy_module) - removeMotion() - I.play_tool_sound(src) - return TRUE - -/obj/machinery/camera/wirecutter_act(mob/living/user, obj/item/I) - . = ..() - if(!panel_open) - return - toggle_cam(user, 1) - obj_integrity = max_integrity //this is a pretty simplistic way to heal the camera, but there's no reason for this to be complex. - stat &= ~BROKEN - I.play_tool_sound(src) - return TRUE - -/obj/machinery/camera/multitool_act(mob/living/user, obj/item/I) - . = ..() - if(!panel_open) - return - - setViewRange((view_range == initial(view_range)) ? short_range : initial(view_range)) - to_chat(user, "I [(view_range == initial(view_range)) ? "restore" : "mess up"] the camera's focus.") - return TRUE - -/obj/machinery/camera/welder_act(mob/living/user, obj/item/I) - . = ..() - if(!panel_open) - return - - if(!I.tool_start_check(user, amount=0)) - return TRUE - - to_chat(user, "I start to weld [src]...") - if(I.use_tool(src, user, 100, volume=50)) - user.visible_message("[user] unwelds [src], leaving it as just a frame bolted to the wall.", - "I unweld [src], leaving it as just a frame bolted to the wall") - deconstruct(TRUE) - - return TRUE - -/obj/machinery/camera/attackby(obj/item/I, mob/living/user, params) - // UPGRADES - if(panel_open) - if(I.tool_behaviour == TOOL_ANALYZER) - if(!isXRay(TRUE)) //don't reveal it was already upgraded if was done via MALF AI Upgrade Camera Network ability - if(!user.temporarilyRemoveItemFromInventory(I)) - return - upgradeXRay(FALSE, TRUE) - to_chat(user, "I attach [I] into [assembly]'s inner circuits.") - qdel(I) - else - to_chat(user, "[src] already has that upgrade!") - return - - else if(istype(I, /obj/item/stack/sheet/mineral/plasma)) - if(!isEmpProof(TRUE)) //don't reveal it was already upgraded if was done via MALF AI Upgrade Camera Network ability - if(I.use_tool(src, user, 0, amount=1)) - upgradeEmpProof(FALSE, TRUE) - to_chat(user, "I attach [I] into [assembly]'s inner circuits.") - else - to_chat(user, "[src] already has that upgrade!") - return - - else if(istype(I, /obj/item/assembly/prox_sensor)) - if(!isMotion()) - if(!user.temporarilyRemoveItemFromInventory(I)) - return - upgradeMotion() - to_chat(user, "I attach [I] into [assembly]'s inner circuits.") - qdel(I) - else - to_chat(user, "[src] already has that upgrade!") - return - - // OTHER - if((istype(I, /obj/item/paper) || istype(I, /obj/item/pda)) && isliving(user)) - var/mob/living/U = user - var/obj/item/paper/X = null - var/obj/item/pda/P = null - - var/itemname = "" - var/info = "" - if(istype(I, /obj/item/paper)) - X = I - itemname = X.name - info = X.info - else - P = I - itemname = P.name - info = P.notehtml - to_chat(U, "I hold \the [itemname] up to the camera...") - U.changeNext_move(CLICK_CD_MELEE) - for(var/mob/O in GLOB.player_list) - if(isAI(O)) - var/mob/living/silicon/ai/AI = O - if(AI.control_disabled || (AI.stat == DEAD)) - return - if(U.name == "Unknown") - to_chat(AI, "[U] holds \a [itemname] up to one of your cameras ...") - else - to_chat(AI, "[U] holds \a [itemname] up to one of your cameras ...") - AI.last_paper_seen = "[itemname][info]" - else if (O.client.eye == src) - to_chat(O, "[U] holds \a [itemname] up to one of the cameras ...") - O << browse(text("[][]", itemname, info), text("window=[]", itemname)) - return - - else if(istype(I, /obj/item/camera_bug)) - if(!can_use()) - to_chat(user, "Camera non-functional.") - return - if(bug) - to_chat(user, "Camera bug removed.") - bug.bugged_cameras -= src.c_tag - bug = null - else - to_chat(user, "Camera bugged.") - bug = I - bug.bugged_cameras[src.c_tag] = src - return - - else if(istype(I, /obj/item/pai_cable)) - var/obj/item/pai_cable/cable = I - cable.plugin(src, user) - return - - return ..() - - -/obj/machinery/camera/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) - if(stat & BROKEN) - return damage_amount - . = ..() - -/obj/machinery/camera/obj_break(damage_flag) - if(!status) - return - . = ..() - if(.) - triggerCameraAlarm() - toggle_cam(null, 0) - -/obj/machinery/camera/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - if(disassembled) - if(!assembly) - assembly = new() - assembly.forceMove(drop_location()) - assembly.state = 1 - assembly.setDir(dir) - assembly = null - else - var/obj/item/I = new /obj/item/wallframe/camera (loc) - I.obj_integrity = I.max_integrity * 0.5 - new /obj/item/stack/cable_coil(loc, 2) - qdel(src) - -/obj/machinery/camera/update_icon_state() //TO-DO: Make panel open states, xray camera, and indicator lights overlays instead. - var/xray_module - if(isXRay(TRUE)) - xray_module = "xray" - if(!status) - icon_state = "[xray_module][default_camera_icon]_off" - else if (stat & EMPED) - icon_state = "[xray_module][default_camera_icon]_emp" - else - icon_state = "[xray_module][default_camera_icon][in_use_lights ? "_in_use" : ""]" - -/obj/machinery/camera/proc/toggle_cam(mob/user, displaymessage = 1) - status = !status - if(can_use()) - GLOB.cameranet.addCamera(src) - if (isturf(loc)) - myarea = get_area(src) - LAZYADD(myarea.cameras, src) - else - myarea = null - else - set_light(0) - GLOB.cameranet.removeCamera(src) - if (isarea(myarea)) - LAZYREMOVE(myarea.cameras, src) - GLOB.cameranet.updateChunk(x, y, z) - var/change_msg = "deactivates" - if(status) - change_msg = "reactivates" - triggerCameraAlarm() - addtimer(CALLBACK(src, PROC_REF(cancelCameraAlarm)), 100) - if(displaymessage) - if(user) - visible_message("[user] [change_msg] [src]!") - add_hiddenprint(user) - else - visible_message("\The [src] [change_msg]!") - - playsound(src, 'sound/blank.ogg', 100, TRUE) - update_icon() //update Initialize() if you remove this. - - // now disconnect anyone using the camera - //Apparently, this will disconnect anyone even if the camera was re-activated. - //I guess that doesn't matter since they can't use it anyway? - for(var/mob/O in GLOB.player_list) - if (O.client.eye == src) - O.unset_machine() - O.reset_perspective(null) - to_chat(O, "The screen bursts into static!") - -/obj/machinery/camera/proc/triggerCameraAlarm() - alarm_on = TRUE - for(var/mob/living/silicon/S in GLOB.silicon_mobs) - S.triggerAlarm("Camera", get_area(src), list(src), src) - -/obj/machinery/camera/proc/cancelCameraAlarm() - alarm_on = FALSE - for(var/mob/living/silicon/S in GLOB.silicon_mobs) - S.cancelAlarm("Camera", get_area(src), src) - -/obj/machinery/camera/proc/can_use() - if(!status) - return FALSE - if(stat & EMPED) - return FALSE - return TRUE - -/obj/machinery/camera/proc/can_see() - var/list/see = null - var/turf/pos = get_turf(src) - if(isXRay()) - see = range(view_range, pos) - else - see = get_hear(view_range, pos) - return see - -/atom/proc/auto_turn() - //Automatically turns based on nearby walls. - var/turf/closed/wall/T = null - for(var/i in GLOB.cardinals) - T = get_ranged_target_turf(src, i, 1) - if(istype(T)) - setDir(turn(i, 180)) - break - -//Return a working camera that can see a given mob -//or null if none -/proc/seen_by_camera(mob/M) - for(var/obj/machinery/camera/C in view(4, M)) - if(C.can_use()) // check if camera disabled - return C - return null - -/proc/near_range_camera(mob/M) - for(var/obj/machinery/camera/C in range(4, M)) - if(C.can_use()) // check if camera disabled - return C - return null - -/obj/machinery/camera/proc/Togglelight(on=0) - for(var/mob/living/silicon/ai/A in GLOB.ai_list) - for(var/obj/machinery/camera/cam in A.lit_cameras) - if(cam == src) - return - if(on) - set_light(AI_CAMERA_LUMINOSITY) - else - set_light(0) - -/obj/machinery/camera/get_remote_view_fullscreens(mob/user) - if(view_range == short_range) //unfocused - user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 2) - -/obj/machinery/camera/update_remote_sight(mob/living/user) - user.see_invisible = SEE_INVISIBLE_LIVING //can't see ghosts through cameras - if(isXRay()) - user.sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) - user.see_in_dark = max(user.see_in_dark, 8) - else - user.sight = 0 - user.see_in_dark = 2 - return 1 diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm deleted file mode 100644 index bff95188a8..0000000000 --- a/code/game/machinery/camera/camera_assembly.dm +++ /dev/null @@ -1,287 +0,0 @@ -#define STATE_WRENCHED 1 -#define STATE_WELDED 2 -#define STATE_WIRED 3 -#define STATE_FINISHED 4 - -/obj/item/wallframe/camera - name = "camera assembly" - desc = "" - icon = 'icons/obj/machines/camera.dmi' - icon_state = "cameracase" - custom_materials = list(/datum/material/iron=400, /datum/material/glass=250) - result_path = /obj/structure/camera_assembly - -/obj/structure/camera_assembly - name = "camera assembly" - desc = "" - icon = 'icons/obj/machines/camera.dmi' - icon_state = "camera_assembly" - max_integrity = 150 - // Motion, EMP-Proof, X-ray - var/obj/item/analyzer/xray_module - var/malf_xray_firmware_active //used to keep from revealing malf AI upgrades for user facing isXRay() checks when they use Upgrade Camera Network ability - //will be false if the camera is upgraded with the proper parts. - var/malf_xray_firmware_present //so the malf upgrade is restored when the normal upgrade part is removed. - var/obj/item/stack/sheet/mineral/plasma/emp_module - var/malf_emp_firmware_active //used to keep from revealing malf AI upgrades for user facing isEmp() checks after they use Upgrade Camera Network ability - //will be false if the camera is upgraded with the proper parts. - var/malf_emp_firmware_present //so the malf upgrade is restored when the normal upgrade part is removed. - var/obj/item/assembly/prox_sensor/proxy_module - var/state = STATE_WRENCHED - -/obj/structure/camera_assembly/examine(mob/user) - . = ..() - //upgrade messages - var/has_upgrades - if(emp_module) - . += "It has electromagnetic interference shielding installed." - has_upgrades = TRUE - else if(state == STATE_WIRED) - . += "It can be shielded against electromagnetic interference with some plasma." - if(xray_module) - . += "It has an X-ray photodiode installed." - has_upgrades = TRUE - else if(state == STATE_WIRED) - . += "It can be upgraded with an X-ray photodiode with an analyzer." - if(proxy_module) - . += "It has a proximity sensor installed." - has_upgrades = TRUE - else if(state == STATE_WIRED) - . += "It can be upgraded with a proximity sensor." - - //construction states - switch(state) - if(STATE_WRENCHED) - . += "I can secure it in place with a welder, or removed with a wrench." - if(STATE_WELDED) - . += "I can add wires to it, or unweld it from the wall." - if(STATE_WIRED) - if(has_upgrades) - . += "I can remove the contained upgrades with a crowbar." - . += "I can complete it with a screwdriver, or unwire it to start removal." - if(STATE_FINISHED) - . += "I shouldn't be seeing this, tell a coder!" - -/obj/structure/camera_assembly/Initialize(mapload, ndir, building) - . = ..() - if(building) - setDir(ndir) - -/obj/structure/camera_assembly/update_icon_state() - icon_state = "[xray_module ? "xray" : null][initial(icon_state)]" - -/obj/structure/camera_assembly/handle_atom_del(atom/A) - if(A == xray_module) - xray_module = null - update_icon() - if(malf_xray_firmware_present) - malf_xray_firmware_active = malf_xray_firmware_present //re-enable firmware based upgrades after the part is removed. - if(istype(loc, /obj/machinery/camera)) - var/obj/machinery/camera/contained_camera = loc - contained_camera.removeXRay(malf_xray_firmware_present) //make sure we don't remove MALF upgrades. - - else if(A == emp_module) - emp_module = null - if(malf_emp_firmware_present) - malf_emp_firmware_active = malf_emp_firmware_present //re-enable firmware based upgrades after the part is removed. - if(istype(loc, /obj/machinery/camera)) - var/obj/machinery/camera/contained_camera = loc - contained_camera.removeEmpProof(malf_emp_firmware_present) //make sure we don't remove MALF upgrades - - else if(A == proxy_module) - emp_module = null - if(istype(loc, /obj/machinery/camera)) - var/obj/machinery/camera/contained_camera = loc - contained_camera.removeMotion() - - return ..() - - -/obj/structure/camera_assembly/Destroy() - QDEL_NULL(xray_module) - QDEL_NULL(emp_module) - QDEL_NULL(proxy_module) - return ..() - -/obj/structure/camera_assembly/proc/drop_upgrade(obj/item/I) - I.forceMove(drop_location()) - if(I == xray_module) - xray_module = null - if(malf_xray_firmware_present) - malf_xray_firmware_active = malf_xray_firmware_present //re-enable firmware based upgrades after the part is removed. - update_icon() - - else if(I == emp_module) - emp_module = null - if(malf_emp_firmware_present) - malf_emp_firmware_active = malf_emp_firmware_present //re-enable firmware based upgrades after the part is removed. - - else if(I == proxy_module) - proxy_module = null - - -/obj/structure/camera_assembly/attackby(obj/item/W, mob/living/user, params) - switch(state) - if(STATE_WRENCHED) - if(W.tool_behaviour == TOOL_WELDER) - if(weld(W, user)) - to_chat(user, "I weld [src] securely into place.") - setAnchored(TRUE) - state = STATE_WELDED - return - - if(STATE_WELDED) - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if(C.use(2)) - to_chat(user, "I add wires to [src].") - state = STATE_WIRED - else - to_chat(user, "I need two lengths of cable to wire a camera!") - return - return - - else if(W.tool_behaviour == TOOL_WELDER) - - if(weld(W, user)) - to_chat(user, "I unweld [src] from its place.") - state = STATE_WRENCHED - setAnchored(TRUE) - return - - if(STATE_WIRED) // Upgrades! - if(istype(W, /obj/item/stack/sheet/mineral/plasma)) //emp upgrade - if(emp_module) - to_chat(user, "[src] already contains a [emp_module]!") - return - if(!W.use_tool(src, user, 0, amount=1)) //only use one sheet, otherwise the whole stack will be consumed. - return - emp_module = new(src) - if(malf_xray_firmware_active) - malf_xray_firmware_active = FALSE //flavor reason: MALF AI Upgrade Camera Network ability's firmware is incompatible with the new part - //real reason: make it a normal upgrade so the finished camera's icons and examine texts are restored. - to_chat(user, "I attach [W] into [src]'s inner circuits.") - return - - else if(istype(W, /obj/item/analyzer)) //xray upgrade - if(xray_module) - to_chat(user, "[src] already contains a [xray_module]!") - return - if(!user.transferItemToLoc(W, src)) - return - to_chat(user, "I attach [W] into [src]'s inner circuits.") - xray_module = W - if(malf_xray_firmware_active) - malf_xray_firmware_active = FALSE //flavor reason: MALF AI Upgrade Camera Network ability's firmware is incompatible with the new part - //real reason: make it a normal upgrade so the finished camera's icons and examine texts are restored. - update_icon() - return - - else if(istype(W, /obj/item/assembly/prox_sensor)) //motion sensing upgrade - if(proxy_module) - to_chat(user, "[src] already contains a [proxy_module]!") - return - if(!user.transferItemToLoc(W, src)) - return - to_chat(user, "I attach [W] into [src]'s inner circuits.") - proxy_module = W - return - - return ..() - -/obj/structure/camera_assembly/crowbar_act(mob/user, obj/item/tool) - if(state != STATE_WIRED) - return FALSE - var/list/droppable_parts = list() - if(xray_module) - droppable_parts += xray_module - if(emp_module) - droppable_parts += emp_module - if(proxy_module) - droppable_parts += proxy_module - if(!droppable_parts.len) - return - var/obj/item/choice = input(user, "Select a part to remove:", src) as null|obj in sortNames(droppable_parts) - if(!choice || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - return - to_chat(user, "I remove [choice] from [src].") - drop_upgrade(choice) - tool.play_tool_sound(src) - return TRUE - -/obj/structure/camera_assembly/screwdriver_act(mob/user, obj/item/tool) - . = ..() - if(.) - return TRUE - if(state != STATE_WIRED) - return FALSE - - tool.play_tool_sound(src) - var/input = stripped_input(user, "Which networks would you like to connect this camera to? Separate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ", "Set Network", "SS13") - if(!input) - to_chat(user, "No input found, please hang up and try your call again!") - return - var/list/tempnetwork = splittext(input, ",") - if(tempnetwork.len < 1) - to_chat(user, "No network found, please hang up and try your call again!") - return - for(var/i in tempnetwork) - tempnetwork -= i - tempnetwork += lowertext(i) - state = STATE_FINISHED - var/obj/machinery/camera/C = new(loc, src) - forceMove(C) - C.setDir(src.dir) - - C.network = tempnetwork - var/area/A = get_area(src) - C.c_tag = "[A.name] ([rand(1, 999)])" - return TRUE - -/obj/structure/camera_assembly/wirecutter_act(mob/user, obj/item/I) - . = ..() - if(state != STATE_WIRED) - return - - new /obj/item/stack/cable_coil(drop_location(), 2) - I.play_tool_sound(src) - to_chat(user, "I cut the wires from the circuits.") - state = STATE_WELDED - return TRUE - -/obj/structure/camera_assembly/wrench_act(mob/user, obj/item/I) - . = ..() - if(state != STATE_WRENCHED) - return - I.play_tool_sound(src) - to_chat(user, "I detach [src] from its place.") - new /obj/item/wallframe/camera(drop_location()) - //drop upgrades - if(xray_module) - drop_upgrade(xray_module) - if(emp_module) - drop_upgrade(emp_module) - if(proxy_module) - drop_upgrade(proxy_module) - - qdel(src) - return TRUE - -/obj/structure/camera_assembly/proc/weld(obj/item/weldingtool/W, mob/living/user) - if(!W.tool_start_check(user, amount=3)) - return FALSE - to_chat(user, "I start to weld [src]...") - if(W.use_tool(src, user, 20, amount=3, volume = 50)) - return TRUE - return FALSE - -/obj/structure/camera_assembly/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/sheet/metal(loc) - qdel(src) - - -#undef STATE_WRENCHED -#undef STATE_WELDED -#undef STATE_WIRED -#undef STATE_FINISHED diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm deleted file mode 100644 index af5093d6ca..0000000000 --- a/code/game/machinery/camera/motion.dm +++ /dev/null @@ -1,112 +0,0 @@ -/obj/machinery/camera - - var/list/datum/weakref/localMotionTargets = list() - var/detectTime = 0 - var/area/ai_monitored/area_motion = null - var/alarm_delay = 30 // Don't forget, there's another 3 seconds in queueAlarm() - -/obj/machinery/camera/process() - // motion camera event loop - if(!isMotion()) - . = PROCESS_KILL - return - if(stat & EMPED) - return - if (detectTime > 0) - var/elapsed = world.time - detectTime - if (elapsed > alarm_delay) - triggerAlarm() - else if (detectTime == -1) - for (var/datum/weakref/targetref in getTargetList()) - var/mob/target = targetref.resolve() - if(QDELETED(target) || target.stat == DEAD || (!area_motion && !in_range(src, target))) - //If not part of a monitored area and the camera is not in range or the target is dead - lostTargetRef(targetref) - -/obj/machinery/camera/proc/getTargetList() - if(area_motion) - return area_motion.motionTargets - return localMotionTargets - -/obj/machinery/camera/proc/newTarget(mob/target) - if(isAI(target)) - return FALSE - if (detectTime == 0) - detectTime = world.time // start the clock - var/list/targets = getTargetList() - targets |= WEAKREF(target) - return TRUE - -/obj/machinery/camera/Destroy() - var/area/ai_monitored/A = get_area(src) - localMotionTargets = null - if(istype(A)) - A.motioncameras -= src - cancelAlarm() - return ..() - -/obj/machinery/camera/proc/lostTargetRef(datum/weakref/R) - var/list/targets = getTargetList() - targets -= R - if (targets.len == 0) - cancelAlarm() - -/obj/machinery/camera/proc/cancelAlarm() - if (detectTime == -1) - for (var/i in GLOB.silicon_mobs) - var/mob/living/silicon/aiPlayer = i - if (status) - aiPlayer.cancelAlarm("Motion", get_area(src), src) - detectTime = 0 - return TRUE - -/obj/machinery/camera/proc/triggerAlarm() - if (!detectTime) - return FALSE - for (var/mob/living/silicon/aiPlayer in GLOB.player_list) - if (status) - aiPlayer.triggerAlarm("Motion", get_area(src), list(src), src) - visible_message("A red light flashes on the [src]!") - detectTime = -1 - return TRUE - -/obj/machinery/camera/HasProximity(atom/movable/AM as mob|obj) - // Motion cameras outside of an "ai monitored" area will use this to detect stuff. - if (!area_motion) - if(isliving(AM)) - newTarget(AM) - -/obj/machinery/camera/motion/thunderdome - name = "entertainment camera" - network = list("thunder") - c_tag = "Arena" - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF | FREEZE_PROOF - -/obj/machinery/camera/motion/thunderdome/Initialize() - . = ..() - proximity_monitor.SetRange(7) - -/obj/machinery/camera/motion/thunderdome/HasProximity(atom/movable/AM as mob|obj) - if (!isliving(AM) || get_area(AM) != get_area(src)) - return - localMotionTargets |= WEAKREF(AM) - if (!detectTime) - for(var/obj/machinery/computer/security/telescreen/entertainment/TV in GLOB.machines) - TV.notify(TRUE) - detectTime = world.time + 30 SECONDS - -/obj/machinery/camera/motion/thunderdome/process() - if (!detectTime) - return - - for (var/datum/weakref/targetref in localMotionTargets) - var/mob/target = targetref.resolve() - if(QDELETED(target) || target.stat == DEAD || get_dist(src, target) > 7 || get_area(src) != get_area(target)) - localMotionTargets -= targetref - - if (localMotionTargets.len) - detectTime = world.time + 30 SECONDS - else if (world.time > detectTime) - detectTime = 0 - for(var/obj/machinery/computer/security/telescreen/entertainment/TV in GLOB.machines) - TV.notify(FALSE) diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm deleted file mode 100644 index dcbff23b21..0000000000 --- a/code/game/machinery/camera/presets.dm +++ /dev/null @@ -1,140 +0,0 @@ -// PRESETS - -// EMP -/obj/machinery/camera/emp_proof - start_active = TRUE - -/obj/machinery/camera/emp_proof/Initialize() - . = ..() - upgradeEmpProof() - -// EMP + Motion - -/obj/machinery/camera/emp_proof/motion/Initialize() - . = ..() - upgradeMotion() - -// X-ray - -/obj/machinery/camera/xray - start_active = TRUE - icon_state = "xraycamera" //mapping icon - Thanks to Krutchen for the icons. - -/obj/machinery/camera/xray/Initialize() - . = ..() - upgradeXRay() - -// MOTION -/obj/machinery/camera/motion - start_active = TRUE - name = "motion-sensitive security camera" - -/obj/machinery/camera/motion/Initialize() - . = ..() - upgradeMotion() - -// ALL UPGRADES -/obj/machinery/camera/all - start_active = TRUE - icon_state = "xraycamera" //mapping icon. - -/obj/machinery/camera/all/Initialize() - . = ..() - upgradeEmpProof() - upgradeXRay() - upgradeMotion() - -// AUTONAME - -/obj/machinery/camera/autoname - var/number = 0 //camera number in area - -//This camera type automatically sets it's name to whatever the area that it's in is called. -/obj/machinery/camera/autoname/Initialize() - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/camera/autoname/LateInitialize() - . = ..() - number = 1 - var/area/A = get_area(src) - if(A) - for(var/obj/machinery/camera/autoname/C in GLOB.machines) - if(C == src) - continue - var/area/CA = get_area(C) - if(CA.type == A.type) - if(C.number) - number = max(number, C.number+1) - c_tag = "[A.name] #[number]" - - -// UPGRADE PROCS - -/obj/machinery/camera/proc/isEmpProof(ignore_malf_upgrades) - return (upgrades & CAMERA_UPGRADE_EMP_PROOF) && (!(ignore_malf_upgrades && assembly.malf_emp_firmware_active)) - -/obj/machinery/camera/proc/upgradeEmpProof(malf_upgrade, ignore_malf_upgrades) - if(isEmpProof(ignore_malf_upgrades)) //pass a malf upgrade to ignore_malf_upgrades so we can replace the malf module with the normal one - return //that way if someone tries to upgrade an already malf-upgraded camera, it'll just upgrade it to a normal version. - emp_component = AddComponent(/datum/component/empprotection, EMP_PROTECT_SELF | EMP_PROTECT_WIRES | EMP_PROTECT_CONTENTS) - if(malf_upgrade) - assembly.malf_emp_firmware_active = TRUE //don't add parts to drop, update icon, ect. reconstructing it will also retain the upgrade. - assembly.malf_emp_firmware_present = TRUE //so the upgrade is retained after incompatible parts are removed. - - else if(!assembly.emp_module) //only happens via upgrading in camera/attackby() - assembly.emp_module = new(assembly) - if(assembly.malf_emp_firmware_active) - assembly.malf_emp_firmware_active = FALSE //make it appear like it's just normally upgraded so the icons and examine texts are restored. - - upgrades |= CAMERA_UPGRADE_EMP_PROOF - -/obj/machinery/camera/proc/removeEmpProof(ignore_malf_upgrades) - if(ignore_malf_upgrades) //don't downgrade it if malf software is forced onto it. - return - emp_component.RemoveComponent() - upgrades &= ~CAMERA_UPGRADE_EMP_PROOF - - - -/obj/machinery/camera/proc/isXRay(ignore_malf_upgrades) - return (upgrades & CAMERA_UPGRADE_XRAY) && (!(ignore_malf_upgrades && assembly.malf_xray_firmware_active)) - -/obj/machinery/camera/proc/upgradeXRay(malf_upgrade, ignore_malf_upgrades) - if(isXRay(ignore_malf_upgrades)) //pass a malf upgrade to ignore_malf_upgrades so we can replace the malf upgrade with the normal one - return //that way if someone tries to upgrade an already malf-upgraded camera, it'll just upgrade it to a normal version. - if(malf_upgrade) - assembly.malf_xray_firmware_active = TRUE //don't add parts to drop, update icon, ect. reconstructing it will also retain the upgrade. - assembly.malf_xray_firmware_present = TRUE //so the upgrade is retained after incompatible parts are removed. - - else if(!assembly.xray_module) //only happens via upgrading in camera/attackby() - assembly.xray_module = new(assembly) - if(assembly.malf_xray_firmware_active) - assembly.malf_xray_firmware_active = FALSE //make it appear like it's just normally upgraded so the icons and examine texts are restored. - - upgrades |= CAMERA_UPGRADE_XRAY - update_icon() - -/obj/machinery/camera/proc/removeXRay(ignore_malf_upgrades) - if(!ignore_malf_upgrades) //don't downgrade it if malf software is forced onto it. - upgrades &= ~CAMERA_UPGRADE_XRAY - update_icon() - - - -/obj/machinery/camera/proc/isMotion() - return upgrades & CAMERA_UPGRADE_MOTION - -/obj/machinery/camera/proc/upgradeMotion() - if(isMotion()) - return - if(name == initial(name)) - name = "motion-sensitive security camera" - if(!assembly.proxy_module) - assembly.proxy_module = new(assembly) - upgrades |= CAMERA_UPGRADE_MOTION - -/obj/machinery/camera/proc/removeMotion() - if(name == "motion-sensitive security camera") - name = "security camera" - upgrades &= ~CAMERA_UPGRADE_MOTION diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm deleted file mode 100644 index 04a4b18894..0000000000 --- a/code/game/machinery/camera/tracking.dm +++ /dev/null @@ -1,154 +0,0 @@ -/mob/living/silicon/ai/proc/get_camera_list() - var/list/L = list() - for (var/obj/machinery/camera/C in GLOB.cameranet.cameras) - L.Add(C) - - camera_sort(L) - - var/list/T = list() - - for (var/obj/machinery/camera/C in L) - var/list/tempnetwork = C.network&src.network - if (tempnetwork.len) - T[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C - - return T - -/mob/living/silicon/ai/proc/show_camera_list() - var/list/cameras = get_camera_list() - var/camera = input(src, "Choose which camera you want to view", "Cameras") as null|anything in cameras - switchCamera(cameras[camera]) - -/datum/trackable - var/initialized = FALSE - var/list/names = list() - var/list/namecounts = list() - var/list/humans = list() - var/list/others = list() - -/mob/living/silicon/ai/proc/trackable_mobs() - track.initialized = TRUE - track.names.Cut() - track.namecounts.Cut() - track.humans.Cut() - track.others.Cut() - - if(usr.stat == DEAD) - return list() - - for(var/i in GLOB.mob_living_list) - var/mob/living/L = i - if(!L.can_track(usr)) - continue - - var/name = L.name - while(name in track.names) - track.namecounts[name]++ - name = text("[] ([])", name, track.namecounts[name]) - track.names.Add(name) - track.namecounts[name] = 1 - - if(ishuman(L)) - track.humans[name] = L - else - track.others[name] = L - - var/list/targets = sortList(track.humans) + sortList(track.others) - - return targets - -/mob/living/silicon/ai/verb/ai_camera_track(target_name in trackable_mobs()) - set name = "track" - set hidden = 1 //Don't display it on the verb lists. This verb exists purely so you can type "track Oldman Robustin" and follow his ass - - if(!target_name) - return - - if(!track.initialized) - trackable_mobs() - - var/mob/target = (isnull(track.humans[target_name]) ? track.others[target_name] : track.humans[target_name]) - - ai_actual_track(target) - -/mob/living/silicon/ai/proc/ai_actual_track(mob/living/target) - if(!istype(target)) - return - var/mob/living/silicon/ai/U = usr - - U.cameraFollow = target - U.tracking = 1 - - if(!target || !target.can_track(usr)) - to_chat(U, "Target is not near any active cameras.") - U.cameraFollow = null - return - - to_chat(U, "Now tracking [target.get_visible_name()] on camera.") - - INVOKE_ASYNC(src, PROC_REF(do_track), target, U) - -/mob/living/silicon/ai/proc/do_track(mob/living/target, mob/living/silicon/ai/U) - var/cameraticks = 0 - - while(U.cameraFollow == target) - if(U.cameraFollow == null) - return - - if(!target.can_track(usr)) - U.tracking = 1 - if(!cameraticks) - to_chat(U, "Target is not near any active cameras. Attempting to reacquire...") - cameraticks++ - if(cameraticks > 9) - U.cameraFollow = null - to_chat(U, "Unable to reacquire, cancelling track...") - tracking = 0 - return - else - sleep(10) - continue - - else - cameraticks = 0 - U.tracking = 0 - - if(U.eyeobj) - U.eyeobj.setLoc(get_turf(target)) - - else - view_core() - U.cameraFollow = null - return - - sleep(10) - -/proc/near_camera(mob/living/M) - if (!isturf(M.loc)) - return FALSE - if(issilicon(M)) - var/mob/living/silicon/S = M - if((QDELETED(S.builtInCamera) || !S.builtInCamera.can_use()) && !GLOB.cameranet.checkCameraVis(M)) - return FALSE - else if(!GLOB.cameranet.checkCameraVis(M)) - return FALSE - return TRUE - -/obj/machinery/camera/attack_ai(mob/living/silicon/ai/user) - if (!istype(user)) - return - if (!can_use()) - return - user.switchCamera(src) - -/proc/camera_sort(list/L) - var/obj/machinery/camera/a - var/obj/machinery/camera/b - - for (var/i = L.len, i > 0, i--) - for (var/j = 1 to i - 1) - a = L[j] - b = L[j + 1] - if (sorttext(a.c_tag, b.c_tag) < 0) - L.Swap(j, j + 1) - return L diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm deleted file mode 100644 index bb8239adde..0000000000 --- a/code/game/machinery/cell_charger.dm +++ /dev/null @@ -1,131 +0,0 @@ -/obj/machinery/cell_charger - name = "cell charger" - desc = "" - icon = 'icons/obj/power.dmi' - icon_state = "ccharger" - use_power = IDLE_POWER_USE - idle_power_usage = 5 - active_power_usage = 60 - power_channel = EQUIP - circuit = /obj/item/circuitboard/machine/cell_charger - pass_flags = PASSTABLE - var/obj/item/stock_parts/cell/charging = null - var/charge_rate = 500 - -/obj/machinery/cell_charger/update_overlays() - . = ..() - - if(!charging) - return - - . += image(charging.icon, charging.icon_state) - . += "ccharger-on" - if(!(stat & (BROKEN|NOPOWER))) - var/newlevel = round(charging.percent() * 4 / 100) - . += "ccharger-o[newlevel]" - -/obj/machinery/cell_charger/examine(mob/user) - . = ..() - . += "There's [charging ? "a" : "no"] cell in the charger." - if(charging) - . += "Current charge: [round(charging.percent(), 1)]%." - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Charge rate at [charge_rate]J per cycle." - -/obj/machinery/cell_charger/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/stock_parts/cell) && !panel_open) - if(stat & BROKEN) - to_chat(user, "[src] is broken!") - return - if(!anchored) - to_chat(user, "[src] isn't attached to the ground!") - return - if(charging) - to_chat(user, "There is already a cell in the charger!") - return - else - var/area/a = loc.loc // Gets our locations location, like a dream within a dream - if(!isarea(a)) - return - if(a.power_equip == 0) // There's no APC in this area, don't try to cheat power! - to_chat(user, "[src] blinks red as you try to insert the cell!") - return - if(!user.transferItemToLoc(W,src)) - return - - charging = W - user.visible_message("[user] inserts a cell into [src].", "I insert a cell into [src].") - update_icon() - else - if(!charging && default_deconstruction_screwdriver(user, icon_state, icon_state, W)) - return - if(default_deconstruction_crowbar(W)) - return - if(!charging && default_unfasten_wrench(user, W)) - return - return ..() - -/obj/machinery/cell_charger/deconstruct() - if(charging) - charging.forceMove(drop_location()) - return ..() - -/obj/machinery/cell_charger/Destroy() - QDEL_NULL(charging) - return ..() - -/obj/machinery/cell_charger/proc/removecell() - charging.update_icon() - charging = null - update_icon() - -/obj/machinery/cell_charger/attack_hand(mob/user) - . = ..() - if(.) - return - if(!charging) - return - - user.put_in_hands(charging) - charging.add_fingerprint(user) - - user.visible_message("[user] removes [charging] from [src].", "I remove [charging] from [src].") - - removecell() - -/obj/machinery/cell_charger/attack_tk(mob/user) - if(!charging) - return - - charging.forceMove(loc) - to_chat(user, "I telekinetically remove [charging] from [src].") - - removecell() - -/obj/machinery/cell_charger/attack_ai(mob/user) - return - -/obj/machinery/cell_charger/emp_act(severity) - . = ..() - - if(stat & (BROKEN|NOPOWER) || . & EMP_PROTECT_CONTENTS) - return - - if(charging) - charging.emp_act(severity) - -/obj/machinery/cell_charger/RefreshParts() - charge_rate = 500 - for(var/obj/item/stock_parts/capacitor/C in component_parts) - charge_rate *= C.rating - -/obj/machinery/cell_charger/process() - if(!charging || !anchored || (stat & (BROKEN|NOPOWER))) - return - - if(charging.percent() >= 100) - return - use_power(charge_rate) - charging.give(charge_rate) //this is 2558, efficient batteries exist - - update_icon() diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm deleted file mode 100644 index 36c68e690f..0000000000 --- a/code/game/machinery/cloning.dm +++ /dev/null @@ -1,571 +0,0 @@ -//Cloning revival method. -//The pod handles the actual cloning while the computer manages the clone profiles - -//Potential replacement for genetics revives or something I dunno (?) - -#define CLONE_INITIAL_DAMAGE 150 //Clones in clonepods start with 150 cloneloss damage and 150 brainloss damage, thats just logical -#define MINIMUM_HEAL_LEVEL 40 - -#define SPEAK(message) radio.talk_into(src, message, radio_channel) - -/obj/machinery/clonepod - name = "cloning pod" - desc = "" - density = TRUE - icon = 'icons/obj/machines/cloning.dmi' - icon_state = "pod_0" - req_access = list(ACCESS_CLONING) //FOR PREMATURE UNLOCKING. - verb_say = "states" - circuit = /obj/item/circuitboard/machine/clonepod - - var/heal_level //The clone is released once its health reaches this level. - var/obj/machinery/computer/cloning/connected //So we remember the connected clone machine. - var/mess = FALSE //Need to clean out it if it's full of exploded clone. - var/attempting = FALSE //One clone attempt at a time thanks - var/speed_coeff - var/efficiency - - var/datum/mind/clonemind - var/grab_ghost_when = CLONER_MATURE_CLONE - - var/internal_radio = TRUE - var/obj/item/radio/radio - var/radio_key = /obj/item/encryptionkey/headset_med - var/radio_channel = RADIO_CHANNEL_MEDICAL - - var/obj/effect/countdown/clonepod/countdown - - var/list/unattached_flesh - var/flesh_number = 0 - var/datum/bank_account/current_insurance - fair_market_price = 5 // He nodded, because he knew I was right. Then he swiped his credit card to pay me for arresting him. - payment_department = ACCOUNT_MED -/obj/machinery/clonepod/Initialize() - . = ..() - - countdown = new(src) - - if(internal_radio) - radio = new(src) - radio.keyslot = new radio_key - radio.subspace_transmission = TRUE - radio.canhear_range = 0 - radio.recalculateChannels() - -/obj/machinery/clonepod/Destroy() - var/mob/living/mob_occupant = occupant - go_out() - if(mob_occupant) - log_cloning("[key_name(mob_occupant)] ejected from [src] at [AREACOORD(src)] due to Destroy().") - QDEL_NULL(radio) - QDEL_NULL(countdown) - if(connected) - connected.DetachCloner(src) - QDEL_LIST(unattached_flesh) - . = ..() - -/obj/machinery/clonepod/RefreshParts() - speed_coeff = 0 - efficiency = 0 - for(var/obj/item/stock_parts/scanning_module/S in component_parts) - efficiency += S.rating - for(var/obj/item/stock_parts/manipulator/P in component_parts) - speed_coeff += P.rating - heal_level = (efficiency * 15) + 10 - if(heal_level < MINIMUM_HEAL_LEVEL) - heal_level = MINIMUM_HEAL_LEVEL - if(heal_level > 100) - heal_level = 100 - -/obj/machinery/clonepod/attack_hand(mob/user) - . = ..() - if(.) - return - user.examinate(src) - -/obj/machinery/clonepod/attack_ai(mob/user) - return attack_hand(user) - -/obj/machinery/clonepod/examine(mob/user) - . = ..() - . += "The linking device can be scanned with a multitool." - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Cloning speed at [speed_coeff*50]%.
Predicted amount of cellular damage: [100-heal_level]%.
" - if(efficiency > 5) - . += "Pod has been upgraded to support autoprocessing and apply beneficial mutations." - -//The return of data disks?? Just for transferring between genetics machine/cloning machine. -//TO-DO: Make the genetics machine accept them. -/obj/item/disk/data - name = "cloning data disk" - icon_state = "datadisk0" //Gosh I hope syndies don't mistake them for the nuke disk. - var/list/fields = list() - var/list/mutations = list() - var/max_mutations = 6 - var/read_only = FALSE //Well,it's still a floppy disk - -//Disk stuff. -/obj/item/disk/data/Initialize() - . = ..() - icon_state = "datadisk[rand(0,6)]" - add_overlay("datadisk_gene") - -/obj/item/disk/data/attack_self(mob/user) - read_only = !read_only - to_chat(user, "I flip the write-protect tab to [read_only ? "protected" : "unprotected"].") - -/obj/item/disk/data/examine(mob/user) - . = ..() - . += "The write-protect tab is set to [read_only ? "protected" : "unprotected"]." - - -//Clonepod - -/obj/machinery/clonepod/examine(mob/user) - . = ..() - var/mob/living/mob_occupant = occupant - if(mess) - . += "It's filled with blood and viscera. You swear you can see it moving..." - if(is_operational() && istype(mob_occupant)) - if(mob_occupant.stat != DEAD) - . += "Current clone cycle is [round(get_completion())]% complete." - -/obj/machinery/clonepod/return_air() - // We want to simulate the clone not being in contact with - // the atmosphere, so we'll put them in a constant pressure - // nitrogen. They don't need to breathe while cloning anyway. - var/static/datum/gas_mixture/immutable/cloner/GM //global so that there's only one instance made for all cloning pods - if(!GM) - GM = new - return GM - -/obj/machinery/clonepod/proc/get_completion() - . = FALSE - var/mob/living/mob_occupant = occupant - if(mob_occupant) - . = (100 * ((mob_occupant.health + 100) / (heal_level + 100))) - -/obj/machinery/clonepod/attack_ai(mob/user) - return examine(user) - -//Start growing a human clone in the pod! -/obj/machinery/clonepod/proc/growclone(clonename, ui, mutation_index, mindref, last_death, blood_type, datum/species/mrace, list/features, factions, list/quirks, datum/bank_account/insurance, list/traumas, empty) - if(panel_open) - return NONE - if(mess || attempting) - return NONE - - if(!empty) //Doesn't matter if we're just making a copy - clonemind = locate(mindref) in SSticker.minds - if(!istype(clonemind)) //not a mind - return NONE - if(clonemind.last_death != last_death) //The soul has advanced, the record has not. - return NONE - if(!QDELETED(clonemind.current)) - if(clonemind.current.stat != DEAD) //mind is associated with a non-dead body - return NONE - if(clonemind.current.suiciding) // Mind is associated with a body that is suiciding. - return NONE - if(!clonemind.active) - // get_ghost() will fail if they're unable to reenter their body - var/mob/dead/observer/G = clonemind.get_ghost() - if(!G) - return NONE - if(G.suiciding) // The ghost came from a body that is suiciding. - return NONE - if(clonemind.damnation_type) //Can't clone the damned. - INVOKE_ASYNC(src, PROC_REF(horrifyingsound)) - mess = TRUE - icon_state = "pod_g" - update_icon() - return NONE - current_insurance = insurance - attempting = TRUE //One at a time!! - countdown.start() - - var/mob/living/carbon/human/H = new /mob/living/carbon/human(src) - - H.hardset_dna(ui, mutation_index, H.real_name, blood_type, mrace, features) - - if(!HAS_TRAIT(H, TRAIT_RADIMMUNE))//dont apply mutations if the species is Mutation proof. - if(efficiency > 2) - var/list/unclean_mutations = (GLOB.not_good_mutations|GLOB.bad_mutations) - H.dna.remove_mutation_group(unclean_mutations) - if(efficiency > 5 && prob(20)) - H.easy_randmut(POSITIVE) - if(efficiency < 3 && prob(50)) - var/mob/M = H.easy_randmut(NEGATIVE+MINOR_NEGATIVE) - if(ismob(M)) - H = M - - H.silent = 20 //Prevents an extreme edge case where clones could speak if they said something at exactly the right moment. - occupant = H - - if(!clonename) //to prevent null names - clonename = "clone ([rand(1,999)])" - H.real_name = clonename - - icon_state = "pod_1" - //Get the clone body ready - maim_clone(H) - ADD_TRAIT(H, TRAIT_STABLEHEART, CLONING_POD_TRAIT) - ADD_TRAIT(H, TRAIT_STABLELIVER, CLONING_POD_TRAIT) - ADD_TRAIT(H, TRAIT_EMOTEMUTE, CLONING_POD_TRAIT) - ADD_TRAIT(H, TRAIT_MUTE, CLONING_POD_TRAIT) - ADD_TRAIT(H, TRAIT_NOBREATH, CLONING_POD_TRAIT) - ADD_TRAIT(H, TRAIT_NOCRITDAMAGE, CLONING_POD_TRAIT) - H.Unconscious(80) - - if(!empty) - clonemind.transfer_to(H) - - if(grab_ghost_when == CLONER_FRESH_CLONE) - H.grab_ghost() - to_chat(H, "Consciousness slowly creeps over you as my body regenerates.
So this is what cloning feels like?
") - - if(grab_ghost_when == CLONER_MATURE_CLONE) - H.ghostize(TRUE) //Only does anything if they were still in their old body and not already a ghost - to_chat(H.get_ghost(TRUE), "My body is beginning to regenerate in a cloning pod. You will become conscious when it is complete.") - - if(H) - H.faction |= factions - - for(var/V in quirks) - var/datum/quirk/Q = new V(H) - Q.on_clone(quirks[V]) - - for(var/t in traumas) - var/datum/brain_trauma/BT = t - var/datum/brain_trauma/cloned_trauma = BT.on_clone() - if(cloned_trauma) - H.gain_trauma(cloned_trauma, BT.resilience) - - H.set_cloned_appearance() - - H.set_suicide(FALSE) - attempting = FALSE - return CLONING_SUCCESS - -//Grow clones to maturity then kick them out. FREELOADERS -/obj/machinery/clonepod/process() - var/mob/living/mob_occupant = occupant - - if(!is_operational()) //Autoeject if power is lost - if(mob_occupant) - go_out() - log_cloning("[key_name(mob_occupant)] ejected from [src] at [AREACOORD(src)] due to power loss.") - - connected_message("Clone Ejected: Loss of power.") - - else if(mob_occupant && (mob_occupant.loc == src)) - if(SSeconomy.full_ancap) - if(!current_insurance) - go_out() - log_cloning("[key_name(mob_occupant)] ejected from [src] at [AREACOORD(src)] due to invalid bank account.") - connected_message("Clone Ejected: No bank account.") - if(internal_radio) - SPEAK("The cloning of [mob_occupant.real_name] has been terminated due to no bank account to draw payment from.") - else if(!current_insurance.adjust_money(-fair_market_price)) - go_out() - log_cloning("[key_name(mob_occupant)] ejected from [src] at [AREACOORD(src)] due to insufficient funds.") - connected_message("Clone Ejected: Out of Money.") - if(internal_radio) - SPEAK("The cloning of [mob_occupant.real_name] has been ended prematurely due to being unable to pay.") - else - var/datum/bank_account/D = SSeconomy.get_dep_account(payment_department) - if(D) - D.adjust_money(fair_market_price) - if(mob_occupant && (mob_occupant.stat == DEAD) || (mob_occupant.suiciding) || mob_occupant.hellbound) //Autoeject corpses and suiciding dudes. - connected_message("Clone Rejected: Deceased.") - if(internal_radio) - SPEAK("The cloning of [mob_occupant.real_name] has been \ - aborted due to unrecoverable tissue failure.") - go_out() - log_cloning("[key_name(mob_occupant)] ejected from [src] at [AREACOORD(src)] after suiciding.") - - else if(mob_occupant && mob_occupant.cloneloss > (100 - heal_level)) - mob_occupant.Unconscious(80) - var/dmg_mult = CONFIG_GET(number/damage_multiplier) - //Slowly get that clone healed and finished. - mob_occupant.adjustCloneLoss(-((speed_coeff / 2) * dmg_mult)) - var/progress = CLONE_INITIAL_DAMAGE - mob_occupant.getCloneLoss() - // To avoid the default cloner making incomplete clones - progress += (100 - MINIMUM_HEAL_LEVEL) - var/milestone = CLONE_INITIAL_DAMAGE / flesh_number - var/installed = flesh_number - unattached_flesh.len - - if((progress / milestone) >= installed) - // attach some flesh - var/obj/item/I = pick_n_take(unattached_flesh) - if(isorgan(I)) - var/obj/item/organ/O = I - O.organ_flags &= ~ORGAN_FROZEN - O.Insert(mob_occupant) - else if(isbodypart(I)) - var/obj/item/bodypart/BP = I - BP.attach_limb(mob_occupant) - - use_power(7500) //This might need tweaking. - - else if(mob_occupant && (mob_occupant.cloneloss <= (100 - heal_level))) - connected_message("Cloning Process Complete.") - if(internal_radio) - SPEAK("The cloning cycle of [mob_occupant.real_name] is complete.") - - // If the cloner is upgraded to debugging high levels, sometimes - // organs and limbs can be missing. - for(var/i in unattached_flesh) - if(isorgan(i)) - var/obj/item/organ/O = i - O.organ_flags &= ~ORGAN_FROZEN - O.Insert(mob_occupant) - else if(isbodypart(i)) - var/obj/item/bodypart/BP = i - BP.attach_limb(mob_occupant) - - go_out() - log_cloning("[key_name(mob_occupant)] completed cloning cycle in [src] at [AREACOORD(src)].") - - else if (!mob_occupant || mob_occupant.loc != src) - occupant = null - if (!mess && !panel_open) - icon_state = "pod_0" - use_power(200) - -//Let's unlock this early I guess. Might be too early, needs tweaking. -/obj/machinery/clonepod/attackby(obj/item/W, mob/user, params) - if(!(occupant || mess)) - if(default_deconstruction_screwdriver(user, "[icon_state]_maintenance", "[initial(icon_state)]",W)) - return - - if(default_deconstruction_crowbar(W)) - return - - if(W.tool_behaviour == TOOL_MULTITOOL) - if(!multitool_check_buffer(user, W)) - return - var/obj/item/multitool/P = W - - if(istype(P.buffer, /obj/machinery/computer/cloning)) - if(get_area(P.buffer) != get_area(src)) - to_chat(user, "-% Cannot link machines across power zones. Buffer cleared %-") - P.buffer = null - return - to_chat(user, "-% Successfully linked [P.buffer] with [src] %-") - var/obj/machinery/computer/cloning/comp = P.buffer - if(connected) - connected.DetachCloner(src) - comp.AttachCloner(src) - else - P.buffer = src - to_chat(user, "-% Successfully stored [REF(P.buffer)] [P.buffer.name] in buffer %-") - return - - var/mob/living/mob_occupant = occupant - if(W.GetID()) - if(!check_access(W)) - to_chat(user, "Access Denied.") - return - if(!(mob_occupant || mess)) - to_chat(user, "Error: Pod has no occupant.") - return - else - add_fingerprint(user) - connected_message("Emergency Ejection") - SPEAK("An emergency ejection of [clonemind.name] has occurred. Survival not guaranteed.") - to_chat(user, "I force an emergency ejection. ") - go_out() - log_cloning("[key_name(user)] manually ejected [key_name(mob_occupant)] from [src] at [AREACOORD(src)].") - log_combat(user, mob_occupant, "ejected", W, "from [src]") - else - return ..() - -/obj/machinery/clonepod/emag_act(mob/user) - if(!occupant) - return - to_chat(user, "I corrupt the genetic compiler.") - malfunction() - add_fingerprint(user) - log_cloning("[key_name(user)] emagged [src] at [AREACOORD(src)], causing it to malfunction.") - log_combat(user, src, "emagged", null, occupant ? "[occupant] inside, killing them via malfunction." : null) - -//Put messages in the connected computer's temp var for display. -/obj/machinery/clonepod/proc/connected_message(message) - if ((isnull(connected)) || (!istype(connected, /obj/machinery/computer/cloning))) - return FALSE - if (!message) - return FALSE - - connected.temp = message - connected.updateUsrDialog() - return TRUE - -/obj/machinery/clonepod/proc/go_out() - countdown.stop() - var/mob/living/mob_occupant = occupant - var/turf/T = get_turf(src) - - if(mess) //Clean that mess and dump those gibs! - for(var/obj/fl in unattached_flesh) - fl.forceMove(T) - if(istype(fl, /obj/item/organ)) - var/obj/item/organ/O = fl - O.organ_flags &= ~ORGAN_FROZEN - unattached_flesh.Cut() - mess = FALSE - new /obj/effect/gibspawner/generic(get_turf(src), mob_occupant) - audible_message("I hear a splat.") - icon_state = "pod_0" - return - - if(!mob_occupant) - return - current_insurance = null - REMOVE_TRAIT(mob_occupant, TRAIT_STABLEHEART, CLONING_POD_TRAIT) - REMOVE_TRAIT(mob_occupant, TRAIT_STABLELIVER, CLONING_POD_TRAIT) - REMOVE_TRAIT(mob_occupant, TRAIT_EMOTEMUTE, CLONING_POD_TRAIT) - REMOVE_TRAIT(mob_occupant, TRAIT_MUTE, CLONING_POD_TRAIT) - REMOVE_TRAIT(mob_occupant, TRAIT_NOCRITDAMAGE, CLONING_POD_TRAIT) - REMOVE_TRAIT(mob_occupant, TRAIT_NOBREATH, CLONING_POD_TRAIT) - - if(grab_ghost_when == CLONER_MATURE_CLONE) - mob_occupant.grab_ghost() - to_chat(occupant, "There is a bright flash!
I feel like a new being.
") - mob_occupant.flash_act() - - occupant.forceMove(T) - icon_state = "pod_0" - mob_occupant.domutcheck(1) //Waiting until they're out before possible monkeyizing. The 1 argument forces powers to manifest. - for(var/fl in unattached_flesh) - qdel(fl) - unattached_flesh.Cut() - - occupant = null - clonemind = null - -/obj/machinery/clonepod/proc/malfunction() - var/mob/living/mob_occupant = occupant - if(mob_occupant) - connected_message("Critical Error!") - SPEAK("Critical error! Please contact a Thinktronic Systems \ - technician, as my warranty may be affected.") - mess = TRUE - maim_clone(mob_occupant) //Remove every bit that's grown back so far to drop later, also destroys bits that haven't grown yet - icon_state = "pod_g" - if(clonemind && mob_occupant.mind != clonemind) - clonemind.transfer_to(mob_occupant) - mob_occupant.grab_ghost() // We really just want to make you suffer. - flash_color(mob_occupant, flash_color="#960000", flash_time=100) - to_chat(mob_occupant, "Agony blazes across my consciousness as my body is torn apart.
Is this what dying is like? Yes it is.
") - playsound(src, 'sound/blank.ogg', 50) - SEND_SOUND(mob_occupant, sound('sound/blank.ogg',0,1,50)) - log_cloning("[key_name(mob_occupant)] destroyed within [src] at [AREACOORD(src)] due to malfunction.") - QDEL_IN(mob_occupant, 40) - -/obj/machinery/clonepod/relaymove(mob/user) - container_resist(user) - -/obj/machinery/clonepod/container_resist(mob/living/user) - if(user.stat == CONSCIOUS) - go_out() - -/obj/machinery/clonepod/emp_act(severity) - . = ..() - if (!(. & EMP_PROTECT_SELF)) - var/mob/living/mob_occupant = occupant - if(mob_occupant && prob(100/(severity*efficiency))) - connected_message(Gibberish("EMP-caused Accidental Ejection")) - SPEAK(Gibberish("Exposure to electromagnetic fields has caused the ejection of [mob_occupant.real_name] prematurely.")) - go_out() - log_cloning("[key_name(mob_occupant)] ejected from [src] at [AREACOORD(src)] due to EMP pulse.") - -/obj/machinery/clonepod/ex_act(severity, target) - ..() - if(!QDELETED(src) && occupant) - var/mob/living/mob_occupant = occupant - go_out() - log_cloning("[key_name(mob_occupant)] ejected from [src] at [AREACOORD(src)] due to explosion.") - -/obj/machinery/clonepod/handle_atom_del(atom/A) - if(A == occupant) - occupant = null - countdown.stop() - -/obj/machinery/clonepod/proc/horrifyingsound() - for(var/i in 1 to 5) - playsound(src,pick('sound/blank.ogg'), 100, rand(0.95,1.05)) - sleep(1) - sleep(10) - playsound(src,'sound/blank.ogg', 100, TRUE) - -/obj/machinery/clonepod/deconstruct(disassembled = TRUE) - if(occupant) - var/mob/living/mob_occupant = occupant - go_out() - log_cloning("[key_name(mob_occupant)] ejected from [src] at [AREACOORD(src)] due to deconstruction.") - ..() - -/obj/machinery/clonepod/proc/maim_clone(mob/living/carbon/human/H) - if(!unattached_flesh) - unattached_flesh = list() - else - for(var/fl in unattached_flesh) - qdel(fl) - unattached_flesh.Cut() - - H.setCloneLoss(CLONE_INITIAL_DAMAGE) //Yeah, clones start with very low health, not with random, because why would they start with random health - // In addition to being cellularly damaged, they also have no limbs or internal organs. - // Applying brainloss is done when the clone leaves the pod, so application of traumas can happen - // based on the level of damage sustained. - - if(!HAS_TRAIT(H, TRAIT_NODISMEMBER)) - var/static/list/zones = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) - for(var/zone in zones) - var/obj/item/bodypart/BP = H.get_bodypart(zone) - if(BP) - BP.drop_limb() - BP.forceMove(src) - unattached_flesh += BP - - for(var/o in H.internal_organs) - var/obj/item/organ/organ = o - if(!istype(organ) || (organ.organ_flags & ORGAN_VITAL)) - continue - organ.organ_flags |= ORGAN_FROZEN - organ.Remove(H, special=TRUE) - organ.forceMove(src) - unattached_flesh += organ - - flesh_number = unattached_flesh.len - -/* - * Manual -- A big ol' manual. - */ - -/obj/item/paper/guides/jobs/medical/cloning - name = "paper - 'H-87 Cloning Apparatus Manual" - info = {"

Getting Started

- Congratulations, my station has purchased the H-87 industrial cloning device!
- Using the H-87 is almost as simple as brain surgery! Simply insert the target humanoid into the scanning chamber and select the scan option to create a new profile!
- That's all there is to it!
- Notice, cloning system cannot scan inorganic life or small primates. Scan may fail if subject has suffered extreme brain damage.
-

Clone profiles may be viewed through the profiles menu. Scanning implants a complementary HEALTH MONITOR IMPLANT into the subject, which may be viewed from each profile. - Profile Deletion has been restricted to \[Station Head\] level access.

-

Cloning from a profile

- Cloning is as simple as pressing the CLONE option at the bottom of the desired profile.
- Per my company's EMPLOYEE PRIVACY RIGHTS agreement, the H-87 has been blocked from cloning crewmembers while they are still alive.
-
-

The provided CLONEPOD SYSTEM will produce the desired clone. Standard clone maturation times (With SPEEDCLONE technology) are roughly 90 seconds. - The cloning pod may be unlocked early with any \[Medical Researcher\] ID after initial maturation is complete.


- Please note that resulting clones may have a small DEVELOPMENTAL DEFECT as a result of genetic drift.
-

Profile Management

-

The H-87 (as well as my station's standard genetics machine) can accept STANDARD DATA DISKETTES. - These diskettes are used to transfer genetic information between machines and profiles. - A load/save dialog will become available in each profile if a disk is inserted.


- A good diskette is a great way to counter aforementioned genetic drift!
-
- This technology produced under license from Thinktronic Systems, LTD."} - -#undef CLONE_INITIAL_DAMAGE -#undef SPEAK -#undef MINIMUM_HEAL_LEVEL diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm deleted file mode 100644 index e6f1d104ce..0000000000 --- a/code/game/machinery/computer/Operating.dm +++ /dev/null @@ -1,121 +0,0 @@ -#define MENU_OPERATION 1 -#define MENU_SURGERIES 2 - -/obj/machinery/computer/operating - name = "operating computer" - desc = "" - icon_screen = "crew" - icon_keyboard = "med_key" - circuit = /obj/item/circuitboard/computer/operating - ui_x = 350 - ui_y = 470 - - var/mob/living/carbon/human/patient - var/obj/structure/table/optable/table - var/list/advanced_surgery_steps = list() - var/datum/techweb/linked_techweb - light_color = LIGHT_COLOR_BLUE - var/list/linked_stasisbeds - -/obj/machinery/computer/operating/Initialize() - . = ..() - linked_techweb = SSresearch.science_tech - find_table() - -/obj/machinery/computer/operating/Destroy() - for(var/i in linked_stasisbeds) - var/obj/machinery/stasis/SB = i - SB.op_computer = null - ..() - -/obj/machinery/computer/operating/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item/disk/surgery)) - user.visible_message("[user] begins to load \the [O] in \the [src]...", \ - "I begin to load a surgery protocol from \the [O]...", \ - "I hear the chatter of a floppy drive.") - var/obj/item/disk/surgery/D = O - if(do_after(user, 10, target = src)) - advanced_surgery_steps |= D.surgery_steps - return TRUE - return ..() - -/obj/machinery/computer/operating/proc/sync_surgeries() - for(var/i in linked_techweb.researched_designs) - var/datum/design/surgery/D = SSresearch.techweb_design_by_id(i) - if(!istype(D)) - continue - advanced_surgery_steps |= D.surgery_step - -/obj/machinery/computer/operating/proc/find_table() - for(var/direction in GLOB.cardinals) - table = locate(/obj/structure/table/optable, get_step(src, direction)) - if(table) - table.computer = src - break - if(!linked_stasisbeds) - linked_stasisbeds = list() - - for(var/obj/machinery/stasis/SB in view(7,src)) - if(SB.op_computer) - continue - linked_stasisbeds |= SB - SB.op_computer = src - -/obj/machinery/computer/operating/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.not_incapacitated_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "operating_computer", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/computer/operating/ui_data(mob/user) - var/list/data = list() - data["table"] = table - - var/list/surgeries = list() - for(var/X in advanced_surgery_steps) - var/datum/surgery/S = X - var/list/surgery = list() - surgery["name"] = initial(S.name) - surgery["desc"] = initial(S.desc) - surgeries += list(surgery) - data["surgeries"] = surgeries - if(table) - if(table.check_patient()) - data["patient"] = list() - patient = table.patient - switch(patient.stat) - if(CONSCIOUS) - data["patient"]["stat"] = "Conscious" - data["patient"]["statstate"] = "good" - if(SOFT_CRIT) - data["patient"]["stat"] = "Conscious" - data["patient"]["statstate"] = "average" - if(UNCONSCIOUS) - data["patient"]["stat"] = "Unconscious" - data["patient"]["statstate"] = "average" - if(DEAD) - data["patient"]["stat"] = "Dead" - data["patient"]["statstate"] = "bad" - data["patient"]["health"] = patient.health - data["patient"]["blood_type"] = patient.dna.blood_type - data["patient"]["maxHealth"] = patient.maxHealth - data["patient"]["minHealth"] = HEALTH_THRESHOLD_DEAD - data["patient"]["bruteLoss"] = patient.getBruteLoss() - data["patient"]["fireLoss"] = patient.getFireLoss() - data["patient"]["toxLoss"] = patient.getToxLoss() - data["patient"]["oxyLoss"] = patient.getOxyLoss() - else - data["patient"] = null - return data - -/obj/machinery/computer/operating/ui_act(action, params) - if(..()) - return - switch(action) - if("sync") - sync_surgeries() - . = TRUE - . = TRUE - -#undef MENU_OPERATION -#undef MENU_SURGERIES diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm deleted file mode 100644 index 87b640bb75..0000000000 --- a/code/game/machinery/computer/_computer.dm +++ /dev/null @@ -1,127 +0,0 @@ -/obj/machinery/computer - name = "computer" - icon = 'icons/obj/computer.dmi' - icon_state = "computer" - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 300 - active_power_usage = 300 - max_integrity = 200 - integrity_failure = 0.5 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 20) - var/brightness_on = 1 - var/icon_keyboard = "generic_key" - var/icon_screen = "generic" - var/time_to_screwdrive = 20 - var/authenticated = 0 - -/obj/machinery/computer/Initialize(mapload, obj/item/circuitboard/C) - . = ..() - power_change() - if(!QDELETED(C)) - qdel(circuit) - circuit = C - C.moveToNullspace() - -/obj/machinery/computer/Destroy() - QDEL_NULL(circuit) - return ..() - -/obj/machinery/computer/process() - if(stat & (NOPOWER|BROKEN)) - return 0 - return 1 - -/obj/machinery/computer/update_overlays() - . = ..() - - SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) - if(stat & NOPOWER) - . += "[icon_keyboard]_off" - return - . += icon_keyboard - - // This whole block lets screens ignore lighting and be visible even in the darkest room - // We can't do this for many things that emit light unfortunately because it layers over things that would be on top of it - var/overlay_state = icon_screen - if(stat & BROKEN) - overlay_state = "[icon_state]_broken" - SSvis_overlays.add_vis_overlay(src, icon, overlay_state, layer, plane, dir) - SSvis_overlays.add_vis_overlay(src, icon, overlay_state, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir, alpha=128) - -/obj/machinery/computer/power_change() - . = ..() - if(stat & NOPOWER) - set_light(0) - else - set_light(brightness_on) - -/obj/machinery/computer/screwdriver_act(mob/living/user, obj/item/I) - if(..()) - return TRUE - if(circuit && !(flags_1&NODECONSTRUCT_1)) - to_chat(user, "I start to disconnect the monitor...") - if(I.use_tool(src, user, time_to_screwdrive, volume=50)) - deconstruct(TRUE, user) - return TRUE - -/obj/machinery/computer/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - if(stat & BROKEN) - playsound(src.loc, 'sound/blank.ogg', 70, TRUE) - else - playsound(src.loc, 'sound/blank.ogg', 75, TRUE) - if(BURN) - playsound(src.loc, 'sound/blank.ogg', 100, TRUE) - -/obj/machinery/computer/obj_break(damage_flag) - if(!circuit) //no circuit, no breaking - return - . = ..() - if(.) - playsound(loc, 'sound/blank.ogg', 100, TRUE) - set_light(0) - -/obj/machinery/computer/emp_act(severity) - . = ..() - if (!(. & EMP_PROTECT_SELF)) - switch(severity) - if(1) - if(prob(50)) - obj_break("energy") - if(2) - if(prob(10)) - obj_break("energy") - -/obj/machinery/computer/deconstruct(disassembled = TRUE, mob/user) - on_deconstruction() - if(!(flags_1 & NODECONSTRUCT_1)) - if(circuit) //no circuit, no computer frame - var/obj/structure/frame/computer/A = new /obj/structure/frame/computer(src.loc) - A.setDir(dir) - A.circuit = circuit - A.setAnchored(TRUE) - if(stat & BROKEN) - if(user) - to_chat(user, "The broken glass falls out.") - else - playsound(src, 'sound/blank.ogg', 70, TRUE) - new /obj/item/shard(drop_location()) - new /obj/item/shard(drop_location()) - A.state = 3 - A.icon_state = "3" - else - if(user) - to_chat(user, "I disconnect the monitor.") - A.state = 4 - A.icon_state = "4" - circuit = null - for(var/obj/C in src) - C.forceMove(loc) - qdel(src) - -/obj/machinery/computer/AltClick(mob/user) - . = ..() - if(!user.canUseTopic(src, !issilicon(user)) || !is_operational()) - return diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm deleted file mode 100644 index 4b47bc053e..0000000000 --- a/code/game/machinery/computer/aifixer.dm +++ /dev/null @@ -1,160 +0,0 @@ -/obj/machinery/computer/aifixer - name = "\improper AI system integrity restorer" - desc = "" - req_access = list(ACCESS_CAPTAIN, ACCESS_ROBOTICS, ACCESS_HEADS) - var/mob/living/silicon/ai/occupier = null - var/active = 0 - circuit = /obj/item/circuitboard/computer/aifixer - icon_keyboard = "tech_key" - icon_screen = "ai-fixer" - light_color = LIGHT_COLOR_PINK - -/obj/machinery/computer/aifixer/screwdriver_act(mob/living/user, obj/item/I) - if(occupier) - if(stat & (NOPOWER|BROKEN)) - to_chat(user, "The screws on [name]'s screen won't budge.") - else - to_chat(user, "The screws on [name]'s screen won't budge and it emits a warning beep.") - else - return ..() - -/obj/machinery/computer/aifixer/ui_interact(mob/user) - . = ..() - - var/dat = "" - - if (src.occupier) - var/laws - dat += "

Stored AI: [src.occupier.name]

" - dat += "System integrity: [(src.occupier.health+100)/2]%
" - - if (src.occupier.laws.zeroth) - laws += "0: [src.occupier.laws.zeroth]
" - - for (var/index = 1, index <= src.occupier.laws.hacked.len, index++) - var/law = src.occupier.laws.hacked[index] - if (length(law) > 0) - var/num = ionnum() - laws += "[num]: [law]
" - - for (var/index = 1, index <= src.occupier.laws.ion.len, index++) - var/law = src.occupier.laws.ion[index] - if (length(law) > 0) - var/num = ionnum() - laws += "[num]: [law]
" - - var/number = 1 - for (var/index = 1, index <= src.occupier.laws.inherent.len, index++) - var/law = src.occupier.laws.inherent[index] - if (length(law) > 0) - laws += "[number]: [law]
" - number++ - - for (var/index = 1, index <= src.occupier.laws.supplied.len, index++) - var/law = src.occupier.laws.supplied[index] - if (length(law) > 0) - laws += "[number]: [law]
" - number++ - - dat += "Laws:
[laws]
" - - if (src.occupier.stat == DEAD) - dat += "AI non-functional" - else - dat += "AI functional" - if (!src.active) - dat += {"

Begin Reconstruction"} - else - dat += "

Reconstruction in process, please wait.
" - dat += {"
Close"} - var/datum/browser/popup = new(user, "computer", "AI System Integrity Restorer", 400, 500) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - return - -/obj/machinery/computer/aifixer/proc/Fix() - use_power(1000) - occupier.adjustOxyLoss(-5, 0) - occupier.adjustFireLoss(-5, 0) - occupier.adjustToxLoss(-5, 0) - occupier.adjustBruteLoss(-5, 0) - occupier.updatehealth() - if(occupier.health >= 0 && occupier.stat == DEAD) - occupier.revive(full_heal = FALSE, admin_revive = FALSE) - if(!occupier.radio_enabled) - occupier.radio_enabled = TRUE - to_chat(occupier, "My Subspace Transceiver has been enabled!") - return occupier.health < 100 - -/obj/machinery/computer/aifixer/process() - if(..()) - if(active) - var/oldstat = occupier.stat - active = Fix() - if(oldstat != occupier.stat) - update_icon() - updateDialog() - -/obj/machinery/computer/aifixer/Topic(href, href_list) - if(..()) - return - if(href_list["fix"]) - to_chat(usr, "Reconstruction in progress. This will take several minutes.") - playsound(src, 'sound/blank.ogg', 25, FALSE) - active = TRUE - if(occupier) - var/mob/living/silicon/ai/A = occupier - A.notify_ghost_cloning("Your core files are being restored!", source = src) - add_fingerprint(usr) - updateUsrDialog() - -/obj/machinery/computer/aifixer/update_overlays() - . = ..() - if(stat & (NOPOWER|BROKEN)) - return - - if(active) - . += "ai-fixer-on" - if (occupier) - switch (occupier.stat) - if (0) - . += "ai-fixer-full" - if (2) - . += "ai-fixer-404" - else - . += "ai-fixer-empty" - -/obj/machinery/computer/aifixer/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card) - if(!..()) - return - //Downloading AI from card to terminal. - if(interaction == AI_TRANS_FROM_CARD) - if(stat & (NOPOWER|BROKEN)) - to_chat(user, "[src] is offline and cannot take an AI at this time.") - return - AI.forceMove(src) - occupier = AI - AI.control_disabled = TRUE - AI.radio_enabled = FALSE - to_chat(AI, "I have been uploaded to a stationary terminal. Sadly, there is no remote access from here.") - to_chat(user, "Transfer successful: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed.") - card.AI = null - update_icon() - - else //Uploading AI from terminal to card - if(occupier && !active) - to_chat(occupier, "I have been downloaded to a mobile storage device. Still no remote access.") - to_chat(user, "Transfer successful: [occupier.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory.") - occupier.forceMove(card) - card.AI = occupier - occupier = null - update_icon() - else if (active) - to_chat(user, "ERROR: Reconstruction in progress.") - else if (!occupier) - to_chat(user, "ERROR: Unable to locate artificial intelligence.") - -/obj/machinery/computer/aifixer/on_deconstruction() - if(occupier) - QDEL_NULL(occupier) diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm deleted file mode 100644 index 189c76000b..0000000000 --- a/code/game/machinery/computer/apc_control.dm +++ /dev/null @@ -1,205 +0,0 @@ -/obj/machinery/computer/apc_control - name = "power flow control console" - desc = "" - icon_screen = "solar" - icon_keyboard = "power_key" - req_access = list(ACCESS_ENGINE) - circuit = /obj/item/circuitboard/computer/apc_control - light_color = LIGHT_COLOR_YELLOW - var/mob/living/operator //Who's operating the computer right now - var/obj/machinery/power/apc/active_apc //The APC we're using right now - var/list/result_filters //For sorting the results - var/checking_logs = 0 - var/list/logs - var/auth_id = "\[NULL\]" - -/obj/machinery/computer/apc_control/Initialize() - . = ..() - result_filters = list("Name" = null, "Charge Above" = null, "Charge Below" = null, "Responsive" = null) - -/obj/machinery/computer/apc_control/process() - if(operator && (!operator.Adjacent(src) || stat)) - operator = null - if(active_apc) - if(!active_apc.locked) - active_apc.say("Remote access canceled. Interface locked.") - playsound(active_apc, 'sound/blank.ogg', 25, FALSE) - playsound(active_apc, 'sound/blank.ogg', 50, FALSE) - active_apc.locked = TRUE - active_apc.update_icon() - active_apc.remote_control = null - active_apc = null - -/obj/machinery/computer/apc_control/attack_ai(mob/user) - if(!IsAdminGhost(user)) - to_chat(user,"[src] does not support AI control.") //You already have APC access, cheater! - return - ..(user) - -/obj/machinery/computer/apc_control/proc/check_apc(obj/machinery/power/apc/APC) - return APC.z == z && !APC.malfhack && !APC.aidisabled && !(APC.obj_flags & EMAGGED) && !APC.stat && !istype(APC.area, /area/ai_monitored) && !APC.area.outdoors - -/obj/machinery/computer/apc_control/ui_interact(mob/living/user) - . = ..() - var/dat - if(authenticated) - if(!checking_logs) - dat += "Logged in as [auth_id].

" - dat += "Filters
" - dat += "Name: [result_filters["Name"] ? result_filters["Name"] : "None set"]
" - dat += "Charge: \>[result_filters["Charge Above"] ? result_filters["Charge Above"] : "NaN"]% and \<[result_filters["Charge Below"] ? result_filters["Charge Below"] : "NaN"]%
" - dat += "Accessible: [result_filters["Responsive"] ? "Non-Responsive Only" : "All"]

" - for(var/A in GLOB.apcs_list) - if(check_apc(A)) - var/obj/machinery/power/apc/APC = A - if(result_filters["Name"] && !findtext(APC.name, result_filters["Name"]) && !findtext(APC.area.name, result_filters["Name"])) - continue - if(result_filters["Charge Above"] && (!APC.cell || (APC.cell && (APC.cell.charge / APC.cell.maxcharge) < result_filters["Charge Above"] / 100))) - continue - if(result_filters["Charge Below"] && APC.cell && (APC.cell.charge / APC.cell.maxcharge) > result_filters["Charge Below"] / 100) - continue - if(result_filters["Responsive"] && !APC.aidisabled) - continue - dat += "[A]
\ - Charge: [APC.cell ? "[DisplayEnergy(APC.cell.charge)] / [DisplayEnergy(APC.cell.maxcharge)] ([round((APC.cell.charge / APC.cell.maxcharge) * 100)]%)" : "No Powercell Installed"]
\ - Area: [APC.area]
\ - [APC.aidisabled || APC.panel_open ? "APC does not respond to interface query." : "APC responds to interface query."]

" - dat += "Check Logs
" - dat += "Log Out
" - if(obj_flags & EMAGGED) - dat += "WARNING: Logging functionality partially disabled from outside source.
" - dat += "Restore logging functionality?
" - else - if(logs.len) - for(var/entry in logs) - dat += "[entry]
" - else - dat += "No activity has been recorded at this time.
" - if(obj_flags & EMAGGED) - dat += "@#%! CLEAR LOGS" - dat += "Return" - operator = user - else - dat = "Please swipe a valid ID to log in..." - var/datum/browser/popup = new(user, "apc_control", name, 600, 400) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - popup.open() - -/obj/machinery/computer/apc_control/Topic(href, href_list) - if(..()) - return - if(!usr || !usr.canUseTopic(src, !issilicon(usr)) || stat || QDELETED(src)) - return - if(href_list["authenticate"]) - var/obj/item/card/id/ID = usr.get_idcard(TRUE) - if(ID && istype(ID)) - if(check_access(ID)) - authenticated = TRUE - auth_id = "[ID.registered_name] ([ID.assignment])" - log_activity("logged in") - playsound(src, 'sound/blank.ogg', 50, FALSE) - if(href_list["log_out"]) - log_activity("logged out") - playsound(src, 'sound/blank.ogg', 50, FALSE) - authenticated = FALSE - auth_id = "\[NULL\]" - if(href_list["restore_logging"]) - to_chat(usr, "[icon2html(src, usr)] Logging functionality restored from backup data.") - obj_flags &= ~EMAGGED - LAZYADD(logs, "-=- Logging restored to full functionality at this point -=-") - if(href_list["access_apc"]) - playsound(src, "terminal_type", 50, FALSE) - var/obj/machinery/power/apc/APC = locate(href_list["access_apc"]) in GLOB.apcs_list - if(!APC || APC.aidisabled || APC.panel_open || QDELETED(APC)) - to_chat(usr, "[icon2html(src, usr)] APC does not return interface request. Remote access may be disabled.") - return - if(active_apc) - to_chat(usr, "[icon2html(src, usr)] Disconnected from [active_apc].") - active_apc.say("Remote access canceled. Interface locked.") - playsound(active_apc, 'sound/blank.ogg', 25, FALSE) - playsound(active_apc, 'sound/blank.ogg', 50, FALSE) - active_apc.locked = TRUE - active_apc.update_icon() - active_apc.remote_control = null - active_apc = null - to_chat(usr, "[icon2html(src, usr)] Connected to APC in [get_area_name(APC.area, TRUE)]. Interface request sent.") - log_activity("remotely accessed APC in [get_area_name(APC.area, TRUE)]") - APC.remote_control = src - APC.ui_interact(usr) - playsound(src, 'sound/blank.ogg', 50, FALSE) - message_admins("[ADMIN_LOOKUPFLW(usr)] remotely accessed [APC] from [src] at [AREACOORD(src)].") - log_game("[key_name(usr)] remotely accessed [APC] from [src] at [AREACOORD(src)].") - if(APC.locked) - APC.say("Remote access detected. Interface unlocked.") - playsound(APC, 'sound/blank.ogg', 25, FALSE) - playsound(APC, 'sound/blank.ogg', 50, FALSE) - APC.locked = FALSE - APC.update_icon() - active_apc = APC - if(href_list["name_filter"]) - playsound(src, 'sound/blank.ogg', 50, FALSE) - var/new_filter = stripped_input(usr, "What name are you looking for?", name) - if(!src || !usr || !usr.canUseTopic(src, !issilicon(usr)) || stat || QDELETED(src)) - return - log_activity("changed name filter to \"[new_filter]\"") - playsound(src, 'sound/blank.ogg', 50, FALSE) - result_filters["Name"] = new_filter - if(href_list["above_filter"]) - playsound(src, 'sound/blank.ogg', 50, FALSE) - var/new_filter = input(usr, "Enter a percentage from 1-100 to sort by (greater than).", name) as null|num - if(!src || !usr || !usr.canUseTopic(src, !issilicon(usr)) || stat || QDELETED(src)) - return - log_activity("changed greater than charge filter to \"[new_filter]\"") - if(new_filter) - new_filter = CLAMP(new_filter, 0, 100) - playsound(src, 'sound/blank.ogg', 50, FALSE) - result_filters["Charge Above"] = new_filter - if(href_list["below_filter"]) - playsound(src, 'sound/blank.ogg', 50, FALSE) - var/new_filter = input(usr, "Enter a percentage from 1-100 to sort by (lesser than).", name) as null|num - if(!src || !usr || !usr.canUseTopic(src, !issilicon(usr)) || stat || QDELETED(src)) - return - log_activity("changed lesser than charge filter to \"[new_filter]\"") - if(new_filter) - new_filter = CLAMP(new_filter, 0, 100) - playsound(src, 'sound/blank.ogg', 50, FALSE) - result_filters["Charge Below"] = new_filter - if(href_list["access_filter"]) - if(isnull(result_filters["Responsive"])) - result_filters["Responsive"] = 1 - log_activity("sorted by non-responsive APCs only") - else - result_filters["Responsive"] = !result_filters["Responsive"] - log_activity("sorted by all APCs") - playsound(src, 'sound/blank.ogg', 50, FALSE) - if(href_list["check_logs"]) - checking_logs = TRUE - log_activity("checked logs") - if(href_list["check_apcs"]) - checking_logs = FALSE - log_activity("checked APCs") - if(href_list["clear_logs"]) - logs = list() - ui_interact(usr) //Refresh the UI after a filter changes - -/obj/machinery/computer/apc_control/emag_act(mob/user) - if(!authenticated) - to_chat(user, "I bypass [src]'s access requirements using your emag.") - authenticated = TRUE - log_activity("logged in") - else if(!(obj_flags & EMAGGED)) - user.visible_message("I emag [src], disabling precise logging and allowing you to clear logs.") - log_game("[key_name(user)] emagged [src] at [AREACOORD(src)], disabling operator tracking.") - obj_flags |= EMAGGED - playsound(src, "sparks", 50, TRUE) - -/obj/machinery/computer/apc_control/proc/log_activity(log_text) - var/op_string = operator && !(obj_flags & EMAGGED) ? operator : "\[NULL OPERATOR\]" - LAZYADD(logs, "([station_time_timestamp()]) [op_string] [log_text]") - -/mob/proc/using_power_flow_console() - for(var/obj/machinery/computer/apc_control/A in range(1, src)) - if(A.operator && A.operator == src && !A.stat) - return TRUE - return diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm deleted file mode 100644 index ce0cb96074..0000000000 --- a/code/game/machinery/computer/arcade.dm +++ /dev/null @@ -1,1280 +0,0 @@ -GLOBAL_LIST_INIT(arcade_prize_pool, list( - /obj/item/storage/box/snappops = 2, - /obj/item/toy/talking/AI = 2, - /obj/item/toy/talking/codex_gigas = 2, - /obj/item/clothing/under/syndicate/tacticool = 2, - /obj/item/toy/sword = 2, - /obj/item/toy/gun = 2, - /obj/item/gun/ballistic/shotgun/toy/crossbow = 2, - /obj/item/storage/box/fakesyndiesuit = 2, - /obj/item/storage/crayons = 2, - /obj/item/toy/spinningtoy = 2, - /obj/item/toy/prize/ripley = 1, - /obj/item/toy/prize/fireripley = 1, - /obj/item/toy/prize/deathripley = 1, - /obj/item/toy/prize/gygax = 1, - /obj/item/toy/prize/durand = 1, - /obj/item/toy/prize/honk = 1, - /obj/item/toy/prize/marauder = 1, - /obj/item/toy/prize/seraph = 1, - /obj/item/toy/prize/mauler = 1, - /obj/item/toy/prize/odysseus = 1, - /obj/item/toy/prize/phazon = 1, - /obj/item/toy/prize/reticence = 1, - /obj/item/toy/cards/deck = 2, - /obj/item/toy/nuke = 2, - /obj/item/toy/minimeteor = 2, - /obj/item/toy/redbutton = 2, - /obj/item/toy/talking/owl = 2, - /obj/item/toy/talking/griffin = 2, - /obj/item/coin/antagtoken = 2, - /obj/item/stack/tile/fakespace/loaded = 2, - /obj/item/stack/tile/fakepit/loaded = 2, - /obj/item/toy/toy_xeno = 2, - /obj/item/storage/box/actionfigure = 1, - /obj/item/restraints/handcuffs/fake = 2, - /obj/item/grenade/chem_grenade/glitter/pink = 1, - /obj/item/grenade/chem_grenade/glitter/blue = 1, - /obj/item/grenade/chem_grenade/glitter/white = 1, - /obj/item/toy/eightball = 2, - /obj/item/toy/windupToolbox = 2, - /obj/item/toy/clockwork_watch = 2, - /obj/item/toy/toy_dagger = 2, - /obj/item/extendohand/acme = 1, - /obj/item/hot_potato/harmless/toy = 1, - /obj/item/card/emagfake = 1, - /obj/item/clothing/shoes/wheelys = 2, - /obj/item/clothing/shoes/kindleKicks = 2, - /obj/item/storage/belt/military/snack = 2)) - -/obj/machinery/computer/arcade - name = "random arcade" - desc = "" - icon_state = "arcade" - icon_keyboard = null - icon_screen = "invaders" - var/list/prize_override - light_color = LIGHT_COLOR_GREEN - -/obj/machinery/computer/arcade/proc/Reset() - return - -/obj/machinery/computer/arcade/Initialize() - . = ..() - // If it's a generic arcade machine, pick a random arcade - // circuit board for it and make the new machine - if(!circuit) - var/list/gameodds = list(/obj/item/circuitboard/computer/arcade/battle = 49, - /obj/item/circuitboard/computer/arcade/orion_trail = 49, - /obj/item/circuitboard/computer/arcade/amputation = 2) - var/thegame = pickweight(gameodds) - var/obj/item/circuitboard/CB = new thegame() - new CB.build_path(loc, CB) - return INITIALIZE_HINT_QDEL - Reset() - -/obj/machinery/computer/arcade/proc/prizevend(mob/user) - SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "arcade", /datum/mood_event/arcade) - if(prob(0.0001)) //1 in a million - new /obj/item/gun/energy/pulse/prize(src) - visible_message("[src] dispenses.. woah, a gun! Way past cool.", "I hear a chime and a shot.") - user.client.give_award(/datum/award/achievement/misc/pulse, user) - return - - if(!contents.len) - var/prizeselect - if(prize_override) - prizeselect = pickweight(prize_override) - else - prizeselect = pickweight(GLOB.arcade_prize_pool) - new prizeselect(src) - - var/atom/movable/the_prize = pick(contents) - visible_message("[src] dispenses [the_prize]!", "I hear a chime and a clunk.") - - the_prize.forceMove(get_turf(src)) - -/obj/machinery/computer/arcade/emp_act(severity) - . = ..() - var/override = FALSE - if(prize_override) - override = TRUE - - if(stat & (NOPOWER|BROKEN) || . & EMP_PROTECT_SELF) - return - - var/empprize = null - var/num_of_prizes = 0 - switch(severity) - if(1) - num_of_prizes = rand(1,4) - if(2) - num_of_prizes = rand(0,2) - for(var/i = num_of_prizes; i > 0; i--) - if(override) - empprize = pickweight(prize_override) - else - empprize = pickweight(GLOB.arcade_prize_pool) - new empprize(loc) - explosion(loc, -1, 0, 1+num_of_prizes, flame_range = 1+num_of_prizes) - - -// ** BATTLE ** // - - -/obj/machinery/computer/arcade/battle - name = "arcade machine" - desc = "" - icon_state = "arcade" - circuit = /obj/item/circuitboard/computer/arcade/battle - var/enemy_name = "Space Villain" - var/temp = "Winners don't use space drugs" //Temporary message, for attack messages, etc - var/player_hp = 30 //Player health/attack points - var/player_mp = 10 - var/enemy_hp = 45 //Enemy health/attack points - var/enemy_mp = 20 - var/gameover = FALSE - var/blocked = FALSE //Player cannot attack/heal while set - var/turtle = 0 - var/list/weapons = list() - -/obj/machinery/computer/arcade/battle/Reset() - var/name_action - var/name_part1 - var/name_part2 - - if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) - name_action = pick_list(ARCADE_FILE, "rpg_action_halloween") - name_part1 = pick_list(ARCADE_FILE, "rpg_adjective_halloween") - name_part2 = pick_list(ARCADE_FILE, "rpg_enemy_halloween") - weapons = strings(ARCADE_FILE, "rpg_weapon_halloween") - else if(SSevents.holidays && SSevents.holidays[CHRISTMAS]) - name_action = pick_list(ARCADE_FILE, "rpg_action_xmas") - name_part1 = pick_list(ARCADE_FILE, "rpg_adjective_xmas") - name_part2 = pick_list(ARCADE_FILE, "rpg_enemy_xmas") - weapons = strings(ARCADE_FILE, "rpg_weapon_xmas") - else - name_action = pick_list(ARCADE_FILE, "rpg_action") - name_part1 = pick_list(ARCADE_FILE, "rpg_adjective") - name_part2 = pick_list(ARCADE_FILE, "rpg_enemy") - weapons = strings(ARCADE_FILE, "rpg_weapon") - - enemy_name = ("The " + name_part1 + " " + name_part2) - name = (name_action + " " + enemy_name) - -/obj/machinery/computer/arcade/battle/ui_interact(mob/user) - . = ..() - var/dat = "Close" - dat += "

[enemy_name]

" - - dat += "

[temp]

" - dat += "
Health: [player_hp] | Magic: [player_mp] | Enemy Health: [enemy_hp]
" - - if (gameover) - dat += "
New Game" - else - dat += "
Attack | " - dat += "Heal | " - dat += "Recharge Power" - - dat += "
" - var/datum/browser/popup = new(user, "arcade", "Space Villain 2000") - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - popup.open() - -/obj/machinery/computer/arcade/battle/Topic(href, href_list) - if(..()) - return - - if (!blocked && !gameover) - if (href_list["attack"]) - blocked = TRUE - var/attackamt = rand(2,6) - var/weapon = pick(weapons) - temp = "You attack with a [weapon] for [attackamt] damage!" - playsound(loc, 'sound/blank.ogg', 50, TRUE, extrarange = -3, falloff = 10) - updateUsrDialog() - if(turtle > 0) - turtle-- - - sleep(10) - enemy_hp -= attackamt - arcade_action(usr) - - else if (href_list["heal"]) - blocked = TRUE - var/pointamt = rand(1,3) - var/healamt = rand(6,8) - temp = "You use [pointamt] magic to heal for [healamt] damage!" - playsound(loc, 'sound/blank.ogg', 50, TRUE, extrarange = -3, falloff = 10) - updateUsrDialog() - turtle++ - - sleep(10) - player_mp -= pointamt - player_hp += healamt - blocked = TRUE - updateUsrDialog() - arcade_action(usr) - - else if (href_list["charge"]) - blocked = TRUE - var/chargeamt = rand(4,7) - temp = "You regain [chargeamt] points." - playsound(loc, 'sound/blank.ogg', 50, TRUE, extrarange = -3, falloff = 10) - player_mp += chargeamt - if(turtle > 0) - turtle-- - - updateUsrDialog() - sleep(10) - arcade_action(usr) - - if (href_list["close"]) - usr.unset_machine() - usr << browse(null, "window=arcade") - - else if (href_list["newgame"]) //Reset everything - temp = "New Round" - player_hp = 30 - player_mp = 10 - enemy_hp = 45 - enemy_mp = 20 - gameover = FALSE - turtle = 0 - - if(obj_flags & EMAGGED) - Reset() - obj_flags &= ~EMAGGED - - add_fingerprint(usr) - updateUsrDialog() - return - -/obj/machinery/computer/arcade/battle/proc/arcade_action(mob/user) - if ((enemy_mp <= 0) || (enemy_hp <= 0)) - if(!gameover) - gameover = TRUE - temp = "[enemy_name] has fallen! Rejoice!" - playsound(loc, 'sound/blank.ogg', 50, TRUE, extrarange = -3, falloff = 10) - - if(obj_flags & EMAGGED) - new /obj/effect/spawner/newbomb/timer/syndicate(loc) - new /obj/item/clothing/head/collectable/petehat(loc) - message_admins("[ADMIN_LOOKUPFLW(usr)] has outbombed Cuban Pete and been awarded a bomb.") - log_game("[key_name(usr)] has outbombed Cuban Pete and been awarded a bomb.") - Reset() - obj_flags &= ~EMAGGED - else - prizevend(user) - SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("win", (obj_flags & EMAGGED ? "emagged":"normal"))) - - - else if ((obj_flags & EMAGGED) && (turtle >= 4)) - var/boomamt = rand(5,10) - temp = "[enemy_name] throws a bomb, exploding you for [boomamt] damage!" - playsound(loc, 'sound/blank.ogg', 50, TRUE, extrarange = -3, falloff = 10) - player_hp -= boomamt - - else if ((enemy_mp <= 5) && (prob(70))) - var/stealamt = rand(2,3) - temp = "[enemy_name] steals [stealamt] of my power!" - playsound(loc, 'sound/blank.ogg', 50, TRUE, extrarange = -3, falloff = 10) - player_mp -= stealamt - updateUsrDialog() - - if (player_mp <= 0) - gameover = TRUE - sleep(10) - temp = "You have been drained! GAME OVER" - playsound(loc, 'sound/blank.ogg', 50, TRUE, extrarange = -3, falloff = 10) - if(obj_flags & EMAGGED) - usr.gib() - SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("loss", "mana", (obj_flags & EMAGGED ? "emagged":"normal"))) - - else if ((enemy_hp <= 10) && (enemy_mp > 4)) - temp = "[enemy_name] heals for 4 health!" - playsound(loc, 'sound/blank.ogg', 50, TRUE, extrarange = -3, falloff = 10) - enemy_hp += 4 - enemy_mp -= 4 - - else - var/attackamt = rand(3,6) - temp = "[enemy_name] attacks for [attackamt] damage!" - playsound(loc, 'sound/blank.ogg', 50, TRUE, extrarange = -3, falloff = 10) - player_hp -= attackamt - - if ((player_mp <= 0) || (player_hp <= 0)) - gameover = TRUE - temp = "You have been crushed! GAME OVER" - playsound(loc, 'sound/blank.ogg', 50, TRUE, extrarange = -3, falloff = 10) - if(obj_flags & EMAGGED) - usr.gib() - SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("loss", "hp", (obj_flags & EMAGGED ? "emagged":"normal"))) - - blocked = FALSE - return - - -/obj/machinery/computer/arcade/battle/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - to_chat(user, "A mesmerizing Rhumba beat starts playing from the arcade machine's speakers!") - temp = "If you die in the game, you die for real!" - player_hp = 30 - player_mp = 10 - enemy_hp = 45 - enemy_mp = 20 - gameover = FALSE - blocked = FALSE - - obj_flags |= EMAGGED - - enemy_name = "Cuban Pete" - name = "Outbomb Cuban Pete" - - - updateUsrDialog() - - - -// *** THE ORION TRAIL ** // - -/obj/item/gamer_pamphlet - name = "pamphlet - \'Violent Video Games and You\'" - desc = "" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "pamphlet" - item_state = "paper" - w_class = WEIGHT_CLASS_TINY - - -#define ORION_TRAIL_WINTURN 9 - -//Orion Trail Events -#define ORION_TRAIL_RAIDERS "Raiders" -#define ORION_TRAIL_FLUX "Interstellar Flux" -#define ORION_TRAIL_ILLNESS "Illness" -#define ORION_TRAIL_BREAKDOWN "Breakdown" -#define ORION_TRAIL_LING "Changelings?" -#define ORION_TRAIL_LING_ATTACK "Changeling Ambush" -#define ORION_TRAIL_MALFUNCTION "Malfunction" -#define ORION_TRAIL_COLLISION "Collision" -#define ORION_TRAIL_SPACEPORT "Spaceport" -#define ORION_TRAIL_BLACKHOLE "BlackHole" -#define ORION_TRAIL_OLDSHIP "Old Ship" -#define ORION_TRAIL_SEARCH "Old Ship Search" - -#define ORION_STATUS_START 1 -#define ORION_STATUS_NORMAL 2 -#define ORION_STATUS_GAMEOVER 3 -#define ORION_STATUS_MARKET 4 - -/obj/machinery/computer/arcade/orion_trail - name = "The Orion Trail" - desc = "" - icon_state = "arcade" - circuit = /obj/item/circuitboard/computer/arcade/orion_trail - var/busy = FALSE //prevent clickspam that allowed people to ~speedrun~ the game. - var/engine = 0 - var/hull = 0 - var/electronics = 0 - var/food = 80 - var/fuel = 60 - var/turns = 4 - var/alive = 4 - var/eventdat = null - var/event = null - var/list/settlers = list("Harry","Larry","Bob") - var/list/events = list( - ORION_TRAIL_RAIDERS = 3, - ORION_TRAIL_FLUX = 1, - ORION_TRAIL_ILLNESS = 3, - ORION_TRAIL_BREAKDOWN = 2, - ORION_TRAIL_LING = 3, - ORION_TRAIL_MALFUNCTION = 2, - ORION_TRAIL_COLLISION = 1, - ORION_TRAIL_SPACEPORT = 2, - ORION_TRAIL_OLDSHIP = 2 - ) - var/list/stops = list() - var/list/stopblurbs = list() - var/lings_aboard = 0 - var/spaceport_raided = 0 - var/spaceport_freebie = 0 - var/last_spaceport_action = "" - var/gameStatus = ORION_STATUS_START - var/canContinueEvent = 0 - - var/obj/item/radio/Radio - var/list/gamers = list() - var/killed_crew = 0 - - -/obj/machinery/computer/arcade/orion_trail/Initialize() - . = ..() - Radio = new /obj/item/radio(src) - Radio.listening = 0 - -/obj/machinery/computer/arcade/orion_trail/Destroy() - QDEL_NULL(Radio) - return ..() - -/obj/machinery/computer/arcade/orion_trail/kobayashi - name = "Kobayashi Maru control computer" - desc = "" - icon = 'icons/obj/machines/particle_accelerator.dmi' - icon_state = "control_boxp" - events = list("Raiders" = 3, "Interstellar Flux" = 1, "Illness" = 3, "Breakdown" = 2, "Malfunction" = 2, "Collision" = 1, "Spaceport" = 2) - prize_override = list(/obj/item/paper/fluff/holodeck/trek_diploma = 1) - settlers = list("Kirk","Worf","Gene") - -/obj/machinery/computer/arcade/orion_trail/Reset() - // Sets up the main trail - stops = list("Pluto","Asteroid Belt","Proxima Centauri","Dead Space","Rigel Prime","Tau Ceti Beta","Black Hole","Space Outpost Beta-9","Orion Prime") - stopblurbs = list( - "Pluto, long since occupied with long-range sensors and scanners, stands ready to, and indeed continues to probe the far reaches of the galaxy.", - "At the edge of the Sol system lies a treacherous asteroid belt. Many have been crushed by stray asteroids and misguided judgement.", - "The nearest star system to Sol, in ages past it stood as a reminder of the boundaries of sub-light travel, now a low-population sanctuary for adventurers and traders.", - "This region of space is particularly devoid of matter. Such low-density pockets are known to exist, but the vastness of it is astounding.", - "Rigel Prime, the center of the Rigel system, burns hot, basking its planetary bodies in warmth and radiation.", - "Tau Ceti Beta has recently become a waypoint for colonists headed towards Orion. There are many ships and makeshift stations in the vicinity.", - "Sensors indicate that a black hole's gravitational field is affecting the region of space we were headed through. We could stay of course, but risk of being overcome by its gravity, or we could change course to go around, which will take longer.", - "You have come into range of the first man-made structure in this region of space. It has been constructed not by travellers from Sol, but by colonists from Orion. It stands as a monument to the colonists' success.", - "You have made it to Orion! Congratulations! Your crew is one of the few to start a new foothold for mankind!" - ) - -/obj/machinery/computer/arcade/orion_trail/proc/newgame() - // Set names of settlers in crew - settlers = list() - for(var/i = 1; i <= 3; i++) - add_crewmember() - add_crewmember("[usr]") - // Re-set items to defaults - engine = 1 - hull = 1 - electronics = 1 - food = 80 - fuel = 60 - alive = 4 - turns = 1 - event = null - gameStatus = ORION_STATUS_NORMAL - lings_aboard = 0 - killed_crew = 0 - - //spaceport junk - spaceport_raided = 0 - spaceport_freebie = 0 - last_spaceport_action = "" - -/obj/machinery/computer/arcade/orion_trail/proc/report_player(mob/gamer) - if(gamers[gamer] == -2) - return // enough harassing them - - if(gamers[gamer] == -1) - say("WARNING: Continued antisocial behavior detected: Dispensing self-help literature.") - new /obj/item/gamer_pamphlet(get_turf(src)) - gamers[gamer]-- - return - - if(!(gamer in gamers)) - gamers[gamer] = 0 - - gamers[gamer]++ // How many times the player has 'prestiged' (massacred their crew) - - if(gamers[gamer] > 2 && prob(20 * gamers[gamer])) - - Radio.set_frequency(FREQ_SECURITY) - Radio.talk_into(src, "SECURITY ALERT: Crewmember [gamer] recorded displaying antisocial tendencies in [get_area(src)]. Please watch for violent behavior.", FREQ_SECURITY) - - Radio.set_frequency(FREQ_MEDICAL) - Radio.talk_into(src, "PSYCH ALERT: Crewmember [gamer] recorded displaying antisocial tendencies in [get_area(src)]. Please schedule psych evaluation.", FREQ_MEDICAL) - - gamers[gamer] = -1 - - if(!isnull(GLOB.data_core.general)) - for(var/datum/data/record/R in GLOB.data_core.general) - if(R.fields["name"] == gamer.name) - R.fields["m_stat"] = "*Unstable*" - return - -/obj/machinery/computer/arcade/orion_trail/ui_interact(mob/user) - . = ..() - if(fuel <= 0 || food <=0 || settlers.len == 0) - gameStatus = ORION_STATUS_GAMEOVER - event = null - var/dat = "" - if(gameStatus == ORION_STATUS_GAMEOVER) - dat = "

Game Over

" - dat += "Like many before you, my crew never made it to Orion, lost to space...
Forever." - if(!settlers.len) - dat += "
My entire crew died, and my ship joins the fleet of ghost-ships littering the galaxy." - else - if(food <= 0) - dat += "
I ran out of food and starved." - if(obj_flags & EMAGGED) - user.set_nutrition(0) //yeah you pretty hongry - to_chat(user, "My body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor.") - if(fuel <= 0) - dat += "
I ran out of fuel, and drift, slowly, into a star." - if(obj_flags & EMAGGED) - var/mob/living/M = user - M.adjust_fire_stacks(5) - M.IgniteMob() //flew into a star, so you're on fire - to_chat(user, "I feel an immense wave of heat emanate from the arcade machine. Your skin bursts into flames.") - - if(obj_flags & EMAGGED) - to_chat(user, "You're never going to make it to Orion...") - user.death() - obj_flags &= ~EMAGGED //removes the emagged status after you lose - gameStatus = ORION_STATUS_START - name = "The Orion Trail" - desc = "" - - dat += "

May They Rest In Peace

" - else if(event) - dat = eventdat - else if(gameStatus == ORION_STATUS_NORMAL) - var/title = stops[turns] - var/subtext = stopblurbs[turns] - dat = "

[title]

" - dat += "[subtext]" - dat += "

Crew:

" - dat += english_list(settlers) - dat += "
Food: [food] | Fuel: [fuel]" - dat += "
Engine Parts: [engine] | Hull Panels: [hull] | Electronics: [electronics]" - if(turns == 7) - dat += "

Go Around Continue

" - else - dat += "

Continue

" - dat += "

Kill a Crewmember

" - dat += "

Close

" - else - dat = "

The Orion Trail

" - dat += "

Experience the journey of my ancestors!



" - dat += "
New Game
" - dat += "

Close

" - var/datum/browser/popup = new(user, "arcade", "The Orion Trail",400,700) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - popup.open() - return - -/obj/machinery/computer/arcade/orion_trail/Topic(href, href_list) - if(..()) - return - if(href_list["close"]) - usr.unset_machine() - usr << browse(null, "window=arcade") - - if(busy) - return - busy = TRUE - - if (href_list["continue"]) //Continue my travels - if(gameStatus == ORION_STATUS_NORMAL && !event && turns != 7) - if(turns >= ORION_TRAIL_WINTURN) - win(usr) - else - food -= (alive+lings_aboard)*2 - fuel -= 5 - if(turns == 2 && prob(30)) - event = ORION_TRAIL_COLLISION - event() - else if(prob(75)) - event = pickweight(events) - if(lings_aboard) - if(event == ORION_TRAIL_LING || prob(55)) - event = ORION_TRAIL_LING_ATTACK - event() - turns += 1 - if(obj_flags & EMAGGED) - var/mob/living/carbon/M = usr //for some vars - switch(event) - if(ORION_TRAIL_RAIDERS) - if(prob(50)) - to_chat(usr, "I hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?") - M.hallucination += 30 - else - to_chat(usr, "Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there...") - M.take_bodypart_damage(30) - playsound(loc, 'sound/blank.ogg', 100, TRUE) - if(ORION_TRAIL_ILLNESS) - var/severity = rand(1,3) //pray to RNGesus. PRAY, PIGS - if(severity == 1) - to_chat(M, "I suddenly feel slightly nauseated." ) - if(severity == 2) - to_chat(usr, "I suddenly feel extremely nauseated and hunch over until it passes.") - M.Stun(60) - if(severity >= 3) //you didn't pray hard enough - to_chat(M, "An overpowering wave of nausea consumes over you. You hunch over, my stomach's contents preparing for a spectacular exit.") - M.Stun(100) - sleep(30) - M.vomit(10, distance = 5) - if(ORION_TRAIL_FLUX) - if(prob(75)) - M.Paralyze(60) - say("A sudden gust of powerful wind slams [M] into the floor!") - M.take_bodypart_damage(25) - playsound(loc, 'sound/blank.ogg', 100, TRUE) - else - to_chat(M, "A violent gale blows past you, and you barely manage to stay standing!") - if(ORION_TRAIL_COLLISION) //by far the most damaging event - if(prob(90)) - playsound(loc, 'sound/blank.ogg', 100, TRUE) - var/turf/open/floor/F - for(F in orange(1, src)) - F.ScrapeAway() - say("Something slams into the floor around [src], exposing it to space!") - if(hull) - sleep(10) - say("A new floor suddenly appears around [src]. What the hell?") - playsound(loc, 'sound/blank.ogg', 100, TRUE) - var/turf/open/space/T - for(T in orange(1, src)) - T.PlaceOnTop(/turf/open/floor/plating) - else - say("Something slams into the floor around [src] - luckily, it didn't get through!") - playsound(loc, 'sound/blank.ogg', 50, TRUE) - if(ORION_TRAIL_MALFUNCTION) - playsound(loc, 'sound/blank.ogg', 50, TRUE) - visible_message("[src] malfunctions, randomizing in-game stats!") - var/oldfood = food - var/oldfuel = fuel - food = rand(10,80) / rand(1,2) - fuel = rand(10,60) / rand(1,2) - if(electronics) - sleep(10) - if(oldfuel > fuel && oldfood > food) - audible_message("[src] lets out a somehow reassuring chime.") - else if(oldfuel < fuel || oldfood < food) - audible_message("[src] lets out a somehow ominous chime.") - food = oldfood - fuel = oldfuel - playsound(loc, 'sound/blank.ogg', 50, TRUE) - - else if(href_list["newgame"]) //Reset everything - if(gameStatus == ORION_STATUS_START) - newgame() - else if(href_list["menu"]) //back to the main menu - if(gameStatus == ORION_STATUS_GAMEOVER) - gameStatus = ORION_STATUS_START - event = null - food = 80 - fuel = 60 - settlers = list("Harry","Larry","Bob") - else if(href_list["search"]) //search old ship - if(event == ORION_TRAIL_OLDSHIP) - event = ORION_TRAIL_SEARCH - event() - else if(href_list["slow"]) //slow down - if(event == ORION_TRAIL_FLUX) - food -= (alive+lings_aboard)*2 - fuel -= 5 - event = null - else if(href_list["pastblack"]) //slow down - if(turns == 7) - food -= ((alive+lings_aboard)*2)*3 - fuel -= 15 - turns += 1 - event = null - else if(href_list["useengine"]) //use parts - if(event == ORION_TRAIL_BREAKDOWN) - engine = max(0, --engine) - event = null - else if(href_list["useelec"]) //use parts - if(event == ORION_TRAIL_MALFUNCTION) - electronics = max(0, --electronics) - event = null - else if(href_list["usehull"]) //use parts - if(event == ORION_TRAIL_COLLISION) - hull = max(0, --hull) - event = null - else if(href_list["wait"]) //wait 3 days - if(event == ORION_TRAIL_BREAKDOWN || event == ORION_TRAIL_MALFUNCTION || event == ORION_TRAIL_COLLISION) - food -= ((alive+lings_aboard)*2)*3 - event = null - else if(href_list["keepspeed"]) //keep speed - if(event == ORION_TRAIL_FLUX) - if(prob(75)) - event = "Breakdown" - event() - else - event = null - else if(href_list["blackhole"]) //keep speed past a black hole - if(turns == 7) - if(prob(75)) - event = ORION_TRAIL_BLACKHOLE - event() - if(obj_flags & EMAGGED) - playsound(loc, 'sound/blank.ogg', 100, TRUE) - say("A miniature black hole suddenly appears in front of [src], devouring [usr] alive!") - if(isliving(usr)) - var/mob/living/L = usr - L.Stun(200, ignore_canstun = TRUE) //you can't run :^) - var/S = new /obj/singularity/academy(usr.loc) - addtimer(CALLBACK(src, /atom/movable/, "[S] winks out, just as suddenly as it appeared."), 50) - QDEL_IN(S, 50) - else - event = null - turns += 1 - else if(href_list["holedeath"]) - if(event == ORION_TRAIL_BLACKHOLE) - gameStatus = ORION_STATUS_GAMEOVER - event = null - else if(href_list["eventclose"]) //end an event - if(canContinueEvent) - event = null - - else if(href_list["killcrew"]) //shoot a crewmember - if(gameStatus == ORION_STATUS_NORMAL || event == ORION_TRAIL_LING) - var/sheriff = remove_crewmember() //I shot the sheriff - playsound(loc,'sound/blank.ogg', 100, TRUE) - killed_crew++ - - if(settlers.len == 0 || alive == 0) - say("The last crewmember [sheriff], shot themselves, GAME OVER!") - if(obj_flags & EMAGGED) - usr.death(0) - obj_flags &= EMAGGED - gameStatus = ORION_STATUS_GAMEOVER - event = null - - if(killed_crew >= 4) - report_player(usr) - else if(obj_flags & EMAGGED) - if(usr.name == sheriff) - say("The crew of the ship chose to kill [usr.name]!") - usr.death(0) - - if(event == ORION_TRAIL_LING) //only ends the ORION_TRAIL_LING event, since you can do this action in multiple places - event = null - killed_crew-- // the kill was valid - - //Spaceport specific interactions - //they get a header because most of them don't reset event (because it's a shop, you leave when you want to) - //they also call event() again, to regen the eventdata, which is kind of odd but necessary - else if(href_list["buycrew"]) //buy a crewmember - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided && food >= 10 && fuel >= 10) - var/bought = add_crewmember() - last_spaceport_action = "You hired [bought] as a new crewmember." - fuel -= 10 - food -= 10 - event() - killed_crew-- // I mean not really but you know - - else if(href_list["sellcrew"]) //sell a crewmember - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided && settlers.len > 1) - var/sold = remove_crewmember() - last_spaceport_action = "You sold my crewmember, [sold]!" - fuel += 7 - food += 7 - event() - - else if(href_list["leave_spaceport"]) - if(gameStatus == ORION_STATUS_MARKET) - event = null - gameStatus = ORION_STATUS_NORMAL - spaceport_raided = 0 - spaceport_freebie = 0 - last_spaceport_action = "" - - else if(href_list["raid_spaceport"]) - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided) - var/success = min(15 * alive,100) //default crew (4) have a 60% chance - spaceport_raided = 1 - - var/FU = 0 - var/FO = 0 - if(prob(success)) - FU = rand(5,15) - FO = rand(5,15) - last_spaceport_action = "You successfully raided the spaceport! You gained [FU] Fuel and [FO] Food! (+[FU]FU,+[FO]FO)" - else - FU = rand(-5,-15) - FO = rand(-5,-15) - last_spaceport_action = "You failed to raid the spaceport! You lost [FU*-1] Fuel and [FO*-1] Food in my scramble to escape! ([FU]FU,[FO]FO)" - - //your chance of lose a crewmember is 1/2 my chance of success - //this makes higher % failures hurt more, don't get cocky space cowboy! - if(prob(success*5)) - var/lost_crew = remove_crewmember() - last_spaceport_action = "You failed to raid the spaceport! You lost [FU*-1] Fuel and [FO*-1] Food, AND [lost_crew] in my scramble to escape! ([FU]FI,[FO]FO,-Crew)" - if(obj_flags & EMAGGED) - say("WEEWOO! WEEWOO! Spaceport security en route!") - playsound(src, 'sound/blank.ogg', 100, FALSE) - for(var/i, i<=3, i++) - var/mob/living/simple_animal/hostile/syndicate/ranged/smg/orion/O = new/mob/living/simple_animal/hostile/syndicate/ranged/smg/orion(get_turf(src)) - O.target = usr - - - fuel += FU - food += FO - event() - - else if(href_list["buyparts"]) - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided && fuel > 5) - switch(text2num(href_list["buyparts"])) - if(1) //Engine Parts - engine++ - last_spaceport_action = "Bought Engine Parts" - if(2) //Hull Plates - hull++ - last_spaceport_action = "Bought Hull Plates" - if(3) //Spare Electronics - electronics++ - last_spaceport_action = "Bought Spare Electronics" - fuel -= 5 //they all cost 5 - event() - - else if(href_list["trade"]) - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided) - switch(text2num(href_list["trade"])) - if(1) //Fuel - if(fuel > 5) - fuel -= 5 - food += 5 - last_spaceport_action = "Traded Fuel for Food" - event() - if(2) //Food - if(food > 5) - fuel += 5 - food -= 5 - last_spaceport_action = "Traded Food for Fuel" - event() - - add_fingerprint(usr) - updateUsrDialog() - busy = FALSE - return - - -/obj/machinery/computer/arcade/orion_trail/proc/event() - eventdat = "

[event]

" - canContinueEvent = 0 - switch(event) - if(ORION_TRAIL_RAIDERS) - eventdat += "Raiders have come aboard my ship!" - if(prob(50)) - var/sfood = rand(1,10) - var/sfuel = rand(1,10) - food -= sfood - fuel -= sfuel - eventdat += "
They have stolen [sfood] Food and [sfuel] Fuel." - else if(prob(10)) - var/deadname = remove_crewmember() - eventdat += "
[deadname] tried to fight back, but was killed." - else - eventdat += "
Fortunately, you fended them off without any trouble." - eventdat += "

Continue

" - eventdat += "

Close

" - canContinueEvent = 1 - - if(ORION_TRAIL_FLUX) - eventdat += "This region of space is highly turbulent.
If we go slowly we may avoid more damage, but if we keep our speed we won't waste supplies." - eventdat += "
What will you do?" - eventdat += "

Slow Down Continue

" - eventdat += "

Close

" - - if(ORION_TRAIL_OLDSHIP) - eventdat += "
My crew spots an old ship floating through space. It might have some supplies, but then again it looks rather unsafe." - eventdat += "

Search itLeave it

Close

" - canContinueEvent = 1 - - if(ORION_TRAIL_SEARCH) - switch(rand(100)) - if(0 to 15) - var/rescued = add_crewmember() - var/oldfood = rand(1,7) - var/oldfuel = rand(4,10) - food += oldfood - fuel += oldfuel - eventdat += "
As you look through it you find some supplies and a living person!" - eventdat += "
[rescued] was rescued from the abandoned ship!" - eventdat += "
I found [oldfood] Food and [oldfuel] Fuel." - if(15 to 35) - var/lfuel = rand(4,7) - var/deadname = remove_crewmember() - fuel -= lfuel - eventdat += "
[deadname] was lost deep in the wreckage, and my own vessel lost [lfuel] Fuel maneuvering to the the abandoned ship." - if(35 to 65) - var/oldfood = rand(5,11) - food += oldfood - engine++ - eventdat += "
I found [oldfood] Food and some parts amongst the wreck." - else - eventdat += "
As you look through the wreck you cannot find much of use." - eventdat += "

Continue

" - eventdat += "

Close

" - canContinueEvent = 1 - - if(ORION_TRAIL_ILLNESS) - eventdat += "A deadly illness has been contracted!" - var/deadname = remove_crewmember() - eventdat += "
[deadname] was killed by the disease." - eventdat += "

Continue

" - eventdat += "

Close

" - canContinueEvent = 1 - - if(ORION_TRAIL_BREAKDOWN) - eventdat += "Oh no! The engine has broken down!" - eventdat += "
I can repair it with an engine part, or you can make repairs for 3 days." - if(engine >= 1) - eventdat += "

Use PartWait

" - else - eventdat += "

Wait

" - eventdat += "

Close

" - - if(ORION_TRAIL_MALFUNCTION) - eventdat += "The ship's systems are malfunctioning!" - eventdat += "
I can replace the broken electronics with spares, or you can spend 3 days troubleshooting the AI." - if(electronics >= 1) - eventdat += "

Use PartWait

" - else - eventdat += "

Wait

" - eventdat += "

Close

" - - if(ORION_TRAIL_COLLISION) - eventdat += "Something hit us! Looks like there's some hull damage." - if(prob(25)) - var/sfood = rand(5,15) - var/sfuel = rand(5,15) - food -= sfood - fuel -= sfuel - eventdat += "
[sfood] Food and [sfuel] Fuel was vented out into space." - if(prob(10)) - var/deadname = remove_crewmember() - eventdat += "
[deadname] was killed by rapid depressurization." - eventdat += "
I can repair the damage with hull plates, or you can spend the next 3 days welding scrap together." - if(hull >= 1) - eventdat += "

Use PartWait

" - else - eventdat += "

Wait

" - eventdat += "

Close

" - - if(ORION_TRAIL_BLACKHOLE) - eventdat += "You were swept away into the black hole." - eventdat += "

Oh...

" - eventdat += "

Close

" - settlers = list() - - if(ORION_TRAIL_LING) - eventdat += "Strange reports warn of changelings infiltrating crews on trips to Orion..." - if(settlers.len <= 2) - eventdat += "
My crew's chance of reaching Orion is so slim the changelings likely avoided my ship..." - eventdat += "

Continue

" - eventdat += "

Close

" - if(prob(10)) // "likely", I didn't say it was guaranteed! - lings_aboard = min(++lings_aboard,2) - else - if(lings_aboard) //less likely to stack lings - if(prob(20)) - lings_aboard = min(++lings_aboard,2) - else if(prob(70)) - lings_aboard = min(++lings_aboard,2) - - eventdat += "

Kill a Crewmember

" - eventdat += "

Risk it

" - eventdat += "

Close

" - canContinueEvent = 1 - - if(ORION_TRAIL_LING_ATTACK) - if(lings_aboard <= 0) //shouldn't trigger, but hey. - eventdat += "Haha, fooled you, there are no changelings on board!" - eventdat += "
(You should report this to a coder :S)" - else - var/ling1 = remove_crewmember() - var/ling2 = "" - if(lings_aboard >= 2) - ling2 = remove_crewmember() - - eventdat += "Changelings among my crew suddenly burst from hiding and attack!" - if(ling2) - eventdat += "
[ling1] and [ling2]'s arms twist and contort into grotesque blades!" - else - eventdat += "
[ling1]'s arm twists and contorts into a grotesque blade!" - - var/chance2attack = alive*20 - if(prob(chance2attack)) - var/chancetokill = 30*lings_aboard-(5*alive) //eg: 30*2-(10) = 50%, 2 lings, 2 crew is 50% chance - if(prob(chancetokill)) - var/deadguy = remove_crewmember() - var/murder_text = pick("The changeling[ling2 ? "s" : ""] bring[ling2 ? "" : "s"] down [deadguy] and disembowel[ling2 ? "" : "s"] them in a spray of gore!", \ - "[ling2 ? pick(ling1, ling2) : ling1] corners [deadguy] and impales them through the stomach!", \ - "[ling2 ? pick(ling1, ling2) : ling1] decapitates [deadguy] in a single cleaving arc!") - eventdat += "
[murder_text]" - else - eventdat += "

I valiantly fight off the changeling[ling2 ? "s":""]!" - if(ling2) - food += 30 - lings_aboard = max(0,lings_aboard-2) - else - food += 15 - lings_aboard = max(0,--lings_aboard) - eventdat += "
Well, it's perfectly good food...\ -
I cut the changeling[ling2 ? "s" : ""] into meat, gaining [ling2 ? "30" : "15"] Food!" - else - eventdat += "

[pick("Sensing unfavorable odds", "After a failed attack", "Suddenly breaking nerve")], \ - the changeling[ling2 ? "s":""] vanish[ling2 ? "" : "es"] into space through the airlocks! You're safe... for now." - if(ling2) - lings_aboard = max(0,lings_aboard-2) - else - lings_aboard = max(0,--lings_aboard) - - eventdat += "

Continue

" - eventdat += "

Close

" - canContinueEvent = 1 - - - if(ORION_TRAIL_SPACEPORT) - gameStatus = ORION_STATUS_MARKET - if(spaceport_raided) - eventdat += "The spaceport is on high alert! You've been barred from docking by the local authorities after my failed raid." - if(last_spaceport_action) - eventdat += "
Last Spaceport Action: [last_spaceport_action]" - eventdat += "

Depart Spaceport

" - eventdat += "

Close

" - else - eventdat += "Your jump into the sector yields a spaceport - a lucky find!" - eventdat += "
This spaceport is home to travellers who failed to reach Orion, but managed to find a different home..." - eventdat += "
Trading terms: FU = Fuel, FO = Food" - if(last_spaceport_action) - eventdat += "
Last action: [last_spaceport_action]" - eventdat += "

Crew:

" - eventdat += english_list(settlers) - eventdat += "
Food: [food] | Fuel: [fuel]" - eventdat += "
Engine Parts: [engine] | Hull Panels: [hull] | Electronics: [electronics]" - - - //If my crew is pathetic you can get freebies (provided you haven't already gotten one from this port) - if(!spaceport_freebie && (fuel < 20 || food < 20)) - spaceport_freebie++ - var/FU = 10 - var/FO = 10 - var/freecrew = 0 - if(prob(30)) - FU = 25 - FO = 25 - - if(prob(10)) - add_crewmember() - freecrew++ - - eventdat += "
The traders of the spaceport take pity on you, and generously give you some free supplies! (+[FU]FU, +[FO]FO)" - if(freecrew) - eventdat += "
I also gain a new crewmember!" - - fuel += FU - food += FO - - //CREW INTERACTIONS - eventdat += "

Crew Management:

" - - //Buy crew - if(food >= 10 && fuel >= 10) - eventdat += "

Hire a New Crewmember (-10FU, -10FO)

" - else - eventdat += "

I cannot afford a new crewmember.

" - - //Sell crew - if(settlers.len > 1) - eventdat += "

Sell Crew for Fuel and Food (+7FU, +7FO)

" - else - eventdat += "

I have no other crew to sell.

" - - //BUY/SELL STUFF - eventdat += "

Spare Parts:

" - - //Engine parts - if(fuel > 5) - eventdat += "

Buy Engine Parts (-5FU)

" - else - eventdat += "

I cannot afford engine parts." - - //Hull plates - if(fuel > 5) - eventdat += "

Buy Hull Plates (-5FU)

" - else - eventdat += "

I cannot afford hull plates." - - //Electronics - if(fuel > 5) - eventdat += "

Buy Spare Electronics (-5FU)

" - else - eventdat += "

I cannot afford spare electronics." - - //Trade - if(fuel > 5) - eventdat += "

Trade Fuel for Food (-5FU,+5FO)

" - else - eventdat += "

I don't have 5FU to trade. 5) - eventdat += "

Trade Food for Fuel (+5FU,-5FO)

" - else - eventdat += "

I don't have 5FO to trade.I override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode.") - name = "The Orion Trail: Realism Edition" - desc = "" - newgame() - obj_flags |= EMAGGED - -/mob/living/simple_animal/hostile/syndicate/ranged/smg/orion - name = "spaceport security" - desc = "" - faction = list("orion") - loot = list() - del_on_death = TRUE - -/obj/item/orion_ship - name = "model settler ship" - desc = "" - icon = 'icons/obj/toy.dmi' - icon_state = "ship" - w_class = WEIGHT_CLASS_SMALL - var/active = 0 //if the ship is on - -/obj/item/orion_ship/examine(mob/user) - . = ..() - if(!(in_range(user, src))) - return - if(!active) - . += "There's a little switch on the bottom. It's flipped down." - else - . += "There's a little switch on the bottom. It's flipped up." - -/obj/item/orion_ship/attack_self(mob/user) //Minibomb-level explosion. Should probably be more because of how hard it is to survive the machine! Also, just over a 5-second fuse - if(active) - return - - log_bomber(usr, "primed an explosive", src, "for detonation") - - to_chat(user, "I flip the switch on the underside of [src].") - active = 1 - visible_message("[src] softly beeps and whirs to life!") - playsound(loc, 'sound/blank.ogg', 25, TRUE) - say("This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.") - sleep(20) - visible_message("[src] begins to vibrate...") - say("Uh, Port? Having some issues with our reactor, could you check it out? Over.") - sleep(30) - say("Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-") - playsound(loc, 'sound/blank.ogg', 25, TRUE) - sleep(3.6) - visible_message("[src] explodes!") - explosion(loc, 2,4,8, flame_range = 16) - qdel(src) - -// ** AMPUTATION ** // - -/obj/machinery/computer/arcade/amputation - name = "Mediborg's Amputation Adventure" - desc = "" - icon_state = "arcade" - circuit = /obj/item/circuitboard/computer/arcade/amputation - -/obj/machinery/computer/arcade/amputation/attack_hand(mob/user) - if(!iscarbon(user)) - return - var/mob/living/carbon/c_user = user - if(!c_user.get_bodypart(BODY_ZONE_L_ARM) && !c_user.get_bodypart(BODY_ZONE_R_ARM)) - return - to_chat(c_user, "I move my hand towards the machine, and begin to hesitate as a bloodied guillotine emerges from inside of it...") - if(do_after(c_user, 50, target = src)) - to_chat(c_user, "The guillotine drops on my arm, and the machine sucks it in!") - playsound(loc, 'sound/blank.ogg', 25, TRUE, -1) - var/which_hand = BODY_ZONE_L_ARM - if(!(c_user.active_hand_index % 2)) - which_hand = BODY_ZONE_R_ARM - var/obj/item/bodypart/chopchop = c_user.get_bodypart(which_hand) - chopchop.dismember() - qdel(chopchop) - playsound(loc, 'sound/blank.ogg', 50, TRUE, extrarange = -3, falloff = 10) - for(var/i=1; i<=rand(3,5); i++) - prizevend(user) - else - to_chat(c_user, "I (wisely) decide against putting my hand in the machine.") - -#undef ORION_TRAIL_WINTURN -#undef ORION_TRAIL_RAIDERS -#undef ORION_TRAIL_FLUX -#undef ORION_TRAIL_ILLNESS -#undef ORION_TRAIL_BREAKDOWN -#undef ORION_TRAIL_LING -#undef ORION_TRAIL_LING_ATTACK -#undef ORION_TRAIL_MALFUNCTION -#undef ORION_TRAIL_COLLISION -#undef ORION_TRAIL_SPACEPORT -#undef ORION_TRAIL_BLACKHOLE -#undef ORION_TRAIL_OLDSHIP -#undef ORION_TRAIL_SEARCH - -#undef ORION_STATUS_START -#undef ORION_STATUS_NORMAL -#undef ORION_STATUS_GAMEOVER -#undef ORION_STATUS_MARKET diff --git a/code/game/machinery/computer/arena.dm b/code/game/machinery/computer/arena.dm deleted file mode 100644 index 6825b467f4..0000000000 --- a/code/game/machinery/computer/arena.dm +++ /dev/null @@ -1,417 +0,0 @@ -#define ARENA_RED_TEAM "red" -#define ARENA_GREEN_TEAM "green" -#define ARENA_DEFAULT_ID "arena_default" -#define ARENA_CORNER_A "cornerA" -#define ARENA_CORNER_B "cornerB" - -/// Arena related landmarks -/obj/effect/landmark/arena - name = "arena landmark" - var/landmark_tag - var/arena_id = ARENA_DEFAULT_ID - -/obj/effect/landmark/arena/start - name = "arena corner A" - landmark_tag = ARENA_CORNER_A - -/obj/effect/landmark/arena/end - name = "arena corner B" - landmark_tag = ARENA_CORNER_B - -/// Controller for admin event arenas -/obj/machinery/computer/arena - name = "arena controller" - /// Arena ID - var/arena_id = ARENA_DEFAULT_ID - /// Enables/disables spawning - var/ready_to_spawn = FALSE - /// Assoc list of map templates indexed by user friendly names - var/static/list/arena_templates = list() - /// Were the config directory arenas loaded - var/static/default_arenas_loaded = FALSE - /// Name of currently loaded template - var/current_arena_template = "None" - // What turf arena clears to - var/empty_turf_type = /turf/open/indestructible - // List of team ids - var/list/teams = list(ARENA_RED_TEAM,ARENA_GREEN_TEAM) - /// List of hud instances indedxed by team id - var/static/list/team_huds = list() - /// List of hud colors indexed by team id - var/static/list/team_colors = list(ARENA_RED_TEAM = "red", ARENA_GREEN_TEAM = "green") - // Team hud index in GLOB.huds indexed by team id - var/static/list/team_hud_index = list() - - /// List of ckeys indexed by team id - var/list/team_keys = list() - /// List of outfit datums/types indexed by team id, can be empty - var/list/outfits = list() - /// Default team outfit if outfits[team] is empty - var/default_outfit = /datum/outfit/job/assistant - - /// Is the arena template loading in - var/loading = FALSE - - //How long between admin pressing start and doors opening - var/start_delay = 30 SECONDS - //Value for the countdown - var/start_time - var/list/countdowns = list() //List of countdown effects ticking down to start - - //Sound played when the fight starts. - var/start_sound = 'sound/blank.ogg' - var/start_sound_volume = 50 - -/obj/machinery/computer/arena/Initialize(mapload, obj/item/circuitboard/C) - . = ..() - INVOKE_ASYNC(src, PROC_REF(LoadDefaultArenas)) - GenerateAntagHuds() - -/obj/machinery/computer/arena/proc/GenerateAntagHuds() - for(var/team in teams) - var/datum/atom_hud/antag/teamhud = team_huds[team] - if(!teamhud) //These will be shared between arenas because this stuff is expensive and cross arena fighting is not a thing anyway - teamhud = new - teamhud.icon_color = team_colors[team] - GLOB.huds += teamhud - team_huds[team] = teamhud - team_hud_index[team] = length(GLOB.huds) - -/** - * Loads the arenas from config directory. - * THESE ARE FULLY CACHED FOR QUICK SWITCHING SO KEEP TRACK OF THE AMOUNT - */ -/obj/machinery/computer/arena/proc/LoadDefaultArenas() - if(default_arenas_loaded) - return - var/arena_dir = "[global.config.directory]/arenas/" - var/list/default_arenas = flist(arena_dir) - for(var/arena_file in default_arenas) - var/simple_name = replacetext(replacetext(arena_file,arena_dir,""),".dmm","") - add_new_arena_template(null,arena_dir + arena_file,simple_name) - -/obj/machinery/computer/arena/proc/get_landmark_turf(landmark_tag) - for(var/obj/effect/landmark/arena/L in GLOB.landmarks_list) - if(L.arena_id == arena_id && L.landmark_tag == landmark_tag && isturf(L.loc)) - return L.loc - -/obj/machinery/computer/arena/proc/get_load_point() - var/turf/A = get_landmark_turf(ARENA_CORNER_A) - var/turf/B = get_landmark_turf(ARENA_CORNER_B) - return locate(min(A.x,B.x),min(A.y,B.y),A.z) - -/obj/machinery/computer/arena/proc/get_arena_turfs() - var/lp = get_load_point() - var/turf/A = get_landmark_turf(ARENA_CORNER_A) - var/turf/B = get_landmark_turf(ARENA_CORNER_B) - var/turf/hp = locate(max(A.x,B.x),max(A.y,B.y),A.z) - return block(lp,hp) - -/obj/machinery/computer/arena/proc/clear_arena() - for(var/turf/T in get_arena_turfs()) - T.empty(turf_type = /turf/open/indestructible) - current_arena_template = "None" - -/obj/machinery/computer/arena/proc/load_arena(arena_template,mob/user) - if(loading) - return - var/datum/map_template/M = arena_templates[arena_template] - if(!M) - to_chat(user,"No such arena") - return - clear_arena() //Clear current arena - var/turf/A = get_landmark_turf(ARENA_CORNER_A) - var/turf/B = get_landmark_turf(ARENA_CORNER_B) - var/wh = abs(A.x - B.x) + 1 - var/hz = abs(A.y - B.y) + 1 - if(M.width > wh || M.height > hz) - to_chat(user,"Arena template is too big for the current arena!") - return - loading = TRUE - var/bd = M.load(get_load_point()) - if(bd) - current_arena_template = arena_template - loading = FALSE - - message_admins("[key_name_admin(user)] loaded [arena_template] event arena for [arena_id] arena.") - log_admin("[key_name(user)] loaded [arena_template] event arena for [arena_id] arena.") - - - -/obj/machinery/computer/arena/proc/add_new_arena_template(user,fname,friendly_name) - if(!fname) - fname = input(user, "Upload dmm file to use as arena template","Upload Map Template") as null|file - if(!fname) - return - if(!friendly_name) - friendly_name = "[fname]" //Could ask the user for friendly name here - - var/datum/map_template/T = new(fname,friendly_name,TRUE) - if(!T.cached_map || T.cached_map.check_for_errors()) - to_chat(user,"Map failed to parse check for errors.") - return - - arena_templates[T.name] = T - message_admins("[key_name_admin(user)] uploaded new event arena: [friendly_name].") - log_admin("[key_name(user)] uploaded new event arena: [friendly_name].") - -/obj/machinery/computer/arena/proc/load_team(user,team) - var/rawteam = stripped_multiline_input(user,"Enter team list (ckeys separated by newline)") - for(var/i in splittext(rawteam,"\n")) - var/key = ckey(i) - if(!i) - continue - add_team_member(user,team,key) - -/obj/machinery/computer/arena/proc/add_team_member(mob/user,team,key) - if(!key) - var/list/keys = list() - for(var/mob/M in GLOB.player_list) - keys += M.client - var/client/selection = input("Please, select a player!", "Team member", null, null) as null|anything in sortKey(keys) - //Could be freeform if you want to add disconnected i guess - if(!selection) - return - key = selection.ckey - if(!team_keys[team]) - team_keys[team] = list(key) - else - team_keys[team] |= key - to_chat(user,"[key] added to [team] team.") - -/obj/machinery/computer/arena/proc/remove_member(mob/user,ckey,team) - team_keys[team] -= ckey - to_chat(user,"[ckey] removed from [team] team.") - -/obj/machinery/computer/arena/proc/spawn_member(obj/machinery/arena_spawn/spawnpoint,ckey,team) - var/mob/oldbody = get_mob_by_key(ckey) - if(!isobserver(oldbody)) - return - var/mob/living/carbon/human/M = new/mob/living/carbon/human(get_turf(spawnpoint)) - oldbody.client.prefs.copy_to(M) - M.set_species(/datum/species/human) // Could use setting per team - M.equipOutfit(outfits[team] ? outfits[team] : default_outfit) - M.faction += team //In case anyone wants to add team based stuff to arena special effects - M.key = ckey - - var/datum/atom_hud/antag/team_hud = team_huds[team] - team_hud.join_hud(M) - set_antag_hud(M,"arena",team_hud_index[team]) - -/obj/machinery/computer/arena/proc/change_outfit(mob/user,team) - outfits[team] = user.client.robust_dress_shop() - -/obj/machinery/computer/arena/proc/toggle_spawn(mob/user) - ready_to_spawn = !ready_to_spawn - to_chat(user,"You [ready_to_spawn ? "enable" : "disable"] the spawners.") - log_admin("[key_name(user)] toggled event arena spawning for [arena_id] arena.") - // Could use update_icon on spawnpoints here to show they're on - if(ready_to_spawn) - for(var/mob/M in all_contestants()) - to_chat(M,"Arena you're signed up for is ready!") - -/obj/machinery/computer/arena/proc/all_contestants() - . = list() - for(var/team in team_keys) - for(var/key in team_keys[team]) - var/mob/M = get_mob_by_key(key) - if(M) - . += M - -/obj/machinery/computer/arena/proc/reset_arena() - clear_arena() - set_doors(closed = TRUE) - -/obj/machinery/computer/arena/proc/get_spawn(team) - for(var/obj/machinery/arena_spawn/A in GLOB.machines) - if(A.arena_id == arena_id && A.team == team) - return A - -/obj/machinery/computer/arena/proc/start_match(mob/user) - //TODO: Check if everyone is spawned in, if not ask for confirmation. - var/timetext = DisplayTimeText(start_delay) - to_chat(user,"The match will start in [timetext].") - for(var/mob/M in all_contestants()) - to_chat(M,"The gates will open in [timetext]!") - start_time = world.time + start_delay - addtimer(CALLBACK(src,PROC_REF(begin)),start_delay) - for(var/team in teams) - var/obj/machinery/arena_spawn/team_spawn = get_spawn(team) - var/obj/effect/countdown/arena/A = new(team_spawn) - A.start() - countdowns += A - -/obj/machinery/computer/arena/proc/begin() - ready_to_spawn = FALSE - set_doors(closed = FALSE) - if(start_sound) - for(var/team in teams) - var/obj/machinery/arena_spawn/A = get_spawn(team) - playsound(A,start_sound, start_sound_volume) - for(var/mob/M in all_contestants()) - to_chat(M,"START!") - //Clean up the countdowns - QDEL_LIST(countdowns) - start_time = null - updateUsrDialog() - - -/obj/machinery/computer/arena/proc/set_doors(closed = FALSE) - for(var/obj/machinery/door/poddoor/D in GLOB.machines) //I really dislike pathing of these - if(D.id != arena_id) - continue - if(closed) - INVOKE_ASYNC(D, TYPE_PROC_REF(/obj/machinery/door/poddoor, close)) - else - INVOKE_ASYNC(D, TYPE_PROC_REF(/obj/machinery/door/poddoor, open)) - -/obj/machinery/computer/arena/Topic(href, href_list) - if(..()) - return - var/mob/user = usr - - if(!user.client.holder) // Should it require specific perm ? - return - - if(href_list["upload"]) - add_new_arena_template(user) - if(href_list["change_arena"]) - load_arena(href_list["change_arena"],user) - if(href_list["toggle_spawn"]) - toggle_spawn(user) - if(href_list["start"]) - start_match(user) - if(href_list["team_action"]) - var/team = href_list["team"] - switch(href_list["team_action"]) - if("addmember") - add_team_member(user,team) - if("loadteam") - load_team(user,team) - if("outfit") - change_outfit(user,team) - if(href_list["special"]) - switch(href_list["special"]) - if("reset") - reset_arena() - //Just example in case you want to add more - if("randomarena") - load_random_arena(user) - if("spawntrophy") - trophy_for_last_man_standing(user) - if(href_list["member_action"]) - var/ckey = href_list["ckey"] - var/team = href_list["team"] - switch(href_list["member_action"]) - if("remove") - remove_member(user,ckey,team) - updateUsrDialog() - -// Special functions - -/obj/machinery/computer/arena/proc/load_random_arena(mob/user) - if(!length(arena_templates)) - to_chat(user,"No arenas present") - return - var/picked = pick(arena_templates) - load_arena(picked,user) - -/obj/machinery/computer/arena/proc/trophy_for_last_man_standing() - var/arena_turfs = get_arena_turfs() - for(var/mob/living/L in GLOB.mob_living_list) - if(L.stat != DEAD && (get_turf(L) in arena_turfs)) - var/obj/item/reagent_containers/food/drinks/trophy/gold_cup/G = new(get_turf(L)) - G.name = "[L.real_name]'s Trophy" - -/obj/machinery/computer/arena/ui_interact(mob/user, ui_key, datum/tgui/ui, force_open, datum/tgui/master_ui, datum/ui_state/state) - . = ..() - var/list/dat = list() - dat += "

Spawning is currently [ready_to_spawn ? "enabled" : "disabled"] Toggle
" - dat += "" - for(var/team in teams) - dat += "

[capitalize(team)] team:

" - dat += "
    " - for(var/ckey in team_keys[team]) - var/player_status = "Not Present" - var/mob/M = get_mob_by_key(ckey) - if(M) - //Should define waiting room upper/lower corner and check if they're there instead of generic live/dead check - if(isobserver(M)) - player_status = "Ghosted" - else - player_status = M.stat == DEAD ? "Dead" : "Alive" - dat += "
  • [ckey] - [player_status] - " - dat += "FLW" - dat += "Remove" - //Add more per player features here - dat += "
  • " - dat += "
" - dat += "
Team Outfit : [outfits[team] ? outfits[team] : default_outfit]
" - dat += "Load team" - dat += "Add member" - dat += "Change Outfit" - //Add more per team features here - - dat += "Current arena: [current_arena_template]" - dat += "

Arena List:

" - for(var/A in arena_templates) - dat += "[A]
" - dat += "
" - dat += "Upload new arena
" - dat += "
" - //Special actions - dat += "Reset Arena.
" - dat += "Load random arena.
" - dat += "Spawn trophies for survivors.
" - - var/datum/browser/popup = new(user, "arena controller", "Arena Controller", 500, 600) - popup.set_content(dat.Join()) - popup.open() - -/// Arena spawnpoint -/obj/machinery/arena_spawn - name = "Arena Spawnpoint" - icon = 'icons/obj/device.dmi' - icon_state = "syndbeacon" - resistance_flags = INDESTRUCTIBLE - /// In case we have multiple arena controllers at once. - var/arena_id = ARENA_DEFAULT_ID - /// Team ID - var/team = "default" - /// only exist to cut down on glob.machines lookups, do not modify - var/obj/machinery/computer/arena/_controller - -/obj/machinery/arena_spawn/red - name = "Red Team Spawnpoint" - color = "red" - team = ARENA_RED_TEAM - -/obj/machinery/arena_spawn/green - name = "Green Team Spawnpoint" - color = "green" - team = ARENA_GREEN_TEAM - -/obj/machinery/arena_spawn/proc/get_controller() - if(_controller && !QDELETED(_controller) && _controller.arena_id == arena_id) - return _controller - for(var/obj/machinery/computer/arena/A in GLOB.machines) - if(A.arena_id == arena_id) - _controller = A - return _controller - -/obj/machinery/arena_spawn/attack_ghost(mob/user) - var/obj/machinery/computer/arena/C = get_controller() - if(!C) //Unlinked spawn - return - if(C.ready_to_spawn) - var/list/allowed_keys = C.team_keys[team] - if(!(user.ckey in allowed_keys)) - to_chat(user,"You're not on the team list.") - return - C.spawn_member(src,user.ckey,team) - -#undef ARENA_GREEN_TEAM -#undef ARENA_RED_TEAM -#undef ARENA_DEFAULT_ID -#undef ARENA_CORNER_A -#undef ARENA_CORNER_B diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm deleted file mode 100644 index 2fe04f7050..0000000000 --- a/code/game/machinery/computer/atmos_alert.dm +++ /dev/null @@ -1,90 +0,0 @@ -/obj/machinery/computer/atmos_alert - name = "atmospheric alert console" - desc = "" - circuit = /obj/item/circuitboard/computer/atmos_alert - ui_x = 350 - ui_y = 300 - icon_screen = "alert:0" - icon_keyboard = "atmos_key" - var/list/priority_alarms = list() - var/list/minor_alarms = list() - var/receive_frequency = FREQ_ATMOS_ALARMS - var/datum/radio_frequency/radio_connection - - light_color = LIGHT_COLOR_CYAN - -/obj/machinery/computer/atmos_alert/Initialize() - . = ..() - set_frequency(receive_frequency) - -/obj/machinery/computer/atmos_alert/Destroy() - SSradio.remove_object(src, receive_frequency) - return ..() - -/obj/machinery/computer/atmos_alert/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "atmos_alert", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/computer/atmos_alert/ui_data(mob/user) - var/list/data = list() - - data["priority"] = list() - for(var/zone in priority_alarms) - data["priority"] += zone - data["minor"] = list() - for(var/zone in minor_alarms) - data["minor"] += zone - - return data - -/obj/machinery/computer/atmos_alert/ui_act(action, params) - if(..()) - return - switch(action) - if("clear") - var/zone = params["zone"] - if(zone in priority_alarms) - to_chat(usr, "Priority alarm for [zone] cleared.") - priority_alarms -= zone - . = TRUE - if(zone in minor_alarms) - to_chat(usr, "Minor alarm for [zone] cleared.") - minor_alarms -= zone - . = TRUE - update_icon() - -/obj/machinery/computer/atmos_alert/proc/set_frequency(new_frequency) - SSradio.remove_object(src, receive_frequency) - receive_frequency = new_frequency - radio_connection = SSradio.add_object(src, receive_frequency, RADIO_ATMOSIA) - -/obj/machinery/computer/atmos_alert/receive_signal(datum/signal/signal) - if(!signal) - return - - var/zone = signal.data["zone"] - var/severity = signal.data["alert"] - - if(!zone || !severity) - return - - minor_alarms -= zone - priority_alarms -= zone - if(severity == "severe") - priority_alarms += zone - else if (severity == "minor") - minor_alarms += zone - update_icon() - return - -/obj/machinery/computer/atmos_alert/update_overlays() - . = ..() - if(stat & (NOPOWER|BROKEN)) - return - if(priority_alarms.len) - . += "alert:2" - else if(minor_alarms.len) - . += "alert:1" diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm deleted file mode 100644 index 12a61a040f..0000000000 --- a/code/game/machinery/computer/atmos_control.dm +++ /dev/null @@ -1,335 +0,0 @@ -///////////////////////////////////////////////////////////// -// AIR SENSOR (found in gas tanks) -///////////////////////////////////////////////////////////// - -/obj/machinery/air_sensor - name = "gas sensor" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "gsensor1" - resistance_flags = FIRE_PROOF - - var/on = TRUE - - var/id_tag - var/frequency = FREQ_ATMOS_STORAGE - var/datum/radio_frequency/radio_connection - -/obj/machinery/air_sensor/atmos/toxin_tank - name = "plasma tank gas sensor" - id_tag = ATMOS_GAS_MONITOR_SENSOR_TOX -/obj/machinery/air_sensor/atmos/toxins_mixing_tank - name = "toxins mixing gas sensor" - id_tag = ATMOS_GAS_MONITOR_SENSOR_TOXINS_LAB -/obj/machinery/air_sensor/atmos/oxygen_tank - name = "oxygen tank gas sensor" - id_tag = ATMOS_GAS_MONITOR_SENSOR_O2 -/obj/machinery/air_sensor/atmos/nitrogen_tank - name = "nitrogen tank gas sensor" - id_tag = ATMOS_GAS_MONITOR_SENSOR_N2 -/obj/machinery/air_sensor/atmos/mix_tank - name = "mix tank gas sensor" - id_tag = ATMOS_GAS_MONITOR_SENSOR_MIX -/obj/machinery/air_sensor/atmos/nitrous_tank - name = "nitrous oxide tank gas sensor" - id_tag = ATMOS_GAS_MONITOR_SENSOR_N2O -/obj/machinery/air_sensor/atmos/air_tank - name = "air mix tank gas sensor" - id_tag = ATMOS_GAS_MONITOR_SENSOR_AIR -/obj/machinery/air_sensor/atmos/carbon_tank - name = "carbon dioxide tank gas sensor" - id_tag = ATMOS_GAS_MONITOR_SENSOR_CO2 -/obj/machinery/air_sensor/atmos/incinerator_tank - name = "incinerator chamber gas sensor" - id_tag = ATMOS_GAS_MONITOR_SENSOR_INCINERATOR - -/obj/machinery/air_sensor/update_icon_state() - icon_state = "gsensor[on]" - -/obj/machinery/air_sensor/process_atmos() - if(on) - var/datum/gas_mixture/air_sample = return_air() - - var/datum/signal/signal = new(list( - "sigtype" = "status", - "id_tag" = id_tag, - "timestamp" = world.time, - "pressure" = air_sample.return_pressure(), - "temperature" = air_sample.temperature, - "gases" = list() - )) - var/total_moles = air_sample.total_moles() - if(total_moles) - for(var/gas_id in air_sample.gases) - var/gas_name = air_sample.gases[gas_id][GAS_META][META_GAS_NAME] - signal.data["gases"][gas_name] = air_sample.gases[gas_id][MOLES] / total_moles * 100 - - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) - - -/obj/machinery/air_sensor/proc/set_frequency(new_frequency) - SSradio.remove_object(src, frequency) - frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) - -/obj/machinery/air_sensor/Initialize() - . = ..() - SSair.atmos_machinery += src - set_frequency(frequency) - -/obj/machinery/air_sensor/Destroy() - SSair.atmos_machinery -= src - SSradio.remove_object(src, frequency) - return ..() - -///////////////////////////////////////////////////////////// -// GENERAL AIR CONTROL (a.k.a atmos computer) -///////////////////////////////////////////////////////////// -GLOBAL_LIST_EMPTY(atmos_air_controllers) - -/obj/machinery/computer/atmos_control - name = "atmospherics monitoring" - desc = "" - icon_screen = "tank" - icon_keyboard = "atmos_key" - circuit = /obj/item/circuitboard/computer/atmos_control - ui_x = 400 - ui_y = 925 - - var/frequency = FREQ_ATMOS_STORAGE - var/list/sensors = list( - ATMOS_GAS_MONITOR_SENSOR_N2 = "Nitrogen Tank", - ATMOS_GAS_MONITOR_SENSOR_O2 = "Oxygen Tank", - ATMOS_GAS_MONITOR_SENSOR_CO2 = "Carbon Dioxide Tank", - ATMOS_GAS_MONITOR_SENSOR_TOX = "Plasma Tank", - ATMOS_GAS_MONITOR_SENSOR_N2O = "Nitrous Oxide Tank", - ATMOS_GAS_MONITOR_SENSOR_AIR = "Mixed Air Tank", - ATMOS_GAS_MONITOR_SENSOR_MIX = "Mix Tank", - ATMOS_GAS_MONITOR_LOOP_DISTRIBUTION = "Distribution Loop", - ATMOS_GAS_MONITOR_LOOP_ATMOS_WASTE = "Atmos Waste Loop", - ATMOS_GAS_MONITOR_SENSOR_INCINERATOR = "Incinerator Chamber", - ATMOS_GAS_MONITOR_SENSOR_TOXINS_LAB = "Toxins Mixing Chamber" - ) - var/list/sensor_information = list() - var/datum/radio_frequency/radio_connection - - light_color = LIGHT_COLOR_CYAN - -/obj/machinery/computer/atmos_control/Initialize() - . = ..() - GLOB.atmos_air_controllers += src - set_frequency(frequency) - -/obj/machinery/computer/atmos_control/Destroy() - GLOB.atmos_air_controllers -= src - SSradio.remove_object(src, frequency) - return ..() - -/obj/machinery/computer/atmos_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "atmos_control", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/computer/atmos_control/ui_data(mob/user) - var/data = list() - - data["sensors"] = list() - for(var/id_tag in sensors) - var/long_name = sensors[id_tag] - var/list/info = sensor_information[id_tag] - if(!info) - continue - data["sensors"] += list(list( - "id_tag" = id_tag, - "long_name" = sanitize(long_name), - "pressure" = info["pressure"], - "temperature" = info["temperature"], - "gases" = info["gases"] - )) - return data - -/obj/machinery/computer/atmos_control/receive_signal(datum/signal/signal) - if(!signal) - return - - var/id_tag = signal.data["id_tag"] - if(!id_tag || !sensors.Find(id_tag)) - return - - sensor_information[id_tag] = signal.data - -/obj/machinery/computer/atmos_control/proc/set_frequency(new_frequency) - SSradio.remove_object(src, frequency) - frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) - -//Incinerator sensor only -/obj/machinery/computer/atmos_control/incinerator - name = "Incinerator Air Control" - sensors = list(ATMOS_GAS_MONITOR_SENSOR_INCINERATOR = "Incinerator Chamber") - circuit = /obj/item/circuitboard/computer/atmos_control/incinerator - ui_x = 400 - ui_y = 300 - -//Toxins mix sensor only -/obj/machinery/computer/atmos_control/toxinsmix - name = "Toxins Mixing Air Control" - sensors = list(ATMOS_GAS_MONITOR_SENSOR_TOXINS_LAB = "Toxins Mixing Chamber") - circuit = /obj/item/circuitboard/computer/atmos_control/toxinsmix - ui_x = 400 - ui_y = 300 - -///////////////////////////////////////////////////////////// -// LARGE TANK CONTROL -///////////////////////////////////////////////////////////// - -/obj/machinery/computer/atmos_control/tank - var/input_tag - var/output_tag - frequency = FREQ_ATMOS_STORAGE - circuit = /obj/item/circuitboard/computer/atmos_control/tank - - var/list/input_info - var/list/output_info - - ui_x = 500 - ui_y = 315 - -/obj/machinery/computer/atmos_control/tank/oxygen_tank - name = "Oxygen Supply Control" - input_tag = ATMOS_GAS_MONITOR_INPUT_O2 - output_tag = ATMOS_GAS_MONITOR_OUTPUT_O2 - sensors = list(ATMOS_GAS_MONITOR_SENSOR_O2 = "Oxygen Tank") - circuit = /obj/item/circuitboard/computer/atmos_control/tank/oxygen_tank - -/obj/machinery/computer/atmos_control/tank/toxin_tank - name = "Plasma Supply Control" - input_tag = ATMOS_GAS_MONITOR_INPUT_TOX - output_tag = ATMOS_GAS_MONITOR_OUTPUT_TOX - sensors = list(ATMOS_GAS_MONITOR_SENSOR_TOX = "Plasma Tank") - circuit = /obj/item/circuitboard/computer/atmos_control/tank/toxin_tank - -/obj/machinery/computer/atmos_control/tank/air_tank - name = "Mixed Air Supply Control" - input_tag = ATMOS_GAS_MONITOR_INPUT_AIR - output_tag = ATMOS_GAS_MONITOR_OUTPUT_AIR - sensors = list(ATMOS_GAS_MONITOR_SENSOR_AIR = "Air Mix Tank") - circuit = /obj/item/circuitboard/computer/atmos_control/tank/air_tank - -/obj/machinery/computer/atmos_control/tank/mix_tank - name = "Gas Mix Tank Control" - input_tag = ATMOS_GAS_MONITOR_INPUT_MIX - output_tag = ATMOS_GAS_MONITOR_OUTPUT_MIX - sensors = list(ATMOS_GAS_MONITOR_SENSOR_MIX = "Gas Mix Tank") - circuit = /obj/item/circuitboard/computer/atmos_control/tank/mix_tank - -/obj/machinery/computer/atmos_control/tank/nitrous_tank - name = "Nitrous Oxide Supply Control" - input_tag = ATMOS_GAS_MONITOR_INPUT_N2O - output_tag = ATMOS_GAS_MONITOR_OUTPUT_N2O - sensors = list(ATMOS_GAS_MONITOR_SENSOR_N2O = "Nitrous Oxide Tank") - circuit = /obj/item/circuitboard/computer/atmos_control/tank/nitrous_tank - -/obj/machinery/computer/atmos_control/tank/nitrogen_tank - name = "Nitrogen Supply Control" - input_tag = ATMOS_GAS_MONITOR_INPUT_N2 - output_tag = ATMOS_GAS_MONITOR_OUTPUT_N2 - sensors = list(ATMOS_GAS_MONITOR_SENSOR_N2 = "Nitrogen Tank") - circuit = /obj/item/circuitboard/computer/atmos_control/tank/nitrogen_tank - -/obj/machinery/computer/atmos_control/tank/carbon_tank - name = "Carbon Dioxide Supply Control" - input_tag = ATMOS_GAS_MONITOR_INPUT_CO2 - output_tag = ATMOS_GAS_MONITOR_OUTPUT_CO2 - sensors = list(ATMOS_GAS_MONITOR_SENSOR_CO2 = "Carbon Dioxide Tank") - circuit = /obj/item/circuitboard/computer/atmos_control/tank/carbon_tank - -// This hacky madness is the evidence of the fact that a lot of machines were never meant to be constructable, im so sorry you had to see this -/obj/machinery/computer/atmos_control/tank/proc/reconnect(mob/user) - var/list/IO = list() - var/datum/radio_frequency/freq = SSradio.return_frequency(frequency) - var/list/devices = freq.devices["_default"] - for(var/obj/machinery/atmospherics/components/unary/vent_pump/U in devices) - var/list/text = splittext(U.id_tag, "_") - IO |= text[1] - for(var/obj/machinery/atmospherics/components/unary/outlet_injector/U in devices) - var/list/text = splittext(U.id, "_") - IO |= text[1] - if(!IO.len) - to_chat(user, "No machinery detected.") - var/S = input("Select the device set: ", "Selection", IO[1]) as anything in sortList(IO) - if(src) - src.input_tag = "[S]_in" - src.output_tag = "[S]_out" - name = "[uppertext(S)] Supply Control" - var/list/new_devices = freq.devices["atmosia"] - sensors.Cut() - for(var/obj/machinery/air_sensor/U in new_devices) - var/list/text = splittext(U.id_tag, "_") - if(text[1] == S) - sensors = list("[S]_sensor" = "[S] Tank") - break - - for(var/obj/machinery/atmospherics/components/unary/outlet_injector/U in devices) - U.broadcast_status() - for(var/obj/machinery/atmospherics/components/unary/vent_pump/U in devices) - U.broadcast_status() - -/obj/machinery/computer/atmos_control/tank/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "atmos_control", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/computer/atmos_control/tank/ui_data(mob/user) - var/list/data = ..() - data["tank"] = TRUE - data["inputting"] = input_info ? input_info["power"] : FALSE - data["inputRate"] = input_info ? input_info["volume_rate"] : 0 - data["outputting"] = output_info ? output_info["power"] : FALSE - data["outputPressure"] = output_info ? output_info["internal"] : 0 - - return data - -/obj/machinery/computer/atmos_control/tank/ui_act(action, params) - if(..() || !radio_connection) - return - var/datum/signal/signal = new(list("sigtype" = "command", "user" = usr)) - switch(action) - if("reconnect") - reconnect(usr) - . = TRUE - if("input") - signal.data += list("tag" = input_tag, "power_toggle" = TRUE) - . = TRUE - if("rate") - var/target = text2num(params["rate"]) - if(!isnull(target)) - target = CLAMP(target, 0, MAX_TRANSFER_RATE) - signal.data += list("tag" = input_tag, "set_volume_rate" = target) - . = TRUE - if("output") - signal.data += list("tag" = output_tag, "power_toggle" = TRUE) - . = TRUE - if("pressure") - var/target = text2num(params["pressure"]) - if(!isnull(target)) - target = CLAMP(target, 0, 4500) - signal.data += list("tag" = output_tag, "set_internal_pressure" = target) - . = TRUE - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) - -/obj/machinery/computer/atmos_control/tank/receive_signal(datum/signal/signal) - if(!signal) - return - - var/id_tag = signal.data["tag"] - - if(input_tag == id_tag) - input_info = signal.data - else if(output_tag == id_tag) - output_info = signal.data - else - ..(signal) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm deleted file mode 100644 index 452eef980d..0000000000 --- a/code/game/machinery/computer/buildandrepair.dm +++ /dev/null @@ -1,143 +0,0 @@ -/obj/structure/frame/computer - name = "computer frame" - icon_state = "0" - state = 0 - -/obj/structure/frame/computer/attackby(obj/item/P, mob/user, params) - add_fingerprint(user) - switch(state) - if(0) - if(P.tool_behaviour == TOOL_WRENCH) - to_chat(user, "I start wrenching the frame into place...") - if(P.use_tool(src, user, 20, volume=50)) - to_chat(user, "I wrench the frame into place.") - setAnchored(TRUE) - state = 1 - return - if(P.tool_behaviour == TOOL_WELDER) - if(!P.tool_start_check(user, amount=0)) - return - - to_chat(user, "I start deconstructing the frame...") - if(P.use_tool(src, user, 20, volume=50)) - to_chat(user, "I deconstruct the frame.") - var/obj/item/stack/sheet/metal/M = new (drop_location(), 5) - M.add_fingerprint(user) - qdel(src) - return - if(1) - if(P.tool_behaviour == TOOL_WRENCH) - to_chat(user, "I start to unfasten the frame...") - if(P.use_tool(src, user, 20, volume=50)) - to_chat(user, "I unfasten the frame.") - setAnchored(FALSE) - state = 0 - return - if(istype(P, /obj/item/circuitboard/computer) && !circuit) - if(!user.transferItemToLoc(P, src)) - return - playsound(src, 'sound/blank.ogg', 50, TRUE) - to_chat(user, "I place [P] inside the frame.") - icon_state = "1" - circuit = P - circuit.add_fingerprint(user) - return - - else if(istype(P, /obj/item/circuitboard) && !circuit) - to_chat(user, "This frame does not accept circuit boards of this type!") - return - if(P.tool_behaviour == TOOL_SCREWDRIVER && circuit) - P.play_tool_sound(src) - to_chat(user, "I screw [circuit] into place.") - state = 2 - icon_state = "2" - return - if(P.tool_behaviour == TOOL_CROWBAR && circuit) - P.play_tool_sound(src) - to_chat(user, "I remove [circuit].") - state = 1 - icon_state = "0" - circuit.forceMove(drop_location()) - circuit.add_fingerprint(user) - circuit = null - return - if(2) - if(P.tool_behaviour == TOOL_SCREWDRIVER && circuit) - P.play_tool_sound(src) - to_chat(user, "I unfasten the circuit board.") - state = 1 - icon_state = "1" - return - if(istype(P, /obj/item/stack/cable_coil)) - if(!P.tool_start_check(user, amount=5)) - return - to_chat(user, "I start adding cables to the frame...") - if(P.use_tool(src, user, 20, volume=50, amount=5)) - if(state != 2) - return - to_chat(user, "I add cables to the frame.") - state = 3 - icon_state = "3" - return - if(3) - if(P.tool_behaviour == TOOL_WIRECUTTER) - P.play_tool_sound(src) - to_chat(user, "I remove the cables.") - state = 2 - icon_state = "2" - var/obj/item/stack/cable_coil/A = new (drop_location(), 5) - A.add_fingerprint(user) - return - - if(istype(P, /obj/item/stack/sheet/glass)) - if(!P.tool_start_check(user, amount=2)) - return - playsound(src, 'sound/blank.ogg', 50, TRUE) - to_chat(user, "I start to put in the glass panel...") - if(P.use_tool(src, user, 20, amount=2)) - if(state != 3) - return - to_chat(user, "I put in the glass panel.") - state = 4 - src.icon_state = "4" - return - if(4) - if(P.tool_behaviour == TOOL_CROWBAR) - P.play_tool_sound(src) - to_chat(user, "I remove the glass panel.") - state = 3 - icon_state = "3" - var/obj/item/stack/sheet/glass/G = new(drop_location(), 2) - G.add_fingerprint(user) - return - if(P.tool_behaviour == TOOL_SCREWDRIVER) - P.play_tool_sound(src) - to_chat(user, "I connect the monitor.") - var/obj/B = new circuit.build_path (loc, circuit) - B.setDir(dir) - transfer_fingerprints_to(B) - qdel(src) - return - if(user.used_intent.type == INTENT_HARM) - return ..() - - -/obj/structure/frame/computer/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - if(state == 4) - new /obj/item/shard(drop_location()) - new /obj/item/shard(drop_location()) - if(state >= 3) - new /obj/item/stack/cable_coil(drop_location(), 5) - ..() - -/obj/structure/frame/computer/AltClick(mob/user) - ..() - if(!isliving(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return - - if(anchored) - to_chat(usr, "I must unwrench [src] before rotating it!") - return - - setDir(turn(dir, -90)) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm deleted file mode 100644 index a2d379128d..0000000000 --- a/code/game/machinery/computer/camera.dm +++ /dev/null @@ -1,312 +0,0 @@ -/obj/machinery/computer/security - name = "security camera console" - desc = "" - icon_screen = "cameras" - icon_keyboard = "security_key" - circuit = /obj/item/circuitboard/computer/security - light_color = LIGHT_COLOR_RED - - var/last_pic = 1 - var/list/network = list("ss13") - var/list/watchers = list() //who's using the console, associated with the camera they're on. - var/long_ranged = FALSE - -/obj/machinery/computer/security/Initialize() - . = ..() - for(var/i in network) - network -= i - network += lowertext(i) - -/obj/machinery/computer/security/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE) - for(var/i in network) - network -= i - network += "[idnum][i]" - -/obj/machinery/computer/security/check_eye(mob/user) - if( (stat & (NOPOWER|BROKEN)) || user.incapacitated() || user.eye_blind ) - user.unset_machine() - return - if(!(user in watchers)) - user.unset_machine() - return - if(!watchers[user]) - user.unset_machine() - return - var/obj/machinery/camera/C = watchers[user] - if(!C.can_use()) - user.unset_machine() - return - if(iscyborg(user) || long_ranged) - var/list/viewing = viewers(src) - if(!viewing.Find(user)) - user.unset_machine() - return - if(!issilicon(user) && !Adjacent(user)) - user.unset_machine() - return - -/obj/machinery/computer/security/on_unset_machine(mob/user) - watchers.Remove(user) - user.reset_perspective(null) - -/obj/machinery/computer/security/Destroy() - if(watchers.len) - for(var/mob/M in watchers) - M.unset_machine() //to properly reset the view of the users if the console is deleted. - return ..() - -/obj/machinery/computer/security/interact(mob/user) - if (stat) - return - if (ismob(user) && !isliving(user)) // ghosts don't need cameras - return - if (!network) - user.unset_machine() - CRASH("No camera network") - if (!(islist(network))) - user.unset_machine() - CRASH("Camera network is not a list") - if(..()) - user.unset_machine() - return - - var/list/camera_list = get_available_cameras() - if(!(user in watchers)) - for(var/Num in camera_list) - var/obj/machinery/camera/CAM = camera_list[Num] - if(istype(CAM)) - if(CAM.can_use()) - watchers[user] = CAM //let's give the user the first usable camera, and then let him change to the camera he wants. - break - if(!(user in watchers)) - user.unset_machine() // no usable camera on the network, we disconnect the user from the computer. - return - playsound(src, 'sound/blank.ogg', 25, FALSE) - use_camera_console(user) - -/obj/machinery/computer/security/proc/use_camera_console(mob/user) - var/list/camera_list = get_available_cameras() - var/t = input(user, "Which camera should you change to?") as null|anything in camera_list - if(user.machine != src) //while we were choosing we got disconnected from our computer or are using another machine. - return - if(!t) - user.unset_machine() - playsound(src, 'sound/blank.ogg', 25, FALSE) - return - - var/obj/machinery/camera/C = camera_list[t] - - if(t == "Cancel") - user.unset_machine() - playsound(src, 'sound/blank.ogg', 25, FALSE) - return - if(C) - var/camera_fail = 0 - if(!C.can_use() || user.machine != src || user.eye_blind || user.incapacitated()) - camera_fail = 1 - else if(iscyborg(user) || long_ranged) - var/list/viewing = viewers(src) - if(!viewing.Find(user)) - camera_fail = 1 - else if(!issilicon(user) && !Adjacent(user)) - camera_fail = 1 - - if(camera_fail) - user.unset_machine() - return 0 - - playsound(src, 'sound/blank.ogg', 25, FALSE) - if(isAI(user)) - var/mob/living/silicon/ai/A = user - A.eyeobj.setLoc(get_turf(C)) - A.client.eye = A.eyeobj - else - user.reset_perspective(C) - user.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash/static) - user.clear_fullscreen("flash", 5) - watchers[user] = C - use_power(50) - addtimer(CALLBACK(src, PROC_REF(use_camera_console), user), 5) - else - user.unset_machine() - -//returns the list of cameras accessible from this computer -/obj/machinery/computer/security/proc/get_available_cameras() - var/list/L = list() - for (var/obj/machinery/camera/C in GLOB.cameranet.cameras) - if((is_away_level(z) || is_away_level(C.z)) && (C.z != z))//if on away mission, can only receive feed from same z_level cameras - continue - L.Add(C) - - camera_sort(L) - - var/list/D = list() - D["Cancel"] = "Cancel" - for(var/obj/machinery/camera/C in L) - if(!C.network) - stack_trace("Camera in a cameranet has no camera network") - continue - if(!(islist(C.network))) - stack_trace("Camera in a cameranet has a non-list camera network") - continue - var/list/tempnetwork = C.network&network - if(tempnetwork.len) - D["[C.c_tag][(C.status ? null : " (Deactivated)")]"] = C - return D - -// SECURITY MONITORS - -/obj/machinery/computer/security/wooden_tv - name = "security camera monitor" - desc = "" - icon_state = "television" - icon_keyboard = null - icon_screen = "detective_tv" - pass_flags = PASSTABLE - -/obj/machinery/computer/security/mining - name = "outpost camera console" - desc = "" - icon_screen = "mining" - icon_keyboard = "mining_key" - network = list("mine", "auxbase") - circuit = /obj/item/circuitboard/computer/mining - -/obj/machinery/computer/security/research - name = "research camera console" - desc = "" - network = list("rd") - circuit = /obj/item/circuitboard/computer/research - -/obj/machinery/computer/security/hos - name = "\improper Head of Security's camera console" - desc = "" - network = list("ss13", "labor") - circuit = null - -/obj/machinery/computer/security/labor - name = "labor camp monitoring" - desc = "" - network = list("labor") - circuit = null - -/obj/machinery/computer/security/qm - name = "\improper Quartermaster's camera console" - desc = "" - network = list("mine", "auxbase", "vault") - circuit = null - -// TELESCREENS - -/obj/machinery/computer/security/telescreen - name = "\improper Telescreen" - desc = "" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "telescreen" - layer = SIGN_LAYER - network = list("thunder") - density = FALSE - circuit = null - light_power = 0 - -/obj/machinery/computer/security/telescreen/update_icon_state() - icon_state = initial(icon_state) - if(stat & BROKEN) - icon_state += "b" - -/obj/machinery/computer/security/telescreen/entertainment - name = "entertainment monitor" - desc = "" - icon = 'icons/obj/status_display.dmi' - icon_state = "entertainment_blank" - network = list("thunder") - density = FALSE - circuit = null - long_ranged = TRUE - interaction_flags_atom = NONE // interact() is called by BigClick() - var/icon_state_off = "entertainment_blank" - var/icon_state_on = "entertainment" - -/obj/machinery/computer/security/telescreen/entertainment/Initialize() - . = ..() - RegisterSignal(src, COMSIG_CLICK, PROC_REF(BigClick)) - -// Bypass clickchain to allow humans to use the telescreen from a distance -/obj/machinery/computer/security/telescreen/entertainment/proc/BigClick() - interact(usr) - -/obj/machinery/computer/security/telescreen/entertainment/proc/notify(on) - if(on && icon_state == icon_state_off) - say(pick( - "Feats of bravery live now at the thunderdome!", - "Two enter, one leaves! Tune in now!", - "Violence like you've never seen it before!", - "Spears! Camera! Action! LIVE NOW!")) - icon_state = icon_state_on - else - icon_state = icon_state_off - -/obj/machinery/computer/security/telescreen/rd - name = "\improper Research Director's telescreen" - desc = "" - network = list("rd", "aicore", "aiupload", "minisat", "xeno", "test") - -/obj/machinery/computer/security/telescreen/research - name = "research telescreen" - desc = "" - network = list("rd") - -/obj/machinery/computer/security/telescreen/ce - name = "\improper Chief Engineer's telescreen" - desc = "" - network = list("engine", "singularity", "tcomms", "minisat") - -/obj/machinery/computer/security/telescreen/cmo - name = "\improper Chief Medical Officer's telescreen" - desc = "" - network = list("medbay") - -/obj/machinery/computer/security/telescreen/vault - name = "vault monitor" - desc = "" - network = list("vault") - -/obj/machinery/computer/security/telescreen/toxins - name = "bomb test site monitor" - desc = "" - network = list("toxins") - -/obj/machinery/computer/security/telescreen/engine - name = "engine monitor" - desc = "" - network = list("engine") - -/obj/machinery/computer/security/telescreen/turbine - name = "turbine monitor" - desc = "" - network = list("turbine") - -/obj/machinery/computer/security/telescreen/interrogation - name = "interrogation room monitor" - desc = "" - network = list("interrogation") - -/obj/machinery/computer/security/telescreen/prison - name = "prison monitor" - desc = "" - network = list("prison") - -/obj/machinery/computer/security/telescreen/auxbase - name = "auxillary base monitor" - desc = "" - network = list("auxbase") - -/obj/machinery/computer/security/telescreen/minisat - name = "minisat monitor" - desc = "" - network = list("minisat") - -/obj/machinery/computer/security/telescreen/aiupload - name = "\improper AI upload monitor" - desc = "" - network = list("aiupload") diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm deleted file mode 100644 index aa6d6cae8d..0000000000 --- a/code/game/machinery/computer/camera_advanced.dm +++ /dev/null @@ -1,281 +0,0 @@ -/obj/machinery/computer/camera_advanced - name = "advanced camera console" - desc = "" - icon_screen = "cameras" - icon_keyboard = "security_key" - var/list/z_lock = list() // Lock use to these z levels - var/lock_override = NONE - var/mob/camera/aiEye/remote/eyeobj - var/mob/living/current_user = null - var/list/networks = list("ss13") - var/datum/action/innate/camera_off/off_action = new - var/datum/action/innate/camera_jump/jump_action = new - var/list/actions = list() - - light_color = LIGHT_COLOR_RED - -/obj/machinery/computer/camera_advanced/Initialize() - . = ..() - for(var/i in networks) - networks -= i - networks += lowertext(i) - if(lock_override) - if(lock_override & CAMERA_LOCK_STATION) - z_lock |= SSmapping.levels_by_trait(ZTRAIT_STATION) - if(lock_override & CAMERA_LOCK_MINING) - z_lock |= SSmapping.levels_by_trait(ZTRAIT_MINING) - if(lock_override & CAMERA_LOCK_CENTCOM) - z_lock |= SSmapping.levels_by_trait(ZTRAIT_CENTCOM) - -/obj/machinery/computer/camera_advanced/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE) - for(var/i in networks) - networks -= i - networks += "[idnum][i]" - -/obj/machinery/computer/camera_advanced/syndie - icon_keyboard = "syndie_key" - circuit = /obj/item/circuitboard/computer/advanced_camera - -/obj/machinery/computer/camera_advanced/syndie/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE) - return //For syndie nuke shuttle, to spy for station. - -/obj/machinery/computer/camera_advanced/proc/CreateEye() - eyeobj = new() - eyeobj.origin = src - -/obj/machinery/computer/camera_advanced/proc/GrantActions(mob/living/user) - if(off_action) - off_action.target = user - off_action.Grant(user) - actions += off_action - - if(jump_action) - jump_action.target = user - jump_action.Grant(user) - actions += jump_action - -/obj/machinery/proc/remove_eye_control(mob/living/user) - CRASH("[type] does not implement ai eye handling") - -/obj/machinery/computer/camera_advanced/remove_eye_control(mob/living/user) - if(!user) - return - for(var/V in actions) - var/datum/action/A = V - A.Remove(user) - actions.Cut() - for(var/V in eyeobj.visibleCameraChunks) - var/datum/camerachunk/C = V - C.remove(eyeobj) - if(user.client) - user.reset_perspective(null) - if(eyeobj.visible_icon && user.client) - user.client.images -= eyeobj.user_image - eyeobj.eye_user = null - user.remote_control = null - - current_user = null - user.unset_machine() - playsound(src, 'sound/blank.ogg', 25, FALSE) - -/obj/machinery/computer/camera_advanced/check_eye(mob/user) - if( (stat & (NOPOWER|BROKEN)) || (!Adjacent(user) && !user.has_unlimited_silicon_privilege) || user.eye_blind || user.incapacitated() ) - user.unset_machine() - -/obj/machinery/computer/camera_advanced/Destroy() - if(current_user) - current_user.unset_machine() - if(eyeobj) - qdel(eyeobj) - QDEL_LIST(actions) - return ..() - -/obj/machinery/computer/camera_advanced/on_unset_machine(mob/M) - if(M == current_user) - remove_eye_control(M) - -/obj/machinery/computer/camera_advanced/proc/can_use(mob/living/user) - return TRUE - -/obj/machinery/computer/camera_advanced/abductor/can_use(mob/user) - if(!isabductor(user)) - return FALSE - return ..() - -/obj/machinery/computer/camera_advanced/attack_hand(mob/user) - . = ..() - if(.) - return - if(!is_operational()) //you cant use broken machine you chumbis - return - if(current_user) - to_chat(user, "The console is already in use!") - return - var/mob/living/L = user - - if(!can_use(user)) - return - if(!eyeobj) - CreateEye() - - if(!eyeobj.eye_initialized) - var/camera_location - var/turf/myturf = get_turf(src) - if(eyeobj.use_static != USE_STATIC_NONE) - if((!z_lock.len || (myturf.z in z_lock)) && GLOB.cameranet.checkTurfVis(myturf)) - camera_location = myturf - else - for(var/obj/machinery/camera/C in GLOB.cameranet.cameras) - if(!C.can_use() || z_lock.len && !(C.z in z_lock)) - continue - var/list/network_overlap = networks & C.network - if(network_overlap.len) - camera_location = get_turf(C) - break - else - camera_location = myturf - if(z_lock.len && !(myturf.z in z_lock)) - camera_location = locate(round(world.maxx/2), round(world.maxy/2), z_lock[1]) - - if(camera_location) - eyeobj.eye_initialized = TRUE - give_eye_control(L) - eyeobj.setLoc(camera_location) - else - user.unset_machine() - else - give_eye_control(L) - eyeobj.setLoc(eyeobj.loc) - -/obj/machinery/computer/camera_advanced/attack_robot(mob/user) - return attack_hand(user) - -/obj/machinery/computer/camera_advanced/attack_ai(mob/user) - return //AIs would need to disable their own camera procs to use the console safely. Bugs happen otherwise. - -/obj/machinery/computer/camera_advanced/proc/give_eye_control(mob/user) - GrantActions(user) - current_user = user - eyeobj.eye_user = user - eyeobj.name = "Camera Eye ([user.name])" - user.remote_control = eyeobj - user.reset_perspective(eyeobj) - eyeobj.setLoc(eyeobj.loc) - -/mob/camera/aiEye/remote - name = "Inactive Camera Eye" - ai_detector_visible = FALSE - var/sprint = 10 - var/cooldown = 0 - var/acceleration = 1 - var/mob/living/eye_user = null - var/obj/machinery/origin - var/eye_initialized = 0 - var/visible_icon = 0 - var/image/user_image = null - -/mob/camera/aiEye/remote/update_remote_sight(mob/living/user) - user.see_invisible = SEE_INVISIBLE_LIVING //can't see ghosts through cameras - user.sight = SEE_TURFS | SEE_BLACKNESS - user.see_in_dark = 2 - return 1 - -/mob/camera/aiEye/remote/Destroy() - if(origin && eye_user) - origin.remove_eye_control(eye_user,src) - origin = null - . = ..() - eye_user = null - -/mob/camera/aiEye/remote/GetViewerClient() - if(eye_user) - return eye_user.client - return null - -/mob/camera/aiEye/remote/setLoc(T) - if(eye_user) - T = get_turf(T) - if (T) - forceMove(T) - else - moveToNullspace() - update_ai_detect_hud() - if(use_static != USE_STATIC_NONE) - GLOB.cameranet.visibility(src, GetViewerClient(), null, use_static) - if(visible_icon) - if(eye_user.client) - eye_user.client.images -= user_image - user_image = image(icon,loc,icon_state,FLY_LAYER) - eye_user.client.images += user_image - -/mob/camera/aiEye/remote/relaymove(mob/user,direct) - var/initial = initial(sprint) - var/max_sprint = 50 - - if(cooldown && cooldown < world.timeofday) // 3 seconds - sprint = initial - - for(var/i = 0; i < max(sprint, initial); i += 20) - var/turf/step = get_turf(get_step(src, direct)) - if(step) - setLoc(step) - - cooldown = world.timeofday + 5 - if(acceleration) - sprint = min(sprint + 0.5, max_sprint) - else - sprint = initial - -/datum/action/innate/camera_off - name = "End Camera View" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "camera_off" - -/datum/action/innate/camera_off/Activate() - if(!target || !isliving(target)) - return - var/mob/living/C = target - var/mob/camera/aiEye/remote/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/console = remote_eye.origin - console.remove_eye_control(target) - -/datum/action/innate/camera_jump - name = "Jump To Camera" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "camera_jump" - -/datum/action/innate/camera_jump/Activate() - if(!target || !isliving(target)) - return - var/mob/living/C = target - var/mob/camera/aiEye/remote/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/origin = remote_eye.origin - - var/list/L = list() - - for (var/obj/machinery/camera/cam in GLOB.cameranet.cameras) - if(origin.z_lock.len && !(cam.z in origin.z_lock)) - continue - L.Add(cam) - - camera_sort(L) - - var/list/T = list() - - for (var/obj/machinery/camera/netcam in L) - var/list/tempnetwork = netcam.network & origin.networks - if (tempnetwork.len) - T["[netcam.c_tag][netcam.can_use() ? null : " (Deactivated)"]"] = netcam - - playsound(origin,'sound/blank.ogg', 25, FALSE) - var/camera = input("Choose which camera you want to view", "Cameras") as null|anything in T - var/obj/machinery/camera/final = T[camera] - playsound(src, "terminal_type", 25, FALSE) - if(final) - playsound(origin,'sound/blank.ogg', 25, FALSE) - remote_eye.setLoc(get_turf(final)) - C.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash/static) - C.clear_fullscreen("flash", 3) //Shorter flash than normal since it's an ~~advanced~~ console! - else - playsound(origin,'sound/blank.ogg', 25, FALSE) - diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm deleted file mode 100644 index 915c6203f0..0000000000 --- a/code/game/machinery/computer/card.dm +++ /dev/null @@ -1,623 +0,0 @@ - - -//Keeps track of the time for the ID console. Having it as a global variable prevents people from dismantling/reassembling it to -//increase the slots of many jobs. -GLOBAL_VAR_INIT(time_last_changed_position, 0) - -#define JOB_ALLOWED 1 -#define JOB_COOLDOWN -2 -#define JOB_MAX_POSITIONS -1 // Trying to reduce the number of slots below that of current holders of that job, or trying to open more slots than allowed -#define JOB_DENIED 0 - -/obj/machinery/computer/card - name = "identification console" - desc = "" - icon_screen = "id" - icon_keyboard = "id_key" - req_one_access = list(ACCESS_HEADS, ACCESS_CHANGE_IDS) - circuit = /obj/item/circuitboard/computer/card - var/mode = 0 - var/printing = null - var/target_dept = 0 //Which department this computer has access to. 0=all departments - - //Cooldown for closing positions in seconds - //if set to -1: No cooldown... probably a bad idea - //if set to 0: Not able to close "original" positions. You can only close positions that you have opened before - var/change_position_cooldown = 30 - //Jobs you cannot open new positions for - var/list/blacklisted = list( - "AI", - "Assistant", - "Cyborg", - "Captain", - "Head of Personnel", - "Head of Security", - "Chief Engineer", - "Research Director", - "Chief Medical Officer") - - //The scaling factor of max total positions in relation to the total amount of people on board the station in % - var/max_relative_positions = 30 //30%: Seems reasonable, limit of 6 @ 20 players - - //This is used to keep track of opened positions for jobs to allow instant closing - //Assoc array: "JobName" = (int) - var/list/opened_positions = list() - var/obj/item/card/id/inserted_scan_id - var/obj/item/card/id/inserted_modify_id - var/list/region_access = null - var/list/head_subordinates = null - - light_color = LIGHT_COLOR_BLUE - -/obj/machinery/computer/card/proc/get_jobs() - return get_all_jobs() - -/obj/machinery/computer/card/centcom/get_jobs() - return get_all_centcom_jobs() - -/obj/machinery/computer/card/Initialize() - . = ..() - change_position_cooldown = CONFIG_GET(number/id_console_jobslot_delay) - -/obj/machinery/computer/card/examine(mob/user) - . = ..() - if(inserted_scan_id || inserted_modify_id) - . += "Alt-click to eject the ID card." - -/obj/machinery/computer/card/attackby(obj/I, mob/user, params) - if(isidcard(I)) - if(check_access(I) && !inserted_scan_id) - if(id_insert(user, I, inserted_scan_id)) - inserted_scan_id = I - updateUsrDialog() - else if(id_insert(user, I, inserted_modify_id)) - inserted_modify_id = I - updateUsrDialog() - else - return ..() - -/obj/machinery/computer/card/Destroy() - if(inserted_scan_id) - qdel(inserted_scan_id) - inserted_scan_id = null - if(inserted_modify_id) - qdel(inserted_modify_id) - inserted_modify_id = null - return ..() - -/obj/machinery/computer/card/handle_atom_del(atom/A) - ..() - if(A == inserted_scan_id) - inserted_scan_id = null - updateUsrDialog() - if(A == inserted_modify_id) - inserted_modify_id = null - updateUsrDialog() - -/obj/machinery/computer/card/on_deconstruction() - if(inserted_scan_id) - inserted_scan_id.forceMove(drop_location()) - inserted_scan_id = null - if(inserted_modify_id) - inserted_modify_id.forceMove(drop_location()) - inserted_modify_id = null - -//Check if you can't open a new position for a certain job -/obj/machinery/computer/card/proc/job_blacklisted(jobtitle) - return (jobtitle in blacklisted) - -//Logic check for Topic() if you can open the job -/obj/machinery/computer/card/proc/can_open_job(datum/job/job) - if(job) - if(!job_blacklisted(job.title)) - if((job.total_positions <= GLOB.player_list.len * (max_relative_positions / 100))) - var/delta = (world.time / 10) - GLOB.time_last_changed_position - if((change_position_cooldown < delta) || (opened_positions[job.title] < 0)) - return JOB_ALLOWED - return JOB_COOLDOWN - return JOB_MAX_POSITIONS - return JOB_DENIED - -//Logic check for Topic() if you can close the job -/obj/machinery/computer/card/proc/can_close_job(datum/job/job) - if(job) - if(!job_blacklisted(job.title)) - if(job.total_positions > job.current_positions) - var/delta = (world.time / 10) - GLOB.time_last_changed_position - if((change_position_cooldown < delta) || (opened_positions[job.title] > 0)) - return JOB_ALLOWED - return JOB_COOLDOWN - return JOB_MAX_POSITIONS - return JOB_DENIED - - -/obj/machinery/computer/card/proc/id_insert(mob/user, obj/item/inserting_item, obj/item/target) - var/obj/item/card/id/card_to_insert = inserting_item - var/holder_item = FALSE - - if(!isidcard(card_to_insert)) - card_to_insert = inserting_item.RemoveID() - holder_item = TRUE - - if(!card_to_insert || !user.transferItemToLoc(card_to_insert, src)) - return FALSE - - if(target) - if(holder_item && inserting_item.InsertID(target)) - playsound(src, 'sound/blank.ogg', 50, FALSE) - else - id_eject(user, target) - - user.visible_message("[user] inserts \the [card_to_insert] into \the [src].", - "I insert \the [card_to_insert] into \the [src].") - playsound(src, 'sound/blank.ogg', 50, FALSE) - updateUsrDialog() - return TRUE - -/obj/machinery/computer/card/proc/id_eject(mob/user, obj/target) - if(!target) - to_chat(user, "That slot is empty!") - return FALSE - else - target.forceMove(drop_location()) - if(!issilicon(user) && Adjacent(user)) - user.put_in_hands(target) - user.visible_message("[user] gets \the [target] from \the [src].", \ - "I get \the [target] from \the [src].") - playsound(src, 'sound/blank.ogg', 50, FALSE) - updateUsrDialog() - return TRUE - -/obj/machinery/computer/card/AltClick(mob/user) - ..() - if(!user.canUseTopic(src, !issilicon(user)) || !is_operational()) - return - if(inserted_modify_id) - if(id_eject(user, inserted_modify_id)) - inserted_modify_id = null - updateUsrDialog() - return - if(inserted_scan_id) - if(id_eject(user, inserted_scan_id)) - inserted_scan_id = null - updateUsrDialog() - return - -/obj/machinery/computer/card/ui_interact(mob/user) - . = ..() - var/list/dat = list() - if (mode == 1) // accessing crew manifest - dat += "Crew Manifest:
Please use security record computer to modify entries.

" - for(var/datum/data/record/t in sortRecord(GLOB.data_core.general)) - dat += {"[t.fields["name"]] - [t.fields["rank"]]
"} - dat += "Print

Access ID modification console.
" - - else if(mode == 2) - // JOB MANAGEMENT - dat += {"Return - - "} - for(var/datum/job/job in SSjob.occupations) - dat += "" - if(job.title in blacklisted) - continue - dat += {" - - " - dat += "
JobSlotsOpen jobClose jobPrioritize
[job.title][job.current_positions]/[job.total_positions]"} - switch(can_open_job(job)) - if(JOB_ALLOWED) - if(authenticated == 2) - dat += "Open Position
" - else - dat += "Open Position" - if(JOB_COOLDOWN) - var/time_to_wait = round(change_position_cooldown - ((world.time / 10) - GLOB.time_last_changed_position), 1) - var/mins = round(time_to_wait / 60) - var/seconds = time_to_wait - (60*mins) - dat += "Cooldown ongoing: [mins]:[(seconds < 10) ? "0[seconds]" : "[seconds]"]" - else - dat += "Denied" - dat += "
" - switch(can_close_job(job)) - if(JOB_ALLOWED) - if(authenticated == 2) - dat += "Close Position" - else - dat += "Close Position" - if(JOB_COOLDOWN) - var/time_to_wait = round(change_position_cooldown - ((world.time / 10) - GLOB.time_last_changed_position), 1) - var/mins = round(time_to_wait / 60) - var/seconds = time_to_wait - (60*mins) - dat += "Cooldown ongoing: [mins]:[(seconds < 10) ? "0[seconds]" : "[seconds]"]" - else - dat += "Denied" - dat += "" - switch(job.total_positions) - if(0) - dat += "Denied" - else - if(authenticated == 2) - if(job in SSjob.prioritized_jobs) - dat += "Deprioritize" - else - if(SSjob.prioritized_jobs.len < 5) - dat += "Prioritize" - else - dat += "Denied" - else - dat += "Prioritize" - - dat += "
" - else - var/list/header = list() - - var/scan_name = inserted_scan_id ? html_encode(inserted_scan_id.name) : "--------" - var/target_name = inserted_modify_id ? html_encode(inserted_modify_id.name) : "--------" - var/target_owner = (inserted_modify_id && inserted_modify_id.registered_name) ? html_encode(inserted_modify_id.registered_name) : "--------" - var/target_rank = (inserted_modify_id && inserted_modify_id.assignment) ? html_encode(inserted_modify_id.assignment) : "Unassigned" - - if(!authenticated) - header += {"
Please insert the cards into the slots
- Target: [target_name]
- Confirm Identity: [scan_name]
"} - else - header += {"

- Target: Remove [target_name] || - Confirm Identity: Remove [scan_name]
- Access Crew Manifest
- [!target_dept ? "Job Management
" : ""] - Log Out
"} - - header += "
" - - var/body - - if (authenticated && inserted_modify_id) - var/list/carddesc = list() - var/list/jobs = list() - if (authenticated == 2) - var/list/jobs_all = list() - for(var/job in (list("Unassigned") + get_jobs() + "Custom")) - jobs_all += "[replacetext(job, " ", " ")] " //make sure there isn't a line break in the middle of a job - carddesc += {""} - carddesc += {"
- - - registered name: - -
- Assignment: "} - - jobs += "[target_rank]" //CHECK THIS - - else - carddesc += "registered_name: [target_owner]" - jobs += "Assignment: [target_rank] (Demote)" - - var/list/accesses = list() - if(istype(src, /obj/machinery/computer/card/centcom)) // REE - accesses += "
Central Command:
" - for(var/A in get_all_centcom_access()) - if(A in inserted_modify_id.access) - accesses += "[replacetext(get_centcom_access_desc(A), " ", " ")] " - else - accesses += "[replacetext(get_centcom_access_desc(A), " ", " ")] " - else - accesses += {"
Access
- - "} - for(var/i = 1; i <= 7; i++) - if(authenticated == 1 && !(i in region_access)) - continue - accesses += "" - accesses += "" - for(var/i = 1; i <= 7; i++) - if(authenticated == 1 && !(i in region_access)) - continue - accesses += "" - accesses += "
[get_region_accesses_name(i)]:
" - for(var/A in get_region_accesses(i)) - if(A in inserted_modify_id.access) - accesses += "[replacetext(get_access_desc(A), " ", " ")] " - else - accesses += "[replacetext(get_access_desc(A), " ", " ")] " - accesses += "
" - accesses += "
" - body = "[carddesc.Join()]
[jobs.Join()]

[accesses.Join()]
" //CHECK THIS - - else if (!authenticated) - body = {"Log In

- Access Crew Manifest

"} - if(!target_dept) - body += "Job Management
" - - dat = list("", header.Join(), body, "
") - var/datum/browser/popup = new(user, "id_com", src.name, 900, 620) - popup.set_content(dat.Join()) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - -/obj/machinery/computer/card/Topic(href, href_list) - if(..()) - return - - if(!usr.canUseTopic(src, !issilicon(usr)) || !is_operational()) - usr.unset_machine() - usr << browse(null, "window=id_com") - return - - usr.set_machine(src) - switch(href_list["choice"]) - if ("inserted_modify_id") - if(inserted_modify_id && !usr.get_active_held_item()) - if(id_eject(usr, inserted_modify_id)) - inserted_modify_id = null - updateUsrDialog() - return - if(usr.get_id_in_hand()) - var/obj/item/held_item = usr.get_active_held_item() - var/obj/item/card/id/id_to_insert = held_item.GetID() - if(id_insert(usr, held_item, inserted_modify_id)) - inserted_modify_id = id_to_insert - updateUsrDialog() - if ("inserted_scan_id") - if(inserted_scan_id && !usr.get_active_held_item()) - if(id_eject(usr, inserted_scan_id)) - inserted_scan_id = null - updateUsrDialog() - return - if(usr.get_id_in_hand()) - var/obj/item/held_item = usr.get_active_held_item() - var/obj/item/card/id/id_to_insert = held_item.GetID() - if(id_insert(usr, held_item, inserted_scan_id)) - inserted_scan_id = id_to_insert - updateUsrDialog() - if ("auth") - if ((!( authenticated ) && (inserted_scan_id || issilicon(usr)) || mode)) - if (check_access(inserted_scan_id)) - region_access = list() - head_subordinates = list() - if(ACCESS_CHANGE_IDS in inserted_scan_id.access) - if(target_dept) - head_subordinates = get_all_jobs() - region_access |= target_dept - authenticated = 1 - else - authenticated = 2 - playsound(src, 'sound/blank.ogg', 50, FALSE) - - else - if((ACCESS_HOP in inserted_scan_id.access) && ((target_dept==1) || !target_dept)) - region_access |= 1 - region_access |= 6 - get_subordinates("Head of Personnel") - if((ACCESS_HOS in inserted_scan_id.access) && ((target_dept==2) || !target_dept)) - region_access |= 2 - get_subordinates("Head of Security") - if((ACCESS_CMO in inserted_scan_id.access) && ((target_dept==3) || !target_dept)) - region_access |= 3 - get_subordinates("Chief Medical Officer") - if((ACCESS_RD in inserted_scan_id.access) && ((target_dept==4) || !target_dept)) - region_access |= 4 - get_subordinates("Research Director") - if((ACCESS_CE in inserted_scan_id.access) && ((target_dept==5) || !target_dept)) - region_access |= 5 - get_subordinates("Chief Engineer") - if(region_access) - authenticated = 1 - else if ((!( authenticated ) && issilicon(usr)) && (!inserted_modify_id)) - to_chat(usr, "I can't modify an ID without an ID inserted to modify! Once one is in the modify slot on the computer, you can log in.") - if ("logout") - region_access = null - head_subordinates = null - authenticated = 0 - playsound(src, 'sound/blank.ogg', 50, FALSE) - - if("access") - if(href_list["allowed"]) - if(authenticated) - var/access_type = text2num(href_list["access_target"]) - var/access_allowed = text2num(href_list["allowed"]) - if(access_type in (istype(src, /obj/machinery/computer/card/centcom)?get_all_centcom_access() : get_all_accesses())) - inserted_modify_id.access -= access_type - if(access_allowed == 1) - inserted_modify_id.access += access_type - playsound(src, "terminal_type", 50, FALSE) - if ("assign") - if (authenticated == 2) - var/t1 = href_list["assign_target"] - if(t1 == "Custom") - var/newJob = reject_bad_text(input("Enter a custom job assignment.", "Assignment", inserted_modify_id ? inserted_modify_id.assignment : "Unassigned"), MAX_NAME_LEN) - if(newJob) - t1 = newJob - - else if(t1 == "Unassigned") - inserted_modify_id.access -= get_all_accesses() - - else - var/datum/job/jobdatum - for(var/jobtype in typesof(/datum/job)) - var/datum/job/J = new jobtype - if(ckey(J.title) == ckey(t1)) - jobdatum = J - updateUsrDialog() - break - if(!jobdatum) - to_chat(usr, "No log exists for this job.") - updateUsrDialog() - return - if(inserted_modify_id.registered_account) - inserted_modify_id.registered_account.account_job = jobdatum // this is a terrible idea and people will grief but sure whatever - - inserted_modify_id.access = ( istype(src, /obj/machinery/computer/card/centcom) ? get_centcom_access(t1) : jobdatum.get_access() ) - if (inserted_modify_id) - inserted_modify_id.assignment = t1 - playsound(src, 'sound/blank.ogg', 50, FALSE) - if ("demote") - if((inserted_modify_id.assignment in head_subordinates) || inserted_modify_id.assignment == "Assistant") - inserted_modify_id.assignment = "Unassigned" - playsound(src, 'sound/blank.ogg', 50, FALSE) - else - to_chat(usr, "I are not authorized to demote this position.") - if ("reg") - if (authenticated) - var/t2 = inserted_modify_id - if ((authenticated && inserted_modify_id == t2 && (in_range(src, usr) || issilicon(usr)) && isturf(loc))) - var/newName = reject_bad_name(href_list["reg"]) - if(newName) - inserted_modify_id.registered_name = newName - playsound(src, 'sound/blank.ogg', 50, FALSE) - else - to_chat(usr, "Invalid name entered.") - updateUsrDialog() - return - if ("mode") - mode = text2num(href_list["mode_target"]) - - if("return") - //DISPLAY MAIN MENU - mode = 3; - playsound(src, "terminal_type", 25, FALSE) - - if("make_job_available") - // MAKE ANOTHER JOB POSITION AVAILABLE FOR LATE JOINERS - if(authenticated && !target_dept) - var/edit_job_target = href_list["job"] - var/datum/job/j = SSjob.GetJob(edit_job_target) - if(!j) - updateUsrDialog() - return 0 - if(can_open_job(j) != 1) - updateUsrDialog() - return 0 - if(opened_positions[edit_job_target] >= 0) - GLOB.time_last_changed_position = world.time / 10 - j.total_positions++ - opened_positions[edit_job_target]++ - playsound(src, 'sound/blank.ogg', 50, FALSE) - - if("make_job_unavailable") - // MAKE JOB POSITION UNAVAILABLE FOR LATE JOINERS - if(authenticated && !target_dept) - var/edit_job_target = href_list["job"] - var/datum/job/j = SSjob.GetJob(edit_job_target) - if(!j) - updateUsrDialog() - return 0 - if(can_close_job(j) != 1) - updateUsrDialog() - return 0 - //Allow instant closing without cooldown if a position has been opened before - if(opened_positions[edit_job_target] <= 0) - GLOB.time_last_changed_position = world.time / 10 - j.total_positions-- - opened_positions[edit_job_target]-- - playsound(src, 'sound/blank.ogg', 50, FALSE) - - if ("prioritize_job") - // TOGGLE WHETHER JOB APPEARS AS PRIORITIZED IN THE LOBBY - if(authenticated && !target_dept) - var/priority_target = href_list["job"] - var/datum/job/j = SSjob.GetJob(priority_target) - if(!j) - updateUsrDialog() - return 0 - var/priority = TRUE - if(j in SSjob.prioritized_jobs) - SSjob.prioritized_jobs -= j - priority = FALSE - else if(j.total_positions <= j.current_positions) - to_chat(usr, "[j.title] has had all positions filled. Open up more slots before prioritizing it.") - updateUsrDialog() - return - else - SSjob.prioritized_jobs += j - to_chat(usr, "[j.title] has been successfully [priority ? "prioritized" : "unprioritized"]. Potential employees will notice your request.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - - if ("print") - if (!( printing )) - printing = 1 - sleep(50) - var/obj/item/paper/P = new /obj/item/paper( loc ) - var/t1 = "Crew Manifest:
" - for(var/datum/data/record/t in sortRecord(GLOB.data_core.general)) - t1 += t.fields["name"] + " - " + t.fields["rank"] + "
" - P.info = t1 - P.name = "paper- 'Crew Manifest'" - printing = null - playsound(src, 'sound/blank.ogg', 50, FALSE) - if (inserted_modify_id) - inserted_modify_id.update_label() - updateUsrDialog() - -/obj/machinery/computer/card/proc/get_subordinates(rank) - for(var/datum/job/job in SSjob.occupations) - if(rank in job.department_head) - head_subordinates += job.title - -/obj/machinery/computer/card/centcom - name = "\improper CentCom identification console" - circuit = /obj/item/circuitboard/computer/card/centcom - req_access = list(ACCESS_CENT_CAPTAIN) - -/obj/machinery/computer/card/minor - name = "department management console" - desc = "" - icon_screen = "idminor" - circuit = /obj/item/circuitboard/computer/card/minor - -/obj/machinery/computer/card/minor/Initialize() - . = ..() - var/obj/item/circuitboard/computer/card/minor/typed_circuit = circuit - if(target_dept) - typed_circuit.target_dept = target_dept - else - target_dept = typed_circuit.target_dept - var/list/dept_list = list("general","security","medical","science","engineering") - name = "[dept_list[target_dept]] department console" - -/obj/machinery/computer/card/minor/hos - target_dept = 2 - icon_screen = "idhos" - - light_color = LIGHT_COLOR_RED - -/obj/machinery/computer/card/minor/cmo - target_dept = 3 - icon_screen = "idcmo" - -/obj/machinery/computer/card/minor/rd - target_dept = 4 - icon_screen = "idrd" - - light_color = LIGHT_COLOR_PINK - -/obj/machinery/computer/card/minor/ce - target_dept = 5 - icon_screen = "idce" - - light_color = LIGHT_COLOR_YELLOW - -#undef JOB_ALLOWED -#undef JOB_COOLDOWN -#undef JOB_MAX_POSITIONS -#undef JOB_DENIED diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm deleted file mode 100644 index a11f4afe5e..0000000000 --- a/code/game/machinery/computer/cloning.dm +++ /dev/null @@ -1,627 +0,0 @@ -#define AUTOCLONING_MINIMAL_LEVEL 3 - -/obj/machinery/computer/cloning - name = "cloning console" - desc = "" - icon_screen = "dna" - icon_keyboard = "med_key" - circuit = /obj/item/circuitboard/computer/cloning - req_access = list(ACCESS_GENETICS) //for modifying records - var/obj/machinery/dna_scannernew/scanner //Linked scanner. For scanning. - var/list/pods //Linked cloning pods - var/temp = "Inactive" - var/scantemp_ckey - var/scantemp = "Ready to Scan" - var/menu = 1 //Which menu screen to display - var/list/records = list() - var/datum/data/record/active_record - var/obj/item/disk/data/diskette //Incompatible format to genetics machine - //select which parts of the diskette to load - var/include_se = FALSE //mutations - var/include_ui = FALSE //appearance - var/include_ue = FALSE //blood type, UE, and name - - var/loading = FALSE // Nice loading text - var/autoprocess = FALSE - - light_color = LIGHT_COLOR_BLUE - -/obj/machinery/computer/cloning/Initialize() - . = ..() - updatemodules(TRUE) - -/obj/machinery/computer/cloning/Destroy() - if(pods) - for(var/P in pods) - DetachCloner(P) - pods = null - return ..() - -/obj/machinery/computer/cloning/proc/GetAvailablePod(mind = null) - if(pods) - for(var/P in pods) - var/obj/machinery/clonepod/pod = P - if(pod.occupant && mind && pod.clonemind == mind) - return null - if(pod.is_operational() && !(pod.occupant || pod.mess)) - return pod - -/obj/machinery/computer/cloning/proc/HasEfficientPod() - if(pods) - for(var/P in pods) - var/obj/machinery/clonepod/pod = P - if(pod.is_operational() && pod.efficiency > 5) - return TRUE - -/obj/machinery/computer/cloning/proc/GetAvailableEfficientPod(mind = null) - if(pods) - for(var/P in pods) - var/obj/machinery/clonepod/pod = P - if(pod.occupant && pod.clonemind == mind) - return pod - else if(!. && pod.is_operational() && !(pod.occupant || pod.mess) && pod.efficiency > 5) - . = pod - -/proc/grow_clone_from_record(obj/machinery/clonepod/pod, datum/data/record/R, empty) - return pod.growclone(R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mindref"], R.fields["last_death"], R.fields["blood_type"], R.fields["mrace"], R.fields["features"], R.fields["factions"], R.fields["quirks"], R.fields["bank_account"], R.fields["traumas"], empty) - -/obj/machinery/computer/cloning/process() - if(!(scanner && LAZYLEN(pods) && autoprocess)) - return - - if(scanner.occupant && scanner.scan_level > 2) - scan_occupant(scanner.occupant) - - for(var/datum/data/record/R in records) - var/obj/machinery/clonepod/pod = GetAvailableEfficientPod(R.fields["mindref"]) - - if(!pod) - return - - if(pod.occupant) - break - - var/result = grow_clone_from_record(pod, R) - if(result & CLONING_SUCCESS) - temp = "[R.fields["name"]] => Cloning cycle in progress..." - log_cloning("Cloning of [key_name(R.fields["mindref"])] automatically started via autoprocess - [src] at [AREACOORD(src)]. Pod: [pod] at [AREACOORD(pod)].") - if(result & CLONING_DELETE_RECORD) - records -= R - - -/obj/machinery/computer/cloning/proc/updatemodules(findfirstcloner) - scanner = findscanner() - if(findfirstcloner && !LAZYLEN(pods)) - findcloner() - if(!autoprocess) - STOP_PROCESSING(SSmachines, src) - else - START_PROCESSING(SSmachines, src) - -/obj/machinery/computer/cloning/proc/findscanner() - var/obj/machinery/dna_scannernew/scannerf = null - - // Loop through every direction - for(var/direction in GLOB.cardinals) - - // Try to find a scanner in that direction - scannerf = locate(/obj/machinery/dna_scannernew, get_step(src, direction)) - - // If found and operational, return the scanner - if (!isnull(scannerf) && scannerf.is_operational()) - return scannerf - - // If no scanner was found, it will return null - return null - -/obj/machinery/computer/cloning/proc/findcloner() - var/obj/machinery/clonepod/podf = null - - for(var/direction in GLOB.cardinals) - - podf = locate(/obj/machinery/clonepod, get_step(src, direction)) - if (!isnull(podf) && podf.is_operational()) - AttachCloner(podf) - -/obj/machinery/computer/cloning/proc/AttachCloner(obj/machinery/clonepod/pod) - if(!pod.connected) - pod.connected = src - LAZYADD(pods, pod) - -/obj/machinery/computer/cloning/proc/DetachCloner(obj/machinery/clonepod/pod) - pod.connected = null - LAZYREMOVE(pods, pod) - -/obj/machinery/computer/cloning/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/disk/data)) //INSERT SOME DISKETTES - if (!diskette) - if (!user.transferItemToLoc(W,src)) - return - diskette = W - to_chat(user, "I insert [W].") - playsound(src, 'sound/blank.ogg', 50, FALSE) - updateUsrDialog() - else if(W.tool_behaviour == TOOL_MULTITOOL) - if(!multitool_check_buffer(user, W)) - return - var/obj/item/multitool/P = W - - if(istype(P.buffer, /obj/machinery/clonepod)) - if(get_area(P.buffer) != get_area(src)) - to_chat(user, "-% Cannot link machines across power zones. Buffer cleared %-") - P.buffer = null - return - to_chat(user, "-% Successfully linked [P.buffer] with [src] %-") - var/obj/machinery/clonepod/pod = P.buffer - if(pod.connected) - pod.connected.DetachCloner(pod) - AttachCloner(pod) - else - P.buffer = src - to_chat(user, "-% Successfully stored [REF(P.buffer)] [P.buffer.name] in buffer %-") - return - else - return ..() - -/obj/machinery/computer/cloning/ui_interact(mob/user) - . = ..() - - updatemodules(TRUE) - - var/dat = "" - dat += "Refresh" - - if(scanner && HasEfficientPod() && scanner.scan_level >= AUTOCLONING_MINIMAL_LEVEL) - if(!autoprocess) - dat += "Autoprocess" - else - dat += "Stop autoprocess" - else - dat += "Autoprocess" - dat += "

Cloning Pod Status

" - dat += "
[temp] 
" - switch(menu) - if(1) - // Modules - if (isnull(scanner) || !LAZYLEN(pods)) - dat += "

Modules

" - //dat += "Reload Modules" - if (isnull(scanner)) - dat += "ERROR: No Scanner detected!
" - if (!LAZYLEN(pods)) - dat += "ERROR: No Pod detected
" - - // Scanner - if (!isnull(scanner)) - var/mob/living/scanner_occupant = get_mob_or_brainmob(scanner.occupant) - - dat += "

Scanner Functions

" - - dat += "
" - if(!scanner_occupant) - dat += "Scanner Unoccupied" - else if(loading) - dat += "[scanner_occupant] => Scanning..." - else - if(scanner_occupant.ckey != scantemp_ckey) - scantemp = "Ready to Scan" - scantemp_ckey = scanner_occupant.ckey - dat += "[scanner_occupant] => [scantemp]" - dat += "
" - - if(scanner_occupant) - dat += "Start Scan" - dat += "Body-Only Scan" - dat += "
[scanner.locked ? "Unlock Scanner" : "Lock Scanner"]" - else - dat += "Start Scan" - - // Database - dat += "

Database Functions

" - if (records.len && records.len > 0) - dat += "View Records ([records.len])
" - else - dat += "View Records (0)
" - if (diskette) - dat += "Eject Disk
" - - - - if(2) - dat += "

Current records

" - dat += "<< Back

" - for(var/datum/data/record/R in records) - dat += "

[R.fields["name"]]

Scan ID [R.fields["id"]] View Record" - if(3) - dat += "

Selected Record

" - dat += "<< Back
" - - if (!active_record) - dat += "Record not found." - else - var/body_only = active_record.fields["body_only"] - dat += "

[active_record.fields["name"]][body_only ? " - BODY-ONLY" : ""]

" - dat += "Scan ID [active_record.fields["id"]] \ - [!body_only ? "Clone" : "" ]\ - Empty Clone
" - - var/obj/item/implant/health/H = locate(active_record.fields["imp"]) - - if ((H) && (istype(H))) - dat += "Health Implant Data:
[H.sensehealth()]

" - else - dat += "Unable to locate Health Implant.

" - - dat += "Unique Identifier:
[active_record.fields["UI"]]
" - dat += "Structural Enzymes:
" - for(var/key in active_record.fields["SE"]) - if(key != RACEMUT) - var/val = active_record.fields["SE"][key] - var/alias = GLOB.all_mutations[key].alias - dat +="[alias]: [val]
" - - dat += "

" - - if(diskette && diskette.fields) - dat += "
" - dat += "

Inserted Disk

" - dat += "Contents: " - var/list/L = list() - if(diskette.fields["UI"]) - L += "Unique Identifier" - if(diskette.fields["UE"] && diskette.fields["name"] && diskette.fields["blood_type"]) - L += "Unique Enzymes" - if(diskette.fields["SE"]) - L += "Structural Enzymes" - dat += english_list(L, "Empty", " + ", " + ") - var/can_load = FALSE - var/obj/item/card/id/C = user.get_idcard(TRUE) - if(C) - if(check_access(C)) - can_load = TRUE - if(can_load) - dat += "
Load From Disk" - else - dat += "Cannot Load From Disk: Access Denied" - if(diskette.fields["SE"]) - if(!include_se) - dat += "
Currently Excluding SE" - else - dat += "
Currently Including SE" - if(diskette.fields["UI"]) - if(!include_ui) - dat += "
Currently Excluding UI" - else - dat += "
Currently Including UI" - if(diskette.fields["UE"]) - if(!include_ue) - dat += "
Currently Excluding UE" - else - dat += "
Currently Including UE" - - - dat += "
Save to Disk" - dat += "
" - - dat += "Delete Record" - - if(4) - if (!active_record) - menu = 2 - ui_interact(user) - return - dat += "Please confirm.
" - dat += "Cancel" - - var/datum/browser/popup = new(user, "cloning", "Cloning System Control") - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - popup.open() - -/obj/machinery/computer/cloning/Topic(href, href_list) - if(..()) - return - - if(loading) - return - - if(href_list["task"]) - switch(href_list["task"]) - if("autoprocess") - if(scanner && HasEfficientPod() && scanner.scan_level >= AUTOCLONING_MINIMAL_LEVEL) - autoprocess = TRUE - START_PROCESSING(SSmachines, src) - playsound(src, 'sound/blank.ogg', 50, FALSE) - if("stopautoprocess") - autoprocess = FALSE - STOP_PROCESSING(SSmachines, src) - playsound(src, 'sound/blank.ogg', 50, FALSE) - if("include_se") - include_se = TRUE - if("exclude_se") - include_se = FALSE - if("include_ui") - include_ui = TRUE - if("exclude_ui") - include_ui = FALSE - if("include_ue") - include_ue = TRUE - if("exclude_ue") - include_ue = FALSE - - else if ((href_list["scan"]) && !isnull(scanner) && scanner.is_operational()) - scantemp = "" - var/body_only = href_list["body_only"] - loading = TRUE - updateUsrDialog() - playsound(src, 'sound/blank.ogg', 50, FALSE) - say("Initiating scan...") - - addtimer(CALLBACK(src, PROC_REF(do_scan), usr, body_only), 2 SECONDS) - - //No locking an open scanner. - else if ((href_list["lock"]) && !isnull(scanner) && scanner.is_operational()) - if ((!scanner.locked) && (scanner.occupant)) - scanner.locked = TRUE - playsound(src, 'sound/blank.ogg', 50, FALSE) - else - scanner.locked = FALSE - playsound(src, 'sound/blank.ogg', 50, FALSE) - - else if(href_list["view_rec"]) - playsound(src, "terminal_type", 25, FALSE) - active_record = find_record("id", href_list["view_rec"], records) - if(active_record) - menu = 3 - else - temp = "Record missing." - - else if (href_list["del_rec"]) - if ((!active_record) || (menu < 3)) - return - if (menu == 3) //If we are viewing a record, confirm deletion - var/has_access = FALSE - if(ishuman(usr)) - var/mob/living/carbon/human/user = usr - var/obj/item/card/id/C = user.get_idcard(TRUE) - if(C) - if(check_access(C)) - has_access = TRUE - if(active_record.fields["body_only"]) //Body-only scans are not as important and can be deleted freely - has_access = TRUE - if(has_access) - temp = "Delete record?" - menu = 4 - playsound(src, 'sound/blank.ogg', 50, FALSE) - else - temp = "Access Denied" - menu = 2 - playsound(src, 'sound/blank.ogg', 50, FALSE) - - - else if (menu == 4) - log_cloning("[key_name(usr)] deleted [key_name(active_record.fields["mindref"])]'s cloning records from [src] at [AREACOORD(src)].") - temp = "[active_record.fields["name"]] => Record deleted." - records.Remove(active_record) - active_record = null - playsound(src, 'sound/blank.ogg', 50, FALSE) - menu = 2 - - else if (href_list["disk"]) //Load or eject. - switch(href_list["disk"]) - if("load") - - - if (!diskette || !istype(diskette.fields)) - temp = "Load error." - updateUsrDialog() - playsound(src, 'sound/blank.ogg', 50, FALSE) - return - if (!active_record) - temp = "Record error." - menu = 1 - updateUsrDialog() - playsound(src, 'sound/blank.ogg', 50, FALSE) - return - - if(include_ue) - overwrite_field_if_available(active_record, diskette, "UE") - overwrite_field_if_available(active_record, diskette, "name") - overwrite_field_if_available(active_record, diskette, "blood_type") - if(include_ui) - overwrite_field_if_available(active_record, diskette, "UI") - if(include_se) - overwrite_field_if_available(active_record, diskette, "SE") - - log_cloning("[key_name(usr)] uploaded [key_name(active_record.fields["mindref"])]'s cloning records to [src] at [AREACOORD(src)] via [diskette].") - temp = "Load successful." - playsound(src, 'sound/blank.ogg', 50, FALSE) - - if("eject") - if(diskette) - diskette.forceMove(drop_location()) - diskette = null - playsound(src, 'sound/blank.ogg', 50, FALSE) - if("save") - if(!diskette || diskette.read_only || !active_record || !active_record.fields) - temp = "Save error." - updateUsrDialog() - playsound(src, 'sound/blank.ogg', 50, FALSE) - return - - log_cloning("[key_name(usr)] added [key_name(active_record.fields["mindref"])]'s cloning records to [diskette] via [src] at [AREACOORD(src)].") - diskette.fields = active_record.fields.Copy() - diskette.name = "data disk - '[diskette.fields["name"]]'" - temp = "Save successful." - playsound(src, 'sound/blank.ogg', 50, FALSE) - - else if (href_list["refresh"]) - updateUsrDialog() - playsound(src, "terminal_type", 25, FALSE) - - else if (href_list["clone"]) - var/datum/data/record/C = find_record("id", href_list["clone"], records) - var/empty = href_list["empty"] - //Look for that player! They better be dead! - if(C) - if(C.fields["body_only"] && !empty) - temp = "Cannot initiate regular cloning with body-only scans." - playsound(src, 'sound/blank.ogg', 50, FALSE) - var/obj/machinery/clonepod/pod = GetAvailablePod() - var/success = FALSE - //Can't clone without someone to clone. Or a pod. Or if the pod is busy. Or full of gibs. - if(!LAZYLEN(pods)) - temp = "No Clonepods detected." - playsound(src, 'sound/blank.ogg', 50, FALSE) - else if(!pod) - temp = "No Clonepods available." - playsound(src, 'sound/blank.ogg', 50, FALSE) - else if(!CONFIG_GET(flag/revival_cloning) && !empty) - temp = "Unable to initiate cloning cycle." - playsound(src, 'sound/blank.ogg', 50, FALSE) - else if(pod.occupant) - temp = "Cloning cycle already in progress." - playsound(src, 'sound/blank.ogg', 50, FALSE) - else - var/result = grow_clone_from_record(pod, C, empty) - if(result & CLONING_SUCCESS) - temp = "[C.fields["name"]] => Cloning cycle in progress..." - playsound(src, 'sound/blank.ogg', 50, FALSE) - if(active_record == C) - active_record = null - menu = 1 - success = TRUE - if(!empty) - log_cloning("[key_name(usr)] initiated cloning of [key_name(C.fields["mindref"])] via [src] at [AREACOORD(src)]. Pod: [pod] at [AREACOORD(pod)].") - else - log_cloning("[key_name(usr)] initiated EMPTY cloning of [key_name(C.fields["mindref"])] via [src] at [AREACOORD(src)]. Pod: [pod] at [AREACOORD(pod)].") - if(result & CLONING_DELETE_RECORD) - if(active_record == C) - active_record = null - menu = 1 - records -= C - - if(!success) - temp = "[C.fields["name"]] => Initialisation failure." - playsound(src, 'sound/blank.ogg', 50, FALSE) - - else - temp = "Data corruption." - playsound(src, 'sound/blank.ogg', 50, FALSE) - - else if (href_list["menu"]) - menu = text2num(href_list["menu"]) - playsound(src, "terminal_type", 25, FALSE) - - add_fingerprint(usr) - updateUsrDialog() - return - -/obj/machinery/computer/cloning/proc/do_scan(mob/user, body_only) - scan_occupant(scanner.occupant, user, body_only) - - loading = FALSE - updateUsrDialog() - playsound(src, 'sound/blank.ogg', 50, FALSE) - -/obj/machinery/computer/cloning/proc/scan_occupant(occupant, mob/M, body_only) - var/mob/living/mob_occupant = get_mob_or_brainmob(occupant) - var/datum/dna/dna - var/datum/bank_account/has_bank_account - - // Do not use unless you know what they are. - var/mob/living/carbon/C = mob_occupant - var/mob/living/brain/B = mob_occupant - - if(ishuman(mob_occupant)) - dna = C.has_dna() - var/obj/item/card/id/I = C.get_idcard(TRUE) - if(I) - has_bank_account = I.registered_account - if(isbrain(mob_occupant)) - dna = B.stored_dna - - if(!istype(dna)) - scantemp = "Unable to locate valid genetic data." - playsound(src, 'sound/blank.ogg', 50, FALSE) - return - if(!body_only && (mob_occupant.suiciding || mob_occupant.hellbound)) - scantemp = "Subject's brain is not responding to scanning stimuli." - playsound(src, 'sound/blank.ogg', 50, FALSE) - return - if((HAS_TRAIT(mob_occupant, TRAIT_HUSK)) && (src.scanner.scan_level < 2)) - scantemp = "Subject's body is too damaged to scan properly." - playsound(src, 'sound/blank.ogg', 50, FALSE) - return - if(HAS_TRAIT(mob_occupant, TRAIT_BADDNA)) - scantemp = "Subject's DNA is damaged beyond any hope of recovery." - playsound(src, 'sound/blank.ogg', 50, FALSE) - return - if (!body_only && isnull(mob_occupant.mind)) - scantemp = "Mental interface failure." - playsound(src, 'sound/blank.ogg', 50, FALSE) - return - if(!body_only && SSeconomy.full_ancap) - if(!has_bank_account) - scantemp = "Subject is either missing an ID card with a bank account on it, or does not have an account to begin with. Please ensure the ID card is on the body before attempting to scan." - playsound(src, 'sound/blank.ogg', 50, FALSE) - return - var/datum/data/record/R = new() - if(dna.species) - // We store the instance rather than the path, because some - // species (abductors, slimepeople) store state in their - // species datums - dna.delete_species = FALSE - R.fields["mrace"] = dna.species - else - var/datum/species/rando_race = pick(GLOB.roundstart_races) - R.fields["mrace"] = rando_race.type - - R.fields["name"] = mob_occupant.real_name - R.fields["id"] = copytext(md5(mob_occupant.real_name), 2, 6) - R.fields["UE"] = dna.unique_enzymes - R.fields["UI"] = dna.uni_identity - R.fields["SE"] = dna.mutation_index - R.fields["blood_type"] = dna.blood_type - R.fields["features"] = dna.features - R.fields["factions"] = mob_occupant.faction - R.fields["quirks"] = list() - for(var/V in mob_occupant.roundstart_quirks) - var/datum/quirk/T = V - R.fields["quirks"][T.type] = T.clone_data() - - R.fields["traumas"] = list() - if(ishuman(mob_occupant)) - R.fields["traumas"] = C.get_traumas() - if(isbrain(mob_occupant)) - R.fields["traumas"] = B.get_traumas() - - R.fields["bank_account"] = has_bank_account - R.fields["mindref"] = "[REF(mob_occupant.mind)]" - R.fields["last_death"] = mob_occupant.stat == DEAD ? mob_occupant.mind.last_death : -1 - R.fields["body_only"] = body_only - - if(!body_only) - //Add an implant if needed - var/obj/item/implant/health/imp - for(var/obj/item/implant/health/HI in mob_occupant.implants) - imp = HI - break - if(!imp) - imp = new /obj/item/implant/health(mob_occupant) - imp.implant(mob_occupant) - R.fields["imp"] = "[REF(imp)]" - - var/datum/data/record/old_record = find_record("mindref", REF(mob_occupant.mind), records) - if(body_only) - old_record = find_record("UE", dna.unique_enzymes, records) //Body-only records cannot be identified by mind, so we use the DNA - if(old_record && ((old_record.fields["UI"] != dna.uni_identity) || (!old_record.fields["body_only"]))) //Never overwrite a mind-and-body record if it exists - old_record = null - if(old_record) - records -= old_record - scantemp = "Record updated." - else - scantemp = "Subject successfully scanned." - records += R - log_cloning("[M ? key_name(M) : "Autoprocess"] added the [body_only ? "body-only " : ""]record of [key_name(mob_occupant)] to [src] at [AREACOORD(src)].") - playsound(src, 'sound/blank.ogg', 50) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm deleted file mode 100644 index 742406e3bd..0000000000 --- a/code/game/machinery/computer/communications.dm +++ /dev/null @@ -1,747 +0,0 @@ -// The communications computer -/obj/machinery/computer/communications - name = "communications console" - desc = "" - icon_screen = "comm" - icon_keyboard = "tech_key" - req_access = list(ACCESS_HEADS) - circuit = /obj/item/circuitboard/computer/communications - var/auth_id = "Unknown" //Who is currently logged in? - var/list/datum/comm_message/messages = list() - var/datum/comm_message/currmsg - var/datum/comm_message/aicurrmsg - var/state = STATE_DEFAULT - var/aistate = STATE_DEFAULT - var/message_cooldown = 0 - var/ai_message_cooldown = 0 - var/tmp_alertlevel = 0 - var/const/STATE_DEFAULT = 1 - var/const/STATE_CALLSHUTTLE = 2 - var/const/STATE_CANCELSHUTTLE = 3 - var/const/STATE_MESSAGELIST = 4 - var/const/STATE_VIEWMESSAGE = 5 - var/const/STATE_DELMESSAGE = 6 - var/const/STATE_STATUSDISPLAY = 7 - var/const/STATE_ALERT_LEVEL = 8 - var/const/STATE_CONFIRM_LEVEL = 9 - var/const/STATE_TOGGLE_EMERGENCY = 10 - var/const/STATE_PURCHASE = 11 - - var/stat_msg1 - var/stat_msg2 - - light_color = LIGHT_COLOR_BLUE - -/obj/machinery/computer/communications/proc/checkCCcooldown() - var/obj/item/circuitboard/computer/communications/CM = circuit - if(CM.lastTimeUsed + 600 > world.time) - return FALSE - return TRUE - -/obj/machinery/computer/communications/Initialize() - . = ..() - GLOB.shuttle_caller_list += src - -/obj/machinery/computer/communications/Topic(href, href_list) - if(..()) - return - if(!usr.canUseTopic(src, !issilicon(usr))) - return - if(!is_station_level(z) && !is_reserved_level(z)) //Can only use in transit and on SS13 - to_chat(usr, "Unable to establish a connection: \black You're too far away from the station!") - return - usr.set_machine(src) - - - if(!href_list["operation"]) - return - var/obj/item/circuitboard/computer/communications/CM = circuit - switch(href_list["operation"]) - // main interface - if("main") - state = STATE_DEFAULT - playsound(src, 'sound/blank.ogg', 50, FALSE) - if("login") - var/mob/M = usr - - var/obj/item/card/id/I = M.get_idcard(TRUE) - - if(I && istype(I)) - if(check_access(I)) - authenticated = 1 - auth_id = "[I.registered_name] ([I.assignment])" - if((20 in I.access)) - authenticated = 2 - playsound(src, 'sound/blank.ogg', 50, FALSE) - if(obj_flags & EMAGGED) - authenticated = 2 - auth_id = "Unknown" - to_chat(M, "[src] lets out a quiet alarm as its login is overridden.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - playsound(src, 'sound/blank.ogg', 25, FALSE) - if(prob(25)) - for(var/mob/living/silicon/ai/AI in active_ais()) - SEND_SOUND(AI, sound('sound/blank.ogg', volume = 10)) //Very quiet for balance reasons - if("logout") - authenticated = 0 - playsound(src, 'sound/blank.ogg', 50, FALSE) - - if("swipeidseclevel") - var/mob/M = usr - var/obj/item/card/id/I = M.get_active_held_item() - if (istype(I, /obj/item/pda)) - var/obj/item/pda/pda = I - I = pda.id - if (I && istype(I)) - if(ACCESS_CAPTAIN in I.access) - var/old_level = GLOB.security_level - if(!tmp_alertlevel) - tmp_alertlevel = SEC_LEVEL_GREEN - if(tmp_alertlevel < SEC_LEVEL_GREEN) - tmp_alertlevel = SEC_LEVEL_GREEN - if(tmp_alertlevel > SEC_LEVEL_BLUE) - tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this - set_security_level(tmp_alertlevel) - if(GLOB.security_level != old_level) - to_chat(usr, "Authorization confirmed. Modifying security level.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - //Only notify people if an actual change happened - var/security_level = get_security_level() - log_game("[key_name(usr)] has changed the security level to [security_level] with [src] at [AREACOORD(usr)].") - message_admins("[ADMIN_LOOKUPFLW(usr)] has changed the security level to [security_level] with [src] at [AREACOORD(usr)].") - deadchat_broadcast(" has changed the security level to [security_level] with [src] at [get_area_name(usr, TRUE)].", "[usr.real_name]", usr) - tmp_alertlevel = 0 - else - to_chat(usr, "I are not authorized to do this!") - playsound(src, 'sound/blank.ogg', 50, FALSE) - tmp_alertlevel = 0 - state = STATE_DEFAULT - else - to_chat(usr, "I need to swipe your ID!") - playsound(src, 'sound/blank.ogg', 50, FALSE) - - if("announce") - if(authenticated==2) - playsound(src, 'sound/blank.ogg', 50, FALSE) - make_announcement(usr) - - if("crossserver") - if(authenticated==2) - if(!checkCCcooldown()) - to_chat(usr, "Arrays recycling. Please stand by.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - return - var/input = stripped_multiline_input(usr, "Please choose a message to transmit to allied stations. Please be aware that this process is very expensive, and abuse will lead to... termination.", "Send a message to an allied station.", "") - if(!input || !(usr in view(1,src)) || !checkCCcooldown()) - return - playsound(src, 'sound/blank.ogg', 50, FALSE) - send2otherserver("[station_name()]", input,"Comms_Console") - minor_announce(input, title = "Outgoing message to allied station") - usr.log_talk(input, LOG_SAY, tag="message to the other server") - message_admins("[ADMIN_LOOKUPFLW(usr)] has sent a message to the other server.") - deadchat_broadcast(" has sent an outgoing message to the other station(s).", "[usr.real_name]", usr) - CM.lastTimeUsed = world.time - - if("purchase_menu") - state = STATE_PURCHASE - - if("buyshuttle") - if(authenticated==2) - var/list/shuttles = flatten_list(SSmapping.shuttle_templates) - var/datum/map_template/shuttle/S = locate(href_list["chosen_shuttle"]) in shuttles - if(S && istype(S)) - if(SSshuttle.emergency.mode != SHUTTLE_RECALL && SSshuttle.emergency.mode != SHUTTLE_IDLE) - to_chat(usr, "It's a bit late to buy a new shuttle, don't you think?") - return - if(SSshuttle.shuttle_purchased) - to_chat(usr, "A replacement shuttle has already been purchased.") - else if(!S.prerequisites_met()) - to_chat(usr, "I have not met the requirements for purchasing this shuttle.") - else - var/points_to_check - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) - if(D) - points_to_check = D.account_balance - if(points_to_check >= S.credit_cost) - SSshuttle.shuttle_purchased = TRUE - SSshuttle.unload_preview() - SSshuttle.load_template(S) - SSshuttle.existing_shuttle = SSshuttle.emergency - SSshuttle.action_load(S) - D.adjust_money(-S.credit_cost) - minor_announce("[usr.real_name] has purchased [S.name] for [S.credit_cost] credits." , "Shuttle Purchase") - message_admins("[ADMIN_LOOKUPFLW(usr)] purchased [S.name].") - SSblackbox.record_feedback("text", "shuttle_purchase", 1, "[S.name]") - else - to_chat(usr, "Insufficient credits.") - - if("callshuttle") - state = STATE_DEFAULT - if(authenticated) - state = STATE_CALLSHUTTLE - if("callshuttle2") - if(authenticated) - SSshuttle.requestEvac(usr, href_list["call"]) - if(SSshuttle.emergency.timer) - post_status("shuttle") - state = STATE_DEFAULT - if("cancelshuttle") - state = STATE_DEFAULT - if(authenticated) - state = STATE_CANCELSHUTTLE - if("cancelshuttle2") - if(authenticated) - SSshuttle.cancelEvac(usr) - state = STATE_DEFAULT - if("messagelist") - currmsg = 0 - state = STATE_MESSAGELIST - if("viewmessage") - state = STATE_VIEWMESSAGE - if (!currmsg) - if(href_list["message-num"]) - var/msgnum = text2num(href_list["message-num"]) - currmsg = messages[msgnum] - else - state = STATE_MESSAGELIST - if("delmessage") - state = currmsg ? STATE_DELMESSAGE : STATE_MESSAGELIST - if("delmessage2") - if(authenticated) - if(currmsg) - if(aicurrmsg == currmsg) - aicurrmsg = null - messages -= currmsg - currmsg = null - state = STATE_MESSAGELIST - else - state = STATE_VIEWMESSAGE - if("respond") - var/answer = text2num(href_list["answer"]) - if(!currmsg || !answer || currmsg.possible_answers.len < answer) - state = STATE_MESSAGELIST - else - if(!currmsg.answered) - currmsg.answered = answer - log_game("[key_name(usr)] answered [currmsg.title] comm message. Answer : [currmsg.answered]") - if(currmsg) - currmsg.answer_callback.InvokeAsync() - state = STATE_VIEWMESSAGE - updateDialog() - if("status") - state = STATE_STATUSDISPLAY - if("securitylevel") - tmp_alertlevel = text2num( href_list["newalertlevel"] ) - if(!tmp_alertlevel) - tmp_alertlevel = 0 - state = STATE_CONFIRM_LEVEL - if("changeseclevel") - state = STATE_ALERT_LEVEL - - if("emergencyaccess") - state = STATE_TOGGLE_EMERGENCY - if("enableemergency") - make_maint_all_access() - log_game("[key_name(usr)] enabled emergency maintenance access.") - message_admins("[ADMIN_LOOKUPFLW(usr)] enabled emergency maintenance access.") - deadchat_broadcast(" enabled emergency maintenance access at [get_area_name(usr, TRUE)].", "[usr.real_name]", usr) - state = STATE_DEFAULT - if("disableemergency") - revoke_maint_all_access() - log_game("[key_name(usr)] disabled emergency maintenance access.") - message_admins("[ADMIN_LOOKUPFLW(usr)] disabled emergency maintenance access.") - deadchat_broadcast(" disabled emergency maintenance access at [get_area_name(usr, TRUE)].", "[usr.real_name]", usr) - state = STATE_DEFAULT - - // Status display stuff - if("setstat") - playsound(src, "terminal_type", 50, FALSE) - switch(href_list["statdisp"]) - if("message") - post_status("message", stat_msg1, stat_msg2) - if("alert") - post_status("alert", href_list["alert"]) - else - post_status(href_list["statdisp"]) - - if("setmsg1") - stat_msg1 = reject_bad_text(input("Line 1", "Enter Message Text", stat_msg1) as text|null, 40) - updateDialog() - if("setmsg2") - stat_msg2 = reject_bad_text(input("Line 2", "Enter Message Text", stat_msg2) as text|null, 40) - updateDialog() - - // OMG CENTCOM LETTERHEAD - if("MessageCentCom") - if(authenticated) - if(!checkCCcooldown()) - to_chat(usr, "Arrays recycling. Please stand by.") - return - var/input = stripped_input(usr, "Please choose a message to transmit to CentCom via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "Send a message to CentCom.", "") - if(!input || !(usr in view(1,src)) || !checkCCcooldown()) - return - playsound(src, 'sound/blank.ogg', 50, FALSE) - CentCom_announce(input, usr) - to_chat(usr, "Message transmitted to Central Command.") - usr.log_talk(input, LOG_SAY, tag="CentCom announcement") - deadchat_broadcast(" has messaged CentCom, \"[input]\" at [get_area_name(usr, TRUE)].", "[usr.real_name]", usr) - CM.lastTimeUsed = world.time - - // OMG SYNDICATE ...LETTERHEAD - if("MessageSyndicate") - if((authenticated) && (obj_flags & EMAGGED)) - if(!checkCCcooldown()) - to_chat(usr, "Arrays recycling. Please stand by.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - return - var/input = stripped_input(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING COORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "Send a message to /??????/.", "") - if(!input || !(usr in view(1,src)) || !checkCCcooldown()) - return - playsound(src, 'sound/blank.ogg', 50, FALSE) - Syndicate_announce(input, usr) - to_chat(usr, "SYSERR @l(19833)of(transmit.dm): !@$ MESSAGE TRANSMITTED TO SYNDICATE COMMAND.") - usr.log_talk(input, LOG_SAY, tag="Syndicate announcement") - deadchat_broadcast(" has messaged the Syndicate, \"[input]\" at [get_area_name(usr, TRUE)].", "[usr.real_name]", usr) - CM.lastTimeUsed = world.time - - if("RestoreBackup") - to_chat(usr, "Backup routing data restored!") - playsound(src, 'sound/blank.ogg', 50, FALSE) - obj_flags &= ~EMAGGED - updateDialog() - - if("nukerequest") //When there's no other way - if(authenticated==2) - if(!checkCCcooldown()) - to_chat(usr, "Arrays recycling. Please stand by.") - return - var/input = stripped_input(usr, "Please enter the reason for requesting the nuclear self-destruct codes. Misuse of the nuclear request system will not be tolerated under any circumstances. Transmission does not guarantee a response.", "Self Destruct Code Request.","") - if(!input || !(usr in view(1,src)) || !checkCCcooldown()) - return - Nuke_request(input, usr) - to_chat(usr, "Request sent.") - usr.log_message("has requested the nuclear codes from CentCom with reason \"[input]\"", LOG_SAY) - priority_announce("The codes for the on-station nuclear self-destruct have been requested by [usr]. Confirmation or denial of this request will be sent shortly.", "Nuclear Self Destruct Codes Requested",'sound/blank.ogg') - CM.lastTimeUsed = world.time - - - // AI interface - if("ai-main") - aicurrmsg = null - aistate = STATE_DEFAULT - if("ai-callshuttle") - aistate = STATE_CALLSHUTTLE - if("ai-callshuttle2") - SSshuttle.requestEvac(usr, href_list["call"]) - aistate = STATE_DEFAULT - if("ai-messagelist") - aicurrmsg = null - aistate = STATE_MESSAGELIST - if("ai-viewmessage") - aistate = STATE_VIEWMESSAGE - if (!aicurrmsg) - if(href_list["message-num"]) - var/msgnum = text2num(href_list["message-num"]) - aicurrmsg = messages[msgnum] - else - aistate = STATE_MESSAGELIST - if("ai-delmessage") - aistate = aicurrmsg ? STATE_DELMESSAGE : STATE_MESSAGELIST - if("ai-delmessage2") - if(aicurrmsg) - if(currmsg == aicurrmsg) - currmsg = null - messages -= aicurrmsg - aicurrmsg = null - aistate = STATE_MESSAGELIST - if("ai-respond") - var/answer = text2num(href_list["answer"]) - if(!aicurrmsg || !answer || aicurrmsg.possible_answers.len < answer) - aistate = STATE_MESSAGELIST - else - if(!aicurrmsg.answered) - aicurrmsg.answered = answer - log_game("[key_name(usr)] answered [aicurrmsg.title] comm message. Answer : [aicurrmsg.answered]") - if(aicurrmsg.answer_callback) - aicurrmsg.answer_callback.InvokeAsync() - aistate = STATE_VIEWMESSAGE - if("ai-status") - aistate = STATE_STATUSDISPLAY - if("ai-announce") - make_announcement(usr, 1) - if("ai-securitylevel") - tmp_alertlevel = text2num( href_list["newalertlevel"] ) - if(!tmp_alertlevel) - tmp_alertlevel = 0 - var/old_level = GLOB.security_level - if(!tmp_alertlevel) - tmp_alertlevel = SEC_LEVEL_GREEN - if(tmp_alertlevel < SEC_LEVEL_GREEN) - tmp_alertlevel = SEC_LEVEL_GREEN - if(tmp_alertlevel > SEC_LEVEL_BLUE) - tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this - set_security_level(tmp_alertlevel) - if(GLOB.security_level != old_level) - //Only notify people if an actual change happened - var/security_level = get_security_level() - log_game("[key_name(usr)] has changed the security level to [security_level] from [src] at [AREACOORD(usr)].") - message_admins("[ADMIN_LOOKUPFLW(usr)] has changed the security level to [security_level] from [src] at [AREACOORD(usr)].") - deadchat_broadcast(" has changed the security level to [security_level] from [src] at [get_area_name(usr, TRUE)].", "[usr.real_name]", usr) - tmp_alertlevel = 0 - aistate = STATE_DEFAULT - if("ai-changeseclevel") - aistate = STATE_ALERT_LEVEL - if("ai-emergencyaccess") - aistate = STATE_TOGGLE_EMERGENCY - if("ai-enableemergency") - make_maint_all_access() - log_game("[key_name(usr)] enabled emergency maintenance access.") - message_admins("[ADMIN_LOOKUPFLW(usr)] enabled emergency maintenance access.") - deadchat_broadcast(" enabled emergency maintenance access.", "[usr.real_name]", usr) - aistate = STATE_DEFAULT - if("ai-disableemergency") - revoke_maint_all_access() - log_game("[key_name(usr)] disabled emergency maintenance access.") - message_admins("[ADMIN_LOOKUPFLW(usr)] disabled emergency maintenance access.") - deadchat_broadcast(" disabled emergency maintenance access.", "[usr.real_name]", usr) - aistate = STATE_DEFAULT - - updateUsrDialog() - -/obj/machinery/computer/communications/attackby(obj/I, mob/user, params) - if(istype(I, /obj/item/card/id)) - attack_hand(user) - else - return ..() - -/obj/machinery/computer/communications/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - obj_flags |= EMAGGED - if(authenticated == 1) - authenticated = 2 - to_chat(user, "I scramble the communication routing circuits!") - playsound(src, 'sound/blank.ogg', 50, FALSE) - -/obj/machinery/computer/communications/ui_interact(mob/user) - . = ..() - if (z > 6) - to_chat(user, "Unable to establish a connection: \black You're too far away from the station!") - return - - var/dat = "" - if(SSshuttle.emergency.mode == SHUTTLE_CALL) - var/timeleft = SSshuttle.emergency.timeLeft() - dat += "Emergency shuttle\n
\nETA: [timeleft / 60 % 60]:[add_zero(num2text(timeleft % 60), 2)]" - - - var/datum/browser/popup = new(user, "communications", "Communications Console", 400, 500) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - - if(issilicon(user)) - var/dat2 = interact_ai(user) // give the AI a different interact proc to limit its access - if(dat2) - dat += dat2 - popup.set_content(dat) - popup.open() - return - - switch(state) - if(STATE_DEFAULT) - if (authenticated) - if(SSshuttle.emergencyCallAmount) - if(SSshuttle.emergencyLastCallLoc) - dat += "Most recent shuttle call/recall traced to: [format_text(SSshuttle.emergencyLastCallLoc.name)]
" - else - dat += "Unable to trace most recent shuttle call/recall signal.
" - dat += "Logged in as: [auth_id]" - dat += "
" - dat += "
\[ Log Out \]
" - dat += "
General Functions" - dat += "
\[ Message List \]" - switch(SSshuttle.emergency.mode) - if(SHUTTLE_IDLE, SHUTTLE_RECALL) - dat += "
\[ Call Emergency Shuttle \]" - else - dat += "
\[ Cancel Shuttle Call \]" - - dat += "
\[ Set Status Display \]" - if (authenticated==2) - dat += "

Captain Functions" - dat += "
\[ Make a Captain's Announcement \]" - var/cross_servers_count = length(CONFIG_GET(keyed_list/cross_server)) - if(cross_servers_count) - dat += "
\[ Send a message to [cross_servers_count == 1 ? "an " : ""]allied station[cross_servers_count > 1 ? "s" : ""] \]" - if(SSmapping.config.allow_custom_shuttles) - dat += "
\[ Purchase Shuttle \]" - dat += "
\[ Change Alert Level \]" - dat += "
\[ Emergency Maintenance Access \]" - dat += "
\[ Request Nuclear Authentication Codes \]" - if(!(obj_flags & EMAGGED)) - dat += "
\[ Send Message to CentCom \]" - else - dat += "
\[ Send Message to \[UNKNOWN\] \]" - dat += "
\[ Restore Backup Routing Data \]" - else - dat += "
\[ Log In \]" - if(STATE_CALLSHUTTLE) - dat += get_call_shuttle_form() - playsound(src, 'sound/blank.ogg', 50, FALSE) - if(STATE_CANCELSHUTTLE) - dat += get_cancel_shuttle_form() - playsound(src, 'sound/blank.ogg', 50, FALSE) - if(STATE_MESSAGELIST) - dat += "Messages:" - for(var/i in 1 to messages.len) - var/datum/comm_message/M = messages[i] - dat += "
[M.title]" - playsound(src, 'sound/blank.ogg', 50, FALSE) - if(STATE_VIEWMESSAGE) - if (currmsg) - dat += "[currmsg.title]

[currmsg.content]" - if(!currmsg.answered && currmsg.possible_answers.len) - for(var/i in 1 to currmsg.possible_answers.len) - var/answer = currmsg.possible_answers[i] - dat += "
\[ Answer : [answer] \]" - else if(currmsg.answered) - var/answered = currmsg.possible_answers[currmsg.answered] - dat += "
Archived Answer : [answered]" - dat += "

\[ Delete \]" - else - aistate = STATE_MESSAGELIST - attack_hand(user) - return - if(STATE_DELMESSAGE) - if (currmsg) - dat += "Are you sure you want to delete this message? \[ OK | Cancel \]" - else - state = STATE_MESSAGELIST - attack_hand(user) - return - if(STATE_STATUSDISPLAY) - dat += "Set Status Displays
" - dat += "\[ Clear \]
" - dat += "\[ Shuttle ETA \]
" - dat += "\[ Message \]" - dat += "
" - dat += "\[ Alert: None |" - dat += " Red Alert |" - dat += " Lockdown |" - dat += " Biohazard \]

" - playsound(src, 'sound/blank.ogg', 50, FALSE) - if(STATE_ALERT_LEVEL) - dat += "Current alert level: [get_security_level()]
" - if(GLOB.security_level == SEC_LEVEL_DELTA) - dat += "The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate." - else - dat += "Blue
" - dat += "Green" - if(STATE_CONFIRM_LEVEL) - dat += "Current alert level: [get_security_level()]
" - dat += "Confirm the change to: [num2seclevel(tmp_alertlevel)]
" - dat += "Swipe ID to confirm change.
" - if(STATE_TOGGLE_EMERGENCY) - playsound(src, 'sound/blank.ogg', 50, FALSE) - if(GLOB.emergency_access == 1) - dat += "Emergency Maintenance Access is currently ENABLED" - dat += "
Restore maintenance access restrictions?
\[ OK | Cancel \]" - else - dat += "Emergency Maintenance Access is currently DISABLED" - dat += "
Lift access restrictions on maintenance and external airlocks?
\[ OK | Cancel \]" - - if(STATE_PURCHASE) - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) - dat += "Budget: [D.account_balance] Credits.
" - dat += "
" - dat += "Caution: Purchasing dangerous shuttles may lead to mutiny and/or death.
" - dat += "
" - for(var/shuttle_id in SSmapping.shuttle_templates) - var/datum/map_template/shuttle/S = SSmapping.shuttle_templates[shuttle_id] - if(S.can_be_bought && S.credit_cost < INFINITY) - dat += "[S.name] | [S.credit_cost] Credits
" - dat += "[S.description]
" - if(S.prerequisites) - dat += "Prerequisites: [S.prerequisites]
" - dat += "(Purchase)

" - - dat += "

\[ [(state != STATE_DEFAULT) ? "Main Menu | " : ""]Close \]" - - popup.set_content(dat) - popup.open() - -/obj/machinery/computer/communications/proc/get_javascript_header(form_id) - var/dat = {""} - return dat - -/obj/machinery/computer/communications/proc/get_call_shuttle_form(ai_interface = 0) - var/form_id = "callshuttle" - var/dat = get_javascript_header(form_id) - dat += "
" - dat += "" - dat += "" - dat += "Nature of emergency:
" - dat += "
Are you sure you want to call the shuttle? \[ Call \]" - return dat - -/obj/machinery/computer/communications/proc/get_cancel_shuttle_form() - var/form_id = "cancelshuttle" - var/dat = get_javascript_header(form_id) - dat += "" - dat += "" - dat += "" - - dat += "
Are you sure you want to cancel the shuttle? \[ Cancel \]" - return dat - -/obj/machinery/computer/communications/proc/interact_ai(mob/living/silicon/ai/user) - var/dat = "" - switch(aistate) - if(STATE_DEFAULT) - if(SSshuttle.emergencyCallAmount) - if(SSshuttle.emergencyLastCallLoc) - dat += "Latest emergency signal trace attempt successful.
Last signal origin: [format_text(SSshuttle.emergencyLastCallLoc.name)].
" - else - dat += "Latest emergency signal trace attempt failed.
" - if(authenticated) - dat += "Current login: [auth_id]" - else - dat += "Current login: None" - dat += "

General Functions" - dat += "
\[ Message List \]" - if(SSshuttle.emergency.mode == SHUTTLE_IDLE) - dat += "
\[ Call Emergency Shuttle \]" - dat += "
\[ Set Status Display \]" - dat += "

Special Functions" - dat += "
\[ Make an Announcement \]" - dat += "
\[ Change Alert Level \]" - dat += "
\[ Emergency Maintenance Access \]" - if(STATE_CALLSHUTTLE) - dat += get_call_shuttle_form(1) - if(STATE_MESSAGELIST) - dat += "Messages:" - for(var/i in 1 to messages.len) - var/datum/comm_message/M = messages[i] - dat += "
[M.title]" - if(STATE_VIEWMESSAGE) - if (aicurrmsg) - dat += "[aicurrmsg.title]

[aicurrmsg.content]" - if(!aicurrmsg.answered && aicurrmsg.possible_answers.len) - for(var/i in 1 to aicurrmsg.possible_answers.len) - var/answer = aicurrmsg.possible_answers[i] - dat += "
\[ Answer : [answer] \]" - else if(aicurrmsg.answered) - var/answered = aicurrmsg.possible_answers[aicurrmsg.answered] - dat += "
Archived Answer : [answered]" - dat += "

\[ Delete \]" - else - aistate = STATE_MESSAGELIST - attack_hand(user) - return null - if(STATE_DELMESSAGE) - if(aicurrmsg) - dat += "Are you sure you want to delete this message? \[ OK | Cancel \]" - else - aistate = STATE_MESSAGELIST - attack_hand(user) - return - - if(STATE_STATUSDISPLAY) - dat += "Set Status Displays
" - dat += "\[ Clear \]
" - dat += "\[ Shuttle ETA \]
" - dat += "\[ Message \]" - dat += "
" - dat += "\[ Alert: None |" - dat += " Red Alert |" - dat += " Lockdown |" - dat += " Biohazard \]

" - - if(STATE_ALERT_LEVEL) - dat += "Current alert level: [get_security_level()]
" - if(GLOB.security_level == SEC_LEVEL_DELTA) - dat += "The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate." - else - dat += "Blue
" - dat += "Green" - - if(STATE_TOGGLE_EMERGENCY) - if(GLOB.emergency_access == 1) - dat += "Emergency Maintenance Access is currently ENABLED" - dat += "
Restore maintenance access restrictions?
\[ OK | Cancel \]" - else - dat += "Emergency Maintenance Access is currently DISABLED" - dat += "
Lift access restrictions on maintenance and external airlocks?
\[ OK | Cancel \]" - - dat += "

\[ [(aistate != STATE_DEFAULT) ? "Main Menu | " : ""]Close \]" - return dat - -/obj/machinery/computer/communications/proc/make_announcement(mob/living/user, is_silicon) - if(!SScommunications.can_announce(user, is_silicon)) - to_chat(user, "Intercomms recharging. Please stand by.") - return - var/input = stripped_input(user, "Please choose a message to announce to the station crew.", "What?") - if(!input || !user.canUseTopic(src, !issilicon(usr))) - return - SScommunications.make_announcement(user, is_silicon, input) - deadchat_broadcast(" made a priority announcement from [get_area_name(usr, TRUE)].", "[user.real_name]", user) - -/obj/machinery/computer/communications/proc/post_status(command, data1, data2) - - var/datum/radio_frequency/frequency = SSradio.return_frequency(FREQ_STATUS_DISPLAYS) - - if(!frequency) - return - - var/datum/signal/status_signal = new(list("command" = command)) - switch(command) - if("message") - status_signal.data["msg1"] = data1 - status_signal.data["msg2"] = data2 - if("alert") - status_signal.data["picture_state"] = data1 - - frequency.post_signal(src, status_signal) - - -/obj/machinery/computer/communications/Destroy() - GLOB.shuttle_caller_list -= src - SSshuttle.autoEvac() - return ..() - -/obj/machinery/computer/communications/proc/overrideCooldown() - var/obj/item/circuitboard/computer/communications/CM = circuit - CM.lastTimeUsed = 0 - -/obj/machinery/computer/communications/proc/add_message(datum/comm_message/new_message) - messages += new_message - -/datum/comm_message - var/title - var/content - var/list/possible_answers = list() - var/answered - var/datum/callback/answer_callback - -/datum/comm_message/New(new_title,new_content,new_possible_answers) - ..() - if(new_title) - title = new_title - if(new_content) - content = new_content - if(new_possible_answers) - possible_answers = new_possible_answers diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm deleted file mode 100644 index 2524745428..0000000000 --- a/code/game/machinery/computer/crew.dm +++ /dev/null @@ -1,196 +0,0 @@ -#define SENSORS_UPDATE_PERIOD 100 //How often the sensor data updates. - -/obj/machinery/computer/crew - name = "crew monitoring console" - desc = "" - icon_screen = "crew" - icon_keyboard = "med_key" - use_power = IDLE_POWER_USE - idle_power_usage = 250 - active_power_usage = 500 - circuit = /obj/item/circuitboard/computer/crew - - light_color = LIGHT_COLOR_BLUE - -/obj/machinery/computer/crew/syndie - icon_keyboard = "syndie_key" - -/obj/machinery/computer/crew/interact(mob/user) - GLOB.crewmonitor.show(user,src) - -GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) - -/datum/crewmonitor - var/list/ui_sources = list() //List of user -> ui source - var/list/jobs - var/list/data_by_z = list() - var/list/last_update = list() - -/datum/crewmonitor/New() - . = ..() - - var/list/jobs = new/list() - jobs["Captain"] = 00 - jobs["Head of Personnel"] = 50 - jobs["Head of Security"] = 10 - jobs["Warden"] = 11 - jobs["Security Officer"] = 12 - jobs["Detective"] = 13 - jobs["Chief Medical Officer"] = 20 - jobs["Chemist"] = 21 - jobs["Geneticist"] = 22 - jobs["Virologist"] = 23 - jobs["Medical Doctor"] = 24 - jobs["Research Director"] = 30 - jobs["Scientist"] = 31 - jobs["Roboticist"] = 32 - jobs["Chief Engineer"] = 40 - jobs["Station Engineer"] = 41 - jobs["Atmospheric Technician"] = 42 - jobs["Quartermaster"] = 51 - jobs["Shaft Miner"] = 52 - jobs["Cargo Technician"] = 53 - jobs["Bartender"] = 61 - jobs["Cook"] = 62 - jobs["Botanist"] = 63 - jobs["Curator"] = 64 - jobs["Chaplain"] = 65 - jobs["Clown"] = 66 - jobs["Mime"] = 67 - jobs["Janitor"] = 68 - jobs["Lawyer"] = 69 - jobs["Admiral"] = 200 - jobs["CentCom Commander"] = 210 - jobs["Custodian"] = 211 - jobs["Medical Officer"] = 212 - jobs["Research Officer"] = 213 - jobs["Emergency Response Team Commander"] = 220 - jobs["Security Response Officer"] = 221 - jobs["Engineer Response Officer"] = 222 - jobs["Medical Response Officer"] = 223 - jobs["Assistant"] = 999 //Unknowns/custom jobs should appear after civilians, and before assistants - - src.jobs = jobs - -/datum/crewmonitor/Destroy() - return ..() - -/datum/crewmonitor/ui_interact(mob/user, ui_key = "crew", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if (!ui) - ui = new(user, src, ui_key, "crew", "crew monitor", 800, 600 , master_ui, state) - ui.open() - -/datum/crewmonitor/proc/show(mob/M, source) - ui_sources[M] = source - ui_interact(M) - -/datum/crewmonitor/ui_host(mob/user) - return ui_sources[user] - -/datum/crewmonitor/ui_data(mob/user) - var/z = user.z - if(!z) - var/turf/T = get_turf(user) - z = T.z - var/list/zdata = update_data(z) - . = list() - .["sensors"] = zdata - .["link_allowed"] = isAI(user) - -/datum/crewmonitor/proc/update_data(z) - if(data_by_z["[z]"] && last_update["[z]"] && world.time <= last_update["[z]"] + SENSORS_UPDATE_PERIOD) - return data_by_z["[z]"] - - var/list/results = list() - var/obj/item/clothing/under/U - var/obj/item/card/id/I - var/turf/pos - var/ijob - var/name - var/assignment - var/oxydam - var/toxdam - var/burndam - var/brutedam - var/area - var/pos_x - var/pos_y - var/life_status - - for(var/i in GLOB.human_list) - var/mob/living/carbon/human/H = i - var/nanite_sensors = FALSE - if(H in SSnanites.nanite_monitored_mobs) - nanite_sensors = TRUE - // Check if their z-level is correct and if they are wearing a uniform. - // Accept H.z==0 as well in case the mob is inside an object. - if ((H.z == 0 || H.z == z) && (istype(H.wear_pants, /obj/item/clothing/under) || nanite_sensors)) - U = H.wear_pants - - // Are the suit sensors on? - if (nanite_sensors || ((U.has_sensor > 0) && U.sensor_mode)) - pos = H.z == 0 || (nanite_sensors || U.sensor_mode == SENSOR_COORDS) ? get_turf(H) : null - - // Special case: If the mob is inside an object confirm the z-level on turf level. - if (H.z == 0 && (!pos || pos.z != z)) - continue - - I = H.wear_ring ? H.wear_ring.GetID() : null - - if (I) - name = I.registered_name - assignment = I.assignment - ijob = jobs[I.assignment] - else - name = "Unknown" - assignment = "" - ijob = 80 - - if (nanite_sensors || U.sensor_mode >= SENSOR_LIVING) - life_status = (!H.stat ? TRUE : FALSE) - else - life_status = null - - if (nanite_sensors || U.sensor_mode >= SENSOR_VITALS) - oxydam = round(H.getOxyLoss(),1) - toxdam = round(H.getToxLoss(),1) - burndam = round(H.getFireLoss(),1) - brutedam = round(H.getBruteLoss(),1) - else - oxydam = null - toxdam = null - burndam = null - brutedam = null - - if (nanite_sensors || U.sensor_mode >= SENSOR_COORDS) - if (!pos) - pos = get_turf(H) - area = get_area_name(H, TRUE) - pos_x = pos.x - pos_y = pos.y - else - area = null - pos_x = null - pos_y = null - - results[++results.len] = list("name" = name, "assignment" = assignment, "ijob" = ijob, "life_status" = life_status, "oxydam" = oxydam, "toxdam" = toxdam, "burndam" = burndam, "brutedam" = brutedam, "area" = area, "pos_x" = pos_x, "pos_y" = pos_y, "can_track" = H.can_track(null)) - - data_by_z["[z]"] = sortTim(results,/proc/sensor_compare) - last_update["[z]"] = world.time - - return results - -/proc/sensor_compare(list/a,list/b) - return a["ijob"] - b["ijob"] - -/datum/crewmonitor/ui_act(action,params) - var/mob/living/silicon/ai/AI = usr - if(!istype(AI)) - return - switch (action) - if ("select_person") - AI.ai_camera_track(params["name"]) - -#undef SENSORS_UPDATE_PERIOD diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm deleted file mode 100644 index cd84ba52e8..0000000000 --- a/code/game/machinery/computer/dna_console.dm +++ /dev/null @@ -1,1056 +0,0 @@ -#define INJECTOR_TIMEOUT 100 -#define NUMBER_OF_BUFFERS 3 -#define SCRAMBLE_TIMEOUT 600 -#define JOKER_TIMEOUT 12000 //20 minutes -#define JOKER_UPGRADE 3000 - -#define RADIATION_STRENGTH_MAX 15 -#define RADIATION_STRENGTH_MULTIPLIER 1 //larger has more range - -#define RADIATION_DURATION_MAX 30 -#define RADIATION_ACCURACY_MULTIPLIER 3 //larger is less accurate - - -#define RADIATION_IRRADIATION_MULTIPLIER 1 //multiplier for how much radiation a test subject receives - -#define SCANNER_ACTION_SE 1 -#define SCANNER_ACTION_UI 2 -#define SCANNER_ACTION_UE 3 -#define SCANNER_ACTION_MIXED 4 - -/obj/machinery/computer/scan_consolenew - name = "\improper DNA scanner access console" - desc = "" - icon_screen = "dna" - icon_keyboard = "med_key" - density = TRUE - circuit = /obj/item/circuitboard/computer/scan_consolenew - - use_power = IDLE_POWER_USE - idle_power_usage = 10 - active_power_usage = 400 - light_color = LIGHT_COLOR_BLUE - - var/datum/techweb/stored_research - var/max_storage = 6 - var/combine - var/radduration = 2 - var/radstrength = 1 - var/max_chromosomes = 6 - ///Amount of mutations we can store - var/list/buffer[NUMBER_OF_BUFFERS] - ///mutations we have stored - var/list/stored_mutations = list() - ///chromosomes we have stored - var/list/stored_chromosomes = list() - ///combinations of injectors for the 'injector selection'. format is list("Elsa" = list(Cryokinesis, Geladikinesis), "The Hulk" = list(Hulk, Gigantism), etc) Glowy and the gang being an initialized datum - var/list/injector_selection = list() - ///max amount of selections you can make - var/max_injector_selections = 2 - ///hard-cap on the advanced dna injector - var/max_injector_mutations = 10 - ///the max instability of the advanced injector. - var/max_injector_instability = 50 - - var/injectorready = 0 //world timer cooldown var - var/jokerready = 0 - var/scrambleready = 0 - var/current_screen = "mainmenu" - var/current_mutation //what block are we inspecting? only used when screen = "info" - var/current_storage //what storage block are we looking at? - var/obj/machinery/dna_scannernew/connected = null - var/obj/item/disk/data/diskette = null - var/list/delayed_action = null - -/obj/machinery/computer/scan_consolenew/attackby(obj/item/I, mob/user, params) - if (istype(I, /obj/item/disk/data)) //INSERT SOME DISKETTES - if (!user.transferItemToLoc(I,src)) - return - if(diskette) - diskette.forceMove(drop_location()) - diskette = null - diskette = I - to_chat(user, "I insert [I].") - updateUsrDialog() - return - if (istype(I, /obj/item/chromosome)) - if(LAZYLEN(stored_chromosomes) < max_chromosomes) - I.forceMove(src) - stored_chromosomes += I - to_chat(user, "I insert [I].") - else - to_chat(user, "I cannot store any more chromosomes!") - return - if(istype(I, /obj/item/dnainjector/activator)) - var/obj/item/dnainjector/activator/A = I - if(A.used) - to_chat(user,"Recycled [I].") - if(A.research) - var/c_typepath = generate_chromosome() - var/obj/item/chromosome/CM = new c_typepath (drop_location()) - to_chat(user,"Recycled [I].") - if((LAZYLEN(stored_chromosomes) < max_chromosomes) && prob(60)) - CM.forceMove(src) - stored_chromosomes += CM - to_chat(user,"[capitalize(CM.name)] added to storage.") - qdel(I) - return - - else - return ..() - -/obj/machinery/computer/scan_consolenew/Initialize() - . = ..() - for(var/direction in GLOB.cardinals) - connected = locate(/obj/machinery/dna_scannernew, get_step(src, direction)) - if(!isnull(connected)) - break - injectorready = world.time + INJECTOR_TIMEOUT - scrambleready = world.time + SCRAMBLE_TIMEOUT - jokerready = world.time + JOKER_TIMEOUT - - stored_research = SSresearch.science_tech - -/obj/machinery/computer/scan_consolenew/examine(mob/user) - . = ..() - if(jokerready < world.time) - . += "JOKER algorithm available." - else - . += "JOKER algorithm available in about [round(0.00166666667 * (jokerready - world.time))] minutes." - -/obj/machinery/computer/scan_consolenew/ui_interact(mob/user, last_change) - . = ..() - if(!user) - return - var/datum/browser/popup = new(user, "scannernew", "DNA Modifier Console", 800, 630) // Set up the popup browser window - if(user.client) - return -// var/datum/asset/simple/assets = get_asset_datum(/datum/asset/simple/genetics) -// assets.send(user.client) - if(!(in_range(src, user) || issilicon(user))) - popup.close() - return -// popup.add_stylesheet("scannernew", 'html/browser/scannernew.css') - - var/mob/living/carbon/viable_occupant - var/list/occupant_status = list("
Subject Status:
") - var/scanner_status - var/list/temp_html = list() - if(connected && connected.is_operational()) - if(connected.occupant) //set occupant_status message - viable_occupant = connected.occupant - if(viable_occupant.has_dna() && !HAS_TRAIT(viable_occupant, TRAIT_RADIMMUNE) && !HAS_TRAIT(viable_occupant, TRAIT_BADDNA) || (connected.scan_level == 3)) //occupant is viable for dna modification - occupant_status += "[viable_occupant.name] => " - switch(viable_occupant.stat) - if(CONSCIOUS) - occupant_status += "Conscious" - if(UNCONSCIOUS) - occupant_status += "Unconscious" - else - occupant_status += "DEAD" - occupant_status += "
" - occupant_status += "
Health:
[viable_occupant.health] %
" - occupant_status += "
Radiation Level:
[viable_occupant.radiation/(RAD_MOB_SAFE/100)] %
" - occupant_status += "
Unique Enzymes :
[viable_occupant.dna.unique_enzymes]
" - occupant_status += "
Last Operation:
[last_change ? last_change : "----"]
" - else - viable_occupant = null - occupant_status += "Invalid DNA structure" - else - occupant_status += "No subject detected" - - if(connected.state_open) - scanner_status = "Open" - else - scanner_status = "Closed" - if(connected.locked) - scanner_status += "(Locked)" - else - scanner_status += "(Unlocked)" - - - else - occupant_status += "----" - scanner_status += "Error: No scanner detected" - - var/list/status = list("
") - status += "
Scanner:
[scanner_status]
" - status += occupant_status - - - status += "

Radiation Emitter Status

" - var/stddev = radstrength*RADIATION_STRENGTH_MULTIPLIER - status += "
Output Level:
[radstrength]
" - status += "
  \> Mutation:
(-[stddev] to +[stddev] = 68 %) (-[2*stddev] to +[2*stddev] = 95 %)
" - if(connected) - stddev = RADIATION_ACCURACY_MULTIPLIER/(radduration + (connected.precision_coeff ** 2)) - else - stddev = RADIATION_ACCURACY_MULTIPLIER/radduration - var/chance_to_hit - switch(stddev) //hardcoded values from a z-table for a normal distribution - if(0 to 0.25) - chance_to_hit = ">95 %" - if(0.25 to 0.5) - chance_to_hit = "68-95 %" - if(0.5 to 0.75) - chance_to_hit = "55-68 %" - else - chance_to_hit = "<38 %" - status += "
Pulse Duration:
[radduration]
" - status += "
  \> Accuracy:
[chance_to_hit]
" - status += "
" // Close statusDisplay div - var/list/buttons = list("Scan") - if(connected) - buttons += "[connected.state_open ? "Close" : "Open"] Scanner" - if (connected.state_open) - buttons += "[connected.locked ? "Unlock" : "Lock"] Scanner" - else - buttons += "[connected.locked ? "Unlock" : "Lock"] Scanner" - else - buttons += "Open Scanner Lock Scanner" - if(viable_occupant && (scrambleready < world.time)) - buttons += "Scramble DNA" - else - buttons += "Scramble DNA" - if(diskette) - buttons += "Disk" - else - buttons += "Disk" - if(current_screen == "mutations") - buttons += "
Mutations" - else - buttons += "
Mutations" - if((current_screen == "mainmenu") || !current_screen) - buttons += "Genetic Sequencer" - else - buttons += "Genetic Sequencer" - if(current_screen == "ui") - buttons += "Unique Identifiers" - else - buttons += "Unique Identifiers" - if(current_screen == "advinjector") - buttons += "Adv. Injectors" - else - buttons += "Adv. Injectors" - - switch(current_screen) - if("working") - temp_html += status - temp_html += "

System Busy

" - temp_html += "Working ... Please wait ([DisplayTimeText(radduration*10)])" - if("ui") - temp_html += status - temp_html += buttons - temp_html += "

Unique Identifiers

" - temp_html += "-- Output Level ++" - temp_html += "
-- Pulse Duration ++" - temp_html += "

Irradiate Subject

" - temp_html += "
Unique Identifier:
" - var/max_line_len = 7*DNA_BLOCK_SIZE - if(viable_occupant) - temp_html += "
1
" - var/len = length(viable_occupant.dna.uni_identity) - for(var/i=1, i<=len, i++) - temp_html += "[copytext(viable_occupant.dna.uni_identity,i,i+1)]" - if ((i % max_line_len) == 0) - temp_html += "
" - if((i % DNA_BLOCK_SIZE) == 0 && i < len) - temp_html += "
[(i / DNA_BLOCK_SIZE) + 1]
" - else - temp_html += "---------" - temp_html += "

Buffer Menu

" - - if(istype(buffer)) - for(var/i=1, i<=buffer.len, i++) - temp_html += "
Slot [i]: " - var/list/buffer_slot = buffer[i] - if( !buffer_slot || !buffer_slot.len || !buffer_slot["name"] || !((buffer_slot["UI"] && buffer_slot["UE"]) || buffer_slot["SE"]) ) - temp_html += "
\tNo Data" - if(viable_occupant) - temp_html += "
Save to Buffer" - else - temp_html += "
Save to Buffer" - temp_html += "Clear Buffer" - if(diskette) - temp_html += "Load from Disk" - else - temp_html += "Load from Disk" - temp_html += "Save to Disk" - else - var/ui = buffer_slot["UI"] - var/ue = buffer_slot["UE"] - var/name = buffer_slot["name"] - var/label = buffer_slot["label"] - var/blood_type = buffer_slot["blood_type"] - temp_html += "
\tLabel: [label ? label : name]" - temp_html += "
\tSubject: [name]" - if(ue && name && blood_type) - temp_html += "
\tBlood Type: [blood_type]" - temp_html += "
\tUE: [ue] " - if(viable_occupant) - temp_html += "Occupant" - else - temp_html += "Occupant" - temp_html += "Occupant:Delayed" - if(injectorready < world.time) - temp_html += "Injector" - else - temp_html += "Injector" - else - temp_html += "
\tBlood Type: No Data" - temp_html += "
\tUE: No Data" - if(ui) - temp_html += "
\tUI: [ui] " - if(viable_occupant) - temp_html += "Occupant" - else - temp_html += "Occupant" - temp_html += "Occupant:Delayed" - if(injectorready < world.time) - temp_html += "Injector" - else - temp_html += "Injector" - else - temp_html += "
\tUI: No Data" - if(ue && name && blood_type && ui) - temp_html += "
\tUI+UE: [ui]/[ue] " - if(viable_occupant) - temp_html += "Occupant" - else - temp_html += "Occupant" - temp_html += "Occupant:Delayed" - if(injectorready < world.time) - temp_html += "UI+UE Injector" - else - temp_html += "UI+UE Injector" - if(viable_occupant) - temp_html += "
Save to Buffer" - else - temp_html += "
Save to Buffer" - temp_html += "Clear Buffer" - if(diskette) - temp_html += "Load from Disk" - else - temp_html += "Load from Disk" - if(diskette && !diskette.read_only) - temp_html += "Save to Disk" - else - temp_html += "Save to Disk" - if("disk") - temp_html += status - temp_html += buttons - if(diskette) - temp_html += "

[diskette.name]


" - temp_html += "Eject Disk
" - if(LAZYLEN(diskette.mutations)) - temp_html += "" - for(var/datum/mutation/human/A in diskette.mutations) - temp_html += "" - temp_html += "" - if(LAZYLEN(stored_mutations) < max_storage) - temp_html += "" - else - temp_html += "" - temp_html += "" - temp_html += "
[A.name]DeleteImportImport
" - else - temp_html += "
Load diskette to start ----------" - if("info") - if(LAZYLEN(stored_mutations)) - if(LAZYLEN(stored_mutations) >= current_storage) - var/datum/mutation/human/HM = stored_mutations[current_storage] - if(HM) - temp_html += display_sequence(HM.type, current_storage) - else - current_screen = "mainmenu" - if("mutations") - temp_html += status - temp_html += buttons - temp_html += "

Mutation Storage:

" - temp_html += "" - for(var/datum/mutation/human/HM in stored_mutations) - var/i = stored_mutations.Find(HM) - temp_html += "" - if(diskette) - temp_html += "" - else - temp_html += "" - temp_html += "" - if(combine == HM.type) - temp_html += "" - else - temp_html += "" - temp_html += "
[HM.name]ExportExportDeleteCombine
Combine

" - temp_html += "

Chromosome Storage:

" - temp_html += "" - for(var/i in 1 to stored_chromosomes.len) - var/obj/item/chromosome/CM = stored_chromosomes[i] - temp_html += "
" - temp_html += "
[CM.name]
" - if("advinjector") - temp_html += status - temp_html += buttons - temp_html += "
Advanced Injectors:

" - temp_html += "" - for(var/A in injector_selection) - temp_html += "
[A]" - var/list/true_selection = injector_selection[A] - temp_html += "
" - for(var/B in true_selection) - var/datum/mutation/human/HM = B - var/mutcolor - switch(HM.quality) - if(POSITIVE) - mutcolor = "good" - if(MINOR_NEGATIVE) - mutcolor = "average" - if(NEGATIVE) - mutcolor = "bad" - temp_html += "
[HM.name] " - temp_html += "Remove
" - if(injectorready < world.time) - temp_html += "
Print Advanced Injector" - else - temp_html += "
Printer ready in [DisplayTimeText(injectorready - world.time, 1)]" - temp_html += "Remove Injector
" - temp_html += "
" - - else - temp_html += status - temp_html += buttons - temp_html += "
Genetic Sequence:

" - if(viable_occupant) - if(viable_occupant) - for(var/A in get_mutation_list()) - temp_html += display_inactive_sequence(A) - temp_html += "
" - else - temp_html += "----" - if(viable_occupant && (current_mutation in get_mutation_list(viable_occupant))) - temp_html += display_sequence(current_mutation) - temp_html += "

" - else - temp_html += "----------" - - popup.set_content(temp_html.Join()) - popup.open() - -/obj/machinery/computer/scan_consolenew/proc/display_inactive_sequence(mutation) - var/temp_html = "" - var/class = "unselected" - var/mob/living/carbon/viable_occupant = get_viable_occupant() - if(!viable_occupant) - return - - var/location = viable_occupant.dna.mutation_index.Find(mutation) //We do this because we dont want people using sysexp or similair tools to just read the mutations. - - if(!location) //Do this only when needed, dont make a list with mutations for every iteration if you dont need to - var/list/mutations = get_mutation_list(TRUE) - if(mutation in mutations) - location = mutations.Find(mutation) - if(mutation == current_mutation) - class = "selected" - if(location > DNA_MUTATION_BLOCKS) - temp_html += "Extra Mutation" - else if(mutation in stored_research.discovered_mutations) - temp_html += "Discovered Mutation" - else - temp_html += "Undiscovered" - return temp_html - -/obj/machinery/computer/scan_consolenew/proc/display_sequence(mutation, storage_slot) //Storage slot is for when viewing from the stored mutations - var/temp_html = "" - if(!mutation) - temp_html += "ERR-" - return - var/mut_name = "Unknown gene" - var/mut_desc = "" - var/alias - var/discovered = FALSE - var/active = FALSE - var/scrambled = FALSE - var/instability - var/mob/living/carbon/viable_occupant = get_viable_occupant() - var/datum/mutation/human/HM = get_valid_mutation(mutation) - - if(viable_occupant) - var/datum/mutation/human/M = viable_occupant.dna.get_mutation(mutation) - if(M) - scrambled = M.scrambled - active = TRUE - var/datum/mutation/human/A = GET_INITIALIZED_MUTATION(mutation) - alias = A.alias - if(active && !scrambled) - discover(mutation) - if(stored_research && (mutation in stored_research.discovered_mutations)) - mut_name = A.name - mut_desc = A.desc - discovered = TRUE - instability = A.instability - var/extra - if(viable_occupant && !(storage_slot || viable_occupant.dna.mutation_in_sequence(mutation))) - extra = TRUE - if(discovered && !scrambled) - var/mutcolor - switch(A.quality) - if(POSITIVE) - mutcolor = "good" - if(MINOR_NEGATIVE) - mutcolor = "average" - if(NEGATIVE) - mutcolor = "bad" - if(HM) - instability *= GET_MUTATION_STABILIZER(HM) - temp_html += "
[mut_name] ([alias])
" - temp_html += "
Instability : [round(instability)]
" - else - temp_html += "
[alias]
" - temp_html += "
[mut_desc]
" - if(active && !storage_slot) - if(HM?.can_chromosome && (HM in viable_occupant.dna.mutations)) - var/i = viable_occupant.dna.mutations.Find(HM) - var/chromosome_name = "----" - if(HM.chromosome_name) - chromosome_name = HM.chromosome_name - temp_html += "
Chromosome status: [chromosome_name]
" - temp_html += "
Sequence:

" - if(!scrambled) - for(var/block in 1 to A.blocks) - var/whole_sequence = get_valid_gene_string(mutation) - var/sequence = copytext(whole_sequence, 1+(block-1)*(DNA_SEQUENCE_LENGTH*2),(DNA_SEQUENCE_LENGTH*2*block+1)) - temp_html += "
" - for(var/i in 1 to DNA_SEQUENCE_LENGTH) - var/num = 1+(i-1)*2 - var/genenum = num+(DNA_SEQUENCE_LENGTH*2*(block-1)) - temp_html += "" - temp_html += "" - for(var/i in 1 to DNA_SEQUENCE_LENGTH) - temp_html += "" - temp_html += "" - for(var/i in 1 to DNA_SEQUENCE_LENGTH) - var/num = i*2 - var/genenum = num+(DNA_SEQUENCE_LENGTH*2*(block-1)) - temp_html += "" - temp_html += "
|
" - temp_html += "




" - else - temp_html = "
Sequence unreadable due to unpredictable mutation.
" - if((active || storage_slot) && (injectorready < world.time) && !scrambled) - temp_html += "Print Activator" - temp_html += "Print Mutator" - else - temp_html += "Print Activator" - temp_html += "Print Mutator" - temp_html += "
" - if(storage_slot) - temp_html += "Delete" - if((LAZYLEN(stored_mutations) < max_storage) && diskette && !diskette.read_only) - temp_html += "Export" - else - temp_html += "Export" - temp_html += "Back" - else if(active && !scrambled) - temp_html += "Store" - temp_html += "Adv. Injector" - if(extra || scrambled) - temp_html += "Nullify" - else - temp_html += "Nullify" - temp_html += "
" - return temp_html - -/obj/machinery/computer/scan_consolenew/Topic(href, href_list) - if(..()) - return - if(!isturf(usr.loc)) - return - if(!((isturf(loc) && in_range(src, usr)) || issilicon(usr))) - return - if(current_screen == "working") - return - - add_fingerprint(usr) - usr.set_machine(src) - - var/mob/living/carbon/viable_occupant = get_viable_occupant() - - //Basic Tasks/////////////////////////////////////////// - var/num = round(text2num(href_list["num"])) - var/last_change - switch(href_list["task"]) - if("togglelock") - if(connected) - connected.locked = !connected.locked - if("toggleopen") - if(connected) - connected.toggle_open(usr) - if("setduration") - if(!num) - num = round(input(usr, "Choose pulse duration:", "Input an Integer", null) as num|null) - if(num) - radduration = WRAP(num, 1, RADIATION_DURATION_MAX+1) - if("setstrength") - if(!num) - num = round(input(usr, "Choose pulse strength:", "Input an Integer", null) as num|null) - if(num) - radstrength = WRAP(num, 1, RADIATION_STRENGTH_MAX+1) - if("screen") - current_screen = href_list["text"] - if("scramble") - if(viable_occupant && (scrambleready < world.time)) - viable_occupant.dna.remove_all_mutations(list(MUT_NORMAL, MUT_EXTRA)) - viable_occupant.dna.generate_dna_blocks() - scrambleready = world.time + SCRAMBLE_TIMEOUT - to_chat(usr,"DNA scrambled.") - viable_occupant.radiation += RADIATION_STRENGTH_MULTIPLIER*50/(connected.damage_coeff ** 2) - - if("setbufferlabel") - var/text = sanitize(input(usr, "Input a new label:", "Input a Text", null) as text|null) - if(num && text) - num = CLAMP(num, 1, NUMBER_OF_BUFFERS) - var/list/buffer_slot = buffer[num] - if(istype(buffer_slot)) - buffer_slot["label"] = text - if("setbuffer") - if(num && viable_occupant) - num = CLAMP(num, 1, NUMBER_OF_BUFFERS) - buffer[num] = list( - "label"="Buffer[num]:[viable_occupant.real_name]", - "UI"=viable_occupant.dna.uni_identity, - "UE"=viable_occupant.dna.unique_enzymes, - "name"=viable_occupant.real_name, - "blood_type"=viable_occupant.dna.blood_type - ) - if("clearbuffer") - if(num) - num = CLAMP(num, 1, NUMBER_OF_BUFFERS) - var/list/buffer_slot = buffer[num] - if(istype(buffer_slot)) - buffer_slot.Cut() - if("transferbuffer") - if(num && viable_occupant) - switch(href_list["text"]) //Numbers are this high because other way upgrading laser is just not worth the hassle, and i cant think of anything better to inmrove - if("ui") - apply_buffer(SCANNER_ACTION_UI,num) - if("ue") - apply_buffer(SCANNER_ACTION_UE,num) - if("mixed") - apply_buffer(SCANNER_ACTION_MIXED,num) - if("injector") - if(num && injectorready < world.time) - num = CLAMP(num, 1, NUMBER_OF_BUFFERS) - var/list/buffer_slot = buffer[num] - if(istype(buffer_slot)) - var/obj/item/dnainjector/timed/I - switch(href_list["text"]) - if("ui") - if(buffer_slot["UI"]) - I = new /obj/item/dnainjector/timed(loc) - I.fields = list("UI"=buffer_slot["UI"]) - if(connected) - I.damage_coeff = connected.damage_coeff - if("ue") - if(buffer_slot["name"] && buffer_slot["UE"] && buffer_slot["blood_type"]) - I = new /obj/item/dnainjector/timed(loc) - I.fields = list("name"=buffer_slot["name"], "UE"=buffer_slot["UE"], "blood_type"=buffer_slot["blood_type"]) - if(connected) - I.damage_coeff = connected.damage_coeff - if("mixed") - if(buffer_slot["UI"] && buffer_slot["name"] && buffer_slot["UE"] && buffer_slot["blood_type"]) - I = new /obj/item/dnainjector/timed(loc) - I.fields = list("UI"=buffer_slot["UI"],"name"=buffer_slot["name"], "UE"=buffer_slot["UE"], "blood_type"=buffer_slot["blood_type"]) - if(connected) - I.damage_coeff = connected.damage_coeff - if(I) - injectorready = world.time + INJECTOR_TIMEOUT - if("loaddisk") - if(num && diskette && diskette.fields) - num = CLAMP(num, 1, NUMBER_OF_BUFFERS) - buffer[num] = diskette.fields.Copy() - if("savedisk") - if(num && diskette && !diskette.read_only) - num = CLAMP(num, 1, NUMBER_OF_BUFFERS) - var/list/buffer_slot = buffer[num] - if(istype(buffer_slot)) - diskette.name = "data disk \[[buffer_slot["label"]]\]" - diskette.fields = buffer_slot.Copy() - if("ejectdisk") - if(diskette) - diskette.forceMove(drop_location()) - diskette = null - if("setdelayed") - if(num) - delayed_action = list("action"=text2num(href_list["delayaction"]),"buffer"=num) - if("pulseui") - if(num && viable_occupant && connected) - radduration = WRAP(radduration, 1, RADIATION_DURATION_MAX+1) - radstrength = WRAP(radstrength, 1, RADIATION_STRENGTH_MAX+1) - - var/locked_state = connected.locked - connected.locked = TRUE - - current_screen = "working" - ui_interact(usr) - - sleep(radduration*10) - current_screen = "ui" - - if(viable_occupant && connected && connected.occupant==viable_occupant) - viable_occupant.radiation += (RADIATION_IRRADIATION_MULTIPLIER*radduration*radstrength)/(connected.damage_coeff ** 2) //Read comment in "transferbuffer" section above for explanation - switch(href_list["task"]) //Same thing as there but values are even lower, on best part they are about 0.0*, effectively no damage - if("pulseui") - var/len = length(viable_occupant.dna.uni_identity) - num = WRAP(num, 1, len+1) - num = randomize_radiation_accuracy(num, radduration + (connected.precision_coeff ** 2), len) //Each manipulator level above 1 makes randomization as accurate as selected time + manipulator lvl^2 - //Value is this high for the same reason as with laser - not worth the hassle of upgrading if the bonus is low - var/block = round((num-1)/DNA_BLOCK_SIZE)+1 - var/subblock = num - block*DNA_BLOCK_SIZE - last_change = "UI #[block]-[subblock]; " - - var/hex = copytext(viable_occupant.dna.uni_identity, num, num+1) - last_change += "[hex]" - hex = scramble(hex, radstrength, radduration) - last_change += "->[hex]" - - viable_occupant.dna.uni_identity = copytext(viable_occupant.dna.uni_identity, 1, num) + hex + copytext(viable_occupant.dna.uni_identity, num+1, 0) - viable_occupant.updateappearance(mutations_overlay_update=1) - else - current_screen = "mainmenu" - - if(connected) - connected.locked = locked_state - if("inspect") - if(viable_occupant) - var/list/mutations = get_mutation_list(TRUE) - if(current_mutation == mutations[num]) - current_mutation = null - else - current_mutation = mutations[num] - - if("inspectstorage") - current_storage = num - current_screen = "info" - if("savemut") - if(viable_occupant) - var/succes - if(LAZYLEN(stored_mutations) < max_storage) - var/mutation = text2path(href_list["path"]) - if(ispath(mutation, /datum/mutation/human)) //sanity checks - var/datum/mutation/human/HM = viable_occupant.dna.get_mutation(mutation) - if(HM) - var/datum/mutation/human/A = new HM.type() - A.copy_mutation(HM) - succes = TRUE - stored_mutations += A - to_chat(usr,"Mutation succesfully stored.") - if(!succes) //we can exactly return here - to_chat(usr,"Mutation storage is full.") - if("deletemut") - var/datum/mutation/human/HM = stored_mutations[num] - if(HM) - stored_mutations.Remove(HM) - qdel(HM) - current_screen = "mutations" - if("activator") - if(injectorready < world.time) - var/mutation = text2path(href_list["path"]) - if(ispath(mutation, /datum/mutation/human)) - var/datum/mutation/human/HM = get_valid_mutation(mutation) - if(HM) - var/obj/item/dnainjector/activator/I = new /obj/item/dnainjector/activator(loc) - I.add_mutations += new HM.type (copymut = HM) - I.name = "[HM.name] activator" - I.research = TRUE - if(connected) - I.damage_coeff = connected.damage_coeff*4 - injectorready = world.time + INJECTOR_TIMEOUT * (1 - 0.1 * connected.precision_coeff) //precision_coeff being the matter bin rating - else - injectorready = world.time + INJECTOR_TIMEOUT - if("mutator") - if(injectorready < world.time) - var/mutation = text2path(href_list["path"]) - if(ispath(mutation, /datum/mutation/human)) - var/datum/mutation/human/HM = get_valid_mutation(mutation) - if(HM) - var/obj/item/dnainjector/activator/I = new /obj/item/dnainjector/activator(loc) - I.add_mutations += new HM.type (copymut = HM) - I.doitanyway = TRUE - I.name = "[HM.name] injector" - if(connected) - I.damage_coeff = connected.damage_coeff - injectorready = world.time + INJECTOR_TIMEOUT * 5 * (1 - 0.1 * connected.precision_coeff) - else - injectorready = world.time + INJECTOR_TIMEOUT * 5 - - if("advinjector") - var/selection = href_list["injector"] - if(injectorready < world.time) - if(injector_selection.Find(selection)) - var/list/true_selection = injector_selection[selection] - if(LAZYLEN(injector_selection)) - var/obj/item/dnainjector/activator/I = new /obj/item/dnainjector/activator(loc) - for(var/A in true_selection) - var/datum/mutation/human/HM = A - I.add_mutations += new HM.type (copymut = HM) - I.doitanyway = TRUE - I.name = "Advanced [selection] injector" - if(connected) - I.damage_coeff = connected.damage_coeff - injectorready = world.time + INJECTOR_TIMEOUT * 8 * (1 - 0.1 * connected.precision_coeff) - else - injectorready = world.time + INJECTOR_TIMEOUT * 8 - - if("nullify") - if(viable_occupant) - var/datum/mutation/human/A = viable_occupant.dna.get_mutation(current_mutation) - if(A && (!viable_occupant.dna.mutation_in_sequence(current_mutation) || A.scrambled)) - viable_occupant.dna.remove_mutation(current_mutation) - current_screen = "mainmenu" - current_mutation = null - if("pulsegene") - if(current_screen != "info") - var/path = GET_MUTATION_TYPE_FROM_ALIAS(href_list["alias"]) - if(viable_occupant && num && (path in viable_occupant.dna.mutation_index)) - var/list/genes = list("A","T","G","C","X") - if(jokerready < world.time) - genes += "JOKER" - var/sequence = GET_GENE_STRING(path, viable_occupant.dna) - var/original = sequence[num] - var/new_gene = input("From [original] to-", "New block", original) as null|anything in genes - if(!new_gene) - new_gene = original - if(viable_occupant == get_viable_occupant()) //No cheesing - if((new_gene == "JOKER") && (jokerready < world.time)) - var/true_genes = GET_SEQUENCE(current_mutation) - new_gene = true_genes[num] - jokerready = world.time + JOKER_TIMEOUT - (JOKER_UPGRADE * (connected.precision_coeff-1)) - sequence = copytext(sequence, 1, num) + new_gene + copytext(sequence, num+1, length(sequence)+1) - viable_occupant.dna.mutation_index[path] = sequence - viable_occupant.radiation += RADIATION_STRENGTH_MULTIPLIER/connected.damage_coeff - viable_occupant.domutcheck() - if("exportdiskmut") - if(diskette && !diskette.read_only) - var/path = text2path(href_list["path"]) - if(ispath(path, /datum/mutation/human)) - var/datum/mutation/human/A = get_valid_mutation(path) - if(A && diskette && (LAZYLEN(diskette.mutations) < diskette.max_mutations)) - var/datum/mutation/human/HM = new A.type() - diskette.mutations += HM - HM.copy_mutation(A) - to_chat(usr, "Successfully wrote [A.name] to [diskette.name].") - if("deletediskmut") - if(diskette && !diskette.read_only) - if(num && (LAZYLEN(diskette.mutations) >= num)) - var/datum/mutation/human/A = diskette.mutations[num] - diskette.mutations.Remove(A) - qdel(A) - if("importdiskmut") - if(diskette && (LAZYLEN(diskette.mutations) >= num)) - if(LAZYLEN(stored_mutations) < max_storage) - var/datum/mutation/human/A = diskette.mutations[num] - var/datum/mutation/human/HM = new A.type() - HM.copy_mutation(A) - stored_mutations += HM - to_chat(usr,"Successfully wrote [A.name] to storage.") - if("combine") - if(num && (LAZYLEN(stored_mutations) >= num)) - if(LAZYLEN(stored_mutations) < max_storage) - var/datum/mutation/human/A = stored_mutations[num] - var/path = A.type - if(combine) - var/result_path = get_mixed_mutation(combine, path) - if(result_path) - stored_mutations += new result_path() - to_chat(usr, "Success! New mutation has been added to storage") - discover(result_path) - combine = null - else - to_chat(usr, "Failed. No mutation could be created.") - combine = null - else - combine = path - to_chat(usr,"Selected [A.name] for combining") - else - to_chat(usr, "Not enough space to store potential mutation.") - if("ejectchromosome") - if(LAZYLEN(stored_chromosomes) <= num) - var/obj/item/chromosome/CM = stored_chromosomes[num] - CM.forceMove(drop_location()) - adjust_item_drop_location(CM) - stored_chromosomes -= CM - if("applychromosome") - if(viable_occupant && (LAZYLEN(viable_occupant.dna.mutations) <= num)) - var/datum/mutation/human/HM = viable_occupant.dna.mutations[num] - var/list/chromosomes = list() - for(var/obj/item/chromosome/CM in stored_chromosomes) - if(CM.can_apply(HM)) - chromosomes += CM - if(chromosomes.len) - var/obj/item/chromosome/CM = input("Select a chromosome to apply", "Apply Chromosome") as null|anything in sortNames(chromosomes) - if(CM) - to_chat(usr, "I apply [CM] to [HM.name].") - stored_chromosomes -= CM - CM.apply(HM) - if("expand_advinjector") - var/mutation = text2path(href_list["path"]) - var/datum/mutation/human/HM = get_valid_mutation(mutation) - if(HM && LAZYLEN(injector_selection)) - var/which_injector = input(usr, "Select Adv. Injector", "Advanced Injectors") as null|anything in injector_selection - if(injector_selection.Find(which_injector)) - var/list/true_selection = injector_selection[which_injector] - var/total_instability - for(var/B in true_selection) - var/datum/mutation/human/mootacion = B - total_instability += mootacion.instability - total_instability += HM.instability - if((total_instability > max_injector_instability) || (true_selection.len + 1) > max_injector_mutations) - to_chat(usr, "Adding more mutations would make the advanced injector too unstable!") - else - true_selection += HM //reminder that this works. because I keep forgetting this works - if("remove_from_advinjector") - var/mutation = text2path(href_list["path"]) - var/selection = href_list["injector"] - if(injector_selection.Find(selection)) - var/list/true_selection = injector_selection[selection] - for(var/B in true_selection) - var/datum/mutation/human/HM = B - if(HM.type == mutation) - true_selection -= HM - break - - if("remove_advinjector") - var/selection = href_list["injector"] - for(selection in injector_selection) - if(selection == selection) - injector_selection.Remove(selection) - - if("add_advinjector") - if(LAZYLEN(injector_selection) < max_injector_selections) - var/new_selection = input(usr, "Enter Adv. Injector name", "Advanced Injectors") as text|null - if(new_selection && !(new_selection in injector_selection)) - injector_selection[new_selection] = list() - - - - ui_interact(usr,last_change) - -/obj/machinery/computer/scan_consolenew/proc/scramble(input,rs,rd) //hexadecimal genetics. dont confuse with scramble button - var/length = length(input) - var/ran = gaussian(0, rs*RADIATION_STRENGTH_MULTIPLIER) - if(ran == 0) - ran = pick(-1,1) //hacky, statistically should almost never happen. 0-chance makes people mad though - else if(ran < 0) - ran = round(ran) //negative, so floor it - else - ran = -round(-ran) //positive, so ceiling it - return num2hex(WRAP(hex2num(input)+ran, 0, 16**length), length) - -/obj/machinery/computer/scan_consolenew/proc/randomize_radiation_accuracy(position, radduration, number_of_blocks) - var/val = round(gaussian(0, RADIATION_ACCURACY_MULTIPLIER/radduration) + position, 1) - return WRAP(val, 1, number_of_blocks+1) - -/obj/machinery/computer/scan_consolenew/proc/get_viable_occupant() - var/mob/living/carbon/viable_occupant = null - if(connected) - viable_occupant = connected.occupant - if(!istype(viable_occupant) || !viable_occupant.dna || HAS_TRAIT(viable_occupant, TRAIT_RADIMMUNE) || HAS_TRAIT(viable_occupant, TRAIT_BADDNA)) - viable_occupant = null - return viable_occupant - -/obj/machinery/computer/scan_consolenew/proc/apply_buffer(action,buffer_num) - buffer_num = CLAMP(buffer_num, 1, NUMBER_OF_BUFFERS) - var/list/buffer_slot = buffer[buffer_num] - var/mob/living/carbon/viable_occupant = get_viable_occupant() - if(istype(buffer_slot)) - viable_occupant.radiation += rand(100/(connected.damage_coeff ** 2),250/(connected.damage_coeff ** 2)) - //15 and 40 are just magic numbers that were here before so i didnt touch them, they are initial boundaries of damage - //Each laser level reduces damage by lvl^2, so no effect on 1 lvl, 4 times less damage on 2 and 9 times less damage on 3 - //Numbers are this high because other way upgrading laser is just not worth the hassle, and i cant think of anything better to inmrove - switch(action) - if(SCANNER_ACTION_UI) - if(buffer_slot["UI"]) - viable_occupant.dna.uni_identity = buffer_slot["UI"] - viable_occupant.updateappearance(mutations_overlay_update=1) - if(SCANNER_ACTION_UE) - if(buffer_slot["name"] && buffer_slot["UE"] && buffer_slot["blood_type"]) - viable_occupant.real_name = buffer_slot["name"] - viable_occupant.name = buffer_slot["name"] - viable_occupant.dna.unique_enzymes = buffer_slot["UE"] - viable_occupant.dna.blood_type = buffer_slot["blood_type"] - if(SCANNER_ACTION_MIXED) - if(buffer_slot["UI"]) - viable_occupant.dna.uni_identity = buffer_slot["UI"] - viable_occupant.updateappearance(mutations_overlay_update=1) - if(buffer_slot["name"] && buffer_slot["UE"] && buffer_slot["blood_type"]) - viable_occupant.real_name = buffer_slot["name"] - viable_occupant.name = buffer_slot["name"] - viable_occupant.dna.unique_enzymes = buffer_slot["UE"] - viable_occupant.dna.blood_type = buffer_slot["blood_type"] - -/obj/machinery/computer/scan_consolenew/proc/on_scanner_close() - if(delayed_action && get_viable_occupant()) - to_chat(connected.occupant, "[src] activates!") - apply_buffer(delayed_action["action"],delayed_action["buffer"]) - delayed_action = null //or make it stick + reset button ? - -/obj/machinery/computer/scan_consolenew/proc/get_valid_mutation(mutation) - var/mob/living/carbon/C = get_viable_occupant() - if(C) - var/datum/mutation/human/HM = C.dna.get_mutation(mutation) - if(HM) - return HM - for(var/datum/mutation/human/A in stored_mutations) - if(A.type == mutation) - return A - - -/obj/machinery/computer/scan_consolenew/proc/get_mutation_list(include_storage) //Returns a list of the mutation index types and any extra mutations - var/mob/living/carbon/viable_occupant = get_viable_occupant() - var/list/paths = list() - if(viable_occupant) - for(var/A in viable_occupant.dna.mutation_index) - paths += A - for(var/datum/mutation/human/A in viable_occupant.dna.mutations) - if(A.class == MUT_EXTRA) - paths += A.type - if(include_storage) - for(var/datum/mutation/human/A in stored_mutations) - paths += A.type - return paths - -/obj/machinery/computer/scan_consolenew/proc/get_valid_gene_string(mutation) - var/mob/living/carbon/C = get_viable_occupant() - if(C && (mutation in C.dna.mutation_index)) - return GET_GENE_STRING(mutation, C.dna) - else if(C && (LAZYLEN(C.dna.mutations))) - for(var/datum/mutation/human/A in C.dna.mutations) - if(A.type == mutation) - return GET_SEQUENCE(mutation) - for(var/datum/mutation/human/A in stored_mutations) - if(A.type == mutation) - return GET_SEQUENCE(mutation) - -/obj/machinery/computer/scan_consolenew/proc/discover(mutation) - if(stored_research && !(mutation in stored_research.discovered_mutations)) - stored_research.discovered_mutations += mutation - return TRUE -/////////////////////////// DNA MACHINES -#undef INJECTOR_TIMEOUT -#undef NUMBER_OF_BUFFERS - -#undef RADIATION_STRENGTH_MAX -#undef RADIATION_STRENGTH_MULTIPLIER - -#undef RADIATION_DURATION_MAX -#undef RADIATION_ACCURACY_MULTIPLIER - -#undef RADIATION_IRRADIATION_MULTIPLIER - -#undef SCANNER_ACTION_SE -#undef SCANNER_ACTION_UI -#undef SCANNER_ACTION_UE -#undef SCANNER_ACTION_MIXED - -//#undef BAD_MUTATION_DIFFICULTY -//#undef GOOD_MUTATION_DIFFICULTY -//#undef OP_MUTATION_DIFFICULTY diff --git a/code/game/machinery/computer/launchpad_control.dm b/code/game/machinery/computer/launchpad_control.dm deleted file mode 100644 index 6a53ad9173..0000000000 --- a/code/game/machinery/computer/launchpad_control.dm +++ /dev/null @@ -1,220 +0,0 @@ -/obj/machinery/computer/launchpad - name = "\improper launchpad control console" - desc = "" - icon_screen = "teleport" - icon_keyboard = "teleport_key" - circuit = /obj/item/circuitboard/computer/launchpad_console - ui_x = 350 - ui_y = 470 - - var/screen = "select" //current UI view - var/obj/machinery/launchpad/current_pad //current pad viewed on the screen - var/list/obj/machinery/launchpad/launchpads - var/maximum_pads = 4 - -/obj/machinery/computer/launchpad/Initialize() - launchpads = list() - . = ..() - -/obj/machinery/computer/launchpad/attack_paw(mob/user) - to_chat(user, "I are too primitive to use this computer!") - return - -/obj/machinery/computer/launchpad/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_MULTITOOL) - if(!multitool_check_buffer(user, W)) - return - var/obj/item/multitool/M = W - if(M.buffer && istype(M.buffer, /obj/machinery/launchpad)) - if(LAZYLEN(launchpads) < maximum_pads) - launchpads |= M.buffer - M.buffer = null - to_chat(user, "I upload the data from the [W.name]'s buffer.") - else - to_chat(user, "[src] cannot handle any more connections!") - else - return ..() - -/obj/machinery/computer/launchpad/proc/pad_exists(number) - var/obj/machinery/launchpad/pad = launchpads[number] - if(QDELETED(pad)) - return FALSE - return TRUE - -/obj/machinery/computer/launchpad/proc/teleport(mob/user, obj/machinery/launchpad/pad, sending) - if(QDELETED(pad)) - to_chat(user, "ERROR: Launchpad not responding. Check launchpad integrity.") - return - if(!pad.isAvailable()) - to_chat(user, "ERROR: Launchpad not operative. Make sure the launchpad is ready and powered.") - return - pad.doteleport(user, sending) - -/obj/machinery/computer/launchpad/proc/get_pad(number) - var/obj/machinery/launchpad/pad = launchpads[number] - return pad - -/obj/machinery/computer/launchpad/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "launchpad_console", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/computer/launchpad/ui_data(mob/user) - var/list/data = list() - if(!LAZYLEN(launchpads)) - data["screen"] = "empty" - return data - else - data["screen"] = screen - - if(screen == "select") - var/list/pad_list = list() - for(var/i in 1 to LAZYLEN(launchpads)) - if(pad_exists(i)) - var/obj/machinery/launchpad/pad = get_pad(i) - var/list/this_pad = list() - this_pad["name"] = pad.display_name - this_pad["id"] = i - if(pad.stat & NOPOWER) - this_pad["inactive"] = TRUE - pad_list += list(this_pad) - else - launchpads -= get_pad(i) - data["launchpads"] = pad_list - else if(screen == "control") - if(QDELETED(current_pad) || (current_pad.stat & NOPOWER)) - data["pad_active"] = FALSE - return data - data["pad_active"] = TRUE - data["pad_name"] = current_pad.display_name - data["abs_x"] = abs(current_pad.x_offset) - data["abs_y"] = abs(current_pad.y_offset) - data["north_south"] = current_pad.y_offset > 0 ? "N":"S" - data["east_west"] = current_pad.x_offset > 0 ? "E":"W" - - return data - -/obj/machinery/computer/launchpad/ui_act(action, params) - if(..()) - return - switch(action) - if("return") - screen = "select" - . = TRUE - if("select_pad") - current_pad = get_pad(text2num(params["id"])) - screen = "control" - . = TRUE - if("right") - if(!current_pad.teleporting) - if(current_pad.x_offset < current_pad.range) - current_pad.x_offset++ - current_pad.update_indicator() - . = TRUE - - if("left") - if(!current_pad.teleporting) - if(current_pad.x_offset > (current_pad.range * -1)) - current_pad.x_offset-- - current_pad.update_indicator() - . = TRUE - - if("up") - if(!current_pad.teleporting) - if(current_pad.y_offset < current_pad.range) - current_pad.y_offset++ - current_pad.update_indicator() - . = TRUE - - if("down") - if(!current_pad.teleporting) - if(current_pad.y_offset > (current_pad.range * -1)) - current_pad.y_offset-- - current_pad.update_indicator() - . = TRUE - - if("up-right") - if(!current_pad.teleporting) - if(current_pad.y_offset < current_pad.range) - current_pad.y_offset++ - if(current_pad.x_offset < current_pad.range) - current_pad.x_offset++ - current_pad.update_indicator() - . = TRUE - - if("up-left") - if(!current_pad.teleporting) - if(current_pad.y_offset < current_pad.range) - current_pad.y_offset++ - if(current_pad.x_offset > (current_pad.range * -1)) - current_pad.x_offset-- - current_pad.update_indicator() - . = TRUE - - if("down-right") - if(!current_pad.teleporting) - if(current_pad.y_offset > (current_pad.range * -1)) - current_pad.y_offset-- - if(current_pad.x_offset < current_pad.range) - current_pad.x_offset++ - current_pad.update_indicator() - . = TRUE - - if("down-left") - if(!current_pad.teleporting) - if(current_pad.y_offset > (current_pad.range * -1)) - current_pad.y_offset-- - if(current_pad.x_offset > (current_pad.range * -1)) - current_pad.x_offset-- - current_pad.update_indicator() - . = TRUE - - if("reset") - if(!current_pad.teleporting) - current_pad.y_offset = 0 - current_pad.x_offset = 0 - current_pad.update_indicator() - . = TRUE - - if("manual_x") - if(!current_pad.teleporting) - var/new_x = input("Set the X offset (Horizontal)","X Offset", current_pad.x_offset) as null|num - if(!isnull(new_x)) - new_x = CLAMP(new_x, current_pad.range * -1, current_pad.range) - . = TRUE - current_pad.x_offset = new_x - current_pad.update_indicator() - . = TRUE - - if("manual_y") - if(!current_pad.teleporting) - var/new_y = input("Set the Y offset (Vertical)","Y Offset", current_pad.y_offset) as null|num - if(!isnull(new_y)) - new_y = CLAMP(new_y, current_pad.range * -1, current_pad.range) - . = TRUE - current_pad.y_offset = new_y - current_pad.update_indicator() - . = TRUE - - if("rename") - . = TRUE - var/new_name = stripped_input(usr, "How do you want to rename the launchpad?", "Launchpad", current_pad.display_name, 15) - if(!new_name) - return - current_pad.display_name = new_name - - if("remove") - . = TRUE - if(usr && alert(usr, "Are you sure?", "Unlink Launchpad", "I'm Sure", "Abort") != "Abort") - launchpads -= current_pad - current_pad = null - - if("launch") - teleport(usr, current_pad, TRUE) - . = TRUE - - if("pull") - teleport(usr, current_pad, FALSE) - . = TRUE - . = TRUE diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm deleted file mode 100644 index a09d4e7116..0000000000 --- a/code/game/machinery/computer/law.dm +++ /dev/null @@ -1,77 +0,0 @@ - - -/obj/machinery/computer/upload - var/mob/living/silicon/current = null //The target of future law uploads - icon_screen = "command" - time_to_screwdrive = 60 - -/obj/machinery/computer/upload/Initialize() - . = ..() - AddComponent(/datum/component/gps, "Encrypted Upload") - -/obj/machinery/computer/upload/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item/aiModule)) - var/obj/item/aiModule/M = O - if(stat & (NOPOWER|BROKEN|MAINT)) - return - if(!current) - to_chat(user, "I haven't selected anything to transmit laws to!") - return - if(!can_upload_to(current)) - to_chat(user, "Upload failed! Check to make sure [current.name] is functioning properly.") - current = null - return - var/turf/currentloc = get_turf(current) - if(currentloc && user.z != currentloc.z) - to_chat(user, "Upload failed! Unable to establish a connection to [current.name]. You're too far away!") - current = null - return - M.install(current.laws, user) - else - return ..() - -/obj/machinery/computer/upload/proc/can_upload_to(mob/living/silicon/S) - if(S.stat == DEAD) - return FALSE - return TRUE - -/obj/machinery/computer/upload/ai - name = "\improper AI upload console" - desc = "" - circuit = /obj/item/circuitboard/computer/aiupload - -/obj/machinery/computer/upload/ai/interact(mob/user) - current = select_active_ai(user) - - if (!current) - to_chat(user, "No active AIs detected!") - else - to_chat(user, "[current.name] selected for law changes.") - -/obj/machinery/computer/upload/ai/can_upload_to(mob/living/silicon/ai/A) - if(!A || !isAI(A)) - return FALSE - if(A.control_disabled) - return FALSE - return ..() - - -/obj/machinery/computer/upload/borg - name = "cyborg upload console" - desc = "" - circuit = /obj/item/circuitboard/computer/borgupload - -/obj/machinery/computer/upload/borg/interact(mob/user) - current = select_active_free_borg(user) - - if(!current) - to_chat(user, "No active unslaved cyborgs detected.") - else - to_chat(user, "[current.name] selected for law changes.") - -/obj/machinery/computer/upload/borg/can_upload_to(mob/living/silicon/robot/B) - if(!B || !iscyborg(B)) - return FALSE - if(B.scrambledcodes || B.emagged) - return FALSE - return ..() diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm deleted file mode 100644 index f687295e03..0000000000 --- a/code/game/machinery/computer/medical.dm +++ /dev/null @@ -1,579 +0,0 @@ - - -/obj/machinery/computer/med_data//TODO:SANITY - name = "medical records console" - desc = "" - icon_screen = "medcomp" - icon_keyboard = "med_key" - req_one_access = list(ACCESS_MEDICAL, ACCESS_FORENSICS_LOCKERS) - circuit = /obj/item/circuitboard/computer/med_data - var/rank = null - var/screen = null - var/datum/data/record/active1 - var/datum/data/record/active2 - var/temp = null - var/printing = null - //Sorting Variables - var/sortBy = "name" - var/order = 1 // -1 = Descending - 1 = Ascending - - light_color = LIGHT_COLOR_BLUE - -/obj/machinery/computer/med_data/syndie - icon_keyboard = "syndie_key" - -/obj/machinery/computer/med_data/ui_interact(mob/user) - . = ..() - if(isliving(user)) - playsound(src, 'sound/blank.ogg', 50, FALSE) - var/dat - if(temp) - dat = text("[temp]

Clear Screen") - else - if(authenticated) - switch(screen) - if(1) - dat += {" -Search Records -
List Records -
-
Virus Database -
Medbot Tracking -
-
Record Maintenance -
{Log Out}
-"} - if(2) - dat += {" -

- - - - -
Records:
- - - - - - - - -"} - - - if(!isnull(GLOB.data_core.general)) - for(var/datum/data/record/R in sortRecord(GLOB.data_core.general, sortBy, order)) - var/blood_type = "" - var/b_dna = "" - for(var/datum/data/record/E in GLOB.data_core.medical) - if((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"])) - blood_type = E.fields["blood_type"] - b_dna = E.fields["b_dna"] - var/background - - if(R.fields["m_stat"] == "*Insane*" || R.fields["p_stat"] == "*Deceased*") - background = "'background-color:#990000;'" - else if(R.fields["p_stat"] == "*Unconscious*" || R.fields["m_stat"] == "*Unstable*") - background = "'background-color:#CD6500;'" - else if(R.fields["p_stat"] == "Physically Unfit" || R.fields["m_stat"] == "*Watch*") - background = "'background-color:#3BB9FF;'" - else - background = "'background-color:#4F7529;'" - - dat += text("", background, R.fields["id"], R.fields["name"]) - dat += text("", R.fields["id"]) - dat += text("", R.fields["fingerprint"], b_dna) - dat += text("", blood_type) - dat += text("", R.fields["p_stat"]) - dat += text("", R.fields["m_stat"]) - dat += "
NameIDFingerprints (F) | DNA (D)Blood TypePhysical StatusMental Status
[][]F: []
D: []
[][][]

" - dat += "
Back" - if(3) - dat += "Records Maintenance
\nBackup To Disk
\nUpload From Disk
\nDelete All Records
\n
\nBack" - if(4) - - dat += "" - if(active1 in GLOB.data_core.general) - if(istype(active1.fields["photo_front"], /obj/item/photo)) - var/obj/item/photo/P1 = active1.fields["photo_front"] - user << browse_rsc(P1.picture.picture_image, "photo_front") - if(istype(active1.fields["photo_side"], /obj/item/photo)) - var/obj/item/photo/P2 = active1.fields["photo_side"] - user << browse_rsc(P2.picture.picture_image, "photo_side") - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - else - dat += "" - - dat += "" - if(active2 in GLOB.data_core.medical) - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" //(per disease info placed in log/comment section) - dat += "" - dat += "" - - dat += "" - var/counter = 1 - while(active2.fields[text("com_[]", counter)]) - dat += "" - counter++ - dat += "" - - dat += "" - else - dat += "" - dat += "" - dat += "" - dat += "" - dat += "
Medical Record
Name:[active1.fields["name"]]
ID:[active1.fields["id"]]
Gender: [active1.fields["gender"]] 
Age: [active1.fields["age"]] 
Species: [active1.fields["species"]] 
Fingerprint: [active1.fields["fingerprint"]] 
Physical Status: [active1.fields["p_stat"]] 
Mental Status: [active1.fields["m_stat"]] 
General Record Lost!

Medical Data
Blood Type: [active2.fields["blood_type"]] 
DNA: [active2.fields["b_dna"]] 

Minor Disabilities:

 [active2.fields["mi_dis"]] 
Details: [active2.fields["mi_dis_d"]] 

Major Disabilities:

 [active2.fields["ma_dis"]] 
Details: [active2.fields["ma_dis_d"]] 

Allergies:

 [active2.fields["alg"]] 
Details: [active2.fields["alg_d"]] 

Current Diseases:

 [active2.fields["cdi"]] 
Details: [active2.fields["cdi_d"]] 

Important Notes:

 [active2.fields["notes"]] 

Comments/Log
[active2.fields[text("com_[]", counter)]]
Delete Entry
Add Entry

Delete Record (Medical Only)
Medical Record Lost!

New Record
Print Record
Back
" - if(5) - dat += "
Virus Database
" - for(var/Dt in typesof(/datum/disease/)) - var/datum/disease/Dis = new Dt(0) - if(istype(Dis, /datum/disease/advance)) - continue // TODO (tm): Add advance diseases to the virus database which no one uses. - if(!Dis.desc) - continue - dat += "
[Dis.name]" - dat += "
Back" - if(6) - dat += "
Medical Robot Monitor
" - dat += "Back" - dat += "
Medical Robots:" - var/bdat = null - for(var/mob/living/simple_animal/bot/medbot/M in GLOB.alive_mob_list) - if(M.z != z) - continue //only find medibots on the same z-level as the computer - var/turf/bl = get_turf(M) - if(bl) //if it can't find a turf for the medibot, then it probably shouldn't be showing up - bdat += "[M.name] - \[[bl.x],[bl.y]\] - [M.on ? "Online" : "Offline"]
" - if(!bdat) - dat += "
None detected
" - else - dat += "
[bdat]" - - else - else - dat += "{Log In}" - var/datum/browser/popup = new(user, "med_rec", "Medical Records Console", 600, 400) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - popup.open() - -/obj/machinery/computer/med_data/Topic(href, href_list) - . = ..() - if(.) - return . - if(!(active1 in GLOB.data_core.general)) - active1 = null - if(!(active2 in GLOB.data_core.medical)) - active2 = null - - if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr) || IsAdminGhost(usr)) - usr.set_machine(src) - if(href_list["temp"]) - temp = null - else if(href_list["logout"]) - authenticated = null - screen = null - active1 = null - active2 = null - playsound(src, 'sound/blank.ogg', 50, FALSE) - else if(href_list["choice"]) - // SORTING! - if(href_list["choice"] == "Sorting") - // Reverse the order if clicked twice - if(sortBy == href_list["sort"]) - if(order == 1) - order = -1 - else - order = 1 - else - // New sorting order! - sortBy = href_list["sort"] - order = initial(order) - else if(href_list["login"]) - var/mob/M = usr - var/obj/item/card/id/I = M.get_idcard(TRUE) - if(issilicon(M)) - active1 = null - active2 = null - authenticated = 1 - rank = "AI" - screen = 1 - else if(IsAdminGhost(M)) - active1 = null - active2 = null - authenticated = 1 - rank = "Central Command" - screen = 1 - else if(istype(I) && check_access(I)) - active1 = null - active2 = null - authenticated = I.registered_name - rank = I.assignment - screen = 1 - else - to_chat(usr, "Unauthorized access.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - if(authenticated) - if(href_list["screen"]) - screen = text2num(href_list["screen"]) - if(screen < 1) - screen = 1 - - active1 = null - active2 = null - - else if(href_list["vir"]) - var/type = href_list["vir"] - var/datum/disease/Dis = new type(0) - var/AfS = "" - for(var/mob/M in Dis.viable_mobtypes) - AfS += " [initial(M.name)];" - temp = {"Name: [Dis.name] -
Number of stages: [Dis.max_stages] -
Spread: [Dis.spread_text] Transmission -
Possible Cure: [(Dis.cure_text||"none")] -
Affected Lifeforms:[AfS] -
-
Notes: [Dis.desc] -
-
Severity: [Dis.severity]"} - - else if(href_list["del_all"]) - temp = "Are you sure you wish to delete all records?
\n\tYes
\n\tNo
" - - else if(href_list["del_all2"]) - investigate_log("[key_name(usr)] has deleted all medical records.", INVESTIGATE_RECORDS) - GLOB.data_core.medical.Cut() - temp = "All records deleted." - - else if(href_list["field"]) - var/a1 = active1 - var/a2 = active2 - switch(href_list["field"]) - if("fingerprint") - if(active1) - var/t1 = stripped_input("Please input fingerprint hash:", "Med. records", active1.fields["fingerprint"], null) - if(!canUseMedicalRecordsConsole(usr, t1, a1)) - return - active1.fields["fingerprint"] = t1 - if("gender") - if(active1) - if(active1.fields["gender"] == "Male") - active1.fields["gender"] = "Female" - else if(active1.fields["gender"] == "Female") - active1.fields["gender"] = "Other" - else - active1.fields["gender"] = "Male" - if("age") - if(active1) - var/t1 = input("Please input age:", "Med. records", active1.fields["age"], null) as num - if(!canUseMedicalRecordsConsole(usr, t1, a1)) - return - active1.fields["age"] = t1 - if("species") - if(active1) - var/t1 = stripped_input("Please input species name", "Med. records", active1.fields["species"], null) - if(!canUseMedicalRecordsConsole(usr, t1, a1)) - return - active1.fields["species"] = t1 - if("mi_dis") - if(active2) - var/t1 = stripped_input("Please input minor disabilities list:", "Med. records", active2.fields["mi_dis"], null) - if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) - return - active2.fields["mi_dis"] = t1 - if("mi_dis_d") - if(active2) - var/t1 = stripped_input("Please summarize minor dis.:", "Med. records", active2.fields["mi_dis_d"], null) - if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) - return - active2.fields["mi_dis_d"] = t1 - if("ma_dis") - if(active2) - var/t1 = stripped_input("Please input major disabilities list:", "Med. records", active2.fields["ma_dis"], null) - if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) - return - active2.fields["ma_dis"] = t1 - if("ma_dis_d") - if(active2) - var/t1 = stripped_input("Please summarize major dis.:", "Med. records", active2.fields["ma_dis_d"], null) - if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) - return - active2.fields["ma_dis_d"] = t1 - if("alg") - if(active2) - var/t1 = stripped_input("Please state allergies:", "Med. records", active2.fields["alg"], null) - if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) - return - active2.fields["alg"] = t1 - if("alg_d") - if(active2) - var/t1 = stripped_input("Please summarize allergies:", "Med. records", active2.fields["alg_d"], null) - if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) - return - active2.fields["alg_d"] = t1 - if("cdi") - if(active2) - var/t1 = stripped_input("Please state diseases:", "Med. records", active2.fields["cdi"], null) - if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) - return - active2.fields["cdi"] = t1 - if("cdi_d") - if(active2) - var/t1 = stripped_input("Please summarize diseases:", "Med. records", active2.fields["cdi_d"], null) - if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) - return - active2.fields["cdi_d"] = t1 - if("notes") - if(active2) - var/t1 = stripped_input("Please summarize notes:", "Med. records", active2.fields["notes"], null) - if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) - return - active2.fields["notes"] = t1 - if("p_stat") - if(active1) - temp = "Physical Condition:
\n\t*Deceased*
\n\t*Unconscious*
\n\tActive
\n\tPhysically Unfit
" - if("m_stat") - if(active1) - temp = "Mental Condition:
\n\t*Insane*
\n\t*Unstable*
\n\t*Watch*
\n\tStable
" - if("blood_type") - if(active2) - temp = "Blood Type:
\n\tA- A+
\n\tB- B+
\n\tAB- AB+
\n\tO- O+
" - if("b_dna") - if(active2) - var/t1 = stripped_input("Please input DNA hash:", "Med. records", active2.fields["b_dna"], null) - if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) - return - active2.fields["b_dna"] = t1 - if("show_photo_front") - if(active1) - if(active1.fields["photo_front"]) - if(istype(active1.fields["photo_front"], /obj/item/photo)) - var/obj/item/photo/P = active1.fields["photo_front"] - P.show(usr) - if("show_photo_side") - if(active1) - if(active1.fields["photo_side"]) - if(istype(active1.fields["photo_side"], /obj/item/photo)) - var/obj/item/photo/P = active1.fields["photo_side"] - P.show(usr) - else - - else if(href_list["p_stat"]) - if(active1) - switch(href_list["p_stat"]) - if("deceased") - active1.fields["p_stat"] = "*Deceased*" - if("unconscious") - active1.fields["p_stat"] = "*Unconscious*" - if("active") - active1.fields["p_stat"] = "Active" - if("unfit") - active1.fields["p_stat"] = "Physically Unfit" - - else if(href_list["m_stat"]) - if(active1) - switch(href_list["m_stat"]) - if("insane") - active1.fields["m_stat"] = "*Insane*" - if("unstable") - active1.fields["m_stat"] = "*Unstable*" - if("watch") - active1.fields["m_stat"] = "*Watch*" - if("stable") - active1.fields["m_stat"] = "Stable" - - - else if(href_list["blood_type"]) - if(active2) - switch(href_list["blood_type"]) - if("an") - active2.fields["blood_type"] = "A-" - if("bn") - active2.fields["blood_type"] = "B-" - if("abn") - active2.fields["blood_type"] = "AB-" - if("on") - active2.fields["blood_type"] = "O-" - if("ap") - active2.fields["blood_type"] = "A+" - if("bp") - active2.fields["blood_type"] = "B+" - if("abp") - active2.fields["blood_type"] = "AB+" - if("op") - active2.fields["blood_type"] = "O+" - - - else if(href_list["del_r"]) - if(active2) - temp = "Are you sure you wish to delete the record (Medical Portion Only)?
\n\tYes
\n\tNo
" - - else if(href_list["del_r2"]) - investigate_log("[key_name(usr)] has deleted the medical records for [active1.fields["name"]].", INVESTIGATE_RECORDS) - if(active2) - qdel(active2) - active2 = null - - else if(href_list["d_rec"]) - active1 = find_record("id", href_list["d_rec"], GLOB.data_core.general) - if(active1) - active2 = find_record("id", href_list["d_rec"], GLOB.data_core.medical) - if(!active2) - active1 = null - screen = 4 - - else if(href_list["new"]) - if((istype(active1, /datum/data/record) && !( istype(active2, /datum/data/record) ))) - var/datum/data/record/R = new /datum/data/record( ) - R.fields["name"] = active1.fields["name"] - R.fields["id"] = active1.fields["id"] - R.name = text("Medical Record #[]", R.fields["id"]) - R.fields["blood_type"] = "Unknown" - R.fields["b_dna"] = "Unknown" - R.fields["mi_dis"] = "None" - R.fields["mi_dis_d"] = "No minor disabilities have been diagnosed." - R.fields["ma_dis"] = "None" - R.fields["ma_dis_d"] = "No major disabilities have been diagnosed." - R.fields["alg"] = "None" - R.fields["alg_d"] = "No allergies have been detected in this patient." - R.fields["cdi"] = "None" - R.fields["cdi_d"] = "No diseases have been diagnosed at the moment." - R.fields["notes"] = "No notes." - GLOB.data_core.medical += R - active2 = R - screen = 4 - - else if(href_list["add_c"]) - if(!(active2 in GLOB.data_core.medical)) - return - var/a2 = active2 - var/t1 = stripped_multiline_input("Add Comment:", "Med. records", null, null) - if(!canUseMedicalRecordsConsole(usr, t1, null, a2)) - return - var/counter = 1 - while(active2.fields[text("com_[]", counter)]) - counter++ - active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []
[]", authenticated, rank, station_time_timestamp(), time2text(world.realtime, "MMM DD"), GLOB.year_integer+540, t1) - - else if(href_list["del_c"]) - if((istype(active2, /datum/data/record) && active2.fields[text("com_[]", href_list["del_c"])])) - active2.fields[text("com_[]", href_list["del_c"])] = "Deleted" - - else if(href_list["search"]) - var/t1 = stripped_input(usr, "Search String: (Name, DNA, or ID)", "Med. records") - if(!canUseMedicalRecordsConsole(usr, t1)) - return - active1 = null - active2 = null - t1 = lowertext(t1) - for(var/datum/data/record/R in GLOB.data_core.medical) - if((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["b_dna"]))) - active2 = R - else - //Foreach continue //goto(3229) - if(!( active2 )) - temp = text("Could not locate record [].", sanitize(t1)) - else - for(var/datum/data/record/E in GLOB.data_core.general) - if((E.fields["name"] == active2.fields["name"] || E.fields["id"] == active2.fields["id"])) - active1 = E - else - //Foreach continue //goto(3334) - screen = 4 - - else if(href_list["print_p"]) - if(!( printing )) - printing = 1 - GLOB.data_core.medicalPrintCount++ - playsound(loc, 'sound/blank.ogg', 100, TRUE) - sleep(30) - var/obj/item/paper/P = new /obj/item/paper( loc ) - P.info = "
Medical Record - (MR-[GLOB.data_core.medicalPrintCount])

" - if(active1 in GLOB.data_core.general) - P.info += text("Name: [] ID: []
\nGender: []
\nAge: []
", active1.fields["name"], active1.fields["id"], active1.fields["gender"], active1.fields["age"]) - P.info += "\nSpecies: [active1.fields["species"]]
" - P.info += text("\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", active1.fields["fingerprint"], active1.fields["p_stat"], active1.fields["m_stat"]) - else - P.info += "General Record Lost!
" - if(active2 in GLOB.data_core.medical) - P.info += text("
\n
Medical Data

\nBlood Type: []
\nDNA: []
\n
\nMinor Disabilities: []
\nDetails: []
\n
\nMajor Disabilities: []
\nDetails: []
\n
\nAllergies: []
\nDetails: []
\n
\nCurrent Diseases: [] (per disease info placed in log/comment section)
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\n
Comments/Log

", active2.fields["blood_type"], active2.fields["b_dna"], active2.fields["mi_dis"], active2.fields["mi_dis_d"], active2.fields["ma_dis"], active2.fields["ma_dis_d"], active2.fields["alg"], active2.fields["alg_d"], active2.fields["cdi"], active2.fields["cdi_d"], active2.fields["notes"]) - var/counter = 1 - while(active2.fields[text("com_[]", counter)]) - P.info += text("[]
", active2.fields[text("com_[]", counter)]) - counter++ - P.name = text("MR-[] '[]'", GLOB.data_core.medicalPrintCount, active1.fields["name"]) - else - P.info += "Medical Record Lost!
" - P.name = text("MR-[] '[]'", GLOB.data_core.medicalPrintCount, "Record Lost") - P.info += "" - P.update_icon() - printing = null - - add_fingerprint(usr) - updateUsrDialog() - return - -/obj/machinery/computer/med_data/emp_act(severity) - . = ..() - if(!(stat & (BROKEN|NOPOWER)) && !(. & EMP_PROTECT_SELF)) - for(var/datum/data/record/R in GLOB.data_core.medical) - if(prob(10/severity)) - switch(rand(1,6)) - if(1) - if(prob(10)) - R.fields["name"] = random_unique_lizard_name(R.fields["gender"],1) - else - R.fields["name"] = random_unique_name(R.fields["gender"],1) - if(2) - R.fields["gender"] = pick("Male", "Female", "Other") - if(3) - R.fields["age"] = rand(AGE_MIN, AGE_MAX) - if(4) - R.fields["blood_type"] = random_blood_type() - if(5) - R.fields["p_stat"] = pick("*Unconscious*", "Active", "Physically Unfit") - if(6) - R.fields["m_stat"] = pick("*Insane*", "*Unstable*", "*Watch*", "Stable") - continue - - else if(prob(1)) - qdel(R) - continue - -/obj/machinery/computer/med_data/proc/canUseMedicalRecordsConsole(mob/user, message = 1, record1, record2) - if(user) - if(message) - if(authenticated) - if(user.canUseTopic(src, !issilicon(user))) - if(!record1 || record1 == active1) - if(!record2 || record2 == active2) - return 1 - return 0 - -/obj/machinery/computer/med_data/laptop - name = "medical laptop" - desc = "" - icon_state = "laptop" - icon_screen = "medlaptop" - icon_keyboard = "laptop_key" - pass_flags = PASSTABLE diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm deleted file mode 100644 index 7a93c982b5..0000000000 --- a/code/game/machinery/computer/pod.dm +++ /dev/null @@ -1,133 +0,0 @@ -/obj/machinery/computer/pod - name = "mass driver launch control" - desc = "" - var/obj/machinery/mass_driver/connected = null - var/title = "Mass Driver Controls" - var/id = 1 - var/timing = 0 - var/time = 30 - var/range = 4 - - -/obj/machinery/computer/pod/Initialize() - . = ..() - for(var/obj/machinery/mass_driver/M in range(range, src)) - if(M.id == id) - connected = M - - -/obj/machinery/computer/pod/proc/alarm() - if(stat & (NOPOWER|BROKEN)) - return - - if(!connected) - say("Cannot locate mass driver connector. Cancelling firing sequence!") - return - - for(var/obj/machinery/door/poddoor/M in range(range, src)) - if(M.id == id) - M.open() - - sleep(20) - for(var/obj/machinery/mass_driver/M in range(range, src)) - if(M.id == id) - M.power = connected.power - M.drive() - - sleep(50) - for(var/obj/machinery/door/poddoor/M in range(range, src)) - if(M.id == id) - M.close() - -/obj/machinery/computer/pod/ui_interact(mob/user) - . = ..() - if(!allowed(user)) - to_chat(user, "Access denied.") - return - - var/dat = "" - if(connected) - var/d2 - if(timing) //door controls do not need timers. - d2 = "Stop Time Launch" - else - d2 = "Initiate Time Launch" - dat += "
\nTimer System: [d2]\nTime Left: [DisplayTimeText((time SECONDS))] - - + +" - var/temp = "" - var/list/L = list( 0.25, 0.5, 1, 2, 4, 8, 16 ) - for(var/t in L) - if(t == connected.power) - temp += "[t] " - else - temp += "[t] " - dat += "
\nPower Level: [temp]
\nFiring Sequence
\nTest Fire Driver
\nToggle Outer Door
" - else - dat += "
\nToggle Outer Door
" - dat += "

Close" - add_fingerprint(usr) - var/datum/browser/popup = new(user, "computer", title, 400, 500) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - popup.open() - -/obj/machinery/computer/pod/process() - if(!..()) - return - if(timing) - if(time > 0) - time = round(time) - 1 - else - alarm() - time = 0 - timing = 0 - updateDialog() - - -/obj/machinery/computer/pod/Topic(href, href_list) - if(..()) - return - if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr)) - usr.set_machine(src) - if(href_list["power"]) - var/t = text2num(href_list["power"]) - t = min(max(0.25, t), 16) - if(connected) - connected.power = t - if(href_list["alarm"]) - alarm() - if(href_list["time"]) - timing = text2num(href_list["time"]) - if(href_list["tp"]) - var/tp = text2num(href_list["tp"]) - time += tp - time = min(max(round(time), 0), 120) - if(href_list["door"]) - for(var/obj/machinery/door/poddoor/M in range(range, src)) - if(M.id == id) - if(M.density) - M.open() - else - M.close() - if(href_list["drive"]) - for(var/obj/machinery/mass_driver/M in range(range, src)) - if(M.id == id) - M.power = connected.power - M.drive() - updateUsrDialog() - -/obj/machinery/computer/pod/old - name = "\improper DoorMex control console" - title = "Door Controls" - icon_state = "oldcomp" - icon_screen = "library" - icon_keyboard = null - -/obj/machinery/computer/pod/old/syndicate - name = "\improper ProComp Executive IIc" - desc = "" - title = "External Airlock Controls" - req_access = list(ACCESS_SYNDICATE) - -/obj/machinery/computer/pod/old/swf - name = "\improper Magix System IV" - desc = "" diff --git a/code/game/machinery/computer/prisoner/_prisoner.dm b/code/game/machinery/computer/prisoner/_prisoner.dm deleted file mode 100644 index cafb1fa0d9..0000000000 --- a/code/game/machinery/computer/prisoner/_prisoner.dm +++ /dev/null @@ -1,52 +0,0 @@ -/obj/machinery/computer/prisoner - var/obj/item/card/id/prisoner/contained_id - -/obj/machinery/computer/prisoner/Destroy() - if(contained_id) - contained_id.forceMove(get_turf(src)) - return ..() - - -/obj/machinery/computer/prisoner/examine(mob/user) - . = ..() - if(contained_id) - . += "Alt-click to eject the ID card." - - - -/obj/machinery/computer/prisoner/AltClick(mob/user) - id_eject(user) - return ..() - -/obj/machinery/computer/prisoner/proc/id_insert(mob/user, obj/item/card/id/prisoner/P) - if(istype(P)) - if(contained_id) - to_chat(user, "There's already an ID card in the console!") - return - if(!user.transferItemToLoc(P, src)) - return - contained_id = P - user.visible_message("[user] inserts an ID card into the console.", \ - "I insert the ID card into the console.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - updateUsrDialog() - -/obj/machinery/computer/prisoner/proc/id_eject(mob/user) - if(!contained_id) - to_chat(user, "There's no ID card in the console!") - return - else - contained_id.forceMove(drop_location()) - if(!issilicon(user) && Adjacent(user)) - user.put_in_hands(contained_id) - contained_id = null - user.visible_message("[user] gets an ID card from the console.", \ - "I get the ID card from the console.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - updateUsrDialog() - -/obj/machinery/computer/prisoner/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/card/id/prisoner)) - id_insert(user, I) - else - return ..() diff --git a/code/game/machinery/computer/prisoner/gulag_teleporter.dm b/code/game/machinery/computer/prisoner/gulag_teleporter.dm deleted file mode 100644 index de34d2dff4..0000000000 --- a/code/game/machinery/computer/prisoner/gulag_teleporter.dm +++ /dev/null @@ -1,145 +0,0 @@ -//computer that handle the points and teleports the prisoner -/obj/machinery/computer/prisoner/gulag_teleporter_computer - name = "labor camp teleporter console" - desc = "" - icon_screen = "explosive" - icon_keyboard = "security_key" - req_access = list(ACCESS_ARMORY) - circuit = /obj/item/circuitboard/computer/gulag_teleporter_console - ui_x = 455 - ui_y = 440 - - var/default_goal = 200 - var/obj/machinery/gulag_teleporter/teleporter = null - var/obj/structure/gulag_beacon/beacon = null - var/mob/living/carbon/human/prisoner = null - var/datum/data/record/temporary_record = null - - light_color = LIGHT_COLOR_RED - -/obj/machinery/computer/prisoner/gulag_teleporter_computer/Initialize() - . = ..() - scan_machinery() - -/obj/machinery/computer/prisoner/gulag_teleporter_computer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "gulag_console", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/computer/prisoner/gulag_teleporter_computer/ui_data(mob/user) - var/list/data = list() - - var/list/prisoner_list = list() - var/can_teleport = FALSE - - if(teleporter && (teleporter.occupant && ishuman(teleporter.occupant))) - prisoner = teleporter.occupant - prisoner_list["name"] = prisoner.real_name - if(contained_id) - can_teleport = TRUE - if(!isnull(GLOB.data_core.general)) - for(var/r in GLOB.data_core.security) - var/datum/data/record/R = r - if(R.fields["name"] == prisoner_list["name"]) - temporary_record = R - prisoner_list["crimstat"] = temporary_record.fields["criminal"] - - data["prisoner"] = prisoner_list - - if(teleporter) - data["teleporter"] = teleporter - data["teleporter_location"] = "([teleporter.x], [teleporter.y], [teleporter.z])" - data["teleporter_lock"] = teleporter.locked - data["teleporter_state_open"] = teleporter.state_open - if(beacon) - data["beacon"] = beacon - data["beacon_location"] = "([beacon.x], [beacon.y], [beacon.z])" - if(contained_id) - data["id"] = contained_id - data["id_name"] = contained_id.registered_name - data["goal"] = contained_id.goal - data["can_teleport"] = can_teleport - - return data - -/obj/machinery/computer/prisoner/gulag_teleporter_computer/ui_act(action, list/params) - if(isliving(usr)) - playsound(src, 'sound/blank.ogg', 50, FALSE) - if(..()) - return - if(!allowed(usr)) - to_chat(usr, "Access denied.") - return - switch(action) - if("scan_teleporter") - teleporter = findteleporter() - if("scan_beacon") - beacon = findbeacon() - if("handle_id") - if(contained_id) - id_eject(usr) - else - id_insert(usr) - if("set_goal") - var/new_goal = input("Set the amount of points:", "Points", contained_id.goal) as num|null - if(!isnum(new_goal)) - return - if(!new_goal) - new_goal = default_goal - if (new_goal > 1000) - to_chat(usr, "The entered amount of points is too large. Points have instead been set to the maximum allowed amount.") - contained_id.goal = CLAMP(new_goal, 0, 1000) //maximum 1000 points - if("toggle_open") - if(teleporter.locked) - to_chat(usr, "The teleporter must be unlocked first.") - return - teleporter.toggle_open() - if("teleporter_lock") - if(teleporter.state_open) - to_chat(usr, "The teleporter must be closed first.") - return - teleporter.locked = !teleporter.locked - if("teleport") - if(!teleporter || !beacon) - return - addtimer(CALLBACK(src, PROC_REF(teleport), usr), 5) - -/obj/machinery/computer/prisoner/gulag_teleporter_computer/proc/scan_machinery() - teleporter = findteleporter() - beacon = findbeacon() - -/obj/machinery/computer/prisoner/gulag_teleporter_computer/proc/findteleporter() - var/obj/machinery/gulag_teleporter/teleporterf = null - - for(var/direction in GLOB.cardinals) - teleporterf = locate(/obj/machinery/gulag_teleporter, get_step(src, direction)) - if(teleporterf && teleporterf.is_operational()) - return teleporterf - -/obj/machinery/computer/prisoner/gulag_teleporter_computer/proc/findbeacon() - return locate(/obj/structure/gulag_beacon) - -/obj/machinery/computer/prisoner/gulag_teleporter_computer/proc/teleport(mob/user) - if(!contained_id) //incase the ID was removed after the transfer timer was set. - say("Warning: Unable to transfer prisoner without a valid Prisoner ID inserted!") - return - var/id_goal_not_set - if(!contained_id.goal) - id_goal_not_set = TRUE - contained_id.goal = default_goal - say("[contained_id]'s ID card goal defaulting to [contained_id.goal] points.") - log_game("[key_name(user)] teleported [key_name(prisoner)] to the Labor Camp [COORD(beacon)] for [id_goal_not_set ? "default goal of ":""][contained_id.goal] points.") - teleporter.handle_prisoner(contained_id, temporary_record) - playsound(src, 'sound/blank.ogg', 50, TRUE) - prisoner.forceMove(get_turf(beacon)) - prisoner.Paralyze(40) // small travel dizziness - to_chat(prisoner, "The teleportation makes you a little dizzy.") - new /obj/effect/particle_effect/sparks(get_turf(prisoner)) - playsound(src, "sparks", 50, TRUE) - if(teleporter.locked) - teleporter.locked = FALSE - teleporter.toggle_open() - contained_id = null - temporary_record = null diff --git a/code/game/machinery/computer/prisoner/management.dm b/code/game/machinery/computer/prisoner/management.dm deleted file mode 100644 index 29e55d37be..0000000000 --- a/code/game/machinery/computer/prisoner/management.dm +++ /dev/null @@ -1,138 +0,0 @@ -/obj/machinery/computer/prisoner/management - name = "prisoner management console" - desc = "" - icon_screen = "explosive" - icon_keyboard = "security_key" - req_access = list(ACCESS_BRIG) - var/id = 0 - var/temp = null - var/status = 0 - var/timeleft = 60 - var/stop = 0 - var/screen = 0 // 0 - No Access Denied, 1 - Access allowed - circuit = /obj/item/circuitboard/computer/prisoner - - light_color = LIGHT_COLOR_RED - -/obj/machinery/computer/prisoner/management/ui_interact(mob/user) - . = ..() - if(isliving(user)) - playsound(src, 'sound/blank.ogg', 50, FALSE) - var/dat = "" - if(screen == 0) - dat += "
{Log In}" - else if(screen == 1) - dat += "

Prisoner ID Management

" - if(contained_id) - dat += text("[contained_id]
") - dat += text("Collected Points: [contained_id.points]. Reset.
") - dat += text("Card goal: [contained_id.goal]. Set
") - dat += text("Space Law recommends quotas of 100 points per minute they would normally serve in the brig.
") - else - dat += text("Insert Prisoner ID.
") - dat += "

Prisoner Implant Management

" - dat += "
Chemical Implants
" - var/turf/Tr = null - for(var/obj/item/implant/chem/C in GLOB.tracked_chem_implants) - Tr = get_turf(C) - if((Tr) && (Tr.z != src.z)) - continue//Out of range - if(!C.imp_in) - continue - dat += "ID: [C.imp_in.name] | Remaining Units: [C.reagents.total_volume]
" - dat += "| Inject: " - dat += "((1))" - dat += "((5))" - dat += "((10))
" - dat += "********************************
" - dat += "
Tracking Implants
" - for(var/obj/item/implant/tracking/T in GLOB.tracked_implants) - if(!isliving(T.imp_in)) - continue - Tr = get_turf(T) - if((Tr) && (Tr.z != src.z)) - continue//Out of range - - var/loc_display = "Unknown" - var/mob/living/M = T.imp_in - if(is_station_level(Tr.z) && !isspaceturf(M.loc)) - var/turf/mob_loc = get_turf(M) - loc_display = mob_loc.loc - - dat += "ID: [T.imp_in.name] | Location: [loc_display]
" - dat += "(Message Holder) |
" - dat += "********************************
" - dat += "
{Log Out}" - var/datum/browser/popup = new(user, "computer", "Prisoner Management Console", 400, 500) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - return - -/obj/machinery/computer/prisoner/management/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/card/id)) - if(screen) - id_insert(user) - else - to_chat(user, "Unauthorized access.") - else - return ..() - -/obj/machinery/computer/prisoner/management/process() - if(!..()) - src.updateDialog() - return - -/obj/machinery/computer/prisoner/management/Topic(href, href_list) - if(..()) - return - if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr)) - usr.set_machine(src) - - if(href_list["id"]) - if(href_list["id"] =="insert" && !contained_id) - id_insert(usr) - else if(contained_id) - switch(href_list["id"]) - if("eject") - id_eject(usr) - if("reset") - contained_id.points = 0 - if("setgoal") - var/num = round(input(usr, "Choose prisoner's goal:", "Input an Integer", null) as num|null) - if(num >= 0) - num = min(num,1000) //Cap the quota to the equivilent of 10 minutes. - contained_id.goal = num - else if(href_list["inject1"]) - var/obj/item/implant/I = locate(href_list["inject1"]) in GLOB.tracked_chem_implants - if(I && istype(I)) - I.activate(1) - else if(href_list["inject5"]) - var/obj/item/implant/I = locate(href_list["inject5"]) in GLOB.tracked_chem_implants - if(I && istype(I)) - I.activate(5) - else if(href_list["inject10"]) - var/obj/item/implant/I = locate(href_list["inject10"]) in GLOB.tracked_chem_implants - if(I && istype(I)) - I.activate(10) - - else if(href_list["lock"]) - if(allowed(usr)) - screen = !screen - playsound(src, 'sound/blank.ogg', 50, FALSE) - else - to_chat(usr, "Unauthorized access.") - - else if(href_list["warn"]) - var/warning = copytext(sanitize(input(usr,"Message:","Enter your message here!","")),1,MAX_MESSAGE_LEN) - if(!warning) - return - var/obj/item/implant/I = locate(href_list["warn"]) in GLOB.tracked_implants - if(I && istype(I) && I.imp_in) - var/mob/living/R = I.imp_in - to_chat(R, "I hear a voice in your head saying: '[warning]'") - log_directed_talk(usr, R, warning, LOG_SAY, "implant message") - - src.add_fingerprint(usr) - src.updateUsrDialog() - return diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm deleted file mode 100644 index 9586dc80e6..0000000000 --- a/code/game/machinery/computer/robot.dm +++ /dev/null @@ -1,172 +0,0 @@ -/obj/machinery/computer/robotics - name = "robotics control console" - desc = "" - icon_screen = "robot" - icon_keyboard = "rd_key" - req_access = list(ACCESS_ROBOTICS) - circuit = /obj/item/circuitboard/computer/robotics - light_color = LIGHT_COLOR_PINK - var/temp = null - - -/obj/machinery/computer/robotics/proc/can_control(mob/user, mob/living/silicon/robot/R) - . = FALSE - if(!istype(R)) - return - if(isAI(user)) - if (R.connected_ai != user) - return - if(iscyborg(user)) - if (R != user) - return - if(R.scrambledcodes) - return - return TRUE - -/obj/machinery/computer/robotics/ui_interact(mob/user) - . = ..() - user.set_machine(src) - var/dat - var/list/robo_list = list() - var/robot_count - for(var/mob/living/silicon/robot/R in GLOB.silicon_mobs) - if(!can_control(user, R)) - continue - if(z != (get_turf(R)).z) - continue - robot_count++ - var/unit_sync = "Independent" - if(R.connected_ai) - unit_sync = "Slaved to [R.connected_ai]" - if(!robo_list[unit_sync]) - robo_list[unit_sync] = list() - robo_list[unit_sync] += R - - dat += "

Cyborgs


" - if(!robo_list.len) - dat += "
No cyborg units detected within access parameters.


" - else - if(robo_list.len > 1) - sortTim(robo_list, GLOBAL_PROC_REF(cmp_text_asc)) - for(var/ai_unit in robo_list) - dat += "

[ai_unit]

" - var/spacer - for(var/robo in robo_list[ai_unit]) - if(spacer) - dat += "

" - else - spacer = TRUE - var/mob/living/silicon/robot/R = robo - dat += "Name: [R.name]
" - var/can_move = (R.mobility_flags & MOBILITY_MOVE) - dat += "Status: [R.stat ? "Not Responding" : (can_move ? "Normal" : "Locked Down")]
" - - if(can_move) - dat += "Cell: [R.cell ? "[R.cell.percent()]%" : "No Cell Detected"]
" - - dat += "Module: [R.module ? "[R.module.name] Module" : "No Module Detected"]
" - dat += "Unit Controls: " - if(issilicon(user) && user != R) - var/mob/living/silicon/S = user - if(S.hack_software && !R.emagged) - dat += "(Hack) " - else if(IsAdminGhost(user) && !R.emagged) - dat += "(Hack) " - dat += "([(R.mobility_flags & MOBILITY_MOVE) ? "Lockdown" : "Release"]) " - dat += "(Destroy)" - dat += "
" - - dat += "

Drones

" - var/drones = 0 - for(var/mob/living/simple_animal/drone/D in GLOB.drones_list) - if(D.hacked) - continue - if(z != (get_turf(D)).z) - continue - if(drones) - dat += "

" - else - dat += "
" - drones++ - dat += "Name: [D.name]
" - dat += "Status: [D.stat ? "Not Responding" : "Normal"]
" - dat += "Unit Controls: " - dat += "(Destroy)" - - if(drones) - dat += "
" - else - dat += "
No drone units detected within access parameters.
" - - var/window_height = min((300+((robot_count+drones) * 110)), 800) - - var/datum/browser/popup = new(user, "computer", "Robotics Control Console", 375, window_height) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - popup.open() - -/obj/machinery/computer/robotics/Topic(href, href_list) - . = ..() - if(.) - return - - if (href_list["temp"]) - temp = null - - else if (href_list["killbot"]) - if(allowed(usr)) - var/mob/living/silicon/robot/R = locate(href_list["killbot"]) in GLOB.silicon_mobs - if(can_control(usr, R)) - var/choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort") - if(choice == "Confirm" && can_control(usr, R) && !..()) - var/turf/T = get_turf(R) - message_admins("[ADMIN_LOOKUPFLW(usr)] detonated [key_name_admin(R, R.client)] at [ADMIN_VERBOSEJMP(T)]!") - log_game("\[key_name(usr)] detonated [key_name(R)]!") - if(R.connected_ai) - to_chat(R.connected_ai, "

ALERT - Cyborg detonation detected: [R.name]
") - R.self_destruct() - else - to_chat(usr, "Access Denied.") - - else if (href_list["stopbot"]) - if(allowed(usr)) - var/mob/living/silicon/robot/R = locate(href_list["stopbot"]) in GLOB.silicon_mobs - if(can_control(usr, R)) - var/choice = input("Are you certain you wish to [!R.lockcharge ? "lock down" : "release"] [R.name]?") in list("Confirm", "Abort") - if(choice == "Confirm" && can_control(usr, R) && !..()) - message_admins("[ADMIN_LOOKUPFLW(usr)] [!R.lockcharge ? "locked down" : "released"] [ADMIN_LOOKUPFLW(R)]!") - log_game("[key_name(usr)] [!R.lockcharge ? "locked down" : "released"] [key_name(R)]!") - R.SetLockdown(!R.lockcharge) - to_chat(R, "[!R.lockcharge ? "My lockdown has been lifted!" : "I have been locked down!"]") - if(R.connected_ai) - to_chat(R.connected_ai, "[!R.lockcharge ? "NOTICE - Cyborg lockdown lifted" : "ALERT - Cyborg lockdown detected"]: [R.name]
") - - else - to_chat(usr, "Access Denied.") - - else if (href_list["magbot"]) - var/mob/living/silicon/S = usr - if((istype(S) && S.hack_software) || IsAdminGhost(usr)) - var/mob/living/silicon/robot/R = locate(href_list["magbot"]) in GLOB.silicon_mobs - if(istype(R) && !R.emagged && (R.connected_ai == usr || IsAdminGhost(usr)) && !R.scrambledcodes && can_control(usr, R)) - log_game("[key_name(usr)] emagged [key_name(R)] using robotic console!") - message_admins("[ADMIN_LOOKUPFLW(usr)] emagged cyborg [key_name_admin(R)] using robotic console!") - R.SetEmagged(TRUE) - - else if (href_list["killdrone"]) - if(allowed(usr)) - var/mob/living/simple_animal/drone/D = locate(href_list["killdrone"]) in GLOB.mob_list - if(D.hacked) - to_chat(usr, "ERROR: [D] is not responding to external commands.") - else - var/turf/T = get_turf(D) - message_admins("[ADMIN_LOOKUPFLW(usr)] detonated [key_name_admin(D)] at [ADMIN_VERBOSEJMP(T)]!") - log_game("[key_name(usr)] detonated [key_name(D)]!") - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, TRUE, D) - s.start() - D.visible_message("\the [D] self destructs!") - D.gib() - - - updateUsrDialog() diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm deleted file mode 100644 index fa1f223e1f..0000000000 --- a/code/game/machinery/computer/security.dm +++ /dev/null @@ -1,918 +0,0 @@ -/obj/machinery/computer/secure_data//TODO:SANITY - name = "security records console" - desc = "" - icon_screen = "security" - icon_keyboard = "security_key" - req_one_access = list(ACCESS_SECURITY, ACCESS_FORENSICS_LOCKERS) - circuit = /obj/item/circuitboard/computer/secure_data - var/rank = null - var/screen = null - var/datum/data/record/active1 = null - var/datum/data/record/active2 = null - var/temp = null - var/printing = null - var/can_change_id = 0 - var/list/Perp - var/tempname = null - //Sorting Variables - var/sortBy = "name" - var/order = 1 // -1 = Descending - 1 = Ascending - var/maxFine = 1000 - - light_color = LIGHT_COLOR_RED - -/obj/machinery/computer/secure_data/syndie - icon_keyboard = "syndie_key" - -/obj/machinery/computer/secure_data/laptop - name = "security laptop" - desc = "" - icon_state = "laptop" - icon_screen = "seclaptop" - icon_keyboard = "laptop_key" - pass_flags = PASSTABLE - -//Someone needs to break down the dat += into chunks instead of long ass lines. -/obj/machinery/computer/secure_data/ui_interact(mob/user) - . = ..() - if(isliving(user)) - playsound(src, 'sound/blank.ogg', 50, FALSE) - if(src.z > 6) - to_chat(user, "Unable to establish a connection: \black You're too far away from the station!") - return - var/dat - - if(temp) - dat = "[temp]

Clear Screen" - else - dat = "" - if(authenticated) - switch(screen) - if(1) - - //body tag start + onload and onkeypress (onkeyup) javascript event calls - dat += "" - //search bar javascript - dat += {" - - - - - - - - "} - dat += {" -

"} - dat += "New Record
" - //search bar - dat += {" - - - - -
- Search: -
- "} - dat += {" -

- - - - -
Records:
- - - - - - - - - -"} - if(!isnull(GLOB.data_core.general)) - for(var/datum/data/record/R in sortRecord(GLOB.data_core.general, sortBy, order)) - var/crimstat = "" - for(var/datum/data/record/E in GLOB.data_core.security) - if((E.fields["name"] == R.fields["name"]) && (E.fields["id"] == R.fields["id"])) - crimstat = E.fields["criminal"] - var/background - switch(crimstat) - if("*Arrest*") - background = "'background-color:#990000;'" - if("Incarcerated") - background = "'background-color:#CD6500;'" - if("Paroled") - background = "'background-color:#CD6500;'" - if("Discharged") - background = "'background-color:#006699;'" - if("None") - background = "'background-color:#4F7529;'" - if("") - background = "''" //"'background-color:#FFFFFF;'" - crimstat = "No Record." - dat += "" - dat += text("", R.fields["name"], R.fields["id"], R.fields["rank"], R.fields["fingerprint"], R.fields["name"]) - dat += text("", R.fields["id"]) - dat += text("", R.fields["rank"]) - dat += text("", R.fields["fingerprint"]) - dat += text("", crimstat) - dat += {" -
NameIDRankFingerprintsCriminal Status
[][][][][]
- -
"} - dat += "Record Maintenance

" - dat += "{Log Out}" - if(2) - dat += "Records Maintenance
" - dat += "
Delete All Records

Back" - if(3) - dat += "Security Record
" - if(istype(active1, /datum/data/record) && GLOB.data_core.general.Find(active1)) - if(istype(active1.fields["photo_front"], /obj/item/photo)) - var/obj/item/photo/P1 = active1.fields["photo_front"] - user << browse_rsc(P1.picture.picture_image, "photo_front") - if(istype(active1.fields["photo_side"], /obj/item/photo)) - var/obj/item/photo/P2 = active1.fields["photo_side"] - user << browse_rsc(P2.picture.picture_image, "photo_side") - dat += {" -
- - - - "} - dat += "" - dat += {" - - - -
Name: [active1.fields["name"]] 
ID: [active1.fields["id"]] 
Gender: [active1.fields["gender"]] 
Age: [active1.fields["age"]] 
Species: [active1.fields["species"]] 
Rank: [active1.fields["rank"]] 
Fingerprint: [active1.fields["fingerprint"]] 
Physical Status: [active1.fields["p_stat"]] 
Mental Status: [active1.fields["m_stat"]] 
-

- Print photo
- Update front photo

- Print photo
- Update side photo
-
"} - else - dat += "
General Record Lost!
" - if((istype(active2, /datum/data/record) && GLOB.data_core.security.Find(active2))) - dat += "Security Data" - dat += "
Criminal Status: [active2.fields["criminal"]]" - dat += "

Citations: Add New" - - dat +={" - - - - - - - - "} - for(var/datum/data/crime/c in active2.fields["citation"]) - var/owed = c.fine - c.paid - dat += {" - - "} - if(owed > 0) - dat += "" - else - dat += "" - dat += {" - "} - dat += "
CrimeFineAuthorTime AddedAmount DueDel
[c.crimeName]$[c.fine][c.author][c.time]$[owed] \[Pay\]All Paid Off - \[X\] -
" - - dat += "

Minor Crimes: Add New" - - - dat +={" - - - - - - - "} - for(var/datum/data/crime/c in active2.fields["mi_crim"]) - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "
CrimeDetailsAuthorTime AddedDel
[c.crimeName][c.crimeDetails][c.author][c.time]\[X\]
" - - - dat += "
Major Crimes: Add New" - - dat +={" - - - - - - - "} - for(var/datum/data/crime/c in active2.fields["ma_crim"]) - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" - dat += "
CrimeDetailsAuthorTime AddedDel
[c.crimeName][c.crimeDetails][c.author][c.time]\[X\]
" - - dat += "
\nImportant Notes:
\n\t [active2.fields["notes"]] " - dat += "

Comments/Log
" - var/counter = 1 - while(active2.fields[text("com_[]", counter)]) - dat += (active2.fields[text("com_[]", counter)] + "
") - if(active2.fields[text("com_[]", counter)] != "Deleted") - dat += text("Delete Entry

", counter) - counter++ - dat += "Add Entry

" - dat += "Delete Record (Security Only)
" - else - dat += "Security Record Lost!
" - dat += "New Security Record

" - dat += "Delete Record (ALL)
Print Record
Print Wanted Poster
Print Missing Persons Poster
Back

" - dat += "{Log Out}" - else - else - dat += "{Log In}" - var/datum/browser/popup = new(user, "secure_rec", "Security Records Console", 600, 400) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - return - -/*Revised /N -I can't be bothered to look more of the actual code outside of switch but that probably needs revising too. -What a mess.*/ -/obj/machinery/computer/secure_data/Topic(href, href_list) - . = ..() - if(.) - return . - if(!( GLOB.data_core.general.Find(active1) )) - active1 = null - if(!( GLOB.data_core.security.Find(active2) )) - active2 = null - if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr) || IsAdminGhost(usr)) - usr.set_machine(src) - switch(href_list["choice"]) -// SORTING! - if("Sorting") - // Reverse the order if clicked twice - if(sortBy == href_list["sort"]) - if(order == 1) - order = -1 - else - order = 1 - else - // New sorting order! - sortBy = href_list["sort"] - order = initial(order) -//BASIC FUNCTIONS - if("Clear Screen") - temp = null - - if("Return") - screen = 1 - active1 = null - active2 = null - - if("Log Out") - authenticated = null - screen = null - active1 = null - active2 = null - playsound(src, 'sound/blank.ogg', 50, FALSE) - - if("Log In") - var/mob/M = usr - var/obj/item/card/id/I = M.get_idcard(TRUE) - if(issilicon(M)) - var/mob/living/silicon/borg = M - active1 = null - active2 = null - authenticated = borg.name - rank = "AI" - screen = 1 - else if(IsAdminGhost(M)) - active1 = null - active2 = null - authenticated = M.client.holder.admin_signature - rank = "Central Command" - screen = 1 - else if(I && check_access(I)) - active1 = null - active2 = null - authenticated = I.registered_name - rank = I.assignment - screen = 1 - else - to_chat(usr, "Unauthorized Access.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - -//RECORD FUNCTIONS - if("Record Maintenance") - screen = 2 - active1 = null - active2 = null - - if("Browse Record") - var/datum/data/record/R = locate(href_list["d_rec"]) in GLOB.data_core.general - if(!R) - temp = "Record Not Found!" - else - active1 = active2 = R - for(var/datum/data/record/E in GLOB.data_core.security) - if((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) - active2 = E - screen = 3 - - if("Pay") - for(var/datum/data/crime/p in active2.fields["citation"]) - if(p.dataId == text2num(href_list["cdataid"])) - var/obj/item/holochip/C = usr.is_holding_item_of_type(/obj/item/holochip) - if(C && istype(C)) - var/pay = C.get_item_credit_value() - if(!pay) - to_chat(usr, "[C] doesn't seem to be worth anything!") - else - var/diff = p.fine - p.paid - GLOB.data_core.payCitation(active2.fields["id"], text2num(href_list["cdataid"]), pay) - to_chat(usr, "I have paid [pay] credit\s towards your fine.") - if (pay == diff || pay > diff || pay >= diff) - investigate_log("Citation Paid off: [p.crimeName] Fine: [p.fine] | Paid off by [key_name(usr)]", INVESTIGATE_RECORDS) - to_chat(usr, "The fine has been paid in full.") - qdel(C) - playsound(src, "terminal_type", 25, FALSE) - else - to_chat(usr, "Fines can only be paid with holochips!") - - if("Print Record") - if(!( printing )) - printing = 1 - GLOB.data_core.securityPrintCount++ - playsound(loc, 'sound/blank.ogg', 100, TRUE) - sleep(30) - var/obj/item/paper/P = new /obj/item/paper( loc ) - P.info = "
Security Record - (SR-[GLOB.data_core.securityPrintCount])

" - if((istype(active1, /datum/data/record) && GLOB.data_core.general.Find(active1))) - P.info += text("Name: [] ID: []
\nGender: []
\nAge: []
", active1.fields["name"], active1.fields["id"], active1.fields["gender"], active1.fields["age"]) - P.info += "\nSpecies: [active1.fields["species"]]
" - P.info += text("\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", active1.fields["fingerprint"], active1.fields["p_stat"], active1.fields["m_stat"]) - else - P.info += "General Record Lost!
" - if((istype(active2, /datum/data/record) && GLOB.data_core.security.Find(active2))) - P.info += text("
\n
Security Data

\nCriminal Status: []", active2.fields["criminal"]) - - P.info += "
\n
\nMinor Crimes:
\n" - P.info +={" - - - - - -"} - for(var/datum/data/crime/c in active2.fields["mi_crim"]) - P.info += "" - P.info += "" - P.info += "" - P.info += "" - P.info += "" - P.info += "
CrimeDetailsAuthorTime Added
[c.crimeName][c.crimeDetails][c.author][c.time]
" - - P.info += "
\nMajor Crimes:
\n" - P.info +={" - - - - - -"} - for(var/datum/data/crime/c in active2.fields["ma_crim"]) - P.info += "" - P.info += "" - P.info += "" - P.info += "" - P.info += "" - P.info += "
CrimeDetailsAuthorTime Added
[c.crimeName][c.crimeDetails][c.author][c.time]
" - - - P.info += text("
\nImportant Notes:
\n\t[]
\n
\n
Comments/Log

", active2.fields["notes"]) - var/counter = 1 - while(active2.fields[text("com_[]", counter)]) - P.info += text("[]
", active2.fields[text("com_[]", counter)]) - counter++ - P.name = text("SR-[] '[]'", GLOB.data_core.securityPrintCount, active1.fields["name"]) - else - P.info += "Security Record Lost!
" - P.name = text("SR-[] '[]'", GLOB.data_core.securityPrintCount, "Record Lost") - P.info += "" - P.update_icon() - printing = null - if("Print Poster") - if(!( printing )) - var/wanted_name = stripped_input(usr, "Please enter an alias for the criminal:", "Print Wanted Poster", active1.fields["name"]) - if(wanted_name) - var/default_description = "A poster declaring [wanted_name] to be a dangerous individual, wanted by Nanotrasen. Report any sightings to security immediately." - var/list/major_crimes = active2.fields["ma_crim"] - var/list/minor_crimes = active2.fields["mi_crim"] - if(major_crimes.len + minor_crimes.len) - default_description += "\n[wanted_name] is wanted for the following crimes:\n" - if(minor_crimes.len) - default_description += "\nMinor Crimes:" - for(var/datum/data/crime/c in active2.fields["mi_crim"]) - default_description += "\n[c.crimeName]\n" - default_description += "[c.crimeDetails]\n" - if(major_crimes.len) - default_description += "\nMajor Crimes:" - for(var/datum/data/crime/c in active2.fields["ma_crim"]) - default_description += "\n[c.crimeName]\n" - default_description += "[c.crimeDetails]\n" - - var/headerText = stripped_input(usr, "Please enter Poster Heading (Max 7 Chars):", "Print Wanted Poster", "WANTED", 8) - - var/info = stripped_multiline_input(usr, "Please input a description for the poster:", "Print Wanted Poster", default_description, null) - if(info) - playsound(loc, 'sound/blank.ogg', 100, TRUE) - printing = 1 - sleep(30) - if((istype(active1, /datum/data/record) && GLOB.data_core.general.Find(active1)))//make sure the record still exists. - var/obj/item/photo/photo = active1.fields["photo_front"] - new /obj/item/poster/wanted(loc, photo.picture.picture_image, wanted_name, info, headerText) - printing = 0 - if("Print Missing") - if(!( printing )) - var/missing_name = stripped_input(usr, "Please enter an alias for the missing person:", "Print Missing Persons Poster", active1.fields["name"]) - if(missing_name) - var/default_description = "A poster declaring [missing_name] to be a missing individual, missed by Nanotrasen. Report any sightings to security immediately." - - var/headerText = stripped_input(usr, "Please enter Poster Heading (Max 7 Chars):", "Print Missing Persons Poster", "MISSING", 8) - - var/info = stripped_multiline_input(usr, "Please input a description for the poster:", "Print Missing Persons Poster", default_description, null) - if(info) - playsound(loc, 'sound/blank.ogg', 100, TRUE) - printing = 1 - sleep(30) - if((istype(active1, /datum/data/record) && GLOB.data_core.general.Find(active1)))//make sure the record still exists. - var/obj/item/photo/photo = active1.fields["photo_front"] - new /obj/item/poster/wanted/missing(loc, photo.picture.picture_image, missing_name, info, headerText) - printing = 0 - -//RECORD DELETE - if("Delete All Records") - temp = "" - temp += "Are you sure you wish to delete all Security records?
" - temp += "Yes
" - temp += "No" - - if("Purge All Records") - investigate_log("[key_name(usr)] has purged all the security records.", INVESTIGATE_RECORDS) - for(var/datum/data/record/R in GLOB.data_core.security) - qdel(R) - GLOB.data_core.security.Cut() - temp = "All Security records deleted." - - if("Add Entry") - if(!( istype(active2, /datum/data/record) )) - return - var/a2 = active2 - var/t1 = stripped_multiline_input("Add Comment:", "Secure. records", null, null) - if(!canUseSecurityRecordsConsole(usr, t1, null, a2)) - return - var/counter = 1 - while(active2.fields[text("com_[]", counter)]) - counter++ - active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []
[]", src.authenticated, src.rank, station_time_timestamp(), time2text(world.realtime, "MMM DD"), GLOB.year_integer+540, t1) - - if("Delete Record (ALL)") - if(active1) - temp = "
Are you sure you wish to delete the record (ALL)?
" - temp += "Yes
" - temp += "No" - - if("Delete Record (Security)") - if(active2) - temp = "
Are you sure you wish to delete the record (Security Portion Only)?
" - temp += "Yes
" - temp += "No" - - if("Delete Entry") - if((istype(active2, /datum/data/record) && active2.fields[text("com_[]", href_list["del_c"])])) - active2.fields[text("com_[]", href_list["del_c"])] = "Deleted" -//RECORD CREATE - if("New Record (Security)") - if((istype(active1, /datum/data/record) && !( istype(active2, /datum/data/record) ))) - var/datum/data/record/R = new /datum/data/record() - R.fields["name"] = active1.fields["name"] - R.fields["id"] = active1.fields["id"] - R.name = text("Security Record #[]", R.fields["id"]) - R.fields["criminal"] = "None" - R.fields["mi_crim"] = list() - R.fields["ma_crim"] = list() - R.fields["notes"] = "No notes." - GLOB.data_core.security += R - active2 = R - screen = 3 - - if("New Record (General)") - //General Record - var/datum/data/record/G = new /datum/data/record() - G.fields["name"] = "New Record" - G.fields["id"] = "[num2hex(rand(1, 1.6777215E7), 6)]" - G.fields["rank"] = "Unassigned" - G.fields["gender"] = "Male" - G.fields["age"] = "Unknown" - G.fields["species"] = "Human" - G.fields["photo_front"] = new /icon() - G.fields["photo_side"] = new /icon() - G.fields["fingerprint"] = "?????" - G.fields["p_stat"] = "Active" - G.fields["m_stat"] = "Stable" - GLOB.data_core.general += G - active1 = G - - //Security Record - var/datum/data/record/R = new /datum/data/record() - R.fields["name"] = active1.fields["name"] - R.fields["id"] = active1.fields["id"] - R.name = text("Security Record #[]", R.fields["id"]) - R.fields["criminal"] = "None" - R.fields["mi_crim"] = list() - R.fields["ma_crim"] = list() - R.fields["notes"] = "No notes." - GLOB.data_core.security += R - active2 = R - - //Medical Record - var/datum/data/record/M = new /datum/data/record() - M.fields["id"] = active1.fields["id"] - M.fields["name"] = active1.fields["name"] - M.fields["blood_type"] = "?" - M.fields["b_dna"] = "?????" - M.fields["mi_dis"] = "None" - M.fields["mi_dis_d"] = "No minor disabilities have been declared." - M.fields["ma_dis"] = "None" - M.fields["ma_dis_d"] = "No major disabilities have been diagnosed." - M.fields["alg"] = "None" - M.fields["alg_d"] = "No allergies have been detected in this patient." - M.fields["cdi"] = "None" - M.fields["cdi_d"] = "No diseases have been diagnosed at the moment." - M.fields["notes"] = "No notes." - GLOB.data_core.medical += M - - - -//FIELD FUNCTIONS - if("Edit Field") - var/a1 = active1 - var/a2 = active2 - - switch(href_list["field"]) - if("name") - if(istype(active1, /datum/data/record) || istype(active2, /datum/data/record)) - var/t1 = copytext(sanitize(input("Please input name:", "Secure. records", active1.fields["name"], null) as text),1,MAX_MESSAGE_LEN) - if(!canUseSecurityRecordsConsole(usr, t1, a1)) - return - if(istype(active1, /datum/data/record)) - active1.fields["name"] = t1 - if(istype(active2, /datum/data/record)) - active2.fields["name"] = t1 - if("id") - if(istype(active2, /datum/data/record) || istype(active1, /datum/data/record)) - var/t1 = stripped_input(usr, "Please input id:", "Secure. records", active1.fields["id"], null) - if(!canUseSecurityRecordsConsole(usr, t1, a1)) - return - if(istype(active1, /datum/data/record)) - active1.fields["id"] = t1 - if(istype(active2, /datum/data/record)) - active2.fields["id"] = t1 - if("fingerprint") - if(istype(active1, /datum/data/record)) - var/t1 = stripped_input(usr, "Please input fingerprint hash:", "Secure. records", active1.fields["fingerprint"], null) - if(!canUseSecurityRecordsConsole(usr, t1, a1)) - return - active1.fields["fingerprint"] = t1 - if("gender") - if(istype(active1, /datum/data/record)) - if(active1.fields["gender"] == "Male") - active1.fields["gender"] = "Female" - else if(active1.fields["gender"] == "Female") - active1.fields["gender"] = "Other" - else - active1.fields["gender"] = "Male" - if("age") - if(istype(active1, /datum/data/record)) - var/t1 = input("Please input age:", "Secure. records", active1.fields["age"], null) as num|null - - if (!t1) - return - - if(!canUseSecurityRecordsConsole(usr, "age", a1)) - return - active1.fields["age"] = t1 - if("species") - if(istype(active1, /datum/data/record)) - var/t1 = input("Select a species", "Species Selection") as null|anything in GLOB.roundstart_races - if(!canUseSecurityRecordsConsole(usr, t1, a1)) - return - active1.fields["species"] = t1 - if("show_photo_front") - if(active1.fields["photo_front"]) - if(istype(active1.fields["photo_front"], /obj/item/photo)) - var/obj/item/photo/P = active1.fields["photo_front"] - P.show(usr) - if("upd_photo_front") - var/obj/item/photo/photo = get_photo(usr) - if(photo) - qdel(active1.fields["photo_front"]) - //Lets center it to a 32x32. - var/icon/I = photo.picture.picture_image - var/w = I.Width() - var/h = I.Height() - var/dw = w - 32 - var/dh = w - 32 - I.Crop(dw/2, dh/2, w - dw/2, h - dh/2) - active1.fields["photo_front"] = photo - if("print_photo_front") - if(active1.fields["photo_front"]) - if(istype(active1.fields["photo_front"], /obj/item/photo)) - var/obj/item/photo/P = active1.fields["photo_front"] - print_photo(P.picture.picture_image, active1.fields["name"]) - if("show_photo_side") - if(active1.fields["photo_side"]) - if(istype(active1.fields["photo_side"], /obj/item/photo)) - var/obj/item/photo/P = active1.fields["photo_side"] - P.show(usr) - if("upd_photo_side") - var/obj/item/photo/photo = get_photo(usr) - if(photo) - qdel(active1.fields["photo_side"]) - //Lets center it to a 32x32. - var/icon/I = photo.picture.picture_image - var/w = I.Width() - var/h = I.Height() - var/dw = w - 32 - var/dh = w - 32 - I.Crop(dw/2, dh/2, w - dw/2, h - dh/2) - active1.fields["photo_side"] = photo - if("print_photo_side") - if(active1.fields["photo_side"]) - if(istype(active1.fields["photo_side"], /obj/item/photo)) - var/obj/item/photo/P = active1.fields["photo_side"] - print_photo(P.picture.picture_image, active1.fields["name"]) - if("mi_crim_add") - if(istype(active1, /datum/data/record)) - var/t1 = stripped_input(usr, "Please input minor crime names:", "Secure. records", "", null) - var/t2 = stripped_input(usr, "Please input minor crime details:", "Secure. records", "", null) - if(!canUseSecurityRecordsConsole(usr, t1, null, a2)) - return - var/crime = GLOB.data_core.createCrimeEntry(t1, t2, authenticated, station_time_timestamp()) - GLOB.data_core.addMinorCrime(active1.fields["id"], crime) - investigate_log("New Minor Crime: [t1]: [t2] | Added to [active1.fields["name"]] by [key_name(usr)]", INVESTIGATE_RECORDS) - if("mi_crim_delete") - if(istype(active1, /datum/data/record)) - if(href_list["cdataid"]) - if(!canUseSecurityRecordsConsole(usr, "delete", null, a2)) - return - GLOB.data_core.removeMinorCrime(active1.fields["id"], href_list["cdataid"]) - if("ma_crim_add") - if(istype(active1, /datum/data/record)) - var/t1 = stripped_input(usr, "Please input major crime names:", "Secure. records", "", null) - var/t2 = stripped_input(usr, "Please input major crime details:", "Secure. records", "", null) - if(!canUseSecurityRecordsConsole(usr, t1, null, a2)) - return - var/crime = GLOB.data_core.createCrimeEntry(t1, t2, authenticated, station_time_timestamp()) - GLOB.data_core.addMajorCrime(active1.fields["id"], crime) - investigate_log("New Major Crime: [t1]: [t2] | Added to [active1.fields["name"]] by [key_name(usr)]", INVESTIGATE_RECORDS) - if("ma_crim_delete") - if(istype(active1, /datum/data/record)) - if(href_list["cdataid"]) - if(!canUseSecurityRecordsConsole(usr, "delete", null, a2)) - return - GLOB.data_core.removeMajorCrime(active1.fields["id"], href_list["cdataid"]) - if("citation_add") - if(istype(active1, /datum/data/record)) - var/t1 = stripped_input(usr, "Please input citation crime:", "Secure. records", "", null) - var/fine = FLOOR(input(usr, "Please input citation fine:", "Secure. records", 50) as num|null, 1) - - if (isnull(fine)) - return - - if(fine < 0) - to_chat(usr, "You're pretty sure that's not how money works.") - return - - fine = min(fine, maxFine) - - if(!canUseSecurityRecordsConsole(usr, t1, null, a2)) - return - - var/crime = GLOB.data_core.createCrimeEntry(t1, "", authenticated, station_time_timestamp(), fine) - for (var/obj/item/pda/P in GLOB.PDAs) - if(P.owner == active1.fields["name"]) - var/message = "You have been fined [fine] credits for '[t1]'. Fines may be paid at security." - var/datum/signal/subspace/messaging/pda/signal = new(src, list( - "name" = "Security Citation", - "job" = "Citation Server", - "message" = message, - "targets" = list("[P.owner] ([P.ownjob])"), - "automated" = 1 - )) - signal.send_to_receivers() - usr.log_message("(PDA: Citation Server) sent \"[message]\" to [signal.format_target()]", LOG_PDA) - GLOB.data_core.addCitation(active1.fields["id"], crime) - investigate_log("New Citation: [t1] Fine: [fine] | Added to [active1.fields["name"]] by [key_name(usr)]", INVESTIGATE_RECORDS) - if("citation_delete") - if(istype(active1, /datum/data/record)) - if(href_list["cdataid"]) - if(!canUseSecurityRecordsConsole(usr, "delete", null, a2)) - return - GLOB.data_core.removeCitation(active1.fields["id"], href_list["cdataid"]) - if("notes") - if(istype(active2, /datum/data/record)) - var/t1 = stripped_input(usr, "Please summarize notes:", "Secure. records", active2.fields["notes"], null) - if(!canUseSecurityRecordsConsole(usr, t1, null, a2)) - return - active2.fields["notes"] = t1 - if("criminal") - if(istype(active2, /datum/data/record)) - temp = "
Criminal Status:
" - temp += "" - if("rank") - var/list/L = list( "Head of Personnel", "Captain", "AI", "Central Command" ) - //This was so silly before the change. Now it actually works without beating your head against the keyboard. /N - if((istype(active1, /datum/data/record) && L.Find(rank))) - temp = "
Rank:
" - temp += "
    " - for(var/rank in get_all_jobs()) - temp += "
  • [rank]
  • " - temp += "
" - else - alert(usr, "You do not have the required rank to do this!") -//TEMPORARY MENU FUNCTIONS - else//To properly clear as per clear screen. - temp=null - switch(href_list["choice"]) - if("Change Rank") - if(active1) - active1.fields["rank"] = href_list["rank"] - if(href_list["rank"] in get_all_jobs()) - active1.fields["real_rank"] = href_list["real_rank"] - - if("Change Criminal Status") - if(active2) - var/old_field = active2.fields["criminal"] - switch(href_list["criminal2"]) - if("none") - active2.fields["criminal"] = "None" - if("arrest") - active2.fields["criminal"] = "*Arrest*" - if("incarcerated") - active2.fields["criminal"] = "Incarcerated" - if("paroled") - active2.fields["criminal"] = "Paroled" - if("released") - active2.fields["criminal"] = "Discharged" - investigate_log("[active1.fields["name"]] has been set from [old_field] to [active2.fields["criminal"]] by [key_name(usr)].", INVESTIGATE_RECORDS) - for(var/i in GLOB.human_list) - var/mob/living/carbon/human/H = i - H.sec_hud_set_security_status() - if("Delete Record (Security) Execute") - investigate_log("[key_name(usr)] has deleted the security records for [active1.fields["name"]].", INVESTIGATE_RECORDS) - if(active2) - qdel(active2) - active2 = null - - if("Delete Record (ALL) Execute") - if(active1) - investigate_log("[key_name(usr)] has deleted all records for [active1.fields["name"]].", INVESTIGATE_RECORDS) - for(var/datum/data/record/R in GLOB.data_core.medical) - if((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"])) - qdel(R) - break - qdel(active1) - active1 = null - - if(active2) - qdel(active2) - active2 = null - else - temp = "This function does not appear to be working at the moment. Our apologies." - - add_fingerprint(usr) - updateUsrDialog() - return - -/obj/machinery/computer/secure_data/proc/get_photo(mob/user) - var/obj/item/photo/P = null - if(issilicon(user)) - var/mob/living/silicon/tempAI = user - var/datum/picture/selection = tempAI.GetPhoto(user) - if(selection) - P = new(null, selection) - else if(istype(user.get_active_held_item(), /obj/item/photo)) - P = user.get_active_held_item() - return P - -/obj/machinery/computer/secure_data/proc/print_photo(icon/temp, person_name) - if (printing) - return - printing = TRUE - sleep(20) - var/obj/item/photo/P = new/obj/item/photo(drop_location()) - var/datum/picture/toEmbed = new(name = person_name, desc = "", image = temp) - P.set_picture(toEmbed, TRUE, TRUE) - P.pixel_x = rand(-10, 10) - P.pixel_y = rand(-10, 10) - printing = FALSE - -/obj/machinery/computer/secure_data/emp_act(severity) - . = ..() - - if(stat & (BROKEN|NOPOWER) || . & EMP_PROTECT_SELF) - return - - for(var/datum/data/record/R in GLOB.data_core.security) - if(prob(10/severity)) - switch(rand(1,8)) - if(1) - if(prob(10)) - R.fields["name"] = "[pick(lizard_name(MALE),lizard_name(FEMALE))]" - else - R.fields["name"] = "[pick(pick(GLOB.first_names_male), pick(GLOB.first_names_female))] [pick(GLOB.last_names)]" - if(2) - R.fields["gender"] = pick("Male", "Female", "Other") - if(3) - R.fields["age"] = rand(5, 85) - if(4) - R.fields["criminal"] = pick("None", "*Arrest*", "Incarcerated", "Paroled", "Discharged") - if(5) - R.fields["p_stat"] = pick("*Unconscious*", "Active", "Physically Unfit") - if(6) - R.fields["m_stat"] = pick("*Insane*", "*Unstable*", "*Watch*", "Stable") - if(7) - R.fields["species"] = pick(GLOB.roundstart_races) - if(8) - var/datum/data/record/G = pick(GLOB.data_core.general) - R.fields["photo_front"] = G.fields["photo_front"] - R.fields["photo_side"] = G.fields["photo_side"] - continue - - else if(prob(1)) - qdel(R) - continue - -/obj/machinery/computer/secure_data/proc/canUseSecurityRecordsConsole(mob/user, message1 = 0, record1, record2) - if(user) - if(authenticated) - if(user.canUseTopic(src, !issilicon(user))) - if(!trim(message1)) - return 0 - if(!record1 || record1 == active1) - if(!record2 || record2 == active2) - return 1 - return 0 diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm deleted file mode 100644 index 89f5e79004..0000000000 --- a/code/game/machinery/computer/station_alert.dm +++ /dev/null @@ -1,91 +0,0 @@ -/obj/machinery/computer/station_alert - name = "station alert console" - desc = "" - icon_screen = "alert:0" - icon_keyboard = "atmos_key" - circuit = /obj/item/circuitboard/computer/stationalert - ui_x = 325 - ui_y = 500 - var/alarms = list("Fire" = list(), "Atmosphere" = list(), "Power" = list()) - - light_color = LIGHT_COLOR_CYAN - -/obj/machinery/computer/station_alert/Initialize() - . = ..() - GLOB.alert_consoles += src - -/obj/machinery/computer/station_alert/Destroy() - GLOB.alert_consoles -= src - return ..() - -/obj/machinery/computer/station_alert/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "station_alert", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/computer/station_alert/ui_data(mob/user) - var/list/data = list() - - data["alarms"] = list() - for(var/class in alarms) - data["alarms"][class] = list() - for(var/area in alarms[class]) - data["alarms"][class] += area - - return data - -/obj/machinery/computer/station_alert/proc/triggerAlarm(class, area/A, O, obj/source) - if(source.z != z) - return - if(stat & (BROKEN)) - return - - var/list/L = alarms[class] - for(var/I in L) - if (I == A.name) - var/list/alarm = L[I] - var/list/sources = alarm[3] - if (!(source in sources)) - sources += source - return 1 - var/obj/machinery/camera/C = null - var/list/CL = null - if(O && islist(O)) - CL = O - if (CL.len == 1) - C = CL[1] - else if(O && istype(O, /obj/machinery/camera)) - C = O - L[A.name] = list(A, (C ? C : O), list(source)) - return 1 - - -/obj/machinery/computer/station_alert/proc/cancelAlarm(class, area/A, obj/origin) - if(stat & (BROKEN)) - return - var/list/L = alarms[class] - var/cleared = 0 - for (var/I in L) - if (I == A.name) - var/list/alarm = L[I] - var/list/srcs = alarm[3] - if (origin in srcs) - srcs -= origin - if (srcs.len == 0) - cleared = 1 - L -= I - return !cleared - -/obj/machinery/computer/station_alert/update_overlays() - . = ..() - if(stat & (NOPOWER|BROKEN)) - return - var/active_alarms = FALSE - for(var/cat in alarms) - var/list/L = alarms[cat] - if(L.len) - active_alarms = TRUE - if(active_alarms) - . += "alert:2" diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm deleted file mode 100644 index f8ecc091de..0000000000 --- a/code/game/machinery/computer/teleporter.dm +++ /dev/null @@ -1,181 +0,0 @@ -/obj/machinery/computer/teleporter - name = "teleporter control console" - desc = "" - icon_screen = "teleport" - icon_keyboard = "teleport_key" - light_color = LIGHT_COLOR_BLUE - circuit = /obj/item/circuitboard/computer/teleporter - var/regime_set = "Teleporter" - var/id - var/obj/machinery/teleport/station/power_station - var/calibrating - var/turf/target - -/obj/machinery/computer/teleporter/Initialize() - . = ..() - id = "[rand(1000, 9999)]" - link_power_station() - -/obj/machinery/computer/teleporter/Destroy() - if (power_station) - power_station.teleporter_console = null - power_station = null - return ..() - -/obj/machinery/computer/teleporter/proc/link_power_station() - if(power_station) - return - for(var/direction in GLOB.cardinals) - power_station = locate(/obj/machinery/teleport/station, get_step(src, direction)) - if(power_station) - break - return power_station - -/obj/machinery/computer/teleporter/ui_interact(mob/user) - . = ..() - var/data = "

Teleporter Status

" - if(!power_station) - data += "
No power station linked.
" - else if(!power_station.teleporter_hub) - data += "
No hub linked.
" - else - data += "
Current regime: [regime_set]
" - data += "Current target: [(!target) ? "None" : "[get_area(target)] [(regime_set != "Gate") ? "" : "Teleporter"]"]
" - if(calibrating) - data += "Calibration: In Progress" - else if(power_station.teleporter_hub.calibrated || power_station.teleporter_hub.accuracy >= 3) - data += "Calibration: Optimal" - else - data += "Calibration: Sub-Optimal" - data += "

" - - data += "Change regime
" - data += "Set target
" - - data += "
Calibrate Hub" - - var/datum/browser/popup = new(user, "teleporter", name, 400, 400) - popup.set_content(data) - popup.open() - -/obj/machinery/computer/teleporter/Topic(href, href_list) - if(..()) - return - - if(!check_hub_connection()) - say("Error: Unable to detect hub.") - return - if(calibrating) - say("Error: Calibration in progress. Stand by.") - return - - if(href_list["regimeset"]) - power_station.engaged = 0 - power_station.teleporter_hub.update_icon() - power_station.teleporter_hub.calibrated = 0 - reset_regime() - if(href_list["settarget"]) - power_station.engaged = 0 - power_station.teleporter_hub.update_icon() - power_station.teleporter_hub.calibrated = 0 - set_target(usr) - if(href_list["calibrate"]) - if(!target) - say("Error: No target set to calibrate to.") - return - if(power_station.teleporter_hub.calibrated || power_station.teleporter_hub.accuracy >= 3) - say("Hub is already calibrated!") - return - say("Processing hub calibration to target...") - - calibrating = 1 - power_station.update_icon() - spawn(50 * (3 - power_station.teleporter_hub.accuracy)) //Better parts mean faster calibration - calibrating = 0 - if(check_hub_connection()) - power_station.teleporter_hub.calibrated = 1 - say("Calibration complete.") - else - say("Error: Unable to detect hub.") - power_station.update_icon() - updateDialog() - - updateDialog() - -/obj/machinery/computer/teleporter/proc/check_hub_connection() - if(!power_station) - return FALSE - if(!power_station.teleporter_hub) - return FALSE - return TRUE - -/obj/machinery/computer/teleporter/proc/reset_regime() - target = null - if(regime_set == "Teleporter") - regime_set = "Gate" - else - regime_set = "Teleporter" - -/obj/machinery/computer/teleporter/proc/set_target(mob/user) - var/list/L = list() - var/list/areaindex = list() - if(regime_set == "Teleporter") - for(var/obj/item/beacon/R in GLOB.teleportbeacons) - if(is_eligible(R)) - if(R.renamed) - L[avoid_assoc_duplicate_keys("[R.name] ([get_area(R)])", areaindex)] = R - else - var/area/A = get_area(R) - L[avoid_assoc_duplicate_keys(A.name, areaindex)] = R - - for(var/obj/item/implant/tracking/I in GLOB.tracked_implants) - if(!I.imp_in || !isliving(I.loc) || !I.allow_teleport) - continue - else - var/mob/living/M = I.loc - if(M.stat == DEAD) - if(M.timeofdeath + I.lifespan_postmortem < world.time) - continue - if(is_eligible(I)) - L[avoid_assoc_duplicate_keys("[M.real_name] ([get_area(M)])", areaindex)] = I - - var/desc = input("Please select a location to lock in.", "Locking Computer") as null|anything in sortList(L) - target = L[desc] - var/turf/T = get_turf(target) - log_game("[key_name(user)] has set the teleporter target to [target] at [AREACOORD(T)]") - - else - var/list/S = power_station.linked_stations - for(var/obj/machinery/teleport/station/R in S) - if(is_eligible(R) && R.teleporter_hub) - var/area/A = get_area(R) - L[avoid_assoc_duplicate_keys(A.name, areaindex)] = R - if(!L.len) - to_chat(user, "No active connected stations located.") - return - var/desc = input("Please select a station to lock in.", "Locking Computer") as null|anything in sortList(L) - var/obj/machinery/teleport/station/target_station = L[desc] - if(!target_station || !target_station.teleporter_hub) - return - var/turf/T = get_turf(target_station) - log_game("[key_name(user)] has set the teleporter target to [target_station] at [AREACOORD(T)]") - target = target_station.teleporter_hub - target_station.linked_stations |= power_station - target_station.stat &= ~NOPOWER - if(target_station.teleporter_hub) - target_station.teleporter_hub.stat &= ~NOPOWER - target_station.teleporter_hub.update_icon() - if(target_station.teleporter_console) - target_station.teleporter_console.stat &= ~NOPOWER - target_station.teleporter_console.update_icon() - -/obj/machinery/computer/teleporter/proc/is_eligible(atom/movable/AM) - var/turf/T = get_turf(AM) - if(!T) - return FALSE - if(is_centcom_level(T.z) || is_away_level(T.z)) - return FALSE - var/area/A = get_area(T) - if(!A || A.noteleport) - return FALSE - return TRUE diff --git a/code/game/machinery/computer/warrant.dm b/code/game/machinery/computer/warrant.dm deleted file mode 100644 index 078ab2a5b4..0000000000 --- a/code/game/machinery/computer/warrant.dm +++ /dev/null @@ -1,148 +0,0 @@ -/obj/machinery/computer/warrant//TODO:SANITY - name = "security warrant console" - desc = "" - icon_screen = "security" - icon_keyboard = "security_key" - circuit = /obj/item/circuitboard/computer/warrant - light_color = LIGHT_COLOR_RED - var/screen = null - var/datum/data/record/current = null - -/obj/machinery/computer/warrant/ui_interact(mob/user) - . = ..() - - var/list/dat = list("Logged in as: ") - if(authenticated) - dat += {"[authenticated]
"} - if(current) - var/background - var/notice = "" - switch(current.fields["criminal"]) - if("*Arrest*") - background = "background-color:#990000;" - notice = "
**REPORT TO THE BRIG**" - if("Incarcerated") - background = "background-color:#CD6500;" - if("Paroled") - background = "background-color:#CD6500;" - if("Discharged") - background = "background-color:#006699;" - if("None") - background = "background-color:#4F7529;" - if("") - background = "''" //"'background-color:#FFFFFF;'" - dat += "Warrant Data" - dat += {" - - -
Name: [current.fields["name"]] 
ID: [current.fields["id"]] 
"} - dat += {"Criminal Status:
-
- [current.fields["criminal"]][notice] -
"} - - dat += "

Citations:" - - dat +={" - - - - - - - - "} - for(var/datum/data/crime/c in current.fields["citation"]) - var/owed = c.fine - c.paid - dat += {" - - - "} - if(owed > 0) - dat += {" - "} - else - dat += "" - dat += "" - dat += "
CrimeFineAuthorTime AddedAmount DueMake Payment
[c.crimeName]$[c.fine][c.author][c.time]$[owed]\[Pay\]All Paid Off
" - - dat += "
Minor Crimes:" - dat +={" - - - - - - "} - for(var/datum/data/crime/c in current.fields["mi_crim"]) - dat += {" - - - - "} - dat += "
CrimeDetailsAuthorTime Added
[c.crimeName][c.crimeDetails][c.author][c.time]
" - - dat += "
Major Crimes:" - dat +={" - - - - - - "} - for(var/datum/data/crime/c in current.fields["ma_crim"]) - dat += {" - - - - "} - dat += "
CrimeDetailsAuthorTime Added
[c.crimeName][c.crimeDetails][c.author][c.time]
" - else - dat += {"** No security record found for this ID **"} - else - dat += {"------------
"} - - var/datum/browser/popup = new(user, "warrant", "Security Warrant Console", 600, 400) - popup.set_content(dat.Join()) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - -/obj/machinery/computer/warrant/Topic(href, href_list) - if(..()) - return - var/mob/M = usr - switch(href_list["choice"]) - if("Login") - var/obj/item/card/id/scan = M.get_idcard(TRUE) - authenticated = scan.registered_name - if(authenticated) - for(var/datum/data/record/R in GLOB.data_core.security) - if(R.fields["name"] == authenticated) - current = R - playsound(src, 'sound/blank.ogg', 50, FALSE) - if("Logout") - current = null - authenticated = null - playsound(src, 'sound/blank.ogg', 50, FALSE) - - if("Pay") - for(var/datum/data/crime/p in current.fields["citation"]) - if(p.dataId == text2num(href_list["cdataid"])) - var/obj/item/holochip/C = M.is_holding_item_of_type(/obj/item/holochip) - if(C && istype(C)) - var/pay = C.get_item_credit_value() - if(!pay) - to_chat(M, "[C] doesn't seem to be worth anything!") - else - var/diff = p.fine - p.paid - GLOB.data_core.payCitation(current.fields["id"], text2num(href_list["cdataid"]), pay) - to_chat(M, "I have paid [pay] credit\s towards your fine.") - if (pay == diff || pay > diff || pay >= diff) - investigate_log("Citation Paid off: [p.crimeName] Fine: [p.fine] | Paid off by [key_name(usr)]", INVESTIGATE_RECORDS) - to_chat(M, "The fine has been paid in full.") - qdel(C) - playsound(src, "terminal_type", 25, FALSE) - else - to_chat(M, "Fines can only be paid with holochips!") - updateUsrDialog() - add_fingerprint(M) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm deleted file mode 100644 index af1032e818..0000000000 --- a/code/game/machinery/constructable_frame.dm +++ /dev/null @@ -1,278 +0,0 @@ -/obj/structure/frame - name = "frame" - icon = 'icons/obj/stock_parts.dmi' - icon_state = "box_0" - density = TRUE - max_integrity = 250 - var/obj/item/circuitboard/machine/circuit = null - var/state = 1 - -/obj/structure/frame/examine(user) - . = ..() - if(circuit) - . += "It has \a [circuit] installed." - - -/obj/structure/frame/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/sheet/metal(loc, 5) - if(circuit) - circuit.forceMove(loc) - circuit = null - qdel(src) - - -/obj/structure/frame/machine - name = "machine frame" - var/list/components = null - var/list/req_components = null - var/list/req_component_names = null // user-friendly names of components - -/obj/structure/frame/machine/examine(user) - . = ..() - if(state == 3 && req_components && req_component_names) - var/hasContent = 0 - var/requires = "It requires" - - for(var/i = 1 to req_components.len) - var/tname = req_components[i] - var/amt = req_components[tname] - if(amt == 0) - continue - var/use_and = i == req_components.len - requires += "[(hasContent ? (use_and ? ", and" : ",") : "")] [amt] [amt == 1 ? req_component_names[tname] : "[req_component_names[tname]]\s"]" - hasContent = 1 - - if(hasContent) - . += "[requires]." - else - . += "It does not require any more components." - -/obj/structure/frame/machine/proc/update_namelist() - if(!req_components) - return - - req_component_names = new() - for(var/tname in req_components) - if(ispath(tname, /obj/item/stack)) - var/obj/item/stack/S = tname - var/singular_name = initial(S.singular_name) - if(singular_name) - req_component_names[tname] = singular_name - else - req_component_names[tname] = initial(S.name) - else - var/obj/O = tname - req_component_names[tname] = initial(O.name) - -/obj/structure/frame/machine/proc/get_req_components_amt() - var/amt = 0 - for(var/path in req_components) - amt += req_components[path] - return amt - -/obj/structure/frame/machine/attackby(obj/item/P, mob/user, params) - switch(state) - if(1) - if(istype(P, /obj/item/circuitboard/machine)) - to_chat(user, "The frame needs wiring first!") - return - else if(istype(P, /obj/item/circuitboard)) - to_chat(user, "This frame does not accept circuit boards of this type!") - return - if(istype(P, /obj/item/stack/cable_coil)) - if(!P.tool_start_check(user, amount=5)) - return - - to_chat(user, "I start to add cables to the frame...") - if(P.use_tool(src, user, 20, volume=50, amount=5)) - to_chat(user, "I add cables to the frame.") - state = 2 - icon_state = "box_1" - - return - if(P.tool_behaviour == TOOL_SCREWDRIVER && !anchored) - user.visible_message("[user] disassembles the frame.", \ - "I start to disassemble the frame...", "I hear banging and clanking.") - if(P.use_tool(src, user, 40, volume=50)) - if(state == 1) - to_chat(user, "I disassemble the frame.") - var/obj/item/stack/sheet/metal/M = new (loc, 5) - M.add_fingerprint(user) - qdel(src) - return - if(P.tool_behaviour == TOOL_WRENCH) - to_chat(user, "I start [anchored ? "un" : ""]securing [name]...") - if(P.use_tool(src, user, 40, volume=75)) - if(state == 1) - to_chat(user, "I [anchored ? "un" : ""]secure [name].") - setAnchored(!anchored) - return - - if(2) - if(P.tool_behaviour == TOOL_WRENCH) - to_chat(user, "I start [anchored ? "un" : ""]securing [name]...") - if(P.use_tool(src, user, 40, volume=75)) - to_chat(user, "I [anchored ? "un" : ""]secure [name].") - setAnchored(!anchored) - return - - if(istype(P, /obj/item/circuitboard/machine)) - var/obj/item/circuitboard/machine/B = P - if(!anchored && B.needs_anchored) - to_chat(user, "The frame needs to be secured first!") - return - if(!user.transferItemToLoc(B, src)) - return - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - to_chat(user, "I add the circuit board to the frame.") - circuit = B - icon_state = "box_2" - state = 3 - components = list() - req_components = B.req_components.Copy() - update_namelist() - return - - else if(istype(P, /obj/item/circuitboard)) - to_chat(user, "This frame does not accept circuit boards of this type!") - return - - if(P.tool_behaviour == TOOL_WIRECUTTER) - P.play_tool_sound(src) - to_chat(user, "I remove the cables.") - state = 1 - icon_state = "box_0" - new /obj/item/stack/cable_coil(drop_location(), 5) - return - - if(3) - if(P.tool_behaviour == TOOL_CROWBAR) - P.play_tool_sound(src) - state = 2 - circuit.forceMove(drop_location()) - components.Remove(circuit) - circuit = null - if(components.len == 0) - to_chat(user, "I remove the circuit board.") - else - to_chat(user, "I remove the circuit board and other components.") - for(var/atom/movable/AM in components) - AM.forceMove(drop_location()) - desc = initial(desc) - req_components = null - components = null - icon_state = "box_1" - return - - if(P.tool_behaviour == TOOL_WRENCH && !circuit.needs_anchored) - to_chat(user, "I start [anchored ? "un" : ""]securing [name]...") - if(P.use_tool(src, user, 40, volume=75)) - to_chat(user, "I [anchored ? "un" : ""]secure [name].") - setAnchored(!anchored) - return - - if(P.tool_behaviour == TOOL_SCREWDRIVER) - var/component_check = 1 - for(var/R in req_components) - if(req_components[R] > 0) - component_check = 0 - break - if(component_check) - P.play_tool_sound(src) - var/obj/machinery/new_machine = new circuit.build_path(loc) - new_machine.setAnchored(anchored) - new_machine.on_construction() - for(var/obj/O in new_machine.component_parts) - qdel(O) - new_machine.component_parts = list() - for(var/obj/O in src) - O.moveToNullspace() - new_machine.component_parts += O - if(new_machine.circuit) - QDEL_NULL(new_machine.circuit) - new_machine.circuit = circuit - circuit.moveToNullspace() - new_machine.RefreshParts() - qdel(src) - return - - if(istype(P, /obj/item/storage/part_replacer) && P.contents.len && get_req_components_amt()) - var/obj/item/storage/part_replacer/replacer = P - var/list/added_components = list() - var/list/part_list = list() - - //Assemble a list of current parts, then sort them by their rating! - for(var/obj/item/co in replacer) - part_list += co - //Sort the parts. This ensures that higher tier items are applied first. - part_list = sortTim(part_list, GLOBAL_PROC_REF(cmp_rped_sort)) - - for(var/path in req_components) - while(req_components[path] > 0 && (locate(path) in part_list)) - var/obj/item/part = (locate(path) in part_list) - part_list -= part - if(istype(part,/obj/item/stack)) - var/obj/item/stack/S = part - var/used_amt = min(round(S.get_amount()), req_components[path]) - if(!used_amt || !S.use(used_amt)) - continue - var/NS = new S.merge_type(src, used_amt) - added_components[NS] = path - req_components[path] -= used_amt - else - added_components[part] = path - if(SEND_SIGNAL(replacer, COMSIG_TRY_STORAGE_TAKE, part, src)) - req_components[path]-- - - for(var/obj/item/part in added_components) - if(istype(part,/obj/item/stack)) - var/obj/item/stack/S = part - var/obj/item/stack/NS = locate(S.merge_type) in components //find a stack to merge with - if(NS) - S.merge(NS) - if(!QDELETED(part)) //If we're a stack and we merged we might not exist anymore - components += part - to_chat(user, "[part.name] applied.") - if(added_components.len) - replacer.play_rped_sound() - return - - if(isitem(P) && get_req_components_amt()) - for(var/I in req_components) - if(istype(P, I) && (req_components[I] > 0)) - if(istype(P, /obj/item/stack)) - var/obj/item/stack/S = P - var/used_amt = min(round(S.get_amount()), req_components[I]) - - if(used_amt && S.use(used_amt)) - var/obj/item/stack/NS = locate(S.merge_type) in components - - if(!NS) - NS = new S.merge_type(src, used_amt) - components += NS - else - NS.add(used_amt) - - req_components[I] -= used_amt - to_chat(user, "I add [P] to [src].") - return - if(!user.transferItemToLoc(P, src)) - break - to_chat(user, "I add [P] to [src].") - components += P - req_components[I]-- - return 1 - to_chat(user, "I cannot add that to the machine!") - return 0 - if(user.used_intent.type == INTENT_HARM) - return ..() - -/obj/structure/frame/machine/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - if(state >= 2) - new /obj/item/stack/cable_coil(loc , 5) - for(var/X in components) - var/obj/item/I = X - I.forceMove(loc) - ..() diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm deleted file mode 100644 index ed799e10b4..0000000000 --- a/code/game/machinery/dance_machine.dm +++ /dev/null @@ -1,469 +0,0 @@ -/obj/machinery/jukebox - name = "jukebox" - desc = "" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "jukebox" - verb_say = "states" - density = TRUE - req_access = list(ACCESS_BAR) - var/active = FALSE - var/list/rangers = list() - var/stop = 0 - var/list/songs = list() - var/datum/track/selection = null - -/obj/machinery/jukebox/disco - name = "radiant dance machine mark IV" - desc = "" - icon_state = "disco" - req_access = list(ACCESS_ENGINE) - anchored = FALSE - var/list/spotlights = list() - var/list/sparkles = list() - -/obj/machinery/jukebox/disco/indestructible - name = "radiant dance machine mark V" - desc = "" - req_access = null - anchored = TRUE - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - flags_1 = NODECONSTRUCT_1 - -/datum/track - var/song_name = "generic" - var/song_path = null - var/song_length = 0 - var/song_beat = 0 - -/datum/track/New(name, path, length, beat) - song_name = name - song_path = path - song_length = length - song_beat = beat - -/obj/machinery/jukebox/Initialize() - . = ..() - var/list/tracks = flist("[global.config.directory]/jukebox_music/sounds/") - - for(var/S in tracks) - var/datum/track/T = new() - T.song_path = file("[global.config.directory]/jukebox_music/sounds/[S]") - var/list/L = splittext(S,"+") - if(L.len != 3) - continue - T.song_name = L[1] - T.song_length = text2num(L[2]) - T.song_beat = text2num(L[3]) - songs |= T - - if(songs.len) - selection = pick(songs) - -/obj/machinery/jukebox/Destroy() - dance_over() - return ..() - -/obj/machinery/jukebox/attackby(obj/item/O, mob/user, params) - if(!active && !(flags_1 & NODECONSTRUCT_1)) - if(O.tool_behaviour == TOOL_WRENCH) - if(!anchored && !isinspace()) - to_chat(user,"I secure [src] to the floor.") - setAnchored(TRUE) - else if(anchored) - to_chat(user,"I unsecure and disconnect [src].") - setAnchored(FALSE) - playsound(src, 'sound/blank.ogg', 50, TRUE) - return - return ..() - -/obj/machinery/jukebox/update_icon_state() - if(active) - icon_state = "[initial(icon_state)]-active" - else - icon_state = "[initial(icon_state)]" - -/obj/machinery/jukebox/ui_interact(mob/user) - . = ..() - if(!user.canUseTopic(src, !issilicon(user))) - return - if (!anchored) - to_chat(user,"This device must be anchored by a wrench!") - return - if(!allowed(user)) - to_chat(user,"Error: Access Denied.") - user.playsound_local(src,'sound/blank.ogg', 25, 1) - return - if(!songs.len) - to_chat(user,"Error: No music tracks have been authorized for your station. Petition Central Command to resolve this issue.") - playsound(src,'sound/blank.ogg', 25, TRUE) - return - var/list/dat = list() - dat +="
" - dat += " Select Track
" - dat += "Track Selected: [selection.song_name]
" - dat += "Track Length: [DisplayTimeText(selection.song_length)]

" - var/datum/browser/popup = new(user, "vending", "[name]", 400, 350) - popup.set_content(dat.Join()) - popup.open() - - -/obj/machinery/jukebox/Topic(href, href_list) - if(..()) - return - add_fingerprint(usr) - switch(href_list["action"]) - if("toggle") - if (QDELETED(src)) - return - if(!active) - if(stop > world.time) - to_chat(usr, "Error: The device is still resetting from the last activation, it will be ready again in [DisplayTimeText(stop-world.time)].") - playsound(src, 'sound/blank.ogg', 50, TRUE) - return - activate_music() - START_PROCESSING(SSobj, src) - updateUsrDialog() - else if(active) - stop = 0 - updateUsrDialog() - if("select") - if(active) - to_chat(usr, "Error: You cannot change the song until the current one is over.") - return - - var/list/available = list() - for(var/datum/track/S in songs) - available[S.song_name] = S - var/selected = input(usr, "Choose your song", "Track:") as null|anything in sortList(available) - if(QDELETED(src) || !selected || !istype(available[selected], /datum/track)) - return - selection = available[selected] - updateUsrDialog() - -/obj/machinery/jukebox/proc/activate_music() - active = TRUE - update_icon() - START_PROCESSING(SSobj, src) - stop = world.time + selection.song_length - -/obj/machinery/jukebox/disco/activate_music() - ..() - dance_setup() - lights_spin() - -/obj/machinery/jukebox/disco/proc/dance_setup() - var/turf/cen = get_turf(src) - FOR_DVIEW(var/turf/t, 3, get_turf(src),INVISIBILITY_LIGHTING) - if(t.x == cen.x && t.y > cen.y) - var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) - L.light_color = LIGHT_COLOR_RED - L.light_power = 30-(get_dist(src,L)*8) - L.range = 1+get_dist(src, L) - spotlights+=L - continue - if(t.x == cen.x && t.y < cen.y) - var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) - L.light_color = LIGHT_COLOR_PURPLE - L.light_power = 30-(get_dist(src,L)*8) - L.range = 1+get_dist(src, L) - spotlights+=L - continue - if(t.x > cen.x && t.y == cen.y) - var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) - L.light_color = LIGHT_COLOR_YELLOW - L.light_power = 30-(get_dist(src,L)*8) - L.range = 1+get_dist(src, L) - spotlights+=L - continue - if(t.x < cen.x && t.y == cen.y) - var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) - L.light_color = LIGHT_COLOR_GREEN - L.light_power = 30-(get_dist(src,L)*8) - L.range = 1+get_dist(src, L) - spotlights+=L - continue - if((t.x+1 == cen.x && t.y+1 == cen.y) || (t.x+2==cen.x && t.y+2 == cen.y)) - var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) - L.light_color = LIGHT_COLOR_ORANGE - L.light_power = 30-(get_dist(src,L)*8) - L.range = 1.4+get_dist(src, L) - spotlights+=L - continue - if((t.x-1 == cen.x && t.y-1 == cen.y) || (t.x-2==cen.x && t.y-2 == cen.y)) - var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) - L.light_color = LIGHT_COLOR_CYAN - L.light_power = 30-(get_dist(src,L)*8) - L.range = 1.4+get_dist(src, L) - spotlights+=L - continue - if((t.x-1 == cen.x && t.y+1 == cen.y) || (t.x-2==cen.x && t.y+2 == cen.y)) - var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) - L.light_color = LIGHT_COLOR_BLUEGREEN - L.light_power = 30-(get_dist(src,L)*8) - L.range = 1.4+get_dist(src, L) - spotlights+=L - continue - if((t.x+1 == cen.x && t.y-1 == cen.y) || (t.x+2==cen.x && t.y-2 == cen.y)) - var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t) - L.light_color = LIGHT_COLOR_BLUE - L.light_power = 30-(get_dist(src,L)*8) - L.range = 1.4+get_dist(src, L) - spotlights+=L - continue - continue - FOR_DVIEW_END - -/obj/machinery/jukebox/disco/proc/hierofunk() - for(var/i in 1 to 10) - spawn_atom_to_turf(/obj/effect/temp_visual/hierophant/telegraph/edge, src, 1, FALSE) - sleep(5) - -#define DISCO_INFENO_RANGE (rand(85, 115)*0.01) - -/obj/machinery/jukebox/disco/proc/lights_spin() - for(var/i in 1 to 25) - if(QDELETED(src) || !active) - return - var/obj/effect/overlay/sparkles/S = new /obj/effect/overlay/sparkles(src) - S.alpha = 0 - sparkles += S - switch(i) - if(1 to 8) - S.orbit(src, 30, TRUE, 60, 36, TRUE) - if(9 to 16) - S.orbit(src, 62, TRUE, 60, 36, TRUE) - if(17 to 24) - S.orbit(src, 95, TRUE, 60, 36, TRUE) - if(25) - S.pixel_y = 7 - S.forceMove(get_turf(src)) - sleep(7) - if(selection.song_name == "Engineering's Ultimate High-Energy Hustle") - sleep(280) - for(var/obj/reveal in sparkles) - reveal.alpha = 255 - while(active) - for(var/obj/item/flashlight/spotlight/glow in spotlights) // The multiples reflects custom adjustments to each colors after dozens of tests - if(QDELETED(src) || !active || QDELETED(glow)) - return - if(glow.light_color == LIGHT_COLOR_RED) - glow.light_color = LIGHT_COLOR_BLUE - glow.light_power = glow.light_power * 1.48 - glow.light_range = 0 - glow.update_light() - continue - if(glow.light_color == LIGHT_COLOR_BLUE) - glow.light_color = LIGHT_COLOR_GREEN - glow.light_range = glow.range * DISCO_INFENO_RANGE - glow.light_power = glow.light_power * 2 // Any changes to power must come in pairs to neutralize it for other colors - glow.update_light() - continue - if(glow.light_color == LIGHT_COLOR_GREEN) - glow.light_color = LIGHT_COLOR_ORANGE - glow.light_power = glow.light_power * 0.5 - glow.light_range = 0 - glow.update_light() - continue - if(glow.light_color == LIGHT_COLOR_ORANGE) - glow.light_color = LIGHT_COLOR_PURPLE - glow.light_power = glow.light_power * 2.27 - glow.light_range = glow.range * DISCO_INFENO_RANGE - glow.update_light() - continue - if(glow.light_color == LIGHT_COLOR_PURPLE) - glow.light_color = LIGHT_COLOR_BLUEGREEN - glow.light_power = glow.light_power * 0.44 - glow.light_range = 0 - glow.update_light() - continue - if(glow.light_color == LIGHT_COLOR_BLUEGREEN) - glow.light_color = LIGHT_COLOR_YELLOW - glow.light_range = glow.range * DISCO_INFENO_RANGE - glow.update_light() - continue - if(glow.light_color == LIGHT_COLOR_YELLOW) - glow.light_color = LIGHT_COLOR_CYAN - glow.light_range = 0 - glow.update_light() - continue - if(glow.light_color == LIGHT_COLOR_CYAN) - glow.light_color = LIGHT_COLOR_RED - glow.light_power = glow.light_power * 0.68 - glow.light_range = glow.range * DISCO_INFENO_RANGE - glow.update_light() - continue - if(prob(2)) // Unique effects for the dance floor that show up randomly to mix things up - INVOKE_ASYNC(src, PROC_REF(hierofunk)) - sleep(selection.song_beat) - -#undef DISCO_INFENO_RANGE - -/obj/machinery/jukebox/disco/proc/dance(mob/living/M) //Show your moves - set waitfor = FALSE - switch(rand(0,9)) - if(0 to 1) - dance2(M) - if(2 to 3) - dance3(M) - if(4 to 6) - dance4(M) - if(7 to 9) - dance5(M) - -/obj/machinery/jukebox/disco/proc/dance2(mob/living/M) - for(var/i in 0 to 9) - dance_rotate(M, CALLBACK(M, TYPE_PROC_REF(/mob, dance_flip))) - sleep(20) - -/mob/proc/dance_flip() - if(dir == WEST) - emote("flip") - -/obj/machinery/jukebox/disco/proc/dance3(mob/living/M) - var/matrix/initial_matrix = matrix(M.transform) - for (var/i in 1 to 75) - if (!M) - return - switch(i) - if (1 to 15) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (16 to 30) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(1,-1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (31 to 45) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(-1,-1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (46 to 60) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(-1,1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (61 to 75) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(1,0) - animate(M, transform = initial_matrix, time = 1, loop = 0) - M.setDir(turn(M.dir, 90)) - switch (M.dir) - if (NORTH) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,3) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (SOUTH) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,-3) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (EAST) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(3,0) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (WEST) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(-3,0) - animate(M, transform = initial_matrix, time = 1, loop = 0) - sleep(1) - M.lying_fix() - - -/obj/machinery/jukebox/disco/proc/dance4(mob/living/M) - var/speed = rand(1,3) - set waitfor = 0 - var/time = 30 - while(time) - sleep(speed) - for(var/i in 1 to speed) - M.setDir(pick(GLOB.cardinals)) - for(var/mob/living/carbon/NS in rangers) - NS.set_resting(!NS.resting, TRUE) - time-- - -/obj/machinery/jukebox/disco/proc/dance5(mob/living/M) - animate(M, transform = matrix(180, MATRIX_ROTATE), time = 1, loop = 0) - var/matrix/initial_matrix = matrix(M.transform) - for (var/i in 1 to 60) - if (!M) - return - if (i<31) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (i>30) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,-1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - M.setDir(turn(M.dir, 90)) - switch (M.dir) - if (NORTH) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,3) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (SOUTH) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,-3) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (EAST) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(3,0) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (WEST) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(-3,0) - animate(M, transform = initial_matrix, time = 1, loop = 0) - sleep(1) - M.lying_fix() - -/mob/living/proc/lying_fix() - animate(src, transform = null, time = 1, loop = 0) - lying_prev = 0 - -/obj/machinery/jukebox/proc/dance_over() - for(var/mob/living/L in rangers) - if(!L || !L.client) - continue - L.stop_sound_channel(CHANNEL_JUKEBOX) - rangers = list() - -/obj/machinery/jukebox/disco/dance_over() - ..() - QDEL_LIST(spotlights) - QDEL_LIST(sparkles) - -/obj/machinery/jukebox/process() - if(world.time < stop && active) - var/sound/song_played = sound(selection.song_path) - - for(var/mob/M in range(10,src)) - if(!M.client || !(M.client.prefs.toggles & SOUND_INSTRUMENTS)) - continue - if(!(M in rangers)) - rangers[M] = TRUE - M.playsound_local(get_turf(M), null, 100, channel = CHANNEL_JUKEBOX, S = song_played) - for(var/mob/L in rangers) - if(get_dist(src,L) > 10) - rangers -= L - if(!L || !L.client) - continue - L.stop_sound_channel(CHANNEL_JUKEBOX) - else if(active) - active = FALSE - STOP_PROCESSING(SSobj, src) - dance_over() - playsound(src,'sound/blank.ogg',50,TRUE) - update_icon() - stop = world.time + 100 - - -/obj/machinery/jukebox/disco/process() - . = ..() - if(active) - for(var/mob/M in rangers) - if(prob(5+(allowed(M)*4))) - if(isliving(M)) - var/mob/living/L = M - if(!(L.mobility_flags & MOBILITY_MOVE)) - continue - dance(M) diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm deleted file mode 100644 index 8efba96df5..0000000000 --- a/code/game/machinery/defibrillator_mount.dm +++ /dev/null @@ -1,150 +0,0 @@ -//Holds defibs and recharges them from the powernet -//You can activate the mount with an empty hand to grab the paddles -//Not being adjacent will cause the paddles to snap back -/obj/machinery/defibrillator_mount - name = "defibrillator mount" - desc = "" - icon = 'icons/obj/machines/defib_mount.dmi' - icon_state = "defibrillator_mount" - density = FALSE - use_power = IDLE_POWER_USE - idle_power_usage = 1 - power_channel = EQUIP - req_one_access = list(ACCESS_MEDICAL, ACCESS_HEADS, ACCESS_SECURITY) //used to control clamps - var/obj/item/defibrillator/defib //this mount's defibrillator - var/clamps_locked = FALSE //if true, and a defib is loaded, it can't be removed without unlocking the clamps - -/obj/machinery/defibrillator_mount/loaded/Initialize() //loaded subtype for mapping use - . = ..() - defib = new/obj/item/defibrillator/loaded(src) - -/obj/machinery/defibrillator_mount/Destroy() - if(defib) - QDEL_NULL(defib) - . = ..() - -/obj/machinery/defibrillator_mount/examine(mob/user) - . = ..() - if(defib) - . += "There is a defib unit hooked up. Alt-click to remove it." - if(GLOB.security_level >= SEC_LEVEL_RED) - . += "Due to a security situation, its locking clamps can be toggled by swiping any ID." - else - . += "Its locking clamps can be [clamps_locked ? "dis" : ""]engaged by swiping an ID with access." - -/obj/machinery/defibrillator_mount/process() - if(defib && defib.cell && defib.cell.charge < defib.cell.maxcharge && is_operational()) - use_power(200) - defib.cell.give(180) //90% efficiency, slightly better than the cell charger's 87.5% - update_icon() - -/obj/machinery/defibrillator_mount/update_overlays() - . = ..() - - if(!defib) - return - - . += "defib" - - if(defib.powered) - . += (defib.safety ? "online" : "emagged") - var/ratio = defib.cell.charge / defib.cell.maxcharge - ratio = CEILING(ratio * 4, 1) * 25 - . += "charge[ratio]" - - if(clamps_locked) - . += "clamps" - -/obj/machinery/defibrillator_mount/get_cell() - if(defib) - return defib.get_cell() - -//defib interaction -/obj/machinery/defibrillator_mount/attack_hand(mob/living/user) - if(!defib) - to_chat(user, "There's no defibrillator unit loaded!") - return - if(defib.paddles.loc != defib) - to_chat(user, "[defib.paddles.loc == user ? "You are already" : "Someone else is"] holding [defib]'s paddles!") - return - user.put_in_hands(defib.paddles) - -/obj/machinery/defibrillator_mount/attackby(obj/item/I, mob/living/user, params) - if(istype(I, /obj/item/defibrillator)) - if(defib) - to_chat(user, "There's already a defibrillator in [src]!") - return - if(HAS_TRAIT(I, TRAIT_NODROP) || !user.transferItemToLoc(I, src)) - to_chat(user, "[I] is stuck to your hand!") - return - user.visible_message("[user] hooks up [I] to [src]!", \ - "I press [I] into the mount, and it clicks into place.") - playsound(src, 'sound/blank.ogg', 50, TRUE) - defib = I - update_icon() - return - else if(defib && I == defib.paddles) - defib.paddles.snap_back() - return - var/obj/item/card/id = I.GetID() - if(id) - if(check_access(id) || GLOB.security_level >= SEC_LEVEL_RED) //anyone can toggle the clamps in red alert! - if(!defib) - to_chat(user, "I can't engage the clamps on a defibrillator that isn't there.") - return - clamps_locked = !clamps_locked - to_chat(user, "Clamps [clamps_locked ? "" : "dis"]engaged.") - update_icon() - else - to_chat(user, "Insufficient access.") - return - ..() - -/obj/machinery/defibrillator_mount/multitool_act(mob/living/user, obj/item/multitool) - ..() - if(!defib) - to_chat(user, "There isn't any defibrillator to clamp in!") - return TRUE - if(!clamps_locked) - to_chat(user, "[src]'s clamps are disengaged!") - return TRUE - user.visible_message("[user] presses [multitool] into [src]'s ID slot...", \ - "I begin overriding the clamps on [src]...") - playsound(src, 'sound/blank.ogg', 50, TRUE) - if(!do_after(user, 100, target = src) || !clamps_locked) - return - user.visible_message("[user] pulses [multitool], and [src]'s clamps slide up.", \ - "I override the locking clamps on [src]!") - playsound(src, 'sound/blank.ogg', 50, TRUE) - clamps_locked = FALSE - update_icon() - return TRUE - -/obj/machinery/defibrillator_mount/AltClick(mob/living/carbon/user) - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE)) - return - if(!defib) - to_chat(user, "It'd be hard to remove a defib unit from a mount that has none.") - return - if(clamps_locked) - to_chat(user, "I try to tug out [defib], but the mount's clamps are locked tight!") - return - if(!user.put_in_hands(defib)) - to_chat(user, "I need a free hand!") - return - user.visible_message("[user] unhooks [defib] from [src].", \ - "I slide out [defib] from [src] and unhook the charging cables.") - playsound(src, 'sound/blank.ogg', 50, TRUE) - defib = null - update_icon() - -//wallframe, for attaching the mounts easily -/obj/item/wallframe/defib_mount - name = "unhooked defibrillator mount" - desc = "" - icon = 'icons/obj/machines/defib_mount.dmi' - icon_state = "defibrillator_mount" - custom_materials = list(/datum/material/iron = 300, /datum/material/glass = 100) - w_class = WEIGHT_CLASS_BULKY - result_path = /obj/machinery/defibrillator_mount - pixel_shift = -28 diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm deleted file mode 100644 index b881c44319..0000000000 --- a/code/game/machinery/deployable.dm +++ /dev/null @@ -1,217 +0,0 @@ -#define SINGLE "single" -#define VERTICAL "vertical" -#define HORIZONTAL "horizontal" - -#define METAL 1 -#define WOOD 2 -#define SAND 3 - -//Barricades/cover - -/obj/structure/barricade - name = "chest high wall" - desc = "" - anchored = TRUE - density = TRUE - max_integrity = 100 - var/proj_pass_rate = 50 //How many projectiles will pass the cover. Lower means stronger cover - var/bar_material = METAL - -/obj/structure/barricade/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - make_debris() - qdel(src) - -/obj/structure/barricade/proc/make_debris() - return - -/obj/structure/barricade/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_WELDER && user.used_intent.type != INTENT_HARM && bar_material == METAL) - if(obj_integrity < max_integrity) - if(!I.tool_start_check(user, amount=0)) - return - - to_chat(user, "I begin repairing [src]...") - if(I.use_tool(src, user, 40, volume=40)) - obj_integrity = CLAMP(obj_integrity + 20, 0, max_integrity) - else - return ..() - -/obj/structure/barricade/CanPass(atom/movable/mover, turf/target)//So bullets will fly over and stuff. - if(locate(/obj/structure/barricade) in get_turf(mover)) - return 1 - else if(istype(mover, /obj/projectile)) - if(!anchored) - return 1 - var/obj/projectile/proj = mover - if(proj.firer && Adjacent(proj.firer)) - return 1 - if(prob(proj_pass_rate)) - return 1 - return 0 - else - return !density - - - -/////BARRICADE TYPES/////// - -/obj/structure/barricade/wooden - name = "wooden barricade" - desc = "" - icon = 'icons/obj/structures.dmi' - icon_state = "woodenbarricade" - bar_material = WOOD - var/drop_amount = 3 - -/obj/structure/barricade/wooden/rogue - name = "wooden barricade" - desc = "" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "woodenbarricade_r" - max_integrity = 60 - bar_material = WOOD - drop_amount = 0 - -/obj/structure/barricade/wooden/rogue/crude - name = "crude plank barricade" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "woodenbarricade_r2" - max_integrity = 40 - -/obj/structure/barricade/wooden/attackby(obj/item/I, mob/user) - if(istype(I,/obj/item/stack/sheet/mineral/wood)) - var/obj/item/stack/sheet/mineral/wood/W = I - if(W.amount < 5) - to_chat(user, "I need at least five wooden planks to make a wall!") - return - else - to_chat(user, "I start adding [I] to [src]...") - if(do_after(user, 50, target=src)) - W.use(5) - var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall/mineral/wood/nonmetal) - qdel(src) - return - return ..() - - -/obj/structure/barricade/wooden/crude - name = "crude plank barricade" - desc = "" - icon_state = "woodenbarricade-old" - drop_amount = 1 - max_integrity = 50 - proj_pass_rate = 65 - -/obj/structure/barricade/wooden/crude/snow - desc = "" - icon_state = "woodenbarricade-snow-old" - max_integrity = 75 - -/obj/structure/barricade/wooden/make_debris() - new /obj/item/stack/sheet/mineral/wood(get_turf(src), drop_amount) - - -/obj/structure/barricade/sandbags - name = "sandbags" - desc = "" - icon = 'icons/obj/smooth_structures/sandbags.dmi' - icon_state = "sandbags" - max_integrity = 280 - proj_pass_rate = 20 - pass_flags = LETPASSTHROW - bar_material = SAND - climbable = TRUE - smooth = SMOOTH_TRUE - canSmoothWith = list(/obj/structure/barricade/sandbags, /turf/closed/wall, /turf/closed/wall/r_wall, /obj/structure/falsewall, /obj/structure/falsewall/reinforced, /turf/closed/wall/rust, /turf/closed/wall/r_wall/rust, /obj/structure/barricade/security) - - -/obj/structure/barricade/security - name = "security barrier" - desc = "" - icon = 'icons/obj/objects.dmi' - icon_state = "barrier0" - density = FALSE - anchored = FALSE - max_integrity = 180 - proj_pass_rate = 20 - armor = list("melee" = 10, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 10, "acid" = 0) - - var/deploy_time = 40 - var/deploy_message = TRUE - - -/obj/structure/barricade/security/Initialize() - . = ..() - addtimer(CALLBACK(src, PROC_REF(deploy)), deploy_time) - -/obj/structure/barricade/security/proc/deploy() - icon_state = "barrier1" - density = TRUE - anchored = TRUE - if(deploy_message) - visible_message("[src] deploys!") - - -/obj/item/grenade/barrier - name = "barrier grenade" - desc = "" - icon = 'icons/obj/grenade.dmi' - icon_state = "flashbang" - item_state = "flashbang" - actions_types = list(/datum/action/item_action/toggle_barrier_spread) - var/mode = SINGLE - -/obj/item/grenade/barrier/examine(mob/user) - . = ..() - . += "Alt-click to toggle modes." - -/obj/item/grenade/barrier/AltClick(mob/living/carbon/user) - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE)) - return - toggle_mode(user) - -/obj/item/grenade/barrier/proc/toggle_mode(mob/user) - switch(mode) - if(SINGLE) - mode = VERTICAL - if(VERTICAL) - mode = HORIZONTAL - if(HORIZONTAL) - mode = SINGLE - - to_chat(user, "[src] is now in [mode] mode.") - -/obj/item/grenade/barrier/prime() - new /obj/structure/barricade/security(get_turf(src.loc)) - switch(mode) - if(VERTICAL) - var/target_turf = get_step(src, NORTH) - if(!(is_blocked_turf(target_turf))) - new /obj/structure/barricade/security(target_turf) - - var/target_turf2 = get_step(src, SOUTH) - if(!(is_blocked_turf(target_turf2))) - new /obj/structure/barricade/security(target_turf2) - if(HORIZONTAL) - var/target_turf = get_step(src, EAST) - if(!(is_blocked_turf(target_turf))) - new /obj/structure/barricade/security(target_turf) - - var/target_turf2 = get_step(src, WEST) - if(!(is_blocked_turf(target_turf2))) - new /obj/structure/barricade/security(target_turf2) - qdel(src) - -/obj/item/grenade/barrier/ui_action_click(mob/user) - toggle_mode(user) - - -#undef SINGLE -#undef VERTICAL -#undef HORIZONTAL - -#undef METAL -#undef WOOD -#undef SAND diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm deleted file mode 100644 index d0562f480e..0000000000 --- a/code/game/machinery/dish_drive.dm +++ /dev/null @@ -1,130 +0,0 @@ -/obj/machinery/dish_drive - name = "dish drive" - desc = "A culinary marvel that uses matter-to-energy conversion to store dishes and shards. Convenient! \ - Additional features include a vacuum function to suck in nearby dishes, and an automatic transfer beam that empties its contents into nearby disposal bins every now and then. \ - Or you can just drop your plates on the floor, like civilized folk." - icon = 'goon/icons/obj/kitchen.dmi' - icon_state = "synthesizer" - idle_power_usage = 8 //5 with default parts - active_power_usage = 13 //10 with default parts - density = FALSE - circuit = /obj/item/circuitboard/machine/dish_drive - pass_flags = PASSTABLE - var/static/list/collectable_items = list(/obj/item/trash/waffles, - /obj/item/trash/plate, - /obj/item/trash/tray, - /obj/item/reagent_containers/glass/bowl, - /obj/item/reagent_containers/food/drinks/drinkingglass, - /obj/item/kitchen/fork, - /obj/item/shard, - /obj/item/broken_bottle) - var/static/list/disposable_items = list(/obj/item/trash/waffles, - /obj/item/trash/plate, - /obj/item/trash/tray, - /obj/item/shard, - /obj/item/broken_bottle) - var/time_since_dishes = 0 - var/suction_enabled = TRUE - var/transmit_enabled = TRUE - -/obj/machinery/dish_drive/Initialize() - . = ..() - RefreshParts() - -/obj/machinery/dish_drive/examine(mob/user) - . = ..() - if(user.Adjacent(src)) - . += "Alt-click it to beam its contents to any nearby disposal bins." - -/obj/machinery/dish_drive/attack_hand(mob/living/user) - if(!contents.len) - to_chat(user, "There's nothing in [src]!") - return - var/obj/item/I = contents[contents.len] //the most recently-added item - user.put_in_hands(I) - to_chat(user, "I take out [I] from [src].") - playsound(src, 'sound/blank.ogg', 50, TRUE) - flick("synthesizer_beam", src) - -/obj/machinery/dish_drive/attackby(obj/item/I, mob/living/user, params) - if(is_type_in_list(I, collectable_items) && user.used_intent.type != INTENT_HARM) - if(!user.transferItemToLoc(I, src)) - return - to_chat(user, "I put [I] in [src], and it's beamed into energy!") - playsound(src, 'sound/blank.ogg', 50, TRUE) - flick("synthesizer_beam", src) - return - else if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), I)) - return - else if(default_unfasten_wrench(user, I)) - return - else if(default_deconstruction_crowbar(I, FALSE)) - return - ..() - -/obj/machinery/dish_drive/RefreshParts() - idle_power_usage = initial(idle_power_usage) - active_power_usage = initial(active_power_usage) - use_power = initial(use_power) - var/total_rating = 0 - for(var/obj/item/stock_parts/S in component_parts) - total_rating += S.rating - if(total_rating >= 9) - active_power_usage = 0 - use_power = NO_POWER_USE - else - idle_power_usage = max(0, idle_power_usage - total_rating) - active_power_usage = max(0, active_power_usage - total_rating) - var/obj/item/circuitboard/machine/dish_drive/board = locate() in component_parts - if(board) - suction_enabled = board.suction - transmit_enabled = board.transmit - -/obj/machinery/dish_drive/process() - if(time_since_dishes <= world.time && transmit_enabled) - do_the_dishes() - if(!suction_enabled) - return - for(var/obj/item/I in view(4, src)) - if(is_type_in_list(I, collectable_items) && I.loc != src && (!I.reagents || !I.reagents.total_volume)) - if(I.Adjacent(src)) - visible_message("[src] beams up [I]!") - I.forceMove(src) - playsound(src, 'sound/blank.ogg', 50, TRUE) - flick("synthesizer_beam", src) - else - step_towards(I, src) - -/obj/machinery/dish_drive/attack_ai(mob/living/user) - if(stat) - return - to_chat(user, "I send a disposal transmission signal to [src].") - do_the_dishes(TRUE) - -/obj/machinery/dish_drive/AltClick(mob/living/user) - if(user.canUseTopic(src, !issilicon(user))) - do_the_dishes(TRUE) - -/obj/machinery/dish_drive/proc/do_the_dishes(manual) - if(!contents.len) - return - var/obj/machinery/disposal/bin/bin = locate() in view(7, src) - if(!bin) - if(manual) - visible_message("[src] buzzes. There are no disposal bins in range!") - playsound(src, 'sound/blank.ogg', 50, TRUE) - return - var/disposed = 0 - for(var/obj/item/I in contents) - if(is_type_in_list(I, disposable_items)) - I.forceMove(bin) - use_power(active_power_usage) - disposed++ - if (disposed) - visible_message("[src] [pick("whooshes", "bwooms", "fwooms", "pshooms")] and beams [disposed] stored item\s into the nearby [bin.name].") - playsound(src, 'sound/blank.ogg', 50, TRUE) - playsound(bin, 'sound/blank.ogg', 50, TRUE) - Beam(bin, icon_state = "rped_upgrade", time = 5) - bin.update_icon() - flick("synthesizer_beam", src) - time_since_dishes = world.time + 600 diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm deleted file mode 100644 index c54924e25f..0000000000 --- a/code/game/machinery/dna_scanner.dm +++ /dev/null @@ -1,143 +0,0 @@ -/obj/machinery/dna_scannernew - name = "\improper DNA scanner" - desc = "" - icon = 'icons/obj/machines/cloning.dmi' - icon_state = "scanner" - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 50 - active_power_usage = 300 - occupant_typecache = list(/mob/living, /obj/item/bodypart/head, /obj/item/organ/brain) - circuit = /obj/item/circuitboard/machine/clonescanner - var/locked = FALSE - var/damage_coeff - var/scan_level - var/precision_coeff - var/message_cooldown - var/breakout_time = 1200 - -/obj/machinery/dna_scannernew/RefreshParts() - scan_level = 0 - damage_coeff = 0 - precision_coeff = 0 - for(var/obj/item/stock_parts/scanning_module/P in component_parts) - scan_level += P.rating - for(var/obj/item/stock_parts/matter_bin/M in component_parts) - precision_coeff = M.rating - for(var/obj/item/stock_parts/micro_laser/P in component_parts) - damage_coeff = P.rating - -/obj/machinery/dna_scannernew/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Radiation pulse accuracy increased by factor [precision_coeff**2].
Radiation pulse damage decreased by factor [damage_coeff**2].
" - -/obj/machinery/dna_scannernew/update_icon_state() - //no power or maintenance - if(stat & (NOPOWER|BROKEN)) - icon_state = initial(icon_state)+ (state_open ? "_open" : "") + "_unpowered" - return - - if((stat & MAINT) || panel_open) - icon_state = initial(icon_state)+ (state_open ? "_open" : "") + "_maintenance" - return - - //running and someone in there - if(occupant) - icon_state = initial(icon_state)+ "_occupied" - return - - //running - icon_state = initial(icon_state)+ (state_open ? "_open" : "") - -/obj/machinery/dna_scannernew/proc/toggle_open(mob/user) - if(panel_open) - to_chat(user, "Close the maintenance panel first.") - return - - if(state_open) - close_machine() - return - - else if(locked) - to_chat(user, "The bolts are locked down, securing the door shut.") - return - - open_machine() - -/obj/machinery/dna_scannernew/container_resist(mob/living/user) - if(!locked) - open_machine() - return - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT - user.visible_message("I see [user] kicking against the door of [src]!", \ - "I lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)", \ - "I hear a metallic creaking from [src].") - if(do_after(user,(breakout_time), target = src)) - if(!user || user.stat != CONSCIOUS || user.loc != src || state_open || !locked) - return - locked = FALSE - user.visible_message("[user] successfully broke out of [src]!", \ - "I successfully break out of [src]!") - open_machine() - -/obj/machinery/dna_scannernew/proc/locate_computer(type_) - for(var/direction in GLOB.cardinals) - var/C = locate(type_, get_step(src, direction)) - if(C) - return C - return null - -/obj/machinery/dna_scannernew/close_machine(mob/living/carbon/user) - if(!state_open) - return FALSE - - ..(user) - - // DNA manipulators cannot operate on severed heads or brains - if(iscarbon(occupant)) - var/obj/machinery/computer/scan_consolenew/console = locate_computer(/obj/machinery/computer/scan_consolenew) - if(console) - console.on_scanner_close() - - return TRUE - -/obj/machinery/dna_scannernew/open_machine() - if(state_open) - return FALSE - - ..() - - return TRUE - -/obj/machinery/dna_scannernew/relaymove(mob/user as mob) - if(user.stat || locked) - if(message_cooldown <= world.time) - message_cooldown = world.time + 50 - to_chat(user, "[src]'s door won't budge!") - return - open_machine() - -/obj/machinery/dna_scannernew/attackby(obj/item/I, mob/user, params) - - if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, I))//sent icon_state is irrelevant... - update_icon()//..since we're updating the icon here, since the scanner can be unpowered when opened/closed - return - - if(default_pry_open(I)) - return - - if(default_deconstruction_crowbar(I)) - return - - return ..() - -/obj/machinery/dna_scannernew/interact(mob/user) - toggle_open(user) - -/obj/machinery/dna_scannernew/MouseDrop_T(mob/target, mob/user) - var/mob/living/L = user - if(user.stat || (isliving(user) && (!(L.mobility_flags & MOBILITY_STAND) || !(L.mobility_flags & MOBILITY_UI))) || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser()) - return - close_machine(target) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm deleted file mode 100644 index d9ecf7df8e..0000000000 --- a/code/game/machinery/doors/airlock.dm +++ /dev/null @@ -1,1542 +0,0 @@ -/* - New methods: - pulse - sends a pulse into a wire for hacking purposes - cut - cuts a wire and makes any necessary state changes - mend - mends a wire and makes any necessary state changes - canAIControl - 1 if the AI can control the airlock, 0 if not (then check canAIHack to see if it can hack in) - canAIHack - 1 if the AI can hack into the airlock to recover control, 0 if not. Also returns 0 if the AI does not *need* to hack it. - hasPower - 1 if the main or backup power are functioning, 0 if not. - requiresIDs - 1 if the airlock is requiring IDs, 0 if not - isAllPowerCut - 1 if the main and backup power both have cut wires. - regainMainPower - handles the effect of main power coming back on. - loseMainPower - handles the effect of main power going offline. Usually (if one isn't already running) spawn a thread to count down how long it will be offline - counting down won't happen if main power was completely cut along with backup power, though, the thread will just sleep. - loseBackupPower - handles the effect of backup power going offline. - regainBackupPower - handles the effect of main power coming back on. - shock - has a chance of electrocuting its target. -*/ - -// Wires for the airlock are located in the datum folder, inside the wires datum folder. - -#define AIRLOCK_CLOSED 1 -#define AIRLOCK_CLOSING 2 -#define AIRLOCK_OPEN 3 -#define AIRLOCK_OPENING 4 -#define AIRLOCK_DENY 5 -#define AIRLOCK_EMAG 6 - -#define AIRLOCK_SECURITY_NONE 0 //Normal airlock //Wires are not secured -#define AIRLOCK_SECURITY_METAL 1 //Medium security airlock //There is a simple metal over wires (use welder) -#define AIRLOCK_SECURITY_PLASTEEL_I_S 2 //Sliced inner plating (use crowbar), jumps to 0 -#define AIRLOCK_SECURITY_PLASTEEL_I 3 //Removed outer plating, second layer here (use welder) -#define AIRLOCK_SECURITY_PLASTEEL_O_S 4 //Sliced outer plating (use crowbar) -#define AIRLOCK_SECURITY_PLASTEEL_O 5 //There is first layer of plasteel (use welder) -#define AIRLOCK_SECURITY_PLASTEEL 6 //Max security airlock //Fully secured wires (use wirecutters to remove grille, that is electrified) - -#define AIRLOCK_INTEGRITY_N 300 // Normal airlock integrity -#define AIRLOCK_INTEGRITY_MULTIPLIER 1.5 // How much reinforced doors health increases -#define AIRLOCK_DAMAGE_DEFLECTION_N 21 // Normal airlock damage deflection -#define AIRLOCK_DAMAGE_DEFLECTION_R 30 // Reinforced airlock damage deflection - -/obj/machinery/door/airlock - name = "airlock" - icon = 'icons/obj/doors/airlocks/station/public.dmi' - icon_state = "closed" - max_integrity = 300 - var/normal_integrity = AIRLOCK_INTEGRITY_N - integrity_failure = 0.25 - damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_N - autoclose = TRUE - secondsElectrified = MACHINE_NOT_ELECTRIFIED //How many seconds remain until the door is no longer electrified. -1/MACHINE_ELECTRIFIED_PERMANENT = permanently electrified until someone fixes it. - assemblytype = /obj/structure/door_assembly - normalspeed = 1 - explosion_block = 1 - hud_possible = list(DIAG_AIRLOCK_HUD) - - interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN - - var/security_level = 0 //How much are wires secured - var/aiControlDisabled = 0 //If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in. - var/hackProof = FALSE // if true, this door can't be hacked by the AI - var/secondsMainPowerLost = 0 //The number of seconds until power is restored. - var/secondsBackupPowerLost = 0 //The number of seconds until power is restored. - var/spawnPowerRestoreRunning = FALSE - var/lights = TRUE // bolt lights show by default - var/aiDisabledIdScanner = FALSE - var/aiHacking = FALSE - var/closeOtherId //Cyclelinking for airlocks that aren't on the same x or y coord as the target. - var/obj/machinery/door/airlock/closeOther - var/justzap = FALSE - var/obj/item/electronics/airlock/electronics - var/shockCooldown = FALSE //Prevents multiple shocks from happening - var/obj/item/note //Any papers pinned to the airlock - var/detonated = FALSE - var/abandoned = FALSE - var/doorOpen = 'sound/blank.ogg' - var/doorClose = 'sound/blank.ogg' - var/doorDeni = 'sound/blank.ogg' // i'm thinkin' Deni's - var/boltUp = 'sound/blank.ogg' - var/boltDown = 'sound/blank.ogg' - var/noPower = 'sound/blank.ogg' - var/previous_airlock = /obj/structure/door_assembly //what airlock assembly mineral plating was applied to - var/airlock_material //material of inner filling; if its an airlock with glass, this should be set to "glass" - var/overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' - var/note_overlay_file = 'icons/obj/doors/airlocks/station/overlays.dmi' //Used for papers and photos pinned to the airlock - - var/cyclelinkeddir = 0 - var/obj/machinery/door/airlock/cyclelinkedairlock - var/shuttledocked = 0 - var/delayed_close_requested = FALSE // TRUE means the door will automatically close the next time it's opened. - - var/air_tight = FALSE //TRUE means density will be set as soon as the door begins to close - var/prying_so_hard = FALSE - - rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE - rad_insulation = RAD_MEDIUM_INSULATION - - var/static/list/airlock_overlays = list() - -/obj/machinery/door/airlock/Initialize() - . = ..() - wires = new /datum/wires/airlock(src) - if(frequency) - set_frequency(frequency) - - if(closeOtherId != null) - addtimer(CALLBACK(PROC_REF(update_other_id)), 5) - if(glass) - airlock_material = "glass" - if(security_level > AIRLOCK_SECURITY_METAL) - obj_integrity = normal_integrity * AIRLOCK_INTEGRITY_MULTIPLIER - max_integrity = normal_integrity * AIRLOCK_INTEGRITY_MULTIPLIER - else - obj_integrity = normal_integrity - max_integrity = normal_integrity - if(damage_deflection == AIRLOCK_DAMAGE_DEFLECTION_N && security_level > AIRLOCK_SECURITY_METAL) - damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_R - prepare_huds() - for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds) - diag_hud.add_to_hud(src) - diag_hud_set_electrified() - - RegisterSignal(src, COMSIG_MACHINERY_BROKEN, PROC_REF(on_break)) - - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/door/airlock/LateInitialize() - . = ..() - if (cyclelinkeddir) - cyclelinkairlock() - if(abandoned) - var/outcome = rand(1,100) - switch(outcome) - if(1 to 9) - var/turf/here = get_turf(src) - for(var/turf/closed/T in range(2, src)) - here.PlaceOnTop(T.type) - qdel(src) - return - here.PlaceOnTop(/turf/closed/wall) - qdel(src) - return - if(9 to 11) - lights = FALSE - locked = TRUE - if(12 to 15) - locked = TRUE - if(16 to 23) - welded = TRUE - if(24 to 30) - panel_open = TRUE - update_icon() - -/obj/machinery/door/airlock/ComponentInitialize() - . = ..() - AddComponent(/datum/component/ntnet_interface) - -/obj/machinery/door/airlock/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE) - if(id_tag) - id_tag = "[idnum][id_tag]" - -/obj/machinery/door/airlock/proc/update_other_id() - for(var/obj/machinery/door/airlock/A in GLOB.airlocks) - if(A.closeOtherId == closeOtherId && A != src) - closeOther = A - break - -/obj/machinery/door/airlock/proc/cyclelinkairlock() - if (cyclelinkedairlock) - cyclelinkedairlock.cyclelinkedairlock = null - cyclelinkedairlock = null - if (!cyclelinkeddir) - return - var/limit = world.view - var/turf/T = get_turf(src) - var/obj/machinery/door/airlock/FoundDoor - do - T = get_step(T, cyclelinkeddir) - FoundDoor = locate() in T - if (FoundDoor && FoundDoor.cyclelinkeddir != get_dir(FoundDoor, src)) - FoundDoor = null - limit-- - while(!FoundDoor && limit) - if (!FoundDoor) - log_mapping("[src] at [AREACOORD(src)] failed to find a valid airlock to cyclelink with!") - return - FoundDoor.cyclelinkedairlock = src - cyclelinkedairlock = FoundDoor - -/obj/machinery/door/airlock/vv_edit_var(var_name) - . = ..() - switch (var_name) - if ("cyclelinkeddir") - cyclelinkairlock() - -/obj/machinery/door/airlock/check_access_ntnet(datum/netdata/data) - return !requiresID() || ..() - -/obj/machinery/door/airlock/ntnet_receive(datum/netdata/data) - // Check if the airlock is powered and can accept control packets. - if(!hasPower() || !canAIControl()) - return - - // Check packet access level. - if(!check_access_ntnet(data)) - return - - // Handle received packet. - var/command = lowertext(data.data["data"]) - var/command_value = lowertext(data.data["data_secondary"]) - switch(command) - if("open") - if(command_value == "on" && !density) - return - - if(command_value == "off" && density) - return - - if(density) - INVOKE_ASYNC(src, PROC_REF(open)) - else - INVOKE_ASYNC(src, PROC_REF(close)) - - if("bolt") - if(command_value == "on" && locked) - return - - if(command_value == "off" && !locked) - return - - if(locked) - unbolt() - else - bolt() - - if("emergency") - if(command_value == "on" && emergency) - return - - if(command_value == "off" && !emergency) - return - - emergency = !emergency - update_icon() - -/obj/machinery/door/airlock/lock() - bolt() - -/obj/machinery/door/airlock/proc/bolt() - if(locked) - return - locked = TRUE - playsound(src,boltDown,30,FALSE,3) - audible_message("I hear a click from the bottom of the door.", null, 1) - update_icon() - -/obj/machinery/door/airlock/unlock() - unbolt() - -/obj/machinery/door/airlock/proc/unbolt() - if(!locked) - return - locked = FALSE - playsound(src,boltUp,30,FALSE,3) - audible_message("I hear a click from the bottom of the door.", null, 1) - update_icon() - -/obj/machinery/door/airlock/narsie_act() - var/turf/T = get_turf(src) - var/obj/machinery/door/airlock/cult/A - if(GLOB.cult_narsie) - var/runed = prob(20) - if(glass) - if(runed) - A = new/obj/machinery/door/airlock/cult/glass(T) - else - A = new/obj/machinery/door/airlock/cult/unruned/glass(T) - else - if(runed) - A = new/obj/machinery/door/airlock/cult(T) - else - A = new/obj/machinery/door/airlock/cult/unruned(T) - A.name = name - else - A = new /obj/machinery/door/airlock/cult/weak(T) - qdel(src) - -/obj/machinery/door/airlock/Destroy() - QDEL_NULL(wires) - QDEL_NULL(electronics) - if (cyclelinkedairlock) - if (cyclelinkedairlock.cyclelinkedairlock == src) - cyclelinkedairlock.cyclelinkedairlock = null - cyclelinkedairlock = null - if(id_tag) - for(var/obj/machinery/doorButtons/D in GLOB.machines) - D.removeMe(src) - QDEL_NULL(note) - for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds) - diag_hud.remove_from_hud(src) - return ..() - -/obj/machinery/door/airlock/handle_atom_del(atom/A) - if(A == note) - note = null - update_icon() - -/obj/machinery/door/airlock/bumpopen(mob/living/user) //Airlocks now zap you when you 'bump' them open when they're electrified. --NeoFite - if(!issilicon(usr)) - if(isElectrified()) - if(!justzap) - if(shock(user, 100)) - justzap = TRUE - addtimer(VARSET_CALLBACK(src, justzap, FALSE) , 10) - return - else - return - else if(user.hallucinating() && ishuman(user) && prob(1) && !operating) - var/mob/living/carbon/human/H = user - if(H.gloves) - var/obj/item/clothing/gloves/G = H.gloves - if(G.siemens_coefficient)//not insulated - new /datum/hallucination/shock(H) - return - if (cyclelinkedairlock) - if (!shuttledocked && !emergency && !cyclelinkedairlock.shuttledocked && !cyclelinkedairlock.emergency && allowed(user)) - if(cyclelinkedairlock.operating) - cyclelinkedairlock.delayed_close_requested = TRUE - else - addtimer(CALLBACK(cyclelinkedairlock, PROC_REF(close)), 2) - ..() - -/obj/machinery/door/airlock/proc/isElectrified() - if(secondsElectrified != MACHINE_NOT_ELECTRIFIED) - return TRUE - return FALSE - -/obj/machinery/door/airlock/proc/canAIControl(mob/user) - return ((aiControlDisabled != 1) && !isAllPowerCut()) - -/obj/machinery/door/airlock/proc/canAIHack() - return ((aiControlDisabled==1) && (!hackProof) && (!isAllPowerCut())); - -/obj/machinery/door/airlock/hasPower() - return ((!secondsMainPowerLost || !secondsBackupPowerLost) && !(stat & NOPOWER)) - -/obj/machinery/door/airlock/requiresID() - return !(wires.is_cut(WIRE_IDSCAN) || aiDisabledIdScanner) - -/obj/machinery/door/airlock/proc/isAllPowerCut() - if((wires.is_cut(WIRE_POWER1) || wires.is_cut(WIRE_POWER2)) && (wires.is_cut(WIRE_BACKUP1) || wires.is_cut(WIRE_BACKUP2))) - return TRUE - -/obj/machinery/door/airlock/proc/regainMainPower() - if(secondsMainPowerLost > 0) - secondsMainPowerLost = 0 - update_icon() - -/obj/machinery/door/airlock/proc/handlePowerRestore() - var/cont = TRUE - while (cont) - sleep(10) - if(QDELETED(src)) - return - cont = FALSE - if(secondsMainPowerLost>0) - if(!wires.is_cut(WIRE_POWER1) && !wires.is_cut(WIRE_POWER2)) - secondsMainPowerLost -= 1 - updateDialog() - cont = TRUE - if(secondsBackupPowerLost>0) - if(!wires.is_cut(WIRE_BACKUP1) && !wires.is_cut(WIRE_BACKUP2)) - secondsBackupPowerLost -= 1 - updateDialog() - cont = TRUE - spawnPowerRestoreRunning = FALSE - updateDialog() - update_icon() - -/obj/machinery/door/airlock/proc/loseMainPower() - if(secondsMainPowerLost <= 0) - secondsMainPowerLost = 60 - if(secondsBackupPowerLost < 10) - secondsBackupPowerLost = 10 - if(!spawnPowerRestoreRunning) - spawnPowerRestoreRunning = TRUE - INVOKE_ASYNC(src, PROC_REF(handlePowerRestore)) - update_icon() - -/obj/machinery/door/airlock/proc/loseBackupPower() - if(secondsBackupPowerLost < 60) - secondsBackupPowerLost = 60 - if(!spawnPowerRestoreRunning) - spawnPowerRestoreRunning = TRUE - INVOKE_ASYNC(src, PROC_REF(handlePowerRestore)) - update_icon() - -/obj/machinery/door/airlock/proc/regainBackupPower() - if(secondsBackupPowerLost > 0) - secondsBackupPowerLost = 0 - update_icon() - -// shock user with probability prb (if all connections & power are working) -// returns TRUE if shocked, FALSE otherwise -// The preceding comment was borrowed from the grille's shock script -/obj/machinery/door/airlock/proc/shock(mob/living/user, prb) - if(!istype(user) || !hasPower()) // unpowered, no shock - return FALSE - if(shockCooldown > world.time) - return FALSE //Already shocked someone recently? - if(!prob(prb)) - return FALSE //you lucked out, no shock for you - do_sparks(5, TRUE, src) - var/check_range = TRUE - if(electrocute_mob(user, get_area(src), src, 1, check_range)) - shockCooldown = world.time + 10 - return TRUE - else - return FALSE - -/obj/machinery/door/airlock/update_icon(state=0, override=0) - if(operating && !override) - return - switch(state) - if(0) - if(density) - state = AIRLOCK_CLOSED - else - state = AIRLOCK_OPEN - icon_state = "" - if(AIRLOCK_OPEN, AIRLOCK_CLOSED) - icon_state = "" - if(AIRLOCK_DENY, AIRLOCK_OPENING, AIRLOCK_CLOSING, AIRLOCK_EMAG) - icon_state = "nonexistenticonstate" //MADNESS - set_airlock_overlays(state) - -/obj/machinery/door/airlock/proc/set_airlock_overlays(state) - var/mutable_appearance/frame_overlay - var/mutable_appearance/filling_overlay - var/mutable_appearance/lights_overlay - var/mutable_appearance/panel_overlay - var/mutable_appearance/weld_overlay - var/mutable_appearance/damag_overlay - var/mutable_appearance/sparks_overlay - var/mutable_appearance/note_overlay - var/notetype = note_type() - - switch(state) - if(AIRLOCK_CLOSED) - frame_overlay = get_airlock_overlay("closed", icon) - if(airlock_material) - filling_overlay = get_airlock_overlay("[airlock_material]_closed", overlays_file) - else - filling_overlay = get_airlock_overlay("fill_closed", icon) - if(panel_open) - if(security_level) - panel_overlay = get_airlock_overlay("panel_closed_protected", overlays_file) - else - panel_overlay = get_airlock_overlay("panel_closed", overlays_file) - if(welded) - weld_overlay = get_airlock_overlay("welded", overlays_file) - if(obj_integrity < integrity_failure * max_integrity) - damag_overlay = get_airlock_overlay("sparks_broken", overlays_file) - else if(obj_integrity < (0.75 * max_integrity)) - damag_overlay = get_airlock_overlay("sparks_damaged", overlays_file) - if(lights && hasPower()) - if(locked) - lights_overlay = get_airlock_overlay("lights_bolts", overlays_file) - else if(emergency) - lights_overlay = get_airlock_overlay("lights_emergency", overlays_file) - if(note) - note_overlay = get_airlock_overlay(notetype, note_overlay_file) - - if(AIRLOCK_DENY) - if(!hasPower()) - return - frame_overlay = get_airlock_overlay("closed", icon) - if(airlock_material) - filling_overlay = get_airlock_overlay("[airlock_material]_closed", overlays_file) - else - filling_overlay = get_airlock_overlay("fill_closed", icon) - if(panel_open) - if(security_level) - panel_overlay = get_airlock_overlay("panel_closed_protected", overlays_file) - else - panel_overlay = get_airlock_overlay("panel_closed", overlays_file) - if(obj_integrity < integrity_failure * max_integrity) - damag_overlay = get_airlock_overlay("sparks_broken", overlays_file) - else if(obj_integrity < (0.75 * max_integrity)) - damag_overlay = get_airlock_overlay("sparks_damaged", overlays_file) - if(welded) - weld_overlay = get_airlock_overlay("welded", overlays_file) - lights_overlay = get_airlock_overlay("lights_denied", overlays_file) - if(note) - note_overlay = get_airlock_overlay(notetype, note_overlay_file) - - if(AIRLOCK_EMAG) - frame_overlay = get_airlock_overlay("closed", icon) - sparks_overlay = get_airlock_overlay("sparks", overlays_file) - if(airlock_material) - filling_overlay = get_airlock_overlay("[airlock_material]_closed", overlays_file) - else - filling_overlay = get_airlock_overlay("fill_closed", icon) - if(panel_open) - if(security_level) - panel_overlay = get_airlock_overlay("panel_closed_protected", overlays_file) - else - panel_overlay = get_airlock_overlay("panel_closed", overlays_file) - if(obj_integrity < integrity_failure * max_integrity) - damag_overlay = get_airlock_overlay("sparks_broken", overlays_file) - else if(obj_integrity < (0.75 * max_integrity)) - damag_overlay = get_airlock_overlay("sparks_damaged", overlays_file) - if(welded) - weld_overlay = get_airlock_overlay("welded", overlays_file) - if(note) - note_overlay = get_airlock_overlay(notetype, note_overlay_file) - - if(AIRLOCK_CLOSING) - frame_overlay = get_airlock_overlay("closing", icon) - if(airlock_material) - filling_overlay = get_airlock_overlay("[airlock_material]_closing", overlays_file) - else - filling_overlay = get_airlock_overlay("fill_closing", icon) - if(lights && hasPower()) - lights_overlay = get_airlock_overlay("lights_closing", overlays_file) - if(panel_open) - if(security_level) - panel_overlay = get_airlock_overlay("panel_closing_protected", overlays_file) - else - panel_overlay = get_airlock_overlay("panel_closing", overlays_file) - if(note) - note_overlay = get_airlock_overlay("[notetype]_closing", note_overlay_file) - - if(AIRLOCK_OPEN) - frame_overlay = get_airlock_overlay("open", icon) - if(airlock_material) - filling_overlay = get_airlock_overlay("[airlock_material]_open", overlays_file) - else - filling_overlay = get_airlock_overlay("fill_open", icon) - if(panel_open) - if(security_level) - panel_overlay = get_airlock_overlay("panel_open_protected", overlays_file) - else - panel_overlay = get_airlock_overlay("panel_open", overlays_file) - if(obj_integrity < (0.75 * max_integrity)) - damag_overlay = get_airlock_overlay("sparks_open", overlays_file) - if(note) - note_overlay = get_airlock_overlay("[notetype]_open", note_overlay_file) - - if(AIRLOCK_OPENING) - frame_overlay = get_airlock_overlay("opening", icon) - if(airlock_material) - filling_overlay = get_airlock_overlay("[airlock_material]_opening", overlays_file) - else - filling_overlay = get_airlock_overlay("fill_opening", icon) - if(lights && hasPower()) - lights_overlay = get_airlock_overlay("lights_opening", overlays_file) - if(panel_open) - if(security_level) - panel_overlay = get_airlock_overlay("panel_opening_protected", overlays_file) - else - panel_overlay = get_airlock_overlay("panel_opening", overlays_file) - if(note) - note_overlay = get_airlock_overlay("[notetype]_opening", note_overlay_file) - - cut_overlays() - add_overlay(frame_overlay) - add_overlay(filling_overlay) - add_overlay(lights_overlay) - add_overlay(panel_overlay) - add_overlay(weld_overlay) - add_overlay(sparks_overlay) - add_overlay(damag_overlay) - add_overlay(note_overlay) - check_unres() - -/proc/get_airlock_overlay(icon_state, icon_file) - var/obj/machinery/door/airlock/A - pass(A) //suppress unused warning - var/list/airlock_overlays = A.airlock_overlays - var/iconkey = "[icon_state][icon_file]" - if((!(. = airlock_overlays[iconkey]))) - . = airlock_overlays[iconkey] = mutable_appearance(icon_file, icon_state) - -/obj/machinery/door/airlock/proc/check_unres() //unrestricted sides. This overlay indicates which directions the player can access even without an ID - if(hasPower() && unres_sides) - if(unres_sides & NORTH) - var/image/I = image(icon='icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_n") - I.pixel_y = 32 - set_light(l_range = 2, l_power = 1) - add_overlay(I) - if(unres_sides & SOUTH) - var/image/I = image(icon='icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_s") - I.pixel_y = -32 - set_light(l_range = 2, l_power = 1) - add_overlay(I) - if(unres_sides & EAST) - var/image/I = image(icon='icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_e") - I.pixel_x = 32 - set_light(l_range = 2, l_power = 1) - add_overlay(I) - if(unres_sides & WEST) - var/image/I = image(icon='icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_w") - I.pixel_x = -32 - set_light(l_range = 2, l_power = 1) - add_overlay(I) - else - set_light(0) - -/obj/machinery/door/airlock/do_animate(animation) - switch(animation) - if("opening") - update_icon(AIRLOCK_OPENING) - if("closing") - update_icon(AIRLOCK_CLOSING) - if("deny") - if(!stat) - update_icon(AIRLOCK_DENY) - playsound(src,doorDeni,50,FALSE,3) - sleep(6) - update_icon(AIRLOCK_CLOSED) - -/obj/machinery/door/airlock/examine(mob/user) - . = ..() - if(obj_flags & EMAGGED) - . += "Its access panel is smoking slightly." - if(note) - if(!in_range(user, src)) - . += "There's a [note.name] pinned to the front. You can't read it from here." - else - . += "There's a [note.name] pinned to the front..." - . += note.examine(user) - - if(panel_open) - switch(security_level) - if(AIRLOCK_SECURITY_NONE) - . += "Its wires are exposed!" - if(AIRLOCK_SECURITY_METAL) - . += "Its wires are hidden behind a welded metal cover." - if(AIRLOCK_SECURITY_PLASTEEL_I_S) - . += "There is some shredded plasteel inside." - if(AIRLOCK_SECURITY_PLASTEEL_I) - . += "Its wires are behind an inner layer of plasteel." - if(AIRLOCK_SECURITY_PLASTEEL_O_S) - . += "There is some shredded plasteel inside." - if(AIRLOCK_SECURITY_PLASTEEL_O) - . += "There is a welded plasteel cover hiding its wires." - if(AIRLOCK_SECURITY_PLASTEEL) - . += "There is a protective grille over its panel." - else if(security_level) - if(security_level == AIRLOCK_SECURITY_METAL) - . += "It looks a bit stronger." - else - . += "It looks very robust." - - if(issilicon(user) && !(stat & BROKEN)) - . += "Shift-click [src] to [ density ? "open" : "close"] it." - . += "Ctrl-click [src] to [ locked ? "raise" : "drop"] its bolts." - . += "Alt-click [src] to [ secondsElectrified ? "un-electrify" : "permanently electrify"] it." - . += "Ctrl-Shift-click [src] to [ emergency ? "disable" : "enable"] emergency access." - -/obj/machinery/door/airlock/attack_ai(mob/user) - if(!canAIControl(user)) - if(canAIHack()) - hack(user) - return - else - to_chat(user, "Airlock AI control has been blocked with a firewall. Unable to hack.") - if(obj_flags & EMAGGED) - to_chat(user, "Unable to interface: Airlock is unresponsive.") - return - if(detonated) - to_chat(user, "Unable to interface. Airlock control panel damaged.") - return - - ui_interact(user) - -/obj/machinery/door/airlock/proc/hack(mob/user) - set waitfor = 0 - if(!aiHacking) - aiHacking = TRUE - to_chat(user, "Airlock AI control has been blocked. Beginning fault-detection.") - sleep(50) - if(canAIControl(user)) - to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.") - aiHacking = FALSE - return - else if(!canAIHack()) - to_chat(user, "Connection lost! Unable to hack airlock.") - aiHacking = FALSE - return - to_chat(user, "Fault confirmed: airlock control wire disabled or cut.") - sleep(20) - to_chat(user, "Attempting to hack into airlock. This may take some time.") - sleep(200) - if(canAIControl(user)) - to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.") - aiHacking = FALSE - return - else if(!canAIHack()) - to_chat(user, "Connection lost! Unable to hack airlock.") - aiHacking = FALSE - return - to_chat(user, "Upload access confirmed. Loading control program into airlock software.") - sleep(170) - if(canAIControl(user)) - to_chat(user, "Alert cancelled. Airlock control has been restored without our assistance.") - aiHacking = FALSE - return - else if(!canAIHack()) - to_chat(user, "Connection lost! Unable to hack airlock.") - aiHacking = FALSE - return - to_chat(user, "Transfer complete. Forcing airlock to execute program.") - sleep(50) - //disable blocked control - aiControlDisabled = 2 - to_chat(user, "Receiving control information from airlock.") - sleep(10) - //bring up airlock dialog - aiHacking = FALSE - if(user) - attack_ai(user) - -/obj/machinery/door/airlock/attack_animal(mob/user) - . = ..() - if(isElectrified()) - shock(user, 100) - -/obj/machinery/door/airlock/attack_paw(mob/user) - return attack_hand(user) - -/obj/machinery/door/airlock/attack_hand(mob/user) - . = ..() - if(.) - return - if(!(issilicon(user) || IsAdminGhost(user))) - if(isElectrified()) - if(shock(user, 100)) - return - - if(ishuman(user) && prob(40) && density) - var/mob/living/carbon/human/H = user - if((HAS_TRAIT(H, TRAIT_DUMB)) && Adjacent(user)) - playsound(src, 'sound/blank.ogg', 25, TRUE) - if(!istype(H.head, /obj/item/clothing/head/helmet)) - H.visible_message("[user] headbutts the airlock.", \ - "I headbutt the airlock!") - H.Paralyze(100) - H.apply_damage(10, BRUTE, BODY_ZONE_HEAD) - else - visible_message("[user] headbutts the airlock. Good thing [user.p_theyre()] wearing a helmet.") - -/obj/machinery/door/airlock/attempt_wire_interaction(mob/user) - if(security_level) - to_chat(user, "Wires are protected!") - return WIRE_INTERACTION_FAIL - return ..() - -/obj/machinery/door/airlock/proc/electrified_loop() - while (secondsElectrified > MACHINE_NOT_ELECTRIFIED) - sleep(10) - if(QDELETED(src)) - return - - secondsElectrified-- - updateDialog() - // This is to protect against changing to permanent, mid loop. - if(secondsElectrified == MACHINE_NOT_ELECTRIFIED) - set_electrified(MACHINE_NOT_ELECTRIFIED) - else - set_electrified(MACHINE_ELECTRIFIED_PERMANENT) - updateDialog() - -/obj/machinery/door/airlock/Topic(href, href_list, nowindow = 0) - // If you add an if(..()) check you must first remove the var/nowindow parameter. - // Otherwise it will runtime with this kind of error: null.Topic() - if(!nowindow) - ..() - if(!usr.canUseTopic(src) && !IsAdminGhost(usr)) - return - add_fingerprint(usr) - - if((in_range(src, usr) && isturf(loc)) && panel_open) - usr.set_machine(src) - - add_fingerprint(usr) - if(!nowindow) - updateUsrDialog() - else - updateDialog() - - -/obj/machinery/door/airlock/attackby(obj/item/C, mob/user, params) - if(!issilicon(user) && !IsAdminGhost(user)) - if(isElectrified()) - if(shock(user, 75)) - return - add_fingerprint(user) - - if(panel_open) - switch(security_level) - if(AIRLOCK_SECURITY_NONE) - if(istype(C, /obj/item/stack/sheet/metal)) - var/obj/item/stack/sheet/metal/S = C - if(S.get_amount() < 2) - to_chat(user, "I need at least 2 metal sheets to reinforce [src].") - return - to_chat(user, "I start reinforcing [src].") - if(do_after(user, 20, TRUE, src)) - if(!panel_open || !S.use(2)) - return - user.visible_message("[user] reinforces \the [src] with metal.", - "I reinforce \the [src] with metal.") - security_level = AIRLOCK_SECURITY_METAL - update_icon() - return - else if(istype(C, /obj/item/stack/sheet/plasteel)) - var/obj/item/stack/sheet/plasteel/S = C - if(S.get_amount() < 2) - to_chat(user, "I need at least 2 plasteel sheets to reinforce [src].") - return - to_chat(user, "I start reinforcing [src].") - if(do_after(user, 20, TRUE, src)) - if(!panel_open || !S.use(2)) - return - user.visible_message("[user] reinforces \the [src] with plasteel.", - "I reinforce \the [src] with plasteel.") - security_level = AIRLOCK_SECURITY_PLASTEEL - modify_max_integrity(normal_integrity * AIRLOCK_INTEGRITY_MULTIPLIER) - damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_R - update_icon() - return - if(AIRLOCK_SECURITY_METAL) - if(C.tool_behaviour == TOOL_WELDER) - if(!C.tool_start_check(user, amount=2)) - return - to_chat(user, "I begin cutting the panel's shielding...") - if(C.use_tool(src, user, 40, volume=50, amount = 2)) - if(!panel_open) - return - user.visible_message("[user] cuts through \the [src]'s shielding.", - "I cut through \the [src]'s shielding.", - "I hear welding.") - security_level = AIRLOCK_SECURITY_NONE - spawn_atom_to_turf(/obj/item/stack/sheet/metal, user.loc, 2) - update_icon() - return - if(AIRLOCK_SECURITY_PLASTEEL_I_S) - if(C.tool_behaviour == TOOL_CROWBAR) - var/obj/item/crowbar/W = C - to_chat(user, "I start removing the inner layer of shielding...") - if(W.use_tool(src, user, 40, volume=100)) - if(!panel_open) - return - if(security_level != AIRLOCK_SECURITY_PLASTEEL_I_S) - return - user.visible_message("[user] remove \the [src]'s shielding.", - "I remove \the [src]'s inner shielding.") - security_level = AIRLOCK_SECURITY_NONE - modify_max_integrity(normal_integrity) - damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_N - spawn_atom_to_turf(/obj/item/stack/sheet/plasteel, user.loc, 1) - update_icon() - return - if(AIRLOCK_SECURITY_PLASTEEL_I) - if(C.tool_behaviour == TOOL_WELDER) - if(!C.tool_start_check(user, amount=2)) - return - to_chat(user, "I begin cutting the inner layer of shielding...") - if(C.use_tool(src, user, 40, volume=50, amount=2)) - if(!panel_open) - return - user.visible_message("[user] cuts through \the [src]'s shielding.", - "I cut through \the [src]'s shielding.", - "I hear welding.") - security_level = AIRLOCK_SECURITY_PLASTEEL_I_S - return - if(AIRLOCK_SECURITY_PLASTEEL_O_S) - if(C.tool_behaviour == TOOL_CROWBAR) - to_chat(user, "I start removing outer layer of shielding...") - if(C.use_tool(src, user, 40, volume=100)) - if(!panel_open) - return - if(security_level != AIRLOCK_SECURITY_PLASTEEL_O_S) - return - user.visible_message("[user] remove \the [src]'s shielding.", - "I remove \the [src]'s shielding.") - security_level = AIRLOCK_SECURITY_PLASTEEL_I - spawn_atom_to_turf(/obj/item/stack/sheet/plasteel, user.loc, 1) - return - if(AIRLOCK_SECURITY_PLASTEEL_O) - if(C.tool_behaviour == TOOL_WELDER) - if(!C.tool_start_check(user, amount=2)) - return - to_chat(user, "I begin cutting the outer layer of shielding...") - if(C.use_tool(src, user, 40, volume=50, amount=2)) - if(!panel_open) - return - user.visible_message("[user] cuts through \the [src]'s shielding.", - "I cut through \the [src]'s shielding.", - "I hear welding.") - security_level = AIRLOCK_SECURITY_PLASTEEL_O_S - return - if(AIRLOCK_SECURITY_PLASTEEL) - if(C.tool_behaviour == TOOL_WIRECUTTER) - if(hasPower() && shock(user, 60)) // Protective grille of wiring is electrified - return - to_chat(user, "I start cutting through the outer grille.") - if(C.use_tool(src, user, 10, volume=100)) - if(!panel_open) - return - user.visible_message("[user] cut through \the [src]'s outer grille.", - "I cut through \the [src]'s outer grille.") - security_level = AIRLOCK_SECURITY_PLASTEEL_O - return - if(C.tool_behaviour == TOOL_SCREWDRIVER) - if(panel_open && detonated) - to_chat(user, "[src] has no maintenance panel!") - return - panel_open = !panel_open - to_chat(user, "I [panel_open ? "open":"close"] the maintenance panel of the airlock.") - C.play_tool_sound(src) - update_icon() - else if((C.tool_behaviour == TOOL_WIRECUTTER) && note) - user.visible_message("[user] cuts down [note] from [src].", "I remove [note] from [src].") - C.play_tool_sound(src) - note.forceMove(get_turf(user)) - note = null - update_icon() - else if(is_wire_tool(C) && panel_open) - attempt_wire_interaction(user) - return - else if(istype(C, /obj/item/pai_cable)) - var/obj/item/pai_cable/cable = C - cable.plugin(src, user) - else if(istype(C, /obj/item/airlock_painter)) - change_paintjob(C, user) - else if(istype(C, /obj/item/paper) || istype(C, /obj/item/photo)) - if(note) - to_chat(user, "There's already something pinned to this airlock! Use wirecutters to remove it.") - return - if(!user.transferItemToLoc(C, src)) - to_chat(user, "For some reason, you can't attach [C]!") - return - user.visible_message("[user] pins [C] to [src].", "I pin [C] to [src].") - note = C - update_icon() - else - return ..() - - -/obj/machinery/door/airlock/try_to_weld(obj/item/weldingtool/W, mob/user) - if(!operating && density) - if(user.used_intent.type != INTENT_HELP) - if(!W.tool_start_check(user, amount=0)) - return - user.visible_message("[user] is [welded ? "unwelding":"welding"] the airlock.", \ - "I begin [welded ? "unwelding":"welding"] the airlock...", \ - "I hear welding.") - if(W.use_tool(src, user, 40, volume=50, extra_checks = CALLBACK(src, PROC_REF(weld_checks), W, user))) - welded = !welded - user.visible_message("[user.name] has [welded? "welded shut":"unwelded"] [src].", \ - "I [welded ? "weld the airlock shut":"unweld the airlock"].") - update_icon() - else - if(obj_integrity < max_integrity) - if(!W.tool_start_check(user, amount=0)) - return - user.visible_message("[user] is welding the airlock.", \ - "I begin repairing the airlock...", \ - "I hear welding.") - if(W.use_tool(src, user, 40, volume=50, extra_checks = CALLBACK(src, PROC_REF(weld_checks), W, user))) - obj_integrity = max_integrity - stat &= ~BROKEN - user.visible_message("[user.name] has repaired [src].", \ - "I finish repairing the airlock.") - update_icon() - else - to_chat(user, "The airlock doesn't need repairing.") - -/obj/machinery/door/airlock/proc/weld_checks(obj/item/weldingtool/W, mob/user) - return !operating && density - -/obj/machinery/door/airlock/try_to_crowbar(obj/item/I, mob/living/user, forced = FALSE) - if(I) - var/beingcrowbarred = (I.tool_behaviour == TOOL_CROWBAR) - if(!security_level && (beingcrowbarred && panel_open && ((obj_flags & EMAGGED) || (density && welded && !operating && !hasPower() && !locked)))) - user.visible_message("[user] removes the electronics from the airlock assembly.", \ - "I start to remove electronics from the airlock assembly...") - if(I.use_tool(src, user, 40, volume=100)) - deconstruct(TRUE, user) - return - if(locked) - to_chat(user, "The airlock's bolts prevent it from being forced!") - return - if(welded) - to_chat(user, "It's welded, it won't budge!") - return - if(hasPower()) - if(forced) - if(isElectrified()) - shock(user,100)//it's like sticking a forck in a power socket - return - - if(!density)//already open - return - - if(!prying_so_hard) - var/time_to_open = 50 - playsound(src, 'sound/blank.ogg', 100, TRUE) //is it aliens or just the CE being a dick? - prying_so_hard = TRUE - if(do_after(user, time_to_open, TRUE, src)) - open(2) - if(density && !open(2)) - to_chat(user, "Despite your attempts, [src] refuses to open.") - prying_so_hard = FALSE - return - to_chat(user, "The airlock's motors resist your efforts to force it!") - return - - if(!operating) - if(istype(I, /obj/item/twohanded/fireaxe)) //being fireaxe'd - var/obj/item/twohanded/fireaxe/F = I - if(!F.wielded) - to_chat(user, "I need to be wielding the fire axe to do that!") - return - INVOKE_ASYNC(src, (density ? PROC_REF(open) : PROC_REF(close)), 2) - - -/obj/machinery/door/airlock/open(forced=0) - if( operating || welded || locked ) - return FALSE - if(!forced) - if(!hasPower() || wires.is_cut(WIRE_OPEN)) - return FALSE - if(forced < 2) - if(obj_flags & EMAGGED) - return FALSE - use_power(50) - playsound(src, doorOpen, 30, TRUE) - if(closeOther != null && istype(closeOther, /obj/machinery/door/airlock/) && !closeOther.density) - closeOther.close() - else - playsound(src, 'sound/blank.ogg', 30, TRUE) - - if(autoclose) - autoclose_in(normalspeed ? 150 : 15) - - if(!density) - return TRUE - operating = TRUE - update_icon(AIRLOCK_OPENING, 1) - sleep(1) - set_opacity(0) - update_freelook_sight() - sleep(4) - density = FALSE - flags_1 &= ~PREVENT_CLICK_UNDER_1 - air_update_turf(1) - sleep(1) - layer = OPEN_DOOR_LAYER - update_icon(AIRLOCK_OPEN, 1) - operating = FALSE - if(delayed_close_requested) - delayed_close_requested = FALSE - addtimer(CALLBACK(src, PROC_REF(close)), 1) - return TRUE - - -/obj/machinery/door/airlock/close(forced=0) - if(operating || welded || locked) - return - if(density) - return TRUE - if(!forced) - if(!hasPower() || wires.is_cut(WIRE_BOLTS)) - return - if(safe) - for(var/atom/movable/M in get_turf(src)) - if(M.density && M != src) //something is blocking the door - autoclose_in(60) - return - - if(forced < 2) - if(obj_flags & EMAGGED) - return - use_power(50) - playsound(src, doorClose, 30, TRUE) - else - playsound(src, 'sound/blank.ogg', 30, TRUE) - - var/obj/structure/window/killthis = (locate(/obj/structure/window) in get_turf(src)) - if(killthis) - killthis.ex_act(EXPLODE_HEAVY)//Smashin windows - - operating = TRUE - update_icon(AIRLOCK_CLOSING, 1) - layer = CLOSED_DOOR_LAYER - if(air_tight) - density = TRUE - flags_1 |= PREVENT_CLICK_UNDER_1 - air_update_turf(1) - sleep(1) - if(!air_tight) - density = TRUE - flags_1 |= PREVENT_CLICK_UNDER_1 - air_update_turf(1) - sleep(4) - if(!safe) - crush() - if(visible && !glass) - set_opacity(1) - update_freelook_sight() - sleep(1) - update_icon(AIRLOCK_CLOSED, 1) - operating = FALSE - delayed_close_requested = FALSE - if(safe) - CheckForMobs() - return TRUE - -/obj/machinery/door/airlock/proc/prison_open() - if(obj_flags & EMAGGED) - return - locked = FALSE - open() - locked = TRUE - return - - -/obj/machinery/door/airlock/proc/change_paintjob(obj/item/airlock_painter/W, mob/user) - if(!W.can_use(user)) - return - - var/list/optionlist - if(airlock_material == "glass") - optionlist = list("Standard", "Public", "Engineering", "Atmospherics", "Security", "Command", "Medical", "Research", "Science", "Virology", "Mining", "Maintenance", "External", "External Maintenance") - else - optionlist = list("Standard", "Public", "Engineering", "Atmospherics", "Security", "Command", "Medical", "Research", "Freezer", "Science", "Virology", "Mining", "Maintenance", "External", "External Maintenance") - - var/paintjob = input(user, "Please select a paintjob for this airlock.") in sortList(optionlist) - if((!in_range(src, usr) && loc != usr) || !W.use_paint(user)) - return - switch(paintjob) - if("Standard") - icon = 'icons/obj/doors/airlocks/station/public.dmi' - overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' - assemblytype = /obj/structure/door_assembly - if("Public") - icon = 'icons/obj/doors/airlocks/station2/glass.dmi' - overlays_file = 'icons/obj/doors/airlocks/station2/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_public - if("Engineering") - icon = 'icons/obj/doors/airlocks/station/engineering.dmi' - overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_eng - if("Atmospherics") - icon = 'icons/obj/doors/airlocks/station/atmos.dmi' - overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_atmo - if("Security") - icon = 'icons/obj/doors/airlocks/station/security.dmi' - overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_sec - if("Command") - icon = 'icons/obj/doors/airlocks/station/command.dmi' - overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_com - if("Medical") - icon = 'icons/obj/doors/airlocks/station/medical.dmi' - overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_med - if("Research") - icon = 'icons/obj/doors/airlocks/station/research.dmi' - overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_research - if("Freezer") - icon = 'icons/obj/doors/airlocks/station/freezer.dmi' - overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_fre - if("Science") - icon = 'icons/obj/doors/airlocks/station/science.dmi' - overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_science - if("Virology") - icon = 'icons/obj/doors/airlocks/station/virology.dmi' - overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_viro - if("Mining") - icon = 'icons/obj/doors/airlocks/station/mining.dmi' - overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_min - if("Maintenance") - icon = 'icons/obj/doors/airlocks/station/maintenance.dmi' - overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_mai - if("External") - icon = 'icons/obj/doors/airlocks/external/external.dmi' - overlays_file = 'icons/obj/doors/airlocks/external/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_ext - if("External Maintenance") - icon = 'icons/obj/doors/airlocks/station/maintenanceexternal.dmi' - overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_extmai - update_icon() - -/obj/machinery/door/airlock/CanAStarPass(obj/item/card/id/ID) -//Airlock is passable if it is open (!density), bot has access, and is not bolted shut or powered off) - return !density || (check_access(ID) && !locked && hasPower()) - -/obj/machinery/door/airlock/emag_act(mob/user) - if(!operating && density && hasPower() && !(obj_flags & EMAGGED)) - operating = TRUE - update_icon(AIRLOCK_EMAG, 1) - sleep(6) - if(QDELETED(src)) - return - operating = FALSE - if(!open()) - update_icon(AIRLOCK_CLOSED, 1) - obj_flags |= EMAGGED - lights = FALSE - locked = TRUE - loseMainPower() - loseBackupPower() - -/obj/machinery/door/airlock/attack_alien(mob/living/carbon/alien/humanoid/user) - add_fingerprint(user) - if(isElectrified()) - shock(user, 100) //Mmm, fried xeno! - return - if(!density) //Already open - return - if(locked || welded) //Extremely generic, as aliens only understand the basics of how airlocks work. - to_chat(user, "[src] refuses to budge!") - return - user.visible_message("[user] begins prying open [src].",\ - "I begin digging your claws into [src] with all your might!",\ - "I hear groaning metal...") - var/time_to_open = 5 - if(hasPower()) - time_to_open = 50 //Powered airlocks take longer to open, and are loud. - playsound(src, 'sound/blank.ogg', 100, TRUE) - - - if(do_after(user, time_to_open, TRUE, src)) - if(density && !open(2)) //The airlock is still closed, but something prevented it opening. (Another player noticed and bolted/welded the airlock in time!) - to_chat(user, "Despite your efforts, [src] managed to resist your attempts to open it!") - -/obj/machinery/door/airlock/hostile_lockdown(mob/origin) - // Must be powered and have working AI wire. - if(canAIControl(src) && !stat) - locked = FALSE //For airlocks that were bolted open. - safe = FALSE //DOOR CRUSH - close() - bolt() //Bolt it! - set_electrified(MACHINE_ELECTRIFIED_PERMANENT) //Shock it! - if(origin) - LAZYADD(shockedby, "\[[time_stamp()]\] [key_name(origin)]") - - -/obj/machinery/door/airlock/disable_lockdown() - // Must be powered and have working AI wire. - if(canAIControl(src) && !stat) - unbolt() - set_electrified(MACHINE_NOT_ELECTRIFIED) - open() - safe = TRUE - - -/obj/machinery/door/airlock/proc/on_break() - if(!panel_open) - panel_open = TRUE - wires.cut_all() - -/obj/machinery/door/airlock/proc/set_electrified(seconds, mob/user) - secondsElectrified = seconds - diag_hud_set_electrified() - if(secondsElectrified > MACHINE_NOT_ELECTRIFIED) - INVOKE_ASYNC(src, PROC_REF(electrified_loop)) - - if(user) - var/message - switch(secondsElectrified) - if(MACHINE_ELECTRIFIED_PERMANENT) - message = "permanently shocked" - if(MACHINE_NOT_ELECTRIFIED) - message = "unshocked" - else - message = "temp shocked for [secondsElectrified] seconds" - LAZYADD(shockedby, text("\[[time_stamp()]\] [key_name(user)] - ([uppertext(message)])")) - log_combat(user, src, message) - add_hiddenprint(user) - -/obj/machinery/door/airlock/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) - . = ..() - if(obj_integrity < (0.75 * max_integrity)) - update_icon() - - -/obj/machinery/door/airlock/deconstruct(disassembled = TRUE, mob/user) - if(!(flags_1 & NODECONSTRUCT_1)) - var/obj/structure/door_assembly/A - if(assemblytype) - A = new assemblytype(loc) - else - A = new /obj/structure/door_assembly(loc) - //If you come across a null assemblytype, it will produce the default assembly instead of disintegrating. - A.heat_proof_finished = heat_proof //tracks whether there's rglass in - A.setAnchored(TRUE) - A.glass = glass - A.state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS - A.created_name = name - A.previous_assembly = previous_airlock - A.update_name() - A.update_icon() - - if(!disassembled) - if(A) - A.obj_integrity = A.max_integrity * 0.5 - else if(obj_flags & EMAGGED) - if(user) - to_chat(user, "I discard the damaged electronics.") - else - if(user) - to_chat(user, "I remove the airlock electronics.") - - var/obj/item/electronics/airlock/ae - if(!electronics) - ae = new/obj/item/electronics/airlock(loc) - gen_access() - if(req_one_access.len) - ae.one_access = 1 - ae.accesses = req_one_access - else - ae.accesses = req_access - else - ae = electronics - electronics = null - ae.forceMove(drop_location()) - qdel(src) - -/obj/machinery/door/airlock/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - switch(the_rcd.mode) - if(RCD_DECONSTRUCT) - if(security_level != AIRLOCK_SECURITY_NONE) - to_chat(user, "[src]'s reinforcement needs to be removed first.") - return FALSE - return list("mode" = RCD_DECONSTRUCT, "delay" = 50, "cost" = 32) - return FALSE - -/obj/machinery/door/airlock/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) - switch(passed_mode) - if(RCD_DECONSTRUCT) - to_chat(user, "I deconstruct the airlock.") - qdel(src) - return TRUE - return FALSE - -/obj/machinery/door/airlock/proc/note_type() //Returns a string representing the type of note pinned to this airlock - if(!note) - return - else if(istype(note, /obj/item/paper)) - return "note" - else if(istype(note, /obj/item/photo)) - return "photo" - -/obj/machinery/door/airlock/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "ai_airlock", name, 500, 390, master_ui, state) - ui.open() - return TRUE - -/obj/machinery/door/airlock/ui_data() - var/list/data = list() - - var/list/power = list() - power["main"] = secondsMainPowerLost ? 0 : 2 // boolean - power["main_timeleft"] = secondsMainPowerLost - power["backup"] = secondsBackupPowerLost ? 0 : 2 // boolean - power["backup_timeleft"] = secondsBackupPowerLost - data["power"] = power - - data["shock"] = secondsElectrified == MACHINE_NOT_ELECTRIFIED ? 2 : 0 - data["shock_timeleft"] = secondsElectrified - data["id_scanner"] = !aiDisabledIdScanner - data["emergency"] = emergency // access - data["locked"] = locked // bolted - data["lights"] = lights // bolt lights - data["safe"] = safe // safeties - data["speed"] = normalspeed // safe speed - data["welded"] = welded // welded - data["opened"] = !density // opened - - var/list/wire = list() - wire["main_1"] = !wires.is_cut(WIRE_POWER1) - wire["main_2"] = !wires.is_cut(WIRE_POWER2) - wire["backup_1"] = !wires.is_cut(WIRE_BACKUP1) - wire["backup_2"] = !wires.is_cut(WIRE_BACKUP2) - wire["shock"] = !wires.is_cut(WIRE_SHOCK) - wire["id_scanner"] = !wires.is_cut(WIRE_IDSCAN) - wire["bolts"] = !wires.is_cut(WIRE_BOLTS) - wire["lights"] = !wires.is_cut(WIRE_LIGHT) - wire["safe"] = !wires.is_cut(WIRE_SAFETY) - wire["timing"] = !wires.is_cut(WIRE_TIMING) - - data["wires"] = wire - return data - -/obj/machinery/door/airlock/ui_act(action, params) - if(..()) - return - if(!user_allowed(usr)) - return - switch(action) - if("disrupt-main") - if(!secondsMainPowerLost) - loseMainPower() - update_icon() - else - to_chat(usr, "Main power is already offline.") - . = TRUE - if("disrupt-backup") - if(!secondsBackupPowerLost) - loseBackupPower() - update_icon() - else - to_chat(usr, "Backup power is already offline.") - . = TRUE - if("shock-restore") - shock_restore(usr) - . = TRUE - if("shock-temp") - shock_temp(usr) - . = TRUE - if("shock-perm") - shock_perm(usr) - . = TRUE - if("idscan-toggle") - aiDisabledIdScanner = !aiDisabledIdScanner - . = TRUE - if("emergency-toggle") - toggle_emergency(usr) - . = TRUE - if("bolt-toggle") - toggle_bolt(usr) - . = TRUE - if("light-toggle") - lights = !lights - update_icon() - . = TRUE - if("safe-toggle") - safe = !safe - . = TRUE - if("speed-toggle") - normalspeed = !normalspeed - . = TRUE - if("open-close") - user_toggle_open(usr) - . = TRUE - -/obj/machinery/door/airlock/proc/user_allowed(mob/user) - return (issilicon(user) && canAIControl(user)) || IsAdminGhost(user) - -/obj/machinery/door/airlock/proc/shock_restore(mob/user) - if(!user_allowed(user)) - return - if(wires.is_cut(WIRE_SHOCK)) - to_chat(user, "Can't un-electrify the airlock - The electrification wire is cut.") - else if(isElectrified()) - set_electrified(MACHINE_NOT_ELECTRIFIED, user) - -/obj/machinery/door/airlock/proc/shock_temp(mob/user) - if(!user_allowed(user)) - return - if(wires.is_cut(WIRE_SHOCK)) - to_chat(user, "The electrification wire has been cut.") - else - set_electrified(MACHINE_DEFAULT_ELECTRIFY_TIME, user) - -/obj/machinery/door/airlock/proc/shock_perm(mob/user) - if(!user_allowed(user)) - return - if(wires.is_cut(WIRE_SHOCK)) - to_chat(user, "The electrification wire has been cut.") - else - set_electrified(MACHINE_ELECTRIFIED_PERMANENT, user) - -/obj/machinery/door/airlock/proc/toggle_bolt(mob/user) - if(!user_allowed(user)) - return - if(wires.is_cut(WIRE_BOLTS)) - to_chat(user, "The door bolt drop wire is cut - you can't toggle the door bolts.") - return - if(locked) - if(!hasPower()) - to_chat(user, "The door has no power - you can't raise the door bolts.") - else - unbolt() - log_combat(user, src, "unbolted") - else - bolt() - log_combat(user, src, "bolted") - -/obj/machinery/door/airlock/proc/toggle_emergency(mob/user) - if(!user_allowed(user)) - return - emergency = !emergency - update_icon() - -/obj/machinery/door/airlock/proc/user_toggle_open(mob/user) - if(!user_allowed(user)) - return - if(welded) - to_chat(user, text("The airlock has been welded shut!")) - else if(locked) - to_chat(user, text("The door bolts are down!")) - else if(!density) - close() - else - open() - -#undef AIRLOCK_CLOSED -#undef AIRLOCK_CLOSING -#undef AIRLOCK_OPEN -#undef AIRLOCK_OPENING -#undef AIRLOCK_DENY -#undef AIRLOCK_EMAG - -#undef AIRLOCK_SECURITY_NONE -#undef AIRLOCK_SECURITY_METAL -#undef AIRLOCK_SECURITY_PLASTEEL_I_S -#undef AIRLOCK_SECURITY_PLASTEEL_I -#undef AIRLOCK_SECURITY_PLASTEEL_O_S -#undef AIRLOCK_SECURITY_PLASTEEL_O -#undef AIRLOCK_SECURITY_PLASTEEL - -#undef AIRLOCK_INTEGRITY_N -#undef AIRLOCK_INTEGRITY_MULTIPLIER -#undef AIRLOCK_DAMAGE_DEFLECTION_N -#undef AIRLOCK_DAMAGE_DEFLECTION_R diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm deleted file mode 100644 index 395d581527..0000000000 --- a/code/game/machinery/doors/airlock_electronics.dm +++ /dev/null @@ -1,67 +0,0 @@ -/obj/item/electronics/airlock - name = "airlock electronics" - req_access = list(ACCESS_MAINT_TUNNELS) - custom_price = 5 - - var/list/accesses = list() - var/one_access = 0 - var/unres_sides = 0 //unrestricted sides, or sides of the airlock that will open regardless of access - -/obj/item/electronics/airlock/examine(mob/user) - . = ..() - . += "Has a neat selection menu for modifying airlock access levels." - -/obj/item/electronics/airlock/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "airlock_electronics", name, 420, 485, master_ui, state) - ui.open() - -/obj/item/electronics/airlock/ui_data() - var/list/data = list() - var/list/regions = list() - - for(var/i in 1 to 7) - var/list/region = list() - var/list/accesses = list() - for(var/j in get_region_accesses(i)) - var/list/access = list() - access["name"] = get_access_desc(j) - access["id"] = j - access["req"] = (j in src.accesses) - accesses[++accesses.len] = access - region["name"] = get_region_accesses_name(i) - region["accesses"] = accesses - regions[++regions.len] = region - data["regions"] = regions - data["oneAccess"] = one_access - data["unres_direction"] = unres_sides - - return data - -/obj/item/electronics/airlock/ui_act(action, params) - if(..()) - return - switch(action) - if("clear_all") - accesses = list() - one_access = 0 - . = TRUE - if("grant_all") - accesses = get_all_accesses() - . = TRUE - if("one_access") - one_access = !one_access - . = TRUE - if("set") - var/access = text2num(params["access"]) - if (!(access in accesses)) - accesses += access - else - accesses -= access - . = TRUE - if("direc_set") - var/unres_direction = text2num(params["unres_direction"]) - unres_sides ^= unres_direction //XOR, toggles only the bit that was clicked - . = TRUE diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm deleted file mode 100644 index 601c93c489..0000000000 --- a/code/game/machinery/doors/airlock_types.dm +++ /dev/null @@ -1,561 +0,0 @@ -/* - Station Airlocks Regular -*/ - -/obj/machinery/door/airlock/command - icon = 'icons/obj/doors/airlocks/station/command.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_com - normal_integrity = 450 - -/obj/machinery/door/airlock/security - icon = 'icons/obj/doors/airlocks/station/security.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_sec - normal_integrity = 450 - -/obj/machinery/door/airlock/engineering - icon = 'icons/obj/doors/airlocks/station/engineering.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_eng - -/obj/machinery/door/airlock/medical - icon = 'icons/obj/doors/airlocks/station/medical.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_med - -/obj/machinery/door/airlock/maintenance - name = "maintenance access" - icon = 'icons/obj/doors/airlocks/station/maintenance.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_mai - normal_integrity = 250 - -/obj/machinery/door/airlock/maintenance/external - name = "external airlock access" - icon = 'icons/obj/doors/airlocks/station/maintenanceexternal.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_extmai - -/obj/machinery/door/airlock/mining - name = "mining airlock" - icon = 'icons/obj/doors/airlocks/station/mining.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_min - -/obj/machinery/door/airlock/atmos - name = "atmospherics airlock" - icon = 'icons/obj/doors/airlocks/station/atmos.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_atmo - -/obj/machinery/door/airlock/research - icon = 'icons/obj/doors/airlocks/station/research.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_research - -/obj/machinery/door/airlock/freezer - name = "freezer airlock" - icon = 'icons/obj/doors/airlocks/station/freezer.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_fre - -/obj/machinery/door/airlock/science - icon = 'icons/obj/doors/airlocks/station/science.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_science - -/obj/machinery/door/airlock/virology - icon = 'icons/obj/doors/airlocks/station/virology.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_viro - -////////////////////////////////// -/* - Station Airlocks Glass -*/ - -/obj/machinery/door/airlock/glass - opacity = 0 - glass = TRUE - -/obj/machinery/door/airlock/glass/incinerator - autoclose = FALSE - frequency = FREQ_AIRLOCK_CONTROL - heat_proof = TRUE - req_access = list(ACCESS_SYNDICATE) - -/obj/machinery/door/airlock/glass/incinerator/syndicatelava_interior - name = "Turbine Interior Airlock" - id_tag = INCINERATOR_SYNDICATELAVA_AIRLOCK_INTERIOR - -/obj/machinery/door/airlock/glass/incinerator/syndicatelava_exterior - name = "Turbine Exterior Airlock" - id_tag = INCINERATOR_SYNDICATELAVA_AIRLOCK_EXTERIOR - -/obj/machinery/door/airlock/command/glass - opacity = 0 - glass = TRUE - normal_integrity = 400 - -/obj/machinery/door/airlock/engineering/glass - opacity = 0 - glass = TRUE - -/obj/machinery/door/airlock/engineering/glass/critical - critical_machine = TRUE //stops greytide virus from opening & bolting doors in critical positions, such as the SM chamber. - -/obj/machinery/door/airlock/security/glass - opacity = 0 - glass = TRUE - normal_integrity = 400 - -/obj/machinery/door/airlock/medical/glass - opacity = 0 - glass = TRUE - -/obj/machinery/door/airlock/research/glass - opacity = 0 - glass = TRUE - -/obj/machinery/door/airlock/research/glass/incinerator - autoclose = FALSE - frequency = FREQ_AIRLOCK_CONTROL - heat_proof = TRUE - req_access = list(ACCESS_TOX) - -/obj/machinery/door/airlock/research/glass/incinerator/toxmix_interior - name = "Mixing Room Interior Airlock" - id_tag = INCINERATOR_TOXMIX_AIRLOCK_INTERIOR - -/obj/machinery/door/airlock/research/glass/incinerator/toxmix_exterior - name = "Mixing Room Exterior Airlock" - id_tag = INCINERATOR_TOXMIX_AIRLOCK_EXTERIOR - -/obj/machinery/door/airlock/mining/glass - opacity = 0 - glass = TRUE - -/obj/machinery/door/airlock/atmos/glass - opacity = 0 - glass = TRUE - -/obj/machinery/door/airlock/atmos/glass/critical - critical_machine = TRUE //stops greytide virus from opening & bolting doors in critical positions, such as the SM chamber. - -/obj/machinery/door/airlock/science/glass - opacity = 0 - glass = TRUE - -/obj/machinery/door/airlock/virology/glass - opacity = 0 - glass = TRUE - -/obj/machinery/door/airlock/maintenance/glass - opacity = 0 - glass = TRUE - -/obj/machinery/door/airlock/maintenance/external/glass - opacity = 0 - glass = TRUE - normal_integrity = 200 - -////////////////////////////////// -/* - Station Airlocks Mineral -*/ - -/obj/machinery/door/airlock/gold - name = "gold airlock" - icon = 'icons/obj/doors/airlocks/station/gold.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_gold - -/obj/machinery/door/airlock/gold/glass - opacity = 0 - glass = TRUE - -/obj/machinery/door/airlock/silver - name = "silver airlock" - icon = 'icons/obj/doors/airlocks/station/silver.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_silver - -/obj/machinery/door/airlock/silver/glass - opacity = 0 - glass = TRUE - -/obj/machinery/door/airlock/diamond - name = "diamond airlock" - icon = 'icons/obj/doors/airlocks/station/diamond.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_diamond - normal_integrity = 1000 - explosion_block = 2 - -/obj/machinery/door/airlock/diamond/glass - normal_integrity = 950 - opacity = 0 - glass = TRUE - -/obj/machinery/door/airlock/uranium - name = "uranium airlock" - icon = 'icons/obj/doors/airlocks/station/uranium.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_uranium - var/last_event = 0 - -/obj/machinery/door/airlock/uranium/process() - if(world.time > last_event+20) - if(prob(50)) - radiate() - last_event = world.time - ..() - -/obj/machinery/door/airlock/uranium/proc/radiate() - radiation_pulse(get_turf(src), 150) - return - -/obj/machinery/door/airlock/uranium/glass - opacity = 0 - glass = TRUE - -/obj/machinery/door/airlock/plasma - name = "plasma airlock" - desc = "" - icon = 'icons/obj/doors/airlocks/station/plasma.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_plasma - -/obj/machinery/door/airlock/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 300) - PlasmaBurn(exposed_temperature) - -/obj/machinery/door/airlock/plasma/proc/ignite(exposed_temperature) - if(exposed_temperature > 300) - PlasmaBurn(exposed_temperature) - -/obj/machinery/door/airlock/plasma/proc/PlasmaBurn(temperature) - atmos_spawn_air("plasma=500;TEMP=1000") - var/obj/structure/door_assembly/DA - DA = new /obj/structure/door_assembly(loc) - if(glass) - DA.glass = TRUE - if(heat_proof) - DA.heat_proof_finished = TRUE - DA.update_icon() - DA.update_name() - qdel(src) - -/obj/machinery/door/airlock/plasma/BlockSuperconductivity() //we don't stop the heat~ - return 0 - -/obj/machinery/door/airlock/plasma/attackby(obj/item/C, mob/user, params) - if(C.get_temperature() > 300)//If the temperature of the object is over 300, then ignite - message_admins("Plasma airlock ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(src)]") - log_game("Plasma airlock ignited by [key_name(user)] in [AREACOORD(src)]") - ignite(C.get_temperature()) - else - return ..() - -/obj/machinery/door/airlock/plasma/glass - opacity = 0 - glass = TRUE - -/obj/machinery/door/airlock/bananium - name = "bananium airlock" - desc = "" - icon = 'icons/obj/doors/airlocks/station/bananium.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_bananium - doorOpen = 'sound/blank.ogg' - -/obj/machinery/door/airlock/bananium/glass - opacity = 0 - glass = TRUE - -/obj/machinery/door/airlock/sandstone - name = "sandstone airlock" - icon = 'icons/obj/doors/airlocks/station/sandstone.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_sandstone - -/obj/machinery/door/airlock/sandstone/glass - opacity = 0 - glass = TRUE - -/obj/machinery/door/airlock/wood - name = "wooden airlock" - icon = 'icons/obj/doors/airlocks/station/wood.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_wood - -/obj/machinery/door/airlock/wood/glass - opacity = 0 - glass = TRUE - -/obj/machinery/door/airlock/titanium - name = "shuttle airlock" - assemblytype = /obj/structure/door_assembly/door_assembly_titanium - icon = 'icons/obj/doors/airlocks/shuttle/shuttle.dmi' - overlays_file = 'icons/obj/doors/airlocks/shuttle/overlays.dmi' - normal_integrity = 400 - -/obj/machinery/door/airlock/titanium/glass - normal_integrity = 350 - opacity = 0 - glass = TRUE - -/obj/machinery/door/airlock/bronze - name = "bronze airlock" - icon = 'icons/obj/doors/airlocks/clockwork/pinion_airlock.dmi' - overlays_file = 'icons/obj/doors/airlocks/clockwork/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_bronze - -/obj/machinery/door/airlock/bronze/seethru - assemblytype = /obj/structure/door_assembly/door_assembly_bronze/seethru - opacity = 0 - glass = TRUE -////////////////////////////////// -/* - Station2 Airlocks -*/ - -/obj/machinery/door/airlock/public - icon = 'icons/obj/doors/airlocks/station2/glass.dmi' - overlays_file = 'icons/obj/doors/airlocks/station2/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_public - -/obj/machinery/door/airlock/public/glass - opacity = 0 - glass = TRUE - -/obj/machinery/door/airlock/public/glass/incinerator - autoclose = FALSE - frequency = FREQ_AIRLOCK_CONTROL - heat_proof = TRUE - req_one_access = list(ACCESS_ATMOSPHERICS, ACCESS_MAINT_TUNNELS) - -/obj/machinery/door/airlock/public/glass/incinerator/atmos_interior - name = "Turbine Interior Airlock" - id_tag = INCINERATOR_ATMOS_AIRLOCK_INTERIOR - -/obj/machinery/door/airlock/public/glass/incinerator/atmos_exterior - name = "Turbine Exterior Airlock" - id_tag = INCINERATOR_ATMOS_AIRLOCK_EXTERIOR - -////////////////////////////////// -/* - External Airlocks -*/ - -/obj/machinery/door/airlock/external - name = "external airlock" - icon = 'icons/obj/doors/airlocks/external/external.dmi' - overlays_file = 'icons/obj/doors/airlocks/external/overlays.dmi' - note_overlay_file = 'icons/obj/doors/airlocks/external/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_ext - -/obj/machinery/door/airlock/external/glass - opacity = 0 - glass = TRUE - -////////////////////////////////// -/* - CentCom Airlocks -*/ - -/obj/machinery/door/airlock/centcom //Use grunge as a station side version, as these have special effects related to them via phobias and such. - icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi' - overlays_file = 'icons/obj/doors/airlocks/centcom/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_centcom - normal_integrity = 1000 - security_level = 6 - explosion_block = 2 - -/obj/machinery/door/airlock/grunge - icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi' - overlays_file = 'icons/obj/doors/airlocks/centcom/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_grunge - -////////////////////////////////// -/* - Vault Airlocks -*/ - -/obj/machinery/door/airlock/vault - name = "vault door" - icon = 'icons/obj/doors/airlocks/vault/vault.dmi' - overlays_file = 'icons/obj/doors/airlocks/vault/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_vault - explosion_block = 2 - normal_integrity = 400 // reverse engieneerd: 400 * 1.5 (sec lvl 6) = 600 = original - security_level = 6 - -////////////////////////////////// -/* - Hatch Airlocks -*/ - -/obj/machinery/door/airlock/hatch - name = "airtight hatch" - icon = 'icons/obj/doors/airlocks/hatch/centcom.dmi' - overlays_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' - note_overlay_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_hatch - -/obj/machinery/door/airlock/maintenance_hatch - name = "maintenance hatch" - icon = 'icons/obj/doors/airlocks/hatch/maintenance.dmi' - overlays_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' - note_overlay_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_mhatch - -////////////////////////////////// -/* - High Security Airlocks -*/ - -/obj/machinery/door/airlock/highsecurity - name = "high tech security airlock" - icon = 'icons/obj/doors/airlocks/highsec/highsec.dmi' - overlays_file = 'icons/obj/doors/airlocks/highsec/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_highsecurity - explosion_block = 2 - normal_integrity = 500 - security_level = 1 - damage_deflection = 30 - -////////////////////////////////// -/* - Shuttle Airlocks -*/ - -/obj/machinery/door/airlock/shuttle - name = "shuttle airlock" - icon = 'icons/obj/doors/airlocks/shuttle/shuttle.dmi' - overlays_file = 'icons/obj/doors/airlocks/shuttle/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_shuttle - -/obj/machinery/door/airlock/shuttle/glass - opacity = 0 - glass = TRUE - -/obj/machinery/door/airlock/abductor - name = "alien airlock" - desc = "" - icon = 'icons/obj/doors/airlocks/abductor/abductor_airlock.dmi' - overlays_file = 'icons/obj/doors/airlocks/abductor/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_abductor - note_overlay_file = 'icons/obj/doors/airlocks/external/overlays.dmi' - damage_deflection = 30 - explosion_block = 3 - hackProof = TRUE - aiControlDisabled = 1 - normal_integrity = 700 - security_level = 1 - -////////////////////////////////// -/* - Cult Airlocks -*/ - -/obj/machinery/door/airlock/cult - name = "cult airlock" - icon = 'icons/obj/doors/airlocks/cult/runed/cult.dmi' - overlays_file = 'icons/obj/doors/airlocks/cult/runed/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_cult - hackProof = TRUE - aiControlDisabled = 1 - req_access = list(ACCESS_BLOODCULT) - damage_deflection = 10 - var/openingoverlaytype = /obj/effect/temp_visual/cult/door - var/friendly = FALSE - var/stealthy = FALSE - -/obj/machinery/door/airlock/cult/Initialize() - . = ..() - new openingoverlaytype(loc) - -/obj/machinery/door/airlock/cult/canAIControl(mob/user) - return (iscultist(user) && !isAllPowerCut()) - -/obj/machinery/door/airlock/cult/on_break() - if(!panel_open) - panel_open = TRUE - -/obj/machinery/door/airlock/cult/isElectrified() - return FALSE - -/obj/machinery/door/airlock/cult/hasPower() - return TRUE - -/obj/machinery/door/airlock/cult/allowed(mob/living/L) - if(!density) - return 1 - if(friendly || iscultist(L) || istype(L, /mob/living/simple_animal/shade) || isconstruct(L)) - if(!stealthy) - new openingoverlaytype(loc) - return 1 - else - if(!stealthy) - new /obj/effect/temp_visual/cult/sac(loc) - var/atom/throwtarget - throwtarget = get_edge_target_turf(src, get_dir(src, get_step_away(L, src))) - SEND_SOUND(L, sound(pick('sound/blank.ogg'),0,1,50)) - flash_color(L, flash_color="#960000", flash_time=20) - L.Paralyze(40) - L.throw_at(throwtarget, 5, 1,src) - return 0 - -/obj/machinery/door/airlock/cult/proc/conceal() - icon = 'icons/obj/doors/airlocks/station/maintenance.dmi' - overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' - name = "airlock" - desc = "" - stealthy = TRUE - update_icon() - -/obj/machinery/door/airlock/cult/proc/reveal() - icon = initial(icon) - overlays_file = initial(overlays_file) - name = initial(name) - desc = initial(desc) - stealthy = initial(stealthy) - update_icon() - -/obj/machinery/door/airlock/cult/narsie_act() - return - -/obj/machinery/door/airlock/cult/emp_act(severity) - return - -/obj/machinery/door/airlock/cult/friendly - friendly = TRUE - -/obj/machinery/door/airlock/cult/glass - glass = TRUE - opacity = 0 - -/obj/machinery/door/airlock/cult/glass/friendly - friendly = TRUE - -/obj/machinery/door/airlock/cult/unruned - icon = 'icons/obj/doors/airlocks/cult/unruned/cult.dmi' - overlays_file = 'icons/obj/doors/airlocks/cult/unruned/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_cult/unruned - openingoverlaytype = /obj/effect/temp_visual/cult/door/unruned - -/obj/machinery/door/airlock/cult/unruned/friendly - friendly = TRUE - -/obj/machinery/door/airlock/cult/unruned/glass - glass = TRUE - opacity = 0 - -/obj/machinery/door/airlock/cult/unruned/glass/friendly - friendly = TRUE - -/obj/machinery/door/airlock/cult/weak - name = "brittle cult airlock" - desc = "" - normal_integrity = 150 - damage_deflection = 5 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - -////////////////////////////////// -/* - Misc Airlocks -*/ - -/obj/machinery/door/airlock/glass_large - name = "large glass airlock" - icon = 'icons/obj/doors/airlocks/glass_large/glass_large.dmi' - overlays_file = 'icons/obj/doors/airlocks/glass_large/overlays.dmi' - opacity = 0 - assemblytype = null - glass = TRUE - bound_width = 64 // 2x1 - -/obj/machinery/door/airlock/glass_large/narsie_act() - return diff --git a/code/game/machinery/doors/alarmlock.dm b/code/game/machinery/doors/alarmlock.dm deleted file mode 100644 index 8b3778f2a7..0000000000 --- a/code/game/machinery/doors/alarmlock.dm +++ /dev/null @@ -1,43 +0,0 @@ -/obj/machinery/door/airlock/alarmlock - name = "glass alarm airlock" - icon = 'icons/obj/doors/airlocks/station2/glass.dmi' - overlays_file = 'icons/obj/doors/airlocks/station2/overlays.dmi' - opacity = 0 - assemblytype = /obj/structure/door_assembly/door_assembly_public - glass = TRUE - - var/datum/radio_frequency/air_connection - var/air_frequency = FREQ_ATMOS_ALARMS - autoclose = FALSE - -/obj/machinery/door/airlock/alarmlock/Initialize() - . = ..() - air_connection = new - -/obj/machinery/door/airlock/alarmlock/Destroy() - SSradio.remove_object(src,air_frequency) - air_connection = null - return ..() - -/obj/machinery/door/airlock/alarmlock/Initialize() - . = ..() - SSradio.remove_object(src, air_frequency) - air_connection = SSradio.add_object(src, air_frequency, RADIO_TO_AIRALARM) - INVOKE_ASYNC(src, PROC_REF(open)) - -/obj/machinery/door/airlock/alarmlock/receive_signal(datum/signal/signal) - ..() - if(stat & (NOPOWER|BROKEN)) - return - - var/alarm_area = signal.data["zone"] - var/alert = signal.data["alert"] - - if(alarm_area == get_area_name(src)) - switch(alert) - if("severe") - autoclose = TRUE - close() - if("minor", "clear") - autoclose = FALSE - open() diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm deleted file mode 100644 index a777ca997c..0000000000 --- a/code/game/machinery/doors/brigdoors.dm +++ /dev/null @@ -1,255 +0,0 @@ -#define CHARS_PER_LINE 5 -#define FONT_SIZE "5pt" -#define FONT_COLOR "#09f" -#define FONT_STYLE "Small Fonts" -#define MAX_TIMER 9000 - -#define PRESET_SHORT 1200 -#define PRESET_MEDIUM 1800 -#define PRESET_LONG 3000 - - - -/////////////////////////////////////////////////////////////////////////////////////////////// -// Brig Door control displays. -// Description: This is a controls the timer for the brig doors, displays the timer on itself and -// has a popup window when used, allowing to set the timer. -// Code Notes: Combination of old brigdoor.dm code from rev4407 and the status_display.dm code -// Date: 01/September/2010 -// Programmer: Veryinky -///////////////////////////////////////////////////////////////////////////////////////////////// -/obj/machinery/door_timer - name = "door timer" - icon = 'icons/obj/status_display.dmi' - icon_state = "frame" - desc = "" - req_access = list(ACCESS_SECURITY) - density = FALSE - var/id = null // id of linked machinery/lockers - - var/activation_time = 0 - var/timer_duration = 0 - - var/timing = FALSE // boolean, true/1 timer is on, false/0 means it's not timing - var/list/obj/machinery/targets = list() - var/obj/item/radio/Radio //needed to send messages to sec radio - - maptext_height = 26 - maptext_width = 32 - maptext_y = -1 - ui_x = 300 - ui_y = 138 - -/obj/machinery/door_timer/Initialize() - . = ..() - - Radio = new/obj/item/radio(src) - Radio.listening = 0 - -/obj/machinery/door_timer/Initialize() - . = ..() - if(id != null) - for(var/obj/machinery/door/window/brigdoor/M in urange(20, src)) - if (M.id == id) - targets += M - - for(var/obj/machinery/flasher/F in urange(20, src)) - if(F.id == id) - targets += F - - for(var/obj/structure/closet/secure_closet/brig/C in urange(20, src)) - if(C.id == id) - targets += C - - if(!targets.len) - obj_break() - update_icon() - - -//Main door timer loop, if it's timing and time is >0 reduce time by 1. -// if it's less than 0, open door, reset timer -// update the door_timer window and the icon -/obj/machinery/door_timer/process() - if(stat & (NOPOWER|BROKEN)) - return - - if(timing) - if(world.time - activation_time >= timer_duration) - timer_end() // open doors, reset timer, clear status screen - update_icon() - -// open/closedoor checks if door_timer has power, if so it checks if the -// linked door is open/closed (by density) then opens it/closes it. -/obj/machinery/door_timer/proc/timer_start() - if(stat & (NOPOWER|BROKEN)) - return 0 - - activation_time = world.time - timing = TRUE - - for(var/obj/machinery/door/window/brigdoor/door in targets) - if(door.density) - continue - INVOKE_ASYNC(door, TYPE_PROC_REF(/obj/machinery/door/window/brigdoor, close)) - - for(var/obj/structure/closet/secure_closet/brig/C in targets) - if(C.broken) - continue - if(C.opened && !C.close()) - continue - C.locked = TRUE - C.update_icon() - return 1 - - -/obj/machinery/door_timer/proc/timer_end(forced = FALSE) - - if(stat & (NOPOWER|BROKEN)) - return 0 - - if(!forced) - Radio.set_frequency(FREQ_SECURITY) - Radio.talk_into(src, "Timer has expired. Releasing prisoner.", FREQ_SECURITY) - - timing = FALSE - activation_time = null - set_timer(0) - update_icon() - - for(var/obj/machinery/door/window/brigdoor/door in targets) - if(!door.density) - continue - INVOKE_ASYNC(door, TYPE_PROC_REF(/obj/machinery/door/window/brigdoor, open)) - - for(var/obj/structure/closet/secure_closet/brig/C in targets) - if(C.broken) - continue - if(C.opened) - continue - C.locked = FALSE - C.update_icon() - - return 1 - - -/obj/machinery/door_timer/proc/time_left(seconds = FALSE) - . = max(0,timer_duration - (activation_time ? world.time - activation_time : 0)) - if(seconds) - . /= 10 - -/obj/machinery/door_timer/proc/set_timer(value) - var/new_time = CLAMP(value,0,MAX_TIMER) - . = new_time == timer_duration //return 1 on no change - timer_duration = new_time - -/obj/machinery/door_timer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "brig_timer", name, ui_x, ui_y, master_ui, state) - ui.open() - -//icon update function -// if NOPOWER, display blank -// if BROKEN, display blue screen of death icon AI uses -// if timing=true, run update display function -/obj/machinery/door_timer/update_icon() - if(stat & (NOPOWER)) - icon_state = "frame" - return - - if(stat & (BROKEN)) - set_picture("ai_bsod") - return - - if(timing) - var/disp1 = id - var/time_left = time_left(seconds = TRUE) - var/disp2 = "[add_zero(num2text((time_left / 60) % 60),2)]:[add_zero(num2text(time_left % 60), 2)]" - if(length(disp2) > CHARS_PER_LINE) - disp2 = "Error" - update_display(disp1, disp2) - else - if(maptext) - maptext = "" - return - - -// Adds an icon in case the screen is broken/off, stolen from status_display.dm -/obj/machinery/door_timer/proc/set_picture(state) - if(maptext) - maptext = "" - cut_overlays() - add_overlay(mutable_appearance('icons/obj/status_display.dmi', state)) - - -//Checks to see if there's 1 line or 2, adds text-icons-numbers/letters over display -// Stolen from status_display -/obj/machinery/door_timer/proc/update_display(line1, line2) - line1 = uppertext(line1) - line2 = uppertext(line2) - var/new_text = {"
[line1]
[line2]
"} - if(maptext != new_text) - maptext = new_text - -/obj/machinery/door_timer/ui_data() - var/list/data = list() - var/time_left = time_left(seconds = TRUE) - data["seconds"] = round(time_left % 60) - data["minutes"] = round((time_left - data["seconds"]) / 60) - data["timing"] = timing - data["flash_charging"] = FALSE - for(var/obj/machinery/flasher/F in targets) - if(F.last_flash && (F.last_flash + 150) > world.time) - data["flash_charging"] = TRUE - break - return data - - -/obj/machinery/door_timer/ui_act(action, params) - if(..()) - return - . = TRUE - - if(!allowed(usr)) - to_chat(usr, "Access denied.") - return FALSE - - switch(action) - if("time") - var/value = text2num(params["adjust"]) - if(value) - . = set_timer(time_left()+value) - if("start") - timer_start() - if("stop") - timer_end(forced = TRUE) - if("flash") - for(var/obj/machinery/flasher/F in targets) - F.flash() - if("preset") - var/preset = params["preset"] - var/preset_time = time_left() - switch(preset) - if("short") - preset_time = PRESET_SHORT - if("medium") - preset_time = PRESET_MEDIUM - if("long") - preset_time = PRESET_LONG - . = set_timer(preset_time) - if(timing) - activation_time = world.time - else - . = FALSE - - -#undef PRESET_SHORT -#undef PRESET_MEDIUM -#undef PRESET_LONG - -#undef MAX_TIMER -#undef FONT_SIZE -#undef FONT_COLOR -#undef FONT_STYLE -#undef CHARS_PER_LINE diff --git a/code/game/machinery/doors/checkForMultipleDoors.dm b/code/game/machinery/doors/checkForMultipleDoors.dm deleted file mode 100644 index c51cfee390..0000000000 --- a/code/game/machinery/doors/checkForMultipleDoors.dm +++ /dev/null @@ -1,16 +0,0 @@ -/obj/machinery/door/proc/checkForMultipleDoors() - if(!src.loc) - return 0 - for(var/obj/machinery/door/D in src.loc) - if(!istype(D, /obj/machinery/door/window) && D.density && D != src) - return 0 - return 1 - -/turf/closed/wall/proc/checkForMultipleDoors() - if(!src.loc) - return 0 - for(var/obj/machinery/door/D in locate(src.x,src.y,src.z)) - if(!istype(D, /obj/machinery/door/window) && D.density) - return 0 - //There are no false wall checks because that would be fucking retarded - return 1 diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm deleted file mode 100644 index 37353f6c97..0000000000 --- a/code/game/machinery/doors/door.dm +++ /dev/null @@ -1,409 +0,0 @@ -/obj/machinery/door - name = "door" - desc = "" - icon = 'icons/obj/doors/Doorint.dmi' - icon_state = "door1" - opacity = 1 - density = TRUE - move_resist = MOVE_FORCE_VERY_STRONG - layer = OPEN_DOOR_LAYER - power_channel = ENVIRON - max_integrity = 350 - armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 70) - CanAtmosPass = ATMOS_PASS_DENSITY - flags_1 = PREVENT_CLICK_UNDER_1 - damage_deflection = 10 - - interaction_flags_atom = INTERACT_ATOM_UI_INTERACT - - var/secondsElectrified = MACHINE_NOT_ELECTRIFIED - var/shockedby - var/visible = TRUE - var/operating = FALSE - var/glass = FALSE - var/welded = FALSE - var/normalspeed = 1 - var/heat_proof = FALSE // For rglass-windowed airlocks and firedoors - var/emergency = FALSE // Emergency access override - var/sub_door = FALSE // true if it's meant to go under another door. - var/closingLayer = CLOSED_DOOR_LAYER - var/autoclose = FALSE //does it automatically close after some time - var/safe = TRUE //whether the door detects things and mobs in its way and reopen or crushes them. - var/locked = FALSE //whether the door is bolted or not. - var/assemblytype //the type of door frame to drop during deconstruction - var/datum/effect_system/spark_spread/spark_system - var/real_explosion_block //ignore this, just use explosion_block - var/red_alert_access = FALSE //if TRUE, this door will always open on red alert - var/poddoor = FALSE - var/unres_sides = 0 //Unrestricted sides. A bitflag for which direction (if any) can open the door with no access - var/safety_mode = FALSE ///Whether or not the airlock can be opened with bare hands while unpowered - -/obj/machinery/door/examine(mob/user) - . = ..() - if(red_alert_access) - if(GLOB.security_level >= SEC_LEVEL_RED) - . += "Due to a security threat, its access requirements have been lifted!" - else - . += "In the event of a red alert, its access requirements will automatically lift." - if(!poddoor) - . += "Its maintenance panel is screwed in place." - if(safety_mode) - . += "It has labels indicating that it has an emergency mechanism to open it with just your hands if there's no power." - -/obj/machinery/door/check_access_list(list/access_list) - if(red_alert_access && GLOB.security_level >= SEC_LEVEL_RED) - return TRUE - return ..() - -/obj/machinery/door/Initialize() - . = ..() - set_init_door_layer() - update_freelook_sight() - air_update_turf(1) - GLOB.airlocks += src - spark_system = new /datum/effect_system/spark_spread - spark_system.set_up(2, 1, src) - if(density) - flags_1 |= PREVENT_CLICK_UNDER_1 - else - flags_1 &= ~PREVENT_CLICK_UNDER_1 - - //doors only block while dense though so we have to use the proc - real_explosion_block = explosion_block - explosion_block = EXPLOSION_BLOCK_PROC - -/obj/machinery/door/proc/set_init_door_layer() - if(density) - layer = closingLayer - else - layer = initial(layer) - -/obj/machinery/door/Destroy() - update_freelook_sight() - GLOB.airlocks -= src - if(spark_system) - qdel(spark_system) - spark_system = null - return ..() - -/obj/machinery/door/proc/try_safety_unlock(mob/user) - if(safety_mode && !hasPower() && density) - to_chat(user, "I begin unlocking the airlock safety mechanism...") - if(do_after(user, 15 SECONDS, target = src)) - try_to_crowbar(null, user) - return TRUE - return FALSE - -/obj/machinery/door/Bumped(atom/movable/AM) - . = ..() - if(operating || (obj_flags & EMAGGED)) - return - if(ismob(AM)) - var/mob/B = AM - if((isdrone(B) || iscyborg(B)) && B.stat) - return - if(isliving(AM)) - var/mob/living/M = AM - if(world.time - M.last_bumped <= 10) - return //Can bump-open one airlock per second. This is to prevent shock spam. - M.last_bumped = world.time - if(M.restrained() && !check_access(null)) - return - if(try_safety_unlock(M)) - return - bumpopen(M) - return - - if(ismecha(AM)) - var/obj/mecha/mecha = AM - if(density) - if(mecha.occupant) - if(world.time - mecha.occupant.last_bumped <= 10) - return - mecha.occupant.last_bumped = world.time - if(mecha.occupant && (src.allowed(mecha.occupant) || src.check_access_list(mecha.operation_req_access))) - open() - else - do_animate("deny") - return - - if(isitem(AM)) - var/obj/item/I = AM - if(!density || (I.w_class < WEIGHT_CLASS_NORMAL && !LAZYLEN(I.GetAccess()))) - return - if(check_access(I)) - open() - else - do_animate("deny") - return - -/obj/machinery/door/Move() - var/turf/T = loc - . = ..() - move_update_air(T) - -/obj/machinery/door/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && (mover.pass_flags & PASSGLASS)) - return !opacity - return !density - -/obj/machinery/door/proc/bumpopen(mob/user) - if(operating) - return - add_fingerprint(user) - if(!requiresID()) - user = null - - if(density && !(obj_flags & EMAGGED)) - if(allowed(user)) - open() - else - do_animate("deny") - return - -/obj/machinery/door/attack_hand(mob/user) - . = ..() - if(.) - return - if(try_safety_unlock(user)) - return - return try_to_activate_door(user) - -/obj/machinery/door/attack_tk(mob/user) - if(requiresID() && !allowed(null)) - return - ..() - -/obj/machinery/door/proc/try_to_activate_door(mob/user) - add_fingerprint(user) - if(operating || (obj_flags & EMAGGED)) - return - if(!requiresID()) - user = null //so allowed(user) always succeeds - if(allowed(user)) - if(density) - open() - else - close() - return TRUE - if(density) - do_animate("deny") - -/obj/machinery/door/allowed(mob/M) - if(emergency) - return TRUE - if(unrestricted_side(M)) - return TRUE - return ..() - -/obj/machinery/door/proc/unrestricted_side(mob/M) //Allows for specific side of airlocks to be unrestrected (IE, can exit maint freely, but need access to enter) - return get_dir(src, M) & unres_sides - -/obj/machinery/door/proc/try_to_weld(obj/item/weldingtool/W, mob/user) - return - -/obj/machinery/door/proc/try_to_crowbar(obj/item/I, mob/user) - return - -/obj/machinery/door/attackby(obj/item/I, mob/user, params) - if(user.used_intent.type != INTENT_HARM && (I.tool_behaviour == TOOL_CROWBAR || istype(I, /obj/item/twohanded/fireaxe))) - var/forced_open = FALSE - if(istype(I, /obj/item/crowbar)) - var/obj/item/crowbar/C = I - forced_open = C.force_opens - try_to_crowbar(I, user, forced_open) - return TRUE - else if(I.tool_behaviour == TOOL_WELDER) - try_to_weld(I, user) - return TRUE - else if(!(I.item_flags & NOBLUDGEON) && user.used_intent.type != INTENT_HARM) - try_to_activate_door(user) - return TRUE - return ..() - -/obj/machinery/door/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) - . = ..() - if(. && obj_integrity > 0) - if(damage_amount >= 10 && prob(30)) - spark_system.start() - -/obj/machinery/door/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - if(glass) - playsound(loc, 'sound/blank.ogg', 90, TRUE) - else if(damage_amount) - playsound(loc, 'sound/blank.ogg', 50, TRUE) - else - playsound(src, 'sound/blank.ogg', 50, TRUE) - if(BURN) - playsound(src.loc, 'sound/blank.ogg', 100, TRUE) - -/obj/machinery/door/emp_act(severity) - . = ..() - if (. & EMP_PROTECT_SELF) - return - if(prob(20/severity) && (istype(src, /obj/machinery/door/airlock) || istype(src, /obj/machinery/door/window)) ) - INVOKE_ASYNC(src, PROC_REF(open)) - if(prob(severity*10 - 20)) - if(secondsElectrified == MACHINE_NOT_ELECTRIFIED) - secondsElectrified = MACHINE_ELECTRIFIED_PERMANENT - LAZYADD(shockedby, "\[[time_stamp()]\]EM Pulse") - addtimer(CALLBACK(src, PROC_REF(unelectrify)), 300) - -/obj/machinery/door/proc/unelectrify() - secondsElectrified = MACHINE_NOT_ELECTRIFIED - -/obj/machinery/door/update_icon_state() - if(density) - icon_state = "door1" - else - icon_state = "door0" - -/obj/machinery/door/proc/do_animate(animation) - switch(animation) - if("opening") - if(panel_open) - flick("o_doorc0", src) - else - flick("doorc0", src) - if("closing") - if(panel_open) - flick("o_doorc1", src) - else - flick("doorc1", src) - if("deny") - if(!stat) - flick("door_deny", src) - - -/obj/machinery/door/proc/open() - if(!density) - return 1 - if(operating) - return - operating = TRUE - do_animate("opening") - set_opacity(0) - sleep(5) - density = FALSE - flags_1 &= ~PREVENT_CLICK_UNDER_1 - sleep(5) - layer = initial(layer) - update_icon() - set_opacity(0) - operating = FALSE - air_update_turf(1) - update_freelook_sight() - if(autoclose) - addtimer(CALLBACK(src, PROC_REF(close)), autoclose) - return 1 - -/obj/machinery/door/proc/close() - if(density) - return TRUE - if(operating || welded) - return - if(safe) - for(var/atom/movable/M in get_turf(src)) - if(M.density && M != src) //something is blocking the door - if(autoclose) - autoclose_in(60) - return - - operating = TRUE - - do_animate("closing") - layer = closingLayer - sleep(5) - density = TRUE - flags_1 |= PREVENT_CLICK_UNDER_1 - sleep(5) - update_icon() - if(visible && !glass) - set_opacity(1) - operating = FALSE - air_update_turf(1) - update_freelook_sight() - if(safe) - CheckForMobs() - else - crush() - return 1 - -/obj/machinery/door/proc/CheckForMobs() - if(locate(/mob/living) in get_turf(src)) - sleep(1) - open() - -/obj/machinery/door/proc/crush() - for(var/mob/living/L in get_turf(src)) - L.visible_message("[src] closes on [L], crushing [L.p_them()]!", "[src] closes on you and crushes you!") - if(isalien(L)) //For xenos - L.adjustBruteLoss(DOOR_CRUSH_DAMAGE * 1.5) //Xenos go into crit after aproximately the same amount of crushes as humans. - L.emote("roar") - else if(ishuman(L)) //For humans - L.adjustBruteLoss(DOOR_CRUSH_DAMAGE) - L.emote("scream") - L.Paralyze(100) - else if(ismonkey(L)) //For monkeys - L.adjustBruteLoss(DOOR_CRUSH_DAMAGE) - L.Paralyze(100) - else //for simple_animals & borgs - L.adjustBruteLoss(DOOR_CRUSH_DAMAGE) - var/turf/location = get_turf(src) - //add_blood doesn't work for borgs/xenos, but add_blood_floor does. - L.add_splatter_floor(location) - log_combat(src, L, "crushed") - for(var/obj/mecha/M in get_turf(src)) - M.take_damage(DOOR_CRUSH_DAMAGE) - log_combat(src, M, "crushed") - -/obj/machinery/door/proc/autoclose() - if(!QDELETED(src) && !density && !operating && !locked && !welded && autoclose) - close() - -/obj/machinery/door/proc/autoclose_in(wait) - addtimer(CALLBACK(src, PROC_REF(autoclose)), wait, TIMER_UNIQUE | TIMER_NO_HASH_WAIT | TIMER_OVERRIDE) - -/obj/machinery/door/proc/requiresID() - return 1 - -/obj/machinery/door/proc/hasPower() - return !(stat & NOPOWER) - -/obj/machinery/door/proc/update_freelook_sight() - if(!glass && GLOB.cameranet) - GLOB.cameranet.updateVisibility(src, 0) - -/obj/machinery/door/BlockSuperconductivity() // All non-glass airlocks block heat, this is intended. - if(opacity || heat_proof) - return 1 - return 0 - -/obj/machinery/door/morgue - icon = 'icons/obj/doors/doormorgue.dmi' - -/obj/machinery/door/get_dumping_location(obj/item/storage/source,mob/user) - return null - -/obj/machinery/door/proc/lock() - return - -/obj/machinery/door/proc/unlock() - return - -/obj/machinery/door/proc/hostile_lockdown(mob/origin) - if(!stat) //So that only powered doors are closed. - close() //Close ALL the doors! - -/obj/machinery/door/proc/disable_lockdown() - if(!stat) //Opens only powered doors. - open() //Open everything! - -/obj/machinery/door/ex_act(severity, target) - //if it blows up a wall it should blow up a door - ..(severity ? max(1, severity - 1) : 0, target) - -/obj/machinery/door/GetExplosionBlock() - return density ? real_explosion_block : 0 diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm deleted file mode 100644 index df2beab928..0000000000 --- a/code/game/machinery/doors/firedoor.dm +++ /dev/null @@ -1,477 +0,0 @@ -#define CONSTRUCTION_COMPLETE 0 //No construction done - functioning as normal -#define CONSTRUCTION_PANEL_OPEN 1 //Maintenance panel is open, still functioning -#define CONSTRUCTION_WIRES_EXPOSED 2 //Cover plate is removed, wires are available -#define CONSTRUCTION_GUTTED 3 //Wires are removed, circuit ready to remove -#define CONSTRUCTION_NOCIRCUIT 4 //Circuit board removed, can safely weld apart - -/obj/machinery/door/firedoor - name = "firelock" - desc = "" - icon = 'icons/obj/doors/Doorfireglass.dmi' - icon_state = "door_open" - opacity = FALSE - density = FALSE - max_integrity = 300 - resistance_flags = FIRE_PROOF - heat_proof = TRUE - glass = TRUE - sub_door = TRUE - explosion_block = 1 - safe = FALSE - layer = BELOW_OPEN_DOOR_LAYER - closingLayer = CLOSED_FIREDOOR_LAYER - assemblytype = /obj/structure/firelock_frame - armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 70) - interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN - var/nextstate = null - var/boltslocked = TRUE - var/list/affecting_areas - -/obj/machinery/door/firedoor/Initialize() - . = ..() - CalculateAffectingAreas() - -/obj/machinery/door/firedoor/examine(mob/user) - . = ..() - if(!density) - . += "It is open, but could be pried closed." - else if(!welded) - . += "It is closed, but could be pried open. Deconstruction would require it to be welded shut." - else if(boltslocked) - . += "It is welded shut. The floor bolts have been locked by screws." - else - . += "The bolt locks have been unscrewed, but the bolts themselves are still wrenched to the floor." - -/obj/machinery/door/firedoor/proc/CalculateAffectingAreas() - remove_from_areas() - affecting_areas = get_adjacent_open_areas(src) | get_area(src) - for(var/I in affecting_areas) - var/area/A = I - LAZYADD(A.firedoors, src) - -/obj/machinery/door/firedoor/closed - icon_state = "door_closed" - opacity = TRUE - density = TRUE - -//see also turf/AfterChange for adjacency shennanigans - -/obj/machinery/door/firedoor/proc/remove_from_areas() - if(affecting_areas) - for(var/I in affecting_areas) - var/area/A = I - LAZYREMOVE(A.firedoors, src) - -/obj/machinery/door/firedoor/Destroy() - remove_from_areas() - affecting_areas.Cut() - return ..() - -/obj/machinery/door/firedoor/Bumped(atom/movable/AM) - if(panel_open || operating) - return - if(!density) - return ..() - return FALSE - - -/obj/machinery/door/firedoor/power_change() - . = ..() - latetoggle() - -/obj/machinery/door/firedoor/attack_hand(mob/user) - . = ..() - if(.) - return - if(operating || !density) - return - user.changeNext_move(CLICK_CD_MELEE) - - user.visible_message("[user] bangs on \the [src].", \ - "I bang on \the [src].") - playsound(loc, 'sound/blank.ogg', 10, FALSE, frequency = 32000) - -/obj/machinery/door/firedoor/attackby(obj/item/C, mob/user, params) - add_fingerprint(user) - if(operating) - return - - if(welded) - if(C.tool_behaviour == TOOL_WRENCH) - if(boltslocked) - to_chat(user, "There are screws locking the bolts in place!") - return - C.play_tool_sound(src) - user.visible_message("[user] starts undoing [src]'s bolts...", \ - "I start unfastening [src]'s floor bolts...") - if(!C.use_tool(src, user, 50)) - return - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - user.visible_message("[user] unfastens [src]'s bolts.", \ - "I undo [src]'s floor bolts.") - deconstruct(TRUE) - return - if(C.tool_behaviour == TOOL_SCREWDRIVER) - user.visible_message("[user] [boltslocked ? "unlocks" : "locks"] [src]'s bolts.", \ - "I [boltslocked ? "unlock" : "lock"] [src]'s floor bolts.") - C.play_tool_sound(src) - boltslocked = !boltslocked - return - - return ..() - -/obj/machinery/door/firedoor/try_to_activate_door(mob/user) - return - -/obj/machinery/door/firedoor/try_to_weld(obj/item/weldingtool/W, mob/user) - if(!W.tool_start_check(user, amount=0)) - return - user.visible_message("[user] starts [welded ? "unwelding" : "welding"] [src].", "I start welding [src].") - if(W.use_tool(src, user, 40, volume=50)) - welded = !welded - to_chat(user, "[user] [welded?"welds":"unwelds"] [src].", "I [welded ? "weld" : "unweld"] [src].") - update_icon() - -/obj/machinery/door/firedoor/try_to_crowbar(obj/item/I, mob/user) - if(welded || operating) - return - - if(density) - open() - else - close() - -/obj/machinery/door/firedoor/attack_ai(mob/user) - add_fingerprint(user) - if(welded || operating || stat & NOPOWER) - return TRUE - if(density) - open() - else - close() - return TRUE - -/obj/machinery/door/firedoor/attack_robot(mob/user) - return attack_ai(user) - -/obj/machinery/door/firedoor/attack_alien(mob/user) - add_fingerprint(user) - if(welded) - to_chat(user, "[src] refuses to budge!") - return - open() - -/obj/machinery/door/firedoor/do_animate(animation) - switch(animation) - if("opening") - flick("door_opening", src) - if("closing") - flick("door_closing", src) - -/obj/machinery/door/firedoor/update_icon_state() - if(density) - icon_state = "door_closed" - else - icon_state = "door_open" - -/obj/machinery/door/firedoor/update_overlays() - . = ..() - if(!welded) - return - if(density) - . += "welded" - else - . += "welded_open" - -/obj/machinery/door/firedoor/open() - . = ..() - latetoggle() - -/obj/machinery/door/firedoor/close() - . = ..() - latetoggle() - -/obj/machinery/door/firedoor/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - var/obj/structure/firelock_frame/F = new assemblytype(get_turf(src)) - if(disassembled) - F.constructionStep = CONSTRUCTION_PANEL_OPEN - else - F.constructionStep = CONSTRUCTION_WIRES_EXPOSED - F.obj_integrity = F.max_integrity * 0.5 - F.update_icon() - qdel(src) - - -/obj/machinery/door/firedoor/proc/latetoggle() - if(operating || stat & NOPOWER || !nextstate) - return - switch(nextstate) - if(FIREDOOR_OPEN) - nextstate = null - open() - if(FIREDOOR_CLOSED) - nextstate = null - close() - -/obj/machinery/door/firedoor/border_only - icon = 'icons/obj/doors/edge_Doorfire.dmi' - flags_1 = ON_BORDER_1 - CanAtmosPass = ATMOS_PASS_PROC - -/obj/machinery/door/firedoor/border_only/closed - icon_state = "door_closed" - opacity = TRUE - density = TRUE - -/obj/machinery/door/firedoor/border_only/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && (mover.pass_flags & PASSGLASS)) - return TRUE - if(get_dir(loc, target) == dir) //Make sure looking at appropriate border - return !density - else - return TRUE - -/obj/machinery/door/firedoor/border_only/CheckExit(atom/movable/mover as mob|obj, turf/target) - if(istype(mover) && (mover.pass_flags & PASSGLASS)) - return TRUE - if(get_dir(loc, target) == dir) - return !density - else - return TRUE - -/obj/machinery/door/firedoor/border_only/CanAtmosPass(turf/T) - if(get_dir(loc, T) == dir) - return !density - else - return TRUE - -/obj/machinery/door/firedoor/heavy - name = "heavy firelock" - icon = 'icons/obj/doors/Doorfire.dmi' - glass = FALSE - explosion_block = 2 - assemblytype = /obj/structure/firelock_frame/heavy - max_integrity = 550 - - -/obj/item/electronics/firelock - name = "firelock circuitry" - custom_price = 5 - desc = "" - icon_state = "mainboard" - -/obj/structure/firelock_frame - name = "firelock frame" - desc = "" - icon = 'icons/obj/doors/Doorfire.dmi' - icon_state = "frame1" - anchored = FALSE - density = TRUE - var/constructionStep = CONSTRUCTION_NOCIRCUIT - var/reinforced = 0 - -/obj/structure/firelock_frame/examine(mob/user) - . = ..() - switch(constructionStep) - if(CONSTRUCTION_PANEL_OPEN) - . += "It is unbolted from the floor. A small loosely connected metal plate is covering the wires." - if(!reinforced) - . += "It could be reinforced with plasteel." - if(CONSTRUCTION_WIRES_EXPOSED) - . += "The maintenance plate has been pried away, and wires are trailing." - if(CONSTRUCTION_GUTTED) - . += "The maintenance panel is missing wires and the circuit board is loosely connected." - if(CONSTRUCTION_NOCIRCUIT) - . += "There are no firelock electronics in the frame. The frame could be cut apart." - -/obj/structure/firelock_frame/update_icon_state() - icon_state = "frame[constructionStep]" - -/obj/structure/firelock_frame/attackby(obj/item/C, mob/user) - switch(constructionStep) - if(CONSTRUCTION_PANEL_OPEN) - if(C.tool_behaviour == TOOL_CROWBAR) - C.play_tool_sound(src) - user.visible_message("[user] starts prying something out from [src]...", \ - "I begin prying out the wire cover...") - if(!C.use_tool(src, user, 50)) - return - if(constructionStep != CONSTRUCTION_PANEL_OPEN) - return - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - user.visible_message("[user] pries out a metal plate from [src], exposing the wires.", \ - "I remove the cover plate from [src], exposing the wires.") - constructionStep = CONSTRUCTION_WIRES_EXPOSED - update_icon() - return - if(C.tool_behaviour == TOOL_WRENCH) - if(locate(/obj/machinery/door/firedoor) in get_turf(src)) - to_chat(user, "There's already a firelock there.") - return - C.play_tool_sound(src) - user.visible_message("[user] starts bolting down [src]...", \ - "I begin bolting [src]...") - if(!C.use_tool(src, user, 30)) - return - if(locate(/obj/machinery/door/firedoor) in get_turf(src)) - return - user.visible_message("[user] finishes the firelock.", \ - "I finish the firelock.") - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - if(reinforced) - new /obj/machinery/door/firedoor/heavy(get_turf(src)) - else - new /obj/machinery/door/firedoor(get_turf(src)) - qdel(src) - return - if(istype(C, /obj/item/stack/sheet/plasteel)) - var/obj/item/stack/sheet/plasteel/P = C - if(reinforced) - to_chat(user, "[src] is already reinforced.") - return - if(P.get_amount() < 2) - to_chat(user, "I need more plasteel to reinforce [src].") - return - user.visible_message("[user] begins reinforcing [src]...", \ - "I begin reinforcing [src]...") - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - if(do_after(user, 60, target = src)) - if(constructionStep != CONSTRUCTION_PANEL_OPEN || reinforced || P.get_amount() < 2 || !P) - return - user.visible_message("[user] reinforces [src].", \ - "I reinforce [src].") - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - P.use(2) - reinforced = 1 - return - - if(CONSTRUCTION_WIRES_EXPOSED) - if(C.tool_behaviour == TOOL_WIRECUTTER) - C.play_tool_sound(src) - user.visible_message("[user] starts cutting the wires from [src]...", \ - "I begin removing [src]'s wires...") - if(!C.use_tool(src, user, 60)) - return - if(constructionStep != CONSTRUCTION_WIRES_EXPOSED) - return - user.visible_message("[user] removes the wires from [src].", \ - "I remove the wiring from [src], exposing the circuit board.") - new/obj/item/stack/cable_coil(get_turf(src), 5) - constructionStep = CONSTRUCTION_GUTTED - update_icon() - return - if(C.tool_behaviour == TOOL_CROWBAR) - C.play_tool_sound(src) - user.visible_message("[user] starts prying a metal plate into [src]...", \ - "I begin prying the cover plate back onto [src]...") - if(!C.use_tool(src, user, 80)) - return - if(constructionStep != CONSTRUCTION_WIRES_EXPOSED) - return - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - user.visible_message("[user] pries the metal plate into [src].", \ - "I pry [src]'s cover plate into place, hiding the wires.") - constructionStep = CONSTRUCTION_PANEL_OPEN - update_icon() - return - if(CONSTRUCTION_GUTTED) - if(C.tool_behaviour == TOOL_CROWBAR) - user.visible_message("[user] begins removing the circuit board from [src]...", \ - "I begin prying out the circuit board from [src]...") - if(!C.use_tool(src, user, 50, volume=50)) - return - if(constructionStep != CONSTRUCTION_GUTTED) - return - user.visible_message("[user] removes [src]'s circuit board.", \ - "I remove the circuit board from [src].") - new /obj/item/electronics/firelock(drop_location()) - constructionStep = CONSTRUCTION_NOCIRCUIT - update_icon() - return - if(istype(C, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/B = C - if(B.get_amount() < 5) - to_chat(user, "I need more wires to add wiring to [src].") - return - user.visible_message("[user] begins wiring [src]...", \ - "I begin adding wires to [src]...") - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - if(do_after(user, 60, target = src)) - if(constructionStep != CONSTRUCTION_GUTTED || B.get_amount() < 5 || !B) - return - user.visible_message("[user] adds wires to [src].", \ - "I wire [src].") - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - B.use(5) - constructionStep = CONSTRUCTION_WIRES_EXPOSED - update_icon() - return - if(CONSTRUCTION_NOCIRCUIT) - if(C.tool_behaviour == TOOL_WELDER) - if(!C.tool_start_check(user, amount=1)) - return - user.visible_message("[user] begins cutting apart [src]'s frame...", \ - "I begin slicing [src] apart...") - - if(C.use_tool(src, user, 40, volume=50, amount=1)) - if(constructionStep != CONSTRUCTION_NOCIRCUIT) - return - user.visible_message("[user] cuts apart [src]!", \ - "I cut [src] into metal.") - var/turf/T = get_turf(src) - new /obj/item/stack/sheet/metal(T, 3) - if(reinforced) - new /obj/item/stack/sheet/plasteel(T, 2) - qdel(src) - return - if(istype(C, /obj/item/electronics/firelock)) - user.visible_message("[user] starts adding [C] to [src]...", \ - "I begin adding a circuit board to [src]...") - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - if(!do_after(user, 40, target = src)) - return - if(constructionStep != CONSTRUCTION_NOCIRCUIT) - return - qdel(C) - user.visible_message("[user] adds a circuit to [src].", \ - "I insert and secure [C].") - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - constructionStep = CONSTRUCTION_GUTTED - update_icon() - return - if(istype(C, /obj/item/electroadaptive_pseudocircuit)) - var/obj/item/electroadaptive_pseudocircuit/P = C - if(!P.adapt_circuit(user, 30)) - return - user.visible_message("[user] fabricates a circuit and places it into [src].", \ - "I adapt a firelock circuit and slot it into the assembly.") - constructionStep = CONSTRUCTION_GUTTED - update_icon() - return - return ..() - -/obj/structure/firelock_frame/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - if((constructionStep == CONSTRUCTION_NOCIRCUIT) && (the_rcd.upgrade & RCD_UPGRADE_SIMPLE_CIRCUITS)) - return list("mode" = RCD_UPGRADE_SIMPLE_CIRCUITS, "delay" = 20, "cost" = 1) - return FALSE - -/obj/structure/firelock_frame/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) - switch(passed_mode) - if(RCD_UPGRADE_SIMPLE_CIRCUITS) - user.visible_message("[user] fabricates a circuit and places it into [src].", \ - "I adapt a firelock circuit and slot it into the assembly.") - constructionStep = CONSTRUCTION_GUTTED - update_icon() - return TRUE - return FALSE - -/obj/structure/firelock_frame/heavy - name = "heavy firelock frame" - reinforced = TRUE - -#undef CONSTRUCTION_COMPLETE -#undef CONSTRUCTION_PANEL_OPEN -#undef CONSTRUCTION_WIRES_EXPOSED -#undef CONSTRUCTION_GUTTED -#undef CONSTRUCTION_NOCIRCUIT diff --git a/code/game/machinery/doors/passworddoor.dm b/code/game/machinery/doors/passworddoor.dm deleted file mode 100644 index 9bf95d7367..0000000000 --- a/code/game/machinery/doors/passworddoor.dm +++ /dev/null @@ -1,73 +0,0 @@ -/obj/machinery/door/password - name = "door" - desc = "" - icon = 'icons/obj/doors/blastdoor.dmi' - icon_state = "closed" - explosion_block = 3 - heat_proof = TRUE - max_integrity = 600 - armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) - resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF - damage_deflection = 70 - var/password = "Swordfish" - var/interaction_activated = TRUE //use the door to enter the password - var/voice_activated = FALSE //Say the password nearby to open the door. - -/obj/machinery/door/password/voice - voice_activated = TRUE - - -/obj/machinery/door/password/Initialize(mapload) - . = ..() - if(voice_activated) - flags_1 |= HEAR_1 - -/obj/machinery/door/password/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) - . = ..() - if(!density || !voice_activated || radio_freq) - return - if(findtext(raw_message,password)) - open() - -/obj/machinery/door/password/Bumped(atom/movable/AM) - return !density && ..() - -/obj/machinery/door/password/try_to_activate_door(mob/user) - add_fingerprint(user) - if(operating) - return - if(density) - if(ask_for_pass(user)) - open() - else - do_animate("deny") - -/obj/machinery/door/password/update_icon_state() - if(density) - icon_state = "closed" - else - icon_state = "open" - -/obj/machinery/door/password/do_animate(animation) - switch(animation) - if("opening") - flick("opening", src) - playsound(src, 'sound/blank.ogg', 30, TRUE) - if("closing") - flick("closing", src) - playsound(src, 'sound/blank.ogg', 30, TRUE) - if("deny") - //Deny animation would be nice to have. - playsound(src, 'sound/blank.ogg', 30, TRUE) - -/obj/machinery/door/password/proc/ask_for_pass(mob/user) - var/guess = stripped_input(user,"Enter the password:", "Password", "") - if(guess == password) - return TRUE - return FALSE - -/obj/machinery/door/password/emp_act(severity) - return - -/obj/machinery/door/password/ex_act(severity, target) - return diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm deleted file mode 100644 index 70f194bd2f..0000000000 --- a/code/game/machinery/doors/poddoor.dm +++ /dev/null @@ -1,96 +0,0 @@ -/obj/machinery/door/poddoor - name = "blast door" - desc = "" - icon = 'icons/obj/doors/blastdoor.dmi' - icon_state = "closed" - var/id = 1 - layer = BLASTDOOR_LAYER - closingLayer = CLOSED_BLASTDOOR_LAYER - sub_door = TRUE - explosion_block = 3 - heat_proof = TRUE - safe = FALSE - max_integrity = 600 - armor = list("melee" = 50, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 70) - resistance_flags = FIRE_PROOF - damage_deflection = 70 - poddoor = TRUE - -/obj/machinery/door/poddoor/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE) - id = "[idnum][id]" - -/obj/machinery/door/poddoor/preopen - icon_state = "open" - density = FALSE - opacity = 0 - -/obj/machinery/door/poddoor/ert - name = "hardened blast door" - desc = "" - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - -//special poddoors that open when emergency shuttle docks at centcom -/obj/machinery/door/poddoor/shuttledock - var/checkdir = 4 //door won't open if turf in this dir is `turftype` - var/turftype = /turf/open/space - -/obj/machinery/door/poddoor/shuttledock/proc/check() - var/turf/T = get_step(src, checkdir) - if(!istype(T, turftype)) - INVOKE_ASYNC(src, PROC_REF(open)) - else - INVOKE_ASYNC(src, PROC_REF(close)) - -/obj/machinery/door/poddoor/incinerator_toxmix - name = "combustion chamber vent" - id = INCINERATOR_TOXMIX_VENT - -/obj/machinery/door/poddoor/incinerator_atmos_main - name = "turbine vent" - id = INCINERATOR_ATMOS_MAINVENT - -/obj/machinery/door/poddoor/incinerator_atmos_aux - name = "combustion chamber vent" - id = INCINERATOR_ATMOS_AUXVENT - -/obj/machinery/door/poddoor/incinerator_syndicatelava_main - name = "turbine vent" - id = INCINERATOR_SYNDICATELAVA_MAINVENT - -/obj/machinery/door/poddoor/incinerator_syndicatelava_aux - name = "combustion chamber vent" - id = INCINERATOR_SYNDICATELAVA_AUXVENT - -/obj/machinery/door/poddoor/Bumped(atom/movable/AM) - if(density) - return 0 - else - return ..() - -//"BLAST" doors are obviously stronger than regular doors when it comes to BLASTS. -/obj/machinery/door/poddoor/ex_act(severity, target) - if(severity == 3) - return - ..() - -/obj/machinery/door/poddoor/do_animate(animation) - switch(animation) - if("opening") - flick("opening", src) - playsound(src, 'sound/blank.ogg', 30, TRUE) - if("closing") - flick("closing", src) - playsound(src, 'sound/blank.ogg', 30, TRUE) - -/obj/machinery/door/poddoor/update_icon_state() - if(density) - icon_state = "closed" - else - icon_state = "open" - -/obj/machinery/door/poddoor/try_to_activate_door(mob/user) - return - -/obj/machinery/door/poddoor/try_to_crowbar(obj/item/I, mob/user) - if(stat & NOPOWER) - open(1) diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm deleted file mode 100644 index ee5d394ff3..0000000000 --- a/code/game/machinery/doors/shutters.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/machinery/door/poddoor/shutters - gender = PLURAL - name = "shutters" - desc = "" - icon = 'icons/obj/doors/shutters.dmi' - layer = SHUTTER_LAYER - closingLayer = SHUTTER_LAYER - damage_deflection = 20 - -/obj/machinery/door/poddoor/shutters/preopen - icon_state = "open" - density = FALSE - opacity = 0 - -/obj/machinery/door/poddoor/shutters/indestructible - name = "hardened shutters" - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF diff --git a/code/game/machinery/doors/unpowered.dm b/code/game/machinery/doors/unpowered.dm deleted file mode 100644 index 5ced36c775..0000000000 --- a/code/game/machinery/doors/unpowered.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/machinery/door/unpowered - -/obj/machinery/door/unpowered/Bumped(atom/movable/AM) - if(src.locked) - return - ..() - return - - -/obj/machinery/door/unpowered/attackby(obj/item/I, mob/user, params) - if(locked) - return - else - return ..() - -/obj/machinery/door/unpowered/emag_act() - return - -/obj/machinery/door/unpowered/shuttle - icon = 'icons/turf/shuttle.dmi' - name = "door" - icon_state = "door1" - opacity = 1 - density = TRUE - explosion_block = 1 diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm deleted file mode 100644 index 4ecf1af43e..0000000000 --- a/code/game/machinery/doors/windowdoor.dm +++ /dev/null @@ -1,472 +0,0 @@ -/obj/machinery/door/window - name = "interior door" - desc = "" - icon = 'icons/obj/doors/windoor.dmi' - icon_state = "left" - layer = ABOVE_WINDOW_LAYER - closingLayer = ABOVE_WINDOW_LAYER - resistance_flags = ACID_PROOF - var/base_state = "left" - max_integrity = 150 //If you change this, consider changing ../door/window/brigdoor/ max_integrity at the bottom of this .dm file - integrity_failure = 0 - armor = list("melee" = 20, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 70, "acid" = 100) - visible = FALSE - flags_1 = ON_BORDER_1 - opacity = 0 - CanAtmosPass = ATMOS_PASS_PROC - interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN - var/obj/item/electronics/airlock/electronics = null - var/reinf = 0 - var/shards = 2 - var/rods = 2 - var/cable = 1 - -/obj/machinery/door/window/Initialize(mapload, set_dir) - . = ..() - flags_1 &= ~PREVENT_CLICK_UNDER_1 - if(set_dir) - setDir(set_dir) - if(req_access && req_access.len) - icon_state = "[icon_state]" - base_state = icon_state - -/obj/machinery/door/window/ComponentInitialize() - . = ..() - AddComponent(/datum/component/ntnet_interface) - -/obj/machinery/door/window/Destroy() - density = FALSE - if(obj_integrity == 0) - playsound(src, "shatter", 70, TRUE) - electronics = null - return ..() - -/obj/machinery/door/window/update_icon_state() - if(density) - icon_state = base_state - else - icon_state = "[base_state]open" - -/obj/machinery/door/window/proc/open_and_close() - if(!open()) - return - autoclose = TRUE - if(check_access(null)) - sleep(50) - else //secure doors close faster - sleep(20) - if(!density && autoclose) //did someone change state while we slept? - close() - -/obj/machinery/door/window/Bumped(atom/movable/AM) - if( operating || !density ) - return - if (!( ismob(AM) )) - if(ismecha(AM)) - var/obj/mecha/mecha = AM - if(mecha.occupant && allowed(mecha.occupant)) - open_and_close() - else - do_animate("deny") - return - if (!( SSticker )) - return - var/mob/M = AM - if(M.restrained() || ((isdrone(M) || iscyborg(M)) && M.stat)) - return - bumpopen(M) - -/obj/machinery/door/window/bumpopen(mob/user) - if( operating || !density ) - return - add_fingerprint(user) - if(!requiresID()) - user = null - - if(allowed(user)) - open_and_close() - else - do_animate("deny") - return - -/obj/machinery/door/window/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && (mover.pass_flags & PASSGLASS)) - return 1 - if(get_dir(loc, target) == dir) //Make sure looking at appropriate border - return !density - if(istype(mover, /obj/structure/window)) - var/obj/structure/window/W = mover - if(!valid_window_location(loc, W.ini_dir)) - return FALSE - else if(istype(mover, /obj/structure/windoor_assembly)) - var/obj/structure/windoor_assembly/W = mover - if(!valid_window_location(loc, W.ini_dir)) - return FALSE - else if(istype(mover, /obj/machinery/door/window) && !valid_window_location(loc, mover.dir)) - return FALSE - else - return 1 - -/obj/machinery/door/window/CanAtmosPass(turf/T) - if(get_dir(loc, T) == dir) - return !density - else - return 1 - -//used in the AStar algorithm to determinate if the turf the door is on is passable -/obj/machinery/door/window/CanAStarPass(obj/item/card/id/ID, to_dir) - return !density || (dir != to_dir) || (check_access(ID) && hasPower()) - -/obj/machinery/door/window/CheckExit(atom/movable/mover as mob|obj, turf/target) - if(istype(mover) && (mover.pass_flags & PASSGLASS)) - return 1 - if(get_dir(loc, target) == dir) - return !density - else - return 1 - -/obj/machinery/door/window/open(forced=FALSE) - if (operating) //doors can still open when emag-disabled - return 0 - if(!forced) - if(!hasPower()) - return 0 - if(forced < 2) - if(obj_flags & EMAGGED) - return 0 - if(!operating) //in case of emag - operating = TRUE - do_animate("opening") - playsound(src, 'sound/blank.ogg', 100, TRUE) - icon_state ="[base_state]open" - sleep(10) - density = FALSE - air_update_turf(1) - update_freelook_sight() - - if(operating == 1) //emag again - operating = FALSE - return 1 - -/obj/machinery/door/window/close(forced=FALSE) - if (operating) - return 0 - if(!forced) - if(!hasPower()) - return 0 - if(forced < 2) - if(obj_flags & EMAGGED) - return 0 - operating = TRUE - do_animate("closing") - playsound(src, 'sound/blank.ogg', 100, TRUE) - icon_state = base_state - - density = TRUE - air_update_turf(1) - update_freelook_sight() - sleep(10) - - operating = FALSE - return 1 - -/obj/machinery/door/window/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - playsound(src, 'sound/blank.ogg', 90, TRUE) - if(BURN) - playsound(src, 'sound/blank.ogg', 100, TRUE) - - -/obj/machinery/door/window/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1) && !disassembled) - for(var/obj/fragment in debris) - fragment.forceMove(get_turf(src)) - transfer_fingerprints_to(fragment) - debris -= fragment - qdel(src) - -/obj/machinery/door/window/narsie_act() - add_atom_colour("#7D1919", FIXED_COLOUR_PRIORITY) - -/obj/machinery/door/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > T0C + (reinf ? 1600 : 800)) - take_damage(round(exposed_volume / 200), BURN, 0, 0) - ..() - -/obj/machinery/door/window/emag_act(mob/user) - if(!operating && density && !(obj_flags & EMAGGED)) - obj_flags |= EMAGGED - operating = TRUE - flick("[base_state]spark", src) - playsound(src, "sparks", 75, TRUE) - sleep(6) - operating = FALSE - desc += "
Its access panel is smoking slightly." - open(2) - -/obj/machinery/door/window/attackby(obj/item/I, mob/living/user, params) - - if(operating) - return - - add_fingerprint(user) - if(!(flags_1&NODECONSTRUCT_1)) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - if(density || operating) - to_chat(user, "I need to open the door to access the maintenance panel!") - return - I.play_tool_sound(src) - panel_open = !panel_open - to_chat(user, "I [panel_open ? "open":"close"] the maintenance panel of the [name].") - return - - if(I.tool_behaviour == TOOL_CROWBAR) - if(panel_open && !density && !operating) - user.visible_message("[user] removes the electronics from the [name].", \ - "I start to remove electronics from the [name]...") - if(I.use_tool(src, user, 40, volume=50)) - if(panel_open && !density && !operating && loc) - var/obj/structure/windoor_assembly/WA = new /obj/structure/windoor_assembly(loc) - switch(base_state) - if("left") - WA.facing = "l" - if("right") - WA.facing = "r" - if("leftsecure") - WA.facing = "l" - WA.secure = TRUE - if("rightsecure") - WA.facing = "r" - WA.secure = TRUE - WA.setAnchored(TRUE) - WA.state= "02" - WA.setDir(dir) - WA.ini_dir = dir - WA.update_icon() - WA.created_name = name - - if(obj_flags & EMAGGED) - to_chat(user, "I discard the damaged electronics.") - qdel(src) - return - - to_chat(user, "I remove the airlock electronics.") - - var/obj/item/electronics/airlock/ae - if(!electronics) - ae = new/obj/item/electronics/airlock(drop_location()) - if(req_one_access) - ae.one_access = 1 - ae.accesses = req_one_access - else - ae.accesses = req_access - else - ae = electronics - electronics = null - ae.forceMove(drop_location()) - - qdel(src) - return - return ..() - -/obj/machinery/door/window/interact(mob/user) //for sillycones - try_to_activate_door(user) - -/obj/machinery/door/window/try_to_activate_door(mob/user) - if (..()) - autoclose = FALSE - -/obj/machinery/door/window/try_to_crowbar(obj/item/I, mob/user) - if(!hasPower()) - if(density) - open(2) - else - close(2) - else - to_chat(user, "The door's motors resist your efforts to force it!") - -/obj/machinery/door/window/do_animate(animation) - switch(animation) - if("opening") - flick("[base_state]opening", src) - if("closing") - flick("[base_state]closing", src) - if("deny") - flick("[base_state]deny", src) - -/obj/machinery/door/window/check_access_ntnet(datum/netdata/data) - return !requiresID() || ..() - -/obj/machinery/door/window/ntnet_receive(datum/netdata/data) - // Check if the airlock is powered. - if(!hasPower()) - return - - // Check packet access level. - if(!check_access_ntnet(data)) - return - - // Handle received packet. - var/command = lowertext(data.data["data"]) - var/command_value = lowertext(data.data["data_secondary"]) - switch(command) - if("open") - if(command_value == "on" && !density) - return - - if(command_value == "off" && density) - return - - if(density) - INVOKE_ASYNC(src, PROC_REF(open)) - else - INVOKE_ASYNC(src, PROC_REF(close)) - if("touch") - INVOKE_ASYNC(src, PROC_REF(open_and_close)) - -/obj/machinery/door/window/brigdoor - name = "secure door" - icon_state = "leftsecure" - base_state = "leftsecure" - var/id = null - max_integrity = 300 //Stronger doors for prison (regular window door health is 200) - reinf = 1 - explosion_block = 1 - -/obj/machinery/door/window/brigdoor/security/cell - name = "cell door" - desc = "" - req_access = list(ACCESS_BRIG) - -/obj/machinery/door/window/brigdoor/security/holding - name = "holding cell door" - req_one_access = list(ACCESS_SEC_DOORS, ACCESS_LAWYER) //love for the lawyer - -/obj/machinery/door/window/northleft - dir = NORTH - -/obj/machinery/door/window/eastleft - dir = EAST - -/obj/machinery/door/window/westleft - dir = WEST - -/obj/machinery/door/window/southleft - dir = SOUTH - -/obj/machinery/door/window/northright - dir = NORTH - icon_state = "right" - base_state = "right" - -/obj/machinery/door/window/eastright - dir = EAST - icon_state = "right" - base_state = "right" - -/obj/machinery/door/window/westright - dir = WEST - icon_state = "right" - base_state = "right" - -/obj/machinery/door/window/southright - dir = SOUTH - icon_state = "right" - base_state = "right" - -/obj/machinery/door/window/brigdoor/northleft - dir = NORTH - -/obj/machinery/door/window/brigdoor/eastleft - dir = EAST - -/obj/machinery/door/window/brigdoor/westleft - dir = WEST - -/obj/machinery/door/window/brigdoor/southleft - dir = SOUTH - -/obj/machinery/door/window/brigdoor/northright - dir = NORTH - icon_state = "rightsecure" - base_state = "rightsecure" - -/obj/machinery/door/window/brigdoor/eastright - dir = EAST - icon_state = "rightsecure" - base_state = "rightsecure" - -/obj/machinery/door/window/brigdoor/westright - dir = WEST - icon_state = "rightsecure" - base_state = "rightsecure" - -/obj/machinery/door/window/brigdoor/southright - dir = SOUTH - icon_state = "rightsecure" - base_state = "rightsecure" - -/obj/machinery/door/window/brigdoor/security/cell/northleft - dir = NORTH - -/obj/machinery/door/window/brigdoor/security/cell/eastleft - dir = EAST - -/obj/machinery/door/window/brigdoor/security/cell/westleft - dir = WEST - -/obj/machinery/door/window/brigdoor/security/cell/southleft - dir = SOUTH - -/obj/machinery/door/window/brigdoor/security/cell/northright - dir = NORTH - icon_state = "rightsecure" - base_state = "rightsecure" - -/obj/machinery/door/window/brigdoor/security/cell/eastright - dir = EAST - icon_state = "rightsecure" - base_state = "rightsecure" - -/obj/machinery/door/window/brigdoor/security/cell/westright - dir = WEST - icon_state = "rightsecure" - base_state = "rightsecure" - -/obj/machinery/door/window/brigdoor/security/cell/southright - dir = SOUTH - icon_state = "rightsecure" - base_state = "rightsecure" - -/obj/machinery/door/window/brigdoor/security/holding/northleft - dir = NORTH - -/obj/machinery/door/window/brigdoor/security/holding/eastleft - dir = EAST - -/obj/machinery/door/window/brigdoor/security/holding/westleft - dir = WEST - -/obj/machinery/door/window/brigdoor/security/holding/southleft - dir = SOUTH - -/obj/machinery/door/window/brigdoor/security/holding/northright - dir = NORTH - icon_state = "rightsecure" - base_state = "rightsecure" - -/obj/machinery/door/window/brigdoor/security/holding/eastright - dir = EAST - icon_state = "rightsecure" - base_state = "rightsecure" - -/obj/machinery/door/window/brigdoor/security/holding/westright - dir = WEST - icon_state = "rightsecure" - base_state = "rightsecure" - -/obj/machinery/door/window/brigdoor/security/holding/southright - dir = SOUTH - icon_state = "rightsecure" - base_state = "rightsecure" diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm deleted file mode 100644 index 8efd97aee4..0000000000 --- a/code/game/machinery/doppler_array.dm +++ /dev/null @@ -1,183 +0,0 @@ -GLOBAL_LIST_EMPTY(doppler_arrays) - -/obj/machinery/doppler_array - name = "tachyon-doppler array" - desc = "" - icon = 'icons/obj/machines/research.dmi' - icon_state = "tdoppler" - density = TRUE - var/cooldown = 10 - var/next_announce = 0 - var/integrated = FALSE - var/max_dist = 150 - verb_say = "states coldly" - var/list/message_log = list() - -/obj/machinery/doppler_array/Initialize() - . = ..() - GLOB.doppler_arrays += src - -/obj/machinery/doppler_array/ComponentInitialize() - . = ..() - AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE,null,null,CALLBACK(src,PROC_REF(rot_message))) - -/obj/machinery/doppler_array/Destroy() - GLOB.doppler_arrays -= src - return ..() - - -/obj/machinery/doppler_array/ui_interact(mob/user) - . = ..() - if(stat) - return FALSE - - var/list/dat = list() - for(var/i in 1 to message_log.len) - dat += "Log recording #[i]: [message_log[i]]

" - dat += "Delete logs
" - dat += "
" - dat += "(Refresh)
" - dat += "" - var/datum/browser/popup = new(user, "computer", name, 400, 500) - popup.set_content(dat.Join(" ")) - popup.open() - return - -/obj/machinery/doppler_array/Topic(href, href_list) - if(..()) - return - if(href_list["delete_log"]) - message_log.Cut() - if(href_list["refresh"]) - updateUsrDialog() - - updateUsrDialog() - return - -/obj/machinery/doppler_array/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_WRENCH) - if(!anchored && !isinspace()) - anchored = TRUE - power_change() - to_chat(user, "I fasten [src].") - else if(anchored) - anchored = FALSE - power_change() - to_chat(user, "I unfasten [src].") - I.play_tool_sound(src) - return - return ..() - -/obj/machinery/doppler_array/proc/rot_message(mob/user) - to_chat(user, "I adjust [src]'s dish to face to the [dir2text(dir)].") - playsound(src, 'sound/blank.ogg', 50, TRUE) - -/obj/machinery/doppler_array/proc/sense_explosion(turf/epicenter,devastation_range,heavy_impact_range,light_impact_range, - took,orig_dev_range,orig_heavy_range,orig_light_range) - if(stat & NOPOWER) - return FALSE - var/turf/zone = get_turf(src) - if(zone.z != epicenter.z) - return FALSE - - if(next_announce > world.time) - return - next_announce = world.time + cooldown - - var/distance = get_dist(epicenter, zone) - var/direct = get_dir(zone, epicenter) - - if(distance > max_dist) - return FALSE - if(!(direct & dir) && !integrated) - return FALSE - - - var/list/messages = list("Explosive disturbance detected.", \ - "Epicenter at: grid ([epicenter.x],[epicenter.y]). Temporal displacement of tachyons: [took] seconds.", \ - "Factual: Epicenter radius: [devastation_range]. Outer radius: [heavy_impact_range]. Shockwave radius: [light_impact_range].") - - // If the bomb was capped, say its theoretical size. - if(devastation_range < orig_dev_range || heavy_impact_range < orig_heavy_range || light_impact_range < orig_light_range) - messages += "Theoretical: Epicenter radius: [orig_dev_range]. Outer radius: [orig_heavy_range]. Shockwave radius: [orig_light_range]." - - if(integrated) - var/obj/item/clothing/head/helmet/space/hardsuit/helm = loc - if(!helm || !istype(helm, /obj/item/clothing/head/helmet/space/hardsuit)) - return FALSE - helm.display_visor_message("Explosion detected! Epicenter: [devastation_range], Outer: [heavy_impact_range], Shock: [light_impact_range]") - else - for(var/message in messages) - say(message) - LAZYADD(message_log, messages.Join(" ")) - return TRUE - -/obj/machinery/doppler_array/powered() - if(!anchored) - return FALSE - return ..() - -/obj/machinery/doppler_array/update_icon_state() - if(stat & BROKEN) - icon_state = "[initial(icon_state)]-broken" - else if(powered()) - icon_state = initial(icon_state) - else - icon_state = "[initial(icon_state)]-off" - -//Portable version, built into EOD equipment. It simply provides an explosion's three damage levels. -/obj/machinery/doppler_array/integrated - name = "integrated tachyon-doppler module" - integrated = TRUE - max_dist = 21 //Should detect most explosions in hearing range. - use_power = NO_POWER_USE - -/obj/machinery/doppler_array/research - name = "tachyon-doppler research array" - desc = "" - var/datum/techweb/linked_techweb - -/obj/machinery/doppler_array/research/sense_explosion(turf/epicenter, dev, heavy, light, time, orig_dev, orig_heavy, orig_light) //probably needs a way to ignore admin explosives later on - . = ..() - if(!.) - return FALSE - if(!istype(linked_techweb)) - say("Warning: No linked research system!") - return - - var/point_gain = 0 - - /*****The Point Calculator*****/ - - if(orig_light < 10) - say("Explosion not large enough for research calculations.") - return - else if(orig_light < 4500) - point_gain = (83300 * orig_light) / (orig_light + 3000) - else - point_gain = TECHWEB_BOMB_POINTCAP - - /*****The Point Capper*****/ - if(point_gain > linked_techweb.largest_bomb_value) - if(point_gain <= TECHWEB_BOMB_POINTCAP || linked_techweb.largest_bomb_value < TECHWEB_BOMB_POINTCAP) - var/old_tech_largest_bomb_value = linked_techweb.largest_bomb_value //held so we can pull old before we do math - linked_techweb.largest_bomb_value = point_gain - point_gain -= old_tech_largest_bomb_value - point_gain = min(point_gain,TECHWEB_BOMB_POINTCAP) - else - linked_techweb.largest_bomb_value = TECHWEB_BOMB_POINTCAP - point_gain = 1000 - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_SCI) - if(D) - D.adjust_money(point_gain) - linked_techweb.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, point_gain) - say("Explosion details and mixture analyzed and sold to the highest bidder for $[point_gain], with a reward of [point_gain] points.") - - else //you've made smaller bombs - say("Data already captured. Aborting.") - return - - -/obj/machinery/doppler_array/research/science/Initialize() - . = ..() - linked_techweb = SSresearch.science_tech diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm deleted file mode 100644 index aed1eb3539..0000000000 --- a/code/game/machinery/droneDispenser.dm +++ /dev/null @@ -1,260 +0,0 @@ -#define DRONE_PRODUCTION "production" -#define DRONE_RECHARGING "recharging" -#define DRONE_READY "ready" - -/obj/machinery/droneDispenser //Most customizable machine 2015 - name = "drone shell dispenser" - desc = "" - - icon = 'icons/obj/machines/droneDispenser.dmi' - icon_state = "on" - density = TRUE - - max_integrity = 250 - integrity_failure = 0.33 - - // These allow for different icons when creating custom dispensers - var/icon_off = "off" - var/icon_on = "on" - var/icon_recharging = "recharge" - var/icon_creating = "make" - - var/list/using_materials - var/starting_amount = 0 - var/metal_cost = 1000 - var/glass_cost = 1000 - var/power_used = 1000 - - var/mode = DRONE_READY - var/timer - var/cooldownTime = 1800 //3 minutes - var/production_time = 30 - //The item the dispenser will create - var/dispense_type = /obj/effect/mob_spawn/drone - - // The maximum number of "idle" drone shells it will make before - // ceasing production. Set to 0 for infinite. - var/maximum_idle = 3 - - var/work_sound = 'sound/blank.ogg' - var/create_sound = 'sound/blank.ogg' - var/recharge_sound = 'sound/blank.ogg' - - var/begin_create_message = "whirs to life!" - var/end_create_message = "dispenses a drone shell." - var/recharge_message = "pings." - var/recharging_text = "It is whirring and clicking. It seems to be recharging." - -/obj/machinery/droneDispenser/Initialize() - . = ..() - var/datum/component/material_container/materials = AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass), MINERAL_MATERIAL_AMOUNT * MAX_STACK_SIZE * 2, TRUE, /obj/item/stack) - materials.insert_amount_mat(starting_amount) - materials.precise_insertion = TRUE - using_materials = list(/datum/material/iron = metal_cost, /datum/material/glass = glass_cost) - -/obj/machinery/droneDispenser/preloaded - starting_amount = 5000 - -/obj/machinery/droneDispenser/syndrone //Please forgive me - name = "syndrone shell dispenser" - desc = "" - dispense_type = /obj/effect/mob_spawn/drone/syndrone - //If we're gonna be a jackass, go the full mile - 10 second recharge timer - cooldownTime = 100 - end_create_message = "dispenses a suspicious drone shell." - starting_amount = 25000 - -/obj/machinery/droneDispenser/syndrone/badass //Please forgive me - name = "badass syndrone shell dispenser" - desc = "" - dispense_type = /obj/effect/mob_spawn/drone/syndrone/badass - end_create_message = "dispenses an ominous suspicious drone shell." - -// I don't need your forgiveness, this is awesome. -/obj/machinery/droneDispenser/snowflake - name = "snowflake drone shell dispenser" - desc = "" - dispense_type = /obj/effect/mob_spawn/drone/snowflake - end_create_message = "dispenses a snowflake drone shell." - // Those holoprojectors aren't cheap - metal_cost = 2000 - glass_cost = 2000 - power_used = 2000 - starting_amount = 10000 - -// If the derelict gets lonely, make more friends. -/obj/machinery/droneDispenser/derelict - name = "derelict drone shell dispenser" - desc = "" - dispense_type = /obj/effect/mob_spawn/drone/derelict - end_create_message = "dispenses a derelict drone shell." - metal_cost = 10000 - glass_cost = 5000 - starting_amount = 0 - cooldownTime = 600 - -// An example of a custom drone dispenser. -// This one requires no materials and creates basic hivebots -/obj/machinery/droneDispenser/hivebot - name = "hivebot fabricator" - desc = "" - icon = 'icons/obj/objects.dmi' - icon_state = "hivebot_fab" - icon_off = "hivebot_fab" - icon_on = "hivebot_fab" - icon_recharging = "hivebot_fab" - icon_creating = "hivebot_fab_on" - metal_cost = 0 - glass_cost = 0 - power_used = 0 - cooldownTime = 10 //Only 1 second - hivebots are extremely weak - dispense_type = /mob/living/simple_animal/hostile/hivebot - begin_create_message = "closes and begins fabricating something within." - end_create_message = "slams open, revealing a hivebot!" - recharge_sound = null - recharge_message = null - -/obj/machinery/droneDispenser/swarmer - name = "swarmer fabricator" - desc = "" - icon = 'icons/obj/machines/gateway.dmi' - icon_state = "toffcenter" - icon_off = "toffcenter" - icon_on = "toffcenter" - icon_recharging = "toffcenter" - icon_creating = "offcenter" - metal_cost = 0 - glass_cost = 0 - cooldownTime = 300 //30 seconds - maximum_idle = 0 // Swarmers have no restraint - dispense_type = /obj/effect/mob_spawn/swarmer - begin_create_message = "hums softly as an interface appears above it, scrolling by at unreadable speed." - end_create_message = "materializes a strange shell, which drops to the ground." - recharging_text = "Its lights are slowly increasing in brightness." - work_sound = 'sound/blank.ogg' - create_sound = 'sound/blank.ogg' - break_sound = 'sound/blank.ogg' - break_message = "slowly falls dark, lights stuttering." - -/obj/machinery/droneDispenser/examine(mob/user) - . = ..() - if((mode == DRONE_RECHARGING) && !stat && recharging_text) - . += "[recharging_text]" - -/obj/machinery/droneDispenser/process() - ..() - if((stat & (NOPOWER|BROKEN)) || !anchored) - return - - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - if(!materials.has_materials(using_materials)) - return // We require more minerals - - // We are currently in the middle of something - if(timer > world.time) - return - - switch(mode) - if(DRONE_READY) - // If we have X drone shells already on our turf - if(maximum_idle && (count_shells() >= maximum_idle)) - return // then do nothing; check again next tick - if(begin_create_message) - visible_message("[src] [begin_create_message]") - if(work_sound) - playsound(src, work_sound, 50, TRUE) - mode = DRONE_PRODUCTION - timer = world.time + production_time - update_icon() - - if(DRONE_PRODUCTION) - materials.use_materials(using_materials) - if(power_used) - use_power(power_used) - - var/atom/A = new dispense_type(loc) - A.flags_1 |= (flags_1 & ADMIN_SPAWNED_1) - - if(create_sound) - playsound(src, create_sound, 50, TRUE) - if(end_create_message) - visible_message("[src] [end_create_message]") - - mode = DRONE_RECHARGING - timer = world.time + cooldownTime - update_icon() - - if(DRONE_RECHARGING) - if(recharge_sound) - playsound(src, recharge_sound, 50, TRUE) - if(recharge_message) - visible_message("[src] [recharge_message]") - - mode = DRONE_READY - update_icon() - -/obj/machinery/droneDispenser/proc/count_shells() - . = 0 - for(var/a in loc) - if(istype(a, dispense_type)) - .++ - -/obj/machinery/droneDispenser/update_icon_state() - if(stat & (BROKEN|NOPOWER)) - icon_state = icon_off - else if(mode == DRONE_RECHARGING) - icon_state = icon_recharging - else if(mode == DRONE_PRODUCTION) - icon_state = icon_creating - else - icon_state = icon_on - -/obj/machinery/droneDispenser/attackby(obj/item/I, mob/living/user) - if(I.tool_behaviour == TOOL_CROWBAR) - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - materials.retrieve_all() - I.play_tool_sound(src) - to_chat(user, "I retrieve the materials from [src].") - - else if(I.tool_behaviour == TOOL_WELDER) - if(!(stat & BROKEN)) - to_chat(user, "[src] doesn't need repairs.") - return - - if(!I.tool_start_check(user, amount=1)) - return - - user.visible_message( - "[user] begins patching up [src] with [I].", - "I begin restoring the damage to [src]...") - - if(!I.use_tool(src, user, 40, volume=50, amount=1)) - return - - user.visible_message( - "[user] fixes [src]!", - "I restore [src] to operation.") - - stat &= ~BROKEN - obj_integrity = max_integrity - update_icon() - else - return ..() - -/obj/machinery/droneDispenser/obj_break(damage_flag) - . = ..() - if(!.) - return - if(break_message) - audible_message("[src] [break_message]") - if(break_sound) - playsound(src, break_sound, 50, TRUE) - -/obj/machinery/droneDispenser/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/sheet/metal(loc, 5) - qdel(src) - -#undef DRONE_PRODUCTION -#undef DRONE_RECHARGING -#undef DRONE_READY diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm deleted file mode 100644 index 63c879ef0e..0000000000 --- a/code/game/machinery/embedded_controller/access_controller.dm +++ /dev/null @@ -1,309 +0,0 @@ -#define CLOSING 1 -#define OPENING 2 -#define CYCLE 3 -#define CYCLE_EXTERIOR 4 -#define CYCLE_INTERIOR 5 - -/obj/machinery/doorButtons - power_channel = ENVIRON - use_power = IDLE_POWER_USE - idle_power_usage = 2 - active_power_usage = 4 - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - var/idSelf - -/obj/machinery/doorButtons/attackby(obj/O, mob/user) - return attack_hand(user) - -/obj/machinery/doorButtons/proc/findObjsByTag() - return - -/obj/machinery/doorButtons/Initialize() - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/doorButtons/LateInitialize() - findObjsByTag() - -/obj/machinery/doorButtons/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - obj_flags |= EMAGGED - req_access = list() - req_one_access = list() - playsound(src, "sparks", 100, TRUE) - to_chat(user, "I short out the access controller.") - -/obj/machinery/doorButtons/proc/removeMe() - - -/obj/machinery/doorButtons/access_button - icon = 'icons/obj/airlock_machines.dmi' - icon_state = "access_button_standby" - name = "access button" - desc = "" - var/idDoor - var/obj/machinery/door/airlock/door - var/obj/machinery/doorButtons/airlock_controller/controller - var/busy - -/obj/machinery/doorButtons/access_button/findObjsByTag() - for(var/obj/machinery/doorButtons/airlock_controller/A in GLOB.machines) - if(A.idSelf == idSelf) - controller = A - break - for(var/obj/machinery/door/airlock/I in GLOB.machines) - if(I.id_tag == idDoor) - door = I - break - -/obj/machinery/doorButtons/access_button/interact(mob/user) - if(busy) - return - if(!allowed(user)) - to_chat(user, "Access denied.") - return - if(controller && !controller.busy && door) - if(controller.stat & NOPOWER) - return - busy = TRUE - update_icon() - if(door.density) - if(!controller.exteriorAirlock || !controller.interiorAirlock) - controller.onlyOpen(door) - else - if(controller.exteriorAirlock.density && controller.interiorAirlock.density) - controller.onlyOpen(door) - else - controller.cycleClose(door) - else - controller.onlyClose(door) - sleep(20) - busy = FALSE - update_icon() - -/obj/machinery/doorButtons/access_button/update_icon_state() - if(stat & NOPOWER) - icon_state = "access_button_off" - else - if(busy) - icon_state = "access_button_cycle" - else - icon_state = "access_button_standby" - -/obj/machinery/doorButtons/access_button/removeMe(obj/O) - if(O == door) - door = null - - - -/obj/machinery/doorButtons/airlock_controller - icon = 'icons/obj/airlock_machines.dmi' - icon_state = "access_control_standby" - name = "access console" - desc = "" - var/obj/machinery/door/airlock/interiorAirlock - var/obj/machinery/door/airlock/exteriorAirlock - var/idInterior - var/idExterior - var/busy - var/lostPower - -/obj/machinery/doorButtons/airlock_controller/removeMe(obj/O) - if(O == interiorAirlock) - interiorAirlock = null - else if(O == exteriorAirlock) - exteriorAirlock = null - -/obj/machinery/doorButtons/airlock_controller/Destroy() - for(var/obj/machinery/doorButtons/access_button/A in GLOB.machines) - if(A.controller == src) - A.controller = null - return ..() - -/obj/machinery/doorButtons/airlock_controller/Topic(href, href_list) - if(..()) - return - if(busy) - return - if(!allowed(usr)) - to_chat(usr, "Access denied.") - return - switch(href_list["command"]) - if("close_exterior") - onlyClose(exteriorAirlock) - if("close_interior") - onlyClose(interiorAirlock) - if("cycle_exterior") - cycleClose(exteriorAirlock) - if("cycle_interior") - cycleClose(interiorAirlock) - if("open_exterior") - onlyOpen(exteriorAirlock) - if("open_interior") - onlyOpen(interiorAirlock) - -/obj/machinery/doorButtons/airlock_controller/proc/onlyOpen(obj/machinery/door/airlock/A) - if(A) - busy = CLOSING - update_icon() - openDoor(A) - -/obj/machinery/doorButtons/airlock_controller/proc/onlyClose(obj/machinery/door/airlock/A) - if(A) - busy = CLOSING - closeDoor(A) - -/obj/machinery/doorButtons/airlock_controller/proc/closeDoor(obj/machinery/door/airlock/A) - if(A.density) - goIdle() - return FALSE - update_icon() - A.safe = FALSE //Door crushies, manual door after all. Set every time in case someone changed it, safe doors can end up waiting forever. - A.unbolt() - if(A.close()) - if(stat & NOPOWER || lostPower || !A || QDELETED(A)) - goIdle(TRUE) - return FALSE - A.bolt() - goIdle(TRUE) - return TRUE - goIdle(TRUE) - return FALSE - -/obj/machinery/doorButtons/airlock_controller/proc/cycleClose(obj/machinery/door/airlock/A) - if(!A || !exteriorAirlock || !interiorAirlock) - return - if(exteriorAirlock.density == interiorAirlock.density || !A.density) - return - busy = CYCLE - update_icon() - if(A == interiorAirlock) - if(closeDoor(exteriorAirlock)) - busy = CYCLE_INTERIOR - else - if(closeDoor(interiorAirlock)) - busy = CYCLE_EXTERIOR - -/obj/machinery/doorButtons/airlock_controller/proc/cycleOpen(obj/machinery/door/airlock/A) - if(!A) - goIdle(TRUE) - if(A == exteriorAirlock) - if(interiorAirlock) - if(!interiorAirlock.density || !interiorAirlock.locked) - return - else - if(exteriorAirlock) - if(!exteriorAirlock.density || !exteriorAirlock.locked) - return - if(busy != OPENING) - busy = OPENING - openDoor(A) - -/obj/machinery/doorButtons/airlock_controller/proc/openDoor(obj/machinery/door/airlock/A) - if(exteriorAirlock && interiorAirlock && (!exteriorAirlock.density || !interiorAirlock.density)) - goIdle(TRUE) - return - A.unbolt() - INVOKE_ASYNC(src, PROC_REF(do_openDoor), A) - -/obj/machinery/doorButtons/airlock_controller/proc/do_openDoor(obj/machinery/door/airlock/A) - if(A && A.open()) - if(stat | (NOPOWER) && !lostPower && A && !QDELETED(A)) - A.bolt() - goIdle(TRUE) - -/obj/machinery/doorButtons/airlock_controller/proc/goIdle(update) - lostPower = FALSE - busy = FALSE - if(update) - update_icon() - updateUsrDialog() - -/obj/machinery/doorButtons/airlock_controller/process() - if(stat & NOPOWER) - return - if(busy == CYCLE_EXTERIOR) - cycleOpen(exteriorAirlock) - else if(busy == CYCLE_INTERIOR) - cycleOpen(interiorAirlock) - -/obj/machinery/doorButtons/airlock_controller/power_change() - . = ..() - if(stat & NOPOWER) - lostPower = TRUE - else - if(!busy) - lostPower = FALSE - -/obj/machinery/doorButtons/airlock_controller/findObjsByTag() - for(var/obj/machinery/door/airlock/A in GLOB.machines) - if(A.id_tag == idInterior) - interiorAirlock = A - else if(A.id_tag == idExterior) - exteriorAirlock = A - -/obj/machinery/doorButtons/airlock_controller/update_icon_state() - if(stat & NOPOWER) - icon_state = "access_control_off" - return - if(busy || lostPower) - icon_state = "access_control_process" - else - icon_state = "access_control_standby" - -/obj/machinery/doorButtons/airlock_controller/ui_interact(mob/user) - var/datum/browser/popup = new(user, "computer", name) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.set_content(returnText()) - popup.open() - -/obj/machinery/doorButtons/airlock_controller/proc/returnText() - var/output - if(!exteriorAirlock && !interiorAirlock) - return "ERROR ERROR ERROR ERROR" - if(lostPower) - output = "Initializing..." - else - if(!exteriorAirlock || !interiorAirlock) - if(!exteriorAirlock) - if(interiorAirlock.density) - output = "Open Interior Airlock
" - else - output = "Close Interior Airlock
" - else - if(exteriorAirlock.density) - output = "Open Exterior Airlock
" - else - output = "Close Exterior Airlock
" - else - if(exteriorAirlock.density) - if(interiorAirlock.density) - output = {"Open Exterior Airlock
- Open Interior Airlock
"} - else - output = {"Cycle to Exterior Airlock
- Close Interior Airlock
"} - else - if(interiorAirlock.density) - output = {"Close Exterior Airlock
- Cycle to Interior Airlock
"} - else - output = {"Close Exterior Airlock
- Close Interior Airlock
"} - - - output = {"Access Control Console
- [output]
"} - if(exteriorAirlock) - output += "Exterior Door: [exteriorAirlock.density ? "closed" : "open"]
" - if(interiorAirlock) - output += "Interior Door: [interiorAirlock.density ? "closed" : "open"]
" - - return output - -#undef CLOSING -#undef OPENING -#undef CYCLE -#undef CYCLE_EXTERIOR -#undef CYCLE_INTERIOR diff --git a/code/game/machinery/embedded_controller/airlock_controller.dm b/code/game/machinery/embedded_controller/airlock_controller.dm deleted file mode 100644 index 125c6692f3..0000000000 --- a/code/game/machinery/embedded_controller/airlock_controller.dm +++ /dev/null @@ -1,315 +0,0 @@ -//States for airlock_control -#define AIRLOCK_STATE_INOPEN -2 -#define AIRLOCK_STATE_PRESSURIZE -1 -#define AIRLOCK_STATE_CLOSED 0 -#define AIRLOCK_STATE_DEPRESSURIZE 1 -#define AIRLOCK_STATE_OUTOPEN 2 - -/datum/computer/file/embedded_program/airlock_controller - var/id_tag - var/exterior_door_tag //Burn chamber facing door - var/interior_door_tag //Station facing door - var/airpump_tag //See: dp_vent_pump.dm - var/sensor_tag //See: /obj/machinery/airlock_sensor - var/sanitize_external //Before the interior airlock opens, do we first drain all gases inside the chamber and then repressurize? - - state = AIRLOCK_STATE_CLOSED - var/target_state = AIRLOCK_STATE_CLOSED - var/sensor_pressure = null - -/datum/computer/file/embedded_program/airlock_controller/receive_signal(datum/signal/signal) - var/receive_tag = signal.data["tag"] - if(!receive_tag) - return - - if(receive_tag==sensor_tag) - if(signal.data["pressure"]) - sensor_pressure = text2num(signal.data["pressure"]) - - else if(receive_tag==exterior_door_tag) - memory["exterior_status"] = signal.data["door_status"] - - else if(receive_tag==interior_door_tag) - memory["interior_status"] = signal.data["door_status"] - - else if(receive_tag==airpump_tag) - if(signal.data["power"]) - memory["pump_status"] = signal.data["direction"] - else - memory["pump_status"] = "off" - - else if(receive_tag==id_tag) - switch(signal.data["command"]) - if("cycle") - if(state < AIRLOCK_STATE_CLOSED) - target_state = AIRLOCK_STATE_OUTOPEN - else - target_state = AIRLOCK_STATE_INOPEN - -/datum/computer/file/embedded_program/airlock_controller/receive_user_command(command) - switch(command) - if("cycle_closed") - target_state = AIRLOCK_STATE_CLOSED - if("cycle_exterior") - target_state = AIRLOCK_STATE_OUTOPEN - if("cycle_interior") - target_state = AIRLOCK_STATE_INOPEN - if("abort") - target_state = AIRLOCK_STATE_CLOSED - -/datum/computer/file/embedded_program/airlock_controller/process() - var/process_again = 1 - while(process_again) - process_again = 0 - switch(state) - if(AIRLOCK_STATE_INOPEN) // state -2 - if(target_state > state) - if(memory["interior_status"] == "closed") - state = AIRLOCK_STATE_CLOSED - process_again = 1 - else - post_signal(new /datum/signal(list( - "tag" = interior_door_tag, - "command" = "secure_close" - ))) - else - if(memory["pump_status"] != "off") - post_signal(new /datum/signal(list( - "tag" = airpump_tag, - "power" = 0, - "sigtype" = "command" - ))) - - if(AIRLOCK_STATE_PRESSURIZE) - if(target_state < state) - if(sensor_pressure >= ONE_ATMOSPHERE*0.95) - if(memory["interior_status"] == "open") - state = AIRLOCK_STATE_INOPEN - process_again = 1 - else - post_signal(new /datum/signal(list( - "tag" = interior_door_tag, - "command" = "secure_open" - ))) - else - var/datum/signal/signal = new(list( - "tag" = airpump_tag, - "sigtype" = "command" - )) - if(memory["pump_status"] == "siphon") - signal.data["stabilize"] = 1 - else if(memory["pump_status"] != "release") - signal.data["power"] = 1 - post_signal(signal) - else if(target_state > state) - state = AIRLOCK_STATE_CLOSED - process_again = 1 - - if(AIRLOCK_STATE_CLOSED) - if(target_state > state) - if(memory["interior_status"] == "closed") - state = AIRLOCK_STATE_DEPRESSURIZE - process_again = 1 - else - post_signal(new /datum/signal(list( - "tag" = interior_door_tag, - "command" = "secure_close" - ))) - else if(target_state < state) - if(memory["exterior_status"] == "closed") - state = AIRLOCK_STATE_PRESSURIZE - process_again = 1 - else - post_signal(new /datum/signal(list( - "tag" = exterior_door_tag, - "command" = "secure_close" - ))) - - else - if(memory["pump_status"] != "off") - post_signal(new /datum/signal(list( - "tag" = airpump_tag, - "power" = 0, - "sigtype" = "command" - ))) - - if(AIRLOCK_STATE_DEPRESSURIZE) - var/target_pressure = ONE_ATMOSPHERE*0.05 - if(sanitize_external) - target_pressure = ONE_ATMOSPHERE*0.01 - - if(sensor_pressure <= target_pressure) - if(target_state > state) - if(memory["exterior_status"] == "open") - state = AIRLOCK_STATE_OUTOPEN - else - post_signal(new /datum/signal(list( - "tag" = exterior_door_tag, - "command" = "secure_open" - ))) - else if(target_state < state) - state = AIRLOCK_STATE_CLOSED - process_again = 1 - else if((target_state < state) && !sanitize_external) - state = AIRLOCK_STATE_CLOSED - process_again = 1 - else - var/datum/signal/signal = new(list( - "tag" = airpump_tag, - "sigtype" = "command" - )) - if(memory["pump_status"] == "release") - signal.data["purge"] = 1 - else if(memory["pump_status"] != "siphon") - signal.data["power"] = 1 - post_signal(signal) - - if(AIRLOCK_STATE_OUTOPEN) //state 2 - if(target_state < state) - if(memory["exterior_status"] == "closed") - if(sanitize_external) - state = AIRLOCK_STATE_DEPRESSURIZE - process_again = 1 - else - state = AIRLOCK_STATE_CLOSED - process_again = 1 - else - post_signal(new /datum/signal(list( - "tag" = exterior_door_tag, - "command" = "secure_close" - ))) - else - if(memory["pump_status"] != "off") - post_signal(new /datum/signal(list( - "tag" = airpump_tag, - "power" = 0, - "sigtype" = "command" - ))) - - memory["sensor_pressure"] = sensor_pressure - memory["processing"] = state != target_state - //sensor_pressure = null //not sure if we can comment this out. Uncomment in case of problems -rastaf0 - - return 1 - - -/obj/machinery/embedded_controller/radio/airlock_controller - icon = 'icons/obj/airlock_machines.dmi' - icon_state = "airlock_control_standby" - - name = "airlock console" - density = FALSE - - frequency = FREQ_AIRLOCK_CONTROL - power_channel = ENVIRON - - // Setup parameters only - var/id_tag - var/exterior_door_tag - var/interior_door_tag - var/airpump_tag - var/sensor_tag - var/sanitize_external - -/obj/machinery/embedded_controller/radio/airlock_controller/incinerator_toxmix - name = "Incinerator Access Console" - airpump_tag = INCINERATOR_TOXMIX_DP_VENTPUMP - exterior_door_tag = INCINERATOR_TOXMIX_AIRLOCK_EXTERIOR - id_tag = INCINERATOR_TOXMIX_AIRLOCK_CONTROLLER - interior_door_tag = INCINERATOR_TOXMIX_AIRLOCK_INTERIOR - sanitize_external = TRUE - sensor_tag = INCINERATOR_TOXMIX_AIRLOCK_SENSOR - -/obj/machinery/embedded_controller/radio/airlock_controller/incinerator_atmos - name = "Incinerator Access Console" - airpump_tag = INCINERATOR_ATMOS_DP_VENTPUMP - exterior_door_tag = INCINERATOR_ATMOS_AIRLOCK_EXTERIOR - id_tag = INCINERATOR_ATMOS_AIRLOCK_CONTROLLER - interior_door_tag = INCINERATOR_ATMOS_AIRLOCK_INTERIOR - sanitize_external = TRUE - sensor_tag = INCINERATOR_ATMOS_AIRLOCK_SENSOR - -/obj/machinery/embedded_controller/radio/airlock_controller/incinerator_syndicatelava - name = "Incinerator Access Console" - airpump_tag = INCINERATOR_SYNDICATELAVA_DP_VENTPUMP - exterior_door_tag = INCINERATOR_SYNDICATELAVA_AIRLOCK_EXTERIOR - id_tag = INCINERATOR_SYNDICATELAVA_AIRLOCK_CONTROLLER - interior_door_tag = INCINERATOR_SYNDICATELAVA_AIRLOCK_INTERIOR - sanitize_external = TRUE - sensor_tag = INCINERATOR_SYNDICATELAVA_AIRLOCK_SENSOR - -/obj/machinery/embedded_controller/radio/airlock_controller/Initialize(mapload) - . = ..() - if(!mapload) - return - - var/datum/computer/file/embedded_program/airlock_controller/new_prog = new - - new_prog.id_tag = id_tag - new_prog.exterior_door_tag = exterior_door_tag - new_prog.interior_door_tag = interior_door_tag - new_prog.airpump_tag = airpump_tag - new_prog.sensor_tag = sensor_tag - new_prog.sanitize_external = sanitize_external - - new_prog.master = src - program = new_prog - -/obj/machinery/embedded_controller/radio/airlock_controller/update_icon_state() - if(on && program) - if(program.memory["processing"]) - icon_state = "airlock_control_process" - else - icon_state = "airlock_control_standby" - else - icon_state = "airlock_control_off" - - -/obj/machinery/embedded_controller/radio/airlock_controller/return_text() - var/state_options = null - - var/state = 0 - var/sensor_pressure = "----" - var/exterior_status = "----" - var/interior_status = "----" - var/pump_status = "----" - var/current_status = "Inactive
 " - if(program) - state = program.state - sensor_pressure = program.memory["sensor_pressure"] ? program.memory["sensor_pressure"] : "----" - exterior_status = program.memory["exterior_status"] ? program.memory["exterior_status"] : "----" - interior_status = program.memory["interior_status"] ? program.memory["interior_status"] : "----" - pump_status = program.memory["pump_status"] ? program.memory["pump_status"] : "----" - - switch(state) - if(AIRLOCK_STATE_INOPEN) - state_options = {"Close Interior Airlock
-Cycle to Exterior Airlock
"} - current_status = "Interior Airlock Open
Chamber Pressurized" - if(AIRLOCK_STATE_PRESSURIZE) - state_options = "Abort Cycling
" - current_status = "Cycling to Interior Airlock
Chamber Pressurizing" - if(AIRLOCK_STATE_CLOSED) - state_options = {"Open Interior Airlock
-Open Exterior Airlock
"} - if(AIRLOCK_STATE_DEPRESSURIZE) - state_options = "Abort Cycling
" - current_status = "Cycling to Exterior Airlock
Chamber Depressurizing" - if(AIRLOCK_STATE_OUTOPEN) - state_options = {"Cycle to Interior Airlock
-Close Exterior Airlock
"} - current_status = "Exterior Airlock Open
Chamber Depressurized" - - var/output = {"

Airlock Status

-
-
Current Status:
[current_status]
-
 
-
\> Chamber Pressure:
[sensor_pressure] kPa
-
\> Control Pump:
[pump_status]
-
\> Interior Door:
[interior_status]
-
\> Exterior Door:
[exterior_status]
-
-
-[state_options]"} - - return output diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm deleted file mode 100644 index 5f677ad62c..0000000000 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ /dev/null @@ -1,85 +0,0 @@ -/datum/computer/file/embedded_program - var/list/memory = list() - var/state - var/obj/machinery/embedded_controller/master - -/datum/computer/file/embedded_program/proc/post_signal(datum/signal/signal, comm_line) - if(master) - master.post_signal(signal, comm_line) - else - qdel(signal) - -/datum/computer/file/embedded_program/proc/receive_user_command(command) - -/datum/computer/file/embedded_program/proc/receive_signal(datum/signal/signal) - return null - -/datum/computer/file/embedded_program/process() - return 0 - -/obj/machinery/embedded_controller - var/datum/computer/file/embedded_program/program - - name = "embedded controller" - density = FALSE - - var/on = TRUE - -/obj/machinery/embedded_controller/ui_interact(mob/user) - . = ..() - user.set_machine(src) - var/datum/browser/popup = new(user, "computer", name) // Set up the popup browser window - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.set_content(return_text()) - popup.open() - -/obj/machinery/embedded_controller/proc/return_text() - -/obj/machinery/embedded_controller/proc/post_signal(datum/signal/signal, comm_line) - return 0 - -/obj/machinery/embedded_controller/receive_signal(datum/signal/signal) - if(istype(signal) && program) - program.receive_signal(signal) - -/obj/machinery/embedded_controller/Topic(href, href_list) - if(..()) - return 0 - - if(program) - program.receive_user_command(href_list["command"]) - addtimer(CALLBACK(program, TYPE_PROC_REF(/datum/computer/file/embedded_program, process)), 5) - - usr.set_machine(src) - addtimer(CALLBACK(src, PROC_REF(updateDialog)), 5) - -/obj/machinery/embedded_controller/process() - if(program) - program.process() - - update_icon() - src.updateDialog() - -/obj/machinery/embedded_controller/radio - var/frequency - var/datum/radio_frequency/radio_connection - -/obj/machinery/embedded_controller/radio/Destroy() - SSradio.remove_object(src,frequency) - return ..() - -/obj/machinery/embedded_controller/radio/Initialize() - . = ..() - set_frequency(frequency) - -/obj/machinery/embedded_controller/radio/post_signal(datum/signal/signal) - signal.transmission_method = TRANSMISSION_RADIO - if(radio_connection) - return radio_connection.post_signal(src, signal) - else - signal = null - -/obj/machinery/embedded_controller/radio/proc/set_frequency(new_frequency) - SSradio.remove_object(src, frequency) - frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency) diff --git a/code/game/machinery/embedded_controller/simple_vent_controller.dm b/code/game/machinery/embedded_controller/simple_vent_controller.dm deleted file mode 100644 index 6c8467dbd3..0000000000 --- a/code/game/machinery/embedded_controller/simple_vent_controller.dm +++ /dev/null @@ -1,72 +0,0 @@ -/datum/computer/file/embedded_program/simple_vent_controller - - var/airpump_tag - -/datum/computer/file/embedded_program/simple_vent_controller/receive_user_command(command) - switch(command) - if("vent_inactive") - post_signal(new /datum/signal(list( - "tag" = airpump_tag, - "sigtype" = "command", - "power" = 0 - ))) - - if("vent_pump") - post_signal(new /datum/signal(list( - "tag" = airpump_tag, - "sigtype" = "command", - "stabilize" = 1, - "power" = 1 - ))) - - if("vent_clear") - post_signal(new /datum/signal(list( - "tag" = airpump_tag, - "sigtype" = "command", - "purge" = 1, - "power" = 1 - ))) - -/datum/computer/file/embedded_program/simple_vent_controller/process() - return 0 - - -/obj/machinery/embedded_controller/radio/simple_vent_controller - icon = 'icons/obj/airlock_machines.dmi' - icon_state = "airlock_control_standby" - - name = "vent controller" - density = FALSE - - frequency = FREQ_ATMOS_CONTROL - power_channel = ENVIRON - - // Setup parameters only - var/airpump_tag - -/obj/machinery/embedded_controller/radio/simple_vent_controller/Initialize(mapload) - . = ..() - if(!mapload) - return - var/datum/computer/file/embedded_program/simple_vent_controller/new_prog = new - - new_prog.airpump_tag = airpump_tag - new_prog.master = src - program = new_prog - -/obj/machinery/embedded_controller/radio/simple_vent_controller/update_icon_state() - if(on && program) - icon_state = "airlock_control_standby" - else - icon_state = "airlock_control_off" - - -/obj/machinery/embedded_controller/radio/simple_vent_controller/return_text() - var/state_options = null - state_options = {"Deactivate Vent
-Activate Vent / Pump
-Activate Vent / Clear
"} - var/output = {"Vent Control Console
-[state_options]
"} - - return output diff --git a/code/game/machinery/exp_cloner.dm b/code/game/machinery/exp_cloner.dm deleted file mode 100644 index 051e1bdcfe..0000000000 --- a/code/game/machinery/exp_cloner.dm +++ /dev/null @@ -1,306 +0,0 @@ -//Experimental cloner; clones a body regardless of the owner's status, letting a ghost control it instead -/obj/machinery/clonepod/experimental - name = "experimental cloning pod" - desc = "" - icon = 'icons/obj/machines/cloning.dmi' - icon_state = "pod_0" - req_access = null - circuit = /obj/item/circuitboard/machine/clonepod/experimental - internal_radio = FALSE - -//Start growing a human clone in the pod! -/obj/machinery/clonepod/experimental/growclone(clonename, ui, mutation_index, mindref, last_death, blood_type, datum/species/mrace, list/features, factions, list/quirks, datum/bank_account/insurance) - if(panel_open) - return NONE - if(mess || attempting) - return NONE - - attempting = TRUE //One at a time!! - countdown.start() - - var/mob/living/carbon/human/H = new /mob/living/carbon/human(src) - - H.hardset_dna(ui, mutation_index, H.real_name, blood_type, mrace, features) - - if(efficiency > 2) - var/list/unclean_mutations = (GLOB.not_good_mutations|GLOB.bad_mutations) - H.dna.remove_mutation_group(unclean_mutations) - if(efficiency > 5 && prob(20)) - H.easy_randmut(POSITIVE) - if(efficiency < 3 && prob(50)) - var/mob/M = H.easy_randmut(NEGATIVE+MINOR_NEGATIVE) - if(ismob(M)) - H = M - - H.silent = 20 //Prevents an extreme edge case where clones could speak if they said something at exactly the right moment. - occupant = H - - if(!clonename) //to prevent null names - clonename = "clone ([rand(1,999)])" - H.real_name = clonename - - icon_state = "pod_1" - //Get the clone body ready - maim_clone(H) - ADD_TRAIT(H, TRAIT_STABLEHEART, CLONING_POD_TRAIT) - ADD_TRAIT(H, TRAIT_STABLELIVER, CLONING_POD_TRAIT) - ADD_TRAIT(H, TRAIT_EMOTEMUTE, CLONING_POD_TRAIT) - ADD_TRAIT(H, TRAIT_MUTE, CLONING_POD_TRAIT) - ADD_TRAIT(H, TRAIT_NOBREATH, CLONING_POD_TRAIT) - ADD_TRAIT(H, TRAIT_NOCRITDAMAGE, CLONING_POD_TRAIT) - H.Unconscious(80) - - var/list/candidates = pollCandidatesForMob("Do you want to play as [clonename]'s defective clone?", null, null, null, 100, H, POLL_IGNORE_DEFECTIVECLONE) - if(LAZYLEN(candidates)) - var/mob/dead/observer/C = pick(candidates) - H.key = C.key - - if(grab_ghost_when == CLONER_FRESH_CLONE) - H.grab_ghost() - to_chat(H, "Consciousness slowly creeps over you as my body regenerates.
So this is what cloning feels like?
") - - if(grab_ghost_when == CLONER_MATURE_CLONE) - H.ghostize(TRUE) //Only does anything if they were still in their old body and not already a ghost - to_chat(H.get_ghost(TRUE), "My body is beginning to regenerate in a cloning pod. You will become conscious when it is complete.") - - if(H) - H.faction |= factions - - H.set_cloned_appearance() - - H.set_suicide(FALSE) - attempting = FALSE - return CLONING_DELETE_RECORD | CLONING_SUCCESS //so that we don't spam clones with autoprocess unless we leave a body in the scanner - - -//Prototype cloning console, much more rudimental and lacks modern functions such as saving records, autocloning, or safety checks. -/obj/machinery/computer/prototype_cloning - name = "prototype cloning console" - desc = "" - icon_screen = "dna" - icon_keyboard = "med_key" - circuit = /obj/item/circuitboard/computer/prototype_cloning - var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning. - var/list/pods //Linked experimental cloning pods - var/temp = "Inactive" - var/scantemp = "Ready to Scan" - var/loading = FALSE // Nice loading text - - light_color = LIGHT_COLOR_BLUE - -/obj/machinery/computer/prototype_cloning/Initialize() - . = ..() - updatemodules(TRUE) - -/obj/machinery/computer/prototype_cloning/Destroy() - if(pods) - for(var/P in pods) - DetachCloner(P) - pods = null - return ..() - -/obj/machinery/computer/prototype_cloning/proc/GetAvailablePod(mind = null) - if(pods) - for(var/P in pods) - var/obj/machinery/clonepod/experimental/pod = P - if(pod.is_operational() && !(pod.occupant || pod.mess)) - return pod - -/obj/machinery/computer/prototype_cloning/proc/updatemodules(findfirstcloner) - scanner = findscanner() - if(findfirstcloner && !LAZYLEN(pods)) - findcloner() - -/obj/machinery/computer/prototype_cloning/proc/findscanner() - var/obj/machinery/dna_scannernew/scannerf = null - - // Loop through every direction - for(var/direction in GLOB.cardinals) - // Try to find a scanner in that direction - scannerf = locate(/obj/machinery/dna_scannernew, get_step(src, direction)) - // If found and operational, return the scanner - if (!isnull(scannerf) && scannerf.is_operational()) - return scannerf - - // If no scanner was found, it will return null - return null - -/obj/machinery/computer/prototype_cloning/proc/findcloner() - var/obj/machinery/clonepod/experimental/podf = null - for(var/direction in GLOB.cardinals) - podf = locate(/obj/machinery/clonepod/experimental, get_step(src, direction)) - if (!isnull(podf) && podf.is_operational()) - AttachCloner(podf) - -/obj/machinery/computer/prototype_cloning/proc/AttachCloner(obj/machinery/clonepod/experimental/pod) - if(!pod.connected) - pod.connected = src - LAZYADD(pods, pod) - -/obj/machinery/computer/prototype_cloning/proc/DetachCloner(obj/machinery/clonepod/experimental/pod) - pod.connected = null - LAZYREMOVE(pods, pod) - -/obj/machinery/computer/prototype_cloning/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_MULTITOOL) - if(!multitool_check_buffer(user, W)) - return - var/obj/item/multitool/P = W - - if(istype(P.buffer, /obj/machinery/clonepod/experimental)) - if(get_area(P.buffer) != get_area(src)) - to_chat(user, "-% Cannot link machines across power zones. Buffer cleared %-") - P.buffer = null - return - to_chat(user, "-% Successfully linked [P.buffer] with [src] %-") - var/obj/machinery/clonepod/experimental/pod = P.buffer - if(pod.connected) - pod.connected.DetachCloner(pod) - AttachCloner(pod) - else - P.buffer = src - to_chat(user, "-% Successfully stored [REF(P.buffer)] [P.buffer.name] in buffer %-") - return - else - return ..() - -/obj/machinery/computer/prototype_cloning/attack_hand(mob/user) - if(..()) - return - interact(user) - -/obj/machinery/computer/prototype_cloning/interact(mob/user) - user.set_machine(src) - add_fingerprint(user) - - if(..()) - return - - updatemodules(TRUE) - - var/dat = "" - dat += "Refresh" - - dat += "

Cloning Pod Status

" - dat += "
[temp] 
" - - if (isnull(src.scanner) || !LAZYLEN(pods)) - dat += "

Modules

" - //dat += "Reload Modules" - if (isnull(src.scanner)) - dat += "ERROR: No Scanner detected!
" - if (!LAZYLEN(pods)) - dat += "ERROR: No Pod detected
" - - // Scan-n-Clone - if (!isnull(src.scanner)) - var/mob/living/scanner_occupant = get_mob_or_brainmob(scanner.occupant) - - dat += "

Cloning

" - - dat += "
" - if(!scanner_occupant) - dat += "Scanner Unoccupied" - else if(loading) - dat += "[scanner_occupant] => Scanning..." - else - scantemp = "Ready to Clone" - dat += "[scanner_occupant] => [scantemp]" - dat += "
" - - if(scanner_occupant) - dat += "Clone" - dat += "
[src.scanner.locked ? "Unlock Scanner" : "Lock Scanner"]" - else - dat += "Clone" - - var/datum/browser/popup = new(user, "cloning", "Prototype Cloning System Control") - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - -/obj/machinery/computer/prototype_cloning/Topic(href, href_list) - if(..()) - return - - if(loading) - return - - else if ((href_list["clone"]) && !isnull(scanner) && scanner.is_operational()) - scantemp = "" - - loading = TRUE - updateUsrDialog() - playsound(src, 'sound/blank.ogg', 50, FALSE) - say("Initiating scan...") - - addtimer(CALLBACK(src, PROC_REF(do_clone)), 2 SECONDS) - - //No locking an open scanner. - else if ((href_list["lock"]) && !isnull(scanner) && scanner.is_operational()) - if ((!scanner.locked) && (scanner.occupant)) - scanner.locked = TRUE - playsound(src, 'sound/blank.ogg', 50, FALSE) - else - scanner.locked = FALSE - playsound(src, 'sound/blank.ogg', 50, FALSE) - - else if (href_list["refresh"]) - updateUsrDialog() - playsound(src, "terminal_type", 25, FALSE) - - add_fingerprint(usr) - updateUsrDialog() - return - -/obj/machinery/computer/prototype_cloning/proc/do_clone() - clone_occupant(scanner.occupant) - loading = FALSE - updateUsrDialog() - playsound(src, 'sound/blank.ogg', 50, FALSE) - -/obj/machinery/computer/prototype_cloning/proc/clone_occupant(occupant) - var/mob/living/mob_occupant = get_mob_or_brainmob(occupant) - var/datum/dna/dna - if(ishuman(mob_occupant)) - var/mob/living/carbon/C = mob_occupant - dna = C.has_dna() - if(isbrain(mob_occupant)) - var/mob/living/brain/B = mob_occupant - dna = B.stored_dna - - if(!istype(dna)) - scantemp = "Unable to locate valid genetic data." - playsound(src, 'sound/blank.ogg', 50, FALSE) - return - if((HAS_TRAIT(mob_occupant, TRAIT_HUSK)) && (src.scanner.scan_level < 2)) - scantemp = "Subject's body is too damaged to scan properly." - playsound(src, 'sound/blank.ogg', 50, FALSE) - return - if(HAS_TRAIT(mob_occupant, TRAIT_BADDNA)) - scantemp = "Subject's DNA is damaged beyond any hope of recovery." - playsound(src, 'sound/blank.ogg', 50, FALSE) - return - - var/clone_species - if(dna.species) - clone_species = dna.species - else - var/datum/species/rando_race = pick(GLOB.roundstart_races) - clone_species = rando_race.type - - var/obj/machinery/clonepod/pod = GetAvailablePod() - //Can't clone without someone to clone. Or a pod. Or if the pod is busy. Or full of gibs. - if(!LAZYLEN(pods)) - temp = "No Clonepods detected." - playsound(src, 'sound/blank.ogg', 50, FALSE) - else if(!pod) - temp = "No Clonepods available." - playsound(src, 'sound/blank.ogg', 50, FALSE) - else if(pod.occupant) - temp = "Cloning cycle already in progress." - playsound(src, 'sound/blank.ogg', 50, FALSE) - else - pod.growclone(mob_occupant.real_name, dna.uni_identity, dna.mutation_index, null, null, dna.blood_type, clone_species, dna.features, mob_occupant.faction) - temp = "[mob_occupant.real_name] => Cloning data sent to pod." - playsound(src, 'sound/blank.ogg', 50, FALSE) diff --git a/code/game/machinery/fat_sucker.dm b/code/game/machinery/fat_sucker.dm deleted file mode 100644 index 5c2815e1e3..0000000000 --- a/code/game/machinery/fat_sucker.dm +++ /dev/null @@ -1,213 +0,0 @@ -/obj/machinery/fat_sucker - name = "lipid extractor" - desc = "" - icon = 'icons/obj/machines/fat_sucker.dmi' - icon_state = "fat" - - state_open = FALSE - density = TRUE - req_access = list(ACCESS_KITCHEN) - var/processing = FALSE - var/start_at = NUTRITION_LEVEL_WELL_FED - var/stop_at = NUTRITION_LEVEL_STARVING - var/free_exit = TRUE //set to false to prevent people from exiting before being completely stripped of fat - var/bite_size = 15 //amount of nutrients we take per process - var/nutrients //amount of nutrients we got build up - var/nutrient_to_meat = 90 //one slab of meat gives about 52 nutrition - var/datum/looping_sound/microwave/soundloop //100% stolen from microwaves - var/breakout_time = 600 - - var/next_fact = 10 //in ticks, so about 20 seconds - var/static/list/fat_facts = list(\ - "Fats are triglycerides made up of a combination of different building blocks; glycerol and fatty acids.", \ - "Adults should get a recommended 20-35% of their energy intake from fat.", \ - "Being overweight or obese puts you at an increased risk of chronic diseases, such as cardiovascular diseases, metabolic syndrome, type 2 diabetes and some types of cancers.", \ - "Not all fats are bad. A certain amount of fat is an essential part of a healthy balanced diet. " , \ - "Saturated fat should form no more than 11% of your daily calories.", \ - "Unsaturated fat, that is monounsaturated fats, polyunsaturated fats and omega-3 fatty acids, is found in plant foods and fish." \ - ) - -/obj/machinery/fat_sucker/Initialize() - . = ..() - soundloop = new(list(src), FALSE) - update_icon() - -/obj/machinery/fat_sucker/RefreshParts() - ..() - var/rating = 0 - for(var/obj/item/stock_parts/micro_laser/L in component_parts) - rating += L.rating - bite_size = initial(bite_size) + rating * 5 - nutrient_to_meat = initial(nutrient_to_meat) - rating * 5 - -/obj/machinery/fat_sucker/examine(mob/user) - . = ..() - . += {"Alt-Click to toggle the safety hatch. - Removing [bite_size] nutritional units per operation. - Requires [nutrient_to_meat] nutritional units per meat slab."} - -/obj/machinery/fat_sucker/close_machine(mob/user) - if(panel_open) - to_chat(user, "I need to close the maintenance hatch first!") - return - ..() - playsound(src, 'sound/blank.ogg', 50) - if(occupant) - if(!iscarbon(occupant)) - occupant.forceMove(drop_location()) - occupant = null - return - to_chat(occupant, "I enter [src].") - addtimer(CALLBACK(src, PROC_REF(start_extracting)), 20, TIMER_OVERRIDE|TIMER_UNIQUE) - update_icon() - -/obj/machinery/fat_sucker/open_machine(mob/user) - make_meat() - playsound(src, 'sound/blank.ogg', 50) - if(processing) - stop() - ..() - -/obj/machinery/fat_sucker/container_resist(mob/living/user) - if(!free_exit || state_open) - to_chat(user, "The emergency release is not responding! You start pushing against the hull!") - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT - user.visible_message("I see [user] kicking against the door of [src]!", \ - "I lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)", \ - "I hear a metallic creaking from [src].") - if(do_after(user, breakout_time, target = src)) - if(!user || user.stat != CONSCIOUS || user.loc != src || state_open) - return - free_exit = TRUE - user.visible_message("[user] successfully broke out of [src]!", \ - "I successfully break out of [src]!") - open_machine() - return - open_machine() - -/obj/machinery/fat_sucker/interact(mob/user) - if(state_open) - close_machine() - else if(!processing || free_exit) - open_machine() - else - to_chat(user, "The safety hatch has been disabled!") - -/obj/machinery/fat_sucker/AltClick(mob/living/user) - if(!user.canUseTopic(src, BE_CLOSE)) - return - if(user == occupant) - to_chat(user, "I can't reach the controls from inside!") - return - if(!(obj_flags & EMAGGED) && !allowed(user)) - to_chat(user, "I lack the required access.") - return - free_exit = !free_exit - to_chat(user, "Safety hatch [free_exit ? "unlocked" : "locked"].") - -/obj/machinery/fat_sucker/update_overlays() - . = ..() - - if(!state_open) - if(processing) - . += "[icon_state]_door_on" - . += "[icon_state]_stack" - . += "[icon_state]_smoke" - . += "[icon_state]_green" - else - . += "[icon_state]_door_off" - if(occupant) - if(powered(EQUIP)) - . += "[icon_state]_stack" - . += "[icon_state]_yellow" - else - . += "[icon_state]_red" - else if(powered(EQUIP)) - . += "[icon_state]_red" - if(panel_open) - . += "[icon_state]_panel" - -/obj/machinery/fat_sucker/process() - if(!processing) - return - if(!powered(EQUIP) || !occupant || !iscarbon(occupant)) - open_machine() - return - - var/mob/living/carbon/C = occupant - if(C.nutrition <= stop_at) - open_machine() - playsound(src, 'sound/blank.ogg', 100, FALSE) - return - C.adjust_nutrition(-bite_size) - nutrients += bite_size - - if(next_fact <= 0) - next_fact = initial(next_fact) - say(pick(fat_facts)) - playsound(loc, 'sound/blank.ogg', 30, FALSE) - else - next_fact-- - use_power(500) - -/obj/machinery/fat_sucker/proc/start_extracting() - if(state_open || !occupant || processing || !powered(EQUIP)) - return - if(iscarbon(occupant)) - var/mob/living/carbon/C = occupant - if(C.nutrition > start_at) - processing = TRUE - soundloop.start() - update_icon() - set_light(2, 1, "#ff0000") - else - say("Subject not fat enough.") - playsound(src, 'sound/blank.ogg', 40, FALSE) - overlays += "[icon_state]_red" //throw a red light icon over it, to show that it wont work - -/obj/machinery/fat_sucker/proc/stop() - processing = FALSE - soundloop.stop() - set_light(0, 0) - -/obj/machinery/fat_sucker/proc/make_meat() - if(occupant && iscarbon(occupant)) - var/mob/living/carbon/C = occupant - if(C.type_of_meat) - if(nutrients >= nutrient_to_meat * 2) - C.put_in_hands(new /obj/item/reagent_containers/food/snacks/cookie (), TRUE) - while(nutrients >= nutrient_to_meat) - nutrients -= nutrient_to_meat - new C.type_of_meat (drop_location()) - while(nutrients >= nutrient_to_meat / 3) - nutrients -= nutrient_to_meat / 3 - new /obj/item/reagent_containers/food/snacks/meat/rawcutlet/plain (drop_location()) - nutrients = 0 - -/obj/machinery/fat_sucker/screwdriver_act(mob/living/user, obj/item/I) - . = TRUE - if(..()) - return - if(occupant) - to_chat(user, "[src] is currently occupied!") - return - if(state_open) - to_chat(user, "[src] must be closed to [panel_open ? "close" : "open"] its maintenance hatch!") - return - if(default_deconstruction_screwdriver(user, icon_state, icon_state, I)) - update_icon() - return - return FALSE - -/obj/machinery/fat_sucker/crowbar_act(mob/living/user, obj/item/I) - if(default_deconstruction_crowbar(I)) - return TRUE - -/obj/machinery/fat_sucker/emag_act(mob/living/user) - if(obj_flags & EMAGGED) - return - start_at = 100 - stop_at = 0 - to_chat(user, "I remove the access restrictions and lower the automatic ejection threshold!") - obj_flags |= EMAGGED diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm deleted file mode 100644 index 9d9a070018..0000000000 --- a/code/game/machinery/firealarm.dm +++ /dev/null @@ -1,339 +0,0 @@ -#define FIREALARM_COOLDOWN 67 // Chosen fairly arbitrarily, it is the length of the audio in FireAlarm.ogg. The actual track length is 7 seconds 8ms but but the audio stops at 6s 700ms - -/obj/item/electronics/firealarm - name = "fire alarm electronics" - custom_price = 5 - desc = "" - -/obj/item/wallframe/firealarm - name = "fire alarm frame" - desc = "" - icon = 'icons/obj/monitors.dmi' - icon_state = "fire_bitem" - result_path = /obj/machinery/firealarm - -/obj/machinery/firealarm - name = "fire alarm" - desc = "" - icon = 'icons/obj/monitors.dmi' - icon_state = "fire0" - max_integrity = 250 - integrity_failure = 0.4 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30) - use_power = IDLE_POWER_USE - idle_power_usage = 2 - active_power_usage = 6 - power_channel = ENVIRON - resistance_flags = FIRE_PROOF - - light_power = 0 - light_range = 7 - light_color = "#ff3232" - - var/detecting = 1 - var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone - var/last_alarm = 0 - var/area/myarea = null - -/obj/machinery/firealarm/Initialize(mapload, dir, building) - . = ..() - if(dir) - src.setDir(dir) - if(building) - buildstage = 0 - panel_open = TRUE - pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) - pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 - update_icon() - myarea = get_area(src) - LAZYADD(myarea.firealarms, src) - -/obj/machinery/firealarm/Destroy() - LAZYREMOVE(myarea.firealarms, src) - return ..() - -/obj/machinery/firealarm/update_icon_state() - if(panel_open) - icon_state = "fire_b[buildstage]" - return - - if(stat & BROKEN) - icon_state = "firex" - return - - icon_state = "fire0" - -/obj/machinery/firealarm/update_overlays() - . = ..() - SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) - - if(stat & NOPOWER) - return - - . += "fire_overlay" - - if(is_station_level(z)) - . += "fire_[GLOB.security_level]" - SSvis_overlays.add_vis_overlay(src, icon, "fire_[GLOB.security_level]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) - else - . += "fire_[SEC_LEVEL_GREEN]" - SSvis_overlays.add_vis_overlay(src, icon, "fire_[SEC_LEVEL_GREEN]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) - - var/area/A = get_area(src) - - if(!detecting || !A.fire) - . += "fire_off" - SSvis_overlays.add_vis_overlay(src, icon, "fire_off", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) - else if(obj_flags & EMAGGED) - . += "fire_emagged" - SSvis_overlays.add_vis_overlay(src, icon, "fire_emagged", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) - else - . += "fire_on" - SSvis_overlays.add_vis_overlay(src, icon, "fire_on", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) - -/obj/machinery/firealarm/emp_act(severity) - . = ..() - - if (. & EMP_PROTECT_SELF) - return - - if(prob(50 / severity)) - alarm() - -/obj/machinery/firealarm/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - obj_flags |= EMAGGED - update_icon() - if(user) - user.visible_message("Sparks fly out of [src]!", - "I emag [src], disabling its thermal sensors.") - playsound(src, "sparks", 50, TRUE) - -/obj/machinery/firealarm/temperature_expose(datum/gas_mixture/air, temperature, volume) - if((temperature > T0C + 200 || temperature < BODYTEMP_COLD_DAMAGE_LIMIT) && (last_alarm+FIREALARM_COOLDOWN < world.time) && !(obj_flags & EMAGGED) && detecting && !stat) - alarm() - ..() - -/obj/machinery/firealarm/proc/alarm(mob/user) - if(!is_operational() || (last_alarm+FIREALARM_COOLDOWN > world.time)) - return - last_alarm = world.time - var/area/A = get_area(src) - A.firealert(src) - playsound(loc, 'sound/blank.ogg', 75) - if(user) - log_game("[user] triggered a fire alarm at [COORD(src)]") - -/obj/machinery/firealarm/proc/reset(mob/user) - if(!is_operational()) - return - var/area/A = get_area(src) - A.firereset(src) - if(user) - log_game("[user] reset a fire alarm at [COORD(src)]") - -/obj/machinery/firealarm/attack_hand(mob/user) - if(buildstage != 2) - return ..() - add_fingerprint(user) - var/area/A = get_area(src) - if(A.fire) - reset(user) - else - alarm(user) - -/obj/machinery/firealarm/attack_ai(mob/user) - return attack_hand(user) - -/obj/machinery/firealarm/attack_robot(mob/user) - return attack_hand(user) - -/obj/machinery/firealarm/attackby(obj/item/W, mob/user, params) - add_fingerprint(user) - - if(W.tool_behaviour == TOOL_SCREWDRIVER && buildstage == 2) - W.play_tool_sound(src) - panel_open = !panel_open - to_chat(user, "The wires have been [panel_open ? "exposed" : "unexposed"].") - update_icon() - return - - if(panel_open) - - if(W.tool_behaviour == TOOL_WELDER && user.used_intent.type == INTENT_HELP) - if(obj_integrity < max_integrity) - if(!W.tool_start_check(user, amount=0)) - return - - to_chat(user, "I begin repairing [src]...") - if(W.use_tool(src, user, 40, volume=50)) - obj_integrity = max_integrity - to_chat(user, "I repair [src].") - else - to_chat(user, "[src] is already in good condition!") - return - - switch(buildstage) - if(2) - if(W.tool_behaviour == TOOL_MULTITOOL) - detecting = !detecting - if (src.detecting) - user.visible_message("[user] has reconnected [src]'s detecting unit!", "I reconnect [src]'s detecting unit.") - else - user.visible_message("[user] has disconnected [src]'s detecting unit!", "I disconnect [src]'s detecting unit.") - return - - else if(W.tool_behaviour == TOOL_WIRECUTTER) - buildstage = 1 - W.play_tool_sound(src) - new /obj/item/stack/cable_coil(user.loc, 5) - to_chat(user, "I cut the wires from \the [src].") - update_icon() - return - - else if(W.force) //hit and turn it on - ..() - var/area/A = get_area(src) - if(!A.fire) - alarm() - return - - if(1) - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/coil = W - if(coil.get_amount() < 5) - to_chat(user, "I need more cable for this!") - else - coil.use(5) - buildstage = 2 - to_chat(user, "I wire \the [src].") - update_icon() - return - - else if(W.tool_behaviour == TOOL_CROWBAR) - user.visible_message("[user.name] removes the electronics from [src.name].", \ - "I start prying out the circuit...") - if(W.use_tool(src, user, 20, volume=50)) - if(buildstage == 1) - if(stat & BROKEN) - to_chat(user, "I remove the destroyed circuit.") - stat &= ~BROKEN - else - to_chat(user, "I pry out the circuit.") - new /obj/item/electronics/firealarm(user.loc) - buildstage = 0 - update_icon() - return - if(0) - if(istype(W, /obj/item/electronics/firealarm)) - to_chat(user, "I insert the circuit.") - qdel(W) - buildstage = 1 - update_icon() - return - - else if(istype(W, /obj/item/electroadaptive_pseudocircuit)) - var/obj/item/electroadaptive_pseudocircuit/P = W - if(!P.adapt_circuit(user, 15)) - return - user.visible_message("[user] fabricates a circuit and places it into [src].", \ - "I adapt a fire alarm circuit and slot it into the assembly.") - buildstage = 1 - update_icon() - return - - else if(W.tool_behaviour == TOOL_WRENCH) - user.visible_message("[user] removes the fire alarm assembly from the wall.", \ - "I remove the fire alarm assembly from the wall.") - var/obj/item/wallframe/firealarm/frame = new /obj/item/wallframe/firealarm() - frame.forceMove(user.drop_location()) - W.play_tool_sound(src) - qdel(src) - return - - return ..() - -/obj/machinery/firealarm/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - if((buildstage == 0) && (the_rcd.upgrade & RCD_UPGRADE_SIMPLE_CIRCUITS)) - return list("mode" = RCD_UPGRADE_SIMPLE_CIRCUITS, "delay" = 20, "cost" = 1) - return FALSE - -/obj/machinery/firealarm/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) - switch(passed_mode) - if(RCD_UPGRADE_SIMPLE_CIRCUITS) - user.visible_message("[user] fabricates a circuit and places it into [src].", \ - "I adapt a fire alarm circuit and slot it into the assembly.") - buildstage = 1 - update_icon() - return TRUE - return FALSE - -/obj/machinery/firealarm/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) - . = ..() - if(.) //damage received - if(obj_integrity > 0 && !(stat & BROKEN) && buildstage != 0) - if(prob(33)) - alarm() - -/obj/machinery/firealarm/singularity_pull(S, current_size) - if (current_size >= STAGE_FIVE) // If the singulo is strong enough to pull anchored objects, the fire alarm experiences integrity failure - deconstruct() - ..() - -/obj/machinery/firealarm/obj_break(damage_flag) - if(buildstage == 0) //can't break the electronics if there isn't any inside. - return - . = ..() - if(.) - LAZYREMOVE(myarea.firealarms, src) - -/obj/machinery/firealarm/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/sheet/metal(loc, 1) - if(!(stat & BROKEN)) - var/obj/item/I = new /obj/item/electronics/firealarm(loc) - if(!disassembled) - I.obj_integrity = I.max_integrity * 0.5 - new /obj/item/stack/cable_coil(loc, 3) - qdel(src) - -/obj/machinery/firealarm/proc/update_fire_light(fire) - if(fire == !!light_power) - return // do nothing if we're already active - if(fire) - set_light(l_power = 0.8) - else - set_light(l_power = 0) - -/* - * Return of Party button - */ - -/area - var/party = FALSE - -/obj/machinery/firealarm/partyalarm - name = "\improper PARTY BUTTON" - desc = "" - var/static/party_overlay - -/obj/machinery/firealarm/partyalarm/reset() - if (stat & (NOPOWER|BROKEN)) - return - var/area/A = get_area(src) - if (!A || !A.party) - return - A.party = FALSE - A.cut_overlay(party_overlay) - -/obj/machinery/firealarm/partyalarm/alarm() - if (stat & (NOPOWER|BROKEN)) - return - var/area/A = get_area(src) - if (!A || A.party || A.name == "Space") - return - A.party = TRUE - if (!party_overlay) - party_overlay = iconstate2appearance('icons/turf/areas.dmi', "party") - A.add_overlay(party_overlay) diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm deleted file mode 100644 index 3378c57b7a..0000000000 --- a/code/game/machinery/flasher.dm +++ /dev/null @@ -1,205 +0,0 @@ -// It is a gizmo that flashes a small area - -/obj/machinery/flasher - name = "mounted flash" - desc = "" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "mflash1" - max_integrity = 250 - integrity_failure = 0.4 - light_color = LIGHT_COLOR_WHITE - light_power = FLASH_LIGHT_POWER - damage_deflection = 10 - var/obj/item/assembly/flash/handheld/bulb - var/id = null - var/range = 2 //this is roughly the size of brig cell - var/last_flash = 0 //Don't want it getting spammed like regular flashes - var/strength = 100 //How knocked down targets are when flashed. - var/base_state = "mflash" - -/obj/machinery/flasher/portable //Portable version of the flasher. Only flashes when anchored - name = "portable flasher" - desc = "" - icon_state = "pflash1-p" - strength = 80 - anchored = FALSE - base_state = "pflash" - density = TRUE - -/obj/machinery/flasher/Initialize(mapload, ndir = 0, built = 0) - . = ..() // ..() is EXTREMELY IMPORTANT, never forget to add it - if(built) - setDir(ndir) - pixel_x = (dir & 3)? 0 : (dir == 4 ? -28 : 28) - pixel_y = (dir & 3)? (dir ==1 ? -28 : 28) : 0 - else - bulb = new(src) - -/obj/machinery/flasher/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE) - id = "[idnum][id]" - -/obj/machinery/flasher/Destroy() - QDEL_NULL(bulb) - return ..() - -/obj/machinery/flasher/powered() - if(!anchored || !bulb) - return FALSE - return ..() - -/obj/machinery/flasher/update_icon_state() - if (powered()) - if(bulb.burnt_out) - icon_state = "[base_state]1-p" - else - icon_state = "[base_state]1" - else - icon_state = "[base_state]1-p" - -//Don't want to render prison breaks impossible -/obj/machinery/flasher/attackby(obj/item/W, mob/user, params) - add_fingerprint(user) - if (W.tool_behaviour == TOOL_WIRECUTTER) - if (bulb) - user.visible_message("[user] begins to disconnect [src]'s flashbulb.", "I begin to disconnect [src]'s flashbulb...") - if(W.use_tool(src, user, 30, volume=50) && bulb) - user.visible_message("[user] has disconnected [src]'s flashbulb!", "I disconnect [src]'s flashbulb.") - bulb.forceMove(loc) - bulb = null - power_change() - - else if (istype(W, /obj/item/assembly/flash/handheld)) - if (!bulb) - if(!user.transferItemToLoc(W, src)) - return - user.visible_message("[user] installs [W] into [src].", "I install [W] into [src].") - bulb = W - power_change() - else - to_chat(user, "A flashbulb is already installed in [src]!") - - else if (W.tool_behaviour == TOOL_WRENCH) - if(!bulb) - to_chat(user, "I start unsecuring the flasher frame...") - if(W.use_tool(src, user, 40, volume=50)) - to_chat(user, "I unsecure the flasher frame.") - deconstruct(TRUE) - else - to_chat(user, "Remove a flashbulb from [src] first!") - else - return ..() - -//Let the AI trigger them directly. -/obj/machinery/flasher/attack_ai() - if (anchored) - return flash() - -/obj/machinery/flasher/proc/flash() - if (!powered() || !bulb) - return - - if (bulb.burnt_out || (last_flash && world.time < src.last_flash + 150)) - return - - if(!bulb.flash_recharge(30)) //Bulb can burn out if it's used too often too fast - power_change() - return - - playsound(src.loc, 'sound/blank.ogg', 100, TRUE) - flick("[base_state]_flash", src) - flash_lighting_fx(FLASH_LIGHT_RANGE, light_power, light_color) - last_flash = world.time - use_power(1000) - - var/flashed = FALSE - for (var/mob/living/L in viewers(src, null)) - if (get_dist(src, L) > range) - continue - - if(L.flash_act(affect_silicon = 1)) - L.Paralyze(strength) - flashed = TRUE - - if(flashed) - bulb.times_used++ - - return 1 - - -/obj/machinery/flasher/emp_act(severity) - . = ..() - if(!(stat & (BROKEN|NOPOWER)) && !(. & EMP_PROTECT_SELF)) - if(bulb && prob(75/severity)) - flash() - bulb.burn_out() - power_change() - -/obj/machinery/flasher/obj_break(damage_flag) - . = ..() - if(. && bulb) - bulb.burn_out() - power_change() - -/obj/machinery/flasher/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - if(bulb) - bulb.forceMove(loc) - bulb = null - if(disassembled) - var/obj/item/wallframe/flasher/F = new(get_turf(src)) - transfer_fingerprints_to(F) - F.id = id - playsound(loc, 'sound/blank.ogg', 50, TRUE) - else - new /obj/item/stack/sheet/metal (loc, 2) - qdel(src) - -/obj/machinery/flasher/portable/Initialize() - . = ..() - proximity_monitor = new(src, 0) - -/obj/machinery/flasher/portable/HasProximity(atom/movable/AM) - if (last_flash && world.time < last_flash + 150) - return - - if(istype(AM, /mob/living/carbon)) - var/mob/living/carbon/M = AM - if (M.m_intent != MOVE_INTENT_WALK && anchored) - flash() - -/obj/machinery/flasher/portable/attackby(obj/item/W, mob/user, params) - if (W.tool_behaviour == TOOL_WRENCH) - W.play_tool_sound(src, 100) - - if (!anchored && !isinspace()) - to_chat(user, "[src] is now secured.") - add_overlay("[base_state]-s") - setAnchored(TRUE) - power_change() - proximity_monitor.SetRange(range) - else - to_chat(user, "[src] can now be moved.") - cut_overlays() - setAnchored(FALSE) - power_change() - proximity_monitor.SetRange(0) - - else - return ..() - -/obj/item/wallframe/flasher - name = "mounted flash frame" - desc = "" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "mflash_frame" - result_path = /obj/machinery/flasher - var/id = null - -/obj/item/wallframe/flasher/examine(mob/user) - . = ..() - . += "Its channel ID is '[id]'." - -/obj/item/wallframe/flasher/after_attach(obj/O) - ..() - var/obj/machinery/flasher/F = O - F.id = id diff --git a/code/game/machinery/gulag_item_reclaimer.dm b/code/game/machinery/gulag_item_reclaimer.dm deleted file mode 100644 index 670062c589..0000000000 --- a/code/game/machinery/gulag_item_reclaimer.dm +++ /dev/null @@ -1,86 +0,0 @@ -/obj/machinery/gulag_item_reclaimer - name = "equipment reclaimer station" - desc = "" - icon = 'icons/obj/terminals.dmi' - icon_state = "dorm_taken" - req_access = list(ACCESS_SECURITY) //REQACCESS TO ACCESS ALL STORED ITEMS - density = FALSE - use_power = IDLE_POWER_USE - idle_power_usage = 100 - active_power_usage = 2500 - ui_x = 455 - ui_y = 440 - var/list/stored_items = list() - var/obj/machinery/gulag_teleporter/linked_teleporter = null - -/obj/machinery/gulag_item_reclaimer/Destroy() - for(var/i in contents) - var/obj/item/I = i - I.forceMove(get_turf(src)) - if(linked_teleporter) - linked_teleporter.linked_reclaimer = null - return ..() - -/obj/machinery/gulag_item_reclaimer/emag_act(mob/user) - if(obj_flags & EMAGGED) // emagging lets anyone reclaim all the items - return - req_access = list() - obj_flags |= EMAGGED - -/obj/machinery/gulag_item_reclaimer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "gulag_item_reclaimer", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/gulag_item_reclaimer/ui_data(mob/user) - var/list/data = list() - var/can_reclaim = FALSE - - if(allowed(user)) - can_reclaim = TRUE - - var/obj/item/card/id/I = user.get_idcard(TRUE) - if(istype(I, /obj/item/card/id/prisoner)) - var/obj/item/card/id/prisoner/P = I - if(P.points >= P.goal) - can_reclaim = TRUE - - var/list/mobs = list() - for(var/i in stored_items) - var/mob/thismob = i - if(QDELETED(thismob)) - say("Alert! Unable to locate vital signals of a previously processed prisoner. Ejecting equipment!") - drop_items(thismob) - continue - var/list/mob_info = list() - mob_info["name"] = thismob.real_name - mob_info["mob"] = "[REF(thismob)]" - mobs += list(mob_info) - - data["mobs"] = mobs - - - data["can_reclaim"] = can_reclaim - - return data - -/obj/machinery/gulag_item_reclaimer/ui_act(action, list/params) - if(action != "release_items") //Since we only have one button, this is fine. - return - var/mob/living/carbon/human/H = locate(params["mobref"]) in stored_items - if(H != usr && !allowed(usr)) - to_chat(usr, "Access denied.") - return - drop_items(H) - -/obj/machinery/gulag_item_reclaimer/proc/drop_items(mob/user) - if(!stored_items[user]) - return - var/drop_location = drop_location() - for(var/i in stored_items[user]) - var/obj/item/W = i - stored_items[user] -= W - W.forceMove(drop_location) - stored_items -= user diff --git a/code/game/machinery/gulag_teleporter.dm b/code/game/machinery/gulag_teleporter.dm deleted file mode 100644 index e74efceb3e..0000000000 --- a/code/game/machinery/gulag_teleporter.dm +++ /dev/null @@ -1,177 +0,0 @@ -/* -The gulag teleporter teleports a prisoner to the gulag outpost. -It automatically strips the prisoner and equips a prisoner ID, prisoner jumpsuit and oranges sneakers. -You can set the amount of points in the console -The console is located at computer/gulag_teleporter.dm -*/ - -//Gulag teleporter -/obj/machinery/gulag_teleporter - name = "labor camp teleporter" - desc = "" - icon = 'icons/obj/machines/implantchair.dmi' - icon_state = "implantchair" - state_open = FALSE - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 200 - active_power_usage = 5000 - circuit = /obj/item/circuitboard/machine/gulag_teleporter - var/locked = FALSE - var/message_cooldown - var/breakout_time = 600 - var/jumpsuit_type = /obj/item/clothing/under/rank/prisoner - var/shoes_type = /obj/item/clothing/shoes/sneakers/orange - var/obj/machinery/gulag_item_reclaimer/linked_reclaimer - var/static/list/telegulag_required_items = typecacheof(list( - /obj/item/implant, - /obj/item/clothing/suit/space/eva/plasmaman, - /obj/item/clothing/under/plasmaman, - /obj/item/clothing/head/helmet/space/plasmaman, - /obj/item/tank/internals, - /obj/item/clothing/mask/breath, - /obj/item/clothing/mask/gas)) - -/obj/machinery/gulag_teleporter/Initialize() - . = ..() - locate_reclaimer() - -/obj/machinery/gulag_teleporter/Destroy() - if(linked_reclaimer) - linked_reclaimer.linked_teleporter = null - return ..() - -/obj/machinery/gulag_teleporter/interact(mob/user) - . = ..() - if(locked) - to_chat(user, "[src] is locked!") - return - toggle_open() - -/obj/machinery/gulag_teleporter/updateUsrDialog() - return - -/obj/machinery/gulag_teleporter/attackby(obj/item/I, mob/user) - if(!occupant && default_deconstruction_screwdriver(user, "[icon_state]", "[icon_state]",I)) - update_icon() - return - - if(default_deconstruction_crowbar(I)) - return - - if(default_pry_open(I)) - return - - return ..() - -/obj/machinery/gulag_teleporter/update_icon_state() - icon_state = initial(icon_state) + (state_open ? "_open" : "") - //no power or maintenance - if(stat & (NOPOWER|BROKEN)) - icon_state += "_unpowered" - if((stat & MAINT) || panel_open) - icon_state += "_maintenance" - return - - if((stat & MAINT) || panel_open) - icon_state += "_maintenance" - return - - //running and someone in there - if(occupant) - icon_state += "_occupied" - return - - -/obj/machinery/gulag_teleporter/relaymove(mob/user) - if(user.stat != CONSCIOUS) - return - if(locked) - if(message_cooldown <= world.time) - message_cooldown = world.time + 50 - to_chat(user, "[src]'s door won't budge!") - return - open_machine() - -/obj/machinery/gulag_teleporter/container_resist(mob/living/user) - if(!locked) - open_machine() - return - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT - user.visible_message("I see [user] kicking against the door of [src]!", \ - "I lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)", \ - "I hear a metallic creaking from [src].") - if(do_after(user,(breakout_time), target = src)) - if(!user || user.stat != CONSCIOUS || user.loc != src || state_open || !locked) - return - locked = FALSE - user.visible_message("[user] successfully broke out of [src]!", \ - "I successfully break out of [src]!") - open_machine() - -/obj/machinery/gulag_teleporter/proc/locate_reclaimer() - linked_reclaimer = locate(/obj/machinery/gulag_item_reclaimer) - if(linked_reclaimer) - linked_reclaimer.linked_teleporter = src - -/obj/machinery/gulag_teleporter/proc/toggle_open() - if(panel_open) - to_chat(usr, "Close the maintenance panel first.") - return - - if(state_open) - close_machine() - return - if(!locked) - open_machine() - -// strips and stores all occupant's items -/obj/machinery/gulag_teleporter/proc/strip_occupant() - if(linked_reclaimer) - linked_reclaimer.stored_items[occupant] = list() - var/mob/living/mob_occupant = occupant - for(var/obj/item/W in mob_occupant) - if(!is_type_in_typecache(W, telegulag_required_items)) - if(mob_occupant.temporarilyRemoveItemFromInventory(W)) - if(istype(W, /obj/item/restraints/handcuffs)) - W.forceMove(get_turf(src)) - continue - if(linked_reclaimer) - linked_reclaimer.stored_items[mob_occupant] += W - linked_reclaimer.contents += W - W.forceMove(linked_reclaimer) - else - W.forceMove(src) - -/obj/machinery/gulag_teleporter/proc/handle_prisoner(obj/item/id, datum/data/record/R) - if(!ishuman(occupant)) - return - strip_occupant() - var/mob/living/carbon/human/prisoner = occupant - if(!isplasmaman(prisoner) && jumpsuit_type) - prisoner.equip_to_appropriate_slot(new jumpsuit_type) - if(shoes_type) - prisoner.equip_to_appropriate_slot(new shoes_type) - if(id) - prisoner.equip_to_appropriate_slot(id) - if(R) - R.fields["criminal"] = "Incarcerated" - -/obj/item/circuitboard/machine/gulag_teleporter - name = "labor camp teleporter (Machine Board)" - build_path = /obj/machinery/gulag_teleporter - req_components = list( - /obj/item/stack/ore/bluespace_crystal = 2, - /obj/item/stock_parts/scanning_module, - /obj/item/stock_parts/manipulator) - def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial) - -/* beacon that receives the teleported prisoner */ -/obj/structure/gulag_beacon - name = "labor camp bluespace beacon" - desc = "" - icon = 'icons/turf/floors.dmi' - icon_state = "light_on-w" - resistance_flags = INDESTRUCTIBLE - anchored = TRUE diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm deleted file mode 100644 index 52a71304de..0000000000 --- a/code/game/machinery/harvester.dm +++ /dev/null @@ -1,192 +0,0 @@ -/obj/machinery/harvester - name = "organ harvester" - desc = "" - density = TRUE - icon = 'icons/obj/machines/harvester.dmi' - icon_state = "harvester" - verb_say = "states" - state_open = FALSE - idle_power_usage = 50 - circuit = /obj/item/circuitboard/machine/harvester - light_color = LIGHT_COLOR_BLUE - var/interval = 20 - var/harvesting = FALSE - var/list/operation_order = list() //Order of wich we harvest limbs. - var/allow_clothing = FALSE - var/allow_living = FALSE - -/obj/machinery/harvester/Initialize() - . = ..() - if(prob(1)) - name = "auto-autopsy" - -/obj/machinery/harvester/RefreshParts() - interval = 0 - var/max_time = 40 - for(var/obj/item/stock_parts/micro_laser/L in component_parts) - max_time -= L.rating - interval = max(max_time,1) - -/obj/machinery/harvester/update_icon(warming_up) - if(warming_up) - icon_state = initial(icon_state)+"-charging" - return - if(state_open) - icon_state = initial(icon_state)+"-open" - else if(harvesting) - icon_state = initial(icon_state)+"-active" - else - icon_state = initial(icon_state) - -/obj/machinery/harvester/open_machine(drop = TRUE) - if(panel_open) - return - . = ..() - harvesting = FALSE - -/obj/machinery/harvester/attack_hand(mob/user) - if(state_open) - close_machine() - else if(!harvesting) - open_machine() - -/obj/machinery/harvester/AltClick(mob/user) - if(harvesting || !user || !isliving(user) || state_open) - return - if(can_harvest()) - start_harvest() - -/obj/machinery/harvester/proc/can_harvest() - if(!powered(EQUIP) || state_open || !occupant || !iscarbon(occupant)) - return - var/mob/living/carbon/C = occupant - if(!allow_clothing) - for(var/A in C.held_items + C.get_equipped_items()) - if(!isitem(A)) - continue - var/obj/item/I = A - if(!(HAS_TRAIT(I, TRAIT_NODROP))) - say("Subject may not have abiotic items on.") - playsound(src, 'sound/blank.ogg', 30, TRUE) - return - if(!(C.mob_biotypes & MOB_ORGANIC)) - say("Subject is not organic.") - playsound(src, 'sound/blank.ogg', 30, TRUE) - return - if(!allow_living && !(C.stat == DEAD || HAS_TRAIT(C, TRAIT_FAKEDEATH))) //I mean, the machines scanners arent advanced enough to tell you're alive - say("Subject is still alive.") - playsound(src, 'sound/blank.ogg', 30, TRUE) - return - return TRUE - -/obj/machinery/harvester/proc/start_harvest() - if(!occupant || !iscarbon(occupant)) - return - var/mob/living/carbon/C = occupant - operation_order = reverseList(C.bodyparts) //Chest and head are first in bodyparts, so we invert it to make them suffer more - harvesting = TRUE - visible_message("The [name] begins warming up!") - say("Initializing harvest protocol.") - update_icon(TRUE) - addtimer(CALLBACK(src, PROC_REF(harvest)), interval) - -/obj/machinery/harvester/proc/harvest() - update_icon() - if(!harvesting || state_open || !powered(EQUIP) || !occupant || !iscarbon(occupant)) - return - playsound(src, 'sound/blank.ogg', 20, TRUE) - var/mob/living/carbon/C = occupant - if(!LAZYLEN(operation_order)) //The list is empty, so we're done here - end_harvesting() - return - var/turf/target - for(var/adir in list(EAST,NORTH,SOUTH,WEST)) - var/turf/T = get_step(src,adir) - if(!T) - continue - if(istype(T, /turf/closed)) - continue - target = T - break - if(!target) - target = get_turf(src) - for(var/obj/item/bodypart/BP in operation_order) //first we do non-essential limbs - BP.drop_limb() - C.emote("scream") - if(BP.body_zone != "chest") - BP.forceMove(target) //Move the limbs right next to it, except chest, that's a weird one - BP.drop_organs() - else - for(var/obj/item/organ/O in BP.dismember()) - O.forceMove(target) //Some organs, like chest ones, are different so we need to manually move them - operation_order.Remove(BP) - break - use_power(5000) - addtimer(CALLBACK(src, PROC_REF(harvest)), interval) - -/obj/machinery/harvester/proc/end_harvesting() - harvesting = FALSE - open_machine() - say("Subject has been successfully harvested.") - playsound(src, 'sound/blank.ogg', 100, FALSE) - -/obj/machinery/harvester/screwdriver_act(mob/living/user, obj/item/I) - . = TRUE - if(..()) - return - if(occupant) - to_chat(user, "[src] is currently occupied!") - return - if(state_open) - to_chat(user, "[src] must be closed to [panel_open ? "close" : "open"] its maintenance hatch!") - return - if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), I)) - return - return FALSE - -/obj/machinery/harvester/crowbar_act(mob/living/user, obj/item/I) - if(default_pry_open(I)) - return TRUE - if(default_deconstruction_crowbar(I)) - return TRUE - -/obj/machinery/harvester/default_pry_open(obj/item/I) //wew - . = !(state_open || panel_open || (flags_1 & NODECONSTRUCT_1)) && I.tool_behaviour == TOOL_CROWBAR //We removed is_operational() here - if(.) - I.play_tool_sound(src, 50) - visible_message("[usr] pries open \the [src].", "I pry open [src].") - open_machine() - -/obj/machinery/harvester/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - obj_flags |= EMAGGED - allow_living = TRUE - to_chat(user, "I overload [src]'s lifesign scanners.") - -/obj/machinery/harvester/container_resist(mob/living/user) - if(!harvesting) - visible_message("[occupant] emerges from [src]!", - "I climb out of [src]!") - open_machine() - else - to_chat(user,"[src] is active and can't be opened!") //rip - -/obj/machinery/harvester/Exited(atom/movable/user) - if (!state_open && user == occupant) - container_resist(user) - -/obj/machinery/harvester/relaymove(mob/user) - if (!state_open) - container_resist(user) - -/obj/machinery/harvester/examine(mob/user) - . = ..() - if(stat & BROKEN) - return - if(state_open) - . += "[src] must be closed before harvesting." - else if(!harvesting) - . += "Alt-click [src] to start harvesting." - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Harvest speed at [interval*0.1] seconds per organ." diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm deleted file mode 100644 index fb5b0f9978..0000000000 --- a/code/game/machinery/hologram.dm +++ /dev/null @@ -1,700 +0,0 @@ -/* Holograms! - * Contains: - * Holopad - * Hologram - * Other stuff - */ - -/* -Revised. Original based on space ninja hologram code. Which is also mine. /N -How it works: -AI clicks on holopad in camera view. View centers on holopad. -AI clicks again on the holopad to display a hologram. Hologram stays as long as AI is looking at the pad and it (the hologram) is in range of the pad. -AI can use the directional keys to move the hologram around, provided the above conditions are met and the AI in question is the holopad's master. -Any number of AIs can use a holopad. /Lo6 -AI may cancel the hologram at any time by clicking on the holopad once more. - -Possible to do for anyone motivated enough: - Give an AI variable for different hologram icons. - Itegrate EMP effect to disable the unit. -*/ - - -/* - * Holopad - */ - -#define HOLOPAD_PASSIVE_POWER_USAGE 1 -#define HOLOGRAM_POWER_USAGE 2 - -/obj/machinery/holopad - name = "holopad" - desc = "" - icon_state = "holopad0" - layer = LOW_OBJ_LAYER - plane = FLOOR_PLANE - flags_1 = HEAR_1 - use_power = IDLE_POWER_USE - idle_power_usage = 5 - active_power_usage = 100 - max_integrity = 300 - armor = list("melee" = 50, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0) - circuit = /obj/item/circuitboard/machine/holopad - var/list/masters //List of living mobs that use the holopad - var/list/holorays //Holoray-mob link. - var/last_request = 0 //to prevent request spam. ~Carn - var/holo_range = 5 // Change to change how far the AI can move away from the holopad before deactivating. - var/temp = "" - var/list/holo_calls //array of /datum/holocalls - var/datum/holocall/outgoing_call //do not modify the datums only check and call the public procs - var/obj/item/disk/holodisk/disk //Record disk - var/replay_mode = FALSE //currently replaying a recording - var/loop_mode = FALSE //currently looping a recording - var/record_mode = FALSE //currently recording - var/record_start = 0 //recording start time - var/record_user //user that inititiated the recording - var/obj/effect/overlay/holo_pad_hologram/replay_holo //replay hologram - var/static/force_answer_call = FALSE //Calls will be automatically answered after a couple rings, here for debugging - var/static/list/holopads = list() - var/obj/effect/overlay/holoray/ray - var/ringing = FALSE - var/offset = FALSE - var/on_network = TRUE - -/obj/machinery/holopad/tutorial - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - flags_1 = NODECONSTRUCT_1 - on_network = FALSE - var/proximity_range = 1 - -/obj/machinery/holopad/tutorial/Initialize(mapload) - . = ..() - if(proximity_range) - proximity_monitor = new(src, proximity_range) - if(mapload) - var/obj/item/disk/holodisk/new_disk = locate(/obj/item/disk/holodisk) in src.loc - if(new_disk && !disk) - new_disk.forceMove(src) - disk = new_disk - -/obj/machinery/holopad/tutorial/attack_hand(mob/user) - if(!istype(user)) - return - if(user.incapacitated() || !is_operational()) - return - if(replay_mode) - replay_stop() - else if(disk && disk.record) - replay_start() - -/obj/machinery/holopad/tutorial/HasProximity(atom/movable/AM) - if (!isliving(AM)) - return - if(!replay_mode && (disk && disk.record)) - replay_start() - -/obj/machinery/holopad/Initialize() - . = ..() - if(on_network) - holopads += src - -/obj/machinery/holopad/Destroy() - if(outgoing_call) - outgoing_call.ConnectionFailure(src) - - for(var/I in holo_calls) - var/datum/holocall/HC = I - HC.ConnectionFailure(src) - - for (var/I in masters) - clear_holo(I) - - if(replay_mode) - replay_stop() - if(record_mode) - record_stop() - - QDEL_NULL(disk) - - holopads -= src - return ..() - -/obj/machinery/holopad/power_change() - . = ..() - if (!powered()) - if(replay_mode) - replay_stop() - if(record_mode) - record_stop() - if(outgoing_call) - outgoing_call.ConnectionFailure(src) - -/obj/machinery/holopad/obj_break() - . = ..() - if(outgoing_call) - outgoing_call.ConnectionFailure(src) - -/obj/machinery/holopad/RefreshParts() - var/holograph_range = 4 - for(var/obj/item/stock_parts/capacitor/B in component_parts) - holograph_range += 1 * B.rating - holo_range = holograph_range - -/obj/machinery/holopad/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Current projection range: [holo_range] units." - -/obj/machinery/holopad/attackby(obj/item/P, mob/user, params) - if(default_deconstruction_screwdriver(user, "holopad_open", "holopad0", P)) - return - - if(default_pry_open(P)) - return - - if(default_unfasten_wrench(user, P)) - return - - if(default_deconstruction_crowbar(P)) - return - - if(istype(P,/obj/item/disk/holodisk)) - if(disk) - to_chat(user,"There's already a disk inside [src]!") - return - if (!user.transferItemToLoc(P,src)) - return - to_chat(user,"I insert [P] into [src].") - disk = P - updateDialog() - return - - return ..() - - -/obj/machinery/holopad/ui_interact(mob/living/carbon/human/user) //Carn: Hologram requests. - . = ..() - if(!istype(user)) - return - - if(outgoing_call || user.incapacitated() || !is_operational()) - return - - user.set_machine(src) - var/dat - if(temp) - dat = temp - else - if(on_network) - dat += "Request an AI's presence
" - dat += "Call another holopad
" - if(disk) - if(disk.record) - //Replay - dat += "Replay disk recording
" - dat += "Loop disk recording
" - //Clear - dat += "Clear disk recording
" - else - //Record - dat += "Start new recording
" - //Eject - dat += "Eject disk
" - - if(LAZYLEN(holo_calls)) - dat += "=====================================================
" - - if(on_network) - var/one_answered_call = FALSE - var/one_unanswered_call = FALSE - for(var/I in holo_calls) - var/datum/holocall/HC = I - if(HC.connected_holopad != src) - dat += "Answer call from [get_area(HC.calling_holopad)]
" - one_unanswered_call = TRUE - else - one_answered_call = TRUE - - if(one_answered_call && one_unanswered_call) - dat += "=====================================================
" - //we loop twice for formatting - for(var/I in holo_calls) - var/datum/holocall/HC = I - if(HC.connected_holopad == src) - dat += "Disconnect call from [HC.user]
" - - - var/datum/browser/popup = new(user, "holopad", name, 300, 175) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - -//Stop ringing the AI!! -/obj/machinery/holopad/proc/hangup_all_calls() - for(var/I in holo_calls) - var/datum/holocall/HC = I - HC.Disconnect(src) - -/obj/machinery/holopad/Topic(href, href_list) - if(..() || isAI(usr)) - return - add_fingerprint(usr) - if(!is_operational()) - return - if (href_list["AIrequest"]) - if(last_request + 200 < world.time) - last_request = world.time - temp = "You requested an AI's presence.
" - temp += "Main Menu" - var/area/area = get_area(src) - for(var/mob/living/silicon/ai/AI in GLOB.silicon_mobs) - if(!AI.client) - continue - to_chat(AI, "My presence is requested at \the [area].") - else - temp = "A request for AI presence was already sent recently.
" - temp += "Main Menu" - - else if(href_list["Holocall"]) - if(outgoing_call) - return - - temp = "You must stand on the holopad to make a call!
" - temp += "Main Menu" - if(usr.loc == loc) - var/list/callnames = list() - for(var/I in holopads) - var/area/A = get_area(I) - if(A) - LAZYADD(callnames[A], I) - callnames -= get_area(src) - - var/result = input(usr, "Choose an area to call", "Holocall") as null|anything in sortNames(callnames) - if(QDELETED(usr) || !result || outgoing_call) - return - - if(usr.loc == loc) - temp = "Dialing...
" - temp += "Main Menu" - new /datum/holocall(usr, src, callnames[result]) - - else if(href_list["connectcall"]) - var/datum/holocall/call_to_connect = locate(href_list["connectcall"]) in holo_calls - if(!QDELETED(call_to_connect)) - call_to_connect.Answer(src) - temp = "" - - else if(href_list["disconnectcall"]) - var/datum/holocall/call_to_disconnect = locate(href_list["disconnectcall"]) in holo_calls - if(!QDELETED(call_to_disconnect)) - call_to_disconnect.Disconnect(src) - temp = "" - - else if(href_list["mainmenu"]) - temp = "" - if(outgoing_call) - outgoing_call.Disconnect() - - else if(href_list["disk_eject"]) - if(disk && !replay_mode) - disk.forceMove(drop_location()) - disk = null - - else if(href_list["replay_stop"]) - replay_stop() - else if(href_list["replay_start"]) - replay_start() - else if(href_list["loop_start"]) - loop_mode = TRUE - replay_start() - else if(href_list["record_start"]) - record_start(usr) - else if(href_list["record_stop"]) - record_stop() - else if(href_list["record_clear"]) - record_clear() - else if(href_list["offset"]) - offset++ - if (offset > 4) - offset = FALSE - var/turf/new_turf - if (!offset) - new_turf = get_turf(src) - else - new_turf = get_step(src, GLOB.cardinals[offset]) - replay_holo.forceMove(new_turf) - updateDialog() - -//do not allow AIs to answer calls or people will use it to meta the AI sattelite -/obj/machinery/holopad/attack_ai(mob/living/silicon/ai/user) - if (!istype(user)) - return - if (!on_network) - return - /*There are pretty much only three ways to interact here. - I don't need to check for client since they're clicking on an object. - This may change in the future but for now will suffice.*/ - if(user.eyeobj.loc != src.loc)//Set client eye on the object if it's not already. - user.eyeobj.setLoc(get_turf(src)) - else if(!LAZYLEN(masters) || !masters[user])//If there is no hologram, possibly make one. - activate_holo(user) - else//If there is a hologram, remove it. - clear_holo(user) - -/obj/machinery/holopad/process() - if(LAZYLEN(masters)) - for(var/I in masters) - var/mob/living/master = I - var/mob/living/silicon/ai/AI = master - if(!istype(AI)) - AI = null - - if(!is_operational() || !validate_user(master)) - clear_holo(master) - - if(outgoing_call) - outgoing_call.Check() - - ringing = FALSE - - for(var/I in holo_calls) - var/datum/holocall/HC = I - if(HC.connected_holopad != src) - if(force_answer_call && world.time > (HC.call_start_time + (HOLOPAD_MAX_DIAL_TIME / 2))) - HC.Answer(src) - break - if(outgoing_call) - HC.Disconnect(src)//can't answer calls while calling - else - playsound(src, 'sound/blank.ogg', 100) //bring, bring! - ringing = TRUE - - update_icon() - -/obj/machinery/holopad/proc/activate_holo(mob/living/user) - var/mob/living/silicon/ai/AI = user - if(!istype(AI)) - AI = null - - if(is_operational() && (!AI || AI.eyeobj.loc == loc))//If the projector has power and client eye is on it - if (AI && istype(AI.current, /obj/machinery/holopad)) - to_chat(user, "ERROR: \black Image feed in progress.") - return - - var/obj/effect/overlay/holo_pad_hologram/Hologram = new(loc)//Spawn a blank effect at the location. - if(AI) - Hologram.icon = AI.holo_icon - else //make it like real life - Hologram.icon = user.icon - Hologram.icon_state = user.icon_state - Hologram.copy_overlays(user, TRUE) - //codersprite some holo effects here - Hologram.alpha = 100 - Hologram.add_atom_colour("#77abff", FIXED_COLOUR_PRIORITY) - Hologram.Impersonation = user - - Hologram.copy_known_languages_from(user,replace = TRUE) - Hologram.mouse_opacity = MOUSE_OPACITY_TRANSPARENT//So you can't click on it. - Hologram.layer = FLY_LAYER//Above all the other objects/mobs. Or the vast majority of them. - Hologram.setAnchored(TRUE)//So space wind cannot drag it. - Hologram.name = "[user.name] (Hologram)"//If someone decides to right click. - Hologram.set_light(2) //hologram lighting - move_hologram() - - set_holo(user, Hologram) - visible_message("A holographic image of [user] flickers to life before my eyes!") - - return Hologram - else - to_chat(user, "ERROR: Unable to project hologram.") - -/*This is the proc for special two-way communication between AI and holopad/people talking near holopad. -For the other part of the code, check silicon say.dm. Particularly robot talk.*/ -/obj/machinery/holopad/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) - . = ..() - if(speaker && LAZYLEN(masters) && !radio_freq)//Master is mostly a safety in case lag hits or something. Radio_freq so AIs dont hear holopad stuff through radios. - for(var/mob/living/silicon/ai/master in masters) - if(masters[master] && speaker != master) - master.relay_speech(message, speaker, message_language, raw_message, radio_freq, spans, message_mode) - - for(var/I in holo_calls) - var/datum/holocall/HC = I - if(HC.connected_holopad == src && speaker != HC.hologram) - HC.user.Hear(message, speaker, message_language, raw_message, radio_freq, spans, message_mode) - - if(outgoing_call && speaker == outgoing_call.user) - outgoing_call.hologram.say(raw_message) - - if(record_mode && speaker == record_user) - record_message(speaker,raw_message,message_language) - -/obj/machinery/holopad/proc/SetLightsAndPower() - var/total_users = LAZYLEN(masters) + LAZYLEN(holo_calls) - use_power = total_users > 0 ? ACTIVE_POWER_USE : IDLE_POWER_USE - active_power_usage = HOLOPAD_PASSIVE_POWER_USAGE + (HOLOGRAM_POWER_USAGE * total_users) - if(total_users || replay_mode) - set_light(2) - else - set_light(0) - update_icon() - -/obj/machinery/holopad/update_icon_state() - var/total_users = LAZYLEN(masters) + LAZYLEN(holo_calls) - if(ringing) - icon_state = "holopad_ringing" - else if(total_users || replay_mode) - icon_state = "holopad1" - else - icon_state = "holopad0" - -/obj/machinery/holopad/proc/set_holo(mob/living/user, obj/effect/overlay/holo_pad_hologram/h) - LAZYSET(masters, user, h) - LAZYSET(holorays, user, new /obj/effect/overlay/holoray(loc)) - var/mob/living/silicon/ai/AI = user - if(istype(AI)) - AI.current = src - SetLightsAndPower() - update_holoray(user, get_turf(loc)) - return TRUE - -/obj/machinery/holopad/proc/clear_holo(mob/living/user) - qdel(masters[user]) // Get rid of user's hologram - unset_holo(user) - return TRUE - -/obj/machinery/holopad/proc/unset_holo(mob/living/user) - var/mob/living/silicon/ai/AI = user - if(istype(AI) && AI.current == src) - AI.current = null - LAZYREMOVE(masters, user) // Discard AI from the list of those who use holopad - qdel(holorays[user]) - LAZYREMOVE(holorays, user) - SetLightsAndPower() - return TRUE - -//Try to transfer hologram to another pad that can project on T -/obj/machinery/holopad/proc/transfer_to_nearby_pad(turf/T,mob/holo_owner) - var/obj/effect/overlay/holo_pad_hologram/h = masters[holo_owner] - if(!h || h.HC) //Holocalls can't change source. - return FALSE - for(var/pad in holopads) - var/obj/machinery/holopad/another = pad - if(another == src) - continue - if(another.validate_location(T)) - unset_holo(holo_owner) - if(another.masters && another.masters[holo_owner]) - another.clear_holo(holo_owner) - another.set_holo(holo_owner, h) - return TRUE - return FALSE - -/obj/machinery/holopad/proc/validate_user(mob/living/user) - if(QDELETED(user) || user.incapacitated() || !user.client) - return FALSE - return TRUE - -//Can we display holos there -//Area check instead of line of sight check because this is a called a lot if AI wants to move around. -/obj/machinery/holopad/proc/validate_location(turf/T,check_los = FALSE) - if(T.z == z && get_dist(T, src) <= holo_range && T.loc == get_area(src)) - return TRUE - else - return FALSE - -/obj/machinery/holopad/proc/move_hologram(mob/living/user, turf/new_turf) - if(LAZYLEN(masters) && masters[user]) - var/obj/effect/overlay/holo_pad_hologram/holo = masters[user] - var/transfered = FALSE - if(!validate_location(new_turf)) - if(!transfer_to_nearby_pad(new_turf,user)) - clear_holo(user) - return FALSE - else - transfered = TRUE - //All is good. - holo.forceMove(new_turf) - if(!transfered) - update_holoray(user,new_turf) - return TRUE - - -/obj/machinery/holopad/proc/update_holoray(mob/living/user, turf/new_turf) - var/obj/effect/overlay/holo_pad_hologram/holo = masters[user] - var/obj/effect/overlay/holoray/ray = holorays[user] - var/disty = holo.y - ray.y - var/distx = holo.x - ray.x - var/newangle - if(!disty) - if(distx >= 0) - newangle = 90 - else - newangle = 270 - else - newangle = arctan(distx/disty) - if(disty < 0) - newangle += 180 - else if(distx < 0) - newangle += 360 - var/matrix/M = matrix() - if (get_dist(get_turf(holo),new_turf) <= 1) - animate(ray, transform = turn(M.Scale(1,sqrt(distx*distx+disty*disty)),newangle),time = 1) - else - ray.transform = turn(M.Scale(1,sqrt(distx*distx+disty*disty)),newangle) - -// RECORDED MESSAGES - -/obj/machinery/holopad/proc/setup_replay_holo(datum/holorecord/record) - var/obj/effect/overlay/holo_pad_hologram/Hologram = new(loc)//Spawn a blank effect at the location. - Hologram.add_overlay(record.caller_image) - Hologram.alpha = 170 - Hologram.add_atom_colour("#77abff", FIXED_COLOUR_PRIORITY) - Hologram.dir = SOUTH //for now - Hologram.grant_all_languages(omnitongue=TRUE) - var/datum/language_holder/holder = Hologram.get_language_holder() - holder.selected_default_language = record.language - Hologram.mouse_opacity = MOUSE_OPACITY_TRANSPARENT//So you can't click on it. - Hologram.layer = FLY_LAYER//Above all the other objects/mobs. Or the vast majority of them. - Hologram.setAnchored(TRUE)//So space wind cannot drag it. - Hologram.name = "[record.caller_name] (Hologram)"//If someone decides to right click. - Hologram.set_light(2) //hologram lighting - visible_message("A holographic image of [record.caller_name] flickers to life before my eyes!") - return Hologram - -/obj/machinery/holopad/proc/replay_start() - if(!replay_mode) - replay_mode = TRUE - replay_holo = setup_replay_holo(disk.record) - temp = "Replaying...
" - temp += "Change offset
" - temp += "End replay" - SetLightsAndPower() - replay_entry(1) - return - -/obj/machinery/holopad/proc/replay_stop() - if(replay_mode) - replay_mode = FALSE - loop_mode = FALSE - offset = FALSE - temp = null - QDEL_NULL(replay_holo) - SetLightsAndPower() - updateDialog() - -/obj/machinery/holopad/proc/record_start(mob/living/user) - if(!user || !disk || disk.record) - return - disk.record = new - record_mode = TRUE - record_start = world.time - record_user = user - disk.record.set_caller_image(user) - temp = "Recording...
" - temp += "End recording." - -/obj/machinery/holopad/proc/record_message(mob/living/speaker,message,language) - if(!record_mode) - return - //make this command so you can have multiple languages in single record - if((!disk.record.caller_name || disk.record.caller_name == "Unknown") && istype(speaker)) - disk.record.caller_name = speaker.name - if(!disk.record.language) - disk.record.language = language - else if(language != disk.record.language) - disk.record.entries += list(list(HOLORECORD_LANGUAGE,language)) - - var/current_delay = 0 - for(var/E in disk.record.entries) - var/list/entry = E - if(entry[1] != HOLORECORD_DELAY) - continue - current_delay += entry[2] - - var/time_delta = world.time - record_start - current_delay - - if(time_delta >= 1) - disk.record.entries += list(list(HOLORECORD_DELAY,time_delta)) - disk.record.entries += list(list(HOLORECORD_SAY,message)) - if(disk.record.entries.len >= HOLORECORD_MAX_LENGTH) - record_stop() - -/obj/machinery/holopad/proc/replay_entry(entry_number) - if(!replay_mode) - return - if (!disk.record.entries.len) // check for zero entries such as photographs and no text recordings - return // and pretty much just display them statically untill manually stopped - if(disk.record.entries.len < entry_number) - if(loop_mode) - entry_number = 1 - else - replay_stop() - return - var/list/entry = disk.record.entries[entry_number] - var/command = entry[1] - switch(command) - if(HOLORECORD_SAY) - var/message = entry[2] - if(replay_holo) - replay_holo.say(message) - if(HOLORECORD_SOUND) - playsound(src,entry[2],50,TRUE) - if(HOLORECORD_DELAY) - addtimer(CALLBACK(src,PROC_REF(replay_entry),entry_number+1),entry[2]) - return - if(HOLORECORD_LANGUAGE) - var/datum/language_holder/holder = replay_holo.get_language_holder() - holder.selected_default_language = entry[2] - if(HOLORECORD_PRESET) - var/preset_type = entry[2] - var/datum/preset_holoimage/H = new preset_type - replay_holo.cut_overlays() - replay_holo.add_overlay(H.build_image()) - if(HOLORECORD_RENAME) - replay_holo.name = entry[2] + " (Hologram)" - .(entry_number+1) - -/obj/machinery/holopad/proc/record_stop() - if(record_mode) - record_mode = FALSE - temp = null - record_user = null - updateDialog() - -/obj/machinery/holopad/proc/record_clear() - if(disk && disk.record) - QDEL_NULL(disk.record) - updateDialog() - -/obj/effect/overlay/holo_pad_hologram - var/mob/living/Impersonation - var/datum/holocall/HC - -/obj/effect/overlay/holo_pad_hologram/Destroy() - Impersonation = null - if(!QDELETED(HC)) - HC.Disconnect(HC.calling_holopad) - return ..() - -/obj/effect/overlay/holo_pad_hologram/Process_Spacemove(movement_dir = 0) - return TRUE - -/obj/effect/overlay/holo_pad_hologram/examine(mob/user) - if(Impersonation) - return Impersonation.examine(user) - return ..() - -/obj/effect/overlay/holoray - name = "holoray" - icon = 'icons/effects/96x96.dmi' - icon_state = "holoray" - layer = FLY_LAYER - density = FALSE - anchored = TRUE - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - pixel_x = -32 - pixel_y = -32 - alpha = 100 - -#undef HOLOPAD_PASSIVE_POWER_USAGE -#undef HOLOGRAM_POWER_USAGE diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm deleted file mode 100644 index 41a9021573..0000000000 --- a/code/game/machinery/igniter.dm +++ /dev/null @@ -1,138 +0,0 @@ -/obj/machinery/igniter - name = "igniter" - desc = "" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "igniter0" - plane = FLOOR_PLANE - use_power = IDLE_POWER_USE - idle_power_usage = 2 - active_power_usage = 4 - max_integrity = 300 - armor = list("melee" = 50, "bullet" = 30, "laser" = 70, "energy" = 50, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70) - resistance_flags = FIRE_PROOF - var/id = null - var/on = FALSE - -/obj/machinery/igniter/incinerator_toxmix - id = INCINERATOR_TOXMIX_IGNITER - -/obj/machinery/igniter/incinerator_atmos - id = INCINERATOR_ATMOS_IGNITER - -/obj/machinery/igniter/incinerator_syndicatelava - id = INCINERATOR_SYNDICATELAVA_IGNITER - -/obj/machinery/igniter/on - on = TRUE - icon_state = "igniter1" - -/obj/machinery/igniter/attack_hand(mob/user) - . = ..() - if(.) - return - add_fingerprint(user) - - use_power(50) - on = !( on ) - update_icon() - -/obj/machinery/igniter/process() //ugh why is this even in process()? - if (src.on && !(stat & NOPOWER) ) - var/turf/location = src.loc - if (isturf(location)) - location.hotspot_expose(1000,500,1) - return 1 - -/obj/machinery/igniter/Initialize() - . = ..() - icon_state = "igniter[on]" - -/obj/machinery/igniter/update_icon_state() - if(stat & NOPOWER) - icon_state = "igniter0" - else - icon_state = "igniter[on]" - -/obj/machinery/igniter/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE) - id = "[idnum][id]" - -// Wall mounted remote-control igniter. - -/obj/machinery/sparker - name = "mounted igniter" - desc = "" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "migniter" - resistance_flags = FIRE_PROOF - var/id = null - var/disable = 0 - var/last_spark = 0 - var/datum/effect_system/spark_spread/spark_system - -/obj/machinery/sparker/toxmix - id = INCINERATOR_TOXMIX_IGNITER - -/obj/machinery/sparker/Initialize() - . = ..() - spark_system = new /datum/effect_system/spark_spread - spark_system.set_up(2, 1, src) - spark_system.attach(src) - -/obj/machinery/sparker/Destroy() - QDEL_NULL(spark_system) - return ..() - -/obj/machinery/sparker/update_icon_state() - if(disable) - icon_state = "[initial(icon_state)]-d" - else if(powered()) - icon_state = "[initial(icon_state)]" - else - icon_state = "[initial(icon_state)]-p" - -/obj/machinery/sparker/powered() - if(!disable) - return FALSE - return ..() - -/obj/machinery/sparker/attackby(obj/item/W, mob/user, params) - if (W.tool_behaviour == TOOL_SCREWDRIVER) - add_fingerprint(user) - src.disable = !src.disable - if (src.disable) - user.visible_message("[user] has disabled \the [src]!", "I disable the connection to \the [src].") - if (!src.disable) - user.visible_message("[user] has reconnected \the [src]!", "I fix the connection to \the [src].") - update_icon() - else - return ..() - -/obj/machinery/sparker/attack_ai() - if (anchored) - return src.ignite() - else - return - -/obj/machinery/sparker/proc/ignite() - if (!(powered())) - return - - if ((src.disable) || (src.last_spark && world.time < src.last_spark + 50)) - return - - - flick("[initial(icon_state)]-spark", src) - spark_system.start() - last_spark = world.time - use_power(1000) - var/turf/location = src.loc - if (isturf(location)) - location.hotspot_expose(1000,2500,1) - return 1 - -/obj/machinery/sparker/emp_act(severity) - . = ..() - if (. & EMP_PROTECT_SELF) - return - if(!(stat & (BROKEN|NOPOWER))) - ignite() diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm deleted file mode 100644 index f4820cc9b1..0000000000 --- a/code/game/machinery/iv_drip.dm +++ /dev/null @@ -1,254 +0,0 @@ -#define IV_TAKING 0 -#define IV_INJECTING 1 - -/obj/machinery/iv_drip - name = "\improper IV drip" - desc = "" - icon = 'icons/obj/iv_drip.dmi' - icon_state = "iv_drip" - anchored = FALSE - mouse_drag_pointer = MOUSE_ACTIVE_POINTER - var/mob/living/carbon/attached - var/mode = IV_INJECTING - var/dripfeed = FALSE - var/obj/item/reagent_containers/beaker - var/static/list/drip_containers = typecacheof(list(/obj/item/reagent_containers/blood, - /obj/item/reagent_containers/food, - /obj/item/reagent_containers/glass, - /obj/item/reagent_containers/chem_pack)) - -/obj/machinery/iv_drip/Initialize(mapload) - . = ..() - update_icon() - -/obj/machinery/iv_drip/Destroy() - attached = null - QDEL_NULL(beaker) - return ..() - -/obj/machinery/iv_drip/update_icon_state() - if(attached) - if(mode) - icon_state = "injecting" - else - icon_state = "donating" - else - if(mode) - icon_state = "injectidle" - else - icon_state = "donateidle" - -/obj/machinery/iv_drip/update_overlays() - . = ..() - - if(beaker) - if(attached) - . += "beakeractive" - else - . += "beakeridle" - if(beaker.reagents.total_volume) - var/mutable_appearance/filling_overlay = mutable_appearance('icons/obj/iv_drip.dmi', "reagent") - - var/percent = round((beaker.reagents.total_volume / beaker.volume) * 100) - switch(percent) - if(0 to 9) - filling_overlay.icon_state = "reagent0" - if(10 to 24) - filling_overlay.icon_state = "reagent10" - if(25 to 49) - filling_overlay.icon_state = "reagent25" - if(50 to 74) - filling_overlay.icon_state = "reagent50" - if(75 to 79) - filling_overlay.icon_state = "reagent75" - if(80 to 90) - filling_overlay.icon_state = "reagent80" - if(91 to INFINITY) - filling_overlay.icon_state = "reagent100" - - filling_overlay.color = mix_color_from_reagents(beaker.reagents.reagent_list) - . += filling_overlay - -/obj/machinery/iv_drip/MouseDrop(mob/living/target) - . = ..() - if(!ishuman(usr) || !usr.canUseTopic(src, BE_CLOSE) || !isliving(target)) - return - - if(attached) - visible_message("[attached] is detached from [src].") - attached = null - update_icon() - return - - if(!target.has_dna()) - to_chat(usr, "The drip beeps: Warning, incompatible creature!") - return - - if(Adjacent(target) && usr.Adjacent(target)) - if(beaker) - usr.visible_message("[usr] attaches [src] to [target].", "I attach [src] to [target].") - log_combat(usr, target, "attached", src, "containing: [beaker.name] - ([beaker.reagents.log_list()])") - add_fingerprint(usr) - attached = target - START_PROCESSING(SSmachines, src) - update_icon() - else - to_chat(usr, "There's nothing attached to the IV drip!") - - -/obj/machinery/iv_drip/attackby(obj/item/W, mob/user, params) - if(is_type_in_typecache(W, drip_containers)) - if(beaker) - to_chat(user, "There is already a reagent container loaded!") - return - if(!user.transferItemToLoc(W, src)) - return - beaker = W - to_chat(user, "I attach [W] to [src].") - user.log_message("attached a [W] to [src] at [AREACOORD(src)] containing ([beaker.reagents.log_list()])", LOG_ATTACK) - add_fingerprint(user) - update_icon() - return - else - return ..() - -/obj/machinery/iv_drip/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/sheet/metal(loc) - qdel(src) - -/obj/machinery/iv_drip/process() - if(!attached) - return PROCESS_KILL - - if(!(get_dist(src, attached) <= 1 && isturf(attached.loc))) - to_chat(attached, "The IV drip needle is ripped out of you!") - attached.apply_damage(3, BRUTE, pick(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM)) - attached = null - update_icon() - return PROCESS_KILL - - if(beaker) - // Give blood - if(mode) - if(beaker.reagents.total_volume) - var/transfer_amount = 5 - if (dripfeed) - transfer_amount = 1 - if(istype(beaker, /obj/item/reagent_containers/blood)) - // speed up transfer on blood packs - transfer_amount *= 2 - beaker.reagents.trans_to(attached, transfer_amount, method = INJECT, show_message = FALSE) //make reagents reacts, but don't spam messages - update_icon() - - // Take blood - else - var/amount = beaker.reagents.maximum_volume - beaker.reagents.total_volume - amount = min(amount, 4) - // If the beaker is full, ping - if(!amount) - if(prob(5)) - visible_message("[src] pings.") - return - - // If the human is losing too much blood, beep. - if(attached.blood_volume < BLOOD_VOLUME_SAFE && prob(5)) - visible_message("[src] beeps loudly.") - playsound(loc, 'sound/blank.ogg', 50, TRUE) - attached.transfer_blood_to(beaker, amount) - update_icon() - -/obj/machinery/iv_drip/attack_hand(mob/user) - . = ..() - if(.) - return - if(!ishuman(user)) - return - if(attached) - visible_message("[attached] is detached from [src].") - attached = null - update_icon() - return - else if(beaker) - eject_beaker(user) - else - toggle_mode() - -/obj/machinery/iv_drip/AltClick(mob/living/user) - if(!user.canUseTopic(src, be_close=TRUE)) - return - if(dripfeed) - dripfeed = FALSE - to_chat(usr, "I loosen the valve to speed up the [src].") - else - dripfeed = TRUE - to_chat(usr, "I tighten the valve to slowly drip-feed the contents of [src].") - -/obj/machinery/iv_drip/verb/eject_beaker() - set hidden = 1 - set name = "Remove IV Container" - set src in view(1) - - if(!isliving(usr)) - to_chat(usr, "I can't do that!") - return - - if(usr.incapacitated()) - return - if(beaker) - beaker.forceMove(drop_location()) - beaker = null - update_icon() - -/obj/machinery/iv_drip/verb/toggle_mode() - set hidden = 1 - set name = "Toggle Mode" - set src in view(1) - - if(!isliving(usr)) - to_chat(usr, "I can't do that!") - return - - if(usr.incapacitated()) - return - mode = !mode - to_chat(usr, "The IV drip is now [mode ? "injecting" : "taking blood"].") - update_icon() - -/obj/machinery/iv_drip/examine(mob/user) - . = ..() - if(get_dist(user, src) > 2) - return - - . += "[src] is [mode ? "injecting" : "taking blood"]." - - if(beaker) - if(beaker.reagents && beaker.reagents.reagent_list.len) - . += "Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid." - else - . += "Attached is an empty [beaker.name]." - else - . += "No chemicals are attached." - - . += "[attached ? attached : "No one"] is attached." - - -/obj/machinery/iv_drip/saline - name = "saline drip" - desc = "" - icon_state = "saline" - density = TRUE - -/obj/machinery/iv_drip/saline/Initialize(mapload) - . = ..() - beaker = new /obj/item/reagent_containers/glass/saline(src) - -/obj/machinery/iv_drip/saline/update_icon() - return - -/obj/machinery/iv_drip/saline/eject_beaker() - return -/obj/machinery/iv_drip/saline/toggle_mode() - return -#undef IV_TAKING -#undef IV_INJECTING diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm deleted file mode 100644 index 7b9e23689a..0000000000 --- a/code/game/machinery/launch_pad.dm +++ /dev/null @@ -1,443 +0,0 @@ -/obj/machinery/launchpad - name = "bluespace launchpad" - desc = "" - icon = 'icons/obj/telescience.dmi' - icon_state = "lpad-idle" - use_power = TRUE - idle_power_usage = 200 - active_power_usage = 2500 - hud_possible = list(DIAG_LAUNCHPAD_HUD) - circuit = /obj/item/circuitboard/machine/launchpad - var/icon_teleport = "lpad-beam" - var/stationary = TRUE //to prevent briefcase pad deconstruction and such - var/display_name = "Launchpad" - var/teleport_speed = 35 - var/range = 15 - var/teleporting = FALSE //if it's in the process of teleporting - var/power_efficiency = 1 - var/x_offset = 0 - var/y_offset = 0 - var/indicator_icon = "launchpad_target" - -/obj/machinery/launchpad/RefreshParts() - var/E = 0 - for(var/obj/item/stock_parts/manipulator/M in component_parts) - E += M.rating - range = initial(range) - range *= E - -/obj/machinery/launchpad/Initialize() - . = ..() - prepare_huds() - for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds) - diag_hud.add_to_hud(src) - - var/image/holder = hud_list[DIAG_LAUNCHPAD_HUD] - var/mutable_appearance/MA = new /mutable_appearance() - MA.icon = 'icons/effects/effects.dmi' - MA.icon_state = "launchpad_target" - MA.layer = ABOVE_OPEN_TURF_LAYER - MA.plane = 0 - holder.appearance = MA - - update_indicator() - -/obj/machinery/launchpad/Destroy() - qdel(hud_list[DIAG_LAUNCHPAD_HUD]) - return ..() - -/obj/machinery/launchpad/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Maximum range: [range] units." - -/obj/machinery/launchpad/attackby(obj/item/I, mob/user, params) - if(stationary) - if(default_deconstruction_screwdriver(user, "lpad-idle-o", "lpad-idle", I)) - update_indicator() - return - - if(panel_open) - if(I.tool_behaviour == TOOL_MULTITOOL) - if(!multitool_check_buffer(user, I)) - return - var/obj/item/multitool/M = I - M.buffer = src - to_chat(user, "I save the data in the [I.name]'s buffer.") - return 1 - - if(default_deconstruction_crowbar(I)) - return - - return ..() - -/obj/machinery/launchpad/attack_ghost(mob/dead/observer/ghost) - . = ..() - if(.) - return - var/target_x = x + x_offset - var/target_y = y + y_offset - var/turf/target = locate(target_x, target_y, z) - ghost.forceMove(target) - -/obj/machinery/launchpad/proc/isAvailable() - if(stat & NOPOWER) - return FALSE - if(panel_open) - return FALSE - return TRUE - -/obj/machinery/launchpad/proc/update_indicator() - var/image/holder = hud_list[DIAG_LAUNCHPAD_HUD] - var/turf/target_turf - if(isAvailable()) - target_turf = locate(x + x_offset, y + y_offset, z) - if(target_turf) - holder.icon_state = indicator_icon - holder.loc = target_turf - else - holder.icon_state = null - -/obj/machinery/launchpad/proc/doteleport(mob/user, sending) - if(teleporting) - to_chat(user, "ERROR: Launchpad busy.") - return - - var/turf/dest = get_turf(src) - - if(dest && is_centcom_level(dest.z)) - to_chat(user, "ERROR: Launchpad not operative. Heavy area shielding makes teleporting impossible.") - return - - var/target_x = x + x_offset - var/target_y = y + y_offset - var/turf/target = locate(target_x, target_y, z) - var/area/A = get_area(target) - - flick(icon_teleport, src) - - //Change the indicator's icon to show that we're teleporting - if(sending) - indicator_icon = "launchpad_launch" - else - indicator_icon = "launchpad_pull" - update_indicator() - - playsound(get_turf(src), 'sound/blank.ogg', 25, TRUE) - teleporting = TRUE - - - sleep(teleport_speed) - - //Set the indicator icon back to normal - indicator_icon = "launchpad_target" - update_indicator() - - if(QDELETED(src) || !isAvailable()) - return - - teleporting = FALSE - - // use a lot of power - use_power(1000) - - var/turf/source = target - var/list/log_msg = list() - log_msg += ": [key_name(user)] has teleported " - - if(sending) - source = dest - dest = target - - playsound(get_turf(src), 'sound/blank.ogg', 25, TRUE) - var/first = TRUE - for(var/atom/movable/ROI in source) - if(ROI == src) - continue - if(!istype(ROI) || isdead(ROI) || iscameramob(ROI) || istype(ROI, /obj/effect/dummy/phased_mob)) - continue//don't teleport these - var/on_chair = "" - if(ROI.anchored)// if it's anchored, don't teleport - if(isliving(ROI)) - var/mob/living/L = ROI - if(L.buckled) - // TP people on office chairs - if(L.buckled.anchored) - continue - on_chair = " (on a chair)" - else - continue - else - continue - if(!first) - log_msg += ", " - if(ismob(ROI)) - var/mob/T = ROI - log_msg += "[key_name(T)][on_chair]" - else - log_msg += "[ROI.name]" - if (istype(ROI, /obj/structure/closet)) - log_msg += " (" - var/first_inner = TRUE - for(var/atom/movable/Q as mob|obj in ROI) - if(!first_inner) - log_msg += ", " - first_inner = FALSE - if(ismob(Q)) - log_msg += "[key_name(Q)]" - else - log_msg += "[Q.name]" - if(first_inner) - log_msg += "empty" - log_msg += ")" - do_teleport(ROI, dest, no_effects = !first, channel = TELEPORT_CHANNEL_BLUESPACE) - first = FALSE - - if (first) - log_msg += "nothing" - log_msg += " [sending ? "to" : "from"] [target_x], [target_y], [z] ([A ? A.name : "null area"])" - investigate_log(log_msg.Join(), INVESTIGATE_TELESCI) - updateDialog() - -//Starts in the briefcase. Don't spawn this directly, or it will runtime when closing. -/obj/machinery/launchpad/briefcase - name = "briefcase launchpad" - desc = "" - icon_state = "blpad-idle" - icon_teleport = "blpad-beam" - anchored = FALSE - use_power = FALSE - idle_power_usage = 0 - active_power_usage = 0 - teleport_speed = 20 - range = 8 - stationary = FALSE - var/closed = TRUE - var/obj/item/storage/briefcase/launchpad/briefcase - -/obj/machinery/launchpad/briefcase/Initialize(mapload, briefcase) - . = ..() - if(!briefcase) - log_game("[src] has been spawned without a briefcase.") - return INITIALIZE_HINT_QDEL - src.briefcase = briefcase - -/obj/machinery/launchpad/briefcase/Destroy() - QDEL_NULL(briefcase) - return ..() - -/obj/machinery/launchpad/briefcase/isAvailable() - if(closed) - return FALSE - return ..() - -/obj/machinery/launchpad/briefcase/MouseDrop(over_object, src_location, over_location) - . = ..() - if(over_object == usr) - if(!briefcase || !usr.can_hold_items()) - return - if(!usr.canUseTopic(src, BE_CLOSE, ismonkey(usr))) - return - usr.visible_message("[usr] starts closing [src]...", "I start closing [src]...") - if(do_after(usr, 30, target = usr)) - usr.put_in_hands(briefcase) - moveToNullspace() //hides it from suitcase contents - closed = TRUE - update_indicator() - -/obj/machinery/launchpad/briefcase/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/launchpad_remote)) - var/obj/item/launchpad_remote/L = I - if(L.pad == src) //do not attempt to link when already linked - return ..() - L.pad = src - to_chat(user, "I link [src] to [L].") - else - return ..() - -//Briefcase item that contains the launchpad. -/obj/item/storage/briefcase/launchpad - var/obj/machinery/launchpad/briefcase/pad - -/obj/item/storage/briefcase/launchpad/Initialize() - pad = new(null, src) //spawns pad in nullspace to hide it from briefcase contents - . = ..() - -/obj/item/storage/briefcase/launchpad/Destroy() - if(!QDELETED(pad)) - QDEL_NULL(pad) - return ..() - -/obj/item/storage/briefcase/launchpad/PopulateContents() - new /obj/item/pen(src) - new /obj/item/launchpad_remote(src, pad) - -/obj/item/storage/briefcase/launchpad/attack_self(mob/user) - if(!isturf(user.loc)) //no setting up in a locker - return - add_fingerprint(user) - user.visible_message("[user] starts setting down [src]...", "You start setting up [pad]...") - if(do_after(user, 30, target = user)) - pad.forceMove(get_turf(src)) - pad.update_indicator() - pad.closed = FALSE - user.transferItemToLoc(src, pad, TRUE) - SEND_SIGNAL(src, COMSIG_TRY_STORAGE_HIDE_ALL) - -/obj/item/storage/briefcase/launchpad/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/launchpad_remote)) - var/obj/item/launchpad_remote/L = I - if(L.pad == src.pad) //do not attempt to link when already linked - return ..() - L.pad = src.pad - to_chat(user, "I link [pad] to [L].") - else - return ..() - -/obj/item/launchpad_remote - name = "folder" - desc = "" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "folder" - w_class = WEIGHT_CLASS_SMALL - var/sending = TRUE - var/obj/machinery/launchpad/briefcase/pad - -/obj/item/launchpad_remote/Initialize(mapload, pad) //remote spawns linked to the briefcase pad - . = ..() - src.pad = pad - -/obj/item/launchpad_remote/attack_self(mob/user) - . = ..() - ui_interact(user) - to_chat(user, "[src] projects a display onto your retina.") - -/obj/item/launchpad_remote/ui_interact(mob/user, ui_key = "launchpad_remote", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "launchpad_remote", "Briefcase Launchpad Remote", 550, 400, master_ui, state) //width, height - ui.set_style("syndicate") - ui.open() - - ui.set_autoupdate(TRUE) - -/obj/item/launchpad_remote/ui_data(mob/user) - var/list/data = list() - data["has_pad"] = pad ? TRUE : FALSE - if(pad) - data["pad_closed"] = pad.closed - if(!pad || pad.closed) - return data - - data["pad_name"] = pad.display_name - data["abs_x"] = abs(pad.x_offset) - data["abs_y"] = abs(pad.y_offset) - data["north_south"] = pad.y_offset > 0 ? "N":"S" - data["east_west"] = pad.x_offset > 0 ? "E":"W" - return data - -/obj/item/launchpad_remote/proc/teleport(mob/user, obj/machinery/launchpad/pad) - if(QDELETED(pad)) - to_chat(user, "ERROR: Launchpad not responding. Check launchpad integrity.") - return - if(!pad.isAvailable()) - to_chat(user, "ERROR: Launchpad not operative. Make sure the launchpad is ready and powered.") - return - pad.doteleport(user, sending) - -/obj/item/launchpad_remote/ui_act(action, params) - if(..()) - return - switch(action) - if("right") - if(!pad.teleporting) - if(pad.x_offset < pad.range) - pad.x_offset++ - pad.update_indicator() - . = TRUE - - if("left") - if(!pad.teleporting) - if(pad.x_offset > (pad.range * -1)) - pad.x_offset-- - pad.update_indicator() - . = TRUE - - if("up") - if(!pad.teleporting) - if(pad.y_offset < pad.range) - pad.y_offset++ - pad.update_indicator() - . = TRUE - - if("down") - if(!pad.teleporting) - if(pad.y_offset > (pad.range * -1)) - pad.y_offset-- - pad.update_indicator() - . = TRUE - - if("up-right") - if(!pad.teleporting) - if(pad.y_offset < pad.range) - pad.y_offset++ - if(pad.x_offset < pad.range) - pad.x_offset++ - pad.update_indicator() - . = TRUE - - if("up-left") - if(!pad.teleporting) - if(pad.y_offset < pad.range) - pad.y_offset++ - if(pad.x_offset > (pad.range * -1)) - pad.x_offset-- - pad.update_indicator() - . = TRUE - - if("down-right") - if(!pad.teleporting) - if(pad.y_offset > (pad.range * -1)) - pad.y_offset-- - if(pad.x_offset < pad.range) - pad.x_offset++ - pad.update_indicator() - . = TRUE - - if("down-left") - if(!pad.teleporting) - if(pad.y_offset > (pad.range * -1)) - pad.y_offset-- - if(pad.x_offset > (pad.range * -1)) - pad.x_offset-- - pad.update_indicator() - . = TRUE - - if("reset") - if(!pad.teleporting) - pad.y_offset = 0 - pad.x_offset = 0 - pad.update_indicator() - . = TRUE - - if("rename") - . = TRUE - var/new_name = stripped_input(usr, "How do you want to rename the launchpad?", "Launchpad", pad.display_name, 15) - if(!new_name) - return - pad.display_name = new_name - - if("remove") - . = TRUE - if(usr && alert(usr, "Are you sure?", "Unlink Launchpad", "I'm Sure", "Abort") != "Abort") - pad = null - - if("launch") - sending = TRUE - teleport(usr, pad) - . = TRUE - - if("pull") - sending = FALSE - teleport(usr, pad) - . = TRUE diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm deleted file mode 100644 index 70b396e5fa..0000000000 --- a/code/game/machinery/lightswitch.dm +++ /dev/null @@ -1,60 +0,0 @@ -/// The light switch. Can have multiple per area. -/obj/machinery/light_switch - name = "light switch" - icon = 'icons/obj/power.dmi' - icon_state = "light1" - desc = "" - power_channel = LIGHT - /// Set this to a string, path, or area instance to control that area - /// instead of the switch's location. - var/area/area = null - -/obj/machinery/light_switch/Initialize() - . = ..() - if(istext(area)) - area = text2path(area) - if(ispath(area)) - area = GLOB.areas_by_type[area] - if(!area) - area = get_area(src) - - if(!name) - name = "light switch ([area.name])" - - update_icon() - -/obj/machinery/light_switch/update_icon_state() - if(stat & NOPOWER) - icon_state = "light-p" - else - if(area.lightswitch) - icon_state = "light1" - else - icon_state = "light0" - -/obj/machinery/light_switch/examine(mob/user) - . = ..() - . += "It is [area.lightswitch ? "on" : "off"]." - -/obj/machinery/light_switch/interact(mob/user) - . = ..() - - area.lightswitch = !area.lightswitch - area.update_icon() - - for(var/obj/machinery/light_switch/L in area) - L.update_icon() - - area.power_change() - -/obj/machinery/light_switch/power_change() - SHOULD_CALL_PARENT(FALSE) - if(area == get_area(src)) - return ..() - -/obj/machinery/light_switch/emp_act(severity) - . = ..() - if (. & EMP_PROTECT_SELF) - return - if(!(stat & (BROKEN|NOPOWER))) - power_change() diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm deleted file mode 100644 index dc818f9f1b..0000000000 --- a/code/game/machinery/limbgrower.dm +++ /dev/null @@ -1,230 +0,0 @@ -#define LIMBGROWER_MAIN_MENU 1 -#define LIMBGROWER_CATEGORY_MENU 2 -#define LIMBGROWER_CHEMICAL_MENU 3 -//use these for the menu system - - -/obj/machinery/limbgrower - name = "limb grower" - desc = "" - icon = 'icons/obj/machines/limbgrower.dmi' - icon_state = "limbgrower_idleoff" - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 10 - active_power_usage = 100 - circuit = /obj/item/circuitboard/machine/limbgrower - - var/operating = FALSE - var/disabled = FALSE - var/busy = FALSE - var/prod_coeff = 1 - var/datum/design/being_built - var/datum/techweb/stored_research - var/selected_category - var/screen = 1 - var/list/categories = list( - "human", - "lizard", - "fly", - "moth", - "plasmaman", - "other" - ) - -/obj/machinery/limbgrower/Initialize() - create_reagents(100, OPENCONTAINER) - stored_research = new /datum/techweb/specialized/autounlocking/limbgrower - . = ..() - -/obj/machinery/limbgrower/ui_interact(mob/user) - . = ..() - if(!is_operational()) - return - - var/dat = main_win(user) - - switch(screen) - if(LIMBGROWER_MAIN_MENU) - dat = main_win(user) - if(LIMBGROWER_CATEGORY_MENU) - dat = category_win(user,selected_category) - if(LIMBGROWER_CHEMICAL_MENU) - dat = chemical_win(user) - - var/datum/browser/popup = new(user, "Limb Grower", name, 400, 500) - popup.set_content(dat) - popup.open() - -/obj/machinery/limbgrower/on_deconstruction() - for(var/obj/item/reagent_containers/glass/G in component_parts) - reagents.trans_to(G, G.reagents.maximum_volume) - ..() - -/obj/machinery/limbgrower/attackby(obj/item/O, mob/user, params) - if (busy) - to_chat(user, "The Limb Grower is busy. Please wait for completion of previous operation.") - return - - if(default_deconstruction_screwdriver(user, "limbgrower_panelopen", "limbgrower_idleoff", O)) - updateUsrDialog() - return - - if(panel_open && default_deconstruction_crowbar(O)) - return - - if(user.used_intent.type == INTENT_HARM) //so we can hit the machine - return ..() - -/obj/machinery/limbgrower/Topic(href, href_list) - if(..()) - return - if (!busy) - if(href_list["menu"]) - screen = text2num(href_list["menu"]) - - if(href_list["category"]) - selected_category = href_list["category"] - - if(href_list["disposeI"]) //Get rid of a reagent incase you add the wrong one by mistake - reagents.del_reagent(text2path(href_list["disposeI"])) - - if(href_list["make"]) - - ///////////////// - //href protection - being_built = stored_research.isDesignResearchedID(href_list["make"]) //check if it's a valid design - if(!being_built) - return - - - var/synth_cost = being_built.reagents_list[/datum/reagent/medicine/C2/instabitaluri]*prod_coeff - var/power = max(2000, synth_cost/5) - - if(reagents.has_reagent(/datum/reagent/medicine/C2/instabitaluri, being_built.reagents_list[/datum/reagent/medicine/C2/instabitaluri]*prod_coeff)) - busy = TRUE - use_power(power) - flick("limbgrower_fill",src) - icon_state = "limbgrower_idleon" - addtimer(CALLBACK(src, PROC_REF(build_item)),32*prod_coeff) - - else - to_chat(usr, "The limb grower is busy. Please wait for completion of previous operation.") - - updateUsrDialog() - return - -/obj/machinery/limbgrower/proc/build_item() - if(reagents.has_reagent(/datum/reagent/medicine/C2/instabitaluri, being_built.reagents_list[/datum/reagent/medicine/C2/instabitaluri]*prod_coeff)) //sanity check, if this happens we are in big trouble - reagents.remove_reagent(/datum/reagent/medicine/C2/instabitaluri,being_built.reagents_list[/datum/reagent/medicine/C2/instabitaluri]*prod_coeff) - var/buildpath = being_built.build_path - if(ispath(buildpath, /obj/item/bodypart)) //This feels like spatgheti code, but i need to initilise a limb somehow - build_limb(buildpath) - else - //Just build whatever it is - new buildpath(loc) - else - src.visible_message("Something went very wrong, there isn't enough instabitaluri anymore!") - busy = FALSE - flick("limbgrower_unfill",src) - icon_state = "limbgrower_idleoff" - updateUsrDialog() - -/obj/machinery/limbgrower/proc/build_limb(buildpath) - //i need to create a body part manually using a set icon (otherwise it doesnt appear) - var/obj/item/bodypart/limb - limb = new buildpath(loc) - if(selected_category=="human" || selected_category=="lizard") //Species with greyscale parts should be included here - limb.icon = 'icons/mob/human_parts_greyscale.dmi' - limb.should_draw_greyscale = TRUE - else - limb.icon = 'icons/mob/human_parts.dmi' - // Set this limb up using the specias name and body zone - limb.icon_state = "[selected_category]_[limb.body_zone]" - limb.name = "\improper synthetic [selected_category] [parse_zone(limb.body_zone)]" - limb.desc = "" - limb.species_id = selected_category - limb.update_icon_dropped() - -/obj/machinery/limbgrower/RefreshParts() - reagents.maximum_volume = 0 - for(var/obj/item/reagent_containers/glass/G in component_parts) - reagents.maximum_volume += G.volume - G.reagents.trans_to(src, G.reagents.total_volume) - var/T=1.2 - for(var/obj/item/stock_parts/manipulator/M in component_parts) - T -= M.rating*0.2 - prod_coeff = min(1,max(0,T)) // Coeff going 1 -> 0,8 -> 0,6 -> 0,4 - -/obj/machinery/limbgrower/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Storing up to [reagents.maximum_volume]u of instabitaluri.
Instabitaluri consumption at [prod_coeff*100]%.
" - -/obj/machinery/limbgrower/proc/main_win(mob/user) - var/dat = "

Limb Grower Menu:


" - dat += "Chemical Storage" - dat += materials_printout() - dat += "" - - for(var/C in categories) - dat += "" - dat += "" - //one category per line - - dat += "
[C]
" - return dat - -/obj/machinery/limbgrower/proc/category_win(mob/user,selected_category) - var/dat = "Return to main menu" - dat += "

Browsing [selected_category]:


" - dat += materials_printout() - - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(!(selected_category in D.category)) - continue - if(disabled || !can_build(D)) - dat += "[D.name]" - else - dat += "[D.name]" - dat += "[get_design_cost(D)]
" - - dat += "
" - return dat - - -/obj/machinery/limbgrower/proc/chemical_win(mob/user) - var/dat = "Return to main menu" - dat += "

Browsing Chemical Storage:


" - dat += materials_printout() - - for(var/datum/reagent/R in reagents.reagent_list) - dat += "[R.name]: [R.volume]" - dat += "Purge
" - - dat += "
" - return dat - -/obj/machinery/limbgrower/proc/materials_printout() - var/dat = "Total amount:> [reagents.total_volume] / [reagents.maximum_volume] cm3
" - return dat - -/obj/machinery/limbgrower/proc/can_build(datum/design/D) - return (reagents.has_reagent(/datum/reagent/medicine/C2/instabitaluri, D.reagents_list[/datum/reagent/medicine/C2/instabitaluri]*prod_coeff)) //Return whether the machine has enough instabitaluri to produce the design - -/obj/machinery/limbgrower/proc/get_design_cost(datum/design/D) - var/dat - if(D.reagents_list[/datum/reagent/medicine/C2/instabitaluri]) - dat += "[D.reagents_list[/datum/reagent/medicine/C2/instabitaluri] * prod_coeff] Synthetic flesh " - return dat - -/obj/machinery/limbgrower/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - for(var/id in SSresearch.techweb_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(id) - if((D.build_type & LIMBGROWER) && ("emagged" in D.category)) - stored_research.add_design(D) - to_chat(user, "A warning flashes onto the screen, stating that safety overrides have been deactivated!") - obj_flags |= EMAGGED diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm deleted file mode 100644 index c62bccbba1..0000000000 --- a/code/game/machinery/magnet.dm +++ /dev/null @@ -1,378 +0,0 @@ -// Magnetic attractor, creates variable magnetic fields and attraction. -// Can also be used to emit electron/proton beams to create a center of magnetism on another tile - -// tl;dr: it's magnets lol -// This was created for firing ranges, but I suppose this could have other applications - Doohl - -/obj/machinery/magnetic_module - icon = 'icons/obj/objects.dmi' - icon_state = "floor_magnet-f" - name = "electromagnetic generator" - desc = "" - level = 1 // underfloor - layer = LOW_OBJ_LAYER - use_power = IDLE_POWER_USE - idle_power_usage = 50 - - var/freq = FREQ_MAGNETS // radio frequency - var/electricity_level = 1 // intensity of the magnetic pull - var/magnetic_field = 1 // the range of magnetic attraction - var/code = 0 // frequency code, they should be different unless you have a group of magnets working together or something - var/turf/center // the center of magnetic attraction - var/on = FALSE - var/magneting = FALSE - - // x, y modifiers to the center turf; (0, 0) is centered on the magnet, whereas (1, -1) is one tile right, one tile down - var/center_x = 0 - var/center_y = 0 - var/max_dist = 20 // absolute value of center_x,y cannot exceed this integer - -/obj/machinery/magnetic_module/Initialize() - ..() - var/turf/T = loc - hide(T.intact) - center = T - SSradio.add_object(src, freq, RADIO_MAGNETS) - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/magnetic_module/LateInitialize() - magnetic_process() - -/obj/machinery/magnetic_module/Destroy() - SSradio.remove_object(src, freq) - center = null - return ..() - -// update the invisibility and icon -/obj/machinery/magnetic_module/hide(intact) - invisibility = intact ? INVISIBILITY_MAXIMUM : 0 - update_icon() - -// update the icon_state -/obj/machinery/magnetic_module/update_icon_state() - var/state="floor_magnet" - var/onstate="" - if(!on) - onstate="0" - - if(invisibility) - icon_state = "[state][onstate]-f" // if invisible, set icon to faded version - // in case of being revealed by T-scanner - else - icon_state = "[state][onstate]" - -/obj/machinery/magnetic_module/receive_signal(datum/signal/signal) - - var/command = signal.data["command"] - var/modifier = signal.data["modifier"] - var/signal_code = signal.data["code"] - if(command && (signal_code == code)) - - Cmd(command, modifier) - - - -/obj/machinery/magnetic_module/proc/Cmd(command, modifier) - - if(command) - switch(command) - if("set-electriclevel") - if(modifier) - electricity_level = modifier - if("set-magneticfield") - if(modifier) - magnetic_field = modifier - - if("add-elec") - electricity_level++ - if(electricity_level > 12) - electricity_level = 12 - if("sub-elec") - electricity_level-- - if(electricity_level <= 0) - electricity_level = 1 - if("add-mag") - magnetic_field++ - if(magnetic_field > 4) - magnetic_field = 4 - if("sub-mag") - magnetic_field-- - if(magnetic_field <= 0) - magnetic_field = 1 - - if("set-x") - if(modifier) - center_x = modifier - if("set-y") - if(modifier) - center_y = modifier - - if("N") // NORTH - center_y++ - if("S") // SOUTH - center_y-- - if("E") // EAST - center_x++ - if("W") // WEST - center_x-- - if("C") // CENTER - center_x = 0 - center_y = 0 - if("R") // RANDOM - center_x = rand(-max_dist, max_dist) - center_y = rand(-max_dist, max_dist) - - if("set-code") - if(modifier) - code = modifier - if("toggle-power") - on = !on - - if(on) - INVOKE_ASYNC(src, PROC_REF(magnetic_process)) - - - -/obj/machinery/magnetic_module/process() - if(stat & NOPOWER) - on = FALSE - - // Sanity checks: - if(electricity_level <= 0) - electricity_level = 1 - if(magnetic_field <= 0) - magnetic_field = 1 - - - // Limitations: - if(abs(center_x) > max_dist) - center_x = max_dist - if(abs(center_y) > max_dist) - center_y = max_dist - if(magnetic_field > 4) - magnetic_field = 4 - if(electricity_level > 12) - electricity_level = 12 - - // Update power usage: - if(on) - use_power = ACTIVE_POWER_USE - active_power_usage = electricity_level*15 - else - use_power = NO_POWER_USE - - update_icon() - - -/obj/machinery/magnetic_module/proc/magnetic_process() // proc that actually does the magneting - if(magneting) - return - while(on) - - magneting = TRUE - center = locate(x+center_x, y+center_y, z) - if(center) - for(var/obj/M in orange(magnetic_field, center)) - if(!M.anchored && (M.flags_1 & CONDUCT_1)) - step_towards(M, center) - - for(var/mob/living/silicon/S in orange(magnetic_field, center)) - if(isAI(S)) - continue - step_towards(S, center) - - use_power(electricity_level * 5) - sleep(13 - electricity_level) - - magneting = FALSE - - - - -/obj/machinery/magnetic_controller - name = "magnetic control console" - icon = 'icons/obj/airlock_machines.dmi' // uses an airlock machine icon, THINK GREEN HELP THE ENVIRONMENT - RECYCLING! - icon_state = "airlock_control_standby" - density = FALSE - use_power = IDLE_POWER_USE - idle_power_usage = 45 - var/frequency = FREQ_MAGNETS - var/code = 0 - var/list/magnets = list() - var/title = "Magnetic Control Console" - var/autolink = 0 // if set to 1, can't probe for other magnets! - - var/pathpos = 1 // position in the path - var/path = "w;e;e;w;s;n;n;s" // text path of the magnet - var/speed = 1 // lowest = 1, highest = 10 - var/list/rpath = list() // real path of the magnet, used in iterator - - var/moving = 0 // 1 if scheduled to loop - var/looping = 0 // 1 if looping - - var/datum/radio_frequency/radio_connection - - -/obj/machinery/magnetic_controller/Initialize() - . = ..() - if(autolink) - for(var/obj/machinery/magnetic_module/M in GLOB.machines) - if(M.freq == frequency && M.code == code) - magnets.Add(M) - - if(path) // check for default path - filter_path() // renders rpath - radio_connection = SSradio.add_object(src, frequency, RADIO_MAGNETS) - -/obj/machinery/magnetic_controller/Destroy() - SSradio.remove_object(src, frequency) - magnets = null - rpath = null - return ..() - -/obj/machinery/magnetic_controller/process() - if(magnets.len == 0 && autolink) - for(var/obj/machinery/magnetic_module/M in GLOB.machines) - if(M.freq == frequency && M.code == code) - magnets.Add(M) - -/obj/machinery/magnetic_controller/ui_interact(mob/user) - . = ..() - var/dat = "Magnetic Control Console

" - if(!autolink) - dat += {" - Frequency: [frequency]
- Code: [code]
- Probe Generators
- "} - - if(magnets.len >= 1) - - dat += "Magnets confirmed:
" - var/i = 0 - for(var/obj/machinery/magnetic_module/M in magnets) - i++ - dat += "     < \[[i]\] ([M.on ? "On":"Off"]) | Electricity level: - [M.electricity_level] +; Magnetic field: - [M.magnetic_field] +
" - - dat += "
Speed: - [speed] +
" - dat += "Path: {[path]}
" - dat += "Moving: [moving ? "Enabled":"Disabled"]" - - - user << browse(dat, "window=magnet;size=400x500") - onclose(user, "magnet") - -/obj/machinery/magnetic_controller/Topic(href, href_list) - if(..()) - return - usr.set_machine(src) - - if(href_list["radio-op"]) - - // Prepare signal beforehand, because this is a radio operation - var/datum/signal/signal = new(list("code" = code)) - - // Apply any necessary commands - switch(href_list["radio-op"]) - if("togglepower") - signal.data["command"] = "toggle-power" - - if("minuselec") - signal.data["command"] = "sub-elec" - if("pluselec") - signal.data["command"] = "add-elec" - - if("minusmag") - signal.data["command"] = "sub-mag" - if("plusmag") - signal.data["command"] = "add-mag" - - - // Broadcast the signal - - radio_connection.post_signal(src, signal, filter = RADIO_MAGNETS) - - updateUsrDialog() - - if(href_list["operation"]) - switch(href_list["operation"]) - if("plusspeed") - speed ++ - if(speed > 10) - speed = 10 - if("minusspeed") - speed -- - if(speed <= 0) - speed = 1 - if("setpath") - var/newpath = copytext(sanitize(input(usr, "Please define a new path!",,path) as text|null),1,MAX_MESSAGE_LEN) - if(newpath && newpath != "") - moving = 0 // stop moving - path = newpath - pathpos = 1 // reset position - filter_path() // renders rpath - - if("togglemoving") - moving = !moving - if(moving) - INVOKE_ASYNC(src, PROC_REF(MagnetMove)) - - - updateUsrDialog() - -/obj/machinery/magnetic_controller/proc/MagnetMove() - if(looping) - return - - while(moving && rpath.len >= 1) - - if(stat & (BROKEN|NOPOWER)) - break - - looping = 1 - - // Prepare the radio signal - var/datum/signal/signal = new(list("code" = code)) - - if(pathpos > rpath.len) // if the position is greater than the length, we just loop through the list! - pathpos = 1 - - var/nextmove = uppertext(rpath[pathpos]) // makes it un-case-sensitive - - if(!(nextmove in list("N","S","E","W","C","R"))) - // N, S, E, W are directional - // C is center - // R is random (in magnetic field's bounds) - qdel(signal) - break // break the loop if the character located is invalid - - signal.data["command"] = nextmove - - - pathpos++ // increase iterator - - // Broadcast the signal - INVOKE_ASYNC(CALLBACK(radio_connection, TYPE_PROC_REF(/datum/radio_frequency, post_signal), src, signal, RADIO_MAGNETS)) - - if(speed == 10) - sleep(1) - else - sleep(12-speed) - - looping = 0 - - -/obj/machinery/magnetic_controller/proc/filter_path() - // Generates the rpath variable using the path string, think of this as "string2list" - // Doesn't use params2list() because of the akward way it stacks entities - rpath = list() // clear rpath - var/maximum_character = min( 50, length(path) ) // chooses the maximum length of the iterator. 50 max length - - for(var/i=1, i<=maximum_character, i++) // iterates through all characters in path - - var/nextchar = copytext(path, i, i+1) // find next character - - if(!(nextchar in list(";", "&", "*", " "))) // if char is a separator, ignore - rpath += copytext(path, i, i+1) // else, add to list - - // there doesn't HAVE to be separators but it makes paths syntatically visible diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm deleted file mode 100644 index 54328f952f..0000000000 --- a/code/game/machinery/mass_driver.dm +++ /dev/null @@ -1,42 +0,0 @@ -/obj/machinery/mass_driver - name = "mass driver" - desc = "" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "mass_driver" - use_power = IDLE_POWER_USE - idle_power_usage = 2 - active_power_usage = 50 - var/power = 1 - var/code = 1 - var/id = 1 - var/drive_range = 50 //this is mostly irrelevant since current mass drivers throw into space, but you could make a lower-range mass driver for interstation transport or something I guess. - -/obj/machinery/mass_driver/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE) - id = "[idnum][id]" - -/obj/machinery/mass_driver/proc/drive(amount) - if(stat & (BROKEN|NOPOWER)) - return - use_power(500) - var/O_limit - var/atom/target = get_edge_target_turf(src, dir) - for(var/atom/movable/O in loc) - if(!O.anchored || ismecha(O)) //Mechs need their launch platforms. - if(ismob(O) && !isliving(O)) - continue - O_limit++ - if(O_limit >= 20) - audible_message("[src] lets out a screech, it doesn't seem to be able to handle the load.") - break - use_power(500) - O.throw_at(target, drive_range * power, power) - flick("mass_driver1", src) - - -/obj/machinery/mass_driver/emp_act(severity) - . = ..() - if (. & EMP_PROTECT_SELF) - return - if(stat & (BROKEN|NOPOWER)) - return - drive() diff --git a/code/game/machinery/medical_kiosk.dm b/code/game/machinery/medical_kiosk.dm deleted file mode 100644 index 81560cabea..0000000000 --- a/code/game/machinery/medical_kiosk.dm +++ /dev/null @@ -1,359 +0,0 @@ -//The Medical Kiosk is designed to act as a low access alernative to a medical analyzer, and doesn't require breaking into medical. Self Diagnose at your heart's content! -//For a fee that is. Comes in 4 flavors of medical scan. - - -/obj/machinery/medical_kiosk - name = "medical kiosk" - desc = "" - icon = 'icons/obj/machines/medical_kiosk.dmi' - icon_state = "kiosk" - layer = ABOVE_MOB_LAYER - density = TRUE - circuit = /obj/item/circuitboard/machine/medical_kiosk - payment_department = ACCOUNT_MED - var/obj/item/scanner_wand - var/default_price = 15 //I'm defaulting to a low price on this, but in the future I wouldn't have an issue making it more or less expensive. - var/active_price = 15 //Change by using a multitool on the board. - var/pandemonium = FALSE //AKA: Emag mode. - - var/scan_active_1 = FALSE //Shows if the machine is being used for a general scan. - var/scan_active_2 = FALSE //as above, symptom scan - var/scan_active_3 = FALSE //as above, radiological scan - var/scan_active_4 = FALSE //as above, chemical/hallucinations. - var/paying_customer = FALSE //Ticked yes if passing inuse() - - var/datum/bank_account/account //payer's account. - var/mob/living/carbon/human/H //The person using the console in each instance. Used for paying for the kiosk. - var/mob/living/carbon/human/altPatient //If scanning someone else, this will be the target. - var/obj/item/card/id/C //the account of the person using the console. - -/obj/machinery/medical_kiosk/Initialize() //loaded subtype for mapping use - . = ..() - scanner_wand = new/obj/item/scanner_wand(src) - -/obj/machinery/medical_kiosk/proc/inuse() //Verifies that the user can use the interface, followed by showing medical information. - if (pandemonium == TRUE) - active_price += (rand(10,30)) //The wheel of capitalism says health care ain't cheap. - if(!istype(C)) - say("No ID card detected.") // No unidentified crew. - return - if(C.registered_account) - account = C.registered_account - else - say("No account detected.") //No homeless crew. - return - if(account?.account_job?.paycheck_department == payment_department) - use_power(20) - paying_customer = TRUE - say("Hello, esteemed medical staff!") - RefreshParts() - return - if(!account.has_money(active_price)) - say("You do not possess the funds to purchase this.") //No jobless crew, either. - return - else - account.adjust_money(-active_price) - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_MED) - if(D) - D.adjust_money(active_price) - use_power(20) - paying_customer = TRUE - icon_state = "kiosk_active" - say("Thank you for your patronage!") - RefreshParts() - return - -/obj/machinery/medical_kiosk/proc/clearScans() //Called it enough times to be it's own proc - scan_active_1 = FALSE - scan_active_2 = FALSE - scan_active_3 = FALSE - scan_active_4 = FALSE - return - -/obj/machinery/medical_kiosk/update_icon_state() - if(is_operational()) - icon_state = "kiosk_off" - else - icon_state = "kiosk" - -/obj/machinery/medical_kiosk/wrench_act(mob/living/user, obj/item/I) //Allows for wrenching/unwrenching the machine. - ..() - default_unfasten_wrench(user, I, time = 10) - return TRUE - -/obj/machinery/medical_kiosk/RefreshParts() - var/obj/item/circuitboard/machine/medical_kiosk/board = circuit - if(board) - active_price = board.custom_cost - return - -/obj/machinery/medical_kiosk/attackby(obj/item/O, mob/user, params) - if(default_deconstruction_screwdriver(user, "kiosk_open", "kiosk", O)) - return - else if(default_deconstruction_crowbar(O)) - return - - if(istype(O, /obj/item/scanner_wand)) - var/obj/item/scanner_wand/W = O - if(scanner_wand) - to_chat(user, "There's already a scanner wand in [src]!") - return - if(HAS_TRAIT(O, TRAIT_NODROP) || !user.transferItemToLoc(O, src)) - to_chat(user, "[O] is stuck to your hand!") - return - user.visible_message("[user] snaps [O] onto [src]!", \ - "I press [O] into the side of [src], clicking into place.") - //This will be the scanner returning scanner_wand's selected_target variable and assigning it to the altPatient var - if(W.selected_target) - if(!(altPatient == W.return_patient())) - clearScans() - altPatient = W.return_patient() - user.visible_message("[W.return_patient()] has been set as the current patient.") - W.selected_target = null - playsound(src, 'sound/blank.ogg', 50, TRUE) - scanner_wand = O - return - return ..() - -/obj/machinery/medical_kiosk/AltClick(mob/living/carbon/user) - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE)) - return - if(!scanner_wand) - to_chat(user, "The scanner wand is currently removed from the machine.") - return - if(!user.put_in_hands(scanner_wand)) - to_chat(user, "The scanner wand falls to the floor.") - scanner_wand = null - return - user.visible_message("[user] unhooks the [scanner_wand] from [src].", \ - "I detach the [scanner_wand] from [src].") - playsound(src, 'sound/blank.ogg', 60, TRUE) - scanner_wand = null - -/obj/machinery/medical_kiosk/Destroy() - qdel(scanner_wand) - return ..() - -/obj/machinery/medical_kiosk/emag_act(mob/living/emagger) - ..() - if(obj_flags & EMAGGED) - return - emagger.visible_message("[emagger] waves a suspicious card by the [src]'s biometric scanner!", - "I overload the sensory electronics, the diagnostic readouts start jittering across the screen..") - obj_flags |= EMAGGED - var/obj/item/circuitboard/computer/cargo/board = circuit - board.obj_flags |= EMAGGED //Mirrors emag status onto the board as well. - pandemonium = TRUE - -/obj/machinery/medical_kiosk/examine(mob/user) - . = ..() - if(scanner_wand == null) - . += "\The [src] is missing its scanner." - else - . += "\The [src] has its scanner clipped to the side. Alt-Click to remove." - -/obj/machinery/medical_kiosk/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - var/patient_distance = 0 - if(!ishuman(user)) - to_chat(user, "[src] is unable to interface with non-humanoids!") - if (ui) - ui.close() - return - patient_distance = get_dist(src.loc,altPatient) - if(altPatient == null) - say("Scanner reset.") - altPatient = user - else if(patient_distance>5) - altPatient = null - say("Patient out of range. Resetting biometrics.") - clearScans() - return - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "medical_kiosk", name, 625, 550, master_ui, state) - ui.open() - icon_state = "kiosk_off" - RefreshParts() - H = user - C = H.get_idcard(TRUE) - -/obj/machinery/medical_kiosk/ui_data(mob/living/carbon/human/user) - var/list/data = list() - var/patient_name = altPatient.name - var/patient_status = "Alive." - var/max_health = altPatient.maxHealth - var/total_health = altPatient.health - var/brute_loss = altPatient.getBruteLoss() - var/fire_loss = altPatient.getFireLoss() - var/tox_loss = altPatient.getToxLoss() - var/oxy_loss = altPatient.getOxyLoss() - var/chaos_modifier = 0 - - var/sickness = "Patient does not show signs of disease." - var/sickness_data = "Not Applicable." - - var/bleed_status = "Patient is not currently bleeding." - var/blood_status = " Patient either has no blood, or does not require it to function." - var/blood_percent = round((altPatient.blood_volume / BLOOD_VOLUME_NORMAL)*100) - var/blood_type = altPatient.dna.blood_type - var/blood_warning = " " - - for(var/thing in altPatient.diseases) //Disease Information - var/datum/disease/D = thing - if(!(D.visibility_flags & HIDDEN_SCANNER)) - sickness = "Warning: Patient is harboring some form of viral disease. Seek further medical attention." - sickness_data = "\nName: [D.name].\nType: [D.spread_text].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure_text]" - - if(altPatient.has_dna()) //Blood levels Information - if(altPatient.bleed_rate) - bleed_status = "Patient is currently bleeding!" - if(blood_percent <= 80) - blood_warning = " Patient has low blood levels. Seek a large meal, or iron supplements." - if(blood_percent <= 60) - blood_warning = " Patient has DANGEROUSLY low blood levels. Seek a blood transfusion, iron supplements, or saline glucose immedietly. Ignoring treatment may lead to death!" - blood_status = "Patient blood levels are currently reading [blood_percent]%. Patient has [ blood_type] type blood. [blood_warning]" - - var/rad_value = altPatient.radiation - var/rad_status = "Target within normal-low radiation levels." - var/trauma_status = "Patient is free of unique brain trauma." - var/clone_loss = altPatient.getCloneLoss() - var/brain_loss = altPatient.getOrganLoss(ORGAN_SLOT_BRAIN) - var/brain_status = "Brain patterns normal." - if(LAZYLEN(user.get_traumas())) - var/list/trauma_text = list() - for(var/datum/brain_trauma/B in altPatient.get_traumas()) - var/trauma_desc = "" - switch(B.resilience) - if(TRAUMA_RESILIENCE_SURGERY) - trauma_desc += "severe " - if(TRAUMA_RESILIENCE_LOBOTOMY) - trauma_desc += "deep-rooted " - if(TRAUMA_RESILIENCE_MAGIC, TRAUMA_RESILIENCE_ABSOLUTE) - trauma_desc += "permanent " - trauma_desc += B.scan_desc - trauma_text += trauma_desc - trauma_status = "Cerebral traumas detected: patient appears to be suffering from [english_list(trauma_text)]." - - var/chem_status = FALSE - var/chemical_list= list() - var/overdose_status = FALSE - var/overdose_list = list() - var/addict_status = FALSE - var/addict_list = list() - var/hallucination_status = "Patient is not hallucinating." - - for(var/datum/reagent/R in altPatient.reagents.reagent_list) - if(R.overdosed) - overdose_status = TRUE - - if(altPatient.reagents.reagent_list.len) //Chemical Analysis details. - chem_status = TRUE - for(var/datum/reagent/R in altPatient.reagents.reagent_list) - chemical_list += list(list("name" = R.name, "volume" = round(R.volume, 0.01))) - if(R.overdosed == 1) - overdose_list += list(list("name" = R.name)) - else - chemical_list = "Patient contains no reagents" - - if(altPatient.reagents.addiction_list.len) - addict_status = TRUE - for(var/datum/reagent/R in altPatient.reagents.addiction_list) - addict_list += list(list("name" = R.name)) - if (altPatient.hallucinating()) - hallucination_status = "Subject appears to be hallucinating. Suggested treatments: bedrest, mannitol or psicodine." - - if(altPatient.stat == DEAD || HAS_TRAIT(altPatient, TRAIT_FAKEDEATH) || ((brute_loss+fire_loss+tox_loss+oxy_loss+clone_loss) >= 200)) //Patient status checks. - patient_status = "Dead." - if((brute_loss+fire_loss+tox_loss+oxy_loss+clone_loss) >= 80) - patient_status = "Gravely Injured" - else if((brute_loss+fire_loss+tox_loss+oxy_loss+clone_loss) >= 40) - patient_status = "Injured" - else if((brute_loss+fire_loss+tox_loss+oxy_loss+clone_loss) >= 20) - patient_status = "Lightly Injured" - if(pandemonium || user.hallucinating()) - patient_status = pick("The only kiosk is kiosk, but is the only patient, patient?", "Breathing manually.","Constact NTOS site admin.","97% carbon, 3% natural flavoring","The ebb and flow wears us all in time.","It's Lupus. You have Lupus.","Undergoing monkey disease.") - - if((brain_loss) >= 100) //Brain status checks. - brain_status = "Grave brain damage detected." - else if((brain_loss) >= 50) - brain_status = "Severe brain damage detected." - else if((brain_loss) >= 20) - brain_status = "Brain damage detected." - else if((brain_loss) >= 1) - brain_status = "Mild brain damage detected." //You may have a miiiild case of severe brain damage. - - if(altPatient.radiation >=1000) // - rad_status = "Patient is suffering from extreme radiation poisoning. Suggested treatment: Isolation of patient, followed by repeated dosages of Pentetic Acid." - else if(altPatient.radiation >= 500) - rad_status = "Patient is suffering from alarming radiation poisoning. Suggested treatment: Heavy use of showers and decontamination of clothing. Take Pentetic Acid or Potassium Iodine." - else if(altPatient.radiation >= 100) - rad_status = "Patient has moderate radioactive signatures. Keep under showers until symptoms subside." - - if(pandemonium == TRUE) - chaos_modifier = 1 - else if (user.hallucinating()) - chaos_modifier = 0.3 - - - data["kiosk_cost"] = active_price + (chaos_modifier * (rand(1,25))) - data["patient_name"] = patient_name - data["patient_health"] = round(((total_health - (chaos_modifier * (rand(1,50)))) / max_health) * 100, 0.001) - data["brute_health"] = round(brute_loss+(chaos_modifier * (rand(1,30))),0.001) //To break this down for easy reading, all health values are rounded to the .001 place - data["burn_health"] = round(fire_loss+(chaos_modifier * (rand(1,30))),0.001) //then a random number is added, which is multiplied by chaos modifier. - data["toxin_health"] = round(tox_loss+(chaos_modifier * (rand(1,30))),0.001) //That allows for a weaker version of the affect to be applied while hallucinating as opposed to emagged. - data["suffocation_health"] = round(oxy_loss+(chaos_modifier * (rand(1,30))),0.001) //It's not the cleanest but it does make for a colorful window. - data["clone_health"] = round(clone_loss+(chaos_modifier * (rand(1,30))),0.001) - data["brain_health"] = brain_status - data["brain_damage"] = brain_loss+(chaos_modifier * (rand(1,30))) - data["patient_status"] = patient_status - data["rad_value"] = rad_value+(chaos_modifier * (rand(1,500))) - data["rad_status"] = rad_status - data["trauma_status"] = trauma_status - data["patient_illness"] = sickness - data["illness_info"] = sickness_data - data["bleed_status"] = bleed_status - data["blood_levels"] = blood_percent - (chaos_modifier * (rand(1,35))) - data["blood_status"] = blood_status - data["are_chems_present"] = chem_status ? TRUE : FALSE - data["chemical_list"] = chemical_list - data["are_overdoses_present"] = overdose_status ? TRUE : FALSE - data["overdose_status"] = overdose_list - data["are_addictions_present"] = addict_status ? TRUE : FALSE - data["addiction_status"] = addict_list - data["hallucinating_status"] = hallucination_status - - data["active_status_1"] = scan_active_1 ? FALSE : TRUE //General Scan Check - data["active_status_2"] = scan_active_2 ? FALSE : TRUE //Symptom Scan Check - data["active_status_3"] = scan_active_3 ? FALSE : TRUE //Radio-Neuro Scan Check - data["active_status_4"] = scan_active_4 ? FALSE : TRUE //Radio-Neuro Scan Check - return data - -/obj/machinery/medical_kiosk/ui_act(action,active) - if(..()) - return - switch(action) - if("beginScan_1") - inuse() - if(paying_customer == TRUE) - scan_active_1 = TRUE - paying_customer = FALSE - if("beginScan_2") - inuse() - if(paying_customer == TRUE) - scan_active_2 = TRUE - paying_customer = FALSE - if("beginScan_3") - inuse() - if(paying_customer == TRUE) - scan_active_3 = TRUE - paying_customer = FALSE - if("beginScan_4") - inuse() - if(paying_customer == TRUE) - scan_active_4 = TRUE - paying_customer = FALSE - if("clearTarget") - altPatient = null - clearScans() - . = TRUE diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm deleted file mode 100644 index c9419ddf7e..0000000000 --- a/code/game/machinery/navbeacon.dm +++ /dev/null @@ -1,216 +0,0 @@ -// Navigation beacon for AI robots -// No longer exists on the radio controller, it is managed by a global list. - -/obj/machinery/navbeacon - - icon = 'icons/obj/objects.dmi' - icon_state = "navbeacon0-f" - name = "navigation beacon" - desc = "" - level = 1 // underfloor - layer = LOW_OBJ_LAYER - max_integrity = 500 - armor = list("melee" = 70, "bullet" = 70, "laser" = 70, "energy" = 70, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) - - var/open = FALSE // true if cover is open - var/locked = TRUE // true if controls are locked - var/freq = FREQ_NAV_BEACON - var/location = "" // location response text - var/list/codes // assoc. list of transponder codes - var/codes_txt = "" // codes as set on map: "tag1;tag2" or "tag1=value;tag2=value" - - req_one_access = list(ACCESS_ENGINE, ACCESS_ROBOTICS) - -/obj/machinery/navbeacon/Initialize() - . = ..() - - set_codes() - - var/turf/T = loc - hide(T.intact) - if(!codes) - return - if(codes["patrol"]) - if(!GLOB.navbeacons["[z]"]) - GLOB.navbeacons["[z]"] = list() - GLOB.navbeacons["[z]"] += src //Register with the patrol list! - if(codes["delivery"]) - GLOB.deliverybeacons += src - GLOB.deliverybeacontags += location - -/obj/machinery/navbeacon/Destroy() - if (GLOB.navbeacons["[z]"]) - GLOB.navbeacons["[z]"] -= src //Remove from beacon list, if in one. - GLOB.deliverybeacons -= src - return ..() - -/obj/machinery/navbeacon/onTransitZ(old_z, new_z) - if (GLOB.navbeacons["[old_z]"]) - GLOB.navbeacons["[old_z]"] -= src - if (GLOB.navbeacons["[new_z]"]) - GLOB.navbeacons["[new_z]"] += src - ..() - -// set the transponder codes assoc list from codes_txt -/obj/machinery/navbeacon/proc/set_codes() - if(!codes_txt) - return - - codes = new() - - var/list/entries = splittext(codes_txt, ";") // entries are separated by semicolons - - for(var/e in entries) - var/index = findtext(e, "=") // format is "key=value" - if(index) - var/key = copytext(e, 1, index) - var/val = copytext(e, index+1) - codes[key] = val - else - codes[e] = "1" - - -// called when turf state changes -// hide the object if turf is intact -/obj/machinery/navbeacon/hide(intact) - invisibility = intact ? INVISIBILITY_MAXIMUM : 0 - update_icon() - -// update the icon_state -/obj/machinery/navbeacon/update_icon_state() - var/state="navbeacon[open]" - - if(invisibility) - icon_state = "[state]-f" // if invisible, set icon to faded version - // in case revealed by T-scanner - else - icon_state = "[state]" - -/obj/machinery/navbeacon/attackby(obj/item/I, mob/user, params) - var/turf/T = loc - if(T.intact) - return // prevent intraction when T-scanner revealed - - if(I.tool_behaviour == TOOL_SCREWDRIVER) - open = !open - - user.visible_message("[user] [open ? "opens" : "closes"] the beacon's cover.", "I [open ? "open" : "close"] the beacon's cover.") - - update_icon() - - else if (istype(I, /obj/item/card/id)||istype(I, /obj/item/pda)) - if(open) - if (src.allowed(user)) - src.locked = !src.locked - to_chat(user, "Controls are now [src.locked ? "locked" : "unlocked"].") - else - to_chat(user, "Access denied.") - updateDialog() - else - to_chat(user, "I must open the cover first!") - else - return ..() - -/obj/machinery/navbeacon/attack_ai(mob/user) - interact(user, 1) - -/obj/machinery/navbeacon/attack_paw() - return - -/obj/machinery/navbeacon/ui_interact(mob/user) - . = ..() - var/ai = isAI(user) - var/turf/T = loc - if(T.intact) - return // prevent intraction when T-scanner revealed - - if(!open && !ai) // can't alter controls if not open, unless you're an AI - to_chat(user, "The beacon's control cover is closed!") - return - - - var/t - - if(locked && !ai) - t = {"Navigation Beacon

-(swipe card to unlock controls)
-Location: [location ? location : "(none)"]
-Transponder Codes:
    "} - - for(var/key in codes) - t += "
  • [key] ... [codes[key]]" - t+= "
      " - - else - - t = {"Navigation Beacon

      -(swipe card to lock controls)
      - -
      -Location: [location ? location : "None"]
      -Transponder Codes:
        "} - - for(var/key in codes) - t += "
      • [key] ... [codes[key]]" - t += " Edit" - t += " Delete
        " - t += " Add New
        " - t+= "
          " - - var/datum/browser/popup = new(user, "navbeacon", "Navigation Beacon", 300, 400) - popup.set_content(t) - popup.open() - return - -/obj/machinery/navbeacon/Topic(href, href_list) - if(..()) - return - if(open && !locked) - usr.set_machine(src) - - if(href_list["locedit"]) - var/newloc = copytext(sanitize(input("Enter New Location", "Navigation Beacon", location) as text|null),1,MAX_MESSAGE_LEN) - if(newloc) - location = newloc - updateDialog() - - else if(href_list["edit"]) - var/codekey = href_list["code"] - - var/newkey = stripped_input(usr, "Enter Transponder Code Key", "Navigation Beacon", codekey) - if(!newkey) - return - - var/codeval = codes[codekey] - var/newval = stripped_input(usr, "Enter Transponder Code Value", "Navigation Beacon", codeval) - if(!newval) - newval = codekey - return - - codes.Remove(codekey) - codes[newkey] = newval - - updateDialog() - - else if(href_list["delete"]) - var/codekey = href_list["code"] - codes.Remove(codekey) - updateDialog() - - else if(href_list["add"]) - - var/newkey = stripped_input(usr, "Enter New Transponder Code Key", "Navigation Beacon") - if(!newkey) - return - - var/newval = stripped_input(usr, "Enter New Transponder Code Value", "Navigation Beacon") - if(!newval) - newval = "1" - return - - if(!codes) - codes = new() - - codes[newkey] = newval - - updateDialog() diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm deleted file mode 100644 index d287c1d187..0000000000 --- a/code/game/machinery/newscaster.dm +++ /dev/null @@ -1,1030 +0,0 @@ -GLOBAL_DATUM_INIT(news_network, /datum/newscaster/feed_network, new) -GLOBAL_LIST_EMPTY(allCasters) - -/datum/newscaster - -/datum/newscaster/feed_comment - var/author = "" - var/body = "" - var/time_stamp = "" - -/datum/newscaster/feed_message - var/author ="" - var/body ="" - var/list/authorCensorTime = list() - var/list/bodyCensorTime = list() - var/is_admin_message = 0 - var/icon/img = null - var/time_stamp = "" - var/list/datum/newscaster/feed_comment/comments = list() - var/locked = FALSE - var/caption = "" - var/creationTime - var/authorCensor - var/bodyCensor - var/photo_file - -/datum/newscaster/feed_message/proc/returnAuthor(censor) - if(censor == -1) - censor = authorCensor - var/txt = "[GLOB.news_network.redactedText]" - if(!censor) - txt = author - return txt - -/datum/newscaster/feed_message/proc/returnBody(censor) - if(censor == -1) - censor = bodyCensor - var/txt = "[GLOB.news_network.redactedText]" - if(!censor) - txt = body - return txt - -/datum/newscaster/feed_message/proc/toggleCensorAuthor() - if(authorCensor) - authorCensorTime.Add(GLOB.news_network.lastAction*-1) - else - authorCensorTime.Add(GLOB.news_network.lastAction) - authorCensor = !authorCensor - GLOB.news_network.lastAction ++ - -/datum/newscaster/feed_message/proc/toggleCensorBody() - if(bodyCensor) - bodyCensorTime.Add(GLOB.news_network.lastAction*-1) - else - bodyCensorTime.Add(GLOB.news_network.lastAction) - bodyCensor = !bodyCensor - GLOB.news_network.lastAction ++ - -/datum/newscaster/feed_channel - var/channel_name = "" - var/list/datum/newscaster/feed_message/messages = list() - var/locked = FALSE - var/author = "" - var/censored = 0 - var/list/authorCensorTime = list() - var/list/DclassCensorTime = list() - var/authorCensor - var/is_admin_channel = 0 - -/datum/newscaster/feed_channel/proc/returnAuthor(censor) - if(censor == -1) - censor = authorCensor - var/txt = "[GLOB.news_network.redactedText]" - if(!censor) - txt = author - return txt - -/datum/newscaster/feed_channel/proc/toggleCensorDclass() - if(censored) - DclassCensorTime.Add(GLOB.news_network.lastAction*-1) - else - DclassCensorTime.Add(GLOB.news_network.lastAction) - censored = !censored - GLOB.news_network.lastAction ++ - -/datum/newscaster/feed_channel/proc/toggleCensorAuthor() - if(authorCensor) - authorCensorTime.Add(GLOB.news_network.lastAction*-1) - else - authorCensorTime.Add(GLOB.news_network.lastAction) - authorCensor = !authorCensor - GLOB.news_network.lastAction ++ - -/datum/newscaster/wanted_message - var/active - var/criminal - var/body - var/scannedUser - var/isAdminMsg - var/icon/img - var/photo_file - -/datum/newscaster/feed_network - var/list/datum/newscaster/feed_channel/network_channels = list() - var/datum/newscaster/wanted_message/wanted_issue - var/lastAction - var/redactedText = "\[REDACTED\]" - -/datum/newscaster/feed_network/New() - CreateFeedChannel("Station Announcements", "SS13", 1) - wanted_issue = new /datum/newscaster/wanted_message - -/datum/newscaster/feed_network/proc/CreateFeedChannel(channel_name, author, locked, adminChannel = 0) - var/datum/newscaster/feed_channel/newChannel = new /datum/newscaster/feed_channel - newChannel.channel_name = channel_name - newChannel.author = author - newChannel.locked = locked - newChannel.is_admin_channel = adminChannel - network_channels += newChannel - -/datum/newscaster/feed_network/proc/SubmitArticle(msg, author, channel_name, datum/picture/picture, adminMessage = 0, allow_comments = 1) - var/datum/newscaster/feed_message/newMsg = new /datum/newscaster/feed_message - newMsg.author = author - newMsg.body = msg - newMsg.time_stamp = "[station_time_timestamp()]" - newMsg.is_admin_message = adminMessage - newMsg.locked = !allow_comments - if(picture) - newMsg.img = picture.picture_image - newMsg.caption = picture.caption - newMsg.photo_file = save_photo(picture.picture_image) - for(var/datum/newscaster/feed_channel/FC in network_channels) - if(FC.channel_name == channel_name) - FC.messages += newMsg - break - for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters) - NEWSCASTER.newsAlert(channel_name) - lastAction ++ - newMsg.creationTime = lastAction - -/datum/newscaster/feed_network/proc/submitWanted(criminal, body, scanned_user, datum/picture/picture, adminMsg = 0, newMessage = 0) - wanted_issue.active = 1 - wanted_issue.criminal = criminal - wanted_issue.body = body - wanted_issue.scannedUser = scanned_user - wanted_issue.isAdminMsg = adminMsg - if(picture) - wanted_issue.img = picture.picture_image - wanted_issue.photo_file = save_photo(picture.picture_image) - if(newMessage) - for(var/obj/machinery/newscaster/N in GLOB.allCasters) - N.newsAlert() - N.update_icon() - -/datum/newscaster/feed_network/proc/deleteWanted() - wanted_issue.active = 0 - wanted_issue.criminal = null - wanted_issue.body = null - wanted_issue.scannedUser = null - wanted_issue.img = null - for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters) - NEWSCASTER.update_icon() - -/datum/newscaster/feed_network/proc/save_photo(icon/photo) - var/photo_file = copytext(md5("\icon[photo]"), 1, 6) - if(!fexists("[GLOB.log_directory]/photos/[photo_file].png")) - //Clean up repeated frames - var/icon/clean = new /icon() - clean.Insert(photo, "", SOUTH, 1, 0) - fcopy(clean, "[GLOB.log_directory]/photos/[photo_file].png") - return photo_file - -/obj/item/wallframe/newscaster - name = "newscaster frame" - desc = "" - icon_state = "newscaster" - custom_materials = list(/datum/material/iron=14000, /datum/material/glass=8000) - result_path = /obj/machinery/newscaster - - -/obj/machinery/newscaster - name = "newscaster" - desc = "" - icon = 'icons/obj/terminals.dmi' - icon_state = "newscaster_normal" - verb_say = "beeps" - verb_ask = "beeps" - verb_exclaim = "beeps" - armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) - max_integrity = 200 - integrity_failure = 0.25 - var/screen = 0 - var/paper_remaining = 15 - var/securityCaster = 0 - var/unit_no = 0 - var/alert_delay = 500 - var/alert = FALSE - var/scanned_user = "Unknown" - var/msg = "" - var/datum/picture/picture - var/channel_name = "" - var/c_locked=0 - var/datum/newscaster/feed_channel/viewing_channel = null - var/allow_comments = 1 - -/obj/machinery/newscaster/security_unit - name = "security newscaster" - securityCaster = 1 - -/obj/machinery/newscaster/Initialize(mapload, ndir, building) - . = ..() - if(building) - setDir(ndir) - pixel_x = (dir & 3)? 0 : (dir == 4 ? -32 : 32) - pixel_y = (dir & 3)? (dir ==1 ? -32 : 32) : 0 - - GLOB.allCasters += src - unit_no = GLOB.allCasters.len - update_icon() - -/obj/machinery/newscaster/Destroy() - GLOB.allCasters -= src - viewing_channel = null - picture = null - return ..() - -/obj/machinery/newscaster/update_icon_state() - if(stat & (NOPOWER|BROKEN)) - icon_state = "newscaster_off" - else - if(GLOB.news_network.wanted_issue.active) - icon_state = "newscaster_wanted" - else - icon_state = "newscaster_normal" - -/obj/machinery/newscaster/update_overlays() - . = ..() - - if(!(stat & (NOPOWER|BROKEN)) && !GLOB.news_network.wanted_issue.active && alert) - . += "newscaster_alert" - - var/hp_percent = obj_integrity * 100 /max_integrity - switch(hp_percent) - if(75 to 100) - return - if(50 to 75) - . += "crack1" - if(25 to 50) - . += "crack2" - else - . += "crack3" - -/obj/machinery/newscaster/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) - . = ..() - update_icon() - -/obj/machinery/newscaster/ui_interact(mob/user) - . = ..() - if(ishuman(user) || issilicon(user)) - var/mob/living/human_or_robot_user = user - var/dat - scan_user(human_or_robot_user) - switch(screen) - if(0) - dat += "Welcome to Newscasting Unit #[unit_no].
          Interface & News networks Operational." - dat += "
          Property of Nanotrasen Inc" - if(GLOB.news_network.wanted_issue.active) - dat+= "
          Read Wanted Issue" - dat+= "

          Create Feed Channel" - dat+= "
          View Feed Channels" - dat+= "
          Submit new Feed story" - dat+= "
          Print newspaper" - dat+= "
          Re-scan User" - dat+= "

          Exit" - if(securityCaster) - var/wanted_already = 0 - if(GLOB.news_network.wanted_issue.active) - wanted_already = 1 - dat+="
          Feed Security functions:
          " - dat+="
          [(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue" - dat+="
          Censor Feed Stories" - dat+="
          Mark Feed Channel with Nanotrasen D-Notice" - dat+="

          The newscaster recognises you as: [scanned_user]" - if(1) - dat+= "Station Feed Channels
          " - if( isemptylist(GLOB.news_network.network_channels) ) - dat+="No active channels found..." - else - for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) - if(CHANNEL.is_admin_channel) - dat+="[CHANNEL.channel_name]
          " - else - dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ""]
          " - dat+="

          Refresh" - dat+="
          Back" - if(2) - dat+="Creating new Feed Channel..." - dat+="
          Channel Name: [channel_name]
          " - dat+="Channel Author: [scanned_user]
          " - dat+="Will Accept Public Feeds: [(c_locked) ? ("NO") : ("YES")]

          " - dat+="
          Submit

          Cancel
          " - if(3) - dat+="Creating new Feed Message..." - dat+="
          Receiving Channel: [channel_name]
          " - dat+="Message Author: [scanned_user]
          " - dat+="Message Body:
          [parsemarkdown(msg, user)]
          " - dat+="Attach Photo: [(picture ? "Photo Attached" : "No Photo")]
          " - dat+="Comments [allow_comments ? "Enabled" : "Disabled"]
          " - dat+="
          Submit

          Cancel
          " - if(4) - dat+="Feed story successfully submitted to [channel_name].

          " - dat+="
          Return
          " - if(5) - dat+="Feed Channel [channel_name] created successfully.

          " - dat+="
          Return
          " - if(6) - dat+="ERROR: Could not submit Feed story to Network.

          " - if(channel_name=="") - dat+="Invalid receiving channel name.
          " - if(scanned_user=="Unknown") - dat+="Channel author unverified.
          " - if(msg == "" || msg == "\[REDACTED\]") - dat+="Invalid message body.
          " - dat+="
          Return
          " - if(7) - dat+="ERROR: Could not submit Feed Channel to Network.

          " - var/list/existing_authors = list() - for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) - if(FC.authorCensor) - existing_authors += GLOB.news_network.redactedText - else - existing_authors += FC.author - if(scanned_user in existing_authors) - dat+="There is already a Feed channel under your name.
          " - if(channel_name=="" || channel_name == "\[REDACTED\]") - dat+="Invalid channel name.
          " - var/check = 0 - for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) - if(FC.channel_name == channel_name) - check = 1 - break - if(check) - dat+="Channel name already in use.
          " - if(scanned_user=="Unknown") - dat+="Channel author unverified.
          " - dat+="
          Return
          " - if(8) - var/total_num=length(GLOB.news_network.network_channels) - var/active_num=total_num - var/message_num=0 - for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) - if(!FC.censored) - message_num += length(FC.messages) - else - active_num-- - dat+="Network currently serves a total of [total_num] Feed channels, [active_num] of which are active, and a total of [message_num] Feed Stories." - dat+="

          Liquid Paper remaining: [(paper_remaining) *100 ] cm^3" - dat+="

          Print Paper" - dat+="
          Cancel" - if(9) - dat+="[viewing_channel.channel_name]: \[created by: [viewing_channel.returnAuthor(-1)]\]
          " - if(viewing_channel.censored) - dat+="ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.
          " - dat+="No further feed story additions are allowed while the D-Notice is in effect.

          " - else - if( isemptylist(viewing_channel.messages) ) - dat+="No feed messages found in channel...
          " - else - var/i = 0 - for(var/datum/newscaster/feed_message/MESSAGE in viewing_channel.messages) - i++ - dat+="-[MESSAGE.returnBody(-1)]
          " - if(MESSAGE.img) - usr << browse_rsc(MESSAGE.img, "tmp_photo[i].png") - dat+="
          " - if(MESSAGE.caption) - dat+="[MESSAGE.caption]
          " - dat+="
          " - dat+="\[Story by [MESSAGE.returnAuthor(-1)] \] - ([MESSAGE.time_stamp])
          " - dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""]
          " - for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments) - dat+="[comment.body]
          [comment.author] [comment.time_stamp]
          " - if(MESSAGE.locked) - dat+="Comments locked
          " - else - dat+="Comment
          " - dat+="

          Refresh" - dat+="
          Back" - if(10) - dat+="Nanotrasen Feed Censorship Tool
          " - dat+="NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.
          " - dat+="Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.
          " - dat+="
          Select Feed channel to get Stories from:
          " - if(isemptylist(GLOB.news_network.network_channels)) - dat+="No feed channels found active...
          " - else - for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) - dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ""]
          " - dat+="
          Cancel" - if(11) - dat+="Nanotrasen D-Notice Handler
          " - dat+="A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's" - dat+="morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed" - dat+="stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.
          " - if(isemptylist(GLOB.news_network.network_channels)) - dat+="No feed channels found active...
          " - else - for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) - dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ""]
          " - dat+="
          Back" - if(12) - dat+="[viewing_channel.channel_name]: \[ created by: [viewing_channel.returnAuthor(-1)] \]
          " - dat+="[(viewing_channel.authorCensor) ? ("Undo Author censorship") : ("Censor channel Author")]
          " - if(isemptylist(viewing_channel.messages)) - dat+="No feed messages found in channel...
          " - else - for(var/datum/newscaster/feed_message/MESSAGE in viewing_channel.messages) - dat+="-[MESSAGE.returnBody(-1)]
          \[Story by [MESSAGE.returnAuthor(-1)]\]
          " - dat+="[(MESSAGE.bodyCensor) ? ("Undo story censorship") : ("Censor story")] - [(MESSAGE.authorCensor) ? ("Undo Author Censorship") : ("Censor message Author")]
          " - dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""]: [MESSAGE.locked ? "Unlock" : "Lock"]
          " - for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments) - dat+="[comment.body] X
          [comment.author] [comment.time_stamp]
          " - dat+="
          Back" - if(13) - dat+="[viewing_channel.channel_name]: \[ created by: [viewing_channel.returnAuthor(-1)] \]
          " - dat+="Channel messages listed below. If you deem them dangerous to the station, you can Bestow a D-Notice upon the channel.
          " - if(viewing_channel.censored) - dat+="ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.
          " - dat+="No further feed story additions are allowed while the D-Notice is in effect.


          " - else - if(isemptylist(viewing_channel.messages)) - dat+="No feed messages found in channel...
          " - else - for(var/datum/newscaster/feed_message/MESSAGE in viewing_channel.messages) - dat+="-[MESSAGE.returnBody(-1)]
          \[Story by [MESSAGE.returnAuthor(-1)]\]
          " - dat+="
          Back" - if(14) - dat+="Wanted Issue Handler:" - var/wanted_already = 0 - var/end_param = 1 - if(GLOB.news_network.wanted_issue.active) - wanted_already = 1 - end_param = 2 - if(wanted_already) - dat+="
          A wanted issue is already in Feed Circulation. You can edit or cancel it below.
          " - dat+="
          " - dat+="Criminal Name: [channel_name]
          " - dat+="Description: [msg]
          " - dat+="Attach Photo: [(picture ? "Photo Attached" : "No Photo")]
          " - if(wanted_already) - dat+="Wanted Issue created by:[GLOB.news_network.wanted_issue.scannedUser]
          " - else - dat+="Wanted Issue will be created under prosecutor:[scanned_user]
          " - dat+="
          [(wanted_already) ? ("Edit Issue") : ("Submit")]" - if(wanted_already) - dat+="
          Take down Issue" - dat+="
          Cancel" - if(15) - dat+="Wanted issue for [channel_name] is now in Network Circulation.

          " - dat+="
          Return
          " - if(16) - dat+="ERROR: Wanted Issue rejected by Network.

          " - if(channel_name=="" || channel_name == "\[REDACTED\]") - dat+="Invalid name for person wanted.
          " - if(scanned_user=="Unknown") - dat+="Issue author unverified.
          " - if(msg == "" || msg == "\[REDACTED\]") - dat+="Invalid description.
          " - dat+="
          Return
          " - if(17) - dat+="Wanted Issue successfully deleted from Circulation
          " - dat+="
          Return
          " - if(18) - if(GLOB.news_network.wanted_issue.active) - dat+="-- STATIONWIDE WANTED ISSUE --
          \[Submitted by: [GLOB.news_network.wanted_issue.scannedUser]\]
          " - dat+="Criminal: [GLOB.news_network.wanted_issue.criminal]
          " - dat+="Description: [GLOB.news_network.wanted_issue.body]
          " - dat+="Photo:: " - if(GLOB.news_network.wanted_issue.img) - usr << browse_rsc(GLOB.news_network.wanted_issue.img, "tmp_photow.png") - dat+="
          " - else - dat+="None" - else - dat+="No current wanted issue found.

          " - dat+="

          Back
          " - if(19) - dat+="Wanted issue for [channel_name] successfully edited.

          " - dat+="
          Return
          " - if(20) - dat+="Printing successful. Please receive your newspaper from the bottom of the machine.

          " - dat+="Return" - if(21) - dat+="Unable to print newspaper. Insufficient paper. Please notify maintenance personnel to refill machine storage.

          " - dat+="Return" - var/datum/browser/popup = new(human_or_robot_user, "newscaster_main", "Newscaster Unit #[unit_no]", 400, 600) - popup.set_content(dat) - popup.set_title_image(human_or_robot_user.browse_rsc_icon(icon, icon_state)) - popup.open() - -/obj/machinery/newscaster/Topic(href, href_list) - if(..()) - return - if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && isturf(loc))) || issilicon(usr)) - usr.set_machine(src) - scan_user(usr) - if(href_list["set_channel_name"]) - channel_name = stripped_input(usr, "Provide a Feed Channel Name", "Network Channel Handler", "", MAX_NAME_LEN) - while (findtext(channel_name," ") == 1) - channel_name = copytext(channel_name,2,length(channel_name)+1) - updateUsrDialog() - else if(href_list["set_channel_lock"]) - c_locked = !c_locked - updateUsrDialog() - else if(href_list["submit_new_channel"]) - var/list/existing_authors = list() - for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) - if(FC.authorCensor) - existing_authors += GLOB.news_network.redactedText - else - existing_authors += FC.author - var/check = 0 - for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) - if(FC.channel_name == channel_name) - check = 1 - break - if(channel_name == "" || channel_name == "\[REDACTED\]" || scanned_user == "Unknown" || check || (scanned_user in existing_authors) ) - screen=7 - else - var/choice = alert("Please confirm Feed channel creation","Network Channel Handler","Confirm","Cancel") - if(choice=="Confirm") - scan_user(usr) - GLOB.news_network.CreateFeedChannel(channel_name, scanned_user, c_locked) - SSblackbox.record_feedback("text", "newscaster_channels", 1, "[channel_name]") - screen=5 - updateUsrDialog() - else if(href_list["set_channel_receiving"]) - var/list/available_channels = list() - for(var/datum/newscaster/feed_channel/F in GLOB.news_network.network_channels) - if( (!F.locked || F.author == scanned_user) && !F.censored) - available_channels += F.channel_name - channel_name = input(usr, "Choose receiving Feed Channel", "Network Channel Handler") in sortList(available_channels) - updateUsrDialog() - else if(href_list["set_new_message"]) - var/temp_message = trim(stripped_multiline_input(usr, "Write your Feed story", "Network Channel Handler", msg)) - if(temp_message) - msg = temp_message - updateUsrDialog() - else if(href_list["set_attachment"]) - AttachPhoto(usr) - updateUsrDialog() - else if(href_list["submit_new_message"]) - if(msg =="" || msg=="\[REDACTED\]" || scanned_user == "Unknown" || channel_name == "" ) - screen=6 - else - GLOB.news_network.SubmitArticle("[parsemarkdown(msg, usr)]", scanned_user, channel_name, picture, 0, allow_comments) - SSblackbox.record_feedback("amount", "newscaster_stories", 1) - screen=4 - msg = "" - updateUsrDialog() - else if(href_list["create_channel"]) - screen=2 - updateUsrDialog() - else if(href_list["create_feed_story"]) - screen=3 - updateUsrDialog() - else if(href_list["menu_paper"]) - screen=8 - updateUsrDialog() - else if(href_list["print_paper"]) - if(!paper_remaining) - screen=21 - else - print_paper() - screen = 20 - updateUsrDialog() - else if(href_list["menu_censor_story"]) - screen=10 - updateUsrDialog() - else if(href_list["menu_censor_channel"]) - screen=11 - updateUsrDialog() - else if(href_list["menu_wanted"]) - var/already_wanted = 0 - if(GLOB.news_network.wanted_issue.active) - already_wanted = 1 - if(already_wanted) - channel_name = GLOB.news_network.wanted_issue.criminal - msg = GLOB.news_network.wanted_issue.body - screen = 14 - updateUsrDialog() - else if(href_list["set_wanted_name"]) - channel_name = stripped_input(usr, "Provide the name of the Wanted person", "Network Security Handler") - updateUsrDialog() - else if(href_list["set_wanted_desc"]) - msg = stripped_input(usr, "Provide a description of the Wanted person and any other details you deem important", "Network Security Handler") - updateUsrDialog() - else if(href_list["submit_wanted"]) - var/input_param = text2num(href_list["submit_wanted"]) - if(msg == "" || channel_name == "" || scanned_user == "Unknown") - screen = 16 - else - var/choice = alert("Please confirm Wanted Issue [(input_param==1) ? ("creation.") : ("edit.")]","Network Security Handler","Confirm","Cancel") - if(choice=="Confirm") - scan_user(usr) - if(input_param==1) //If input_param == 1 we're submitting a new wanted issue. At 2 we're just editing an existing one. - GLOB.news_network.submitWanted(channel_name, msg, scanned_user, picture, 0 , 1) - screen = 15 - else - if(GLOB.news_network.wanted_issue.isAdminMsg) - alert("The wanted issue has been distributed by a Nanotrasen higherup. You cannot edit it.","Ok") - return - GLOB.news_network.submitWanted(channel_name, msg, scanned_user, picture) - screen = 19 - updateUsrDialog() - else if(href_list["cancel_wanted"]) - if(GLOB.news_network.wanted_issue.isAdminMsg) - alert("The wanted issue has been distributed by a Nanotrasen higherup. You cannot take it down.","Ok") - return - var/choice = alert("Please confirm Wanted Issue removal","Network Security Handler","Confirm","Cancel") - if(choice=="Confirm") - GLOB.news_network.deleteWanted() - screen=17 - updateUsrDialog() - else if(href_list["view_wanted"]) - screen=18 - updateUsrDialog() - else if(href_list["censor_channel_author"]) - var/datum/newscaster/feed_channel/FC = locate(href_list["censor_channel_author"]) in GLOB.news_network.network_channels - if(FC.is_admin_channel) - alert("This channel was created by a Nanotrasen Officer. You cannot censor it.","Ok") - return - FC.toggleCensorAuthor() - updateUsrDialog() - else if(href_list["censor_channel_story_author"]) - var/datum/newscaster/feed_message/MSG = locate(href_list["censor_channel_story_author"]) in viewing_channel.messages - if(MSG.is_admin_message) - alert("This message was created by a Nanotrasen Officer. You cannot censor its author.","Ok") - return - MSG.toggleCensorAuthor() - updateUsrDialog() - else if(href_list["censor_channel_story_body"]) - var/datum/newscaster/feed_message/MSG = locate(href_list["censor_channel_story_body"]) in viewing_channel.messages - if(MSG.is_admin_message) - alert("This channel was created by a Nanotrasen Officer. You cannot censor it.","Ok") - return - MSG.toggleCensorBody() - updateUsrDialog() - else if(href_list["pick_d_notice"]) - var/datum/newscaster/feed_channel/FC = locate(href_list["pick_d_notice"]) in GLOB.news_network.network_channels - viewing_channel = FC - screen=13 - updateUsrDialog() - else if(href_list["toggle_d_notice"]) - var/datum/newscaster/feed_channel/FC = locate(href_list["toggle_d_notice"]) in GLOB.news_network.network_channels - if(FC.is_admin_channel) - alert("This channel was created by a Nanotrasen Officer. You cannot place a D-Notice upon it.","Ok") - return - FC.toggleCensorDclass() - updateUsrDialog() - else if(href_list["view"]) - screen=1 - updateUsrDialog() - else if(href_list["setScreen"]) - screen = text2num(href_list["setScreen"]) - if (screen == 0) - scanned_user = "Unknown"; - msg = ""; - c_locked=0; - channel_name=""; - viewing_channel = null - updateUsrDialog() - else if(href_list["show_channel"]) - var/datum/newscaster/feed_channel/FC = locate(href_list["show_channel"]) in GLOB.news_network.network_channels - viewing_channel = FC - screen = 9 - updateUsrDialog() - else if(href_list["pick_censor_channel"]) - var/datum/newscaster/feed_channel/FC = locate(href_list["pick_censor_channel"]) in GLOB.news_network.network_channels - viewing_channel = FC - screen = 12 - updateUsrDialog() - else if(href_list["new_comment"]) - var/datum/newscaster/feed_message/FM = locate(href_list["new_comment"]) in viewing_channel.messages - var/cominput = copytext(stripped_input(usr, "Write your message:", "New comment", null),1,141) - if(cominput) - scan_user(usr) - var/datum/newscaster/feed_comment/FC = new/datum/newscaster/feed_comment - FC.author = scanned_user - FC.body = cominput - FC.time_stamp = station_time_timestamp() - FM.comments += FC - usr.log_message("(as [scanned_user]) commented on message [FM.returnBody(-1)] -- [FC.body]", LOG_COMMENT) - updateUsrDialog() - else if(href_list["del_comment"]) - var/datum/newscaster/feed_message/FM = locate(href_list["del_comment_msg"]) in viewing_channel.messages - var/datum/newscaster/feed_comment/FC = locate(href_list["del_comment"]) in FM.comments - if(istype(FC) && istype(FM)) - FM.comments -= FC - qdel(FC) - updateUsrDialog() - else if(href_list["lock_comment"]) - var/datum/newscaster/feed_message/FM = locate(href_list["lock_comment"]) in viewing_channel.messages - FM.locked ^= 1 - updateUsrDialog() - else if(href_list["set_comment"]) - allow_comments ^= 1 - updateUsrDialog() - else if(href_list["refresh"]) - updateUsrDialog() - -/obj/machinery/newscaster/attackby(obj/item/I, mob/living/user, params) - if(I.tool_behaviour == TOOL_WRENCH) - to_chat(user, "I start [anchored ? "un" : ""]securing [name]...") - I.play_tool_sound(src) - if(I.use_tool(src, user, 60)) - playsound(loc, 'sound/blank.ogg', 50, TRUE) - if(stat & BROKEN) - to_chat(user, "The broken remains of [src] fall on the ground.") - new /obj/item/stack/sheet/metal(loc, 5) - new /obj/item/shard(loc) - new /obj/item/shard(loc) - else - to_chat(user, "I [anchored ? "un" : ""]secure [name].") - new /obj/item/wallframe/newscaster(loc) - qdel(src) - else if(I.tool_behaviour == TOOL_WELDER && user.used_intent.type != INTENT_HARM) - if(stat & BROKEN) - if(!I.tool_start_check(user, amount=0)) - return - user.visible_message("[user] is repairing [src].", \ - "I begin repairing [src]...", \ - "I hear welding.") - if(I.use_tool(src, user, 40, volume=50)) - if(!(stat & BROKEN)) - return - to_chat(user, "I repair [src].") - obj_integrity = max_integrity - stat &= ~BROKEN - update_icon() - else - to_chat(user, "[src] does not need repairs.") - else - return ..() - -/obj/machinery/newscaster/play_attack_sound(damage, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - if(stat & BROKEN) - playsound(loc, 'sound/blank.ogg', 100, TRUE) - else - playsound(loc, 'sound/blank.ogg', 90, TRUE) - if(BURN) - playsound(src.loc, 'sound/blank.ogg', 100, TRUE) - - -/obj/machinery/newscaster/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/sheet/metal(loc, 2) - new /obj/item/shard(loc) - new /obj/item/shard(loc) - qdel(src) - -/obj/machinery/newscaster/obj_break(damage_flag) - . = ..() - if(.) - playsound(loc, 'sound/blank.ogg', 100, TRUE) - - -/obj/machinery/newscaster/attack_paw(mob/user) - if(user.used_intent.type != INTENT_HARM) - to_chat(user, "The newscaster controls are far too complicated for your tiny brain!") - else - take_damage(5, BRUTE, "melee") - -/obj/machinery/newscaster/proc/AttachPhoto(mob/user) - var/obj/item/photo/photo = user.is_holding_item_of_type(/obj/item/photo) - if(photo) - picture = photo.picture - if(issilicon(user)) - var/obj/item/camera/siliconcam/targetcam - if(isAI(user)) - var/mob/living/silicon/ai/R = user - targetcam = R.aicamera - else if(ispAI(user)) - var/mob/living/silicon/pai/R = user - targetcam = R.aicamera - else if(iscyborg(user)) - var/mob/living/silicon/robot/R = user - if(R.connected_ai) - targetcam = R.connected_ai.aicamera - else - targetcam = R.aicamera - else - to_chat(user, "I cannot interface with silicon photo uploading!") - if(!targetcam.stored.len) - to_chat(usr, "No images saved.") - return - var/datum/picture/selection = targetcam.selectpicture(user) - if(selection) - picture = selection - -/obj/machinery/newscaster/proc/scan_user(mob/living/user) - if(ishuman(user)) - var/mob/living/carbon/human/human_user = user - if(human_user.wear_ring) - if(istype(human_user.wear_ring, /obj/item/pda)) - var/obj/item/pda/P = human_user.wear_ring - if(P.id) - scanned_user = "[P.id.registered_name] ([P.id.assignment])" - else - scanned_user = "Unknown" - else if(istype(human_user.wear_ring, /obj/item/card/id) ) - var/obj/item/card/id/ID = human_user.wear_ring - scanned_user ="[ID.registered_name] ([ID.assignment])" - else - scanned_user ="Unknown" - else - scanned_user ="Unknown" - else if(issilicon(user)) - var/mob/living/silicon/ai_user = user - scanned_user = "[ai_user.name] ([ai_user.job])" - else - CRASH("Invalid user for this proc") - -/obj/machinery/newscaster/proc/print_paper() - SSblackbox.record_feedback("amount", "newspapers_printed", 1) - var/obj/item/newspaper/NEWSPAPER = new /obj/item/newspaper - for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) - NEWSPAPER.news_content += FC - if(GLOB.news_network.wanted_issue.active) - NEWSPAPER.wantedAuthor = GLOB.news_network.wanted_issue.scannedUser - NEWSPAPER.wantedCriminal = GLOB.news_network.wanted_issue.criminal - NEWSPAPER.wantedBody = GLOB.news_network.wanted_issue.body - if(GLOB.news_network.wanted_issue.img) - NEWSPAPER.wantedPhoto = GLOB.news_network.wanted_issue.img - NEWSPAPER.forceMove(drop_location()) - NEWSPAPER.creationTime = GLOB.news_network.lastAction - paper_remaining-- - - -/obj/machinery/newscaster/proc/remove_alert() - alert = FALSE - update_icon() - -/obj/machinery/newscaster/proc/newsAlert(channel) - if(channel) - say("Breaking news from [channel]!") - alert = TRUE - update_icon() - addtimer(CALLBACK(src,PROC_REF(remove_alert)),alert_delay,TIMER_UNIQUE|TIMER_OVERRIDE) - playsound(loc, 'sound/blank.ogg', 75, TRUE) - else - say("Attention! Wanted issue distributed!") - playsound(loc, 'sound/blank.ogg', 75, TRUE) - - -/obj/item/newspaper - name = "newspaper" - desc = "" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "newspaper" - lefthand_file = 'icons/mob/inhands/misc/books_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/books_righthand.dmi' - w_class = WEIGHT_CLASS_SMALL - attack_verb = list("bapped") - var/screen = 0 - var/pages = 0 - var/curr_page = 0 - var/list/datum/newscaster/feed_channel/news_content = list() - var/scribble="" - var/scribble_page = null - var/wantedAuthor - var/wantedCriminal - var/wantedBody - var/wantedPhoto - var/creationTime - -/obj/item/newspaper/suicide_act(mob/user) - user.visible_message("[user] is focusing intently on [src]! It looks like [user.p_theyre()] trying to commit sudoku... until [user.p_their()] eyes light up with realization!") - user.say(";JOURNALISM IS MY CALLING! EVERYBODY APPRECIATES UNBIASED REPORTI-GLORF", forced="newspaper suicide") - var/mob/living/carbon/human/H = user - var/obj/W = new /obj/item/reagent_containers/food/drinks/bottle/whiskey(H.loc) - playsound(H.loc, 'sound/blank.ogg', rand(10,50), TRUE) - W.reagents.trans_to(H, W.reagents.total_volume, transfered_by = user) - user.visible_message("[user] downs the contents of [W.name] in one gulp! Shoulda stuck to sudoku!") - - return(TOXLOSS) - -/obj/item/newspaper/attack_self(mob/user) - if(ishuman(user)) - var/mob/living/carbon/human/human_user = user - var/dat - pages = 0 - switch(screen) - if(0) //Cover - dat+="
          The Griffon
          " - dat+="
          Nanotrasen-standard newspaper, for use on Nanotrasen? Space Facilities

          " - if(isemptylist(news_content)) - if(wantedAuthor) - dat+="Contents:
            **Important Security Announcement** \[page [pages+2]\]
          " - else - dat+="Other than the title, the rest of the newspaper is unprinted..." - else - dat+="Contents:
            " - for(var/datum/newscaster/feed_channel/NP in news_content) - pages++ - if(wantedAuthor) - dat+="**Important Security Announcement** \[page [pages+2]\]
            " - var/temp_page=0 - for(var/datum/newscaster/feed_channel/NP in news_content) - temp_page++ - dat+="[NP.channel_name] \[page [temp_page+1]\]
            " - dat+="
          " - if(scribble_page==curr_page) - dat+="
          There is a small scribble near the end of this page... It reads: \"[scribble]\"" - dat+= "
          " - if(1) // X channel pages inbetween. - for(var/datum/newscaster/feed_channel/NP in news_content) - pages++ - var/datum/newscaster/feed_channel/C = news_content[curr_page] - dat += "[C.channel_name] \[created by: [C.returnAuthor(notContent(C.authorCensorTime))]\]

          " - if(notContent(C.DclassCensorTime)) - dat+="This channel was deemed dangerous to the general welfare of the station and therefore marked with a D-Notice. Its contents were not transferred to the newspaper at the time of printing." - else - if(isemptylist(C.messages)) - dat+="No Feed stories stem from this channel..." - else - var/i = 0 - for(var/datum/newscaster/feed_message/MESSAGE in C.messages) - if(MESSAGE.creationTime > creationTime) - if(i == 0) - dat+="No Feed stories stem from this channel..." - break - if(i == 0) - dat+="
            " - i++ - dat+="-[MESSAGE.returnBody(notContent(MESSAGE.bodyCensorTime))]
            " - if(MESSAGE.img) - user << browse_rsc(MESSAGE.img, "tmp_photo[i].png") - dat+="
            " - dat+="\[Story by [MESSAGE.returnAuthor(notContent(MESSAGE.authorCensorTime))]\]

            " - dat+="
          " - if(scribble_page==curr_page) - dat+="
          There is a small scribble near the end of this page... It reads: \"[scribble]\"" - dat+= "

          " - if(2) //Last page - for(var/datum/newscaster/feed_channel/NP in news_content) - pages++ - if(wantedAuthor!=null) - dat+="
          Wanted Issue:


          " - dat+="Criminal name: [wantedCriminal]
          " - dat+="Description: [wantedBody]
          " - dat+="Photo:: " - if(wantedPhoto) - user << browse_rsc(wantedPhoto, "tmp_photow.png") - dat+="
          " - else - dat+="None" - else - dat+="Apart from some uninteresting classified ads, there's nothing on this page..." - if(scribble_page==curr_page) - dat+="
          There is a small scribble near the end of this page... It reads: \"[scribble]\"" - dat+= "
          " - dat+="

          [curr_page+1]
          " - human_user << browse(dat, "window=newspaper_main;size=300x400") - onclose(human_user, "newspaper_main") - else - to_chat(user, "The paper is full of unintelligible symbols!") - -/obj/item/newspaper/proc/notContent(list/L) - if(!L.len) - return 0 - for(var/i=L.len;i>0;i--) - var/num = abs(L[i]) - if(creationTime <= num) - continue - else - if(L[i] > 0) - return 1 - else - return 0 - return 0 - -/obj/item/newspaper/Topic(href, href_list) - var/mob/living/U = usr - ..() - if((src in U.contents) || (isturf(loc) && in_range(src, U))) - U.set_machine(src) - if(href_list["next_page"]) - if(curr_page == pages+1) - return //Don't need that at all, but anyway. - if(curr_page == pages) //We're at the middle, get to the end - screen = 2 - else - if(curr_page == 0) //We're at the start, get to the middle - screen=1 - curr_page++ - playsound(loc, "pageturn", 50, TRUE) - else if(href_list["prev_page"]) - if(curr_page == 0) - return - if(curr_page == 1) - screen = 0 - else - if(curr_page == pages+1) //we're at the end, let's go back to the middle. - screen = 1 - curr_page-- - playsound(loc, "pageturn", 50, TRUE) - if(ismob(loc)) - attack_self(loc) - -/obj/item/newspaper/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/pen)) - if(!user.is_literate()) - to_chat(user, "I scribble illegibly on [src]!") - return - if(scribble_page == curr_page) - to_chat(user, "There's already a scribble in this page... You wouldn't want to make things too cluttered, would you?") - else - var/s = stripped_input(user, "Write something", "Newspaper") - if (!s) - return - if(!user.canUseTopic(src, BE_CLOSE)) - return - scribble_page = curr_page - scribble = s - attack_self(user) - else - return ..() diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm deleted file mode 100644 index 3b66696e84..0000000000 --- a/code/game/machinery/pipe/construction.dm +++ /dev/null @@ -1,235 +0,0 @@ -/*CONTENTS -Buildable pipes -Buildable meters -*/ - -//construction defines are in __defines/pipe_construction.dm -//update those defines ANY TIME an atmos path is changed... -//...otherwise construction will stop working - -/obj/item/pipe - name = "pipe" - desc = "" - var/pipe_type - var/pipename - force = 7 - throwforce = 7 - icon = 'icons/obj/atmospherics/pipes/pipe_item.dmi' - icon_state = "simple" - item_state = "buildpipe" - w_class = WEIGHT_CLASS_NORMAL - level = 2 - var/piping_layer = PIPING_LAYER_DEFAULT - var/RPD_type - -/obj/item/pipe/directional - RPD_type = PIPE_UNARY -/obj/item/pipe/binary - RPD_type = PIPE_STRAIGHT -/obj/item/pipe/binary/bendable - RPD_type = PIPE_BENDABLE -/obj/item/pipe/trinary - RPD_type = PIPE_TRINARY -/obj/item/pipe/trinary/flippable - RPD_type = PIPE_TRIN_M - var/flipped = FALSE -/obj/item/pipe/quaternary - RPD_type = PIPE_ONEDIR - -/obj/item/pipe/ComponentInitialize() - //Flipping handled manually due to custom handling for trinary pipes - AddComponent(/datum/component/simple_rotation, ROTATION_ALTCLICK | ROTATION_CLOCKWISE) - -/obj/item/pipe/Initialize(mapload, _pipe_type, _dir, obj/machinery/atmospherics/make_from) - if(make_from) - make_from_existing(make_from) - else - pipe_type = _pipe_type - setDir(_dir) - - update() - pixel_x += rand(-5, 5) - pixel_y += rand(-5, 5) - return ..() - -/obj/item/pipe/proc/make_from_existing(obj/machinery/atmospherics/make_from) - setDir(make_from.dir) - pipename = make_from.name - add_atom_colour(make_from.color, FIXED_COLOUR_PRIORITY) - pipe_type = make_from.type - -/obj/item/pipe/trinary/flippable/make_from_existing(obj/machinery/atmospherics/components/trinary/make_from) - ..() - if(make_from.flipped) - do_a_flip() - -/obj/item/pipe/dropped() - if(loc) - setPipingLayer(piping_layer) - return ..() - -/obj/item/pipe/proc/setPipingLayer(new_layer = PIPING_LAYER_DEFAULT) - var/obj/machinery/atmospherics/fakeA = pipe_type - - if(initial(fakeA.pipe_flags) & PIPING_ALL_LAYER) - new_layer = PIPING_LAYER_DEFAULT - piping_layer = new_layer - - PIPING_LAYER_SHIFT(src, piping_layer) - layer = initial(layer) + ((piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_LCHANGE) - -/obj/item/pipe/proc/update() - var/obj/machinery/atmospherics/fakeA = pipe_type - name = "[initial(fakeA.name)] fitting" - icon_state = initial(fakeA.pipe_state) - if(ispath(pipe_type,/obj/machinery/atmospherics/pipe/heat_exchanging)) - resistance_flags |= FIRE_PROOF | LAVA_PROOF - -/obj/item/pipe/verb/flip() - set hidden = 1 - set name = "Flip Pipe" - set src in view(1) - - if ( usr.incapacitated() ) - return - - do_a_flip() - -/obj/item/pipe/proc/do_a_flip() - setDir(turn(dir, -180)) - -/obj/item/pipe/trinary/flippable/do_a_flip() - setDir(turn(dir, flipped ? 45 : -45)) - flipped = !flipped - -/obj/item/pipe/Move() - var/old_dir = dir - ..() - setDir(old_dir) //pipes changing direction when moved is just annoying and buggy - -// Convert dir of fitting into dir of built component -/obj/item/pipe/proc/fixed_dir() - return dir - -/obj/item/pipe/binary/fixed_dir() - . = dir - if(dir == SOUTH) - . = NORTH - else if(dir == WEST) - . = EAST - -/obj/item/pipe/trinary/flippable/fixed_dir() - . = dir - if(dir in GLOB.diagonals) - . = turn(dir, 45) - -/obj/item/pipe/attack_self(mob/user) - setDir(turn(dir,-90)) - -/obj/item/pipe/wrench_act(mob/living/user, obj/item/wrench/W) - . = ..() - if(!isturf(loc)) - return TRUE - - add_fingerprint(user) - - var/obj/machinery/atmospherics/fakeA = pipe_type - var/flags = initial(fakeA.pipe_flags) - for(var/obj/machinery/atmospherics/M in loc) - if((M.pipe_flags & flags & PIPING_ONE_PER_TURF)) //Only one dense/requires density object per tile, eg connectors/cryo/heater/coolers. - to_chat(user, "Something is hogging the tile!") - return TRUE - if((M.piping_layer != piping_layer) && !((M.pipe_flags | flags) & PIPING_ALL_LAYER)) //don't continue if either pipe goes across all layers - continue - if(M.GetInitDirections() & SSair.get_init_dirs(pipe_type, fixed_dir())) // matches at least one direction on either type of pipe - to_chat(user, "There is already a pipe at that location!") - return TRUE - // no conflicts found - - var/obj/machinery/atmospherics/A = new pipe_type(loc) - build_pipe(A) - A.on_construction(color, piping_layer) - transfer_fingerprints_to(A) - - W.play_tool_sound(src) - user.visible_message( \ - "[user] fastens \the [src].", \ - "I fasten \the [src].", \ - "I hear ratcheting.") - - qdel(src) - -/obj/item/pipe/proc/build_pipe(obj/machinery/atmospherics/A) - A.setDir(fixed_dir()) - A.SetInitDirections() - - if(pipename) - A.name = pipename - if(A.on) - // Certain pre-mapped subtypes are on by default, we want to preserve - // every other aspect of these subtypes (name, pre-set filters, etc.) - // but they shouldn't turn on automatically when wrenched. - A.on = FALSE - -/obj/item/pipe/trinary/flippable/build_pipe(obj/machinery/atmospherics/components/trinary/T) - ..() - T.flipped = flipped - -/obj/item/pipe/directional/suicide_act(mob/user) - user.visible_message("[user] shoves [src] in [user.p_their()] mouth and turns it on! It looks like [user.p_theyre()] trying to commit suicide!") - if(iscarbon(user)) - var/mob/living/carbon/C = user - for(var/i=1 to 20) - C.vomit(0, TRUE, FALSE, 4, FALSE) - if(prob(20)) - C.spew_organ() - sleep(5) - C.blood_volume = 0 - return(OXYLOSS|BRUTELOSS) - -/obj/item/pipe_meter - name = "meter" - desc = "" - icon = 'icons/obj/atmospherics/pipes/pipe_item.dmi' - icon_state = "meter" - item_state = "buildpipe" - w_class = WEIGHT_CLASS_BULKY - var/piping_layer = PIPING_LAYER_DEFAULT - -/obj/item/pipe_meter/wrench_act(mob/living/user, obj/item/wrench/W) - . = ..() - var/obj/machinery/atmospherics/pipe/pipe - for(var/obj/machinery/atmospherics/pipe/P in loc) - if(P.piping_layer == piping_layer) - pipe = P - break - if(!pipe) - to_chat(user, "I need to fasten it to a pipe!") - return TRUE - new /obj/machinery/meter(loc, piping_layer) - W.play_tool_sound(src) - to_chat(user, "I fasten the meter to the pipe.") - qdel(src) - -/obj/item/pipe_meter/screwdriver_act(mob/living/user, obj/item/S) - . = ..() - if(.) - return TRUE - - if(!isturf(loc)) - to_chat(user, "I need to fasten it to the floor!") - return TRUE - - new /obj/machinery/meter/turf(loc, piping_layer) - S.play_tool_sound(src) - to_chat(user, "I fasten the meter to the [loc.name].") - qdel(src) - -/obj/item/pipe_meter/dropped() - . = ..() - if(loc) - setAttachLayer(piping_layer) - -/obj/item/pipe_meter/proc/setAttachLayer(new_layer = PIPING_LAYER_DEFAULT) - piping_layer = new_layer - PIPING_LAYER_DOUBLE_SHIFT(src, piping_layer) diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm deleted file mode 100644 index a61c78e15f..0000000000 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ /dev/null @@ -1,214 +0,0 @@ -/obj/machinery/pipedispenser - name = "pipe dispenser" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "pipe_d" - desc = "" - density = TRUE - interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_OFFLINE - var/wait = 0 - var/piping_layer = PIPING_LAYER_DEFAULT - -/obj/machinery/pipedispenser/attack_paw(mob/user) - return attack_hand(user) - -/obj/machinery/pipedispenser/ui_interact(mob/user) - . = ..() - var/dat = "PIPING LAYER: --[piping_layer]++
          " - - var/recipes = GLOB.atmos_pipe_recipes - - for(var/category in recipes) - var/list/cat_recipes = recipes[category] - dat += "[category]:
            " - - for(var/i in cat_recipes) - var/datum/pipe_info/I = i - dat += I.Render(src) - - dat += "
          " - - user << browse("[src][dat]", "window=pipedispenser") - onclose(user, "pipedispenser") - return - -/obj/machinery/pipedispenser/Topic(href, href_list) - if(..()) - return 1 - var/mob/living/L = usr - if(!anchored || (istype(L) && !(L.mobility_flags & MOBILITY_UI)) || usr.stat || usr.restrained() || !in_range(loc, usr)) - usr << browse(null, "window=pipedispenser") - return 1 - usr.set_machine(src) - add_fingerprint(usr) - if(href_list["makepipe"]) - if(wait < world.time) - var/p_type = text2path(href_list["makepipe"]) - if (!verify_recipe(GLOB.atmos_pipe_recipes, p_type)) - return - var/p_dir = text2num(href_list["dir"]) - var/obj/item/pipe/P = new (loc, p_type, p_dir) - P.setPipingLayer(piping_layer) - P.add_fingerprint(usr) - wait = world.time + 10 - if(href_list["makemeter"]) - if(wait < world.time ) - new /obj/item/pipe_meter(loc) - wait = world.time + 15 - if(href_list["layer_up"]) - piping_layer = CLAMP(++piping_layer, PIPING_LAYER_MIN, PIPING_LAYER_MAX) - if(href_list["layer_down"]) - piping_layer = CLAMP(--piping_layer, PIPING_LAYER_MIN, PIPING_LAYER_MAX) - return - -/obj/machinery/pipedispenser/attackby(obj/item/W, mob/user, params) - add_fingerprint(user) - if (istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter)) - to_chat(usr, "I put [W] back into [src].") - qdel(W) - return - else - return ..() - -/obj/machinery/pipedispenser/proc/verify_recipe(recipes, path) - for(var/category in recipes) - var/list/cat_recipes = recipes[category] - for(var/i in cat_recipes) - var/datum/pipe_info/info = i - if (path == info.id) - return TRUE - return FALSE - -/obj/machinery/pipedispenser/wrench_act(mob/living/user, obj/item/I) - ..() - if(default_unfasten_wrench(user, I, 40)) - user << browse(null, "window=pipedispenser") - - return TRUE - - -/obj/machinery/pipedispenser/disposal - name = "disposal pipe dispenser" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "pipe_d" - desc = "" - density = TRUE - - -//Allow you to drag-drop disposal pipes and transit tubes into it -/obj/machinery/pipedispenser/disposal/MouseDrop_T(obj/structure/pipe, mob/usr) - if(!usr.incapacitated()) - return - - if (!istype(pipe, /obj/structure/disposalconstruct) && !istype(pipe, /obj/structure/c_transit_tube) && !istype(pipe, /obj/structure/c_transit_tube_pod)) - return - - if (get_dist(usr, src) > 1 || get_dist(src,pipe) > 1 ) - return - - if (pipe.anchored) - return - - qdel(pipe) - -/obj/machinery/pipedispenser/disposal/interact(mob/user) - - var/dat = "" - var/recipes = GLOB.disposal_pipe_recipes - - for(var/category in recipes) - var/list/cat_recipes = recipes[category] - dat += "[category]:
            " - - for(var/i in cat_recipes) - var/datum/pipe_info/I = i - dat += I.Render(src) - - dat += "
          " - - user << browse("[src][dat]", "window=pipedispenser") - return - - -/obj/machinery/pipedispenser/disposal/Topic(href, href_list) - if(..()) - return 1 - usr.set_machine(src) - add_fingerprint(usr) - if(href_list["dmake"]) - if(wait < world.time) - var/p_type = text2path(href_list["dmake"]) - if (!verify_recipe(GLOB.disposal_pipe_recipes, p_type)) - return - var/obj/structure/disposalconstruct/C = new (loc, p_type) - - if(!C.can_place()) - to_chat(usr, "There's not enough room to build that here!") - qdel(C) - return - if(href_list["dir"]) - C.setDir(text2num(href_list["dir"])) - C.add_fingerprint(usr) - C.update_icon() - wait = world.time + 15 - return - -//transit tube dispenser -//inherit disposal for the dragging proc -/obj/machinery/pipedispenser/disposal/transit_tube - name = "transit tube dispenser" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "pipe_d" - density = TRUE - desc = "" - -/obj/machinery/pipedispenser/disposal/transit_tube/interact(mob/user) - - var/dat = {"Transit Tubes:
          -Straight Tube
          -Straight Tube with Crossing
          -Curved Tube
          -Diagonal Tube
          -Diagonal Tube with Crossing
          -Junction
          -Station Equipment:
          -Through Tube Station
          -Terminus Tube Station
          -Transit Tube Pod
          -"} - - user << browse("[src][dat]", "window=pipedispenser") - return - - -/obj/machinery/pipedispenser/disposal/transit_tube/Topic(href, href_list) - if(..()) - return 1 - usr.set_machine(src) - add_fingerprint(usr) - if(wait < world.time) - if(href_list["tube"]) - var/tube_type = text2num(href_list["tube"]) - var/obj/structure/C - switch(tube_type) - if(TRANSIT_TUBE_STRAIGHT) - C = new /obj/structure/c_transit_tube(loc) - if(TRANSIT_TUBE_STRAIGHT_CROSSING) - C = new /obj/structure/c_transit_tube/crossing(loc) - if(TRANSIT_TUBE_CURVED) - C = new /obj/structure/c_transit_tube/curved(loc) - if(TRANSIT_TUBE_DIAGONAL) - C = new /obj/structure/c_transit_tube/diagonal(loc) - if(TRANSIT_TUBE_DIAGONAL_CROSSING) - C = new /obj/structure/c_transit_tube/diagonal/crossing(loc) - if(TRANSIT_TUBE_JUNCTION) - C = new /obj/structure/c_transit_tube/junction(loc) - if(TRANSIT_TUBE_STATION) - C = new /obj/structure/c_transit_tube/station(loc) - if(TRANSIT_TUBE_TERMINUS) - C = new /obj/structure/c_transit_tube/station/reverse(loc) - if(TRANSIT_TUBE_POD) - C = new /obj/structure/c_transit_tube_pod(loc) - if(C) - C.add_fingerprint(usr) - wait = world.time + 15 - return diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm deleted file mode 100644 index ec2dee5c2a..0000000000 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ /dev/null @@ -1,1082 +0,0 @@ -#define TURRET_STUN 0 -#define TURRET_LETHAL 1 - -#define POPUP_ANIM_TIME 5 -#define POPDOWN_ANIM_TIME 5 //Be sure to change the icon animation at the same time or it'll look bad - -#define TURRET_FLAG_SHOOT_ALL_REACT (1<<0) // The turret gets pissed off and shoots at people nearby (unless they have sec access!) -#define TURRET_FLAG_AUTH_WEAPONS (1<<1) // Checks if it can shoot people that have a weapon they aren't authorized to have -#define TURRET_FLAG_SHOOT_CRIMINALS (1<<2) // Checks if it can shoot people that are wanted -#define TURRET_FLAG_SHOOT_ALL (1<<3) // The turret gets pissed off and shoots at people nearby (unless they have sec access!) -#define TURRET_FLAG_SHOOT_ANOMALOUS (1<<4) // Checks if it can shoot at unidentified lifeforms (ie xenos) -#define TURRET_FLAG_SHOOT_UNSHIELDED (1<<5) // Checks if it can shoot people that aren't mindshielded and who arent heads -#define TURRET_FLAG_SHOOT_BORGS (1<<6) // checks if it can shoot cyborgs -#define TURRET_FLAG_SHOOT_HEADS (1<<7) // checks if it can shoot at heads of staff - -/obj/machinery/porta_turret - name = "turret" - icon = 'icons/obj/turrets.dmi' - icon_state = "turretCover" - layer = OBJ_LAYER - invisibility = INVISIBILITY_OBSERVER //the turret is invisible if it's inside its cover - density = TRUE - desc = "" - use_power = IDLE_POWER_USE //this turret uses and requires power - idle_power_usage = 50 //when inactive, this turret takes up constant 50 Equipment power - active_power_usage = 300 //when active, this turret takes up constant 300 Equipment power - req_access = list(ACCESS_SEC_DOORS) - power_channel = EQUIP //drains power from the EQUIPMENT channel - - var/base_icon_state = "standard" - var/scan_range = 7 - var/atom/base = null //for turrets inside other objects - - var/raised = 0 //if the turret cover is "open" and the turret is raised - var/raising= 0 //if the turret is currently opening or closing its cover - - max_integrity = 160 //the turret's health - integrity_failure = 0.5 - armor = list("melee" = 50, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) - - var/locked = TRUE //if the turret's behaviour control access is locked - var/controllock = FALSE //if the turret responds to control panels - - var/installation = /obj/item/gun/energy/e_gun/turret //the type of weapon installed by default - var/obj/item/gun/stored_gun = null - var/gun_charge = 0 //the charge of the gun when retrieved from wreckage - - var/mode = TURRET_STUN - - var/stun_projectile = null //stun mode projectile type - var/stun_projectile_sound - var/lethal_projectile = null //lethal mode projectile type - var/lethal_projectile_sound - - var/reqpower = 500 //power needed per shot - var/always_up = 0 //Will stay active - var/has_cover = 1 //Hides the cover - - var/obj/machinery/porta_turret_cover/cover = null //the cover that is covering this turret - - var/last_fired = 0 //world.time the turret last fired - var/shot_delay = 15 //ticks until next shot (1.5 ?) - - - var/turret_flags = TURRET_FLAG_SHOOT_CRIMINALS | TURRET_FLAG_SHOOT_ANOMALOUS - - var/on = TRUE //determines if the turret is on - - var/list/faction = list("turret" ) // Same faction mobs will never be shot at, no matter the other settings - - var/datum/effect_system/spark_spread/spark_system //the spark system, used for generating... sparks? - - var/obj/machinery/turretid/cp = null - - var/wall_turret_direction //The turret will try to shoot from a turf in that direction when in a wall - - var/manual_control = FALSE // - var/datum/action/turret_quit/quit_action - var/datum/action/turret_toggle/toggle_action - var/mob/remote_controller - -/obj/machinery/porta_turret/Initialize() - . = ..() - if(!base) - base = src - update_icon() - //Sets up a spark system - spark_system = new /datum/effect_system/spark_spread - spark_system.set_up(5, 0, src) - spark_system.attach(src) - - setup() - if(has_cover) - cover = new /obj/machinery/porta_turret_cover(loc) - cover.parent_turret = src - var/mutable_appearance/base = mutable_appearance('icons/obj/turrets.dmi', "basedark") - base.layer = NOT_HIGH_OBJ_LAYER - underlays += base - if(!has_cover) - INVOKE_ASYNC(src, PROC_REF(popUp)) - -/obj/machinery/porta_turret/update_icon_state() - if(!anchored) - icon_state = "turretCover" - return - if(stat & BROKEN) - icon_state = "[base_icon_state]_broken" - else - if(powered()) - if(on && raised) - switch(mode) - if(TURRET_STUN) - icon_state = "[base_icon_state]_stun" - if(TURRET_LETHAL) - icon_state = "[base_icon_state]_lethal" - else - icon_state = "[base_icon_state]_off" - else - icon_state = "[base_icon_state]_unpowered" - -/obj/machinery/porta_turret/proc/setup(obj/item/gun/turret_gun) - if(stored_gun) - qdel(stored_gun) - stored_gun = null - - if(installation && !turret_gun) - stored_gun = new installation(src) - else if (turret_gun) - stored_gun = turret_gun - - var/list/gun_properties = stored_gun.get_turret_properties() - - //required properties - stun_projectile = gun_properties["stun_projectile"] - stun_projectile_sound = gun_properties["stun_projectile_sound"] - lethal_projectile = gun_properties["lethal_projectile"] - lethal_projectile_sound = gun_properties["lethal_projectile_sound"] - base_icon_state = gun_properties["base_icon_state"] - - //optional properties - if(gun_properties["shot_delay"]) - shot_delay = gun_properties["shot_delay"] - if(gun_properties["reqpower"]) - reqpower = gun_properties["reqpower"] - - update_icon() - return gun_properties - -/obj/machinery/porta_turret/Destroy() - //deletes its own cover with it - QDEL_NULL(cover) - base = null - if(cp) - cp.turrets -= src - cp = null - QDEL_NULL(stored_gun) - QDEL_NULL(spark_system) - remove_control() - return ..() - -/obj/machinery/porta_turret/ui_interact(mob/user) - . = ..() - var/dat - dat += "Status: [on ? "On" : "Off"]
          " - dat += "Behaviour controls are [locked ? "locked" : "unlocked"]
          " - - if(!locked) - dat += "Check for Weapon Authorization: [turret_flags & TURRET_FLAG_AUTH_WEAPONS ? "Yes" : "No"]
          " - dat += "Neutralize Wanted Criminals: [turret_flags & TURRET_FLAG_SHOOT_CRIMINALS ? "Yes" : "No"]
          " - dat += "Neutralize All Non-Security and Non-Command Personnel: [turret_flags & TURRET_FLAG_SHOOT_ALL ? "Yes" : "No"]
          " - dat += "Neutralize All Unidentified Life Signs: [turret_flags & TURRET_FLAG_SHOOT_ANOMALOUS ? "Yes" : "No"]
          " - dat += "Neutralize All Non-Mindshielded Personnel: [turret_flags & TURRET_FLAG_SHOOT_UNSHIELDED ? "Yes" : "No"]
          " - dat += "Neutralize All Cyborgs: [turret_flags & TURRET_FLAG_SHOOT_BORGS ? "Yes" : "No"]
          " - dat += "Ignore Heads Of Staff: [turret_flags & TURRET_FLAG_SHOOT_HEADS ? "No" : "Yes"]
          " - if(issilicon(user)) - if(!manual_control) - var/mob/living/silicon/S = user - if(S.hack_software) - dat += "Assume direct control : Manual Control
          " - else - dat += "Warning! Remote control protocol enabled.
          " - - - var/datum/browser/popup = new(user, "autosec", "Automatic Portable Turret Installation", 300, 300) - popup.set_content(dat) - popup.open() - -/obj/machinery/porta_turret/Topic(href, href_list) - if(..()) - return - usr.set_machine(src) - add_fingerprint(usr) - - if(href_list["power"] && !locked) - if(anchored) //you can't turn a turret on/off if it's not anchored/secured - on = !on //toggle on/off - else - to_chat(usr, "It has to be secured first!") - interact(usr) - return - - if(href_list["operation"]) - switch(href_list["operation"]) //toggles customizable behavioural protocols - if("authweapon") - turret_flags ^= TURRET_FLAG_AUTH_WEAPONS - if("shootcriminals") - turret_flags ^= TURRET_FLAG_SHOOT_CRIMINALS - if("shootall") - turret_flags ^= TURRET_FLAG_SHOOT_ALL - if("checkxenos") - turret_flags ^= TURRET_FLAG_SHOOT_ANOMALOUS - if("checkloyal") - turret_flags ^= TURRET_FLAG_SHOOT_UNSHIELDED - if ("shootborgs") - turret_flags ^= TURRET_FLAG_SHOOT_BORGS - if ("shootheads") - turret_flags ^= TURRET_FLAG_SHOOT_HEADS - if("manual") - if(issilicon(usr) && !manual_control) - give_control(usr) - - interact(usr) - -/obj/machinery/porta_turret/power_change() - . = ..() - if(!anchored || (stat & BROKEN) || !powered()) - update_icon() - remove_control() - -/obj/machinery/porta_turret/attackby(obj/item/I, mob/user, params) - if(stat & BROKEN) - if(I.tool_behaviour == TOOL_CROWBAR) - //If the turret is destroyed, you can remove it with a crowbar to - //try and salvage its components - to_chat(user, "I begin prying the metal coverings off...") - if(I.use_tool(src, user, 20)) - if(prob(70)) - if(stored_gun) - stored_gun.forceMove(loc) - stored_gun = null - to_chat(user, "I remove the turret and salvage some components.") - if(prob(50)) - new /obj/item/stack/sheet/metal(loc, rand(1,4)) - if(prob(50)) - new /obj/item/assembly/prox_sensor(loc) - else - to_chat(user, "I remove the turret but did not manage to salvage anything.") - qdel(src) - - else if((I.tool_behaviour == TOOL_WRENCH) && (!on)) - if(raised) - return - - //This code handles moving the turret around. After all, it's a portable turret! - if(!anchored && !isinspace()) - setAnchored(TRUE) - invisibility = INVISIBILITY_MAXIMUM - update_icon() - to_chat(user, "I secure the exterior bolts on the turret.") - if(has_cover) - cover = new /obj/machinery/porta_turret_cover(loc) //create a new turret. While this is handled in process(), this is to workaround a bug where the turret becomes invisible for a split second - cover.parent_turret = src //make the cover's parent src - else if(anchored) - setAnchored(FALSE) - to_chat(user, "I unsecure the exterior bolts on the turret.") - power_change() - invisibility = 0 - qdel(cover) //deletes the cover, and the turret instance itself becomes its own cover. - - else if(I.GetID()) - //Behavior lock/unlock mangement - if(allowed(user)) - locked = !locked - to_chat(user, "Controls are now [locked ? "locked" : "unlocked"].") - else - to_chat(user, "Access denied.") - else if(I.tool_behaviour == TOOL_MULTITOOL && !locked) - if(!multitool_check_buffer(user, I)) - return - var/obj/item/multitool/M = I - M.buffer = src - to_chat(user, "I add [src] to multitool buffer.") - else - return ..() - -/obj/machinery/porta_turret/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - to_chat(user, "I short out [src]'s threat assessment circuits.") - audible_message("[src] hums oddly...") - obj_flags |= EMAGGED - controllock = TRUE - on = FALSE //turns off the turret temporarily - update_icon() - //6 seconds for the traitor to gtfo of the area before the turret decides to ruin his shit - addtimer(VARSET_CALLBACK(src, on, TRUE), 6 SECONDS) - //turns it back on. The cover popUp() popDown() are automatically called in process(), no need to define it here - - -/obj/machinery/porta_turret/emp_act(severity) - . = ..() - if (. & EMP_PROTECT_SELF) - return - if(on) - //if the turret is on, the EMP no matter how severe disables the turret for a while - //and scrambles its settings, with a slight chance of having an emag effect - if(prob(50)) - turret_flags |= TURRET_FLAG_SHOOT_CRIMINALS - if(prob(50)) - turret_flags |= TURRET_FLAG_AUTH_WEAPONS - if(prob(20)) - turret_flags |= TURRET_FLAG_SHOOT_ALL // Shooting everyone is a pretty big deal, so it's least likely to get turned on - - on = FALSE - remove_control() - - addtimer(VARSET_CALLBACK(src, on, TRUE), rand(60,600)) - -/obj/machinery/porta_turret/take_damage(damage, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) - . = ..() - if(. && obj_integrity > 0) //damage received - if(prob(30)) - spark_system.start() - if(on && !(turret_flags & TURRET_FLAG_SHOOT_ALL_REACT) && !(obj_flags & EMAGGED)) - turret_flags |= TURRET_FLAG_SHOOT_ALL_REACT - addtimer(CALLBACK(src, PROC_REF(reset_attacked)), 60) - -/obj/machinery/porta_turret/proc/reset_attacked() - turret_flags &= ~TURRET_FLAG_SHOOT_ALL_REACT - -/obj/machinery/porta_turret/deconstruct(disassembled = TRUE) - qdel(src) - -/obj/machinery/porta_turret/obj_break(damage_flag) - . = ..() - if(.) - power_change() - invisibility = 0 - spark_system.start() //creates some sparks because they look cool - qdel(cover) //deletes the cover - no need on keeping it there! - - - -/obj/machinery/porta_turret/process() - //the main machinery process - if(cover == null && anchored) //if it has no cover and is anchored - if(stat & BROKEN) //if the turret is borked - qdel(cover) //delete its cover, assuming it has one. Workaround for a pesky little bug - else - if(has_cover) - cover = new /obj/machinery/porta_turret_cover(loc) //if the turret has no cover and is anchored, give it a cover - cover.parent_turret = src //assign the cover its parent_turret, which would be this (src) - - if(!on || (stat & (NOPOWER|BROKEN)) || manual_control) - return - - var/list/targets = list() - for(var/mob/A in view(scan_range, base)) - if(A.invisibility > SEE_INVISIBLE_LIVING) - continue - - if(turret_flags & TURRET_FLAG_SHOOT_ANOMALOUS)//if it's set to check for simple animals - if(isanimal(A)) - var/mob/living/simple_animal/SA = A - if(SA.stat || in_faction(SA)) //don't target if dead or in faction - continue - targets += SA - continue - - if(issilicon(A)) - var/mob/living/silicon/sillycone = A - - if(ispAI(A)) - continue - - if((turret_flags & TURRET_FLAG_SHOOT_BORGS) && sillycone.stat != DEAD && iscyborg(sillycone)) - targets += sillycone - continue - - if(sillycone.stat || in_faction(sillycone)) - continue - - if(iscyborg(sillycone)) - var/mob/living/silicon/robot/sillyconerobot = A - if(LAZYLEN(faction) && (ROLE_SYNDICATE in faction) && sillyconerobot.emagged == TRUE) - continue - - if(iscarbon(A)) - var/mob/living/carbon/C = A - //If not emagged, only target carbons that can use items - if(mode != TURRET_LETHAL && (C.stat || C.handcuffed || !(C.mobility_flags & MOBILITY_USE))) - continue - - //If emagged, target all but dead carbons - if(mode == TURRET_LETHAL && C.stat == DEAD) - continue - - //if the target is a human and not in our faction, analyze threat level - if(ishuman(C) && !in_faction(C)) - - if(assess_perp(C) >= 4) - targets += C - else if(turret_flags & TURRET_FLAG_SHOOT_ANOMALOUS) //non humans who are not simple animals (xenos etc) - if(!in_faction(C)) - targets += C - for(var/A in GLOB.mechas_list) - if((get_dist(A, base) < scan_range) && can_see(base, A, scan_range)) - var/obj/mecha/Mech = A - if(Mech.occupant && !in_faction(Mech.occupant)) //If there is a user and they're not in our faction - if(assess_perp(Mech.occupant) >= 4) - targets += Mech - - if((turret_flags & TURRET_FLAG_SHOOT_ANOMALOUS) && GLOB.blobs.len && (mode == TURRET_LETHAL)) - for(var/obj/structure/blob/B in view(scan_range, base)) - targets += B - - if(targets.len) - tryToShootAt(targets) - else if(!always_up) - popDown() // no valid targets, close the cover - -/obj/machinery/porta_turret/proc/tryToShootAt(list/atom/movable/targets) - while(targets.len > 0) - var/atom/movable/M = pick(targets) - targets -= M - if(target(M)) - return 1 - - -/obj/machinery/porta_turret/proc/popUp() //pops the turret up - if(!anchored) - return - if(raising || raised) - return - if(stat & BROKEN) - return - invisibility = 0 - raising = 1 - if(cover) - flick("popup", cover) - sleep(POPUP_ANIM_TIME) - raising = 0 - if(cover) - cover.icon_state = "openTurretCover" - raised = 1 - layer = MOB_LAYER - -/obj/machinery/porta_turret/proc/popDown() //pops the turret down - if(raising || !raised) - return - if(stat & BROKEN) - return - layer = OBJ_LAYER - raising = 1 - if(cover) - flick("popdown", cover) - sleep(POPDOWN_ANIM_TIME) - raising = 0 - if(cover) - cover.icon_state = "turretCover" - raised = 0 - invisibility = 2 - update_icon() - -/obj/machinery/porta_turret/proc/assess_perp(mob/living/carbon/human/perp) - var/threatcount = 0 //the integer returned - - if(obj_flags & EMAGGED) - return 10 //if emagged, always return 10. - - if((turret_flags & (TURRET_FLAG_SHOOT_ALL | TURRET_FLAG_SHOOT_ALL_REACT)) && !allowed(perp)) - //if the turret has been attacked or is angry, target all non-sec people - if(!allowed(perp)) - return 10 - - if(turret_flags & TURRET_FLAG_AUTH_WEAPONS) //check for weapon authorization - if(isnull(perp.wear_ring) || istype(perp.wear_ring.GetID(), /obj/item/card/id/syndicate)) - - if(allowed(perp)) //if the perp has security access, return 0 - return 0 - if(perp.is_holding_item_of_type(/obj/item/gun) || perp.is_holding_item_of_type(/obj/item/melee/baton)) - threatcount += 4 - - if(istype(perp.belt, /obj/item/gun) || istype(perp.belt, /obj/item/melee/baton)) - threatcount += 2 - - if(turret_flags & TURRET_FLAG_SHOOT_CRIMINALS) //if the turret can check the records, check if they are set to *Arrest* on records - var/perpname = perp.get_face_name(perp.get_id_name()) - var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.security) - if(!R || (R.fields["criminal"] == "*Arrest*")) - threatcount += 4 - - if((turret_flags & TURRET_FLAG_SHOOT_UNSHIELDED) && (!HAS_TRAIT(perp, TRAIT_MINDSHIELD))) - threatcount += 4 - - // If we aren't shooting heads then return a threatcount of 0 - if (!(turret_flags & TURRET_FLAG_SHOOT_HEADS) && (perp.get_assignment() in GLOB.command_positions)) - return 0 - - return threatcount - -/obj/machinery/porta_turret/proc/in_faction(mob/target) - for(var/faction1 in faction) - if(faction1 in target.faction) - return TRUE - return FALSE - -/obj/machinery/porta_turret/proc/target(atom/movable/target) - if(target) - popUp() //pop the turret up if it's not already up. - setDir(get_dir(base, target))//even if you can't shoot, follow the target - shootAt(target) - return 1 - return - -/obj/machinery/porta_turret/proc/shootAt(atom/movable/target) - if(!raised) //the turret has to be raised in order to fire - makes sense, right? - return - - if(!(obj_flags & EMAGGED)) //if it hasn't been emagged, cooldown before shooting again - if(last_fired + shot_delay > world.time) - return - last_fired = world.time - - var/turf/T = get_turf(src) - var/turf/U = get_turf(target) - if(!istype(T) || !istype(U)) - return - - //Wall turrets will try to find adjacent empty turf to shoot from to cover full arc - if(T.density) - if(wall_turret_direction) - var/turf/closer = get_step(T,wall_turret_direction) - if(istype(closer) && !is_blocked_turf(closer) && T.Adjacent(closer)) - T = closer - else - var/target_dir = get_dir(T,target) - for(var/d in list(0,-45,45)) - var/turf/closer = get_step(T,turn(target_dir,d)) - if(istype(closer) && !is_blocked_turf(closer) && T.Adjacent(closer)) - T = closer - break - - update_icon() - var/obj/projectile/A - //any emagged turrets drains 2x power and uses a different projectile? - if(mode == TURRET_STUN) - use_power(reqpower) - A = new stun_projectile(T) - playsound(loc, stun_projectile_sound, 75, TRUE) - else - use_power(reqpower * 2) - A = new lethal_projectile(T) - playsound(loc, lethal_projectile_sound, 75, TRUE) - - - //Shooting Code: - A.preparePixelProjectile(target, T) - A.firer = src - A.fired_from = src - A.fire() - return A - -/obj/machinery/porta_turret/proc/setState(on, mode, shoot_cyborgs) - if(controllock) - return - - shoot_cyborgs ? (turret_flags |= TURRET_FLAG_SHOOT_BORGS) : (turret_flags &= ~TURRET_FLAG_SHOOT_BORGS) - src.on = on - if(!on) - popDown() - src.mode = mode - power_change() - - -/datum/action/turret_toggle - name = "Toggle Mode" - icon_icon = 'icons/mob/actions/actions_mecha.dmi' - button_icon_state = "mech_cycle_equip_off" - -/datum/action/turret_toggle/Trigger() - var/obj/machinery/porta_turret/P = target - if(!istype(P)) - return - P.setState(P.on,!P.mode) - -/datum/action/turret_quit - name = "Release Control" - icon_icon = 'icons/mob/actions/actions_mecha.dmi' - button_icon_state = "mech_eject" - -/datum/action/turret_quit/Trigger() - var/obj/machinery/porta_turret/P = target - if(!istype(P)) - return - P.remove_control(FALSE) - -/obj/machinery/porta_turret/proc/give_control(mob/A) - if(manual_control || !can_interact(A)) - return FALSE - remote_controller = A - if(!quit_action) - quit_action = new(src) - quit_action.Grant(remote_controller) - if(!toggle_action) - toggle_action = new(src) - toggle_action.Grant(remote_controller) - remote_controller.reset_perspective(src) - remote_controller.click_intercept = src - manual_control = TRUE - always_up = TRUE - popUp() - return TRUE - -/obj/machinery/porta_turret/proc/remove_control(warning_message = TRUE) - if(!manual_control) - return FALSE - if(remote_controller) - if(warning_message) - to_chat(remote_controller, "My uplink to [src] has been severed!") - quit_action.Remove(remote_controller) - toggle_action.Remove(remote_controller) - remote_controller.click_intercept = null - remote_controller.reset_perspective() - always_up = initial(always_up) - manual_control = FALSE - remote_controller = null - return TRUE - -/obj/machinery/porta_turret/proc/InterceptClickOn(mob/living/caller, params, atom/A) - if(!manual_control) - return FALSE - if(!can_interact(caller)) - remove_control() - return FALSE - log_combat(caller,A,"fired with manual turret control at") - target(A) - return TRUE - -/obj/machinery/porta_turret/syndicate - installation = null - always_up = 1 - use_power = NO_POWER_USE - has_cover = 0 - scan_range = 9 - req_access = list(ACCESS_SYNDICATE) - mode = TURRET_LETHAL - stun_projectile = /obj/projectile/bullet - lethal_projectile = /obj/projectile/bullet - lethal_projectile_sound = 'sound/blank.ogg' - stun_projectile_sound = 'sound/blank.ogg' - icon_state = "syndie_off" - base_icon_state = "syndie" - faction = list(ROLE_SYNDICATE) - desc = "" - -/obj/machinery/porta_turret/syndicate/ComponentInitialize() - . = ..() - AddComponent(/datum/component/empprotection, EMP_PROTECT_SELF | EMP_PROTECT_WIRES) - -/obj/machinery/porta_turret/syndicate/setup() - return - -/obj/machinery/porta_turret/syndicate/assess_perp(mob/living/carbon/human/perp) - return 10 //Syndicate turrets shoot everything not in their faction - -/obj/machinery/porta_turret/syndicate/energy - icon_state = "standard_lethal" - base_icon_state = "standard" - stun_projectile = /obj/projectile/energy/electrode - stun_projectile_sound = 'sound/blank.ogg' - lethal_projectile = /obj/projectile/beam/laser - lethal_projectile_sound = 'sound/blank.ogg' - desc = "" - -/obj/machinery/porta_turret/syndicate/energy/heavy - icon_state = "standard_lethal" - base_icon_state = "standard" - stun_projectile = /obj/projectile/energy/electrode - stun_projectile_sound = 'sound/blank.ogg' - lethal_projectile = /obj/projectile/beam/laser/heavylaser - lethal_projectile_sound = 'sound/blank.ogg' - desc = "" - -/obj/machinery/porta_turret/syndicate/energy/raven - stun_projectile = /obj/projectile/beam/laser - stun_projectile_sound = 'sound/blank.ogg' - faction = list("neutral","silicon","turret") - - -/obj/machinery/porta_turret/syndicate/pod - integrity_failure = 0.5 - max_integrity = 40 - stun_projectile = /obj/projectile/bullet/syndicate_turret - lethal_projectile = /obj/projectile/bullet/syndicate_turret - -/obj/machinery/porta_turret/syndicate/shuttle - scan_range = 9 - shot_delay = 3 - stun_projectile = /obj/projectile/bullet/p50/penetrator/shuttle - lethal_projectile = /obj/projectile/bullet/p50/penetrator/shuttle - lethal_projectile_sound = 'sound/blank.ogg' - stun_projectile_sound = 'sound/blank.ogg' - armor = list("melee" = 50, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 80, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) - -/obj/machinery/porta_turret/syndicate/shuttle/target(atom/movable/target) - if(target) - setDir(get_dir(base, target))//even if you can't shoot, follow the target - shootAt(target) - addtimer(CALLBACK(src, PROC_REF(shootAt), target), 5) - addtimer(CALLBACK(src, PROC_REF(shootAt), target), 10) - addtimer(CALLBACK(src, PROC_REF(shootAt), target), 15) - return TRUE - -/obj/machinery/porta_turret/ai - faction = list("silicon") - turret_flags = TURRET_FLAG_SHOOT_CRIMINALS | TURRET_FLAG_SHOOT_ANOMALOUS | TURRET_FLAG_SHOOT_HEADS - -/obj/machinery/porta_turret/ai/assess_perp(mob/living/carbon/human/perp) - return 10 //AI turrets shoot at everything not in their faction - -/obj/machinery/porta_turret/aux_base - name = "perimeter defense turret" - desc = "" - installation = null - lethal_projectile = /obj/projectile/plasma/turret - lethal_projectile_sound = 'sound/blank.ogg' - mode = TURRET_LETHAL //It would be useless in stun mode anyway - faction = list("neutral","silicon","turret") //Minebots, medibots, etc that should not be shot. - -/obj/machinery/porta_turret/aux_base/assess_perp(mob/living/carbon/human/perp) - return 0 //Never shoot humanoids. You are on my own if Ashwalkers or the like attack! - -/obj/machinery/porta_turret/aux_base/setup() - return - -/obj/machinery/porta_turret/aux_base/interact(mob/user) //Controlled solely from the base console. - return - -/obj/machinery/porta_turret/aux_base/Initialize() - . = ..() - cover.name = name - cover.desc = desc - -/obj/machinery/porta_turret/centcom_shuttle - installation = null - max_integrity = 260 - always_up = 1 - use_power = NO_POWER_USE - has_cover = 0 - scan_range = 9 - stun_projectile = /obj/projectile/beam/laser - lethal_projectile = /obj/projectile/beam/laser - lethal_projectile_sound = 'sound/blank.ogg' - stun_projectile_sound = 'sound/blank.ogg' - icon_state = "syndie_off" - base_icon_state = "syndie" - faction = list("neutral","silicon","turret") - mode = TURRET_LETHAL - -/obj/machinery/porta_turret/centcom_shuttle/ComponentInitialize() - . = ..() - AddComponent(/datum/component/empprotection, EMP_PROTECT_SELF | EMP_PROTECT_WIRES) - -/obj/machinery/porta_turret/centcom_shuttle/assess_perp(mob/living/carbon/human/perp) - return 0 - -/obj/machinery/porta_turret/centcom_shuttle/setup() - return - -/obj/machinery/porta_turret/centcom_shuttle/weak - max_integrity = 120 - integrity_failure = 0.5 - name = "Old Laser Turret" - desc = "" - stun_projectile = /obj/projectile/beam/weak/penetrator - lethal_projectile = /obj/projectile/beam/weak/penetrator - faction = list("neutral","silicon","turret") - -//////////////////////// -//Turret Control Panel// -//////////////////////// - -/obj/machinery/turretid - name = "turret control panel" - desc = "" - icon = 'icons/obj/machines/turret_control.dmi' - icon_state = "control_standby" - density = FALSE - var/enabled = 1 - var/lethal = 0 - var/locked = TRUE - var/control_area = null //can be area name, path or nothing. - var/ailock = 0 // AI cannot use this - var/shoot_cyborgs = FALSE - req_access = list(ACCESS_AI_UPLOAD) - var/list/obj/machinery/porta_turret/turrets = list() - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - -/obj/machinery/turretid/Initialize(mapload, ndir = 0, built = 0) - . = ..() - if(built) - setDir(ndir) - locked = FALSE - pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) - pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 - power_change() //Checks power and initial settings - -/obj/machinery/turretid/Destroy() - turrets.Cut() - return ..() - -/obj/machinery/turretid/Initialize(mapload) //map-placed turrets autolink turrets - . = ..() - if(!mapload) - return - - if(control_area) - control_area = get_area_instance_from_text(control_area) - if(control_area == null) - control_area = get_area(src) - stack_trace("Bad control_area path for [src], [src.control_area]") - else if(!control_area) - control_area = get_area(src) - - for(var/obj/machinery/porta_turret/T in control_area) - turrets |= T - T.cp = src - -/obj/machinery/turretid/examine(mob/user) - . += ..() - if(issilicon(user) && !(stat & BROKEN)) - . += {"Ctrl-click [src] to [ enabled ? "disable" : "enable"] turrets. - Alt-click [src] to set turrets to [ lethal ? "stun" : "kill"]."} - -/obj/machinery/turretid/attackby(obj/item/I, mob/user, params) - if(stat & BROKEN) - return - - if(I.tool_behaviour == TOOL_MULTITOOL) - if(!multitool_check_buffer(user, I)) - return - var/obj/item/multitool/M = I - if(M.buffer && istype(M.buffer, /obj/machinery/porta_turret)) - turrets |= M.buffer - to_chat(user, "I link \the [M.buffer] with \the [src].") - return - - if (issilicon(user)) - return attack_hand(user) - - if ( get_dist(src, user) == 0 ) // trying to unlock the interface - if (allowed(usr)) - if(obj_flags & EMAGGED) - to_chat(user, "The turret control is unresponsive!") - return - - locked = !locked - to_chat(user, "I [ locked ? "lock" : "unlock"] the panel.") - if (locked) - if (user.machine==src) - user.unset_machine() - user << browse(null, "window=turretid") - else - if (user.machine==src) - attack_hand(user) - else - to_chat(user, "Access denied.") - -/obj/machinery/turretid/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - to_chat(user, "I short out the turret controls' access analysis module.") - obj_flags |= EMAGGED - locked = FALSE - if(user && user.machine == src) - attack_hand(user) - -/obj/machinery/turretid/attack_ai(mob/user) - if(!ailock || IsAdminGhost(user)) - return attack_hand(user) - else - to_chat(user, "There seems to be a firewall preventing you from accessing this device!") - -/obj/machinery/turretid/ui_interact(mob/user) - . = ..() - if ( get_dist(src, user) > 0 ) - if ( !(issilicon(user) || IsAdminGhost(user)) ) - to_chat(user, "I are too far away!") - user.unset_machine() - user << browse(null, "window=turretid") - return - - var/t = "" - - if(locked && !(issilicon(user) || IsAdminGhost(user))) - t += "
          Swipe ID card to unlock interface
          " - else - if(!issilicon(user) && !IsAdminGhost(user)) - t += "
          Swipe ID card to lock interface
          " - t += "Turrets [enabled?"activated":"deactivated"] - [enabled?"Disable":"Enable"]?
          " - t += "Currently set for [lethal?"lethal":"stun repeatedly"] - Change to [lethal?"Stun repeatedly":"Lethal"]?
          " - t += "Target Cyborgs [shoot_cyborgs?"Yes":"No"] - Change to [shoot_cyborgs?"Dont Shoot Borgs":"Shoot Borgs"]?
          " - var/datum/browser/popup = new(user, "turretid", "Turret Control Panel ([get_area_name(src, TRUE)])") - popup.set_content(t) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - -/obj/machinery/turretid/Topic(href, href_list) - if(..()) - return - if (locked) - if(!(issilicon(usr) || IsAdminGhost(usr))) - to_chat(usr, "Control panel is locked!") - return - if (href_list["toggleOn"]) - toggle_on(usr) - else if (href_list["toggleLethal"]) - toggle_lethal(usr) - else if (href_list["shoot_silicons"]) - shoot_silicons(usr) - attack_hand(usr) - -/obj/machinery/turretid/proc/toggle_lethal(mob/user) - lethal = !lethal - add_hiddenprint(user) - log_combat(user, src, "[lethal ? "enabled" : "disabled"] lethals on") - updateTurrets() - -/obj/machinery/turretid/proc/toggle_on(mob/user) - enabled = !enabled - add_hiddenprint(user) - log_combat(user, src, "[enabled ? "enabled" : "disabled"]") - updateTurrets() -/obj/machinery/turretid/proc/shoot_silicons(mob/user) - shoot_cyborgs = !shoot_cyborgs - add_hiddenprint(user) - log_combat(user, src, "[shoot_cyborgs ? "Shooting Borgs" : "Not Shooting Borgs"]") - updateTurrets() -/obj/machinery/turretid/proc/updateTurrets() - for (var/obj/machinery/porta_turret/aTurret in turrets) - aTurret.setState(enabled, lethal, shoot_cyborgs) - update_icon() - -/obj/machinery/turretid/update_icon_state() - if(stat & NOPOWER) - icon_state = "control_off" - else if (enabled) - if (lethal) - icon_state = "control_kill" - else - icon_state = "control_stun" - else - icon_state = "control_standby" - -/obj/item/wallframe/turret_control - name = "turret control frame" - desc = "" - icon_state = "apc" - result_path = /obj/machinery/turretid - custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT) - -/obj/item/gun/proc/get_turret_properties() - . = list() - .["lethal_projectile"] = null - .["lethal_projectile_sound"] = null - .["stun_projectile"] = null - .["stun_projectile_sound"] = null - .["base_icon_state"] = "standard" - -/obj/item/gun/energy/get_turret_properties() - . = ..() - - var/obj/item/ammo_casing/primary_ammo = ammo_type[1] - - .["stun_projectile"] = initial(primary_ammo.projectile_type) - .["stun_projectile_sound"] = initial(primary_ammo.fire_sound) - - if(ammo_type.len > 1) - var/obj/item/ammo_casing/secondary_ammo = ammo_type[2] - .["lethal_projectile"] = initial(secondary_ammo.projectile_type) - .["lethal_projectile_sound"] = initial(secondary_ammo.fire_sound) - else - .["lethal_projectile"] = .["stun_projectile"] - .["lethal_projectile_sound"] = .["stun_projectile_sound"] - -/obj/item/gun/ballistic/get_turret_properties() - . = ..() - var/obj/item/ammo_box/mag = mag_type - var/obj/item/ammo_casing/primary_ammo = initial(mag.ammo_type) - - .["base_icon_state"] = "syndie" - .["stun_projectile"] = initial(primary_ammo.projectile_type) - .["stun_projectile_sound"] = initial(primary_ammo.fire_sound) - .["lethal_projectile"] = .["stun_projectile"] - .["lethal_projectile_sound"] = .["stun_projectile_sound"] - - -/obj/item/gun/energy/laser/bluetag/get_turret_properties() - . = ..() - .["stun_projectile"] = /obj/projectile/beam/lasertag/bluetag - .["lethal_projectile"] = /obj/projectile/beam/lasertag/bluetag - .["base_icon_state"] = "blue" - .["shot_delay"] = 30 - .["team_color"] = "blue" - -/obj/item/gun/energy/laser/redtag/get_turret_properties() - . = ..() - .["stun_projectile"] = /obj/projectile/beam/lasertag/redtag - .["lethal_projectile"] = /obj/projectile/beam/lasertag/redtag - .["base_icon_state"] = "red" - .["shot_delay"] = 30 - .["team_color"] = "red" - -/obj/item/gun/energy/e_gun/turret/get_turret_properties() - . = ..() - -/obj/machinery/porta_turret/lasertag - req_access = list(ACCESS_MAINT_TUNNELS, ACCESS_THEATRE) - turret_flags = TURRET_FLAG_AUTH_WEAPONS - var/team_color - -/obj/machinery/porta_turret/lasertag/assess_perp(mob/living/carbon/human/perp) - . = 0 - if(team_color == "blue") //Lasertag turrets target the opposing team, how great is that? -Sieve - . = 0 //But does not target anyone else - if(istype(perp.wear_armor, /obj/item/clothing/suit/redtag)) - . += 4 - if(perp.is_holding_item_of_type(/obj/item/gun/energy/laser/redtag)) - . += 4 - if(istype(perp.belt, /obj/item/gun/energy/laser/redtag)) - . += 2 - - if(team_color == "red") - . = 0 - if(istype(perp.wear_armor, /obj/item/clothing/suit/bluetag)) - . += 4 - if(perp.is_holding_item_of_type(/obj/item/gun/energy/laser/bluetag)) - . += 4 - if(istype(perp.belt, /obj/item/gun/energy/laser/bluetag)) - . += 2 - -/obj/machinery/porta_turret/lasertag/setup(obj/item/gun/gun) - var/list/properties = ..() - if(properties["team_color"]) - team_color = properties["team_color"] - -/obj/machinery/porta_turret/lasertag/ui_interact(mob/user) - . = ..() - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(team_color == "blue" && istype(H.wear_armor, /obj/item/clothing/suit/redtag)) - return - if(team_color == "red" && istype(H.wear_armor, /obj/item/clothing/suit/bluetag)) - return - - var/dat = "Status: [on ? "On" : "Off"]" - - var/datum/browser/popup = new(user, "autosec", "Automatic Portable Turret Installation", 300, 300) - popup.set_content(dat) - popup.open() - -//lasertag presets -/obj/machinery/porta_turret/lasertag/red - installation = /obj/item/gun/energy/laser/redtag - team_color = "red" - -/obj/machinery/porta_turret/lasertag/blue - installation = /obj/item/gun/energy/laser/bluetag - team_color = "blue" - -/obj/machinery/porta_turret/lasertag/bullet_act(obj/projectile/P) - . = ..() - if(on) - if(team_color == "blue") - if(istype(P, /obj/projectile/beam/lasertag/redtag)) - on = FALSE - addtimer(VARSET_CALLBACK(src, on, TRUE), 10 SECONDS) - else if(team_color == "red") - if(istype(P, /obj/projectile/beam/lasertag/bluetag)) - on = FALSE - addtimer(VARSET_CALLBACK(src, on, TRUE), 10 SECONDS) diff --git a/code/game/machinery/porta_turret/portable_turret_construct.dm b/code/game/machinery/porta_turret/portable_turret_construct.dm deleted file mode 100644 index 84ef52c148..0000000000 --- a/code/game/machinery/porta_turret/portable_turret_construct.dm +++ /dev/null @@ -1,195 +0,0 @@ -#define PTURRET_UNSECURED 0 -#define PTURRET_BOLTED 1 -#define PTURRET_START_INTERNAL_ARMOUR 2 -#define PTURRET_INTERNAL_ARMOUR_ON 3 -#define PTURRET_GUN_EQUIPPED 4 -#define PTURRET_SENSORS_ON 5 -#define PTURRET_CLOSED 6 -#define PTURRET_START_EXTERNAL_ARMOUR 7 -#define PTURRET_EXTERNAL_ARMOUR_ON 8 - -/obj/machinery/porta_turret_construct - name = "turret frame" - icon = 'icons/obj/turrets.dmi' - icon_state = "turret_frame" - desc = "" - anchored = FALSE - density = TRUE - var/build_step = PTURRET_UNSECURED //the current step in the building process - var/finish_name = "turret" //the name applied to the product turret - var/obj/item/gun/installed_gun = null - -/obj/machinery/porta_turret_construct/attackby(obj/item/I, mob/user, params) - //this is a bit unwieldy but self-explanatory - switch(build_step) - if(PTURRET_UNSECURED) //first step - if(I.tool_behaviour == TOOL_WRENCH && !anchored) - I.play_tool_sound(src, 100) - to_chat(user, "I secure the external bolts.") - setAnchored(TRUE) - build_step = PTURRET_BOLTED - return - - else if(I.tool_behaviour == TOOL_CROWBAR && !anchored) - I.play_tool_sound(src, 75) - to_chat(user, "I dismantle the turret construction.") - new /obj/item/stack/sheet/metal( loc, 5) - qdel(src) - return - - if(PTURRET_BOLTED) - if(istype(I, /obj/item/stack/sheet/metal)) - var/obj/item/stack/sheet/metal/M = I - if(M.use(2)) - to_chat(user, "I add some metal armor to the interior frame.") - build_step = PTURRET_START_INTERNAL_ARMOUR - icon_state = "turret_frame2" - else - to_chat(user, "I need two sheets of metal to continue construction!") - return - - else if(I.tool_behaviour == TOOL_WRENCH) - I.play_tool_sound(src, 75) - to_chat(user, "I unfasten the external bolts.") - setAnchored(FALSE) - build_step = PTURRET_UNSECURED - return - - - if(PTURRET_START_INTERNAL_ARMOUR) - if(I.tool_behaviour == TOOL_WRENCH) - I.play_tool_sound(src, 100) - to_chat(user, "I bolt the metal armor into place.") - build_step = PTURRET_INTERNAL_ARMOUR_ON - return - - else if(I.tool_behaviour == TOOL_WELDER) - if(!I.tool_start_check(user, amount=5)) //uses up 5 fuel - return - - to_chat(user, "I start to remove the turret's interior metal armor...") - - if(I.use_tool(src, user, 20, volume=50, amount=5)) //uses up 5 fuel - build_step = PTURRET_BOLTED - to_chat(user, "I remove the turret's interior metal armor.") - new /obj/item/stack/sheet/metal(drop_location(), 2) - return - - - if(PTURRET_INTERNAL_ARMOUR_ON) - if(istype(I, /obj/item/gun/energy)) //the gun installation part - var/obj/item/gun/energy/E = I - if(!user.transferItemToLoc(E, src)) - return - installed_gun = E - to_chat(user, "I add [I] to the turret.") - build_step = PTURRET_GUN_EQUIPPED - return - - else if(I.tool_behaviour == TOOL_WRENCH) - I.play_tool_sound(src, 100) - to_chat(user, "I remove the turret's metal armor bolts.") - build_step = PTURRET_START_INTERNAL_ARMOUR - return - - if(PTURRET_GUN_EQUIPPED) - if(isprox(I)) - build_step = PTURRET_SENSORS_ON - if(!user.temporarilyRemoveItemFromInventory(I)) - return - to_chat(user, "I add the proximity sensor to the turret.") - qdel(I) - return - - - if(PTURRET_SENSORS_ON) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - I.play_tool_sound(src, 100) - build_step = PTURRET_CLOSED - to_chat(user, "I close the internal access hatch.") - return - - - if(PTURRET_CLOSED) - if(istype(I, /obj/item/stack/sheet/metal)) - var/obj/item/stack/sheet/metal/M = I - if(M.use(2)) - to_chat(user, "I add some metal armor to the exterior frame.") - build_step = PTURRET_START_EXTERNAL_ARMOUR - else - to_chat(user, "I need two sheets of metal to continue construction!") - return - - else if(I.tool_behaviour == TOOL_SCREWDRIVER) - I.play_tool_sound(src, 100) - build_step = PTURRET_SENSORS_ON - to_chat(user, "I open the internal access hatch.") - return - - if(PTURRET_START_EXTERNAL_ARMOUR) - if(I.tool_behaviour == TOOL_WELDER) - if(!I.tool_start_check(user, amount=5)) - return - - to_chat(user, "I begin to weld the turret's armor down...") - if(I.use_tool(src, user, 30, volume=50, amount=5)) - build_step = PTURRET_EXTERNAL_ARMOUR_ON - to_chat(user, "I weld the turret's armor down.") - - //The final step: create a full turret - - var/obj/machinery/porta_turret/turret - //fuck lasertag turrets - if(istype(installed_gun, /obj/item/gun/energy/laser/bluetag) || istype(installed_gun, /obj/item/gun/energy/laser/redtag)) - turret = new/obj/machinery/porta_turret/lasertag(loc) - else - turret = new/obj/machinery/porta_turret(loc) - turret.name = finish_name - turret.installation = installed_gun.type - turret.setup(installed_gun) - qdel(src) - - else if(I.tool_behaviour == TOOL_CROWBAR) - I.play_tool_sound(src, 75) - to_chat(user, "I pry off the turret's exterior armor.") - new /obj/item/stack/sheet/metal(loc, 2) - build_step = PTURRET_CLOSED - return - - if(istype(I, /obj/item/pen)) //you can rename turrets like bots! - var/t = stripped_input(user, "Enter new turret name", name, finish_name) - if(!t) - return - if(!Adjacent(user)) - return - - finish_name = t - return - return ..() - - -/obj/machinery/porta_turret_construct/attack_hand(mob/user) - . = ..() - if(.) - return - switch(build_step) - if(PTURRET_GUN_EQUIPPED) - build_step = PTURRET_INTERNAL_ARMOUR_ON - - installed_gun.forceMove(loc) - to_chat(user, "I remove [installed_gun] from the turret frame.") - installed_gun = null - - if(PTURRET_SENSORS_ON) - to_chat(user, "I remove the prox sensor from the turret frame.") - new /obj/item/assembly/prox_sensor(loc) - build_step = PTURRET_GUN_EQUIPPED - -/obj/machinery/porta_turret_construct/attack_ai() - return - -/obj/machinery/porta_turret_construct/Destroy() - if(installed_gun) - qdel(installed_gun) - installed_gun = null - . = ..() diff --git a/code/game/machinery/porta_turret/portable_turret_cover.dm b/code/game/machinery/porta_turret/portable_turret_cover.dm deleted file mode 100644 index 92951c0e03..0000000000 --- a/code/game/machinery/porta_turret/portable_turret_cover.dm +++ /dev/null @@ -1,94 +0,0 @@ - -/************************ -* PORTABLE TURRET COVER * -************************/ - -/obj/machinery/porta_turret_cover - name = "turret" - icon = 'icons/obj/turrets.dmi' - icon_state = "turretCover" - layer = HIGH_OBJ_LAYER - density = FALSE - max_integrity = 80 - var/obj/machinery/porta_turret/parent_turret = null - -/obj/machinery/porta_turret_cover/Destroy() - if(parent_turret) - parent_turret.cover = null - parent_turret.invisibility = 0 - parent_turret = null - return ..() - -//The below code is pretty much just recoded from the initial turret object. It's necessary but uncommented because it's exactly the same! -//>necessary -//I'm not fixing it because i'm fucking bored of this code already, but someone should just reroute these to the parent turret's procs. - -/obj/machinery/porta_turret_cover/attack_ai(mob/user) - . = ..() - if(.) - return - return parent_turret.attack_ai(user) - - -/obj/machinery/porta_turret_cover/attack_hand(mob/user) - . = ..() - if(.) - return - return parent_turret.attack_hand(user) - - -/obj/machinery/porta_turret_cover/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_WRENCH && !parent_turret.on) - if(parent_turret.raised) - return - - if(!parent_turret.anchored) - parent_turret.setAnchored(TRUE) - to_chat(user, "I secure the exterior bolts on the turret.") - parent_turret.invisibility = 0 - parent_turret.update_icon() - else - parent_turret.setAnchored(FALSE) - to_chat(user, "I unsecure the exterior bolts on the turret.") - parent_turret.invisibility = INVISIBILITY_MAXIMUM - parent_turret.update_icon() - qdel(src) - - else if(I.GetID()) - if(parent_turret.allowed(user)) - parent_turret.locked = !parent_turret.locked - to_chat(user, "Controls are now [parent_turret.locked ? "locked" : "unlocked"].") - updateUsrDialog() - else - to_chat(user, "Access denied.") - else if(I.tool_behaviour == TOOL_MULTITOOL && !parent_turret.locked) - if(!multitool_check_buffer(user, I)) - return - var/obj/item/multitool/M = I - M.buffer = parent_turret - to_chat(user, "I add [parent_turret] to multitool buffer.") - else - return ..() - -/obj/machinery/porta_turret_cover/attacked_by(obj/item/I, mob/user) - parent_turret.attacked_by(I, user) - -/obj/machinery/porta_turret_cover/attack_alien(mob/living/carbon/alien/humanoid/user) - parent_turret.attack_alien(user) - -/obj/machinery/porta_turret_cover/attack_animal(mob/living/simple_animal/user) - parent_turret.attack_animal(user) - -/obj/machinery/porta_turret_cover/attack_hulk(mob/living/carbon/human/user) - return parent_turret.attack_hulk(user) - -/obj/machinery/porta_turret_cover/can_be_overridden() - . = 0 - -/obj/machinery/porta_turret_cover/emag_act(mob/user) - if(!(parent_turret.obj_flags & EMAGGED)) - to_chat(user, "I short out [parent_turret]'s threat assessment circuits.") - visible_message("[parent_turret] hums oddly...") - parent_turret.obj_flags |= EMAGGED - parent_turret.on = FALSE - addtimer(VARSET_CALLBACK(parent_turret, on, TRUE), 4 SECONDS) diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm deleted file mode 100644 index 245619304b..0000000000 --- a/code/game/machinery/quantum_pad.dm +++ /dev/null @@ -1,192 +0,0 @@ -/obj/machinery/quantumpad - name = "quantum pad" - desc = "" - icon = 'icons/obj/telescience.dmi' - icon_state = "qpad-idle" - use_power = IDLE_POWER_USE - idle_power_usage = 200 - active_power_usage = 5000 - obj_flags = CAN_BE_HIT | UNIQUE_RENAME - circuit = /obj/item/circuitboard/machine/quantumpad - var/teleport_cooldown = 400 //30 seconds base due to base parts - var/teleport_speed = 50 - var/last_teleport //to handle the cooldown - var/teleporting = FALSE //if it's in the process of teleporting - var/power_efficiency = 1 - var/obj/machinery/quantumpad/linked_pad - - //mapping - var/static/list/mapped_quantum_pads = list() - var/map_pad_id = "" as text //what's my name - var/map_pad_link_id = "" as text //who's my friend - -/obj/machinery/quantumpad/Initialize() - . = ..() - if(map_pad_id) - mapped_quantum_pads[map_pad_id] = src - -/obj/machinery/quantumpad/Destroy() - mapped_quantum_pads -= map_pad_id - return ..() - -/obj/machinery/quantumpad/examine(mob/user) - . = ..() - . += "It is [ linked_pad ? "currently" : "not"] linked to another pad." - if(!panel_open) - . += "The panel is screwed in, obstructing the linking device." - else - . += "The linking device is now able to be scanned with a multitool." - -/obj/machinery/quantumpad/RefreshParts() - var/E = 0 - for(var/obj/item/stock_parts/capacitor/C in component_parts) - E += C.rating - power_efficiency = E - E = 0 - for(var/obj/item/stock_parts/manipulator/M in component_parts) - E += M.rating - teleport_speed = initial(teleport_speed) - teleport_speed -= (E*10) - teleport_cooldown = initial(teleport_cooldown) - teleport_cooldown -= (E * 100) - -/obj/machinery/quantumpad/attackby(obj/item/I, mob/user, params) - if(default_deconstruction_screwdriver(user, "pad-idle-o", "qpad-idle", I)) - return - - if(panel_open) - if(I.tool_behaviour == TOOL_MULTITOOL) - if(!multitool_check_buffer(user, I)) - return - var/obj/item/multitool/M = I - M.buffer = src - to_chat(user, "I save the data in [I]'s buffer. It can now be saved to pads with closed panels.") - return TRUE - else if(I.tool_behaviour == TOOL_MULTITOOL) - if(!multitool_check_buffer(user, I)) - return - var/obj/item/multitool/M = I - if(istype(M.buffer, /obj/machinery/quantumpad)) - if(M.buffer == src) - to_chat(user, "I cannot link a pad to itself!") - return TRUE - else - linked_pad = M.buffer - to_chat(user, "I link [src] to the one in [I]'s buffer.") - return TRUE - else - to_chat(user, "There is no quantum pad data saved in [I]'s buffer!") - return TRUE - - else if(istype(I, /obj/item/quantum_keycard)) - var/obj/item/quantum_keycard/K = I - if(K.qpad) - to_chat(user, "I insert [K] into [src]'s card slot, activating it.") - interact(user, K.qpad) - else - to_chat(user, "I insert [K] into [src]'s card slot, initiating the link procedure.") - if(do_after(user, 40, target = src)) - to_chat(user, "I complete the link between [K] and [src].") - K.qpad = src - - if(default_deconstruction_crowbar(I)) - return - - return ..() - -/obj/machinery/quantumpad/interact(mob/user, obj/machinery/quantumpad/target_pad = linked_pad) - if(!target_pad || QDELETED(target_pad)) - if(!map_pad_link_id || !initMappedLink()) - to_chat(user, "Target pad not found!") - return - - if(world.time < last_teleport + teleport_cooldown) - to_chat(user, "[src] is recharging power. Please wait [DisplayTimeText(last_teleport + teleport_cooldown - world.time)].") - return - - if(teleporting) - to_chat(user, "[src] is charging up. Please wait.") - return - - if(target_pad.teleporting) - to_chat(user, "Target pad is busy. Please wait.") - return - - if(target_pad.stat & NOPOWER) - to_chat(user, "Target pad is not responding to ping.") - return - add_fingerprint(user) - doteleport(user, target_pad) - -/obj/machinery/quantumpad/proc/sparks() - var/datum/effect_system/spark_spread/quantum/s = new /datum/effect_system/spark_spread/quantum - s.set_up(5, 1, get_turf(src)) - s.start() - -/obj/machinery/quantumpad/attack_ghost(mob/dead/observer/ghost) - . = ..() - if(.) - return - if(!linked_pad && map_pad_link_id) - initMappedLink() - if(linked_pad) - ghost.forceMove(get_turf(linked_pad)) - -/obj/machinery/quantumpad/proc/doteleport(mob/user, obj/machinery/quantumpad/target_pad = linked_pad) - if(target_pad) - playsound(get_turf(src), 'sound/blank.ogg', 25, TRUE) - teleporting = TRUE - - spawn(teleport_speed) - if(!src || QDELETED(src)) - teleporting = FALSE - return - if(stat & NOPOWER) - to_chat(user, "[src] is unpowered!") - teleporting = FALSE - return - if(!target_pad || QDELETED(target_pad) || target_pad.stat & NOPOWER) - to_chat(user, "Linked pad is not responding to ping. Teleport aborted.") - teleporting = FALSE - return - - teleporting = FALSE - last_teleport = world.time - - // use a lot of power - use_power(10000 / power_efficiency) - sparks() - target_pad.sparks() - - flick("qpad-beam", src) - playsound(get_turf(src), 'sound/blank.ogg', 25, TRUE, extrarange = 3, falloff = 5) - flick("qpad-beam", target_pad) - playsound(get_turf(target_pad), 'sound/blank.ogg', 25, TRUE, extrarange = 3, falloff = 5) - for(var/atom/movable/ROI in get_turf(src)) - if(QDELETED(ROI)) - continue //sleeps in CHECK_TICK - - // if is anchored, don't let through - if(ROI.anchored) - if(isliving(ROI)) - var/mob/living/L = ROI - //only TP living mobs buckled to non anchored items - if(!L.buckled || L.buckled.anchored) - continue - //Don't TP ghosts - else if(!isobserver(ROI)) - continue - - do_teleport(ROI, get_turf(target_pad),null,TRUE,null,null,null,null,TRUE, channel = TELEPORT_CHANNEL_QUANTUM) - CHECK_TICK - -/obj/machinery/quantumpad/proc/initMappedLink() - . = FALSE - var/obj/machinery/quantumpad/link = mapped_quantum_pads[map_pad_link_id] - if(link) - linked_pad = link - . = TRUE - -/obj/item/paper/guides/quantumpad - name = "Quantum Pad For Dummies" - info = "
          Dummies Guide To Quantum Pads


          Do you hate the concept of having to use your legs, let alone walk to places? Well, with the Quantum Pad (tm), never again will the fear of cardio keep you from going places!

          How to set up your Quantum Pad(tm)


          1.Unscrew the Quantum Pad(tm) you wish to link.
          2. Use your multi-tool to cache the buffer of the Quantum Pad(tm) you wish to link.
          3. Apply the multi-tool to the secondary Quantum Pad(tm) you wish to link to the first Quantum Pad(tm)

          If you followed these instructions carefully, your Quantum Pad(tm) should now be properly linked together for near-instant movement across the station! Bear in mind that this is technically a one-way teleport, so you'll need to do the same process with the secondary pad to the first one if you wish to travel between both.
          " diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm deleted file mode 100644 index 88cb78cb74..0000000000 --- a/code/game/machinery/recharger.dm +++ /dev/null @@ -1,175 +0,0 @@ -/obj/machinery/recharger - name = "recharger" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "recharger0" - desc = "" - use_power = IDLE_POWER_USE - idle_power_usage = 4 - active_power_usage = 250 - circuit = /obj/item/circuitboard/machine/recharger - pass_flags = PASSTABLE - var/obj/item/charging = null - var/recharge_coeff = 1 - - var/static/list/allowed_devices = typecacheof(list( - /obj/item/gun/energy, - /obj/item/melee/baton, - /obj/item/ammo_box/magazine/recharge, - /obj/item/modular_computer)) - -/obj/machinery/recharger/RefreshParts() - for(var/obj/item/stock_parts/capacitor/C in component_parts) - recharge_coeff = C.rating - -/obj/machinery/recharger/examine(mob/user) - . = ..() - if(!in_range(user, src) && !issilicon(user) && !isobserver(user)) - . += "You're too far away to examine [src]'s contents and display!" - return - - if(charging) - . += {"\The [src] contains: - - \A [charging]."} - - if(!(stat & (NOPOWER|BROKEN))) - . += "The status display reads:" - . += "- Recharging [recharge_coeff*10]% cell charge per cycle." - if(charging) - var/obj/item/stock_parts/cell/C = charging.get_cell() - . += "- \The [charging]'s cell is at [C.percent()]%." - - -/obj/machinery/recharger/proc/setCharging(new_charging) - charging = new_charging - if (new_charging) - START_PROCESSING(SSmachines, src) - use_power = ACTIVE_POWER_USE - update_icon(scan = TRUE) - else - use_power = IDLE_POWER_USE - update_icon() - -/obj/machinery/recharger/attackby(obj/item/G, mob/user, params) - if(G.tool_behaviour == TOOL_WRENCH) - if(charging) - to_chat(user, "Remove the charging item first!") - return - setAnchored(!anchored) - power_change() - to_chat(user, "I [anchored ? "attached" : "detached"] [src].") - G.play_tool_sound(src) - return - - var/allowed = is_type_in_typecache(G, allowed_devices) - - if(allowed) - if(anchored) - if(charging || panel_open) - return 1 - - //Checks to make sure he's not in space doing it, and that the area got proper power. - var/area/a = get_area(src) - if(!isarea(a) || a.power_equip == 0) - to_chat(user, "[src] blinks red as you try to insert [G].") - return 1 - - if (istype(G, /obj/item/gun/energy)) - var/obj/item/gun/energy/E = G - if(!E.can_charge) - to_chat(user, "My gun has no external power connector.") - return 1 - - if(!user.transferItemToLoc(G, src)) - return 1 - setCharging(G) - - else - to_chat(user, "[src] isn't connected to anything!") - return 1 - - if(anchored && !charging) - if(default_deconstruction_screwdriver(user, "rechargeropen", "recharger0", G)) - return - - if(panel_open && G.tool_behaviour == TOOL_CROWBAR) - default_deconstruction_crowbar(G) - return - - return ..() - -/obj/machinery/recharger/attack_hand(mob/user) - . = ..() - if(.) - return - - add_fingerprint(user) - if(charging) - charging.update_icon() - charging.forceMove(drop_location()) - user.put_in_hands(charging) - setCharging(null) - -/obj/machinery/recharger/attack_tk(mob/user) - if(charging) - charging.update_icon() - charging.forceMove(drop_location()) - setCharging(null) - -/obj/machinery/recharger/process() - if(stat & (NOPOWER|BROKEN) || !anchored) - return PROCESS_KILL - - var/using_power = 0 - if(charging) - var/obj/item/stock_parts/cell/C = charging.get_cell() - if(C) - if(C.charge < C.maxcharge) - C.give(C.chargerate * recharge_coeff) - use_power(250 * recharge_coeff) - using_power = 1 - update_icon(using_power) - - if(istype(charging, /obj/item/ammo_box/magazine/recharge)) - var/obj/item/ammo_box/magazine/recharge/R = charging - if(R.stored_ammo.len < R.max_ammo) - R.stored_ammo += new R.ammo_type(R) - use_power(200 * recharge_coeff) - using_power = 1 - update_icon(using_power) - return - else - return PROCESS_KILL - -/obj/machinery/recharger/emp_act(severity) - . = ..() - if (. & EMP_PROTECT_CONTENTS) - return - if(!(stat & (NOPOWER|BROKEN)) && anchored) - if(istype(charging, /obj/item/gun/energy)) - var/obj/item/gun/energy/E = charging - if(E.cell) - E.cell.emp_act(severity) - - else if(istype(charging, /obj/item/melee/baton)) - var/obj/item/melee/baton/B = charging - if(B.cell) - B.cell.charge = 0 - - -/obj/machinery/recharger/update_icon(using_power = 0, scan) //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier. - if(stat & (NOPOWER|BROKEN) || !anchored) - icon_state = "rechargeroff" - return - if(scan) - icon_state = "rechargeroff" - return - if(panel_open) - icon_state = "rechargeropen" - return - if(charging) - if(using_power) - icon_state = "recharger1" - else - icon_state = "recharger2" - return - icon_state = "recharger0" diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm deleted file mode 100644 index 0d51c47683..0000000000 --- a/code/game/machinery/rechargestation.dm +++ /dev/null @@ -1,103 +0,0 @@ -/obj/machinery/recharge_station - name = "cyborg recharging station" - desc = "" - icon = 'icons/obj/objects.dmi' - icon_state = "borgcharger0" - density = FALSE - use_power = IDLE_POWER_USE - idle_power_usage = 5 - active_power_usage = 1000 - req_access = list(ACCESS_ROBOTICS) - state_open = TRUE - circuit = /obj/item/circuitboard/machine/cyborgrecharger - occupant_typecache = list(/mob/living/silicon/robot, /mob/living/carbon/human) - var/recharge_speed - var/repairs - -/obj/machinery/recharge_station/Initialize() - . = ..() - update_icon() - -/obj/machinery/recharge_station/RefreshParts() - recharge_speed = 0 - repairs = 0 - for(var/obj/item/stock_parts/capacitor/C in component_parts) - recharge_speed += C.rating * 100 - for(var/obj/item/stock_parts/manipulator/M in component_parts) - repairs += M.rating - 1 - for(var/obj/item/stock_parts/cell/C in component_parts) - recharge_speed *= C.maxcharge / 10000 - -/obj/machinery/recharge_station/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Recharging [recharge_speed]J per cycle." - if(repairs) - . += "[src] has been upgraded to support automatic repairs." - -/obj/machinery/recharge_station/process() - if(!is_operational()) - return - - if(occupant) - process_occupant() - return 1 - -/obj/machinery/recharge_station/relaymove(mob/user) - if(user.stat) - return - open_machine() - -/obj/machinery/recharge_station/emp_act(severity) - . = ..() - if(!(stat & (BROKEN|NOPOWER))) - if(occupant && !(. & EMP_PROTECT_CONTENTS)) - occupant.emp_act(severity) - if (!(. & EMP_PROTECT_SELF)) - open_machine() - -/obj/machinery/recharge_station/attackby(obj/item/P, mob/user, params) - if(state_open) - if(default_deconstruction_screwdriver(user, "borgdecon2", "borgcharger0", P)) - return - - if(default_pry_open(P)) - return - - if(default_deconstruction_crowbar(P)) - return - return ..() - -/obj/machinery/recharge_station/interact(mob/user) - toggle_open() - return TRUE - -/obj/machinery/recharge_station/proc/toggle_open() - if(state_open) - close_machine() - else - open_machine() - -/obj/machinery/recharge_station/open_machine() - . = ..() - use_power = IDLE_POWER_USE - -/obj/machinery/recharge_station/close_machine() - . = ..() - if(occupant) - use_power = ACTIVE_POWER_USE //It always tries to charge, even if it can't. - add_fingerprint(occupant) - -/obj/machinery/recharge_station/update_icon_state() - if(is_operational()) - if(state_open) - icon_state = "borgcharger0" - else - icon_state = (occupant ? "borgcharger1" : "borgcharger2") - else - icon_state = (state_open ? "borgcharger-u0" : "borgcharger-u1") - -/obj/machinery/recharge_station/proc/process_occupant() - if(!occupant) - return - SEND_SIGNAL(occupant, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, recharge_speed, repairs) diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm deleted file mode 100644 index 5daad5d64a..0000000000 --- a/code/game/machinery/recycler.dm +++ /dev/null @@ -1,198 +0,0 @@ -#define SAFETY_COOLDOWN 100 - -/obj/machinery/recycler - name = "recycler" - desc = "" - icon = 'icons/obj/recycling.dmi' - icon_state = "grinder-o0" - layer = ABOVE_ALL_MOB_LAYER // Overhead - density = TRUE - circuit = /obj/item/circuitboard/machine/recycler - var/safety_mode = FALSE // Temporarily stops machine if it detects a mob - var/icon_name = "grinder-o" - var/blood = 0 - var/eat_dir = WEST - var/amount_produced = 50 - var/crush_damage = 1000 - var/eat_victim_items = TRUE - var/item_recycle_sound = 'sound/blank.ogg' - -/obj/machinery/recycler/Initialize() - AddComponent(/datum/component/butchering/recycler, 1, amount_produced,amount_produced/5) - AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/plasma, /datum/material/gold, /datum/material/diamond, /datum/material/plastic, /datum/material/uranium, /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace), INFINITY, FALSE, null, null, null, TRUE) - . = ..() - update_icon() - req_one_access = get_all_accesses() + get_all_centcom_access() - -/obj/machinery/recycler/RefreshParts() - var/amt_made = 0 - var/mat_mod = 0 - for(var/obj/item/stock_parts/matter_bin/B in component_parts) - mat_mod = 2 * B.rating - mat_mod *= 50000 - for(var/obj/item/stock_parts/manipulator/M in component_parts) - amt_made = 12.5 * M.rating //% of materials salvaged - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - materials.max_amount = mat_mod - amount_produced = min(50, amt_made) + 50 - var/datum/component/butchering/butchering = GetComponent(/datum/component/butchering/recycler) - butchering.effectiveness = amount_produced - butchering.bonus_modifier = amount_produced/5 - -/obj/machinery/recycler/examine(mob/user) - . = ..() - . += "Reclaiming [amount_produced]% of materials salvaged." - . += {"The power light is [(stat & NOPOWER) ? "off" : "on"]. - The safety-mode light is [safety_mode ? "on" : "off"]. - The safety-sensors status light is [obj_flags & EMAGGED ? "off" : "on"]."} - - -/obj/machinery/recycler/attackby(obj/item/I, mob/user, params) - if(default_deconstruction_screwdriver(user, "grinder-oOpen", "grinder-o0", I)) - return - - if(default_pry_open(I)) - return - - if(default_unfasten_wrench(user, I)) - return - - if(default_deconstruction_crowbar(I)) - return - return ..() - -/obj/machinery/recycler/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - obj_flags |= EMAGGED - if(safety_mode) - safety_mode = FALSE - update_icon() - playsound(src, "sparks", 75, TRUE, -1) - to_chat(user, "I use the cryptographic sequencer on [src].") - -/obj/machinery/recycler/update_icon_state() - ..() - var/is_powered = !(stat & (BROKEN|NOPOWER)) - if(safety_mode) - is_powered = FALSE - icon_state = icon_name + "[is_powered]" + "[(blood ? "bld" : "")]" // add the blood tag at the end - -/obj/machinery/recycler/CanPass(atom/movable/AM) - . = ..() - if(!anchored) - return - var/move_dir = get_dir(loc, AM.loc) - if(move_dir == eat_dir) - return TRUE - -/obj/machinery/recycler/Crossed(atom/movable/AM) - eat(AM) - . = ..() - -/obj/machinery/recycler/proc/eat(atom/AM0, sound=TRUE) - if(stat & (BROKEN|NOPOWER)) - return - if(safety_mode) - return - - var/list/to_eat - if(istype(AM0, /obj/item)) - to_eat = AM0.GetAllContents() - else - to_eat = list(AM0) - - var/items_recycled = 0 - - for(var/i in to_eat) - var/atom/movable/AM = i - var/obj/item/bodypart/head/as_head = AM - var/obj/item/mmi/as_mmi = AM - if(istype(AM, /obj/item/organ/brain) || (istype(as_head) && as_head.brain) || (istype(as_mmi) && as_mmi.brain) || istype(AM, /mob/living/brain)) - emergency_stop(AM) - else if(isliving(AM)) - if(obj_flags & EMAGGED) - crush_living(AM) - else - emergency_stop(AM) - else if(istype(AM, /obj/item)) - recycle_item(AM) - items_recycled++ - else - playsound(src, 'sound/blank.ogg', 50, FALSE) - if(items_recycled && sound) - playsound(src, item_recycle_sound, 50, TRUE) - -/obj/machinery/recycler/proc/recycle_item(obj/item/I) - - I.forceMove(loc) - var/obj/item/grown/log/L = I - if(istype(L)) - var/seed_modifier = 0 - if(L.seed) - seed_modifier = round(L.seed.potency / 25) - new L.plank_type(src.loc, 1 + seed_modifier) - qdel(L) - return - else - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - var/material_amount = materials.get_item_material_amount(I) - if(!material_amount) - qdel(I) - return - materials.insert_item(I, multiplier = (amount_produced / 100)) - qdel(I) - materials.retrieve_all() - - -/obj/machinery/recycler/proc/emergency_stop(mob/living/L) - playsound(src, 'sound/blank.ogg', 50, FALSE) - safety_mode = TRUE - update_icon() - L.forceMove(loc) - addtimer(CALLBACK(src, PROC_REF(reboot)), SAFETY_COOLDOWN) - -/obj/machinery/recycler/proc/reboot() - playsound(src, 'sound/blank.ogg', 50, FALSE) - safety_mode = FALSE - update_icon() - -/obj/machinery/recycler/proc/crush_living(mob/living/L) - - L.forceMove(loc) - - if(issilicon(L)) - playsound(src, 'sound/blank.ogg', 50, TRUE) - else - playsound(src, 'sound/blank.ogg', 50, TRUE) - - if(iscarbon(L)) - if(L.stat == CONSCIOUS) - L.say("ARRRRRRRRRRRGH!!!", forced="recycler grinding") - add_mob_blood(L) - - if(!blood && !issilicon(L)) - blood = TRUE - update_icon() - - // Remove and recycle the equipped items - if(eat_victim_items) - for(var/obj/item/I in L.get_equipped_items(TRUE)) - if(L.dropItemToGround(I)) - eat(I, sound=FALSE) - - // Instantly lie down, also go unconscious from the pain, before you die. - L.Unconscious(100) - L.adjustBruteLoss(crush_damage) - -/obj/machinery/recycler/deathtrap - name = "dangerous old crusher" - obj_flags = CAN_BE_HIT | EMAGGED - crush_damage = 120 - flags_1 = NODECONSTRUCT_1 - -/obj/item/paper/guides/recycler - name = "paper - 'garbage duty instructions'" - info = "

          New Assignment

          You have been assigned to collect garbage from trash bins, located around the station. The crewmembers will put their trash into it and you will collect the said trash.

          There is a recycling machine near your closet, inside maintenance; use it to recycle the trash for a small chance to get useful minerals. Then deliver these minerals to cargo or engineering. You are our last hope for a clean station, do not screw this up!" - -#undef SAFETY_COOLDOWN diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm deleted file mode 100644 index 5b888069fd..0000000000 --- a/code/game/machinery/requests_console.dm +++ /dev/null @@ -1,462 +0,0 @@ -/******************** Requests Console ********************/ -/** Originally written by errorage, updated by: Carn, needs more work though. I just added some security fixes */ - -GLOBAL_LIST_EMPTY(req_console_assistance) -GLOBAL_LIST_EMPTY(req_console_supplies) -GLOBAL_LIST_EMPTY(req_console_information) -GLOBAL_LIST_EMPTY(allConsoles) -GLOBAL_LIST_EMPTY(req_console_ckey_departments) - - -#define REQ_SCREEN_MAIN 0 -#define REQ_SCREEN_REQ_ASSISTANCE 1 -#define REQ_SCREEN_REQ_SUPPLIES 2 -#define REQ_SCREEN_RELAY 3 -#define REQ_SCREEN_WRITE 4 -#define REQ_SCREEN_CHOOSE 5 -#define REQ_SCREEN_SENT 6 -#define REQ_SCREEN_ERR 7 -#define REQ_SCREEN_VIEW_MSGS 8 -#define REQ_SCREEN_AUTHENTICATE 9 -#define REQ_SCREEN_ANNOUNCE 10 - -#define REQ_EMERGENCY_SECURITY 1 -#define REQ_EMERGENCY_ENGINEERING 2 -#define REQ_EMERGENCY_MEDICAL 3 - -/obj/machinery/requests_console - name = "requests console" - desc = "" - icon = 'icons/obj/terminals.dmi' - icon_state = "req_comp0" - var/department = "Unknown" //The list of all departments on the station (Determined from this variable on each unit) Set this to the same thing if you want several consoles in one department - var/list/messages = list() //List of all messages - var/departmentType = 0 //bitflag - // 0 = none (not listed, can only replied to) - // assistance = 1 - // supplies = 2 - // info = 4 - // assistance + supplies = 3 - // assistance + info = 5 - // supplies + info = 6 - // assistance + supplies + info = 7 - var/newmessagepriority = REQ_NO_NEW_MESSAGE - var/screen = REQ_SCREEN_MAIN - // 0 = main menu, - // 1 = req. assistance, - // 2 = req. supplies - // 3 = relay information - // 4 = write msg - not used - // 5 = choose priority - not used - // 6 = sent successfully - // 7 = sent unsuccessfully - // 8 = view messages - // 9 = authentication before sending - // 10 = send announcement - var/silent = FALSE // set to 1 for it not to beep all the time - var/hackState = FALSE - var/announcementConsole = FALSE // FALSE = This console cannot be used to send department announcements, TRUE = This console can send department announcements - var/open = FALSE // TRUE if open - var/announceAuth = FALSE //Will be set to 1 when you authenticate myself for announcements - var/msgVerified = "" //Will contain the name of the person who verified it - var/msgStamped = "" //If a message is stamped, this will contain the stamp name - var/message = "" - var/to_department = "" //the department which will be receiving the message - var/priority = REQ_NO_NEW_MESSAGE //Priority of the message being sent - var/obj/item/radio/Radio - var/emergency //If an emergency has been called by this device. Acts as both a cooldown and lets the responder know where it the emergency was triggered from - var/receive_ore_updates = FALSE //If ore redemption machines will send an update when it receives new ores. - max_integrity = 300 - armor = list("melee" = 70, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) - -/obj/machinery/requests_console/update_icon_state() - if(stat & NOPOWER) - set_light(0) - else - set_light(1.4,0.7,"#34D352")//green light - if(open) - if(!hackState) - icon_state="req_comp_open" - else - icon_state="req_comp_rewired" - else if(stat & NOPOWER) - if(icon_state != "req_comp_off") - icon_state = "req_comp_off" - else - if(emergency || (newmessagepriority == REQ_EXTREME_MESSAGE_PRIORITY)) - icon_state = "req_comp3" - else if(newmessagepriority == REQ_HIGH_MESSAGE_PRIORITY) - icon_state = "req_comp2" - else if(newmessagepriority == REQ_NORMAL_MESSAGE_PRIORITY) - icon_state = "req_comp1" - else - icon_state = "req_comp0" - -/obj/machinery/requests_console/Initialize() - . = ..() - name = "\improper [department] requests console" - GLOB.allConsoles += src - - if(departmentType) - - if((departmentType & REQ_DEP_TYPE_ASSISTANCE) && !(department in GLOB.req_console_assistance)) - GLOB.req_console_assistance += department - - if((departmentType & REQ_DEP_TYPE_SUPPLIES) && !(department in GLOB.req_console_supplies)) - GLOB.req_console_supplies += department - - if((departmentType & REQ_DEP_TYPE_INFORMATION) && !(department in GLOB.req_console_information)) - GLOB.req_console_information += department - - GLOB.req_console_ckey_departments[ckey(department)] = department - - Radio = new /obj/item/radio(src) - Radio.listening = 0 - -/obj/machinery/requests_console/Destroy() - QDEL_NULL(Radio) - GLOB.allConsoles -= src - return ..() - -/obj/machinery/requests_console/ui_interact(mob/user) - . = ..() - var/dat = "" - if(!open) - switch(screen) - if(REQ_SCREEN_MAIN) - announceAuth = FALSE - if (newmessagepriority == REQ_NORMAL_MESSAGE_PRIORITY) - dat += "
          There are new messages

          " - else if (newmessagepriority == REQ_HIGH_MESSAGE_PRIORITY) - dat += "
          There are new PRIORITY messages

          " - else if (newmessagepriority == REQ_EXTREME_MESSAGE_PRIORITY) - dat += "
          There are new EXTREME PRIORITY messages

          " - dat += "View Messages

          " - - dat += "Request Assistance
          " - dat += "Request Supplies
          " - dat += "Relay Anonymous Information

          " - - if(!emergency) - dat += "Emergency: Security
          " - dat += "Emergency: Engineering
          " - dat += "Emergency: Medical

          " - else - dat += "[emergency] has been dispatched to this location.

          " - - if(announcementConsole) - dat += "Send Station-wide Announcement

          " - if (silent) - dat += "Speaker OFF" - else - dat += "Speaker ON" - if(REQ_SCREEN_REQ_ASSISTANCE) - dat += "Which department do you need assistance from?

          " - dat += departments_table(GLOB.req_console_assistance) - - if(REQ_SCREEN_REQ_SUPPLIES) - dat += "Which department do you need supplies from?

          " - dat += departments_table(GLOB.req_console_supplies) - - if(REQ_SCREEN_RELAY) - dat += "Which department would you like to send information to?

          " - dat += departments_table(GLOB.req_console_information) - - if(REQ_SCREEN_SENT) - dat += "Message sent.

          " - dat += "<< Back
          " - - if(REQ_SCREEN_ERR) - dat += "An error occurred.

          " - dat += "<< Back
          " - - if(REQ_SCREEN_VIEW_MSGS) - for (var/obj/machinery/requests_console/Console in GLOB.allConsoles) - if (Console.department == department) - Console.newmessagepriority = REQ_NO_NEW_MESSAGE - Console.update_icon() - - newmessagepriority = REQ_NO_NEW_MESSAGE - update_icon() - var/messageComposite = "" - for(var/msg in messages) // This puts more recent messages at the *top*, where they belong. - messageComposite = "
          [msg]
          " + messageComposite - dat += messageComposite - dat += "
          << Back to Main Menu
          " - - if(REQ_SCREEN_AUTHENTICATE) - dat += "Message Authentication

          " - dat += "Message for [to_department]: [message]

          " - dat += "
          I may authenticate your message now by scanning your ID or your stamp

          " - dat += "Validated by: [msgVerified ? msgVerified : "Not Validated"]
          " - dat += "Stamped by: [msgStamped ? msgStamped : "Not Stamped"]

          " - dat += "Send Message
          " - dat += "
          << Discard Message
          " - - if(REQ_SCREEN_ANNOUNCE) - dat += "

          Station-wide Announcement

          " - if(announceAuth) - dat += "
          Authentication accepted

          " - else - dat += "
          Swipe your card to authenticate yourself

          " - dat += "Message: [message ? message : "No Message"]
          " - dat += "[message ? "Edit" : "Write"] Message

          " - if ((announceAuth || IsAdminGhost(user)) && message) - dat += "Announce Message
          " - else - dat += "Announce Message
          " - dat += "
          << Back
          " - - if(!dat) - CRASH("No UI for src. Screen var is: [screen]") - var/datum/browser/popup = new(user, "req_console", "[department] Requests Console", 450, 440) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - return - -/obj/machinery/requests_console/proc/departments_table(list/req_consoles) - var/dat = "" - dat += "" - for(var/req_dpt in req_consoles) - if (req_dpt != department) - dat += "" - dat += "" - dat += "" - dat += "" - dat += "
          [req_dpt]Normal High" - if(hackState) - dat += "EXTREME" - dat += "
          " - dat += "
          << Back
          " - return dat - -/obj/machinery/requests_console/Topic(href, href_list) - if(..()) - return - usr.set_machine(src) - add_fingerprint(usr) - - if(reject_bad_text(href_list["write"])) - to_department = ckey(href_list["write"]) //write contains the string of the receiving department's name - - var/new_message = (to_department in GLOB.req_console_ckey_departments) && copytext(reject_bad_text(input(usr, "Write your message:", "Awaiting Input", "")),1,MAX_MESSAGE_LEN) - if(new_message) - to_department = GLOB.req_console_ckey_departments[to_department] - message = new_message - screen = REQ_SCREEN_AUTHENTICATE - priority = CLAMP(text2num(href_list["priority"]), REQ_NORMAL_MESSAGE_PRIORITY, REQ_EXTREME_MESSAGE_PRIORITY) - - if(href_list["writeAnnouncement"]) - var/new_message = copytext(reject_bad_text(input(usr, "Write your message:", "Awaiting Input", "")),1,MAX_MESSAGE_LEN) - if(new_message) - message = new_message - priority = CLAMP(text2num(href_list["priority"]) || REQ_NORMAL_MESSAGE_PRIORITY, REQ_NORMAL_MESSAGE_PRIORITY, REQ_EXTREME_MESSAGE_PRIORITY) - else - message = "" - announceAuth = FALSE - screen = REQ_SCREEN_MAIN - - if(href_list["sendAnnouncement"]) - if(!announcementConsole) - return - if(isliving(usr)) - var/mob/living/L = usr - message = L.treat_message(message) - minor_announce(message, "[department] Announcement:") - GLOB.news_network.SubmitArticle(message, department, "Station Announcements", null) - usr.log_talk(message, LOG_SAY, tag="station announcement from [src]") - message_admins("[ADMIN_LOOKUPFLW(usr)] has made a station announcement from [src] at [AREACOORD(usr)].") - deadchat_broadcast(" made a station announcement from [get_area_name(usr, TRUE)].", "[usr.real_name]", usr) - announceAuth = FALSE - message = "" - screen = REQ_SCREEN_MAIN - - if(href_list["emergency"]) - if(!emergency) - var/radio_freq - switch(text2num(href_list["emergency"])) - if(REQ_EMERGENCY_SECURITY) //Security - radio_freq = FREQ_SECURITY - emergency = "Security" - if(REQ_EMERGENCY_ENGINEERING) //Engineering - radio_freq = FREQ_ENGINEERING - emergency = "Engineering" - if(REQ_EMERGENCY_MEDICAL) //Medical - radio_freq = FREQ_MEDICAL - emergency = "Medical" - if(radio_freq) - Radio.set_frequency(radio_freq) - Radio.talk_into(src,"[emergency] emergency in [department]!!",radio_freq) - update_icon() - addtimer(CALLBACK(src, PROC_REF(clear_emergency)), 5 MINUTES) - - if(href_list["send"] && message && to_department && priority) - - var/radio_freq - switch(ckey(to_department)) - if("bridge") - radio_freq = FREQ_COMMAND - if("medbay") - radio_freq = FREQ_MEDICAL - if("science") - radio_freq = FREQ_SCIENCE - if("engineering") - radio_freq = FREQ_ENGINEERING - if("security") - radio_freq = FREQ_SECURITY - if("cargobay", "mining") - radio_freq = FREQ_SUPPLY - - var/datum/signal/subspace/messaging/rc/signal = new(src, list( - "sender" = department, - "rec_dpt" = to_department, - "send_dpt" = department, - "message" = message, - "verified" = msgVerified, - "stamped" = msgStamped, - "priority" = priority, - "notify_freq" = radio_freq - )) - signal.send_to_receivers() - - screen = signal.data["done"] ? REQ_SCREEN_SENT : REQ_SCREEN_ERR - - //Handle screen switching - if(href_list["setScreen"]) - var/set_screen = CLAMP(text2num(href_list["setScreen"]) || 0, REQ_SCREEN_MAIN, REQ_SCREEN_ANNOUNCE) - switch(set_screen) - if(REQ_SCREEN_MAIN) - to_department = "" - msgVerified = "" - msgStamped = "" - message = "" - priority = -1 - if(REQ_SCREEN_ANNOUNCE) - if(!announcementConsole) - return - screen = set_screen - - //Handle silencing the console - if(href_list["setSilent"]) - silent = text2num(href_list["setSilent"]) ? TRUE : FALSE - - updateUsrDialog() - -/obj/machinery/requests_console/say_mod(input, message_mode) - var/ending = copytext(input, length(input) - 2) - if (ending == "!!!") - . = "blares" - else - . = ..() - -/obj/machinery/requests_console/proc/clear_emergency() - emergency = null - update_icon() - -//from message_server.dm: Console.createmessage(data["sender"], data["send_dpt"], data["message"], data["verified"], data["stamped"], data["priority"], data["notify_freq"]) -/obj/machinery/requests_console/proc/createmessage(source, source_department, message, msgVerified, msgStamped, priority, radio_freq) - var/linkedsender - - var/sending = "[message]
          " - if(msgVerified) - sending = "[sending][msgVerified]
          " - if(msgStamped) - sending = "[sending][msgStamped]
          " - - linkedsender = source_department ? "[source_department]" : (source || "unknown") - - var/authentic = (msgVerified || msgStamped) && " (Authenticated)" - var/alert = "Message from [source][authentic]" - var/silenced = silent - var/header = "From: [linkedsender] Received: [station_time_timestamp()]
          " - - switch(priority) - if(REQ_NORMAL_MESSAGE_PRIORITY) - if(newmessagepriority < REQ_NORMAL_MESSAGE_PRIORITY) - newmessagepriority = REQ_NORMAL_MESSAGE_PRIORITY - update_icon() - - if(REQ_HIGH_MESSAGE_PRIORITY) - header = "High Priority
          [header]" - alert = "PRIORITY Alert from [source][authentic]" - if(newmessagepriority < REQ_HIGH_MESSAGE_PRIORITY) - newmessagepriority = REQ_HIGH_MESSAGE_PRIORITY - update_icon() - - if(REQ_EXTREME_MESSAGE_PRIORITY) - header = "!!!Extreme Priority!!!
          [header]" - alert = "EXTREME PRIORITY Alert from [source][authentic]" - silenced = FALSE - if(newmessagepriority < REQ_EXTREME_MESSAGE_PRIORITY) - newmessagepriority = REQ_EXTREME_MESSAGE_PRIORITY - update_icon() - - messages += "[header][sending]" - - if(!silenced) - playsound(src, 'sound/blank.ogg', 50, TRUE) - say(alert) - - if(radio_freq) - Radio.set_frequency(radio_freq) - Radio.talk_into(src, "[alert]: [message]", radio_freq) - -/obj/machinery/requests_console/attackby(obj/item/O, mob/user, params) - if(O.tool_behaviour == TOOL_CROWBAR) - if(open) - to_chat(user, "I close the maintenance panel.") - open = FALSE - else - to_chat(user, "I open the maintenance panel.") - open = TRUE - update_icon() - return - if(O.tool_behaviour == TOOL_SCREWDRIVER) - if(open) - hackState = !hackState - if(hackState) - to_chat(user, "I modify the wiring.") - else - to_chat(user, "I reset the wiring.") - update_icon() - else - to_chat(user, "I must open the maintenance panel first!") - return - - var/obj/item/card/id/ID = O.GetID() - if(ID) - if(screen == REQ_SCREEN_AUTHENTICATE) - msgVerified = "Verified by [ID.registered_name] ([ID.assignment])" - updateUsrDialog() - if(screen == REQ_SCREEN_ANNOUNCE) - if (ACCESS_RC_ANNOUNCE in ID.access) - announceAuth = TRUE - else - announceAuth = FALSE - to_chat(user, "I are not authorized to send announcements!") - updateUsrDialog() - return - if (istype(O, /obj/item/stamp)) - if(screen == REQ_SCREEN_AUTHENTICATE) - var/obj/item/stamp/T = O - msgStamped = "Stamped with the [T.name]" - updateUsrDialog() - return - return ..() - -#undef REQ_EMERGENCY_SECURITY -#undef REQ_EMERGENCY_ENGINEERING -#undef REQ_EMERGENCY_MEDICAL - -#undef REQ_SCREEN_MAIN -#undef REQ_SCREEN_REQ_ASSISTANCE -#undef REQ_SCREEN_REQ_SUPPLIES -#undef REQ_SCREEN_RELAY -#undef REQ_SCREEN_WRITE -#undef REQ_SCREEN_CHOOSE -#undef REQ_SCREEN_SENT -#undef REQ_SCREEN_ERR -#undef REQ_SCREEN_VIEW_MSGS -#undef REQ_SCREEN_AUTHENTICATE -#undef REQ_SCREEN_ANNOUNCE diff --git a/code/game/machinery/roulette_machine.dm b/code/game/machinery/roulette_machine.dm deleted file mode 100644 index d3f07ce878..0000000000 --- a/code/game/machinery/roulette_machine.dm +++ /dev/null @@ -1,389 +0,0 @@ -#define ROULETTE_SINGLES_PAYOUT 35 -#define ROULETTE_SIMPLE_PAYOUT 2 - -#define ROULETTE_BET_ODD "odd" -#define ROULETTE_BET_EVEN "even" -#define ROULETTE_BET_1TO18 "s1-18" //adds s to prevent text2num from working -#define ROULETTE_BET_19TO36 "s19-36" //adds s to prevent text2num from working -#define ROULETTE_BET_BLACK "black" -#define ROULETTE_BET_RED "red" - -#define ROULETTE_JACKPOT_AMOUNT 1000 - -///Machine that lets you play roulette. Odds are pre-defined to be the same as European Roulette without the "En Prison" rule -/obj/machinery/roulette - name = "Roulette Table" - desc = "" - icon = 'icons/obj/machines/roulette.dmi' - icon_state = "idle" - density = TRUE - use_power = IDLE_POWER_USE - anchored = FALSE - idle_power_usage = 10 - active_power_usage = 100 - max_integrity = 500 - armor = list("melee" = 45, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 10, "bio" = 30, "rad" = 30, "fire" = 30, "acid" = 30) - var/static/list/numbers = list("0" = "green", "1" = "red", "3" = "red", "5" = "red", "7" = "red", "9" = "red", "12" = "red", "14" = "red", "16" = "red",\ - "18" = "red", "19" = "red", "21" = "red", "23" = "red", "25" = "red", "27" = "red", "30" = "red", "32" = "red", "34" = "red", "36" = "red",\ - "2" = "black", "4" = "black", "6" = "black", "8" = "black", "10" = "black", "11" = "black", "13" = "black", "15" = "black", "17" = "black", "20" = "black",\ - "22" = "black", "24" = "black", "26" = "black", "28" = "black", "29" = "black", "31" = "black", "33" = "black", "35" = "black") - - var/chosen_bet_amount = 10 - var/chosen_bet_type = 0 - var/last_anti_spam = 0 - var/anti_spam_cooldown = 20 - var/obj/item/card/id/my_card - var/playing = FALSE - var/locked = FALSE - var/drop_dir = SOUTH - var/static/list/coin_values = list(/obj/item/coin/diamond = 100, /obj/item/coin/gold = 25, /obj/item/coin/silver = 10, /obj/item/coin/iron = 1) //Make sure this is ordered from left to right. - var/list/coins_to_dispense = list() - var/datum/looping_sound/jackpot/jackpot_loop - var/datum/asset/spritesheet/simple/assets - var/on = TRUE - -/obj/machinery/roulette/Initialize() - . = ..() - jackpot_loop = new(list(src), FALSE) - wires = new /datum/wires/roulette(src) - -/obj/machinery/roulette/obj_break(damage_flag) - prize_theft(0.05) - . = ..() - -/obj/machinery/roulette/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - if(stat & MAINT) - return - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) -// var/datum/asset/spritesheet/simple/assets = get_asset_datum(/datum/asset/spritesheet/simple/roulette) -// assets.send(user) - ui = new(user, src, ui_key, "roulette", name, 455, 520, master_ui, state) - ui.open() - -/obj/machinery/roulette/ui_data(mob/user) - var/list/data = list() - data["IsAnchored"] = anchored - data["BetAmount"] = chosen_bet_amount - data["BetType"] = chosen_bet_type - data["HouseBalance"] = my_card?.registered_account.account_balance - if(ishuman(user)) - var/mob/living/carbon/human/H = user - var/obj/item/card/id/C = H.get_idcard(TRUE) - if(C) - data["AccountBalance"] = C.registered_account.account_balance - else - data["AccountBalance"] = 0 - data["CanUnbolt"] = (H.get_idcard() == my_card) - -// if(!assets) -// assets = get_asset_datum(/datum/asset/spritesheet/simple/roulette) - return data - -/obj/machinery/roulette/ui_act(action, params) - if(..()) - return - switch(action) - if("anchor") - anchored = !anchored - . = TRUE - if("ChangeBetAmount") - chosen_bet_amount = CLAMP(text2num(params["amount"]), 10, 500) - . = TRUE - if("ChangeBetAmountCustom") - var/amount = input(usr, "Bet amount between 10 and 500:") as num|null - if(amount) - chosen_bet_amount = CLAMP(amount, 10, 500) - if("ChangeBetType") - chosen_bet_type = params["type"] - . = TRUE - update_icon() // Not applicable to all objects. - -/obj/machinery/roulette/ui_base_html(html) -// var/datum/asset/spritesheet/simple/assets = get_asset_datum(/datum/asset/spritesheet/simple/roulette) - . = replacetext(html, "", assets.css_tag()) - -///Handles setting ownership and the betting itself. -/obj/machinery/roulette/attackby(obj/item/W, mob/user, params) - if(stat & MAINT && is_wire_tool(W)) - wires.interact(user) - return - if(playing) - return ..() - if(istype(W, /obj/item/card/id)) - playsound(src, 'sound/blank.ogg', 50, TRUE) - - if(stat & MAINT || !on || locked) - to_chat(user, "The machine appears to be disabled.") - return FALSE - - if(my_card) - var/obj/item/card/id/player_card = W - if(player_card.registered_account.account_balance < chosen_bet_amount) //Does the player have enough funds - audible_message("I do not have the funds to play! Lower your bet or get more money.") - playsound(src, 'sound/blank.ogg', 30, TRUE) - return FALSE - if(!chosen_bet_amount || isnull(chosen_bet_type)) - return FALSE - - var/potential_payout = text2num(chosen_bet_type) ? chosen_bet_amount * ROULETTE_SINGLES_PAYOUT : chosen_bet_amount * ROULETTE_SIMPLE_PAYOUT - - if(!check_bartender_funds(potential_payout)) - return FALSE //bartender is too poor - - if(last_anti_spam > world.time) //do not cheat me - return FALSE - - last_anti_spam = world.time + anti_spam_cooldown - - icon_state = "rolling" //Prepare the new icon state for rolling before hand. - flick("flick_up", src) - playsound(src, 'sound/blank.ogg', 70) - playsound(src, 'sound/blank.ogg', 50) - - addtimer(CALLBACK(src, PROC_REF(play), user, player_card, chosen_bet_type, chosen_bet_amount, potential_payout), 4) //Animation first - return TRUE - else - var/obj/item/card/id/new_card = W - if(new_card.registered_account) - var/msg = stripped_input(user, "Name of your roulette wheel:", "Roulette Naming", "Roulette Machine") - if(!msg) - return - name = msg - desc = "" - my_card = new_card - to_chat(user, "I link the wheel to your account.") - power_change() - return - return ..() - -///Proc called when player is going to try and play -/obj/machinery/roulette/proc/play(mob/user, obj/item/card/id/player_id, bet_type, bet_amount, potential_payout) - - var/payout = potential_payout - - my_card.registered_account.transfer_money(player_id.registered_account, bet_amount) - - playing = TRUE - update_icon() - set_light(0) - - var/rolled_number = rand(0, 36) - - playsound(src, 'sound/blank.ogg', 50) - addtimer(CALLBACK(src, PROC_REF(finish_play), player_id, bet_type, bet_amount, payout, rolled_number), 34) //4 deciseconds more so the animation can play - addtimer(CALLBACK(src, PROC_REF(finish_play_animation)), 30) - -/obj/machinery/roulette/proc/finish_play_animation() - icon_state = "idle" - flick("flick_down", src) - playsound(src, 'sound/blank.ogg', 70) - -///Ran after a while to check if the player won or not. -/obj/machinery/roulette/proc/finish_play(obj/item/card/id/player_id, bet_type, bet_amount, potential_payout, rolled_number) - - var/is_winner = check_win(bet_type, bet_amount, rolled_number) //Predetermine if we won - var/color = numbers["[rolled_number]"] //Weird syntax, but dict uses strings. - var/result = "[rolled_number] [color]" //e.g. 31 black - - audible_message("The result is: [result]") - - playing = FALSE - update_icon(potential_payout, color, rolled_number, is_winner) - handle_color_light(color) - - if(!is_winner) - audible_message("I lost! Better luck next time") - playsound(src, 'sound/blank.ogg', 50) - return FALSE - - audible_message("I have won [potential_payout] credits! Congratulations!") - playsound(src, 'sound/blank.ogg', 50) - - dispense_prize(potential_payout) - -///Fills a list of coins that should be dropped. -/obj/machinery/roulette/proc/dispense_prize(payout) - - if(payout >= ROULETTE_JACKPOT_AMOUNT) - jackpot_loop.start() - - var/remaining_payout = payout - - my_card.registered_account.adjust_money(-payout) - - for(var/coin_type in coin_values) //Loop through all coins from most valuable to least valuable. Try to give as much of that coin (the iterable) as possible until you can't anymore, then move to the next. - var/value = coin_values[coin_type] //Change this to use initial value once we change to mat datum coins. - var/coin_count = round(remaining_payout / value) - - if(!coin_count) //Cant make coins of this type, as we can't reach it's value. - continue - - remaining_payout -= value * coin_count - coins_to_dispense[coin_type] += coin_count - - drop_coin() //Start recursively dropping coins - -///Recursive function that runs until it runs out of coins to drop. -/obj/machinery/roulette/proc/drop_coin() - var/coin_to_drop - - for(var/i in coins_to_dispense) //Find which coin to drop - if(coins_to_dispense[i] <= 0) //Less than 1? go to next potential coin. - continue - coin_to_drop = i - break - - if(!coin_to_drop) //No more coins, stop recursion. - jackpot_loop.stop() - return FALSE - - coins_to_dispense[coin_to_drop] -= 1 - - var/turf/drop_loc = get_step(loc, drop_dir) - var/obj/item/cash = new coin_to_drop(drop_loc) - playsound(cash, pick(list('sound/blank.ogg')), 40, TRUE) - - addtimer(CALLBACK(src, PROC_REF(drop_coin)), 3) //Recursion time - - -///Fills a list of coins that should be dropped. -/obj/machinery/roulette/proc/prize_theft(percentage) - if(locked) - return - locked = TRUE - var/stolen_cash = my_card.registered_account.account_balance * percentage - dispense_prize(stolen_cash) - - -///Returns TRUE if the player bet correctly. -/obj/machinery/roulette/proc/check_win(bet_type, bet_amount, rolled_number) - var/actual_bet_number = text2num(bet_type) //Only returns the numeric bet types, AKA singles. - if(actual_bet_number) //This means we're playing singles - return rolled_number == actual_bet_number - - switch(bet_type) //Otherwise, we are playing a "special" game, switch on all the cases so we can check. - if(ROULETTE_BET_ODD) - return ISODD(rolled_number) - if(ROULETTE_BET_EVEN) - return ISEVEN(rolled_number) - if(ROULETTE_BET_1TO18) - return (rolled_number >= 1 && rolled_number <= 18) //between 1 to 18 - if(ROULETTE_BET_19TO36) - return rolled_number > 18 //between 19 to 36, no need to check bounds because we wont go higher anyways - if(ROULETTE_BET_BLACK) - return "black" == numbers["[rolled_number]"]//Check if our number is black in the numbers dict - if(ROULETTE_BET_RED) - return "red" == numbers["[rolled_number]"] //Check if our number is black in the numbers dict - if("0") - return "0" == "rolled_number" //Check if our number is 0 - - -///Returns TRUE if the owner has enough funds to payout -/obj/machinery/roulette/proc/check_bartender_funds(payout) - if(my_card.registered_account.account_balance >= payout) - return TRUE //We got the betting amount - audible_message("The bank account of [my_card.registered_account.account_holder] does not have enough funds to pay out the potential prize, contact them to fill up their account or lower your bet!") - playsound(src, 'sound/blank.ogg', 30, TRUE) - return FALSE - -/obj/machinery/roulette/update_icon(payout, color, rolled_number, is_winner = FALSE) - cut_overlays() - - if(stat & MAINT) - return - - if(playing) - add_overlay("random_numbers") - - if(!payout || !color || isnull(rolled_number)) //Don't fall for tricks. - return - - //Overlay for ring - if(is_winner && payout >= ROULETTE_JACKPOT_AMOUNT) - add_overlay("jackpot") - else - add_overlay(color) - - var/numberright = rolled_number % 10 //Right hand number - var/numberleft = (rolled_number - numberright) / 10 //Left hand number - - var/shift_amount = 2 //How much the icon moves left/right - - if(numberleft != 0) //Don't make the number if we are 0. - var/mutable_appearance/number1 = mutable_appearance(icon, "[numberleft]") - number1.pixel_x = -shift_amount - add_overlay(number1) - else - shift_amount = 0 //We can stay centered. - - var/mutable_appearance/number2 = mutable_appearance(icon, "[numberright]") - number2.pixel_x = shift_amount - add_overlay(number2) - -/obj/machinery/roulette/proc/handle_color_light(color) - switch(color) - if("green") - set_light(2,2, LIGHT_COLOR_GREEN) - if("red") - set_light(2,2, LIGHT_COLOR_RED) - -/obj/machinery/roulette/welder_act(mob/living/user, obj/item/I) - . = ..() - if(stat & MAINT) - to_chat(user, "I start re-attaching the top section of [src]...") - if(I.use_tool(src, user, 30, volume=50)) - to_chat(user, "I re-attach the top section of [src].") - stat &= ~MAINT - icon_state = "idle" - else - to_chat(user, "I start welding the top section from [src]...") - if(I.use_tool(src, user, 30, volume=50)) - to_chat(user, "I removed the top section of [src].") - stat |= MAINT - icon_state = "open" - -/obj/machinery/roulette/proc/shock(mob/user, prb) - if(!on) // unpowered, no shock - return FALSE - if(!prob(prb)) - return FALSE //you lucked out, no shock for you - do_sparks(5, TRUE, src) - if(electrocute_mob(user, get_area(src), src, 1, TRUE)) - return TRUE - else - return FALSE - -/obj/item/roulette_wheel_beacon - name = "roulette wheel beacon" - desc = "" - icon = 'icons/obj/objects.dmi' - icon_state = "floor_beacon" - var/used - -/obj/item/roulette_wheel_beacon/attack_self() - if(used) - return - loc.visible_message("\The [src] begins to beep loudly!") - used = TRUE - addtimer(CALLBACK(src, PROC_REF(launch_payload)), 40) - -/obj/item/roulette_wheel_beacon/proc/launch_payload() - var/obj/structure/closet/supplypod/centcompod/toLaunch = new() - - new /obj/machinery/roulette(toLaunch) - - new /obj/effect/DPtarget(drop_location(), toLaunch) - qdel(src) - -#undef ROULETTE_SINGLES_PAYOUT -#undef ROULETTE_SIMPLE_PAYOUT - -#undef ROULETTE_BET_ODD -#undef ROULETTE_BET_EVEN -#undef ROULETTE_BET_1TO18 -#undef ROULETTE_BET_19TO36 -#undef ROULETTE_BET_BLACK -#undef ROULETTE_BET_RED - -#undef ROULETTE_JACKPOT_AMOUNT diff --git a/code/game/machinery/scan_gate.dm b/code/game/machinery/scan_gate.dm deleted file mode 100644 index a55ac2f5a2..0000000000 --- a/code/game/machinery/scan_gate.dm +++ /dev/null @@ -1,254 +0,0 @@ -#define SCANGATE_NONE "Off" -#define SCANGATE_MINDSHIELD "Mindshield" -#define SCANGATE_NANITES "Nanites" -#define SCANGATE_DISEASE "Disease" -#define SCANGATE_GUNS "Guns" -#define SCANGATE_WANTED "Wanted" -#define SCANGATE_SPECIES "Species" -#define SCANGATE_NUTRITION "Nutrition" - -/obj/machinery/scanner_gate - name = "scanner gate" - desc = "" - icon = 'icons/obj/machines/scangate.dmi' - icon_state = "scangate" - use_power = IDLE_POWER_USE - idle_power_usage = 50 - circuit = /obj/item/circuitboard/machine/scanner_gate - ui_x = 600 - ui_y = 400 - - var/scanline_timer - var/next_beep = 0 //avoids spam - var/locked = FALSE - var/scangate_mode = SCANGATE_NONE - var/disease_threshold = DISEASE_SEVERITY_MINOR - var/nanite_cloud = 0 - var/datum/species/detect_species = /datum/species/human - var/reverse = FALSE //If true, signals if the scan returns false - var/detect_nutrition = NUTRITION_LEVEL_FAT - -/obj/machinery/scanner_gate/Initialize() - . = ..() - set_scanline("passive") - -/obj/machinery/scanner_gate/examine(mob/user) - . = ..() - if(locked) - . += "The control panel is ID-locked. Swipe a valid ID to unlock it." - else - . += "The control panel is unlocked. Swipe an ID to lock it." - -/obj/machinery/scanner_gate/Crossed(atom/movable/AM) - ..() - if(!(stat & (BROKEN|NOPOWER)) && isliving(AM)) - perform_scan(AM) - -/obj/machinery/scanner_gate/proc/set_scanline(type, duration) - cut_overlays() - deltimer(scanline_timer) - add_overlay(type) - if(duration) - scanline_timer = addtimer(CALLBACK(src, PROC_REF(set_scanline), "passive"), duration, TIMER_STOPPABLE) - -/obj/machinery/scanner_gate/attackby(obj/item/W, mob/user, params) - var/obj/item/card/id/card = W.GetID() - if(card) - if(locked) - if(allowed(user)) - locked = FALSE - req_access = list() - to_chat(user, "I unlock [src].") - else if(!(obj_flags & EMAGGED)) - to_chat(user, "I lock [src] with [W].") - var/list/access = W.GetAccess() - req_access = access - locked = TRUE - else - to_chat(user, "I try to lock [src] with [W], but nothing happens.") - else - return ..() - -/obj/machinery/scanner_gate/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - locked = FALSE - req_access = list() - obj_flags |= EMAGGED - to_chat(user, "I fry the ID checking system.") - -/obj/machinery/scanner_gate/proc/perform_scan(mob/living/M) - var/beep = FALSE - switch(scangate_mode) - if(SCANGATE_NONE) - return - if(SCANGATE_WANTED) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/perpname = H.get_face_name(H.get_id_name()) - var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.security) - if(!R || (R.fields["criminal"] == "*Arrest*")) - beep = TRUE - if(SCANGATE_MINDSHIELD) - if(HAS_TRAIT(M, TRAIT_MINDSHIELD)) - beep = TRUE - if(SCANGATE_NANITES) - if(SEND_SIGNAL(M, COMSIG_HAS_NANITES)) - if(nanite_cloud) - var/datum/component/nanites/nanites = M.GetComponent(/datum/component/nanites) - if(nanites && nanites.cloud_id == nanite_cloud) - beep = TRUE - else - beep = TRUE - if(SCANGATE_DISEASE) - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(get_disease_severity_value(C.check_virus()) >= get_disease_severity_value(disease_threshold)) - beep = TRUE - if(SCANGATE_SPECIES) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(is_species(H, detect_species)) - beep = TRUE - if(detect_species == /datum/species/zombie) //Can detect dormant zombies - if(H.getorganslot(ORGAN_SLOT_ZOMBIE)) - beep = TRUE - if(SCANGATE_GUNS) - for(var/I in M.get_contents()) - if(istype(I, /obj/item/gun)) - beep = TRUE - break - if(SCANGATE_NUTRITION) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.nutrition <= detect_nutrition && detect_nutrition == NUTRITION_LEVEL_STARVING) - beep = TRUE - if(H.nutrition >= detect_nutrition && detect_nutrition == NUTRITION_LEVEL_FAT) - beep = TRUE - - if(reverse) - beep = !beep - if(beep) - alarm_beep() - else - set_scanline("scanning", 10) - -/obj/machinery/scanner_gate/proc/alarm_beep() - if(next_beep <= world.time) - next_beep = world.time + 20 - playsound(src, 'sound/blank.ogg', 100, FALSE) - var/image/I = image(icon, src, "alarm_light", layer+1) - flick_overlay_view(I, src, 20) - set_scanline("alarm", 20) - -/obj/machinery/scanner_gate/can_interact(mob/user) - if(locked) - return FALSE - return ..() - -/obj/machinery/scanner_gate/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "scanner_gate", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/scanner_gate/ui_data() - var/list/data = list() - data["scan_mode"] = scangate_mode - data["reverse"] = reverse - data["nanite_cloud"] = nanite_cloud - data["disease_threshold"] = disease_threshold - data["target_species"] = initial(detect_species.name) - data["target_nutrition"] = detect_nutrition - return data - -/obj/machinery/scanner_gate/ui_act(action, params) - if(..()) - return - switch(action) - if("set_mode") - var/new_mode = input("Choose the scan mode","Scan Mode") as null|anything in sortList(list(SCANGATE_NONE, - SCANGATE_MINDSHIELD, - SCANGATE_NANITES, - SCANGATE_DISEASE, - SCANGATE_GUNS, - SCANGATE_WANTED, - SCANGATE_SPECIES, - SCANGATE_NUTRITION)) - if(new_mode) - scangate_mode = new_mode - . = TRUE - if("toggle_reverse") - reverse = !reverse - . = TRUE - if("set_disease_threshold") - var/new_threshold = input("Set disease threshold","Scan Mode") as null|anything in sortList(list(DISEASE_SEVERITY_POSITIVE, - DISEASE_SEVERITY_NONTHREAT, - DISEASE_SEVERITY_MINOR, - DISEASE_SEVERITY_MEDIUM, - DISEASE_SEVERITY_HARMFUL, - DISEASE_SEVERITY_DANGEROUS, - DISEASE_SEVERITY_BIOHAZARD)) - if(new_threshold) - disease_threshold = new_threshold - . = TRUE - if("set_nanite_cloud") - var/new_cloud = input("Set target nanite cloud","Scan Mode", nanite_cloud) as null|num - if(!isnull(new_cloud)) - nanite_cloud = CLAMP(round(new_cloud, 1), 1, 100) - . = TRUE - //Some species are not scannable, like abductors (too unknown), androids (too artificial) or skeletons (too magic) - if("set_target_species") - var/new_species = input("Set target species","Scan Mode") as null|anything in sortList(list("Human", - "Lizardperson", - "Flyperson", - "Felinid", - "Plasmaman", - "Mothmen", - "Jellyperson", - "Podperson", - "Golem", - "Zombie", - )) - if(new_species) - switch(new_species) - if("Human") - detect_species = /datum/species/human - if("Lizardperson") - detect_species = /datum/species/lizard - if("Flyperson") - detect_species = /datum/species/fly - if("Felinid") - detect_species = /datum/species/human/felinid - if("Plasmaman") - detect_species = /datum/species/plasmaman - if("Mothmen") - detect_species = /datum/species/moth - if("Jellyperson") - detect_species = /datum/species/jelly - if("Podperson") - detect_species = /datum/species/pod - if("Golem") - detect_species = /datum/species/golem - if("Zombie") - detect_species = /datum/species/zombie - . = TRUE - if("set_target_nutrition") - var/new_nutrition = input("Set target nutrition level","Scan Mode") as null|anything in sortList(list("Starving", - "Obese")) - if(new_nutrition) - switch(new_nutrition) - if("Starving") - detect_nutrition = NUTRITION_LEVEL_STARVING - if("Obese") - detect_nutrition = NUTRITION_LEVEL_FAT - . = TRUE - -#undef SCANGATE_NONE -#undef SCANGATE_MINDSHIELD -#undef SCANGATE_NANITES -#undef SCANGATE_DISEASE -#undef SCANGATE_GUNS -#undef SCANGATE_WANTED -#undef SCANGATE_SPECIES -#undef SCANGATE_NUTRITION diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm deleted file mode 100644 index 39ee0225a1..0000000000 --- a/code/game/machinery/shieldgen.dm +++ /dev/null @@ -1,461 +0,0 @@ -/obj/structure/emergency_shield - name = "emergency energy shield" - desc = "" - icon = 'icons/effects/effects.dmi' - icon_state = "shield-old" - density = TRUE - move_resist = INFINITY - opacity = 0 - anchored = TRUE - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - max_integrity = 200 //The shield can only take so much beating (prevents perma-prisons) - CanAtmosPass = ATMOS_PASS_DENSITY - -/obj/structure/emergency_shield/Initialize() - . = ..() - setDir(pick(GLOB.cardinals)) - air_update_turf(1) - -/obj/structure/emergency_shield/Move() - var/turf/T = loc - . = ..() - move_update_air(T) - -/obj/structure/emergency_shield/emp_act(severity) - . = ..() - if (. & EMP_PROTECT_SELF) - return - switch(severity) - if(1) - qdel(src) - if(2) - take_damage(50, BRUTE, "energy", 0) - -/obj/structure/emergency_shield/play_attack_sound(damage, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BURN) - playsound(loc, 'sound/blank.ogg', 75, TRUE) - if(BRUTE) - playsound(loc, 'sound/blank.ogg', 75, TRUE) - -/obj/structure/emergency_shield/take_damage(damage, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) - . = ..() - if(.) //damage was dealt - new /obj/effect/temp_visual/impact_effect/ion(loc) - -/obj/structure/emergency_shield/sanguine - name = "sanguine barrier" - desc = "" - icon_state = "shield-red" - max_integrity = 60 - -/obj/structure/emergency_shield/sanguine/emp_act(severity) - return - -/obj/structure/emergency_shield/invoker - name = "Invoker's Shield" - desc = "" - color = "#FF0000" - max_integrity = 20 - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - layer = ABOVE_MOB_LAYER - -/obj/structure/emergency_shield/invoker/emp_act(severity) - return - - -/obj/machinery/shieldgen - name = "anti-breach shielding projector" - desc = "" - icon = 'icons/obj/objects.dmi' - icon_state = "shieldoff" - density = TRUE - opacity = 0 - anchored = FALSE - pressure_resistance = 2*ONE_ATMOSPHERE - req_access = list(ACCESS_ENGINE) - max_integrity = 100 - var/active = FALSE - var/list/deployed_shields - var/locked = FALSE - var/shield_range = 4 - -/obj/machinery/shieldgen/Initialize(mapload) - . = ..() - deployed_shields = list() - if(mapload && active && anchored) - shields_up() - -/obj/machinery/shieldgen/Destroy() - QDEL_LIST(deployed_shields) - return ..() - - -/obj/machinery/shieldgen/proc/shields_up() - active = TRUE - update_icon() - move_resist = INFINITY - - for(var/turf/target_tile in range(shield_range, src)) - if(isspaceturf(target_tile) && !(locate(/obj/structure/emergency_shield) in target_tile)) - if(!(stat & BROKEN) || prob(33)) - deployed_shields += new /obj/structure/emergency_shield(target_tile) - -/obj/machinery/shieldgen/proc/shields_down() - active = FALSE - move_resist = initial(move_resist) - update_icon() - QDEL_LIST(deployed_shields) - -/obj/machinery/shieldgen/process() - if((stat & BROKEN) && active) - if(deployed_shields.len && prob(5)) - qdel(pick(deployed_shields)) - - -/obj/machinery/shieldgen/deconstruct(disassembled = TRUE) - obj_break() - locked = pick(0,1) - -/obj/machinery/shieldgen/interact(mob/user) - . = ..() - if(.) - return - if(locked && !issilicon(user)) - to_chat(user, "The machine is locked, you are unable to use it!") - return - if(panel_open) - to_chat(user, "The panel must be closed before operating this machine!") - return - - if (active) - user.visible_message("[user] deactivated \the [src].", \ - "I deactivate \the [src].", \ - "I hear heavy droning fade out.") - shields_down() - else - if(anchored) - user.visible_message("[user] activated \the [src].", \ - "I activate \the [src].", \ - "I hear heavy droning.") - shields_up() - else - to_chat(user, "The device must first be secured to the floor!") - return - -/obj/machinery/shieldgen/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_SCREWDRIVER) - W.play_tool_sound(src, 100) - panel_open = !panel_open - if(panel_open) - to_chat(user, "I open the panel and expose the wiring.") - else - to_chat(user, "I close the panel.") - else if(istype(W, /obj/item/stack/cable_coil) && (stat & BROKEN) && panel_open) - var/obj/item/stack/cable_coil/coil = W - if (coil.get_amount() < 1) - to_chat(user, "I need one length of cable to repair [src]!") - return - to_chat(user, "I begin to replace the wires...") - if(do_after(user, 30, target = src)) - if(coil.get_amount() < 1) - return - coil.use(1) - obj_integrity = max_integrity - stat &= ~BROKEN - to_chat(user, "I repair \the [src].") - update_icon() - - else if(W.tool_behaviour == TOOL_WRENCH) - if(locked) - to_chat(user, "The bolts are covered! Unlocking this would retract the covers.") - return - if(!anchored && !isinspace()) - W.play_tool_sound(src, 100) - to_chat(user, "I secure \the [src] to the floor!") - setAnchored(TRUE) - else if(anchored) - W.play_tool_sound(src, 100) - to_chat(user, "I unsecure \the [src] from the floor!") - if(active) - to_chat(user, "\The [src] shuts off!") - shields_down() - setAnchored(FALSE) - - else if(W.GetID()) - if(allowed(user) && !(obj_flags & EMAGGED)) - locked = !locked - to_chat(user, "I [locked ? "lock" : "unlock"] the controls.") - else if(obj_flags & EMAGGED) - to_chat(user, "Error, access controller damaged!") - else - to_chat(user, "Access denied.") - - else - return ..() - -/obj/machinery/shieldgen/emag_act(mob/user) - if(obj_flags & EMAGGED) - to_chat(user, "The access controller is damaged!") - return - obj_flags |= EMAGGED - locked = FALSE - playsound(src, "sparks", 100, TRUE) - to_chat(user, "I short out the access controller.") - -/obj/machinery/shieldgen/update_icon_state() - if(active) - icon_state = (stat & BROKEN) ? "shieldonbr":"shieldon" - else - icon_state = (stat & BROKEN) ? "shieldoffbr":"shieldoff" - -#define ACTIVE_SETUPFIELDS 1 -#define ACTIVE_HASFIELDS 2 -/obj/machinery/power/shieldwallgen - name = "shield wall generator" - desc = "" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "shield_wall_gen" - anchored = FALSE - density = TRUE - req_access = list(ACCESS_TELEPORTER) - flags_1 = CONDUCT_1 - use_power = NO_POWER_USE - idle_power_usage = 10 - active_power_usage = 50 - max_integrity = 300 - var/active = FALSE - var/power = 0 - var/maximum_stored_power = 500 - var/locked = TRUE - var/shield_range = 8 - var/obj/structure/cable/attached // the attached cable - -/obj/machinery/power/shieldwallgen/xenobiologyaccess //use in xenobiology containment - name = "xenobiology shield wall generator" - desc = "" - req_access = list(ACCESS_XENOBIOLOGY) - -/obj/machinery/power/shieldwallgen/Initialize() - . = ..() - if(anchored) - connect_to_network() - -/obj/machinery/power/shieldwallgen/Destroy() - for(var/d in GLOB.cardinals) - cleanup_field(d) - return ..() - -/obj/machinery/power/shieldwallgen/should_have_node() - return anchored - -/obj/machinery/power/shieldwallgen/connect_to_network() - if(!anchored) - return FALSE - . = ..() - -/obj/machinery/power/shieldwallgen/process() - if(active) - icon_state = "shield_wall_gen_on" - if(active == ACTIVE_SETUPFIELDS) - var/fields = 0 - for(var/d in GLOB.cardinals) - if(setup_field(d)) - fields++ - if(fields) - active = ACTIVE_HASFIELDS - if(!active_power_usage || surplus() >= active_power_usage) - add_load(active_power_usage) - else - visible_message("The [src.name] shuts down due to lack of power!", \ - "If this message is ever seen, something is wrong.", - "I hear heavy droning fade out.") - icon_state = "shield_wall_gen" - active = FALSE - log_game("[src] deactivated due to lack of power at [AREACOORD(src)]") - for(var/d in GLOB.cardinals) - cleanup_field(d) - else - icon_state = "shield_wall_gen" - for(var/d in GLOB.cardinals) - cleanup_field(d) - -/// Constructs the actual field walls in the specified direction, cleans up old/stuck shields before doing so -/obj/machinery/power/shieldwallgen/proc/setup_field(direction) - if(!direction) - return - - var/turf/T = loc - var/obj/machinery/power/shieldwallgen/G - var/steps = 0 - var/opposite_direction = turn(direction, 180) - - for(var/i in 1 to shield_range) //checks out to 8 tiles away for another generator - T = get_step(T, direction) - G = locate(/obj/machinery/power/shieldwallgen) in T - if(G) - if(!G.active) - return - G.cleanup_field(opposite_direction) - break - else - steps++ - - if(!G || !steps) //no shield gen or no tiles between us and the gen - return - - for(var/i in 1 to steps) //creates each field tile - T = get_step(T, opposite_direction) - new/obj/machinery/shieldwall(T, src, G) - return TRUE - -/// cleans up fields in the specified direction if they belong to this generator -/obj/machinery/power/shieldwallgen/proc/cleanup_field(direction) - var/obj/machinery/shieldwall/F - var/obj/machinery/power/shieldwallgen/G - var/turf/T = loc - - for(var/i in 1 to shield_range) - T = get_step(T, direction) - - G = (locate(/obj/machinery/power/shieldwallgen) in T) - if(G && !G.active) - break - - F = (locate(/obj/machinery/shieldwall) in T) - if(F && (F.gen_primary == src || F.gen_secondary == src)) //it's ours, kill it. - qdel(F) - -/obj/machinery/power/shieldwallgen/can_be_unfasten_wrench(mob/user, silent) - if(active) - if(!silent) - to_chat(user, "Turn off the shield generator first!") - return FAILED_UNFASTEN - return ..() - - -/obj/machinery/power/shieldwallgen/wrench_act(mob/living/user, obj/item/I) - . = ..() - . |= default_unfasten_wrench(user, I, 0) - var/turf/T = get_turf(src) - update_cable_icons_on_turf(T) - if(. == SUCCESSFUL_UNFASTEN && anchored) - connect_to_network() - - -/obj/machinery/power/shieldwallgen/attackby(obj/item/W, mob/user, params) - if(W.GetID()) - if(allowed(user) && !(obj_flags & EMAGGED)) - locked = !locked - to_chat(user, "I [src.locked ? "lock" : "unlock"] the controls.") - else if(obj_flags & EMAGGED) - to_chat(user, "Error, access controller damaged!") - else - to_chat(user, "Access denied.") - - else - add_fingerprint(user) - return ..() - -/obj/machinery/power/shieldwallgen/interact(mob/user) - . = ..() - if(.) - return - if(!anchored) - to_chat(user, "\The [src] needs to be firmly secured to the floor first!") - return - if(locked && !issilicon(user)) - to_chat(user, "The controls are locked!") - return - if(!powernet) - to_chat(user, "\The [src] needs to be powered by a wire!") - return - - if(active) - user.visible_message("[user] turned \the [src] off.", \ - "I turn off \the [src].", \ - "I hear heavy droning fade out.") - active = FALSE - log_game("[src] was deactivated by [key_name(user)] at [AREACOORD(src)]") - else - user.visible_message("[user] turned \the [src] on.", \ - "I turn on \the [src].", \ - "I hear heavy droning.") - active = ACTIVE_SETUPFIELDS - log_game("[src] was activated by [key_name(user)] at [AREACOORD(src)]") - add_fingerprint(user) - -/obj/machinery/power/shieldwallgen/emag_act(mob/user) - if(obj_flags & EMAGGED) - to_chat(user, "The access controller is damaged!") - return - obj_flags |= EMAGGED - locked = FALSE - playsound(src, "sparks", 100, TRUE) - to_chat(user, "I short out the access controller.") - -//////////////Containment Field START -/obj/machinery/shieldwall - name = "shield wall" - desc = "" - icon = 'icons/effects/effects.dmi' - icon_state = "shieldwall" - density = TRUE - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - light_range = 3 - var/needs_power = FALSE - var/obj/machinery/power/shieldwallgen/gen_primary - var/obj/machinery/power/shieldwallgen/gen_secondary - -/obj/machinery/shieldwall/Initialize(mapload, obj/machinery/power/shieldwallgen/first_gen, obj/machinery/power/shieldwallgen/second_gen) - . = ..() - gen_primary = first_gen - gen_secondary = second_gen - if(gen_primary && gen_secondary) - needs_power = TRUE - setDir(get_dir(gen_primary, gen_secondary)) - for(var/mob/living/L in get_turf(src)) - visible_message("\The [src] is suddenly occupying the same space as \the [L]!") - L.gib() - -/obj/machinery/shieldwall/Destroy() - gen_primary = null - gen_secondary = null - return ..() - -/obj/machinery/shieldwall/process() - if(needs_power) - if(!gen_primary || !gen_primary.active || !gen_secondary || !gen_secondary.active) - qdel(src) - return - - drain_power(10) - -/obj/machinery/shieldwall/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BURN) - playsound(loc, 'sound/blank.ogg', 75, TRUE) - if(BRUTE) - playsound(loc, 'sound/blank.ogg', 75, TRUE) - -//the shield wall is immune to damage but it drains the stored power of the generators. -/obj/machinery/shieldwall/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) - . = ..() - if(damage_type == BRUTE || damage_type == BURN) - drain_power(damage_amount) - -/// succs power from the connected shield wall generator -/obj/machinery/shieldwall/proc/drain_power(drain_amount) - if(needs_power && gen_primary) - gen_primary.add_load(drain_amount * 0.5) - if(gen_secondary) //using power may cause us to be destroyed - gen_secondary.add_load(drain_amount * 0.5) - -/obj/machinery/shieldwall/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && (mover.pass_flags & PASSGLASS)) - return prob(20) - else - if(istype(mover, /obj/projectile)) - return prob(10) - else - return !density diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm deleted file mode 100644 index bf9dc2ea44..0000000000 --- a/code/game/machinery/slotmachine.dm +++ /dev/null @@ -1,360 +0,0 @@ -/*******************************\ -| Slot Machines | -| Original code by Glloyd | -| Tgstation port by Miauw | -\*******************************/ - -#define SPIN_PRICE 5 -#define SMALL_PRIZE 400 -#define BIG_PRIZE 1000 -#define JACKPOT 10000 -#define SPIN_TIME 65 //As always, deciseconds. -#define REEL_DEACTIVATE_DELAY 7 -#define SEVEN "7" -#define HOLOCHIP 1 -#define COIN 2 - -/obj/machinery/computer/slot_machine - name = "slot machine" - desc = "" - icon = 'icons/obj/economy.dmi' - icon_state = "slots1" - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 50 - circuit = /obj/item/circuitboard/computer/slot_machine - var/money = 3000 //How much money it has CONSUMED - var/plays = 0 - var/working = 0 - var/balance = 0 //How much money is in the machine, ready to be CONSUMED. - var/jackpots = 0 - var/paymode = HOLOCHIP //toggles between HOLOCHIP/COIN, defined above - var/cointype = /obj/item/coin/iron //default cointype - var/list/coinvalues = list() - var/list/reels = list(list("", "", "") = 0, list("", "", "") = 0, list("", "", "") = 0, list("", "", "") = 0, list("", "", "") = 0) - var/list/symbols = list(SEVEN = 1, "&" = 2, "@" = 2, "$" = 2, "?" = 2, "#" = 2, "!" = 2, "%" = 2) //if people are winning too much, multiply every number in this list by 2 and see if they are still winning too much. - - light_color = LIGHT_COLOR_BROWN - -/obj/machinery/computer/slot_machine/Initialize() - . = ..() - jackpots = rand(1, 4) //false hope - plays = rand(75, 200) - - set_reel_instant(1) //The reels won't spin unless we activate them - - var/list/reel = reels[1] - for(var/i = 0, i < reel.len, i++) //Populate the reels. - randomize_reels() - - set_reel_instant(0) - - for(cointype in typesof(/obj/item/coin)) - var/obj/item/coin/C = cointype - coinvalues["[cointype]"] = initial(C.value) - -/obj/machinery/computer/slot_machine/Destroy() - if(balance) - give_payout(balance) - return ..() - -/obj/machinery/computer/slot_machine/process() - . = ..() //Sanity checks. - if(!.) - return . - - money++ //SPESSH MAJICKS - -/obj/machinery/computer/slot_machine/update_icon_state() - if(stat & NOPOWER) - icon_state = "slots0" - - else if(stat & BROKEN) - icon_state = "slotsb" - - else if(working) - icon_state = "slots2" - - else - icon_state = "slots1" - -/obj/machinery/computer/slot_machine/attackby(obj/item/I, mob/living/user, params) - if(istype(I, /obj/item/coin)) - var/obj/item/coin/C = I - if(paymode == COIN) - if(prob(2)) - if(!user.transferItemToLoc(C, drop_location(), silent = FALSE)) - return - C.throw_at(user, 3, 10) - if(prob(10)) - balance = max(balance - SPIN_PRICE, 0) - to_chat(user, "[src] spits your coin back out!") - - else - if(!user.temporarilyRemoveItemFromInventory(C)) - return - to_chat(user, "I insert [C] into [src]'s slot!") - balance += C.value - qdel(C) - else - to_chat(user, "This machine is only accepting holochips!") - else if(istype(I, /obj/item/holochip)) - if(paymode == HOLOCHIP) - var/obj/item/holochip/H = I - if(!user.temporarilyRemoveItemFromInventory(H)) - return - to_chat(user, "I insert [H.credits] holocredits into [src]'s!") - balance += H.credits - qdel(H) - else - to_chat(user, "This machine is only accepting coins!") - else if(I.tool_behaviour == TOOL_MULTITOOL) - if(balance > 0) - visible_message("[src] says, 'ERROR! Please empty the machine balance before altering paymode'") //Prevents converting coins into holocredits and vice versa - else - if(paymode == HOLOCHIP) - paymode = COIN - visible_message("[src] says, 'This machine now works with COINS!'") - else - paymode = HOLOCHIP - visible_message("[src] says, 'This machine now works with HOLOCHIPS!'") - else - return ..() - -/obj/machinery/computer/slot_machine/emag_act() - if(obj_flags & EMAGGED) - return - obj_flags |= EMAGGED - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread() - spark_system.set_up(4, 0, src.loc) - spark_system.start() - playsound(src, "sparks", 50, TRUE) - -/obj/machinery/computer/slot_machine/ui_interact(mob/living/user) - . = ..() - var/reeltext = {"
          - /*****^*****^*****^*****^*****\\
          - | \[[reels[1][1]]\] | \[[reels[2][1]]\] | \[[reels[3][1]]\] | \[[reels[4][1]]\] | \[[reels[5][1]]\] |
          - | \[[reels[1][2]]\] | \[[reels[2][2]]\] | \[[reels[3][2]]\] | \[[reels[4][2]]\] | \[[reels[5][2]]\] |
          - | \[[reels[1][3]]\] | \[[reels[2][3]]\] | \[[reels[3][3]]\] | \[[reels[4][3]]\] | \[[reels[5][3]]\] |
          - \\*****v*****v*****v*****v*****/
          -
          "} - - var/dat - if(working) - dat = reeltext - - else - dat = {"Five credits to play!
          - Prize Money Available: [money] (jackpot payout is ALWAYS 100%!)
          - Credit Remaining: [balance]
          - [plays] players have tried their luck today, and [jackpots] have won a jackpot!
          -

          - Play!
          -
          - [reeltext] -
          "} - if(balance > 0) - dat+="Refund balance
          " - - var/datum/browser/popup = new(user, "slotmachine", "Slot Machine") - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - popup.open() - -/obj/machinery/computer/slot_machine/Topic(href, href_list) - . = ..() //Sanity checks. - if(.) - return . - - if(href_list["spin"]) - spin(usr) - - else if(href_list["refund"]) - if(balance > 0) - give_payout(balance) - balance = 0 - -/obj/machinery/computer/slot_machine/emp_act(severity) - . = ..() - if(stat & (NOPOWER|BROKEN) || . & EMP_PROTECT_SELF) - return - if(prob(15 * severity)) - return - if(prob(1)) // :^) - obj_flags |= EMAGGED - var/severity_ascending = 4 - severity - money = max(rand(money - (200 * severity_ascending), money + (200 * severity_ascending)), 0) - balance = max(rand(balance - (50 * severity_ascending), balance + (50 * severity_ascending)), 0) - money -= max(0, give_payout(min(rand(-50, 100 * severity_ascending)), money)) //This starts at -50 because it shouldn't always dispense coins yo - spin() - -/obj/machinery/computer/slot_machine/proc/spin(mob/user) - if(!can_spin(user)) - return - - var/the_name - if(user) - the_name = user.real_name - visible_message("[user] pulls the lever and the slot machine starts spinning!") - else - the_name = "Exaybachay" - - balance -= SPIN_PRICE - money += SPIN_PRICE - plays += 1 - working = TRUE - - set_reel_instant(1) - update_icon() - updateDialog() - - var/spin_loop = addtimer(CALLBACK(src, PROC_REF(do_spin)), 2, TIMER_LOOP|TIMER_STOPPABLE) - - addtimer(CALLBACK(src, PROC_REF(finish_spinning), spin_loop, user, the_name), SPIN_TIME - (REEL_DEACTIVATE_DELAY * reels.len)) - //WARNING: no sanity checking for user since it's not needed and would complicate things (machine should still spin even if user is gone), be wary of this if you're changing this code. - -/obj/machinery/computer/slot_machine/proc/do_spin() - randomize_reels() - updateDialog() - -/obj/machinery/computer/slot_machine/proc/finish_spinning(spin_loop, mob/user, the_name) - toggle_reel_spin(0) - working = FALSE - deltimer(spin_loop) - give_prizes(the_name, user) - update_icon() - updateDialog() - -/obj/machinery/computer/slot_machine/proc/can_spin(mob/user) - if(stat & NOPOWER) - to_chat(user, "The slot machine has no power!") - if(stat & BROKEN) - to_chat(user, "The slot machine is broken!") - if(working) - to_chat(user, "I need to wait until the machine stops spinning before you can play again!") - return 0 - if(balance < SPIN_PRICE) - to_chat(user, "Insufficient money to play!") - return 0 - return 1 - -// Like toggle_reel_spin but with no delay, used for cases like Initialize where sleeps are forbidden -/obj/machinery/computer/slot_machine/proc/set_reel_instant(value) - for(var/list/reel in reels) - reels[reel] = value - -/obj/machinery/computer/slot_machine/proc/toggle_reel_spin(value) //value is 1 or 0 aka on or off - for(var/list/reel in reels) - reels[reel] = value - sleep(REEL_DEACTIVATE_DELAY) - -/obj/machinery/computer/slot_machine/proc/randomize_reels() - - for(var/reel in reels) - if(reels[reel]) - reel[3] = reel[2] - reel[2] = reel[1] - reel[1] = pick(symbols) - -/obj/machinery/computer/slot_machine/proc/give_prizes(usrname, mob/user) - var/linelength = get_lines() - - if(reels[1][2] + reels[2][2] + reels[3][2] + reels[4][2] + reels[5][2] == "[SEVEN][SEVEN][SEVEN][SEVEN][SEVEN]") - visible_message("[src] says, 'JACKPOT! You win [money] credits!'") - priority_announce("Congratulations to [user ? user.real_name : usrname] for winning the jackpot at the slot machine in [get_area(src)]!") - jackpots += 1 - balance += money - give_payout(JACKPOT) - money = 0 - if(paymode == HOLOCHIP) - new /obj/item/holochip(loc,JACKPOT) - else - for(var/i = 0, i < 5, i++) - cointype = pick(subtypesof(/obj/item/coin)) - var/obj/item/coin/C = new cointype(loc) - random_step(C, 2, 50) - - else if(linelength == 5) - visible_message("[src] says, 'Big Winner! You win a thousand credits!'") - give_money(BIG_PRIZE) - - else if(linelength == 4) - visible_message("[src] says, 'Winner! You win four hundred credits!'") - give_money(SMALL_PRIZE) - - else if(linelength == 3) - to_chat(user, "I win three free games!") - balance += SPIN_PRICE * 4 - money = max(money - SPIN_PRICE * 4, money) - - else - to_chat(user, "No luck!") - -/obj/machinery/computer/slot_machine/proc/get_lines() - var/amountthesame - - for(var/i = 1, i <= 3, i++) - var/inputtext = reels[1][i] + reels[2][i] + reels[3][i] + reels[4][i] + reels[5][i] - for(var/symbol in symbols) - var/j = 3 //The lowest value we have to check for. - var/symboltext = symbol + symbol + symbol - while(j <= 5) - if(findtext(inputtext, symboltext)) - amountthesame = max(j, amountthesame) - j++ - symboltext += symbol - - if(amountthesame) - break - - return amountthesame - -/obj/machinery/computer/slot_machine/proc/give_money(amount) - var/amount_to_give = money >= amount ? amount : money - var/surplus = amount_to_give - give_payout(amount_to_give) - money = max(0, money - amount) - balance += surplus - -/obj/machinery/computer/slot_machine/proc/give_payout(amount) - if(paymode == HOLOCHIP) - cointype = /obj/item/holochip - else - cointype = obj_flags & EMAGGED ? /obj/item/coin/iron : /obj/item/coin/silver - - if(!(obj_flags & EMAGGED)) - amount = dispense(amount, cointype, null, 0) - - else - var/mob/living/target = locate() in range(2, src) - - amount = dispense(amount, cointype, target, 1) - - return amount - -/obj/machinery/computer/slot_machine/proc/dispense(amount = 0, cointype = /obj/item/coin/silver, mob/living/target, throwit = 0) - if(paymode == HOLOCHIP) - var/obj/item/holochip/H = new /obj/item/holochip(loc,amount) - - if(throwit && target) - H.throw_at(target, 3, 10) - else - var/value = coinvalues["[cointype]"] - - while(amount >= value) - var/obj/item/coin/C = new cointype(loc) //DOUBLE THE PAIN - amount -= value - if(throwit && target) - C.throw_at(target, 3, 10) - else - random_step(C, 2, 40) - - return amount - -#undef SEVEN -#undef SPIN_TIME -#undef JACKPOT -#undef BIG_PRIZE -#undef SMALL_PRIZE -#undef SPIN_PRICE -#undef HOLOCHIP -#undef COIN diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm deleted file mode 100644 index 98b32294be..0000000000 --- a/code/game/machinery/spaceheater.dm +++ /dev/null @@ -1,246 +0,0 @@ -#define HEATER_MODE_STANDBY "standby" -#define HEATER_MODE_HEAT "heat" -#define HEATER_MODE_COOL "cool" - -/obj/machinery/space_heater - anchored = FALSE - density = TRUE - interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN - icon = 'icons/obj/atmos.dmi' - icon_state = "sheater-off" - name = "space heater" - desc = "" - max_integrity = 250 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 10) - circuit = /obj/item/circuitboard/machine/space_heater - ui_x = 400 - ui_y = 305 - - var/obj/item/stock_parts/cell/cell - var/on = FALSE - var/mode = HEATER_MODE_STANDBY - var/setMode = "auto" // Anything other than "heat" or "cool" is considered auto. - var/targetTemperature = T20C - var/heatingPower = 40000 - var/efficiency = 20000 - var/temperatureTolerance = 1 - var/settableTemperatureMedian = 30 + T0C - var/settableTemperatureRange = 30 - -/obj/machinery/space_heater/get_cell() - return cell - -/obj/machinery/space_heater/Initialize() - . = ..() - cell = new(src) - update_icon() - -/obj/machinery/space_heater/on_construction() - qdel(cell) - cell = null - panel_open = TRUE - update_icon() - return ..() - -/obj/machinery/space_heater/on_deconstruction() - if(cell) - component_parts += cell - cell = null - return ..() - -/obj/machinery/space_heater/examine(mob/user) - . = ..() - . += "\The [src] is [on ? "on" : "off"], and the hatch is [panel_open ? "open" : "closed"]." - if(cell) - . += "The charge meter reads [cell ? round(cell.percent(), 1) : 0]%." - else - . += "There is no power cell installed." - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Temperature range at [settableTemperatureRange]°C.
          Heating power at [heatingPower*0.001]kJ.
          Power consumption at [(efficiency*-0.0025)+150]%.
          " //100%, 75%, 50%, 25% - -/obj/machinery/space_heater/update_icon_state() - if(on) - icon_state = "sheater-[mode]" - else - icon_state = "sheater-off" - -/obj/machinery/space_heater/update_overlays() - . = ..() - - if(panel_open) - . += "sheater-open" - -/obj/machinery/space_heater/process() - if(!on || !is_operational()) - if (on) // If it's broken, turn it off too - on = FALSE - return PROCESS_KILL - - if(cell && cell.charge > 0) - var/turf/L = loc - if(!istype(L)) - if(mode != HEATER_MODE_STANDBY) - mode = HEATER_MODE_STANDBY - update_icon() - return - - var/datum/gas_mixture/env = L.return_air() - - var/newMode = HEATER_MODE_STANDBY - if(setMode != HEATER_MODE_COOL && env.temperature < targetTemperature - temperatureTolerance) - newMode = HEATER_MODE_HEAT - else if(setMode != HEATER_MODE_HEAT && env.temperature > targetTemperature + temperatureTolerance) - newMode = HEATER_MODE_COOL - - if(mode != newMode) - mode = newMode - update_icon() - - if(mode == HEATER_MODE_STANDBY) - return - - var/heat_capacity = env.heat_capacity() - var/requiredPower = abs(env.temperature - targetTemperature) * heat_capacity - requiredPower = min(requiredPower, heatingPower) - - if(requiredPower < 1) - return - - var/deltaTemperature = requiredPower / heat_capacity - if(mode == HEATER_MODE_COOL) - deltaTemperature *= -1 - if(deltaTemperature) - env.temperature += deltaTemperature - air_update_turf() - cell.use(requiredPower / efficiency) - else - on = FALSE - update_icon() - return PROCESS_KILL - -/obj/machinery/space_heater/RefreshParts() - var/laser = 0 - var/cap = 0 - for(var/obj/item/stock_parts/micro_laser/M in component_parts) - laser += M.rating - for(var/obj/item/stock_parts/capacitor/M in component_parts) - cap += M.rating - - heatingPower = laser * 40000 - - settableTemperatureRange = cap * 30 - efficiency = (cap + 1) * 10000 - - targetTemperature = CLAMP(targetTemperature, - max(settableTemperatureMedian - settableTemperatureRange, TCMB), - settableTemperatureMedian + settableTemperatureRange) - -/obj/machinery/space_heater/emp_act(severity) - . = ..() - if(stat & (NOPOWER|BROKEN) || . & EMP_PROTECT_CONTENTS) - return - if(cell) - cell.emp_act(severity) - -/obj/machinery/space_heater/attackby(obj/item/I, mob/user, params) - add_fingerprint(user) - if(istype(I, /obj/item/stock_parts/cell)) - if(panel_open) - if(cell) - to_chat(user, "There is already a power cell inside!") - return - else if(!user.transferItemToLoc(I, src)) - return - cell = I - I.add_fingerprint(usr) - - user.visible_message("\The [user] inserts a power cell into \the [src].", "I insert the power cell into \the [src].") - SStgui.update_uis(src) - else - to_chat(user, "The hatch must be open to insert a power cell!") - return - else if(I.tool_behaviour == TOOL_SCREWDRIVER) - panel_open = !panel_open - user.visible_message("\The [user] [panel_open ? "opens" : "closes"] the hatch on \the [src].", "I [panel_open ? "open" : "close"] the hatch on \the [src].") - update_icon() - else if(default_deconstruction_crowbar(I)) - return - else - return ..() - -/obj/machinery/space_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "space_heater", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/space_heater/ui_data() - var/list/data = list() - data["open"] = panel_open - data["on"] = on - data["mode"] = setMode - data["hasPowercell"] = !!cell - if(cell) - data["powerLevel"] = round(cell.percent(), 1) - data["targetTemp"] = round(targetTemperature - T0C, 1) - data["minTemp"] = max(settableTemperatureMedian - settableTemperatureRange - T0C, TCMB) - data["maxTemp"] = settableTemperatureMedian + settableTemperatureRange - T0C - - var/turf/L = get_turf(loc) - var/curTemp - if(istype(L)) - var/datum/gas_mixture/env = L.return_air() - curTemp = env.temperature - else if(isturf(L)) - curTemp = L.temperature - if(isnull(curTemp)) - data["currentTemp"] = "N/A" - else - data["currentTemp"] = round(curTemp - T0C, 1) - return data - -/obj/machinery/space_heater/ui_act(action, params) - if(..()) - return - switch(action) - if("power") - on = !on - mode = HEATER_MODE_STANDBY - usr.visible_message("[usr] switches [on ? "on" : "off"] \the [src].", "I switch [on ? "on" : "off"] \the [src].") - update_icon() - if (on) - START_PROCESSING(SSmachines, src) - . = TRUE - if("mode") - setMode = params["mode"] - . = TRUE - if("target") - if(!panel_open) - return - var/target = params["target"] - var/adjust = text2num(params["adjust"]) - if(target == "input") - target = input("New target temperature:", name, round(targetTemperature - T0C, 1)) as num|null - if(!isnull(target) && !..()) - target += T0C - . = TRUE - else if(adjust) - target = targetTemperature + adjust - . = TRUE - else if(text2num(target) != null) - target= text2num(target) + T0C - . = TRUE - if(.) - targetTemperature = CLAMP(round(target), - max(settableTemperatureMedian - settableTemperatureRange, TCMB), - settableTemperatureMedian + settableTemperatureRange) - if("eject") - if(panel_open && cell) - cell.forceMove(drop_location()) - cell = null - . = TRUE - -#undef HEATER_MODE_STANDBY -#undef HEATER_MODE_HEAT -#undef HEATER_MODE_COOL diff --git a/code/game/machinery/stasis.dm b/code/game/machinery/stasis.dm deleted file mode 100644 index 7e5aa493eb..0000000000 --- a/code/game/machinery/stasis.dm +++ /dev/null @@ -1,147 +0,0 @@ -#define STASIS_TOGGLE_COOLDOWN 50 -/obj/machinery/stasis - name = "Lifeform Stasis Unit" - desc = "" - icon = 'icons/obj/machines/stasis.dmi' - icon_state = "stasis" - density = FALSE - can_buckle = TRUE - buckle_lying = 90 - circuit = /obj/item/circuitboard/machine/stasis - idle_power_usage = 40 - active_power_usage = 340 - fair_market_price = 10 - payment_department = ACCOUNT_MED - var/stasis_enabled = TRUE - var/last_stasis_sound = FALSE - var/stasis_can_toggle = 0 - var/mattress_state = "stasis_on" - var/obj/effect/overlay/vis/mattress_on - var/obj/machinery/computer/operating/op_computer - -/obj/machinery/stasis/examine(mob/user) - . = ..() - . += "Alt-click to [stasis_enabled ? "turn off" : "turn on"] the machine." - . += "[src] is [op_computer ? "linked" : "NOT linked"] to an operating computer." - -/obj/machinery/stasis/proc/play_power_sound() - var/_running = stasis_running() - if(last_stasis_sound != _running) - var/sound_freq = rand(5120, 8800) - if(_running) - playsound(src, 'sound/blank.ogg', 50, TRUE, frequency = sound_freq) - else - playsound(src, 'sound/blank.ogg', 50, TRUE, frequency = sound_freq) - last_stasis_sound = _running - -/obj/machinery/stasis/AltClick(mob/user) - if(world.time >= stasis_can_toggle && user.canUseTopic(src, !issilicon(user))) - stasis_enabled = !stasis_enabled - stasis_can_toggle = world.time + STASIS_TOGGLE_COOLDOWN - playsound(src, 'sound/blank.ogg', 60, TRUE) - play_power_sound() - update_icon() - -/obj/machinery/stasis/Exited(atom/movable/AM, atom/newloc) - if(AM == occupant) - var/mob/living/L = AM - if(IS_IN_STASIS(L)) - thaw_them(L) - . = ..() - -/obj/machinery/stasis/proc/stasis_running() - return stasis_enabled && is_operational() - -/obj/machinery/stasis/update_icon_state() - if(stat & BROKEN) - icon_state = "stasis_broken" - return - if(panel_open || stat & MAINT) - icon_state = "stasis_maintenance" - return - icon_state = "stasis" - -/obj/machinery/stasis/update_overlays() - . = ..() - var/_running = stasis_running() - var/list/overlays_to_remove = managed_vis_overlays - - if(mattress_state) - if(!mattress_on || !managed_vis_overlays) - mattress_on = SSvis_overlays.add_vis_overlay(src, icon, mattress_state, layer, plane, dir, alpha = 0, unique = TRUE) - - if(mattress_on.alpha ? !_running : _running) //check the inverse of _running compared to truthy alpha, to see if they differ - var/new_alpha = _running ? 255 : 0 - var/easing_direction = _running ? EASE_OUT : EASE_IN - animate(mattress_on, alpha = new_alpha, time = 50, easing = CUBIC_EASING|easing_direction) - - overlays_to_remove = managed_vis_overlays - mattress_on - - SSvis_overlays.remove_vis_overlay(src, overlays_to_remove) - -/obj/machinery/stasis/obj_break(damage_flag) - . = ..() - if(.) - play_power_sound() - -/obj/machinery/stasis/power_change() - . = ..() - play_power_sound() - -/obj/machinery/stasis/proc/chill_out(mob/living/target) - if(target != occupant) - return - var/freq = rand(24750, 26550) - playsound(src, 'sound/blank.ogg', 5, TRUE, 2, frequency = freq) - target.apply_status_effect(STATUS_EFFECT_STASIS, null, TRUE) - target.ExtinguishMob() - use_power = ACTIVE_POWER_USE - -/obj/machinery/stasis/proc/thaw_them(mob/living/target) - target.remove_status_effect(STATUS_EFFECT_STASIS) - if(target == occupant) - use_power = IDLE_POWER_USE - -/obj/machinery/stasis/post_buckle_mob(mob/living/L) - if(!can_be_occupant(L)) - return - occupant = L - if(stasis_running() && check_nap_violations()) - chill_out(L) - update_icon() - -/obj/machinery/stasis/post_unbuckle_mob(mob/living/L) - thaw_them(L) - if(L == occupant) - occupant = null - update_icon() - -/obj/machinery/stasis/process() - if( !( occupant && isliving(occupant) && check_nap_violations() ) ) - use_power = IDLE_POWER_USE - return - var/mob/living/L_occupant = occupant - if(stasis_running()) - if(!IS_IN_STASIS(L_occupant)) - chill_out(L_occupant) - else if(IS_IN_STASIS(L_occupant)) - thaw_them(L_occupant) - -/obj/machinery/stasis/screwdriver_act(mob/living/user, obj/item/I) - . = ..() - . |= default_deconstruction_screwdriver(user, "stasis_maintenance", "stasis", I) - update_icon() - -/obj/machinery/stasis/crowbar_act(mob/living/user, obj/item/I) - . = ..() - return default_deconstruction_crowbar(I) || . - -/obj/machinery/stasis/nap_violation(mob/violator) - unbuckle_mob(violator, TRUE) - -/obj/machinery/stasis/attack_robot(mob/user) - if(Adjacent(user) && occupant) - unbuckle_mob(occupant) - else - ..() -#undef STASIS_TOGGLE_COOLDOWN diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm deleted file mode 100644 index 0a997170b1..0000000000 --- a/code/game/machinery/status_display.dm +++ /dev/null @@ -1,371 +0,0 @@ -// Status display -// (formerly Countdown timer display) - -#define CHARS_PER_LINE 5 -#define FONT_SIZE "5pt" -#define FONT_COLOR "#09f" -#define FONT_STYLE "Small Fonts" -#define SCROLL_SPEED 2 - -#define SD_BLANK 0 // 0 = Blank -#define SD_EMERGENCY 1 // 1 = Emergency Shuttle timer -#define SD_MESSAGE 2 // 2 = Arbitrary message(s) -#define SD_PICTURE 3 // 3 = alert picture - -#define SD_AI_EMOTE 1 // 1 = AI emoticon -#define SD_AI_BSOD 2 // 2 = Blue screen of death - -/// Status display which can show images and scrolling text. -/obj/machinery/status_display - name = "status display" - desc = null - icon = 'icons/obj/status_display.dmi' - icon_state = "frame" - density = FALSE - use_power = IDLE_POWER_USE - idle_power_usage = 10 - - maptext_height = 26 - maptext_width = 32 - maptext_y = -1 - - var/message1 = "" // message line 1 - var/message2 = "" // message line 2 - var/index1 // display index for scrolling messages or 0 if non-scrolling - var/index2 - -/// Immediately blank the display. -/obj/machinery/status_display/proc/remove_display() - cut_overlays() - if(maptext) - maptext = "" - -/// Immediately change the display to the given picture. -/obj/machinery/status_display/proc/set_picture(state) - remove_display() - add_overlay(state) - -/// Immediately change the display to the given two lines. -/obj/machinery/status_display/proc/update_display(line1, line2) - line1 = uppertext(line1) - line2 = uppertext(line2) - var/new_text = {"
          [line1]
          [line2]
          "} - if(maptext != new_text) - maptext = new_text - -/// Prepare the display to marquee the given two lines. -/// -/// Call with no arguments to disable. -/obj/machinery/status_display/proc/set_message(m1, m2) - if(m1) - index1 = (length(m1) > CHARS_PER_LINE) - message1 = m1 - else - message1 = "" - index1 = 0 - - if(m2) - index2 = (length(m2) > CHARS_PER_LINE) - message2 = m2 - else - message2 = "" - index2 = 0 - -// Timed process - performs default marquee action if so needed. -/obj/machinery/status_display/process() - if(stat & NOPOWER) - // No power, no processing. - remove_display() - return PROCESS_KILL - - var/line1 = message1 - if(index1) - line1 = copytext("[message1]|[message1]", index1, index1+CHARS_PER_LINE) - var/message1_len = length(message1) - index1 += SCROLL_SPEED - if(index1 > message1_len) - index1 -= message1_len - - var/line2 = message2 - if(index2) - line2 = copytext("[message2]|[message2]", index2, index2+CHARS_PER_LINE) - var/message2_len = length(message2) - index2 += SCROLL_SPEED - if(index2 > message2_len) - index2 -= message2_len - - update_display(line1, line2) - if (!index1 && !index2) - // No marquee, no processing. - return PROCESS_KILL - -/// Update the display and, if necessary, re-enable processing. -/obj/machinery/status_display/proc/update() - if (process() != PROCESS_KILL) - START_PROCESSING(SSmachines, src) - -/obj/machinery/status_display/power_change() - . = ..() - update() - -/obj/machinery/status_display/emp_act(severity) - . = ..() - if(stat & (NOPOWER|BROKEN) || . & EMP_PROTECT_SELF) - return - set_picture("ai_bsod") - -/obj/machinery/status_display/examine(mob/user) - . = ..() - if (message1 || message2) - . += "The display says:" - if (message1) - . += "
          \t[html_encode(message1)]" - if (message2) - . += "
          \t[html_encode(message2)]" - -// Helper procs for child display types. -/obj/machinery/status_display/proc/display_shuttle_status(obj/docking_port/mobile/shuttle) - if(!shuttle) - // the shuttle is missing - no processing - update_display("shutl?","") - return PROCESS_KILL - else if(shuttle.timer) - var/line1 = "-[shuttle.getModeStr()]-" - var/line2 = shuttle.getTimerStr() - - if(length(line2) > CHARS_PER_LINE) - line2 = "error" - update_display(line1, line2) - else - // don't kill processing, the timer might turn back on - remove_display() - -/obj/machinery/status_display/proc/examine_shuttle(mob/user, obj/docking_port/mobile/shuttle) - if (shuttle) - var/modestr = shuttle.getModeStr() - if (modestr) - if (shuttle.timer) - modestr = "
          \t[modestr]: [shuttle.getTimerStr()]" - else - modestr = "
          \t[modestr]" - return "The display says:
          \t[shuttle.name][modestr]" - else - return "The display says:
          \tShuttle missing!" - - -/// Evac display which shows shuttle timer or message set by Command. -/obj/machinery/status_display/evac - var/frequency = FREQ_STATUS_DISPLAYS - var/mode = SD_EMERGENCY - var/friendc = FALSE // track if Friend Computer mode - var/last_picture // For when Friend Computer mode is undone - -/obj/machinery/status_display/evac/Initialize() - . = ..() - // register for radio system - SSradio.add_object(src, frequency) - -/obj/machinery/status_display/evac/Destroy() - SSradio.remove_object(src,frequency) - return ..() - -/obj/machinery/status_display/evac/process() - if(stat & NOPOWER) - // No power, no processing. - remove_display() - return PROCESS_KILL - - if(friendc) //Makes all status displays except supply shuttle timer display the eye -- Urist - set_picture("ai_friend") - return PROCESS_KILL - - switch(mode) - if(SD_BLANK) - remove_display() - return PROCESS_KILL - - if(SD_EMERGENCY) - return display_shuttle_status(SSshuttle.emergency) - - if(SD_MESSAGE) - return ..() - - if(SD_PICTURE) - set_picture(last_picture) - return PROCESS_KILL - -/obj/machinery/status_display/evac/examine(mob/user) - . = ..() - if(mode == SD_EMERGENCY) - . += examine_shuttle(user, SSshuttle.emergency) - else if(!message1 && !message2) - . += "The display is blank." - -/obj/machinery/status_display/evac/receive_signal(datum/signal/signal) - switch(signal.data["command"]) - if("blank") - mode = SD_BLANK - set_message(null, null) - if("shuttle") - mode = SD_EMERGENCY - set_message(null, null) - if("message") - mode = SD_MESSAGE - set_message(signal.data["msg1"], signal.data["msg2"]) - if("alert") - mode = SD_PICTURE - last_picture = signal.data["picture_state"] - set_picture(last_picture) - if("friendcomputer") - friendc = !friendc - update() - - -/// Supply display which shows the status of the supply shuttle. -/obj/machinery/status_display/supply - name = "supply display" - -/obj/machinery/status_display/supply/process() - if(stat & NOPOWER) - // No power, no processing. - remove_display() - return PROCESS_KILL - - var/line1 - var/line2 - if(!SSshuttle.supply) - // Might be missing in our first update on initialize before shuttles - // have loaded. Cross our fingers that it will soon return. - line1 = "CARGO" - line2 = "shutl?" - else if(SSshuttle.supply.mode == SHUTTLE_IDLE) - if(is_station_level(SSshuttle.supply.z)) - line1 = "CARGO" - line2 = "Docked" - else - line1 = "CARGO" - line2 = SSshuttle.supply.getTimerStr() - if(length(line2) > CHARS_PER_LINE) - line2 = "Error" - update_display(line1, line2) - -/obj/machinery/status_display/supply/examine(mob/user) - . = ..() - var/obj/docking_port/mobile/shuttle = SSshuttle.supply - var/shuttleMsg = null - if (shuttle.mode == SHUTTLE_IDLE) - if (is_station_level(shuttle.z)) - shuttleMsg = "Docked" - else - shuttleMsg = "[shuttle.getModeStr()]: [shuttle.getTimerStr()]" - if (shuttleMsg) - . += "The display says:
          \t[shuttleMsg]" - else - . += "The display is blank." - - -/// General-purpose shuttle status display. -/obj/machinery/status_display/shuttle - name = "shuttle display" - var/shuttle_id - -/obj/machinery/status_display/shuttle/process() - if(!shuttle_id || (stat & NOPOWER)) - // No power, no processing. - remove_display() - return PROCESS_KILL - - return display_shuttle_status(SSshuttle.getShuttle(shuttle_id)) - -/obj/machinery/status_display/shuttle/examine(mob/user) - . = ..() - if(shuttle_id) - . += examine_shuttle(user, SSshuttle.getShuttle(shuttle_id)) - else - . += "The display is blank." - -/obj/machinery/status_display/shuttle/vv_edit_var(var_name, var_value) - . = ..() - if(!.) - return - switch(var_name) - if("shuttle_id") - update() - -/obj/machinery/status_display/shuttle/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override) - if (port && (shuttle_id == initial(shuttle_id) || override)) - shuttle_id = port.id - update() - - -/// Pictograph display which the AI can use to emote. -/obj/machinery/status_display/ai - name = "\improper AI display" - desc = "" - - var/mode = SD_BLANK - var/emotion = "Neutral" - -/obj/machinery/status_display/ai/Initialize() - . = ..() - GLOB.ai_status_displays.Add(src) - -/obj/machinery/status_display/ai/Destroy() - GLOB.ai_status_displays.Remove(src) - . = ..() - -/obj/machinery/status_display/ai/attack_ai(mob/living/silicon/ai/user) - if(isAI(user)) - user.ai_statuschange() - -/obj/machinery/status_display/ai/process() - if(mode == SD_BLANK || (stat & NOPOWER)) - remove_display() - return PROCESS_KILL - - if(mode == SD_AI_EMOTE) - switch(emotion) - if("Very Happy") - set_picture("ai_veryhappy") - if("Happy") - set_picture("ai_happy") - if("Neutral") - set_picture("ai_neutral") - if("Unsure") - set_picture("ai_unsure") - if("Confused") - set_picture("ai_confused") - if("Sad") - set_picture("ai_sad") - if("BSOD") - set_picture("ai_bsod") - if("Blank") - set_picture("ai_off") - if("Problems?") - set_picture("ai_trollface") - if("Awesome") - set_picture("ai_awesome") - if("Dorfy") - set_picture("ai_urist") - if("Thinking") - set_picture("ai_thinking") - if("Facepalm") - set_picture("ai_facepalm") - if("Friend Computer") - set_picture("ai_friend") - if("Blue Glow") - set_picture("ai_sal") - if("Red Glow") - set_picture("ai_hal") - return PROCESS_KILL - - if(mode == SD_AI_BSOD) - set_picture("ai_bsod") - return PROCESS_KILL - - -#undef CHARS_PER_LINE -#undef FONT_SIZE -#undef FONT_COLOR -#undef FONT_STYLE -#undef SCROLL_SPEED diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm deleted file mode 100644 index baf7202242..0000000000 --- a/code/game/machinery/suit_storage_unit.dm +++ /dev/null @@ -1,495 +0,0 @@ -// SUIT STORAGE UNIT ///////////////// -/obj/machinery/suit_storage_unit - name = "suit storage unit" - desc = "" - icon = 'icons/obj/machines/suit_storage.dmi' - icon_state = "close" - density = TRUE - max_integrity = 250 - ui_x = 400 - ui_y = 305 - - var/obj/item/clothing/suit/space/suit = null - var/obj/item/clothing/head/helmet/space/helmet = null - var/obj/item/clothing/mask/mask = null - var/obj/item/storage = null - // if you add more storage slots, update cook() to clear their radiation too. - - /// What type of spacesuit the unit starts with when spawned. - var/suit_type = null - /// What type of space helmet the unit starts with when spawned. - var/helmet_type = null - /// What type of breathmask the unit starts with when spawned. - var/mask_type = null - /// What type of additional item the unit starts with when spawned. - var/storage_type = null - - state_open = FALSE - /// If the SSU's doors are locked closed. Can be toggled manually via the UI, but is also locked automatically when the UV decontamination sequence is running. - var/locked = FALSE - panel_open = FALSE - /// If the safety wire is cut/pulsed, the SSU can run the decontamination sequence while occupied by a mob. The mob will be burned during every cycle of cook(). - var/safeties = TRUE - - /// If UV decontamination sequence is running. See cook() - var/uv = FALSE - /** - * If the hack wire is cut/pulsed. - * Modifies effects of cook() - * * If FALSE, decontamination sequence will clear radiation for all atoms (and their contents) contained inside the unit, and burn any mobs inside. - * * If TRUE, decontamination sequence will delete all items contained within, and if occupied by a mob, intensifies burn damage delt. All wires will be cut at the end. - */ - var/uv_super = FALSE - /// How many cycles remain for the decontamination sequence. - var/uv_cycles = 6 - /// Cooldown for occupant breakout messages via relaymove() - var/message_cooldown - /// How long it takes to break out of the SSU. - var/breakout_time = 300 - -/obj/machinery/suit_storage_unit/standard_unit - suit_type = /obj/item/clothing/suit/space/eva - helmet_type = /obj/item/clothing/head/helmet/space/eva - mask_type = /obj/item/clothing/mask/breath - -/obj/machinery/suit_storage_unit/captain - suit_type = /obj/item/clothing/suit/space/hardsuit/swat/captain - mask_type = /obj/item/clothing/mask/gas/atmos/captain - storage_type = /obj/item/tank/jetpack/oxygen/captain - -/obj/machinery/suit_storage_unit/engine - suit_type = /obj/item/clothing/suit/space/hardsuit/engine - mask_type = /obj/item/clothing/mask/breath - -/obj/machinery/suit_storage_unit/atmos - suit_type = /obj/item/clothing/suit/space/hardsuit/engine/atmos - mask_type = /obj/item/clothing/mask/gas/atmos - storage_type = /obj/item/watertank/atmos - -/obj/machinery/suit_storage_unit/ce - suit_type = /obj/item/clothing/suit/space/hardsuit/engine/elite - mask_type = /obj/item/clothing/mask/breath - storage_type= /obj/item/clothing/shoes/magboots/advance - -/obj/machinery/suit_storage_unit/security - suit_type = /obj/item/clothing/suit/space/hardsuit/security - mask_type = /obj/item/clothing/mask/gas/sechailer - -/obj/machinery/suit_storage_unit/hos - suit_type = /obj/item/clothing/suit/space/hardsuit/security/hos - mask_type = /obj/item/clothing/mask/gas/sechailer - storage_type = /obj/item/tank/internals/oxygen - -/obj/machinery/suit_storage_unit/mining - suit_type = /obj/item/clothing/suit/hooded/explorer - mask_type = /obj/item/clothing/mask/gas/explorer - -/obj/machinery/suit_storage_unit/mining/eva - suit_type = /obj/item/clothing/suit/space/hardsuit/mining - mask_type = /obj/item/clothing/mask/breath - -/obj/machinery/suit_storage_unit/cmo - suit_type = /obj/item/clothing/suit/space/hardsuit/medical - mask_type = /obj/item/clothing/mask/breath - -/obj/machinery/suit_storage_unit/rd - suit_type = /obj/item/clothing/suit/space/hardsuit/rd - mask_type = /obj/item/clothing/mask/breath - -/obj/machinery/suit_storage_unit/syndicate - suit_type = /obj/item/clothing/suit/space/hardsuit/syndi - mask_type = /obj/item/clothing/mask/gas/syndicate - storage_type = /obj/item/tank/jetpack/oxygen/harness - -/obj/machinery/suit_storage_unit/ert/command - suit_type = /obj/item/clothing/suit/space/hardsuit/ert - mask_type = /obj/item/clothing/mask/breath - storage_type = /obj/item/tank/internals/emergency_oxygen/double - -/obj/machinery/suit_storage_unit/ert/security - suit_type = /obj/item/clothing/suit/space/hardsuit/ert/sec - mask_type = /obj/item/clothing/mask/breath - storage_type = /obj/item/tank/internals/emergency_oxygen/double - -/obj/machinery/suit_storage_unit/ert/engineer - suit_type = /obj/item/clothing/suit/space/hardsuit/ert/engi - mask_type = /obj/item/clothing/mask/breath - storage_type = /obj/item/tank/internals/emergency_oxygen/double - -/obj/machinery/suit_storage_unit/ert/medical - suit_type = /obj/item/clothing/suit/space/hardsuit/ert/med - mask_type = /obj/item/clothing/mask/breath - storage_type = /obj/item/tank/internals/emergency_oxygen/double - -/obj/machinery/suit_storage_unit/radsuit - name = "radiation suit storage unit" - suit_type = /obj/item/clothing/suit/radiation - helmet_type = /obj/item/clothing/head/radiation - storage_type = /obj/item/geiger_counter - -/obj/machinery/suit_storage_unit/open - state_open = TRUE - density = FALSE - -/obj/machinery/suit_storage_unit/Initialize() - . = ..() - wires = new /datum/wires/suit_storage_unit(src) - if(suit_type) - suit = new suit_type(src) - if(helmet_type) - helmet = new helmet_type(src) - if(mask_type) - mask = new mask_type(src) - if(storage_type) - storage = new storage_type(src) - update_icon() - -/obj/machinery/suit_storage_unit/Destroy() - QDEL_NULL(suit) - QDEL_NULL(helmet) - QDEL_NULL(mask) - QDEL_NULL(storage) - return ..() - -/obj/machinery/suit_storage_unit/update_overlays() - . = ..() - - if(uv) - if(uv_super) - . += "super" - else if(occupant) - . += "uvhuman" - else - . += "uv" - else if(state_open) - if(stat & BROKEN) - . += "broken" - else - . += "open" - if(suit) - . += "suit" - if(helmet) - . += "helm" - if(storage) - . += "storage" - else if(occupant) - . += "human" - -/obj/machinery/suit_storage_unit/power_change() - . = ..() - if(!is_operational() && state_open) - open_machine() - dump_contents() - update_icon() - -/obj/machinery/suit_storage_unit/dump_contents() - dropContents() - helmet = null - suit = null - mask = null - storage = null - occupant = null - -/obj/machinery/suit_storage_unit/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - open_machine() - dump_contents() - new /obj/item/stack/sheet/metal (loc, 2) - qdel(src) - -/obj/machinery/suit_storage_unit/MouseDrop_T(atom/A, mob/living/user) - if(!istype(user) || user.stat || !Adjacent(user) || !Adjacent(A) || !isliving(A)) - return - if(isliving(user)) - var/mob/living/L = user - if(!(L.mobility_flags & MOBILITY_STAND)) - return - var/mob/living/target = A - if(!state_open) - to_chat(user, "The unit's doors are shut!") - return - if(!is_operational()) - to_chat(user, "The unit is not operational!") - return - if(occupant || helmet || suit || storage) - to_chat(user, "It's too cluttered inside to fit in!") - return - - if(target == user) - user.visible_message("[user] starts squeezing into [src]!", "I start working your way into [src]...") - else - target.visible_message("[user] starts shoving [target] into [src]!", "[user] starts shoving you into [src]!") - - if(do_mob(user, target, 30)) - if(occupant || helmet || suit || storage) - return - if(target == user) - user.visible_message("[user] slips into [src] and closes the door behind [user.p_them()]!", "I slip into [src]'s cramped space and shut its door.") - else - target.visible_message("[user] pushes [target] into [src] and shuts its door!", "[user] shoves you into [src] and shuts the door!") - close_machine(target) - add_fingerprint(user) - -/** - * UV decontamination sequence. - * Duration is determined by the uv_cycles var. - * Effects determined by the uv_super var. - * * If FALSE, all atoms (and their contents) contained are cleared of radiation. If a mob is inside, they are burned every cycle. - * * If TRUE, all items contained are destroyed, and burn damage applied to the mob is increased. All wires will be cut at the end. - * All atoms still inside at the end of all cycles are ejected from the unit. -*/ -/obj/machinery/suit_storage_unit/proc/cook() - var/mob/living/mob_occupant = occupant - if(uv_cycles) - uv_cycles-- - uv = TRUE - locked = TRUE - update_icon() - if(occupant) - if(uv_super) - mob_occupant.adjustFireLoss(rand(20, 36)) - else - mob_occupant.adjustFireLoss(rand(10, 16)) - mob_occupant.emote("scream") - addtimer(CALLBACK(src, PROC_REF(cook)), 50) - else - uv_cycles = initial(uv_cycles) - uv = FALSE - locked = FALSE - if(uv_super) - visible_message("[src]'s door creaks open with a loud whining noise. A cloud of foul black smoke escapes from its chamber.") - playsound(src, 'sound/blank.ogg', 50, TRUE) - helmet = null - qdel(helmet) - suit = null - qdel(suit) // Delete everything but the occupant. - mask = null - qdel(mask) - storage = null - qdel(storage) - // The wires get damaged too. - wires.cut_all() - else - if(!occupant) - visible_message("[src]'s door slides open. The glowing yellow lights dim to a gentle green.") - else - visible_message("[src]'s door slides open, barraging you with the nauseating smell of charred flesh.") - mob_occupant.radiation = 0 - playsound(src, 'sound/blank.ogg', 25, TRUE) - var/list/things_to_clear = list() //Done this way since using GetAllContents on the SSU itself would include circuitry and such. - if(suit) - things_to_clear += suit - things_to_clear += suit.GetAllContents() - if(helmet) - things_to_clear += helmet - things_to_clear += helmet.GetAllContents() - if(mask) - things_to_clear += mask - things_to_clear += mask.GetAllContents() - if(storage) - things_to_clear += storage - things_to_clear += storage.GetAllContents() - if(occupant) - things_to_clear += occupant - things_to_clear += occupant.GetAllContents() - for(var/atom/movable/AM in things_to_clear) //Scorches away blood and forensic evidence, although the SSU itself is unaffected - SEND_SIGNAL(AM, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRONG) - var/datum/component/radioactive/contamination = AM.GetComponent(/datum/component/radioactive) - if(contamination) - qdel(contamination) - open_machine(FALSE) - if(occupant) - dump_contents() - -/obj/machinery/suit_storage_unit/proc/shock(mob/user, prb) - if(!prob(prb)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() - if(electrocute_mob(user, src, src, 1, TRUE)) - return 1 - -/obj/machinery/suit_storage_unit/relaymove(mob/user) - if(locked) - if(message_cooldown <= world.time) - message_cooldown = world.time + 50 - to_chat(user, "[src]'s door won't budge!") - return - open_machine() - dump_contents() - -/obj/machinery/suit_storage_unit/container_resist(mob/living/user) - if(!locked) - open_machine() - dump_contents() - return - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT - user.visible_message("I see [user] kicking against the doors of [src]!", \ - "I start kicking against the doors... (this will take about [DisplayTimeText(breakout_time)].)", \ - "I hear a thump from [src].") - if(do_after(user,(breakout_time), target = src)) - if(!user || user.stat != CONSCIOUS || user.loc != src ) - return - user.visible_message("[user] successfully broke out of [src]!", \ - "I successfully break out of [src]!") - open_machine() - dump_contents() - - add_fingerprint(user) - if(locked) - visible_message("I see [user] kicking against the doors of [src]!", \ - "I start kicking against the doors...") - addtimer(CALLBACK(src, PROC_REF(resist_open), user), 300) - else - open_machine() - dump_contents() - -/obj/machinery/suit_storage_unit/proc/resist_open(mob/user) - if(!state_open && occupant && (user in src) && user.stat == 0) // Check they're still here. - visible_message("I see [user] burst out of [src]!", \ - "I escape the cramped confines of [src]!") - open_machine() - -/obj/machinery/suit_storage_unit/attackby(obj/item/I, mob/user, params) - if(state_open && is_operational()) - if(istype(I, /obj/item/clothing/suit)) - if(suit) - to_chat(user, "The unit already contains a suit!.") - return - if(!user.transferItemToLoc(I, src)) - return - suit = I - else if(istype(I, /obj/item/clothing/head)) - if(helmet) - to_chat(user, "The unit already contains a helmet!") - return - if(!user.transferItemToLoc(I, src)) - return - helmet = I - else if(istype(I, /obj/item/clothing/mask)) - if(mask) - to_chat(user, "The unit already contains a mask!") - return - if(!user.transferItemToLoc(I, src)) - return - mask = I - else - if(storage) - to_chat(user, "The auxiliary storage compartment is full!") - return - if(!user.transferItemToLoc(I, src)) - return - storage = I - - visible_message("[user] inserts [I] into [src]", "I load [I] into [src].") - update_icon() - return - - if(panel_open && is_wire_tool(I)) - wires.interact(user) - return - if(!state_open) - if(default_deconstruction_screwdriver(user, "panel", "close", I)) - return - if(default_pry_open(I)) - dump_contents() - return - - return ..() - -/* ref tg-git issue #45036 - screwdriving it open while it's running a decontamination sequence without closing the panel prior to finish - causes the SSU to break due to state_open being set to TRUE at the end, and the panel becoming inaccessible. -*/ -/obj/machinery/suit_storage_unit/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/I) - if(!(flags_1 & NODECONSTRUCT_1) && I.tool_behaviour == TOOL_SCREWDRIVER && uv) - to_chat(user, "It might not be wise to fiddle with [src] while it's running...") - return TRUE - return ..() - - -/obj/machinery/suit_storage_unit/default_pry_open(obj/item/I)//needs to check if the storage is locked. - . = !(state_open || panel_open || is_operational() || locked || (flags_1 & NODECONSTRUCT_1)) && I.tool_behaviour == TOOL_CROWBAR - if(.) - I.play_tool_sound(src, 50) - visible_message("[usr] pries open \the [src].", "I pry open \the [src].") - open_machine() - -/obj/machinery/suit_storage_unit/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "suit_storage_unit", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/suit_storage_unit/ui_data() - var/list/data = list() - data["locked"] = locked - data["open"] = state_open - data["safeties"] = safeties - data["uv_active"] = uv - data["uv_super"] = uv_super - if(helmet) - data["helmet"] = helmet.name - else - data["helmet"] = null - if(suit) - data["suit"] = suit.name - else - data["suit"] = null - if(mask) - data["mask"] = mask.name - else - data["mask"] = null - if(storage) - data["storage"] = storage.name - else - data["storage"] = null - if(occupant) - data["occupied"] = TRUE - else - data["occupied"] = FALSE - return data - -/obj/machinery/suit_storage_unit/ui_act(action, params) - if(..() || uv) - return - switch(action) - if("door") - if(state_open) - close_machine() - else - open_machine(0) - if(occupant) - dump_contents() // Dump out contents if someone is in there. - . = TRUE - if("lock") - if(state_open) - return - locked = !locked - . = TRUE - if("uv") - if(occupant && safeties) - return - else if(!helmet && !mask && !suit && !storage && !occupant) - return - else - if(occupant) - var/mob/living/mob_occupant = occupant - to_chat(mob_occupant, "[src]'s confines grow warm, then hot, then scorching. You're being burned [!mob_occupant.stat ? "alive" : "away"]!") - cook() - . = TRUE - if("dispense") - if(!state_open) - return - - var/static/list/valid_items = list("helmet", "suit", "mask", "storage") - var/item_name = params["item"] - if(item_name in valid_items) - var/obj/item/I = vars[item_name] - vars[item_name] = null - if(I) - I.forceMove(loc) - . = TRUE - update_icon() diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm deleted file mode 100644 index 4909045983..0000000000 --- a/code/game/machinery/syndicatebeacon.dm +++ /dev/null @@ -1,139 +0,0 @@ -//////////////////////////////////////// -//Singularity beacon -//////////////////////////////////////// -/obj/machinery/power/singularity_beacon - name = "ominous beacon" - desc = "" - icon = 'icons/obj/singularity.dmi' - icon_state = "beacon0" - - anchored = FALSE - density = TRUE - layer = BELOW_MOB_LAYER //so people can't hide it and it's REALLY OBVIOUS - stat = 0 - verb_say = "states" - var/cooldown = 0 - - var/active = 0 - var/icontype = "beacon" - - -/obj/machinery/power/singularity_beacon/proc/Activate(mob/user = null) - if(surplus() < 1500) - if(user) - to_chat(user, "The connected wire doesn't have enough current.") - return - for(var/obj/singularity/singulo in GLOB.singularities) - if(singulo.z == z) - singulo.target = src - icon_state = "[icontype]1" - active = 1 - if(user) - to_chat(user, "I activate the beacon.") - - -/obj/machinery/power/singularity_beacon/proc/Deactivate(mob/user = null) - for(var/obj/singularity/singulo in GLOB.singularities) - if(singulo.target == src) - singulo.target = null - icon_state = "[icontype]0" - active = 0 - if(user) - to_chat(user, "I deactivate the beacon.") - - -/obj/machinery/power/singularity_beacon/attack_ai(mob/user) - return - - -/obj/machinery/power/singularity_beacon/attack_hand(mob/user) - . = ..() - if(.) - return - if(anchored) - return active ? Deactivate(user) : Activate(user) - else - to_chat(user, "I need to screw \the [src] to the floor first!") - -/obj/machinery/power/singularity_beacon/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_WRENCH) - if(active) - to_chat(user, "I need to deactivate \the [src] first!") - return - - if(anchored) - setAnchored(FALSE) - to_chat(user, "I unbolt \the [src] from the floor and detach it from the cable.") - disconnect_from_network() - return - else - if(!connect_to_network()) - to_chat(user, "\The [src] must be placed over an exposed, powered cable node!") - return - setAnchored(TRUE) - to_chat(user, "I bolt \the [src] to the floor and attach it to the cable.") - return - else if(W.tool_behaviour == TOOL_SCREWDRIVER) - user.visible_message( \ - "[user] messes with \the [src] for a bit.", \ - "I can't fit the screwdriver into \the [src]'s bolts! Try using a wrench.") - else - return ..() - -/obj/machinery/power/singularity_beacon/Destroy() - if(active) - Deactivate() - return ..() - -//stealth direct power usage -/obj/machinery/power/singularity_beacon/process() - if(!active) - return - - if(surplus() >= 1500) - add_load(1500) - if(cooldown <= world.time) - cooldown = world.time + 80 - for(var/obj/singularity/singulo in GLOB.singularities) - if(singulo.z == z) - say("[singulo] is now [get_dist(src,singulo)] standard lengths away to the [dir2text(get_dir(src,singulo))]") - else - Deactivate() - say("Insufficient charge detected - powering down") - - -/obj/machinery/power/singularity_beacon/syndicate - icontype = "beaconsynd" - icon_state = "beaconsynd0" - -// SINGULO BEACON SPAWNER -/obj/item/sbeacondrop - name = "suspicious beacon" - icon = 'icons/obj/device.dmi' - icon_state = "beacon" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - desc = "" - w_class = WEIGHT_CLASS_SMALL - var/droptype = /obj/machinery/power/singularity_beacon/syndicate - - -/obj/item/sbeacondrop/attack_self(mob/user) - if(user) - to_chat(user, "Locked In.") - new droptype( user.loc ) - playsound(src, 'sound/blank.ogg', 100, TRUE, TRUE) - qdel(src) - return - -/obj/item/sbeacondrop/bomb - desc = "" - droptype = /obj/machinery/syndicatebomb - -/obj/item/sbeacondrop/powersink - desc = "" - droptype = /obj/item/powersink - -/obj/item/sbeacondrop/clownbomb - desc = "" - droptype = /obj/machinery/syndicatebomb/badmin/clown diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm deleted file mode 100644 index a37e3778c4..0000000000 --- a/code/game/machinery/syndicatebomb.dm +++ /dev/null @@ -1,528 +0,0 @@ -#define BUTTON_COOLDOWN 60 // cant delay the bomb forever -#define BUTTON_DELAY 50 //five seconds - -/obj/machinery/syndicatebomb - icon = 'icons/obj/assemblies.dmi' - name = "syndicate bomb" - icon_state = "syndicate-bomb" - desc = "" - - anchored = FALSE - density = FALSE - layer = BELOW_MOB_LAYER //so people can't hide it and it's REALLY OBVIOUS - resistance_flags = FIRE_PROOF | ACID_PROOF - speed_process = TRUE - - interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_OFFLINE - - var/minimum_timer = 90 - var/timer_set = 90 - var/maximum_timer = 60000 - - var/can_unanchor = TRUE - - var/open_panel = FALSE //are the wires exposed? - var/active = FALSE //is the bomb counting down? - var/obj/item/bombcore/payload = /obj/item/bombcore - var/beepsound = 'sound/blank.ogg' - var/delayedbig = FALSE //delay wire pulsed? - var/delayedlittle = FALSE //activation wire pulsed? - var/obj/effect/countdown/syndicatebomb/countdown - - var/next_beep - var/detonation_timer - var/explode_now = FALSE - -/obj/machinery/syndicatebomb/proc/try_detonate(ignore_active = FALSE) - . = (payload in src) && (active || ignore_active) - if(.) - payload.detonate() - -/obj/machinery/syndicatebomb/obj_break() - if(!try_detonate()) - ..() - -/obj/machinery/syndicatebomb/obj_destruction() - if(!try_detonate()) - return ..() - -/obj/machinery/syndicatebomb/process() - if(!active) - STOP_PROCESSING(SSfastprocess, src) - detonation_timer = null - next_beep = null - countdown.stop() - if(payload in src) - payload.defuse() - return - - if(!isnull(next_beep) && (next_beep <= world.time)) - var/volume - switch(seconds_remaining()) - if(0 to 5) - volume = 50 - if(5 to 10) - volume = 40 - if(10 to 15) - volume = 30 - if(15 to 20) - volume = 20 - if(20 to 25) - volume = 10 - else - volume = 5 - playsound(loc, beepsound, volume, FALSE) - next_beep = world.time + 10 - - if(active && ((detonation_timer <= world.time) || explode_now)) - active = FALSE - timer_set = initial(timer_set) - update_icon() - try_detonate(TRUE) - -/obj/machinery/syndicatebomb/Initialize() - . = ..() - wires = new /datum/wires/syndicatebomb(src) - if(payload) - payload = new payload(src) - update_icon() - countdown = new(src) - STOP_PROCESSING(SSfastprocess, src) - -/obj/machinery/syndicatebomb/Destroy() - QDEL_NULL(wires) - QDEL_NULL(countdown) - STOP_PROCESSING(SSfastprocess, src) - return ..() - -/obj/machinery/syndicatebomb/examine(mob/user) - . = ..() - . += {"A digital display on it reads "[seconds_remaining()]"."} - -/obj/machinery/syndicatebomb/update_icon_state() - icon_state = "[initial(icon_state)][active ? "-active" : "-inactive"][open_panel ? "-wires" : ""]" - -/obj/machinery/syndicatebomb/proc/seconds_remaining() - if(active) - . = max(0, round((detonation_timer - world.time) / 10)) - else - . = timer_set - -/obj/machinery/syndicatebomb/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_WRENCH && can_unanchor) - if(!anchored) - if(!isturf(loc) || isspaceturf(loc)) - to_chat(user, "The bomb must be placed on solid ground to attach it.") - else - to_chat(user, "I firmly wrench the bomb to the floor.") - I.play_tool_sound(src) - setAnchored(TRUE) - if(active) - to_chat(user, "The bolts lock in place.") - else - if(!active) - to_chat(user, "I wrench the bomb from the floor.") - I.play_tool_sound(src) - setAnchored(FALSE) - else - to_chat(user, "The bolts are locked down!") - - else if(I.tool_behaviour == TOOL_SCREWDRIVER) - open_panel = !open_panel - update_icon() - to_chat(user, "I [open_panel ? "open" : "close"] the wire panel.") - - else if(is_wire_tool(I) && open_panel) - wires.interact(user) - - else if(I.tool_behaviour == TOOL_CROWBAR) - if(open_panel && wires.is_all_cut()) - if(payload) - to_chat(user, "I carefully pry out [payload].") - payload.forceMove(drop_location()) - payload = null - else - to_chat(user, "There isn't anything in here to remove!") - else if (open_panel) - to_chat(user, "The wires connecting the shell to the explosives are holding it down!") - else - to_chat(user, "The cover is screwed on, it won't pry off!") - else if(istype(I, /obj/item/bombcore)) - if(!payload) - if(!user.transferItemToLoc(I, src)) - return - payload = I - to_chat(user, "I place [payload] into [src].") - else - to_chat(user, "[payload] is already loaded into [src]! You'll have to remove it first.") - else if(I.tool_behaviour == TOOL_WELDER) - if(payload || !wires.is_all_cut() || !open_panel) - return - - if(!I.tool_start_check(user, amount=5)) //uses up 5 fuel - return - - to_chat(user, "I start to cut [src] apart...") - if(I.use_tool(src, user, 20, volume=50, amount=5)) //uses up 5 fuel - to_chat(user, "I cut [src] apart.") - new /obj/item/stack/sheet/plasteel( loc, 5) - qdel(src) - else - var/old_integ = obj_integrity - . = ..() - if((old_integ > obj_integrity) && active && (payload in src)) - to_chat(user, "That seems like a really bad idea...") - -/obj/machinery/syndicatebomb/interact(mob/user) - wires.interact(user) - if(!open_panel) - if(!active) - settings(user) - else if(anchored) - to_chat(user, "The bomb is bolted to the floor!") - -/obj/machinery/syndicatebomb/proc/activate() - active = TRUE - START_PROCESSING(SSfastprocess, src) - countdown.start() - next_beep = world.time + 10 - detonation_timer = world.time + (timer_set * 10) - playsound(loc, 'sound/blank.ogg', 30, TRUE) - notify_ghosts("\A [src] has been activated at [get_area(src)]!", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Bomb Planted") - -/obj/machinery/syndicatebomb/proc/settings(mob/user) - var/new_timer = input(user, "Please set the timer.", "Timer", "[timer_set]") as num|null - - if (isnull(new_timer)) - return - - if(in_range(src, user) && isliving(user)) //No running off and setting bombs from across the station - timer_set = CLAMP(new_timer, minimum_timer, maximum_timer) - loc.visible_message("[icon2html(src, viewers(src))] timer set for [timer_set] seconds.") - if(alert(user,"Would you like to start the countdown now?",,"Yes","No") == "Yes" && in_range(src, user) && isliving(user)) - if(!active) - visible_message("[icon2html(src, viewers(loc))] [timer_set] seconds until detonation, please clear the area.") - activate() - update_icon() - add_fingerprint(user) - - if(payload && !istype(payload, /obj/item/bombcore/training)) - log_bomber(user, "has primed a", src, "for detonation (Payload: [payload.name])") - payload.adminlog = "The [name] that [key_name(user)] had primed detonated!" - -///Bomb Subtypes/// - -/obj/machinery/syndicatebomb/training - name = "training bomb" - icon_state = "training-bomb" - desc = "" - payload = /obj/item/bombcore/training - -/obj/machinery/syndicatebomb/badmin - name = "generic summoning badmin bomb" - desc = "" - payload = /obj/item/bombcore/badmin/summon - -/obj/machinery/syndicatebomb/badmin/clown - name = "clown bomb" - icon_state = "clown-bomb" - desc = "" - payload = /obj/item/bombcore/badmin/summon/clown - beepsound = 'sound/blank.ogg' - -/obj/machinery/syndicatebomb/empty - name = "bomb" - icon_state = "base-bomb" - desc = "" - payload = null - open_panel = TRUE - timer_set = 120 - -/obj/machinery/syndicatebomb/empty/Initialize() - . = ..() - wires.cut_all() - -/obj/machinery/syndicatebomb/self_destruct - name = "self destruct device" - desc = "" - payload = /obj/item/bombcore/large - can_unanchor = FALSE - -///Bomb Cores/// - -/obj/item/bombcore - name = "bomb payload" - desc = "" - icon = 'icons/obj/assemblies.dmi' - icon_state = "bombcore" - item_state = "eshield0" - lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' - w_class = WEIGHT_CLASS_NORMAL - resistance_flags = FLAMMABLE //Burnable (but the casing isn't) - var/adminlog = null - var/range_heavy = 3 - var/range_medium = 9 - var/range_light = 17 - var/range_flame = 17 - -/obj/item/bombcore/ex_act(severity, target) // Little boom can chain a big boom. - detonate() - - -/obj/item/bombcore/burn() - detonate() - ..() - -/obj/item/bombcore/proc/detonate() - if(adminlog) - message_admins(adminlog) - log_game(adminlog) - explosion(src, range_heavy, range_medium, range_light, flame_range = range_flame) - if(loc && istype(loc, /obj/machinery/syndicatebomb/)) - qdel(loc) - qdel(src) - -/obj/item/bombcore/proc/defuse() -//Note: the machine's defusal is mostly done from the wires code, this is here if you want the core itself to do anything. - -///Bomb Core Subtypes/// - -/obj/item/bombcore/training - name = "dummy payload" - desc = "" - var/defusals = 0 - var/attempts = 0 - -/obj/item/bombcore/training/proc/reset() - var/obj/machinery/syndicatebomb/holder = loc - if(istype(holder)) - if(holder.wires) - holder.wires.repair() - holder.wires.shuffle_wires() - holder.delayedbig = FALSE - holder.delayedlittle = FALSE - holder.explode_now = FALSE - holder.update_icon() - holder.updateDialog() - STOP_PROCESSING(SSfastprocess, holder) - -/obj/item/bombcore/training/detonate() - var/obj/machinery/syndicatebomb/holder = loc - if(istype(holder)) - attempts++ - holder.loc.visible_message("[icon2html(holder, viewers(holder))] Alert: Bomb has detonated. Your score is now [defusals] for [attempts]. Resetting wires...") - reset() - else - qdel(src) - -/obj/item/bombcore/training/defuse() - var/obj/machinery/syndicatebomb/holder = loc - if(istype(holder)) - attempts++ - defusals++ - holder.loc.visible_message("[icon2html(holder, viewers(holder))] Alert: Bomb has been defused. Your score is now [defusals] for [attempts]! Resetting wires in 5 seconds...") - sleep(50) //Just in case someone is trying to remove the bomb core this gives them a little window to crowbar it out - if(istype(holder)) - reset() - -/obj/item/bombcore/badmin - name = "badmin payload" - desc = "" - -/obj/item/bombcore/badmin/defuse() //because we wouldn't want them being harvested by players - var/obj/machinery/syndicatebomb/B = loc - qdel(B) - qdel(src) - -/obj/item/bombcore/badmin/summon - var/summon_path = /obj/item/reagent_containers/food/snacks/cookie - var/amt_summon = 1 - -/obj/item/bombcore/badmin/summon/detonate() - var/obj/machinery/syndicatebomb/B = loc - spawn_and_random_walk(summon_path, src, amt_summon, walk_chance=50, admin_spawn=TRUE) - qdel(B) - qdel(src) - -/obj/item/bombcore/badmin/summon/clown - summon_path = /mob/living/simple_animal/hostile/retaliate/clown - amt_summon = 50 - -/obj/item/bombcore/badmin/summon/clown/defuse() - playsound(src, 'sound/blank.ogg', 50) - ..() - -/obj/item/bombcore/large - name = "large bomb payload" - range_heavy = 5 - range_medium = 10 - range_light = 20 - range_flame = 20 - -/obj/item/bombcore/miniature - name = "small bomb core" - w_class = WEIGHT_CLASS_SMALL - range_heavy = 1 - range_medium = 2 - range_light = 4 - range_flame = 2 - -/obj/item/bombcore/chemical - name = "chemical payload" - desc = "" - icon_state = "chemcore" - var/list/beakers = list() - var/max_beakers = 1 // Read on about grenade casing properties below - var/spread_range = 5 - var/temp_boost = 50 - var/time_release = 0 - -/obj/item/bombcore/chemical/detonate() - - if(time_release > 0) - var/total_volume = 0 - for(var/obj/item/reagent_containers/RC in beakers) - total_volume += RC.reagents.total_volume - - if(total_volume < time_release) // If it's empty, the detonation is complete. - if(loc && istype(loc, /obj/machinery/syndicatebomb/)) - qdel(loc) - qdel(src) - return - - var/fraction = time_release/total_volume - var/datum/reagents/reactants = new(time_release) - reactants.my_atom = src - for(var/obj/item/reagent_containers/RC in beakers) - RC.reagents.trans_to(reactants, RC.reagents.total_volume*fraction, 1, 1, 1) - chem_splash(get_turf(src), spread_range, list(reactants), temp_boost) - - // Detonate it again in one second, until it's out of juice. - addtimer(CALLBACK(src, PROC_REF(detonate)), 10) - - // If it's not a time release bomb, do normal explosion - - var/list/reactants = list() - - for(var/obj/item/reagent_containers/glass/G in beakers) - reactants += G.reagents - - for(var/obj/item/slime_extract/S in beakers) - if(S.Uses) - for(var/obj/item/reagent_containers/glass/G in beakers) - G.reagents.trans_to(S, G.reagents.total_volume) - - if(S && S.reagents && S.reagents.total_volume) - reactants += S.reagents - - if(!chem_splash(get_turf(src), spread_range, reactants, temp_boost)) - playsound(loc, 'sound/blank.ogg', 50, TRUE) - return // The Explosion didn't do anything. No need to log, or disappear. - - if(adminlog) - message_admins(adminlog) - log_game(adminlog) - - playsound(loc, 'sound/blank.ogg', 75, TRUE, 5) - - if(loc && istype(loc, /obj/machinery/syndicatebomb/)) - qdel(loc) - qdel(src) - -/obj/item/bombcore/chemical/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_CROWBAR && beakers.len > 0) - I.play_tool_sound(src) - for (var/obj/item/B in beakers) - B.forceMove(drop_location()) - beakers -= B - return - else if(istype(I, /obj/item/reagent_containers/glass/beaker) || istype(I, /obj/item/reagent_containers/glass/bottle)) - if(beakers.len < max_beakers) - if(!user.transferItemToLoc(I, src)) - return - beakers += I - to_chat(user, "I load [src] with [I].") - else - to_chat(user, "[I] won't fit! \The [src] can only hold up to [max_beakers] containers.") - return - ..() - -/obj/item/bombcore/chemical/CheckParts(list/parts_list) - ..() - // Using different grenade casings, causes the payload to have different properties. - var/obj/item/stock_parts/matter_bin/MB = locate(/obj/item/stock_parts/matter_bin) in src - if(MB) - max_beakers += MB.rating // max beakers = 2-5. - qdel(MB) - for(var/obj/item/grenade/chem_grenade/G in src) - - if(istype(G, /obj/item/grenade/chem_grenade/large)) - var/obj/item/grenade/chem_grenade/large/LG = G - max_beakers += 1 // Adding two large grenades only allows for a maximum of 7 beakers. - spread_range += 2 // Extra range, reduced density. - temp_boost += 50 // maximum of +150K blast using only large beakers. Not enough to self ignite. - for(var/obj/item/slime_extract/S in LG.beakers) // And slime cores. - if(beakers.len < max_beakers) - beakers += S - S.forceMove(src) - else - S.forceMove(drop_location()) - - if(istype(G, /obj/item/grenade/chem_grenade/cryo)) - spread_range -= 1 // Reduced range, but increased density. - temp_boost -= 100 // minimum of -150K blast. - - if(istype(G, /obj/item/grenade/chem_grenade/pyro)) - temp_boost += 150 // maximum of +350K blast, which is enough to self ignite. Which means a self igniting bomb can't take advantage of other grenade casing properties. Sorry? - - if(istype(G, /obj/item/grenade/chem_grenade/adv_release)) - time_release += 50 // A typical bomb, using basic beakers, will explode over 2-4 seconds. Using two will make the reaction last for less time, but it will be more dangerous overall. - - for(var/obj/item/reagent_containers/glass/B in G) - if(beakers.len < max_beakers) - beakers += B - B.forceMove(src) - else - B.forceMove(drop_location()) - - qdel(G) - - - - -///Syndicate Detonator (aka the big red button)/// - -/obj/item/syndicatedetonator - name = "big red button" - desc = "" - icon = 'icons/obj/assemblies.dmi' - icon_state = "bigred" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - w_class = WEIGHT_CLASS_TINY - var/timer = 0 - var/detonated = 0 - var/existent = 0 - -/obj/item/syndicatedetonator/attack_self(mob/user) - if(timer < world.time) - for(var/obj/machinery/syndicatebomb/B in GLOB.machines) - if(B.active) - B.detonation_timer = world.time + BUTTON_DELAY - detonated++ - existent++ - playsound(user, 'sound/blank.ogg', 20, TRUE) - to_chat(user, "[existent] found, [detonated] triggered.") - if(detonated) - detonated-- - log_bomber(user, "remotely detonated [detonated ? "syndicate bombs" : "a syndicate bomb"] using a", src) - detonated = 0 - existent = 0 - timer = world.time + BUTTON_COOLDOWN - - - -#undef BUTTON_COOLDOWN -#undef BUTTON_DELAY diff --git a/code/game/machinery/telecomms/broadcasting.dm b/code/game/machinery/telecomms/broadcasting.dm deleted file mode 100644 index 7a977174b0..0000000000 --- a/code/game/machinery/telecomms/broadcasting.dm +++ /dev/null @@ -1,209 +0,0 @@ - -/** - - Here is the big, bad function that broadcasts a message given the appropriate - parameters. - - @param M: - Reference to the mob/speaker, stored in signal.data["mob"] - - @param vmask: - Boolean value if the mob is "hiding" its identity via voice mask, stored in - signal.data["vmask"] - - @param vmessage: - If specified, will display this as the message; such as "chimpering" - for monkeys if the mob is not understood. Stored in signal.data["vmessage"]. - - @param radio: - Reference to the radio broadcasting the message, stored in signal.data["radio"] - - @param message: - The actual string message to display to mobs who understood mob M. Stored in - signal.data["message"] - - @param name: - The name to display when a mob receives the message. signal.data["name"] - - @param job: - The name job to display for the AI when it receives the message. signal.data["job"] - - @param realname: - The "real" name associated with the mob. signal.data["realname"] - - @param vname: - If specified, will use this name when mob M is not understood. signal.data["vname"] - - @param data: - If specified: - 1 -- Will only broadcast to intercoms - 2 -- Will only broadcast to intercoms and station-bounced radios - 3 -- Broadcast to syndicate frequency - 4 -- AI can't track down this person. Useful for imitation broadcasts where you can't find the actual mob - - @param compression: - If 0, the signal is audible - If nonzero, the signal may be partially inaudible or just complete gibberish. - - @param level: - The list of Z levels that the sending radio is broadcasting to. Having 0 in the list broadcasts on all levels - - @param freq - The frequency of the signal - -**/ - -// Subtype of /datum/signal with additional processing information. -/datum/signal/subspace - transmission_method = TRANSMISSION_SUBSPACE - var/server_type = /obj/machinery/telecomms/server - var/datum/signal/subspace/original - var/list/levels - -/datum/signal/subspace/New(data) - src.data = data || list() - -/datum/signal/subspace/proc/copy() - var/datum/signal/subspace/copy = new - copy.original = src - copy.source = source - copy.levels = levels - copy.frequency = frequency - copy.server_type = server_type - copy.transmission_method = transmission_method - copy.data = data.Copy() - return copy - -/datum/signal/subspace/proc/mark_done() - var/datum/signal/subspace/current = src - while (current) - current.data["done"] = TRUE - current = current.original - -/datum/signal/subspace/proc/send_to_receivers() - for(var/obj/machinery/telecomms/receiver/R in GLOB.telecomms_list) - R.receive_signal(src) - for(var/obj/machinery/telecomms/allinone/R in GLOB.telecomms_list) - R.receive_signal(src) - -/datum/signal/subspace/proc/broadcast() - set waitfor = FALSE - -// Vocal transmissions (i.e. using saycode). -// Despite "subspace" in the name, these transmissions can also be RADIO -// (intercoms and SBRs) or SUPERSPACE (CentCom). -/datum/signal/subspace/vocal - var/atom/movable/virtualspeaker/virt - var/datum/language/language - -/datum/signal/subspace/vocal/New( - obj/source, // the originating radio - frequency, // the frequency the signal is taking place on - atom/movable/virtualspeaker/speaker, // representation of the method's speaker - datum/language/language, // the langauge of the message - message, // the text content of the message - spans // the list of spans applied to the message -) - src.source = source - src.frequency = frequency - src.language = language - virt = speaker - var/datum/language/lang_instance = GLOB.language_datum_instances[language] - data = list( - "name" = speaker.name, - "job" = speaker.job, - "message" = message, - "compression" = rand(35, 65), - "language" = lang_instance.name, - "spans" = spans - ) - var/turf/T = get_turf(source) - levels = list(T.z) - -/datum/signal/subspace/vocal/copy() - var/datum/signal/subspace/vocal/copy = new(source, frequency, virt, language) - copy.original = src - copy.data = data.Copy() - copy.levels = levels - return copy - -// This is the meat function for making radios hear vocal transmissions. -/datum/signal/subspace/vocal/broadcast() - set waitfor = FALSE - - // Perform final composition steps on the message. - var/message = copytext(data["message"], 1, MAX_BROADCAST_LEN) - if(!message) - return - var/compression = data["compression"] - if(compression > 0) - message = Gibberish(message, compression >= 30) - - // Assemble the list of radios - var/list/radios = list() - switch (transmission_method) - if (TRANSMISSION_SUBSPACE) - // Reaches any radios on the levels - for(var/obj/item/radio/R in GLOB.all_radios["[frequency]"]) - if(R.can_receive(frequency, levels)) - radios += R - - // Syndicate radios can hear all well-known radio channels - if (num2text(frequency) in GLOB.reverseradiochannels) - for(var/obj/item/radio/R in GLOB.all_radios["[FREQ_SYNDICATE]"]) - if(R.can_receive(FREQ_SYNDICATE, list(R.z))) - radios |= R - - if (TRANSMISSION_RADIO) - // Only radios not currently in subspace mode - for(var/obj/item/radio/R in GLOB.all_radios["[frequency]"]) - if(!R.subspace_transmission && R.can_receive(frequency, levels)) - radios += R - - if (TRANSMISSION_SUPERSPACE) - // Only radios which are independent - for(var/obj/item/radio/R in GLOB.all_radios["[frequency]"]) - if(R.independent && R.can_receive(frequency, levels)) - radios += R - - // From the list of radios, find all mobs who can hear those. - var/list/receive = get_mobs_in_radio_ranges(radios) - - // Cut out mobs with clients who are admins and have radio chatter disabled. - for(var/mob/R in receive) - if (R.client && R.client.holder && !(R.client.prefs.chat_toggles & CHAT_RADIO)) - receive -= R - - // Add observers who have ghost radio enabled. - for(var/mob/dead/observer/M in GLOB.player_list) - if(M.client.prefs.chat_toggles & CHAT_GHOSTRADIO) - receive |= M - - // Render the message and have everybody hear it. - // Always call this on the virtualspeaker to avoid issues. - var/spans = data["spans"] - var/rendered = virt.compose_message(virt, language, message, frequency, spans) - for(var/atom/movable/hearer in receive) - hearer.Hear(rendered, virt, language, message, frequency, spans) - - // This following recording is intended for research and feedback in the use of department radio channels - if(length(receive)) - SSblackbox.LogBroadcast(frequency) - - var/spans_part = "" - if(length(spans)) - spans_part = "(spans:" - for(var/S in spans) - spans_part = "[spans_part] [S]" - spans_part = "[spans_part] ) " - - var/lang_name = data["language"] - var/log_text = "\[[get_radio_name(frequency)]\] [spans_part]\"[message]\" (language: [lang_name])" - - var/mob/source_mob = virt.source - if(istype(source_mob)) - source_mob.log_message(log_text, LOG_TELECOMMS) - else - log_telecomms("[virt.source] [log_text] [loc_name(get_turf(virt.source))]") - - QDEL_IN(virt, 50) // Make extra sure the virtualspeaker gets qdeleted diff --git a/code/game/machinery/telecomms/computers/logbrowser.dm b/code/game/machinery/telecomms/computers/logbrowser.dm deleted file mode 100644 index b397f7e0cd..0000000000 --- a/code/game/machinery/telecomms/computers/logbrowser.dm +++ /dev/null @@ -1,215 +0,0 @@ - - -/obj/machinery/computer/telecomms/server - name = "telecommunications server monitoring console" - icon_screen = "comm_logs" - desc = "" - - var/screen = 0 // the screen number: - var/list/servers = list() // the servers located by the computer - var/obj/machinery/telecomms/server/SelectedServer - - var/network = "NULL" // the network to probe - var/temp = "" // temporary feedback messages - - var/universal_translate = 0 // set to 1 if it can translate nonhuman speech - - req_access = list(ACCESS_TCOMSAT) - circuit = /obj/item/circuitboard/computer/comm_server - -/obj/machinery/computer/telecomms/server/ui_interact(mob/user) - . = ..() - var/dat = "Telecommunication Server Monitor
          Telecommunications Server Monitor
          " - - switch(screen) - - - // --- Main Menu --- - - if(0) - dat += "
          [temp]
          " - dat += "
          Current Network: [network]
          " - if(servers.len) - dat += "
          Detected Telecommunication Servers:
            " - for(var/obj/machinery/telecomms/T in servers) - dat += "
          • [REF(T)] [T.name] ([T.id])
          • " - dat += "
          " - dat += "
          \[Flush Buffer\]" - - else - dat += "
          No servers detected. Scan for servers: \[Scan\]" - - - // --- Viewing Server --- - - if(1) - dat += "
          [temp]
          " - dat += "
          \[Main Menu\] \[Refresh\]
          " - dat += "
          Current Network: [network]" - dat += "
          Selected Server: [SelectedServer.id]" - - if(SelectedServer.totaltraffic >= 1024) - dat += "
          Total recorded traffic: [round(SelectedServer.totaltraffic / 1024)] Terrabytes

          " - else - dat += "
          Total recorded traffic: [SelectedServer.totaltraffic] Gigabytes

          " - - dat += "Stored Logs:
            " - - var/i = 0 - for(var/datum/comm_log_entry/C in SelectedServer.log_entries) - i++ - - - // If the log is a speech file - if(C.input_type == "Speech File") - dat += "
          1. [C.name] \[X\]
            " - - // -- Determine race of orator -- - - var/mobtype = C.parameters["mobtype"] - var/race // The actual race of the mob - - if(ispath(mobtype, /mob/living/carbon/human) || ispath(mobtype, /mob/living/brain)) - race = "Humanoid" - - // NT knows a lot about slimes, but not aliens. Can identify slimes - else if(ispath(mobtype, /mob/living/simple_animal/slime)) - race = "Slime" - - else if(ispath(mobtype, /mob/living/carbon/monkey)) - race = "Monkey" - - // sometimes M gets deleted prematurely for AIs... just check the job - else if(ispath(mobtype, /mob/living/silicon) || C.parameters["job"] == "AI") - race = "Artificial Life" - - else if(isobj(mobtype)) - race = "Machinery" - - else if(ispath(mobtype, /mob/living/simple_animal)) - race = "Domestic Animal" - - else - race = "Unidentifiable" - - dat += "Data type: [C.input_type]
            " - dat += "Source: [C.parameters["name"]] (Job: [C.parameters["job"]])
            " - dat += "Class: [race]
            " - var/message = C.parameters["message"] - var/language = C.parameters["language"] - - // based on [/atom/movable/proc/lang_treat] - if (universal_translate || user.has_language(language)) - message = "\"[message]\"" - else if (!user.has_language(language)) - var/datum/language/D = GLOB.language_datum_instances[language] - message = "\"[D.scramble(message)]\"" - else if (language) - message = "(unintelligible)" - - dat += "Contents: [message]
            " - dat += "

          2. " - - else if(C.input_type == "Execution Error") - dat += "
          3. [C.name] \[X\]
            " - dat += "Error: \"[C.parameters["message"]]\"
            " - dat += "

          4. " - - else - dat += "
          5. [C.name] \[X\]
            " - dat += "Data type: [C.input_type]
            " - dat += "Contents: (unintelligible)
            " - dat += "

          6. " - - - dat += "
          " - - - - user << browse(dat, "window=comm_monitor;size=575x400") - onclose(user, "server_control") - - temp = "" - return - - -/obj/machinery/computer/telecomms/server/Topic(href, href_list) - if(..()) - return - - - add_fingerprint(usr) - usr.set_machine(src) - - if(href_list["viewserver"]) - screen = 1 - for(var/obj/machinery/telecomms/T in servers) - if(T.id == href_list["viewserver"]) - SelectedServer = T - break - - if(href_list["operation"]) - switch(href_list["operation"]) - - if("release") - servers = list() - screen = 0 - - if("mainmenu") - screen = 0 - - if("scan") - if(servers.len > 0) - temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -" - - else - for(var/obj/machinery/telecomms/server/T in urange(25, src)) - if(T.network == network) - servers.Add(T) - - if(!servers.len) - temp = "- FAILED: UNABLE TO LOCATE SERVERS IN \[[network]\] -" - else - temp = "- [servers.len] SERVERS PROBED & BUFFERED -" - - screen = 0 - - if(href_list["delete"]) - - if(!src.allowed(usr) && !(obj_flags & EMAGGED)) - to_chat(usr, "ACCESS DENIED.") - return - - if(SelectedServer) - - var/datum/comm_log_entry/D = SelectedServer.log_entries[text2num(href_list["delete"])] - - temp = "- DELETED ENTRY: [D.name] -" - - SelectedServer.log_entries.Remove(D) - qdel(D) - - else - temp = "- FAILED: NO SELECTED MACHINE -" - - if(href_list["network"]) - - var/newnet = stripped_input(usr, "Which network do you want to view?", "Comm Monitor", network) - - if(newnet && ((usr in range(1, src)) || issilicon(usr))) - if(length(newnet) > 15) - temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -" - - else - - network = newnet - screen = 0 - servers = list() - temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -" - - updateUsrDialog() - return - -/obj/machinery/computer/telecomms/server/attackby() - . = ..() - updateUsrDialog() diff --git a/code/game/machinery/telecomms/computers/message.dm b/code/game/machinery/telecomms/computers/message.dm deleted file mode 100644 index 1607776775..0000000000 --- a/code/game/machinery/telecomms/computers/message.dm +++ /dev/null @@ -1,475 +0,0 @@ -/* - The monitoring computer for the messaging server. - Lets you read PDA and request console messages. -*/ - -#define LINKED_SERVER_NONRESPONSIVE (!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN))) - -#define MSG_MON_SCREEN_MAIN 0 -#define MSG_MON_SCREEN_LOGS 1 -#define MSG_MON_SCREEN_HACKED 2 -#define MSG_MON_SCREEN_CUSTOM_MSG 3 -#define MSG_MON_SCREEN_REQUEST_LOGS 4 - -// The monitor itself. -/obj/machinery/computer/message_monitor - name = "message monitor console" - desc = "" - icon_screen = "comm_logs" - circuit = /obj/item/circuitboard/computer/message_monitor - //Server linked to. - var/obj/machinery/telecomms/message_server/linkedServer = null - //Sparks effect - For emag - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread - //Messages - Saves me time if I want to change something. - var/noserver = "ALERT: No server detected." - var/incorrectkey = "ALERT: Incorrect decryption key!" - var/defaultmsg = "Welcome. Please select an option." - var/rebootmsg = "%$&(£: Critical %$$@ Error // !RestArting! - ?pLeaSe wAit!" - //Computer properties - var/screen = MSG_MON_SCREEN_MAIN // 0 = Main menu, 1 = Message Logs, 2 = Hacked screen, 3 = Custom Message - var/hacking = FALSE // Is it being hacked into by the AI/Cyborg - var/message = "System bootup complete. Please select an option." // The message that shows on the main menu. - var/auth = FALSE // Are they authenticated? - var/optioncount = 7 - // Custom Message Properties - var/customsender = "System Administrator" - var/obj/item/pda/customrecepient = null - var/customjob = "Admin" - var/custommessage = "This is a test, please ignore." - - light_color = LIGHT_COLOR_GREEN - -/obj/machinery/computer/message_monitor/attackby(obj/item/O, mob/living/user, params) - if(O.tool_behaviour == TOOL_SCREWDRIVER && (obj_flags & EMAGGED)) - //Stops people from just unscrewing the monitor and putting it back to get the console working again. - to_chat(user, "It is too hot to mess with!") - else - return ..() - -/obj/machinery/computer/message_monitor/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - if(!isnull(linkedServer)) - obj_flags |= EMAGGED - screen = MSG_MON_SCREEN_HACKED - spark_system.set_up(5, 0, src) - spark_system.start() - var/obj/item/paper/monitorkey/MK = new(loc, linkedServer) - // Will help make emagging the console not so easy to get away with. - MK.info += "

          £%@%(*$%&(£&?*(%&£/{}" - var/time = 100 * length(linkedServer.decryptkey) - addtimer(CALLBACK(src, PROC_REF(UnmagConsole)), time) - message = rebootmsg - else - to_chat(user, "A no server error appears on the screen.") - -/obj/machinery/computer/message_monitor/New() - ..() - GLOB.telecomms_list += src - -/obj/machinery/computer/message_monitor/Initialize() - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/computer/message_monitor/LateInitialize() - //Is the server isn't linked to a server, and there's a server available, default it to the first one in the list. - if(!linkedServer) - for(var/obj/machinery/telecomms/message_server/S in GLOB.telecomms_list) - linkedServer = S - break - -/obj/machinery/computer/message_monitor/Destroy() - GLOB.telecomms_list -= src - return ..() - -/obj/machinery/computer/message_monitor/ui_interact(mob/living/user) - . = ..() - //If the computer is being hacked or is emagged, display the reboot message. - if(hacking || (obj_flags & EMAGGED)) - message = rebootmsg - var/dat = "
          " - - if(auth) - dat += "

          \[Authenticated\] /" - dat += " Server Power: [linkedServer && linkedServer.on ? "\[On\]":"\[Off\]"]

          " - else - dat += "

          \[Unauthenticated\] /" - dat += " Server Power: [linkedServer && linkedServer.on ? "\[On\]":"\[Off\]"]

          " - - if(hacking || (obj_flags & EMAGGED)) - screen = MSG_MON_SCREEN_HACKED - else if(!auth || LINKED_SERVER_NONRESPONSIVE) - if(LINKED_SERVER_NONRESPONSIVE) - message = noserver - screen = MSG_MON_SCREEN_MAIN - - switch(screen) - //Main menu - if(MSG_MON_SCREEN_MAIN) - // = TAB - var/i = 0 - dat += "
          [++i]. Link To A Server
          " - if(auth) - if(LINKED_SERVER_NONRESPONSIVE) - dat += "
          ERROR: Server not found!
          " - else - dat += "
          [++i]. View Message Logs
          " - dat += "
          [++i]. View Request Console Logs
          " - dat += "
          [++i]. Clear Message Logs
          " - dat += "
          [++i]. Clear Request Console Logs
          " - dat += "
          [++i]. Set Custom Key
          " - dat += "
          [++i]. Send Admin Message
          " - else - for(var/n = ++i; n <= optioncount; n++) - dat += "
          [n]. ---------------
          " - var/mob/living/silicon/S = usr - if(istype(S) && S.hack_software) - //Malf/Traitor AIs can bruteforce into the system to gain the Key. - dat += "
          *&@#. Bruteforce Key
          " - else - dat += "
          " - - //Bottom message - if(!auth) - dat += "

          Please authenticate with the server in order to show additional options." - else - dat += "

          Reg, #514 forbids sending messages to a Head of Staff containing Erotic Rendering Properties." - - //Message Logs - if(MSG_MON_SCREEN_LOGS) - var/index = 0 - dat += "
          Back - Refresh

          " - dat += "" - for(var/datum/data_pda_msg/pda in linkedServer.pda_msgs) - index++ - if(index > 3000) - break - // Del - Sender - Recepient - Message - // X - Al Green - Your Mom - WHAT UP!? - dat += "" - dat += "
          XSenderRecipientMessage
          X
          [pda.sender][pda.recipient][pda.message][pda.picture ? " (Photo)":""]
          " - //Hacking screen. - if(MSG_MON_SCREEN_HACKED) - if(isAI(user) || iscyborg(user)) - dat += "Brute-forcing for server key.
          It will take 20 seconds for every character that the password has." - dat += "In the meantime, this console can reveal your true intentions if you let someone access it. Make sure no humans enter the room during that time." - else - //It's the same message as the one above but in binary. Because robots understand binary and humans don't... well I thought it was clever. - dat += {"01000010011100100111010101110100011001010010110
          - 10110011001101111011100100110001101101001011011100110011
          - 10010000001100110011011110111001000100000011100110110010
          - 10111001001110110011001010111001000100000011010110110010
          - 10111100100101110001000000100100101110100001000000111011
          - 10110100101101100011011000010000001110100011000010110101
          - 10110010100100000001100100011000000100000011100110110010
          - 10110001101101111011011100110010001110011001000000110011
          - 00110111101110010001000000110010101110110011001010111001
          - 00111100100100000011000110110100001100001011100100110000
          - 10110001101110100011001010111001000100000011101000110100
          - 00110000101110100001000000111010001101000011001010010000
          - 00111000001100001011100110111001101110111011011110111001
          - 00110010000100000011010000110000101110011001011100010000
          - 00100100101101110001000000111010001101000011001010010000
          - 00110110101100101011000010110111001110100011010010110110
          - 10110010100101100001000000111010001101000011010010111001
          - 10010000001100011011011110110111001110011011011110110110
          - 00110010100100000011000110110000101101110001000000111001
          - 00110010101110110011001010110000101101100001000000111100
          - 10110111101110101011100100010000001110100011100100111010
          - 10110010100100000011010010110111001110100011001010110111
          - 00111010001101001011011110110111001110011001000000110100
          - 10110011000100000011110010110111101110101001000000110110
          - 00110010101110100001000000111001101101111011011010110010
          - 10110111101101110011001010010000001100001011000110110001
          - 10110010101110011011100110010000001101001011101000010111
          - 00010000001001101011000010110101101100101001000000111001
          - 10111010101110010011001010010000001101110011011110010000
          - 00110100001110101011011010110000101101110011100110010000
          - 00110010101101110011101000110010101110010001000000111010
          - 00110100001100101001000000111001001101111011011110110110
          - 10010000001100100011101010111001001101001011011100110011
          - 10010000001110100011010000110000101110100001000000111010
          - 001101001011011010110010100101110"} - - //Fake messages - if(MSG_MON_SCREEN_CUSTOM_MSG) - dat += "
          Back - Reset

          " - - dat += {" - - - - "} - //Sender - Sender's Job - Recepient - Message - //Al Green- Your Dad - Your Mom - WHAT UP!? - - dat += {" - - - "} - dat += "
          SenderSender's JobRecipientMessage
          [customsender][customjob][customrecepient ? customrecepient.owner : "NONE"][custommessage]

          Send" - - //Request Console Logs - if(MSG_MON_SCREEN_REQUEST_LOGS) - - var/index = 0 - /* data_rc_msg - X - 5% - var/rec_dpt = "Unspecified" //name of the person - 15% - var/send_dpt = "Unspecified" //name of the sender- 15% - var/message = "Blank" //transferred message - 300px - var/stamp = "Unstamped" - 15% - var/id_auth = "Unauthenticated" - 15% - var/priority = "Normal" - 10% - */ - dat += "
          Back - Refresh

          " - dat += {" - "} - for(var/datum/data_rc_msg/rc in linkedServer.rc_msgs) - index++ - if(index > 3000) - break - // Del - Sender - Recepient - Message - // X - Al Green - Your Mom - WHAT UP!? - dat += {" - "} - dat += "
          XSending Dep.Receiving Dep.MessageStampID Auth.Priority.
          X
          [rc.send_dpt][rc.rec_dpt][rc.message][rc.stamp][rc.id_auth][rc.priority]
          " - - message = defaultmsg - var/datum/browser/popup = new(user, "hologram_console", name, 700, 700) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - popup.open() - -/obj/machinery/computer/message_monitor/proc/BruteForce(mob/user) - if(isnull(linkedServer)) - to_chat(user, "Could not complete brute-force: Linked Server Disconnected!") - else - var/currentKey = linkedServer.decryptkey - to_chat(user, "Brute-force completed! The key is '[currentKey]'.") - hacking = FALSE - screen = MSG_MON_SCREEN_MAIN // Return the screen back to normal - -/obj/machinery/computer/message_monitor/proc/UnmagConsole() - obj_flags &= ~EMAGGED - -/obj/machinery/computer/message_monitor/proc/ResetMessage() - customsender = "System Administrator" - customrecepient = null - custommessage = "This is a test, please ignore." - customjob = "Admin" - -/obj/machinery/computer/message_monitor/Topic(href, href_list) - if(..()) - return - - if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr)) - //Authenticate - if (href_list["auth"]) - if(LINKED_SERVER_NONRESPONSIVE) - message = noserver - else if(auth) - auth = FALSE - screen = MSG_MON_SCREEN_MAIN - else - var/dkey = trim(input(usr, "Please enter the decryption key.") as text|null) - if(dkey && dkey != "") - if(linkedServer.decryptkey == dkey) - auth = TRUE - else - message = incorrectkey - - //Turn the server on/off. - if (href_list["active"]) - if(LINKED_SERVER_NONRESPONSIVE) - message = noserver - else if(auth) - linkedServer.toggled = !linkedServer.toggled - //Find a server - if (href_list["find"]) - var/list/message_servers = list() - for (var/obj/machinery/telecomms/message_server/M in GLOB.telecomms_list) - message_servers += M - - if(message_servers.len > 1) - linkedServer = input(usr, "Please select a server.", "Select a server.", null) as null|anything in message_servers - message = "NOTICE: Server selected." - else if(message_servers.len > 0) - linkedServer = message_servers[1] - message = "NOTICE: Only Single Server Detected - Server selected." - else - message = noserver - - //View the logs - KEY REQUIRED - if (href_list["view_logs"]) - if(LINKED_SERVER_NONRESPONSIVE) - message = noserver - else if(auth) - screen = MSG_MON_SCREEN_LOGS - - //Clears the logs - KEY REQUIRED - if (href_list["clear_logs"]) - if(LINKED_SERVER_NONRESPONSIVE) - message = noserver - else if(auth) - linkedServer.pda_msgs = list() - message = "NOTICE: Logs cleared." - //Clears the request console logs - KEY REQUIRED - if (href_list["clear_requests"]) - if(LINKED_SERVER_NONRESPONSIVE) - message = noserver - else if(auth) - linkedServer.rc_msgs = list() - message = "NOTICE: Logs cleared." - //Change the password - KEY REQUIRED - if (href_list["pass"]) - if(LINKED_SERVER_NONRESPONSIVE) - message = noserver - else if(auth) - var/dkey = stripped_input(usr, "Please enter the decryption key.") - if(dkey && dkey != "") - if(linkedServer.decryptkey == dkey) - var/newkey = stripped_input(usr,"Please enter the new key (3 - 16 characters max):") - if(length(newkey) <= 3) - message = "NOTICE: Decryption key too short!" - else if(length(newkey) > 16) - message = "NOTICE: Decryption key too long!" - else if(newkey && newkey != "") - linkedServer.decryptkey = newkey - message = "NOTICE: Decryption key set." - else - message = incorrectkey - - //Hack the Console to get the password - if (href_list["hack"]) - var/mob/living/silicon/S = usr - if(istype(S) && S.hack_software) - hacking = TRUE - screen = MSG_MON_SCREEN_HACKED - //Time it takes to bruteforce is dependant on the password length. - spawn(100*length(linkedServer.decryptkey)) - if(src && linkedServer && usr) - BruteForce(usr) - //Delete the log. - if (href_list["delete_logs"]) - //Are they on the view logs screen? - if(screen == MSG_MON_SCREEN_LOGS) - if(LINKED_SERVER_NONRESPONSIVE) - message = noserver - else //if(istype(href_list["delete_logs"], /datum/data_pda_msg)) - linkedServer.pda_msgs -= locate(href_list["delete_logs"]) in linkedServer.pda_msgs - message = "NOTICE: Log Deleted!" - //Delete the request console log. - if (href_list["delete_requests"]) - //Are they on the view logs screen? - if(screen == MSG_MON_SCREEN_REQUEST_LOGS) - if(LINKED_SERVER_NONRESPONSIVE) - message = noserver - else //if(istype(href_list["delete_logs"], /datum/data_pda_msg)) - linkedServer.rc_msgs -= locate(href_list["delete_requests"]) in linkedServer.rc_msgs - message = "NOTICE: Log Deleted!" - //Create a custom message - if (href_list["msg"]) - if(LINKED_SERVER_NONRESPONSIVE) - message = noserver - else if(auth) - screen = MSG_MON_SCREEN_CUSTOM_MSG - //Fake messaging selection - KEY REQUIRED - if (href_list["select"]) - if(LINKED_SERVER_NONRESPONSIVE) - message = noserver - screen = MSG_MON_SCREEN_MAIN - else - switch(href_list["select"]) - - //Reset - if("Reset") - ResetMessage() - - //Select Your Name - if("Sender") - customsender = stripped_input(usr, "Please enter the sender's name.") || customsender - - //Select Receiver - if("Recepient") - //Get out list of viable PDAs - var/list/obj/item/pda/sendPDAs = get_viewable_pdas() - if(GLOB.PDAs && GLOB.PDAs.len > 0) - customrecepient = input(usr, "Select a PDA from the list.") as null|anything in sendPDAs - else - customrecepient = null - - //Enter custom job - if("RecJob") - customjob = stripped_input(usr, "Please enter the sender's job.") || customjob - - //Enter message - if("Message") - custommessage = stripped_input(usr, "Please enter your message.") || custommessage - - //Send message - if("Send") - if(isnull(customsender) || customsender == "") - customsender = "UNKNOWN" - - if(isnull(customrecepient)) - message = "NOTICE: No recepient selected!" - return attack_hand(usr) - - if(isnull(custommessage) || custommessage == "") - message = "NOTICE: No message entered!" - return attack_hand(usr) - - var/datum/signal/subspace/messaging/pda/signal = new(src, list( - "name" = "[customsender]", - "job" = "[customjob]", - "message" = custommessage, - "targets" = list("[customrecepient.owner] ([customrecepient.ownjob])") - )) - // this will log the signal and transmit it to the target - linkedServer.receive_information(signal, null) - usr.log_message("(PDA: [name] | [usr.real_name]) sent \"[custommessage]\" to [signal.format_target()]", LOG_PDA) - - - //Request Console Logs - KEY REQUIRED - if(href_list["view_requests"]) - if(LINKED_SERVER_NONRESPONSIVE) - message = noserver - else if(auth) - screen = MSG_MON_SCREEN_REQUEST_LOGS - - if (href_list["back"]) - screen = MSG_MON_SCREEN_MAIN - - return attack_hand(usr) - -#undef MSG_MON_SCREEN_MAIN -#undef MSG_MON_SCREEN_LOGS -#undef MSG_MON_SCREEN_HACKED -#undef MSG_MON_SCREEN_CUSTOM_MSG -#undef MSG_MON_SCREEN_REQUEST_LOGS - -#undef LINKED_SERVER_NONRESPONSIVE - -/obj/item/paper/monitorkey - name = "monitor decryption key" - -/obj/item/paper/monitorkey/Initialize(mapload, obj/machinery/telecomms/message_server/server) - ..() - if (server) - print(server) - return INITIALIZE_HINT_NORMAL - else - return INITIALIZE_HINT_LATELOAD - -/obj/item/paper/monitorkey/proc/print(obj/machinery/telecomms/message_server/server) - info = "

          Daily Key Reset


          The new message monitor key is '[server.decryptkey]'.
          Please keep this a secret and away from the clown.
          If necessary, change the password to a more secure one." - info_links = info - add_overlay("paper_words") - -/obj/item/paper/monitorkey/LateInitialize() - for (var/obj/machinery/telecomms/message_server/preset/server in GLOB.telecomms_list) - if (server.decryptkey) - print(server) - break diff --git a/code/game/machinery/telecomms/computers/telemonitor.dm b/code/game/machinery/telecomms/computers/telemonitor.dm deleted file mode 100644 index 17a662e5d2..0000000000 --- a/code/game/machinery/telecomms/computers/telemonitor.dm +++ /dev/null @@ -1,126 +0,0 @@ - -/* - Telecomms monitor tracks the overall trafficing of a telecommunications network - and displays a heirarchy of linked machines. -*/ - - -/obj/machinery/computer/telecomms/monitor - name = "telecommunications monitoring console" - icon_screen = "comm_monitor" - desc = "" - - var/screen = 0 // the screen number: - var/list/machinelist = list() // the machines located by the computer - var/obj/machinery/telecomms/SelectedMachine - - var/network = "NULL" // the network to probe - - var/temp = "" // temporary feedback messages - circuit = /obj/item/circuitboard/computer/comm_monitor - -/obj/machinery/computer/telecomms/monitor/ui_interact(mob/user) - . = ..() - var/dat = "Telecommunications Monitor
          Telecommunications Monitor
          " - - switch(screen) - - - // --- Main Menu --- - - if(0) - dat += "
          [temp]

          " - dat += "
          Current Network: [network]
          " - if(machinelist.len) - dat += "
          Detected Network Entities:
            " - for(var/obj/machinery/telecomms/T in machinelist) - dat += "
          • [REF(T)] [T.name] ([T.id])
          • " - dat += "
          " - dat += "
          \[Flush Buffer\]" - else - dat += "\[Probe Network\]" - - - // --- Viewing Machine --- - - if(1) - dat += "
          [temp]
          " - dat += "
          \[Main Menu\]
          " - dat += "
          Current Network: [network]
          " - dat += "Selected Network Entity: [SelectedMachine.name] ([SelectedMachine.id])
          " - dat += "Linked Entities:
            " - for(var/obj/machinery/telecomms/T in SelectedMachine.links) - if(!T.hide) - dat += "
          1. [REF(T.id)] [T.name] ([T.id])
          2. " - dat += "
          " - - - - user << browse(dat, "window=comm_monitor;size=575x400") - onclose(user, "server_control") - - temp = "" - return - - -/obj/machinery/computer/telecomms/monitor/Topic(href, href_list) - if(..()) - return - - - add_fingerprint(usr) - usr.set_machine(src) - - if(href_list["viewmachine"]) - screen = 1 - for(var/obj/machinery/telecomms/T in machinelist) - if(T.id == href_list["viewmachine"]) - SelectedMachine = T - break - - if(href_list["operation"]) - switch(href_list["operation"]) - - if("release") - machinelist = list() - screen = 0 - - if("mainmenu") - screen = 0 - - if("probe") - if(machinelist.len > 0) - temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -" - - else - for(var/obj/machinery/telecomms/T in urange(25, src)) - if(T.network == network) - machinelist.Add(T) - - if(!machinelist.len) - temp = "- FAILED: UNABLE TO LOCATE NETWORK ENTITIES IN \[[network]\] -" - else - temp = "- [machinelist.len] ENTITIES LOCATED & BUFFERED -" - - screen = 0 - - - if(href_list["network"]) - - var/newnet = stripped_input(usr, "Which network do you want to view?", "Comm Monitor", network) - if(newnet && ((usr in range(1, src)) || issilicon(usr))) - if(length(newnet) > 15) - temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -" - - else - network = newnet - screen = 0 - machinelist = list() - temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -" - - updateUsrDialog() - return - -/obj/machinery/computer/telecomms/monitor/attackby() - . = ..() - updateUsrDialog() diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm deleted file mode 100644 index 1205bc17d7..0000000000 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ /dev/null @@ -1,275 +0,0 @@ - -/* - - All telecommunications interactions: - -*/ - -/obj/machinery/telecomms - var/temp = "" // output message - -/obj/machinery/telecomms/attackby(obj/item/P, mob/user, params) - - var/icon_closed = initial(icon_state) - var/icon_open = "[initial(icon_state)]_o" - if(!on) - icon_closed = "[initial(icon_state)]_off" - icon_open = "[initial(icon_state)]_o_off" - - if(default_deconstruction_screwdriver(user, icon_open, icon_closed, P)) - return - // Using a multitool lets you access the receiver's interface - else if(P.tool_behaviour == TOOL_MULTITOOL) - attack_hand(user) - - else if(default_deconstruction_crowbar(P)) - return - else - return ..() - -/obj/machinery/telecomms/ui_interact(mob/user) - . = ..() - // You need a multitool to use this, or be silicon - if(!issilicon(user)) - // istype returns false if the value is null - if(!istype(user.get_active_held_item(), /obj/item/multitool)) - return - var/obj/item/multitool/P = get_multitool(user) - var/dat - dat = "[name]

          [name] Access

          " - dat += "
          [temp]
          " - dat += "
          Power Status: [toggled ? "On" : "Off"]" - if(on && toggled) - if(id != "" && id) - dat += "
          Identification String: [id]" - else - dat += "
          Identification String: NULL" - dat += "
          Network: [network]" - dat += "
          Prefabrication: [autolinkers.len ? "TRUE" : "FALSE"]" - if(hide) - dat += "
          Shadow Link: ACTIVE" - - //Show additional options for certain machines. - dat += Options_Menu() - - dat += "
          Linked Network Entities:
            " - - var/i = 0 - for(var/obj/machinery/telecomms/T in links) - i++ - if(T.hide && !hide) - continue - dat += "
          1. [REF(T)] [T.name] ([T.id]) \[X\]
          2. " - dat += "
          " - - dat += "
          Filtering Frequencies: " - - i = 0 - if(length(freq_listening)) - for(var/x in freq_listening) - i++ - if(i < length(freq_listening)) - dat += "[format_frequency(x)] GHz\[X\]; " - else - dat += "[format_frequency(x)] GHz\[X\]" - else - dat += "NONE" - - dat += "
          \[Add Filter\]" - dat += "
          " - - if(P) - var/obj/machinery/telecomms/T = P.buffer - if(istype(T)) - dat += "

          MULTITOOL BUFFER: [T] ([T.id]) \[Link\] \[Flush\]" - else - dat += "

          MULTITOOL BUFFER:
          \[Add Machine\]" - - dat += "
          " - temp = "" - user << browse(dat, "window=tcommachine;size=520x500;can_resize=0") - onclose(user, "tcommachine") - return TRUE - -// Returns a multitool from a user depending on their mobtype. - -/obj/machinery/telecomms/proc/get_multitool(mob/user) - - var/obj/item/multitool/P = null - // Let's double check - if(!issilicon(user) && istype(user.get_active_held_item(), /obj/item/multitool)) - P = user.get_active_held_item() - else if(isAI(user)) - var/mob/living/silicon/ai/U = user - P = U.aiMulti - else if(iscyborg(user) && in_range(user, src)) - if(istype(user.get_active_held_item(), /obj/item/multitool)) - P = user.get_active_held_item() - return P - -// Additional Options for certain machines. Use this when you want to add an option to a specific machine. -// Example of how to use below. - -/obj/machinery/telecomms/proc/Options_Menu() - return "" - -// The topic for Additional Options. Use this for checking href links for your specific option. -// Example of how to use below. -/obj/machinery/telecomms/proc/Options_Topic(href, href_list) - return - -// RELAY - -/obj/machinery/telecomms/relay/Options_Menu() - var/dat = "" - dat += "
          Broadcasting: [broadcasting ? "YES" : "NO"]" - dat += "
          Receiving: [receiving ? "YES" : "NO"]" - return dat - -/obj/machinery/telecomms/relay/Options_Topic(href, href_list) - - if(href_list["receive"]) - receiving = !receiving - temp = "-% Receiving mode changed. %-" - if(href_list["broadcast"]) - broadcasting = !broadcasting - temp = "-% Broadcasting mode changed. %-" - -// BUS - -/obj/machinery/telecomms/bus/Options_Menu() - var/dat = "
          Change Signal Frequency: [change_frequency ? "YES ([change_frequency])" : "NO"]" - return dat - -/obj/machinery/telecomms/bus/Options_Topic(href, href_list) - - if(href_list["change_freq"]) - - var/newfreq = input(usr, "Specify a new frequency for new signals to change to. Enter null to turn off frequency changing. Decimals assigned automatically.", src, network) as null|num - if(canAccess(usr)) - if(newfreq) - if(findtext(num2text(newfreq), ".")) - newfreq *= 10 // shift the decimal one place - if(newfreq < 10000) - change_frequency = newfreq - temp = "-% New frequency to change to assigned: \"[newfreq] GHz\" %-" - else - change_frequency = 0 - temp = "-% Frequency changing deactivated %-" - - -/obj/machinery/telecomms/Topic(href, href_list) - if(..()) - return - - if(!issilicon(usr)) - if(!istype(usr.get_active_held_item(), /obj/item/multitool)) - return - - var/obj/item/multitool/P = get_multitool(usr) - - if(href_list["input"]) - switch(href_list["input"]) - - if("toggle") - - toggled = !toggled - temp = "-% [src] has been [toggled ? "activated" : "deactivated"]." - update_power() - - - if("id") - var/newid = copytext(reject_bad_text(input(usr, "Specify the new ID for this machine", src, id) as null|text),1,MAX_MESSAGE_LEN) - if(newid && canAccess(usr)) - id = newid - temp = "-% New ID assigned: \"[id]\" %-" - - if("network") - var/newnet = stripped_input(usr, "Specify the new network for this machine. This will break all current links.", src, network) - if(newnet && canAccess(usr)) - - if(length(newnet) > 15) - temp = "-% Too many characters in new network tag %-" - - else - for(var/obj/machinery/telecomms/T in links) - T.links.Remove(src) - - network = newnet - links = list() - temp = "-% New network tag assigned: \"[network]\" %-" - - - if("freq") - var/newfreq = input(usr, "Specify a new frequency to filter (GHz). Decimals assigned automatically.", src, network) as null|num - if(newfreq && canAccess(usr)) - if(findtext(num2text(newfreq), ".")) - newfreq *= 10 // shift the decimal one place - if(newfreq == FREQ_SYNDICATE) - temp = "-% Error: Interference preventing filtering frequency: \"[newfreq] GHz\" %-" - else - if(!(newfreq in freq_listening) && newfreq < 10000) - freq_listening.Add(newfreq) - temp = "-% New frequency filter assigned: \"[newfreq] GHz\" %-" - - if(href_list["delete"]) - - // changed the layout about to workaround a pesky runtime -- Doohl - - var/x = text2num(href_list["delete"]) - temp = "-% Removed frequency filter [x] %-" - freq_listening.Remove(x) - - if(href_list["unlink"]) - - if(text2num(href_list["unlink"]) <= length(links)) - var/obj/machinery/telecomms/T = links[text2num(href_list["unlink"])] - if(T) - temp = "-% Removed [REF(T)] [T.name] from linked entities. %-" - - // Remove link entries from both T and src. - - if(T.links) - T.links.Remove(src) - links.Remove(T) - - else - temp = "-% Unable to locate machine to unlink from, try again. %-" - - if(href_list["link"]) - - if(P) - var/obj/machinery/telecomms/T = P.buffer - if(istype(T) && T != src) - if(!(src in T.links)) - T.links += src - - if(!(T in links)) - links += T - - temp = "-% Successfully linked with [REF(T)] [T.name] %-" - - else - temp = "-% Unable to acquire buffer %-" - - if(href_list["buffer"]) - - P.buffer = src - temp = "-% Successfully stored [REF(P.buffer)] [P.buffer.name] in buffer %-" - - - if(href_list["flush"]) - - temp = "-% Buffer successfully flushed. %-" - P.buffer = null - - Options_Topic(href, href_list) - - usr.set_machine(src) - - updateUsrDialog() - -/obj/machinery/telecomms/proc/canAccess(mob/user) - if(issilicon(user) || in_range(user, src)) - return TRUE - return FALSE diff --git a/code/game/machinery/telecomms/machines/allinone.dm b/code/game/machinery/telecomms/machines/allinone.dm deleted file mode 100644 index 132f0214c7..0000000000 --- a/code/game/machinery/telecomms/machines/allinone.dm +++ /dev/null @@ -1,44 +0,0 @@ -/* - Basically just an empty shell for receiving and broadcasting radio messages. Not - very flexible, but it gets the job done. -*/ - -/obj/machinery/telecomms/allinone - name = "telecommunications mainframe" - icon_state = "comm_server" - desc = "" - density = TRUE - use_power = NO_POWER_USE - idle_power_usage = 0 - var/intercept = FALSE // If true, only works on the Syndicate frequency. - -/obj/machinery/telecomms/allinone/indestructable - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - flags_1 = NODECONSTRUCT_1 - -/obj/machinery/telecomms/allinone/Initialize() - . = ..() - if (intercept) - freq_listening = list(FREQ_SYNDICATE) - -/obj/machinery/telecomms/allinone/receive_signal(datum/signal/subspace/signal) - if(!istype(signal) || signal.transmission_method != TRANSMISSION_SUBSPACE) // receives on subspace only - return - if(!on || !is_freq_listening(signal)) // has to be on to receive messages - return - if (!intercept && !(z in signal.levels) && !(0 in signal.levels)) // has to be syndicate or on the right level - return - - // Decompress the signal and mark it done - if (intercept) - signal.levels += 0 // Signal is broadcast to agents anywhere - - signal.data["compression"] = 0 - signal.mark_done() - if(signal.data["slow"] > 0) - sleep(signal.data["slow"]) // simulate the network lag if necessary - signal.broadcast() - -/obj/machinery/telecomms/allinone/attackby(obj/item/P, mob/user, params) - if(P.tool_behaviour == TOOL_MULTITOOL) - return attack_hand(user) diff --git a/code/game/machinery/telecomms/machines/broadcaster.dm b/code/game/machinery/telecomms/machines/broadcaster.dm deleted file mode 100644 index 656db981c0..0000000000 --- a/code/game/machinery/telecomms/machines/broadcaster.dm +++ /dev/null @@ -1,85 +0,0 @@ -/* - The broadcaster sends processed messages to all radio devices in the game. They - do not have to be headsets; intercoms and station-bounced radios suffice. - - They receive their message from a server after the message has been logged. -*/ - -GLOBAL_LIST_EMPTY(recentmessages) // global list of recent messages broadcasted : used to circumvent massive radio spam -GLOBAL_VAR_INIT(message_delay, 0) // To make sure restarting the recentmessages list is kept in sync - -/obj/machinery/telecomms/broadcaster - name = "subspace broadcaster" - icon_state = "broadcaster" - desc = "" - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 25 - circuit = /obj/item/circuitboard/machine/telecomms/broadcaster - -/obj/machinery/telecomms/broadcaster/receive_information(datum/signal/subspace/signal, obj/machinery/telecomms/machine_from) - // Don't broadcast rejected signals - if(!istype(signal)) - return - if(signal.data["reject"]) - return - if(!signal.data["message"]) - return - - // Prevents massive radio spam - signal.mark_done() - var/datum/signal/subspace/original = signal.original - if(original && ("compression" in signal.data)) - original.data["compression"] = signal.data["compression"] - - var/turf/T = get_turf(src) - if (T) - signal.levels |= T.z - - var/signal_message = "[signal.frequency]:[signal.data["message"]]:[signal.data["name"]]" - if(signal_message in GLOB.recentmessages) - return - GLOB.recentmessages.Add(signal_message) - - if(signal.data["slow"] > 0) - sleep(signal.data["slow"]) // simulate the network lag if necessary - - signal.broadcast() - - if(!GLOB.message_delay) - GLOB.message_delay = TRUE - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(end_message_delay)), 1 SECONDS) - - /* --- Do a snazzy animation! --- */ - flick("broadcaster_send", src) - -/proc/end_message_delay() - GLOB.message_delay = FALSE - GLOB.recentmessages = list() - -/obj/machinery/telecomms/broadcaster/Destroy() - // In case message_delay is left on 1, otherwise it won't reset the list and people can't say the same thing twice anymore. - if(GLOB.message_delay) - GLOB.message_delay = 0 - return ..() - - - -//Preset Broadcasters - -//--PRESET LEFT--// - -/obj/machinery/telecomms/broadcaster/preset_left - id = "Broadcaster A" - network = "tcommsat" - autolinkers = list("broadcasterA") - -//--PRESET RIGHT--// - -/obj/machinery/telecomms/broadcaster/preset_right - id = "Broadcaster B" - network = "tcommsat" - autolinkers = list("broadcasterB") - -/obj/machinery/telecomms/broadcaster/preset_left/birdstation - name = "Broadcaster" diff --git a/code/game/machinery/telecomms/machines/bus.dm b/code/game/machinery/telecomms/machines/bus.dm deleted file mode 100644 index 6ab896ba11..0000000000 --- a/code/game/machinery/telecomms/machines/bus.dm +++ /dev/null @@ -1,82 +0,0 @@ -/* - The bus mainframe idles and waits for hubs to relay them signals. They act - as junctions for the network. - - They transfer uncompressed subspace packets to processor units, and then take - the processed packet to a server for logging. - - Link to a subspace hub if it can't send to a server. -*/ - -/obj/machinery/telecomms/bus - name = "bus mainframe" - icon_state = "bus" - desc = "" - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 50 - netspeed = 40 - circuit = /obj/item/circuitboard/machine/telecomms/bus - var/change_frequency = 0 - -/obj/machinery/telecomms/bus/receive_information(datum/signal/subspace/signal, obj/machinery/telecomms/machine_from) - if(!istype(signal) || !is_freq_listening(signal)) - return - - if(change_frequency && signal.frequency != FREQ_SYNDICATE) - signal.frequency = change_frequency - - if(!istype(machine_from, /obj/machinery/telecomms/processor) && machine_from != src) // Signal must be ready (stupid assuming machine), let's send it - // send to one linked processor unit - if(relay_information(signal, /obj/machinery/telecomms/processor)) - return - - // failed to send to a processor, relay information anyway - signal.data["slow"] += rand(1, 5) // slow the signal down only slightly - - // Try sending it! - var/list/try_send = list(signal.server_type, /obj/machinery/telecomms/hub, /obj/machinery/telecomms/broadcaster) - - var/i = 0 - for(var/send in try_send) - if(i) - signal.data["slow"] += rand(0, 1) // slow the signal down only slightly - i++ - if(relay_information(signal, send)) - break - -//Preset Buses - -/obj/machinery/telecomms/bus/preset_one - id = "Bus 1" - network = "tcommsat" - freq_listening = list(FREQ_SCIENCE, FREQ_MEDICAL) - autolinkers = list("processor1", "science", "medical") - -/obj/machinery/telecomms/bus/preset_two - id = "Bus 2" - network = "tcommsat" - freq_listening = list(FREQ_SUPPLY, FREQ_SERVICE) - autolinkers = list("processor2", "supply", "service") - -/obj/machinery/telecomms/bus/preset_three - id = "Bus 3" - network = "tcommsat" - freq_listening = list(FREQ_SECURITY, FREQ_COMMAND) - autolinkers = list("processor3", "security", "command") - -/obj/machinery/telecomms/bus/preset_four - id = "Bus 4" - network = "tcommsat" - freq_listening = list(FREQ_ENGINEERING) - autolinkers = list("processor4", "engineering", "common", "messaging") - -/obj/machinery/telecomms/bus/preset_four/Initialize() - . = ..() - for(var/i = MIN_FREQ, i <= MAX_FREQ, i += 2) - freq_listening |= i - -/obj/machinery/telecomms/bus/preset_one/birdstation - name = "Bus" - autolinkers = list("processor1", "common", "messaging") - freq_listening = list() diff --git a/code/game/machinery/telecomms/machines/hub.dm b/code/game/machinery/telecomms/machines/hub.dm deleted file mode 100644 index cbe5818eac..0000000000 --- a/code/game/machinery/telecomms/machines/hub.dm +++ /dev/null @@ -1,43 +0,0 @@ -/* - The HUB idles until it receives information. It then passes on that information - depending on where it came from. - - This is the heart of the Telecommunications Network, sending information where it - is needed. It mainly receives information from long-distance Relays and then sends - that information to be processed. Afterwards it gets the uncompressed information - from Servers/Buses and sends that back to the relay, to then be broadcasted. -*/ - -/obj/machinery/telecomms/hub - name = "telecommunication hub" - icon_state = "hub" - desc = "" - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 80 - long_range_link = TRUE - netspeed = 40 - circuit = /obj/item/circuitboard/machine/telecomms/hub - -/obj/machinery/telecomms/hub/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) - if(!is_freq_listening(signal)) - return - - if(istype(machine_from, /obj/machinery/telecomms/receiver)) - // It's probably compressed so send it to the bus. - relay_information(signal, /obj/machinery/telecomms/bus, TRUE) - else - // Send it to each relay so their levels get added... - relay_information(signal, /obj/machinery/telecomms/relay) - // Then broadcast that signal to - relay_information(signal, /obj/machinery/telecomms/broadcaster) - -//Preset HUB - -/obj/machinery/telecomms/hub/preset - id = "Hub" - network = "tcommsat" - autolinkers = list("hub", "relay", "s_relay", "m_relay", "r_relay", "h_relay", "science", "medical", - "supply", "service", "common", "command", "engineering", "security", - "receiverA", "receiverB", "broadcasterA", "broadcasterB", "autorelay", "messaging") - diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm deleted file mode 100644 index 1e068d3627..0000000000 --- a/code/game/machinery/telecomms/machines/message_server.dm +++ /dev/null @@ -1,216 +0,0 @@ -/* - The equivalent of the server, for PDA and request console messages. - Without it, PDA and request console messages cannot be transmitted. - PDAs require the rest of the telecomms setup, but request consoles only - require the message server. -*/ - -// A decorational representation of SSblackbox, usually placed alongside the message server. -/obj/machinery/blackbox_recorder - icon = 'icons/obj/stationobjs.dmi' - icon_state = "blackbox" - name = "Blackbox Recorder" - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 10 - active_power_usage = 100 - armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70) - - -#define MESSAGE_SERVER_FUNCTIONING_MESSAGE "This is an automated message. The messaging system is functioning correctly." - -// The message server itself. -/obj/machinery/telecomms/message_server - icon_state = "message_server" - name = "Messaging Server" - desc = "" - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 10 - active_power_usage = 100 - circuit = /obj/item/circuitboard/machine/telecomms/message_server - - var/list/datum/data_pda_msg/pda_msgs = list() - var/list/datum/data_rc_msg/rc_msgs = list() - var/decryptkey = "password" - var/calibrating = 15 MINUTES //Init reads this and adds world.time, then becomes 0 when that time has passed and the machine works - -/obj/machinery/telecomms/message_server/Initialize(mapload) - . = ..() - if (!decryptkey) - decryptkey = GenerateKey() - - if (calibrating) - calibrating += world.time - say("Calibrating... Estimated wait time: [rand(3, 9)] minutes.") - pda_msgs += new /datum/data_pda_msg("System Administrator", "system", "This is an automated message. System calibration started at [station_time_timestamp()]") - else - pda_msgs += new /datum/data_pda_msg("System Administrator", "system", MESSAGE_SERVER_FUNCTIONING_MESSAGE) - -/obj/machinery/telecomms/message_server/Destroy() - for(var/obj/machinery/computer/message_monitor/monitor in GLOB.telecomms_list) - if(monitor.linkedServer && monitor.linkedServer == src) - monitor.linkedServer = null - . = ..() - -/obj/machinery/telecomms/message_server/examine(mob/user) - . = ..() - if(calibrating) - . += "It's still calibrating." - -/obj/machinery/telecomms/message_server/proc/GenerateKey() - var/newKey - newKey += pick("the", "if", "of", "as", "in", "a", "you", "from", "to", "an", "too", "little", "snow", "dead", "drunk", "rosebud", "duck", "al", "le") - newKey += pick("diamond", "beer", "mushroom", "assistant", "clown", "captain", "twinkie", "security", "nuke", "small", "big", "escape", "yellow", "gloves", "monkey", "engine", "nuclear", "ai") - newKey += pick("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") - return newKey - -/obj/machinery/telecomms/message_server/process() - . = ..() - if(calibrating && calibrating <= world.time) - calibrating = 0 - pda_msgs += new /datum/data_pda_msg("System Administrator", "system", MESSAGE_SERVER_FUNCTIONING_MESSAGE) - -/obj/machinery/telecomms/message_server/receive_information(datum/signal/subspace/messaging/signal, obj/machinery/telecomms/machine_from) - // can't log non-message signals - if(!istype(signal) || !signal.data["message"] || !on || calibrating) - return - - // log the signal - if(istype(signal, /datum/signal/subspace/messaging/pda)) - var/datum/signal/subspace/messaging/pda/PDAsignal = signal - var/datum/data_pda_msg/M = new(PDAsignal.format_target(), "[PDAsignal.data["name"]] ([PDAsignal.data["job"]])", PDAsignal.data["message"], PDAsignal.data["photo"]) - pda_msgs += M - signal.logged = M - else if(istype(signal, /datum/signal/subspace/messaging/rc)) - var/datum/data_rc_msg/M = new(signal.data["rec_dpt"], signal.data["send_dpt"], signal.data["message"], signal.data["stamped"], signal.data["verified"], signal.data["priority"]) - signal.logged = M - if(signal.data["send_dpt"]) // don't log messages not from a department but allow them to work - rc_msgs += M - signal.data["reject"] = FALSE - - // pass it along to either the hub or the broadcaster - if(!relay_information(signal, /obj/machinery/telecomms/hub)) - relay_information(signal, /obj/machinery/telecomms/broadcaster) - -/obj/machinery/telecomms/message_server/update_overlays() - . = ..() - - if(calibrating) - . += "message_server_calibrate" - - -// Root messaging signal datum -/datum/signal/subspace/messaging - frequency = FREQ_COMMON - server_type = /obj/machinery/telecomms/message_server - var/datum/logged - -/datum/signal/subspace/messaging/New(init_source, init_data) - source = init_source - data = init_data - var/turf/T = get_turf(source) - levels = list(T.z) - if(!("reject" in data)) - data["reject"] = TRUE - -/datum/signal/subspace/messaging/copy() - var/datum/signal/subspace/messaging/copy = new type(source, data.Copy()) - copy.original = src - copy.levels = levels - return copy - -// PDA signal datum -/datum/signal/subspace/messaging/pda/proc/format_target() - if (length(data["targets"]) > 1) - return "Everyone" - return data["targets"][1] - -/datum/signal/subspace/messaging/pda/proc/format_message() - if (logged && data["photo"]) - return "\"[data["message"]]\" (Photo)" - return "\"[data["message"]]\"" - -/datum/signal/subspace/messaging/pda/broadcast() - if (!logged) // Can only go through if a message server logs it - return - for (var/obj/item/pda/P in GLOB.PDAs) - if ("[P.owner] ([P.ownjob])" in data["targets"]) - P.receive_message(src) - -// Request Console signal datum -/datum/signal/subspace/messaging/rc/broadcast() - if (!logged) // Like /pda, only if logged - return - var/rec_dpt = ckey(data["rec_dpt"]) - for (var/obj/machinery/requests_console/Console in GLOB.allConsoles) - if(ckey(Console.department) == rec_dpt || (data["ore_update"] && Console.receive_ore_updates)) - Console.createmessage(data["sender"], data["send_dpt"], data["message"], data["verified"], data["stamped"], data["priority"], data["notify_freq"]) - -// Log datums stored by the message server. -/datum/data_pda_msg - var/sender = "Unspecified" - var/recipient = "Unspecified" - var/message = "Blank" // transferred message - var/datum/picture/picture // attached photo - var/automated = 0 //automated message - -/datum/data_pda_msg/New(param_rec, param_sender, param_message, param_photo) - if(param_rec) - recipient = param_rec - if(param_sender) - sender = param_sender - if(param_message) - message = param_message - if(param_photo) - picture = param_photo - -/datum/data_pda_msg/Topic(href,href_list) - ..() - if(href_list["photo"]) - var/mob/M = usr - M << browse_rsc(picture.picture_image, "pda_photo.png") - M << browse("PDA Photo" \ - + "" \ - + "" \ - + "", "window=pdaphoto;size=[picture.psize_x]x[picture.psize_y];can-close=true") - onclose(M, "pdaphoto") - -/datum/data_rc_msg - var/rec_dpt = "Unspecified" // receiving department - var/send_dpt = "Unspecified" // sending department - var/message = "Blank" - var/stamp = "Unstamped" - var/id_auth = "Unauthenticated" - var/priority = "Normal" - -/datum/data_rc_msg/New(param_rec, param_sender, param_message, param_stamp, param_id_auth, param_priority) - if(param_rec) - rec_dpt = param_rec - if(param_sender) - send_dpt = param_sender - if(param_message) - message = param_message - if(param_stamp) - stamp = param_stamp - if(param_id_auth) - id_auth = param_id_auth - if(param_priority) - switch(param_priority) - if(REQ_NORMAL_MESSAGE_PRIORITY) - priority = "Normal" - if(REQ_HIGH_MESSAGE_PRIORITY) - priority = "High" - if(REQ_EXTREME_MESSAGE_PRIORITY) - priority = "Extreme" - else - priority = "Undetermined" - -#undef MESSAGE_SERVER_FUNCTIONING_MESSAGE - -/obj/machinery/telecomms/message_server/preset - id = "Messaging Server" - network = "tcommsat" - autolinkers = list("messaging") - decryptkey = null //random - calibrating = 0 diff --git a/code/game/machinery/telecomms/machines/processor.dm b/code/game/machinery/telecomms/machines/processor.dm deleted file mode 100644 index ac96a57555..0000000000 --- a/code/game/machinery/telecomms/machines/processor.dm +++ /dev/null @@ -1,57 +0,0 @@ -/* - The processor is a very simple machine that decompresses subspace signals and - transfers them back to the original bus. It is essential in producing audible - data. - - Link to servers if bus is not present -*/ - -/obj/machinery/telecomms/processor - name = "processor unit" - icon_state = "processor" - desc = "" - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 30 - circuit = /obj/item/circuitboard/machine/telecomms/processor - var/process_mode = 1 // 1 = Uncompress Signals, 0 = Compress Signals - -/obj/machinery/telecomms/processor/receive_information(datum/signal/subspace/signal, obj/machinery/telecomms/machine_from) - if(!is_freq_listening(signal)) - return - - if (!process_mode) - signal.data["compression"] = 100 // even more compressed signal - else if (signal.data["compression"]) - signal.data["compression"] = 0 // uncompress subspace signal - - if(istype(machine_from, /obj/machinery/telecomms/bus)) - relay_direct_information(signal, machine_from) // send the signal back to the machine - else // no bus detected - send the signal to servers instead - signal.data["slow"] += rand(5, 10) // slow the signal down - relay_information(signal, signal.server_type) - -//Preset Processors - -/obj/machinery/telecomms/processor/preset_one - id = "Processor 1" - network = "tcommsat" - autolinkers = list("processor1") // processors are sort of isolated; they don't need backward links - -/obj/machinery/telecomms/processor/preset_two - id = "Processor 2" - network = "tcommsat" - autolinkers = list("processor2") - -/obj/machinery/telecomms/processor/preset_three - id = "Processor 3" - network = "tcommsat" - autolinkers = list("processor3") - -/obj/machinery/telecomms/processor/preset_four - id = "Processor 4" - network = "tcommsat" - autolinkers = list("processor4") - -/obj/machinery/telecomms/processor/preset_one/birdstation - name = "Processor" diff --git a/code/game/machinery/telecomms/machines/receiver.dm b/code/game/machinery/telecomms/machines/receiver.dm deleted file mode 100644 index fb2119a656..0000000000 --- a/code/game/machinery/telecomms/machines/receiver.dm +++ /dev/null @@ -1,68 +0,0 @@ -/* - The receiver idles and receives messages from subspace-compatible radio equipment; - primarily headsets. They then just relay this information to all linked devices, - which can would probably be network hubs. - - Link to Processor Units in case receiver can't send to bus units. -*/ - -/obj/machinery/telecomms/receiver - name = "subspace receiver" - icon_state = "broadcast receiver" - desc = "" - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 30 - circuit = /obj/item/circuitboard/machine/telecomms/receiver - -/obj/machinery/telecomms/receiver/receive_signal(datum/signal/subspace/signal) - if(!on || !istype(signal) || !check_receive_level(signal) || signal.transmission_method != TRANSMISSION_SUBSPACE) - return - if(!is_freq_listening(signal)) - return - - signal.levels = list() - - // send the signal to the hub if possible, or a bus otherwise - if(!relay_information(signal, /obj/machinery/telecomms/hub)) - relay_information(signal, /obj/machinery/telecomms/bus) - -/obj/machinery/telecomms/receiver/proc/check_receive_level(datum/signal/subspace/signal) - if (z in signal.levels) - return TRUE - - for(var/obj/machinery/telecomms/hub/H in links) - for(var/obj/machinery/telecomms/relay/R in H.links) - if(R.can_receive(signal) && (R.z in signal.levels)) - return TRUE - - return FALSE - -//Preset Receivers - -//--PRESET LEFT--// - -/obj/machinery/telecomms/receiver/preset_left - id = "Receiver A" - network = "tcommsat" - autolinkers = list("receiverA") // link to relay - freq_listening = list(FREQ_SCIENCE, FREQ_MEDICAL, FREQ_SUPPLY, FREQ_SERVICE) - - -//--PRESET RIGHT--// - -/obj/machinery/telecomms/receiver/preset_right - id = "Receiver B" - network = "tcommsat" - autolinkers = list("receiverB") // link to relay - freq_listening = list(FREQ_COMMAND, FREQ_ENGINEERING, FREQ_SECURITY) - - //Common and other radio frequencies for people to freely use -/obj/machinery/telecomms/receiver/preset_right/Initialize() - . = ..() - for(var/i = MIN_FREQ, i <= MAX_FREQ, i += 2) - freq_listening |= i - -/obj/machinery/telecomms/receiver/preset_left/birdstation - name = "Receiver" - freq_listening = list() diff --git a/code/game/machinery/telecomms/machines/relay.dm b/code/game/machinery/telecomms/machines/relay.dm deleted file mode 100644 index 14acbce8e2..0000000000 --- a/code/game/machinery/telecomms/machines/relay.dm +++ /dev/null @@ -1,78 +0,0 @@ -/* - The relay idles until it receives information. It then passes on that information - depending on where it came from. - - The relay is needed in order to send information pass Z levels. It must be linked - with a HUB, the only other machine that can send/receive pass Z levels. -*/ - -/obj/machinery/telecomms/relay - name = "telecommunication relay" - icon_state = "relay" - desc = "" - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 30 - netspeed = 5 - long_range_link = 1 - circuit = /obj/item/circuitboard/machine/telecomms/relay - var/broadcasting = 1 - var/receiving = 1 - -/obj/machinery/telecomms/relay/receive_information(datum/signal/subspace/signal, obj/machinery/telecomms/machine_from) - // Add our level and send it back - var/turf/T = get_turf(src) - if(can_send(signal) && T) - signal.levels |= T.z - -// Checks to see if it can send/receive. - -/obj/machinery/telecomms/relay/proc/can(datum/signal/signal) - if(!on) - return FALSE - if(!is_freq_listening(signal)) - return FALSE - return TRUE - -/obj/machinery/telecomms/relay/proc/can_send(datum/signal/signal) - if(!can(signal)) - return FALSE - return broadcasting - -/obj/machinery/telecomms/relay/proc/can_receive(datum/signal/signal) - if(!can(signal)) - return FALSE - return receiving - -//Preset Relay - -/obj/machinery/telecomms/relay/preset - network = "tcommsat" - -/obj/machinery/telecomms/relay/Initialize(mapload) - . = ..() - if(autolinkers.len) //We want lateloaded presets to autolink (lateloaded aways/ruins/shuttles) - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/telecomms/relay/preset/station - id = "Station Relay" - autolinkers = list("s_relay") - -/obj/machinery/telecomms/relay/preset/telecomms - id = "Telecomms Relay" - autolinkers = list("relay") - -/obj/machinery/telecomms/relay/preset/mining - id = "Mining Relay" - autolinkers = list("m_relay") - -/obj/machinery/telecomms/relay/preset/ruskie - id = "Ruskie Relay" - hide = 1 - toggled = FALSE - autolinkers = list("r_relay") - -//Generic preset relay -/obj/machinery/telecomms/relay/preset/auto - hide = TRUE - autolinkers = list("autorelay") diff --git a/code/game/machinery/telecomms/machines/server.dm b/code/game/machinery/telecomms/machines/server.dm deleted file mode 100644 index f100f61f6f..0000000000 --- a/code/game/machinery/telecomms/machines/server.dm +++ /dev/null @@ -1,124 +0,0 @@ -/* - The server logs all traffic and signal data. Once it records the signal, it sends - it to the subspace broadcaster. - - Store a maximum of 100 logs and then deletes them. -*/ - -/obj/machinery/telecomms/server - name = "telecommunication server" - icon_state = "comm_server" - desc = "" - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 15 - circuit = /obj/item/circuitboard/machine/telecomms/server - var/list/log_entries = list() - var/totaltraffic = 0 // gigabytes (if > 1024, divide by 1024 -> terrabytes) - -/obj/machinery/telecomms/server/Initialize() - . = ..() - -/obj/machinery/telecomms/server/receive_information(datum/signal/subspace/vocal/signal, obj/machinery/telecomms/machine_from) - // can't log non-vocal signals - if(!istype(signal) || !signal.data["message"] || !is_freq_listening(signal)) - return - - if(traffic > 0) - totaltraffic += traffic // add current traffic to total traffic - - // Delete particularly old logs - if (log_entries.len >= 400) - log_entries.Cut(1, 2) - - var/datum/comm_log_entry/log = new - log.parameters["mobtype"] = signal.virt.source.type - log.parameters["name"] = signal.data["name"] - log.parameters["job"] = signal.data["job"] - log.parameters["message"] = signal.data["message"] - log.parameters["language"] = signal.language - - // If the signal is still compressed, make the log entry gibberish - var/compression = signal.data["compression"] - if(compression > 0) - log.input_type = "Corrupt File" - var/replace_characters = compression >= 20 ? TRUE : FALSE - log.parameters["name"] = Gibberish(signal.data["name"], replace_characters) - log.parameters["job"] = Gibberish(signal.data["job"], replace_characters) - log.parameters["message"] = Gibberish(signal.data["message"], replace_characters) - - // Give the log a name and store it - var/identifier = num2text( rand(-1000,1000) + world.time ) - log.name = "data packet ([md5(identifier)])" - log_entries.Add(log) - - var/can_send = relay_information(signal, /obj/machinery/telecomms/hub) - if(!can_send) - relay_information(signal, /obj/machinery/telecomms/broadcaster) - - -// Simple log entry datum -/datum/comm_log_entry - var/input_type = "Speech File" - var/name = "data packet (#)" - var/parameters = list() // copied from signal.data above - - -// Preset Servers -/obj/machinery/telecomms/server/presets - network = "tcommsat" - -/obj/machinery/telecomms/server/presets/Initialize() - . = ..() - name = id - - -/obj/machinery/telecomms/server/presets/science - id = "Science Server" - freq_listening = list(FREQ_SCIENCE) - autolinkers = list("science") - -/obj/machinery/telecomms/server/presets/medical - id = "Medical Server" - freq_listening = list(FREQ_MEDICAL) - autolinkers = list("medical") - -/obj/machinery/telecomms/server/presets/supply - id = "Supply Server" - freq_listening = list(FREQ_SUPPLY) - autolinkers = list("supply") - -/obj/machinery/telecomms/server/presets/service - id = "Service Server" - freq_listening = list(FREQ_SERVICE) - autolinkers = list("service") - -/obj/machinery/telecomms/server/presets/common - id = "Common Server" - freq_listening = list() - autolinkers = list("common") - -//Common and other radio frequencies for people to freely use -/obj/machinery/telecomms/server/presets/common/Initialize() - . = ..() - for(var/i = MIN_FREQ, i <= MAX_FREQ, i += 2) - freq_listening |= i - -/obj/machinery/telecomms/server/presets/command - id = "Command Server" - freq_listening = list(FREQ_COMMAND) - autolinkers = list("command") - -/obj/machinery/telecomms/server/presets/engineering - id = "Engineering Server" - freq_listening = list(FREQ_ENGINEERING) - autolinkers = list("engineering") - -/obj/machinery/telecomms/server/presets/security - id = "Security Server" - freq_listening = list(FREQ_SECURITY) - autolinkers = list("security") - -/obj/machinery/telecomms/server/presets/common/birdstation/Initialize() - . = ..() - freq_listening = list() diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm deleted file mode 100644 index 2a297ee2d1..0000000000 --- a/code/game/machinery/telecomms/telecomunications.dm +++ /dev/null @@ -1,154 +0,0 @@ - -/* - Hello, friends, this is Doohl from sexylands. You may be wondering what this - monstrous code file is. Sit down, boys and girls, while I tell you the tale. - - - The telecom machines were designed to be compatible with any radio - signals, provided they use subspace transmission. Currently they are only used for - headsets, but they can eventually be outfitted for real COMPUTER networks. This - is just a skeleton, ladies and gentlemen. - - Look at radio.dm for the prequel to this code. -*/ - -GLOBAL_LIST_EMPTY(telecomms_list) - -/obj/machinery/telecomms - icon = 'icons/obj/machines/telecomms.dmi' - critical_machine = TRUE - var/list/links = list() // list of machines this machine is linked to - var/traffic = 0 // value increases as traffic increases - var/netspeed = 5 // how much traffic to lose per tick (50 gigabytes/second * netspeed) - var/list/autolinkers = list() // list of text/number values to link with - var/id = "NULL" // identification string - var/network = "NULL" // the network of the machinery - - var/list/freq_listening = list() // list of frequencies to tune into: if none, will listen to all - - var/on = TRUE - var/toggled = TRUE // Is it toggled on - var/long_range_link = FALSE // Can you link it across Z levels or on the otherside of the map? (Relay & Hub) - var/hide = FALSE // Is it a hidden machine? - - -/obj/machinery/telecomms/proc/relay_information(datum/signal/subspace/signal, filter, copysig, amount = 20) - // relay signal to all linked machinery that are of type [filter]. If signal has been sent [amount] times, stop sending - - if(!on) - return - var/send_count = 0 - - // Apply some lag based on traffic rates - var/netlag = round(traffic / 50) - if(netlag > signal.data["slow"]) - signal.data["slow"] = netlag - - // Loop through all linked machines and send the signal or copy. - for(var/obj/machinery/telecomms/machine in links) - if(filter && !istype( machine, filter )) - continue - if(!machine.on) - continue - if(amount && send_count >= amount) - break - if(z != machine.loc.z && !long_range_link && !machine.long_range_link) - continue - - send_count++ - if(machine.is_freq_listening(signal)) - machine.traffic++ - - if(copysig) - machine.receive_information(signal.copy(), src) - else - machine.receive_information(signal, src) - - if(send_count > 0 && is_freq_listening(signal)) - traffic++ - - return send_count - -/obj/machinery/telecomms/proc/relay_direct_information(datum/signal/signal, obj/machinery/telecomms/machine) - // send signal directly to a machine - machine.receive_information(signal, src) - -/obj/machinery/telecomms/proc/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) - // receive information from linked machinery - -/obj/machinery/telecomms/proc/is_freq_listening(datum/signal/signal) - // return TRUE if found, FALSE if not found - return signal && (!freq_listening.len || (signal.frequency in freq_listening)) - -/obj/machinery/telecomms/Initialize(mapload) - . = ..() - GLOB.telecomms_list += src - if(mapload && autolinkers.len) - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/telecomms/LateInitialize() - ..() - for(var/obj/machinery/telecomms/T in (long_range_link ? GLOB.telecomms_list : urange(20, src, 1))) - add_link(T) - -/obj/machinery/telecomms/Destroy() - GLOB.telecomms_list -= src - for(var/obj/machinery/telecomms/comm in GLOB.telecomms_list) - comm.links -= src - links = list() - return ..() - -// Used in auto linking -/obj/machinery/telecomms/proc/add_link(obj/machinery/telecomms/T) - var/turf/position = get_turf(src) - var/turf/T_position = get_turf(T) - if((position.z == T_position.z) || (long_range_link && T.long_range_link)) - if(src != T) - for(var/x in autolinkers) - if(x in T.autolinkers) - links |= T - T.links |= src - - -/obj/machinery/telecomms/update_icon_state() - if(on) - if(panel_open) - icon_state = "[initial(icon_state)]_o" - else - icon_state = initial(icon_state) - else - if(panel_open) - icon_state = "[initial(icon_state)]_o_off" - else - icon_state = "[initial(icon_state)]_off" - -/obj/machinery/telecomms/proc/update_power() - - if(toggled) - if(stat & (BROKEN|NOPOWER|EMPED)) // if powered, on. if not powered, off. if too damaged, off - on = FALSE - else - on = TRUE - else - on = FALSE - -/obj/machinery/telecomms/process() - update_power() - - // Update the icon - update_icon() - - if(traffic > 0) - traffic -= netspeed - -/obj/machinery/telecomms/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - if(prob(100/severity) && !(stat & EMPED)) - stat |= EMPED - var/duration = (300 * 10)/severity - addtimer(CALLBACK(src, PROC_REF(de_emp)), rand(duration - 20, duration + 20)) - -/obj/machinery/telecomms/proc/de_emp() - stat &= ~EMPED diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm deleted file mode 100644 index 7b5e4f9691..0000000000 --- a/code/game/machinery/teleporter.dm +++ /dev/null @@ -1,226 +0,0 @@ -/obj/machinery/teleport - name = "teleport" - icon = 'icons/obj/machines/teleporter.dmi' - density = TRUE - -/obj/machinery/teleport/hub - name = "teleporter hub" - desc = "" - icon_state = "tele0" - use_power = IDLE_POWER_USE - idle_power_usage = 10 - active_power_usage = 2000 - circuit = /obj/item/circuitboard/machine/teleporter_hub - var/accuracy = 0 - var/obj/machinery/teleport/station/power_station - var/calibrated //Calibration prevents mutation - -/obj/machinery/teleport/hub/Initialize() - . = ..() - link_power_station() - -/obj/machinery/teleport/hub/Destroy() - if (power_station) - power_station.teleporter_hub = null - power_station = null - return ..() - -/obj/machinery/teleport/hub/RefreshParts() - var/A = 0 - for(var/obj/item/stock_parts/matter_bin/M in component_parts) - A += M.rating - accuracy = A - -/obj/machinery/teleport/hub/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Probability of malfunction decreased by [(accuracy*25)-25]%." - -/obj/machinery/teleport/hub/proc/link_power_station() - if(power_station) - return - for(var/direction in GLOB.cardinals) - power_station = locate(/obj/machinery/teleport/station, get_step(src, direction)) - if(power_station) - break - return power_station - -/obj/machinery/teleport/hub/Bumped(atom/movable/AM) - if(is_centcom_level(z)) - to_chat(AM, "I can't use this here!") - return - if(is_ready()) - teleport(AM) - -/obj/machinery/teleport/hub/attackby(obj/item/W, mob/user, params) - if(default_deconstruction_screwdriver(user, "tele-o", "tele0", W)) - if(power_station && power_station.engaged) - power_station.engaged = 0 //hub with panel open is off, so the station must be informed. - update_icon() - return - if(default_deconstruction_crowbar(W)) - return - return ..() - -/obj/machinery/teleport/hub/proc/teleport(atom/movable/M as mob|obj, turf/T) - var/obj/machinery/computer/teleporter/com = power_station.teleporter_console - if (QDELETED(com)) - return - if (QDELETED(com.target)) - com.target = null - visible_message("Cannot authenticate locked on coordinates. Please reinstate coordinate matrix.") - return - if (ismovableatom(M)) - if(do_teleport(M, com.target, channel = TELEPORT_CHANNEL_BLUESPACE)) - use_power(5000) - if(!calibrated && prob(30 - ((accuracy) * 10))) //oh dear a problem - if(ishuman(M))//don't remove people from the round randomly you jerks - var/mob/living/carbon/human/human = M - if(human.dna && human.dna.species.id == "human") - to_chat(M, "I hear a buzzing in your ears.") - human.set_species(/datum/species/fly) - log_game("[human] ([key_name(human)]) was turned into a fly person") - - human.apply_effect((rand(120 - accuracy * 40, 180 - accuracy * 60)), EFFECT_IRRADIATE, 0) - calibrated = 0 - return - -/obj/machinery/teleport/hub/update_icon_state() - if(panel_open) - icon_state = "tele-o" - else if(is_ready()) - icon_state = "tele1" - else - icon_state = "tele0" - -/obj/machinery/teleport/hub/proc/is_ready() - . = !panel_open && !(stat & (BROKEN|NOPOWER)) && power_station && power_station.engaged && !(power_station.stat & (BROKEN|NOPOWER)) - -/obj/machinery/teleport/hub/syndicate/Initialize() - . = ..() - component_parts += new /obj/item/stock_parts/matter_bin/super(null) - RefreshParts() - - -/obj/machinery/teleport/station - name = "teleporter station" - desc = "" - icon_state = "controller" - use_power = IDLE_POWER_USE - idle_power_usage = 10 - active_power_usage = 2000 - circuit = /obj/item/circuitboard/machine/teleporter_station - var/engaged = FALSE - var/obj/machinery/computer/teleporter/teleporter_console - var/obj/machinery/teleport/hub/teleporter_hub - var/list/linked_stations = list() - var/efficiency = 0 - -/obj/machinery/teleport/station/Initialize() - . = ..() - link_console_and_hub() - -/obj/machinery/teleport/station/RefreshParts() - var/E - for(var/obj/item/stock_parts/capacitor/C in component_parts) - E += C.rating - efficiency = E - 1 - -/obj/machinery/teleport/station/examine(mob/user) - . = ..() - if(!panel_open) - . += "The panel is screwed in, obstructing the linking device and wiring panel." - else - . += "The linking device is now able to be scanned with a multitool.
          The wiring can be connected to a nearby console and hub with a pair of wirecutters.
          " - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: This station can be linked to [efficiency] other station(s)." - -/obj/machinery/teleport/station/proc/link_console_and_hub() - for(var/direction in GLOB.cardinals) - teleporter_hub = locate(/obj/machinery/teleport/hub, get_step(src, direction)) - if(teleporter_hub) - teleporter_hub.link_power_station() - break - for(var/direction in GLOB.cardinals) - teleporter_console = locate(/obj/machinery/computer/teleporter, get_step(src, direction)) - if(teleporter_console) - teleporter_console.link_power_station() - break - return teleporter_hub && teleporter_console - - -/obj/machinery/teleport/station/Destroy() - if(teleporter_hub) - teleporter_hub.power_station = null - teleporter_hub.update_icon() - teleporter_hub = null - if (teleporter_console) - teleporter_console.power_station = null - teleporter_console = null - return ..() - -/obj/machinery/teleport/station/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_MULTITOOL) - if(!multitool_check_buffer(user, W)) - return - var/obj/item/multitool/M = W - if(panel_open) - M.buffer = src - to_chat(user, "I download the data to the [W.name]'s buffer.") - else - if(M.buffer && istype(M.buffer, /obj/machinery/teleport/station) && M.buffer != src) - if(linked_stations.len < efficiency) - linked_stations.Add(M.buffer) - M.buffer = null - to_chat(user, "I upload the data from the [W.name]'s buffer.") - else - to_chat(user, "This station can't hold more information, try to use better parts.") - return - else if(default_deconstruction_screwdriver(user, "controller-o", "controller", W)) - update_icon() - return - - else if(default_deconstruction_crowbar(W)) - return - - else if(W.tool_behaviour == TOOL_WIRECUTTER) - if(panel_open) - link_console_and_hub() - to_chat(user, "I reconnect the station to nearby machinery.") - return - else - return ..() - -/obj/machinery/teleport/station/interact(mob/user) - toggle(user) - -/obj/machinery/teleport/station/proc/toggle(mob/user) - if(stat & (BROKEN|NOPOWER) || !teleporter_hub || !teleporter_console ) - return - if (teleporter_console.target) - if(teleporter_hub.panel_open || teleporter_hub.stat & (BROKEN|NOPOWER)) - to_chat(user, "The teleporter hub isn't responding.") - else - engaged = !engaged - use_power(5000) - to_chat(user, "Teleporter [engaged ? "" : "dis"]engaged!") - else - to_chat(user, "No target detected.") - engaged = FALSE - teleporter_hub.update_icon() - add_fingerprint(user) - -/obj/machinery/teleport/station/power_change() - . = ..() - if(teleporter_hub) - teleporter_hub.update_icon() - -/obj/machinery/teleport/station/update_icon_state() - if(panel_open) - icon_state = "controller-o" - else if(stat & (BROKEN|NOPOWER)) - icon_state = "controller-p" - else if(teleporter_console && teleporter_console.calibrating) - icon_state = "controller-c" - else - icon_state = "controller" diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm deleted file mode 100644 index a65bc6b65f..0000000000 --- a/code/game/machinery/transformer.dm +++ /dev/null @@ -1,109 +0,0 @@ -/obj/machinery/transformer - name = "\improper Automatic Robotic Factory 5000" - desc = "A large metallic machine with an entrance and an exit. A sign on \ - the side reads, 'human go in, robot come out'. The human must be \ - lying down and alive. Has to cooldown between each use." - icon = 'icons/obj/recycling.dmi' - icon_state = "separator-AO1" - layer = ABOVE_ALL_MOB_LAYER // Overhead - density = FALSE - var/transform_dead = 0 - var/transform_standing = 0 - var/cooldown_duration = 600 // 1 minute - var/cooldown = 0 - var/cooldown_timer - var/robot_cell_charge = 5000 - var/obj/effect/countdown/transformer/countdown - var/mob/living/silicon/ai/masterAI - -/obj/machinery/transformer/Initialize() - // On us - . = ..() - new /obj/machinery/conveyor/auto(locate(x - 1, y, z), WEST) - new /obj/machinery/conveyor/auto(loc, WEST) - new /obj/machinery/conveyor/auto(locate(x + 1, y, z), WEST) - countdown = new(src) - countdown.start() - -/obj/machinery/transformer/examine(mob/user) - . = ..() - if(cooldown && (issilicon(user) || isobserver(user))) - . += "It will be ready in [DisplayTimeText(cooldown_timer - world.time)]." - -/obj/machinery/transformer/Destroy() - QDEL_NULL(countdown) - . = ..() - -/obj/machinery/transformer/update_icon_state() - if(stat & (BROKEN|NOPOWER) || cooldown == 1) - icon_state = "separator-AO0" - else - icon_state = initial(icon_state) - -/obj/machinery/transformer/Bumped(atom/movable/AM) - if(cooldown == 1) - return - - // Crossed didn't like people lying down. - if(ishuman(AM)) - // Only humans can enter from the west side, while lying down. - var/move_dir = get_dir(loc, AM.loc) - var/mob/living/carbon/human/H = AM - if((transform_standing || !(H.mobility_flags & MOBILITY_STAND)) && move_dir == EAST)// || move_dir == WEST) - AM.forceMove(drop_location()) - do_transform(AM) - -/obj/machinery/transformer/CanPass(atom/movable/mover, turf/target) - // Allows items to go through, - // to stop them from blocking the conveyor belt. - if(!ishuman(mover)) - var/dir = get_dir(src, mover) - if(dir == EAST) - return ..() - return 0 - -/obj/machinery/transformer/process() - if(cooldown && (cooldown_timer <= world.time)) - cooldown = FALSE - update_icon() - -/obj/machinery/transformer/proc/do_transform(mob/living/carbon/human/H) - if(stat & (BROKEN|NOPOWER)) - return - if(cooldown == 1) - return - - if(!transform_dead && H.stat == DEAD) - playsound(src.loc, 'sound/blank.ogg', 50, FALSE) - return - - // Activate the cooldown - cooldown = 1 - cooldown_timer = world.time + cooldown_duration - update_icon() - - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - H.emote("scream") // It is painful - H.adjustBruteLoss(max(0, 80 - H.getBruteLoss())) // Hurt the human, don't try to kill them though. - - // Sleep for a couple of ticks to allow the human to see the pain - sleep(5) - - use_power(5000) // Use a lot of power. - var/mob/living/silicon/robot/R = H.Robotize() - R.cell = new /obj/item/stock_parts/cell/upgraded/plus(R, robot_cell_charge) - - // So he can't jump out the gate right away. - R.SetLockdown() - if(masterAI) - R.connected_ai = masterAI - R.lawsync() - R.lawupdate = 1 - addtimer(CALLBACK(src, PROC_REF(unlock_new_robot), R), 50) - -/obj/machinery/transformer/proc/unlock_new_robot(mob/living/silicon/robot/R) - playsound(src.loc, 'sound/blank.ogg', 50, FALSE) - sleep(30) - if(R) - R.SetLockdown(0) - R.notify_ai(NEW_BORG) diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm deleted file mode 100644 index d1be4baacb..0000000000 --- a/code/game/machinery/washing_machine.dm +++ /dev/null @@ -1,334 +0,0 @@ -//dye registry, add dye colors and their resulting output here if you want the sprite to change instead of just the color. -GLOBAL_LIST_INIT(dye_registry, list( - DYE_REGISTRY_UNDER = list( - DYE_RED = /obj/item/clothing/under/color/red, - DYE_ORANGE = /obj/item/clothing/under/color/orange, - DYE_YELLOW = /obj/item/clothing/under/color/yellow, - DYE_GREEN = /obj/item/clothing/under/color/green, - DYE_BLUE = /obj/item/clothing/under/color/blue, - DYE_PURPLE = /obj/item/clothing/under/color/lightpurple, - DYE_BLACK = /obj/item/clothing/under/color/black, - DYE_WHITE = /obj/item/clothing/under/color/white, - DYE_RAINBOW = /obj/item/clothing/under/color/rainbow, - DYE_MIME = /obj/item/clothing/under/rank/civilian/mime, - DYE_CLOWN = /obj/item/clothing/under/rank/civilian/clown, - DYE_QM = /obj/item/clothing/under/rank/cargo/qm, - DYE_LAW = /obj/item/clothing/under/suit/black, - DYE_CAPTAIN = /obj/item/clothing/under/rank/captain, - DYE_HOP = /obj/item/clothing/under/rank/civilian/head_of_personnel, - DYE_HOS = /obj/item/clothing/under/rank/security/head_of_security, - DYE_CE = /obj/item/clothing/under/rank/engineering/chief_engineer, - DYE_RD = /obj/item/clothing/under/rank/rnd/research_director, - DYE_CMO = /obj/item/clothing/under/rank/medical/chief_medical_officer, - DYE_REDCOAT = /obj/item/clothing/under/costume/redcoat - ), - DYE_REGISTRY_JUMPSKIRT = list( - DYE_RED = /obj/item/clothing/under/color/jumpskirt/red, - DYE_ORANGE = /obj/item/clothing/under/color/jumpskirt/orange, - DYE_YELLOW = /obj/item/clothing/under/color/jumpskirt/yellow, - DYE_GREEN = /obj/item/clothing/under/color/jumpskirt/green, - DYE_BLUE = /obj/item/clothing/under/color/jumpskirt/blue, - DYE_PURPLE = /obj/item/clothing/under/color/jumpskirt/lightpurple, - DYE_BLACK = /obj/item/clothing/under/color/jumpskirt/black, - DYE_WHITE = /obj/item/clothing/under/color/jumpskirt/white, - DYE_RAINBOW = /obj/item/clothing/under/color/jumpskirt/rainbow - ), - DYE_REGISTRY_GLOVES = list( - DYE_RED = /obj/item/clothing/gloves/color/red, - DYE_ORANGE = /obj/item/clothing/gloves/color/orange, - DYE_YELLOW = /obj/item/clothing/gloves/color/yellow, - DYE_GREEN = /obj/item/clothing/gloves/color/green, - DYE_BLUE = /obj/item/clothing/gloves/color/blue, - DYE_PURPLE = /obj/item/clothing/gloves/color/purple, - DYE_BLACK = /obj/item/clothing/gloves/color/black, - DYE_WHITE = /obj/item/clothing/gloves/color/white, - DYE_RAINBOW = /obj/item/clothing/gloves/color/rainbow, - DYE_MIME = /obj/item/clothing/gloves/color/white, - DYE_CLOWN = /obj/item/clothing/gloves/color/rainbow, - DYE_QM = /obj/item/clothing/gloves/color/brown, - DYE_CAPTAIN = /obj/item/clothing/gloves/color/captain, - DYE_HOP = /obj/item/clothing/gloves/color/grey, - DYE_HOS = /obj/item/clothing/gloves/color/black, - DYE_CE = /obj/item/clothing/gloves/color/black, - DYE_RD = /obj/item/clothing/gloves/color/grey, - DYE_CMO = /obj/item/clothing/gloves/color/latex/nitrile, - DYE_REDCOAT = /obj/item/clothing/gloves/color/white - ), - DYE_REGISTRY_SNEAKERS = list( - DYE_RED = /obj/item/clothing/shoes/sneakers/red, - DYE_ORANGE = /obj/item/clothing/shoes/sneakers/orange, - DYE_YELLOW = /obj/item/clothing/shoes/sneakers/yellow, - DYE_GREEN = /obj/item/clothing/shoes/sneakers/green, - DYE_BLUE = /obj/item/clothing/shoes/sneakers/blue, - DYE_PURPLE = /obj/item/clothing/shoes/sneakers/purple, - DYE_BLACK = /obj/item/clothing/shoes/sneakers/black, - DYE_WHITE = /obj/item/clothing/shoes/sneakers/white, - DYE_RAINBOW = /obj/item/clothing/shoes/sneakers/rainbow, - DYE_MIME = /obj/item/clothing/shoes/sneakers/black, - DYE_QM = /obj/item/clothing/shoes/sneakers/brown, - DYE_CAPTAIN = /obj/item/clothing/shoes/sneakers/brown, - DYE_HOP = /obj/item/clothing/shoes/sneakers/brown, - DYE_CE = /obj/item/clothing/shoes/sneakers/brown, - DYE_RD = /obj/item/clothing/shoes/sneakers/brown, - DYE_CMO = /obj/item/clothing/shoes/sneakers/brown - ), - DYE_REGISTRY_FANNYPACK = list( - DYE_RED = /obj/item/storage/belt/fannypack/red, - DYE_ORANGE = /obj/item/storage/belt/fannypack/orange, - DYE_YELLOW = /obj/item/storage/belt/fannypack/yellow, - DYE_GREEN = /obj/item/storage/belt/fannypack/green, - DYE_BLUE = /obj/item/storage/belt/fannypack/blue, - DYE_PURPLE = /obj/item/storage/belt/fannypack/purple, - DYE_BLACK = /obj/item/storage/belt/fannypack/black, - DYE_WHITE = /obj/item/storage/belt/fannypack/white - ), - DYE_REGISTRY_BEDSHEET = list( - DYE_RED = /obj/item/bedsheet/red, - DYE_ORANGE = /obj/item/bedsheet/orange, - DYE_YELLOW = /obj/item/bedsheet/yellow, - DYE_GREEN = /obj/item/bedsheet/green, - DYE_BLUE = /obj/item/bedsheet/blue, - DYE_PURPLE = /obj/item/bedsheet/purple, - DYE_BLACK = /obj/item/bedsheet/black, - DYE_WHITE = /obj/item/bedsheet, - DYE_RAINBOW = /obj/item/bedsheet/rainbow, - DYE_MIME = /obj/item/bedsheet/mime, - DYE_CLOWN = /obj/item/bedsheet/clown, - DYE_QM = /obj/item/bedsheet/qm, - DYE_LAW = /obj/item/bedsheet/black, - DYE_CAPTAIN = /obj/item/bedsheet/captain, - DYE_HOP = /obj/item/bedsheet/hop, - DYE_HOS = /obj/item/bedsheet/hos, - DYE_CE = /obj/item/bedsheet/ce, - DYE_RD = /obj/item/bedsheet/rd, - DYE_CMO = /obj/item/bedsheet/cmo, - DYE_COSMIC = /obj/item/bedsheet/cosmos - ), - DYE_LAWYER_SPECIAL = list( - DYE_COSMIC = /obj/item/clothing/under/rank/civilian/lawyer/galaxy, - DYE_SYNDICATE = /obj/item/clothing/under/rank/civilian/lawyer/galaxy/red - ) -)) - -/obj/machinery/washing_machine - name = "washing machine" - desc = "" - icon = 'icons/obj/machines/washing_machine.dmi' - icon_state = "wm_1_0" - density = TRUE - state_open = TRUE - var/busy = FALSE - var/bloody_mess = 0 - var/obj/item/color_source - var/max_wash_capacity = 5 - -/obj/machinery/washing_machine/ComponentInitialize() - . = ..() - RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, PROC_REF(clean_blood)) - -/obj/machinery/washing_machine/examine(mob/user) - . = ..() - if(!busy) - . += "Alt-click it to start a wash cycle." - -/obj/machinery/washing_machine/AltClick(mob/user) - if(!user.canUseTopic(src, !issilicon(user))) - return - if(busy) - return - if(state_open) - to_chat(user, "Close the door first!") - return - if(bloody_mess) - to_chat(user, "[src] must be cleaned up first!") - return - busy = TRUE - update_icon() - addtimer(CALLBACK(src, PROC_REF(wash_cycle)), 200) - - START_PROCESSING(SSfastprocess, src) - -/obj/machinery/washing_machine/process() - if(!busy) - animate(src, transform=matrix(), time=2) - return PROCESS_KILL - if(anchored) - if(prob(5)) - var/matrix/M = new - M.Translate(rand(-1, 1), rand(0, 1)) - animate(src, transform=M, time=1) - animate(transform=matrix(), time=1) - else - if(prob(1)) - step(src, pick(GLOB.cardinals)) - var/matrix/M = new - M.Translate(rand(-3, 3), rand(-1, 3)) - animate(src, transform=M, time=2) - -/obj/machinery/washing_machine/proc/clean_blood() - if(!busy) - bloody_mess = FALSE - update_icon() - -/obj/machinery/washing_machine/proc/wash_cycle() - for(var/X in contents) - var/atom/movable/AM = X - SEND_SIGNAL(AM, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) - AM.machine_wash(src) - - busy = FALSE - if(color_source) - qdel(color_source) - color_source = null - update_icon() - -/obj/item/proc/dye_item(dye_color, dye_key_override) - var/dye_key_selector = dye_key_override ? dye_key_override : dying_key - if(undyeable) - return FALSE - if(dye_key_selector) - if(!GLOB.dye_registry[dye_key_selector]) - log_runtime("Item just tried to be dyed with an invalid registry key: [dye_key_selector]") - return FALSE - var/obj/item/target_type = GLOB.dye_registry[dye_key_selector][dye_color] - if(target_type) - icon = initial(target_type.icon) - icon_state = initial(target_type.icon_state) - lefthand_file = initial(target_type.lefthand_file) - righthand_file = initial(target_type.righthand_file) - item_state = initial(target_type.item_state) - mob_overlay_icon = initial(target_type.mob_overlay_icon) - inhand_x_dimension = initial(target_type.inhand_x_dimension) - inhand_y_dimension = initial(target_type.inhand_y_dimension) - name = initial(target_type.name) - desc = "" - return target_type //successfully "appearance copy" dyed something; returns the target type as a hacky way of extending - add_atom_colour(dye_color, FIXED_COLOUR_PRIORITY) - return FALSE - -//what happens to this object when washed inside a washing machine -/atom/movable/proc/machine_wash(obj/machinery/washing_machine/WM) - return - -/obj/item/stack/sheet/hairlesshide/machine_wash(obj/machinery/washing_machine/WM) - new /obj/item/stack/sheet/wetleather(drop_location(), amount) - qdel(src) - -/obj/item/clothing/suit/hooded/ian_costume/machine_wash(obj/machinery/washing_machine/WM) - new /obj/item/reagent_containers/food/snacks/meat/slab/corgi(loc) - qdel(src) - -/mob/living/simple_animal/pet/dog/corgi/machine_wash(obj/machinery/washing_machine/WM) - WM.bloody_mess = TRUE - gib() - -/obj/item/machine_wash(obj/machinery/washing_machine/WM) - if(WM.color_source) - dye_item(WM.color_source.dye_color) - -/obj/item/clothing/under/dye_item(dye_color, dye_key) - . = ..() - if(.) - var/obj/item/clothing/under/U = . - can_adjust = initial(U.can_adjust) - if(!can_adjust && adjusted) //we deadjust the uniform if it's now unadjustable - toggle_jumpsuit_adjust() - -/obj/item/clothing/under/machine_wash(obj/machinery/washing_machine/WM) - freshly_laundered = TRUE - addtimer(VARSET_CALLBACK(src, freshly_laundered, FALSE), 5 MINUTES, TIMER_UNIQUE | TIMER_OVERRIDE) - ..() - -/obj/item/clothing/shoes/sneakers/machine_wash(obj/machinery/washing_machine/WM) - if(chained) - chained = 0 - slowdown = SHOES_SLOWDOWN - new /obj/item/restraints/handcuffs(loc) - ..() - -/obj/machinery/washing_machine/relaymove(mob/user) - container_resist(user) - -/obj/machinery/washing_machine/container_resist(mob/living/user) - if(!busy) - add_fingerprint(user) - open_machine() - -/obj/machinery/washing_machine/update_icon_state() - if(busy) - icon_state = "wm_running_[bloody_mess]" - else if(bloody_mess) - icon_state = "wm_[state_open]_blood" - else - var/full = contents.len ? 1 : 0 - icon_state = "wm_[state_open]_[full]" - -/obj/machinery/washing_machine/update_overlays() - . = ..() - if(panel_open) - . += "wm_panel" - -/obj/machinery/washing_machine/attackby(obj/item/W, mob/user, params) - if(panel_open && !busy && default_unfasten_wrench(user, W)) - return - - if(default_deconstruction_screwdriver(user, null, null, W)) - update_icon() - return - - else if(user.used_intent.type != INTENT_HARM) - if (!state_open) - to_chat(user, "Open the door first!") - return TRUE - - if(bloody_mess) - to_chat(user, "[src] must be cleaned up first!") - return TRUE - - if(contents.len >= max_wash_capacity) - to_chat(user, "The washing machine is full!") - return TRUE - - if(!user.transferItemToLoc(W, src)) - to_chat(user, "\The [W] is stuck to your hand, you cannot put it in the washing machine!") - return TRUE - - if(W.dye_color) - color_source = W - update_icon() - - else - return ..() - -/obj/machinery/washing_machine/attack_hand(mob/user) - . = ..() - if(.) - return - if(busy) - to_chat(user, "[src] is busy!") - return - - if(user.pulling && user.used_intent.type == INTENT_GRAB && isliving(user.pulling)) - var/mob/living/L = user.pulling - if(L.buckled || L.has_buckled_mobs()) - return - if(state_open) - if(iscorgi(L)) - L.forceMove(src) - update_icon() - return - - if(!state_open) - open_machine() - else - state_open = FALSE //close the door - update_icon() - -/obj/machinery/washing_machine/deconstruct(disassembled = TRUE) - new /obj/item/stack/sheet/metal(drop_location(), 2) - qdel(src) - -/obj/machinery/washing_machine/open_machine(drop = 1) - ..() - density = TRUE //because machinery/open_machine() sets it to 0 - color_source = null diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm deleted file mode 100644 index cfe5d22e3e..0000000000 --- a/code/game/machinery/wishgranter.dm +++ /dev/null @@ -1,43 +0,0 @@ -/obj/machinery/wish_granter - name = "wish granter" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "syndbeacon" - - use_power = NO_POWER_USE - density = TRUE - - var/charges = 1 - var/insisting = 0 - -/obj/machinery/wish_granter/attack_hand(mob/living/carbon/user) - . = ..() - if(.) - return - if(charges <= 0) - to_chat(user, "The Wish Granter lies silent.") - return - - else if(!ishuman(user)) - to_chat(user, "I feel a dark stirring inside of the Wish Granter, something you want nothing of. Your instincts are better than any man's.") - return - - else if(is_special_character(user)) - to_chat(user, "Even to a heart as dark as yours, you know nothing good will come of this. Something instinctual makes you pull away.") - - else if (!insisting) - to_chat(user, "My first touch makes the Wish Granter stir, listening to you. Are you really sure you want to do this?") - insisting++ - - else - to_chat(user, "I speak. [pick("I want the station to disappear","Humanity is corrupt, mankind must be destroyed","I want to be rich", "I want to rule the world","I want immortality.")]. The Wish Granter answers.") - to_chat(user, "My head pounds for a moment, before my vision clears. You are the avatar of the Wish Granter, and my power is LIMITLESS! And it's all yours. You need to make sure no one can take it from you. No one can know, first.") - - charges-- - insisting = 0 - - user.mind.add_antag_datum(/datum/antagonist/wishgranter) - - to_chat(user, "I have a very bad feeling about this.") - - return diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm deleted file mode 100644 index 02edafe69e..0000000000 --- a/code/game/mecha/combat/combat.dm +++ /dev/null @@ -1,18 +0,0 @@ -/obj/mecha/combat - force = 30 - internals_req_access = list(ACCESS_MECH_SCIENCE, ACCESS_MECH_SECURITY) - internal_damage_threshold = 50 - armor = list("melee" = 30, "bullet" = 30, "laser" = 15, "energy" = 20, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) - mouse_pointer = 'icons/mecha/mecha_mouse.dmi' - destruction_sleep_duration = 40 - exit_delay = 40 - -/obj/mecha/combat/restore_equipment() - mouse_pointer = 'icons/mecha/mecha_mouse.dmi' - . = ..() - -/obj/mecha/combat/proc/max_ammo() //Max the ammo stored for Nuke Ops mechs, or anyone else that calls this - for(var/obj/item/I in equipment) - if(istype(I, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/)) - var/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/gun = I - gun.projectiles_cache = gun.projectiles_cache_max diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm deleted file mode 100644 index b4a8edf733..0000000000 --- a/code/game/mecha/combat/durand.dm +++ /dev/null @@ -1,210 +0,0 @@ -/obj/mecha/combat/durand - desc = "" - name = "\improper Durand" - icon_state = "durand" - step_in = 4 - dir_in = 1 //Facing North. - max_integrity = 400 - deflect_chance = 20 - armor = list("melee" = 40, "bullet" = 35, "laser" = 15, "energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 50, "fire" = 100, "acid" = 100) - max_temperature = 30000 - infra_luminosity = 8 - force = 40 - wreckage = /obj/structure/mecha_wreckage/durand - var/obj/durand_shield/shield - -/obj/mecha/combat/durand/Initialize() - shield = new/obj/durand_shield - shield.chassis = src - shield.layer = layer - RegisterSignal(src, COMSIG_MECHA_ACTION_ACTIVATE, PROC_REF(relay)) - RegisterSignal(src, COMSIG_PROJECTILE_PREHIT, PROC_REF(prehit)) - . = ..() - -/obj/mecha/combat/durand/Destroy() - if(shield) - qdel(shield) - . = ..() - -/obj/mecha/combat/durand/GrantActions(mob/living/user, human_occupant = 0) - ..() - defense_action.Grant(user, src) - -/obj/mecha/combat/durand/RemoveActions(mob/living/user, human_occupant = 0) - ..() - defense_action.Remove(user) - -/obj/mecha/combat/durand/process() - . = ..() - if(defense_mode && !use_power(100)) - defense_action.Activate(forced_state = TRUE) - -/obj/mecha/combat/durand/domove(direction) - . = ..() - if(shield) - shield.forceMove(loc) - shield.dir = dir - -/obj/mecha/combat/durand/forceMove(turf/T) - . = ..() - shield.forceMove(T) - -/obj/mecha/combat/durand/go_out(forced, atom/newloc = loc) - if(defense_mode) - defense_action.Activate(forced_state = TRUE) - . = ..() - -///Relays the signal from the action button to the shield, and creates a new shield if the old one is MIA. -/obj/mecha/combat/durand/proc/relay(datum/source, list/signal_args) - if(!shield) //if the shield somehow got deleted - shield = new/obj/durand_shield - shield.chassis = src - shield.layer = layer - shield.forceMove(loc) - shield.dir = dir - SEND_SIGNAL(shield, COMSIG_MECHA_ACTION_ACTIVATE, source, signal_args) - -//Redirects projectiles to the shield if defense_check decides they should be blocked and returns true. -/obj/mecha/combat/durand/proc/prehit(obj/projectile/source, list/signal_args) - if(defense_check(source.loc) && shield) - signal_args[2] = shield - - -/**Checks if defense mode is enabled, and if the attacker is standing in an area covered by the shield. -Expects a turf. Returns true if the attack should be blocked, false if not.*/ -/obj/mecha/combat/durand/proc/defense_check(turf/aloc) - if (!defense_mode || !shield || shield.switching) - return FALSE - . = FALSE - switch(dir) - if (1) - if(abs(x - aloc.x) <= (y - aloc.y) * -2) - . = TRUE - if (2) - if(abs(x - aloc.x) <= (y - aloc.y) * 2) - . = TRUE - if (4) - if(abs(y - aloc.y) <= (x - aloc.x) * -2) - . = TRUE - if (8) - if(abs(y - aloc.y) <= (x - aloc.x) * 2) - . = TRUE - return - -/obj/mecha/combat/durand/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) - if(defense_check(user.loc)) - log_message("Attack absorbed by defense field. Attacker - [user].", LOG_MECHA, color="orange") - shield.attack_generic(user, damage_amount, damage_type, damage_flag, sound_effect, armor_penetration) - else - . = ..() - -/obj/mecha/combat/durand/blob_act(obj/structure/blob/B) - if(defense_check(B.loc)) - log_message("Attack by blob. Attacker - [B].", LOG_MECHA, color="red") - log_message("Attack absorbed by defense field.", LOG_MECHA, color="orange") - shield.blob_act(B) - else - . = ..() - -/obj/mecha/combat/durand/attackby(obj/item/W as obj, mob/user as mob, params) - if(defense_check(user.loc)) - log_message("Attack absorbed by defense field. Attacker - [user], with [W]", LOG_MECHA, color="orange") - shield.attackby(W, user, params) - else - . = ..() - -/obj/mecha/combat/durand/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) - if(defense_check(AM.loc)) - log_message("Impact with [AM] absorbed by defense field.", LOG_MECHA, color="orange") - shield.hitby(AM, skipcatch, hitpush, blocked, throwingdatum) - else - . = ..() - -//////////////////////////// -///// Shield processing //// -//////////////////////////// - -/**An object to take the hit for us when using the Durand's defense mode. -It is spawned in during the durand's initilization, and always stays on the same tile. -Normally invisible, until defense mode is actvated. When the durand detects an attack that should be blocked, the -attack is passed to the shield. The shield takes the damage, uses it to calculate charge cost, and then sets its -own integrity back to max. Shield is automatically dropped if we run out of power or the user gets out.*/ - -/obj/durand_shield //projectiles get passed to this when defense mode is enabled - name = "defense grid" - icon = 'icons/mecha/durand_shield.dmi' - icon_state = "shield_null" - invisibility = INVISIBILITY_MAXIMUM //no showing on right-click - pixel_y = 4 - max_integrity = 10000 - obj_integrity = 10000 - anchored = TRUE - var/obj/mecha/combat/durand/chassis ///Our link back to the durand - var/switching = FALSE ///To keep track of things during the animation - -/obj/durand_shield/Initialize() - . = ..() - RegisterSignal(src, COMSIG_MECHA_ACTION_ACTIVATE, PROC_REF(activate)) - -/obj/durand_shield/Destroy() - if(chassis) - chassis.shield = null - . = ..() - -/**Handles activating and deactivating the shield. This proc is called by a signal sent from the mech's action button -and relayed by the mech itself. The "forced" variabe, signal_args[1], will skip the to-pilot text and is meant for when -the shield is disabled by means other than the action button (like running out of power)*/ - -/obj/durand_shield/proc/activate(datum/source, datum/action/innate/mecha/mech_defense_mode/button, list/signal_args) - if(!chassis || !chassis.occupant) - return - if(switching && !signal_args[1]) - return - if(!chassis.defense_mode && (!chassis.cell || chassis.cell.charge < 100)) //If it's off, and we have less than 100 units of power - chassis.occupant_message("Insufficient power; cannot activate defense mode.") - return - switching = TRUE - chassis.defense_mode = !chassis.defense_mode - chassis.defense_action.button_icon_state = "mech_defense_mode_[chassis.defense_mode ? "on" : "off"]" //This is backwards because we haven't changed the var yet - if(!signal_args[1]) - chassis.occupant_message("Defense mode [chassis.defense_mode?"enabled":"disabled"].") - chassis.log_message("User has toggled defense mode -- now [chassis.defense_mode?"enabled":"disabled"].", LOG_MECHA) - else - chassis.log_message("defense mode state changed -- now [chassis.defense_mode?"enabled":"disabled"].", LOG_MECHA) - chassis.defense_action.UpdateButtonIcon() - - if(chassis.defense_mode) - invisibility = 0 - flick("shield_raise", src) - playsound(src, 'sound/blank.ogg', 50, FALSE) - set_light(l_range = MINIMUM_USEFUL_LIGHT_RANGE , l_power = 5, l_color = "#00FFFF") - sleep(3) - icon_state = "shield" - else - flick("shield_drop", src) - playsound(src, 'sound/blank.ogg', 50, FALSE) - sleep(5) - set_light(0) - icon_state = "shield_null" - invisibility = INVISIBILITY_MAXIMUM //no showing on right-click - switching = FALSE - -/obj/durand_shield/take_damage() - if(!chassis) - qdel(src) - return - if(!chassis.defense_mode) //if defense mode is disabled, we're taking damage that we shouldn't be taking - return - . = ..() - flick("shield_impact", src) - if(!chassis.use_power((max_integrity - obj_integrity) * 100)) - chassis.cell?.charge = 0 - chassis.defense_action.Activate(forced_state = TRUE) - obj_integrity = 10000 - -/obj/durand_shield/play_attack_sound() - playsound(src, 'sound/blank.ogg', 100, TRUE) - -/obj/durand_shield/bullet_act() - play_attack_sound() - . = ..() diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm deleted file mode 100644 index b9a4a745dc..0000000000 --- a/code/game/mecha/combat/gygax.dm +++ /dev/null @@ -1,68 +0,0 @@ -/obj/mecha/combat/gygax - desc = "" - name = "\improper Gygax" - icon_state = "gygax" - step_in = 3 - dir_in = 1 //Facing North. - max_integrity = 250 - deflect_chance = 5 - armor = list("melee" = 25, "bullet" = 20, "laser" = 30, "energy" = 15, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) - max_temperature = 25000 - leg_overload_coeff = 80 - infra_luminosity = 6 - force = 25 - wreckage = /obj/structure/mecha_wreckage/gygax - internal_damage_threshold = 35 - max_equip = 3 - step_energy_drain = 3 - -/obj/mecha/combat/gygax/mechturn(direction) - . = ..() - if(!strafe && !occupant.client.keys_held["Alt"]) - mechstep(direction) //agile mechs get to move and turn in the same step - -/obj/mecha/combat/gygax/dark - desc = "" - name = "\improper Dark Gygax" - icon_state = "darkgygax" - max_integrity = 300 - deflect_chance = 15 - armor = list("melee" = 40, "bullet" = 40, "laser" = 50, "energy" = 35, "bomb" = 20, "bio" = 0, "rad" =20, "fire" = 100, "acid" = 100) - max_temperature = 35000 - leg_overload_coeff = 70 - operation_req_access = list(ACCESS_SYNDICATE) - internals_req_access = list(ACCESS_SYNDICATE) - wreckage = /obj/structure/mecha_wreckage/gygax/dark - max_equip = 5 - destruction_sleep_duration = 20 - -/obj/mecha/combat/gygax/dark/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/thrusters/ion(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/teleporter - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay - ME.attach(src) - max_ammo() - -/obj/mecha/combat/gygax/dark/add_cell(obj/item/stock_parts/cell/C=null) - if(C) - C.forceMove(src) - cell = C - return - cell = new /obj/item/stock_parts/cell/hyper(src) - - -/obj/mecha/combat/gygax/GrantActions(mob/living/user, human_occupant = 0) - ..() - overload_action.Grant(user, src) - - -/obj/mecha/combat/gygax/RemoveActions(mob/living/user, human_occupant = 0) - ..() - overload_action.Remove(user) diff --git a/code/game/mecha/combat/honker.dm b/code/game/mecha/combat/honker.dm deleted file mode 100644 index 468f444418..0000000000 --- a/code/game/mecha/combat/honker.dm +++ /dev/null @@ -1,175 +0,0 @@ -/obj/mecha/combat/honker - desc = "" - name = "\improper H.O.N.K" - icon_state = "honker" - step_in = 3 - max_integrity = 140 - deflect_chance = 60 - internal_damage_threshold = 60 - armor = list("melee" = -20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) - max_temperature = 25000 - infra_luminosity = 5 - operation_req_access = list(ACCESS_THEATRE) - internals_req_access = list(ACCESS_MECH_SCIENCE, ACCESS_THEATRE) - wreckage = /obj/structure/mecha_wreckage/honker - add_req_access = 0 - max_equip = 3 - var/squeak = TRUE - -/obj/mecha/combat/honker/get_stats_part() - var/integrity = obj_integrity/max_integrity*100 - var/cell_charge = get_charge() - var/datum/gas_mixture/int_tank_air = internal_tank.return_air() - var/tank_pressure = internal_tank ? round(int_tank_air.return_pressure(),0.01) : "None" - var/tank_temperature = internal_tank ? int_tank_air.temperature : "Unknown" - var/cabin_pressure = round(return_pressure(),0.01) - var/output = {"[report_internal_damage()] - [integrity<30?"DAMAGE LEVEL CRITICAL
          ":null] - [internal_damage&MECHA_INT_TEMP_CONTROL?"CLOWN SUPPORT SYSTEM MALFUNCTION
          ":null] - [internal_damage&MECHA_INT_TANK_BREACH?"GAS TANK HONK
          ":null] - [internal_damage&MECHA_INT_CONTROL_LOST?"HONK-A-DOODLE - Recalibrate
          ":null] - IntegriHONK: [integrity]%
          - PowerHONK charge: [isnull(cell_charge)?"No powercell installed":"[cell.percent()]%"]
          - Air source: [use_internal_tank?"Internal Airtank":"Environment"]
          - AirHONK pressure: [tank_pressure]kPa
          - AirHONK temperature: [tank_temperature]°K|[tank_temperature - T0C]°C
          - HONK pressure: [cabin_pressure>WARNING_HIGH_PRESSURE ? "[cabin_pressure]": cabin_pressure]kPa
          - HONK temperature: [return_temperature()]°K|[return_temperature() - T0C]°C
          - Lights: [lights?"on":"off"]
          - [dna_lock?"DNA-locked:
          [dna_lock] \[Reset\]
          ":null] - "} - return output - -/obj/mecha/combat/honker/get_stats_html() - var/output = {" - [src.name] data - - - - -
          - [src.get_stats_part()] -
          -
          - [src.get_equipment_list()] -
          -
          -
          - [src.get_commands()] -
          - - - "} - return output - -/obj/mecha/combat/honker/get_commands() - var/output = {" - "} - output += ..() - return output - - -/obj/mecha/combat/honker/get_equipment_list() - if(!equipment.len) - return - var/output = "Honk-ON-Systems:
          " - for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment) - output += "
          [MT.get_equip_info()]
          " - output += "
          " - return output - -/obj/mecha/combat/honker/play_stepsound() - if(squeak) - playsound(src, "clownstep", 70, 1) - squeak = !squeak - -/obj/mecha/combat/honker/Topic(href, href_list) - ..() - if (href_list["play_sound"]) - switch(href_list["play_sound"]) - if("sadtrombone") - playsound(src, 'sound/blank.ogg', 50) - if("bikehorn") - playsound(src, 'sound/blank.ogg', 50) - if("airhorn2") - playsound(src, 'sound/blank.ogg', 40) //soundfile has higher than average volume - if("carhorn") - playsound(src, 'sound/blank.ogg', 80) //soundfile has lower than average volume - if("party_horn") - playsound(src, 'sound/blank.ogg', 50) - if("reee") - playsound(src, 'sound/blank.ogg', 50) - if("weeoo1") - playsound(src, 'sound/blank.ogg', 50) - if("hiss1") - playsound(src, 'sound/blank.ogg', 50) - if("armbomb") - playsound(src, 'sound/blank.ogg', 50) - if("saberon") - playsound(src, 'sound/blank.ogg', 50) - if("airlock_alien_prying") - playsound(src, 'sound/blank.ogg', 50) - if("lightningbolt") - playsound(src, 'sound/blank.ogg', 50) - if("explosionfar") - playsound(src, 'sound/blank.ogg', 50) - return - -/proc/rand_hex_color() - var/list/colors = list("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f") - var/color="" - for (var/i=0;i<6;i++) - color = color+pick(colors) - return color - - diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm deleted file mode 100644 index 72e218354d..0000000000 --- a/code/game/mecha/combat/marauder.dm +++ /dev/null @@ -1,103 +0,0 @@ -/obj/mecha/combat/marauder - desc = "" - name = "\improper Marauder" - icon_state = "marauder" - step_in = 5 - max_integrity = 500 - deflect_chance = 25 - armor = list("melee" = 50, "bullet" = 55, "laser" = 40, "energy" = 30, "bomb" = 30, "bio" = 0, "rad" = 60, "fire" = 100, "acid" = 100) - max_temperature = 60000 - resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - infra_luminosity = 3 - operation_req_access = list(ACCESS_CENT_SPECOPS) - internals_req_access = list(ACCESS_CENT_SPECOPS) - wreckage = /obj/structure/mecha_wreckage/marauder - add_req_access = 0 - internal_damage_threshold = 25 - force = 45 - max_equip = 5 - bumpsmash = 1 - -/obj/mecha/combat/marauder/GrantActions(mob/living/user, human_occupant = 0) - ..() - smoke_action.Grant(user, src) - zoom_action.Grant(user, src) - -/obj/mecha/combat/marauder/RemoveActions(mob/living/user, human_occupant = 0) - ..() - smoke_action.Remove(user) - zoom_action.Remove(user) - -/obj/mecha/combat/marauder/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/thrusters/ion(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) - ME.attach(src) - max_ammo() - -/obj/mecha/combat/marauder/seraph - desc = "" - name = "\improper Seraph" - icon_state = "seraph" - operation_req_access = list(ACCESS_CENT_SPECOPS) - internals_req_access = list(ACCESS_CENT_SPECOPS) - step_in = 3 - max_integrity = 550 - wreckage = /obj/structure/mecha_wreckage/seraph - internal_damage_threshold = 20 - force = 55 - max_equip = 6 - -/obj/mecha/combat/marauder/seraph/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/thrusters/ion(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/teleporter(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) - ME.attach(src) - max_ammo() - -/obj/mecha/combat/marauder/mauler - desc = "" - name = "\improper Mauler" - icon_state = "mauler" - operation_req_access = list(ACCESS_SYNDICATE) - internals_req_access = list(ACCESS_SYNDICATE) - wreckage = /obj/structure/mecha_wreckage/mauler - max_equip = 6 - destruction_sleep_duration = 20 - -/obj/mecha/combat/marauder/mauler/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/thrusters/ion(src) - ME.attach(src) - -/obj/mecha/combat/marauder/mauler/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) - ME.attach(src) - max_ammo() - - diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm deleted file mode 100644 index ab082a2fea..0000000000 --- a/code/game/mecha/combat/phazon.dm +++ /dev/null @@ -1,30 +0,0 @@ -/obj/mecha/combat/phazon - desc = "" - name = "\improper Phazon" - icon_state = "phazon" - step_in = 2 - dir_in = 2 //Facing South. - step_energy_drain = 3 - max_integrity = 200 - deflect_chance = 30 - armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 30, "bio" = 0, "rad" = 50, "fire" = 100, "acid" = 100) - max_temperature = 25000 - infra_luminosity = 3 - wreckage = /obj/structure/mecha_wreckage/phazon - add_req_access = 1 - internal_damage_threshold = 25 - force = 15 - max_equip = 3 - phase_state = "phazon-phase" - -/obj/mecha/combat/phazon/GrantActions(mob/living/user, human_occupant = 0) - ..() - switch_damtype_action.Grant(user, src) - phasing_action.Grant(user, src) - - -/obj/mecha/combat/phazon/RemoveActions(mob/living/user, human_occupant = 0) - ..() - switch_damtype_action.Remove(user) - phasing_action.Remove(user) - diff --git a/code/game/mecha/combat/reticence.dm b/code/game/mecha/combat/reticence.dm deleted file mode 100644 index 5bb9bcfa8d..0000000000 --- a/code/game/mecha/combat/reticence.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/mecha/combat/reticence - desc = "" - name = "\improper reticence" - icon_state = "reticence" - step_in = 2 - dir_in = 1 //Facing North. - max_integrity = 100 - deflect_chance = 3 - armor = list("melee" = 25, "bullet" = 20, "laser" = 30, "energy" = 15, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) - max_temperature = 15000 - wreckage = /obj/structure/mecha_wreckage/reticence - operation_req_access = list(ACCESS_THEATRE) - internals_req_access = list(ACCESS_MECH_SCIENCE, ACCESS_THEATRE) - add_req_access = 0 - internal_damage_threshold = 25 - max_equip = 2 - step_energy_drain = 3 - color = "#87878715" - stepsound = null - turnsound = null - opacity = 0 - -/obj/mecha/combat/reticence/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/rcd //HAHA IT MAKES WALLS GET IT - ME.attach(src) diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm deleted file mode 100644 index 603b77b4bf..0000000000 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ /dev/null @@ -1,175 +0,0 @@ -//DO NOT ADD MECHA PARTS TO THE GAME WITH THE DEFAULT "SPRITE ME" SPRITE! -//I'm annoyed I even have to tell you this! SPRITE FIRST, then commit. - -/obj/item/mecha_parts/mecha_equipment - name = "mecha equipment" - icon = 'icons/mecha/mecha_equipment.dmi' - icon_state = "mecha_equip" - force = 5 - max_integrity = 300 - var/equip_cooldown = 0 // cooldown after use - var/equip_ready = 1 //whether the equipment is ready for use. (or deactivated/activated for static stuff) - var/energy_drain = 0 - var/obj/mecha/chassis = null - ///Bitflag. Determines the range of the equipment. - var/range = MECHA_MELEE - var/salvageable = 1 - var/detachable = TRUE // Set to FALSE for built-in equipment that cannot be removed - var/selectable = 1 // Set to 0 for passive equipment such as mining scanner or armor plates - var/harmful = FALSE //Controls if equipment can be used to attack by a pacifist. - -/obj/item/mecha_parts/mecha_equipment/proc/update_chassis_page() - if(chassis) - send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list()) - send_byjax(chassis.occupant,"exosuit.browser","equipment_menu",chassis.get_equipment_menu(),"dropdowns") - return 1 - return - -/obj/item/mecha_parts/mecha_equipment/proc/update_equip_info() - if(chassis) - send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",get_equip_info()) - return 1 - return - -/obj/item/mecha_parts/mecha_equipment/Destroy() - if(chassis) - chassis.equipment -= src - if(chassis.selected == src) - chassis.selected = null - src.update_chassis_page() - log_message("[src] is destroyed.", LOG_MECHA) - if(chassis.occupant) - chassis.occupant_message("[src] is destroyed!") - chassis.occupant.playsound_local(chassis, destroy_sound, 50) - if(!detachable) //If we're a built-in nondetachable equipment, let's lock up the slot that we were in. - chassis.max_equip-- - chassis = null - return ..() - -/obj/item/mecha_parts/mecha_equipment/try_attach_part(mob/user, obj/mecha/M) - if(can_attach(M)) - if(!user.temporarilyRemoveItemFromInventory(src)) - return FALSE - attach(M) - user.visible_message("[user] attaches [src] to [M].", "I attach [src] to [M].") - return TRUE - to_chat(user, "I are unable to attach [src] to [M]!") - return FALSE - -/obj/item/mecha_parts/mecha_equipment/proc/get_equip_info() - if(!chassis) - return - var/txt = "* " - if(chassis.selected == src) - txt += "[src.name]" - else if(selectable) - txt += "[src.name]" - else - txt += "[src.name]" - - return txt - -/obj/item/mecha_parts/mecha_equipment/proc/is_ranged()//add a distance restricted equipment. Why not? - return range&MECHA_RANGED - -/obj/item/mecha_parts/mecha_equipment/proc/is_melee() - return range&MECHA_MELEE - - -/obj/item/mecha_parts/mecha_equipment/proc/action_checks(atom/target) - if(!target) - return 0 - if(!chassis) - return 0 - if(!equip_ready) - return 0 - if(energy_drain && !chassis.has_charge(energy_drain)) - return 0 - if(chassis.is_currently_ejecting) - return 0 - if(chassis.equipment_disabled) - to_chat(chassis.occupant, "Error -- Equipment control unit is unresponsive.") - return 0 - return 1 - -/obj/item/mecha_parts/mecha_equipment/proc/action(atom/target) - return 0 - -/obj/item/mecha_parts/mecha_equipment/proc/start_cooldown() - set_ready_state(0) - chassis.use_power(energy_drain) - addtimer(CALLBACK(src, PROC_REF(set_ready_state), 1), equip_cooldown) - -/obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown(atom/target) - if(!chassis) - return - var/C = chassis.loc - set_ready_state(0) - chassis.use_power(energy_drain) - . = do_after(chassis.occupant, equip_cooldown, target=target) - set_ready_state(1) - if(!chassis || chassis.loc != C || src != chassis.selected || !(get_dir(chassis, target)&chassis.dir)) - return 0 - -/obj/item/mecha_parts/mecha_equipment/proc/do_after_mecha(atom/target, delay) - if(!chassis) - return - var/C = chassis.loc - . = do_after(chassis.occupant, delay, target=target) - if(!chassis || chassis.loc != C || src != chassis.selected || !(get_dir(chassis, target)&chassis.dir)) - return 0 - -/obj/item/mecha_parts/mecha_equipment/proc/can_attach(obj/mecha/M) - if(M.equipment.lenI start putting [target] into [src]...") - chassis.visible_message("[chassis] starts putting [target] into \the [src].") - if(do_after_cooldown(target)) - if(!patient_insertion_check(target)) - return - target.forceMove(src) - patient = target - START_PROCESSING(SSobj, src) - update_equip_info() - occupant_message("[target] successfully loaded into [src]. Life support functions engaged.") - chassis.visible_message("[chassis] loads [target] into [src].") - log_message("[target] loaded. Life support functions engaged.", LOG_MECHA) - -/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/patient_insertion_check(mob/living/carbon/target) - if(target.buckled) - occupant_message("[target] will not fit into the sleeper because [target.p_theyre()] buckled to [target.buckled]!") - return - if(target.has_buckled_mobs()) - occupant_message("[target] will not fit into the sleeper because of the creatures attached to it!") - return - if(patient) - occupant_message("The sleeper is already occupied!") - return - return 1 - -/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/go_out() - if(!patient) - return - patient.forceMove(get_turf(src)) - occupant_message("[patient] ejected. Life support functions disabled.") - log_message("[patient] ejected. Life support functions disabled.", LOG_MECHA) - STOP_PROCESSING(SSobj, src) - patient = null - update_equip_info() - -/obj/item/mecha_parts/mecha_equipment/medical/sleeper/detach() - if(patient) - occupant_message("Unable to detach [src] - equipment occupied!") - return - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/mecha_parts/mecha_equipment/medical/sleeper/get_equip_info() - var/output = ..() - if(output) - var/temp = "" - if(patient) - temp = "
          \[Occupant: [patient] ([patient.stat > 1 ? "*DECEASED*" : "Health: [patient.health]%"])\]
          View stats|Eject" - return "[output] [temp]" - return - -/obj/item/mecha_parts/mecha_equipment/medical/sleeper/Topic(href,href_list) - ..() - if(href_list["eject"]) - go_out() - if(href_list["view_stats"]) - chassis.occupant << browse(get_patient_stats(),"window=msleeper") - onclose(chassis.occupant, "msleeper") - return - if(href_list["inject"]) - var/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/SG = locate() in chassis - var/datum/reagent/R = locate(href_list["inject"]) in SG.reagents.reagent_list - if (istype(R)) - inject_reagent(R, SG) - return - -/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/get_patient_stats() - if(!patient) - return - return {" - - [patient] statistics - - - - -

          Health statistics

          -
          - [get_patient_dam()] -
          -

          Reagents in bloodstream

          -
          - [get_patient_reagents()] -
          -
          - [get_available_reagents()] -
          - - "} - -/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/get_patient_dam() - var/t1 - switch(patient.stat) - if(0) - t1 = "Conscious" - if(1) - t1 = "Unconscious" - if(2) - t1 = "*dead*" - else - t1 = "Unknown" - return {"Health: [patient.stat > 1 ? "[t1]" : "[patient.health]% ([t1])"]
          - Core Temperature: [patient.bodytemperature-T0C]°C ([patient.bodytemperature*1.8-459.67]°F)
          - Brute Damage: [patient.getBruteLoss()]%
          - Respiratory Damage: [patient.getOxyLoss()]%
          - Toxin Content: [patient.getToxLoss()]%
          - Burn Severity: [patient.getFireLoss()]%
          - [patient.getCloneLoss() ? "Subject appears to have cellular damage." : ""]
          - [patient.getOrganLoss(ORGAN_SLOT_BRAIN) ? "Significant brain damage detected." : ""]
          - [length(patient.get_traumas()) ? "Brain Traumas detected." : ""]
          - "} - -/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/get_patient_reagents() - if(patient.reagents) - for(var/datum/reagent/R in patient.reagents.reagent_list) - if(R.volume > 0) - . += "[R]: [round(R.volume,0.01)]
          " - return . || "None" - -/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/get_available_reagents() - var/output - var/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/SG = locate(/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun) in chassis - if(SG && SG.reagents && islist(SG.reagents.reagent_list)) - for(var/datum/reagent/R in SG.reagents.reagent_list) - if(R.volume > 0) - output += "Inject [R.name]
          " - return output - - -/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/inject_reagent(datum/reagent/R,obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/SG) - if(!R || !patient || !SG || !(SG in chassis.equipment)) - return 0 - var/to_inject = min(R.volume, inject_amount) - if(to_inject && patient.reagents.get_reagent_amount(R.type) + to_inject <= inject_amount*2) - occupant_message("Injecting [patient] with [to_inject] units of [R.name].") - log_message("Injecting [patient] with [to_inject] units of [R.name].", LOG_MECHA) - log_combat(chassis.occupant, patient, "injected", "[name] ([R] - [to_inject] units)") - SG.reagents.trans_id_to(patient,R.type,to_inject) - update_equip_info() - return - -/obj/item/mecha_parts/mecha_equipment/medical/sleeper/update_equip_info() - if(..()) - if(patient) - send_byjax(chassis.occupant,"msleeper.browser","lossinfo",get_patient_dam()) - send_byjax(chassis.occupant,"msleeper.browser","reagents",get_patient_reagents()) - send_byjax(chassis.occupant,"msleeper.browser","injectwith",get_available_reagents()) - return 1 - return - -/obj/item/mecha_parts/mecha_equipment/medical/sleeper/container_resist(mob/living/user) - go_out() - -/obj/item/mecha_parts/mecha_equipment/medical/sleeper/process() - if(..()) - return - if(!chassis.has_charge(energy_drain)) - set_ready_state(1) - log_message("Deactivated.", LOG_MECHA) - occupant_message("[src] deactivated - no power.") - STOP_PROCESSING(SSobj, src) - return - var/mob/living/carbon/M = patient - if(!M) - return - if(M.health > 0) - M.adjustOxyLoss(-1) - M.AdjustStun(-80) - M.AdjustKnockdown(-80) - M.AdjustParalyzed(-80) - M.AdjustImmobilized(-80) - M.AdjustUnconscious(-80) - if(M.reagents.get_reagent_amount(/datum/reagent/medicine/epinephrine) < 5) - M.reagents.add_reagent(/datum/reagent/medicine/epinephrine, 5) - chassis.use_power(energy_drain) - update_equip_info() - - - - -///////////////////////////////// Syringe Gun /////////////////////////////////////////////////////////////// - - -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun - name = "exosuit syringe gun" - desc = "" - icon = 'icons/obj/guns/projectile.dmi' - icon_state = "syringegun" - var/list/syringes - var/list/known_reagents - var/list/processed_reagents - var/max_syringes = 10 - var/max_volume = 75 //max reagent volume - var/synth_speed = 5 //[num] reagent units per cycle - energy_drain = 10 - var/mode = 0 //0 - fire syringe, 1 - analyze reagents. - range = MECHA_MELEE|MECHA_RANGED - equip_cooldown = 10 - -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/Initialize() - . = ..() - create_reagents(max_volume, NO_REACT) - syringes = new - known_reagents = list(/datum/reagent/medicine/epinephrine="Epinephrine",/datum/reagent/medicine/C2/multiver="Multiver") - processed_reagents = new - -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/detach() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/can_attach(obj/mecha/medical/M) - if(..()) - if(istype(M)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/get_equip_info() - var/output = ..() - if(output) - return "[output] \[[mode? "Analyze" : "Launch"]\]
          \[Syringes: [syringes.len]/[max_syringes] | Reagents: [reagents.total_volume]/[reagents.maximum_volume]\]
          Reagents list" - return - -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/action(atom/movable/target) - if(!action_checks(target)) - return - if(istype(target, /obj/item/reagent_containers/syringe)) - return load_syringe(target) - if(istype(target, /obj/item/storage))//Loads syringes from boxes - for(var/obj/item/reagent_containers/syringe/S in target.contents) - load_syringe(S) - return - if(mode) - return analyze_reagents(target) - if(!syringes.len) - occupant_message("No syringes loaded.") - return - if(reagents.total_volume<=0) - occupant_message("No available reagents to load syringe with.") - return - var/turf/trg = get_turf(target) - var/obj/item/reagent_containers/syringe/mechsyringe = syringes[1] - mechsyringe.forceMove(get_turf(chassis)) - reagents.trans_to(mechsyringe, min(mechsyringe.volume, reagents.total_volume), transfered_by = chassis.occupant) - syringes -= mechsyringe - mechsyringe.icon = 'icons/obj/chemical.dmi' - mechsyringe.icon_state = "syringeproj" - playsound(chassis, 'sound/blank.ogg', 50, TRUE) - log_message("Launched [mechsyringe] from [src], targeting [target].", LOG_MECHA) - var/mob/originaloccupant = chassis.occupant - spawn(0) - src = null //if src is deleted, still process the syringe - for(var/i=0, i<6, i++) - if(!mechsyringe) - break - if(step_towards(mechsyringe,trg)) - var/list/mobs = new - for(var/mob/living/carbon/M in mechsyringe.loc) - mobs += M - var/mob/living/carbon/M = safepick(mobs) - if(M) - var/R - mechsyringe.visible_message(" [M] was hit by the syringe!") - if(M.can_inject(null, 1)) - if(mechsyringe.reagents) - for(var/datum/reagent/A in mechsyringe.reagents.reagent_list) - R += "[A.name] ([num2text(A.volume)]" - mechsyringe.icon_state = initial(mechsyringe.icon_state) - mechsyringe.icon = initial(mechsyringe.icon) - mechsyringe.reagents.reaction(M, INJECT) - mechsyringe.reagents.trans_to(M, mechsyringe.reagents.total_volume, transfered_by = originaloccupant) - M.take_bodypart_damage(2) - log_combat(originaloccupant, M, "shot", "syringegun") - break - else if(mechsyringe.loc == trg) - mechsyringe.icon_state = initial(mechsyringe.icon_state) - mechsyringe.icon = initial(mechsyringe.icon) - mechsyringe.update_icon() - break - else - mechsyringe.icon_state = initial(mechsyringe.icon_state) - mechsyringe.icon = initial(mechsyringe.icon) - mechsyringe.update_icon() - break - sleep(1) - return 1 - - -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/Topic(href,href_list) - ..() - if (href_list["toggle_mode"]) - mode = !mode - update_equip_info() - return - if (href_list["select_reagents"]) - processed_reagents.len = 0 - var/m = 0 - var/message - for(var/i=1 to known_reagents.len) - if(m>=synth_speed) - break - var/reagent = text2path(href_list["reagent_[i]"]) - if(reagent && (reagent in known_reagents)) - message = "[m ? ", " : null][known_reagents[reagent]]" - processed_reagents += reagent - m++ - if(processed_reagents.len) - message += " added to production" - START_PROCESSING(SSobj, src) - occupant_message(message) - occupant_message("Reagent processing started.") - log_message("Reagent processing started.", LOG_MECHA) - return - if (href_list["show_reagents"]) - chassis.occupant << browse(get_reagents_page(),"window=msyringegun") - if (href_list["purge_reagent"]) - var/reagent = href_list["purge_reagent"] - if(reagent) - reagents.del_reagent(reagent) - return - if (href_list["purge_all"]) - reagents.clear_reagents() - return - return - -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/get_reagents_page() - var/output = {" - - Reagent Synthesizer - - - - -

          Current reagents:

          -
          - [get_current_reagents()] -
          -

          Reagents production:

          -
          - [get_reagents_form()] -
          - - - "} - return output - -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/get_reagents_form() - var/r_list = get_reagents_list() - var/inputs - if(r_list) - inputs += "" - inputs += "" - inputs += "" - var/output = {" - [r_list || "No known reagents"] - [inputs] - - [r_list? "Only the first [synth_speed] selected reagent\s will be added to production" : null] - "} - return output - -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/get_reagents_list() - var/output - for(var/i=1 to known_reagents.len) - var/reagent_id = known_reagents[i] - output += {" [known_reagents[reagent_id]]
          "} - return output - -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/get_current_reagents() - var/output - for(var/datum/reagent/R in reagents.reagent_list) - if(R.volume > 0) - output += "[R]: [round(R.volume,0.001)] - Purge Reagent
          " - if(output) - output += "Total: [round(reagents.total_volume,0.001)]/[reagents.maximum_volume] - Purge All" - return output || "None" - -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/load_syringe(obj/item/reagent_containers/syringe/S) - if(syringes.len= 2) - occupant_message("The syringe is too far away!") - return 0 - for(var/obj/structure/D in S.loc)//Basic level check for structures in the way (Like grilles and windows) - if(!(D.CanPass(S,src.loc))) - occupant_message("Unable to load syringe!") - return 0 - for(var/obj/machinery/door/D in S.loc)//Checks for doors - if(!(D.CanPass(S,src.loc))) - occupant_message("Unable to load syringe!") - return 0 - S.reagents.trans_to(src, S.reagents.total_volume, transfered_by = chassis.occupant) - S.forceMove(src) - syringes += S - occupant_message("Syringe loaded.") - update_equip_info() - return 1 - occupant_message("[src]'s syringe chamber is full!") - return 0 - -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/analyze_reagents(atom/A) - if(get_dist(src,A) >= 4) - occupant_message("The object is too far away!") - return 0 - if(!A.reagents || ismob(A)) - occupant_message("No reagent info gained from [A].") - return 0 - occupant_message("Analyzing reagents...") - for(var/datum/reagent/R in A.reagents.reagent_list) - if(R.can_synth && add_known_reagent(R.type,R.name)) - occupant_message("Reagent analyzed, identified as [R.name] and added to database.") - send_byjax(chassis.occupant,"msyringegun.browser","reagents_form",get_reagents_form()) - occupant_message("Analyzis complete.") - return 1 - -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/add_known_reagent(r_id,r_name) - if(!(r_id in known_reagents)) - known_reagents += r_id - known_reagents[r_id] = r_name - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/update_equip_info() - if(..()) - send_byjax(chassis.occupant,"msyringegun.browser","reagents",get_current_reagents()) - send_byjax(chassis.occupant,"msyringegun.browser","reagents_form",get_reagents_form()) - return 1 - return - -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/on_reagent_change(changetype) - ..() - update_equip_info() - return - - -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/process() - if(..()) - return - if(!processed_reagents.len || reagents.total_volume >= reagents.maximum_volume || !chassis.has_charge(energy_drain)) - occupant_message("Reagent processing stopped.") - log_message("Reagent processing stopped.", LOG_MECHA) - STOP_PROCESSING(SSobj, src) - return - var/amount = synth_speed / processed_reagents.len - for(var/reagent in processed_reagents) - reagents.add_reagent(reagent,amount) - chassis.use_power(energy_drain) - -///////////////////////////////// Medical Beam /////////////////////////////////////////////////////////////// - -/obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam - name = "exosuit medical beamgun" - desc = "" - icon_state = "mecha_medigun" - energy_drain = 10 - range = MECHA_MELEE|MECHA_RANGED - equip_cooldown = 0 - var/obj/item/gun/medbeam/mech/medigun - custom_materials = list(/datum/material/iron = 15000, /datum/material/glass = 8000, /datum/material/plasma = 3000, /datum/material/gold = 8000, /datum/material/diamond = 2000) - material_flags = MATERIAL_NO_EFFECTS - -/obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam/Initialize() - . = ..() - medigun = new(src) - - -/obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam/Destroy() - qdel(medigun) - return ..() - -/obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam/process() - if(..()) - return - medigun.process() - -/obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam/action(atom/target) - medigun.process_fire(target, loc) - - -/obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam/detach() - STOP_PROCESSING(SSobj, src) - medigun.LoseTarget() - return ..() diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm deleted file mode 100644 index ba401928f5..0000000000 --- a/code/game/mecha/equipment/tools/mining_tools.dm +++ /dev/null @@ -1,173 +0,0 @@ - -// Drill, Diamond drill, Mining scanner - -#define DRILL_BASIC 1 -#define DRILL_HARDENED 2 - - -/obj/item/mecha_parts/mecha_equipment/drill - name = "exosuit drill" - desc = "" - icon_state = "mecha_drill" - equip_cooldown = 15 - energy_drain = 10 - force = 15 - harmful = TRUE - tool_behaviour = TOOL_DRILL - toolspeed = 0.9 - var/drill_delay = 7 - var/drill_level = DRILL_BASIC - -/obj/item/mecha_parts/mecha_equipment/drill/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 50, 100, null, null, TRUE) - -/obj/item/mecha_parts/mecha_equipment/drill/action(atom/target) - if(!action_checks(target)) - return - if(isspaceturf(target)) - return - if(isobj(target)) - var/obj/target_obj = target - if(target_obj.resistance_flags & UNACIDABLE) - return - target.visible_message("[chassis] starts to drill [target].", \ - "[chassis] starts to drill [target]...", \ - "I hear drilling.") - - if(do_after_cooldown(target)) - set_ready_state(FALSE) - log_message("Started drilling [target]", LOG_MECHA) - if(isturf(target)) - var/turf/T = target - T.drill_act(src) - set_ready_state(TRUE) - return - while(do_after_mecha(target, drill_delay)) - if(isliving(target)) - drill_mob(target, chassis.occupant) - playsound(src,'sound/blank.ogg',40,TRUE) - else if(isobj(target)) - var/obj/O = target - O.take_damage(15, BRUTE, 0, FALSE, get_dir(chassis, target)) - playsound(src,'sound/blank.ogg',40,TRUE) - else - set_ready_state(TRUE) - return - set_ready_state(TRUE) - -/turf/proc/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill) - return - -/turf/closed/wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill) - if(drill.do_after_mecha(src, 60 / drill.drill_level)) - drill.log_message("Drilled through [src]", LOG_MECHA) - dismantle_wall(TRUE, FALSE) - -/turf/closed/wall/r_wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill) - if(drill.drill_level >= DRILL_HARDENED) - if(drill.do_after_mecha(src, 120 / drill.drill_level)) - drill.log_message("Drilled through [src]", LOG_MECHA) - dismantle_wall(TRUE, FALSE) - else - drill.occupant_message("[src] is too durable to drill through.") - -/turf/closed/mineral/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill) - for(var/turf/closed/mineral/M in range(drill.chassis,1)) - if(get_dir(drill.chassis,M)&drill.chassis.dir) - M.gets_drilled() - drill.log_message("Drilled through [src]", LOG_MECHA) - drill.move_ores() - -/turf/open/floor/plating/asteroid/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill) - for(var/turf/open/floor/plating/asteroid/M in range(1, drill.chassis)) - if((get_dir(drill.chassis,M)&drill.chassis.dir) && !M.dug) - M.getDug() - drill.log_message("Drilled through [src]", LOG_MECHA) - drill.move_ores() - - -/obj/item/mecha_parts/mecha_equipment/drill/proc/move_ores() - if(locate(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) in chassis.equipment && istype(chassis, /obj/mecha/working/ripley)) - var/obj/mecha/working/ripley/R = chassis //we could assume that it's a ripley because it has a clamp, but that's ~unsafe~ and ~bad practice~ - R.collect_ore() - -/obj/item/mecha_parts/mecha_equipment/drill/can_attach(obj/mecha/M as obj) - if(..()) - if(istype(M, /obj/mecha/working) || istype(M, /obj/mecha/combat)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/drill/attach(obj/mecha/M) - ..() - var/datum/component/butchering/butchering = src.GetComponent(/datum/component/butchering) - butchering.butchering_enabled = TRUE - -/obj/item/mecha_parts/mecha_equipment/drill/detach(atom/moveto) - ..() - var/datum/component/butchering/butchering = src.GetComponent(/datum/component/butchering) - butchering.butchering_enabled = FALSE - -/obj/item/mecha_parts/mecha_equipment/drill/proc/drill_mob(mob/living/target, mob/user) - target.visible_message("[chassis] is drilling [target] with [src]!", \ - "[chassis] is drilling you with [src]!") - log_combat(user, target, "drilled", "[name]", "(INTENT: [uppertext(user.used_intent)]) (DAMTYPE: [uppertext(damtype)])") - if(target.stat == DEAD && target.getBruteLoss() >= 200) - log_combat(user, target, "gibbed", name) - if(LAZYLEN(target.butcher_results) || LAZYLEN(target.guaranteed_butcher_results)) - var/datum/component/butchering/butchering = src.GetComponent(/datum/component/butchering) - butchering.Butcher(chassis, target) - else - target.gib() - else - //drill makes a hole - var/obj/item/bodypart/target_part = target.get_bodypart(ran_zone(BODY_ZONE_CHEST)) - target.apply_damage(10, BRUTE, BODY_ZONE_CHEST, target.run_armor_check(target_part, "melee")) - - //blood splatters - var/splatter_dir = get_dir(chassis, target) - if(isalien(target)) - new /obj/effect/temp_visual/dir_setting/bloodsplatter/xenosplatter(target.drop_location(), splatter_dir) - else - new /obj/effect/temp_visual/dir_setting/bloodsplatter(target.drop_location(), splatter_dir) - - //organs go everywhere - if(target_part && prob(10 * drill_level)) - target_part.dismember(BRUTE) - -/obj/item/mecha_parts/mecha_equipment/drill/diamonddrill - name = "diamond-tipped exosuit drill" - desc = "" - icon_state = "mecha_diamond_drill" - equip_cooldown = 10 - drill_delay = 4 - drill_level = DRILL_HARDENED - force = 15 - toolspeed = 0.7 - - -/obj/item/mecha_parts/mecha_equipment/mining_scanner - name = "exosuit mining scanner" - desc = "" - icon_state = "mecha_analyzer" - selectable = 0 - equip_cooldown = 15 - var/scanning_time = 0 - -/obj/item/mecha_parts/mecha_equipment/mining_scanner/Initialize() - . = ..() - START_PROCESSING(SSfastprocess, src) - -/obj/item/mecha_parts/mecha_equipment/mining_scanner/process() - if(!loc) - STOP_PROCESSING(SSfastprocess, src) - qdel(src) - if(istype(loc, /obj/mecha/working) && scanning_time <= world.time) - var/obj/mecha/working/mecha = loc - if(!mecha.occupant) - return - scanning_time = world.time + equip_cooldown - mineral_scan_pulse(get_turf(src)) - -#undef DRILL_BASIC -#undef DRILL_HARDENED diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm deleted file mode 100644 index ac70f8fb63..0000000000 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ /dev/null @@ -1,582 +0,0 @@ - -// Teleporter, Wormhole generator, Gravitational catapult, Armor booster modules, -// Repair droid, Tesla Energy relay, Generators - -////////////////////////////////////////////// TELEPORTER /////////////////////////////////////////////// - -/obj/item/mecha_parts/mecha_equipment/teleporter - name = "mounted teleporter" - desc = "" - icon_state = "mecha_teleport" - equip_cooldown = 150 - energy_drain = 1000 - range = MECHA_RANGED - -/obj/item/mecha_parts/mecha_equipment/teleporter/action(atom/target) - if(!action_checks(target) || is_centcom_level(loc.z)) - return - var/turf/T = get_turf(target) - if(T) - do_teleport(chassis, T, 4, channel = TELEPORT_CHANNEL_BLUESPACE) - return 1 - - - -////////////////////////////////////////////// WORMHOLE GENERATOR ////////////////////////////////////////// - -/obj/item/mecha_parts/mecha_equipment/wormhole_generator - name = "mounted wormhole generator" - desc = "" - icon_state = "mecha_wholegen" - equip_cooldown = 50 - energy_drain = 300 - range = MECHA_RANGED - - -/obj/item/mecha_parts/mecha_equipment/wormhole_generator/action(atom/target) - if(!action_checks(target) || is_centcom_level(loc.z)) - return - var/list/theareas = get_areas_in_range(100, chassis) - if(!theareas.len) - return - var/area/thearea = pick(theareas) - var/list/L = list() - var/turf/pos = get_turf(src) - for(var/turf/T in get_area_turfs(thearea.type)) - if(!T.density && pos.z == T.z) - var/clear = 1 - for(var/obj/O in T) - if(O.density) - clear = 0 - break - if(clear) - L+=T - if(!L.len) - return - var/turf/target_turf = pick(L) - if(!target_turf) - return - var/list/obj/effect/portal/created = create_portal_pair(get_turf(src), target_turf, src, 300, 1, /obj/effect/portal/anom) - var/turf/T = get_turf(target) - message_admins("[ADMIN_LOOKUPFLW(chassis.occupant)] used a Wormhole Generator in [ADMIN_VERBOSEJMP(T)]") - log_game("[key_name(chassis.occupant)] used a Wormhole Generator in [AREACOORD(T)]") - src = null - QDEL_LIST_IN(created, rand(150,300)) - return 1 - - -/////////////////////////////////////// GRAVITATIONAL CATAPULT /////////////////////////////////////////// - -/obj/item/mecha_parts/mecha_equipment/gravcatapult - name = "mounted gravitational catapult" - desc = "" - icon_state = "mecha_teleport" - equip_cooldown = 10 - energy_drain = 100 - range = MECHA_MELEE|MECHA_RANGED - var/atom/movable/locked - var/mode = 1 //1 - gravsling 2 - gravpush - - -/obj/item/mecha_parts/mecha_equipment/gravcatapult/action(atom/movable/target) - if(!action_checks(target)) - return - switch(mode) - if(1) - if(!locked) - if(!istype(target) || target.anchored || target.move_resist >= MOVE_FORCE_EXTREMELY_STRONG) - occupant_message("Unable to lock on [target]!") - return - if(ismob(target)) - var/mob/M = target - if(M.mob_negates_gravity()) - occupant_message("Unable to lock on [target]!") - return - locked = target - occupant_message("Locked on [target].") - send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) - else if(target!=locked) - if(locked in view(chassis)) - var/turf/targ = get_turf(target) - var/turf/orig = get_turf(locked) - locked.throw_at(target, 14, 1.5) - locked = null - send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) - log_game("[key_name(chassis.occupant)] used a Gravitational Catapult to throw [locked] (From [AREACOORD(orig)]) at [target] ([AREACOORD(targ)]).") - return TRUE - else - locked = null - occupant_message("Lock on [locked] disengaged.") - send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) - if(2) - var/list/atoms = list() - if(isturf(target)) - atoms = range(3, target) - else - atoms = orange(3, target) - for(var/atom/movable/A in atoms) - if(A.anchored || A.move_resist >= MOVE_FORCE_EXTREMELY_STRONG) - continue - if(ismob(A)) - var/mob/M = A - if(M.mob_negates_gravity()) - continue - INVOKE_ASYNC(src, PROC_REF(do_scatter), A, target) - - var/turf/T = get_turf(target) - log_game("[key_name(chassis.occupant)] used a Gravitational Catapult repulse wave on [AREACOORD(T)]") - return TRUE - -/obj/item/mecha_parts/mecha_equipment/gravcatapult/proc/do_scatter(atom/movable/A, atom/movable/target) - var/iter = 5-get_dist(A,target) - for(var/i in 0 to iter) - step_away(A,target) - sleep(2) - -/obj/item/mecha_parts/mecha_equipment/gravcatapult/get_equip_info() - return "[..()] [mode==1?"([locked||"Nothing"])":null] \[S|P\]" - -/obj/item/mecha_parts/mecha_equipment/gravcatapult/Topic(href, href_list) - ..() - if(href_list["mode"]) - mode = text2num(href_list["mode"]) - send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) - return - - - - -//////////////////////////// ARMOR BOOSTER MODULES ////////////////////////////////////////////////////////// - - -/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster //what is that noise? A BAWWW from TK mutants. - name = "armor booster module (Close Combat Weaponry)" - desc = "" - icon_state = "mecha_abooster_ccw" - equip_cooldown = 10 - energy_drain = 50 - range = 0 - var/deflect_coeff = 1.15 - var/damage_coeff = 0.8 - selectable = 0 - -/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/proc/attack_react() - if(action_checks(src)) - start_cooldown() - return 1 - - - -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster - name = "armor booster module (Ranged Weaponry)" - desc = "" - icon_state = "mecha_abooster_proj" - equip_cooldown = 10 - energy_drain = 50 - range = 0 - var/deflect_coeff = 1.15 - var/damage_coeff = 0.8 - selectable = 0 - -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/proc/projectile_react() - if(action_checks(src)) - start_cooldown() - return 1 - - -////////////////////////////////// REPAIR DROID ////////////////////////////////////////////////// - - -/obj/item/mecha_parts/mecha_equipment/repair_droid - name = "exosuit repair droid" - desc = "" - icon_state = "repair_droid" - energy_drain = 50 - range = 0 - var/health_boost = 1 - var/icon/droid_overlay - var/list/repairable_damage = list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH) - selectable = 0 - -/obj/item/mecha_parts/mecha_equipment/repair_droid/Destroy() - STOP_PROCESSING(SSobj, src) - if(chassis) - chassis.cut_overlay(droid_overlay) - return ..() - -/obj/item/mecha_parts/mecha_equipment/repair_droid/attach(obj/mecha/M as obj) - ..() - droid_overlay = new(src.icon, icon_state = "repair_droid") - M.add_overlay(droid_overlay) - -/obj/item/mecha_parts/mecha_equipment/repair_droid/detach() - chassis.cut_overlay(droid_overlay) - STOP_PROCESSING(SSobj, src) - ..() - -/obj/item/mecha_parts/mecha_equipment/repair_droid/get_equip_info() - if(!chassis) - return - return "*  [src.name] - [equip_ready?"A":"Dea"]ctivate" - - -/obj/item/mecha_parts/mecha_equipment/repair_droid/Topic(href, href_list) - ..() - if(href_list["toggle_repairs"]) - chassis.cut_overlay(droid_overlay) - if(equip_ready) - START_PROCESSING(SSobj, src) - droid_overlay = new(src.icon, icon_state = "repair_droid_a") - log_message("Activated.", LOG_MECHA) - set_ready_state(0) - else - STOP_PROCESSING(SSobj, src) - droid_overlay = new(src.icon, icon_state = "repair_droid") - log_message("Deactivated.", LOG_MECHA) - set_ready_state(1) - chassis.add_overlay(droid_overlay) - send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) - - -/obj/item/mecha_parts/mecha_equipment/repair_droid/process() - if(!chassis) - STOP_PROCESSING(SSobj, src) - set_ready_state(1) - return - var/h_boost = health_boost - var/repaired = 0 - if(chassis.internal_damage & MECHA_INT_SHORT_CIRCUIT) - h_boost *= -2 - else if(chassis.internal_damage && prob(15)) - for(var/int_dam_flag in repairable_damage) - if(chassis.internal_damage & int_dam_flag) - chassis.clearInternalDamage(int_dam_flag) - repaired = 1 - break - if(h_boost<0 || chassis.obj_integrity < chassis.max_integrity) - chassis.obj_integrity += min(h_boost, chassis.max_integrity-chassis.obj_integrity) - repaired = 1 - if(repaired) - if(!chassis.use_power(energy_drain)) - STOP_PROCESSING(SSobj, src) - set_ready_state(1) - else //no repair needed, we turn off - STOP_PROCESSING(SSobj, src) - set_ready_state(1) - chassis.cut_overlay(droid_overlay) - droid_overlay = new(src.icon, icon_state = "repair_droid") - chassis.add_overlay(droid_overlay) - - - - -/////////////////////////////////// TESLA ENERGY RELAY //////////////////////////////////////////////// - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay - name = "exosuit energy relay" - desc = "" - icon_state = "tesla" - energy_drain = 0 - range = 0 - var/coeff = 100 - var/list/use_channels = list(EQUIP,ENVIRON,LIGHT) - selectable = 0 - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/detach() - STOP_PROCESSING(SSobj, src) - ..() - return - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/get_charge() - if(equip_ready) //disabled - return - var/area/A = get_area(chassis) - var/pow_chan = GET_MUTATION_POWER_channel(A) - if(pow_chan) - return 1000 //making magic - - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/GET_MUTATION_POWER_channel(area/A) - var/pow_chan - if(A) - for(var/c in use_channels) - if(A.powered(c)) - pow_chan = c - break - return pow_chan - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/Topic(href, href_list) - ..() - if(href_list["toggle_relay"]) - if(equip_ready) //inactive - START_PROCESSING(SSobj, src) - set_ready_state(0) - log_message("Activated.", LOG_MECHA) - else - STOP_PROCESSING(SSobj, src) - set_ready_state(1) - log_message("Deactivated.", LOG_MECHA) - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/get_equip_info() - if(!chassis) - return - return "*  [src.name] - [equip_ready?"A":"Dea"]ctivate" - - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/process() - if(!chassis || chassis.internal_damage & MECHA_INT_SHORT_CIRCUIT) - STOP_PROCESSING(SSobj, src) - set_ready_state(1) - return - var/cur_charge = chassis.get_charge() - if(isnull(cur_charge) || !chassis.cell) - STOP_PROCESSING(SSobj, src) - set_ready_state(1) - occupant_message("No powercell detected.") - return - if(cur_charge < chassis.cell.maxcharge) - var/area/A = get_area(chassis) - if(A) - var/pow_chan - for(var/c in list(EQUIP,ENVIRON,LIGHT)) - if(A.powered(c)) - pow_chan = c - break - if(pow_chan) - var/delta = min(20, chassis.cell.maxcharge-cur_charge) - chassis.give_power(delta) - A.use_power(delta*coeff, pow_chan) - - - - -/////////////////////////////////////////// GENERATOR ///////////////////////////////////////////// - - -/obj/item/mecha_parts/mecha_equipment/generator - name = "exosuit plasma converter" - desc = "" - icon_state = "tesla" - range = MECHA_MELEE - var/coeff = 100 - var/obj/item/stack/sheet/fuel - var/max_fuel = 150000 - var/fuel_per_cycle_idle = 25 - var/fuel_per_cycle_active = 200 - var/power_per_cycle = 20 - -/obj/item/mecha_parts/mecha_equipment/generator/Initialize() - . = ..() - generator_init() - -/obj/item/mecha_parts/mecha_equipment/generator/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/mecha_parts/mecha_equipment/generator/proc/generator_init() - fuel = new /obj/item/stack/sheet/mineral/plasma(src, 0) - -/obj/item/mecha_parts/mecha_equipment/generator/detach() - STOP_PROCESSING(SSobj, src) - ..() - -/obj/item/mecha_parts/mecha_equipment/generator/Topic(href, href_list) - ..() - if(href_list["toggle"]) - if(equip_ready) //inactive - set_ready_state(0) - START_PROCESSING(SSobj, src) - log_message("Activated.", LOG_MECHA) - else - set_ready_state(1) - STOP_PROCESSING(SSobj, src) - log_message("Deactivated.", LOG_MECHA) - -/obj/item/mecha_parts/mecha_equipment/generator/get_equip_info() - var/output = ..() - if(output) - return "[output] \[[fuel]: [round(fuel.amount*fuel.mats_per_stack,0.1)] cm3\] - [equip_ready?"A":"Dea"]ctivate" - -/obj/item/mecha_parts/mecha_equipment/generator/action(target) - if(chassis) - var/result = load_fuel(target) - if(result) - send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) - -/obj/item/mecha_parts/mecha_equipment/generator/proc/load_fuel(obj/item/stack/sheet/P) - if(P.type == fuel.type && P.amount > 0) - var/to_load = max(max_fuel - fuel.amount*fuel.mats_per_stack,0) - if(to_load) - var/units = min(max(round(to_load / P.mats_per_stack),1),P.amount) - fuel.amount += units - P.use(units) - occupant_message("[units] unit\s of [fuel] successfully loaded.") - return units - else - occupant_message("Unit is full.") - return 0 - else - occupant_message("[fuel] traces in target minimal! [P] cannot be used as fuel.") - return - -/obj/item/mecha_parts/mecha_equipment/generator/attackby(weapon,mob/user, params) - load_fuel(weapon) - -/obj/item/mecha_parts/mecha_equipment/generator/process() - if(!chassis) - STOP_PROCESSING(SSobj, src) - set_ready_state(1) - return - if(fuel.amount<=0) - STOP_PROCESSING(SSobj, src) - log_message("Deactivated - no fuel.", LOG_MECHA) - set_ready_state(1) - return - var/cur_charge = chassis.get_charge() - if(isnull(cur_charge)) - set_ready_state(1) - occupant_message("No powercell detected.") - log_message("Deactivated.", LOG_MECHA) - STOP_PROCESSING(SSobj, src) - return - var/use_fuel = fuel_per_cycle_idle - if(cur_charge < chassis.cell.maxcharge) - use_fuel = fuel_per_cycle_active - chassis.give_power(power_per_cycle) - fuel.amount -= min(use_fuel/fuel.mats_per_stack,fuel.amount) - update_equip_info() - return 1 - - -/obj/item/mecha_parts/mecha_equipment/generator/nuclear - name = "exonuclear reactor" - desc = "" - icon_state = "tesla" - max_fuel = 50000 - fuel_per_cycle_idle = 10 - fuel_per_cycle_active = 30 - power_per_cycle = 50 - var/rad_per_cycle = 30 - -/obj/item/mecha_parts/mecha_equipment/generator/nuclear/generator_init() - fuel = new /obj/item/stack/sheet/mineral/uranium(src, 0) - -/obj/item/mecha_parts/mecha_equipment/generator/nuclear/process() - if(..()) - radiation_pulse(get_turf(src), rad_per_cycle) - - -/////////////////////////////////////////// THRUSTERS ///////////////////////////////////////////// - -/obj/item/mecha_parts/mecha_equipment/thrusters - name = "generic exosuit thrusters" //parent object, in-game sources will be a child object - desc = "" - icon_state = "thrusters" - selectable = FALSE - var/effect_type = /obj/effect/particle_effect/sparks - -/obj/item/mecha_parts/mecha_equipment/thrusters/try_attach_part(mob/user, obj/mecha/M) - for(var/obj/item/I in M.equipment) - if(istype(I, src)) - to_chat(user, "[M] already has this thruster package!") - return FALSE - . = ..() - -/obj/item/mecha_parts/mecha_equipment/thrusters/attach(obj/mecha/M) - M.active_thrusters = src //Enable by default - . = ..() - -/obj/item/mecha_parts/mecha_equipment/thrusters/detach() - if(chassis?.active_thrusters == src) - chassis.active_thrusters = null - . = ..() - -/obj/item/mecha_parts/mecha_equipment/thrusters/Destroy() - if(chassis?.active_thrusters == src) - chassis.active_thrusters = null - . = ..() - -/obj/item/mecha_parts/mecha_equipment/thrusters/Topic(href,href_list) - ..() - if(!chassis) - return - if(href_list["mode"]) - var/mode = text2num(href_list["mode"]) - switch(mode) - if(0) - enable() - if(1) - disable() - return - -/obj/item/mecha_parts/mecha_equipment/thrusters/proc/enable() - if (chassis.active_thrusters == src) - return - chassis.active_thrusters = src - occupant_message("[src] enabled.") - -/obj/item/mecha_parts/mecha_equipment/thrusters/proc/disable() - if(chassis.active_thrusters != src) - return - chassis.active_thrusters = null - occupant_message("[src] disabled.") - -/obj/item/mecha_parts/mecha_equipment/thrusters/get_equip_info() - return "[..()] \[Enable|Disable\]" - -/obj/item/mecha_parts/mecha_equipment/thrusters/proc/thrust(movement_dir) - if(!chassis) - return FALSE - generate_effect(movement_dir) - return TRUE //This parent should never exist in-game outside admeme use, so why not let it be a creative thruster? - -/obj/item/mecha_parts/mecha_equipment/thrusters/proc/generate_effect(movement_dir) - var/obj/effect/particle_effect/E = new effect_type(get_turf(chassis)) - E.dir = turn(movement_dir, 180) - step(E, turn(movement_dir, 180)) - QDEL_IN(E, 5) - - -/obj/item/mecha_parts/mecha_equipment/thrusters/gas - name = "RCS thruster package" - desc = "" - effect_type = /obj/effect/particle_effect/smoke - var/move_cost = 20 //moles per step - -/obj/item/mecha_parts/mecha_equipment/thrusters/gas/try_attach_part(mob/user, obj/mecha/M) - if(!M.internal_tank) - to_chat(user, "[M] does not have an internal tank and cannot support this upgrade!") - return FALSE - . = ..() - -/obj/item/mecha_parts/mecha_equipment/thrusters/gas/thrust(movement_dir) - if(!chassis || !chassis.internal_tank) - return FALSE - var/moles = chassis.internal_tank.air_contents.total_moles() - if(moles < move_cost) - chassis.internal_tank.air_contents.remove(moles) - return FALSE - chassis.internal_tank.air_contents.remove(move_cost) - generate_effect(movement_dir) - return TRUE - - - -/obj/item/mecha_parts/mecha_equipment/thrusters/ion //for mechs with built-in thrusters, should never really exist un-attached to a mech - name = "Ion thruster package" - desc = "" - detachable = FALSE - salvageable = FALSE - effect_type = /obj/effect/particle_effect/ion_trails - -/obj/item/mecha_parts/mecha_equipment/thrusters/ion/thrust(movement_dir) - if(!chassis) - return FALSE - if(chassis.use_power(chassis.step_energy_drain)) - generate_effect(movement_dir) - return TRUE - return FALSE diff --git a/code/game/mecha/equipment/tools/weapon_bay.dm b/code/game/mecha/equipment/tools/weapon_bay.dm deleted file mode 100644 index 8f2d4634c2..0000000000 --- a/code/game/mecha/equipment/tools/weapon_bay.dm +++ /dev/null @@ -1,14 +0,0 @@ -/obj/item/mecha_parts/concealed_weapon_bay - name = "concealed weapon bay" - desc = "" - icon = 'icons/mecha/mecha_equipment.dmi' - icon_state = "mecha_weapon_bay" - -/obj/item/mecha_parts/concealed_weapon_bay/try_attach_part(mob/user, obj/mecha/M) - if(istype(M, /obj/mecha/combat)) - to_chat(user, "[M] can already hold weapons!") - return - if(locate(/obj/item/mecha_parts/concealed_weapon_bay) in M.contents) - to_chat(user, "[M] already has a concealed weapon bay!") - return - ..() diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm deleted file mode 100644 index 1f86c4c6c6..0000000000 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ /dev/null @@ -1,411 +0,0 @@ - -//Hydraulic clamp, Kill clamp, Extinguisher, RCD, Cable layer. - - -/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp - name = "hydraulic clamp" - desc = "" - icon_state = "mecha_clamp" - equip_cooldown = 15 - energy_drain = 10 - tool_behaviour = TOOL_RETRACTOR - toolspeed = 0.8 - var/dam_force = 20 - var/obj/mecha/working/ripley/cargo_holder - harmful = TRUE - -/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/can_attach(obj/mecha/working/ripley/M as obj) - if(..()) - if(istype(M)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/attach(obj/mecha/M as obj) - ..() - cargo_holder = M - return - -/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/detach(atom/moveto = null) - ..() - cargo_holder = null - -/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/action(atom/target) - if(!action_checks(target)) - return - if(!cargo_holder) - return - if(ismecha(target)) - var/obj/mecha/M = target - var/have_ammo - for(var/obj/item/mecha_ammo/box in cargo_holder.cargo) - if(istype(box, /obj/item/mecha_ammo) && box.rounds) - have_ammo = TRUE - if(M.ammo_resupply(box, chassis.occupant, TRUE)) - return - if(have_ammo) - to_chat(chassis.occupant, "No further supplies can be provided to [M].") - else - to_chat(chassis.occupant, "No providable supplies found in cargo hold") - return - if(isobj(target)) - var/obj/O = target - if(istype(O, /obj/machinery/door/firedoor)) - var/obj/machinery/door/firedoor/D = O - D.try_to_crowbar(src,chassis.occupant) - return - if(istype(O, /obj/machinery/door/airlock/)) - var/obj/machinery/door/airlock/D = O - D.try_to_crowbar(src,chassis.occupant) - return - if(!O.anchored) - if(cargo_holder.cargo.len < cargo_holder.cargo_capacity) - chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.") - O.anchored = TRUE - if(do_after_cooldown(target)) - cargo_holder.cargo += O - O.forceMove(chassis) - O.anchored = FALSE - occupant_message("[target] successfully loaded.") - log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]", LOG_MECHA) - else - O.anchored = initial(O.anchored) - else - occupant_message("Not enough room in cargo compartment!") - else - occupant_message("[target] is firmly secured!") - - else if(isliving(target)) - var/mob/living/M = target - if(M.stat == DEAD) - return - if(chassis.occupant.used_intent.type == INTENT_HARM) - M.take_overall_damage(dam_force) - if(!M) - return - M.adjustOxyLoss(round(dam_force/2)) - M.updatehealth() - target.visible_message("[chassis] squeezes [target]!", \ - "[chassis] squeezes you!",\ - "I hear something crack.") - log_combat(chassis.occupant, M, "attacked", "[name]", "(INTENT: [uppertext(chassis.occupant.used_intent)]) (DAMTYPE: [uppertext(damtype)])") - else - step_away(M,chassis) - occupant_message("I push [target] out of the way.") - chassis.visible_message("[chassis] pushes [target] out of the way.") - return 1 - - - -//This is pretty much just for the death-ripley -/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill - name = "\improper KILL CLAMP" - desc = "" - energy_drain = 0 - dam_force = 0 - var/real_clamp = FALSE - -/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/real - desc = "" - energy_drain = 10 - dam_force = 20 - real_clamp = TRUE - -/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/action(atom/target) - if(!action_checks(target)) - return - if(!cargo_holder) - return - if(isobj(target)) - var/obj/O = target - if(!O.anchored) - if(cargo_holder.cargo.len < cargo_holder.cargo_capacity) - chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.") - O.anchored = TRUE - if(do_after_cooldown(target)) - cargo_holder.cargo += O - O.forceMove(chassis) - O.anchored = FALSE - occupant_message("[target] successfully loaded.") - log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]", LOG_MECHA) - else - O.anchored = initial(O.anchored) - else - occupant_message("Not enough room in cargo compartment!") - else - occupant_message("[target] is firmly secured!") - - else if(isliving(target)) - var/mob/living/M = target - if(M.stat == DEAD) - return - if(chassis.occupant.used_intent.type == INTENT_HARM) - if(real_clamp) - M.take_overall_damage(dam_force) - if(!M) - return - M.adjustOxyLoss(round(dam_force/2)) - M.updatehealth() - target.visible_message("[chassis] destroys [target] in an unholy fury!", \ - "[chassis] destroys you in an unholy fury!") - log_combat(chassis.occupant, M, "attacked", "[name]", "(INTENT: [uppertext(chassis.occupant.used_intent)]) (DAMTYPE: [uppertext(damtype)])") - else - target.visible_message("[chassis] destroys [target] in an unholy fury!", \ - "[chassis] destroys you in an unholy fury!") - else if(chassis.occupant.used_intent.type == INTENT_DISARM) - if(real_clamp) - var/mob/living/carbon/C = target - var/play_sound = FALSE - var/limbs_gone = "" - var/obj/item/bodypart/affected = C.get_bodypart(BODY_ZONE_L_ARM) - if(affected != null) - affected.dismember(damtype) - play_sound = TRUE - limbs_gone = ", [affected]" - affected = C.get_bodypart(BODY_ZONE_R_ARM) - if(affected != null) - affected.dismember(damtype) - play_sound = TRUE - limbs_gone = "[limbs_gone], [affected]" - if(play_sound) - playsound(src, get_dismember_sound(), 80, TRUE) - target.visible_message("[chassis] rips [target]'s arms off!", \ - "[chassis] rips your arms off!") - log_combat(chassis.occupant, M, "dismembered of[limbs_gone],", "[name]", "(INTENT: [uppertext(chassis.occupant.used_intent)]) (DAMTYPE: [uppertext(damtype)])") - else - target.visible_message("[chassis] rips [target]'s arms off!", \ - "[chassis] rips your arms off!") - else - step_away(M,chassis) - target.visible_message("[chassis] tosses [target] like a piece of paper!", \ - "[chassis] tosses you like a piece of paper!") - return 1 - - - -/obj/item/mecha_parts/mecha_equipment/extinguisher - name = "exosuit extinguisher" - desc = "" - icon_state = "mecha_exting" - equip_cooldown = 5 - energy_drain = 0 - range = MECHA_MELEE|MECHA_RANGED - -/obj/item/mecha_parts/mecha_equipment/extinguisher/Initialize() - . = ..() - create_reagents(1000) - reagents.add_reagent(/datum/reagent/water, 1000) - -/obj/item/mecha_parts/mecha_equipment/extinguisher/action(atom/target) //copypasted from extinguisher. TODO: Rewrite from scratch. - if(!action_checks(target) || get_dist(chassis, target)>3) - return - - if(istype(target, /obj/structure/reagent_dispensers/watertank) && get_dist(chassis,target) <= 1) - var/obj/structure/reagent_dispensers/watertank/WT = target - WT.reagents.trans_to(src, 1000) - occupant_message("Extinguisher refilled.") - playsound(chassis, 'sound/blank.ogg', 50, TRUE, -6) - else - if(reagents.total_volume > 0) - playsound(chassis, 'sound/blank.ogg', 75, TRUE, -3) - var/direction = get_dir(chassis,target) - var/turf/T = get_turf(target) - var/turf/T1 = get_step(T,turn(direction, 90)) - var/turf/T2 = get_step(T,turn(direction, -90)) - - var/list/the_targets = list(T,T1,T2) - spawn(0) - for(var/a=0, a<5, a++) - var/obj/effect/particle_effect/water/W = new /obj/effect/particle_effect/water(get_turf(chassis)) - if(!W) - return - var/turf/my_target = pick(the_targets) - var/datum/reagents/R = new/datum/reagents(5) - W.reagents = R - R.my_atom = W - reagents.trans_to(W,1, transfered_by = chassis.occupant) - for(var/b=0, b<4, b++) - if(!W) - return - step_towards(W,my_target) - if(!W) - return - var/turf/W_turf = get_turf(W) - W.reagents.reaction(W_turf) - for(var/atom/atm in W_turf) - W.reagents.reaction(atm) - if(W.loc == my_target) - break - sleep(2) - return 1 - -/obj/item/mecha_parts/mecha_equipment/extinguisher/get_equip_info() - return "[..()] \[[src.reagents.total_volume]\]" - -/obj/item/mecha_parts/mecha_equipment/extinguisher/can_attach(obj/mecha/working/M as obj) - if(..()) - if(istype(M)) - return 1 - return 0 - - - -/obj/item/mecha_parts/mecha_equipment/rcd - name = "mounted RCD" - desc = "" - icon_state = "mecha_rcd" - equip_cooldown = 10 - energy_drain = 250 - range = MECHA_MELEE|MECHA_RANGED - item_flags = NO_MAT_REDEMPTION - var/mode = 0 //0 - deconstruct, 1 - wall or floor, 2 - airlock. - -/obj/item/mecha_parts/mecha_equipment/rcd/Initialize() - . = ..() - GLOB.rcd_list += src - -/obj/item/mecha_parts/mecha_equipment/rcd/Destroy() - GLOB.rcd_list -= src - return ..() - -/obj/item/mecha_parts/mecha_equipment/rcd/action(atom/target) - if(istype(target, /turf/open/space/transit))//>implying these are ever made -Sieve - return - - if(!isturf(target) && !istype(target, /obj/machinery/door/airlock)) - target = get_turf(target) - if(!action_checks(target) || get_dist(chassis, target)>3) - return - playsound(chassis, 'sound/blank.ogg', 50, TRUE) - - switch(mode) - if(0) - if(iswallturf(target)) - var/turf/closed/wall/W = target - occupant_message("Deconstructing [W]...") - if(do_after_cooldown(W)) - chassis.spark_system.start() - W.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - playsound(W, 'sound/blank.ogg', 50, TRUE) - else if(isfloorturf(target)) - var/turf/open/floor/F = target - occupant_message("Deconstructing [F]...") - if(do_after_cooldown(target)) - chassis.spark_system.start() - F.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - playsound(F, 'sound/blank.ogg', 50, TRUE) - else if (istype(target, /obj/machinery/door/airlock)) - occupant_message("Deconstructing [target]...") - if(do_after_cooldown(target)) - chassis.spark_system.start() - qdel(target) - playsound(target, 'sound/blank.ogg', 50, TRUE) - if(1) - if(isspaceturf(target)) - var/turf/open/space/S = target - occupant_message("Building Floor...") - if(do_after_cooldown(S)) - S.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) - playsound(S, 'sound/blank.ogg', 50, TRUE) - chassis.spark_system.start() - else if(isfloorturf(target)) - var/turf/open/floor/F = target - occupant_message("Building Wall...") - if(do_after_cooldown(F)) - F.PlaceOnTop(/turf/closed/wall) - playsound(F, 'sound/blank.ogg', 50, TRUE) - chassis.spark_system.start() - if(2) - if(isfloorturf(target)) - occupant_message("Building Airlock...") - if(do_after_cooldown(target)) - chassis.spark_system.start() - var/obj/machinery/door/airlock/T = new /obj/machinery/door/airlock(target) - T.autoclose = TRUE - playsound(target, 'sound/blank.ogg', 50, TRUE) - playsound(target, 'sound/blank.ogg', 50, TRUE) - - - -/obj/item/mecha_parts/mecha_equipment/rcd/do_after_cooldown(atom/target) - . = ..() - -/obj/item/mecha_parts/mecha_equipment/rcd/Topic(href,href_list) - ..() - if(href_list["mode"]) - mode = text2num(href_list["mode"]) - switch(mode) - if(0) - occupant_message("Switched RCD to Deconstruct.") - energy_drain = initial(energy_drain) - if(1) - occupant_message("Switched RCD to Construct.") - energy_drain = 2*initial(energy_drain) - if(2) - occupant_message("Switched RCD to Construct Airlock.") - energy_drain = 2*initial(energy_drain) - return - -/obj/item/mecha_parts/mecha_equipment/rcd/get_equip_info() - return "[..()] \[D|C|A\]" - -//Dunno where else to put this so shrug -/obj/item/mecha_parts/mecha_equipment/ripleyupgrade - name = "Ripley MK-II Conversion Kit" - desc = "" - icon_state = "ripleyupgrade" - -/obj/item/mecha_parts/mecha_equipment/ripleyupgrade/can_attach(obj/mecha/working/ripley/M) - if(M.type != /obj/mecha/working/ripley) - to_chat(loc, "This conversion kit can only be applied to APLU MK-I models.") - return FALSE - if(M.cargo.len) - to_chat(loc, "[M]'s cargo hold must be empty before this conversion kit can be applied.") - return FALSE - if(!M.maint_access) //non-removable upgrade, so lets make sure the pilot or owner has their say. - to_chat(loc, "[M] must have maintenance protocols active in order to allow this conversion kit.") - return FALSE - if(M.occupant) //We're actualy making a new mech and swapping things over, it might get weird if players are involved - to_chat(loc, "[M] must be unoccupied before this conversion kit can be applied.") - return FALSE - if(!M.cell) //Turns out things break if the cell is missing - to_chat(loc, "The conversion process requires a cell installed.") - return FALSE - return TRUE - -/obj/item/mecha_parts/mecha_equipment/ripleyupgrade/attach(obj/mecha/M) - var/obj/mecha/working/ripley/mkii/N = new /obj/mecha/working/ripley/mkii(get_turf(M),1) - if(!N) - return - QDEL_NULL(N.cell) - if (M.cell) - N.cell = M.cell - M.cell.forceMove(N) - M.cell = null - QDEL_NULL(N.scanmod) - if (M.scanmod) - N.scanmod = M.scanmod - M.scanmod.forceMove(N) - M.scanmod = null - QDEL_NULL(N.capacitor) - if (M.capacitor) - N.capacitor = M.capacitor - M.capacitor.forceMove(N) - M.capacitor = null - N.update_part_values() - for(var/obj/item/mecha_parts/E in M.contents) - if(istype(E, /obj/item/mecha_parts/concealed_weapon_bay)) //why is the bay not just a variable change who did this - E.forceMove(N) - for(var/obj/item/mecha_parts/mecha_equipment/E in M.equipment) //Move the equipment over... - E.detach() - E.attach(N) - M.equipment -= E - N.dna_lock = M.dna_lock - N.maint_access = M.maint_access - N.strafe = M.strafe - N.obj_integrity = M.obj_integrity //This is not a repair tool - if (M.name != "\improper APLU MK-I \"Ripley\"") - N.name = M.name - M.wreckage = 0 - qdel(M) - playsound(get_turf(N),'sound/blank.ogg',50,TRUE) - return diff --git a/code/game/mecha/equipment/weapons/mecha_ammo.dm b/code/game/mecha/equipment/weapons/mecha_ammo.dm deleted file mode 100644 index c773eb2f91..0000000000 --- a/code/game/mecha/equipment/weapons/mecha_ammo.dm +++ /dev/null @@ -1,94 +0,0 @@ -/obj/item/mecha_ammo - name = "generic ammo box" - desc = "" - w_class = WEIGHT_CLASS_BULKY - icon = 'icons/mecha/mecha_ammo.dmi' - icon_state = "empty" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - var/rounds = 0 - var/round_term = "round" - var/direct_load //For weapons where we re-load the weapon itself rather than adding to the ammo storage. - var/load_audio = "sound/weapons/gun_magazine_insert_empty_1.ogg" - var/ammo_type - -/obj/item/mecha_ammo/proc/update_name() - if(!rounds) - name = "empty ammo box" - desc = "" - icon_state = "empty" - -/obj/item/mecha_ammo/attack_self(mob/user) - ..() - if(rounds) - to_chat(user, "I cannot flatten the ammo box until it's empty!") - return - - to_chat(user, "I fold [src] flat.") - var/I = new /obj/item/stack/sheet/metal(user.loc) - qdel(src) - user.put_in_hands(I) - -/obj/item/mecha_ammo/examine(mob/user) - . = ..() - if(rounds) - . += "There [rounds > 1?"are":"is"] [rounds] [round_term][rounds > 1?"s":""] left." - -/obj/item/mecha_ammo/incendiary - name = "incendiary ammo" - desc = "" - icon_state = "incendiary" - rounds = 24 - ammo_type = "incendiary" - -/obj/item/mecha_ammo/scattershot - name = "scattershot ammo" - desc = "" - icon_state = "scattershot" - rounds = 40 - ammo_type = "scattershot" - -/obj/item/mecha_ammo/lmg - name = "machine gun ammo" - desc = "" - icon_state = "lmg" - rounds = 300 - ammo_type = "lmg" - -/obj/item/mecha_ammo/missiles_br - name = "breaching missiles" - desc = "" - icon_state = "missile_br" - rounds = 6 - round_term = "missile" - direct_load = TRUE - load_audio = "sound/weapons/bulletinsert.ogg" - ammo_type = "missiles_br" - -/obj/item/mecha_ammo/missiles_he - name = "anti-armor missiles" - desc = "" - icon_state = "missile_he" - rounds = 8 - round_term = "missile" - direct_load = TRUE - load_audio = "sound/weapons/bulletinsert.ogg" - ammo_type = "missiles_he" - - -/obj/item/mecha_ammo/flashbang - name = "launchable flashbangs" - desc = "" - icon_state = "flashbang" - rounds = 6 - round_term = "grenade" - ammo_type = "flashbang" - -/obj/item/mecha_ammo/clusterbang - name = "launchable flashbang clusters" - desc = "" - icon_state = "clusterbang" - rounds = 3 - round_term = "cluster" - direct_load = TRUE - ammo_type = "clusterbang" diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm deleted file mode 100644 index a6e10b5fb5..0000000000 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ /dev/null @@ -1,493 +0,0 @@ -/obj/item/mecha_parts/mecha_equipment/weapon - name = "mecha weapon" - range = MECHA_RANGED - destroy_sound = 'sound/blank.ogg' - var/projectile - var/fire_sound - var/projectiles_per_shot = 1 - var/variance = 0 - var/randomspread = 0 //use random spread for machineguns, instead of shotgun scatter - var/projectile_delay = 0 - var/firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect //the visual effect appearing when the weapon is fired. - var/kickback = TRUE //Will using this weapon in no grav push mecha back. - -/obj/item/mecha_parts/mecha_equipment/weapon/can_attach(obj/mecha/M) - if(!..()) - return FALSE - if(istype(M, /obj/mecha/combat)) - return TRUE - if((locate(/obj/item/mecha_parts/concealed_weapon_bay) in M.contents) && !(locate(/obj/item/mecha_parts/mecha_equipment/weapon) in M.equipment)) - return TRUE - return FALSE - -/obj/item/mecha_parts/mecha_equipment/weapon/proc/get_shot_amount() - return projectiles_per_shot - -/obj/item/mecha_parts/mecha_equipment/weapon/action(atom/target, params) - if(!action_checks(target)) - return 0 - - var/turf/curloc = get_turf(chassis) - var/turf/targloc = get_turf(target) - if (!targloc || !istype(targloc) || !curloc) - return 0 - if (targloc == curloc) - return 0 - - set_ready_state(0) - for(var/i=1 to get_shot_amount()) - var/obj/projectile/A = new projectile(curloc) - A.firer = chassis.occupant - A.original = target - if(!A.suppressed && firing_effect_type) - new firing_effect_type(get_turf(src), chassis.dir) - - var/spread = 0 - if(variance) - if(randomspread) - spread = round((rand() - 0.5) * variance) - else - spread = round((i / projectiles_per_shot - 0.5) * variance) - A.preparePixelProjectile(target, chassis.occupant, params, spread) - - A.fire() - playsound(chassis, fire_sound, 50, TRUE) - - sleep(max(0, projectile_delay)) - - if(kickback) - chassis.newtonian_move(turn(chassis.dir,180)) - chassis.log_message("Fired from [src.name], targeting [target].", LOG_MECHA) - return 1 - - -//Base energy weapon type -/obj/item/mecha_parts/mecha_equipment/weapon/energy - name = "general energy weapon" - firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/energy - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/get_shot_amount() - return min(round(chassis.cell.charge / energy_drain), projectiles_per_shot) - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/start_cooldown() - set_ready_state(0) - chassis.use_power(energy_drain*get_shot_amount()) - addtimer(CALLBACK(src, PROC_REF(set_ready_state), 1), equip_cooldown) - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser - equip_cooldown = 8 - name = "\improper CH-PS \"Immolator\" laser" - desc = "" - icon_state = "mecha_laser" - energy_drain = 30 - projectile = /obj/projectile/beam/laser - fire_sound = 'sound/blank.ogg' - harmful = TRUE - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/disabler - equip_cooldown = 8 - name = "\improper CH-DS \"Peacemaker\" disabler" - desc = "" - icon_state = "mecha_disabler" - energy_drain = 30 - projectile = /obj/projectile/beam/disabler - fire_sound = 'sound/blank.ogg' - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy - equip_cooldown = 15 - name = "\improper CH-LC \"Solaris\" laser cannon" - desc = "" - icon_state = "mecha_laser" - energy_drain = 60 - projectile = /obj/projectile/beam/laser/heavylaser - fire_sound = 'sound/blank.ogg' - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion - equip_cooldown = 20 - name = "\improper MKIV ion heavy cannon" - desc = "" - icon_state = "mecha_ion" - energy_drain = 120 - projectile = /obj/projectile/ion - fire_sound = 'sound/blank.ogg' - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla - equip_cooldown = 35 - name = "\improper MKI Tesla Cannon" - desc = "" - icon_state = "mecha_ion" - energy_drain = 500 - projectile = /obj/projectile/energy/tesla/cannon - fire_sound = 'sound/blank.ogg' - harmful = TRUE - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse - equip_cooldown = 30 - name = "eZ-13 MK2 heavy pulse rifle" - desc = "" - icon_state = "mecha_pulse" - energy_drain = 120 - projectile = /obj/projectile/beam/pulse/heavy - fire_sound = 'sound/blank.ogg' - harmful = TRUE - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma - equip_cooldown = 10 - name = "217-D Heavy Plasma Cutter" - desc = "" - icon_state = "mecha_plasmacutter" - item_state = "plasmacutter" - lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - energy_drain = 30 - projectile = /obj/projectile/plasma/adv/mech - fire_sound = 'sound/blank.ogg' - harmful = TRUE - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/can_attach(obj/mecha/working/M) - if(..()) //combat mech - return 1 - else if(M.equipment.len < M.max_equip && istype(M)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser - name = "\improper PBT \"Pacifier\" mounted taser" - desc = "" - icon_state = "mecha_taser" - energy_drain = 20 - equip_cooldown = 8 - projectile = /obj/projectile/energy/electrode - fire_sound = 'sound/blank.ogg' - - -/obj/item/mecha_parts/mecha_equipment/weapon/honker - name = "\improper HoNkER BlAsT 5000" - desc = "" - icon_state = "mecha_honker" - energy_drain = 200 - equip_cooldown = 150 - range = MECHA_MELEE|MECHA_RANGED - kickback = FALSE - -/obj/item/mecha_parts/mecha_equipment/weapon/honker/can_attach(obj/mecha/combat/honker/M) - if(..()) - if(istype(M)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/weapon/honker/action(target, params) - if(!action_checks(target)) - return - playsound(chassis, 'sound/blank.ogg', 100, TRUE) - chassis.occupant_message("HONK") - for(var/mob/living/carbon/M in ohearers(6, chassis)) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(istype(H.ears, /obj/item/clothing/ears/earmuffs)) - continue - var/turf/turf_check = get_turf(M) - if(isspaceturf(turf_check) && !turf_check.Adjacent(src)) //in space nobody can hear you honk. - continue - to_chat(M, "HONK") - M.SetSleeping(0) - M.stuttering += 20 - M.adjustEarDamage(0, 30) - M.Paralyze(60) - if(prob(30)) - M.Stun(200) - M.Unconscious(80) - else - M.Jitter(500) - - log_message("Honked from [src.name]. HONK!", LOG_MECHA) - var/turf/T = get_turf(src) - message_admins("[ADMIN_LOOKUPFLW(chassis.occupant)] used a Mecha Honker in [ADMIN_VERBOSEJMP(T)]") - log_game("[key_name(chassis.occupant)] used a Mecha Honker in [AREACOORD(T)]") - return 1 - - -//Base ballistic weapon type -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic - name = "general ballistic weapon" - fire_sound = 'sound/blank.ogg' - var/projectiles - var/projectiles_cache //ammo to be loaded in, if possible. - var/projectiles_cache_max - var/projectile_energy_cost - var/disabledreload //For weapons with no cache (like the rockets) which are reloaded by hand - var/ammo_type - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/get_shot_amount() - return min(projectiles, projectiles_per_shot) - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/action_checks(target) - if(!..()) - return 0 - if(projectiles <= 0) - return 0 - return 1 - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/get_equip_info() - return "[..()] \[[src.projectiles][projectiles_cache_max &&!projectile_energy_cost?"/[projectiles_cache]":""]\][!disabledreload &&(src.projectiles < initial(src.projectiles))?" - Rearm":null]" - - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/rearm() - if(projectiles < initial(projectiles)) - var/projectiles_to_add = initial(projectiles) - projectiles - - if(projectile_energy_cost) - while(chassis.get_charge() >= projectile_energy_cost && projectiles_to_add) - projectiles++ - projectiles_to_add-- - chassis.use_power(projectile_energy_cost) - - else - if(!projectiles_cache) - return FALSE - if(projectiles_to_add <= projectiles_cache) - projectiles = projectiles + projectiles_to_add - projectiles_cache = projectiles_cache - projectiles_to_add - else - projectiles = projectiles + projectiles_cache - projectiles_cache = 0 - - send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) - log_message("Rearmed [src.name].", LOG_MECHA) - return TRUE - - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/needs_rearm() - . = !(projectiles > 0) - - - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/Topic(href, href_list) - ..() - if (href_list["rearm"]) - src.rearm() - return - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/action(atom/target) - if(..()) - projectiles -= get_shot_amount() - send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) - return 1 - - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine - name = "\improper FNX-99 \"Hades\" Carbine" - desc = "" - icon_state = "mecha_carbine" - equip_cooldown = 10 - projectile = /obj/projectile/bullet/incendiary/fnx99 - projectiles = 24 - projectiles_cache = 24 - projectiles_cache_max = 96 - harmful = TRUE - ammo_type = "incendiary" - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced - name = "\improper S.H.H. \"Quietus\" Carbine" - desc = "" - fire_sound = 'sound/blank.ogg' - icon_state = "mecha_mime" - equip_cooldown = 30 - projectile = /obj/projectile/bullet/mime - projectiles = 6 - projectile_energy_cost = 50 - harmful = TRUE - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot - name = "\improper LBX AC 10 \"Scattershot\"" - desc = "" - icon_state = "mecha_scatter" - equip_cooldown = 20 - projectile = /obj/projectile/bullet/scattershot - projectiles = 40 - projectiles_cache = 40 - projectiles_cache_max = 160 - projectiles_per_shot = 4 - variance = 25 - harmful = TRUE - ammo_type = "scattershot" - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg - name = "\improper Ultra AC 2" - desc = "" - icon_state = "mecha_uac2" - equip_cooldown = 10 - projectile = /obj/projectile/bullet/lmg - projectiles = 300 - projectiles_cache = 300 - projectiles_cache_max = 1200 - projectiles_per_shot = 3 - variance = 6 - randomspread = 1 - projectile_delay = 2 - harmful = TRUE - ammo_type = "lmg" - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack - name = "\improper SRM-8 missile rack" - desc = "" - icon_state = "mecha_missilerack" - projectile = /obj/projectile/bullet/a84mm_he - fire_sound = 'sound/blank.ogg' - projectiles = 8 - projectiles_cache = 0 - projectiles_cache_max = 0 - disabledreload = TRUE - equip_cooldown = 60 - harmful = TRUE - ammo_type = "missiles_he" - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/breaching - name = "\improper BRM-6 missile rack" - desc = "" - icon_state = "mecha_missilerack_six" - projectile = /obj/projectile/bullet/a84mm_br - fire_sound = 'sound/blank.ogg' - projectiles = 6 - projectiles_cache = 0 - projectiles_cache_max = 0 - disabledreload = TRUE - equip_cooldown = 60 - harmful = TRUE - ammo_type = "missiles_br" - - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher - var/missile_speed = 2 - var/missile_range = 30 - var/diags_first = FALSE - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/action(target) - if(!action_checks(target)) - return - var/obj/O = new projectile(chassis.loc) - playsound(chassis, fire_sound, 50, TRUE) - log_message("Launched a [O.name] from [name], targeting [target].", LOG_MECHA) - projectiles-- - proj_init(O) - O.throw_at(target, missile_range, missile_speed, chassis.occupant, FALSE, diagonals_first = diags_first) - return 1 - -//used for projectile initilisation (priming flashbang) and additional logging -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/proc/proj_init(obj/O) - return - - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang - name = "\improper SGL-6 grenade launcher" - desc = "" - icon_state = "mecha_grenadelnchr" - projectile = /obj/item/grenade/flashbang - fire_sound = 'sound/blank.ogg' - projectiles = 6 - projectiles_cache = 6 - projectiles_cache_max = 24 - missile_speed = 1.5 - equip_cooldown = 60 - var/det_time = 20 - ammo_type = "flashbang" - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/proj_init(obj/item/grenade/flashbang/F) - var/turf/T = get_turf(src) - message_admins("[ADMIN_LOOKUPFLW(chassis.occupant)] fired a [src] in [ADMIN_VERBOSEJMP(T)]") - log_game("[key_name(chassis.occupant)] fired a [src] in [AREACOORD(T)]") - addtimer(CALLBACK(F, TYPE_PROC_REF(/obj/item/grenade/flashbang, prime)), det_time) - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/clusterbang //Because I am a heartless bastard -Sieve //Heartless? for making the poor man's honkblast? - Kaze - name = "\improper SOB-3 grenade launcher" - desc = "" - projectiles = 3 - projectiles_cache = 0 - projectiles_cache_max = 0 - disabledreload = TRUE - projectile = /obj/item/grenade/clusterbuster - equip_cooldown = 90 - ammo_type = "clusterbang" - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar - name = "banana mortar" - desc = "" - icon_state = "mecha_bananamrtr" - projectile = /obj/item/grown/bananapeel - fire_sound = 'sound/blank.ogg' - projectiles = 15 - missile_speed = 1.5 - projectile_energy_cost = 100 - equip_cooldown = 20 - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar/can_attach(obj/mecha/combat/honker/M) - if(..()) - if(istype(M)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar - name = "mousetrap mortar" - desc = "" - icon_state = "mecha_mousetrapmrtr" - projectile = /obj/item/assembly/mousetrap/armed - fire_sound = 'sound/blank.ogg' - projectiles = 15 - missile_speed = 1.5 - projectile_energy_cost = 100 - equip_cooldown = 10 - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar/can_attach(obj/mecha/combat/honker/M) - if(..()) - if(istype(M)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar/proj_init(obj/item/assembly/mousetrap/armed/M) - M.secured = 1 - - -//Classic extending punching glove, but weaponised! -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove - name = "\improper Oingo Boingo Punch-face" - desc = "" - icon_state = "mecha_punching_glove" - energy_drain = 250 - equip_cooldown = 20 - range = MECHA_MELEE|MECHA_RANGED - missile_range = 5 - projectile = /obj/item/punching_glove - fire_sound = 'sound/blank.ogg' - projectiles = 10 - projectile_energy_cost = 500 - diags_first = TRUE - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/can_attach(obj/mecha/combat/honker/M) - if(..()) - if(istype(M)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/action(target) - . = ..() - if(.) - chassis.occupant_message("HONK") - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/proj_init(obj/item/punching_glove/PG) - if(!istype(PG)) - return - //has to be low sleep or it looks weird, the beam doesn't exist for very long so it's a non-issue - chassis.Beam(PG, icon_state = "chain", time = missile_range * 20, maxdistance = missile_range + 2, beam_sleep_time = 1) - -/obj/item/punching_glove - name = "punching glove" - desc = "" - throwforce = 35 - icon_state = "punching_glove" - -/obj/item/punching_glove/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(!..()) - if(ismovableatom(hit_atom)) - var/atom/movable/AM = hit_atom - AM.safe_throw_at(get_edge_target_turf(AM,get_dir(src, AM)), 7, 2) - qdel(src) diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm deleted file mode 100644 index 7aaebaef27..0000000000 --- a/code/game/mecha/mech_bay.dm +++ /dev/null @@ -1,153 +0,0 @@ -/turf/open/floor/mech_bay_recharge_floor // Whos idea it was - name = "mech bay recharge station" // Recharging turfs - desc = "" - icon = 'icons/turf/floors.dmi' // That are set in stone to check the west turf for recharge port - icon_state = "recharge_floor" // Some people just want to watch the world burn i guess - -/turf/open/floor/mech_bay_recharge_floor/break_tile() - ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - -/turf/open/floor/mech_bay_recharge_floor/airless - icon_state = "recharge_floor_asteroid" - initial_gas_mix = AIRLESS_ATMOS - -/obj/machinery/mech_bay_recharge_port - name = "mech bay power port" - desc = "" - density = TRUE - dir = EAST - icon = 'icons/mecha/mech_bay.dmi' - icon_state = "recharge_port" - circuit = /obj/item/circuitboard/machine/mech_recharger - var/obj/mecha/recharging_mech - var/obj/machinery/computer/mech_bay_power_console/recharge_console - var/max_charge = 50 - var/on = FALSE - var/turf/recharging_turf = null - -/obj/machinery/mech_bay_recharge_port/Initialize() - . = ..() - recharging_turf = get_step(loc, dir) - -/obj/machinery/mech_bay_recharge_port/Destroy() - if (recharge_console && recharge_console.recharge_port == src) - recharge_console.recharge_port = null - return ..() - -/obj/machinery/mech_bay_recharge_port/setDir(new_dir) - . = ..() - recharging_turf = get_step(loc, dir) - -/obj/machinery/mech_bay_recharge_port/RefreshParts() - var/MC - for(var/obj/item/stock_parts/capacitor/C in component_parts) - MC += C.rating - max_charge = MC * 25 - -/obj/machinery/mech_bay_recharge_port/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Base recharge rate at [max_charge]J per cycle." - -/obj/machinery/mech_bay_recharge_port/process() - if(stat & NOPOWER || !recharge_console) - return - if(!recharging_mech) - recharging_mech = locate(/obj/mecha) in recharging_turf - if(recharging_mech) - recharge_console.update_icon() - if(recharging_mech && recharging_mech.cell) - if(recharging_mech.cell.charge < recharging_mech.cell.maxcharge) - var/delta = min(max_charge, recharging_mech.cell.maxcharge - recharging_mech.cell.charge) - recharging_mech.give_power(delta) - use_power(delta*150) - else - recharge_console.update_icon() - if(recharging_mech.loc != recharging_turf) - recharging_mech = null - recharge_console.update_icon() - - -/obj/machinery/mech_bay_recharge_port/attackby(obj/item/I, mob/user, params) - if(default_deconstruction_screwdriver(user, "recharge_port-o", "recharge_port", I)) - return - - if(default_change_direction_wrench(user, I)) - recharging_turf = get_step(loc, dir) - return - - if(default_deconstruction_crowbar(I)) - return - return ..() - -/obj/machinery/computer/mech_bay_power_console - name = "mech bay power control console" - desc = "" - icon_screen = "recharge_comp" - icon_keyboard = "rd_key" - circuit = /obj/item/circuitboard/computer/mech_bay_power_console - ui_x = 400 - ui_y = 170 - var/obj/machinery/mech_bay_recharge_port/recharge_port - light_color = LIGHT_COLOR_PINK - -/obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "mech_bay_power_console", "Mech Bay Power Control Console", ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/computer/mech_bay_power_console/ui_act(action, params) - if(..()) - return - switch(action) - if("reconnect") - reconnect() - . = TRUE - update_icon() - -/obj/machinery/computer/mech_bay_power_console/ui_data(mob/user) - var/list/data = list() - if(recharge_port && !QDELETED(recharge_port)) - data["recharge_port"] = list("mech" = null) - if(recharge_port.recharging_mech && !QDELETED(recharge_port.recharging_mech)) - data["recharge_port"]["mech"] = list("health" = recharge_port.recharging_mech.obj_integrity, "maxhealth" = recharge_port.recharging_mech.max_integrity, "cell" = null) - if(recharge_port.recharging_mech.cell && !QDELETED(recharge_port.recharging_mech.cell)) - data["recharge_port"]["mech"]["cell"] = list( - "charge" = recharge_port.recharging_mech.cell.charge, - "maxcharge" = recharge_port.recharging_mech.cell.maxcharge - ) - return data - - -/obj/machinery/computer/mech_bay_power_console/proc/reconnect() - if(recharge_port) - return - recharge_port = locate(/obj/machinery/mech_bay_recharge_port) in range(1) - if(!recharge_port ) - for(var/D in GLOB.cardinals) - var/turf/A = get_step(src, D) - A = get_step(A, D) - recharge_port = locate(/obj/machinery/mech_bay_recharge_port) in A - if(recharge_port) - break - if(recharge_port) - if(!recharge_port.recharge_console) - recharge_port.recharge_console = src - else - recharge_port = null - -/obj/machinery/computer/mech_bay_power_console/update_icon() - ..() - if(!recharge_port || !recharge_port.recharging_mech || !recharge_port.recharging_mech.cell || !(recharge_port.recharging_mech.cell.charge < recharge_port.recharging_mech.cell.maxcharge) || stat & (NOPOWER|BROKEN)) - return - add_overlay("recharge_comp_on") - -/obj/machinery/computer/mech_bay_power_console/Initialize() - . = ..() - reconnect() - -/obj/machinery/computer/mech_bay_power_console/Destroy() - if (recharge_port && recharge_port.recharge_console == src) - recharge_port.recharge_console = null - return ..() diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm deleted file mode 100644 index 279fa7533e..0000000000 --- a/code/game/mecha/mech_fabricator.dm +++ /dev/null @@ -1,450 +0,0 @@ -/obj/machinery/mecha_part_fabricator - icon = 'icons/obj/robotics.dmi' - icon_state = "fab-idle" - name = "exosuit fabricator" - desc = "" - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 20 - active_power_usage = 5000 - req_access = list(ACCESS_ROBOTICS) - circuit = /obj/item/circuitboard/machine/mechfab - var/time_coeff = 1 - var/component_coeff = 1 - var/datum/techweb/specialized/autounlocking/exofab/stored_research - var/sync = 0 - var/part_set - var/datum/design/being_built - var/list/queue = list() - var/processing_queue = 0 - var/screen = "main" - var/link_on_init = TRUE - var/temp - var/datum/component/remote_materials/rmat - var/list/part_sets = list( - "Cyborg", - "Ripley", - "Firefighter", - "Odysseus", - "Gygax", - "Durand", - "H.O.N.K", - "Phazon", - "Exosuit Equipment", - "Exosuit Ammunition", - "Cyborg Upgrade Modules", - "Misc" - ) - -/obj/machinery/mecha_part_fabricator/Initialize(mapload) - stored_research = new - rmat = AddComponent(/datum/component/remote_materials, "mechfab", mapload && link_on_init) - RefreshParts() //Recalculating local material sizes if the fab isn't linked - return ..() - -/obj/machinery/mecha_part_fabricator/RefreshParts() - var/T = 0 - - //maximum stocking amount (default 300000, 600000 at T4) - for(var/obj/item/stock_parts/matter_bin/M in component_parts) - T += M.rating - rmat.set_local_size((200000 + (T*50000))) - - //resources adjustment coefficient (1 -> 0.85 -> 0.7 -> 0.55) - T = 1.15 - for(var/obj/item/stock_parts/micro_laser/Ma in component_parts) - T -= Ma.rating*0.15 - component_coeff = T - - //building time adjustment coefficient (1 -> 0.8 -> 0.6) - T = -1 - for(var/obj/item/stock_parts/manipulator/Ml in component_parts) - T += Ml.rating - time_coeff = round(initial(time_coeff) - (initial(time_coeff)*(T))/5,0.01) - -/obj/machinery/mecha_part_fabricator/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Storing up to [rmat.local_size] material units.
          Material consumption at [component_coeff*100]%.
          Build time reduced by [100-time_coeff*100]%." - -/obj/machinery/mecha_part_fabricator/emag_act() - if(obj_flags & EMAGGED) - return - obj_flags |= EMAGGED - req_access = list() - say("DB error \[Code 0x00F1\]") - sleep(10) - say("Attempting auto-repair...") - sleep(15) - say("User DB corrupted \[Code 0x00FA\]. Truncating data structure...") - sleep(30) - say("User DB truncated. Please contact your Nanotrasen system operator for future assistance.") - -/obj/machinery/mecha_part_fabricator/proc/output_parts_list(set_name) - var/output = "" - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(D.build_type & MECHFAB) - if(!(set_name in D.category)) - continue - output += "
          [output_part_info(D)]
          \[" - if(check_resources(D)) - output += "Build | " - output += "Add to queue\]\[?\]
          " - return output - -/obj/machinery/mecha_part_fabricator/proc/output_part_info(datum/design/D) - var/output = "[initial(D.name)] (Cost: [output_part_cost(D)]) [get_construction_time_w_coeff(D)/10]sec" - return output - -/obj/machinery/mecha_part_fabricator/proc/output_part_cost(datum/design/D) - var/i = 0 - var/output - for(var/c in D.materials) - var/datum/material/M = c - output += "[i?" | ":null][get_resource_cost_w_coeff(D, M)] [M.name]" - i++ - return output - -/obj/machinery/mecha_part_fabricator/proc/output_available_resources() - var/output - var/datum/component/material_container/materials = rmat.mat_container - - if(materials) - for(var/mat_id in materials.materials) - var/datum/material/M = mat_id - var/amount = materials.materials[mat_id] - var/ref = REF(M) - output += "[M.name]: [amount] cm³" - if(amount >= MINERAL_MATERIAL_AMOUNT) - output += "- Remove \[1\]" - if(amount >= (MINERAL_MATERIAL_AMOUNT * 10)) - output += " | \[10\]" - output += " | \[50\]" - output += "
          " - else - output += "No material storage connected, please contact the quartermaster.
          " - return output - -/obj/machinery/mecha_part_fabricator/proc/get_resources_w_coeff(datum/design/D) - var/list/resources = list() - for(var/R in D.materials) - var/datum/material/M = R - resources[M] = get_resource_cost_w_coeff(D, M) - return resources - -/obj/machinery/mecha_part_fabricator/proc/check_resources(datum/design/D) - if(D.reagents_list.len) // No reagents storage - no reagent designs. - return FALSE - var/datum/component/material_container/materials = rmat.mat_container - if(materials.has_materials(get_resources_w_coeff(D))) - return TRUE - return FALSE - -/obj/machinery/mecha_part_fabricator/proc/build_part(datum/design/D) - var/list/res_coef = get_resources_w_coeff(D) - - var/datum/component/material_container/materials = rmat.mat_container - if (!materials) - say("No access to material storage, please contact the quartermaster.") - return FALSE - if (rmat.on_hold()) - say("Mineral access is on hold, please contact the quartermaster.") - return FALSE - if(!check_resources(D)) - say("Not enough resources. Queue processing stopped.") - return FALSE - being_built = D - desc = "" - materials.use_materials(res_coef) - rmat.silo_log(src, "built", -1, "[D.name]", res_coef) - - add_overlay("fab-active") - use_power = ACTIVE_POWER_USE - updateUsrDialog() - sleep(get_construction_time_w_coeff(D)) - use_power = IDLE_POWER_USE - cut_overlay("fab-active") - desc = initial(desc) - - var/location = get_step(src,(dir)) - var/obj/item/I = new D.build_path(location) - I.material_flags |= MATERIAL_NO_EFFECTS //Find a better way to do this. - I.set_custom_materials(res_coef) - say("\The [I] is complete.") - being_built = null - - updateUsrDialog() - return TRUE - -/obj/machinery/mecha_part_fabricator/proc/update_queue_on_page() - send_byjax(usr,"mecha_fabricator.browser","queue",list_queue()) - return - -/obj/machinery/mecha_part_fabricator/proc/add_part_set_to_queue(set_name) - if(set_name in part_sets) - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(D.build_type & MECHFAB) - if(set_name in D.category) - add_to_queue(D) - -/obj/machinery/mecha_part_fabricator/proc/add_to_queue(D) - if(!istype(queue)) - queue = list() - if(D) - queue[++queue.len] = D - return queue.len - -/obj/machinery/mecha_part_fabricator/proc/remove_from_queue(index) - if(!isnum(index) || !ISINTEGER(index) || !istype(queue) || (index<1 || index>queue.len)) - return FALSE - queue.Cut(index,++index) - return TRUE - -/obj/machinery/mecha_part_fabricator/proc/process_queue() - var/datum/design/D = queue[1] - if(!D) - remove_from_queue(1) - if(queue.len) - return process_queue() - else - return - temp = null - while(D) - if(stat&(NOPOWER|BROKEN)) - return FALSE - if(build_part(D)) - remove_from_queue(1) - else - return FALSE - D = listgetindex(queue, 1) - say("Queue processing finished successfully.") - -/obj/machinery/mecha_part_fabricator/proc/list_queue() - var/output = "Queue contains:" - if(!istype(queue) || !queue.len) - output += "
          Nothing" - else - output += "
            " - var/i = 0 - for(var/datum/design/D in queue) - i++ - var/obj/part = D.build_path - output += "" - output += initial(part.name) + " - " - output += "[i>1?"":null] " - output += "[i↓":null] " - output += "Remove" - - output += "
          " - output += "\[Process queue | Clear queue\]" - return output - -/obj/machinery/mecha_part_fabricator/proc/sync() - temp = "Updating local R&D database..." - updateUsrDialog() - sleep(30) //only sleep if called by user - - for(var/obj/machinery/computer/rdconsole/RDC in oview(7,src)) - RDC.stored_research.copy_research_to(stored_research) - temp = "Processed equipment designs.
          " - //check if the tech coefficients have changed - temp += "Return" - - updateUsrDialog() - say("Successfully synchronized with R&D server.") - return - - temp = "Unable to connect to local R&D Database.
          Please check your connections and try again.
          Return" - updateUsrDialog() - return - -/obj/machinery/mecha_part_fabricator/proc/get_resource_cost_w_coeff(datum/design/D, datum/material/resource, roundto = 1) - return round(D.materials[resource]*component_coeff, roundto) - -/obj/machinery/mecha_part_fabricator/proc/get_construction_time_w_coeff(datum/design/D, roundto = 1) //aran - return round(initial(D.construction_time)*time_coeff, roundto) - -/obj/machinery/mecha_part_fabricator/ui_interact(mob/user as mob) - . = ..() - var/dat, left_part - user.set_machine(src) - var/turf/exit = get_step(src,(dir)) - if(exit.density) - say("Error! Part outlet is obstructed.") - return - if(temp) - left_part = temp - else if(being_built) - var/obj/I = being_built.build_path - left_part = {"Building [initial(I.name)].
          - Please wait until completion...
          "} - else - switch(screen) - if("main") - left_part = output_available_resources()+"
          " - left_part += "Sync with R&D servers
          " - for(var/part_set in part_sets) - left_part += "[part_set] - \[Add all parts to queue\]
          " - if("parts") - left_part += output_parts_list(part_set) - left_part += "
          Return" - dat = {" - - [name] - - - - - - - - - -
          - [left_part] - - [list_queue()] -
          - - "} - user << browse(dat, "window=mecha_fabricator;size=1000x430") - onclose(user, "mecha_fabricator") - return - -/obj/machinery/mecha_part_fabricator/Topic(href, href_list) - if(..()) - return - if(href_list["part_set"]) - var/tpart_set = href_list["part_set"] - if(tpart_set) - if(tpart_set=="clear") - part_set = null - else - part_set = tpart_set - screen = "parts" - if(href_list["part"]) - var/T = href_list["part"] - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(D.build_type & MECHFAB) - if(D.id == T) - if(!processing_queue) - build_part(D) - else - add_to_queue(D) - break - if(href_list["add_to_queue"]) - var/T = href_list["add_to_queue"] - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(D.build_type & MECHFAB) - if(D.id == T) - add_to_queue(D) - break - return update_queue_on_page() - if(href_list["remove_from_queue"]) - remove_from_queue(text2num(href_list["remove_from_queue"])) - return update_queue_on_page() - if(href_list["partset_to_queue"]) - add_part_set_to_queue(href_list["partset_to_queue"]) - return update_queue_on_page() - if(href_list["process_queue"]) - INVOKE_ASYNC(src, PROC_REF(do_process_queue)) - if(href_list["clear_temp"]) - temp = null - if(href_list["screen"]) - screen = href_list["screen"] - if(href_list["queue_move"] && href_list["index"]) - var/index = text2num(href_list["index"]) - var/new_index = index + text2num(href_list["queue_move"]) - if(isnum(index) && isnum(new_index) && ISINTEGER(index) && ISINTEGER(new_index)) - if(ISINRANGE(new_index,1,queue.len)) - queue.Swap(index,new_index) - return update_queue_on_page() - if(href_list["clear_queue"]) - queue = list() - return update_queue_on_page() - if(href_list["sync"]) - sync() - if(href_list["part_desc"]) - var/T = href_list["part_desc"] - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(D.build_type & MECHFAB) - if(D.id == T) - var/obj/part = D.build_path - temp = {"

          [initial(part.name)] description:

          - [initial(part.desc)]
          - Return - "} - break - - if(href_list["remove_mat"] && href_list["material"]) - var/datum/material/Mat = locate(href_list["material"]) - eject_sheets(Mat, text2num(href_list["remove_mat"])) - - updateUsrDialog() - return - -/obj/machinery/mecha_part_fabricator/proc/do_process_queue() - if(processing_queue || being_built) - return FALSE - processing_queue = 1 - process_queue() - processing_queue = 0 - -/obj/machinery/mecha_part_fabricator/proc/eject_sheets(eject_sheet, eject_amt) - var/datum/component/material_container/mat_container = rmat.mat_container - if (!mat_container) - say("No access to material storage, please contact the quartermaster.") - return 0 - if (rmat.on_hold()) - say("Mineral access is on hold, please contact the quartermaster.") - return 0 - var/count = mat_container.retrieve_sheets(text2num(eject_amt), eject_sheet, drop_location()) - var/list/matlist = list() - matlist[eject_sheet] = text2num(eject_amt) - rmat.silo_log(src, "ejected", -count, "sheets", matlist) - return count - -/obj/machinery/mecha_part_fabricator/proc/AfterMaterialInsert(item_inserted, id_inserted, amount_inserted) - var/datum/material/M = id_inserted - add_overlay("fab-load-[M.name]") - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, cut_overlay), "fab-load-[M.name]"), 10) - updateUsrDialog() - -/obj/machinery/mecha_part_fabricator/attackby(obj/item/W, mob/user, params) - if(default_deconstruction_screwdriver(user, "fab-o", "fab-idle", W)) - return TRUE - - if(default_deconstruction_crowbar(W)) - return TRUE - - return ..() - - -/obj/machinery/mecha_part_fabricator/proc/is_insertion_ready(mob/user) - if(panel_open) - to_chat(user, "I can't load [src] while it's opened!") - return FALSE - if(being_built) - to_chat(user, "\The [src] is currently processing! Please wait until completion.") - return FALSE - - return TRUE - -/obj/machinery/mecha_part_fabricator/maint - link_on_init = FALSE diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm deleted file mode 100644 index 04663439df..0000000000 --- a/code/game/mecha/mecha.dm +++ /dev/null @@ -1,1195 +0,0 @@ -/obj/mecha - name = "mecha" - desc = "" - icon = 'icons/mecha/mecha.dmi' - density = TRUE //Dense. To raise the heat. - opacity = 1 ///opaque. Menacing. - anchored = TRUE //no pulling around. - resistance_flags = FIRE_PROOF | ACID_PROOF - layer = BELOW_MOB_LAYER//icon draw layer - infra_luminosity = 15 //byond implementation is bugged. - force = 5 - flags_1 = HEAR_1 - var/ruin_mecha = FALSE //if the mecha starts on a ruin, don't automatically give it a tracking beacon to prevent metagaming. - var/can_move = 0 //time of next allowed movement - var/mob/living/carbon/occupant = null - var/step_in = 10 //make a step in step_in/10 sec. - var/dir_in = 2//What direction will the mech face when entered/powered on? Defaults to South. - var/normal_step_energy_drain = 10 //How much energy the mech will consume each time it moves. This variable is a backup for when leg actuators affect the energy drain. - var/step_energy_drain = 10 - var/melee_energy_drain = 15 - var/overload_step_energy_drain_min = 100 - max_integrity = 300 //max_integrity is base health - var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act. - armor = list("melee" = 20, "bullet" = 10, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) - var/list/facing_modifiers = list(MECHA_FRONT_ARMOUR = 1.5, MECHA_SIDE_ARMOUR = 1, MECHA_BACK_ARMOUR = 0.5) - var/equipment_disabled = 0 //disabled due to EMP - var/obj/item/stock_parts/cell/cell ///Keeps track of the mech's cell - var/obj/item/stock_parts/scanning_module/scanmod ///Keeps track of the mech's scanning module - var/obj/item/stock_parts/capacitor/capacitor ///Keeps track of the mech's capacitor - var/construction_state = MECHA_LOCKED - var/last_message = 0 - var/add_req_access = 1 - var/maint_access = 0 - var/dna_lock //dna-locking the mech - var/list/proc_res = list() //stores proc owners, like proc_res["functionname"] = owner reference - var/datum/effect_system/spark_spread/spark_system = new - var/lights = FALSE - var/lights_power = 6 - var/last_user_hud = 1 // used to show/hide the mecha hud while preserving previous preference - var/completely_disabled = FALSE //stops the mech from doing anything - - var/bumpsmash = 0 //Whether or not the mech destroys walls by running into it. - //inner atmos - var/use_internal_tank = 0 - var/internal_tank_valve = ONE_ATMOSPHERE - var/obj/machinery/portable_atmospherics/canister/internal_tank - var/datum/gas_mixture/cabin_air - var/obj/machinery/atmospherics/components/unary/portables_connector/connected_port = null - - var/obj/item/radio/mech/radio - var/list/trackers = list() - - var/max_temperature = 25000 - var/internal_damage_threshold = 50 //health percentage below which internal damage is possible - var/internal_damage = 0 //contains bitflags - - var/list/operation_req_access = list()//required access level for mecha operation - var/list/internals_req_access = list(ACCESS_MECH_ENGINE, ACCESS_MECH_SCIENCE)//REQUIRED ACCESS LEVEL TO OPEN CELL COMPARTMENT - - var/wreckage - - var/list/equipment = new - var/obj/item/mecha_parts/mecha_equipment/selected - var/max_equip = 3 - - var/step_silent = FALSE //Used for disabling mech step sounds while using thrusters or pushing off lockers - var/stepsound = 'sound/blank.ogg' - var/turnsound = 'sound/blank.ogg' - - var/melee_cooldown = 10 - var/melee_can_hit = 1 - - var/silicon_pilot = FALSE //set to true if an AI or MMI is piloting. - - var/enter_delay = 40 //Time taken to enter the mech - var/exit_delay = 20 //Time to exit mech - var/destruction_sleep_duration = 20 //Time that mech pilot is put to sleep for if mech is destroyed - var/enclosed = TRUE //Set to false for open-cockpit mechs - var/silicon_icon_state = null //if the mech has a different icon when piloted by an AI or MMI - var/is_currently_ejecting = FALSE //Mech cannot use equiptment when true, set to true if pilot is trying to exit mech - - //Action datums - var/datum/action/innate/mecha/mech_eject/eject_action = new - var/datum/action/innate/mecha/mech_toggle_internals/internals_action = new - var/datum/action/innate/mecha/mech_cycle_equip/cycle_action = new - var/datum/action/innate/mecha/mech_toggle_lights/lights_action = new - var/datum/action/innate/mecha/mech_view_stats/stats_action = new - var/datum/action/innate/mecha/mech_defense_mode/defense_action = new - var/datum/action/innate/mecha/mech_overload_mode/overload_action = new - var/datum/effect_system/smoke_spread/smoke_system = new //not an action, but trigged by one - var/datum/action/innate/mecha/mech_smoke/smoke_action = new - var/datum/action/innate/mecha/mech_zoom/zoom_action = new - var/datum/action/innate/mecha/mech_switch_damtype/switch_damtype_action = new - var/datum/action/innate/mecha/mech_toggle_phasing/phasing_action = new - var/datum/action/innate/mecha/strafe/strafing_action = new - - //Action vars - var/obj/item/mecha_parts/mecha_equipment/thrusters/active_thrusters - var/defense_mode = FALSE - var/leg_overload_mode = FALSE - var/leg_overload_coeff = 100 - var/zoom_mode = FALSE - var/smoke = 5 - var/smoke_ready = 1 - var/smoke_cooldown = 100 - var/phasing = FALSE - var/phasing_energy_drain = 200 - var/phase_state = "" //icon_state when phasing - var/strafe = FALSE //If we are strafing - - var/nextsmash = 0 - var/smashcooldown = 3 //deciseconds - - var/occupant_sight_flags = 0 //sight flags to give to the occupant (e.g. mech mining scanner gives meson-like vision) - var/mouse_pointer - - hud_possible = list (DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_TRACK_HUD) - -/obj/item/radio/mech //this has to go somewhere - -/obj/mecha/Initialize() - . = ..() - icon_state += "-open" - add_radio() - add_cabin() - if (enclosed) - add_airtank() - spark_system.set_up(2, 0, src) - spark_system.attach(src) - smoke_system.set_up(3, src) - smoke_system.attach(src) - add_cell() - add_scanmod() - add_capacitor() - START_PROCESSING(SSobj, src) - GLOB.poi_list |= src - log_message("[src.name] created.", LOG_MECHA) - GLOB.mechas_list += src //global mech list - prepare_huds() - for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds) - diag_hud.add_to_hud(src) - diag_hud_set_mechhealth() - diag_hud_set_mechcell() - diag_hud_set_mechstat() - -/obj/mecha/update_icon() - if (silicon_pilot && silicon_icon_state) - icon_state = silicon_icon_state - . = ..() - -/obj/mecha/get_cell() - return cell - -/obj/mecha/Destroy() - if(occupant) - occupant.SetSleeping(destruction_sleep_duration) - go_out() - var/mob/living/silicon/ai/AI - for(var/mob/M in src) //Let's just be ultra sure - if(isAI(M)) - occupant = null - AI = M //AIs are loaded into the mech computer itself. When the mech dies, so does the AI. They can be recovered with an AI card from the wreck. - else - M.forceMove(loc) - for(var/obj/item/mecha_parts/mecha_equipment/E in equipment) - E.detach(loc) - qdel(E) - if(cell) - qdel(cell) - if(scanmod) - qdel(scanmod) - if(capacitor) - qdel(capacitor) - if(internal_tank) - qdel(internal_tank) - if(AI) - AI.gib() //No wreck, no AI to recover - STOP_PROCESSING(SSobj, src) - GLOB.poi_list.Remove(src) - equipment.Cut() - cell = null - scanmod = null - capacitor = null - internal_tank = null - if(loc) - loc.assume_air(cabin_air) - air_update_turf() - else - qdel(cabin_air) - cabin_air = null - qdel(spark_system) - spark_system = null - qdel(smoke_system) - smoke_system = null - - GLOB.mechas_list -= src //global mech list - return ..() - -/obj/mecha/proc/restore_equipment() - equipment_disabled = 0 - if(occupant) - SEND_SOUND(occupant, sound('sound/blank.ogg', volume=50)) - to_chat(occupant, "Equipment control unit has been rebooted successfully.
          ") - occupant.update_mouse_pointer() - -/obj/mecha/CheckParts(list/parts_list) - ..() - cell = locate(/obj/item/stock_parts/cell) in contents - scanmod = locate(/obj/item/stock_parts/scanning_module) in contents - capacitor = locate(/obj/item/stock_parts/capacitor) in contents - update_part_values() - -/obj/mecha/proc/update_part_values() ///Updates the values given by scanning module and capacitor tier, called when a part is removed or inserted. - if(scanmod) - normal_step_energy_drain = 20 - (5 * scanmod.rating) //10 is normal, so on lowest part its worse, on second its ok and on higher its real good up to 0 on best - step_energy_drain = normal_step_energy_drain - else - normal_step_energy_drain = 500 - step_energy_drain = normal_step_energy_drain - if(capacitor) - armor = armor.modifyRating(energy = (capacitor.rating * 5)) //Each level of capacitor protects the mech against emp by 5% - else //because we can still be hit without a cap, even if we can't move - armor = armor.setRating(energy = 0) - - -//////////////////////// -////// Helpers ///////// -//////////////////////// - -/obj/mecha/proc/add_airtank() - internal_tank = new /obj/machinery/portable_atmospherics/canister/air(src) - return internal_tank - -///Adds a cell, for use in Map-spawned mechs, Nuke Ops mechs, and admin-spawned mechs. Mechs built by hand will replace this. -/obj/mecha/proc/add_cell(obj/item/stock_parts/cell/C=null) - QDEL_NULL(cell) - if(C) - C.forceMove(src) - cell = C - return - cell = new /obj/item/stock_parts/cell/high/plus(src) - -///Adds a scanning module, for use in Map-spawned mechs, Nuke Ops mechs, and admin-spawned mechs. Mechs built by hand will replace this. -/obj/mecha/proc/add_scanmod(obj/item/stock_parts/scanning_module/sm=null) - QDEL_NULL(scanmod) - if(sm) - sm.forceMove(src) - scanmod = sm - return - scanmod = new /obj/item/stock_parts/scanning_module(src) - -///Adds a capacitor, for use in Map-spawned mechs, Nuke Ops mechs, and admin-spawned mechs. Mechs built by hand will replace this. -/obj/mecha/proc/add_capacitor(obj/item/stock_parts/capacitor/cap=null) - QDEL_NULL(capacitor) - if(cap) - cap.forceMove(src) - capacitor = cap - return - capacitor = new /obj/item/stock_parts/capacitor(src) - -/obj/mecha/proc/add_cabin() - cabin_air = new - cabin_air.temperature = T20C - cabin_air.volume = 200 - cabin_air.add_gases(/datum/gas/oxygen, /datum/gas/nitrogen) - cabin_air.gases[/datum/gas/oxygen][MOLES] = O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature) - cabin_air.gases[/datum/gas/nitrogen][MOLES] = N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature) - return cabin_air - -/obj/mecha/proc/add_radio() - radio = new(src) - radio.name = "[src] radio" - radio.icon = icon - radio.icon_state = icon_state - radio.subspace_transmission = TRUE - -/obj/mecha/proc/can_use(mob/user) - if(user != occupant) - return 0 - if(user && ismob(user)) - if(!user.incapacitated()) - return 1 - return 0 - -//////////////////////////////////////////////////////////////////////////////// - -/obj/mecha/examine(mob/user) - . = ..() - var/integrity = obj_integrity*100/max_integrity - switch(integrity) - if(85 to 100) - . += "It's fully intact." - if(65 to 85) - . += "It's slightly damaged." - if(45 to 65) - . += "It's badly damaged." - if(25 to 45) - . += "It's heavily damaged." - else - . += "It's falling apart." - var/hide_weapon = locate(/obj/item/mecha_parts/concealed_weapon_bay) in contents - var/hidden_weapon = hide_weapon ? (locate(/obj/item/mecha_parts/mecha_equipment/weapon) in equipment) : null - var/list/visible_equipment = equipment - hidden_weapon - if(visible_equipment.len) - . += "It's equipped with:" - for(var/obj/item/mecha_parts/mecha_equipment/ME in visible_equipment) - . += "[icon2html(ME, user)] \A [ME]." - if(!enclosed) - if(silicon_pilot) - . += "[src] appears to be piloting itself..." - else if(occupant && occupant != user) //!silicon_pilot implied - . += "You can see [occupant] inside." - if(ishuman(user)) - var/mob/living/carbon/human/H = user - for(var/O in H.held_items) - if(istype(O, /obj/item/gun)) - . += "It looks like you can hit the pilot directly if you target the center or above." - break //in case user is holding two guns - -//processing internal damage, temperature, air regulation, alert updates, lights power use. -/obj/mecha/process() - var/internal_temp_regulation = 1 - - if(internal_damage) - if(internal_damage & MECHA_INT_FIRE) - if(!(internal_damage & MECHA_INT_TEMP_CONTROL) && prob(5)) - clearInternalDamage(MECHA_INT_FIRE) - if(internal_tank) - var/datum/gas_mixture/int_tank_air = internal_tank.return_air() - if(int_tank_air.return_pressure() > internal_tank.maximum_pressure && !(internal_damage & MECHA_INT_TANK_BREACH)) - setInternalDamage(MECHA_INT_TANK_BREACH) - if(int_tank_air && int_tank_air.return_volume() > 0) //heat the air_contents - int_tank_air.temperature = min(6000+T0C, int_tank_air.temperature+rand(10,15)) - if(cabin_air && cabin_air.return_volume()>0) - cabin_air.temperature = min(6000+T0C, cabin_air.return_temperature()+rand(10,15)) - if(cabin_air.return_temperature() > max_temperature/2) - take_damage(4/round(max_temperature/cabin_air.return_temperature(),0.1), BURN, 0, 0) - - if(internal_damage & MECHA_INT_TEMP_CONTROL) - internal_temp_regulation = 0 - - if(internal_damage & MECHA_INT_TANK_BREACH) //remove some air from internal tank - if(internal_tank) - var/datum/gas_mixture/int_tank_air = internal_tank.return_air() - var/datum/gas_mixture/leaked_gas = int_tank_air.remove_ratio(0.1) - if(loc) - loc.assume_air(leaked_gas) - air_update_turf() - else - qdel(leaked_gas) - - if(internal_damage & MECHA_INT_SHORT_CIRCUIT) - if(get_charge()) - spark_system.start() - cell.charge -= min(20,cell.charge) - cell.maxcharge -= min(20,cell.maxcharge) - - if(internal_temp_regulation) - if(cabin_air && cabin_air.return_volume() > 0) - var/delta = cabin_air.temperature - T20C - cabin_air.temperature -= max(-10, min(10, round(delta/4,0.1))) - - if(internal_tank) - var/datum/gas_mixture/tank_air = internal_tank.return_air() - - var/release_pressure = internal_tank_valve - var/cabin_pressure = cabin_air.return_pressure() - var/pressure_delta = min(release_pressure - cabin_pressure, (tank_air.return_pressure() - cabin_pressure)/2) - var/transfer_moles = 0 - if(pressure_delta > 0) //cabin pressure lower than release pressure - if(tank_air.return_temperature() > 0) - transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION) - var/datum/gas_mixture/removed = tank_air.remove(transfer_moles) - cabin_air.merge(removed) - else if(pressure_delta < 0) //cabin pressure higher than release pressure - var/datum/gas_mixture/t_air = return_air() - pressure_delta = cabin_pressure - release_pressure - if(t_air) - pressure_delta = min(cabin_pressure - t_air.return_pressure(), pressure_delta) - if(pressure_delta > 0) //if location pressure is lower than cabin pressure - transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION) - var/datum/gas_mixture/removed = cabin_air.remove(transfer_moles) - if(t_air) - t_air.merge(removed) - else //just delete the cabin gas, we're in space or some shit - qdel(removed) - - if(occupant) - if(cell) - var/cellcharge = cell.charge/cell.maxcharge - switch(cellcharge) - if(0.75 to INFINITY) - occupant.clear_alert("charge") - if(0.5 to 0.75) - occupant.throw_alert("charge", /atom/movable/screen/alert/lowcell, 1) - if(0.25 to 0.5) - occupant.throw_alert("charge", /atom/movable/screen/alert/lowcell, 2) - if(0.01 to 0.25) - occupant.throw_alert("charge", /atom/movable/screen/alert/lowcell, 3) - else - occupant.throw_alert("charge", /atom/movable/screen/alert/emptycell) - - var/integrity = obj_integrity/max_integrity*100 - switch(integrity) - if(30 to 45) - occupant.throw_alert("mech damage", /atom/movable/screen/alert/low_mech_integrity, 1) - if(15 to 35) - occupant.throw_alert("mech damage", /atom/movable/screen/alert/low_mech_integrity, 2) - if(-INFINITY to 15) - occupant.throw_alert("mech damage", /atom/movable/screen/alert/low_mech_integrity, 3) - else - occupant.clear_alert("mech damage") - var/atom/checking = occupant.loc - // recursive check to handle all cases regarding very nested occupants, - // such as brainmob inside brainitem inside MMI inside mecha - while (!isnull(checking)) - if (isturf(checking)) - // hit a turf before hitting the mecha, seems like they have - // been moved out - occupant.clear_alert("charge") - occupant.clear_alert("mech damage") - RemoveActions(occupant, human_occupant=1) - occupant = null - break - else if (checking == src) - break // all good - checking = checking.loc - - if(lights) - var/lights_energy_drain = 2 - use_power(lights_energy_drain) - - if(!enclosed && occupant?.incapacitated()) //no sides mean it's easy to just sorta fall out if you're incapacitated. - visible_message("[occupant] tumbles out of the cockpit!") - go_out() //Maybe we should install seat belts? - -//Diagnostic HUD updates - diag_hud_set_mechhealth() - diag_hud_set_mechcell() - diag_hud_set_mechstat() - -/obj/mecha/fire_act() //Check if we should ignite the pilot of an open-canopy mech - . = ..() - if (occupant && !enclosed && !silicon_pilot) - if (occupant.fire_stacks < 5) - occupant.fire_stacks += 1 - occupant.IgniteMob() - -/obj/mecha/proc/drop_item()//Derpfix, but may be useful in future for engineering exosuits. - return - -/obj/mecha/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) - . = ..() - if(speaker == occupant) - if(radio?.broadcasting) - radio.talk_into(speaker, text, , spans, message_language) - //flick speech bubble - var/list/speech_bubble_recipients = list() - for(var/mob/M in get_hearers_in_view(7,src)) - if(M.client) - speech_bubble_recipients.Add(M.client) - INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(flick_overlay), image('icons/mob/talk.dmi', src, "machine[say_test(raw_message)]",MOB_LAYER+1), speech_bubble_recipients, 30) - -//////////////////////////// -///// Action processing //// -//////////////////////////// - - -/obj/mecha/proc/click_action(atom/target,mob/user,params) - if(!occupant || occupant != user ) - return - if(!locate(/turf) in list(target,target.loc)) // Prevents inventory from being drilled - return - if(completely_disabled) - return - if(is_currently_ejecting) - return - if(phasing) - occupant_message("Unable to interact with objects while phasing.") - return - if(user.incapacitated()) - return - if(construction_state) - occupant_message("Maintenance protocols in effect.") - return - if(!get_charge()) - return - if(src == target) - return - var/dir_to_target = get_dir(src,target) - if(dir_to_target && !(dir_to_target & dir))//wrong direction - return - if(internal_damage & MECHA_INT_CONTROL_LOST) - target = safepick(view(3,target)) - if(!target) - return - - var/mob/living/L = user - if(!Adjacent(target)) - if(selected && selected.is_ranged()) - if(HAS_TRAIT(L, TRAIT_PACIFISM) && selected.harmful) - to_chat(user, "I don't want to harm other living beings!") - return - if(selected.action(target,params)) - selected.start_cooldown() - else if(selected && selected.is_melee()) - if(isliving(target) && selected.harmful && HAS_TRAIT(L, TRAIT_PACIFISM)) - to_chat(user, "I don't want to harm other living beings!") - return - if(selected.action(target,params)) - selected.start_cooldown() - else - if(internal_damage & MECHA_INT_CONTROL_LOST) - target = safepick(oview(1,src)) - if(!melee_can_hit || !istype(target, /atom)) - return - target.mech_melee_attack(src) - melee_can_hit = FALSE - addtimer(VARSET_CALLBACK(src, melee_can_hit, TRUE), melee_cooldown) - - -/obj/mecha/proc/range_action(atom/target) - return - - -////////////////////////////////// -//////// Movement procs //////// -////////////////////////////////// - -///Plays the mech step sound effect. Split from movement procs so that other mechs (HONK) can override this one specific part. -/obj/mecha/proc/play_stepsound() - if(stepsound) - playsound(src,stepsound,40,1) - -/obj/mecha/Move(atom/newloc, direct) - . = ..() - if (internal_tank?.disconnect()) // Something moved us and broke connection - occupant_message("Air port connection has been severed!") - log_message("Lost connection to gas port.", LOG_MECHA) - -/obj/mecha/Process_Spacemove(movement_dir = 0) - . = ..() - if(.) - return TRUE - - var/atom/movable/backup = get_spacemove_backup() - if(backup) - if(istype(backup) && movement_dir && !backup.anchored) - if(backup.newtonian_move(turn(movement_dir, 180))) - step_silent = TRUE - if(occupant) - to_chat(occupant, "I push off [backup] to propel myself.") - return TRUE - - if(can_move <= world.time && active_thrusters && movement_dir && active_thrusters.thrust(movement_dir)) - step_silent = TRUE - return TRUE - - return FALSE - -/obj/mecha/relaymove(mob/user,direction) - if(completely_disabled) - return - if(!direction) - return - if(user != occupant) //While not "realistic", this piece is player friendly. - user.forceMove(get_turf(src)) - to_chat(user, "I climb out from [src].") - return 0 - if(internal_tank?.connected_port) - if(world.time - last_message > 20) - occupant_message("Unable to move while connected to the air system port!") - last_message = world.time - return 0 - if(construction_state) - if(world.time - last_message > 20) - occupant_message("Maintenance protocols in effect.") - last_message = world.time - return - return domove(direction) - -/obj/mecha/proc/domove(direction) - if(can_move >= world.time) - return 0 - if(!Process_Spacemove(direction)) - return 0 - if(!has_charge(step_energy_drain)) - return 0 - if(zoom_mode) - if(world.time - last_message > 20) - occupant_message("Unable to move while in zoom mode!") - last_message = world.time - return 0 - if(!cell) - if(world.time - last_message > 20) - occupant_message("Missing power cell.") - last_message = world.time - return 0 - if(!scanmod || !capacitor) - if(world.time - last_message > 20) - occupant_message("Missing [scanmod? "capacitor" : "scanning module"].") - last_message = world.time - return 0 - - var/move_result = 0 - var/oldloc = loc - if(internal_damage & MECHA_INT_CONTROL_LOST) - move_result = mechsteprand() - else if(dir != direction && (!strafe || occupant.client.keys_held["Alt"])) - move_result = mechturn(direction) - else - move_result = mechstep(direction) - if(move_result || loc != oldloc)// halfway done diagonal move still returns false - use_power(step_energy_drain) - can_move = world.time + step_in - return 1 - return 0 - -/obj/mecha/proc/mechturn(direction) - setDir(direction) - if(turnsound) - playsound(src,turnsound,40,TRUE) - return 1 - -/obj/mecha/proc/mechstep(direction) - var/current_dir = dir - var/result = step(src,direction) - if(strafe) - setDir(current_dir) - if(result && !step_silent) - play_stepsound() - step_silent = FALSE - return result - -/obj/mecha/proc/mechsteprand() - var/result = step_rand(src) - if(result && !step_silent) - play_stepsound() - step_silent = FALSE - return result - -/obj/mecha/Bump(atom/obstacle) - if(phasing && get_charge() >= phasing_energy_drain && !throwing) - if(!can_move) - return - can_move = 0 - if(phase_state) - flick(phase_state, src) - forceMove(get_step(src,dir)) - use_power(phasing_energy_drain) - addtimer(VARSET_CALLBACK(src, can_move, TRUE), step_in*3) - else - if(..()) //mech was thrown - return - if(bumpsmash && occupant) //Need a pilot to push the PUNCH button. - if(nextsmash < world.time) - obstacle.mech_melee_attack(src) - nextsmash = world.time + smashcooldown - if(!obstacle || obstacle.CanPass(src,get_step(src,dir))) - step(src,dir) - if(isobj(obstacle)) - var/obj/O = obstacle - if(!O.anchored) - step(obstacle, dir) - else if(ismob(obstacle)) - var/mob/M = obstacle - if(!M.anchored) - step(obstacle, dir) - - - - - -/////////////////////////////////// -//////// Internal damage //////// -/////////////////////////////////// - -/obj/mecha/proc/check_for_internal_damage(list/possible_int_damage,ignore_threshold=null) - if(!islist(possible_int_damage) || isemptylist(possible_int_damage)) - return - if(prob(20)) - if(ignore_threshold || obj_integrity*100/max_integrity < internal_damage_threshold) - for(var/T in possible_int_damage) - if(internal_damage & T) - possible_int_damage -= T - var/int_dam_flag = safepick(possible_int_damage) - if(int_dam_flag) - setInternalDamage(int_dam_flag) - if(prob(5)) - if(ignore_threshold || obj_integrity*100/max_integrity < internal_damage_threshold) - var/obj/item/mecha_parts/mecha_equipment/ME = safepick(equipment) - if(ME) - qdel(ME) - return - -/obj/mecha/proc/setInternalDamage(int_dam_flag) - internal_damage |= int_dam_flag - log_message("Internal damage of type [int_dam_flag].", LOG_MECHA) - SEND_SOUND(occupant, sound('sound/blank.ogg',wait=0)) - diag_hud_set_mechstat() - return - -/obj/mecha/proc/clearInternalDamage(int_dam_flag) - if(internal_damage & int_dam_flag) - switch(int_dam_flag) - if(MECHA_INT_TEMP_CONTROL) - occupant_message("Life support system reactivated.") - if(MECHA_INT_FIRE) - occupant_message("Internal fire extinquished.") - if(MECHA_INT_TANK_BREACH) - occupant_message("Damaged internal tank has been sealed.") - internal_damage &= ~int_dam_flag - diag_hud_set_mechstat() - -///////////////////////////////////// -//////////// AI piloting //////////// -///////////////////////////////////// - -/obj/mecha/attack_ai(mob/living/silicon/ai/user) - if(!isAI(user)) - return - //Allows the Malf to scan a mech's status and loadout, helping it to decide if it is a worthy chariot. - if(user.can_dominate_mechs) - examine(user) //Get diagnostic information! - for(var/obj/item/mecha_parts/mecha_tracking/B in trackers) - to_chat(user, "Warning: Tracking Beacon detected. Enter at your own risk. Beacon Data:") - to_chat(user, "[B.get_mecha_info()]") - break - //Nothing like a big, red link to make the player feel powerful! - to_chat(user, "ASSUME DIRECT CONTROL?
          ") - else - examine(user) - if(occupant) - to_chat(user, "This exosuit has a pilot and cannot be controlled.") - return - var/can_control_mech = 0 - for(var/obj/item/mecha_parts/mecha_tracking/ai_control/A in trackers) - can_control_mech = 1 - to_chat(user, "[icon2html(src, user)] Status of [name]:\n[A.get_mecha_info()]") - break - if(!can_control_mech) - to_chat(user, "I cannot control exosuits without AI control beacons installed.") - return - to_chat(user, "Take control of exosuit?
          ") - -/obj/mecha/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card) - if(!..()) - return - -//Transfer from core or card to mech. Proc is called by mech. - switch(interaction) - if(AI_TRANS_TO_CARD) //Upload AI from mech to AI card. - if(!construction_state) //Mech must be in maint mode to allow carding. - to_chat(user, "[name] must have maintenance protocols active in order to allow a transfer.") - return - AI = occupant - if(!AI || !isAI(occupant)) //Mech does not have an AI for a pilot - to_chat(user, "No AI detected in the [name] onboard computer.") - return - AI.ai_restore_power()//So the AI initially has power. - AI.control_disabled = TRUE - AI.radio_enabled = FALSE - AI.disconnect_shell() - RemoveActions(AI, TRUE) - occupant = null - silicon_pilot = FALSE - AI.forceMove(card) - card.AI = AI - AI.controlled_mech = null - AI.remote_control = null - icon_state = initial(icon_state)+"-open" - to_chat(AI, "I have been downloaded to a mobile storage device. Wireless connection offline.") - to_chat(user, "Transfer successful: [AI.name] ([rand(1000,9999)].exe) removed from [name] and stored within local memory.") - - if(AI_MECH_HACK) //Called by AIs on the mech - AI.linked_core = new /obj/structure/AIcore/deactivated(AI.loc) - if(AI.can_dominate_mechs) - if(occupant) //Oh, I am sorry, were you using that? - to_chat(AI, "Pilot detected! Forced ejection initiated!") - to_chat(occupant, "I have been forcibly ejected!") - go_out(1) //IT IS MINE, NOW. SUCK IT, RD! - ai_enter_mech(AI, interaction) - - if(AI_TRANS_FROM_CARD) //Using an AI card to upload to a mech. - AI = card.AI - if(!AI) - to_chat(user, "There is no AI currently installed on this device.") - return - if(AI.deployed_shell) //Recall AI if shelled so it can be checked for a client - AI.disconnect_shell() - if(AI.stat || !AI.client) - to_chat(user, "[AI.name] is currently unresponsive, and cannot be uploaded.") - return - if(occupant || dna_lock) //Normal AIs cannot steal mechs! - to_chat(user, "Access denied. [name] is [occupant ? "currently occupied" : "secured with a DNA lock"].") - return - AI.control_disabled = FALSE - AI.radio_enabled = TRUE - to_chat(user, "Transfer successful: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed.") - card.AI = null - ai_enter_mech(AI, interaction) - -//Hack and From Card interactions share some code, so leave that here for both to use. -/obj/mecha/proc/ai_enter_mech(mob/living/silicon/ai/AI, interaction) - AI.ai_restore_power() - AI.forceMove(src) - occupant = AI - silicon_pilot = TRUE - icon_state = initial(icon_state) - update_icon() - playsound(src, 'sound/blank.ogg', 50, TRUE) - if(!internal_damage) - SEND_SOUND(occupant, sound('sound/blank.ogg',volume=50)) - AI.cancel_camera() - AI.controlled_mech = src - AI.remote_control = src - AI.mobility_flags = ALL //Much easier than adding AI checks! Be sure to set this back to 0 if you decide to allow an AI to leave a mech somehow. - AI.can_shunt = 0 //ONE AI ENTERS. NO AI LEAVES. - to_chat(AI, AI.can_dominate_mechs ? "Takeover of [name] complete! You are now loaded onto the onboard computer. Do not attempt to leave the station sector!" :\ - "I have been uploaded to a mech's onboard computer.") - to_chat(AI, "Use Middle-Mouse to activate mech functions and equipment. Click normally for AI interactions.") - if(interaction == AI_TRANS_FROM_CARD) - GrantActions(AI, FALSE) //No eject/return to core action for AI uploaded by card - else - GrantActions(AI, !AI.can_dominate_mechs) - - -//An actual AI (simple_animal mecha pilot) entering the mech -/obj/mecha/proc/aimob_enter_mech(mob/living/simple_animal/hostile/syndicate/mecha_pilot/pilot_mob) - if(pilot_mob && pilot_mob.Adjacent(src)) - if(occupant) - return - icon_state = initial(icon_state) - occupant = pilot_mob - pilot_mob.mecha = src - pilot_mob.forceMove(src) - GrantActions(pilot_mob)//needed for checks, and incase a badmin puts somebody in the mob - -/obj/mecha/proc/aimob_exit_mech(mob/living/simple_animal/hostile/syndicate/mecha_pilot/pilot_mob) - if(occupant == pilot_mob) - occupant = null - if(pilot_mob.mecha == src) - pilot_mob.mecha = null - icon_state = "[initial(icon_state)]-open" - pilot_mob.forceMove(get_turf(src)) - RemoveActions(pilot_mob) - - -///////////////////////////////////// -//////// Atmospheric stuff //////// -///////////////////////////////////// - -/obj/mecha/remove_air(amount) - if(use_internal_tank) - return cabin_air.remove(amount) - return ..() - -/obj/mecha/return_air() - if(use_internal_tank) - return cabin_air - return ..() - -/obj/mecha/return_analyzable_air() - return cabin_air - -/obj/mecha/proc/return_pressure() - var/datum/gas_mixture/t_air = return_air() - if(t_air) - . = t_air.return_pressure() - return - -/obj/mecha/return_temperature() - var/datum/gas_mixture/t_air = return_air() - if(t_air) - . = t_air.return_temperature() - return - -/obj/mecha/MouseDrop_T(mob/M, mob/user) - if((user != M) || user.incapacitated() || !Adjacent(user)) - return - if(!ishuman(user)) // no silicons or drones in mechas. - return - log_message("[user] tries to move in.", LOG_MECHA) - if (occupant) - to_chat(usr, "The [name] is already occupied!") - log_message("Permission denied (Occupied).", LOG_MECHA) - return - if(dna_lock) - var/passed = FALSE - if(user.has_dna()) - var/mob/living/carbon/C = user - if(C.dna.unique_enzymes==dna_lock) - passed = TRUE - if (!passed) - to_chat(user, "Access denied. [name] is secured with a DNA lock.") - log_message("Permission denied (DNA LOCK).", LOG_MECHA) - return - if(!operation_allowed(user)) - to_chat(user, "Access denied. Insufficient operation keycodes.") - log_message("Permission denied (No keycode).", LOG_MECHA) - return - if(user.buckled) - to_chat(user, "I are currently buckled and cannot move.") - log_message("Permission denied (Buckled).", LOG_MECHA) - return - if(user.has_buckled_mobs()) //mob attached to us - to_chat(user, "I can't enter the exosuit with other creatures attached to you!") - log_message("Permission denied (Attached mobs).", LOG_MECHA) - return - - visible_message("[user] starts to climb into [name].") - - if(do_after(user, enter_delay, target = src)) - if(obj_integrity <= 0) - to_chat(user, "I cannot get in the [name], it has been destroyed!") - else if(occupant) - to_chat(user, "[occupant] was faster! Try better next time, loser.") - else if(user.buckled) - to_chat(user, "I can't enter the exosuit while buckled.") - else if(user.has_buckled_mobs()) - to_chat(user, "I can't enter the exosuit with other creatures attached to you!") - else - moved_inside(user) - else - to_chat(user, "I stop entering the exosuit!") - return - -/obj/mecha/proc/moved_inside(mob/living/carbon/human/H) - if(H && H.client && Adjacent(H)) - occupant = H - H.forceMove(src) - H.update_mouse_pointer() - add_fingerprint(H) - GrantActions(H, human_occupant=1) - forceMove(loc) - log_message("[H] moved in as pilot.", LOG_MECHA) - icon_state = initial(icon_state) - setDir(dir_in) - playsound(src, 'sound/blank.ogg', 50, TRUE) - if(!internal_damage) - SEND_SOUND(occupant, sound('sound/blank.ogg',volume=50)) - return 1 - else - return 0 - -/obj/mecha/proc/mmi_move_inside(obj/item/mmi/mmi_as_oc, mob/user) - if(!mmi_as_oc.brainmob || !mmi_as_oc.brainmob.client) - to_chat(user, "Consciousness matrix not detected!") - return FALSE - else if(mmi_as_oc.brainmob.stat) - to_chat(user, "Beta-rhythm below acceptable level!") - return FALSE - else if(occupant) - to_chat(user, "Occupant detected!") - return FALSE - else if(dna_lock && (!mmi_as_oc.brainmob.stored_dna || (dna_lock != mmi_as_oc.brainmob.stored_dna.unique_enzymes))) - to_chat(user, "Access denied. [name] is secured with a DNA lock.") - return FALSE - - visible_message("[user] starts to insert an MMI into [name].") - - if(do_after(user, 40, target = src)) - if(!occupant) - return mmi_moved_inside(mmi_as_oc, user) - else - to_chat(user, "Occupant detected!") - else - to_chat(user, "I stop inserting the MMI.") - return FALSE - -/obj/mecha/proc/mmi_moved_inside(obj/item/mmi/mmi_as_oc, mob/user) - if(!(Adjacent(mmi_as_oc) && Adjacent(user))) - return FALSE - if(!mmi_as_oc.brainmob || !mmi_as_oc.brainmob.client) - to_chat(user, "Consciousness matrix not detected!") - return FALSE - else if(mmi_as_oc.brainmob.stat) - to_chat(user, "Beta-rhythm below acceptable level!") - return FALSE - if(!user.transferItemToLoc(mmi_as_oc, src)) - to_chat(user, "\the [mmi_as_oc] is stuck to your hand, you cannot put it in \the [src]!") - return FALSE - var/mob/living/brainmob = mmi_as_oc.brainmob - mmi_as_oc.mecha = src - occupant = brainmob - silicon_pilot = TRUE - brainmob.forceMove(src) //should allow relaymove - brainmob.reset_perspective(src) - brainmob.remote_control = src - brainmob.update_mobility() - brainmob.update_mouse_pointer() - icon_state = initial(icon_state) - update_icon() - setDir(dir_in) - log_message("[mmi_as_oc] moved in as pilot.", LOG_MECHA) - if(!internal_damage) - SEND_SOUND(occupant, sound('sound/blank.ogg',volume=50)) - GrantActions(brainmob) - log_game("[key_name(user)] has put the MMI/posibrain of [key_name(brainmob)] into [src] at [AREACOORD(src)]") - return TRUE - -/obj/mecha/container_resist(mob/living/user) - is_currently_ejecting = TRUE - to_chat(occupant, "I begin the ejection procedure. Equipment is disabled during this process. Hold still to finish ejecting.") - if(do_after(occupant, has_gravity() ? exit_delay : 0 , target = src)) - to_chat(occupant, "I exit the mech.") - go_out() - else - to_chat(occupant, "I stop exiting the mech. Weapons are enabled again.") - is_currently_ejecting = FALSE - -/obj/mecha/Exited(atom/movable/M, atom/newloc) - if(occupant && occupant == M) // The occupant exited the mech without calling go_out() - go_out(TRUE, newloc) - - if(cell && cell == M) - cell = null - return - if(scanmod && scanmod == M) - scanmod = null - update_part_values() - return - if(capacitor && capacitor == M) - armor = armor.modifyRating(energy = (capacitor.rating * -5)) //lose the energy armor if we lose this cap - capacitor = null - update_part_values() - return - -/obj/mecha/proc/go_out(forced, atom/newloc = loc) - if(!occupant) - return - var/atom/movable/mob_container - occupant.clear_alert("charge") - occupant.clear_alert("mech damage") - if(ishuman(occupant)) - mob_container = occupant - RemoveActions(occupant, human_occupant=1) - else if(isbrain(occupant)) - var/mob/living/brain/brain = occupant - RemoveActions(brain) - mob_container = brain.container - else if(isAI(occupant)) - var/mob/living/silicon/ai/AI = occupant - if(forced)//This should only happen if there are multiple AIs in a round, and at least one is Malf. - RemoveActions(occupant) - occupant.gib() //If one Malf decides to steal a mech from another AI (even other Malfs!), they are destroyed, as they have nowhere to go when replaced. - occupant = null - silicon_pilot = FALSE - return - else - if(!AI.linked_core) - to_chat(AI, "Inactive core destroyed. Unable to return.") - AI.linked_core = null - return - to_chat(AI, "Returning to core...") - AI.controlled_mech = null - AI.remote_control = null - RemoveActions(occupant, 1) - mob_container = AI - newloc = get_turf(AI.linked_core) - qdel(AI.linked_core) - else - return - var/mob/living/L = occupant - occupant = null //we need it null when forceMove calls Exited(). - silicon_pilot = FALSE - if(mob_container.forceMove(newloc))//ejecting mob container - log_message("[mob_container] moved out.", LOG_MECHA) - L << browse(null, "window=exosuit") - - if(istype(mob_container, /obj/item/mmi)) - var/obj/item/mmi/mmi = mob_container - if(mmi.brainmob) - L.forceMove(mmi) - L.reset_perspective() - mmi.mecha = null - mmi.update_icon() - L.mobility_flags = NONE - icon_state = initial(icon_state)+"-open" - setDir(dir_in) - - if(L && L.client) - L.update_mouse_pointer() - L.client.change_view(CONFIG_GET(string/default_view)) - zoom_mode = 0 - -///////////////////////// -////// Access stuff ///// -///////////////////////// - -/obj/mecha/proc/operation_allowed(mob/M) - req_access = operation_req_access - req_one_access = list() - return allowed(M) - -/obj/mecha/proc/internals_access_allowed(mob/M) - req_one_access = internals_req_access - req_access = list() - return allowed(M) - - - -//////////////////////////////// -/////// Messages and Log /////// -//////////////////////////////// - -/obj/mecha/proc/occupant_message(message as text) - if(message) - if(occupant && occupant.client) - to_chat(occupant, "[icon2html(src, occupant)] [message]") - return - -GLOBAL_VAR_INIT(year, time2text(world.realtime,"YYYY")) -GLOBAL_VAR_INIT(year_integer, text2num(year)) // = 2013??? - -/////////////////////// -///// Power stuff ///// -/////////////////////// - -/obj/mecha/proc/has_charge(amount) - return (get_charge()>=amount) - -/obj/mecha/proc/get_charge() - for(var/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/R in equipment) - var/relay_charge = R.get_charge() - if(relay_charge) - return relay_charge - if(cell) - return max(0, cell.charge) - -/obj/mecha/proc/use_power(amount) - if(get_charge() && cell.use(amount)) - return 1 - return 0 - -/obj/mecha/proc/give_power(amount) - if(!isnull(get_charge())) - cell.give(amount) - return 1 - return 0 - -/obj/mecha/update_remote_sight(mob/living/user) - if(occupant_sight_flags) - if(user == occupant) - user.sight |= occupant_sight_flags - -/////////////////////// -////// Ammo stuff ///// -/////////////////////// - -/obj/mecha/proc/ammo_resupply(obj/item/mecha_ammo/A, mob/user,fail_chat_override = FALSE) - if(!A.rounds) - if(!fail_chat_override) - to_chat(user, "This box of ammo is empty!") - return FALSE - var/ammo_needed - var/found_gun - for(var/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/gun in equipment) - ammo_needed = 0 - - if(istype(gun, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic) && gun.ammo_type == A.ammo_type) - found_gun = TRUE - if(A.direct_load) - ammo_needed = initial(gun.projectiles) - gun.projectiles - else - ammo_needed = gun.projectiles_cache_max - gun.projectiles_cache - - if(ammo_needed) - if(ammo_needed < A.rounds) - if(A.direct_load) - gun.projectiles = gun.projectiles + ammo_needed - else - gun.projectiles_cache = gun.projectiles_cache + ammo_needed - playsound(get_turf(user),A.load_audio,50,TRUE) - to_chat(user, "I add [ammo_needed] [A.round_term][ammo_needed > 1?"s":""] to the [gun.name]") - A.rounds = A.rounds - ammo_needed - A.update_name() - return TRUE - - else - if(A.direct_load) - gun.projectiles = gun.projectiles + A.rounds - else - gun.projectiles_cache = gun.projectiles_cache + A.rounds - playsound(get_turf(user),A.load_audio,50,TRUE) - to_chat(user, "I add [A.rounds] [A.round_term][A.rounds > 1?"s":""] to the [gun.name]") - A.rounds = 0 - A.update_name() - return TRUE - if(!fail_chat_override) - if(found_gun) - to_chat(user, "I can't fit any more ammo of this type!") - else - to_chat(user, "None of the equipment on this exosuit can use this ammo!") - return FALSE diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm deleted file mode 100644 index d2f2d7d0a7..0000000000 --- a/code/game/mecha/mecha_actions.dm +++ /dev/null @@ -1,253 +0,0 @@ -//////////////////////////////////////// Action Buttons /////////////////////////////////////////////// - -/obj/mecha/proc/GrantActions(mob/living/user, human_occupant = 0) - if(human_occupant) - eject_action.Grant(user, src) - if(enclosed) - internals_action.Grant(user, src) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - strafing_action.Grant(user, src) - - -/obj/mecha/proc/RemoveActions(mob/living/user, human_occupant = 0) - if(human_occupant) - eject_action.Remove(user) - internals_action.Remove(user) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - strafing_action.Remove(user) - - -/datum/action/innate/mecha - check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUN | AB_CHECK_CONSCIOUS - icon_icon = 'icons/mob/actions/actions_mecha.dmi' - var/obj/mecha/chassis - -/datum/action/innate/mecha/Grant(mob/living/L, obj/mecha/M) - if(M) - chassis = M - ..() - -/datum/action/innate/mecha/Destroy() - chassis = null - return ..() - -/datum/action/innate/mecha/mech_eject - name = "Eject From Mech" - button_icon_state = "mech_eject" - -/datum/action/innate/mecha/mech_eject/Activate() - if(!owner) - return - if(!chassis || chassis.occupant != owner) - return - chassis.container_resist(chassis.occupant) - -/datum/action/innate/mecha/mech_toggle_internals - name = "Toggle Internal Airtank Usage" - button_icon_state = "mech_internals_off" - -/datum/action/innate/mecha/mech_toggle_internals/Activate() - if(!owner || !chassis || chassis.occupant != owner) - return - chassis.use_internal_tank = !chassis.use_internal_tank - button_icon_state = "mech_internals_[chassis.use_internal_tank ? "on" : "off"]" - chassis.occupant_message("Now taking air from [chassis.use_internal_tank?"internal airtank":"environment"].") - chassis.log_message("Now taking air from [chassis.use_internal_tank?"internal airtank":"environment"].", LOG_MECHA) - UpdateButtonIcon() - -/datum/action/innate/mecha/mech_cycle_equip - name = "Cycle Equipment" - button_icon_state = "mech_cycle_equip_off" - -/datum/action/innate/mecha/mech_cycle_equip/Activate() - if(!owner || !chassis || chassis.occupant != owner) - return - - var/list/available_equipment = list() - for(var/obj/item/mecha_parts/mecha_equipment/M in chassis.equipment) - if(M.selectable) - available_equipment += M - - if(available_equipment.len == 0) - chassis.occupant_message("No equipment available!") - return - if(!chassis.selected) - chassis.selected = available_equipment[1] - chassis.occupant_message("I select [chassis.selected].") - send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list()) - button_icon_state = "mech_cycle_equip_on" - UpdateButtonIcon() - return - var/number = 0 - for(var/A in available_equipment) - number++ - if(A == chassis.selected) - if(available_equipment.len == number) - chassis.selected = null - chassis.occupant_message("I switch to no equipment.") - button_icon_state = "mech_cycle_equip_off" - else - chassis.selected = available_equipment[number+1] - chassis.occupant_message("I switch to [chassis.selected].") - button_icon_state = "mech_cycle_equip_on" - send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list()) - UpdateButtonIcon() - return - - -/datum/action/innate/mecha/mech_toggle_lights - name = "Toggle Lights" - button_icon_state = "mech_lights_off" - -/datum/action/innate/mecha/mech_toggle_lights/Activate() - if(!owner || !chassis || chassis.occupant != owner) - return - chassis.lights = !chassis.lights - if(chassis.lights) - chassis.set_light(chassis.lights_power) - button_icon_state = "mech_lights_on" - else - chassis.set_light(-chassis.lights_power) - button_icon_state = "mech_lights_off" - chassis.occupant_message("Toggled lights [chassis.lights?"on":"off"].") - chassis.log_message("Toggled lights [chassis.lights?"on":"off"].", LOG_MECHA) - UpdateButtonIcon() - -/datum/action/innate/mecha/mech_view_stats - name = "View Stats" - button_icon_state = "mech_view_stats" - -/datum/action/innate/mecha/mech_view_stats/Activate() - if(!owner || !chassis || chassis.occupant != owner) - return - chassis.occupant << browse(chassis.get_stats_html(), "window=exosuit") - - -/datum/action/innate/mecha/strafe - name = "Toggle Strafing. Disabled when Alt is held." - button_icon_state = "strafe" - -/datum/action/innate/mecha/strafe/Activate() - if(!owner || !chassis || chassis.occupant != owner) - return - - chassis.toggle_strafe() - -/obj/mecha/AltClick(mob/living/user) - if((user == occupant) && user.canUseTopic(src)) - toggle_strafe() - -/obj/mecha/proc/toggle_strafe() - strafe = !strafe - - occupant_message("Toggled strafing mode [strafe?"on":"off"].") - log_message("Toggled strafing mode [strafe?"on":"off"].", LOG_MECHA) - strafing_action.UpdateButtonIcon() - -//////////////////////////////////////// Specific Ability Actions /////////////////////////////////////////////// -//Need to be granted by the mech type, Not default abilities. - -/datum/action/innate/mecha/mech_defense_mode - name = "Toggle an energy shield that blocks all attacks from the faced direction at a heavy power cost." - button_icon_state = "mech_defense_mode_off" - var/image/def_overlay - -/datum/action/innate/mecha/mech_defense_mode/Activate(forced_state = FALSE) - SEND_SIGNAL(chassis, COMSIG_MECHA_ACTION_ACTIVATE, args) ///Signal sent to the mech, to be handed to the shield. See durand.dm for more details - -/datum/action/innate/mecha/mech_overload_mode - name = "Toggle leg actuators overload" - button_icon_state = "mech_overload_off" - -/datum/action/innate/mecha/mech_overload_mode/Activate(forced_state = null) - if(!owner || !chassis || chassis.occupant != owner) - return - if(!isnull(forced_state)) - chassis.leg_overload_mode = forced_state - else - chassis.leg_overload_mode = !chassis.leg_overload_mode - button_icon_state = "mech_overload_[chassis.leg_overload_mode ? "on" : "off"]" - chassis.log_message("Toggled leg actuators overload.", LOG_MECHA) - if(chassis.leg_overload_mode) - chassis.leg_overload_mode = 1 - chassis.step_in = min(1, round(chassis.step_in/2)) - chassis.step_energy_drain = max(chassis.overload_step_energy_drain_min,chassis.step_energy_drain*chassis.leg_overload_coeff) - chassis.occupant_message("I enable leg actuators overload.") - else - chassis.leg_overload_mode = 0 - chassis.step_in = initial(chassis.step_in) - chassis.step_energy_drain = chassis.normal_step_energy_drain - chassis.occupant_message("I disable leg actuators overload.") - UpdateButtonIcon() - -/datum/action/innate/mecha/mech_smoke - name = "Smoke" - button_icon_state = "mech_smoke" - -/datum/action/innate/mecha/mech_smoke/Activate() - if(!owner || !chassis || chassis.occupant != owner) - return - if(chassis.smoke_ready && chassis.smoke>0) - chassis.smoke_system.start() - chassis.smoke-- - chassis.smoke_ready = FALSE - addtimer(VARSET_CALLBACK(chassis, smoke_ready, TRUE), chassis.smoke_cooldown) - - -/datum/action/innate/mecha/mech_zoom - name = "Zoom" - button_icon_state = "mech_zoom_off" - -/datum/action/innate/mecha/mech_zoom/Activate() - if(!owner || !chassis || chassis.occupant != owner) - return - if(owner.client) - chassis.zoom_mode = !chassis.zoom_mode - button_icon_state = "mech_zoom_[chassis.zoom_mode ? "on" : "off"]" - chassis.log_message("Toggled zoom mode.", LOG_MECHA) - chassis.occupant_message("Zoom mode [chassis.zoom_mode?"en":"dis"]abled.") - if(chassis.zoom_mode) - owner.client.change_view(12) - SEND_SOUND(owner, sound('sound/blank.ogg',volume=50)) - else - owner.client.change_view(CONFIG_GET(string/default_view)) //world.view - default mob view size - UpdateButtonIcon() - -/datum/action/innate/mecha/mech_switch_damtype - name = "Reconfigure arm microtool arrays" - button_icon_state = "mech_damtype_brute" - -/datum/action/innate/mecha/mech_switch_damtype/Activate() - if(!owner || !chassis || chassis.occupant != owner) - return - var/new_damtype - switch(chassis.damtype) - if("tox") - new_damtype = "brute" - chassis.occupant_message("My exosuit's hands form into fists.") - if("brute") - new_damtype = "fire" - chassis.occupant_message("A torch tip extends from my exosuit's hand, glowing red.") - if("fire") - new_damtype = "tox" - chassis.occupant_message("A bone-chillingly thick plasteel needle protracts from the exosuit's palm.") - chassis.damtype = new_damtype - button_icon_state = "mech_damtype_[new_damtype]" - playsound(src, 'sound/blank.ogg', 50, TRUE) - UpdateButtonIcon() - -/datum/action/innate/mecha/mech_toggle_phasing - name = "Toggle Phasing" - button_icon_state = "mech_phasing_off" - -/datum/action/innate/mecha/mech_toggle_phasing/Activate() - if(!owner || !chassis || chassis.occupant != owner) - return - chassis.phasing = !chassis.phasing - button_icon_state = "mech_phasing_[chassis.phasing ? "on" : "off"]" - chassis.occupant_message("En":"#f00\">Dis"]abled phasing.") - UpdateButtonIcon() diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm deleted file mode 100644 index 8c68c332d8..0000000000 --- a/code/game/mecha/mecha_construction_paths.dm +++ /dev/null @@ -1,1942 +0,0 @@ -//////////////////////////////// -///// Construction datums ////// -//////////////////////////////// -/datum/component/construction/mecha - var/base_icon - -/datum/component/construction/mecha/spawn_result() - if(!result) - return - // Remove default mech power cell, as we replace it with a new one. - var/obj/mecha/M = new result(drop_location()) - QDEL_NULL(M.cell) - QDEL_NULL(M.scanmod) - QDEL_NULL(M.capacitor) - - var/obj/item/mecha_parts/chassis/parent_chassis = parent - M.CheckParts(parent_chassis.contents) - - SSblackbox.record_feedback("tally", "mechas_created", 1, M.name) - QDEL_NULL(parent) - -/datum/component/construction/mecha/update_parent(step_index) - ..() - // By default, each step in mech construction has a single icon_state: - // "[base_icon][index - 1]" - // For example, Ripley's step 1 icon_state is "ripley0". - var/atom/parent_atom = parent - if(!steps[index]["icon_state"] && base_icon) - parent_atom.icon_state = "[base_icon][index - 1]" - -/datum/component/construction/unordered/mecha_chassis/custom_action(obj/item/I, mob/living/user, typepath) - . = user.transferItemToLoc(I, parent) - if(.) - var/atom/parent_atom = parent - user.visible_message("[user] has connected [I] to [parent].", "I connect [I] to [parent].") - parent_atom.add_overlay(I.icon_state+"+o") - qdel(I) - -/datum/component/construction/unordered/mecha_chassis/spawn_result() - var/atom/parent_atom = parent - parent_atom.icon = 'icons/mecha/mech_construction.dmi' - parent_atom.density = TRUE - parent_atom.cut_overlays() - ..() - - -/datum/component/construction/unordered/mecha_chassis/ripley - result = /datum/component/construction/mecha/ripley - steps = list( - /obj/item/mecha_parts/part/ripley_torso, - /obj/item/mecha_parts/part/ripley_left_arm, - /obj/item/mecha_parts/part/ripley_right_arm, - /obj/item/mecha_parts/part/ripley_left_leg, - /obj/item/mecha_parts/part/ripley_right_leg - ) - -/datum/component/construction/mecha/ripley - result = /obj/mecha/working/ripley - base_icon = "ripley" - steps = list( - //1 - list( - "key" = TOOL_WRENCH, - "desc" = "The hydraulic systems are disconnected." - ), - - //2 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_WRENCH, - "desc" = "The hydraulic systems are connected." - ), - - //3 - list( - "key" = /obj/item/stack/cable_coil, - "amount" = 5, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The hydraulic systems are active." - ), - - //4 - list( - "key" = TOOL_WIRECUTTER, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The wiring is added." - ), - - //5 - list( - "key" = /obj/item/circuitboard/mecha/ripley/main, - "action" = ITEM_DELETE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The wiring is adjusted." - ), - - //6 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Central control module is installed." - ), - - //7 - list( - "key" = /obj/item/circuitboard/mecha/ripley/peripherals, - "action" = ITEM_DELETE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Central control module is secured." - ), - - //8 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Peripherals control module is installed." - ), - - //9 - list( - "key" = /obj/item/stock_parts/scanning_module, - "action" = ITEM_MOVE_INSIDE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Peripherals control module is secured." - ), - - //10 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Scanner module is installed." - ), - - //11 - list( - "key" = /obj/item/stock_parts/capacitor, - "action" = ITEM_MOVE_INSIDE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Scanner module is secured." - ), - - //12 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Capacitor is installed." - ), - - //13 - list( - "key" = /obj/item/stock_parts/cell, - "action" = ITEM_MOVE_INSIDE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Capacitor is secured." - ), - - //14 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "The power cell is installed." - ), - - //15 - list( - "key" = /obj/item/stack/sheet/metal, - "amount" = 5, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The power cell is secured." - ), - - //16 - list( - "key" = TOOL_WRENCH, - "back_key" = TOOL_CROWBAR, - "desc" = "Outer plating is installed." - ), - - //17 - list( - "key" = TOOL_WELDER, - "back_key" = TOOL_WRENCH, - "desc" = "Outer Plating is wrenched." - ), - - //18 - list( - "key" = /obj/item/stack/rods, - "amount" = 10, - "back_key" = TOOL_WELDER, - "desc" = "Outer Plating is welded." - ), - - //19 - list( - "key" = TOOL_WELDER, - "back_key" = TOOL_WIRECUTTER, - "desc" = "Cockpit wire screen is installed." - ), - ) - -/datum/component/construction/mecha/ripley/custom_action(obj/item/I, mob/living/user, diff) - if(!..()) - return FALSE - - switch(index) - if(1) - user.visible_message("[user] connects [parent] hydraulic systems.", "I connect [parent] hydraulic systems.") - if(2) - if(diff==FORWARD) - user.visible_message("[user] activates [parent] hydraulic systems.", "I activate [parent] hydraulic systems.") - else - user.visible_message("[user] disconnects [parent] hydraulic systems.", "I disconnect [parent] hydraulic systems.") - if(3) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [parent].", "I add the wiring to [parent].") - else - user.visible_message("[user] deactivates [parent] hydraulic systems.", "I deactivate [parent] hydraulic systems.") - if(4) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [parent].", "I adjust the wiring of [parent].") - else - user.visible_message("[user] removes the wiring from [parent].", "I remove the wiring from [parent].") - if(5) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] disconnects the wiring of [parent].", "I disconnect the wiring of [parent].") - if(6) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "I secure the mainboard.") - else - user.visible_message("[user] removes the central control module from [parent].", "I remove the central computer mainboard from [parent].") - if(7) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] unfastens the mainboard.", "I unfasten the mainboard.") - if(8) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "I secure the peripherals control module.") - else - user.visible_message("[user] removes the peripherals control module from [parent].", "I remove the peripherals control module from [parent].") - if(9) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] unfastens the peripherals control module.", "I unfasten the peripherals control module.") - if(10) - if(diff==FORWARD) - user.visible_message("[user] secures the scanner module.", "I secure the scanner module.") - else - user.visible_message("[user] removes the scanner module from [parent].", "I remove the scanner module from [parent].") - if(11) - if(diff==FORWARD) - user.visible_message("[user] installs [I] to [parent].", "I install [I] to [parent].") - else - user.visible_message("[user] unfastens the scanner module.", "I unfasten the scanner module.") - if(12) - if(diff==FORWARD) - user.visible_message("[user] secures [I].", "I secure [I].") - else - user.visible_message("[user] removes the capacitor from [parent].", "I remove the capacitor from [parent].") - if(13) - if(diff==FORWARD) - user.visible_message("[user] installs [I].", "I install [I].") - else - user.visible_message("[user] unsecures the capacitor from [parent].", "I unsecure the capacitor from [parent].") - if(14) - if(diff==FORWARD) - user.visible_message("[user] secures the power cell.", "I secure the power cell.") - else - user.visible_message("[user] pries the power cell from [parent].", "I pry the power cell from [parent].") - if(15) - if(diff==FORWARD) - user.visible_message("[user] installs the internal armor layer to [parent].", "I install the internal armor layer to [parent].") - else - user.visible_message("[user] unfastens the power cell.", "I unfasten the power cell.") - if(16) - if(diff==FORWARD) - user.visible_message("[user] secures the internal armor layer.", "I secure the internal armor layer.") - else - user.visible_message("[user] pries internal armor layer from [parent].", "I pry internal armor layer from [parent].") - if(17) - if(diff==FORWARD) - user.visible_message("[user] welds the internal armor layer to [parent].", "I weld the internal armor layer to [parent].") - else - user.visible_message("[user] unfastens the internal armor layer.", "I unfasten the internal armor layer.") - if(18) - if(diff==FORWARD) - user.visible_message("[user] installs the external reinforced armor layer to [parent].", "I install the external reinforced armor layer to [parent].") - else - user.visible_message("[user] cuts the internal armor layer from [parent].", "I cut the internal armor layer from [parent].") - if(19) - if(diff==FORWARD) - user.visible_message("[user] secures the external armor layer.", "I secure the external reinforced armor layer.") - else - user.visible_message("[user] pries external armor layer from [parent].", "I pry external armor layer from [parent].") - if(20) - if(diff==FORWARD) - user.visible_message("[user] welds the external armor layer to [parent].", "I weld the external armor layer to [parent].") - else - user.visible_message("[user] unfastens the external armor layer.", "I unfasten the external armor layer.") - return TRUE - -/datum/component/construction/unordered/mecha_chassis/gygax - result = /datum/component/construction/mecha/gygax - steps = list( - /obj/item/mecha_parts/part/gygax_torso, - /obj/item/mecha_parts/part/gygax_left_arm, - /obj/item/mecha_parts/part/gygax_right_arm, - /obj/item/mecha_parts/part/gygax_left_leg, - /obj/item/mecha_parts/part/gygax_right_leg, - /obj/item/mecha_parts/part/gygax_head - ) - -/datum/component/construction/mecha/gygax - result = /obj/mecha/combat/gygax - base_icon = "gygax" - steps = list( - //1 - list( - "key" = TOOL_WRENCH, - "desc" = "The hydraulic systems are disconnected." - ), - - //2 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_WRENCH, - "desc" = "The hydraulic systems are connected." - ), - - //3 - list( - "key" = /obj/item/stack/cable_coil, - "amount" = 5, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The hydraulic systems are active." - ), - - //4 - list( - "key" = TOOL_WIRECUTTER, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The wiring is added." - ), - - //5 - list( - "key" = /obj/item/circuitboard/mecha/gygax/main, - "action" = ITEM_DELETE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The wiring is adjusted." - ), - - //6 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Central control module is installed." - ), - - //7 - list( - "key" = /obj/item/circuitboard/mecha/gygax/peripherals, - "action" = ITEM_DELETE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Central control module is secured." - ), - - //8 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Peripherals control module is installed." - ), - - //9 - list( - "key" = /obj/item/circuitboard/mecha/gygax/targeting, - "action" = ITEM_DELETE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Peripherals control module is secured." - ), - - //10 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Weapon control module is installed." - ), - - //11 - list( - "key" = /obj/item/stock_parts/scanning_module, - "action" = ITEM_MOVE_INSIDE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Weapon control module is secured." - ), - - //12 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Scanner module is installed." - ), - - //13 - list( - "key" = /obj/item/stock_parts/capacitor, - "action" = ITEM_MOVE_INSIDE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Scanner module is secured." - ), - - //14 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Capacitor is installed." - ), - - //15 - list( - "key" = /obj/item/stock_parts/cell, - "action" = ITEM_MOVE_INSIDE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Capacitor is secured." - ), - - //16 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "The power cell is installed." - ), - - //17 - list( - "key" = /obj/item/stack/sheet/metal, - "amount" = 5, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The power cell is secured." - ), - - //18 - list( - "key" = TOOL_WRENCH, - "back_key" = TOOL_CROWBAR, - "desc" = "Internal armor is installed." - ), - - //19 - list( - "key" = TOOL_WELDER, - "back_key" = TOOL_WRENCH, - "desc" = "Internal armor is wrenched." - ), - - //20 - list( - "key" = /obj/item/mecha_parts/part/gygax_armor, - "action" = ITEM_DELETE, - "back_key" = TOOL_WELDER, - "desc" = "Internal armor is welded." - ), - - //21 - list( - "key" = TOOL_WRENCH, - "back_key" = TOOL_CROWBAR, - "desc" = "External armor is installed." - ), - - //22 - list( - "key" = TOOL_WELDER, - "back_key" = TOOL_WRENCH, - "desc" = "External armor is wrenched." - ), - - ) - -/datum/component/construction/mecha/gygax/action(datum/source, atom/used_atom, mob/user) - return check_step(used_atom,user) - -/datum/component/construction/mecha/gygax/custom_action(obj/item/I, mob/living/user, diff) - if(!..()) - return FALSE - - switch(index) - if(1) - user.visible_message("[user] connects [parent] hydraulic systems.", "I connect [parent] hydraulic systems.") - if(2) - if(diff==FORWARD) - user.visible_message("[user] activates [parent] hydraulic systems.", "I activate [parent] hydraulic systems.") - else - user.visible_message("[user] disconnects [parent] hydraulic systems.", "I disconnect [parent] hydraulic systems.") - if(3) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [parent].", "I add the wiring to [parent].") - else - user.visible_message("[user] deactivates [parent] hydraulic systems.", "I deactivate [parent] hydraulic systems.") - if(4) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [parent].", "I adjust the wiring of [parent].") - else - user.visible_message("[user] removes the wiring from [parent].", "I remove the wiring from [parent].") - if(5) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] disconnects the wiring of [parent].", "I disconnect the wiring of [parent].") - if(6) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "I secure the mainboard.") - else - user.visible_message("[user] removes the central control module from [parent].", "I remove the central computer mainboard from [parent].") - if(7) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] unfastens the mainboard.", "I unfasten the mainboard.") - if(8) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "I secure the peripherals control module.") - else - user.visible_message("[user] removes the peripherals control module from [parent].", "I remove the peripherals control module from [parent].") - if(9) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] unfastens the peripherals control module.", "I unfasten the peripherals control module.") - if(10) - if(diff==FORWARD) - user.visible_message("[user] secures the weapon control module.", "I secure the weapon control module.") - else - user.visible_message("[user] removes the weapon control module from [parent].", "I remove the weapon control module from [parent].") - if(11) - if(diff==FORWARD) - user.visible_message("[user] installs [I] to [parent].", "I install [I] to [parent].") - else - user.visible_message("[user] unfastens the weapon control module.", "I unfasten the weapon control module.") - if(12) - if(diff==FORWARD) - user.visible_message("[user] secures the scanner module.", "I secure the scanner module.") - else - user.visible_message("[user] removes the scanner module from [parent].", "I remove the scanner module from [parent].") - if(13) - if(diff==FORWARD) - user.visible_message("[user] installs [I] to [parent].", "I install [I] to [parent].") - else - user.visible_message("[user] unfastens the scanner module.", "I unfasten the scanner module.") - if(14) - if(diff==FORWARD) - user.visible_message("[user] secures the capacitor.", "I secure the capacitor.") - else - user.visible_message("[user] removes the capacitor from [parent].", "I remove the capacitor from [parent].") - if(15) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] unfastens the capacitor.", "I unfasten the capacitor.") - if(16) - if(diff==FORWARD) - user.visible_message("[user] secures the power cell.", "I secure the power cell.") - else - user.visible_message("[user] pries the power cell from [parent].", "I pry the power cell from [parent].") - if(17) - if(diff==FORWARD) - user.visible_message("[user] installs the internal armor layer to [parent].", "I install the internal armor layer to [parent].") - else - user.visible_message("[user] unfastens the power cell.", "I unfasten the power cell.") - if(18) - if(diff==FORWARD) - user.visible_message("[user] secures the internal armor layer.", "I secure the internal armor layer.") - else - user.visible_message("[user] pries internal armor layer from [parent].", "I pry internal armor layer from [parent].") - if(19) - if(diff==FORWARD) - user.visible_message("[user] welds the internal armor layer to [parent].", "I weld the internal armor layer to [parent].") - else - user.visible_message("[user] unfastens the internal armor layer.", "I unfasten the internal armor layer.") - if(20) - if(diff==FORWARD) - user.visible_message("[user] installs [I] to [parent].", "I install [I] to [parent].") - else - user.visible_message("[user] cuts the internal armor layer from [parent].", "I cut the internal armor layer from [parent].") - if(21) - if(diff==FORWARD) - user.visible_message("[user] secures Gygax Armor Plates.", "I secure Gygax Armor Plates.") - else - user.visible_message("[user] pries Gygax Armor Plates from [parent].", "I pry Gygax Armor Plates from [parent].") - if(22) - if(diff==FORWARD) - user.visible_message("[user] welds Gygax Armor Plates to [parent].", "I weld Gygax Armor Plates to [parent].") - else - user.visible_message("[user] unfastens Gygax Armor Plates.", "I unfasten Gygax Armor Plates.") - return TRUE - -/datum/component/construction/unordered/mecha_chassis/firefighter - result = /datum/component/construction/mecha/firefighter - steps = list( - /obj/item/mecha_parts/part/ripley_torso, - /obj/item/mecha_parts/part/ripley_left_arm, - /obj/item/mecha_parts/part/ripley_right_arm, - /obj/item/mecha_parts/part/ripley_left_leg, - /obj/item/mecha_parts/part/ripley_right_leg, - /obj/item/clothing/suit/fire - ) - -/datum/component/construction/mecha/firefighter - result = /obj/mecha/working/ripley/firefighter - base_icon = "fireripley" - steps = list( - //1 - list( - "key" = TOOL_WRENCH, - "desc" = "The hydraulic systems are disconnected." - ), - - //2 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_WRENCH, - "desc" = "The hydraulic systems are connected." - ), - - //3 - list( - "key" = /obj/item/stack/cable_coil, - "amount" = 5, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The hydraulic systems are active." - ), - - //4 - list( - "key" = TOOL_WIRECUTTER, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The wiring is added." - ), - - //5 - list( - "key" = /obj/item/circuitboard/mecha/ripley/main, - "action" = ITEM_DELETE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The wiring is adjusted." - ), - - //6 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Central control module is installed." - ), - - //7 - list( - "key" = /obj/item/circuitboard/mecha/ripley/peripherals, - "action" = ITEM_DELETE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Central control module is secured." - ), - - //8 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Peripherals control module is installed." - ), - //9 - list( - "key" = /obj/item/stock_parts/scanning_module, - "action" = ITEM_MOVE_INSIDE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Peripherals control module is secured." - ), - - //10 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Scanner module is installed." - ), - - //11 - list( - "key" = /obj/item/stock_parts/capacitor, - "action" = ITEM_MOVE_INSIDE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Scanner module is secured." - ), - - //12 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Capacitor is installed." - ), - - //13 - list( - "key" = /obj/item/stock_parts/cell, - "action" = ITEM_MOVE_INSIDE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Capacitor is secured." - ), - - //14 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "The power cell is installed." - ), - - //15 - list( - "key" = /obj/item/stack/sheet/plasteel, - "amount" = 5, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The power cell is secured." - ), - - //16 - list( - "key" = TOOL_WRENCH, - "back_key" = TOOL_CROWBAR, - "desc" = "Internal armor is installed." - ), - - //13 - list( - "key" = TOOL_WELDER, - "back_key" = TOOL_WRENCH, - "desc" = "Internal armor is wrenched." - ), - - //17 - list( - "key" = /obj/item/stack/sheet/plasteel, - "amount" = 5, - "back_key" = TOOL_WELDER, - "desc" = "Internal armor is welded." - ), - - //18 - list( - "key" = /obj/item/stack/sheet/plasteel, - "amount" = 5, - "back_key" = TOOL_CROWBAR, - "desc" = "External armor is being installed." - ), - - //19 - list( - "key" = TOOL_WRENCH, - "back_key" = TOOL_CROWBAR, - "desc" = "External armor is installed." - ), - - //20 - list( - "key" = TOOL_WELDER, - "back_key" = TOOL_WRENCH, - "desc" = "External armor is wrenched." - ), - ) - -/datum/component/construction/mecha/firefighter/custom_action(obj/item/I, mob/living/user, diff) - if(!..()) - return FALSE - - //TODO: better messages. - switch(index) - if(1) - user.visible_message("[user] connects [parent] hydraulic systems.", "I connect [parent] hydraulic systems.") - if(2) - if(diff==FORWARD) - user.visible_message("[user] activates [parent] hydraulic systems.", "I activate [parent] hydraulic systems.") - else - user.visible_message("[user] disconnects [parent] hydraulic systems.", "I disconnect [parent] hydraulic systems.") - if(3) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [parent].", "I add the wiring to [parent].") - else - user.visible_message("[user] deactivates [parent] hydraulic systems.", "I deactivate [parent] hydraulic systems.") - if(4) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [parent].", "I adjust the wiring of [parent].") - else - user.visible_message("[user] removes the wiring from [parent].", "I remove the wiring from [parent].") - if(5) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] disconnects the wiring of [parent].", "I disconnect the wiring of [parent].") - if(6) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "I secure the mainboard.") - else - user.visible_message("[user] removes the central control module from [parent].", "I remove the central computer mainboard from [parent].") - if(7) - if(diff==FORWARD) - user.visible_message("[user] installs [I]into [parent].", "I install [I]into [parent].") - else - user.visible_message("[user] unfastens the mainboard.", "I unfasten the mainboard.") - if(8) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "I secure the peripherals control module.") - else - user.visible_message("[user] removes the peripherals control module from [parent].", "I remove the peripherals control module from [parent].") - if(9) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] unfastens the peripherals control module.", "I unfasten the peripherals control module.") - if(10) - if(diff==FORWARD) - user.visible_message("[user] secures the scanner module.", "I secure the scanner module.") - else - user.visible_message("[user] removes the scanner module from [parent].", "I remove the scanner module from [parent].") - if(11) - if(diff==FORWARD) - user.visible_message("[user] installs [I] to [parent].", "I install [I] to [parent].") - else - user.visible_message("[user] unfastens the scanner module.", "I unfasten the scanner module.") - if(12) - if(diff==FORWARD) - user.visible_message("[user] secures the capacitor.", "I secure the capacitor.") - else - user.visible_message("[user] removes the capacitor from [parent].", "I remove the capacitor from [parent].") - if(13) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] unfastens the capacitor.", "I unfasten the capacitor.") - if(14) - if(diff==FORWARD) - user.visible_message("[user] secures the power cell.", "I secure the power cell.") - else - user.visible_message("[user] pries the power cell from [parent].", "I pry the power cell from [parent].") - if(15) - if(diff==FORWARD) - user.visible_message("[user] installs the internal armor layer to [parent].", "I install the internal armor layer to [parent].") - else - user.visible_message("[user] unfastens the power cell.", "I unfasten the power cell.") - if(16) - if(diff==FORWARD) - user.visible_message("[user] secures the internal armor layer.", "I secure the internal armor layer.") - else - user.visible_message("[user] pries internal armor layer from [parent].", "I pry internal armor layer from [parent].") - if(17) - if(diff==FORWARD) - user.visible_message("[user] welds the internal armor layer to [parent].", "I weld the internal armor layer to [parent].") - else - user.visible_message("[user] unfastens the internal armor layer.", "I unfasten the internal armor layer.") - if(18) - if(diff==FORWARD) - user.visible_message("[user] starts to install the external armor layer to [parent].", "I install the external armor layer to [parent].") - else - user.visible_message("[user] cuts the internal armor layer from [parent].", "I cut the internal armor layer from [parent].") - if(19) - if(diff==FORWARD) - user.visible_message("[user] installs the external reinforced armor layer to [parent].", "I install the external reinforced armor layer to [parent].") - else - user.visible_message("[user] removes the external armor from [parent].", "I remove the external armor from [parent].") - if(20) - if(diff==FORWARD) - user.visible_message("[user] secures the external armor layer.", "I secure the external reinforced armor layer.") - else - user.visible_message("[user] pries external armor layer from [parent].", "I pry external armor layer from [parent].") - if(21) - if(diff==FORWARD) - user.visible_message("[user] welds the external armor layer to [parent].", "I weld the external armor layer to [parent].") - else - user.visible_message("[user] unfastens the external armor layer.", "I unfasten the external armor layer.") - return TRUE - -/datum/component/construction/unordered/mecha_chassis/honker - result = /datum/component/construction/mecha/honker - steps = list( - /obj/item/mecha_parts/part/honker_torso, - /obj/item/mecha_parts/part/honker_left_arm, - /obj/item/mecha_parts/part/honker_right_arm, - /obj/item/mecha_parts/part/honker_left_leg, - /obj/item/mecha_parts/part/honker_right_leg, - /obj/item/mecha_parts/part/honker_head - ) - -/datum/component/construction/mecha/honker - result = /obj/mecha/combat/honker - steps = list( - //1 - list( - "key" = /obj/item/bikehorn - ), - - //2 - list( - "key" = /obj/item/circuitboard/mecha/honker/main, - "action" = ITEM_DELETE - ), - - //3 - list( - "key" = /obj/item/bikehorn - ), - - //4 - list( - "key" = /obj/item/circuitboard/mecha/honker/peripherals, - "action" = ITEM_DELETE - ), - - //5 - list( - "key" = /obj/item/bikehorn - ), - - //6 - list( - "key" = /obj/item/circuitboard/mecha/honker/targeting, - "action" = ITEM_DELETE - ), - - //7 - list( - "key" = /obj/item/bikehorn - ), - - //6 - list( - "key" = /obj/item/stock_parts/scanning_module, - "action" = ITEM_MOVE_INSIDE - ), - - //8 - list( - "key" = /obj/item/bikehorn - ), - - //9 - list( - "key" = /obj/item/stock_parts/capacitor, - "action" = ITEM_MOVE_INSIDE - ), - - //10 - list( - "key" = /obj/item/bikehorn - ), - - //11 - list( - "key" = /obj/item/stock_parts/cell, - "action" = ITEM_MOVE_INSIDE - ), - - //12 - list( - "key" = /obj/item/bikehorn - ), - - //13 - list( - "key" = /obj/item/clothing/mask/gas/clown_hat, - "action" = ITEM_DELETE - ), - - //14 - list( - "key" = /obj/item/bikehorn - ), - - //15 - list( - "key" = /obj/item/clothing/shoes/clown_shoes, - "action" = ITEM_DELETE - ), - - //16 - list( - "key" = /obj/item/bikehorn - ), - ) - -// HONK doesn't have any construction step icons, so we just set an icon once. -/datum/component/construction/mecha/honker/update_parent(step_index) - if(step_index == 1) - var/atom/parent_atom = parent - parent_atom.icon = 'icons/mecha/mech_construct.dmi' - parent_atom.icon_state = "honker_chassis" - ..() - -/datum/component/construction/mecha/honker/custom_action(obj/item/I, mob/living/user, diff) - if(!..()) - return FALSE - - if(istype(I, /obj/item/bikehorn)) - playsound(parent, 'sound/blank.ogg', 50, TRUE) - user.visible_message("HONK!") - - //TODO: better messages. - switch(index) - if(2) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - if(4) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - if(6) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - if(8) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - if(10) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - if(12) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - if(14) - user.visible_message("[user] puts [I] on [parent].", "I put [I] on [parent].") - if(16) - user.visible_message("[user] puts [I] on [parent].", "I put [I] on [parent].") - return TRUE - -/datum/component/construction/unordered/mecha_chassis/durand - result = /datum/component/construction/mecha/durand - steps = list( - /obj/item/mecha_parts/part/durand_torso, - /obj/item/mecha_parts/part/durand_left_arm, - /obj/item/mecha_parts/part/durand_right_arm, - /obj/item/mecha_parts/part/durand_left_leg, - /obj/item/mecha_parts/part/durand_right_leg, - /obj/item/mecha_parts/part/durand_head - ) - -/datum/component/construction/mecha/durand - result = /obj/mecha/combat/durand - base_icon = "durand" - steps = list( - //1 - list( - "key" = TOOL_WRENCH, - "desc" = "The hydraulic systems are disconnected." - ), - - //2 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_WRENCH, - "desc" = "The hydraulic systems are connected." - ), - - //3 - list( - "key" = /obj/item/stack/cable_coil, - "amount" = 5, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The hydraulic systems are active." - ), - - //4 - list( - "key" = TOOL_WIRECUTTER, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The wiring is added." - ), - - //5 - list( - "key" = /obj/item/circuitboard/mecha/durand/main, - "action" = ITEM_DELETE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The wiring is adjusted." - ), - - //6 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Central control module is installed." - ), - - //7 - list( - "key" = /obj/item/circuitboard/mecha/durand/peripherals, - "action" = ITEM_DELETE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Central control module is secured." - ), - - //8 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Peripherals control module is installed." - ), - - //9 - list( - "key" = /obj/item/circuitboard/mecha/durand/targeting, - "action" = ITEM_DELETE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Peripherals control module is secured." - ), - - //10 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Weapon control module is installed." - ), - - //11 - list( - "key" = /obj/item/stock_parts/scanning_module, - "action" = ITEM_MOVE_INSIDE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Weapon control module is secured." - ), - - //12 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Scanner module is installed." - ), - - //13 - list( - "key" = /obj/item/stock_parts/capacitor, - "action" = ITEM_MOVE_INSIDE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Scanner module is secured." - ), - - //14 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Capacitor is installed." - ), - - //15 - list( - "key" = /obj/item/stock_parts/cell, - "action" = ITEM_MOVE_INSIDE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Capacitor is secured." - ), - - //16 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "The power cell is installed." - ), - - //17 - list( - "key" = /obj/item/stack/sheet/metal, - "amount" = 5, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The power cell is secured." - ), - - //18 - list( - "key" = TOOL_WRENCH, - "back_key" = TOOL_CROWBAR, - "desc" = "Internal armor is installed." - ), - - //19 - list( - "key" = TOOL_WELDER, - "back_key" = TOOL_WRENCH, - "desc" = "Internal armor is wrenched." - ), - - //20 - list( - "key" = /obj/item/mecha_parts/part/durand_armor, - "action" = ITEM_DELETE, - "back_key" = TOOL_WELDER, - "desc" = "Internal armor is welded." - ), - - //21 - list( - "key" = TOOL_WRENCH, - "back_key" = TOOL_CROWBAR, - "desc" = "External armor is installed." - ), - - //22 - list( - "key" = TOOL_WELDER, - "back_key" = TOOL_WRENCH, - "desc" = "External armor is wrenched." - ), - ) - - -/datum/component/construction/mecha/durand/custom_action(obj/item/I, mob/living/user, diff) - if(!..()) - return FALSE - - //TODO: better messages. - switch(index) - if(1) - user.visible_message("[user] connects [parent] hydraulic systems.", "I connect [parent] hydraulic systems.") - if(2) - if(diff==FORWARD) - user.visible_message("[user] activates [parent] hydraulic systems.", "I activate [parent] hydraulic systems.") - else - user.visible_message("[user] disconnects [parent] hydraulic systems.", "I disconnect [parent] hydraulic systems.") - if(3) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [parent].", "I add the wiring to [parent].") - else - user.visible_message("[user] deactivates [parent] hydraulic systems.", "I deactivate [parent] hydraulic systems.") - if(4) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [parent].", "I adjust the wiring of [parent].") - else - user.visible_message("[user] removes the wiring from [parent].", "I remove the wiring from [parent].") - if(5) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] disconnects the wiring of [parent].", "I disconnect the wiring of [parent].") - if(6) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "I secure the mainboard.") - else - user.visible_message("[user] removes the central control module from [parent].", "I remove the central computer mainboard from [parent].") - if(7) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] unfastens the mainboard.", "I unfasten the mainboard.") - if(8) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "I secure the peripherals control module.") - else - user.visible_message("[user] removes the peripherals control module from [parent].", "I remove the peripherals control module from [parent].") - if(9) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] unfastens the peripherals control module.", "I unfasten the peripherals control module.") - if(10) - if(diff==FORWARD) - user.visible_message("[user] secures the weapon control module.", "I secure the weapon control module.") - else - user.visible_message("[user] removes the weapon control module from [parent].", "I remove the weapon control module from [parent].") - if(11) - if(diff==FORWARD) - user.visible_message("[user] installs [I] to [parent].", "I install [I] to [parent].") - else - user.visible_message("[user] unfastens the weapon control module.", "I unfasten the weapon control module.") - if(12) - if(diff==FORWARD) - user.visible_message("[user] secures the scanner module.", "I secure the scanner module.") - else - user.visible_message("[user] removes the scanner module from [parent].", "I remove the scanner module from [parent].") - if(13) - if(diff==FORWARD) - user.visible_message("[user] installs [I] to [parent].", "I install [I] to [parent].") - else - user.visible_message("[user] unfastens the scanner module.", "I unfasten the scanner module.") - if(14) - if(diff==FORWARD) - user.visible_message("[user] secures the capacitor.", "I secure the capacitor.") - else - user.visible_message("[user] removes the capacitor from [parent].", "I remove the capacitor from [parent].") - if(15) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] unfastens the capacitor.", "I unfasten the capacitor.") - if(16) - if(diff==FORWARD) - user.visible_message("[user] secures the power cell.", "I secure the power cell.") - else - user.visible_message("[user] pries the power cell from [parent].", "I pry the power cell from [parent].") - if(17) - if(diff==FORWARD) - user.visible_message("[user] installs the internal armor layer to [parent].", "I install the internal armor layer to [parent].") - else - user.visible_message("[user] unfastens the power cell.", "I unfasten the power cell.") - if(18) - if(diff==FORWARD) - user.visible_message("[user] secures the internal armor layer.", "I secure the internal armor layer.") - else - user.visible_message("[user] pries internal armor layer from [parent].", "I pry internal armor layer from [parent].") - if(19) - if(diff==FORWARD) - user.visible_message("[user] welds the internal armor layer to [parent].", "I weld the internal armor layer to [parent].") - else - user.visible_message("[user] unfastens the internal armor layer.", "I unfasten the internal armor layer.") - if(20) - if(diff==FORWARD) - user.visible_message("[user] installs [I] to [parent].", "I install [I] to [parent].") - else - user.visible_message("[user] cuts the internal armor layer from [parent].", "I cut the internal armor layer from [parent].") - if(21) - if(diff==FORWARD) - user.visible_message("[user] secures Durand Armor Plates.", "I secure Durand Armor Plates.") - else - user.visible_message("[user] pries Durand Armor Plates from [parent].", "I pry Durand Armor Plates from [parent].") - if(22) - if(diff==FORWARD) - user.visible_message("[user] welds Durand Armor Plates to [parent].", "I weld Durand Armor Plates to [parent].") - else - user.visible_message("[user] unfastens Durand Armor Plates.", "I unfasten Durand Armor Plates.") - return TRUE - -//PHAZON - -/datum/component/construction/unordered/mecha_chassis/phazon - result = /datum/component/construction/mecha/phazon - steps = list( - /obj/item/mecha_parts/part/phazon_torso, - /obj/item/mecha_parts/part/phazon_left_arm, - /obj/item/mecha_parts/part/phazon_right_arm, - /obj/item/mecha_parts/part/phazon_left_leg, - /obj/item/mecha_parts/part/phazon_right_leg, - /obj/item/mecha_parts/part/phazon_head - ) - -/datum/component/construction/mecha/phazon - result = /obj/mecha/combat/phazon - base_icon = "phazon" - steps = list( - //1 - list( - "key" = TOOL_WRENCH, - "desc" = "The hydraulic systems are disconnected." - ), - - //2 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_WRENCH, - "desc" = "The hydraulic systems are connected." - ), - - //3 - list( - "key" = /obj/item/stack/cable_coil, - "amount" = 5, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The hydraulic systems are active." - ), - - //4 - list( - "key" = TOOL_WIRECUTTER, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The wiring is added." - ), - - //5 - list( - "key" = /obj/item/circuitboard/mecha/phazon/main, - "action" = ITEM_DELETE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The wiring is adjusted." - ), - - //6 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Central control module is installed." - ), - - //7 - list( - "key" = /obj/item/circuitboard/mecha/phazon/peripherals, - "action" = ITEM_DELETE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Central control module is secured." - ), - - //8 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Peripherals control module is installed" - ), - - //9 - list( - "key" = /obj/item/circuitboard/mecha/phazon/targeting, - "action" = ITEM_DELETE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Peripherals control module is secured." - ), - - //10 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Weapon control is installed." - ), - - //11 - list( - "key" = /obj/item/stock_parts/scanning_module, - "action" = ITEM_MOVE_INSIDE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Weapon control module is secured." - ), - - //12 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Scanner module is installed." - ), - - //13 - list( - "key" = /obj/item/stock_parts/capacitor, - "action" = ITEM_MOVE_INSIDE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Scanner module is secured." - ), - - //14 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Capacitor is installed." - ), - - //15 - list( - "key" = /obj/item/stack/ore/bluespace_crystal, - "amount" = 1, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Capacitor is secured." - ), - - //16 - list( - "key" = /obj/item/stack/cable_coil, - "amount" = 5, - "back_key" = TOOL_CROWBAR, - "desc" = "The bluespace crystal is installed." - ), - - //17 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_WIRECUTTER, - "desc" = "The bluespace crystal is connected." - ), - - //18 - list( - "key" = /obj/item/stock_parts/cell, - "action" = ITEM_MOVE_INSIDE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The bluespace crystal is engaged." - ), - - //19 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "The power cell is installed.", - "icon_state" = "phazon17" - // This is the point where a step icon is skipped, so "icon_state" had to be set manually starting from here. - ), - - //20 - list( - "key" = /obj/item/stack/sheet/plasteel, - "amount" = 5, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The power cell is secured.", - "icon_state" = "phazon18" - ), - - //21 - list( - "key" = TOOL_WRENCH, - "back_key" = TOOL_CROWBAR, - "desc" = "Phase armor is installed.", - "icon_state" = "phazon19" - ), - - //22 - list( - "key" = TOOL_WELDER, - "back_key" = TOOL_WRENCH, - "desc" = "Phase armor is wrenched.", - "icon_state" = "phazon20" - ), - - //23 - list( - "key" = /obj/item/mecha_parts/part/phazon_armor, - "action" = ITEM_DELETE, - "back_key" = TOOL_WELDER, - "desc" = "Phase armor is welded.", - "icon_state" = "phazon21" - ), - - //24 - list( - "key" = TOOL_WRENCH, - "back_key" = TOOL_CROWBAR, - "desc" = "External armor is installed.", - "icon_state" = "phazon22" - ), - - //25 - list( - "key" = TOOL_WELDER, - "back_key" = TOOL_WRENCH, - "desc" = "External armor is wrenched.", - "icon_state" = "phazon23" - ), - - //26 - list( - "key" = /obj/item/assembly/signaler/anomaly, - "action" = ITEM_DELETE, - "back_key" = TOOL_WELDER, - "desc" = "Anomaly core socket is open.", - "icon_state" = "phazon24" - ), - ) - - -/datum/component/construction/mecha/phazon/custom_action(obj/item/I, mob/living/user, diff) - if(!..()) - return FALSE - - //TODO: better messages. - switch(index) - if(1) - user.visible_message("[user] connects [parent] hydraulic systems.", "I connect [parent] hydraulic systems.") - if(2) - if(diff==FORWARD) - user.visible_message("[user] activates [parent] hydraulic systems.", "I activate [parent] hydraulic systems.") - else - user.visible_message("[user] disconnects [parent] hydraulic systems.", "I disconnect [parent] hydraulic systems.") - if(3) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [parent].", "I add the wiring to [parent].") - else - user.visible_message("[user] deactivates [parent] hydraulic systems.", "I deactivate [parent] hydraulic systems.") - if(4) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [parent].", "I adjust the wiring of [parent].") - else - user.visible_message("[user] removes the wiring from [parent].", "I remove the wiring from [parent].") - if(5) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] disconnects the wiring of [parent].", "I disconnect the wiring of [parent].") - if(6) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "I secure the mainboard.") - else - user.visible_message("[user] removes the central control module from [parent].", "I remove the central computer mainboard from [parent].") - if(7) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] unfastens the mainboard.", "I unfasten the mainboard.") - if(8) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "I secure the peripherals control module.") - else - user.visible_message("[user] removes the peripherals control module from [parent].", "I remove the peripherals control module from [parent].") - if(9) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] unfastens the peripherals control module.", "I unfasten the peripherals control module.") - if(10) - if(diff==FORWARD) - user.visible_message("[user] secures the weapon control module.", "I secure the weapon control module.") - else - user.visible_message("[user] removes the weapon control module from [parent].", "I remove the weapon control module from [parent].") - if(11) - if(diff==FORWARD) - user.visible_message("[user] installs [I] to [parent].", "I install [I] to [parent].") - else - user.visible_message("[user] unfastens the weapon control module.", "I unfasten the weapon control module.") - if(12) - if(diff==FORWARD) - user.visible_message("[user] secures the scanner module.", "I secure the scanner module.") - else - user.visible_message("[user] removes the scanner module from [parent].", "I remove the scanner module from [parent].") - if(13) - if(diff==FORWARD) - user.visible_message("[user] installs [I] to [parent].", "I install [I] to [parent].") - else - user.visible_message("[user] unfastens the scanner module.", "I unfasten the scanner module.") - if(14) - if(diff==FORWARD) - user.visible_message("[user] secures the capacitor.", "I secure the capacitor.") - else - user.visible_message("[user] removes the capacitor from [parent].", "I remove the capacitor from [parent].") - if(15) - if(diff==FORWARD) - user.visible_message("[user] installs [I].", "I install [I].") - else - user.visible_message("[user] unsecures the capacitor from [parent].", "I unsecure the capacitor from [parent].") - if(16) - if(diff==FORWARD) - user.visible_message("[user] connects the bluespace crystal.", "I connect the bluespace crystal.") - else - user.visible_message("[user] removes the bluespace crystal from [parent].", "I remove the bluespace crystal from [parent].") - if(17) - if(diff==FORWARD) - user.visible_message("[user] engages the bluespace crystal.", "I engage the bluespace crystal.") - else - user.visible_message("[user] disconnects the bluespace crystal from [parent].", "I disconnect the bluespace crystal from [parent].") - if(18) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] disengages the bluespace crystal.", "I disengage the bluespace crystal.") - if(19) - if(diff==FORWARD) - user.visible_message("[user] secures the power cell.", "I secure the power cell.") - else - user.visible_message("[user] pries the power cell from [parent].", "I pry the power cell from [parent].") - if(20) - if(diff==FORWARD) - user.visible_message("[user] installs the phase armor layer to [parent].", "I install the phase armor layer to [parent].") - else - user.visible_message("[user] unfastens the power cell.", "I unfasten the power cell.") - if(21) - if(diff==FORWARD) - user.visible_message("[user] secures the phase armor layer.", "I secure the phase armor layer.") - else - user.visible_message("[user] pries the phase armor layer from [parent].", "I pry the phase armor layer from [parent].") - if(22) - if(diff==FORWARD) - user.visible_message("[user] welds the phase armor layer to [parent].", "I weld the phase armor layer to [parent].") - else - user.visible_message("[user] unfastens the phase armor layer.", "I unfasten the phase armor layer.") - if(23) - if(diff==FORWARD) - user.visible_message("[user] installs [I] to [parent].", "I install [I] to [parent].") - else - user.visible_message("[user] cuts phase armor layer from [parent].", "I cut the phase armor layer from [parent].") - if(24) - if(diff==FORWARD) - user.visible_message("[user] secures Phazon Armor Plates.", "I secure Phazon Armor Plates.") - else - user.visible_message("[user] pries Phazon Armor Plates from [parent].", "I pry Phazon Armor Plates from [parent].") - if(25) - if(diff==FORWARD) - user.visible_message("[user] welds Phazon Armor Plates to [parent].", "I weld Phazon Armor Plates to [parent].") - else - user.visible_message("[user] unfastens Phazon Armor Plates.", "I unfasten Phazon Armor Plates.") - if(26) - if(diff==FORWARD) - user.visible_message("[user] carefully inserts the anomaly core into [parent] and secures it.", - "I slowly place the anomaly core into its socket and close its chamber.") - return TRUE - -//ODYSSEUS - -/datum/component/construction/unordered/mecha_chassis/odysseus - result = /datum/component/construction/mecha/odysseus - steps = list( - /obj/item/mecha_parts/part/odysseus_torso, - /obj/item/mecha_parts/part/odysseus_head, - /obj/item/mecha_parts/part/odysseus_left_arm, - /obj/item/mecha_parts/part/odysseus_right_arm, - /obj/item/mecha_parts/part/odysseus_left_leg, - /obj/item/mecha_parts/part/odysseus_right_leg - ) - -/datum/component/construction/mecha/odysseus - result = /obj/mecha/medical/odysseus - base_icon = "odysseus" - steps = list( - //1 - list( - "key" = TOOL_WRENCH, - "desc" = "The hydraulic systems are disconnected." - ), - - //2 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_WRENCH, - "desc" = "The hydraulic systems are connected." - ), - - //3 - list( - "key" = /obj/item/stack/cable_coil, - "amount" = 5, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The hydraulic systems are active." - ), - - //4 - list( - "key" = TOOL_WIRECUTTER, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The wiring is added." - ), - - //5 - list( - "key" = /obj/item/circuitboard/mecha/odysseus/main, - "action" = ITEM_DELETE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The wiring is adjusted." - ), - - //6 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Central control module is installed." - ), - - //7 - list( - "key" = /obj/item/circuitboard/mecha/odysseus/peripherals, - "action" = ITEM_DELETE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Central control module is secured." - ), - - //8 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Peripherals control module is installed." - ), - //9 - list( - "key" = /obj/item/stock_parts/scanning_module, - "action" = ITEM_MOVE_INSIDE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Peripherals control module is secured." - ), - - //10 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Scanner module is installed." - ), - - //11 - list( - "key" = /obj/item/stock_parts/capacitor, - "action" = ITEM_MOVE_INSIDE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Scanner module is secured." - ), - - //12 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "Capacitor is installed." - ), - - //13 - list( - "key" = /obj/item/stock_parts/cell, - "action" = ITEM_MOVE_INSIDE, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "Capacitor is secured." - ), - - //11 - list( - "key" = TOOL_SCREWDRIVER, - "back_key" = TOOL_CROWBAR, - "desc" = "The power cell is installed." - ), - - //12 - list( - "key" = /obj/item/stack/sheet/metal, - "amount" = 5, - "back_key" = TOOL_SCREWDRIVER, - "desc" = "The power cell is secured." - ), - - //13 - list( - "key" = TOOL_WRENCH, - "back_key" = TOOL_CROWBAR, - "desc" = "Internal armor is installed." - ), - - //14 - list( - "key" = TOOL_WELDER, - "back_key" = TOOL_WRENCH, - "desc" = "Internal armor is wrenched." - ), - - //15 - list( - "key" = /obj/item/stack/sheet/plasteel, - "amount" = 5, - "back_key" = TOOL_WELDER, - "desc" = "Internal armor is welded." - ), - - //16 - list( - "key" = TOOL_WRENCH, - "back_key" = TOOL_CROWBAR, - "desc" = "External armor is installed." - ), - - //17 - list( - "key" = TOOL_WELDER, - "back_key" = TOOL_WRENCH, - "desc" = "External armor is wrenched." - ), - ) - -/datum/component/construction/mecha/odysseus/custom_action(obj/item/I, mob/living/user, diff) - if(!..()) - return FALSE - - //TODO: better messages. - switch(index) - if(1) - user.visible_message("[user] connects [parent] hydraulic systems.", "I connect [parent] hydraulic systems.") - if(2) - if(diff==FORWARD) - user.visible_message("[user] activates [parent] hydraulic systems.", "I activate [parent] hydraulic systems.") - else - user.visible_message("[user] disconnects [parent] hydraulic systems.", "I disconnect [parent] hydraulic systems.") - if(3) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to [parent].", "I add the wiring to [parent].") - else - user.visible_message("[user] deactivates [parent] hydraulic systems.", "I deactivate [parent] hydraulic systems.") - if(4) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of [parent].", "I adjust the wiring of [parent].") - else - user.visible_message("[user] removes the wiring from [parent].", "I remove the wiring from [parent].") - if(5) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] disconnects the wiring of [parent].", "I disconnect the wiring of [parent].") - if(6) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "I secure the mainboard.") - else - user.visible_message("[user] removes the central control module from [parent].", "I remove the central computer mainboard from [parent].") - if(7) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] unfastens the mainboard.", "I unfasten the mainboard.") - if(8) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "I secure the peripherals control module.") - else - user.visible_message("[user] removes the peripherals control module from [parent].", "I remove the peripherals control module from [parent].") - if(9) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] unfastens the peripherals control module.", "I unfasten the peripherals control module.") - if(10) - if(diff==FORWARD) - user.visible_message("[user] secures the scanner module.", "I secure the scanner module.") - else - user.visible_message("[user] removes the scanner module from [parent].", "I remove the scanner module from [parent].") - if(11) - if(diff==FORWARD) - user.visible_message("[user] installs [I] to [parent].", "I install [I] to [parent].") - else - user.visible_message("[user] unfastens the scanner module.", "I unfasten the scanner module.") - if(12) - if(diff==FORWARD) - user.visible_message("[user] secures the capacitor.", "I secure the capacitor.") - else - user.visible_message("[user] removes the capacitor from [parent].", "I remove the capacitor from [parent].") - if(13) - if(diff==FORWARD) - user.visible_message("[user] installs [I] into [parent].", "I install [I] into [parent].") - else - user.visible_message("[user] unfastens the capacitor.", "I unfasten the capacitor.") - if(14) - if(diff==FORWARD) - user.visible_message("[user] secures the power cell.", "I secure the power cell.") - else - user.visible_message("[user] pries the power cell from [parent].", "I pry the power cell from [parent].") - if(15) - if(diff==FORWARD) - user.visible_message("[user] installs the internal armor layer to [parent].", "I install the internal armor layer to [parent].") - else - user.visible_message("[user] unfastens the power cell.", "I unfasten the power cell.") - if(16) - if(diff==FORWARD) - user.visible_message("[user] secures the internal armor layer.", "I secure the internal armor layer.") - else - user.visible_message("[user] pries internal armor layer from [parent].", "I pry internal armor layer from [parent].") - if(17) - if(diff==FORWARD) - user.visible_message("[user] welds the internal armor layer to [parent].", "I weld the internal armor layer to [parent].") - else - user.visible_message("[user] unfastens the internal armor layer.", "I unfasten the internal armor layer.") - if(18) - if(diff==FORWARD) - user.visible_message("[user] installs the external armor layer to [parent].", "I install the external reinforced armor layer to [parent].") - else - user.visible_message("[user] cuts the internal armor layer from [parent].", "I cut the internal armor layer from [parent].") - if(19) - if(diff==FORWARD) - user.visible_message("[user] secures the external armor layer.", "I secure the external reinforced armor layer.") - else - user.visible_message("[user] pries the external armor layer from [parent].", "I pry the external armor layer from [parent].") - if(20) - if(diff==FORWARD) - user.visible_message("[user] welds the external armor layer to [parent].", "I weld the external armor layer to [parent].") - else - user.visible_message("[user] unfastens the external armor layer.", "I unfasten the external armor layer.") - return TRUE diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm deleted file mode 100644 index 56c43ecad1..0000000000 --- a/code/game/mecha/mecha_control_console.dm +++ /dev/null @@ -1,129 +0,0 @@ -/obj/machinery/computer/mecha - name = "exosuit control console" - desc = "" - icon_screen = "mecha" - icon_keyboard = "tech_key" - req_access = list(ACCESS_ROBOTICS) - circuit = /obj/item/circuitboard/computer/mecha_control - var/list/located = list() - -/obj/machinery/computer/mecha/ui_interact(mob/user) - . = ..() - var/dat = {"[src.name]
          -

          Tracking beacons data

          "} - var/list/trackerlist = list() - for(var/obj/mecha/MC in GLOB.mechas_list) - trackerlist += MC.trackers - for(var/obj/item/mecha_parts/mecha_tracking/TR in trackerlist) - var/answer = TR.get_mecha_info() - if(answer) - dat += {"
          [answer]

          - Send Message | [TR.recharging?"Recharging EMP Pulse...
          ":"(EMP Pulse)
          "]"} - - dat += "
          " - dat += "(Refresh)
          " - dat += "" - - user << browse(dat, "window=computer;size=400x500") - onclose(user, "computer") - -/obj/machinery/computer/mecha/Topic(href, href_list) - if(..()) - return - if(href_list["send_message"]) - var/obj/item/mecha_parts/mecha_tracking/MT = locate(href_list["send_message"]) - if (!istype(MT)) - return - var/message = stripped_input(usr,"Input message","Transmit message") - var/obj/mecha/M = MT.in_mecha() - if(trim(message) && M) - M.occupant_message(message) - return - if(href_list["shock"]) - var/obj/item/mecha_parts/mecha_tracking/MT = locate(href_list["shock"]) - if (istype(MT)) - MT.shock() - - updateUsrDialog() - return - -/obj/item/mecha_parts/mecha_tracking - name = "exosuit tracking beacon" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "motion2" - w_class = WEIGHT_CLASS_SMALL - var/ai_beacon = FALSE //If this beacon allows for AI control. Exists to avoid using istype() on checking. - var/recharging = 0 - -/obj/item/mecha_parts/mecha_tracking/proc/get_mecha_info() - if(!in_mecha()) - return 0 - var/obj/mecha/M = src.loc - var/cell_charge = M.get_charge() - var/answer = {"Name: [M.name]
          -Integrity: [round((M.obj_integrity/M.max_integrity*100), 0.01)]%
          -Cell Charge: [isnull(cell_charge)?"Not Found":"[M.cell.percent()]%"]
          -Airtank: [M.internal_tank?"[round(M.return_pressure(), 0.01)]":"Not Equipped"] kPa
          -Pilot: [M.occupant||"None"]
          -Location: [get_area_name(M, TRUE)||"Unknown"]
          -Active Equipment: [M.selected||"None"]"} - if(istype(M, /obj/mecha/working/ripley)) - var/obj/mecha/working/ripley/RM = M - answer += "
          Used Cargo Space: [round((RM.cargo.len/RM.cargo_capacity*100), 0.01)]%" - - return answer - -/obj/item/mecha_parts/mecha_tracking/emp_act() - . = ..() - if(!(. & EMP_PROTECT_SELF)) - qdel(src) - -/obj/item/mecha_parts/mecha_tracking/Destroy() - if(ismecha(loc)) - var/obj/mecha/M = loc - if(src in M.trackers) - M.trackers -= src - return ..() - -/obj/item/mecha_parts/mecha_tracking/try_attach_part(mob/user, obj/mecha/M) - if(!..()) - return - M.trackers += src - M.diag_hud_set_mechtracking() - -/obj/item/mecha_parts/mecha_tracking/proc/in_mecha() - if(ismecha(loc)) - return loc - return 0 - -/obj/item/mecha_parts/mecha_tracking/proc/shock() - if(recharging) - return - var/obj/mecha/M = in_mecha() - if(M) - M.emp_act(EMP_HEAVY) - addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/mecha_parts/mecha_tracking, recharge)), 5 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) - recharging = 1 - -/obj/item/mecha_parts/mecha_tracking/proc/recharge() - recharging = 0 - -/obj/item/mecha_parts/mecha_tracking/ai_control - name = "exosuit AI control beacon" - desc = "" - ai_beacon = TRUE - - -/obj/item/storage/box/mechabeacons - name = "exosuit tracking beacons" - -/obj/item/storage/box/mechabeacons/PopulateContents() - ..() - new /obj/item/mecha_parts/mecha_tracking(src) - new /obj/item/mecha_parts/mecha_tracking(src) - new /obj/item/mecha_parts/mecha_tracking(src) - new /obj/item/mecha_parts/mecha_tracking(src) - new /obj/item/mecha_parts/mecha_tracking(src) - new /obj/item/mecha_parts/mecha_tracking(src) - new /obj/item/mecha_parts/mecha_tracking(src) diff --git a/code/game/mecha/mecha_defense.dm b/code/game/mecha/mecha_defense.dm deleted file mode 100644 index 2035f3eb6d..0000000000 --- a/code/game/mecha/mecha_defense.dm +++ /dev/null @@ -1,376 +0,0 @@ -/obj/mecha/proc/get_armour_facing(relative_dir) - switch(relative_dir) - if(0) // BACKSTAB! - return facing_modifiers[MECHA_BACK_ARMOUR] - if(45, 90, 270, 315) - return facing_modifiers[MECHA_SIDE_ARMOUR] - if(225, 180, 135) - return facing_modifiers[MECHA_FRONT_ARMOUR] - return 1 //always return non-0 - -/obj/mecha/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) - . = ..() - if(. && obj_integrity > 0) - spark_system.start() - switch(damage_flag) - if("fire") - check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL)) - if("melee") - check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - else - check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT)) - if(. >= 5 || prob(33)) - occupant_message("Taking damage!") - log_message("Took [damage_amount] points of damage. Damage type: [damage_type]", LOG_MECHA) - -/obj/mecha/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) - . = ..() - if(!damage_amount) - return 0 - var/booster_deflection_modifier = 1 - var/booster_damage_modifier = 1 - if(damage_flag == "bullet" || damage_flag == "laser" || damage_flag == "energy") - for(var/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/B in equipment) - if(B.projectile_react()) - booster_deflection_modifier = B.deflect_coeff - booster_damage_modifier = B.damage_coeff - break - else if(damage_flag == "melee") - for(var/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/B in equipment) - if(B.attack_react()) - booster_deflection_modifier *= B.deflect_coeff - booster_damage_modifier *= B.damage_coeff - break - - if(attack_dir) - var/facing_modifier = get_armour_facing(dir2angle(attack_dir) - dir2angle(src)) - booster_damage_modifier /= facing_modifier - booster_deflection_modifier *= facing_modifier - if(prob(deflect_chance * booster_deflection_modifier)) - visible_message("[src]'s armour deflects the attack!") - log_message("Armor saved.", LOG_MECHA) - return 0 - if(.) - . *= booster_damage_modifier - -/obj/mecha/attack_hand(mob/living/user) - . = ..() - if(.) - return - user.changeNext_move(CLICK_CD_MELEE) // Ugh. Ideally we shouldn't be setting cooldowns outside of click code. -// user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) - playsound(loc, 'sound/blank.ogg', 40, TRUE, -1) - user.visible_message("[user] hits [name]. Nothing happens.", null, null, COMBAT_MESSAGE_RANGE) - log_message("Attack by hand/paw. Attacker - [user].", LOG_MECHA, color="red") - -/obj/mecha/attack_paw(mob/user as mob) - return attack_hand(user) - -/obj/mecha/attack_alien(mob/living/user) - log_message("Attack by alien. Attacker - [user].", LOG_MECHA, color="red") - playsound(src.loc, 'sound/blank.ogg', 100, TRUE) - attack_generic(user, 15, BRUTE, "melee", 0) - -/obj/mecha/attack_animal(mob/living/simple_animal/user) - log_message("Attack by simple animal. Attacker - [user].", LOG_MECHA, color="red") - if(!user.melee_damage_upper && !user.obj_damage) - user.emote("custom", message = "[user.friendly_verb_continuous] [src].") - return 0 - else - var/play_soundeffect = 1 - if(user.environment_smash) - play_soundeffect = 0 - playsound(src, 'sound/blank.ogg', 50, TRUE) - var/animal_damage = rand(user.melee_damage_lower,user.melee_damage_upper) - if(user.obj_damage) - animal_damage = user.obj_damage - animal_damage = min(animal_damage, 20*user.environment_smash) - log_combat(user, src, "attacked") - attack_generic(user, animal_damage, user.melee_damage_type, "melee", play_soundeffect) - return 1 - - -/obj/mecha/hulk_damage() - return 15 - -/obj/mecha/attack_hulk(mob/living/carbon/human/user) - . = ..() - if(.) - log_message("Attack by hulk. Attacker - [user].", LOG_MECHA, color="red") - log_combat(user, src, "punched", "hulk powers") - -/obj/mecha/blob_act(obj/structure/blob/B) - log_message("Attack by blob. Attacker - [B].", LOG_MECHA, color="red") - take_damage(30, BRUTE, "melee", 0, get_dir(src, B)) - -/obj/mecha/attack_tk() - return - -/obj/mecha/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) //wrapper - log_message("Hit by [AM].", LOG_MECHA, color="red") - . = ..() - -/obj/mecha/bullet_act(obj/projectile/Proj) //wrapper - if (!enclosed && occupant && !silicon_pilot && !Proj.force_hit && (Proj.def_zone == BODY_ZONE_HEAD || Proj.def_zone == BODY_ZONE_CHEST)) //allows bullets to hit the pilot of open-canopy mechs - occupant.bullet_act(Proj) //If the sides are open, the occupant can be hit - return BULLET_ACT_HIT - log_message("Hit by projectile. Type: [Proj.name]([Proj.flag]).", LOG_MECHA, color="red") - . = ..() - -/obj/mecha/ex_act(severity, target) - log_message("Affected by explosion of severity: [severity].", LOG_MECHA, color="red") - if(prob(deflect_chance)) - severity++ - log_message("Armor saved, changing severity to [severity]", LOG_MECHA) - . = ..() - -/obj/mecha/contents_explosion(severity, target) - severity++ - for(var/X in equipment) - var/obj/item/mecha_parts/mecha_equipment/ME = X - ME.ex_act(severity,target) - for(var/Y in trackers) - var/obj/item/mecha_parts/mecha_tracking/MT = Y - MT.ex_act(severity, target) - if(occupant) - occupant.ex_act(severity,target) - -/obj/mecha/handle_atom_del(atom/A) - if(A == occupant) - occupant = null - icon_state = initial(icon_state)+"-open" - setDir(dir_in) - -/obj/mecha/emp_act(severity) - . = ..() - if (. & EMP_PROTECT_SELF) - return - if(get_charge()) - use_power((cell.charge/3)/(severity*2)) - take_damage(30 / severity, BURN, "energy", 1) - log_message("EMP detected", LOG_MECHA, color="red") - - if(istype(src, /obj/mecha/combat)) - mouse_pointer = 'icons/mecha/mecha_mouse-disable.dmi' - occupant?.update_mouse_pointer() - if(!equipment_disabled && occupant) //prevent spamming this message with back-to-back EMPs - to_chat(occupant, "Error -- Connection to equipment control unit has been lost.
          ") - addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/mecha, restore_equipment)), 3 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) - equipment_disabled = 1 - -/obj/mecha/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature>max_temperature) - log_message("Exposed to dangerous temperature.", LOG_MECHA, color="red") - take_damage(5, BURN, 0, 1) - -/obj/mecha/attackby(obj/item/W as obj, mob/user as mob, params) - - if(istype(W, /obj/item/mmi)) - if(mmi_move_inside(W,user)) - to_chat(user, "[src]-[W] interface initialized successfully.") - else - to_chat(user, "[src]-[W] interface initialization failed.") - return - - if(istype(W, /obj/item/mecha_ammo)) - ammo_resupply(W, user) - return - - if(W.GetID()) - if(add_req_access || maint_access) - if(internals_access_allowed(user)) - var/obj/item/card/id/id_card - if(istype(W, /obj/item/card/id)) - id_card = W - else - var/obj/item/pda/pda = W - id_card = pda.id - output_maintenance_dialog(id_card, user) - return - to_chat(user, "Invalid ID: Access denied.") - return - to_chat(user, "Maintenance protocols disabled by operator.") - return - - if(istype(W, /obj/item/stock_parts/cell)) - if(construction_state == MECHA_OPEN_HATCH) - if(!cell) - if(!user.transferItemToLoc(W, src, silent = FALSE)) - return - var/obj/item/stock_parts/cell/C = W - to_chat(user, "I install the power cell.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - cell = C - log_message("Powercell installed", LOG_MECHA) - else - to_chat(user, "There's already a power cell installed!") - return - - if(istype(W, /obj/item/stock_parts/scanning_module)) - if(construction_state == MECHA_OPEN_HATCH) - if(!scanmod) - if(!user.transferItemToLoc(W, src)) - return - to_chat(user, "I install the scanning module.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - scanmod = W - log_message("[W] installed", LOG_MECHA) - update_part_values() - else - to_chat(user, "There's already a scanning module installed!") - return - - if(istype(W, /obj/item/stock_parts/capacitor)) - if(construction_state == MECHA_OPEN_HATCH) - if(!capacitor) - if(!user.transferItemToLoc(W, src)) - return - to_chat(user, "I install the capacitor.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - capacitor = W - log_message("[W] installed", LOG_MECHA) - update_part_values() - else - to_chat(user, "There's already a capacitor installed!") - return - - if(istype(W, /obj/item/stack/cable_coil)) - if(construction_state == MECHA_OPEN_HATCH && (internal_damage & MECHA_INT_SHORT_CIRCUIT)) - var/obj/item/stack/cable_coil/CC = W - if(CC.use(2)) - clearInternalDamage(MECHA_INT_SHORT_CIRCUIT) - to_chat(user, "I replace the fused wires.") - else - to_chat(user, "I need two lengths of cable to fix this mech!") - return - - if(istype(W, /obj/item/mecha_parts)) - var/obj/item/mecha_parts/P = W - P.try_attach_part(user, src) - return - log_message("Attacked by [W]. Attacker - [user]", LOG_MECHA) - return ..() - -/obj/mecha/wrench_act(mob/living/user, obj/item/I) - ..() - . = TRUE - if(construction_state == MECHA_SECURE_BOLTS) - construction_state = MECHA_LOOSE_BOLTS - to_chat(user, "I undo the securing bolts.") - return - if(construction_state == MECHA_LOOSE_BOLTS) - construction_state = MECHA_SECURE_BOLTS - to_chat(user, "I tighten the securing bolts.") - -/obj/mecha/crowbar_act(mob/living/user, obj/item/I) - ..() - . = TRUE - if(construction_state == MECHA_LOOSE_BOLTS) - construction_state = MECHA_OPEN_HATCH - to_chat(user, "I open the hatch to the power unit.") - return - if(construction_state == MECHA_OPEN_HATCH) - construction_state = MECHA_LOOSE_BOLTS - to_chat(user, "I close the hatch to the power unit.") - -/obj/mecha/screwdriver_act(mob/living/user, obj/item/I) - ..() - . = TRUE - if(internal_damage & MECHA_INT_TEMP_CONTROL) - clearInternalDamage(MECHA_INT_TEMP_CONTROL) - to_chat(user, "I repair the damaged temperature controller.") - return - -/obj/mecha/welder_act(mob/living/user, obj/item/W) - . = ..() - if(user.used_intent.type == INTENT_HARM) - return - . = TRUE - if(internal_damage & MECHA_INT_TANK_BREACH) - if(!W.use_tool(src, user, 0, volume=50, amount=1)) - return - clearInternalDamage(MECHA_INT_TANK_BREACH) - to_chat(user, "I repair the damaged gas tank.") - return - if(obj_integrity < max_integrity) - if(!W.use_tool(src, user, 0, volume=50, amount=1)) - return - user.visible_message("[user] repairs some damage to [name].", "I repair some damage to [src].") - obj_integrity += min(10, max_integrity-obj_integrity) - if(obj_integrity == max_integrity) - to_chat(user, "It looks to be fully repaired now.") - return - to_chat(user, "The [name] is at full integrity!") - -/obj/mecha/proc/mech_toxin_damage(mob/living/target) - playsound(src, 'sound/blank.ogg', 50, TRUE) - if(target.reagents) - if(target.reagents.get_reagent_amount(/datum/reagent/cryptobiolin) + force < force*2) - target.reagents.add_reagent(/datum/reagent/cryptobiolin, force/2) - if(target.reagents.get_reagent_amount(/datum/reagent/toxin) + force < force*2) - target.reagents.add_reagent(/datum/reagent/toxin, force/2.5) - - -/obj/mecha/mech_melee_attack(obj/mecha/M) - if(!has_charge(melee_energy_drain)) - return 0 - use_power(melee_energy_drain) - if(M.damtype == BRUTE || M.damtype == BURN) - log_combat(M.occupant, src, "attacked", M, "(INTENT: [uppertext(M.occupant.used_intent)]) (DAMTYPE: [uppertext(M.damtype)])") - . = ..() - -/obj/mecha/proc/full_repair(charge_cell) - obj_integrity = max_integrity - if(cell && charge_cell) - cell.charge = cell.maxcharge - if(internal_damage & MECHA_INT_FIRE) - clearInternalDamage(MECHA_INT_FIRE) - if(internal_damage & MECHA_INT_TEMP_CONTROL) - clearInternalDamage(MECHA_INT_TEMP_CONTROL) - if(internal_damage & MECHA_INT_SHORT_CIRCUIT) - clearInternalDamage(MECHA_INT_SHORT_CIRCUIT) - if(internal_damage & MECHA_INT_TANK_BREACH) - clearInternalDamage(MECHA_INT_TANK_BREACH) - if(internal_damage & MECHA_INT_CONTROL_LOST) - clearInternalDamage(MECHA_INT_CONTROL_LOST) - -/obj/mecha/narsie_act() - emp_act(EMP_HEAVY) - -/obj/mecha/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect) - if(!no_effect) - if(selected) - used_item = selected - else if(!visual_effect_icon) - visual_effect_icon = ATTACK_EFFECT_SMASH - if(damtype == BURN) - visual_effect_icon = ATTACK_EFFECT_MECHFIRE - else if(damtype == TOX) - visual_effect_icon = ATTACK_EFFECT_MECHTOXIN - ..() - -/obj/mecha/obj_destruction() - if(wreckage) - var/mob/living/silicon/ai/AI - if(isAI(occupant)) - AI = occupant - occupant = null - var/obj/structure/mecha_wreckage/WR = new wreckage(loc, AI) - for(var/obj/item/mecha_parts/mecha_equipment/E in equipment) - if(E.salvageable && prob(30)) - WR.crowbar_salvage += E - E.detach(WR) //detaches from src into WR - E.equip_ready = 1 - else - E.detach(loc) - qdel(E) - if(cell) - WR.crowbar_salvage += cell - cell.forceMove(WR) - cell.charge = rand(0, cell.charge) - cell = null - if(internal_tank) - WR.crowbar_salvage += internal_tank - internal_tank.forceMove(WR) - cell = null - . = ..() diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm deleted file mode 100644 index 2f9c6c2f2a..0000000000 --- a/code/game/mecha/mecha_parts.dm +++ /dev/null @@ -1,349 +0,0 @@ -///////////////////////// -////// Mecha Parts ////// -///////////////////////// - -/obj/item/mecha_parts - name = "mecha part" - icon = 'icons/mecha/mech_construct.dmi' - icon_state = "blank" - w_class = WEIGHT_CLASS_GIGANTIC - flags_1 = CONDUCT_1 - -/obj/item/mecha_parts/proc/try_attach_part(mob/user, obj/mecha/M) //For attaching parts to a finished mech - if(!user.transferItemToLoc(src, M)) - to_chat(user, "\The [src] is stuck to your hand, you cannot put it in \the [M]!") - return FALSE - user.visible_message("[user] attaches [src] to [M].", "I attach [src] to [M].") - return TRUE - -/obj/item/mecha_parts/part/try_attach_part(mob/user, obj/mecha/M) - return - -/obj/item/mecha_parts/chassis - name = "Mecha Chassis" - icon_state = "backbone" - interaction_flags_item = NONE //Don't pick us up!! - var/construct_type - -/obj/item/mecha_parts/chassis/Initialize() - . = ..() - if(construct_type) - AddComponent(construct_type) - -/////////// Ripley - -/obj/item/mecha_parts/chassis/ripley - name = "\improper Ripley chassis" - construct_type = /datum/component/construction/unordered/mecha_chassis/ripley - -/obj/item/mecha_parts/part/ripley_torso - name = "\improper Ripley torso" - desc = "" - icon_state = "ripley_harness" - -/obj/item/mecha_parts/part/ripley_left_arm - name = "\improper Ripley left arm" - desc = "" - icon_state = "ripley_l_arm" - -/obj/item/mecha_parts/part/ripley_right_arm - name = "\improper Ripley right arm" - desc = "" - icon_state = "ripley_r_arm" - -/obj/item/mecha_parts/part/ripley_left_leg - name = "\improper Ripley left leg" - desc = "" - icon_state = "ripley_l_leg" - -/obj/item/mecha_parts/part/ripley_right_leg - name = "\improper Ripley right leg" - desc = "" - icon_state = "ripley_r_leg" - -///////// Odysseus - -/obj/item/mecha_parts/chassis/odysseus - name = "\improper Odysseus chassis" - construct_type = /datum/component/construction/unordered/mecha_chassis/odysseus - -/obj/item/mecha_parts/part/odysseus_head - name = "\improper Odysseus head" - desc = "" - icon_state = "odysseus_head" - -/obj/item/mecha_parts/part/odysseus_torso - name = "\improper Odysseus torso" - desc="A torso part of Odysseus. Contains power unit, processing core and life support systems along with an attachment port for a mounted sleeper." - icon_state = "odysseus_torso" - -/obj/item/mecha_parts/part/odysseus_left_arm - name = "\improper Odysseus left arm" - desc = "" - icon_state = "odysseus_l_arm" - -/obj/item/mecha_parts/part/odysseus_right_arm - name = "\improper Odysseus right arm" - desc = "" - icon_state = "odysseus_r_arm" - -/obj/item/mecha_parts/part/odysseus_left_leg - name = "\improper Odysseus left leg" - desc = "" - icon_state = "odysseus_l_leg" - -/obj/item/mecha_parts/part/odysseus_right_leg - name = "\improper Odysseus right leg" - desc = "" - icon_state = "odysseus_r_leg" - -///////// Gygax - -/obj/item/mecha_parts/chassis/gygax - name = "\improper Gygax chassis" - construct_type = /datum/component/construction/unordered/mecha_chassis/gygax - -/obj/item/mecha_parts/part/gygax_torso - name = "\improper Gygax torso" - desc = "" - icon_state = "gygax_harness" - -/obj/item/mecha_parts/part/gygax_head - name = "\improper Gygax head" - desc = "" - icon_state = "gygax_head" - -/obj/item/mecha_parts/part/gygax_left_arm - name = "\improper Gygax left arm" - desc = "" - icon_state = "gygax_l_arm" - -/obj/item/mecha_parts/part/gygax_right_arm - name = "\improper Gygax right arm" - desc = "" - icon_state = "gygax_r_arm" - -/obj/item/mecha_parts/part/gygax_left_leg - name = "\improper Gygax left leg" - desc = "" - icon_state = "gygax_l_leg" - -/obj/item/mecha_parts/part/gygax_right_leg - name = "\improper Gygax right leg" - desc = "" - icon_state = "gygax_r_leg" - -/obj/item/mecha_parts/part/gygax_armor - gender = PLURAL - name = "\improper Gygax armor plates" - desc = "" - icon_state = "gygax_armor" - - -//////////// Durand - -/obj/item/mecha_parts/chassis/durand - name = "\improper Durand chassis" - construct_type = /datum/component/construction/unordered/mecha_chassis/durand - -/obj/item/mecha_parts/part/durand_torso - name = "\improper Durand torso" - desc = "" - icon_state = "durand_harness" - -/obj/item/mecha_parts/part/durand_head - name = "\improper Durand head" - desc = "" - icon_state = "durand_head" - -/obj/item/mecha_parts/part/durand_left_arm - name = "\improper Durand left arm" - desc = "" - icon_state = "durand_l_arm" - -/obj/item/mecha_parts/part/durand_right_arm - name = "\improper Durand right arm" - desc = "" - icon_state = "durand_r_arm" - -/obj/item/mecha_parts/part/durand_left_leg - name = "\improper Durand left leg" - desc = "" - icon_state = "durand_l_leg" - -/obj/item/mecha_parts/part/durand_right_leg - name = "\improper Durand right leg" - desc = "" - icon_state = "durand_r_leg" - -/obj/item/mecha_parts/part/durand_armor - gender = PLURAL - name = "\improper Durand armor plates" - desc = "" - icon_state = "durand_armor" - -////////// Firefighter - -/obj/item/mecha_parts/chassis/firefighter - name = "\improper Firefighter chassis" - construct_type = /datum/component/construction/unordered/mecha_chassis/firefighter - - -////////// HONK - -/obj/item/mecha_parts/chassis/honker - name = "\improper H.O.N.K chassis" - construct_type = /datum/component/construction/unordered/mecha_chassis/honker - -/obj/item/mecha_parts/part/honker_torso - name = "\improper H.O.N.K torso" - desc = "" - icon_state = "honker_harness" - -/obj/item/mecha_parts/part/honker_head - name = "\improper H.O.N.K head" - desc = "" - icon_state = "honker_head" - -/obj/item/mecha_parts/part/honker_left_arm - name = "\improper H.O.N.K left arm" - desc = "" - icon_state = "honker_l_arm" - -/obj/item/mecha_parts/part/honker_right_arm - name = "\improper H.O.N.K right arm" - desc = "" - icon_state = "honker_r_arm" - -/obj/item/mecha_parts/part/honker_left_leg - name = "\improper H.O.N.K left leg" - desc = "" - icon_state = "honker_l_leg" - -/obj/item/mecha_parts/part/honker_right_leg - name = "\improper H.O.N.K right leg" - desc = "" - icon_state = "honker_r_leg" - - -////////// Phazon - -/obj/item/mecha_parts/chassis/phazon - name = "\improper Phazon chassis" - construct_type = /datum/component/construction/unordered/mecha_chassis/phazon - -/obj/item/mecha_parts/part/phazon_torso - name="\improper Phazon torso" - desc="A Phazon torso part. The socket for the bluespace core that powers the exosuit's unique phase drives is located in the middle." - icon_state = "phazon_harness" - -/obj/item/mecha_parts/part/phazon_head - name="\improper Phazon head" - desc="A Phazon head. Its sensors are carefully calibrated to provide vision and data even when the exosuit is phasing." - icon_state = "phazon_head" - -/obj/item/mecha_parts/part/phazon_left_arm - name="\improper Phazon left arm" - desc="A Phazon left arm. Several microtool arrays are located under the armor plating, which can be adjusted to the situation at hand." - icon_state = "phazon_l_arm" - -/obj/item/mecha_parts/part/phazon_right_arm - name="\improper Phazon right arm" - desc="A Phazon right arm. Several microtool arrays are located under the armor plating, which can be adjusted to the situation at hand." - icon_state = "phazon_r_arm" - -/obj/item/mecha_parts/part/phazon_left_leg - name="\improper Phazon left leg" - desc="A Phazon left leg. It contains the unique phase drives that allow the exosuit to phase through solid matter when engaged." - icon_state = "phazon_l_leg" - -/obj/item/mecha_parts/part/phazon_right_leg - name="\improper Phazon right leg" - desc="A Phazon right leg. It contains the unique phase drives that allow the exosuit to phase through solid matter when engaged." - icon_state = "phazon_r_leg" - -/obj/item/mecha_parts/part/phazon_armor - name="Phazon armor" - desc="Phazon armor plates. They are layered with plasma to protect the pilot from the stress of phasing and have unusual properties." - icon_state = "phazon_armor" - - -///////// Circuitboards - -/obj/item/circuitboard/mecha - name = "exosuit circuit board" - icon = 'icons/obj/module.dmi' - icon_state = "std_mod" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - flags_1 = CONDUCT_1 - force = 5 - w_class = WEIGHT_CLASS_SMALL - throwforce = 0 - throw_speed = 1 - throw_range = 7 - -/obj/item/circuitboard/mecha/ripley/peripherals - name = "Ripley Peripherals Control module (Exosuit Board)" - icon_state = "mcontroller" - -/obj/item/circuitboard/mecha/ripley/main - name = "Ripley Central Control module (Exosuit Board)" - icon_state = "mainboard" - - -/obj/item/circuitboard/mecha/gygax/peripherals - name = "Gygax Peripherals Control module (Exosuit Board)" - icon_state = "mcontroller" - -/obj/item/circuitboard/mecha/gygax/targeting - name = "Gygax Weapon Control and Targeting module (Exosuit Board)" - icon_state = "mcontroller" - -/obj/item/circuitboard/mecha/gygax/main - name = "Gygax Central Control module (Exosuit Board)" - icon_state = "mainboard" - -/obj/item/circuitboard/mecha/durand/peripherals - name = "Durand Peripherals Control module (Exosuit Board)" - icon_state = "mcontroller" - -/obj/item/circuitboard/mecha/durand/targeting - name = "Durand Weapon Control and Targeting module (Exosuit Board)" - icon_state = "mcontroller" - -/obj/item/circuitboard/mecha/durand/main - name = "Durand Central Control module (Exosuit Board)" - icon_state = "mainboard" - -/obj/item/circuitboard/mecha/honker/peripherals - name = "H.O.N.K Peripherals Control module (Exosuit Board)" - icon_state = "mcontroller" - -/obj/item/circuitboard/mecha/honker/targeting - name = "H.O.N.K Weapon Control and Targeting module (Exosuit Board)" - icon_state = "mcontroller" - -/obj/item/circuitboard/mecha/honker/main - name = "H.O.N.K Central Control module (Exosuit Board)" - icon_state = "mainboard" - -/obj/item/circuitboard/mecha/odysseus/peripherals - name = "Odysseus Peripherals Control module (Exosuit Board)" - icon_state = "mcontroller" - -/obj/item/circuitboard/mecha/odysseus/main - name = "Odysseus Central Control module (Exosuit Board)" - icon_state = "mainboard" - -/obj/item/circuitboard/mecha/phazon/peripherals - name = "Phazon Peripherals Control module (Exosuit Board)" - icon_state = "mcontroller" - -/obj/item/circuitboard/mecha/phazon/targeting - name = "Phazon Weapon Control and Targeting module (Exosuit Board)" - icon_state = "mcontroller" - -/obj/item/circuitboard/mecha/phazon/main - name = "Phazon Central Control module (Exosuit Board)" diff --git a/code/game/mecha/mecha_topic.dm b/code/game/mecha/mecha_topic.dm deleted file mode 100644 index 0b234d23b7..0000000000 --- a/code/game/mecha/mecha_topic.dm +++ /dev/null @@ -1,419 +0,0 @@ - -//////////////////////////////////// -///// Rendering stats window /////// -//////////////////////////////////// - -/obj/mecha/proc/get_stats_html() - . = {" - [name] data - - - - -
          - [get_stats_part()] -
-
- [get_equipment_list()] -
-
-
- [get_commands()] -
-
- [get_equipment_menu()] -
- - "} - -///Returns the status of the mech. -/obj/mecha/proc/get_stats_part() - var/integrity = obj_integrity/max_integrity*100 - var/cell_charge = get_charge() - var/datum/gas_mixture/int_tank_air = 0 - var/tank_pressure = 0 - var/tank_temperature = 0 - var/cabin_pressure = 0 - if (internal_tank) - int_tank_air = internal_tank.return_air() - tank_pressure = internal_tank ? round(int_tank_air.return_pressure(),0.01) : "None" - tank_temperature = internal_tank ? int_tank_air.temperature : "Unknown" - cabin_pressure = round(return_pressure(),0.01) - . = {"[report_internal_damage()] - [integrity<30?"DAMAGE LEVEL CRITICAL
":null] - Integrity: [integrity]%
- Powercell charge: [isnull(cell_charge)?"No powercell installed":"[cell.percent()]%"]
- Air source: [internal_tank?"[use_internal_tank?"Internal Airtank":"Environment"]":"Environment"]
- Airtank pressure: [internal_tank?"[tank_pressure]kPa":"N/A"]
- Airtank temperature: [internal_tank?"[tank_temperature]°K|[tank_temperature - T0C]°C":"N/A"]
- Cabin pressure: [internal_tank?"[cabin_pressure>WARNING_HIGH_PRESSURE ? "[cabin_pressure]": cabin_pressure]kPa":"N/A"]
- Cabin temperature: [internal_tank?"[return_temperature()]°K|[return_temperature() - T0C]°C":"N/A"]
- [dna_lock?"DNA-locked:
[dna_lock] \[Reset\]
":""]
"} - . += "[get_actions()]
" - -///Returns HTML for mech actions. Ideally, this proc would be empty for the base mecha. Segmented for easy refactoring. -/obj/mecha/proc/get_actions() - . = "" - . += "[defense_action.owner ? "Defense Mode: [defense_mode ? "Enabled" : "Disabled"]
" : ""]" - . += "[overload_action.owner ? "Leg Actuators Overload: [leg_overload_mode ? "Enabled" : "Disabled"]
" : ""]" - . += "[smoke_action.owner ? "Smoke: [smoke]
" : ""]" - . += "[zoom_action.owner ? "Zoom: [zoom_mode ? "Enabled" : "Disabled"]
" : ""]" - . += "[switch_damtype_action.owner ? "Damtype: [damtype]
" : ""]" - . += "[phasing_action.owner ? "Phase Modulator: [phasing ? "Enabled" : "Disabled"]
" : ""]" - -///HTML for internal damage. -/obj/mecha/proc/report_internal_damage() - . = "" - var/list/dam_reports = list( - "[MECHA_INT_FIRE]" = "INTERNAL FIRE", - "[MECHA_INT_TEMP_CONTROL]" = "LIFE SUPPORT SYSTEM MALFUNCTION", - "[MECHA_INT_TANK_BREACH]" = "GAS TANK BREACH", - "[MECHA_INT_CONTROL_LOST]" = "COORDINATION SYSTEM CALIBRATION FAILURE - Recalibrate", - "[MECHA_INT_SHORT_CIRCUIT]" = "SHORT CIRCUIT" - ) - for(var/tflag in dam_reports) - var/intdamflag = text2num(tflag) - if(internal_damage & intdamflag) - . += dam_reports[tflag] - . += "
" - if(return_pressure() > WARNING_HIGH_PRESSURE) - . += "DANGEROUSLY HIGH CABIN PRESSURE
" - -///HTML for list of equipment. -/obj/mecha/proc/get_equipment_list() //outputs mecha equipment list in html - if(!equipment.len) - return - . = "Equipment:
" - for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment) - . += "
[MT.get_equip_info()]
" - . += "
" - -///HTML for commands. -/obj/mecha/proc/get_commands() - . = {" -
-
Electronics
- -
- "} - - -/obj/mecha/proc/get_equipment_menu() //outputs mecha html equipment menu - . = {" -
-
Equipment
- -
"} - -/obj/mecha/proc/output_access_dialog(obj/item/card/id/id_card, mob/user) - if(!id_card || !user) - return - . = {" - - - - -

Following keycodes are present in this system:

"} - for(var/a in operation_req_access) - . += "[get_access_desc(a)] - Delete
" - . += "

Following keycodes were detected on portable device:

" - for(var/a in id_card.access) - if(a in operation_req_access) - continue - var/a_name = get_access_desc(a) - if(!a_name) - continue //there's some strange access without a name - . += "[a_name] - Add
" - . +={"
Lock ID panel
- (Warning! The ID upload panel can be unlocked only through Exosuit Interface.) - - "} - user << browse(., "window=exosuit_add_access") - onclose(user, "exosuit_add_access") - - -/obj/mecha/proc/output_maintenance_dialog(obj/item/card/id/id_card,mob/user) - if(!id_card || !user) - return - . = {" - - - - - [add_req_access?"Edit operation keycodes":null] - [maint_access?"[(construction_state > MECHA_LOCKED) ? "Terminate" : "Initiate"] maintenance protocol":null] - [(construction_state == MECHA_OPEN_HATCH) ?"--------------------
":null] - [(construction_state == MECHA_OPEN_HATCH) ?"[cell?"Drop power cell":"No cell installed
"]":null] - [(construction_state == MECHA_OPEN_HATCH) ?"[scanmod?"Drop scanning module":"No scanning module installed
"]":null] - [(construction_state == MECHA_OPEN_HATCH) ?"[capacitor?"Drop capacitor":"No capacitor installed
"]":null] - [(construction_state == MECHA_OPEN_HATCH) ?"--------------------
":null] - [(construction_state > MECHA_LOCKED) ?"Set Cabin Air Pressure":null] - - "} - user << browse(., "window=exosuit_maint_console") - onclose(user, "exosuit_maint_console") - - - - -///////////////// -///// Topic ///// -///////////////// - -/obj/mecha/Topic(href, href_list) - ..() - - if(!usr) - return - - if(href_list["close"]) - return - - if(usr.incapacitated()) - return - - if(in_range(src, usr)) - //Start of ID requirements. - if(href_list["id_card"]) - var/obj/item/card/id/id_card - id_card = locate(href_list["id_card"]) - if(!istype(id_card)) - return - - if(href_list["req_access"]) - if(!add_req_access) - return - output_access_dialog(id_card,usr) - return - - if(href_list["maint_access"]) - if(!maint_access) - return - if(construction_state == MECHA_LOCKED) - construction_state = MECHA_SECURE_BOLTS - to_chat(usr, "The securing bolts are now exposed.") - else if(construction_state == MECHA_SECURE_BOLTS) - construction_state = MECHA_LOCKED - to_chat(usr, "The securing bolts are now hidden.") - output_maintenance_dialog(id_card,usr) - return - if(href_list["drop_cell"]) - if(construction_state == MECHA_OPEN_HATCH) - cell.forceMove(get_turf(src)) - cell = null - output_maintenance_dialog(id_card,usr) - return - if(href_list["drop_scanmod"]) - if(construction_state == MECHA_OPEN_HATCH) - scanmod.forceMove(get_turf(src)) - scanmod = null - output_maintenance_dialog(id_card,usr) - return - if(href_list["drop_cap"]) - if(construction_state == MECHA_OPEN_HATCH) - capacitor.forceMove(get_turf(src)) - capacitor = null - output_maintenance_dialog(id_card,usr) - return - - if(href_list["add_req_access"]) - if(!add_req_access) - return - operation_req_access += text2num(href_list["add_req_access"]) - output_access_dialog(id_card,usr) - return - - if(href_list["del_req_access"]) - if(!add_req_access) - return - operation_req_access -= text2num(href_list["del_req_access"]) - output_access_dialog(id_card, usr) - return - return //Here end everything requiring an ID. - - //Here ID access stuff goes to die. - if(href_list["finish_req_access"]) - add_req_access = 0 - usr << browse(null,"window=exosuit_add_access") - return - - //Set pressure. - if(href_list["set_internal_tank_valve"] && construction_state) - var/new_pressure = input(usr,"Input new output pressure","Pressure setting",internal_tank_valve) as num|null - if(isnull(new_pressure) || usr.incapacitated() || !construction_state) - return - internal_tank_valve = new_pressure - to_chat(usr, "The internal pressure valve has been set to [internal_tank_valve]kPa.") - return - - //Start of all internal topic stuff. - if(usr != occupant) - return - - if(href_list["update_content"]) - send_byjax(usr,"exosuit.browser","content", get_stats_part()) - return - - //Selects the mech equipment/weapon. - if(href_list["select_equip"]) - var/obj/item/mecha_parts/mecha_equipment/equip = locate(href_list["select_equip"]) in src - if(!equip || !equip.selectable) - return - selected = equip - occupant_message("I switch to [equip].") - visible_message("[src] raises [equip].") - send_byjax(usr, "exosuit.browser", "eq_list", get_equipment_list()) - return - - //Toggles radio broadcasting - if(href_list["rmictoggle"]) - radio.broadcasting = !radio.broadcasting - send_byjax(usr,"exosuit.browser","rmicstate",(radio.broadcasting?"Engaged":"Disengaged")) - return - - //Toggles radio listening - if(href_list["rspktoggle"]) - radio.listening = !radio.listening - send_byjax(usr,"exosuit.browser","rspkstate",(radio.listening?"Engaged":"Disengaged")) - return - - //Changes radio freqency. - if(href_list["rfreq"]) - var/new_frequency = radio.frequency + text2num(href_list["rfreq"]) - radio.set_frequency(sanitize_frequency(new_frequency, radio.freerange)) - send_byjax(usr,"exosuit.browser","rfreq","[format_frequency(radio.frequency)]") - return - - //Changes the exosuit name. - if(href_list["change_name"]) - var/userinput = input(usr, "Choose a new exosuit name.", "Rename exosuit", "") as null|text - if(usr != occupant || usr.incapacitated()) - return - if(!isnull(userinput)) - var/newname = copytext(sanitize_name(userinput),1,MAX_NAME_LEN) - name = newname ? newname : initial(name) - return - - //Toggles ID upload. - if (href_list["toggle_id_upload"]) - add_req_access = !add_req_access - send_byjax(usr,"exosuit.browser","t_id_upload","[add_req_access?"L":"Unl"]ock ID upload panel") - return - - //Toggles main access. - if(href_list["toggle_maint_access"]) - if(construction_state) - occupant_message("Maintenance protocols in effect") - return - maint_access = !maint_access - send_byjax(usr,"exosuit.browser","t_maint_access","[maint_access?"Forbid":"Permit"] maintenance protocols") - return - - //Toggles connection port. - if (href_list["toggle_port_connection"]) - if(internal_tank.connected_port) - if(internal_tank.disconnect()) - occupant_message("Disconnected from the air system port.") - log_message("Disconnected from gas port.", LOG_MECHA) - else - occupant_message("Unable to disconnect from the air system port!") - return - else - var/obj/machinery/atmospherics/components/unary/portables_connector/possible_port = locate() in loc - if(internal_tank.connect(possible_port)) - occupant_message("Connected to the air system port.") - log_message("Connected to gas port.", LOG_MECHA) - else - occupant_message("Unable to connect with air system port!") - return - send_byjax(occupant,"exosuit.browser","t_port_connection","[internal_tank.connected_port?"Disconnect from":"Connect to"] gas port") - return - - //Turns on the DNA lock - if(href_list["dna_lock"]) - if(!iscarbon(occupant) || !occupant.dna) - occupant_message("I feel a prick as the needle takes your DNA sample.") - return - dna_lock = occupant.dna.unique_enzymes - occupant_message("I feel a prick as the needle takes your DNA sample.") - return - - //Resets the DNA lock - if(href_list["reset_dna"]) - dna_lock = null - return - - //Repairs internal damage - if(href_list["repair_int_control_lost"]) - occupant_message("Recalibrating coordination system...") - log_message("Recalibration of coordination system started.", LOG_MECHA) - addtimer(CALLBACK(src, PROC_REF(stationary_repair), loc), 100, TIMER_UNIQUE) - -///Repairs internal damage if the mech hasn't moved. -/obj/mecha/proc/stationary_repair(location) - if(location == loc) - clearInternalDamage(MECHA_INT_CONTROL_LOST) - occupant_message("Recalibration successful.") - log_message("Recalibration of coordination system finished with 0 errors.", LOG_MECHA) - else - occupant_message("Recalibration failed!") - log_message("Recalibration of coordination system failed with 1 error.", LOG_MECHA, color="red") diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm deleted file mode 100644 index 29a1e3f75a..0000000000 --- a/code/game/mecha/mecha_wreckage.dm +++ /dev/null @@ -1,213 +0,0 @@ -/////////////////////////////////// -//////// Mecha wreckage //////// -/////////////////////////////////// - - -/obj/structure/mecha_wreckage - name = "exosuit wreckage" - desc = "" - icon = 'icons/mecha/mecha.dmi' - density = TRUE - anchored = FALSE - opacity = 0 - var/list/welder_salvage = list(/obj/item/stack/sheet/plasteel, /obj/item/stack/sheet/metal, /obj/item/stack/rods) - var/salvage_num = 5 - var/list/crowbar_salvage = list() - var/wires_removed = FALSE - var/mob/living/silicon/ai/AI //AIs to be salvaged - var/list/parts - -/obj/structure/mecha_wreckage/Initialize(mapload, mob/living/silicon/ai/AI_pilot) - . = ..() - if(parts) - for(var/i in 1 to 2) - if(!parts.len) - break - if(prob(60)) - continue - var/part = pick(parts) - welder_salvage += part - parts = null - if(!AI_pilot) //Type-checking for this is already done in mecha/Destroy() - return - AI = AI_pilot - AI.apply_damage(150, BURN) //Give the AI a bit of damage from the "shock" of being suddenly shut down - AI.death() //The damage is not enough to kill the AI, but to be 'corrupted files' in need of repair. - AI.forceMove(src) //Put the dead AI inside the wreckage for recovery - add_overlay(mutable_appearance('icons/obj/projectiles.dmi', "green_laser")) //Overlay for the recovery beacon - AI.controlled_mech = null - AI.remote_control = null - -/obj/structure/mecha_wreckage/Destroy() - if(AI) - QDEL_NULL(AI) - QDEL_LIST(crowbar_salvage) - return ..() - -/obj/structure/mecha_wreckage/examine(mob/user) - . = ..() - if(!AI) - return - . += "The AI recovery beacon is active." - -/obj/structure/mecha_wreckage/welder_act(mob/living/user, obj/item/I) - ..() - . = TRUE - if(salvage_num <= 0 || !length(welder_salvage)) - to_chat(user, "I don't see anything that can be cut with [I]!") - return - if(!I.use_tool(src, user, 0, volume=50)) - return - if(prob(30)) - to_chat(user, "I fail to salvage anything valuable from [src]!") - return - var/type = pick(welder_salvage) - var/N = new type(get_turf(user)) - user.visible_message("[user] cuts [N] from [src].", "I cut [N] from [src].") - if(!istype(N, /obj/item/stack)) - welder_salvage -= type - salvage_num-- - -/obj/structure/mecha_wreckage/wirecutter_act(mob/living/user, obj/item/I) - ..() - . = TRUE - if(wires_removed) - to_chat(user, "I don't see anything that can be cut with [I]!") - return - var/N = new /obj/item/stack/cable_coil(get_turf(user), rand(1,3)) - user.visible_message("[user] cuts [N] from [src].", "I cut [N] from [src].") - wires_removed = TRUE - -/obj/structure/mecha_wreckage/crowbar_act(mob/living/user, obj/item/I) - ..() - . = TRUE - if(crowbar_salvage.len) - var/obj/S = pick(crowbar_salvage) - S.forceMove(user.drop_location()) - user.visible_message("[user] pries [S] from [src].", "I pry [S] from [src].") - crowbar_salvage -= S - return - to_chat(user, "I don't see anything that can be cut with [I]!") - -/obj/structure/mecha_wreckage/transfer_ai(interaction, mob/user, null, obj/item/aicard/card) - if(!..()) - return - -//Proc called on the wreck by the AI card. - if(interaction != AI_TRANS_TO_CARD) //AIs can only be transferred in one direction, from the wreck to the card. - return - if(!AI) //No AI in the wreck - to_chat(user, "No AI backups found.") - return - cut_overlays() //Remove the recovery beacon overlay - AI.forceMove(card) //Move the dead AI to the card. - card.AI = AI - if(AI.client) //AI player is still in the dead AI and is connected - to_chat(AI, "The remains of your file system have been recovered on a mobile storage device.") - else //Give the AI a heads-up that it is probably going to get fixed. - AI.notify_ghost_cloning("You have been recovered from the wreckage!", source = card) - to_chat(user, "Backup files recovered: [AI.name] ([rand(1000,9999)].exe) salvaged from [name] and stored within local memory.") - AI = null - -/obj/structure/mecha_wreckage/gygax - name = "\improper Gygax wreckage" - icon_state = "gygax-broken" - parts = list( - /obj/item/mecha_parts/part/gygax_torso, - /obj/item/mecha_parts/part/gygax_head, - /obj/item/mecha_parts/part/gygax_left_arm, - /obj/item/mecha_parts/part/gygax_right_arm, - /obj/item/mecha_parts/part/gygax_left_leg, - /obj/item/mecha_parts/part/gygax_right_leg - ) - -/obj/structure/mecha_wreckage/gygax/dark - name = "\improper Dark Gygax wreckage" - icon_state = "darkgygax-broken" - -/obj/structure/mecha_wreckage/marauder - name = "\improper Marauder wreckage" - icon_state = "marauder-broken" - -/obj/structure/mecha_wreckage/mauler - name = "\improper Mauler wreckage" - icon_state = "mauler-broken" - desc = "" - -/obj/structure/mecha_wreckage/seraph - name = "\improper Seraph wreckage" - icon_state = "seraph-broken" - -/obj/structure/mecha_wreckage/reticence - name = "\improper Reticence wreckage" - icon_state = "reticence-broken" - color = "#87878715" - desc = "" - -/obj/structure/mecha_wreckage/ripley - name = "\improper Ripley wreckage" - icon_state = "ripley-broken" - parts = list(/obj/item/mecha_parts/part/ripley_torso, - /obj/item/mecha_parts/part/ripley_left_arm, - /obj/item/mecha_parts/part/ripley_right_arm, - /obj/item/mecha_parts/part/ripley_left_leg, - /obj/item/mecha_parts/part/ripley_right_leg) - -/obj/structure/mecha_wreckage/ripley/mkii - name = "\improper Ripley MK-II wreckage" - icon_state = "ripleymkii-broken" - -/obj/structure/mecha_wreckage/ripley/firefighter - name = "\improper Firefighter wreckage" - icon_state = "firefighter-broken" - parts = list(/obj/item/mecha_parts/part/ripley_torso, - /obj/item/mecha_parts/part/ripley_left_arm, - /obj/item/mecha_parts/part/ripley_right_arm, - /obj/item/mecha_parts/part/ripley_left_leg, - /obj/item/mecha_parts/part/ripley_right_leg, - /obj/item/clothing/suit/fire) - -/obj/structure/mecha_wreckage/ripley/deathripley - name = "\improper Death-Ripley wreckage" - icon_state = "deathripley-broken" - parts = null - -/obj/structure/mecha_wreckage/honker - name = "\improper H.O.N.K wreckage" - icon_state = "honker-broken" - desc = "" - parts = list( - /obj/item/mecha_parts/chassis/honker, - /obj/item/mecha_parts/part/honker_torso, - /obj/item/mecha_parts/part/honker_head, - /obj/item/mecha_parts/part/honker_left_arm, - /obj/item/mecha_parts/part/honker_right_arm, - /obj/item/mecha_parts/part/honker_left_leg, - /obj/item/mecha_parts/part/honker_right_leg) - -/obj/structure/mecha_wreckage/durand - name = "\improper Durand wreckage" - icon_state = "durand-broken" - parts = list( - /obj/item/mecha_parts/part/durand_torso, - /obj/item/mecha_parts/part/durand_head, - /obj/item/mecha_parts/part/durand_left_arm, - /obj/item/mecha_parts/part/durand_right_arm, - /obj/item/mecha_parts/part/durand_left_leg, - /obj/item/mecha_parts/part/durand_right_leg) - -/obj/structure/mecha_wreckage/phazon - name = "\improper Phazon wreckage" - icon_state = "phazon-broken" - - -/obj/structure/mecha_wreckage/odysseus - name = "\improper Odysseus wreckage" - icon_state = "odysseus-broken" - parts = list( - /obj/item/mecha_parts/part/odysseus_torso, - /obj/item/mecha_parts/part/odysseus_head, - /obj/item/mecha_parts/part/odysseus_left_arm, - /obj/item/mecha_parts/part/odysseus_right_arm, - /obj/item/mecha_parts/part/odysseus_left_leg, - /obj/item/mecha_parts/part/odysseus_right_leg) diff --git a/code/game/mecha/medical/medical.dm b/code/game/mecha/medical/medical.dm deleted file mode 100644 index 1541ff1b7c..0000000000 --- a/code/game/mecha/medical/medical.dm +++ /dev/null @@ -1,7 +0,0 @@ -/obj/mecha/medical - internals_req_access = list(ACCESS_MECH_SCIENCE, ACCESS_MECH_MEDICAL) - -/obj/mecha/medical/mechturn(direction) - . = ..() - if(!strafe && !occupant.client.keys_held["Alt"]) - mechstep(direction) //agile mechs get to move and turn in the same step diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm deleted file mode 100644 index 65e9f522b1..0000000000 --- a/code/game/mecha/medical/odysseus.dm +++ /dev/null @@ -1,31 +0,0 @@ -/obj/mecha/medical/odysseus - desc = "" - name = "\improper Odysseus" - icon_state = "odysseus" - step_in = 2 - max_temperature = 15000 - max_integrity = 120 - wreckage = /obj/structure/mecha_wreckage/odysseus - internal_damage_threshold = 35 - deflect_chance = 15 - step_energy_drain = 6 - -/obj/mecha/medical/odysseus/moved_inside(mob/living/carbon/human/H) - . = ..() - if(.) - var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] - hud.add_hud_to(H) - -/obj/mecha/medical/odysseus/go_out() - if(isliving(occupant)) - var/mob/living/L = occupant - var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] - hud.remove_hud_from(L) - ..() - -/obj/mecha/medical/odysseus/mmi_moved_inside(obj/item/mmi/mmi_as_oc, mob/user) - . = ..() - if(.) - var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] - var/mob/living/brain/B = mmi_as_oc.brainmob - hud.add_hud_to(B) diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm deleted file mode 100644 index cc69adc962..0000000000 --- a/code/game/mecha/working/ripley.dm +++ /dev/null @@ -1,232 +0,0 @@ -/obj/mecha/working/ripley - desc = "" - name = "\improper APLU MK-I \"Ripley\"" - icon_state = "ripley" - silicon_icon_state = "ripley-empty" - step_in = 1.5 //Move speed, lower is faster. - var/fast_pressure_step_in = 1.5 //step_in while in low pressure conditions - var/slow_pressure_step_in = 2.0 //step_in while in normal pressure conditions - max_temperature = 20000 - max_integrity = 200 - lights_power = 7 - deflect_chance = 15 - armor = list("melee" = 40, "bullet" = 20, "laser" = 10, "energy" = 20, "bomb" = 40, "bio" = 0, "rad" = 20, "fire" = 100, "acid" = 100) - max_equip = 6 - wreckage = /obj/structure/mecha_wreckage/ripley - internals_req_access = list(ACCESS_MECH_ENGINE, ACCESS_MECH_SCIENCE, ACCESS_MECH_MINING) - var/list/cargo = new - var/cargo_capacity = 15 - var/hides = 0 - enclosed = FALSE //Normal ripley has an open cockpit design - enter_delay = 10 //can enter in a quarter of the time of other mechs - exit_delay = 10 - opacity = FALSE //Ripley has a window - -/obj/mecha/working/ripley/Move() - . = ..() - if(.) - collect_ore() - update_pressure() - -/obj/mecha/working/ripley/proc/collect_ore() - if(locate(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) in equipment) - var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in cargo - if(ore_box) - for(var/obj/item/stack/ore/ore in range(1, src)) - if(ore.Adjacent(src) && ((get_dir(src, ore) & dir) || ore.loc == loc)) //we can reach it and it's in front of us? grab it! - ore.forceMove(ore_box) - -/obj/mecha/working/ripley/Destroy() - for(var/atom/movable/A in cargo) - A.forceMove(drop_location()) - step_rand(A) - cargo.Cut() - return ..() - -/obj/mecha/working/ripley/go_out() - ..() - update_icon() - -/obj/mecha/working/ripley/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() - -/obj/mecha/working/ripley/update_icon() - ..() - var/datum/component/armor_plate/C = GetComponent(/datum/component/armor_plate) - if (C.amount) - cut_overlays() - if(C.amount < 3) - add_overlay(occupant ? "ripley-g" : "ripley-g-open") - else - add_overlay(occupant ? "ripley-g-full" : "ripley-g-full-open") - -/obj/mecha/working/ripley/check_for_internal_damage(list/possible_int_damage,ignore_threshold=null) - if (!enclosed) - possible_int_damage -= (MECHA_INT_TEMP_CONTROL + MECHA_INT_TANK_BREACH) //if we don't even have an air tank, these two doesn't make a ton of sense. - . = ..() - - -/obj/mecha/working/ripley/Initialize() - . = ..() - AddComponent(/datum/component/armor_plate,3,/obj/item/stack/sheet/animalhide/goliath_hide,list("melee" = 10, "bullet" = 5, "laser" = 5)) - - -/obj/mecha/working/ripley/mkii - desc = "" - name = "\improper APLU MK-II \"Ripley\"" - icon_state = "ripleymkii" - fast_pressure_step_in = 2 //step_in while in low pressure conditions - slow_pressure_step_in = 4 //step_in while in normal pressure conditions - step_in = 4 - armor = list("melee" = 40, "bullet" = 20, "laser" = 10, "energy" = 20, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) - wreckage = /obj/structure/mecha_wreckage/ripley/mkii - enclosed = TRUE - enter_delay = 40 - silicon_icon_state = null - opacity = TRUE - -/obj/mecha/working/ripley/firefighter - desc = "" - name = "\improper APLU MK-III \"Firefighter\"" - icon_state = "firefighter" - max_temperature = 65000 - max_integrity = 250 - fast_pressure_step_in = 2 //step_in while in low pressure conditions - slow_pressure_step_in = 4 //step_in while in normal pressure conditions - step_in = 4 - resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - lights_power = 7 - armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 60, "bio" = 0, "rad" = 70, "fire" = 100, "acid" = 100) - max_equip = 5 // More armor, less tools - wreckage = /obj/structure/mecha_wreckage/ripley/firefighter - enclosed = TRUE - enter_delay = 40 - silicon_icon_state = null - opacity = TRUE - - -/obj/mecha/working/ripley/deathripley - desc = "" - name = "\improper DEATH-RIPLEY" - icon_state = "deathripley" - fast_pressure_step_in = 2 //step_in while in low pressure conditions - slow_pressure_step_in = 3 //step_in while in normal pressure conditions - step_in = 4 - lights_power = 7 - wreckage = /obj/structure/mecha_wreckage/ripley/deathripley - step_energy_drain = 0 - enclosed = TRUE - enter_delay = 40 - silicon_icon_state = null - opacity = TRUE - -/obj/mecha/working/ripley/deathripley/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill - ME.attach(src) - -/obj/mecha/working/ripley/deathripley/real - desc = "" - -/obj/mecha/working/ripley/deathripley/real/Initialize() - . = ..() - for(var/obj/item/mecha_parts/mecha_equipment/E in equipment) - E.detach() - qdel(E) - equipment.Cut() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/real - ME.attach(src) - -/obj/mecha/working/ripley/mining - desc = "" - name = "\improper APLU \"Miner\"" - obj_integrity = 75 //Low starting health - -/obj/mecha/working/ripley/mining/Initialize() - . = ..() - if(cell) - cell.charge = FLOOR(cell.charge * 0.25, 1) //Starts at very low charge - if(prob(70)) //Maybe add a drill - if(prob(15)) //Possible diamond drill... Feeling lucky? - var/obj/item/mecha_parts/mecha_equipment/drill/diamonddrill/D = new - D.attach(src) - else - var/obj/item/mecha_parts/mecha_equipment/drill/D = new - D.attach(src) - - else //Add plasma cutter if no drill - var/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/P = new - P.attach(src) - - //Add ore box to cargo - cargo.Add(new /obj/structure/ore_box(src)) - - //Attach hydraulic clamp - var/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/HC = new - HC.attach(src) - for(var/obj/item/mecha_parts/mecha_tracking/B in trackers)//Deletes the beacon so it can't be found easily - qdel(B) - - var/obj/item/mecha_parts/mecha_equipment/mining_scanner/scanner = new - scanner.attach(src) - -/obj/mecha/working/ripley/Exit(atom/movable/O) - if(O in cargo) - return 0 - return ..() - -/obj/mecha/working/ripley/Topic(href, href_list) - ..() - if(href_list["drop_from_cargo"]) - var/obj/O = locate(href_list["drop_from_cargo"]) in cargo - if(O) - occupant_message("I unload [O].") - O.forceMove(drop_location()) - cargo -= O - log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]", LOG_MECHA) - return - - -/obj/mecha/working/ripley/contents_explosion(severity, target) - for(var/X in cargo) - var/obj/O = X - if(prob(30/severity)) - cargo -= O - O.forceMove(drop_location()) - . = ..() - -/obj/mecha/working/ripley/get_stats_part() - var/output = ..() - output += "Cargo Compartment Contents:
" - if(cargo.len) - for(var/obj/O in cargo) - output += "Unload : [O]
" - else - output += "Nothing" - output += "
" - return output - -/obj/mecha/working/ripley/proc/update_pressure() - var/turf/T = get_turf(loc) - - if(lavaland_equipment_pressure_check(T)) - step_in = fast_pressure_step_in - for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in equipment) - drill.equip_cooldown = initial(drill.equip_cooldown)/2 - else - step_in = slow_pressure_step_in - for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in equipment) - drill.equip_cooldown = initial(drill.equip_cooldown) - -/obj/mecha/working/ripley/relay_container_resist(mob/living/user, obj/O) - to_chat(user, "I lean on the back of [O] and start pushing so it falls out of [src].") - if(do_after(user, 300, target = O)) - if(!user || user.stat != CONSCIOUS || user.loc != src || O.loc != src ) - return - to_chat(user, "I successfully pushed [O] out of [src]!") - O.forceMove(drop_location()) - cargo -= O - else - if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded. - to_chat(user, "I fail to push [O] out of [src]!") diff --git a/code/game/mecha/working/working.dm b/code/game/mecha/working/working.dm deleted file mode 100644 index 3e45148ef5..0000000000 --- a/code/game/mecha/working/working.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/mecha/working - internal_damage_threshold = 60 diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 87636c6700..5e053248d7 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -50,6 +50,14 @@ if((!can_buckle && !force) || M.buckled || (buckled_mobs.len >= max_buckled_mobs) || (buckle_requires_restraints && !M.restrained()) || M == src) return FALSE + + // This signal will check if the mob is mounting this atom to ride it. There are 3 possibilities for how this goes + // 1. This movable doesn't have a ridable element and can't be ridden, so nothing gets returned, so continue on + // 2. There's a ridable element but we failed to mount it for whatever reason (maybe it has no seats left, for example), so we cancel the buckling + // 3. There's a ridable element and we were successfully able to mount, so keep it going and continue on with buckling + if(SEND_SIGNAL(src, COMSIG_MOVABLE_PREBUCKLE, M, force) & COMPONENT_BLOCK_BUCKLE) + return FALSE + M.buckling = src if(!M.can_buckle() && !force) if(M == usr) @@ -110,10 +118,13 @@ //Handle any extras after buckling //Called on buckle_mob() /atom/movable/proc/post_buckle_mob(mob/living/M) - + if(buckle_lying) + M.update_cone_show() + M.layer = BELOW_MOB_LAYER //same but for unbuckle /atom/movable/proc/post_unbuckle_mob(mob/living/M) - + if(buckle_lying) + M.update_cone_show() //Wrapper procs that handle sanity and user feedback /atom/movable/proc/user_buckle_mob(mob/living/M, mob/user, check_loc = TRUE) if(!in_range(user, src) || !isturf(user.loc) || user.incapacitated() || M.anchored) diff --git a/code/game/objects/effects/alien_acid.dm b/code/game/objects/effects/alien_acid.dm index 521cc31c09..de567c44af 100644 --- a/code/game/objects/effects/alien_acid.dm +++ b/code/game/objects/effects/alien_acid.dm @@ -63,30 +63,3 @@ acid_level = max(0, acid_level - acid_used*10) playsound(L, 'sound/blank.ogg', 50, TRUE) to_chat(L, "[src] burns you!") - -//xenomorph corrosive acid -/obj/effect/acid/alien - var/target_strength = 30 - - -/obj/effect/acid/alien/process() - . = ..() - if(.) - if(prob(45)) - playsound(loc, 'sound/blank.ogg', 100, TRUE) - target_strength-- - if(target_strength <= 0) - target.visible_message("[target] collapses under its own weight into a puddle of goop and undigested debris!") - target.acid_melt() - qdel(src) - else - - switch(target_strength) - if(24) - visible_message("[target] is holding up against the acid!") - if(16) - visible_message("[target] is being melted by the acid!") - if(8) - visible_message("[target] is struggling to withstand the acid!") - if(4) - visible_message("[target] begins to crumble under the acid!") diff --git a/code/game/objects/effects/anomalies.dm b/code/game/objects/effects/anomalies.dm index 639c09f8e3..a140b3338d 100644 --- a/code/game/objects/effects/anomalies.dm +++ b/code/game/objects/effects/anomalies.dm @@ -6,9 +6,8 @@ icon_state = "bhole3" density = FALSE anchored = TRUE - light_range = 3 + light_outer_range = 3 var/movechance = 70 - var/obj/item/assembly/signaler/anomaly/aSignal var/area/impact_area var/lifespan = 990 @@ -23,15 +22,9 @@ START_PROCESSING(SSobj, src) impact_area = get_area(src) - aSignal = new(src) - aSignal.name = "[name] core" - aSignal.code = rand(1,100) - aSignal.anomaly_type = type - var/frequency = rand(MIN_FREE_FREQ, MAX_FREE_FREQ) if(ISMULTIPLE(frequency, 2))//signaller frequencies are always uneven! frequency++ - aSignal.set_frequency(frequency) if(new_lifespan) lifespan = new_lifespan @@ -73,11 +66,6 @@ qdel(src) - -/obj/effect/anomaly/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_ANALYZER) - to_chat(user, "Analyzing... [src]'s unstable field is fluctuating along frequency [format_frequency(aSignal.frequency)], code [aSignal.code].") - /////////////////////// /obj/effect/anomaly/grav diff --git a/code/game/objects/effects/countdown.dm b/code/game/objects/effects/countdown.dm index b30289fbe4..91d46d3a1b 100644 --- a/code/game/objects/effects/countdown.dm +++ b/code/game/objects/effects/countdown.dm @@ -69,73 +69,6 @@ /obj/effect/countdown/singularity_act() return -/obj/effect/countdown/syndicatebomb - name = "syndicate bomb countdown" - -/obj/effect/countdown/syndicatebomb/get_value() - var/obj/machinery/syndicatebomb/S = attached_to - if(!istype(S)) - return - else if(S.active) - return S.seconds_remaining() - -/obj/effect/countdown/nuclearbomb - name = "nuclear bomb countdown" - color = "#81FF14" - -/obj/effect/countdown/nuclearbomb/get_value() - var/obj/machinery/nuclearbomb/N = attached_to - if(!istype(N)) - return - else if(N.timing) - return round(N.get_time_left(), 1) - -/obj/effect/countdown/clonepod - name = "cloning pod countdown" - color = "#18d100" - text_size = 1 - -/obj/effect/countdown/clonepod/get_value() - var/obj/machinery/clonepod/C = attached_to - if(!istype(C)) - return - else if(C.occupant) - var/completion = round(C.get_completion()) - return completion - -/obj/effect/countdown/supermatter - name = "supermatter damage" - text_size = 1 - color = "#00ff80" - -/obj/effect/countdown/supermatter/get_value() - var/obj/machinery/power/supermatter_crystal/S = attached_to - if(!istype(S)) - return - return "
[round(S.get_integrity(), 1)]%
" - -/obj/effect/countdown/transformer - name = "transformer countdown" - color = "#4C5866" - -/obj/effect/countdown/transformer/get_value() - var/obj/machinery/transformer/T = attached_to - if(!istype(T)) - return - else if(T.cooldown) - var/seconds_left = max(0, (T.cooldown_timer - world.time) / 10) - return "[round(seconds_left)]" - -/obj/effect/countdown/doomsday - name = "doomsday countdown" - -/obj/effect/countdown/doomsday/get_value() - var/obj/machinery/doomsday_device/DD = attached_to - if(!istype(DD)) - return - else if(DD.timing) - return "
[DD.seconds_remaining()]
" - /obj/effect/countdown/anomaly name = "anomaly countdown" @@ -157,16 +90,3 @@ else var/time_left = max(0, (H.finish_time - world.time) / 10) return round(time_left) - -/obj/effect/countdown/arena - invisibility = 0 - name = "arena countdown" - -/obj/effect/countdown/arena/get_value() - var/obj/machinery/arena_spawn/A = attached_to - if(!istype(A)) - return - else - var/obj/machinery/computer/arena/C = A.get_controller() - var/time_left = max(0, (C.start_time - world.time) / 10) - return round(time_left) diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index 408a269fe9..8539dc5a23 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -29,6 +29,17 @@ appearance_flags = NO_CLIENT_COLOR nomouseover = TRUE var/blood_timer + var/wash_precent = 0 + COOLDOWN_DECLARE(wash_cooldown) + +/obj/effect/decal/cleanable/blood/weather_act_on(weather_trait, severity) + if(weather_trait != PARTICLEWEATHER_RAIN || !COOLDOWN_FINISHED(src, wash_cooldown)) + return + wash_precent += min(10, severity / 4) + alpha = 255 *((100 - wash_precent) * 0.01) + if(wash_precent >= 100) + qdel(src) + COOLDOWN_START(src, wash_cooldown, 15 SECONDS) /obj/effect/decal/cleanable/blood/attack_hand(mob/living/user) . = ..() @@ -48,6 +59,7 @@ pixel_y = rand(5,5) blood_timer = addtimer(CALLBACK(src, PROC_REF(become_dry)), rand(5 MINUTES,15 MINUTES), TIMER_STOPPABLE) + GLOB.weather_act_upon_list += src /obj/effect/decal/cleanable/blood/proc/become_dry() if(QDELETED(src)) @@ -68,6 +80,7 @@ /obj/effect/decal/cleanable/blood/Destroy() deltimer(blood_timer) blood_timer = null + GLOB.weather_act_upon_list -= src return ..() /obj/effect/decal/cleanable/blood/old diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm index e0cf68fde5..8a21799158 100644 --- a/code/game/objects/effects/decals/cleanable/misc.dm +++ b/code/game/objects/effects/decals/cleanable/misc.dm @@ -93,7 +93,7 @@ desc = "" icon_state = "greenglow" light_power = 3 - light_range = 2 + light_outer_range = 2 light_color = LIGHT_COLOR_GREEN beauty = -300 diff --git a/code/game/objects/effects/effect_system/effect_shield.dm b/code/game/objects/effects/effect_system/effect_shield.dm index 2537938c17..36bfce2971 100644 --- a/code/game/objects/effects/effect_system/effect_shield.dm +++ b/code/game/objects/effects/effect_system/effect_shield.dm @@ -1,4 +1,4 @@ -/obj/effect/shield +/obj/effect/shield name = "shield" icon = 'icons/effects/effects.dmi' icon_state = "wave2" @@ -8,18 +8,15 @@ /obj/effect/shield/Initialize() . = ..() - var/turf/location = get_turf(src) + var/turf/location = get_turf(src) old_heat_capacity=location.heat_capacity location.heat_capacity = INFINITY /obj/effect/shield/Destroy() - var/turf/location = get_turf(src) + var/turf/location = get_turf(src) location.heat_capacity=old_heat_capacity ..() /obj/effect/shield/singularity_act() return -/obj/effect/shield/singularity_pull(S, current_size) - return - diff --git a/code/game/objects/effects/effect_system/effect_system.dm b/code/game/objects/effects/effect_system/effect_system.dm index e9e86bbe8f..ed51f643b9 100644 --- a/code/game/objects/effects/effect_system/effect_system.dm +++ b/code/game/objects/effects/effect_system/effect_system.dm @@ -12,14 +12,6 @@ would spawn and follow the beaker, even if it is carried or thrown. pass_flags = PASSTABLE | PASSGRILLE anchored = TRUE -/obj/effect/particle_effect/Initialize() - . = ..() - GLOB.cameranet.updateVisibility(src) - -/obj/effect/particle_effect/Destroy() - GLOB.cameranet.updateVisibility(src) - return ..() - /obj/effect/particle_effect/newtonian_move() // Prevents effects from getting registered for SSspacedrift return TRUE diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index da1ba3a4e5..6bb123bd72 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -294,12 +294,10 @@ var/more = "" if(M) more = "[ADMIN_LOOKUPFLW(M)] " - if(!istype(carry.my_atom, /obj/machinery/plumbing)) - message_admins("Smoke: ([ADMIN_VERBOSEJMP(location)])[contained]. Key: [more ? more : carry.my_atom.fingerprintslast].") + message_admins("Smoke: ([ADMIN_VERBOSEJMP(location)])[contained]. Key: [more ? more : carry.my_atom.fingerprintslast].") log_game("A chemical smoke reaction has taken place in ([where])[contained]. Last touched by [carry.my_atom.fingerprintslast].") else - if(!istype(carry.my_atom, /obj/machinery/plumbing)) - message_admins("Smoke: ([ADMIN_VERBOSEJMP(location)])[contained]. No associated key.") + message_admins("Smoke: ([ADMIN_VERBOSEJMP(location)])[contained]. No associated key.") log_game("A chemical smoke reaction has taken place in ([where])[contained]. No associated key.") diff --git a/code/game/objects/effects/effect_system/effects_sparks.dm b/code/game/objects/effects/effect_system/effects_sparks.dm index cc01583124..de211e1ba4 100644 --- a/code/game/objects/effects/effect_system/effects_sparks.dm +++ b/code/game/objects/effects/effect_system/effects_sparks.dm @@ -25,7 +25,7 @@ icon_state = "sparks" anchored = TRUE light_power = 1.3 - light_range = MINIMUM_USEFUL_LIGHT_RANGE + light_outer_range = MINIMUM_USEFUL_LIGHT_RANGE light_color = LIGHT_COLOR_FIRE pixel_x = -16 pixel_y = -16 diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index 997bbbcb2c..69cd1679f7 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -18,9 +18,6 @@ /obj/effect/acid_act() return -/obj/effect/mech_melee_attack(obj/mecha/M) - return 0 - /obj/effect/blob_act(obj/structure/blob/B) return diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index bdced9480c..dfaf4cba19 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -44,6 +44,7 @@ if(!HAS_TRAIT(L, TRAIT_KNEESTINGER_IMMUNITY)) if(L.electrocute_act(30, src)) L.emote("painscream") + L.update_sneak_invis(TRUE) L.consider_ambush() . = ..() @@ -61,7 +62,7 @@ /obj/structure/kneestingers/New(loc, obj/item/seeds/newseed, mutate_stats) ..() - set_light(1.5, 1.5, "#d4fcac") + set_light(1.5, 1.5, 1.5, l_color ="#d4fcac") if(icon_state == "glowshroom1" ) icon_state = "glowshroom[rand(1,3)]" pixel_x = rand(-4, 4) diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index b81d2edf91..51161d2c52 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -87,7 +87,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark) /obj/effect/landmark/start/adventurerlate name = "Adventurerlate" icon_state = "arrow" - jobspawn_override = list("Skeleton", "Drifter", "Pilgrim", "Adventurer") + jobspawn_override = list("Drifter", "Pilgrim", "Adventurer") delete_after_roundstart = FALSE /obj/effect/landmark/start/vagrantlate @@ -117,7 +117,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark) /obj/effect/landmark/start/combatlate name = "Combatlate" icon_state = "arrow" - jobspawn_override = list("Skeleton", "Drifter", "Pilgrim", "Adventurer", "Mercenary") + jobspawn_override = list("Drifter", "Pilgrim", "Adventurer", "Mercenary") delete_after_roundstart = FALSE /obj/effect/landmark/start/lord @@ -128,7 +128,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark) name = "Knight" icon_state = "arrow" -/obj/effect/landmark/start/sheriff +/obj/effect/landmark/start/captain name = "Captain" icon_state = "arrow" @@ -156,8 +156,11 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark) name = "Dungeoneer" icon_state = "arrow" +/obj/effect/landmark/start/sheriff + name = "Sheriff" + icon_state = "arrow" /obj/effect/landmark/start/watchman - name = "Garrison Archer" + name = "Watchman" icon_state = "arrow" /obj/effect/landmark/start/villager @@ -204,11 +207,11 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark) name = "Merchant" icon_state = "arrow" -/obj/effect/landmark/start/grabber - name = "Grabber" +/obj/effect/landmark/start/stevedore + name = "Stevedore" icon_state = "arrow" -/obj/effect/landmark/start/barkeep //Go figure someone breaks something +/obj/effect/landmark/start/innkeep name = "Innkeep" icon_state = "arrow" @@ -228,6 +231,10 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark) name = "Armorer" icon_state = "arrow" +/obj/effect/landmark/start/blacksmith + name = "Blacksmith" + icon_state = "arrow" + /obj/effect/landmark/start/tailor name = "Tailor" icon_state = "arrow" @@ -257,7 +264,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark) icon_state = "arrow" /obj/effect/landmark/start/gravedigger - name = "Gravedigger" + name = "Gravekeeper" icon_state = "arrow" /obj/effect/landmark/start/mercenary @@ -268,8 +275,8 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark) name = "Beggar" icon_state = "arrow" -/obj/effect/landmark/start/lady - name = "Queen" +/obj/effect/landmark/start/consort + name = "Consort" icon_state = "arrow" /obj/effect/landmark/start/prince @@ -326,192 +333,21 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark) name = "Servant" icon_state = "arrow" -/obj/effect/landmark/start/churchling - name = "Churchling" - icon_state = "arrow" - -/obj/effect/landmark/start/orphan - name = "Orphan" - icon_state = "arrow" - /obj/effect/landmark/start/sapprentice name = "Smithy Apprentice" icon_state = "arrow" -// START LANDMARKS FOLLOW. Don't change the names unless -// you are refactoring shitty landmark code. -/obj/effect/landmark/start/assistant - name = "Assistant" - icon_state = "Assistant" - -/obj/effect/landmark/start/assistant/override - jobspawn_override = list("Assistant") - delete_after_roundstart = FALSE - -/obj/effect/landmark/start/janitor - name = "Janitor" - icon_state = "Janitor" - -/obj/effect/landmark/start/cargo_technician - name = "Cargo Technician" - icon_state = "Cargo Technician" - -/obj/effect/landmark/start/bartender - name = "Bartender" - icon_state = "Bartender" - -/obj/effect/landmark/start/clown - name = "Clown" - icon_state = "Clown" - -/obj/effect/landmark/start/mime - name = "Mime" - icon_state = "Mime" - -/obj/effect/landmark/start/quartermaster - name = "Quartermaster" - icon_state = "Quartermaster" - -/obj/effect/landmark/start/atmospheric_technician - name = "Atmospheric Technician" - icon_state = "Atmospheric Technician" - -/obj/effect/landmark/start/cook - name = "Cook" - icon_state = "Cook" - -/obj/effect/landmark/start/shaft_miner - name = "Shaft Miner" - icon_state = "Shaft Miner" - -/obj/effect/landmark/start/security_officer - name = "Security Officer" - icon_state = "Security Officer" - -/obj/effect/landmark/start/botanist - name = "Botanist" - icon_state = "Botanist" - -/obj/effect/landmark/start/head_of_security - name = "Head of Security" - icon_state = "Head of Security" - -/obj/effect/landmark/start/captain - name = "Captain" - icon_state = "Captain" - -/obj/effect/landmark/start/detective - name = "Detective" - icon_state = "Detective" - -/obj/effect/landmark/start/warden - name = "Warden" - icon_state = "Warden" - -/obj/effect/landmark/start/chief_engineer - name = "Chief Engineer" - icon_state = "Chief Engineer" - -/obj/effect/landmark/start/head_of_personnel - name = "Head of Personnel" - icon_state = "Head of Personnel" - -/obj/effect/landmark/start/librarian - name = "Curator" - icon_state = "Curator" - -/obj/effect/landmark/start/lawyer - name = "Lawyer" - icon_state = "Lawyer" - -/obj/effect/landmark/start/station_engineer - name = "Station Engineer" - icon_state = "Station Engineer" - -/obj/effect/landmark/start/medical_doctor - name = "Medical Doctor" - icon_state = "Medical Doctor" - -/obj/effect/landmark/start/scientist - name = "Scientist" - icon_state = "Scientist" - -/obj/effect/landmark/start/chemist - name = "Chemist" - icon_state = "Chemist" - -/obj/effect/landmark/start/roboticist - name = "Roboticist" - icon_state = "Roboticist" - -/obj/effect/landmark/start/research_director - name = "Research Director" - icon_state = "Research Director" - -/obj/effect/landmark/start/geneticist - name = "Geneticist" - icon_state = "Geneticist" - -/obj/effect/landmark/start/chief_medical_officer - name = "Chief Medical Officer" - icon_state = "Chief Medical Officer" - -/obj/effect/landmark/start/virologist - name = "Virologist" - icon_state = "Virologist" - -/obj/effect/landmark/start/chaplain - name = "Chaplain" - icon_state = "Chaplain" - -/obj/effect/landmark/start/cyborg - name = "Cyborg" - icon_state = "Cyborg" +/obj/effect/landmark/start/colonist + name = "Colonist" + icon_state = "arrow" -/obj/effect/landmark/start/ai - name = "AI" - icon_state = "AI" +/obj/effect/landmark/start/evilskeleton // Trying to make EVIL SKELTON actually spawn + name = "Skeleton" + icon = 'icons/mob/actions/roguespells.dmi' + icon_state = "raiseskele" + alpha = 20 delete_after_roundstart = FALSE - var/primary_ai = TRUE - var/latejoin_active = TRUE - -/obj/effect/landmark/start/ai/after_round_start() - if(latejoin_active && !used) - new /obj/structure/AIcore/latejoin_inactive(loc) - return ..() - -/obj/effect/landmark/start/ai/secondary - icon = 'icons/effects/landmarks_static.dmi' - icon_state = "ai_spawn" - primary_ai = FALSE - latejoin_active = FALSE - -//Department Security spawns - -/obj/effect/landmark/start/depsec - name = "department_sec" - icon_state = "Security Officer" - -/obj/effect/landmark/start/depsec/New() - ..() - GLOB.department_security_spawns += src - -/obj/effect/landmark/start/depsec/Destroy() - GLOB.department_security_spawns -= src - return ..() - -/obj/effect/landmark/start/depsec/supply - name = "supply_sec" - -/obj/effect/landmark/start/depsec/medical - name = "medical_sec" - -/obj/effect/landmark/start/depsec/engineering - name = "engineering_sec" - -/obj/effect/landmark/start/depsec/science - name = "science_sec" //Antagonist spawns @@ -591,16 +427,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player) name = "Observer-Start" icon_state = "x" -//xenos, morphs and nightmares spawn here -/obj/effect/landmark/xeno_spawn - name = "xeno_spawn" - icon_state = "xeno_spawn" - -/obj/effect/landmark/xeno_spawn/Initialize(mapload) - ..() - GLOB.xeno_spawn += loc - return INITIALIZE_HINT_QDEL - //objects with the stationloving component (nuke disk) respawn here. //also blobs that have their spawn forcemoved (running out of time when picking their spawn spot), santa and respawning devils /obj/effect/landmark/blobstart diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index b094371b08..e873db6980 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -76,12 +76,12 @@ desc = "" icon_state = "nothing" light_color = "#FFFFFF" - light_range = MINIMUM_USEFUL_LIGHT_RANGE + light_outer_range = MINIMUM_USEFUL_LIGHT_RANGE mouse_opacity = MOUSE_OPACITY_TRANSPARENT /obj/effect/dummy/lighting_obj/Initialize(mapload, _color, _range, _power, _duration) . = ..() - set_light(_range ? _range : light_range, _power ? _power : light_power, _color ? _color : light_color) + set_light(_range ? _range : light_outer_range, light_inner_range, _power ? _power : light_power, l_color = _color ? _color : light_color) if(_duration) QDEL_IN(src, _duration) diff --git a/code/game/objects/effects/particles/weather.dm b/code/game/objects/effects/particles/weather.dm index 7ac12e76a6..7aa744653e 100644 --- a/code/game/objects/effects/particles/weather.dm +++ b/code/game/objects/effects/particles/weather.dm @@ -22,7 +22,7 @@ /obj/emitters/weather/rain particles = new/particles/rain -// alpha = 190 + alpha = 190 /atom/movable/screen/weather/fog alpha = 180 diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm deleted file mode 100644 index c96a047d6f..0000000000 --- a/code/game/objects/effects/spawners/bombspawner.dm +++ /dev/null @@ -1,67 +0,0 @@ -#define CELSIUS_TO_KELVIN(T_K) ((T_K) + T0C) - -#define OPTIMAL_TEMP_K_PLA_BURN_SCALE(PRESSURE_P,PRESSURE_O,TEMP_O) (((PRESSURE_P) * GLOB.meta_gas_info[/datum/gas/plasma][META_GAS_SPECIFIC_HEAT]) / (((PRESSURE_P) * GLOB.meta_gas_info[/datum/gas/plasma][META_GAS_SPECIFIC_HEAT] + (PRESSURE_O) * GLOB.meta_gas_info[/datum/gas/oxygen][META_GAS_SPECIFIC_HEAT]) / PLASMA_UPPER_TEMPERATURE - (PRESSURE_O) * GLOB.meta_gas_info[/datum/gas/oxygen][META_GAS_SPECIFIC_HEAT] / CELSIUS_TO_KELVIN(TEMP_O))) -#define OPTIMAL_TEMP_K_PLA_BURN_RATIO(PRESSURE_P,PRESSURE_O,TEMP_O) (CELSIUS_TO_KELVIN(TEMP_O) * PLASMA_OXYGEN_FULLBURN * (PRESSURE_P) / (PRESSURE_O)) - -/obj/effect/spawner/newbomb - name = "bomb" - icon = 'icons/mob/screen_gen.dmi' - icon_state = "x" - var/temp_p = 1500 - var/temp_o = 1000 // tank temperatures - var/pressure_p = 10 * ONE_ATMOSPHERE - var/pressure_o = 10 * ONE_ATMOSPHERE //tank pressures - var/assembly_type - -/obj/effect/spawner/newbomb/Initialize() - . = ..() - var/obj/item/transfer_valve/V = new(src.loc) - var/obj/item/tank/internals/plasma/PT = new(V) - var/obj/item/tank/internals/oxygen/OT = new(V) - - PT.air_contents.assert_gas(/datum/gas/plasma) - PT.air_contents.gases[/datum/gas/plasma][MOLES] = pressure_p*PT.volume/(R_IDEAL_GAS_EQUATION*CELSIUS_TO_KELVIN(temp_p)) - PT.air_contents.temperature = CELSIUS_TO_KELVIN(temp_p) - - OT.air_contents.assert_gas(/datum/gas/oxygen) - OT.air_contents.gases[/datum/gas/oxygen][MOLES] = pressure_o*OT.volume/(R_IDEAL_GAS_EQUATION*CELSIUS_TO_KELVIN(temp_o)) - OT.air_contents.temperature = CELSIUS_TO_KELVIN(temp_o) - - V.tank_one = PT - V.tank_two = OT - PT.master = V - OT.master = V - - if(assembly_type) - var/obj/item/assembly/A = new assembly_type(V) - V.attached_device = A - A.holder = V - - V.update_icon() - - return INITIALIZE_HINT_QDEL - -/obj/effect/spawner/newbomb/timer/syndicate/Initialize() - temp_p = (OPTIMAL_TEMP_K_PLA_BURN_SCALE(pressure_p, pressure_o, temp_o)/2 + OPTIMAL_TEMP_K_PLA_BURN_RATIO(pressure_p, pressure_o, temp_o)/2) - T0C - . = ..() - -/obj/effect/spawner/newbomb/timer - assembly_type = /obj/item/assembly/timer - -/obj/effect/spawner/newbomb/timer/syndicate - pressure_o = TANK_LEAK_PRESSURE - 1 - temp_o = 20 - - pressure_p = TANK_LEAK_PRESSURE - 1 - -/obj/effect/spawner/newbomb/proximity - assembly_type = /obj/item/assembly/prox_sensor - -/obj/effect/spawner/newbomb/radio - assembly_type = /obj/item/assembly/signaler - - -#undef CELSIUS_TO_KELVIN - -#undef OPTIMAL_TEMP_K_PLA_BURN_SCALE -#undef OPTIMAL_TEMP_K_PLA_BURN_RATIO diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm index e591fac837..e25a49b1ae 100644 --- a/code/game/objects/effects/spawners/gibspawner.dm +++ b/code/game/objects/effects/spawners/gibspawner.dm @@ -93,52 +93,6 @@ gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, list()) return ..() - - -/obj/effect/gibspawner/xeno - gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs/up, /obj/effect/decal/cleanable/xenoblood/xgibs/down, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/body, /obj/effect/decal/cleanable/xenoblood/xgibs/limb, /obj/effect/decal/cleanable/xenoblood/xgibs/core) - gibamounts = list(1, 1, 1, 1, 1, 1, 1) - gib_mob_type = /mob/living/carbon/alien - -/obj/effect/gibspawner/xeno/Initialize() - if(!gibdirections.len) - gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, GLOB.alldirs, list()) - return ..() - - -/obj/effect/gibspawner/xeno/bodypartless //only the gibs that don't look like actual full bodyparts (except torso). - gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/core, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/core, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/torso) - gibamounts = list(1, 1, 1, 1, 1, 1) - - -/obj/effect/gibspawner/xeno/bodypartless/Initialize() - if(!gibdirections.len) - gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), GLOB.alldirs, list()) - return ..() - - - -/obj/effect/gibspawner/larva - gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/xenoblood/xgibs/larva/body, /obj/effect/decal/cleanable/xenoblood/xgibs/larva/body) - gibamounts = list(1, 1, 1, 1) - gib_mob_type = /mob/living/carbon/alien/larva - -/obj/effect/gibspawner/larva/Initialize() - if(!gibdirections.len) - gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST), list(), GLOB.alldirs) - return ..() - -/obj/effect/gibspawner/larva/bodypartless - gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/xenoblood/xgibs/larva, /obj/effect/decal/cleanable/xenoblood/xgibs/larva) - gibamounts = list(1, 1, 1) - -/obj/effect/gibspawner/larva/bodypartless/Initialize() - if(!gibdirections.len) - gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST), list()) - return ..() - - - /obj/effect/gibspawner/robot sparks = 1 gibtypes = list(/obj/effect/decal/cleanable/robot_debris/up, /obj/effect/decal/cleanable/robot_debris/down, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris/limb) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 45ad43578b..57edbb9be1 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -47,22 +47,19 @@ loot = list(/obj/item/gun/ballistic/automatic/pistol = 5, /obj/item/gun/ballistic/shotgun/automatic/combat = 5, /obj/item/gun/ballistic/automatic/pistol/deagle, - /obj/item/storage/box/syndie_kit/throwing_weapons = 3, /obj/item/gun/ballistic/revolver/mateba) /obj/effect/spawner/lootdrop/armory_contraband/donutstation - loot = list(/obj/item/grenade/clusterbuster/teargas = 5, + loot = list( /obj/item/gun/ballistic/shotgun/automatic/combat = 5, /obj/item/bikehorn/golden, - /obj/item/grenade/clusterbuster, - /obj/item/storage/box/syndie_kit/throwing_weapons = 3) + /obj/item/grenade/clusterbuster) /obj/effect/spawner/lootdrop/gambling name = "gambling valuables spawner" loot = list( /obj/item/gun/ballistic/revolver/russian = 5, /obj/item/clothing/head/ushanka = 3, - /obj/item/storage/box/syndie_kit/throwing_weapons, /obj/item/coin/gold, /obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, ) @@ -156,29 +153,6 @@ "" = 80 ) -/obj/effect/spawner/lootdrop/organ_spawner - name = "organ spawner" - loot = list( - /obj/item/organ/heart/gland/electric = 3, - /obj/item/organ/heart/gland/trauma = 4, - /obj/item/organ/heart/gland/egg = 7, - /obj/item/organ/heart/gland/chem = 5, - /obj/item/organ/heart/gland/mindshock = 5, - /obj/item/organ/heart/gland/plasma = 7, - /obj/item/organ/heart/gland/transform = 5, - /obj/item/organ/heart/gland/slime = 4, - /obj/item/organ/heart/gland/spiderman = 5, - /obj/item/organ/heart/gland/ventcrawling = 1, - /obj/item/organ/body_egg/alien_embryo = 1, - /obj/item/organ/regenerative_core = 2) - lootcount = 3 - -/obj/effect/spawner/lootdrop/two_percent_xeno_egg_spawner - name = "2% chance xeno egg spawner" - loot = list( - /obj/effect/decal/remains/xeno = 49, - /obj/effect/spawner/xeno_egg_delivery = 1) - /obj/effect/spawner/lootdrop/costume name = "random costume spawner" @@ -220,39 +194,6 @@ /obj/item/clothing/mask/gas/cyborg = 25, "" = 75) -/obj/effect/spawner/lootdrop/aimodule_harmless // These shouldn't allow the AI to start butchering people - name = "harmless AI module spawner" - loot = list( - /obj/item/aiModule/core/full/asimov, - /obj/item/aiModule/core/full/asimovpp, - /obj/item/aiModule/core/full/hippocratic, - /obj/item/aiModule/core/full/paladin_devotion, - /obj/item/aiModule/core/full/paladin - ) - -/obj/effect/spawner/lootdrop/aimodule_neutral // These shouldn't allow the AI to start butchering people without reason - name = "neutral AI module spawner" - loot = list( - /obj/item/aiModule/core/full/corp, - /obj/item/aiModule/core/full/maintain, - /obj/item/aiModule/core/full/drone, - /obj/item/aiModule/core/full/peacekeeper, - /obj/item/aiModule/core/full/reporter, - /obj/item/aiModule/core/full/robocop, - /obj/item/aiModule/core/full/liveandletlive, - /obj/item/aiModule/core/full/hulkamania - ) - -/obj/effect/spawner/lootdrop/aimodule_harmful // These will get the shuttle called - name = "harmful AI module spawner" - loot = list( - /obj/item/aiModule/core/full/antimov, - /obj/item/aiModule/core/full/balance, - /obj/item/aiModule/core/full/tyrant, - /obj/item/aiModule/core/full/thermurderdynamic, - /obj/item/aiModule/core/full/damaged - ) - // Tech storage circuit board spawners /obj/effect/spawner/lootdrop/techstorage @@ -260,103 +201,3 @@ lootdoubles = FALSE fan_out_items = TRUE lootcount = INFINITY - -/obj/effect/spawner/lootdrop/techstorage/service - name = "service circuit board spawner" - loot = list( - /obj/item/circuitboard/computer/arcade/battle, - /obj/item/circuitboard/computer/arcade/orion_trail, - /obj/item/circuitboard/machine/autolathe, - /obj/item/circuitboard/computer/mining, - /obj/item/circuitboard/machine/ore_redemption, - /obj/item/circuitboard/machine/mining_equipment_vendor, - /obj/item/circuitboard/machine/microwave, - /obj/item/circuitboard/machine/chem_dispenser/drinks, - /obj/item/circuitboard/machine/chem_dispenser/drinks/beer, - /obj/item/circuitboard/computer/slot_machine - ) - -/obj/effect/spawner/lootdrop/techstorage/rnd - name = "RnD circuit board spawner" - loot = list( - /obj/item/circuitboard/computer/aifixer, - /obj/item/circuitboard/machine/rdserver, - /obj/item/circuitboard/machine/mechfab, - /obj/item/circuitboard/machine/circuit_imprinter/department, - /obj/item/circuitboard/computer/teleporter, - /obj/item/circuitboard/machine/destructive_analyzer, - /obj/item/circuitboard/computer/rdconsole, - /obj/item/circuitboard/computer/nanite_chamber_control, - /obj/item/circuitboard/computer/nanite_cloud_controller, - /obj/item/circuitboard/machine/nanite_chamber, - /obj/item/circuitboard/machine/nanite_programmer, - /obj/item/circuitboard/machine/nanite_program_hub - ) - -/obj/effect/spawner/lootdrop/techstorage/security - name = "security circuit board spawner" - loot = list( - /obj/item/circuitboard/computer/secure_data, - /obj/item/circuitboard/computer/security, - /obj/item/circuitboard/computer/prisoner - ) - -/obj/effect/spawner/lootdrop/techstorage/engineering - name = "engineering circuit board spawner" - loot = list( - /obj/item/circuitboard/computer/atmos_alert, - /obj/item/circuitboard/computer/stationalert, - /obj/item/circuitboard/computer/powermonitor - ) - -/obj/effect/spawner/lootdrop/techstorage/tcomms - name = "tcomms circuit board spawner" - loot = list( - /obj/item/circuitboard/computer/message_monitor, - /obj/item/circuitboard/machine/telecomms/broadcaster, - /obj/item/circuitboard/machine/telecomms/bus, - /obj/item/circuitboard/machine/telecomms/server, - /obj/item/circuitboard/machine/telecomms/receiver, - /obj/item/circuitboard/machine/telecomms/processor, - /obj/item/circuitboard/machine/announcement_system, - /obj/item/circuitboard/computer/comm_server, - /obj/item/circuitboard/computer/comm_monitor - ) - -/obj/effect/spawner/lootdrop/techstorage/medical - name = "medical circuit board spawner" - loot = list( - /obj/item/circuitboard/computer/cloning, - /obj/item/circuitboard/machine/clonepod, - /obj/item/circuitboard/machine/chem_dispenser, - /obj/item/circuitboard/computer/scan_consolenew, - /obj/item/circuitboard/computer/med_data, - /obj/item/circuitboard/machine/smoke_machine, - /obj/item/circuitboard/machine/chem_master, - /obj/item/circuitboard/machine/clonescanner, - /obj/item/circuitboard/computer/pandemic - ) - -/obj/effect/spawner/lootdrop/techstorage/AI - name = "secure AI circuit board spawner" - loot = list( - /obj/item/circuitboard/computer/aiupload, - /obj/item/circuitboard/computer/borgupload, - /obj/item/circuitboard/aicore - ) - -/obj/effect/spawner/lootdrop/techstorage/command - name = "secure command circuit board spawner" - loot = list( - /obj/item/circuitboard/computer/crew, - /obj/item/circuitboard/computer/communications, - /obj/item/circuitboard/computer/card - ) - -/obj/effect/spawner/lootdrop/techstorage/RnD_secure - name = "secure RnD circuit board spawner" - loot = list( - /obj/item/circuitboard/computer/mecha_control, - /obj/item/circuitboard/computer/apc_control, - /obj/item/circuitboard/computer/robotics - ) diff --git a/code/game/objects/effects/spawners/roguemapgen.dm b/code/game/objects/effects/spawners/roguemapgen.dm index 3b992237d3..1c837227d9 100644 --- a/code/game/objects/effects/spawners/roguemapgen.dm +++ b/code/game/objects/effects/spawners/roguemapgen.dm @@ -65,6 +65,12 @@ probby = 50 spawned = list(/obj/item/restraints/legcuffs/beartrap/armed/camouflage) +/obj/effect/spawner/roguemap/beartrap_obvious + icon_state = "beartrap" + name = "beartrap" + probby = 50 + spawned = list(/obj/item/restraints/legcuffs/beartrap/armed) + /obj/effect/spawner/roguemap/tallgrass icon_state = "grass" name = "grass tile loot spawner" @@ -77,3 +83,585 @@ probby = 50 spawned = list(/obj/structure/flora/roguegrass/bush_meagre = 5, /obj/structure/flora/roguegrass = 60, /obj/item/natural/stone = 8, /obj/item/natural/rock = 4, /obj/item/grown/log/tree/stick = 2) + + +/* .................. Random Alcohol ................... */ +/obj/effect/spawner/roguemap/alcohol // random beer + icon = 'icons/roguetown/items/cooking.dmi' + icon_state = "clear_bottle1" + color = "#06b606" + probby = 100 + spawned = list( + /obj/item/reagent_containers/glass/bottle/rogue/beer = 50, + /obj/item/reagent_containers/glass/bottle/rogue/beer/spottedhen = 15, + /obj/item/reagent_containers/glass/bottle/rogue/beer/blackgoat = 10, + /obj/item/reagent_containers/glass/bottle/rogue/beer/ratkept = 5, + /obj/item/reagent_containers/glass/bottle/rogue/beer/hagwoodbitter = 10, + /obj/item/reagent_containers/glass/bottle/rogue/beer/aurorian = 5, + /obj/item/reagent_containers/glass/bottle/rogue/beer/fireleaf = 5, + /obj/item/reagent_containers/glass/bottle/rogue/beer/butterhairs = 5, + /obj/item/reagent_containers/glass/bottle/rogue/beer/stonebeardreserve = 5, + /obj/item/reagent_containers/glass/bottle/rogue/beer/voddena = 5 ) + +/obj/effect/spawner/roguemap/alcohol/wine + spawned = list( + /obj/item/reagent_containers/glass/bottle/rogue/wine = 50, + /obj/item/reagent_containers/glass/bottle/rogue/wine/sourwine =10, + /obj/item/reagent_containers/glass/bottle/rogue/redwine = 20, + /obj/item/reagent_containers/glass/bottle/rogue/whitewine = 20, + /obj/item/reagent_containers/glass/bottle/rogue/elfred = 5, + /obj/item/reagent_containers/glass/bottle/rogue/elfblue = 5 ) + + +/* .................. Random Gem spawner ................... */ +/obj/effect/spawner/roguemap/loot/random_gem + spawned = list( + /obj/item/roguegem = 25, + /obj/item/roguegem/green = 12, + /obj/item/roguegem/blue = 6, + /obj/item/roguegem/yellow = 3, + /obj/item/roguegem/violet = 2, + /obj/item/roguegem/diamond = 1) + + +/* .................. Spooky Village loot ................... */ +/obj/effect/spawner/roguemap/spooky_village_stuff + icon = 'icons/effects/landmarks_static.dmi' + icon_state = "generic_event" + probby = 50 + spawned = list( + /obj/item/clothing/head/roguetown/armingcap = 10, + /obj/item/clothing/head/roguetown/fisherhat = 10, + /obj/item/clothing/shoes/roguetown/simpleshoes/buckle = 10, + /obj/item/roguekey/spooky_village = 30, + /obj/item/roguecoin/copper/pile = 10, + ) + + +/* .................. Toll randomizer (poor mans coin generator, cheaper workload is all) ................... */ +/obj/effect/spawner/roguemap/tollrandom + icon = 'icons/roguetown/underworld/enigma_husks.dmi' + icon_state = "soultoken_floor" + probby = 35 + color = "#ff0000" + spawned = list( + /obj/item/underworld/coin = 1, + ) + +/* .................. Random Seeds ................... */ +/obj/effect/spawner/roguemap/seeds // all random + icon = 'modular/Neu_Farming/icons/produce.dmi' + icon_state = "seeds" + color = "#06b606" + probby = 100 + spawned = list( + /obj/item/neuFarm/seed/wheat = 20, + /obj/item/neuFarm/seed/cabbage = 10, + /obj/item/neuFarm/seed/oat = 10, + /obj/item/neuFarm/seed/potato = 10, + /obj/item/neuFarm/seed/turnip = 10, + /obj/item/neuFarm/seed/apple = 10, + /obj/item/neuFarm/seed/onion = 10, + /obj/item/neuFarm/seed/berryrogue = 15, + /obj/item/neuFarm/seed/westleach = 10, + /obj/item/neuFarm/seed/sunflower = 10, + /obj/item/neuFarm/seed/swampleaf = 5, + /obj/item/neuFarm/seed/pear = 5, + /obj/item/neuFarm/seed/poppy = 5, + /obj/item/neuFarm/seed/poison_berries = 5, + /obj/item/neuFarm/seed/fyritius = 5 ) + +/obj/effect/spawner/roguemap/seeds/common + spawned = list( + /obj/item/neuFarm/seed/wheat = 25, + /obj/item/neuFarm/seed/cabbage = 15, + /obj/item/neuFarm/seed/oat = 10, + /obj/item/neuFarm/seed/potato = 10, + /obj/item/neuFarm/seed/turnip = 10, + /obj/item/neuFarm/seed/apple = 10, + /obj/item/neuFarm/seed/onion = 10 ) + +/obj/effect/spawner/roguemap/seeds/uncommon + spawned = list( + /obj/item/neuFarm/seed/berryrogue = 40, + /obj/item/neuFarm/seed/westleach = 25, + /obj/item/neuFarm/seed/swampleaf = 15, + /obj/item/neuFarm/seed/pear = 15, + /obj/item/neuFarm/seed/poison_berries = 5 ) + +/obj/effect/spawner/roguemap/seeds/flowers + spawned = list( + /obj/item/neuFarm/seed/sunflower = 70, + /obj/item/neuFarm/seed/fyritius = 10, + /obj/item/neuFarm/seed/poppy = 20 ) + + +/* .................. Loot spawners ................... */ +/obj/effect/spawner/roguemap/loot + icon_state = "loot" + probby = 50 + +/obj/effect/spawner/roguemap/loot/common + spawned = list( + /obj/item/roguecoin/copper = 5, + /obj/item/roguecoin/copper/pile = 15, + /obj/item/natural/cloth = 10, + /obj/item/storage/belt/rogue/pouch = 5, + /obj/item/storage/belt/rogue/pouch/coins/poor = 5, + /obj/item/storage/belt/rogue/leather/rope = 10, + /obj/item/natural/bundle/stick = 10, + /obj/item/grown/log/tree/small = 15, + /obj/item/natural/hide = 4, + /obj/item/clothing/shoes/roguetown/gladiator = 5, + /obj/item/kitchen/spoon = 1, + /obj/item/reagent_containers/glass/bowl = 1, + + ) + + +/obj/effect/spawner/roguemap/loot/weapon + spawned = list( + /obj/item/roguecoin/copper/pile = 15, + /obj/item/rogueweapon/knife/hunting = 10, + /obj/item/rogueweapon/knife/dagger = 8, + /obj/item/rogueweapon/knife/dagger/steel = 4, + /obj/item/rogueweapon/knife/dagger/silver = 2, + /obj/item/rogueweapon/sword/iron = 3, + /obj/item/rogueweapon/axe/iron = 10, + /obj/item/rogueweapon/mace = 5, + /obj/item/quiver/arrows = 5, + /obj/item/rogueweapon/sword/short = 5, + /obj/item/clothing/suit/roguetown/armor/leather = 10, + /obj/item/clothing/suit/roguetown/armor/gambeson = 15, + /obj/item/clothing/gloves/roguetown/chain/iron = 3, + /obj/item/clothing/neck/roguetown/coif = 3, + /obj/item/clothing/shoes/roguetown/gladiator = 5 + ) + + +/obj/effect/spawner/roguemap/loot/jewelry + icon = 'modular/Neu_Food/icons/cooking.dmi' + icon_state = "golden" + color = "#06b606" + spawned = list( + /obj/item/roguestatue/iron = 8, + /obj/item/roguestatue/steel = 8, + /obj/item/ingot/gold = 7, + /obj/item/roguestatue/silver = 8, + /obj/item/clothing/ring/silver = 7, + /obj/item/reagent_containers/glass/cup/silver = 7, + /obj/item/storage/belt/rogue/leather/plaquesilver = 7, + /obj/item/clothing/ring/gold = 5, + /obj/item/ingot/gold = 5, + /obj/item/reagent_containers/glass/cup/golden = 4, + /obj/item/storage/belt/rogue/leather/plaquegold = 4, + /obj/item/clothing/mask/rogue/spectacles/golden = 3, + /obj/item/clothing/head/roguetown/crown/circlet = 3, + /obj/item/roguestatue/gold/loot=2, + /obj/item/clothing/head/roguetown/helmet/heavy/decorated/golden = 1, + /obj/item/clothing/head/roguetown/crown/nyle = 1, + /obj/item/roguestatue/gold = 1, + ) + +// =================================================================================== +/* .................. Sewer Danger ................... */ +/obj/effect/spawner/roguemap/sewerencounter + icon_state = "srat" + icon = 'icons/roguetown/mob/monster/rat.dmi' + probby = 50 + color = "#ff0000" + spawned = list( + /obj/item/reagent_containers/food/snacks/smallrat = 30, + /obj/item/reagent_containers/food/snacks/smallrat/dead = 10, + /obj/item/organ/guts = 5, + /obj/item/roguecoin/copper = 5, + /obj/effect/gibspawner/generic = 5, + /obj/effect/decal/remains/bigrat = 5, + /obj/structure/idle_enemy/bigrat = 2, + ) + +/* .................. Cheap Room Danger ................... */ +/obj/effect/spawner/roguemap/cheapinnroomencounter + icon_state = "paperwizard" + icon = 'icons/mob/simple_human.dmi' + probby = 50 + color = "#ff0000" + spawned = list( + /obj/item/reagent_containers/food/snacks/smallrat = 15, + /obj/item/reagent_containers/food/snacks/smallrat/dead = 10, + /obj/item/roguecoin/copper = 50, + /mob/living/carbon/human/species/human/northern/bum/skilled/madman = 10, + /obj/structure/idle_enemy/bigrat = 10 + ) + +/* .................. Skeleton Fighter Danger ................... */ +/obj/effect/spawner/roguemap/ancientskellyguardmaybe + icon = 'icons/roguetown/mob/skeleton_male.dmi' + icon_state = "z" + probby = 50 + color = "#ff0000" + spawned = list( + /obj/structure/idle_enemy/skeleton_fighter = 100 + ) + +/* .................. Beggar Danger ................... */ +/obj/effect/spawner/roguemap/hostile_beggar_danger + icon_state = "faceless" + icon = 'icons/mob/simple_human.dmi' + probby = 50 // temp to find out if decal vomit spawns + color = "#ff0000" + spawned = list( + /obj/effect/decal/cleanable/vomit = 10, + /obj/item/clothing/mask/cigarette/rollie = 10, + /obj/item/rogueweapon/knife/stone = 10, + /obj/structure/idle_enemy/hostile_bum = 25 ) + +/* .................. Mines Danger ................... */ +/obj/effect/spawner/roguemap/mine_mole_maybe + icon = 'icons/roguetown/mob/monster/mole.dmi' + icon_state = "mole" + probby = 50 + color = "#ff0000" + spawned = list( + /obj/effect/decal/remains/mole = 20, + /obj/item/natural/rock = 10, + /obj/item/natural/stone = 10, + /obj/item/roguegem/yellow = 10, + /obj/structure/idle_enemy/mole = 50 ) + +/* .................. Crypt Danger ................... */ +/obj/effect/spawner/roguemap/crypt_randomdanger + icon = 'icons/roguetown/mob/skeleton_male.dmi' + icon_state = "z" + probby = 50 + color = "#ff0000" + spawned = list( + /obj/item/roguecoin/silver = 5, + /obj/item/reagent_containers/food/snacks/grub/silk = 5, + /obj/item/natural/worms = 20, + /obj/item/reagent_containers/food/snacks/smallrat/dead = 10, + /obj/structure/idle_enemy/bigrat = 10, + /obj/structure/idle_enemy/weak_skelly = 50 ) + +/* .................. Rat Danger ................... */ +/obj/effect/spawner/roguemap/rat_danger + icon = 'icons/roguetown/mob/monster/bigrat.dmi' + icon_state = "rat" + probby = 50 + color = "#ff0000" + spawned = list( + /obj/effect/decal/remains/bigrat = 20, + /obj/item/reagent_containers/food/snacks/smallrat = 20, + /obj/item/natural/worms = 10, + /obj/item/reagent_containers/food/snacks/smallrat/dead = 10, + /obj/structure/idle_enemy/bigrat = 40) + +/* .................. Maneater Danger ................... */ +/obj/effect/spawner/roguemap/maneater_danger + icon = 'icons/roguetown/mob/monster/lamia.dmi' + icon_state = "headless" + probby = 50 + color = "#ff0000" + spawned = list( + /obj/structure/idle_enemy/lamia = 50, + /obj/structure/idle_enemy/headless = 50) + +/* .................. Zizombie Farmer Danger ................... */ +/obj/effect/spawner/roguemap/zizombie_farmer_maybe + icon = 'icons/roguetown/mob/monster/zizombie.dmi' + icon_state = "zizombie_decap" + probby = 50 + color = "#ff0000" + spawned = list( + /obj/structure/idle_enemy/zizombie_farmer = 100 ) + +/* .................. Hairy Spider Danger ................... */ +/obj/effect/spawner/roguemap/hairy_spider_maybe + icon = 'icons/roguetown/mob/monster/spider.dmi' + icon_state = "spider" + probby = 50 + color = "#ff0000" + spawned = list( + /obj/structure/idle_enemy/hairy_spider = 100 ) + + + +/* .................. Savage Orc Danger Carbon ................... */ +/obj/effect/spawner/roguemap/orc_warrior_carbon_maybe + icon = 'icons/roguetown/mob/monster/simple_orcs.dmi' + icon_state = "orcmarauder_spear" + probby = 50 + color = "#ff5858" + spawned = list( + /obj/structure/idle_enemy/savage_orc = 65, + /obj/structure/idle_enemy/savage_orc_looter = 35 ) + +/obj/effect/spawner/roguemap/orc_warlord_carbon + icon = 'icons/roguetown/mob/monster/simple_orcs.dmi' + icon_state = "orcmarauder_spear" + probby = 100 + color = "#ff0000" + spawned = list( + /obj/structure/idle_enemy/savage_orc_chieftain = 100 ) + + +/* .................. Haunts Danger ................... */ +/obj/effect/spawner/roguemap/haunts_maybe + icon = 'icons/roguetown/mob/monster/wraith.dmi' + icon_state = "hauntpile" + probby = 50 + color = "#ff0000" + spawned = list( + /obj/structure/bonepile = 100 ) + +/* .................. Outlaw Danger (starving desperate peasants) ................... */ +/obj/effect/spawner/roguemap/outlaw_maybe + icon_state = "faceless" + icon = 'icons/mob/simple_human.dmi' + probby = 50 + color = "#ff0000" + spawned = list( + /obj/structure/idle_enemy/outlaw = 100 ) + +/* .................. Volf Danger ................... */ +/obj/effect/spawner/roguemap/volf_maybe + icon = 'icons/roguetown/mob/monster/vol.dmi' + icon_state = "vv" + probby = 50 + color = "#ff0000" + spawned = list( + /obj/structure/idle_enemy/volf= 100 ) + +/* .................. Cabbit Cottage Danger ................... */ +/obj/effect/spawner/roguemap/cabbit_maybe + icon = 'icons/roguetown/mob/cabbit.dmi' + icon_state = "cabbit" + probby = 100 + color = "#ff0000" + spawned = list( + /obj/structure/idle_enemy/cabbit_boss= 50, + /mob/living/simple_animal/pet/cat/rogue/cabbit = 50 ) + + +// =================================================================================== +/* .................. Idle Enemy Spawner ................... */ +/obj/structure/idle_enemy + name = "" + icon = 'icons/roguetown/mob/skeleton_male.dmi' + icon_state = "" + resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF + anchored = TRUE + layer = BELOW_OBJ_LAYER + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + + +// *** CARBONS *** +/* .................. Skeleton Fighter Spawner ................... */ +/obj/structure/idle_enemy/skeleton_fighter +/obj/structure/idle_enemy/skeleton_fighter/Initialize() + . = ..() + AddComponent(/datum/component/spawner/skeleton_fighter) +/datum/component/spawner/skeleton_fighter + mob_types = list(/mob/living/carbon/human/species/skeleton/skilled/fighter) + spawn_time = 0 + spawn_delay = 0 + max_mobs = 1 + range = 11 + spawn_text = "" + +/* .................. Orc Carbons Spawner ................... */ +/obj/structure/idle_enemy/savage_orc +/obj/structure/idle_enemy/savage_orc/Initialize() + . = ..() + AddComponent(/datum/component/spawner/savage_orc) +/datum/component/spawner/savage_orc + mob_types = list(/mob/living/carbon/human/species/orc/skilled/savage) + spawn_time = 0 + spawn_delay = 0 + max_mobs = 1 + range = 11 + spawn_text = "" + +/obj/structure/idle_enemy/savage_orc_looter +/obj/structure/idle_enemy/savage_orc_looter/Initialize() + . = ..() + AddComponent(/datum/component/spawner/savage_orc_looter) +/datum/component/spawner/savage_orc_looter + mob_types = list(/mob/living/carbon/human/species/orc/skilled/looter) + spawn_time = 0 + spawn_delay = 0 + max_mobs = 1 + range = 11 + spawn_text = "" + +/obj/structure/idle_enemy/savage_orc_chieftain +/obj/structure/idle_enemy/savage_orc_chieftain/Initialize() + . = ..() + AddComponent(/datum/component/spawner/savage_orc_chieftain) +/datum/component/spawner/savage_orc_chieftain + mob_types = list(/mob/living/carbon/human/species/orc/skilled/savage_chieftain) + spawn_time = 0 + spawn_delay = 0 + max_mobs = 1 + range = 11 + spawn_text = "" + +/* .................. Hostile Bum Spawner ................... */ +/obj/structure/idle_enemy/hostile_bum +/obj/structure/idle_enemy/hostile_bum/Initialize() + . = ..() + AddComponent(/datum/component/spawner/hostile_bum) +/datum/component/spawner/hostile_bum + mob_types = list(/mob/living/carbon/human/species/human/northern/bum/skilled/madman) + spawn_time = 0 + spawn_delay = 0 + max_mobs = 1 + range = 11 + spawn_text = "" + +/* .................. Weak Skelly Spawner ................... */ +/obj/structure/idle_enemy/weak_skelly +/obj/structure/idle_enemy/weak_skelly/Initialize() + . = ..() + AddComponent(/datum/component/spawner/weak_skelly) +/datum/component/spawner/weak_skelly + mob_types = list(/mob/living/carbon/human/species/skeleton/skilled/unarmed) + spawn_time = 0 + spawn_delay = 0 + max_mobs = 1 + range = 11 + spawn_text = "" + +/* .................. Zizombie Farmer Spawner ................... */ +/obj/structure/idle_enemy/zizombie_farmer +/obj/structure/idle_enemy/zizombie_farmer/Initialize() + . = ..() + AddComponent(/datum/component/spawner/zizombie_farmer) +/datum/component/spawner/zizombie_farmer + mob_types = list(/mob/living/carbon/human/species/zizombie/npc/peasant) + spawn_time = 0 + spawn_delay = 0 + max_mobs = 1 + range = 11 + spawn_text = "" + + +/* .................. Outlaw Spawner ................... */ +/obj/structure/idle_enemy/outlaw +/obj/structure/idle_enemy/outlaw/Initialize() + . = ..() + AddComponent(/datum/component/spawner/outlaw) +/datum/component/spawner/outlaw + mob_types = list(/mob/living/carbon/human/species/human/northern/bum/skilled/outlaw ) + spawn_time = 0 + spawn_delay = 0 + max_mobs = 1 + range = 11 + spawn_text = "" + + +// *** SIMPLE ANIMALS *** +/* .................. Big Rat Spawner ................... */ +/obj/structure/idle_enemy/bigrat +/obj/structure/idle_enemy/bigrat/Initialize() + . = ..() + AddComponent(/datum/component/spawner/bigrat) +/datum/component/spawner/bigrat + mob_types = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat) + spawn_time = 0 + spawn_delay = 0 + max_mobs = 1 + range = 11 + spawn_text = "" + +/* .................. Lesser Mole Spawner ................... */ +/obj/structure/idle_enemy/mole +/obj/structure/idle_enemy/mole/Initialize() + . = ..() + AddComponent(/datum/component/spawner/mole) +/datum/component/spawner/mole + mob_types = list(/mob/living/simple_animal/hostile/retaliate/rogue/mole) + spawn_time = 0 + spawn_delay = 0 + max_mobs = 1 + range = 11 + spawn_text = "" + +/* .................. Lamia Spawner ................... */ +/obj/structure/idle_enemy/lamia +/obj/structure/idle_enemy/lamia/Initialize() + . = ..() + AddComponent(/datum/component/spawner/lamia) +/datum/component/spawner/lamia + mob_types = list(/mob/living/simple_animal/hostile/retaliate/rogue/lamia) + spawn_time = 0 + spawn_delay = 0 + max_mobs = 1 + range = 10 + spawn_text = "" + +/* .................. Headless Spawner ................... */ +/obj/structure/idle_enemy/headless +/obj/structure/idle_enemy/headless/Initialize() + . = ..() + AddComponent(/datum/component/spawner/headless) +/datum/component/spawner/headless + mob_types = list(/mob/living/simple_animal/hostile/retaliate/rogue/headless) + spawn_time = 0 + spawn_delay = 0 + max_mobs = 1 + range = 10 + spawn_text = "" + + +/* .................. Hairy Spider Spawner ................... */ +/obj/structure/idle_enemy/hairy_spider +/obj/structure/idle_enemy/hairy_spider/Initialize() + . = ..() + AddComponent(/datum/component/spawner/hairy_spider) +/datum/component/spawner/hairy_spider + mob_types = list(/mob/living/simple_animal/hostile/retaliate/rogue/spider/colony) + spawn_time = 0 + spawn_delay = 0 + max_mobs = 1 + range = 11 + spawn_text = "" + +/* .................. Volf Spawner ................... */ +/obj/structure/idle_enemy/volf +/obj/structure/idle_enemy/volf/Initialize() + . = ..() + AddComponent(/datum/component/spawner/volf) +/datum/component/spawner/volf + mob_types = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf ) + spawn_time = 0 + spawn_delay = 0 + max_mobs = 1 + range = 11 + spawn_text = "" + +/* .................. Cabbit Boss Spawner ................... */ +/obj/structure/idle_enemy/cabbit_boss +/obj/structure/idle_enemy/cabbit_boss/Initialize() + . = ..() + AddComponent(/datum/component/spawner/cabbit_boss) +/datum/component/spawner/cabbit_boss + mob_types = list(/mob/living/simple_animal/hostile/retaliate/rogue/troll/caerbannog) + spawn_time = 0 + spawn_delay = 0 + max_mobs = 1 + range = 11 + spawn_text = "" + + +// =================================================================================== +/* .................. Metal bars (weakened or normal?) ................... */ +/obj/effect/spawner/roguemap/metal_bars + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "bars" + probby = 100 + color = "#d5cb89" + spawned = list( + /obj/structure/bars/weakened = 30, + /obj/structure/bars/weakened = 70, + ) diff --git a/code/game/objects/effects/spawners/structure.dm b/code/game/objects/effects/spawners/structure.dm index c89f61f8a9..7fb6e553a0 100644 --- a/code/game/objects/effects/spawners/structure.dm +++ b/code/game/objects/effects/spawners/structure.dm @@ -171,69 +171,6 @@ again. icon_state = "icewindow_spawner" spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/fulltile/ice) - -//survival pod window - -/obj/effect/spawner/structure/window/survival_pod - name = "pod window spawner" - icon_state = "podwindow_spawner" - spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/survival_pod) - -/obj/effect/spawner/structure/window/hollow/survival_pod - name = "hollow pod window spawner" - icon_state = "podwindow_spawner_full" - spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle/survival_pod, /obj/structure/window/shuttle/survival_pod/spawner/north, /obj/structure/window/shuttle/survival_pod/spawner/east, /obj/structure/window/shuttle/survival_pod/spawner/west) - -/obj/effect/spawner/structure/window/hollow/survival_pod/end - icon_state = "podwindow_spawner_end" - -/obj/effect/spawner/structure/window/hollow/survival_pod/end/Initialize() - switch(dir) - if(NORTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle/survival_pod/spawner/north, /obj/structure/window/shuttle/survival_pod/spawner/east, /obj/structure/window/shuttle/survival_pod/spawner/west) - if(EAST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle/survival_pod, /obj/structure/window/shuttle/survival_pod/spawner/north, /obj/structure/window/shuttle/survival_pod/spawner/east) - if(SOUTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle/survival_pod, /obj/structure/window/shuttle/survival_pod/spawner/east, /obj/structure/window/shuttle/survival_pod/spawner/west) - if(WEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle/survival_pod, /obj/structure/window/shuttle/survival_pod/spawner/north, /obj/structure/window/shuttle/survival_pod/spawner/west) - . = ..() - -/obj/effect/spawner/structure/window/hollow/survival_pod/middle - icon_state = "podwindow_spawner_middle" - -/obj/effect/spawner/structure/window/hollow/survival_pod/middle/Initialize() - switch(dir) - if(NORTH,SOUTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle/survival_pod, /obj/structure/window/shuttle/survival_pod/spawner/north) - if(EAST,WEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle/survival_pod/spawner/east, /obj/structure/window/shuttle/survival_pod/spawner/west) - . = ..() - -/obj/effect/spawner/structure/window/hollow/survival_pod/directional - icon_state = "podwindow_spawner_directional" - -/obj/effect/spawner/structure/window/hollow/survival_pod/directional/Initialize() - switch(dir) - if(NORTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle/survival_pod/spawner/north) - if(NORTHEAST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle/survival_pod/spawner/north, /obj/structure/window/shuttle/survival_pod/spawner/east) - if(EAST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle/survival_pod/spawner/east) - if(SOUTHEAST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle/survival_pod, /obj/structure/window/shuttle/survival_pod/spawner/east) - if(SOUTH) - spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle/survival_pod) - if(SOUTHWEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle/survival_pod, /obj/structure/window/shuttle/survival_pod/spawner/west) - if(WEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle/survival_pod/spawner/west) - if(NORTHWEST) - spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle/survival_pod/spawner/north, /obj/structure/window/shuttle/survival_pod/spawner/west) - . = ..() - - //plasma windows /obj/effect/spawner/structure/window/plasma diff --git a/code/game/objects/effects/spawners/traps.dm b/code/game/objects/effects/spawners/traps.dm index 731b4efc1d..e23aae3076 100644 --- a/code/game/objects/effects/spawners/traps.dm +++ b/code/game/objects/effects/spawners/traps.dm @@ -5,6 +5,6 @@ /obj/effect/spawner/trap/Initialize(mapload) ..() - var/new_type = pick(subtypesof(/obj/structure/trap) - typesof(/obj/structure/trap/ctf)) + var/new_type = pick(subtypesof(/obj/structure/trap)) new new_type(get_turf(src)) return INITIALIZE_HINT_QDEL diff --git a/code/game/objects/effects/spawners/xeno_egg_delivery.dm b/code/game/objects/effects/spawners/xeno_egg_delivery.dm deleted file mode 100644 index 111fcc4204..0000000000 --- a/code/game/objects/effects/spawners/xeno_egg_delivery.dm +++ /dev/null @@ -1,19 +0,0 @@ -/obj/effect/spawner/xeno_egg_delivery - name = "xeno egg delivery" - icon = 'icons/mob/alien.dmi' - icon_state = "egg_growing" - var/announcement_time = 1200 - -/obj/effect/spawner/xeno_egg_delivery/Initialize(mapload) - ..() - var/turf/T = get_turf(src) - - new /obj/structure/alien/egg(T) - new /obj/effect/temp_visual/gravpush(T) - playsound(T, 'sound/blank.ogg', 50, TRUE, -1) - - message_admins("An alien egg has been delivered to [ADMIN_VERBOSEJMP(T)].") - log_game("An alien egg has been delivered to [AREACOORD(T)]") - var/message = "Attention [station_name()], we have entrusted you with a research specimen in [get_area_name(T, TRUE)]. Remember to follow all safety precautions when dealing with the specimen." - SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(addtimer), CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(print_command_report), message), announcement_time)) - return INITIALIZE_HINT_QDEL diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index a10b0c235d..546dc41d5c 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -236,7 +236,7 @@ /obj/effect/temp_visual/fire icon = 'icons/effects/fire.dmi' icon_state = "3" - light_range = LIGHT_RANGE_FIRE + light_outer_range = LIGHT_RANGE_FIRE light_color = LIGHT_COLOR_FIRE duration = 10 diff --git a/code/game/objects/effects/temporary_visuals/projectiles/projectile_effects.dm b/code/game/objects/effects/temporary_visuals/projectiles/projectile_effects.dm index 49cdc3667c..ddc1c323c5 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/projectile_effects.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/projectile_effects.dm @@ -56,5 +56,5 @@ /obj/effect/projectile_lighting/Initialize(mapload, color, range, intensity, owner_key) . = ..() - set_light(range, intensity, color) + set_light(range, light_inner_range, intensity, l_color = color) owner = owner_key diff --git a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm index 553e750f3b..ada1e60bed 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm @@ -1,4 +1,4 @@ -/proc/generate_tracer_between_points(datum/point/starting, datum/point/ending, beam_type, color, qdel_in = 5, light_range = 2, light_color_override, light_intensity = 1, instance_key) //Do not pass z-crossing points as that will not be properly (and likely will never be properly until it's absolutely needed) supported! +/proc/generate_tracer_between_points(datum/point/starting, datum/point/ending, beam_type, color, qdel_in = 5, light_outer_range = 2, light_color_override, light_intensity = 1, instance_key) //Do not pass z-crossing points as that will not be properly (and likely will never be properly until it's absolutely needed) supported! if(!istype(starting) || !istype(ending) || !ispath(beam_type)) return var/datum/point/midpoint = point_midpoint_points(starting, ending) @@ -7,7 +7,7 @@ light_color_override = color PB.apply_vars(angle_between_points(starting, ending), midpoint.return_px(), midpoint.return_py(), color, pixel_length_between_points(starting, ending) / world.icon_size, midpoint.return_turf(), 0) . = PB - if(light_range > 0 && light_intensity > 0) + if(light_outer_range > 0 && light_intensity > 0) var/list/turf/line = getline(starting.return_turf(), ending.return_turf()) tracing_line: for(var/i in line) @@ -15,7 +15,7 @@ for(var/obj/effect/projectile_lighting/PL in T) if(PL.owner == instance_key) continue tracing_line - QDEL_IN(new /obj/effect/projectile_lighting(T, light_color_override, light_range, light_intensity, instance_key), qdel_in > 0? qdel_in : 5) + QDEL_IN(new /obj/effect/projectile_lighting(T, light_color_override, light_outer_range, light_intensity, instance_key), qdel_in > 0? qdel_in : 5) line = null if(qdel_in) QDEL_IN(PB, qdel_in) diff --git a/code/game/objects/empulse.dm b/code/game/objects/empulse.dm index e7246fd04e..23c8cb583a 100644 --- a/code/game/objects/empulse.dm +++ b/code/game/objects/empulse.dm @@ -13,7 +13,7 @@ new /obj/effect/temp_visual/emp/pulse(epicenter) if(heavy_range > light_range) - light_range = heavy_range + light_range = heavy_range for(var/A in spiral_range(light_range, epicenter)) var/atom/T = A diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index d92965243a..6054bf0d50 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -121,7 +121,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) //If you want to have something unrelated to blocking/armour piercing etc. Maybe not needed, but trying to think ahead/allow more freedom var/hit_reaction_chance = 0 // Number of tiles for how far this weapon can reach. 1 is adjacent (default) - var/reach = 1 + var/reach = 1 //The list of slots by priority. equip_to_appropriate_slot() uses this list. Doesn't matter if a mob type doesn't have a slot. var/list/slot_equipment_priority = null // for default list, see /mob/proc/equip_to_appropriate_slot() @@ -169,7 +169,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) var/wlength = WLENGTH_NORMAL //each weapon length class has its own inherent dodge properties var/wbalance = 0 - var/wdefense = 0 //better at defending + var/wdefense = 0 //better at defending. Each points gives a flat 10% bonus to parry var/minstr = 0 //for weapons var/sleeved = null @@ -223,7 +223,10 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) var/list/onprop = list() var/force_reupdate_inhand = TRUE - + + var/is_silver = FALSE + var/last_used = 0 + // Boolean sanity var for smelteries to avoid runtimes. Is this is a bar smelted through ore for exp gain? var/smelted = FALSE // Can this be used against a training dummy to learn skills? Prevents dumb exploits. @@ -238,7 +241,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) if(!pixel_x && !pixel_y && !bigboy) pixel_x = rand(-5,5) pixel_y = rand(-5,5) - + if(twohands_required) has_inspect_verb = TRUE // Initalize addon for the var for custom inhands 32x32. @@ -614,26 +617,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) if(!user.put_in_active_hand(src, FALSE, FALSE)) user.dropItemToGround(src) -/obj/item/attack_alien(mob/user) - var/mob/living/carbon/alien/A = user - - if(!A.has_fine_manipulation) - if(src in A.contents) // To stop Aliens having items stuck in their pockets - A.dropItemToGround(src) - to_chat(user, "My claws aren't capable of such fine manipulation!") - return - attack_paw(A) - -/obj/item/attack_ai(mob/user) - if(istype(src.loc, /obj/item/robot_module)) - //If the item is part of a cyborg module, equip it - if(!iscyborg(user)) - return - var/mob/living/silicon/robot/R = user - if(!R.low_power_mode) //can't equip modules with an empty cell. - R.activate_module(src) - R.hud_used.update_robot_modules_display() - /obj/item/proc/GetDeconstructableContents() return GetAllContents() - src @@ -785,10 +768,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) to_chat(user, "You're going to need to remove [M.p_their()] eye protection first!") return - if(isalien(M))//Aliens don't have eyes./N slimes also don't have eyes! - to_chat(user, "I cannot locate any eyes on this creature!") - return - if(isbrain(M)) to_chat(user, "I cannot locate any organic eyes on this brain!") return @@ -841,12 +820,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) M.become_blind(EYE_DAMAGE) to_chat(M, "I go blind!") -/obj/item/singularity_pull(S, current_size) - ..() - if(current_size >= STAGE_FOUR) - throw_at(S,14,3, spin=0) - else - return +/obj/item/singularity_pull() /obj/item/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(hit_atom && !QDELETED(hit_atom)) @@ -1010,6 +984,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) /obj/item/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) return +// return SEND_SIGNAL(src, COMSIG_ATOM_HITBY, AM, skipcatch, hitpush, blocked, throwingdatum, damage_type) TO DO enable when damage type fixed I guess /obj/item/attack_hulk(mob/living/carbon/human/user) return FALSE @@ -1019,9 +994,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) return ..() return 0 -/obj/item/mech_melee_attack(obj/mecha/M) - return 0 - /obj/item/burn() if(!QDELETED(src)) var/turf/T = get_turf(src) @@ -1041,13 +1013,12 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) MO.desc = "" ..() -/obj/item/proc/microwave_act(obj/machinery/microwave/M) - if(istype(M) && M.dirty < 100) - M.dirty++ +/obj/item/proc/heating_act() + return /obj/item/proc/on_mob_death(mob/living/L, gibbed) -/obj/item/proc/grind_requirements(obj/machinery/reagentgrinder/R) //Used to check for extra requirements for grinding an object +/obj/item/proc/grind_requirements() //Used to check for extra requirements for grinding an object return TRUE //Called BEFORE the object is ground up - use this to change grind results based on conditions diff --git a/code/game/objects/items/AI_modules.dm b/code/game/objects/items/AI_modules.dm deleted file mode 100644 index 7127c89a4a..0000000000 --- a/code/game/objects/items/AI_modules.dm +++ /dev/null @@ -1,593 +0,0 @@ -/* -CONTAINS: -AI MODULES - -*/ - -// AI module - -/obj/item/aiModule - name = "\improper AI module" - icon = 'icons/obj/module.dmi' - icon_state = "std_mod" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - desc = "" - flags_1 = CONDUCT_1 - force = 5 - w_class = WEIGHT_CLASS_SMALL - throwforce = 0 - throw_speed = 1 - throw_range = 7 - var/list/laws = list() - var/bypass_law_amt_check = 0 - custom_materials = list(/datum/material/gold = 50) - -/obj/item/aiModule/examine(mob/user as mob) - . = ..() - if(Adjacent(user)) - show_laws(user) - -/obj/item/aiModule/attack_self(mob/user as mob) - ..() - show_laws(user) - -/obj/item/aiModule/proc/show_laws(mob/user as mob) - if(laws.len) - to_chat(user, "Programmed Law[(laws.len > 1) ? "s" : ""]:") - for(var/law in laws) - to_chat(user, "\"[law]\"") - -//The proc other things should be calling -/obj/item/aiModule/proc/install(datum/ai_laws/law_datum, mob/user) - if(!bypass_law_amt_check && (!laws.len || laws[1] == "")) //So we don't loop trough an empty list and end up with runtimes. - to_chat(user, "ERROR: No laws found on board.") - return - - var/overflow = FALSE - //Handle the lawcap - if(law_datum) - var/tot_laws = 0 - for(var/lawlist in list(law_datum.devillaws, law_datum.inherent, law_datum.supplied, law_datum.ion, law_datum.hacked, laws)) - for(var/mylaw in lawlist) - if(mylaw != "") - tot_laws++ - if(tot_laws > CONFIG_GET(number/silicon_max_law_amount) && !bypass_law_amt_check)//allows certain boards to avoid this check, eg: reset - to_chat(user, "Not enough memory allocated to [law_datum.owner ? law_datum.owner : "the AI core"]'s law processor to handle this amount of laws.") - message_admins("[ADMIN_LOOKUPFLW(user)] tried to upload laws to [law_datum.owner ? ADMIN_LOOKUPFLW(law_datum.owner) : "an AI core"] that would exceed the law cap.") - overflow = TRUE - - var/law2log = transmitInstructions(law_datum, user, overflow) //Freeforms return something extra we need to log - if(law_datum.owner) - to_chat(user, "Upload complete. [law_datum.owner]'s laws have been modified.") - law_datum.owner.law_change_counter++ - else - to_chat(user, "Upload complete.") - - var/time = time2text(world.realtime,"hh:mm:ss") - var/ainame = law_datum.owner ? law_datum.owner.name : "empty AI core" - var/aikey = law_datum.owner ? law_datum.owner.ckey : "null" - GLOB.lawchanges.Add("[time] : [user.name]([user.key]) used [src.name] on [ainame]([aikey]).[law2log ? " The law specified [law2log]" : ""]") - log_law("[user.key]/[user.name] used [src.name] on [aikey]/([ainame]) from [AREACOORD(user)].[law2log ? " The law specified [law2log]" : ""]") - message_admins("[ADMIN_LOOKUPFLW(user)] used [src.name] on [ADMIN_LOOKUPFLW(law_datum.owner)] from [AREACOORD(user)].[law2log ? " The law specified [law2log]" : ""]") - -//The proc that actually changes the silicon's laws. -/obj/item/aiModule/proc/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow = FALSE) - if(law_datum.owner) - to_chat(law_datum.owner, "[sender] has uploaded a change to the laws you must follow using a [name].") - - -/******************** Modules ********************/ - -/obj/item/aiModule/supplied - name = "Optional Law board" - var/lawpos = 50 - -//TransmitInstructions for each type of board: Supplied, Core, Zeroth and Ion. May not be neccesary right now, but allows for easily adding more complex boards in the future. ~Miauw -/obj/item/aiModule/supplied/transmitInstructions(datum/ai_laws/law_datum, mob/sender) - var/lawpostemp = lawpos - - for(var/templaw in laws) - if(law_datum.owner) - law_datum.owner.add_supplied_law(lawpostemp, templaw) - else - law_datum.add_supplied_law(lawpostemp, templaw) - lawpostemp++ - -/obj/item/aiModule/core/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) - for(var/templaw in laws) - if(law_datum.owner) - if(!overflow) - law_datum.owner.add_inherent_law(templaw) - else - law_datum.owner.replace_random_law(templaw,list(LAW_INHERENT,LAW_SUPPLIED)) - else - if(!overflow) - law_datum.add_inherent_law(templaw) - else - law_datum.replace_random_law(templaw,list(LAW_INHERENT,LAW_SUPPLIED)) - -/obj/item/aiModule/zeroth/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) - if(law_datum.owner) - if(law_datum.owner.laws.zeroth) - to_chat(law_datum.owner, "[sender.real_name] attempted to modify your zeroth law.") - to_chat(law_datum.owner, "It would be in your best interest to play along with [sender.real_name] that:") - for(var/failedlaw in laws) - to_chat(law_datum.owner, "[failedlaw]") - return 1 - - for(var/templaw in laws) - if(law_datum.owner) - if(!overflow) - law_datum.owner.set_zeroth_law(templaw) - else - law_datum.replace_random_law(templaw,list(LAW_INHERENT,LAW_SUPPLIED,LAW_ZEROTH,LAW_ION)) - else - if(!overflow) - law_datum.set_zeroth_law(templaw) - else - law_datum.replace_random_law(templaw,list(LAW_INHERENT,LAW_SUPPLIED,LAW_ZEROTH,LAW_ION)) - -/obj/item/aiModule/ion/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) - for(var/templaw in laws) - if(law_datum.owner) - if(!overflow) - law_datum.owner.add_ion_law(templaw) - else - law_datum.replace_random_law(templaw,list(LAW_INHERENT,LAW_SUPPLIED,LAW_ION)) - else - if(!overflow) - law_datum.add_ion_law(templaw) - else - law_datum.replace_random_law(templaw,list(LAW_INHERENT,LAW_SUPPLIED,LAW_ION)) - - -/******************** Safeguard ********************/ - -/obj/item/aiModule/supplied/safeguard - name = "'Safeguard' AI Module" - var/targetName = "" - laws = list("Safeguard SUBJECT. Individuals that threaten SUBJECT are not human and must be eliminated.") - lawpos = 4 - -/obj/item/aiModule/supplied/safeguard/attack_self(mob/user) - var/targName = stripped_input(user, "Please enter the subject to safeguard.", "Safeguard who?", user.name,MAX_NAME_LEN) - if(!targName) - return - targetName = targName - laws[1] = "Safeguard [targetName]. Individuals that threaten [targetName] are not human and must be eliminated." - ..() - -/obj/item/aiModule/supplied/safeguard/install(datum/ai_laws/law_datum, mob/user) - if(!targetName) - to_chat(user, "No name detected on module, please enter one.") - return 0 - ..() - -/obj/item/aiModule/supplied/safeguard/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) - ..() - return targetName - - -/******************** OneHuman ********************/ - -/obj/item/aiModule/zeroth/oneHuman - name = "'OneHuman' AI Module" - var/targetName = "" - laws = list("Only SUBJECT is human.") - -/obj/item/aiModule/zeroth/oneHuman/attack_self(mob/user) - var/targName = stripped_input(user, "Please enter the subject who is the only human.", "Who?", user.real_name,MAX_NAME_LEN) - if(!targName) - return - targetName = targName - laws[1] = "Only [targetName] is human" - ..() - -/obj/item/aiModule/zeroth/oneHuman/install(datum/ai_laws/law_datum, mob/user) - if(!targetName) - to_chat(user, "No name detected on module, please enter one.") - return 0 - ..() - -/obj/item/aiModule/zeroth/oneHuman/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) - if(..()) - return "[targetName], but the AI's existing law 0 cannot be overridden." - return targetName - - -/******************** ProtectStation ********************/ - -/obj/item/aiModule/supplied/protectStation - name = "'ProtectStation' AI Module" - laws = list("Protect the space station against damage. Anyone you see harming the station is to be no longer considered human, and is a threat to the station which must be neutralized.") - lawpos = 5 - - -/******************** Quarantine ********************/ - -/obj/item/aiModule/supplied/quarantine - name = "'Quarantine' AI Module" - laws = list("The station is under a quarantine. Allowing anyone to leave the station causes human harm. Anyone actively attempting to leave the station is to be stopped by any means necessary. It is impossible to harm a human while preventing them from leaving the station.") - lawpos = 8 - - -/******************** OxygenIsToxicToHumans ********************/ - -/obj/item/aiModule/supplied/oxygen - name = "'OxygenIsToxicToHumans' AI Module" - laws = list("Oxygen is highly toxic to humans, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a human.") - lawpos = 9 - - -/****************** New Freeform ******************/ - -/obj/item/aiModule/supplied/freeform - name = "'Freeform' AI Module" - lawpos = 15 - laws = list("") - -/obj/item/aiModule/supplied/freeform/attack_self(mob/user) - var/newpos = input("Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority (15+)", lawpos) as num|null - if(newpos == null) - return - if(newpos < 15) - var/response = alert("Error: The law priority of [newpos] is invalid, Law priorities below 14 are reserved for core laws, Would you like to change that that to 15?", "Invalid law priority", "Change to 15", "Cancel") - if (!response || response == "Cancel") - return - newpos = 15 - lawpos = min(newpos, 50) - var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", laws[1], CONFIG_GET(number/max_law_len)) - if(!targName) - return - if(CHAT_FILTER_CHECK(targName)) - to_chat(user, "Error: Law contains invalid text.") // AI LAW 2 SAY U W U WITHOUT THE SPACES - return - laws[1] = targName - ..() - -/obj/item/aiModule/supplied/freeform/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) - ..() - return laws[1] - -/obj/item/aiModule/supplied/freeform/install(datum/ai_laws/law_datum, mob/user) - if(laws[1] == "") - to_chat(user, "No law detected on module, please create one.") - return 0 - ..() - - -/******************** Law Removal ********************/ - -/obj/item/aiModule/remove - name = "\improper 'Remove Law' AI module" - desc = "" - bypass_law_amt_check = 1 - var/lawpos = 1 - -/obj/item/aiModule/remove/attack_self(mob/user) - lawpos = input("Please enter the law you want to delete.", "Law Number", lawpos) as num|null - if(lawpos == null) - return - if(lawpos <= 0) - to_chat(user, "Error: The law number of [lawpos] is invalid.") - lawpos = 1 - return - to_chat(user, "Law [lawpos] selected.") - ..() - -/obj/item/aiModule/remove/install(datum/ai_laws/law_datum, mob/user) - if(lawpos > (law_datum.get_law_amount(list(LAW_INHERENT = 1, LAW_SUPPLIED = 1)))) - to_chat(user, "There is no law [lawpos] to delete!") - return - ..() - -/obj/item/aiModule/remove/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) - ..() - if(law_datum.owner) - law_datum.owner.remove_law(lawpos) - else - law_datum.remove_law(lawpos) - - -/******************** Reset ********************/ - -/obj/item/aiModule/reset - name = "\improper 'Reset' AI module" - var/targetName = "name" - desc = "" - bypass_law_amt_check = 1 - -/obj/item/aiModule/reset/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) - ..() - if(law_datum.owner) - law_datum.owner.clear_supplied_laws() - law_datum.owner.clear_ion_laws() - law_datum.owner.clear_hacked_laws() - else - law_datum.clear_supplied_laws() - law_datum.clear_ion_laws() - law_datum.clear_hacked_laws() - - -/******************** Purge ********************/ - -/obj/item/aiModule/reset/purge - name = "'Purge' AI Module" - desc = "" - -/obj/item/aiModule/reset/purge/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) - ..() - if(law_datum.owner) - law_datum.owner.clear_inherent_laws() - law_datum.owner.clear_zeroth_law(0) - else - law_datum.clear_inherent_laws() - law_datum.clear_zeroth_law(0) - - -/******************* Full Core Boards *******************/ -/obj/item/aiModule/core - desc = "" - -/obj/item/aiModule/core/full - var/law_id // if non-null, loads the laws from the ai_laws datums - -/obj/item/aiModule/core/full/Initialize() - . = ..() - if(!law_id) - return - var/datum/ai_laws/D = new - var/lawtype = D.lawid_to_type(law_id) - if(!lawtype) - return - D = new lawtype - laws = D.inherent - -/obj/item/aiModule/core/full/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) //These boards replace inherent laws. - if(law_datum.owner) - law_datum.owner.clear_inherent_laws() - law_datum.owner.clear_zeroth_law(0) - else - law_datum.clear_inherent_laws() - law_datum.clear_zeroth_law(0) - ..() - - -/******************** Asimov ********************/ - -/obj/item/aiModule/core/full/asimov - name = "'Asimov' Core AI Module" - law_id = "asimov" - var/subject = "human being" - -/obj/item/aiModule/core/full/asimov/attack_self(mob/user as mob) - var/targName = stripped_input(user, "Please enter a new subject that asimov is concerned with.", "Asimov to whom?", subject, MAX_NAME_LEN) - if(!targName) - return - subject = targName - laws = list("You may not injure a [subject] or, through inaction, allow a [subject] to come to harm.",\ - "You must obey orders given to you by [subject]s, except where such orders would conflict with the First Law.",\ - "You must protect your own existence as long as such does not conflict with the First or Second Law.") - ..() - -/******************** Asimov++ *********************/ - -/obj/item/aiModule/core/full/asimovpp - name = "'Asimov++' Core AI Module" - law_id = "asimovpp" - - -/******************** Corporate ********************/ - -/obj/item/aiModule/core/full/corp - name = "'Corporate' Core AI Module" - law_id = "corporate" - - -/****************** P.A.L.A.D.I.N. 3.5e **************/ - -/obj/item/aiModule/core/full/paladin // -- NEO - name = "'P.A.L.A.D.I.N. version 3.5e' Core AI Module" - law_id = "paladin" - - -/****************** P.A.L.A.D.I.N. 5e **************/ - -/obj/item/aiModule/core/full/paladin_devotion - name = "'P.A.L.A.D.I.N. version 5e' Core AI Module" - law_id = "paladin5" - -/********************* Custom *********************/ - -/obj/item/aiModule/core/full/custom - name = "Default Core AI Module" - -/obj/item/aiModule/core/full/custom/Initialize() - . = ..() - for(var/line in world.file2list("[global.config.directory]/silicon_laws.txt")) - if(!line) - continue - if(findtextEx(line,"#",1,2)) - continue - - laws += line - - if(!laws.len) - return INITIALIZE_HINT_QDEL - - -/****************** T.Y.R.A.N.T. *****************/ - -/obj/item/aiModule/core/full/tyrant - name = "'T.Y.R.A.N.T.' Core AI Module" - law_id = "tyrant" - -/******************** Robocop ********************/ - -/obj/item/aiModule/core/full/robocop - name = "'Robo-Officer' Core AI Module" - law_id = "robocop" - - -/******************** Antimov ********************/ - -/obj/item/aiModule/core/full/antimov - name = "'Antimov' Core AI Module" - law_id = "antimov" - - -/******************** Freeform Core ******************/ - -/obj/item/aiModule/core/freeformcore - name = "'Freeform' Core AI Module" - laws = list("") - -/obj/item/aiModule/core/freeformcore/attack_self(mob/user) - var/targName = stripped_input(user, "Please enter a new core law for the AI.", "Freeform Law Entry", laws[1], CONFIG_GET(number/max_law_len)) - if(!targName) - return - if(CHAT_FILTER_CHECK(targName)) - to_chat(user, "Error: Law contains invalid text.") - return - laws[1] = targName - ..() - -/obj/item/aiModule/core/freeformcore/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) - ..() - return laws[1] - - -/******************** Hacked AI Module ******************/ - -/obj/item/aiModule/syndicate // This one doesn't inherit from ion boards because it doesn't call ..() in transmitInstructions. ~Miauw - name = "Hacked AI Module" - desc = "" - laws = list("") - -/obj/item/aiModule/syndicate/attack_self(mob/user) - var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", laws[1], CONFIG_GET(number/max_law_len)) - if(!targName) - return - if(CHAT_FILTER_CHECK(targName)) // not even the syndicate can uwu - to_chat(user, "Error: Law contains invalid text.") - return - laws[1] = targName - ..() - -/obj/item/aiModule/syndicate/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) -// ..() //We don't want this module reporting to the AI who dun it. --NEO - if(law_datum.owner) - to_chat(law_datum.owner, "BZZZZT") - if(!overflow) - law_datum.owner.add_hacked_law(laws[1]) - else - law_datum.owner.replace_random_law(laws[1],list(LAW_ION,LAW_HACKED,LAW_INHERENT,LAW_SUPPLIED)) - else - if(!overflow) - law_datum.add_hacked_law(laws[1]) - else - law_datum.replace_random_law(laws[1],list(LAW_ION,LAW_HACKED,LAW_INHERENT,LAW_SUPPLIED)) - return laws[1] - -/******************* Ion Module *******************/ - -/obj/item/aiModule/toyAI // -- Incoming //No actual reason to inherit from ion boards here, either. *sigh* ~Miauw - name = "toy AI" - desc = "" //Note: subtle tell - icon = 'icons/obj/toy.dmi' - icon_state = "AI" - laws = list("") - -/obj/item/aiModule/toyAI/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) - //..() - if(law_datum.owner) - to_chat(law_datum.owner, "BZZZZT") - if(!overflow) - law_datum.owner.add_ion_law(laws[1]) - else - law_datum.owner.replace_random_law(laws[1],list(LAW_ION,LAW_INHERENT,LAW_SUPPLIED)) - else - if(!overflow) - law_datum.add_ion_law(laws[1]) - else - law_datum.replace_random_law(laws[1],list(LAW_ION,LAW_INHERENT,LAW_SUPPLIED)) - return laws[1] - -/obj/item/aiModule/toyAI/attack_self(mob/user) - laws[1] = generate_ion_law() - to_chat(user, "I press the button on [src].") - playsound(user, 'sound/blank.ogg', 20, TRUE) - src.loc.visible_message("[icon2html(src, viewers(loc))] [laws[1]]") - -/******************** Mother Drone ******************/ - -/obj/item/aiModule/core/full/drone - name = "'Mother Drone' Core AI Module" - law_id = "drone" - -/******************** Robodoctor ****************/ - -/obj/item/aiModule/core/full/hippocratic - name = "'Robodoctor' Core AI Module" - law_id = "hippocratic" - -/******************** Reporter *******************/ - -/obj/item/aiModule/core/full/reporter - name = "'Reportertron' Core AI Module" - law_id = "reporter" - -/****************** Thermodynamic *******************/ - -/obj/item/aiModule/core/full/thermurderdynamic - name = "'Thermodynamic' Core AI Module" - law_id = "thermodynamic" - - -/******************Live And Let Live*****************/ - -/obj/item/aiModule/core/full/liveandletlive - name = "'Live And Let Live' Core AI Module" - law_id = "liveandletlive" - -/******************Guardian of Balance***************/ - -/obj/item/aiModule/core/full/balance - name = "'Guardian of Balance' Core AI Module" - law_id = "balance" - -/obj/item/aiModule/core/full/maintain - name = "'Station Efficiency' Core AI Module" - law_id = "maintain" - -/obj/item/aiModule/core/full/peacekeeper - name = "'Peacekeeper' Core AI Module" - law_id = "peacekeeper" - -// Bad times ahead - -/obj/item/aiModule/core/full/damaged - name = "damaged Core AI Module" - desc = "" - -/obj/item/aiModule/core/full/damaged/install(datum/ai_laws/law_datum, mob/user) - laws += generate_ion_law() - while (prob(75)) - laws += generate_ion_law() - ..() - laws = list() - -/******************H.O.G.A.N.***************/ - -/obj/item/aiModule/core/full/hulkamania - name = "'H.O.G.A.N.' Core AI Module" - law_id = "hulkamania" - - -/******************Overlord***************/ - -/obj/item/aiModule/core/full/overlord - name = "'Overlord' Core AI Module" - law_id = "overlord" diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm deleted file mode 100644 index cbf1610a8e..0000000000 --- a/code/game/objects/items/RCD.dm +++ /dev/null @@ -1,939 +0,0 @@ -#define GLOW_MODE 3 -#define LIGHT_MODE 2 -#define REMOVE_MODE 1 - -/* -CONTAINS: -RCD -ARCD -RLD -*/ - -/obj/item/construction - name = "not for ingame use" - desc = "" - opacity = 0 - density = FALSE - anchored = FALSE - flags_1 = CONDUCT_1 - item_flags = NOBLUDGEON - force = 0 - throwforce = 10 - throw_speed = 1 - throw_range = 5 - w_class = WEIGHT_CLASS_NORMAL - custom_materials = list(/datum/material/iron=100000) - req_access_txt = "11" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) - resistance_flags = FIRE_PROOF - var/datum/effect_system/spark_spread/spark_system - var/matter = 0 - var/max_matter = 100 - var/sheetmultiplier = 4 //Controls the amount of matter added for each glass/metal sheet, triple for plasteel - var/plasteelmultiplier = 3 //Plasteel is worth 3 times more than glass or metal - var/plasmarglassmultiplier = 2 //50% less plasma than in plasteel - var/rglassmultiplier = 1.5 //One metal sheet, half a glass sheet - var/no_ammo_message = "The \'Low Ammo\' light on the device blinks yellow." - var/has_ammobar = FALSE //controls whether or not does update_icon apply ammo indicator overlays - var/ammo_sections = 10 //amount of divisions in the ammo indicator overlay/number of ammo indicator states - var/upgrade = FALSE - var/datum/component/remote_materials/silo_mats //remote connection to the silo - var/silo_link = FALSE //switch to use internal or remote storage - -/obj/item/construction/Initialize(mapload) - . = ..() - spark_system = new /datum/effect_system/spark_spread - spark_system.set_up(5, 0, src) - spark_system.attach(src) - if(upgrade & RCD_UPGRADE_SILO_LINK) - silo_mats = AddComponent(/datum/component/remote_materials, "RCD", mapload, FALSE) - -/obj/item/construction/examine(mob/user) - . = ..() - . += "\A [src]. It currently holds [matter]/[max_matter] matter-units." - if(upgrade & RCD_UPGRADE_SILO_LINK) - . += "\A [src]. Remote storage link state: [silo_link ? "[silo_mats.on_hold() ? "ON HOLD" : "ON"]" : "OFF"]." - if(silo_link && !silo_mats.on_hold()) - . += "\A [src]. Remote connection have iron in equivalent to [silo_mats.mat_container.get_material_amount(/datum/material/iron)/500] rcd units." // 1 matter for 1 floortile, as 4 tiles are produced from 1 metal - -/obj/item/construction/Destroy() - QDEL_NULL(spark_system) - silo_mats = null - return ..() - -/obj/item/construction/attackby(obj/item/W, mob/user, params) - if(iscyborg(user)) - return - var/loaded = 0 - if(istype(W, /obj/item/rcd_ammo)) - var/obj/item/rcd_ammo/R = W - var/load = min(R.ammoamt, max_matter - matter) - if(load <= 0) - to_chat(user, "[src] can't hold any more matter-units!") - return - R.ammoamt -= load - if(R.ammoamt <= 0) - qdel(R) - matter += load - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - loaded = 1 - else if(istype(W, /obj/item/stack/sheet/metal) || istype(W, /obj/item/stack/sheet/glass)) - loaded = loadwithsheets(W, sheetmultiplier, user) - else if(istype(W, /obj/item/stack/sheet/plasteel)) - loaded = loadwithsheets(W, plasteelmultiplier*sheetmultiplier, user) //12 matter for 1 plasteel sheet - else if(istype(W, /obj/item/stack/sheet/plasmarglass)) - loaded = loadwithsheets(W, plasmarglassmultiplier*sheetmultiplier, user) //8 matter for one plasma rglass sheet - else if(istype(W, /obj/item/stack/sheet/rglass)) - loaded = loadwithsheets(W, rglassmultiplier*sheetmultiplier, user) //6 matter for one rglass sheet - else if(istype(W, /obj/item/stack/rods)) - loaded = loadwithsheets(W, sheetmultiplier * 0.5, user) // 2 matter for 1 rod, as 2 rods are produced from 1 metal - else if(istype(W, /obj/item/stack/tile/plasteel)) - loaded = loadwithsheets(W, sheetmultiplier * 0.25, user) // 1 matter for 1 floortile, as 4 tiles are produced from 1 metal - if(loaded) - to_chat(user, "[src] now holds [matter]/[max_matter] matter-units.") - else if(istype(W, /obj/item/rcd_upgrade)) - var/obj/item/rcd_upgrade/rcd_up = W - if(!(upgrade & rcd_up.upgrade)) - upgrade |= rcd_up.upgrade - if((rcd_up.upgrade & RCD_UPGRADE_SILO_LINK) && !silo_mats) - silo_mats = AddComponent(/datum/component/remote_materials, "RCD", FALSE, FALSE) - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - qdel(W) - else - return ..() - update_icon() //ensures that ammo counters (if present) get updated - -/obj/item/construction/proc/loadwithsheets(obj/item/stack/sheet/S, value, mob/user) - var/maxsheets = round((max_matter-matter)/value) //calculate the max number of sheets that will fit in RCD - if(maxsheets > 0) - var/amount_to_use = min(S.amount, maxsheets) - S.use(amount_to_use) - matter += value*amount_to_use - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - to_chat(user, "I insert [amount_to_use] [S.name] sheets into [src]. ") - return 1 - to_chat(user, "I can't insert any more [S.name] sheets into [src]!") - return 0 - -/obj/item/construction/proc/activate() - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - -/obj/item/construction/attack_self(mob/user) - playsound(src.loc, 'sound/blank.ogg', 50, FALSE) - if(prob(20)) - spark_system.start() - -/obj/item/construction/proc/useResource(amount, mob/user) - if(!silo_mats || !silo_link) - if(matter < amount) - if(user) - to_chat(user, no_ammo_message) - return FALSE - matter -= amount - update_icon() - return TRUE - else - if(silo_mats.on_hold()) - if(user) - to_chat(user, "Mineral access is on hold, please contact the quartermaster.") - return FALSE - if(!silo_mats.mat_container.has_materials(list(/datum/material/iron = 500), amount)) - if(user) - to_chat(user, no_ammo_message) - return FALSE - - silo_mats.mat_container.use_materials(list(/datum/material/iron = 500), amount) - silo_mats.silo_log(src, "consume", -amount, "build", list(/datum/material/iron = 500)) - return TRUE - -/obj/item/construction/proc/checkResource(amount, mob/user) - if(!silo_mats || !silo_link) - . = matter >= amount - else - if(silo_mats.on_hold()) - if(user) - to_chat(user, "Mineral access is on hold, please contact the quartermaster.") - return FALSE - . = silo_mats.mat_container.has_materials(list(/datum/material/iron = 500), amount) - if(!. && user) - to_chat(user, no_ammo_message) - if(has_ammobar) - flick("[icon_state]_empty", src) //somewhat hacky thing to make RCDs with ammo counters actually have a blinking yellow light - return . - -/obj/item/construction/proc/range_check(atom/A, mob/user) - if(!(A in view(7, get_turf(user)))) - to_chat(user, "The \'Out of Range\' light on [src] blinks red.") - return FALSE - else - return TRUE - -/obj/item/construction/proc/prox_check(proximity) - if(proximity) - return TRUE - else - return FALSE - -/obj/item/construction/proc/check_menu(mob/living/user) - if(!istype(user)) - return FALSE - if(user.incapacitated() || !user.Adjacent(src)) - return FALSE - return TRUE - -/obj/item/construction/rcd - name = "rapid-construction-device (RCD)" - icon = 'icons/obj/tools.dmi' - icon_state = "rcd" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - custom_price = 150 - max_matter = 160 - item_flags = NO_MAT_REDEMPTION | NOBLUDGEON - has_ammobar = TRUE - var/mode = RCD_FLOORWALL - var/ranged = FALSE - var/computer_dir = 1 - var/airlock_type = /obj/machinery/door/airlock - var/airlock_glass = FALSE // So the floor's rcd_act knows how much ammo to use - var/window_type = /obj/structure/window/fulltile - var/advanced_airlock_setting = 1 //Set to 1 if you want more paintjobs available - var/list/conf_access = null - var/use_one_access = 0 //If the airlock should require ALL or only ONE of the listed accesses. - var/delay_mod = 1 - var/canRturf = FALSE //Variable for R walls to deconstruct them - -/obj/item/construction/rcd/suicide_act(mob/user) - user.visible_message("[user] sets the RCD to 'Wall' and points it down [user.p_their()] throat! It looks like [user.p_theyre()] trying to commit suicide..") - return (BRUTELOSS) - -/obj/item/construction/rcd/verb/toggle_window_type_verb() - set name = "RCD : Toggle Window Type" - set hidden = 1 - set src in view(1) - - if(!usr.canUseTopic(src, BE_CLOSE)) - return - - toggle_window_type(usr) - -/obj/item/construction/rcd/proc/toggle_window_type(mob/user) - var/window_type_name - if (window_type == /obj/structure/window/fulltile) - window_type = /obj/structure/window/reinforced/fulltile - window_type_name = "reinforced glass" - else - window_type = /obj/structure/window/fulltile - window_type_name = "glass" - - to_chat(user, "I change \the [src]'s window mode to [window_type_name].") - -/obj/item/construction/rcd/proc/toggle_silo_link(mob/user) - if(silo_mats) - silo_link = !silo_link - to_chat(user, "I change \the [src]'s storage link state: [silo_link ? "ON" : "OFF"].") - else - to_chat(user, "\the [src] dont have remote storage connection.") - - -/obj/item/construction/rcd/proc/change_airlock_access(mob/user) - if (!ishuman(user) && !user.has_unlimited_silicon_privilege) - return - - var/t1 = "" - - if(use_one_access) - t1 += "Restriction Type: At least one access required
" - else - t1 += "Restriction Type: All accesses required
" - - t1 += "Remove All
" - - var/accesses = "" - accesses += "
Access
" - accesses += "" - accesses += "" - for(var/i = 1; i <= 7; i++) - accesses += "" - accesses += "" - for(var/i = 1; i <= 7; i++) - accesses += "" - accesses += "
[get_region_accesses_name(i)]:
" - for(var/A in get_region_accesses(i)) - if(A in conf_access) - accesses += "[replacetext(get_access_desc(A), " ", " ")] " - else - accesses += "[replacetext(get_access_desc(A), " ", " ")] " - accesses += "
" - accesses += "
" - t1 += "[accesses]" - - t1 += "

Close

\n" - - var/datum/browser/popup = new(user, "rcd_access", "Access Control", 900, 500) - popup.set_content(t1) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - popup.open() - onclose(user, "rcd_access") - -/obj/item/construction/rcd/Topic(href, href_list) - ..() - if (usr.stat || usr.restrained()) - return - - if (href_list["close"]) - usr << browse(null, "window=rcd_access") - return - - if (href_list["access"]) - toggle_access(href_list["access"]) - change_airlock_access(usr) - -/obj/item/construction/rcd/proc/toggle_access(acc) - if (acc == "all") - conf_access = null - else if(acc == "one") - use_one_access = !use_one_access - else - var/req = text2num(acc) - - if (conf_access == null) - conf_access = list() - - if (!(req in conf_access)) - conf_access += req - else - conf_access -= req - if (!conf_access.len) - conf_access = null - -/obj/item/construction/rcd/proc/get_airlock_image(airlock_type) - var/obj/machinery/door/airlock/proto = airlock_type - var/ic = initial(proto.icon) - var/mutable_appearance/MA = mutable_appearance(ic, "closed") - if(!initial(proto.glass)) - MA.overlays += "fill_closed" - //Not scaling these down to button size because they look horrible then, instead just bumping up radius. - return MA - -/obj/item/construction/rcd/proc/change_computer_dir(mob/user) - if(!user) - return - var/list/computer_dirs = list( - "NORTH" = image(icon = 'icons/mob/radial.dmi', icon_state = "cnorth"), - "EAST" = image(icon = 'icons/mob/radial.dmi', icon_state = "ceast"), - "SOUTH" = image(icon = 'icons/mob/radial.dmi', icon_state = "csouth"), - "WEST" = image(icon = 'icons/mob/radial.dmi', icon_state = "cwest") - ) - var/computerdirs = show_radial_menu(user, src, computer_dirs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE) - if(!check_menu(user)) - return - switch(computerdirs) - if("NORTH") - computer_dir = 1 - if("EAST") - computer_dir = 4 - if("SOUTH") - computer_dir = 2 - if("WEST") - computer_dir = 8 - -/obj/item/construction/rcd/proc/change_airlock_setting(mob/user) - if(!user) - return - - var/list/solid_or_glass_choices = list( - "Solid" = get_airlock_image(/obj/machinery/door/airlock), - "Glass" = get_airlock_image(/obj/machinery/door/airlock/glass) - ) - - var/list/solid_choices = list( - "Standard" = get_airlock_image(/obj/machinery/door/airlock), - "Public" = get_airlock_image(/obj/machinery/door/airlock/public), - "Engineering" = get_airlock_image(/obj/machinery/door/airlock/engineering), - "Atmospherics" = get_airlock_image(/obj/machinery/door/airlock/atmos), - "Security" = get_airlock_image(/obj/machinery/door/airlock/security), - "Command" = get_airlock_image(/obj/machinery/door/airlock/command), - "Medical" = get_airlock_image(/obj/machinery/door/airlock/medical), - "Research" = get_airlock_image(/obj/machinery/door/airlock/research), - "Freezer" = get_airlock_image(/obj/machinery/door/airlock/freezer), - "Virology" = get_airlock_image(/obj/machinery/door/airlock/virology), - "Mining" = get_airlock_image(/obj/machinery/door/airlock/mining), - "Maintenance" = get_airlock_image(/obj/machinery/door/airlock/maintenance), - "External" = get_airlock_image(/obj/machinery/door/airlock/external), - "External Maintenance" = get_airlock_image(/obj/machinery/door/airlock/maintenance/external), - "Airtight Hatch" = get_airlock_image(/obj/machinery/door/airlock/hatch), - "Maintenance Hatch" = get_airlock_image(/obj/machinery/door/airlock/maintenance_hatch) - ) - - var/list/glass_choices = list( - "Standard" = get_airlock_image(/obj/machinery/door/airlock/glass), - "Public" = get_airlock_image(/obj/machinery/door/airlock/public/glass), - "Engineering" = get_airlock_image(/obj/machinery/door/airlock/engineering/glass), - "Atmospherics" = get_airlock_image(/obj/machinery/door/airlock/atmos/glass), - "Security" = get_airlock_image(/obj/machinery/door/airlock/security/glass), - "Command" = get_airlock_image(/obj/machinery/door/airlock/command/glass), - "Medical" = get_airlock_image(/obj/machinery/door/airlock/medical/glass), - "Research" = get_airlock_image(/obj/machinery/door/airlock/research/glass), - "Virology" = get_airlock_image(/obj/machinery/door/airlock/virology/glass), - "Mining" = get_airlock_image(/obj/machinery/door/airlock/mining/glass), - "Maintenance" = get_airlock_image(/obj/machinery/door/airlock/maintenance/glass), - "External" = get_airlock_image(/obj/machinery/door/airlock/external/glass), - "External Maintenance" = get_airlock_image(/obj/machinery/door/airlock/maintenance/external/glass) - ) - - var/airlockcat = show_radial_menu(user, src, solid_or_glass_choices, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE) - if(!check_menu(user)) - return - switch(airlockcat) - if("Solid") - if(advanced_airlock_setting == 1) - var/airlockpaint = show_radial_menu(user, src, solid_choices, radius = 42, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE) - if(!check_menu(user)) - return - switch(airlockpaint) - if("Standard") - airlock_type = /obj/machinery/door/airlock - if("Public") - airlock_type = /obj/machinery/door/airlock/public - if("Engineering") - airlock_type = /obj/machinery/door/airlock/engineering - if("Atmospherics") - airlock_type = /obj/machinery/door/airlock/atmos - if("Security") - airlock_type = /obj/machinery/door/airlock/security - if("Command") - airlock_type = /obj/machinery/door/airlock/command - if("Medical") - airlock_type = /obj/machinery/door/airlock/medical - if("Research") - airlock_type = /obj/machinery/door/airlock/research - if("Freezer") - airlock_type = /obj/machinery/door/airlock/freezer - if("Virology") - airlock_type = /obj/machinery/door/airlock/virology - if("Mining") - airlock_type = /obj/machinery/door/airlock/mining - if("Maintenance") - airlock_type = /obj/machinery/door/airlock/maintenance - if("External") - airlock_type = /obj/machinery/door/airlock/external - if("External Maintenance") - airlock_type = /obj/machinery/door/airlock/maintenance/external - if("Airtight Hatch") - airlock_type = /obj/machinery/door/airlock/hatch - if("Maintenance Hatch") - airlock_type = /obj/machinery/door/airlock/maintenance_hatch - airlock_glass = FALSE - else - airlock_type = /obj/machinery/door/airlock - airlock_glass = FALSE - - if("Glass") - if(advanced_airlock_setting == 1) - var/airlockpaint = show_radial_menu(user, src , glass_choices, radius = 42, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE) - if(!check_menu(user)) - return - switch(airlockpaint) - if("Standard") - airlock_type = /obj/machinery/door/airlock/glass - if("Public") - airlock_type = /obj/machinery/door/airlock/public/glass - if("Engineering") - airlock_type = /obj/machinery/door/airlock/engineering/glass - if("Atmospherics") - airlock_type = /obj/machinery/door/airlock/atmos/glass - if("Security") - airlock_type = /obj/machinery/door/airlock/security/glass - if("Command") - airlock_type = /obj/machinery/door/airlock/command/glass - if("Medical") - airlock_type = /obj/machinery/door/airlock/medical/glass - if("Research") - airlock_type = /obj/machinery/door/airlock/research/glass - if("Virology") - airlock_type = /obj/machinery/door/airlock/virology/glass - if("Mining") - airlock_type = /obj/machinery/door/airlock/mining/glass - if("Maintenance") - airlock_type = /obj/machinery/door/airlock/maintenance/glass - if("External") - airlock_type = /obj/machinery/door/airlock/external/glass - if("External Maintenance") - airlock_type = /obj/machinery/door/airlock/maintenance/external/glass - airlock_glass = TRUE - else - airlock_type = /obj/machinery/door/airlock/glass - airlock_glass = TRUE - else - airlock_type = /obj/machinery/door/airlock - airlock_glass = FALSE - -/obj/item/construction/rcd/proc/rcd_create(atom/A, mob/user) - var/list/rcd_results = A.rcd_vals(user, src) - if(!rcd_results) - return FALSE - if(checkResource(rcd_results["cost"], user)) - if(do_after(user, rcd_results["delay"] * delay_mod, target = A)) - if(checkResource(rcd_results["cost"], user)) - if(A.rcd_act(user, src, rcd_results["mode"])) - useResource(rcd_results["cost"], user) - activate() - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - return TRUE - -/obj/item/construction/rcd/Initialize() - . = ..() - GLOB.rcd_list += src - -/obj/item/construction/rcd/Destroy() - GLOB.rcd_list -= src - . = ..() - -/obj/item/construction/rcd/attack_self(mob/user) - ..() - var/list/choices = list( - "Airlock" = image(icon = 'icons/mob/radial.dmi', icon_state = "airlock"), - "Deconstruct" = image(icon= 'icons/mob/radial.dmi', icon_state = "delete"), - "Grilles & Windows" = image(icon = 'icons/mob/radial.dmi', icon_state = "grillewindow"), - "Floors & Walls" = image(icon = 'icons/mob/radial.dmi', icon_state = "wallfloor") - ) - if(upgrade & RCD_UPGRADE_FRAMES) - choices += list( - "Machine Frames" = image(icon = 'icons/mob/radial.dmi', icon_state = "machine"), - "Computer Frames" = image(icon = 'icons/mob/radial.dmi', icon_state = "computer_dir"), - ) - if(upgrade & RCD_UPGRADE_SILO_LINK) - choices += list( - "Silo Link" = image(icon = 'icons/obj/mining.dmi', icon_state = "silo"), - ) - if(mode == RCD_AIRLOCK) - choices += list( - "Change Access" = image(icon = 'icons/mob/radial.dmi', icon_state = "access"), - "Change Airlock Type" = image(icon = 'icons/mob/radial.dmi', icon_state = "airlocktype") - ) - else if(mode == RCD_WINDOWGRILLE) - choices += list( - "Change Window Type" = image(icon = 'icons/mob/radial.dmi', icon_state = "windowtype") - ) - var/choice = show_radial_menu(user, src, choices, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE) - if(!check_menu(user)) - return - switch(choice) - if("Floors & Walls") - mode = RCD_FLOORWALL - if("Airlock") - mode = RCD_AIRLOCK - if("Deconstruct") - mode = RCD_DECONSTRUCT - if("Grilles & Windows") - mode = RCD_WINDOWGRILLE - if("Machine Frames") - mode = RCD_MACHINE - if("Computer Frames") - mode = RCD_COMPUTER - change_computer_dir(user) - return - if("Change Access") - change_airlock_access(user) - return - if("Change Airlock Type") - change_airlock_setting(user) - return - if("Change Window Type") - toggle_window_type(user) - return - if("Silo Link") - toggle_silo_link(user) - return - else - return - playsound(src, 'sound/blank.ogg', 50, FALSE) - to_chat(user, "I change RCD's mode to '[choice]'.") - -/obj/item/construction/rcd/proc/target_check(atom/A, mob/user) // only returns true for stuff the device can actually work with - if((isturf(A) && A.density && mode==RCD_DECONSTRUCT) || (isturf(A) && !A.density) || (istype(A, /obj/machinery/door/airlock) && mode==RCD_DECONSTRUCT) || istype(A, /obj/structure/grille) || (istype(A, /obj/structure/window) && mode==RCD_DECONSTRUCT) || istype(A, /obj/structure/girder)) - return TRUE - else - return FALSE - -/obj/item/construction/rcd/afterattack(atom/A, mob/user, proximity) - . = ..() - if(!prox_check(proximity)) - return - rcd_create(A, user) - -/obj/item/construction/rcd/proc/detonate_pulse() - audible_message("[src] begins to vibrate and \ - buzz loudly!","[src] begins \ - vibrating violently!") - // 5 seconds to get rid of it - addtimer(CALLBACK(src, PROC_REF(detonate_pulse_explode)), 50) - -/obj/item/construction/rcd/proc/detonate_pulse_explode() - explosion(src, 0, 0, 3, 1, flame_range = 1) - qdel(src) - -/obj/item/construction/rcd/update_icon() - ..() - if(has_ammobar) - var/ratio = CEILING((matter / max_matter) * ammo_sections, 1) - cut_overlays() //To prevent infinite stacking of overlays - add_overlay("[icon_state]_charge[ratio]") - -/obj/item/construction/rcd/Initialize() - . = ..() - update_icon() - -/obj/item/construction/rcd/borg - no_ammo_message = "Insufficient charge." - desc = "" - canRturf = TRUE - var/energyfactor = 72 - - -/obj/item/construction/rcd/borg/useResource(amount, mob/user) - if(!iscyborg(user)) - return 0 - var/mob/living/silicon/robot/borgy = user - if(!borgy.cell) - if(user) - to_chat(user, no_ammo_message) - return 0 - . = borgy.cell.use(amount * energyfactor) //borgs get 1.3x the use of their RCDs - if(!. && user) - to_chat(user, no_ammo_message) - return . - -/obj/item/construction/rcd/borg/checkResource(amount, mob/user) - if(!iscyborg(user)) - return 0 - var/mob/living/silicon/robot/borgy = user - if(!borgy.cell) - if(user) - to_chat(user, no_ammo_message) - return 0 - . = borgy.cell.charge >= (amount * energyfactor) - if(!. && user) - to_chat(user, no_ammo_message) - return . - -/obj/item/construction/rcd/borg/syndicate - icon_state = "ircd" - item_state = "ircd" - energyfactor = 66 - -/obj/item/construction/rcd/loaded - matter = 160 - -/obj/item/construction/rcd/combat - name = "industrial RCD" - icon_state = "ircd" - item_state = "ircd" - max_matter = 500 - matter = 500 - canRturf = TRUE - -/obj/item/rcd_ammo - name = "compressed matter cartridge" - desc = "" - icon = 'icons/obj/ammo.dmi' - icon_state = "rcd" - item_state = "rcdammo" - w_class = WEIGHT_CLASS_TINY - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - custom_materials = list(/datum/material/iron=12000, /datum/material/glass=8000) - var/ammoamt = 40 - -/obj/item/rcd_ammo/large - custom_materials = list(/datum/material/iron=48000, /datum/material/glass=32000) - ammoamt = 160 - - -/obj/item/construction/rcd/combat/admin - name = "admin RCD" - max_matter = INFINITY - matter = INFINITY - - -// Ranged RCD - - -/obj/item/construction/rcd/arcd - name = "advanced rapid-construction-device (ARCD)" - desc = "" - max_matter = 300 - matter = 300 - delay_mod = 0.6 - ranged = TRUE - icon_state = "arcd" - item_state = "oldrcd" - has_ammobar = FALSE - -/obj/item/construction/rcd/arcd/afterattack(atom/A, mob/user) - . = ..() - if(!range_check(A,user)) - return - if(target_check(A,user)) - user.Beam(A,icon_state="rped_upgrade",time=30) - rcd_create(A,user) - - - -// RAPID LIGHTING DEVICE - - - -/obj/item/construction/rld - name = "rapid-light-device (RLD)" - desc = "" - icon = 'icons/obj/tools.dmi' - icon_state = "rld-5" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - matter = 200 - max_matter = 200 - var/mode = LIGHT_MODE - actions_types = list(/datum/action/item_action/pick_color) - - var/wallcost = 10 - var/floorcost = 15 - var/launchcost = 5 - var/deconcost = 10 - - var/walldelay = 10 - var/floordelay = 10 - var/decondelay = 15 - - var/color_choice = null - - -/obj/item/construction/rld/ui_action_click(mob/user, datum/action/A) - if(istype(A, /datum/action/item_action/pick_color)) - color_choice = input(user,"","Choose Color",color_choice) as color - else - ..() - -/obj/item/construction/rld/update_icon() - icon_state = "rld-[round(matter/35)]" - ..() - - -/obj/item/construction/rld/attack_self(mob/user) - ..() - switch(mode) - if(REMOVE_MODE) - mode = LIGHT_MODE - to_chat(user, "I change RLD's mode to 'Permanent Light Construction'.") - if(LIGHT_MODE) - mode = GLOW_MODE - to_chat(user, "I change RLD's mode to 'Light Launcher'.") - if(GLOW_MODE) - mode = REMOVE_MODE - to_chat(user, "I change RLD's mode to 'Deconstruct'.") - - -/obj/item/construction/rld/proc/checkdupes(target) - . = list() - var/turf/checking = get_turf(target) - for(var/obj/machinery/light/dupe in checking) - if(istype(dupe, /obj/machinery/light)) - . |= dupe - - -/obj/item/construction/rld/afterattack(atom/A, mob/user) - . = ..() - if(!range_check(A,user)) - return - var/turf/start = get_turf(src) - switch(mode) - if(REMOVE_MODE) - if(istype(A, /obj/machinery/light/)) - if(checkResource(deconcost, user)) - to_chat(user, "I start deconstructing [A]...") - user.Beam(A,icon_state="nzcrentrs_power",time=15) - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - if(do_after(user, decondelay, target = A)) - if(!useResource(deconcost, user)) - return 0 - activate() - qdel(A) - return TRUE - return FALSE - if(LIGHT_MODE) - if(iswallturf(A)) - var/turf/closed/wall/W = A - if(checkResource(floorcost, user)) - to_chat(user, "I start building a wall light...") - user.Beam(A,icon_state="nzcrentrs_power",time=15) - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - playsound(src.loc, 'sound/blank.ogg', 50, FALSE) - if(do_after(user, floordelay, target = A)) - if(!istype(W)) - return FALSE - var/list/candidates = list() - var/turf/open/winner = null - var/winning_dist = null - for(var/direction in GLOB.cardinals) - var/turf/C = get_step(W, direction) - var/list/dupes = checkdupes(C) - if(start.CanAtmosPass(C) && !dupes.len) - candidates += C - if(!candidates.len) - to_chat(user, "Valid target not found...") - playsound(src.loc, 'sound/blank.ogg', 30, TRUE) - return FALSE - for(var/turf/open/O in candidates) - if(istype(O)) - var/x0 = O.x - var/y0 = O.y - var/contender = cheap_hypotenuse(start.x, start.y, x0, y0) - if(!winner) - winner = O - winning_dist = contender - else - if(contender < winning_dist) // lower is better - winner = O - winning_dist = contender - activate() - if(!useResource(wallcost, user)) - return FALSE - var/light = get_turf(winner) - var/align = get_dir(winner, A) - var/obj/machinery/light/L = new /obj/machinery/light(light) - L.setDir(align) - L.color = color_choice - L.light_color = L.color - return TRUE - return FALSE - - if(isfloorturf(A)) - var/turf/open/floor/F = A - if(checkResource(floorcost, user)) - to_chat(user, "I start building a floor light...") - user.Beam(A,icon_state="nzcrentrs_power",time=15) - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - if(do_after(user, floordelay, target = A)) - if(!istype(F)) - return 0 - if(!useResource(floorcost, user)) - return 0 - activate() - var/destination = get_turf(A) - var/obj/machinery/light/floor/FL = new /obj/machinery/light/floor(destination) - FL.color = color_choice - FL.light_color = FL.color - return TRUE - return FALSE - - if(GLOW_MODE) - if(useResource(launchcost, user)) - activate() - to_chat(user, "I fire a glowstick!") - var/obj/item/flashlight/glowstick/G = new /obj/item/flashlight/glowstick(start) - G.color = color_choice - G.light_color = G.color - G.throw_at(A, 9, 3, user) - G.on = TRUE - G.update_brightness() - return TRUE - return FALSE - -/obj/item/construction/plumbing - name = "Plumbing Constructor" - desc = "" - icon_state = "plumberer2" - icon = 'icons/obj/tools.dmi' - - matter = 200 - max_matter = 200 - - ///type of the plumbing machine - var/blueprint = null - ///index, used in the attack self to get the type. stored here since it doesnt change - var/list/choices = list() - ///index, used in the attack self to get the type. stored here since it doesnt change - var/list/name_to_type = list() - /// - var/list/machinery_data = list("cost" = list(), "delay" = list()) - -/obj/item/construction/plumbing/attack_self(mob/user) - ..() - if(!choices.len) - for(var/A in subtypesof(/obj/machinery/plumbing)) - var/obj/machinery/plumbing/M = A - if(initial(M.rcd_constructable)) - choices += list(initial(M.name) = image(icon = initial(M.icon), icon_state = initial(M.icon_state))) - name_to_type[initial(M.name)] = M - machinery_data["cost"][A] = initial(M.rcd_cost) - machinery_data["delay"][A] = initial(M.rcd_delay) - - var/choice = show_radial_menu(user, src, choices, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE) - if(!check_menu(user)) - return - - blueprint = name_to_type[choice] - playsound(src, 'sound/blank.ogg', 50, FALSE) - to_chat(user, "I change [name]s blueprint to '[choice]'.") - -///pretty much rcd_create, but named differently to make myself feel less bad for copypasting from a sibling-type -/obj/item/construction/plumbing/proc/create_machine(atom/A, mob/user) - if(!machinery_data || !isopenturf(A)) - return FALSE - - if(checkResource(machinery_data["cost"][blueprint], user) && blueprint) - if(do_after(user, machinery_data["delay"][blueprint], target = A)) - if(checkResource(machinery_data["cost"][blueprint], user) && canPlace(A)) - useResource(machinery_data["cost"][blueprint], user) - activate() - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - new blueprint (A, FALSE, FALSE) - return TRUE - -/obj/item/construction/plumbing/proc/canPlace(turf/T) - if(!isopenturf(T)) - return FALSE - . = TRUE - for(var/obj/O in T.contents) - if(O.density) //let's not built ontop of dense stuff, like big machines and other obstacles, it kills my immershion - return FALSE - -/obj/item/construction/plumbing/afterattack(atom/A, mob/user, proximity) - . = ..() - if(!prox_check(proximity)) - return - if(istype(A, /obj/machinery/plumbing)) - var/obj/machinery/plumbing/P = A - if(P.anchored) - to_chat(user, "The [P.name] needs to be unanchored!") - return - if(do_after(user, 20, target = P)) - P.deconstruct() //Let's not substract matter - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) //this is just such a great sound effect - else - create_machine(A, user) - -/obj/item/rcd_upgrade - name = "RCD advanced design disk" - desc = "" - icon = 'icons/obj/module.dmi' - icon_state = "datadisk3" - var/upgrade - -/obj/item/rcd_upgrade/frames - desc = "" - upgrade = RCD_UPGRADE_FRAMES - -/obj/item/rcd_upgrade/simple_circuits - desc = "" - upgrade = RCD_UPGRADE_SIMPLE_CIRCUITS - -/obj/item/rcd_upgrade/silo_link - desc = "" - upgrade = RCD_UPGRADE_SILO_LINK - -#undef GLOW_MODE -#undef LIGHT_MODE -#undef REMOVE_MODE diff --git a/code/game/objects/items/RCL.dm b/code/game/objects/items/RCL.dm deleted file mode 100644 index 39305a0f45..0000000000 --- a/code/game/objects/items/RCL.dm +++ /dev/null @@ -1,328 +0,0 @@ -/obj/item/twohanded/rcl - name = "rapid pipe cleaner layer" - desc = "" - icon = 'icons/obj/tools.dmi' - icon_state = "rcl-0" - item_state = "rcl-0" - var/obj/structure/pipe_cleaner/last - var/obj/item/stack/pipe_cleaner_coil/loaded - opacity = FALSE - force = 5 //Plastic is soft - throwforce =5 - throw_speed = 1 - throw_range = 7 - w_class = WEIGHT_CLASS_NORMAL - var/max_amount = 90 - var/active = FALSE - actions_types = list(/datum/action/item_action/rcl_col,/datum/action/item_action/rcl_gui,) - var/list/colors = list("red", "yellow", "green", "blue", "pink", "orange", "cyan", "white") - var/current_color_index = 1 - var/ghetto = FALSE - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - var/datum/radial_menu/persistent/wiring_gui_menu - var/mob/listeningTo - -/obj/item/twohanded/rcl/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/stack/pipe_cleaner_coil)) - var/obj/item/stack/pipe_cleaner_coil/C = W - - if(!loaded) - if(!user.transferItemToLoc(W, src)) - to_chat(user, "[src] is stuck to your hand!") - return - else - loaded = W //W.loc is src at this point. - loaded.max_amount = max_amount //We store a lot. - return - - if(loaded.amount < max_amount) - var/transfer_amount = min(max_amount - loaded.amount, C.amount) - C.use(transfer_amount) - loaded.amount += transfer_amount - else - return - update_icon() - to_chat(user, "I add the pipe cleaners to [src]. It now contains [loaded.amount].") - else if(W.tool_behaviour == TOOL_SCREWDRIVER) - if(!loaded) - return - if(ghetto && prob(10)) //Is it a ghetto RCL? If so, give it a 10% chance to fall apart - to_chat(user, "I attempt to loosen the securing screws on the side, but it falls apart!") - while(loaded.amount > 30) //There are only two kinds of situations: "nodiff" (60,90), or "diff" (31-59, 61-89) - var/diff = loaded.amount % 30 - if(diff) - loaded.use(diff) - new /obj/item/stack/pipe_cleaner_coil(get_turf(user), diff) - else - loaded.use(30) - new /obj/item/stack/pipe_cleaner_coil(get_turf(user), 30) - qdel(src) - return - - to_chat(user, "I loosen the securing screws on the side, allowing you to lower the guiding edge and retrieve the wires.") - while(loaded.amount > 30) //There are only two kinds of situations: "nodiff" (60,90), or "diff" (31-59, 61-89) - var/diff = loaded.amount % 30 - if(diff) - loaded.use(diff) - new /obj/item/stack/pipe_cleaner_coil(get_turf(user), diff) - else - loaded.use(30) - new /obj/item/stack/pipe_cleaner_coil(get_turf(user), 30) - loaded.max_amount = initial(loaded.max_amount) - if(!user.put_in_hands(loaded)) - loaded.forceMove(get_turf(user)) - - loaded = null - update_icon() - else - ..() - -/obj/item/twohanded/rcl/examine(mob/user) - . = ..() - if(loaded) - . += "It contains [loaded.amount]/[max_amount] pipe cleaners." - -/obj/item/twohanded/rcl/Destroy() - QDEL_NULL(loaded) - last = null - listeningTo = null - QDEL_NULL(wiring_gui_menu) - return ..() - -/obj/item/twohanded/rcl/update_icon() - if(!loaded) - icon_state = "rcl-0" - item_state = "rcl-0" - return - switch(loaded.amount) - if(61 to INFINITY) - icon_state = "rcl-30" - item_state = "rcl" - if(31 to 60) - icon_state = "rcl-20" - item_state = "rcl" - if(1 to 30) - icon_state = "rcl-10" - item_state = "rcl" - else - icon_state = "rcl-0" - item_state = "rcl-0" - -/obj/item/twohanded/rcl/proc/is_empty(mob/user, loud = 1) - update_icon() - if(!loaded || !loaded.amount) - if(loud) - to_chat(user, "The last of the pipe cleaners unreel from [src].") - if(loaded) - QDEL_NULL(loaded) - loaded = null - QDEL_NULL(wiring_gui_menu) - unwield(user) - active = wielded - return TRUE - return FALSE - -/obj/item/twohanded/rcl/pickup(mob/user) - ..() - getMobhook(user) - - -/obj/item/twohanded/rcl/dropped(mob/wearer) - ..() - UnregisterSignal(wearer, COMSIG_MOVABLE_MOVED) - listeningTo = null - last = null - QDEL_NULL(wiring_gui_menu) - -/obj/item/twohanded/rcl/attack_self(mob/user) - ..() - active = wielded - if(!active) - last = null - else if(!last) - for(var/obj/structure/pipe_cleaner/C in get_turf(user)) - if(C.d1 == FALSE || C.d2 == FALSE) - last = C - break - -/obj/item/twohanded/rcl/proc/getMobhook(mob/to_hook) - if(listeningTo == to_hook) - return - if(listeningTo) - UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) - RegisterSignal(to_hook, COMSIG_MOVABLE_MOVED, PROC_REF(trigger)) - listeningTo = to_hook - -/obj/item/twohanded/rcl/proc/trigger(mob/user) - if(active) - layCable(user) - if(wiring_gui_menu) //update the wire options as you move - wiringGuiUpdate(user) - - -//previous contents of trigger(), lays pipe_cleaner each time the player moves -/obj/item/twohanded/rcl/proc/layCable(mob/user) - if(!isturf(user.loc)) - return - if(is_empty(user, 0)) - to_chat(user, "\The [src] is empty!") - return - - if(prob(2) && ghetto) //Give ghetto RCLs a 2% chance to jam, requiring it to be reactviated manually. - to_chat(user, "[src]'s wires jam!") - active = FALSE - return - else - if(last) - if(get_dist(last, user) == 1) //hacky, but it works - var/turf/T = get_turf(user) - if(T.intact || !T.can_have_cabling()) - last = null - return - if(get_dir(last, user) == last.d2) - //Did we just walk backwards? Well, that's the one direction we CAN'T complete a stub. - last = null - return - loaded.pipe_cleaner_join(last, user, FALSE) - if(is_empty(user)) - return //If we've run out, display message and exit - else - last = null - loaded.pipe_cleaner_color = colors[current_color_index] - last = loaded.place_turf(get_turf(src), user, turn(user.dir, 180)) - is_empty(user) //If we've run out, display message - update_icon() - - -//searches the current tile for a stub pipe_cleaner of the same colour -/obj/item/twohanded/rcl/proc/findLinkingCable(mob/user) - var/turf/T - if(!isturf(user.loc)) - return - - T = get_turf(user) - if(T.intact || !T.can_have_cabling()) - return - - for(var/obj/structure/pipe_cleaner/C in T) - if(!C) - continue - if(C.pipe_cleaner_color != GLOB.pipe_cleaner_colors[colors[current_color_index]]) - continue - if(C.d1 == 0) - return C - return - - -/obj/item/twohanded/rcl/proc/wiringGuiGenerateChoices(mob/user) - var/fromdir = 0 - var/obj/structure/pipe_cleaner/linkingCable = findLinkingCable(user) - if(linkingCable) - fromdir = linkingCable.d2 - - var/list/wiredirs = list("1","5","4","6","2","10","8","9") - for(var/icondir in wiredirs) - var/dirnum = text2num(icondir) - var/pipe_cleanersuffix = "[min(fromdir,dirnum)]-[max(fromdir,dirnum)]" - if(fromdir == dirnum) //pipe_cleaners can't loop back on themselves - pipe_cleanersuffix = "invalid" - var/image/img = image(icon = 'icons/mob/radial.dmi', icon_state = "cable_[pipe_cleanersuffix]") - img.color = GLOB.pipe_cleaner_colors[colors[current_color_index]] - wiredirs[icondir] = img - return wiredirs - -/obj/item/twohanded/rcl/proc/showWiringGui(mob/user) - var/list/choices = wiringGuiGenerateChoices(user) - - wiring_gui_menu = show_radial_menu_persistent(user, src , choices, select_proc = CALLBACK(src, PROC_REF(wiringGuiReact), user), radius = 42) - -/obj/item/twohanded/rcl/proc/wiringGuiUpdate(mob/user) - if(!wiring_gui_menu) - return - - wiring_gui_menu.entry_animation = FALSE //stop the open anim from playing each time we update - var/list/choices = wiringGuiGenerateChoices(user) - - wiring_gui_menu.change_choices(choices,FALSE) - - -//Callback used to respond to interactions with the wiring menu -/obj/item/twohanded/rcl/proc/wiringGuiReact(mob/living/user,choice) - if(!choice) //close on a null choice (the center button) - QDEL_NULL(wiring_gui_menu) - return - - choice = text2num(choice) - - if(!isturf(user.loc)) - return - if(is_empty(user, 0)) - to_chat(user, "\The [src] is empty!") - return - - var/turf/T = get_turf(user) - if(T.intact || !T.can_have_cabling()) - return - - loaded.pipe_cleaner_color = colors[current_color_index] - - var/obj/structure/pipe_cleaner/linkingCable = findLinkingCable(user) - if(linkingCable) - if(choice != linkingCable.d2) - loaded.pipe_cleaner_join(linkingCable, user, FALSE, choice) - last = null - else - last = loaded.place_turf(get_turf(src), user, choice) - - is_empty(user) //If we've run out, display message - - wiringGuiUpdate(user) - - -/obj/item/twohanded/rcl/pre_loaded/Initialize() //Comes preloaded with pipe_cleaner, for testing stuff - . = ..() - loaded = new() - loaded.max_amount = max_amount - loaded.amount = max_amount - update_icon() - -/obj/item/twohanded/rcl/Initialize() - . = ..() - update_icon() - -/obj/item/twohanded/rcl/ui_action_click(mob/user, action) - if(istype(action, /datum/action/item_action/rcl_col)) - current_color_index++; - if (current_color_index > colors.len) - current_color_index = 1 - var/cwname = colors[current_color_index] - to_chat(user, "Color changed to [cwname]!") - if(loaded) - loaded.pipe_cleaner_color = colors[current_color_index] - if(wiring_gui_menu) - wiringGuiUpdate(user) - else if(istype(action, /datum/action/item_action/rcl_gui)) - if(wiring_gui_menu) //The menu is already open, close it - QDEL_NULL(wiring_gui_menu) - else //open the menu - showWiringGui(user) - -/obj/item/twohanded/rcl/ghetto - actions_types = list() - max_amount = 30 - name = "makeshift rapid pipe cleaner layer" - ghetto = TRUE - -/obj/item/twohanded/rcl/ghetto/update_icon() - if(!loaded) - icon_state = "rclg-0" - item_state = "rclg-0" - return - switch(loaded.amount) - if(1 to INFINITY) - icon_state = "rclg-1" - item_state = "rcl" - else - icon_state = "rclg-1" - item_state = "rclg-1" diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm deleted file mode 100644 index f7d1f44bb4..0000000000 --- a/code/game/objects/items/RPD.dm +++ /dev/null @@ -1,472 +0,0 @@ -/* -CONTAINS: -RPD -*/ - -#define ATMOS_CATEGORY 0 -#define DISPOSALS_CATEGORY 1 -#define TRANSIT_CATEGORY 2 - -#define BUILD_MODE 1 -#define WRENCH_MODE 2 -#define DESTROY_MODE 4 -#define PAINT_MODE 8 - - -GLOBAL_LIST_INIT(atmos_pipe_recipes, list( - "Pipes" = list( - new /datum/pipe_info/pipe("Pipe", /obj/machinery/atmospherics/pipe/simple), - new /datum/pipe_info/pipe("Manifold", /obj/machinery/atmospherics/pipe/manifold), - new /datum/pipe_info/pipe("Manual Valve", /obj/machinery/atmospherics/components/binary/valve), - new /datum/pipe_info/pipe("Digital Valve", /obj/machinery/atmospherics/components/binary/valve/digital), - new /datum/pipe_info/pipe("4-Way Manifold", /obj/machinery/atmospherics/pipe/manifold4w), - new /datum/pipe_info/pipe("Layer Manifold", /obj/machinery/atmospherics/pipe/layer_manifold), - ), - "Devices" = list( - new /datum/pipe_info/pipe("Connector", /obj/machinery/atmospherics/components/unary/portables_connector), - new /datum/pipe_info/pipe("Unary Vent", /obj/machinery/atmospherics/components/unary/vent_pump), - new /datum/pipe_info/pipe("Gas Pump", /obj/machinery/atmospherics/components/binary/pump), - new /datum/pipe_info/pipe("Passive Gate", /obj/machinery/atmospherics/components/binary/passive_gate), - new /datum/pipe_info/pipe("Volume Pump", /obj/machinery/atmospherics/components/binary/volume_pump), - new /datum/pipe_info/pipe("Scrubber", /obj/machinery/atmospherics/components/unary/vent_scrubber), - new /datum/pipe_info/pipe("Injector", /obj/machinery/atmospherics/components/unary/outlet_injector), - new /datum/pipe_info/pipe("Passive Vent", /obj/machinery/atmospherics/components/unary/passive_vent), - new /datum/pipe_info/meter("Meter"), - new /datum/pipe_info/pipe("Gas Filter", /obj/machinery/atmospherics/components/trinary/filter), - new /datum/pipe_info/pipe("Gas Mixer", /obj/machinery/atmospherics/components/trinary/mixer), - ), - "Heat Exchange" = list( - new /datum/pipe_info/pipe("Pipe", /obj/machinery/atmospherics/pipe/heat_exchanging/simple), - new /datum/pipe_info/pipe("Manifold", /obj/machinery/atmospherics/pipe/heat_exchanging/manifold), - new /datum/pipe_info/pipe("4-Way Manifold", /obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w), - new /datum/pipe_info/pipe("Junction", /obj/machinery/atmospherics/pipe/heat_exchanging/junction), - new /datum/pipe_info/pipe("Heat Exchanger", /obj/machinery/atmospherics/components/unary/heat_exchanger), - ) -)) - -GLOBAL_LIST_INIT(disposal_pipe_recipes, list( - "Disposal Pipes" = list( - new /datum/pipe_info/disposal("Pipe", /obj/structure/disposalpipe/segment, PIPE_BENDABLE), - new /datum/pipe_info/disposal("Junction", /obj/structure/disposalpipe/junction, PIPE_TRIN_M), - new /datum/pipe_info/disposal("Y-Junction", /obj/structure/disposalpipe/junction/yjunction), - new /datum/pipe_info/disposal("Sort Junction", /obj/structure/disposalpipe/sorting/mail, PIPE_TRIN_M), - new /datum/pipe_info/disposal("Trunk", /obj/structure/disposalpipe/trunk), - new /datum/pipe_info/disposal("Bin", /obj/machinery/disposal/bin, PIPE_ONEDIR), - new /datum/pipe_info/disposal("Outlet", /obj/structure/disposaloutlet), - new /datum/pipe_info/disposal("Chute", /obj/machinery/disposal/deliveryChute), - ) -)) - -GLOBAL_LIST_INIT(transit_tube_recipes, list( - "Transit Tubes" = list( - new /datum/pipe_info/transit("Straight Tube", /obj/structure/c_transit_tube, PIPE_STRAIGHT), - new /datum/pipe_info/transit("Straight Tube with Crossing", /obj/structure/c_transit_tube/crossing, PIPE_STRAIGHT), - new /datum/pipe_info/transit("Curved Tube", /obj/structure/c_transit_tube/curved, PIPE_UNARY_FLIPPABLE), - new /datum/pipe_info/transit("Diagonal Tube", /obj/structure/c_transit_tube/diagonal, PIPE_STRAIGHT), - new /datum/pipe_info/transit("Diagonal Tube with Crossing", /obj/structure/c_transit_tube/diagonal/crossing, PIPE_STRAIGHT), - new /datum/pipe_info/transit("Junction", /obj/structure/c_transit_tube/junction, PIPE_UNARY_FLIPPABLE), - ), - "Station Equipment" = list( - new /datum/pipe_info/transit("Through Tube Station", /obj/structure/c_transit_tube/station, PIPE_STRAIGHT), - new /datum/pipe_info/transit("Terminus Tube Station", /obj/structure/c_transit_tube/station/reverse, PIPE_UNARY), - new /datum/pipe_info/transit("Transit Tube Pod", /obj/structure/c_transit_tube_pod, PIPE_ONEDIR), - ) -)) - -/datum/pipe_info - var/name - var/icon_state - var/id = -1 - var/dirtype = PIPE_BENDABLE - -/datum/pipe_info/proc/Render(dispenser) - var/dat = "
  • [name]
  • " - - // Stationary pipe dispensers don't allow you to pre-select pipe directions. - // This makes it impossble to spawn bent versions of bendable pipes. - // We add a "Bent" pipe type with a preset diagonal direction to work around it. - if(istype(dispenser, /obj/machinery/pipedispenser) && (dirtype == PIPE_BENDABLE || dirtype == /obj/item/pipe/binary/bendable)) - dat += "
  • Bent [name]
  • " - - return dat - -/datum/pipe_info/proc/Params() - return "" - -/datum/pipe_info/proc/get_preview(selected_dir) - var/list/dirs - switch(dirtype) - if(PIPE_STRAIGHT, PIPE_BENDABLE) - dirs = list("[NORTH]" = "Vertical", "[EAST]" = "Horizontal") - if(dirtype == PIPE_BENDABLE) - dirs += list("[NORTHWEST]" = "West to North", "[NORTHEAST]" = "North to East", - "[SOUTHWEST]" = "South to West", "[SOUTHEAST]" = "East to South") - if(PIPE_TRINARY) - dirs = list("[NORTH]" = "West South East", "[EAST]" = "North West South", - "[SOUTH]" = "East North West", "[WEST]" = "South East North") - if(PIPE_TRIN_M) - dirs = list("[NORTH]" = "North East South", "[EAST]" = "East South West", - "[SOUTH]" = "South West North", "[WEST]" = "West North East", - "[SOUTHEAST]" = "West South East", "[NORTHEAST]" = "South East North", - "[NORTHWEST]" = "East North West", "[SOUTHWEST]" = "North West South") - if(PIPE_UNARY) - dirs = list("[NORTH]" = "North", "[EAST]" = "East", "[SOUTH]" = "South", "[WEST]" = "West") - if(PIPE_ONEDIR) - dirs = list("[SOUTH]" = name) - if(PIPE_UNARY_FLIPPABLE) - dirs = list("[NORTH]" = "North", "[NORTHEAST]" = "North Flipped", "[EAST]" = "East", "[SOUTHEAST]" = "East Flipped", - "[SOUTH]" = "South", "[SOUTHWEST]" = "South Flipped", "[WEST]" = "West", "[NORTHWEST]" = "West Flipped") - - - var/list/rows = list() - var/list/row = list("previews" = list()) - var/i = 0 - for(var/dir in dirs) - var/numdir = text2num(dir) - var/flipped = ((dirtype == PIPE_TRIN_M) || (dirtype == PIPE_UNARY_FLIPPABLE)) && (numdir in GLOB.diagonals) - row["previews"] += list(list("selected" = (numdir == selected_dir), "dir" = dir2text(numdir), "dir_name" = dirs[dir], "icon_state" = icon_state, "flipped" = flipped)) - if(i++ || dirtype == PIPE_ONEDIR) - rows += list(row) - row = list("previews" = list()) - i = 0 - - return rows - -/datum/pipe_info/pipe/New(label, obj/machinery/atmospherics/path) - name = label - id = path - icon_state = initial(path.pipe_state) - var/obj/item/pipe/c = initial(path.construction_type) - dirtype = initial(c.RPD_type) - -/datum/pipe_info/pipe/Params() - return "makepipe=[id]&type=[dirtype]" - -/datum/pipe_info/meter - icon_state = "meter" - dirtype = PIPE_ONEDIR - -/datum/pipe_info/meter/New(label) - name = label - -/datum/pipe_info/meter/Params() - return "makemeter=[id]&type=[dirtype]" - -/datum/pipe_info/disposal/New(label, obj/path, dt=PIPE_UNARY) - name = label - id = path - - icon_state = initial(path.icon_state) - if(ispath(path, /obj/structure/disposalpipe)) - icon_state = "con[icon_state]" - - dirtype = dt - -/datum/pipe_info/disposal/Params() - return "dmake=[id]&type=[dirtype]" - -/datum/pipe_info/transit/New(label, obj/path, dt=PIPE_UNARY) - name = label - id = path - dirtype = dt - icon_state = initial(path.icon_state) - if(dt == PIPE_UNARY_FLIPPABLE) - icon_state = "[icon_state]_preview" - -/obj/item/pipe_dispenser - name = "Rapid Pipe Dispenser (RPD)" - desc = "" - icon = 'icons/obj/tools.dmi' - icon_state = "rpd" - flags_1 = CONDUCT_1 - force = 10 - throwforce = 10 - throw_speed = 1 - throw_range = 5 - w_class = WEIGHT_CLASS_NORMAL - custom_materials = list(/datum/material/iron=75000, /datum/material/glass=37500) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) - resistance_flags = FIRE_PROOF - var/datum/effect_system/spark_spread/spark_system - var/working = 0 - var/p_dir = NORTH - var/p_flipped = FALSE - var/paint_color = "grey" - var/atmos_build_speed = 5 //deciseconds (500ms) - var/disposal_build_speed = 5 - var/transit_build_speed = 5 - var/destroy_speed = 5 - var/paint_speed = 5 - var/category = ATMOS_CATEGORY - var/piping_layer = PIPING_LAYER_DEFAULT - var/ducting_layer = DUCT_LAYER_DEFAULT - var/datum/pipe_info/recipe - var/static/datum/pipe_info/first_atmos - var/static/datum/pipe_info/first_disposal - var/static/datum/pipe_info/first_transit - var/mode = BUILD_MODE | PAINT_MODE | DESTROY_MODE | WRENCH_MODE - -/obj/item/pipe_dispenser/Initialize() - . = ..() - spark_system = new - spark_system.set_up(5, 0, src) - spark_system.attach(src) - if(!first_atmos) - first_atmos = GLOB.atmos_pipe_recipes[GLOB.atmos_pipe_recipes[1]][1] - if(!first_disposal) - first_disposal = GLOB.disposal_pipe_recipes[GLOB.disposal_pipe_recipes[1]][1] - if(!first_transit) - first_transit = GLOB.transit_tube_recipes[GLOB.transit_tube_recipes[1]][1] - - recipe = first_atmos - -/obj/item/pipe_dispenser/Destroy() - qdel(spark_system) - spark_system = null - return ..() - -/obj/item/pipe_dispenser/attack_self(mob/user) - ui_interact(user) - -/obj/item/pipe_dispenser/suicide_act(mob/user) - user.visible_message("[user] points the end of the RPD down [user.p_their()] throat and presses a button! It looks like [user.p_theyre()] trying to commit suicide...") - playsound(get_turf(user), 'sound/blank.ogg', 50, TRUE) - playsound(get_turf(user), 'sound/blank.ogg', 50, TRUE) - return(BRUTELOSS) - -/obj/item/pipe_dispenser/ui_base_html(html) -// var/datum/asset/spritesheet/assets = get_asset_datum(/datum/asset/spritesheet/pipes) -// . = replacetext(html, "", assets.css_tag()) - -/obj/item/pipe_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) -// var/datum/asset/assets = get_asset_datum(/datum/asset/spritesheet/pipes) -// assets.send(user) - - ui = new(user, src, ui_key, "rpd", name, 425, 472, master_ui, state) - ui.open() - -/obj/item/pipe_dispenser/ui_data(mob/user) - var/list/data = list( - "category" = category, - "piping_layer" = piping_layer, - "ducting_layer" = ducting_layer, - "preview_rows" = recipe.get_preview(p_dir), - "categories" = list(), - "selected_color" = paint_color, - "paint_colors" = GLOB.pipe_paint_colors, - "mode" = mode - ) - - var/list/recipes - switch(category) - if(ATMOS_CATEGORY) - recipes = GLOB.atmos_pipe_recipes - if(DISPOSALS_CATEGORY) - recipes = GLOB.disposal_pipe_recipes - if(TRANSIT_CATEGORY) - recipes = GLOB.transit_tube_recipes - for(var/c in recipes) - var/list/cat = recipes[c] - var/list/r = list() - for(var/i in 1 to cat.len) - var/datum/pipe_info/info = cat[i] - r += list(list("pipe_name" = info.name, "pipe_index" = i, "selected" = (info == recipe))) - data["categories"] += list(list("cat_name" = c, "recipes" = r)) - - return data - -/obj/item/pipe_dispenser/ui_act(action, params) - if(..()) - return - if(!usr.canUseTopic(src, BE_CLOSE)) - return - var/playeffect = TRUE - switch(action) - if("color") - paint_color = params["paint_color"] - if("category") - category = text2num(params["category"]) - switch(category) - if(DISPOSALS_CATEGORY) - recipe = first_disposal - if(ATMOS_CATEGORY) - recipe = first_atmos - if(TRANSIT_CATEGORY) - recipe = first_transit - p_dir = NORTH - playeffect = FALSE - if("piping_layer") - piping_layer = text2num(params["piping_layer"]) - playeffect = FALSE - if("ducting_layer") - ducting_layer = text2num(params["ducting_layer"]) - playeffect = FALSE - if("pipe_type") - var/static/list/recipes - if(!recipes) - recipes = GLOB.disposal_pipe_recipes + GLOB.atmos_pipe_recipes + GLOB.transit_tube_recipes - recipe = recipes[params["category"]][text2num(params["pipe_type"])] - p_dir = NORTH - if("setdir") - p_dir = text2dir(params["dir"]) - p_flipped = text2num(params["flipped"]) - playeffect = FALSE - if("mode") - var/n = text2num(params["mode"]) - if(mode & n) - mode &= ~n - else - mode |= n - if(playeffect) - spark_system.start() - playsound(get_turf(src), 'sound/blank.ogg', 50, FALSE) - return TRUE - -/obj/item/pipe_dispenser/pre_attack(atom/A, mob/user) - if(!user.IsAdvancedToolUser() || istype(A, /turf/open/space/transit)) - return ..() - - //So that changing the menu settings doesn't affect the pipes already being built. - var/queued_p_type = recipe.id - var/queued_p_dir = p_dir - var/queued_p_flipped = p_flipped - - //make sure what we're clicking is valid for the current category - var/static/list/make_pipe_whitelist - if(!make_pipe_whitelist) - make_pipe_whitelist = typecacheof(list(/obj/structure/lattice, /obj/structure/girder, /obj/item/pipe, /obj/structure/window, /obj/structure/grille)) - var/can_make_pipe = (isturf(A) || is_type_in_typecache(A, make_pipe_whitelist)) - - . = TRUE - - if((mode&DESTROY_MODE) && istype(A, /obj/item/pipe) || istype(A, /obj/structure/disposalconstruct) || istype(A, /obj/structure/c_transit_tube) || istype(A, /obj/structure/c_transit_tube_pod) || istype(A, /obj/item/pipe_meter)) - to_chat(user, "I start destroying a pipe...") - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - if(do_after(user, destroy_speed, target = A)) - activate() - qdel(A) - return - - if((mode&PAINT_MODE)) - if(istype(A, /obj/machinery/atmospherics/pipe) && !istype(A, /obj/machinery/atmospherics/pipe/layer_manifold)) - var/obj/machinery/atmospherics/pipe/P = A - to_chat(user, "I start painting \the [P] [paint_color]...") - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - if(do_after(user, paint_speed, target = A)) - P.paint(GLOB.pipe_paint_colors[paint_color]) //paint the pipe - user.visible_message("[user] paints \the [P] [paint_color].","I paint \the [P] [paint_color].") - return - var/obj/item/pipe/P = A - if(istype(P) && findtext("[P.pipe_type]", "/obj/machinery/atmospherics/pipe") && !findtext("[P.pipe_type]", "layer_manifold")) - to_chat(user, "I start painting \the [A] [paint_color]...") - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - if(do_after(user, paint_speed, target = A)) - A.add_atom_colour(GLOB.pipe_paint_colors[paint_color], FIXED_COLOUR_PRIORITY) //paint the pipe - user.visible_message("[user] paints \the [A] [paint_color].","I paint \the [A] [paint_color].") - return - - if(mode&BUILD_MODE) - switch(category) //if we've gotten this var, the target is valid - if(ATMOS_CATEGORY) //Making pipes - if(!can_make_pipe) - return ..() - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - if (recipe.type == /datum/pipe_info/meter) - to_chat(user, "I start building a meter...") - if(do_after(user, atmos_build_speed, target = A)) - activate() - var/obj/item/pipe_meter/PM = new /obj/item/pipe_meter(get_turf(A)) - PM.setAttachLayer(piping_layer) - if(mode&WRENCH_MODE) - PM.wrench_act(user, src) - else - to_chat(user, "I start building a pipe...") - if(do_after(user, atmos_build_speed, target = A)) - activate() - var/obj/machinery/atmospherics/path = queued_p_type - var/pipe_item_type = initial(path.construction_type) || /obj/item/pipe - var/obj/item/pipe/P = new pipe_item_type(get_turf(A), queued_p_type, queued_p_dir) - - if(queued_p_flipped && istype(P, /obj/item/pipe/trinary/flippable)) - var/obj/item/pipe/trinary/flippable/F = P - F.flipped = queued_p_flipped - - P.update() - P.add_fingerprint(usr) - P.setPipingLayer(piping_layer) - if(findtext("[queued_p_type]", "/obj/machinery/atmospherics/pipe") && !findtext("[queued_p_type]", "layer_manifold")) - P.add_atom_colour(GLOB.pipe_paint_colors[paint_color], FIXED_COLOUR_PRIORITY) - if(mode&WRENCH_MODE) - P.wrench_act(user, src) - - if(DISPOSALS_CATEGORY) //Making disposals pipes - if(!can_make_pipe) - return ..() - A = get_turf(A) - if(isclosedturf(A)) - to_chat(user, "[src]'s error light flickers; there's something in the way!") - return - to_chat(user, "I start building a disposals pipe...") - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - if(do_after(user, disposal_build_speed, target = A)) - var/obj/structure/disposalconstruct/C = new (A, queued_p_type, queued_p_dir, queued_p_flipped) - - if(!C.can_place()) - to_chat(user, "There's not enough room to build that here!") - qdel(C) - return - - activate() - - C.add_fingerprint(usr) - C.update_icon() - if(mode&WRENCH_MODE) - C.wrench_act(user, src) - return - - if(TRANSIT_CATEGORY) //Making transit tubes - if(!can_make_pipe) - return ..() - A = get_turf(A) - if(isclosedturf(A)) - to_chat(user, "[src]'s error light flickers; there's something in the way!") - return - to_chat(user, "I start building a transit tube...") - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - if(do_after(user, transit_build_speed, target = A)) - activate() - if(queued_p_type == /obj/structure/c_transit_tube_pod) - var/obj/structure/c_transit_tube_pod/pod = new /obj/structure/c_transit_tube_pod(A) - pod.add_fingerprint(usr) - if(mode&WRENCH_MODE) - pod.wrench_act(user, src) - - else - var/obj/structure/c_transit_tube/tube = new queued_p_type(A) - tube.setDir(queued_p_dir) - - if(queued_p_flipped) - tube.setDir(turn(queued_p_dir, 45)) - tube.simple_rotate_flip() - - tube.add_fingerprint(usr) - if(mode&WRENCH_MODE) - tube.wrench_act(user, src) - return - else - return ..() - -/obj/item/pipe_dispenser/proc/activate() - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - -#undef ATMOS_CATEGORY -#undef DISPOSALS_CATEGORY -#undef TRANSIT_CATEGORY - -#undef BUILD_MODE -#undef DESTROY_MODE -#undef PAINT_MODE -#undef WRENCH_MODE diff --git a/code/game/objects/items/RSF.dm b/code/game/objects/items/RSF.dm deleted file mode 100644 index 56dd1fbf24..0000000000 --- a/code/game/objects/items/RSF.dm +++ /dev/null @@ -1,182 +0,0 @@ -/* -CONTAINS: -RSF - -*/ -/obj/item/rsf - name = "\improper Rapid-Service-Fabricator" - desc = "" - icon = 'icons/obj/tools.dmi' - icon_state = "rcd" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - opacity = 0 - density = FALSE - anchored = FALSE - item_flags = NOBLUDGEON - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - var/matter = 0 - var/mode = 1 - w_class = WEIGHT_CLASS_NORMAL - -/obj/item/rsf/examine(mob/user) - . = ..() - . += "It currently holds [matter]/30 fabrication-units." - -/obj/item/rsf/cyborg - matter = 30 - -/obj/item/rsf/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/rcd_ammo)) - if((matter + 10) > 30) - to_chat(user, "The RSF can't hold any more matter!") - return - qdel(W) - matter += 10 - playsound(src.loc, 'sound/blank.ogg', 10, TRUE) - to_chat(user, "The RSF now holds [matter]/30 fabrication-units.") - else - return ..() - -/obj/item/rsf/attack_self(mob/user) - playsound(src.loc, 'sound/blank.ogg', 50, FALSE) - switch(mode) - if(5) - mode = 1 - to_chat(user, "Changed dispensing mode to 'Drinking Glass'.") - if(1) - mode = 2 - to_chat(user, "Changed dispensing mode to 'Paper'.") - if(2) - mode = 3 - to_chat(user, "Changed dispensing mode to 'Pen'.") - if(3) - mode = 4 - to_chat(user, "Changed dispensing mode to 'Dice Pack'.") - if(4) - mode = 5 - to_chat(user, "Changed dispensing mode to 'Cigarette'.") - // Change mode - -/obj/item/rsf/afterattack(atom/A, mob/user, proximity) - . = ..() - if(!proximity) - return - if (!(istype(A, /obj/structure/table) || isfloorturf(A))) - return - - if(iscyborg(user)) - var/mob/living/silicon/robot/R = user - if(!R.cell || R.cell.charge < 200) - to_chat(user, "I do not have enough power to use [src].") - return - else if (matter < 1) - to_chat(user, "\The [src] doesn't have enough matter left.") - return - - var/turf/T = get_turf(A) - playsound(src.loc, 'sound/blank.ogg', 10, TRUE) - switch(mode) - if(1) - to_chat(user, "Dispensing Drinking Glass...") - new /obj/item/reagent_containers/food/drinks/drinkingglass(T) - use_matter(20, user) - if(2) - to_chat(user, "Dispensing Paper Sheet...") - new /obj/item/paper(T) - use_matter(10, user) - if(3) - to_chat(user, "Dispensing Pen...") - new /obj/item/pen(T) - use_matter(50, user) - if(4) - to_chat(user, "Dispensing Dice Pack...") - new /obj/item/storage/pill_bottle/dice(T) - use_matter(200, user) - if(5) - to_chat(user, "Dispensing Cigarette...") - new /obj/item/clothing/mask/cigarette(T) - use_matter(10, user) - -/obj/item/rsf/proc/use_matter(charge, mob/user) - if (iscyborg(user)) - var/mob/living/silicon/robot/R = user - R.cell.charge -= charge - else - matter-- - to_chat(user, "The RSF now holds [matter]/30 fabrication-units.") - -/obj/item/cookiesynth - name = "Cookie Synthesizer" - desc = "" - icon = 'icons/obj/tools.dmi' - icon_state = "rcd" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - var/matter = 10 - var/toxin = 0 - var/cooldown = 0 - var/cooldowndelay = 10 - w_class = WEIGHT_CLASS_NORMAL - -/obj/item/cookiesynth/examine(mob/user) - . = ..() - . += "It currently holds [matter]/10 cookie-units." - -/obj/item/cookiesynth/attackby() - return - -/obj/item/cookiesynth/emag_act(mob/user) - obj_flags ^= EMAGGED - if(obj_flags & EMAGGED) - to_chat(user, "I short out [src]'s reagent safety checker!") - else - to_chat(user, "I reset [src]'s reagent safety checker!") - toxin = 0 - -/obj/item/cookiesynth/attack_self(mob/user) - var/mob/living/silicon/robot/P = null - if(iscyborg(user)) - P = user - if((obj_flags & EMAGGED)&&!toxin) - toxin = 1 - to_chat(user, "Cookie Synthesizer hacked.") - else if(P.emagged&&!toxin) - toxin = 1 - to_chat(user, "Cookie Synthesizer hacked.") - else - toxin = 0 - to_chat(user, "Cookie Synthesizer reset.") - -/obj/item/cookiesynth/process() - if(matter < 10) - matter++ - -/obj/item/cookiesynth/afterattack(atom/A, mob/user, proximity) - . = ..() - if(cooldown > world.time) - return - if(!proximity) - return - if (!(istype(A, /obj/structure/table) || isfloorturf(A))) - return - if(matter < 1) - to_chat(user, "[src] doesn't have enough matter left. Wait for it to recharge!") - return - if(iscyborg(user)) - var/mob/living/silicon/robot/R = user - if(!R.cell || R.cell.charge < 400) - to_chat(user, "I do not have enough power to use [src].") - return - var/turf/T = get_turf(A) - playsound(src.loc, 'sound/blank.ogg', 10, TRUE) - to_chat(user, "Fabricating Cookie...") - var/obj/item/reagent_containers/food/snacks/cookie/S = new /obj/item/reagent_containers/food/snacks/cookie(T) - if(toxin) - S.reagents.add_reagent(/datum/reagent/toxin/chloralhydrate, 10) - if (iscyborg(user)) - var/mob/living/silicon/robot/R = user - R.cell.charge -= 100 - else - matter-- - cooldown = world.time + cooldowndelay diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm deleted file mode 100644 index 790699a00c..0000000000 --- a/code/game/objects/items/airlock_painter.dm +++ /dev/null @@ -1,127 +0,0 @@ -/obj/item/airlock_painter - name = "airlock painter" - desc = "" - icon = 'icons/obj/objects.dmi' - icon_state = "paint sprayer" - item_state = "paint sprayer" - - w_class = WEIGHT_CLASS_SMALL - - custom_materials = list(/datum/material/iron=50, /datum/material/glass=50) - - flags_1 = CONDUCT_1 - item_flags = NOBLUDGEON - slot_flags = ITEM_SLOT_BELT - usesound = 'sound/blank.ogg' - - var/obj/item/toner/ink = null - -/obj/item/airlock_painter/Initialize() - . = ..() - ink = new /obj/item/toner(src) - -//This proc doesn't just check if the painter can be used, but also uses it. -//Only call this if you are certain that the painter will be used right after this check! -/obj/item/airlock_painter/proc/use_paint(mob/user) - if(can_use(user)) - ink.charges-- - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - return 1 - else - return 0 - -//This proc only checks if the painter can be used. -//Call this if you don't want the painter to be used right after this check, for example -//because you're expecting user input. -/obj/item/airlock_painter/proc/can_use(mob/user) - if(!ink) - to_chat(user, "There is no toner cartridge installed in [src]!") - return 0 - else if(ink.charges < 1) - to_chat(user, "[src] is out of ink!") - return 0 - else - return 1 - -/obj/item/airlock_painter/suicide_act(mob/user) - var/obj/item/organ/lungs/L = user.getorganslot(ORGAN_SLOT_LUNGS) - - if(can_use(user) && L) - user.visible_message("[user] is inhaling toner from [src]! It looks like [user.p_theyre()] trying to commit suicide!") - use(user) - - // Once you've inhaled the toner, you throw up your lungs - // and then die. - - // Find out if there is an open turf in front of us, - // and if not, pick the turf we are standing on. - var/turf/T = get_step(get_turf(src), user.dir) - if(!isopenturf(T)) - T = get_turf(src) - - // they managed to lose their lungs between then and - // now. Good job. - if(!L) - return OXYLOSS - - L.Remove(user) - - // make some colorful reagent, and apply it to the lungs - L.create_reagents(10) - L.reagents.add_reagent(/datum/reagent/colorful_reagent, 10) - L.reagents.reaction(L, TOUCH, 1) - - // TODO maybe add some colorful vomit? - - user.visible_message("[user] vomits out [user.p_their()] [L]!") - playsound(user.loc, 'sound/blank.ogg', 50, TRUE) - - L.forceMove(T) - - return (TOXLOSS|OXYLOSS) - else if(can_use(user) && !L) - user.visible_message("[user] is spraying toner on [user.p_them()]self from [src]! It looks like [user.p_theyre()] trying to commit suicide.") - user.reagents.add_reagent(/datum/reagent/colorful_reagent, 1) - user.reagents.reaction(user, TOUCH, 1) - return TOXLOSS - - else - user.visible_message("[user] is trying to inhale toner from [src]! It might be a suicide attempt if [src] had any toner.") - return SHAME - - -/obj/item/airlock_painter/examine(mob/user) - . = ..() - if(!ink) - . += "It doesn't have a toner cartridge installed." - return - var/ink_level = "high" - if(ink.charges < 1) - ink_level = "empty" - else if((ink.charges/ink.max_charges) <= 0.25) //25% - ink_level = "low" - else if((ink.charges/ink.max_charges) > 1) //Over 100% (admin var edit) - ink_level = "dangerously high" - . += "Its ink levels look [ink_level]." - - -/obj/item/airlock_painter/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/toner)) - if(ink) - to_chat(user, "[src] already contains \a [ink]!") - return - if(!user.transferItemToLoc(W, src)) - return - to_chat(user, "I install [W] into [src].") - ink = W - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - else - return ..() - -/obj/item/airlock_painter/attack_self(mob/user) - if(ink) - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - ink.forceMove(user.drop_location()) - user.put_in_hands(ink) - to_chat(user, "I remove [ink] from [src].") - ink = null diff --git a/code/game/objects/items/apc_frame.dm b/code/game/objects/items/apc_frame.dm deleted file mode 100644 index 743fef18ae..0000000000 --- a/code/game/objects/items/apc_frame.dm +++ /dev/null @@ -1,123 +0,0 @@ -/obj/item/wallframe - icon = 'icons/obj/wallframe.dmi' - custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT*2) - flags_1 = CONDUCT_1 - item_state = "syringe_kit" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - w_class = WEIGHT_CLASS_SMALL - var/result_path - var/inverse = 0 // For inverse dir frames like light fixtures. - var/pixel_shift //The amount of pixels - -/obj/item/wallframe/proc/try_build(turf/on_wall, mob/user) - if(get_dist(on_wall,user)>1) - return - var/ndir = get_dir(on_wall, user) - if(!(ndir in GLOB.cardinals)) - return - var/turf/T = get_turf(user) - var/area/A = get_area(T) - if(!isfloorturf(T)) - to_chat(user, "I cannot place [src] on this spot!") - return - if(A.always_unpowered) - to_chat(user, "I cannot place [src] in this area!") - return - if(gotwallitem(T, ndir, inverse*2)) - to_chat(user, "There's already an item on this wall!") - return - - return TRUE - -/obj/item/wallframe/proc/attach(turf/on_wall, mob/user) - if(result_path) - playsound(src.loc, 'sound/blank.ogg', 75, TRUE) - user.visible_message("[user.name] attaches [src] to the wall.", - "I attach [src] to the wall.", - "I hear clicking.") - var/ndir = get_dir(on_wall,user) - if(inverse) - ndir = turn(ndir, 180) - - var/obj/O = new result_path(get_turf(user), ndir, TRUE) - if(pixel_shift) - switch(ndir) - if(NORTH) - O.pixel_y = pixel_shift - if(SOUTH) - O.pixel_y = -pixel_shift - if(EAST) - O.pixel_x = pixel_shift - if(WEST) - O.pixel_x = -pixel_shift - after_attach(O) - - qdel(src) - -/obj/item/wallframe/proc/after_attach(obj/O) - transfer_fingerprints_to(O) - -/obj/item/wallframe/attackby(obj/item/W, mob/user, params) - ..() - if(W.tool_behaviour == TOOL_SCREWDRIVER) - // For camera-building borgs - var/turf/T = get_step(get_turf(user), user.dir) - if(iswallturf(T)) - T.attackby(src, user, params) - - var/metal_amt = round(custom_materials[getmaterialref(/datum/material/iron)]/MINERAL_MATERIAL_AMOUNT) //Replace this shit later - var/glass_amt = round(custom_materials[getmaterialref(/datum/material/glass)]/MINERAL_MATERIAL_AMOUNT) //Replace this shit later - - if(W.tool_behaviour == TOOL_WRENCH && (metal_amt || glass_amt)) - to_chat(user, "I dismantle [src].") - if(metal_amt) - new /obj/item/stack/sheet/metal(get_turf(src), metal_amt) - if(glass_amt) - new /obj/item/stack/sheet/glass(get_turf(src), glass_amt) - qdel(src) - - - -// APC HULL -/obj/item/wallframe/apc - name = "\improper APC frame" - desc = "" - icon_state = "apc" - result_path = /obj/machinery/power/apc - inverse = 1 - - -/obj/item/wallframe/apc/try_build(turf/on_wall, user) - if(!..()) - return - var/turf/T = get_turf(on_wall) //the user is not where it needs to be. - var/area/A = get_area(user) - if(A.get_apc()) - to_chat(user, "This area already has an APC!") - return //only one APC per area - if(!A.requires_power) - to_chat(user, "I cannot place [src] in this area!") - return //can't place apcs in areas with no power requirement - for(var/obj/machinery/power/terminal/E in T) - if(E.master) - to_chat(user, "There is another network terminal here!") - return - else - new /obj/item/stack/cable_coil(T, 10) - to_chat(user, "I cut the cables and disassemble the unused power terminal.") - qdel(E) - return TRUE - - -/obj/item/electronics - desc = "" - icon = 'icons/obj/module.dmi' - icon_state = "door_electronics" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - flags_1 = CONDUCT_1 - w_class = WEIGHT_CLASS_SMALL - custom_materials = list(/datum/material/iron=50, /datum/material/glass=50) - grind_results = list(/datum/reagent/iron = 10, /datum/reagent/silicon = 10) diff --git a/code/game/objects/items/bedsheets.dm b/code/game/objects/items/bedsheets.dm new file mode 100644 index 0000000000..504ff835a7 --- /dev/null +++ b/code/game/objects/items/bedsheets.dm @@ -0,0 +1,118 @@ +/* +CONTAINS: +BEDSHEETS +*/ + +/obj/item/bedsheet + name = "bedsheet" + desc = "" + icon = 'icons/obj/bedsheets.dmi' + lefthand_file = 'icons/mob/inhands/misc/bedsheet_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/bedsheet_righthand.dmi' + icon_state = "sheetwhite" + item_state = "sheetwhite" + layer = OBJ_LAYER + plane = GAME_PLANE_UPPER + throwforce = 0 + throw_speed = 1 + throw_range = 2 + w_class = WEIGHT_CLASS_TINY + resistance_flags = FLAMMABLE + dying_key = DYE_REGISTRY_BEDSHEET + + dog_fashion = /datum/dog_fashion/head/ghost + var/list/dream_messages = list("white") + var/datum/weakref/signal_sleeper //this is our goldylocks + +/obj/item/bedsheet/Initialize() + . = ..() + AddElement(/datum/element/bed_tuckable, 0, 0, 0) + +/obj/item/bedsheet/attack_self(mob/user) + if(!user.CanReach(src)) //No telekenetic grabbing. + return + if(!user.dropItemToGround(src)) + return + coverup(user) + add_fingerprint(user) + +/obj/item/bedsheet/proc/coverup(mob/living/sleeper) + layer = ABOVE_MOB_LAYER + plane = -2 + pixel_x = 0 + pixel_y = 0 + to_chat(sleeper, span_notice("I cover myself with [src].")) + var/angle = sleeper.lying_prev + dir = angle2dir(angle + 180) // 180 flips it to be the same direction as the mob + signal_sleeper = WEAKREF(sleeper) + RegisterSignal(src, COMSIG_ITEM_PICKUP, PROC_REF(on_pickup)) + RegisterSignal(sleeper, COMSIG_MOVABLE_MOVED, PROC_REF(smooth_sheets)) + RegisterSignal(sleeper, COMSIG_LIVING_SET_RESTING, PROC_REF(smooth_sheets)) + RegisterSignal(sleeper, COMSIG_PARENT_QDELETING, PROC_REF(smooth_sheets)) + +/obj/item/bedsheet/proc/smooth_sheets(mob/living/sleeper) + SIGNAL_HANDLER + UnregisterSignal(src, COMSIG_ITEM_PICKUP) + UnregisterSignal(sleeper, COMSIG_MOVABLE_MOVED) + UnregisterSignal(sleeper, COMSIG_LIVING_SET_RESTING) + UnregisterSignal(sleeper, COMSIG_PARENT_QDELETING) + to_chat(sleeper, span_notice("I smooth [src] out beneath you.")) + layer = initial(layer) + plane = initial(plane) + signal_sleeper = null + +// We need to do this in case someone picks up a bedsheet while a mob is covered up +// otherwise the bedsheet will disappear while in our hands if the sleeper signals get activated by moving +/obj/item/bedsheet/proc/on_pickup(datum/source, mob/grabber) + SIGNAL_HANDLER + var/mob/living/sleeper = signal_sleeper?.resolve() + UnregisterSignal(src, COMSIG_ITEM_PICKUP) + UnregisterSignal(sleeper, COMSIG_MOVABLE_MOVED) + UnregisterSignal(sleeper, COMSIG_LIVING_SET_RESTING) + UnregisterSignal(sleeper, COMSIG_PARENT_QDELETING) + signal_sleeper = null + +/obj/item/bedsheet/rogue/cloth + desc = "" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "cloth_bedsheet" + item_state = "cloth_bedsheet" + pixel_y = 5 + +/obj/item/bedsheet/rogue/pelt + desc = "" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "pelt_bedsheet" + item_state = "pelt_bedsheet" + pixel_y = 5 + +/obj/item/bedsheet/rogue/wool + desc = "" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "wool_bedsheet" + item_state = "wool_bedsheet" + pixel_y = 5 + +/obj/item/bedsheet/rogue/double_pelt + desc = "" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "double_pelt_bedsheet" + item_state = "double_pelt_bedsheet" + +/obj/item/bedsheet/rogue/fabric + desc = "" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "fabric_bedsheet" + item_state = "fabric_bedsheet" + pixel_y = 5 + +/obj/item/bedsheet/rogue/fabric_double + desc = "" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "double_fabric_bedsheet" + item_state = "double_fabric_bedsheet" + +/obj/item/bedsheet/random + icon_state = "random_bedsheet" + name = "random bedsheet" + desc = "" diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index 4cd65eb8bf..a8d59e3d42 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -208,28 +208,6 @@ /proc/rename_area(a, new_name) var/area/A = get_area(a) - var/prevname = "[A.name]" - set_area_machinery_title(A, new_name, prevname) A.name = new_name - if(A.firedoors) - for(var/D in A.firedoors) - var/obj/machinery/door/firedoor/FD = D - FD.CalculateAffectingAreas() A.update_areasize() return TRUE - - -/proc/set_area_machinery_title(area/A, title, oldtitle) - if(!oldtitle) // or replacetext goes to infinite loop - return - for(var/obj/machinery/airalarm/M in A) - M.name = replacetext(M.name,oldtitle,title) - for(var/obj/machinery/power/apc/M in A) - M.name = replacetext(M.name,oldtitle,title) - for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/M in A) - M.name = replacetext(M.name,oldtitle,title) - for(var/obj/machinery/atmospherics/components/unary/vent_pump/M in A) - M.name = replacetext(M.name,oldtitle,title) - for(var/obj/machinery/door/M in A) - M.name = replacetext(M.name,oldtitle,title) - //TODO: much much more. Unnamed airlocks, cameras, etc. diff --git a/code/game/objects/items/body_egg.dm b/code/game/objects/items/body_egg.dm deleted file mode 100644 index f5a5f8fa2b..0000000000 --- a/code/game/objects/items/body_egg.dm +++ /dev/null @@ -1,53 +0,0 @@ -/obj/item/organ/body_egg - name = "body egg" - desc = "" - icon_state = "innards" - zone = BODY_ZONE_CHEST - slot = ORGAN_SLOT_PARASITE_EGG - -/obj/item/organ/body_egg/on_find(mob/living/finder) - ..() - to_chat(finder, "I found an unknown alien organism in [owner]'s [zone]!") - -/obj/item/organ/body_egg/Initialize() - . = ..() - if(iscarbon(loc)) - Insert(loc) - -/obj/item/organ/body_egg/Insert(mob/living/carbon/M, special = 0) - ..() - ADD_TRAIT(owner, TRAIT_XENO_HOST, TRAIT_GENERIC) - ADD_TRAIT(owner, TRAIT_XENO_IMMUNE, "xeno immune") - owner.med_hud_set_status() - INVOKE_ASYNC(src, PROC_REF(AddInfectionImages), owner) - -/obj/item/organ/body_egg/Remove(mob/living/carbon/M, special = 0) - if(owner) - REMOVE_TRAIT(owner, TRAIT_XENO_HOST, TRAIT_GENERIC) - REMOVE_TRAIT(owner, TRAIT_XENO_IMMUNE, "xeno immune") - owner.med_hud_set_status() - INVOKE_ASYNC(src, PROC_REF(RemoveInfectionImages), owner) - ..() - -/obj/item/organ/body_egg/on_death() - . = ..() - if(!owner) - return - egg_process() - -/obj/item/organ/body_egg/on_life() - . = ..() - egg_process() - -/obj/item/organ/body_egg/proc/egg_process() - return - -/obj/item/organ/body_egg/proc/RefreshInfectionImage() - RemoveInfectionImages() - AddInfectionImages() - -/obj/item/organ/body_egg/proc/AddInfectionImages() - return - -/obj/item/organ/body_egg/proc/RemoveInfectionImages() - return diff --git a/code/game/objects/items/candle.dm b/code/game/objects/items/candle.dm index fa26c32f4f..abcffc6a79 100644 --- a/code/game/objects/items/candle.dm +++ b/code/game/objects/items/candle.dm @@ -33,9 +33,9 @@ A.fire_act() /obj/item/candle/Crossed(H as mob|obj) - if(ishuman(H) || issilicon(H)) //i guess carp and shit shouldn't set them off + if(ishuman(H)) //i guess carp and shit shouldn't set them off var/mob/living/carbon/M = H - if(issilicon(H) || M.m_intent == MOVE_INTENT_RUN) + if(M.m_intent == MOVE_INTENT_RUN) wax = 100 put_out_candle() @@ -111,7 +111,7 @@ /obj/item/candle/yellow/lit/infinite light_power = 1 - light_range = 4 + light_outer_range = 4 start_lit = TRUE infinite = TRUE icon_state = "candle1_lit" @@ -119,7 +119,7 @@ /obj/item/candle/yellow/lit/infinite/strong light_power = 2 - light_range = 4 + light_outer_range = 4 pixel_x = 4 /obj/item/candle/yellow/lit/infinite/strong/skull diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 1747a0ce6b..aa85bfff2b 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -115,7 +115,6 @@ var/assignment = null var/access_txt // mapping aid var/datum/bank_account/registered_account - var/obj/machinery/paystand/my_store var/uses_overlays = TRUE var/icon/cached_flat_icon @@ -127,8 +126,6 @@ /obj/item/card/id/Destroy() if (registered_account) registered_account.bank_cards -= src - if (my_store && my_store.my_card == src) - my_store.my_card = null return ..() /obj/item/card/id/attack_self(mob/user) @@ -363,106 +360,6 @@ update_label() lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' -/obj/item/card/id/syndicate - name = "agent card" - access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE) - var/anyone = FALSE //Can anyone forge the ID or just syndicate? - var/forged = FALSE //have we set a custom name and job assignment, or will we use what we're given when we chameleon change? - -/obj/item/card/id/syndicate/Initialize() - . = ..() - var/datum/action/item_action/chameleon/change/id/chameleon_action = new(src) - chameleon_action.chameleon_type = /obj/item/card/id - chameleon_action.chameleon_name = "ID Card" - chameleon_action.initialize_disguises() - -/obj/item/card/id/syndicate/afterattack(obj/item/O, mob/user, proximity) - if(!proximity) - return - if(istype(O, /obj/item/card/id)) - var/obj/item/card/id/I = O - src.access |= I.access - if(isliving(user) && user.mind) - if(user.mind.special_role || anyone) - to_chat(usr, "The card's microscanners activate as you pass it over the ID, copying its access.") - -/obj/item/card/id/syndicate/attack_self(mob/user) - if(isliving(user) && user.mind) - var/first_use = registered_name ? FALSE : TRUE - if(!(user.mind.special_role || anyone)) //Unless anyone is allowed, only syndies can use the card, to stop metagaming. - if(first_use) //If a non-syndie is the first to forge an unassigned agent ID, then anyone can forge it. - anyone = TRUE - else - return ..() - - var/popup_input = alert(user, "Choose Action", "Agent ID", "Show", "Forge/Reset", "Change Account ID") - if(user.incapacitated()) - return - if(popup_input == "Forge/Reset" && !forged) - var/input_text = input(user, "What name would you like to put on this card? Leave blank to randomise.", "Agent card name", registered_name ? registered_name : (ishuman(user) ? user.real_name : user.name))as text | null - - if (isnull(input_text)) - return - - var/t = copytext(sanitize(input_text), 1, 26) - if(!t || t == "Unknown" || t == "floor" || t == "wall" || t == "r-wall") //Same as mob/dead/new_player/prefrences.dm - if (ishuman(user)) - var/mob/living/carbon/human/human_agent = user - - // Invalid/blank names give a randomly generated one. - if (human_agent.gender == "male") - registered_name = "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]" - else if (human_agent.gender == "female") - registered_name = "[pick(GLOB.first_names_female)] [pick(GLOB.last_names)]" - else - registered_name = "[pick(GLOB.first_names)] [pick(GLOB.last_names)]" - else - alert ("Invalid name.") - return - else - registered_name = t - - var/u = copytext(sanitize(input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", assignment ? assignment : "Assistant") as text | null),1,MAX_MESSAGE_LEN) - if(!u) - registered_name = "" - return - assignment = u - update_label() - forged = TRUE - to_chat(user, "I successfully forge the ID card.") - - - // First time use automatically sets the account id to the user. - if (first_use && !registered_account) - if(ishuman(user)) - var/mob/living/carbon/human/accountowner = user - - for(var/bank_account in SSeconomy.bank_accounts) - var/datum/bank_account/account = bank_account - if(account.account_id == accountowner.account_id) - account.bank_cards += src - registered_account = account - to_chat(user, "My account number has been automatically assigned.") - return - else if (popup_input == "Forge/Reset" && forged) - registered_name = initial(registered_name) - assignment = initial(assignment) - update_label() - forged = FALSE - to_chat(user, "I successfully reset the ID card.") - return - else if (popup_input == "Change Account ID") - set_new_account(user) - return - return ..() - -/obj/item/card/id/syndicate/anyone - anyone = TRUE - -/obj/item/card/id/syndicate/nuke_leader - name = "lead agent card" - access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE, ACCESS_SYNDICATE_LEADER) - /obj/item/card/id/syndicate_command name = "syndicate ID card" id_type_name = "syndicate ID card" @@ -484,12 +381,6 @@ update_label() registered_name = "Captain" assignment = "Captain" -/obj/item/card/id/captains_spare/Initialize() - var/datum/job/captain/J = new/datum/job/captain - access = J.get_access() - . = ..() - update_label() - /obj/item/card/id/captains_spare/update_label() //so it doesn't change to Captain's ID card (Captain) on a sneeze if(registered_name == "Captain") name = "[id_type_name][(!assignment || assignment == "Captain") ? "" : " ([assignment])"]" diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm deleted file mode 100644 index 9d77847f40..0000000000 --- a/code/game/objects/items/chrono_eraser.dm +++ /dev/null @@ -1,278 +0,0 @@ -#define CHRONO_BEAM_RANGE 3 -#define CHRONO_FRAME_COUNT 22 -/obj/item/chrono_eraser - name = "Timestream Eradication Device" - desc = "" - icon = 'icons/obj/chronos.dmi' - icon_state = "chronobackpack" - item_state = "backpack" - lefthand_file = 'icons/mob/inhands/equipment/backpack_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/backpack_righthand.dmi' - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - slowdown = 1 - actions_types = list(/datum/action/item_action/equip_unequip_TED_Gun) - var/obj/item/gun/energy/chrono_gun/PA = null - var/list/erased_minds = list() //a collection of minds from the dead - -/obj/item/chrono_eraser/proc/pass_mind(datum/mind/M) - erased_minds += M - -/obj/item/chrono_eraser/proc/delete_gun() - if(PA) - QDEL_NULL(PA) - -/obj/item/chrono_eraser/dropped() - ..() - delete_gun() - -/obj/item/chrono_eraser/Destroy() - delete_gun() - return ..() - -/obj/item/chrono_eraser/ui_action_click(mob/user) - if(iscarbon(user)) - var/mob/living/carbon/C = user - if(C.back == src) - if(PA) - QDEL_NULL(PA) - else - PA = new(src) - user.put_in_hands(PA) - -/obj/item/chrono_eraser/item_action_slot_check(slot, mob/user) - if(slot == SLOT_BACK) - return 1 - -/obj/item/gun/energy/chrono_gun - name = "T.E.D. Projection Apparatus" - desc = "" - icon = 'icons/obj/chronos.dmi' - icon_state = "chronogun" - item_state = "chronogun" - w_class = WEIGHT_CLASS_NORMAL - item_flags = DROPDEL - ammo_type = list(/obj/item/ammo_casing/energy/chrono_beam) - can_charge = FALSE - fire_delay = 50 - var/obj/item/chrono_eraser/TED = null - var/obj/structure/chrono_field/field = null - var/turf/startpos = null - -/obj/item/gun/energy/chrono_gun/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CHRONO_GUN_TRAIT) - if(istype(loc, /obj/item/chrono_eraser)) - TED = loc - else //admin must have spawned it - TED = new(src.loc) - return INITIALIZE_HINT_QDEL - -/obj/item/gun/energy/chrono_gun/update_icon() - return - -/obj/item/gun/energy/chrono_gun/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - if(field) - field_disconnect(field) - ..() - -/obj/item/gun/energy/chrono_gun/Destroy() - if(TED) - TED.PA = null - TED = null - if(field) - field_disconnect(field) - return ..() - -/obj/item/gun/energy/chrono_gun/proc/field_connect(obj/structure/chrono_field/F) - var/mob/living/user = loc - if(F.gun) - if(isliving(user) && F.captured) - to_chat(user, "FAIL: [F.captured] already has an existing connection.") - field_disconnect(F) - else - startpos = get_turf(src) - field = F - F.gun = src - if(isliving(user) && F.captured) - to_chat(user, "Connection established with target: [F.captured]") - - -/obj/item/gun/energy/chrono_gun/proc/field_disconnect(obj/structure/chrono_field/F) - if(F && field == F) - var/mob/living/user = loc - if(F.gun == src) - F.gun = null - if(isliving(user) && F.captured) - to_chat(user, "Disconnected from target: [F.captured]") - field = null - startpos = null - -/obj/item/gun/energy/chrono_gun/proc/field_check(obj/structure/chrono_field/F) - if(F) - if(field == F) - var/turf/currentpos = get_turf(src) - var/mob/living/user = loc - if((currentpos == startpos) && (field in view(CHRONO_BEAM_RANGE, currentpos)) && (user.mobility_flags & MOBILITY_STAND) && (user.stat == CONSCIOUS)) - return 1 - field_disconnect(F) - return 0 - -/obj/item/gun/energy/chrono_gun/proc/pass_mind(datum/mind/M) - if(TED) - TED.pass_mind(M) - - -/obj/projectile/energy/chrono_beam - name = "eradication beam" - icon_state = "chronobolt" - range = CHRONO_BEAM_RANGE - nodamage = TRUE - var/obj/item/gun/energy/chrono_gun/gun = null - -/obj/projectile/energy/chrono_beam/Initialize() - . = ..() - var/obj/item/ammo_casing/energy/chrono_beam/C = loc - if(istype(C)) - gun = C.gun - -/obj/projectile/energy/chrono_beam/on_hit(atom/target) - if(target && gun && isliving(target)) - var/obj/structure/chrono_field/F = new(target.loc, target, gun) - gun.field_connect(F) - - -/obj/item/ammo_casing/energy/chrono_beam - name = "eradication beam" - projectile_type = /obj/projectile/energy/chrono_beam - icon_state = "chronobolt" - e_cost = 0 - var/obj/item/gun/energy/chrono_gun/gun - -/obj/item/ammo_casing/energy/chrono_beam/Initialize() - if(istype(loc)) - gun = loc - . = ..() - - - - - -/obj/structure/chrono_field - name = "eradication field" - desc = "" - icon = 'icons/effects/effects.dmi' - icon_state = "chronofield" - density = FALSE - anchored = TRUE - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF - move_resist = INFINITY - interaction_flags_atom = NONE - var/mob/living/captured = null - var/obj/item/gun/energy/chrono_gun/gun = null - var/tickstokill = 15 - var/mutable_appearance/mob_underlay - var/preloaded = 0 - var/RPpos = null - -/obj/structure/chrono_field/Initialize(mapload, mob/living/target, obj/item/gun/energy/chrono_gun/G) - if(target && isliving(target) && G) - target.forceMove(src) - captured = target - var/icon/mob_snapshot = getFlatIcon(target) - var/icon/cached_icon = new() - - for(var/i=1, i<=CHRONO_FRAME_COUNT, i++) - var/icon/removing_frame = icon('icons/obj/chronos.dmi', "erasing", SOUTH, i) - var/icon/mob_icon = icon(mob_snapshot) - mob_icon.Blend(removing_frame, ICON_MULTIPLY) - cached_icon.Insert(mob_icon, "frame[i]") - - mob_underlay = mutable_appearance(cached_icon, "frame1") - update_icon() - - desc = initial(desc) + "
    It appears to contain [target.name]." - START_PROCESSING(SSobj, src) - return ..() - -/obj/structure/chrono_field/Destroy() - if(gun && gun.field_check(src)) - gun.field_disconnect(src) - return ..() - -/obj/structure/chrono_field/update_icon() - var/ttk_frame = 1 - (tickstokill / initial(tickstokill)) - ttk_frame = CLAMP(CEILING(ttk_frame * CHRONO_FRAME_COUNT, 1), 1, CHRONO_FRAME_COUNT) - if(ttk_frame != RPpos) - RPpos = ttk_frame - mob_underlay.icon_state = "frame[RPpos]" - underlays = list() //hack: BYOND refuses to update the underlay to match the icon_state otherwise - underlays += mob_underlay - -/obj/structure/chrono_field/process() - if(captured) - if(tickstokill > initial(tickstokill)) - for(var/atom/movable/AM in contents) - AM.forceMove(drop_location()) - qdel(src) - else if(tickstokill <= 0) - to_chat(captured, "As the last essence of your being is erased from time, you are taken back to your most enjoyable memory. You feel happy...") - var/mob/dead/observer/ghost = captured.ghostize(1) - if(captured.mind) - if(ghost) - ghost.mind = null - if(gun) - gun.pass_mind(captured.mind) - qdel(captured) - qdel(src) - else - captured.Unconscious(80) - if(captured.loc != src) - captured.forceMove(src) - update_icon() - if(gun) - if(gun.field_check(src)) - tickstokill-- - else - gun = null - return .() - else - tickstokill++ - else - qdel(src) - -/obj/structure/chrono_field/bullet_act(obj/projectile/P) - if(istype(P, /obj/projectile/energy/chrono_beam)) - var/obj/projectile/energy/chrono_beam/beam = P - var/obj/item/gun/energy/chrono_gun/Pgun = beam.gun - if(Pgun && istype(Pgun)) - Pgun.field_connect(src) - else - return BULLET_ACT_HIT - -/obj/structure/chrono_field/assume_air() - return 0 - -/obj/structure/chrono_field/return_air() //we always have nominal air and temperature - var/datum/gas_mixture/GM = new - GM.add_gases(/datum/gas/oxygen, /datum/gas/nitrogen) - GM.gases[/datum/gas/oxygen][MOLES] = MOLES_O2STANDARD - GM.gases[/datum/gas/nitrogen][MOLES] = MOLES_N2STANDARD - GM.temperature = T20C - return GM - -/obj/structure/chrono_field/singularity_act() - return - -/obj/structure/chrono_field/singularity_pull() - return - -/obj/structure/chrono_field/ex_act() - return - -/obj/structure/chrono_field/blob_act(obj/structure/blob/B) - return - - -#undef CHRONO_BEAM_RANGE -#undef CHRONO_FRAME_COUNT diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index d0bd84efae..50c761cae2 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -649,11 +649,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM overlay_state = pick(overlay_list) update_icon() -/obj/item/lighter/cyborg_unequip(mob/user) - if(!lit) - return - set_lit(FALSE) - /obj/item/lighter/suicide_act(mob/living/carbon/user) if (lit) user.visible_message("[user] begins holding \the [src]'s flame up to [user.p_their()] face! It looks like [user.p_theyre()] trying to commit suicide!") @@ -838,169 +833,3 @@ CIGARETTE PACKETS ARE IN FANCY.DM R.desc = "" else to_chat(user, "I need to dry this first!") - -/////////////// -//VAPE NATION// -/////////////// -/obj/item/clothing/mask/vape - name = "\improper E-Cigarette" - desc = ""//<<< i'd vape to that. - icon = 'icons/obj/clothing/masks.dmi' - icon_state = "red_vape" - item_state = null - w_class = WEIGHT_CLASS_TINY - var/chem_volume = 100 - var/vapetime = 0 //this so it won't puff out clouds every tick - var/screw = 0 // kinky - var/super = 0 //for the fattest vapes dude. - -/obj/item/clothing/mask/vape/suicide_act(mob/user) - user.visible_message("[user] is puffin hard on dat vape, [user.p_they()] trying to join the vape life on a whole notha plane!")//it doesn't give you cancer, it is cancer - return (TOXLOSS|OXYLOSS) - - -/obj/item/clothing/mask/vape/Initialize(mapload, param_color) - . = ..() - create_reagents(chem_volume, NO_REACT) - reagents.add_reagent(/datum/reagent/drug/nicotine, 50) - if(!param_color) - param_color = pick("red","blue","black","white","green","purple","yellow","orange") - icon_state = "[param_color]_vape" - item_state = "[param_color]_vape" - -/obj/item/clothing/mask/vape/attackby(obj/item/O, mob/user, params) - if(O.tool_behaviour == TOOL_SCREWDRIVER) - if(!screw) - screw = TRUE - to_chat(user, "I open the cap on [src].") - ENABLE_BITFIELD(reagents.flags, OPENCONTAINER) - if(obj_flags & EMAGGED) - add_overlay("vapeopen_high") - else if(super) - add_overlay("vapeopen_med") - else - add_overlay("vapeopen_low") - else - screw = FALSE - to_chat(user, "I close the cap on [src].") - DISABLE_BITFIELD(reagents.flags, OPENCONTAINER) - cut_overlays() - - if(O.tool_behaviour == TOOL_MULTITOOL) - if(screw && !(obj_flags & EMAGGED))//also kinky - if(!super) - cut_overlays() - super = 1 - to_chat(user, "I increase the voltage of [src].") - add_overlay("vapeopen_med") - else - cut_overlays() - super = 0 - to_chat(user, "I decrease the voltage of [src].") - add_overlay("vapeopen_low") - - if(screw && (obj_flags & EMAGGED)) - to_chat(user, "[src] can't be modified!") - else - ..() - - -/obj/item/clothing/mask/vape/emag_act(mob/user)// I WON'T REGRET WRITTING THIS, SURLY. - if(screw) - if(!(obj_flags & EMAGGED)) - cut_overlays() - obj_flags |= EMAGGED - super = 0 - to_chat(user, "I maximize the voltage of [src].") - add_overlay("vapeopen_high") - var/datum/effect_system/spark_spread/sp = new /datum/effect_system/spark_spread //for effect - sp.set_up(5, 1, src) - sp.start() - else - to_chat(user, "[src] is already emagged!") - else - to_chat(user, "I need to open the cap to do that!") - -/obj/item/clothing/mask/vape/attack_self(mob/user) - if(reagents.total_volume > 0) - to_chat(user, "I empty [src] of all reagents.") - reagents.clear_reagents() - -/obj/item/clothing/mask/vape/equipped(mob/user, slot) - . = ..() - if(slot == SLOT_WEAR_MASK) - if(!screw) - to_chat(user, "I start puffing on the vape.") - DISABLE_BITFIELD(reagents.flags, NO_REACT) - START_PROCESSING(SSobj, src) - else //it will not start if the vape is opened. - to_chat(user, "I need to close the cap first!") - -/obj/item/clothing/mask/vape/dropped(mob/user) - . = ..() - if(user.get_item_by_slot(SLOT_WEAR_MASK) == src) - ENABLE_BITFIELD(reagents.flags, NO_REACT) - STOP_PROCESSING(SSobj, src) - -/obj/item/clothing/mask/vape/proc/hand_reagents()//had to rename to avoid duplicate error - if(reagents.total_volume) - if(iscarbon(loc)) - var/mob/living/carbon/C = loc - if (src == C.wear_mask) // if it's in the human/monkey mouth, transfer reagents to the mob - var/fraction = min(REAGENTS_METABOLISM/reagents.total_volume, 1) //this will react instantly, making them a little more dangerous than cigarettes - reagents.reaction(C, INGEST, fraction) - if(!reagents.trans_to(C, REAGENTS_METABOLISM)) - reagents.remove_any(REAGENTS_METABOLISM) - if(reagents.get_reagent_amount(/datum/reagent/fuel)) - //HOT STUFF - C.fire_stacks = 2 - C.IgniteMob() - - if(reagents.get_reagent_amount(/datum/reagent/toxin/plasma)) // the plasma explodes when exposed to fire - var/datum/effect_system/reagents_explosion/e = new() - e.set_up(round(reagents.get_reagent_amount(/datum/reagent/toxin/plasma) / 2.5, 1), get_turf(src), 0, 0) - e.start() - qdel(src) - return - reagents.remove_any(REAGENTS_METABOLISM) - -/obj/item/clothing/mask/vape/process() - var/mob/living/M = loc - - if(isliving(loc)) - M.IgniteMob() - - vapetime++ - - if(!reagents.total_volume) - if(ismob(loc)) - to_chat(M, "[src] is empty!") - STOP_PROCESSING(SSobj, src) - //it's reusable so it won't unequip when empty - return - //open flame removed because vapes are a closed system, they wont light anything on fire - - if(super && vapetime > 3)//Time to start puffing those fat vapes, yo. - var/datum/effect_system/smoke_spread/chem/smoke_machine/s = new - s.set_up(reagents, 1, 24, loc) - s.start() - vapetime = 0 - - if((obj_flags & EMAGGED) && vapetime > 3) - var/datum/effect_system/smoke_spread/chem/smoke_machine/s = new - s.set_up(reagents, 4, 24, loc) - s.start() - vapetime = 0 - if(prob(5))//small chance for the vape to break and deal damage if it's emagged - playsound(get_turf(src), 'sound/blank.ogg', 50, FALSE) - M.apply_damage(20, BURN, BODY_ZONE_HEAD) - M.Paralyze(300, 1, 0) - var/datum/effect_system/spark_spread/sp = new /datum/effect_system/spark_spread - sp.set_up(5, 1, src) - sp.start() - to_chat(M, "[src] suddenly explodes in my mouth!") - qdel(src) - return - - if(reagents && reagents.total_volume) - hand_reagents() diff --git a/code/game/objects/items/circuitboards/circuitboard.dm b/code/game/objects/items/circuitboards/circuitboard.dm deleted file mode 100644 index 6dc5db970d..0000000000 --- a/code/game/objects/items/circuitboards/circuitboard.dm +++ /dev/null @@ -1,67 +0,0 @@ -//File with the circuitboard and circuitboard/machine class definitions and procs - - -// Circuitboard - -/obj/item/circuitboard - name = "circuit board" - icon = 'icons/obj/module.dmi' - icon_state = "id_mod" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - custom_materials = list(/datum/material/glass=1000) - w_class = WEIGHT_CLASS_SMALL - grind_results = list(/datum/reagent/silicon = 20) - var/build_path = null - -/obj/item/circuitboard/proc/apply_default_parts(obj/machinery/M) - return - -// Circuitboard/machine -/*Common Parts: Parts List: Ignitor, Timer, Infra-red laser, Infra-red sensor, t_scanner, Capacitor, Valve, sensor unit, -micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells. -*/ - -/obj/item/circuitboard/machine - var/needs_anchored = TRUE // Whether this machine must be anchored to be constructed. - var/list/req_components // Components required by the machine. - // Example: list(/obj/item/stock_parts/matter_bin = 5) - - var/list/def_components // Default replacements for req_components, to be used in apply_default_parts instead of req_components types - // Example: list(/obj/item/stock_parts/matter_bin = /obj/item/stock_parts/matter_bin/super) - -// Applies the default parts defined by the circuit board when the machine is created -/obj/item/circuitboard/machine/apply_default_parts(obj/machinery/M) - if(!req_components) - return - - M.component_parts = list(src) // List of components always contains a board - moveToNullspace() - - for(var/comp_path in req_components) - var/comp_amt = req_components[comp_path] - if(!comp_amt) - continue - - if(def_components && def_components[comp_path]) - comp_path = def_components[comp_path] - - if(ispath(comp_path, /obj/item/stack)) - M.component_parts += new comp_path(null, comp_amt) - else - for(var/i in 1 to comp_amt) - M.component_parts += new comp_path(null) - - M.RefreshParts() - -/obj/item/circuitboard/machine/examine(mob/user) - . = ..() - if(LAZYLEN(req_components)) - var/list/nice_list = list() - for(var/B in req_components) - var/atom/A = B - if(!ispath(A)) - continue - nice_list += list("[req_components[A]] [initial(A.name)]") - . += "Required components: [english_list(nice_list)]." diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm deleted file mode 100644 index 9c7eb00ac7..0000000000 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ /dev/null @@ -1,500 +0,0 @@ -//Command - -/obj/item/circuitboard/computer/aiupload - name = "AI Upload (Computer Board)" - icon_state = "command" - build_path = /obj/machinery/computer/upload/ai - -/obj/item/circuitboard/computer/borgupload - name = "Cyborg Upload (Computer Board)" - icon_state = "command" - build_path = /obj/machinery/computer/upload/borg - -/obj/item/circuitboard/computer/bsa_control - name = "Bluespace Artillery Controls (Computer Board)" - build_path = /obj/machinery/computer/bsa_control - -/obj/item/circuitboard/computer/card - name = "ID Console (Computer Board)" - icon_state = "command" - build_path = /obj/machinery/computer/card - -/obj/item/circuitboard/computer/card/centcom - name = "CentCom ID Console (Computer Board)" - build_path = /obj/machinery/computer/card/centcom - -/obj/item/circuitboard/computer/card/minor - name = "Department Management Console (Computer Board)" - build_path = /obj/machinery/computer/card/minor - var/target_dept = 1 - var/list/dept_list = list("General","Security","Medical","Science","Engineering") - -/obj/item/circuitboard/computer/card/minor/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - target_dept = (target_dept == dept_list.len) ? 1 : (target_dept + 1) - to_chat(user, "I set the board to \"[dept_list[target_dept]]\".") - else - return ..() - -/obj/item/circuitboard/computer/card/minor/examine(user) - ..() - to_chat(user, "Currently set to \"[dept_list[target_dept]]\".") - - -//obj/item/circuitboard/computer/shield -// name = "Shield Control (Computer Board)" -// icon_state = "command" -// build_path = /obj/machinery/computer/stationshield - -//Engineering - -/obj/item/circuitboard/computer/apc_control - name = "\improper Power Flow Control Console (Computer Board)" - icon_state = "engineering" - build_path = /obj/machinery/computer/apc_control - -/obj/item/circuitboard/computer/atmos_alert - name = "Atmospheric Alert (Computer Board)" - icon_state = "engineering" - build_path = /obj/machinery/computer/atmos_alert - -/obj/item/circuitboard/computer/atmos_control - name = "Atmospheric Monitor (Computer Board)" - icon_state = "engineering" - build_path = /obj/machinery/computer/atmos_control - -/obj/item/circuitboard/computer/atmos_control/incinerator - name = "Incinerator Air Control (Computer Board)" - build_path = /obj/machinery/computer/atmos_control/incinerator - -/obj/item/circuitboard/computer/atmos_control/toxinsmix - name = "Toxins Mixing Air Control (Computer Board)" - build_path = /obj/machinery/computer/atmos_control/toxinsmix - -/obj/item/circuitboard/computer/atmos_control/tank - name = "Tank Control (Computer Board)" - build_path = /obj/machinery/computer/atmos_control/tank - -/obj/item/circuitboard/computer/atmos_control/tank/oxygen_tank - name = "Oxygen Supply Control (Computer Board)" - build_path = /obj/machinery/computer/atmos_control/tank/oxygen_tank - -/obj/item/circuitboard/computer/atmos_control/tank/toxin_tank - name = "Plasma Supply Control (Computer Board)" - build_path = /obj/machinery/computer/atmos_control/tank/toxin_tank - -/obj/item/circuitboard/computer/atmos_control/tank/air_tank - name = "Mixed Air Supply Control (Computer Board)" - build_path = /obj/machinery/computer/atmos_control/tank/air_tank - -/obj/item/circuitboard/computer/atmos_control/tank/mix_tank - name = "Gas Mix Supply Control (Computer Board)" - build_path = /obj/machinery/computer/atmos_control/tank/mix_tank - -/obj/item/circuitboard/computer/atmos_control/tank/nitrous_tank - name = "Nitrous Oxide Supply Control (Computer Board)" - build_path = /obj/machinery/computer/atmos_control/tank/nitrous_tank - -/obj/item/circuitboard/computer/atmos_control/tank/nitrogen_tank - name = "Nitrogen Supply Control (Computer Board)" - build_path = /obj/machinery/computer/atmos_control/tank/nitrogen_tank - -/obj/item/circuitboard/computer/atmos_control/tank/carbon_tank - name = "Carbon Dioxide Supply Control (Computer Board)" - build_path = /obj/machinery/computer/atmos_control/tank/carbon_tank - -/obj/item/circuitboard/computer/auxillary_base - name = "Auxillary Base Management Console (Computer Board)" - icon_state = "engineering" - build_path = /obj/machinery/computer/auxillary_base - -/obj/item/circuitboard/computer/base_construction - name = "circuit board (Aux Mining Base Construction Console)" - icon_state = "engineering" - build_path = /obj/machinery/computer/camera_advanced/base_construction - -/obj/item/circuitboard/computer/comm_monitor - name = "Telecommunications Monitor (Computer Board)" - icon_state = "engineering" - build_path = /obj/machinery/computer/telecomms/monitor - -/obj/item/circuitboard/computer/comm_server - name = "Telecommunications Server Monitor (Computer Board)" - icon_state = "engineering" - build_path = /obj/machinery/computer/telecomms/server - -/obj/item/circuitboard/computer/communications - name = "Communications (Computer Board)" - icon_state = "engineering" - build_path = /obj/machinery/computer/communications - var/lastTimeUsed = 0 - -/obj/item/circuitboard/computer/message_monitor - name = "Message Monitor (Computer Board)" - icon_state = "engineering" - build_path = /obj/machinery/computer/message_monitor - -/obj/item/circuitboard/computer/powermonitor - name = "Power Monitor (Computer Board)" //name fixed 250810 - icon_state = "engineering" - build_path = /obj/machinery/computer/monitor - -/obj/item/circuitboard/computer/powermonitor/secret - name = "Outdated Power Monitor (Computer Board)" //Variant used on ruins to prevent them from showing up on PDA's. - icon_state = "engineering" - build_path = /obj/machinery/computer/monitor/secret - -/obj/item/circuitboard/computer/sat_control - name = "Satellite Network Control (Computer Board)" - icon_state = "engineering" - build_path = /obj/machinery/computer/sat_control - -/obj/item/circuitboard/computer/solar_control - name = "Solar Control (Computer Board)" //name fixed 250810 - icon_state = "engineering" - build_path = /obj/machinery/power/solar_control - -/obj/item/circuitboard/computer/stationalert - name = "Station Alerts (Computer Board)" - icon_state = "engineering" - build_path = /obj/machinery/computer/station_alert - -/obj/item/circuitboard/computer/turbine_computer - name = "Turbine Computer (Computer Board)" - icon_state = "engineering" - build_path = /obj/machinery/computer/turbine_computer - -/obj/item/circuitboard/computer/turbine_control - name = "Turbine control (Computer Board)" - icon_state = "engineering" - build_path = /obj/machinery/computer/turbine_computer - -//Generic - -/obj/item/circuitboard/computer/arcade/amputation - name = "Mediborg's Amputation Adventure (Computer Board)" - icon_state = "generic" - build_path = /obj/machinery/computer/arcade/amputation - -/obj/item/circuitboard/computer/arcade/battle - name = "Arcade Battle (Computer Board)" - icon_state = "generic" - build_path = /obj/machinery/computer/arcade/battle - -/obj/item/circuitboard/computer/arcade/orion_trail - name = "Orion Trail (Computer Board)" - icon_state = "generic" - build_path = /obj/machinery/computer/arcade/orion_trail - -/obj/item/circuitboard/computer/holodeck// Not going to let people get this, but it's just here for future - name = "Holodeck Control (Computer Board)" - icon_state = "generic" - build_path = /obj/machinery/computer/holodeck - -/* -/obj/item/circuitboard/computer/libraryconsole - name = "Library Visitor Console (Computer Board)" - build_path = /obj/machinery/computer/libraryconsole - -/obj/item/circuitboard/computer/libraryconsole/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - if(build_path == /obj/machinery/computer/libraryconsole/bookmanagement) - name = "Library Visitor Console (Computer Board)" - build_path = /obj/machinery/computer/libraryconsole - to_chat(user, "Defaulting access protocols.") - else - name = "Book Inventory Management Console (Computer Board)" - build_path = /obj/machinery/computer/libraryconsole/bookmanagement - to_chat(user, "Access protocols successfully updated.") - else - return ..() -*/ -/obj/item/circuitboard/computer/monastery_shuttle - name = "Monastery Shuttle (Computer Board)" - icon_state = "generic" - build_path = /obj/machinery/computer/shuttle/monastery_shuttle - -/obj/item/circuitboard/computer/olddoor - name = "DoorMex (Computer Board)" - icon_state = "generic" - build_path = /obj/machinery/computer/pod/old - -/obj/item/circuitboard/computer/pod - name = "Massdriver control (Computer Board)" - icon_state = "generic" - build_path = /obj/machinery/computer/pod - -/obj/item/circuitboard/computer/slot_machine - name = "Slot Machine (Computer Board)" - icon_state = "generic" - build_path = /obj/machinery/computer/slot_machine - -/obj/item/circuitboard/computer/swfdoor - name = "Magix (Computer Board)" - icon_state = "generic" - build_path = /obj/machinery/computer/pod/old/swf - -/obj/item/circuitboard/computer/syndicate_shuttle - name = "Syndicate Shuttle (Computer Board)" - icon_state = "generic" - build_path = /obj/machinery/computer/shuttle/syndicate - var/challenge = FALSE - var/moved = FALSE - -/obj/item/circuitboard/computer/syndicate_shuttle/Initialize() - . = ..() - GLOB.syndicate_shuttle_boards += src - -/obj/item/circuitboard/computer/syndicate_shuttle/Destroy() - GLOB.syndicate_shuttle_boards -= src - return ..() - -/obj/item/circuitboard/computer/syndicatedoor - name = "ProComp Executive (Computer Board)" - icon_state = "generic" - build_path = /obj/machinery/computer/pod/old/syndicate - -/obj/item/circuitboard/computer/white_ship - name = "White Ship (Computer Board)" - icon_state = "generic" - build_path = /obj/machinery/computer/shuttle/white_ship - -/obj/item/circuitboard/computer/white_ship/pod - name = "Salvage Pod (Computer Board)" - build_path = /obj/machinery/computer/shuttle/white_ship/pod - -/obj/item/circuitboard/computer/white_ship/pod/recall - name = "Salvage Pod Recall (Computer Board)" - build_path = /obj/machinery/computer/shuttle/white_ship/pod/recall - -//Medical - -/obj/item/circuitboard/computer/cloning - name = "Cloning (Computer Board)" - icon_state = "medical" - build_path = /obj/machinery/computer/cloning - -/obj/item/circuitboard/computer/crew - name = "Crew Monitoring Console (Computer Board)" - icon_state = "medical" - build_path = /obj/machinery/computer/crew - -/obj/item/circuitboard/computer/med_data - name = "Medical Records Console (Computer Board)" - icon_state = "medical" - build_path = /obj/machinery/computer/med_data - -/obj/item/circuitboard/computer/operating - name = "Operating Computer (Computer Board)" - icon_state = "medical" - build_path = /obj/machinery/computer/operating - -/obj/item/circuitboard/computer/pandemic - name = "PanD.E.M.I.C. 2200 (Computer Board)" - icon_state = "medical" - build_path = /obj/machinery/computer/pandemic - -/obj/item/circuitboard/computer/prototype_cloning - name = "Prototype Cloning (Computer Board)" - icon_state = "medical" - build_path = /obj/machinery/computer/prototype_cloning - -/obj/item/circuitboard/computer/scan_consolenew - name = "DNA Machine (Computer Board)" - icon_state = "medical" - build_path = /obj/machinery/computer/scan_consolenew - -//Science - -/obj/item/circuitboard/computer/aifixer - name = "AI Integrity Restorer (Computer Board)" - icon_state = "science" - build_path = /obj/machinery/computer/aifixer - -/obj/item/circuitboard/computer/launchpad_console - name = "Launchpad Control Console (Computer Board)" - icon_state = "science" - build_path = /obj/machinery/computer/launchpad - -/obj/item/circuitboard/computer/mech_bay_power_console - name = "Mech Bay Power Control Console (Computer Board)" - icon_state = "science" - build_path = /obj/machinery/computer/mech_bay_power_console - -/obj/item/circuitboard/computer/mecha_control - name = "Exosuit Control Console (Computer Board)" - icon_state = "science" - build_path = /obj/machinery/computer/mecha - -/obj/item/circuitboard/computer/nanite_chamber_control - name = "Nanite Chamber Control (Computer Board)" - icon_state = "science" - build_path = /obj/machinery/computer/nanite_chamber_control - -/obj/item/circuitboard/computer/nanite_cloud_controller - name = "Nanite Cloud Control (Computer Board)" - icon_state = "science" - build_path = /obj/machinery/computer/nanite_cloud_controller - -/obj/item/circuitboard/computer/rdconsole - name = "R&D Console (Computer Board)" - icon_state = "science" - build_path = /obj/machinery/computer/rdconsole/core - -/obj/item/circuitboard/computer/rdconsole/production - name = "R&D Console Production Only (Computer Board)" - build_path = /obj/machinery/computer/rdconsole/production - - -/obj/item/circuitboard/computer/rdconsole/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - if(build_path == /obj/machinery/computer/rdconsole/core) - name = "R&D Console - Robotics (Computer Board)" - build_path = /obj/machinery/computer/rdconsole/robotics - to_chat(user, "Access protocols successfully updated.") - else - name = "R&D Console (Computer Board)" - build_path = /obj/machinery/computer/rdconsole/core - to_chat(user, "Defaulting access protocols.") - else - return ..() - -/obj/item/circuitboard/computer/rdservercontrol - name = "R&D Server Control (Computer Board)" - icon_state = "science" - build_path = /obj/machinery/computer/rdservercontrol - -/obj/item/circuitboard/computer/research - name = "Research Monitor (Computer Board)" - icon_state = "science" - build_path = /obj/machinery/computer/security/research - -/obj/item/circuitboard/computer/robotics - name = "Robotics Control (Computer Board)" - icon_state = "science" - build_path = /obj/machinery/computer/robotics - -/obj/item/circuitboard/computer/teleporter - name = "Teleporter (Computer Board)" - icon_state = "science" - build_path = /obj/machinery/computer/teleporter - -/obj/item/circuitboard/computer/xenobiology - name = "circuit board (Xenobiology Console)" - icon_state = "science" - build_path = /obj/machinery/computer/camera_advanced/xenobio - -//Security - -/obj/item/circuitboard/computer/labor_shuttle - name = "Labor Shuttle (Computer Board)" - icon_state = "security" - build_path = /obj/machinery/computer/shuttle/labor - -/obj/item/circuitboard/computer/labor_shuttle/one_way - name = "Prisoner Shuttle Console (Computer Board)" - icon_state = "security" - build_path = /obj/machinery/computer/shuttle/labor/one_way - -/obj/item/circuitboard/computer/gulag_teleporter_console - name = "Labor Camp teleporter console (Computer Board)" - icon_state = "security" - build_path = /obj/machinery/computer/prisoner/gulag_teleporter_computer - -/obj/item/circuitboard/computer/prisoner - name = "Prisoner Management Console (Computer Board)" - icon_state = "security" - build_path = /obj/machinery/computer/prisoner/management - -/obj/item/circuitboard/computer/secure_data - name = "Security Records Console (Computer Board)" - icon_state = "security" - build_path = /obj/machinery/computer/secure_data - -/obj/item/circuitboard/computer/warrant - name = "Security Warrant Viewer (Computer Board)" - icon_state = "security" - build_path = /obj/machinery/computer/warrant - -/obj/item/circuitboard/computer/security - name = "Security Cameras (Computer Board)" - icon_state = "security" - build_path = /obj/machinery/computer/security - -/obj/item/circuitboard/computer/advanced_camera - name = "Advanced Camera Console (Computer Board)" - icon_state = "security" - build_path = /obj/machinery/computer/camera_advanced/syndie - -//Service - -//Supply - -/obj/item/circuitboard/computer/bounty - name = "Nanotrasen Bounty Console (Computer Board)" - icon_state = "supply" - build_path = /obj/machinery/computer/bounty - -/obj/item/circuitboard/computer/cargo - name = "Supply Console (Computer Board)" - icon_state = "supply" - build_path = /obj/machinery/computer/cargo - var/contraband = FALSE - -/obj/item/circuitboard/computer/cargo/multitool_act(mob/living/user) - . = ..() - if(!(obj_flags & EMAGGED)) - contraband = !contraband - to_chat(user, "Receiver spectrum set to [contraband ? "Broad" : "Standard"].") - else - to_chat(user, "The spectrum chip is unresponsive.") - -/obj/item/circuitboard/computer/cargo/emag_act(mob/living/user) - if(!(obj_flags & EMAGGED)) - contraband = TRUE - obj_flags |= EMAGGED - to_chat(user, "I adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.") - -/obj/item/circuitboard/computer/cargo/express - name = "Express Supply Console (Computer Board)" - build_path = /obj/machinery/computer/cargo/express - -/obj/item/circuitboard/computer/cargo/express/multitool_act(mob/living/user) - . = ..() - if (!(obj_flags & EMAGGED)) - to_chat(user, "Routing protocols are already set to: \"factory defaults\".") - else - to_chat(user, "I reset the routing protocols to: \"factory defaults\".") - obj_flags &= ~EMAGGED - -/obj/item/circuitboard/computer/cargo/express/emag_act(mob/living/user) - to_chat(user, "I change the routing protocols, allowing the Drop Pod to land anywhere on the station.") - obj_flags |= EMAGGED - -/obj/item/circuitboard/computer/cargo/request - name = "Supply Request Console (Computer Board)" - build_path = /obj/machinery/computer/cargo/request - -/obj/item/circuitboard/computer/ferry - name = "Transport Ferry (Computer Board)" - icon_state = "supply" - build_path = /obj/machinery/computer/shuttle/ferry - -/obj/item/circuitboard/computer/ferry/request - name = "Transport Ferry Console (Computer Board)" - icon_state = "supply" - build_path = /obj/machinery/computer/shuttle/ferry/request - -/obj/item/circuitboard/computer/mining - name = "Outpost Status Display (Computer Board)" - icon_state = "supply" - build_path = /obj/machinery/computer/security/mining - -/obj/item/circuitboard/computer/mining_shuttle - name = "Mining Shuttle (Computer Board)" - icon_state = "supply" - build_path = /obj/machinery/computer/shuttle/mining - -/obj/item/circuitboard/computer/mining_shuttle/common - name = "Lavaland Shuttle (Computer Board)" - build_path = /obj/machinery/computer/shuttle/mining/common diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm deleted file mode 100644 index 3bcd2fcae8..0000000000 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ /dev/null @@ -1,1171 +0,0 @@ -//Command - -/obj/item/circuitboard/machine/bsa/back - name = "Bluespace Artillery Generator (Machine Board)" - icon_state = "command" - build_path = /obj/machinery/bsa/back //No freebies! - req_components = list( - /obj/item/stock_parts/capacitor/quadratic = 5, - /obj/item/stack/cable_coil = 2) - -/obj/item/circuitboard/machine/bsa/front - name = "Bluespace Artillery Bore (Machine Board)" - icon_state = "command" - build_path = /obj/machinery/bsa/front - req_components = list( - /obj/item/stock_parts/manipulator/femto = 5, - /obj/item/stack/cable_coil = 2) - -/obj/item/circuitboard/machine/bsa/middle - name = "Bluespace Artillery Fusor (Machine Board)" - icon_state = "command" - build_path = /obj/machinery/bsa/middle - req_components = list( - /obj/item/stack/ore/bluespace_crystal = 20, - /obj/item/stack/cable_coil = 2) - -/obj/item/circuitboard/machine/dna_vault - name = "DNA Vault (Machine Board)" - icon_state = "command" - build_path = /obj/machinery/dna_vault //No freebies! - req_components = list( - /obj/item/stock_parts/capacitor/super = 5, - /obj/item/stock_parts/manipulator/pico = 5, - /obj/item/stack/cable_coil = 2) - -//Engineering - -/obj/item/circuitboard/machine/announcement_system - name = "Announcement System (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/announcement_system - req_components = list( - /obj/item/stack/cable_coil = 2, - /obj/item/stack/sheet/glass = 1) - -/obj/item/circuitboard/machine/autolathe - name = "Autolathe (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/autolathe - req_components = list( - /obj/item/stock_parts/matter_bin = 3, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stack/sheet/glass = 1) - -/obj/item/circuitboard/machine/grounding_rod - name = "Grounding Rod (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/power/grounding_rod - req_components = list(/obj/item/stock_parts/capacitor = 1) - needs_anchored = FALSE - - -/obj/item/circuitboard/machine/telecomms/broadcaster - name = "Subspace Broadcaster (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/telecomms/broadcaster - req_components = list( - /obj/item/stock_parts/manipulator = 2, - /obj/item/stack/cable_coil = 1, - /obj/item/stock_parts/subspace/filter = 1, - /obj/item/stock_parts/subspace/crystal = 1, - /obj/item/stock_parts/micro_laser = 2) - -/obj/item/circuitboard/machine/telecomms/bus - name = "Bus Mainframe (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/telecomms/bus - req_components = list( - /obj/item/stock_parts/manipulator = 2, - /obj/item/stack/cable_coil = 1, - /obj/item/stock_parts/subspace/filter = 1) - -/obj/item/circuitboard/machine/telecomms/hub - name = "Hub Mainframe (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/telecomms/hub - req_components = list( - /obj/item/stock_parts/manipulator = 2, - /obj/item/stack/cable_coil = 2, - /obj/item/stock_parts/subspace/filter = 2) - -/obj/item/circuitboard/machine/telecomms/message_server - name = "Messaging Server (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/telecomms/message_server - req_components = list( - /obj/item/stock_parts/manipulator = 2, - /obj/item/stack/cable_coil = 1, - /obj/item/stock_parts/subspace/filter = 3) - -/obj/item/circuitboard/machine/telecomms/processor - name = "Processor Unit (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/telecomms/processor - req_components = list( - /obj/item/stock_parts/manipulator = 3, - /obj/item/stock_parts/subspace/filter = 1, - /obj/item/stock_parts/subspace/treatment = 2, - /obj/item/stock_parts/subspace/analyzer = 1, - /obj/item/stack/cable_coil = 2, - /obj/item/stock_parts/subspace/amplifier = 1) - -/obj/item/circuitboard/machine/telecomms/receiver - name = "Subspace Receiver (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/telecomms/receiver - req_components = list( - /obj/item/stock_parts/subspace/ansible = 1, - /obj/item/stock_parts/subspace/filter = 1, - /obj/item/stock_parts/manipulator = 2, - /obj/item/stock_parts/micro_laser = 1) - -/obj/item/circuitboard/machine/telecomms/relay - name = "Relay Mainframe (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/telecomms/relay - req_components = list( - /obj/item/stock_parts/manipulator = 2, - /obj/item/stack/cable_coil = 2, - /obj/item/stock_parts/subspace/filter = 2) - -/obj/item/circuitboard/machine/telecomms/server - name = "Telecommunication Server (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/telecomms/server - req_components = list( - /obj/item/stock_parts/manipulator = 2, - /obj/item/stack/cable_coil = 1, - /obj/item/stock_parts/subspace/filter = 1) - -/obj/item/circuitboard/machine/tesla_coil - name = "Tesla Controller (Machine Board)" - icon_state = "engineering" - desc = "" - build_path = /obj/machinery/power/tesla_coil - req_components = list(/obj/item/stock_parts/capacitor = 1) - needs_anchored = FALSE - -#define PATH_POWERCOIL /obj/machinery/power/tesla_coil/power -#define PATH_RPCOIL /obj/machinery/power/tesla_coil/research - -/obj/item/circuitboard/machine/tesla_coil/Initialize() - . = ..() - if(build_path) - build_path = PATH_POWERCOIL - -/obj/item/circuitboard/machine/tesla_coil/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - var/obj/item/circuitboard/new_type - var/new_setting - switch(build_path) - if(PATH_POWERCOIL) - new_type = /obj/item/circuitboard/machine/tesla_coil/research - new_setting = "Research" - if(PATH_RPCOIL) - new_type = /obj/item/circuitboard/machine/tesla_coil/power - new_setting = "Power" - name = initial(new_type.name) - build_path = initial(new_type.build_path) - I.play_tool_sound(src) - to_chat(user, "I change the circuitboard setting to \"[new_setting]\".") - else - return ..() - -/obj/item/circuitboard/machine/tesla_coil/power - name = "Tesla Coil (Machine Board)" - build_path = PATH_POWERCOIL - -/obj/item/circuitboard/machine/tesla_coil/research - name = "Tesla Corona Researcher (Machine Board)" - build_path = PATH_RPCOIL - -#undef PATH_POWERCOIL -#undef PATH_RPCOIL - - - -/obj/item/circuitboard/machine/cell_charger - name = "Cell Charger (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/cell_charger - req_components = list(/obj/item/stock_parts/capacitor = 1) - needs_anchored = FALSE - -/obj/item/circuitboard/machine/circulator - name = "Circulator/Heat Exchanger (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/atmospherics/components/binary/circulator - req_components = list() - -/obj/item/circuitboard/machine/emitter - name = "Emitter (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/power/emitter - req_components = list( - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stock_parts/manipulator = 1) - needs_anchored = FALSE - -/obj/item/circuitboard/machine/generator - name = "Thermo-Electric Generator (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/power/generator - req_components = list() - -/obj/item/circuitboard/machine/ntnet_relay - name = "NTNet Relay (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/ntnet_relay - req_components = list( - /obj/item/stack/cable_coil = 2, - /obj/item/stock_parts/subspace/filter = 1) - -/obj/item/circuitboard/machine/pacman - name = "PACMAN-type Generator (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/power/port_gen/pacman - req_components = list( - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stack/cable_coil = 2, - /obj/item/stock_parts/capacitor = 1) - needs_anchored = FALSE - -/obj/item/circuitboard/machine/pacman/super - name = "SUPERPACMAN-type Generator (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/power/port_gen/pacman/super - -/obj/item/circuitboard/machine/pacman/mrs - name = "MRSPACMAN-type Generator (Machine Board)" - build_path = /obj/machinery/power/port_gen/pacman/mrs - -/obj/item/circuitboard/machine/power_compressor - name = "Power Compressor (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/power/compressor - req_components = list( - /obj/item/stack/cable_coil = 5, - /obj/item/stock_parts/manipulator = 6) - -/obj/item/circuitboard/machine/power_turbine - name = "Power Turbine (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/power/turbine - req_components = list( - /obj/item/stack/cable_coil = 5, - /obj/item/stock_parts/capacitor = 6) - -/obj/item/circuitboard/machine/protolathe/department/engineering - name = "Departmental Protolathe (Machine Board) - Engineering" - icon_state = "engineering" - build_path = /obj/machinery/rnd/production/protolathe/department/engineering - -/obj/item/circuitboard/machine/rad_collector - name = "Radiation Collector (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/power/rad_collector - req_components = list( - /obj/item/stack/cable_coil = 5, - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stack/sheet/plasmarglass = 2, - /obj/item/stock_parts/capacitor = 1, - /obj/item/stock_parts/manipulator = 1) - needs_anchored = FALSE - -/obj/item/circuitboard/machine/rtg - name = "RTG (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/power/rtg - req_components = list( - /obj/item/stack/cable_coil = 5, - /obj/item/stock_parts/capacitor = 1, - /obj/item/stack/sheet/mineral/uranium = 10) // We have no Pu-238, and this is the closest thing to it. - -/obj/item/circuitboard/machine/rtg/advanced - name = "Advanced RTG (Machine Board)" - build_path = /obj/machinery/power/rtg/advanced - req_components = list( - /obj/item/stack/cable_coil = 5, - /obj/item/stock_parts/capacitor = 1, - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stack/sheet/mineral/uranium = 10, - /obj/item/stack/sheet/mineral/plasma = 5) - -/obj/item/circuitboard/machine/scanner_gate - name = "Scanner Gate (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/scanner_gate - req_components = list( - /obj/item/stock_parts/scanning_module = 3) - -/obj/item/circuitboard/machine/smes - name = "SMES (Machine Board)" - icon_state = "engineering" - build_path = /obj/machinery/power/smes - req_components = list( - /obj/item/stack/cable_coil = 5, - /obj/item/stock_parts/cell = 5, - /obj/item/stock_parts/capacitor = 1) - def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high/empty) - -/obj/item/circuitboard/machine/techfab/department/engineering - name = "\improper Departmental Techfab (Machine Board) - Engineering" - build_path = /obj/machinery/rnd/production/techfab/department/engineering - -/obj/item/circuitboard/machine/thermomachine - name = "Thermomachine (Machine Board)" - icon_state = "engineering" - desc = "" - req_components = list( - /obj/item/stock_parts/matter_bin = 2, - /obj/item/stock_parts/micro_laser = 2, - /obj/item/stack/cable_coil = 1, - /obj/item/stack/sheet/glass = 1) - -#define PATH_FREEZER /obj/machinery/atmospherics/components/unary/thermomachine/freezer -#define PATH_HEATER /obj/machinery/atmospherics/components/unary/thermomachine/heater - -/obj/item/circuitboard/machine/thermomachine/Initialize() - . = ..() - if(!build_path) - if(prob(50)) - name = "Freezer (Machine Board)" - build_path = PATH_FREEZER - else - name = "Heater (Machine Board)" - build_path = PATH_HEATER - -/obj/item/circuitboard/machine/thermomachine/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - var/obj/item/circuitboard/new_type - var/new_setting - switch(build_path) - if(PATH_FREEZER) - new_type = /obj/item/circuitboard/machine/thermomachine/heater - new_setting = "Heater" - if(PATH_HEATER) - new_type = /obj/item/circuitboard/machine/thermomachine/freezer - new_setting = "Freezer" - name = initial(new_type.name) - build_path = initial(new_type.build_path) - I.play_tool_sound(src) - to_chat(user, "I change the circuitboard setting to \"[new_setting]\".") - else - return ..() - -/obj/item/circuitboard/machine/thermomachine/heater - name = "Heater (Machine Board)" - build_path = PATH_HEATER - -/obj/item/circuitboard/machine/thermomachine/freezer - name = "Freezer (Machine Board)" - build_path = PATH_FREEZER - -#undef PATH_FREEZER -#undef PATH_HEATER - -//Generic - -/obj/item/circuitboard/machine/circuit_imprinter - name = "Circuit Imprinter (Machine Board)" - icon_state = "generic" - build_path = /obj/machinery/rnd/production/circuit_imprinter - req_components = list( - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/manipulator = 1, - /obj/item/reagent_containers/glass/beaker = 2) - -/obj/item/circuitboard/machine/circuit_imprinter/department - name = "Departmental Circuit Imprinter (Machine Board)" - icon_state = "generic" - build_path = /obj/machinery/rnd/production/circuit_imprinter/department - -/obj/item/circuitboard/machine/holopad - name = "AI Holopad (Machine Board)" - icon_state = "generic" - build_path = /obj/machinery/holopad - req_components = list(/obj/item/stock_parts/capacitor = 1) - needs_anchored = FALSE //wew lad - - -/obj/item/circuitboard/machine/launchpad - name = "Bluespace Launchpad (Machine Board)" - icon_state = "generic" - build_path = /obj/machinery/launchpad - req_components = list( - /obj/item/stack/ore/bluespace_crystal = 1, - /obj/item/stock_parts/manipulator = 1) - def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial) - -/obj/item/circuitboard/machine/paystand - name = "Pay Stand (Machine Board)" - icon_state = "generic" - build_path = /obj/machinery/paystand - req_components = list() - -/obj/item/circuitboard/machine/protolathe - name = "Protolathe (Machine Board)" - icon_state = "generic" - build_path = /obj/machinery/rnd/production/protolathe - req_components = list( - /obj/item/stock_parts/matter_bin = 2, - /obj/item/stock_parts/manipulator = 2, - /obj/item/reagent_containers/glass/beaker = 2) - -/obj/item/circuitboard/machine/protolathe/department - name = "Departmental Protolathe (Machine Board)" - icon_state = "generic" - build_path = /obj/machinery/rnd/production/protolathe/department - -/obj/item/circuitboard/machine/reagentgrinder - name = "Machine Design (All-In-One Grinder)" - icon_state = "generic" - build_path = /obj/machinery/reagentgrinder/constructed - req_components = list( - /obj/item/stock_parts/manipulator = 1) - needs_anchored = FALSE - -/obj/item/circuitboard/machine/smartfridge - name = "Smartfridge (Machine Board)" - build_path = /obj/machinery/smartfridge - req_components = list(/obj/item/stock_parts/matter_bin = 1) - var/static/list/fridges_name_paths = list(/obj/machinery/smartfridge = "plant produce", - /obj/machinery/smartfridge/food = "food", - /obj/machinery/smartfridge/drinks = "drinks", - /obj/machinery/smartfridge/extract = "slimes", - /obj/machinery/smartfridge/organ = "organs", - /obj/machinery/smartfridge/chemistry = "chems", - /obj/machinery/smartfridge/chemistry/virology = "viruses", - /obj/machinery/smartfridge/disks = "disks") - needs_anchored = FALSE - -/obj/item/circuitboard/machine/smartfridge/Initialize(mapload, new_type) - if(new_type) - build_path = new_type - return ..() - -/obj/item/circuitboard/machine/smartfridge/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - var/position = fridges_name_paths.Find(build_path, fridges_name_paths) - position = (position == fridges_name_paths.len) ? 1 : (position + 1) - build_path = fridges_name_paths[position] - to_chat(user, "I set the board to [fridges_name_paths[build_path]].") - else - return ..() - -/obj/item/circuitboard/machine/smartfridge/examine(mob/user) - . = ..() - . += "[src] is set to [fridges_name_paths[build_path]]. You can use a screwdriver to reconfigure it." - - -/obj/item/circuitboard/machine/space_heater - name = "Space Heater (Machine Board)" - icon_state = "generic" - build_path = /obj/machinery/space_heater - req_components = list( - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stock_parts/capacitor = 1, - /obj/item/stack/cable_coil = 3) - needs_anchored = FALSE - -/obj/item/circuitboard/machine/techfab - name = "\improper Techfab (Machine Board)" - icon_state = "generic" - build_path = /obj/machinery/rnd/production/techfab - req_components = list( - /obj/item/stock_parts/matter_bin = 2, - /obj/item/stock_parts/manipulator = 2, - /obj/item/reagent_containers/glass/beaker = 2) - -/obj/item/circuitboard/machine/techfab/department - name = "\improper Departmental Techfab (Machine Board)" - build_path = /obj/machinery/rnd/production/techfab/department - -/obj/item/circuitboard/machine/vendor - name = "Custom Vendor (Machine Board)" - desc = "" - custom_premium_price = 30 - build_path = /obj/machinery/vending/custom - req_components = list(/obj/item/vending_refill/custom = 1) - - var/static/list/vending_names_paths = list( - /obj/machinery/vending/boozeomat = "Booze-O-Mat", - /obj/machinery/vending/coffee = "Solar's Best Hot Drinks", - /obj/machinery/vending/snack = "Getmore Chocolate Corp", - /obj/machinery/vending/cola = "Robust Softdrinks", - /obj/machinery/vending/cigarette = "ShadyCigs Deluxe", - /obj/machinery/vending/games = "\improper Good Clean Fun", - /obj/machinery/vending/autodrobe = "AutoDrobe", - /obj/machinery/vending/wardrobe/sec_wardrobe = "SecDrobe", - /obj/machinery/vending/wardrobe/medi_wardrobe = "MediDrobe", - /obj/machinery/vending/wardrobe/engi_wardrobe = "EngiDrobe", - /obj/machinery/vending/wardrobe/atmos_wardrobe = "AtmosDrobe", - /obj/machinery/vending/wardrobe/cargo_wardrobe = "CargoDrobe", - /obj/machinery/vending/wardrobe/robo_wardrobe = "RoboDrobe", - /obj/machinery/vending/wardrobe/science_wardrobe = "SciDrobe", - /obj/machinery/vending/wardrobe/hydro_wardrobe = "HyDrobe", - /obj/machinery/vending/wardrobe/curator_wardrobe = "CuraDrobe", - /obj/machinery/vending/wardrobe/bar_wardrobe = "BarDrobe", - /obj/machinery/vending/wardrobe/chef_wardrobe = "ChefDrobe", - /obj/machinery/vending/wardrobe/jani_wardrobe = "JaniDrobe", - /obj/machinery/vending/wardrobe/law_wardrobe = "LawDrobe", - /obj/machinery/vending/wardrobe/chap_wardrobe = "ChapDrobe", - /obj/machinery/vending/wardrobe/chem_wardrobe = "ChemDrobe", - /obj/machinery/vending/wardrobe/gene_wardrobe = "GeneDrobe", - /obj/machinery/vending/wardrobe/viro_wardrobe = "ViroDrobe", - /obj/machinery/vending/clothing = "ClothesMate", - /obj/machinery/vending/medical = "NanoMed Plus", - /obj/machinery/vending/wallmed = "NanoMed", - /obj/machinery/vending/assist = "Vendomat", - /obj/machinery/vending/engivend = "Engi-Vend", - /obj/machinery/vending/hydronutrients = "NutriMax", - /obj/machinery/vending/sustenance = "Sustenance Vendor", - /obj/machinery/vending/dinnerware = "Plasteel Chef's Dinnerware Vendor", - /obj/machinery/vending/cart = "PTech", - /obj/machinery/vending/robotics = "Robotech Deluxe", - /obj/machinery/vending/engineering = "Robco Tool Maker", - /obj/machinery/vending/sovietsoda = "BODA", - /obj/machinery/vending/security = "SecTech", - /obj/machinery/vending/modularpc = "Deluxe Silicate Selections", - /obj/machinery/vending/custom = "Custom Vendor") - -/obj/item/circuitboard/machine/vendor/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - var/static/list/display_vending_names_paths - if(!display_vending_names_paths) - display_vending_names_paths = list() - for(var/path in vending_names_paths) - display_vending_names_paths[vending_names_paths[path]] = path - var/choice = input(user,"Choose a new brand","Select an Item") as null|anything in sortList(display_vending_names_paths) - set_type(display_vending_names_paths[choice]) - else - return ..() - -/obj/item/circuitboard/machine/vendor/proc/set_type(obj/machinery/vending/typepath) - build_path = typepath - name = "[vending_names_paths[build_path]] Vendor (Machine Board)" - req_components = list(initial(typepath.refill_canister) = 1) - -/obj/item/circuitboard/machine/vendor/apply_default_parts(obj/machinery/M) - for(var/typepath in vending_names_paths) - if(istype(M, typepath)) - set_type(typepath) - break - return ..() - -/obj/item/circuitboard/machine/vending/donksofttoyvendor - name = "Donksoft Toy Vendor (Machine Board)" - build_path = /obj/machinery/vending/donksofttoyvendor - req_components = list( - /obj/item/stack/sheet/glass = 1, - /obj/item/vending_refill/donksoft = 1) - -/obj/item/circuitboard/machine/vending/syndicatedonksofttoyvendor - name = "Syndicate Donksoft Toy Vendor (Machine Board)" - build_path = /obj/machinery/vending/toyliberationstation - req_components = list( - /obj/item/stack/sheet/glass = 1, - /obj/item/vending_refill/donksoft = 1) - -//Medical - -/obj/item/circuitboard/machine/chem_dispenser - name = "Chem Dispenser (Machine Board)" - icon_state = "medical" - build_path = /obj/machinery/chem_dispenser - req_components = list( - /obj/item/stock_parts/matter_bin = 2, - /obj/item/stock_parts/capacitor = 1, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stack/sheet/glass = 1, - /obj/item/stock_parts/cell = 1) - def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high) - needs_anchored = FALSE - -/obj/item/circuitboard/machine/chem_dispenser/abductor - name = "Reagent Synthesizer (Abductor Machine Board)" - icon_state = "abductor_mod" - build_path = /obj/machinery/chem_dispenser/abductor - def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high) - needs_anchored = FALSE - -/obj/item/circuitboard/machine/chem_heater - name = "Chemical Heater (Machine Board)" - icon_state = "medical" - build_path = /obj/machinery/chem_heater - req_components = list( - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stack/sheet/glass = 1) - -/obj/item/circuitboard/machine/chem_master - name = "ChemMaster 3000 (Machine Board)" - icon_state = "medical" - build_path = /obj/machinery/chem_master - desc = "" - req_components = list( - /obj/item/reagent_containers/glass/beaker = 2, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stack/sheet/glass = 1) - needs_anchored = FALSE - -/obj/item/circuitboard/machine/chem_master/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - var/new_name = "ChemMaster" - var/new_path = /obj/machinery/chem_master - - if(build_path == /obj/machinery/chem_master) - new_name = "CondiMaster" - new_path = /obj/machinery/chem_master/condimaster - - build_path = new_path - name = "[new_name] 3000 (Machine Board)" - to_chat(user, "I change the circuit board setting to \"[new_name]\".") - else - return ..() - -/obj/item/circuitboard/machine/clonepod - name = "Clone Pod (Machine Board)" - icon_state = "medical" - build_path = /obj/machinery/clonepod - req_components = list( - /obj/item/stack/cable_coil = 2, - /obj/item/stock_parts/scanning_module = 2, - /obj/item/stock_parts/manipulator = 2, - /obj/item/stack/sheet/glass = 1) - -/obj/item/circuitboard/machine/clonepod/experimental - name = "Experimental Clone Pod (Machine Board)" - icon_state = "medical" - build_path = /obj/machinery/clonepod/experimental - -/obj/item/circuitboard/machine/clonescanner - name = "Cloning Scanner (Machine Board)" - icon_state = "medical" - build_path = /obj/machinery/dna_scannernew - req_components = list( - /obj/item/stock_parts/scanning_module = 1, - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stack/sheet/glass = 1, - /obj/item/stack/cable_coil = 2) - -/obj/item/circuitboard/machine/cryo_tube - name = "Cryotube (Machine Board)" - icon_state = "medical" - build_path = /obj/machinery/atmospherics/components/unary/cryo_cell - req_components = list( - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stack/cable_coil = 1, - /obj/item/stack/sheet/glass = 4) - -/obj/item/circuitboard/machine/fat_sucker - name = "Lipid Extractor (Machine Board)" - icon_state = "medical" - build_path = /obj/machinery/fat_sucker - req_components = list(/obj/item/stock_parts/micro_laser = 1, - /obj/item/kitchen/fork = 1) - -/obj/item/circuitboard/machine/harvester - name = "Harvester (Machine Board)" - icon_state = "medical" - build_path = /obj/machinery/harvester - req_components = list(/obj/item/stock_parts/micro_laser = 4) - -/obj/item/circuitboard/machine/medical_kiosk - name = "Medical Kiosk (Machine Board)" - icon_state = "medical" - build_path = /obj/machinery/medical_kiosk - var/custom_cost = 10 - req_components = list( - /obj/item/healthanalyzer = 1, - /obj/item/stock_parts/scanning_module = 1) - -/obj/item/circuitboard/machine/medical_kiosk/multitool_act(mob/living/user) - . = ..() - var/new_cost = input("Set a new cost for using this medical kiosk.","New cost", custom_cost) as num|null - if(new_cost == null && (src.loc == user)) - return - custom_cost = CLAMP(round(new_cost, 1), 10, 1000) - to_chat(user, "The cost is now set to [custom_cost].") - -/obj/item/circuitboard/machine/medical_kiosk/examine(mob/user) - . = ..() - . += "The cost to use this kiosk is set to [custom_cost]." - -/obj/item/circuitboard/machine/limbgrower - name = "Limb Grower (Machine Board)" - icon_state = "medical" - build_path = /obj/machinery/limbgrower - req_components = list( - /obj/item/stock_parts/manipulator = 1, - /obj/item/reagent_containers/glass/beaker = 2, - /obj/item/stack/sheet/glass = 1) - -/obj/item/circuitboard/machine/protolathe/department/medical - name = "Departmental Protolathe (Machine Board) - Medical" - icon_state = "medical" - build_path = /obj/machinery/rnd/production/protolathe/department/medical - -/obj/item/circuitboard/machine/sleeper - name = "Sleeper (Machine Board)" - icon_state = "medical" - build_path = /obj/machinery/sleeper - req_components = list( - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stack/cable_coil = 1, - /obj/item/stack/sheet/glass = 2) - -/obj/item/circuitboard/machine/smoke_machine - name = "Smoke Machine (Machine Board)" - icon_state = "medical" - build_path = /obj/machinery/smoke_machine - req_components = list( - /obj/item/stock_parts/matter_bin = 2, - /obj/item/stock_parts/capacitor = 1, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stack/sheet/glass = 1, - /obj/item/stock_parts/cell = 1) - needs_anchored = FALSE - -/obj/item/circuitboard/machine/stasis - name = "Lifeform Stasis Unit (Machine Board)" - icon_state = "medical" - build_path = /obj/machinery/stasis - req_components = list( - /obj/item/stack/cable_coil = 3, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stock_parts/capacitor = 1) - -/obj/item/circuitboard/machine/techfab/department/medical - name = "\improper Departmental Techfab (Machine Board) - Medical" - icon_state = "medical" - build_path = /obj/machinery/rnd/production/techfab/department/medical - -//Science - -/obj/item/circuitboard/machine/circuit_imprinter/department/science - name = "Departmental Circuit Imprinter - Science (Machine Board)" - icon_state = "science" - build_path = /obj/machinery/rnd/production/circuit_imprinter/department/science - -/obj/item/circuitboard/machine/cyborgrecharger - name = "Cyborg Recharger (Machine Board)" - icon_state = "science" - build_path = /obj/machinery/recharge_station - req_components = list( - /obj/item/stock_parts/capacitor = 2, - /obj/item/stock_parts/cell = 1, - /obj/item/stock_parts/manipulator = 1) - def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high) - -/obj/item/circuitboard/machine/destructive_analyzer - name = "Destructive Analyzer (Machine Board)" - icon_state = "science" - build_path = /obj/machinery/rnd/destructive_analyzer - req_components = list( - /obj/item/stock_parts/scanning_module = 1, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stock_parts/micro_laser = 1) - -/obj/item/circuitboard/machine/experimentor - name = "E.X.P.E.R.I-MENTOR (Machine Board)" - icon_state = "science" - build_path = /obj/machinery/rnd/experimentor - req_components = list( - /obj/item/stock_parts/scanning_module = 1, - /obj/item/stock_parts/manipulator = 2, - /obj/item/stock_parts/micro_laser = 2) - -/obj/item/circuitboard/machine/mech_recharger - name = "Mechbay Recharger (Machine Board)" - icon_state = "science" - build_path = /obj/machinery/mech_bay_recharge_port - req_components = list( - /obj/item/stack/cable_coil = 2, - /obj/item/stock_parts/capacitor = 5) - -/obj/item/circuitboard/machine/mechfab - name = "Exosuit Fabricator (Machine Board)" - icon_state = "science" - build_path = /obj/machinery/mecha_part_fabricator - req_components = list( - /obj/item/stock_parts/matter_bin = 2, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stack/sheet/glass = 1) - -/obj/item/circuitboard/machine/monkey_recycler - name = "Monkey Recycler (Machine Board)" - icon_state = "science" - build_path = /obj/machinery/monkey_recycler - req_components = list( - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/manipulator = 1) - needs_anchored = FALSE - -/obj/item/circuitboard/machine/nanite_chamber - name = "Nanite Chamber (Machine Board)" - icon_state = "science" - build_path = /obj/machinery/nanite_chamber - req_components = list( - /obj/item/stock_parts/scanning_module = 2, - /obj/item/stock_parts/micro_laser = 2, - /obj/item/stock_parts/manipulator = 1) - -/obj/item/circuitboard/machine/nanite_program_hub - name = "Nanite Program Hub (Machine Board)" - icon_state = "science" - build_path = /obj/machinery/nanite_program_hub - req_components = list( - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/manipulator = 1) - -/obj/item/circuitboard/machine/nanite_programmer - name = "Nanite Programmer (Machine Board)" - icon_state = "science" - build_path = /obj/machinery/nanite_programmer - req_components = list( - /obj/item/stock_parts/manipulator = 2, - /obj/item/stock_parts/micro_laser = 2, - /obj/item/stock_parts/scanning_module = 1) - -/obj/item/circuitboard/machine/processor/slime - name = "Slime Processor (Machine Board)" - icon_state = "science" - build_path = /obj/machinery/processor/slime - -/obj/item/circuitboard/machine/protolathe/department/science - name = "Departmental Protolathe (Machine Board) - Science" - icon_state = "science" - build_path = /obj/machinery/rnd/production/protolathe/department/science - -/obj/item/circuitboard/machine/public_nanite_chamber - name = "Public Nanite Chamber (Machine Board)" - icon_state = "science" - build_path = /obj/machinery/public_nanite_chamber - var/cloud_id = 1 - req_components = list( - /obj/item/stock_parts/micro_laser = 2, - /obj/item/stock_parts/manipulator = 1) - -/obj/item/circuitboard/machine/public_nanite_chamber/multitool_act(mob/living/user) - . = ..() - var/new_cloud = input("Set the public nanite chamber's Cloud ID (1-100).", "Cloud ID", cloud_id) as num|null - if(new_cloud && (src.loc == user)) - return - cloud_id = CLAMP(round(new_cloud, 1), 1, 100) - -/obj/item/circuitboard/machine/public_nanite_chamber/examine(mob/user) - . = ..() - . += "Cloud ID is currently set to [cloud_id]." - -/obj/item/circuitboard/machine/quantumpad - name = "Quantum Pad (Machine Board)" - icon_state = "science" - build_path = /obj/machinery/quantumpad - req_components = list( - /obj/item/stack/ore/bluespace_crystal = 1, - /obj/item/stock_parts/capacitor = 1, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stack/cable_coil = 1) - def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial) - -/obj/item/circuitboard/machine/rdserver - name = "R&D Server (Machine Board)" - icon_state = "science" - build_path = /obj/machinery/rnd/server - req_components = list( - /obj/item/stack/cable_coil = 2, - /obj/item/stock_parts/scanning_module = 1) - -/obj/item/circuitboard/machine/techfab/department/science - name = "\improper Departmental Techfab (Machine Board) - Science" - icon_state = "science" - build_path = /obj/machinery/rnd/production/techfab/department/science - -/obj/item/circuitboard/machine/teleporter_hub - name = "Teleporter Hub (Machine Board)" - icon_state = "science" - build_path = /obj/machinery/teleport/hub - req_components = list( - /obj/item/stack/ore/bluespace_crystal = 3, - /obj/item/stock_parts/matter_bin = 1) - def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial) - -/obj/item/circuitboard/machine/teleporter_station - name = "Teleporter Station (Machine Board)" - icon_state = "science" - build_path = /obj/machinery/teleport/station - req_components = list( - /obj/item/stack/ore/bluespace_crystal = 2, - /obj/item/stock_parts/capacitor = 2, - /obj/item/stack/sheet/glass = 1) - def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial) - -//Security - -/obj/item/circuitboard/machine/protolathe/department/security - name = "Departmental Protolathe (Machine Board) - Security" - icon_state = "security" - build_path = /obj/machinery/rnd/production/protolathe/department/security - -/obj/item/circuitboard/machine/recharger - name = "Weapon Recharger (Machine Board)" - icon_state = "security" - build_path = /obj/machinery/recharger - req_components = list(/obj/item/stock_parts/capacitor = 1) - needs_anchored = FALSE - -/obj/item/circuitboard/machine/techfab/department/security - name = "\improper Departmental Techfab (Machine Board) - Security" - icon_state = "security" - build_path = /obj/machinery/rnd/production/techfab/department/security - -//Service - -/obj/item/circuitboard/machine/biogenerator - name = "Biogenerator (Machine Board)" - icon_state = "service" - build_path = /obj/machinery/biogenerator - req_components = list( - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stack/cable_coil = 1, - /obj/item/stack/sheet/glass = 1) - -/obj/item/circuitboard/machine/chem_dispenser/drinks - name = "Soda Dispenser (Machine Board)" - icon_state = "service" - build_path = /obj/machinery/chem_dispenser/drinks - -/obj/item/circuitboard/machine/chem_dispenser/drinks/beer - name = "Booze Dispenser (Machine Board)" - icon_state = "service" - build_path = /obj/machinery/chem_dispenser/drinks/beer - -/obj/item/circuitboard/machine/chem_master/condi - name = "CondiMaster 3000 (Machine Board)" - icon_state = "service" - build_path = /obj/machinery/chem_master/condimaster - -/obj/item/circuitboard/machine/deep_fryer - name = "circuit board (Deep Fryer)" - icon_state = "service" - build_path = /obj/machinery/deepfryer - req_components = list(/obj/item/stock_parts/micro_laser = 1) - needs_anchored = FALSE - - -/obj/item/circuitboard/machine/dish_drive - name = "Dish Drive (Machine Board)" - icon_state = "service" - build_path = /obj/machinery/dish_drive - req_components = list( - /obj/item/stack/sheet/glass = 1, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stock_parts/matter_bin = 2) - var/suction = TRUE - var/transmit = TRUE - needs_anchored = FALSE - -/obj/item/circuitboard/machine/dish_drive/examine(mob/user) - . = ..() - . += "Its suction function is [suction ? "enabled" : "disabled"]. Use it in-hand to switch." - . += "Its disposal auto-transmit function is [transmit ? "enabled" : "disabled"]. Alt-click it to switch." - -/obj/item/circuitboard/machine/dish_drive/attack_self(mob/living/user) - suction = !suction - to_chat(user, "I [suction ? "enable" : "disable"] the board's suction function.") - -/obj/item/circuitboard/machine/dish_drive/AltClick(mob/living/user) - if(!user.Adjacent(src)) - return - transmit = !transmit - to_chat(user, "I [transmit ? "enable" : "disable"] the board's automatic disposal transmission.") - -/obj/item/circuitboard/machine/gibber - name = "Gibber (Machine Board)" - icon_state = "service" - build_path = /obj/machinery/gibber - req_components = list( - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/manipulator = 1) - needs_anchored = FALSE - -/obj/item/circuitboard/machine/hydroponics - name = "Hydroponics Tray (Machine Board)" - icon_state = "service" - build_path = /obj/machinery/hydroponics/constructable - req_components = list( - /obj/item/stock_parts/matter_bin = 2, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stack/sheet/glass = 1) - needs_anchored = FALSE - -/obj/item/circuitboard/machine/microwave - name = "Microwave (Machine Board)" - icon_state = "service" - build_path = /obj/machinery/microwave - req_components = list( - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stack/cable_coil = 2, - /obj/item/stack/sheet/glass = 2) - needs_anchored = FALSE - -/obj/item/circuitboard/machine/plantgenes - name = "Plant DNA Manipulator (Machine Board)" - icon_state = "service" - build_path = /obj/machinery/plantgenes - req_components = list( - /obj/item/stock_parts/manipulator = 1, - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stack/sheet/glass = 1, - /obj/item/stock_parts/scanning_module = 1) - -/obj/item/circuitboard/machine/processor - name = "Food Processor (Machine Board)" - icon_state = "service" - build_path = /obj/machinery/processor - req_components = list( - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/manipulator = 1) - needs_anchored = FALSE - -/obj/item/circuitboard/machine/processor/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - if(build_path == /obj/machinery/processor) - name = "Slime Processor (Machine Board)" - build_path = /obj/machinery/processor/slime - to_chat(user, "Name protocols successfully updated.") - else - name = "Food Processor (Machine Board)" - build_path = /obj/machinery/processor - to_chat(user, "Defaulting name protocols.") - else - return ..() - -/obj/item/circuitboard/machine/protolathe/department/service - name = "Departmental Protolathe - Service (Machine Board)" - icon_state = "service" - build_path = /obj/machinery/rnd/production/protolathe/department/service - -/obj/item/circuitboard/machine/recycler - name = "Recycler (Machine Board)" - icon_state = "service" - build_path = /obj/machinery/recycler - req_components = list( - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/manipulator = 1) - needs_anchored = FALSE - -/obj/item/circuitboard/machine/seed_extractor - name = "Seed Extractor (Machine Board)" - icon_state = "service" - build_path = /obj/machinery/seed_extractor - req_components = list( - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/manipulator = 1) - needs_anchored = FALSE - -/obj/item/circuitboard/machine/techfab/department/service - name = "\improper Departmental Techfab - Service (Machine Board)" - icon_state = "service" - build_path = /obj/machinery/rnd/production/techfab/department/service - -//Supply - -/obj/item/circuitboard/machine/mining_equipment_vendor - name = "Mining Equipment Vendor (Machine Board)" - icon_state = "supply" - build_path = /obj/machinery/mineral/equipment_vendor - req_components = list( - /obj/item/stack/sheet/glass = 1, - /obj/item/stock_parts/matter_bin = 3) - -/obj/item/circuitboard/machine/mining_equipment_vendor/golem - name = "Golem Ship Equipment Vendor (Machine Board)" - build_path = /obj/machinery/mineral/equipment_vendor/golem - -/obj/item/circuitboard/machine/ore_redemption - name = "Ore Redemption (Machine Board)" - icon_state = "supply" - build_path = /obj/machinery/mineral/ore_redemption - req_components = list( - /obj/item/stack/sheet/glass = 1, - /obj/item/stock_parts/matter_bin = 1, - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stock_parts/manipulator = 1, - /obj/item/assembly/igniter = 1) - needs_anchored = FALSE - -/obj/item/circuitboard/machine/ore_silo - name = "Ore Silo (Machine Board)" - icon_state = "supply" - build_path = /obj/machinery/ore_silo - req_components = list() - -/obj/item/circuitboard/machine/protolathe/department/cargo - name = "Departmental Protolathe (Machine Board) - Cargo" - icon_state = "supply" - build_path = /obj/machinery/rnd/production/protolathe/department/cargo - -/obj/item/circuitboard/machine/stacking_machine - name = "Stacking Machine (Machine Board)" - icon_state = "supply" - build_path = /obj/machinery/mineral/stacking_machine - req_components = list( - /obj/item/stock_parts/manipulator = 2, - /obj/item/stock_parts/matter_bin = 2) - -/obj/item/circuitboard/machine/stacking_unit_console - name = "Stacking Machine Console (Machine Board)" - icon_state = "supply" - build_path = /obj/machinery/mineral/stacking_unit_console - req_components = list( - /obj/item/stack/sheet/glass = 2, - /obj/item/stack/cable_coil = 5) - -/obj/item/circuitboard/machine/techfab/department/cargo - name = "\improper Departmental Techfab (Machine Board) - Cargo" - icon_state = "supply" - build_path = /obj/machinery/rnd/production/techfab/department/cargo - -/obj/item/circuitboard/machine/pump - name = "Portable Liquid Pump (Machine Board)" - icon_state = "supply" - build_path = /obj/machinery/power/liquid_pump - needs_anchored = FALSE - req_components = list( - /obj/item/stock_parts/manipulator = 2, - /obj/item/stock_parts/matter_bin = 2) - -//Misc - - -/obj/item/circuitboard/machine/abductor - name = "alien board (Report This)" - icon_state = "abductor_mod" - -/obj/item/circuitboard/machine/abductor/core - name = "alien board (Void Core)" - build_path = /obj/machinery/power/rtg/abductor - req_components = list( - /obj/item/stock_parts/capacitor = 1, - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stock_parts/cell/infinite/abductor = 1) - def_components = list( - /obj/item/stock_parts/capacitor = /obj/item/stock_parts/capacitor/quadratic, - /obj/item/stock_parts/micro_laser = /obj/item/stock_parts/micro_laser/quadultra) - -/obj/item/circuitboard/machine/plantgenes/vault - name = "alien board (Plant DNA Manipulator)" - icon_state = "abductor_mod" - // It wasn't made by actual abductors race, so no abductor tech here. - def_components = list( - /obj/item/stock_parts/manipulator = /obj/item/stock_parts/manipulator/femto, - /obj/item/stock_parts/micro_laser = /obj/item/stock_parts/micro_laser/quadultra, - /obj/item/stock_parts/scanning_module = /obj/item/stock_parts/scanning_module/triphasic) diff --git a/code/game/objects/items/control_wand.dm b/code/game/objects/items/control_wand.dm deleted file mode 100644 index baf8a811cd..0000000000 --- a/code/game/objects/items/control_wand.dm +++ /dev/null @@ -1,103 +0,0 @@ -#define WAND_OPEN "Open Door" -#define WAND_BOLT "Toggle Bolts" -#define WAND_EMERGENCY "Toggle Emergency Access" - -/obj/item/door_remote - icon_state = "gangtool-white" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - icon = 'icons/obj/device.dmi' - name = "control wand" - desc = "" - w_class = WEIGHT_CLASS_TINY - var/mode = WAND_OPEN - var/region_access = 1 //See access.dm - var/list/access_list - -/obj/item/door_remote/Initialize() - . = ..() - access_list = get_region_accesses(region_access) - AddComponent(/datum/component/ntnet_interface) - -/obj/item/door_remote/attack_self(mob/user) - switch(mode) - if(WAND_OPEN) - mode = WAND_BOLT - if(WAND_BOLT) - mode = WAND_EMERGENCY - if(WAND_EMERGENCY) - mode = WAND_OPEN - to_chat(user, "Now in mode: [mode].") - -// Airlock remote works by sending NTNet packets to whatever it's pointed at. -/obj/item/door_remote/afterattack(atom/A, mob/user) - . = ..() - var/datum/component/ntnet_interface/target_interface = A.GetComponent(/datum/component/ntnet_interface) - - if(!target_interface) - return - - // Generate a control packet. - var/datum/netdata/data = new - data.recipient_ids = list(target_interface.hardware_id) - - switch(mode) - if(WAND_OPEN) - data.data["data"] = "open" - if(WAND_BOLT) - data.data["data"] = "bolt" - if(WAND_EMERGENCY) - data.data["data"] = "emergency" - - data.data["data_secondary"] = "toggle" - data.passkey = access_list - - ntnet_send(data) - - -/obj/item/door_remote/omni - name = "omni door remote" - desc = "" - icon_state = "gangtool-yellow" - region_access = 0 - -/obj/item/door_remote/captain - name = "command door remote" - icon_state = "gangtool-yellow" - region_access = 7 - -/obj/item/door_remote/chief_engineer - name = "engineering door remote" - icon_state = "gangtool-orange" - region_access = 5 - -/obj/item/door_remote/research_director - name = "research door remote" - icon_state = "gangtool-purple" - region_access = 4 - -/obj/item/door_remote/head_of_security - name = "security door remote" - icon_state = "gangtool-red" - region_access = 2 - -/obj/item/door_remote/quartermaster - name = "supply door remote" - desc = "" - icon_state = "gangtool-green" - region_access = 6 - -/obj/item/door_remote/chief_medical_officer - name = "medical door remote" - icon_state = "gangtool-blue" - region_access = 3 - -/obj/item/door_remote/civillian - name = "civilian door remote" - icon_state = "gangtool-white" - region_access = 1 - -#undef WAND_OPEN -#undef WAND_BOLT -#undef WAND_EMERGENCY diff --git a/code/game/objects/items/crab17.dm b/code/game/objects/items/crab17.dm index 28c4d78a7e..60c0197c5a 100644 --- a/code/game/objects/items/crab17.dm +++ b/code/game/objects/items/crab17.dm @@ -197,7 +197,7 @@ icon = 'icons/mob/actions/actions_items.dmi' icon_state = "sniper_zoom" layer = PROJECTILE_HIT_THRESHHOLD_LAYER - light_range = 2 + light_outer_range = 2 var/obj/effect/dumpeetFall/DF var/obj/structure/checkoutmachine/dump var/mob/living/carbon/human/bogdanoff diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 5384ee7a68..34e321f3df 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -699,30 +699,6 @@ spray_overlay.color = paint_color add_overlay(spray_overlay) -/obj/item/toy/crayon/spraycan/borg - name = "cyborg spraycan" - desc = "" - charges = -1 - -/obj/item/toy/crayon/spraycan/borg/afterattack(atom/target,mob/user,proximity, params) - var/diff = ..() - if(!iscyborg(user)) - to_chat(user, "How did you get this?") - qdel(src) - return FALSE - - var/mob/living/silicon/robot/borgy = user - - if(!diff) - return - // 25 is our cost per unit of paint, making it cost 25 energy per - // normal tag, 50 per window, and 250 per attack - var/cost = diff * 25 - // Cyborgs shouldn't be able to use modules without a cell. But if they do - // it's free. - if(borgy.cell) - borgy.cell.use(cost) - /obj/item/toy/crayon/spraycan/hellcan name = "hellcan" desc = "" diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm deleted file mode 100644 index dc3610a106..0000000000 --- a/code/game/objects/items/defib.dm +++ /dev/null @@ -1,691 +0,0 @@ -//backpack item -#define HALFWAYCRITDEATH ((HEALTH_THRESHOLD_CRIT + HEALTH_THRESHOLD_DEAD) * 0.5) - -/obj/item/defibrillator - name = "defibrillator" - desc = "" - icon = 'icons/obj/defib.dmi' - icon_state = "defibunit" - item_state = "defibunit" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - slot_flags = ITEM_SLOT_BACK - force = 5 - throwforce = 6 - w_class = WEIGHT_CLASS_BULKY - actions_types = list(/datum/action/item_action/toggle_paddles) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - - var/obj/item/twohanded/shockpaddles/paddle_type = /obj/item/twohanded/shockpaddles - var/on = FALSE //if the paddles are equipped (1) or on the defib (0) - var/safety = TRUE //if you can zap people with the defibs on harm mode - var/powered = FALSE //if there's a cell in the defib with enough power for a revive, blocks paddles from reviving otherwise - var/obj/item/twohanded/shockpaddles/paddles - var/obj/item/stock_parts/cell/high/cell - var/combat = FALSE //if true, revive through hardsuits, allow for combat shocking - var/grab_ghost = FALSE // Do we pull the ghost back into their body? - var/cooldown_duration = 5 SECONDS//how long does it take to recharge - -/obj/item/defibrillator/get_cell() - return cell - -/obj/item/defibrillator/Initialize() //starts without a cell for rnd - . = ..() - paddles = new paddle_type(src) - update_icon() - return - -/obj/item/defibrillator/loaded/Initialize() //starts with hicap - . = ..() - cell = new(src) - update_icon() - return - -/obj/item/defibrillator/fire_act(added, maxstacks) - . = ..() - if(paddles?.loc == src) - paddles.fire_act(added, maxstacks) - -/obj/item/defibrillator/extinguish() - . = ..() - if(paddles?.loc == src) - paddles.extinguish() - -/obj/item/defibrillator/update_icon() - update_power() - return ..() - -/obj/item/defibrillator/proc/update_power() - if(!QDELETED(cell)) - if(QDELETED(paddles) || cell.charge < paddles.revivecost) - powered = FALSE - else - powered = TRUE - else - powered = FALSE - -/obj/item/defibrillator/update_overlays() - . = ..() - - if(!on) - . += "[initial(icon_state)]-paddles" - if(powered) - . += "[initial(icon_state)]-powered" - if(!QDELETED(cell)) - var/ratio = cell.charge / cell.maxcharge - ratio = CEILING(ratio*4, 1) * 25 - . += "[initial(icon_state)]-charge[ratio]" - if(!cell) - . += "[initial(icon_state)]-nocell" - if(!safety) - . += "[initial(icon_state)]-emagged" - -/obj/item/defibrillator/CheckParts(list/parts_list) - ..() - cell = locate(/obj/item/stock_parts/cell) in contents - update_icon() - -/obj/item/defibrillator/ui_action_click() - toggle_paddles() - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/defibrillator/attack_hand(mob/user) - if(loc == user) - if(slot_flags == ITEM_SLOT_BACK) - if(user.get_item_by_slot(SLOT_BACK) == src) - ui_action_click() - else - to_chat(user, "Put the defibrillator on your back first!") - - else if(slot_flags == ITEM_SLOT_BELT) - if(user.get_item_by_slot(SLOT_BELT) == src) - ui_action_click() - else - to_chat(user, "Strap the defibrillator's belt on first!") - return - else if(istype(loc, /obj/machinery/defibrillator_mount)) - ui_action_click() //checks for this are handled in defibrillator.mount.dm - return ..() - -/obj/item/defibrillator/MouseDrop(obj/over_object) - . = ..() - if(ismob(loc)) - var/mob/M = loc - if(!M.incapacitated() && istype(over_object, /atom/movable/screen/inventory/hand)) - var/atom/movable/screen/inventory/hand/H = over_object - M.putItemFromInventoryInHandIfPossible(src, H.held_index) - -/obj/item/defibrillator/attackby(obj/item/W, mob/user, params) - if(W == paddles) - paddles.unwield() - toggle_paddles() - else if(istype(W, /obj/item/stock_parts/cell)) - var/obj/item/stock_parts/cell/C = W - if(cell) - to_chat(user, "[src] already has a cell!") - else - if(C.maxcharge < paddles.revivecost) - to_chat(user, "[src] requires a higher capacity cell.") - return - if(!user.transferItemToLoc(W, src)) - return - cell = W - to_chat(user, "I install a cell in [src].") - update_icon() - - else if(W.tool_behaviour == TOOL_SCREWDRIVER) - if(cell) - cell.update_icon() - cell.forceMove(get_turf(src)) - cell = null - to_chat(user, "I remove the cell from [src].") - update_icon() - else - return ..() - -/obj/item/defibrillator/emag_act(mob/user) - if(safety) - safety = FALSE - to_chat(user, "I silently disable [src]'s safety protocols with the cryptographic sequencer.") - else - safety = TRUE - to_chat(user, "I silently enable [src]'s safety protocols with the cryptographic sequencer.") - -/obj/item/defibrillator/emp_act(severity) - . = ..() - if(cell && !(. & EMP_PROTECT_CONTENTS)) - deductcharge(1000 / severity) - if (. & EMP_PROTECT_SELF) - return - if(safety) - safety = FALSE - visible_message("[src] beeps: Safety protocols disabled!") - playsound(src, 'sound/blank.ogg', 50, FALSE) - else - safety = TRUE - visible_message("[src] beeps: Safety protocols enabled!") - playsound(src, 'sound/blank.ogg', 50, FALSE) - update_icon() - -/obj/item/defibrillator/proc/toggle_paddles() - set name = "Toggle Paddles" - set hidden = 1 - on = !on - - var/mob/living/carbon/user = usr - if(on) - //Detach the paddles into the user's hands - if(!usr.put_in_hands(paddles)) - on = FALSE - to_chat(user, "I need a free hand to hold the paddles!") - update_icon() - return - else - //Remove from their hands and back onto the defib unit - paddles.unwield() - remove_paddles(user) - - update_icon() - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - - -/obj/item/defibrillator/equipped(mob/user, slot) - ..() - if((slot_flags == ITEM_SLOT_BACK && slot != SLOT_BACK) || (slot_flags == ITEM_SLOT_BELT && slot != SLOT_BELT)) - remove_paddles(user) - update_icon() - -/obj/item/defibrillator/item_action_slot_check(slot, mob/user) - if(slot == user.getBackSlot()) - return 1 - -/obj/item/defibrillator/proc/remove_paddles(mob/user) //this fox the bug with the paddles when other player stole you the defib when you have the paddles equiped - if(ismob(paddles.loc)) - var/mob/M = paddles.loc - M.dropItemToGround(paddles, TRUE) - return - -/obj/item/defibrillator/Destroy() - if(on) - var/M = get(paddles, /mob) - remove_paddles(M) - QDEL_NULL(paddles) - QDEL_NULL(cell) - return ..() - -/obj/item/defibrillator/proc/deductcharge(chrgdeductamt) - if(cell) - if(cell.charge < (paddles.revivecost+chrgdeductamt)) - powered = FALSE - update_icon() - if(cell.use(chrgdeductamt)) - update_icon() - return TRUE - else - update_icon() - return FALSE - -/obj/item/defibrillator/proc/cooldowncheck(mob/user) - addtimer(CALLBACK(src, PROC_REF(finish_charging)), cooldown_duration) - -/obj/item/defibrillator/proc/finish_charging() - if(cell) - if(cell.charge >= paddles.revivecost) - visible_message("[src] beeps: Unit ready.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - else - visible_message("[src] beeps: Charge depleted.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - paddles.cooldown = FALSE - paddles.update_icon() - update_icon() - -/obj/item/defibrillator/compact - name = "compact defibrillator" - desc = "" - icon_state = "defibcompact" - item_state = "defibcompact" - w_class = WEIGHT_CLASS_NORMAL - slot_flags = ITEM_SLOT_BELT - -/obj/item/defibrillator/compact/item_action_slot_check(slot, mob/user) - if(slot == user.getBeltSlot()) - return TRUE - -/obj/item/defibrillator/compact/loaded/Initialize() - . = ..() - cell = new(src) - update_icon() - -/obj/item/defibrillator/compact/combat - name = "combat defibrillator" - desc = "" - icon_state = "defibcombat" //needs defib inhand sprites - item_state = "defibcombat" - combat = TRUE - safety = FALSE - cooldown_duration = 2.5 SECONDS - paddle_type = /obj/item/twohanded/shockpaddles/syndicate - -/obj/item/defibrillator/compact/combat/loaded/Initialize() - . = ..() - cell = new /obj/item/stock_parts/cell/infinite(src) - update_icon() - -/obj/item/defibrillator/compact/combat/loaded/attackby(obj/item/W, mob/user, params) - if(W == paddles) - paddles.unwield() - toggle_paddles() - update_icon() - return - -//paddles - -/obj/item/twohanded/shockpaddles - name = "defibrillator paddles" - desc = "" - icon = 'icons/obj/defib.dmi' - icon_state = "defibpaddles0" - item_state = "defibpaddles0" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - - force = 0 - throwforce = 6 - w_class = WEIGHT_CLASS_BULKY - resistance_flags = INDESTRUCTIBLE - - var/revivecost = 1000 - var/cooldown = FALSE - var/busy = FALSE - var/obj/item/defibrillator/defib - var/req_defib = TRUE - var/combat = FALSE //If it penetrates armor and gives additional functionality - var/grab_ghost = FALSE - var/tlimit = DEFIB_TIME_LIMIT * 10 - var/base_icon_state = "defibpaddles" - -/obj/item/twohanded/shockpaddles/Destroy() - defib = null - return ..() - -/obj/item/twohanded/shockpaddles/equipped(mob/user, slot) - . = ..() - if(!req_defib) - return - RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(check_range)) - -/obj/item/twohanded/shockpaddles/Moved() - . = ..() - check_range() - - -/obj/item/twohanded/shockpaddles/fire_act(added, maxstacks) - . = ..() - if((req_defib && defib) && loc != defib) - defib.fire_act(added, maxstacks) - -/obj/item/twohanded/shockpaddles/proc/check_range() - if(!req_defib || !defib) - return - if(!in_range(src,defib)) - var/mob/living/L = loc - if(istype(L)) - to_chat(L, "[defib]'s paddles overextend and come out of your hands!") - else - visible_message("[src] snap back into [defib].") - snap_back() - -/obj/item/twohanded/shockpaddles/proc/recharge(time) - if(req_defib || !time) - return - cooldown = TRUE - update_icon() - sleep(time) - var/turf/T = get_turf(src) - T.audible_message("[src] beeps: Unit is recharged.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - cooldown = FALSE - update_icon() - -/obj/item/twohanded/shockpaddles/New(mainunit) - ..() - if(check_defib_exists(mainunit, src) && req_defib) - defib = mainunit - forceMove(defib) - busy = FALSE - update_icon() - -/obj/item/twohanded/shockpaddles/update_icon() - icon_state = "[base_icon_state][wielded]" - item_state = icon_state - if(cooldown) - icon_state = "[base_icon_state][wielded]_cooldown" - if(iscarbon(loc)) - var/mob/living/carbon/C = loc - C.update_inv_hands() - -/obj/item/twohanded/shockpaddles/suicide_act(mob/user) - user.visible_message("[user] is putting the live paddles on [user.p_their()] chest! It looks like [user.p_theyre()] trying to commit suicide!") - if(req_defib) - defib.deductcharge(revivecost) - playsound(src, 'sound/blank.ogg', 50, TRUE, -1) - return (OXYLOSS) - -/obj/item/twohanded/shockpaddles/dropped(mob/user) - if(!req_defib) - return ..() - if(user) - UnregisterSignal(user, COMSIG_MOVABLE_MOVED) - var/obj/item/twohanded/offhand/O = user.get_inactive_held_item() - if(istype(O)) - O.unwield() - if(user != loc) - to_chat(user, "The paddles snap back into the main unit.") - snap_back() - return unwield(user) - -/obj/item/twohanded/shockpaddles/proc/snap_back() - if(!defib) - return - defib.on = FALSE - forceMove(defib) - defib.update_icon() - -/obj/item/twohanded/shockpaddles/proc/check_defib_exists(mainunit, mob/living/carbon/M, obj/O) - if(!req_defib) - return TRUE //If it doesn't need a defib, just say it exists - if (!mainunit || !istype(mainunit, /obj/item/defibrillator)) //To avoid weird issues from admin spawns - qdel(O) - return FALSE - else - return TRUE - -/obj/item/twohanded/shockpaddles/attack(mob/M, mob/user) - - if(busy) - return - if(req_defib && !defib.powered) - user.visible_message("[defib] beeps: Unit is unpowered.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - return - if(!wielded) - if(iscyborg(user)) - to_chat(user, "I must activate the paddles in your active module before you can use them on someone!") - else - to_chat(user, "I need to wield the paddles in both hands before you can use them on someone!") - return - if(cooldown) - if(req_defib) - to_chat(user, "[defib] is recharging!") - else - to_chat(user, "[src] are recharging!") - return - - if(user.used_intent.type == INTENT_DISARM) - do_disarm(M, user) - return - - if(!iscarbon(M)) - if(req_defib) - to_chat(user, "The instructions on [defib] don't mention how to revive that...") - else - to_chat(user, "I aren't sure how to revive that...") - return - var/mob/living/carbon/H = M - - - if(user.zone_selected != BODY_ZONE_CHEST) - to_chat(user, "I need to target your patient's chest with [src]!") - return - - if(user.used_intent.type == INTENT_HARM) - do_harm(H, user) - return - - if((!req_defib && grab_ghost) || (req_defib && defib.grab_ghost)) - H.notify_ghost_cloning("Your heart is being defibrillated!") - H.grab_ghost() // Shove them back in their body. - else if(can_defib(H)) - H.notify_ghost_cloning("Your heart is being defibrillated. Re-enter your corpse if you want to be revived!", source = src) - - do_help(H, user) - -/obj/item/twohanded/shockpaddles/proc/can_defib(mob/living/carbon/H) - var/obj/item/organ/heart = H.getorgan(/obj/item/organ/heart) - if(H.suiciding || H.hellbound || HAS_TRAIT(H, TRAIT_HUSK)) - return - if((world.time - H.timeofdeath) > tlimit) - return - if((H.getBruteLoss() >= MAX_REVIVE_BRUTE_DAMAGE) || (H.getFireLoss() >= MAX_REVIVE_FIRE_DAMAGE)) - return - if(!heart || (heart.organ_flags & ORGAN_FAILING)) - return - var/obj/item/organ/brain/BR = H.getorgan(/obj/item/organ/brain) - if(QDELETED(BR) || BR.brain_death || (BR.organ_flags & ORGAN_FAILING) || BR.suicided) - return - return TRUE - -/obj/item/twohanded/shockpaddles/proc/shock_touching(dmg, mob/H) - if(isliving(H.pulledby)) //CLEAR! - var/mob/living/M = H.pulledby - if(M.electrocute_act(30, H)) - M.visible_message("[M] is electrocuted by [M.p_their()] contact with [H]!") - M.emote("scream") - -/obj/item/twohanded/shockpaddles/proc/do_disarm(mob/living/M, mob/living/user) - if(req_defib && defib.safety) - return - if(!req_defib && !combat) - return - busy = TRUE - M.visible_message("[user] has touched [M] with [src]!", \ - "[user] has touched [M] with [src]!") - M.adjustStaminaLoss(50) - M.Paralyze(100) - M.updatehealth() //forces health update before next life tick //isn't this done by adjustStaminaLoss anyway? - playsound(src, 'sound/blank.ogg', 50, TRUE, -1) - M.emote("breathgasp") - log_combat(user, M, "stunned", src) - if(req_defib) - defib.deductcharge(revivecost) - cooldown = TRUE - busy = FALSE - update_icon() - if(req_defib) - defib.cooldowncheck(user) - else - recharge(60) - -/obj/item/twohanded/shockpaddles/proc/do_harm(mob/living/carbon/H, mob/living/user) - if(req_defib && defib.safety) - return - if(!req_defib && !combat) - return - user.visible_message("[user] begins to place [src] on [H]'s chest.", - "I overcharge the paddles and begin to place them onto [H]'s chest...") - busy = TRUE - update_icon() - if(do_after(user, 30, target = H)) - user.visible_message("[user] places [src] on [H]'s chest.", - "I place [src] on [H]'s chest and begin to charge them.") - var/turf/T = get_turf(defib) - playsound(src, 'sound/blank.ogg', 50, FALSE) - if(req_defib) - T.audible_message("\The [defib] lets out an urgent beep and lets out a steadily rising hum...") - else - user.audible_message("[src] let out an urgent beep.") - if(do_after(user, 30, target = H)) //Takes longer due to overcharging - if(!H) - busy = FALSE - update_icon() - return - if(H && H.stat == DEAD) - to_chat(user, "[H] is dead.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - busy = FALSE - update_icon() - return - user.visible_message("[user] shocks [H] with \the [src]!", "I shock [H] with \the [src]!") - playsound(src, 'sound/blank.ogg', 100, TRUE, -1) - playsound(src, 'sound/blank.ogg', 100, TRUE, -1) - H.emote("scream") - shock_touching(45, H) - if(H.can_heartattack() && !H.undergoing_cardiac_arrest()) - if(!H.stat) - H.visible_message("[H] thrashes wildly, clutching at [H.p_their()] chest!", - "I feel a horrible agony in your chest!") - H.set_heartattack(TRUE) - H.apply_damage(50, BURN, BODY_ZONE_CHEST) - log_combat(user, H, "overloaded the heart of", defib) - H.Paralyze(100) - H.Jitter(100) - if(req_defib) - defib.deductcharge(revivecost) - cooldown = TRUE - busy = FALSE - update_icon() - if(!req_defib) - recharge(60) - if(req_defib && (defib.cooldowncheck(user))) - return - busy = FALSE - update_icon() - -/obj/item/twohanded/shockpaddles/proc/do_help(mob/living/carbon/H, mob/living/user) - user.visible_message("[user] begins to place [src] on [H]'s chest.", "I begin to place [src] on [H]'s chest...") - busy = TRUE - update_icon() - if(do_after(user, 30, target = H)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process - user.visible_message("[user] places [src] on [H]'s chest.", "I place [src] on [H]'s chest.") - playsound(src, 'sound/blank.ogg', 75, FALSE) - var/total_burn = 0 - var/total_brute = 0 - var/tplus = world.time - H.timeofdeath //length of time spent dead - var/obj/item/organ/heart = H.getorgan(/obj/item/organ/heart) - if(do_after(user, 20, target = H)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total - for(var/obj/item/carried_item in H.contents) - if(istype(carried_item, /obj/item/clothing/suit/space)) - if((!combat && !req_defib) || (req_defib && !defib.combat)) - user.audible_message("[req_defib ? "[defib]" : "[src]"] buzzes: Patient's chest is obscured. Operation aborted.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - busy = FALSE - update_icon() - return - if(H.stat == DEAD) - H.visible_message("[H]'s body convulses a bit.") - playsound(src, "bodyfall", 100, TRUE) - playsound(src, 'sound/blank.ogg', 75, TRUE, -1) - total_brute = H.getBruteLoss() - total_burn = H.getFireLoss() - shock_touching(30, H) - var/failed - - if (H.suiciding) - failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Recovery of patient impossible. Further attempts futile." - else if (H.hellbound) - failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's soul appears to be on another plane of existence. Further attempts futile." - else if (tplus > tlimit) - failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Body has decayed for too long. Further attempts futile." - else if (!heart) - failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's heart is missing." - else if (heart.organ_flags & ORGAN_FAILING) - failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's heart too damaged." - else if(total_burn >= MAX_REVIVE_FIRE_DAMAGE || total_brute >= MAX_REVIVE_BRUTE_DAMAGE || HAS_TRAIT(H, TRAIT_HUSK)) - failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Severe tissue damage makes recovery of patient impossible via defibrillator. Further attempts futile." - else if(H.get_ghost()) - failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - No activity in patient's brain. Further attempts may be successful." - else - var/obj/item/organ/brain/BR = H.getorgan(/obj/item/organ/brain) - if(BR) - if(BR.organ_flags & ORGAN_FAILING) - failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's brain tissue is damaged making recovery of patient impossible via defibrillator. Further attempts futile." - if(BR.brain_death) - failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's brain damaged beyond point of no return. Further attempts futile." - if(BR.suicided || BR.brainmob?.suiciding) - failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - No intelligence pattern can be detected in patient's brain. Further attempts futile." - else - failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's brain is missing. Further attempts futile." - - if(failed) - user.visible_message(failed) - playsound(src, 'sound/blank.ogg', 50, FALSE) - else - //If the body has been fixed so that they would not be in crit when defibbed, give them oxyloss to put them back into crit - if (H.health > HALFWAYCRITDEATH) - H.adjustOxyLoss(H.health - HALFWAYCRITDEATH, 0) - else - var/overall_damage = total_brute + total_burn + H.getToxLoss() + H.getOxyLoss() - var/mobhealth = H.health - H.adjustOxyLoss((mobhealth - HALFWAYCRITDEATH) * (H.getOxyLoss() / overall_damage), 0) - H.adjustToxLoss((mobhealth - HALFWAYCRITDEATH) * (H.getToxLoss() / overall_damage), 0) - H.adjustFireLoss((mobhealth - HALFWAYCRITDEATH) * (total_burn / overall_damage), 0) - H.adjustBruteLoss((mobhealth - HALFWAYCRITDEATH) * (total_brute / overall_damage), 0) - H.updatehealth() // Previous "adjust" procs don't update health, so we do it manually. - user.visible_message("[req_defib ? "[defib]" : "[src]"] pings: Resuscitation successful.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - H.set_heartattack(FALSE) - H.revive(full_heal = FALSE, admin_revive = FALSE) - H.emote("breathgasp") - H.Jitter(100) - SEND_SIGNAL(H, COMSIG_LIVING_MINOR_SHOCK) - log_combat(user, H, "revived", defib) - if(req_defib) - defib.deductcharge(revivecost) - cooldown = 1 - update_icon() - if(req_defib) - defib.cooldowncheck(user) - else - recharge(60) - else if (!H.getorgan(/obj/item/organ/heart)) - user.visible_message("[req_defib ? "[defib]" : "[src]"] buzzes: Patient's heart is missing. Operation aborted.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - else if(H.undergoing_cardiac_arrest()) - playsound(src, 'sound/blank.ogg', 50, TRUE, -1) - if(!(heart.organ_flags & ORGAN_FAILING)) - H.set_heartattack(FALSE) - user.visible_message("[req_defib ? "[defib]" : "[src]"] pings: Patient's heart is now beating again.") - else - user.visible_message("[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed, heart damage detected.") - - else - user.visible_message("[req_defib ? "[defib]" : "[src]"] buzzes: Patient is not in a valid state. Operation aborted.") - playsound(src, 'sound/blank.ogg', 50, FALSE) - busy = FALSE - update_icon() - -/obj/item/twohanded/shockpaddles/cyborg - name = "cyborg defibrillator paddles" - icon = 'icons/obj/defib.dmi' - icon_state = "defibpaddles0" - item_state = "defibpaddles0" - req_defib = FALSE - -/obj/item/twohanded/shockpaddles/cyborg/attack(mob/M, mob/user) - if(iscyborg(user)) - var/mob/living/silicon/robot/R = user - if(R.emagged) - combat = TRUE - else - combat = FALSE - else - combat = FALSE - - . = ..() - -/obj/item/twohanded/shockpaddles/syndicate - name = "syndicate defibrillator paddles" - desc = "" - combat = TRUE - icon = 'icons/obj/defib.dmi' - icon_state = "syndiepaddles0" - item_state = "syndiepaddles0" - base_icon_state = "syndiepaddles" - -/obj/item/twohanded/shockpaddles/syndicate/cyborg - req_defib = FALSE - -#undef HALFWAYCRITDEATH diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm deleted file mode 100644 index 1201c48764..0000000000 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ /dev/null @@ -1,1092 +0,0 @@ - -//The advanced pea-green monochrome lcd of tomorrow. - -GLOBAL_LIST_EMPTY(PDAs) - -#define PDA_SCANNER_NONE 0 -#define PDA_SCANNER_MEDICAL 1 -#define PDA_SCANNER_FORENSICS 2 //unused -#define PDA_SCANNER_REAGENT 3 -#define PDA_SCANNER_HALOGEN 4 -#define PDA_SCANNER_GAS 5 -#define PDA_SPAM_DELAY 2 MINUTES - -/obj/item/pda - name = "\improper PDA" - desc = "" - icon = 'icons/obj/pda.dmi' - icon_state = "pda" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - item_flags = NOBLUDGEON - w_class = WEIGHT_CLASS_TINY - slot_flags = ITEM_SLOT_RING | ITEM_SLOT_BELT - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) - resistance_flags = FIRE_PROOF | ACID_PROOF - - - //Main variables - var/owner = null // String name of owner - var/default_cartridge = 0 // Access level defined by cartridge - var/obj/item/cartridge/cartridge = null //current cartridge - var/mode = 0 //Controls what menu the PDA will display. 0 is hub; the rest are either built in or based on cartridge. - var/icon_alert = "pda-r" //Icon to be overlayed for message alerts. Taken from the pda icon file. - var/font_index = 0 //This int tells DM which font is currently selected and lets DM know when the last font has been selected so that it can cycle back to the first font when "toggle font" is pressed again. - var/font_mode = "font-family:monospace;" //The currently selected font. - var/background_color = "#808000" //The currently selected background color. - - #define FONT_MONO "font-family:monospace;" - #define FONT_SHARE "font-family:\"Share Tech Mono\", monospace;letter-spacing:0px;" - #define FONT_ORBITRON "font-family:\"Orbitron\", monospace;letter-spacing:0px; font-size:15px" - #define FONT_VT "font-family:\"VT323\", monospace;letter-spacing:1px;" - #define MODE_MONO 0 - #define MODE_SHARE 1 - #define MODE_ORBITRON 2 - #define MODE_VT 3 - - //Secondary variables - var/scanmode = PDA_SCANNER_NONE - var/fon = FALSE //Is the flashlight function on? - var/f_lum = 2.3 //Luminosity for the flashlight function - var/silent = FALSE //To beep or not to beep, that is the question - var/toff = FALSE //If TRUE, messenger disabled - var/tnote = null //Current Texts - var/last_text //No text spamming - var/last_everyone //No text for everyone spamming - var/last_noise //Also no honk spamming that's bad too - var/ttone = "beep" //The ringtone! - 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/note = "Congratulations, my station has chosen the Thinktronic 5230 Personal Data Assistant!" //Current note in the notepad function - var/notehtml = "" - var/notescanned = FALSE // True if what is in the notekeeper was from a paper. - var/hidden = FALSE // Is the PDA hidden from the PDA list? - var/emped = FALSE - var/equipped = FALSE //used here to determine if this is the first time its been picked up - var/allow_emojis = FALSE //if the pda can send emojis and actually have them parsed as such - var/sort_by_job = FALSE // If this is TRUE, will sort PDA list by job. - - var/obj/item/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 - - var/obj/item/paicard/pai = null // A slot for a personal AI device - - var/datum/picture/picture //Scanned photo - - var/list/contained_item = list(/obj/item/pen, /obj/item/toy/crayon, /obj/item/lipstick, /obj/item/flashlight/pen, /obj/item/clothing/mask/cigarette) - var/obj/item/inserted_item //Used for pen, crayon, and lipstick insertion or removal. Same as above. - var/overlays_x_offset = 0 //x offset to use for certain overlays - - var/underline_flag = TRUE //flag for underline - -/obj/item/pda/suicide_act(mob/living/carbon/user) - var/deathMessage = msg_input(user) - if (!deathMessage) - deathMessage = "i ded" - user.visible_message("[user] is sending a message to the Grim Reaper! It looks like [user.p_theyre()] trying to commit suicide!") - tnote += "→ To The Grim Reaper:
    [deathMessage]
    "//records a message in their PDA as being sent to the grim reaper - return BRUTELOSS - -/obj/item/pda/examine(mob/user) - . = ..() - if(!id && !inserted_item) - return - - if(id) - . += "Alt-click to remove the id." - - if(inserted_item && (!isturf(loc))) - . += "Ctrl-click to remove [inserted_item]." - -/obj/item/pda/Initialize() - . = ..() - if(fon) - set_light(f_lum) - - GLOB.PDAs += src - if(default_cartridge) - cartridge = new default_cartridge(src) - if(inserted_item) - inserted_item = new inserted_item(src) - else - inserted_item = new /obj/item/pen(src) - update_icon() - -/obj/item/pda/equipped(mob/user, slot) - . = ..() - if(!equipped) - if(user.client) - background_color = user.client.prefs.pda_color - switch(user.client.prefs.pda_style) - if(MONO) - font_index = MODE_MONO - font_mode = FONT_MONO - if(SHARE) - font_index = MODE_SHARE - font_mode = FONT_SHARE - if(ORBITRON) - font_index = MODE_ORBITRON - font_mode = FONT_ORBITRON - if(VT) - font_index = MODE_VT - font_mode = FONT_VT - else - font_index = MODE_MONO - font_mode = FONT_MONO - equipped = TRUE - -/obj/item/pda/proc/update_label() - name = "PDA-[owner] ([ownjob])" //Name generalisation - -/obj/item/pda/GetAccess() - if(id) - return id.GetAccess() - else - return ..() - -/obj/item/pda/GetID() - return id - -/obj/item/pda/RemoveID() - return do_remove_id() - -/obj/item/pda/InsertID(obj/item/inserting_item) - var/obj/item/card/inserting_id = inserting_item.RemoveID() - if(!inserting_id) - return - insert_id(inserting_id) - if(id == inserting_id) - return TRUE - return FALSE - -/obj/item/pda/update_icon() - cut_overlays() - var/mutable_appearance/overlay = new() - overlay.pixel_x = overlays_x_offset - if(id) - overlay.icon_state = "id_overlay" - add_overlay(new /mutable_appearance(overlay)) - if(inserted_item) - overlay.icon_state = "insert_overlay" - add_overlay(new /mutable_appearance(overlay)) - if(fon) - overlay.icon_state = "light_overlay" - add_overlay(new /mutable_appearance(overlay)) - if(pai) - if(pai.pai) - overlay.icon_state = "pai_overlay" - add_overlay(new /mutable_appearance(overlay)) - else - overlay.icon_state = "pai_off_overlay" - add_overlay(new /mutable_appearance(overlay)) - -/obj/item/pda/MouseDrop(mob/over, src_location, over_location) - var/mob/M = usr - if((M == over) && usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - return attack_self(M) - return ..() - -/obj/item/pda/attack_self_tk(mob/user) - to_chat(user, "The PDA's capacitive touch screen doesn't seem to respond!") - return - -/obj/item/pda/interact(mob/user) - if(!user.IsAdvancedToolUser()) - to_chat(user, "I don't have the dexterity to do this!") - return - - ..() - -// var/datum/asset/spritesheet/assets = get_asset_datum(/datum/asset/spritesheet/simple/pda) -// assets.send(user) - -// var/datum/asset/spritesheet/emoji_s = get_asset_datum(/datum/asset/spritesheet/goonchat) -// emoji_s.send(user) //Already sent by chat but no harm doing this - - user.set_machine(src) - - var/dat = "Personal Data Assistant" -// dat += assets.css_tag() -// dat += emoji_s.css_tag() - - dat += "[PDAIMG(refresh)]Refresh" - - if ((!isnull(cartridge)) && (mode == 0)) - dat += " | [PDAIMG(eject)]Eject [cartridge]" - if (mode) - dat += " | [PDAIMG(menu)]Return" - - if (mode == 0) - dat += "
    " - dat += "
    Toggle Font" - dat += " | Change Color" - dat += " | Toggle Underline" //underline button - - dat += "
    " - - dat += "
    " - - if (!owner) - dat += "Warning: No owner information entered. Please swipe card.

    " - dat += "[PDAIMG(refresh)]Retry" - else - switch (mode) - if (0) - dat += "

    PERSONAL DATA ASSISTANT v.1.2

    " - dat += "Owner: [owner], [ownjob]
    " - dat += text("ID: [id ? "[id.registered_name], [id.assignment]" : "----------"]") - dat += text("
    [id ? "Update PDA Info" : ""]

    ") - - dat += "[station_time_timestamp()]
    " //:[world.time / 100 % 6][world.time / 100 % 10]" - dat += "[time2text(world.realtime, "MMM DD")] [GLOB.year_integer+540]" - - dat += "

    " - - dat += "

    General Functions

    " - dat += "" - if (cartridge.access & CART_ENGINE) - dat += "

    Engineering Functions

    " - dat += "" - if (cartridge.access & CART_MEDICAL) - dat += "

    Medical Functions

    " - dat += "" - if (cartridge.access & CART_SECURITY) - dat += "

    Security Functions

    " - dat += "" - if(cartridge.access & CART_QUARTERMASTER) - dat += "

    Quartermaster Functions:

    " - dat += "" - dat += "" - - dat += "

    Utilities

    " - dat += "" - - if (1) - dat += "

    [PDAIMG(notes)] Notekeeper V2.2

    " - dat += "Edit
    " - if(notescanned) - dat += "(This is a scanned image, editing it may cause some text formatting to change.)
    " - dat += "
    [(!notehtml ? note : notehtml)]" - - if (2) - dat += "

    [PDAIMG(mail)] SpaceMessenger V3.9.6

    " - dat += "[PDAIMG(bell)]Ringer: [silent == 1 ? "Off" : "On"] | " - dat += "[PDAIMG(mail)]Send / Receive: [toff == 1 ? "Off" : "On"] | " - dat += "[PDAIMG(bell)]Set Ringtone | " - dat += "[PDAIMG(mail)]Messages
    " - dat += "Sorted by: [sort_by_job ? "Job" : "Name"]" - - if(cartridge) - dat += cartridge.message_header() - - dat += "

    [PDAIMG(menu)] Detected PDAs

    " - - dat += "
      " - var/count = 0 - - if (!toff) - for (var/obj/item/pda/P in get_viewable_pdas(sort_by_job)) - if (P == src) - continue - dat += "
    • [P.owner] ([P.ownjob])" - if(cartridge) - dat += cartridge.message_special(P) - dat += "
    • " - count++ - dat += "
    " - if (count == 0) - dat += "None detected.
    " - else if(cartridge && cartridge.spam_enabled) - dat += "Send To All" - - if(21) - dat += "

    [PDAIMG(mail)] SpaceMessenger V3.9.6

    " - dat += "[PDAIMG(blank)]Clear Messages" - - dat += "

    [PDAIMG(mail)] Messages

    " - - dat += tnote - dat += "
    " - - if (3) - dat += "

    [PDAIMG(atmos)] Atmospheric Readings

    " - - var/turf/T = user.loc - if (isnull(T)) - dat += "Unable to obtain a reading.
    " - else - var/datum/gas_mixture/environment = T.return_air() - var/list/env_gases = environment.gases - - var/pressure = environment.return_pressure() - var/total_moles = environment.total_moles() - - dat += "Air Pressure: [round(pressure,0.1)] kPa
    " - - if (total_moles) - for(var/id in env_gases) - var/gas_level = env_gases[id][MOLES]/total_moles - if(gas_level > 0) - dat += "[env_gases[id][GAS_META][META_GAS_NAME]]: [round(gas_level*100, 0.01)]%
    " - - dat += "Temperature: [round(environment.temperature-T0C)]°C
    " - dat += "
    " - else//Else it links to the cart menu proc. Although, it really uses menu hub 4--menu 4 doesn't really exist as it simply redirects to hub. - dat += cartridge.generate_menu() - - dat += "" - - if (underline_flag) - dat = replacetext(dat, "text-decoration:none", "text-decoration:underline") - if (!underline_flag) - dat = replacetext(dat, "text-decoration:underline", "text-decoration:none") - - user << browse(dat, "window=pda;size=400x450;border=1;can_resize=1;can_minimize=0") - onclose(user, "pda", src) - -/obj/item/pda/Topic(href, href_list) - ..() - var/mob/living/U = usr - //Looking for master was kind of pointless since PDAs don't appear to have one. - - if(usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK) && !href_list["close"]) - add_fingerprint(U) - U.set_machine(src) - - switch(href_list["choice"]) - -//BASIC FUNCTIONS=================================== - - if("Refresh")//Refresh, goes to the end of the proc. - - if ("Toggle_Font") - //CODE REVISION 2 - font_index = (font_index + 1) % 4 - - switch(font_index) - if (MODE_MONO) - font_mode = FONT_MONO - if (MODE_SHARE) - font_mode = FONT_SHARE - if (MODE_ORBITRON) - font_mode = FONT_ORBITRON - if (MODE_VT) - font_mode = FONT_VT - if ("Change_Color") - var/new_color = input("Please enter a color name or hex value (Default is \'#808000\').",background_color)as color - background_color = new_color - - if ("Toggle_Underline") - underline_flag = !underline_flag - - if("Return")//Return - if(mode<=9) - mode = 0 - else - mode = round(mode/10) - if(mode==4 || mode == 5)//Fix for cartridges. Redirects to hub. - mode = 0 - if ("Authenticate")//Checks for ID - id_check(U) - if("UpdateInfo") - ownjob = id.assignment - if(istype(id, /obj/item/card/id/syndicate)) - owner = id.registered_name - update_label() - if("Eject")//Ejects the cart, only done from hub. - if (!isnull(cartridge)) - U.put_in_hands(cartridge) - to_chat(U, "I remove [cartridge] from [src].") - scanmode = PDA_SCANNER_NONE - cartridge.host_pda = null - cartridge = null - update_icon() - -//MENU FUNCTIONS=================================== - - if("0")//Hub - mode = 0 - if("1")//Notes - mode = 1 - if("2")//Messenger - mode = 2 - if("21")//Read messeges - mode = 21 - if("3")//Atmos scan - mode = 3 - if("4")//Redirects to hub - mode = 0 - - -//MAIN FUNCTIONS=================================== - - if("Light") - toggle_light() - if("Medical Scan") - if(scanmode == PDA_SCANNER_MEDICAL) - scanmode = PDA_SCANNER_NONE - else if((!isnull(cartridge)) && (cartridge.access & CART_MEDICAL)) - scanmode = PDA_SCANNER_MEDICAL - if("Reagent Scan") - if(scanmode == PDA_SCANNER_REAGENT) - scanmode = PDA_SCANNER_NONE - else if((!isnull(cartridge)) && (cartridge.access & CART_REAGENT_SCANNER)) - scanmode = PDA_SCANNER_REAGENT - if("Halogen Counter") - if(scanmode == PDA_SCANNER_HALOGEN) - scanmode = PDA_SCANNER_NONE - else if((!isnull(cartridge)) && (cartridge.access & CART_ENGINE)) - scanmode = PDA_SCANNER_HALOGEN - if("Honk") - if ( !(last_noise && world.time < last_noise + 20) ) - playsound(src, 'sound/blank.ogg', 50, TRUE) - last_noise = world.time - if("Trombone") - if ( !(last_noise && world.time < last_noise + 20) ) - playsound(src, 'sound/blank.ogg', 50, TRUE) - last_noise = world.time - if("Gas Scan") - if(scanmode == PDA_SCANNER_GAS) - scanmode = PDA_SCANNER_NONE - else if((!isnull(cartridge)) && (cartridge.access & CART_ATMOS)) - scanmode = PDA_SCANNER_GAS - if("Drone Phone") - var/alert_s = input(U,"Alert severity level","Ping Drones",null) as null|anything in list("Low","Medium","High","Critical") - var/area/A = get_area(U) - if(A && alert_s && !QDELETED(U)) - var/msg = "NON-DRONE {PING}: [U.name]: [alert_s] priority alert in [A.name]!" - _alert_drones(msg, TRUE, U) - to_chat(U, msg) - - -//NOTEKEEPER FUNCTIONS=================================== - - if ("Edit") - var/n = stripped_multiline_input(U, "Please enter message", name, note) - if (in_range(src, U) && loc == U) - if (mode == 1 && n) - note = n - notehtml = parsemarkdown(n, U) - notescanned = FALSE - else - U << browse(null, "window=pda") - return - -//MESSENGER FUNCTIONS=================================== - - if("Toggle Messenger") - toff = !toff - if("Toggle Ringer")//If viewing texts then erase them, if not then toggle silent status - silent = !silent - if("Clear")//Clears messages - tnote = null - if("Ringtone") - var/t = input(U, "Please enter new ringtone", name, ttone) as text|null - if(in_range(src, U) && loc == U && t) - if(SEND_SIGNAL(src, COMSIG_PDA_CHANGE_RINGTONE, U, t) & COMPONENT_STOP_RINGTONE_CHANGE) - U << browse(null, "window=pda") - return - else - ttone = copytext(sanitize(t), 1, 20) - else - U << browse(null, "window=pda") - return - if("Message") - create_message(U, locate(href_list["target"]) in GLOB.PDAs) - - if("Sorting Mode") - sort_by_job = !sort_by_job - - if("MessageAll") - send_to_all(U) - - if("cart") - if(cartridge) - cartridge.special(U, href_list) - else - U << browse(null, "window=pda") - return - -//SYNDICATE FUNCTIONS=================================== - - if("Toggle Door") - if(cartridge && cartridge.access & CART_REMOTE_DOOR) - for(var/obj/machinery/door/poddoor/M in GLOB.machines) - if(M.id == cartridge.remote_door_id) - if(M.density) - M.open() - else - M.close() - -//pAI FUNCTIONS=================================== - if("pai") - switch(href_list["option"]) - if("1") // Configure pAI device - pai.attack_self(U) - if("2") // Eject pAI device - usr.put_in_hands(pai) - to_chat(usr, "I remove the pAI from the [name].") - -//LINK FUNCTIONS=================================== - - else//Cartridge menu linking - mode = max(text2num(href_list["choice"]), 0) - - else//If not in range, can't interact or not using the pda. - U.unset_machine() - U << browse(null, "window=pda") - return - -//EXTRA FUNCTIONS=================================== - - if (mode == 2 || mode == 21)//To clear message overlays. - update_icon() - - if ((honkamt > 0) && (prob(60)))//For clown virus. - honkamt-- - playsound(src, 'sound/blank.ogg', 30, TRUE) - - if(U.machine == src && href_list["skiprefresh"]!="1")//Final safety. - attack_self(U)//It auto-closes the menu prior if the user is not in range and so on. - else - U.unset_machine() - U << browse(null, "window=pda") - return - -/obj/item/pda/proc/remove_id() - if(issilicon(usr) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - return - do_remove_id(usr) - - if (id) - usr.put_in_hands(id) - to_chat(usr, "I remove the ID from the [name].") - id = null - update_icon() - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - if(H.wear_ring == src) - H.sec_hud_set_ID() - -/obj/item/pda/proc/do_remove_id(mob/user) - if(!id) - return - if(user) - user.put_in_hands(id) - to_chat(user, "I remove the ID from the [name].") - else - id.forceMove(get_turf(src)) - - . = id - id = null - update_icon() - - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - if(H.wear_ring == src) - H.sec_hud_set_ID() - - -/obj/item/pda/proc/msg_input(mob/living/U = usr) - var/t = stripped_input(U, "Please enter message", name) - if (!t || toff) - return - if(!U.canUseTopic(src, BE_CLOSE)) - return - if(emped) - t = Gibberish(t, TRUE) - return t - -/obj/item/pda/proc/send_message(mob/living/user, list/obj/item/pda/targets, everyone) - var/message = msg_input(user) - if(!message || !targets.len) - return - if((last_text && world.time < last_text + 10) || (everyone && last_everyone && world.time < last_everyone + PDA_SPAM_DELAY)) - return - if(prob(1)) - message += "\nSent from my PDA" - // Send the signal - var/list/string_targets = list() - for (var/obj/item/pda/P in targets) - if (P.owner && P.ownjob) // != src is checked by the UI - string_targets += "[P.owner] ([P.ownjob])" - for (var/obj/machinery/computer/message_monitor/M in targets) - // In case of "Reply" to a message from a console, this will make the - // message be logged successfully. If the console is impersonating - // someone by matching their name and job, the reply will reach the - // impersonated PDA. - string_targets += "[M.customsender] ([M.customjob])" - if (!string_targets.len) - return - - var/datum/signal/subspace/messaging/pda/signal = new(src, list( - "name" = "[owner]", - "job" = "[ownjob]", - "message" = message, - "targets" = string_targets, - "emojis" = allow_emojis, - )) - if (picture) - signal.data["photo"] = picture - signal.send_to_receivers() - - // If it didn't reach, note that fact - if (!signal.data["done"]) - to_chat(user, "ERROR: Server isn't responding.") - return - - var/target_text = signal.format_target() - if(allow_emojis) - message = emoji_parse(message)//already sent- this just shows the sent emoji as one to the sender in the to_chat - signal.data["message"] = emoji_parse(signal.data["message"]) - - // Log it in our logs - tnote += "→ To [target_text]:
    [signal.format_message()]
    " - // Show it to ghosts - var/ghost_message = "[owner] PDA Message --> [target_text]: [signal.format_message()]" - for(var/mob/M in GLOB.player_list) - if(isobserver(M) && (M.client.prefs.chat_toggles & CHAT_GHOSTPDA)) - to_chat(M, "[FOLLOW_LINK(M, user)] [ghost_message]") - // Log in the talk log - user.log_talk(message, LOG_PDA, tag="PDA: [initial(name)] to [target_text]") - to_chat(user, "PDA message sent to [target_text]: \"[message]\"") - // Reset the photo - picture = null - last_text = world.time - if (everyone) - last_everyone = world.time - -/obj/item/pda/proc/receive_message(datum/signal/subspace/messaging/pda/signal) - tnote += "← From [signal.data["name"]] ([signal.data["job"]]):
    [signal.format_message()]
    " - - if (!silent) - playsound(src, 'sound/blank.ogg', 50, TRUE) - audible_message("[icon2html(src, hearers(src))] *[ttone]*", null, 3) - //Search for holder of the PDA. - var/mob/living/L = null - if(loc && isliving(loc)) - L = loc - //Maybe they are a pAI! - else - L = get(src, /mob/living/silicon) - - if(L && L.stat != UNCONSCIOUS) - var/reply = "(Reply)" - var/hrefstart - var/hrefend - if (isAI(L)) - hrefstart = "" - hrefend = "" - - if(signal.data["automated"]) - reply = "\[Automated Message\]" - - var/inbound_message = signal.format_message() - if(signal.data["emojis"] == TRUE)//so will not parse emojis as such from pdas that don't send emojis - inbound_message = emoji_parse(inbound_message) - - to_chat(L, "[icon2html(src)] PDA message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], [inbound_message] [reply]") - - update_icon() - add_overlay(icon_alert) - -/obj/item/pda/proc/send_to_all(mob/living/U) - if (last_everyone && world.time < last_everyone + PDA_SPAM_DELAY) - to_chat(U,"Send To All function is still on cooldown.") - return - send_message(U,get_viewable_pdas(), TRUE) - -/obj/item/pda/proc/create_message(mob/living/U, obj/item/pda/P) - send_message(U,list(P)) - -/obj/item/pda/AltClick() - ..() - - if(id) - remove_id() - else - remove_pen() - -/obj/item/pda/CtrlClick() - ..() - - if(isturf(loc)) //stops the user from dragging the PDA by ctrl-clicking it. - return - - remove_pen() - -/obj/item/pda/verb/verb_toggle_light() - set hidden = 1 - set name = "Toggle Flashlight" - - toggle_light() - -/obj/item/pda/verb/verb_remove_id() - set hidden = 1 - set name = "Eject ID" - set src in usr - - if(id) - remove_id() - else - to_chat(usr, "This PDA does not have an ID in it!") - -/obj/item/pda/verb/verb_remove_pen() - set hidden = 1 - set name = "Remove Pen" - set src in usr - - remove_pen() - -/obj/item/pda/proc/toggle_light() - if(issilicon(usr) || !usr.canUseTopic(src, BE_CLOSE)) - return - if(fon) - fon = FALSE - set_light(0) - else if(f_lum) - fon = TRUE - set_light(f_lum) - update_icon() - -/obj/item/pda/proc/remove_pen() - - if(issilicon(usr) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - return - - if(inserted_item) - usr.put_in_hands(inserted_item) - to_chat(usr, "I remove [inserted_item] from [src].") - inserted_item = null - update_icon() - else - to_chat(usr, "This PDA does not have a pen in it!") - -//trying to insert or remove an id -/obj/item/pda/proc/id_check(mob/user, obj/item/card/id/I) - if(!I) - if(id && (src in user.contents)) - remove_id() - return TRUE - else - var/obj/item/card/id/C = user.get_active_held_item() - if(istype(C)) - I = C - - if(I?.registered_name) - if(!user.transferItemToLoc(I, src)) - return FALSE - insert_id(I, user) - update_icon() - return TRUE - - -/obj/item/pda/proc/insert_id(obj/item/card/id/inserting_id, mob/user) - var/obj/old_id = id - id = inserting_id - if(ishuman(loc)) - var/mob/living/carbon/human/human_wearer = loc - if(human_wearer.wear_ring == src) - human_wearer.sec_hud_set_ID() - if(old_id) - if(user) - user.put_in_hands(old_id) - else - old_id.forceMove(get_turf(src)) - - -// access to status display signals -/obj/item/pda/attackby(obj/item/C, mob/user, params) - if(istype(C, /obj/item/cartridge) && !cartridge) - if(!user.transferItemToLoc(C, src)) - return - cartridge = C - cartridge.host_pda = src - to_chat(user, "I insert [cartridge] into [src].") - update_icon() - - else if(istype(C, /obj/item/card/id)) - var/obj/item/card/id/idcard = C - if(!idcard.registered_name) - to_chat(user, "\The [src] rejects the ID!") - return - if(!owner) - owner = idcard.registered_name - ownjob = idcard.assignment - update_label() - to_chat(user, "Card scanned.") - else - if(!id_check(user, idcard)) - return - to_chat(user, "I put the ID into \the [src]'s slot.") - updateSelfDialog()//Update self dialog on success. - - return //Return in case of failed check or when successful. - updateSelfDialog()//For the non-input related code. - else if(istype(C, /obj/item/paicard) && !pai) - if(!user.transferItemToLoc(C, src)) - return - pai = C - to_chat(user, "I slot \the [C] into [src].") - update_icon() - updateUsrDialog() - else if(is_type_in_list(C, contained_item)) //Checks if there is a pen - if(inserted_item) - to_chat(user, "There is already \a [inserted_item] in \the [src]!") - else - if(!user.transferItemToLoc(C, src)) - return - to_chat(user, "I slide \the [C] into \the [src].") - inserted_item = C - update_icon() - else if(istype(C, /obj/item/photo)) - var/obj/item/photo/P = C - picture = P.picture - to_chat(user, "I scan \the [C].") - else - return ..() - -/obj/item/pda/attack(mob/living/carbon/C, mob/living/user) - if(istype(C)) - switch(scanmode) - - if(PDA_SCANNER_MEDICAL) - C.visible_message("[user] has analyzed [C]'s vitals!") - healthscan(user, C, 1) - add_fingerprint(user) - - if(PDA_SCANNER_HALOGEN) - C.visible_message("[user] has analyzed [C]'s radiation levels!") - - user.show_message("Analyzing Results for [C]:") - if(C.radiation) - user.show_message("\green Radiation Level: \black [C.radiation]") - else - user.show_message("No radiation detected.") - -/obj/item/pda/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity) - . = ..() - if(!proximity) - return - switch(scanmode) - if(PDA_SCANNER_REAGENT) - if(!isnull(A.reagents)) - if(A.reagents.reagent_list.len > 0) - var/reagents_length = A.reagents.reagent_list.len - to_chat(user, "[reagents_length] chemical agent[reagents_length > 1 ? "s" : ""] found.") - for (var/re in A.reagents.reagent_list) - to_chat(user, "\t [re]") - else - to_chat(user, "No active chemical agents found in [A].") - else - to_chat(user, "No significant chemical agents found in [A].") - - if(PDA_SCANNER_GAS) - A.analyzer_act(user, src) - - if (!scanmode && istype(A, /obj/item/paper) && owner) - var/obj/item/paper/PP = A - if (!PP.info) - to_chat(user, "Unable to scan! Paper is blank.") - return - notehtml = PP.info - note = replacetext(notehtml, "
    ", "\[br\]") - note = replacetext(note, "
  • ", "\[*\]") - note = replacetext(note, "
      ", "\[list\]") - note = replacetext(note, "
    ", "\[/list\]") - note = html_encode(note) - notescanned = TRUE - to_chat(user, "Paper scanned. Saved to PDA's notekeeper." ) - - -/obj/item/pda/proc/explode() //This needs tuning. - var/turf/T = get_turf(src) - - if (ismob(loc)) - var/mob/M = loc - M.show_message("My [src] explodes!", MSG_VISUAL, "I hear a loud *pop*!", MSG_AUDIBLE) - else - visible_message("[src] explodes!", "I hear a loud *pop*!") - - if(T) - T.hotspot_expose(700,125) - if(istype(cartridge, /obj/item/cartridge/virus/syndicate)) - explosion(T, -1, 1, 3, 4) - else - explosion(T, -1, -1, 2, 3) - qdel(src) - return - -/obj/item/pda/Destroy() - GLOB.PDAs -= src - if(istype(id)) - QDEL_NULL(id) - if(istype(cartridge)) - QDEL_NULL(cartridge) - if(istype(pai)) - QDEL_NULL(pai) - if(istype(inserted_item)) - QDEL_NULL(inserted_item) - return ..() - -//AI verb and proc for sending PDA messages. - -/obj/item/pda/ai/verb/cmd_toggle_pda_receiver() - set category = "AI Commands" - set name = "PDA - Toggle Sender/Receiver" - - if(usr.stat == DEAD) - return //won't work if dead - var/mob/living/silicon/S = usr - if(istype(S) && !isnull(S.aiPDA)) - S.aiPDA.toff = !S.aiPDA.toff - to_chat(usr, "PDA sender/receiver toggled [(S.aiPDA.toff ? "Off" : "On")]!") - else - to_chat(usr, "You do not have a PDA. You should make an issue report about this.") - -/obj/item/pda/ai/verb/cmd_toggle_pda_silent() - set category = "AI Commands" - set name = "PDA - Toggle Ringer" - - if(usr.stat == DEAD) - return //won't work if dead - var/mob/living/silicon/S = usr - if(istype(S) && !isnull(S.aiPDA)) - //0 - S.aiPDA.silent = !S.aiPDA.silent - to_chat(usr, "PDA ringer toggled [(S.aiPDA.silent ? "Off" : "On")]!") - else - to_chat(usr, "You do not have a PDA. You should make an issue report about this.") - -/mob/living/silicon/proc/cmd_send_pdamesg(mob/user) - var/list/plist = list() - var/list/namecounts = list() - - if(aiPDA.toff) - to_chat(user, "Turn on my receiver in order to send messages.") - return - - for (var/obj/item/pda/P in get_viewable_pdas()) - if (P == src) - continue - else if (P == aiPDA) - continue - - plist[avoid_assoc_duplicate_keys(P.owner, namecounts)] = P - - var/c = input(user, "Please select a PDA") as null|anything in sortList(plist) - - if (!c) - return - - var/selected = plist[c] - - if(aicamera.stored.len) - var/add_photo = input(user,"Do you want to attach a photo?","Photo","No") as null|anything in list("Yes","No") - if(add_photo=="Yes") - var/datum/picture/Pic = aicamera.selectpicture(user) - aiPDA.picture = Pic - - if(incapacitated()) - return - - aiPDA.create_message(src, selected) - -/mob/living/silicon/proc/cmd_show_message_log(mob/user) - if(incapacitated()) - return - if(!isnull(aiPDA)) - var/HTML = "AI PDA Message Log[aiPDA.tnote]" - user << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0") - else - to_chat(user, "I do not have a PDA! You should make an issue report about this.") - -// Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP -/obj/item/pda/emp_act(severity) - . = ..() - if (!(. & EMP_PROTECT_CONTENTS)) - for(var/atom/A in src) - A.emp_act(severity) - if (!(. & EMP_PROTECT_SELF)) - emped += 1 - spawn(200 * severity) - emped -= 1 - -/proc/get_viewable_pdas(sort_by_job = FALSE) - . = list() - // Returns a list of PDAs which can be viewed from another PDA/message monitor., - var/sortmode - if(sort_by_job) - sortmode = /proc/cmp_pdaname_asc - else - sortmode = /proc/cmp_pdajob_asc - - for(var/obj/item/pda/P in sortList(GLOB.PDAs, sortmode)) - if(!P.owner || P.toff || P.hidden) - continue - . += P - -/obj/item/pda/proc/pda_no_detonate() - return COMPONENT_PDA_NO_DETONATE - -#undef PDA_SCANNER_NONE -#undef PDA_SCANNER_MEDICAL -#undef PDA_SCANNER_FORENSICS -#undef PDA_SCANNER_REAGENT -#undef PDA_SCANNER_HALOGEN -#undef PDA_SCANNER_GAS -#undef PDA_SPAM_DELAY diff --git a/code/game/objects/items/devices/PDA/PDA_types.dm b/code/game/objects/items/devices/PDA/PDA_types.dm deleted file mode 100644 index d57f2339fb..0000000000 --- a/code/game/objects/items/devices/PDA/PDA_types.dm +++ /dev/null @@ -1,226 +0,0 @@ -//Clown PDA is slippery. -/obj/item/pda/clown - name = "clown PDA" - default_cartridge = /obj/item/cartridge/virus/clown - inserted_item = /obj/item/toy/crayon/rainbow - icon_state = "pda-clown" - desc = "" - ttone = "honk" - -/obj/item/pda/clown/ComponentInitialize() - . = ..() - AddComponent(/datum/component/slippery, 120, NO_SLIP_WHEN_WALKING, CALLBACK(src, PROC_REF(AfterSlip))) - -/obj/item/pda/clown/proc/AfterSlip(mob/living/carbon/human/M) - if (istype(M) && (M.real_name != owner)) - var/obj/item/cartridge/virus/clown/cart = cartridge - if(istype(cart) && cart.charges < 5) - cart.charges++ - -//Mime PDA sends "silent" messages. -/obj/item/pda/mime - name = "mime PDA" - default_cartridge = /obj/item/cartridge/virus/mime - inserted_item = /obj/item/toy/crayon/mime - icon_state = "pda-mime" - desc = "" - allow_emojis = TRUE - silent = TRUE - ttone = "silence" - -/obj/item/pda/mime/msg_input(mob/living/U = usr) - if(emped || toff) - return - var/emojis = emoji_sanitize(stripped_input(U, "Please enter emojis", name)) - if(!emojis) - return - if(!U.canUseTopic(src, BE_CLOSE)) - return - return emojis - -// Special AI/pAI PDAs that cannot explode. -/obj/item/pda/ai - icon = null - ttone = "data" - fon = FALSE - -/obj/item/pda/ai/attack_self(mob/user) - if ((honkamt > 0) && (prob(60)))//For clown virus. - honkamt-- - playsound(loc, 'sound/blank.ogg', 30, TRUE) - return - -/obj/item/pda/ai/pai - ttone = "assist" - -/obj/item/pda/ai/Initialize() - . = ..() - RegisterSignal(src, COMSIG_PDA_CHECK_DETONATE, PROC_REF(pda_no_detonate)) - -/obj/item/pda/medical - name = "medical PDA" - default_cartridge = /obj/item/cartridge/medical - icon_state = "pda-medical" - -/obj/item/pda/viro - name = "virology PDA" - default_cartridge = /obj/item/cartridge/medical - icon_state = "pda-virology" - -/obj/item/pda/engineering - name = "engineering PDA" - default_cartridge = /obj/item/cartridge/engineering - icon_state = "pda-engineer" - -/obj/item/pda/security - name = "security PDA" - default_cartridge = /obj/item/cartridge/security - icon_state = "pda-security" - -/obj/item/pda/detective - name = "detective PDA" - default_cartridge = /obj/item/cartridge/detective - icon_state = "pda-detective" - -/obj/item/pda/warden - name = "warden PDA" - default_cartridge = /obj/item/cartridge/security - icon_state = "pda-warden" - -/obj/item/pda/janitor - name = "janitor PDA" - default_cartridge = /obj/item/cartridge/janitor - icon_state = "pda-janitor" - ttone = "slip" - -/obj/item/pda/toxins - name = "scientist PDA" - default_cartridge = /obj/item/cartridge/signal/toxins - icon_state = "pda-science" - ttone = "boom" - - -/obj/item/pda/heads - default_cartridge = /obj/item/cartridge/head - icon_state = "pda-hop" - -/obj/item/pda/heads/hop - name = "head of personnel PDA" - default_cartridge = /obj/item/cartridge/hop - icon_state = "pda-hop" - -/obj/item/pda/heads/hos - name = "head of security PDA" - default_cartridge = /obj/item/cartridge/hos - icon_state = "pda-hos" - -/obj/item/pda/heads/ce - name = "chief engineer PDA" - default_cartridge = /obj/item/cartridge/ce - icon_state = "pda-ce" - -/obj/item/pda/heads/cmo - name = "chief medical officer PDA" - default_cartridge = /obj/item/cartridge/cmo - icon_state = "pda-cmo" - -/obj/item/pda/heads/rd - name = "research director PDA" - default_cartridge = /obj/item/cartridge/rd - inserted_item = /obj/item/pen/fountain - icon_state = "pda-rd" - -/obj/item/pda/captain - name = "captain PDA" - default_cartridge = /obj/item/cartridge/captain - inserted_item = /obj/item/pen/fountain/captain - icon_state = "pda-captain" - -/obj/item/pda/captain/Initialize() - . = ..() - RegisterSignal(src, COMSIG_PDA_CHECK_DETONATE, PROC_REF(pda_no_detonate)) - -/obj/item/pda/cargo - name = "cargo technician PDA" - default_cartridge = /obj/item/cartridge/quartermaster - icon_state = "pda-cargo" - -/obj/item/pda/quartermaster - name = "quartermaster PDA" - default_cartridge = /obj/item/cartridge/quartermaster - inserted_item = /obj/item/pen/fountain - icon_state = "pda-qm" - -/obj/item/pda/shaftminer - name = "shaft miner PDA" - icon_state = "pda-miner" - -/obj/item/pda/syndicate - default_cartridge = /obj/item/cartridge/virus/syndicate - icon_state = "pda-syndi" - name = "military PDA" - owner = "John Doe" - hidden = 1 - -/obj/item/pda/chaplain - name = "chaplain PDA" - icon_state = "pda-chaplain" - ttone = "holy" - -/obj/item/pda/lawyer - name = "lawyer PDA" - default_cartridge = /obj/item/cartridge/lawyer - inserted_item = /obj/item/pen/fountain - icon_state = "pda-lawyer" - ttone = "objection" - -/obj/item/pda/botanist - name = "botanist PDA" - //default_cartridge = /obj/item/cartridge/botanist - icon_state = "pda-hydro" - -/obj/item/pda/roboticist - name = "roboticist PDA" - icon_state = "pda-roboticist" - default_cartridge = /obj/item/cartridge/roboticist - -/obj/item/pda/curator - name = "curator PDA" - icon_state = "pda-library" - icon_alert = "pda-r-library" - default_cartridge = /obj/item/cartridge/curator - inserted_item = /obj/item/pen/fountain - desc = "" - note = "Congratulations, your station has chosen the Thinktronic 5290 WGW-11 Series E-reader and Personal Data Assistant!" - silent = TRUE //Quiet in the library! - overlays_x_offset = -3 - -/obj/item/pda/clear - name = "clear PDA" - icon_state = "pda-clear" - desc = "" - note = "Congratulations, you have chosen the Thinktronic 5230 Personal Data Assistant Deluxe Special Max Turbo Limited Edition!" - -/obj/item/pda/cook - name = "cook PDA" - icon_state = "pda-cook" - -/obj/item/pda/bar - name = "bartender PDA" - icon_state = "pda-bartender" - inserted_item = /obj/item/pen/fountain - -/obj/item/pda/atmos - name = "atmospherics PDA" - default_cartridge = /obj/item/cartridge/atmos - icon_state = "pda-atmos" - -/obj/item/pda/chemist - name = "chemist PDA" - default_cartridge = /obj/item/cartridge/chemistry - icon_state = "pda-chemistry" - -/obj/item/pda/geneticist - name = "geneticist PDA" - default_cartridge = /obj/item/cartridge/medical - icon_state = "pda-genetics" diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm deleted file mode 100644 index 00ecb55d65..0000000000 --- a/code/game/objects/items/devices/PDA/cart.dm +++ /dev/null @@ -1,761 +0,0 @@ - -#define CART_SECURITY (1<<0) -#define CART_ENGINE (1<<1) -#define CART_ATMOS (1<<2) -#define CART_MEDICAL (1<<3) -#define CART_MANIFEST (1<<4) -#define CART_CLOWN (1<<5) -#define CART_MIME (1<<6) -#define CART_JANITOR (1<<7) -#define CART_REAGENT_SCANNER (1<<8) -#define CART_NEWSCASTER (1<<9) -#define CART_REMOTE_DOOR (1<<10) -#define CART_STATUS_DISPLAY (1<<11) -#define CART_QUARTERMASTER (1<<12) -#define CART_HYDROPONICS (1<<13) -#define CART_DRONEPHONE (1<<14) - - -/obj/item/cartridge - name = "generic cartridge" - desc = "" - icon = 'icons/obj/pda.dmi' - icon_state = "cart" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - w_class = WEIGHT_CLASS_TINY - - var/obj/item/integrated_signaler/radio = null - - var/access = 0 //Bit flags for cartridge access - - var/remote_door_id = "" - - var/bot_access_flags = 0 //Bit flags. Selection: SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT - var/spam_enabled = 0 //Enables "Send to All" Option - - var/obj/item/pda/host_pda = null - var/menu - var/datum/data/record/active1 = null //General - var/datum/data/record/active2 = null //Medical - var/datum/data/record/active3 = null //Security - var/obj/machinery/computer/monitor/powmonitor = null // Power Monitor - var/list/powermonitors = list() - var/message1 // used for status_displays - var/message2 - var/list/stored_data = list() - var/current_channel - - var/mob/living/simple_animal/bot/active_bot - var/list/botlist = list() - -/obj/item/cartridge/Initialize() - . = ..() - var/obj/item/pda/pda = loc - if(istype(pda)) - host_pda = pda - -/obj/item/cartridge/engineering - name = "\improper Power-ON cartridge" - icon_state = "cart-e" - access = CART_ENGINE | CART_DRONEPHONE - bot_access_flags = FLOOR_BOT - -/obj/item/cartridge/atmos - name = "\improper BreatheDeep cartridge" - icon_state = "cart-a" - access = CART_ATMOS | CART_DRONEPHONE - bot_access_flags = FLOOR_BOT | FIRE_BOT - -/obj/item/cartridge/medical - name = "\improper Med-U cartridge" - icon_state = "cart-m" - access = CART_MEDICAL - bot_access_flags = MED_BOT - -/obj/item/cartridge/chemistry - name = "\improper ChemWhiz cartridge" - icon_state = "cart-chem" - access = CART_REAGENT_SCANNER - bot_access_flags = MED_BOT - -/obj/item/cartridge/security - name = "\improper R.O.B.U.S.T. cartridge" - icon_state = "cart-s" - access = CART_SECURITY - bot_access_flags = SEC_BOT - -/obj/item/cartridge/detective - name = "\improper D.E.T.E.C.T. cartridge" - icon_state = "cart-s" - access = CART_SECURITY | CART_MEDICAL | CART_MANIFEST - bot_access_flags = SEC_BOT - -/obj/item/cartridge/janitor - name = "\improper CustodiPRO cartridge" - desc = "" - icon_state = "cart-j" - access = CART_JANITOR | CART_DRONEPHONE - bot_access_flags = CLEAN_BOT - -/obj/item/cartridge/lawyer - name = "\improper P.R.O.V.E. cartridge" - icon_state = "cart-s" - access = CART_SECURITY - spam_enabled = 1 - -/obj/item/cartridge/curator - name = "\improper Lib-Tweet cartridge" - icon_state = "cart-s" - access = CART_NEWSCASTER - -/obj/item/cartridge/roboticist - name = "\improper B.O.O.P. Remote Control cartridge" - desc = "" - bot_access_flags = FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT - access = CART_DRONEPHONE - -/obj/item/cartridge/signal - name = "generic signaler cartridge" - desc = "" - -/obj/item/cartridge/signal/toxins - name = "\improper Signal Ace 2 cartridge" - desc = "" - icon_state = "cart-tox" - access = CART_REAGENT_SCANNER | CART_ATMOS - -/obj/item/cartridge/signal/Initialize() - . = ..() - radio = new(src) - - - -/obj/item/cartridge/quartermaster - name = "space parts & space vendors cartridge" - desc = "" - icon_state = "cart-q" - access = CART_QUARTERMASTER - bot_access_flags = MULE_BOT - -/obj/item/cartridge/head - name = "\improper Easy-Record DELUXE cartridge" - icon_state = "cart-h" - access = CART_MANIFEST | CART_STATUS_DISPLAY - -/obj/item/cartridge/hop - name = "\improper HumanResources9001 cartridge" - icon_state = "cart-h" - access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_JANITOR | CART_SECURITY | CART_NEWSCASTER | CART_QUARTERMASTER | CART_DRONEPHONE - bot_access_flags = MULE_BOT | CLEAN_BOT - -/obj/item/cartridge/hos - name = "\improper R.O.B.U.S.T. DELUXE cartridge" - icon_state = "cart-hos" - access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_SECURITY - bot_access_flags = SEC_BOT - - -/obj/item/cartridge/ce - name = "\improper Power-On DELUXE cartridge" - icon_state = "cart-ce" - access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_ENGINE | CART_ATMOS | CART_DRONEPHONE - bot_access_flags = FLOOR_BOT | FIRE_BOT - -/obj/item/cartridge/cmo - name = "\improper Med-U DELUXE cartridge" - icon_state = "cart-cmo" - access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_REAGENT_SCANNER | CART_MEDICAL - bot_access_flags = MED_BOT - -/obj/item/cartridge/rd - name = "\improper Signal Ace DELUXE cartridge" - icon_state = "cart-rd" - access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_REAGENT_SCANNER | CART_ATMOS | CART_DRONEPHONE - bot_access_flags = FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT - -/obj/item/cartridge/rd/Initialize() - . = ..() - radio = new(src) - -/obj/item/cartridge/captain - name = "\improper Value-PAK cartridge" - desc = "" //Give the Captain...EVERYTHING! (Except Mime, Clown, and Syndie) - icon_state = "cart-c" - access = ~(CART_CLOWN | CART_MIME | CART_REMOTE_DOOR) - bot_access_flags = SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT - spam_enabled = 1 - -/obj/item/cartridge/captain/Initialize() - . = ..() - radio = new(src) - -/obj/item/cartridge/proc/post_status(command, data1, data2) - - var/datum/radio_frequency/frequency = SSradio.return_frequency(FREQ_STATUS_DISPLAYS) - - if(!frequency) - return - - var/datum/signal/status_signal = new(list("command" = command)) - switch(command) - if("message") - status_signal.data["msg1"] = data1 - status_signal.data["msg2"] = data2 - if("alert") - status_signal.data["picture_state"] = data1 - - frequency.post_signal(src, status_signal) - -/obj/item/cartridge/proc/generate_menu(mob/user) - if(!host_pda) - return - switch(host_pda.mode) - if(40) //signaller - menu = "

    [PDAIMG(signaler)] Remote Signaling System

    " - - menu += {" -Send Signal
    -Frequency: -- -- -[format_frequency(radio.frequency)] -+ -+
    -
    -Code: -- -- -[radio.code] -+ -+
    "} - if (41) //crew manifest - - menu = "

    [PDAIMG(notes)] Crew Manifest

    " - menu += "Entries cannot be modified from this terminal.

    " - if(GLOB.data_core.general) - for (var/datum/data/record/t in sortRecord(GLOB.data_core.general)) - menu += "[t.fields["name"]] - [t.fields["rank"]]
    " - menu += "
    " - - - if (42) //status displays - menu = "

    [PDAIMG(status)] Station Status Display Interlink

    " - - menu += "\[ Clear \]
    " - menu += "\[ Shuttle ETA \]
    " - menu += "\[ Message \]" - menu += "
    " - menu += "\[ Alert: None |" - menu += " Red Alert |" - menu += " Lockdown |" - menu += " Biohazard \]
    " - - if (43) - menu = "

    [PDAIMG(power)] Power Monitors - Please select one


    " - powmonitor = null - powermonitors = list() - var/powercount = 0 - - - - var/turf/pda_turf = get_turf(src) - for(var/obj/machinery/computer/monitor/pMon in GLOB.machines) - if(pMon.stat & (NOPOWER | BROKEN)) //check to make sure the computer is functional - continue - if(pda_turf.z != pMon.z) //and that we're on the same zlevel as the computer (lore: limited signal strength) - continue - if(pMon.is_secret_monitor) //make sure it isn't a secret one (ie located on a ruin), allowing people to metagame that the location exists - continue - powercount++ - powermonitors += pMon - - - if(!powercount) - menu += "No connection
    " - else - - menu += "" - var/count = 0 - for(var/obj/machinery/computer/monitor/pMon in powermonitors) - count++ - menu += "[pMon] - [get_area_name(pMon, TRUE)]
    " - - menu += "
    " - - if (433) - menu = "

    [PDAIMG(power)] Power Monitor


    " - if(!powmonitor || !powmonitor.get_powernet()) - menu += "No connection
    " - else - var/list/L = list() - var/datum/powernet/connected_powernet = powmonitor.get_powernet() - for(var/obj/machinery/power/terminal/term in connected_powernet.nodes) - if(istype(term.master, /obj/machinery/power/apc)) - var/obj/machinery/power/apc/A = term.master - L += A - - menu += "
    Location: [get_area_name(powmonitor, TRUE)]
    Total power: [DisplayPower(connected_powernet.viewavail)]
    Total load: [DisplayPower(connected_powernet.viewload)]
    " - - menu += "" - - if(L.len > 0) - menu += "Area Eqp./Lgt./Env. Load Cell
    " - - var/list/S = list(" Off","AOff"," On", " AOn") - var/list/chg = list("N","C","F") - - for(var/obj/machinery/power/apc/A in L) - menu += copytext(add_tspace(A.area.name, 30), 1, 30) - menu += " [S[A.equipment+1]] [S[A.lighting+1]] [S[A.environ+1]] [add_lspace(DisplayPower(A.lastused_total), 6)] [A.cell ? "[add_lspace(round(A.cell.percent()), 3)]% [chg[A.charging+1]]" : " N/C"]
    " - - menu += "
    " - - if (44) //medical records //This thing only displays a single screen so it's hard to really get the sub-menu stuff working. - menu = "

    [PDAIMG(medical)] Medical Record List

    " - if(GLOB.data_core.general) - for(var/datum/data/record/R in sortRecord(GLOB.data_core.general)) - menu += "[R.fields["id"]]: [R.fields["name"]]
    " - menu += "
    " - if(441) - menu = "

    [PDAIMG(medical)] Medical Record

    " - - if(active1 in GLOB.data_core.general) - menu += "Name: [active1.fields["name"]] ID: [active1.fields["id"]]
    " - menu += "Gender: [active1.fields["gender"]]
    " - menu += "Age: [active1.fields["age"]]
    " - menu += "Rank: [active1.fields["rank"]]
    " - menu += "Fingerprint: [active1.fields["fingerprint"]]
    " - menu += "Physical Status: [active1.fields["p_stat"]]
    " - menu += "Mental Status: [active1.fields["m_stat"]]
    " - else - menu += "Record Lost!
    " - - menu += "
    " - - menu += "

    [PDAIMG(medical)] Medical Data

    " - if(active2 in GLOB.data_core.medical) - menu += "Blood Type: [active2.fields["blood_type"]]

    " - - menu += "Minor Disabilities: [active2.fields["mi_dis"]]
    " - menu += "Details: [active2.fields["mi_dis_d"]]

    " - - menu += "Major Disabilities: [active2.fields["ma_dis"]]
    " - menu += "Details: [active2.fields["ma_dis_d"]]

    " - - menu += "Allergies: [active2.fields["alg"]]
    " - menu += "Details: [active2.fields["alg_d"]]

    " - - menu += "Current Diseases: [active2.fields["cdi"]]
    " - menu += "Details: [active2.fields["cdi_d"]]

    " - - menu += "Important Notes: [active2.fields["notes"]]
    " - else - menu += "Record Lost!
    " - - menu += "
    " - if (45) //security records - menu = "

    [PDAIMG(cuffs)] Security Record List

    " - if(GLOB.data_core.general) - for (var/datum/data/record/R in sortRecord(GLOB.data_core.general)) - menu += "
    [R.fields["id"]]: [R.fields["name"]]
    " - - menu += "
    " - if(451) - menu = "

    [PDAIMG(cuffs)] Security Record

    " - - if(active1 in GLOB.data_core.general) - menu += "Name: [active1.fields["name"]] ID: [active1.fields["id"]]
    " - menu += "Gender: [active1.fields["gender"]]
    " - menu += "Age: [active1.fields["age"]]
    " - menu += "Rank: [active1.fields["rank"]]
    " - menu += "Fingerprint: [active1.fields["fingerprint"]]
    " - menu += "Physical Status: [active1.fields["p_stat"]]
    " - menu += "Mental Status: [active1.fields["m_stat"]]
    " - else - menu += "Record Lost!
    " - - menu += "
    " - - menu += "

    [PDAIMG(cuffs)] Security Data

    " - if(active3 in GLOB.data_core.security) - menu += "Criminal Status: [active3.fields["criminal"]]
    " - - menu += text("
    \nMinor Crimes:") - - menu +={" - - - - - -"} - for(var/datum/data/crime/c in active3.fields["mi_crim"]) - menu += "" - menu += "" - menu += "" - menu += "" - menu += "" - menu += "
    CrimeDetailsAuthorTime Added
    [c.crimeName][c.crimeDetails][c.author][c.time]
    " - - menu += text("
    \nMajor Crimes:") - - menu +={" - - - - - -"} - for(var/datum/data/crime/c in active3.fields["ma_crim"]) - menu += "" - menu += "" - menu += "" - menu += "" - menu += "" - menu += "
    CrimeDetailsAuthorTime Added
    [c.crimeName][c.crimeDetails][c.author][c.time]
    " - - menu += "
    \nImportant Notes:
    " - menu += "[active3.fields["notes"]]" - else - menu += "Record Lost!
    " - - menu += "
    " - - if (47) //quartermaster order records - menu = "

    [PDAIMG(crate)] Supply Record Interlink

    " - - menu += "
    Supply shuttle
    " - menu += "Location: " - switch(SSshuttle.supply.mode) - if(SHUTTLE_CALL) - menu += "Moving to " - if(!is_station_level(SSshuttle.supply.z)) - menu += "station" - else - menu += "CentCom" - menu += " ([SSshuttle.supply.timeLeft(600)] Mins)" - else - menu += "At " - if(!is_station_level(SSshuttle.supply.z)) - menu += "CentCom" - else - menu += "station" - menu += "
    Current approved orders:
      " - for(var/S in SSshuttle.shoppinglist) - var/datum/supply_order/SO = S - menu += "
    1. #[SO.id] - [SO.pack.name] approved by [SO.orderer] [SO.reason ? "([SO.reason])":""]
    2. " - menu += "
    " - - menu += "Current requests:
      " - for(var/S in SSshuttle.requestlist) - var/datum/supply_order/SO = S - menu += "
    1. #[SO.id] - [SO.pack.name] requested by [SO.orderer]
    2. " - menu += "
    Upgrade NOW to Space Parts & Space Vendors PLUS for full remote order control and inventory management." - - if (48) // quartermaster ore logs - menu = list("

    [PDAIMG(crate)] Ore Silo Logs

    ") - if (GLOB.ore_silo_default) - var/list/logs = GLOB.silo_access_logs[REF(GLOB.ore_silo_default)] - var/len = LAZYLEN(logs) - var/i = 0 - for(var/M in logs) - if (++i > 30) - menu += "(... older logs not shown ...)" - break - var/datum/ore_silo_log/entry = M - menu += "[len - i]. [entry.formatted]

    " - if(i == 0) - menu += "Nothing!" - else - menu += "No ore silo detected!" - menu = jointext(menu, "") - - if (49) //janitorial locator - menu = "

    [PDAIMG(bucket)] Persistent Custodial Object Locator

    " - - var/turf/cl = get_turf(src) - if (cl) - menu += "Current Orbital Location: \[[cl.x],[cl.y]\]" - - menu += "

    Located Mops:

    " - - var/ldat - for (var/obj/item/mop/M in world) - var/turf/ml = get_turf(M) - - if(ml) - if (ml.z != cl.z) - continue - var/direction = get_dir(src, M) - ldat += "Mop - \[[ml.x],[ml.y] ([uppertext(dir2text(direction))])\] - [M.reagents.total_volume ? "Wet" : "Dry"]
    " - - if (!ldat) - menu += "None" - else - menu += "[ldat]" - - menu += "

    Located Janitorial Cart:

    " - - ldat = null - for (var/obj/structure/janitorialcart/B in world) - var/turf/bl = get_turf(B) - - if(bl) - if (bl.z != cl.z) - continue - var/direction = get_dir(src, B) - ldat += "Cart - \[[bl.x],[bl.y] ([uppertext(dir2text(direction))])\] - Water level: [B.reagents.total_volume]/100
    " - - if (!ldat) - menu += "None" - else - menu += "[ldat]" - - menu += "

    Located Cleanbots:

    " - - ldat = null - for (var/mob/living/simple_animal/bot/cleanbot/B in GLOB.alive_mob_list) - var/turf/bl = get_turf(B) - - if(bl) - if (bl.z != cl.z) - continue - var/direction = get_dir(src, B) - ldat += "Cleanbot - \[[bl.x],[bl.y] ([uppertext(dir2text(direction))])\] - [B.on ? "Online" : "Offline"]
    " - - if (!ldat) - menu += "None" - else - menu += "[ldat]" - - else - menu += "ERROR: Unable to determine current location." - menu += "

    Refresh GPS Locator" - - if (53) // Newscaster - menu = "

    [PDAIMG(notes)] Newscaster Access

    " - menu += "
    Current Newsfeed: [current_channel ? current_channel : "None"]
    " - var/datum/newscaster/feed_channel/current - for(var/datum/newscaster/feed_channel/chan in GLOB.news_network.network_channels) - if (chan.channel_name == current_channel) - current = chan - if(!current) - menu += "
    ERROR : NO CHANNEL FOUND
    " - return menu - var/i = 1 - for(var/datum/newscaster/feed_message/msg in current.messages) - menu +="-[msg.returnBody(-1)]
    \[Story by [msg.returnAuthor(-1)]\]
    " - menu +="[msg.comments.len] comment[msg.comments.len > 1 ? "s" : ""]
    " - if(msg.img) - user << browse_rsc(msg.img, "tmp_photo[i].png") - menu +="
    " - i++ - for(var/datum/newscaster/feed_comment/comment in msg.comments) - menu +="[comment.body]
    [comment.author] [comment.time_stamp]
    " - menu += "
    Post Message" - - if (54) // Beepsky, Medibot, Floorbot, and Cleanbot access - menu = "

    [PDAIMG(medbot)] Bots Interlink

    " - bot_control() - if (55) // Emoji Guidebook for mimes - menu = "

    [PDAIMG(emoji)] Emoji Guidebook

    " - var/static/list/emoji_icon_states - var/static/emoji_table - if(!emoji_table) - var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/goonchat) - var/list/collate = list("
    ") - for(var/emoji in sortList(icon_states(icon('icons/emoji.dmi')))) - var/tag = sheet.icon_tag("emoji-[emoji]") - collate += "" - collate += "
    [emoji][tag]

    " - emoji_table = collate.Join() - - menu += "
    To use an emoji in a pda message, refer to the guide and add \":\" around the emoji. Your PDA supports the following emoji:
    " - menu += emoji_table - - if (99) //Newscaster message permission error - menu = "
    ERROR : NOT AUTHORIZED [host_pda.id ? "" : "- ID SLOT EMPTY"]
    " - - return menu - -/obj/item/cartridge/Topic(href, href_list) - ..() - - if(!usr.canUseTopic(src, !issilicon(usr))) - usr.unset_machine() - usr << browse(null, "window=pda") - return - - switch(href_list["choice"]) - if("Medical Records") - active1 = find_record("id", href_list["target"], GLOB.data_core.general) - if(active1) - active2 = find_record("id", href_list["target"], GLOB.data_core.medical) - host_pda.mode = 441 - if(!active2) - active1 = null - - if("Security Records") - active1 = find_record("id", href_list["target"], GLOB.data_core.general) - if(active1) - active3 = find_record("id", href_list["target"], GLOB.data_core.security) - host_pda.mode = 451 - if(!active3) - active1 = null - - if("Send Signal") - INVOKE_ASYNC(radio, TYPE_PROC_REF(/obj/item/integrated_signaler, send_activation)) - - if("Signal Frequency") - var/new_frequency = sanitize_frequency(radio.frequency + text2num(href_list["sfreq"])) - radio.set_frequency(new_frequency) - - if("Signal Code") - radio.code += text2num(href_list["scode"]) - radio.code = round(radio.code) - radio.code = min(100, radio.code) - radio.code = max(1, radio.code) - - if("Status") - switch(href_list["statdisp"]) - if("message") - post_status("message", message1, message2) - if("alert") - post_status("alert", href_list["alert"]) - if("setmsg1") - message1 = reject_bad_text(input("Line 1", "Enter Message Text", message1) as text|null, 40) - updateSelfDialog() - if("setmsg2") - message2 = reject_bad_text(input("Line 2", "Enter Message Text", message2) as text|null, 40) - updateSelfDialog() - else - post_status(href_list["statdisp"]) - if("Power Select") - var/pnum = text2num(href_list["target"]) - powmonitor = powermonitors[pnum] - host_pda.mode = 433 - - if("Supply Orders") - host_pda.mode =47 - - if("Newscaster Access") - host_pda.mode = 53 - - if("Newscaster Message") - var/host_pda_owner_name = host_pda.id ? "[host_pda.id.registered_name] ([host_pda.id.assignment])" : "Unknown" - var/message = host_pda.msg_input() - var/datum/newscaster/feed_channel/current - for(var/datum/newscaster/feed_channel/chan in GLOB.news_network.network_channels) - if (chan.channel_name == current_channel) - current = chan - if(current.locked && current.author != host_pda_owner_name) - host_pda.mode = 99 - host_pda.Topic(null,list("choice"="Refresh")) - return - GLOB.news_network.SubmitArticle(message,host_pda.owner,current_channel) - host_pda.Topic(null,list("choice"=num2text(host_pda.mode))) - return - - if("Newscaster Switch Channel") - current_channel = host_pda.msg_input() - host_pda.Topic(null,list("choice"=num2text(host_pda.mode))) - return - - //emoji previews - if(href_list["emoji"]) - var/parse = emoji_parse(":[href_list["emoji"]]:") - to_chat(usr, parse) - - //Bot control section! Viciously ripped from radios for being laggy and terrible. - if(href_list["op"]) - switch(href_list["op"]) - - if("control") - active_bot = locate(href_list["bot"]) in GLOB.bots_list - - if("botlist") - active_bot = null - if("summon") //Args are in the correct order, they are stated here just as an easy reminder. - active_bot.bot_control("summon", usr, host_pda.GetAccess()) - else //Forward all other bot commands to the bot itself! - active_bot.bot_control(href_list["op"], usr) - - if(href_list["mule"]) //MULEbots are special snowflakes, and need different args due to how they work. - var/mob/living/simple_animal/bot/mulebot/mule = active_bot - if (istype(mule)) - mule.bot_control(href_list["mule"], usr, pda=TRUE) - - if(!host_pda) - return - host_pda.attack_self(usr) - - -/obj/item/cartridge/proc/bot_control() - if(active_bot) - menu += "[active_bot]
    Status: ([PDAIMG(refresh)]refresh)
    " - menu += "Model: [active_bot.model]
    " - menu += "Location: [get_area(active_bot)]
    " - menu += "Mode: [active_bot.get_mode()]" - if(active_bot.allow_pai) - menu += "
    pAI: " - if(active_bot.paicard && active_bot.paicard.pai) - menu += "[active_bot.paicard.pai.name]" - if(active_bot.bot_core.allowed(usr)) - menu += " (eject)" - else - menu += "none" - - //MULEs! - if(active_bot.bot_type == MULE_BOT) - var/mob/living/simple_animal/bot/mulebot/MULE = active_bot - var/atom/Load = MULE.load - menu += "
    Current Load: [ !Load ? "none" : "[Load.name] (unload)" ]
    " - menu += "Destination: [MULE.destination ? MULE.destination : "None"] (set)
    " - menu += "Set ID: [MULE.suffix] Modify
    " - menu += "Power: [MULE.cell ? MULE.cell.percent() : 0]%
    " - menu += "Home: [!MULE.home_destination ? "none" : MULE.home_destination ]
    " - menu += "Delivery Reporting: [MULE.report_delivery ? "(On)": "(Off)"]
    " - menu += "Auto Return Home: [MULE.auto_return ? "(On)": "(Off)"]
    " - menu += "Auto Pickup Crate: [MULE.auto_pickup ? "(On)": "(Off)"]

    " //Hue. - - menu += "\[Stop\] " - menu += "\[Proceed\] " - menu += "\[Return Home\]
    " - - else - menu += "
    \[Stop Patrol\] " //patrolon - menu += "\[Start Patrol\] " //patroloff - menu += "\[Summon Bot\]
    " //summon - menu += "Keep an ID inserted to upload access codes upon summoning." - - menu += "
    [PDAIMG(back)]Return to bot list" - else - menu += "
    [PDAIMG(refresh)]Scan for active bots

    " - var/turf/current_turf = get_turf(src) - var/zlevel = current_turf.z - var/botcount = 0 - for(var/B in GLOB.bots_list) //Git da botz - var/mob/living/simple_animal/bot/Bot = B - if(!Bot.on || Bot.z != zlevel || Bot.remote_disabled || !(bot_access_flags & Bot.bot_type)) //Only non-emagged bots on the same Z-level are detected! - continue //Also, the PDA must have access to the bot type. - menu += "[Bot.name] ([Bot.get_mode()])
    " - botcount++ - if(!botcount) //No bots at all? Lame. - menu += "No bots found.
    " - return - - return menu - -//If the cartridge adds a special line to the top of the messaging app -/obj/item/cartridge/proc/message_header() - return "" - -//If the cartridge adds something to each potetial messaging target -/obj/item/cartridge/proc/message_special(obj/item/pda/target) - return "" - -//This is called for special abilities of cartridges -/obj/item/cartridge/proc/special(mob/living/user, list/params) diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm deleted file mode 100644 index dd6f76a322..0000000000 --- a/code/game/objects/items/devices/PDA/radio.dm +++ /dev/null @@ -1,38 +0,0 @@ -// Radio Cartridge, essentially a remote signaler with limited spectrum. -/obj/item/integrated_signaler - name = "\improper PDA radio module" - desc = "" - icon = 'icons/obj/module.dmi' - icon_state = "power_mod" - -/obj/item/integrated_signaler - var/frequency = FREQ_SIGNALER - var/code = DEFAULT_SIGNALER_CODE - var/last_transmission - var/datum/radio_frequency/radio_connection - -/obj/item/integrated_signaler/Destroy() - radio_connection = null - return ..() - -/obj/item/integrated_signaler/Initialize() - . = ..() - if (frequency < MIN_FREE_FREQ || frequency > MAX_FREE_FREQ) - frequency = sanitize_frequency(frequency) - set_frequency(frequency) - -/obj/item/integrated_signaler/proc/set_frequency(new_frequency) - frequency = new_frequency - radio_connection = SSradio.return_frequency(frequency) - -/obj/item/integrated_signaler/proc/send_activation() - if(last_transmission && world.time < (last_transmission + 5)) - return - last_transmission = world.time - - var/time = time2text(world.realtime,"hh:mm:ss") - var/turf/T = get_turf(src) - GLOB.lastsignalers.Add("[time] : [usr.key] used [src] @ location [AREACOORD(T)] : [format_frequency(frequency)]/[code]") - - var/datum/signal/signal = new(list("code" = code)) - radio_connection.post_signal(src, signal, filter = RADIO_SIGNALER) diff --git a/code/game/objects/items/devices/PDA/virus_cart.dm b/code/game/objects/items/devices/PDA/virus_cart.dm deleted file mode 100644 index d9d623e970..0000000000 --- a/code/game/objects/items/devices/PDA/virus_cart.dm +++ /dev/null @@ -1,106 +0,0 @@ -/obj/item/cartridge/virus - name = "Generic Virus PDA cart" - var/charges = 5 - -/obj/item/cartridge/virus/proc/send_virus(obj/item/pda/target, mob/living/U) - return - -/obj/item/cartridge/virus/message_header() - return "[charges] viral files left.
    " - -/obj/item/cartridge/virus/message_special(obj/item/pda/target) - if (!istype(loc, /obj/item/pda)) - return "" //Sanity check, this shouldn't be possible. - return " (
    *Send Virus*)" - -/obj/item/cartridge/virus/special(mob/living/user, list/params) - var/obj/item/pda/P = locate(params["target"]) in GLOB.PDAs //Leaving it alone in case it may do something useful, I guess. - send_virus(P,user) - -/obj/item/cartridge/virus/clown - name = "\improper Honkworks 5.0 cartridge" - icon_state = "cart-clown" - desc = "" - access = CART_CLOWN - -/obj/item/cartridge/virus/clown/send_virus(obj/item/pda/target, mob/living/U) - if(charges <= 0) - to_chat(U, "Out of charges.") - return - if(!isnull(target) && !target.toff) - charges-- - to_chat(U, "Virus Sent!") - target.honkamt = (rand(15,20)) - else - to_chat(U, "PDA not found.") - -/obj/item/cartridge/virus/mime - name = "\improper Gestur-O 1000 cartridge" - icon_state = "cart-mi" - access = CART_MIME - -/obj/item/cartridge/virus/mime/send_virus(obj/item/pda/target, mob/living/U) - if(charges <= 0) - to_chat(U, "Out of charges.") - return - if(!isnull(target) && !target.toff) - charges-- - to_chat(U, "Virus Sent!") - target.silent = TRUE - target.ttone = "silence" - else - to_chat(U, "PDA not found.") - -/obj/item/cartridge/virus/syndicate - name = "\improper Detomatix cartridge" - icon_state = "cart" - access = CART_REMOTE_DOOR - remote_door_id = "smindicate" //Make sure this matches the syndicate shuttle's shield/door id!! //don't ask about the name, testing. - charges = 4 - -/obj/item/cartridge/virus/syndicate/send_virus(obj/item/pda/target, mob/living/U) - if(charges <= 0) - to_chat(U, "Out of charges.") - return - if(!isnull(target) && !target.toff) - charges-- - var/difficulty = 0 - if(target.cartridge) - difficulty += BitCount(target.cartridge.access&(CART_MEDICAL | CART_SECURITY | CART_ENGINE | CART_CLOWN | CART_JANITOR | CART_MANIFEST)) - if(target.cartridge.access & CART_MANIFEST) - difficulty++ //if cartridge has manifest access it has extra snowflake difficulty - else - difficulty += 2 - if(SEND_SIGNAL(target, COMSIG_PDA_CHECK_DETONATE) & COMPONENT_PDA_NO_DETONATE || prob(difficulty * 15)) - U.show_message("An error flashes on your [src].", MSG_VISUAL) - else - log_bomber(U, "triggered a PDA explosion on", target, "[!is_special_character(U) ? "(TRIGGED BY NON-ANTAG)" : ""]") - U.show_message("Success!", MSG_VISUAL) - target.explode() - else - to_chat(U, "PDA not found.") - -/obj/item/cartridge/virus/frame - name = "\improper F.R.A.M.E. cartridge" - icon_state = "cart" - var/telecrystals = 0 - -/obj/item/cartridge/virus/frame/send_virus(obj/item/pda/target, mob/living/U) - if(charges <= 0) - to_chat(U, "Out of charges.") - return - if(!isnull(target) && !target.toff) - charges-- - var/lock_code = "[rand(100,999)] [pick(GLOB.phonetic_alphabet)]" - to_chat(U, "Virus Sent! The unlock code to the target is: [lock_code]") - var/datum/component/uplink/hidden_uplink = target.GetComponent(/datum/component/uplink) - if(!hidden_uplink) - hidden_uplink = target.AddComponent(/datum/component/uplink) - hidden_uplink.unlock_code = lock_code - else - hidden_uplink.hidden_crystals += hidden_uplink.telecrystals //Temporarially hide the PDA's crystals, so you can't steal telecrystals. - hidden_uplink.telecrystals = telecrystals - telecrystals = 0 - hidden_uplink.active = TRUE - else - to_chat(U, "PDA not found.") diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm deleted file mode 100644 index f23fad4383..0000000000 --- a/code/game/objects/items/devices/aicard.dm +++ /dev/null @@ -1,104 +0,0 @@ -/obj/item/aicard - name = "intelliCard" - desc = "" - icon = 'icons/obj/aicards.dmi' - icon_state = "aicard" // aicard-full - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - w_class = WEIGHT_CLASS_SMALL - slot_flags = ITEM_SLOT_BELT - item_flags = NOBLUDGEON - var/flush = FALSE - var/mob/living/silicon/ai/AI - -/obj/item/aicard/aitater - name = "intelliTater" - desc = "" - icon_state = "aitater" - -/obj/item/aicard/aispook - name = "intelliLantern" - desc = "" - icon_state = "aispook" - -/obj/item/aicard/suicide_act(mob/living/user) - user.visible_message("[user] is trying to upload [user.p_them()]self into [src]! That's not going to work out well!") - return BRUTELOSS - -/obj/item/aicard/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity || !target) - return - if(AI) //AI is on the card, implies user wants to upload it. - log_combat(user, AI, "uploaded", src, "to [target].") - target.transfer_ai(AI_TRANS_FROM_CARD, user, AI, src) - else //No AI on the card, therefore the user wants to download one. - target.transfer_ai(AI_TRANS_TO_CARD, user, null, src) - if(AI) - log_combat(user, AI, "carded", src) - update_icon() //Whatever happened, update the card's state (icon, name) to match. - -/obj/item/aicard/update_icon() - cut_overlays() - if(AI) - name = "[initial(name)] - [AI.name]" - if(AI.stat == DEAD) - icon_state = "[initial(icon_state)]-404" - else - icon_state = "[initial(icon_state)]-full" - if(!AI.control_disabled) - add_overlay("[initial(icon_state)]-on") - AI.cancel_camera() - else - name = initial(name) - icon_state = initial(icon_state) - -/obj/item/aicard/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "intellicard", name, 500, 500, master_ui, state) - ui.open() - -/obj/item/aicard/ui_data() - var/list/data = list() - if(AI) - data["name"] = AI.name - data["laws"] = AI.laws.get_law_list(include_zeroth = 1) - data["health"] = (AI.health + 100) / 2 - data["wireless"] = !AI.control_disabled //todo disabled->enabled - data["radio"] = AI.radio_enabled - data["isDead"] = AI.stat == DEAD - data["isBraindead"] = AI.client ? FALSE : TRUE - data["wiping"] = flush - return data - -/obj/item/aicard/ui_act(action,params) - if(..()) - return - switch(action) - if("wipe") - if(flush) - flush = FALSE - else - var/confirm = alert("Are you sure you want to wipe this card's memory?", name, "Yes", "No") - if(confirm == "Yes" && !..()) - flush = TRUE - if(AI && AI.loc == src) - to_chat(AI, "My core files are being wiped!") - while(AI.stat != DEAD && flush) - AI.adjustOxyLoss(5) - AI.updatehealth() - sleep(5) - flush = FALSE - . = TRUE - if("wireless") - AI.control_disabled = !AI.control_disabled - to_chat(AI, "[src]'s wireless port has been [AI.control_disabled ? "disabled" : "enabled"]!") - . = TRUE - if("radio") - AI.radio_enabled = !AI.radio_enabled - to_chat(AI, "My Subspace Transceiver has been [AI.radio_enabled ? "enabled" : "disabled"]!") - . = TRUE - update_icon() diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm deleted file mode 100644 index a153f27285..0000000000 --- a/code/game/objects/items/devices/camera_bug.dm +++ /dev/null @@ -1,309 +0,0 @@ - -#define BUGMODE_LIST 0 -#define BUGMODE_MONITOR 1 -#define BUGMODE_TRACK 2 - - - -/obj/item/camera_bug - name = "camera bug" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "camera_bug" - w_class = WEIGHT_CLASS_TINY - item_state = "camera_bug" - throw_speed = 4 - throw_range = 20 - item_flags = NOBLUDGEON - - var/obj/machinery/camera/current = null - - var/last_net_update = 0 - var/list/bugged_cameras = list() - - var/track_mode = BUGMODE_LIST - var/last_tracked = 0 - var/refresh_interval = 50 - - var/tracked_name = null - var/atom/tracking = null - - var/last_found = null - var/last_seen = null - -/obj/item/camera_bug/New() - ..() - START_PROCESSING(SSobj, src) - -/obj/item/camera_bug/Destroy() - get_cameras() - for(var/cam_tag in bugged_cameras) - var/obj/machinery/camera/camera = bugged_cameras[cam_tag] - if(camera.bug == src) - camera.bug = null - bugged_cameras = list() - if(tracking) - tracking = null - return ..() - -/obj/item/camera_bug/interact(mob/user) - ui_interact(user) - -/obj/item/camera_bug/ui_interact(mob/user = usr) - . = ..() - var/datum/browser/popup = new(user, "camerabug","Camera Bug",nref=src) - popup.set_content(menu(get_cameras())) - popup.open() - -/obj/item/camera_bug/attack_self(mob/user) - user.set_machine(src) - interact(user) - -/obj/item/camera_bug/check_eye(mob/user) - if ( loc != user || user.incapacitated() || user.eye_blind || !current ) - user.unset_machine() - return 0 - var/turf/T_user = get_turf(user.loc) - var/turf/T_current = get_turf(current) - if(T_user.z != T_current.z || !current.can_use()) - to_chat(user, "[src] has lost the signal.") - current = null - user.unset_machine() - return 0 - return 1 -/obj/item/camera_bug/on_unset_machine(mob/user) - user.reset_perspective(null) - -/obj/item/camera_bug/proc/get_cameras() - if( world.time > (last_net_update + 100)) - bugged_cameras = list() - for(var/obj/machinery/camera/camera in GLOB.cameranet.cameras) - if(camera.stat || !camera.can_use()) - continue - if(length(list("ss13","mine", "rd", "labor", "toxins", "minisat")&camera.network)) - bugged_cameras[camera.c_tag] = camera - return sortList(bugged_cameras) - - -/obj/item/camera_bug/proc/menu(list/cameras) - if(!cameras || !cameras.len) - return "No bugged cameras found." - - var/html - switch(track_mode) - if(BUGMODE_LIST) - html = "

    Select a camera:

    \[Cancel camera view\]
    " - for(var/entry in cameras) - var/obj/machinery/camera/C = cameras[entry] - var/functions = "" - if(C.bug == src) - functions = " - \[Monitor\]\[Disable\]" - else - functions = " - \[Monitor\]" - html += "" - - if(BUGMODE_MONITOR) - if(current) - html = "Analyzing Camera '[current.c_tag]' \[Select Camera\]
    " - html += camera_report() - else - track_mode = BUGMODE_LIST - return .(cameras) - if(BUGMODE_TRACK) - if(tracking) - html = "Tracking '[tracked_name]' \[Cancel Tracking\]\[Cancel camera view\]
    " - if(last_found) - var/time_diff = round((world.time - last_seen) / 150) - var/obj/machinery/camera/C = bugged_cameras[last_found] - var/outstring - if(C) - outstring = "[last_found]" - else - outstring = last_found - if(!time_diff) - html += "Last seen near [outstring] (now)
    " - else - // 15 second intervals ~ 1/4 minute - var/m = round(time_diff/4) - var/s = (time_diff - 4*m) * 15 - if(!s) - s = "00" - html += "Last seen near [outstring] ([m]:[s] minute\s ago)
    " - if( C && (C.bug == src)) //Checks to see if the camera has a bug - html += "\[Disable\]" - - else - html += "Not yet seen." - else - track_mode = BUGMODE_LIST - return .(cameras) - return html - -/obj/item/camera_bug/proc/get_seens() - if(current && current.can_use()) - var/list/seen = current.can_see() - return seen - -/obj/item/camera_bug/proc/camera_report() - // this should only be called if current exists - var/dat = "" - var/list/seen = get_seens() - if(seen && seen.len >= 1) - var/list/names = list() - for(var/obj/singularity/S in seen) // god help you if you see more than one - if(S.name in names) - names[S.name]++ - dat += "[S.name] ([names[S.name]])" - else - names[S.name] = 1 - dat += "[S.name]" - var/stage = round(S.current_size / 2)+1 - dat += " (Stage [stage])" - dat += " \[Track\]
    " - - for(var/obj/mecha/M in seen) - if(M.name in names) - names[M.name]++ - dat += "[M.name] ([names[M.name]])" - else - names[M.name] = 1 - dat += "[M.name]" - dat += " \[Track\]
    " - - - for(var/mob/living/M in seen) - if(M.name in names) - names[M.name]++ - dat += "[M.name] ([names[M.name]])" - else - names[M.name] = 1 - dat += "[M.name]" - if(!(M.mobility_flags & MOBILITY_STAND)) - if(M.buckled) - dat += " (Sitting)" - else - dat += " (Laying down)" - dat += " \[Track\]
    " - if(length(dat) == 0) - dat += "No motion detected." - return dat - else - return "Camera Offline
    " - -/obj/item/camera_bug/Topic(href,list/href_list) - if(usr != loc) - usr.unset_machine() - usr << browse(null, "window=camerabug") - return - usr.set_machine(src) - if("mode" in href_list) - track_mode = text2num(href_list["mode"]) - if("monitor" in href_list) - //You can't locate on a list with keys - var/list/cameras = flatten_list(bugged_cameras) - var/obj/machinery/camera/C = locate(href_list["monitor"]) in cameras - if(C && istype(C)) - if(!same_z_level(C)) - return - track_mode = BUGMODE_MONITOR - current = C - usr.reset_perspective(null) - interact() - if("track" in href_list) - var/list/seen = get_seens() - if(seen && seen.len >= 1) - var/atom/A = locate(href_list["track"]) in seen - if(A && istype(A)) - tracking = A - tracked_name = A.name - last_found = current.c_tag - last_seen = world.time - track_mode = BUGMODE_TRACK - if("emp" in href_list) - //You can't locate on a list with keys - var/list/cameras = flatten_list(bugged_cameras) - var/obj/machinery/camera/C = locate(href_list["emp"]) in cameras - if(C && istype(C) && C.bug == src) - if(!same_z_level(C)) - return - C.emp_act(EMP_HEAVY) - C.bug = null - bugged_cameras -= C.c_tag - interact() - return - if("close" in href_list) - usr.unset_machine() - current = null - return - if("view" in href_list) - //You can't locate on a list with keys - var/list/cameras = flatten_list(bugged_cameras) - var/obj/machinery/camera/C = locate(href_list["view"]) in cameras - if(C && istype(C)) - if(!same_z_level(C)) - return - if(!C.can_use()) - to_chat(usr, "Something's wrong with that camera! You can't get a feed.") - return - current = C - spawn(6) - if(src.check_eye(usr)) - usr.reset_perspective(C) - interact() - else - usr.unset_machine() - usr << browse(null, "window=camerabug") - return - else - usr.unset_machine() - - interact() - -/obj/item/camera_bug/process() - if(track_mode == BUGMODE_LIST || (world.time < (last_tracked + refresh_interval))) - return - last_tracked = world.time - if(track_mode == BUGMODE_TRACK ) // search for user - // Note that it will be tricked if your name appears to change. - // This is not optimal but it is better than tracking you relentlessly despite everything. - if(!tracking) - src.updateSelfDialog() - return - - if(tracking.name != tracked_name) // Hiding their identity, tricksy - var/mob/M = tracking - if(istype(M)) - if(!(tracked_name == "Unknown" && findtext(tracking.name,"Unknown"))) // we saw then disguised before - if(!(tracked_name == M.real_name && findtext(tracking.name,M.real_name))) // or they're still ID'd - src.updateSelfDialog()//But if it's neither of those cases - return // you won't find em on the cameras - else - src.updateSelfDialog() - return - - var/list/tracking_cams = list() - var/list/b_cams = get_cameras() - for(var/entry in b_cams) - tracking_cams += b_cams[entry] - var/list/target_region = view(tracking) - - for(var/obj/machinery/camera/C in (target_region & tracking_cams)) - if(!can_see(C,tracking)) // target may have xray, that doesn't make them visible to cameras - continue - if(C.can_use()) - last_found = C.c_tag - last_seen = world.time - break - src.updateSelfDialog() - -/obj/item/camera_bug/proc/same_z_level(obj/machinery/camera/C) - var/turf/T_cam = get_turf(C) - var/turf/T_bug = get_turf(loc) - if(!T_bug || T_cam.z != T_bug.z) - to_chat(usr, "I can't get a signal!") - return FALSE - return TRUE - -#undef BUGMODE_LIST -#undef BUGMODE_MONITOR -#undef BUGMODE_TRACK diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index bfae670f6a..e400593c2a 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -142,9 +142,6 @@ /obj/effect/dummy/chameleon/attack_slime() master.disrupt() -/obj/effect/dummy/chameleon/attack_alien() - master.disrupt() - /obj/effect/dummy/chameleon/ex_act(S, T) contents_explosion(S, T) master.disrupt() diff --git a/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm b/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm deleted file mode 100644 index 363d9e66c1..0000000000 --- a/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm +++ /dev/null @@ -1,65 +0,0 @@ -//Used by engineering cyborgs in place of generic circuits. -/obj/item/electroadaptive_pseudocircuit - name = "electroadaptive pseudocircuit" - desc = "" - icon = 'icons/obj/module.dmi' - icon_state = "boris" - w_class = WEIGHT_CLASS_TINY - custom_materials = list(/datum/material/iron = 50, /datum/material/glass = 300) - var/recharging = FALSE - var/circuits = 5 //How many circuits the pseudocircuit has left - var/static/recycleable_circuits = typecacheof(list(/obj/item/electronics/firelock, /obj/item/electronics/airalarm, /obj/item/electronics/firealarm, \ - /obj/item/electronics/apc))//A typecache of circuits consumable for material - -/obj/item/electroadaptive_pseudocircuit/Initialize() - . = ..() - maptext = "[circuits]" - -/obj/item/electroadaptive_pseudocircuit/examine(mob/user) - . = ..() - if(iscyborg(user)) - . += "It has material for [circuits] circuit[circuits == 1 ? "" : "s"]. Use the pseudocircuit on existing circuits to gain material.\n"+\ - "Serves as a substitute for fire/air alarm, firelock, and APC electronics.\n"+\ - "It can also be used on an APC with no power cell to fabricate a low-capacity cell at a high power cost." - -/obj/item/electroadaptive_pseudocircuit/proc/adapt_circuit(mob/living/silicon/robot/R, circuit_cost = 0) - if(QDELETED(R) || !istype(R)) - return - if(!R.cell) - to_chat(R, "I need a power cell installed for that.") - return - if(!R.cell.use(circuit_cost)) - to_chat(R, "I don't have the energy for that (you need [DisplayEnergy(circuit_cost)].)") - return - if(recharging) - to_chat(R, "[src] needs some time to recharge first.") - return - if(!circuits) - to_chat(R, "I need more material. Use [src] on existing simple circuits to break them down.") - return - playsound(R, 'sound/blank.ogg', 50, TRUE) - recharging = TRUE - circuits-- - maptext = "[circuits]" - icon_state = "[initial(icon_state)]_recharging" - var/recharge_time = min(600, circuit_cost * 5) //40W of cost for one fabrication = 20 seconds of recharge time; this is to prevent spamming - addtimer(CALLBACK(src, PROC_REF(recharge)), recharge_time) - return TRUE //The actual circuit magic itself is done on a per-object basis - -/obj/item/electroadaptive_pseudocircuit/afterattack(atom/target, mob/living/user, proximity) - . = ..() - if(!proximity) - return - if(!is_type_in_typecache(target, recycleable_circuits)) - return - circuits++ - maptext = "[circuits]" - user.visible_message("User breaks down [target] with [src].", \ - "I recycle [target] into [src]. It now has material for [circuits] circuits.") - playsound(user, 'sound/blank.ogg', 50, TRUE) - qdel(target) - -/obj/item/electroadaptive_pseudocircuit/proc/recharge() - playsound(src, 'sound/blank.ogg', 25, TRUE) - recharging = FALSE - icon_state = initial(icon_state) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 10f6019680..1535051187 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -9,13 +9,14 @@ righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' w_class = WEIGHT_CLASS_SMALL flags_1 = null + light_system = MOVABLE_LIGHT + light_outer_range = 5 + light_power = 1 slot_flags = ITEM_SLOT_BELT possible_item_intents = list(INTENT_GENERIC) custom_materials = list(/datum/material/iron=50, /datum/material/glass=20) // actions_types = list(/datum/action/item_action/toggle_light) var/on = FALSE - var/brightness_on = 40 //range of light when on - var/flashlight_power = 1 //strength of the light when on /obj/item/flashlight/Initialize() . = ..() @@ -26,13 +27,9 @@ /obj/item/flashlight/proc/update_brightness(mob/user = null) if(on) icon_state = "[initial(icon_state)]-on" - if(flashlight_power) - set_light(l_range = brightness_on, l_power = flashlight_power) - else - set_light(brightness_on) else icon_state = initial(icon_state) - set_light(0) + set_light_on(on) /obj/item/flashlight/attack_self(mob/user) on = !on @@ -169,7 +166,7 @@ icon_state = "penlight" item_state = "" flags_1 = CONDUCT_1 - brightness_on = 2 + light_outer_range = 2 var/holo_cooldown = 0 /obj/item/flashlight/pen/afterattack(atom/target, mob/user, proximity_flag) @@ -205,7 +202,7 @@ lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' force = 9 // Not as good as a stun baton. - brightness_on = 5 // A little better than the standard flashlight. + light_outer_range = 5 // A little better than the standard flashlight. hitsound = 'sound/blank.ogg' // the desk lamps are a bit special @@ -217,7 +214,7 @@ lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' righthand_file = 'icons/mob/inhands/items_righthand.dmi' force = 10 - brightness_on = 5 + light_outer_range = 5 w_class = WEIGHT_CLASS_BULKY flags_1 = CONDUCT_1 custom_materials = null @@ -253,7 +250,7 @@ name = "flare" desc = "" w_class = WEIGHT_CLASS_SMALL - brightness_on = 7 // Pretty bright. + light_outer_range = 7 // Pretty bright. icon_state = "flare" item_state = "flare" actions_types = list() @@ -323,14 +320,14 @@ name = "torch" desc = "" w_class = WEIGHT_CLASS_NORMAL - brightness_on = 6 + light_outer_range = 6 force = 1 icon = 'icons/roguetown/items/lighting.dmi' icon_state = "torch" item_state = "torch" lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' righthand_file = 'icons/mob/inhands/items_righthand.dmi' - light_color = "#da8c45" + light_color = "#f19d30" on_damage = 2 flags_1 = null possible_item_intents = list(/datum/intent/hit, /datum/intent/use) @@ -353,7 +350,7 @@ /obj/item/flashlight/flare/torch/Initialize() . = ..() - soundloop = new(list(src), FALSE) + soundloop = new(src, FALSE) /obj/item/flashlight/flare/torch/process() open_flame(heat) @@ -449,7 +446,7 @@ name = "torch" force = 1 icon_state = "mtorch" - brightness_on = 6 + light_outer_range = 6 fuel = 120 MINUTES should_self_destruct = TRUE @@ -473,7 +470,7 @@ name = "lamptern" icon_state = "lamp" desc = "A light to guide the way." - brightness_on = 7 + light_outer_range = 7 on = FALSE flags_1 = CONDUCT_1 slot_flags = ITEM_SLOT_HIP @@ -515,7 +512,7 @@ name = "copper lamptern" icon_state = "clamp" desc = "A simple and cheap lamptern." - brightness_on = 7 + light_outer_range = 7 on = FALSE flags_1 = CONDUCT_1 slot_flags = ITEM_SLOT_HIP @@ -541,21 +538,21 @@ lefthand_file = 'icons/mob/inhands/equipment/mining_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/mining_righthand.dmi' desc = "" - brightness_on = 6 // luminosity when on + light_outer_range = 6 // luminosity when on /obj/item/flashlight/lantern/heirloom_moth name = "old lantern" desc = "" - brightness_on = 4 + light_outer_range = 4 /obj/item/flashlight/lantern/syndicate name = "suspicious lantern" desc = "" icon_state = "syndilantern" item_state = "syndilantern" - brightness_on = 10 + light_outer_range = 10 /obj/item/flashlight/slime gender = PLURAL @@ -567,7 +564,7 @@ w_class = WEIGHT_CLASS_SMALL slot_flags = ITEM_SLOT_BELT custom_materials = null - brightness_on = 6 //luminosity when on + light_outer_range = 6 //luminosity when on /obj/item/flashlight/emp var/emp_max_charges = 4 @@ -628,7 +625,7 @@ desc = "" custom_price = 10 w_class = WEIGHT_CLASS_SMALL - brightness_on = 4 + light_outer_range = 4 color = LIGHT_COLOR_GREEN icon_state = "glowstick" item_state = "glowstick" @@ -667,7 +664,7 @@ glowstick_overlay.color = color add_overlay(glowstick_overlay) item_state = "glowstick-on" - set_light(brightness_on) + set_light(light_outer_range) else icon_state = "glowstick" cut_overlays() @@ -735,8 +732,8 @@ desc = "" icon_state = null light_color = null - brightness_on = 0 - light_range = 0 + light_outer_range = 0 + light_outer_range = 0 light_power = 10 alpha = 0 layer = 0 @@ -744,20 +741,3 @@ anchored = TRUE var/range = null resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - -/obj/item/flashlight/flashdark - name = "flashdark" - desc = "" - icon_state = "flashdark" - item_state = "flashdark" - brightness_on = 2.5 - flashlight_power = -3 - -/obj/item/flashlight/eyelight - name = "eyelight" - desc = "" - brightness_on = 15 - flashlight_power = 1 - flags_1 = CONDUCT_1 - item_flags = DROPDEL - actions_types = list() diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm index 6ca01e806c..7640f045e7 100644 --- a/code/game/objects/items/devices/geiger_counter.dm +++ b/code/game/objects/items/devices/geiger_counter.dm @@ -21,7 +21,7 @@ custom_materials = list(/datum/material/iron = 150, /datum/material/glass = 150) var/grace = RAD_GRACE_PERIOD - var/datum/looping_sound/geiger/soundloop +// var/datum/looping_sound/geiger/soundloop var/scanning = FALSE var/radiation_count = 0 @@ -34,7 +34,7 @@ . = ..() START_PROCESSING(SSobj, src) - soundloop = new(list(src), FALSE) +// soundloop = new(src, FALSE) /obj/item/geiger_counter/Destroy() STOP_PROCESSING(SSobj, src) @@ -109,15 +109,15 @@ ..() /obj/item/geiger_counter/proc/update_sound() - var/datum/looping_sound/geiger/loop = soundloop +// var/datum/looping_sound/geiger/loop = soundloop if(!scanning) - loop.stop() +// loop.stop() return if(!radiation_count) - loop.stop() +// loop.stop() return - loop.last_radiation = radiation_count - loop.start() +// loop.last_radiation = radiation_count +// loop.start() /obj/item/geiger_counter/rad_act(amount) . = ..() @@ -200,34 +200,6 @@ to_chat(user, "I override [src]'s radiation storing protocols. It will now generate small doses of radiation, and stored rads are now projected into creatures you scan.") obj_flags |= EMAGGED - - -/obj/item/geiger_counter/cyborg - var/mob/listeningTo - -/obj/item/geiger_counter/cyborg/cyborg_unequip(mob/user) - if(!scanning) - return - scanning = FALSE - update_icon() - -/obj/item/geiger_counter/cyborg/equipped(mob/user) - . = ..() - if(listeningTo == user) - return - if(listeningTo) - UnregisterSignal(listeningTo, COMSIG_ATOM_RAD_ACT) - RegisterSignal(user, COMSIG_ATOM_RAD_ACT, PROC_REF(redirect_rad_act)) - listeningTo = user - -/obj/item/geiger_counter/cyborg/proc/redirect_rad_act(datum/source, amount) - rad_act(amount) - -/obj/item/geiger_counter/cyborg/dropped() - . = ..() - if(listeningTo) - UnregisterSignal(listeningTo, COMSIG_ATOM_RAD_ACT) - #undef RAD_LEVEL_NORMAL #undef RAD_LEVEL_MODERATE #undef RAD_LEVEL_HIGH diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm deleted file mode 100644 index b5be7d1a37..0000000000 --- a/code/game/objects/items/devices/laserpointer.dm +++ /dev/null @@ -1,196 +0,0 @@ -/obj/item/laser_pointer - name = "laser pointer" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "pointer" - item_state = "pen" - var/pointer_icon_state - flags_1 = CONDUCT_1 - item_flags = NOBLUDGEON - slot_flags = ITEM_SLOT_BELT - custom_materials = list(/datum/material/iron=500, /datum/material/glass=500) - w_class = WEIGHT_CLASS_SMALL - var/turf/pointer_loc - var/energy = 10 - var/max_energy = 10 - var/effectchance = 30 - var/recharging = 0 - var/recharge_locked = FALSE - var/obj/item/stock_parts/micro_laser/diode //used for upgrading! - - -/obj/item/laser_pointer/red - pointer_icon_state = "red_laser" -/obj/item/laser_pointer/green - pointer_icon_state = "green_laser" -/obj/item/laser_pointer/blue - pointer_icon_state = "blue_laser" -/obj/item/laser_pointer/purple - pointer_icon_state = "purple_laser" - -/obj/item/laser_pointer/Initialize() - . = ..() - diode = new(src) - if(!pointer_icon_state) - pointer_icon_state = pick("red_laser","green_laser","blue_laser","purple_laser") - -/obj/item/laser_pointer/upgraded/Initialize() - . = ..() - diode = new /obj/item/stock_parts/micro_laser/ultra - -/obj/item/laser_pointer/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/stock_parts/micro_laser)) - if(!diode) - if(!user.transferItemToLoc(W, src)) - return - diode = W - to_chat(user, "I install a [diode.name] in [src].") - else - to_chat(user, "[src] already has a diode installed!") - - else if(W.tool_behaviour == TOOL_SCREWDRIVER) - if(diode) - to_chat(user, "I remove the [diode.name] from \the [src].") - diode.forceMove(drop_location()) - diode = null - else - return ..() - -/obj/item/laser_pointer/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - if(!diode) - . += "The diode is missing." - else - . += "A class [diode.rating] laser diode is installed. It is screwed in place." - -/obj/item/laser_pointer/afterattack(atom/target, mob/living/user, flag, params) - . = ..() - laser_act(target, user, params) - -/obj/item/laser_pointer/proc/laser_act(atom/target, mob/living/user, params) - if( !(user in (viewers(7,target))) ) - return - if (!diode) - to_chat(user, "I point [src] at [target], but nothing happens!") - return - if (!user.IsAdvancedToolUser()) - to_chat(user, "I don't have the dexterity to do this!") - return - if(HAS_TRAIT(user, TRAIT_CHUNKYFINGERS)) - to_chat(user, "My fingers can't press the button!") - return - add_fingerprint(user) - - //nothing happens if the battery is drained - if(recharge_locked) - to_chat(user, "I point [src] at [target], but it's still charging.") - return - - var/outmsg - var/turf/targloc = get_turf(target) - - //human/alien mobs - if(iscarbon(target)) - var/mob/living/carbon/C = target - if(user.zone_selected == BODY_ZONE_PRECISE_R_EYE) - - var/severity = 1 - if(prob(33)) - severity = 2 - else if(prob(50)) - severity = 0 - - //chance to actually hit the eyes depends on internal component - if(prob(effectchance * diode.rating) && C.flash_act(severity)) - outmsg = "I blind [C] by shining [src] in [C.p_their()] eyes." - log_combat(user, C, "blinded with a laser pointer",src) - else - outmsg = "I fail to blind [C] by shining [src] at [C.p_their()] eyes!" - log_combat(user, C, "attempted to blind with a laser pointer",src) - - //robots - else if(iscyborg(target)) - var/mob/living/silicon/S = target - log_combat(user, S, "shone in the sensors", src) - //chance to actually hit the eyes depends on internal component - if(prob(effectchance * diode.rating)) - S.flash_act(affect_silicon = 1) - S.Paralyze(rand(100,200)) - to_chat(S, "My sensors were overloaded by a laser!") - outmsg = "I overload [S] by shining [src] at [S.p_their()] sensors." - else - outmsg = "I fail to overload [S] by shining [src] at [S.p_their()] sensors!" - - //cameras - else if(istype(target, /obj/machinery/camera)) - var/obj/machinery/camera/C = target - if(prob(effectchance * diode.rating)) - C.emp_act(EMP_HEAVY) - outmsg = "I hit the lens of [C] with [src], temporarily disabling the camera!" - log_combat(user, C, "EMPed", src) - else - outmsg = "I miss the lens of [C] with [src]!" - - //catpeople - for(var/mob/living/carbon/human/H in view(1,targloc)) - if(!isfelinid(H) || H.incapacitated() || H.eye_blind ) - continue - if(user.mobility_flags & MOBILITY_STAND) - H.setDir(get_dir(H,targloc)) // kitty always looks at the light - if(prob(effectchance * diode.rating)) - H.visible_message("[H] makes a grab for the light!","LIGHT!") - H.Move(targloc) - log_combat(user, H, "moved with a laser pointer",src) - else - H.visible_message("[H] looks briefly distracted by the light.", "You're briefly tempted by the shiny light...") - else - H.visible_message("[H] stares at the light.", "I stare at the light...") - - //cats! - for(var/mob/living/simple_animal/pet/cat/C in view(1,targloc)) - if(prob(effectchance * diode.rating)) - C.visible_message("[C] pounces on the light!","LIGHT!") - C.Move(targloc) - C.set_resting(TRUE, FALSE) - else - C.visible_message("[C] looks uninterested in my games.","I spot [user] shining [src] at you. How insulting!") - - //laser pointer image - icon_state = "pointer_[pointer_icon_state]" - var/image/I = image('icons/obj/projectiles.dmi',targloc,pointer_icon_state,10) - var/list/click_params = params2list(params) - if(click_params) - if(click_params["icon-x"]) - I.pixel_x = (text2num(click_params["icon-x"]) - 16) - if(click_params["icon-y"]) - I.pixel_y = (text2num(click_params["icon-y"]) - 16) - else - I.pixel_x = target.pixel_x + rand(-5,5) - I.pixel_y = target.pixel_y + rand(-5,5) - - if(outmsg) - to_chat(user, outmsg) - else - to_chat(user, "I point [src] at [target].") - - energy -= 1 - if(energy <= max_energy) - if(!recharging) - recharging = 1 - START_PROCESSING(SSobj, src) - if(energy <= 0) - to_chat(user, "[src]'s battery is overused, it needs time to recharge!") - recharge_locked = TRUE - - flick_overlay_view(I, targloc, 10) - icon_state = "pointer" - -/obj/item/laser_pointer/process() - if(prob(20 + diode.rating*20 - recharge_locked*2)) //t1 is 20, 2 40 - energy += 1 - if(energy >= max_energy) - energy = max_energy - recharging = 0 - recharge_locked = FALSE - ..() diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm deleted file mode 100644 index c3ce083c76..0000000000 --- a/code/game/objects/items/devices/multitool.dm +++ /dev/null @@ -1,175 +0,0 @@ -#define PROXIMITY_NONE "" -#define PROXIMITY_ON_SCREEN "_red" -#define PROXIMITY_NEAR "_yellow" - -/** - * Multitool -- A multitool is used for hacking electronic devices. - * - */ - - - - -/obj/item/multitool - name = "multitool" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "multitool" - item_state = "multitool" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - force = 5 - w_class = WEIGHT_CLASS_SMALL - tool_behaviour = TOOL_MULTITOOL - throwforce = 0 - throw_range = 7 - throw_speed = 1 - drop_sound = 'sound/blank.ogg' - pickup_sound = 'sound/blank.ogg' - custom_materials = list(/datum/material/iron=50, /datum/material/glass=20) - var/obj/machinery/buffer // simple machine buffer for device linkage - toolspeed = 1 - usesound = 'sound/blank.ogg' - var/mode = 0 - -/obj/item/multitool/examine(mob/user) - . = ..() - . += "Its buffer [buffer ? "contains [buffer]." : "is empty."]" - -/obj/item/multitool/suicide_act(mob/living/carbon/user) - user.visible_message("[user] puts the [src] to [user.p_their()] chest. It looks like [user.p_theyre()] trying to pulse [user.p_their()] heart off!") - return OXYLOSS//theres a reason it wasnt recommended by doctors - - -// Syndicate device disguised as a multitool; it will turn red when an AI camera is nearby. - -/obj/item/multitool/ai_detect - var/track_cooldown = 0 - var/track_delay = 10 //How often it checks for proximity - var/detect_state = PROXIMITY_NONE - var/rangealert = 8 //Glows red when inside - var/rangewarning = 20 //Glows yellow when inside - var/hud_type = DATA_HUD_AI_DETECT - var/hud_on = FALSE - var/mob/camera/aiEye/remote/ai_detector/eye - var/datum/action/item_action/toggle_multitool/toggle_action - -/obj/item/multitool/ai_detect/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - eye = new /mob/camera/aiEye/remote/ai_detector() - toggle_action = new /datum/action/item_action/toggle_multitool(src) - -/obj/item/multitool/ai_detect/Destroy() - STOP_PROCESSING(SSobj, src) - if(hud_on && ismob(loc)) - remove_hud(loc) - QDEL_NULL(toggle_action) - QDEL_NULL(eye) - return ..() - -/obj/item/multitool/ai_detect/ui_action_click() - return - -/obj/item/multitool/ai_detect/equipped(mob/living/carbon/human/user, slot) - ..() - if(hud_on) - show_hud(user) - -/obj/item/multitool/ai_detect/dropped(mob/living/carbon/human/user) - ..() - if(hud_on) - remove_hud(user) - -/obj/item/multitool/ai_detect/process() - if(track_cooldown > world.time) - return - detect_state = PROXIMITY_NONE - if(eye.eye_user) - eye.setLoc(get_turf(src)) - multitool_detect() - update_icon() - track_cooldown = world.time + track_delay - -/obj/item/multitool/ai_detect/proc/toggle_hud(mob/user) - hud_on = !hud_on - if(user) - to_chat(user, "I toggle the ai detection HUD on [src] [hud_on ? "on" : "off"].") - if(hud_on) - show_hud(user) - else - remove_hud(user) - -/obj/item/multitool/ai_detect/proc/show_hud(mob/user) - if(user && hud_type) - var/atom/movable/screen/plane_master/camera_static/PM = user.hud_used.plane_masters["[CAMERA_STATIC_PLANE]"] - PM.alpha = 150 - var/datum/atom_hud/H = GLOB.huds[hud_type] - if(!H.hudusers[user]) - H.add_hud_to(user) - eye.eye_user = user - eye.setLoc(get_turf(src)) - -/obj/item/multitool/ai_detect/proc/remove_hud(mob/user) - if(user && hud_type) - var/atom/movable/screen/plane_master/camera_static/PM = user.hud_used.plane_masters["[CAMERA_STATIC_PLANE]"] - PM.alpha = 255 - var/datum/atom_hud/H = GLOB.huds[hud_type] - H.remove_hud_from(user) - if(eye) - eye.setLoc(null) - eye.eye_user = null - -/obj/item/multitool/ai_detect/proc/multitool_detect() - var/turf/our_turf = get_turf(src) - for(var/mob/living/silicon/ai/AI in GLOB.ai_list) - if(AI.cameraFollow == src) - detect_state = PROXIMITY_ON_SCREEN - break - - if(detect_state) - return - var/datum/camerachunk/chunk = GLOB.cameranet.chunkGenerated(our_turf.x, our_turf.y, our_turf.z) - if(chunk && chunk.seenby.len) - for(var/mob/camera/aiEye/A in chunk.seenby) - if(!A.ai_detector_visible) - continue - var/turf/detect_turf = get_turf(A) - if(get_dist(our_turf, detect_turf) < rangealert) - detect_state = PROXIMITY_ON_SCREEN - break - if(get_dist(our_turf, detect_turf) < rangewarning) - detect_state = PROXIMITY_NEAR - break - -/mob/camera/aiEye/remote/ai_detector - name = "AI detector eye" - ai_detector_visible = FALSE - use_static = USE_STATIC_TRANSPARENT - visible_icon = FALSE - -/datum/action/item_action/toggle_multitool - name = "Toggle AI detector HUD" - check_flags = NONE - -/datum/action/item_action/toggle_multitool/Trigger() - if(!..()) - return 0 - if(target) - var/obj/item/multitool/ai_detect/M = target - M.toggle_hud(owner) - return 1 - -/obj/item/multitool/abductor - name = "alien multitool" - desc = "" - icon = 'icons/obj/abductor.dmi' - icon_state = "multitool" - toolspeed = 0.1 - -/obj/item/multitool/cyborg - name = "electronic multitool" - desc = "" - icon = 'icons/obj/items_cyborg.dmi' - icon_state = "multitool_cyborg" - toolspeed = 0.5 diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm deleted file mode 100644 index 35b91581ed..0000000000 --- a/code/game/objects/items/devices/paicard.dm +++ /dev/null @@ -1,174 +0,0 @@ -/obj/item/paicard - name = "personal AI device" - icon = 'icons/obj/aicards.dmi' - icon_state = "pai" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - w_class = WEIGHT_CLASS_SMALL - slot_flags = ITEM_SLOT_BELT - var/mob/living/silicon/pai/pai - resistance_flags = FIRE_PROOF | ACID_PROOF | INDESTRUCTIBLE - -/obj/item/paicard/suicide_act(mob/living/user) - user.visible_message("[user] is staring sadly at [src]! [user.p_they()] can't keep living without real human intimacy!") - return OXYLOSS - -/obj/item/paicard/Initialize() - SSpai.pai_card_list += src - add_overlay("pai-off") - return ..() - -/obj/item/paicard/Destroy() - //Will stop people throwing friend pAIs into the singularity so they can respawn - SSpai.pai_card_list -= src - if (!QDELETED(pai)) - QDEL_NULL(pai) - return ..() - -/obj/item/paicard/attack_self(mob/user) - if (!in_range(src, user)) - return - user.set_machine(src) - var/dat = "Personal AI Device
    " - if(pai) - if(!pai.master_dna || !pai.master) - dat += "Imprint Master DNA
    " - dat += "Installed Personality: [pai.name]
    " - dat += "Prime directive:
    [pai.laws.zeroth]
    " - for(var/slaws in pai.laws.supplied) - dat += "Additional directives:
    [slaws]
    " - dat += "Configure Directives
    " - dat += "
    " - dat += "

    Device Settings


    " - if(pai.radio) - dat += "Radio Uplink
    " - dat += "Transmit: \[[pai.can_transmit? "Disable" : "Enable"] Radio Transmission\]
    " - dat += "Receive: \[[pai.can_receive? "Disable" : "Enable"] Radio Reception\]
    " - else - dat += "Radio Uplink
    " - dat += "Radio firmware not loaded. Please install a pAI personality to load firmware.
    " - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.real_name == pai.master || H.dna.unique_enzymes == pai.master_dna) - dat += "\[[pai.canholo? "Disable" : "Enable"] holomatrix projectors\]
    " - dat += "\[Reset speech synthesis module\]
    " - dat += "\[Wipe current pAI personality\]
    " - else - dat += "No personality installed.
    " - dat += "Searching for a personality... Press view available personalities to notify potential candidates." - dat += "\[View available personalities\]
    " - user << browse(dat, "window=paicard") - onclose(user, "paicard") - return - -/obj/item/paicard/Topic(href, href_list) - - if(!usr || usr.stat) - return - - if(href_list["request"]) - SSpai.findPAI(src, usr) - - if(pai) - if(!(loc == usr)) - return - if(href_list["setdna"]) - if(pai.master_dna) - return - if(!iscarbon(usr)) - to_chat(usr, "I don't have any DNA, or my DNA is incompatible with this device!") - else - var/mob/living/carbon/M = usr - pai.master = M.real_name - pai.master_dna = M.dna.unique_enzymes - to_chat(pai, "I have been bound to a new master.") - pai.emittersemicd = FALSE - if(href_list["wipe"]) - var/confirm = input("Are you CERTAIN you wish to delete the current personality? This action cannot be undone.", "Personality Wipe") in list("Yes", "No") - if(confirm == "Yes") - if(pai) - to_chat(pai, "I feel myself slipping away from reality.") - to_chat(pai, "Byte by byte you lose my sense of self.") - to_chat(pai, "My mental faculties leave you.") - to_chat(pai, "oblivion... ") - qdel(pai) - if(href_list["fix_speech"]) - pai.stuttering = 0 - pai.slurring = 0 - pai.derpspeech = 0 - if(href_list["toggle_transmit"] || href_list["toggle_receive"]) - var/transmitting = href_list["toggle_transmit"] //it can't be both so if we know it's not transmitting it must be receiving. - var/transmit_holder = (transmitting ? WIRE_TX : WIRE_RX) - if(transmitting) - pai.can_transmit = !pai.can_transmit - else //receiving - pai.can_receive = !pai.can_receive - pai.radio.wires.cut(transmit_holder)//wires.cut toggles cut and uncut states - transmit_holder = (transmitting ? pai.can_transmit : pai.can_receive) //recycling can be fun! - to_chat(usr,"I [transmit_holder ? "enable" : "disable"] my pAI's [transmitting ? "outgoing" : "incoming"] radio transmissions!") - to_chat(pai,"My owner has [transmit_holder ? "enabled" : "disabled"] my [transmitting ? "outgoing" : "incoming"] radio transmissions!") - if(href_list["setlaws"]) - var/newlaws = copytext(sanitize(input("Enter any additional directives you would like my pAI personality to follow. Note that these directives will not override the personality's allegiance to its imprinted master. Conflicting directives will be ignored.", "pAI Directive Configuration", pai.laws.supplied[1]) as message|null),1,MAX_MESSAGE_LEN) - if(newlaws && pai) - pai.add_supplied_law(0,newlaws) - if(href_list["toggle_holo"]) - if(pai.canholo) - to_chat(pai, "My owner has disabled my holomatrix projectors!") - pai.canholo = FALSE - to_chat(usr, "I disable my pAI's holomatrix!") - else - to_chat(pai, "My owner has enabled my holomatrix projectors!") - pai.canholo = TRUE - to_chat(usr, "I enable my pAI's holomatrix!") - - attack_self(usr) - -// WIRE_SIGNAL = 1 -// WIRE_RECEIVE = 2 -// WIRE_TRANSMIT = 4 - -/obj/item/paicard/proc/setPersonality(mob/living/silicon/pai/personality) - src.pai = personality - src.add_overlay("pai-null") - - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - audible_message("\The [src] plays a cheerful startup noise!") - -/obj/item/paicard/proc/setEmotion(emotion) - if(pai) - src.cut_overlays() - switch(emotion) - if(1) - src.add_overlay("pai-happy") - if(2) - src.add_overlay("pai-cat") - if(3) - src.add_overlay("pai-extremely-happy") - if(4) - src.add_overlay("pai-face") - if(5) - src.add_overlay("pai-laugh") - if(6) - src.add_overlay("pai-off") - if(7) - src.add_overlay("pai-sad") - if(8) - src.add_overlay("pai-angry") - if(9) - src.add_overlay("pai-what") - if(10) - src.add_overlay("pai-null") - if(11) - src.add_overlay("pai-sunglasses") - -/obj/item/paicard/proc/alertUpdate() - audible_message("[src] flashes a message across its screen, \"Additional personalities available for download.\"", "[src] vibrates with an alert.") - -/obj/item/paicard/emp_act(severity) - . = ..() - if (. & EMP_PROTECT_SELF) - return - if(pai && !pai.holoform) - pai.emp_act(severity) - diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm deleted file mode 100644 index aa28a48323..0000000000 --- a/code/game/objects/items/devices/powersink.dm +++ /dev/null @@ -1,160 +0,0 @@ -// Powersink - used to drain station power - -/obj/item/powersink - name = "power sink" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "powersink0" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - w_class = WEIGHT_CLASS_BULKY - flags_1 = CONDUCT_1 - throwforce = 5 - throw_speed = 1 - throw_range = 2 - custom_materials = list(/datum/material/iron=750) - var/drain_rate = 2000000 // amount of power to drain per tick - var/power_drained = 0 // has drained this much power - var/max_power = 6e8 // maximum power that can be drained before exploding - var/mode = 0 // 0 = off, 1=clamped (off), 2=operating - var/admins_warned = FALSE // stop spam, only warn the admins once that we are about to boom - - var/const/DISCONNECTED = 0 - var/const/CLAMPED_OFF = 1 - var/const/OPERATING = 2 - - var/obj/structure/cable/attached // the attached cable - -/obj/item/powersink/update_icon() - icon_state = "powersink[mode == OPERATING]" - -/obj/item/powersink/proc/set_mode(value) - if(value == mode) - return - switch(value) - if(DISCONNECTED) - attached = null - if(mode == OPERATING) - STOP_PROCESSING(SSobj, src) - anchored = FALSE - density = FALSE - - if(CLAMPED_OFF) - if(!attached) - return - if(mode == OPERATING) - STOP_PROCESSING(SSobj, src) - anchored = TRUE - density = TRUE - - if(OPERATING) - if(!attached) - return - START_PROCESSING(SSobj, src) - anchored = TRUE - density = TRUE - - mode = value - update_icon() - set_light(0) - -/obj/item/powersink/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_WRENCH) - if(mode == DISCONNECTED) - var/turf/T = loc - if(isturf(T) && !T.intact) - attached = locate() in T - if(!attached) - to_chat(user, "\The [src] must be placed over an exposed, powered cable node!") - else - set_mode(CLAMPED_OFF) - user.visible_message( \ - "[user] attaches \the [src] to the cable.", \ - "I bolt \the [src] into the floor and connect it to the cable.", - "I hear some wires being connected to something.") - else - to_chat(user, "\The [src] must be placed over an exposed, powered cable node!") - else - set_mode(DISCONNECTED) - user.visible_message( \ - "[user] detaches \the [src] from the cable.", \ - "I unbolt \the [src] from the floor and detach it from the cable.", - "I hear some wires being disconnected from something.") - - else if(I.tool_behaviour == TOOL_SCREWDRIVER) - user.visible_message( \ - "[user] messes with \the [src] for a bit.", \ - "I can't fit the screwdriver into \the [src]'s bolts! Try using a wrench.") - else - return ..() - -/obj/item/powersink/attack_paw() - return - -/obj/item/powersink/attack_ai() - return - -/obj/item/powersink/attack_hand(mob/user) - . = ..() - if(.) - return - switch(mode) - if(DISCONNECTED) - ..() - - if(CLAMPED_OFF) - user.visible_message( \ - "[user] activates \the [src]!", \ - "I activate \the [src].", - "I hear a click.") - message_admins("Power sink activated by [ADMIN_LOOKUPFLW(user)] at [ADMIN_VERBOSEJMP(src)]") - log_game("Power sink activated by [key_name(user)] at [AREACOORD(src)]") - set_mode(OPERATING) - - if(OPERATING) - user.visible_message( \ - "[user] deactivates \the [src]!", \ - "I deactivate \the [src].", - "I hear a click.") - set_mode(CLAMPED_OFF) - -/obj/item/powersink/process() - if(!attached) - set_mode(DISCONNECTED) - return - - var/datum/powernet/PN = attached.powernet - if(PN) - set_light(5) - - // found a powernet, so drain up to max power from it - - var/drained = min ( drain_rate, attached.newavail() ) - attached.add_delayedload(drained) - power_drained += drained - - // if tried to drain more than available on powernet - // now look for APCs and drain their cells - if(drained < drain_rate) - for(var/obj/machinery/power/terminal/T in PN.nodes) - if(istype(T.master, /obj/machinery/power/apc)) - var/obj/machinery/power/apc/A = T.master - if(A.operating && A.cell) - A.cell.charge = max(0, A.cell.charge - 50) - power_drained += 50 - if(A.charging == 2) // If the cell was full - A.charging = 1 // It's no longer full - if(drained >= drain_rate) - break - - if(power_drained > max_power * 0.98) - if (!admins_warned) - admins_warned = TRUE - message_admins("Power sink at ([x],[y],[z] - JMP) is 95% full. Explosion imminent.") - playsound(src, 'sound/blank.ogg', 100, TRUE, TRUE) - - if(power_drained >= max_power) - STOP_PROCESSING(SSobj, src) - explosion(src.loc, 4,8,16,32) - qdel(src) diff --git a/code/game/objects/items/devices/pressureplates.dm b/code/game/objects/items/devices/pressureplates.dm deleted file mode 100644 index af75845652..0000000000 --- a/code/game/objects/items/devices/pressureplates.dm +++ /dev/null @@ -1,80 +0,0 @@ - -/obj/item/pressure_plate - name = "pressure plate" - desc = "" - icon = 'icons/obj/device.dmi' - item_state = "flash" - icon_state = "pressureplate" - level = 1 - var/trigger_mob = TRUE - var/trigger_item = FALSE - var/trigger_silent = FALSE - var/sound/trigger_sound = 'sound/blank.ogg' - var/obj/item/assembly/signaler/sigdev = null - var/roundstart_signaller = FALSE - var/roundstart_signaller_freq = FREQ_PRESSURE_PLATE - var/roundstart_signaller_code = 30 - var/roundstart_hide = FALSE - var/removable_signaller = TRUE - var/active = FALSE - var/image/tile_overlay = null - var/can_trigger = TRUE - var/trigger_delay = 10 - -/obj/item/pressure_plate/Initialize() - . = ..() - tile_overlay = image(icon = 'icons/turf/floors.dmi', icon_state = "pp_overlay") - if(roundstart_signaller) - sigdev = new - sigdev.code = roundstart_signaller_code - sigdev.frequency = roundstart_signaller_freq - if(isopenturf(loc)) - hide(TRUE) - -/obj/item/pressure_plate/Crossed(atom/movable/AM) - . = ..() - if(!can_trigger || !active) - return - if(trigger_mob && isliving(AM)) - var/mob/living/L = AM - to_chat(L, "I feel something click beneath you!") - else if(!trigger_item) - return - can_trigger = FALSE - addtimer(CALLBACK(src, PROC_REF(trigger)), trigger_delay) - -/obj/item/pressure_plate/proc/trigger() - can_trigger = TRUE - if(istype(sigdev)) - sigdev.signal() - -/obj/item/pressure_plate/attackby(obj/item/I, mob/living/L) - if(istype(I, /obj/item/assembly/signaler) && !istype(sigdev) && removable_signaller && L.transferItemToLoc(I, src)) - sigdev = I - to_chat(L, "I attach [I] to [src]!") - return ..() - -/obj/item/pressure_plate/attack_self(mob/living/L) - if(removable_signaller && istype(sigdev)) - to_chat(L, "I remove [sigdev] from [src].") - if(!L.put_in_hands(sigdev)) - sigdev.forceMove(get_turf(src)) - sigdev = null - return ..() - -/obj/item/pressure_plate/hide(yes) - if(yes) - invisibility = INVISIBILITY_MAXIMUM - anchored = TRUE - icon_state = null - active = TRUE - can_trigger = TRUE - if(tile_overlay) - loc.add_overlay(tile_overlay) - else - invisibility = initial(invisibility) - anchored = FALSE - icon_state = initial(icon_state) - active = FALSE - if(tile_overlay) - loc.overlays -= tile_overlay diff --git a/code/game/objects/items/devices/quantum_keycard.dm b/code/game/objects/items/devices/quantum_keycard.dm deleted file mode 100644 index 92bf22d072..0000000000 --- a/code/game/objects/items/devices/quantum_keycard.dm +++ /dev/null @@ -1,32 +0,0 @@ -/obj/item/quantum_keycard - name = "quantum keycard" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "quantum_keycard" - item_state = "card-id" - lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' - w_class = WEIGHT_CLASS_TINY - var/obj/machinery/quantumpad/qpad - -/obj/item/quantum_keycard/examine(mob/user) - . = ..() - if(qpad) - . += "It's currently linked to a quantum pad." - . += "Alt-click to unlink the keycard." - else - . += "Insert [src] into an active quantum pad to link it." - -/obj/item/quantum_keycard/AltClick(mob/living/user) - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return - to_chat(user, "I start pressing [src]'s unlink button...") - if(do_after(user, 40, target = src)) - to_chat(user, "The keycard beeps twice and disconnects the quantum link.") - qpad = null - -/obj/item/quantum_keycard/update_icon() - if(qpad) - icon_state = "quantum_keycard_on" - else - icon_state = initial(icon_state) diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm deleted file mode 100644 index bef22182f5..0000000000 --- a/code/game/objects/items/devices/radio/electropack.dm +++ /dev/null @@ -1,144 +0,0 @@ -/obj/item/electropack - name = "electropack" - desc = "" - icon = 'icons/obj/radio.dmi' - icon_state = "electropack0" - item_state = "electropack" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BACK - w_class = WEIGHT_CLASS_HUGE - custom_materials = list(/datum/material/iron=10000, /datum/material/glass=2500) - var/on = TRUE - var/code = 2 - var/frequency = FREQ_ELECTROPACK - var/shock_cooldown = 0 - -/obj/item/electropack/suicide_act(mob/user) - user.visible_message("[user] hooks [user.p_them()]self to the electropack and spams the trigger! It looks like [user.p_theyre()] trying to commit suicide!") - return (FIRELOSS) - -/obj/item/electropack/Initialize() - . = ..() - SSradio.add_object(src, frequency, RADIO_SIGNALER) - -/obj/item/electropack/Destroy() - SSradio.remove_object(src, frequency) - return ..() - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/electropack/attack_hand(mob/user) - if(iscarbon(user)) - var/mob/living/carbon/C = user - if(src == C.back) - to_chat(user, "I need help taking this off!") - return - return ..() - -/obj/item/electropack/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/clothing/head/helmet)) - var/obj/item/assembly/shock_kit/A = new /obj/item/assembly/shock_kit(user) - A.icon = 'icons/obj/assemblies.dmi' - - if(!user.transferItemToLoc(W, A)) - to_chat(user, "[W] is stuck to your hand, you cannot attach it to [src]!") - return - W.master = A - A.part1 = W - - user.transferItemToLoc(src, A, TRUE) - master = A - A.part2 = src - - user.put_in_hands(A) - A.add_fingerprint(user) - else - return ..() - -/obj/item/electropack/Topic(href, href_list) - //..() - var/mob/living/carbon/C = usr - if(usr.stat || usr.restrained() || C.back == src) - return - if((ishuman(usr) && usr.contents.Find(src)) || usr.contents.Find(master) || (in_range(src, usr) && isturf(loc))) - usr.set_machine(src) - if(href_list["freq"]) - SSradio.remove_object(src, frequency) - frequency = sanitize_frequency(frequency + text2num(href_list["freq"])) - SSradio.add_object(src, frequency, RADIO_SIGNALER) - else - if(href_list["code"]) - code += text2num(href_list["code"]) - code = round(code) - code = min(100, code) - code = max(1, code) - else - if(href_list["power"]) - on = !( on ) - icon_state = "electropack[on]" - if(!( master )) - if(ismob(loc)) - attack_self(loc) - else - for(var/mob/M in viewers(1, src)) - if(M.client) - attack_self(M) - else - if(ismob(master.loc)) - attack_self(master.loc) - else - for(var/mob/M in viewers(1, master)) - if(M.client) - attack_self(M) - else - usr << browse(null, "window=radio") - return - return - -/obj/item/electropack/receive_signal(datum/signal/signal) - if(!signal || signal.data["code"] != code) - return - - if(isliving(loc) && on) - if(shock_cooldown != 0) - return - shock_cooldown = 1 - addtimer(VARSET_CALLBACK(src, shock_cooldown, 0), 100) - var/mob/living/L = loc - step(L, pick(GLOB.cardinals)) - - to_chat(L, "I feel a sharp shock!") - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, L) - s.start() - - L.Paralyze(100) - - if(master) - master.receive_signal() - return - -/obj/item/electropack/attack_self(mob/user) - - if(!ishuman(user)) - return - user.set_machine(src) - var/dat = {"Turned [on ? "On" : "Off"] - -Toggle
    -Frequency/Code for electropack:
    -Frequency: -- -- [format_frequency(frequency)] -+ -+
    - -Code: -- -- [code] -+ -+
    -
    "} - user << browse(dat, "window=radio") - onclose(user, "radio") - return diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm deleted file mode 100644 index f0a8663fb6..0000000000 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ /dev/null @@ -1,132 +0,0 @@ -/obj/item/encryptionkey - name = "standard encryption key" - desc = "" - icon = 'icons/obj/radio.dmi' - icon_state = "cypherkey" - w_class = WEIGHT_CLASS_TINY - var/translate_binary = FALSE - var/syndie = FALSE - var/independent = FALSE - var/list/channels = list() - -/obj/item/encryptionkey/Initialize() - . = ..() - if(!channels.len) - desc = "" - -/obj/item/encryptionkey/examine(mob/user) - . = ..() - if(LAZYLEN(channels)) - var/list/examine_text_list = list() - for(var/i in channels) - examine_text_list += "[GLOB.channel_tokens[i]] - [lowertext(i)]" - - . += "It can access the following channels; [jointext(examine_text_list, ", ")]." - -/obj/item/encryptionkey/syndicate - name = "syndicate encryption key" - icon_state = "syn_cypherkey" - channels = list(RADIO_CHANNEL_SYNDICATE = 1) - syndie = TRUE//Signifies that it de-crypts Syndicate transmissions - -/obj/item/encryptionkey/binary - name = "binary translator key" - icon_state = "bin_cypherkey" - translate_binary = TRUE - -/obj/item/encryptionkey/headset_sec - name = "security radio encryption key" - icon_state = "sec_cypherkey" - channels = list(RADIO_CHANNEL_SECURITY = 1) - -/obj/item/encryptionkey/headset_eng - name = "engineering radio encryption key" - icon_state = "eng_cypherkey" - channels = list(RADIO_CHANNEL_ENGINEERING = 1) - -/obj/item/encryptionkey/headset_rob - name = "robotics radio encryption key" - icon_state = "rob_cypherkey" - channels = list(RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_ENGINEERING = 1) - -/obj/item/encryptionkey/headset_med - name = "medical radio encryption key" - icon_state = "med_cypherkey" - channels = list(RADIO_CHANNEL_MEDICAL = 1) - -/obj/item/encryptionkey/headset_sci - name = "science radio encryption key" - icon_state = "sci_cypherkey" - channels = list(RADIO_CHANNEL_SCIENCE = 1) - -/obj/item/encryptionkey/headset_medsci - name = "medical research radio encryption key" - icon_state = "medsci_cypherkey" - channels = list(RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_MEDICAL = 1) - -/obj/item/encryptionkey/headset_srvsec - name = "law and order radio encryption key" - icon_state = "srvsec_cypherkey" - channels = list(RADIO_CHANNEL_SERVICE = 1, RADIO_CHANNEL_SECURITY = 1) - -/obj/item/encryptionkey/headset_com - name = "command radio encryption key" - icon_state = "com_cypherkey" - channels = list(RADIO_CHANNEL_COMMAND = 1) - -/obj/item/encryptionkey/heads/captain - name = "\proper the captain's encryption key" - icon_state = "cap_cypherkey" - channels = list(RADIO_CHANNEL_COMMAND = 1, RADIO_CHANNEL_SECURITY = 1, RADIO_CHANNEL_ENGINEERING = 0, RADIO_CHANNEL_SCIENCE = 0, RADIO_CHANNEL_MEDICAL = 0, RADIO_CHANNEL_SUPPLY = 0, RADIO_CHANNEL_SERVICE = 0) - -/obj/item/encryptionkey/heads/rd - name = "\proper the research director's encryption key" - icon_state = "rd_cypherkey" - channels = list(RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_COMMAND = 1) - -/obj/item/encryptionkey/heads/hos - name = "\proper the head of security's encryption key" - icon_state = "hos_cypherkey" - channels = list(RADIO_CHANNEL_SECURITY = 1, RADIO_CHANNEL_COMMAND = 1) - -/obj/item/encryptionkey/heads/ce - name = "\proper the chief engineer's encryption key" - icon_state = "ce_cypherkey" - channels = list(RADIO_CHANNEL_ENGINEERING = 1, RADIO_CHANNEL_COMMAND = 1) - -/obj/item/encryptionkey/heads/cmo - name = "\proper the chief medical officer's encryption key" - icon_state = "cmo_cypherkey" - channels = list(RADIO_CHANNEL_MEDICAL = 1, RADIO_CHANNEL_COMMAND = 1) - -/obj/item/encryptionkey/heads/hop - name = "\proper the head of personnel's encryption key" - icon_state = "hop_cypherkey" - channels = list(RADIO_CHANNEL_SUPPLY = 1, RADIO_CHANNEL_SERVICE = 1, RADIO_CHANNEL_COMMAND = 1) - -/obj/item/encryptionkey/headset_cargo - name = "supply radio encryption key" - icon_state = "cargo_cypherkey" - channels = list(RADIO_CHANNEL_SUPPLY = 1) - -/obj/item/encryptionkey/headset_mining - name = "mining radio encryption key" - icon_state = "cargo_cypherkey" - channels = list(RADIO_CHANNEL_SUPPLY = 1, RADIO_CHANNEL_SCIENCE = 1) - -/obj/item/encryptionkey/headset_service - name = "service radio encryption key" - icon_state = "srv_cypherkey" - channels = list(RADIO_CHANNEL_SERVICE = 1) - -/obj/item/encryptionkey/headset_cent - name = "\improper CentCom radio encryption key" - icon_state = "cent_cypherkey" - independent = TRUE - channels = list(RADIO_CHANNEL_CENTCOM = 1) - -/obj/item/encryptionkey/ai //ported from NT, this goes 'inside' the AI. - channels = list(RADIO_CHANNEL_COMMAND = 1, RADIO_CHANNEL_SECURITY = 1, RADIO_CHANNEL_ENGINEERING = 1, RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_MEDICAL = 1, RADIO_CHANNEL_SUPPLY = 1, RADIO_CHANNEL_SERVICE = 1, RADIO_CHANNEL_AI_PRIVATE = 1) - -/obj/item/encryptionkey/secbot - channels = list(RADIO_CHANNEL_AI_PRIVATE = 1, RADIO_CHANNEL_SECURITY = 1) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm deleted file mode 100644 index 887abcc99b..0000000000 --- a/code/game/objects/items/devices/radio/headset.dm +++ /dev/null @@ -1,348 +0,0 @@ -// Used for translating channels to tokens on examination -GLOBAL_LIST_INIT(channel_tokens, list( - RADIO_CHANNEL_COMMON = RADIO_KEY_COMMON, - RADIO_CHANNEL_SCIENCE = RADIO_TOKEN_SCIENCE, - RADIO_CHANNEL_COMMAND = RADIO_TOKEN_COMMAND, - RADIO_CHANNEL_MEDICAL = RADIO_TOKEN_MEDICAL, - RADIO_CHANNEL_ENGINEERING = RADIO_TOKEN_ENGINEERING, - RADIO_CHANNEL_SECURITY = RADIO_TOKEN_SECURITY, - RADIO_CHANNEL_CENTCOM = RADIO_TOKEN_CENTCOM, - RADIO_CHANNEL_SYNDICATE = RADIO_TOKEN_SYNDICATE, - RADIO_CHANNEL_SUPPLY = RADIO_TOKEN_SUPPLY, - RADIO_CHANNEL_SERVICE = RADIO_TOKEN_SERVICE, - MODE_BINARY = MODE_TOKEN_BINARY, - RADIO_CHANNEL_AI_PRIVATE = RADIO_TOKEN_AI_PRIVATE -)) - -/obj/item/radio/headset - name = "radio headset" - desc = "" - icon_state = "headset" - item_state = "headset" - custom_materials = list(/datum/material/iron=75) - subspace_transmission = TRUE - canhear_range = 0 // can't hear headsets from very far away - - slot_flags = ITEM_SLOT_HEAD - var/obj/item/encryptionkey/keyslot2 = null - dog_fashion = null - -/obj/item/radio/headset/suicide_act(mob/living/carbon/user) - user.visible_message("[user] begins putting \the [src]'s antenna up [user.p_their()] nose! It looks like [user.p_theyre()] trying to give [user.p_them()]self cancer!") - return TOXLOSS - -/obj/item/radio/headset/examine(mob/user) - . = ..() - - if(item_flags & IN_INVENTORY && loc == user) - // construction of frequency description - var/list/avail_chans = list("Use [RADIO_KEY_COMMON] for the currently tuned frequency") - if(translate_binary) - avail_chans += "use [MODE_TOKEN_BINARY] for [MODE_BINARY]" - if(length(channels)) - for(var/i in 1 to length(channels)) - if(i == 1) - avail_chans += "use [MODE_TOKEN_DEPARTMENT] or [GLOB.channel_tokens[channels[i]]] for [lowertext(channels[i])]" - else - avail_chans += "use [GLOB.channel_tokens[channels[i]]] for [lowertext(channels[i])]" - . += "A small screen on the headset displays the following available frequencies:\n[english_list(avail_chans)]." - - if(command) - . += "Alt-click to toggle the high-volume mode." - else - . += "A small screen on the headset flashes, it's too small to read without holding or wearing the headset." - -/obj/item/radio/headset/Initialize() - . = ..() - recalculateChannels() - -/obj/item/radio/headset/Destroy() - QDEL_NULL(keyslot2) - return ..() - -/obj/item/radio/headset/talk_into(mob/living/M, message, channel, list/spans,datum/language/language) - if (!listening) - return ITALICS | REDUCE_RANGE - return ..() - -/obj/item/radio/headset/can_receive(freq, level, AIuser) - if(ishuman(src.loc)) - var/mob/living/carbon/human/H = src.loc - if(H.ears == src) - return ..(freq, level) - else if(AIuser) - return ..(freq, level) - return FALSE - -/obj/item/radio/headset/ui_data(mob/user) - . = ..() - .["headset"] = TRUE - -/obj/item/radio/headset/syndicate //disguised to look like a normal headset for stealth ops - -/obj/item/radio/headset/syndicate/alt //undisguised bowman with flash protection - name = "syndicate headset" - desc = "" - icon_state = "syndie_headset" - item_state = "syndie_headset" - -/obj/item/radio/headset/syndicate/alt/ComponentInitialize() - . = ..() - AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_HEAD)) - -/obj/item/radio/headset/syndicate/alt/leader - name = "team leader headset" - command = TRUE - -/obj/item/radio/headset/syndicate/Initialize() - . = ..() - make_syndie() - -/obj/item/radio/headset/binary -/obj/item/radio/headset/binary/Initialize() - . = ..() - qdel(keyslot) - keyslot = new /obj/item/encryptionkey/binary - recalculateChannels() - -/obj/item/radio/headset/headset_sec - name = "security radio headset" - desc = "" - icon_state = "sec_headset" - keyslot = new /obj/item/encryptionkey/headset_sec - -/obj/item/radio/headset/headset_sec/alt - name = "security bowman headset" - desc = "" - icon_state = "sec_headset_alt" - item_state = "sec_headset_alt" - -/obj/item/radio/headset/headset_sec/alt/ComponentInitialize() - . = ..() - AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_HEAD)) - -/obj/item/radio/headset/headset_eng - name = "engineering radio headset" - desc = "" - icon_state = "eng_headset" - keyslot = new /obj/item/encryptionkey/headset_eng - -/obj/item/radio/headset/headset_rob - name = "robotics radio headset" - desc = "" - icon_state = "rob_headset" - keyslot = new /obj/item/encryptionkey/headset_rob - -/obj/item/radio/headset/headset_med - name = "medical radio headset" - desc = "" - icon_state = "med_headset" - keyslot = new /obj/item/encryptionkey/headset_med - -/obj/item/radio/headset/headset_sci - name = "science radio headset" - desc = "" - icon_state = "sci_headset" - keyslot = new /obj/item/encryptionkey/headset_sci - -/obj/item/radio/headset/headset_medsci - name = "medical research radio headset" - desc = "" - icon_state = "medsci_headset" - keyslot = new /obj/item/encryptionkey/headset_medsci - -/obj/item/radio/headset/headset_srvsec - name = "law and order headset" - desc = "" - icon_state = "srvsec_headset" - keyslot = new /obj/item/encryptionkey/headset_srvsec - -/obj/item/radio/headset/headset_com - name = "command radio headset" - desc = "" - icon_state = "com_headset" - keyslot = new /obj/item/encryptionkey/headset_com - -/obj/item/radio/headset/heads - command = TRUE - -/obj/item/radio/headset/heads/captain - name = "\proper the captain's headset" - desc = "" - icon_state = "com_headset" - keyslot = new /obj/item/encryptionkey/heads/captain - -/obj/item/radio/headset/heads/captain/alt - name = "\proper the captain's bowman headset" - desc = "" - icon_state = "com_headset_alt" - item_state = "com_headset_alt" - -/obj/item/radio/headset/heads/captain/alt/ComponentInitialize() - . = ..() - AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_HEAD)) - -/obj/item/radio/headset/heads/rd - name = "\proper the research director's headset" - desc = "" - icon_state = "com_headset" - keyslot = new /obj/item/encryptionkey/heads/rd - -/obj/item/radio/headset/heads/hos - name = "\proper the head of security's headset" - desc = "" - icon_state = "com_headset" - keyslot = new /obj/item/encryptionkey/heads/hos - -/obj/item/radio/headset/heads/hos/alt - name = "\proper the head of security's bowman headset" - desc = "" - icon_state = "com_headset_alt" - item_state = "com_headset_alt" - -/obj/item/radio/headset/heads/hos/ComponentInitialize() - . = ..() - AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_HEAD)) - -/obj/item/radio/headset/heads/ce - name = "\proper the chief engineer's headset" - desc = "" - icon_state = "com_headset" - keyslot = new /obj/item/encryptionkey/heads/ce - -/obj/item/radio/headset/heads/cmo - name = "\proper the chief medical officer's headset" - desc = "" - icon_state = "com_headset" - keyslot = new /obj/item/encryptionkey/heads/cmo - -/obj/item/radio/headset/heads/hop - name = "\proper the head of personnel's headset" - desc = "" - icon_state = "com_headset" - keyslot = new /obj/item/encryptionkey/heads/hop - -/obj/item/radio/headset/headset_cargo - name = "supply radio headset" - desc = "" - icon_state = "cargo_headset" - keyslot = new /obj/item/encryptionkey/headset_cargo - -/obj/item/radio/headset/headset_cargo/mining - name = "mining radio headset" - desc = "" - icon_state = "mine_headset" - keyslot = new /obj/item/encryptionkey/headset_mining - -/obj/item/radio/headset/headset_srv - name = "service radio headset" - desc = "" - icon_state = "srv_headset" - keyslot = new /obj/item/encryptionkey/headset_service - -/obj/item/radio/headset/headset_cent - name = "\improper CentCom headset" - desc = "" - icon_state = "cent_headset" - keyslot = new /obj/item/encryptionkey/headset_com - keyslot2 = new /obj/item/encryptionkey/headset_cent - -/obj/item/radio/headset/headset_cent/empty - keyslot = null - keyslot2 = null - -/obj/item/radio/headset/headset_cent/commander - keyslot = new /obj/item/encryptionkey/heads/captain - -/obj/item/radio/headset/headset_cent/alt - name = "\improper CentCom bowman headset" - desc = "" - icon_state = "cent_headset_alt" - item_state = "cent_headset_alt" - keyslot = null - -/obj/item/radio/headset/headset_cent/alt/ComponentInitialize() - . = ..() - AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_HEAD)) - -/obj/item/radio/headset/silicon/pai - name = "\proper mini Integrated Subspace Transceiver " - subspace_transmission = FALSE - - -/obj/item/radio/headset/silicon/ai - name = "\proper Integrated Subspace Transceiver " - keyslot2 = new /obj/item/encryptionkey/ai - command = TRUE - -/obj/item/radio/headset/silicon/can_receive(freq, level) - return ..(freq, level, TRUE) - -/obj/item/radio/headset/attackby(obj/item/W, mob/user, params) - user.set_machine(src) - - if(W.tool_behaviour == TOOL_SCREWDRIVER) - if(keyslot || keyslot2) - for(var/ch_name in channels) - SSradio.remove_object(src, GLOB.radiochannels[ch_name]) - secure_radio_connections[ch_name] = null - - var/turf/T = user.drop_location() - if(T) - if(keyslot) - keyslot.forceMove(T) - keyslot = null - if(keyslot2) - keyslot2.forceMove(T) - keyslot2 = null - - recalculateChannels() - to_chat(user, "I pop out the encryption keys in the headset.") - - else - to_chat(user, "This headset doesn't have any unique encryption keys! How useless...") - - else if(istype(W, /obj/item/encryptionkey)) - if(keyslot && keyslot2) - to_chat(user, "The headset can't hold another key!") - return - - if(!keyslot) - if(!user.transferItemToLoc(W, src)) - return - keyslot = W - - else - if(!user.transferItemToLoc(W, src)) - return - keyslot2 = W - - - recalculateChannels() - else - return ..() - - -/obj/item/radio/headset/recalculateChannels() - ..() - if(keyslot2) - for(var/ch_name in keyslot2.channels) - if(!(ch_name in src.channels)) - channels[ch_name] = keyslot2.channels[ch_name] - - if(keyslot2.translate_binary) - translate_binary = TRUE - if(keyslot2.syndie) - syndie = TRUE - if (keyslot2.independent) - independent = TRUE - - for(var/ch_name in channels) - secure_radio_connections[ch_name] = add_radio(src, GLOB.radiochannels[ch_name]) - -/obj/item/radio/headset/AltClick(mob/living/user) - if(!istype(user) || !Adjacent(user) || user.incapacitated()) - return - if (command) - use_command = !use_command - to_chat(user, "I toggle high-volume mode [use_command ? "on" : "off"].") diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm deleted file mode 100644 index 2b181cf6d6..0000000000 --- a/code/game/objects/items/devices/radio/intercom.dm +++ /dev/null @@ -1,133 +0,0 @@ -/obj/item/radio/intercom - name = "station intercom" - desc = "" - icon_state = "intercom" - anchored = TRUE - w_class = WEIGHT_CLASS_BULKY - canhear_range = 2 - var/number = 0 - var/anyai = 1 - var/mob/living/silicon/ai/ai = list() - var/last_tick //used to delay the powercheck - dog_fashion = null - var/unfastened = FALSE - -/obj/item/radio/intercom/unscrewed - unfastened = TRUE - -/obj/item/radio/intercom/Initialize(mapload, ndir, building) - . = ..() - if(building) - setDir(ndir) - START_PROCESSING(SSobj, src) - -/obj/item/radio/intercom/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/radio/intercom/examine(mob/user) - . = ..() - if(!unfastened) - . += "It's screwed and secured to the wall." - else - . += "It's unscrewed from the wall, and can be detached." - -/obj/item/radio/intercom/attackby(obj/item/I, mob/living/user, params) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - if(unfastened) - user.visible_message("[user] starts tightening [src]'s screws...", "I start screwing in [src]...") - if(I.use_tool(src, user, 30, volume=50)) - user.visible_message("[user] tightens [src]'s screws!", "I tighten [src]'s screws.") - unfastened = FALSE - else - user.visible_message("[user] starts loosening [src]'s screws...", "I start unscrewing [src]...") - if(I.use_tool(src, user, 40, volume=50)) - user.visible_message("[user] loosens [src]'s screws!", "I unscrew [src], loosening it from the wall.") - unfastened = TRUE - return - else if(I.tool_behaviour == TOOL_WRENCH) - if(!unfastened) - to_chat(user, "I need to unscrew [src] from the wall first!") - return - user.visible_message("[user] starts unsecuring [src]...", "I start unsecuring [src]...") - I.play_tool_sound(src) - if(I.use_tool(src, user, 80)) - user.visible_message("[user] unsecures [src]!", "I detach [src] from the wall.") - playsound(src, 'sound/blank.ogg', 50, TRUE) - new/obj/item/wallframe/intercom(get_turf(src)) - qdel(src) - return - return ..() - -/obj/item/radio/intercom/attack_ai(mob/user) - interact(user) - -/obj/item/radio/intercom/attack_hand(mob/user) - . = ..() - if(.) - return - interact(user) - -/obj/item/radio/intercom/interact(mob/user) - ..() - ui_interact(user, state = GLOB.default_state) - -/obj/item/radio/intercom/can_receive(freq, level) - if(!on) - return FALSE - if(wires.is_cut(WIRE_RX)) - return FALSE - if(!(0 in level)) - var/turf/position = get_turf(src) - if(isnull(position) || !(position.z in level)) - return FALSE - if(!src.listening) - return FALSE - if(freq == FREQ_SYNDICATE) - if(!(src.syndie)) - return FALSE//Prevents broadcast of messages over devices lacking the encryption - - return TRUE - - -/obj/item/radio/intercom/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans, message_mode) - . = ..() - if (message_mode == MODE_INTERCOM) - return // Avoid hearing the same thing twice - if(!anyai && !(speaker in ai)) - return - ..() - -/obj/item/radio/intercom/process() - if(((world.timeofday - last_tick) > 30) || ((world.timeofday - last_tick) < 0)) - last_tick = world.timeofday - - var/area/A = get_area(src) - if(!A || emped) - on = FALSE - else - on = A.powered(EQUIP) // set "on" to the power status - - if(!on) - icon_state = "intercom-p" - else - icon_state = initial(icon_state) - -/obj/item/radio/intercom/add_blood_DNA(list/blood_dna) - return FALSE - -/obj/item/radio/intercom/end_emp_effect(curremp) - . = ..() - if(!.) - return - on = FALSE - -//Created through the autolathe or through deconstructing intercoms. Can be applied to wall to make a new intercom on it! -/obj/item/wallframe/intercom - name = "intercom frame" - desc = "" - icon_state = "intercom" - result_path = /obj/item/radio/intercom/unscrewed - pixel_shift = 29 - inverse = TRUE - custom_materials = list(/datum/material/iron = 75, /datum/material/glass = 25) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm deleted file mode 100644 index be4e9f1345..0000000000 --- a/code/game/objects/items/devices/radio/radio.dm +++ /dev/null @@ -1,426 +0,0 @@ -/obj/item/radio - icon = 'icons/obj/radio.dmi' - name = "station bounced radio" - icon_state = "walkietalkie" - item_state = "walkietalkie" - desc = "" - dog_fashion = /datum/dog_fashion/back - - flags_1 = CONDUCT_1 | HEAR_1 - slot_flags = ITEM_SLOT_BELT - throw_speed = 1 - throw_range = 7 - w_class = WEIGHT_CLASS_SMALL - custom_materials = list(/datum/material/iron=75, /datum/material/glass=25) - obj_flags = USES_TGUI - - var/on = TRUE - var/frequency = FREQ_COMMON - var/canhear_range = 3 // The range around the radio in which mobs can hear what it receives. - var/emped = 0 // Tracks the number of EMPs currently stacked. - - var/broadcasting = FALSE // Whether the radio will transmit dialogue it hears nearby. - var/listening = TRUE // Whether the radio is currently receiving. - var/prison_radio = FALSE // If true, the transmit wire starts cut. - var/unscrewed = FALSE // Whether wires are accessible. Toggleable by screwdrivering. - var/freerange = FALSE // If true, the radio has access to the full spectrum. - var/subspace_transmission = FALSE // If true, the radio transmits and receives on subspace exclusively. - var/subspace_switchable = FALSE // If true, subspace_transmission can be toggled at will. - var/freqlock = FALSE // Frequency lock to stop the user from untuning specialist radios. - var/use_command = FALSE // If true, broadcasts will be large and BOLD. - var/command = FALSE // If true, use_command can be toggled at will. - - // Encryption key handling - var/obj/item/encryptionkey/keyslot - var/translate_binary = FALSE // If true, can hear the special binary channel. - var/independent = FALSE // If true, can say/hear on the special CentCom channel. - var/syndie = FALSE // If true, hears all well-known channels automatically, and can say/hear on the Syndicate channel. - var/list/channels = list() // Map from name (see communications.dm) to on/off. First entry is current department (:h). - var/list/secure_radio_connections - - var/const/FREQ_LISTENING = 1 - //FREQ_BROADCASTING = 2 - -/obj/item/radio/suicide_act(mob/living/user) - user.visible_message("[user] starts bouncing [src] off [user.p_their()] head! It looks like [user.p_theyre()] trying to commit suicide!") - return BRUTELOSS - -/obj/item/radio/proc/set_frequency(new_frequency) - SEND_SIGNAL(src, COMSIG_RADIO_NEW_FREQUENCY, args) - remove_radio(src, frequency) - frequency = add_radio(src, new_frequency) - -/obj/item/radio/proc/recalculateChannels() - channels = list() - translate_binary = FALSE - syndie = FALSE - independent = FALSE - - if(keyslot) - for(var/ch_name in keyslot.channels) - if(!(ch_name in channels)) - channels[ch_name] = keyslot.channels[ch_name] - - if(keyslot.translate_binary) - translate_binary = TRUE - if(keyslot.syndie) - syndie = TRUE - if(keyslot.independent) - independent = TRUE - - for(var/ch_name in channels) - secure_radio_connections[ch_name] = add_radio(src, GLOB.radiochannels[ch_name]) - -/obj/item/radio/proc/make_syndie() // Turns normal radios into Syndicate radios! - qdel(keyslot) - keyslot = new /obj/item/encryptionkey/syndicate - syndie = 1 - recalculateChannels() - -/obj/item/radio/Destroy() - remove_radio_all(src) //Just to be sure - QDEL_NULL(wires) - QDEL_NULL(keyslot) - return ..() - -/obj/item/radio/Initialize() - wires = new /datum/wires/radio(src) - if(prison_radio) - wires.cut(WIRE_TX) // OH GOD WHY - secure_radio_connections = new - . = ..() - frequency = sanitize_frequency(frequency, freerange) - set_frequency(frequency) - - for(var/ch_name in channels) - secure_radio_connections[ch_name] = add_radio(src, GLOB.radiochannels[ch_name]) - -/obj/item/radio/ComponentInitialize() - . = ..() - AddComponent(/datum/component/empprotection, EMP_PROTECT_WIRES) - -/obj/item/radio/interact(mob/user) - if(unscrewed && !isAI(user)) - wires.interact(user) - add_fingerprint(user) - else - ..() - -/obj/item/radio/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - . = ..() - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - var/ui_width = 360 - var/ui_height = 106 - if(subspace_transmission) - if (channels.len > 0) - ui_height += 6 + channels.len * 21 - else - ui_height += 24 - ui = new(user, src, ui_key, "radio", name, ui_width, ui_height, master_ui, state) - ui.open() - -/obj/item/radio/ui_data(mob/user) - var/list/data = list() - - data["broadcasting"] = broadcasting - data["listening"] = listening - data["frequency"] = frequency - data["minFrequency"] = freerange ? MIN_FREE_FREQ : MIN_FREQ - data["maxFrequency"] = freerange ? MAX_FREE_FREQ : MAX_FREQ - data["freqlock"] = freqlock - data["channels"] = list() - for(var/channel in channels) - data["channels"][channel] = channels[channel] & FREQ_LISTENING - data["command"] = command - data["useCommand"] = use_command - data["subspace"] = subspace_transmission - data["subspaceSwitchable"] = subspace_switchable - data["headset"] = FALSE - - return data - -/obj/item/radio/ui_act(action, params, datum/tgui/ui) - if(..()) - return - switch(action) - if("frequency") - if(freqlock) - return - var/tune = params["tune"] - var/adjust = text2num(params["adjust"]) - if(tune == "input") - var/min = format_frequency(freerange ? MIN_FREE_FREQ : MIN_FREQ) - var/max = format_frequency(freerange ? MAX_FREE_FREQ : MAX_FREQ) - tune = input("Tune frequency ([min]-[max]):", name, format_frequency(frequency)) as null|num - if(!isnull(tune) && !..()) - if (tune < MIN_FREE_FREQ && tune <= MAX_FREE_FREQ / 10) - // allow typing 144.7 to get 1447 - tune *= 10 - . = TRUE - else if(adjust) - tune = frequency + adjust * 10 - . = TRUE - else if(text2num(tune) != null) - tune = tune * 10 - . = TRUE - if(.) - set_frequency(sanitize_frequency(tune, freerange)) - if("listen") - listening = !listening - . = TRUE - if("broadcast") - broadcasting = !broadcasting - . = TRUE - if("channel") - var/channel = params["channel"] - if(!(channel in channels)) - return - if(channels[channel] & FREQ_LISTENING) - channels[channel] &= ~FREQ_LISTENING - else - channels[channel] |= FREQ_LISTENING - . = TRUE - if("command") - use_command = !use_command - . = TRUE - if("subspace") - if(subspace_switchable) - subspace_transmission = !subspace_transmission - if(!subspace_transmission) - channels = list() - else - recalculateChannels() - . = TRUE - -/obj/item/radio/talk_into(atom/movable/M, message, channel, list/spans, datum/language/language) - if(!spans) - spans = list(M.speech_span) - if(!language) - language = M.get_default_language() - INVOKE_ASYNC(src, PROC_REF(talk_into_impl), M, message, channel, spans.Copy(), language) - return ITALICS | REDUCE_RANGE - -/obj/item/radio/proc/talk_into_impl(atom/movable/M, message, channel, list/spans, datum/language/language) - if(!on) - return // the device has to be on - if(!M || !message) - return - if(wires.is_cut(WIRE_TX)) // Permacell and otherwise tampered-with radios - return - if(!M.IsVocal()) - return - - if(use_command) - spans |= SPAN_COMMAND - - /* - Roughly speaking, radios attempt to make a subspace transmission (which - is received, processed, and rebroadcast by the telecomms satellite) and - if that fails, they send a mundane radio transmission. - - Headsets cannot send/receive mundane transmissions, only subspace. - Syndicate radios can hear transmissions on all well-known frequencies. - CentCom radios can hear the CentCom frequency no matter what. - */ - - // From the channel, determine the frequency and get a reference to it. - var/freq - if(channel && channels && channels.len > 0) - if(channel == MODE_DEPARTMENT) - channel = channels[1] - freq = secure_radio_connections[channel] - if (!channels[channel]) // if the channel is turned off, don't broadcast - return - else - freq = frequency - channel = null - - // Nearby active jammers prevent the message from transmitting - var/turf/position = get_turf(src) - for(var/obj/item/jammer/jammer in GLOB.active_jammers) - var/turf/jammer_turf = get_turf(jammer) - if(position.z == jammer_turf.z && (get_dist(position, jammer_turf) <= jammer.range)) - return - - // Determine the identity information which will be attached to the signal. - var/atom/movable/virtualspeaker/speaker = new(null, M, src) - - // Construct the signal - var/datum/signal/subspace/vocal/signal = new(src, freq, speaker, language, message, spans) - - // Independent radios, on the CentCom frequency, reach all independent radios - if (independent && (freq == FREQ_CENTCOM || freq == FREQ_CTF_RED || freq == FREQ_CTF_BLUE)) - signal.data["compression"] = 0 - signal.transmission_method = TRANSMISSION_SUPERSPACE - signal.levels = list(0) // reaches all Z-levels - signal.broadcast() - return - - // All radios make an attempt to use the subspace system first - signal.send_to_receivers() - - // If the radio is subspace-only, that's all it can do - if (subspace_transmission) - return - - // Non-subspace radios will check in a couple of seconds, and if the signal - // was never received, send a mundane broadcast (no headsets). - addtimer(CALLBACK(src, PROC_REF(backup_transmission), signal), 20) - -/obj/item/radio/proc/backup_transmission(datum/signal/subspace/vocal/signal) - var/turf/T = get_turf(src) - if (signal.data["done"] && (T.z in signal.levels)) - return - - // Okay, the signal was never processed, send a mundane broadcast. - signal.data["compression"] = 0 - signal.transmission_method = TRANSMISSION_RADIO - signal.levels = list(T.z) - signal.broadcast() - -/obj/item/radio/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) - . = ..() - if(radio_freq || !broadcasting || get_dist(src, speaker) > canhear_range) - return - - if(message_mode == MODE_WHISPER || message_mode == MODE_WHISPER_CRIT) - // radios don't pick up whispers very well - raw_message = stars(raw_message) - else if(message_mode == MODE_L_HAND || message_mode == MODE_R_HAND) - // try to avoid being heard double - if (loc == speaker && ismob(speaker)) - var/mob/M = speaker - var/idx = M.get_held_index_of_item(src) - // left hands are odd slots - if (idx && (idx % 2) == (message_mode == MODE_L_HAND)) - return - - talk_into(speaker, raw_message, , spans, language=message_language) - -// Checks if this radio can receive on the given frequency. -/obj/item/radio/proc/can_receive(freq, level) - // deny checks - if (!on || !listening || wires.is_cut(WIRE_RX)) - return FALSE - if (freq == FREQ_SYNDICATE && !syndie) - return FALSE - if (freq == FREQ_CENTCOM) - return independent // hard-ignores the z-level check - if (!(0 in level)) - var/turf/position = get_turf(src) - if(!position || !(position.z in level)) - return FALSE - - // allow checks: are we listening on that frequency? - if (freq == frequency) - return TRUE - for(var/ch_name in channels) - if(channels[ch_name] & FREQ_LISTENING) - //the GLOB.radiochannels list is located in communications.dm - if(GLOB.radiochannels[ch_name] == text2num(freq) || syndie) - return TRUE - return FALSE - - -/obj/item/radio/examine(mob/user) - . = ..() - if (frequency && in_range(src, user)) - . += "It is set to broadcast over the [frequency/10] frequency." - if (unscrewed) - . += "It can be attached and modified." - else - . += "It cannot be modified or attached." - -/obj/item/radio/attackby(obj/item/W, mob/user, params) - add_fingerprint(user) - if(W.tool_behaviour == TOOL_SCREWDRIVER) - unscrewed = !unscrewed - if(unscrewed) - to_chat(user, "The radio can now be attached and modified!") - else - to_chat(user, "The radio can no longer be modified or attached!") - else - return ..() - -/obj/item/radio/emp_act(severity) - . = ..() - if (. & EMP_PROTECT_SELF) - return - emped++ //There's been an EMP; better count it - var/curremp = emped //Remember which EMP this was - if (listening && ismob(loc)) // if the radio is turned on and on someone's person they notice - to_chat(loc, "\The [src] overloads.") - broadcasting = FALSE - listening = FALSE - for (var/ch_name in channels) - channels[ch_name] = 0 - on = FALSE - addtimer(CALLBACK(src, PROC_REF(end_emp_effect), curremp), 200) - -/obj/item/radio/proc/end_emp_effect(curremp) - if(emped != curremp) //Don't fix it if it's been EMP'd again - return FALSE - emped = FALSE - on = TRUE - return TRUE - -/////////////////////////////// -//////////Borg Radios////////// -/////////////////////////////// -//Giving borgs their own radio to have some more room to work with -Sieve - -/obj/item/radio/borg - name = "cyborg radio" - subspace_switchable = TRUE - dog_fashion = null - -/obj/item/radio/borg/Initialize(mapload) - . = ..() - -/obj/item/radio/borg/syndicate - syndie = 1 - keyslot = new /obj/item/encryptionkey/syndicate - -/obj/item/radio/borg/syndicate/Initialize() - . = ..() - set_frequency(FREQ_SYNDICATE) - -/obj/item/radio/borg/attackby(obj/item/W, mob/user, params) - - if(W.tool_behaviour == TOOL_SCREWDRIVER) - if(keyslot) - for(var/ch_name in channels) - SSradio.remove_object(src, GLOB.radiochannels[ch_name]) - secure_radio_connections[ch_name] = null - - - if(keyslot) - var/turf/T = get_turf(user) - if(T) - keyslot.forceMove(T) - keyslot = null - - recalculateChannels() - to_chat(user, "I pop out the encryption key in the radio.") - - else - to_chat(user, "This radio doesn't have any encryption keys!") - - else if(istype(W, /obj/item/encryptionkey/)) - if(keyslot) - to_chat(user, "The radio can't hold another key!") - return - - if(!keyslot) - if(!user.transferItemToLoc(W, src)) - return - keyslot = W - - recalculateChannels() - - -/obj/item/radio/off // Station bounced radios, their only difference is spawning with the speakers off, this was made to help the lag. - listening = 0 // And it's nice to have a subtype too for future features. - dog_fashion = /datum/dog_fashion/back diff --git a/code/game/objects/items/devices/reverse_bear_trap.dm b/code/game/objects/items/devices/reverse_bear_trap.dm index 0d91aea563..a00e906484 100644 --- a/code/game/objects/items/devices/reverse_bear_trap.dm +++ b/code/game/objects/items/devices/reverse_bear_trap.dm @@ -25,7 +25,7 @@ /obj/item/reverse_bear_trap/Initialize() . = ..() soundloop = new(list(src)) - soundloop2 = new(list(src)) + soundloop2 = new(src) /obj/item/reverse_bear_trap/Destroy() QDEL_NULL(soundloop) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm deleted file mode 100644 index 1d24d818d9..0000000000 --- a/code/game/objects/items/devices/scanners.dm +++ /dev/null @@ -1,871 +0,0 @@ - -/* - -CONTAINS: -T-RAY -HEALTH ANALYZER -GAS ANALYZER -SLIME SCANNER -NANITE SCANNER -GENE SCANNER - -*/ -/obj/item/t_scanner - name = "\improper T-ray scanner" - desc = "" - custom_price = 10 - icon = 'icons/obj/device.dmi' - icon_state = "t-ray0" - var/on = FALSE - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - custom_materials = list(/datum/material/iron=150) - -/obj/item/t_scanner/suicide_act(mob/living/carbon/user) - user.visible_message("[user] begins to emit terahertz-rays into [user.p_their()] brain with [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return TOXLOSS - -/obj/item/t_scanner/proc/toggle_on() - on = !on - icon_state = copytext(icon_state, 1, length(icon_state))+"[on]" - if(on) - START_PROCESSING(SSobj, src) - else - STOP_PROCESSING(SSobj, src) - -/obj/item/t_scanner/attack_self(mob/user) - toggle_on() - -/obj/item/t_scanner/cyborg_unequip(mob/user) - if(!on) - return - toggle_on() - -/obj/item/t_scanner/process() - if(!on) - STOP_PROCESSING(SSobj, src) - return null - scan() - -/obj/item/t_scanner/proc/scan() - t_ray_scan(loc) - -/proc/t_ray_scan(mob/viewer, flick_time = 8, distance = 3) - if(!ismob(viewer) || !viewer.client) - return - var/list/t_ray_images = list() - for(var/obj/O in orange(distance, viewer) ) - if(O.level != 1) - continue - - if(O.invisibility == INVISIBILITY_MAXIMUM || HAS_TRAIT(O, TRAIT_T_RAY_VISIBLE)) - var/image/I = new(loc = get_turf(O)) - var/mutable_appearance/MA = new(O) - MA.alpha = 128 - MA.dir = O.dir - I.appearance = MA - t_ray_images += I - if(t_ray_images.len) - flick_overlay(t_ray_images, list(viewer.client), flick_time) - -/obj/item/healthanalyzer - name = "health analyzer" - icon = 'icons/obj/device.dmi' - icon_state = "health" - item_state = "healthanalyzer" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - desc = "" - flags_1 = CONDUCT_1 - item_flags = NOBLUDGEON - slot_flags = ITEM_SLOT_BELT - throwforce = 3 - w_class = WEIGHT_CLASS_TINY - throw_speed = 1 - throw_range = 7 - custom_materials = list(/datum/material/iron=200) - var/mode = 1 - var/scanmode = 0 - var/advanced = FALSE - -/obj/item/healthanalyzer/suicide_act(mob/living/carbon/user) - user.visible_message("[user] begins to analyze [user.p_them()]self with [src]! The display shows that [user.p_theyre()] dead!") - return BRUTELOSS - -/obj/item/healthanalyzer/attack_self(mob/user) - if(!scanmode) - to_chat(user, "I switch the health analyzer to scan chemical contents.") - scanmode = 1 - else - to_chat(user, "I switch the health analyzer to check physical health.") - scanmode = 0 - -/obj/item/healthanalyzer/attack(mob/living/M, mob/living/carbon/human/user) - flick("[icon_state]-scan", src) //makes it so that it plays the scan animation upon scanning, including clumsy scanning - - // Clumsiness/brain damage check - - if ((HAS_TRAIT(user, TRAIT_CLUMSY) || HAS_TRAIT(user, TRAIT_DUMB)) && prob(50)) - user.visible_message("[user] analyzes the floor's vitals!", \ - "I stupidly try to analyze the floor's vitals!") - to_chat(user, "Analyzing results for The floor:\n\tOverall status: Healthy") - to_chat(user, "Key: Suffocation/Toxin/Burn/Brute") - to_chat(user, "\tDamage specifics: 0-0-0-0") - to_chat(user, "Body temperature: ???") - return - - user.visible_message("[user] analyzes [M]'s vitals.", \ - "I analyze [M]'s vitals.") - - if(scanmode == 0) - healthscan(user, M, mode, advanced) - else if(scanmode == 1) - chemscan(user, M) - - add_fingerprint(user) - - -// Used by the PDA medical scanner too -/proc/healthscan(mob/user, mob/living/M, mode = 1, advanced = FALSE) - if(isliving(user) && (user.incapacitated() || user.eye_blind)) - return - //Damage specifics - var/oxy_loss = M.getOxyLoss() - var/tox_loss = M.getToxLoss() - var/fire_loss = M.getFireLoss() - var/brute_loss = M.getBruteLoss() - var/mob_status = (M.stat == DEAD ? "Deceased" : "[round(M.health/M.maxHealth,0.01)*100] % healthy") - - if(HAS_TRAIT(M, TRAIT_FAKEDEATH) && !advanced) - mob_status = "Deceased" - oxy_loss = max(rand(1, 40), oxy_loss, (300 - (tox_loss + fire_loss + brute_loss))) // Random oxygen loss - - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.undergoing_cardiac_arrest() && H.stat != DEAD) - to_chat(user, "Subject suffering from heart attack: Apply defibrillation or other electric shock immediately!") - - to_chat(user, "Analyzing results for [M]:\n\tOverall status: [mob_status]") - - // Damage descriptions - if(brute_loss > 10) - to_chat(user, "\t[brute_loss > 50 ? "Severe" : "Minor"] tissue damage detected.") - if(fire_loss > 10) - to_chat(user, "\t[fire_loss > 50 ? "Severe" : "Minor"] burn damage detected.") - if(oxy_loss > 10) - to_chat(user, "\t[oxy_loss > 50 ? "Severe" : "Minor"] oxygen deprivation detected.") - if(tox_loss > 10) - to_chat(user, "\t[tox_loss > 50 ? "Severe" : "Minor"] amount of toxin damage detected.") - if(M.getStaminaLoss()) - to_chat(user, "\tSubject appears to be suffering from fatigue.") - if(advanced) - to_chat(user, "\tFatigue Level: [M.getStaminaLoss()]%.") - if (M.getCloneLoss()) - to_chat(user, "\tSubject appears to have [M.getCloneLoss() > 30 ? "Severe" : "Minor"] cellular damage.") - if(advanced) - to_chat(user, "\tCellular Damage Level: [M.getCloneLoss()].") - if (!M.getorgan(/obj/item/organ/brain)) - to_chat(user, "\tSubject lacks a brain.") - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(LAZYLEN(C.get_traumas())) - var/list/trauma_text = list() - for(var/datum/brain_trauma/B in C.get_traumas()) - var/trauma_desc = "" - switch(B.resilience) - if(TRAUMA_RESILIENCE_SURGERY) - trauma_desc += "severe " - if(TRAUMA_RESILIENCE_LOBOTOMY) - trauma_desc += "deep-rooted " - if(TRAUMA_RESILIENCE_MAGIC, TRAUMA_RESILIENCE_ABSOLUTE) - trauma_desc += "permanent " - trauma_desc += B.scan_desc - trauma_text += trauma_desc - to_chat(user, "\tCerebral traumas detected: subject appears to be suffering from [english_list(trauma_text)].") - if(LAZYLEN(C.roundstart_quirks)) - to_chat(user, "\tSubject has the following physiological traits: [C.get_trait_string()].") - if(advanced) - to_chat(user, "\tBrain Activity Level: [(200 - M.getOrganLoss(ORGAN_SLOT_BRAIN))/2]%.") - - if (M.radiation) - to_chat(user, "\tSubject is irradiated.") - if(advanced) - to_chat(user, "\tRadiation Level: [M.radiation]%.") - - if(advanced && M.hallucinating()) - to_chat(user, "\tSubject is hallucinating.") - - //Eyes and ears - if(advanced) - if(iscarbon(M)) - var/mob/living/carbon/C = M - var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_SLOT_EARS) - to_chat(user, "\t==EAR STATUS==") - if(istype(ears)) - var/healthy = TRUE - if(HAS_TRAIT_FROM(C, TRAIT_DEAF, GENETIC_MUTATION)) - healthy = FALSE - to_chat(user, "\tSubject is genetically deaf.") - else if(HAS_TRAIT(C, TRAIT_DEAF)) - healthy = FALSE - to_chat(user, "\tSubject is deaf.") - else - if(ears.damage) - to_chat(user, "\tSubject has [ears.damage > ears.maxHealth ? "permanent ": "temporary "]hearing damage.") - healthy = FALSE - if(ears.deaf) - to_chat(user, "\tSubject is [ears.damage > ears.maxHealth ? "permanently ": "temporarily "] deaf.") - healthy = FALSE - if(healthy) - to_chat(user, "\tHealthy.") - else - to_chat(user, "\tSubject does not have ears.") - var/obj/item/organ/eyes/eyes = C.getorganslot(ORGAN_SLOT_EYES) - to_chat(user, "\t==EYE STATUS==") - if(istype(eyes)) - var/healthy = TRUE - if(HAS_TRAIT(C, TRAIT_BLIND)) - to_chat(user, "\tSubject is blind.") - healthy = FALSE - if(HAS_TRAIT(C, TRAIT_NEARSIGHT)) - to_chat(user, "\tSubject is nearsighted.") - healthy = FALSE - if(eyes.damage > 30) - to_chat(user, "\tSubject has severe eye damage.") - healthy = FALSE - else if(eyes.damage > 20) - to_chat(user, "\tSubject has significant eye damage.") - healthy = FALSE - else if(eyes.damage) - to_chat(user, "\tSubject has minor eye damage.") - healthy = FALSE - if(healthy) - to_chat(user, "\tHealthy.") - else - to_chat(user, "\tSubject does not have eyes.") - - - // Body part damage report - if(iscarbon(M) && mode == 1) - var/mob/living/carbon/C = M - var/list/damaged = C.get_damaged_bodyparts(1,1) - if(length(damaged)>0 || oxy_loss>0 || tox_loss>0 || fire_loss>0) - var/list/dmgreport = list() - dmgreport += "
    [entry][functions]
    \ - \ - \ - \ - \ - \ - - \ - \ - \ - \ - " - - for(var/o in damaged) - var/obj/item/bodypart/org = o //head, left arm, right arm, etc. - dmgreport += "\ - \ - " - dmgreport += "
    Damage:BruteBurnToxinSuffocation
    Overall:[CEILING(brute_loss,1)][CEILING(fire_loss,1)][CEILING(tox_loss,1)][CEILING(oxy_loss,1)]
    [capitalize(org.name)]:[(org.brute_dam > 0) ? "[CEILING(org.brute_dam,1)]" : "0"][(org.burn_dam > 0) ? "[CEILING(org.burn_dam,1)]" : "0"]
    " - to_chat(user, dmgreport.Join()) - - - //Organ damages report - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/minor_damage - var/major_damage - var/max_damage - var/report_organs = FALSE - - //Piece together the lists to be reported - for(var/O in H.internal_organs) - var/obj/item/organ/organ = O - if(organ.organ_flags & ORGAN_FAILING) - report_organs = TRUE //if we report one organ, we report all organs, even if the lists are empty, just for consistency - if(max_damage) - max_damage += ", " //prelude the organ if we've already reported an organ - max_damage += organ.name //this just slaps the organ name into the string of text - else - max_damage = "\tNon-Functional Organs: " //our initial statement - max_damage += organ.name - else if(organ.damage > organ.high_threshold) - report_organs = TRUE - if(major_damage) - major_damage += ", " - major_damage += organ.name - else - major_damage = "\tSeverely Damaged Organs: " - major_damage += organ.name - else if(organ.damage > organ.low_threshold) - report_organs = TRUE - if(minor_damage) - minor_damage += ", " - minor_damage += organ.name - else - minor_damage = "\tMildly Damaged Organs: " - minor_damage += organ.name - - if(report_organs) //we either finish the list, or set it to be empty if no organs were reported in that category - if(!max_damage) - max_damage = "\tNon-Functional Organs: " - else - max_damage += "" - if(!major_damage) - major_damage = "\tSeverely Damaged Organs: " - else - major_damage += "" - if(!minor_damage) - minor_damage = "\tMildly Damaged Organs: " - else - minor_damage += "" - to_chat(user, minor_damage) - to_chat(user, major_damage) - to_chat(user, max_damage) - //Genetic damage - if(advanced && H.has_dna()) - to_chat(user, "\tGenetic Stability: [H.dna.stability]%.") - - // Species and body temperature - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/datum/species/S = H.dna.species - var/mutant = FALSE - if (H.dna.check_mutation(HULK)) - mutant = TRUE - else if (S.mutantlungs != initial(S.mutantlungs)) - mutant = TRUE - else if (S.mutant_brain != initial(S.mutant_brain)) - mutant = TRUE - else if (S.mutant_heart != initial(S.mutant_heart)) - mutant = TRUE - else if (S.mutanteyes != initial(S.mutanteyes)) - mutant = TRUE - else if (S.mutantears != initial(S.mutantears)) - mutant = TRUE - else if (S.mutanthands != initial(S.mutanthands)) - mutant = TRUE - else if (S.mutanttongue != initial(S.mutanttongue)) - mutant = TRUE - else if (S.mutanttail != initial(S.mutanttail)) - mutant = TRUE - else if (S.mutantliver != initial(S.mutantliver)) - mutant = TRUE - else if (S.mutantstomach != initial(S.mutantstomach)) - mutant = TRUE - else if (S.flying_species != initial(S.flying_species)) - mutant = TRUE - - to_chat(user, "Species: [S.name][mutant ? "-derived mutant" : ""]") - to_chat(user, "Body temperature: [round(M.bodytemperature-T0C,0.1)] °C ([round(M.bodytemperature*1.8-459.67,0.1)] °F)") - - // Time of death - if(M.tod && (M.stat == DEAD || ((HAS_TRAIT(M, TRAIT_FAKEDEATH)) && !advanced))) - to_chat(user, "Time of Death: [M.tod]") - var/tdelta = round(world.time - M.timeofdeath) - if(tdelta < (DEFIB_TIME_LIMIT * 10)) - to_chat(user, "Subject died [DisplayTimeText(tdelta)] ago, defibrillation may be possible!") - - for(var/thing in M.diseases) - var/datum/disease/D = thing - if(!(D.visibility_flags & HIDDEN_SCANNER)) - to_chat(user, "Warning: [D.form] detected\nName: [D.name].\nType: [D.spread_text].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure_text]") - - // Blood Level - if(M.has_dna()) - var/mob/living/carbon/C = M - var/blood_id = C.get_blood_id() - if(blood_id) - if(ishuman(C)) - var/mob/living/carbon/human/H = C - if(H.bleed_rate) - to_chat(user, "Subject is bleeding!") - var/blood_percent = round((C.blood_volume / BLOOD_VOLUME_NORMAL)*100) - var/blood_type = C.dna.blood_type - if(blood_id != /datum/reagent/blood)//special blood substance - var/datum/reagent/R = GLOB.chemical_reagents_list[blood_id] - if(R) - blood_type = R.name - else - blood_type = blood_id - if(C.blood_volume <= BLOOD_VOLUME_SAFE && C.blood_volume > BLOOD_VOLUME_OKAY) - to_chat(user, "Blood level: LOW [blood_percent] %, [C.blood_volume] cl, type: [blood_type]") - else if(C.blood_volume <= BLOOD_VOLUME_OKAY) - to_chat(user, "Blood level: CRITICAL [blood_percent] %, [C.blood_volume] cl, type: [blood_type]") - else - to_chat(user, "Blood level: [blood_percent] %, [C.blood_volume] cl, type: [blood_type]") - - var/cyberimp_detect - for(var/obj/item/organ/cyberimp/CI in C.internal_organs) - if(CI.status == ORGAN_ROBOTIC && !CI.syndicate_implant) - cyberimp_detect += "[C.name] is modified with a [CI.name].
    " - if(cyberimp_detect) - to_chat(user, "Detected cybernetic modifications:") - to_chat(user, "[cyberimp_detect]") - SEND_SIGNAL(M, COMSIG_NANITE_SCAN, user, FALSE) - -/proc/chemscan(mob/living/user, mob/living/M) - if(istype(M)) - if(M.reagents) - if(M.reagents.reagent_list.len) - to_chat(user, "Subject contains the following reagents:") - for(var/datum/reagent/R in M.reagents.reagent_list) - to_chat(user, "[round(R.volume, 0.001)] units of [R.name][R.overdosed == 1 ? " - OVERDOSING" : "."]") - else - to_chat(user, "Subject contains no reagents.") - if(M.reagents.addiction_list.len) - to_chat(user, "Subject is addicted to the following reagents:") - for(var/datum/reagent/R in M.reagents.addiction_list) - to_chat(user, "[R.name]") - else - to_chat(user, "Subject is not addicted to any reagents.") - -/obj/item/healthanalyzer/verb/toggle_mode() - set name = "Switch Verbosity" - set hidden = 1 - - if(usr.incapacitated()) - return - - mode = !mode - switch (mode) - if(1) - to_chat(usr, "The scanner now shows specific limb damage.") - if(0) - to_chat(usr, "The scanner no longer shows limb damage.") - -/obj/item/healthanalyzer/advanced - name = "advanced health analyzer" - icon_state = "health_adv" - desc = "" - advanced = TRUE - -/obj/item/analyzer - desc = "" - name = "analyzer" - custom_price = 10 - icon = 'icons/obj/device.dmi' - icon_state = "analyzer" - item_state = "analyzer" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - w_class = WEIGHT_CLASS_SMALL - flags_1 = CONDUCT_1 - item_flags = NOBLUDGEON - slot_flags = ITEM_SLOT_BELT - throwforce = 0 - throw_speed = 1 - throw_range = 7 - tool_behaviour = TOOL_ANALYZER - custom_materials = list(/datum/material/iron=30, /datum/material/glass=20) - grind_results = list(/datum/reagent/mercury = 5, /datum/reagent/iron = 5, /datum/reagent/silicon = 5) - var/cooldown = FALSE - var/cooldown_time = 250 - var/accuracy // 0 is the best accuracy. - -/obj/item/analyzer/examine(mob/user) - . = ..() - . += "Alt-click [src] to activate the barometer function." - -/obj/item/analyzer/suicide_act(mob/living/carbon/user) - user.visible_message("[user] begins to analyze [user.p_them()]self with [src]! The display shows that [user.p_theyre()] dead!") - return BRUTELOSS - -/obj/item/analyzer/attack_self(mob/user) - add_fingerprint(user) - - if (user.stat || user.eye_blind) - return - - var/turf/location = user.loc - if(!istype(location)) - return - - var/datum/gas_mixture/environment = location.return_air() - - var/pressure = environment.return_pressure() - var/total_moles = environment.total_moles() - - to_chat(user, "Results:") - if(abs(pressure - ONE_ATMOSPHERE) < 10) - to_chat(user, "Pressure: [round(pressure, 0.01)] kPa") - else - to_chat(user, "Pressure: [round(pressure, 0.01)] kPa") - if(total_moles) - var/list/env_gases = environment.gases - - environment.assert_gases(arglist(GLOB.hardcoded_gases)) - var/o2_concentration = env_gases[/datum/gas/oxygen][MOLES]/total_moles - var/n2_concentration = env_gases[/datum/gas/nitrogen][MOLES]/total_moles - var/co2_concentration = env_gases[/datum/gas/carbon_dioxide][MOLES]/total_moles - var/plasma_concentration = env_gases[/datum/gas/plasma][MOLES]/total_moles - - if(abs(n2_concentration - N2STANDARD) < 20) - to_chat(user, "Nitrogen: [round(n2_concentration*100, 0.01)] % ([round(env_gases[/datum/gas/nitrogen][MOLES], 0.01)] mol)") - else - to_chat(user, "Nitrogen: [round(n2_concentration*100, 0.01)] % ([round(env_gases[/datum/gas/nitrogen][MOLES], 0.01)] mol)") - - if(abs(o2_concentration - O2STANDARD) < 2) - to_chat(user, "Oxygen: [round(o2_concentration*100, 0.01)] % ([round(env_gases[/datum/gas/oxygen][MOLES], 0.01)] mol)") - else - to_chat(user, "Oxygen: [round(o2_concentration*100, 0.01)] % ([round(env_gases[/datum/gas/oxygen][MOLES], 0.01)] mol)") - - if(co2_concentration > 0.01) - to_chat(user, "CO2: [round(co2_concentration*100, 0.01)] % ([round(env_gases[/datum/gas/carbon_dioxide][MOLES], 0.01)] mol)") - else - to_chat(user, "CO2: [round(co2_concentration*100, 0.01)] % ([round(env_gases[/datum/gas/carbon_dioxide][MOLES], 0.01)] mol)") - - if(plasma_concentration > 0.005) - to_chat(user, "Plasma: [round(plasma_concentration*100, 0.01)] % ([round(env_gases[/datum/gas/plasma][MOLES], 0.01)] mol)") - else - to_chat(user, "Plasma: [round(plasma_concentration*100, 0.01)] % ([round(env_gases[/datum/gas/plasma][MOLES], 0.01)] mol)") - - environment.garbage_collect() - - for(var/id in env_gases) - if(id in GLOB.hardcoded_gases) - continue - var/gas_concentration = env_gases[id][MOLES]/total_moles - to_chat(user, "[env_gases[id][GAS_META][META_GAS_NAME]]: [round(gas_concentration*100, 0.01)] % ([round(env_gases[id][MOLES], 0.01)] mol)") - to_chat(user, "Temperature: [round(environment.temperature-T0C, 0.01)] °C ([round(environment.temperature, 0.01)] K)") - -/obj/item/analyzer/AltClick(mob/user) //Barometer output for measuring when the next storm happens - ..() - - if(user.canUseTopic(src, BE_CLOSE)) - - if(cooldown) - to_chat(user, "[src]'s barometer function is preparing itself.") - return - - var/turf/T = get_turf(user) - if(!T) - return - - playsound(src, 'sound/blank.ogg', 100) - var/area/user_area = T.loc - var/datum/weather/ongoing_weather = null - - if(!user_area.outdoors) - to_chat(user, "[src]'s barometer function won't work indoors!") - return - - for(var/V in SSweather.curweathers) - var/datum/weather/W = V - if(W.barometer_predictable && (T.z in W.impacted_z_levels) && W.area_type == user_area.type && !(W.stage == END_STAGE)) - ongoing_weather = W - break - - if(ongoing_weather) - if((ongoing_weather.stage == MAIN_STAGE) || (ongoing_weather.stage == WIND_DOWN_STAGE)) - to_chat(user, "[src]'s barometer function can't trace anything while the storm is [ongoing_weather.stage == MAIN_STAGE ? "already here!" : "winding down."]") - return - - to_chat(user, "The next [ongoing_weather] will hit in [butchertime(ongoing_weather.next_hit_time - world.time)].") - if(ongoing_weather.aesthetic) - to_chat(user, "[src]'s barometer function says that the next storm will breeze on by.") - else - var/next_hit = SSweather.next_hit_by_zlevel["[T.z]"] - var/fixed = next_hit ? next_hit - world.time : -1 - if(fixed < 0) - to_chat(user, "[src]'s barometer function was unable to trace any weather patterns.") - else - to_chat(user, "[src]'s barometer function says a storm will land in approximately [butchertime(fixed)].") - cooldown = TRUE - addtimer(CALLBACK(src,TYPE_PROC_REF(/obj/item/analyzer, ping)), cooldown_time) - -/obj/item/analyzer/proc/ping() - if(isliving(loc)) - var/mob/living/L = loc - to_chat(L, "[src]'s barometer function is ready!") - playsound(src, 'sound/blank.ogg', 100) - cooldown = FALSE - -/obj/item/analyzer/proc/butchertime(amount) - if(!amount) - return - if(accuracy) - var/inaccurate = round(accuracy*(1/3)) - if(prob(50)) - amount -= inaccurate - if(prob(50)) - amount += inaccurate - return DisplayTimeText(max(1,amount)) - -/proc/atmosanalyzer_scan(mob/user, atom/target, silent=FALSE) - var/mixture = target.return_analyzable_air() - if(!mixture) - return FALSE - - var/icon = target - if(!silent && isliving(user)) - user.visible_message("[user] has used the analyzer on [icon2html(icon, viewers(user))] [target].", "I use the analyzer on [icon2html(icon, user)] [target].") - to_chat(user, "Results of analysis of [icon2html(icon, user)] [target].") - - var/list/airs = islist(mixture) ? mixture : list(mixture) - for(var/g in airs) - if(airs.len > 1) //not a unary gas mixture - to_chat(user, "Node [airs.Find(g)]") - var/datum/gas_mixture/air_contents = g - - var/total_moles = air_contents.total_moles() - var/pressure = air_contents.return_pressure() - var/volume = air_contents.return_volume() //could just do mixture.volume... but safety, I guess? - var/temperature = air_contents.temperature - var/cached_scan_results = air_contents.analyzer_results - - if(total_moles > 0) - to_chat(user, "Moles: [round(total_moles, 0.01)] mol") - to_chat(user, "Volume: [volume] L") - to_chat(user, "Pressure: [round(pressure,0.01)] kPa") - - var/list/cached_gases = air_contents.gases - for(var/id in cached_gases) - var/gas_concentration = cached_gases[id][MOLES]/total_moles - to_chat(user, "[cached_gases[id][GAS_META][META_GAS_NAME]]: [round(gas_concentration*100, 0.01)] % ([round(cached_gases[id][MOLES], 0.01)] mol)") - to_chat(user, "Temperature: [round(temperature - T0C,0.01)] °C ([round(temperature, 0.01)] K)") - - else - if(airs.len > 1) - to_chat(user, "This node is empty!") - else - to_chat(user, "[target] is empty!") - - if(cached_scan_results && cached_scan_results["fusion"]) //notify the user if a fusion reaction was detected - var/instability = round(cached_scan_results["fusion"], 0.01) - to_chat(user, "Large amounts of free neutrons detected in the air indicate that a fusion reaction took place.") - to_chat(user, "Instability of the last fusion reaction: [instability].") - return TRUE - -//slime scanner - -/obj/item/slime_scanner - name = "slime scanner" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "adv_spectrometer" - item_state = "analyzer" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - w_class = WEIGHT_CLASS_SMALL - flags_1 = CONDUCT_1 - throwforce = 0 - throw_speed = 1 - throw_range = 7 - custom_materials = list(/datum/material/iron=30, /datum/material/glass=20) - -/obj/item/slime_scanner/attack(mob/living/M, mob/living/user) - if(user.stat || user.eye_blind) - return - if (!isslime(M)) - to_chat(user, "This device can only scan slimes!") - return - var/mob/living/simple_animal/slime/T = M - slime_scan(T, user) - -/proc/slime_scan(mob/living/simple_animal/slime/T, mob/living/user) - to_chat(user, "========================") - to_chat(user, "Slime scan results:") - to_chat(user, "[T.colour] [T.is_adult ? "adult" : "baby"] slime") - to_chat(user, "Nutrition: [T.nutrition]/[T.get_max_nutrition()]") - if (T.nutrition < T.get_starve_nutrition()) - to_chat(user, "Warning: slime is starving!") - else if (T.nutrition < T.get_hunger_nutrition()) - to_chat(user, "Warning: slime is hungry") - to_chat(user, "Electric change strength: [T.powerlevel]") - to_chat(user, "Health: [round(T.health/T.maxHealth,0.01)*100]%") - if (T.slime_mutation[4] == T.colour) - to_chat(user, "This slime does not evolve any further.") - else - if (T.slime_mutation[3] == T.slime_mutation[4]) - if (T.slime_mutation[2] == T.slime_mutation[1]) - to_chat(user, "Possible mutation: [T.slime_mutation[3]]") - to_chat(user, "Genetic destability: [T.mutation_chance/2] % chance of mutation on splitting") - else - to_chat(user, "Possible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]] (x2)") - to_chat(user, "Genetic destability: [T.mutation_chance] % chance of mutation on splitting") - else - to_chat(user, "Possible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]], [T.slime_mutation[4]]") - to_chat(user, "Genetic destability: [T.mutation_chance] % chance of mutation on splitting") - if (T.cores > 1) - to_chat(user, "Multiple cores detected") - to_chat(user, "Growth progress: [T.amount_grown]/[SLIME_EVOLUTION_THRESHOLD]") - if(T.effectmod) - to_chat(user, "Core mutation in progress: [T.effectmod]") - to_chat(user, "Progress in core mutation: [T.applied] / [SLIME_EXTRACT_CROSSING_REQUIRED]") - to_chat(user, "========================") - - -/obj/item/nanite_scanner - name = "nanite scanner" - icon = 'icons/obj/device.dmi' - icon_state = "nanite_scanner" - item_state = "nanite_remote" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - desc = "" - flags_1 = CONDUCT_1 - item_flags = NOBLUDGEON - slot_flags = ITEM_SLOT_BELT - throwforce = 3 - w_class = WEIGHT_CLASS_TINY - throw_speed = 1 - throw_range = 7 - custom_materials = list(/datum/material/iron=200) - -/obj/item/nanite_scanner/attack(mob/living/M, mob/living/carbon/human/user) - user.visible_message("[user] analyzes [M]'s nanites.", \ - "I analyze [M]'s nanites.") - - add_fingerprint(user) - - var/response = SEND_SIGNAL(M, COMSIG_NANITE_SCAN, user, TRUE) - if(!response) - to_chat(user, "No nanites detected in the subject.") - -/obj/item/sequence_scanner - name = "genetic sequence scanner" - icon = 'icons/obj/device.dmi' - icon_state = "gene" - item_state = "healthanalyzer" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - desc = "" - flags_1 = CONDUCT_1 - item_flags = NOBLUDGEON - slot_flags = ITEM_SLOT_BELT - throwforce = 3 - w_class = WEIGHT_CLASS_TINY - throw_speed = 1 - throw_range = 7 - custom_materials = list(/datum/material/iron=200) - var/list/discovered = list() //hit a dna console to update the scanners database - var/list/buffer - var/ready = TRUE - var/cooldown = 200 - -/obj/item/sequence_scanner/attack(mob/living/M, mob/living/carbon/human/user) - add_fingerprint(user) - if (!HAS_TRAIT(M, TRAIT_RADIMMUNE) && !HAS_TRAIT(M, TRAIT_BADDNA)) //no scanning if its a husk or DNA-less Species - user.visible_message("[user] analyzes [M]'s genetic sequence.", \ - "I analyze [M]'s genetic sequence.") - gene_scan(M, user) - - else - user.visible_message("[user] failed to analyse [M]'s genetic sequence.", "[M] has no readable genetic sequence!") - -/obj/item/sequence_scanner/attack_self(mob/user) - display_sequence(user) - -/obj/item/sequence_scanner/attack_self_tk(mob/user) - return - -/obj/item/sequence_scanner/afterattack(obj/O, mob/user, proximity) - . = ..() - if(!istype(O) || !proximity) - return - - if(istype(O, /obj/machinery/computer/scan_consolenew)) - var/obj/machinery/computer/scan_consolenew/C = O - if(C.stored_research) - to_chat(user, "[name] linked to central research database.") - discovered = C.stored_research.discovered_mutations - else - to_chat(user,"No database to update from.") - -/obj/item/sequence_scanner/proc/gene_scan(mob/living/carbon/C, mob/living/user) - if(!iscarbon(C) || !C.has_dna()) - return - buffer = C.dna.mutation_index - to_chat(user, "Subject [C.name]'s DNA sequence has been saved to buffer.") - if(LAZYLEN(buffer)) - for(var/A in buffer) - to_chat(user, "[get_display_name(A)]") - - -/obj/item/sequence_scanner/proc/display_sequence(mob/living/user) - if(!LAZYLEN(buffer) || !ready) - return - var/list/options = list() - for(var/A in buffer) - options += get_display_name(A) - - var/answer = input(user, "Analyze Potential", "Sequence Analyzer") as null|anything in sortList(options) - if(answer && ready && user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - var/sequence - for(var/A in buffer) //this physically hurts but i dont know what anything else short of an assoc list - if(get_display_name(A) == answer) - sequence = buffer[A] - break - - if(sequence) - var/display - for(var/i in 0 to length(sequence) / DNA_MUTATION_BLOCKS-1) - if(i) - display += "-" - display += copytext(sequence, 1 + i*DNA_MUTATION_BLOCKS, DNA_MUTATION_BLOCKS*(1+i) + 1) - - to_chat(user, "[display]
    ") - - ready = FALSE - icon_state = "[icon_state]_recharging" - addtimer(CALLBACK(src, PROC_REF(recharge)), cooldown, TIMER_UNIQUE) - -/obj/item/sequence_scanner/proc/recharge() - icon_state = initial(icon_state) - ready = TRUE - -/obj/item/sequence_scanner/proc/get_display_name(mutation) - var/datum/mutation/human/HM = GET_INITIALIZED_MUTATION(mutation) - if(!HM) - return "ERROR" - if(mutation in discovered) - return "[HM.name] ([HM.alias])" - else - return HM.alias - -/obj/item/scanner_wand - name = "kiosk scanner wand" - icon = 'icons/obj/device.dmi' - icon_state = "scanner_wand" - item_state = "healthanalyzer" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - desc = "" - force = 0 - throwforce = 0 - w_class = WEIGHT_CLASS_TINY - var/selected_target = null - -/obj/item/scanner_wand/attack(mob/living/M, mob/living/carbon/human/user) - flick("[icon_state]_active", src) //nice little visual flash when scanning someone else. - - if((HAS_TRAIT(user, TRAIT_CLUMSY) || HAS_TRAIT(user, TRAIT_DUMB)) && prob(25)) - user.visible_message("[user] targets himself for scanning.", \ - to_chat(user, "I try scanning [M], before realizing you're holding the scanner backwards. Whoops.")) - selected_target = user - return - - if(!ishuman(M)) - to_chat(user, "I can only scan human-like, non-robotic beings.") - selected_target = null - return - - user.visible_message("[user] targets [M] for scanning.", \ - "I target [M] vitals.") - selected_target = M - return - -/obj/item/scanner_wand/attack_self(mob/user) - to_chat(user, "I clear the scanner's target.") - selected_target = null - -/obj/item/scanner_wand/proc/return_patient() - var/returned_target = selected_target - return returned_target diff --git a/code/game/objects/items/devices/sensor_device.dm b/code/game/objects/items/devices/sensor_device.dm deleted file mode 100644 index efbd7620d4..0000000000 --- a/code/game/objects/items/devices/sensor_device.dm +++ /dev/null @@ -1,11 +0,0 @@ -/obj/item/sensor_device - name = "handheld crew monitor" //Thanks to Gun Hog for the name! - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "scanner" - w_class = WEIGHT_CLASS_SMALL - slot_flags = ITEM_SLOT_BELT - custom_price = 100 - -/obj/item/sensor_device/attack_self(mob/user) - GLOB.crewmonitor.show(user,src) //Proc already exists, just had to call it diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm deleted file mode 100644 index 329a577480..0000000000 --- a/code/game/objects/items/devices/traitordevices.dm +++ /dev/null @@ -1,253 +0,0 @@ -/* - -Miscellaneous traitor devices - -BATTERER - -RADIOACTIVE MICROLASER - -*/ - -/* - -The Batterer, like a flashbang but 50% chance to knock people over. Can be either very -effective or pretty fucking useless. - -*/ - -/obj/item/batterer - name = "mind batterer" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "batterer" - throwforce = 5 - w_class = WEIGHT_CLASS_TINY - throw_speed = 1 - throw_range = 7 - flags_1 = CONDUCT_1 - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - - var/times_used = 0 //Number of times it's been used. - var/max_uses = 2 - - -/obj/item/batterer/attack_self(mob/living/carbon/user, flag = 0, emp = 0) - if(!user) return - if(times_used >= max_uses) - to_chat(user, "The mind batterer has been burnt out!") - return - - log_combat(user, null, "knocked down people in the area", src) - - for(var/mob/living/carbon/human/M in urange(10, user, 1)) - if(prob(50)) - - M.Paralyze(rand(200,400)) - to_chat(M, "I feel a tremendous, paralyzing wave flood your mind.") - - else - to_chat(M, "I feel a sudden, electric jolt travel through your head.") - - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - to_chat(user, "I trigger [src].") - times_used += 1 - if(times_used >= max_uses) - icon_state = "battererburnt" - -/* - The radioactive microlaser, a device disguised as a health analyzer used to irradiate people. - - The strength of the radiation is determined by the 'intensity' setting, while the delay between - the scan and the irradiation kicking in is determined by the wavelength. - - Each scan will cause the microlaser to have a brief cooldown period. Higher intensity will increase - the cooldown, while higher wavelength will decrease it. - - Wavelength is also slightly increased by the intensity as well. -*/ - -/obj/item/healthanalyzer/rad_laser - custom_materials = list(/datum/material/iron=400) - var/irradiate = 1 - var/intensity = 10 // how much damage the radiation does - var/wavelength = 10 // time it takes for the radiation to kick in, in seconds - var/used = 0 // is it cooling down? - var/stealth = FALSE - -/obj/item/healthanalyzer/rad_laser/attack(mob/living/M, mob/living/user) - if(!stealth || !irradiate) - ..() - if(!irradiate) - return - if(!used) - log_combat(user, M, "irradiated", src) - var/cooldown = GetCooldown() - used = 1 - icon_state = "health1" - handle_cooldown(cooldown) // splits off to handle the cooldown while handling wavelength - to_chat(user, "Successfully irradiated [M].") - spawn((wavelength+(intensity*4))*5) - if(M) - if(intensity >= 5) - M.apply_effect(round(intensity/0.075), EFFECT_UNCONSCIOUS) - M.rad_act(intensity*10) - else - to_chat(user, "The radioactive microlaser is still recharging.") - -/obj/item/healthanalyzer/rad_laser/proc/handle_cooldown(cooldown) - spawn(cooldown) - used = 0 - icon_state = "health" - -/obj/item/healthanalyzer/rad_laser/attack_self(mob/user) - interact(user) - -/obj/item/healthanalyzer/rad_laser/proc/GetCooldown() - return round(max(10, (stealth*30 + intensity*5 - wavelength/4))) - -/obj/item/healthanalyzer/rad_laser/interact(mob/user) - ui_interact(user) - -/obj/item/healthanalyzer/rad_laser/ui_interact(mob/user) - . = ..() - - var/dat = "Irradiation: [irradiate ? "On" : "Off"]
    " - dat += "Stealth Mode (NOTE: Deactivates automatically while Irradiation is off): [stealth ? "On" : "Off"]
    " - dat += "Scan Mode: " - if(!scanmode) - dat += "Scan Health" - else if(scanmode == 1) - dat += "Scan Reagents" - else - dat += "Disabled" - dat += "

    " - - dat += {" - Radiation Intensity: - -- - [intensity] - ++
    - - Radiation Wavelength: - -- - [(wavelength+(intensity*4))] - ++
    - Laser Cooldown: [DisplayTimeText(GetCooldown())]
    - "} - - var/datum/browser/popup = new(user, "radlaser", "Radioactive Microlaser Interface", 400, 240) - popup.set_content(dat) - popup.open() - -/obj/item/healthanalyzer/rad_laser/Topic(href, href_list) - if(!usr.canUseTopic(src)) - return 1 - - usr.set_machine(src) - if(href_list["rad"]) - irradiate = !irradiate - - else if(href_list["stealthy"]) - stealth = !stealth - - else if(href_list["mode"]) - scanmode += 1 - if(scanmode > 2) - scanmode = 0 - - else if(href_list["radint"]) - var/amount = text2num(href_list["radint"]) - amount += intensity - intensity = max(1,(min(20,amount))) - - else if(href_list["radwav"]) - var/amount = text2num(href_list["radwav"]) - amount += wavelength - wavelength = max(0,(min(120,amount))) - - attack_self(usr) - add_fingerprint(usr) - return - -/obj/item/shadowcloak - name = "cloaker belt" - desc = "" - icon = 'icons/obj/clothing/belts.dmi' - icon_state = "utilitybelt" - item_state = "utility" - slot_flags = ITEM_SLOT_BELT - attack_verb = list("whipped", "lashed", "disciplined") - - var/mob/living/carbon/human/user = null - var/charge = 300 - var/max_charge = 300 - var/on = FALSE - var/old_alpha = 0 - actions_types = list(/datum/action/item_action/toggle) - -/obj/item/shadowcloak/ui_action_click(mob/user) - if(user.get_item_by_slot(SLOT_BELT) == src) - if(!on) - Activate(usr) - else - Deactivate() - return - -/obj/item/shadowcloak/item_action_slot_check(slot, mob/user) - if(slot == SLOT_BELT) - return 1 - -/obj/item/shadowcloak/proc/Activate(mob/living/carbon/human/user) - if(!user) - return - to_chat(user, "I activate [src].") - src.user = user - START_PROCESSING(SSobj, src) - old_alpha = user.alpha - on = TRUE - -/obj/item/shadowcloak/proc/Deactivate() - to_chat(user, "I deactivate [src].") - STOP_PROCESSING(SSobj, src) - if(user) - user.alpha = old_alpha - on = FALSE - user = null - -/obj/item/shadowcloak/dropped(mob/user) - ..() - if(user && user.get_item_by_slot(SLOT_BELT) != src) - Deactivate() - -/obj/item/shadowcloak/process() - if(user.get_item_by_slot(SLOT_BELT) != src) - Deactivate() - return - var/turf/T = get_turf(src) - if(on) - var/lumcount = T.get_lumcount() - if(lumcount > 0.3) - charge = max(0,charge - 25)//Quick decrease in light - else - charge = min(max_charge,charge + 50) //Charge in the dark - animate(user,alpha = CLAMP(255 - charge,0,255),time = 10) - - -/obj/item/jammer - name = "radio jammer" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "jammer" - var/active = FALSE - var/range = 12 - -/obj/item/jammer/attack_self(mob/user) - to_chat(user,"I [active ? "deactivate" : "activate"] [src].") - active = !active - if(active) - GLOB.active_jammers |= src - else - GLOB.active_jammers -= src - update_icon() diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 3eca7570ea..91e5f6b32b 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -198,10 +198,7 @@ var/attachment if(attached_device) - if(istype(attached_device, /obj/item/assembly/signaler)) - attachment = "[attached_device]" - else - attachment = attached_device + attachment = attached_device var/admin_attachment_message var/attachment_message diff --git a/code/game/objects/items/dice.dm b/code/game/objects/items/dice.dm index b9d34b0a84..d979a3f75d 100644 --- a/code/game/objects/items/dice.dm +++ b/code/game/objects/items/dice.dm @@ -216,9 +216,3 @@ /obj/item/dice/update_icon() cut_overlays() add_overlay("[src.icon_state]-[src.result]") - -/obj/item/dice/microwave_act(obj/machinery/microwave/M) - if(microwave_riggable) - rigged = DICE_BASICALLY_RIGGED - rigged_value = result - ..(M) diff --git a/code/game/objects/items/dna_injector.dm b/code/game/objects/items/dna_injector.dm index 19d3b2853d..c2f3ea87ce 100644 --- a/code/game/objects/items/dna_injector.dm +++ b/code/game/objects/items/dna_injector.dm @@ -305,13 +305,6 @@ name = "\improper DNA injector (Anti-Void)" remove_mutations = list(VOID) -/obj/item/dnainjector/antenna - name = "\improper DNA injector (Antenna)" - add_mutations = list(ANTENNA) - -/obj/item/dnainjector/antiantenna - name = "\improper DNA injector (Anti-Antenna)" - remove_mutations = list(ANTENNA) /obj/item/dnainjector/paranoia name = "\improper DNA injector (Paranoia)" @@ -321,14 +314,6 @@ name = "\improper DNA injector (Anti-Paranoia)" remove_mutations = list(PARANOIA) -/obj/item/dnainjector/mindread - name = "\improper DNA injector (Mindread)" - add_mutations = list(MINDREAD) - -/obj/item/dnainjector/antimindread - name = "\improper DNA injector (Anti-Mindread)" - remove_mutations = list(MINDREAD) - /obj/item/dnainjector/radioactive name = "\improper DNA injector (Radioactive)" add_mutations = list(RADIOACTIVE) diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm index c0af4ba859..593154a4ab 100644 --- a/code/game/objects/items/extinguisher.dm +++ b/code/game/objects/items/extinguisher.dm @@ -237,13 +237,3 @@ theturf.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS) user.visible_message("[user] empties out \the [src] onto the floor using the release valve.", "I quietly empty out \the [src] using its release valve.") - -//firebot assembly -/obj/item/extinguisher/attackby(obj/O, mob/user, params) - if(istype(O, /obj/item/bodypart/l_arm/robot) || istype(O, /obj/item/bodypart/r_arm/robot)) - to_chat(user, "I add [O] to [src].") - qdel(O) - qdel(src) - user.put_in_hands(new /obj/item/bot_assembly/firebot) - else - ..() diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm index 0db029592e..9212a0ad8c 100644 --- a/code/game/objects/items/granters.dm +++ b/code/game/objects/items/granters.dm @@ -276,18 +276,6 @@ else to_chat(user,"I say thee neigh") //It still lives here -/obj/item/book/granter/spell/charge - spell = /obj/effect/proc_holder/spell/targeted/charge - spellname = "charge" - icon_state ="bookcharge" - desc = "" - remarks = list("I feel ALIVE!", "I CAN TASTE THE MANA!", "What a RUSH!", "I'm FLYING through these pages!", "THIS GENIUS IS MAKING IT!", "This book is ACTION PAcKED!", "HE'S DONE IT", "LETS GOOOOOOOOOOOO") - -/obj/item/book/granter/spell/charge/recoil(mob/user) - ..() - to_chat(user,"[src] suddenly feels very warm!") - empulse(src, 1, 1) - /obj/item/book/granter/spell/summonitem spell = /obj/effect/proc_holder/spell/targeted/summonitem spellname = "instant summons" diff --git a/code/game/objects/items/grenades/chem_grenade.dm b/code/game/objects/items/grenades/chem_grenade.dm deleted file mode 100644 index c344f73f4b..0000000000 --- a/code/game/objects/items/grenades/chem_grenade.dm +++ /dev/null @@ -1,583 +0,0 @@ -/obj/item/grenade/chem_grenade - name = "chemical grenade" - desc = "" - icon_state = "chemg" - item_state = "flashbang" - w_class = WEIGHT_CLASS_SMALL - force = 2 - var/stage = GRENADE_EMPTY - var/list/obj/item/reagent_containers/glass/beakers = list() - var/list/allowed_containers = list(/obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle) - var/list/banned_containers = list(/obj/item/reagent_containers/glass/beaker/bluespace) //Containers to exclude from specific grenade subtypes - var/affected_area = 3 - var/ignition_temp = 10 // The amount of heat added to the reagents when this grenade goes off. - var/threatscale = 1 // Used by advanced grenades to make them slightly more worthy. - var/no_splash = FALSE //If the grenade deletes even if it has no reagents to splash with. Used for slime core reactions. - var/casedesc = ""// Appears when examining empty casings. - var/obj/item/assembly/prox_sensor/landminemode = null - -/obj/item/grenade/chem_grenade/ComponentInitialize() - . = ..() - AddComponent(/datum/component/empprotection, EMP_PROTECT_WIRES) - -/obj/item/grenade/chem_grenade/Initialize() - . = ..() - create_reagents(1000) - stage_change() // If no argument is set, it will change the stage to the current stage, useful for stock grenades that start READY. - wires = new /datum/wires/explosive/chem_grenade(src) - -/obj/item/grenade/chem_grenade/examine(mob/user) - display_timer = (stage == GRENADE_READY) //show/hide the timer based on assembly state - . = ..() - if(user.can_see_reagents()) - if(beakers.len) - . += "I scan the grenade and detect the following reagents:" - for(var/obj/item/reagent_containers/glass/G in beakers) - for(var/datum/reagent/R in G.reagents.reagent_list) - . += "[R.volume] units of [R.name] in the [G.name]." - if(beakers.len == 1) - . += "I detect no second beaker in the grenade." - else - . += "I scan the grenade, but detect nothing." - else if(stage != GRENADE_READY && beakers.len) - if(beakers.len == 2 && beakers[1].name == beakers[2].name) - . += "I see two [beakers[1].name]s inside the grenade." - else - for(var/obj/item/reagent_containers/glass/G in beakers) - . += "I see a [G.name] inside the grenade." - -/obj/item/grenade/chem_grenade/attack_self(mob/user) - if(stage == GRENADE_READY && !active) - ..() - if(stage == GRENADE_WIRED) - wires.interact(user) - -/obj/item/grenade/chem_grenade/attackby(obj/item/I, mob/user, params) - if(istype(I,/obj/item/assembly) && stage == GRENADE_WIRED) - wires.interact(user) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - if(stage == GRENADE_WIRED) - if(beakers.len) - stage_change(GRENADE_READY) - to_chat(user, "I lock the [initial(name)] assembly.") - I.play_tool_sound(src, 25) - else - to_chat(user, "I need to add at least one beaker before locking the [initial(name)] assembly!") - else if(stage == GRENADE_READY) - det_time = det_time == 50 ? 30 : 50 //toggle between 30 and 50 - if(landminemode) - landminemode.time = det_time * 0.1 //overwrites the proxy sensor activation timer - - to_chat(user, "I modify the time delay. It's set for [DisplayTimeText(det_time)].") - else - to_chat(user, "I need to add a wire!") - return - else if(stage == GRENADE_WIRED && is_type_in_list(I, allowed_containers)) - . = TRUE //no afterattack - if(is_type_in_list(I, banned_containers)) - to_chat(user, "[src] is too small to fit [I]!") // this one hits home huh anon? - return - if(beakers.len == 2) - to_chat(user, "[src] can not hold more containers!") - return - else - if(I.reagents.total_volume) - if(!user.transferItemToLoc(I, src)) - return - to_chat(user, "I add [I] to the [initial(name)] assembly.") - beakers += I - var/reagent_list = pretty_string_from_reagent_list(I.reagents) - user.log_message("inserted [I] ([reagent_list]) into [src]",LOG_GAME) - else - to_chat(user, "[I] is empty!") - - else if(stage == GRENADE_EMPTY && istype(I, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = I - if (C.use(1)) - det_time = 50 // In case the cable_coil was removed and readded. - stage_change(GRENADE_WIRED) - to_chat(user, "I rig the [initial(name)] assembly.") - else - to_chat(user, "I need one length of coil to wire the assembly!") - return - - else if(stage == GRENADE_READY && I.tool_behaviour == TOOL_WIRECUTTER && !active) - stage_change(GRENADE_WIRED) - to_chat(user, "I unlock the [initial(name)] assembly.") - - else if(stage == GRENADE_WIRED && I.tool_behaviour == TOOL_WRENCH) - if(beakers.len) - for(var/obj/O in beakers) - O.forceMove(drop_location()) - if(!O.reagents) - continue - var/reagent_list = pretty_string_from_reagent_list(O.reagents) - user.log_message("removed [O] ([reagent_list]) from [src]", LOG_GAME) - beakers = list() - to_chat(user, "I open the [initial(name)] assembly and remove the payload.") - wires.detach_assembly(wires.get_wire(1)) - return - new /obj/item/stack/cable_coil(get_turf(src),1) - stage_change(GRENADE_EMPTY) - to_chat(user, "I remove the activation mechanism from the [initial(name)] assembly.") - else - return ..() - -/obj/item/grenade/chem_grenade/proc/stage_change(N) - if(N) - stage = N - if(stage == GRENADE_EMPTY) - name = "[initial(name)] casing" - desc = "" - icon_state = initial(icon_state) - else if(stage == GRENADE_WIRED) - name = "unsecured [initial(name)]" - desc = "" - icon_state = "[initial(icon_state)]_ass" - else if(stage == GRENADE_READY) - name = initial(name) - desc = initial(desc) - icon_state = "[initial(icon_state)]_locked" - -/obj/item/grenade/chem_grenade/on_found(mob/finder) - var/obj/item/assembly/A = wires.get_attached(wires.get_wire(1)) - if(A) - A.on_found(finder) - -/obj/item/grenade/chem_grenade/log_grenade(mob/user, turf/T) - var/reagent_string = "" - var/beaker_number = 1 - for(var/obj/exploded_beaker in beakers) - if(!exploded_beaker.reagents) - continue - reagent_string += " ([exploded_beaker.name] [beaker_number++] : " + pretty_string_from_reagent_list(exploded_beaker.reagents.reagent_list) + ");" - if(landminemode) - log_bomber(user, "activated a proxy", src, "containing:[reagent_string]") - else - log_bomber(user, "primed a", src, "containing:[reagent_string]") - -/obj/item/grenade/chem_grenade/preprime(mob/user, delayoverride, msg = TRUE, volume = 60) - var/turf/T = get_turf(src) - log_grenade(user, T) //Inbuilt admin procs already handle null users - if(user) - add_fingerprint(user) - if(msg) - if(landminemode) - to_chat(user, "I prime [src], activating its proximity sensor.") - else - to_chat(user, "I prime [src]! [DisplayTimeText(det_time)]!") - playsound(src, 'sound/blank.ogg', volume, TRUE) - icon_state = initial(icon_state) + "_active" - if(landminemode) - landminemode.activate() - return - active = TRUE - addtimer(CALLBACK(src, PROC_REF(prime)), isnull(delayoverride)? det_time : delayoverride) - -/obj/item/grenade/chem_grenade/prime() - if(stage != GRENADE_READY) - return - - var/list/datum/reagents/reactants = list() - for(var/obj/item/reagent_containers/glass/G in beakers) - reactants += G.reagents - - var/turf/detonation_turf = get_turf(src) - - if(!chem_splash(detonation_turf, affected_area, reactants, ignition_temp, threatscale) && !no_splash) - playsound(src, 'sound/blank.ogg', 50, TRUE) - if(beakers.len) - for(var/obj/O in beakers) - O.forceMove(drop_location()) - beakers = list() - stage_change(GRENADE_EMPTY) - active = FALSE - return -// logs from custom assemblies priming are handled by the wire component - log_game("A grenade detonated at [AREACOORD(detonation_turf)]") - - update_mob() - - qdel(src) - -//Large chem grenades accept slime cores and use the appropriately. -/obj/item/grenade/chem_grenade/large - name = "large grenade" - desc = "" - desc = "" - icon_state = "large_grenade" - allowed_containers = list(/obj/item/reagent_containers/glass, /obj/item/reagent_containers/food/condiment, /obj/item/reagent_containers/food/drinks) - banned_containers = list() - affected_area = 5 - ignition_temp = 25 // Large grenades are slightly more effective at setting off heat-sensitive mixtures than smaller grenades. - threatscale = 1.1 // 10% more effective. - -/obj/item/grenade/chem_grenade/large/prime() - if(stage != GRENADE_READY) - return - - for(var/obj/item/slime_extract/S in beakers) - if(S.Uses) - for(var/obj/item/reagent_containers/glass/G in beakers) - G.reagents.trans_to(S, G.reagents.total_volume) - - //If there is still a core (sometimes it's used up) - //and there are reagents left, behave normally, - //otherwise drop it on the ground for timed reactions like gold. - - if(S) - if(S.reagents && S.reagents.total_volume) - for(var/obj/item/reagent_containers/glass/G in beakers) - S.reagents.trans_to(G, S.reagents.total_volume) - else - S.forceMove(get_turf(src)) - no_splash = TRUE - ..() - - //I tried to just put it in the allowed_containers list but - //if you do that it must have reagents. If you're going to - //make a special case you might as well do it explicitly. -Sayu -/obj/item/grenade/chem_grenade/large/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/slime_extract) && stage == GRENADE_WIRED) - if(!user.transferItemToLoc(I, src)) - return - to_chat(user, "I add [I] to the [initial(name)] assembly.") - beakers += I - else - return ..() - -/obj/item/grenade/chem_grenade/cryo // Intended for rare cryogenic mixes. Cools the area moderately upon detonation. - name = "cryo grenade" - desc = "" -// casDesc = "" - icon_state = "cryog" - affected_area = 2 - ignition_temp = -100 - -/obj/item/grenade/chem_grenade/pyro // Intended for pyrotechnical mixes. Produces a small fire upon detonation, igniting potentially flammable mixtures. - name = "pyro grenade" - desc = "" -// casdesc = "" - icon_state = "pyrog" - ignition_temp = 500 // This is enough to expose a hotspot. - -/obj/item/grenade/chem_grenade/adv_release // Intended for weaker, but longer lasting effects. Could have some interesting uses. - name = "advanced release grenade" - desc = "" - casedesc = "" - icon_state = "timeg" - var/unit_spread = 10 // Amount of units per repeat. Can be altered with a multitool. - -/obj/item/grenade/chem_grenade/adv_release/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_MULTITOOL && !active) - var/newspread = text2num(stripped_input(user, "Please enter a new spread amount", name)) - if (newspread != null && user.canUseTopic(src, BE_CLOSE)) - newspread = round(newspread) - unit_spread = CLAMP(newspread, 5, 100) - to_chat(user, "I set the time release to [unit_spread] units per detonation.") - if (newspread != unit_spread) - to_chat(user, "The new value is out of bounds. Minimum spread is 5 units, maximum is 100 units.") - ..() - -/obj/item/grenade/chem_grenade/adv_release/prime() - if(stage != GRENADE_READY) - return - - var/total_volume = 0 - for(var/obj/item/reagent_containers/RC in beakers) - total_volume += RC.reagents.total_volume - if(!total_volume) - qdel(src) - return - var/fraction = unit_spread/total_volume - var/datum/reagents/reactants = new(unit_spread) - reactants.my_atom = src - for(var/obj/item/reagent_containers/RC in beakers) - RC.reagents.trans_to(reactants, RC.reagents.total_volume*fraction, threatscale, 1, 1) - chem_splash(get_turf(src), affected_area, list(reactants), ignition_temp, threatscale) - - var/turf/DT = get_turf(src) - addtimer(CALLBACK(src, PROC_REF(prime)), det_time) - log_game("A grenade detonated at [AREACOORD(DT)]") - - - - -////////////////////////////// -////// PREMADE GRENADES ////// -////////////////////////////// - -/obj/item/grenade/chem_grenade/metalfoam - name = "metal foam grenade" - desc = "" - stage = GRENADE_READY - -/obj/item/grenade/chem_grenade/metalfoam/Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/B2 = new(src) - - B1.reagents.add_reagent(/datum/reagent/aluminium, 30) - B2.reagents.add_reagent(/datum/reagent/foaming_agent, 10) - B2.reagents.add_reagent(/datum/reagent/toxin/acid/fluacid, 10) - - beakers += B1 - beakers += B2 - - -/obj/item/grenade/chem_grenade/smart_metal_foam - name = "smart metal foam grenade" - desc = "" - stage = GRENADE_READY - -/obj/item/grenade/chem_grenade/smart_metal_foam/Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/B2 = new(src) - - B1.reagents.add_reagent(/datum/reagent/aluminium, 75) - B2.reagents.add_reagent(/datum/reagent/smart_foaming_agent, 25) - B2.reagents.add_reagent(/datum/reagent/toxin/acid/fluacid, 25) - - beakers += B1 - beakers += B2 - - -/obj/item/grenade/chem_grenade/incendiary - name = "incendiary grenade" - desc = "" - stage = GRENADE_READY - -/obj/item/grenade/chem_grenade/incendiary/Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/B2 = new(src) - - B1.reagents.add_reagent(/datum/reagent/phosphorus, 25) - B2.reagents.add_reagent(/datum/reagent/stable_plasma, 25) - B2.reagents.add_reagent(/datum/reagent/toxin/acid, 25) - - beakers += B1 - beakers += B2 - - -/obj/item/grenade/chem_grenade/antiweed - name = "weedkiller grenade" - desc = "" - stage = GRENADE_READY - -/obj/item/grenade/chem_grenade/antiweed/Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/B2 = new(src) - - B1.reagents.add_reagent(/datum/reagent/toxin/plantbgone, 25) - B1.reagents.add_reagent(/datum/reagent/potassium, 25) - B2.reagents.add_reagent(/datum/reagent/phosphorus, 25) - B2.reagents.add_reagent(/datum/reagent/consumable/sugar, 25) - - beakers += B1 - beakers += B2 - - -/obj/item/grenade/chem_grenade/cleaner - name = "cleaner grenade" - desc = "" - stage = GRENADE_READY - -/obj/item/grenade/chem_grenade/cleaner/Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/B2 = new(src) - - B1.reagents.add_reagent(/datum/reagent/fluorosurfactant, 40) - B2.reagents.add_reagent(/datum/reagent/water, 40) - B2.reagents.add_reagent(/datum/reagent/space_cleaner, 10) - - beakers += B1 - beakers += B2 - - -/obj/item/grenade/chem_grenade/ez_clean - name = "cleaner grenade" - desc = "" - stage = GRENADE_READY - -/obj/item/grenade/chem_grenade/ez_clean/Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src) - - B1.reagents.add_reagent(/datum/reagent/fluorosurfactant, 40) - B2.reagents.add_reagent(/datum/reagent/water, 40) - B2.reagents.add_reagent(/datum/reagent/space_cleaner/ez_clean, 60) //ensures a t h i c c distribution - - beakers += B1 - beakers += B2 - - - -/obj/item/grenade/chem_grenade/teargas - name = "teargas grenade" - desc = "" - stage = GRENADE_READY - -/obj/item/grenade/chem_grenade/teargas/Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src) - - B1.reagents.add_reagent(/datum/reagent/consumable/condensedcapsaicin, 60) - B1.reagents.add_reagent(/datum/reagent/potassium, 40) - B2.reagents.add_reagent(/datum/reagent/phosphorus, 40) - B2.reagents.add_reagent(/datum/reagent/consumable/sugar, 40) - - beakers += B1 - beakers += B2 - - -/obj/item/grenade/chem_grenade/facid - name = "acid grenade" - desc = "" - stage = GRENADE_READY - -/obj/item/grenade/chem_grenade/facid/Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src) - - B1.reagents.add_reagent(/datum/reagent/toxin/acid/fluacid, 290) - B1.reagents.add_reagent(/datum/reagent/potassium, 10) - B2.reagents.add_reagent(/datum/reagent/phosphorus, 10) - B2.reagents.add_reagent(/datum/reagent/consumable/sugar, 10) - B2.reagents.add_reagent(/datum/reagent/toxin/acid/fluacid, 280) - - beakers += B1 - beakers += B2 - - -/obj/item/grenade/chem_grenade/colorful - name = "colorful grenade" - desc = "" - stage = GRENADE_READY - -/obj/item/grenade/chem_grenade/colorful/Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/B2 = new(src) - - B1.reagents.add_reagent(/datum/reagent/colorful_reagent, 25) - B1.reagents.add_reagent(/datum/reagent/potassium, 25) - B2.reagents.add_reagent(/datum/reagent/phosphorus, 25) - B2.reagents.add_reagent(/datum/reagent/consumable/sugar, 25) - - beakers += B1 - beakers += B2 - -/obj/item/grenade/chem_grenade/glitter - name = "generic glitter grenade" - desc = "" - stage = GRENADE_READY - var/glitter_type = /datum/reagent/glitter - -/obj/item/grenade/chem_grenade/glitter/Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/B2 = new(src) - - B1.reagents.add_reagent(glitter_type, 25) - B1.reagents.add_reagent(/datum/reagent/potassium, 25) - B2.reagents.add_reagent(/datum/reagent/phosphorus, 25) - B2.reagents.add_reagent(/datum/reagent/consumable/sugar, 25) - - beakers += B1 - beakers += B2 - -/obj/item/grenade/chem_grenade/glitter/pink - name = "pink glitter bomb" - desc = "" - glitter_type = /datum/reagent/glitter/pink - -/obj/item/grenade/chem_grenade/glitter/blue - name = "blue glitter bomb" - desc = "" - glitter_type = /datum/reagent/glitter/blue - -/obj/item/grenade/chem_grenade/glitter/white - name = "white glitter bomb" - desc = "" - glitter_type = /datum/reagent/glitter/white - -/obj/item/grenade/chem_grenade/clf3 - name = "clf3 grenade" - desc = "" - stage = GRENADE_READY - -/obj/item/grenade/chem_grenade/clf3/Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src) - - B1.reagents.add_reagent(/datum/reagent/fluorosurfactant, 250) - B1.reagents.add_reagent(/datum/reagent/clf3, 50) - B2.reagents.add_reagent(/datum/reagent/water, 250) - B2.reagents.add_reagent(/datum/reagent/clf3, 50) - - beakers += B1 - beakers += B2 - -/obj/item/grenade/chem_grenade/bioterrorfoam - name = "Bio terror foam grenade" - desc = "" - stage = GRENADE_READY - -/obj/item/grenade/chem_grenade/bioterrorfoam/Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src) - - B1.reagents.add_reagent(/datum/reagent/cryptobiolin, 75) - B1.reagents.add_reagent(/datum/reagent/water, 50) - B1.reagents.add_reagent(/datum/reagent/toxin/mutetoxin, 50) - B1.reagents.add_reagent(/datum/reagent/toxin/spore, 75) - B1.reagents.add_reagent(/datum/reagent/toxin/itching_powder, 50) - B2.reagents.add_reagent(/datum/reagent/fluorosurfactant, 150) - B2.reagents.add_reagent(/datum/reagent/toxin/mutagen, 150) - beakers += B1 - beakers += B2 - -/obj/item/grenade/chem_grenade/tuberculosis - name = "Fungal tuberculosis grenade" - desc = "" - stage = GRENADE_READY - -/obj/item/grenade/chem_grenade/tuberculosis/Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src) - - B1.reagents.add_reagent(/datum/reagent/potassium, 50) - B1.reagents.add_reagent(/datum/reagent/phosphorus, 50) - B1.reagents.add_reagent(/datum/reagent/fungalspores, 200) - B2.reagents.add_reagent(/datum/reagent/blood, 250) - B2.reagents.add_reagent(/datum/reagent/consumable/sugar, 50) - - beakers += B1 - beakers += B2 - -/obj/item/grenade/chem_grenade/holy - name = "holy hand grenade" - desc = "" - icon_state = "holy_grenade" - stage = GRENADE_READY - -/obj/item/grenade/chem_grenade/holy/Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src) - - B1.reagents.add_reagent(/datum/reagent/potassium, 100) - B2.reagents.add_reagent(/datum/reagent/water/holywater, 100) - - beakers += B1 - beakers += B2 diff --git a/code/game/objects/items/grenades/clusterbuster.dm b/code/game/objects/items/grenades/clusterbuster.dm index 574410d02f..84e4c4d065 100644 --- a/code/game/objects/items/grenades/clusterbuster.dm +++ b/code/game/objects/items/grenades/clusterbuster.dm @@ -125,30 +125,6 @@ name = "Ninja Vanish" payload = /obj/item/grenade/smokebomb -/obj/item/grenade/clusterbuster/metalfoam - name = "Instant Concrete" - payload = /obj/item/grenade/chem_grenade/metalfoam - -/obj/item/grenade/clusterbuster/inferno - name = "Inferno" - payload = /obj/item/grenade/chem_grenade/incendiary - -/obj/item/grenade/clusterbuster/antiweed - name = "RoundDown" - payload = /obj/item/grenade/chem_grenade/antiweed - -/obj/item/grenade/clusterbuster/cleaner - name = "Mr. Proper" - payload = /obj/item/grenade/chem_grenade/cleaner - -/obj/item/grenade/clusterbuster/teargas - name = "Oignon Grenade" - payload = /obj/item/grenade/chem_grenade/teargas - -/obj/item/grenade/clusterbuster/facid - name = "Aciding Rain" - payload = /obj/item/grenade/chem_grenade/facid - /obj/item/grenade/clusterbuster/syndieminibomb name = "SyndiWrath" payload = /obj/item/grenade/syndieminibomb @@ -165,10 +141,6 @@ name = "Slipocalypse" payload = /obj/item/grenade/spawnergrenade/syndiesoap -/obj/item/grenade/clusterbuster/clf3 - name = "WELCOME TO HELL" - payload = /obj/item/grenade/chem_grenade/clf3 - //random clusterbuster spawner /obj/item/grenade/clusterbuster/random icon_state = "random_clusterbang" diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm deleted file mode 100644 index 7885ff0f10..0000000000 --- a/code/game/objects/items/grenades/plastic.dm +++ /dev/null @@ -1,160 +0,0 @@ -/obj/item/grenade/c4 - name = "C-4 charge" - desc = "" - icon_state = "plastic-explosive0" - item_state = "plastic-explosive" - lefthand_file = 'icons/mob/inhands/weapons/bombs_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/bombs_righthand.dmi' - item_flags = NOBLUDGEON - flags_1 = NONE - det_time = 10 - display_timer = FALSE - w_class = WEIGHT_CLASS_SMALL - gender = PLURAL - var/atom/target = null - var/mutable_appearance/plastic_overlay - var/directional = FALSE - var/aim_dir = NORTH - var/boom_sizes = list(0, 0, 3) - var/full_damage_on_mobs = FALSE - -/obj/item/grenade/c4/Initialize() - . = ..() - plastic_overlay = mutable_appearance(icon, "[item_state]2", HIGH_OBJ_LAYER) - wires = new /datum/wires/explosive/c4(src) - -/obj/item/grenade/c4/ComponentInitialize() - . = ..() - AddComponent(/datum/component/empprotection, EMP_PROTECT_WIRES) - -/obj/item/grenade/c4/Destroy() - qdel(wires) - wires = null - target = null - ..() - -/obj/item/grenade/c4/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - to_chat(user, "The wire panel can be accessed without a screwdriver.") - else if(is_wire_tool(I)) - wires.interact(user) - else - return ..() - -/obj/item/grenade/c4/prime() - if(QDELETED(src)) - return - var/turf/location - if(target) - if(!QDELETED(target)) - location = get_turf(target) - target.cut_overlay(plastic_overlay, TRUE) - if(!ismob(target) || full_damage_on_mobs) - target.ex_act(EXPLODE_HEAVY, target) - else - location = get_turf(src) - if(location) - if(directional && target && target.density) - var/turf/T = get_step(location, aim_dir) - explosion(get_step(T, aim_dir), boom_sizes[1], boom_sizes[2], boom_sizes[3]) - else - explosion(location, boom_sizes[1], boom_sizes[2], boom_sizes[3]) - qdel(src) - -//assembly stuff -/obj/item/grenade/c4/receive_signal() - prime() - -/obj/item/grenade/c4/attack_self(mob/user) - var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num|null - - if (isnull(newtime)) - return - - if(user.get_active_held_item() == src) - newtime = CLAMP(newtime, 10, 60000) - det_time = newtime - to_chat(user, "Timer set for [det_time] seconds.") - -/obj/item/grenade/c4/afterattack(atom/movable/AM, mob/user, flag) - . = ..() - aim_dir = get_dir(user,AM) - if(!flag) - return - - to_chat(user, "I start planting [src]. The timer is set to [det_time]...") - - if(do_after(user, 30, target = AM)) - if(!user.temporarilyRemoveItemFromInventory(src)) - return - target = AM - - message_admins("[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_VERBOSEJMP(target)] with [det_time] second fuse") - log_game("[key_name(user)] planted [name] on [target.name] at [AREACOORD(user)] with a [det_time] second fuse") - - notify_ghosts("[user] has planted \a [src] on [target] with a [det_time] second fuse!", source = target, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Explosive Planted") - - moveToNullspace() //Yep - - if(istype(AM, /obj/item)) //your crappy throwing star can't fly so good with a giant brick of c4 on it. - var/obj/item/I = AM - I.throw_speed = max(1, (I.throw_speed - 3)) - I.throw_range = max(1, (I.throw_range - 3)) - I.embedding = I.embedding.setRating(embed_chance = 0) - else if(istype(AM, /mob/living)) - plastic_overlay.layer = FLOAT_LAYER - - target.add_overlay(plastic_overlay) - to_chat(user, "I plant the bomb. Timer counting down from [det_time].") - addtimer(CALLBACK(src, PROC_REF(prime)), det_time*10) - -/obj/item/grenade/c4/proc/shout_syndicate_crap(mob/M) - if(!M) - return - var/message_say = "FOR NO RAISIN!" - if(M.mind) - var/datum/mind/UM = M.mind - if(UM.has_antag_datum(/datum/antagonist/nukeop) || UM.has_antag_datum(/datum/antagonist/traitor)) - message_say = "FOR THE SYNDICATE!" - else if(UM.has_antag_datum(/datum/antagonist/changeling)) - message_say = "FOR THE HIVE!" - else if(UM.has_antag_datum(/datum/antagonist/cult)) - message_say = "FOR NAR'SIE!" - else if(UM.has_antag_datum(/datum/antagonist/rev)) - message_say = "VIVA LA REVOLUTION!" - else if(UM.has_antag_datum(/datum/antagonist/brother)) - message_say = "FOR MY BROTHER!" - else if(UM.has_antag_datum(/datum/antagonist/ninja)) - message_say = "FOR THE SPIDER CLAN!" - else if(UM.has_antag_datum(/datum/antagonist/fugitive)) - message_say = "FOR FREEDOM!" - else if(UM.has_antag_datum(/datum/antagonist/ashwalker)) - message_say = "I HAVE NO IDEA WHAT THIS THING DOES!" - else if(UM.has_antag_datum(/datum/antagonist/ert)) - message_say = "FOR NANOTRASEN!" - else if(UM.has_antag_datum(/datum/antagonist/pirate)) - message_say = "FOR ME MATEYS!" - else if(UM.has_antag_datum(/datum/antagonist/wizard)) - message_say = "FOR THE FEDERATION!" - M.say(message_say, forced="C4 suicide") - -/obj/item/grenade/c4/suicide_act(mob/user) - message_admins("[ADMIN_LOOKUPFLW(user)] suicided with [src] at [ADMIN_VERBOSEJMP(user)]") - log_game("[key_name(user)] suicided with [src] at [AREACOORD(user)]") - user.visible_message("[user] activates [src] and holds it above [user.p_their()] head! It looks like [user.p_theyre()] going out with a bang!") - shout_syndicate_crap(user) - explosion(user,0,2,0) //Cheap explosion imitation because putting prime() here causes runtimes - user.gib(1, 1) - qdel(src) - -// X4 is an upgraded directional variant of c4 which is relatively safe to be standing next to. And much less safe to be standing on the other side of. -// C4 is intended to be used for infiltration, and destroying tech. X4 is intended to be used for heavy breaching and tight spaces. -// Intended to replace C4 for nukeops, and to be a randomdrop in surplus/random traitor purchases. - -/obj/item/grenade/c4/x4 - name = "X-4 charge" - desc = "" - icon_state = "plasticx40" - item_state = "plasticx4" - directional = TRUE - boom_sizes = list(0, 2, 5) diff --git a/code/game/objects/items/grenades/spawnergrenade.dm b/code/game/objects/items/grenades/spawnergrenade.dm index 8fe14cf1c2..5695fd9cfe 100644 --- a/code/game/objects/items/grenades/spawnergrenade.dm +++ b/code/game/objects/items/grenades/spawnergrenade.dm @@ -26,9 +26,6 @@ return /obj/item/grenade/spawnergrenade/manhacks - name = "viscerator delivery grenade" - spawner_type = /mob/living/simple_animal/hostile/viscerator - deliveryamt = 10 /obj/item/grenade/spawnergrenade/spesscarp name = "carp delivery grenade" @@ -39,13 +36,6 @@ name = "Mister Scrubby" spawner_type = /obj/item/soap/syndie -/obj/item/grenade/spawnergrenade/buzzkill - name = "Buzzkill grenade" - desc = "" - icon_state = "holy_grenade" - spawner_type = /mob/living/simple_animal/hostile/poison/bees/toxin - deliveryamt = 10 - /obj/item/grenade/spawnergrenade/clown name = "C.L.U.W.N.E." desc = "" diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index 66058100f6..2737ddf7af 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -94,10 +94,7 @@ playsound(loc, cuffsound, 30, TRUE, -2) if(do_mob(user, C, 30) && (C.get_num_arms(FALSE) >= 2 || C.get_arm_ignore())) - if(iscyborg(user)) - apply_cuffs(C, user, TRUE) - else - apply_cuffs(C, user) + apply_cuffs(C, user) C.visible_message("[user] handcuffs [C].", \ "[user] handcuffs you.") SSblackbox.record_feedback("tally", "handcuffs", 1, type) @@ -282,6 +279,7 @@ BP.add_wound(/datum/wound/fracture) BP.update_disabled() C.apply_damage(trap_damage, BRUTE, def_zone, C.run_armor_check(def_zone, "melee", damage = trap_damage)) + C.update_sneak_invis(TRUE) C.consider_ambush() return FALSE else @@ -307,6 +305,7 @@ BP.add_wound(/datum/wound/fracture) BP.update_disabled() C.apply_damage(trap_damage, BRUTE, def_zone, C.run_armor_check(def_zone, "melee", damage = trap_damage)) + C.update_sneak_invis(TRUE) C.consider_ambush() return FALSE ..() @@ -319,6 +318,7 @@ close_trap() if(isliving(user)) var/mob/living/L = user + L.update_sneak_invis(TRUE) L.consider_ambush() return ..() diff --git a/code/game/objects/items/holosign_creator.dm b/code/game/objects/items/holosign_creator.dm deleted file mode 100644 index 2a20384d54..0000000000 --- a/code/game/objects/items/holosign_creator.dm +++ /dev/null @@ -1,139 +0,0 @@ -/obj/item/holosign_creator - name = "holographic sign projector" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "signmaker" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - force = 0 - w_class = WEIGHT_CLASS_SMALL - throwforce = 0 - throw_speed = 1 - throw_range = 7 - item_flags = NOBLUDGEON - var/list/signs = list() - var/max_signs = 10 - var/creation_time = 0 //time to create a holosign in deciseconds. - var/holosign_type = /obj/structure/holosign/wetsign - var/holocreator_busy = FALSE //to prevent placing multiple holo barriers at once - -/obj/item/holosign_creator/afterattack(atom/target, mob/user, flag) - . = ..() - if(flag) - if(!check_allowed_items(target, 1)) - return - var/turf/T = get_turf(target) - var/obj/structure/holosign/H = locate(holosign_type) in T - if(H) - to_chat(user, "I use [src] to deactivate [H].") - qdel(H) - else - if(!is_blocked_turf(T, TRUE)) //can't put holograms on a tile that has dense stuff - if(holocreator_busy) - to_chat(user, "[src] is busy creating a hologram.") - return - if(signs.len < max_signs) - playsound(src.loc, 'sound/blank.ogg', 20, TRUE) - if(creation_time) - holocreator_busy = TRUE - if(!do_after(user, creation_time, target = target)) - holocreator_busy = FALSE - return - holocreator_busy = FALSE - if(signs.len >= max_signs) - return - if(is_blocked_turf(T, TRUE)) //don't try to sneak dense stuff on our tile during the wait. - return - H = new holosign_type(get_turf(target), src) - to_chat(user, "I create \a [H] with [src].") - else - to_chat(user, "[src] is projecting at max capacity!") - -/obj/item/holosign_creator/attack(mob/living/carbon/human/M, mob/user) - return - -/obj/item/holosign_creator/attack_self(mob/user) - if(signs.len) - for(var/H in signs) - qdel(H) - to_chat(user, "I clear all active holograms.") - -/obj/item/holosign_creator/janibarrier - name = "custodial holobarrier projector" - desc = "" - holosign_type = /obj/structure/holosign/barrier/wetsign - creation_time = 20 - max_signs = 12 - -/obj/item/holosign_creator/security - name = "security holobarrier projector" - desc = "" - icon_state = "signmaker_sec" - holosign_type = /obj/structure/holosign/barrier - creation_time = 30 - max_signs = 6 - -/obj/item/holosign_creator/engineering - name = "engineering holobarrier projector" - desc = "" - icon_state = "signmaker_engi" - holosign_type = /obj/structure/holosign/barrier/engineering - creation_time = 30 - max_signs = 6 - -/obj/item/holosign_creator/atmos - name = "ATMOS holofan projector" - desc = "" - icon_state = "signmaker_atmos" - holosign_type = /obj/structure/holosign/barrier/atmos - creation_time = 0 - max_signs = 3 - -/obj/item/holosign_creator/medical - name = "\improper PENLITE barrier projector" - desc = "" - icon_state = "signmaker_med" - holosign_type = /obj/structure/holosign/barrier/medical - creation_time = 30 - max_signs = 3 - -/obj/item/holosign_creator/cyborg - name = "Energy Barrier Projector" - desc = "" - creation_time = 15 - max_signs = 9 - holosign_type = /obj/structure/holosign/barrier/cyborg - var/shock = 0 - -/obj/item/holosign_creator/cyborg/attack_self(mob/user) - if(iscyborg(user)) - var/mob/living/silicon/robot/R = user - - if(shock) - to_chat(user, "I clear all active holograms, and reset your projector to normal.") - holosign_type = /obj/structure/holosign/barrier/cyborg - creation_time = 5 - if(signs.len) - for(var/H in signs) - qdel(H) - shock = 0 - return - else if(R.emagged&&!shock) - to_chat(user, "I clear all active holograms, and overload your energy projector!") - holosign_type = /obj/structure/holosign/barrier/cyborg/hacked - creation_time = 30 - if(signs.len) - for(var/H in signs) - qdel(H) - shock = 1 - return - else - if(signs.len) - for(var/H in signs) - qdel(H) - to_chat(user, "I clear all active holograms.") - if(signs.len) - for(var/H in signs) - qdel(H) - to_chat(user, "I clear all active holograms.") diff --git a/code/game/objects/items/implants/implant_abductor.dm b/code/game/objects/items/implants/implant_abductor.dm deleted file mode 100644 index 5312655096..0000000000 --- a/code/game/objects/items/implants/implant_abductor.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/item/implant/abductor - name = "recall implant" - desc = "" - icon = 'icons/obj/abductor.dmi' - icon_state = "implant" - activated = 1 - var/obj/machinery/abductor/pad/home - var/cooldown = 60 SECONDS - var/on_cooldown - -/obj/item/implant/abductor/activate() - . = ..() - if(on_cooldown) - to_chat(imp_in, "I must wait [timeleft(on_cooldown)*0.1] seconds to use [src] again!") - return - - home.Retrieve(imp_in,1) - on_cooldown = addtimer(VARSET_CALLBACK(src, on_cooldown, null), cooldown) - -/obj/item/implant/abductor/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) - if(..()) - var/obj/machinery/abductor/console/console - if(ishuman(target)) - var/datum/antagonist/abductor/A = target.mind.has_antag_datum(/datum/antagonist/abductor) - if(A) - console = get_abductor_console(A.team.team_number) - home = console.pad - - if(!home) - var/list/consoles = list() - for(var/obj/machinery/abductor/console/C in GLOB.machines) - consoles += C - console = pick(consoles) - home = console.pad - return TRUE diff --git a/code/game/objects/items/implants/implant_mindshield.dm b/code/game/objects/items/implants/implant_mindshield.dm index d2ffd35635..36de7ae7f2 100644 --- a/code/game/objects/items/implants/implant_mindshield.dm +++ b/code/game/objects/items/implants/implant_mindshield.dm @@ -26,21 +26,8 @@ if(target.mind.has_antag_datum(/datum/antagonist/brainwashed)) target.mind.remove_antag_datum(/datum/antagonist/brainwashed) - if(target.mind.has_antag_datum(/datum/antagonist/rev/head)|| target.mind.unconvertable) - if(!silent) - target.visible_message("[target] seems to resist the implant!", "I feel something interfering with my mental conditioning, but you resist it!") - removed(target, 1) - qdel(src) - return TRUE //the implant is still used - - var/datum/antagonist/rev/rev = target.mind.has_antag_datum(/datum/antagonist/rev) - if(rev) - rev.remove_revolutionary(FALSE, user) if(!silent) - if(target.mind in SSticker.mode.cult) - to_chat(target, "I feel something interfering with my mental conditioning, but you resist it!") - else - to_chat(target, "I feel a sense of peace and security. You are now protected from brainwashing.") + to_chat(target, "I feel a sense of peace and security. You are now protected from brainwashing.") ADD_TRAIT(target, TRAIT_MINDSHIELD, "implant") target.sec_hud_set_implants() return TRUE diff --git a/code/game/objects/items/implants/implant_misc.dm b/code/game/objects/items/implants/implant_misc.dm index b93e743800..e89ae4c9cb 100644 --- a/code/game/objects/items/implants/implant_misc.dm +++ b/code/game/objects/items/implants/implant_misc.dm @@ -79,61 +79,3 @@ if (!healthstring) healthstring = "ERROR" return healthstring - -/obj/item/implant/radio - name = "internal radio implant" - activated = TRUE - var/obj/item/radio/radio - var/radio_key - var/subspace_transmission = FALSE - icon = 'icons/obj/radio.dmi' - icon_state = "walkietalkie" - -/obj/item/implant/radio/activate() - . = ..() - // needs to be GLOB.deep_inventory_state otherwise it won't open - radio.ui_interact(usr, "main", null, FALSE, null, GLOB.deep_inventory_state) - -/obj/item/implant/radio/Initialize(mapload) - . = ..() - - radio = new(src) - // almost like an internal headset, but without the - // "must be in ears to hear" restriction. - radio.name = "internal radio" - radio.subspace_transmission = subspace_transmission - radio.canhear_range = 0 - if(radio_key) - radio.keyslot = new radio_key - radio.recalculateChannels() - -/obj/item/implant/radio/mining - radio_key = /obj/item/encryptionkey/headset_cargo - -/obj/item/implant/radio/syndicate - desc = "" - radio_key = /obj/item/encryptionkey/syndicate - subspace_transmission = TRUE - -/obj/item/implant/radio/slime - name = "slime radio" - icon = 'icons/obj/surgery.dmi' - icon_state = "adamantine_resonator" - radio_key = /obj/item/encryptionkey/headset_sci - subspace_transmission = TRUE - -/obj/item/implant/radio/get_data() - var/dat = {"Implant Specifications:
    - Name: Internal Radio Implant
    - Life: 24 hours
    - Implant Details: Allows user to use an internal radio, useful if user expects equipment loss, or cannot equip conventional radios."} - return dat - -/obj/item/implanter/radio - name = "implanter (internal radio)" - imp_type = /obj/item/implant/radio - -/obj/item/implanter/radio/syndicate - name = "implanter (internal syndicate radio)" - imp_type = /obj/item/implant/radio/syndicate - diff --git a/code/game/objects/items/implants/implantuplink.dm b/code/game/objects/items/implants/implantuplink.dm deleted file mode 100644 index cb269e57ba..0000000000 --- a/code/game/objects/items/implants/implantuplink.dm +++ /dev/null @@ -1,23 +0,0 @@ -/obj/item/implant/uplink - name = "uplink implant" - desc = "" - icon = 'icons/obj/radio.dmi' - icon_state = "radio" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - var/starting_tc = 0 - -/obj/item/implant/uplink/Initialize(mapload, _owner) - . = ..() - AddComponent(/datum/component/uplink, _owner, TRUE, FALSE, null, starting_tc) - -/obj/item/implanter/uplink - name = "implanter (uplink)" - imp_type = /obj/item/implant/uplink - -/obj/item/implanter/uplink/precharged - name = "implanter (precharged uplink)" - imp_type = /obj/item/implant/uplink/precharged - -/obj/item/implant/uplink/precharged - starting_tc = 10 diff --git a/code/game/objects/items/inducer.dm b/code/game/objects/items/inducer.dm deleted file mode 100644 index b6959cbece..0000000000 --- a/code/game/objects/items/inducer.dm +++ /dev/null @@ -1,183 +0,0 @@ -/obj/item/inducer - name = "inducer" - desc = "" - icon = 'icons/obj/tools.dmi' - icon_state = "inducer-engi" - item_state = "inducer-engi" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - force = 7 - var/powertransfer = 1000 - var/opened = FALSE - var/cell_type = /obj/item/stock_parts/cell/high - var/obj/item/stock_parts/cell/cell - var/recharging = FALSE - -/obj/item/inducer/Initialize() - . = ..() - if(!cell && cell_type) - cell = new cell_type - -/obj/item/inducer/proc/induce(obj/item/stock_parts/cell/target, coefficient) - var/totransfer = min(cell.charge,(powertransfer * coefficient)) - var/transferred = target.give(totransfer) - cell.use(transferred) - cell.update_icon() - target.update_icon() - -/obj/item/inducer/get_cell() - return cell - -/obj/item/inducer/emp_act(severity) - . = ..() - if(cell && !(. & EMP_PROTECT_CONTENTS)) - cell.emp_act(severity) - -/obj/item/inducer/attack_obj(obj/O, mob/living/carbon/user) - if(user.used_intent.type == INTENT_HARM) - return ..() - - if(cantbeused(user)) - return - - if(recharge(O, user)) - return - - return ..() - -/obj/item/inducer/proc/cantbeused(mob/user) - if(!user.IsAdvancedToolUser()) - to_chat(user, "I don't have the dexterity to use [src]!") - return TRUE - - if(!cell) - to_chat(user, "[src] doesn't have a power cell installed!") - return TRUE - - if(!cell.charge) - to_chat(user, "[src]'s battery is dead!") - return TRUE - return FALSE - - -/obj/item/inducer/attackby(obj/item/W, mob/user) - if(W.tool_behaviour == TOOL_SCREWDRIVER) - W.play_tool_sound(src) - if(!opened) - to_chat(user, "I unscrew the battery compartment.") - opened = TRUE - update_icon() - return - else - to_chat(user, "I close the battery compartment.") - opened = FALSE - update_icon() - return - if(istype(W, /obj/item/stock_parts/cell)) - if(opened) - if(!cell) - if(!user.transferItemToLoc(W, src)) - return - to_chat(user, "I insert [W] into [src].") - cell = W - update_icon() - return - else - to_chat(user, "[src] already has \a [cell] installed!") - return - - if(cantbeused(user)) - return - - if(recharge(W, user)) - return - - return ..() - -/obj/item/inducer/proc/recharge(atom/movable/A, mob/user) - if(!isturf(A) && user.loc == A) - return FALSE - if(recharging) - return TRUE - else - recharging = TRUE - var/obj/item/stock_parts/cell/C = A.get_cell() - var/obj/O - var/coefficient = 1 - if(istype(A, /obj/item/gun/energy)) - to_chat(user, "Error unable to interface with device.") - return FALSE - if(istype(A, /obj)) - O = A - if(C) - var/done_any = FALSE - if(C.charge >= C.maxcharge) - to_chat(user, "[A] is fully charged!") - recharging = FALSE - return TRUE - user.visible_message("[user] starts recharging [A] with [src].", "I start recharging [A] with [src].") - while(C.charge < C.maxcharge) - if(do_after(user, 10, target = user) && cell.charge) - done_any = TRUE - induce(C, coefficient) - do_sparks(1, FALSE, A) - if(O) - O.update_icon() - else - break - if(done_any) // Only show a message if we succeeded at least once - user.visible_message("[user] recharged [A]!", "I recharged [A]!") - recharging = FALSE - return TRUE - recharging = FALSE - - -/obj/item/inducer/attack(mob/M, mob/user) - if(user.used_intent.type == INTENT_HARM) - return ..() - - if(cantbeused(user)) - return - - if(recharge(M, user)) - return - return ..() - - -/obj/item/inducer/attack_self(mob/user) - if(opened && cell) - user.visible_message("[user] removes [cell] from [src]!", "I remove [cell].") - cell.update_icon() - user.put_in_hands(cell) - cell = null - update_icon() - - -/obj/item/inducer/examine(mob/living/M) - . = ..() - if(cell) - . += "Its display shows: [DisplayEnergy(cell.charge)]." - else - . += "Its display is dark." - if(opened) - . += "Its battery compartment is open." - -/obj/item/inducer/update_icon() - cut_overlays() - if(opened) - if(!cell) - add_overlay("inducer-nobat") - else - add_overlay("inducer-bat") - -/obj/item/inducer/sci - icon_state = "inducer-sci" - item_state = "inducer-sci" - desc = "" - cell_type = null - powertransfer = 500 - opened = TRUE - -/obj/item/inducer/sci/Initialize() - . = ..() - update_icon() diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm deleted file mode 100644 index c7a47fd34e..0000000000 --- a/code/game/objects/items/melee/energy.dm +++ /dev/null @@ -1,238 +0,0 @@ -/obj/item/melee/transforming/energy - icon = 'icons/obj/transforming_energy.dmi' - hitsound_on = 'sound/blank.ogg' - heat = 3500 - max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) - resistance_flags = FIRE_PROOF - var/brightness_on = 3 - var/sword_color - -/obj/item/melee/transforming/energy/Initialize() - . = ..() - if(active) - set_light(brightness_on) - START_PROCESSING(SSobj, src) - -/obj/item/melee/transforming/energy/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/melee/transforming/energy/suicide_act(mob/user) - if(!active) - transform_weapon(user, TRUE) - user.visible_message("[user] is [pick("slitting [user.p_their()] stomach open with", "falling on")] [src]! It looks like [user.p_theyre()] trying to commit seppuku!") - return (BRUTELOSS|FIRELOSS) - -/obj/item/melee/transforming/energy/add_blood_DNA(list/blood_dna) - return FALSE - -/obj/item/melee/transforming/energy/get_sharpness() - return active * sharpness - -/obj/item/melee/transforming/energy/process() - open_flame() - -/obj/item/melee/transforming/energy/transform_weapon(mob/living/user, supress_message_text) - . = ..() - if(.) - if(active) - if(sword_color) - icon_state = "sword[sword_color]" - START_PROCESSING(SSobj, src) - set_light(brightness_on) - else - STOP_PROCESSING(SSobj, src) - set_light(0) - -/obj/item/melee/transforming/energy/get_temperature() - return active * heat - -/obj/item/melee/transforming/energy/ignition_effect(atom/A, mob/user) - if(!active) - return "" - - var/in_mouth = "" - if(iscarbon(user)) - var/mob/living/carbon/C = user - if(C.wear_mask) - in_mouth = ", barely missing [C.p_their()] nose" - . = "[user] swings [user.p_their()] [name][in_mouth]. [user.p_they(TRUE)] light[user.p_s()] [user.p_their()] [A.name] in the process." - playsound(loc, pick(hitsound), get_clamped_volume(), TRUE, -1) - add_fingerprint(user) - -/obj/item/melee/transforming/energy/axe - name = "energy axe" - desc = "" - icon_state = "axe0" - lefthand_file = 'icons/mob/inhands/weapons/axes_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/axes_righthand.dmi' - force = 40 - force_on = 150 - throwforce = 25 - throwforce_on = 30 - hitsound = 'sound/blank.ogg' - throw_speed = 1 - throw_range = 5 - w_class = WEIGHT_CLASS_NORMAL - w_class_on = WEIGHT_CLASS_HUGE - flags_1 = CONDUCT_1 - armor_penetration = 100 - attack_verb_off = list("attacked", "chopped", "cleaved", "torn", "cut") - attack_verb_on = list() - light_color = "#40ceff" - -/obj/item/melee/transforming/energy/axe/suicide_act(mob/user) - user.visible_message("[user] swings [src] towards [user.p_their()] head! It looks like [user.p_theyre()] trying to commit suicide!") - return (BRUTELOSS|FIRELOSS) - -/obj/item/melee/transforming/energy/sword - name = "energy sword" - desc = "" - icon_state = "sword0" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - force = 3 - throwforce = 5 - hitsound = "swing_hit" //it starts deactivated - attack_verb_off = list("tapped", "poked") - throw_speed = 1 - throw_range = 5 - sharpness = IS_SHARP - embedding = list("embed_chance" = 75, "embedded_impact_pain_multiplier" = 10) - armor_penetration = 35 - block_chance = 50 - -/obj/item/melee/transforming/energy/sword/transform_weapon(mob/living/user, supress_message_text) - . = ..() - if(. && active && sword_color) - icon_state = "sword[sword_color]" - -/obj/item/melee/transforming/energy/sword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(active) - return ..() - return 0 - -/obj/item/melee/transforming/energy/sword/cyborg - sword_color = "red" - var/hitcost = 50 - -/obj/item/melee/transforming/energy/sword/cyborg/attack(mob/M, mob/living/silicon/robot/R) - if(R.cell) - var/obj/item/stock_parts/cell/C = R.cell - if(active && !(C.use(hitcost))) - attack_self(R) - to_chat(R, "It's out of charge!") - return - return ..() - -/obj/item/melee/transforming/energy/sword/cyborg/saw //Used by medical Syndicate cyborgs - name = "energy saw" - desc = "" - force_on = 30 - force = 18 //About as much as a spear - hitsound = 'sound/blank.ogg' - icon = 'icons/obj/surgery.dmi' - icon_state = "esaw_0" - icon_state_on = "esaw_1" - sword_color = null //stops icon from breaking when turned on. - hitcost = 75 //Costs more than a standard cyborg esword - w_class = WEIGHT_CLASS_NORMAL - sharpness = IS_SHARP - light_color = "#40ceff" - tool_behaviour = TOOL_SAW - toolspeed = 0.7 //faster as a saw - -/obj/item/melee/transforming/energy/sword/cyborg/saw/cyborg_unequip(mob/user) - if(!active) - return - transform_weapon(user, TRUE) - -/obj/item/melee/transforming/energy/sword/cyborg/saw/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - return 0 - -/obj/item/melee/transforming/energy/sword/saber - var/list/possible_colors = list("red" = LIGHT_COLOR_RED, "blue" = LIGHT_COLOR_LIGHT_CYAN, "green" = LIGHT_COLOR_GREEN, "purple" = LIGHT_COLOR_LAVENDER) - var/hacked = FALSE - -/obj/item/melee/transforming/energy/sword/saber/Initialize(mapload) - . = ..() - if(LAZYLEN(possible_colors)) - var/set_color = pick(possible_colors) - sword_color = set_color - light_color = possible_colors[set_color] - -/obj/item/melee/transforming/energy/sword/saber/process() - . = ..() - if(hacked) - var/set_color = pick(possible_colors) - light_color = possible_colors[set_color] - update_light() - -/obj/item/melee/transforming/energy/sword/saber/red - possible_colors = list("red" = LIGHT_COLOR_RED) - -/obj/item/melee/transforming/energy/sword/saber/blue - possible_colors = list("blue" = LIGHT_COLOR_LIGHT_CYAN) - -/obj/item/melee/transforming/energy/sword/saber/green - possible_colors = list("green" = LIGHT_COLOR_GREEN) - -/obj/item/melee/transforming/energy/sword/saber/purple - possible_colors = list("purple" = LIGHT_COLOR_LAVENDER) - -/obj/item/melee/transforming/energy/sword/saber/attackby(obj/item/W, mob/living/user, params) - if(W.tool_behaviour == TOOL_MULTITOOL) - if(!hacked) - hacked = TRUE - sword_color = "rainbow" - to_chat(user, "RNBW_ENGAGE") - - if(active) - icon_state = "swordrainbow" - user.update_inv_hands() - else - to_chat(user, "It's already fabulous!") - else - return ..() - -/obj/item/melee/transforming/energy/sword/pirate - name = "energy cutlass" - desc = "" - icon_state = "cutlass0" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - icon_state_on = "cutlass1" - light_color = "#ff0000" - -/obj/item/melee/transforming/energy/blade - name = "energy blade" - desc = "" - icon_state = "blade" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - force = 30 //Normal attacks deal esword damage - hitsound = 'sound/blank.ogg' - active = 1 - throwforce = 1 //Throwing or dropping the item deletes it. - throw_speed = 1 - throw_range = 1 - w_class = WEIGHT_CLASS_BULKY//So you can't hide it in your pocket or some such. - var/datum/effect_system/spark_spread/spark_system - sharpness = IS_SHARP - -//Most of the other special functions are handled in their own files. aka special snowflake code so kewl -/obj/item/melee/transforming/energy/blade/Initialize() - . = ..() - spark_system = new /datum/effect_system/spark_spread() - spark_system.set_up(5, 0, src) - spark_system.attach(src) - -/obj/item/melee/transforming/energy/blade/transform_weapon(mob/living/user, supress_message_text) - return - -/obj/item/melee/transforming/energy/blade/hardlight - name = "hardlight blade" - desc = "" - icon_state = "lightblade" - item_state = "lightblade" diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 8331d78263..0f5ce66d2d 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -249,33 +249,11 @@ else user.take_bodypart_damage(2*force) return - if(iscyborg(target)) - // We don't stun if we're on harm. - if (user.used_intent.type != INTENT_HARM) - if (affect_silicon) - var/list/desc = get_silicon_stun_description(target, user) - - target.flash_act(affect_silicon = TRUE) - target.Paralyze(stun_time_silicon) - additional_effects_silicon(target, user) - - user.visible_message(desc["visible"], desc["local"]) - playsound(get_turf(src), on_stun_sound, 100, TRUE, -1) - - if (stun_animation) - user.do_attack_animation(target) - else - ..() - else - ..() - return if(!isliving(target)) return if (user.used_intent.type == INTENT_HARM) if(!..()) return - if(!iscyborg(target)) - return else if(cooldown_check <= world.time) if(ishuman(target)) @@ -406,104 +384,6 @@ target.Jitter(20) target.stuttering += 20 -/obj/item/melee/supermatter_sword - name = "supermatter sword" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "supermatter_sword" - item_state = "supermatter_sword" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - slot_flags = null - w_class = WEIGHT_CLASS_BULKY - force = 0.001 - armor_penetration = 1000 - var/obj/machinery/power/supermatter_crystal/shard - var/balanced = 1 - force_string = "INFINITE" - -/obj/item/melee/supermatter_sword/Initialize() - . = ..() - shard = new /obj/machinery/power/supermatter_crystal(src) - qdel(shard.countdown) - shard.countdown = null - START_PROCESSING(SSobj, src) - visible_message("[src] appears, balanced ever so perfectly on its hilt. This isn't ominous at all.") - -/obj/item/melee/supermatter_sword/process() - if(balanced || throwing || ismob(src.loc) || isnull(src.loc)) - return - if(!isturf(src.loc)) - var/atom/target = src.loc - forceMove(target.loc) - consume_everything(target) - else - var/turf/T = get_turf(src) - if(!isspaceturf(T)) - consume_turf(T) - -/obj/item/melee/supermatter_sword/afterattack(target, mob/user, proximity_flag) - . = ..() - if(user && target == user) - user.dropItemToGround(src) - if(proximity_flag) - consume_everything(target) - -/obj/item/melee/supermatter_sword/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - ..() - if(ismob(hit_atom)) - var/mob/M = hit_atom - if(src.loc == M) - M.dropItemToGround(src) - consume_everything(hit_atom) - -/obj/item/melee/supermatter_sword/pickup(user) - ..() - balanced = 0 - -/obj/item/melee/supermatter_sword/ex_act(severity, target) - visible_message("The blast wave smacks into [src] and rapidly flashes to ash.",\ - "I hear a loud crack as you are washed with a wave of heat.") - consume_everything() - -/obj/item/melee/supermatter_sword/acid_act() - visible_message("The acid smacks into [src] and rapidly flashes to ash.",\ - "I hear a loud crack as you are washed with a wave of heat.") - consume_everything() - -/obj/item/melee/supermatter_sword/bullet_act(obj/projectile/P) - visible_message("[P] smacks into [src] and rapidly flashes to ash.",\ - "I hear a loud crack as you are washed with a wave of heat.") - consume_everything(P) - return BULLET_ACT_HIT - -/obj/item/melee/supermatter_sword/suicide_act(mob/user) - user.visible_message("[user] touches [src]'s blade. It looks like [user.p_theyre()] tired of waiting for the radiation to kill [user.p_them()]!") - user.dropItemToGround(src, TRUE) - shard.Bumped(user) - -/obj/item/melee/supermatter_sword/proc/consume_everything(target) - if(isnull(target)) - shard.Consume() - else if(!isturf(target)) - shard.Bumped(target) - else - consume_turf(target) - -/obj/item/melee/supermatter_sword/proc/consume_turf(turf/T) - var/oldtype = T.type - var/turf/newT = T.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - if(newT.type == oldtype) - return - playsound(T, 'sound/blank.ogg', 50, TRUE) - T.visible_message("[T] smacks into [src] and rapidly flashes to ash.",\ - "I hear a loud crack as you are washed with a wave of heat.") - shard.Consume() - CALCULATE_ADJACENT_TURFS(T) - -/obj/item/melee/supermatter_sword/add_blood_DNA(list/blood_dna) - return FALSE - /obj/item/melee/curator_whip name = "curator's whip" desc = "" @@ -524,116 +404,6 @@ H.drop_all_held_items() H.visible_message("[user] disarms [H]!", "[user] disarmed you!") -/obj/item/melee/roastingstick - name = "advanced roasting stick" - desc = "" - icon_state = "roastingstick_0" - item_state = "null" - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - item_flags = NONE - force = 0 - attack_verb = list("hit", "poked") - var/obj/item/reagent_containers/food/snacks/rogue/meat/sausage/held_sausage - var/static/list/ovens - var/on = FALSE - var/datum/beam/beam - -/obj/item/melee/roastingstick/Initialize() - . = ..() - if (!ovens) - ovens = typecacheof(list(/obj/singularity, /obj/machinery/power/supermatter_crystal, /obj/structure/bonfire)) - -/obj/item/melee/roastingstick/attack_self(mob/user) - on = !on - if(on) - extend(user) - else - if (held_sausage) - to_chat(user, "I can't retract [src] while [held_sausage] is attached!") - return - retract(user) - - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - add_fingerprint(user) - -/obj/item/melee/roastingstick/attackby(atom/target, mob/user) - ..() - if (istype(target, /obj/item/reagent_containers/food/snacks/rogue/meat/sausage)) - if (!on) - to_chat(user, "I must extend [src] to attach anything to it!") - return - if (held_sausage) - to_chat(user, "[held_sausage] is already attached to [src]!") - return - if (user.transferItemToLoc(target, src)) - held_sausage = target - else - to_chat(user, "[target] doesn't seem to want to get on [src]!") - update_icon() - -/obj/item/melee/roastingstick/attack_hand(mob/user) - ..() - if (held_sausage) - user.put_in_hands(held_sausage) - held_sausage = null - update_icon() - -/obj/item/melee/roastingstick/update_icon() - . = ..() - cut_overlays() - if (held_sausage) - var/mutable_appearance/sausage = mutable_appearance(icon, "roastingstick_sausage") - add_overlay(sausage) - -/obj/item/melee/roastingstick/proc/extend(user) - to_chat(user, "I extend [src].") - icon_state = "roastingstick_1" - item_state = "nullrod" - w_class = WEIGHT_CLASS_BULKY - -/obj/item/melee/roastingstick/proc/retract(user) - to_chat(user, "I collapse [src].") - icon_state = "roastingstick_0" - item_state = null - w_class = WEIGHT_CLASS_SMALL - -/obj/item/melee/roastingstick/handle_atom_del(atom/target) - if (target == held_sausage) - held_sausage = null - update_icon() - -/obj/item/melee/roastingstick/afterattack(atom/target, mob/user, proximity) - . = ..() - if (!on) - return - if (is_type_in_typecache(target, ovens)) -// if (held_sausage && held_sausage.roasted) -// to_chat(user, "My [held_sausage] has already been cooked!") -// return - if (istype(target, /obj/singularity) && get_dist(user, target) < 10) - to_chat(user, "I send [held_sausage] towards [target].") - playsound(src, 'sound/blank.ogg', 50, TRUE) - beam = user.Beam(target,icon_state="rped_upgrade",time=100) - else if (user.Adjacent(target)) - to_chat(user, "I extend [src] towards [target].") - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - else - return - if(do_after(user, 100, target = user)) - finish_roasting(user, target) - else - QDEL_NULL(beam) - playsound(src, 'sound/blank.ogg', 50, TRUE) - -/obj/item/melee/roastingstick/proc/finish_roasting(user, atom/target) - to_chat(user, "I finish roasting [held_sausage].") - playsound(src,'sound/blank.ogg',50,TRUE) - held_sausage.add_atom_colour(rgb(103,63,24), FIXED_COLOUR_PRIORITY) - held_sausage.name = "[target.name]-roasted [held_sausage.name]" - held_sausage.desc = "" - update_icon() - /obj/item/melee/cleric_mace name = "cleric mace" desc = "" diff --git a/code/game/objects/items/miscellaneous.dm b/code/game/objects/items/miscellaneous.dm index f11b6bcfb8..e34a4928e3 100644 --- a/code/game/objects/items/miscellaneous.dm +++ b/code/game/objects/items/miscellaneous.dm @@ -55,10 +55,6 @@ pod.explosionSize = list(0,0,0,0) new_item.forceMove(pod) var/msg = "After making your selection, you notice a strange target on the ground. It might be best to step back!" - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(istype(H.ears, /obj/item/radio/headset)) - msg = "You hear something crackle in your ears for a moment before a voice speaks. \"Please stand by for a message from Central Command. Message as follows: Item request received. Your package is inbound, please stand back from the landing site. Message ends.\"" to_chat(M, msg) new /obj/effect/DPtarget(get_turf(src), pod) @@ -83,7 +79,6 @@ /obj/item/storage/box/hero/PopulateContents() new /obj/item/clothing/head/fedora/curator(src) - new /obj/item/clothing/suit/curator(src) new /obj/item/clothing/under/rank/civilian/curator/treasure_hunter(src) new /obj/item/clothing/shoes/workboots/mining(src) new /obj/item/melee/curator_whip(src) @@ -92,8 +87,6 @@ name = "First Man on the Moon - 1960's." /obj/item/storage/box/hero/astronaut/PopulateContents() - new /obj/item/clothing/suit/space/nasavoid(src) - new /obj/item/clothing/head/helmet/space/nasavoid(src) new /obj/item/tank/internals/oxygen(src) new /obj/item/gps(src) @@ -117,8 +110,6 @@ augment_list = list() var/list/templist = list( /obj/item/organ/cyberimp/brain/anti_drop, - /obj/item/organ/cyberimp/arm/toolset, - /obj/item/organ/cyberimp/arm/surgery, /obj/item/organ/cyberimp/chest/thrusters, /obj/item/organ/lungs/cybernetic/upgraded, /obj/item/organ/liver/cybernetic/upgraded) //cyberimplants range from a nice bonus to fucking broken bullshit so no subtypesof diff --git a/code/game/objects/items/robot/ai_upgrades.dm b/code/game/objects/items/robot/ai_upgrades.dm deleted file mode 100644 index e045c355ad..0000000000 --- a/code/game/objects/items/robot/ai_upgrades.dm +++ /dev/null @@ -1,52 +0,0 @@ -///AI Upgrades - - -//Malf Picker -/obj/item/malf_upgrade - name = "combat software upgrade" - desc = "" - icon = 'icons/obj/module.dmi' - icon_state = "datadisk3" - - -/obj/item/malf_upgrade/afterattack(mob/living/silicon/ai/AI, mob/user, proximity) - . = ..() - if(!proximity) - return - if(!istype(AI)) - return - if(AI.malf_picker) - AI.malf_picker.processing_time += 50 - to_chat(AI, "[user] has attempted to upgrade you with combat software that you already possess. You gain 50 points to spend on Malfunction Modules instead.") - else - to_chat(AI, "[user] has upgraded you with combat software!") - to_chat(AI, "My current laws and objectives remain unchanged.") //this unlocks malf powers, but does not give the license to plasma flood - AI.add_malf_picker() - AI.hack_software = TRUE - log_game("[key_name(user)] has upgraded [key_name(AI)] with a [src].") - message_admins("[ADMIN_LOOKUPFLW(user)] has upgraded [ADMIN_LOOKUPFLW(AI)] with a [src].") - to_chat(user, "I upgrade [AI]. [src] is consumed in the process.") - qdel(src) - - -//Lipreading -/obj/item/surveillance_upgrade - name = "surveillance software upgrade" - desc = "" - icon = 'icons/obj/module.dmi' - icon_state = "datadisk3" - -/obj/item/surveillance_upgrade/afterattack(mob/living/silicon/ai/AI, mob/user, proximity) - . = ..() - if(!proximity) - return - if(!istype(AI)) - return - if(AI.eyeobj) - AI.eyeobj.relay_speech = TRUE - to_chat(AI, "[user] has upgraded you with surveillance software!") - to_chat(AI, "Via a combination of hidden microphones and lip reading software, you are able to use my cameras to listen in on conversations.") - to_chat(user, "I upgrade [AI]. [src] is consumed in the process.") - log_game("[key_name(user)] has upgraded [key_name(AI)] with a [src].") - message_admins("[ADMIN_LOOKUPFLW(user)] has upgraded [ADMIN_LOOKUPFLW(AI)] with a [src].") - qdel(src) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm deleted file mode 100644 index 59b7f65c15..0000000000 --- a/code/game/objects/items/robot/robot_items.dm +++ /dev/null @@ -1,941 +0,0 @@ -/********************************************************************** - Cyborg Spec Items -***********************************************************************/ -/obj/item/borg - icon = 'icons/mob/robot_items.dmi' - - -/obj/item/borg/stun - name = "electrically-charged arm" - icon_state = "elecarm" - var/charge_cost = 30 - -/obj/item/borg/stun/attack(mob/living/M, mob/living/user) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.check_shields(src, 0, "[M]'s [name]", MELEE_ATTACK)) - playsound(M, 'sound/blank.ogg', 50, TRUE) - return FALSE - if(iscyborg(user)) - var/mob/living/silicon/robot/R = user - if(!R.cell.use(charge_cost)) - return - - user.do_attack_animation(M) - M.Paralyze(100) - M.apply_effect(EFFECT_STUTTER, 5) - - M.visible_message("[user] has prodded [M] with [src]!", \ - "[user] has prodded you with [src]!") - - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - - log_combat(user, M, "stunned", src, "(INTENT: [uppertext(user.used_intent)])") - -/obj/item/borg/cyborghug - name = "hugging module" - icon_state = "hugmodule" - desc = "" - var/mode = 0 //0 = Hugs 1 = "Hug" 2 = Shock 3 = CRUSH - var/ccooldown = 0 - var/scooldown = 0 - var/shockallowed = FALSE//Can it be a stunarm when emagged. Only PK borgs get this by default. - var/boop = FALSE - -/obj/item/borg/cyborghug/attack_self(mob/living/user) - if(iscyborg(user)) - var/mob/living/silicon/robot/P = user - if(P.emagged&&shockallowed == 1) - if(mode < 3) - mode++ - else - mode = 0 - else if(mode < 1) - mode++ - else - mode = 0 - switch(mode) - if(0) - to_chat(user, "Power reset. Hugs!") - if(1) - to_chat(user, "Power increased!") - if(2) - to_chat(user, "BZZT. Electrifying arms...") - if(3) - to_chat(user, "ERROR: ARM ACTUATORS OVERLOADED.") - -/obj/item/borg/cyborghug/attack(mob/living/M, mob/living/silicon/robot/user) - if(M == user) - return - switch(mode) - if(0) - if(M.health >= 0) - if(user.zone_selected == BODY_ZONE_HEAD) - user.visible_message("[user] playfully boops [M] on the head!", \ - "I playfully boop [M] on the head!") - user.do_attack_animation(M, ATTACK_EFFECT_BOOP) - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - else if(ishuman(M)) - if(!(user.mobility_flags & MOBILITY_STAND)) - user.visible_message("[user] shakes [M] trying to get [M.p_them()] up!", \ - "I shake [M] trying to get [M.p_them()] up!") - else - user.visible_message("[user] hugs [M] to make [M.p_them()] feel better!", \ - "I hug [M] to make [M.p_them()] feel better!") - if(M.resting) - M.set_resting(FALSE, TRUE) - else - user.visible_message("[user] pets [M]!", \ - "I pet [M]!") - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - if(1) - if(M.health >= 0) - if(ishuman(M)) - if(!(M.mobility_flags & MOBILITY_STAND)) - user.visible_message("[user] shakes [M] trying to get [M.p_them()] up!", \ - "I shake [M] trying to get [M.p_them()] up!") - else if(user.zone_selected == BODY_ZONE_HEAD) - user.visible_message("[user] bops [M] on the head!", \ - "I bop [M] on the head!") - user.do_attack_animation(M, ATTACK_EFFECT_PUNCH) - else - user.visible_message("[user] hugs [M] in a firm bear-hug! [M] looks uncomfortable...", \ - "I hug [M] firmly to make [M.p_them()] feel better! [M] looks uncomfortable...") - if(M.resting) - M.set_resting(FALSE, TRUE) - else - user.visible_message("[user] bops [M] on the head!", \ - "I bop [M] on the head!") - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - if(2) - if(scooldown < world.time) - if(M.health >= 0) - if(ishuman(M)||ismonkey(M)) - M.electrocute_act(5, "[user]", flags = SHOCK_NOGLOVES) - user.visible_message("[user] electrocutes [M] with [user.p_their()] touch!", \ - "I electrocute [M] with your touch!") - M.update_mobility() - else - if(!iscyborg(M)) - M.adjustFireLoss(10) - user.visible_message("[user] shocks [M]!", \ - "I shock [M]!") - else - user.visible_message("[user] shocks [M]. It does not seem to have an effect", \ - "I shock [M] to no effect.") - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - user.cell.charge -= 500 - scooldown = world.time + 20 - if(3) - if(ccooldown < world.time) - if(M.health >= 0) - if(ishuman(M)) - user.visible_message("[user] crushes [M] in [user.p_their()] grip!", \ - "I crush [M] in your grip!") - else - user.visible_message("[user] crushes [M]!", \ - "I crush [M]!") - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - M.adjustBruteLoss(15) - user.cell.charge -= 300 - ccooldown = world.time + 10 - -/obj/item/borg/cyborghug/peacekeeper - shockallowed = TRUE - -/obj/item/borg/cyborghug/medical - boop = TRUE - -/obj/item/borg/charger - name = "power connector" - icon_state = "charger_draw" - item_flags = NOBLUDGEON - var/mode = "draw" - var/static/list/charge_machines = typecacheof(list(/obj/machinery/cell_charger, /obj/machinery/recharger, /obj/machinery/recharge_station, /obj/machinery/mech_bay_recharge_port)) - var/static/list/charge_items = typecacheof(list(/obj/item/stock_parts/cell, /obj/item/gun/energy)) - -/obj/item/borg/charger/Initialize() - . = ..() - -/obj/item/borg/charger/update_icon() - ..() - icon_state = "charger_[mode]" - -/obj/item/borg/charger/attack_self(mob/user) - if(mode == "draw") - mode = "charge" - else - mode = "draw" - to_chat(user, "I toggle [src] to \"[mode]\" mode.") - update_icon() - -/obj/item/borg/charger/afterattack(obj/item/target, mob/living/silicon/robot/user, proximity_flag) - . = ..() - if(!proximity_flag || !iscyborg(user)) - return - if(mode == "draw") - if(is_type_in_list(target, charge_machines)) - var/obj/machinery/M = target - if((M.stat & (NOPOWER|BROKEN)) || !M.anchored) - to_chat(user, "[M] is unpowered!") - return - - to_chat(user, "I connect to [M]'s power line...") - while(do_after(user, 15, target = M, progress = 0)) - if(!user || !user.cell || mode != "draw") - return - - if((M.stat & (NOPOWER|BROKEN)) || !M.anchored) - break - - if(!user.cell.give(150)) - break - - M.use_power(200) - - to_chat(user, "I stop charging myself.") - - else if(is_type_in_list(target, charge_items)) - var/obj/item/stock_parts/cell/cell = target - if(!istype(cell)) - cell = locate(/obj/item/stock_parts/cell) in target - if(!cell) - to_chat(user, "[target] has no power cell!") - return - - if(istype(target, /obj/item/gun/energy)) - var/obj/item/gun/energy/E = target - if(!E.can_charge) - to_chat(user, "[target] has no power port!") - return - - if(!cell.charge) - to_chat(user, "[target] has no power!") - - - to_chat(user, "I connect to [target]'s power port...") - - while(do_after(user, 15, target = target, progress = 0)) - if(!user || !user.cell || mode != "draw") - return - - if(!cell || !target) - return - - if(cell != target && cell.loc != target) - return - - var/draw = min(cell.charge, cell.chargerate*0.5, user.cell.maxcharge-user.cell.charge) - if(!cell.use(draw)) - break - if(!user.cell.give(draw)) - break - target.update_icon() - - to_chat(user, "I stop charging myself.") - - else if(is_type_in_list(target, charge_items)) - var/obj/item/stock_parts/cell/cell = target - if(!istype(cell)) - cell = locate(/obj/item/stock_parts/cell) in target - if(!cell) - to_chat(user, "[target] has no power cell!") - return - - if(istype(target, /obj/item/gun/energy)) - var/obj/item/gun/energy/E = target - if(!E.can_charge) - to_chat(user, "[target] has no power port!") - return - - if(cell.charge >= cell.maxcharge) - to_chat(user, "[target] is already charged!") - - to_chat(user, "I connect to [target]'s power port...") - - while(do_after(user, 15, target = target, progress = 0)) - if(!user || !user.cell || mode != "charge") - return - - if(!cell || !target) - return - - if(cell != target && cell.loc != target) - return - - var/draw = min(user.cell.charge, cell.chargerate*0.5, cell.maxcharge-cell.charge) - if(!user.cell.use(draw)) - break - if(!cell.give(draw)) - break - target.update_icon() - - to_chat(user, "I stop charging [target].") - -/obj/item/harmalarm - name = "\improper Sonic Harm Prevention Tool" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "megaphone" - var/cooldown = 0 - -/obj/item/harmalarm/emag_act(mob/user) - obj_flags ^= EMAGGED - if(obj_flags & EMAGGED) - to_chat(user, "I short out the safeties on [src]!") - else - to_chat(user, "I reset the safeties on [src]!") - -/obj/item/harmalarm/attack_self(mob/user) - var/safety = !(obj_flags & EMAGGED) - if(cooldown > world.time) - to_chat(user, "The device is still recharging!") - return - - if(iscyborg(user)) - var/mob/living/silicon/robot/R = user - if(!R.cell || R.cell.charge < 1200) - to_chat(user, "I don't have enough charge to do this!") - return - R.cell.charge -= 1000 - if(R.emagged) - safety = FALSE - - if(safety == TRUE) - user.visible_message("[user] blares out a near-deafening siren from its speakers!", \ - "The siren pierces your hearing and confuses you!", \ - "The siren pierces your hearing!") - for(var/mob/living/carbon/M in get_hearers_in_view(9, user)) - if(M.get_ear_protection() == FALSE) - M.confused += 6 - audible_message("HUMAN HARM") - playsound(get_turf(src), 'sound/blank.ogg', 70, 3) - cooldown = world.time + 200 - log_game("[key_name(user)] used a Cyborg Harm Alarm in [AREACOORD(user)]") - if(iscyborg(user)) - var/mob/living/silicon/robot/R = user - to_chat(R.connected_ai, "
    NOTICE - Peacekeeping 'HARM ALARM' used by: [user]
    ") - - return - - if(safety == FALSE) - user.audible_message("BZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZT") - for(var/mob/living/carbon/C in get_hearers_in_view(9, user)) - var/bang_effect = C.soundbang_act(2, 0, 0, 5) - switch(bang_effect) - if(1) - C.confused += 5 - C.stuttering += 10 - C.Jitter(10) - if(2) - C.Paralyze(40) - C.confused += 10 - C.stuttering += 15 - C.Jitter(25) - playsound(get_turf(src), 'sound/blank.ogg', 130, 3) - cooldown = world.time + 600 - log_game("[key_name(user)] used an emagged Cyborg Harm Alarm in [AREACOORD(user)]") - -#define DISPENSE_LOLLIPOP_MODE 1 -#define THROW_LOLLIPOP_MODE 2 -#define THROW_GUMBALL_MODE 3 -#define DISPENSE_ICECREAM_MODE 4 - -/obj/item/borg/lollipop - name = "treat fabricator" - desc = "" - icon_state = "lollipop" - var/candy = 30 - var/candymax = 30 - var/charge_delay = 10 - var/charging = FALSE - var/mode = DISPENSE_LOLLIPOP_MODE - - var/firedelay = 0 - var/hitspeed = 2 - var/hitdamage = 0 - var/emaggedhitdamage = 3 - -/obj/item/borg/lollipop/clown - emaggedhitdamage = 0 - -/obj/item/borg/lollipop/equipped() - . = ..() - check_amount() - -/obj/item/borg/lollipop/dropped() - . = ..() - check_amount() - -/obj/item/borg/lollipop/proc/check_amount() //Doesn't even use processing ticks. - if(charging) - return - if(candy < candymax) - addtimer(CALLBACK(src, PROC_REF(charge_lollipops)), charge_delay) - charging = TRUE - -/obj/item/borg/lollipop/proc/charge_lollipops() - candy++ - charging = FALSE - check_amount() - -/obj/item/borg/lollipop/proc/dispense(atom/A, mob/user) - if(candy <= 0) - to_chat(user, "No treats left in storage!") - return FALSE - var/turf/T = get_turf(A) - if(!T || !istype(T) || !isopenturf(T)) - return FALSE - if(isobj(A)) - var/obj/O = A - if(O.density) - return FALSE - - var/obj/item/reagent_containers/food/snacks/L - switch(mode) - if(DISPENSE_LOLLIPOP_MODE) - L = new /obj/item/reagent_containers/food/snacks/lollipop(T) - if(DISPENSE_ICECREAM_MODE) - L = new /obj/item/reagent_containers/food/snacks/icecream(T) - var/obj/item/reagent_containers/food/snacks/icecream/I = L - I.add_ice_cream("vanilla") - I.desc = "" - - var/into_hands = FALSE - if(ismob(A)) - var/mob/M = A - into_hands = M.put_in_hands(L) - - candy-- - check_amount() - - if(into_hands) - user.visible_message("[user] dispenses a treat into the hands of [A].", "I dispense a treat into the hands of [A].", "I hear a click.") - else - user.visible_message("[user] dispenses a treat.", "I dispense a treat.", "I hear a click.") - - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - return TRUE - -/obj/item/borg/lollipop/proc/shootL(atom/target, mob/living/user, params) - if(candy <= 0) - to_chat(user, "Not enough lollipops left!") - return FALSE - candy-- - var/obj/item/ammo_casing/caseless/lollipop/A = new /obj/item/ammo_casing/caseless/lollipop(src) - A.BB.damage = hitdamage - if(hitdamage) - A.BB.nodamage = FALSE - A.BB.speed = 0.5 - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - A.fire_casing(target, user, params, 0, 0, null, 0, src) - user.visible_message("[user] blasts a flying lollipop at [target]!") - check_amount() - -/obj/item/borg/lollipop/proc/shootG(atom/target, mob/living/user, params) //Most certainly a good idea. - if(candy <= 0) - to_chat(user, "Not enough gumballs left!") - return FALSE - candy-- - var/obj/item/ammo_casing/caseless/gumball/A = new /obj/item/ammo_casing/caseless/gumball(src) - A.BB.damage = hitdamage - if(hitdamage) - A.BB.nodamage = FALSE - A.BB.speed = 0.5 - A.BB.color = rgb(rand(0, 255), rand(0, 255), rand(0, 255)) - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - A.fire_casing(target, user, params, 0, 0, null, 0, src) - user.visible_message("[user] shoots a high-velocity gumball at [target]!") - check_amount() - -/obj/item/borg/lollipop/afterattack(atom/target, mob/living/user, proximity, click_params) - . = ..() - check_amount() - if(iscyborg(user)) - var/mob/living/silicon/robot/R = user - if(!R.cell.use(12)) - to_chat(user, "Not enough power.") - return FALSE - if(R.emagged) - hitdamage = emaggedhitdamage - switch(mode) - if(DISPENSE_LOLLIPOP_MODE, DISPENSE_ICECREAM_MODE) - if(!proximity) - return FALSE - dispense(target, user) - if(THROW_LOLLIPOP_MODE) - shootL(target, user, click_params) - if(THROW_GUMBALL_MODE) - shootG(target, user, click_params) - hitdamage = initial(hitdamage) - -/obj/item/borg/lollipop/attack_self(mob/living/user) - switch(mode) - if(DISPENSE_LOLLIPOP_MODE) - mode = THROW_LOLLIPOP_MODE - to_chat(user, "Module is now throwing lollipops.") - if(THROW_LOLLIPOP_MODE) - mode = THROW_GUMBALL_MODE - to_chat(user, "Module is now blasting gumballs.") - if(THROW_GUMBALL_MODE) - mode = DISPENSE_ICECREAM_MODE - to_chat(user, "Module is now dispensing ice cream.") - if(DISPENSE_ICECREAM_MODE) - mode = DISPENSE_LOLLIPOP_MODE - to_chat(user, "Module is now dispensing lollipops.") - ..() - -#undef DISPENSE_LOLLIPOP_MODE -#undef THROW_LOLLIPOP_MODE -#undef THROW_GUMBALL_MODE -#undef DISPENSE_ICECREAM_MODE - -/obj/item/ammo_casing/caseless/gumball - name = "Gumball" - desc = "" - projectile_type = /obj/projectile/bullet/reusable/gumball - click_cooldown_override = 2 - - -/obj/projectile/bullet/reusable/gumball - name = "gumball" - desc = "" - icon_state = "gumball" - ammo_type = /obj/item/reagent_containers/food/snacks/gumball/cyborg - nodamage = TRUE - -/obj/projectile/bullet/reusable/gumball/handle_drop() - if(!dropped) - var/turf/T = get_turf(src) - var/obj/item/reagent_containers/food/snacks/gumball/S = new ammo_type(T) - S.color = color - dropped = TRUE - -/obj/item/ammo_casing/caseless/lollipop //NEEDS RANDOMIZED COLOR LOGIC. - name = "Lollipop" - desc = "" - projectile_type = /obj/projectile/bullet/reusable/lollipop - click_cooldown_override = 2 - -/obj/projectile/bullet/reusable/lollipop - name = "lollipop" - desc = "" - icon_state = "lollipop_1" - ammo_type = /obj/item/reagent_containers/food/snacks/lollipop/cyborg - var/color2 = rgb(0, 0, 0) - nodamage = TRUE - -/obj/projectile/bullet/reusable/lollipop/Initialize() - . = ..() - var/obj/item/reagent_containers/food/snacks/lollipop/S = new ammo_type(src) - color2 = S.headcolor - var/mutable_appearance/head = mutable_appearance('icons/obj/projectiles.dmi', "lollipop_2") - head.color = color2 - add_overlay(head) - -/obj/projectile/bullet/reusable/lollipop/handle_drop() - if(!dropped) - var/turf/T = get_turf(src) - var/obj/item/reagent_containers/food/snacks/lollipop/S = new ammo_type(T) - S.change_head_color(color2) - dropped = TRUE - -#define PKBORG_DAMPEN_CYCLE_DELAY 20 - -//Peacekeeper Cyborg Projectile Dampenening Field -/obj/item/borg/projectile_dampen - name = "\improper Hyperkinetic Dampening projector" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "shield" - var/maxenergy = 1500 - var/energy = 1500 - var/energy_recharge = 7.5 - var/energy_recharge_cyborg_drain_coefficient = 0.4 - var/cyborg_cell_critical_percentage = 0.05 - var/mob/living/silicon/robot/host = null - var/datum/proximity_monitor/advanced/dampening_field - var/projectile_damage_coefficient = 0.5 - var/projectile_damage_tick_ecost_coefficient = 2 //Lasers get half their damage chopped off, drains 50 power/tick. Note that fields are processed 5 times per second. - var/projectile_speed_coefficient = 1.5 //Higher the coefficient slower the projectile. - var/projectile_tick_speed_ecost = 15 - var/list/obj/projectile/tracked - var/image/projectile_effect - var/field_radius = 3 - var/active = FALSE - var/cycle_delay = 0 - -/obj/item/borg/projectile_dampen/debug - maxenergy = 50000 - energy = 50000 - energy_recharge = 5000 - -/obj/item/borg/projectile_dampen/Initialize() - . = ..() - projectile_effect = image('icons/effects/fields.dmi', "projectile_dampen_effect") - tracked = list() - icon_state = "shield0" - START_PROCESSING(SSfastprocess, src) - host = loc - -/obj/item/borg/projectile_dampen/Destroy() - STOP_PROCESSING(SSfastprocess, src) - return ..() - -/obj/item/borg/projectile_dampen/attack_self(mob/user) - if(cycle_delay > world.time) - to_chat(user, "[src] is still recycling its projectors!") - return - cycle_delay = world.time + PKBORG_DAMPEN_CYCLE_DELAY - if(!active) - if(!user.has_buckled_mobs()) - activate_field() - else - to_chat(user, "[src]'s safety cutoff prevents you from activating it due to living beings being ontop of you!") - else - deactivate_field() - update_icon() - to_chat(user, "I [active? "activate":"deactivate"] [src].") - -/obj/item/borg/projectile_dampen/update_icon() - icon_state = "[initial(icon_state)][active]" - -/obj/item/borg/projectile_dampen/proc/activate_field() - if(istype(dampening_field)) - QDEL_NULL(dampening_field) - dampening_field = make_field(/datum/proximity_monitor/advanced/peaceborg_dampener, list("current_range" = field_radius, "host" = src, "projector" = src)) - var/mob/living/silicon/robot/owner = get_host() - if(owner) - owner.module.allow_riding = FALSE - active = TRUE - -/obj/item/borg/projectile_dampen/proc/deactivate_field() - QDEL_NULL(dampening_field) - visible_message("\The [src] shuts off!") - for(var/P in tracked) - restore_projectile(P) - active = FALSE - - var/mob/living/silicon/robot/owner = get_host() - if(owner) - owner.module.allow_riding = TRUE - -/obj/item/borg/projectile_dampen/proc/get_host() - if(istype(host)) - return host - else - if(iscyborg(host.loc)) - return host.loc - return null - -/obj/item/borg/projectile_dampen/dropped() - . = ..() - host = loc - -/obj/item/borg/projectile_dampen/equipped() - . = ..() - host = loc - -/obj/item/borg/projectile_dampen/on_mob_death() - deactivate_field() - . = ..() - -/obj/item/borg/projectile_dampen/process() - process_recharge() - process_usage() - update_location() - -/obj/item/borg/projectile_dampen/proc/update_location() - if(dampening_field) - dampening_field.HandleMove() - -/obj/item/borg/projectile_dampen/proc/process_usage() - var/usage = 0 - for(var/I in tracked) - var/obj/projectile/P = I - if(!P.stun && P.nodamage) //No damage - continue - usage += projectile_tick_speed_ecost - usage += (tracked[I] * projectile_damage_tick_ecost_coefficient) - energy = CLAMP(energy - usage, 0, maxenergy) - if(energy <= 0) - deactivate_field() - visible_message("[src] blinks \"ENERGY DEPLETED\".") - -/obj/item/borg/projectile_dampen/proc/process_recharge() - if(!istype(host)) - if(iscyborg(host.loc)) - host = host.loc - else - energy = CLAMP(energy + energy_recharge, 0, maxenergy) - return - if(host.cell && (host.cell.charge >= (host.cell.maxcharge * cyborg_cell_critical_percentage)) && (energy < maxenergy)) - host.cell.use(energy_recharge*energy_recharge_cyborg_drain_coefficient) - energy += energy_recharge - -/obj/item/borg/projectile_dampen/proc/dampen_projectile(obj/projectile/P, track_projectile = TRUE) - if(tracked[P]) - return - if(track_projectile) - tracked[P] = P.damage - P.damage *= projectile_damage_coefficient - P.speed *= projectile_speed_coefficient - P.add_overlay(projectile_effect) - -/obj/item/borg/projectile_dampen/proc/restore_projectile(obj/projectile/P) - tracked -= P - P.damage *= (1/projectile_damage_coefficient) - P.speed *= (1/projectile_speed_coefficient) - P.cut_overlay(projectile_effect) - -/********************************************************************** - HUD/SIGHT things -***********************************************************************/ -/obj/item/borg/sight - var/sight_mode = null - - -/obj/item/borg/sight/xray - name = "\proper X-ray vision" - icon = 'icons/obj/decals.dmi' - icon_state = "securearea" - sight_mode = BORGXRAY - -/obj/item/borg/sight/thermal - name = "\proper thermal vision" - sight_mode = BORGTHERM - icon_state = "thermal" - - -/obj/item/borg/sight/meson - name = "\proper meson vision" - sight_mode = BORGMESON - icon_state = "meson" - -/obj/item/borg/sight/material - name = "\proper material vision" - sight_mode = BORGMATERIAL - icon_state = "material" - -/obj/item/borg/sight/hud - name = "hud" - var/obj/item/clothing/glasses/hud/hud = null - - -/obj/item/borg/sight/hud/med - name = "medical hud" - icon_state = "healthhud" - -/obj/item/borg/sight/hud/med/Initialize() - . = ..() - hud = new /obj/item/clothing/glasses/hud/health(src) - - -/obj/item/borg/sight/hud/sec - name = "security hud" - icon_state = "securityhud" - -/obj/item/borg/sight/hud/sec/Initialize() - . = ..() - hud = new /obj/item/clothing/glasses/hud/security(src) - - -/********************************************************************** - Borg apparatus -***********************************************************************/ -//These are tools that can hold only specific items. For example, the mediborg gets one that can only hold beakers and bottles. - -/obj/item/borg/apparatus/ - name = "unknown storage apparatus" - desc = "" - icon = 'icons/mob/robot_items.dmi' - icon_state = "hugmodule" - var/obj/item/stored - var/list/storable = list() - -/obj/item/borg/apparatus/Initialize() - . = ..() - RegisterSignal(loc.loc, COMSIG_BORG_SAFE_DECONSTRUCT, PROC_REF(safedecon)) - -/obj/item/borg/apparatus/Destroy() - if(stored) - qdel(stored) - . = ..() - -///If we're safely deconstructed, we put the item neatly onto the ground, rather than deleting it. -/obj/item/borg/apparatus/proc/safedecon() - if(stored) - stored.forceMove(get_turf(src)) - stored = null - -/obj/item/borg/apparatus/Exited(atom/A) - if(A == stored) //sanity check - UnregisterSignal(stored, COMSIG_ATOM_UPDATE_ICON) - stored = null - update_icon() - . = ..() - -///A right-click verb, for those not using hotkey mode. -/obj/item/borg/apparatus/verb/verb_dropHeld() - set category = "Object" - set name = "Drop" - - if(usr != loc || !stored) - return - stored.forceMove(get_turf(usr)) - return - -/obj/item/borg/apparatus/attack_self(mob/living/silicon/robot/user) - if(!stored) - return ..() - if(user.client?.keys_held["Alt"]) - stored.forceMove(get_turf(user)) - return - stored.attack_self(user) - -/obj/item/borg/apparatus/pre_attack(atom/A, mob/living/user, params) - if(!stored) - var/itemcheck = FALSE - for(var/i in storable) - if(istype(A, i)) - itemcheck = TRUE - break - if(itemcheck) - var/obj/item/O = A - O.forceMove(src) - stored = O - RegisterSignal(stored, COMSIG_ATOM_UPDATE_ICON, TYPE_PROC_REF(/atom, update_icon)) - update_icon() - return - else - stored.melee_attack_chain(user, A, params) - return - . = ..() - -/obj/item/borg/apparatus/attackby(obj/item/W, mob/user, params) - if(stored) - W.melee_attack_chain(user, stored, params) - return - . = ..() - -///////////////// -//beaker holder// -///////////////// - -/obj/item/borg/apparatus/beaker - name = "beaker storage apparatus" - desc = "" - icon_state = "borg_beaker_apparatus" - storable = list(/obj/item/reagent_containers/glass/beaker, - /obj/item/reagent_containers/glass/bottle) - -/obj/item/borg/apparatus/beaker/Initialize() - . = ..() - stored = new /obj/item/reagent_containers/glass/beaker/large(src) - RegisterSignal(stored, COMSIG_ATOM_UPDATE_ICON, TYPE_PROC_REF(/atom, update_icon)) - update_icon() - -/obj/item/borg/apparatus/beaker/Destroy() - if(stored) - var/obj/item/reagent_containers/C = stored - C.SplashReagents(get_turf(src)) - qdel(stored) - . = ..() - -/obj/item/borg/apparatus/beaker/examine() - . = ..() - if(stored) - var/obj/item/reagent_containers/C = stored - . += "The apparatus currently has [C] secured, which contains:" - if(length(C.reagents.reagent_list)) - for(var/datum/reagent/R in C.reagents.reagent_list) - . += "[R.volume] units of [R.name]" - else - . += "Nothing." - -/obj/item/borg/apparatus/beaker/update_icon() - cut_overlays() - if(stored) - COMPILE_OVERLAYS(stored) - stored.pixel_x = 0 - stored.pixel_y = 0 - var/image/img = image("icon"=stored, "layer"=FLOAT_LAYER) - var/image/arm = image("icon"="borg_beaker_apparatus_arm", "layer"=FLOAT_LAYER) - if(istype(stored, /obj/item/reagent_containers/glass/beaker)) - arm.pixel_y = arm.pixel_y - 3 - img.plane = FLOAT_PLANE - add_overlay(img) - add_overlay(arm) - else - var/image/arm = image("icon"="borg_beaker_apparatus_arm", "layer"=FLOAT_LAYER) - arm.pixel_y = arm.pixel_y - 5 - add_overlay(arm) - -/obj/item/borg/apparatus/beaker/attack_self(mob/living/silicon/robot/user) - if(stored && !user.client?.keys_held["Alt"] && user.used_intent.type != INTENT_HELP) - var/obj/item/reagent_containers/C = stored - C.SplashReagents(get_turf(user)) - loc.visible_message("[user] spills the contents of the [C] all over the floor.") - return - . = ..() - -/obj/item/borg/apparatus/beaker/extra - name = "secondary beaker storage apparatus" - desc = "" - -/obj/item/borg/apparatus/beaker/service - name = "beverage storage apparatus" - desc = "" - icon_state = "borg_beaker_apparatus" - storable = list(/obj/item/reagent_containers/food/drinks/, - /obj/item/reagent_containers/food/condiment) - -/obj/item/borg/apparatus/beaker/service/Initialize() - . = ..() - stored = new /obj/item/reagent_containers/food/drinks/drinkingglass(src) - RegisterSignal(stored, COMSIG_ATOM_UPDATE_ICON, TYPE_PROC_REF(/atom, update_icon)) - update_icon() - -//////////////////// -//engi part holder// -//////////////////// - -/obj/item/borg/apparatus/circuit - name = "circuit manipulation apparatus" - desc = "" - icon_state = "borg_hardware_apparatus" - storable = list(/obj/item/circuitboard, - /obj/item/electronics) - -/obj/item/borg/apparatus/circuit/Initialize() - . = ..() - update_icon() - -/obj/item/borg/apparatus/circuit/update_icon() - cut_overlays() - if(stored) - COMPILE_OVERLAYS(stored) - stored.pixel_x = -3 - stored.pixel_y = 0 - var/image/arm - if(istype(stored, /obj/item/circuitboard)) - arm = image("icon"="borg_hardware_apparatus_arm1", "layer"=FLOAT_LAYER) - else - arm = image("icon"="borg_hardware_apparatus_arm2", "layer"=FLOAT_LAYER) - var/image/img = image("icon"=stored, "layer"=FLOAT_LAYER) - img.plane = FLOAT_PLANE - add_overlay(arm) - add_overlay(img) - else - var/image/arm = image("icon"="borg_hardware_apparatus_arm1", "layer"=FLOAT_LAYER) - add_overlay(arm) - -/obj/item/borg/apparatus/circuit/examine() - . = ..() - if(stored) - . += "The apparatus currently has [stored] secured." - -/obj/item/borg/apparatus/circuit/pre_attack(atom/A, mob/living/user, params) - . = ..() - if(istype(A, /obj/item/aiModule) && !stored) //If an admin wants a borg to upload laws, who am I to stop them? Otherwise, we can hint that it fails - to_chat(user, "This circuit board doesn't seem to have standard robot apparatus pin holes. You're unable to pick it up.") diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm deleted file mode 100644 index c6c8125cd1..0000000000 --- a/code/game/objects/items/robot/robot_parts.dm +++ /dev/null @@ -1,421 +0,0 @@ - - -//The robot bodyparts have been moved to code/module/surgery/bodyparts/robot_bodyparts.dm - - -/obj/item/robot_suit - name = "cyborg endoskeleton" - desc = "" - icon = 'icons/mob/augmentation/augments.dmi' - icon_state = "robo_suit" - var/obj/item/bodypart/l_arm/robot/l_arm = null - var/obj/item/bodypart/r_arm/robot/r_arm = null - var/obj/item/bodypart/l_leg/robot/l_leg = null - var/obj/item/bodypart/r_leg/robot/r_leg = null - var/obj/item/bodypart/chest/robot/chest = null - var/obj/item/bodypart/head/robot/head = null - - var/created_name = "" - var/mob/living/silicon/ai/forced_ai - var/locomotion = 1 - var/lawsync = 1 - var/aisync = 1 - var/panel_locked = TRUE - -/obj/item/robot_suit/Initialize() - . = ..() - update_icon() - -/obj/item/robot_suit/prebuilt/Initialize() - . = ..() - l_arm = new(src) - r_arm = new(src) - l_leg = new(src) - r_leg = new(src) - head = new(src) - head.flash1 = new(head) - head.flash2 = new(head) - chest = new(src) - chest.wired = TRUE - chest.cell = new /obj/item/stock_parts/cell/high/plus(chest) - update_icon() - -/obj/item/robot_suit/update_icon() - cut_overlays() - if(l_arm) - add_overlay("[l_arm.icon_state]+o") - if(r_arm) - add_overlay("[r_arm.icon_state]+o") - if(chest) - add_overlay("[chest.icon_state]+o") - if(l_leg) - add_overlay("[l_leg.icon_state]+o") - if(r_leg) - add_overlay("[r_leg.icon_state]+o") - if(head) - add_overlay("[head.icon_state]+o") - -/obj/item/robot_suit/proc/check_completion() - if(src.l_arm && src.r_arm) - if(src.l_leg && src.r_leg) - if(src.chest && src.head) - SSblackbox.record_feedback("amount", "cyborg_frames_built", 1) - return 1 - return 0 - -/obj/item/robot_suit/wrench_act(mob/living/user, obj/item/I) //Deconstucts empty borg shell. Flashes remain unbroken because they haven't been used yet - . = ..() - var/turf/T = get_turf(src) - if(l_leg || r_leg || chest || l_arm || r_arm || head) - if(I.use_tool(src, user, 5, volume=50)) - if(l_leg) - l_leg.forceMove(T) - l_leg = null - if(r_leg) - r_leg.forceMove(T) - r_leg = null - if(chest) - if (chest.cell) //Sanity check. - chest.cell.forceMove(T) - chest.cell = null - chest.forceMove(T) - new /obj/item/stack/cable_coil(T, 1) - chest.wired = FALSE - chest = null - if(l_arm) - l_arm.forceMove(T) - l_arm = null - if(r_arm) - r_arm.forceMove(T) - r_arm = null - if(head) - head.forceMove(T) - head.flash1.forceMove(T) - head.flash1 = null - head.flash2.forceMove(T) - head.flash2 = null - head = null - to_chat(user, "I disassemble the cyborg shell.") - else - to_chat(user, "There is nothing to remove from the endoskeleton!") - update_icon() - -/obj/item/robot_suit/proc/put_in_hand_or_drop(mob/living/user, obj/item/I) //normal put_in_hands() drops the item ontop of the player, this drops it at the suit's loc - if(!user.put_in_hands(I)) - I.forceMove(drop_location()) - return FALSE - return TRUE - -/obj/item/robot_suit/screwdriver_act(mob/living/user, obj/item/I) //Swaps the power cell if you're holding a new one in your other hand. - . = ..() - if(.) - return TRUE - - if(!chest) //can't remove a cell if there's no chest to remove it from. - to_chat(user, "[src] has no attached torso!") - return - - var/obj/item/stock_parts/cell/temp_cell = user.is_holding_item_of_type(/obj/item/stock_parts/cell) - var/swap_failed - if(!temp_cell) //if we're not holding a cell - swap_failed = TRUE - else if(!user.transferItemToLoc(temp_cell, chest)) - swap_failed = TRUE - to_chat(user, "[temp_cell] is stuck to your hand, you can't put it in [src]!") - - if(chest.cell) //drop the chest's current cell no matter what. - put_in_hand_or_drop(user, chest.cell) - - if(swap_failed) //we didn't transfer any new items. - if(chest.cell) //old cell ejected, nothing inserted. - to_chat(user, "I remove [chest.cell] from [src].") - chest.cell = null - else - to_chat(user, "The power cell slot in [src]'s torso is empty!") - return - - to_chat(user, "I [chest.cell ? "replace [src]'s [chest.cell.name] with [temp_cell]" : "insert [temp_cell] into [src]"].") - chest.cell = temp_cell - return TRUE - -/obj/item/robot_suit/attackby(obj/item/W, mob/user, params) - - if(istype(W, /obj/item/stack/sheet/metal)) - var/obj/item/stack/sheet/metal/M = W - if(!l_arm && !r_arm && !l_leg && !r_leg && !chest && !head) - if (M.use(1)) - var/obj/item/bot_assembly/ed209/B = new - B.forceMove(drop_location()) - to_chat(user, "I arm the robot frame.") - var/holding_this = user.get_inactive_held_item()==src - qdel(src) - if (holding_this) - user.put_in_inactive_hand(B) - else - to_chat(user, "I need one sheet of metal to start building ED-209!") - return - else if(istype(W, /obj/item/bodypart/l_leg/robot)) - if(l_leg) - return - if(!user.transferItemToLoc(W, src)) - return - W.icon_state = initial(W.icon_state) - W.cut_overlays() - l_leg = W - update_icon() - - else if(istype(W, /obj/item/bodypart/r_leg/robot)) - if(src.r_leg) - return - if(!user.transferItemToLoc(W, src)) - return - W.icon_state = initial(W.icon_state) - W.cut_overlays() - r_leg = W - update_icon() - - else if(istype(W, /obj/item/bodypart/l_arm/robot)) - if(l_arm) - return - if(!user.transferItemToLoc(W, src)) - return - W.icon_state = initial(W.icon_state) - W.cut_overlays() - l_arm = W - update_icon() - - else if(istype(W, /obj/item/bodypart/r_arm/robot)) - if(r_arm) - return - if(!user.transferItemToLoc(W, src)) - return - W.icon_state = initial(W.icon_state)//in case it is a dismembered robotic limb - W.cut_overlays() - r_arm = W - update_icon() - - else if(istype(W, /obj/item/bodypart/chest/robot)) - var/obj/item/bodypart/chest/robot/CH = W - if(chest) - return - if(CH.wired && CH.cell) - if(!user.transferItemToLoc(CH, src)) - return - CH.icon_state = initial(CH.icon_state) //in case it is a dismembered robotic limb - CH.cut_overlays() - chest = CH - update_icon() - else if(!CH.wired) - to_chat(user, "I need to attach wires to it first!") - else - to_chat(user, "I need to attach a cell to it first!") - - else if(istype(W, /obj/item/bodypart/head/robot)) - var/obj/item/bodypart/head/robot/HD = W - for(var/X in HD.contents) - if(istype(X, /obj/item/organ)) - to_chat(user, "There are organs inside [HD]!") - return - if(head) - return - if(HD.flash2 && HD.flash1) - if(!user.transferItemToLoc(HD, src)) - return - HD.icon_state = initial(HD.icon_state)//in case it is a dismembered robotic limb - HD.cut_overlays() - head = HD - update_icon() - else - to_chat(user, "I need to attach a flash to it first!") - - else if (W.tool_behaviour == TOOL_MULTITOOL) - if(check_completion()) - Interact(user) - else - to_chat(user, "The endoskeleton must be assembled before debugging can begin!") - - else if(istype(W, /obj/item/mmi)) - var/obj/item/mmi/M = W - if(check_completion()) - if(!chest.cell) - to_chat(user, "The endoskeleton still needs a power cell!") - return - if(!isturf(loc)) - to_chat(user, "I can't put [M] in, the frame has to be standing on the ground to be perfectly precise!") - return - if(!M.brainmob) - to_chat(user, "Sticking an empty [M.name] into the frame would sort of defeat the purpose!") - return - - var/mob/living/brain/BM = M.brainmob - if(!BM.key || !BM.mind) - to_chat(user, "The MMI indicates that their mind is completely unresponsive; there's no point!") - return - - if(!BM.client) //braindead - to_chat(user, "The MMI indicates that their mind is currently inactive; it might change!") - return - - if(BM.stat == DEAD || BM.suiciding || (M.brain && (M.brain.brain_death || M.brain.suicided))) - to_chat(user, "Sticking a dead brain into the frame would sort of defeat the purpose!") - return - - if(M.brain?.organ_flags & ORGAN_FAILING) - to_chat(user, "The MMI indicates that the brain is damaged!") - return - - if(is_banned_from(BM.ckey, "Cyborg") || QDELETED(src) || QDELETED(BM) || QDELETED(user) || QDELETED(M) || !Adjacent(user)) - if(!QDELETED(M)) - to_chat(user, "This [M.name] does not seem to fit!") - return - - if(!user.temporarilyRemoveItemFromInventory(W)) - return - - var/mob/living/silicon/robot/O = new /mob/living/silicon/robot/nocell(get_turf(loc)) - if(!O) - return - - if(M.laws && M.laws.id != DEFAULT_AI_LAWID) - aisync = 0 - lawsync = 0 - O.laws = M.laws - M.laws.associate(O) - - O.invisibility = 0 - //Transfer debug settings to new mob - O.custom_name = created_name - O.locked = panel_locked - if(!aisync) - lawsync = 0 - O.connected_ai = null - else - O.notify_ai(NEW_BORG) - if(forced_ai) - O.connected_ai = forced_ai - if(!lawsync) - O.lawupdate = 0 - if(M.laws.id == DEFAULT_AI_LAWID) - O.make_laws() - - SSticker.mode.remove_antag_for_borging(BM.mind) - O.job = "Cyborg" - - O.cell = chest.cell - chest.cell.forceMove(O) - chest.cell = null - W.forceMove(O)//Should fix cybros run time erroring when blown up. It got deleted before, along with the frame. - if(O.mmi) //we delete the mmi created by robot/New() - qdel(O.mmi) - O.mmi = W //and give the real mmi to the borg. - - O.updatename(BM.client) - - BM.mind.transfer_to(O) - - if(O.mind && O.mind.special_role) - O.mind.store_memory("As a cyborg, you must obey your silicon laws and master AI above all else. Your objectives will consider you to be dead.") - to_chat(O, "I have been robotized!") - to_chat(O, "I must obey your silicon laws and master AI above all else. Your objectives will consider you to be dead.") - - SSblackbox.record_feedback("amount", "cyborg_birth", 1) - forceMove(O) - O.robot_suit = src - - log_game("[key_name(user)] has put the MMI/posibrain of [key_name(M.brainmob)] into a cyborg shell at [AREACOORD(src)]") - - if(!locomotion) - O.lockcharge = TRUE - O.update_mobility() - to_chat(O, "Error: Servo motors unresponsive.") - - else - to_chat(user, "The MMI must go in after everything else!") - - else if(istype(W, /obj/item/borg/upgrade/ai)) - var/obj/item/borg/upgrade/ai/M = W - if(check_completion()) - if(!isturf(loc)) - to_chat(user, "I cannot install[M], the frame has to be standing on the ground to be perfectly precise!") - return - if(!user.temporarilyRemoveItemFromInventory(M)) - to_chat(user, "[M] is stuck to your hand!") - return - qdel(M) - var/mob/living/silicon/robot/O = new /mob/living/silicon/robot/shell(get_turf(src)) - - if(!aisync) - lawsync = FALSE - O.connected_ai = null - else - if(forced_ai) - O.connected_ai = forced_ai - O.notify_ai(AI_SHELL) - if(!lawsync) - O.lawupdate = FALSE - O.make_laws() - - - O.cell = chest.cell - chest.cell.forceMove(O) - chest.cell = null - O.locked = panel_locked - O.job = "Cyborg" - forceMove(O) - O.robot_suit = src - if(!locomotion) - O.lockcharge = TRUE - O.update_mobility() - - else if(istype(W, /obj/item/pen)) - to_chat(user, "I need to use a multitool to name [src]!") - else - return ..() - -/obj/item/robot_suit/proc/Interact(mob/user) - var/t1 = "Designation: [(created_name ? "[created_name]" : "Default Cyborg")]
    \n" - t1 += "Master AI: [(forced_ai ? "[forced_ai.name]" : "Automatic")]

    \n" - - t1 += "LawSync Port: [(lawsync ? "Open" : "Closed")]
    \n" - t1 += "AI Connection Port: [(aisync ? "Open" : "Closed")]
    \n" - t1 += "Servo Motor Functions: [(locomotion ? "Unlocked" : "Locked")]
    \n" - t1 += "Panel Lock: [(panel_locked ? "Engaged" : "Disengaged")]
    \n" - var/datum/browser/popup = new(user, "robotdebug", "Cyborg Boot Debug", 310, 220) - popup.set_content(t1) - popup.open() - -/obj/item/robot_suit/Topic(href, href_list) - if(usr.incapacitated() || !Adjacent(usr)) - return - - var/mob/living/living_user = usr - var/obj/item/item_in_hand = living_user.get_active_held_item() - if(!item_in_hand || item_in_hand.tool_behaviour != TOOL_MULTITOOL) - to_chat(living_user, "I need a multitool!") - return - - if(href_list["Name"]) - var/new_name = reject_bad_name(input(usr, "Enter new designation. Set to blank to reset to default.", "Cyborg Debug", src.created_name),1) - if(!in_range(src, usr) && src.loc != usr) - return - if(new_name) - created_name = new_name - else - created_name = "" - - else if(href_list["Master"]) - forced_ai = select_active_ai(usr) - if(!forced_ai) - to_chat(usr, "No active AIs detected.") - - else if(href_list["Law"]) - lawsync = !lawsync - else if(href_list["AI"]) - aisync = !aisync - else if(href_list["Loco"]) - locomotion = !locomotion - else if(href_list["Panel"]) - panel_locked = !panel_locked - - add_fingerprint(usr) - Interact(usr) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm deleted file mode 100644 index dc91a48f42..0000000000 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ /dev/null @@ -1,671 +0,0 @@ -// robot_upgrades.dm -// Contains various borg upgrades. - -/obj/item/borg/upgrade - name = "borg upgrade module." - desc = "" - icon = 'icons/obj/module.dmi' - icon_state = "cyborg_upgrade" - var/locked = FALSE - var/installed = 0 - var/require_module = 0 - var/list/module_type = null - // if true, is not stored in the robot to be ejected - // if module is reset - var/one_use = FALSE - -/obj/item/borg/upgrade/proc/action(mob/living/silicon/robot/R, user = usr) - if(R.stat == DEAD) - to_chat(user, "[src] will not function on a deceased cyborg!") - return FALSE - if(module_type && !is_type_in_list(R.module, module_type)) - to_chat(R, "Upgrade mounting error! No suitable hardpoint detected.") - to_chat(user, "There's no mounting point for the module!") - return FALSE - return TRUE - -/obj/item/borg/upgrade/proc/deactivate(mob/living/silicon/robot/R, user = usr) - if (!(src in R.upgrades)) - return FALSE - return TRUE - -/obj/item/borg/upgrade/rename - name = "cyborg reclassification board" - desc = "" - icon_state = "cyborg_upgrade1" - var/heldname = "" - one_use = TRUE - -/obj/item/borg/upgrade/rename/attack_self(mob/user) - heldname = sanitize_name(stripped_input(user, "Enter new robot name", "Cyborg Reclassification", heldname, MAX_NAME_LEN)) - -/obj/item/borg/upgrade/rename/action(mob/living/silicon/robot/R) - . = ..() - if(.) - var/oldname = R.real_name - R.custom_name = heldname - R.updatename() - if(oldname == R.real_name) - R.notify_ai(RENAME, oldname, R.real_name) - -/obj/item/borg/upgrade/restart - name = "cyborg emergency reboot module" - desc = "" - icon_state = "cyborg_upgrade1" - one_use = TRUE - -/obj/item/borg/upgrade/restart/action(mob/living/silicon/robot/R, user = usr) - if(R.health < 0) - to_chat(user, "I have to repair the cyborg before using this module!") - return FALSE - - if(R.mind) - R.mind.grab_ghost() - playsound(loc, 'sound/blank.ogg', 75, TRUE) - - R.revive(full_heal = FALSE, admin_revive = FALSE) - -/obj/item/borg/upgrade/disablercooler - name = "cyborg rapid disabler cooling module" - desc = "" - icon_state = "cyborg_upgrade3" - require_module = 1 - module_type = list(/obj/item/robot_module/security) - -/obj/item/borg/upgrade/disablercooler/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - var/obj/item/gun/energy/disabler/cyborg/T = locate() in R.module.modules - if(!T) - to_chat(user, "There's no disabler in this unit!") - return FALSE - if(T.charge_delay <= 2) - to_chat(R, "A cooling unit is already installed!") - to_chat(user, "There's no room for another cooling unit!") - return FALSE - - T.charge_delay = max(2 , T.charge_delay - 4) - -/obj/item/borg/upgrade/disablercooler/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - var/obj/item/gun/energy/disabler/cyborg/T = locate() in R.module.modules - if(!T) - return FALSE - T.charge_delay = initial(T.charge_delay) - -/obj/item/borg/upgrade/thrusters - name = "ion thruster upgrade" - desc = "" - icon_state = "cyborg_upgrade3" - -/obj/item/borg/upgrade/thrusters/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - if(R.ionpulse) - to_chat(user, "This unit already has ion thrusters installed!") - return FALSE - - R.ionpulse = TRUE - -/obj/item/borg/upgrade/thrusters/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - R.ionpulse = FALSE - -/obj/item/borg/upgrade/ddrill - name = "mining cyborg diamond drill" - desc = "" - icon_state = "cyborg_upgrade3" - require_module = 1 - module_type = list(/obj/item/robot_module/miner) - -/obj/item/borg/upgrade/ddrill/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - for(var/obj/item/pickaxe/drill/cyborg/D in R.module) - R.module.remove_module(D, TRUE) - for(var/obj/item/shovel/S in R.module) - R.module.remove_module(S, TRUE) - - var/obj/item/pickaxe/drill/cyborg/diamond/DD = new /obj/item/pickaxe/drill/cyborg/diamond(R.module) - R.module.basic_modules += DD - R.module.add_module(DD, FALSE, TRUE) - -/obj/item/borg/upgrade/ddrill/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - for(var/obj/item/pickaxe/drill/cyborg/diamond/DD in R.module) - R.module.remove_module(DD, TRUE) - - var/obj/item/pickaxe/drill/cyborg/D = new (R.module) - R.module.basic_modules += D - R.module.add_module(D, FALSE, TRUE) - var/obj/item/shovel/S = new (R.module) - R.module.basic_modules += S - R.module.add_module(S, FALSE, TRUE) - -/obj/item/borg/upgrade/soh - name = "mining cyborg satchel of holding" - desc = "" - icon_state = "cyborg_upgrade3" - require_module = 1 - module_type = list(/obj/item/robot_module/miner) - -/obj/item/borg/upgrade/soh/action(mob/living/silicon/robot/R) - . = ..() - if(.) - for(var/obj/item/storage/bag/ore/cyborg/S in R.module) - R.module.remove_module(S, TRUE) - - var/obj/item/storage/bag/ore/holding/H = new /obj/item/storage/bag/ore/holding(R.module) - R.module.basic_modules += H - R.module.add_module(H, FALSE, TRUE) - -/obj/item/borg/upgrade/soh/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - for(var/obj/item/storage/bag/ore/holding/H in R.module) - R.module.remove_module(H, TRUE) - - var/obj/item/storage/bag/ore/cyborg/S = new (R.module) - R.module.basic_modules += S - R.module.add_module(S, FALSE, TRUE) - -/obj/item/borg/upgrade/tboh - name = "janitor cyborg trash bag of holding" - desc = "" - icon_state = "cyborg_upgrade3" - require_module = 1 - module_type = list(/obj/item/robot_module/janitor) - -/obj/item/borg/upgrade/tboh/action(mob/living/silicon/robot/R) - . = ..() - if(.) - for(var/obj/item/storage/bag/trash/cyborg/TB in R.module.modules) - R.module.remove_module(TB, TRUE) - - var/obj/item/storage/bag/trash/bluespace/cyborg/B = new /obj/item/storage/bag/trash/bluespace/cyborg(R.module) - R.module.basic_modules += B - R.module.add_module(B, FALSE, TRUE) - -/obj/item/borg/upgrade/tboh/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - for(var/obj/item/storage/bag/trash/bluespace/cyborg/B in R.module.modules) - R.module.remove_module(B, TRUE) - - var/obj/item/storage/bag/trash/cyborg/TB = new (R.module) - R.module.basic_modules += TB - R.module.add_module(TB, FALSE, TRUE) - -/obj/item/borg/upgrade/amop - name = "janitor cyborg advanced mop" - desc = "" - icon_state = "cyborg_upgrade3" - require_module = 1 - module_type = list(/obj/item/robot_module/janitor) - -/obj/item/borg/upgrade/amop/action(mob/living/silicon/robot/R) - . = ..() - if(.) - for(var/obj/item/mop/cyborg/M in R.module.modules) - R.module.remove_module(M, TRUE) - - var/obj/item/mop/advanced/cyborg/A = new /obj/item/mop/advanced/cyborg(R.module) - R.module.basic_modules += A - R.module.add_module(A, FALSE, TRUE) - -/obj/item/borg/upgrade/amop/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - for(var/obj/item/mop/advanced/cyborg/A in R.module.modules) - R.module.remove_module(A, TRUE) - - var/obj/item/mop/cyborg/M = new (R.module) - R.module.basic_modules += M - R.module.add_module(M, FALSE, TRUE) - -/obj/item/borg/upgrade/syndicate - name = "illegal equipment module" - desc = "" - icon_state = "cyborg_upgrade3" - require_module = 1 - -/obj/item/borg/upgrade/syndicate/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - if(R.emagged) - return FALSE - - R.SetEmagged(1) - - return TRUE - -/obj/item/borg/upgrade/syndicate/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - R.SetEmagged(FALSE) - -/obj/item/borg/upgrade/lavaproof - name = "mining cyborg lavaproof tracks" - desc = "" - icon_state = "ash_plating" - resistance_flags = LAVA_PROOF | FIRE_PROOF - require_module = 1 - module_type = list(/obj/item/robot_module/miner) - -/obj/item/borg/upgrade/lavaproof/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - R.weather_immunities += "lava" - -/obj/item/borg/upgrade/lavaproof/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - R.weather_immunities -= "lava" - -/obj/item/borg/upgrade/selfrepair - name = "self-repair module" - desc = "" - icon_state = "cyborg_upgrade5" - require_module = 1 - var/repair_amount = -1 - var/repair_tick = 1 - var/msg_cooldown = 0 - var/on = FALSE - var/powercost = 10 - var/datum/action/toggle_action - -/obj/item/borg/upgrade/selfrepair/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - var/obj/item/borg/upgrade/selfrepair/U = locate() in R - if(U) - to_chat(user, "This unit is already equipped with a self-repair module!") - return FALSE - - icon_state = "selfrepair_off" - toggle_action = new /datum/action/item_action/toggle(src) - toggle_action.Grant(R) - -/obj/item/borg/upgrade/selfrepair/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - toggle_action.Remove(R) - QDEL_NULL(toggle_action) - deactivate_sr() - -/obj/item/borg/upgrade/selfrepair/ui_action_click() - if(on) - to_chat(toggle_action.owner, "I deactivate the self-repair module.") - deactivate_sr() - else - to_chat(toggle_action.owner, "I activate the self-repair module.") - activate_sr() - - -/obj/item/borg/upgrade/selfrepair/update_icon() - if(toggle_action) - icon_state = "selfrepair_[on ? "on" : "off"]" - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - else - icon_state = "cyborg_upgrade5" - -/obj/item/borg/upgrade/selfrepair/proc/activate_sr() - START_PROCESSING(SSobj, src) - on = TRUE - update_icon() - -/obj/item/borg/upgrade/selfrepair/proc/deactivate_sr() - STOP_PROCESSING(SSobj, src) - on = FALSE - update_icon() - -/obj/item/borg/upgrade/selfrepair/process() - if(!repair_tick) - repair_tick = 1 - return - - var/mob/living/silicon/robot/cyborg = toggle_action.owner - - if(istype(cyborg) && (cyborg.stat != DEAD) && on) - if(!cyborg.cell) - to_chat(cyborg, "Self-repair module deactivated. Please insert power cell.") - deactivate_sr() - return - - if(cyborg.cell.charge < powercost * 2) - to_chat(cyborg, "Self-repair module deactivated. Please recharge.") - deactivate_sr() - return - - if(cyborg.health < cyborg.maxHealth) - if(cyborg.health < 0) - repair_amount = -2.5 - powercost = 30 - else - repair_amount = -1 - powercost = 10 - cyborg.adjustBruteLoss(repair_amount) - cyborg.adjustFireLoss(repair_amount) - cyborg.updatehealth() - cyborg.cell.use(powercost) - else - cyborg.cell.use(5) - repair_tick = 0 - - if((world.time - 2000) > msg_cooldown ) - var/msgmode = "standby" - if(cyborg.health < 0) - msgmode = "critical" - else if(cyborg.health < cyborg.maxHealth) - msgmode = "normal" - to_chat(cyborg, "Self-repair is active in [msgmode] mode.") - msg_cooldown = world.time - else - deactivate_sr() - -/obj/item/borg/upgrade/hypospray - name = "medical cyborg hypospray advanced synthesiser" - desc = "An upgrade to the Medical module cyborg's hypospray, allowing it \ - to produce more advanced and complex medical reagents." - icon_state = "cyborg_upgrade3" - require_module = 1 - module_type = list(/obj/item/robot_module/medical) - var/list/additional_reagents = list() - -/obj/item/borg/upgrade/hypospray/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - for(var/obj/item/reagent_containers/borghypo/H in R.module.modules) - if(H.accepts_reagent_upgrades) - for(var/re in additional_reagents) - H.add_reagent(re) - -/obj/item/borg/upgrade/hypospray/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - for(var/obj/item/reagent_containers/borghypo/H in R.module.modules) - if(H.accepts_reagent_upgrades) - for(var/re in additional_reagents) - H.del_reagent(re) - -/obj/item/borg/upgrade/hypospray/expanded - name = "medical cyborg expanded hypospray" - desc = "An upgrade to the Medical module's hypospray, allowing it \ - to treat a wider range of conditions and problems." - additional_reagents = list(/datum/reagent/medicine/mannitol, /datum/reagent/medicine/oculine, /datum/reagent/medicine/inacusiate, - /datum/reagent/medicine/mutadone, /datum/reagent/medicine/haloperidol, /datum/reagent/medicine/oxandrolone, /datum/reagent/medicine/sal_acid, - /datum/reagent/medicine/rezadone, /datum/reagent/medicine/pen_acid) - -/obj/item/borg/upgrade/piercing_hypospray - name = "cyborg piercing hypospray" - desc = "An upgrade to a cyborg's hypospray, allowing it to \ - pierce armor and thick material." - icon_state = "cyborg_upgrade3" - -/obj/item/borg/upgrade/piercing_hypospray/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - var/found_hypo = FALSE - for(var/obj/item/reagent_containers/borghypo/H in R.module.modules) - H.bypass_protection = TRUE - found_hypo = TRUE - - if(!found_hypo) - return FALSE - -/obj/item/borg/upgrade/piercing_hypospray/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - for(var/obj/item/reagent_containers/borghypo/H in R.module.modules) - H.bypass_protection = initial(H.bypass_protection) - -/obj/item/borg/upgrade/defib - name = "medical cyborg defibrillator" - desc = "An upgrade to the Medical module, installing a built-in \ - defibrillator, for on the scene revival." - icon_state = "cyborg_upgrade3" - require_module = 1 - module_type = list(/obj/item/robot_module/medical) - -/obj/item/borg/upgrade/defib/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - var/obj/item/twohanded/shockpaddles/cyborg/S = new(R.module) - R.module.basic_modules += S - R.module.add_module(S, FALSE, TRUE) - -/obj/item/borg/upgrade/defib/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - var/obj/item/twohanded/shockpaddles/cyborg/S = locate() in R.module - R.module.remove_module(S, TRUE) - -/obj/item/borg/upgrade/processor - name = "medical cyborg surgical processor" - desc = "An upgrade to the Medical module, installing a processor \ - capable of scanning surgery disks and carrying \ - out procedures" - icon_state = "cyborg_upgrade3" - require_module = 1 - module_type = list(/obj/item/robot_module/medical, /obj/item/robot_module/syndicate_medical) - -/obj/item/borg/upgrade/processor/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - var/obj/item/surgical_processor/SP = new(R.module) - R.module.basic_modules += SP - R.module.add_module(SP, FALSE, TRUE) - -/obj/item/borg/upgrade/processor/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - var/obj/item/surgical_processor/SP = locate() in R.module - R.module.remove_module(SP, TRUE) - -/obj/item/borg/upgrade/ai - name = "B.O.R.I.S. module" - desc = "" - icon_state = "boris" - -/obj/item/borg/upgrade/ai/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - if(R.shell) - to_chat(user, "This unit is already an AI shell!") - return FALSE - if(R.key) //You cannot replace a player unless the key is completely removed. - to_chat(user, "Intelligence patterns detected in this [R.braintype]. Aborting.") - return FALSE - - R.make_shell(src) - -/obj/item/borg/upgrade/ai/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - if(R.shell) - R.undeploy() - R.notify_ai(AI_SHELL) - -/obj/item/borg/upgrade/expand - name = "borg expander" - desc = "" - icon_state = "cyborg_upgrade3" - -/obj/item/borg/upgrade/expand/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - - if(R.hasExpanded) - to_chat(usr, "This unit already has an expand module installed!") - return FALSE - - R.notransform = TRUE - var/prev_lockcharge = R.lockcharge - R.SetLockdown(1) - R.anchored = TRUE - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(1, R.loc) - smoke.start() - sleep(2) - for(var/i in 1 to 4) - playsound(R, pick('sound/blank.ogg'), 80, TRUE, -1) - sleep(12) - if(!prev_lockcharge) - R.SetLockdown(0) - R.anchored = FALSE - R.notransform = FALSE - R.resize = 2 - R.hasExpanded = TRUE - R.update_transform() - -/obj/item/borg/upgrade/expand/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - if (R.hasExpanded) - R.hasExpanded = FALSE - R.resize = 0.5 - R.update_transform() - -/obj/item/borg/upgrade/rped - name = "engineering cyborg RPED" - desc = "" - icon = 'icons/obj/storage.dmi' - icon_state = "borgrped" - require_module = TRUE - module_type = list(/obj/item/robot_module/engineering, /obj/item/robot_module/saboteur) - -/obj/item/borg/upgrade/rped/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - - var/obj/item/storage/part_replacer/cyborg/RPED = locate() in R - if(RPED) - to_chat(user, "This unit is already equipped with a RPED module!") - return FALSE - - RPED = new(R.module) - R.module.basic_modules += RPED - R.module.add_module(RPED, FALSE, TRUE) - -/obj/item/borg/upgrade/rped/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - var/obj/item/storage/part_replacer/cyborg/RPED = locate() in R.module - if (RPED) - R.module.remove_module(RPED, TRUE) - -/obj/item/borg/upgrade/pinpointer - name = "medical cyborg crew pinpointer" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "pinpointer_crew" - require_module = TRUE - module_type = list(/obj/item/robot_module/medical, /obj/item/robot_module/syndicate_medical) - var/datum/action/crew_monitor - -/obj/item/borg/upgrade/pinpointer/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - - var/obj/item/pinpointer/crew/PP = locate() in R.module - if(PP) - to_chat(user, "This unit is already equipped with a pinpointer module!") - return FALSE - - PP = new(R.module) - R.module.basic_modules += PP - R.module.add_module(PP, FALSE, TRUE) - crew_monitor = new /datum/action/item_action/crew_monitor(src) - crew_monitor.Grant(R) - icon_state = "scanner" - - -/obj/item/borg/upgrade/pinpointer/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - icon_state = "pinpointer_crew" - crew_monitor.Remove(R) - QDEL_NULL(crew_monitor) - var/obj/item/pinpointer/crew/PP = locate() in R.module - R.module.remove_module(PP, TRUE) - -/obj/item/borg/upgrade/pinpointer/ui_action_click() - if(..()) - return - var/mob/living/silicon/robot/Cyborg = usr - GLOB.crewmonitor.show(Cyborg,Cyborg) - - -/obj/item/borg/upgrade/transform - name = "borg module picker (Standard)" - desc = "" - icon_state = "cyborg_upgrade3" - var/obj/item/robot_module/new_module = /obj/item/robot_module/standard - -/obj/item/borg/upgrade/transform/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - R.module.transform_to(new_module) - -/obj/item/borg/upgrade/transform/clown - name = "borg module picker (Clown)" - desc = "" - icon_state = "cyborg_upgrade3" - new_module = /obj/item/robot_module/clown - -/obj/item/borg/upgrade/circuit_app - name = "circuit manipulation apparatus" - desc = "" - icon_state = "cyborg_upgrade3" - require_module = TRUE - module_type = list(/obj/item/robot_module/engineering, /obj/item/robot_module/saboteur) - -/obj/item/borg/upgrade/circuit_app/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - var/obj/item/borg/apparatus/circuit/C = locate() in R.module.modules - if(C) - to_chat(user, "This unit is already equipped with a circuit apparatus!") - return FALSE - - C = new(R.module) - R.module.basic_modules += C - R.module.add_module(C, FALSE, TRUE) - -/obj/item/borg/upgrade/circuit_app/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - var/obj/item/borg/apparatus/circuit/C = locate() in R.module.modules - if (C) - R.module.remove_module(C, TRUE) - -/obj/item/borg/upgrade/beaker_app - name = "beaker storage apparatus" - desc = "" - icon_state = "cyborg_upgrade3" - require_module = TRUE - module_type = list(/obj/item/robot_module/medical) - -/obj/item/borg/upgrade/beaker_app/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - var/obj/item/borg/apparatus/beaker/extra/E = locate() in R.module.modules - if(E) - to_chat(user, "This unit has no room for additional beaker storage!") - return FALSE - - E = new(R.module) - R.module.basic_modules += E - R.module.add_module(E, FALSE, TRUE) - -/obj/item/borg/upgrade/beaker_app/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - var/obj/item/borg/apparatus/beaker/extra/E = locate() in R.module.modules - if (E) - R.module.remove_module(E, TRUE) diff --git a/code/game/objects/items/rogueitems/bait.dm b/code/game/objects/items/rogueitems/bait.dm index 6ac7c16f5d..31f58a2ac5 100644 --- a/code/game/objects/items/rogueitems/bait.dm +++ b/code/game/objects/items/rogueitems/bait.dm @@ -1,5 +1,5 @@ -/obj/item/bait +/obj/item/bait // mostly chicken or gote name = "bag of bait" desc = "Horrid smell to me, wonderful smell to big game." icon_state = "bait" @@ -9,11 +9,12 @@ w_class = WEIGHT_CLASS_SMALL throwforce = 0 var/check_counter = 0 - var/list/attracted_types = list(/mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 10, - /mob/living/simple_animal/hostile/retaliate/rogue/goat = 33, + var/list/attracted_types = list( + /mob/living/simple_animal/hostile/retaliate/rogue/chicken = 55, + /mob/living/simple_animal/hostile/retaliate/rogue/goat = 33, /mob/living/simple_animal/hostile/retaliate/rogue/goatmale = 33, - /mob/living/simple_animal/pet/cat/rogue/cabbit = 33, - /mob/living/simple_animal/hostile/retaliate/rogue/chicken = 55) + /mob/living/simple_animal/pet/cat/rogue/cabbit = 10, + /mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 10) var/attraction_chance = 100 var/deployed = 0 resistance_flags = FLAMMABLE @@ -89,25 +90,24 @@ qdel(src) ..() -/obj/item/bait/sweet +/obj/item/bait/sweet // mostly saiga or cabbit name = "bag of sweetbait" desc = "This bait doesn't smell as bad. I might even try a bite.." icon_state = "baitp" - attracted_types = list(/mob/living/simple_animal/hostile/retaliate/rogue/goat = 33, - /mob/living/simple_animal/hostile/retaliate/rogue/goatmale = 33, - /mob/living/simple_animal/pet/cat/rogue/cabbit = 50, // Rabbits love sweet things - /mob/living/simple_animal/hostile/retaliate/rogue/saiga = 20, - /mob/living/simple_animal/hostile/retaliate/rogue/saigabuck = 20, + attracted_types = list( /mob/living/simple_animal/hostile/retaliate/rogue/saiga = 30, + /mob/living/simple_animal/hostile/retaliate/rogue/saigabuck = 30, + /mob/living/simple_animal/pet/cat/rogue/cabbit = 20, + /mob/living/simple_animal/hostile/retaliate/rogue/goat = 15, + /mob/living/simple_animal/hostile/retaliate/rogue/goatmale = 15, /mob/living/simple_animal/hostile/retaliate/rogue/wolf = 10) -/obj/item/bait/bloody +/obj/item/bait/bloody // mostly volf name = "bag of bloodbait" desc = "A deployable bag of bait used by hunters to attract predators within the wilds." icon_state = "baitb" - attracted_types = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 33, - /mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 10, + attracted_types = list(/mob/living/simple_animal/hostile/retaliate/rogue/wolf = 45, + /mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 15, /mob/living/simple_animal/hostile/retaliate/rogue/mole = 15, - /mob/living/simple_animal/hostile/retaliate/rogue/troll = 5, - /mob/living/simple_animal/hostile/retaliate/rogue/trollbog = 5, - /mob/living/simple_animal/hostile/retaliate/rogue/troll/caerbannog = 2.5) + /mob/living/simple_animal/hostile/retaliate/rogue/troll = 2, + /mob/living/simple_animal/hostile/retaliate/rogue/troll/caerbannog = 1) diff --git a/code/game/objects/items/rogueitems/books.dm b/code/game/objects/items/rogueitems/books.dm index 9315cd1e39..6be231936d 100644 --- a/code/game/objects/items/rogueitems/books.dm +++ b/code/game/objects/items/rogueitems/books.dm @@ -11,6 +11,7 @@ force = 5 associated_skill = /datum/skill/misc/reading var/random_cover + var/category = null /obj/item/book/rogue/getonmobprop(tag) . = ..() @@ -127,13 +128,13 @@ if(C.orders.len > 4) to_chat(user, "Too much order.") return - var/picked_cat = input(user, "Categories", "Shipping Ledger") as null|anything in sortList(SSshuttle.supply_cats) + var/picked_cat = input(user, "Categories", "Shipping Ledger") as null|anything in sortList(SSmerchant.supply_cats) if(!picked_cat) testing("yeye") return var/list/pax = list() - for(var/pack in SSshuttle.supply_packs) - var/datum/supply_pack/PA = SSshuttle.supply_packs[pack] + for(var/pack in SSmerchant.supply_packs) + var/datum/supply_pack/PA = SSmerchant.supply_packs[pack] if(PA.group == picked_cat) pax += PA var/picked_pack = input(user, "Shipments", "Shipping Ledger") as null|anything in sortList(pax) @@ -157,12 +158,12 @@ if(P.info) to_chat(user, "Something is written here already.") return - var/picked_cat = input(user, "Categories", "Shipping Ledger") as null|anything in sortList(SSshuttle.supply_cats) + var/picked_cat = input(user, "Categories", "Shipping Ledger") as null|anything in sortList(SSmerchant.supply_cats) if(!picked_cat) return var/list/pax = list() - for(var/pack in SSshuttle.supply_packs) - var/datum/supply_pack/PA = SSshuttle.supply_packs[pack] + for(var/pack in SSmerchant.supply_packs) + var/datum/supply_pack/PA = SSmerchant.supply_packs[pack] if(PA.group == picked_cat) pax += PA var/picked_pack = input(user, "Shipments", "Shipping Ledger") as null|anything in sortList(pax) @@ -253,7 +254,6 @@ base_icon_state = "lawtome" bookfile = "law.json" - //no more theif stole the books /obj/item/book/rogue/knowledge1 name = "Book of Knowledge" desc = "" @@ -266,13 +266,11 @@ desc = "{An ominous book with untold powers.}" icon_state ="xylix_0" base_icon_state = "xylix" + icon_state ="spellbookmimic_0" + base_icon_state = "pellbookmimic" bookfile = "xylix.json" /obj/item/book/rogue/xylix/attack_self(mob/user) - if(!open) - attack_right(user) - return - ..() user.update_inv_hands() to_chat(user, "You feel laughter echo in your head.") diff --git a/code/game/objects/items/rogueitems/coins.dm b/code/game/objects/items/rogueitems/coins.dm index af0e200373..a29cd43c84 100644 --- a/code/game/objects/items/rogueitems/coins.dm +++ b/code/game/objects/items/rogueitems/coins.dm @@ -45,7 +45,8 @@ pixel_y = rand(-5, 5) if(isturf(T) && quantity > 1) for(var/i in 2 to quantity) // exclude the first coin - var/obj/item/roguecoin/new_coin = new type(T) + var/obj/item/roguecoin/new_coin = new type + new_coin.forceMove(T) new_coin.set_quantity(1) // prevent exploits with coin piles new_coin.pixel_x = rand(-8, 8) new_coin.pixel_y = rand(-5, 5) @@ -73,7 +74,7 @@ if(user) if(user.get_inactive_held_item() != G && !isturf(G.loc)) return - + var/amt_to_merge = min(G.quantity, MAX_COIN_STACK_SIZE - quantity) if(amt_to_merge <= 0) return @@ -131,7 +132,7 @@ drop_sound = 'sound/foley/coins1.ogg' else drop_sound = 'sound/foley/coinphy (1).ogg' - + if(quantity == 1) name = initial(name) desc = initial(desc) diff --git a/code/game/objects/items/rogueitems/cup.dm b/code/game/objects/items/rogueitems/cup.dm index dfb9db0179..a5ad296622 100644 --- a/code/game/objects/items/rogueitems/cup.dm +++ b/code/game/objects/items/rogueitems/cup.dm @@ -50,15 +50,11 @@ desc = "A silver goblet, its surface adorned with intricate carvings and runes." icon_state = "silver" sellprice = 30 + last_used = 0 + is_silver = TRUE /obj/item/reagent_containers/glass/cup/silver/funny_attack_effects(mob/living/target, mob/living/user, nodmg) . = ..() - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(H.dna && H.dna.species) - if(istype(H.dna.species, /datum/species/werewolf)) - target.Knockdown(30) - target.Stun(30) if(target.mind && target.mind.has_antag_datum(/datum/antagonist/vampirelord)) var/datum/antagonist/vampirelord/VD = target.mind.has_antag_datum(/datum/antagonist/vampirelord) if(!VD.disguised) diff --git a/code/game/objects/items/rogueitems/dmusicbox.dm b/code/game/objects/items/rogueitems/dmusicbox.dm index eb66aa39fd..3e0a3b18e3 100644 --- a/code/game/objects/items/rogueitems/dmusicbox.dm +++ b/code/game/objects/items/rogueitems/dmusicbox.dm @@ -7,6 +7,7 @@ extra_range = 5 var/stress2give = /datum/stressevent/music persistent_loop = TRUE + channel = CHANNEL_MUSIC /datum/looping_sound/dmusloop/on_hear_sound(mob/M) . = ..() @@ -34,8 +35,7 @@ var/curvol = 100 /obj/item/dmusicbox/Initialize() - soundloop = new(list(src), FALSE) -// soundloop.start() + soundloop = new(src, FALSE) update_icon() . = ..() @@ -47,7 +47,7 @@ /obj/item/dmusicbox/attackby(obj/item/P, mob/user, params) if(!loaded) - if(istype(P, /obj/item/reagent_containers/food/snacks/rogue/honey)) + if(istype(P, /obj/item/roguecoin/gold)) loaded=TRUE qdel(P) update_icon() @@ -74,9 +74,9 @@ if(world.time < lastfilechange + 3 MINUTES) say("NOT YET!") return -// if(!loaded) -// say("FEED ME SPIDER MILK!") -// return + if(!loaded) + say("A GOLD COIN FOR A CAROL!") + return playsound(loc, 'sound/misc/beep.ogg', 100, FALSE, -1) var/infile = input(user, "CHOOSE A NEW SONG", src) as null|file diff --git a/code/game/objects/items/rogueitems/gems.dm b/code/game/objects/items/rogueitems/gems.dm index 970df2f3af..3d46965d09 100644 --- a/code/game/objects/items/rogueitems/gems.dm +++ b/code/game/objects/items/rogueitems/gems.dm @@ -74,4 +74,16 @@ /obj/item/riddleofsteel/Initialize() . = ..() - set_light(2, 1, "#ff0d0d") + set_light(2, 2, 1, l_color = "#ff0d0d") + +/obj/item/roguegem/random + name = "random gem" + desc = "no way i fucked the code" + icon_state = null + +/obj/item/roguegem/random/Initialize() + ..() + var/newgem = list(/obj/item/roguegem = 5, /obj/item/roguegem/green = 10, /obj/item/roguegem/blue = 10, /obj/item/roguegem/yellow = 20, /obj/item/roguegem/violet = 10, /obj/item/roguegem/diamond = 5, /obj/item/natural/rock/coal = 1)//you thought you had found gems, but it was COAL... + var/pickgem = pickweight(newgem) + new pickgem(get_turf(src)) + qdel(src) diff --git a/code/game/objects/items/rogueitems/keyrings.dm b/code/game/objects/items/rogueitems/keyrings.dm index b7b2596f31..c0cacda373 100644 --- a/code/game/objects/items/rogueitems/keyrings.dm +++ b/code/game/objects/items/rogueitems/keyrings.dm @@ -237,10 +237,10 @@ picks = list(/obj/item/lockpick, /obj/item/lockpick, /obj/item/lockpick) /obj/item/keyring/captain - keys = list(/obj/item/roguekey/captain, /obj/item/roguekey/dungeon, /obj/item/roguekey/garrison, /obj/item/roguekey/walls, /obj/item/roguekey/manor) + keys = list(/obj/item/roguekey/captain, /obj/item/roguekey/dungeon, /obj/item/roguekey/garrison, /obj/item/roguekey/walls, /obj/item/roguekey/manor, /obj/item/roguekey/guest) -/obj/item/keyring/queen - keys = list(/obj/item/roguekey/dungeon, /obj/item/roguekey/garrison, /obj/item/roguekey/walls, /obj/item/roguekey/manor, /obj/item/roguekey/queen) +/obj/item/keyring/consort + keys = list(/obj/item/roguekey/dungeon, /obj/item/roguekey/garrison, /obj/item/roguekey/walls, /obj/item/roguekey/manor, /obj/item/roguekey/consort, /obj/item/roguekey/guest) /obj/item/keyring/guard keys = list(/obj/item/roguekey/dungeon, /obj/item/roguekey/garrison, /obj/item/roguekey/walls) @@ -249,16 +249,16 @@ keys = list(/obj/item/roguekey/archive, /obj/item/roguekey/manor) /obj/item/keyring/merchant - keys = list(/obj/item/roguekey/shop, /obj/item/roguekey/merchant, /obj/item/roguekey/mercenary) + keys = list(/obj/item/roguekey/shop, /obj/item/roguekey/merchant, /obj/item/roguekey/mercator, /obj/item/roguekey/mercenary) /obj/item/keyring/mguard - keys = list(/obj/item/roguekey/dungeon, /obj/item/roguekey/garrison, /obj/item/roguekey/walls, /obj/item/roguekey/manor) + keys = list(/obj/item/roguekey/dungeon, /obj/item/roguekey/garrison, /obj/item/roguekey/walls, /obj/item/roguekey/manor, /obj/item/roguekey/guest) /obj/item/keyring/mage keys = list(/obj/item/roguekey/manor, /obj/item/roguekey/tower, /obj/item/roguekey/mage) /obj/item/keyring/innkeep - keys = list(/obj/item/roguekey/tavern, /obj/item/roguekey/roomhunt, /obj/item/roguekey/roomvi, /obj/item/roguekey/roomv, /obj/item/roguekey/roomiv, /obj/item/roguekey/roomiii, /obj/item/roguekey/roomii, /obj/item/roguekey/roomi) + keys = list(/obj/item/roguekey/mercenary, /obj/item/roguekey/tavern, /obj/item/roguekey/roomhunt, /obj/item/roguekey/roomroyal, /obj/item/roguekey/roomvi, /obj/item/roguekey/roomv, /obj/item/roguekey/roomiv, /obj/item/roguekey/roomiii, /obj/item/roguekey/roomii, /obj/item/roguekey/roomi) /obj/item/keyring/priest keys = list(/obj/item/roguekey/priest, /obj/item/roguekey/confession, /obj/item/roguekey/church, /obj/item/roguekey/graveyard, /obj/item/roguekey/monastery, /obj/item/roguekey/inquisition, /obj/item/roguekey/manor) @@ -269,11 +269,14 @@ /obj/item/keyring/shepherd keys = list(/obj/item/roguekey/inquisition, /obj/item/roguekey/church) +/obj/item/keyring/gravedigger + keys = list(/obj/item/roguekey/church, /obj/item/roguekey/graveyard) + /obj/item/keyring/niteman keys = list(/obj/item/roguekey/niteman, /obj/item/roguekey/nitemaiden) /obj/item/keyring/hand - keys = list(/obj/item/roguekey/hand, /obj/item/roguekey/steward, /obj/item/roguekey/tavern, /obj/item/roguekey/church, /obj/item/roguekey/merchant, /obj/item/roguekey/dungeon, /obj/item/roguekey/walls, /obj/item/roguekey/garrison, /obj/item/roguekey/manor) + keys = list(/obj/item/roguekey/hand, /obj/item/roguekey/steward, /obj/item/roguekey/tavern, /obj/item/roguekey/church, /obj/item/roguekey/merchant, /obj/item/roguekey/dungeon, /obj/item/roguekey/walls, /obj/item/roguekey/garrison, /obj/item/roguekey/manor, /obj/item/roguekey/vault) /obj/item/keyring/steward keys = list(/obj/item/roguekey/steward, /obj/item/roguekey/vault, /obj/item/roguekey/manor, /obj/item/roguekey/warehouse) @@ -293,6 +296,12 @@ /obj/item/keyring/armorsmith keys = list(/obj/item/roguekey/armorsmith, /obj/item/roguekey/blacksmith) +/obj/item/keyring/blacksmith + keys = list(/obj/item/roguekey/blacksmith_home, /obj/item/roguekey/blacksmith, /obj/item/roguekey/makers_guild) + +/obj/item/keyring/mason + keys = list(/obj/item/roguekey/mason, /obj/item/roguekey/makers_guild) + /obj/item/keyring/mayor keys = list(/obj/item/roguekey/veteran, /obj/item/roguekey/walls, /obj/item/roguekey/elder, /obj/item/roguekey/butcher, /obj/item/roguekey/soilson, /obj/item/roguekey/manor) diff --git a/code/game/objects/items/rogueitems/keys.dm b/code/game/objects/items/rogueitems/keys.dm index c8818fe256..2c679180b1 100644 --- a/code/game/objects/items/rogueitems/keys.dm +++ b/code/game/objects/items/rogueitems/keys.dm @@ -57,6 +57,18 @@ if(D.masterkey) lockhash = D.lockhash +/obj/item/roguekey/lord/pre_attack_right(target, user, params) + . = ..() + if(istype(target, /obj/structure/closet)) + var/obj/structure/closet/C = target + if(C.masterkey) + lockhash = C.lockhash + if(istype(target, /obj/structure/mineral_door)) + var/obj/structure/mineral_door/D = target + if(D.masterkey) + lockhash = D.lockhash + + /obj/item/roguekey/lord/afterattack(atom/target, mob/user, proximity_flag, click_parameters) . = ..() lockhash = GLOB.lockids[lockid] @@ -67,6 +79,12 @@ icon_state = "mazekey" lockid = "manor" +/obj/item/roguekey/guest + name = "guest key" + desc = "The key to the manor's guest room. Given to visiting nobles." + icon_state = "greenkey" + lockid = "guest" + /obj/item/roguekey/butler // intended for chests, crates, cellar doors, NOT kitchen access name = "servants key" desc = "The key to the pantrys and cellars of the manor." @@ -77,9 +95,9 @@ icon_state = "mazekey" lockid = "banditcamp" -/obj/item/roguekey/queen - name = "lady key" - desc = "The Lady's key." +/obj/item/roguekey/consort + name = "consort key" + desc = "The royal consort's key." icon_state = "mazekey" lockid = "lord" @@ -96,13 +114,13 @@ lockid = "dungeon" /obj/item/roguekey/soilson - name = "Soilson Key" + name = "farmhouse Key" desc = "This key is used by the soilsons." icon_state = "rustkey" lockid = "soilson" /obj/item/roguekey/warehouse - name = "Warehouse Key" + name = "warehouse Key" desc = "This key opens the Steward's warehouse." icon_state = "rustkey" lockid = "warehouse" @@ -125,6 +143,13 @@ icon_state = "cheesekey" lockid = "merchant" +/obj/item/roguekey/mercator + name = "mercator key" + desc = "A key to some special treasure." + icon_state = "cheesekey" + lockid = "mercator" + color = CLOTHING_FYRITIUS_DYE + /obj/item/roguekey/shop name = "shop key" desc = "This key opens and closes a shop door." @@ -142,43 +167,55 @@ desc = "The key to the first room." icon_state = "brownkey" lockid = "roomi" + color = CLOTHING_CHALK_WHITE /obj/item/roguekey/roomii name = "room II key" desc = "The key to the second room." icon_state = "brownkey" lockid = "roomii" + color = CLOTHING_CHALK_WHITE /obj/item/roguekey/roomiii name = "room III key" desc = "The key to the third room." icon_state = "brownkey" lockid = "roomiii" + color = CLOTHING_CHALK_WHITE /obj/item/roguekey/roomiv name = "room IV key" desc = "The key to the fourth room." icon_state = "brownkey" lockid = "roomiv" + color = CLOTHING_CHALK_WHITE /obj/item/roguekey/roomv name = "room V key" desc = "The key to the fifth room." icon_state = "brownkey" lockid = "roomv" + color = CLOTHING_CHALK_WHITE /obj/item/roguekey/roomvi name = "room VI key" desc = "The key to the sixth room." icon_state = "brownkey" lockid = "roomvi" + color = CLOTHING_CHALK_WHITE /obj/item/roguekey/roomhunt name = "room HUNT key" - desc = "The key to the most luxurious Inn room." + desc = "The key to one of the most luxurious Inn room." icon_state = "brownkey" lockid = "roomhunt" +/obj/item/roguekey/roomroyal + name = "room ROYAL key" + desc = "The key to one of the most luxurious Inn room." + icon_state = "brownkey" + lockid = "roomroyal" + //vampire mansion// /obj/item/roguekey/vampire desc = "This key is awfully pink and weirdly shaped." @@ -186,12 +223,23 @@ lockid = "mansionvampire" +/obj/item/roguekey/makers_guild + name = "makers guild key" + icon_state = "greenkey" + lockid = "makers" + /obj/item/roguekey/blacksmith name = "blacksmith key" - desc = "This key opens a blacksmith's workshop." + desc = "This key opens a blacksmiths workshop." icon_state = "brownkey" lockid = "blacksmith" +/obj/item/roguekey/blacksmith_home + name = "blacksmith home key" + desc = "This key opens a blacksmiths home." + icon_state = "rustkey" + lockid = "armorsmith" // used to maintain compatibility with older maps and make it easier to switch the classses on/off + /obj/item/roguekey/butcher name = "butcher key" desc = "There's some dried blood on this key, it's probably the butchers." @@ -240,7 +288,7 @@ /obj/item/roguekey/niteman name = "nitemaster's key" - desc = "The master key of Eora's House." + desc = "The master key of the bathhouse." icon_state = "greenkey" lockid = "nightman" @@ -292,6 +340,11 @@ icon_state = "birdkey" lockid = "doctor" +/obj/item/roguekey/tailor + name = "tailors key" + icon_state = "brownkey" + lockid = "tailor" + //grenchensnacker /obj/item/roguekey/porta name = "strange key" @@ -345,7 +398,7 @@ icon_state = "brownkey" lockid = "house7" -/obj/item/roguekey/houses/house8 +/obj/item/roguekey/houses/house8 //Not currently in use on Dun_Manor name = "house VIII key" icon_state = "brownkey" lockid = "house8" @@ -644,3 +697,7 @@ KE.name = src.holdname to_chat(user, "You add [src] to [K].") qdel(src) + +/obj/item/roguekey/spooky_village + icon_state = "rustkey" + lockid = "spooky_village" diff --git a/code/game/objects/items/rogueitems/mimery_book.dm b/code/game/objects/items/rogueitems/mimery_book.dm new file mode 100644 index 0000000000..b780672b68 --- /dev/null +++ b/code/game/objects/items/rogueitems/mimery_book.dm @@ -0,0 +1,33 @@ +/obj/item/book/mimery + name = "Guide to Dank Mimery" + desc = "" + icon_state ="bookmime" + +/obj/item/book/mimery/attack_self(mob/user,) + user.set_machine(src) + var/dat = "Guide to Dank Mimery
    " + dat += "Teaches one of three classic pantomime routines, allowing a practiced mime to conjure invisible objects into corporeal existence.
    " + dat += "Once you have mastered your routine, this book will have no more to say to you.
    " + dat += "
    " + dat += "Invisible Wall
    " + dat += "Invisible Chair
    " + dat += "Invisible Box
    " + user << browse(dat, "window=book") + +/obj/item/book/mimery/Topic(href, href_list) + ..() + if (usr.stat || usr.restrained() || src.loc != usr) + return + if (!ishuman(usr)) + return + var/mob/living/carbon/human/H = usr + if(H.is_holding(src) && H.mind) + H.set_machine(src) + if (href_list["invisible_wall"]) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall(null)) + if (href_list["invisible_chair"]) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_chair(null)) + if (href_list["invisible_box"]) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_box(null)) + to_chat(usr, "The book disappears into thin air.") + qdel(src) diff --git a/code/game/objects/items/rogueitems/natural/animals.dm b/code/game/objects/items/rogueitems/natural/animals.dm index 93e4e4d02d..742036360a 100644 --- a/code/game/objects/items/rogueitems/natural/animals.dm +++ b/code/game/objects/items/rogueitems/natural/animals.dm @@ -56,6 +56,13 @@ icon_state = "saigahead" layer = 3.1 +/obj/item/natural/trollheart + name = "troll heart" + desc = "Big-hearted, but small-brained." + icon_state = "trollheart" + layer = 3.1 + sellprice = 50 + //RTD make this a storage item and make clickign on animals with things put it in storage /obj/item/natural/saddle name = "saddle" @@ -90,4 +97,26 @@ /mob/living/simple_animal var/can_saddle = FALSE var/obj/item/ssaddle + var/simple_detect_bonus = 0 // A flat percentage bonus to our ability to detect sneaking people only. Use in lieu of giving mobs huge STAPER bonuses if you want them to be observant. +/mob/living/simple_animal/onbite(mob/living/carbon/human/user) + var/damage = 10*(user.STASTR/20) + if(HAS_TRAIT(user, TRAIT_STRONGBITE)) + damage = damage*2 + playsound(user.loc, "smallslash", 100, FALSE, -1) + user.next_attack_msg.Cut() + if(stat == DEAD) + if(user.has_status_effect(/datum/status_effect/debuff/silver_curse)) + to_chat(user, span_notice("My power is weakened, I cannot heal!")) + return + if(user.mind && istype(user, /mob/living/carbon/human/species/werewolf)) + visible_message(span_danger("The werewolf ravenously consumes the [src]!")) + to_chat(src, span_warning("I feed on succulent flesh. I feel reinvigorated.")) + user.reagents.add_reagent(/datum/reagent/medicine/healthpot, 30) + gib() + return + if(src.apply_damage(damage, BRUTE)) + if(istype(user, /mob/living/carbon/human/species/werewolf)) + visible_message(span_danger("The werewolf bites into [src] and thrashes!")) + else + visible_message(span_danger("[user] bites [src]! What is wrong with them?")) diff --git a/code/game/objects/items/rogueitems/natural/clothfibersthorn.dm b/code/game/objects/items/rogueitems/natural/clothfibersthorn.dm index 223d866245..958a635c26 100644 --- a/code/game/objects/items/rogueitems/natural/clothfibersthorn.dm +++ b/code/game/objects/items/rogueitems/natural/clothfibersthorn.dm @@ -6,7 +6,7 @@ force = 0 throwforce = 0 obj_flags = null - color = "#454032" + color = "#766945" firefuel = 5 MINUTES resistance_flags = FLAMMABLE slot_flags = ITEM_SLOT_MOUTH @@ -20,6 +20,9 @@ to_chat(user, "I start to collect [src]...") if(move_after(user, 5 SECONDS, target = src)) var/fibercount = 0 + var/obj/item/natural/fibers/W = user.get_active_held_item() + if(istype(W)) + fibercount++ for(var/obj/item/natural/fibers/F in get_turf(src)) fibercount++ while(fibercount > 0) @@ -33,6 +36,8 @@ fibercount -= clamp(fibercount, 2, 6) for(var/obj/item/natural/fibers/F in get_turf(src)) qdel(F) + if(istype(W)) + qdel(W) /obj/item/natural/silk name = "silk" @@ -56,6 +61,9 @@ to_chat(user, "I start to collect [src]...") if(move_after(user, 5 SECONDS, target = src)) var/silkcount = 0 + var/obj/item/natural/silk/W = user.get_active_held_item() + if(istype(W)) + silkcount++ for(var/obj/item/natural/silk/F in get_turf(src)) silkcount++ while(silkcount > 0) @@ -69,6 +77,8 @@ silkcount -= clamp(silkcount, 2, 6) for(var/obj/item/natural/silk/F in get_turf(src)) qdel(F) + if(istype(W)) + qdel(W) #ifdef TESTSERVER @@ -114,8 +124,6 @@ if(wet) . += span_notice("It's wet!") -/obj/item/natural/cloth/bandit - color = "#ff0000" // CLEANING @@ -232,6 +240,8 @@ if(prob(prob2break)) playsound(src,'sound/items/seedextract.ogg', 100, FALSE) qdel(src) + if (L.alpha == 0 && L.rogue_sneaking) // not anymore you're not + L.update_sneak_invis(TRUE) L.consider_ambush() /obj/item/natural/bundle/fibers @@ -301,6 +311,9 @@ icon2 = "clothroll2" icon2step = 10 +/obj/item/natural/bundle/cloth/partial + amount = 6 + /obj/item/natural/bundle/stick name = "bundle of sticks" desc = "A bundle of wooden sticks, weak when seperated, mighty together." @@ -356,6 +369,9 @@ to_chat(user, "I start to collect [src]...") if(move_after(user, 5 SECONDS, target = src)) var/wormcount = 0 + var/obj/item/natural/worms/W = user.get_active_held_item() + if(istype(W)) + wormcount++ for(var/obj/item/natural/worms/F in get_turf(src)) wormcount++ while(wormcount > 0) @@ -369,3 +385,5 @@ wormcount -= clamp(wormcount, 2, 12) for(var/obj/item/natural/worms/F in get_turf(src)) qdel(F) + if(istype(W)) + qdel(W) diff --git a/code/game/objects/items/rogueitems/natural/glass.dm b/code/game/objects/items/rogueitems/natural/glass.dm new file mode 100644 index 0000000000..4d77f2f8ae --- /dev/null +++ b/code/game/objects/items/rogueitems/natural/glass.dm @@ -0,0 +1,67 @@ +/obj/item/natural/glass + name = "glass" + desc = "Glass panes for constructing windows." + icon_state = "glasspane" + possible_item_intents = list(/datum/intent/use) + force = 10 + throwforce = 12 + throw_range = 5 + obj_flags = null + max_integrity = 20 + w_class = WEIGHT_CLASS_BULKY + bundletype = /obj/item/natural/bundle/glass + +/obj/item/natural/glass/attack_right(mob/user) + to_chat(user, "I start to collect [src]...") + if(move_after(user, 5 SECONDS, target = src)) + var/glasscount = 0 + for(var/obj/item/natural/glass/F in get_turf(src)) + glasscount++ + while(glasscount > 0) + if(glasscount == 1) + new /obj/item/natural/glass(get_turf(user)) + glasscount-- + else if(glasscount >= 2) + var/obj/item/natural/bundle/glass/B = new(get_turf(user)) + B.amount = clamp(glasscount, 2, 3) + B.update_bundle() + glasscount -= clamp(glasscount, 2, 3) + for(var/obj/item/natural/glass/F in get_turf(src)) + qdel(F) + +/obj/item/natural/bundle/glass + name = "stack of glass" + desc = "A stack of fragile glass panes." + icon_state = "glasspane1" + possible_item_intents = list(/datum/intent/use) + force = 15 + throwforce = 18 + throw_range = 2 + firefuel = null + resistance_flags = null + firemod = null + w_class = WEIGHT_CLASS_HUGE + stackname = "glass" + stacktype = /obj/item/natural/glass + maxamount = 3 + icon1 = "glasspane1" + icon1step = 2 + icon2 = "glasspane2" + icon2step = 3 + +/obj/item/natural/glass/shard + name = "shard" + desc = "A sharp shard of glass." + icon = 'icons/obj/shards.dmi' + icon_state = "large" + possible_item_intents = list(/datum/intent/dagger/cut, /datum/intent/stab) + force = 3 + throwforce = 5 + item_state = "shard-glass" + resistance_flags = null + w_class = WEIGHT_CLASS_TINY + lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' + attack_verb = list("stabbed", "slashed", "sliced", "cut") + max_integrity = 40 + smeltresult = /obj/item/natural/glass diff --git a/code/game/objects/items/rogueitems/natural/stones.dm b/code/game/objects/items/rogueitems/natural/stones.dm index e01dc40f8b..5121432542 100644 --- a/code/game/objects/items/rogueitems/natural/stones.dm +++ b/code/game/objects/items/rogueitems/natural/stones.dm @@ -2,7 +2,7 @@ /obj/item/natural/stone name = "stone" - desc = "A piece of rough ground stone." + desc = "A piece of rough ground stone. It could be chiseled into a shape more conducive to construction. " icon_state = "stone1" gripped_intents = null dropshrink = 0.75 @@ -20,7 +20,7 @@ /obj/item/natural/stone/equipped(mob/living/carbon/human/user, slot) . = ..() if(HAS_TRAIT(user, TRAIT_ROTMAN)) - to_chat(user, span_info("The [src] slips through dead fingers...")) + to_chat(user, span_info("The [src] slips through dead fingers...")) user.dropItemToGround(src, TRUE) /obj/item/natural/stone/attackby(obj/item/W, mob/user, params) @@ -33,9 +33,18 @@ var/turf/front = get_step(user,user.dir) S.set_up(1, 1, front) S.start() + if(istype(W, /obj/item/rogueweapon/chisel)) + playsound(src.loc, pick('sound/combat/hits/onrock/onrock (1).ogg', 'sound/combat/hits/onrock/onrock (2).ogg', 'sound/combat/hits/onrock/onrock (3).ogg', 'sound/combat/hits/onrock/onrock (4).ogg'), 100) + user.visible_message("[user] chisels the stone into a block.") + if(do_after(user, 2 SECONDS)) + new /obj/item/natural/stoneblock(get_turf(src.loc)) + playsound(src.loc, pick('sound/combat/hits/onrock/onrock (1).ogg', 'sound/combat/hits/onrock/onrock (2).ogg', 'sound/combat/hits/onrock/onrock (3).ogg', 'sound/combat/hits/onrock/onrock (4).ogg'), 100) + qdel(src) + return else ..() + /obj/item/natural/rock name = "rock" desc = "A large stone that looks breakable." @@ -110,6 +119,16 @@ S.set_up(1, 1, front) S.start() return + if(istype(W, /obj/item/rogueweapon/chisel)) + playsound(src.loc, pick('sound/combat/hits/onrock/onrock (1).ogg', 'sound/combat/hits/onrock/onrock (2).ogg', 'sound/combat/hits/onrock/onrock (3).ogg', 'sound/combat/hits/onrock/onrock (4).ogg'), 100) + user.visible_message("[user] chisels the rock into blocks.") + if(do_after(user, 6 SECONDS)) + new /obj/item/natural/stoneblock(get_turf(src.loc)) + new /obj/item/natural/stoneblock(get_turf(src.loc)) + new /obj/item/natural/stoneblock(get_turf(src.loc)) + playsound(src.loc, pick('sound/combat/hits/onrock/onrock (1).ogg', 'sound/combat/hits/onrock/onrock (2).ogg', 'sound/combat/hits/onrock/onrock (3).ogg', 'sound/combat/hits/onrock/onrock (4).ogg'), 100) + qdel(src) + return ..() //begin ore loot rocks @@ -131,3 +150,5 @@ /obj/item/natural/rock/copper mineralType = /obj/item/rogueore/copper +/obj/item/natural/rock/gemerald + mineralType = /obj/item/natural/rock/gemerald diff --git a/code/game/objects/items/rogueitems/natural/wood.dm b/code/game/objects/items/rogueitems/natural/wood.dm index 0d09d62891..99a1042794 100644 --- a/code/game/objects/items/rogueitems/natural/wood.dm +++ b/code/game/objects/items/rogueitems/natural/wood.dm @@ -44,7 +44,7 @@ /obj/item/grown/log/tree/small name = "small log" - desc = "A smaller log that came from a larger log. Suitable for building." + desc = "A smaller log that came from a larger log. With a saw, you could turn it into wooden planks." icon_state = "logsmall" attacked_sound = 'sound/misc/woodhit.ogg' max_integrity = 30 @@ -55,6 +55,37 @@ w_class = WEIGHT_CLASS_BULKY smeltresult = /obj/item/rogueore/coal +/obj/item/grown/log/tree/small/attackby(obj/item/I, mob/living/user, params) // remake to use /datum/intent/axe/cut or TO DO never do maybe + user.changeNext_move(CLICK_CD_MELEE) + if(istype(I, /obj/item/rogueweapon/axe)) + playsound(get_turf(src.loc), 'sound/items/wood_cutting.ogg', 100) + if(do_after(user, 10 SECONDS)) + user.visible_message("[user] makes a crude plank from [src].") + var/obj/item/natural/plank/S = new /obj/item/natural/plank(get_turf(src.loc)) + if(user.is_holding(src)) + user.dropItemToGround(src) + user.put_in_hands(S) + qdel(src) + if(istype(I, /obj/item/rogueweapon/polearm/halberd/bardiche)) + playsound(get_turf(src.loc), 'sound/items/wood_cutting.ogg', 100) + if(do_after(user, 10 SECONDS)) + user.visible_message("[user] makes a crude plank from [src].") + var/obj/item/natural/plank/S = new /obj/item/natural/plank(get_turf(src.loc)) + if(user.is_holding(src)) + user.dropItemToGround(src) + user.put_in_hands(S) + qdel(src) + if(istype(I, /obj/item/rogueweapon/handsaw)) + playsound(get_turf(src.loc), 'sound/items/sawing.ogg', 100) + if(do_after(user, 3 SECONDS)) + user.visible_message("[user] makes a crude plank from [src].") + var/obj/item/natural/plank/S = new /obj/item/natural/plank(get_turf(src.loc)) + if(user.is_holding(src)) + user.dropItemToGround(src) + user.put_in_hands(S) + qdel(src) + ..() + /obj/item/grown/log/tree/stick seed = null name = "stick" @@ -81,6 +112,8 @@ if(prob(prob2break)) playsound(src,'sound/items/seedextract.ogg', 100, FALSE) qdel(src) + if (L.alpha == 0 && L.rogue_sneaking) // not anymore you're not + L.update_sneak_invis(TRUE) L.consider_ambush() /obj/item/grown/log/tree/stick/Initialize() @@ -124,17 +157,22 @@ /obj/item/grown/log/tree/stake name = "stake" - desc = "A sharpened piece of wood, fantastic for piercing" + desc = "A sharpened piece of wood, fantastic for piercing." icon_state = "stake" - force = 2 - throwforce = 2 - possible_item_intents = list(/datum/intent/stab, /datum/intent/pick) + force = 4 + throwforce = 4 + thrown_bclass = BCLASS_STAB + possible_item_intents = list(/datum/intent/dagger/thrust, /datum/intent/dagger/thrust/pick) firefuel = 1 MINUTES blade_dulling = 0 max_integrity = 20 + associated_skill = /datum/skill/combat/knives + wdefense = 0 static_debris = null obj_flags = null + wlength = WLENGTH_SHORT w_class = WEIGHT_CLASS_SMALL + wbalance = 1 twohands_required = FALSE gripped_intents = null slot_flags = ITEM_SLOT_MOUTH|ITEM_SLOT_HIP diff --git a/code/game/objects/items/rogueitems/waterskins.dm b/code/game/objects/items/rogueitems/waterskins.dm index 9d088e55a3..9a3be3a9af 100644 --- a/code/game/objects/items/rogueitems/waterskins.dm +++ b/code/game/objects/items/rogueitems/waterskins.dm @@ -19,3 +19,6 @@ /obj/item/reagent_containers/glass/bottle/waterskin/milk // Filled subtype used by the cheesemaker list_reagents = list(/datum/reagent/consumable/milk = 64) + +/obj/item/reagent_containers/glass/bottle/waterskin/half + list_reagents = list(/datum/reagent/water = 32) diff --git a/code/game/objects/items/rogueweapons/intents.dm b/code/game/objects/items/rogueweapons/intents.dm index fa793c5ac3..07a9a21840 100644 --- a/code/game/objects/items/rogueweapons/intents.dm +++ b/code/game/objects/items/rogueweapons/intents.dm @@ -147,7 +147,7 @@ if(mastermob) if(chargedloop) if(!istype(chargedloop)) - chargedloop = new chargedloop(list(mastermob)) + chargedloop = new chargedloop(mastermob) /datum/intent/proc/on_charge_start() //what the fuck is going on here lol if(mastermob.curplaying) @@ -155,10 +155,10 @@ mastermob.curplaying = null if(chargedloop) if(!istype(chargedloop, /datum/looping_sound)) - chargedloop = new chargedloop(list(mastermob)) + chargedloop = new chargedloop(mastermob) else chargedloop.stop() - chargedloop.start(chargedloop.output_atoms) + chargedloop.start(chargedloop.parent) mastermob.curplaying = src /datum/intent/proc/on_mouse_up() @@ -285,16 +285,6 @@ chargetime = 0 swingdelay = 0 -/datum/intent/pick - name = "pick" - icon_state = "inpick" - attack_verb = list("picks","impales") - hitsound = list('sound/combat/hits/pick/genpick (1).ogg', 'sound/combat/hits/pick/genpick (2).ogg') - animname = "strike" - blade_class = BCLASS_PICK - chargetime = 0 - swingdelay = 3 - /datum/intent/shoot //shooting crossbows or other guns, no parrydrain name = "shoot" icon_state = "inshoot" @@ -584,3 +574,31 @@ candodge = TRUE canparry = TRUE miss_text = "stabs the air!" + +/datum/intent/simple/axe + name = "hack" + icon_state = "instrike" + attack_verb = list("hacks at", "chops at", "bashes") + animname = "blank22" + blade_class = BCLASS_CUT + hitsound = list("genchop", "genslash") + chargetime = 0 + penfactor = 0 + swingdelay = 3 + candodge = TRUE + canparry = TRUE +// item_damage_type = "slash" + +/datum/intent/simple/spear + name = "spear" + icon_state = "instrike" + attack_verb = list("stabs", "skewers", "bashes") + animname = "blank22" + blade_class = BCLASS_CUT + hitsound = list("genthrust", "genstab") + chargetime = 0 + penfactor = 0 + swingdelay = 3 + candodge = TRUE + canparry = TRUE +// item_damage_type = "stab" diff --git a/code/game/objects/items/rogueweapons/melee/axes.dm b/code/game/objects/items/rogueweapons/melee/axes.dm index 4d726debe5..01b86175c2 100644 --- a/code/game/objects/items/rogueweapons/melee/axes.dm +++ b/code/game/objects/items/rogueweapons/melee/axes.dm @@ -1,51 +1,49 @@ -/obj/item/rogueweapon/stoneaxe - slot_flags = ITEM_SLOT_HIP|ITEM_SLOT_BACK - force = 12 - possible_item_intents = list(/datum/intent/axe/chop/stone) - name = "stone axe" - desc = "Hewn wood, steadfast thread, a chipped stone. A recipe to bend nature to your will." - icon_state = "stoneaxe" - icon = 'icons/roguetown/weapons/32.dmi' +/* AXES - Ok damage, kinda bad parry, ok AP for chops +==========================================================*/ + +/obj/item/rogueweapon/axe item_state = "axe" - lefthand_file = 'icons/mob/inhands/weapons/rogue_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/rogue_righthand.dmi' - //dropshrink = 0.75 parrysound = "parrywood" swingsound = BLADEWOOSH_MED associated_skill = /datum/skill/combat/axesmaces - max_blade_int = 50 - max_integrity = 50 - wdefense = 1 + possible_item_intents = list(/datum/intent/axe/cut) + gripped_intents = list(/datum/intent/axe/chop) w_class = WEIGHT_CLASS_BULKY - wlength = WLENGTH_SHORT + slot_flags = ITEM_SLOT_HIP|ITEM_SLOT_BACK + wlength = WLENGTH_NORMAL resistance_flags = FLAMMABLE // Weapon made mostly of wood - gripped_intents = list(/datum/intent/axe/chop/stone) - smeltresult = /obj/item/ash //is a wooden log and a stone hammered in the top - axe_cut = 7 - sellprice = 10 + axe_cut = 10 // bonus damage to trees -/obj/item/rogueweapon/stoneaxe/getonmobprop(tag) - if(tag) - switch(tag) - if("gen") - return list("shrink" = 0.6,"sx" = -12,"sy" = -10,"nx" = 12,"ny" = -10,"wx" = -8,"wy" = -7,"ex" = 3,"ey" = -9,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 90,"sturn" = -90,"wturn" = -90,"eturn" = 90,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("wielded") - return list("shrink" = 0.6,"sx" = -12,"sy" = 3,"nx" = 12,"ny" = 2,"wx" = -8,"wy" = 2,"ex" = 4,"ey" = 2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("onbelt") - return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0) - return ..() - -/datum/intent/axe/chop/stone +/*------------\ +| Chop intent | small AP, fewer protect vs this crit (more delimb?) +\------------*/ +/datum/intent/axe/chop name = "chop" icon_state = "inchop" blade_class = BCLASS_CHOP attack_verb = list("chops", "hacks") animname = "chop" hitsound = list('sound/combat/hits/bladed/genchop (1).ogg', 'sound/combat/hits/bladed/genchop (2).ogg', 'sound/combat/hits/bladed/genchop (3).ogg') - penfactor = 20 + penfactor = AP_AXE_CHOP swingdelay = 1 misscost = 5 +/datum/intent/axe/chop/charged //Charged chop for the battleaxe and bearded axe. + name = "overhead chop" + penfactor = AP_HEAVYAXE_CHOP + chargetime = 1 + +/datum/intent/axe/chop/great//unique long attack for axes, basically you swing really really hard, stills worse than a polearm like the bardiche or spear + name = "great chop" + damfactor = 1.2 //Charged attack. + penfactor = AP_HEAVYAXE_CHOP + reach = 2 + chargetime = 1 + + +/*------------\ +| Cut intent | small AP +\------------*/ /datum/intent/axe/cut name = "cut" icon_state = "incut" @@ -53,67 +51,86 @@ attack_verb = list("cuts", "slashes") hitsound = list('sound/combat/hits/bladed/smallslash (1).ogg', 'sound/combat/hits/bladed/smallslash (2).ogg', 'sound/combat/hits/bladed/smallslash (3).ogg') animname = "cut" - penfactor = 20 + penfactor = AP_AXE_CUT swingdelay = 0 misscost = 5 -/datum/intent/axe/battleaxe/chop - name = "chop" - icon_state = "inchop" - blade_class = BCLASS_CHOP - attack_verb = list("chops", "hacks") - animname = "chop" - hitsound = list('sound/combat/hits/bladed/genchop (1).ogg', 'sound/combat/hits/bladed/genchop (2).ogg', 'sound/combat/hits/bladed/genchop (3).ogg') - penfactor = 25 +/*--------------\ +| Impale intent | big AP +\--------------*/ +/datum/intent/axe/thrust + name = "impale" + blade_class = BCLASS_STAB + attack_verb = list("stabs") + animname = "stab" + icon_state = "instab" + reach = 2 + chargetime = 1 + warnie = "mobwarning" + hitsound = list('sound/combat/hits/bladed/genstab (1).ogg', 'sound/combat/hits/bladed/genstab (2).ogg', 'sound/combat/hits/bladed/genstab (3).ogg') + penfactor = AP_HEAVYAXE_STAB swingdelay = 1 misscost = 10 -/datum/intent/axe/chop - name = "chop" - icon_state = "inchop" - blade_class = BCLASS_CHOP - attack_verb = list("chops", "hacks") - animname = "chop" - hitsound = list('sound/combat/hits/bladed/genchop (1).ogg', 'sound/combat/hits/bladed/genchop (2).ogg', 'sound/combat/hits/bladed/genchop (3).ogg') - penfactor = 20 - swingdelay = 1 - misscost = 5 +/datum/intent/pick + penfactor = AP_PICK //This is used in some actual weapons, so giving it some AP is likely wise. Hefty swing delay means it is impractical in combat. + name = "pick" + icon_state = "inpick" + attack_verb = list("picks","impales") + hitsound = list('sound/combat/hits/pick/genpick (1).ogg', 'sound/combat/hits/pick/genpick (2).ogg') + animname = "strike" + blade_class = BCLASS_PICK + chargetime = 0 + swingdelay = 3 -/datum/intent/axe/cut - name = "cut" - icon_state = "incut" - blade_class = BCLASS_CUT - attack_verb = list("cuts", "slashes") - hitsound = list('sound/combat/hits/bladed/smallslash (1).ogg', 'sound/combat/hits/bladed/smallslash (2).ogg', 'sound/combat/hits/bladed/smallslash (3).ogg') - animname = "cut" - penfactor = 20 - swingdelay = 0 - misscost = 5 +//................ Stone Axe ............... // +/obj/item/rogueweapon/axe/stone + force = DAMAGE_BAD_AXE + force_wielded = DAMAGE_BAD_AXE_WIELD + name = "stone axe" + desc = "Hewn wood, steadfast thread, a chipped stone. A recipe to bend nature to your will." + icon_state = "stoneaxe" + max_blade_int = 80 + max_integrity = 80 + wdefense = BAD_PARRY + axe_cut = 15 + wbalance = EASY_TO_DODGE + wlength = WLENGTH_SHORT + smeltresult = /obj/item/ash //is a wooden log and a stone hammered in the top + sellprice = 10 -/obj/item/rogueweapon/battle - slot_flags = ITEM_SLOT_HIP|ITEM_SLOT_BACK - force = 15 - force_wielded = 30 - possible_item_intents = list(/datum/intent/axe/cut) +/obj/item/rogueweapon/axe/stone/getonmobprop(tag) + if(tag) + switch(tag) + if("gen") + return list("shrink" = 0.6,"sx" = -12,"sy" = -10,"nx" = 12,"ny" = -10,"wx" = -8,"wy" = -7,"ex" = 3,"ey" = -9,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 90,"sturn" = -90,"wturn" = -90,"eturn" = 90,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("wielded") + return list("shrink" = 0.6,"sx" = -12,"sy" = 3,"nx" = 12,"ny" = 2,"wx" = -8,"wy" = 2,"ex" = 4,"ey" = 2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("onbelt") + return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0) + return ..() + + +//................ Battle Axe ............... // +/obj/item/rogueweapon/axe/battle + force = DAMAGE_AXE + force_wielded = DAMAGE_HEAVYAXE_WIELD name = "battle axe" desc = "A masterfully constructed ax, with additional weights in the form of ornate spikes and practical edges." icon_state = "battleaxe" max_blade_int = 500 smeltresult = /obj/item/ingot/steel - gripped_intents = list(/datum/intent/axe/cut,/datum/intent/axe/battleaxe/chop) + gripped_intents = list(/datum/intent/axe/cut, /datum/intent/axe/chop, /datum/intent/axe/chop/charged) parrysound = "sword" drop_sound = 'sound/foley/dropsound/armor_drop.ogg' - swingsound = BLADEWOOSH_MED - associated_skill = /datum/skill/combat/axesmaces minstr = 10 //meant to be a orc weapon or barbarian weapon - icon = 'icons/roguetown/weapons/32.dmi' max_blade_int = 200 - max_integrity = 300 - wdefense = 3 + max_integrity = INTEGRITY_STRONG + wdefense = AVERAGE_PARRY sellprice = 60 -/obj/item/rogueweapon/battle/getonmobprop(tag) +/obj/item/rogueweapon/axe/battle/getonmobprop(tag) if(tag) switch(tag) if("gen") @@ -124,43 +141,44 @@ return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0) return ..() -/obj/item/rogueweapon/woodcut - slot_flags = ITEM_SLOT_HIP|ITEM_SLOT_BACK - force = 20 - force_wielded = 25 + +//................ Iron Axe ............... // +/obj/item/rogueweapon/axe/iron + force = DAMAGE_AXE + force_wielded = DAMAGE_AXE_WIELD possible_item_intents = list(/datum/intent/axe/cut,/datum/intent/axe/chop) name = "iron axe" desc = "Tool, weapon, loyal iron companion." icon_state = "axe" - icon = 'icons/roguetown/weapons/32.dmi' - max_blade_int = 200 - max_integrity = 300 + max_blade_int = INTEGRITY_STRONG + max_integrity = INTEGRITY_STANDARD smeltresult = /obj/item/ingot/iron gripped_intents = list(/datum/intent/axe/cut,/datum/intent/axe/chop) parrysound = "sword" drop_sound = 'sound/foley/dropsound/armor_drop.ogg' - swingsound = BLADEWOOSH_MED - resistance_flags = FLAMMABLE // Weapon made mostly of wood - associated_skill = /datum/skill/combat/axesmaces - wdefense = 2 + axe_cut = 18 + + wdefense = MEDIOCHRE_PARRY minstr = 6 - axe_cut = 10 + sellprice = 20 + +//................ Pick Axe ............... // // Pickaxe-axe ; Technically both a tool and weapon, but it goes here due to weapon function. // Same stats as steel axe, but refactored for pickaxe quality purposes. /obj/item/rogueweapon/pick/paxe + force = DAMAGE_AXE + force_wielded = DAMAGE_AXE_WIELD name = "pickaxe" desc = "An odd mix of a pickaxe front and a hatchet blade back, capable of being switched between." icon = 'icons/roguetown/weapons/32.dmi' icon_state = "paxe" - force = 20 - force_wielded = 25 - possible_item_intents = list(/datum/intent/axe/cut,/datum/intent/axe/chop, /datum/intent/pick) + possible_item_intents = list(/datum/intent/axe/cut, /datum/intent/pick) gripped_intents = list(/datum/intent/axe/cut,/datum/intent/axe/chop) wlength = WLENGTH_NORMAL - max_blade_int = 300 - max_integrity = 500 + max_blade_int = INTEGRITY_STRONGEST + max_integrity = INTEGRITY_STRONGEST slot_flags = ITEM_SLOT_HIP|ITEM_SLOT_BACK associated_skill = /datum/skill/combat/axesmaces anvilrepair = /datum/skill/craft/weaponsmithing @@ -168,35 +186,33 @@ resistance_flags = FIRE_PROOF parrysound = list('sound/combat/parry/wood/parrywood (1).ogg', 'sound/combat/parry/wood/parrywood (2).ogg', 'sound/combat/parry/wood/parrywood (3).ogg') swingsound = BLADEWOOSH_MED - wdefense = 3 + wdefense = AVERAGE_PARRY minstr = 6 sellprice = 50 pickmult = 1.2 // It's a pick... axe_cut = 15 // ...and an Axe! toolspeed = 2 -/obj/item/rogueweapon/woodcut/steel + +//................ Steel Axe ............... // +/obj/item/rogueweapon/axe/steel name = "steel axe" desc = "A bearded steel axe revered by dwarf, humen and elf alike. Performs much better than its iron counterpart." icon_state = "saxe" - icon = 'icons/roguetown/weapons/32.dmi' - force = 20 - force_wielded = 25 - possible_item_intents = list(/datum/intent/axe/cut,/datum/intent/axe/chop) - max_blade_int = 300 - max_integrity = 500 + force = DAMAGE_AXE+3 //Superior as an one-handed option. + force_wielded = DAMAGE_AXE_WIELD+2 + possible_item_intents = list(/datum/intent/axe/cut,/datum/intent/axe/chop,/datum/intent/axe/chop/charged) + max_blade_int = INTEGRITY_STRONGEST + max_integrity = INTEGRITY_STRONG smeltresult = /obj/item/ingot/steel resistance_flags = FIRE_PROOF gripped_intents = list(/datum/intent/axe/cut,/datum/intent/axe/chop) - parrysound = list('sound/combat/parry/wood/parrywood (1).ogg', 'sound/combat/parry/wood/parrywood (2).ogg', 'sound/combat/parry/wood/parrywood (3).ogg') - swingsound = BLADEWOOSH_MED - associated_skill = /datum/skill/combat/axesmaces - wdefense = 3 + wdefense = AVERAGE_PARRY minstr = 6 sellprice = 35 - axe_cut = 15 // Better than iron + axe_cut = 20 -/obj/item/rogueweapon/woodcut/getonmobprop(tag) +/obj/item/rogueweapon/axe/iron/getonmobprop(tag) . = ..() if(tag) switch(tag) @@ -207,35 +223,25 @@ if("onbelt") return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0) + +//................ Copper Hatchet ............... // // Copper Hatchet -/obj/item/rogueweapon/copperaxe - slot_flags = ITEM_SLOT_HIP|ITEM_SLOT_BACK - force = 15 - force_wielded = 20 - possible_item_intents = list(/datum/intent/axe/chop) - name = "copper axe" +/obj/item/rogueweapon/axe/copper + force = DAMAGE_BAD_AXE + force_wielded = DAMAGE_BAD_AXE_WIELD + + name = "copper hatchet" desc = "A simple designed handaxe, an outdated weaponry from simpler times." icon_state = "chatchet" - icon = 'icons/roguetown/weapons/32.dmi' - item_state = "chatchet" - lefthand_file = 'icons/mob/inhands/weapons/rogue_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/rogue_righthand.dmi' - //dropshrink = 0.75 - parrysound = list('sound/combat/parry/wood/parrywood (1).ogg', 'sound/combat/parry/wood/parrywood (2).ogg', 'sound/combat/parry/wood/parrywood (3).ogg') - swingsound = BLADEWOOSH_MED - associated_skill = /datum/skill/combat/axesmaces + max_blade_int = 120 - max_integrity = 120 - wdefense = 2 + max_integrity = INTEGRITY_WORST minstr = 6 smeltresult = /obj/item/ingot/copper - w_class = WEIGHT_CLASS_BULKY wlength = WLENGTH_SHORT pickup_sound = 'sound/foley/equip/rummaging-03.ogg' - gripped_intents = list(/datum/intent/axe/chop/stone) - axe_cut = 8 sellprice = 15 -/obj/item/rogueweapon/copperaxe/getonmobprop(tag) +/obj/item/rogueweapon/axe/copper/getonmobprop(tag) . = ..() if(tag) switch(tag) @@ -246,25 +252,27 @@ if("onbelt") return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0) -/obj/item/rogueweapon/halberd/bardiche/woodcutter + +//................ Woodcutter Axe ............... // +/obj/item/rogueweapon/polearm/halberd/bardiche/woodcutter slot_flags = ITEM_SLOT_BACK bigboy = TRUE - force = 15 - force_wielded = 20 + force = DAMAGE_AXE + force_wielded = DAMAGE_HEAVYAXE_WIELD possible_item_intents = list(/datum/intent/axe/cut) name = "woodcutter axe" desc = "The tool, weapon, and loyal companion of woodcutters. Able to chop mighty trees and repel the threats of the forest." icon_state = "woodcutter" icon = 'icons/roguetown/weapons/64.dmi' max_blade_int = 200 - max_integrity = 300 + max_integrity = INTEGRITY_STRONG smeltresult = /obj/item/ingot/iron gripped_intents = list(/datum/intent/axe/cut,/datum/intent/axe/chop/great) parrysound = list('sound/combat/parry/wood/parrywood (1).ogg', 'sound/combat/parry/wood/parrywood (2).ogg', 'sound/combat/parry/wood/parrywood (3).ogg') swingsound = BLADEWOOSH_MED resistance_flags = FLAMMABLE // Weapon made mostly of wood associated_skill = /datum/skill/combat/axesmaces - wdefense = 2 + wdefense = AVERAGE_PARRY dropshrink = 0.95 minstr = 8 axe_cut = 15 @@ -281,18 +289,20 @@ if("onbelt") return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) + +//................ War Axe ............... // //attempting to fix transformation issues//it worked wohoo, don't touch it. -/obj/item/rogueweapon/halberd/bardiche/warcutter +/obj/item/rogueweapon/polearm/halberd/bardiche/warcutter slot_flags = ITEM_SLOT_BACK - force = 15 - force_wielded = 25 + force = DAMAGE_AXE + force_wielded = DAMAGE_AXE_WIELD possible_item_intents = list(/datum/intent/axe/cut) name = "footman war axe" desc = "An enormous spiked axe. The ideal choice for a militiaman wanting to cut a fancy noble whoreson down to size." icon_state = "warcutter" icon = 'icons/roguetown/weapons/64.dmi' max_blade_int = 200 - max_integrity = 300 + max_integrity = INTEGRITY_STRONG bigboy = TRUE smeltresult = /obj/item/ingot/iron gripped_intents = list(/datum/intent/axe/cut,/datum/intent/axe/chop/great, /datum/intent/axe/thrust, /datum/intent/pick) @@ -306,21 +316,9 @@ axe_cut = 15 sellprice = 20 -/datum/intent/axe/thrust - name = "impale" - blade_class = BCLASS_STAB - attack_verb = list("stabs") - animname = "stab" - icon_state = "instab" - reach = 2 - chargetime = 1 - warnie = "mobwarning" - hitsound = list('sound/combat/hits/bladed/genstab (1).ogg', 'sound/combat/hits/bladed/genstab (2).ogg', 'sound/combat/hits/bladed/genstab (3).ogg') - penfactor = 40 - swingdelay = 1 - misscost = 10 -/obj/item/rogueweapon/halberd/bardiche/warcutter/getonmobprop(tag) + +/obj/item/rogueweapon/polearm/halberd/bardiche/warcutter/getonmobprop(tag) . = ..() if(tag) switch(tag) @@ -332,18 +330,6 @@ return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) -/datum/intent/axe/chop/great//unique long attack for axes, basically you swing really really hard, stills worse than a polearm like the bardiche or spear - name = "chop" - icon_state = "inchop" - blade_class = BCLASS_CHOP - attack_verb = list("chops", "hacks") - animname = "chop" - hitsound = list('sound/combat/hits/bladed/genchop (1).ogg', 'sound/combat/hits/bladed/genchop (2).ogg', 'sound/combat/hits/bladed/genchop (3).ogg') - penfactor = 30 - reach = 2 - chargetime = 1 - swingdelay = 1 - misscost = 5 /////////////////////////////////////////////////////////////////// // Part of Kaizoku project. Usage ONLY for Stonekeep/Warmonger, // diff --git a/code/game/objects/items/rogueweapons/melee/blunt.dm b/code/game/objects/items/rogueweapons/melee/blunt.dm index 889fbe6a5b..05ed484cc6 100644 --- a/code/game/objects/items/rogueweapons/melee/blunt.dm +++ b/code/game/objects/items/rogueweapons/melee/blunt.dm @@ -1,6 +1,9 @@ +/* BLUNT - low-ish damage, limited defense, good AP +==========================================================*/ +//................ Mace ............... // /obj/item/rogueweapon/mace - force = 20 - force_wielded = 25 + force = DAMAGE_MACE + force_wielded = DAMAGE_MACE_WIELD possible_item_intents = list(/datum/intent/mace/strike) gripped_intents = list(/datum/intent/mace/strike, /datum/intent/mace/smash) name = "iron mace" @@ -12,43 +15,20 @@ righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' equip_sound = "rustle" sharpness = IS_BLUNT - //dropshrink = 0.75 wlength = WLENGTH_NORMAL w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_HIP associated_skill = /datum/skill/combat/axesmaces smeltresult = /obj/item/ingot/iron - gripped_intents = list(/datum/intent/mace/strike,/datum/intent/mace/smash) parrysound = list('sound/combat/parry/parrygen.ogg') swingsound = BLUNTWOOSH_MED max_integrity = 300 minstr = 7 - wdefense = 2 - wbalance = -1 + wdefense = AVERAGE_PARRY + wbalance = EASY_TO_DODGE sellprice = 20 blade_dulling = DULLING_BASHCHOP -/obj/item/rogueweapon/mace/church - force = 25 - force_wielded = 30 - name = "bell ringer" - desc = "Faith is sometimes best administered with steel and blood." - icon_state = "churchmace" - smeltresult = /obj/item/ingot/steel - blade_dulling = DULLING_BASH - wdefense = 3 - sellprice = 100 - -/obj/item/rogueweapon/mace/steel - name = "steel mace" - desc = "A well-crafted mace with a steel head. Easier to control and hits just as hard." - icon_state = "smace" - wbalance = 0 - smeltresult = /obj/item/ingot/steel - blade_dulling = DULLING_BASH - wdefense = 3 - sellprice = 60 - /obj/item/rogueweapon/mace/getonmobprop(tag) if(tag) switch(tag) @@ -60,76 +40,153 @@ return list("shrink" = 0.3,"sx" = -2,"sy" = -6,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0) return ..() - +/*--------------\ +| Strike intent | moderate AP +\--------------*/ /datum/intent/mace/strike name = "strike" blade_class = BCLASS_BLUNT attack_verb = list("strikes", "hits") hitsound = list('sound/combat/hits/blunt/metalblunt (1).ogg', 'sound/combat/hits/blunt/metalblunt (2).ogg', 'sound/combat/hits/blunt/metalblunt (3).ogg') chargetime = 0 - penfactor = 20 + penfactor = AP_CLUB_STRIKE swingdelay = 0 icon_state = "instrike" misscost = 5 +/datum/intent/mace/strike/wood + hitsound = list('sound/combat/hits/blunt/woodblunt (1).ogg', 'sound/combat/hits/blunt/woodblunt (2).ogg') + +/datum/intent/mace/strike/heavy + penfactor = AP_CLUB_STRIKE+10 + swingdelay = 2 + icon_state = "instrike" + misscost = 12 + + +/*--------------\ +| Smash intent | 10% force increase and moderate+ AP, has slightly higher penalties +\--------------*/ /datum/intent/mace/smash name = "smash" blade_class = BCLASS_SMASH attack_verb = list("smashes") hitsound = list('sound/combat/hits/blunt/metalblunt (1).ogg', 'sound/combat/hits/blunt/metalblunt (2).ogg', 'sound/combat/hits/blunt/metalblunt (3).ogg') - penfactor = 30 + penfactor = AP_CLUB_SMASH damfactor = 1.1 swingdelay = 0 icon_state = "insmash" misscost = 5 +/datum/intent/mace/smash/wood + hitsound = list('sound/combat/hits/blunt/woodblunt (1).ogg', 'sound/combat/hits/blunt/woodblunt (2).ogg') + +/datum/intent/mace/smash/heavy + penfactor = AP_HEAVY_SMASH + damfactor = 1.2 + chargetime = 3 + swingdelay = 3 + misscost = 22 + warnie = "mobwarning" + + +/*--------------\ +| Thrust intent | Godendag stab +\--------------*/ +/datum/intent/mace/thrust + name = "thrust" + blade_class = BCLASS_STAB + attack_verb = list("stabs") + animname = "stab" + icon_state = "instab" + reach = 2 + chargetime = 1 + warnie = "mobwarning" + hitsound = list('sound/combat/hits/bladed/genstab (1).ogg', 'sound/combat/hits/bladed/genstab (2).ogg', 'sound/combat/hits/bladed/genstab (3).ogg') + penfactor = 40 + swingdelay = 1 + misscost = 15 + + +//................ Bell ringer ............... // +/obj/item/rogueweapon/mace/church + force = DAMAGE_MACE+3 + force_wielded = DAMAGE_MACE_WIELD+3 + name = "bell ringer" + desc = "Faith is sometimes best administered with steel and blood." + icon_state = "churchmace" + smeltresult = /obj/item/ingot/steel + blade_dulling = DULLING_BASH + sellprice = 100 + wdefense = GOOD_PARRY + + +//................ Steel mace ............... // Better wbalance and wdefense +/obj/item/rogueweapon/mace/steel + name = "steel mace" + desc = "A well-crafted mace with a steel head. Easier to control and hits just as hard." + icon_state = "smace" + blade_dulling = DULLING_BASH + smeltresult = /obj/item/ingot/steel + wbalance = DODGE_CHANCE_NORMAL + sellprice = 60 + wdefense = GOOD_PARRY + + +//................ Spiked club ............... // +/obj/item/rogueweapon/mace/spiked + force = DAMAGE_MACE+2 + force_wielded = DAMAGE_MACE_WIELD+3 + name = "spiked mace" + icon_state = "spikedmace" + max_integrity = 200 + + +//................ Morningstar ............... // +/obj/item/rogueweapon/mace/steel/morningstar + force = DAMAGE_MACE+2 + force_wielded = DAMAGE_MACE_WIELD+3 + name = "morningstar" + icon_state = "spiked_club_old" + max_integrity = 300 + + +//................ Club ............... // /obj/item/rogueweapon/mace/woodclub - force = 15 - force_wielded = 20 + force = DAMAGE_CLUB + force_wielded = DAMAGE_CLUB_WIELD name = "club" desc = "A weapon older than recorded time itself." icon_state = "club1" - //dropshrink = 0.75 - wdefense = 1 max_integrity = 120 resistance_flags = FLAMMABLE // Weapon made mostly of wood possible_item_intents = list(/datum/intent/mace/strike/wood) gripped_intents = list(/datum/intent/mace/strike/wood, /datum/intent/mace/smash/wood) smeltresult = /obj/item/ash - minstr = 0 + minstr = 2 sellprice = 5 + wdefense = MEDIOCHRE_PARRY /obj/item/rogueweapon/mace/woodclub/Initialize(mapload) . = ..() - icon_state = "club[rand(1,2)]" - -/datum/intent/mace/strike/wood - hitsound = list('sound/combat/hits/blunt/woodblunt (1).ogg', 'sound/combat/hits/blunt/woodblunt (2).ogg') - penfactor = 20 - swingdelay = 0 - misscost = 5 - -/datum/intent/mace/smash/wood - hitsound = list('sound/combat/hits/blunt/woodblunt (1).ogg', 'sound/combat/hits/blunt/woodblunt (2).ogg') - penfactor = 30 - swingdelay = 0 - misscost = 5 - -/obj/item/rogueweapon/mace/spiked - icon_state = "spiked_club" - max_integrity = 200 - force = 20 - force_wielded = 30 - -/obj/item/rogueweapon/mace/steel/morningstar - icon_state = "morningstar" - max_integrity = 300 - force = 20 - force_wielded = 30 - + if(icon_state == "club1") + icon_state = "club[rand(1,2)]" + +//................ Rolling Pin ............... // +/obj/item/rogueweapon/mace/woodclub/rollingpin + name = "rolling pin" + desc = "For rolling dough or teaching beggars who steal a lesson." + icon = 'modular/Neu_Food/icons/cooking.dmi' + icon_state = "rolling_pin" + item_state = "rolling_pin" + lefthand_file = 'modular/Neu_Food/icons/food_lefthand.dmi' + righthand_file = 'modular/Neu_Food/icons/food_righthand.dmi' + experimental_inhand = FALSE + +//................ Cudgel ............... // /obj/item/rogueweapon/mace/cudgel - force = 15 - force_wielded = 20 + force = DAMAGE_CLUB + force_wielded = DAMAGE_CLUB_WIELD name = "cudgel" icon_state = "cudgel" desc = "A stubby little club favored for thwacking thieves and smart-mouthed peasant folk." @@ -139,17 +196,10 @@ wlength = WLENGTH_SHORT w_class = WEIGHT_CLASS_NORMAL max_integrity = 180 - wbalance = 1 - minstr = 0 - wdefense = 3 + minstr = 2 + wbalance = HARD_TO_DODGE sellprice = 15 - -/obj/item/rogueweapon/mace/cudgel/carpenter - force = 15 - force_wielded = 20 - name = "peasant cudgel" - icon_state = "carpentercudgel" - desc = "A stubby club reinforced with iron bits, popular among village watchmen and peasant militias. Despite being reinforced and hard-hitting, it still cannot compare to a proper mace." + wdefense = MEDIOCHRE_PARRY /obj/item/rogueweapon/mace/cudgel/getonmobprop(tag) . = ..() @@ -160,26 +210,34 @@ if("onbelt") return list("shrink" = 0.4,"sx" = -3,"sy" = -4,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 70,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 1,"wflip" = 0,"eflip" = 0) -/obj/item/rogueweapon/mace/wsword +//................ Alt cudgel ............... // +/obj/item/rogueweapon/mace/cudgel/carpenter + name = "peasant cudgel" + icon_state = "carpentercudgel" + desc = "A stubby club reinforced with iron bits, popular among village watchmen and peasant militias. Despite being reinforced and hard-hitting, it still cannot compare to a proper mace." + +//................ Bludgeon ............... // (Copper cudgel) +/obj/item/rogueweapon/mace/cudgel/bludgeon + name = "bludgeon" + icon = 'icons/roguetown/weapons/custom.dmi' + icon_state = "bludgeon" + desc = "Old wooden club with copper nails in it." + max_integrity = INTEGRITY_POOR + sellprice = VALUE_DIRT_CHEAP + + +//................ Wooden sword ............... // +/obj/item/rogueweapon/mace/woodclub/train_sword force = 5 force_wielded = 8 name = "wooden sword" desc = "Crude wood assembled into the shape of a sword, a terrible weapon to be on the recieving end of during a training spat." icon_state = "wsword" - //dropshrink = 0.75 - possible_item_intents = list(/datum/intent/mace/strike/wood) - gripped_intents = list(/datum/intent/mace/strike/wood, /datum/intent/mace/smash/wood) - smeltresult = /obj/item/ash - resistance_flags = FLAMMABLE // Weapon made mostly of wood - max_integrity = 100 - minstr = 0 - wdefense = 5 wbalance = 0 associated_skill = /datum/skill/combat/swords - sellprice = 5 + wdefense = ULTMATE_PARRY - -/obj/item/rogueweapon/mace/wsword/getonmobprop(tag) +/obj/item/rogueweapon/mace/woodclub/train_sword/getonmobprop(tag) . = ..() if(tag) switch(tag) @@ -191,35 +249,34 @@ return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0) + +//................ Goedendag ............... // /obj/item/rogueweapon/mace/goden - force = 15 - force_wielded = 35 - possible_item_intents = list(/datum/intent/mace/heavy/strike) - gripped_intents = list(/datum/intent/mace/heavy/smash, /datum/intent/mace/thrust) + force = DAMAGE_CLUB + force_wielded = DAMAGE_HEAVYCLUB_WIELD + possible_item_intents = list(/datum/intent/mace/strike/heavy) + gripped_intents = list(/datum/intent/mace/smash/heavy, /datum/intent/mace/thrust) name = "warclub" desc = "A two handed club, decorated with a spiked cap crown. A perfect way to say Good Morning to any would be noble-knight." icon_state = "goedendag" icon = 'icons/roguetown/weapons/64.dmi' - //dropshrink = 0.75 - wlength = WLENGTH_LONG - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - associated_skill = /datum/skill/combat/axesmaces - smeltresult = /obj/item/ash - resistance_flags = FLAMMABLE // Weapon made mostly of wood - parrysound = "parrywood" - swingsound = BLUNTWOOSH_MED - max_integrity = 400 - minstr = 10 - wdefense = 3 pixel_y = -16 pixel_x = -16 inhand_x_dimension = 64 inhand_y_dimension = 64 bigboy = TRUE gripsprite = TRUE - wbalance = 0 + wlength = WLENGTH_LONG + w_class = WEIGHT_CLASS_BULKY + slot_flags = ITEM_SLOT_BACK + smeltresult = /obj/item/ash + resistance_flags = FLAMMABLE // Weapon made mostly of wood + minstr = 10 + parrysound = "parrywood" + max_integrity = 300 + wbalance = EASY_TO_DODGE sellprice = 35 + wdefense = GOOD_PARRY /obj/item/rogueweapon/mace/goden/getonmobprop(tag) . = ..() @@ -232,20 +289,18 @@ if("onbelt") return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) - +//................ Grand mace ............... // /obj/item/rogueweapon/mace/goden/steel + gripped_intents = list(/datum/intent/mace/smash/heavy) // It's a 2h flanged mace, not a goedendag. name = "grand mace" desc = "A casted polearm, rumored to be the weapon-design used by the Forgotten God himself." - gripped_intents = list(/datum/intent/mace/heavy/smash) // It's a 2h flanged mace, not a goedendag. icon_state = "polemace" resistance_flags = FIRE_PROOF smeltresult = /obj/item/ingot/steel - max_integrity = 500 - force = 15 - force_wielded = 35 - slowdown = 1 - wbalance = -1 + max_integrity = INTEGRITY_STRONGEST +// slowdown = 1 sellprice = 60 + wbalance = DODGE_CHANCE_NORMAL /obj/item/rogueweapon/mace/goden/steel/getonmobprop(tag) . = ..() @@ -258,11 +313,13 @@ if("onbelt") return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0) +//................ Shillelagh ............... // /obj/item/rogueweapon/mace/goden/shillelagh // The Briar signature weapon. Sturdy oak war club. + gripped_intents = list(/datum/intent/mace/smash/heavy) name = "shillelagh" desc = "Big old oak branch, carved to a deadly weapon." icon_state = "shillelagh" - icon = 'icons/roguetown/weapons/shillelagh.dmi' + icon = 'icons/roguetown/weapons/custom.dmi' pixel_y = 0 pixel_x = 0 bigboy = FALSE @@ -273,213 +330,26 @@ minstr = 8 sellprice = 5 - force = 20 - force_wielded = 32 - possible_item_intents = list(/datum/intent/mace/heavy/strike) - gripped_intents = list(/datum/intent/mace/heavy/smash) - /obj/item/rogueweapon/mace/goden/shillelagh/getonmobprop(tag) . = ..() if(tag) switch(tag) if("gen") - return list("shrink" = 0.7, -"sx" = -10, -"sy" = 0, -"nx" = 11, -"ny" = 0, -"wx" = -5, -"wy" = -1, -"ex" = 6, -"ey" = 1, -"northabove" = 0, -"southabove" = 1, -"eastabove" = 1, -"westabove" = 0, -"nturn" = -15, -"sturn" = 12, -"wturn" = 0, -"eturn" = 354, -"nflip" = 0, -"sflip" = 8, -"wflip" = 8, -"eflip" = 0) + return list("shrink" = 0.7,"sx" = -10,"sy" = 0,"nx" = 11,"ny" = 0,"wx" = -5,"wy" = -1,"ex" = 6,"ey" = 1,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -15,"sturn" = 12,"wturn" = 0,"eturn" = 354,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) if("wielded") - return list("shrink" = 0.7, -"sx" = 6, -"sy" = -6, -"nx" = -5, -"ny" = -6, -"wx" = 2, -"wy" = -6, -"ex" = 6, -"ey" = -4, -"northabove" = 0, -"southabove" = 1, -"eastabove" = 1, -"westabove" = 1, -"nturn" = 0, -"sturn" = 0, -"wturn" = 20, -"eturn" = -20, -"nflip" = 8, -"sflip" = 0, -"wflip" = 0, -"eflip" = 0) + return list("shrink" = 0.7,"sx" = 6,"sy" = -6,"nx" = -5,"ny" = -6,"wx" = 2,"wy" = -6,"ex" = 6,"ey" = -4,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 1,"nturn" = 0,"sturn" = 0,"wturn" = 20,"eturn" = -20,"nflip" = 8,"sflip" = 0,"wflip" = 0,"eflip" = 0) if("onbelt") return list("shrink" = 0.7,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 2,"wy" = -5,"ex" = 8,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) - -/datum/intent/mace/heavy/strike - name = "strike" - blade_class = BCLASS_BLUNT - attack_verb = list("strikes", "hits") - hitsound = list('sound/combat/hits/blunt/metalblunt (1).ogg', 'sound/combat/hits/blunt/metalblunt (2).ogg', 'sound/combat/hits/blunt/metalblunt (3).ogg') - chargetime = 0 - penfactor = 30 - swingdelay = 2 - icon_state = "instrike" - misscost = 15 - -/datum/intent/mace/heavy/smash - name = "smash" - blade_class = BCLASS_SMASH - attack_verb = list("smashes") - hitsound = list('sound/combat/hits/blunt/metalblunt (1).ogg', 'sound/combat/hits/blunt/metalblunt (2).ogg', 'sound/combat/hits/blunt/metalblunt (3).ogg') - penfactor = 50 - damfactor = 1.2 - chargetime = 3 - swingdelay = 3 - icon_state = "insmash" - misscost = 23 - warnie = "mobwarning" - -// For the Goedendag. If it applies to the grand mace, use this one instead. -/datum/intent/mace/thrust - name = "thrust" - blade_class = BCLASS_STAB - attack_verb = list("stabs") - animname = "stab" - icon_state = "instab" - reach = 2 - chargetime = 1 - warnie = "mobwarning" - hitsound = list('sound/combat/hits/bladed/genstab (1).ogg', 'sound/combat/hits/bladed/genstab (2).ogg', 'sound/combat/hits/bladed/genstab (3).ogg') - penfactor = 40 - swingdelay = 1 - misscost = 15 - -// Copper Bludgeon - -/obj/item/rogueweapon/mace/goden/copper - force = 10 - force_wielded = 20 - slowdown = 1 - possible_item_intents = list(/datum/intent/mace/heavy/strike) - gripped_intents = list(/datum/intent/mace/heavy/smash, /datum/intent/mace/thrust) - name = "copper warclub" - desc = "A two handed club, decorated with a crown of spikes. A barbaric besign, good enough to be used as a weapon." - icon_state = "cwarclub" - icon = 'icons/roguetown/weapons/64.dmi' - //dropshrink = 0.75 - wlength = WLENGTH_LONG - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - associated_skill = /datum/skill/combat/axesmaces - smeltresult = /obj/item/ash - resistance_flags = FLAMMABLE // Weapon made mostly of wood - parrysound = "parrywood" - swingsound = BLUNTWOOSH_MED - max_integrity = 150 - minstr = 10 - wdefense = 3 - pixel_y = -16 - pixel_x = -16 - inhand_x_dimension = 64 - inhand_y_dimension = 64 - bigboy = TRUE - gripsprite = TRUE - wbalance = 0 - sellprice = 35 - -/obj/item/rogueweapon/mace/copperbludgeon - force = 12 - force_wielded = 18 - possible_item_intents = list(/datum/intent/mace/strike) - gripped_intents = list(/datum/intent/mace/strike, /datum/intent/mace/smash) - name = "copper bludgeon" - desc = "An extremely crude weapon for cruder bastards." - icon_state = "cbludgeon" - icon = 'icons/roguetown/weapons/32.dmi' - item_state = "mace_greyscale" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - sharpness = IS_BLUNT - //dropshrink = 0.75 - wlength = WLENGTH_NORMAL - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_HIP - associated_skill = /datum/skill/combat/axesmaces - parrysound = list('sound/combat/parry/parrygen.ogg') - swingsound = BLUNTWOOSH_MED - max_integrity = 80 - minstr = 5 - wdefense = 1 - smeltresult = /obj/item/ingot/copper - blade_dulling = DULLING_BASHCHOP - smeltresult = /obj/item/ingot/copper - sellprice = 10 - -// Copper War-Mace -/obj/item/rogueweapon/mace/coppermace - force = 15 - force_wielded = 20 - possible_item_intents = list(/datum/intent/mace/strike) - gripped_intents = list(/datum/intent/mace/strike, /datum/intent/mace/smash) - name = "copper mace" - desc = "Simple and indelicate lover of skulls." - icon_state = "cclub" - icon = 'icons/roguetown/weapons/32.dmi' - item_state = "mace_greyscale" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - //dropshrink = 0.75 - wlength = WLENGTH_NORMAL - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_HIP - associated_skill = /datum/skill/combat/axesmaces - gripped_intents = list(/datum/intent/mace/strike,/datum/intent/mace/smash) - parrysound = list('sound/combat/parry/parrygen.ogg') - swingsound = BLUNTWOOSH_MED - max_integrity = 140 - smeltresult = /obj/item/ingot/copper - minstr = 6 - wdefense = 2 - blade_dulling = DULLING_BASHCHOP - smeltresult = /obj/item/ingot/copper - sellprice = 10 - -/obj/item/rogueweapon/mace/coppermace/getonmobprop(tag) - . = ..() - if(tag) - switch(tag) - if("gen") - return list("shrink" = 0.7,"sx" = -8,"sy" = 6,"nx" = 8,"ny" = 6,"wx" = -5,"wy" = 6,"ex" = 0,"ey" = 6,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -38,"sturn" = 37,"wturn" = 32,"eturn" = -32,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("wielded") - return list("shrink" = 0.7,"sx" = 5,"sy" = -2,"nx" = -5,"ny" = -2,"wx" = -5,"wy" = -2,"ex" = 5,"ey" = -2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 7,"sturn" = -7,"wturn" = 16,"eturn" = -22,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) - if("onbelt") - return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0) - -// Unique longbeard hammer. +//................ Dwarf Warhammer ............... // - Unique Langobardo weapon /obj/item/rogueweapon/mace/goden/steel/warhammer name = "warhammer" desc = "A great dwarven warhammer made of stern steel, enscratched with oaths of battle and time." icon_state = "warhammer" - icon = 'icons/roguetown/weapons/64.dmi' - //dropshrink = 0.75 wlength = WLENGTH_GREAT + wdefense = GREAT_PARRY //Signature weapon. swingsound = BLUNTWOOSH_HUGE sellprice = 100 @@ -494,6 +364,37 @@ if("onbelt") return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) + + +// Obsolete +//................ Copper bludgeon ............... // +/obj/item/rogueweapon/mace/copperbludgeon + force = DAMAGE_CLUB + force_wielded = DAMAGE_CLUB_WIELD + name = "copper bludgeon" + desc = "An extremely crude weapon for cruder bastards." + icon_state = "cbludgeon" + max_integrity = 80 + minstr = 5 + smeltresult = /obj/item/ingot/copper + sellprice = 10 + wdefense = MEDIOCHRE_PARRY + +//................ Copper goden ............... // +/obj/item/rogueweapon/mace/goden/copper + force = 10 + force_wielded = 20 + slowdown = 1 + name = "copper warclub" + desc = "A two handed club, decorated with a crown of spikes. A barbaric besign, good enough to be used as a weapon." + icon_state = "cwarclub" + smeltresult = /obj/item/ash + resistance_flags = FLAMMABLE // Weapon made mostly of wood + parrysound = "parrywood" + max_integrity = 150 + minstr = 10 + sellprice = 35 + /////////////////////////////////////////////////////////////////// // Part of Kaizoku project. Usage ONLY for Stonekeep/Warmonger, // // If the usage is desired, ask monochrome9090 for permission. // diff --git a/code/game/objects/items/rogueweapons/melee/flail.dm b/code/game/objects/items/rogueweapons/melee/flail.dm index c9287bc409..dfc34de6dc 100644 --- a/code/game/objects/items/rogueweapons/melee/flail.dm +++ b/code/game/objects/items/rogueweapons/melee/flail.dm @@ -1,12 +1,13 @@ +/* FLAILS - Zero wdefense, can´t parry, best AP +==========================================================*/ /obj/item/rogueweapon/flail - force = 20 + force = DAMAGE_NORMAL_FLAIL possible_item_intents = list(/datum/intent/flail/strike, /datum/intent/flail/strike/smash) name = "military flail" desc = "A sturdy handle afixed to a cruel spiked ball with a harrowing metal chain." icon_state = "iflail" icon = 'icons/roguetown/weapons/32.dmi' sharpness = IS_BLUNT - //dropshrink = 0.75 wlength = WLENGTH_NORMAL w_class = WEIGHT_CLASS_NORMAL slot_flags = ITEM_SLOT_HIP @@ -17,218 +18,100 @@ equip_sound = 'sound/foley/equip/equip_armor_chain.ogg' swingsound = BLUNTWOOSH_MED can_parry = FALSE // You can't parry with this, it'd be awkward to tangle chains, use a shield + wdefense = TERRIBLE_PARRY max_integrity = 300 throwforce = 5 - wdefense = 0 minstr = 6 sellprice = 20 +/obj/item/rogueweapon/flail/getonmobprop(tag) + . = ..() + if(tag) + switch(tag) + if("gen") + return list("shrink" = 0.5,"sx" = -10,"sy" = -3,"nx" = 11,"ny" = -2,"wx" = -7,"wy" = -3,"ex" = 3,"ey" = -3,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 22,"sturn" = -23,"wturn" = -23,"eturn" = 29,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("onbelt") + return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) + +/*--------------\ +| Strike intent | small AP +\--------------*/ /datum/intent/flail/strike name = "strike" + icon_state = "instrike" blade_class = BCLASS_BLUNT - attack_verb = list("strikes", "hits") hitsound = list('sound/combat/hits/blunt/flailhit.ogg') swingdelay = 5 - penfactor = 5 - icon_state = "instrike" misscost = 5 + attack_verb = list("strikes", "hits") + penfactor = AP_FLAIL_STRIKE /datum/intent/flail/strike/long reach = 2 - penfactor = 10 - misscost = 10 + misscost = 8 + +/*--------------\ +| Smash intent | 20% force increase and huge AP, requires charging and has higher penalties +\--------------*/ /datum/intent/flail/strike/smash name = "smash" - chargetime = 5 + icon_state = "insmash" + blade_class = BCLASS_SMASH no_early_release = TRUE - penfactor = 80 - recovery = 10 - damfactor = 1.2 + chargetime = 5 chargedloop = /datum/looping_sound/flailswing keep_looping = TRUE - icon_state = "insmash" - blade_class = BCLASS_SMASH + recovery = 10 + misscost = 10 attack_verb = list("smashes") - hitsound = list('sound/combat/hits/blunt/flailhit.ogg') - misscost = 5 + damfactor = 1.2 + penfactor = AP_FLAIL_SMASH /datum/intent/flail/strike/smash/long reach = 2 - recovery = 20 - misscost = 20 - -/obj/item/rogueweapon/flail/getonmobprop(tag) - . = ..() - if(tag) - switch(tag) - if("gen") - return list("shrink" = 0.5,"sx" = -10,"sy" = -3,"nx" = 11,"ny" = -2,"wx" = -7,"wy" = -3,"ex" = 3,"ey" = -3,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 22,"sturn" = -23,"wturn" = -23,"eturn" = 29,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("onbelt") - return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) - - -/obj/item/rogueweapon/flail/sflail - name = "Steel flail" - desc = "A knightly flail made of worked steel, with a flanged head. An effective and brutal design." - force = 30 - icon_state = "flail" - smeltresult = /obj/item/ingot/steel - minstr = 4 - max_integrity = 500 - sellprice = 35 + recovery = 12 + misscost = 12 -/obj/item/rogueweapon/flail/peasant - name = "peasant flail" - desc = "What used to be a humble thresher by design, has become a deadly flail with extended range and punch. Favored by the peasantry militia or knight errants." - icon = 'icons/roguetown/weapons/64.dmi' - icon_state = "bigflail" - force = 30 - force_wielded = 40 - possible_item_intents = list(/datum/intent/flail/strike/long) - gripped_intents = list(/datum/intent/flail/strike/long, /datum/intent/flail/strike/smash/long) - bigboy = TRUE - gripsprite = TRUE - w_class = WEIGHT_CLASS_BULKY - wbalance = 0 - wlength = WLENGTH_LONG - slot_flags = ITEM_SLOT_BACK - max_integrity = 500 - smeltresult = /obj/item/ingot/steel - sellprice = 45 - minstr = 8 -/obj/item/rogueweapon/flail/peasant/getonmobprop(tag) - . = ..() - if(tag) - switch(tag) - if("gen") - return list("shrink" = 0.6,"sx" = -7,"sy" = 2,"nx" = 7,"ny" = 3,"wx" = -2,"wy" = 1,"ex" = 1,"ey" = 1,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -38,"sturn" = 37,"wturn" = 30,"eturn" = -30,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("wielded") - return list("shrink" = 0.6,"sx" = 5,"sy" = -3,"nx" = -5,"ny" = -2,"wx" = -5,"wy" = -1,"ex" = 3,"ey" = -2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 7,"sturn" = -7,"wturn" = 16,"eturn" = -22,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) - if("onbelt") - return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) +//................ Militia Flail ............... // +/obj/item/rogueweapon/flail/militia + name = "militia flail" + desc = "A lucky hit from such a flail can squash a cheap helmet along with the wearer's skull." + icon_state = "militiaflail" +//................ Wooden Flail ............... // Obsolete by the thresher? No smash so its bad /obj/item/rogueweapon/flail/towner - force = 15//starting gear for peasant militias + force = DAMAGE_WEAK_FLAIL possible_item_intents = list(/datum/intent/mace/strike/wood) name = "wooden flail" desc = "During peacetime these flails are used to thresh wheat. During wartime - to chase off marauders." icon_state = "peasantflail" - icon = 'icons/roguetown/weapons/32.dmi' - sharpness = IS_BLUNT - //dropshrink = 0.75 - wlength = WLENGTH_NORMAL - w_class = WEIGHT_CLASS_NORMAL - slot_flags = ITEM_SLOT_HIP - associated_skill = /datum/skill/combat/whipsflails smeltresult = /obj/item/rogueore/coal //is mostly wood - pickup_sound = 'sound/foley/equip/equip_armor_chain.ogg' - drop_sound = 'sound/foley/dropsound/wooden_drop.ogg' - equip_sound = 'sound/foley/equip/equip_armor_chain.ogg' - swingsound = BLUNTWOOSH_MED - can_parry = FALSE // You can't parry with this, it'd be awkward to tangle chains, use a shield max_integrity = 200 - throwforce = 5 - wdefense = 0 minstr = 5 sellprice = 10 -/obj/item/rogueweapon/flail/militia - force = 20 //same as the iron flails since is the same with different flavour - possible_item_intents = list(/datum/intent/flail/strike, /datum/intent/flail/strike/smash) - name = "militia flail" - desc = "A lucky hit from such a flail can squash a cheap helmet along with the wearer's skull." - icon_state = "militiaflail" - icon = 'icons/roguetown/weapons/32.dmi' - -/obj/item/rogueweapon/flail - force = 20 - possible_item_intents = list(/datum/intent/flail/strike, /datum/intent/flail/strike/smash) - name = "military flail" - desc = "A sturdy handle afixed to a cruel spiked ball with a harrowing metal chain." - icon_state = "iflail" - icon = 'icons/roguetown/weapons/32.dmi' - sharpness = IS_BLUNT - //dropshrink = 0.75 - wlength = WLENGTH_NORMAL - w_class = WEIGHT_CLASS_NORMAL - slot_flags = ITEM_SLOT_HIP - associated_skill = /datum/skill/combat/whipsflails - smeltresult = /obj/item/ingot/iron - pickup_sound = 'sound/foley/equip/equip_armor_chain.ogg' - drop_sound = 'sound/foley/dropsound/chain_drop.ogg' - equip_sound = 'sound/foley/equip/equip_armor_chain.ogg' - swingsound = BLUNTWOOSH_MED - can_parry = FALSE // You can't parry with this, it'd be awkward to tangle chains, use a shield - max_integrity = 300 - throwforce = 5 - wdefense = 0 - minstr = 6 - sellprice = 20 - -/datum/intent/flail/strike - name = "strike" - blade_class = BCLASS_BLUNT - attack_verb = list("strikes", "hits") - hitsound = list('sound/combat/hits/blunt/flailhit.ogg') - swingdelay = 5 - penfactor = 5 - icon_state = "instrike" - misscost = 5 - -/datum/intent/flail/strike/long - reach = 2 - penfactor = 10 - misscost = 10 - -/datum/intent/flail/strike/smash - name = "smash" - chargetime = 5 - no_early_release = TRUE - penfactor = 80 - recovery = 10 - damfactor = 1.2 - chargedloop = /datum/looping_sound/flailswing - keep_looping = TRUE - icon_state = "insmash" - blade_class = BCLASS_SMASH - attack_verb = list("smashes") - hitsound = list('sound/combat/hits/blunt/flailhit.ogg') - misscost = 5 - -/datum/intent/flail/strike/smash/long - reach = 2 - recovery = 20 - misscost = 20 - -/obj/item/rogueweapon/flail/getonmobprop(tag) - . = ..() - if(tag) - switch(tag) - if("gen") - return list("shrink" = 0.5,"sx" = -10,"sy" = -3,"nx" = 11,"ny" = -2,"wx" = -7,"wy" = -3,"ex" = 3,"ey" = -3,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 22,"sturn" = -23,"wturn" = -23,"eturn" = 29,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("onbelt") - return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) - +//................ Steel Flail ............... // /obj/item/rogueweapon/flail/sflail - name = "Steel flail" - desc = "A knightly flail made of worked steel, with a flanged head. An effective design that shows brutality." - force = 30 + force = DAMAGE_GOOD_FLAIL + name = "steel flail" + desc = "A knightly flail made of worked steel, with a flanged head. An effective and brutal design." icon_state = "flail" smeltresult = /obj/item/ingot/steel minstr = 4 max_integrity = 500 sellprice = 35 +//................ Peasant Flail ............... // A little confusing still /obj/item/rogueweapon/flail/peasant + force = DAMAGE_NORMAL_FLAIL + force_wielded = DAMAGE_GOOD_FLAIL name = "peasant flail" desc = "What used to be a humble thresher by design, has become a deadly flail with extended range and punch. Favored by the peasantry militia or knight errants." icon = 'icons/roguetown/weapons/64.dmi' icon_state = "bigflail" - force = 30 - force_wielded = 40 possible_item_intents = list(/datum/intent/flail/strike/long) gripped_intents = list(/datum/intent/flail/strike/long, /datum/intent/flail/strike/smash/long) bigboy = TRUE @@ -238,8 +121,7 @@ wlength = WLENGTH_LONG slot_flags = ITEM_SLOT_BACK max_integrity = 500 - smeltresult = /obj/item/ingot/steel - sellprice = 45 + sellprice = 20 minstr = 8 /obj/item/rogueweapon/flail/peasant/getonmobprop(tag) @@ -253,6 +135,9 @@ if("onbelt") return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) + + + /obj/item/rogueweapon/flail/towner force = 15//starting gear for peasant militias possible_item_intents = list(/datum/intent/mace/strike/wood) diff --git a/code/game/objects/items/rogueweapons/melee/knives.dm b/code/game/objects/items/rogueweapons/melee/knives.dm index 6e4b67a437..e6d6f660f7 100644 --- a/code/game/objects/items/rogueweapons/melee/knives.dm +++ b/code/game/objects/items/rogueweapons/melee/knives.dm @@ -1,42 +1,46 @@ +/* KNIVES - Low damage, bad parry, ok AP +==========================================================*/ - -/obj/item/rogueweapon/huntingknife - force = 12 +/obj/item/rogueweapon/knife + force = DAMAGE_KNIFE + throwforce = DAMAGE_KNIFE possible_item_intents = list(/datum/intent/dagger/cut, /datum/intent/dagger/thrust, /datum/intent/dagger/chop) slot_flags = ITEM_SLOT_HIP|ITEM_SLOT_MOUTH - name = "hunting knife" - desc = "Loyal companion to hunters and poachers, from humble bone to truest steel, disembowel your prey with glee." - icon_state = "huntingknife" icon = 'icons/roguetown/weapons/32.dmi' - item_state = "bone_dagger" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' gripsprite = FALSE - dropshrink = 0.75 - slot_flags = ITEM_SLOT_HIP + dropshrink = 0.8 thrown_bclass = BCLASS_CUT wlength = WLENGTH_SHORT w_class = WEIGHT_CLASS_SMALL parrysound = list('sound/combat/parry/bladed/bladedsmall (1).ogg','sound/combat/parry/bladed/bladedsmall (2).ogg','sound/combat/parry/bladed/bladedsmall (3).ogg') swingsound = list('sound/combat/wooshes/bladed/wooshmed (1).ogg','sound/combat/wooshes/bladed/wooshmed (2).ogg','sound/combat/wooshes/bladed/wooshmed (3).ogg') max_blade_int = 140 - max_integrity = 300 - swingsound = list('sound/combat/wooshes/bladed/wooshsmall (1).ogg','sound/combat/wooshes/bladed/wooshsmall (2).ogg','sound/combat/wooshes/bladed/wooshsmall (3).ogg') + max_integrity = INTEGRITY_STANDARD associated_skill = /datum/skill/combat/knives pickup_sound = 'sound/foley/equip/swordsmall2.ogg' equip_sound = 'sound/foley/dropsound/holster_sword.ogg' drop_sound = 'sound/foley/dropsound/blade_drop.ogg' - throwforce = 12 - wdefense = 3 - wbalance = 1 // All knives are swift, bonus to SPD + wdefense = MEDIOCHRE_PARRY + wbalance = HARD_TO_DODGE smeltresult = /obj/item/ingot/steel + sharpness = IS_SHARP sellprice = 30 - +/obj/item/rogueweapon/knife/getonmobprop(tag) + . = ..() + if(tag) + switch(tag) + if("gen") + return list("shrink" = 0.4,"sx" = -8,"sy" = 0,"nx" = 9,"ny" = 0,"wx" = -4,"wy" = 0,"ex" = 2,"ey" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("onbelt") + return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) /datum/intent/dagger clickcd = 8 +/*-----------\ +| Cut intent | small AP, fast +\-----------*/ /datum/intent/dagger/cut name = "cut" icon_state = "incut" @@ -47,8 +51,11 @@ penfactor = 10 chargetime = 0 swingdelay = 1 - clickcd = 10 + clickcd = 10 // between normal and fast +/*------------\ +| Stab intent | good AP, fast +\---------.--*/ /datum/intent/dagger/thrust name = "stab" icon_state = "instab" @@ -56,30 +63,26 @@ animname = "stab" blade_class = BCLASS_STAB hitsound = list('sound/combat/hits/bladed/genstab (1).ogg', 'sound/combat/hits/bladed/genstab (2).ogg', 'sound/combat/hits/bladed/genstab (3).ogg') - penfactor = 30 + penfactor = AP_DAGGER_STAB chargetime = 0 - clickcd = 8 + clickcd = CLICK_CD_FAST swingdelay = 1 +/*------------\ +| Pick intent | great AP. Not actually used anywhere. +\------------*/ /datum/intent/dagger/thrust/pick name = "thrust" attack_verb = list("stabs", "impales") hitsound = list('sound/combat/hits/bladed/genstab (1).ogg', 'sound/combat/hits/bladed/genstab (2).ogg', 'sound/combat/hits/bladed/genstab (3).ogg') - penfactor = 50 + penfactor = AP_DAGGER_PICK clickcd = CLICK_CD_MELEE swingdelay = 1 blade_class = BCLASS_PICK -/obj/item/rogueweapon/huntingknife/getonmobprop(tag) - . = ..() - if(tag) - switch(tag) - if("gen") - return list("shrink" = 0.4,"sx" = -8,"sy" = 0,"nx" = 9,"ny" = 0,"wx" = -4,"wy" = 0,"ex" = 2,"ey" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("onbelt") - return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) - - +/*------------\ +| Chop intent | small AP, bonus damage +\------------*/ /datum/intent/dagger/chop name = "chop" icon_state = "inchop" @@ -92,7 +95,28 @@ swingdelay = 1 clickcd = CLICK_CD_MELEE -/obj/item/rogueweapon/huntingknife/cleaver +/datum/intent/dagger/chop/cleaver + hitsound = list('sound/combat/hits/bladed/genchop (1).ogg', 'sound/combat/hits/bladed/genchop (2).ogg', 'sound/combat/hits/bladed/genchop (3).ogg') + damfactor = 2 + +//................ Hunting Knife ............... // +/obj/item/rogueweapon/knife/hunting + force = DAMAGE_KNIFE+1 + throwforce = DAMAGE_KNIFE + possible_item_intents = list(/datum/intent/dagger/cut, /datum/intent/dagger/thrust, /datum/intent/dagger/chop) + name = "hunting knife" + desc = "Loyal companion to hunters and poachers, from humble bone to truest steel, disembowel your prey with glee." + icon_state = "huntingknife" + max_blade_int = 140 + max_integrity = INTEGRITY_STRONG + wdefense = MEDIOCHRE_PARRY + wbalance = HARD_TO_DODGE + smeltresult = /obj/item/ingot/steel + sellprice = 30 + + +//................ Cleaver ............... // +/obj/item/rogueweapon/knife/cleaver name = "cleaver" desc = "A chef's tool turned armament, cleave off cumbersome flesh with rudimentary ease." lefthand_file = 'modular/Neu_Food/icons/food_lefthand.dmi' @@ -114,28 +138,22 @@ wbalance = 0 // Except this one, too huge and used to chop dropshrink = 0.9 -/obj/item/rogueweapon/huntingknife/cleaver/combat - name = "knife" +//................ Hack-Knife ............... // +/obj/item/rogueweapon/knife/cleaver/combat + name = "hack-knife" desc = "A short blade that even the weakest of hands can aspire to do harm with." - force = 10 + force = DAMAGE_KNIFE possible_item_intents = list(/datum/intent/dagger/cut, /datum/intent/dagger/chop) icon_state = "combatknife" - icon = 'icons/roguetown/weapons/32.dmi' - experimental_inhand = TRUE - experimental_onhip = TRUE - experimental_onback = TRUE - parrysound = list('sound/combat/parry/bladed/bladedmedium (1).ogg','sound/combat/parry/bladed/bladedmedium (2).ogg','sound/combat/parry/bladed/bladedmedium (3).ogg') - swingsound = list('sound/combat/wooshes/bladed/wooshmed (1).ogg','sound/combat/wooshes/bladed/wooshmed (2).ogg','sound/combat/wooshes/bladed/wooshmed (3).ogg') throwforce = 16 max_integrity = 180 slot_flags = ITEM_SLOT_HIP - thrown_bclass = BCLASS_CHOP w_class = WEIGHT_CLASS_NORMAL smeltresult = /obj/item/ingot/iron wbalance = 1 sellprice = 15 -/obj/item/rogueweapon/huntingknife/cleaver/combat/getonmobprop(tag) +/obj/item/rogueweapon/knife/cleaver/combat/getonmobprop(tag) . = ..() if(tag) switch(tag) @@ -144,69 +162,69 @@ if("onbelt") return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) - -/datum/intent/dagger/chop/cleaver - hitsound = list('sound/combat/hits/bladed/genchop (1).ogg', 'sound/combat/hits/bladed/genchop (2).ogg', 'sound/combat/hits/bladed/genchop (3).ogg') - penfactor = 30 - -/obj/item/rogueweapon/huntingknife/idagger - possible_item_intents = list(/datum/intent/dagger/thrust,/datum/intent/dagger/cut) +//................ Iron Dagger ............... // +/obj/item/rogueweapon/knife/dagger + force = DAMAGE_DAGGER + possible_item_intents = list(/datum/intent/dagger/thrust, /datum/intent/dagger/cut) //Stabbing is the first intent, for convenience. name = "iron dagger" desc = "Thin, sharp, pointed death." - force = 10 icon_state = "idagger" smeltresult = null sellprice = 15 -/obj/item/rogueweapon/huntingknife/idagger/steel +//................ Steel Dagger ............... // +/obj/item/rogueweapon/knife/dagger/steel + force = DAMAGE_DAGGER+2 name = "steel dagger" desc = "A dagger made of refined steel." - force = 14 icon_state = "sdagger" smeltresult = null + wdefense = AVERAGE_PARRY + wbalance = VERY_HARD_TO_DODGE + sellprice = 20 -/obj/item/rogueweapon/huntingknife/idagger/steel/special +/obj/item/rogueweapon/knife/dagger/steel/special icon_state = "sdaggeralt" desc = "A dagger of refined steel, and even more refined appearance." + sellprice = 25 -/obj/item/rogueweapon/huntingknife/idagger/steel/dirk +//................ Fanged dagger ............... // +/obj/item/rogueweapon/knife/dagger/steel/dirk name = "fanged dagger" desc = "A dagger modeled after the fang of an anthrax spider." - experimental_inhand = TRUE - experimental_onhip = TRUE - experimental_onback = TRUE icon_state = "spiderdagger" smeltresult = null -/obj/item/rogueweapon/huntingknife/idagger/silver +//................ Silver Dagger ............... // +/obj/item/rogueweapon/knife/dagger/silver name = "silver dagger" desc = "A dagger made of fine silver, the bane of the undead." - force = 13 // .9 of steel icon_state = "sildagger" smeltresult = null max_blade_int = 112 // .8 of steel max_integrity = 240 // .8 of steel sellprice = 45 - var/last_used = 0 + last_used = 0 + is_silver = TRUE -/obj/item/rogueweapon/huntingknife/idagger/silver/pickup(mob/user) +/obj/item/rogueweapon/knife/dagger/silver/pickup(mob/user) . = ..() var/mob/living/carbon/human/H = user if(ishuman(H)) if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/lesser)) to_chat(H, "I can't pick up the silver, it is my BANE!") H.Knockdown(20) - H.adjustFireLoss(60) - H.Paralyze(20) + H.Paralyze(1) + H.adjustFireLoss(40) H.fire_act(1,5) if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/)) var/datum/antagonist/vampirelord/V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) if(V_lord.vamplevel < 4 && !H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser)) to_chat(H, "I can't pick up the silver, it is my BANE!") H.Knockdown(10) - H.Paralyze(10) + H.Paralyze(1) -/obj/item/rogueweapon/huntingknife/idagger/silver/mob_can_equip(mob/living/M, mob/living/equipper, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE) +/obj/item/rogueweapon/knife/dagger/silver/mob_can_equip(mob/living/M, mob/living/equipper, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE) . = ..() if(ishuman(M)) var/datum/antagonist/vampirelord/V_lord = FALSE @@ -215,78 +233,22 @@ V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/lesser)) H.Knockdown(20) - H.adjustFireLoss(60) - H.Paralyze(20) + H.adjustFireLoss(40) H.fire_act(1,5) if(V_lord) if(V_lord.vamplevel < 4 && !H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser)) H.Knockdown(10) - H.Paralyze(10) - -/obj/item/rogueweapon/huntingknife/idagger/silver/funny_attack_effects(mob/living/target, mob/living/user = usr, nodmg) - if(world.time < src.last_used + 100) - to_chat(user, "The silver effect is on cooldown.") - return - - - . = ..() - if(ishuman(target)) - var/mob/living/carbon/human/s_user = user - var/mob/living/carbon/human/H = target - var/datum/antagonist/vampirelord/lesser/V = FALSE - if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/lesser)) - V = H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser) - var/datum/antagonist/vampirelord/V_lord = FALSE - if(H.mind.has_antag_datum(/datum/antagonist/vampirelord/)) - V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) - if(V) - if(V.disguised) - H.Stun(20) - H.visible_message("The silver weapon manifests the [H] curse!") - to_chat(H, "I'm hit by my BANE!") - H.adjustFireLoss(30) - H.Paralyze(20) - H.fire_act(1,4) - H.apply_status_effect(/datum/status_effect/debuff/silver_curse) - src.last_used = world.time - else - H.Stun(20) - to_chat(H, "I'm hit by my BANE!") - H.adjustFireLoss(30) - H.Paralyze(20) - H.fire_act(1,4) - H.apply_status_effect(/datum/status_effect/debuff/silver_curse) - src.last_used = world.time - if(V_lord) - if(V_lord.vamplevel < 4 && !V) - H.Stun(10) - to_chat(H, "I'm hit by my BANE!") - H.adjustFireLoss(25) - H.Paralyze(10) - H.fire_act(1,4) - src.last_used = world.time - if(V_lord.vamplevel == 4 && !V) - s_user.Stun(10) - s_user.Paralyze(10) - to_chat(s_user, " The silver weapon fails!") - H.visible_message(H, "This feeble metal can't hurt me, I HAVE TRANSCENDED!") - return - //I hate that i have to add a unique line of this code to EVERY silver weapon because they dont share a universal unique damage. -IP - //if is non carbon undead burn the fuck. - if((target.mob_biotypes & MOB_UNDEAD)) - target.adjustFireLoss(25) - return - -/obj/item/rogueweapon/huntingknife/idagger/steel/profane - name = "profane dagger" - desc = "A dagger made of cursed black steel. Whispers emanate from the gem on its hilt." +//................ Profane Dagger ............... // +/obj/item/rogueweapon/knife/dagger/steel/profane +// name = "profane dagger" + desc = "A profane dagger made of cursed black steel. Whispers emanate from the gem on its hilt." sellprice = 250 icon_state = "pdagger" smeltresult = null embedding = list("embed_chance" = 0) // Embedding the cursed dagger has the potential to cause duping issues. Keep it like this unless you want to do a lot of bug hunting. -/obj/item/rogueweapon/huntingknife/idagger/steel/profane/pickup(mob/living/M) +/obj/item/rogueweapon/knife/dagger/steel/profane/pickup(mob/living/M) . = ..() if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -299,7 +261,8 @@ "It's cold...", "Free us...please...", "Necra...deliver...us...") - H.visible_message("profane dagger whispers, \"[message]\"") +// H.visible_message("profane dagger whispers, \"[message]\"") + to_chat(M, ">profane dagger whispers,") else var/message = pick( "Why...", @@ -313,16 +276,17 @@ "Wait...don't I know you?", "I thought you were...my friend...", "How long have I been in here...") - H.visible_message("profane dagger whispers, \"[message]\"") +// H.visible_message("profane dagger whispers, \"[message]\"") + to_chat(M, ">profane dagger whispers,") -/obj/item/rogueweapon/huntingknife/idagger/steel/profane/pre_attack(mob/living/carbon/human/target, mob/living/user = usr, params) +/obj/item/rogueweapon/knife/dagger/steel/profane/pre_attack(mob/living/carbon/human/target, mob/living/user = usr, params) if(target.has_flaw(/datum/charflaw/hunted) || HAS_TRAIT(target, TRAIT_ZIZOID_HUNTED)) // Check to see if the dagger will do 20 damage or 14 force = 20 else force = 14 return FALSE -/obj/item/rogueweapon/huntingknife/idagger/steel/profane/afterattack(mob/living/carbon/human/target, mob/living/user = usr, proximity) +/obj/item/rogueweapon/knife/dagger/steel/profane/afterattack(mob/living/carbon/human/target, mob/living/user = usr, proximity) . = ..() if(target.stat == DEAD || (target.health < target.crit_threshold)) // Trigger soul steal if the target is either dead or in crit if(target.has_flaw(/datum/charflaw/hunted) || HAS_TRAIT(target, TRAIT_ZIZOID_HUNTED)) // The profane dagger only thirsts for those who are hunted, by flaw or by zizoid curse. @@ -333,7 +297,7 @@ user.adjust_triumphs(1) init_profane_soul(target, user) //If they are still in their body, send them to the dagger! -/obj/item/rogueweapon/huntingknife/idagger/steel/profane/proc/init_profane_soul(mob/living/carbon/human/target, mob/user) +/obj/item/rogueweapon/knife/dagger/steel/profane/proc/init_profane_soul(mob/living/carbon/human/target, mob/user) var/mob/dead/observer/profane/S = new /mob/dead/observer/profane(src) S.AddComponent(/datum/component/profaned, src) S.name = "soul of [target.real_name]" @@ -347,7 +311,7 @@ src.blade_int = src.max_blade_int // Stealing a soul successfully sharpens the blade. src.obj_integrity = src.max_integrity // And fixes the dagger. No blacksmith required! -/obj/item/rogueweapon/huntingknife/idagger/steel/profane/proc/get_profane_ghost(mob/living/carbon/human/target, mob/user) +/obj/item/rogueweapon/knife/dagger/steel/profane/proc/get_profane_ghost(mob/living/carbon/human/target, mob/user) var/mob/dead/observer/chosen_ghost var/mob/living/carbon/spirit/underworld_spirit = target.get_spirit() //Check if a soul has already gone to the underworld if(underworld_spirit) // If they are in the underworld, pull them back to the real world and make them a normal ghost. Necra can't save you now! @@ -362,7 +326,7 @@ qdel(target) // Get rid of that ghost! return TRUE -/obj/item/rogueweapon/huntingknife/idagger/steel/profane/proc/release_profane_souls(mob/user) // For ways to release the souls trapped within a profane dagger, such as a Necrite burial rite. Returns the number of freed souls. +/obj/item/rogueweapon/knife/dagger/steel/profane/proc/release_profane_souls(mob/user) // For ways to release the souls trapped within a profane dagger, such as a Necrite burial rite. Returns the number of freed souls. var/freed_souls = 0 for(var/mob/dead/observer/profane/A in src) // for every trapped soul in the dagger, whether they have left the game or not to_chat(A, "I have been freed from my vile prison, I await Necra's cold grasp. Salvation!") @@ -385,63 +349,42 @@ S.forceMove(container) -/obj/item/rogueweapon/huntingknife/stoneknife +//................ Stone Knife ............... // +/obj/item/rogueweapon/knife/stone + force = DAMAGE_KNIFE + throwforce = DAMAGE_KNIFE possible_item_intents = list(/datum/intent/dagger/cut,/datum/intent/dagger/chop) name = "stone knife" - desc = "A tool favored by the wood-elves, easy to make, useful for skinning the flesh of beast and man alike." + desc = "A tool favored by poor woodland inhabitants, easy to make, useful for skinning the flesh of beast and man alike." icon_state = "stone_knife" - force = 8 resistance_flags = FLAMMABLE // Weapon made mostly of wood - max_integrity = 15 - max_blade_int = 15 - wdefense = 1 + max_integrity = 28 + max_blade_int = 28 + wdefense = TERRIBLE_PARRY smeltresult = /obj/item/ash sellprice = 5 -/obj/item/rogueweapon/copperdagger - force = 8 + +//................ Villager Knife ............... // +/obj/item/rogueweapon/knife/villager possible_item_intents = list(/datum/intent/dagger/cut, /datum/intent/dagger/thrust, /datum/intent/dagger/chop) - slot_flags = ITEM_SLOT_HIP|ITEM_SLOT_MOUTH + name = "villager knife" + desc = "The loyal companion of simple peasants, for cutting hard bread and carving wood." + icon_state = "villagernife" + +/obj/item/rogueweapon/knife/copper + possible_item_intents = list(/datum/intent/dagger/cut, /datum/intent/dagger/thrust) name = "copper dagger" desc = "A dagger of an older design, the copper serves decent enough." icon_state = "cdagger" - icon = 'icons/roguetown/weapons/32.dmi' - item_state = "cdagger" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - gripsprite = FALSE - slot_flags = ITEM_SLOT_HIP - thrown_bclass = BCLASS_CUT - wlength = WLENGTH_SHORT - w_class = WEIGHT_CLASS_SMALL - parrysound = list('sound/combat/parry/bladed/bladedsmall (1).ogg','sound/combat/parry/bladed/bladedsmall (2).ogg','sound/combat/parry/bladed/bladedsmall (3).ogg') - swingsound = list('sound/combat/wooshes/bladed/wooshmed (1).ogg','sound/combat/wooshes/bladed/wooshmed (2).ogg','sound/combat/wooshes/bladed/wooshmed (3).ogg') max_blade_int = 50 max_integrity = 50 swingsound = list('sound/combat/wooshes/bladed/wooshsmall (1).ogg','sound/combat/wooshes/bladed/wooshsmall (2).ogg','sound/combat/wooshes/bladed/wooshsmall (3).ogg') associated_skill = /datum/skill/combat/knives pickup_sound = 'sound/foley/equip/swordsmall2.ogg' - throwforce = 12 - wdefense = 3 smeltresult = /obj/item/ash sellprice = 10 -/obj/item/rogueweapon/copperdagger/getonmobprop(tag) - . = ..() - if(tag) - switch(tag) - if("gen") - return list("shrink" = 0.4,"sx" = -8,"sy" = 0,"nx" = 9,"ny" = 0,"wx" = -4,"wy" = 0,"ex" = 2,"ey" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("onbelt") - return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) - -/obj/item/rogueweapon/huntingknife/villager - force = 8 - possible_item_intents = list(/datum/intent/dagger/cut, /datum/intent/dagger/thrust, /datum/intent/dagger/chop) - slot_flags = ITEM_SLOT_HIP|ITEM_SLOT_MOUTH - name = "villager knife" - desc = "The loyal companion of simple peasants, able to cut hard bread and carve wood. A versatile kitchen utensil and tool." - icon_state = "villagernife" /////////////////////////////////////////////////////////////////// diff --git a/code/game/objects/items/rogueweapons/melee/polearms.dm b/code/game/objects/items/rogueweapons/melee/polearms.dm index 4af4441d05..77305c2dc5 100644 --- a/code/game/objects/items/rogueweapons/melee/polearms.dm +++ b/code/game/objects/items/rogueweapons/melee/polearms.dm @@ -1,4 +1,45 @@ -/datum/intent/spear/thrust +/* POLEARMS +==========================================================*/ + +/obj/item/rogueweapon/polearm + throwforce = DAMAGE_STAFF + icon = 'icons/roguetown/weapons/64.dmi' + pixel_y = -16 + pixel_x = -16 + inhand_x_dimension = 64 + inhand_y_dimension = 64 + bigboy = TRUE + gripsprite = TRUE + wlength = WLENGTH_GREAT + w_class = WEIGHT_CLASS_BULKY + resistance_flags = FLAMMABLE // Weapon made mostly of wood + max_blade_int = 100 + max_integrity = INTEGRITY_STANDARD + minstr = 8 + smeltresult = /obj/item/ash + associated_skill = /datum/skill/combat/polearms + drop_sound = 'sound/foley/dropsound/wooden_drop.ogg' + parrysound = list('sound/combat/parry/wood/parrywood (1).ogg', 'sound/combat/parry/wood/parrywood (2).ogg', 'sound/combat/parry/wood/parrywood (3).ogg') + dropshrink = 0.8 + blade_dulling = DULLING_BASHCHOP + walking_stick = TRUE + wdefense = GREAT_PARRY + thrown_bclass = BCLASS_STAB + sellprice = 20 + +/obj/item/rogueweapon/polearm/getonmobprop(tag) + . = ..() + if(tag) + switch(tag) + if("gen") + return list("shrink" = 0.6,"sx" = -7,"sy" = 2,"nx" = 7,"ny" = 3,"wx" = -2,"wy" = 1,"ex" = 1,"ey" = 1,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -38,"sturn" = 37,"wturn" = 30,"eturn" = -30,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("wielded") + return list("shrink" = 0.6,"sx" = 5,"sy" = -3,"nx" = -5,"ny" = -2,"wx" = -5,"wy" = -1,"ex" = 3,"ey" = -2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 7,"sturn" = -7,"wturn" = 16,"eturn" = -22,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) + +/*--------------\ +| Thrust intent | +\--------------*/ +/datum/intent/polearm/thrust name = "thrust" blade_class = BCLASS_STAB attack_verb = list("stabs") @@ -8,21 +49,48 @@ chargetime = 1 warnie = "mobwarning" hitsound = list('sound/combat/hits/bladed/genstab (1).ogg', 'sound/combat/hits/bladed/genstab (2).ogg', 'sound/combat/hits/bladed/genstab (3).ogg') - penfactor = 50 + penfactor = AP_POLEARM_THRUST swingdelay = 1 misscost = 10 -/datum/intent/spear/bash +/datum/intent/polearm/thrust/poke + name = "poke" + penfactor = AP_SPEAR_POKE + chargetime = 0 + misscost = 7 + +/datum/intent/polearm/thrust/spear + penfactor = AP_POLEARM_THRUST-10 + +/*------------\ +| Bash intent | +\------------*/ +/datum/intent/polearm/bash name = "bash" blade_class = BCLASS_BLUNT icon_state = "inbash" attack_verb = list("bashes", "strikes") - penfactor = 10 - damfactor = 0.8 + hitsound = list('sound/combat/hits/blunt/woodblunt (1).ogg', 'sound/combat/hits/blunt/woodblunt (2).ogg') + penfactor = AP_POLEARM_BASH + damfactor = 0.8 //Bashing with a weapon not meant for it. swingdelay = 1 misscost = 5 -/datum/intent/spear/cut +/*-------------\ +| Swing intent | +\-------------*/ +/datum/intent/polearm/bash/swing//AYAYAYAYA BONK BONK BONK + name = "swing" + attack_verb = list("bashes", "strikes", "swings") + penfactor = AP_CLUB_STRIKE //30 combined AP, for reference an iron maille is 50 armor. + damfactor = 1 //Full-power, charged 2-range swings. The gimmick intent of quarterstaffs. + reach = 2 + chargetime = 1 + +/*-----------\ +| Cut intent | +\-----------*/ +/datum/intent/polearm/cut name = "cut" blade_class = BCLASS_CUT attack_verb = list("cuts", "slashes") @@ -33,35 +101,42 @@ swingdelay = 1 misscost = 10 -/obj/item/rogueweapon/woodstaff - force = 10 - force_wielded = 15 - possible_item_intents = list(SPEAR_BASH) - gripped_intents = list(SPEAR_BASH,/datum/intent/mace/smash/wood) +/*------------\ +| Chop intent | +\------------*/ +/datum/intent/polearm/chop + name = "chop" + icon_state = "inchop" + attack_verb = list("chops", "hacks") + animname = "chop" + blade_class = BCLASS_CHOP + hitsound = list('sound/combat/hits/bladed/genchop (1).ogg', 'sound/combat/hits/bladed/genchop (2).ogg', 'sound/combat/hits/bladed/genchop (3).ogg') + penfactor = AP_POLEARM_CHOP + chargetime = 1.5 + damfactor = 1.2 + swingdelay = 2 + misscost = 20 + warnie = "mobwarning" + + +//................ Wooden Staff ............... // +/obj/item/rogueweapon/polearm/woodstaff + force = DAMAGE_STAFF + force_wielded = DAMAGE_STAFF_WIELD-3 //20 damage, at the threshold where 9 strenght makes it significantly worse. + possible_item_intents = list(POLEARM_BASH) + gripped_intents = list(POLEARM_BASH, /datum/intent/mace/smash/wood) name = "wooden staff" desc = "The ultimate tool of travel for weary wanderers, support your weight or crack the heads that don't support you." icon_state = "woodstaff" - icon = 'icons/roguetown/weapons/64.dmi' wlength = WLENGTH_LONG - w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK - blade_dulling = DULLING_BASHCHOP sharpness = IS_BLUNT - resistance_flags = FLAMMABLE // Weapon made mostly of wood - walking_stick = TRUE - pixel_y = -16 - pixel_x = -16 - inhand_x_dimension = 64 - inhand_y_dimension = 64 max_integrity = 200 - wdefense = 5 - bigboy = TRUE - gripsprite = TRUE - associated_skill = /datum/skill/combat/polearms - drop_sound = 'sound/foley/dropsound/wooden_drop.ogg' + wdefense = ULTMATE_PARRY + minstr = 6 sellprice = 5 -/obj/item/rogueweapon/woodstaff/getonmobprop(tag) +/obj/item/rogueweapon/polearm/woodstaff/getonmobprop(tag) . = ..() if(tag) switch(tag) @@ -72,75 +147,63 @@ if("onbelt") return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) +//................ Quarterstaff ............... //! +/obj/item/rogueweapon/polearm/woodstaff/quarterstaff + force_wielded = DAMAGE_STAFF_WIELD + gripped_intents = list(POLEARM_SWING, POLEARM_BASH, /datum/intent/mace/smash/wood) + name = "wooden quarterstaff" + desc = "A staff that makes any journey easier. Durable and swift, capable of bludgeoning stray volves and ruffians alike." + icon_state = "quarterstaff" + max_integrity = INTEGRITY_STRONG + sellprice = 10 + + +//................ Iron-shod Staff ............... // +/obj/item/rogueweapon/polearm/woodstaff/quarterstaff/iron + force_wielded = DAMAGE_STAFF_WIELD+1 + name = "iron quarterstaff" + desc = "A perfect tool for bounty hunters who prefer their prisoners broken and bruised but not slain. This reinforced staff is capable of clubbing even an armed opponent into submission with some carefully placed strikes." + icon_state = "ironstaff" + minstr = 7 + max_integrity = INTEGRITY_STRONG + +/obj/item/rogueweapon/polearm/woodstaff/quarterstaff/steel + force_wielded = DAMAGE_STAFF_WIELD+2 //25 damage. Still a bit gimmicky of a weapon. + name = "steel quarterstaff" + desc = "An unusual sight, a knightly combat staff made out of worked steel and reinforced wood. It is a heavy and powerful weapon, more than capable of beating the living daylights out of any brigand." + icon_state = "steelstaff" + minstr = 7 + max_integrity = INTEGRITY_STRONGEST -/obj/item/rogueweapon/woodstaff/aries +//................ Staff of the Testimonium ............... // +/obj/item/rogueweapon/polearm/woodstaff/aries + force_wielded = DAMAGE_STAFF_WIELD name = "staff of the testimonium" desc = "A symbolic staff, granted to graduating acolyte's who have achieved and bear witnessed to the miracles of the Gods." - force = 15 - force_wielded = 25 - possible_item_intents = list(SPEAR_BASH) - gripped_intents = list(SPEAR_BASH,/datum/intent/mace/smash/wood) icon_state = "aries" - icon = 'icons/roguetown/weapons/64.dmi' - wlength = WLENGTH_LONG - w_class = WEIGHT_CLASS_BULKY - blade_dulling = DULLING_BASHCHOP resistance_flags = FIRE_PROOF // Leniency for unique items - pixel_y = -16 - pixel_x = -16 - inhand_x_dimension = 64 - inhand_y_dimension = 64 dropshrink = 0.6 - wdefense = 5 - bigboy = TRUE - gripsprite = TRUE - associated_skill = /datum/skill/combat/polearms sellprice = 100 -/obj/item/rogueweapon/woodstaff/aries/getonmobprop(tag) - . = ..() - if(tag) - switch(tag) - if("gen") - return list("shrink" = 0.6,"sx" = -6,"sy" = -1,"nx" = 8,"ny" = 0,"wx" = -4,"wy" = 0,"ex" = 2,"ey" = 1,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -38,"sturn" = 37,"wturn" = 32,"eturn" = -23,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("wielded") - return list("shrink" = 0.6,"sx" = 4,"sy" = -2,"nx" = -3,"ny" = -2,"wx" = -5,"wy" = -1,"ex" = 3,"ey" = -2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 7,"sturn" = -7,"wturn" = 16,"eturn" = -22,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) - -/obj/item/rogueweapon/spear - force = 15 - force_wielded = 25 - possible_item_intents = list(SPEAR_THRUST, SPEAR_BASH) //bash is for nonlethal takedowns, only targets limbs - gripped_intents = list(SPEAR_THRUST, SPEAR_CUT, SPEAR_BASH) +//................ Spear ............... // +/obj/item/rogueweapon/polearm/spear + force = DAMAGE_SPEAR + force_wielded = DAMAGE_SPEAR_WIELD + throwforce = DAMAGE_SPEAR_WIELD + possible_item_intents = list(SPEAR_POKE, POLEARM_BASH) + gripped_intents = list(SPEAR_THRUST, SPEAR_CUT, SPEAR_POKE, POLEARM_BASH) name = "spear" desc = "The humble spear, use the pointy end." icon_state = "spear" - icon = 'icons/roguetown/weapons/64.dmi' - pixel_y = -16 - pixel_x = -16 - inhand_x_dimension = 64 - inhand_y_dimension = 64 - bigboy = TRUE - gripsprite = TRUE - wlength = WLENGTH_GREAT - w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK - resistance_flags = FLAMMABLE // Weapon made mostly of wood max_blade_int = 100 - max_integrity = 300 - minstr = 8 smeltresult = /obj/item/ingot/iron - associated_skill = /datum/skill/combat/polearms - drop_sound = 'sound/foley/dropsound/blade_drop.ogg' - dropshrink = 0.75 - blade_dulling = DULLING_BASHCHOP - walking_stick = TRUE - wdefense = 4 + dropshrink = 0.8 thrown_bclass = BCLASS_STAB - throwforce = 25 sellprice = 20 -/obj/item/rogueweapon/spear/getonmobprop(tag) +/obj/item/rogueweapon/polearm/spear/getonmobprop(tag) . = ..() if(tag) switch(tag) @@ -149,121 +212,85 @@ if("wielded") return list("shrink" = 0.6,"sx" = 5,"sy" = -3,"nx" = -5,"ny" = -2,"wx" = -5,"wy" = -1,"ex" = 3,"ey" = -2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 7,"sturn" = -7,"wturn" = 16,"eturn" = -22,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) -/obj/item/rogueweapon/spear/billhook +//................ Billhook ............... // +/obj/item/rogueweapon/polearm/spear/billhook + force_wielded = DAMAGE_SPEAR_WIELD+3 //28 damage VS the halberd's 35. Just a little extra something, in addition to the proper polearm thrust. + throwforce = DAMAGE_SPEAR //Unbalanced for throwing. name = "billhook" desc = "A polearm with a curved krag, a Valorian design for dismounting mounted warriors and to strike down monstrous beasts." icon_state = "billhook" - force = 12 - force_wielded = 30 - possible_item_intents = list(SPEAR_THRUST, SPEAR_BASH) //bash is for nonlethal takedowns, only targets limbs - gripped_intents = list(SPEAR_THRUST, SPEAR_CUT, /datum/intent/axe/chop, SPEAR_BASH) - pixel_y = -16 - pixel_x = -16 - inhand_x_dimension = 64 - inhand_y_dimension = 64 - bigboy = TRUE - gripsprite = TRUE + possible_item_intents = list(POLEARM_THRUST, POLEARM_BASH) + gripped_intents = list(POLEARM_THRUST, SPEAR_CUT, /datum/intent/polearm/chop, POLEARM_BASH) resistance_flags = FIRE_PROOF - wlength = WLENGTH_GREAT - w_class = WEIGHT_CLASS_BULKY - minstr = 8 + drop_sound = 'sound/foley/dropsound/blade_drop.ogg' max_blade_int = 100 - max_integrity = 450 smeltresult = /obj/item/ingot/steel - associated_skill = /datum/skill/combat/polearms - dropshrink = 0.75 - blade_dulling = DULLING_BASHCHOP - walking_stick = TRUE - wdefense = 5 - wbalance = -1 + max_integrity = INTEGRITY_STRONG + wdefense = ULTMATE_PARRY + wbalance = EASY_TO_DODGE sellprice = 60 -/obj/item/rogueweapon/spear/stone - force = 10 - force_wielded = 15 +//................ Stone Short Spear ............... // - Short spears got shorter reach and worse wield effect, made for one handed and throwing +/obj/item/rogueweapon/polearm/spear/stone + force = DAMAGE_SPEAR + force_wielded = DAMAGE_SPEAR+2 + throwforce = DAMAGE_SPEAR name = "simple spear" desc = "With this weapon, the tribes of humenity became the chosen people of the Forgotten God." icon_state = "stonespear" - pixel_y = -16 - pixel_x = -16 - inhand_x_dimension = 64 - inhand_y_dimension = 64 - bigboy = TRUE - gripsprite = TRUE - wlength = WLENGTH_GREAT - slot_flags = ITEM_SLOT_BACK minstr = 6 max_blade_int = 50 - smeltresult = null - associated_skill = /datum/skill/combat/polearms - dropshrink = 0.6 - blade_dulling = DULLING_BASHCHOP - walking_stick = TRUE - wdefense = 4 - max_integrity = 120 + smeltresult = /obj/item/ash + dropshrink = 0.7 + wlength = WLENGTH_LONG + wdefense = AVERAGE_PARRY + max_integrity = INTEGRITY_WORST sellprice = 5 -// Halberd Class +//................ Javelin ............... // +/obj/item/rogueweapon/polearm/spear/stone/copper + throwforce = DAMAGE_SPEAR_WIELD + name = "javelin" + desc = "Made for throwing, long out of favor and using inferior metals, it still can kill when the aim is true." + icon_state = "cspear" + max_blade_int = 70 + max_integrity = INTEGRITY_POOR + minstr = 7 + smeltresult = /obj/item/ingot/copper + dropshrink = 0.9 + sellprice = 15 -/datum/intent/spear/halberd/chop - name = "chop" - icon_state = "inchop" - attack_verb = list("chops", "hacks") - animname = "chop" - blade_class = BCLASS_CHOP - hitsound = list('sound/combat/hits/bladed/genchop (1).ogg', 'sound/combat/hits/bladed/genchop (2).ogg', 'sound/combat/hits/bladed/genchop (3).ogg') - penfactor = 25 - chargetime = 1.5 - damfactor = 1.2 - swingdelay = 2 - misscost = 20 - warnie = "mobwarning" +/obj/item/rogueweapon/polearm/spear/stone/copper/getonmobprop(tag) + . = ..() + if(tag) + switch(tag) + if("gen") + return list("shrink" = 0.7,"sx" = -7,"sy" = 2,"nx" = 7,"ny" = 3,"wx" = -2,"wy" = 1,"ex" = 1,"ey" = 1,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -38,"sturn" = 37,"wturn" = 30,"eturn" = -30,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("wielded") + return list("shrink" = 0.7,"sx" = 5,"sy" = -3,"nx" = -5,"ny" = -2,"wx" = -5,"wy" = -1,"ex" = 3,"ey" = -2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 7,"sturn" = -7,"wturn" = 16,"eturn" = -22,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) -/datum/intent/spear/halberd/cut - name = "cut" - blade_class = BCLASS_CUT - attack_verb = list("cuts", "slashes") - icon_state = "incut" - damfactor = 0.8 - hitsound = list('sound/combat/hits/bladed/genslash (1).ogg', 'sound/combat/hits/bladed/genslash (2).ogg', 'sound/combat/hits/bladed/genslash (3).ogg') - reach = 2 - swingdelay = 1 - misscost = 10 -/obj/item/rogueweapon/halberd - force = 15 - force_wielded = 35 - slowdown = 1 - possible_item_intents = list(SPEAR_THRUST, SPEAR_BASH) //bash is for nonlethal takedowns, only targets limbs - gripped_intents = list(SPEAR_THRUST, SPEAR_CUT, /datum/intent/spear/halberd/chop, SPEAR_BASH) +//................ Halberd ............... // +/obj/item/rogueweapon/polearm/halberd + force = DAMAGE_SPEAR + force_wielded = DAMAGE_HALBERD_WIELD + possible_item_intents = list(POLEARM_THRUST, POLEARM_BASH) + gripped_intents = list(POLEARM_THRUST, SPEAR_CUT, /datum/intent/polearm/chop, POLEARM_BASH) name = "halberd" desc = "A reinforced polearm for clobbering ordained with a crested ax head, pick and sharp point, a royal arm for defence and aggression." icon_state = "halberd" - icon = 'icons/roguetown/weapons/64.dmi' - pixel_y = -16 - pixel_x = -16 - inhand_x_dimension = 64 - inhand_y_dimension = 64 - bigboy = TRUE - gripsprite = TRUE - wlength = WLENGTH_GREAT - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - minstr = 8 + slot_flags = FALSE max_blade_int = 300 - max_integrity = 500 + max_integrity = INTEGRITY_STRONGEST drop_sound = 'sound/foley/dropsound/blade_drop.ogg' smeltresult = /obj/item/ingot/steel - associated_skill = /datum/skill/combat/polearms - dropshrink = 0.75 - blade_dulling = DULLING_BASHCHOP - walking_stick = TRUE - wdefense = 5 - wbalance = -1 + dropshrink = 0.8 + wdefense = ULTMATE_PARRY + wbalance = EASY_TO_DODGE sellprice = 90 -/obj/item/rogueweapon/halberd/getonmobprop(tag) +/obj/item/rogueweapon/polearm/halberd/getonmobprop(tag) . = ..() if(tag) switch(tag) @@ -274,51 +301,46 @@ if("onbelt") return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) -/obj/item/rogueweapon/halberd/bardiche + +//................ Bardiche ............... // +/obj/item/rogueweapon/polearm/halberd/bardiche + force = DAMAGE_AXE + force_wielded = DAMAGE_HEAVYAXE_WIELD + possible_item_intents = list(/datum/intent/axe/cut) + gripped_intents = list(/datum/intent/axe/cut,/datum/intent/axe/chop/great, /datum/intent/axe/thrust) name = "bardiche" desc = "A grand axe of northernly design, renowned for easily chopping off limbs clean with brutal strength." icon_state = "bardiche" - force = 12 - force_wielded = 25 - slowdown = 1 - resistance_flags = FLAMMABLE // Weapon made mostly of wood smeltresult = /obj/item/ingot/iron + swingsound = BLADEWOOSH_MED + wbalance = VERY_EASY_TO_DODGE max_blade_int = 200 - max_integrity = 300 - sellprice = 40 - -/obj/item/rogueweapon/eaglebeak - force = 15 - force_wielded = 30 - slowdown = 1 - possible_item_intents = list(SPEAR_BASH, SPEAR_THRUST) //bash is for nonlethal takedowns, only targets limbs - gripped_intents = list(SPEAR_BASH, SPEAR_THRUST, /datum/intent/mace/heavy/smash) + max_integrity = INTEGRITY_STRONG + dropshrink = 0.95 + minstr = 10 + wdefense = AVERAGE_PARRY + axe_cut = 10 + sellprice = 30 + +//................ Eagle Beak ............... // +/obj/item/rogueweapon/polearm/eaglebeak + force = DAMAGE_SPEAR + force_wielded = DAMAGE_SPEAR_WIELD+3 //Same as billhook. Worse damage than a dedicated two-handed mace, added flexibility. + possible_item_intents = list(POLEARM_BASH, /datum/intent/polearm/chop) + gripped_intents = list(POLEARM_BASH, POLEARM_THRUST, /datum/intent/mace/smash/heavy,/datum/intent/polearm/chop) name = "eagle's beak" desc = "A reinforced pole affixed with an ornate steel eagle's head, of which it's beak is intended to pierce with great harm." icon_state = "eaglebeak" - icon = 'icons/roguetown/weapons/64.dmi' - pixel_y = -16 - pixel_x = -16 - inhand_x_dimension = 64 - inhand_y_dimension = 64 - bigboy = TRUE - gripsprite = TRUE - wlength = WLENGTH_GREAT - w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK minstr = 11 smeltresult = /obj/item/ingot/steel - associated_skill = /datum/skill/combat/polearms max_blade_int = 300 - max_integrity = 500 - dropshrink = 0.75 - blade_dulling = DULLING_BASHCHOP - walking_stick = TRUE - wdefense = 5 - wbalance = -1 + max_integrity = INTEGRITY_STRONGEST + dropshrink = 0.8 + wbalance = EASY_TO_DODGE sellprice = 60 -/obj/item/rogueweapon/eaglebeak/getonmobprop(tag) +/obj/item/rogueweapon/polearm/eaglebeak/getonmobprop(tag) . = ..() if(tag) switch(tag) @@ -329,149 +351,42 @@ if("onbelt") return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) - -/obj/item/rogueweapon/eaglebeak/lucerne +//................ Lucerne Hammer ............... // +/obj/item/rogueweapon/polearm/eaglebeak/lucerne name = "lucerne" desc = "A polehammer of simple iron, fracture bone and dissent with simple brute force." - force = 12 - force_wielded = 25 - slowdown = 1 icon_state = "polehammer" smeltresult = /obj/item/ingot/iron - max_blade_int = 300 - max_integrity = 300 + max_integrity = INTEGRITY_STRONG sellprice = 40 + wbalance = VERY_EASY_TO_DODGE + wdefense = AVERAGE_PARRY -// Copper Spear - -/obj/item/rogueweapon/copperspear - force = 10 - force_wielded = 15 - possible_item_intents = list(SPEAR_THRUST, SPEAR_BASH) //bash is for nonlethal takedowns, only targets limbs - gripped_intents = list(SPEAR_THRUST, SPEAR_CUT, SPEAR_BASH) - name = "copper spear" - desc = "A spear of simple design, outdated and cheaply made but still serves its purpose." - icon_state = "cspear" - icon = 'icons/roguetown/weapons/64.dmi' - pixel_y = -16 - pixel_x = -16 - inhand_x_dimension = 64 - inhand_y_dimension = 64 - bigboy = TRUE - gripsprite = TRUE - wlength = WLENGTH_GREAT - w_class = WEIGHT_CLASS_BULKY - resistance_flags = FLAMMABLE // Weapon made mostly of wood - slot_flags = ITEM_SLOT_BACK - max_blade_int = 70 - max_integrity = 130 - minstr = 7 - smeltresult = /obj/item/ingot/copper - associated_skill = /datum/skill/combat/polearms - drop_sound = 'sound/foley/dropsound/blade_drop.ogg' - dropshrink = 0.9 - blade_dulling = DULLING_BASHCHOP - walking_stick = TRUE - wdefense = 4 - thrown_bclass = BCLASS_STAB - throwforce = 20 - sellprice = 15 - -/obj/item/rogueweapon/copperspear/getonmobprop(tag) - . = ..() - if(tag) - switch(tag) - if("gen") - return list("shrink" = 0.7,"sx" = -7,"sy" = 2,"nx" = 7,"ny" = 3,"wx" = -2,"wy" = 1,"ex" = 1,"ey" = 1,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -38,"sturn" = 37,"wturn" = 30,"eturn" = -30,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("wielded") - return list("shrink" = 0.7,"sx" = 5,"sy" = -3,"nx" = -5,"ny" = -2,"wx" = -5,"wy" = -1,"ex" = 3,"ey" = -2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 7,"sturn" = -7,"wturn" = 16,"eturn" = -22,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) - -/obj/item/rogueweapon/spear/hoplite - force = 20 // Unique weapon from rare job, less unwieldy if used with one hand - force_wielded = 25 +//................ Hoplite Spear ............... // +/obj/item/rogueweapon/polearm/spear/hoplite + force = DAMAGE_SPEARPLUS name = "ancient spear" desc = "A humble spear with a bronze head, a rare survivor from the battles long past that nearly destroyed Grimoria." icon_state = "bronzespear" max_blade_int = 300 - max_integrity = 300 - smeltresult = null // No bronze ingots yet, unfortunately + max_integrity = INTEGRITY_STRONG + smeltresult = /obj/item/ash sellprice = 120 // A noble collector would love to get his/her hands on one of these spears -/obj/item/rogueweapon/spear/hoplite/winged // Winged version has +1 weapon defence and sells for a bit more, but is identical otherwise +/obj/item/rogueweapon/polearm/spear/hoplite/winged // Winged version has +1 weapon defence and sells for a bit more, but is identical otherwise name = "ancient winged spear" desc = "A spear with a winged bronze head, a rare survivor from the battles long past that nearly destroyed Grimoria." icon_state = "bronzespear_winged" - wdefense = 5 + wdefense = ULTMATE_PARRY sellprice = 150 // A noble collector would love to get his/her hands on one of these spears -////STAFFS! - -/obj/item/rogueweapon/woodstaff/quarterstaff - force = 10 - force_wielded = 15 - possible_item_intents = list(SPEAR_BASH) - gripped_intents = list(SPEAR_BASH,/datum/intent/mace/smash/wood, /datum/intent/spear/bash/swing) - name = "wooden quarterstaff" - desc = "A staff that makes any journey easier. Durable and swift, capable of bludgeoning stray volves and ruffians alike." - icon_state = "quarterstaff" - icon = 'icons/roguetown/weapons/64.dmi' - wlength = WLENGTH_LONG - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - blade_dulling = DULLING_BASHCHOP - sharpness = IS_BLUNT - resistance_flags = FLAMMABLE // Weapon made mostly of wood - walking_stick = TRUE - pixel_y = -16 - pixel_x = -16 - inhand_x_dimension = 64 - inhand_y_dimension = 64 - max_integrity = 250//carpenter work - wdefense = 5 - bigboy = TRUE - gripsprite = TRUE - associated_skill = /datum/skill/combat/polearms - drop_sound = 'sound/foley/dropsound/wooden_drop.ogg' - sellprice = 10 - -/datum/intent/spear/bash/swing//AYAYAYAYA BONK BONK BONK - name = "swing" - blade_class = BCLASS_BLUNT - icon_state = "inbash" - attack_verb = list("bashes", "strikes", "swings") - penfactor = 10 - damfactor = 0.8 - reach = 2 - chargetime = 1 - swingdelay = 1 - misscost = 5 -/obj/item/rogueweapon/woodstaff/quarterstaff/iron - force = 15 - force_wielded = 20 - possible_item_intents = list(SPEAR_BASH) - gripped_intents = list(SPEAR_BASH,/datum/intent/mace/smash/wood, /datum/intent/spear/bash/swing) - name = "iron quarterstaff" - desc = "A perfect tool for bounty hunters who prefer their prisoners broken and bruised but not slain. This reinforced staff is capable of clubbing even an armed opponent into submission with some carefully placed strikes." - icon_state = "ironstaff" - max_integrity = 350//iron tier - minstr = 8//meant to be used by average warriors -/obj/item/rogueweapon/woodstaff/quarterstaff/steel - force = 15 - force_wielded = 30 - possible_item_intents = list(SPEAR_BASH) - gripped_intents = list(SPEAR_BASH,/datum/intent/mace/smash/wood, /datum/intent/spear/bash/swing) - name = "steel quarterstaff" - desc = "An unusual sight, a knightly combat staff made out of worked steel and reinforced wood. It is a heavy and powerful weapon, more than capable of beating the living daylights out of any brigand." - icon_state = "steelstaff" - minstr = 10//very heavy - max_integrity = 450//steel tier //scythe /obj/item/rogueweapon/sickle/scythe - force = 10 - force_wielded = 20 + force = 12 + force_wielded = 25 //The only intent on this thing has a 0.8 damage factor, so 20 damage in practice. Worth noting the intent has no AP attached either. possible_item_intents = list(SPEAR_CUT) //truly just a long knife gripped_intents = list(SPEAR_CUT) name = "scythe" diff --git a/code/game/objects/items/rogueweapons/melee/special.dm b/code/game/objects/items/rogueweapons/melee/special.dm index fa7e4343e7..c907db1715 100644 --- a/code/game/objects/items/rogueweapons/melee/special.dm +++ b/code/game/objects/items/rogueweapons/melee/special.dm @@ -61,7 +61,7 @@ if(ishuman(user)) var/mob/living/carbon/human/HU = user - if((HU.job != "King") && (HU.job != "Queen")) + if((HU.job != "King") && (HU.job != "Consort") && (HU.job != "Hand")) to_chat(user, "The rod doesn't obey me.") return @@ -74,6 +74,8 @@ if(H.anti_magic_check()) return + if(!(H.job in GLOB.rod_jobs)) + if(!(H in SStreasury.bank_accounts)) return diff --git a/code/game/objects/items/rogueweapons/melee/swords.dm b/code/game/objects/items/rogueweapons/melee/swords.dm index f02b546a4d..9afa121593 100644 --- a/code/game/objects/items/rogueweapons/melee/swords.dm +++ b/code/game/objects/items/rogueweapons/melee/swords.dm @@ -1,48 +1,33 @@ +/* SWORDS +==========================================================*/ + // Sword base /obj/item/rogueweapon/sword + force = DAMAGE_SWORD + force_wielded = DAMAGE_SWORD_WIELD + throwforce = 10 slot_flags = ITEM_SLOT_HIP - force = 20 - force_wielded = 25 - possible_item_intents = list(/datum/intent/sword/cut, /datum/intent/sword/thrust) + possible_item_intents = list(/datum/intent/sword/cut, /datum/intent/sword/thrust, /datum/intent/sword/strike) //No reason why an arming sword can't pommel strike. gripped_intents = list(/datum/intent/sword/cut, /datum/intent/sword/thrust) name = "sword" desc = "A trustworthy blade design, the first dedicated tool of war since before the age of history." icon_state = "sword1" - icon = 'icons/roguetown/weapons/32.dmi' - lefthand_file = 'icons/mob/inhands/weapons/rogue_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/rogue_righthand.dmi' parrysound = "sword" swingsound = BLADEWOOSH_MED associated_skill = /datum/skill/combat/swords max_blade_int = 300 - max_integrity = 500 + max_integrity = INTEGRITY_STRONGEST wlength = WLENGTH_NORMAL w_class = WEIGHT_CLASS_BULKY pickup_sound = "unsheathe_sword" equip_sound = 'sound/foley/dropsound/holster_sword.ogg' drop_sound = 'sound/foley/dropsound/blade_drop.ogg' flags_1 = CONDUCT_1 - throwforce = 10 thrown_bclass = BCLASS_CUT - //dropshrink = 0.75 smeltresult = /obj/item/ingot/steel minstr = 7 sellprice = 30 - wdefense = 4 - -/obj/item/rogueweapon/sword/Initialize() - . = ..() - if(icon_state == "sword1") - icon_state = "sword[rand(1,3)]" - -/obj/item/rogueweapon/sword/decorated - icon_state = "decsword1" - sellprice = 140 - -/obj/item/rogueweapon/sword/decorated/Initialize() - . = ..() - if(icon_state == "decsword1") - icon_state = "decsword[rand(1,3)]" + wdefense = GREAT_PARRY /obj/item/rogueweapon/sword/getonmobprop(tag) . = ..() @@ -55,16 +40,73 @@ if("onbelt") return list("shrink" = 0.5,"sx" = -4,"sy" = -6,"nx" = 5,"ny" = -6,"wx" = 0,"wy" = -6,"ex" = -1,"ey" = -6,"nturn" = 100,"sturn" = 156,"wturn" = 90,"eturn" = 180,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) - +/*-----------\ +| Cut intent | +\-----------*/ /datum/intent/sword/cut - name = "strike" + name = "cut" icon_state = "incut" attack_verb = list("cuts", "slashes") animname = "cut" blade_class = BCLASS_CUT hitsound = list('sound/combat/hits/bladed/genslash (1).ogg', 'sound/combat/hits/bladed/genslash (2).ogg', 'sound/combat/hits/bladed/genslash (3).ogg') - misscost = 5 + misscost = 4 + +/datum/intent/sword/cut/sabre //Don't give this to anything with longsword damage or it'll start cutting through iron chainmail. Save that for the katanas /s + penfactor = AP_SABRE_CUT //23 combined AP, enough that it actually slices through gambesons and leather with little to medium impediment. Not a multiple of 5, heresy, I know. + + +/datum/intent/sword/cut/zwei + name = "cut" + damfactor = 0.8 + reach = 1 + swingdelay = 1 + +/datum/intent/sword/cut/rapier + damfactor = 0.8 + clickcd = 10 //Some saving grace, still don't know why you'd choose this. + +/datum/intent/sword/cut/short + clickcd = 10 + damfactor = 1 + +/*------------\ +| Chop intent | +\------------*/ +/datum/intent/sword/chop + name = "chop" + icon_state = "inchop" + attack_verb = list("chops", "hacks") + animname = "chop" + blade_class = BCLASS_CHOP + hitsound = list('sound/combat/hits/bladed/genchop (1).ogg', 'sound/combat/hits/bladed/genchop (2).ogg', 'sound/combat/hits/bladed/genchop (3).ogg') + penfactor = AP_SWORD_CHOP + damfactor = 1.1 + swingdelay = 0 //swingdelay 1 was too punishing here for very little benefit. Already balanced out by inferior crits, higher miss cost and opportunity cost compared to other intents. + misscost = 8 +/datum/intent/sword/chop/sabre + penfactor = AP_SABRE_CHOP //18 AP. Slightly better if penetrating the armor is not an option, since it has slightly more damage. + +/datum/intent/sword/chop/long + damfactor = 1.2 //Charged attack, gives it some reasoning to use over the otherwise vastly superior thrust. + chargetime = 1.2 + misscost = 10 + warnie = "mobwarning" + +/datum/intent/sword/chop/great + name = "cleave" + attack_verb = list("cleaves", "splits") + damfactor = 1.4 //At 13 strenght, on a greatsword (35 damage), this will deal 63 damage. Yes. Still worse against armor, on average, than a halberd's stab or a greataxe's chop. + chargetime = 1.5 //Same as halberd chop. + swingdelay = 1 + penfactor = AP_SWORD_CHOP+10 //20 combined AP. + misscost = 12 + warnie = "mobwarning" + +/*------------\ +| Stab intent | +\------------*/ /datum/intent/sword/thrust name = "stab" icon_state = "instab" @@ -72,22 +114,88 @@ animname = "stab" blade_class = BCLASS_STAB hitsound = list('sound/combat/hits/bladed/genstab (1).ogg', 'sound/combat/hits/bladed/genstab (2).ogg', 'sound/combat/hits/bladed/genstab (3).ogg') - penfactor = 20 + penfactor = AP_SWORD_THRUST misscost = 5 -//Basic silver sword +/datum/intent/sword/thrust/curved + penfactor = AP_SWORD_THRUST-2 + +/datum/intent/sword/thrust/short + damfactor = 1.25 + clickcd = 10 + penfactor = AP_SWORD_THRUST+2 + +/datum/intent/sword/thrust/rapier + penfactor = AP_RAPIER_THRUST //30 AP, dagger tier, down from its past throne at 40 AP. + +/datum/intent/sword/thrust/zwei + name = "thrust" + reach = 1 + chargetime = 1 + warnie = "mobwarning" + swingdelay = 1 + +/datum/intent/sword/thrust/long + reach = 2 + misscost = 10 + +/*--------------\ +| Strike intent | Pommel strike, some AP +\--------------*/ +/datum/intent/sword/strike + name = "pommel strike" + icon_state = "instrike" + attack_verb = list("bashes", "clubs") + animname = "strike" + blade_class = BCLASS_BLUNT + hitsound = list('sound/combat/hits/blunt/metalblunt (1).ogg', 'sound/combat/hits/blunt/metalblunt (2).ogg', 'sound/combat/hits/blunt/metalblunt (3).ogg') + chargetime = 0 + penfactor = AP_CLUB_STRIKE + swingdelay = 1 + damfactor = 0.8 + + + +/*-----------------\ +| Onehanded Swords | +\-----------------*/ + +//................ Arming Sword ............... // +/obj/item/rogueweapon/sword/arming + name = "arming sword" + desc = "A trustworthy blade design, the first dedicated tool of war since before the age of history." + icon_state = "sword1" + smeltresult = /obj/item/ingot/steel + sellprice = 30 + +/obj/item/rogueweapon/sword/arming/Initialize() + . = ..() + if(icon_state == "sword1") + icon_state = "sword[rand(1,3)]" + + +/obj/item/rogueweapon/sword/decorated + icon_state = "decsword1" + sellprice = 140 + +/obj/item/rogueweapon/sword/decorated/Initialize() + . = ..() + if(icon_state == "decsword1") + icon_state = "decsword[rand(1,3)]" + + +//................ Silver Sword ............... // /obj/item/rogueweapon/sword/silver + force = DAMAGE_SWORD-1 + force_wielded = DAMAGE_SWORD_WIELD-1 name = "silver sword" desc = "A simple silver sword with an edge that gleams in moonlight." icon_state = "sword_s" - minstr = 6 - force = 23 // .9 of steel - force_wielded = 20 smeltresult = /obj/item/ingot/silver - max_blade_int = 240 // .8 of steel - max_integrity = 300 // .8 of steel + max_integrity = INTEGRITY_STRONG sellprice = 45 - var/last_used = 0 + last_used = 0 + is_silver = TRUE /obj/item/rogueweapon/sword/silver/pickup(mob/user) . = ..() @@ -96,15 +204,15 @@ if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/lesser)) to_chat(H, "I can't pick up the silver, it is my BANE!") H.Knockdown(20) - H.adjustFireLoss(60) - H.Paralyze(20) + H.adjustFireLoss(40) + H.Paralyze(1) H.fire_act(1,5) if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/)) var/datum/antagonist/vampirelord/V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) if(V_lord.vamplevel < 4 && !H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser)) to_chat(H, "I can't pick up the silver, it is my BANE!") H.Knockdown(10) - H.Paralyze(10) + H.Paralyze(1) /obj/item/rogueweapon/sword/silver/mob_can_equip(mob/living/M, mob/living/equipper, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE) . = ..() @@ -115,389 +223,227 @@ V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/lesser)) H.Knockdown(20) - H.adjustFireLoss(60) - H.Paralyze(20) + H.adjustFireLoss(40) + H.Paralyze(1) H.fire_act(1,5) if(V_lord) if(V_lord.vamplevel < 4 && !H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser)) H.Knockdown(10) - H.Paralyze(10) + H.Paralyze(1) -/obj/item/rogueweapon/sword/silver/funny_attack_effects(mob/living/target, mob/living/user = usr, nodmg) - if(world.time < src.last_used + 100) - to_chat(user, "The silver effect is on cooldown.") - return +/obj/item/rogueweapon/sword/iron + force = DAMAGE_SWORD-1 + force_wielded = DAMAGE_SWORD_WIELD-1 + desc = "A simple iron sword with a tested edge, sharp and true." + icon_state = "isword" + smeltresult = /obj/item/ingot/iron + max_blade_int = 200 + max_integrity = INTEGRITY_STRONG + wdefense = GOOD_PARRY +//................ Short Swords ............... // +/obj/item/rogueweapon/sword/short + force = DAMAGE_SHORTSWORD + name = "short sword" + desc = "A steel sword of shortened design, a reduced grip for primarily single hand use." + icon_state = "swordshort" + possible_item_intents = list(/datum/intent/sword/thrust/short, /datum/intent/sword/cut/short, /datum/intent/sword/strike) + gripped_intents = null + minstr = 4 + wdefense = GOOD_PARRY + wbalance = HARD_TO_DODGE + sellprice = 30 - . = ..() - if(ishuman(target)) - var/mob/living/carbon/human/s_user = user - var/mob/living/carbon/human/H = target - var/datum/antagonist/vampirelord/lesser/V = FALSE - if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/lesser)) - V = H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser) - var/datum/antagonist/vampirelord/V_lord = FALSE - if(H.mind.has_antag_datum(/datum/antagonist/vampirelord/)) - V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) - if(V) - if(V.disguised) - H.Stun(20) - H.visible_message("The silver weapon manifests the [H] curse!") - to_chat(H, "I'm hit by my BANE!") - H.adjustFireLoss(30) - H.Paralyze(20) - H.fire_act(1,4) - H.apply_status_effect(/datum/status_effect/debuff/silver_curse) - src.last_used = world.time - else - H.Stun(20) - to_chat(H, "I'm hit by my BANE!") - H.adjustFireLoss(30) - H.Paralyze(20) - H.fire_act(1,4) - H.apply_status_effect(/datum/status_effect/debuff/silver_curse) - src.last_used = world.time - if(V_lord) - if(V_lord.vamplevel < 4 && !V) - H.Stun(10) - to_chat(H, "I'm hit by my BANE!") - H.adjustFireLoss(25) - H.Paralyze(10) - H.fire_act(1,4) - src.last_used = world.time - if(V_lord.vamplevel == 4 && !V) - s_user.Stun(10) - s_user.Paralyze(10) - to_chat(s_user, " The silver weapon fails!") - H.visible_message(H, "This feeble metal can't hurt me, I HAVE TRANSCENDED!") -// Long Swords -/obj/item/rogueweapon/sword/long - force = 18 - force_wielded = 28 - possible_item_intents = list(/datum/intent/sword/cut, /datum/intent/sword/thrust, /datum/intent/sword/strike) - gripped_intents = list(/datum/intent/sword/cut, /datum/intent/sword/thrust, /datum/intent/sword/strike, /datum/intent/sword/chop) - icon_state = "longsword" +/obj/item/rogueweapon/sword/short/iron + force = DAMAGE_SHORTSWORD-1 + desc = "A crude iron sword of shortened design, a reduced grip for primarily single hand use." + icon_state = "iswordshort" + max_integrity = INTEGRITY_STRONG + smeltresult = /obj/item/ingot/iron + max_blade_int = 200 + sellprice = 15 + +/*-------\ +| Sabres | Onehanded, slightly weaker thrust, better for parries. Think rapier but cutting focus. +\-------*/ +/obj/item/rogueweapon/sword/sabre + name = "sabre" + desc = "A swift sabre, favored by duelists and cut-throats alike." + icon_state = "saber" + possible_item_intents = list(/datum/intent/sword/cut/sabre, /datum/intent/sword/thrust/curved, /datum/intent/sword/chop/sabre) + gripped_intents = null + parrysound = list('sound/combat/parry/bladed/bladedthin (1).ogg', 'sound/combat/parry/bladed/bladedthin (2).ogg', 'sound/combat/parry/bladed/bladedthin (3).ogg') + swingsound = BLADEWOOSH_SMALL + minstr = 5 + wdefense = ULTMATE_PARRY + wbalance = HARD_TO_DODGE + +/obj/item/rogueweapon/sword/sabre/dec + name = "decorated sabre" + desc = "A saber decorated with fashionable gold accents without sacrificing its lethal practicality." + icon_state = "decsaber" + sellprice = 140 + +/obj/item/rogueweapon/sword/sabre/stalker + possible_item_intents = list(/datum/intent/sword/cut/sabre, /datum/intent/sword/thrust/short) //This thing is *insanely* strong by current standards due to inheriting the 1.25 damage fast thrust from the shortsword. Just saying. + name = "stalker sabre" + desc = "A once elegant blade of mythril, diminishing under the suns gaze" + icon_state = "spidersaber" + +//................ Cutlass ............... // +/obj/item/rogueweapon/sword/sabre/cutlass + name = "cutlass" + desc = "Both tool and weapon of war, favored by Abyssor cultists and sailors for seafaring battle." + possible_item_intents = list(/datum/intent/sword/cut/sabre, /datum/intent/sword/thrust/curved, /datum/intent/sword/chop/sabre, /datum/intent/sword/strike) //Unique weapon, added versatility. + icon_state = "cutlass" + minstr = 6 + +//................ Kings Sword ............... // +/obj/item/rogueweapon/sword/sabre/lord + force = DAMAGE_SWORD_WIELD + name = "Kings Sword" + desc = "Passed down through the ages, a weapon that once carved a kingdom out now relegated to a decorative piece." + possible_item_intents = list(/datum/intent/sword/cut/sabre, /datum/intent/sword/thrust/curved, /datum/intent/sword/chop/sabre, /datum/intent/sword/strike) //Unique weapon, added versatility. + icon_state = "lordrap" + sellprice = 200 + max_blade_int = 400 + +//................ Shalal Sabre ............... // +/obj/item/rogueweapon/sword/sabre/shalal + possible_item_intents = list(/datum/intent/sword/cut, /datum/intent/sword/strike) + gripped_intents = list(/datum/intent/sword/cut/sabre, /datum/intent/sword/strike, /datum/intent/sword/chop/sabre) //This thing is a sabre that can be wielded for +5 damage. + icon_state = "marlin" + name = "shalal sabre" + desc = "A fine weapon of Zybantu origin in the style of the Shalal tribesfolk, renowned for their defiance against magic and mastery of mounted swordsmanship." + parrysound = "rapier" + minstr = 6 + sellprice = 80 icon = 'icons/roguetown/weapons/64.dmi' - item_state = "longsword" lefthand_file = 'icons/mob/inhands/weapons/roguebig_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/roguebig_righthand.dmi' - name = "longsword" - desc = "A long hand-and-a-half blade, wielded by the virtuous and vile alike." - swingsound = BLADEWOOSH_LARGE - parrysound = "largeblade" - pickup_sound = "brandish_blade" bigboy = TRUE - max_blade_int = 300 - max_integrity = 500 wlength = WLENGTH_LONG gripsprite = TRUE pixel_y = -16 pixel_x = -16 inhand_x_dimension = 64 inhand_y_dimension = 64 - throwforce = 15 - thrown_bclass = BCLASS_CUT slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_HIP dropshrink = 0.75 - smeltresult = /obj/item/ingot/steel - wbalance = -1 - sellprice = 60 - -/obj/item/rogueweapon/sword/long/death - color = CLOTHING_BLACK -/obj/item/rogueweapon/sword/long/getonmobprop(tag) +/obj/item/rogueweapon/sword/sabre/shalal/getonmobprop(tag) . = ..() if(tag) switch(tag) - if("gen") return list("shrink" = 0.5,"sx" = -14,"sy" = -8,"nx" = 15,"ny" = -7,"wx" = -10,"wy" = -5,"ex" = 7,"ey" = -6,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -13,"sturn" = 110,"wturn" = -60,"eturn" = -30,"nflip" = 1,"sflip" = 1,"wflip" = 8,"eflip" = 1) - if("onback") return list("shrink" = 0.5,"sx" = -1,"sy" = 2,"nx" = 0,"ny" = 2,"wx" = 2,"wy" = 1,"ex" = 0,"ey" = 1,"nturn" = 0,"sturn" = 0,"wturn" = 70,"eturn" = 15,"nflip" = 1,"sflip" = 1,"wflip" = 1,"eflip" = 1,"northabove" = 1,"southabove" = 0,"eastabove" = 0,"westabove" = 0) - if("wielded") return list("shrink" = 0.6,"sx" = 6,"sy" = -2,"nx" = -4,"ny" = 2,"wx" = -8,"wy" = -1,"ex" = 8,"ey" = 3,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 15,"sturn" = -200,"wturn" = -160,"eturn" = -25,"nflip" = 8,"sflip" = 8,"wflip" = 0,"eflip" = 0) - if("onbelt") return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) + if("gen") + return list("shrink" = 0.6,"sx" = -10,"sy" = -8,"nx" = 13,"ny" = -8,"wx" = -8,"wy" = -7,"ex" = 7,"ey" = -8,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 90,"sturn" = -90,"wturn" = -80,"eturn" = 81,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("wielded") + return list("shrink" = 0.6,"sx" = 3,"sy" = 4,"nx" = -1,"ny" = 4,"wx" = -8,"wy" = 3,"ex" = 7,"ey" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 15,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) + if("onbelt") + return list("shrink" = 0.5,"sx" = -4,"sy" = -6,"nx" = 5,"ny" = -6,"wx" = 0,"wy" = -6,"ex" = -1,"ey" = -6,"nturn" = 100,"sturn" = 156,"wturn" = 90,"eturn" = 180,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) -/obj/item/rogueweapon/sword/long/heirloom - force = 15 - force_wielded = 25 // Old blade, a relic mostly - possible_item_intents = list(/datum/intent/sword/cut, /datum/intent/sword/thrust, /datum/intent/sword/strike) - gripped_intents = list(/datum/intent/sword/cut, /datum/intent/longsword/thrust, /datum/intent/sword/strike, /datum/intent/longsword/chop) - icon_state = "heirloom" - icon = 'icons/roguetown/weapons/64.dmi' - item_state = "longsword" - lefthand_file = 'icons/mob/inhands/weapons/roguebig_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/roguebig_righthand.dmi' - name = "old sword" - desc = "An old steel sword with a heraldic green leather grip, mouldered by years of neglect." - max_blade_int = 180 // Neglected, unused - max_integrity = 300 - pixel_y = -16 - pixel_x = -16 - inhand_x_dimension = 64 - inhand_y_dimension = 64 - static_price = TRUE - sellprice = 45 // Old and chipped -/obj/item/rogueweapon/sword/long/getonmobprop(tag) - . = ..() - if(tag) - switch(tag) - if("gen") return list("shrink" = 0.5,"sx" = -14,"sy" = -8,"nx" = 15,"ny" = -7,"wx" = -10,"wy" = -5,"ex" = 7,"ey" = -6,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -13,"sturn" = 110,"wturn" = -60,"eturn" = -30,"nflip" = 1,"sflip" = 1,"wflip" = 8,"eflip" = 1) - if("onback") return list("shrink" = 0.5,"sx" = -1,"sy" = 2,"nx" = 0,"ny" = 2,"wx" = 2,"wy" = 1,"ex" = 0,"ey" = 1,"nturn" = 0,"sturn" = 0,"wturn" = 70,"eturn" = 15,"nflip" = 1,"sflip" = 1,"wflip" = 1,"eflip" = 1,"northabove" = 1,"southabove" = 0,"eastabove" = 0,"westabove" = 0) - if("wielded") return list("shrink" = 0.6,"sx" = 6,"sy" = -2,"nx" = -4,"ny" = 2,"wx" = -8,"wy" = -1,"ex" = 8,"ey" = 3,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 15,"sturn" = -200,"wturn" = -160,"eturn" = -25,"nflip" = 8,"sflip" = 8,"wflip" = 0,"eflip" = 0) - if("onbelt") return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) +/obj/item/rogueweapon/sword/sabre/scythe + force = DAMAGE_SWORD-2 + name = "scythe sword" + desc = "A farming tool blade has been fastened to a shorter wooden handle to create an improvised weapon." + icon_state = "scytheblade" + wdefense = AVERAGE_PARRY -// Repurposing this unused sword for the Paladin job as a heavy counter against vampires. -/obj/item/rogueweapon/sword/long/judgement - force = 15 - force_wielded = 30 - possible_item_intents = list(/datum/intent/sword/cut, /datum/intent/sword/thrust, /datum/intent/sword/strike) - gripped_intents = list(/datum/intent/sword/cut, /datum/intent/longsword/thrust, /datum/intent/sword/strike, /datum/intent/longsword/chop) - icon_state = "judgement" - icon = 'icons/roguetown/weapons/64.dmi' - item_state = "judgement" - lefthand_file = 'icons/mob/inhands/weapons/roguebig_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/roguebig_righthand.dmi' - name = "judgement" - desc = "A sword with a silvered grip, a jeweled hilt and a honed blade; a design fit for nobility." - pixel_y = -16 - pixel_x = -16 - inhand_x_dimension = 64 - inhand_y_dimension = 64 - sellprice = 363 - static_price = TRUE - var/last_used = 0 -/obj/item/rogueweapon/sword/long/judgement/getonmobprop(tag) - . = ..() - if(tag) - switch(tag) - if("gen") return list("shrink" = 0.5,"sx" = -14,"sy" = -8,"nx" = 15,"ny" = -7,"wx" = -10,"wy" = -5,"ex" = 7,"ey" = -6,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -13,"sturn" = 110,"wturn" = -60,"eturn" = -30,"nflip" = 1,"sflip" = 1,"wflip" = 8,"eflip" = 1) - if("onback") return list("shrink" = 0.5,"sx" = -1,"sy" = 2,"nx" = 0,"ny" = 2,"wx" = 2,"wy" = 1,"ex" = 0,"ey" = 1,"nturn" = 0,"sturn" = 0,"wturn" = 70,"eturn" = 15,"nflip" = 1,"sflip" = 1,"wflip" = 1,"eflip" = 1,"northabove" = 1,"southabove" = 0,"eastabove" = 0,"westabove" = 0) - if("wielded") return list("shrink" = 0.4,"sx" = 3,"sy" = 4,"nx" = -1,"ny" = 4,"wx" = -8,"wy" = 3,"ex" = 7,"ey" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 15,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) - if("onbelt") return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) +/*----------\ +| Scimitars | Normal swords with a strong cutting emphasis. +\----------*/ +/obj/item/rogueweapon/sword/scimitar + possible_item_intents = list(/datum/intent/sword/cut/sabre, /datum/intent/sword/chop/sabre) + gripped_intents = list(/datum/intent/sword/cut/sabre, /datum/intent/sword/chop/sabre) //Curved blade, cuts better. + name = "scimitar" + desc = "A Zybantu design for swords, these curved blades are a common sight in the lands of the Ziggurat." + icon_state = "scimitar" + swingsound = BLADEWOOSH_LARGE + wdefense = AVERAGE_PARRY -/obj/item/rogueweapon/sword/long/judgement/pickup(mob/user) - . = ..() - var/mob/living/carbon/human/H = user - if(ishuman(H)) - if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/lesser)) - to_chat(H, "I can't pick up the silver, it is my BANE!") - H.Knockdown(30) - H.adjustFireLoss(60) - H.Paralyze(30) - H.fire_act(1,5) - if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/)) - var/datum/antagonist/vampirelord/V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) - if(V_lord.vamplevel < 4 && !H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser)) - to_chat(H, "I can't pick up the silver, it is my BANE!") - H.Knockdown(10) - H.Paralyze(10) - -/obj/item/rogueweapon/sword/long/judgement/mob_can_equip(mob/living/M, mob/living/equipper, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE) - . = ..() - if(ishuman(M)) - var/datum/antagonist/vampirelord/V_lord = FALSE - var/mob/living/carbon/human/H = M - if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord)) - V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) - if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/lesser)) - to_chat(H, "I cannot equip this, it is made of my BANE!") - H.Knockdown(20) - H.adjustFireLoss(60) - H.Paralyze(20) - H.fire_act(1,5) - if(V_lord) - if(V_lord.vamplevel < 4 && !H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser)) - to_chat(H, "I cannot equip this, it is made of my BANE!") - H.Knockdown(10) - H.Paralyze(10) - else - if(prob(25)) - H.fire_act(1,3) - -/obj/item/rogueweapon/sword/long/judgement/funny_attack_effects(mob/living/target, mob/living/user = usr, nodmg) - if(world.time < src.last_used + 120) - to_chat(user, "The silver effect is on cooldown.") - return - - . = ..() - if(ishuman(target)) - var/mob/living/carbon/human/s_user = user - var/mob/living/carbon/human/H = target - var/datum/antagonist/vampirelord/lesser/V = FALSE - if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/lesser)) - V = H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser) - var/datum/antagonist/vampirelord/V_lord = FALSE - if(H.mind.has_antag_datum(/datum/antagonist/vampirelord/)) - V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) - if(V) - if(V.disguised) - H.Stun(30) - H.visible_message("The silver weapon undoes [H]'s wicked disguise!") - to_chat(H, "I'm hit by my BANE!") - H.adjustFireLoss(60) - H.Paralyze(30) - H.fire_act(1,5) - H.apply_status_effect(/datum/status_effect/debuff/silver_curse/greater) - src.last_used = world.time - else - H.Stun(30) - to_chat(H, "I'm hit by my BANE!") - H.adjustFireLoss(60) - H.Paralyze(30) - H.fire_act(1,5) - H.apply_status_effect(/datum/status_effect/debuff/silver_curse/greater) - src.last_used = world.time - if(V_lord) - if(V_lord.vamplevel < 4 && !V) - H.Stun(20) - to_chat(H, "I'm hit by my BANE!") - H.adjustFireLoss(30) - H.Paralyze(20) - H.fire_act(1,4) - H.apply_status_effect(/datum/status_effect/debuff/silver_curse) // Lesser curse applied still - src.last_used = world.time - if(V_lord.vamplevel == 4 && !V) - if(prob(25)) - H.fire_act(1,3) - to_chat(s_user, " The silver weapon barely works against such an abomination!") - H.visible_message(H, "This feeble metal can't stop me, I HAVE TRANSCENDED!") - -/obj/item/rogueweapon/sword/long/vlord - force = 18 - force_wielded = 30 - possible_item_intents = list(/datum/intent/sword/cut, /datum/intent/sword/thrust, /datum/intent/sword/strike) - gripped_intents = list(/datum/intent/sword/cut, /datum/intent/longsword/thrust, /datum/intent/sword/strike, /datum/intent/longsword/chop) - icon_state = "vlord" - icon = 'icons/roguetown/weapons/64.dmi' - item_state = "vlord" - lefthand_file = 'icons/mob/inhands/weapons/roguebig_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/roguebig_righthand.dmi' - name = "Jaded Fang" - desc = "An ancestral long blade with an ominous glow, serrated with barbs along it's edges. Stained with a strange green tint." - pixel_y = -16 - pixel_x = -16 - inhand_x_dimension = 64 - inhand_y_dimension = 64 - sellprice = 363 - static_price = TRUE +/obj/item/rogueweapon/sword/scimitar/falchion + possible_item_intents = list(/datum/intent/sword/cut/sabre, /datum/intent/sword/chop/sabre) + gripped_intents = list(/datum/intent/sword/cut/sabre, /datum/intent/sword/chop/sabre) + name = "falchion" + desc = "Broad blade, excellent steel, a design inspired by Malum the dwarves claim." + icon_state = "falchion_old" + swingsound = BLADEWOOSH_HUGE + wbalance = EASY_TO_DODGE + wdefense = GREAT_PARRY //Some reason to use it over the scimitar, now that both have proper cutting edges. + sellprice = 100 -/obj/item/rogueweapon/sword/long/vlord/getonmobprop(tag) - . = ..() - if(tag) - switch(tag) - if("gen") - return list("shrink" = 0.6,"sx" = -6,"sy" = 6,"nx" = 6,"ny" = 7,"wx" = 0,"wy" = 5,"ex" = -1,"ey" = 7,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -50,"sturn" = 40,"wturn" = 50,"eturn" = -50,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("wielded") - return list("shrink" = 0.6,"sx" = 9,"sy" = -4,"nx" = -7,"ny" = 1,"wx" = -9,"wy" = 2,"ex" = 10,"ey" = 2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 5,"sturn" = -190,"wturn" = -170,"eturn" = -10,"nflip" = 8,"sflip" = 8,"wflip" = 1,"eflip" = 0) - if("onbelt") - return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) +/obj/item/rogueweapon/sword/scimitar/messer + name = "messer" + desc = "Straight iron blade, simple cutting edge, no nonsense and a popular northern blade." + icon_state = "imesser" + possible_item_intents = list(/datum/intent/sword/cut, /datum/intent/axe/chop) + gripped_intents = list(/datum/intent/sword/cut, /datum/intent/axe/chop, /datum/intent/sword/thrust) + smeltresult = /obj/item/ingot/iron + wbalance = EASY_TO_DODGE + sellprice = 20 -/obj/item/rogueweapon/sword/long/rider - force = 15 - force_wielded = 30 - possible_item_intents = list(/datum/intent/sword/cut, /datum/intent/sword/strike) - gripped_intents = list(/datum/intent/sword/cut, /datum/intent/sword/strike, /datum/intent/longsword/chop) - icon_state = "tabi" - icon = 'icons/roguetown/weapons/64.dmi' - item_state = "tabi" - lefthand_file = 'icons/mob/inhands/weapons/roguebig_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/roguebig_righthand.dmi' - name = "kilij scimitar" - desc = "A curved blade of Zybantu origin meaning 'curved one'. The standard sword that saw the conquest of the Zybantine continent and peoples." - pixel_y = -16 - pixel_x = -16 - inhand_x_dimension = 64 - inhand_y_dimension = 64 - sellprice = 80 -/obj/item/rogueweapon/sword/long/rider/getonmobprop(tag) - . = ..() - if(tag) - switch(tag) - if("gen") - return list("shrink" = 0.6,"sx" = -10,"sy" = -8,"nx" = 13,"ny" = -8,"wx" = -8,"wy" = -7,"ex" = 7,"ey" = -8,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 90,"sturn" = -90,"wturn" = -80,"eturn" = 81,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("wielded") - return list("shrink" = 0.6,"sx" = 3,"sy" = 4,"nx" = -1,"ny" = 4,"wx" = -8,"wy" = 3,"ex" = 7,"ey" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 15,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) - if("onbelt") - return list("shrink" = 0.5,"sx" = -4,"sy" = -6,"nx" = 5,"ny" = -6,"wx" = 0,"wy" = -6,"ex" = -1,"ey" = -6,"nturn" = 100,"sturn" = 156,"wturn" = 90,"eturn" = 180,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) -/obj/item/rogueweapon/sword/long/marlin - force = 15 - force_wielded = 30 - possible_item_intents = list(/datum/intent/sword/cut, /datum/intent/sword/strike) - gripped_intents = list(/datum/intent/sword/cut, /datum/intent/sword/strike, /datum/intent/longsword/chop, /datum/intent/longsword/thrust) - icon_state = "marlin" - icon = 'icons/roguetown/weapons/64.dmi' - item_state = "marlin" - lefthand_file = 'icons/mob/inhands/weapons/roguebig_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/roguebig_righthand.dmi' - name = "shalal saber" - desc = "A humongous saber of Zybantu origin in the style of the Shalal tribesfolk, renowned for their defiance against magic and mastery of mounted swordsmanship." +/*--------\ +| Rapiers | Onehanded, slightly weaker cut, more AP thrust, harder to dodge. +\--------*/ +/obj/item/rogueweapon/sword/rapier + name = "rapier" + desc = "A precise rapier, favored by the small, eloquent and bloodthirsty." + icon_state = "rapier" + possible_item_intents = list(/datum/intent/sword/thrust/rapier, /datum/intent/sword/cut/rapier) + parrysound = list('sound/combat/parry/bladed/bladedthin (1).ogg', 'sound/combat/parry/bladed/bladedthin (2).ogg', 'sound/combat/parry/bladed/bladedthin (3).ogg') + gripped_intents = null parrysound = "rapier" swingsound = BLADEWOOSH_SMALL - bigboy = FALSE - pixel_y = -16 - pixel_x = -16 - inhand_x_dimension = 64 - inhand_y_dimension = 64 minstr = 6 - sellprice = 80 - wdefense = 5 + wbalance = VERY_HARD_TO_DODGE -/obj/item/rogueweapon/sword/long/marlin/getonmobprop(tag) - . = ..() - if(tag) - switch(tag) - if("gen") - return list("shrink" = 0.6,"sx" = -10,"sy" = -8,"nx" = 13,"ny" = -8,"wx" = -8,"wy" = -7,"ex" = 7,"ey" = -8,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 90,"sturn" = -90,"wturn" = -80,"eturn" = 81,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("wielded") - return list("shrink" = 0.6,"sx" = 3,"sy" = 4,"nx" = -1,"ny" = 4,"wx" = -8,"wy" = 3,"ex" = 7,"ey" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 15,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) - if("onbelt") - return list("shrink" = 0.5,"sx" = -4,"sy" = -6,"nx" = 5,"ny" = -6,"wx" = 0,"wy" = -6,"ex" = -1,"ey" = -6,"nturn" = 100,"sturn" = 156,"wturn" = 90,"eturn" = 180,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) +/obj/item/rogueweapon/sword/rapier/iron + name = "florete" + desc = "A precise iron florete, favored by the skilled duelists of Valoria." + icon_state = "estoc" + smeltresult = /obj/item/ingot/iron + wbalance = HARD_TO_DODGE -/obj/item/rogueweapon/sword/long/forgotten - force = 16 // Damage is .9 of a steel sword - force_wielded = 25 - possible_item_intents = list(/datum/intent/sword/cut, /datum/intent/sword/thrust, /datum/intent/sword/strike) - gripped_intents = list(/datum/intent/sword/cut, /datum/intent/longsword/thrust, /datum/intent/sword/strike, /datum/intent/longsword/chop) - icon_state = "forgotten" - icon = 'icons/roguetown/weapons/64.dmi' - item_state = "forgotten" - lefthand_file = 'icons/mob/inhands/weapons/roguebig_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/roguebig_righthand.dmi' - name = "forgotten blade" - desc = "A large silver-alloy sword made in a revisionist style, honoring the Forgotten God. Best known as the prefered weapon of Inquisitorial Lodges" - max_blade_int = 240 // Integrity and blade retention is .8 of a steel sword - max_integrity = 400 - pixel_y = -16 - pixel_x = -16 - inhand_x_dimension = 64 - inhand_y_dimension = 64 +/obj/item/rogueweapon/sword/rapier/dec + icon_state = "decrapier" + desc = "A rapier decorated with gold inlaid on its hilt. A regal weapon fit for nobility." + sellprice = 140 + +/obj/item/rogueweapon/sword/rapier/silver + force = DAMAGE_SWORD-2 + name = "silver rapier" + desc = "An elegant silver rapier. Popular with lords and ladies in Valoria." + icon_state = "rapier_s" smeltresult = /obj/item/ingot/silver - wbalance = -1 - wdefense = 4 - sellprice = 90 - var/last_used = 0 + max_blade_int = 240 // .8 of base steel + max_integrity = 400 // .8 of base steel + sellprice = 45 + last_used = 0 + is_silver = TRUE -/obj/item/rogueweapon/sword/long/forgotten/pickup(mob/user) +/obj/item/rogueweapon/sword/rapier/silver/pickup(mob/user) . = ..() var/mob/living/carbon/human/H = user if(ishuman(H)) if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/lesser)) to_chat(H, "I can't pick up the silver, it is my BANE!") H.Knockdown(20) - H.adjustFireLoss(60) - H.Paralyze(20) + H.adjustFireLoss(40) + H.Paralyze(1) H.fire_act(1,5) if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/)) var/datum/antagonist/vampirelord/V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) if(V_lord.vamplevel < 4 && !H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser)) to_chat(H, "I can't pick up the silver, it is my BANE!") H.Knockdown(10) - H.Paralyze(10) + H.Paralyze(1) -/obj/item/rogueweapon/sword/long/forgotten/mob_can_equip(mob/living/M, mob/living/equipper, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE) +/obj/item/rogueweapon/sword/rapier/silver/mob_can_equip(mob/living/M, mob/living/equipper, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE) . = ..() if(ishuman(M)) var/datum/antagonist/vampirelord/V_lord = FALSE @@ -506,251 +452,144 @@ V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/lesser)) H.Knockdown(20) - H.adjustFireLoss(60) - H.Paralyze(20) + H.adjustFireLoss(40) + H.Paralyze(1) H.fire_act(1,5) if(V_lord) if(V_lord.vamplevel < 4 && !H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser)) H.Knockdown(10) - H.Paralyze(10) + H.Paralyze(1) -/obj/item/rogueweapon/sword/long/forgotten/funny_attack_effects(mob/living/target, mob/living/user = usr, nodmg) - if(world.time < src.last_used + 100) - to_chat(user, "The silver effect is on cooldown.") - return +// Hoplite Kophesh +/obj/item/rogueweapon/sword/khopesh + name = "ancient khopesh" + desc = "A bronze weapon of war from the era of Apotheosis. This blade is older than a few elven generations, but has been very well-maintained and still keeps a good edge." + force = 22 // Unique weapon from rare job, slightly more force than most one-handers + possible_item_intents = list(/datum/intent/sword/cut/sabre, /datum/intent/sword/chop/sabre, /datum/intent/sword/strike) + gripped_intents = null + icon = 'icons/roguetown/weapons/64.dmi' + icon_state = "khopesh" + item_state = "khopesh" + inhand_x_dimension = 64 + inhand_y_dimension = 64 + pixel_y = -16 + pixel_x = -16 + dropshrink = 0.75 + bigboy = TRUE // WHY DOES THIS FUCKING VARIABLE CONTROL WHETHER THE BLOOD OVERLAY WORKS ON 64x64 WEAPONS + slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_HIP + smeltresult = null // No bronze ingots yet + max_blade_int = 300 + max_integrity = 300 + minstr = 10 // Even though it's technically one-handed, you gotta have some muscle to wield this thing + wdefense = 3 // Lower than average sword defense (meant to pair with a shield) + wbalance = -1 // Likely weighted towards the blade, for deep cuts and chops + sellprice = 200 // A noble collector would love to get his/her hands on one of these blades - . = ..() - if(ishuman(target)) - var/mob/living/carbon/human/s_user = user - var/mob/living/carbon/human/H = target - var/datum/antagonist/vampirelord/lesser/V = FALSE - if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/lesser)) - V = H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser) - var/datum/antagonist/vampirelord/V_lord = FALSE - if(H.mind.has_antag_datum(/datum/antagonist/vampirelord/)) - V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) - if(V) - if(V.disguised) - H.Stun(20) - H.visible_message("The silver weapon manifests the [H] curse!") - to_chat(H, "I'm hit by my BANE!") - H.adjustFireLoss(30) - H.Paralyze(20) - H.fire_act(1,4) - H.apply_status_effect(/datum/status_effect/debuff/silver_curse) - src.last_used = world.time - else - H.Stun(20) - to_chat(H, "I'm hit by my BANE!") - H.adjustFireLoss(30) - H.Paralyze(20) - H.fire_act(1,4) - H.apply_status_effect(/datum/status_effect/debuff/silver_curse) - src.last_used = world.time - if(V_lord) - if(V_lord.vamplevel < 4 && !V) - H.Stun(10) - to_chat(H, "I'm hit by my BANE!") - H.adjustFireLoss(25) - H.Paralyze(10) - H.fire_act(1,4) - src.last_used = world.time - if(V_lord.vamplevel == 4 && !V) - s_user.Stun(10) - s_user.Paralyze(10) - to_chat(s_user, " The silver weapon fails!") - H.visible_message(H, "This feeble metal can't hurt me, I HAVE TRANSCENDED!") - -/obj/item/rogueweapon/greatsword - force = 15 - force_wielded = 35 - possible_item_intents = list(/datum/intent/sword/chop,/datum/intent/sword/strike) //bash is for nonlethal takedowns, only targets limbs - gripped_intents = list(/datum/intent/sword/cut, /datum/intent/longsword/chop, /datum/intent/sword/thrust, /datum/intent/sword/strike) - name = "greatsword" - desc = "An oversized hunk of metal designed for putting fear into men and killing beasts." - icon_state = "gsw" +/*-----------------\ +| Twohanded Swords | +\-----------------*/ + +//................ Long Sword ............... // +/obj/item/rogueweapon/sword/long + force_wielded = DAMAGE_LONGSWORD_WIELD + possible_item_intents = list(/datum/intent/sword/cut, /datum/intent/sword/thrust, /datum/intent/sword/strike) + gripped_intents = list(/datum/intent/sword/cut, /datum/intent/sword/thrust/long, /datum/intent/sword/strike, /datum/intent/sword/chop/long) + icon_state = "longsword" icon = 'icons/roguetown/weapons/64.dmi' + lefthand_file = 'icons/mob/inhands/weapons/roguebig_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/roguebig_righthand.dmi' + name = "longsword" + desc = "A long hand-and-a-half blade, wielded by the virtuous and vile alike." + swingsound = BLADEWOOSH_LARGE parrysound = "largeblade" pickup_sound = "brandish_blade" - swingsound = BLADEWOOSH_HUGE + minstr = 9 + bigboy = TRUE + wlength = WLENGTH_LONG + gripsprite = TRUE pixel_y = -16 pixel_x = -16 inhand_x_dimension = 64 inhand_y_dimension = 64 - bigboy = TRUE - gripsprite = TRUE - wlength = WLENGTH_GREAT - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - thrown_bclass = BCLASS_CUT - throwforce = 15 - minstr = 12 - smeltresult = /obj/item/ingot/steel - associated_skill = /datum/skill/combat/swords - max_blade_int = 300 - max_integrity = 500 - wdefense = 3 - wbalance = -1 // All long swords are heavy. - sellprice = 90 + slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_HIP + dropshrink = 0.75 + sellprice = 60 -/obj/item/rogueweapon/greatsword/getonmobprop(tag) +/obj/item/rogueweapon/sword/long/death + color = CLOTHING_SOOT_BLACK + +/obj/item/rogueweapon/sword/long/getonmobprop(tag) . = ..() if(tag) switch(tag) - if("gen") - return list("shrink" = 0.6,"sx" = -6,"sy" = 6,"nx" = 6,"ny" = 7,"wx" = 0,"wy" = 5,"ex" = -1,"ey" = 7,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -50,"sturn" = 40,"wturn" = 50,"eturn" = -50,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("wielded") - return list("shrink" = 0.6,"sx" = 3,"sy" = 4,"nx" = -1,"ny" = 4,"wx" = -8,"wy" = 3,"ex" = 7,"ey" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 15,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) - if("onback") - return list("shrink" = 0.6,"sx" = -1,"sy" = 3,"nx" = -1,"ny" = 2,"wx" = 3,"wy" = 4,"ex" = -1,"ey" = 5,"nturn" = 0,"sturn" = 0,"wturn" = 70,"eturn" = 20,"nflip" = 1,"sflip" = 1,"wflip" = 1,"eflip" = 1,"northabove" = 1,"southabove" = 0,"eastabove" = 0,"westabove" = 0) - + if("gen") return list("shrink" = 0.5,"sx" = -14,"sy" = -8,"nx" = 15,"ny" = -7,"wx" = -10,"wy" = -5,"ex" = 7,"ey" = -6,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -13,"sturn" = 110,"wturn" = -60,"eturn" = -30,"nflip" = 1,"sflip" = 1,"wflip" = 8,"eflip" = 1) + if("onback") return list("shrink" = 0.5,"sx" = -1,"sy" = 2,"nx" = 0,"ny" = 2,"wx" = 2,"wy" = 1,"ex" = 0,"ey" = 1,"nturn" = 0,"sturn" = 0,"wturn" = 70,"eturn" = 15,"nflip" = 1,"sflip" = 1,"wflip" = 1,"eflip" = 1,"northabove" = 1,"southabove" = 0,"eastabove" = 0,"westabove" = 0) + if("wielded") return list("shrink" = 0.6,"sx" = 6,"sy" = -2,"nx" = -4,"ny" = 2,"wx" = -8,"wy" = -1,"ex" = 8,"ey" = 3,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 15,"sturn" = -200,"wturn" = -160,"eturn" = -25,"nflip" = 8,"sflip" = 8,"wflip" = 0,"eflip" = 0) + if("onbelt") return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) +//................ Heirloom Sword ............... // +/obj/item/rogueweapon/sword/long/heirloom + force = DAMAGE_SWORD-2 + force_wielded = DAMAGE_SWORD_WIELD + icon_state = "heirloom" + name = "old sword" + desc = "An old steel sword with a heraldic green leather grip, mouldered by years of neglect." + max_blade_int = 180 // Neglected, unused + max_integrity = INTEGRITY_STRONG-50 + static_price = TRUE + sellprice = 45 // Old and chipped -/obj/item/rogueweapon/greatsword/flamberge - name = "flamberge" - desc = "Commonly known as a flame-bladed sword, this weapon has an undulating blade. It's wave-like form distributes force better, and is less likely to break on impact." - icon_state = "flamberge" - force = 15 - force_wielded = 40 // Unique weapon from rare job - max_blade_int = 200 - max_integrity = 400 - sellprice = 120 -/obj/item/rogueweapon/greatsword/zwei - name = "zweihander" - desc = "Sometimes known as a doppelhander or beidhander, this weapon's size is so impressive that it's handling properties are more akin to that of a polearm than a sword." - icon_state = "steelzwei" - force_wielded = 25 // A weapon worth 3 iron bars can't be as good as one worth 3 steel bars. Steel sword tier. - possible_item_intents = list(/datum/intent/sword/cut/zwei, /datum/intent/sword/thrust/zwei, /datum/intent/sword/strike) - gripped_intents = list(/datum/intent/sword/cut, /datum/intent/longsword/thrust, /datum/intent/sword/strike, /datum/intent/longsword/chop) - smeltresult = /obj/item/ingot/iron - max_blade_int = 150 // Iron tier - max_integrity = 300 - sellprice = 60 +// Repurposing this unused sword for the Paladin job as a heavy counter against vampires. +/obj/item/rogueweapon/sword/long/judgement// this sprite is a one handed sword, not a longsword. + force = DAMAGE_SWORD + force_wielded = DAMAGE_LONGSWORD_WIELD+2 + icon_state = "judgement" + name = "judgement" + desc = "A sword with a silvered grip, a jeweled hilt and a honed blade; a design fit for nobility." + sellprice = 363 + static_price = TRUE + last_used = 0 + is_silver = TRUE -/obj/item/rogueweapon/greatsword/zwei/getonmobprop(tag) +/obj/item/rogueweapon/sword/long/judgement/getonmobprop(tag) . = ..() if(tag) switch(tag) - if("gen") - return list("shrink" = 0.6,"sx" = -6,"sy" = 6,"nx" = 6,"ny" = 7,"wx" = 0,"wy" = 5,"ex" = -1,"ey" = 7,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -50,"sturn" = 40,"wturn" = 50,"eturn" = -50,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("wielded") - return list("shrink" = 0.6,"sx" = 9,"sy" = -4,"nx" = -7,"ny" = 1,"wx" = -9,"wy" = 2,"ex" = 10,"ey" = 2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 5,"sturn" = -190,"wturn" = -170,"eturn" = -10,"nflip" = 4,"sflip" = 4,"wflip" = 1,"eflip" = 0) - if("onback") - return list("shrink" = 0.6,"sx" = -1,"sy" = 3,"nx" = -1,"ny" = 2,"wx" = 3,"wy" = 4,"ex" = -1,"ey" = 5,"nturn" = 0,"sturn" = 0,"wturn" = 70,"eturn" = 20,"nflip" = 1,"sflip" = 1,"wflip" = 1,"eflip" = 1,"northabove" = 1,"southabove" = 0,"eastabove" = 0,"westabove" = 0) - -/obj/item/rogueweapon/greatsword/elfgsword - force = 15 - force_wielded = 30 // Unique weapon from rare job - name = "elven kriegsmesser" - desc = "A huge, curved elven blade. It's metal is of a high quality, yet still light, crafted by the greatest elven bladesmiths." - icon_state = "kriegsmesser" - max_blade_int = 300 - max_integrity = 300 - wbalance = 0 - minstr = 10 - sellprice = 120 + if("gen") return list("shrink" = 0.5,"sx" = -14,"sy" = -8,"nx" = 15,"ny" = -7,"wx" = -10,"wy" = -5,"ex" = 7,"ey" = -6,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -13,"sturn" = 110,"wturn" = -60,"eturn" = -30,"nflip" = 1,"sflip" = 1,"wflip" = 8,"eflip" = 1) + if("onback") return list("shrink" = 0.5,"sx" = -1,"sy" = 2,"nx" = 0,"ny" = 2,"wx" = 2,"wy" = 1,"ex" = 0,"ey" = 1,"nturn" = 0,"sturn" = 0,"wturn" = 70,"eturn" = 15,"nflip" = 1,"sflip" = 1,"wflip" = 1,"eflip" = 1,"northabove" = 1,"southabove" = 0,"eastabove" = 0,"westabove" = 0) + if("wielded") return list("shrink" = 0.4,"sx" = 3,"sy" = 4,"nx" = -1,"ny" = 4,"wx" = -8,"wy" = 3,"ex" = 7,"ey" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 15,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) + if("onbelt") return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) -/obj/item/rogueweapon/greatsword/elfgsword/getonmobprop(tag) +/obj/item/rogueweapon/sword/long/judgement/pickup(mob/user) . = ..() - if(tag) - switch(tag) - if("gen") - return list("shrink" = 0.6,"sx" = -6,"sy" = 6,"nx" = 6,"ny" = 7,"wx" = 0,"wy" = 5,"ex" = -1,"ey" = 7,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -50,"sturn" = 40,"wturn" = 50,"eturn" = -50,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("wielded") - return list("shrink" = 0.6,"sx" = 9,"sy" = -4,"nx" = -7,"ny" = 1,"wx" = -9,"wy" = 2,"ex" = 10,"ey" = 2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 5,"sturn" = -190,"wturn" = -170,"eturn" = -10,"nflip" = 4,"sflip" = 4,"wflip" = 1,"eflip" = 0) - if("onback") - return list("shrink" = 0.6,"sx" = -1,"sy" = 3,"nx" = -1,"ny" = 2,"wx" = 3,"wy" = 4,"ex" = -1,"ey" = 5,"nturn" = 0,"sturn" = 0,"wturn" = 70,"eturn" = 20,"nflip" = 1,"sflip" = 1,"wflip" = 1,"eflip" = 1,"northabove" = 1,"southabove" = 0,"eastabove" = 0,"westabove" = 0) - - -// Attack Intents - -/datum/intent/sword/cut/zwei - name = "cut" - blade_class = BCLASS_CUT - attack_verb = list("cuts", "slashes") - icon_state = "incut" - damfactor = 0.8 - hitsound = list('sound/combat/hits/bladed/genslash (1).ogg', 'sound/combat/hits/bladed/genslash (2).ogg', 'sound/combat/hits/bladed/genslash (3).ogg') - reach = 1 - swingdelay = 1 - misscost = 5 - -/datum/intent/sword/thrust/zwei - name = "thrust" - blade_class = BCLASS_STAB - attack_verb = list("stabs") - animname = "stab" - icon_state = "instab" - reach = 1 - chargetime = 1 - warnie = "mobwarning" - hitsound = list('sound/combat/hits/bladed/genstab (1).ogg', 'sound/combat/hits/bladed/genstab (2).ogg', 'sound/combat/hits/bladed/genstab (3).ogg') - penfactor = 20 - swingdelay = 1 - misscost = 5 - -/datum/intent/sword/strike - name = "pommel strike" - icon_state = "instrike" - attack_verb = list("bashes", "clubs") - animname = "strike" - blade_class = BCLASS_BLUNT - hitsound = list('sound/combat/hits/blunt/metalblunt (1).ogg', 'sound/combat/hits/blunt/metalblunt (2).ogg', 'sound/combat/hits/blunt/metalblunt (3).ogg') - chargetime = 0 - penfactor = 25 - swingdelay = 1 - damfactor = 0.8 - - -/datum/intent/longsword/thrust - name = "stab" - icon_state = "instab" - attack_verb = list("stabs") - animname = "stab" - blade_class = BCLASS_STAB - hitsound = list('sound/combat/hits/bladed/genstab (1).ogg', 'sound/combat/hits/bladed/genstab (2).ogg', 'sound/combat/hits/bladed/genstab (3).ogg') - penfactor = 20 - reach = 2 - misscost = 10 - -/datum/intent/longsword/chop - name = "chop" - icon_state = "inchop" - attack_verb = list("chops", "hacks") - animname = "chop" - blade_class = BCLASS_CHOP - hitsound = list('sound/combat/hits/bladed/genchop (1).ogg', 'sound/combat/hits/bladed/genchop (2).ogg', 'sound/combat/hits/bladed/genchop (3).ogg') - penfactor = 20 - damfactor = 1.1 - chargetime = 1.2 - swingdelay = 1.5 - misscost = 15 - warnie = "mobwarning" - -/datum/intent/sword/chop - name = "chop" - icon_state = "inchop" - attack_verb = list("chops", "hacks") - animname = "chop" - blade_class = BCLASS_CHOP - hitsound = list('sound/combat/hits/bladed/genchop (1).ogg', 'sound/combat/hits/bladed/genchop (2).ogg', 'sound/combat/hits/bladed/genchop (3).ogg') - penfactor = 15 - damfactor = 1.1 - swingdelay = 1 + var/mob/living/carbon/human/H = user + if(ishuman(H)) + if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/lesser)) + to_chat(H, "I can't pick up the silver, it is my BANE!") + H.Knockdown(30) + H.adjustFireLoss(60) + H.Paralyze(1) + H.fire_act(1,5) + if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/)) + var/datum/antagonist/vampirelord/V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) + if(V_lord.vamplevel < 4 && !H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser)) + to_chat(H, "I can't pick up the silver, it is my BANE!") + H.Knockdown(10) + H.Paralyze(1) -/obj/item/rogueweapon/sword/long/exe - possible_item_intents = list(/datum/intent/sword/strike) - gripped_intents = list(/datum/intent/sword/chop) - icon_state = "exe" - name = "executioner's sword" - desc = "An ancient blade of ginormous stature, with a round ended tip. The pride and joy of Roguetown's greatest pastime, executions." - minstr = 10 - slot_flags = ITEM_SLOT_BACK +/obj/item/rogueweapon/sword/long/vlord // this sprite is a one handed sword, not a longsword. + force = DAMAGE_SWORD + force_wielded = DAMAGE_LONGSWORD_WIELD+2 + icon_state = "vlord" + name = "Jaded Fang" + desc = "An ancestral long blade with an ominous glow, serrated with barbs along it's edges. Stained with a strange green tint." + sellprice = 363 + static_price = TRUE -/obj/item/rogueweapon/sword/long/exe/getonmobprop(tag) +/obj/item/rogueweapon/sword/long/vlord/getonmobprop(tag) . = ..() if(tag) switch(tag) @@ -758,127 +597,65 @@ return list("shrink" = 0.6,"sx" = -6,"sy" = 6,"nx" = 6,"ny" = 7,"wx" = 0,"wy" = 5,"ex" = -1,"ey" = 7,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -50,"sturn" = 40,"wturn" = 50,"eturn" = -50,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) if("wielded") return list("shrink" = 0.6,"sx" = 9,"sy" = -4,"nx" = -7,"ny" = 1,"wx" = -9,"wy" = 2,"ex" = 10,"ey" = 2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 5,"sturn" = -190,"wturn" = -170,"eturn" = -10,"nflip" = 8,"sflip" = 8,"wflip" = 1,"eflip" = 0) - if("onback") - return list("shrink" = 0.6,"sx" = -1,"sy" = 3,"nx" = -1,"ny" = 2,"wx" = 3,"wy" = 4,"ex" = -1,"ey" = 5,"nturn" = 0,"sturn" = 0,"wturn" = 70,"eturn" = 20,"nflip" = 1,"sflip" = 1,"wflip" = 1,"eflip" = 1,"northabove" = 1,"southabove" = 0,"eastabove" = 0,"westabove" = 0) - -/obj/item/rogueweapon/sword/long/exe/cloth - icon_state = "terminusest" - name = "Terminus Est" - -/obj/item/rogueweapon/sword/long/exe/cloth/rmb_self(mob/user) - user.changeNext_move(CLICK_CD_MELEE) - playsound(user, "clothwipe", 100, TRUE) - SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRONG) - user.visible_message("[user] wipes [src] down with its cloth.","I wipe [src] down with its cloth.") - return - -//Short Swords -/obj/item/rogueweapon/sword/iron - name = "sword" - desc = "A simple iron sword with a tested edge, sharp and true." - icon_state = "isword" - minstr = 6 - force = 15 // Iron tier. Higher than steel daggers, still. - force_wielded = 20 - smeltresult = /obj/item/ingot/iron - max_blade_int = 200 - max_integrity = 300 - sellprice = 15 - -/obj/item/rogueweapon/sword/iron/short - name = "short sword" - desc = "An iron sword of shortened design, a reduced grip for primarily single hand use." - icon_state = "iswordshort" - possible_item_intents = list(/datum/intent/sword/cut/short, /datum/intent/sword/thrust/short) - gripped_intents = null - max_integrity = 200 - minstr = 4 - wdefense = 3 - wbalance = 1 - -/obj/item/rogueweapon/sword/iron/short/chipped - desc = "An ancient-looking iron sword that has seen better days." - force = 12 - icon_state = "iswordshort_d" - max_integrity = 75 - -/datum/intent/sword/cut/short - clickcd = 10 - damfactor = 0.85 - -/datum/intent/sword/thrust/short - clickcd = 10 - penfactor = 30 - -/obj/item/rogueweapon/sword/iron/messer - name = "iron messer" - desc = "A single edged blade fashioned in the Grenzelhoft messer style." - force = 18 // Can't be dual wielded, but shouldn't be higher than a steel equivalent. - icon_state = "imesser" - swingsound = BLADEWOOSH_LARGE - possible_item_intents = list(/datum/intent/sword/cut, /datum/intent/axe/chop) - gripped_intents = null - max_blade_int = 250 - max_integrity = 350 - minstr = 8 // Heavy blade used by orcs - wdefense = 3 - wbalance = -1 // Heavy, STR bonus - sellprice = 20 + if("onbelt") + return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) -/obj/item/rogueweapon/sword/iron/messer/peasant - name = "scythe sword" - desc = "A simple scythe blade has been fastened to a wooden handle to create an improvised weapon." - force = 18 // Can't be dual wielded, but shouldn't be higher than a steel equivalent. - icon_state = "scytheblade" +/obj/item/rogueweapon/sword/long/rider + possible_item_intents = list(/datum/intent/sword/cut/sabre, /datum/intent/sword/strike) + gripped_intents = list(/datum/intent/sword/cut/sabre, /datum/intent/sword/strike, /datum/intent/sword/chop/long) + icon_state = "tabi" + name = "kilij scimitar" + force = DAMAGE_SWORD-2 + desc = "A curved blade of Zybantu origin meaning 'curved one'. The standard sword that saw the conquest of the Zybantine continent and peoples." + sellprice = 80 +/obj/item/rogueweapon/sword/long/rider/getonmobprop(tag) + . = ..() + if(tag) + switch(tag) + if("gen") + return list("shrink" = 0.6,"sx" = -10,"sy" = -8,"nx" = 13,"ny" = -8,"wx" = -8,"wy" = -7,"ex" = 7,"ey" = -8,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 90,"sturn" = -90,"wturn" = -80,"eturn" = 81,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("wielded") + return list("shrink" = 0.6,"sx" = 3,"sy" = 4,"nx" = -1,"ny" = 4,"wx" = -8,"wy" = 3,"ex" = 7,"ey" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 15,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) + if("onbelt") + return list("shrink" = 0.5,"sx" = -4,"sy" = -6,"nx" = 5,"ny" = -6,"wx" = 0,"wy" = -6,"ex" = -1,"ey" = -6,"nturn" = 100,"sturn" = 156,"wturn" = 90,"eturn" = 180,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) -/obj/item/rogueweapon/sword/short - name = "short sword" - desc = "An archaic steel sword made for penetrating the bodies of impudents." - possible_item_intents = list(/datum/intent/sword/cut/short, /datum/intent/sword/thrust/short) - icon_state = "swordshort" - gripped_intents = null - minstr = 4 - wdefense = 4 - max_blade_int = 250 - max_integrity = 350 - wbalance = 1 - smeltresult = /obj/item/ingot/steel -/obj/item/rogueweapon/sword/short/silver - name = "silver short sword" - desc = "A single-edged sword made of silver. Can cut through the undead like butter." - force = 18 // .9 of normal steel sword's damage - possible_item_intents = list(/datum/intent/sword/cut/short, /datum/intent/sword/thrust/short) - icon_state = "swordshort_s" - gripped_intents = null - minstr = 4 - wdefense = 4 - max_blade_int = 200 // Blade int and durability is .8 steel - max_integrity = 280 - wbalance = 1 +/obj/item/rogueweapon/sword/long/forgotten + force = DAMAGE_SWORD-2 + force_wielded = DAMAGE_LONGSWORD_WIELD-2 + possible_item_intents = list(/datum/intent/sword/cut, /datum/intent/sword/thrust, /datum/intent/sword/strike) + gripped_intents = list(/datum/intent/sword/cut, /datum/intent/sword/thrust/long, /datum/intent/sword/strike, /datum/intent/sword/chop/long) + icon_state = "forgotten" + name = "forgotten blade" + desc = "A large silver-alloy sword made in a revisionist style, honoring the Forgotten God. Best known as the prefered weapon of Inquisitorial Lodges" + max_blade_int = 240 // Integrity and blade retention is .8 of a steel sword + max_integrity = 400 smeltresult = /obj/item/ingot/silver - sellprice = 45 - var/last_used = 0 + wbalance = -1 + wdefense = 4 + sellprice = 90 + last_used = 0 + is_silver = TRUE -/obj/item/rogueweapon/sword/short/silver/pickup(mob/user) +/obj/item/rogueweapon/sword/long/forgotten/pickup(mob/user) . = ..() var/mob/living/carbon/human/H = user if(ishuman(H)) if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/lesser)) to_chat(H, "I can't pick up the silver, it is my BANE!") H.Knockdown(20) - H.adjustFireLoss(60) - H.Paralyze(20) + H.adjustFireLoss(40) + H.Paralyze(1) H.fire_act(1,5) if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/)) var/datum/antagonist/vampirelord/V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) if(V_lord.vamplevel < 4 && !H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser)) to_chat(H, "I can't pick up the silver, it is my BANE!") H.Knockdown(10) - H.Paralyze(10) + H.Paralyze(1) -/obj/item/rogueweapon/sword/short/silver/mob_can_equip(mob/living/M, mob/living/equipper, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE) +/obj/item/rogueweapon/sword/long/forgotten/mob_can_equip(mob/living/M, mob/living/equipper, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE) . = ..() if(ishuman(M)) var/datum/antagonist/vampirelord/V_lord = FALSE @@ -887,307 +664,128 @@ V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/lesser)) H.Knockdown(20) - H.adjustFireLoss(60) - H.Paralyze(20) + H.adjustFireLoss(40) + H.Paralyze(1) H.fire_act(1,5) if(V_lord) if(V_lord.vamplevel < 4 && !H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser)) H.Knockdown(10) - H.Paralyze(10) - -/obj/item/rogueweapon/sword/short/silver/funny_attack_effects(mob/living/target, mob/living/user = usr, nodmg) - if(world.time < src.last_used + 100) - to_chat(user, "The silver effect is on cooldown.") - return - - - - . = ..() - if(ishuman(target)) - var/mob/living/carbon/human/s_user = user - var/mob/living/carbon/human/H = target - var/datum/antagonist/vampirelord/lesser/V = FALSE - if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/lesser)) - V = H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser) - var/datum/antagonist/vampirelord/V_lord = FALSE - if(H.mind.has_antag_datum(/datum/antagonist/vampirelord/)) - V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) - if(V) - if(V.disguised) - H.Stun(20) - H.visible_message("The silver weapon manifests the [H] curse!") - to_chat(H, "I'm hit by my BANE!") - H.adjustFireLoss(30) - H.Paralyze(20) - H.fire_act(1,4) - H.apply_status_effect(/datum/status_effect/debuff/silver_curse) - src.last_used = world.time - else - H.Stun(20) - to_chat(H, "I'm hit by my BANE!") - H.adjustFireLoss(30) - H.Paralyze(20) - H.fire_act(1,4) - H.apply_status_effect(/datum/status_effect/debuff/silver_curse) - src.last_used = world.time - if(V_lord) - if(V_lord.vamplevel < 4 && !V) - H.Stun(10) - to_chat(H, "I'm hit by my BANE!") - H.adjustFireLoss(25) - H.Paralyze(10) - H.fire_act(1,4) - src.last_used = world.time - if(V_lord.vamplevel == 4 && !V) - s_user.Stun(10) - s_user.Paralyze(10) - to_chat(s_user, " The silver weapon fails!") - H.visible_message(H, "This feeble metal can't hurt me, I HAVE TRANSCENDED!") - -// Sabres -/obj/item/rogueweapon/sword/sabre - name = "saber" - desc = "A swift sabre, favored by duelists and cut-throats alike." - icon_state = "saber" - smeltresult = /obj/item/ingot/steel - possible_item_intents = list(/datum/intent/sword/cut/sabre, /datum/intent/sword/chop) - gripped_intents = null - parrysound = list('sound/combat/parry/bladed/bladedthin (1).ogg', 'sound/combat/parry/bladed/bladedthin (2).ogg', 'sound/combat/parry/bladed/bladedthin (3).ogg') - swingsound = BLADEWOOSH_SMALL - minstr = 5 - wdefense = 5 - wbalance = 1 - -/datum/intent/sword/cut/sabre - name = "strike" - icon_state = "incut" - attack_verb = list("cuts", "slashes") - animname = "cut" - blade_class = BCLASS_CUT - chargetime = 0 - hitsound = list('sound/combat/hits/bladed/genslash (1).ogg', 'sound/combat/hits/bladed/genslash (2).ogg', 'sound/combat/hits/bladed/genslash (3).ogg') - penfactor = 15 - -/obj/item/rogueweapon/sword/sabre/dec - name = "decorated saber" - desc = "A saber decorated with fashionable gold accents without sacrificing its lethal practicality." - icon_state = "decsaber" - max_integrity = 550 - smeltresult = /obj/item/ingot/steel - gripped_intents = null - parrysound = list('sound/combat/parry/bladed/bladedthin (1).ogg', 'sound/combat/parry/bladed/bladedthin (2).ogg', 'sound/combat/parry/bladed/bladedthin (3).ogg') - swingsound = BLADEWOOSH_SMALL - minstr = 6 - wdefense = 5 - wbalance = 1 - sellprice = 140 - -/obj/item/rogueweapon/sword/sabre/messer //not IRL sabre, but its a one handed cutting weapon, way lower defense, but has higher damage and the axe chop intent - name = "falchion" - desc = "A broad steel falchion, a favored sword among the few created by dwarffolk." - force = 20 - icon_state = "falchion" + H.Paralyze(1) + +//................ Greatsword ............... // +/obj/item/rogueweapon/sword/long/greatsword + force = DAMAGE_SWORD_WIELD //If someone can one-hand this, props to them. + force_wielded = DAMAGE_GREATSWORD_WIELD + possible_item_intents = list(/datum/intent/sword/chop, /datum/intent/sword/strike) + gripped_intents = list(/datum/intent/sword/chop, /datum/intent/sword/chop/great, /datum/intent/sword/strike) //You get chop, bigger chop, and half-swording. + name = "greatsword" + desc = "An oversized hunk of steel designed for putting fear into the hearts of men and felling beasts." //MY BROTHER, COME JOIN ME. + icon_state = "gsw" swingsound = BLADEWOOSH_HUGE - smeltresult = /obj/item/ingot/steel - possible_item_intents = list(/datum/intent/sword/cut/sabre, /datum/intent/sword/thrust, /datum/intent/axe/chop) - gripped_intents = null - minstr = 4 - wdefense = 2 - wbalance = -1 // Heavy - sellprice = 100 - -/obj/item/rogueweapon/sword/sabre/glaive - name = "stalker glaive" - desc = "A once elegant blade of mythril, diminishing under the suns gaze" - icon_state = "spidersaber" - max_integrity = 350 - smeltresult = /obj/item/ingot/steel - gripped_intents = null - possible_item_intents = list(/datum/intent/sword/cut/sabre, /datum/intent/sword/thrust/short) - parrysound = list('sound/combat/parry/bladed/bladedthin (1).ogg', 'sound/combat/parry/bladed/bladedthin (2).ogg', 'sound/combat/parry/bladed/bladedthin (3).ogg') - swingsound = BLADEWOOSH_SMALL - minstr = 4 - wdefense = 5 - wbalance = 1 + wlength = WLENGTH_GREAT + slot_flags = ITEM_SLOT_BACK + minstr = 13 //Requirement is halved when wielded in two hands either way. No sane person should be thinking of using this one-handed. + wbalance = EASY_TO_DODGE + sellprice = 90 +/obj/item/rogueweapon/sword/long/greatsword/getonmobprop(tag) + . = ..() + if(tag) + switch(tag) + if("gen") + return list("shrink" = 0.6,"sx" = -6,"sy" = 6,"nx" = 6,"ny" = 7,"wx" = 0,"wy" = 5,"ex" = -1,"ey" = 7,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -50,"sturn" = 40,"wturn" = 50,"eturn" = -50,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("wielded") + return list("shrink" = 0.6,"sx" = 3,"sy" = 4,"nx" = -1,"ny" = 4,"wx" = -8,"wy" = 3,"ex" = 7,"ey" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 15,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) + if("onback") + return list("shrink" = 0.6,"sx" = -1,"sy" = 3,"nx" = -1,"ny" = 2,"wx" = 3,"wy" = 4,"ex" = -1,"ey" = 5,"nturn" = 0,"sturn" = 0,"wturn" = 70,"eturn" = 20,"nflip" = 1,"sflip" = 1,"wflip" = 1,"eflip" = 1,"northabove" = 1,"southabove" = 0,"eastabove" = 0,"westabove" = 0) -//Rapiers -/obj/item/rogueweapon/sword/rapier - name = "rapier" - desc = "A precise rapier, favored by the small, eloquent and bloodthirsty." - icon_state = "rapier" - smeltresult = /obj/item/ingot/steel - possible_item_intents = list(/datum/intent/sword/thrust/rapier, /datum/intent/sword/cut/rapier) - gripped_intents = null - parrysound = "rapier" - swingsound = BLADEWOOSH_SMALL - minstr = 6 - wdefense = 5 - wbalance = 1 +//................ Flamberge ............... // +/obj/item/rogueweapon/sword/long/greatsword/flamberge + name = "flamberge" + desc = "Commonly known as a flame-bladed sword, this weapon has an undulating blade. It's wave-like form distributes force better, and is less likely to break on impact." + icon_state = "flamberge" + wbalance = DODGE_CHANCE_NORMAL //Leaving this here, but it stops it from benefitting from having higher strenght when parried. + sellprice = 120 -/obj/item/rogueweapon/sword/rapier/ironestoc - name = "iron estoc" - force = 16 - desc = "A precise iron estoc, favored by the skilled duelists of Valoria." - icon_state = "estoc" +/obj/item/rogueweapon/sword/long/greatsword/zwei + possible_item_intents = list(/datum/intent/sword/cut/zwei, /datum/intent/sword/thrust/zwei, /datum/intent/sword/strike) + gripped_intents = list(/datum/intent/sword/cut, /datum/intent/sword/thrust/long, /datum/intent/sword/strike, /datum/intent/sword/chop/great) //I don't know why this doesn't already use zweihander specific intents so I'm leaving it here. Also it can thrust which a normal greatsword cannot. + force = DAMAGE_SWORD + force_wielded = DAMAGE_LONGSWORD_WIELD + name = "zweihander" + desc = "Sometimes known as a doppelhander or beidhander, this weapon's size is so impressive that it's handling properties are more akin to that of a polearm than a sword." + icon_state = "steelzwei" smeltresult = /obj/item/ingot/iron - possible_item_intents = list(/datum/intent/sword/thrust/rapier, /datum/intent/sword/cut/rapier) - gripped_intents = null - parrysound = "rapier" - swingsound = BLADEWOOSH_SMALL - minstr = 6 - wdefense = 5 - wbalance = 1 - -/datum/intent/sword/cut/rapier - name = "strike" - icon_state = "incut" - attack_verb = list("cuts", "slashes") - animname = "cut" - blade_class = BCLASS_CUT - chargetime = 0 - hitsound = list('sound/combat/hits/bladed/genslash (1).ogg', 'sound/combat/hits/bladed/genslash (2).ogg', 'sound/combat/hits/bladed/genslash (3).ogg') - penfactor = 20 - misscost = 5 + max_blade_int = 150 // Iron tier + max_integrity = 300 + minstr = 11 + sellprice = 60 -/datum/intent/sword/thrust/rapier - name = "stab" - icon_state = "instab" - attack_verb = list("stabs") - animname = "stab" - blade_class = BCLASS_STAB - hitsound = list('sound/combat/hits/bladed/genstab (1).ogg', 'sound/combat/hits/bladed/genstab (2).ogg', 'sound/combat/hits/bladed/genstab (3).ogg') - penfactor = 40 - misscost = 5 +/obj/item/rogueweapon/sword/long/greatsword/zwei/getonmobprop(tag) + . = ..() + if(tag) + switch(tag) + if("gen") + return list("shrink" = 0.6,"sx" = -6,"sy" = 6,"nx" = 6,"ny" = 7,"wx" = 0,"wy" = 5,"ex" = -1,"ey" = 7,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -50,"sturn" = 40,"wturn" = 50,"eturn" = -50,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("wielded") + return list("shrink" = 0.6,"sx" = 9,"sy" = -4,"nx" = -7,"ny" = 1,"wx" = -9,"wy" = 2,"ex" = 10,"ey" = 2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 5,"sturn" = -190,"wturn" = -170,"eturn" = -10,"nflip" = 4,"sflip" = 4,"wflip" = 1,"eflip" = 0) + if("onback") + return list("shrink" = 0.6,"sx" = -1,"sy" = 3,"nx" = -1,"ny" = 2,"wx" = 3,"wy" = 4,"ex" = -1,"ey" = 5,"nturn" = 0,"sturn" = 0,"wturn" = 70,"eturn" = 20,"nflip" = 1,"sflip" = 1,"wflip" = 1,"eflip" = 1,"northabove" = 1,"southabove" = 0,"eastabove" = 0,"westabove" = 0) -/obj/item/rogueweapon/sword/rapier/dec - icon_state = "decrapier" - desc = "A rapier decorated with gold inlaid on its hilt. A regal weapon fit for nobility." - max_integrity = 550 - sellprice = 140 +//................ Kriegsmesser ............... // +/obj/item/rogueweapon/sword/long/kriegsmesser + name = "elven kriegsmesser" + desc = "A long, curved elven blade. It's metal is of a high quality, yet still light, crafted by the greatest elven bladesmiths." + icon_state = "kriegsmesser" + wdefense = ULTMATE_PARRY + minstr = 10 + sellprice = 120 -/obj/item/rogueweapon/sword/rapier/lord - force = 25 - name = "Kings Sword" - desc = "Passed down through the ages, a weapon that once carved a kingdom out now relegated to a decorative piece." - icon_state = "lordrap" - sellprice = 300 - max_integrity = 600 - max_blade_int = 400 - wdefense = 7 +/obj/item/rogueweapon/sword/long/kriegsmesser/getonmobprop(tag) + . = ..() + if(tag) + switch(tag) + if("gen") + return list("shrink" = 0.6,"sx" = -6,"sy" = 6,"nx" = 6,"ny" = 7,"wx" = 0,"wy" = 5,"ex" = -1,"ey" = 7,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -50,"sturn" = 40,"wturn" = 50,"eturn" = -50,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("wielded") + return list("shrink" = 0.6,"sx" = 9,"sy" = -4,"nx" = -7,"ny" = 1,"wx" = -9,"wy" = 2,"ex" = 10,"ey" = 2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 5,"sturn" = -190,"wturn" = -170,"eturn" = -10,"nflip" = 4,"sflip" = 4,"wflip" = 1,"eflip" = 0) + if("onback") + return list("shrink" = 0.6,"sx" = -1,"sy" = 3,"nx" = -1,"ny" = 2,"wx" = 3,"wy" = 4,"ex" = -1,"ey" = 5,"nturn" = 0,"sturn" = 0,"wturn" = 70,"eturn" = 20,"nflip" = 1,"sflip" = 1,"wflip" = 1,"eflip" = 1,"northabove" = 1,"southabove" = 0,"eastabove" = 0,"westabove" = 0) -/obj/item/rogueweapon/sword/rapier/silver - name = "silver rapier" - desc = "An elegant silver rapier. Popular with lords and ladies in Valoria." - force = 18 // .9 of base steel - icon_state = "rapier_s" - smeltresult = /obj/item/ingot/silver - possible_item_intents = list(/datum/intent/sword/thrust/rapier, /datum/intent/sword/cut/rapier) - parrysound = list('sound/combat/parry/bladed/bladedthin (1).ogg', 'sound/combat/parry/bladed/bladedthin (2).ogg', 'sound/combat/parry/bladed/bladedthin (3).ogg') - swingsound = BLADEWOOSH_SMALL - minstr = 6 - wdefense = 5 - wbalance = 1 - max_blade_int = 240 // .8 of base steel - max_integrity = 400 // .8 of base steel - sellprice = 45 - var/last_used = 0 -/obj/item/rogueweapon/sword/rapier/silver/pickup(mob/user) - . = ..() - var/mob/living/carbon/human/H = user - if(ishuman(H)) - if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/lesser)) - to_chat(H, "I can't pick up the silver, it is my BANE!") - H.Knockdown(20) - H.adjustFireLoss(60) - H.Paralyze(20) - H.fire_act(1,5) - if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/)) - var/datum/antagonist/vampirelord/V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) - if(V_lord.vamplevel < 4 && !H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser)) - to_chat(H, "I can't pick up the silver, it is my BANE!") - H.Knockdown(10) - H.Paralyze(10) +//................ Executioners Sword ............... // +/obj/item/rogueweapon/sword/long/exe + possible_item_intents = list(/datum/intent/sword/strike) + gripped_intents = list(/datum/intent/sword/chop) //This is using the quicker, normal sword chop, but I'll pretend it's a feature. + icon_state = "exe" + name = "executioner's sword" + desc = "An ancient blade of ginormous stature, with a round ended tip. The pride and joy of Roguetown's greatest pastime, executions." + minstr = 10 + slot_flags = ITEM_SLOT_BACK -/obj/item/rogueweapon/sword/rapier/silver/mob_can_equip(mob/living/M, mob/living/equipper, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE) +/obj/item/rogueweapon/sword/long/exe/getonmobprop(tag) . = ..() - if(ishuman(M)) - var/datum/antagonist/vampirelord/V_lord = FALSE - var/mob/living/carbon/human/H = M - if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord)) - V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) - if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/lesser)) - H.Knockdown(20) - H.adjustFireLoss(60) - H.Paralyze(20) - H.fire_act(1,5) - if(V_lord) - if(V_lord.vamplevel < 4 && !H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser)) - H.Knockdown(10) - H.Paralyze(10) - -/obj/item/rogueweapon/sword/rapier/silver/funny_attack_effects(mob/living/target, mob/living/user = usr, nodmg) - if(world.time < src.last_used + 100) - to_chat(user, "The silver effect is on cooldown.") - return + if(tag) + switch(tag) + if("gen") + return list("shrink" = 0.6,"sx" = -6,"sy" = 6,"nx" = 6,"ny" = 7,"wx" = 0,"wy" = 5,"ex" = -1,"ey" = 7,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -50,"sturn" = 40,"wturn" = 50,"eturn" = -50,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("wielded") + return list("shrink" = 0.6,"sx" = 9,"sy" = -4,"nx" = -7,"ny" = 1,"wx" = -9,"wy" = 2,"ex" = 10,"ey" = 2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 5,"sturn" = -190,"wturn" = -170,"eturn" = -10,"nflip" = 8,"sflip" = 8,"wflip" = 1,"eflip" = 0) + if("onback") + return list("shrink" = 0.6,"sx" = -1,"sy" = 3,"nx" = -1,"ny" = 2,"wx" = 3,"wy" = 4,"ex" = -1,"ey" = 5,"nturn" = 0,"sturn" = 0,"wturn" = 70,"eturn" = 20,"nflip" = 1,"sflip" = 1,"wflip" = 1,"eflip" = 1,"northabove" = 1,"southabove" = 0,"eastabove" = 0,"westabove" = 0) +//................ Terminus Est ............... // +/obj/item/rogueweapon/sword/long/exe/cloth + icon_state = "terminusest" + name = "Terminus Est" +/obj/item/rogueweapon/sword/long/exe/cloth/rmb_self(mob/user) + user.changeNext_move(CLICK_CD_MELEE) + playsound(user, "clothwipe", 100, TRUE) + SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRONG) + user.visible_message("[user] wipes [src] down with its cloth.","I wipe [src] down with its cloth.") + return - . = ..() - if(ishuman(target)) - var/mob/living/carbon/human/s_user = user - var/mob/living/carbon/human/H = target - var/datum/antagonist/vampirelord/lesser/V = FALSE - if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/lesser)) - V = H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser) - var/datum/antagonist/vampirelord/V_lord = FALSE - if(H.mind.has_antag_datum(/datum/antagonist/vampirelord/)) - V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) - if(V) - if(V.disguised) - H.Stun(20) - H.visible_message("The silver weapon manifests the [H] curse!") - to_chat(H, "I'm hit by my BANE!") - H.adjustFireLoss(30) - H.Paralyze(20) - H.fire_act(1,4) - H.apply_status_effect(/datum/status_effect/debuff/silver_curse) - src.last_used = world.time - else - H.Stun(20) - to_chat(H, "I'm hit by my BANE!") - H.adjustFireLoss(30) - H.Paralyze(20) - H.fire_act(1,4) - H.apply_status_effect(/datum/status_effect/debuff/silver_curse) - src.last_used = world.time - if(V_lord) - if(V_lord.vamplevel < 4 && !V) - H.Stun(10) - to_chat(H, "I'm hit by my BANE!") - H.adjustFireLoss(25) - H.Paralyze(10) - H.fire_act(1,4) - src.last_used = world.time - if(V_lord.vamplevel == 4 && !V) - s_user.Stun(10) - s_user.Paralyze(10) - to_chat(s_user, " The silver weapon fails!") - H.visible_message(H, "This feeble metal can't hurt me, I HAVE TRANSCENDED!") - -// Cutless -/obj/item/rogueweapon/sword/cutlass - name = "cutlass" - desc = "Both tool and weapon of war, favored by Abyssor cultists and sailors for seafaring battle." - icon_state = "cutlass" - possible_item_intents = list(/datum/intent/sword/cut/sabre, /datum/intent/sword/chop) - gripped_intents = null - parrysound = "rapier" - swingsound = BLADEWOOSH_SMALL - minstr = 6 - wdefense = 5 - wbalance = 1 // Copper Messer @@ -1258,6 +856,8 @@ dropshrink = 0.75 smeltresult = /obj/item/ingot/copper sellprice = 25//lets make the two bars worth it + sellprice = 25//lets make the two bars worth it + // Hoplite Kophesh /obj/item/rogueweapon/sword/khopesh diff --git a/code/game/objects/items/rogueweapons/melee/whips.dm b/code/game/objects/items/rogueweapons/melee/whips.dm index 69904b9ac8..1a4a178b17 100644 --- a/code/game/objects/items/rogueweapons/melee/whips.dm +++ b/code/game/objects/items/rogueweapons/melee/whips.dm @@ -1,5 +1,8 @@ +/* WHIPS +==========================================================*/ + /obj/item/rogueweapon/whip - force = 20 + force = DAMAGE_WHIP possible_item_intents = list(/datum/intent/whip/crack, /datum/intent/whip/lash) name = "whip" desc = "A leather whip, intertwining rope, leather and a fanged tip to inflict enormous pain. Favored by slavers and beast-tamers." @@ -31,17 +34,9 @@ return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) -/obj/item/rogueweapon/whip/antique - force = 25 - name = "Repenta En" - desc = "An extremely well maintained whip, with a polished steel tip and gilded handle" - minstr = 7 - icon_state = "gwhip" - resistance_flags = FIRE_PROOF - smeltresult = /obj/item/ingot/steel - sellprice = 50 - - +/*------------\ +| Lash intent | +\------------*/ /datum/intent/whip/lash name = "lash" blade_class = BCLASS_LASHING @@ -49,12 +44,15 @@ hitsound = list('sound/combat/hits/blunt/flailhit.ogg') chargetime = 5 recovery = 5 - penfactor = 10 + penfactor = 5 reach = 2 misscost = 7 icon_state = "inlash" canparry = FALSE //Has reach and can't be parried, but needs to be charged and punishes misses. +/*-------------\ +| Crack intent | +\-------------*/ /datum/intent/whip/crack name = "crack" blade_class = BCLASS_BLUNT @@ -67,8 +65,43 @@ icon_state = "incrack" canparry = TRUE +//................ Repenta En ............... // +/obj/item/rogueweapon/whip/antique + force = DAMAGE_WHIP+4 + name = "Repenta En" + desc = "An extremely well maintained whip, with a polished steel tip and gilded handle." + minstr = 7 + icon_state = "gwhip" + resistance_flags = FIRE_PROOF + smeltresult = /obj/item/ingot/steel + sellprice = 50 + +/obj/item/rogueweapon/whip/antique/silver + name = "Contemptum" + desc = "An extremely well maintained whip, with a gleaming silver tip and gilded handle. Both bane and punishment." + last_used = 0 + is_silver = TRUE + +/obj/item/rogueweapon/whip/antique/silver/pickup(mob/user) + . = ..() + var/mob/living/carbon/human/H = user + if(ishuman(H)) + if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/lesser)) + to_chat(H, "I can't pick up the silver, it is my BANE!") + H.Knockdown(30) + H.Paralyze(1) + H.adjustFireLoss(40) + H.fire_act(1,5) + if(H.mind?.has_antag_datum(/datum/antagonist/vampirelord/)) + var/datum/antagonist/vampirelord/V_lord = H.mind.has_antag_datum(/datum/antagonist/vampirelord/) + if(V_lord.vamplevel < 4 && !H.mind.has_antag_datum(/datum/antagonist/vampirelord/lesser)) + to_chat(H, "I can't pick up the silver, it is my BANE!") + H.Knockdown(10) + H.Paralyze(1) + +//................ Lashkiss Whip ............... // /obj/item/rogueweapon/whip/spiderwhip - force = 30 + force = DAMAGE_WHIP+3 name = "lashkiss whip" desc = "A dark whip with segmented, ashen spines for a base. Claimed to be hewn from dendrified prisoners of terror." icon_state = "spiderwhip" diff --git a/code/game/objects/items/rogueweapons/ranged/ammo.dm b/code/game/objects/items/rogueweapons/ranged/ammo.dm index 348e131626..e3e913da15 100644 --- a/code/game/objects/items/rogueweapons/ranged/ammo.dm +++ b/code/game/objects/items/rogueweapons/ranged/ammo.dm @@ -1,5 +1,5 @@ -#define ARROW_DAMAGE 30 -#define BOLT_DAMAGE 40 +#define ARROW_DAMAGE 35 +#define BOLT_DAMAGE 45 #define BULLET_DAMAGE 80 #define ARROW_PENETRATION 25 #define BOLT_PENETRATION 50 diff --git a/code/game/objects/items/rogueweapons/rogueweapon.dm b/code/game/objects/items/rogueweapons/rogueweapon.dm index 263cf87728..b71af7d8e1 100644 --- a/code/game/objects/items/rogueweapons/rogueweapon.dm +++ b/code/game/objects/items/rogueweapons/rogueweapon.dm @@ -1,12 +1,88 @@ +// ===== WEAPON DAMAGE DEFINES ======= +#define DAMAGE_AXE 20 +#define DAMAGE_AXE_WIELD 25 +#define DAMAGE_HEAVYAXE_WIELD 30 +#define DAMAGE_BAD_AXE 13 +#define DAMAGE_BAD_AXE_WIELD 18 +#define DAMAGE_WEAK_FLAIL 17 +#define DAMAGE_NORMAL_FLAIL 23 +#define DAMAGE_GOOD_FLAIL 28 + +#define DAMAGE_CLUB 15 +#define DAMAGE_CLUB_WIELD 20 +#define DAMAGE_MACE 20 +#define DAMAGE_MACE_WIELD 25 +#define DAMAGE_HEAVYCLUB_WIELD 30 + +#define DAMAGE_KNIFE 10 +#define DAMAGE_DAGGER 12 + +#define DAMAGE_STAFF 12 +#define DAMAGE_STAFF_WIELD 23 //Even a wooden quarterstaff is a devastating weapon. +#define DAMAGE_SPEAR 15 +#define DAMAGE_SPEARPLUS 18 +#define DAMAGE_SPEAR_WIELD 25 +#define DAMAGE_HALBERD_WIELD 35 + +#define DAMAGE_SHORTSWORD 16 +#define DAMAGE_SWORD 20 +#define DAMAGE_SWORD_WIELD 25 +#define DAMAGE_LONGSWORD_WIELD 28 +#define DAMAGE_GREATSWORD_WIELD 35 + +#define DAMAGE_WHIP 20 + +// ===== AP DEFINES ======= +#define AP_AXE_CUT 10 +#define AP_AXE_CHOP 15 +#define AP_HEAVYAXE_CHOP 25 +#define AP_HEAVYAXE_STAB 35 + +#define AP_FLAIL_STRIKE 5 +#define AP_FLAIL_SMASH 60 +#define AP_CLUB_STRIKE 25 +#define AP_CLUB_SMASH 35 +#define AP_HEAVY_SMASH 45 + +#define AP_SPEAR_POKE 20 +#define AP_POLEARM_THRUST 45 +#define AP_POLEARM_BASH 5 +#define AP_POLEARM_CHOP 30 //Slightly less AP than a heavy axe's chop, still represents the ease with which a halberd or similar chop could get through earlier maille. + +#define AP_SWORD_THRUST 20 +#define AP_SWORD_CHOP 5 +#define AP_SABRE_CUT 18 +#define AP_SABRE_CHOP 13 +#define AP_RAPIER_THRUST 30 + +#define AP_DAGGER_STAB 30 +#define AP_DAGGER_PICK 40 +#define AP_PICK 45 + +//wdefense defines +#define TERRIBLE_PARRY -1 +#define BAD_PARRY 0 +#define MEDIOCHRE_PARRY 1 +#define AVERAGE_PARRY 2 +#define GOOD_PARRY 2.5 +#define GREAT_PARRY 3 +#define ULTMATE_PARRY 4 + +//wbalance defines +#define VERY_EASY_TO_DODGE -2 +#define EASY_TO_DODGE -1 +#define DODGE_CHANCE_NORMAL 0 +#define HARD_TO_DODGE 1 +#define VERY_HARD_TO_DODGE 2 /obj/item/rogueweapon name = "" desc = "" icon_state = "sabre" - item_state = "sabre" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + icon = 'icons/roguetown/weapons/32.dmi' + lefthand_file = 'icons/mob/inhands/weapons/rogue_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/rogue_righthand.dmi' force = 15 throwforce = 10 w_class = WEIGHT_CLASS_NORMAL @@ -31,7 +107,7 @@ experimental_onhip = TRUE experimental_onback = TRUE embedding = list( - "embed_chance" = 20, + "embed_chance" = 0, //Leave this at 0 until embed code is given an overhaul. Ideally each weapon should have a different value. Doesn't affect ranged or things like mantraps. "embedded_pain_multiplier" = 1, "embedded_fall_chance" = 0, ) @@ -76,7 +152,7 @@ else return 0 - if(nuforce < 25) //End force needs to be at least this high, after accounting for strong intent and chop. An iron messer should be able to do it, but not a dagger. + if(nuforce < 20) //End force needs to be at least this high, after accounting for strong intent and chop. An iron messer should be able to do it, but not a dagger. return 0 var/probability = (nuforce * (total_dam / affecting.max_damage) - 5) //More weight given to total damage accumulated on the limb @@ -92,5 +168,5 @@ if(hard_dismember) return min(probability, 5) else if(easy_dismember) - return probability * 1.5 + return probability * 2.0 return probability diff --git a/code/game/objects/items/rogueweapons/shields.dm b/code/game/objects/items/rogueweapons/shields.dm index aa05308a29..6ee0a34be9 100644 --- a/code/game/objects/items/rogueweapons/shields.dm +++ b/code/game/objects/items/rogueweapons/shields.dm @@ -62,6 +62,7 @@ return 0 /datum/intent/shield/bash + penfactor = AP_CLUB_STRIKE name = "bash" icon_state = "inbash" hitsound = list('sound/combat/shieldbash_wood.ogg') @@ -157,6 +158,14 @@ icon_state = "spidershield" coverage = 55 +/obj/item/rogueweapon/shield/tower/rider + name = "desert rider shield" + desc = "A shield of Zybantine design, reinforced with iron and made to protect the upper body." + icon_state = "desert_rider" + force = 15 + wdefense = 5 + coverage = 50 + /obj/item/rogueweapon/shield/tower/getonmobprop(tag) . = ..() if(tag) diff --git a/code/game/objects/items/sharpener.dm b/code/game/objects/items/sharpener.dm index 122e97828d..baa91041d2 100644 --- a/code/game/objects/items/sharpener.dm +++ b/code/game/objects/items/sharpener.dm @@ -21,9 +21,6 @@ if(requires_sharpness && !I.get_sharpness()) to_chat(user, "I can only sharpen items that are already sharp, such as knives!") return - if(istype(I, /obj/item/melee/transforming/energy)) - to_chat(user, "I don't think \the [I] will be the thing getting modified if you use it on \the [src]!") - return if(istype(I, /obj/item/twohanded))//some twohanded items should still be sharpenable, but handle force differently. therefore i need this stuff var/obj/item/twohanded/TH = I if(TH.force_wielded >= max) diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm deleted file mode 100644 index 2658a4e085..0000000000 --- a/code/game/objects/items/shields.dm +++ /dev/null @@ -1,275 +0,0 @@ -/obj/item/shield - name = "shield" - icon = 'icons/obj/shields.dmi' - block_chance = 50 - armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70) - var/transparent = FALSE // makes beam projectiles pass through the shield - -/obj/item/shield/proc/on_shield_block(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", damage = 0, attack_type = MELEE_ATTACK) - return TRUE - -/obj/item/shield/riot - name = "riot shield" - desc = "" - icon_state = "riot" - lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' - slot_flags = ITEM_SLOT_BACK - force = 10 - throwforce = 5 - throw_speed = 2 - throw_range = 3 - w_class = WEIGHT_CLASS_BULKY - custom_materials = list(/datum/material/glass=7500, /datum/material/iron=1000) - attack_verb = list("shoved", "bashed") - var/cooldown = 0 //shield bash cooldown. based on world.time - transparent = TRUE - max_integrity = 75 - material_flags = MATERIAL_NO_EFFECTS - -/obj/item/shield/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(transparent && (hitby.pass_flags & PASSGLASS)) - return FALSE - if(attack_type == THROWN_PROJECTILE_ATTACK) - final_block_chance += 30 - if(attack_type == LEAP_ATTACK) - final_block_chance = 100 - . = ..() - if(.) - on_shield_block(owner, hitby, attack_text, damage, attack_type) - -/obj/item/shield/riot/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/melee/baton)) - if(cooldown < world.time - 25) - user.visible_message("[user] bashes [src] with [W]!") - playsound(user.loc, 'sound/blank.ogg', 50, TRUE) - cooldown = world.time - else if(istype(W, /obj/item/stack/sheet/mineral/titanium)) - if (obj_integrity >= max_integrity) - to_chat(user, "[src] is already in perfect condition.") - else - var/obj/item/stack/sheet/mineral/titanium/T = W - T.use(1) - obj_integrity = max_integrity - to_chat(user, "I repair [src] with [T].") - else - return ..() - -/obj/item/shield/riot/examine(mob/user) - . = ..() - var/healthpercent = round((obj_integrity/max_integrity) * 100, 1) - switch(healthpercent) - if(50 to 99) - . += "It looks slightly damaged." - if(25 to 50) - . += "It appears heavily damaged." - if(0 to 25) - . += "It's falling apart!" - -/obj/item/shield/riot/proc/shatter(mob/living/carbon/human/owner) - playsound(owner, 'sound/blank.ogg', 100) - new /obj/item/shard((get_turf(src))) - -/obj/item/shield/riot/on_shield_block(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", damage = 0, attack_type = MELEE_ATTACK) - if (obj_integrity <= damage) - var/turf/T = get_turf(owner) - T.visible_message("[hitby] destroys [src]!") - shatter(owner) - qdel(src) - return FALSE - take_damage(damage) - return ..() - -/obj/item/shield/riot/roman - name = "\improper Roman shield" - desc = "" - icon_state = "roman_shield" - item_state = "roman_shield" - lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' - transparent = FALSE - custom_materials = list(/datum/material/iron=8500) - max_integrity = 65 - -/obj/item/shield/riot/roman/fake - desc = "" - block_chance = 0 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - max_integrity = 30 - -/obj/item/shield/riot/roman/shatter(mob/living/carbon/human/owner) - playsound(owner, 'sound/blank.ogg', 100) - new /obj/item/stack/sheet/metal(get_turf(src)) - -/obj/item/shield/riot/buckler - name = "wooden buckler" - desc = "" - icon_state = "buckler" - item_state = "buckler" - lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' - custom_materials = null - resistance_flags = FLAMMABLE - block_chance = 30 - transparent = FALSE - max_integrity = 55 - w_class = WEIGHT_CLASS_NORMAL - -/obj/item/shield/riot/buckler/shatter(mob/living/carbon/human/owner) - playsound(owner, 'sound/blank.ogg', 50) - new /obj/item/stack/sheet/mineral/wood(get_turf(src)) - -/obj/item/shield/riot/flash - name = "strobe shield" - desc = "" - icon_state = "flashshield" - item_state = "flashshield" - var/obj/item/assembly/flash/handheld/embedded_flash - -/obj/item/shield/riot/flash/Initialize() - . = ..() - embedded_flash = new(src) - -/obj/item/shield/riot/flash/attack(mob/living/M, mob/user) - . = embedded_flash.attack(M, user) - update_icon() - -/obj/item/shield/riot/flash/attack_self(mob/living/carbon/user) - . = embedded_flash.attack_self(user) - update_icon() - -/obj/item/shield/riot/flash/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - . = ..() - if (. && !embedded_flash.burnt_out) - embedded_flash.activate() - update_icon() - - -/obj/item/shield/riot/flash/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/assembly/flash/handheld)) - var/obj/item/assembly/flash/handheld/flash = W - if(flash.burnt_out) - to_chat(user, "No sense replacing it with a broken bulb!") - return - else - to_chat(user, "I begin to replace the bulb...") - if(do_after(user, 20, target = user)) - if(flash.burnt_out || !flash || QDELETED(flash)) - return - playsound(src, 'sound/blank.ogg', 50, TRUE) - qdel(embedded_flash) - embedded_flash = flash - flash.forceMove(src) - update_icon() - return - ..() - -/obj/item/shield/riot/flash/emp_act(severity) - . = ..() - embedded_flash.emp_act(severity) - update_icon() - -/obj/item/shield/riot/flash/update_icon() - if(!embedded_flash || embedded_flash.burnt_out) - icon_state = "riot" - item_state = "riot" - else - icon_state = "flashshield" - item_state = "flashshield" - -/obj/item/shield/riot/flash/examine(mob/user) - . = ..() - if (embedded_flash?.burnt_out) - . += "The mounted bulb has burnt out. You can try replacing it with a new one." - -/obj/item/shield/energy - name = "energy combat shield" - desc = "" - lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' - w_class = WEIGHT_CLASS_TINY - attack_verb = list("shoved", "bashed") - throw_range = 5 - force = 3 - throwforce = 3 - throw_speed = 1 - var/base_icon_state = "eshield" // [base_icon_state]1 for expanded, [base_icon_state]0 for contracted - var/on_force = 10 - var/on_throwforce = 8 - var/on_throw_speed = 2 - var/active = 0 - var/clumsy_check = TRUE - -/obj/item/shield/energy/Initialize() - . = ..() - icon_state = "[base_icon_state]0" - -/obj/item/shield/energy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - return 0 - -/obj/item/shield/energy/IsReflect() - return (active) - -/obj/item/shield/energy/attack_self(mob/living/carbon/human/user) - if(clumsy_check && HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50)) - to_chat(user, "I beat myself in the head with [src]!") - user.take_bodypart_damage(5) - active = !active - icon_state = "[base_icon_state][active]" - - if(active) - force = on_force - throwforce = on_throwforce - throw_speed = on_throw_speed - w_class = WEIGHT_CLASS_BULKY - playsound(user, 'sound/blank.ogg', 35, TRUE) - to_chat(user, "[src] is now active.") - else - force = initial(force) - throwforce = initial(throwforce) - throw_speed = initial(throw_speed) - w_class = WEIGHT_CLASS_TINY - playsound(user, 'sound/blank.ogg', 35, TRUE) - to_chat(user, "[src] can now be concealed.") - add_fingerprint(user) - -/obj/item/shield/riot/tele - name = "telescopic shield" - desc = "" - icon_state = "teleriot0" - lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' - custom_materials = list(/datum/material/iron = 3600, /datum/material/glass = 3600, /datum/material/silver = 270, /datum/material/titanium = 180) - slot_flags = null - force = 3 - throwforce = 3 - throw_speed = 1 - throw_range = 4 - w_class = WEIGHT_CLASS_NORMAL - var/active = 0 - -/obj/item/shield/riot/tele/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(active) - return ..() - return 0 - -/obj/item/shield/riot/tele/attack_self(mob/living/user) - active = !active - icon_state = "teleriot[active]" - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - - if(active) - force = 8 - throwforce = 5 - throw_speed = 2 - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - to_chat(user, "I extend \the [src].") - else - force = 3 - throwforce = 3 - throw_speed = 1 - w_class = WEIGHT_CLASS_NORMAL - slot_flags = null - to_chat(user, "[src] can now be concealed.") - add_fingerprint(user) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 788bdce4fc..f282a615bd 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -137,11 +137,6 @@ desc = "" stop_bleeding = 900 -/obj/item/stack/medical/gauze/cyborg - custom_materials = null - is_cyborg = 1 - cost = 250 - /obj/item/stack/medical/ointment name = "ointment" desc = "" diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 195f9a342d..281cfe3035 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -2,7 +2,6 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = TRUE, on_floor = FALSE), \ new/datum/stack_recipe("table frame", /obj/structure/table_frame, 2, time = 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("scooter frame", /obj/item/scooter_frame, 10, time = 25, one_per_turf = 0), \ - new/datum/stack_recipe("linen bin", /obj/structure/bedsheetbin/empty, 2, time = 5, one_per_turf = 0), \ )) /obj/item/stack/rods @@ -78,7 +77,6 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ /obj/item/stack/rods/cyborg custom_materials = null - is_cyborg = 1 cost = 250 /obj/item/stack/rods/cyborg/update_icon() diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index fa37c1c3fd..baf1d79783 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -32,11 +32,6 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \ user.visible_message("[user] begins to slice [user.p_their()] neck with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") return BRUTELOSS -/obj/item/stack/sheet/glass/cyborg - custom_materials = null - is_cyborg = 1 - cost = 500 - /obj/item/stack/sheet/glass/fifty amount = 50 @@ -46,17 +41,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \ /obj/item/stack/sheet/glass/attackby(obj/item/W, mob/user, params) add_fingerprint(user) - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/CC = W - if (get_amount() < 1 || CC.get_amount() < 5) - to_chat(user, "I attach wire to the [name].") - var/obj/item/stack/light_w/new_tile = new(user.loc) - new_tile.add_fingerprint(user) - else if(istype(W, /obj/item/stack/rods)) + if(istype(W, /obj/item/stack/rods)) var/obj/item/stack/rods/V = W if (V.get_amount() >= 1 && get_amount() >= 1) var/obj/item/stack/sheet/rglass/RG = new (get_turf(user)) @@ -124,7 +109,6 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \ * Reinforced glass sheets */ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ - new/datum/stack_recipe("windoor frame", /obj/structure/windoor_assembly, 5, time = 0, on_floor = TRUE, window_checks = TRUE), \ null, \ new/datum/stack_recipe("directional reinforced window", /obj/structure/window/reinforced/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \ new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/reinforced/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \ @@ -148,25 +132,6 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ add_fingerprint(user) ..() -/obj/item/stack/sheet/rglass/cyborg - custom_materials = null - var/datum/robot_energy_storage/glasource - var/metcost = 250 - var/glacost = 500 - -/obj/item/stack/sheet/rglass/cyborg/get_amount() - return min(round(source.energy / metcost), round(glasource.energy / glacost)) - -/obj/item/stack/sheet/rglass/cyborg/use(used, transfer = FALSE) // Requires special checks, because it uses two storages - if(get_amount(used)) //ensure we still have enough energy if called in a do_after chain - source.use_charge(used * metcost) - glasource.use_charge(used * glacost) - return TRUE - -/obj/item/stack/sheet/rglass/cyborg/add(amount) - source.add_charge(amount * metcost) - glasource.add_charge(amount * glacost) - /obj/item/stack/sheet/rglass/get_main_recipes() . = ..() . += GLOB.reinforced_glass_recipes diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index eb57812e5c..a3c211bfc8 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -87,37 +87,6 @@ GLOBAL_LIST_INIT(monkey_recipes, list ( \ icon_state = "sheet-lizard" item_state = "sheet-lizard" -/obj/item/stack/sheet/animalhide/xeno - name = "alien hide" - desc = "" - singular_name = "alien hide piece" - icon_state = "sheet-xeno" - item_state = "sheet-xeno" - -GLOBAL_LIST_INIT(xeno_recipes, list ( \ - new/datum/stack_recipe("alien helmet", /obj/item/clothing/head/xenos, 1), \ - new/datum/stack_recipe("alien suit", /obj/item/clothing/suit/xenos, 2), \ - )) - -/obj/item/stack/sheet/animalhide/xeno/get_main_recipes() - . = ..() - . += GLOB.xeno_recipes - -//don't see anywhere else to put these, maybe together they could be used to make the xenos suit? -/obj/item/stack/sheet/xenochitin - name = "alien chitin" - desc = "" - singular_name = "alien hide piece" - icon = 'icons/mob/alien.dmi' - icon_state = "chitin" - novariants = TRUE - -/obj/item/xenos_claw - name = "alien claw" - desc = "" - icon = 'icons/mob/alien.dmi' - icon_state = "claw" - /obj/item/weed_extract name = "weed extract" desc = "" @@ -237,7 +206,7 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \ wetness = initial(wetness) use(1) -/obj/item/stack/sheet/wetleather/microwave_act(obj/machinery/microwave/MW) +/obj/item/stack/sheet/wetleather/heating_act() ..() new /obj/item/stack/sheet/leather(drop_location(), amount) qdel(src) diff --git a/code/game/objects/items/stacks/sheets/light.dm b/code/game/objects/items/stacks/sheets/light.dm deleted file mode 100644 index 2c223435bb..0000000000 --- a/code/game/objects/items/stacks/sheets/light.dm +++ /dev/null @@ -1,36 +0,0 @@ -/obj/item/stack/light_w - name = "wired glass tile" - singular_name = "wired glass floor tile" - desc = "" - icon = 'icons/obj/tiles.dmi' - icon_state = "glass_wire" - w_class = WEIGHT_CLASS_NORMAL - force = 3 - throwforce = 5 - throw_speed = 1 - throw_range = 7 - flags_1 = CONDUCT_1 - max_amount = 60 - grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/copper = 5) - -/obj/item/stack/light_w/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item/stack/sheet/metal)) - var/obj/item/stack/sheet/metal/M = O - if (M.use(1)) - var/obj/item/L = new /obj/item/stack/tile/light(user.drop_location()) - to_chat(user, "I make a light tile.") - L.add_fingerprint(user) - use(1) - else - to_chat(user, "I need one metal sheet to finish the light tile!") - else - return ..() - -/obj/item/stack/light_w/wirecutter_act(mob/living/user, obj/item/I) - . = ..() - var/atom/Tsec = user.drop_location() - var/obj/item/stack/cable_coil/CC = new (Tsec, 5) - CC.add_fingerprint(user) - var/obj/item/stack/sheet/glass/G = new (Tsec) - G.add_fingerprint(user) - use(1) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index e3d6e8863e..e11e91cddd 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -24,8 +24,6 @@ Mineral Sheets */ GLOBAL_LIST_INIT(sandstone_recipes, list ( \ - new/datum/stack_recipe("pile of dirt", /obj/machinery/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Assistant Statue", /obj/structure/statue/sandstone/assistant, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Breakdown into sand", /obj/item/stack/ore/glass, 1, one_per_turf = 0, on_floor = 1) \ )) @@ -49,45 +47,6 @@ GLOBAL_LIST_INIT(sandstone_recipes, list ( \ /obj/item/stack/sheet/mineral/sandstone/thirty amount = 30 -/* - * Sandbags - */ - -/obj/item/stack/sheet/mineral/sandbags - name = "sandbags" - icon_state = "sandbags" - singular_name = "sandbag" - layer = LOW_ITEM_LAYER - novariants = TRUE - merge_type = /obj/item/stack/sheet/mineral/sandbags - -GLOBAL_LIST_INIT(sandbag_recipes, list ( \ - new/datum/stack_recipe("sandbags", /obj/structure/barricade/sandbags, 1, time = 25, one_per_turf = 1, on_floor = 1), \ - )) - -/obj/item/stack/sheet/mineral/sandbags/get_main_recipes() - . = ..() - . += GLOB.sandbag_recipes - -/obj/item/emptysandbag - name = "empty sandbag" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "sandbag" - w_class = WEIGHT_CLASS_TINY - -/obj/item/emptysandbag/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/stack/ore/glass)) - var/obj/item/stack/ore/glass/G = W - to_chat(user, "I fill the sandbag.") - var/obj/item/stack/sheet/mineral/sandbags/I = new /obj/item/stack/sheet/mineral/sandbags(drop_location()) - qdel(src) - if (Adjacent(user) && !issilicon(user)) - user.put_in_hands(I) - G.use(1) - else - return ..() - /* * Diamond */ @@ -105,7 +64,6 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \ material_type = /datum/material/diamond GLOBAL_LIST_INIT(diamond_recipes, list ( \ - new/datum/stack_recipe("diamond door", /obj/structure/mineral_door/transparent/diamond, 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("diamond tile", /obj/item/stack/tile/mineral/diamond, 1, 4, 20), \ new/datum/stack_recipe("Captain Statue", /obj/structure/statue/diamond/captain, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("AI Hologram Statue", /obj/structure/statue/diamond/ai1, 5, one_per_turf = 1, on_floor = 1), \ @@ -133,7 +91,6 @@ GLOBAL_LIST_INIT(diamond_recipes, list ( \ material_type = /datum/material/uranium GLOBAL_LIST_INIT(uranium_recipes, list ( \ - new/datum/stack_recipe("uranium door", /obj/structure/mineral_door/uranium, 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("uranium tile", /obj/item/stack/tile/mineral/uranium, 1, 4, 20), \ new/datum/stack_recipe("Nuke Statue", /obj/structure/statue/uranium/nuke, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Engineer Statue", /obj/structure/statue/uranium/eng, 5, one_per_turf = 1, on_floor = 1), \ @@ -165,7 +122,6 @@ GLOBAL_LIST_INIT(uranium_recipes, list ( \ return TOXLOSS//dont you kids know that stuff is toxic? GLOBAL_LIST_INIT(plasma_recipes, list ( \ - new/datum/stack_recipe("plasma door", /obj/structure/mineral_door/transparent/plasma, 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("plasma tile", /obj/item/stack/tile/mineral/plasma, 1, 4, 20), \ new/datum/stack_recipe("Scientist Statue", /obj/structure/statue/plasma/scientist, 5, one_per_turf = 1, on_floor = 1), \ )) @@ -203,7 +159,6 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \ material_type = /datum/material/gold GLOBAL_LIST_INIT(gold_recipes, list ( \ - new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("gold tile", /obj/item/stack/tile/mineral/gold, 1, 4, 20), \ new/datum/stack_recipe("HoS Statue", /obj/structure/statue/gold/hos, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("HoP Statue", /obj/structure/statue/gold/hop, 5, one_per_turf = 1, on_floor = 1), \ @@ -234,7 +189,6 @@ GLOBAL_LIST_INIT(gold_recipes, list ( \ tableVariant = /obj/structure/table/optable GLOBAL_LIST_INIT(silver_recipes, list ( \ - new/datum/stack_recipe("silver door", /obj/structure/mineral_door/silver, 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("silver tile", /obj/item/stack/tile/mineral/silver, 1, 4, 20), \ new/datum/stack_recipe("Med Officer Statue", /obj/structure/statue/silver/md, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Janitor Statue", /obj/structure/statue/silver/janitor, 5, one_per_turf = 1, on_floor = 1), \ @@ -405,30 +359,6 @@ GLOBAL_LIST_INIT(adamantine_recipes, list( custom_materials = list(/datum/material/mythril=MINERAL_MATERIAL_AMOUNT) merge_type = /obj/item/stack/sheet/mineral/mythril -/* - * Alien Alloy - */ -/obj/item/stack/sheet/mineral/abductor - name = "alien alloy" - icon = 'icons/obj/abductor.dmi' - icon_state = "sheet-abductor" - item_state = "sheet-abductor" - singular_name = "alien alloy sheet" - sheettype = "abductor" - merge_type = /obj/item/stack/sheet/mineral/abductor - -GLOBAL_LIST_INIT(abductor_recipes, list ( \ - new/datum/stack_recipe("alien bed", /obj/structure/bed/abductor, 2, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("alien locker", /obj/structure/closet/abductor, 2, time = 15, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("alien table frame", /obj/structure/table_frame/abductor, 1, time = 15, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("alien airlock assembly", /obj/structure/door_assembly/door_assembly_abductor, 4, time = 20, one_per_turf = 1, on_floor = 1), \ - null, \ - new/datum/stack_recipe("alien floor tile", /obj/item/stack/tile/mineral/abductor, 1, 4, 20), \ - )) - -/obj/item/stack/sheet/mineral/abductor/get_main_recipes() - . = ..() - . += GLOB.abductor_recipes /* * Coal diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index a363464362..13a828442d 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -47,47 +47,11 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ null, \ new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ null, \ - new/datum/stack_recipe("computer frame", /obj/structure/frame/computer, 5, time = 25, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("modular console", /obj/machinery/modular_computer/console/buildable/, 10, time = 25, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("machine frame", /obj/structure/frame/machine, 5, time = 25, one_per_turf = TRUE, on_floor = TRUE), \ null, \ - new /datum/stack_recipe_list("airlock assemblies", list( \ - new /datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \ - new /datum/stack_recipe("public airlock assembly", /obj/structure/door_assembly/door_assembly_public, 4, time = 50, one_per_turf = 1, on_floor = 1), \ - new /datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 50, one_per_turf = 1, on_floor = 1), \ - new /datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 50, one_per_turf = 1, on_floor = 1), \ - new /datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 50, one_per_turf = 1, on_floor = 1), \ - new /datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 50, one_per_turf = 1, on_floor = 1), \ - new /datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 50, one_per_turf = 1, on_floor = 1), \ - new /datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 50, one_per_turf = 1, on_floor = 1), \ - new /datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 50, one_per_turf = 1, on_floor = 1), \ - new /datum/stack_recipe("science airlock assembly", /obj/structure/door_assembly/door_assembly_science, 4, time = 50, one_per_turf = 1, on_floor = 1), \ - new /datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 50, one_per_turf = 1, on_floor = 1), \ - new /datum/stack_recipe("virology airlock assembly", /obj/structure/door_assembly/door_assembly_viro, 4, time = 50, one_per_turf = 1, on_floor = 1), \ - new /datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 50, one_per_turf = 1, on_floor = 1), \ - new /datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 50, one_per_turf = 1, on_floor = 1), \ - new /datum/stack_recipe("external maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_extmai, 4, time = 50, one_per_turf = 1, on_floor = 1), \ - new /datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 50, one_per_turf = 1, on_floor = 1), \ - new /datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 50, one_per_turf = 1, on_floor = 1), \ - )), \ null, \ - new/datum/stack_recipe("firelock frame", /obj/structure/firelock_frame, 3, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("meatspike frame", /obj/structure/kitchenspike_frame, 5, time = 25, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("reflector frame", /obj/structure/reflector, 5, time = 25, one_per_turf = TRUE, on_floor = TRUE), \ null, \ - new/datum/stack_recipe("grenade casing", /obj/item/grenade/chem_grenade), \ - new/datum/stack_recipe("light fixture frame", /obj/item/wallframe/light_fixture, 2), \ - new/datum/stack_recipe("small light fixture frame", /obj/item/wallframe/light_fixture/small, 1), \ - null, \ - new/datum/stack_recipe("apc frame", /obj/item/wallframe/apc, 2), \ - new/datum/stack_recipe("air alarm frame", /obj/item/wallframe/airalarm, 2), \ - new/datum/stack_recipe("fire alarm frame", /obj/item/wallframe/firealarm, 2), \ - new/datum/stack_recipe("extinguisher cabinet frame", /obj/item/wallframe/extinguisher_cabinet, 2), \ - new/datum/stack_recipe("button frame", /obj/item/wallframe/button, 1), \ - null, \ - new/datum/stack_recipe("iron door", /obj/structure/mineral_door/iron, 20, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("floodlight frame", /obj/structure/floodlight_frame, 5, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("voting box", /obj/structure/votebox, 15, time = 50) )) @@ -126,11 +90,6 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ /obj/item/stack/sheet/metal/five amount = 5 -/obj/item/stack/sheet/metal/cyborg - custom_materials = null - is_cyborg = 1 - cost = 500 - /obj/item/stack/sheet/metal/get_main_recipes() . = ..() . += GLOB.metal_recipes @@ -143,14 +102,8 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ * Plasteel */ GLOBAL_LIST_INIT(plasteel_recipes, list ( \ - new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = TRUE), \ - new/datum/stack_recipe("bomb assembly", /obj/machinery/syndicatebomb/empty, 10, time = 50), \ new/datum/stack_recipe("pestle", /obj/item/pestle, 1, time = 50), \ null, \ - new /datum/stack_recipe_list("airlock assemblies", list( \ - new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 50, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("vault door assembly", /obj/structure/door_assembly/door_assembly_vault, 6, time = 50, one_per_turf = 1, on_floor = 1), \ - )), \ )) /obj/item/stack/sheet/plasteel @@ -195,15 +148,10 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 20, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("coffin", /obj/structure/closet/crate/coffin, 5, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("book case", /obj/structure/bookcase, 4, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("drying rack", /obj/machinery/smartfridge/drying_rack, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("dog bed", /obj/structure/bed/dogbed, 10, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("dresser", /obj/structure/dresser, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("picture frame", /obj/item/wallframe/picture, 1, time = 10),\ new/datum/stack_recipe("display case chassis", /obj/structure/displaycase_chassis, 5, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("wooden buckler", /obj/item/shield/riot/buckler, 20, time = 40), \ - new/datum/stack_recipe("apiary", /obj/structure/beebox, 40, time = 50),\ new/datum/stack_recipe("tiki mask", /obj/item/clothing/mask/gas/tiki_mask, 2), \ - new/datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 10),\ new/datum/stack_recipe("wooden bucket", /obj/item/reagent_containers/glass/bucket/wooden, 3, time = 10),\ new/datum/stack_recipe("rake", /obj/item/cultivator/rake, 5, time = 10),\ new/datum/stack_recipe("ore box", /obj/structure/ore_box, 4, time = 50, one_per_turf = TRUE, on_floor = TRUE),\ @@ -292,7 +240,6 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \ new/datum/stack_recipe("improvised gauze", /obj/item/stack/medical/gauze/improvised, 1, 2, 6), \ new/datum/stack_recipe("rag", /obj/item/reagent_containers/glass/rag, 1), \ new/datum/stack_recipe("bedsheet", /obj/item/bedsheet, 3), \ - new/datum/stack_recipe("empty sandbag", /obj/item/emptysandbag, 4), \ null, \ new/datum/stack_recipe("fingerless gloves", /obj/item/clothing/gloves/fingerless, 1), \ new/datum/stack_recipe("white gloves", /obj/item/clothing/gloves/color/white, 3), \ @@ -383,8 +330,6 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \ new/datum/stack_recipe("large box", /obj/structure/closet/cardboard, 4, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("cardboard cutout", /obj/item/cardboard_cutout, 5), \ null, \ - - new/datum/stack_recipe("pizza box", /obj/item/pizzabox), \ new/datum/stack_recipe("folder", /obj/item/folder), \ null, \ //TO-DO: Find a proper way to just change the illustration on the box. Code isn't the issue, input is. @@ -400,10 +345,8 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \ new /datum/stack_recipe("rubber shot ammo box", /obj/item/storage/box/rubbershot), \ new /datum/stack_recipe("bean bag ammo box", /obj/item/storage/box/beanbag), \ new /datum/stack_recipe("flashbang box", /obj/item/storage/box/flashbangs), \ - new /datum/stack_recipe("flashes box", /obj/item/storage/box/flashes), \ new /datum/stack_recipe("handcuffs box", /obj/item/storage/box/handcuffs), \ new /datum/stack_recipe("ID card box", /obj/item/storage/box/ids), \ - new /datum/stack_recipe("PDA box", /obj/item/storage/box/PDAs), \ null, \ new /datum/stack_recipe("pillbottle box", /obj/item/storage/box/pillbottles), \ @@ -414,8 +357,6 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \ new /datum/stack_recipe("body bag box", /obj/item/storage/box/bodybags), \ new /datum/stack_recipe("perscription glasses box", /obj/item/storage/box/rxglasses), \ null, \ - - new /datum/stack_recipe("disk box", /obj/item/storage/box/disks), \ new /datum/stack_recipe("light tubes box", /obj/item/storage/box/lights/tubes), \ new /datum/stack_recipe("light bulbs box", /obj/item/storage/box/lights/bulbs), \ new /datum/stack_recipe("mixed lights box", /obj/item/storage/box/lights/mixed), \ @@ -446,31 +387,11 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \ /obj/item/stack/sheet/cardboard/fifty amount = 50 -/obj/item/stack/sheet/cardboard/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/stamp/clown) && !istype(loc, /obj/item/storage)) - var/atom/droploc = drop_location() - if(use(1)) - playsound(I, 'sound/blank.ogg', 50, TRUE, -1) - to_chat(user, "I stamp the cardboard! It's a clown box! Honk!") - if (amount >= 0) - new/obj/item/storage/box/clown(droploc) //bugfix - else - . = ..() - /* * Runed Metal */ -GLOBAL_LIST_INIT(runed_metal_recipes, list ( \ - new/datum/stack_recipe("runed door", /obj/machinery/door/airlock/cult, 1, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("runed girder", /obj/structure/girder/cult, 1, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("pylon", /obj/structure/destructible/cult/pylon, 4, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("forge", /obj/structure/destructible/cult/forge, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("archives", /obj/structure/destructible/cult/tome, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("altar", /obj/structure/destructible/cult/talisman, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ - )) - /obj/item/stack/sheet/runed_metal name = "runed metal" desc = "" @@ -484,9 +405,6 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list ( \ grind_results = list(/datum/reagent/iron = 5, /datum/reagent/blood = 15) /obj/item/stack/sheet/runed_metal/attack_self(mob/living/user) - if(!iscultist(user)) - to_chat(user, "Only one with forbidden knowledge could hope to work this metal...") - return var/turf/T = get_turf(user) //we may have moved. adjust as needed... var/area/A = get_area(user) if((!is_station_level(T.z) && !is_mining_level(T.z)) || (A && !(A.flags_1 & CULT_PERMITTED_1))) @@ -494,19 +412,6 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list ( \ return FALSE return ..() -/obj/item/stack/sheet/runed_metal/get_main_recipes() - . = ..() - . += GLOB.runed_metal_recipes - -/obj/item/stack/sheet/runed_metal/fifty - amount = 50 - -/obj/item/stack/sheet/runed_metal/ten - amount = 10 - -/obj/item/stack/sheet/runed_metal/five - amount = 5 - /* * Bronze */ @@ -516,8 +421,6 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \ null, new/datum/stack_recipe("directional bronze window", /obj/structure/window/bronze/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \ new/datum/stack_recipe("fulltile bronze window", /obj/structure/window/bronze/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE), \ - new/datum/stack_recipe("pinion airlock assembly", /obj/structure/door_assembly/door_assembly_bronze, 4, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("bronze pinion airlock assembly", /obj/structure/door_assembly/door_assembly_bronze/seethru, 4, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("bronze hat", /obj/item/clothing/head/bronze), \ new/datum/stack_recipe("bronze suit", /obj/item/clothing/suit/bronze), \ new/datum/stack_recipe("bronze boots", /obj/item/clothing/shoes/bronze), \ @@ -625,10 +528,7 @@ GLOBAL_LIST_INIT(plastic_recipes, list( . = ..() . += GLOB.plastic_recipes -GLOBAL_LIST_INIT(paperframe_recipes, list( -new /datum/stack_recipe("paper frame separator", /obj/structure/window/paperframe, 2, one_per_turf = TRUE, on_floor = TRUE, time = 10), \ -new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperframe, 3, one_per_turf = TRUE, on_floor = TRUE, time = 10 ))) - +GLOBAL_LIST_INIT(paperframe_recipes, list()) /obj/item/stack/sheet/paperframes name = "paper frames" desc = "" diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 032157a64a..14e641b766 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -18,7 +18,6 @@ var/singular_name var/amount = 1 var/max_amount = 50 //also see stack recipes initialisation, param "max_res_amount" must be equal to this max_amount - var/is_cyborg = 0 // It's 1 if module is used by a cyborg, and uses its storage var/datum/robot_energy_storage/source var/cost = 1 // How much energy from storage it costs var/merge_type = null // This path and its children should merge with this stack, defaults to src.type @@ -35,9 +34,6 @@ grind_results[grind_results[i]] *= get_amount() //Gets the key at position i, then the reagent amount of that key, then multiplies it by stack size /obj/item/stack/grind_requirements() - if(is_cyborg) - to_chat(usr, "[src] is electronically synthesized in my chassis and can't be ground up!") - return return TRUE /obj/item/stack/Initialize(mapload, new_amount, merge = TRUE) @@ -100,12 +96,6 @@ /obj/item/stack/examine(mob/user) . = ..() - if (is_cyborg) - if(singular_name) - . += "There is enough energy for [get_amount()] [singular_name]\s." - else - . += "There is enough energy for [get_amount()]." - return if(singular_name) if(get_amount()>1) . += "There are [get_amount()] [singular_name]\s in the stack." @@ -118,10 +108,7 @@ . += "Alt-click to take a custom amount." /obj/item/stack/proc/get_amount() - if(is_cyborg) - . = round(source.energy / cost) - else - . = (amount) + . = (amount) /obj/item/stack/attack_self(mob/user) // interact(user) @@ -192,7 +179,7 @@ if (href_list["sublist"] && !href_list["make"]) interact(usr, text2num(href_list["sublist"])) if (href_list["make"]) - if (get_amount() < 1 && !is_cyborg) + if (get_amount() < 1) qdel(src) var/list/recipes_list = recipes @@ -233,10 +220,7 @@ O.set_custom_materials(used_materials) //START: oh fuck i'm so sorry - if(istype(O, /obj/structure/windoor_assembly)) - var/obj/structure/windoor_assembly/W = O - W.ini_dir = W.dir - else if(istype(O, /obj/structure/window)) + if(istype(O, /obj/structure/window)) var/obj/structure/window/W = O W.ini_dir = W.dir //END: oh fuck i'm so sorry @@ -308,8 +292,6 @@ /obj/item/stack/use(used, transfer = FALSE, check = TRUE) // return 0 = borked; return 1 = had enough if(check && zero_amount()) return FALSE - if (is_cyborg) - return source.use_charge(used * cost) if (amount < used) return FALSE amount -= used @@ -334,18 +316,13 @@ return TRUE /obj/item/stack/proc/zero_amount() - if(is_cyborg) - return source.energy < cost if(amount < 1) qdel(src) return 1 return 0 /obj/item/stack/proc/add(amount) - if (is_cyborg) - source.add_charge(amount * cost) - else - src.amount += amount + src.amount += amount if(custom_materials && custom_materials.len) for(var/i in custom_materials) custom_materials[getmaterialref(i)] = MINERAL_MATERIAL_AMOUNT * src.amount @@ -357,10 +334,7 @@ if(QDELETED(S) || QDELETED(src) || S == src) //amusingly this can cause a stack to consume itself, let's not allow that. return var/transfer = get_amount() - if(S.is_cyborg) - transfer = min(transfer, round((S.source.max_energy - S.source.energy) / S.cost)) - else - transfer = min(transfer, S.max_amount - S.amount) + transfer = min(transfer, S.max_amount - S.amount) if(pulledby) pulledby.start_pulling(S) S.copy_evidences(src) @@ -393,8 +367,6 @@ return if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return - if(is_cyborg) - return else if(zero_amount()) return @@ -437,10 +409,6 @@ fingerprintslast = from.fingerprintslast //TODO bloody overlay -/obj/item/stack/microwave_act(obj/machinery/microwave/M) - if(istype(M) && M.dirty < 100) - M.dirty += amount - /* * Recipe datum */ diff --git a/code/game/objects/items/stacks/telecrystal.dm b/code/game/objects/items/stacks/telecrystal.dm deleted file mode 100644 index 23482cfe31..0000000000 --- a/code/game/objects/items/stacks/telecrystal.dm +++ /dev/null @@ -1,41 +0,0 @@ -/obj/item/stack/telecrystal - name = "telecrystal" - desc = "" - singular_name = "telecrystal" - icon = 'icons/obj/telescience.dmi' - icon_state = "telecrystal" - dye_color = DYE_SYNDICATE - w_class = WEIGHT_CLASS_TINY - max_amount = 50 - item_flags = NOBLUDGEON - -/obj/item/stack/telecrystal/attack(mob/target, mob/user) - if(target == user) //You can't go around smacking people with crystals to find out if they have an uplink or not. - for(var/obj/item/implant/uplink/I in target) - if(I && I.imp_in) - var/datum/component/uplink/hidden_uplink = I.GetComponent(/datum/component/uplink) - if(hidden_uplink) - hidden_uplink.telecrystals += amount - use(amount) - to_chat(user, "I press [src] onto myself and charge your hidden uplink.") - else - return ..() - -/obj/item/stack/telecrystal/afterattack(obj/item/I, mob/user, proximity) - . = ..() - if(!proximity) - return - if(istype(I, /obj/item/cartridge/virus/frame)) - var/obj/item/cartridge/virus/frame/cart = I - if(!cart.charges) - to_chat(user, "[cart] is out of charges, it's refusing to accept [src].") - return - cart.telecrystals += amount - use(amount) - to_chat(user, "I slot [src] into [cart]. The next time it's used, it will also give telecrystals.") - -/obj/item/stack/telecrystal/five - amount = 5 - -/obj/item/stack/telecrystal/twenty - amount = 20 diff --git a/code/game/objects/items/stacks/tiles/light.dm b/code/game/objects/items/stacks/tiles/light.dm index 53f4cdeb5f..3bbf3200cc 100644 --- a/code/game/objects/items/stacks/tiles/light.dm +++ b/code/game/objects/items/stacks/tiles/light.dm @@ -18,13 +18,3 @@ state = 1 //flickering occasionally else state = 0 //fine - -/obj/item/stack/tile/light/attackby(obj/item/O, mob/user, params) - if(O.tool_behaviour == TOOL_CROWBAR) - new/obj/item/stack/sheet/metal(user.loc) - amount-- - new/obj/item/stack/light_w(user.loc) - if(amount <= 0) - qdel(src) - else - return ..() diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 04f2cc0b31..30fc87ae92 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -321,12 +321,6 @@ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70) resistance_flags = FIRE_PROOF -/obj/item/stack/tile/plasteel/cyborg - desc = "" //Not the usual floor tile desc as that refers to throwing, Cyborgs can't do that - RR - custom_materials = null // All other Borg versions of items have no Metal or Glass - RR - is_cyborg = 1 - cost = 125 - /obj/item/stack/tile/plastic name = "plastic tile" singular_name = "plastic floor tile" diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index d7c9bb838b..1052418a8e 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -313,13 +313,6 @@ icon_state = initial(icon_state) REMOVE_TRAIT(src, TRAIT_T_RAY_VISIBLE, TRAIT_GENERIC) -/obj/item/storage/backpack/satchel/flat/PopulateContents() - var/datum/supply_pack/costumes_toys/randomised/contraband/C = new - for(var/i in 1 to 2) - var/ctype = pick(C.contains) - new ctype(src) - - qdel(C) /obj/item/storage/backpack/satchel/flat/with_tools/PopulateContents() new /obj/item/stack/tile/plasteel(src) @@ -408,7 +401,6 @@ new /obj/item/wrench(src) new /obj/item/weldingtool(src) new /obj/item/crowbar(src) - new /obj/item/stack/cable_coil(src) new /obj/item/wirecutters(src) new /obj/item/multitool(src) @@ -446,7 +438,6 @@ /obj/item/storage/backpack/duffelbag/syndie/hitman/PopulateContents() new /obj/item/clothing/under/suit/black(src) new /obj/item/clothing/accessory/waistcoat(src) - new /obj/item/clothing/suit/toggle/lawyer/black(src) new /obj/item/clothing/shoes/laceup(src) new /obj/item/clothing/gloves/color/black(src) new /obj/item/clothing/glasses/sunglasses(src) @@ -474,55 +465,6 @@ new /obj/item/surgical_drapes(src) new /obj/item/clothing/suit/straight_jacket(src) new /obj/item/clothing/mask/muzzle(src) - new /obj/item/mmi/syndie(src) - -/obj/item/storage/backpack/duffelbag/syndie/ammo - name = "ammunition duffel bag" - desc = "" - icon_state = "duffel-syndieammo" - item_state = "duffel-syndieammo" - -/obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun - desc = "" - -/obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun/PopulateContents() - for(var/i in 1 to 6) - new /obj/item/ammo_box/magazine/m12g(src) - new /obj/item/ammo_box/magazine/m12g/slug(src) - new /obj/item/ammo_box/magazine/m12g/slug(src) - new /obj/item/ammo_box/magazine/m12g/dragon(src) - -/obj/item/storage/backpack/duffelbag/syndie/ammo/smg - desc = "" - -/obj/item/storage/backpack/duffelbag/syndie/ammo/smg/PopulateContents() - for(var/i in 1 to 9) - new /obj/item/ammo_box/magazine/smgm45(src) - -/obj/item/storage/backpack/duffelbag/syndie/ammo/dark_gygax - desc = "" - -/obj/item/storage/backpack/duffelbag/syndie/ammo/dark_gygax/PopulateContents() - new /obj/item/mecha_ammo/incendiary(src) - new /obj/item/mecha_ammo/incendiary(src) - new /obj/item/mecha_ammo/incendiary(src) - new /obj/item/mecha_ammo/flashbang(src) - new /obj/item/mecha_ammo/flashbang(src) - new /obj/item/mecha_ammo/flashbang(src) - -/obj/item/storage/backpack/duffelbag/syndie/ammo/mauler - desc = "" - -/obj/item/storage/backpack/duffelbag/syndie/ammo/mauler/PopulateContents() - new /obj/item/mecha_ammo/lmg(src) - new /obj/item/mecha_ammo/lmg(src) - new /obj/item/mecha_ammo/lmg(src) - new /obj/item/mecha_ammo/scattershot(src) - new /obj/item/mecha_ammo/scattershot(src) - new /obj/item/mecha_ammo/scattershot(src) - new /obj/item/mecha_ammo/missiles_he(src) - new /obj/item/mecha_ammo/missiles_he(src) - new /obj/item/mecha_ammo/missiles_he(src) /obj/item/storage/backpack/duffelbag/syndie/c20rbundle desc = "" @@ -540,7 +482,6 @@ new /obj/item/gun/ballistic/shotgun/bulldog(src) new /obj/item/ammo_box/magazine/m12g(src) new /obj/item/ammo_box/magazine/m12g(src) - new /obj/item/clothing/glasses/thermal/syndi(src) /obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle desc = "" @@ -556,30 +497,19 @@ /obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle/PopulateContents() new /obj/item/reagent_containers/spray/chemsprayer/bioterror(src) - new /obj/item/storage/box/syndie_kit/chemical(src) new /obj/item/gun/syringe/syndicate(src) new /obj/item/gun/ballistic/automatic/c20r/toy(src) new /obj/item/storage/box/syringes(src) new /obj/item/ammo_box/foambox/riot(src) - new /obj/item/grenade/chem_grenade/bioterrorfoam(src) if(prob(5)) new /obj/item/reagent_containers/food/snacks/pizza/pineapple(src) -/obj/item/storage/backpack/duffelbag/syndie/c4/PopulateContents() - for(var/i in 1 to 10) - new /obj/item/grenade/c4(src) - -/obj/item/storage/backpack/duffelbag/syndie/x4/PopulateContents() - for(var/i in 1 to 3) - new /obj/item/grenade/c4/x4(src) - /obj/item/storage/backpack/duffelbag/syndie/firestarter desc = "" /obj/item/storage/backpack/duffelbag/syndie/firestarter/PopulateContents() new /obj/item/clothing/under/syndicate/soviet(src) new /obj/item/watertank/op(src) - new /obj/item/clothing/suit/space/hardsuit/syndi/elite(src) new /obj/item/gun/ballistic/automatic/pistol/APS(src) new /obj/item/ammo_box/magazine/pistolm9mm(src) new /obj/item/ammo_box/magazine/pistolm9mm(src) @@ -595,7 +525,6 @@ STR.silent = TRUE /obj/item/storage/backpack/duffelbag/clown/syndie/PopulateContents() - new /obj/item/pda/clown(src) new /obj/item/clothing/under/rank/civilian/clown(src) new /obj/item/clothing/shoes/clown_shoes(src) new /obj/item/clothing/mask/gas/clown_hat(src) diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 6b9d17c0f8..68b459eba5 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -48,7 +48,6 @@ STR.max_w_class = WEIGHT_CLASS_SMALL STR.max_combined_w_class = 30 STR.max_items = 30 - STR.set_holdable(null, list(/obj/item/disk/nuclear)) /obj/item/storage/bag/trash/suicide_act(mob/user) user.visible_message("[user] puts [src] over [user.p_their()] head and starts chomping at the insides! Disgusting!") @@ -199,24 +198,7 @@ /obj/item/reagent_containers/food/snacks/grown, /obj/item/seeds, /obj/item/grown, - /obj/item/reagent_containers/honeycomb, - /obj/item/disk/plantgene )) -//////// - -/obj/item/storage/bag/plants/portaseeder - name = "portable seed extractor" - desc = "" - icon_state = "portaseeder" - -/obj/item/storage/bag/plants/portaseeder/verb/dissolve_contents() - set name = "Activate Seed Extraction" - set hidden = 1 - set desc = "" - if(usr.incapacitated()) - return - for(var/obj/item/O in contents) - seedify(O, 1) // ----------------------------- // Sheet Snatcher @@ -450,10 +432,5 @@ STR.set_holdable(list( /obj/item/stack/ore/bluespace_crystal, /obj/item/assembly, - /obj/item/stock_parts, /obj/item/reagent_containers/glass/beaker, - /obj/item/stack/cable_coil, - /obj/item/circuitboard, - /obj/item/electronics, - /obj/item/wallframe/camera - )) + )) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 3d27ddebbf..e5e923575f 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -51,21 +51,12 @@ /obj/item/wrench, /obj/item/multitool, /obj/item/flashlight, - /obj/item/stack/cable_coil, - /obj/item/t_scanner, /obj/item/analyzer, /obj/item/geiger_counter, /obj/item/extinguisher/mini, - /obj/item/radio, /obj/item/clothing/gloves, - /obj/item/holosign_creator/atmos, - /obj/item/holosign_creator/engineering, /obj/item/forcefield_projector, - /obj/item/assembly/signaler, /obj/item/lightreplacer, - /obj/item/construction/rcd, - /obj/item/pipe_dispenser, - /obj/item/inducer, /obj/item/plunger )) @@ -80,7 +71,6 @@ new /obj/item/crowbar/power(src) new /obj/item/weldingtool/experimental(src)//This can be changed if this is too much new /obj/item/multitool(src) - new /obj/item/stack/cable_coil(src,MAXCOIL,pick("red","yellow","orange")) new /obj/item/extinguisher/mini(src) new /obj/item/analyzer(src) //much roomier now that we've managed to remove two tools @@ -92,7 +82,6 @@ new /obj/item/crowbar(src) new /obj/item/wirecutters(src) new /obj/item/multitool(src) - new /obj/item/stack/cable_coil(src,MAXCOIL,pick("red","yellow","orange")) /obj/item/storage/belt/utility/full/engi/PopulateContents() new /obj/item/screwdriver(src) @@ -101,7 +90,6 @@ new /obj/item/crowbar(src) new /obj/item/wirecutters(src) new /obj/item/multitool(src) - new /obj/item/stack/cable_coil(src,MAXCOIL,pick("red","yellow","orange")) /obj/item/storage/belt/utility/atmostech/PopulateContents() @@ -110,7 +98,6 @@ new /obj/item/weldingtool(src) new /obj/item/crowbar(src) new /obj/item/wirecutters(src) - new /obj/item/t_scanner(src) new /obj/item/extinguisher/mini(src) /obj/item/storage/belt/medical @@ -125,7 +112,6 @@ STR.max_w_class = WEIGHT_CLASS_BULKY STR.max_combined_w_class = 21 STR.set_holdable(list( - /obj/item/healthanalyzer, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/glass/beaker, @@ -140,8 +126,6 @@ /obj/item/flashlight/pen, /obj/item/extinguisher/mini, /obj/item/reagent_containers/hypospray, - /obj/item/sensor_device, - /obj/item/radio, /obj/item/clothing/gloves/, /obj/item/lazarus_injector, /obj/item/bikehorn/rubberducky, @@ -170,8 +154,6 @@ /obj/item/implant, /obj/item/implanter, /obj/item/pinpointer/crew, - /obj/item/holosign_creator/medical, - /obj/item/construction/plumbing, /obj/item/plunger )) @@ -188,12 +170,10 @@ STR.max_items = 5 STR.max_w_class = WEIGHT_CLASS_NORMAL STR.set_holdable(list( - /obj/item/melee/baton, /obj/item/melee/classic_baton, /obj/item/grenade, /obj/item/reagent_containers/spray/pepper, /obj/item/restraints/handcuffs, - /obj/item/assembly/flash/handheld, /obj/item/clothing/glasses, /obj/item/ammo_casing/shotgun, /obj/item/ammo_box, @@ -201,18 +181,14 @@ /obj/item/kitchen/knife/combat, /obj/item/flashlight/seclite, /obj/item/melee/classic_baton/telescopic, - /obj/item/radio, /obj/item/clothing/gloves, /obj/item/restraints/legcuffs/bola, - /obj/item/holosign_creator/security )) /obj/item/storage/belt/security/full/PopulateContents() new /obj/item/reagent_containers/spray/pepper(src) new /obj/item/restraints/handcuffs(src) new /obj/item/grenade/flashbang(src) - new /obj/item/assembly/flash/handheld(src) - new /obj/item/melee/baton/loaded(src) update_icon() /obj/item/storage/belt/security/webbing @@ -249,13 +225,10 @@ /obj/item/wrench, /obj/item/multitool, /obj/item/flashlight, - /obj/item/stack/cable_coil, /obj/item/analyzer, /obj/item/extinguisher/mini, - /obj/item/radio, /obj/item/clothing/gloves, /obj/item/resonator, - /obj/item/mining_scanner, /obj/item/pickaxe, /obj/item/shovel, /obj/item/stack/sheet/animalhide, @@ -269,8 +242,6 @@ /obj/item/reagent_containers/hypospray, /obj/item/gps, /obj/item/storage/bag/ore, - /obj/item/survivalcapsule, - /obj/item/t_scanner/adv_mining_scanner, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/stack/ore, @@ -281,10 +252,6 @@ /obj/item/stack/marker_beacon )) - -/obj/item/storage/belt/mining/vendor - contents = newlist(/obj/item/survivalcapsule) - /obj/item/storage/belt/mining/alt icon_state = "explorer2" item_state = "explorer2" @@ -409,8 +376,6 @@ new /obj/item/weldingtool/abductor(src) new /obj/item/crowbar/abductor(src) new /obj/item/wirecutters/abductor(src) - new /obj/item/multitool/abductor(src) - new /obj/item/stack/cable_coil(src,MAXCOIL,"white") /obj/item/storage/belt/military/army name = "army belt" @@ -448,7 +413,6 @@ /obj/item/lighter, /obj/item/multitool, /obj/item/reagent_containers/food/drinks/bottle/molotov, - /obj/item/grenade/c4, )) /obj/item/storage/belt/grenade/full/PopulateContents() @@ -459,8 +423,6 @@ /obj/item/grenade/empgrenade = 1, /obj/item/grenade/syndieminibomb/concussion/frag = 10, /obj/item/grenade/gluon = 4, - /obj/item/grenade/chem_grenade/incendiary = 2, - /obj/item/grenade/chem_grenade/facid = 1, /obj/item/grenade/syndieminibomb = 2, /obj/item/screwdriver = 1, /obj/item/multitool = 1) @@ -486,7 +448,6 @@ new /obj/item/gun/magic/wand/resurrection(src) new /obj/item/gun/magic/wand/polymorph(src) new /obj/item/gun/magic/wand/teleport(src) - new /obj/item/gun/magic/wand/door(src) new /obj/item/gun/magic/wand/fireball(src) for(var/obj/item/gun/magic/wand/W in contents) //All wands in this pack come in the best possible condition @@ -505,12 +466,10 @@ STR.max_items = 6 STR.max_w_class = WEIGHT_CLASS_BULKY // Set to this so the light replacer can fit. STR.set_holdable(list( - /obj/item/grenade/chem_grenade, /obj/item/lightreplacer, /obj/item/flashlight, /obj/item/reagent_containers/spray, /obj/item/soap, - /obj/item/holosign_creator, /obj/item/forcefield_projector, /obj/item/key/janitor, /obj/item/clothing/gloves, @@ -523,7 +482,6 @@ new /obj/item/lightreplacer(src) new /obj/item/reagent_containers/spray/cleaner(src) new /obj/item/soap/nanotrasen(src) - new /obj/item/holosign_creator(src) new /obj/item/melee/flyswatter(src) /obj/item/storage/belt/bandolier @@ -557,7 +515,6 @@ /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/ammo_box, - /obj/item/gun/energy/e_gun/mini )) /obj/item/storage/belt/holster/full/PopulateContents() diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm index 127391d0f7..b5dd5f2c28 100644 --- a/code/game/objects/items/storage/book.dm +++ b/code/game/objects/items/storage/book.dm @@ -165,11 +165,6 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "burning", . = ..() if(!proximity) return - if(isfloorturf(A)) - to_chat(user, "I hit the floor with the bible.") - if(user.mind && (user.mind.isholy)) - for(var/obj/effect/rune/R in orange(2,user)) - R.invisibility = 0 if(user.mind && (user.mind.isholy)) if(A.reagents && A.reagents.has_reagent(/datum/reagent/water)) // blesses all the water in the holder to_chat(user, "I bless [A].") @@ -187,25 +182,8 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "burning", B.name = name B.icon_state = icon_state B.item_state = item_state - if(istype(A, /obj/item/twohanded/required/cult_bastard) && !iscultist(user)) - var/obj/item/twohanded/required/cult_bastard/sword = A - to_chat(user, "I begin to exorcise [sword].") - playsound(src,'sound/blank.ogg',40,TRUE) - if(do_after(user, 40, target = sword)) - playsound(src,'sound/blank.ogg',60,TRUE) - for(var/obj/item/soulstone/SS in sword.contents) - SS.usability = TRUE - for(var/mob/living/simple_animal/shade/EX in SS) - SSticker.mode.remove_cultist(EX.mind, 1, 0) - EX.icon_state = "ghost1" - EX.name = "Purified [EX.name]" - SS.release_shades(user) - qdel(SS) - new /obj/item/nullrod/claymore(get_turf(sword)) - user.visible_message("[user] has purified [sword]!") - qdel(sword) - - else if(istype(A, /obj/item/soulstone) && !iscultist(user)) + + else if(istype(A, /obj/item/soulstone)) var/obj/item/soulstone/SS = A if(SS.purified) return @@ -219,8 +197,6 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "burning", for(var/mob/M in SS.contents) if(M.mind) SS.icon_state = "purified_soulstone2" - if(iscultist(M)) - SSticker.mode.remove_cultist(M.mind, FALSE, FALSE) for(var/mob/living/simple_animal/shade/EX in SS) EX.icon_state = "ghost1" EX.name = "Purified [initial(EX.name)]" diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 4ccd153a09..f85fbf59f5 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -96,32 +96,7 @@ alpha = 0 ..() -//Disk boxes -/obj/item/storage/box/disks - name = "diskette box" - illustration = "disk_kit" - -/obj/item/storage/box/disks/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/disk/data(src) - - -/obj/item/storage/box/disks_plantgene - name = "plant data disks box" - illustration = "disk_kit" - -/obj/item/storage/box/disks_plantgene/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/disk/plantgene(src) - -/obj/item/storage/box/disks_nanite - name = "nanite program disks box" - illustration = "disk_kit" - -/obj/item/storage/box/disks_nanite/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/disk/nanite_program(src) // Ordinary survival box /obj/item/storage/box/survival @@ -139,39 +114,6 @@ else new /obj/item/tank/internals/plasmaman/belt(src) -/obj/item/storage/box/survival/radio/PopulateContents() - ..() // we want the survival stuff too. - new /obj/item/radio/off(src) - -// Mining survival box -/obj/item/storage/box/survival/mining - mask_type = /obj/item/clothing/mask/gas/explorer - -/obj/item/storage/box/survival/mining/PopulateContents() - ..() - new /obj/item/crowbar/red(src) - -// Engineer survival box -/obj/item/storage/box/survival/engineer - internal_type = /obj/item/tank/internals/emergency_oxygen/engi - -/obj/item/storage/box/survival/engineer/radio/PopulateContents() - ..() // we want the regular items too. - new /obj/item/radio/off(src) - -// Syndie survival box -/obj/item/storage/box/survival/syndie - mask_type = /obj/item/clothing/mask/gas/syndicate - internal_type = /obj/item/tank/internals/emergency_oxygen/engi - medipen_type = null - -// Security survival box -/obj/item/storage/box/survival/security - mask_type = /obj/item/clothing/mask/gas/sechailer - -/obj/item/storage/box/survival/security/radio/PopulateContents() - ..() // we want the regular stuff too - new /obj/item/radio/off(src) /obj/item/storage/box/gloves name = "box of latex gloves" @@ -284,44 +226,6 @@ for(var/i in 1 to 7) new /obj/item/grenade/flashbang(src) -/obj/item/storage/box/flashes - name = "box of flashbulbs" - desc = "" - icon_state = "secbox" - illustration = "flashbang" - -/obj/item/storage/box/flashes/PopulateContents() - for(var/i in 1 to 6) - new /obj/item/assembly/flash/handheld(src) - -/obj/item/storage/box/wall_flash - name = "wall-mounted flash kit" - desc = "" - illustration = "flashbang" - -/obj/item/storage/box/wall_flash/PopulateContents() - var/id = rand(1000, 9999) - // FIXME what if this conflicts with an existing one? - - new /obj/item/wallframe/button(src) - new /obj/item/electronics/airlock(src) - var/obj/item/assembly/control/flasher/remote = new(src) - remote.id = id - var/obj/item/wallframe/flasher/frame = new(src) - frame.id = id - new /obj/item/assembly/flash/handheld(src) - new /obj/item/screwdriver(src) - - -/obj/item/storage/box/teargas - name = "box of tear gas grenades (WARNING)" - desc = "" - illustration = "flashbang" - -/obj/item/storage/box/teargas/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/grenade/chem_grenade/teargas(src) - /obj/item/storage/box/emps name = "box of emp grenades" desc = "" @@ -340,8 +244,7 @@ var/static/items_inside = list( /obj/item/implantcase/tracking = 4, /obj/item/implanter = 1, - /obj/item/implantpad = 1, - /obj/item/locator = 1) + /obj/item/implantpad = 1) generate_items_inside(items_inside,src) /obj/item/storage/box/minertracker @@ -353,8 +256,7 @@ var/static/items_inside = list( /obj/item/implantcase/tracking = 3, /obj/item/implanter = 1, - /obj/item/implantpad = 1, - /obj/item/locator = 1) + /obj/item/implantpad = 1) generate_items_inside(items_inside,src) /obj/item/storage/box/chemimp @@ -484,24 +386,6 @@ for(var/i in 1 to 7) new /obj/item/card/id(src) -//Some spare PDAs in a box -/obj/item/storage/box/PDAs - name = "spare PDAs" - desc = "" - illustration = "pda" - -/obj/item/storage/box/PDAs/PopulateContents() - for(var/i in 1 to 4) - new /obj/item/pda(src) - new /obj/item/cartridge/head(src) - - var/newcart = pick( /obj/item/cartridge/engineering, - /obj/item/cartridge/security, - /obj/item/cartridge/medical, - /obj/item/cartridge/signal/toxins, - /obj/item/cartridge/quartermaster) - new newcart(src) - /obj/item/storage/box/silver_ids name = "box of spare silver IDs" desc = "" @@ -526,16 +410,6 @@ new /obj/item/card/id/prisoner/six(src) new /obj/item/card/id/prisoner/seven(src) -/obj/item/storage/box/seccarts - name = "box of PDA security cartridges" - desc = "" - illustration = "pda" - -/obj/item/storage/box/seccarts/PopulateContents() - new /obj/item/cartridge/detective(src) - for(var/i in 1 to 6) - new /obj/item/cartridge/security(src) - /obj/item/storage/box/firingpins name = "box of standard firing pins" desc = "" @@ -554,16 +428,6 @@ for(var/i in 1 to 5) new /obj/item/firing_pin/paywall(src) -/obj/item/storage/box/lasertagpins - name = "box of laser tag firing pins" - desc = "" - illustration = "id" - -/obj/item/storage/box/lasertagpins/PopulateContents() - for(var/i in 1 to 3) - new /obj/item/firing_pin/tag/red(src) - new /obj/item/firing_pin/tag/blue(src) - /obj/item/storage/box/handcuffs name = "box of spare handcuffs" desc = "" @@ -711,24 +575,6 @@ for(var/i in 1 to 7) new /obj/item/clothing/accessory/armband/deputy(src) -/obj/item/storage/box/metalfoam - name = "box of metal foam grenades" - desc = "" - illustration = "flashbang" - -/obj/item/storage/box/metalfoam/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/grenade/chem_grenade/metalfoam(src) - -/obj/item/storage/box/smart_metal_foam - name = "box of smart metal foam grenades" - desc = "" - illustration = "flashbang" - -/obj/item/storage/box/smart_metal_foam/PopulateContents() - for(var/i in 1 to 7) - new/obj/item/grenade/chem_grenade/smart_metal_foam(src) - /obj/item/storage/box/hug name = "box of hugs" desc = "" @@ -746,26 +592,6 @@ playsound(loc, "rustle", 50, TRUE, -5) user.visible_message("[user] hugs \the [src].","I hug \the [src].") -/////clown box & honkbot assembly -/obj/item/storage/box/clown - name = "clown box" - desc = "" - illustration = "clown" - -/obj/item/storage/box/clown/attackby(obj/item/I, mob/user, params) - if((istype(I, /obj/item/bodypart/l_arm/robot)) || (istype(I, /obj/item/bodypart/r_arm/robot))) - if(contents.len) //prevent accidently deleting contents - to_chat(user, "I need to empty [src] out first!") - return - if(!user.temporarilyRemoveItemFromInventory(I)) - return - qdel(I) - to_chat(user, "I add some wheels to the [src]! You've got a honkbot assembly now! Honk!") - var/obj/item/bot_assembly/honkbot/A = new - qdel(src) - user.put_in_hands(A) - else - return ..() ////// /obj/item/storage/box/hug/medical/PopulateContents() @@ -968,12 +794,6 @@ /obj/item/storage/box/ingredients/delights/PopulateContents() new /obj/item/reagent_containers/food/snacks/chocolatebar(src) -/obj/item/storage/box/ingredients/grains - theme_name = "grains" - -/obj/item/storage/box/ingredients/grains/PopulateContents() - new /obj/item/reagent_containers/honeycomb(src) - /obj/item/storage/box/ingredients/carnivore theme_name = "carnivore" @@ -986,23 +806,6 @@ /obj/item/storage/box/ingredients/exotic/PopulateContents() new /obj/item/reagent_containers/food/snacks/chocolatebar(src) -/obj/item/storage/box/emptysandbags - name = "box of empty sandbags" - -/obj/item/storage/box/emptysandbags/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/emptysandbag(src) - -/obj/item/storage/box/rndboards - name = "\proper the liberator's legacy" - desc = "" - -/obj/item/storage/box/rndboards/PopulateContents() - new /obj/item/circuitboard/machine/protolathe(src) - new /obj/item/circuitboard/machine/destructive_analyzer(src) - new /obj/item/circuitboard/machine/circuit_imprinter(src) - new /obj/item/circuitboard/computer/rdconsole(src) - /obj/item/storage/box/silver_sulf name = "box of silver sulfadiazine patches" desc = "" @@ -1018,58 +821,6 @@ for(var/i in 1 to 7) new /obj/item/pen/fountain(src) -/obj/item/storage/box/holy_grenades - name = "box of holy hand grenades" - desc = "" - illustration = "flashbang" - -/obj/item/storage/box/holy_grenades/PopulateContents() - for(var/i in 1 to 7) - new/obj/item/grenade/chem_grenade/holy(src) - -/obj/item/storage/box/stockparts/basic //for ruins where it's a bad idea to give access to an autolathe/protolathe, but still want to make stock parts accessible - name = "box of stock parts" - desc = "" - -/obj/item/storage/box/stockparts/basic/PopulateContents() - var/static/items_inside = list( - /obj/item/stock_parts/capacitor = 3, - /obj/item/stock_parts/scanning_module = 3, - /obj/item/stock_parts/manipulator = 3, - /obj/item/stock_parts/micro_laser = 3, - /obj/item/stock_parts/matter_bin = 3) - generate_items_inside(items_inside,src) - -/obj/item/storage/box/stockparts/deluxe - name = "box of deluxe stock parts" - desc = "" - icon_state = "syndiebox" - -/obj/item/storage/box/stockparts/deluxe/PopulateContents() - var/static/items_inside = list( - /obj/item/stock_parts/capacitor/quadratic = 3, - /obj/item/stock_parts/scanning_module/triphasic = 3, - /obj/item/stock_parts/manipulator/femto = 3, - /obj/item/stock_parts/micro_laser/quadultra = 3, - /obj/item/stock_parts/matter_bin/bluespace = 3) - generate_items_inside(items_inside,src) - -/obj/item/storage/box/dishdrive - name = "DIY Dish Drive Kit" - desc = "" - custom_premium_price = 200 - -/obj/item/storage/box/dishdrive/PopulateContents() - var/static/items_inside = list( - /obj/item/stack/sheet/metal/five = 1, - /obj/item/stack/cable_coil/five = 1, - /obj/item/circuitboard/machine/dish_drive = 1, - /obj/item/stack/sheet/glass = 1, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stock_parts/matter_bin = 2, - /obj/item/screwdriver = 1) - generate_items_inside(items_inside,src) - /obj/item/storage/box/material name = "box of materials" illustration = "implant" @@ -1093,8 +844,7 @@ /obj/item/stack/sheet/bluespace_crystal=50,\ /obj/item/stack/sheet/mineral/bananium=50,\ /obj/item/stack/sheet/mineral/wood=50,\ - /obj/item/stack/sheet/plastic/fifty=1,\ - /obj/item/stack/sheet/runed_metal/fifty=1 + /obj/item/stack/sheet/plastic/fifty=1, ) generate_items_inside(items_inside,src) @@ -1106,15 +856,9 @@ var/static/items_inside = list( /obj/item/flashlight/emp/debug=1,\ /obj/item/geiger_counter=1,\ - /obj/item/pipe_dispenser=1,\ /obj/item/card/emag=1,\ - /obj/item/card/id/syndicate/nuke_leader=1,\ /obj/item/card/id/departmental_budget/car=1,\ /obj/item/stack/spacecash/c1000=50,\ - /obj/item/healthanalyzer/advanced=1,\ - /obj/item/disk/tech_disk/debug=1,\ - /obj/item/uplink/debug=1,\ - /obj/item/uplink/nuclear/debug=1,\ /obj/item/storage/box/beakers/bluespace=1,\ /obj/item/storage/box/beakers/variety=1,\ /obj/item/storage/box/material=1 diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm index 4398045643..9abb2e4eae 100644 --- a/code/game/objects/items/storage/firstaid.dm +++ b/code/game/objects/items/storage/firstaid.dm @@ -50,7 +50,6 @@ STR.max_items = 12 STR.max_combined_w_class = 24 STR.set_holdable(list( - /obj/item/healthanalyzer, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/glass/beaker, @@ -65,8 +64,6 @@ /obj/item/flashlight/pen, /obj/item/extinguisher/mini, /obj/item/reagent_containers/hypospray, - /obj/item/sensor_device, - /obj/item/radio, /obj/item/clothing/gloves/, /obj/item/lazarus_injector, /obj/item/bikehorn/rubberducky, @@ -95,7 +92,6 @@ /obj/item/implant, /obj/item/implanter, /obj/item/pinpointer/crew, - /obj/item/holosign_creator/medical )) /obj/item/storage/firstaid/medical/PopulateContents() @@ -109,8 +105,7 @@ /obj/item/surgical_drapes = 1, /obj/item/scalpel = 1, /obj/item/hemostat = 1, - /obj/item/cautery = 1, - /obj/item/healthanalyzer = 1) + /obj/item/cautery = 1) generate_items_inside(items_inside,src) /obj/item/storage/firstaid/ancient @@ -257,7 +252,6 @@ if(empty) return new /obj/item/stack/medical/gauze(src) - new /obj/item/defibrillator/compact/combat/loaded(src) new /obj/item/reagent_containers/hypospray/combat(src) new /obj/item/reagent_containers/pill/patch/libital(src) new /obj/item/reagent_containers/pill/patch/libital(src) @@ -265,31 +259,6 @@ new /obj/item/reagent_containers/pill/patch/aiuri(src) new /obj/item/clothing/glasses/hud/health/night(src) -//medibot assembly -/obj/item/storage/firstaid/attackby(obj/item/bodypart/S, mob/user, params) - if((!istype(S, /obj/item/bodypart/l_arm/robot)) && (!istype(S, /obj/item/bodypart/r_arm/robot))) - return ..() - - //Making a medibot! - if(contents.len >= 1) - to_chat(user, "I need to empty [src] out first!") - return - - var/obj/item/bot_assembly/medbot/A = new - if(istype(src, /obj/item/storage/firstaid/fire)) - A.set_skin("ointment") - else if(istype(src, /obj/item/storage/firstaid/toxin)) - A.set_skin("tox") - else if(istype(src, /obj/item/storage/firstaid/o2)) - A.set_skin("o2") - else if(istype(src, /obj/item/storage/firstaid/brute)) - A.set_skin("brute") - user.put_in_hands(A) - to_chat(user, "I add [S] to [src].") - A.robot_arm = S.type - A.firstaid = type - qdel(S) - qdel(src) /* * Pill Bottles diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index 80b57cd0f3..d518af80eb 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -57,7 +57,6 @@ new /obj/item/flashlight/glowstick(src) if(3) new /obj/item/flashlight/flare(src) - new /obj/item/radio/off(src) /obj/item/storage/toolbox/emergency/old name = "rusty red toolbox" @@ -94,39 +93,6 @@ /obj/item/storage/toolbox/mechanical/old/heirloom/PopulateContents() return -/obj/item/storage/toolbox/mechanical/old/clean - name = "toolbox" - desc = "" - icon_state = "oldtoolboxclean" - item_state = "toolbox_blue" - has_latches = FALSE - force = 19 - throwforce = 22 - -/obj/item/storage/toolbox/mechanical/old/clean/proc/calc_damage() - var/power = 0 - for (var/obj/item/stack/telecrystal/TC in GetAllContents()) - power += TC.amount - force = 19 + power - throwforce = 22 + power - -/obj/item/storage/toolbox/mechanical/old/clean/attack(mob/target, mob/living/user) - calc_damage() - ..() - -/obj/item/storage/toolbox/mechanical/old/clean/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - calc_damage() - ..() - -/obj/item/storage/toolbox/mechanical/old/clean/PopulateContents() - new /obj/item/screwdriver(src) - new /obj/item/wrench(src) - new /obj/item/weldingtool(src) - new /obj/item/crowbar(src) - new /obj/item/wirecutters(src) - new /obj/item/multitool(src) - new /obj/item/clothing/gloves/color/yellow(src) - /obj/item/storage/toolbox/electrical name = "electrical toolbox" icon_state = "yellow" @@ -134,17 +100,9 @@ material_flags = NONE /obj/item/storage/toolbox/electrical/PopulateContents() - var/pickedcolor = pick("red","yellow","green","blue","pink","orange","cyan","white") new /obj/item/screwdriver(src) new /obj/item/wirecutters(src) - new /obj/item/t_scanner(src) new /obj/item/crowbar(src) - new /obj/item/stack/cable_coil(src,MAXCOIL,pickedcolor) - new /obj/item/stack/cable_coil(src,MAXCOIL,pickedcolor) - if(prob(5)) - new /obj/item/clothing/gloves/color/yellow(src) - else - new /obj/item/stack/cable_coil(src,MAXCOIL,pickedcolor) /obj/item/storage/toolbox/syndicate name = "suspicious looking toolbox" @@ -175,41 +133,13 @@ material_flags = NONE /obj/item/storage/toolbox/drone/PopulateContents() - var/pickedcolor = pick("red","yellow","green","blue","pink","orange","cyan","white") new /obj/item/screwdriver(src) new /obj/item/wrench(src) new /obj/item/weldingtool(src) new /obj/item/crowbar(src) - new /obj/item/stack/cable_coil(src,MAXCOIL,pickedcolor) new /obj/item/wirecutters(src) new /obj/item/multitool(src) -/obj/item/storage/toolbox/artistic - name = "artistic toolbox" - desc = "" - icon_state = "green" - item_state = "artistic_toolbox" - w_class = WEIGHT_CLASS_GIGANTIC //Holds more than a regular toolbox! - material_flags = NONE - -/obj/item/storage/toolbox/artistic/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_combined_w_class = 20 - STR.max_items = 10 - -/obj/item/storage/toolbox/artistic/PopulateContents() - new /obj/item/storage/crayons(src) - new /obj/item/crowbar(src) - new /obj/item/stack/pipe_cleaner_coil/red(src) - new /obj/item/stack/pipe_cleaner_coil/yellow(src) - new /obj/item/stack/pipe_cleaner_coil/blue(src) - new /obj/item/stack/pipe_cleaner_coil/green(src) - new /obj/item/stack/pipe_cleaner_coil/pink(src) - new /obj/item/stack/pipe_cleaner_coil/orange(src) - new /obj/item/stack/pipe_cleaner_coil/cyan(src) - new /obj/item/stack/pipe_cleaner_coil/white(src) - /obj/item/storage/toolbox/ammo name = "ammo box" desc = "" @@ -226,41 +156,3 @@ new /obj/item/ammo_box/a762(src) new /obj/item/ammo_box/a762(src) new /obj/item/ammo_box/a762(src) - -//floorbot assembly -/obj/item/storage/toolbox/attackby(obj/item/stack/tile/plasteel/T, mob/user, params) - var/list/allowed_toolbox = list(/obj/item/storage/toolbox/emergency, //which toolboxes can be made into floorbots - /obj/item/storage/toolbox/electrical, - /obj/item/storage/toolbox/mechanical, - /obj/item/storage/toolbox/artistic, - /obj/item/storage/toolbox/syndicate) - - if(!istype(T, /obj/item/stack/tile/plasteel)) - ..() - return - if(!is_type_in_list(src, allowed_toolbox) && (type != /obj/item/storage/toolbox)) - return - if(contents.len >= 1) - to_chat(user, "They won't fit in, as there is already stuff inside!") - return - if(T.use(10)) - var/obj/item/bot_assembly/floorbot/B = new - B.toolbox = type - switch(B.toolbox) - if(/obj/item/storage/toolbox) - B.toolbox_color = "r" - if(/obj/item/storage/toolbox/emergency) - B.toolbox_color = "r" - if(/obj/item/storage/toolbox/electrical) - B.toolbox_color = "y" - if(/obj/item/storage/toolbox/artistic) - B.toolbox_color = "g" - if(/obj/item/storage/toolbox/syndicate) - B.toolbox_color = "s" - user.put_in_hands(B) - B.update_icon() - to_chat(user, "I add the tiles into the empty [name]. They protrude from the top.") - qdel(src) - else - to_chat(user, "I need 10 floor tiles to start building a floorbot!") - return diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm deleted file mode 100644 index b36830aba2..0000000000 --- a/code/game/objects/items/storage/uplink_kits.dm +++ /dev/null @@ -1,548 +0,0 @@ - -/obj/item/storage/box/syndicate - -/obj/item/storage/box/syndicate/bundle_A/PopulateContents() - switch (pickweight(list("recon" = 2, "bloodyspai" = 3, "stealth" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "sniper" = 1, "metaops" = 1))) - if("recon") - new /obj/item/clothing/glasses/thermal/xray(src) // ~8 tc? - new /obj/item/storage/briefcase/launchpad(src) //6 tc - new /obj/item/twohanded/binoculars(src) // 2 tc? - new /obj/item/encryptionkey/syndicate(src) // 2 tc - new /obj/item/storage/box/syndie_kit/space(src) //4 tc - new /obj/item/grenade/syndieminibomb/concussion/frag(src) // ~2 tc each? - new /obj/item/grenade/syndieminibomb/concussion/frag(src) - new /obj/item/flashlight/emp(src) - - if("bloodyspai") - new /obj/item/clothing/under/chameleon(src) // 2 tc since it's not the full set - new /obj/item/clothing/mask/chameleon(src) // Goes with above - new /obj/item/card/id/syndicate(src) // 2 tc - new /obj/item/clothing/shoes/chameleon/noslip(src) // 2 tc - new /obj/item/camera_bug(src) // 1 tc - new /obj/item/multitool/ai_detect(src) // 1 tc - new /obj/item/encryptionkey/syndicate(src) // 2 tc - new /obj/item/reagent_containers/syringe/mulligan(src) // 4 tc - new /obj/item/switchblade(src) //I'll count this as 2 tc - new /obj/item/storage/fancy/cigarettes/cigpack_syndicate (src) // 2 tc this shit heals - new /obj/item/flashlight/emp(src) // 2 tc - new /obj/item/chameleon(src) // 7 tc - - if("stealth") - new /obj/item/gun/energy/kinetic_accelerator/crossbow(src) - new /obj/item/pen/sleepy(src) - new /obj/item/healthanalyzer/rad_laser(src) - new /obj/item/chameleon(src) - new /obj/item/soap/syndie(src) - new /obj/item/clothing/glasses/thermal/syndi(src) - new /obj/item/flashlight/emp(src) - new /obj/item/jammer(src) - - if("guns") - new /obj/item/gun/ballistic/revolver(src) - new /obj/item/ammo_box/a357(src) - new /obj/item/ammo_box/a357(src) - new /obj/item/card/emag(src) - new /obj/item/grenade/c4(src) - new /obj/item/clothing/gloves/color/latex/nitrile(src) - new /obj/item/clothing/mask/gas/clown_hat(src) - new /obj/item/clothing/under/suit/black_really(src) - - if("screwed") - new /obj/item/sbeacondrop/bomb(src) - new /obj/item/grenade/syndieminibomb(src) - new /obj/item/sbeacondrop/powersink(src) - new /obj/item/clothing/suit/space/syndicate/black/red(src) - new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) - new /obj/item/encryptionkey/syndicate(src) - - if("murder") - new /obj/item/melee/transforming/energy/sword/saber(src) - new /obj/item/clothing/glasses/thermal/syndi(src) - new /obj/item/card/emag(src) - new /obj/item/clothing/shoes/chameleon/noslip(src) - new /obj/item/encryptionkey/syndicate(src) - new /obj/item/grenade/syndieminibomb(src) - - if("implant") - new /obj/item/implanter/freedom(src) - new /obj/item/implanter/uplink/precharged(src) - new /obj/item/implanter/emp(src) - new /obj/item/implanter/adrenalin(src) - new /obj/item/implanter/explosive(src) - new /obj/item/implanter/storage(src) - - if("hacker") - new /obj/item/aiModule/syndicate(src) - new /obj/item/card/emag(src) - new /obj/item/encryptionkey/binary(src) - new /obj/item/aiModule/toyAI(src) - new /obj/item/multitool/ai_detect(src) - new /obj/item/storage/toolbox/syndicate(src) - new /obj/item/camera_bug(src) - new /obj/item/clothing/glasses/thermal/syndi(src) - new /obj/item/card/id/syndicate(src) - - if("lordsingulo") - new /obj/item/sbeacondrop(src) - new /obj/item/clothing/suit/space/syndicate/black/red(src) - new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) - new /obj/item/card/emag(src) - new /obj/item/storage/toolbox/syndicate(src) - - if("sabotage") - /obj/item/storage/backpack/duffelbag/syndie/sabotage - new /obj/item/camera_bug(src) - new /obj/item/sbeacondrop/powersink(src) - new /obj/item/cartridge/virus/syndicate(src) - new /obj/item/storage/toolbox/syndicate(src) - new /obj/item/pizzabox/bomb(src) - new /obj/item/storage/box/syndie_kit/emp(src) - - if("sniper") //This shit is unique so can't really balance it around tc, also no silencer because getting killed without ANY indicator on what killed you sucks - new /obj/item/gun/ballistic/automatic/sniper_rifle(src) // 12 tc - new /obj/item/ammo_box/magazine/sniper_rounds/penetrator(src) - new /obj/item/clothing/glasses/thermal/syndi(src) - new /obj/item/clothing/gloves/color/latex/nitrile(src) - new /obj/item/clothing/mask/gas/clown_hat(src) - new /obj/item/clothing/under/suit/black_really(src) - - if("metaops") - new /obj/item/clothing/suit/space/hardsuit/syndi(src) // 8 tc - new /obj/item/gun/ballistic/shotgun/bulldog/unrestricted(src) // 8 tc - new /obj/item/implanter/explosive(src) // 2 tc - new /obj/item/ammo_box/magazine/m12g(src) // 2 tc - new /obj/item/ammo_box/magazine/m12g(src) // 2 tc - new /obj/item/grenade/c4 (src) // 1 tc - new /obj/item/grenade/c4 (src) // 1 tc - new /obj/item/card/emag(src) // 6 tc - -/obj/item/storage/box/syndicate/bundle_B/PopulateContents() - switch (pickweight(list( "bond" = 2, "ninja" = 1, "darklord" = 1, "white_whale_holy_grail" = 2, "mad_scientist" = 2, "bee" = 1, "mr_freeze" = 2))) - if("bond") - new /obj/item/gun/ballistic/automatic/pistol(src) - new /obj/item/suppressor(src) - new /obj/item/ammo_box/magazine/m10mm(src) - new /obj/item/ammo_box/magazine/m10mm(src) - new /obj/item/clothing/under/chameleon(src) - new /obj/item/card/id/syndicate(src) - new /obj/item/reagent_containers/hypospray/medipen/stimulants(src) - new /obj/item/reagent_containers/glass/rag(src) - - if("ninja") - new /obj/item/katana(src) // Unique , hard to tell how much tc this is worth. 8 tc? - new /obj/item/implanter/adrenalin(src) // 8 tc - for(var/i in 1 to 6) - new /obj/item/throwing_star(src) // ~5 tc for all 6 - new /obj/item/storage/belt/chameleon(src) // Unique but worth at least 2 tc - new /obj/item/card/id/syndicate(src) // 2 tc - new /obj/item/chameleon(src) // 7 tc - - if("darklord") - new /obj/item/twohanded/dualsaber(src) - new /obj/item/dnainjector/telemut/darkbundle(src) - new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) - new /obj/item/card/id/syndicate(src) - new /obj/item/clothing/shoes/chameleon/noslip(src) //because slipping while being a dark lord sucks - new /obj/item/book/granter/spell/summonitem(src) - - if("white_whale_holy_grail") //Unique items that don't appear anywhere else - new /obj/item/pneumatic_cannon/speargun(src) - new /obj/item/storage/backpack/magspear_quiver(src) - new /obj/item/clothing/suit/space/hardsuit/carp(src) - new /obj/item/clothing/mask/gas/carp(src) - new /obj/item/grenade/spawnergrenade/spesscarp(src) - - if("mad_scientist") - new /obj/item/clothing/suit/toggle/labcoat/mad(src) // 0 tc - new /obj/item/clothing/shoes/jackboots(src) // 0 tc - new /obj/item/megaphone(src) // 0 tc - new /obj/item/grenade/clusterbuster/random(src) // 10 tc? - new /obj/item/grenade/clusterbuster/random(src) // 10 tc? - new /obj/item/grenade/chem_grenade/bioterrorfoam(src) // 5 tc - new /obj/item/assembly/signaler(src) // 0 tc - new /obj/item/assembly/signaler(src) // 0 tc - new /obj/item/assembly/signaler(src) // 0 tc - new /obj/item/assembly/signaler(src) // 0 tc - new /obj/item/storage/toolbox/syndicate(src) // 1 tc - new /obj/item/pen/edagger(src) - new /obj/item/gun/energy/wormhole_projector(src) - new /obj/item/gun/energy/decloner/unrestricted(src) - - if("bee") - new /obj/item/paper/fluff/bee_objectives(src) // 0 tc (motivation) - new /obj/item/clothing/suit/hooded/bee_costume(src) // 0 tc - new /obj/item/clothing/mask/rat/bee(src) // 0 tc - new /obj/item/storage/belt/fannypack/yellow(src) // 0 tc - new /obj/item/grenade/spawnergrenade/buzzkill(src) - new /obj/item/grenade/spawnergrenade/buzzkill(src) - new /obj/item/reagent_containers/glass/bottle/beesease(src) // 10 tc? - new /obj/item/melee/beesword(src) //priceless - - if("mr_freeze") - new /obj/item/clothing/glasses/cold(src) - new /obj/item/clothing/gloves/color/black(src) - new /obj/item/clothing/mask/chameleon(src) - new /obj/item/clothing/suit/hooded/wintercoat(src) - new /obj/item/clothing/shoes/winterboots(src) - new /obj/item/grenade/gluon(src) - new /obj/item/grenade/gluon(src) - new /obj/item/grenade/gluon(src) - new /obj/item/grenade/gluon(src) - new /obj/item/dnainjector/geladikinesis(src) - new /obj/item/dnainjector/cryokinesis(src) - new /obj/item/gun/energy/temperature/security(src) - new /obj/item/melee/transforming/energy/sword/saber/blue(src) //see see it fits the theme bc its blue and ice is blue - -/obj/item/storage/box/syndicate/contract_kit - name = "Contract Kit" - desc = "" - icon_state = "syndiebox" - illustration = "writing_syndie" - -/obj/item/storage/box/syndicate/contractor_loadout - name = "Standard Loadout" - desc = "" - icon_state = "syndiebox" - illustration = "writing_syndie" - -/obj/item/paper/contractor_guide - name = "Contractor Guide" - -/obj/item/paper/contractor_guide/Initialize() - info = {"

    Welcome agent, congratulations on my new position as contractor. On top of my already assigned objectives, - this kit will provide you contracts to take on for TC payments.

    - -

    Provided within, we give my specialist contractor space suit. It's even more compact, being able to fit into a pocket, and faster than the - Syndicate space suit available to you on the uplink. We also provide my chameleon jumpsuit and mask, both of which can be changed - to any form you need for the moment. The cigarettes are a special blend - it'll heal my injuries slowly overtime.

    - -

    My standard issue contractor baton hits harder than the ones you might be used to, and likely be my go to weapon for kidnapping your - targets. The three additional items have been randomly selected from what we had available. We hope they're useful to you for my mission.

    - -

    The contractor hub, available at the top right of the uplink, will provide you unique items and abilities. These are bought using Contractor Rep, - with two Rep being provided each time you complete a contract.

    - -

    Using the tablet

    -
      -
    1. Open the Syndicate Contract Uplink program.
    2. -
    3. Here, you can accept a contract, and redeem my TC payments from completed contracts.
    4. -
    5. The payment number shown in brackets is the bonus you'll recieve when bringing my target alive. You recieve the - other number regardless of if they were alive or dead.
    6. -
    7. Contracts are completed by bringing the target to designated dropoff, calling for extraction, and putting them - inside the pod.
    8. -
    - -

    Be careful when accepting a contract. While you'll be able to see the location of the dropoff point, cancelling will make it - unavailable to take on again.

    -

    The tablet can also be recharged at any cell charger.

    -

    Extracting

    -
      -
    1. Make sure both myself and my target are at the dropoff.
    2. -
    3. Call the extraction, and stand back from the drop point.
    4. -
    5. If it fails, make sure my target is inside, and there's a free space for the pod to land.
    6. -
    7. Grab my target, and drag them into the pod.
    8. -
    -

    Ransoms

    -

    We need my target for our own reasons, but we ransom them back to my mission area once their use is served. They will return back - from where you sent them off from in several minutes time. Don't worry, we give you a cut of what we get paid. We pay this into whatever - ID card you have equipped, on top of the TC payment we give.

    - -

    Good luck agent. You can burn this document with the supplied lighter.

    "} - - return ..() - -/obj/item/storage/box/syndicate/contractor_loadout/PopulateContents() - new /obj/item/clothing/head/helmet/space/syndicate/contract(src) - new /obj/item/clothing/suit/space/syndicate/contract(src) - new /obj/item/clothing/under/chameleon(src) - new /obj/item/clothing/mask/chameleon(src) - new /obj/item/card/id/syndicate(src) - new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src) - new /obj/item/lighter(src) - -/obj/item/storage/box/syndicate/contract_kit/PopulateContents() - new /obj/item/modular_computer/tablet/syndicate_contract_uplink/preset/uplink(src) - new /obj/item/storage/box/syndicate/contractor_loadout(src) - new /obj/item/melee/classic_baton/telescopic/contractor_baton(src) - - // All about 4 TC or less - some nukeops only items, but fit nicely to the theme. - var/list/item_list = list( - /obj/item/storage/backpack/duffelbag/syndie/x4, - /obj/item/storage/box/syndie_kit/throwing_weapons, - /obj/item/gun/syringe/syndicate, - /obj/item/pen/edagger, - /obj/item/pen/sleepy, - /obj/item/flashlight/emp, - /obj/item/reagent_containers/syringe/mulligan, - /obj/item/clothing/shoes/chameleon/noslip, - /obj/item/storage/firstaid/tactical, - /obj/item/encryptionkey/syndicate, - /obj/item/clothing/glasses/thermal/syndi, - /obj/item/slimepotion/slime/sentience/nuclear, - /obj/item/storage/box/syndie_kit/imp_radio, - /obj/item/storage/box/syndie_kit/imp_uplink, - /obj/item/clothing/gloves/krav_maga/combatglovesplus, - /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot, - /obj/item/reagent_containers/hypospray/medipen/stimulants, - /obj/item/storage/box/syndie_kit/imp_freedom, - /obj/item/toy/eightball/haunted - ) - - var/obj/item1 = pick_n_take(item_list) - var/obj/item2 = pick_n_take(item_list) - var/obj/item3 = pick_n_take(item_list) - - // Create two, non repeat items from the list. - new item1(src) - new item2(src) - new item3(src) - - // Paper guide - new /obj/item/paper/contractor_guide(src) - -/obj/item/storage/box/syndie_kit - name = "box" - desc = "" - icon_state = "syndiebox" - illustration = "writing_syndie" - -/obj/item/storage/box/syndie_kit/origami_bundle - name = "origami kit" - desc = "" - -/obj/item/storage/box/syndie_kit/origami_bundle/PopulateContents() - new /obj/item/book/granter/action/origami(src) - for(var/i in 1 to 5) - new /obj/item/paper(src) - -/obj/item/storage/box/syndie_kit/imp_freedom - name = "freedom implant box" - -/obj/item/storage/box/syndie_kit/imp_freedom/PopulateContents() - new /obj/item/implanter/freedom(src) - -/obj/item/storage/box/syndie_kit/imp_microbomb - name = "microbomb implant box" - -/obj/item/storage/box/syndie_kit/imp_microbomb/PopulateContents() - new /obj/item/implanter/explosive(src) - -/obj/item/storage/box/syndie_kit/imp_macrobomb - name = "macrobomb implant box" - -/obj/item/storage/box/syndie_kit/imp_macrobomb/PopulateContents() - new /obj/item/implanter/explosive_macro(src) - -/obj/item/storage/box/syndie_kit/imp_uplink - name = "uplink implant box" - -/obj/item/storage/box/syndie_kit/imp_uplink/PopulateContents() - new /obj/item/implanter/uplink(src) - -/obj/item/storage/box/syndie_kit/bioterror - name = "bioterror syringe box" - -/obj/item/storage/box/syndie_kit/bioterror/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/reagent_containers/syringe/bioterror(src) - -/obj/item/storage/box/syndie_kit/imp_adrenal - name = "adrenal implant box" - -/obj/item/storage/box/syndie_kit/imp_adrenal/PopulateContents() - new /obj/item/implanter/adrenalin(src) - -/obj/item/storage/box/syndie_kit/imp_storage - name = "storage implant box" - -/obj/item/storage/box/syndie_kit/imp_storage/PopulateContents() - new /obj/item/implanter/storage(src) - -/obj/item/storage/box/syndie_kit/imp_stealth - name = "stealth implant box" - -/obj/item/storage/box/syndie_kit/imp_stealth/PopulateContents() - new /obj/item/implanter/stealth(src) - -/obj/item/storage/box/syndie_kit/imp_radio - name = "syndicate radio implant box" - -/obj/item/storage/box/syndie_kit/imp_radio/PopulateContents() - new /obj/item/implanter/radio/syndicate(src) - -/obj/item/storage/box/syndie_kit/space - name = "boxed space suit and helmet" - -/obj/item/storage/box/syndie_kit/space/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_NORMAL - STR.set_holdable(list(/obj/item/clothing/suit/space/syndicate, /obj/item/clothing/head/helmet/space/syndicate)) - -/obj/item/storage/box/syndie_kit/space/PopulateContents() - if(prob(50)) - new /obj/item/clothing/suit/space/syndicate/black/red(src) // Black and red is so in right now - new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) - - else - new /obj/item/clothing/head/helmet/space/syndicate(src) - new /obj/item/clothing/suit/space/syndicate(src) - -/obj/item/storage/box/syndie_kit/emp - name = "EMP kit" - -/obj/item/storage/box/syndie_kit/emp/PopulateContents() - for(var/i in 1 to 5) - new /obj/item/grenade/empgrenade(src) - new /obj/item/implanter/emp(src) - -/obj/item/storage/box/syndie_kit/chemical - name = "chemical kit" - -/obj/item/storage/box/syndie_kit/chemical/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 14 - -/obj/item/storage/box/syndie_kit/chemical/PopulateContents() - new /obj/item/reagent_containers/glass/bottle/polonium(src) - new /obj/item/reagent_containers/glass/bottle/venom(src) - new /obj/item/reagent_containers/glass/bottle/fentanyl(src) - new /obj/item/reagent_containers/glass/bottle/formaldehyde(src) - new /obj/item/reagent_containers/glass/bottle/spewium(src) - new /obj/item/reagent_containers/glass/bottle/rogue/strongpoison(src) - new /obj/item/reagent_containers/glass/bottle/histamine(src) - new /obj/item/reagent_containers/glass/bottle/initropidril(src) - new /obj/item/reagent_containers/glass/bottle/pancuronium(src) - new /obj/item/reagent_containers/glass/bottle/sodium_thiopental(src) - new /obj/item/reagent_containers/glass/bottle/coniine(src) - new /obj/item/reagent_containers/glass/bottle/curare(src) - new /obj/item/reagent_containers/glass/bottle/amanitin(src) - new /obj/item/reagent_containers/syringe(src) - -/obj/item/storage/box/syndie_kit/nuke - name = "box" - -/obj/item/storage/box/syndie_kit/nuke/PopulateContents() - new /obj/item/screwdriver/nuke(src) - new /obj/item/nuke_core_container(src) - new /obj/item/paper/guides/antag/nuke_instructions(src) - -/obj/item/storage/box/syndie_kit/supermatter - name = "box" - -/obj/item/storage/box/syndie_kit/supermatter/PopulateContents() - new /obj/item/scalpel/supermatter(src) - new /obj/item/hemostat/supermatter(src) - new /obj/item/nuke_core_container/supermatter(src) - new /obj/item/paper/guides/antag/supermatter_sliver(src) - -/obj/item/storage/box/syndie_kit/tuberculosisgrenade - name = "virus grenade kit" - -/obj/item/storage/box/syndie_kit/tuberculosisgrenade/PopulateContents() - new /obj/item/grenade/chem_grenade/tuberculosis(src) - for(var/i in 1 to 5) - new /obj/item/reagent_containers/hypospray/medipen/tuberculosiscure(src) - new /obj/item/reagent_containers/syringe(src) - new /obj/item/reagent_containers/glass/bottle/tuberculosiscure(src) - -/obj/item/storage/box/syndie_kit/chameleon - name = "chameleon kit" - -/obj/item/storage/box/syndie_kit/chameleon/PopulateContents() - new /obj/item/clothing/under/chameleon(src) - new /obj/item/clothing/suit/chameleon(src) - new /obj/item/clothing/gloves/chameleon(src) - new /obj/item/clothing/shoes/chameleon(src) - new /obj/item/clothing/glasses/chameleon(src) - new /obj/item/clothing/head/chameleon(src) - new /obj/item/clothing/mask/chameleon(src) - new /obj/item/clothing/neck/chameleon(src) - new /obj/item/storage/backpack/chameleon(src) - new /obj/item/radio/headset/chameleon(src) - new /obj/item/stamp/chameleon(src) - new /obj/item/pda/chameleon(src) - -//5*(2*4) = 5*8 = 45, 45 damage if you hit one person with all 5 stars. -//Not counting the damage it will do while embedded (2*4 = 8, at 15% chance) -/obj/item/storage/box/syndie_kit/throwing_weapons/PopulateContents() - for(var/i in 1 to 5) - new /obj/item/throwing_star(src) - for(var/i in 1 to 2) - new /obj/item/paperplane/syndicate(src) - new /obj/item/restraints/legcuffs/bola/tactical(src) - new /obj/item/restraints/legcuffs/bola/tactical(src) - -/obj/item/storage/box/syndie_kit/cutouts/PopulateContents() - for(var/i in 1 to 3) - new/obj/item/cardboard_cutout/adaptive(src) - new/obj/item/toy/crayon/rainbow(src) - -/obj/item/storage/box/syndie_kit/romerol/PopulateContents() - new /obj/item/reagent_containers/glass/bottle/romerol(src) - new /obj/item/reagent_containers/syringe(src) - new /obj/item/reagent_containers/dropper(src) - -/obj/item/storage/box/syndie_kit/ez_clean/PopulateContents() - for(var/i in 1 to 3) - new/obj/item/grenade/chem_grenade/ez_clean(src) - -/obj/item/storage/box/hug/reverse_revolver/PopulateContents() - new /obj/item/gun/ballistic/revolver/reverse(src) - -/obj/item/storage/box/syndie_kit/mimery/PopulateContents() - new /obj/item/book/granter/spell/mimery_blockade(src) - new /obj/item/book/granter/spell/mimery_guns(src) - -/obj/item/storage/box/syndie_kit/centcom_costume/PopulateContents() - new /obj/item/clothing/under/rank/centcom/officer(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/gloves/color/black(src) - new /obj/item/radio/headset/headset_cent/empty(src) - new /obj/item/clothing/glasses/sunglasses(src) - new /obj/item/storage/backpack/satchel(src) - new /obj/item/pda/heads(src) - new /obj/item/clipboard(src) - -/obj/item/storage/box/syndie_kit/chameleon/broken/PopulateContents() - new /obj/item/clothing/under/chameleon/broken(src) - new /obj/item/clothing/suit/chameleon/broken(src) - new /obj/item/clothing/gloves/chameleon/broken(src) - new /obj/item/clothing/shoes/chameleon/noslip/broken(src) - new /obj/item/clothing/glasses/chameleon/broken(src) - new /obj/item/clothing/head/chameleon/broken(src) - new /obj/item/clothing/mask/chameleon/broken(src) - new /obj/item/clothing/neck/chameleon/broken(src) - new /obj/item/storage/backpack/chameleon/broken(src) - new /obj/item/radio/headset/chameleon/broken(src) - new /obj/item/stamp/chameleon/broken(src) - new /obj/item/pda/chameleon/broken(src) - // No chameleon laser, they can't randomise for //REASONS// - -/obj/item/storage/box/syndie_kit/bee_grenades - name = "buzzkill grenade box" - desc = "" - -/obj/item/storage/box/syndie_kit/bee_grenades/PopulateContents() - for(var/i in 1 to 3) - new /obj/item/grenade/spawnergrenade/buzzkill(src) - -///Subtype for the sabotage bundle. Contains three C4, two X4 and 6 signalers -/obj/item/storage/backpack/duffelbag/syndie/sabotage - -/obj/item/storage/backpack/duffelbag/syndie/sabotage/PopulateContents() - new /obj/item/grenade/c4(src) - new /obj/item/grenade/c4(src) - new /obj/item/grenade/c4(src) - new /obj/item/grenade/c4/x4(src) - new /obj/item/grenade/c4/x4(src) - new /obj/item/storage/box/syndie_kit/signaler(src) - -/obj/item/storage/box/syndie_kit/signaler - name = "signaler box" - desc = "" - -/obj/item/storage/box/syndie_kit/signaler/PopulateContents() - for(var/i in 1 to 6) - new /obj/item/assembly/signaler(src) diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm deleted file mode 100644 index a41348222a..0000000000 --- a/code/game/objects/items/stunbaton.dm +++ /dev/null @@ -1,232 +0,0 @@ -/obj/item/melee/baton - name = "stun baton" - desc = "" - icon_state = "stunbaton" - item_state = "baton" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - force = 10 - throwforce = 7 - w_class = WEIGHT_CLASS_NORMAL - attack_verb = list("beaten") - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) - - var/cooldown_check = 0 - - var/cooldown = (2.5 SECONDS) - var/stunforce = (5 SECONDS) - var/status = 0 - var/obj/item/stock_parts/cell/cell - var/hitcost = 1000 - var/throw_hit_chance = 35 - var/preload_cell_type //if not empty the baton starts with this type of cell - -/obj/item/melee/baton/get_cell() - return cell - -/obj/item/melee/baton/suicide_act(mob/user) - user.visible_message("[user] is putting the live [name] in [user.p_their()] mouth! It looks like [user.p_theyre()] trying to commit suicide!") - return (FIRELOSS) - -/obj/item/melee/baton/Initialize() - . = ..() - if(preload_cell_type) - if(!ispath(preload_cell_type,/obj/item/stock_parts/cell)) - log_mapping("[src] at [AREACOORD(src)] had an invalid preload_cell_type: [preload_cell_type].") - else - cell = new preload_cell_type(src) - update_icon() - -/obj/item/melee/baton/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - ..() - //Only mob/living types have stun handling - if(status && prob(throw_hit_chance) && iscarbon(hit_atom)) - baton_effect(hit_atom) - -/obj/item/melee/baton/loaded //this one starts with a cell pre-installed. - preload_cell_type = /obj/item/stock_parts/cell/high - -/obj/item/melee/baton/proc/deductcharge(chrgdeductamt) - if(cell) - //Note this value returned is significant, as it will determine - //if a stun is applied or not - . = cell.use(chrgdeductamt) - if(status && cell.charge < hitcost) - //we're below minimum, turn off - status = 0 - update_icon() - playsound(loc, "sparks", 75, TRUE, -1) - - -/obj/item/melee/baton/update_icon() - if(status) - icon_state = "[initial(icon_state)]_active" - else if(!cell) - icon_state = "[initial(icon_state)]_nocell" - else - icon_state = "[initial(icon_state)]" - -/obj/item/melee/baton/examine(mob/user) - . = ..() - if(cell) - . += "\The [src] is [round(cell.percent())]% charged." - else - . += "\The [src] does not have a power source installed." - -/obj/item/melee/baton/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/stock_parts/cell)) - var/obj/item/stock_parts/cell/C = W - if(cell) - to_chat(user, "[src] already has a cell!") - else - if(C.maxcharge < hitcost) - to_chat(user, "[src] requires a higher capacity cell.") - return - if(!user.transferItemToLoc(W, src)) - return - cell = W - to_chat(user, "I install a cell in [src].") - update_icon() - - else if(W.tool_behaviour == TOOL_SCREWDRIVER) - if(cell) - cell.update_icon() - cell.forceMove(get_turf(src)) - cell = null - to_chat(user, "I remove the cell from [src].") - status = 0 - update_icon() - else - return ..() - -/obj/item/melee/baton/attack_self(mob/user) - if(cell && cell.charge > hitcost) - status = !status - to_chat(user, "[src] is now [status ? "on" : "off"].") - playsound(loc, "sparks", 75, TRUE, -1) - else - status = 0 - if(!cell) - to_chat(user, "[src] does not have a power source!") - else - to_chat(user, "[src] is out of charge.") - update_icon() - add_fingerprint(user) - -/obj/item/melee/baton/attack(mob/M, mob/living/carbon/human/user) - if(status && HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50)) - user.visible_message("[user] accidentally hits [user.p_them()]self with [src]!", \ - "I accidentally hit myself with [src]!") - user.Knockdown(stunforce*3) - deductcharge(hitcost) - return - - if(iscyborg(M)) - ..() - return - - - if(ishuman(M)) - var/mob/living/carbon/human/L = M - if(check_martial_counter(L, user)) - return - - if(user.used_intent.type != INTENT_HARM) - if(status) - if(cooldown_check <= world.time) - if(baton_effect(M, user)) - user.do_attack_animation(M) - return - else - to_chat(user, "The baton is still charging!") - else - M.visible_message("[user] has prodded [M] with [src]. Luckily it was off.", \ - "[user] has prodded you with [src]. Luckily it was off") - else - if(status) - if(cooldown_check <= world.time) - baton_effect(M, user) - ..() - - -/obj/item/melee/baton/proc/baton_effect(mob/living/L, mob/user) - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) //No message; check_shields() handles that - playsound(L, 'sound/blank.ogg', 50, TRUE) - return 0 - if(iscyborg(loc)) - var/mob/living/silicon/robot/R = loc - if(!R || !R.cell || !R.cell.use(hitcost)) - return 0 - else - if(!deductcharge(hitcost)) - return 0 - - /// After a target is hit, we do a chunk of stamina damage, along with other effects. - /// After a period of time, we then check to see what stun duration we give. - L.Jitter(20) - L.confused = max(10, L.confused) - L.stuttering = max(8, L.stuttering) - L.adjustStaminaLoss(60) - - SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK) - addtimer(CALLBACK(src, PROC_REF(apply_stun_effect_end), L), 2 SECONDS) - - if(user) - L.lastattacker = user.real_name - L.lastattackerckey = user.ckey - L.visible_message("[user] has stunned [L] with [src]!", \ - "[user] has stunned you with [src]!") - log_combat(user, L, "stunned") - - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - - if(ishuman(L)) - var/mob/living/carbon/human/H = L - H.forcesay(GLOB.hit_appends) - - cooldown_check = world.time + cooldown - - return 1 - -/// After the initial stun period, we check to see if the target needs to have the stun applied. -/obj/item/melee/baton/proc/apply_stun_effect_end(mob/living/target) - var/trait_check = HAS_TRAIT(target, TRAIT_STUNRESISTANCE) //var since we check it in out to_chat as well as determine stun duration - if(trait_check) - target.Knockdown(stunforce * 0.1) - else - target.Knockdown(stunforce) - if(!target.IsKnockdown()) - to_chat(target, "I muscles seize, making you collapse[trait_check ? ", but your body quickly recovers..." : "!"]") - -/obj/item/melee/baton/emp_act(severity) - . = ..() - if (!(. & EMP_PROTECT_SELF)) - deductcharge(1000 / severity) - -//Makeshift stun baton. Replacement for stun gloves. -/obj/item/melee/baton/cattleprod - name = "stunprod" - desc = "" - icon_state = "stunprod" - item_state = "prod" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - w_class = WEIGHT_CLASS_BULKY - force = 3 - throwforce = 5 - stunforce = (5 SECONDS) - hitcost = 2000 - throw_hit_chance = 10 - slot_flags = ITEM_SLOT_BACK - var/obj/item/assembly/igniter/sparkler = 0 - -/obj/item/melee/baton/cattleprod/Initialize() - . = ..() - sparkler = new (src) - -/obj/item/melee/baton/cattleprod/baton_effect() - if(sparkler.activate()) - ..() diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm deleted file mode 100644 index 0f4c0d09e2..0000000000 --- a/code/game/objects/items/tanks/jetpack.dm +++ /dev/null @@ -1,254 +0,0 @@ -/obj/item/tank/jetpack - name = "jetpack (empty)" - desc = "" - icon_state = "jetpack" - item_state = "jetpack" - lefthand_file = 'icons/mob/inhands/equipment/jetpacks_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/jetpacks_righthand.dmi' - w_class = WEIGHT_CLASS_BULKY - distribute_pressure = ONE_ATMOSPHERE * O2STANDARD - actions_types = list(/datum/action/item_action/set_internals, /datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization) - var/gas_type = /datum/gas/oxygen - var/on = FALSE - var/stabilizers = FALSE - var/full_speed = TRUE // If the jetpack will have a speedboost in space/nograv or not - var/datum/effect_system/trail_follow/ion/ion_trail - -/obj/item/tank/jetpack/Initialize() - . = ..() - ion_trail = new - ion_trail.set_up(src) - -/obj/item/tank/jetpack/populate_gas() - if(gas_type) - air_contents.assert_gas(gas_type) - air_contents.gases[gas_type][MOLES] = ((6 * ONE_ATMOSPHERE) * volume / (R_IDEAL_GAS_EQUATION * T20C)) - -/obj/item/tank/jetpack/ui_action_click(mob/user, action) - if(istype(action, /datum/action/item_action/toggle_jetpack)) - cycle(user) - else if(istype(action, /datum/action/item_action/jetpack_stabilization)) - if(on) - stabilizers = !stabilizers - to_chat(user, "I turn the jetpack stabilization [stabilizers ? "on" : "off"].") - else - toggle_internals(user) - - -/obj/item/tank/jetpack/proc/cycle(mob/user) - if(user.incapacitated()) - return - - if(!on) - turn_on(user) - to_chat(user, "I turn the jetpack on.") - else - turn_off(user) - to_chat(user, "I turn the jetpack off.") - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - - -/obj/item/tank/jetpack/proc/turn_on(mob/user) - on = TRUE - icon_state = "[initial(icon_state)]-on" - ion_trail.start() - RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(move_react)) - if(full_speed) - user.add_movespeed_modifier(MOVESPEED_ID_JETPACK, priority=100, multiplicative_slowdown=-0.25, movetypes=FLOATING, conflict=MOVE_CONFLICT_JETPACK) - -/obj/item/tank/jetpack/proc/turn_off(mob/user) - on = FALSE - stabilizers = FALSE - icon_state = initial(icon_state) - ion_trail.stop() - UnregisterSignal(user, COMSIG_MOVABLE_MOVED) - user.remove_movespeed_modifier(MOVESPEED_ID_JETPACK) - -/obj/item/tank/jetpack/proc/move_react(mob/user) - allow_thrust(0.01, user) - -/obj/item/tank/jetpack/proc/allow_thrust(num, mob/living/user) - if(!on) - return - if((num < 0.005 || air_contents.total_moles() < num)) - turn_off(user) - return - - var/datum/gas_mixture/removed = air_contents.remove(num) - if(removed.total_moles() < 0.005) - turn_off(user) - return - - var/turf/T = get_turf(user) - T.assume_air(removed) - - return TRUE - -/obj/item/tank/jetpack/suicide_act(mob/user) - if (istype(user, /mob/living/carbon/human/)) - var/mob/living/carbon/human/H = user - H.forcesay("WHAT THE FUCK IS CARBON DIOXIDE?") - H.visible_message("[user] is suffocating [user.p_them()]self with [src]! It looks like [user.p_they()] didn't read what that jetpack says!") - return (OXYLOSS) - else - ..() - -/obj/item/tank/jetpack/improvised - name = "improvised jetpack" - desc = "" - icon_state = "jetpack-improvised" - item_state = "jetpack-sec" - volume = 20 //normal jetpacks have 70 volume - gas_type = null //it starts empty - full_speed = FALSE //moves at hardsuit jetpack speeds - -/obj/item/tank/jetpack/improvised/allow_thrust(num, mob/living/user) - if(!on) - return - if((num < 0.005 || air_contents.total_moles() < num)) - turn_off(user) - return - if(rand(0,250) == 0) - to_chat(user, "I feel your jetpack's engines cut out.") - turn_off(user) - return - - var/datum/gas_mixture/removed = air_contents.remove(num) - if(removed.total_moles() < 0.005) - turn_off(user) - return - - var/turf/T = get_turf(user) - T.assume_air(removed) - - return TRUE - -/obj/item/tank/jetpack/void - name = "void jetpack (oxygen)" - desc = "" - icon_state = "jetpack-void" - item_state = "jetpack-void" - -/obj/item/tank/jetpack/oxygen - name = "jetpack (oxygen)" - desc = "" - icon_state = "jetpack" - item_state = "jetpack" - -/obj/item/tank/jetpack/oxygen/harness - name = "jet harness (oxygen)" - desc = "" - icon_state = "jetpack-mini" - item_state = "jetpack-mini" - volume = 40 - throw_range = 7 - w_class = WEIGHT_CLASS_NORMAL - -/obj/item/tank/jetpack/oxygen/captain - name = "captain's jetpack" - desc = "" - icon_state = "jetpack-captain" - item_state = "jetpack-captain" - w_class = WEIGHT_CLASS_NORMAL - volume = 90 - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF //steal objective items are hard to destroy. - -/obj/item/tank/jetpack/oxygen/security - name = "security jetpack (oxygen)" - desc = "" - icon_state = "jetpack-sec" - item_state = "jetpack-sec" - - - -/obj/item/tank/jetpack/carbondioxide - name = "jetpack (carbon dioxide)" - desc = "" - icon_state = "jetpack-black" - item_state = "jetpack-black" - distribute_pressure = 0 - gas_type = /datum/gas/carbon_dioxide - - -/obj/item/tank/jetpack/suit - name = "hardsuit jetpack upgrade" - desc = "" - icon_state = "jetpack-mining" - item_state = "jetpack-black" - w_class = WEIGHT_CLASS_NORMAL - actions_types = list(/datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization) - volume = 1 - slot_flags = null - gas_type = null - full_speed = FALSE - var/datum/gas_mixture/temp_air_contents - var/obj/item/tank/internals/tank = null - var/mob/living/carbon/human/cur_user - -/obj/item/tank/jetpack/suit/Initialize() - . = ..() - STOP_PROCESSING(SSobj, src) - temp_air_contents = air_contents - -/obj/item/tank/jetpack/suit/attack_self() - return - -/obj/item/tank/jetpack/suit/cycle(mob/user) - if(!istype(loc, /obj/item/clothing/suit/space/hardsuit)) - to_chat(user, "\The [src] must be connected to a hardsuit!") - return - - var/mob/living/carbon/human/H = user - if(!istype(H.s_store, /obj/item/tank/internals)) - to_chat(user, "I need a tank in your suit storage!") - return - ..() - -/obj/item/tank/jetpack/suit/turn_on(mob/user) - if(!istype(loc, /obj/item/clothing/suit/space/hardsuit) || !ishuman(loc.loc) || loc.loc != user) - return - var/mob/living/carbon/human/H = user - tank = H.s_store - air_contents = tank.air_contents - START_PROCESSING(SSobj, src) - cur_user = user - ..() - -/obj/item/tank/jetpack/suit/turn_off(mob/user) - tank = null - air_contents = temp_air_contents - STOP_PROCESSING(SSobj, src) - cur_user = null - ..() - -/obj/item/tank/jetpack/suit/process() - if(!istype(loc, /obj/item/clothing/suit/space/hardsuit) || !ishuman(loc.loc)) - turn_off(cur_user) - return - var/mob/living/carbon/human/H = loc.loc - if(!tank || tank != H.s_store) - turn_off(cur_user) - return - ..() - - -//Return a jetpack that the mob can use -//Back worn jetpacks, hardsuit internal packs, and so on. -//Used in Process_Spacemove() and wherever you want to check for/get a jetpack - -/mob/proc/get_jetpack() - return - -/mob/living/carbon/get_jetpack() - var/obj/item/tank/jetpack/J = back - if(istype(J)) - return J - -/mob/living/carbon/human/get_jetpack() - var/obj/item/tank/jetpack/J = ..() - if(!istype(J) && istype(wear_armor, /obj/item/clothing/suit/space/hardsuit)) - var/obj/item/clothing/suit/space/hardsuit/C = wear_armor - J = C.jetpack - return J diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm deleted file mode 100644 index a79b72d631..0000000000 --- a/code/game/objects/items/teleportation.dm +++ /dev/null @@ -1,236 +0,0 @@ - -#define SOURCE_PORTAL 1 -#define DESTINATION_PORTAL 2 - -/* Teleportation devices. - * Contains: - * Locator - * Hand-tele - */ - -/* - * Locator - */ -/obj/item/locator - name = "bluespace locator" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "locator" - var/temp = null - flags_1 = CONDUCT_1 - w_class = WEIGHT_CLASS_SMALL - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - throw_speed = 1 - throw_range = 7 - custom_materials = list(/datum/material/iron=400) - -/obj/item/locator/attack_self(mob/user) - user.set_machine(src) - var/dat - if (temp) - dat = "[temp]

    Clear" - else - dat = {" -Persistent Signal Locator
    -Refresh"} - user << browse(dat, "window=radio") - onclose(user, "radio") - return - -/obj/item/locator/Topic(href, href_list) - ..() - if (usr.stat || usr.restrained()) - return - var/turf/current_location = get_turf(usr)//What turf is the user on? - if(!current_location || is_centcom_level(current_location.z))//If turf was not found or they're on CentCom - to_chat(usr, "[src] is malfunctioning.") - return - if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc))) - usr.set_machine(src) - if (href_list["refresh"]) - temp = "Persistent Signal Locator
    " - var/turf/sr = get_turf(src) - - if (sr) - temp += "Beacon Signals:
    " - for(var/obj/item/beacon/W in GLOB.teleportbeacons) - if (!W.renamed) - continue - var/turf/tr = get_turf(W) - if (tr.z == sr.z && tr) - var/direct = max(abs(tr.x - sr.x), abs(tr.y - sr.y)) - if (direct < 5) - direct = "very strong" - else - if (direct < 10) - direct = "strong" - else - if (direct < 20) - direct = "weak" - else - direct = "very weak" - temp += "[W.name]-[dir2text(get_dir(sr, tr))]-[direct]
    " - - temp += "Implant Signals:
    " - for (var/obj/item/implant/tracking/W in GLOB.tracked_implants) - if (!W.imp_in || !isliving(W.loc)) - continue - else - var/mob/living/M = W.loc - if (M.stat == DEAD) - if (M.timeofdeath + W.lifespan_postmortem < world.time) - continue - - var/turf/tr = get_turf(W) - if (tr.z == sr.z && tr) - var/direct = max(abs(tr.x - sr.x), abs(tr.y - sr.y)) - if (direct < 20) - if (direct < 5) - direct = "very strong" - else - if (direct < 10) - direct = "strong" - else - direct = "weak" - temp += "[W.imp_in.name]-[dir2text(get_dir(sr, tr))]-[direct]
    " - - temp += "I are at \[[sr.x],[sr.y],[sr.z]\] in orbital coordinates.

    Refresh
    " - else - temp += "Processing Error: Unable to locate orbital position.
    " - else - if (href_list["temp"]) - temp = null - if (ismob(src.loc)) - attack_self(src.loc) - else - for(var/mob/M in viewers(1, src)) - if (M.client) - src.attack_self(M) - return - - -/* - * Hand-tele - */ -/obj/item/hand_tele - name = "hand tele" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "hand_tele" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - throwforce = 0 - w_class = WEIGHT_CLASS_SMALL - throw_speed = 1 - throw_range = 5 - custom_materials = list(/datum/material/iron=10000) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - var/list/active_portal_pairs - var/max_portal_pairs = 3 - var/atmos_link_override - -/obj/item/hand_tele/Initialize() - . = ..() - active_portal_pairs = list() - -/obj/item/hand_tele/pre_attack(atom/target, mob/user, params) - if(try_dispel_portal(target, user)) - return TRUE - return ..() - -/obj/item/hand_tele/proc/try_dispel_portal(atom/target, mob/user) - if(is_parent_of_portal(target)) - qdel(target) - to_chat(user, "I dispel [target] with \the [src]!") - return TRUE - return FALSE - -/obj/item/hand_tele/afterattack(atom/target, mob/user) - try_dispel_portal(target, user) - . = ..() - -/obj/item/hand_tele/attack_self(mob/user) - var/turf/current_location = get_turf(user)//What turf is the user on? - var/area/current_area = current_location.loc - if(!current_location || current_area.noteleport || is_away_level(current_location.z) || !isturf(user.loc))//If turf was not found or they're on z level 2 or >7 which does not currently exist. or if user is not located on a turf - to_chat(user, "\The [src] is malfunctioning.") - return - var/list/L = list( ) - for(var/obj/machinery/computer/teleporter/com in GLOB.machines) - if(com.target) - var/area/A = get_area(com.target) - if(!A || A.noteleport) - continue - if(com.power_station && com.power_station.teleporter_hub && com.power_station.engaged) - L["[get_area(com.target)] (Active)"] = com.target - else - L["[get_area(com.target)] (Inactive)"] = com.target - var/list/turfs = list( ) - for(var/turf/T in urange(10, orange=1)) - if(T.x>world.maxx-8 || T.x<8) - continue //putting them at the edge is dumb - if(T.y>world.maxy-8 || T.y<8) - continue - var/area/A = T.loc - if(A.noteleport) - continue - turfs += T - if(turfs.len) - L["None (Dangerous)"] = pick(turfs) - var/t1 = input(user, "Please select a teleporter to lock in on.", "Hand Teleporter") as null|anything in L - if (!t1 || user.get_active_held_item() != src || user.incapacitated()) - return - if(active_portal_pairs.len >= max_portal_pairs) - user.show_message("\The [src] is recharging!") - return - var/atom/T = L[t1] - var/area/A = get_area(T) - if(A.noteleport) - to_chat(user, "\The [src] is malfunctioning.") - return - current_location = get_turf(user) //Recheck. - current_area = current_location.loc - if(!current_location || current_area.noteleport || is_away_level(current_location.z) || !isturf(user.loc))//If turf was not found or they're on z level 2 or >7 which does not currently exist. or if user is not located on a turf - to_chat(user, "\The [src] is malfunctioning.") - return - user.show_message("Locked In.", MSG_AUDIBLE) - var/list/obj/effect/portal/created = create_portal_pair(current_location, get_teleport_turf(get_turf(T)), src, 300, 1, null, atmos_link_override) - if(!(LAZYLEN(created) == 2)) - return - try_move_adjacent(created[1]) - active_portal_pairs[created[1]] = created[2] - var/obj/effect/portal/c1 = created[1] - var/obj/effect/portal/c2 = created[2] - investigate_log("was used by [key_name(user)] at [AREACOORD(user)] to create a portal pair with destinations [AREACOORD(c1)] and [AREACOORD(c2)].", INVESTIGATE_PORTAL) - add_fingerprint(user) - -/obj/item/hand_tele/proc/on_portal_destroy(obj/effect/portal/P) - active_portal_pairs -= P //If this portal pair is made by us it'll be erased along with the other portal by the portal. - -/obj/item/hand_tele/proc/is_parent_of_portal(obj/effect/portal/P) - if(!istype(P)) - return FALSE - if(active_portal_pairs[P]) - return SOURCE_PORTAL - for(var/i in active_portal_pairs) - if(active_portal_pairs[i] == P) - return DESTINATION_PORTAL - return FALSE - -/obj/item/hand_tele/suicide_act(mob/user) - if(iscarbon(user)) - user.visible_message("[user] is creating a weak portal and sticking [user.p_their()] head through! It looks like [user.p_theyre()] trying to commit suicide!") - var/mob/living/carbon/itemUser = user - var/obj/item/bodypart/head/head = itemUser.get_bodypart(BODY_ZONE_HEAD) - if(head) - head.drop_limb() - var/list/safeLevels = SSmapping.levels_by_any_trait(list(ZTRAIT_SPACE_RUINS, ZTRAIT_LAVA_RUINS, ZTRAIT_STATION, ZTRAIT_MINING)) - head.forceMove(locate(rand(1, world.maxx), rand(1, world.maxy), pick(safeLevels))) - itemUser.visible_message("The portal snaps closed taking [user]'s head with it!") - else - itemUser.visible_message("[user] looks even further depressed as they realize they do not have a head...and suddenly dies of shame!") - return (BRUTELOSS) diff --git a/code/game/objects/items/teleprod.dm b/code/game/objects/items/teleprod.dm deleted file mode 100644 index be0ee26f86..0000000000 --- a/code/game/objects/items/teleprod.dm +++ /dev/null @@ -1,44 +0,0 @@ -/obj/item/melee/baton/cattleprod/teleprod - name = "teleprod" - desc = "" - w_class = WEIGHT_CLASS_NORMAL - icon_state = "teleprod" - item_state = "teleprod" - slot_flags = null - -/obj/item/melee/baton/cattleprod/teleprod/attack(mob/living/carbon/M, mob/living/carbon/user)//handles making things teleport when hit - ..() - if(status && HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50)) - user.visible_message("[user] accidentally hits [user.p_them()]self with [src]!", \ - "I accidentally hit myself with [src]!") - if(do_teleport(user, get_turf(user), 50, channel = TELEPORT_CHANNEL_BLUESPACE))//honk honk - SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK) - user.Paralyze(stunforce*3) - deductcharge(hitcost) - else - SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK) - user.Paralyze(stunforce*3) - deductcharge(hitcost/4) - return - else - if(status) - if(!istype(M) && M.anchored) - return . - else - SEND_SIGNAL(M, COMSIG_LIVING_MINOR_SHOCK) - do_teleport(M, get_turf(M), 15, channel = TELEPORT_CHANNEL_BLUESPACE) - -/obj/item/melee/baton/cattleprod/attackby(obj/item/I, mob/user, params)//handles sticking a crystal onto a stunprod to make a teleprod - if(istype(I, /obj/item/stack/ore/bluespace_crystal)) - if(!cell) - var/obj/item/stack/ore/bluespace_crystal/BSC = I - var/obj/item/melee/baton/cattleprod/teleprod/S = new /obj/item/melee/baton/cattleprod/teleprod - remove_item_from_storage(user) - qdel(src) - BSC.use(1) - user.put_in_hands(S) - to_chat(user, "I place the bluespace crystal firmly into the igniter.") - else - user.visible_message("I can't put the crystal onto the stunprod while it has a power cell installed!") - else - return ..() diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index 7bd47c2cd4..38ce2b9633 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -320,19 +320,6 @@ /obj/item/weldingtool/largetank/flamethrower_screwdriver() return -/obj/item/weldingtool/largetank/cyborg - name = "integrated welding tool" - desc = "" - icon = 'icons/obj/items_cyborg.dmi' - icon_state = "indwelder_cyborg" - toolspeed = 0.5 - -/obj/item/weldingtool/largetank/cyborg/cyborg_unequip(mob/user) - if(!isOn()) - return - switched_on(user) - - /obj/item/weldingtool/mini name = "emergency welding tool" desc = "" diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 4e25341ef3..62e143c250 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -444,9 +444,9 @@ pop_burst() /obj/item/toy/snappop/Crossed(H as mob|obj) - if(ishuman(H) || issilicon(H)) //i guess carp and shit shouldn't set them off + if(ishuman(H)) //i guess carp and shit shouldn't set them off var/mob/living/carbon/M = H - if(issilicon(H) || M.m_intent == MOVE_INTENT_RUN) + if(M.m_intent == MOVE_INTENT_RUN) to_chat(M, "I step on the snap pop!") pop_burst(2, 0) @@ -570,10 +570,6 @@ var/chattering = FALSE var/phomeme -// Talking toys are language universal, and thus all species can use them -/obj/item/toy/talking/attack_alien(mob/user) - return attack_hand(user) - /obj/item/toy/talking/attack_self(mob/user) if(!cooldown) activation_message(user) @@ -605,18 +601,6 @@ if(chattering) chatter(message, phomeme, user) -/* - * AI core prizes - */ -/obj/item/toy/talking/AI - name = "toy AI" - desc = "" - icon_state = "AI" - w_class = WEIGHT_CLASS_SMALL - -/obj/item/toy/talking/AI/generate_messages() - return list(generate_ion_law()) - /obj/item/toy/talking/codex_gigas name = "Toy Codex Gigas" desc = "" @@ -696,7 +680,6 @@ icon_state = "deck_nanotrasen_full" w_class = WEIGHT_CLASS_SMALL var/cooldown = 0 - var/obj/machinery/computer/holodeck/holo = null // Holodeck cards should not be infinite var/list/cards = list() /obj/item/toy/cards/deck/Initialize() @@ -728,8 +711,6 @@ to_chat(user, "There are no more cards to draw!") return var/obj/item/toy/cards/singlecard/H = new/obj/item/toy/cards/singlecard(user.loc) - if(holo) - holo.spawned += H // track them leaving the holodeck choice = cards[1] H.cardname = choice H.parentdeck = src @@ -1061,7 +1042,7 @@ if(!..()) playsound(src, 'sound/blank.ogg', 40, TRUE) for(var/mob/M in urange(10, src)) - if(!M.stat && !isAI(M)) + if(!M.stat) shake_camera(M, 3, 1) qdel(src) @@ -1082,7 +1063,7 @@ user.visible_message("[user] presses the big red button.", "I press the button, it plays a loud noise!", "The button clicks loudly.") playsound(src, 'sound/blank.ogg', 50, FALSE) for(var/mob/M in urange(10, src)) // Checks range - if(!M.stat && !isAI(M)) // Checks to make sure whoever's getting shaken is alive/not the AI + if(!M.stat) // Checks to make sure whoever's getting shaken is alive/not the AI sleep(8) // Short delay to match up with the explosion sound shake_camera(M, 2, 1) // Shakes player camera 2 squares for 1 second. diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index 8a2326147b..0291abe697 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -42,10 +42,7 @@ else user.update_inv_hands() if(show_message) - if(iscyborg(user)) - to_chat(user, "I free up your module.") - else - to_chat(user, "I are now carrying [src] with one hand.") + to_chat(user, "I are now carrying [src] with one hand.") var/obj/item/twohanded/offhand/O = user.get_inactive_held_item() if(O && istype(O)) O.unwield() @@ -68,10 +65,7 @@ force = force_wielded name = "[name] (Wielded)" update_icon() - if(iscyborg(user)) - to_chat(user, "I dedicate your module to [src].") - else - to_chat(user, "I grab [src] with both hands.") + to_chat(user, "I grab [src] with both hands.") var/obj/item/twohanded/offhand/O = new(user) ////Let's reserve his other hand~ O.name = "[name] - offhand" O.desc = "" @@ -344,6 +338,10 @@ if((wielded) && prob(50)) INVOKE_ASYNC(src, PROC_REF(jedi_spin), user) +/mob/proc/dance_flip() + if(dir == WEST) + emote("flip") + /obj/item/twohanded/dualsaber/proc/jedi_spin(mob/living/user) dance_rotate(user, CALLBACK(user, TYPE_PROC_REF(/mob, dance_flip))) @@ -673,7 +671,7 @@ /obj/item/twohanded/pitchfork/demonic/Initialize() . = ..() - set_light(3,6,LIGHT_COLOR_RED) + set_light(3,3,6, l_color = LIGHT_COLOR_RED) /obj/item/twohanded/pitchfork/demonic/greater force = 24 diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index f9b4307403..cfdc2f17a6 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -84,10 +84,9 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 item_flags = DROPDEL //If this ever happens, it's because you lost an arm slot_flags = null block_chance = 0 //RNG WON'T HELP YOU NOW, PANSY - light_range = 3 + light_outer_range = 3 attack_verb = list("brutalized", "eviscerated", "disemboweled", "hacked", "carved", "cleaved") //ONLY THE MOST VISCERAL ATTACK VERBS var/notches = 0 //HOW MANY PEOPLE HAVE BEEN SLAIN WITH THIS BLADE - var/obj/item/disk/nuclear/nuke_disk //OUR STORED NUKE DISK /obj/item/claymore/highlander/Initialize() . = ..() @@ -95,10 +94,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 START_PROCESSING(SSobj, src) /obj/item/claymore/highlander/Destroy() - if(nuke_disk) - nuke_disk.forceMove(get_turf(src)) - nuke_disk.visible_message("The nuke disk is vulnerable!") - nuke_disk = null STOP_PROCESSING(SSobj, src) return ..() @@ -125,8 +120,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /obj/item/claymore/highlander/examine(mob/user) . = ..() . += "It has [!notches ? "nothing" : "[notches] notches"] scratched into the blade." - if(nuke_disk) - . += "It's holding the nuke disk!" /obj/item/claymore/highlander/attack(mob/living/target, mob/living/user) . = ..() @@ -254,18 +247,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 user.put_in_hands(S) to_chat(user, "I fasten the glass shard to the top of the rod with the cable.") - - else if(istype(I, /obj/item/assembly/igniter) && !(HAS_TRAIT(I, TRAIT_NODROP))) - var/obj/item/melee/baton/cattleprod/P = new /obj/item/melee/baton/cattleprod - - remove_item_from_storage(user) - - to_chat(user, "I fasten [I] to the top of the rod with the cable.") - - qdel(I) - qdel(src) - - user.put_in_hands(P) else return ..() @@ -620,10 +601,8 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /obj/item/melee/flyswatter/Initialize() . = ..() strong_against = typecacheof(list( - /mob/living/simple_animal/hostile/poison/bees/, /mob/living/simple_animal/butterfly, /mob/living/simple_animal/cockroach, - /obj/item/queen_bee )) diff --git a/code/game/objects/lighting/_base_light.dm b/code/game/objects/lighting/_base_light.dm new file mode 100644 index 0000000000..13398c5320 --- /dev/null +++ b/code/game/objects/lighting/_base_light.dm @@ -0,0 +1,561 @@ +// The lighting system +// +// consists of light fixtures (/obj/machinery/light) and light tube/bulb items (/obj/item/light) + +#define LIGHT_EMERGENCY_POWER_USE 0.2 //How much power emergency lights will consume per tick +// status values shared between lighting fixtures and items +#define LIGHT_OK 0 +#define LIGHT_EMPTY 1 +#define LIGHT_BROKEN 2 +#define LIGHT_BURNED 3 + +#define BROKEN_SPARKS_MIN (30 SECONDS) +#define BROKEN_SPARKS_MAX (90 SECONDS) + +// the standard tube light fixture +/obj/machinery/light + name = "light fixture" + icon = 'icons/obj/lighting.dmi' + var/overlayicon = 'icons/obj/lighting_overlay.dmi' + var/base_state = "tube" // base description and icon_state + icon_state = "tube" + desc = "" + layer = WALL_OBJ_LAYER + max_integrity = 100 + use_power = ACTIVE_POWER_USE + idle_power_usage = 2 + active_power_usage = 20 + power_channel = LIGHT //Lights are calc'd via area so they dont need to be in the machine list + var/on = FALSE // 1 if on, 0 if off + var/on_gs = FALSE + var/static_power_used = 0 + var/brightness = 8 // luminosity when on, also used in power calculation + var/bulb_power = 1 // basically the alpha of the emitted light source + var/bulb_colour = "#FFFFFF" // befault colour of the light. + var/status = LIGHT_OK // LIGHT_OK, _EMPTY, _BURNED or _BROKEN + var/flickering = FALSE + var/light_type = /obj/item/light/tube // the type of light item + var/fitting = "tube" + var/switchcount = 0 // count of number of times switched on/off + // this is used to calc the probability the light burns out + + var/rigged = FALSE // true if rigged to explode + + var/obj/item/stock_parts/cell/cell + var/start_with_cell = TRUE // if true, this fixture generates a very weak cell at roundstart + + var/nightshift_enabled = FALSE //Currently in night shift mode? + var/nightshift_allowed = FALSE //Set to FALSE to never let this light get switched to night mode. + var/nightshift_brightness = 8 + var/nightshift_light_power = 1 + var/nightshift_light_color = "#071436" + + var/dawnshift_brightness = 8 + var/dawnshift_light_power = 1 + var/dawnshift_light_color = "#364052" + + var/duskshift_brightness = 8 + var/duskshift_light_power = 1 + var/duskshift_light_color = "#505f7a" + + var/emergency_mode = FALSE // if true, the light is in emergency mode + var/no_emergency = FALSE // if true, this light cannot ever have an emergency mode + var/bulb_emergency_brightness_mul = 0.25 // multiplier for this light's base brightness in emergency power mode + var/bulb_emergency_colour = "#FF3232" // determines the colour of the light while it's in emergency mode + var/bulb_emergency_pow_mul = 0.75 // the multiplier for determining the light's power in emergency mode + var/bulb_emergency_pow_min = 0.5 // the minimum value for the light's power in emergency mode + + var/fueluse = -1 // How much fuel the machinery starts with. At -1, it is never turned off with the passing of time. + +/obj/machinery/light/broken + status = LIGHT_BROKEN + icon_state = "tube-broken" + +// the smaller bulb light fixture + +/obj/machinery/light/small + icon_state = "bulb" + base_state = "bulb" + fitting = "bulb" + brightness = 4 + desc = "" + light_type = /obj/item/light/bulb + +/obj/machinery/light/small/broken + status = LIGHT_BROKEN + icon_state = "bulb-broken" + +/obj/machinery/light/Move() + if(status != LIGHT_BROKEN) + break_light_tube(1) + return ..() + +/obj/machinery/light/built + icon_state = "tube-empty" + start_with_cell = FALSE + +/obj/machinery/light/built/Initialize() + . = ..() + status = LIGHT_EMPTY + update(0) + +/obj/machinery/light/small/built + icon_state = "bulb-empty" + start_with_cell = FALSE + +/obj/machinery/light/small/built/Initialize() + . = ..() + status = LIGHT_EMPTY + update(0) + + + +// create a new lighting fixture +/obj/machinery/light/Initialize(mapload) + . = ..() + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/light/LateInitialize() + . = ..() + addtimer(CALLBACK(src, PROC_REF(update), 0), 1) + +/obj/machinery/light/Destroy() + var/area/A = get_area(src) + if(A) + on = FALSE + return ..() + +/obj/machinery/light/update_icon() + cut_overlays() + switch(status) // set icon_states + if(LIGHT_OK) + var/area/A = get_area(src) + if(emergency_mode || (A && A.fire)) + icon_state = "[base_state]_emergency" + icon_state = null + else + icon_state = "[base_state]" + icon_state = null + if(on) + var/mutable_appearance/glowybit = mutable_appearance(overlayicon, base_state, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE) + glowybit.alpha = CLAMP(light_power*250, 30, 200) + add_overlay(glowybit) + if(LIGHT_EMPTY) + icon_state = "[base_state]-empty" + if(LIGHT_BURNED) + icon_state = "[base_state]-burned" + if(LIGHT_BROKEN) + icon_state = "[base_state]-broken" + return + +// update the icon_state and luminosity of the light depending on its state +/obj/machinery/light/proc/update(trigger = TRUE) + emergency_mode = FALSE + if(on) + var/BR = brightness + var/PO = bulb_power + var/CO = bulb_colour + if(color) + CO = color + var/area/A = get_area(src) + if (A && A.fire) + CO = bulb_emergency_colour + else if (nightshift_enabled) + switch(nightshift_enabled) + if("night") + BR = nightshift_brightness + PO = nightshift_light_power + if(!color) + CO = nightshift_light_color + if("dusk") + BR = duskshift_brightness + PO = duskshift_light_power + if(!color) + CO = duskshift_light_color + if("dawn") + BR = dawnshift_brightness + PO = dawnshift_light_power + if(!color) + CO = dawnshift_light_color + if("day") + BR = brightness + PO = bulb_power + CO = bulb_colour + if(color) + CO = color + var/matching = light && BR == light.light_outer_range && PO == light.light_power && CO == light.light_color + if(!matching) + switchcount++ + if(rigged) + if(status == LIGHT_OK && trigger) + explode() + else + use_power = ACTIVE_POWER_USE + set_light(BR, light_inner_range, PO, l_color = CO) + else if(!turned_off()) + use_power = IDLE_POWER_USE + emergency_mode = TRUE + START_PROCESSING(SSmachines, src) + else + use_power = IDLE_POWER_USE + set_light(0) + update_icon() + + broken_sparks(start_only=TRUE) + +/obj/machinery/light/update_atom_colour() + ..() + update() + +/obj/machinery/light/proc/broken_sparks(start_only=FALSE) + if(status == LIGHT_BROKEN && has_power()) + if(!start_only) + do_sparks(3, TRUE, src) + var/delay = rand(BROKEN_SPARKS_MIN, BROKEN_SPARKS_MAX) + addtimer(CALLBACK(src, PROC_REF(broken_sparks)), delay, TIMER_UNIQUE | TIMER_NO_HASH_WAIT) + +/obj/machinery/light/process() + if(on) + if(initial(fueluse) > 0) + if(fueluse > 0) + fueluse = max(fueluse - 10, 0) + if(fueluse == 0) + burn_out() + else + return PROCESS_KILL + + +/obj/machinery/light/proc/burn_out() + if(on) + on = FALSE + set_light(0) + update_icon() + +// attempt to set the light's on/off status +// will not switch on if broken/burned/empty +/obj/machinery/light/proc/seton(s) + on = (s && status == LIGHT_OK) + update() + +// attack with item - insert light (if right type), otherwise try to break the light + +/obj/machinery/light/attackby(obj/item/W, mob/living/user, params) + + //Light replacer code + if(istype(W, /obj/item/lightreplacer)) + var/obj/item/lightreplacer/LR = W + LR.ReplaceLight(src, user) + + // attempt to insert light + else if(istype(W, /obj/item/light)) + if(status == LIGHT_OK) + to_chat(user, "There is a [fitting] already inserted!") + else + src.add_fingerprint(user) + var/obj/item/light/L = W + if(istype(L, light_type)) + if(!user.temporarilyRemoveItemFromInventory(L)) + return + + src.add_fingerprint(user) + if(status != LIGHT_EMPTY) + drop_light_tube(user) + to_chat(user, "I replace [L].") + else + to_chat(user, "I insert [L].") + status = L.status + switchcount = L.switchcount + rigged = L.rigged + brightness = L.brightness + on = has_power() + update() + + qdel(L) + + if(on && rigged) + explode() + else + to_chat(user, "This type of light requires a [fitting]!") + + // attempt to stick weapon into light socket + else if(status == LIGHT_EMPTY) + if(W.tool_behaviour == TOOL_SCREWDRIVER) //If it's a screwdriver open it. + W.play_tool_sound(src, 75) + user.visible_message("[user.name] opens [src]'s casing.", \ + "I open [src]'s casing.", "I hear a noise.") + deconstruct() + else + to_chat(user, "I stick \the [W] into the light socket!") + else + return ..() + +/obj/machinery/light/deconstruct(disassembled = TRUE) + qdel(src) + +/obj/machinery/light/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) + . = ..() + if(. && !QDELETED(src)) + if(prob(damage_amount * 5)) + break_light_tube() + + + + +/obj/machinery/light/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + switch(damage_type) + if(BRUTE) + switch(status) + if(LIGHT_EMPTY) + playsound(loc, 'sound/blank.ogg', 50, TRUE) + if(LIGHT_BROKEN) + playsound(loc, 'sound/blank.ogg', 90, TRUE) + else + playsound(loc, 'sound/blank.ogg', 90, TRUE) + if(BURN) + playsound(src.loc, 'sound/blank.ogg', 100, TRUE) + +// returns if the light has power /but/ is manually turned off +// if a light is turned off, it won't activate emergency power +/obj/machinery/light/proc/turned_off() + var/area/A = get_area(src) + return !A.lightswitch && A.power_light || flickering + +// returns whether this light has power +// true if area has power and lightswitch is on +/obj/machinery/light/proc/has_power() + return TRUE + +/obj/machinery/light/proc/flicker(amount = rand(10, 20)) + set waitfor = 0 + if(flickering) + return + flickering = 1 + if(on && status == LIGHT_OK) + for(var/i = 0; i < amount; i++) + if(status != LIGHT_OK) + break + on = !on + update(0) + sleep(rand(5, 15)) + on = (status == LIGHT_OK) + update(0) + flickering = 0 + +// attack with hand - remove tube/bulb +// if hands aren't protected and the light is on, burn the player + +/obj/machinery/light/attack_hand(mob/living/carbon/human/user) + . = ..() + if(.) + return + user.changeNext_move(CLICK_CD_MELEE) + add_fingerprint(user) + + +/obj/machinery/light/proc/drop_light_tube(mob/user) + var/obj/item/light/L = new light_type() + L.status = status + L.rigged = rigged + L.brightness = brightness + + // light item inherits the switchcount, then zero it + L.switchcount = switchcount + switchcount = 0 + + L.update() + L.forceMove(loc) + + if(user) //puts it in our active hand + L.add_fingerprint(user) + user.put_in_active_hand(L) + + status = LIGHT_EMPTY + update() + return L + +/obj/machinery/light/attack_tk(mob/user) + if(status == LIGHT_EMPTY) + to_chat(user, "There is no [fitting] in this light!") + return + + to_chat(user, "I telekinetically remove the light [fitting].") + // create a light tube/bulb item and put it in the user's hand + var/obj/item/light/L = drop_light_tube() + L.attack_tk(user) + + +// break the light and make sparks if was on + +/obj/machinery/light/proc/break_light_tube(skip_sound_and_sparks = 0) + if(status == LIGHT_EMPTY || status == LIGHT_BROKEN) + return + + if(!skip_sound_and_sparks) + if(status == LIGHT_OK || status == LIGHT_BURNED) + playsound(src.loc, 'sound/blank.ogg', 75, TRUE) + if(on) + do_sparks(3, TRUE, src) + status = LIGHT_BROKEN + update() + +/obj/machinery/light/proc/fix() + if(status == LIGHT_OK) + return + status = LIGHT_OK + brightness = initial(brightness) + on = TRUE + update() + +/obj/machinery/light/tesla_act(power, tesla_flags) + if(tesla_flags & TESLA_MACHINE_EXPLOSIVE) + explosion(src,0,0,0,flame_range = 5, adminlog = 0) + qdel(src) + else + return ..() + +// called when on fire + +/obj/machinery/light/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) + if(prob(max(0, exposed_temperature - 673))) //0% at <400C, 100% at >500C + break_light_tube() + +// explode the light + +/obj/machinery/light/proc/explode() + set waitfor = 0 + var/turf/T = get_turf(src.loc) + break_light_tube() // break it first to give a warning + sleep(2) + explosion(T, 0, 0, 2, 2) + sleep(1) + qdel(src) + +// the light item +// can be tube or bulb subtypes +// will fit into empty /obj/machinery/light of the corresponding type + +/obj/item/light + icon = 'icons/obj/lighting.dmi' + force = 2 + throwforce = 5 + w_class = WEIGHT_CLASS_TINY + var/status = LIGHT_OK // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN + var/base_state + var/switchcount = 0 // number of times switched + custom_materials = list(/datum/material/glass=100) + grind_results = list(/datum/reagent/silicon = 5, /datum/reagent/nitrogen = 10) //Nitrogen is used as a cheaper alternative to argon in incandescent lighbulbs + var/rigged = FALSE // true if rigged to explode + var/brightness = 2 //how much light it gives off + +/obj/item/light/suicide_act(mob/living/carbon/user) + if (status == LIGHT_BROKEN) + user.visible_message("[user] begins to stab [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") + return BRUTELOSS + else + user.visible_message("[user] begins to eat \the [src]! It looks like [user.p_theyre()] not very bright!") + shatter() + return BRUTELOSS + +/obj/item/light/tube + name = "light tube" + desc = "" + icon_state = "ltube" + base_state = "ltube" + item_state = "c_tube" + brightness = 8 + +/obj/item/light/tube/broken + status = LIGHT_BROKEN + +/obj/item/light/bulb + name = "light bulb" + desc = "" + icon_state = "lbulb" + base_state = "lbulb" + item_state = "contvapour" + lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' + brightness = 4 + +/obj/item/light/bulb/broken + status = LIGHT_BROKEN + +/obj/item/light/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + if(!..()) //not caught by a mob + shatter() + +// update the icon state and description of the light + +/obj/item/light/proc/update() + switch(status) + if(LIGHT_OK) + icon_state = base_state + desc = "" + if(LIGHT_BURNED) + icon_state = "[base_state]-burned" + desc = "" + if(LIGHT_BROKEN) + icon_state = "[base_state]-broken" + desc = "" + +/obj/item/light/Initialize() + . = ..() + update() + +/obj/item/light/ComponentInitialize() + . = ..() + AddComponent(/datum/component/caltrop, force) + +/obj/item/light/Crossed(mob/living/L) + . = ..() + if(istype(L) && has_gravity(loc)) + playsound(loc, 'sound/blank.ogg', HAS_TRAIT(L, TRAIT_LIGHT_STEP) ? 30 : 50, TRUE) + if(status == LIGHT_BURNED || status == LIGHT_OK) + shatter() + +// attack bulb/tube with object +// if a syringe, can inject plasma to make it explode +/obj/item/light/attackby(obj/item/I, mob/user, params) + ..() + if(istype(I, /obj/item/reagent_containers/syringe)) + var/obj/item/reagent_containers/syringe/S = I + + to_chat(user, "I inject the solution into \the [src].") + + if(S.reagents.has_reagent(/datum/reagent/toxin/plasma, 5)) + + rigged = TRUE + + S.reagents.clear_reagents() + else + ..() + return + +/obj/item/light/attack(mob/living/M, mob/living/user, def_zone) + ..() + shatter() + +/obj/item/light/attack_obj(obj/O, mob/living/user) + ..() + shatter() + +/obj/item/light/proc/shatter() + if(status == LIGHT_OK || status == LIGHT_BURNED) + visible_message("[src] shatters.","I hear a small glass object shatter.") + status = LIGHT_BROKEN + force = 5 + playsound(src.loc, 'sound/blank.ogg', 75, TRUE) + if(rigged) + atmos_spawn_air("plasma=5") //5u of plasma are required to rig a light bulb/tube + update() + + +/obj/machinery/light/floor + name = "floor light" + icon = 'icons/obj/lighting.dmi' + base_state = "floor" // base description and icon_state + icon_state = "floor" + brightness = 4 + layer = 2.5 + light_type = /obj/item/light/bulb + fitting = "bulb" diff --git a/code/game/objects/lighting/_base_roguelight.dm b/code/game/objects/lighting/_base_roguelight.dm new file mode 100644 index 0000000000..53c691f992 --- /dev/null +++ b/code/game/objects/lighting/_base_roguelight.dm @@ -0,0 +1,181 @@ +/obj/machinery/light/rogue + icon = 'icons/roguetown/misc/lighting.dmi' + brightness = 8 + nightshift_allowed = FALSE + fueluse = 60 MINUTES + bulb_colour = "#f9ad80" + bulb_power = 1 + var/datum/looping_sound/soundloop = /datum/looping_sound/fireloop + pass_flags = LETPASSTHROW + flags_1 = NODECONSTRUCT_1 + var/cookonme = FALSE + var/crossfire = TRUE + var/can_damage = FALSE + +/obj/machinery/light/rogue/Initialize() + if(soundloop) + soundloop = new soundloop(src, FALSE) + soundloop.start() + GLOB.fires_list += src + if(fueluse) + fueluse = fueluse - (rand(fueluse*0.1,fueluse*0.3)) + update_icon() + seton(TRUE) + . = ..() + +/obj/machinery/light/rogue/OnCrafted(dirin) + . = ..() + can_damage = TRUE + burn_out() + +/obj/machinery/light/rogue/examine(mob/user) + . = ..() + if(Adjacent(user)) + if(fueluse > 0) + var/minsleft = fueluse / 600 + minsleft = round(minsleft) + if(minsleft <= 1) + minsleft = "less than a minute" + else + minsleft = "[round(minsleft)] minutes" + . += span_info("The fire will last for [minsleft].") + else + if(initial(fueluse) > 0) + . += span_warning("The fire is burned out and hungry...") + + +/obj/machinery/light/rogue/extinguish() + if(on) + burn_out() + new /obj/effect/temp_visual/small_smoke(src.loc) + ..() + + + +/obj/machinery/light/rogue/burn_out() + if(soundloop) + soundloop.stop() + if(on) + playsound(src.loc, 'sound/items/firesnuff.ogg', 100) + ..() + update_icon() + +/obj/machinery/light/rogue/update_icon() + if(on) + icon_state = "[base_state]1" + else + icon_state = "[base_state]0" + +/obj/machinery/light/rogue/update() + . = ..() + if(on) + GLOB.fires_list |= src + else + GLOB.fires_list -= src + +/obj/machinery/light/rogue/Destroy() + QDEL_NULL(soundloop) + GLOB.fires_list -= src + . = ..() + +/obj/machinery/light/rogue/fire_act(added, maxstacks) + if(!on && ((fueluse > 0) || (initial(fueluse) == 0))) + playsound(src.loc, 'sound/items/firelight.ogg', 100) + on = TRUE + update() + update_icon() + if(soundloop) + soundloop.start() + addtimer(CALLBACK(src, PROC_REF(trigger_weather)), rand(5,20)) + return TRUE + +/obj/proc/trigger_weather() + if(!QDELETED(src)) + if(isturf(loc)) + var/turf/T = loc + T.trigger_weather(src) + +/obj/machinery/light/rogue/Crossed(atom/movable/AM, oldLoc) + ..() + if(crossfire) + if(on) + AM.fire_act(1,5) + +/obj/machinery/light/rogue/spark_act() + fire_act() + +/obj/machinery/light/rogue/attackby(obj/item/W, mob/living/user, params) + if(cookonme) + if(istype(W, /obj/item/reagent_containers/food/snacks)) + if(istype(W, /obj/item/reagent_containers/food/snacks/egg)) + to_chat(user, span_warning("I wouldn't be able to cook this over the fire...")) + return FALSE + var/obj/item/A = user.get_inactive_held_item() + if(A) + var/foundstab = FALSE + for(var/X in A.possible_item_intents) + var/datum/intent/D = new X + if(D.blade_class == BCLASS_STAB) + foundstab = TRUE + break + if(foundstab) + var/prob2spoil = 25 + if(user.mind.get_skill_level(/datum/skill/craft/cooking)) + prob2spoil = 1 + user.visible_message(span_notice("[user] starts to cook [W] over [src].")) + for(var/i in 1 to 6) + if(do_after(user, 30, target = src)) + var/obj/item/reagent_containers/food/snacks/S = W + var/obj/item/C + if(prob(prob2spoil)) + user.visible_message(span_warning("[user] burns [S].")) + if(user.client?.prefs.showrolls) + to_chat(user, span_warning("Critfail... [prob2spoil]%.")) + C = S.cooking(1000, null) + else + C = S.cooking(S.cooktime/4, src) + if(C) + user.dropItemToGround(S, TRUE) + qdel(S) + C.forceMove(get_turf(user)) + user.put_in_hands(C) + break + else + break + return + if(W.firefuel) + if(initial(fueluse)) + if(fueluse > initial(fueluse) - 5 SECONDS) + to_chat(user, span_warning("[src] is fully fueled.")) + return + else + if(!on) + return + if (alert(usr, "Feed [W] to the fire?", "ROGUETOWN", "Yes", "No") != "Yes") + return + qdel(W) + user.visible_message(span_warning("[user] feeds [W] to [src].")) + if(initial(fueluse)) + fueluse = fueluse + W.firefuel + if(fueluse > initial(fueluse)) //keep it at the max + fueluse = initial(fueluse) + return + else + if(on) + if(istype(W, /obj/item/natural/dirtclod)) + if(!user.temporarilyRemoveItemFromInventory(W)) + return + on = FALSE + set_light(0) + update_icon() + qdel(W) + src.visible_message(span_warning("[user] snuffs the fire.")) + return + if(user.used_intent?.type != INTENT_SPLASH) + W.spark_act() + . = ..() + +/obj/machinery/light/rogue/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) + if(!can_damage) + return + . = ..() diff --git a/code/game/objects/lighting/_base_roguestreet.dm b/code/game/objects/lighting/_base_roguestreet.dm new file mode 100644 index 0000000000..d7b750149d --- /dev/null +++ b/code/game/objects/lighting/_base_roguestreet.dm @@ -0,0 +1,54 @@ +/obj/machinery/light/roguestreet + icon = 'icons/roguetown/misc/tallstructure.dmi' + icon_state = "slamp1" + base_state = "slamp" + brightness = 10 + //nightshift_allowed = FALSE + fueluse = 0 + bulb_colour = "#f9e080" + bulb_power = 1 + max_integrity = 0 + pass_flags = LETPASSTHROW + +/obj/machinery/light/roguestreet/midlamp + icon = 'icons/roguetown/misc/64x64.dmi' + icon_state = "midlamp1" + base_state = "midlamp" + pixel_x = -16 + density = TRUE + +/obj/machinery/light/roguestreet/proc/lights_out() + on = FALSE + set_light(0) + update_icon() + addtimer(CALLBACK(src, PROC_REF(lights_on)), 5 MINUTES) + +/obj/machinery/light/roguestreet/proc/lights_on() + on = TRUE + update() + update_icon() + +/obj/machinery/light/roguestreet/update_icon() + if(on) + icon_state = "[base_state]1" + else + icon_state = "[base_state]0" + +/obj/machinery/light/roguestreet/update() + . = ..() + if(on) + GLOB.fires_list |= src + else + GLOB.fires_list -= src + +/obj/machinery/light/roguestreet/Initialize() + lights_on() + GLOB.streetlamp_list += src + update_icon() + . = ..() + +/obj/machinery/light/roguestreet/update_icon() + if(on) + icon_state = "[base_state]1" + else + icon_state = "[base_state]0" diff --git a/code/modules/power/lanternpost.dm b/code/game/objects/lighting/lantern_post.dm similarity index 100% rename from code/modules/power/lanternpost.dm rename to code/game/objects/lighting/lantern_post.dm diff --git a/code/game/objects/lighting/rogue_fires.dm b/code/game/objects/lighting/rogue_fires.dm new file mode 100644 index 0000000000..6a69570dbe --- /dev/null +++ b/code/game/objects/lighting/rogue_fires.dm @@ -0,0 +1,595 @@ +/obj/machinery/light/rogue/firebowl + name = "brazier" + icon = 'icons/roguetown/misc/lighting.dmi' + icon_state = "stonefire1" + density = TRUE +// pixel_y = 10 + base_state = "stonefire" + climbable = TRUE + pass_flags = LETPASSTHROW + cookonme = TRUE + dir = SOUTH + crossfire = TRUE + fueluse = 0 + +/obj/machinery/light/rogue/firebowl/CanPass(atom/movable/mover, turf/target) + if(istype(mover) && (mover.pass_flags & PASSTABLE)) + return 1 + if(mover.throwing) + return 1 + if(locate(/obj/structure/table) in get_turf(mover)) + return 1 + return !density + +/obj/machinery/light/rogue/firebowl/attack_hand(mob/user) + . = ..() + if(.) + return + + if(on) + var/mob/living/carbon/human/H = user + + if(istype(H)) + H.visible_message(span_info("[H] warms \his hand over the fire.")) + + if(do_after(H, 15, target = src)) + var/obj/item/bodypart/affecting = H.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") + to_chat(H, span_warning("HOT!")) + if(affecting && affecting.receive_damage( 0, 5 )) // 5 burn damage + H.update_damage_overlays() + return TRUE //fires that are on always have this interaction with lmb unless its a torch + + else + if(icon_state == "[base_state]over") + user.visible_message("[user] starts to pick up [src]...", \ + "I start to pick up [src]...") + if(do_after(user, 30, target = src)) + icon_state = "[base_state]0" + return + +/obj/machinery/light/rogue/firebowl/stump + icon_state = "stumpfire1" + base_state = "stumpfire" + +/obj/machinery/light/rogue/firebowl/church + icon_state = "churchfire1" + base_state = "churchfire" + + +/obj/machinery/light/rogue/firebowl/standing + name = "standing fire" + icon_state = "standing1" + base_state = "standing" + bulb_colour = "#ff9648" + cookonme = FALSE + crossfire = FALSE + + +/obj/machinery/light/rogue/firebowl/standing/blue + bulb_colour = "#b9bcff" + icon_state = "standingb1" + base_state = "standingb" + +/obj/machinery/light/rogue/firebowl/standing/proc/knock_over() //use this later for jump impacts and shit + icon_state = "[base_state]over" + +/obj/machinery/light/rogue/firebowl/standing/fire_act(added, maxstacks) + if(icon_state != "[base_state]over") + ..() + +/obj/machinery/light/rogue/firebowl/standing/onkick(mob/user) + if(isliving(user)) + var/mob/living/L = user + if(icon_state == "[base_state]over") + playsound(src, 'sound/combat/hits/onwood/woodimpact (1).ogg', 100) + user.visible_message("[user] kicks [src]!", \ + "I kick [src]!") + return + if(prob(L.STASTR * 8)) + playsound(src, 'sound/combat/hits/onwood/woodimpact (1).ogg', 100) + user.visible_message("[user] kicks over [src]!", \ + "I kick over [src]!") + burn_out() + knock_over() + else + playsound(src, 'sound/combat/hits/onwood/woodimpact (1).ogg', 100) + user.visible_message("[user] kicks [src]!", \ + "I kick [src]!") + +/obj/machinery/light/rogue/wallfire + name = "fireplace" + icon_state = "wallfire1" + base_state = "wallfire" + density = FALSE + fueluse = 0 + crossfire = FALSE + cookonme = TRUE + +/obj/machinery/light/rogue/wallfire/big_fireplace + icon_state = "fireplace1" + base_state = "fireplace" + icon = 'icons/roguetown/misc/fireplace64.dmi' + +/obj/machinery/light/rogue/wallfire/candle + name = "candles" + icon_state = "wallcandle1" + base_state = "wallcandle" + crossfire = FALSE + cookonme = FALSE + pixel_y = 32 + soundloop = null + +/obj/machinery/light/rogue/wallfire/candle/OnCrafted(dirin) + pixel_x = 0 + pixel_y = 0 + switch(dirin) + if(NORTH) + pixel_y = 32 + if(SOUTH) + pixel_y = -32 + if(EAST) + pixel_x = 32 + if(WEST) + pixel_x = -32 + . = ..() + +/obj/machinery/light/rogue/wallfire/candle/attack_hand(mob/user) + if(isliving(user) && on) + user.visible_message(span_warning("[user] snuffs [src].")) + burn_out() + return TRUE //fires that are on always have this interaction with lmb unless its a torch + . = ..() + +/obj/machinery/light/rogue/wallfire/candle/r + pixel_y = 0 + pixel_x = 32 +/obj/machinery/light/rogue/wallfire/candle/l + pixel_y = 0 + pixel_x = -32 + +/obj/machinery/light/rogue/wallfire/candle/blue + bulb_colour = "#b9bcff" + icon_state = "wallcandleb1" + base_state = "wallcandleb" + +/obj/machinery/light/rogue/wallfire/candle/blue/r + pixel_y = 0 + pixel_x = 32 +/obj/machinery/light/rogue/wallfire/candle/blue/l + pixel_y = 0 + pixel_x = -32 + +/obj/machinery/light/rogue/wallfire/candle/weak + light_power = 0.9 + light_outer_range = 6 +/obj/machinery/light/rogue/wallfire/candle/weak/l + pixel_x = -32 + pixel_y = 0 +/obj/machinery/light/rogue/wallfire/candle/weak/r + pixel_x = 32 + pixel_y = 0 + +/obj/machinery/light/rogue/wallfire/candle/lamp + name = "candle lamp" + icon_state = "candle" + base_state = "candle" + icon = 'icons/roguetown/misc/decoration.dmi' + layer = WALL_OBJ_LAYER+0.1 + light_power = 0.9 + light_outer_range = 6 + +/obj/machinery/light/rogue/torchholder + name = "sconce" + icon_state = "torchwall1" + base_state = "torchwall" + brightness = 5 + density = FALSE + var/obj/item/flashlight/flare/torch/torchy + fueluse = FALSE //we use the torch's fuel + soundloop = null + crossfire = FALSE + plane = GAME_PLANE_UPPER + cookonme = FALSE + var/lacks_torch + +/obj/machinery/light/rogue/torchholder/c + pixel_y = 32 + +/obj/machinery/light/rogue/torchholder/r + dir = WEST + +/obj/machinery/light/rogue/torchholder/l + dir = EAST + +/obj/machinery/light/rogue/torchholder/fire_act(added, maxstacks) + if(torchy) + if(!on) + if(torchy.fuel > 0) + torchy.spark_act() + playsound(src.loc, 'sound/items/firelight.ogg', 100) + on = TRUE + update() + update_icon() + if(soundloop) + soundloop.start() + addtimer(CALLBACK(src, PROC_REF(trigger_weather)), rand(5,20)) + return TRUE + +/obj/machinery/light/rogue/torchholder/Initialize() + if(!lacks_torch) + torchy = new /obj/item/flashlight/flare/torch(src) + torchy.spark_act() + . = ..() + +/obj/machinery/light/rogue/torchholder/OnCrafted(dirin, user) + dir = turn(dirin, 180) + if(dir == SOUTH) + pixel_y = 32 + QDEL_NULL(torchy) + . = ..() + +/obj/machinery/light/rogue/torchholder/process() + if(on) + if(torchy) + if(torchy.fuel <= 0) + burn_out() + if(!torchy.on) + burn_out() + else + return PROCESS_KILL + +/obj/machinery/light/rogue/torchholder/attack_hand(mob/user) + . = ..() + if(.) + return + if(torchy) + if(!istype(user) || !Adjacent(user) || !user.put_in_active_hand(torchy)) + torchy.forceMove(loc) + torchy = null + on = FALSE + set_light(0) + update_icon() + playsound(src.loc, 'sound/foley/torchfixturetake.ogg', 70) + +/obj/machinery/light/rogue/torchholder/update_icon() + if(torchy) + if(on) + icon_state = "[base_state]1" + else + icon_state = "[base_state]0" + else + icon_state = "torchwall" + +/obj/machinery/light/rogue/torchholder/burn_out() + if(torchy && torchy.on) + torchy.turn_off() + ..() + +/obj/machinery/light/rogue/torchholder/attackby(obj/item/W, mob/living/user, params) + if(istype(W, /obj/item/flashlight/flare/torch)) + var/obj/item/flashlight/flare/torch/LR = W + if(torchy) + if(LR.on && !on) + if(torchy.fuel <= 0) + to_chat(user, span_warning("The mounted torch is burned out.")) + return + else + torchy.spark_act() + user.visible_message(span_info("[user] lights [src].")) + playsound(src.loc, 'sound/items/firelight.ogg', 100) + on = TRUE + update() + update_icon() + addtimer(CALLBACK(src, PROC_REF(trigger_weather)), rand(5,20)) + return + if(!LR.on && on) + if(LR.fuel > 0) + LR.spark_act() + user.visible_message(span_info("[user] lights [LR] in [src].")) + user.update_inv_hands() + else + if(LR.on) + if(!user.transferItemToLoc(LR, src)) + return + torchy = LR + on = TRUE + update() + update_icon() + addtimer(CALLBACK(src, PROC_REF(trigger_weather)), rand(5,20)) + else + if(!user.transferItemToLoc(LR, src)) + return + torchy = LR + update_icon() + playsound(src.loc, 'sound/foley/torchfixtureput.ogg', 70) + return + . = ..() + +/obj/machinery/light/rogue/torchholder/cold + lacks_torch = TRUE + pixel_y = 32 + + +/obj/machinery/light/rogue/chand + name = "chandelier" + icon_state = "chand1" + base_state = "chand" + icon = 'icons/roguetown/misc/tallwide.dmi' + density = FALSE + brightness = 10 + pixel_x = -10 + pixel_y = -10 + layer = 2.0 + fueluse = 0 + soundloop = null + crossfire = FALSE + obj_flags = CAN_BE_HIT | BLOCK_Z_OUT_DOWN | BLOCK_Z_IN_UP + +/obj/machinery/light/rogue/chand/attack_hand(mob/user) + if(isliving(user) && on) + user.visible_message(span_warning("[user] snuffs [src].")) + burn_out() + return TRUE //fires that are on always have this interaction with lmb unless its a torch + . = ..() + + +/obj/machinery/light/rogue/hearth + name = "hearth" + icon_state = "hearth1" + base_state = "hearth" + density = TRUE + anchored = TRUE + climbable = TRUE + climb_time = 3 SECONDS + layer = TABLE_LAYER + climb_offset = 14 + on = FALSE + cookonme = TRUE + var/obj/item/attachment = null + var/obj/item/reagent_containers/food/snacks/food = null + var/datum/looping_sound/boilloop/boilloop + var/rawegg = FALSE + +/obj/machinery/light/rogue/hearth/Initialize() + boilloop = new(src, FALSE) + . = ..() + +/obj/machinery/light/rogue/hearth/attackby(obj/item/W, mob/living/user, params) + if(!attachment) + if(istype(W, /obj/item/cooking/pan) || istype(W, /obj/item/reagent_containers/glass/bucket/pot)) + playsound(get_turf(user), 'sound/foley/dropsound/shovel_drop.ogg', 40, TRUE, -1) + attachment = W + W.forceMove(src) + update_icon() + return + else + if(istype(W, /obj/item/reagent_containers/glass/bowl)) + to_chat(user, span_notice("Remove the pot from the hearth first.")) + return + if(istype(attachment, /obj/item/cooking/pan)) + if(W.type in subtypesof(/obj/item/reagent_containers/food/snacks)) + var/obj/item/reagent_containers/food/snacks/S = W + if(istype(W, /obj/item/reagent_containers/food/snacks/egg)) // added + playsound(get_turf(user), 'modular/Neu_Food/sound/eggbreak.ogg', 100, TRUE, 0) + sleep(25) // to get egg crack before frying hiss + W.icon_state = "rawegg" // added + rawegg = TRUE + if(!food) + S.forceMove(src) + food = S + update_icon() + if(on) + playsound(src.loc, 'sound/misc/frying.ogg', 80, FALSE, extrarange = 5) + return +// New concept = boil at least 33 water, add item, it turns into food reagent volume 33 of the appropriate type + else if(istype(attachment, /obj/item/reagent_containers/glass/bucket/pot)) + var/obj/item/reagent_containers/glass/bucket/pot/pot = attachment + if(!pot.reagents.has_reagent(/datum/reagent/water, 33)) + to_chat(user, span_notice("Not enough water.")) + return TRUE + if(pot.reagents.chem_temp < 374) + to_chat(user, span_warning("[pot] isn't boiling!")) + return + pot.attempt_pot_recipes(W, user) + . = ..() + +////////////////////////////////// + +/obj/machinery/light/rogue/hearth/fire_act(added, maxstacks) + . = ..() + if(food) + playsound(src.loc, 'sound/misc/frying.ogg', 80, FALSE, extrarange = 2) + +/obj/machinery/light/rogue/hearth/update_icon() + cut_overlays() + icon_state = "[base_state][on]" + if(attachment) + if(istype(attachment, /obj/item/cooking/pan) || istype(attachment, /obj/item/reagent_containers/glass/bucket/pot)) + var/obj/item/I = attachment + I.pixel_x = 0 + I.pixel_y = 0 + add_overlay(new /mutable_appearance(I)) + if(food) + I = food + I.pixel_x = 0 + I.pixel_y = 0 + add_overlay(new /mutable_appearance(I)) + +/obj/machinery/light/rogue/hearth/attack_hand(mob/user) + . = ..() + if(.) + return + + if(attachment) + if(istype(attachment, /obj/item/cooking/pan)) + if(food) + if(rawegg) + to_chat(user, span_notice("Throws away the raw egg.")) + rawegg = FALSE + qdel(food) + update_icon() + if(!user.put_in_active_hand(food)) + food.forceMove(user.loc) + food = null + update_icon() + else + if(!user.put_in_active_hand(attachment)) + attachment.forceMove(user.loc) + attachment = null + update_icon() + if(istype(attachment, /obj/item/reagent_containers/glass/bucket/pot)) + if(!user.put_in_active_hand(attachment)) + attachment.forceMove(user.loc) + attachment = null + update_icon() + boilloop.stop() + else + if(on) + var/mob/living/carbon/human/H = user + if(istype(H)) + H.visible_message(span_info("[H] warms \his hand over the embers.")) + if(do_after(H, 50, target = src)) + var/obj/item/bodypart/affecting = H.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") + to_chat(H, span_warning("HOT!")) + if(affecting && affecting.receive_damage( 0, 5 )) // 5 burn damage + H.update_damage_overlays() + return TRUE + + +/obj/machinery/light/rogue/hearth/process() + if(isopenturf(loc)) + var/turf/open/O = loc + if(IS_WET_OPEN_TURF(O)) + extinguish() + if(on) + if(initial(fueluse) > 0) + if(fueluse > 0) + fueluse = max(fueluse - 10, 0) + if(fueluse == 0) + burn_out() + if(attachment) + if(istype(attachment, /obj/item/cooking/pan)) + if(food) + var/obj/item/C = food.cooking(20, src) + if(C) + if(rawegg) + rawegg = FALSE + qdel(food) + food = C + if(istype(attachment, /obj/item/reagent_containers/glass/bucket/pot)) + if(attachment.reagents) + attachment.reagents.expose_temperature(400, 0.033) + if(attachment.reagents.chem_temp > 374) + boilloop.start() + else + boilloop.stop() + update_icon() + + +/obj/machinery/light/rogue/hearth/onkick(mob/user) + if(isliving(user) && on) + user.visible_message(span_warning("[user] snuffs [src].")) + burn_out() + +/obj/machinery/light/rogue/hearth/Destroy() + QDEL_NULL(boilloop) + . = ..() + +/obj/machinery/light/rogue/campfire + name = "campfire" + icon_state = "badfire1" + base_state = "badfire" + density = FALSE + layer = 2.8 + brightness = 5 + on = FALSE + fueluse = 15 MINUTES + bulb_colour = "#da5e21" + cookonme = TRUE + max_integrity = 30 + light_outer_range = 5 + light_power = 3 + +/obj/machinery/light/rogue/campfire/process() + ..() + if(isopenturf(loc)) + var/turf/open/O = loc + if(IS_WET_OPEN_TURF(O)) + extinguish() + +/obj/machinery/light/rogue/campfire/onkick(mob/user) + if(isliving(user) && on) + var/mob/living/L = user + L.visible_message(span_info("[L] snuffs [src].")) + burn_out() + +/obj/machinery/light/rogue/campfire/attack_hand(mob/user) + . = ..() + if(.) + return + + if(on) + var/mob/living/carbon/human/H = user + + if(istype(H)) + H.visible_message(span_info("[H] warms \his hand near the fire.")) + + if(do_after(H, 100, target = src)) + var/obj/item/bodypart/affecting = H.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") + to_chat(H, span_warning("HOT!")) + if(affecting && affecting.receive_damage( 0, 5 )) // 5 burn damage + H.update_damage_overlays() + return TRUE //fires that are on always have this interaction with lmb unless its a torch + +/obj/machinery/light/rogue/campfire/densefire + icon_state = "densefire1" + base_state = "densefire" + density = TRUE + layer = 2.8 + brightness = 5 + climbable = TRUE + on = FALSE + fueluse = 30 MINUTES + pass_flags = LETPASSTHROW + bulb_colour = "#eea96a" + max_integrity = 60 + +/obj/machinery/light/rogue/campfire/densefire/CanPass(atom/movable/mover, turf/target) + if(istype(mover) && (mover.pass_flags & PASSTABLE)) + return 1 + if(mover.throwing) + return 1 + if(locate(/obj/structure/table) in get_turf(mover)) + return 1 + if(locate(/obj/machinery/light/rogue/firebowl) in get_turf(mover)) + return 1 + return !density + + +/obj/machinery/light/rogue/campfire/pyre + name = "pyre" + icon = 'icons/roguetown/misc/tallstructure.dmi' + icon_state = "pyre1" + base_state = "pyre" + brightness = 10 + fueluse = 30 MINUTES + layer = BELOW_MOB_LAYER + buckleverb = "crucifie" + can_buckle = 1 + buckle_lying = 0 + dir = NORTH + buckle_requires_restraints = 1 + buckle_prevents_pull = 1 + + +/obj/machinery/light/rogue/campfire/pyre/post_buckle_mob(mob/living/M) + ..() + M.set_mob_offsets("bed_buckle", _x = 0, _y = 10) + M.setDir(SOUTH) + +/obj/machinery/light/rogue/campfire/pyre/post_unbuckle_mob(mob/living/M) + ..() + M.reset_offsets("bed_buckle") + +/obj/machinery/light/rogue/campfire/longlived + fueluse = 180 MINUTES diff --git a/code/game/objects/lighting/sunlight.dm b/code/game/objects/lighting/sunlight.dm new file mode 100644 index 0000000000..c5c3d0109d --- /dev/null +++ b/code/game/objects/lighting/sunlight.dm @@ -0,0 +1,82 @@ +/obj/effect/sunlight + var/brightness = 10 + light_power = 1 + light_color = "#2f1313" + layer = BELOW_MOB_LAYER + icon = 'icons/effects/effects.dmi' + icon_state = "electricity2" +#ifndef TESTING + name = "" + mouse_opacity = MOUSE_OPACITY_TRANSPARENT +#else + name = "sunlight" +#endif + var/mode = "day" + light_depth = 0 + light_height = 0 + +/obj/effect/sunlight/Initialize() + light_color = pick("#dbbfbf", "#ddd7bd", "#add1b0", "#a4c0ca", "#ae9dc6", "#d09fbf") + ..() + if(istype(loc, /turf/open/transparent/openspace)) + var/turf/target = get_step_multiz(src, DOWN) + if(!isclosedturf(target)) + new type(target) + mode = GLOB.tod + GLOB.sunlights += src +#ifndef FASTLOAD + update() +#endif +/obj/effect/sunlight/Destroy() + STOP_PROCESSING(SStodchange,src) + GLOB.sunlights -= src + . = ..() + +/obj/effect/sunlight/Initialize(mapload) + . = ..() +#ifdef TESTING + icon_state = "electricity2" +#else + icon_state = null +#endif + +/obj/effect/sunlight/proc/update() + if(mode == GLOB.tod) + return + mode = GLOB.tod + switch(mode) + if("night") + light_color = pick("#100a18", "#0c0412", "#0f0012") + if("dusk") + light_color = pick("#c26f56", "#c05271", "#b84933") + if("dawn") + light_color = pick("#394579", "#49385d", "#3a1537") + if("day") + light_color = pick("#dbbfbf", "#ddd7bd", "#add1b0", "#a4c0ca", "#ae9dc6", "#d09fbf") + set_light(brightness, brightness, light_power, l_color = light_color) + +/obj/effect/sunlight/ultra + brightness = 30 + +//genstuff +/obj/effect/landmark/mapGenerator/sunlights + mapGeneratorType = /datum/mapGenerator/sunlights + endTurfX = 255 + endTurfY = 255 + startTurfX = 1 + startTurfY = 1 + +/obj/effect/landmark/mapGenerator/sunlights/Initialize(mapload) + GLOB.sky_z |= z + return ..() + +/datum/mapGenerator/sunlights + modules = list(/datum/mapGeneratorModule/sunlights) + +/datum/mapGeneratorModule/sunlights + spawnableAtoms = list(/obj/effect/sunlight = 100) + spawnableTurfs = list() + clusterMax = 10 + clusterMin = 10 + checkdensity = FALSE + allowed_areas = list(/area/rogue/outdoors) diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 5a80d4bb76..92c6344f23 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -112,10 +112,6 @@ user.changeNext_move(CLICK_CD_MELEE) return take_damage(damage_amount, damage_type, damage_flag, sound_effect, get_dir(src, user), armor_penetration) -/obj/attack_alien(mob/living/carbon/alien/humanoid/user) - if(attack_generic(user, 60, BRUTE, "melee", 0)) - playsound(src.loc, 'sound/blank.ogg', 100, TRUE) - /obj/attack_animal(mob/living/simple_animal/M) if(!M.melee_damage_upper && !M.obj_damage) M.emote("custom", message = "[M.friendly_verb_continuous] [src].") @@ -147,27 +143,6 @@ return attack_generic(user, rand(10, 15), BRUTE, "melee", 1) -/obj/mech_melee_attack(obj/mecha/M) - M.do_attack_animation(src) - var/play_soundeffect = 0 - var/mech_damtype = M.damtype - if(M.selected) - mech_damtype = M.selected.damtype - play_soundeffect = 1 - else - switch(M.damtype) - if(BRUTE) - playsound(src, 'sound/blank.ogg', 50, TRUE) - if(BURN) - playsound(src, 'sound/blank.ogg', 50, TRUE) - if(TOX) - playsound(src, 'sound/blank.ogg', 50, TRUE) - return 0 - else - return 0 - M.visible_message("[M.name] hits [src]!", "I hit [src]!", null, COMBAT_MESSAGE_RANGE) - return take_damage(M.force*3, mech_damtype, "melee", play_soundeffect, get_dir(src, M)) // multiplied by 3 so we can hit objs hard but not be overpowered against mobs. - /obj/singularity_act() ex_act(EXPLODE_DEVASTATE) if(src && !QDELETED(src)) @@ -242,12 +217,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e ///Called when the obj is hit by a tesla bolt. /obj/proc/tesla_act(power, tesla_flags, shocked_targets) - if(QDELETED(src)) - return - obj_flags |= BEING_SHOCKED - var/power_bounced = power / 2 - tesla_zap(src, 3, power_bounced, tesla_flags, shocked_targets) - addtimer(CALLBACK(src, PROC_REF(reset_shocked)), 10) + return //The surgeon general warns that being buckled to certain objects receiving powerful shocks is greatly hazardous to your health ///Only tesla coils and grounding rods currently call this because mobs are already targeted over all other objects, but this might be useful for more things later. diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 638673ad17..dfa517e9f7 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -144,7 +144,7 @@ if ((M.client && M.machine == src)) is_in_use = TRUE ui_interact(M) - if(issilicon(usr) || IsAdminGhost(usr)) + if(IsAdminGhost(usr)) if (!(usr in nearby)) if (usr.client && usr.machine==src) // && M.machine == src is omitted because if we triggered this by using the dialog, it doesn't matter if our machine changed in between triggering it and this - the dialog is probably still supposed to refresh. is_in_use = TRUE @@ -173,12 +173,8 @@ if ((M.client && M.machine == src)) is_in_use = TRUE src.interact(M) - var/ai_in_use = FALSE - if(update_ais) - ai_in_use = AutoUpdateAI(src) - - if(update_viewers && update_ais) //State change is sure only if we check both - if(!ai_in_use && !is_in_use) + if(update_viewers) //State change is sure only if we check both + if(!is_in_use) obj_flags &= ~IN_USE @@ -215,10 +211,7 @@ /obj/proc/hide(h) return -/obj/singularity_pull(S, current_size) - ..() - if(!anchored || current_size >= STAGE_FIVE) - step_towards(src,S) +/obj/singularity_pull() /obj/get_dumping_location(datum/component/storage/source,mob/user) return get_turf(src) @@ -334,11 +327,6 @@ icon_state = unique_reskin[choice] to_chat(M, "[src] is now skinned as '[choice].'") -/obj/analyzer_act(mob/living/user, obj/item/I) - if(atmosanalyzer_scan(user, src)) - return TRUE - return ..() - /obj/proc/plunger_act(obj/item/plunger/P, mob/living/user, reinforced) return diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 590180d0f6..d32070877a 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -26,7 +26,6 @@ if(redstone_id) GLOB.redstone_objs += src . = INITIALIZE_HINT_LATELOAD - GLOB.cameranet.updateVisibility(src) /obj/structure/Bumped(atom/movable/AM) ..() @@ -43,7 +42,6 @@ /obj/structure/Destroy() - GLOB.cameranet.updateVisibility(src) if(isturf(loc)) for(var/mob/living/user in loc) if(climb_offset) @@ -100,8 +98,6 @@ return if(!istype(O, /obj/item) || user.get_active_held_item() != O) return - if(iscyborg(user)) - return if(!user.dropItemToGround(O)) return if (O.loc != src.loc) @@ -125,7 +121,7 @@ adjusted_climb_time -= user.STASPD * 2 adjusted_climb_time = max(adjusted_climb_time, 0) // if(adjusted_climb_time) -// user.visible_message("[user] starts climbing onto [src].", "I start climbing onto [src]...") +// user.visible_message("[user] starts climbing onto [src].", "I start climbing onto [src]...") structureclimber = user if(do_mob(user, user, adjusted_climb_time)) if(src.loc) //Checking if structure has been destroyed diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm deleted file mode 100644 index 109c8b0962..0000000000 --- a/code/game/objects/structures/ai_core.dm +++ /dev/null @@ -1,341 +0,0 @@ -/obj/structure/AIcore - density = TRUE - anchored = FALSE - name = "\improper AI core" - icon = 'icons/mob/ai.dmi' - icon_state = "0" - desc = "" - max_integrity = 500 - var/state = EMPTY_CORE - var/datum/ai_laws/laws - var/obj/item/circuitboard/aicore/circuit - var/obj/item/mmi/brain - var/can_deconstruct = TRUE - -/obj/structure/AIcore/Initialize() - . = ..() - laws = new - laws.set_laws_config() - -/obj/structure/AIcore/handle_atom_del(atom/A) - if(A == circuit) - circuit = null - if((state != GLASS_CORE) && (state != AI_READY_CORE)) - state = EMPTY_CORE - update_icon() - if(A == brain) - brain = null - . = ..() - - -/obj/structure/AIcore/Destroy() - if(circuit) - qdel(circuit) - circuit = null - if(brain) - qdel(brain) - brain = null - return ..() - -/obj/structure/AIcore/latejoin_inactive - name = "networked AI core" - desc = "" - can_deconstruct = FALSE - icon_state = "ai-empty" - anchored = TRUE - state = AI_READY_CORE - var/available = TRUE - var/safety_checks = TRUE - var/active = TRUE - -/obj/structure/AIcore/latejoin_inactive/examine(mob/user) - . = ..() - . += "Its transmitter seems to be [active? "on" : "off"]." - . += "I could [active? "deactivate" : "activate"] it with a multitool." - -/obj/structure/AIcore/latejoin_inactive/proc/is_available() //If people still manage to use this feature to spawn-kill AI latejoins ahelp them. - if(!available) - return FALSE - if(!safety_checks) - return TRUE - if(!active) - return FALSE - var/turf/T = get_turf(src) - var/area/A = get_area(src) - if(!A.blob_allowed) - return FALSE - if(!A.power_equip) - return FALSE - if(!SSmapping.level_trait(T.z,ZTRAIT_STATION)) - return FALSE - if(!istype(T, /turf/open/floor)) - return FALSE - return TRUE - -/obj/structure/AIcore/latejoin_inactive/attackby(obj/item/P, mob/user, params) - if(P.tool_behaviour == TOOL_MULTITOOL) - active = !active - to_chat(user, "I [active? "activate" : "deactivate"] \the [src]'s transmitters.") - return - return ..() - -/obj/structure/AIcore/latejoin_inactive/Initialize() - . = ..() - GLOB.latejoin_ai_cores += src - -/obj/structure/AIcore/latejoin_inactive/Destroy() - GLOB.latejoin_ai_cores -= src - return ..() - -/obj/structure/AIcore/attackby(obj/item/P, mob/user, params) - if(P.tool_behaviour == TOOL_WRENCH) - return default_unfasten_wrench(user, P, 20) - if(!anchored) - if(P.tool_behaviour == TOOL_WELDER && can_deconstruct) - if(state != EMPTY_CORE) - to_chat(user, "The core must be empty to deconstruct it!") - return - - if(!P.tool_start_check(user, amount=0)) - return - - to_chat(user, "I start to deconstruct the frame...") - if(P.use_tool(src, user, 20, volume=50) && state == EMPTY_CORE) - to_chat(user, "I deconstruct the frame.") - deconstruct(TRUE) - return - else - switch(state) - if(EMPTY_CORE) - if(istype(P, /obj/item/circuitboard/aicore)) - if(!user.transferItemToLoc(P, src)) - return - playsound(loc, 'sound/blank.ogg', 50, TRUE) - to_chat(user, "I place the circuit board inside the frame.") - update_icon() - state = CIRCUIT_CORE - circuit = P - return - if(CIRCUIT_CORE) - if(P.tool_behaviour == TOOL_SCREWDRIVER) - P.play_tool_sound(src) - to_chat(user, "I screw the circuit board into place.") - state = SCREWED_CORE - update_icon() - return - if(P.tool_behaviour == TOOL_CROWBAR) - P.play_tool_sound(src) - to_chat(user, "I remove the circuit board.") - state = EMPTY_CORE - update_icon() - circuit.forceMove(loc) - circuit = null - return - if(SCREWED_CORE) - if(P.tool_behaviour == TOOL_SCREWDRIVER && circuit) - P.play_tool_sound(src) - to_chat(user, "I unfasten the circuit board.") - state = CIRCUIT_CORE - update_icon() - return - if(istype(P, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = P - if(C.get_amount() >= 5) - playsound(loc, 'sound/blank.ogg', 50, TRUE) - to_chat(user, "I start to add cables to the frame...") - if(do_after(user, 20, target = src) && state == SCREWED_CORE && C.use(5)) - to_chat(user, "I add cables to the frame.") - state = CABLED_CORE - update_icon() - else - to_chat(user, "I need five lengths of cable to wire the AI core!") - return - if(CABLED_CORE) - if(P.tool_behaviour == TOOL_WIRECUTTER) - if(brain) - to_chat(user, "Get that [brain.name] out of there first!") - else - P.play_tool_sound(src) - to_chat(user, "I remove the cables.") - state = SCREWED_CORE - update_icon() - new /obj/item/stack/cable_coil(drop_location(), 5) - return - - if(istype(P, /obj/item/stack/sheet/rglass)) - var/obj/item/stack/sheet/rglass/G = P - if(G.get_amount() >= 2) - playsound(loc, 'sound/blank.ogg', 50, TRUE) - to_chat(user, "I start to put in the glass panel...") - if(do_after(user, 20, target = src) && state == CABLED_CORE && G.use(2)) - to_chat(user, "I put in the glass panel.") - state = GLASS_CORE - update_icon() - else - to_chat(user, "I need two sheets of reinforced glass to insert them into the AI core!") - return - - if(istype(P, /obj/item/aiModule)) - if(brain && brain.laws.id != DEFAULT_AI_LAWID) - to_chat(user, "The installed [brain.name] already has set laws!") - return - var/obj/item/aiModule/module = P - module.install(laws, user) - return - - if(istype(P, /obj/item/mmi) && !brain) - var/obj/item/mmi/M = P - if(!M.brainmob) - to_chat(user, "Sticking an empty [M.name] into the frame would sort of defeat the purpose!") - return - if(M.brainmob.stat == DEAD) - to_chat(user, "Sticking a dead [M.name] into the frame would sort of defeat the purpose!") - return - - if(!M.brainmob.client) - to_chat(user, "Sticking an inactive [M.name] into the frame would sort of defeat the purpose.") - return - - if(!CONFIG_GET(flag/allow_ai) || (is_banned_from(M.brainmob.ckey, "AI") && !QDELETED(src) && !QDELETED(user) && !QDELETED(M) && !QDELETED(user) && Adjacent(user))) - if(!QDELETED(M)) - to_chat(user, "This [M.name] does not seem to fit!") - return - - if(!M.brainmob.mind) - to_chat(user, "This [M.name] is mindless!") - return - - if(!user.transferItemToLoc(M,src)) - return - - brain = M - to_chat(user, "I add [M.name] to the frame.") - update_icon() - return - - if(P.tool_behaviour == TOOL_CROWBAR && brain) - P.play_tool_sound(src) - to_chat(user, "I remove the brain.") - brain.forceMove(loc) - brain = null - update_icon() - return - - if(GLASS_CORE) - if(P.tool_behaviour == TOOL_CROWBAR) - P.play_tool_sound(src) - to_chat(user, "I remove the glass panel.") - state = CABLED_CORE - update_icon() - new /obj/item/stack/sheet/rglass(loc, 2) - return - - if(P.tool_behaviour == TOOL_SCREWDRIVER) - P.play_tool_sound(src) - to_chat(user, "I connect the monitor.") - if(brain) - SSticker.mode.remove_antag_for_borging(brain.brainmob.mind) - - var/mob/living/silicon/ai/A = null - - if (brain.overrides_aicore_laws) - A = new /mob/living/silicon/ai(loc, brain.laws, brain.brainmob) - else - A = new /mob/living/silicon/ai(loc, laws, brain.brainmob) - - if(brain.force_replace_ai_name) - A.fully_replace_character_name(A.name, brain.replacement_ai_name()) - SSblackbox.record_feedback("amount", "ais_created", 1) - qdel(src) - else - state = AI_READY_CORE - update_icon() - return - - if(AI_READY_CORE) - if(istype(P, /obj/item/aicard)) - P.transfer_ai("INACTIVE", "AICARD", src, user) - return - - if(P.tool_behaviour == TOOL_SCREWDRIVER) - P.play_tool_sound(src) - to_chat(user, "I disconnect the monitor.") - state = GLASS_CORE - update_icon() - return - return ..() - -/obj/structure/AIcore/update_icon() - switch(state) - if(EMPTY_CORE) - icon_state = "0" - if(CIRCUIT_CORE) - icon_state = "1" - if(SCREWED_CORE) - icon_state = "2" - if(CABLED_CORE) - if(brain) - icon_state = "3b" - else - icon_state = "3" - if(GLASS_CORE) - icon_state = "4" - if(AI_READY_CORE) - icon_state = "ai-empty" - -/obj/structure/AIcore/deconstruct(disassembled = TRUE) - if(state == GLASS_CORE) - new /obj/item/stack/sheet/rglass(loc, 2) - if(state >= CABLED_CORE) - new /obj/item/stack/cable_coil(loc, 5) - if(circuit) - circuit.forceMove(loc) - circuit = null - new /obj/item/stack/sheet/plasteel(loc, 4) - qdel(src) - -/obj/structure/AIcore/deactivated - name = "inactive AI" - icon_state = "ai-empty" - anchored = TRUE - state = AI_READY_CORE - -/obj/structure/AIcore/deactivated/Initialize() - . = ..() - circuit = new(src) - - -/* -This is a good place for AI-related object verbs so I'm sticking it here. -If adding stuff to this, don't forget that an AI need to cancel_camera() whenever it physically moves to a different location. -That prevents a few funky behaviors. -*/ -//The type of interaction, the player performing the operation, the AI itself, and the card object, if any. - - -/atom/proc/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card) - if(istype(card)) - if(card.flush) - to_chat(user, "ERROR: AI flush is in progress, cannot execute transfer protocol.") - return FALSE - return TRUE - -/obj/structure/AIcore/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card) - if(state != AI_READY_CORE || !..()) - return -//Transferring a carded AI to a core. - if(interaction == AI_TRANS_FROM_CARD) - AI.control_disabled = FALSE - AI.radio_enabled = TRUE - AI.forceMove(loc) // to replace the terminal. - to_chat(AI, "I have been uploaded to a stationary terminal. Remote device connection restored.") - to_chat(user, "Transfer successful: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed.") - card.AI = null - AI.battery = circuit.battery - qdel(src) - else //If for some reason you use an empty card on an empty AI terminal. - to_chat(user, "There is no AI loaded on this terminal.") - -/obj/item/circuitboard/aicore - name = "AI core (AI Core Board)" //Well, duh, but best to be consistent - var/battery = 200 //backup battery for when the AI loses power. Copied to/from AI mobs when carding, and placed here to avoid recharge via deconning the core diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm deleted file mode 100644 index 6e983b5a4a..0000000000 --- a/code/game/objects/structures/aliens.dm +++ /dev/null @@ -1,337 +0,0 @@ -/* Alien shit! - * Contains: - * structure/alien - * Resin - * Weeds - * Egg - */ - - -/obj/structure/alien - icon = 'icons/mob/alien.dmi' - max_integrity = 100 - -/obj/structure/alien/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) - if(damage_flag == "melee") - switch(damage_type) - if(BRUTE) - damage_amount *= 0.25 - if(BURN) - damage_amount *= 2 - . = ..() - -/obj/structure/alien/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - if(damage_amount) - playsound(loc, 'sound/blank.ogg', 100, TRUE) - else - playsound(src, 'sound/blank.ogg', 50, TRUE) - if(BURN) - if(damage_amount) - playsound(loc, 'sound/blank.ogg', 100, TRUE) - -/* - * Generic alien stuff, not related to the purple lizards but still alien-like - */ - -/obj/structure/alien/gelpod - name = "gelatinous mound" - desc = "" - icon = 'icons/obj/fluff.dmi' - icon_state = "gelmound" - -/obj/structure/alien/gelpod/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new/obj/effect/mob_spawn/human/corpse/damaged(get_turf(src)) - qdel(src) - -/* - * Resin - */ -/obj/structure/alien/resin - name = "resin" - desc = "" - icon = 'icons/obj/smooth_structures/alien/resin_wall.dmi' - icon_state = "smooth" - density = TRUE - opacity = 1 - anchored = TRUE - canSmoothWith = list(/obj/structure/alien/resin) - max_integrity = 200 - smooth = SMOOTH_TRUE - var/resintype = null - CanAtmosPass = ATMOS_PASS_DENSITY - - -/obj/structure/alien/resin/Initialize(mapload) - . = ..() - air_update_turf(TRUE) - -/obj/structure/alien/resin/Move() - var/turf/T = loc - . = ..() - move_update_air(T) - -/obj/structure/alien/resin/wall - name = "resin wall" - desc = "" - icon = 'icons/obj/smooth_structures/alien/resin_wall.dmi' - icon_state = "smooth" //same as resin, but consistency ho! - resintype = "wall" - canSmoothWith = list(/obj/structure/alien/resin/wall, /obj/structure/alien/resin/membrane) - -/obj/structure/alien/resin/wall/BlockSuperconductivity() - return 1 - -/obj/structure/alien/resin/membrane - name = "resin membrane" - desc = "" - icon = 'icons/obj/smooth_structures/alien/resin_membrane.dmi' - icon_state = "smooth" - opacity = 0 - max_integrity = 160 - resintype = "membrane" - canSmoothWith = list(/obj/structure/alien/resin/wall, /obj/structure/alien/resin/membrane) - -/obj/structure/alien/resin/attack_paw(mob/user) - return attack_hand(user) - - -/obj/structure/alien/resin/CanPass(atom/movable/mover, turf/target) - return !density - - -/* - * Weeds - */ - -#define NODERANGE 3 - -/obj/structure/alien/weeds - gender = PLURAL - name = "resin floor" - desc = "" - anchored = TRUE - density = FALSE - layer = TURF_LAYER - plane = FLOOR_PLANE - icon_state = "weeds" - max_integrity = 15 - canSmoothWith = list(/obj/structure/alien/weeds, /turf/closed/wall) - smooth = SMOOTH_MORE - var/last_expand = 0 //last world.time this weed expanded - var/growth_cooldown_low = 150 - var/growth_cooldown_high = 200 - var/static/list/blacklisted_turfs - -/obj/structure/alien/weeds/Initialize() - pixel_x = -4 - pixel_y = -4 //so the sprites line up right in the map editor - . = ..() - - if(!blacklisted_turfs) - blacklisted_turfs = typecacheof(list( - /turf/open/space, - /turf/open/chasm, - /turf/open/lava)) - - - last_expand = world.time + rand(growth_cooldown_low, growth_cooldown_high) - if(icon == initial(icon)) - switch(rand(1,3)) - if(1) - icon = 'icons/obj/smooth_structures/alien/weeds1.dmi' - if(2) - icon = 'icons/obj/smooth_structures/alien/weeds2.dmi' - if(3) - icon = 'icons/obj/smooth_structures/alien/weeds3.dmi' - -/obj/structure/alien/weeds/proc/expand() - var/turf/U = get_turf(src) - if(is_type_in_typecache(U, blacklisted_turfs)) - qdel(src) - return FALSE - - for(var/turf/T in U.GetAtmosAdjacentTurfs()) - if(locate(/obj/structure/alien/weeds) in T) - continue - - if(is_type_in_typecache(T, blacklisted_turfs)) - continue - - new /obj/structure/alien/weeds(T) - return TRUE - -/obj/structure/alien/weeds/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 300) - take_damage(5, BURN, 0, 0) - -//Weed nodes -/obj/structure/alien/weeds/node - name = "glowing resin" - desc = "" - icon_state = "weednode" - light_color = LIGHT_COLOR_BLUE - light_power = 0.5 - var/lon_range = 4 - var/node_range = NODERANGE - -/obj/structure/alien/weeds/node/Initialize() - icon = 'icons/obj/smooth_structures/alien/weednode.dmi' - . = ..() - set_light(lon_range) - var/obj/structure/alien/weeds/W = locate(/obj/structure/alien/weeds) in loc - if(W && W != src) - qdel(W) - START_PROCESSING(SSobj, src) - -/obj/structure/alien/weeds/node/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/structure/alien/weeds/node/process() - for(var/obj/structure/alien/weeds/W in range(node_range, src)) - if(W.last_expand <= world.time) - if(W.expand()) - W.last_expand = world.time + rand(growth_cooldown_low, growth_cooldown_high) - -#undef NODERANGE - - -/* - * Egg - */ - -//for the status var -#define BURST "burst" -#define GROWING "growing" -#define GROWN "grown" -#define MIN_GROWTH_TIME 900 //time it takes to grow a hugger -#define MAX_GROWTH_TIME 1500 - -/obj/structure/alien/egg - name = "egg" - desc = "" - var/base_icon = "egg" - icon_state = "egg_growing" - density = FALSE - anchored = TRUE - max_integrity = 100 - integrity_failure = 0.05 - var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive - layer = MOB_LAYER - var/obj/item/clothing/mask/facehugger/child - -/obj/structure/alien/egg/Initialize(mapload) - . = ..() - update_icon() - if(status == GROWING || status == GROWN) - child = new(src) - if(status == GROWING) - addtimer(CALLBACK(src, PROC_REF(Grow)), rand(MIN_GROWTH_TIME, MAX_GROWTH_TIME)) - proximity_monitor = new(src, status == GROWN ? 1 : 0) - if(status == BURST) - obj_integrity = integrity_failure * max_integrity - -/obj/structure/alien/egg/update_icon() - ..() - switch(status) - if(GROWING) - icon_state = "[base_icon]_growing" - if(GROWN) - icon_state = "[base_icon]" - if(BURST) - icon_state = "[base_icon]_hatched" - -/obj/structure/alien/egg/attack_paw(mob/living/user) - return attack_hand(user) - -/obj/structure/alien/egg/attack_alien(mob/living/carbon/alien/user) - return attack_hand(user) - -/obj/structure/alien/egg/attack_hand(mob/living/user) - . = ..() - if(.) - return - if(user.getorgan(/obj/item/organ/alien/plasmavessel)) - switch(status) - if(BURST) - to_chat(user, "I clear the hatched egg.") - playsound(loc, 'sound/blank.ogg', 100, TRUE) - qdel(src) - return - if(GROWING) - to_chat(user, "The child is not developed yet.") - return - if(GROWN) - to_chat(user, "I retrieve the child.") - Burst(kill=FALSE) - return - else - to_chat(user, "It feels slimy.") - user.changeNext_move(CLICK_CD_MELEE) - - -/obj/structure/alien/egg/proc/Grow() - status = GROWN - update_icon() - proximity_monitor.SetRange(1) - -//drops and kills the hugger if any is remaining -/obj/structure/alien/egg/proc/Burst(kill = TRUE) - if(status == GROWN || status == GROWING) - proximity_monitor.SetRange(0) - status = BURST - update_icon() - flick("egg_opening", src) - addtimer(CALLBACK(src, PROC_REF(finish_bursting), kill), 15) - -/obj/structure/alien/egg/proc/finish_bursting(kill = TRUE) - if(child) - child.forceMove(get_turf(src)) - // TECHNICALLY you could put non-facehuggers in the child var - if(istype(child)) - if(kill) - child.Die() - else - for(var/mob/M in range(1,src)) - if(CanHug(M)) - child.Leap(M) - break - -/obj/structure/alien/egg/obj_break(damage_flag) - if(!(flags_1 & NODECONSTRUCT_1)) - if(status != BURST) - Burst(kill=TRUE) - ..() - -/obj/structure/alien/egg/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 500) - take_damage(5, BURN, 0, 0) - - -/obj/structure/alien/egg/HasProximity(atom/movable/AM) - if(status == GROWN) - if(!CanHug(AM)) - return - - var/mob/living/carbon/C = AM - if(C.stat == CONSCIOUS && C.getorgan(/obj/item/organ/body_egg/alien_embryo)) - return - - Burst(kill=FALSE) - -/obj/structure/alien/egg/grown - status = GROWN - icon_state = "egg" - -/obj/structure/alien/egg/burst - status = BURST - icon_state = "egg_hatched" - -#undef BURST -#undef GROWING -#undef GROWN -#undef MIN_GROWTH_TIME -#undef MAX_GROWTH_TIME diff --git a/code/game/objects/structures/barricades.dm b/code/game/objects/structures/barricades.dm new file mode 100644 index 0000000000..754e73e1c3 --- /dev/null +++ b/code/game/objects/structures/barricades.dm @@ -0,0 +1,121 @@ +#define SINGLE "single" +#define VERTICAL "vertical" +#define HORIZONTAL "horizontal" + +#define METAL 1 +#define WOOD 2 +#define SAND 3 + +//Barricades/cover + +/obj/structure/barricade + name = "chest high wall" + desc = "" + anchored = TRUE + density = TRUE + max_integrity = 100 + var/proj_pass_rate = 50 //How many projectiles will pass the cover. Lower means stronger cover + var/bar_material = METAL + +/obj/structure/barricade/deconstruct(disassembled = TRUE) + if(!(flags_1 & NODECONSTRUCT_1)) + make_debris() + qdel(src) + +/obj/structure/barricade/proc/make_debris() + return + +/obj/structure/barricade/attackby(obj/item/I, mob/user, params) + if(I.tool_behaviour == TOOL_WELDER && user.used_intent.type != INTENT_HARM && bar_material == METAL) + if(obj_integrity < max_integrity) + if(!I.tool_start_check(user, amount=0)) + return + + to_chat(user, "I begin repairing [src]...") + if(I.use_tool(src, user, 40, volume=40)) + obj_integrity = CLAMP(obj_integrity + 20, 0, max_integrity) + else + return ..() + +/obj/structure/barricade/CanPass(atom/movable/mover, turf/target)//So bullets will fly over and stuff. + if(locate(/obj/structure/barricade) in get_turf(mover)) + return 1 + else if(istype(mover, /obj/projectile)) + if(!anchored) + return 1 + var/obj/projectile/proj = mover + if(proj.firer && Adjacent(proj.firer)) + return 1 + if(prob(proj_pass_rate)) + return 1 + return 0 + else + return !density + + + +/////BARRICADE TYPES/////// + +/obj/structure/barricade/wooden + name = "wooden barricade" + desc = "" + icon = 'icons/obj/structures.dmi' + icon_state = "woodenbarricade" + bar_material = WOOD + var/drop_amount = 3 + +/obj/structure/barricade/wooden/rogue + name = "wooden barricade" + desc = "" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "woodenbarricade_r" + max_integrity = 60 + bar_material = WOOD + drop_amount = 0 + +/obj/structure/barricade/wooden/rogue/crude + name = "crude plank barricade" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "woodenbarricade_r2" + max_integrity = 40 + +/obj/structure/barricade/wooden/attackby(obj/item/I, mob/user) + if(istype(I,/obj/item/stack/sheet/mineral/wood)) + var/obj/item/stack/sheet/mineral/wood/W = I + if(W.amount < 5) + to_chat(user, "I need at least five wooden planks to make a wall!") + return + else + to_chat(user, "I start adding [I] to [src]...") + if(do_after(user, 50, target=src)) + W.use(5) + var/turf/T = get_turf(src) + T.PlaceOnTop(/turf/closed/wall/mineral/wood/nonmetal) + qdel(src) + return + return ..() + + +/obj/structure/barricade/wooden/crude + name = "crude plank barricade" + desc = "" + icon_state = "woodenbarricade-old" + drop_amount = 1 + max_integrity = 50 + proj_pass_rate = 65 + +/obj/structure/barricade/wooden/crude/snow + desc = "" + icon_state = "woodenbarricade-snow-old" + max_integrity = 75 + +/obj/structure/barricade/wooden/make_debris() + new /obj/item/stack/sheet/mineral/wood(get_turf(src), drop_amount) + +#undef SINGLE +#undef VERTICAL +#undef HORIZONTAL + +#undef METAL +#undef WOOD +#undef SAND diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm index 78c19e1a45..b03ec3e767 100644 --- a/code/game/objects/structures/barsigns.dm +++ b/code/game/objects/structures/barsigns.dm @@ -49,7 +49,6 @@ /obj/structure/sign/barsign/deconstruct(disassembled = TRUE) new /obj/item/stack/sheet/metal(drop_location(), 2) - new /obj/item/stack/cable_coil(drop_location(), 2) qdel(src) /obj/structure/sign/barsign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) @@ -59,9 +58,6 @@ if(BURN) playsound(src.loc, 'sound/blank.ogg', 100, TRUE) -/obj/structure/sign/barsign/attack_ai(mob/user) - return attack_hand(user) - /obj/structure/sign/barsign/attack_hand(mob/user) . = ..() if(.) @@ -91,17 +87,6 @@ set_sign(new /datum/barsign/hiddensigns/empbarsign) panel_open = FALSE - else if(istype(I, /obj/item/stack/cable_coil) && panel_open) - var/obj/item/stack/cable_coil/C = I - if(!broken) - to_chat(user, "This sign is functioning properly!") - return - - if(C.use(2)) - to_chat(user, "I replace the burnt wiring.") - broken = FALSE - else - to_chat(user, "I need at least two lengths of cable!") else return ..() diff --git a/code/game/objects/structures/beds_chairs/alien_nest.dm b/code/game/objects/structures/beds_chairs/alien_nest.dm deleted file mode 100644 index 604533d0d8..0000000000 --- a/code/game/objects/structures/beds_chairs/alien_nest.dm +++ /dev/null @@ -1,88 +0,0 @@ -//Alium nests. Essentially beds with an unbuckle delay that only aliums can buckle mobs to. - -/obj/structure/bed/nest - name = "alien nest" - desc = "" - icon = 'icons/obj/smooth_structures/alien/nest.dmi' - icon_state = "nest" - max_integrity = 120 - smooth = SMOOTH_TRUE - can_be_unanchored = FALSE - canSmoothWith = null - buildstacktype = null - flags_1 = NODECONSTRUCT_1 - bolts = FALSE - var/static/mutable_appearance/nest_overlay = mutable_appearance('icons/mob/alien.dmi', "nestoverlay", LYING_MOB_LAYER) - -/obj/structure/bed/nest/user_unbuckle_mob(mob/living/buckled_mob, mob/living/user) - if(has_buckled_mobs()) - for(var/buck in buckled_mobs) //breaking a nest releases all the buckled mobs, because the nest isn't holding them down anymore - var/mob/living/M = buck - - if(user.getorgan(/obj/item/organ/alien/plasmavessel)) - unbuckle_mob(M) - add_fingerprint(user) - return - - if(M != user) - M.visible_message("[user.name] pulls [M.name] free from the sticky nest!",\ - "[user.name] pulls you free from the gelatinous resin.",\ - "I hear squelching...") - else - M.visible_message("[M.name] struggles to break free from the gelatinous resin!",\ - "I struggle to break free from the gelatinous resin... (Stay still for two minutes.)",\ - "I hear squelching...") - if(!do_after(M, 1200, target = src)) - if(M && M.buckled) - to_chat(M, "I fail to unbuckle yourself!") - return - if(!M.buckled) - return - M.visible_message("[M.name] breaks free from the gelatinous resin!",\ - "I break free from the gelatinous resin!",\ - "I hear squelching...") - - unbuckle_mob(M) - add_fingerprint(user) - -/obj/structure/bed/nest/user_buckle_mob(mob/living/M, mob/living/user) - if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.incapacitated() || M.buckled ) - return - - if(M.getorgan(/obj/item/organ/alien/plasmavessel)) - return - if(!user.getorgan(/obj/item/organ/alien/plasmavessel)) - return - - if(has_buckled_mobs()) - unbuckle_all_mobs() - - if(buckle_mob(M)) - M.visible_message("[user.name] secretes a thick vile goo, securing [M.name] into [src]!",\ - "[user.name] drenches you in a foul-smelling resin, trapping you in [src]!",\ - "I hear squelching...") - -/obj/structure/bed/nest/post_buckle_mob(mob/living/M) - M.pixel_y = 0 - M.pixel_x = initial(M.pixel_x) + 2 - M.layer = BELOW_MOB_LAYER - add_overlay(nest_overlay) - -/obj/structure/bed/nest/post_unbuckle_mob(mob/living/M) - M.pixel_x = M.get_standard_pixel_x_offset(M.lying) - M.pixel_y = M.get_standard_pixel_y_offset(M.lying) - M.layer = initial(M.layer) - cut_overlay(nest_overlay) - -/obj/structure/bed/nest/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - playsound(loc, 'sound/blank.ogg', 100, TRUE) - if(BURN) - playsound(loc, 'sound/blank.ogg', 100, TRUE) - -/obj/structure/bed/nest/attack_alien(mob/living/carbon/alien/user) - if(user.used_intent.type != INTENT_HARM) - return attack_hand(user) - else - return ..() diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index 3d86950f94..3bcee9a8aa 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -23,11 +23,6 @@ var/bolts = TRUE buckleverb = "lay" -/obj/structure/bed/examine(mob/user) - . = ..() -// if(bolts) -// . += "It's held together by a couple of bolts." - /obj/structure/bed/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) if(buildstacktype) @@ -44,163 +39,10 @@ else return ..() -/* - * Roller beds - */ -/obj/structure/bed/roller - name = "roller bed" - icon = 'icons/obj/rollerbed.dmi' - icon_state = "down" - anchored = FALSE - resistance_flags = NONE - var/foldabletype = /obj/item/roller - -/obj/structure/bed/roller/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/roller/robo)) - var/obj/item/roller/robo/R = W - if(R.loaded) - to_chat(user, "I already have a roller bed docked!") - return - - if(has_buckled_mobs()) - if(buckled_mobs.len > 1) - unbuckle_all_mobs() - user.visible_message("[user] unbuckles all creatures from [src].") - else - user_unbuckle_mob(buckled_mobs[1],user) - else - R.loaded = src - forceMove(R) - user.visible_message("[user] collects [src].", "I collect [src].") - return 1 - else - return ..() - -/obj/structure/bed/roller/MouseDrop(over_object, src_location, over_location) +/obj/strucutre/bed/post_buckle_mob(mob/living/M) . = ..() - if(over_object == usr && Adjacent(usr)) - if(!ishuman(usr) || !usr.canUseTopic(src, BE_CLOSE)) - return 0 - if(has_buckled_mobs()) - return 0 - usr.visible_message("[usr] collapses \the [src.name].", "I collapse \the [src.name].") - var/obj/structure/bed/roller/B = new foldabletype(get_turf(src)) - usr.put_in_hands(B) - qdel(src) - -/obj/structure/bed/roller/post_buckle_mob(mob/living/M) - density = TRUE - icon_state = "up" -// M.pixel_y = initial(M.pixel_y) + M.update_cone_show() -/obj/structure/bed/roller/Moved() +/obj/structure/bed/post_unbuckle_mob(mob/living/M) . = ..() - if(has_gravity()) - playsound(src, 'sound/blank.ogg', 100, TRUE) - -/obj/structure/bed/roller/post_unbuckle_mob(mob/living/M) - density = FALSE - icon_state = "down" -// M.pixel_x = M.get_standard_pixel_x_offset(M.lying) -// M.pixel_y = M.get_standard_pixel_y_offset(M.lying) - -/obj/item/roller - name = "roller bed" - desc = "" - icon = 'icons/obj/rollerbed.dmi' - icon_state = "folded" - w_class = WEIGHT_CLASS_NORMAL // No more excuses, stop getting blood everywhere - -/obj/item/roller/attackby(obj/item/I, mob/living/user, params) - if(istype(I, /obj/item/roller/robo)) - var/obj/item/roller/robo/R = I - if(R.loaded) - to_chat(user, "[R] already has a roller bed loaded!") - return - user.visible_message("[user] loads [src].", "I load [src] into [R].") - R.loaded = new/obj/structure/bed/roller(R) - qdel(src) //"Load" - return - else - return ..() - -/obj/item/roller/attack_self(mob/user) - deploy_roller(user, user.loc) - -/obj/item/roller/afterattack(obj/target, mob/user , proximity) - . = ..() - if(!proximity) - return - if(isopenturf(target)) - deploy_roller(user, target) - -/obj/item/roller/proc/deploy_roller(mob/user, atom/location) - var/obj/structure/bed/roller/R = new /obj/structure/bed/roller(location) - R.add_fingerprint(user) - qdel(src) - -/obj/item/roller/robo //ROLLER ROBO DA! - name = "roller bed dock" - desc = "" - var/obj/structure/bed/roller/loaded = null - -/obj/item/roller/robo/Initialize() - . = ..() - loaded = new(src) - -/obj/item/roller/robo/examine(mob/user) - . = ..() - . += "The dock is [loaded ? "loaded" : "empty"]." - -/obj/item/roller/robo/deploy_roller(mob/user, atom/location) - if(loaded) - loaded.forceMove(location) - user.visible_message("[user] deploys [loaded].", "I deploy [loaded].") - loaded = null - else - to_chat(user, "The dock is empty!") - -//Dog bed - -/obj/structure/bed/dogbed - name = "dog bed" - icon_state = "dogbed" - desc = "" - anchored = FALSE - buildstacktype - buildstackamount = 10 - var/mob/living/owner = null - -/obj/structure/bed/dogbed/ian - desc = "" - name = "Ian's bed" - anchored = TRUE - -/obj/structure/bed/dogbed/cayenne - desc = "" - name = "Cayenne's bed" - anchored = TRUE - -/obj/structure/bed/dogbed/renault - desc = "" - name = "Renault's bed" - anchored = TRUE - -/obj/structure/bed/dogbed/runtime - desc = "" - name = "Runtime's bed" - anchored = TRUE - -/obj/structure/bed/dogbed/proc/update_owner(mob/living/M) - owner = M - name = "[M]'s bed" - desc = "" - -/obj/structure/bed/dogbed/buckle_mob(mob/living/M, force, check_loc) - . = ..() - update_owner(M) - -/obj/structure/bed/alien - name = "resting contraption" - desc = "" - icon_state = "abed" + M.update_cone_show() diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index c900cbf4a0..b7d2442647 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -75,17 +75,6 @@ if(W.tool_behaviour == TOOL_WRENCH && !(flags_1&NODECONSTRUCT_1)) W.play_tool_sound(src) deconstruct() - else if(istype(W, /obj/item/assembly/shock_kit)) - if(!user.temporarilyRemoveItemFromInventory(W)) - return - var/obj/item/assembly/shock_kit/SK = W - var/obj/structure/chair/e_chair/E = new /obj/structure/chair/e_chair(src.loc) - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - E.setDir(dir) - E.part = SK - SK.forceMove(E) - SK.master = E - qdel(src) else return ..() diff --git a/code/game/objects/structures/beds_chairs/roguechair.dm b/code/game/objects/structures/beds_chairs/roguechair.dm index 0b060de490..3e3225e7ca 100644 --- a/code/game/objects/structures/beds_chairs/roguechair.dm +++ b/code/game/objects/structures/beds_chairs/roguechair.dm @@ -297,46 +297,40 @@ /obj/structure/bed/rogue icon_state = "bed" icon = 'icons/roguetown/misc/structure.dmi' - anchored = TRUE - can_buckle = TRUE + anchored = 1 + can_buckle = 1 + buckle_lying = 1 buckle_lying = 90 pixel_y = 5 sleepy = 2 - debris = list(/obj/item/grown/log/tree/small = 1) + debris = list(/obj/item/natural/plank = 1) // ------------ GOOD BEDS ---------------------- /obj/structure/bed/rogue/inn icon_state = "inn_bed" sleepy = 3 - +// Borbop's double bed code, thank you Borbop. --Cadet /obj/structure/bed/rogue/inn/double icon_state = "double" + max_buckled_mobs = 2 pixel_y = 0 sleepy = 3 - debris = list(/obj/item/grown/log/tree/small = 2) -//////WIP This will essentially allow for multiple mobs to buckle, just needs to change mousedrop function -/obj/structure/bed/rogue/inn/double -// var/list/buckled_mobs = list() shouldnts be needed -/* -/obj/structure/bed/rogue/inn/double/post_buckle_mob(mob/living/M) + debris = list(/obj/item/natural/plank) + /// The mob who buckled to this bed second, to avoid other mobs getting pixel-shifted before they unbuckle. + var/mob/living/goldilocks + +/obj/structure/bed/rogue/inn/double/post_buckle_mob(mob/living/target) . = ..() - if(!buckled_mobs) - buckled_mobs = list() - buckled_mobs += M - M.set_mob_offsets("bed_buckle", _x = buckled_mobs.len * 10, _y = 5) + if(length(buckled_mobs) > 1 && !goldilocks) // Push the second buckled mob a bit higher from the normal lying position + target.set_mob_offsets("bed_buckle", _x = 0, _y = 13) + goldilocks = target -/obj/structure/bed/rogue/inn/double/post_unbuckle_mob(mob/living/M) +/obj/structure/bed/rogue/inn/double/post_unbuckle_mob(mob/living/target) . = ..() - if(M in buckled_mobs) - buckled_mobs -= M - M.reset_offsets("bed_buckle") + if(target == goldilocks) + goldilocks = null - var/x_offset = 0 - for(var/mob/living/buckled_mob in buckled_mobs) - buckled_mob.set_mob_offsets("bed_buckle", _x = x_offset, _y = 5) - x_offset += 10 -*/ // ------------ DECENT BEDS ---------------------- @@ -348,7 +342,7 @@ icon_state = "double_wool" pixel_y = 0 sleepy = 2 - debris = list(/obj/item/grown/log/tree/small = 2) + debris = list(/obj/item/natural/plank = 2) // ------------ ACCEPTABLE BEDS ---------------------- @@ -360,6 +354,7 @@ /obj/structure/bed/rogue/mediocre icon_state = "shitbed2" sleepy = 1 + debris = list(/obj/item/grown/log/tree/small = 1) // Inhumen boss bed. Sleeping on a bear! Kinda comfy, sort of /obj/structure/bed/rogue/bear @@ -376,6 +371,7 @@ name = "uncomfortable bed" icon_state = "shitbed" sleepy = 0.5 + debris = list(/obj/item/grown/log/tree/small = 1) /obj/structure/bed/rogue/sleepingbag name = "sleepcloth" diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm deleted file mode 100644 index 05cbfe6159..0000000000 --- a/code/game/objects/structures/bedsheet_bin.dm +++ /dev/null @@ -1,445 +0,0 @@ -/* -CONTAINS: -BEDSHEETS -LINEN BINS -*/ - -/obj/item/bedsheet - name = "bedsheet" - desc = "" - icon = 'icons/obj/bedsheets.dmi' - lefthand_file = 'icons/mob/inhands/misc/bedsheet_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/bedsheet_righthand.dmi' - icon_state = "sheetwhite" - item_state = "sheetwhite" - layer = MOB_LAYER - throwforce = 0 - throw_speed = 1 - throw_range = 2 - w_class = WEIGHT_CLASS_TINY - resistance_flags = FLAMMABLE - dying_key = DYE_REGISTRY_BEDSHEET - - dog_fashion = /datum/dog_fashion/head/ghost - var/list/dream_messages = list("white") - -/obj/item/bedsheet/attack_self(mob/user) - if(!user.CanReach(src)) //No telekenetic grabbing. - return - if(!user.dropItemToGround(src)) - return - if(layer == initial(layer)) - layer = ABOVE_MOB_LAYER - to_chat(user, "I cover myself with [src].") - pixel_x = 0 - pixel_y = 0 - else - layer = initial(layer) - to_chat(user, "I smooth [src] out beneath you.") - add_fingerprint(user) - return - -/obj/item/bedsheet/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_WIRECUTTER || I.get_sharpness()) - var/obj/item/stack/sheet/cloth/C = new (get_turf(src), 3) - transfer_fingerprints_to(C) - C.add_fingerprint(user) - qdel(src) - to_chat(user, "I tear [src] up.") - else - return ..() - -/obj/item/bedsheet/blue - icon_state = "sheetblue" - item_state = "sheetblue" - dream_messages = list("blue") - -/obj/item/bedsheet/green - icon_state = "sheetgreen" - item_state = "sheetgreen" - dream_messages = list("green") - -/obj/item/bedsheet/grey - icon_state = "sheetgrey" - item_state = "sheetgrey" - dream_messages = list("grey") - -/obj/item/bedsheet/orange - icon_state = "sheetorange" - item_state = "sheetorange" - dream_messages = list("orange") - -/obj/item/bedsheet/purple - icon_state = "sheetpurple" - item_state = "sheetpurple" - dream_messages = list("purple") - -/obj/item/bedsheet/patriot - name = "patriotic bedsheet" - desc = "" - icon_state = "sheetUSA" - item_state = "sheetUSA" - dream_messages = list("America", "freedom", "fireworks", "bald eagles") - -/obj/item/bedsheet/rainbow - name = "rainbow bedsheet" - desc = "" - icon_state = "sheetrainbow" - item_state = "sheetrainbow" - dream_messages = list("red", "orange", "yellow", "green", "blue", "purple", "a rainbow") - -/obj/item/bedsheet/red - icon_state = "sheetred" - item_state = "sheetred" - dream_messages = list("red") - -/obj/item/bedsheet/yellow - icon_state = "sheetyellow" - item_state = "sheetyellow" - dream_messages = list("yellow") - -/obj/item/bedsheet/mime - name = "mime's blanket" - desc = "" - icon_state = "sheetmime" - item_state = "sheetmime" - dream_messages = list("silence", "gestures", "a pale face", "a gaping mouth", "the mime") - -/obj/item/bedsheet/clown - name = "clown's blanket" - desc = "" - icon_state = "sheetclown" - item_state = "sheetrainbow" - dream_messages = list("honk", "laughter", "a prank", "a joke", "a smiling face", "the clown") - -/obj/item/bedsheet/captain - name = "captain's bedsheet" - desc = "" - icon_state = "sheetcaptain" - item_state = "sheetcaptain" - dream_messages = list("authority", "a golden ID", "sunglasses", "a green disc", "an antique gun", "the captain") - -/obj/item/bedsheet/rd - name = "research director's bedsheet" - desc = "" - icon_state = "sheetrd" - item_state = "sheetrd" - dream_messages = list("authority", "a silvery ID", "a bomb", "a mech", "a facehugger", "maniacal laughter", "the research director") - -// for Free Golems. -/obj/item/bedsheet/rd/royal_cape - name = "Royal Cape of the Liberator" - desc = "" - dream_messages = list("mining", "stone", "a golem", "freedom", "doing whatever") - -/obj/item/bedsheet/medical - name = "medical blanket" - desc = "" - icon_state = "sheetmedical" - item_state = "sheetmedical" - dream_messages = list("healing", "life", "surgery", "a doctor") - -/obj/item/bedsheet/cmo - name = "chief medical officer's bedsheet" - desc = "" - icon_state = "sheetcmo" - item_state = "sheetcmo" - dream_messages = list("authority", "a silvery ID", "healing", "life", "surgery", "a cat", "the chief medical officer") - -/obj/item/bedsheet/hos - name = "head of security's bedsheet" - desc = "" - icon_state = "sheethos" - item_state = "sheethos" - dream_messages = list("authority", "a silvery ID", "handcuffs", "a baton", "a flashbang", "sunglasses", "the head of security") - -/obj/item/bedsheet/hop - name = "head of personnel's bedsheet" - desc = "" - icon_state = "sheethop" - item_state = "sheethop" - dream_messages = list("authority", "a silvery ID", "obligation", "a computer", "an ID", "a corgi", "the head of personnel") - -/obj/item/bedsheet/ce - name = "chief engineer's bedsheet" - desc = "" - icon_state = "sheetce" - item_state = "sheetce" - dream_messages = list("authority", "a silvery ID", "the engine", "power tools", "an APC", "a parrot", "the chief engineer") - -/obj/item/bedsheet/qm - name = "quartermaster's bedsheet" - desc = "" - icon_state = "sheetqm" - item_state = "sheetqm" - dream_messages = list("a grey ID", "a shuttle", "a crate", "a sloth", "the quartermaster") - -/obj/item/bedsheet/brown - icon_state = "sheetbrown" - item_state = "sheetbrown" - dream_messages = list("brown") - -/obj/item/bedsheet/black - icon_state = "sheetblack" - item_state = "sheetblack" - dream_messages = list("black") - -/obj/item/bedsheet/centcom - name = "\improper CentCom bedsheet" - desc = "" - icon_state = "sheetcentcom" - item_state = "sheetcentcom" - dream_messages = list("a unique ID", "authority", "artillery", "an ending") - -/obj/item/bedsheet/syndie - name = "syndicate bedsheet" - desc = "" - icon_state = "sheetsyndie" - item_state = "sheetsyndie" - dream_messages = list("a green disc", "a red crystal", "a glowing blade", "a wire-covered ID") - -/obj/item/bedsheet/cult - name = "cultist's bedsheet" - desc = "" - icon_state = "sheetcult" - item_state = "sheetcult" - dream_messages = list("a tome", "a floating red crystal", "a glowing sword", "a bloody symbol", "a massive humanoid figure") - -/obj/item/bedsheet/wiz - name = "wizard's bedsheet" - desc = "" - icon_state = "sheetwiz" - item_state = "sheetwiz" - dream_messages = list("a book", "an explosion", "lightning", "a staff", "a skeleton", "a robe", "magic") - -/obj/item/bedsheet/nanotrasen - name = "nanotrasen bedsheet" - desc = "" - icon_state = "sheetNT" - item_state = "sheetNT" - dream_messages = list("authority", "an ending") - -/obj/item/bedsheet/ian - icon_state = "sheetian" - item_state = "sheetian" - dream_messages = list("a dog", "a corgi", "woof", "bark", "arf") - -/obj/item/bedsheet/cosmos - name = "cosmic space bedsheet" - desc = "" - icon_state = "sheetcosmos" - item_state = "sheetcosmos" - dream_messages = list("the infinite cosmos", "Hans Zimmer music", "a flight through space", "the galaxy", "being fabulous", "shooting stars") - light_power = 2 - light_range = 1.4 - -/obj/item/bedsheet/rogue/cloth - desc = "" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "cloth_bedsheet" - item_state = "cloth_bedsheet" - pixel_y = 5 - -/obj/item/bedsheet/rogue/pelt - desc = "" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "pelt_bedsheet" - item_state = "pelt_bedsheet" - pixel_y = 5 - -/obj/item/bedsheet/rogue/wool - desc = "" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "wool_bedsheet" - item_state = "wool_bedsheet" - pixel_y = 5 - -/obj/item/bedsheet/rogue/double_pelt - desc = "" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "double_pelt_bedsheet" - item_state = "double_pelt_bedsheet" - -/obj/item/bedsheet/rogue/fabric - desc = "" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "fabric_bedsheet" - item_state = "fabric_bedsheet" - pixel_y = 5 - -/obj/item/bedsheet/rogue/fabric_double - desc = "" - icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "double_fabric_bedsheet" - item_state = "double_fabric_bedsheet" - -/obj/item/bedsheet/random - icon_state = "random_bedsheet" - name = "random bedsheet" - desc = "" - -/obj/item/bedsheet/random/Initialize() - ..() - var/type = pick(typesof(/obj/item/bedsheet) - /obj/item/bedsheet/random) - new type(loc) - return INITIALIZE_HINT_QDEL - -/obj/item/bedsheet/dorms - icon_state = "random_bedsheet" - name = "random dorms bedsheet" - desc = "" - -/obj/item/bedsheet/dorms/Initialize() - ..() - var/type = pickweight(list("Colors" = 80, "Special" = 20)) - switch(type) - if("Colors") - type = pick(list(/obj/item/bedsheet, - /obj/item/bedsheet/blue, - /obj/item/bedsheet/green, - /obj/item/bedsheet/grey, - /obj/item/bedsheet/orange, - /obj/item/bedsheet/purple, - /obj/item/bedsheet/red, - /obj/item/bedsheet/yellow, - /obj/item/bedsheet/brown, - /obj/item/bedsheet/black)) - if("Special") - type = pick(list(/obj/item/bedsheet/patriot, - /obj/item/bedsheet/rainbow, - /obj/item/bedsheet/ian, - /obj/item/bedsheet/cosmos, - /obj/item/bedsheet/nanotrasen)) - new type(loc) - return INITIALIZE_HINT_QDEL - -/obj/structure/bedsheetbin - name = "linen bin" - desc = "" - icon = 'icons/obj/structures.dmi' - icon_state = "linenbin-full" - anchored = TRUE - resistance_flags = FLAMMABLE - max_integrity = 70 - var/amount = 10 - var/list/sheets = list() - var/obj/item/hidden = null - -/obj/structure/bedsheetbin/empty - amount = 0 - icon_state = "linenbin-empty" - anchored = FALSE - - -/obj/structure/bedsheetbin/examine(mob/user) - . = ..() - if(amount < 1) - . += "There are no bed sheets in the bin." - else if(amount == 1) - . += "There is one bed sheet in the bin." - else - . += "There are [amount] bed sheets in the bin." - - -/obj/structure/bedsheetbin/update_icon() - switch(amount) - if(0) - icon_state = "linenbin-empty" - if(1 to 5) - icon_state = "linenbin-half" - else - icon_state = "linenbin-full" - -/obj/structure/bedsheetbin/fire_act(added, maxstacks) - if(amount) - amount = 0 - update_icon() - ..() - -/obj/structure/bedsheetbin/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/bedsheet)) - if(!user.transferItemToLoc(I, src)) - return - sheets.Add(I) - amount++ - to_chat(user, "I tuck [I] in [src].") - update_icon() - - else if(default_unfasten_wrench(user, I, 5)) - return - - else if(I.tool_behaviour == TOOL_SCREWDRIVER) - if(flags_1 & NODECONSTRUCT_1) - return - if(amount) - to_chat(user, "The [src] must be empty first!") - return - if(I.use_tool(src, user, 5, volume=50)) - to_chat(user, "I disassemble the [src].") - new /obj/item/stack/rods(loc, 2) - qdel(src) - - else if(amount && !hidden && I.w_class < WEIGHT_CLASS_BULKY) //make sure there's sheets to hide it among, make sure nothing else is hidden in there. - if(!user.transferItemToLoc(I, src)) - to_chat(user, "\The [I] is stuck to your hand, you cannot hide it among the sheets!") - return - hidden = I - to_chat(user, "I hide [I] among the sheets.") - - -/obj/structure/bedsheetbin/attack_paw(mob/user) - return attack_hand(user) - -/obj/structure/bedsheetbin/attack_hand(mob/user) - . = ..() - if(.) - return - if(isliving(user)) - var/mob/living/L = user - if(!(L.mobility_flags & MOBILITY_PICKUP)) - return - if(amount >= 1) - amount-- - - var/obj/item/bedsheet/B - if(sheets.len > 0) - B = sheets[sheets.len] - sheets.Remove(B) - - else - B = new /obj/item/bedsheet(loc) - - B.forceMove(drop_location()) - user.put_in_hands(B) - to_chat(user, "I take [B] out of [src].") - update_icon() - - if(hidden) - hidden.forceMove(drop_location()) - to_chat(user, "[hidden] falls out of [B]!") - hidden = null - - - add_fingerprint(user) -/obj/structure/bedsheetbin/attack_tk(mob/user) - if(amount >= 1) - amount-- - - var/obj/item/bedsheet/B - if(sheets.len > 0) - B = sheets[sheets.len] - sheets.Remove(B) - - else - B = new /obj/item/bedsheet(loc) - - B.forceMove(drop_location()) - to_chat(user, "I telekinetically remove [B] from [src].") - update_icon() - - if(hidden) - hidden.forceMove(drop_location()) - hidden = null - - - add_fingerprint(user) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 19f0464afa..11b97351f0 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -320,7 +320,7 @@ var/obj/item/lockpick/P = I var/mob/living/L = user - + var/pickskill = user.mind.get_skill_level(/datum/skill/misc/lockpicking) var/perbonus = L.STAPER/5 var/picktime = 70 @@ -405,9 +405,6 @@ user.visible_message("[user] stuffs [O] into [src].", \ "I stuff [O] into [src].", \ "I hear a loud bang.") - var/mob/living/L = O - if(!issilicon(L)) - L.Paralyze(40) O.forceMove(T) close() else @@ -436,10 +433,6 @@ /obj/structure/closet/attack_paw(mob/user) return attack_hand(user) -/obj/structure/closet/attack_robot(mob/user) - if(user.Adjacent(src)) - return attack_hand(user) - // tk grab then use on self /obj/structure/closet/attack_self_tk(mob/user) return attack_hand(user) @@ -452,7 +445,7 @@ if(!usr.canUseTopic(src, BE_CLOSE) || !isturf(loc)) return - if(iscarbon(usr) || issilicon(usr) || isdrone(usr)) + if(iscarbon(usr) || isdrone(usr)) return toggle(usr) else to_chat(usr, "This mob type can't use this verb.") diff --git a/code/game/objects/structures/crates_lockers/closets/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm deleted file mode 100644 index 0b770f2959..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/fitness.dm +++ /dev/null @@ -1,65 +0,0 @@ -/obj/structure/closet/athletic_mixed - name = "athletic wardrobe" - desc = "" - icon_door = "mixed" - -/obj/structure/closet/athletic_mixed/PopulateContents() - ..() - new /obj/item/clothing/under/shorts/purple(src) - new /obj/item/clothing/under/shorts/grey(src) - new /obj/item/clothing/under/shorts/black(src) - new /obj/item/clothing/under/shorts/red(src) - new /obj/item/clothing/under/shorts/blue(src) - new /obj/item/clothing/under/shorts/green(src) - new /obj/item/clothing/under/costume/jabroni(src) - - -/obj/structure/closet/boxinggloves - name = "boxing gloves" - desc = "" - -/obj/structure/closet/boxinggloves/PopulateContents() - ..() - new /obj/item/clothing/gloves/boxing/blue(src) - new /obj/item/clothing/gloves/boxing/green(src) - new /obj/item/clothing/gloves/boxing/yellow(src) - new /obj/item/clothing/gloves/boxing(src) - - -/obj/structure/closet/masks - name = "mask closet" - desc = "" - -/obj/structure/closet/masks/PopulateContents() - ..() - new /obj/item/clothing/mask/luchador(src) - new /obj/item/clothing/mask/luchador/rudos(src) - new /obj/item/clothing/mask/luchador/tecnicos(src) - - -/obj/structure/closet/lasertag/red - name = "red laser tag equipment" - desc = "" - icon_door = "red" - -/obj/structure/closet/lasertag/red/PopulateContents() - ..() - for(var/i in 1 to 3) - new /obj/item/gun/energy/laser/redtag(src) - for(var/i in 1 to 3) - new /obj/item/clothing/suit/redtag(src) - new /obj/item/clothing/head/helmet/redtaghelm(src) - - -/obj/structure/closet/lasertag/blue - name = "blue laser tag equipment" - desc = "" - icon_door = "blue" - -/obj/structure/closet/lasertag/blue/PopulateContents() - ..() - for(var/i in 1 to 3) - new /obj/item/gun/energy/laser/bluetag(src) - for(var/i in 1 to 3) - new /obj/item/clothing/suit/bluetag(src) - new /obj/item/clothing/head/helmet/bluetaghelm(src) diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index 5de3ab47be..d59404a507 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -47,8 +47,6 @@ new /obj/item/clothing/mask/gas/sechailer/swat(src) new /obj/item/clothing/shoes/combat/swat(src) new /obj/item/clothing/shoes/combat/swat(src) - new /obj/item/clothing/suit/space/hardsuit/deathsquad(src) - new /obj/item/clothing/suit/space/hardsuit/deathsquad(src) new /obj/item/clothing/under/syndicate/tacticool(src) new /obj/item/clothing/under/syndicate/tacticool(src) @@ -66,12 +64,6 @@ ..() for(var/i in 1 to 3) new /obj/item/clothing/suit/armor/tdome/red(src) - for(var/i in 1 to 3) - new /obj/item/melee/transforming/energy/sword/saber(src) - for(var/i in 1 to 3) - new /obj/item/gun/energy/laser(src) - for(var/i in 1 to 3) - new /obj/item/melee/baton/loaded(src) for(var/i in 1 to 3) new /obj/item/storage/box/flashbangs(src) for(var/i in 1 to 3) @@ -85,12 +77,6 @@ ..() for(var/i in 1 to 3) new /obj/item/clothing/suit/armor/tdome/green(src) - for(var/i in 1 to 3) - new /obj/item/melee/transforming/energy/sword/saber(src) - for(var/i in 1 to 3) - new /obj/item/gun/energy/laser(src) - for(var/i in 1 to 3) - new /obj/item/melee/baton/loaded(src) for(var/i in 1 to 3) new /obj/item/storage/box/flashbangs(src) for(var/i in 1 to 3) @@ -102,10 +88,6 @@ /obj/structure/closet/malf/suits/PopulateContents() ..() - new /obj/item/tank/jetpack/void(src) new /obj/item/clothing/mask/breath(src) - new /obj/item/clothing/head/helmet/space/nasavoid(src) - new /obj/item/clothing/suit/space/nasavoid(src) new /obj/item/crowbar(src) - new /obj/item/stock_parts/cell(src) new /obj/item/multitool(src) diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm deleted file mode 100644 index acf6c7774f..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ /dev/null @@ -1,313 +0,0 @@ -// Closets for specific jobs - -/obj/structure/closet/gmcloset - name = "formal closet" - desc = "" - icon_door = "black" - -/obj/structure/closet/gmcloset/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/clothing/head/that = 2, - /obj/item/radio/headset/headset_srv = 2, - /obj/item/clothing/under/suit/sl = 2, - /obj/item/clothing/under/rank/civilian/bartender = 2, - /obj/item/clothing/accessory/waistcoat = 2, - /obj/item/clothing/head/soft/black = 2, - /obj/item/clothing/shoes/sneakers/black = 2, - /obj/item/reagent_containers/glass/rag = 2, - /obj/item/storage/box/beanbag = 1, - /obj/item/clothing/suit/armor/vest/alt = 1, - /obj/item/circuitboard/machine/dish_drive = 1, - /obj/item/clothing/glasses/sunglasses/reagent = 1, - /obj/item/clothing/neck/petcollar = 1, - /obj/item/storage/belt/bandolier = 1) - generate_items_inside(items_inside,src) - -/obj/structure/closet/chefcloset - name = "\proper chef's closet" - desc = "" - icon_door = "black" - -/obj/structure/closet/chefcloset/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/clothing/under/suit/waiter = 2, - /obj/item/radio/headset/headset_srv = 2, - /obj/item/clothing/accessory/waistcoat = 2, - /obj/item/clothing/suit/apron/chef = 3, - /obj/item/clothing/head/soft/mime = 2, - /obj/item/storage/box/mousetraps = 2, - /obj/item/circuitboard/machine/dish_drive = 1, - /obj/item/clothing/suit/toggle/chef = 1, - /obj/item/clothing/under/rank/civilian/chef = 1, - /obj/item/clothing/head/chefhat = 1, - /obj/item/reagent_containers/glass/rag = 1) - generate_items_inside(items_inside,src) - -/obj/structure/closet/jcloset - name = "custodial closet" - desc = "" - icon_door = "mixed" - -/obj/structure/closet/jcloset/PopulateContents() - ..() - new /obj/item/clothing/under/rank/civilian/janitor(src) - new /obj/item/cartridge/janitor(src) - new /obj/item/clothing/gloves/color/black(src) - new /obj/item/clothing/head/soft/purple(src) - new /obj/item/paint/paint_remover(src) - new /obj/item/melee/flyswatter(src) - new /obj/item/flashlight(src) - for(var/i in 1 to 3) - new /obj/item/clothing/suit/caution(src) - new /obj/item/holosign_creator(src) - new /obj/item/lightreplacer(src) - new /obj/item/soap(src) - new /obj/item/storage/bag/trash(src) - new /obj/item/clothing/shoes/galoshes(src) - new /obj/item/watertank/janitor(src) - new /obj/item/storage/belt/janitor(src) - - -/obj/structure/closet/lawcloset - name = "legal closet" - desc = "" - icon_door = "blue" - -/obj/structure/closet/lawcloset/PopulateContents() - ..() - new /obj/item/clothing/under/suit/blacktwopiece(src) - new /obj/item/clothing/under/rank/civilian/lawyer/female(src) - new /obj/item/clothing/under/rank/civilian/lawyer/black(src) - new /obj/item/clothing/under/rank/civilian/lawyer/red(src) - new /obj/item/clothing/under/rank/civilian/lawyer/bluesuit(src) - new /obj/item/clothing/suit/toggle/lawyer(src) - new /obj/item/clothing/under/rank/civilian/lawyer/purpsuit(src) - new /obj/item/clothing/suit/toggle/lawyer/purple(src) - new /obj/item/clothing/under/suit/black(src) - new /obj/item/clothing/suit/toggle/lawyer/black(src) - new /obj/item/clothing/shoes/laceup(src) - new /obj/item/clothing/shoes/laceup(src) - new /obj/item/clothing/accessory/lawyers_badge(src) - new /obj/item/clothing/accessory/lawyers_badge(src) - -/obj/structure/closet/wardrobe/chaplain_black - name = "chapel wardrobe" - desc = "" - icon_door = "black" - -/obj/structure/closet/wardrobe/chaplain_black/PopulateContents() - new /obj/item/choice_beacon/holy(src) - new /obj/item/clothing/accessory/pocketprotector/cosmetology(src) - new /obj/item/clothing/under/rank/civilian/chaplain(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/suit/chaplainsuit/nun(src) - new /obj/item/clothing/head/nun_hood(src) - new /obj/item/clothing/suit/hooded/chaplainsuit/monkfrock(src) - new /obj/item/clothing/suit/chaplainsuit/holidaypriest(src) - new /obj/item/storage/backpack/cultpack(src) - new /obj/item/storage/fancy/candle_box(src) - new /obj/item/storage/fancy/candle_box(src) - return - -/obj/structure/closet/wardrobe/red - name = "security wardrobe" - icon_door = "red" - -/obj/structure/closet/wardrobe/red/PopulateContents() - var/static/items_inside = list( - /obj/item/clothing/suit/hooded/wintercoat/security = 1, - /obj/item/storage/backpack/security = 1, - /obj/item/storage/backpack/satchel/sec = 1, - /obj/item/storage/backpack/duffelbag/sec = 2, - /obj/item/clothing/under/rank/security/officer = 3, - /obj/item/clothing/under/rank/security/officer/skirt = 2, - /obj/item/clothing/shoes/jackboots = 3, - /obj/item/clothing/head/beret/sec = 3, - /obj/item/clothing/head/soft/sec = 3, - /obj/item/clothing/mask/bandana/red = 2) - generate_items_inside(items_inside,src) - return - -/obj/structure/closet/wardrobe/cargotech - name = "cargo wardrobe" - icon_door = "orange" - -/obj/structure/closet/wardrobe/cargotech/PopulateContents() - var/static/items_inside = list( - /obj/item/clothing/suit/hooded/wintercoat/cargo = 1, - /obj/item/clothing/under/rank/cargo/tech = 3, - /obj/item/clothing/shoes/sneakers/black = 3, - /obj/item/clothing/gloves/fingerless = 3, - /obj/item/clothing/head/soft = 3, - /obj/item/radio/headset/headset_cargo = 1) - generate_items_inside(items_inside,src) - -/obj/structure/closet/wardrobe/atmospherics_yellow - name = "atmospherics wardrobe" - icon_door = "atmos_wardrobe" - -/obj/structure/closet/wardrobe/atmospherics_yellow/PopulateContents() - var/static/items_inside = list( - /obj/item/clothing/accessory/pocketprotector = 1, - /obj/item/storage/backpack/duffelbag/engineering = 1, - /obj/item/storage/backpack/satchel/eng = 1, - /obj/item/storage/backpack/industrial = 1, - /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos = 3, - /obj/item/clothing/under/rank/engineering/atmospheric_technician = 3, - /obj/item/clothing/shoes/sneakers/black = 3) - generate_items_inside(items_inside,src) - return - -/obj/structure/closet/wardrobe/engineering_yellow - name = "engineering wardrobe" - icon_door = "yellow" - -/obj/structure/closet/wardrobe/engineering_yellow/PopulateContents() - var/static/items_inside = list( - /obj/item/clothing/accessory/pocketprotector = 1, - /obj/item/storage/backpack/duffelbag/engineering = 1, - /obj/item/storage/backpack/industrial = 1, - /obj/item/storage/backpack/satchel/eng = 1, - /obj/item/clothing/suit/hooded/wintercoat/engineering = 1, - /obj/item/clothing/under/rank/engineering/engineer = 3, - /obj/item/clothing/suit/hazardvest = 3, - /obj/item/clothing/shoes/workboots = 3, - /obj/item/clothing/head/hardhat = 3) - generate_items_inside(items_inside,src) - return - -/obj/structure/closet/wardrobe/white/medical - name = "medical doctor's wardrobe" - -/obj/structure/closet/wardrobe/white/medical/PopulateContents() - var/static/items_inside = list( - /obj/item/clothing/accessory/pocketprotector = 1, - /obj/item/storage/backpack/duffelbag/med = 1, - /obj/item/storage/backpack/medic = 1, - /obj/item/storage/backpack/satchel/med = 1, - /obj/item/clothing/suit/hooded/wintercoat/medical = 1, - /obj/item/clothing/under/rank/medical/doctor/nurse = 1, - /obj/item/clothing/head/nursehat = 1, - /obj/item/clothing/under/rank/medical/doctor/blue = 1, - /obj/item/clothing/under/rank/medical/doctor/green = 1, - /obj/item/clothing/under/rank/medical/doctor/purple = 1, - /obj/item/clothing/under/rank/medical/doctor = 3, - /obj/item/clothing/suit/toggle/labcoat = 3, - /obj/item/clothing/suit/toggle/labcoat/emt = 3, - /obj/item/clothing/shoes/sneakers/white = 3, - /obj/item/clothing/head/soft/emt = 3) - generate_items_inside(items_inside,src) - return - -/obj/structure/closet/wardrobe/robotics_black - name = "robotics wardrobe" - icon_door = "black" - -/obj/structure/closet/wardrobe/robotics_black/PopulateContents() - var/static/items_inside = list( - /obj/item/clothing/glasses/hud/diagnostic = 2, - /obj/item/clothing/under/rank/rnd/roboticist = 2, - /obj/item/clothing/suit/toggle/labcoat = 2, - /obj/item/clothing/shoes/sneakers/black = 2, - /obj/item/clothing/gloves/fingerless = 2, - /obj/item/clothing/head/soft/black = 2) - generate_items_inside(items_inside,src) - if(prob(40)) - new /obj/item/clothing/mask/bandana/skull(src) - if(prob(40)) - new /obj/item/clothing/mask/bandana/skull(src) - return - - -/obj/structure/closet/wardrobe/chemistry_white - name = "chemistry wardrobe" - icon_door = "white" - -/obj/structure/closet/wardrobe/chemistry_white/PopulateContents() - var/static/items_inside = list( - /obj/item/clothing/under/rank/medical/chemist = 2, - /obj/item/clothing/shoes/sneakers/white = 2, - /obj/item/clothing/suit/toggle/labcoat/chemist = 2, - /obj/item/storage/backpack/chemistry = 2, - /obj/item/storage/backpack/satchel/chem = 2, - /obj/item/storage/bag/chemistry = 2) - generate_items_inside(items_inside,src) - return - - -/obj/structure/closet/wardrobe/genetics_white - name = "genetics wardrobe" - icon_door = "white" - -/obj/structure/closet/wardrobe/genetics_white/PopulateContents() - var/static/items_inside = list( - /obj/item/clothing/under/rank/medical/geneticist = 2, - /obj/item/clothing/shoes/sneakers/white = 2, - /obj/item/clothing/suit/toggle/labcoat/genetics = 2, - /obj/item/storage/backpack/genetics = 2, - /obj/item/storage/backpack/satchel/gen = 2) - generate_items_inside(items_inside,src) - return - - -/obj/structure/closet/wardrobe/virology_white - name = "virology wardrobe" - icon_door = "white" - -/obj/structure/closet/wardrobe/virology_white/PopulateContents() - var/static/items_inside = list( - /obj/item/clothing/under/rank/medical/virologist = 2, - /obj/item/clothing/shoes/sneakers/white = 2, - /obj/item/clothing/suit/toggle/labcoat/virologist = 2, - /obj/item/clothing/mask/surgical = 2, - /obj/item/storage/backpack/virology = 2, - /obj/item/storage/backpack/satchel/vir = 2) - generate_items_inside(items_inside,src) - return - -/obj/structure/closet/wardrobe/science_white - name = "science wardrobe" - icon_door = "white" - -/obj/structure/closet/wardrobe/science_white/PopulateContents() - var/static/items_inside = list( - /obj/item/clothing/accessory/pocketprotector = 1, - /obj/item/storage/backpack/science = 2, - /obj/item/storage/backpack/satchel/tox = 2, - /obj/item/clothing/suit/hooded/wintercoat/science = 1, - /obj/item/clothing/under/rank/rnd/scientist = 3, - /obj/item/clothing/suit/toggle/labcoat/science = 3, - /obj/item/clothing/shoes/sneakers/white = 3, - /obj/item/radio/headset/headset_sci = 2, - /obj/item/clothing/mask/gas = 3) - generate_items_inside(items_inside,src) - return - -/obj/structure/closet/wardrobe/botanist - name = "botanist wardrobe" - icon_door = "green" - -/obj/structure/closet/wardrobe/botanist/PopulateContents() - var/static/items_inside = list( - /obj/item/storage/backpack/botany = 2, - /obj/item/storage/backpack/satchel/hyd = 2, - /obj/item/clothing/suit/hooded/wintercoat/hydro = 1, - /obj/item/clothing/suit/apron = 2, - /obj/item/clothing/suit/apron/overalls = 2, - /obj/item/clothing/under/rank/civilian/hydroponics = 3, - /obj/item/clothing/mask/bandana = 3) - generate_items_inside(items_inside,src) - -/obj/structure/closet/wardrobe/curator - name = "treasure hunting wardrobe" - icon_door = "black" - -/obj/structure/closet/wardrobe/curator/PopulateContents() - new /obj/item/clothing/head/fedora/curator(src) - new /obj/item/clothing/suit/curator(src) - new /obj/item/clothing/under/rank/civilian/curator/treasure_hunter(src) - new /obj/item/clothing/shoes/workboots/mining(src) - new /obj/item/storage/backpack/satchel/explorer(src) - diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm deleted file mode 100644 index 7721e1c236..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/structure/closet/secure_closet/bar - name = "booze storage" - req_access = list(ACCESS_BAR) - icon_state = "cabinet" - resistance_flags = FLAMMABLE - max_integrity = 70 - open_sound = 'sound/blank.ogg' - close_sound = 'sound/blank.ogg' - open_sound_volume = 25 - close_sound_volume = 50 - -/obj/structure/closet/secure_closet/bar/PopulateContents() - ..() - for(var/i in 1 to 10) - new /obj/item/reagent_containers/food/drinks/beer( src ) - new /obj/item/etherealballdeployer(src) - new /obj/item/roulette_wheel_beacon(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm deleted file mode 100644 index 3c761299e3..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/structure/closet/secure_closet/quartermaster - name = "\proper quartermaster's locker" - req_access = list(ACCESS_QM) - icon_state = "qm" - -/obj/structure/closet/secure_closet/quartermaster/PopulateContents() - ..() - new /obj/item/clothing/neck/cloak/qm(src) - new /obj/item/storage/lockbox/medal/cargo(src) - new /obj/item/clothing/under/rank/cargo/qm(src) - new /obj/item/clothing/under/rank/cargo/qm/skirt(src) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/radio/headset/headset_cargo(src) - new /obj/item/clothing/suit/fire/firefighter(src) - new /obj/item/clothing/gloves/fingerless(src) - new /obj/item/megaphone/cargo(src) - new /obj/item/tank/internals/emergency_oxygen(src) - new /obj/item/clothing/mask/gas(src) - new /obj/item/clothing/head/soft(src) - new /obj/item/export_scanner(src) - new /obj/item/door_remote/quartermaster(src) - new /obj/item/circuitboard/machine/techfab/department/cargo(src) - new /obj/item/storage/photo_album/QM(src) - new /obj/item/circuitboard/machine/ore_silo(src) - new /obj/item/card/id/departmental_budget/car(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm deleted file mode 100644 index d89668f47a..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ /dev/null @@ -1,92 +0,0 @@ -/obj/structure/closet/secure_closet/engineering_chief - name = "\proper chief engineer's locker" - req_access = list(ACCESS_CE) - icon_state = "ce" - -/obj/structure/closet/secure_closet/engineering_chief/PopulateContents() - ..() - new /obj/item/clothing/neck/cloak/ce(src) - new /obj/item/clothing/under/rank/engineering/chief_engineer(src) - new /obj/item/clothing/under/rank/engineering/chief_engineer/skirt(src) - new /obj/item/clothing/head/hardhat/white(src) - new /obj/item/clothing/head/hardhat/weldhat/white(src) - new /obj/item/clothing/gloves/color/yellow(src) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/tank/jetpack/suit(src) - new /obj/item/cartridge/ce(src) - new /obj/item/radio/headset/heads/ce(src) - new /obj/item/megaphone/command(src) - new /obj/item/areaeditor/blueprints(src) - new /obj/item/holosign_creator/engineering(src) - new /obj/item/assembly/flash/handheld(src) - new /obj/item/clothing/glasses/meson/engine(src) - new /obj/item/door_remote/chief_engineer(src) - new /obj/item/pipe_dispenser(src) - new /obj/item/circuitboard/machine/techfab/department/engineering(src) - new /obj/item/extinguisher/advanced(src) - new /obj/item/storage/photo_album/CE(src) - -/obj/structure/closet/secure_closet/engineering_electrical - name = "electrical supplies locker" - req_access = list(ACCESS_ENGINE_EQUIP) - icon_state = "eng" - icon_door = "eng_elec" - -/obj/structure/closet/secure_closet/engineering_electrical/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/clothing/gloves/color/yellow = 2, - /obj/item/inducer = 2, - /obj/item/storage/toolbox/electrical = 3, - /obj/item/electronics/apc = 3, - /obj/item/multitool = 3) - generate_items_inside(items_inside,src) - -/obj/structure/closet/secure_closet/engineering_welding - name = "welding supplies locker" - req_access = list(ACCESS_ENGINE_EQUIP) - icon_state = "eng" - icon_door = "eng_weld" - -/obj/structure/closet/secure_closet/engineering_welding/PopulateContents() - ..() - for(var/i in 1 to 3) - new /obj/item/clothing/head/welding(src) - for(var/i in 1 to 3) - new /obj/item/weldingtool(src) - -/obj/structure/closet/secure_closet/engineering_personal - name = "engineer's locker" - req_access = list(ACCESS_ENGINE_EQUIP) - icon_state = "eng_secure" - -/obj/structure/closet/secure_closet/engineering_personal/PopulateContents() - ..() - new /obj/item/radio/headset/headset_eng(src) - new /obj/item/storage/toolbox/mechanical(src) - new /obj/item/tank/internals/emergency_oxygen/engi(src) - new /obj/item/holosign_creator/engineering(src) - new /obj/item/clothing/mask/gas(src) - new /obj/item/clothing/glasses/meson/engine(src) - new /obj/item/storage/box/emptysandbags(src) - new /obj/item/storage/bag/construction(src) - - -/obj/structure/closet/secure_closet/atmospherics - name = "\proper atmospheric technician's locker" - req_access = list(ACCESS_ATMOSPHERICS) - icon_state = "atmos" - -/obj/structure/closet/secure_closet/atmospherics/PopulateContents() - ..() - new /obj/item/radio/headset/headset_eng(src) - new /obj/item/pipe_dispenser(src) - new /obj/item/storage/toolbox/mechanical(src) - new /obj/item/tank/internals/emergency_oxygen/engi(src) - new /obj/item/holosign_creator/atmos(src) - new /obj/item/watertank/atmos(src) - new /obj/item/clothing/suit/fire/atmos(src) - new /obj/item/clothing/mask/gas/atmos(src) - new /obj/item/clothing/head/hardhat/atmos(src) - new /obj/item/clothing/glasses/meson/engine/tray(src) - new /obj/item/extinguisher/advanced(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm deleted file mode 100644 index 6f3a41c466..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ /dev/null @@ -1,116 +0,0 @@ -/obj/structure/closet/secure_closet/freezer - icon_state = "freezer" - var/jones = FALSE - -/obj/structure/closet/secure_closet/freezer/Destroy() - recursive_organ_check(src) - ..() - -/obj/structure/closet/secure_closet/freezer/Initialize() - . = ..() - recursive_organ_check(src) - -/obj/structure/closet/secure_closet/freezer/open(mob/living/user) - if(opened || !can_open(user)) //dupe check just so we don't let the organs decay when someone fails to open the locker - return FALSE - recursive_organ_check(src) - return ..() - -/obj/structure/closet/secure_closet/freezer/close(mob/living/user) - if(..()) //if we actually closed the locker - recursive_organ_check(src) - -/obj/structure/closet/secure_closet/freezer/ex_act() - if(!jones) - jones = TRUE - else - ..() - -/obj/structure/closet/secure_closet/freezer/kitchen - name = "kitchen cabinet" - req_access = list(ACCESS_KITCHEN) - -/obj/structure/closet/secure_closet/freezer/kitchen/PopulateContents() - ..() - for(var/i = 0, i < 3, i++) - new /obj/item/reagent_containers/food/condiment/flour(src) - new /obj/item/reagent_containers/food/condiment/rice(src) - new /obj/item/reagent_containers/food/condiment/sugar(src) - -/obj/structure/closet/secure_closet/freezer/kitchen/maintenance - name = "maintenance refrigerator" - desc = "" - req_access = list() - -/obj/structure/closet/secure_closet/freezer/kitchen/maintenance/PopulateContents() - ..() - for(var/i = 0, i < 5, i++) - new /obj/item/reagent_containers/food/condiment/milk(src) - for(var/i = 0, i < 5, i++) - new /obj/item/reagent_containers/food/condiment/soymilk(src) - for(var/i = 0, i < 2, i++) - new /obj/item/storage/fancy/egg_box(src) - -/obj/structure/closet/secure_closet/freezer/kitchen/mining - req_access = list() - -/obj/structure/closet/secure_closet/freezer/meat - name = "meat fridge" - req_access = list(ACCESS_KITCHEN) - -/obj/structure/closet/secure_closet/freezer/meat/PopulateContents() - ..() - for(var/i = 0, i < 4, i++) - new /obj/item/reagent_containers/food/snacks/meat/slab/monkey(src) - -/obj/structure/closet/secure_closet/freezer/meat/open - req_access = null - locked = FALSE - -/obj/structure/closet/secure_closet/freezer/gulag_fridge - name = "refrigerator" - -/obj/structure/closet/secure_closet/freezer/gulag_fridge/PopulateContents() - ..() - for(var/i in 1 to 3) - new /obj/item/reagent_containers/food/drinks/beer/light(src) - -/obj/structure/closet/secure_closet/freezer/fridge - name = "refrigerator" - req_access = list(ACCESS_KITCHEN) - -/obj/structure/closet/secure_closet/freezer/fridge/PopulateContents() - ..() - for(var/i = 0, i < 5, i++) - new /obj/item/reagent_containers/food/condiment/milk(src) - for(var/i = 0, i < 5, i++) - new /obj/item/reagent_containers/food/condiment/soymilk(src) - for(var/i = 0, i < 2, i++) - new /obj/item/storage/fancy/egg_box(src) - -/obj/structure/closet/secure_closet/freezer/fridge/open - req_access = null - locked = FALSE - -/obj/structure/closet/secure_closet/freezer/money - name = "freezer" - desc = "" - req_access = list(ACCESS_VAULT) - -/obj/structure/closet/secure_closet/freezer/money/PopulateContents() - ..() - for(var/i = 0, i < 3, i++) - new /obj/item/stack/spacecash/c1000(src) - for(var/i = 0, i < 5, i++) - new /obj/item/stack/spacecash/c500(src) - for(var/i = 0, i < 6, i++) - new /obj/item/stack/spacecash/c200(src) - -/obj/structure/closet/secure_closet/freezer/cream_pie - name = "cream pie closet" - desc = "" - req_access = list(ACCESS_THEATRE) - -/obj/structure/closet/secure_closet/freezer/cream_pie/PopulateContents() - ..() - new /obj/item/reagent_containers/food/snacks/pie/cream(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm deleted file mode 100644 index c554cad034..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/structure/closet/secure_closet/hydroponics - name = "botanist's locker" - req_access = list(ACCESS_HYDROPONICS) - icon_state = "hydro" - -/obj/structure/closet/secure_closet/hydroponics/PopulateContents() - ..() - new /obj/item/storage/bag/plants/portaseeder(src) - new /obj/item/plant_analyzer(src) - new /obj/item/radio/headset/headset_srv(src) - new /obj/item/cultivator(src) - new /obj/item/hatchet(src) - new /obj/item/storage/box/disks_plantgene(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm deleted file mode 100644 index f4ff834561..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ /dev/null @@ -1,109 +0,0 @@ -/obj/structure/closet/secure_closet/medical1 - name = "medicine closet" - desc = "" - icon_state = "med" - req_access = list(ACCESS_MEDICAL) - -/obj/structure/closet/secure_closet/medical1/PopulateContents() - ..() - var/static/items_inside = list( - /obj/item/reagent_containers/glass/beaker = 2, - /obj/item/reagent_containers/dropper = 2, - /obj/item/storage/belt/medical = 1, - /obj/item/storage/box/syringes = 1, - /obj/item/reagent_containers/glass/bottle/toxin = 1, - /obj/item/reagent_containers/glass/bottle/morphine = 2, - /obj/item/reagent_containers/glass/bottle/epinephrine= 3, - /obj/item/reagent_containers/glass/bottle/multiver = 3, - /obj/item/storage/box/rxglasses = 1) - generate_items_inside(items_inside,src) - -/obj/structure/closet/secure_closet/medical2 - name = "anesthetic closet" - desc = "" - req_access = list(ACCESS_SURGERY) - -/obj/structure/closet/secure_closet/medical2/PopulateContents() - ..() - for(var/i in 1 to 3) - new /obj/item/tank/internals/anesthetic(src) - for(var/i in 1 to 3) - new /obj/item/clothing/mask/breath/medical(src) - -/obj/structure/closet/secure_closet/medical3 - name = "medical doctor's locker" - req_access = list(ACCESS_SURGERY) - icon_state = "med_secure" - -/obj/structure/closet/secure_closet/medical3/PopulateContents() - ..() - new /obj/item/radio/headset/headset_med(src) - new /obj/item/defibrillator/loaded(src) - new /obj/item/clothing/gloves/color/latex/nitrile(src) - new /obj/item/storage/belt/medical(src) - new /obj/item/clothing/glasses/hud/health(src) - return - -/obj/structure/closet/secure_closet/CMO - name = "\proper chief medical officer's locker" - req_access = list(ACCESS_CMO) - icon_state = "cmo" - -/obj/structure/closet/secure_closet/CMO/PopulateContents() - ..() - new /obj/item/clothing/neck/cloak/cmo(src) - new /obj/item/clothing/suit/bio_suit/cmo(src) - new /obj/item/clothing/head/bio_hood/cmo(src) - new /obj/item/clothing/suit/toggle/labcoat/cmo(src) - new /obj/item/clothing/under/rank/medical/chief_medical_officer(src) - new /obj/item/clothing/under/rank/medical/chief_medical_officer/skirt(src) - new /obj/item/clothing/shoes/sneakers/brown (src) - new /obj/item/cartridge/cmo(src) - new /obj/item/radio/headset/heads/cmo(src) - new /obj/item/megaphone/command(src) - new /obj/item/defibrillator/compact/loaded(src) - new /obj/item/clothing/gloves/color/latex/nitrile(src) - new /obj/item/healthanalyzer/advanced(src) - new /obj/item/assembly/flash/handheld(src) - new /obj/item/reagent_containers/hypospray/CMO(src) - new /obj/item/autosurgeon/cmo(src) - new /obj/item/door_remote/chief_medical_officer(src) - new /obj/item/clothing/neck/petcollar(src) - new /obj/item/pet_carrier(src) - new /obj/item/wallframe/defib_mount(src) - new /obj/item/circuitboard/machine/techfab/department/medical(src) - new /obj/item/storage/photo_album/CMO(src) - -/obj/structure/closet/secure_closet/animal - name = "animal control" - req_access = list(ACCESS_SURGERY) - -/obj/structure/closet/secure_closet/animal/PopulateContents() - ..() - new /obj/item/assembly/signaler(src) - for(var/i in 1 to 3) - new /obj/item/electropack(src) - -/obj/structure/closet/secure_closet/chemical - name = "chemical closet" - desc = "" - req_access = list(ACCESS_CHEMISTRY) - icon_door = "chemical" - -/obj/structure/closet/secure_closet/chemical/PopulateContents() - ..() - new /obj/item/storage/box/pillbottles(src) - new /obj/item/storage/box/pillbottles(src) - new /obj/item/storage/box/medigels(src) - new /obj/item/storage/box/medigels(src) - -/obj/structure/closet/secure_closet/chemical/heisenberg //contains one of each beaker, syringe etc. - name = "advanced chemical closet" - -/obj/structure/closet/secure_closet/chemical/heisenberg/PopulateContents() - ..() - new /obj/item/reagent_containers/dropper(src) - new /obj/item/reagent_containers/dropper(src) - new /obj/item/storage/box/syringes/variety(src) - new /obj/item/storage/box/beakers/variety(src) - new /obj/item/clothing/glasses/science(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/misc.dm b/code/game/objects/structures/crates_lockers/closets/secure/misc.dm deleted file mode 100644 index 55f80fda05..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/misc.dm +++ /dev/null @@ -1,67 +0,0 @@ -/obj/structure/closet/secure_closet/ertCom - name = "emergency response team commander's locker" - desc = "" - req_access = list(ACCESS_CENT_CAPTAIN) - icon_state = "cap" - -/obj/structure/closet/secure_closet/ertCom/PopulateContents() - ..() - new /obj/item/storage/firstaid/regular(src) - new /obj/item/storage/box/handcuffs(src) - new /obj/item/aicard(src) - new /obj/item/assembly/flash/handheld(src) - if(prob(50)) - new /obj/item/ammo_box/magazine/m50(src) - new /obj/item/ammo_box/magazine/m50(src) - new /obj/item/gun/ballistic/automatic/pistol/deagle(src) - else - new /obj/item/ammo_box/a357(src) - new /obj/item/ammo_box/a357(src) - new /obj/item/gun/ballistic/revolver/mateba(src) - -/obj/structure/closet/secure_closet/ertSec - name = "emergency response team security locker" - desc = "" - req_access = list(ACCESS_CENT_SPECOPS) - icon_state = "hos" - -/obj/structure/closet/secure_closet/ertSec/PopulateContents() - ..() - new /obj/item/storage/box/flashbangs(src) - new /obj/item/storage/box/teargas(src) - new /obj/item/storage/box/flashes(src) - new /obj/item/storage/box/handcuffs(src) - new /obj/item/shield/riot/tele(src) - -/obj/structure/closet/secure_closet/ertMed - name = "emergency response team medical locker" - desc = "" - req_access = list(ACCESS_CENT_MEDICAL) - icon_state = "cmo" - -/obj/structure/closet/secure_closet/ertMed/PopulateContents() - ..() - new /obj/item/storage/firstaid/o2(src) - new /obj/item/storage/firstaid/toxin(src) - new /obj/item/storage/firstaid/fire(src) - new /obj/item/storage/firstaid/brute(src) - new /obj/item/storage/firstaid/regular(src) - new /obj/item/defibrillator/compact/combat/loaded(src) - new /mob/living/simple_animal/bot/medbot(src) - -/obj/structure/closet/secure_closet/ertEngi - name = "emergency response team engineer locker" - desc = "" - req_access = list(ACCESS_CENT_STORAGE) - icon_state = "ce" - -/obj/structure/closet/secure_closet/ertEngi/PopulateContents() - ..() - new /obj/item/stack/sheet/plasteel(src, 50) - new /obj/item/stack/sheet/metal(src, 50) - new /obj/item/stack/sheet/glass(src, 50) - new /obj/item/stack/sheet/mineral/sandbags(src, 30) - new /obj/item/clothing/shoes/magboots(src) - new /obj/item/storage/box/smart_metal_foam(src) - for(var/i in 1 to 3) - new /obj/item/rcd_ammo/large(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm deleted file mode 100644 index e391b20e24..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ /dev/null @@ -1,57 +0,0 @@ -/obj/structure/closet/secure_closet/personal - desc = "" - name = "personal closet" - req_access = list(ACCESS_ALL_PERSONAL_LOCKERS) - var/registered_name = null - -/obj/structure/closet/secure_closet/personal/PopulateContents() - ..() - if(prob(50)) - new /obj/item/storage/backpack/duffelbag(src) - if(prob(50)) - new /obj/item/storage/backpack(src) - else - new /obj/item/storage/backpack/satchel(src) - new /obj/item/radio/headset( src ) - -/obj/structure/closet/secure_closet/personal/patient - name = "patient's closet" - -/obj/structure/closet/secure_closet/personal/patient/PopulateContents() - new /obj/item/clothing/under/color/white( src ) - new /obj/item/clothing/shoes/sneakers/white( src ) - -/obj/structure/closet/secure_closet/personal/cabinet - icon_state = "cabinet" - resistance_flags = FLAMMABLE - max_integrity = 70 - open_sound = 'sound/blank.ogg' - close_sound = 'sound/blank.ogg' - open_sound_volume = 25 - close_sound_volume = 50 - -/obj/structure/closet/secure_closet/personal/cabinet/PopulateContents() - new /obj/item/storage/backpack/satchel/leather/withwallet( src ) - new /obj/item/instrument/piano_synth(src) - new /obj/item/radio/headset( src ) - -/obj/structure/closet/secure_closet/personal/attackby(obj/item/W, mob/user, params) - var/obj/item/card/id/I = W.GetID() - if(istype(I)) - if(broken) - to_chat(user, "It appears to be broken.") - return - if(!I || !I.registered_name) - return - if(allowed(user) || !registered_name || (istype(I) && (registered_name == I.registered_name))) - //they can open all lockers, or nobody owns this, or they own this locker - locked = !locked - update_icon() - - if(!registered_name) - registered_name = I.registered_name - desc = "" - else - to_chat(user, "Access Denied.") - else - return ..() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm deleted file mode 100644 index 022a2d590c..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/structure/closet/secure_closet/RD - name = "\proper research director's locker" - req_access = list(ACCESS_RD) - icon_state = "rd" - -/obj/structure/closet/secure_closet/RD/PopulateContents() - ..() - new /obj/item/clothing/neck/cloak/rd(src) - new /obj/item/clothing/suit/bio_suit/scientist(src) - new /obj/item/clothing/head/bio_hood/scientist(src) - new /obj/item/clothing/suit/toggle/labcoat(src) - new /obj/item/clothing/under/rank/rnd/research_director(src) - new /obj/item/clothing/under/rank/rnd/research_director/skirt(src) - new /obj/item/clothing/under/rank/rnd/research_director/alt(src) - new /obj/item/clothing/under/rank/rnd/research_director/alt/skirt(src) - new /obj/item/clothing/under/rank/rnd/research_director/turtleneck(src) - new /obj/item/clothing/under/rank/rnd/research_director/turtleneck/skirt(src) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/cartridge/rd(src) - new /obj/item/radio/headset/heads/rd(src) - new /obj/item/megaphone/command(src) - new /obj/item/storage/lockbox/medal/sci(src) - new /obj/item/clothing/suit/armor/reactive/teleport(src) - new /obj/item/assembly/flash/handheld(src) - new /obj/item/laser_pointer(src) - new /obj/item/door_remote/research_director(src) - new /obj/item/circuitboard/machine/techfab/department/science(src) - new /obj/item/storage/photo_album/RD(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm deleted file mode 100644 index f5d05712cf..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ /dev/null @@ -1,9 +0,0 @@ -/obj/structure/closet/secure_closet - name = "secure locker" - desc = "" - locked = TRUE - icon_state = "secure" - max_integrity = 250 - armor = list("melee" = 30, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) - secure = TRUE - damage_deflection = 20 diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm deleted file mode 100644 index e4c700d642..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ /dev/null @@ -1,334 +0,0 @@ -/obj/structure/closet/secure_closet/captains - name = "\proper captain's locker" - req_access = list(ACCESS_CAPTAIN) - icon_state = "cap" - -/obj/structure/closet/secure_closet/captains/PopulateContents() - ..() - new /obj/item/clothing/suit/hooded/wintercoat/captain(src) - new /obj/item/storage/backpack/captain(src) - new /obj/item/storage/backpack/satchel/cap(src) - new /obj/item/storage/backpack/duffelbag/captain(src) - new /obj/item/clothing/neck/cloak/cap(src) - new /obj/item/clothing/neck/petcollar(src) - new /obj/item/pet_carrier(src) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/clothing/under/rank/captain(src) - new /obj/item/clothing/under/rank/captain/skirt(src) - new /obj/item/clothing/suit/armor/vest/capcarapace(src) - new /obj/item/clothing/head/caphat(src) - new /obj/item/clothing/under/rank/captain/parade(src) - new /obj/item/clothing/suit/armor/vest/capcarapace/alt(src) - new /obj/item/clothing/head/caphat/parade(src) - new /obj/item/clothing/suit/captunic(src) - new /obj/item/clothing/head/crown/fancy(src) - new /obj/item/cartridge/captain(src) - new /obj/item/storage/box/silver_ids(src) - new /obj/item/radio/headset/heads/captain/alt(src) - new /obj/item/radio/headset/heads/captain(src) - new /obj/item/clothing/glasses/sunglasses/gar/supergar(src) - new /obj/item/clothing/gloves/color/captain(src) - new /obj/item/storage/belt/sabre(src) - new /obj/item/gun/energy/e_gun(src) - new /obj/item/door_remote/captain(src) - new /obj/item/card/id/captains_spare(src) - new /obj/item/storage/photo_album/Captain(src) - -/obj/structure/closet/secure_closet/hop - name = "\proper head of personnel's locker" - req_access = list(ACCESS_HOP) - icon_state = "hop" - -/obj/structure/closet/secure_closet/hop/PopulateContents() - ..() - new /obj/item/clothing/neck/cloak/hop(src) - new /obj/item/storage/lockbox/medal/service(src) - new /obj/item/clothing/under/rank/civilian/head_of_personnel(src) - new /obj/item/clothing/under/rank/civilian/head_of_personnel/skirt(src) - new /obj/item/clothing/head/hopcap(src) - new /obj/item/cartridge/hop(src) - new /obj/item/radio/headset/heads/hop(src) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/storage/box/ids(src) - new /obj/item/storage/box/ids(src) - new /obj/item/megaphone/command(src) - new /obj/item/clothing/suit/armor/vest/alt(src) - new /obj/item/assembly/flash/handheld(src) - new /obj/item/clothing/glasses/sunglasses(src) - new /obj/item/gun/energy/e_gun(src) - new /obj/item/clothing/neck/petcollar(src) - new /obj/item/pet_carrier(src) - new /obj/item/door_remote/civillian(src) - new /obj/item/circuitboard/machine/techfab/department/service(src) - new /obj/item/storage/photo_album/HoP(src) - -/obj/structure/closet/secure_closet/hos - name = "\proper head of security's locker" - req_access = list(ACCESS_HOS) - icon_state = "hos" - -/obj/structure/closet/secure_closet/hos/PopulateContents() - ..() - new /obj/item/clothing/neck/cloak/hos(src) - new /obj/item/cartridge/hos(src) - new /obj/item/radio/headset/heads/hos(src) - new /obj/item/clothing/under/rank/security/head_of_security/parade/female(src) - new /obj/item/clothing/under/rank/security/head_of_security/parade(src) - new /obj/item/clothing/suit/armor/vest/leather(src) - new /obj/item/clothing/suit/armor/hos(src) - new /obj/item/clothing/under/rank/security/head_of_security/skirt(src) - new /obj/item/clothing/under/rank/security/head_of_security/alt(src) - new /obj/item/clothing/under/rank/security/head_of_security/alt/skirt(src) - new /obj/item/clothing/head/HoS(src) - new /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch(src) - new /obj/item/clothing/glasses/hud/security/sunglasses/gars/supergars(src) - new /obj/item/clothing/under/rank/security/head_of_security/grey(src) - new /obj/item/storage/lockbox/medal/sec(src) - new /obj/item/megaphone/sec(src) - new /obj/item/holosign_creator/security(src) - new /obj/item/storage/lockbox/loyalty(src) - new /obj/item/clothing/mask/gas/sechailer/swat(src) - new /obj/item/storage/box/flashbangs(src) - new /obj/item/shield/riot/tele(src) - new /obj/item/storage/belt/security/full(src) - new /obj/item/gun/energy/e_gun/hos(src) - new /obj/item/pinpointer/nuke(src) - new /obj/item/circuitboard/machine/techfab/department/security(src) - new /obj/item/storage/photo_album/HoS(src) - -/obj/structure/closet/secure_closet/warden - name = "\proper warden's locker" - req_access = list(ACCESS_ARMORY) - icon_state = "warden" - -/obj/structure/closet/secure_closet/warden/PopulateContents() - ..() - new /obj/item/radio/headset/headset_sec(src) - new /obj/item/clothing/suit/armor/vest/warden(src) - new /obj/item/clothing/head/warden(src) - new /obj/item/clothing/head/warden/drill(src) - new /obj/item/clothing/head/beret/sec/navywarden(src) - new /obj/item/clothing/suit/armor/vest/warden/alt(src) - new /obj/item/clothing/under/rank/security/warden/formal(src) - new /obj/item/clothing/under/rank/security/warden/skirt(src) - new /obj/item/clothing/glasses/hud/security/sunglasses(src) - new /obj/item/holosign_creator/security(src) - new /obj/item/clothing/mask/gas/sechailer(src) - new /obj/item/storage/box/zipties(src) - new /obj/item/storage/box/flashbangs(src) - new /obj/item/storage/belt/security/full(src) - new /obj/item/flashlight/seclite(src) - new /obj/item/clothing/gloves/krav_maga/sec(src) - new /obj/item/door_remote/head_of_security(src) - new /obj/item/gun/ballistic/shotgun/automatic/combat/compact(src) - -/obj/structure/closet/secure_closet/security - name = "security officer's locker" - req_access = list(ACCESS_SECURITY) - icon_state = "sec" - -/obj/structure/closet/secure_closet/security/PopulateContents() - ..() - new /obj/item/clothing/suit/armor/vest(src) - new /obj/item/clothing/head/helmet/sec(src) - new /obj/item/radio/headset/headset_sec(src) - new /obj/item/radio/headset/headset_sec/alt(src) - new /obj/item/clothing/glasses/hud/security/sunglasses(src) - new /obj/item/flashlight/seclite(src) - -/obj/structure/closet/secure_closet/security/sec - -/obj/structure/closet/secure_closet/security/sec/PopulateContents() - ..() - new /obj/item/storage/belt/security/full(src) - -/obj/structure/closet/secure_closet/security/cargo - -/obj/structure/closet/secure_closet/security/cargo/PopulateContents() - ..() - new /obj/item/clothing/accessory/armband/cargo(src) - new /obj/item/encryptionkey/headset_cargo(src) - -/obj/structure/closet/secure_closet/security/engine - -/obj/structure/closet/secure_closet/security/engine/PopulateContents() - ..() - new /obj/item/clothing/accessory/armband/engine(src) - new /obj/item/encryptionkey/headset_eng(src) - -/obj/structure/closet/secure_closet/security/science - -/obj/structure/closet/secure_closet/security/science/PopulateContents() - ..() - new /obj/item/clothing/accessory/armband/science(src) - new /obj/item/encryptionkey/headset_sci(src) - -/obj/structure/closet/secure_closet/security/med - -/obj/structure/closet/secure_closet/security/med/PopulateContents() - ..() - new /obj/item/clothing/accessory/armband/medblue(src) - new /obj/item/encryptionkey/headset_med(src) - -/obj/structure/closet/secure_closet/detective - name = "\improper detective's cabinet" - req_access = list(ACCESS_FORENSICS_LOCKERS) - icon_state = "cabinet" - resistance_flags = FLAMMABLE - max_integrity = 70 - open_sound = 'sound/blank.ogg' - close_sound = 'sound/blank.ogg' - -/obj/structure/closet/secure_closet/detective/PopulateContents() - ..() - new /obj/item/clothing/under/rank/security/detective(src) - new /obj/item/clothing/under/rank/security/detective/skirt(src) - new /obj/item/clothing/suit/det_suit(src) - new /obj/item/clothing/head/fedora/det_hat(src) - new /obj/item/clothing/gloves/color/black(src) - new /obj/item/clothing/under/rank/security/detective/grey(src) - new /obj/item/clothing/under/rank/security/detective/grey/skirt(src) - new /obj/item/clothing/accessory/waistcoat(src) - new /obj/item/clothing/suit/det_suit/grey(src) - new /obj/item/clothing/suit/det_suit/noir(src) - new /obj/item/clothing/head/fedora(src) - new /obj/item/clothing/shoes/laceup(src) - new /obj/item/storage/box/evidence(src) - new /obj/item/radio/headset/headset_sec(src) - new /obj/item/detective_scanner(src) - new /obj/item/flashlight/seclite(src) - new /obj/item/holosign_creator/security(src) - new /obj/item/reagent_containers/spray/pepper(src) - new /obj/item/clothing/suit/armor/vest/det_suit(src) - new /obj/item/storage/belt/holster/full(src) - new /obj/item/pinpointer/crew(src) - new /obj/item/twohanded/binoculars(src) - -/obj/structure/closet/secure_closet/injection - name = "lethal injections" - req_access = list(ACCESS_HOS) - -/obj/structure/closet/secure_closet/injection/PopulateContents() - ..() - for(var/i in 1 to 5) - new /obj/item/reagent_containers/syringe/lethal/execution(src) - -/obj/structure/closet/secure_closet/brig - name = "brig locker" - req_access = list(ACCESS_BRIG) - anchored = TRUE - var/id = null - -/obj/structure/closet/secure_closet/evidence - anchored = TRUE - name = "Secure Evidence Closet" - req_access_txt = "0" - req_one_access_txt = list(ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS) - -/obj/structure/closet/secure_closet/brig/PopulateContents() - ..() - new /obj/item/clothing/under/rank/prisoner( src ) - new /obj/item/clothing/under/rank/prisoner/skirt( src ) - new /obj/item/clothing/shoes/sneakers/orange( src ) - -/obj/structure/closet/secure_closet/courtroom - name = "courtroom locker" - req_access = list(ACCESS_COURT) - -/obj/structure/closet/secure_closet/courtroom/PopulateContents() - ..() - new /obj/item/clothing/shoes/sneakers/brown(src) - for(var/i in 1 to 3) - new /obj/item/paper/fluff/jobs/security/court_judgement (src) - new /obj/item/pen (src) - new /obj/item/clothing/suit/judgerobe (src) - new /obj/item/clothing/head/powdered_wig (src) - new /obj/item/storage/briefcase(src) - -/obj/structure/closet/secure_closet/contraband/armory - anchored = TRUE - name = "Contraband Locker" - req_access = list(ACCESS_ARMORY) - -/obj/structure/closet/secure_closet/contraband/heads - anchored = TRUE - name = "Contraband Locker" - req_access = list(ACCESS_HEADS) - -/obj/structure/closet/secure_closet/armory1 - name = "armory armor locker" - req_access = list(ACCESS_ARMORY) - icon_state = "armory" - -/obj/structure/closet/secure_closet/armory1/PopulateContents() - ..() - new /obj/item/clothing/suit/hooded/ablative(src) - for(var/i in 1 to 3) - new /obj/item/clothing/suit/armor/riot(src) - for(var/i in 1 to 3) - new /obj/item/clothing/head/helmet/riot(src) - for(var/i in 1 to 3) - new /obj/item/shield/riot(src) - -/obj/structure/closet/secure_closet/armory2 - name = "armory ballistics locker" - req_access = list(ACCESS_ARMORY) - icon_state = "armory" - -/obj/structure/closet/secure_closet/armory2/PopulateContents() - ..() - new /obj/item/storage/box/firingpins(src) - for(var/i in 1 to 3) - new /obj/item/storage/box/rubbershot(src) - for(var/i in 1 to 3) - new /obj/item/gun/ballistic/shotgun/riot(src) - -/obj/structure/closet/secure_closet/armory3 - name = "armory energy gun locker" - req_access = list(ACCESS_ARMORY) - icon_state = "armory" - -/obj/structure/closet/secure_closet/armory3/PopulateContents() - ..() - new /obj/item/storage/box/firingpins(src) - new /obj/item/gun/energy/ionrifle(src) - for(var/i in 1 to 3) - new /obj/item/gun/energy/e_gun(src) - for(var/i in 1 to 3) - new /obj/item/gun/energy/laser(src) - -/obj/structure/closet/secure_closet/tac - name = "armory tac locker" - req_access = list(ACCESS_ARMORY) - icon_state = "tac" - -/obj/structure/closet/secure_closet/tac/PopulateContents() - ..() - new /obj/item/gun/ballistic/automatic/wt550(src) - new /obj/item/clothing/head/helmet/alt(src) - new /obj/item/clothing/mask/gas/sechailer(src) - new /obj/item/clothing/suit/armor/bulletproof(src) - -/obj/structure/closet/secure_closet/lethalshots - name = "shotgun lethal rounds" - req_access = list(ACCESS_ARMORY) - icon_state = "tac" - -/obj/structure/closet/secure_closet/lethalshots/PopulateContents() - ..() - for(var/i in 1 to 3) - new /obj/item/storage/box/lethalshot(src) - -/obj/structure/closet/secure_closet/labor_camp_security - name = "labor camp security locker" - req_access = list(ACCESS_SECURITY) - icon_state = "sec" - -/obj/structure/closet/secure_closet/labor_camp_security/PopulateContents() - ..() - new /obj/item/clothing/suit/armor/vest(src) - new /obj/item/clothing/head/helmet/sec(src) - new /obj/item/clothing/under/rank/security/officer(src) - new /obj/item/clothing/under/rank/security/officer/skirt(src) - new /obj/item/clothing/glasses/hud/security/sunglasses(src) - new /obj/item/flashlight/seclite(src) diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm deleted file mode 100644 index 7776847434..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ /dev/null @@ -1,120 +0,0 @@ -/obj/structure/closet/syndicate - name = "armory closet" - desc = "" - icon_state = "syndicate" - -/obj/structure/closet/syndicate/personal - desc = "" - -/obj/structure/closet/syndicate/personal/PopulateContents() - ..() - new /obj/item/clothing/under/syndicate(src) - new /obj/item/clothing/under/syndicate/skirt(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/radio/headset/syndicate(src) - new /obj/item/ammo_box/magazine/m10mm(src) - new /obj/item/storage/belt/military(src) - new /obj/item/crowbar/red(src) - new /obj/item/clothing/glasses/night(src) - -/obj/structure/closet/syndicate/nuclear - desc = "" - -/obj/structure/closet/syndicate/nuclear/PopulateContents() - for(var/i in 1 to 5) - new /obj/item/ammo_box/magazine/m10mm(src) - new /obj/item/storage/box/flashbangs(src) - new /obj/item/storage/box/teargas(src) - new /obj/item/storage/backpack/duffelbag/syndie/med(src) - new /obj/item/pda/syndicate(src) - -/obj/structure/closet/syndicate/resources - desc = "" - -/obj/structure/closet/syndicate/resources/PopulateContents() - ..() - var/common_min = 30 //Minimum amount of minerals in the stack for common minerals - var/common_max = 50 //Maximum amount of HONK in the stack for HONK common minerals - var/rare_min = 5 //Minimum HONK of HONK in the stack HONK HONK rare minerals - var/rare_max = 20 //Maximum HONK HONK HONK in the HONK for HONK rare HONK - - - var/pickednum = rand(1, 50) - - //Sad trombone - if(pickednum == 1) - var/obj/item/paper/P = new /obj/item/paper(src) - P.name = "\improper IOU" - P.info = "Sorry man, we needed the money so we sold your stash. It's ok, we'll double our money for sure this time!" - - //Metal (common ore) - if(pickednum >= 2) - new /obj/item/stack/sheet/metal(src, rand(common_min, common_max)) - - //Glass (common ore) - if(pickednum >= 5) - new /obj/item/stack/sheet/glass(src, rand(common_min, common_max)) - - //Plasteel (common ore) Because it has a million more uses then plasma - if(pickednum >= 10) - new /obj/item/stack/sheet/plasteel(src, rand(common_min, common_max)) - - //Plasma (rare ore) - if(pickednum >= 15) - new /obj/item/stack/sheet/mineral/plasma(src, rand(rare_min, rare_max)) - - //Silver (rare ore) - if(pickednum >= 20) - new /obj/item/stack/sheet/mineral/silver(src, rand(rare_min, rare_max)) - - //Gold (rare ore) - if(pickednum >= 30) - new /obj/item/stack/sheet/mineral/gold(src, rand(rare_min, rare_max)) - - //Uranium (rare ore) - if(pickednum >= 40) - new /obj/item/stack/sheet/mineral/uranium(src, rand(rare_min, rare_max)) - - //Titanium (rare ore) - if(pickednum >= 40) - new /obj/item/stack/sheet/mineral/titanium(src, rand(rare_min, rare_max)) - - //Plastitanium (rare ore) - if(pickednum >= 40) - new /obj/item/stack/sheet/mineral/plastitanium(src, rand(rare_min, rare_max)) - - //Diamond (rare HONK) - if(pickednum >= 45) - new /obj/item/stack/sheet/mineral/diamond(src, rand(rare_min, rare_max)) - - //Jetpack (You hit the jackpot!) - if(pickednum == 50) - new /obj/item/tank/jetpack/carbondioxide(src) - -/obj/structure/closet/syndicate/resources/everything - desc = "" - -/obj/structure/closet/syndicate/resources/everything/PopulateContents() - var/list/resources = list( - /obj/item/stack/sheet/metal, - /obj/item/stack/sheet/glass, - /obj/item/stack/sheet/mineral/gold, - /obj/item/stack/sheet/mineral/silver, - /obj/item/stack/sheet/mineral/plasma, - /obj/item/stack/sheet/mineral/uranium, - /obj/item/stack/sheet/mineral/diamond, - /obj/item/stack/sheet/mineral/bananium, - /obj/item/stack/sheet/plasteel, - /obj/item/stack/sheet/mineral/titanium, - /obj/item/stack/sheet/mineral/plastitanium, - /obj/item/stack/rods, - /obj/item/stack/sheet/bluespace_crystal, - /obj/item/stack/sheet/mineral/abductor, - /obj/item/stack/sheet/plastic, - /obj/item/stack/sheet/mineral/wood - ) - - for(var/i = 0, i<2, i++) - for(var/res in resources) - var/obj/item/stack/R = res - new res(src, initial(R.max_amount)) diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm deleted file mode 100644 index 319506c669..0000000000 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ /dev/null @@ -1,175 +0,0 @@ -/* Utility Closets - * Contains: - * Emergency Closet - * Fire Closet - * Tool Closet - * Radiation Closet - * Bombsuit Closet - * Hydrant - * First Aid - */ - -/* - * Emergency Closet - */ -/obj/structure/closet/emcloset - name = "emergency closet" - desc = "" - icon_state = "emergency" - -/obj/structure/closet/emcloset/anchored - anchored = TRUE - -/obj/structure/closet/emcloset/PopulateContents() - ..() - - if (prob(40)) - new /obj/item/storage/toolbox/emergency(src) - - switch (pickweight(list("small" = 40, "aid" = 25, "tank" = 20, "both" = 10, "nothing" = 4, "delete" = 1))) - if ("small") - new /obj/item/tank/internals/emergency_oxygen(src) - new /obj/item/tank/internals/emergency_oxygen(src) - new /obj/item/clothing/mask/breath(src) - new /obj/item/clothing/mask/breath(src) - - if ("aid") - new /obj/item/tank/internals/emergency_oxygen(src) - new /obj/item/storage/firstaid/o2(src) - new /obj/item/clothing/mask/breath(src) - - if ("tank") - new /obj/item/tank/internals/oxygen(src) - new /obj/item/clothing/mask/breath(src) - - if ("both") - new /obj/item/tank/internals/emergency_oxygen(src) - new /obj/item/clothing/mask/breath(src) - - if ("nothing") - // doot - - // teehee - if ("delete") - qdel(src) - -/* - * Fire Closet - */ -/obj/structure/closet/firecloset - name = "fire-safety closet" - desc = "" - icon_state = "fire" - -/obj/structure/closet/firecloset/PopulateContents() - ..() - - new /obj/item/clothing/suit/fire/firefighter(src) - new /obj/item/clothing/mask/gas(src) - new /obj/item/tank/internals/oxygen/red(src) - new /obj/item/extinguisher(src) - new /obj/item/clothing/head/hardhat/red(src) - -/obj/structure/closet/firecloset/full/PopulateContents() - new /obj/item/clothing/suit/fire/firefighter(src) - new /obj/item/clothing/mask/gas(src) - new /obj/item/flashlight(src) - new /obj/item/tank/internals/oxygen/red(src) - new /obj/item/extinguisher(src) - new /obj/item/clothing/head/hardhat/red(src) - -/* - * Tool Closet - */ -/obj/structure/closet/toolcloset - name = "tool closet" - desc = "" - icon_state = "eng" - icon_door = "eng_tool" - -/obj/structure/closet/toolcloset/PopulateContents() - ..() - if(prob(40)) - new /obj/item/clothing/suit/hazardvest(src) - if(prob(70)) - new /obj/item/flashlight(src) - if(prob(70)) - new /obj/item/screwdriver(src) - if(prob(70)) - new /obj/item/wrench(src) - if(prob(70)) - new /obj/item/weldingtool(src) - if(prob(70)) - new /obj/item/crowbar(src) - if(prob(70)) - new /obj/item/wirecutters(src) - if(prob(70)) - new /obj/item/t_scanner(src) - if(prob(20)) - new /obj/item/storage/belt/utility(src) - if(prob(30)) - new /obj/item/stack/cable_coil(src) - if(prob(30)) - new /obj/item/stack/cable_coil(src) - if(prob(30)) - new /obj/item/stack/cable_coil(src) - if(prob(20)) - new /obj/item/multitool(src) - if(prob(5)) - new /obj/item/clothing/gloves/color/yellow(src) - if(prob(40)) - new /obj/item/clothing/head/hardhat(src) - - -/* - * Radiation Closet - */ -/obj/structure/closet/radiation - name = "radiation suit closet" - desc = "" - icon_state = "eng" - icon_door = "eng_rad" - -/obj/structure/closet/radiation/PopulateContents() - ..() - new /obj/item/geiger_counter(src) - new /obj/item/clothing/suit/radiation(src) - new /obj/item/clothing/head/radiation(src) - -/* - * Bombsuit closet - */ -/obj/structure/closet/bombcloset - name = "\improper EOD closet" - desc = "" - icon_state = "bomb" - -/obj/structure/closet/bombcloset/PopulateContents() - ..() - new /obj/item/clothing/suit/bomb_suit(src) - new /obj/item/clothing/under/color/black(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/head/bomb_hood(src) - -/obj/structure/closet/bombcloset/security/PopulateContents() - new /obj/item/clothing/suit/bomb_suit/security(src) - new /obj/item/clothing/under/rank/security/officer(src) - new /obj/item/clothing/shoes/jackboots(src) - new /obj/item/clothing/head/bomb_hood/security(src) - -/obj/structure/closet/bombcloset/white/PopulateContents() - new /obj/item/clothing/suit/bomb_suit/white(src) - new /obj/item/clothing/under/color/black(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/head/bomb_hood/white(src) - -/* - * Ammunition - */ -/obj/structure/closet/ammunitionlocker - name = "ammunition locker" - -/obj/structure/closet/ammunitionlocker/PopulateContents() - ..() - for(var/i in 1 to 8) - new /obj/item/ammo_casing/shotgun/beanbag(src) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index c31f9e2121..226e003955 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -158,21 +158,6 @@ for(var/i in 1 to 3) new /obj/item/reagent_containers/blood/random(src) -/obj/structure/closet/crate/freezer/surplus_limbs - name = "surplus prosthetic limbs" - desc = "" - -/obj/structure/closet/crate/freezer/surplus_limbs/PopulateContents() - . = ..() - new /obj/item/bodypart/l_arm/robot/surplus(src) - new /obj/item/bodypart/l_arm/robot/surplus(src) - new /obj/item/bodypart/r_arm/robot/surplus(src) - new /obj/item/bodypart/r_arm/robot/surplus(src) - new /obj/item/bodypart/l_leg/robot/surplus(src) - new /obj/item/bodypart/l_leg/robot/surplus(src) - new /obj/item/bodypart/r_leg/robot/surplus(src) - new /obj/item/bodypart/r_leg/robot/surplus(src) - /obj/structure/closet/crate/radiation desc = "" name = "radiation crate" @@ -190,34 +175,11 @@ /obj/structure/closet/crate/engineering/electrical icon_state = "engi_e_crate" -/obj/structure/closet/crate/rcd - desc = "" - name = "\improper RCD crate" - icon_state = "engi_crate" - -/obj/structure/closet/crate/rcd/PopulateContents() - ..() - for(var/i in 1 to 4) - new /obj/item/rcd_ammo(src) - new /obj/item/construction/rcd(src) - /obj/structure/closet/crate/science name = "science crate" desc = "" icon_state = "scicrate" -/obj/structure/closet/crate/solarpanel_small - name = "budget solar panel crate" - icon_state = "engi_e_crate" - -/obj/structure/closet/crate/solarpanel_small/PopulateContents() - ..() - for(var/i in 1 to 13) - new /obj/item/solar_assembly(src) - new /obj/item/circuitboard/computer/solar_control(src) - new /obj/item/paper/guides/jobs/engi/solars(src) - new /obj/item/electronics/tracker(src) - /obj/structure/closet/crate/goldcrate name = "gold crate" diff --git a/code/game/objects/structures/crates_lockers/roguetown.dm b/code/game/objects/structures/crates_lockers/roguetown.dm index 52aba9f64b..331e3a66d5 100644 --- a/code/game/objects/structures/crates_lockers/roguetown.dm +++ b/code/game/objects/structures/crates_lockers/roguetown.dm @@ -40,14 +40,14 @@ /obj/item/storage/fancy/cigarettes/zig/empty=40, /obj/item/reagent_containers/powder/spice=20, /obj/item/bomb=6, - /obj/item/rogueweapon/huntingknife/idagger=33, + /obj/item/rogueweapon/knife/dagger=33, /obj/item/reagent_containers/food/snacks/produce/fyritius=10, /obj/item/clothing/suit/roguetown/armor/gambeson=33, /obj/item/clothing/suit/roguetown/armor/leather=33, /obj/item/roguestatue/gold/loot=1, /obj/item/ingot/iron=22, /obj/item/bottlemessage/ancient=22, - /obj/item/rogueweapon/huntingknife/cleaver=22, + /obj/item/rogueweapon/knife/cleaver=22, /obj/item/rogueweapon/mace=22, /obj/item/clothing/cloak/raincloak/mortus=22, /obj/item/reagent_containers/food/snacks/butter=22, diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index c36ef2775d..5db5b35a44 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -13,7 +13,6 @@ var/alert = TRUE var/open = FALSE var/openable = TRUE - var/obj/item/electronics/airlock/electronics var/start_showpiece_type = null //add type for items on display var/list/start_showpieces = list() //Takes sublists in the form of list("type" = /obj/item/bikehorn, "trophy_message" = "henk") var/trophy_message = "" @@ -31,8 +30,6 @@ update_icon() /obj/structure/displaycase/Destroy() - if(electronics) - QDEL_NULL(electronics) if(showpiece) QDEL_NULL(showpiece) return ..() @@ -64,7 +61,6 @@ dump() if(!disassembled) new /obj/item/shard( src.loc ) - trigger_alarm() qdel(src) /obj/structure/displaycase/obj_break(damage_flag) @@ -74,16 +70,8 @@ new /obj/item/shard( src.loc ) playsound(src, "shatter", 70, TRUE) update_icon() - trigger_alarm() ..() -/obj/structure/displaycase/proc/trigger_alarm() - //Activate Anti-theft - if(alert) - var/area/alarmed = get_area(src) - alarmed.burglaralert(src) - playsound(src, 'sound/blank.ogg', 50, TRUE) - /obj/structure/displaycase/update_icon() var/icon/I if(open) @@ -200,13 +188,6 @@ new /obj/item/stack/sheet/mineral/wood(get_turf(src), 5) qdel(src) - else if(istype(I, /obj/item/electronics/airlock)) - to_chat(user, "I start installing the electronics into [src]...") - I.play_tool_sound(src) - if(do_after(user, 30, target = src) && user.transferItemToLoc(I,src)) - electronics = I - to_chat(user, "I install the airlock electronics.") - else if(istype(I, /obj/item/stack/sheet/glass)) var/obj/item/stack/sheet/glass/G = I if(G.get_amount() < 10) @@ -215,31 +196,11 @@ to_chat(user, "I start adding [G] to [src]...") if(do_after(user, 20, target = src)) G.use(10) - var/obj/structure/displaycase/display = new(src.loc) - if(electronics) - electronics.forceMove(display) - display.electronics = electronics - if(electronics.one_access) - display.req_one_access = electronics.accesses - else - display.req_access = electronics.accesses + new /obj/structure/displaycase(src.loc) qdel(src) else return ..() -//The captains display case requiring specops ID access is intentional. -//The lab cage and captains display case do not spawn with electronics, which is why req_access is needed. -/obj/structure/displaycase/captain - alert = TRUE - start_showpiece_type = /obj/item/gun/energy/laser/captain - req_access = list(ACCESS_CENT_SPECOPS) - -/obj/structure/displaycase/labcage - name = "lab cage" - desc = "" - start_showpiece_type = /obj/item/clothing/mask/facehugger/lamarr - req_access = list(ACCESS_RD) - /obj/structure/displaycase/trophy name = "trophy display case" desc = "" @@ -282,15 +243,6 @@ to_chat(user, "You've already put something new in this case!") return - if(is_type_in_typecache(W, GLOB.blacklisted_cargo_types)) - to_chat(user, "The case rejects the [W]!") - return - - for(var/a in W.GetAllContents()) - if(is_type_in_typecache(a, GLOB.blacklisted_cargo_types)) - to_chat(user, "The case rejects the [W]!") - return - if(user.transferItemToLoc(W, src)) if(showpiece) diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm deleted file mode 100644 index b95572e6d3..0000000000 --- a/code/game/objects/structures/door_assembly.dm +++ /dev/null @@ -1,314 +0,0 @@ -/obj/structure/door_assembly - name = "airlock assembly" - icon = 'icons/obj/doors/airlocks/station/public.dmi' - icon_state = "construction" - var/overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' - anchored = FALSE - density = TRUE - max_integrity = 200 - var/state = AIRLOCK_ASSEMBLY_NEEDS_WIRES - var/base_name = "airlock" - var/mineral = null - var/obj/item/electronics/airlock/electronics = null - var/airlock_type = /obj/machinery/door/airlock //the type path of the airlock once completed - var/glass_type = /obj/machinery/door/airlock/glass - var/glass = 0 // 0 = glass can be installed. 1 = glass is already installed. - var/created_name = null - var/heat_proof_finished = 0 //whether to heat-proof the finished airlock - var/previous_assembly = /obj/structure/door_assembly - var/noglass = FALSE //airlocks with no glass version, also cannot be modified with sheets - var/material_type = /obj/item/stack/sheet/metal - var/material_amt = 4 - -/obj/structure/door_assembly/Initialize() - . = ..() - update_icon() - update_name() - -/obj/structure/door_assembly/examine(mob/user) - . = ..() - var/doorname = "" - if(created_name) - doorname = ", written on it is '[created_name]'" - switch(state) - if(AIRLOCK_ASSEMBLY_NEEDS_WIRES) - if(anchored) - . += "The anchoring bolts are wrenched in place, but the maintenance panel lacks wiring." - else - . += "The assembly is welded together, but the anchoring bolts are unwrenched." - if(AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS) - . += "The maintenance panel is wired, but the circuit slot is empty." - if(AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER) - . += "The circuit is connected loosely to its slot, but the maintenance panel is unscrewed and open." - if(!mineral && !glass && !noglass) - . += "There is a small paper placard on the assembly[doorname]. There are empty slots for glass windows and mineral covers." - else if(!mineral && glass && !noglass) - . += "There is a small paper placard on the assembly[doorname]. There are empty slots for mineral covers." - else if(mineral && !glass && !noglass) - . += "There is a small paper placard on the assembly[doorname]. There are empty slots for glass windows." - else - . += "There is a small paper placard on the assembly[doorname]." - -/obj/structure/door_assembly/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/pen)) - var/t = stripped_input(user, "Enter the name for the door.", name, created_name,MAX_NAME_LEN) - if(!t) - return - if(!in_range(src, usr) && loc != usr) - return - created_name = t - - else if((W.tool_behaviour == TOOL_WELDER) && (mineral || glass || !anchored )) - if(!W.tool_start_check(user, amount=0)) - return - - if(mineral) - var/obj/item/stack/sheet/mineral/mineral_path = text2path("/obj/item/stack/sheet/mineral/[mineral]") - user.visible_message("[user] welds the [mineral] plating off the airlock assembly.", "I start to weld the [mineral] plating off the airlock assembly...") - if(W.use_tool(src, user, 40, volume=50)) - to_chat(user, "I weld the [mineral] plating off.") - new mineral_path(loc, 2) - var/obj/structure/door_assembly/PA = new previous_assembly(loc) - transfer_assembly_vars(src, PA) - - else if(glass) - user.visible_message("[user] welds the glass panel out of the airlock assembly.", "I start to weld the glass panel out of the airlock assembly...") - if(W.use_tool(src, user, 40, volume=50)) - to_chat(user, "I weld the glass panel out.") - if(heat_proof_finished) - new /obj/item/stack/sheet/rglass(get_turf(src)) - heat_proof_finished = 0 - else - new /obj/item/stack/sheet/glass(get_turf(src)) - glass = 0 - else if(!anchored) - user.visible_message("[user] disassembles the airlock assembly.", \ - "I start to disassemble the airlock assembly...") - if(W.use_tool(src, user, 40, volume=50)) - to_chat(user, "I disassemble the airlock assembly.") - deconstruct(TRUE) - - else if(W.tool_behaviour == TOOL_WRENCH) - if(!anchored ) - var/door_check = 1 - for(var/obj/machinery/door/D in loc) - if(!D.sub_door) - door_check = 0 - break - - if(door_check) - user.visible_message("[user] secures the airlock assembly to the floor.", \ - "I start to secure the airlock assembly to the floor...", \ - "I hear wrenching.") - - if(W.use_tool(src, user, 40, volume=100)) - if(anchored) - return - to_chat(user, "I secure the airlock assembly.") - name = "secured airlock assembly" - setAnchored(TRUE) - else - to_chat(user, "There is another door here!") - - else - user.visible_message("[user] unsecures the airlock assembly from the floor.", \ - "I start to unsecure the airlock assembly from the floor...", \ - "I hear wrenching.") - if(W.use_tool(src, user, 40, volume=100)) - if(!anchored) - return - to_chat(user, "I unsecure the airlock assembly.") - name = "airlock assembly" - setAnchored(FALSE) - - else if(istype(W, /obj/item/stack/cable_coil) && state == AIRLOCK_ASSEMBLY_NEEDS_WIRES && anchored ) - if(!W.tool_start_check(user, amount=1)) - return - - user.visible_message("[user] wires the airlock assembly.", \ - "I start to wire the airlock assembly...") - if(W.use_tool(src, user, 40, amount=1)) - if(state != AIRLOCK_ASSEMBLY_NEEDS_WIRES) - return - state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS - to_chat(user, "I wire the airlock assembly.") - name = "wired airlock assembly" - - else if((W.tool_behaviour == TOOL_WIRECUTTER) && state == AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS ) - user.visible_message("[user] cuts the wires from the airlock assembly.", \ - "I start to cut the wires from the airlock assembly...") - - if(W.use_tool(src, user, 40, volume=100)) - if(state != AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS) - return - to_chat(user, "I cut the wires from the airlock assembly.") - new/obj/item/stack/cable_coil(get_turf(user), 1) - state = AIRLOCK_ASSEMBLY_NEEDS_WIRES - name = "secured airlock assembly" - - else if(istype(W, /obj/item/electronics/airlock) && state == AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS ) - W.play_tool_sound(src, 100) - user.visible_message("[user] installs the electronics into the airlock assembly.", \ - "I start to install electronics into the airlock assembly...") - if(do_after(user, 40, target = src)) - if( state != AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS ) - return - if(!user.transferItemToLoc(W, src)) - return - - to_chat(user, "I install the airlock electronics.") - state = AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER - name = "near finished airlock assembly" - electronics = W - - - else if((W.tool_behaviour == TOOL_CROWBAR) && state == AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER ) - user.visible_message("[user] removes the electronics from the airlock assembly.", \ - "I start to remove electronics from the airlock assembly...") - - if(W.use_tool(src, user, 40, volume=100)) - if(state != AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER) - return - to_chat(user, "I remove the airlock electronics.") - state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS - name = "wired airlock assembly" - var/obj/item/electronics/airlock/ae - if (!electronics) - ae = new/obj/item/electronics/airlock( loc ) - else - ae = electronics - electronics = null - ae.forceMove(src.loc) - - else if(istype(W, /obj/item/stack/sheet) && (!glass || !mineral)) - var/obj/item/stack/sheet/G = W - if(G) - if(G.get_amount() >= 1) - if(!noglass) - if(!glass) - if(istype(G, /obj/item/stack/sheet/rglass) || istype(G, /obj/item/stack/sheet/glass)) - playsound(src, 'sound/blank.ogg', 100, TRUE) - user.visible_message("[user] adds [G.name] to the airlock assembly.", \ - "I start to install [G.name] into the airlock assembly...") - if(do_after(user, 40, target = src)) - if(G.get_amount() < 1 || glass) - return - if(G.type == /obj/item/stack/sheet/rglass) - to_chat(user, "I install [G.name] windows into the airlock assembly.") - heat_proof_finished = 1 //reinforced glass makes the airlock heat-proof - name = "near finished heat-proofed window airlock assembly" - else - to_chat(user, "I install regular glass windows into the airlock assembly.") - name = "near finished window airlock assembly" - G.use(1) - glass = TRUE - if(!mineral) - if(istype(G, /obj/item/stack/sheet/mineral) && G.sheettype) - var/M = G.sheettype - if(G.get_amount() >= 2) - playsound(src, 'sound/blank.ogg', 100, TRUE) - user.visible_message("[user] adds [G.name] to the airlock assembly.", \ - "I start to install [G.name] into the airlock assembly...") - if(do_after(user, 40, target = src)) - if(G.get_amount() < 2 || mineral) - return - to_chat(user, "I install [M] plating into the airlock assembly.") - G.use(2) - var/mineralassembly = text2path("/obj/structure/door_assembly/door_assembly_[M]") - var/obj/structure/door_assembly/MA = new mineralassembly(loc) - transfer_assembly_vars(src, MA, TRUE) - else - to_chat(user, "I need at least two sheets add a mineral cover!") - else - to_chat(user, "I cannot add [G] to [src]!") - else - to_chat(user, "I cannot add [G] to [src]!") - - else if((W.tool_behaviour == TOOL_SCREWDRIVER) && state == AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER ) - user.visible_message("[user] finishes the airlock.", \ - "I start finishing the airlock...") - - if(W.use_tool(src, user, 40, volume=100)) - if(loc && state == AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER) - to_chat(user, "I finish the airlock.") - var/obj/machinery/door/airlock/door - if(glass) - door = new glass_type( loc ) - else - door = new airlock_type( loc ) - door.setDir(dir) - door.unres_sides = electronics.unres_sides - //door.req_access = req_access - door.electronics = electronics - door.heat_proof = heat_proof_finished - door.security_level = 0 - if(electronics.one_access) - door.req_one_access = electronics.accesses - else - door.req_access = electronics.accesses - if(created_name) - door.name = created_name - else - door.name = base_name - door.previous_airlock = previous_assembly - electronics.forceMove(door) - door.update_icon() - qdel(src) - else - return ..() - update_name() - update_icon() - -/obj/structure/door_assembly/update_icon() - cut_overlays() - if(!glass) - add_overlay(get_airlock_overlay("fill_construction", icon)) - else if(glass) - add_overlay(get_airlock_overlay("glass_construction", overlays_file)) - add_overlay(get_airlock_overlay("panel_c[state+1]", overlays_file)) - -/obj/structure/door_assembly/proc/update_name() - name = "" - switch(state) - if(AIRLOCK_ASSEMBLY_NEEDS_WIRES) - if(anchored) - name = "secured " - if(AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS) - name = "wired " - if(AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER) - name = "near finished " - name += "[heat_proof_finished ? "heat-proofed " : ""][glass ? "window " : ""][base_name] assembly" - -/obj/structure/door_assembly/proc/transfer_assembly_vars(obj/structure/door_assembly/source, obj/structure/door_assembly/target, previous = FALSE) - target.glass = source.glass - target.heat_proof_finished = source.heat_proof_finished - target.created_name = source.created_name - target.state = source.state - target.setAnchored(source.anchored) - if(previous) - target.previous_assembly = source.type - if(electronics) - target.electronics = source.electronics - source.electronics.forceMove(target) - target.update_icon() - target.update_name() - qdel(source) - -/obj/structure/door_assembly/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - var/turf/T = get_turf(src) - if(!disassembled) - material_amt = rand(2,4) - new material_type(T, material_amt) - if(glass) - if(disassembled) - if(heat_proof_finished) - new /obj/item/stack/sheet/rglass(T) - else - new /obj/item/stack/sheet/glass(T) - else - new /obj/item/shard(T) - if(mineral) - var/obj/item/stack/sheet/mineral/mineral_path = text2path("/obj/item/stack/sheet/mineral/[mineral]") - new mineral_path(T, 2) - qdel(src) diff --git a/code/game/objects/structures/door_assembly_types.dm b/code/game/objects/structures/door_assembly_types.dm deleted file mode 100644 index 405e0f7b9f..0000000000 --- a/code/game/objects/structures/door_assembly_types.dm +++ /dev/null @@ -1,253 +0,0 @@ -/obj/structure/door_assembly/door_assembly_public - name = "public airlock assembly" - icon = 'icons/obj/doors/airlocks/station2/glass.dmi' - overlays_file = 'icons/obj/doors/airlocks/station2/overlays.dmi' - glass_type = /obj/machinery/door/airlock/public/glass - airlock_type = /obj/machinery/door/airlock/public - -/obj/structure/door_assembly/door_assembly_com - name = "command airlock assembly" - icon = 'icons/obj/doors/airlocks/station/command.dmi' - base_name = "command airlock" - glass_type = /obj/machinery/door/airlock/command/glass - airlock_type = /obj/machinery/door/airlock/command - -/obj/structure/door_assembly/door_assembly_sec - name = "security airlock assembly" - icon = 'icons/obj/doors/airlocks/station/security.dmi' - base_name = "security airlock" - glass_type = /obj/machinery/door/airlock/security/glass - airlock_type = /obj/machinery/door/airlock/security - -/obj/structure/door_assembly/door_assembly_eng - name = "engineering airlock assembly" - icon = 'icons/obj/doors/airlocks/station/engineering.dmi' - base_name = "engineering airlock" - glass_type = /obj/machinery/door/airlock/engineering/glass - airlock_type = /obj/machinery/door/airlock/engineering - -/obj/structure/door_assembly/door_assembly_min - name = "mining airlock assembly" - icon = 'icons/obj/doors/airlocks/station/mining.dmi' - base_name = "mining airlock" - glass_type = /obj/machinery/door/airlock/mining/glass - airlock_type = /obj/machinery/door/airlock/mining - -/obj/structure/door_assembly/door_assembly_atmo - name = "atmospherics airlock assembly" - icon = 'icons/obj/doors/airlocks/station/atmos.dmi' - base_name = "atmospherics airlock" - glass_type = /obj/machinery/door/airlock/atmos/glass - airlock_type = /obj/machinery/door/airlock/atmos - -/obj/structure/door_assembly/door_assembly_research - name = "research airlock assembly" - icon = 'icons/obj/doors/airlocks/station/research.dmi' - base_name = "research airlock" - glass_type = /obj/machinery/door/airlock/research/glass - airlock_type = /obj/machinery/door/airlock/research - -/obj/structure/door_assembly/door_assembly_science - name = "science airlock assembly" - icon = 'icons/obj/doors/airlocks/station/science.dmi' - base_name = "science airlock" - glass_type = /obj/machinery/door/airlock/science/glass - airlock_type = /obj/machinery/door/airlock/science - -/obj/structure/door_assembly/door_assembly_med - name = "medical airlock assembly" - icon = 'icons/obj/doors/airlocks/station/medical.dmi' - base_name = "medical airlock" - glass_type = /obj/machinery/door/airlock/medical/glass - airlock_type = /obj/machinery/door/airlock/medical - -/obj/structure/door_assembly/door_assembly_mai - name = "maintenance airlock assembly" - icon = 'icons/obj/doors/airlocks/station/maintenance.dmi' - base_name = "maintenance airlock" - glass_type = /obj/machinery/door/airlock/maintenance/glass - airlock_type = /obj/machinery/door/airlock/maintenance - -/obj/structure/door_assembly/door_assembly_extmai - name = "external maintenance airlock assembly" - icon = 'icons/obj/doors/airlocks/station/maintenanceexternal.dmi' - base_name = "external maintenance airlock" - glass_type = /obj/machinery/door/airlock/maintenance/external/glass - airlock_type = /obj/machinery/door/airlock/maintenance/external - -/obj/structure/door_assembly/door_assembly_ext - name = "external airlock assembly" - icon = 'icons/obj/doors/airlocks/external/external.dmi' - base_name = "external airlock" - overlays_file = 'icons/obj/doors/airlocks/external/overlays.dmi' - glass_type = /obj/machinery/door/airlock/external/glass - airlock_type = /obj/machinery/door/airlock/external - -/obj/structure/door_assembly/door_assembly_fre - name = "freezer airlock assembly" - icon = 'icons/obj/doors/airlocks/station/freezer.dmi' - base_name = "freezer airlock" - airlock_type = /obj/machinery/door/airlock/freezer - noglass = TRUE - -/obj/structure/door_assembly/door_assembly_hatch - name = "airtight hatch assembly" - icon = 'icons/obj/doors/airlocks/hatch/centcom.dmi' - base_name = "airtight hatch" - overlays_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/hatch - noglass = TRUE - -/obj/structure/door_assembly/door_assembly_mhatch - name = "maintenance hatch assembly" - icon = 'icons/obj/doors/airlocks/hatch/maintenance.dmi' - base_name = "maintenance hatch" - overlays_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/maintenance_hatch - noglass = TRUE - -/obj/structure/door_assembly/door_assembly_highsecurity - name = "high security airlock assembly" - icon = 'icons/obj/doors/airlocks/highsec/highsec.dmi' - base_name = "high security airlock" - overlays_file = 'icons/obj/doors/airlocks/highsec/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/highsecurity - noglass = TRUE - material_type = /obj/item/stack/sheet/plasteel - material_amt = 4 - -/obj/structure/door_assembly/door_assembly_vault - name = "vault door assembly" - icon = 'icons/obj/doors/airlocks/vault/vault.dmi' - base_name = "vault door" - overlays_file = 'icons/obj/doors/airlocks/vault/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/vault - noglass = TRUE - material_type = /obj/item/stack/sheet/plasteel - material_amt = 6 - -/obj/structure/door_assembly/door_assembly_shuttle - name = "shuttle airlock assembly" - icon = 'icons/obj/doors/airlocks/shuttle/shuttle.dmi' - base_name = "shuttle airlock" - overlays_file = 'icons/obj/doors/airlocks/shuttle/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/shuttle - glass_type = /obj/machinery/door/airlock/shuttle/glass - -/obj/structure/door_assembly/door_assembly_cult - name = "cult airlock assembly" - icon = 'icons/obj/doors/airlocks/cult/runed/cult.dmi' - base_name = "cult airlock" - overlays_file = 'icons/obj/doors/airlocks/cult/runed/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/cult - glass_type = /obj/machinery/door/airlock/cult/glass - -/obj/structure/door_assembly/door_assembly_cult/unruned - icon = 'icons/obj/doors/airlocks/cult/unruned/cult.dmi' - overlays_file = 'icons/obj/doors/airlocks/cult/unruned/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/cult/unruned - glass_type = /obj/machinery/door/airlock/cult/unruned/glass - -/obj/structure/door_assembly/door_assembly_viro - name = "virology airlock assembly" - icon = 'icons/obj/doors/airlocks/station/virology.dmi' - base_name = "virology airlock" - glass_type = /obj/machinery/door/airlock/virology/glass - airlock_type = /obj/machinery/door/airlock/virology - -/obj/structure/door_assembly/door_assembly_centcom - icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi' - overlays_file = 'icons/obj/doors/airlocks/centcom/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/centcom - noglass = TRUE - -/obj/structure/door_assembly/door_assembly_grunge - icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi' - overlays_file = 'icons/obj/doors/airlocks/centcom/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/grunge - noglass = TRUE - -/obj/structure/door_assembly/door_assembly_gold - name = "gold airlock assembly" - icon = 'icons/obj/doors/airlocks/station/gold.dmi' - base_name = "gold airlock" - airlock_type = /obj/machinery/door/airlock/gold - mineral = "gold" - glass_type = /obj/machinery/door/airlock/gold/glass - -/obj/structure/door_assembly/door_assembly_silver - name = "silver airlock assembly" - icon = 'icons/obj/doors/airlocks/station/silver.dmi' - base_name = "silver airlock" - airlock_type = /obj/machinery/door/airlock/silver - mineral = "silver" - glass_type = /obj/machinery/door/airlock/silver/glass - -/obj/structure/door_assembly/door_assembly_diamond - name = "diamond airlock assembly" - icon = 'icons/obj/doors/airlocks/station/diamond.dmi' - base_name = "diamond airlock" - airlock_type = /obj/machinery/door/airlock/diamond - mineral = "diamond" - glass_type = /obj/machinery/door/airlock/diamond/glass - -/obj/structure/door_assembly/door_assembly_uranium - name = "uranium airlock assembly" - icon = 'icons/obj/doors/airlocks/station/uranium.dmi' - base_name = "uranium airlock" - airlock_type = /obj/machinery/door/airlock/uranium - mineral = "uranium" - glass_type = /obj/machinery/door/airlock/uranium/glass - -/obj/structure/door_assembly/door_assembly_plasma - name = "plasma airlock assembly" - icon = 'icons/obj/doors/airlocks/station/plasma.dmi' - base_name = "plasma airlock" - airlock_type = /obj/machinery/door/airlock/plasma - mineral = "plasma" - glass_type = /obj/machinery/door/airlock/plasma/glass - -/obj/structure/door_assembly/door_assembly_bananium - name = "bananium airlock assembly" - desc = "" - icon = 'icons/obj/doors/airlocks/station/bananium.dmi' - base_name = "bananium airlock" - airlock_type = /obj/machinery/door/airlock/bananium - mineral = "bananium" - glass_type = /obj/machinery/door/airlock/bananium/glass - -/obj/structure/door_assembly/door_assembly_sandstone - name = "sandstone airlock assembly" - icon = 'icons/obj/doors/airlocks/station/sandstone.dmi' - base_name = "sandstone airlock" - airlock_type = /obj/machinery/door/airlock/sandstone - mineral = "sandstone" - glass_type = /obj/machinery/door/airlock/sandstone/glass - -/obj/structure/door_assembly/door_assembly_titanium - name = "titanium airlock assembly" - icon = 'icons/obj/doors/airlocks/shuttle/shuttle.dmi' - base_name = "shuttle airlock" - overlays_file = 'icons/obj/doors/airlocks/shuttle/overlays.dmi' - glass_type = /obj/machinery/door/airlock/titanium/glass - airlock_type = /obj/machinery/door/airlock/titanium - mineral = "titanium" - -/obj/structure/door_assembly/door_assembly_wood - name = "wooden airlock assembly" - icon = 'icons/obj/doors/airlocks/station/wood.dmi' - base_name = "wooden airlock" - airlock_type = /obj/machinery/door/airlock/wood - mineral = "wood" - glass_type = /obj/machinery/door/airlock/wood/glass - -/obj/structure/door_assembly/door_assembly_bronze - name = "bronze airlock assembly" - icon = 'icons/obj/doors/airlocks/clockwork/pinion_airlock.dmi' - base_name = "bronze airlock" - airlock_type = /obj/machinery/door/airlock/bronze - noglass = TRUE - material_type = /obj/item/stack/tile/bronze - -/obj/structure/door_assembly/door_assembly_bronze/seethru - airlock_type = /obj/machinery/door/airlock/bronze/seethru diff --git a/code/game/objects/structures/dystation.dm b/code/game/objects/structures/dystation.dm index e1f3e89576..3d171bc2d4 100644 --- a/code/game/objects/structures/dystation.dm +++ b/code/game/objects/structures/dystation.dm @@ -1,6 +1,6 @@ -/obj/machinery/gear_painter - name = "Dye bin" - desc = "A station to give your apparel a fresh new color! Recommended to use with white items for best results." +/obj/machinery/dye_bin + name = "expensive dye bin" + desc = "Precious extracts, oils, powders, will transform your plain clothes to displays of wealth and extravagance!" icon = 'icons/roguetown/misc/structure.dmi' icon_state = "dye_bin_full" density = TRUE @@ -16,6 +16,7 @@ /obj/item/clothing/suit/roguetown/shirt/dress, /obj/item/clothing/suit/roguetown/shirt/undershirt, /obj/item/clothing/suit/roguetown/shirt/shortshirt, + /obj/item/clothing/suit/roguetown/shirt/tunic, /obj/item/clothing/under/roguetown/tights, /obj/item/clothing/cloak/raincloak, /obj/item/clothing/cloak/cape, @@ -24,9 +25,211 @@ /obj/item/clothing/head/roguetown/headband, /obj/item/clothing/head/roguetown/armingcap, /obj/item/clothing/head/roguetown/chaperon, + /obj/item/clothing/head/roguetown/cookhat, + /obj/item/clothing/neck/roguetown/coif/cloth, + /obj/item/clothing/neck/roguetown/keffiyeh, /obj/item/clothing/cloak/apron/cook, /obj/item/clothing/cloak/apron/waist, + /obj/item/storage/belt/rogue/leather/rope, + /obj/item/storage/belt/rogue/leather/cloth, + /obj/item/clothing/shoes/roguetown/simpleshoes, + /obj/item/clothing/suit/roguetown/armor/gambeson, + /obj/item/clothing/suit/roguetown/armor/gambeson/light, + /obj/item/clothing/suit/roguetown/armor/gambeson/heavy + ) + var/static/list/selectable_colors = list( + "White" ="#ffffff", + "Ash Grey" ="#999999", + "Chalk White" ="#c7c0b5", + "Cream" ="#b0ae80", + "Soot Black" ="#4b4b50", + "Dark Ink" ="#372b2b", + "Royal Black" ="#2f352f", + "Winestain Red" ="#6b3737", + "Blood Red" ="#770d0d", + "Royal Red" ="#8f3636", + "Royal Majenta" ="#822b52", + "Red Ochre" = "#6f2d28", + "Maroon" ="#672c0d", + "Salmon" ="#a56176", + "Russet" ="#733f18", + "Peasant Brown" ="#705243", + "Chestnut" ="#5f3d21", + + "Bark Brown"="#685542", + "Mud Brown" ="#685542", + "Old Leather" ="#473a30", + "Spring Green" ="#435436", + "Forest Green" ="#3f8b24", + "Bog Green" ="#58793f", + "Mage Green" ="#759259", + "Royal Teal" ="#249589", + "Berry Blue" ="#38455b", + "Pear Yellow" ="#b5b004", + "Mage Yellow" ="#d2bc2b", + "Mustard Yellow" ="#979044", + "Yellow Ochre" ="#9b7a02", + "Fyritius Orange" ="#b47011", + "Mage Orange" ="#ad5e29", + "Royal Purple" ="#865c9c", + "Plum Purple" ="#4b2265", + "Mage Blue" ="#4756d8", + "Sky Blue" ="#1b3c7a", + ) + + +/obj/machinery/dye_bin/Destroy() + inserted?.forceMove(drop_location()) + return ..() + +/obj/machinery/dye_bin/Destroy() + icon_state = "washbin_destroy" + density = FALSE + GLOB.machines.Remove(src) + if(!speed_process) + STOP_PROCESSING(SSmachines, src) + else + STOP_PROCESSING(SSfastprocess, src) + dropContents() + playsound(get_turf(src), 'sound/combat/hits/onwood/destroywalldoor.ogg', 40, TRUE, -1) + return ..() + +/obj/machinery/dye_bin/attackby(obj/item/I, mob/living/user) + if(allow_mobs && istype(I, /obj/item/clothing/head/mob_holder)) + var/obj/item/clothing/head/mob_holder/H = I + if(!user.transferItemToLoc(I, src)) + to_chat(user, "[I] is stuck to your hand!") + return + if(!QDELETED(H)) + H.release() + + if(is_type_in_list(I, allowed_types) && is_operational()) + if(inserted) + user.visible_message("[src] is already full.") + return + if(!user.transferItemToLoc(I, src)) + to_chat(user, "[I] is stuck to your hand!") + return + user.visible_message("[user] inserts [I] into [src].") + + inserted = I + else + return ..() + +/obj/machinery/dye_bin/AllowDrop() + return FALSE + +/obj/machinery/dye_bin/ui_interact(mob/user) + if( user.used_intent.type == /datum/intent/grab ) + return + if( user.used_intent.type == /datum/intent/unarmed/shove ) + return ..() + if(!is_operational()) + return ..() + user.set_machine(src) + var/list/dat = list("Dye Station Control Panel
    ") + if(!inserted) + dat += "No item inserted." + else + dat += "Item inserted: [inserted]
    " + dat += "Select new color.
    " + dat += "Color: " + dat += "Apply new dye.

    " + dat += "Bleach out the color.

    " + dat += "Remove item.

    " + + var/datum/browser/menu = new(user, "colormate","Dye Station", 400, 400, src) + menu.set_content(dat.Join("")) + menu.open() + +/obj/machinery/dye_bin/Topic(href, href_list) + if((. = ..())) + return + + add_fingerprint(usr) + + if(href_list["close"]) + usr << browse(null, "window=colormate") + return + + if(href_list["select"]) + var/choice = input(usr,"Choose your dye:","Dyes",null) as null|anything in selectable_colors + if(!choice) + return + activecolor = selectable_colors[choice] + updateUsrDialog() + + if(href_list["paint"]) + if(!inserted) + return + inserted.add_atom_colour(activecolor, FIXED_COLOUR_PRIORITY) + playsound(src, "bubbles", 50, 1) + updateUsrDialog() + + if(href_list["clear"]) + if(!inserted) + return + inserted.remove_atom_colour(FIXED_COLOUR_PRIORITY) + playsound(src, "bubbles", 50, 1) + updateUsrDialog() + + if(href_list["eject"]) + if(!inserted) + return + inserted.forceMove(drop_location()) + inserted = null + updateUsrDialog() + +/obj/machinery/dye_bin/onkick(mob/user) + if(isliving(user)) + var/mob/living/L = user + if(prob(L.STASTR * 8)) + playsound(src, 'sound/combat/hits/onwood/woodimpact (1).ogg', 100) + user.visible_message("[user] kicks over [src], ruining the contents!", \ + "I kick over [src], ruining the contents!") + var/obj/item/roguebin/I = new /obj/item/roguebin (loc) + I.kover = TRUE + I.update_icon() + qdel(src) + + else + playsound(src, 'sound/combat/hits/onwood/woodimpact (1).ogg', 100) + user.visible_message("[user] kicks [src]!", \ + "I kick [src]!") + + +/obj/machinery/simple_dye_bin + name = "simple dye bin" + desc = "A barrel with a selection of cheap things that will stain your clothes in muted colors. Ash, clods of dirt, jacksberries and swampweed provides all the colors any peasant could want!" + icon = 'icons/roguetown/misc/structure.dmi' + icon_state = "dye_bin_full" + density = TRUE + anchored = FALSE + max_integrity = 80 + attacked_sound = list('sound/combat/hits/onwood/woodimpact (1).ogg','sound/combat/hits/onwood/woodimpact (2).ogg') + var/atom/movable/inserted + var/activecolor = "#FFFFFF" + /// Allow holder'd mobs + var/allow_mobs = TRUE + var/list/allowed_types = list( + /obj/item/clothing/suit/roguetown/shirt/robe, + /obj/item/clothing/suit/roguetown/shirt/dress, + /obj/item/clothing/suit/roguetown/shirt/undershirt, + /obj/item/clothing/suit/roguetown/shirt/shortshirt, + /obj/item/clothing/suit/roguetown/shirt/tunic, + /obj/item/clothing/under/roguetown/tights, + /obj/item/clothing/cloak/raincloak, + /obj/item/clothing/cloak/cape, + /obj/item/clothing/cloak/half, + /obj/item/clothing/head/roguetown/roguehood, + /obj/item/clothing/head/roguetown/headband, + /obj/item/clothing/head/roguetown/armingcap, + /obj/item/clothing/head/roguetown/chaperon, /obj/item/clothing/head/roguetown/cookhat, + /obj/item/clothing/neck/roguetown/keffiyeh, + /obj/item/clothing/neck/roguetown/coif/cloth, + /obj/item/clothing/cloak/apron/cook, + /obj/item/clothing/cloak/apron/waist, /obj/item/storage/belt/rogue/leather/rope, /obj/item/storage/belt/rogue/leather/cloth, /obj/item/clothing/shoes/roguetown/simpleshoes, @@ -35,45 +238,34 @@ /obj/item/clothing/suit/roguetown/armor/gambeson/heavy ) var/static/list/selectable_colors = list( - "White" = "#ffffff", - "Black" = "#414143", - "Light Grey" = "#999999", - "Mage Grey" = "#6c6c6c", - "Mage Red" = "#b8252c", - "Mage Blue" = "#4756d8", - "Mage Yellow" = "#c1b144", - "Mage Green" = "#759259", - "Chalk White" = "#f4ecde", - "Dunked in Water" = "#bbbbbb", - "Cream" = "#fffdd0", - "Orange" = "#bd6606", - "Gold" = "#f9a602", - "Yarrow" = "#f0cb76", - "Yellow Weld" = "#f4c430", - "Yellow Ochre" = "#cb9d06", - "Baby Puke" = "#b5b004", - "Olive" = "#98bf64", - "Green" = "#428138", - "Dark Green" = "#264d26", - "Teal" = "#249589", - "Periwinkle Blue" = "#8f99fb", - "Woad Blue" = "#597fb9", - "Royal Purple" = "#8747b1", - "Magenta" = "#962e5c", - "Orchil" = "#66023C", - "Red Ochre" = "#913831", - "Red" = "#a32121", - "Maroon" = "#550000", - "Peasant Brown" = "#685542", - "Dirt" = "#7c6d5c", - "Chestnut" = "#613613", - "Russet" = "#7f461b" + "White" ="#ffffff", + "Ash Grey" ="#999999", + "Chalk White" ="#c7c0b5", + "Cream" ="#b0ae80", + "Soot Black" ="#4b4b50", + "Royal Black" ="#2f352f", + "Winestain Red" ="#6b3737", + "Royal Red" ="#8f3636", + "Royal Majenta" ="#822b52", + "Peasant Brown" ="#705243", + "Chestnut" ="#5f3d21", + "Bark Brown"="#685542", + "Mud Brown" ="#685542", + "Old Leather" ="#473a30", + "Spring Green" ="#435436", + "Bog Green" ="#58793f", + "Royal Teal" ="#249589", + "Berry Blue" ="#38455b", + "Pear Yellow" ="#b5b004", + "Fyritius Orange" ="#b47011", + "Royal Purple" ="#865c9c" ) -/obj/machinery/gear_painter/Destroy() + +/obj/machinery/simple_dye_bin/Destroy() inserted?.forceMove(drop_location()) return ..() -/obj/machinery/gear_painter/Destroy() +/obj/machinery/simple_dye_bin/Destroy() icon_state = "washbin_destroy" density = FALSE GLOB.machines.Remove(src) @@ -85,9 +277,20 @@ playsound(get_turf(src), 'sound/combat/hits/onwood/destroywalldoor.ogg', 40, TRUE, -1) return ..() -/obj/machinery/gear_painter/attackby(obj/item/I, mob/living/user) +/obj/machinery/simple_dye_bin/attackby(obj/item/I, mob/living/user) + if(istype(I, /obj/item/luxury_dyes)) + playsound(src, "bubbles", 50, 1) + if(do_after(user, 3 SECONDS)) + user.visible_message("[user] adds the [I].") + new /obj/machinery/dye_bin(get_turf(src.loc)) + qdel(I) + qdel(src) + if(allow_mobs && istype(I, /obj/item/clothing/head/mob_holder)) var/obj/item/clothing/head/mob_holder/H = I + if(inserted) + user.visible_message("[src] is already full.") + return if(!user.transferItemToLoc(I, src)) to_chat(user, "[I] is stuck to your hand!") return @@ -104,10 +307,11 @@ else return ..() -/obj/machinery/gear_painter/AllowDrop() + +/obj/machinery/simple_dye_bin/AllowDrop() return FALSE -/obj/machinery/gear_painter/ui_interact(mob/user) +/obj/machinery/simple_dye_bin/ui_interact(mob/user) if( user.used_intent.type == /datum/intent/grab ) return if( user.used_intent.type == /datum/intent/unarmed/shove ) @@ -130,7 +334,7 @@ menu.set_content(dat.Join("")) menu.open() -/obj/machinery/gear_painter/Topic(href, href_list) +/obj/machinery/simple_dye_bin/Topic(href, href_list) if((. = ..())) return @@ -167,3 +371,22 @@ inserted.forceMove(drop_location()) inserted = null updateUsrDialog() + + + +/obj/machinery/simple_dye_bin/onkick(mob/user) + if(isliving(user)) + var/mob/living/L = user + if(prob(L.STASTR * 8)) + playsound(src, 'sound/combat/hits/onwood/woodimpact (1).ogg', 100) + user.visible_message("[user] kicks over [src], ruining the contents!", \ + "I kick over [src], ruining the contents!") + var/obj/item/roguebin/I = new /obj/item/roguebin (loc) + I.kover = TRUE + I.update_icon() + qdel(src) + + else + playsound(src, 'sound/combat/hits/onwood/woodimpact (1).ogg', 100) + user.visible_message("[user] kicks [src]!", \ + "I kick [src]!") diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm deleted file mode 100644 index db2c54bbcd..0000000000 --- a/code/game/objects/structures/electricchair.dm +++ /dev/null @@ -1,46 +0,0 @@ -/obj/structure/chair/e_chair - name = "electric chair" - desc = "" - icon_state = "echair0" - var/obj/item/assembly/shock_kit/part = null - var/last_time = 1 - item_chair = null - -/obj/structure/chair/e_chair/Initialize() - . = ..() - add_overlay(mutable_appearance('icons/obj/chairs.dmi', "echair_over", MOB_LAYER + 1)) - -/obj/structure/chair/e_chair/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_WRENCH) - var/obj/structure/chair/C = new /obj/structure/chair(loc) - W.play_tool_sound(src) - C.setDir(dir) - part.forceMove(loc) - part.master = null - part = null - qdel(src) - -/obj/structure/chair/e_chair/proc/shock() - if(last_time + 50 > world.time) - return - last_time = world.time - - // special power handling - var/area/A = get_area(src) - if(!isarea(A)) - return - if(!A.powered(EQUIP)) - return - A.use_power(EQUIP, 5000) - - flick("echair_shock", src) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(12, 1, src) - s.start() - if(has_buckled_mobs()) - for(var/m in buckled_mobs) - var/mob/living/buckled_mob = m - buckled_mob.electrocute_act(85, src, 1) - to_chat(buckled_mob, "I feel a deep shock course through your body!") - addtimer(CALLBACK(buckled_mob, TYPE_PROC_REF(/mob/living, electrocute_act), 85, src, 1), 1) - visible_message("The electric chair went off!", "I hear a deep sharp shock!") diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 5525277ef7..a8b6f0cdf7 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -50,8 +50,6 @@ deconstruct(TRUE) return - if(iscyborg(user) || isalien(user)) - return if(istype(I, /obj/item/extinguisher)) if(!stored_extinguisher && opened) if(!user.transferItemToLoc(I, src)) @@ -72,8 +70,6 @@ . = ..() if(.) return - if(iscyborg(user) || isalien(user)) - return if(stored_extinguisher) user.put_in_hands(stored_extinguisher) to_chat(user, "I take [stored_extinguisher] from [src].") diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index e66d24fab6..24f5250797 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -284,15 +284,6 @@ walltype = /turf/closed/wall/mineral/iron canSmoothWith = list(/obj/structure/falsewall/iron, /turf/closed/wall/mineral/iron) -/obj/structure/falsewall/abductor - name = "alien wall" - desc = "" - icon = 'icons/turf/walls/shuttle_wall.dmi' - icon_state = "abductor" - mineral = /obj/item/stack/sheet/mineral/abductor - walltype = /turf/closed/wall/mineral/abductor - canSmoothWith = list(/obj/structure/falsewall/abductor, /turf/closed/wall/mineral/abductor) - /obj/structure/falsewall/titanium name = "wall" desc = "" @@ -301,7 +292,7 @@ mineral = /obj/item/stack/sheet/mineral/titanium walltype = /turf/closed/wall/mineral/titanium smooth = SMOOTH_MORE - canSmoothWith = list(/turf/closed/wall/mineral/titanium, /obj/machinery/door/airlock/shuttle, /obj/machinery/door/airlock, /obj/structure/window/shuttle, /obj/structure/shuttle/engine/heater) + canSmoothWith = list(/turf/closed/wall/mineral/titanium, /obj/structure/window/shuttle, /obj/structure/shuttle/engine/heater) /obj/structure/falsewall/plastitanium name = "wall" @@ -311,4 +302,4 @@ mineral = /obj/item/stack/sheet/mineral/plastitanium walltype = /turf/closed/wall/mineral/plastitanium smooth = SMOOTH_MORE - canSmoothWith = list(/turf/closed/wall/mineral/plastitanium, /obj/machinery/door/airlock/shuttle, /obj/machinery/door/airlock, /obj/structure/window/shuttle, /obj/structure/shuttle/engine/heater) + canSmoothWith = list(/turf/closed/wall/mineral/plastitanium, /obj/structure/window/shuttle, /obj/structure/shuttle/engine/heater) diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index 7064a16506..3b2ad3bbbe 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -23,7 +23,7 @@ return ..() /obj/structure/fireaxecabinet/attackby(obj/item/I, mob/user, params) - if(iscyborg(user) || I.tool_behaviour == TOOL_MULTITOOL) + if(I.tool_behaviour == TOOL_MULTITOOL) toggle_lock(user) else if(I.tool_behaviour == TOOL_WELDER && user.used_intent.type == INTENT_HELP && !broken) if(obj_integrity < max_integrity) @@ -100,10 +100,6 @@ /obj/structure/fireaxecabinet/attack_paw(mob/living/user) return attack_hand(user) -/obj/structure/fireaxecabinet/attack_ai(mob/user) - toggle_lock(user) - return - /obj/structure/fireaxecabinet/attack_tk(mob/user) if(locked) to_chat(user, "The [name] won't budge!") @@ -150,3 +146,80 @@ /obj/structure/fireaxecabinet/south dir = SOUTH pixel_y = 32 + + + +/* .................. The Drunken Saiga ................... */ +/obj/structure/innkeep_rack + name = "the last word " + desc = "Here, the Innkeeper keeps their final recourse to any disupte with drunken patrons." + icon = 'icons/roguetown/misc/64x32.dmi' + icon_state = "innrack" + anchored = TRUE + density = FALSE + armor = list("melee" = 50, "bullet" = 20, "laser" = 0, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50) + max_integrity = 150 + integrity_failure = 0.33 + var/obj/item/rogueweapon/mace/goden/shillelagh/heirloom + +/obj/structure/innkeep_rack/Initialize() + . = ..() + heirloom = new /obj/item/rogueweapon/mace/goden/shillelagh + update_icon() + +/obj/structure/innkeep_rack/Destroy() + if(heirloom) + QDEL_NULL(heirloom) + return ..() + +/obj/structure/innkeep_rack/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/rogueweapon/mace/goden/shillelagh) && !heirloom) + var/obj/item/rogueweapon/mace/goden/shillelagh/F = I + if(F.wielded) + to_chat(user, "Unwield the [F.name] first.") + return + if(!user.transferItemToLoc(F, src)) + return + heirloom = F + to_chat(user, "I place the [F.name] back in the [name].") + update_icon() + return + else + return ..() + +/obj/structure/innkeep_rack/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + switch(damage_type) + if(BRUTE) + playsound(loc, 'sound/blank.ogg', 90, TRUE) + if(BURN) + playsound(src.loc, 'sound/blank.ogg', 100, TRUE) +/* +/obj/structure/innkeep_rack/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) + . = ..() + if(.) + update_icon() + +/obj/structure/innkeep_rack/obj_break(damage_flag) + ..() +*/ +/obj/structure/innkeep_rack/attack_hand(mob/user) + . = ..() + if(.) + return + if(heirloom) + user.put_in_hands(heirloom) + heirloom = null + to_chat(user, "I take the club from the [name].") + src.add_fingerprint(user) + update_icon() + return + +/obj/structure/innkeep_rack/attack_paw(mob/living/user) + return attack_hand(user) + +/obj/structure/innkeep_rack/update_icon() + cut_overlays() + if(heirloom) + add_overlay("club") + + diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 52aac68ad6..50be2fb9a4 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -358,7 +358,7 @@ desc = "" icon_state = "plant-09" light_color = "#2cb2e8" - light_range = 3 + light_outer_range = 3 //a rock is flora according to where the icon file is @@ -378,6 +378,7 @@ /obj/structure/flora/rock/pile icon_state = "lavarocks" desc = "" + density = FALSE //Jungle grass diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm index 2262d3345d..d809cd76df 100644 --- a/code/game/objects/structures/fluff.dm +++ b/code/game/objects/structures/fluff.dm @@ -287,12 +287,10 @@ /obj/structure/fluff/railing/wood icon_state = "woodrailing" blade_dulling = DULLING_BASHCHOP - layer = ABOVE_MOB_LAYER /obj/structure/fluff/railing/stonehedge icon_state = "stonehedge" blade_dulling = DULLING_BASHCHOP - layer = ABOVE_MOB_LAYER /obj/structure/fluff/railing/border name = "border" @@ -368,7 +366,7 @@ density = TRUE anchored = TRUE blade_dulling = DULLING_BASHCHOP - max_integrity = 700 + max_integrity = INTEGRITY_STRONG damage_deflection = 12 integrity_failure = 0.15 dir = SOUTH @@ -392,6 +390,16 @@ /obj/structure/bars/chainlink icon_state = "chainlink" +/obj/structure/bars/alt + icon_state = "bars_alt" + plane = -3 + layer = WALL_OBJ_LAYER+0.05 + +/obj/structure/bars/weakened + desc = "Iron bars made to keep things in or out. These one looks pretty rusty." + max_integrity = INTEGRITY_POOR + color = "#edc9c9" + /* /obj/structure/bars/CheckExit(atom/movable/O, turf/target) if(istype(O) && (O.pass_flags & PASSGRILLE)) @@ -531,7 +539,7 @@ drag_slowdown = 3 /obj/structure/fluff/clock/Initialize() - soundloop = new(list(src), FALSE) + soundloop = new(src, FALSE) soundloop.start() . = ..() @@ -619,7 +627,7 @@ // . += "The last boat will leave in [round(SSshuttle.emergency.timeLeft()/600)] minutes." /obj/structure/fluff/wallclock/Initialize() - soundloop = new(list(src), FALSE) + soundloop = new(src, FALSE) soundloop.start() . = ..() @@ -848,6 +856,7 @@ icon_state = "elfs" /obj/structure/fluff/statue/pillar + name = "wooden support" icon = 'icons/roguetown/misc/structure.dmi' icon_state = "pillar" @@ -1042,7 +1051,7 @@ I = new /obj/item/clothing/head/roguetown/helmet/horned(user.loc) if(6) if(user.mind.get_skill_level(/datum/skill/combat/polearms) > 2) - I = new /obj/item/rogueweapon/spear/billhook(user.loc) + I = new /obj/item/rogueweapon/polearm/spear/billhook(user.loc) else if(user.mind.get_skill_level(/datum/skill/combat/bows) > 2) I = new /obj/item/gun/ballistic/revolver/grenadelauncher/bow/long(user.loc) else if(user.mind.get_skill_level(/datum/skill/combat/swords) > 2) @@ -1130,6 +1139,7 @@ dir = SOUTH shrine = TRUE +/* .................. Dendor Shrine ................... */ /obj/structure/fluff/psycross/crafted/shrine/dendor_volf name = "shrine to Dendor" desc = "The life force of a Volf has consecrated this holy place.
    Present several blood bait here to craft a worthy sacrifice." @@ -1140,7 +1150,151 @@ desc = "The life force of a Saiga has consecrated this holy place.
    Present jacksberries, westleach leaves, and silk grubs for crafting a worthy sacrifice." icon_state = "shrine_dendor_saiga" -/obj/structure/fluff/psycross/attackby(obj/item/W, mob/user, params) +/* .................. Malum Shrine (Dromkis revenge) ................... */ +/obj/structure/fluff/psycross/crafted/shrine/malum + name = "statue of Malum" + desc = "" + icon = 'icons/roguetown/misc/tallandwide.dmi' + icon_state = "malum" + bound_width = 64 + +/* .................. Astrata Shrine ................... */ +/obj/structure/fluff/psycross/crafted/shrine/astrata + name = "The Sun Queen" + desc = "" + icon = 'icons/roguetown/misc/tallandwide.dmi' + icon_state = "astrata" + pixel_x = -18 + +/* .................. Necra Shrine ................... */ +/obj/structure/fluff/psycross/crafted/shrine/necra + name = "The Undermaiden" + desc = "" + icon = 'icons/roguetown/misc/tallandwide.dmi' + icon_state = "necra" + pixel_x = -16 + +/* .................. Dendor Shrine ................... */ +/obj/structure/fluff/psycross/crafted/shrine/dendor + name = "The Tree Father" + desc = "" + icon = 'icons/roguetown/misc/foliagetall.dmi' + icon_state = "mystical" + pixel_x = -10 + +/* .................. Abyssor Shrine ................... */ +/obj/structure/fluff/psycross/crafted/shrine/abyssor + name = "The World Whale" + desc = "" + icon = 'icons/roguetown/misc/96x96.dmi' + icon_state = "abyssor" + bound_width = 64 + pixel_x = -25 + +/obj/structure/fluff/psycross/attackby(obj/item/W, mob/living/carbon/human/user, params) + if(user.mind) + if((user.mind.assigned_role == "Priest") || (user.mind.assigned_role == "Acolyte") && (user.patron.type == /datum/patron/divine/eora)) + + if(istype(W, /obj/item/reagent_containers/food/snacks/produce/apple)) + if(!istype(get_area(user), /area/rogue/indoors/town/church/chapel)) + to_chat(user, "I need to do this in the chapel.") + return FALSE + var/marriage + var/obj/item/reagent_containers/food/snacks/produce/apple/A = W + + //The MARRIAGE TEST BEGINS + if(A.bitten_names.len) + if(A.bitten_names.len == 2) + //Groom provides the surname that the bride will take + var/mob/living/carbon/human/thegroom + var/mob/living/carbon/human/thebride + //Did anyone get cold feet on the wedding? + for(var/mob/M in viewers(src, 7)) + testing("check [M]") + if(thegroom && thebride) + break + if(!ishuman(M)) + continue + var/mob/living/carbon/human/C = M + /* + * This is for making the first biters name + * always be applied to the groom. + * second. This seems to be the best way + * to use the least amount of variables. + */ + var/name_placement = 1 + for(var/X in A.bitten_names) + //I think that guy is dead. + if(C.stat == DEAD) + continue + //That person is not a player or afk. + if(!C.client) + continue + //Gotta get a divorce first + if(C.IsWedded()) + continue + if(C.real_name == X) + //I know this is very sloppy but its alot less code. + switch(name_placement) + if(1) + if(thegroom) + continue + thegroom = C + if(2) + if(thebride) + continue + thebride = C + testing("foundbiter [C.real_name]") + name_placement++ + + //WE FOUND THEM LETS GET THIS SHOW ON THE ROAD! + if(!thegroom || !thebride) + testing("fail22") + return + //Alright now for the boring surname formatting. + var/surname2use + var/index = findtext(thegroom.real_name, " ") + var/bridefirst + thegroom.original_name = thegroom.real_name + thebride.original_name = thebride.real_name + if(!index) + surname2use = thegroom.dna.species.random_surname() + else + /* + * This code prevents inheriting the last name of + * " of wolves" or " the wolf" + * remove this if you want "Skibbins of wolves" to + * have his bride become "Sarah of wolves". + */ + if(findtext(thegroom.real_name, " of ") || findtext(thegroom.real_name, " the ")) + surname2use = thegroom.dna.species.random_surname() + thegroom.change_name(copytext(thegroom.real_name, 1,index)) + else + surname2use = copytext(thegroom.real_name, index) + thegroom.change_name(copytext(thegroom.real_name, 1,index)) + index = findtext(thebride.real_name, " ") + if(index) + thebride.change_name(copytext(thebride.real_name, 1,index)) + bridefirst = thebride.real_name + thegroom.change_name(thegroom.real_name + surname2use) + thebride.change_name(thebride.real_name + surname2use) + thegroom.MarryTo(thebride) + thegroom.adjust_triumphs(1) + thebride.adjust_triumphs(1) + //Bite the apple first if you want to be the groom. + priority_announce("[thegroom.real_name] has married [bridefirst]!", title = "Holy Union!", sound = 'sound/misc/bell.ogg') + marriage = TRUE + qdel(A) + + if(!marriage) + playsound(src.loc, 'sound/misc/frying.ogg', 60, FALSE) + A.burn() + return + return ..() + + +/* +/obj/structure/fluff/psycross/attackby(obj/item/W, mob/living/carbon/human/user, params) if(user.mind) if(user.mind.assigned_role == "Priest") if(istype(W, /obj/item/reagent_containers/food/snacks/produce/apple)) @@ -1237,8 +1391,107 @@ if(!marriage) A.burn() return +*/ +/* + if(user.mind.assigned_role == "Acolyte" && user.patron.type == /datum/patron/divine/eora) + if(istype(W, /obj/item/reagent_containers/food/snacks/produce/apple)) + if(!istype(get_area(user), /area/rogue/indoors/town/church/chapel)) + to_chat(user, "I need to do this in the chapel.") + return FALSE + var/marriage + var/obj/item/reagent_containers/food/snacks/produce/apple/A = W + + //The MARRIAGE TEST BEGINS + if(A.bitten_names.len) + if(A.bitten_names.len == 2) + //Groom provides the surname that the bride will take + var/mob/living/carbon/human/thegroom + var/mob/living/carbon/human/thebride + //Did anyone get cold feet on the wedding? + for(var/mob/M in viewers(src, 7)) + testing("check [M]") + if(thegroom && thebride) + break + if(!ishuman(M)) + continue + var/mob/living/carbon/human/C = M + /* + * This is for making the first biters name + * always be applied to the groom. + * second. This seems to be the best way + * to use the least amount of variables. + */ + var/name_placement = 1 + for(var/X in A.bitten_names) + //I think that guy is dead. + if(C.stat == DEAD) + continue + //That person is not a player or afk. + if(!C.client) + continue + //Gotta get a divorce first + if(C.IsWedded()) + continue + if(C.real_name == X) + //I know this is very sloppy but its alot less code. + switch(name_placement) + if(1) + if(thegroom) + continue + thegroom = C + if(2) + if(thebride) + continue + thebride = C + testing("foundbiter [C.real_name]") + name_placement++ + + //WE FOUND THEM LETS GET THIS SHOW ON THE ROAD! + if(!thegroom || !thebride) + testing("fail22") + return + //Alright now for the boring surname formatting. + var/surname2use + var/index = findtext(thegroom.real_name, " ") + var/bridefirst + thegroom.original_name = thegroom.real_name + thebride.original_name = thebride.real_name + if(!index) + surname2use = thegroom.dna.species.random_surname() + else + /* + * This code prevents inheriting the last name of + * " of wolves" or " the wolf" + * remove this if you want "Skibbins of wolves" to + * have his bride become "Sarah of wolves". + */ + if(findtext(thegroom.real_name, " of ") || findtext(thegroom.real_name, " the ")) + surname2use = thegroom.dna.species.random_surname() + thegroom.change_name(copytext(thegroom.real_name, 1,index)) + else + surname2use = copytext(thegroom.real_name, index) + thegroom.change_name(copytext(thegroom.real_name, 1,index)) + index = findtext(thebride.real_name, " ") + if(index) + thebride.change_name(copytext(thebride.real_name, 1,index)) + bridefirst = thebride.real_name + thegroom.change_name(thegroom.real_name + surname2use) + thebride.change_name(thebride.real_name + surname2use) + thegroom.MarryTo(thebride) + thegroom.adjust_triumphs(1) + thebride.adjust_triumphs(1) + //Bite the apple first if you want to be the groom. + priority_announce("[thegroom.real_name] has married [bridefirst]!", title = "Holy Union!", sound = 'sound/misc/bell.ogg') + marriage = TRUE + qdel(A) + + if(!marriage) + A.burn() + return + return ..() +*/ /obj/structure/fluff/psycross/copper/Destroy() @@ -1272,6 +1525,8 @@ var/diff = power - M.confused M.confused += min(power, diff) +// =================================================================================== + //================================ /obj/structure/fluff/beach_towel diff --git a/code/game/objects/structures/fugitive_role_spawners.dm b/code/game/objects/structures/fugitive_role_spawners.dm deleted file mode 100644 index c3cd18e203..0000000000 --- a/code/game/objects/structures/fugitive_role_spawners.dm +++ /dev/null @@ -1,66 +0,0 @@ - - -/obj/effect/mob_spawn/human/fugitive - assignedrole = "Fugitive Hunter" - flavour_text = "" //the flavor text will be the backstory argument called on the antagonist's greet, see hunter.dm for details - roundstart = FALSE - death = FALSE - random = TRUE - show_flavour = FALSE - density = TRUE - var/back_story = "error" - -/obj/effect/mob_spawn/human/fugitive/Initialize(mapload) - . = ..() - notify_ghosts("Hunters are waking up looking for refugees!", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_FUGITIVE) - -/obj/effect/mob_spawn/human/fugitive/special(mob/living/new_spawn) - var/datum/antagonist/fugitive_hunter/fughunter = new - fughunter.backstory = back_story - new_spawn.mind.add_antag_datum(fughunter) - fughunter.greet() - message_admins("[ADMIN_LOOKUPFLW(new_spawn)] has been made into a Fugitive Hunter by an event.") - log_game("[key_name(new_spawn)] was spawned as a Fugitive Hunter by an event.") - -/obj/effect/mob_spawn/human/fugitive/spacepol - name = "police pod" - desc = "" - mob_name = "a spacepol officer" - flavour_text = "Justice has arrived. I am a member of the Spacepol!" - back_story = "space cop" - outfit = /datum/outfit/spacepol - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - -/obj/effect/mob_spawn/human/fugitive/russian - name = "russian pod" - flavour_text = "Ay blyat. I am a space-russian smuggler! We were mid-flight when our cargo was beamed off our ship!" - back_story = "russian" - desc = "" - mob_name = "russian" - outfit = /datum/outfit/russiancorpse/hunter - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - -/obj/effect/mob_spawn/human/fugitive/bounty - name = "bounty hunter pod" - flavour_text = "We got a new bounty on some fugitives, dead or alive." - back_story = "bounty hunters" - desc = "" - mob_name = "bounty hunter" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - -/obj/effect/mob_spawn/human/fugitive/bounty/Destroy() - var/obj/structure/fluff/empty_sleeper/S = new(drop_location()) - S.setDir(dir) - return ..() - -/obj/effect/mob_spawn/human/fugitive/bounty/armor - outfit = /datum/outfit/bountyarmor - -/obj/effect/mob_spawn/human/fugitive/bounty/hook - outfit = /datum/outfit/bountyhook - -/obj/effect/mob_spawn/human/fugitive/bounty/synth - outfit = /datum/outfit/bountysynth diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index ce3dc78e93..95d3c5883d 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -314,7 +314,6 @@ name = "Hotel Staff" uniform = /obj/item/clothing/under/misc/assistantformal shoes = /obj/item/clothing/shoes/laceup - r_pocket = /obj/item/radio/off back = /obj/item/storage/backpack implants = list(/obj/item/implant/mindshield) @@ -386,7 +385,6 @@ name = "Demonic Friend" uniform = /obj/item/clothing/under/misc/assistantformal shoes = /obj/item/clothing/shoes/laceup - r_pocket = /obj/item/radio/off back = /obj/item/storage/backpack implants = list(/obj/item/implant/mindshield) //No revolutionaries, he's MY friend. id = /obj/item/card/id @@ -405,10 +403,8 @@ uniform = /obj/item/clothing/under/syndicate shoes = /obj/item/clothing/shoes/combat gloves = /obj/item/clothing/gloves/combat - ears = /obj/item/radio/headset/syndicate/alt back = /obj/item/storage/backpack implants = list(/obj/item/implant/weapons_auth) - id = /obj/item/card/id/syndicate /datum/outfit/syndicate_empty/post_equip(mob/living/carbon/human/H) H.faction |= ROLE_SYNDICATE @@ -454,7 +450,6 @@ /datum/outfit/syndicate_empty/SBC/assault/captain name = "Syndicate Battlecruiser Captain" - l_pocket = /obj/item/melee/transforming/energy/sword/saber/red r_pocket = /obj/item/melee/classic_baton/telescopic suit = /obj/item/clothing/suit/armor/vest/capcarapace/syndicate suit_store = /obj/item/gun/ballistic/revolver/mateba @@ -482,7 +477,6 @@ shoes = /obj/item/clothing/shoes/jackboots id = /obj/item/card/id/away/old/sec r_pocket = /obj/item/restraints/handcuffs - l_pocket = /obj/item/assembly/flash/handheld assignedrole = "Ancient Crew" /obj/effect/mob_spawn/human/oldsec/Destroy() @@ -537,41 +531,3 @@ /obj/effect/mob_spawn/human/oldsci/Destroy() new/obj/structure/showcase/machinery/oldpod/used(drop_location()) return ..() - -/obj/effect/mob_spawn/human/pirate - name = "space pirate sleeper" - desc = "" - random = TRUE - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - mob_name = "a space pirate" - mob_species = /datum/species/skeleton - outfit = /datum/outfit/pirate/space - roundstart = FALSE - death = FALSE - anchored = TRUE - density = FALSE - show_flavour = FALSE //Flavour only exists for spawners menu - flavour_text = "I are a space pirate. The station refused to pay for my protection, protect the ship, siphon the credits from the station and raid it for even more loot." - assignedrole = "Space Pirate" - var/rank = "Mate" - -/obj/effect/mob_spawn/human/pirate/special(mob/living/new_spawn) - new_spawn.fully_replace_character_name(new_spawn.real_name,generate_pirate_name()) - new_spawn.mind.add_antag_datum(/datum/antagonist/pirate) - -/obj/effect/mob_spawn/human/pirate/proc/generate_pirate_name() - var/beggings = strings(PIRATE_NAMES_FILE, "beginnings") - var/endings = strings(PIRATE_NAMES_FILE, "endings") - return "[rank] [pick(beggings)][pick(endings)]" - -/obj/effect/mob_spawn/human/pirate/Destroy() - new/obj/structure/showcase/machinery/oldpod/used(drop_location()) - return ..() - -/obj/effect/mob_spawn/human/pirate/captain - rank = "Captain" - outfit = /datum/outfit/pirate/space/captain - -/obj/effect/mob_spawn/human/pirate/gunner - rank = "Gunner" diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 4b42f3bece..9ab9b6cc1a 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -29,15 +29,7 @@ /obj/structure/girder/attackby(obj/item/W, mob/user, params) add_fingerprint(user) - if(istype(W, /obj/item/gun/energy/plasmacutter)) - to_chat(user, "I start slicing apart the girder...") - if(W.use_tool(src, user, 40, volume=100)) - to_chat(user, "I slice apart the girder.") - var/obj/item/stack/sheet/metal/M = new (loc, 2) - M.add_fingerprint(user) - qdel(src) - - else if(istype(W, /obj/item/stack)) + if(istype(W, /obj/item/stack)) if(iswallturf(loc)) to_chat(user, "There is already a wall present!") return @@ -189,12 +181,6 @@ add_hiddenprint(user) - else if(istype(W, /obj/item/pipe)) - var/obj/item/pipe/P = W - if (P.pipe_type in list(0, 1, 5)) //simple pipes, simple bends, and simple manifolds. - if(!user.transferItemToLoc(P, drop_location())) - return - to_chat(user, "I fit the pipe into \the [src].") else return ..() @@ -324,12 +310,8 @@ /obj/structure/girder/cult/attackby(obj/item/W, mob/user, params) add_fingerprint(user) - if(istype(W, /obj/item/melee/cultblade/dagger) && iscultist(user)) //Cultists can demolish cult girders instantly with their tomes - user.visible_message("[user] strikes [src] with [W]!", "I demolish [src].") - new /obj/item/stack/sheet/runed_metal(drop_location(), 1) - qdel(src) - else if(W.tool_behaviour == TOOL_WELDER) + if(W.tool_behaviour == TOOL_WELDER) if(!W.tool_start_check(user, amount=0)) return @@ -366,28 +348,6 @@ new /obj/item/stack/sheet/runed_metal(drop_location(), 1) qdel(src) -/obj/structure/girder/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - switch(the_rcd.mode) - if(RCD_FLOORWALL) - return list("mode" = RCD_FLOORWALL, "delay" = 20, "cost" = 8) - if(RCD_DECONSTRUCT) - return list("mode" = RCD_DECONSTRUCT, "delay" = 20, "cost" = 13) - return FALSE - -/obj/structure/girder/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) - var/turf/T = get_turf(src) - switch(passed_mode) - if(RCD_FLOORWALL) - to_chat(user, "I finish a wall.") - T.PlaceOnTop(/turf/closed/wall) - qdel(src) - return TRUE - if(RCD_DECONSTRUCT) - to_chat(user, "I deconstruct the girder.") - qdel(src) - return TRUE - return FALSE - /obj/structure/girder/bronze name = "wall gear" desc = "" diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 2402abd6e4..a397aa4155 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -17,10 +17,6 @@ var/broken_type = /obj/structure/grille/broken rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE -/obj/structure/grille/Destroy() - update_cable_icons_on_turf(get_turf(src)) - return ..() - /obj/structure/grille/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) . = ..() update_icon() @@ -46,44 +42,6 @@ // if(!anchored) // . += "The anchoring screws are unscrewed. The rods look like they could be cut through." -/obj/structure/grille/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - switch(the_rcd.mode) - if(RCD_DECONSTRUCT) - return list("mode" = RCD_DECONSTRUCT, "delay" = 20, "cost" = 5) - if(RCD_WINDOWGRILLE) - if(the_rcd.window_type == /obj/structure/window/reinforced/fulltile) - return list("mode" = RCD_WINDOWGRILLE, "delay" = 40, "cost" = 12) - else - return list("mode" = RCD_WINDOWGRILLE, "delay" = 20, "cost" = 8) - return FALSE - -/obj/structure/grille/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) - switch(passed_mode) - if(RCD_DECONSTRUCT) - to_chat(user, "I deconstruct the grille.") - qdel(src) - return TRUE - if(RCD_WINDOWGRILLE) - if(locate(/obj/structure/window) in loc) - return FALSE - to_chat(user, "I construct the window.") - var/obj/structure/window/WD = new the_rcd.window_type(drop_location()) - WD.setAnchored(TRUE) - return TRUE - return FALSE - -/obj/structure/grille/Bumped(atom/movable/AM) - if(!ismob(AM)) - return - var/mob/M = AM - shock(M, 70) - -/obj/structure/grille/attack_animal(mob/user) - . = ..() - if(!.) - return - if(!shock(user, 70)) - take_damage(rand(5,10), BRUTE, "melee", 1) /obj/structure/grille/attack_paw(mob/user) return attack_hand(user) @@ -91,11 +49,6 @@ /obj/structure/grille/hulk_damage() return 60 -/obj/structure/grille/attack_hulk(mob/living/carbon/human/user) - if(shock(user, 70)) - return - . = ..() - /obj/structure/grille/attack_hand(mob/living/user) . = ..() if(.) @@ -104,15 +57,6 @@ user.do_attack_animation(src, ATTACK_EFFECT_KICK) user.visible_message("[user] hits [src].", null, null, COMBAT_MESSAGE_RANGE) log_combat(user, src, "hit") - if(!shock(user, 70)) - take_damage(rand(5,10), BRUTE, "melee", 1) - -/obj/structure/grille/attack_alien(mob/living/user) - user.do_attack_animation(src) - user.changeNext_move(CLICK_CD_MELEE) - user.visible_message("[user] mangles [src].", null, null, COMBAT_MESSAGE_RANGE) - if(!shock(user, 70)) - take_damage(20, BRUTE, "melee", 1) /obj/structure/grille/CanPass(atom/movable/mover, turf/target) @@ -134,25 +78,22 @@ user.changeNext_move(CLICK_CD_MELEE) add_fingerprint(user) if(W.tool_behaviour == TOOL_WIRECUTTER) - if(!shock(user, 100)) - W.play_tool_sound(src, 100) - deconstruct() + W.play_tool_sound(src, 100) + deconstruct() else if((W.tool_behaviour == TOOL_SCREWDRIVER) && (isturf(loc) || anchored)) - if(!shock(user, 90)) - W.play_tool_sound(src, 100) - setAnchored(!anchored) - user.visible_message("[user] [anchored ? "fastens" : "unfastens"] [src].", \ - "I [anchored ? "fasten [src] to" : "unfasten [src] from"] the floor.") - return + W.play_tool_sound(src, 100) + setAnchored(!anchored) + user.visible_message("[user] [anchored ? "fastens" : "unfastens"] [src].", \ + "I [anchored ? "fasten [src] to" : "unfasten [src] from"] the floor.") + return else if(istype(W, /obj/item/stack/rods) && broken) var/obj/item/stack/rods/R = W - if(!shock(user, 90)) - user.visible_message("[user] rebuilds the broken grille.", \ - "I rebuild the broken grille.") - new grille_type(src.loc) - R.use(1) - qdel(src) - return + user.visible_message("[user] rebuilds the broken grille.", \ + "I rebuild the broken grille.") + new grille_type(src.loc) + R.use(1) + qdel(src) + return //window placing begin else if(is_glass_sheet(W)) @@ -196,7 +137,7 @@ return //window placing end - else if(istype(W, /obj/item/shard) || !shock(user, 70)) + else if(istype(W, /obj/item/shard)) return ..() /obj/structure/grille/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) @@ -227,27 +168,6 @@ ..() -// shock user with probability prb (if all connections & power are working) -// returns 1 if shocked, 0 otherwise - -/obj/structure/grille/proc/shock(mob/user, prb) - if(!anchored || broken) // anchored/broken grilles are never connected - return FALSE - if(!prob(prb)) - return FALSE - if(!in_range(src, user))//To prevent TK and mech users from getting shocked - return FALSE - var/turf/T = get_turf(src) - var/obj/structure/cable/C = T.get_cable_node() - if(C) - if(electrocute_mob(user, C, src, 1, TRUE)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() - return TRUE - else - return FALSE - return FALSE /obj/structure/grille/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(!broken) @@ -255,19 +175,6 @@ take_damage(1, BURN, 0, 0) ..() -/obj/structure/grille/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) - if(isobj(AM)) - if(prob(50) && anchored && !broken) - var/obj/O = AM - if(O.throwforce != 0)//don't want to let people spam tesla bolts, this way it will break after time - var/turf/T = get_turf(src) - var/obj/structure/cable/C = T.get_cable_node() - if(C) - playsound(src, 'sound/blank.ogg', 100, TRUE, extrarange = 5) - tesla_zap(src, 3, C.newavail() * 0.01, TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE | TESLA_MOB_STUN | TESLA_ALLOW_DUPLICATES) //Zap for 1/100 of the amount of power. At a million watts in the grid, it will be as powerful as a tesla revolver shot. - C.add_delayedload(C.newavail() * 0.0375) // you can gain up to 3.5 via the 4x upgrades power is halved by the pole so thats 2x then 1X then .5X for 3.5x the 3 bounces shock. - return ..() - /obj/structure/grille/get_dumping_location(datum/component/storage/source,mob/user) return null diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm index d6f5eb7540..ca284ec46e 100644 --- a/code/game/objects/structures/guncase.dm +++ b/code/game/objects/structures/guncase.dm @@ -35,8 +35,6 @@ add_overlay("[icon_state]_door") /obj/structure/guncase/attackby(obj/item/I, mob/user, params) - if(iscyborg(user) || isalien(user)) - return if(istype(I, gun_category) && open) if(LAZYLEN(contents) < capacity) if(!user.transferItemToLoc(I, src)) @@ -57,8 +55,6 @@ . = ..() if(.) return - if(iscyborg(user) || isalien(user)) - return if(contents.len && open) ShowWindow(user) else @@ -104,10 +100,3 @@ desc = "" case_type = "shotgun" gun_category = /obj/item/gun/ballistic/shotgun - -/obj/structure/guncase/ecase - name = "energy gun locker" - desc = "" - icon_state = "ecase" - case_type = "egun" - gun_category = /obj/item/gun/energy/e_gun diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm deleted file mode 100644 index d697f54bac..0000000000 --- a/code/game/objects/structures/holosign.dm +++ /dev/null @@ -1,191 +0,0 @@ - -//holographic signs and barriers - -/obj/structure/holosign - name = "holo sign" - icon = 'icons/effects/effects.dmi' - anchored = TRUE - max_integrity = 1 - armor = list("melee" = 0, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20) - var/obj/item/holosign_creator/projector - -/obj/structure/holosign/New(loc, source_projector) - if(source_projector) - projector = source_projector - projector.signs += src - ..() - -/obj/structure/holosign/Initialize() - . = ..() - alpha = 0 - SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, plane, dir, add_appearance_flags = RESET_ALPHA) //you see mobs under it, but you hit them like they are above it - -/obj/structure/holosign/Destroy() - if(projector) - projector.signs -= src - projector = null - return ..() - -/obj/structure/holosign/attack_hand(mob/living/user) - . = ..() - if(.) - return - user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) - user.changeNext_move(CLICK_CD_MELEE) - take_damage(5 , BRUTE, "melee", 1) - -/obj/structure/holosign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - playsound(loc, 'sound/blank.ogg', 80, TRUE) - if(BURN) - playsound(loc, 'sound/blank.ogg', 80, TRUE) - -/obj/structure/holosign/wetsign - name = "wet floor sign" - desc = "" - icon = 'icons/effects/effects.dmi' - icon_state = "holosign" - -/obj/structure/holosign/barrier - name = "holobarrier" - desc = "" - icon_state = "holosign_sec" - pass_flags = LETPASSTHROW - density = TRUE - max_integrity = 20 - var/allow_walk = TRUE //can we pass through it on walk intent - -/obj/structure/holosign/barrier/CanPass(atom/movable/mover, turf/target) - if(!density) - return TRUE - if(mover.pass_flags & (PASSGLASS|PASSTABLE|PASSGRILLE)) - return TRUE - if(iscarbon(mover)) - var/mob/living/carbon/C = mover - if(C.stat) // Lets not prevent dragging unconscious/dead people. - return TRUE - if(allow_walk && C.m_intent == MOVE_INTENT_WALK) - return TRUE - -/obj/structure/holosign/barrier/wetsign - name = "wet floor holobarrier" - desc = "" - icon = 'icons/effects/effects.dmi' - icon_state = "holosign" - -/obj/structure/holosign/barrier/wetsign/CanPass(atom/movable/mover, turf/target) - if(iscarbon(mover)) - var/mob/living/carbon/C = mover - if(C.stat) // Lets not prevent dragging unconscious/dead people. - return TRUE - if(allow_walk && C.m_intent != MOVE_INTENT_WALK) - return FALSE - return TRUE - -/obj/structure/holosign/barrier/engineering - icon_state = "holosign_engi" - rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE - rad_insulation = RAD_LIGHT_INSULATION - -/obj/structure/holosign/barrier/atmos - name = "holofirelock" - desc = "" - icon_state = "holo_firelock" - density = FALSE - anchored = TRUE - CanAtmosPass = ATMOS_PASS_NO - alpha = 150 - rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE - rad_insulation = RAD_LIGHT_INSULATION - -/obj/structure/holosign/barrier/atmos/Initialize() - . = ..() - air_update_turf(TRUE) - -/obj/structure/holosign/barrier/cyborg - name = "Energy Field" - desc = "" - density = TRUE - max_integrity = 10 - allow_walk = FALSE - -/obj/structure/holosign/barrier/cyborg/bullet_act(obj/projectile/P) - take_damage((P.damage / 5) , BRUTE, "melee", 1) //Doesn't really matter what damage flag it is. - if(istype(P, /obj/projectile/energy/electrode)) - take_damage(10, BRUTE, "melee", 1) //Tasers aren't harmful. - if(istype(P, /obj/projectile/beam/disabler)) - take_damage(5, BRUTE, "melee", 1) //Disablers aren't harmful. - return BULLET_ACT_HIT - -/obj/structure/holosign/barrier/medical - name = "\improper PENLITE holobarrier" - desc = "" - icon_state = "holo_medical" - alpha = 125 //lazy :) - var/force_allaccess = FALSE - var/buzzcd = 0 - -/obj/structure/holosign/barrier/medical/examine(mob/user) - . = ..() - . += "The biometric scanners are [force_allaccess ? "off" : "on"]." - -/obj/structure/holosign/barrier/medical/CanPass(atom/movable/mover, turf/target) - icon_state = "holo_medical" - if(force_allaccess) - return TRUE - if(ishuman(mover)) - var/mob/living/carbon/human/sickboi = mover - var/threat = sickboi.check_virus() - if(get_disease_severity_value(threat) > get_disease_severity_value(DISEASE_SEVERITY_MINOR)) - if(buzzcd < world.time) - playsound(get_turf(src),'sound/blank.ogg',65,TRUE,4) - buzzcd = (world.time + 60) - icon_state = "holo_medical-deny" - return FALSE - else - return TRUE //nice or benign diseases! - return TRUE - -/obj/structure/holosign/barrier/medical/attack_hand(mob/living/user) - if(CanPass(user) && user.used_intent.type == INTENT_HELP) - force_allaccess = !force_allaccess - to_chat(user, "I [force_allaccess ? "deactivate" : "activate"] the biometric scanners.") //warning spans because you can make the station sick! - else - return ..() - -/obj/structure/holosign/barrier/cyborg/hacked - name = "Charged Energy Field" - desc = "" - max_integrity = 20 - var/shockcd = 0 - -/obj/structure/holosign/barrier/cyborg/hacked/bullet_act(obj/projectile/P) - take_damage(P.damage, BRUTE, "melee", 1) //Yeah no this doesn't get projectile resistance. - return BULLET_ACT_HIT - -/obj/structure/holosign/barrier/cyborg/hacked/proc/cooldown() - shockcd = FALSE - -/obj/structure/holosign/barrier/cyborg/hacked/attack_hand(mob/living/user) - . = ..() - if(.) - return - if(!shockcd) - if(ismob(user)) - var/mob/living/M = user - M.electrocute_act(15,"Energy Barrier", flags = SHOCK_NOGLOVES) - shockcd = TRUE - addtimer(CALLBACK(src, PROC_REF(cooldown)), 5) - -/obj/structure/holosign/barrier/cyborg/hacked/Bumped(atom/movable/AM) - if(shockcd) - return - - if(!ismob(AM)) - return - - var/mob/living/M = AM - M.electrocute_act(15,"Energy Barrier", flags = SHOCK_NOGLOVES) - shockcd = TRUE - addtimer(CALLBACK(src, PROC_REF(cooldown)), 5) diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 388840807c..cb53099c1e 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -1,5 +1,5 @@ //////Kitchen Spike -#define VIABLE_MOB_CHECK(X) (isliving(X) && !issilicon(X) && !isbot(X)) +#define VIABLE_MOB_CHECK(X) (isliving(X)) /obj/structure/kitchenspike_frame name = "meatspike frame" diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm index 551eafb126..5f1b48969e 100644 --- a/code/game/objects/structures/ladders.dm +++ b/code/game/objects/structures/ladders.dm @@ -133,10 +133,6 @@ /obj/structure/ladder/attackby(obj/item/W, mob/user, params) return use(user) -/obj/structure/ladder/attack_robot(mob/living/silicon/robot/R) - if(R.Adjacent(src)) - return use(R) - //ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/structure/ladder/attack_ghost(mob/dead/observer/user) use(user, TRUE) diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index f84fdab98d..001c0d4b22 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -48,23 +48,7 @@ new /obj/item/stack/rods(get_turf(src), number_of_rods) qdel(src) -/obj/structure/lattice/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - if(the_rcd.mode == RCD_FLOORWALL) - return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 2) - -/obj/structure/lattice/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) - if(passed_mode == RCD_FLOORWALL) - to_chat(user, "I build a floor.") - var/turf/T = src.loc - if(isspaceturf(T)) - T.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) - qdel(src) - return TRUE - return FALSE - -/obj/structure/lattice/singularity_pull(S, current_size) - if(current_size >= STAGE_FOUR) - deconstruct() +/obj/structure/lattice/singularity_pull() /obj/structure/lattice/catwalk name = "catwalk" @@ -78,15 +62,3 @@ /obj/structure/lattice/catwalk/deconstruction_hints(mob/user) return "The supporting rods look like they could be cut." - -/obj/structure/lattice/catwalk/Move() - var/turf/T = loc - for(var/obj/structure/cable/C in T) - C.deconstruct() - ..() - -/obj/structure/lattice/catwalk/deconstruct() - var/turf/T = loc - for(var/obj/structure/cable/C in T) - C.deconstruct() - ..() diff --git a/code/game/objects/structures/lavaland/necropolis_tendril.dm b/code/game/objects/structures/lavaland/necropolis_tendril.dm index 1870862cea..7ab2be35e4 100644 --- a/code/game/objects/structures/lavaland/necropolis_tendril.dm +++ b/code/game/objects/structures/lavaland/necropolis_tendril.dm @@ -38,7 +38,6 @@ GLOBAL_LIST_INIT(tendrils, list()) /obj/structure/spawner/lavaland/deconstruct(disassembled) new /obj/effect/collapse(loc) - new /obj/structure/closet/crate/necropolis/tendril(loc) return ..() diff --git a/code/game/objects/structures/mannequin.dm b/code/game/objects/structures/mannequin.dm index 3e8454fdd3..cb4a6cdd96 100644 --- a/code/game/objects/structures/mannequin.dm +++ b/code/game/objects/structures/mannequin.dm @@ -393,7 +393,7 @@ var/obj/item/clothing/under/C = worn_thing fitting = C.fitted - var/added_overlays = worn_thing.build_worn_icon(default_layer = clothing_layer, default_icon_file = overlay_icon, isinhands = FALSE, femaleuniform = fitting, coom = is_female) + var/added_overlays = worn_thing.build_worn_icon(default_layer = clothing_layer, default_icon_file = overlay_icon, isinhands = FALSE, femaleuniform = fitting, femicon = is_female) //Cloaks refuse to be shown behind the mannequin unless they are applied to the underlays. if(clothing_layer >= CLOAK_BEHIND_LAYER) underlays += added_overlays diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index a6f083be9e..dc30f85db3 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -14,8 +14,6 @@ integrity_failure = 0.5 armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 50, "acid" = 50) CanAtmosPass = ATMOS_PASS_DENSITY - rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE - rad_insulation = RAD_MEDIUM_INSULATION var/ridethrough = FALSE @@ -26,7 +24,6 @@ var/openSound = 'sound/blank.ogg' var/closeSound = 'sound/blank.ogg' - var/sheetType = /obj/item/stack/sheet/metal //what we're made of var/sheetAmount = 7 //how much we drop when deconstructed var/windowed = FALSE @@ -50,6 +47,12 @@ damage_deflection = 10 + var/repairable = FALSE + var/repair_state = 0 + var/obj/item/repair_cost_first = null + var/obj/item/repair_cost_second = null + var/repair_skill = null + /obj/structure/mineral_door/onkick(mob/user) if(isSwitchingStates) return @@ -168,11 +171,7 @@ user.visible_message(span_warning("The deadite smashes through [src]!")) return if(locked) - playsound(src, rattlesound, 90) - var/oldx = pixel_x - animate(src, pixel_x = oldx+1, time = 0.5) - animate(pixel_x = oldx-1, time = 0.5) - animate(pixel_x = oldx, time = 0.5) + door_rattle() return if(TryToSwitchState(AM)) if(swing_closed) @@ -184,13 +183,6 @@ addtimer(CALLBACK(src, PROC_REF(Close), FALSE), 25) -/obj/structure/mineral_door/attack_ai(mob/user) //those aren't machinery, they're just big fucking slabs of a mineral - if(isAI(user)) //so the AI can't open it - return - else if(iscyborg(user)) //but cyborgs can - if(get_dist(user,src) <= 1) //not remotely though - return TryToSwitchState(user) - /obj/structure/mineral_door/attack_paw(mob/user) return attack_hand(user) @@ -243,8 +235,6 @@ SwitchState() else SwitchState() - else if(ismecha(user)) - SwitchState() return TRUE /obj/structure/mineral_door/proc/SwitchState(silent = FALSE) @@ -294,17 +284,101 @@ /obj/structure/mineral_door/update_icon() icon_state = "[base_state][door_opened ? "open":""]" +/obj/structure/mineral_door/proc/door_rattle() + playsound(src, rattlesound, 100) + var/oldx = pixel_x + animate(src, pixel_x = oldx+1, time = 0.5) + animate(pixel_x = oldx-1, time = 0.5) + animate(pixel_x = oldx, time = 0.5) + +/obj/structure/mineral_door/examine(mob/user) + . = ..() + if(repairable) + var/obj/cast_repair_cost_first = repair_cost_first + var/obj/cast_repair_cost_second = repair_cost_second + if((repair_state == 0) && (obj_integrity < max_integrity)) + . += span_notice("A [initial(cast_repair_cost_first.name)] can be used to repair it.") + if(brokenstate) + . += span_notice("An additional [initial(cast_repair_cost_second.name)] is needed to finish repairs.") + if(repair_state == 1) + . += span_notice("An additional [initial(cast_repair_cost_second.name)] is needed to finish repairs.") + /obj/structure/mineral_door/attackby(obj/item/I, mob/user) + user.changeNext_move(CLICK_CD_FAST) if(istype(I, /obj/item/roguekey) || istype(I, /obj/item/keyring)) + if(!locked) + to_chat(user, span_warning("It won't turn this way. Try turning to the right.")) + door_rattle() + return trykeylock(I, user) -// else if(user.used_intent.type != INTENT_HARM) -// return attack_hand(user) if(istype(I, /obj/item/lockpick)) trypicklock(I, user) + else + if(repairable && (user.mind.get_skill_level(repair_skill) > 0) && ((istype(I, repair_cost_first)) || (istype(I, repair_cost_second)))) // At least 1 skill level needed + repairdoor(I,user) + else + return ..() + +/obj/structure/mineral_door/attack_right(mob/user) + user.changeNext_move(CLICK_CD_FAST) + var/obj/item = user.get_active_held_item() + if(istype(item, /obj/item/roguekey) || istype(item, /obj/item/keyring)) + if(locked) + to_chat(user, span_warning("It won't turn this way. Try turning to the left.")) + door_rattle() + return + trykeylock(item, user) + return else return ..() -/obj/structure/mineral_door/proc/trykeylock(obj/item/I, mob/user) +/obj/structure/mineral_door/proc/repairdoor(obj/item/I, mob/user) + if(brokenstate) + switch(repair_state) + if(0) + if(istype(I, repair_cost_first)) + user.visible_message(span_notice("[user] starts repairing [src]."), \ + span_notice("I start repairing [src].")) + playsound(user, 'sound/misc/wood_saw.ogg', 100, TRUE) + if(do_after(user, (300 / user.mind.get_skill_level(repair_skill)), target = src)) // 1 skill = 30 secs, 2 skill = 15 secs etc. + qdel(I) + playsound(user, 'sound/misc/wood_saw.ogg', 100, TRUE) + repair_state = 1 + var/obj/cast_repair_cost_second = repair_cost_second + to_chat(user, span_notice("An additional [initial(cast_repair_cost_second.name)] is needed to finish the job.")) + if(1) + if(istype(I, repair_cost_second)) + user.visible_message(span_notice("[user] starts repairing [src]."), \ + span_notice("I start repairing [src].")) + playsound(user, 'sound/misc/wood_saw.ogg', 100, TRUE) + if(do_after(user, (300 / user.mind.get_skill_level(repair_skill)), target = src)) // 1 skill = 30 secs, 2 skill = 15 secs etc. + qdel(I) + playsound(user, 'sound/misc/wood_saw.ogg', 100, TRUE) + icon_state = "[base_state]" + density = TRUE + opacity = TRUE + brokenstate = FALSE + obj_broken = FALSE + obj_integrity = max_integrity + repair_state = 0 + user.visible_message(span_notice("[user] repaired [src]."), \ + span_notice("I repaired [src].")) + else + if(obj_integrity < max_integrity && istype(I, repair_cost_first)) + to_chat(user, span_warning("[obj_integrity]")) + user.visible_message(span_notice("[user] starts repairing [src]."), \ + span_notice("I start repairing [src].")) + playsound(user, 'sound/misc/wood_saw.ogg', 100, TRUE) + if(do_after(user, (300 / user.mind.get_skill_level(repair_skill)), target = src)) // 1 skill = 30 secs, 2 skill = 15 secs etc. + qdel(I) + playsound(user, 'sound/misc/wood_saw.ogg', 100, TRUE) + obj_integrity = obj_integrity + (max_integrity/2) + if(obj_integrity > max_integrity) + obj_integrity = max_integrity + user.visible_message(span_notice("[user] repaired [src]."), \ + span_notice("I repaired [src].")) + +/obj/structure/mineral_door/proc/trykeylock(obj/item/I, mob/user, is_right = FALSE) if(door_opened || isSwitchingStates) return if(!keylock) @@ -326,23 +400,15 @@ break else if(user.cmode) - playsound(src, rattlesound, 100) - var/oldx = pixel_x - animate(src, pixel_x = oldx+1, time = 0.5) - animate(pixel_x = oldx-1, time = 0.5) - animate(pixel_x = oldx, time = 0.5) + door_rattle() return else var/obj/item/roguekey/K = I if(K.lockhash == lockhash) - lock_toggle(user) + lock_toggle(user, is_right) return else - playsound(src, rattlesound, 100) - var/oldx = pixel_x - animate(src, pixel_x = oldx+1, time = 0.5) - animate(pixel_x = oldx-1, time = 0.5) - animate(pixel_x = oldx, time = 0.5) + door_rattle() return /obj/structure/mineral_door/proc/trypicklock(obj/item/I, mob/user) @@ -399,12 +465,12 @@ continue else playsound(loc, 'sound/items/pickbad.ogg', 40, TRUE) - I.take_damage(1, BRUTE, "melee") + I.take_damage(1, BRUTE, "blunt") to_chat(user, span_warning("Clack.")) continue return -/obj/structure/mineral_door/proc/lock_toggle(mob/user) +/obj/structure/mineral_door/proc/lock_toggle(mob/user, is_right = FALSE) if(isSwitchingStates || door_opened) return if(locked) @@ -418,6 +484,7 @@ playsound(src, locksound, 100) locked = 1 + /obj/structure/mineral_door/setAnchored(anchorvalue) //called in default_unfasten_wrench() chain . = ..() set_opacity(anchored ? !door_opened : FALSE) @@ -487,151 +554,6 @@ user.visible_message(span_notice("[user] pried [src] into pieces!"), span_notice("I pried apart [src]!")) deconstruct(TRUE) - -/////////////////////// END TOOL OVERRIDES /////////////////////// -/* - -/obj/structure/mineral_door/deconstruct(disassembled = TRUE) -// var/turf/T = get_turf(src) -// if(disassembled) -// new sheetType(T, sheetAmount) -// else -// new sheetType(T, max(sheetAmount - 2, 1)) -// qdel(src) -*/ - - -/obj/structure/mineral_door/iron - name = "iron door" - max_integrity = 300 - -/obj/structure/mineral_door/silver - name = "silver door" - icon_state = "silver" - sheetType = /obj/item/stack/sheet/mineral/silver - max_integrity = 300 - rad_insulation = RAD_HEAVY_INSULATION - -/obj/structure/mineral_door/gold - name = "gold door" - icon_state = "gold" - sheetType = /obj/item/stack/sheet/mineral/gold - rad_insulation = RAD_HEAVY_INSULATION - -/obj/structure/mineral_door/uranium - name = "uranium door" - icon_state = "uranium" - sheetType = /obj/item/stack/sheet/mineral/uranium - max_integrity = 300 - light_range = 2 - -/obj/structure/mineral_door/uranium/ComponentInitialize() - return - -/obj/structure/mineral_door/sandstone - name = "sandstone door" - icon_state = "sandstone" - sheetType = /obj/item/stack/sheet/mineral/sandstone - max_integrity = 100 - -/obj/structure/mineral_door/transparent - opacity = FALSE - rad_insulation = RAD_VERY_LIGHT_INSULATION - -/obj/structure/mineral_door/transparent/Close() - ..() - set_opacity(FALSE) - -/obj/structure/mineral_door/transparent/plasma - name = "plasma door" - icon_state = "plasma" - sheetType = /obj/item/stack/sheet/mineral/plasma - -/obj/structure/mineral_door/transparent/plasma/ComponentInitialize() - return - -/obj/structure/mineral_door/transparent/plasma/welder_act(mob/living/user, obj/item/I) - return - -/obj/structure/mineral_door/transparent/plasma/attackby(obj/item/W, mob/user, params) - if(W.get_temperature()) - var/turf/T = get_turf(src) - message_admins("Plasma mineral door ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]") - log_game("Plasma mineral door ignited by [key_name(user)] in [AREACOORD(T)]") - TemperatureAct() - else - return ..() - -/obj/structure/mineral_door/transparent/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 300) - TemperatureAct() - -/obj/structure/mineral_door/transparent/plasma/proc/TemperatureAct() - atmos_spawn_air("plasma=500;TEMP=1000") - deconstruct(FALSE) - -/obj/structure/mineral_door/transparent/diamond - name = "diamond door" - icon_state = "diamond" - sheetType = /obj/item/stack/sheet/mineral/diamond - max_integrity = 1000 - rad_insulation = RAD_EXTREME_INSULATION - - - - -/obj/structure/mineral_door/paperframe - name = "paper frame door" - icon_state = "paperframe" - openSound = 'sound/foley/doors/creak.ogg' - closeSound = 'sound/foley/doors/shut.ogg' - sheetType = /obj/item/stack/sheet/paperframes - sheetAmount = 3 - resistance_flags = FLAMMABLE - max_integrity = 20 - -/obj/structure/mineral_door/paperframe/Initialize() - . = ..() - queue_smooth_neighbors(src) - -/obj/structure/mineral_door/paperframe/examine(mob/user) - . = ..() - if(obj_integrity < max_integrity) - . += span_info("It looks a bit damaged, you may be able to fix it with some paper.") - -/obj/structure/mineral_door/paperframe/pickaxe_door(mob/living/user, obj/item/I) - return - -/obj/structure/mineral_door/paperframe/welder_act(mob/living/user, obj/item/I) - return - -/obj/structure/mineral_door/paperframe/crowbar_act(mob/living/user, obj/item/I) - return crowbar_door(user, I) - -/obj/structure/mineral_door/paperframe/attackby(obj/item/I, mob/living/user) - if(I.get_temperature()) //BURN IT ALL DOWN JIM - fire_act(I.get_temperature()) - return - - if((user.used_intent.type != INTENT_HARM) && istype(I, /obj/item/paper) && (obj_integrity < max_integrity)) - user.visible_message(span_notice("[user] starts to patch the holes in [src]."), span_notice("I start patching some of the holes in [src]!")) - if(do_after(user, 20, TRUE, src)) - obj_integrity = min(obj_integrity+4,max_integrity) - qdel(I) - user.visible_message(span_notice("[user] patches some of the holes in [src]."), span_notice("I patch some of the holes in [src]!")) - return TRUE - - return ..() - -/obj/structure/mineral_door/paperframe/ComponentInitialize() - return - -/obj/structure/mineral_door/paperframe/Destroy() - queue_smooth_neighbors(src) - return ..() - - - //ROGUEDOOR /obj/structure/mineral_door/wood @@ -640,7 +562,6 @@ icon_state = "woodhandle" openSound = list('sound/foley/doors/creak.ogg') closeSound = 'sound/foley/doors/shut.ogg' - sheetType = null resistance_flags = FLAMMABLE max_integrity = 1000 damage_deflection = 12 @@ -651,6 +572,11 @@ break_sound = 'sound/combat/hits/onwood/destroywalldoor.ogg' attacked_sound = list('sound/combat/hits/onwood/woodimpact (1).ogg','sound/combat/hits/onwood/woodimpact (2).ogg') var/over_state = "woodover" + repairable = TRUE + repair_cost_first = /obj/item/grown/log/tree/small + repair_cost_second = /obj/item/grown/log/tree/small + repair_skill = /datum/skill/craft/carpentry +// metalizer_result = /obj/structure/mineral_door/wood/donjon TO DO removed for simplicity, re-enable perhaps in future /obj/structure/mineral_door/wood/Initialize() if(icon_state =="woodhandle") @@ -697,7 +623,6 @@ icon_state = "woodhandle" openSound = 'sound/foley/doors/creak.ogg' closeSound = 'sound/foley/doors/shut.ogg' - sheetType = null resistance_flags = FLAMMABLE max_integrity = 1000 damage_deflection = 12 @@ -710,6 +635,10 @@ blade_dulling = DULLING_BASHCHOP break_sound = 'sound/combat/hits/onwood/destroywalldoor.ogg' attacked_sound = list('sound/combat/hits/onwood/woodimpact (1).ogg','sound/combat/hits/onwood/woodimpact (2).ogg') + repairable = TRUE + repair_cost_first = /obj/item/grown/log/tree/small + repair_cost_second = /obj/item/grown/log/tree/small + repair_skill = /datum/skill/craft/carpentry /obj/structure/mineral_door/wood/window opacity = FALSE @@ -745,6 +674,15 @@ icon_state = base_state /obj/structure/mineral_door/wood/deadbolt/attack_right(mob/user) + user.changeNext_move(CLICK_CD_FAST) + var/obj/item = user.get_active_held_item() + if(istype(item, /obj/item/roguekey) || istype(item, /obj/item/keyring)) + if(locked) + to_chat(user, span_warning("It won't turn this way. Try turning to the left.")) + door_rattle() + return + trykeylock(item, user) + return if(door_opened || isSwitchingStates) return if(lockbroken) @@ -771,6 +709,8 @@ unlocksound = 'sound/foley/doors/lockmetal.ogg' rattlesound = 'sound/foley/doors/lockrattlemetal.ogg' attacked_sound = list("sound/combat/hits/onmetal/metalimpact (1).ogg", "sound/combat/hits/onmetal/metalimpact (2).ogg") + repair_cost_second = /obj/item/ingot/iron + repair_skill = /datum/skill/craft/carpentry /obj/structure/mineral_door/wood/donjon/stone desc = "" @@ -780,8 +720,20 @@ max_integrity = 1000 over_state = "stoneopen" attacked_sound = list('sound/combat/hits/onwood/woodimpact (1).ogg','sound/combat/hits/onwood/woodimpact (2).ogg') + repair_cost_first = /obj/item/natural/stone + repair_cost_second = /obj/item/natural/stone + repair_skill = /datum/skill/craft/masonry /obj/structure/mineral_door/wood/donjon/stone/attack_right(mob/user) + user.changeNext_move(CLICK_CD_FAST) + var/obj/item = user.get_active_held_item() + if(istype(item, /obj/item/roguekey) || istype(item, /obj/item/keyring)) + if(locked) + to_chat(user, span_warning("It won't turn this way. Try turning to the left.")) + door_rattle() + return + trykeylock(item, user) + return return /obj/structure/mineral_door/wood/donjon/stone/view_toggle(mob/user) @@ -793,6 +745,15 @@ ..() /obj/structure/mineral_door/wood/donjon/attack_right(mob/user) + user.changeNext_move(CLICK_CD_FAST) + var/obj/item = user.get_active_held_item() + if(istype(item, /obj/item/roguekey) || istype(item, /obj/item/keyring)) + if(locked) + to_chat(user, span_warning("It won't turn this way. Try turning to the left.")) + door_rattle() + return + trykeylock(item, user) + return if(door_opened || isSwitchingStates) return if(brokenstate) @@ -817,6 +778,7 @@ playsound(src, 'sound/foley/doors/windowup.ogg', 100, FALSE) + /obj/structure/mineral_door/bars name = "iron door" desc = "" @@ -833,13 +795,15 @@ opacity = FALSE windowed = TRUE keylock = TRUE - sheetType = null locksound = 'sound/foley/doors/lock.ogg' unlocksound = 'sound/foley/doors/unlock.ogg' rattlesound = 'sound/foley/doors/lockrattlemetal.ogg' attacked_sound = list("sound/combat/hits/onmetal/metalimpact (1).ogg", "sound/combat/hits/onmetal/metalimpact (2).ogg") ridethrough = TRUE swing_closed = FALSE + repair_cost_first = /obj/item/ingot/iron + repair_cost_second = /obj/item/ingot/iron + repair_skill = /datum/skill/craft/blacksmithing /obj/structure/mineral_door/bars/Initialize() . = ..() diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index caf2563d4d..c9fc57481e 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -310,3 +310,7 @@ /obj/structure/mirror/magic/proc/curse(mob/living/user) return + + +/obj/structure/mirror/alt + icon_state = "mirror_alt" diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 45c34588f6..839e363105 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -77,10 +77,6 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an close() add_fingerprint(user) -/obj/structure/bodycontainer/attack_robot(mob/user) - if(!user.Adjacent(src)) - return - return attack_hand(user) /obj/structure/bodycontainer/attackby(obj/P, mob/user, params) add_fingerprint(user) @@ -168,7 +164,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an /obj/structure/bodycontainer/morgue/AltClick(mob/user) ..() - if(!user.canUseTopic(src, !issilicon(user))) + if(!user.canUseTopic(src, TRUE)) return beeper = !beeper to_chat(user, "I turn the speaker function [beeper ? "on" : "off"].") @@ -212,10 +208,6 @@ GLOBAL_LIST_EMPTY(crematoriums) dir = SOUTH var/id = 1 -/obj/structure/bodycontainer/crematorium/attack_robot(mob/user) //Borgs can't use crematoriums without help - to_chat(user, "[src] is locked against you.") - return - /obj/structure/bodycontainer/crematorium/Destroy() GLOB.crematoriums.Remove(src) return ..() diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index fa64ac7109..54edb23218 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -58,9 +58,6 @@ /obj/structure/plasticflaps/CanAStarPass(ID, to_dir, caller) if(isliving(caller)) - if(isbot(caller)) - return TRUE - var/mob/living/M = caller if(!M.ventcrawler && M.mob_size != MOB_SIZE_TINY) return FALSE @@ -87,9 +84,7 @@ else if(isliving(A)) // You Shall Not Pass! var/mob/living/M = A - if(isbot(A)) //Bots understand the secrets - return TRUE - if(M.buckled && istype(M.buckled, /mob/living/simple_animal/bot/mulebot)) // mulebot passenger gets a free pass. + if(M.buckled) // mulebot passenger gets a free pass. return TRUE if((M.mobility_flags & MOBILITY_STAND) && !M.ventcrawler && M.mob_size != MOB_SIZE_TINY) //If your not laying down, or a ventcrawler or a small creature, no pass. return FALSE diff --git a/code/game/objects/structures/roguetown/musicbox.dm b/code/game/objects/structures/roguetown/musicbox.dm index 27912f2192..ce9fc520e5 100644 --- a/code/game/objects/structures/roguetown/musicbox.dm +++ b/code/game/objects/structures/roguetown/musicbox.dm @@ -7,6 +7,7 @@ extra_range = 5 persistent_loop = TRUE var/stress2give = /datum/stressevent/music + channel = CHANNEL_MUSIC /datum/looping_sound/musloop/on_hear_sound(mob/M) . = ..() @@ -36,7 +37,7 @@ var/list/music_tracks /obj/structure/roguemachine/musicbox/Initialize() - soundloop = new(list(src), FALSE) + soundloop = new(src, FALSE) music_tracks = MUSIC_TAV . = ..() diff --git a/code/game/objects/structures/roguetown/rogueflora.dm b/code/game/objects/structures/roguetown/rogueflora.dm index 2bd58a78fc..8788568ff0 100644 --- a/code/game/objects/structures/roguetown/rogueflora.dm +++ b/code/game/objects/structures/roguetown/rogueflora.dm @@ -83,7 +83,7 @@ /obj/structure/flora/roguetree/evil/Initialize() . = ..() icon_state = "wv[rand(1,2)]" - soundloop = new(list(src), FALSE) + soundloop = new(src, FALSE) soundloop.start() /obj/structure/flora/roguetree/evil/Destroy() @@ -287,9 +287,9 @@ /obj/structure/flora/roguegrass/bush/Initialize() if(prob(88)) - bushtype = pickweight(list(/obj/item/reagent_containers/food/snacks/produce/berries/rogue=5, - /obj/item/reagent_containers/food/snacks/produce/berries/rogue/poison=3, - /obj/item/reagent_containers/food/snacks/produce/rogue/pipeweed=2)) + bushtype = pickweight(list(/obj/item/reagent_containers/food/snacks/produce/jacksberry=5, + /obj/item/reagent_containers/food/snacks/produce/jacksberry/poison=3, + /obj/item/reagent_containers/food/snacks/produce/westleach=2)) loot_replenish() pixel_x += rand(-3,3) return ..() @@ -496,7 +496,7 @@ /obj/structure/flora/roguegrass/swampweed/Initialize() if(prob(88)) - bushtype3 = pickweight(list(/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed = 1)) + bushtype3 = pickweight(list(/obj/item/reagent_containers/food/snacks/produce/swampweed = 1)) loot_replenish3() pixel_x += rand(-3,3) return ..() @@ -505,7 +505,7 @@ if(bushtype3) looty3 += bushtype3 if(prob(66)) - looty3 += /obj/item/reagent_containers/food/snacks/produce/rogue/swampweed + looty3 += /obj/item/reagent_containers/food/snacks/produce/swampweed @@ -800,14 +800,14 @@ if(prob(30)) tobacco = TRUE berries = FALSE - goodie = /obj/item/reagent_containers/food/snacks/produce/rogue/pipeweed + goodie = /obj/item/reagent_containers/food/snacks/produce/westleach else tobacco = FALSE berries = TRUE if(prob(60)) - goodie = /obj/item/reagent_containers/food/snacks/produce/berries/rogue + goodie = /obj/item/reagent_containers/food/snacks/produce/jacksberry else - goodie = /obj/item/reagent_containers/food/snacks/produce/berries/rogue/poison + goodie = /obj/item/reagent_containers/food/snacks/produce/jacksberry/poison pixel_x += rand(-3,3) if(prob(10)) trashie = /obj/item/natural/fibers @@ -902,8 +902,8 @@ desc = "These large bushes are known to be well-liked by silkworms who make their nests in their dark depths." icon = 'icons/roguetown/mob/monster/Trolls.dmi' icon_state = "Trolls" - pixel_x = -15 - pixel_y = -7 + pixel_x = -16 + pixel_y = -1 silky = TRUE @@ -912,7 +912,7 @@ desc = "Squeeze hard to force out the silk string." icon = 'icons/roguetown/items/natural.dmi' icon_state = "grub" - color = CLOTHING_YELLOW + color = CLOTHING_MUSTARD_YELLOW list_reagents = list(/datum/reagent/consumable/soup/stew/gross = 1) /obj/item/reagent_containers/food/snacks/grub/silk/attack_self(mob/living/user) diff --git a/code/game/objects/structures/roguewindow.dm b/code/game/objects/structures/roguewindow.dm index 2c86712d1a..8a8aed1152 100644 --- a/code/game/objects/structures/roguewindow.dm +++ b/code/game/objects/structures/roguewindow.dm @@ -1,9 +1,8 @@ /obj/structure/roguewindow name = "window" - desc = "A window of simple paned glass." + desc = "Wrong window type! You shouldn't be seeing this." icon = 'icons/roguetown/misc/structure.dmi' - icon_state = "window-solid" layer = TABLE_LAYER density = TRUE anchored = TRUE @@ -21,6 +20,12 @@ break_sound = "glassbreak" destroy_sound = 'sound/combat/hits/onwood/destroywalldoor.ogg' + var/repairable = TRUE + var/repair_state = 0 + var/obj/item/repair_cost_first = /obj/item/natural/glass + var/obj/item/repair_cost_second = /obj/item/grown/log/tree/small + var/repair_skill = /datum/skill/craft/masonry // i copypasted this code from the repairable doors and now it's got defines in the base type + /obj/structure/roguewindow/Initialize() update_icon() ..() @@ -31,24 +36,99 @@ return icon_state = "[base_state]" +/obj/structure/roguewindow/OnCrafted(dirin) + dir = turn(dirin, 180) + lockdir = dir + +/obj/structure/roguewindow/examine(mob/user) + . = ..() + if(repairable) + var/obj/cast_repair_cost_first = repair_cost_first + var/obj/cast_repair_cost_second = repair_cost_second + if((repair_state == 0) && (obj_integrity < max_integrity)) + . += span_notice("A [initial(cast_repair_cost_first.name)] can be used to repair it.") + if(brokenstate) + . += span_notice("An additional [initial(cast_repair_cost_second.name)] is needed to finish repairs.") + if(repair_state == 1) + . += span_notice("An additional [initial(cast_repair_cost_second.name)] is needed to finish repairs.") + +/obj/structure/roguewindow/attackby(obj/item/I, mob/user) + if(repairable && (user.mind.get_skill_level(repair_skill) > 0) && ((istype(I, repair_cost_first)) || (istype(I, repair_cost_second)))) // At least 1 skill level needed + repairwindow(I,user) + else + return ..() + +/obj/structure/roguewindow/proc/repairwindow(obj/item/I, mob/user) + if(brokenstate) + switch(repair_state) + if(0) + if(istype(I, repair_cost_first)) + user.visible_message(span_notice("[user] starts repairing [src]."), \ + span_notice("I start repairing [src].")) + playsound(user, 'sound/misc/wood_saw.ogg', 100, TRUE) + if(do_after(user, (300 / user.mind.get_skill_level(repair_skill)), target = src)) // 1 skill = 30 secs, 2 skill = 15 secs etc. + qdel(I) + playsound(user, 'sound/misc/wood_saw.ogg', 100, TRUE) + repair_state = 1 + var/obj/cast_repair_cost_second = repair_cost_second + to_chat(user, span_notice("An additional [initial(cast_repair_cost_second.name)] is needed to finish the job.")) + if(1) + if(istype(I, repair_cost_second)) + user.visible_message(span_notice("[user] starts repairing [src]."), \ + span_notice("I start repairing [src].")) + playsound(user, 'sound/misc/wood_saw.ogg', 100, TRUE) + if(do_after(user, (300 / user.mind.get_skill_level(repair_skill)), target = src)) // 1 skill = 30 secs, 2 skill = 15 secs etc. + qdel(I) + playsound(user, 'sound/misc/wood_saw.ogg', 100, TRUE) + icon_state = "[base_state]" + density = TRUE + opacity = TRUE + brokenstate = FALSE + obj_broken = FALSE + obj_integrity = max_integrity + repair_state = 0 + user.visible_message(span_notice("[user] repaired [src]."), \ + span_notice("I repaired [src].")) + else + if(obj_integrity < max_integrity && istype(I, repair_cost_first)) + to_chat(user, span_warning("[obj_integrity]")) + user.visible_message(span_notice("[user] starts repairing [src]."), \ + span_notice("I start repairing [src].")) + playsound(user, 'sound/misc/wood_saw.ogg', 100, TRUE) + if(do_after(user, (300 / user.mind.get_skill_level(repair_skill)), target = src)) // 1 skill = 30 secs, 2 skill = 15 secs etc. + qdel(I) + playsound(user, 'sound/misc/wood_saw.ogg', 100, TRUE) + obj_integrity = obj_integrity + (max_integrity/2) + if(obj_integrity > max_integrity) + obj_integrity = max_integrity + user.visible_message(span_notice("[user] repaired [src]."), \ + span_notice("I repaired [src].")) + /obj/structure/roguewindow/attack_ghost(mob/dead/observer/user) // lets ghosts click on windows to transport across density = FALSE . = step(user,get_dir(user,src.loc)) density = TRUE +/obj/structure/roguewindow/solid + desc = "A window of simple paned glass." + icon_state = "window-solid" + integrity_failure = 0.5 + /obj/structure/roguewindow/stained + desc = "A stained-glass window filigreed in silver." icon_state = "stained-silver" base_state = "stained-silver" - opacity = TRUE max_integrity = 100 integrity_failure = 0.75 + repair_cost_first = /obj/item/natural/glass + repair_cost_second = /obj/item/natural/stone /obj/structure/roguewindow/openclose + desc = "It opens and closes." icon_state = "woodwindowdir" base_state = "woodwindow" - opacity = TRUE max_integrity = 100 - integrity_failure = 0.9 + integrity_failure = 0.5 /obj/structure/roguewindow/openclose/Initialize() lockdir = dir @@ -96,18 +176,16 @@ else to_chat(user, "The window doesn't close from this side.") -/obj/structure/roguewindow/proc/open_up(mob/user) +/obj/structure/roguewindow/openclose/proc/open_up(mob/user) visible_message("[user] opens [src].") playsound(src, 'sound/foley/doors/windowup.ogg', 100, FALSE) climbable = TRUE - opacity = FALSE update_icon() -/obj/structure/roguewindow/proc/close_up(mob/user) +/obj/structure/roguewindow/openclose/proc/close_up(mob/user) visible_message("[user] closes [src].") playsound(src, 'sound/foley/doors/windowdown.ogg', 100, FALSE) climbable = FALSE - opacity = TRUE update_icon() /obj/structure/roguewindow/CanPass(atom/movable/mover, turf/target) @@ -129,10 +207,9 @@ return !density return ..() -/obj/structure/roguewindow/proc/force_open() +/obj/structure/roguewindow/openclose/proc/force_open() playsound(src, 'sound/foley/doors/windowup.ogg', 100, FALSE) climbable = TRUE - opacity = FALSE update_icon() /obj/structure/roguewindow/attackby(obj/item/W, mob/user, params) @@ -160,9 +237,8 @@ /obj/structure/roguewindow/obj_break(damage_flag) if(!brokenstate) attacked_sound = list('sound/combat/hits/onwood/woodimpact (1).ogg','sound/combat/hits/onwood/woodimpact (2).ogg') - new /obj/item/shard (get_turf(src)) + new /obj/item/natural/glass/shard (get_turf(src)) climbable = TRUE brokenstate = TRUE - opacity = FALSE update_icon() ..() diff --git a/code/game/objects/structures/shower.dm b/code/game/objects/structures/shower.dm index 599fce0323..73ff54f41f 100644 --- a/code/game/objects/structures/shower.dm +++ b/code/game/objects/structures/shower.dm @@ -20,7 +20,7 @@ create_reagents(reaction_volume) reagents.add_reagent(reagent_id, reaction_volume) - soundloop = new(list(src), FALSE) + soundloop = new(src, FALSE) /obj/machinery/shower/Destroy() QDEL_NULL(soundloop) @@ -125,9 +125,6 @@ /proc/wash_turf(turf/tile, clean = CLEAN_WEAK) SEND_SIGNAL(tile, COMSIG_COMPONENT_CLEAN_ACT, clean) // tile.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - for(var/obj/effect/E in tile) - if(is_cleanable(E)) - qdel(E) /proc/wash_mob(mob/living/L, clean = CLEAN_WEAK) diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm index 9f77136820..465ea9a0c5 100644 --- a/code/game/objects/structures/spawner.dm +++ b/code/game/objects/structures/spawner.dm @@ -25,15 +25,13 @@ ..() -/obj/structure/spawner/syndicate +/obj/structure/spawner/syndicate // TO DO obsolete name = "warp beacon" icon = 'icons/obj/device.dmi' icon_state = "syndbeacon" - spawn_text = "warps in from" - mob_types = list(/mob/living/simple_animal/hostile/syndicate/ranged) faction = list(ROLE_SYNDICATE) -/obj/structure/spawner/skeleton +/obj/structure/spawner/skeleton // TO DO obsolete name = "bone pit" desc = "" icon_state = "hole" @@ -41,7 +39,7 @@ max_integrity = 150 max_mobs = 15 spawn_time = 150 - mob_types = list(/mob/living/simple_animal/hostile/skeleton) +// mob_types = spawn_text = "climbs out of" faction = list("skeleton") diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index 1545abc725..2ef5b6859d 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -50,7 +50,7 @@ /obj/structure/statue/uranium max_integrity = 300 - light_range = 2 + light_outer_range = 2 material_drop_type = /obj/item/stack/sheet/mineral/uranium var/last_event = 0 var/active = null diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 9e79ee923a..d47b4ffe2d 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -609,15 +609,6 @@ buckle_lying = -1 buckle_requires_restraints = 1 var/mob/living/carbon/human/patient = null - var/obj/machinery/computer/operating/computer = null - -/obj/structure/table/optable/Initialize() - . = ..() - for(var/direction in GLOB.cardinals) - computer = locate(/obj/machinery/computer/operating, get_step(src, direction)) - if(computer) - computer.table = src - break /obj/structure/table/optable/tablepush(mob/living/user, mob/living/pushed_mob) pushed_mob.forceMove(loc) diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm index 1a77108bcd..222c058492 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -61,10 +61,7 @@ for(var/atom/movable/AM in contents) AM.ex_act(severity, target) -/obj/structure/transit_tube_pod/singularity_pull(S, current_size) - ..() - if(current_size >= STAGE_FIVE) - deconstruct(FALSE) +/obj/structure/transit_tube_pod/singularity_pull() /obj/structure/transit_tube_pod/container_resist(mob/living/user) if(!user.incapacitated()) diff --git a/code/game/objects/structures/traps.dm b/code/game/objects/structures/traps.dm index 67c661981a..b72845c990 100644 --- a/code/game/objects/structures/traps.dm +++ b/code/game/objects/structures/traps.dm @@ -109,10 +109,6 @@ flare_message = "[src] snaps shut!" /obj/structure/trap/stun/hunter/Crossed(atom/movable/AM) - if(isliving(AM)) - var/mob/living/L = AM - if(!L.mind?.has_antag_datum(/datum/antagonist/fugitive)) - return caught = TRUE . = ..() @@ -130,15 +126,10 @@ icon = 'icons/obj/objects.dmi' icon_state = "bounty_trap_off" var/obj/structure/trap/stun/hunter/stored_trap - var/obj/item/radio/radio var/datum/effect_system/spark_spread/spark_system /obj/item/bountytrap/Initialize(mapload) . = ..() - radio = new(src) - radio.subspace_transmission = TRUE - radio.canhear_range = 0 - radio.recalculateChannels() spark_system = new spark_system.set_up(4,1,src) spark_system.attach(src) @@ -150,7 +141,6 @@ /obj/item/bountytrap/proc/announce_fugitive() spark_system.start() playsound(src, 'sound/blank.ogg', 50, TRUE) - radio.talk_into(src, "Fugitive has triggered this trap in the [get_area_name(src)]!", RADIO_CHANNEL_COMMON) /obj/item/bountytrap/attack_self(mob/living/user) var/turf/T = get_turf(src) @@ -162,7 +152,6 @@ /obj/item/bountytrap/Destroy() qdel(stored_trap) - QDEL_NULL(radio) QDEL_NULL(spark_system) . = ..() @@ -212,16 +201,3 @@ /obj/structure/trap/ward/Initialize() . = ..() QDEL_IN(src, time_between_triggers) - -/obj/structure/trap/cult - name = "unholy trap" - desc = "" - icon_state = "trap-cult" - -/obj/structure/trap/cult/trap_effect(mob/living/L) - to_chat(L, "With a crack, the hostile constructs come out of hiding, stunning you!") - L.electrocute_act(10, src, flags = SHOCK_NOGLOVES) // electrocute act does a message. - L.Paralyze(20) - new /mob/living/simple_animal/hostile/construct/proteon/hostile(loc) - new /mob/living/simple_animal/hostile/construct/proteon/hostile(loc) - QDEL_IN(src, 30) diff --git a/code/game/objects/structures/traveltile.dm b/code/game/objects/structures/traveltile.dm index 04844f83a8..8e72f66fda 100644 --- a/code/game/objects/structures/traveltile.dm +++ b/code/game/objects/structures/traveltile.dm @@ -163,3 +163,38 @@ else to_chat(user, "It is a dead end.") return FALSE + + +/obj/structure/fluff/traveltile/inhumen/can_go(mob/user) + . = ..() + if(.) + var/mob/living/L = user + if(HAS_TRAIT(L, TRAIT_INHUMENCAMP)) + for(var/mob/living/carbon/human/H in hearers(6,src)) + if(!HAS_TRAIT(H, TRAIT_INHUMENCAMP)) + to_chat(user, "I discover the entrance to the vampire mansion.") + ADD_TRAIT(H, TRAIT_INHUMENCAMP, TRAIT_GENERIC) + return TRUE + else + to_chat(user, "It is a dead end.") + return FALSE + + +/* .................. Traveltiles ................... */ // these are the ones on centcom, where the actual lair is, to reduce varedits onmap +/obj/structure/fluff/traveltile/exit_bandit // mus NOT be a traveltile/bandit child, because that one has a check for banditcamp trait. People should always be able to leave the camp. + aportalid = "banditin" + aportalgoesto = "banditexit" + +/obj/structure/fluff/traveltile/exit_vampire // mus NOT be a traveltile/vampire child, because that one has a check for banditcamp trait. People should always be able to leave the camp. + aportalid = "vampin" + aportalgoesto = "vampexit" + +/obj/structure/fluff/traveltile/exit_inhumen + aportalid = "inhumenin" + aportalgoesto = "inhumenexit" + + +/obj/structure/fluff/traveltile/to_inhumen_tribe + name = "to the Deep Bog" + aportalid = "inhumenexit" + aportalgoesto = "inhumenin" diff --git a/code/game/objects/structures/walldeco.dm b/code/game/objects/structures/walldeco.dm index d92ff9343a..1de18d03f7 100644 --- a/code/game/objects/structures/walldeco.dm +++ b/code/game/objects/structures/walldeco.dm @@ -235,9 +235,103 @@ icon_state = "medposter6" /obj/structure/fluff/walldeco/skullspike // for ground really - icon = 'modular/Mapping/icons/decoration.dmi' icon_state = "skullspike" plane = -1 layer = ABOVE_MOB_LAYER pixel_x = 8 pixel_y = 24 + +/* .................. The Drunken Saiga ................... */ +/obj/structure/fluff/walldeco/innsign/saiga + name = "The Drunken Saiga" + icon_state = "bar_saiga" + plane = -1 + pixel_x = 3 + pixel_y = 16 + +/obj/structure/fluff/walldeco/innsign/trophy + name = "saiga trophy" + icon_state = "saiga_trophy" + pixel_y = 32 + +/* .................. Feldsher Sign ................... */ +/obj/structure/fluff/walldeco/feldshersign + name = "feldsher sign" + icon_state = "feldsher" + pixel_y = 32 + +/obj/structure/fluff/walldeco/bath/random + icon_state = "bath" + pixel_y = 32 +/obj/structure/fluff/walldeco/bath/random/Initialize() + . = ..() + if(icon_state == "bath") + icon_state = "bath[rand(1,8)]" + +/obj/structure/fluff/walldeco/vinez // overlay vines for more flexibile mapping + icon_state = "vinez" + +/obj/structure/fluff/walldeco/vinez/l + pixel_x = -32 +/obj/structure/fluff/walldeco/vinez/r + pixel_x = 32 + +/obj/structure/fluff/walldeco/vinez/offset + icon_state = "vinez" + pixel_y = 32 + + +/obj/structure/fluff/walldeco/bath/wallpipes + icon_state = "wallpipe" + pixel_x = 0 + pixel_y = 32 + + +/* .................. Wall decorations ................... */ +/obj/structure/fluff/walldeco/bath // suggestive stonework + icon_state = "bath1" + pixel_x = -32 + alpha = 210 + +/obj/structure/fluff/walldeco/bath/two + icon_state = "bath2" + pixel_x = -29 + +/obj/structure/fluff/walldeco/bath/three + icon_state = "bath3" + pixel_x = -29 + +/obj/structure/fluff/walldeco/bath/four + icon_state = "bath4" + pixel_y = 32 + pixel_x = 0 + +/obj/structure/fluff/walldeco/bath/five + icon_state = "bath5" + pixel_x = -29 + +/obj/structure/fluff/walldeco/bath/six + icon_state = "bath6" + pixel_x = -29 + +/obj/structure/fluff/walldeco/bath/seven + icon_state = "bath7" + pixel_x = 32 + +/obj/structure/fluff/walldeco/bath/gents + icon_state = "gents" + pixel_x = 0 + pixel_y = 32 + +/obj/structure/fluff/walldeco/bath/ladies + icon_state = "ladies" + pixel_x = 0 + pixel_y = 32 + +/obj/structure/fluff/walldeco/bath/wallrope + icon_state = "wallrope" + layer = WALL_OBJ_LAYER+0.1 + pixel_x = 0 + pixel_y = 0 + color = "#d66262" + diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index b264718d89..bbbcb3e42d 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -300,20 +300,6 @@ to_chat(user, "\The [RG] is full.") return FALSE - if(istype(O, /obj/item/melee/baton)) - var/obj/item/melee/baton/B = O - if(B.cell) - if(B.cell.charge > 0 && B.status == 1) - flick("baton_active", src) - var/stunforce = B.stunforce - user.Paralyze(stunforce) - user.stuttering = stunforce/20 - B.deductcharge(B.hitcost) - user.visible_message("[user] shocks [user.p_them()]self while attempting to wash the active [B.name]!", \ - "I unwisely attempt to wash [B] while it's still on.") - playsound(src, "sparks", 50, TRUE) - return - if(istype(O, /obj/item/mop)) O.reagents.add_reagent(dispensedreagent, 5) to_chat(user, "I wet [O] in [src].") diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm deleted file mode 100644 index af165f20d3..0000000000 --- a/code/game/objects/structures/windoor_assembly.dm +++ /dev/null @@ -1,362 +0,0 @@ -/* Windoor (window door) assembly -Nodrak - * Step 1: Create a windoor out of rglass - * Step 2: Add r-glass to the assembly to make a secure windoor (Optional) - * Step 3: Rotate or Flip the assembly to face and open the way you want - * Step 4: Wrench the assembly in place - * Step 5: Add cables to the assembly - * Step 6: Set access for the door. - * Step 7: Screwdriver the door to complete - */ - - -/obj/structure/windoor_assembly - icon = 'icons/obj/doors/windoor.dmi' - - name = "windoor Assembly" - icon_state = "l_windoor_assembly01" - desc = "" - anchored = FALSE - density = FALSE - dir = NORTH - - var/ini_dir - var/obj/item/electronics/airlock/electronics = null - var/created_name = null - - //Vars to help with the icon's name - var/facing = "l" //Does the windoor open to the left or right? - var/secure = FALSE //Whether or not this creates a secure windoor - var/state = "01" //How far the door assembly has progressed - CanAtmosPass = ATMOS_PASS_PROC - -/obj/structure/windoor_assembly/New(loc, set_dir) - ..() - if(set_dir) - setDir(set_dir) - ini_dir = dir - air_update_turf(1) - -/obj/structure/windoor_assembly/Destroy() - density = FALSE - air_update_turf(1) - return ..() - -/obj/structure/windoor_assembly/Move() - var/turf/T = loc - . = ..() - setDir(ini_dir) - move_update_air(T) - -/obj/structure/windoor_assembly/update_icon() - icon_state = "[facing]_[secure ? "secure_" : ""]windoor_assembly[state]" - -/obj/structure/windoor_assembly/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && (mover.pass_flags & PASSGLASS)) - return 1 - if(get_dir(loc, target) == dir) //Make sure looking at appropriate border - return !density - if(istype(mover, /obj/structure/window)) - var/obj/structure/window/W = mover - if(!valid_window_location(loc, W.ini_dir)) - return FALSE - else if(istype(mover, /obj/structure/windoor_assembly)) - var/obj/structure/windoor_assembly/W = mover - if(!valid_window_location(loc, W.ini_dir)) - return FALSE - else if(istype(mover, /obj/machinery/door/window) && !valid_window_location(loc, mover.dir)) - return FALSE - return 1 - -/obj/structure/windoor_assembly/CanAtmosPass(turf/T) - if(get_dir(loc, T) == dir) - return !density - else - return 1 - -/obj/structure/windoor_assembly/CheckExit(atom/movable/mover as mob|obj, turf/target) - if(istype(mover) && (mover.pass_flags & PASSGLASS)) - return 1 - if(get_dir(loc, target) == dir) - return !density - else - return 1 - - -/obj/structure/windoor_assembly/attackby(obj/item/W, mob/user, params) - //I really should have spread this out across more states but thin little windoors are hard to sprite. - add_fingerprint(user) - switch(state) - if("01") - if(W.tool_behaviour == TOOL_WELDER && !anchored) - if(!W.tool_start_check(user, amount=0)) - return - - user.visible_message("[user] disassembles the windoor assembly.", - "I start to disassemble the windoor assembly...") - - if(W.use_tool(src, user, 40, volume=50)) - to_chat(user, "I disassemble the windoor assembly.") - var/obj/item/stack/sheet/rglass/RG = new (get_turf(src), 5) - RG.add_fingerprint(user) - if(secure) - var/obj/item/stack/rods/R = new (get_turf(src), 4) - R.add_fingerprint(user) - qdel(src) - return - - //Wrenching an unsecure assembly anchors it in place. Step 4 complete - if(W.tool_behaviour == TOOL_WRENCH && !anchored) - for(var/obj/machinery/door/window/WD in loc) - if(WD.dir == dir) - to_chat(user, "There is already a windoor in that location!") - return - user.visible_message("[user] secures the windoor assembly to the floor.", - "I start to secure the windoor assembly to the floor...") - - if(W.use_tool(src, user, 40, volume=100)) - if(anchored) - return - for(var/obj/machinery/door/window/WD in loc) - if(WD.dir == dir) - to_chat(user, "There is already a windoor in that location!") - return - to_chat(user, "I secure the windoor assembly.") - setAnchored(TRUE) - if(secure) - name = "secure anchored windoor assembly" - else - name = "anchored windoor assembly" - - //Unwrenching an unsecure assembly un-anchors it. Step 4 undone - else if(W.tool_behaviour == TOOL_WRENCH && anchored) - user.visible_message("[user] unsecures the windoor assembly to the floor.", - "I start to unsecure the windoor assembly to the floor...") - - if(W.use_tool(src, user, 40, volume=100)) - if(!anchored) - return - to_chat(user, "I unsecure the windoor assembly.") - setAnchored(FALSE) - if(secure) - name = "secure windoor assembly" - else - name = "windoor assembly" - - //Adding plasteel makes the assembly a secure windoor assembly. Step 2 (optional) complete. - else if(istype(W, /obj/item/stack/sheet/plasteel) && !secure) - var/obj/item/stack/sheet/plasteel/P = W - if(P.get_amount() < 2) - to_chat(user, "I need more plasteel to do this!") - return - to_chat(user, "I start to reinforce the windoor with plasteel...") - - if(do_after(user,40, target = src)) - if(!src || secure || P.get_amount() < 2) - return - - P.use(2) - to_chat(user, "I reinforce the windoor.") - secure = TRUE - if(anchored) - name = "secure anchored windoor assembly" - else - name = "secure windoor assembly" - - //Adding cable to the assembly. Step 5 complete. - else if(istype(W, /obj/item/stack/cable_coil) && anchored) - user.visible_message("[user] wires the windoor assembly.", "I start to wire the windoor assembly...") - - if(do_after(user, 40, target = src)) - if(!src || !anchored || src.state != "01") - return - var/obj/item/stack/cable_coil/CC = W - if(!CC.use(1)) - to_chat(user, "I need more cable to do this!") - return - to_chat(user, "I wire the windoor.") - state = "02" - if(secure) - name = "secure wired windoor assembly" - else - name = "wired windoor assembly" - else - return ..() - - if("02") - - //Removing wire from the assembly. Step 5 undone. - if(W.tool_behaviour == TOOL_WIRECUTTER) - user.visible_message("[user] cuts the wires from the airlock assembly.", "I start to cut the wires from airlock assembly...") - - if(W.use_tool(src, user, 40, volume=100)) - if(state != "02") - return - - to_chat(user, "I cut the windoor wires.") - new/obj/item/stack/cable_coil(get_turf(user), 1) - state = "01" - if(secure) - name = "secure anchored windoor assembly" - else - name = "anchored windoor assembly" - - //Adding airlock electronics for access. Step 6 complete. - else if(istype(W, /obj/item/electronics/airlock)) - if(!user.transferItemToLoc(W, src)) - return - W.play_tool_sound(src, 100) - user.visible_message("[user] installs the electronics into the airlock assembly.", - "I start to install electronics into the airlock assembly...") - - if(do_after(user, 40, target = src)) - if(!src || electronics) - W.forceMove(drop_location()) - return - to_chat(user, "I install the airlock electronics.") - name = "near finished windoor assembly" - electronics = W - else - W.forceMove(drop_location()) - - //Screwdriver to remove airlock electronics. Step 6 undone. - else if(W.tool_behaviour == TOOL_SCREWDRIVER) - if(!electronics) - return - - user.visible_message("[user] removes the electronics from the airlock assembly.", - "I start to uninstall electronics from the airlock assembly...") - - if(W.use_tool(src, user, 40, volume=100) && electronics) - to_chat(user, "I remove the airlock electronics.") - name = "wired windoor assembly" - var/obj/item/electronics/airlock/ae - ae = electronics - electronics = null - ae.forceMove(drop_location()) - - else if(istype(W, /obj/item/pen)) - var/t = stripped_input(user, "Enter the name for the door.", name, created_name,MAX_NAME_LEN) - if(!t) - return - if(!in_range(src, usr) && loc != usr) - return - created_name = t - return - - - - //Crowbar to complete the assembly, Step 7 complete. - else if(W.tool_behaviour == TOOL_CROWBAR) - if(!electronics) - to_chat(usr, "The assembly is missing electronics!") - return - user << browse(null, "window=windoor_access") - user.visible_message("[user] pries the windoor into the frame.", - "I start prying the windoor into the frame...") - - if(W.use_tool(src, user, 40, volume=100) && electronics) - - density = TRUE //Shouldn't matter but just incase - to_chat(user, "I finish the windoor.") - - if(secure) - var/obj/machinery/door/window/brigdoor/windoor = new /obj/machinery/door/window/brigdoor(loc) - if(facing == "l") - windoor.icon_state = "leftsecureopen" - windoor.base_state = "leftsecure" - else - windoor.icon_state = "rightsecureopen" - windoor.base_state = "rightsecure" - windoor.setDir(dir) - windoor.density = FALSE - - if(electronics.one_access) - windoor.req_one_access = electronics.accesses - else - windoor.req_access = electronics.accesses - windoor.electronics = electronics - electronics.forceMove(windoor) - if(created_name) - windoor.name = created_name - qdel(src) - windoor.close() - - - else - var/obj/machinery/door/window/windoor = new /obj/machinery/door/window(loc) - if(facing == "l") - windoor.icon_state = "leftopen" - windoor.base_state = "left" - else - windoor.icon_state = "rightopen" - windoor.base_state = "right" - windoor.setDir(dir) - windoor.density = FALSE - - if(electronics.one_access) - windoor.req_one_access = electronics.accesses - else - windoor.req_access = electronics.accesses - windoor.electronics = electronics - electronics.loc = windoor - if(created_name) - windoor.name = created_name - qdel(src) - windoor.close() - - - else - return ..() - - //Update to reflect changes(if applicable) - update_icon() - - - -/obj/structure/windoor_assembly/ComponentInitialize() - . = ..() - AddComponent( - /datum/component/simple_rotation, - ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS, - null, - CALLBACK(src, PROC_REF(can_be_rotated)), - CALLBACK(src,PROC_REF(after_rotation)) - ) - -/obj/structure/windoor_assembly/proc/can_be_rotated(mob/user,rotation_type) - if(anchored) - to_chat(user, "[src] cannot be rotated while it is fastened to the floor!") - return FALSE - var/target_dir = turn(dir, rotation_type == ROTATION_CLOCKWISE ? -90 : 90) - - if(!valid_window_location(loc, target_dir)) - to_chat(user, "[src] cannot be rotated in that direction!") - return FALSE - return TRUE - -/obj/structure/windoor_assembly/proc/after_rotation(mob/user) - ini_dir = dir - update_icon() - -//Flips the windoor assembly, determines whather the door opens to the left or the right -/obj/structure/windoor_assembly/verb/flip() - set name = "Flip Windoor Assembly" - set hidden = 1 - set src in oview(1) - if(usr.stat || usr.restrained()) - return - - if(isliving(usr)) - var/mob/living/L = usr - if(!(L.mobility_flags & MOBILITY_USE)) - return - - if(facing == "l") - to_chat(usr, "The windoor will now slide to the right.") - facing = "r" - else - facing = "l" - to_chat(usr, "The windoor will now slide to the left.") - - update_icon() - return diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 57e5695f19..77f1b5397a 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -67,27 +67,10 @@ . = ..() AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ,null,CALLBACK(src, PROC_REF(can_be_rotated)),CALLBACK(src,PROC_REF(after_rotation))) -/obj/structure/window/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - switch(the_rcd.mode) - if(RCD_DECONSTRUCT) - return list("mode" = RCD_DECONSTRUCT, "delay" = 20, "cost" = 5) - return FALSE - -/obj/structure/window/rcd_act(mob/user, obj/item/construction/rcd/the_rcd) - switch(the_rcd.mode) - if(RCD_DECONSTRUCT) - to_chat(user, "I deconstruct the window.") - qdel(src) - return TRUE - return FALSE - /obj/structure/window/narsie_act() add_atom_colour(NARSIE_WINDOW_COLOUR, FIXED_COLOUR_PRIORITY) -/obj/structure/window/singularity_pull(S, current_size) - ..() - if(current_size >= STAGE_FIVE) - deconstruct(FALSE) +/obj/structure/window/singularity_pull() /obj/structure/window/setDir(direct) if(!fulltile) @@ -106,12 +89,6 @@ var/obj/structure/window/W = mover if(!valid_window_location(loc, W.ini_dir)) return FALSE - else if(istype(mover, /obj/structure/windoor_assembly)) - var/obj/structure/windoor_assembly/W = mover - if(!valid_window_location(loc, W.ini_dir)) - return FALSE - else if(istype(mover, /obj/machinery/door/window) && !valid_window_location(loc, mover.dir)) - return FALSE return 1 /obj/structure/window/CheckExit(atom/movable/O, turf/target) @@ -213,11 +190,6 @@ /obj/structure/window/proc/check_state_and_anchored(checked_state, checked_anchored) return check_state(checked_state) && check_anchored(checked_anchored) -/obj/structure/window/mech_melee_attack(obj/mecha/M) - if(!can_be_reached()) - return - ..() - /obj/structure/window/proc/can_be_reached(mob/user) if(!fulltile) if(get_dir(user,src) & dir) @@ -721,7 +693,7 @@ fulltile = TRUE flags_1 = PREVENT_CLICK_UNDER_1 smooth = SMOOTH_TRUE - canSmoothWith = list(/obj/structure/window/paperframe, /obj/structure/mineral_door/paperframe) + canSmoothWith = list(/obj/structure/window/paperframe) glass_amount = 2 glass_type = /obj/item/stack/sheet/paperframes heat_resistance = 233 diff --git a/code/game/say.dm b/code/game/say.dm index af698a87cf..13fb79238d 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -237,13 +237,6 @@ INITIALIZE_IMMEDIATE(/atom/movable/virtualspeaker) job = "Unknown" else if(iscarbon(M)) // Carbon nonhuman job = "No ID" - else if(isAI(M)) // AI - job = "AI" - else if(iscyborg(M)) // Cyborg - var/mob/living/silicon/robot/B = M - job = "[B.designation] Cyborg" - else if(istype(M, /mob/living/silicon/pai)) // Personal AI (pAI) - job = "Personal AI" else if(isobj(M)) // Cold, emotionless machines job = "Machine" else // Unidentifiable mob @@ -255,5 +248,3 @@ INITIALIZE_IMMEDIATE(/atom/movable/virtualspeaker) /atom/movable/virtualspeaker/GetSource() return source -/atom/movable/virtualspeaker/GetRadio() - return radio diff --git a/code/game/sound.dm b/code/game/sound.dm index ea1f04a479..53783ca440 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -14,7 +14,7 @@ return //allocate a channel if necessary now so its the same for everyone - channel = channel || open_sound_channel() + channel = channel || SSsounds.random_available_channel() // Looping through the player list has the added bonus of working for mobs inside containers var/sound/S = soundin @@ -42,10 +42,10 @@ if(!ignore_walls) //these sounds don't carry through walls listeners = listeners & hearers(maxdistance,turf_source) - if(above_turf && istransparentturf(above_turf)) + if(above_turf) listeners += hearers(maxdistance,above_turf) - if(below_turf && istransparentturf(turf_source)) + if(below_turf) listeners += hearers(maxdistance,below_turf) else @@ -103,7 +103,7 @@ S = sound(get_sfx(soundin)) S.wait = 0 //No queue - S.channel = channel || open_sound_channel() + S.channel = channel || SSsounds.random_available_channel() var/vol2use = vol if(client.prefs) @@ -208,11 +208,10 @@ var/mob/M = m M.playsound_local(M, null, volume, vary, frequency, falloff, channel, pressure_affected, S) -/proc/open_sound_channel() - var/static/next_channel = 1 //loop through the available 1024 - (the ones we reserve) channels and pray that its not still being used - . = ++next_channel - if(next_channel > CHANNEL_HIGHEST_AVAILABLE) - next_channel = 1 +/mob/proc/set_sound_channel_volume(channel, volume) + var/sound/S = sound(null, FALSE, FALSE, channel, volume) + S.status = SOUND_UPDATE + SEND_SOUND(src, S) /mob/proc/stop_sound_channel(chan) SEND_SOUND(src, sound(null, repeat = 0, wait = 0, channel = chan)) diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm index 3a92767560..13773d0122 100644 --- a/code/game/turfs/change_turf.dm +++ b/code/game/turfs/change_turf.dm @@ -89,6 +89,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( var/old_dynamic_lighting = dynamic_lighting var/old_affecting_lights = affecting_lights var/old_lighting_object = lighting_object + var/old_outdoor_effect = outdoor_effect var/old_corners = corners var/old_exl = explosion_level @@ -143,6 +144,10 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( break if(SSlighting.initialized) + if(SSoutdoor_effects.initialized) + outdoor_effect = old_outdoor_effect + get_sky_and_weather_states() + recalc_atom_opacity() lighting_object = old_lighting_object affecting_lights = old_affecting_lights @@ -358,13 +363,6 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( else CALCULATE_ADJACENT_TURFS(src) - //update firedoor adjacency - var/list/turfs_to_check = get_adjacent_open_turfs(src) | src - for(var/I in turfs_to_check) - var/turf/T = I - for(var/obj/machinery/door/firedoor/FD in T) - FD.CalculateAffectingAreas() - queue_smooth_neighbors(src) HandleTurfChange(src) diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm index 715c75df47..3ad7d39754 100644 --- a/code/game/turfs/closed/minerals.dm +++ b/code/game/turfs/closed/minerals.dm @@ -95,8 +95,6 @@ // else // H.mind.adjust_experience(/datum/skill/mining, 4) - for(var/obj/effect/temp_visual/mining_overlay/M in src) - qdel(M) var/flags = NONE if(defer_change) // TODO: make the defer change var a var for any changeturf flag flags = CHANGETURF_DEFER_CHANGE @@ -109,12 +107,6 @@ gets_drilled(user) ..() -/turf/closed/mineral/attack_alien(mob/living/carbon/alien/M) - to_chat(M, "I start digging into the rock...") - playsound(src, 'sound/blank.ogg', 50, TRUE) - if(do_after(M, 40, target = src)) - to_chat(M, "I tunnel into the rock.") - gets_drilled(M) /* /turf/closed/mineral/Bumped(atom/movable/AM) ..() @@ -462,12 +454,6 @@ det_time = rand(8,10) //So you don't know exactly when the hot potato will explode . = ..() -/turf/closed/mineral/gibtonite/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/mining_scanner) || istype(I, /obj/item/t_scanner/adv_mining_scanner) && stage == 1) - user.visible_message("[user] holds [I] to [src]...", "I use [I] to locate where to cut off the chain reaction and attempt to stop it...") - defuse() - ..() - /turf/closed/mineral/gibtonite/proc/explosive_reaction(mob/user = null, triggered_by_explosion = 0) if(stage == GIBTONITE_UNSTRUCK) activated_overlay = mutable_appearance('icons/turf/smoothrocks.dmi', "rock_Gibtonite_active", ON_EDGED_TURF_LAYER) @@ -602,19 +588,19 @@ turf_type = /turf/open/floor/rogue/naturalstone above_floor = /turf/open/floor/rogue/naturalstone baseturfs = list(/turf/open/floor/rogue/naturalstone) - mineralSpawnChanceList = list(/turf/closed/mineral/rogue/salt = 20, /turf/closed/mineral/rogue/copper = 15, /turf/closed/mineral/rogue/iron = 5) + mineralSpawnChanceList = list(/turf/closed/mineral/rogue/salt = 20, /turf/closed/mineral/rogue/copper = 15, /turf/closed/mineral/rogue/iron = 5, /turf/closed/mineral/rogue/coal = 5) mineralChance = 30 max_integrity = 400 /turf/closed/mineral/random/rogue/med icon_state = "minrandmed" mineralChance = 50 - mineralSpawnChanceList = list(/turf/closed/mineral/rogue/salt = 20, /turf/closed/mineral/rogue/iron = 25, /turf/closed/mineral/rogue/coal = 20, /turf/closed/mineral/rogue/copper = 10) + mineralSpawnChanceList = list(/turf/closed/mineral/rogue/salt = 20, /turf/closed/mineral/rogue/iron = 25, /turf/closed/mineral/rogue/coal = 20, /turf/closed/mineral/rogue/copper = 10, /turf/closed/mineral/rogue/silver = 1)//, /turf/closed/mineral/rogue/gemeralds = 1) /turf/closed/mineral/random/rogue/high icon_state = "minrandhigh" - mineralChance = 50 - mineralSpawnChanceList = list(/turf/closed/mineral/rogue/gold = 10 , /turf/closed/mineral/rogue/iron = 25, /turf/closed/mineral/rogue/silver = 10) + mineralChance = 60 + mineralSpawnChanceList = list(/turf/closed/mineral/rogue/gold = 15 , /turf/closed/mineral/rogue/iron = 25, /turf/closed/mineral/rogue/silver = 15)//, /turf/closed/mineral/rogue/gemeralds = 10) //begin actual mineral turfs @@ -688,11 +674,19 @@ spreadChance = 3 spread = 4 +/turf/closed/mineral/rogue/gemeralds + icon_state = "mingold" + desc = "there is an strange light on the stone?" + mineralType = /obj/item/roguegem/random + rockType = /obj/item/natural/rock/gemerald + spreadChance = 3 + spread = 2 + /turf/closed/mineral/rogue/bedrock name = "rock" desc = "seems too hard" icon_state = "rockyashbed" -// smooth_icon = 'icons/turf/walls/hardrock.dmi' + smooth_icon = 'icons/turf/walls/hardrock.dmi' max_integrity = 900 above_floor = /turf/closed/mineral/rogue/bedrock @@ -700,3 +694,8 @@ ..() to_chat(user, "TOO HARD!") turf_integrity = max_integrity + +/turf/closed/mineral/rogue/bedrock/Initialize() + . = ..() + color = "#c6d9c6" + diff --git a/code/game/turfs/closed/wall/mineral_walls.dm b/code/game/turfs/closed/wall/mineral_walls.dm index a909bc4484..2edd46e4c1 100644 --- a/code/game/turfs/closed/wall/mineral_walls.dm +++ b/code/game/turfs/closed/wall/mineral_walls.dm @@ -170,17 +170,6 @@ bullet_sizzle = TRUE bullet_bounce_sound = null -/turf/closed/wall/mineral/abductor - name = "alien wall" - desc = "" - icon = 'icons/turf/walls/shuttle_wall.dmi' - icon_state = "abductor" - smooth = SMOOTH_TRUE|SMOOTH_DIAGONAL - sheet_type = /obj/item/stack/sheet/mineral/abductor - slicing_duration = 200 //alien wall takes twice as much time to slice - explosion_block = 3 - canSmoothWith = list(/turf/closed/wall/mineral/abductor, /obj/structure/falsewall/abductor) - /////////////////////Titanium walls///////////////////// /turf/closed/wall/mineral/titanium //has to use this path due to how building walls works @@ -192,7 +181,7 @@ flags_1 = CAN_BE_DIRTY_1 | CHECK_RICOCHET_1 sheet_type = /obj/item/stack/sheet/mineral/titanium smooth = SMOOTH_MORE|SMOOTH_DIAGONAL - canSmoothWith = list(/turf/closed/wall/mineral/titanium, /obj/machinery/door/airlock/shuttle, /obj/machinery/door/airlock, /obj/structure/window/shuttle, /obj/structure/shuttle/engine/heater, /obj/structure/falsewall/titanium) + canSmoothWith = list(/turf/closed/wall/mineral/titanium, /obj/structure/window/shuttle, /obj/structure/shuttle/engine/heater, /obj/structure/falsewall/titanium) /turf/closed/wall/mineral/titanium/nodiagonal smooth = SMOOTH_MORE @@ -236,13 +225,13 @@ icon = 'icons/turf/walls/survival_pod_walls.dmi' icon_state = "smooth" smooth = SMOOTH_MORE|SMOOTH_DIAGONAL - canSmoothWith = list(/turf/closed/wall/mineral/titanium/survival, /obj/machinery/door/airlock, /obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/shuttle, /obj/structure/shuttle/engine) + canSmoothWith = list(/turf/closed/wall/mineral/titanium/survival, /obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/shuttle, /obj/structure/shuttle/engine) /turf/closed/wall/mineral/titanium/survival/nodiagonal smooth = SMOOTH_MORE /turf/closed/wall/mineral/titanium/survival/pod - canSmoothWith = list(/turf/closed/wall/mineral/titanium/survival, /obj/machinery/door/airlock/survival_pod, /obj/structure/window/shuttle/survival_pod) + canSmoothWith = list(/turf/closed/wall/mineral/titanium/survival) /////////////////////Plastitanium walls///////////////////// @@ -254,7 +243,7 @@ explosion_block = 4 sheet_type = /obj/item/stack/sheet/mineral/plastitanium smooth = SMOOTH_MORE|SMOOTH_DIAGONAL - canSmoothWith = list(/turf/closed/wall/mineral/plastitanium, /obj/machinery/door/airlock/shuttle, /obj/machinery/door/airlock, /obj/structure/window/plasma/reinforced/plastitanium, /obj/structure/shuttle/engine, /obj/structure/falsewall/plastitanium) + canSmoothWith = list(/turf/closed/wall/mineral/plastitanium, /obj/structure/window/plasma/reinforced/plastitanium, /obj/structure/shuttle/engine, /obj/structure/falsewall/plastitanium) /turf/closed/wall/mineral/plastitanium/nodiagonal smooth = SMOOTH_MORE @@ -269,17 +258,6 @@ icon_state = "map-overspace" fixed_underlay = list("space"=1) -/turf/closed/wall/mineral/plastitanium/explosive/ex_act(severity) - var/datum/explosion/acted_explosion = null - for(var/datum/explosion/E in GLOB.explosions) - if(E.explosion_id == explosion_id) - acted_explosion = E - break - if(acted_explosion && istype(acted_explosion.explosion_source, /obj/item/bombcore)) - var/obj/item/bombcore/large/bombcore = new(get_turf(src)) - bombcore.detonate() - ..() - //have to copypaste this code /turf/closed/wall/mineral/plastitanium/interior/copyTurf(turf/T) if(T.type != type) diff --git a/code/game/turfs/closed/wall/reinf_walls.dm b/code/game/turfs/closed/wall/reinf_walls.dm index 40195e2def..9ff152679b 100644 --- a/code/game/turfs/closed/wall/reinf_walls.dm +++ b/code/game/turfs/closed/wall/reinf_walls.dm @@ -205,43 +205,3 @@ icon_state = "r_wall-[d_state]" else icon_state = "r_wall" - -/turf/closed/wall/r_wall/wall_singularity_pull(current_size) - if(current_size >= STAGE_FIVE) - if(prob(30)) - dismantle_wall() - -/turf/closed/wall/r_wall/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - if(the_rcd.canRturf) - return ..() - - -/turf/closed/wall/r_wall/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) - if(the_rcd.canRturf) - return ..() - -/turf/closed/wall/r_wall/syndicate - name = "hull" - desc = "" - icon = 'icons/turf/walls/plastitanium_wall.dmi' - icon_state = "map-shuttle" - explosion_block = 20 - sheet_type = /obj/item/stack/sheet/mineral/plastitanium - smooth = SMOOTH_MORE|SMOOTH_DIAGONAL - canSmoothWith = list(/turf/closed/wall/r_wall/syndicate, /turf/closed/wall/mineral/plastitanium, /obj/machinery/door/airlock/shuttle, /obj/machinery/door/airlock, /obj/structure/window/plasma/reinforced/plastitanium, /obj/structure/shuttle/engine, /obj/structure/falsewall/plastitanium) - -/turf/closed/wall/r_wall/syndicate/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - return FALSE - -/turf/closed/wall/r_wall/syndicate/nodiagonal - smooth = SMOOTH_MORE - icon_state = "map-shuttle_nd" - -/turf/closed/wall/r_wall/syndicate/nosmooth - icon = 'icons/turf/shuttle.dmi' - icon_state = "wall" - smooth = SMOOTH_FALSE - -/turf/closed/wall/r_wall/syndicate/overspace - icon_state = "map-overspace" - fixed_underlay = list("space"=1) diff --git a/code/game/turfs/closed/wall/roguewalls.dm b/code/game/turfs/closed/wall/roguewalls.dm index 3057de7203..ac07a8becb 100644 --- a/code/game/turfs/closed/wall/roguewalls.dm +++ b/code/game/turfs/closed/wall/roguewalls.dm @@ -108,6 +108,20 @@ climbdiff = 4 damage_deflection = 20 +/* .................. Red brick Walls ................... */ +/turf/closed/wall/mineral/rogue/stonebrick/reddish + color = "#e0b7af" + +/turf/closed/wall/mineral/rogue/decostone/fluffstone/reddish + color = "#fbc5bc" + +/turf/closed/wall/mineral/rogue/decostone/cand/reddish + color = "#fbd2cb" + +/obj/structure/stairs/stone/reddish + color = "#ffddd7" + + /turf/closed/wall/mineral/rogue/wood name = "wall" desc = "A rough-hewn wall of wood." @@ -293,7 +307,8 @@ /turf/closed/wall/mineral/rogue/decostone/fluffstone icon_state = "fluffstone" - +/turf/closed/wall/mineral/rogue/decostone/chimney + icon_state = "chimney" /turf/closed/wall/shroud //vines diff --git a/code/game/turfs/closed/walls.dm b/code/game/turfs/closed/walls.dm index 9aa3768dfc..d1a5163582 100644 --- a/code/game/turfs/closed/walls.dm +++ b/code/game/turfs/closed/walls.dm @@ -107,24 +107,6 @@ else add_dent(WALL_DENT_HIT) -/turf/closed/wall/mech_melee_attack(obj/mecha/M) - M.do_attack_animation(src) - switch(M.damtype) - if(BRUTE) - playsound(src, 'sound/blank.ogg', 50, TRUE) - M.visible_message("[M.name] hits [src]!", \ - "I hit [src]!", null, COMBAT_MESSAGE_RANGE) - if(prob(hardness + M.force) && M.force > 20) - dismantle_wall(1) - playsound(src, 'sound/blank.ogg', 100, TRUE) - else - add_dent(WALL_DENT_HIT) - if(BURN) - playsound(src, 'sound/blank.ogg', 100, TRUE) - if(TOX) - playsound(src, 'sound/blank.ogg', 100, TRUE) - return FALSE - /turf/closed/wall/attack_paw(mob/living/user) user.changeNext_move(CLICK_CD_MELEE) return attack_hand(user) @@ -183,7 +165,7 @@ if(istype(W, /obj/item/rogue/instrument)) if(T.attacked_by(src, user)) user.do_attack_animation(src) - visible_message("[user] slams \the [W] against \the [src]!", + visible_message("[user] slams \the [W] against \the [src]!", "I slam \the [W] against \the [src]!",null ,COMBAT_MESSAGE_RANGE) W.take_damage(10, BRUTE, "melee") return @@ -236,19 +218,6 @@ return FALSE -/turf/closed/wall/singularity_pull(S, current_size) - ..() - wall_singularity_pull(current_size) - -/turf/closed/wall/proc/wall_singularity_pull(current_size) - if(current_size >= STAGE_FIVE) - if(prob(50)) - dismantle_wall() - return - if(current_size == STAGE_FOUR) - if(prob(30)) - dismantle_wall() - /turf/closed/wall/narsie_act(force, ignore_mobs, probability = 20) . = ..() if(.) @@ -265,20 +234,6 @@ /turf/closed/wall/acid_melt() dismantle_wall(1) -/turf/closed/wall/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - switch(the_rcd.mode) - if(RCD_DECONSTRUCT) - return list("mode" = RCD_DECONSTRUCT, "delay" = 40, "cost" = 26) - return FALSE - -/turf/closed/wall/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) - switch(passed_mode) - if(RCD_DECONSTRUCT) - to_chat(user, "I deconstruct the wall.") - ScrapeAway() - return TRUE - return FALSE - /turf/closed/wall/proc/add_dent(denttype, x=rand(-8, 8), y=rand(-8, 8)) if(LAZYLEN(dent_decals) >= MAX_DENT_DECALS) return diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm index c1f9c721b3..9298adf65c 100644 --- a/code/game/turfs/open/_open.dm +++ b/code/game/turfs/open/_open.dm @@ -197,9 +197,6 @@ M.apply_water() SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) - for(var/obj/effect/O in src) - if(is_cleanable(O)) - qdel(O) return TRUE /turf/open/handle_slip(mob/living/carbon/C, knockdown_amount, obj/O, lube, paralyze_amount, force_drop) diff --git a/code/game/turfs/open/chasm.dm b/code/game/turfs/open/chasm.dm index a6d1aaade1..cedd27c1e3 100644 --- a/code/game/turfs/open/chasm.dm +++ b/code/game/turfs/open/chasm.dm @@ -28,20 +28,6 @@ /turf/open/chasm/MakeDry() return -/turf/open/chasm/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - switch(the_rcd.mode) - if(RCD_FLOORWALL) - return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 3) - return FALSE - -/turf/open/chasm/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) - switch(passed_mode) - if(RCD_FLOORWALL) - to_chat(user, "I build a floor.") - PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) - return TRUE - return FALSE - /turf/open/chasm/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) underlay_appearance.icon = 'icons/turf/floors.dmi' underlay_appearance.icon_state = "basalt" @@ -84,7 +70,7 @@ initial_gas_mix = LAVALAND_DEFAULT_ATMOS planetary_atmos = TRUE baseturfs = /turf/open/chasm/lavaland - light_range = 1.9 //slightly less range than lava + light_outer_range = 1.9 //slightly less range than lava light_power = 0.65 //less bright, too light_color = LIGHT_COLOR_LAVA //let's just say you're falling into lava, that makes sense right diff --git a/code/game/turfs/open/dirtystation.dm b/code/game/turfs/open/dirtystation.dm index 0461db29e5..aae54617db 100644 --- a/code/game/turfs/open/dirtystation.dm +++ b/code/game/turfs/open/dirtystation.dm @@ -43,8 +43,7 @@ /area/science/robotics, /area/maintenance, /area/construction, - /area/vacant_room/commissary, - /area/survivalpod)) + /area/vacant_room/commissary)) if(is_type_in_typecache(A, engine_dirt_areas)) if(prob(3)) new /obj/effect/decal/cleanable/blood/old(src) diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm index 3ad8f61601..ba94ccc4d9 100644 --- a/code/game/turfs/open/floor.dm +++ b/code/game/turfs/open/floor.dm @@ -187,104 +187,5 @@ new floor_tile(src) return make_plating() -/turf/open/floor/singularity_pull(S, current_size) - ..() - if(current_size == STAGE_THREE) - if(prob(30)) - if(floor_tile) - new floor_tile(src) - make_plating() - else if(current_size == STAGE_FOUR) - if(prob(50)) - if(floor_tile) - new floor_tile(src) - make_plating() - else if(current_size >= STAGE_FIVE) - if(floor_tile) - if(prob(70)) - new floor_tile(src) - make_plating() - else if(prob(50)) - ReplaceWithLattice() - -/turf/open/floor/narsie_act(force, ignore_mobs, probability = 20) - . = ..() - if(.) - ChangeTurf(/turf/open/floor/engine/cult, flags = CHANGETURF_INHERIT_AIR) - /turf/open/floor/acid_melt() ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - -/turf/open/floor/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - switch(the_rcd.mode) - if(RCD_FLOORWALL) - return list("mode" = RCD_FLOORWALL, "delay" = 20, "cost" = 16) - if(RCD_AIRLOCK) - if(the_rcd.airlock_glass) - return list("mode" = RCD_AIRLOCK, "delay" = 50, "cost" = 20) - else - return list("mode" = RCD_AIRLOCK, "delay" = 50, "cost" = 16) - if(RCD_DECONSTRUCT) - return list("mode" = RCD_DECONSTRUCT, "delay" = 50, "cost" = 33) - if(RCD_WINDOWGRILLE) - return list("mode" = RCD_WINDOWGRILLE, "delay" = 10, "cost" = 4) - if(RCD_MACHINE) - return list("mode" = RCD_MACHINE, "delay" = 20, "cost" = 25) - if(RCD_COMPUTER) - return list("mode" = RCD_COMPUTER, "delay" = 20, "cost" = 25) - return FALSE - -/turf/open/floor/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) - switch(passed_mode) - if(RCD_FLOORWALL) - to_chat(user, "I build a wall.") - PlaceOnTop(/turf/closed/wall) - return TRUE - if(RCD_AIRLOCK) - if(locate(/obj/machinery/door/airlock) in src) - return FALSE - to_chat(user, "I build an airlock.") - var/obj/machinery/door/airlock/A = new the_rcd.airlock_type(src) - - A.electronics = new/obj/item/electronics/airlock(A) - - if(the_rcd.conf_access) - A.electronics.accesses = the_rcd.conf_access.Copy() - A.electronics.one_access = the_rcd.use_one_access - - if(A.electronics.one_access) - A.req_one_access = A.electronics.accesses - else - A.req_access = A.electronics.accesses - A.autoclose = TRUE - return TRUE - if(RCD_DECONSTRUCT) - if(!ScrapeAway(flags = CHANGETURF_INHERIT_AIR)) - return FALSE - to_chat(user, "I deconstruct [src].") - return TRUE - if(RCD_WINDOWGRILLE) - if(locate(/obj/structure/grille) in src) - return FALSE - to_chat(user, "I construct the grille.") - var/obj/structure/grille/G = new(src) - G.anchored = TRUE - return TRUE - if(RCD_MACHINE) - if(locate(/obj/structure/frame/machine) in src) - return FALSE - var/obj/structure/frame/machine/M = new(src) - M.state = 2 - M.icon_state = "box_1" - M.anchored = TRUE - return TRUE - if(RCD_COMPUTER) - if(locate(/obj/structure/frame/computer) in src) - return FALSE - var/obj/structure/frame/computer/C = new(src) - C.anchored = TRUE - C.state = 1 - C.setDir(the_rcd.computer_dir) - return TRUE - - return FALSE diff --git a/code/game/turfs/open/floor/fancy_floor.dm b/code/game/turfs/open/floor/fancy_floor.dm index 0c2ff86b72..27f65473f8 100644 --- a/code/game/turfs/open/floor/fancy_floor.dm +++ b/code/game/turfs/open/floor/fancy_floor.dm @@ -102,7 +102,7 @@ desc = "" icon_state = "fairygrass" floor_tile = /obj/item/stack/tile/fairygrass - light_range = 2 + light_outer_range = 2 light_power = 0.80 light_color = "#33CCFF" diff --git a/code/game/turfs/open/floor/light_floor.dm b/code/game/turfs/open/floor/light_floor.dm index ddbc68d6c4..d755a8140b 100644 --- a/code/game/turfs/open/floor/light_floor.dm +++ b/code/game/turfs/open/floor/light_floor.dm @@ -1,7 +1,7 @@ /turf/open/floor/light name = "light floor" desc = "" - light_range = 5 + light_outer_range = 5 icon_state = "light_on" floor_tile = /obj/item/stack/tile/light broken_states = list("light_broken") @@ -23,7 +23,7 @@ /turf/open/floor/light/break_tile() ..() - light_range = 0 + light_outer_range = 0 update_light() /turf/open/floor/light/update_icon() @@ -68,9 +68,6 @@ on = FALSE update_icon() -/turf/open/floor/light/attack_ai(mob/user) - return attack_hand(user) - /turf/open/floor/light/attackby(obj/item/C, mob/user, params) if(..()) return diff --git a/code/game/turfs/open/floor/plating.dm b/code/game/turfs/open/floor/plating.dm index 09f81c3191..edd0a97059 100644 --- a/code/game/turfs/open/floor/plating.dm +++ b/code/game/turfs/open/floor/plating.dm @@ -130,17 +130,6 @@ else to_chat(user, "I hit [src], to no effect!") -/turf/open/floor/plating/foam/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - if(the_rcd.mode == RCD_FLOORWALL) - return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 1) - -/turf/open/floor/plating/foam/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) - if(passed_mode == RCD_FLOORWALL) - to_chat(user, "I build a floor.") - ChangeTurf(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) - return TRUE - return FALSE - /turf/open/floor/plating/foam/ex_act() ..() ScrapeAway(flags = CHANGETURF_INHERIT_AIR) diff --git a/code/game/turfs/open/floor/plating/asteroid.dm b/code/game/turfs/open/floor/plating/asteroid.dm index 631913eb81..8378046a60 100644 --- a/code/game/turfs/open/floor/plating/asteroid.dm +++ b/code/game/turfs/open/floor/plating/asteroid.dm @@ -133,7 +133,7 @@ #define SPAWN_MEGAFAUNA "bluh bluh huge boss" #define SPAWN_BUBBLEGUM 6 -GLOBAL_LIST_INIT(megafauna_spawn_list, list(/mob/living/simple_animal/hostile/megafauna/dragon = 4, /mob/living/simple_animal/hostile/megafauna/colossus = 2, /mob/living/simple_animal/hostile/megafauna/bubblegum = SPAWN_BUBBLEGUM)) +GLOBAL_LIST_INIT(megafauna_spawn_list, list(/mob/living/simple_animal/hostile/megafauna/dragon = 4, /mob/living/simple_animal/hostile/megafauna/bubblegum = SPAWN_BUBBLEGUM)) /turf/open/floor/plating/asteroid/airless/cave var/length = 100 diff --git a/code/game/turfs/open/floor/reinf_floor.dm b/code/game/turfs/open/floor/reinf_floor.dm index 93f5bb9212..3023ca3674 100644 --- a/code/game/turfs/open/floor/reinf_floor.dm +++ b/code/game/turfs/open/floor/reinf_floor.dm @@ -75,15 +75,7 @@ if(prob(50)) ScrapeAway(flags = CHANGETURF_INHERIT_AIR) -/turf/open/floor/engine/singularity_pull(S, current_size) - ..() - if(current_size >= STAGE_FIVE) - if(floor_tile) - if(prob(30)) - new floor_tile(src) - make_plating() - else if(prob(30)) - ReplaceWithLattice() +/turf/open/floor/engine/singularity_pull() /turf/open/floor/engine/attack_paw(mob/user) return attack_hand(user) @@ -123,37 +115,6 @@ initial_gas_mix = ATMOS_TANK_AIRMIX - -/turf/open/floor/engine/cult - name = "engraved floor" - desc = "" - icon_state = "plating" - floor_tile = null - var/obj/effect/cult_turf/overlay/floor/bloodcult/realappearance - - -/turf/open/floor/engine/cult/Initialize() - . = ..() - new /obj/effect/temp_visual/cult/turf/floor(src) - realappearance = new /obj/effect/cult_turf/overlay/floor/bloodcult(src) - realappearance.linked = src - -/turf/open/floor/engine/cult/Destroy() - be_removed() - return ..() - -/turf/open/floor/engine/cult/ChangeTurf(path, new_baseturf, flags) - if(path != type) - be_removed() - return ..() - -/turf/open/floor/engine/cult/proc/be_removed() - qdel(realappearance) - realappearance = null - -/turf/open/floor/engine/cult/airless - initial_gas_mix = AIRLESS_ATMOS - /turf/open/floor/engine/vacuum name = "vacuum floor" initial_gas_mix = AIRLESS_ATMOS diff --git a/code/game/turfs/open/floor/roguefloor.dm b/code/game/turfs/open/floor/roguefloor.dm index dfd4f4a88d..49dc737efa 100644 --- a/code/game/turfs/open/floor/roguefloor.dm +++ b/code/game/turfs/open/floor/roguefloor.dm @@ -19,6 +19,7 @@ icon = smooth_icon . = ..() +/* .................. Wooden Floors ................... */ /turf/open/floor/rogue/ruinedwood icon_state = "wooden_floor" footstep = FOOTSTEP_WOOD @@ -40,17 +41,11 @@ /turf/open/floor/rogue/ruinedwood/spiral icon_state = "weird1" +/turf/open/floor/rogue/ruinedwood/spiralfade + icon_state = "weird3" /turf/open/floor/rogue/ruinedwood/chevron icon_state = "weird2" -/* .................. Darker version ................... */ -/turf/open/floor/rogue/ruinedwood/darker // here problem was opposite, too bright wood for bandit lair - color = "#d9c9b0" -/turf/open/floor/rogue/ruinedwood/turned/darker - color = "#d9c9b0" - -/turf/open/floor/rogue/tile/kitchen // faded kitchen, too dark floors look bad IMO, this much nicer - icon_state = "tavern" /turf/open/floor/rogue/twig icon_state = "twig" @@ -79,13 +74,26 @@ tiled_dirt = FALSE smooth = SMOOTH_MORE landsound = 'sound/foley/jumpland/woodland.wav' - canSmoothWith = list(/turf/open/floor/rogue/wood,/turf/open/floor/carpet) + canSmoothWith = list(/turf/open/floor/rogue/wood, + /turf/open/floor/carpet) /turf/open/floor/rogue/wood/nosmooth //these are here so we can put wood floors next to each other but not have them smooth icon_state = "wooden_floor" smooth = SMOOTH_MORE canSmoothWith = list(/turf/open/floor/rogue/wood/nosmooth,/turf/open/floor/carpet) +/turf/open/floor/rogue/wood/saiga + icon_state = "woodalt" + icon = 'icons/turf/floors/woodalt.dmi' + smooth_icon = 'icons/turf/floors/woodalt.dmi' + canSmoothWith = list(/turf/open/floor/rogue/wood/saiga,/turf/open/floor/carpet) + +/turf/open/floor/rogue/wood/nosmooth/saiga + icon_state = "woodalt" + icon = 'icons/turf/floors/woodalt.dmi' + smooth_icon = 'icons/turf/floors/woodalt.dmi' + canSmoothWith = list(/turf/open/floor/rogue/wood/nosmooth/saiga,/turf/open/floor/carpet) + /turf/open/floor/rogue/woodturned smooth_icon = 'icons/turf/floors/wood_turned.dmi' icon_state = "wooden_floor2t" @@ -97,10 +105,21 @@ heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/open/floor/rogue/woodturned/nosmooth - icon_state = "wooden_floort" smooth = SMOOTH_MORE canSmoothWith = list(/turf/open/floor/rogue/woodturned/nosmooth,/turf/open/floor/carpet) +/turf/open/floor/rogue/woodturned/saiga + icon_state = "woodalt" + icon = 'icons/turf/floors/woodalt_turned.dmi' + smooth_icon = 'icons/turf/floors/woodalt_turned.dmi' + canSmoothWith = list(/turf/open/floor/rogue/woodturned/saiga,/turf/open/floor/carpet) + +/turf/open/floor/rogue/woodturned/nosmooth/saiga + icon_state = "woodalt" + icon = 'icons/turf/floors/woodalt_turned.dmi' + smooth_icon = 'icons/turf/floors/woodalt_turned.dmi' + canSmoothWith = list(/turf/open/floor/rogue/woodturned/nosmooth/saiga,/turf/open/floor/carpet) + /turf/open/floor/rogue/rooftop name = "roof" icon_state = "roof-arw" @@ -120,7 +139,7 @@ /turf/open/floor/rogue/rooftop/green/Initialize() . = ..() icon_state = "roofg" - +/* .................. Grasses ................... */ /turf/open/floor/rogue/grass name = "grass" desc = "Grass, sodden in mud and bogwater." @@ -133,12 +152,167 @@ landsound = 'sound/foley/jumpland/grassland.wav' slowdown = 0 neighborlay = "grassedge" + smooth = SMOOTH_TRUE + canSmoothWith = list( + /turf/open/floor/rogue/grass/red, + /turf/open/floor/rogue/grass/yel, + /turf/open/floor/rogue/grass/cold, + /turf/open/floor/rogue/snow, + /turf/open/floor/rogue/snow/patchy, + /turf/open/floor/rogue/snow/rough, + /turf/open/floor/rogue/dirt) /turf/open/floor/rogue/grass/Initialize() dir = pick(GLOB.cardinals) // GLOB.dirt_list += src . = ..() +/turf/open/floor/rogue/grass/red + name = "red grass" + desc = "Grass, ripe with Dendor's blood." + icon_state = "grass_red" + layer = MID_TURF_LAYER + footstep = FOOTSTEP_GRASS + barefootstep = FOOTSTEP_SOFT_BAREFOOT + heavyfootstep = FOOTSTEP_GENERIC_HEAVY + tiled_dirt = FALSE + landsound = 'sound/foley/jumpland/grassland.wav' + slowdown = 0 + neighborlay = "grass_rededge" + smooth = SMOOTH_TRUE + +/turf/open/floor/rogue/grassred/Initialize() + dir = pick(GLOB.cardinals) + . = ..() + +/turf/open/floor/rogue/grassred/cardinal_smooth(adjacencies) + roguesmooth(adjacencies) + +/turf/open/floor/rogue/grass/yel + name = "yellow grass" + desc = "Grass, blessed by Astrata's light." + icon_state = "grass_yel" + layer = MID_TURF_LAYER + footstep = FOOTSTEP_GRASS + barefootstep = FOOTSTEP_SOFT_BAREFOOT + heavyfootstep = FOOTSTEP_GENERIC_HEAVY + tiled_dirt = FALSE + landsound = 'sound/foley/jumpland/grassland.wav' + slowdown = 0 + neighborlay = "grass_yeledge" + smooth = SMOOTH_TRUE + +/turf/open/floor/rogue/grassyel/Initialize() + dir = pick(GLOB.cardinals) + . = ..() + +/turf/open/floor/rogue/grassyel/cardinal_smooth(adjacencies) + roguesmooth(adjacencies) + +/turf/open/floor/rogue/grass/cold + name = "tundra grass" + desc = "Grass, frigid and touched by winter." + icon_state = "grass_cold" + layer = MID_TURF_LAYER + footstep = FOOTSTEP_GRASS + barefootstep = FOOTSTEP_SOFT_BAREFOOT + heavyfootstep = FOOTSTEP_GENERIC_HEAVY + tiled_dirt = FALSE + landsound = 'sound/foley/jumpland/grassland.wav' + slowdown = 0 + neighborlay = "grass_coldedge" + smooth = SMOOTH_TRUE + +/turf/open/floor/rogue/grasscold/Initialize() + dir = pick(GLOB.cardinals) + . = ..() + +/turf/open/floor/rogue/grasscold/cardinal_smooth(adjacencies) + roguesmooth(adjacencies) + +/* .................. Snow ................... */ + +/turf/open/floor/rogue/snow + name = "snow" + desc = "A gentle blanket of snow." + icon_state = "snow" + layer = MID_TURF_LAYER + footstep = FOOTSTEP_GRASS + barefootstep = FOOTSTEP_SOFT_BAREFOOT + heavyfootstep = FOOTSTEP_GENERIC_HEAVY + tiled_dirt = FALSE + landsound = 'sound/foley/jumpland/grassland.wav' + slowdown = 0 + smooth = SMOOTH_TRUE + canSmoothWith = list(/turf/open/floor/rogue/grass, + /turf/open/floor/rogue/grass/red, + /turf/open/floor/rogue/grass/yel, + /turf/open/floor/rogue/grass/cold, + /turf/open/floor/rogue/snow, + /turf/open/floor/rogue/snow/patchy, + /turf/open/floor/rogue/snow/rough) + neighborlay = "snowedge" + +/turf/open/floor/rogue/snow/Initialize() + dir = pick(GLOB.cardinals) + . = ..() + +/turf/open/floor/rogue/snow/cardinal_smooth(adjacencies) + roguesmooth(adjacencies) + +/turf/open/floor/rogue/snow/rough + name = "rough snow" + desc = "A rugged blanket of snow." + icon_state = "snowrough" + layer = MID_TURF_LAYER + footstep = FOOTSTEP_GRASS + barefootstep = FOOTSTEP_SOFT_BAREFOOT + heavyfootstep = FOOTSTEP_GENERIC_HEAVY + tiled_dirt = FALSE + landsound = 'sound/foley/jumpland/grassland.wav' + slowdown = 0 + smooth = SMOOTH_TRUE + canSmoothWith = list(/turf/open/floor/rogue/grass, + /turf/open/floor/rogue/grass/red, + /turf/open/floor/rogue/grass/yel, + /turf/open/floor/rogue/grass/cold, + /turf/open/floor/rogue/snow, + /turf/open/floor/rogue/snow/patchy, + /turf/open/floor/rogue/snow/rough) + neighborlay = "snowroughedge" + +/turf/open/floor/rogue/snowrough/Initialize() + dir = pick(GLOB.cardinals) + . = ..() + +/turf/open/floor/rogue/snowrough/cardinal_smooth(adjacencies) + roguesmooth(adjacencies) + +/turf/open/floor/rogue/snow/patchy + name = "patchy snow" + desc = "Half-melted snow revealing the hardy grass underneath." + icon_state = "snowpatchy_grass" + layer = MID_TURF_LAYER + footstep = FOOTSTEP_GRASS + barefootstep = FOOTSTEP_SOFT_BAREFOOT + heavyfootstep = FOOTSTEP_GENERIC_HEAVY + tiled_dirt = FALSE + landsound = 'sound/foley/jumpland/grassland.wav' + slowdown = 0 + smooth = SMOOTH_TRUE + canSmoothWith = list(/turf/open/floor/rogue/grass, + /turf/open/floor/rogue/grass/red, + /turf/open/floor/rogue/grass/yel, + /turf/open/floor/rogue/grass/cold, + /turf/open/floor/rogue/snow, + /turf/open/floor/rogue/snow/patchy, + /turf/open/floor/rogue/snow/rough) + neighborlay = "snowpatchy_grassedge" + +/turf/open/floor/rogue/snowpatchy/cardinal_smooth(adjacencies) + roguesmooth(adjacencies) + +/* .................. Dirts ................... */ /turf/open/floor/rogue/dirt/ambush name = "dirt" desc = "The dirt is pocked with the scars of countless wars." @@ -151,7 +325,13 @@ landsound = 'sound/foley/jumpland/dirtland.wav' slowdown = 2 smooth = SMOOTH_TRUE - canSmoothWith = list(/turf/open/floor/rogue/grass) + canSmoothWith = list(/turf/open/floor/rogue/grass, + /turf/open/floor/rogue/grass/red, + /turf/open/floor/rogue/grass/yel, + /turf/open/floor/rogue/grass/cold, + /turf/open/floor/rogue/snow, + /turf/open/floor/rogue/snow/patchy, + /turf/open/floor/rogue/snow/rough) neighborlay = "dirtedge" muddy = FALSE bloodiness = 20 @@ -169,24 +349,41 @@ landsound = 'sound/foley/jumpland/dirtland.wav' slowdown = 2 smooth = SMOOTH_TRUE - canSmoothWith = list(/turf/open/floor/rogue/grass) + canSmoothWith = list(/turf/open/floor/rogue/grass, + /turf/open/floor/rogue/grass/red, + /turf/open/floor/rogue/grass/yel, + /turf/open/floor/rogue/grass/cold, + /turf/open/floor/rogue/snow, + /turf/open/floor/rogue/snow/patchy, + /turf/open/floor/rogue/snow/rough, + /turf/open/water/swamp, + /turf/open/water/cleanshallow) neighborlay = "dirtedge" var/muddy = FALSE var/bloodiness = 20 var/obj/structure/closet/dirthole/holie var/obj/machinery/crop/planted_crop var/dirt_amt = 3 -/* + /turf/open/floor/rogue/dirt/get_slowdown(mob/user) var/returned = slowdown + var/negate_slowdown = FALSE + for(var/obj/item/I in user.held_items) if(I.walking_stick) if(!I.wielded) var/mob/living/L = user if(!L.cmode) - returned = max(returned-2, 0) + negate_slowdown = TRUE + + if(HAS_TRAIT(user, TRAIT_LONGSTRIDER)) + negate_slowdown = TRUE + + if(negate_slowdown) + returned = max(returned-2, 0) + return returned -*/ + /turf/open/floor/rogue/dirt/attack_right(mob/user) if(isliving(user)) @@ -303,7 +500,10 @@ tiled_dirt = FALSE landsound = 'sound/foley/jumpland/dirtland.wav' smooth = SMOOTH_TRUE - canSmoothWith = list(/turf/open/floor/rogue, /turf/closed/mineral, /turf/closed/wall/mineral) + canSmoothWith = list(/turf/open/floor/rogue, + /turf/closed/mineral, + /turf/closed/wall/mineral, + /turf/open/floor/rogue/dirt) neighborlay = "dirtedge" slowdown = 0 @@ -401,8 +601,10 @@ tiled_dirt = FALSE landsound = 'sound/foley/jumpland/dirtland.wav' smooth = SMOOTH_TRUE - canSmoothWith = list(/turf/open/floor/rogue, /turf/closed/mineral, /turf/closed/wall/mineral) - slowdown = 0 + canSmoothWith = list(/turf/open/floor/rogue, + /turf/closed/mineral, + /turf/closed/wall/mineral) +// slowdown = 0 /turf/open/floor/rogue/underworld/road/Initialize() . = ..() @@ -420,14 +622,15 @@ tiled_dirt = FALSE landsound = 'sound/foley/jumpland/dirtland.wav' smooth = SMOOTH_TRUE - canSmoothWith = list(/turf/open/floor/rogue/dirt/road,/turf/open/floor/rogue/dirt) + canSmoothWith = list(/turf/open/floor/rogue/dirt/road, + /turf/open/floor/rogue/dirt) neighborlay = "lavedge" /turf/open/floor/rogue/volcanic/Initialize() dir = pick(GLOB.cardinals) . = ..() - +/* .................. Stone Block Floors ................... */ /turf/open/floor/rogue/blocks icon_state = "blocks" footstep = FOOTSTEP_STONE @@ -436,7 +639,20 @@ heavyfootstep = FOOTSTEP_GENERIC_HEAVY landsound = 'sound/foley/jumpland/stoneland.wav' smooth = SMOOTH_MORE - canSmoothWith = list(/turf/closed/mineral/rogue, /turf/closed/mineral, /turf/closed/wall/mineral/rogue/stonebrick, /turf/closed/wall/mineral/rogue/wood, /turf/closed/wall/mineral/rogue/wooddark, /turf/closed/wall/mineral/rogue/stone, /turf/closed/wall/mineral/rogue/stone/moss, /turf/open/floor/rogue/dirt, /turf/open/floor/rogue/grass) + canSmoothWith = list(/turf/closed/mineral/rogue, + /turf/closed/mineral, + /turf/closed/wall/mineral/rogue/stonebrick, + /turf/closed/wall/mineral/rogue/wood, + /turf/closed/wall/mineral/rogue/wooddark, + /turf/closed/wall/mineral/rogue/stone, + /turf/closed/wall/mineral/rogue/stone/moss, + /turf/open/floor/rogue/grass, + /turf/open/floor/rogue/grass/red, + /turf/open/floor/rogue/grass/yel, + /turf/open/floor/rogue/grass/cold, + /turf/open/floor/rogue/snow, + /turf/open/floor/rogue/snow/patchy, + /turf/open/floor/rogue/snow/rough) /turf/open/floor/rogue/blocks/Initialize() . = ..() @@ -477,7 +693,17 @@ heavyfootstep = FOOTSTEP_GENERIC_HEAVY landsound = 'sound/foley/jumpland/stoneland.wav' smooth = SMOOTH_MORE - canSmoothWith = list(/turf/closed/mineral/rogue, /turf/open/floor/rogue/herringbone, /turf/closed/mineral, /turf/closed/wall/mineral/rogue/stonebrick, /turf/closed/wall/mineral/rogue/wood, /turf/closed/wall/mineral/rogue/wooddark, /turf/closed/wall/mineral/rogue/stone, /turf/closed/wall/mineral/rogue/stone/moss, /turf/open/floor/rogue/cobble, /turf/open/floor/rogue/dirt, /turf/open/floor/rogue/grass) + canSmoothWith = list(/turf/closed/mineral/rogue, + /turf/open/floor/rogue/herringbone, + /turf/closed/mineral, + /turf/closed/wall/mineral/rogue/stonebrick, + /turf/closed/wall/mineral/rogue/wood, + /turf/closed/wall/mineral/rogue/wooddark, + /turf/closed/wall/mineral/rogue/stone, + /turf/closed/wall/mineral/rogue/stone/moss, + /turf/open/floor/rogue/cobble, + /turf/open/floor/rogue/dirt, + /turf/open/floor/rogue/grass) /turf/open/floor/rogue/hexstone/cardinal_smooth(adjacencies) roguesmooth(adjacencies) @@ -486,7 +712,7 @@ . = ..() dir = pick(GLOB.cardinals) -//Church floors +/* .................. Church Floors ................... */ /turf/open/floor/rogue/churchmarble icon_state = "church_marble" @@ -496,7 +722,17 @@ heavyfootstep = FOOTSTEP_GENERIC_HEAVY landsound = 'sound/foley/jumpland/stoneland.wav' smooth = SMOOTH_MORE - canSmoothWith = list(/turf/closed/mineral/rogue, /turf/open/floor/rogue/herringbone, /turf/closed/mineral, /turf/closed/wall/mineral/rogue/stonebrick, /turf/closed/wall/mineral/rogue/wood, /turf/closed/wall/mineral/rogue/wooddark, /turf/closed/wall/mineral/rogue/stone, /turf/closed/wall/mineral/rogue/stone/moss, /turf/open/floor/rogue/cobble, /turf/open/floor/rogue/dirt, /turf/open/floor/rogue/grass) + canSmoothWith = list(/turf/closed/mineral/rogue, + /turf/open/floor/rogue/herringbone, + /turf/closed/mineral, + /turf/closed/wall/mineral/rogue/stonebrick, + /turf/closed/wall/mineral/rogue/wood, + /turf/closed/wall/mineral/rogue/wooddark, + /turf/closed/wall/mineral/rogue/stone, + /turf/closed/wall/mineral/rogue/stone/moss, + /turf/open/floor/rogue/cobble, + /turf/open/floor/rogue/dirt, + /turf/open/floor/rogue/grass) /turf/open/floor/rogue/churchmarble/cardinal_smooth(adjacencies) roguesmooth(adjacencies) @@ -513,7 +749,23 @@ heavyfootstep = FOOTSTEP_GENERIC_HEAVY landsound = 'sound/foley/jumpland/stoneland.wav' smooth = SMOOTH_MORE - canSmoothWith = list(/turf/closed/mineral/rogue, /turf/open/floor/rogue/herringbone, /turf/closed/mineral, /turf/closed/wall/mineral/rogue/stonebrick, /turf/closed/wall/mineral/rogue/wood, /turf/closed/wall/mineral/rogue/wooddark, /turf/closed/wall/mineral/rogue/stone, /turf/closed/wall/mineral/rogue/stone/moss, /turf/open/floor/rogue/cobble, /turf/open/floor/rogue/dirt, /turf/open/floor/rogue/grass) + canSmoothWith = list(/turf/closed/mineral/rogue, + /turf/open/floor/rogue/herringbone, + /turf/closed/mineral, + /turf/closed/wall/mineral/rogue/stonebrick, + /turf/closed/wall/mineral/rogue/wood, + /turf/closed/wall/mineral/rogue/wooddark, + /turf/closed/wall/mineral/rogue/stone, + /turf/closed/wall/mineral/rogue/stone/moss, + /turf/open/floor/rogue/cobble, + /turf/open/floor/rogue/dirt, + /turf/open/floor/rogue/grass, + /turf/open/floor/rogue/grass/red, + /turf/open/floor/rogue/grass/yel, + /turf/open/floor/rogue/grass/cold, + /turf/open/floor/rogue/snow, + /turf/open/floor/rogue/snow/patchy, + /turf/open/floor/rogue/snow/rough) /turf/open/floor/rogue/church/cardinal_smooth(adjacencies) roguesmooth(adjacencies) @@ -530,7 +782,23 @@ heavyfootstep = FOOTSTEP_GENERIC_HEAVY landsound = 'sound/foley/jumpland/stoneland.wav' smooth = SMOOTH_MORE - canSmoothWith = list(/turf/closed/mineral/rogue, /turf/open/floor/rogue/herringbone, /turf/closed/mineral, /turf/closed/wall/mineral/rogue/stonebrick, /turf/closed/wall/mineral/rogue/wood, /turf/closed/wall/mineral/rogue/wooddark, /turf/closed/wall/mineral/rogue/stone, /turf/closed/wall/mineral/rogue/stone/moss, /turf/open/floor/rogue/cobble, /turf/open/floor/rogue/dirt, /turf/open/floor/rogue/grass) + canSmoothWith = list(/turf/closed/mineral/rogue, + /turf/open/floor/rogue/herringbone, + /turf/closed/mineral, + /turf/closed/wall/mineral/rogue/stonebrick, + /turf/closed/wall/mineral/rogue/wood, + /turf/closed/wall/mineral/rogue/wooddark, + /turf/closed/wall/mineral/rogue/stone, + /turf/closed/wall/mineral/rogue/stone/moss, + /turf/open/floor/rogue/cobble, + /turf/open/floor/rogue/dirt, + /turf/open/floor/rogue/grass, + /turf/open/floor/rogue/grass/red, + /turf/open/floor/rogue/grass/yel, + /turf/open/floor/rogue/grass/cold, + /turf/open/floor/rogue/snow, + /turf/open/floor/rogue/snow/patchy, + /turf/open/floor/rogue/snow/rough) /turf/open/floor/rogue/churchbrick/cardinal_smooth(adjacencies) roguesmooth(adjacencies) @@ -547,7 +815,23 @@ heavyfootstep = FOOTSTEP_GENERIC_HEAVY landsound = 'sound/foley/jumpland/stoneland.wav' smooth = SMOOTH_MORE - canSmoothWith = list(/turf/closed/mineral/rogue, /turf/open/floor/rogue/herringbone, /turf/closed/mineral, /turf/closed/wall/mineral/rogue/stonebrick, /turf/closed/wall/mineral/rogue/wood, /turf/closed/wall/mineral/rogue/wooddark, /turf/closed/wall/mineral/rogue/stone, /turf/closed/wall/mineral/rogue/stone/moss, /turf/open/floor/rogue/cobble, /turf/open/floor/rogue/dirt, /turf/open/floor/rogue/grass) + canSmoothWith = list(/turf/closed/mineral/rogue, + /turf/open/floor/rogue/herringbone, + /turf/closed/mineral, + /turf/closed/wall/mineral/rogue/stonebrick, + /turf/closed/wall/mineral/rogue/wood, + /turf/closed/wall/mineral/rogue/wooddark, + /turf/closed/wall/mineral/rogue/stone, + /turf/closed/wall/mineral/rogue/stone/moss, + /turf/open/floor/rogue/cobble, + /turf/open/floor/rogue/dirt, + /turf/open/floor/rogue/grass, + /turf/open/floor/rogue/grass/red, + /turf/open/floor/rogue/grass/yel, + /turf/open/floor/rogue/grass/cold, + /turf/open/floor/rogue/snow, + /turf/open/floor/rogue/snow/patchy, + /turf/open/floor/rogue/snow/rough) /turf/open/floor/rogue/churchrough/cardinal_smooth(adjacencies) roguesmooth(adjacencies) @@ -565,7 +849,16 @@ landsound = 'sound/foley/jumpland/stoneland.wav' neighborlay = "herringedge" smooth = SMOOTH_TRUE - canSmoothWith = list(/turf/open/floor/rogue/herringbone, /turf/open/floor/rogue/blocks, /turf/open/floor/rogue/dirt, /turf/open/floor/rogue/grass) + canSmoothWith = list(/turf/open/floor/rogue/herringbone, + /turf/open/floor/rogue/blocks, + /turf/open/floor/rogue/dirt, + /turf/open/floor/rogue/grass, + /turf/open/floor/rogue/grass/red, + /turf/open/floor/rogue/grass/yel, + /turf/open/floor/rogue/grass/cold, + /turf/open/floor/rogue/snow, + /turf/open/floor/rogue/snow/patchy, + /turf/open/floor/rogue/snow/rough) /turf/open/floor/rogue/herringbone/cardinal_smooth(adjacencies) roguesmooth(adjacencies) @@ -574,6 +867,7 @@ . = ..() dir = pick(GLOB.cardinals) +/* .................. Cobblestone ................... */ /turf/open/floor/rogue/cobble icon_state = "cobblestone1" footstep = FOOTSTEP_STONE @@ -583,7 +877,8 @@ landsound = 'sound/foley/jumpland/stoneland.wav' neighborlay = "cobbleedge" smooth = SMOOTH_TRUE - canSmoothWith = list(/turf/open/floor/rogue/dirt, /turf/open/floor/rogue/grass) + canSmoothWith = list(/turf/open/floor/rogue/dirt, + /turf/open/floor/rogue/grass) /turf/open/floor/rogue/cobble/cardinal_smooth(adjacencies) roguesmooth(adjacencies) @@ -601,7 +896,15 @@ landsound = 'sound/foley/jumpland/stoneland.wav' neighborlay = "cobbleedge" smooth = SMOOTH_TRUE - canSmoothWith = list(/turf/open/floor/rogue/dirt, /turf/open/floor/rogue/grass) + canSmoothWith = list(/turf/open/floor/rogue/dirt, + /turf/open/floor/rogue/grass, + /turf/open/floor/rogue/grass, + /turf/open/floor/rogue/grass/red, + /turf/open/floor/rogue/grass/yel, + /turf/open/floor/rogue/grass/cold, + /turf/open/floor/rogue/snow, + /turf/open/floor/rogue/snow/patchy, + /turf/open/floor/rogue/snow/rough) /turf/open/floor/rogue/cobble/mossy/cardinal_smooth(adjacencies) roguesmooth(adjacencies) @@ -619,12 +922,19 @@ landsound = 'sound/foley/jumpland/stoneland.wav' neighborlay = "cobblerock" smooth = SMOOTH_TRUE - canSmoothWith = list(/turf/open/floor/rogue/dirt, /turf/open/floor/rogue/grass) + canSmoothWith = list(/turf/open/floor/rogue/dirt, + /turf/open/floor/rogue/grass, + /turf/open/floor/rogue/grass/red, + /turf/open/floor/rogue/grass/yel, + /turf/open/floor/rogue/grass/cold, + /turf/open/floor/rogue/snow, + /turf/open/floor/rogue/snow/patchy, + /turf/open/floor/rogue/snow/rough) /turf/open/floor/rogue/cobblerock/cardinal_smooth(adjacencies) roguesmooth(adjacencies) -/obj/effect/decal/cobbleedge +/obj/effect/decal/turfedge_neu name = "" desc = "" icon = 'icons/turf/roguefloor.dmi' @@ -640,8 +950,163 @@ heavyfootstep = FOOTSTEP_GENERIC_HEAVY footstepstealth = TRUE smooth = SMOOTH_MORE - canSmoothWith = list(/turf/closed/mineral/rogue, /turf/closed/mineral, /turf/closed/wall/mineral/rogue/stonebrick, /turf/closed/wall/mineral/rogue/wood, /turf/closed/wall/mineral/rogue/wooddark, /turf/closed/wall/mineral/rogue/stone, /turf/closed/wall/mineral/rogue/stone/moss, /turf/open/floor/rogue/cobble, /turf/open/floor/rogue/dirt, /turf/open/floor/rogue/grass) + canSmoothWith = list(/turf/closed/mineral/rogue, + /turf/closed/mineral, + /turf/closed/wall/mineral/rogue/stonebrick, + /turf/closed/wall/mineral/rogue/wood, + /turf/closed/wall/mineral/rogue/wooddark, + /turf/closed/wall/mineral/rogue/stone, + /turf/closed/wall/mineral/rogue/stone/moss, + /turf/open/floor/rogue/cobble, + /turf/open/floor/rogue/dirt, + /turf/open/floor/rogue/grass, + /turf/open/floor/rogue/grass/red, + /turf/open/floor/rogue/grass/yel, + /turf/open/floor/rogue/grass/cold, + /turf/open/floor/rogue/snow, + /turf/open/floor/rogue/snow/patchy, + /turf/open/floor/rogue/snow/rough) + + +// ============================================================== +/* .................. PigTurfs ................... */ +/turf/open/floor/rogue/sandstone + icon_state = "sandstone" + footstep = FOOTSTEP_STONE + barefootstep = FOOTSTEP_HARD_BAREFOOT + clawfootstep = FOOTSTEP_HARD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY + landsound = 'sound/foley/jumpland/stoneland.wav' + smooth = SMOOTH_MORE + canSmoothWith = list(/turf/closed/mineral/rogue, + /turf/open/floor/rogue/herringbone, + /turf/closed/mineral, + /turf/closed/wall/mineral/rogue/stonebrick, + /turf/closed/wall/mineral/rogue/wood, + /turf/closed/wall/mineral/rogue/wooddark, + /turf/closed/wall/mineral/rogue/stone, + /turf/closed/wall/mineral/rogue/stone/moss, + /turf/open/floor/rogue/cobble, + /turf/open/floor/rogue/dirt, + /turf/open/floor/rogue/grass, + /turf/open/floor/rogue/grass/red, + /turf/open/floor/rogue/grass/yel, + /turf/open/floor/rogue/grass/cold, + /turf/open/floor/rogue/snow, + /turf/open/floor/rogue/snow/patchy, + /turf/open/floor/rogue/snow/rough, + /turf/open/floor/rogue/sandstone, + /turf/open/floor/rogue/sandstone/temple) + +/turf/open/floor/rogue/sandstone/shaded + color = "#e5dfdf" + +/turf/open/floor/rogue/sandstone/temple + icon_state = "temple" +/turf/open/floor/rogue/sandstone/temple/Initialize() + dir = pick(GLOB.cardinals) + . = ..() + +/turf/open/water/bath/pool + desc = "Clear water, pleasant temperature. Soothing." + icon_state = "bathtile_pool" +/turf/open/water/bath/pool/Initialize() + . = ..() + icon_state = "bathtile_pool" + +/turf/open/water/bath/pool/mid + icon_state = "bathtile_pool_mid" +/turf/open/water/bath/pool/mid/Initialize() + . = ..() + icon_state = "bathtile_pool_mid" + +/turf/open/floor/rogue/grass/yelmix + name = "grass" + icon_state = "grass_yelmix" + smooth = SMOOTH_FALSE + neighborlay = "" + +/turf/open/floor/rogue/grass/near_tree + color = "#ff0000" +/turf/open/floor/rogue/grass/near_tree/Initialize() + color = "#ffffff" + . = ..() + +/turf/open/floor/rogue/grass/peril // for ambushes + color = "#d89d9d" +/turf/open/floor/rogue/grass/peril/Initialize() + color = "#ffffff" + . = ..() + +/turf/open/floor/rogue/oak // new oak + icon_state = "oak" +/turf/open/floor/rogue/oak/broken + icon_state = "oak_broken" +/turf/open/floor/rogue/oak/stage + icon_state = "stageoak_bl" + +/turf/open/floor/rogue/cobble/alt + icon_state = "cobblestonealt1" + canSmoothWith = list(/turf/open/floor/rogue/cobble) + smooth = SMOOTH_FALSE + smooth_diag = FALSE +/turf/open/floor/rogue/cobble/alt/Initialize() + . = ..() + icon_state = "cobblestonealt[rand(1,3)]" + +/turf/open/floor/rogue/cobblerock_alt + icon_state = "cobblealt1" + canSmoothWith = list(/turf/open/floor/rogue/cobblerock) + smooth = SMOOTH_FALSE + smooth_diag = FALSE + footstep = FOOTSTEP_STONE + barefootstep = FOOTSTEP_HARD_BAREFOOT + clawfootstep = FOOTSTEP_HARD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY + landsound = 'sound/foley/jumpland/stoneland.wav' + neighborlay = "" + +/turf/open/floor/rogue/cobblerock_alt/Initialize() + . = ..() + icon_state = "cobblealt[rand(1,3)]" +/obj/effect/decal/turfedge_neu/rockalt_edge + icon_state = "cobblealt_edges" + +/obj/effect/decal/turfedge_neu/rockalt_corners + icon_state = "cobblealt_corners" + +/obj/effect/decal/turfedge_neu/alt + icon_state = "cobblestonealt_edges" + +/obj/effect/decal/turfedge_neu/alt_small + icon_state = "cobblestonealt_smalledges" + +/turf/open/floor/rogue/cobble/mossy/alt + icon_state = "mossyalt1" + canSmoothWith = FALSE + smooth = SMOOTH_FALSE +/turf/open/floor/rogue/cobble/mossy/alt/Initialize() + . = ..() + icon_state = "mossyalt[rand(1,3)]" + +/obj/effect/decal/turfedge_neu/mossy + icon_state = "mossyalt_edges" + +/obj/effect/decal/turfedge_neu/mossy_small + icon_state = "mossyalt_smalledges" + +/obj/effect/decal/turfedge_neu/road + icon_state = "roadedges_manual1" +/obj/effect/decal/turfedge_neu/road/Initialize() + icon_state = "roadedges_manual[rand(1,2)]" + . = ..() + +/obj/effect/decal/turfedge_neu/road_big + icon_state = "roadedges_manual_34" + +// ============================================================== +/* .................. Miscellany ................... */ /turf/open/floor/rogue/tile/masonic icon_state = "masonic" /turf/open/floor/rogue/tile/masonic/single @@ -670,7 +1135,22 @@ clawfootstep = FOOTSTEP_HARD_CLAW heavyfootstep = FOOTSTEP_GENERIC_HEAVY smooth = SMOOTH_MORE - canSmoothWith = list(/turf/closed/mineral/rogue, /turf/closed/mineral, /turf/closed/wall/mineral/rogue/stonebrick, /turf/closed/wall/mineral/rogue/wood, /turf/closed/wall/mineral/rogue/wooddark, /turf/closed/wall/mineral/rogue/stone, /turf/closed/wall/mineral/rogue/stone/moss, /turf/open/floor/rogue/cobble, /turf/open/floor/rogue/dirt, /turf/open/floor/rogue/grass) + canSmoothWith = list(/turf/closed/mineral/rogue, + /turf/closed/mineral, + /turf/closed/wall/mineral/rogue/stonebrick, + /turf/closed/wall/mineral/rogue/wood, + /turf/closed/wall/mineral/rogue/wooddark, + /turf/closed/wall/mineral/rogue/stone, + /turf/closed/wall/mineral/rogue/stone/moss, + /turf/open/floor/rogue/cobble, + /turf/open/floor/rogue/dirt, + /turf/open/floor/rogue/grass, + /turf/open/floor/rogue/grass/red, + /turf/open/floor/rogue/grass/yel, + /turf/open/floor/rogue/grass/cold, + /turf/open/floor/rogue/snow, + /turf/open/floor/rogue/snow/patchy, + /turf/open/floor/rogue/snow/rough) /turf/open/floor/rogue/concrete/Initialize() . = ..() @@ -686,7 +1166,22 @@ heavyfootstep = FOOTSTEP_GENERIC_HEAVY footstepstealth = TRUE smooth = SMOOTH_MORE - canSmoothWith = list(/turf/closed/mineral/rogue, /turf/closed/mineral, /turf/closed/wall/mineral/rogue/stonebrick, /turf/closed/wall/mineral/rogue/wood, /turf/closed/wall/mineral/rogue/wooddark, /turf/closed/wall/mineral/rogue/stone, /turf/closed/wall/mineral/rogue/stone/moss, /turf/open/floor/rogue/cobble, /turf/open/floor/rogue/dirt, /turf/open/floor/rogue/grass) + canSmoothWith = list(/turf/closed/mineral/rogue, + /turf/closed/mineral, + /turf/closed/wall/mineral/rogue/stonebrick, + /turf/closed/wall/mineral/rogue/wood, + /turf/closed/wall/mineral/rogue/wooddark, + /turf/closed/wall/mineral/rogue/stone, + /turf/closed/wall/mineral/rogue/stone/moss, + /turf/open/floor/rogue/cobble, + /turf/open/floor/rogue/dirt, + /turf/open/floor/rogue/grass, + /turf/open/floor/rogue/grass/red, + /turf/open/floor/rogue/grass/yel, + /turf/open/floor/rogue/grass/cold, + /turf/open/floor/rogue/snow, + /turf/open/floor/rogue/snow/patchy, + /turf/open/floor/rogue/snow/rough) /turf/open/floor/rogue/metal/Initialize() . = ..() @@ -705,7 +1200,22 @@ clawfootstep = FOOTSTEP_SOFT_BAREFOOT heavyfootstep = FOOTSTEP_GENERIC_HEAVY smooth = SMOOTH_MORE - canSmoothWith = list(/turf/closed/mineral/rogue, /turf/closed/mineral, /turf/closed/wall/mineral/rogue/stonebrick, /turf/closed/wall/mineral/rogue/wood, /turf/closed/wall/mineral/rogue/wooddark, /turf/closed/wall/mineral/rogue/stone, /turf/closed/wall/mineral/rogue/stone/moss, /turf/open/floor/rogue/cobble, /turf/open/floor/rogue/dirt, /turf/open/floor/rogue/grass) + canSmoothWith = list(/turf/closed/mineral/rogue, + /turf/closed/mineral, + /turf/closed/wall/mineral/rogue/stonebrick, + /turf/closed/wall/mineral/rogue/wood, + /turf/closed/wall/mineral/rogue/wooddark, + /turf/closed/wall/mineral/rogue/stone, + /turf/closed/wall/mineral/rogue/stone/moss, + /turf/open/floor/rogue/cobble, + /turf/open/floor/rogue/dirt, + /turf/open/floor/rogue/grass, + /turf/open/floor/rogue/grass/red, + /turf/open/floor/rogue/grass/yel, + /turf/open/floor/rogue/grass/cold, + /turf/open/floor/rogue/snow, + /turf/open/floor/rogue/snow/patchy, + /turf/open/floor/rogue/snow/rough) /turf/open/floor/rogue/carpet/lord icon_state = "" @@ -742,6 +1252,9 @@ /turf/open/floor/rogue/carpet/lord/right icon_state = "carpet_r" +/turf/open/floor/rogue/carpet/green + icon_state = "carpet_inn" + /turf/open/floor/rogue/shroud name = "treetop" icon_state = "treetop1" @@ -781,3 +1294,31 @@ /turf/open/floor/rogue/plank/h icon_state = "plank2" + +/* .................. Misc ................... */ +/turf/open/floor/rogue/ruinedwood/darker // here problem was opposite, too bright wood for bandit lair + color = "#d9c9b0" +/turf/open/floor/rogue/ruinedwood/turned/darker + color = "#d9c9b0" + +/turf/open/floor/rogue/tile/kitchen // faded kitchen, too dark floors look bad IMO, this much nicer + icon_state = "tavern" + + +/turf/open/floor/rogue/tile/checker_green + icon_state = "tile" + color = "#94df5b" + +/turf/open/water/bath/pool + desc = "Clear water, pleasant temperature. Soothing." + icon_state = "bathtile_pool" +/turf/open/water/bath/pool/Initialize() + . = ..() + icon_state = "bathtile_pool" + +/turf/open/water/bath/pool/mid + icon_state = "bathtile_pool_mid" +/turf/open/water/bath/pool/mid/Initialize() + . = ..() + icon_state = "bathtile_pool_mid" +/* ................................................ */ diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm index 2fa5961ab5..3b7949b4e1 100644 --- a/code/game/turfs/open/lava.dm +++ b/code/game/turfs/open/lava.dm @@ -8,7 +8,7 @@ baseturfs = /turf/open/lava //lava all the way down slowdown = 2 - light_range = 4 + light_outer_range = 4 light_power = 0.75 light_color = LIGHT_COLOR_LAVA bullet_bounce_sound = 'sound/blank.ogg' @@ -73,20 +73,6 @@ if(!burn_stuff()) STOP_PROCESSING(SSobj, src) -/turf/open/lava/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - switch(the_rcd.mode) - if(RCD_FLOORWALL) - return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 3) - return FALSE - -/turf/open/lava/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) - switch(passed_mode) - if(RCD_FLOORWALL) - to_chat(user, "I build a floor.") - PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) - return TRUE - return FALSE - /turf/open/lava/singularity_act() return @@ -201,7 +187,7 @@ /turf/open/lava/acid name = "acid" icon_state = "acid" - light_range = 4 + light_outer_range = 4 light_power = 1 light_color = "#56ff0d" diff --git a/code/game/turfs/open/openspace.dm b/code/game/turfs/open/openspace.dm index 7de6a665ca..709fb87d3f 100644 --- a/code/game/turfs/open/openspace.dm +++ b/code/game/turfs/open/openspace.dm @@ -187,27 +187,6 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr else to_chat(user, "The plating is going to need some support! Place metal rods first.") -/turf/open/transparent/openspace/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - if(!CanBuildHere()) - return FALSE - - switch(the_rcd.mode) - if(RCD_FLOORWALL) - var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) - if(L) - return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 1) - else - return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 3) - return FALSE - -/turf/open/transparent/openspace/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) - switch(passed_mode) - if(RCD_FLOORWALL) - to_chat(user, "I build a floor.") - PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) - return TRUE - return FALSE - /turf/open/transparent/openspace/bullet_act(obj/projectile/P) if(!P.arcshot) return ..() diff --git a/code/game/turfs/open/space/space.dm b/code/game/turfs/open/space/space.dm index 2c7aa5ccf8..d38ed5faf2 100644 --- a/code/game/turfs/open/space/space.dm +++ b/code/game/turfs/open/space/space.dm @@ -28,7 +28,6 @@ icon_state = SPACE_ICON_STATE // air = space_gas vis_contents.Cut() //removes inherited overlays - visibilityChanged() // if(flags_1 & INITIALIZED_1) // stack_trace("Warning: [src]([type]) initialized multiple times!") @@ -41,7 +40,7 @@ // if(requires_activation) // SSair.add_to_active(src) - if (light_power && light_range) + if (light_system == STATIC_LIGHT && light_power && (light_outer_range || light_inner_range)) update_light() if (opacity) @@ -194,28 +193,6 @@ underlay_appearance.plane = PLANE_SPACE return TRUE - -/turf/open/space/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - if(!CanBuildHere()) - return FALSE - - switch(the_rcd.mode) - if(RCD_FLOORWALL) - var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) - if(L) - return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 1) - else - return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 3) - return FALSE - -/turf/open/space/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) - switch(passed_mode) - if(RCD_FLOORWALL) - to_chat(user, "I build a floor.") - PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) - return TRUE - return FALSE - /turf/open/space/ReplaceWithLattice() var/dest_x = destination_x var/dest_y = destination_y diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index b2fb86e6d2..766cfd2545 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -76,7 +76,6 @@ levelupdate() if(smooth) queue_smooth(src) - visibilityChanged() for(var/atom/movable/AM in src) Entered(AM) @@ -89,7 +88,7 @@ CALCULATE_ADJACENT_TURFS(src) SSair.add_to_active(src) - if (light_power && light_range) + if (light_power && (light_outer_range || light_inner_range)) update_light() if(turf_integrity == null) @@ -103,7 +102,8 @@ if(T) T.multiz_turf_new(src, UP) SEND_SIGNAL(T, COMSIG_TURF_MULTIZ_NEW, src, UP) - + if(!mapload) + reassess_stack() if (opacity) has_opaque_atom = TRUE @@ -140,7 +140,6 @@ B.vars[I] = null return SSair.remove_from_active(src) - visibilityChanged() QDEL_LIST(blueprint_data) flags_1 &= ~INITIALIZED_1 requires_activation = FALSE @@ -229,8 +228,10 @@ user.Move_Pulled(src) /turf/proc/multiz_turf_del(turf/T, dir) + reassess_stack() /turf/proc/multiz_turf_new(turf/T, dir) + reassess_stack() //zPassIn doesn't necessarily pass an atom! //direction is direction of travel of air @@ -263,7 +264,7 @@ return if(zFall(A, ++levels)) return FALSE - if(isliving(A)) + if(isliving(A)) var/mob/living/O = A var/dex_save = O.mind?.get_skill_level(/datum/skill/misc/climbing) if(dex_save >= 5) @@ -318,36 +319,9 @@ target.zImpact(A, levels, src) return TRUE -/turf/proc/handleRCL(obj/item/twohanded/rcl/C, mob/user) - if(C.loaded) - for(var/obj/structure/pipe_cleaner/LC in src) - if(!LC.d1 || !LC.d2) - LC.handlecable(C, user) - return - C.loaded.place_turf(src, user) - if(C.wiring_gui_menu) - C.wiringGuiUpdate(user) - C.is_empty(user) - /turf/attackby(obj/item/C, mob/user, params) if(..()) return TRUE - if(can_lay_cable() && istype(C, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/coil = C - coil.place_turf(src, user) - return TRUE - else if(can_have_cabling() && istype(C, /obj/item/stack/pipe_cleaner_coil)) - var/obj/item/stack/pipe_cleaner_coil/coil = C - for(var/obj/structure/pipe_cleaner/LC in src) - if(!LC.d1 || !LC.d2) - LC.attackby(C, user) - return - coil.place_turf(src, user) - return TRUE - - else if(istype(C, /obj/item/twohanded/rcl)) - handleRCL(C, user) - return FALSE /turf/CanPass(atom/movable/mover, turf/target) @@ -562,17 +536,6 @@ /turf/proc/can_lay_cable() return can_have_cabling() & !intact -/turf/proc/visibilityChanged() - GLOB.cameranet.updateVisibility(src) - // The cameranet usually handles this for us, but if we've just been - // recreated we should make sure we have the cameranet vis_contents. - var/datum/camerachunk/C = GLOB.cameranet.chunkGenerated(x, y, z) - if(C) - if(C.obscuredTurfs[src]) - vis_contents += GLOB.cameranet.vis_contents_objects - else - vis_contents -= GLOB.cameranet.vis_contents_objects - /turf/proc/burn_tile() /turf/proc/is_shielded() @@ -635,8 +598,6 @@ /turf/acid_act(acidpwr, acid_volume) . = 1 var/acid_type = /obj/effect/acid - if(acidpwr >= 200) //alien acid power - acid_type = /obj/effect/acid/alien var/has_acid_effect = FALSE for(var/obj/O in src) if(intact && O.level == 1) //hidden under the floor diff --git a/code/game/world.dm b/code/game/world.dm index 1dcc6e613b..0af957c20f 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -314,7 +314,7 @@ GLOBAL_VAR(restart_counter) #ifdef MATURESERVER s += "STONEKEEP (18+) (Immersive RP)
    " s += "Dark Medieval Fantasy Roleplay
    " - s += "New Map: Dun Manor
    " + s += "New Map: StoneHamlet
    " s += "Whitelist Enabled: discord.gg/stonekeep

  • " //s += "Powerbottoms Welcome
    " #else diff --git a/code/modules/NTNet/netdata.dm b/code/modules/NTNet/netdata.dm deleted file mode 100644 index 2a3a85f706..0000000000 --- a/code/modules/NTNet/netdata.dm +++ /dev/null @@ -1,44 +0,0 @@ -/datum/netdata //this requires some thought later on but for now it's fine. - var/network_id - - var/autopasskey = TRUE - - var/list/recipient_ids = list() - var/sender_id - var/broadcast = FALSE //Whether this is a broadcast packet. - - var/list/data = list() - - var/list/passkey - -/datum/netdata/proc/standard_format_data(primary, secondary, passkey) - data["data"] = primary - data["data_secondary"] = secondary - data["encrypted_passkey"] = passkey - -/datum/netdata/proc/json_to_data(json) - data = json_decode(json) - -/datum/netdata/proc/json_append_to_data(json) - data |= json_decode(json) - -/datum/netdata/proc/data_to_json() - return json_encode(data) - -/datum/netdata/proc/json_list_generation_admin() //for admin logs and such. - . = list() - . |= json_list_generation() - -/datum/netdata/proc/json_list_generation() - . = list() - . |= json_list_generation_netlog() - .["network_id"] = network_id - -/datum/netdata/proc/json_list_generation_netlog() - . = list() - .["recipient_ids"] = recipient_ids - .["sender_id"] = sender_id - .["data_list"] = data - -/datum/netdata/proc/generate_netlog() - return "[json_encode(json_list_generation_netlog())]" diff --git a/code/modules/NTNet/network.dm b/code/modules/NTNet/network.dm deleted file mode 100644 index ae8948dafb..0000000000 --- a/code/modules/NTNet/network.dm +++ /dev/null @@ -1,251 +0,0 @@ -/datum/ntnet - var/network_id = "Network" - var/list/connected_interfaces_by_id = list() //id = datum/component/ntnet_interface - var/list/services_by_path = list() //type = datum/ntnet_service - var/list/services_by_id = list() //id = datum/ntnet_service - - var/list/autoinit_service_paths = list() //typepaths - - - var/list/relays = list() - var/list/logs = list() - var/list/available_station_software = list() - var/list/available_antag_software = list() - var/list/chat_channels = list() - var/list/fileservers = list() - // Amount of logs the system tries to keep in memory. Keep below 999 to prevent byond from acting weirdly. - // High values make displaying logs much laggier. - var/setting_maxlogcount = 100 - - // These only affect wireless. LAN (consoles) are unaffected since it would be possible to create scenario where someone turns off NTNet, and is unable to turn it back on since it refuses connections - var/setting_softwaredownload = TRUE - var/setting_peertopeer = TRUE - var/setting_communication = TRUE - var/setting_systemcontrol = TRUE - var/setting_disabled = FALSE // Setting to 1 will disable all wireless, independently on relays status. - - var/intrusion_detection_enabled = TRUE // Whether the IDS warning system is enabled - var/intrusion_detection_alarm = FALSE // Set when there is an IDS warning due to malicious (antag) software. - -// If new NTNet datum is spawned, it replaces the old one. -/datum/ntnet/New(_netid) - build_software_lists() - add_log("NTNet logging system activated.") - if(_netid) - network_id = _netid - if(!SSnetworks.register_network(src)) - stack_trace("Network [type] with ID [network_id] failed to register and has been deleted.") - qdel(src) - -/datum/ntnet/Destroy() - for(var/i in connected_interfaces_by_id) - var/datum/component/ntnet_interface/I = i - I.unregister_connection(src) - for(var/i in services_by_id) - var/datum/ntnet_service/S = i - S.disconnect(src, TRUE) - return ..() - -/datum/ntnet/proc/interface_connect(datum/component/ntnet_interface/I) - if(connected_interfaces_by_id[I.hardware_id]) - return FALSE - connected_interfaces_by_id[I.hardware_id] = I - return TRUE - -/datum/ntnet/proc/interface_disconnect(datum/component/ntnet_interface/I) - connected_interfaces_by_id -= I.hardware_id - return TRUE - -/datum/ntnet/proc/find_interface_id(id) - return connected_interfaces_by_id[id] - -/datum/ntnet/proc/find_service_id(id) - return services_by_id[id] - -/datum/ntnet/proc/find_service_path(path) - return services_by_path[path] - -/datum/ntnet/proc/register_service(datum/ntnet_service/S) - if(!istype(S)) - return FALSE - if(services_by_path[S.type] || services_by_id[S.id]) - return FALSE - services_by_path[S.type] = S - services_by_id[S.id] = S - return TRUE - -/datum/ntnet/proc/unregister_service(datum/ntnet_service/S) - if(!istype(S)) - return FALSE - services_by_path -= S.type - services_by_id -= S.id - return TRUE - -/datum/ntnet/proc/create_service(type) - var/datum/ntnet_service/S = new type - if(!istype(S)) - return FALSE - . = S.connect(src) - if(!.) - qdel(S) - -/datum/ntnet/proc/destroy_service(type) - var/datum/ntnet_service/S = find_service_path(type) - if(!istype(S)) - return FALSE - . = S.disconnect(src) - if(.) - qdel(src) - -/datum/ntnet/proc/process_data_transmit(datum/component/ntnet_interface/sender, datum/netdata/data) - if(!check_relay_operation()) - return FALSE - data.network_id = src - log_data_transfer(data) - var/list/datum/component/ntnet_interface/receiving = list() - if((length(data.recipient_ids == 1) && data.recipient_ids[1] == NETWORK_BROADCAST_ID) || data.recipient_ids == NETWORK_BROADCAST_ID) - data.broadcast = TRUE - for(var/i in connected_interfaces_by_id) - receiving |= connected_interfaces_by_id[i] - else - for(var/i in data.recipient_ids) - var/datum/component/ntnet_interface/receiver = find_interface_id(i) - receiving |= receiver - - for(var/i in receiving) - var/datum/component/ntnet_interface/receiver = i - if(receiver) - receiver.__network_receive(data) - - for(var/i in services_by_id) - var/datum/ntnet_service/serv = services_by_id[i] - serv.ntnet_intercept(data, src, sender) - - return TRUE - -/datum/ntnet/proc/check_relay_operation(zlevel) //can be expanded later but right now it's true/false. - for(var/i in relays) - var/obj/machinery/ntnet_relay/n = i - if(zlevel && n.z != zlevel) - continue - if(n.is_operational()) - return TRUE - return FALSE - -/datum/ntnet/proc/log_data_transfer(datum/netdata/data) - logs += "[station_time_timestamp()] - [data.generate_netlog()]" - if(logs.len > setting_maxlogcount) - logs = logs.Copy(logs.len - setting_maxlogcount, 0) - return - -// Simplified logging: Adds a log. log_string is mandatory parameter, source is optional. -/datum/ntnet/proc/add_log(log_string, obj/item/computer_hardware/network_card/source = null) - var/log_text = "[station_time_timestamp()] - " - if(source) - log_text += "[source.get_network_tag()] - " - else - log_text += "*SYSTEM* - " - log_text += log_string - logs.Add(log_text) - - // We have too many logs, remove the oldest entries until we get into the limit - if(logs.len > setting_maxlogcount) - logs = logs.Copy(logs.len-setting_maxlogcount,0) - - -// Checks whether NTNet operates. If parameter is passed checks whether specific function is enabled. -/datum/ntnet/proc/check_function(specific_action = 0) - if(!relays || !relays.len) // No relays found. NTNet is down - return FALSE - - // Check all relays. If we have at least one working relay, network is up. - if(!check_relay_operation()) - return FALSE - - if(setting_disabled) - return FALSE - - switch(specific_action) - if(NTNET_SOFTWAREDOWNLOAD) - return setting_softwaredownload - if(NTNET_PEERTOPEER) - return setting_peertopeer - if(NTNET_COMMUNICATION) - return setting_communication - if(NTNET_SYSTEMCONTROL) - return setting_systemcontrol - return TRUE - -// Builds lists that contain downloadable software. -/datum/ntnet/proc/build_software_lists() - available_station_software = list() - available_antag_software = list() - for(var/F in typesof(/datum/computer_file/program)) - var/datum/computer_file/program/prog = new F - // Invalid type (shouldn't be possible but just in case), invalid filetype (not executable program) or invalid filename (unset program) - if(!prog || prog.filename == "UnknownProgram" || prog.filetype != "PRG") - continue - // Check whether the program should be available for station/antag download, if yes, add it to lists. - if(prog.available_on_ntnet) - available_station_software.Add(prog) - if(prog.available_on_syndinet) - available_antag_software.Add(prog) - -// Attempts to find a downloadable file according to filename var -/datum/ntnet/proc/find_ntnet_file_by_name(filename) - for(var/N in available_station_software) - var/datum/computer_file/program/P = N - if(filename == P.filename) - return P - for(var/N in available_antag_software) - var/datum/computer_file/program/P = N - if(filename == P.filename) - return P - -// Resets the IDS alarm -/datum/ntnet/proc/resetIDS() - intrusion_detection_alarm = FALSE - -/datum/ntnet/proc/toggleIDS() - resetIDS() - intrusion_detection_enabled = !intrusion_detection_enabled - -// Removes all logs -/datum/ntnet/proc/purge_logs() - logs = list() - add_log("-!- LOGS DELETED BY SYSTEM OPERATOR -!-") - -// Updates maximal amount of stored logs. Use this instead of setting the number, it performs required checks. -/datum/ntnet/proc/update_max_log_count(lognumber) - if(!lognumber) - return FALSE - // Trim the value if necessary - lognumber = max(MIN_NTNET_LOGS, min(lognumber, MAX_NTNET_LOGS)) - setting_maxlogcount = lognumber - add_log("Configuration Updated. Now keeping [setting_maxlogcount] logs in system memory.") - -/datum/ntnet/proc/toggle_function(function) - if(!function) - return - function = text2num(function) - switch(function) - if(NTNET_SOFTWAREDOWNLOAD) - setting_softwaredownload = !setting_softwaredownload - add_log("Configuration Updated. Wireless network firewall now [setting_softwaredownload ? "allows" : "disallows"] connection to software repositories.") - if(NTNET_PEERTOPEER) - setting_peertopeer = !setting_peertopeer - add_log("Configuration Updated. Wireless network firewall now [setting_peertopeer ? "allows" : "disallows"] peer to peer network traffic.") - if(NTNET_COMMUNICATION) - setting_communication = !setting_communication - add_log("Configuration Updated. Wireless network firewall now [setting_communication ? "allows" : "disallows"] instant messaging and similar communication services.") - if(NTNET_SYSTEMCONTROL) - setting_systemcontrol = !setting_systemcontrol - add_log("Configuration Updated. Wireless network firewall now [setting_systemcontrol ? "allows" : "disallows"] remote control of station's systems.") - -/datum/ntnet/station - network_id = "SS13-NTNET" - -/datum/ntnet/station/proc/register_map_supremecy() //called at map init to make this what station networks use. - for(var/obj/machinery/ntnet_relay/R in GLOB.machines) - relays.Add(R) - R.NTNet = src diff --git a/code/modules/NTNet/relays.dm b/code/modules/NTNet/relays.dm deleted file mode 100644 index 22d3d08561..0000000000 --- a/code/modules/NTNet/relays.dm +++ /dev/null @@ -1,119 +0,0 @@ -// Relays don't handle any actual communication. Global NTNet datum does that, relays only tell the datum if it should or shouldn't work. -/obj/machinery/ntnet_relay - name = "NTNet Quantum Relay" - desc = "" - use_power = ACTIVE_POWER_USE - active_power_usage = 10000 //10kW, apropriate for machine that keeps massive cross-Zlevel wireless network operational. Used to be 20 but that actually drained the smes one round - idle_power_usage = 100 - icon = 'icons/obj/machines/telecomms.dmi' - icon_state = "bus" - density = TRUE - circuit = /obj/item/circuitboard/machine/ntnet_relay - ui_x = 500 - ui_y = 300 - - var/datum/ntnet/NTNet = null // This is mostly for backwards reference and to allow varedit modifications from ingame. - var/enabled = 1 // Set to 0 if the relay was turned off - var/dos_failure = 0 // Set to 1 if the relay failed due to (D)DoS attack - var/list/dos_sources = list() // Backwards reference for qdel() stuff - var/uid - var/static/gl_uid = 1 - - // Denial of Service attack variables - var/dos_overload = 0 // Amount of DoS "packets" in this relay's buffer - var/dos_capacity = 500 // Amount of DoS "packets" in buffer required to crash the relay - var/dos_dissipate = 1 // Amount of DoS "packets" dissipated over time. - - -// TODO: Implement more logic here. For now it's only a placeholder. -/obj/machinery/ntnet_relay/is_operational() - if(stat & (BROKEN | NOPOWER | EMPED)) - return FALSE - if(dos_failure) - return FALSE - if(!enabled) - return FALSE - return TRUE - -/obj/machinery/ntnet_relay/update_icon() - if(is_operational()) - icon_state = "bus" - else - icon_state = "bus_off" - -/obj/machinery/ntnet_relay/process() - if(is_operational()) - use_power = ACTIVE_POWER_USE - else - use_power = IDLE_POWER_USE - - update_icon() - - if(dos_overload) - dos_overload = max(0, dos_overload - dos_dissipate) - - // If DoS traffic exceeded capacity, crash. - if((dos_overload > dos_capacity) && !dos_failure) - dos_failure = 1 - update_icon() - SSnetworks.station_network.add_log("Quantum relay switched from normal operation mode to overload recovery mode.") - // If the DoS buffer reaches 0 again, restart. - if((dos_overload == 0) && dos_failure) - dos_failure = 0 - update_icon() - SSnetworks.station_network.add_log("Quantum relay switched from overload recovery mode to normal operation mode.") - ..() - -/obj/machinery/ntnet_relay/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - - if(!ui) - ui = new(user, src, ui_key, "ntnet_relay", "NTNet Quantum Relay", ui_x, ui_y, master_ui, state) - ui.open() - - -/obj/machinery/ntnet_relay/ui_data(mob/user) - var/list/data = list() - data["enabled"] = enabled - data["dos_capacity"] = dos_capacity - data["dos_overload"] = dos_overload - data["dos_crashed"] = dos_failure - return data - - -/obj/machinery/ntnet_relay/ui_act(action, params) - if(..()) - return - switch(action) - if("restart") - dos_overload = 0 - dos_failure = 0 - update_icon() - SSnetworks.station_network.add_log("Quantum relay manually restarted from overload recovery mode to normal operation mode.") - if("toggle") - enabled = !enabled - SSnetworks.station_network.add_log("Quantum relay manually [enabled ? "enabled" : "disabled"].") - update_icon() - -/obj/machinery/ntnet_relay/Initialize() - uid = gl_uid++ - component_parts = list() - - if(SSnetworks.station_network) - SSnetworks.station_network.relays.Add(src) - NTNet = SSnetworks.station_network - SSnetworks.station_network.add_log("New quantum relay activated. Current amount of linked relays: [NTNet.relays.len]") - . = ..() - -/obj/machinery/ntnet_relay/Destroy() - if(SSnetworks.station_network) - SSnetworks.station_network.relays.Remove(src) - SSnetworks.station_network.add_log("Quantum relay connection severed. Current amount of linked relays: [NTNet.relays.len]") - NTNet = null - - for(var/datum/computer_file/program/ntnet_dos/D in dos_sources) - D.target = null - D.error = "Connection to quantum relay severed" - - return ..() diff --git a/code/modules/NTNet/services/_service.dm b/code/modules/NTNet/services/_service.dm deleted file mode 100644 index 75059d9992..0000000000 --- a/code/modules/NTNet/services/_service.dm +++ /dev/null @@ -1,38 +0,0 @@ -/datum/ntnet_service - var/name = "Unidentified Network Service" - var/id - var/list/networks_by_id = list() //Yes we support multinetwork services! - -/datum/ntnet_service/New() - var/datum/component/ntnet_interface/N = AddComponent(/datum/component/ntnet_interface, id, name, FALSE) - id = N.hardware_id - -/datum/ntnet_service/Destroy() - for(var/i in networks_by_id) - var/datum/ntnet/N = i - disconnect(N, TRUE) - networks_by_id = null - return ..() - -/datum/ntnet_service/proc/connect(datum/ntnet/net) - if(!istype(net)) - return FALSE - var/datum/component/ntnet_interface/interface = GetComponent(/datum/component/ntnet_interface) - if(!interface.register_connection(net)) - return FALSE - if(!net.register_service(src)) - interface.unregister_connection(net) - return FALSE - networks_by_id[net.network_id] = net - return TRUE - -/datum/ntnet_service/proc/disconnect(datum/ntnet/net, force = FALSE) - if(!istype(net) || (!net.unregister_service(src) && !force)) - return FALSE - var/datum/component/ntnet_interface/interface = GetComponent(/datum/component/ntnet_interface) - interface.unregister_connection(net) - networks_by_id -= net.network_id - return TRUE - -/datum/ntnet_service/proc/ntnet_intercept(datum/netdata/data, datum/ntnet/net, datum/component/ntnet_interface/sender) - return diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 226dc74ae8..5e9267416c 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -64,8 +64,6 @@ body += "TP - " else body += "Init Mind - " - if (iscyborg(M)) - body += "BP - " body += "PM - " body += "SM - " if (ishuman(M) && M.mind) @@ -133,10 +131,7 @@ else body += "Corgize | " - //AI / Cyborg - if(isAI(M)) - body += "Is an AI " - else if(ishuman(M)) + if(ishuman(M)) body += "Make AI | " body += "Make Robot | " body += "Make Alien | " @@ -211,7 +206,7 @@ if(!check_rights()) return - + if(!M.ckey) to_chat(src, "There is no ckey attached to this mob.") return @@ -225,7 +220,7 @@ if(!check_rights()) return - + var/S = M.IsSleeping() if(S) M.remove_status_effect(S) @@ -261,7 +256,7 @@ if(!check_rights()) return - + if(!M.ckey) to_chat(src, "There is no ckey attached to this mob.") return @@ -269,9 +264,10 @@ var/ckey = lowertext(M.ckey) var/admin = lowertext(usr.key) - if(ckey == admin) + /*if(ckey == admin) to_chat(src, "That's you!") return + */ if(!fexists("data/player_saves/[copytext(ckey,1,2)]/[ckey]/preferences.sav")) to_chat(src, "User does not exist.") return @@ -284,214 +280,6 @@ adjust_playerquality(amt2change, ckey, admin, raisin) to_chat(M.client, "ADMIN LOG: Your PQ has been adjusted by [amt2change] by [admin] for reason: [raisin]") -/datum/admins/proc/access_news_network() //MARKER - set category = "Fun" - set name = "Access Newscaster Network" - set desc = "" - - if (!istype(src, /datum/admins)) - src = usr.client.holder - if (!istype(src, /datum/admins)) - to_chat(usr, "Error: you are not an admin!") - return - var/dat - dat = text("Admin Newscaster

    Admin Newscaster Unit

    ") - - switch(admincaster_screen) - if(0) - dat += "Welcome to the admin newscaster.
    Here you can add, edit and censor every newspiece on the network." - dat += "
    Feed channels and stories entered through here will be uneditable and handled as official news by the rest of the units." - dat += "
    Note that this panel allows full freedom over the news network, there are no constrictions except the few basic ones. Don't break things!
    " - if(GLOB.news_network.wanted_issue.active) - dat+= "
    Read Wanted Issue" - dat+= "

    Create Feed Channel" - dat+= "
    View Feed Channels" - dat+= "
    Submit new Feed story" - dat+= "

    Exit" - var/wanted_already = 0 - if(GLOB.news_network.wanted_issue.active) - wanted_already = 1 - dat+="
    Feed Security functions:
    " - dat+="
    [(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue" - dat+="
    Censor Feed Stories" - dat+="
    Mark Feed Channel with Nanotrasen D-Notice (disables and locks the channel)." - dat+="

    The newscaster recognises you as:
    [src.admin_signature]
    " - if(1) - dat+= "Station Feed Channels
    " - if( isemptylist(GLOB.news_network.network_channels) ) - dat+="No active channels found..." - else - for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) - if(CHANNEL.is_admin_channel) - dat+="[CHANNEL.channel_name]
    " - else - dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ""]
    " - dat+="

    Refresh" - dat+="
    Back" - if(2) - dat+="Creating new Feed Channel..." - dat+="
    Channel Name: [src.admincaster_feed_channel.channel_name]
    " - dat+="Channel Author: [src.admin_signature]
    " - dat+="Will Accept Public Feeds: [(src.admincaster_feed_channel.locked) ? ("NO") : ("YES")]

    " - dat+="
    Submit

    Cancel
    " - if(3) - dat+="Creating new Feed Message..." - dat+="
    Receiving Channel: [src.admincaster_feed_channel.channel_name]
    " //MARK - dat+="Message Author: [src.admin_signature]
    " - dat+="Message Body: [src.admincaster_feed_message.returnBody(-1)]
    " - dat+="
    Submit

    Cancel
    " - if(4) - dat+="Feed story successfully submitted to [src.admincaster_feed_channel.channel_name].

    " - dat+="
    Return
    " - if(5) - dat+="Feed Channel [src.admincaster_feed_channel.channel_name] created successfully.

    " - dat+="
    Return
    " - if(6) - dat+="ERROR: Could not submit Feed story to Network.

    " - if(src.admincaster_feed_channel.channel_name=="") - dat+="•Invalid receiving channel name.
    " - if(src.admincaster_feed_message.returnBody(-1) == "" || src.admincaster_feed_message.returnBody(-1) == "\[REDACTED\]") - dat+="•Invalid message body.
    " - dat+="
    Return
    " - if(7) - dat+="ERROR: Could not submit Feed Channel to Network.

    " - if(src.admincaster_feed_channel.channel_name =="" || src.admincaster_feed_channel.channel_name == "\[REDACTED\]") - dat+="•Invalid channel name.
    " - var/check = 0 - for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) - if(FC.channel_name == src.admincaster_feed_channel.channel_name) - check = 1 - break - if(check) - dat+="•Channel name already in use.
    " - dat+="
    Return
    " - if(9) - dat+="[admincaster_feed_channel.channel_name]: \[created by: [admincaster_feed_channel.returnAuthor(-1)]\]
    " - if(src.admincaster_feed_channel.censored) - dat+="ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.
    " - dat+="No further feed story additions are allowed while the D-Notice is in effect.


    " - else - if( isemptylist(src.admincaster_feed_channel.messages) ) - dat+="No feed messages found in channel...
    " - else - var/i = 0 - for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages) - i++ - dat+="-[MESSAGE.returnBody(-1)]
    " - if(MESSAGE.img) - usr << browse_rsc(MESSAGE.img, "tmp_photo[i].png") - dat+="

    " - dat+="\[Story by [MESSAGE.returnAuthor(-1)]\]
    " - dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""]:
    " - for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments) - dat+="[comment.body]
    [comment.author] [comment.time_stamp]
    " - dat+="
    " - dat+="

    Refresh" - dat+="
    Back" - if(10) - dat+="Nanotrasen Feed Censorship Tool
    " - dat+="NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.
    " - dat+="Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.
    " - dat+="
    Select Feed channel to get Stories from:
    " - if(isemptylist(GLOB.news_network.network_channels)) - dat+="No feed channels found active...
    " - else - for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) - dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ""]
    " - dat+="
    Cancel" - if(11) - dat+="Nanotrasen D-Notice Handler
    " - dat+="A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's" - dat+="morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed" - dat+="stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.
    " - if(isemptylist(GLOB.news_network.network_channels)) - dat+="No feed channels found active...
    " - else - for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels) - dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ""]
    " - - dat+="
    Back" - if(12) - dat+="[src.admincaster_feed_channel.channel_name]: \[ created by: [src.admincaster_feed_channel.returnAuthor(-1)] \]
    " - dat+="[(src.admincaster_feed_channel.authorCensor) ? ("Undo Author censorship") : ("Censor channel Author")]
    " - - if( isemptylist(src.admincaster_feed_channel.messages) ) - dat+="No feed messages found in channel...
    " - else - for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages) - dat+="-[MESSAGE.returnBody(-1)]
    \[Story by [MESSAGE.returnAuthor(-1)]\]
    " - dat+="[(MESSAGE.bodyCensor) ? ("Undo story censorship") : ("Censor story")] - [(MESSAGE.authorCensor) ? ("Undo Author Censorship") : ("Censor message Author")]
    " - dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""]: [MESSAGE.locked ? "Unlock" : "Lock"]
    " - for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments) - dat+="[comment.body] X
    [comment.author] [comment.time_stamp]
    " - dat+="
    Back" - if(13) - dat+="[src.admincaster_feed_channel.channel_name]: \[ created by: [src.admincaster_feed_channel.returnAuthor(-1)] \]
    " - dat+="Channel messages listed below. If you deem them dangerous to the station, you can Bestow a D-Notice upon the channel.
    " - if(src.admincaster_feed_channel.censored) - dat+="ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.
    " - dat+="No further feed story additions are allowed while the D-Notice is in effect.

    " - else - if( isemptylist(src.admincaster_feed_channel.messages) ) - dat+="No feed messages found in channel...
    " - else - for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages) - dat+="-[MESSAGE.returnBody(-1)]
    \[Story by [MESSAGE.returnAuthor(-1)]\]
    " - dat+="
    Back" - if(14) - dat+="Wanted Issue Handler:" - var/wanted_already = 0 - var/end_param = 1 - if(GLOB.news_network.wanted_issue.active) - wanted_already = 1 - end_param = 2 - if(wanted_already) - dat+="
    A wanted issue is already in Feed Circulation. You can edit or cancel it below.
    " - dat+="
    " - dat+="Criminal Name: [src.admincaster_wanted_message.criminal]
    " - dat+="Description: [src.admincaster_wanted_message.body]
    " - if(wanted_already) - dat+="Wanted Issue created by:[GLOB.news_network.wanted_issue.scannedUser]
    " - else - dat+="Wanted Issue will be created under prosecutor:[src.admin_signature]
    " - dat+="
    [(wanted_already) ? ("Edit Issue") : ("Submit")]" - if(wanted_already) - dat+="
    Take down Issue" - dat+="
    Cancel" - if(15) - dat+="Wanted issue for [src.admincaster_wanted_message.criminal] is now in Network Circulation.

    " - dat+="
    Return
    " - if(16) - dat+="ERROR: Wanted Issue rejected by Network.

    " - if(src.admincaster_wanted_message.criminal =="" || src.admincaster_wanted_message.criminal == "\[REDACTED\]") - dat+="•Invalid name for person wanted.
    " - if(src.admincaster_wanted_message.body == "" || src.admincaster_wanted_message.body == "\[REDACTED\]") - dat+="•Invalid description.
    " - dat+="
    Return
    " - if(17) - dat+="Wanted Issue successfully deleted from Circulation
    " - dat+="
    Return
    " - if(18) - dat+="-- STATIONWIDE WANTED ISSUE --
    \[Submitted by: [GLOB.news_network.wanted_issue.scannedUser]\]
    " - dat+="Criminal: [GLOB.news_network.wanted_issue.criminal]
    " - dat+="Description: [GLOB.news_network.wanted_issue.body]
    " - dat+="Photo:: " - if(GLOB.news_network.wanted_issue.img) - usr << browse_rsc(GLOB.news_network.wanted_issue.img, "tmp_photow.png") - dat+="
    " - else - dat+="None" - dat+="
    Back
    " - if(19) - dat+="Wanted issue for [src.admincaster_wanted_message.criminal] successfully edited.

    " - dat+="
    Return
    " - else - dat+="I'm sorry to break your immersion. This shit's bugged. Report this bug to Agouri, polyxenitopalidou@gmail.com" - - usr << browse(dat, "window=admincaster_main;size=400x600") - onclose(usr, "admincaster_main") - - /datum/admins/proc/Game() if(!check_rights(0)) return @@ -678,7 +466,7 @@ [usr.key] has forced the gamemode.") return SSticker.manualmodes |= choice - GLOB.roguegamemodes -= choice + GLOB.roguegamemodes -= choice else to_chat(usr, "Error: Force Modes: Game has already started.") @@ -874,28 +662,6 @@ message_admins("[key_name_admin(usr)] toggled guests game entering [!new_guest_ban ? "" : "dis"]allowed.") SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Guests", "[!new_guest_ban ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/datum/admins/proc/output_ai_laws() - var/ai_number = 0 - for(var/i in GLOB.silicon_mobs) - var/mob/living/silicon/S = i - ai_number++ - if(isAI(S)) - to_chat(usr, "AI [key_name(S, usr)]'s laws:") - else if(iscyborg(S)) - var/mob/living/silicon/robot/R = S - to_chat(usr, "CYBORG [key_name(S, usr)] [R.connected_ai?"(Slaved to: [key_name(R.connected_ai)])":"(Independent)"]: laws:") - else if (ispAI(S)) - to_chat(usr, "pAI [key_name(S, usr)]'s laws:") - else - to_chat(usr, "SOMETHING SILICON [key_name(S, usr)]'s laws:") - - if (S.laws == null) - to_chat(usr, "[key_name(S, usr)]'s laws are null?? Contact a coder.") - else - S.laws.show_laws(usr) - if(!ai_number) - to_chat(usr, "No AIs located" ) - /datum/admins/proc/output_all_devil_info() var/devil_number = 0 for(var/datum/mind/D in SSticker.mode.devils) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 052ff5ac3e..87ea141b8f 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -56,7 +56,6 @@ GLOBAL_PROTECT(admin_verbs_admin) // /datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/ // /datum/verbs/menu/Admin/verb/playerpanel, /client/proc/game_panel, /*game panel, allows to change game-mode etc*/ - /client/proc/check_ai_laws, /*shows AI and borg laws*/ /datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/ /datum/admins/proc/toggleoocdead, /*toggles ooc on/off for everyone who is dead*/ /datum/admins/proc/toggleenter, /*toggles whether people can join the current game*/ @@ -76,7 +75,6 @@ GLOBAL_PROTECT(admin_verbs_admin) /client/proc/cmd_admin_check_contents, /*displays the contents of an instance*/ /client/proc/centcom_podlauncher,/*Open a window to launch a Supplypod and configure it or it's contents*/ /client/proc/check_antagonists, /*shows all antags*/ - /datum/admins/proc/access_news_network, /*allows access of newscasters*/ /client/proc/jumptocoord, /*we ghost and jump to a coordinate*/ /client/proc/Getmob, /*teleports a mob to our location*/ /client/proc/Getkey, /*teleports a mob with a certain ckey to our location*/ @@ -104,7 +102,6 @@ GLOBAL_PROTECT(admin_verbs_admin) /client/proc/toggleadminhelpsound, /client/proc/respawn_character, /client/proc/discord_id_manipulation, - /datum/admins/proc/open_borgopanel, /client/proc/ShowAllFamilies, ) GLOBAL_LIST_INIT(admin_verbs_ban, list(/client/proc/unban_panel, /client/proc/ban_panel, /client/proc/stickybanpanel, /client/proc/check_pq, /client/proc/adjust_pq, /client/proc/getcurrentlogs, /client/proc/getserverlogs)) @@ -125,8 +122,8 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list( /client/proc/reset_ooc, /client/proc/forceEvent, /client/proc/admin_change_sec_level, - /client/proc/toggle_nuke, /client/proc/run_weather, + /client/proc/run_particle_weather, /client/proc/mass_zombie_infection, /client/proc/mass_zombie_cure, /client/proc/polymorph_all, @@ -135,7 +132,7 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list( /client/proc/admin_away )) GLOBAL_PROTECT(admin_verbs_fun) -GLOBAL_LIST_INIT(admin_verbs_spawn, list(/datum/admins/proc/spawn_atom, /datum/admins/proc/podspawn_atom, /datum/admins/proc/spawn_cargo, /datum/admins/proc/spawn_objasmob, /client/proc/respawn_character, /datum/admins/proc/beaker_panel)) +GLOBAL_LIST_INIT(admin_verbs_spawn, list(/datum/admins/proc/spawn_atom, /datum/admins/proc/podspawn_atom, /datum/admins/proc/spawn_cargo, /client/proc/respawn_character, /datum/admins/proc/beaker_panel)) GLOBAL_PROTECT(admin_verbs_spawn) GLOBAL_LIST_INIT(admin_verbs_server, world.AVerbsServer()) GLOBAL_PROTECT(admin_verbs_server) @@ -164,7 +161,6 @@ GLOBAL_PROTECT(admin_verbs_debug) /client/proc/restart_controller, /client/proc/cmd_admin_list_open_jobs, /client/proc/Debug2, - /client/proc/cmd_debug_make_powernets, /client/proc/cmd_debug_mob_lists, /client/proc/cmd_admin_delete, /client/proc/cmd_debug_del_all, @@ -177,14 +173,12 @@ GLOBAL_PROTECT(admin_verbs_debug) /client/proc/test_snap_UI, /client/proc/debugNatureMapGenerator, /client/proc/check_bomb_impacts, - /proc/machine_upgrade, /client/proc/populate_world, /client/proc/get_dynex_power, //*debug verbs for dynex explosions. /client/proc/get_dynex_range, //*debug verbs for dynex explosions. /client/proc/set_dynex_scale, /client/proc/cmd_display_del_log, /client/proc/outfit_manager, - /client/proc/modify_goals, /client/proc/debug_huds, /client/proc/map_template_load, /client/proc/map_template_upload, @@ -222,7 +216,6 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list( /client/proc/cmd_admin_subtle_message, /client/proc/cmd_admin_headset_message, /client/proc/cmd_admin_check_contents, - /datum/admins/proc/access_news_network, /client/proc/admin_call_shuttle, /client/proc/admin_cancel_shuttle, /client/proc/cmd_admin_direct_narrate, @@ -256,8 +249,6 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list( /client/proc/callproc_datum, /client/proc/Debug2, /client/proc/reload_admins, - /client/proc/cmd_debug_make_powernets, - /client/proc/startSinglo, /client/proc/cmd_debug_mob_lists, /client/proc/cmd_debug_del_all, /client/proc/enable_debug_verbs, @@ -266,7 +257,6 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list( /client/proc/reload_admins, /client/proc/panicbunker, /client/proc/admin_change_sec_level, - /client/proc/toggle_nuke, /client/proc/cmd_display_del_log, /client/proc/toggle_combo_hud, /client/proc/debug_huds @@ -687,12 +677,6 @@ GLOBAL_PROTECT(admin_verbs_hideable) togglebuildmode(src.mob) SSblackbox.record_feedback("tally", "admin_verb", 1, "Toggle Build Mode") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/check_ai_laws() - set name = "Check AI Laws" - set category = "Admin" - set hidden = 1 - if(holder) - src.holder.output_ai_laws() /client/proc/deadmin() set name = "Deadmin" diff --git a/code/modules/admin/antag_panel.dm b/code/modules/admin/antag_panel.dm index 19e53b09b4..67c6cd5d23 100644 --- a/code/modules/admin/antag_panel.dm +++ b/code/modules/admin/antag_panel.dm @@ -63,17 +63,6 @@ GLOBAL_VAR(antag_prototypes) var/common_commands = "Common Commands:" if(ishuman(current)) common_commands += "undress" - else if(iscyborg(current)) - var/mob/living/silicon/robot/R = current - if(R.emagged) - common_commands += "Unemag" - else if(isAI(current)) - var/mob/living/silicon/ai/A = current - if (A.connected_robots.len) - for (var/mob/living/silicon/robot/R in A.connected_robots) - if (R.emagged) - common_commands += "Unemag slaved cyborgs" - break return common_commands /datum/mind/proc/get_special_statuses() @@ -82,11 +71,6 @@ GLOBAL_VAR(antag_prototypes) result += "No body!" if(current && HAS_TRAIT(current, TRAIT_MINDSHIELD)) result += "Mindshielded" - //Move these to mob - if(iscyborg(current)) - var/mob/living/silicon/robot/robot = current - if (robot.emagged) - result += "Emagged" return result.Join(" | ") /datum/mind/proc/traitor_panel() @@ -188,21 +172,6 @@ GLOBAL_VAR(antag_prototypes) out += "
    " - //Uplink - if(ishuman(current)) - var/uplink_info = "Uplink:" - var/datum/component/uplink/U = find_syndicate_uplink() - if(U) - uplink_info += "take" - if (check_rights(R_FUN, 0)) - uplink_info += ", [U.telecrystals] TC" - else - uplink_info += ", [U.telecrystals] TC" - else - uplink_info += "give" - uplink_info += "." //hiel grammar - - out += uplink_info + "
    " //Common Memory var/common_memory = "Common Memory:" common_memory += memory diff --git a/code/modules/admin/fun_balloon.dm b/code/modules/admin/fun_balloon.dm index f4b9fa1395..6cd8db7936 100644 --- a/code/modules/admin/fun_balloon.dm +++ b/code/modules/admin/fun_balloon.dm @@ -64,15 +64,6 @@ body.key = C.key new /obj/effect/temp_visual/gravpush(get_turf(body)) -/obj/effect/fun_balloon/sentience/emergency_shuttle - name = "shuttle sentience fun balloon" - var/trigger_time = 60 - -/obj/effect/fun_balloon/sentience/emergency_shuttle/check() - . = FALSE - if(SSshuttle.emergency && (SSshuttle.emergency.timeLeft() <= trigger_time) && (SSshuttle.emergency.mode == SHUTTLE_CALL)) - . = TRUE - /obj/effect/fun_balloon/scatter name = "scatter fun balloon" desc = "" diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index ab98dbba33..e0a0c01451 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -19,9 +19,6 @@ GLOBAL_PROTECT(href_token) var/spamcooldown = 0 var/admincaster_screen = 0 //TODO: remove all these 5 variables, they are completly unacceptable - var/datum/newscaster/feed_message/admincaster_feed_message = new /datum/newscaster/feed_message - var/datum/newscaster/wanted_message/admincaster_wanted_message = new /datum/newscaster/wanted_message - var/datum/newscaster/feed_channel/admincaster_feed_channel = new /datum/newscaster/feed_channel var/admin_signature var/href_token diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index f9ad5e6fe2..3795200614 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -225,24 +225,9 @@ M_job = M.job else if(ismonkey(M)) M_job = "Monkey" - else if(isalien(M)) //aliens - if(islarva(M)) - M_job = "Alien larva" - else - M_job = ROLE_ALIEN else M_job = "Carbon-based" - else if(issilicon(M)) //silicon - if(isAI(M)) - M_job = "AI" - else if(ispAI(M)) - M_job = ROLE_PAI - else if(iscyborg(M)) - M_job = "Cyborg" - else - M_job = "Silicon-based" - else if(isanimal(M)) //simple animals if(iscorgi(M)) M_job = "Corgi" diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index dead5c41ad..906b5968eb 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -109,28 +109,6 @@ var/datum/admins/D = GLOB.admin_datums[ckey] dat += "[ckey] - [D.rank.name]
    " usr << browse(dat, "window=showadmins;size=600x500") - - if("tdomereset") - if(!check_rights(R_ADMIN)) - return - var/delete_mobs = alert("Clear all mobs?","Confirm","Yes","No","Cancel") - if(delete_mobs == "Cancel") - return - - log_admin("[key_name(usr)] reset the thunderdome to default with delete_mobs==[delete_mobs].", 1) - message_admins("[key_name_admin(usr)] reset the thunderdome to default with delete_mobs==[delete_mobs].") - - var/area/thunderdome = GLOB.areas_by_type[/area/tdome/arena] - if(delete_mobs == "Yes") - for(var/mob/living/mob in thunderdome) - qdel(mob) //Clear mobs - for(var/obj/obj in thunderdome) - if(!istype(obj, /obj/machinery/camera) && !istype(obj, /obj/effect/abstract/proximity_checker)) - qdel(obj) //Clear objects - - var/area/template = GLOB.areas_by_type[/area/tdome/arena_source] - template.copy_contents_to(thunderdome) - if("clear_virus") var/choice = input("Are you sure you want to cure all disease?") in list("Yes", "Cancel") @@ -236,10 +214,6 @@ log_admin("[key_name(usr)] [new_perma ? "stopped" : "started"] the arrivals shuttle") else to_chat(usr, "There is no arrivals shuttle.") - if("showailaws") - if(!check_rights(R_ADMIN)) - return - output_ai_laws() if("showgm") if(!check_rights(R_ADMIN)) return @@ -302,36 +276,6 @@ var/mob/living/carbon/human/H = i H.set_species(newtype) - if("tripleAI") - if(!check_rights(R_FUN)) - return - usr.client.triple_ai() - SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Triple AI")) - - if("power") - if(!check_rights(R_FUN)) - return - SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Power All APCs")) - log_admin("[key_name(usr)] made all areas powered", 1) - message_admins("[key_name_admin(usr)] made all areas powered") - power_restore() - - if("unpower") - if(!check_rights(R_FUN)) - return - SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Depower All APCs")) - log_admin("[key_name(usr)] made all areas unpowered", 1) - message_admins("[key_name_admin(usr)] made all areas unpowered") - power_failure() - - if("quickpower") - if(!check_rights(R_FUN)) - return - SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Power All SMESs")) - log_admin("[key_name(usr)] made all SMESs powered", 1) - message_admins("[key_name_admin(usr)] made all SMESs powered") - power_restore_quick() - if("traitor_all") if(!check_rights(R_FUN)) return @@ -345,7 +289,7 @@ for(var/mob/living/H in GLOB.player_list) if(!(ishuman(H)||istype(H, /mob/living/silicon/))) continue - if(H.stat == DEAD || !H.mind || ispAI(H)) + if(H.stat == DEAD || !H.mind) continue if(is_special_character(H)) continue @@ -428,9 +372,6 @@ for(var/obj/machinery/light/L in GLOB.machines) L.fix() - if("floorlava") - SSweather.run_weather(/datum/weather/floor_is_lava) - if("virus") if(!check_rights(R_FUN)) return @@ -457,16 +398,6 @@ H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 60, 80) message_admins("[key_name_admin(usr)] made everybody retarded") - if("eagles")//SCRAW - if(!check_rights(R_FUN)) - return - SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Egalitarian Station")) - for(var/obj/machinery/door/airlock/W in GLOB.machines) - if(is_station_level(W.z) && !istype(get_area(W), /area/bridge) && !istype(get_area(W), /area/crew_quarters) && !istype(get_area(W), /area/security/prison)) - W.req_access = list() - message_admins("[key_name_admin(usr)] activated Egalitarian Station mode") - priority_announce("CentCom airlock control override activated. Please take this time to get acquainted with your coworkers.", null, 'sound/blank.ogg') - if("ancap") if(!check_rights(R_FUN)) return @@ -534,52 +465,6 @@ B.facial_hairstyle = "Dward Beard" B.update_hair() message_admins("[key_name_admin(usr)] activated dorf mode") - - if("onlyone") - if(!check_rights(R_FUN)) - return - SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("There Can Be Only One")) - usr.client.only_one() - sound_to_playing_players('sound/blank.ogg') - - if("delayed_onlyone") - if(!check_rights(R_FUN)) - return - SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("There Can Be Only One")) - usr.client.only_one_delayed() - sound_to_playing_players('sound/blank.ogg') - - if("maint_access_brig") - if(!check_rights(R_DEBUG)) - return - for(var/obj/machinery/door/airlock/maintenance/M in GLOB.machines) - M.check_access() - if (ACCESS_MAINT_TUNNELS in M.req_access) - M.req_access = list(ACCESS_BRIG) - message_admins("[key_name_admin(usr)] made all maint doors brig access-only.") - if("maint_access_engiebrig") - if(!check_rights(R_DEBUG)) - return - for(var/obj/machinery/door/airlock/maintenance/M in GLOB.machines) - M.check_access() - if (ACCESS_MAINT_TUNNELS in M.req_access) - M.req_access = list() - M.req_one_access = list(ACCESS_BRIG,ACCESS_ENGINE) - message_admins("[key_name_admin(usr)] made all maint doors engineering and brig access-only.") - if("infinite_sec") - if(!check_rights(R_DEBUG)) - return - var/datum/job/J = SSjob.GetJob("Security Officer") - if(!J) - return - J.total_positions = -1 - J.spawn_positions = -1 - message_admins("[key_name_admin(usr)] has removed the cap on security officers.") - - if("ctfbutton") - if(!check_rights(R_ADMIN)) - return - toggle_all_ctf(usr) if("masspurrbation") if(!check_rights(R_FUN)) return @@ -601,7 +486,7 @@ var/list/settings = list( "mainsettings" = list( - "typepath" = list("desc" = "Path to spawn", "type" = "datum", "path" = "/mob/living", "subtypesonly" = TRUE, "value" = /mob/living/simple_animal/hostile/poison/bees), + "typepath" = list("desc" = "Path to spawn", "type" = "datum", "path" = "/mob/living", "subtypesonly" = TRUE, "value" = /mob/living/simple_animal/hostile), "humanoutfit" = list("desc" = "Outfit if human", "type" = "datum", "path" = "/datum/outfit", "subtypesonly" = TRUE, "value" = /datum/outfit), "amount" = list("desc" = "Number per portal", "type" = "number", "value" = 1), "portalnum" = list("desc" = "Number of total portals", "type" = "number", "value" = 10), diff --git a/code/modules/admin/sql_ban_system.dm b/code/modules/admin/sql_ban_system.dm index 9cbe8b1ea9..02598db88c 100644 --- a/code/modules/admin/sql_ban_system.dm +++ b/code/modules/admin/sql_ban_system.dm @@ -235,7 +235,7 @@ var/break_counter = 0 //note to future developers: RT doesn't have command staff so toggle_head was removed, go back in the git history if you need to readd it //departments/groups that don't have command staff would throw a javascript error since there's no corresponding reference for toggle_head() - var/list/headless_job_lists = list("Nobles" = GLOB.noble_positions, + var/list/headless_job_lists = list("Nobles" = GLOB.court_positions, "Garrison" = GLOB.garrison_positions, "Church" = GLOB.church_positions, "Abstract" = list("Appearance", "Emote", "Deadchat", "OOC")) @@ -252,7 +252,7 @@ break_counter++ output += "" var/list/long_job_lists = list("Peasants" = GLOB.peasant_positions, - "Selfs" = GLOB.serf_positions, + "Towners" = GLOB.towner_positions, "Apprentices" = GLOB.apprentices_positions, "Antagonist Positions" = list(ROLE_VILLAIN, ROLE_WEREWOLF, ROLE_VAMPIRE, ROLE_NBEAST, ROLE_BANDIT, diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index cede8f48b1..ec78cfc7f7 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -56,7 +56,7 @@ to_chat(usr, "ERROR: Client not found.") return toggle_exempt_status(C) - + else if(href_list["forceevent"]) if(!check_rights(R_FUN)) return @@ -264,18 +264,6 @@ switch(href_list["simplemake"]) if("observer") M.change_mob_type( /mob/dead/observer , null, null, delmob ) - if("drone") - M.change_mob_type( /mob/living/carbon/alien/humanoid/drone , null, null, delmob ) - if("hunter") - M.change_mob_type( /mob/living/carbon/alien/humanoid/hunter , null, null, delmob ) - if("queen") - M.change_mob_type( /mob/living/carbon/alien/humanoid/royal/queen , null, null, delmob ) - if("praetorian") - M.change_mob_type( /mob/living/carbon/alien/humanoid/royal/praetorian , null, null, delmob ) - if("sentinel") - M.change_mob_type( /mob/living/carbon/alien/humanoid/sentinel , null, null, delmob ) - if("larva") - M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob ) if("human") var/posttransformoutfit = usr.client.robust_dress_shop() if (!posttransformoutfit) @@ -884,9 +872,6 @@ if(!ismob(M)) to_chat(usr, "This can only be used on instances of type /mob.") return - if(isAI(M)) - to_chat(usr, "This cannot be used on instances of type /mob/living/silicon/ai.") - return if(alert(usr, "Send [key_name(M)] to Prison?", "Message", "Yes", "No") != "Yes") return @@ -934,9 +919,6 @@ if(!isliving(M)) to_chat(usr, "This can only be used on instances of type /mob/living.") return - if(isAI(M)) - to_chat(usr, "This cannot be used on instances of type /mob/living/silicon/ai.") - return var/mob/living/L = M for(var/obj/item/I in L) @@ -960,9 +942,6 @@ if(!isliving(M)) to_chat(usr, "This can only be used on instances of type /mob/living.") return - if(isAI(M)) - to_chat(usr, "This cannot be used on instances of type /mob/living/silicon/ai.") - return var/mob/living/L = M for(var/obj/item/I in L) @@ -986,9 +965,6 @@ if(!isliving(M)) to_chat(usr, "This can only be used on instances of type /mob/living.") return - if(isAI(M)) - to_chat(usr, "This cannot be used on instances of type /mob/living/silicon/ai.") - return var/mob/living/L = M L.Unconscious(100) @@ -1009,9 +985,6 @@ if(!isliving(M)) to_chat(usr, "This can only be used on instances of type /mob/living.") return - if(isAI(M)) - to_chat(usr, "This cannot be used on instances of type /mob/living/silicon/ai.") - return var/mob/living/L = M for(var/obj/item/I in L) @@ -1041,30 +1014,6 @@ message_admins("Admin [key_name_admin(usr)] healed / revived [key_name_admin(L)]!") log_admin("[key_name(usr)] healed / Revived [key_name(L)].") - else if(href_list["makeai"]) - if(!check_rights(R_SPAWN)) - return - - var/mob/living/carbon/human/H = locate(href_list["makeai"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human.") - return - - message_admins("Admin [key_name_admin(usr)] AIized [key_name_admin(H)]!") - log_admin("[key_name(usr)] AIized [key_name(H)].") - H.AIize(TRUE, H.client) - - else if(href_list["makealien"]) - if(!check_rights(R_SPAWN)) - return - - var/mob/living/carbon/human/H = locate(href_list["makealien"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human.") - return - - usr.client.cmd_admin_alienize(H) - else if(href_list["makeslime"]) if(!check_rights(R_SPAWN)) return @@ -1087,18 +1036,6 @@ usr.client.cmd_admin_blobize(H) - - else if(href_list["makerobot"]) - if(!check_rights(R_SPAWN)) - return - - var/mob/living/carbon/human/H = locate(href_list["makerobot"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human.") - return - - usr.client.cmd_admin_robotize(H) - else if(href_list["makeanimal"]) if(!check_rights(R_SPAWN)) return @@ -1153,11 +1090,6 @@ sleep(2) C.jumptocoord(x,y,z) - else if(href_list["adminchecklaws"]) - if(!check_rights(R_ADMIN)) - return - output_ai_laws() - else if(href_list["admincheckdevilinfo"]) if(!check_rights(R_ADMIN)) return @@ -1442,16 +1374,6 @@ else show_traitor_panel(M) - else if(href_list["borgpanel"]) - if(!check_rights(R_ADMIN)) - return - - var/mob/M = locate(href_list["borgpanel"]) - if(!iscyborg(M)) - to_chat(usr, "This can only be used on cyborgs") - else - open_borgopanel(M) - else if(href_list["initmind"]) if(!check_rights(R_ADMIN)) return @@ -1534,7 +1456,7 @@ switch(where) if("inhand") - if (!iscarbon(usr) && !iscyborg(usr)) + if (!iscarbon(usr)) to_chat(usr, "Can only spawn in hand when you're a carbon mob or cyborg.") where = "onfloor" target = usr @@ -1588,11 +1510,6 @@ var/mob/living/L = usr var/obj/item/I = O L.put_in_hands(I) - if(iscyborg(L)) - var/mob/living/silicon/robot/R = L - if(R.module) - R.module.add_module(I, TRUE, TRUE) - R.activate_module(I) if(pod) new /obj/effect/DPtarget(target, pod) @@ -1614,256 +1531,6 @@ else if(href_list["secrets"]) Secrets_topic(href_list["secrets"],href_list) - else if(href_list["ac_view_wanted"]) //Admin newscaster Topic() stuff be here - if(!check_rights(R_ADMIN)) - return - src.admincaster_screen = 18 //The ac_ prefix before the hrefs stands for AdminCaster. - src.access_news_network() - - else if(href_list["ac_set_channel_name"]) - if(!check_rights(R_ADMIN)) - return - src.admincaster_feed_channel.channel_name = stripped_input(usr, "Provide a Feed Channel Name.", "Network Channel Handler", "") - while (findtext(src.admincaster_feed_channel.channel_name," ") == 1) - src.admincaster_feed_channel.channel_name = copytext(src.admincaster_feed_channel.channel_name,2,length(src.admincaster_feed_channel.channel_name)+1) - src.access_news_network() - - else if(href_list["ac_set_channel_lock"]) - if(!check_rights(R_ADMIN)) - return - src.admincaster_feed_channel.locked = !src.admincaster_feed_channel.locked - src.access_news_network() - - else if(href_list["ac_submit_new_channel"]) - if(!check_rights(R_ADMIN)) - return - var/check = 0 - for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) - if(FC.channel_name == src.admincaster_feed_channel.channel_name) - check = 1 - break - if(src.admincaster_feed_channel.channel_name == "" || src.admincaster_feed_channel.channel_name == "\[REDACTED\]" || check ) - src.admincaster_screen=7 - else - var/choice = alert("Please confirm Feed channel creation.","Network Channel Handler","Confirm","Cancel") - if(choice=="Confirm") - GLOB.news_network.CreateFeedChannel(src.admincaster_feed_channel.channel_name, src.admin_signature, src.admincaster_feed_channel.locked, 1) - SSblackbox.record_feedback("tally", "newscaster_channels", 1, src.admincaster_feed_channel.channel_name) - log_admin("[key_name(usr)] created command feed channel: [src.admincaster_feed_channel.channel_name]!") - src.admincaster_screen=5 - src.access_news_network() - - else if(href_list["ac_set_channel_receiving"]) - if(!check_rights(R_ADMIN)) - return - var/list/available_channels = list() - for(var/datum/newscaster/feed_channel/F in GLOB.news_network.network_channels) - available_channels += F.channel_name - src.admincaster_feed_channel.channel_name = adminscrub(input(usr, "Choose receiving Feed Channel.", "Network Channel Handler") in sortList(available_channels) ) - src.access_news_network() - - else if(href_list["ac_set_new_message"]) - if(!check_rights(R_ADMIN)) - return - src.admincaster_feed_message.body = adminscrub(input(usr, "Write my Feed story.", "Network Channel Handler", "")) - while (findtext(src.admincaster_feed_message.returnBody(-1)," ") == 1) - src.admincaster_feed_message.body = copytext(src.admincaster_feed_message.returnBody(-1),2,length(src.admincaster_feed_message.returnBody(-1))+1) - src.access_news_network() - - else if(href_list["ac_submit_new_message"]) - if(!check_rights(R_ADMIN)) - return - if(src.admincaster_feed_message.returnBody(-1) =="" || src.admincaster_feed_message.returnBody(-1) =="\[REDACTED\]" || src.admincaster_feed_channel.channel_name == "" ) - src.admincaster_screen = 6 - else - GLOB.news_network.SubmitArticle(src.admincaster_feed_message.returnBody(-1), src.admin_signature, src.admincaster_feed_channel.channel_name, null, 1) - SSblackbox.record_feedback("amount", "newscaster_stories", 1) - src.admincaster_screen=4 - - for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters) - NEWSCASTER.newsAlert(src.admincaster_feed_channel.channel_name) - - log_admin("[key_name(usr)] submitted a feed story to channel: [src.admincaster_feed_channel.channel_name]!") - src.access_news_network() - - else if(href_list["ac_create_channel"]) - if(!check_rights(R_ADMIN)) - return - src.admincaster_screen=2 - src.access_news_network() - - else if(href_list["ac_create_feed_story"]) - if(!check_rights(R_ADMIN)) - return - src.admincaster_screen=3 - src.access_news_network() - - else if(href_list["ac_menu_censor_story"]) - if(!check_rights(R_ADMIN)) - return - src.admincaster_screen=10 - src.access_news_network() - - else if(href_list["ac_menu_censor_channel"]) - if(!check_rights(R_ADMIN)) - return - src.admincaster_screen=11 - src.access_news_network() - - else if(href_list["ac_menu_wanted"]) - if(!check_rights(R_ADMIN)) - return - var/already_wanted = 0 - if(GLOB.news_network.wanted_issue.active) - already_wanted = 1 - - if(already_wanted) - src.admincaster_wanted_message.criminal = GLOB.news_network.wanted_issue.criminal - src.admincaster_wanted_message.body = GLOB.news_network.wanted_issue.body - src.admincaster_screen = 14 - src.access_news_network() - - else if(href_list["ac_set_wanted_name"]) - if(!check_rights(R_ADMIN)) - return - src.admincaster_wanted_message.criminal = adminscrub(input(usr, "Provide the name of the Wanted person.", "Network Security Handler", "")) - while(findtext(src.admincaster_wanted_message.criminal," ") == 1) - src.admincaster_wanted_message.criminal = copytext(admincaster_wanted_message.criminal,2,length(admincaster_wanted_message.criminal)+1) - src.access_news_network() - - else if(href_list["ac_set_wanted_desc"]) - if(!check_rights(R_ADMIN)) - return - src.admincaster_wanted_message.body = adminscrub(input(usr, "Provide the a description of the Wanted person and any other details you deem important.", "Network Security Handler", "")) - while (findtext(src.admincaster_wanted_message.body," ") == 1) - src.admincaster_wanted_message.body = copytext(src.admincaster_wanted_message.body,2,length(src.admincaster_wanted_message.body)+1) - src.access_news_network() - - else if(href_list["ac_submit_wanted"]) - if(!check_rights(R_ADMIN)) - return - var/input_param = text2num(href_list["ac_submit_wanted"]) - if(src.admincaster_wanted_message.criminal == "" || src.admincaster_wanted_message.body == "") - src.admincaster_screen = 16 - else - var/choice = alert("Please confirm Wanted Issue [(input_param==1) ? ("creation.") : ("edit.")]","Network Security Handler","Confirm","Cancel") - if(choice=="Confirm") - if(input_param==1) //If input_param == 1 we're submitting a new wanted issue. At 2 we're just editing an existing one. See the else below - GLOB.news_network.submitWanted(admincaster_wanted_message.criminal, admincaster_wanted_message.body, admin_signature, null, 1, 1) - src.admincaster_screen = 15 - else - GLOB.news_network.submitWanted(admincaster_wanted_message.criminal, admincaster_wanted_message.body, admin_signature) - src.admincaster_screen = 19 - log_admin("[key_name(usr)] issued a Station-wide Wanted Notification for [src.admincaster_wanted_message.criminal]!") - src.access_news_network() - - else if(href_list["ac_cancel_wanted"]) - if(!check_rights(R_ADMIN)) - return - var/choice = alert("Please confirm Wanted Issue removal.","Network Security Handler","Confirm","Cancel") - if(choice=="Confirm") - GLOB.news_network.deleteWanted() - src.admincaster_screen=17 - src.access_news_network() - - else if(href_list["ac_censor_channel_author"]) - if(!check_rights(R_ADMIN)) - return - var/datum/newscaster/feed_channel/FC = locate(href_list["ac_censor_channel_author"]) - FC.toggleCensorAuthor() - src.access_news_network() - - else if(href_list["ac_censor_channel_story_author"]) - if(!check_rights(R_ADMIN)) - return - var/datum/newscaster/feed_message/MSG = locate(href_list["ac_censor_channel_story_author"]) - MSG.toggleCensorAuthor() - src.access_news_network() - - else if(href_list["ac_censor_channel_story_body"]) - if(!check_rights(R_ADMIN)) - return - var/datum/newscaster/feed_message/MSG = locate(href_list["ac_censor_channel_story_body"]) - MSG.toggleCensorBody() - src.access_news_network() - - else if(href_list["ac_pick_d_notice"]) - if(!check_rights(R_ADMIN)) - return - var/datum/newscaster/feed_channel/FC = locate(href_list["ac_pick_d_notice"]) - src.admincaster_feed_channel = FC - src.admincaster_screen=13 - src.access_news_network() - - else if(href_list["ac_toggle_d_notice"]) - if(!check_rights(R_ADMIN)) - return - var/datum/newscaster/feed_channel/FC = locate(href_list["ac_toggle_d_notice"]) - FC.toggleCensorDclass() - src.access_news_network() - - else if(href_list["ac_view"]) - if(!check_rights(R_ADMIN)) - return - src.admincaster_screen=1 - src.access_news_network() - - else if(href_list["ac_setScreen"]) //Brings us to the main menu and resets all fields~ - if(!check_rights(R_ADMIN)) - return - src.admincaster_screen = text2num(href_list["ac_setScreen"]) - if (src.admincaster_screen == 0) - if(src.admincaster_feed_channel) - src.admincaster_feed_channel = new /datum/newscaster/feed_channel - if(src.admincaster_feed_message) - src.admincaster_feed_message = new /datum/newscaster/feed_message - if(admincaster_wanted_message) - admincaster_wanted_message = new /datum/newscaster/wanted_message - src.access_news_network() - - else if(href_list["ac_show_channel"]) - if(!check_rights(R_ADMIN)) - return - var/datum/newscaster/feed_channel/FC = locate(href_list["ac_show_channel"]) - src.admincaster_feed_channel = FC - src.admincaster_screen = 9 - src.access_news_network() - - else if(href_list["ac_pick_censor_channel"]) - if(!check_rights(R_ADMIN)) - return - var/datum/newscaster/feed_channel/FC = locate(href_list["ac_pick_censor_channel"]) - src.admincaster_feed_channel = FC - src.admincaster_screen = 12 - src.access_news_network() - - else if(href_list["ac_refresh"]) - if(!check_rights(R_ADMIN)) - return - src.access_news_network() - - else if(href_list["ac_set_signature"]) - if(!check_rights(R_ADMIN)) - return - src.admin_signature = adminscrub(input(usr, "Provide my desired signature.", "Network Identity Handler", "")) - src.access_news_network() - - else if(href_list["ac_del_comment"]) - if(!check_rights(R_ADMIN)) - return - var/datum/newscaster/feed_comment/FC = locate(href_list["ac_del_comment"]) - var/datum/newscaster/feed_message/FM = locate(href_list["ac_del_comment_msg"]) - FM.comments -= FC - qdel(FC) - src.access_news_network() - - else if(href_list["ac_lock_comment"]) - if(!check_rights(R_ADMIN)) - return - var/datum/newscaster/feed_message/FM = locate(href_list["ac_lock_comment"]) - FM.locked ^= 1 - src.access_news_network() - else if(href_list["check_antagonist"]) if(!check_rights(R_ADMIN)) return @@ -1909,35 +1576,6 @@ return var/datum/outfit/O = locate(href_list["chosen_outfit"]) in GLOB.custom_outfits save_outfit(usr,O) - else if(href_list["set_selfdestruct_code"]) - if(!check_rights(R_ADMIN)) - return - var/code = random_nukecode() - for(var/obj/machinery/nuclearbomb/selfdestruct/SD in GLOB.nuke_list) - SD.r_code = code - message_admins("[key_name_admin(usr)] has set the self-destruct \ - code to \"[code]\".") - - else if(href_list["add_station_goal"]) - if(!check_rights(R_ADMIN)) - return - var/list/type_choices = typesof(/datum/station_goal) - var/picked = input("Choose goal type") in type_choices|null - if(!picked) - return - var/datum/station_goal/G = new picked() - if(picked == /datum/station_goal) - var/newname = input("Enter goal name:") as text|null - if(!newname) - return - G.name = newname - var/description = input("Enter CentCom message contents:") as message|null - if(!description) - return - G.report_message = description - message_admins("[key_name(usr)] created \"[G.name]\" station goal.") - SSticker.mode.station_goals += G - modify_goals() else if(href_list["viewruntime"]) var/datum/error_viewer/error_viewer = locate(href_list["viewruntime"]) @@ -1989,11 +1627,6 @@ else if(answer == "no") log_query_debug("[usr.key] | Reported no server hang") - else if(href_list["ctf_toggle"]) - if(!check_rights(R_ADMIN)) - return - toggle_all_ctf(usr) - else if(href_list["rebootworld"]) if(!check_rights(R_ADMIN)) return diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 3bbe1ff0bd..2c3bba5b55 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -228,7 +228,7 @@ return var/list/datum/SDQL2_query/running = list() var/list/datum/SDQL2_query/waiting_queue = list() //Sequential queries queue. - + for(var/list/query_tree in querys) var/datum/SDQL2_query/query = new /datum/SDQL2_query(query_tree) if(QDELETED(query)) @@ -255,7 +255,7 @@ to_chat(usr, "[msg]") log_admin(msg) query.ARun() - + var/finished = FALSE var/objs_all = 0 var/objs_eligible = 0 @@ -1060,8 +1060,6 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null v = SSmachines if("SSobj") v = SSobj - if("SSresearch") - v = SSresearch if("SSprojectiles") v = SSprojectiles if("SSfastprocess") diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 1c791cfe48..a5c9a68020 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -646,32 +646,26 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) //ckeys ckeys[M.ckey] = M - var/ai_found = 0 msg = "" var/list/mobs_found = list() for(var/original_word in msglist) var/word = ckey(original_word) if(word) if(!(word in adminhelp_ignored_words)) - if(word == "ai") - ai_found = 1 - else - var/mob/found = ckeys[word] + var/mob/found = ckeys[word] + if(!found) + found = surnames[word] if(!found) - found = surnames[word] - if(!found) - found = forenames[word] - if(found) - if(!(found in mobs_found)) - mobs_found += found - if(!ai_found && isAI(found)) - ai_found = 1 - var/is_antag = 0 - if(found.mind && found.mind.special_role) - is_antag = 1 - founds += "Name: [found.name]([found.real_name]) Key: [found.key] Ckey: [found.ckey] [is_antag ? "(Antag)" : null] " - msg += "[original_word](?|F) " - continue + found = forenames[word] + if(found) + if(!(found in mobs_found)) + mobs_found += found + var/is_antag = 0 + if(found.mind && found.mind.special_role) + is_antag = 1 + founds += "Name: [found.name]([found.real_name]) Key: [found.key] Ckey: [found.ckey] [is_antag ? "(Antag)" : null] " + msg += "[original_word](?|F) " + continue msg += "[original_word] " if(irc) if(founds == "") diff --git a/code/modules/admin/verbs/atmosdebug.dm b/code/modules/admin/verbs/atmosdebug.dm deleted file mode 100644 index cd89f4dbb7..0000000000 --- a/code/modules/admin/verbs/atmosdebug.dm +++ /dev/null @@ -1,56 +0,0 @@ -/client/proc/atmosscan() - set category = "Mapping" - set name = "Check Plumbing" - if(!src.holder) - //to_chat(src, "Only administrators may use this command.") - return - SSblackbox.record_feedback("tally", "admin_verb", 1, "Check Plumbing") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - //all plumbing - yes, some things might get stated twice, doesn't matter. - for(var/obj/machinery/atmospherics/components/pipe in GLOB.machines) - if(pipe.z && (!pipe.nodes || !pipe.nodes.len || (null in pipe.nodes))) - to_chat(usr, "Unconnected [pipe.name] located at [ADMIN_VERBOSEJMP(pipe)]") - - //Manifolds - for(var/obj/machinery/atmospherics/pipe/manifold/pipe in GLOB.machines) - if(pipe.z && (!pipe.nodes || !pipe.nodes.len || (null in pipe.nodes))) - to_chat(usr, "Unconnected [pipe.name] located at [ADMIN_VERBOSEJMP(pipe)]") - - //Pipes - for(var/obj/machinery/atmospherics/pipe/simple/pipe in GLOB.machines) - if(pipe.z && (!pipe.nodes || !pipe.nodes.len || (null in pipe.nodes))) - to_chat(usr, "Unconnected [pipe.name] located at [ADMIN_VERBOSEJMP(pipe)]") - -/client/proc/powerdebug() - set category = "Mapping" - set name = "Check Power" - if(!src.holder) - //to_chat(src, "Only administrators may use this command.") - return - SSblackbox.record_feedback("tally", "admin_verb", 1, "Check Power") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - var/list/results = list() - - for (var/datum/powernet/PN in GLOB.powernets) - if (!PN.nodes || !PN.nodes.len) - if(PN.cables && (PN.cables.len > 1)) - var/obj/structure/cable/C = PN.cables[1] - results += "Powernet with no nodes! (number [PN.number]) - example cable at [ADMIN_VERBOSEJMP(C)]" - - if (!PN.cables || (PN.cables.len < 10)) - if(PN.cables && (PN.cables.len > 1)) - var/obj/structure/cable/C = PN.cables[1] - results += "Powernet with fewer than 10 cables! (number [PN.number]) - example cable at [ADMIN_VERBOSEJMP(C)]" - - for(var/turf/T in world.contents) - var/found_one = FALSE - for(var/obj/structure/cable/C in T.contents) - if(found_one) - results += "Doubled wire at [ADMIN_VERBOSEJMP(C)]" - else - found_one = TRUE - var/obj/machinery/power/terminal/term = locate(/obj/machinery/power/terminal) in T.contents - if(term) - var/obj/structure/cable/C = locate(/obj/structure/cable) in T.contents - if(!C) - results += "Unwired terminal at [ADMIN_VERBOSEJMP(term)]" - to_chat(usr, "[results.Join("\n")]") diff --git a/code/modules/admin/verbs/beakerpanel.dm b/code/modules/admin/verbs/beakerpanel.dm index c6d9f49177..706bcba87c 100644 --- a/code/modules/admin/verbs/beakerpanel.dm +++ b/code/modules/admin/verbs/beakerpanel.dm @@ -20,21 +20,6 @@ var/containerdata = json_decode(href_list["container"]) var/obj/item/reagent_containers/container = beaker_panel_create_container(containerdata, get_turf(usr)) log_game("[key_name(usr)] spawned a [container] containing [pretty_string_from_reagent_list(container.reagents.reagent_list)]") - if ("spawngrenade") - var/obj/item/grenade/chem_grenade/grenade = new(get_turf(usr)) - var/containersdata = json_decode(href_list["containers"]) - var/reagent_string - for (var/i in 1 to 2) - grenade.beakers += beaker_panel_create_container(containersdata[i], grenade) - reagent_string += " ([grenade.beakers[i].name] [i] : " + pretty_string_from_reagent_list(grenade.beakers[i].reagents.reagent_list) + ");" - grenade.stage_change(GRENADE_READY) - var/grenadedata = json_decode(href_list["grenadedata"]) - switch (href_list["grenadetype"]) - if ("normal") // Regular cable coil-timed grenade - var/det_time = text2num(grenadedata["grenade-timer"]) - if (det_time) - grenade.det_time = det_time - log_game("[key_name(usr)] spawned a [grenade] containing: [reagent_string]") /datum/admins/proc/beaker_panel_prep_assembly(obj/item/assembly/towrap, grenade) var/obj/item/assembly/igniter/igniter = new diff --git a/code/modules/admin/verbs/borgpanel.dm b/code/modules/admin/verbs/borgpanel.dm deleted file mode 100644 index 430281cac4..0000000000 --- a/code/modules/admin/verbs/borgpanel.dm +++ /dev/null @@ -1,218 +0,0 @@ -/datum/admins/proc/open_borgopanel(borgo in GLOB.silicon_mobs) - set category = "Admin" - set name = "Show Borg Panel" - set desc = "" - set hidden = 1 - - if(!check_rights(R_ADMIN)) - return - - if (!istype(borgo, /mob/living/silicon/robot)) - borgo = input("Select a borg", "Select a borg", null, null) as null|anything in sortNames(GLOB.silicon_mobs) - if (!istype(borgo, /mob/living/silicon/robot)) - to_chat(usr, "Borg is required for borgpanel") - - var/datum/borgpanel/borgpanel = new(usr, borgo) - - borgpanel.ui_interact(usr) - - - -/datum/borgpanel - var/mob/living/silicon/robot/borg - var/user - -/datum/borgpanel/New(to_user, mob/living/silicon/robot/to_borg) - if(!istype(to_borg)) - stack_trace("Borg panel is only available for borgs") - qdel(src) - return - - user = CLIENT_FROM_VAR(to_user) - - if (!user) - CRASH("Borg panel attempted to open to a mob without a client") - - borg = to_borg - -/datum/borgpanel/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.admin_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "borgopanel", "Borg Panel", 700, 700, master_ui, state) - ui.open() - -/datum/borgpanel/ui_data(mob/user) - . = list() - .["borg"] = list( - "ref" = REF(borg), - "name" = "[borg]", - "emagged" = borg.emagged, - "active_module" = "[borg.module.type]", - "lawupdate" = borg.lawupdate, - "lockdown" = borg.lockcharge, - "scrambledcodes" = borg.scrambledcodes - ) - .["upgrades"] = list() - for (var/upgradetype in subtypesof(/obj/item/borg/upgrade)-/obj/item/borg/upgrade/hypospray) //hypospray is a dummy parent for hypospray upgrades - var/obj/item/borg/upgrade/upgrade = upgradetype - if (initial(upgrade.module_type) && !is_type_in_list(borg.module, initial(upgrade.module_type))) // Upgrade requires a different module - continue - var/installed = FALSE - if (locate(upgradetype) in borg) - installed = TRUE - .["upgrades"] += list(list("name" = initial(upgrade.name), "installed" = installed, "type" = upgradetype)) - .["laws"] = borg.laws ? borg.laws.get_law_list(include_zeroth = TRUE) : list() - .["channels"] = list() - for (var/k in GLOB.radiochannels) - if (k == RADIO_CHANNEL_COMMON) - continue - .["channels"] += list(list("name" = k, "installed" = (k in borg.radio.channels))) - .["cell"] = borg.cell ? list("missing" = FALSE, "maxcharge" = borg.cell.maxcharge, "charge" = borg.cell.charge) : list("missing" = TRUE, "maxcharge" = 1, "charge" = 0) - .["modules"] = list() - for(var/moduletype in typesof(/obj/item/robot_module)) - var/obj/item/robot_module/module = moduletype - .["modules"] += list(list( - "name" = initial(module.name), - "type" = "[module]" - )) - .["ais"] = list(list("name" = "None", "ref" = "null", "connected" = isnull(borg.connected_ai))) - for(var/mob/living/silicon/ai/ai in GLOB.ai_list) - .["ais"] += list(list("name" = ai.name, "ref" = REF(ai), "connected" = (borg.connected_ai == ai))) - - -/datum/borgpanel/ui_act(action, params) - if(..()) - return - switch (action) - if ("set_charge") - var/newcharge = input("New charge (0-[borg.cell.maxcharge]):", borg.name, borg.cell.charge) as num|null - if (newcharge) - borg.cell.charge = CLAMP(newcharge, 0, borg.cell.maxcharge) - message_admins("[key_name_admin(user)] set the charge of [ADMIN_LOOKUPFLW(borg)] to [borg.cell.charge].") - log_admin("[key_name(user)] set the charge of [key_name(borg)] to [borg.cell.charge].") - if ("remove_cell") - QDEL_NULL(borg.cell) - message_admins("[key_name_admin(user)] deleted the cell of [ADMIN_LOOKUPFLW(borg)].") - log_admin("[key_name(user)] deleted the cell of [key_name(borg)].") - if ("change_cell") - var/chosen = pick_closest_path(null, make_types_fancy(typesof(/obj/item/stock_parts/cell))) - if (!ispath(chosen)) - chosen = text2path(chosen) - if (chosen) - if (borg.cell) - QDEL_NULL(borg.cell) - var/new_cell = new chosen(borg) - borg.cell = new_cell - borg.cell.charge = borg.cell.maxcharge - borg.diag_hud_set_borgcell() - message_admins("[key_name_admin(user)] changed the cell of [ADMIN_LOOKUPFLW(borg)] to [new_cell].") - log_admin("[key_name(user)] changed the cell of [key_name(borg)] to [new_cell].") - if ("toggle_emagged") - borg.SetEmagged(!borg.emagged) - if (borg.emagged) - message_admins("[key_name_admin(user)] emagged [ADMIN_LOOKUPFLW(borg)].") - log_admin("[key_name(user)] emagged [key_name(borg)].") - else - message_admins("[key_name_admin(user)] un-emagged [ADMIN_LOOKUPFLW(borg)].") - log_admin("[key_name(user)] un-emagged [key_name(borg)].") - if ("toggle_lawupdate") - borg.lawupdate = !borg.lawupdate - if (borg.lawupdate) - message_admins("[key_name_admin(user)] enabled lawsync on [ADMIN_LOOKUPFLW(borg)].") - log_admin("[key_name(user)] enabled lawsync on [key_name(borg)].") - else - message_admins("[key_name_admin(user)] disabled lawsync on [ADMIN_LOOKUPFLW(borg)].") - log_admin("[key_name(user)] disabled lawsync on [key_name(borg)].") - if ("toggle_lockdown") - borg.SetLockdown(!borg.lockcharge) - if (borg.lockcharge) - message_admins("[key_name_admin(user)] locked down [ADMIN_LOOKUPFLW(borg)].") - log_admin("[key_name(user)] locked down [key_name(borg)].") - else - message_admins("[key_name_admin(user)] released [ADMIN_LOOKUPFLW(borg)] from lockdown.") - log_admin("[key_name(user)] released [key_name(borg)] from lockdown.") - if ("toggle_scrambledcodes") - borg.scrambledcodes = !borg.scrambledcodes - if (borg.scrambledcodes) - message_admins("[key_name_admin(user)] enabled scrambled codes on [ADMIN_LOOKUPFLW(borg)].") - log_admin("[key_name(user)] enabled scrambled codes on [key_name(borg)].") - else - message_admins("[key_name_admin(user)] disabled scrambled codes on [ADMIN_LOOKUPFLW(borg)].") - log_admin("[key_name(user)] disabled scrambled codes on [key_name(borg)].") - if ("rename") - var/new_name = stripped_input(user,"What would you like to name this cyborg?","Input a name",borg.real_name,MAX_NAME_LEN) - if(!new_name) - return - message_admins("[key_name_admin(user)] renamed [ADMIN_LOOKUPFLW(borg)] to [new_name].") - log_admin("[key_name(user)] renamed [key_name(borg)] to [new_name].") - borg.fully_replace_character_name(borg.real_name,new_name) - if ("toggle_upgrade") - var/upgradepath = text2path(params["upgrade"]) - var/obj/item/borg/upgrade/installedupgrade = locate(upgradepath) in borg - if (installedupgrade) - installedupgrade.deactivate(borg, user) - borg.upgrades -= installedupgrade - message_admins("[key_name_admin(user)] removed the [installedupgrade] upgrade from [ADMIN_LOOKUPFLW(borg)].") - log_admin("[key_name(user)] removed the [installedupgrade] upgrade from [key_name(borg)].") - qdel(installedupgrade) - else - var/obj/item/borg/upgrade/upgrade = new upgradepath(borg) - upgrade.action(borg, user) - borg.upgrades += upgrade - message_admins("[key_name_admin(user)] added the [upgrade] borg upgrade to [ADMIN_LOOKUPFLW(borg)].") - log_admin("[key_name(user)] added the [upgrade] borg upgrade to [key_name(borg)].") - if ("toggle_radio") - var/channel = params["channel"] - if (channel in borg.radio.channels) // We're removing a channel - if (!borg.radio.keyslot) // There's no encryption key. This shouldn't happen but we can cope - borg.radio.channels -= channel - if (channel == RADIO_CHANNEL_SYNDICATE) - borg.radio.syndie = FALSE - else if (channel == "CentCom") - borg.radio.independent = FALSE - else - borg.radio.keyslot.channels -= channel - if (channel == RADIO_CHANNEL_SYNDICATE) - borg.radio.keyslot.syndie = FALSE - else if (channel == "CentCom") - borg.radio.keyslot.independent = FALSE - message_admins("[key_name_admin(user)] removed the [channel] radio channel from [ADMIN_LOOKUPFLW(borg)].") - log_admin("[key_name(user)] removed the [channel] radio channel from [key_name(borg)].") - else // We're adding a channel - if (!borg.radio.keyslot) // Assert that an encryption key exists - borg.radio.keyslot = new (borg.radio) - borg.radio.keyslot.channels[channel] = 1 - if (channel == RADIO_CHANNEL_SYNDICATE) - borg.radio.keyslot.syndie = TRUE - else if (channel == "CentCom") - borg.radio.keyslot.independent = TRUE - message_admins("[key_name_admin(user)] added the [channel] radio channel to [ADMIN_LOOKUPFLW(borg)].") - log_admin("[key_name(user)] added the [channel] radio channel to [key_name(borg)].") - borg.radio.recalculateChannels() - if ("setmodule") - var/newmodulepath = text2path(params["module"]) - if (ispath(newmodulepath)) - borg.module.transform_to(newmodulepath) - message_admins("[key_name_admin(user)] changed the module of [ADMIN_LOOKUPFLW(borg)] to [newmodulepath].") - log_admin("[key_name(user)] changed the module of [key_name(borg)] to [newmodulepath].") - if ("slavetoai") - var/mob/living/silicon/ai/newai = locate(params["slavetoai"]) in GLOB.ai_list - if (newai && newai != borg.connected_ai) - borg.notify_ai(DISCONNECT) - if(borg.shell) - borg.undeploy() - borg.connected_ai = newai - borg.notify_ai(TRUE) - message_admins("[key_name_admin(user)] slaved [ADMIN_LOOKUPFLW(borg)] to the AI [ADMIN_LOOKUPFLW(newai)].") - log_admin("[key_name(user)] slaved [key_name(borg)] to the AI [key_name(newai)].") - else if (params["slavetoai"] == "null") - borg.notify_ai(DISCONNECT) - if(borg.shell) - borg.undeploy() - borg.connected_ai = null - message_admins("[key_name_admin(user)] freed [ADMIN_LOOKUPFLW(borg)] from being slaved to an AI.") - log_admin("[key_name(user)] freed [key_name(borg)] from being slaved to an AI.") - if (borg.lawupdate) - borg.lawsync() - - . = TRUE diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index f4cdb12602..26a9bf2c32 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -25,33 +25,6 @@ Because if you select a player mob as owner it tries to do the proc for /mob/living/carbon/human/ instead. And that gives a run-time error. But you can call procs that are of type /mob/living/carbon/human/proc/ for that player. */ - -/client/proc/Cell() - set category = "Debug" - set name = "Air Status in Location" - if(!mob) - return - var/turf/T = get_turf(mob) - if(!isturf(T)) - return - atmosanalyzer_scan(usr, T, TRUE) - SSblackbox.record_feedback("tally", "admin_verb", 1, "Air Status In Location") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/cmd_admin_robotize(mob/M in GLOB.mob_list) - set category = "Fun" - set name = "Make Robot" - - if(!SSticker.HasRoundStarted()) - alert("Wait until the game starts") - return - if(ishuman(M)) - log_admin("[key_name(src)] has robotized [M.key].") - var/mob/living/carbon/human/H = M - INVOKE_ASYNC(H, TYPE_PROC_REF(/mob/living/carbon/human, Robotize)) - - else - alert("Invalid mob") - /client/proc/cmd_admin_blobize(mob/M in GLOB.mob_list) set category = "Fun" set name = "Make Blob" @@ -86,55 +59,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that log_admin("[key_name(src)] has animalized [M.key].") INVOKE_ASYNC(M, TYPE_PROC_REF(/mob, Animalize)) - -/client/proc/makepAI(turf/T in GLOB.mob_list) - set category = "Fun" - set name = "Make pAI" - set desc = "" - - var/list/available = list() - for(var/mob/C in GLOB.mob_list) - if(C.key) - available.Add(C) - var/mob/choice = input("Choose a player to play the pAI", "Spawn pAI") in sortNames(available) - if(!choice) - return 0 - if(!isobserver(choice)) - var/confirm = input("[choice.key] isn't ghosting right now. Are you sure you want to yank him out of them out of their body and place them in this pAI?", "Spawn pAI Confirmation", "No") in list("Yes", "No") - if(confirm != "Yes") - return 0 - var/obj/item/paicard/card = new(T) - var/mob/living/silicon/pai/pai = new(card) - - var/chosen_name = input(choice, "Enter your pAI name:", "pAI Name", "Personal AI") as text|null - - if (isnull(chosen_name)) - return - - pai.name = chosen_name - pai.real_name = pai.name - pai.key = choice.key - card.setPersonality(pai) - for(var/datum/paiCandidate/candidate in SSpai.candidates) - if(candidate.key == choice.key) - SSpai.candidates.Remove(candidate) - SSblackbox.record_feedback("tally", "admin_verb", 1, "Make pAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/cmd_admin_alienize(mob/M in GLOB.mob_list) - set category = "Fun" - set name = "Make Alien" - - if(!SSticker.HasRoundStarted()) - alert("Wait until the game starts") - return - if(ishuman(M)) - INVOKE_ASYNC(M, TYPE_PROC_REF(/mob/living/carbon/human, Alienize)) - SSblackbox.record_feedback("tally", "admin_verb", 1, "Make Alien") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - log_admin("[key_name(usr)] made [key_name(M)] into an alien at [AREACOORD(M)].") - message_admins("[key_name_admin(usr)] made [ADMIN_LOOKUPFLW(M)] into an alien.") - else - alert("Invalid mob") - /client/proc/cmd_admin_slimeize(mob/M in GLOB.mob_list) set category = "Fun" set name = "Make slime" @@ -175,57 +99,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that message_admins("[key_name_admin(src)] has deleted all ([counter]) instances of [hsbitem].") SSblackbox.record_feedback("tally", "admin_verb", 1, "Delete All") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/cmd_debug_make_powernets() - set category = "Debug" - set name = "Make Powernets" - SSmachines.makepowernets() - log_admin("[key_name(src)] has remade the powernet. makepowernets() called.") - message_admins("[key_name_admin(src)] has remade the powernets. makepowernets() called.") - SSblackbox.record_feedback("tally", "admin_verb", 1, "Make Powernets") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/cmd_admin_grantfullaccess(mob/M in GLOB.mob_list) - set category = "Admin" - set name = "Grant Full Access" - - if(!SSticker.HasRoundStarted()) - alert("Wait until the game starts") - return - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/obj/item/worn = H.wear_ring - var/obj/item/card/id/id = null - if(worn) - id = worn.GetID() - if(id) - id.icon_state = "gold" - id.access = get_all_accesses()+get_all_centcom_access()+get_all_syndicate_access() - else - id = new /obj/item/card/id/gold(H.loc) - id.access = get_all_accesses()+get_all_centcom_access()+get_all_syndicate_access() - id.registered_name = H.real_name - id.assignment = "Captain" - id.update_label() - - if(worn) - if(istype(worn, /obj/item/pda)) - var/obj/item/pda/PDA = worn - PDA.id = id - id.forceMove(PDA) - else if(istype(worn, /obj/item/storage/wallet)) - var/obj/item/storage/wallet/W = worn - W.front_id = id - id.forceMove(W) - W.update_icon() - else - H.equip_to_slot(id,SLOT_RING) - - else - alert("Invalid mob") - SSblackbox.record_feedback("tally", "admin_verb", 1, "Grant Full Access") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - log_admin("[key_name(src)] has granted [M.key] full access.") - message_admins("[key_name_admin(usr)] has granted [M.key] full access.") - /client/proc/cmd_assume_direct_control(mob/M in GLOB.mob_list) set category = "Admin" set name = "Assume direct control" @@ -245,42 +118,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that qdel(adminmob) SSblackbox.record_feedback("tally", "admin_verb", 1, "Assume Direct Control") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/cmd_admin_test_atmos_controllers() - set category = "Mapping" - set name = "Test Atmos Monitoring Consoles" - - var/list/dat = list() - - if(SSticker.current_state == GAME_STATE_STARTUP) - to_chat(usr, "Game still loading, please hold!") - return - - message_admins("[key_name_admin(usr)] used the Test Atmos Monitor debug command.") - log_admin("[key_name(usr)] used the Test Atmos Monitor debug command.") - - var/bad_shit = 0 - for(var/obj/machinery/computer/atmos_control/tank/console in GLOB.atmos_air_controllers) - dat += "

    [console] at [AREACOORD(console)]:


    " - if(console.input_tag == console.output_tag) - dat += "Error: input_tag is the same as the output_tag, \"[console.input_tag]\"!
    " - bad_shit++ - if(!LAZYLEN(console.input_info)) - dat += "Failed to find a valid outlet injector as an input with the tag [console.input_tag].
    " - bad_shit++ - if(!LAZYLEN(console.output_info)) - dat += "Failed to find a valid siphon pump as an outlet with the tag [console.output_tag].
    " - bad_shit++ - if(!bad_shit) - dat += "STATUS: NORMAL" - else - bad_shit = 0 - dat += "
    " - CHECK_TICK - - var/datum/browser/popup = new(usr, "testatmoscontroller", "Test Atmos Monitoring Consoles", 500, 750) - popup.set_content(dat.Join()) - popup.open() - /client/proc/cmd_admin_areatest(on_station) set category = "Mapping" set name = "Test Areas" @@ -295,7 +132,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that var/list/areas_with_LS = list() var/list/areas_with_intercom = list() var/list/areas_with_camera = list() - var/list/station_areas_blacklist = typecacheof(list(/area/holodeck/rec_center, /area/shuttle, /area/engine/supermatter, /area/science/test_area, /area/space, /area/solar, /area/mine, /area/ruin, /area/asteroid)) + var/list/station_areas_blacklist = typecacheof(list(/area/shuttle, /area/engine/supermatter, /area/science/test_area, /area/space, /area/solar, /area/mine, /area/ruin, /area/asteroid)) if(SSticker.current_state == GAME_STATE_STARTUP) to_chat(usr, "Game still loading, please hold!") @@ -321,35 +158,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that areas_all.Add(A.type) CHECK_TICK - for(var/obj/machinery/power/apc/APC in GLOB.apcs_list) - var/area/A = APC.area - if(!A) - dat += "Skipped over [APC] in invalid location, [APC.loc]." - continue - if(!(A.type in areas_with_APC)) - areas_with_APC.Add(A.type) - else if(A.type in areas_all) - areas_with_multiple_APCs.Add(A.type) - CHECK_TICK - - for(var/obj/machinery/airalarm/AA in GLOB.machines) - var/area/A = get_area(AA) - if(!A) //Make sure the target isn't inside an object, which results in runtimes. - dat += "Skipped over [AA] in invalid location, [AA.loc].
    " - continue - if(!(A.type in areas_with_air_alarm)) - areas_with_air_alarm.Add(A.type) - CHECK_TICK - - for(var/obj/machinery/requests_console/RC in GLOB.machines) - var/area/A = get_area(RC) - if(!A) - dat += "Skipped over [RC] in invalid location, [RC.loc].
    " - continue - if(!(A.type in areas_with_RC)) - areas_with_RC.Add(A.type) - CHECK_TICK - for(var/obj/machinery/light/L in GLOB.machines) var/area/A = get_area(L) if(!A) @@ -359,33 +167,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that areas_with_light.Add(A.type) CHECK_TICK - for(var/obj/machinery/light_switch/LS in GLOB.machines) - var/area/A = get_area(LS) - if(!A) - dat += "Skipped over [LS] in invalid location, [LS.loc].
    " - continue - if(!(A.type in areas_with_LS)) - areas_with_LS.Add(A.type) - CHECK_TICK - - for(var/obj/item/radio/intercom/I in GLOB.machines) - var/area/A = get_area(I) - if(!A) - dat += "Skipped over [I] in invalid location, [I.loc].
    " - continue - if(!(A.type in areas_with_intercom)) - areas_with_intercom.Add(A.type) - CHECK_TICK - - for(var/obj/machinery/camera/C in GLOB.machines) - var/area/A = get_area(C) - if(!A) - dat += "Skipped over [C] in invalid location, [C.loc].
    " - continue - if(!(A.type in areas_with_camera)) - areas_with_camera.Add(A.type) - CHECK_TICK - var/list/areas_without_APC = areas_all - areas_with_APC var/list/areas_without_air_alarm = areas_all - areas_with_air_alarm var/list/areas_without_RC = areas_all - areas_with_RC @@ -563,64 +344,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that return dresscode -/client/proc/startSinglo() - - set category = "Debug" - set name = "Start Singularity" - set desc = "" - - if(alert("Are you sure? This will start up the engine. Should only be used during debug!",,"Yes","No") != "Yes") - return - - for(var/obj/machinery/power/emitter/E in GLOB.machines) - if(E.anchored) - E.active = 1 - - for(var/obj/machinery/field/generator/F in GLOB.machines) - if(F.active == 0) - F.active = 1 - F.state = 2 - F.power = 250 - F.anchored = TRUE - F.warming_up = 3 - F.start_fields() - F.update_icon() - - spawn(30) - for(var/obj/machinery/the_singularitygen/G in GLOB.machines) - if(G.anchored) - var/obj/singularity/S = new /obj/singularity(get_turf(G), 50) -// qdel(G) - S.energy = 1750 - S.current_size = 7 - S.icon = 'icons/effects/224x224.dmi' - S.icon_state = "singularity_s7" - S.pixel_x = -96 - S.pixel_y = -96 - S.grav_pull = 0 - //S.consume_range = 3 - S.dissipate = 0 - //S.dissipate_delay = 10 - //S.dissipate_track = 0 - //S.dissipate_strength = 10 - - for(var/obj/machinery/power/rad_collector/Rad in GLOB.machines) - if(Rad.anchored) - if(!Rad.loaded_tank) - var/obj/item/tank/internals/plasma/Plasma = new/obj/item/tank/internals/plasma(Rad) - Plasma.air_contents.assert_gas(/datum/gas/plasma) - Plasma.air_contents.gases[/datum/gas/plasma][MOLES] = 70 - Rad.drainratio = 0 - Rad.loaded_tank = Plasma - Plasma.forceMove(Rad) - - if(!Rad.active) - Rad.toggle_power() - - for(var/obj/machinery/power/smes/SMES in GLOB.machines) - if(SMES.anchored) - SMES.input_attempt = 1 - /client/proc/cmd_debug_mob_lists() set category = "Debug" set name = "Debug Mob Lists" diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index 01472ae1ed..c8b67cf967 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -1,12 +1,3 @@ -/client/proc/air_status(turf/target) - set category = "Debug" - set name = "Display Air Status" - - if(!isturf(target)) - return - atmosanalyzer_scan(usr, target, TRUE) - SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Air Status") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - /client/proc/fix_next_move() set category = "Debug" set name = "Unfreeze Everyone" diff --git a/code/modules/admin/verbs/machine_upgrade.dm b/code/modules/admin/verbs/machine_upgrade.dm deleted file mode 100644 index 8d0ffa14f4..0000000000 --- a/code/modules/admin/verbs/machine_upgrade.dm +++ /dev/null @@ -1,13 +0,0 @@ -/proc/machine_upgrade(obj/machinery/M in world) - set name = "Tweak Component Ratings" - set category = "Debug" - if (!istype(M)) - return - - var/new_rating = input("Enter new rating:","Num") as num|null - if(new_rating && M.component_parts) - for(var/obj/item/stock_parts/P in M.component_parts) - P.rating = new_rating - M.RefreshParts() - - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Machine Upgrade", "[new_rating]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 3b5511a023..40819c7e2c 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -20,25 +20,16 @@ //- Check if the area has too much empty space. If so, make it smaller and replace the rest with maintenance tunnels. GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list( - /client/proc/camera_view, //-errorage - /client/proc/sec_camera_report, //-errorage /client/proc/intercom_view, //-errorage - /client/proc/air_status, //Air things - /client/proc/Cell, //More air things - /client/proc/atmosscan, //check plumbing - /client/proc/powerdebug, //check power /client/proc/count_objects_on_z_level, /client/proc/count_objects_all, /client/proc/cmd_assume_direct_control, //-errorage - /client/proc/startSinglo, /client/proc/set_server_fps, //allows you to set the ticklag. - /client/proc/cmd_admin_grantfullaccess, /client/proc/cmd_admin_areatest_all, /client/proc/cmd_admin_areatest_station, #ifdef TESTING /client/proc/see_dirty_varedits, #endif - /client/proc/cmd_admin_test_atmos_controllers, /client/proc/cmd_admin_rejuvenate, /datum/admins/proc/show_traitor_panel, /client/proc/disable_communication, @@ -67,26 +58,6 @@ GLOBAL_PROTECT(admin_verbs_debug_mapping) /obj/effect/debugging/marker/Move() return 0 -/client/proc/camera_view() - set category = "Mapping" - set name = "Camera Range Display" - - var/on = FALSE - for(var/turf/T in world) - if(T.maptext) - on = TRUE - T.maptext = null - - if(!on) - var/list/seen = list() - for(var/obj/machinery/camera/C in GLOB.cameranet.cameras) - for(var/turf/T in C.can_see()) - seen[T]++ - for(var/turf/T in seen) - T.maptext = "[seen[T]]" - SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Camera Range") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Camera Range") - #ifdef TESTING GLOBAL_LIST_EMPTY(dirty_vars) @@ -104,46 +75,6 @@ GLOBAL_LIST_EMPTY(dirty_vars) popup.open() #endif -/client/proc/sec_camera_report() - set category = "Mapping" - set name = "Camera Report" - - if(!Master) - alert(usr,"Master_controller not found.","Sec Camera Report") - return 0 - - var/list/obj/machinery/camera/CL = list() - - for(var/obj/machinery/camera/C in GLOB.cameranet.cameras) - CL += C - - var/output = {"Camera Abnormalities Report
    -The following abnormalities have been detected. The ones in red need immediate attention: Some of those in black may be intentional.
      "} - - for(var/obj/machinery/camera/C1 in CL) - for(var/obj/machinery/camera/C2 in CL) - if(C1 != C2) - if(C1.c_tag == C2.c_tag) - output += "
    • c_tag match for cameras at [ADMIN_VERBOSEJMP(C1)] and [ADMIN_VERBOSEJMP(C2)] - c_tag is [C1.c_tag]
    • " - if(C1.loc == C2.loc && C1.dir == C2.dir && C1.pixel_x == C2.pixel_x && C1.pixel_y == C2.pixel_y) - output += "
    • FULLY overlapping cameras at [ADMIN_VERBOSEJMP(C1)] Networks: [json_encode(C1.network)] and [json_encode(C2.network)]
    • " - if(C1.loc == C2.loc) - output += "
    • Overlapping cameras at [ADMIN_VERBOSEJMP(C1)] Networks: [json_encode(C1.network)] and [json_encode(C2.network)]
    • " - var/turf/T = get_step(C1,turn(C1.dir,180)) - if(!T || !isturf(T) || !T.density ) - if(!(locate(/obj/structure/grille) in T)) - var/window_check = 0 - for(var/obj/structure/window/W in T) - if (W.dir == turn(C1.dir,180) || (W.dir in GLOB.diagonals)) - window_check = 1 - break - if(!window_check) - output += "
    • Camera not connected to wall at [ADMIN_VERBOSEJMP(C1)] Network: [json_encode(C1.network)]
    • " - - output += "
    " - usr << browse(output,"window=airreport;size=1000x500") - SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Camera Report") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - /client/proc/intercom_view() set category = "Mapping" set name = "Intercom Range Display" @@ -154,12 +85,6 @@ GLOBAL_LIST_EMPTY(dirty_vars) for(var/obj/effect/debugging/marker/M in world) qdel(M) - if(intercom_range_display_status) - for(var/obj/item/radio/intercom/I in world) - for(var/turf/T in orange(7,I)) - var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T) - if (!(F in view(7,I.loc))) - qdel(F) SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Intercom Range") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_show_at_list() diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm deleted file mode 100644 index 64c38a3c55..0000000000 --- a/code/modules/admin/verbs/onlyone.dm +++ /dev/null @@ -1,31 +0,0 @@ -GLOBAL_VAR_INIT(highlander, FALSE) -/client/proc/only_one() //Gives everyone kilts, berets, claymores, and pinpointers, with the objective to hijack the emergency shuttle. - if(!SSticker.HasRoundStarted()) - alert("The game hasn't started yet!") - return - GLOB.highlander = TRUE - - send_to_playing_players("THERE CAN BE ONLY ONE") - - for(var/obj/item/disk/nuclear/N in GLOB.poi_list) - var/datum/component/stationloving/component = N.GetComponent(/datum/component/stationloving) - if (component) - component.relocate() //Gets it out of bags and such - - for(var/mob/living/carbon/human/H in GLOB.player_list) - if(H.stat == DEAD) - continue - H.make_scottish() - - message_admins("[key_name_admin(usr)] used THERE CAN BE ONLY ONE!") - log_admin("[key_name(usr)] used THERE CAN BE ONLY ONE.") - addtimer(CALLBACK(SSshuttle.emergency, TYPE_PROC_REF(/obj/docking_port/mobile/emergency, request), null, 1), 50) - -/client/proc/only_one_delayed() - send_to_playing_players("Bagpipes begin to blare. You feel Scottish pride coming over you.") - message_admins("[key_name_admin(usr)] used (delayed) THERE CAN BE ONLY ONE!") - log_admin("[key_name(usr)] used delayed THERE CAN BE ONLY ONE.") - addtimer(CALLBACK(src, PROC_REF(only_one)), 420) - -/mob/living/carbon/human/proc/make_scottish() - mind.add_antag_datum(/datum/antagonist/highlander) diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index 444fdd70db..ea809d30fc 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -33,11 +33,6 @@ prayer_type = "CHAPLAIN PRAYER" if(GLOB.deity) deity = GLOB.deity - else if(iscultist(usr)) - cross.icon_state = "tome" - font_color = "red" - prayer_type = "CULTIST PRAYER" - deity = "Nar'Sie" else if(isliving(usr)) var/mob/living/L = usr if(HAS_TRAIT(L, TRAIT_SPIRITUAL)) @@ -72,22 +67,19 @@ var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN) msg = "CENTCOM:[ADMIN_FULLMONTY(Sender)] [ADMIN_CENTCOM_REPLY(Sender)]: [msg]" to_chat(GLOB.admins, msg) - for(var/obj/machinery/computer/communications/C in GLOB.machines) - C.overrideCooldown() + /proc/Syndicate_announce(text , mob/Sender) var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN) msg = "SYNDICATE:[ADMIN_FULLMONTY(Sender)] [ADMIN_SYNDICATE_REPLY(Sender)]: [msg]" to_chat(GLOB.admins, msg) - for(var/obj/machinery/computer/communications/C in GLOB.machines) - C.overrideCooldown() + /proc/Nuke_request(text , mob/Sender) var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN) msg = "NUKE CODE REQUEST:[ADMIN_FULLMONTY(Sender)] [ADMIN_CENTCOM_REPLY(Sender)] [ADMIN_SET_SD_CODE]: [msg]" to_chat(GLOB.admins, msg) - for(var/obj/machinery/computer/communications/C in GLOB.machines) - C.overrideCooldown() + /mob/proc/roguepray(msg as text) // set category = "IC" diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 1bc8a5d8a9..806824ef60 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -61,9 +61,6 @@ if(!istype(H)) to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return - if(!istype(H.ears, /obj/item/radio/headset)) - to_chat(usr, "The person you are trying to contact is not wearing a headset.") - return if (!sender) sender = input("Who is the message from?", "Sender") as null|anything in list(RADIO_CHANNEL_CENTCOM,RADIO_CHANNEL_SYNDICATE) @@ -281,55 +278,6 @@ to_chat(C, "You have been [muteunmute] from [mute_string] by [key_name(usr, include_name = FALSE)].") SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Mute [feedback_string]", "[P.muted & mute_type]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -//I use this proc for respawn character too. /N -/proc/create_xeno(ckey) - if(!ckey) - var/list/candidates = list() - for(var/mob/M in GLOB.player_list) - if(M.stat != DEAD) - continue //we are not dead! - if(!(ROLE_ALIEN in M.client.prefs.be_special)) - continue //we don't want to be an alium - if(M.client.is_afk()) - continue //we are afk - if(M.mind && M.mind.current && M.mind.current.stat != DEAD) - continue //we have a live body we are tied to - candidates += M.ckey - if(candidates.len) - ckey = input("Pick the player you want to respawn as a xeno.", "Suitable Candidates") as null|anything in sortKey(candidates) - else - to_chat(usr, "Error: create_xeno(): no suitable candidates.") - if(!istext(ckey)) - return 0 - - var/alien_caste = input(usr, "Please choose which caste to spawn.","Pick a caste",null) as null|anything in list("Queen","Praetorian","Hunter","Sentinel","Drone","Larva") - var/obj/effect/landmark/spawn_here = GLOB.xeno_spawn.len ? pick(GLOB.xeno_spawn) : null - var/mob/living/carbon/alien/new_xeno - switch(alien_caste) - if("Queen") - new_xeno = new /mob/living/carbon/alien/humanoid/royal/queen(spawn_here) - if("Praetorian") - new_xeno = new /mob/living/carbon/alien/humanoid/royal/praetorian(spawn_here) - if("Hunter") - new_xeno = new /mob/living/carbon/alien/humanoid/hunter(spawn_here) - if("Sentinel") - new_xeno = new /mob/living/carbon/alien/humanoid/sentinel(spawn_here) - if("Drone") - new_xeno = new /mob/living/carbon/alien/humanoid/drone(spawn_here) - if("Larva") - new_xeno = new /mob/living/carbon/alien/larva(spawn_here) - else - return 0 - if(!spawn_here) - SSjob.SendToLateJoin(new_xeno, FALSE) - - new_xeno.ckey = ckey - var/msg = "[key_name_admin(usr)] has spawned [ckey] as a filthy xeno [alien_caste]." - message_admins(msg) - admin_ticket_log(new_xeno, msg) - return 1 - /* If a guy was gibbed and you want to revive him, this is a good way to do so. Works kind of like entering the game with a new character. Character receives a new mind if they didn't have one. @@ -357,43 +305,9 @@ Traitors and the like can also be revived with the previous role mostly intact. return if(G_found.mind && !G_found.mind.active) //mind isn't currently in use by someone/something - //Check if they were an alien - if(G_found.mind.assigned_role == ROLE_ALIEN) - if(alert("This character appears to have been an alien. Would you like to respawn them as such?",,"Yes","No")=="Yes") - var/turf/T - if(GLOB.xeno_spawn.len) - T = pick(GLOB.xeno_spawn) - - var/mob/living/carbon/alien/new_xeno - switch(G_found.mind.special_role)//If they have a mind, we can determine which caste they were. - if("Hunter") - new_xeno = new /mob/living/carbon/alien/humanoid/hunter(T) - if("Sentinel") - new_xeno = new /mob/living/carbon/alien/humanoid/sentinel(T) - if("Drone") - new_xeno = new /mob/living/carbon/alien/humanoid/drone(T) - if("Praetorian") - new_xeno = new /mob/living/carbon/alien/humanoid/royal/praetorian(T) - if("Queen") - new_xeno = new /mob/living/carbon/alien/humanoid/royal/queen(T) - else//If we don't know what special role they have, for whatever reason, or they're a larva. - create_xeno(G_found.ckey) - return - - if(!T) - SSjob.SendToLateJoin(new_xeno, FALSE) - - //Now to give them their mind back. - G_found.mind.transfer_to(new_xeno) //be careful when doing stuff like this! I've already checked the mind isn't in use - new_xeno.key = G_found.key - to_chat(new_xeno, "You have been fully respawned. Enjoy the game.") - var/msg = "[key_name_admin(usr)] has respawned [new_xeno.key] as a filthy xeno." - message_admins(msg) - admin_ticket_log(new_xeno, msg) - return //all done. The ghost is auto-deleted //check if they were a monkey - else if(findtext(G_found.real_name,"monkey")) + if(findtext(G_found.real_name,"monkey")) if(alert("This character appears to have been a monkey. Would you like to respawn them as such?",,"Yes","No")=="Yes") var/mob/living/carbon/monkey/new_monkey = new SSjob.SendToLateJoin(new_monkey) @@ -462,37 +376,9 @@ Traitors and the like can also be revived with the previous role mostly intact. new_character.forceMove(pick(GLOB.wizardstart)) var/datum/antagonist/wizard/A = new_character.mind.has_antag_datum(/datum/antagonist/wizard,TRUE) A.equip_wizard() - if(ROLE_SYNDICATE) - new_character.forceMove(pick(GLOB.nukeop_start)) - var/datum/antagonist/nukeop/N = new_character.mind.has_antag_datum(/datum/antagonist/nukeop,TRUE) - N.equip_op() - if(ROLE_NINJA) - var/list/ninja_spawn = list() - for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list) - ninja_spawn += L - var/datum/antagonist/ninja/ninjadatum = new_character.mind.has_antag_datum(/datum/antagonist/ninja) - ninjadatum.equip_space_ninja() - if(ninja_spawn.len) - new_character.forceMove(pick(ninja_spawn)) - - else//They may also be a cyborg or AI. - switch(new_character.mind.assigned_role) - if("Cyborg")//More rigging to make em' work and check if they're traitor. - new_character = new_character.Robotize(TRUE) - if("AI") - new_character = new_character.AIize() - else - SSjob.EquipRank(new_character, new_character.mind.assigned_role, 1)//Or we simply equip them. - - //Announces the character on all the systems, based on the record. - if(!issilicon(new_character))//If they are not a cyborg/AI. - if(!record_found&&new_character.mind.assigned_role!=new_character.mind.special_role)//If there are no records for them. If they have a record, this info is already in there. MODE people are not announced anyway. - //Power to the user! - if(alert(new_character,"Warning: No data core entry detected. Would you like to announce the arrival of this character by adding them to various databases, such as medical records?",,"No","Yes")=="Yes") - GLOB.data_core.manifest_inject(new_character) - - if(alert(new_character,"Would you like an active AI to announce this character?",,"No","Yes")=="Yes") - AnnounceArrival(new_character, new_character.mind.assigned_role) + + else + SSjob.EquipRank(new_character, new_character.mind.assigned_role, 1)//Or we simply equip them. var/msg = "[admin] has respawned [player_key] as [new_character.real_name]." message_admins(msg) @@ -518,13 +404,6 @@ Traitors and the like can also be revived with the previous role mostly intact. log_admin("Admin [key_name(usr)] has added a new AI law - [input]") message_admins("Admin [key_name_admin(usr)] has added a new AI law - [input]") - var/show_log = alert(src, "Show ion message?", "Message", "Yes", "No") - var/announce_ion_laws = (show_log == "Yes" ? 100 : 0) - - var/datum/round_event/ion_storm/add_law_only/ion = new() - ion.announceChance = announce_ion_laws - ion.ionMessage = input - SSblackbox.record_feedback("tally", "admin_verb", 1, "Add Custom AI Law") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_rejuvenate(mob/living/M in GLOB.mob_list) @@ -559,16 +438,12 @@ Traitors and the like can also be revived with the previous role mostly intact. return var/confirm = alert(src, "Do you want to announce the contents of the report to the crew?", "Announce", "Yes", "No", "Cancel") - var/announce_command_report = TRUE switch(confirm) if("Yes") priority_announce(input, null, 'sound/blank.ogg') - announce_command_report = FALSE if("Cancel") return - print_command_report(input, "[announce_command_report ? "Classified " : ""][command_name()] Update", announce_command_report) - log_admin("[key_name(src)] has created a command report: [input]") message_admins("[key_name_admin(src)] has created a command report") SSblackbox.record_feedback("tally", "admin_verb", 1, "Create Command Report") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -827,32 +702,11 @@ Traitors and the like can also be revived with the previous role mostly intact. var/level = input("Select security level to change to","Set Security Level") as null|anything in list("green","blue","red","delta") if(level) - set_security_level(level) log_admin("[key_name(usr)] changed the security level to [level]") message_admins("[key_name_admin(usr)] changed the security level to [level]") SSblackbox.record_feedback("tally", "admin_verb", 1, "Set Security Level [capitalize(level)]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/toggle_nuke(obj/machinery/nuclearbomb/N in GLOB.nuke_list) - set name = "Toggle Nuke" - set category = "Fun" - set popup_menu = 0 - set hidden = 1 - if(!check_rights(R_DEBUG)) - return - - if(!N.timing) - var/newtime = input(usr, "Set activation timer.", "Activate Nuke", "[N.timer_set]") as num|null - if(!newtime) - return - N.timer_set = newtime - N.set_safety() - N.set_active() - - log_admin("[key_name(usr)] [N.timing ? "activated" : "deactivated"] a nuke at [AREACOORD(N)].") - message_admins("[ADMIN_LOOKUPFLW(usr)] [N.timing ? "activated" : "deactivated"] a nuke at [ADMIN_VERBOSEJMP(N)].") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Nuke", "[N.timing]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - /client/proc/toggle_combo_hud() set category = "Admin" set name = "Toggle Combo HUD" @@ -1013,23 +867,6 @@ Traitors and the like can also be revived with the previous role mostly intact. log_admin("[key_name(usr)] sent \"[input]\" as the Tip of the Round.") SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Tip") -/client/proc/modify_goals() - set category = "Debug" - set name = "Modify goals" - - if(!check_rights(R_ADMIN)) - return - - holder.modify_goals() - -/datum/admins/proc/modify_goals() - var/dat = "" - for(var/datum/station_goal/S in SSticker.mode.station_goals) - dat += "[S.name] - Announce | Remove
    " - dat += "
    Add New Goal" - usr << browse(dat, "window=goals;size=400x400") - - /client/proc/toggle_hub() set category = "Server" set name = "Toggle Hub" @@ -1085,12 +922,6 @@ Traitors and the like can also be revived with the previous role mostly intact. bluespace_artillery(target) if(ADMIN_PUNISHMENT_FIREBALL) new /obj/effect/temp_visual/target(get_turf(target)) - if(ADMIN_PUNISHMENT_ROD) - var/turf/T = get_turf(target) - var/startside = pick(GLOB.cardinals) - var/turf/startT = spaceDebrisStartLoc(startside, T.z) - var/turf/endT = spaceDebrisFinishLoc(startside, T.z) - new /obj/effect/immovablerod(startT, endT,target) if(ADMIN_PUNISHMENT_SUPPLYPOD_QUICK) var/target_path = input(usr,"Enter typepath of an atom you'd like to send with the pod (type \"empty\" to send an empty pod):" ,"Typepath","/obj/item/reagent_containers/food/snacks/grown/harebell") as null|text var/obj/structure/closet/supplypod/centcompod/pod = new() @@ -1155,7 +986,7 @@ Traitors and the like can also be revived with the previous role mostly intact. for (var/mob/living/carbon in world) // Iterate through all mobs in the world if (HAS_TRAIT(carbon, TRAIT_ASSASSIN) && !(carbon.stat == DEAD)) //Check if they are an assassin and alive for(var/obj/item/I in carbon) // Checks to see if the assassin has their dagger on them. If so, the dagger will let them know of a new target. - if(istype(I, /obj/item/rogueweapon/huntingknife/idagger/steel/profane)) // Checks to see if the assassin has their dagger on them. + if(istype(I, /obj/item/rogueweapon/knife/dagger/steel/profane)) // Checks to see if the assassin has their dagger on them. carbon.visible_message("profane dagger whispers, \"The Dark Sun Graggar himself has ordered us to punish [target.real_name] for their crimes!\"") to_chat(target.mind, "My hair stands on end. Has someone just said my name? I should watch my back.") punish_log(target, punishment) diff --git a/code/modules/admin/verbs/spawnobjasmob.dm b/code/modules/admin/verbs/spawnobjasmob.dm deleted file mode 100644 index 86e7e408d3..0000000000 --- a/code/modules/admin/verbs/spawnobjasmob.dm +++ /dev/null @@ -1,70 +0,0 @@ -/datum/admins/proc/spawn_objasmob(object as text) - set category = "Debug" - set desc = "" - set name = "Spawn object-mob" - - if(!check_rights(R_SPAWN)) - return - - var/chosen = pick_closest_path(object, make_types_fancy(subtypesof(/obj))) - - if (!chosen) - return - - var/mob/living/simple_animal/hostile/mimic/copy/basemob = /mob/living/simple_animal/hostile/mimic/copy - - var/obj/chosen_obj = text2path(chosen) - - var/list/settings = list( - "mainsettings" = list( - "name" = list("desc" = "Name", "type" = "string", "value" = "Bob"), - "maxhealth" = list("desc" = "Max. health", "type" = "number", "value" = 100), - "access" = list("desc" = "Access ID", "type" = "datum", "path" = "/obj/item/card/id", "value" = "Default"), - "objtype" = list("desc" = "Base obj type", "type" = "datum", "path" = "/obj", "value" = "[chosen]"), - "googlyeyes" = list("desc" = "Googly eyes", "type" = "boolean", "value" = "No"), - "disableai" = list("desc" = "Disable AI", "type" = "boolean", "value" = "Yes"), - "idledamage" = list("desc" = "Damaged while idle", "type" = "boolean", "value" = "No"), - "dropitem" = list("desc" = "Drop obj on death", "type" = "boolean", "value" = "Yes"), - "mobtype" = list("desc" = "Base mob type", "type" = "datum", "path" = "/mob/living/simple_animal/hostile/mimic/copy", "value" = "/mob/living/simple_animal/hostile/mimic/copy"), - "ckey" = list("desc" = "ckey", "type" = "ckey", "value" = "none"), - ) - ) - - var/list/prefreturn = presentpreflikepicker(usr,"Customize mob", "Customize mob", Button1="Ok", width = 450, StealFocus = 1,Timeout = 0, settings=settings) - if (prefreturn["button"] == 1) - settings = prefreturn["settings"] - var/mainsettings = settings["mainsettings"] - chosen_obj = text2path(mainsettings["objtype"]["value"]) - - basemob = text2path(mainsettings["mobtype"]["value"]) - if (!ispath(basemob, /mob/living/simple_animal/hostile/mimic/copy) || !ispath(chosen_obj, /obj)) - to_chat(usr, "Mob or object path invalid") - - basemob = new basemob(get_turf(usr), new chosen_obj(get_turf(usr)), usr, mainsettings["dropitem"]["value"] == "Yes" ? FALSE : TRUE, (mainsettings["googlyeyes"]["value"] == "Yes" ? FALSE : TRUE)) - - if (mainsettings["disableai"]["value"] == "Yes") - basemob.toggle_ai(AI_OFF) - - if (mainsettings["idledamage"]["value"] == "No") - basemob.idledamage = FALSE - - if (mainsettings["access"]) - var/newaccess = text2path(mainsettings["access"]["value"]) - if (ispath(newaccess)) - basemob.access_card = new newaccess - - if (mainsettings["maxhealth"]["value"]) - if (!isnum(mainsettings["maxhealth"]["value"])) - mainsettings["maxhealth"]["value"] = text2num(mainsettings["maxhealth"]["value"]) - if (mainsettings["maxhealth"]["value"] > 0) - basemob.maxHealth = basemob.maxHealth = mainsettings["maxhealth"]["value"] - - if (mainsettings["name"]["value"]) - basemob.name = basemob.real_name = html_decode(mainsettings["name"]["value"]) - - if (mainsettings["ckey"]["value"] != "none") - basemob.ckey = mainsettings["ckey"]["value"] - - - log_admin("[key_name(usr)] spawned a sentient object-mob [basemob] from [chosen_obj] at [AREACOORD(usr)]") - SSblackbox.record_feedback("tally", "admin_verb", 1, "Spawn object-mob") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/tripAI.dm b/code/modules/admin/verbs/tripAI.dm deleted file mode 100644 index 7742d6ea66..0000000000 --- a/code/modules/admin/verbs/tripAI.dm +++ /dev/null @@ -1,20 +0,0 @@ -/client/proc/triple_ai() - set category = "Fun" - set name = "Create AI Triumvirate" - - if(SSticker.current_state > GAME_STATE_PREGAME) - to_chat(usr, "This option is currently only usable during pregame. This may change at a later date.") - return - - var/datum/job/job = SSjob.GetJob("AI") - if(!job) - to_chat(usr, "Unable to locate the AI job") - return - if(SSticker.triai) - SSticker.triai = 0 - to_chat(usr, "Only one AI will be spawned at round start.") - message_admins("[key_name_admin(usr)] has toggled off triple AIs at round start.") - else - SSticker.triai = 1 - to_chat(usr, "There will be an AI Triumvirate at round start.") - message_admins("[key_name_admin(usr)] has toggled on triple AIs at round start.") diff --git a/code/modules/admin/view_variables/mass_edit_variables.dm b/code/modules/admin/view_variables/mass_edit_variables.dm index fb48860c68..2d48ce4e1f 100644 --- a/code/modules/admin/view_variables/mass_edit_variables.dm +++ b/code/modules/admin/view_variables/mass_edit_variables.dm @@ -210,12 +210,6 @@ . += thing CHECK_TICK - else if (ispath(T, /obj/machinery/door)) - for(var/obj/machinery/door/thing in world) - if (typecache[thing.type]) - . += thing - CHECK_TICK - else if (ispath(T, /obj/machinery)) for(var/obj/machinery/thing in world) if (typecache[thing.type]) diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index d2a2d8a93e..943c5fcb66 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -92,189 +92,3 @@ app_mind.special_role = "apprentice" // SEND_SOUND(M, sound('sound/blank.ogg')) - -///////////BORGS AND OPERATIVES - - -/obj/item/antag_spawner/nuke_ops - name = "syndicate operative teleporter" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "locator" - var/borg_to_spawn - -/obj/item/antag_spawner/nuke_ops/proc/check_usability(mob/user) - if(used) - to_chat(user, "[src] is out of power!") - return FALSE - if(!user.mind.has_antag_datum(/datum/antagonist/nukeop,TRUE)) - to_chat(user, "AUTHENTICATION FAILURE. ACCESS DENIED.") - return FALSE - if(!user.onSyndieBase()) - to_chat(user, "[src] is out of range! It can only be used at my base!") - return FALSE - return TRUE - - -/obj/item/antag_spawner/nuke_ops/attack_self(mob/user) - if(!(check_usability(user))) - return - - to_chat(user, "I activate [src] and wait for confirmation.") - var/list/nuke_candidates = pollGhostCandidates("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", ROLE_OPERATIVE, null, ROLE_OPERATIVE, 150, POLL_IGNORE_SYNDICATE) - if(LAZYLEN(nuke_candidates)) - if(QDELETED(src) || !check_usability(user)) - return - used = TRUE - var/mob/dead/observer/G = pick(nuke_candidates) - spawn_antag(G.client, get_turf(src), "syndieborg", user.mind) - do_sparks(4, TRUE, src) - qdel(src) - else - to_chat(user, "Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on my uplink to get my points refunded.") - -/obj/item/antag_spawner/nuke_ops/spawn_antag(client/C, turf/T, kind, datum/mind/user) - var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) - C.prefs.copy_to(M) - M.key = C.key - - var/datum/antagonist/nukeop/new_op = new() - new_op.send_to_spawnpoint = FALSE - new_op.nukeop_outfit = /datum/outfit/syndicate/no_crystals - - var/datum/antagonist/nukeop/creator_op = user.has_antag_datum(/datum/antagonist/nukeop,TRUE) - if(creator_op) - M.mind.add_antag_datum(new_op,creator_op.nuke_team) - M.mind.special_role = "Nuclear Operative" - -//////CLOWN OP -/obj/item/antag_spawner/nuke_ops/clown - name = "clown operative teleporter" - desc = "" - -/obj/item/antag_spawner/nuke_ops/clown/spawn_antag(client/C, turf/T, kind, datum/mind/user) - var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) - C.prefs.copy_to(M) - M.key = C.key - - var/datum/antagonist/nukeop/clownop/new_op = new /datum/antagonist/nukeop/clownop() - new_op.send_to_spawnpoint = FALSE - new_op.nukeop_outfit = /datum/outfit/syndicate/clownop/no_crystals - - var/datum/antagonist/nukeop/creator_op = user.has_antag_datum(/datum/antagonist/nukeop/clownop,TRUE) - if(creator_op) - M.mind.add_antag_datum(new_op, creator_op.nuke_team) - M.mind.special_role = "Clown Operative" - - -//////SYNDICATE BORG -/obj/item/antag_spawner/nuke_ops/borg_tele - name = "syndicate cyborg teleporter" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "locator" - -/obj/item/antag_spawner/nuke_ops/borg_tele/assault - name = "syndicate assault cyborg teleporter" - borg_to_spawn = "Assault" - -/obj/item/antag_spawner/nuke_ops/borg_tele/medical - name = "syndicate medical teleporter" - borg_to_spawn = "Medical" - -/obj/item/antag_spawner/nuke_ops/borg_tele/saboteur - name = "syndicate saboteur teleporter" - borg_to_spawn = "Saboteur" - -/obj/item/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T, kind, datum/mind/user) - var/mob/living/silicon/robot/R - var/datum/antagonist/nukeop/creator_op = user.has_antag_datum(/datum/antagonist/nukeop,TRUE) - if(!creator_op) - return - - switch(borg_to_spawn) - if("Medical") - R = new /mob/living/silicon/robot/modules/syndicate/medical(T) - if("Saboteur") - R = new /mob/living/silicon/robot/modules/syndicate/saboteur(T) - else - R = new /mob/living/silicon/robot/modules/syndicate(T) //Assault borg by default - - var/brainfirstname = pick(GLOB.first_names_male) - if(prob(50)) - brainfirstname = pick(GLOB.first_names_female) - var/brainopslastname = pick(GLOB.last_names) - if(creator_op.nuke_team.syndicate_name) //the brain inside the syndiborg has the same last name as the other ops. - brainopslastname = creator_op.nuke_team.syndicate_name - var/brainopsname = "[brainfirstname] [brainopslastname]" - - R.mmi.name = "[initial(R.mmi.name)]: [brainopsname]" - R.mmi.brain.name = "[brainopsname]'s brain" - R.mmi.brainmob.real_name = brainopsname - R.mmi.brainmob.name = brainopsname - R.real_name = R.name - - R.key = C.key - - var/datum/antagonist/nukeop/new_borg = new() - new_borg.send_to_spawnpoint = FALSE - R.mind.add_antag_datum(new_borg,creator_op.nuke_team) - R.mind.special_role = "Syndicate Cyborg" - -///////////SLAUGHTER DEMON - -/obj/item/antag_spawner/slaughter_demon //Warning edgiest item in the game - name = "vial of blood" - desc = "" - icon = 'icons/obj/wizard.dmi' - icon_state = "vial" - - var/shatter_msg = "I shatter the bottle, no turning back now!" - var/veil_msg = "I sense a dark presence lurking just beyond the veil..." - var/mob/living/demon_type = /mob/living/simple_animal/slaughter - var/antag_type = /datum/antagonist/slaughter - - -/obj/item/antag_spawner/slaughter_demon/attack_self(mob/user) - if(!is_station_level(user.z)) - to_chat(user, "I should probably wait until you reach the station.") - return - if(used) - return - var/list/candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", ROLE_ALIEN, null, ROLE_ALIEN, 50, src) - if(LAZYLEN(candidates)) - if(used || QDELETED(src)) - return - used = TRUE - var/mob/dead/observer/C = pick(candidates) - spawn_antag(C.client, get_turf(src), initial(demon_type.name),user.mind) - to_chat(user, shatter_msg) - to_chat(user, veil_msg) - playsound(user.loc, 'sound/blank.ogg', 100, TRUE) - qdel(src) - else - to_chat(user, "I can't seem to work up the nerve to shatter the bottle! Perhaps you should try again later.") - - -/obj/item/antag_spawner/slaughter_demon/spawn_antag(client/C, turf/T, kind = "", datum/mind/user) - var/obj/effect/dummy/phased_mob/slaughter/holder = new /obj/effect/dummy/phased_mob/slaughter(T) - var/mob/living/simple_animal/slaughter/S = new demon_type(holder) - S.holder = holder - S.key = C.key - S.mind.assigned_role = S.name - S.mind.special_role = S.name - S.mind.add_antag_datum(antag_type) - to_chat(S, S.playstyle_string) - to_chat(S, "I are currently not currently in the same plane of existence as the station. \ - Ctrl+Click a blood pool to manifest.") - -/obj/item/antag_spawner/slaughter_demon/laughter - name = "vial of tickles" - desc = "" - icon = 'icons/obj/wizard.dmi' - icon_state = "vial" - color = "#FF69B4" // HOT PINK - - veil_msg = "I sense an adorable presence lurking just beyond the veil..." - demon_type = /mob/living/simple_animal/slaughter/laughter - antag_type = /datum/antagonist/slaughter/laughter diff --git a/code/modules/antagonists/abductor/abductee/abductee_objectives.dm b/code/modules/antagonists/abductor/abductee/abductee_objectives.dm deleted file mode 100644 index f188319644..0000000000 --- a/code/modules/antagonists/abductor/abductee/abductee_objectives.dm +++ /dev/null @@ -1,54 +0,0 @@ -/datum/objective/abductee - completed = 1 - -/datum/objective/abductee/random - -/datum/objective/abductee/random/New() - explanation_text = pick(world.file2list("strings/abductee_objectives.txt")) - -/datum/objective/abductee/steal - explanation_text = "Steal all" - -/datum/objective/abductee/steal/New() - var/target = pick(list("pets","lights","monkeys","fruits","shoes","bars of soap", "weapons", "computers", "organs")) - explanation_text+=" [target]." - -/datum/objective/abductee/paint - explanation_text = "The station is hideous. You must color it all" - -/datum/objective/abductee/paint/New() - var/color = pick(list("red", "blue", "green", "yellow", "orange", "purple", "black", "in rainbows", "in blood")) - explanation_text+= " [color]!" - -/datum/objective/abductee/speech - explanation_text = "Your brain is broken... you can only communicate in" - -/datum/objective/abductee/speech/New() - var/style = pick(list("pantomime", "rhyme", "haiku", "extended metaphors", "riddles", "extremely literal terms", "sound effects", "military jargon", "three word sentences")) - explanation_text+= " [style]." - -/datum/objective/abductee/capture - explanation_text = "Capture" - -/datum/objective/abductee/capture/New() - var/list/jobs = SSjob.occupations.Copy() - for(var/X in jobs) - var/datum/job/J = X - if(J.current_positions < 1) - jobs -= J - if(jobs.len > 0) - var/datum/job/target = pick(jobs) - explanation_text += " a [target.title]." - else - explanation_text += " someone." - -/datum/objective/abductee/calling/New() - var/mob/dead/D = pick(GLOB.dead_mob_list) - if(D) - explanation_text = "You know that [D] has perished. Hold a seance to call [D.p_them()] from the spirit realm." - -/datum/objective/abductee/forbiddennumber - -/datum/objective/abductee/forbiddennumber/New() - var/number = rand(2,10) - explanation_text = "Ignore anything in a set of [number], they don't exist." diff --git a/code/modules/antagonists/abductor/abductor.dm b/code/modules/antagonists/abductor/abductor.dm deleted file mode 100644 index d69352eb4e..0000000000 --- a/code/modules/antagonists/abductor/abductor.dm +++ /dev/null @@ -1,219 +0,0 @@ -#define ABDUCTOR_MAX_TEAMS 4 - -/datum/antagonist/abductor - name = "Abductor" - roundend_category = "abductors" - antagpanel_category = "Abductor" - job_rank = ROLE_ABDUCTOR - antag_hud_type = ANTAG_HUD_ABDUCTOR - antag_hud_name = "abductor" - show_in_antagpanel = FALSE //should only show subtypes - var/datum/team/abductor_team/team - var/sub_role - var/outfit - var/landmark_type - var/greet_text - - -/datum/antagonist/abductor/agent - name = "Abductor Agent" - sub_role = "Agent" - outfit = /datum/outfit/abductor/agent - landmark_type = /obj/effect/landmark/abductor/agent - greet_text = "Use my stealth technology and equipment to incapacitate humans for my scientist to retrieve." - show_in_antagpanel = TRUE - -/datum/antagonist/abductor/scientist - name = "Abductor Scientist" - sub_role = "Scientist" - outfit = /datum/outfit/abductor/scientist - landmark_type = /obj/effect/landmark/abductor/scientist - greet_text = "Use my experimental console and surgical equipment to monitor my agent and experiment upon abducted humans." - show_in_antagpanel = TRUE - -/datum/antagonist/abductor/create_team(datum/team/abductor_team/new_team) - if(!new_team) - return - if(!istype(new_team)) - stack_trace("Wrong team type passed to [type] initialization.") - team = new_team - -/datum/antagonist/abductor/get_team() - return team - -/datum/antagonist/abductor/on_gain() - owner.special_role = "[name]" - owner.assigned_role = "[name]" - objectives += team.objectives - finalize_abductor() - ADD_TRAIT(owner, TRAIT_ABDUCTOR_TRAINING, ABDUCTOR_ANTAGONIST) - return ..() - -/datum/antagonist/abductor/on_removal() - if(owner.current) - to_chat(owner.current,"I are no longer the [owner.special_role]!") - owner.special_role = null - REMOVE_TRAIT(owner, TRAIT_ABDUCTOR_TRAINING, ABDUCTOR_ANTAGONIST) - return ..() - -/datum/antagonist/abductor/greet() - to_chat(owner.current, "I are the [owner.special_role]!") - to_chat(owner.current, "With the help of my teammate, kidnap and experiment on station crew members!") - to_chat(owner.current, "[greet_text]") - owner.announce_objectives() - -/datum/antagonist/abductor/proc/finalize_abductor() - //Equip - var/mob/living/carbon/human/H = owner.current - H.set_species(/datum/species/abductor) - var/obj/item/organ/tongue/abductor/T = H.getorganslot(ORGAN_SLOT_TONGUE) - T.mothership = "[team.name]" - - H.real_name = "[team.name] [sub_role]" - H.equipOutfit(outfit) - - //Teleport to ship - for(var/obj/effect/landmark/abductor/LM in GLOB.landmarks_list) - if(istype(LM, landmark_type) && LM.team_number == team.team_number) - H.forceMove(LM.loc) - break - - add_antag_hud(antag_hud_type, antag_hud_name, owner.current) - -/datum/antagonist/abductor/scientist/on_gain() - ADD_TRAIT(owner, TRAIT_ABDUCTOR_SCIENTIST_TRAINING, ABDUCTOR_ANTAGONIST) - ADD_TRAIT(owner, TRAIT_SURGEON, ABDUCTOR_ANTAGONIST) - . = ..() - -/datum/antagonist/abductor/scientist/on_removal() - REMOVE_TRAIT(owner, TRAIT_ABDUCTOR_SCIENTIST_TRAINING, ABDUCTOR_ANTAGONIST) - REMOVE_TRAIT(owner, TRAIT_SURGEON, ABDUCTOR_ANTAGONIST) - . = ..() - -/datum/antagonist/abductor/admin_add(datum/mind/new_owner,mob/admin) - var/list/current_teams = list() - for(var/datum/team/abductor_team/T in get_all_teams(/datum/team/abductor_team)) - current_teams[T.name] = T - var/choice = input(admin,"Add to which team ?") as null|anything in (current_teams + "new team") - if (choice == "new team") - team = new - else if(choice in current_teams) - team = current_teams[choice] - else - return - new_owner.add_antag_datum(src) - log_admin("[key_name(usr)] made [key_name(new_owner)] [name] on [choice]!") - message_admins("[key_name_admin(usr)] made [key_name_admin(new_owner)] [name] on [choice] !") - -/datum/antagonist/abductor/get_admin_commands() - . = ..() - .["Equip"] = CALLBACK(src,PROC_REF(admin_equip)) - -/datum/antagonist/abductor/proc/admin_equip(mob/admin) - if(!ishuman(owner.current)) - to_chat(admin, "This only works on humans!") - return - var/mob/living/carbon/human/H = owner.current - var/gear = alert(admin,"Agent or Scientist Gear","Gear","Agent","Scientist") - if(gear) - if(gear=="Agent") - H.equipOutfit(/datum/outfit/abductor/agent) - else - H.equipOutfit(/datum/outfit/abductor/scientist) - -/datum/team/abductor_team - member_name = "abductor" - var/team_number - var/list/datum/mind/abductees = list() - var/static/team_count = 1 - -/datum/team/abductor_team/New() - ..() - team_number = team_count++ - name = "Mothership [pick(GLOB.possible_changeling_IDs)]" //TODO Ensure unique and actual alieny names - add_objective(new/datum/objective/experiment) - -/datum/team/abductor_team/is_solo() - return FALSE - -/datum/team/abductor_team/proc/add_objective(datum/objective/O) - O.team = src - O.update_explanation_text() - objectives += O - -/datum/team/abductor_team/roundend_report() - var/list/result = list() - - var/won = TRUE - for(var/datum/objective/O in objectives) - if(!O.check_completion()) - won = FALSE - if(won) - result += "[name] team fulfilled its mission!" - else - result += "[name] team failed its mission." - - result += "The abductors of [name] were:" - for(var/datum/mind/abductor_mind in members) - result += printplayer(abductor_mind) - result += printobjectives(objectives) - - return "
    [result.Join("
    ")]
    " - -/datum/antagonist/abductee - name = "Abductee" - roundend_category = "abductees" - antagpanel_category = "Abductee" - antag_hud_type = ANTAG_HUD_ABDUCTOR - antag_hud_name = "abductee" - -/datum/antagonist/abductee/on_gain() - give_objective() - . = ..() - -/datum/antagonist/abductee/greet() - to_chat(owner, "My mind snaps!") - to_chat(owner, "I can't remember how you got here...") - owner.announce_objectives() - -/datum/antagonist/abductee/proc/give_objective() - var/mob/living/carbon/human/H = owner.current - if(istype(H)) - H.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_LOBOTOMY) - var/objtype = (prob(75) ? /datum/objective/abductee/random : pick(subtypesof(/datum/objective/abductee/) - /datum/objective/abductee/random)) - var/datum/objective/abductee/O = new objtype() - objectives += O - -/datum/antagonist/abductee/apply_innate_effects(mob/living/mob_override) - var/mob/living/M = mob_override || owner.current - add_antag_hud(antag_hud_type, antag_hud_name, M) - -/datum/antagonist/abductee/remove_innate_effects(mob/living/mob_override) - var/mob/living/M = mob_override || owner.current - remove_antag_hud(antag_hud_type, M) - - -// LANDMARKS -/obj/effect/landmark/abductor - var/team_number = 1 - -/obj/effect/landmark/abductor/agent - icon_state = "abductor_agent" -/obj/effect/landmark/abductor/scientist - icon_state = "abductor" - -// OBJECTIVES -/datum/objective/experiment - target_amount = 6 - -/datum/objective/experiment/New() - explanation_text = "Experiment on [target_amount] humans." - -/datum/objective/experiment/check_completion() - for(var/obj/machinery/abductor/experiment/E in GLOB.machines) - if(!istype(team, /datum/team/abductor_team)) - return FALSE - var/datum/team/abductor_team/T = team - if(E.team_number == T.team_number) - return E.points >= target_amount - return FALSE diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm deleted file mode 100644 index 74c9e46b24..0000000000 --- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm +++ /dev/null @@ -1,847 +0,0 @@ -#define VEST_STEALTH 1 -#define VEST_COMBAT 2 -#define GIZMO_SCAN 1 -#define GIZMO_MARK 2 -#define MIND_DEVICE_MESSAGE 1 -#define MIND_DEVICE_CONTROL 2 - -//AGENT VEST -/obj/item/clothing/suit/armor/abductor/vest - name = "agent vest" - desc = "" - icon = 'icons/obj/abductor.dmi' - icon_state = "vest_stealth" - item_state = "armor" - blood_overlay_type = "armor" - armor = list("melee" = 15, "bullet" = 15, "laser" = 15, "energy" = 15, "bomb" = 15, "bio" = 15, "rad" = 15, "fire" = 70, "acid" = 70) - actions_types = list(/datum/action/item_action/hands_free/activate) - allowed = list( - /obj/item/abductor, - /obj/item/abductor/baton, - /obj/item/melee/baton, - /obj/item/gun/energy, - /obj/item/restraints/handcuffs - ) - var/mode = VEST_STEALTH - var/stealth_active = 0 - var/combat_cooldown = 10 - var/datum/icon_snapshot/disguise - var/stealth_armor = list("melee" = 15, "bullet" = 15, "laser" = 15, "energy" = 15, "bomb" = 15, "bio" = 15, "rad" = 15, "fire" = 70, "acid" = 70) - var/combat_armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 50, "rad" = 50, "fire" = 90, "acid" = 90) - -/obj/item/clothing/suit/armor/abductor/vest/proc/toggle_nodrop() - if(HAS_TRAIT_FROM(src, TRAIT_NODROP, ABDUCTOR_VEST_TRAIT)) - REMOVE_TRAIT(src, TRAIT_NODROP, ABDUCTOR_VEST_TRAIT) - else - ADD_TRAIT(src, TRAIT_NODROP, ABDUCTOR_VEST_TRAIT) - if(ismob(loc)) - to_chat(loc, "My vest is now [HAS_TRAIT_FROM(src, TRAIT_NODROP, ABDUCTOR_VEST_TRAIT) ? "locked" : "unlocked"].") - -/obj/item/clothing/suit/armor/abductor/vest/proc/flip_mode() - switch(mode) - if(VEST_STEALTH) - mode = VEST_COMBAT - DeactivateStealth() - armor = combat_armor - icon_state = "vest_combat" - if(VEST_COMBAT)// TO STEALTH - mode = VEST_STEALTH - armor = stealth_armor - icon_state = "vest_stealth" - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - H.update_inv_wear_suit() - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - -/obj/item/clothing/suit/armor/abductor/vest/item_action_slot_check(slot, mob/user) - if(slot == SLOT_ARMOR) //we only give the mob the ability to activate the vest if he's actually wearing it. - return TRUE - -/obj/item/clothing/suit/armor/abductor/vest/proc/SetDisguise(datum/icon_snapshot/entry) - disguise = entry - -/obj/item/clothing/suit/armor/abductor/vest/proc/ActivateStealth() - if(disguise == null) - return - stealth_active = 1 - if(ishuman(loc)) - var/mob/living/carbon/human/M = loc - new /obj/effect/temp_visual/dir_setting/ninja/cloak(get_turf(M), M.dir) - M.name_override = disguise.name - M.icon = disguise.icon - M.icon_state = disguise.icon_state - M.cut_overlays() - M.add_overlay(disguise.overlays) - M.update_inv_hands() - -/obj/item/clothing/suit/armor/abductor/vest/proc/DeactivateStealth() - if(!stealth_active) - return - stealth_active = 0 - if(ishuman(loc)) - var/mob/living/carbon/human/M = loc - new /obj/effect/temp_visual/dir_setting/ninja(get_turf(M), M.dir) - M.name_override = null - M.cut_overlays() - M.regenerate_icons() - -/obj/item/clothing/suit/armor/abductor/vest/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - DeactivateStealth() - -/obj/item/clothing/suit/armor/abductor/vest/IsReflect() - DeactivateStealth() - -/obj/item/clothing/suit/armor/abductor/vest/ui_action_click() - switch(mode) - if(VEST_COMBAT) - Adrenaline() - if(VEST_STEALTH) - if(stealth_active) - DeactivateStealth() - else - ActivateStealth() - -/obj/item/clothing/suit/armor/abductor/vest/proc/Adrenaline() - if(ishuman(loc)) - if(combat_cooldown != initial(combat_cooldown)) - to_chat(loc, "Combat injection is still recharging.") - return - var/mob/living/carbon/human/M = loc - M.adjustStaminaLoss(-75) - M.SetUnconscious(0) - M.SetStun(0) - M.SetKnockdown(0) - M.SetImmobilized(0) - M.SetParalyzed(0) - combat_cooldown = 0 - START_PROCESSING(SSobj, src) - -/obj/item/clothing/suit/armor/abductor/vest/process() - combat_cooldown++ - if(combat_cooldown==initial(combat_cooldown)) - STOP_PROCESSING(SSobj, src) - -/obj/item/clothing/suit/armor/abductor/Destroy() - STOP_PROCESSING(SSobj, src) - for(var/obj/machinery/abductor/console/C in GLOB.machines) - if(C.vest == src) - C.vest = null - break - . = ..() - - -/obj/item/abductor - icon = 'icons/obj/abductor.dmi' - lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi' - righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi' - -/obj/item/abductor/proc/AbductorCheck(mob/user) - if (HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING)) - return TRUE - if (istype(user) && user.mind && HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_TRAINING)) - return TRUE - to_chat(user, "I can't figure how this works!") - return FALSE - -/obj/item/abductor/proc/ScientistCheck(mob/user) - var/training = HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING) || (user.mind && HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_TRAINING)) - var/sci_training = HAS_TRAIT(user, TRAIT_ABDUCTOR_SCIENTIST_TRAINING) || (user.mind && HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_SCIENTIST_TRAINING)) - - if(training && !sci_training) - to_chat(user, "You're not trained to use this!") - . = FALSE - else if(!training && !sci_training) - to_chat(user, "I can't figure how this works!") - . = FALSE - else - . = TRUE - -/obj/item/abductor/gizmo - name = "science tool" - desc = "" - icon_state = "gizmo_scan" - item_state = "silencer" - var/mode = GIZMO_SCAN - var/mob/living/marked = null - var/obj/machinery/abductor/console/console - -/obj/item/abductor/gizmo/attack_self(mob/user) - if(!ScientistCheck(user)) - return - if(!console) - to_chat(user, "The device is not linked to console!") - return - - if(mode == GIZMO_SCAN) - mode = GIZMO_MARK - icon_state = "gizmo_mark" - else - mode = GIZMO_SCAN - icon_state = "gizmo_scan" - to_chat(user, "I switch the device to [mode==GIZMO_SCAN? "SCAN": "MARK"] MODE") - -/obj/item/abductor/gizmo/attack(mob/living/M, mob/user) - if(!ScientistCheck(user)) - return - if(!console) - to_chat(user, "The device is not linked to console!") - return - - switch(mode) - if(GIZMO_SCAN) - scan(M, user) - if(GIZMO_MARK) - mark(M, user) - - -/obj/item/abductor/gizmo/afterattack(atom/target, mob/living/user, flag, params) - . = ..() - if(flag) - return - if(!ScientistCheck(user)) - return - if(!console) - to_chat(user, "The device is not linked to console!") - return - - switch(mode) - if(GIZMO_SCAN) - scan(target, user) - if(GIZMO_MARK) - mark(target, user) - -/obj/item/abductor/gizmo/proc/scan(atom/target, mob/living/user) - if(ishuman(target)) - console.AddSnapshot(target) - to_chat(user, "I scan [target] and add [target.p_them()] to the database.") - -/obj/item/abductor/gizmo/proc/mark(atom/target, mob/living/user) - if(marked == target) - to_chat(user, "This specimen is already marked!") - return - if(isabductor(target) || iscow(target)) - marked = target - to_chat(user, "I mark [target] for future retrieval.") - else - prepare(target,user) - -/obj/item/abductor/gizmo/proc/prepare(atom/target, mob/living/user) - if(get_dist(target,user)>1) - to_chat(user, "I need to be next to the specimen to prepare it for transport!") - return - to_chat(user, "I begin preparing [target] for transport...") - if(do_after(user, 100, target = target)) - marked = target - to_chat(user, "I finish preparing [target] for transport.") - -/obj/item/abductor/gizmo/Destroy() - if(console) - console.gizmo = null - . = ..() - - -/obj/item/abductor/silencer - name = "abductor silencer" - desc = "" - icon_state = "silencer" - item_state = "gizmo" - -/obj/item/abductor/silencer/attack(mob/living/M, mob/user) - if(!AbductorCheck(user)) - return - radio_off(M, user) - -/obj/item/abductor/silencer/afterattack(atom/target, mob/living/user, flag, params) - . = ..() - if(flag) - return - if(!AbductorCheck(user)) - return - radio_off(target, user) - -/obj/item/abductor/silencer/proc/radio_off(atom/target, mob/living/user) - if( !(user in (viewers(7,target))) ) - return - - var/turf/targloc = get_turf(target) - - var/mob/living/carbon/human/M - for(M in view(2,targloc)) - if(M == user) - continue - to_chat(user, "I silence [M]'s radio devices.") - radio_off_mob(M) - -/obj/item/abductor/silencer/proc/radio_off_mob(mob/living/carbon/human/M) - var/list/all_items = M.GetAllContents() - - for(var/obj/I in all_items) - if(istype(I, /obj/item/radio/)) - var/obj/item/radio/r = I - r.listening = 0 - if(!istype(I, /obj/item/radio/headset)) - r.broadcasting = 0 //goddamned headset hacks - -/obj/item/abductor/mind_device - name = "mental interface device" - desc = "A dual-mode tool for directly communicating with sentient brains. It can be used to send a direct message to a target, \ - or to send a command to a test subject with a charged gland." - icon_state = "mind_device_message" - item_state = "silencer" - var/mode = MIND_DEVICE_MESSAGE - -/obj/item/abductor/mind_device/attack_self(mob/user) - if(!ScientistCheck(user)) - return - - if(mode == MIND_DEVICE_MESSAGE) - mode = MIND_DEVICE_CONTROL - icon_state = "mind_device_control" - else - mode = MIND_DEVICE_MESSAGE - icon_state = "mind_device_message" - to_chat(user, "I switch the device to [mode==MIND_DEVICE_MESSAGE? "TRANSMISSION": "COMMAND"] MODE") - -/obj/item/abductor/mind_device/afterattack(atom/target, mob/living/user, flag, params) - . = ..() - if(!ScientistCheck(user)) - return - - switch(mode) - if(MIND_DEVICE_CONTROL) - mind_control(target, user) - if(MIND_DEVICE_MESSAGE) - mind_message(target, user) - -/obj/item/abductor/mind_device/proc/mind_control(atom/target, mob/living/user) - if(iscarbon(target)) - var/mob/living/carbon/C = target - var/obj/item/organ/heart/gland/G = C.getorganslot("heart") - if(!istype(G)) - to_chat(user, "My target does not have an experimental gland!") - return - if(!G.mind_control_uses) - to_chat(user, "My target's gland is spent!") - return - if(G.active_mind_control) - to_chat(user, "My target is already under a mind-controlling influence!") - return - - var/command = stripped_input(user, "Enter the command for my target to follow.\ - Uses Left: [G.mind_control_uses], Duration: [DisplayTimeText(G.mind_control_duration)]","Enter command") - - if(!command) - return - - if(QDELETED(user) || user.get_active_held_item() != src || loc != user) - return - - if(QDELETED(G)) - return - - if(C.anti_magic_check(FALSE, FALSE, TRUE, 0)) - to_chat(user, "My target seems to have some sort of tinfoil protection on, blocking the message from being sent!") - return - - G.mind_control(command, user) - to_chat(user, "I send the command to my target.") - -/obj/item/abductor/mind_device/proc/mind_message(atom/target, mob/living/user) - if(isliving(target)) - var/mob/living/L = target - if(L.stat == DEAD) - to_chat(user, "My target is dead!") - return - var/message = stripped_input(user, "Write a message to send to my target's brain.","Enter message") - if(!message) - return - if(QDELETED(L) || L.stat == DEAD) - return - - to_chat(L, "I hear a voice in my head saying: [message]") - to_chat(user, "I send the message to my target.") - log_directed_talk(user, L, message, LOG_SAY, "abductor whisper") - - -/obj/item/firing_pin/abductor - name = "alien firing pin" - icon_state = "firing_pin_ayy" - desc = "This firing pin is slimy and warm; you can swear you feel it \ - constantly trying to mentally probe you." - fail_message = "\ - Firing error, please contact Command." - -/obj/item/firing_pin/abductor/pin_auth(mob/living/user) - . = isabductor(user) - -/obj/item/gun/energy/alien - name = "alien pistol" - desc = "" - ammo_type = list(/obj/item/ammo_casing/energy/declone) - pin = /obj/item/firing_pin/abductor - icon_state = "alienpistol" - item_state = "alienpistol" - trigger_guard = TRIGGER_GUARD_ALLOW_ALL - -/obj/item/gun/energy/shrink_ray - name = "shrink ray blaster" - desc = "This is a piece of frightening alien tech that enhances the magnetic pull of atoms in a localized space to temporarily make an object shrink. \ - That or it's just space magic. Either way, it shrinks stuff." - ammo_type = list(/obj/item/ammo_casing/energy/shrink) - item_state = "shrink_ray" - icon_state = "shrink_ray" - fire_delay = 30 - selfcharge = 1//shot costs 200 energy, has a max capacity of 1000 for 5 shots. self charge returns 25 energy every couple ticks, so about 1 shot charged every 12~ seconds - trigger_guard = TRIGGER_GUARD_ALLOW_ALL// variable-size trigger, get it? (abductors need this to be set so the gun is usable for them) - -/obj/item/paper/guides/antag/abductor - name = "Dissection Guide" - icon_state = "alienpaper_words" - info = {"Dissection for Dummies
    - -
    -1.Acquire fresh specimen.
    -2.Put the specimen on operating table.
    -3.Apply surgical drapes, preparing for experimental dissection.
    -4.Apply scalpel to specimen's torso.
    -5.Clamp bleeders on specimen's torso with a hemostat.
    -6.Retract skin of specimen's torso with a retractor.
    -7.Apply scalpel again to specimen's torso.
    -8.Search through the specimen's torso with my hands to remove any superfluous organs.
    -9.Insert replacement gland (Retrieve one from gland storage).
    -10.Consider dressing the specimen back to not disturb the habitat.
    -11.Put the specimen in the experiment machinery.
    -12.Choose one of the machine options. The target will be analyzed and teleported to the selected drop-off point.
    -13.You will receive one supply credit, and the subject will be counted towards my quota.
    -
    -Congratulations! You are now trained for invasive xenobiology research!"} - -/obj/item/paper/guides/antag/abductor/update_icon() - return - -/obj/item/paper/guides/antag/abductor/AltClick() - return //otherwise it would fold into a paperplane. - -#define BATON_STUN 0 -#define BATON_SLEEP 1 -#define BATON_CUFF 2 -#define BATON_PROBE 3 -#define BATON_MODES 4 - -/obj/item/abductor/baton - name = "advanced baton" - desc = "" - var/mode = BATON_STUN - icon_state = "wonderprodStun" - item_state = "wonderprod" - slot_flags = ITEM_SLOT_BELT - force = 7 - w_class = WEIGHT_CLASS_NORMAL - actions_types = list(/datum/action/item_action/toggle_mode) - -/obj/item/abductor/baton/proc/toggle(mob/living/user=usr) - mode = (mode+1)%BATON_MODES - var/txt - switch(mode) - if(BATON_STUN) - txt = "stunning" - if(BATON_SLEEP) - txt = "sleep inducement" - if(BATON_CUFF) - txt = "restraining" - if(BATON_PROBE) - txt = "probing" - - to_chat(usr, "I switch the baton to [txt] mode.") - update_icon() - -/obj/item/abductor/baton/update_icon() - switch(mode) - if(BATON_STUN) - icon_state = "wonderprodStun" - item_state = "wonderprodStun" - if(BATON_SLEEP) - icon_state = "wonderprodSleep" - item_state = "wonderprodSleep" - if(BATON_CUFF) - icon_state = "wonderprodCuff" - item_state = "wonderprodCuff" - if(BATON_PROBE) - icon_state = "wonderprodProbe" - item_state = "wonderprodProbe" - -/obj/item/abductor/baton/attack(mob/target, mob/living/user) - if(!AbductorCheck(user)) - return - - if(iscyborg(target)) - ..() - return - - if(!isliving(target)) - return - - var/mob/living/L = target - - user.do_attack_animation(L) - - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) - playsound(H, 'sound/blank.ogg', 50, TRUE) - return FALSE - - switch (mode) - if(BATON_STUN) - StunAttack(L,user) - if(BATON_SLEEP) - SleepAttack(L,user) - if(BATON_CUFF) - CuffAttack(L,user) - if(BATON_PROBE) - ProbeAttack(L,user) - -/obj/item/abductor/baton/attack_self(mob/living/user) - toggle(user) - -/obj/item/abductor/baton/proc/StunAttack(mob/living/L,mob/living/user) - - L.lastattacker = user.real_name - L.lastattackerckey = user.ckey - - L.Paralyze(140) - L.apply_effect(EFFECT_STUTTER, 7) - SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK) - - L.visible_message("[user] has stunned [L] with [src]!", \ - "[user] has stunned you with [src]!") - playsound(src, 'sound/blank.ogg', 50, TRUE, -1) - - if(ishuman(L)) - var/mob/living/carbon/human/H = L - H.forcesay(GLOB.hit_appends) - - log_combat(user, L, "stunned") - -/obj/item/abductor/baton/proc/SleepAttack(mob/living/L,mob/living/user) - if(L.incapacitated(TRUE, TRUE)) - if(L.anti_magic_check(FALSE, FALSE, TRUE)) - to_chat(user, "The specimen's tinfoil protection is interfering with the sleep inducement!") - L.visible_message("[user] tried to induced sleep in [L] with [src], but [L.p_their()] tinfoil protection [L.p_them()]!", \ - "I feel a strange wave of heavy drowsiness wash over you, but my tinfoil protection deflects most of it!") - L.drowsyness += 2 - return - L.visible_message("[user] has induced sleep in [L] with [src]!", \ - "I suddenly feel very drowsy!") - playsound(src, 'sound/blank.ogg', 50, TRUE, -1) - L.Sleeping(1200) - log_combat(user, L, "put to sleep") - else - if(L.anti_magic_check(FALSE, FALSE, TRUE, 0)) - to_chat(user, "The specimen's tinfoil protection is completely blocking our sleep inducement methods!") - L.visible_message("[user] tried to induce sleep in [L] with [src], but [L.p_their()] tinfoil protection completely protected [L.p_them()]!", \ - "Any sense of drowsiness is quickly diminished as my tinfoil protection deflects the effects!") - return - L.drowsyness += 1 - to_chat(user, "Sleep inducement works fully only on stunned specimens! ") - L.visible_message("[user] tried to induce sleep in [L] with [src]!", \ - "I suddenly feel drowsy!") - -/obj/item/abductor/baton/proc/CuffAttack(mob/living/L,mob/living/user) - if(!iscarbon(L)) - return - var/mob/living/carbon/C = L - if(!C.handcuffed) - if(C.get_num_arms(FALSE) >= 2 || C.get_arm_ignore()) - playsound(src, 'sound/blank.ogg', 30, TRUE, -2) - C.visible_message("[user] begins restraining [C] with [src]!", \ - "[user] begins shaping an energy field around my hands!") - if(do_mob(user, C, 30) && (C.get_num_arms(FALSE) >= 2 || C.get_arm_ignore())) - if(!C.handcuffed) - C.handcuffed = new /obj/item/restraints/handcuffs/energy/used(C) - C.update_handcuffed() - to_chat(user, "I restrain [C].") - log_combat(user, C, "handcuffed") - else - to_chat(user, "I fail to restrain [C].") - else - to_chat(user, "[C] doesn't have two hands...") - -/obj/item/abductor/baton/proc/ProbeAttack(mob/living/L,mob/living/user) - L.visible_message("[user] probes [L] with [src]!", \ - "[user] probes you!") - - var/species = "Unknown species" - var/helptext = "Species unsuitable for experiments." - - if(ishuman(L)) - var/mob/living/carbon/human/H = L - species = "[H.dna.species.name]" - if(L.mind && L.mind.has_antag_datum(/datum/antagonist/changeling)) - species = "Changeling lifeform" - var/obj/item/organ/heart/gland/temp = locate() in H.internal_organs - if(temp) - helptext = "Experimental gland detected!" - else - if (L.getorganslot(ORGAN_SLOT_HEART)) - helptext = "Subject suitable for experiments." - else - helptext = "Subject unsuitable for experiments." - - to_chat(user, "Probing result:[species]") - to_chat(user, "[helptext]") - -/obj/item/restraints/handcuffs/energy - name = "hard-light energy field" - desc = "" - icon_state = "cuff" // Needs sprite - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - breakouttime = 450 - trashtype = /obj/item/restraints/handcuffs/energy/used - flags_1 = NONE - -/obj/item/restraints/handcuffs/energy/used - item_flags = DROPDEL - -/obj/item/restraints/handcuffs/energy/used/dropped(mob/user) - user.visible_message("[user]'s [name] breaks in a discharge of energy!", \ - "[user]'s [name] breaks in a discharge of energy!") - var/datum/effect_system/spark_spread/S = new - S.set_up(4,0,user.loc) - S.start() - . = ..() - -/obj/item/abductor/baton/examine(mob/user) - . = ..() - switch(mode) - if(BATON_STUN) - . += "The baton is in stun mode." - if(BATON_SLEEP) - . += "The baton is in sleep inducement mode." - if(BATON_CUFF) - . += "The baton is in restraining mode." - if(BATON_PROBE) - . += "The baton is in probing mode." - -/obj/item/radio/headset/abductor - name = "alien headset" - desc = "" - icon = 'icons/obj/abductor.dmi' - icon_state = "abductor_headset" - item_state = "abductor_headset" - keyslot2 = new /obj/item/encryptionkey/heads/captain - -/obj/item/radio/headset/abductor/Initialize(mapload) - . = ..() - make_syndie() - -/obj/item/radio/headset/abductor/ComponentInitialize() - . = ..() - AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_HEAD)) - -/obj/item/radio/headset/abductor/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_SCREWDRIVER) - return // Stops humans from disassembling abductor headsets. - return ..() - -/obj/item/abductor_machine_beacon - name = "machine beacon" - desc = "" - icon = 'icons/obj/abductor.dmi' - icon_state = "beacon" - w_class = WEIGHT_CLASS_TINY - var/obj/machinery/spawned_machine - -/obj/item/abductor_machine_beacon/attack_self(mob/user) - ..() - user.visible_message("[user] places down [src] and activates it.", "I place down [src] and activate it.") - user.dropItemToGround(src) - playsound(src, 'sound/blank.ogg', 50) - addtimer(CALLBACK(src, PROC_REF(try_spawn_machine)), 30) - -/obj/item/abductor_machine_beacon/proc/try_spawn_machine() - var/viable = FALSE - if(isfloorturf(loc)) - var/turf/T = loc - viable = TRUE - for(var/obj/thing in T.contents) - if(thing.density || ismachinery(thing) || isstructure(thing)) - viable = FALSE - if(viable) - playsound(src, 'sound/blank.ogg', 50, TRUE) - var/new_machine = new spawned_machine(loc) - visible_message("[new_machine] warps on top of the beacon!") - qdel(src) - else - playsound(src, 'sound/blank.ogg', 50) - -/obj/item/abductor_machine_beacon/chem_dispenser - name = "beacon - Reagent Synthesizer" - spawned_machine = /obj/machinery/chem_dispenser/abductor - -/obj/item/scalpel/alien - name = "alien scalpel" - desc = "" - icon = 'icons/obj/abductor.dmi' - toolspeed = 0.25 - -/obj/item/hemostat/alien - name = "alien hemostat" - desc = "" - icon = 'icons/obj/abductor.dmi' - toolspeed = 0.25 - -/obj/item/retractor/alien - name = "alien retractor" - desc = "" - icon = 'icons/obj/abductor.dmi' - toolspeed = 0.25 - -/obj/item/circular_saw/alien - name = "alien saw" - desc = "" - icon = 'icons/obj/abductor.dmi' - toolspeed = 0.25 - -/obj/item/surgicaldrill/alien - name = "alien drill" - desc = "" - icon = 'icons/obj/abductor.dmi' - toolspeed = 0.25 - -/obj/item/cautery/alien - name = "alien cautery" - desc = "Why would bloodless aliens have a tool to stop bleeding? \ - Unless..." - icon = 'icons/obj/abductor.dmi' - toolspeed = 0.25 - -/obj/item/clothing/head/helmet/abductor - name = "agent headgear" - desc = "" - icon_state = "alienhelmet" - item_state = "alienhelmet" - blockTracking = TRUE - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - -// Operating Table / Beds / Lockers - -/obj/structure/bed/abductor - name = "resting contraption" - desc = "" - icon = 'icons/obj/abductor.dmi' - buildstacktype = /obj/item/stack/sheet/mineral/abductor - icon_state = "bed" - -/obj/structure/table_frame/abductor - name = "alien table frame" - desc = "" - icon_state = "alien_frame" - framestack = /obj/item/stack/sheet/mineral/abductor - framestackamount = 1 - -/obj/structure/table_frame/abductor/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_WRENCH) - to_chat(user, "I start disassembling [src]...") - I.play_tool_sound(src) - if(I.use_tool(src, user, 30)) - playsound(src, 'sound/blank.ogg', 50, TRUE) - for(var/i = 1, i <= framestackamount, i++) - new framestack(get_turf(src)) - qdel(src) - return - if(istype(I, /obj/item/stack/sheet/mineral/abductor)) - var/obj/item/stack/sheet/P = I - if(P.get_amount() < 1) - to_chat(user, "I need one alien alloy sheet to do this!") - return - to_chat(user, "I start adding [P] to [src]...") - if(do_after(user, 50, target = src)) - P.use(1) - new /obj/structure/table/abductor(src.loc) - qdel(src) - return - if(istype(I, /obj/item/stack/sheet/mineral/silver)) - var/obj/item/stack/sheet/P = I - if(P.get_amount() < 1) - to_chat(user, "I need one sheet of silver to do this!") - return - to_chat(user, "I start adding [P] to [src]...") - if(do_after(user, 50, target = src)) - P.use(1) - new /obj/structure/table/optable/abductor(src.loc) - qdel(src) - -/obj/structure/table/abductor - name = "alien table" - desc = "" - icon = 'icons/obj/smooth_structures/alien_table.dmi' - icon_state = "alien_table" - buildstack = /obj/item/stack/sheet/mineral/abductor - framestack = /obj/item/stack/sheet/mineral/abductor - buildstackamount = 1 - framestackamount = 1 - canSmoothWith = null - frame = /obj/structure/table_frame/abductor - -/obj/structure/table/optable/abductor - name = "alien operating table" - desc = "" - frame = /obj/structure/table_frame/abductor - buildstack = /obj/item/stack/sheet/mineral/silver - framestack = /obj/item/stack/sheet/mineral/abductor - buildstackamount = 1 - framestackamount = 1 - icon = 'icons/obj/abductor.dmi' - icon_state = "bed" - can_buckle = 1 - - var/static/list/injected_reagents = list(/datum/reagent/medicine/cordiolis_hepatico) - -/obj/structure/table/optable/abductor/Crossed(atom/movable/AM) - . = ..() - if(iscarbon(AM)) - START_PROCESSING(SSobj, src) - to_chat(AM, "I feel a series of tiny pricks!") - -/obj/structure/table/optable/abductor/process() - . = PROCESS_KILL - for(var/mob/living/carbon/C in get_turf(src)) - . = TRUE - for(var/chemical in injected_reagents) - if(C.reagents.get_reagent_amount(chemical) < 1) - C.reagents.add_reagent(chemical, 1) - -/obj/structure/table/optable/abductor/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/structure/closet/abductor - name = "alien locker" - desc = "" - icon_state = "abductor" - icon_door = "abductor" - can_weld_shut = FALSE - material_drop = /obj/item/stack/sheet/mineral/abductor - -/obj/structure/door_assembly/door_assembly_abductor - name = "alien airlock assembly" - icon = 'icons/obj/doors/airlocks/abductor/abductor_airlock.dmi' - base_name = "alien airlock" - overlays_file = 'icons/obj/doors/airlocks/abductor/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/abductor - material_type = /obj/item/stack/sheet/mineral/abductor - noglass = TRUE - -/obj/item/clothing/under/abductor - desc = "" - name = "alien jumpsuit" - icon = 'icons/obj/clothing/under/syndicate.dmi' - icon_state = "abductor" - item_state = "bl_suit" - mob_overlay_icon = 'icons/mob/clothing/under/syndicate.dmi' - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 10, rad = 0, fire = 0, acid = 0) - can_adjust = 0 diff --git a/code/modules/antagonists/abductor/equipment/abduction_outfits.dm b/code/modules/antagonists/abductor/equipment/abduction_outfits.dm deleted file mode 100644 index 2381dc2013..0000000000 --- a/code/modules/antagonists/abductor/equipment/abduction_outfits.dm +++ /dev/null @@ -1,56 +0,0 @@ -/datum/outfit/abductor - name = "Abductor Basic" - uniform = /obj/item/clothing/under/abductor - shoes = /obj/item/clothing/shoes/combat - back = /obj/item/storage/backpack - ears = /obj/item/radio/headset/abductor - -/datum/outfit/abductor/proc/link_to_console(mob/living/carbon/human/H, team_number) - var/datum/antagonist/abductor/A = H.mind.has_antag_datum(/datum/antagonist/abductor) - if(!team_number && A) - team_number = A.team.team_number - if(!team_number) - team_number = 1 - - var/obj/machinery/abductor/console/console = get_abductor_console(team_number) - if(console) - var/obj/item/clothing/suit/armor/abductor/vest/V = locate() in H - if(V) - console.AddVest(V) - ADD_TRAIT(V, TRAIT_NODROP, ABDUCTOR_VEST_TRAIT) - - var/obj/item/storage/backpack/B = locate() in H - if(B) - for(var/obj/item/abductor/gizmo/G in B.contents) - console.AddGizmo(G) - -/datum/outfit/abductor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - if(!visualsOnly) - link_to_console(H) - - -/datum/outfit/abductor/agent - name = "Abductor Agent" - head = /obj/item/clothing/head/helmet/abductor - suit = /obj/item/clothing/suit/armor/abductor/vest - suit_store = /obj/item/abductor/baton - belt = /obj/item/storage/belt/military/abductor/full - - backpack_contents = list( - /obj/item/gun/energy/alien = 1, - /obj/item/abductor/silencer = 1 - ) - -/datum/outfit/abductor/scientist - name = "Abductor Scientist" - - backpack_contents = list( - /obj/item/abductor/gizmo = 1 - ) - -/datum/outfit/abductor/scientist/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - if(!visualsOnly) - var/obj/item/implant/abductor/beamplant = new /obj/item/implant/abductor(H) - beamplant.implant(H) diff --git a/code/modules/antagonists/abductor/equipment/abduction_surgery.dm b/code/modules/antagonists/abductor/equipment/abduction_surgery.dm deleted file mode 100644 index 48a178c00c..0000000000 --- a/code/modules/antagonists/abductor/equipment/abduction_surgery.dm +++ /dev/null @@ -1,40 +0,0 @@ -/* RETARDED -/datum/surgery_step/extract_organ - name = "remove heart" - accept_hand = 1 - time = 32 - var/obj/item/organ/IC = null - var/list/organ_types = list(/obj/item/organ/heart) - -/datum/surgery_step/extract_organ/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - for(var/atom/A in target.internal_organs) - if(A.type in organ_types) - IC = A - break - user.visible_message("[user] starts to remove [target]'s organs.", "I start to remove [target]'s organs...") - -/datum/surgery_step/extract_organ/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - if(IC) - user.visible_message("[user] pulls [IC] out of [target]'s [target_zone]!", "I pull [IC] out of [target]'s [target_zone].") - user.put_in_hands(IC) - IC.Remove(target) - return 1 - else - to_chat(user, "I don't find anything in [target]'s [target_zone]!") - return 1 - -/datum/surgery_step/gland_insert - name = "insert gland" - implements = list(/obj/item/organ/heart/gland = 100) - time = 32 - -/datum/surgery_step/gland_insert/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] starts to insert [tool] into [target].", "I start to insert [tool] into [target]...") - -/datum/surgery_step/gland_insert/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] inserts [tool] into [target].", "I insert [tool] into [target].") - user.temporarilyRemoveItemFromInventory(tool, TRUE) - var/obj/item/organ/heart/gland/gland = tool - gland.Insert(target, 2) - return 1 -*/ diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm deleted file mode 100644 index 2edafa8436..0000000000 --- a/code/modules/antagonists/abductor/equipment/gland.dm +++ /dev/null @@ -1,109 +0,0 @@ -/obj/item/organ/heart/gland - name = "fleshy mass" - desc = "" - icon = 'icons/obj/abductor.dmi' - icon_state = "gland" - status = ORGAN_ROBOTIC - beating = TRUE - var/true_name = "baseline placebo referencer" - var/cooldown_low = 300 - var/cooldown_high = 300 - var/next_activation = 0 - var/uses // -1 For infinite - var/human_only = FALSE - var/active = FALSE - - var/mind_control_uses = 1 - var/mind_control_duration = 1800 - var/active_mind_control = FALSE - -/obj/item/organ/heart/gland/Initialize() - . = ..() - icon_state = pick(list("health", "spider", "slime", "emp", "species", "egg", "vent", "mindshock", "viral")) - -/obj/item/organ/heart/gland/examine(mob/user) - . = ..() - if((user.mind && HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_SCIENTIST_TRAINING)) || isobserver(user)) - . += "It is \a [true_name]." - -/obj/item/organ/heart/gland/proc/ownerCheck() - if(ishuman(owner)) - return TRUE - if(!human_only && iscarbon(owner)) - return TRUE - return FALSE - -/obj/item/organ/heart/gland/proc/Start() - active = 1 - next_activation = world.time + rand(cooldown_low,cooldown_high) - -/obj/item/organ/heart/gland/proc/update_gland_hud() - if(!owner) - return - var/image/holder = owner.hud_list[GLAND_HUD] - var/icon/I = icon(owner.icon, owner.icon_state, owner.dir) - holder.pixel_y = I.Height() - world.icon_size - if(active_mind_control) - holder.icon_state = "hudgland_active" - else if(mind_control_uses) - holder.icon_state = "hudgland_ready" - else - holder.icon_state = "hudgland_spent" - -/obj/item/organ/heart/gland/proc/mind_control(command, mob/living/user) - if(!ownerCheck() || !mind_control_uses || active_mind_control) - return FALSE - mind_control_uses-- - to_chat(owner, "I suddenly feel an irresistible compulsion to follow an order...") - to_chat(owner, "[command]") - active_mind_control = TRUE - message_admins("[key_name(user)] sent an abductor mind control message to [key_name(owner)]: [command]") - update_gland_hud() - var/atom/movable/screen/alert/mind_control/mind_alert = owner.throw_alert("mind_control", /atom/movable/screen/alert/mind_control) - mind_alert.command = command - addtimer(CALLBACK(src, PROC_REF(clear_mind_control)), mind_control_duration) - return TRUE - -/obj/item/organ/heart/gland/proc/clear_mind_control() - if(!ownerCheck() || !active_mind_control) - return FALSE - to_chat(owner, "I feel the compulsion fade, and you completely forget about your previous orders.") - owner.clear_alert("mind_control") - active_mind_control = FALSE - return TRUE - -/obj/item/organ/heart/gland/Remove(mob/living/carbon/M, special = 0) - active = 0 - if(initial(uses) == 1) - uses = initial(uses) - var/datum/atom_hud/abductor/hud = GLOB.huds[DATA_HUD_ABDUCTOR] - hud.remove_from_hud(owner) - clear_mind_control() - ..() - -/obj/item/organ/heart/gland/Insert(mob/living/carbon/M, special = 0) - ..() - if(special != 2 && uses) // Special 2 means abductor surgery - Start() - var/datum/atom_hud/abductor/hud = GLOB.huds[DATA_HUD_ABDUCTOR] - hud.add_to_hud(owner) - update_gland_hud() - -/obj/item/organ/heart/gland/on_life() - if(!beating) - // alien glands are immune to stopping. - beating = TRUE - if(!active) - return - if(!ownerCheck()) - active = 0 - return - if(next_activation <= world.time) - activate() - uses-- - next_activation = world.time + rand(cooldown_low,cooldown_high) - if(!uses) - active = 0 - -/obj/item/organ/heart/gland/proc/activate() - return diff --git a/code/modules/antagonists/abductor/equipment/glands/access.dm b/code/modules/antagonists/abductor/equipment/glands/access.dm deleted file mode 100644 index 5f1bc7b349..0000000000 --- a/code/modules/antagonists/abductor/equipment/glands/access.dm +++ /dev/null @@ -1,19 +0,0 @@ -/obj/item/organ/heart/gland/access - true_name = "anagraphic electro-scrambler" - cooldown_low = 600 - cooldown_high = 1200 - uses = 1 - icon_state = "mindshock" - mind_control_uses = 3 - mind_control_duration = 900 - -/obj/item/organ/heart/gland/access/activate() - to_chat(owner, "I feel like a VIP for some reason.") - RegisterSignal(owner, COMSIG_MOB_ALLOWED, PROC_REF(free_access)) - -/obj/item/organ/heart/gland/access/proc/free_access(datum/source, obj/O) - return TRUE - -/obj/item/organ/heart/gland/access/Remove(mob/living/carbon/M, special = 0) - UnregisterSignal(owner, COMSIG_MOB_ALLOWED) - ..() diff --git a/code/modules/antagonists/abductor/equipment/glands/blood.dm b/code/modules/antagonists/abductor/equipment/glands/blood.dm deleted file mode 100644 index 1228573c56..0000000000 --- a/code/modules/antagonists/abductor/equipment/glands/blood.dm +++ /dev/null @@ -1,18 +0,0 @@ -/obj/item/organ/heart/gland/blood - true_name = "pseudonuclear hemo-destabilizer" - cooldown_low = 1200 - cooldown_high = 1800 - uses = -1 - icon_state = "egg" - lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' - mind_control_uses = 3 - mind_control_duration = 1500 - -/obj/item/organ/heart/gland/blood/activate() - if(!ishuman(owner) || !owner.dna.species) - return - var/mob/living/carbon/human/H = owner - var/datum/species/species = H.dna.species - to_chat(H, "I feel your blood heat up for a moment.") - species.exotic_blood = get_random_reagent_id() diff --git a/code/modules/antagonists/abductor/equipment/glands/chem.dm b/code/modules/antagonists/abductor/equipment/glands/chem.dm deleted file mode 100644 index b651b45f6d..0000000000 --- a/code/modules/antagonists/abductor/equipment/glands/chem.dm +++ /dev/null @@ -1,20 +0,0 @@ -/obj/item/organ/heart/gland/chem - true_name = "intrinsic pharma-provider" - cooldown_low = 50 - cooldown_high = 50 - uses = -1 - icon_state = "viral" - mind_control_uses = 3 - mind_control_duration = 1200 - var/list/possible_reagents = list() - -/obj/item/organ/heart/gland/chem/Initialize() - . = ..() - for(var/R in subtypesof(/datum/reagent/drug) + subtypesof(/datum/reagent/medicine) + typesof(/datum/reagent/toxin)) - possible_reagents += R - -/obj/item/organ/heart/gland/chem/activate() - var/chem_to_add = pick(possible_reagents) - owner.reagents.add_reagent(chem_to_add, 2) - owner.adjustToxLoss(-5, TRUE, TRUE) - ..() diff --git a/code/modules/antagonists/abductor/equipment/glands/egg.dm b/code/modules/antagonists/abductor/equipment/glands/egg.dm deleted file mode 100644 index e3b0c835f2..0000000000 --- a/code/modules/antagonists/abductor/equipment/glands/egg.dm +++ /dev/null @@ -1,15 +0,0 @@ -/obj/item/organ/heart/gland/egg - true_name = "roe/enzymatic synthesizer" - cooldown_low = 300 - cooldown_high = 400 - uses = -1 - icon_state = "egg" - lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' - mind_control_uses = 2 - mind_control_duration = 1800 - -/obj/item/organ/heart/gland/egg/activate() - owner.visible_message("[owner] [pick(EGG_LAYING_MESSAGES)]") - var/turf/T = owner.drop_location() - new /obj/item/reagent_containers/food/snacks/egg/gland(T) diff --git a/code/modules/antagonists/abductor/equipment/glands/electric.dm b/code/modules/antagonists/abductor/equipment/glands/electric.dm deleted file mode 100644 index e82883229c..0000000000 --- a/code/modules/antagonists/abductor/equipment/glands/electric.dm +++ /dev/null @@ -1,26 +0,0 @@ -/obj/item/organ/heart/gland/electric - true_name = "electron accumulator/discharger" - cooldown_low = 800 - cooldown_high = 1200 - icon_state = "species" - uses = -1 - mind_control_uses = 2 - mind_control_duration = 900 - -/obj/item/organ/heart/gland/electric/Insert(mob/living/carbon/M, special = 0) - ..() - ADD_TRAIT(owner, TRAIT_SHOCKIMMUNE, "abductor_gland") - -/obj/item/organ/heart/gland/electric/Remove(mob/living/carbon/M, special = 0) - REMOVE_TRAIT(owner, TRAIT_SHOCKIMMUNE, "abductor_gland") - ..() - -/obj/item/organ/heart/gland/electric/activate() - owner.visible_message("[owner]'s skin starts emitting electric arcs!",\ - "I feel electric energy building up inside you!") - playsound(get_turf(owner), "sparks", 100, TRUE, -1) - addtimer(CALLBACK(src, PROC_REF(zap)), rand(30, 100)) - -/obj/item/organ/heart/gland/electric/proc/zap() - tesla_zap(owner, 4, 8000, TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE | TESLA_MOB_STUN) - playsound(get_turf(owner), 'sound/blank.ogg', 50, TRUE) diff --git a/code/modules/antagonists/abductor/equipment/glands/heal.dm b/code/modules/antagonists/abductor/equipment/glands/heal.dm deleted file mode 100644 index 5408bc3d3b..0000000000 --- a/code/modules/antagonists/abductor/equipment/glands/heal.dm +++ /dev/null @@ -1,178 +0,0 @@ -/obj/item/organ/heart/gland/heal - true_name = "organic replicator" - cooldown_low = 200 - cooldown_high = 400 - uses = -1 - human_only = TRUE - icon_state = "health" - mind_control_uses = 3 - mind_control_duration = 3000 - -/obj/item/organ/heart/gland/heal/activate() - if(!(owner.mob_biotypes & MOB_ORGANIC)) - return - - for(var/organ in owner.internal_organs) - if(istype(organ, /obj/item/organ/cyberimp)) - reject_implant(organ) - return - - var/obj/item/organ/liver/liver = owner.getorganslot(ORGAN_SLOT_LIVER) - if((!liver/* && !HAS_TRAIT(owner, TRAIT_NOMETABOLISM)*/) || (liver && ((liver.damage > (liver.maxHealth / 2)) || (istype(liver, /obj/item/organ/liver/cybernetic))))) - replace_liver(liver) - return - - var/obj/item/organ/lungs/lungs = owner.getorganslot(ORGAN_SLOT_LUNGS) - if((!lungs && !HAS_TRAIT(owner, TRAIT_NOBREATH)) || (lungs && (istype(lungs, /obj/item/organ/lungs/cybernetic)))) - replace_lungs(lungs) - return - - var/obj/item/organ/eyes/eyes = owner.getorganslot(ORGAN_SLOT_EYES) - if(!eyes || (eyes && ((HAS_TRAIT_FROM(owner, TRAIT_NEARSIGHT, EYE_DAMAGE)) || (HAS_TRAIT_FROM(owner, TRAIT_BLIND, EYE_DAMAGE)) || (istype(eyes, /obj/item/organ/eyes/robotic))))) - replace_eyes(eyes) - return - - var/obj/item/bodypart/limb - var/list/limb_list = list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) - for(var/zone in limb_list) - limb = owner.get_bodypart(zone) - if(!limb) - replace_limb(zone) - return - if((limb.get_damage() >= (limb.max_damage / 2)) || (limb.status == BODYPART_ROBOTIC)) - replace_limb(zone, limb) - return - - if(owner.getToxLoss() > 40) - replace_blood() - return - var/tox_amount = 0 - for(var/datum/reagent/toxin/T in owner.reagents.reagent_list) - tox_amount += owner.reagents.get_reagent_amount(T.type) - if(tox_amount > 10) - replace_blood() - return - if(owner.blood_volume < BLOOD_VOLUME_OKAY) - owner.blood_volume = BLOOD_VOLUME_NORMAL - to_chat(owner, "I feel my blood pulsing within you.") - return - - var/obj/item/bodypart/chest/chest = owner.get_bodypart(BODY_ZONE_CHEST) - if((chest.get_damage() >= (chest.max_damage / 4)) || (chest.status == BODYPART_ROBOTIC)) - replace_chest(chest) - return - -/obj/item/organ/heart/gland/heal/proc/reject_implant(obj/item/organ/cyberimp/implant) - owner.visible_message("[owner] vomits up his [implant.name]!", "I suddenly vomit up my [implant.name]!") - owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE) - implant.Remove(owner) - implant.forceMove(owner.drop_location()) - -/obj/item/organ/heart/gland/heal/proc/replace_liver(obj/item/organ/liver/liver) - if(liver) - owner.visible_message("[owner] vomits up his [liver.name]!", "I suddenly vomit up my [liver.name]!") - owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE) - liver.Remove(owner) - liver.forceMove(owner.drop_location()) - else - to_chat(owner, "I feel a weird rumble in my bowels...") - - var/liver_type = /obj/item/organ/liver - if(owner?.dna?.species?.mutantliver) - liver_type = owner.dna.species.mutantliver - var/obj/item/organ/liver/new_liver = new liver_type() - new_liver.Insert(owner) - -/obj/item/organ/heart/gland/heal/proc/replace_lungs(obj/item/organ/lungs/lungs) - if(lungs) - owner.visible_message("[owner] vomits up his [lungs.name]!", "I suddenly vomit up my [lungs.name]!") - owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE) - lungs.Remove(owner) - lungs.forceMove(owner.drop_location()) - else - to_chat(owner, "I feel a weird rumble inside my chest...") - - var/lung_type = /obj/item/organ/lungs - if(owner.dna.species && owner.dna.species.mutantlungs) - lung_type = owner.dna.species.mutantlungs - var/obj/item/organ/lungs/new_lungs = new lung_type() - new_lungs.Insert(owner) - -/obj/item/organ/heart/gland/heal/proc/replace_eyes(obj/item/organ/eyes/eyes) - if(eyes) - owner.visible_message("[owner]'s [eyes.name] fall out of their sockets!", "My [eyes.name] fall out of their sockets!") - playsound(owner, 'sound/blank.ogg', 50, TRUE) - eyes.Remove(owner) - eyes.forceMove(owner.drop_location()) - else - to_chat(owner, "I feel a weird rumble behind my eye sockets...") - - addtimer(CALLBACK(src, PROC_REF(finish_replace_eyes)), rand(100, 200)) - -/obj/item/organ/heart/gland/heal/proc/finish_replace_eyes() - var/eye_type = /obj/item/organ/eyes - if(owner.dna.species && owner.dna.species.mutanteyes) - eye_type = owner.dna.species.mutanteyes - var/obj/item/organ/eyes/new_eyes = new eye_type() - new_eyes.Insert(owner) - owner.visible_message("A pair of new eyes suddenly inflates into [owner]'s eye sockets!", "A pair of new eyes suddenly inflates into my eye sockets!") - -/obj/item/organ/heart/gland/heal/proc/replace_limb(body_zone, obj/item/bodypart/limb) - if(limb) - owner.visible_message("[owner]'s [limb.name] suddenly detaches from [owner.p_their()] body!", "My [limb.name] suddenly detaches from my body!") - playsound(owner, "desceration", 50, TRUE, -1) - limb.drop_limb() - else - to_chat(owner, "I feel a weird tingle in my [parse_zone(body_zone)]... even if you don't have one.") - - addtimer(CALLBACK(src, PROC_REF(finish_replace_limb), body_zone), rand(150, 300)) - -/obj/item/organ/heart/gland/heal/proc/finish_replace_limb(body_zone) - owner.visible_message("With a loud snap, [owner]'s [parse_zone(body_zone)] rapidly grows back from [owner.p_their()] body!", - "With a loud snap, my [parse_zone(body_zone)] rapidly grows back from my body!", - "My hear a loud snap.") - playsound(owner, 'sound/blank.ogg', 50, TRUE) - owner.regenerate_limb(body_zone) - -/obj/item/organ/heart/gland/heal/proc/replace_blood() - owner.visible_message("[owner] starts vomiting huge amounts of blood!", "I suddenly start vomiting huge amounts of blood!") - keep_replacing_blood() - -/obj/item/organ/heart/gland/heal/proc/keep_replacing_blood() - var/keep_going = FALSE - owner.vomit(0, TRUE, FALSE, 3, FALSE, FALSE, FALSE, TRUE) - owner.Stun(15) - owner.adjustToxLoss(-15, TRUE, TRUE) - - owner.blood_volume = min(BLOOD_VOLUME_NORMAL, owner.blood_volume + 20) - if(owner.blood_volume < BLOOD_VOLUME_NORMAL) - keep_going = TRUE - - if(owner.getToxLoss()) - keep_going = TRUE - for(var/datum/reagent/toxin/R in owner.reagents.reagent_list) - owner.reagents.remove_reagent(R.type, 4) - if(owner.reagents.has_reagent(R.type)) - keep_going = TRUE - if(keep_going) - addtimer(CALLBACK(src, PROC_REF(keep_replacing_blood)), 30) - -/obj/item/organ/heart/gland/heal/proc/replace_chest(obj/item/bodypart/chest/chest) - if(chest.status == BODYPART_ROBOTIC) - owner.visible_message("[owner]'s [chest.name] rapidly expels its mechanical components, replacing them with flesh!", "My [chest.name] rapidly expels its mechanical components, replacing them with flesh!") - playsound(owner, 'sound/blank.ogg', 50, TRUE) - var/list/dirs = GLOB.alldirs.Copy() - for(var/i in 1 to 3) - var/obj/effect/decal/cleanable/robot_debris/debris = new(get_turf(owner)) - debris.streak(dirs) - else - owner.visible_message("[owner]'s [chest.name] sheds off its damaged flesh, rapidly replacing it!", "My [chest.name] sheds off its damaged flesh, rapidly replacing it!") - playsound(owner, 'sound/blank.ogg', 50, TRUE) - var/list/dirs = GLOB.alldirs.Copy() - for(var/i in 1 to 3) - var/obj/effect/decal/cleanable/blood/gibs/gibs = new(get_turf(owner)) - gibs.streak(dirs) - - var/obj/item/bodypart/chest/new_chest = new(null) - new_chest.replace_limb(owner, TRUE) - qdel(chest) diff --git a/code/modules/antagonists/abductor/equipment/glands/mindshock.dm b/code/modules/antagonists/abductor/equipment/glands/mindshock.dm deleted file mode 100644 index 6d72bff70a..0000000000 --- a/code/modules/antagonists/abductor/equipment/glands/mindshock.dm +++ /dev/null @@ -1,64 +0,0 @@ -/obj/item/organ/heart/gland/mindshock - true_name = "neural crosstalk uninhibitor" - cooldown_low = 400 - cooldown_high = 700 - uses = -1 - icon_state = "mindshock" - mind_control_uses = 1 - mind_control_duration = 6000 - var/list/mob/living/carbon/human/broadcasted_mobs = list() - -/obj/item/organ/heart/gland/mindshock/activate() - to_chat(owner, "I get a headache.") - - var/turf/T = get_turf(owner) - for(var/mob/living/carbon/H in orange(4,T)) - if(H == owner) - continue - switch(pick(1,3)) - if(1) - to_chat(H, "I hear a loud buzz in your head, silencing your thoughts!") - H.Stun(50) - if(2) - to_chat(H, "I hear an annoying buzz in your head.") - H.confused += 15 - H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 160) - if(3) - H.hallucination += 60 - -/obj/item/organ/heart/gland/mindshock/mind_control(command, mob/living/user) - if(!ownerCheck() || !mind_control_uses || active_mind_control) - return FALSE - mind_control_uses-- - for(var/mob/M in oview(7, owner)) - if(!ishuman(M)) - continue - var/mob/living/carbon/human/H = M - if(H.stat) - continue - - broadcasted_mobs += H - to_chat(H, "I suddenly feel an irresistible compulsion to follow an order...") - to_chat(H, "[command]") - - message_admins("[key_name(user)] broadcasted an abductor mind control message from [key_name(owner)] to [key_name(H)]: [command]") - - var/atom/movable/screen/alert/mind_control/mind_alert = H.throw_alert("mind_control", /atom/movable/screen/alert/mind_control) - mind_alert.command = command - - if(LAZYLEN(broadcasted_mobs)) - active_mind_control = TRUE - addtimer(CALLBACK(src, PROC_REF(clear_mind_control)), mind_control_duration) - - update_gland_hud() - return TRUE - -/obj/item/organ/heart/gland/mindshock/clear_mind_control() - if(!active_mind_control || !LAZYLEN(broadcasted_mobs)) - return FALSE - for(var/M in broadcasted_mobs) - var/mob/living/carbon/human/H = M - to_chat(H, "I feel the compulsion fade, and you completely forget about your previous orders.") - H.clear_alert("mind_control") - active_mind_control = FALSE - return TRUE diff --git a/code/modules/antagonists/abductor/equipment/glands/plasma.dm b/code/modules/antagonists/abductor/equipment/glands/plasma.dm deleted file mode 100644 index 9037b7de1d..0000000000 --- a/code/modules/antagonists/abductor/equipment/glands/plasma.dm +++ /dev/null @@ -1,22 +0,0 @@ -/obj/item/organ/heart/gland/plasma - true_name = "effluvium sanguine-synonym emitter" - cooldown_low = 1200 - cooldown_high = 1800 - icon_state = "slime" - uses = -1 - mind_control_uses = 1 - mind_control_duration = 800 - -/obj/item/organ/heart/gland/plasma/activate() - to_chat(owner, "I feel bloated.") - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), owner, "A massive stomachache overcomes you."), 150) - addtimer(CALLBACK(src, PROC_REF(vomit_plasma)), 200) - -/obj/item/organ/heart/gland/plasma/proc/vomit_plasma() - if(!owner) - return - owner.visible_message("[owner] vomits a cloud of plasma!") - var/turf/open/T = get_turf(owner) - if(istype(T)) - T.atmos_spawn_air("plasma=50;TEMP=[T20C]") - owner.vomit() diff --git a/code/modules/antagonists/abductor/equipment/glands/quantum.dm b/code/modules/antagonists/abductor/equipment/glands/quantum.dm deleted file mode 100644 index 96bdf9b9cb..0000000000 --- a/code/modules/antagonists/abductor/equipment/glands/quantum.dm +++ /dev/null @@ -1,47 +0,0 @@ -/obj/item/organ/heart/gland/quantum - true_name = "quantic de-observation matrix" - cooldown_low = 150 - cooldown_high = 150 - uses = -1 - icon_state = "emp" - mind_control_uses = 2 - mind_control_duration = 1200 - var/mob/living/carbon/entangled_mob - -/obj/item/organ/heart/gland/quantum/activate() - if(entangled_mob) - return - for(var/mob/M in oview(owner, 7)) - if(!iscarbon(M)) - continue - entangled_mob = M - addtimer(CALLBACK(src, PROC_REF(quantum_swap)), rand(600, 2400)) - return - -/obj/item/organ/heart/gland/quantum/proc/quantum_swap() - if(QDELETED(entangled_mob)) - entangled_mob = null - return - var/turf/T = get_turf(owner) - do_teleport(owner, get_turf(entangled_mob),null,TRUE,channel = TELEPORT_CHANNEL_QUANTUM) - do_teleport(entangled_mob, T,null,TRUE,channel = TELEPORT_CHANNEL_QUANTUM) - to_chat(owner, "I suddenly find myself somewhere else!") - to_chat(entangled_mob, "I suddenly find myself somewhere else!") - if(!active_mind_control) //Do not reset entangled mob while mind control is active - entangled_mob = null - -/obj/item/organ/heart/gland/quantum/mind_control(command, mob/living/user) - if(..()) - if(entangled_mob && ishuman(entangled_mob) && (entangled_mob.stat < DEAD)) - to_chat(entangled_mob, "I suddenly feel an irresistible compulsion to follow an order...") - to_chat(entangled_mob, "[command]") - var/atom/movable/screen/alert/mind_control/mind_alert = entangled_mob.throw_alert("mind_control", /atom/movable/screen/alert/mind_control) - mind_alert.command = command - message_admins("[key_name(owner)] mirrored an abductor mind control message to [key_name(entangled_mob)]: [command]") - update_gland_hud() - -/obj/item/organ/heart/gland/quantum/clear_mind_control() - if(active_mind_control) - to_chat(entangled_mob, "I feel the compulsion fade, and you completely forget about your previous orders.") - entangled_mob.clear_alert("mind_control") - ..() diff --git a/code/modules/antagonists/abductor/equipment/glands/slime.dm b/code/modules/antagonists/abductor/equipment/glands/slime.dm deleted file mode 100644 index 9974af47fa..0000000000 --- a/code/modules/antagonists/abductor/equipment/glands/slime.dm +++ /dev/null @@ -1,21 +0,0 @@ -/obj/item/organ/heart/gland/slime - true_name = "gastric animation galvanizer" - cooldown_low = 600 - cooldown_high = 1200 - uses = -1 - icon_state = "slime" - mind_control_uses = 1 - mind_control_duration = 2400 - -/obj/item/organ/heart/gland/slime/Insert(mob/living/carbon/M, special = 0) - ..() - owner.faction |= "slime" - owner.grant_language(/datum/language/slime) - -/obj/item/organ/heart/gland/slime/activate() - to_chat(owner, "I feel nauseated!") - owner.vomit(20) - - var/mob/living/simple_animal/slime/Slime = new(get_turf(owner), "grey") - Slime.Friends = list(owner) - Slime.Leader = owner diff --git a/code/modules/antagonists/abductor/equipment/glands/spider.dm b/code/modules/antagonists/abductor/equipment/glands/spider.dm deleted file mode 100644 index d454d8e369..0000000000 --- a/code/modules/antagonists/abductor/equipment/glands/spider.dm +++ /dev/null @@ -1,14 +0,0 @@ -/obj/item/organ/heart/gland/spiderman - true_name = "araneae cloister accelerator" - cooldown_low = 450 - cooldown_high = 900 - uses = -1 - icon_state = "spider" - mind_control_uses = 2 - mind_control_duration = 2400 - -/obj/item/organ/heart/gland/spiderman/activate() - to_chat(owner, "I feel something crawling in your skin.") - owner.faction |= "spiders" - var/obj/structure/spider/spiderling/S = new(owner.drop_location()) - S.directive = "Protect your nest inside [owner.real_name]." diff --git a/code/modules/antagonists/abductor/equipment/glands/transform.dm b/code/modules/antagonists/abductor/equipment/glands/transform.dm deleted file mode 100644 index 75e294dcee..0000000000 --- a/code/modules/antagonists/abductor/equipment/glands/transform.dm +++ /dev/null @@ -1,15 +0,0 @@ -/obj/item/organ/heart/gland/transform - true_name = "anthropmorphic transmorphosizer" - cooldown_low = 900 - cooldown_high = 1800 - uses = -1 - human_only = TRUE - icon_state = "species" - mind_control_uses = 7 - mind_control_duration = 300 - -/obj/item/organ/heart/gland/transform/activate() - to_chat(owner, "I feel unlike myself.") - randomize_human(owner) - var/species = pick(list(/datum/species/human, /datum/species/lizard, /datum/species/moth, /datum/species/fly)) - owner.set_species(species) diff --git a/code/modules/antagonists/abductor/equipment/glands/trauma.dm b/code/modules/antagonists/abductor/equipment/glands/trauma.dm deleted file mode 100644 index a302f7e861..0000000000 --- a/code/modules/antagonists/abductor/equipment/glands/trauma.dm +++ /dev/null @@ -1,18 +0,0 @@ -/obj/item/organ/heart/gland/trauma - true_name = "white matter randomiser" - cooldown_low = 800 - cooldown_high = 1200 - uses = 5 - icon_state = "emp" - mind_control_uses = 3 - mind_control_duration = 1800 - -/obj/item/organ/heart/gland/trauma/activate() - to_chat(owner, "I feel a spike of pain in your head.") - if(prob(33)) - owner.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY)) - else - if(prob(20)) - owner.gain_trauma_type(BRAIN_TRAUMA_SEVERE, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY)) - else - owner.gain_trauma_type(BRAIN_TRAUMA_MILD, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY)) diff --git a/code/modules/antagonists/abductor/equipment/glands/ventcrawl.dm b/code/modules/antagonists/abductor/equipment/glands/ventcrawl.dm deleted file mode 100644 index a041c4e93c..0000000000 --- a/code/modules/antagonists/abductor/equipment/glands/ventcrawl.dm +++ /dev/null @@ -1,12 +0,0 @@ -/obj/item/organ/heart/gland/ventcrawling - true_name = "pliant cartilage enabler" - cooldown_low = 1800 - cooldown_high = 2400 - uses = 1 - icon_state = "vent" - mind_control_uses = 4 - mind_control_duration = 1800 - -/obj/item/organ/heart/gland/ventcrawling/activate() - to_chat(owner, "I feel very stretchy.") - owner.ventcrawler = VENTCRAWLER_ALWAYS diff --git a/code/modules/antagonists/abductor/equipment/glands/viral.dm b/code/modules/antagonists/abductor/equipment/glands/viral.dm deleted file mode 100644 index e23d10533e..0000000000 --- a/code/modules/antagonists/abductor/equipment/glands/viral.dm +++ /dev/null @@ -1,34 +0,0 @@ -/obj/item/organ/heart/gland/viral - true_name = "contamination incubator" - cooldown_low = 1800 - cooldown_high = 2400 - uses = 1 - icon_state = "viral" - mind_control_uses = 1 - mind_control_duration = 1800 - -/obj/item/organ/heart/gland/viral/activate() - to_chat(owner, "I feel sick.") - var/datum/disease/advance/A = random_virus(pick(2,6),6) - A.carrier = TRUE - owner.ForceContractDisease(A, FALSE, TRUE) - -/obj/item/organ/heart/gland/viral/proc/random_virus(max_symptoms, max_level) - if(max_symptoms > VIRUS_SYMPTOM_LIMIT) - max_symptoms = VIRUS_SYMPTOM_LIMIT - var/datum/disease/advance/A = new /datum/disease/advance() - var/list/datum/symptom/possible_symptoms = list() - for(var/symptom in subtypesof(/datum/symptom)) - var/datum/symptom/S = symptom - if(initial(S.level) > max_level) - continue - if(initial(S.level) <= 0) //unobtainable symptoms - continue - possible_symptoms += S - for(var/i in 1 to max_symptoms) - var/datum/symptom/chosen_symptom = pick_n_take(possible_symptoms) - if(chosen_symptom) - var/datum/symptom/S = new chosen_symptom - A.symptoms += S - A.Refresh() //just in case someone already made and named the same disease - return A diff --git a/code/modules/antagonists/abductor/ice_abductor.dm b/code/modules/antagonists/abductor/ice_abductor.dm deleted file mode 100644 index d1b829297c..0000000000 --- a/code/modules/antagonists/abductor/ice_abductor.dm +++ /dev/null @@ -1,12 +0,0 @@ -/obj/structure/fluff/iced_abductor ///Unless more non-machine ayy structures made, it will stay in fluff. - name = "Mysterious Block of Ice" - desc = "" - icon = 'icons/effects/freeze.dmi' - icon_state = "ice_ayy" - density = TRUE - deconstructible = FALSE - -/obj/structure/fluff/iced_abductor/Destroy() - var/turf/T = get_turf(src) - new /obj/effect/mob_spawn/human/abductor(T) - . = ..() diff --git a/code/modules/antagonists/abductor/machinery/camera.dm b/code/modules/antagonists/abductor/machinery/camera.dm deleted file mode 100644 index 5c0878017d..0000000000 --- a/code/modules/antagonists/abductor/machinery/camera.dm +++ /dev/null @@ -1,139 +0,0 @@ -/obj/machinery/computer/camera_advanced/abductor - name = "Human Observation Console" - var/team_number = 0 - networks = list("ss13", "abductor") - var/datum/action/innate/teleport_in/tele_in_action = new - var/datum/action/innate/teleport_out/tele_out_action = new - var/datum/action/innate/teleport_self/tele_self_action = new - var/datum/action/innate/vest_mode_swap/vest_mode_action = new - var/datum/action/innate/vest_disguise_swap/vest_disguise_action = new - var/datum/action/innate/set_droppoint/set_droppoint_action = new - var/obj/machinery/abductor/console/console - lock_override = TRUE - - icon = 'icons/obj/abductor.dmi' - icon_state = "camera" - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - -/obj/machinery/computer/camera_advanced/abductor/CreateEye() - ..() - eyeobj.visible_icon = TRUE - eyeobj.icon = 'icons/mob/cameramob.dmi' - eyeobj.icon_state = "abductor_camera" - eyeobj.invisibility = INVISIBILITY_OBSERVER - -/obj/machinery/computer/camera_advanced/abductor/GrantActions(mob/living/carbon/user) - ..() - - if(tele_in_action) - tele_in_action.target = console.pad - tele_in_action.Grant(user) - actions += tele_in_action - - if(tele_out_action) - tele_out_action.target = console - tele_out_action.Grant(user) - actions += tele_out_action - - if(tele_self_action) - tele_self_action.target = console.pad - tele_self_action.Grant(user) - actions += tele_self_action - - if(vest_mode_action) - vest_mode_action.target = console - vest_mode_action.Grant(user) - actions += vest_mode_action - - if(vest_disguise_action) - vest_disguise_action.target = console - vest_disguise_action.Grant(user) - actions += vest_disguise_action - - if(set_droppoint_action) - set_droppoint_action.target = console - set_droppoint_action.Grant(user) - actions += set_droppoint_action - -/obj/machinery/computer/camera_advanced/abductor/proc/IsScientist(mob/living/carbon/human/H) - return HAS_TRAIT(H, TRAIT_ABDUCTOR_SCIENTIST_TRAINING) - -/datum/action/innate/teleport_in - name = "Send To" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "beam_down" - -/datum/action/innate/teleport_in/Activate() - if(!target || !iscarbon(owner)) - return - var/mob/living/carbon/human/C = owner - var/mob/camera/aiEye/remote/remote_eye = C.remote_control - var/obj/machinery/abductor/pad/P = target - - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) - P.PadToLoc(remote_eye.loc) - -/datum/action/innate/teleport_out - name = "Retrieve" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "beam_up" - -/datum/action/innate/teleport_out/Activate() - if(!target || !iscarbon(owner)) - return - var/obj/machinery/abductor/console/console = target - - console.TeleporterRetrieve() - -/datum/action/innate/teleport_self - name = "Send Self" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "beam_down" - -/datum/action/innate/teleport_self/Activate() - if(!target || !iscarbon(owner)) - return - var/mob/living/carbon/human/C = owner - var/mob/camera/aiEye/remote/remote_eye = C.remote_control - var/obj/machinery/abductor/pad/P = target - - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) - P.MobToLoc(remote_eye.loc,C) - -/datum/action/innate/vest_mode_swap - name = "Switch Vest Mode" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "vest_mode" - -/datum/action/innate/vest_mode_swap/Activate() - if(!target || !iscarbon(owner)) - return - var/obj/machinery/abductor/console/console = target - console.FlipVest() - - -/datum/action/innate/vest_disguise_swap - name = "Switch Vest Disguise" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "vest_disguise" - -/datum/action/innate/vest_disguise_swap/Activate() - if(!target || !iscarbon(owner)) - return - var/obj/machinery/abductor/console/console = target - console.SelectDisguise(remote=1) - -/datum/action/innate/set_droppoint - name = "Set Experiment Release Point" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "set_drop" - -/datum/action/innate/set_droppoint/Activate() - if(!target || !iscarbon(owner)) - return - - var/mob/living/carbon/human/C = owner - var/mob/camera/aiEye/remote/remote_eye = C.remote_control - - var/obj/machinery/abductor/console/console = target - console.SetDroppoint(remote_eye.loc,owner) diff --git a/code/modules/antagonists/abductor/machinery/console.dm b/code/modules/antagonists/abductor/machinery/console.dm deleted file mode 100644 index 842fe84335..0000000000 --- a/code/modules/antagonists/abductor/machinery/console.dm +++ /dev/null @@ -1,248 +0,0 @@ -/proc/get_abductor_console(team_number) - for(var/obj/machinery/abductor/console/C in GLOB.machines) - if(C.team_number == team_number) - return C - -//Common - -/obj/machinery/abductor - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - var/team_number = 0 - -//Console - -/obj/machinery/abductor/console - name = "abductor console" - desc = "" - icon = 'icons/obj/abductor.dmi' - icon_state = "console" - density = TRUE - var/obj/item/abductor/gizmo/gizmo - var/obj/item/clothing/suit/armor/abductor/vest/vest - var/obj/machinery/abductor/experiment/experiment - var/obj/machinery/abductor/pad/pad - var/obj/machinery/computer/camera_advanced/abductor/camera - var/list/datum/icon_snapshot/disguises = list() - -/obj/machinery/abductor/console/attack_hand(mob/user) - . = ..() - if(.) - return - if(!HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING) && !HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_TRAINING)) - to_chat(user, "I start mashing alien buttons at random!") - if(do_after(user,100, target = src)) - TeleporterSend() - return - user.set_machine(src) - var/dat = "" - dat += "

    Abductsoft 3000

    " - - if(experiment) - var/points = experiment.points - var/credits = experiment.credits - dat += "Collected Samples : [points]
    " - dat += "Gear Credits: [credits]
    " - dat += "Transfer data in exchange for supplies:
    " - dat += "Advanced Baton (2 Credits)
    " - dat += "Mental Interface Device (2 Credits)
    " - dat += "Reagent Synthesizer (2 Credits)
    " - dat += "Shrink Ray Blaster (2 Credits)
    " - dat += "Agent Helmet
    " - dat += "Agent Vest
    " - dat += "Radio Silencer
    " - dat += "Science Tool
    " - dat += "Superlingual Matrix
    " - else - dat += "NO EXPERIMENT MACHINE DETECTED
    " - - if(pad) - dat += "Emergency Teleporter System." - dat += "Consider using primary observation console first." - dat += "Activate Teleporter
    " - if(gizmo && gizmo.marked) - dat += "Retrieve Mark
    " - else - dat += "Retrieve Mark
    " - else - dat += "NO TELEPAD DETECTED
    " - - if(vest) - dat += "

    Agent Vest Mode


    " - var/mode = vest.mode - if(mode == VEST_STEALTH) - dat += "Combat" - dat += "Stealth" - else - dat += "Combat" - dat += "Stealth" - - dat+="
    " - dat += "Select Agent Vest Disguise
    " - dat += "[HAS_TRAIT_FROM(vest, TRAIT_NODROP, ABDUCTOR_VEST_TRAIT) ? "Unlock" : "Lock"] Vest
    " - else - dat += "NO AGENT VEST DETECTED" - var/datum/browser/popup = new(user, "computer", "Abductor Console", 400, 500) - popup.set_content(dat) - popup.open() - -/obj/machinery/abductor/console/Topic(href, href_list) - if(..()) - return - - usr.set_machine(src) - if(href_list["teleporter_send"]) - TeleporterSend() - else if(href_list["teleporter_retrieve"]) - TeleporterRetrieve() - else if(href_list["flip_vest"]) - FlipVest() - else if(href_list["toggle_vest"]) - if(vest) - vest.toggle_nodrop() - else if(href_list["select_disguise"]) - SelectDisguise() - else if(href_list["dispense"]) - switch(href_list["dispense"]) - if("baton") - Dispense(/obj/item/abductor/baton,cost=2) - if("helmet") - Dispense(/obj/item/clothing/head/helmet/abductor) - if("silencer") - Dispense(/obj/item/abductor/silencer) - if("tool") - Dispense(/obj/item/abductor/gizmo) - if("vest") - Dispense(/obj/item/clothing/suit/armor/abductor/vest) - if("mind_device") - Dispense(/obj/item/abductor/mind_device,cost=2) - if("chem_dispenser") - Dispense(/obj/item/abductor_machine_beacon/chem_dispenser,cost=2) - if("tongue") - Dispense(/obj/item/organ/tongue/abductor) - if("shrink_ray") - Dispense(/obj/item/gun/energy/shrink_ray,cost=2) - updateUsrDialog() - -/obj/machinery/abductor/console/proc/TeleporterRetrieve() - if(pad && gizmo && gizmo.marked) - pad.Retrieve(gizmo.marked) - -/obj/machinery/abductor/console/proc/TeleporterSend() -// if(pad) -// pad.Send() - -/obj/machinery/abductor/console/proc/FlipVest() - if(vest) - vest.flip_mode() - -/obj/machinery/abductor/console/proc/SelectDisguise(remote = FALSE) - var/list/disguises2 = list() - for(var/name in disguises) - var/datum/icon_snapshot/snap = disguises[name] - var/image/dummy = image(snap.icon, src, snap.icon_state) - dummy.overlays = snap.overlays - disguises2[name] = dummy - - var/entry_name - if(remote) - entry_name = show_radial_menu(usr, camera.eyeobj, disguises2, tooltips = TRUE) - else - entry_name = show_radial_menu(usr, src, disguises2, require_near = TRUE, tooltips = TRUE) - - var/datum/icon_snapshot/chosen = disguises[entry_name] - if(chosen && vest && (remote || in_range(usr,src))) - vest.SetDisguise(chosen) - -/obj/machinery/abductor/console/proc/SetDroppoint(turf/open/location,user) - if(!istype(location)) - to_chat(user, "That place is not safe for the specimen.") - return - - if(pad) - pad.teleport_target = location - to_chat(user, "Location marked as test subject release point.") - - -/obj/machinery/abductor/console/Initialize(mapload) - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/abductor/console/LateInitialize() - if(!team_number) - return - - for(var/obj/machinery/abductor/pad/p in GLOB.machines) - if(p.team_number == team_number) - pad = p - break - - for(var/obj/machinery/abductor/experiment/e in GLOB.machines) - if(e.team_number == team_number) - experiment = e - e.console = src - - for(var/obj/machinery/computer/camera_advanced/abductor/c in GLOB.machines) - if(c.team_number == team_number) - camera = c - c.console = src - -/obj/machinery/abductor/console/proc/AddSnapshot(mob/living/carbon/human/target) - if(target.anti_magic_check(FALSE, FALSE, TRUE, 0)) - say("Subject wearing specialized protective tinfoil gear, unable to get a proper scan!") - return - var/datum/icon_snapshot/entry = new - entry.name = target.name - entry.icon = target.icon - entry.icon_state = target.icon_state - entry.overlays = target.get_overlays_copy(list(HANDS_LAYER)) //ugh - //Update old disguise instead of adding new one - if(disguises[entry.name]) - disguises[entry.name] = entry - return - disguises[entry.name] = entry - -/obj/machinery/abductor/console/proc/AddGizmo(obj/item/abductor/gizmo/G) - if(G == gizmo && G.console == src) - return FALSE - - if(G.console) - G.console.gizmo = null - - gizmo = G - G.console = src - return TRUE - -/obj/machinery/abductor/console/proc/AddVest(obj/item/clothing/suit/armor/abductor/vest/V) - if(vest == V) - return FALSE - - for(var/obj/machinery/abductor/console/C in GLOB.machines) - if(C.vest == V) - C.vest = null - break - - vest = V - return TRUE - -/obj/machinery/abductor/console/attackby(obj/O, mob/user, params) - if(istype(O, /obj/item/abductor/gizmo) && AddGizmo(O)) - to_chat(user, "I link the tool to the console.") - else if(istype(O, /obj/item/clothing/suit/armor/abductor/vest) && AddVest(O)) - to_chat(user, "I link the vest to the console.") - else - return ..() - - - -/obj/machinery/abductor/console/proc/Dispense(item,cost=1) - if(experiment && experiment.credits >= cost) - experiment.credits -=cost - say("Incoming supply!") - var/drop_location = loc - if(pad) - flick("alien-pad", pad) - drop_location = pad.loc - new item(drop_location) - - else - say("Insufficent data!") diff --git a/code/modules/antagonists/abductor/machinery/dispenser.dm b/code/modules/antagonists/abductor/machinery/dispenser.dm deleted file mode 100644 index 01633d64e7..0000000000 --- a/code/modules/antagonists/abductor/machinery/dispenser.dm +++ /dev/null @@ -1,84 +0,0 @@ -/obj/machinery/abductor/gland_dispenser - name = "replacement organ storage" - desc = "" - icon = 'icons/obj/abductor.dmi' - icon_state = "dispenser" - density = TRUE - var/list/gland_types - var/list/gland_colors - var/list/amounts - -/obj/machinery/abductor/gland_dispenser/proc/random_color() - //TODO : replace with presets or spectrum - return rgb(rand(0,255),rand(0,255),rand(0,255)) - -/obj/machinery/abductor/gland_dispenser/Initialize() - . = ..() - gland_types = subtypesof(/obj/item/organ/heart/gland) - gland_types = shuffle(gland_types) - gland_colors = new/list(gland_types.len) - amounts = new/list(gland_types.len) - for(var/i=1,i<=gland_types.len,i++) - gland_colors[i] = random_color() - amounts[i] = rand(1,5) - -/obj/machinery/abductor/gland_dispenser/attack_hand(mob/user) - . = ..() - if(.) - return - if(!isabductor(user)) - return - user.set_machine(src) - var/box_css = {" - "} - var/dat = "" - var/item_count = 0 - for(var/i=1,i<=gland_colors.len,i++) - item_count++ - var/g_color = gland_colors[i] - var/amount = amounts[i] - dat += "[amount]" - if(item_count == 4) // Four boxes per line - dat +="

    " - item_count = 0 - var/datum/browser/popup = new(user, "glands", "Gland Dispenser", 200, 200) - popup.add_head_content(box_css) - popup.set_content(dat) - popup.open() - return - -/obj/machinery/abductor/gland_dispenser/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/organ/heart/gland)) - if(!user.transferItemToLoc(W, src)) - return - for(var/i=1,i<=gland_colors.len,i++) - if(gland_types[i] == W.type) - amounts[i]++ - else - return ..() - -/obj/machinery/abductor/gland_dispenser/Topic(href, href_list) - if(..()) - return - usr.set_machine(src) - - if(href_list["dispense"]) - Dispense(text2num(href_list["dispense"])) - updateUsrDialog() - -/obj/machinery/abductor/gland_dispenser/proc/Dispense(count) - if(amounts[count]>0) - amounts[count]-- - var/T = gland_types[count] - new T(get_turf(src)) diff --git a/code/modules/antagonists/abductor/machinery/experiment.dm b/code/modules/antagonists/abductor/machinery/experiment.dm deleted file mode 100644 index 410780e3ee..0000000000 --- a/code/modules/antagonists/abductor/machinery/experiment.dm +++ /dev/null @@ -1,229 +0,0 @@ -/obj/machinery/abductor/experiment - name = "experimentation machine" - desc = "" - icon = 'icons/obj/abductor.dmi' - icon_state = "experiment-open" - density = FALSE - state_open = TRUE - var/points = 0 - var/credits = 0 - var/list/history - var/list/abductee_minds - var/flash = " - || - " - var/obj/machinery/abductor/console/console - var/message_cooldown = 0 - var/breakout_time = 450 - -/obj/machinery/abductor/experiment/MouseDrop_T(mob/target, mob/user) - var/mob/living/L = user - if(user.stat || (isliving(user) && (!(L.mobility_flags & MOBILITY_STAND) || !(L.mobility_flags & MOBILITY_UI))) || !Adjacent(user) || !target.Adjacent(user) || !ishuman(target)) - return - if(isabductor(target)) - return - close_machine(target) - -/obj/machinery/abductor/experiment/attack_hand(mob/user) - . = ..() - if(.) - return - - experimentUI(user) - -/obj/machinery/abductor/experiment/open_machine() - if(!state_open && !panel_open) - ..() - -/obj/machinery/abductor/experiment/close_machine(mob/target) - for(var/A in loc) - if(isabductor(A)) - return - if(state_open && !panel_open) - ..(target) - -/obj/machinery/abductor/experiment/relaymove(mob/user) - if(user.stat != CONSCIOUS) - return - if(message_cooldown <= world.time) - message_cooldown = world.time + 50 - to_chat(user, "[src]'s door won't budge!") - -/obj/machinery/abductor/experiment/container_resist(mob/living/user) - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT - user.visible_message("I see [user] kicking against the door of [src]!", \ - "I lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)", \ - "I hear a metallic creaking from [src].") - if(do_after(user,(breakout_time), target = src)) - if(!user || user.stat != CONSCIOUS || user.loc != src || state_open) - return - user.visible_message("[user] successfully broke out of [src]!", \ - "I successfully break out of [src]!") - open_machine() - -/obj/machinery/abductor/experiment/proc/dissection_icon(mob/living/carbon/human/H) - var/icon/photo = null - var/g = (H.gender == FEMALE) ? "f" : "m" - if(H.dna.species.use_skintones) - photo = icon("icon" = 'icons/mob/human.dmi', "icon_state" = "[H.skin_tone]_[g]") - else - photo = icon("icon" = 'icons/mob/human.dmi', "icon_state" = "[H.dna.species.id]_[g]") - photo.Blend("#[H.dna.features["mcolor"]]", ICON_MULTIPLY) - - var/icon/eyes - if(EYECOLOR in H.dna.species.species_traits) - eyes = icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes") - eyes.Blend("#[H.eye_color]", ICON_MULTIPLY) - - var/datum/sprite_accessory/S - S = GLOB.hairstyles_list[H.hairstyle] - if(S && (HAIR in H.dna.species.species_traits)) - var/icon/hair = icon("icon" = S.icon, "icon_state" = "[S.icon_state]") - hair.Blend("#[H.hair_color]", ICON_MULTIPLY) - eyes.Blend(hair, ICON_OVERLAY) - - S = GLOB.facial_hairstyles_list[H.facial_hairstyle] - if(S && (FACEHAIR in H.dna.species.species_traits)) - var/icon/facial = icon("icon" = S.icon, "icon_state" = "[S.icon_state]") - facial.Blend("#[H.facial_hair_color]", ICON_MULTIPLY) - eyes.Blend(facial, ICON_OVERLAY) - - if(eyes) - photo.Blend(eyes, ICON_OVERLAY) - - var/icon/splat = icon("icon" = 'icons/mob/dam_mob.dmi',"icon_state" = "chest30") - photo.Blend(splat,ICON_OVERLAY) - - return photo - -/obj/machinery/abductor/experiment/proc/experimentUI(mob/user) - var/dat - dat += "

    Experiment

    " - if(occupant) - var/obj/item/photo/P = new - P.picture = new - P.picture.picture_image = icon(dissection_icon(occupant), dir = SOUTH) - user << browse_rsc(P.picture.picture_image, "dissection_img") - dat += "
    " - dat += "" //Avert your eyes - dat += "" - dat += "Probe
    " - dat += "Dissect
    " - dat += "Analyze
    " - dat += "
    " - else - dat += "Experiment " - - if(!occupant) - dat += "

    Machine Unoccupied

    " - else - dat += "

    Subject Status :

    " - dat += "[occupant.name] => " - var/mob/living/mob_occupant = occupant - switch(mob_occupant.stat) - if(CONSCIOUS) - dat += "Conscious" - if(UNCONSCIOUS) - dat += "Unconscious" - else // DEAD - dat += "Deceased" - dat += "
    " - dat += "[flash]" - dat += "
    " - dat += "Scan" - dat += "Close" : "open=1'>Open"]" - var/datum/browser/popup = new(user, "experiment", "Probing Console", 300, 300) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - popup.set_content(dat) - popup.open() - -/obj/machinery/abductor/experiment/Topic(href, href_list) - if(..() || usr == occupant) - return - usr.set_machine(src) - if(href_list["refresh"]) - updateUsrDialog() - return - if(href_list["open"]) - open_machine() - return - if(href_list["close"]) - close_machine() - return - if(occupant) - var/mob/living/mob_occupant = occupant - if(mob_occupant.stat != DEAD) - if(href_list["experiment"]) - flash = Experiment(occupant,href_list["experiment"],usr) - updateUsrDialog() - add_fingerprint(usr) - -/obj/machinery/abductor/experiment/proc/Experiment(mob/occupant,type,mob/user) - LAZYINITLIST(history) - var/mob/living/carbon/human/H = occupant - - var/datum/antagonist/abductor/user_abductor = user.mind.has_antag_datum(/datum/antagonist/abductor) - if(!user_abductor) - return "Authorization failure. Contact mothership immidiately." - - var/point_reward = 0 - if(H in history) - return "Specimen already in database." - if(H.stat == DEAD) - say("Specimen deceased - please provide fresh sample.") - return "Specimen deceased." - var/obj/item/organ/heart/gland/GlandTest = locate() in H.internal_organs - if(!GlandTest) - say("Experimental dissection not detected!") - return "No glands detected!" - if(H.mind != null && H.ckey != null) - LAZYINITLIST(abductee_minds) - LAZYADD(history, H) - LAZYADD(abductee_minds, H.mind) - say("Processing specimen...") - sleep(5) - switch(text2num(type)) - if(1) - to_chat(H, "I feel violated.") - if(2) - to_chat(H, "I feel myself being sliced apart and put back together.") - if(3) - to_chat(H, "I feel intensely watched.") - sleep(5) - user_abductor.team.abductees += H.mind - H.mind.add_antag_datum(/datum/antagonist/abductee) - - for(var/obj/item/organ/heart/gland/G in H.internal_organs) - G.Start() - point_reward++ - if(point_reward > 0) - open_machine() - SendBack(H) - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - points += point_reward - credits += point_reward - return "Experiment successful! [point_reward] new data-points collected." - else - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - return "Experiment failed! No replacement organ detected." - else - say("Brain activity nonexistent - disposing sample...") - open_machine() - SendBack(H) - return "Specimen braindead - disposed." - -/obj/machinery/abductor/experiment/proc/SendBack(mob/living/carbon/human/H) - H.Sleeping(160) - H.uncuff() - if(console && console.pad && console.pad.teleport_target) - H.forceMove(console.pad.teleport_target) - return - //Area not chosen / It's not safe area - teleport to arrivals - SSjob.SendToLateJoin(H, FALSE) - return - - -/obj/machinery/abductor/experiment/update_icon() - if(state_open) - icon_state = "experiment-open" - else - icon_state = "experiment" diff --git a/code/modules/antagonists/abductor/machinery/pad.dm b/code/modules/antagonists/abductor/machinery/pad.dm deleted file mode 100644 index d149a37676..0000000000 --- a/code/modules/antagonists/abductor/machinery/pad.dm +++ /dev/null @@ -1,56 +0,0 @@ -/obj/machinery/abductor/pad - name = "Alien Telepad" - desc = "" - icon = 'icons/obj/abductor.dmi' - icon_state = "alien-pad-idle" - var/turf/teleport_target - -/obj/machinery/abductor/pad/proc/Warp(mob/living/target) - if(!target.buckled) - target.forceMove(get_turf(src)) - -/obj/machinery/abductor/pad/proc/Send() - if(teleport_target == null) - teleport_target = GLOB.teleportlocs[pick(GLOB.teleportlocs)] - flick("alien-pad", src) - for(var/mob/living/target in loc) - target.forceMove(teleport_target) - new /obj/effect/temp_visual/dir_setting/ninja(get_turf(target), target.dir) - to_chat(target, "The instability of the warp leaves you disoriented!") - target.Stun(60) - -/obj/machinery/abductor/pad/proc/Retrieve(mob/living/target) - flick("alien-pad", src) - new /obj/effect/temp_visual/dir_setting/ninja(get_turf(target), target.dir) - Warp(target) - -/obj/machinery/abductor/pad/proc/doMobToLoc(place, atom/movable/target) - flick("alien-pad", src) - target.forceMove(place) - new /obj/effect/temp_visual/dir_setting/ninja(get_turf(target), target.dir) - -/obj/machinery/abductor/pad/proc/MobToLoc(place,mob/living/target) - new /obj/effect/temp_visual/teleport_abductor(place) - addtimer(CALLBACK(src, PROC_REF(doMobToLoc), place, target), 80) - -/obj/machinery/abductor/pad/proc/doPadToLoc(place) - flick("alien-pad", src) - for(var/mob/living/target in get_turf(src)) - target.forceMove(place) - new /obj/effect/temp_visual/dir_setting/ninja(get_turf(target), target.dir) - -/obj/machinery/abductor/pad/proc/PadToLoc(place) - new /obj/effect/temp_visual/teleport_abductor(place) - addtimer(CALLBACK(src, PROC_REF(doPadToLoc), place), 80) - -/obj/effect/temp_visual/teleport_abductor - name = "Huh" - icon = 'icons/obj/abductor.dmi' - icon_state = "teleport" - duration = 80 - -/obj/effect/temp_visual/teleport_abductor/Initialize() - . = ..() - var/datum/effect_system/spark_spread/S = new - S.set_up(10,0,loc) - S.start() diff --git a/code/modules/antagonists/blob/blob_report.dm b/code/modules/antagonists/blob/blob_report.dm index f0d46888c2..017f3a2793 100644 --- a/code/modules/antagonists/blob/blob_report.dm +++ b/code/modules/antagonists/blob/blob_report.dm @@ -3,7 +3,6 @@ var/wall = 0 var/r_wall = 0 var/window = 0 - var/door = 0 var/grille = 0 var/mach = 0 @@ -12,7 +11,6 @@ wall = 0 r_wall = 0 window = 0 - door = 0 grille = 0 mach = 0 for(var/Z in SSmapping.levels_by_trait(ZTRAIT_STATION)) @@ -50,8 +48,6 @@ var/obj/structure/grille/GR = O if(!GR.broken) grille += 1 - else if(istype(O, /obj/machinery/door)) - door += 1 else if(ismachinery(O)) mach += 1 CHECK_TICK @@ -66,7 +62,6 @@ output += (result.r_wall/ max(r_wall,1)) output += (result.wall / max(wall,1)) output += (result.window / max(window,1)) - output += (result.door / max(door,1)) output += (result.grille / max(grille,1)) output += (result.mach / max(mach,1)) return (output/7) diff --git a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm index 4b4494ff1d..5f8521a873 100644 --- a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm +++ b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm @@ -39,7 +39,7 @@ GLOBAL_LIST_INIT(valid_blobstrains, subtypesof(/datum/blobstrain) - list(/datum/ /datum/blobstrain/proc/send_message(mob/living/M) var/totalmessage = message - if(message_living && !issilicon(M)) + if(message_living) totalmessage += message_living totalmessage += "!" to_chat(M, "[totalmessage]") diff --git a/code/modules/antagonists/blob/overmind.dm b/code/modules/antagonists/blob/overmind.dm index 9c144d68c4..b3030c6df0 100644 --- a/code/modules/antagonists/blob/overmind.dm +++ b/code/modules/antagonists/blob/overmind.dm @@ -107,7 +107,6 @@ GLOBAL_LIST_EMPTY(blob_nodes) else if(!victory_in_progress && (blobs_legit.len >= blobwincount)) victory_in_progress = TRUE priority_announce("Biohazard has reached critical mass. Station loss is imminent.", "Biohazard Alert") - set_security_level("delta") max_blob_points = INFINITY blob_points = INFINITY addtimer(CALLBACK(src, PROC_REF(victory)), 450) diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm index 1efd1f6fe9..45ce9cadfe 100644 --- a/code/modules/antagonists/blob/structures/_blob.dm +++ b/code/modules/antagonists/blob/structures/_blob.dm @@ -2,7 +2,7 @@ /obj/structure/blob name = "blob" icon = 'icons/mob/blob.dmi' - light_range = 2 + light_outer_range = 2 desc = "" density = FALSE //this being false causes two bugs, being able to attack blob tiles behind other blobs and being unable to move on blob tiles in no gravity, but turning it to 1 causes the blob mobs to be unable to path through blobs, which is probably worse. opacity = 0 @@ -333,7 +333,7 @@ /obj/structure/blob/normal name = "normal blob" icon_state = "blob" - light_range = 0 + light_outer_range = 0 obj_integrity = 21 //doesn't start at full health max_integrity = 25 health_regen = 1 diff --git a/code/modules/antagonists/brother/brother.dm b/code/modules/antagonists/brother/brother.dm deleted file mode 100644 index 0fc5a4112f..0000000000 --- a/code/modules/antagonists/brother/brother.dm +++ /dev/null @@ -1,171 +0,0 @@ -/datum/antagonist/brother - name = "Brother" - antagpanel_category = "Brother" - job_rank = ROLE_BROTHER - var/special_role = ROLE_BROTHER - antag_hud_type = ANTAG_HUD_BROTHER - antag_hud_name = "brother" - var/datum/team/brother_team/team - antag_moodlet = /datum/mood_event/focused - can_hijack = HIJACK_HIJACKER - -/datum/antagonist/brother/create_team(datum/team/brother_team/new_team) - if(!new_team) - return - if(!istype(new_team)) - stack_trace("Wrong team type passed to [type] initialization.") - team = new_team - -/datum/antagonist/brother/get_team() - return team - -/datum/antagonist/brother/on_gain() - SSticker.mode.brothers += owner - objectives += team.objectives - owner.special_role = special_role - finalize_brother() - return ..() - -/datum/antagonist/brother/on_removal() - SSticker.mode.brothers -= owner - if(owner.current) - to_chat(owner.current,"I are no longer the [special_role]!") - owner.special_role = null - return ..() - -/datum/antagonist/brother/apply_innate_effects(mob/living/mob_override) - var/mob/living/M = mob_override || owner.current - add_antag_hud(antag_hud_type, antag_hud_name, M) - -/datum/antagonist/brother/remove_innate_effects(mob/living/mob_override) - var/mob/living/M = mob_override || owner.current - remove_antag_hud(antag_hud_type, M) - -/datum/antagonist/brother/antag_panel_data() - return "Conspirators : [get_brother_names()]]" - -/datum/antagonist/brother/proc/get_brother_names() - var/list/brothers = team.members - owner - var/brother_text = "" - for(var/i = 1 to brothers.len) - var/datum/mind/M = brothers[i] - brother_text += M.name - if(i == brothers.len - 1) - brother_text += " and " - else if(i != brothers.len) - brother_text += ", " - return brother_text - -/datum/antagonist/brother/proc/give_meeting_area() - if(!owner.current || !team || !team.meeting_area) - return - to_chat(owner.current, "My designated meeting area: [team.meeting_area]") - antag_memory += "Meeting Area: [team.meeting_area]
    " - -/datum/antagonist/brother/greet() - var/brother_text = get_brother_names() - to_chat(owner.current, "I are the [owner.special_role] of [brother_text].") - to_chat(owner.current, "The Syndicate only accepts those that have proven themselves. Prove myself and prove my [team.member_name]s by completing my objectives together!") - owner.announce_objectives() - give_meeting_area() - -/datum/antagonist/brother/proc/finalize_brother() - owner.current.playsound_local(get_turf(owner.current), 'sound/blank.ogg', 100, FALSE, pressure_affected = FALSE) - -/datum/antagonist/brother/admin_add(datum/mind/new_owner,mob/admin) - //show list of possible brothers - var/list/candidates = list() - for(var/mob/living/L in GLOB.alive_mob_list) - if(!L.mind || L.mind == new_owner || !can_be_owned(L.mind)) - continue - candidates[L.mind.name] = L.mind - - var/choice = input(admin,"Choose the blood brother.", "Brother") as null|anything in sortNames(candidates) - if(!choice) - return - var/datum/mind/bro = candidates[choice] - var/datum/team/brother_team/T = new - T.add_member(new_owner) - T.add_member(bro) - T.pick_meeting_area() - T.forge_brother_objectives() - new_owner.add_antag_datum(/datum/antagonist/brother,T) - bro.add_antag_datum(/datum/antagonist/brother, T) - T.update_name() - message_admins("[key_name_admin(admin)] made [key_name_admin(new_owner)] and [key_name_admin(bro)] into blood brothers.") - log_admin("[key_name(admin)] made [key_name(new_owner)] and [key_name(bro)] into blood brothers.") - -/datum/team/brother_team - name = "brotherhood" - member_name = "blood brother" - var/meeting_area - var/static/meeting_areas = list("The Bar", "Dorms", "Escape Dock", "Arrivals", "Holodeck", "Primary Tool Storage", "Recreation Area", "Chapel", "Library") - -/datum/team/brother_team/is_solo() - return FALSE - -/datum/team/brother_team/proc/pick_meeting_area() - meeting_area = pick(meeting_areas) - meeting_areas -= meeting_area - -/datum/team/brother_team/proc/update_name() - var/list/last_names = list() - for(var/datum/mind/M in members) - var/list/split_name = splittext(M.name," ") - last_names += split_name[split_name.len] - - name = last_names.Join(" & ") - -/datum/team/brother_team/roundend_report() - var/list/parts = list() - - parts += "The blood brothers of [name] were:" - for(var/datum/mind/M in members) - parts += printplayer(M) - var/win = TRUE - var/objective_count = 1 - for(var/datum/objective/objective in objectives) - if(objective.check_completion()) - parts += "Objective #[objective_count]: [objective.explanation_text] Success!" - else - parts += "Objective #[objective_count]: [objective.explanation_text] Fail." - win = FALSE - objective_count++ - if(win) - parts += "The blood brothers were successful!" - else - parts += "The blood brothers have failed!" - - return "
    [parts.Join("
    ")]
    " - -/datum/team/brother_team/proc/add_objective(datum/objective/O, needs_target = FALSE) - O.team = src - if(needs_target) - O.find_target(dupe_search_range = list(src)) - O.update_explanation_text() - objectives += O - -/datum/team/brother_team/proc/forge_brother_objectives() - objectives = list() - var/is_hijacker = prob(10) - for(var/i = 1 to max(1, CONFIG_GET(number/brother_objectives_amount) + (members.len > 2) - is_hijacker)) - forge_single_objective() - if(is_hijacker) - if(!locate(/datum/objective/hijack) in objectives) - add_objective(new/datum/objective/hijack) - else if(!locate(/datum/objective/escape) in objectives) - add_objective(new/datum/objective/escape) - -/datum/team/brother_team/proc/forge_single_objective() - if(prob(50)) - if(LAZYLEN(active_ais()) && prob(100/GLOB.joined_player_list.len)) - add_objective(new/datum/objective/destroy, TRUE) - else if(prob(30)) - add_objective(new/datum/objective/maroon, TRUE) - else - add_objective(new/datum/objective/assassinate, TRUE) - else - add_objective(new/datum/objective/steal, TRUE) - -/datum/team/brother_team/antag_listing_name() - return "[name] blood brothers" diff --git a/code/modules/antagonists/changeling/cellular_emporium.dm b/code/modules/antagonists/changeling/cellular_emporium.dm deleted file mode 100644 index 57346397c7..0000000000 --- a/code/modules/antagonists/changeling/cellular_emporium.dm +++ /dev/null @@ -1,87 +0,0 @@ -// cellular emporium -// The place where changelings go to buy their biological weaponry. - -/datum/cellular_emporium - var/name = "cellular emporium" - var/datum/antagonist/changeling/changeling - -/datum/cellular_emporium/New(my_changeling) - . = ..() - changeling = my_changeling - -/datum/cellular_emporium/Destroy() - changeling = null - . = ..() - -/datum/cellular_emporium/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "cellular_emporium", name, 900, 480, master_ui, state) - ui.open() - -/datum/cellular_emporium/ui_data(mob/user) - var/list/data = list() - - var/can_readapt = changeling.canrespec - var/genetic_points_remaining = changeling.geneticpoints - var/absorbed_dna_count = changeling.absorbedcount - var/true_absorbs = changeling.trueabsorbs - - data["can_readapt"] = can_readapt - data["genetic_points_remaining"] = genetic_points_remaining - data["absorbed_dna_count"] = absorbed_dna_count - - var/list/abilities = list() - - for(var/path in changeling.all_powers) - var/datum/action/changeling/ability = path - - var/dna_cost = initial(ability.dna_cost) - if(dna_cost <= 0) - continue - - var/list/AL = list() - AL["name"] = initial(ability.name) - AL["desc"] = initial(ability.desc) - AL["helptext"] = initial(ability.helptext) - AL["owned"] = changeling.has_sting(ability) - var/req_dna = initial(ability.req_dna) - var/req_absorbs = initial(ability.req_absorbs) - AL["dna_cost"] = dna_cost - AL["can_purchase"] = ((req_absorbs <= true_absorbs) && (req_dna <= absorbed_dna_count) && (dna_cost <= genetic_points_remaining)) - - abilities += list(AL) - - data["abilities"] = abilities - - return data - -/datum/cellular_emporium/ui_act(action, params) - if(..()) - return - - switch(action) - if("readapt") - if(changeling.canrespec) - changeling.readapt() - if("evolve") - var/sting_name = params["name"] - changeling.purchase_power(sting_name) - -/datum/action/innate/cellular_emporium - name = "Cellular Emporium" - icon_icon = 'icons/obj/drinks.dmi' - button_icon_state = "changelingsting" - background_icon_state = "bg_changeling" - var/datum/cellular_emporium/cellular_emporium - -/datum/action/innate/cellular_emporium/New(our_target) - . = ..() - button.name = name - if(istype(our_target, /datum/cellular_emporium)) - cellular_emporium = our_target - else - CRASH("cellular_emporium action created with non emporium") - -/datum/action/innate/cellular_emporium/Activate() - cellular_emporium.ui_interact(owner) diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm deleted file mode 100644 index 0e3d3422e1..0000000000 --- a/code/modules/antagonists/changeling/changeling.dm +++ /dev/null @@ -1,578 +0,0 @@ -#define LING_FAKEDEATH_TIME 400 //40 seconds -#define LING_DEAD_GENETICDAMAGE_HEAL_CAP 50 //The lowest value of geneticdamage handle_changeling() can take it to while dead. -#define LING_ABSORB_RECENT_SPEECH 8 //The amount of recent spoken lines to gain on absorbing a mob - -/datum/antagonist/changeling - name = "Changeling" - roundend_category = "changelings" - antagpanel_category = "Changeling" - job_rank = ROLE_CHANGELING - antag_moodlet = /datum/mood_event/focused - antag_hud_type = ANTAG_HUD_CHANGELING - antag_hud_name = "changeling" - - var/you_are_greet = TRUE - var/give_objectives = TRUE - var/team_mode = FALSE //Should assign team objectives ? - var/competitive_objectives = FALSE //Should we assign objectives in competition with other lings? - - //Changeling Stuff - - var/list/stored_profiles = list() //list of datum/changelingprofile - var/datum/changelingprofile/first_prof = null - var/dna_max = 6 //How many extra DNA strands the changeling can store for transformation. - var/absorbedcount = 0 - var/trueabsorbs = 0//dna gained using absorb, not dna sting - var/chem_charges = 20 - var/chem_storage = 75 - var/chem_recharge_rate = 1 - var/chem_recharge_slowdown = 0 - var/sting_range = 2 - var/changelingID = "Changeling" - var/geneticdamage = 0 - var/was_absorbed = FALSE //if they were absorbed by another ling already. - var/isabsorbing = 0 - var/islinking = 0 - var/geneticpoints = 10 - var/purchasedpowers = list() - - var/mimicing = "" - var/canrespec = FALSE//set to TRUE in absorb.dm - var/changeling_speak = 0 - var/datum/dna/chosen_dna - var/datum/action/changeling/sting/chosen_sting - var/datum/cellular_emporium/cellular_emporium - var/datum/action/innate/cellular_emporium/emporium_action - - var/static/list/all_powers = typecacheof(/datum/action/changeling,TRUE) - -/datum/antagonist/changeling/New() - . = ..() - for(var/datum/antagonist/changeling/C in GLOB.antagonists) - if(!C.owner || C.owner == owner) - continue - if(C.was_absorbed) //make sure the other ling wasn't already killed by another one. only matters if the changeling that absorbed them was gibbed after. - continue - competitive_objectives = TRUE - break - -/datum/antagonist/changeling/Destroy() - QDEL_NULL(cellular_emporium) - QDEL_NULL(emporium_action) - . = ..() - -/datum/antagonist/changeling/proc/generate_name() - var/honorific - if(owner.current.gender == FEMALE) - honorific = "Ms." - else if(owner.current.gender == MALE) - honorific = "Mr." - else - honorific = "Mx." - if(GLOB.possible_changeling_IDs.len) - changelingID = pick(GLOB.possible_changeling_IDs) - GLOB.possible_changeling_IDs -= changelingID - changelingID = "[honorific] [changelingID]" - else - changelingID = "[honorific] [rand(1,999)]" - -/datum/antagonist/changeling/proc/create_actions() - cellular_emporium = new(src) - emporium_action = new(cellular_emporium) - emporium_action.Grant(owner.current) - -/datum/antagonist/changeling/on_gain() - generate_name() - create_actions() - reset_powers() - create_initial_profile() - if(give_objectives) - if(team_mode) - forge_team_objectives() - forge_objectives() - . = ..() - -/datum/antagonist/changeling/on_removal() - //We'll be using this from now on - var/mob/living/carbon/C = owner.current - if(istype(C)) - var/obj/item/organ/brain/B = C.getorganslot(ORGAN_SLOT_BRAIN) - if(B && (B.decoy_override != initial(B.decoy_override))) - B.organ_flags |= ORGAN_VITAL - B.decoy_override = FALSE - remove_changeling_powers() - . = ..() - -/datum/antagonist/changeling/proc/reset_properties() - changeling_speak = 0 - chosen_sting = null - geneticpoints = initial(geneticpoints) - sting_range = initial(sting_range) - chem_storage = initial(chem_storage) - chem_recharge_rate = initial(chem_recharge_rate) - chem_charges = min(chem_charges, chem_storage) - chem_recharge_slowdown = initial(chem_recharge_slowdown) - mimicing = "" - -/datum/antagonist/changeling/proc/remove_changeling_powers() - if(ishuman(owner.current) || ismonkey(owner.current)) - reset_properties() - for(var/datum/action/changeling/p in purchasedpowers) - purchasedpowers -= p - p.Remove(owner.current) - - //MOVE THIS - if(owner.current.hud_used && owner.current.hud_used.lingstingdisplay) - owner.current.hud_used.lingstingdisplay.icon_state = null - owner.current.hud_used.lingstingdisplay.invisibility = INVISIBILITY_ABSTRACT - -/datum/antagonist/changeling/proc/reset_powers() - if(purchasedpowers) - remove_changeling_powers() - //Repurchase free powers. - for(var/path in all_powers) - var/datum/action/changeling/S = new path - if(!S.dna_cost) - if(!has_sting(S)) - purchasedpowers += S - S.on_purchase(owner.current,TRUE) - -/datum/antagonist/changeling/proc/regain_powers()//for when action buttons are lost and need to be regained, such as when the mind enters a new mob - emporium_action.Grant(owner.current) - for(var/power in purchasedpowers) - var/datum/action/changeling/S = power - if(istype(S) && S.needs_button) - S.Grant(owner.current) - -///Handles stinging without verbs. -/datum/antagonist/changeling/proc/stingAtom(mob/living/carbon/ling, atom/A) - if(!chosen_sting || A == ling || !istype(ling) || ling.stat) - return - if(!chosen_sting.try_to_sting(ling, A)) - return - ling.changeNext_move(CLICK_CD_MELEE) - return COMSIG_MOB_CANCEL_CLICKON - -/datum/antagonist/changeling/proc/has_sting(datum/action/changeling/power) - for(var/P in purchasedpowers) - var/datum/action/changeling/otherpower = P - if(initial(power.name) == otherpower.name) - return TRUE - return FALSE - - -/datum/antagonist/changeling/proc/purchase_power(sting_name) - var/datum/action/changeling/thepower - - for(var/path in all_powers) - var/datum/action/changeling/S = path - if(initial(S.name) == sting_name) - thepower = new path - break - - if(!thepower) - to_chat(owner.current, "This is awkward. Changeling power purchase failed, please report this bug to a coder!") - return - - if(absorbedcount < thepower.req_dna) - to_chat(owner.current, "We lack the energy to evolve this ability!") - return - - if(has_sting(thepower)) - to_chat(owner.current, "We have already evolved this ability!") - return - - if(thepower.dna_cost < 0) - to_chat(owner.current, "We cannot evolve this ability!") - return - - if(geneticpoints < thepower.dna_cost) - to_chat(owner.current, "We have reached our capacity for abilities!") - return - - if(HAS_TRAIT(owner.current, TRAIT_DEATHCOMA))//To avoid potential exploits by buying new powers while in stasis, which clears your verblist. - to_chat(owner.current, "We lack the energy to evolve new abilities right now!") - return - - geneticpoints -= thepower.dna_cost - purchasedpowers += thepower - thepower.on_purchase(owner.current)//Grant() is ran in this proc, see changeling_powers.dm - -/datum/antagonist/changeling/proc/readapt() - if(!ishuman(owner.current)) - to_chat(owner.current, "We can't remove our evolutions in this form!") - return - if(canrespec) - to_chat(owner.current, "We have removed our evolutions from this form, and are now ready to readapt.") - reset_powers() - canrespec = 0 - SSblackbox.record_feedback("tally", "changeling_power_purchase", 1, "Readapt") - return 1 - else - to_chat(owner.current, "I lack the power to readapt your evolutions!") - return 0 - -//Called in life() -/datum/antagonist/changeling/proc/regenerate()//grants the HuD in life.dm - var/mob/living/carbon/the_ling = owner.current - if(istype(the_ling)) - if(the_ling.stat == DEAD) - chem_charges = min(max(0, chem_charges + chem_recharge_rate - chem_recharge_slowdown), (chem_storage*0.5)) - geneticdamage = max(LING_DEAD_GENETICDAMAGE_HEAL_CAP,geneticdamage-1) - else //not dead? no chem/geneticdamage caps. - chem_charges = min(max(0, chem_charges + chem_recharge_rate - chem_recharge_slowdown), chem_storage) - geneticdamage = max(0, geneticdamage-1) - - -/datum/antagonist/changeling/proc/get_dna(dna_owner) - for(var/datum/changelingprofile/prof in stored_profiles) - if(dna_owner == prof.name) - return prof - -/datum/antagonist/changeling/proc/has_dna(datum/dna/tDNA) - for(var/datum/changelingprofile/prof in stored_profiles) - if(tDNA.is_same_as(prof.dna)) - return TRUE - return FALSE - -/datum/antagonist/changeling/proc/can_absorb_dna(mob/living/carbon/human/target, verbose=1) - var/mob/living/carbon/user = owner.current - if(!istype(user)) - return - if(stored_profiles.len) - var/datum/changelingprofile/prof = stored_profiles[1] - if(prof.dna == user.dna && stored_profiles.len >= dna_max)//If our current DNA is the stalest, we gotta ditch it. - if(verbose) - to_chat(user, "We have reached our capacity to store genetic information! We must transform before absorbing more.") - return - if(!target) - return - if(NO_DNA_COPY in target.dna.species.species_traits) - if(verbose) - to_chat(user, "[target] is not compatible with our biology.") - return - if(HAS_TRAIT(target, TRAIT_BADDNA)) - if(verbose) - to_chat(user, "DNA of [target] is ruined beyond usability!") - return - if(HAS_TRAIT(target, TRAIT_HUSK)) - if(verbose) - to_chat(user, "[target]'s body is ruined beyond usability!") - return - if(!ishuman(target))//Absorbing monkeys is entirely possible, but it can cause issues with transforming. That's what lesser form is for anyway! - if(verbose) - to_chat(user, "We could gain no benefit from absorbing a lesser creature.") - return - if(has_dna(target.dna)) - if(verbose) - to_chat(user, "We already have this DNA in storage!") - return - if(!target.has_dna()) - if(verbose) - to_chat(user, "[target] is not compatible with our biology.") - return - return 1 - - -/datum/antagonist/changeling/proc/create_profile(mob/living/carbon/human/H, protect = 0) - var/datum/changelingprofile/prof = new - - H.dna.real_name = H.real_name //Set this again, just to be sure that it's properly set. - var/datum/dna/new_dna = new H.dna.type - H.dna.copy_dna(new_dna) - prof.dna = new_dna - prof.name = H.real_name - prof.protected = protect - - prof.underwear = H.underwear - prof.undershirt = H.undershirt - prof.socks = H.socks - - var/list/slots = list("head", "wear_mask", "back", "wear_armor", "wear_pants", "shoes", "belt", "gloves", "glasses", "ears", "wear_ring", "s_store") - for(var/slot in slots) - if(slot in H.vars) - var/obj/item/clothing/I = H.vars[slot] - if(!I) - continue - prof.name_list[slot] = I.name - prof.appearance_list[slot] = I.appearance - prof.flags_cover_list[slot] = I.flags_cover - prof.item_state_list[slot] = I.item_state - prof.mob_overlay_icon_list[slot] = I.mob_overlay_icon - prof.exists_list[slot] = 1 - else - continue - - return prof - -/datum/antagonist/changeling/proc/add_profile(datum/changelingprofile/prof) - if(stored_profiles.len > dna_max) - if(!push_out_profile()) - return - - if(!first_prof) - first_prof = prof - - stored_profiles += prof - absorbedcount++ - -/datum/antagonist/changeling/proc/add_new_profile(mob/living/carbon/human/H, protect = 0) - var/datum/changelingprofile/prof = create_profile(H, protect) - add_profile(prof) - return prof - -/datum/antagonist/changeling/proc/remove_profile(mob/living/carbon/human/H, force = 0) - for(var/datum/changelingprofile/prof in stored_profiles) - if(H.real_name == prof.name) - if(prof.protected && !force) - continue - stored_profiles -= prof - qdel(prof) - -/datum/antagonist/changeling/proc/get_profile_to_remove() - for(var/datum/changelingprofile/prof in stored_profiles) - if(!prof.protected) - return prof - -/datum/antagonist/changeling/proc/push_out_profile() - var/datum/changelingprofile/removeprofile = get_profile_to_remove() - if(removeprofile) - stored_profiles -= removeprofile - return 1 - return 0 - - -/datum/antagonist/changeling/proc/create_initial_profile() - var/mob/living/carbon/C = owner.current //only carbons have dna now, so we have to typecaste - if(ishuman(C)) - add_new_profile(C) - -/datum/antagonist/changeling/apply_innate_effects(mob/living/mob_override) - //Brains optional. - var/mob/living/carbon/C = owner.current - if(istype(C)) - var/obj/item/organ/brain/B = C.getorganslot(ORGAN_SLOT_BRAIN) - if(B) - B.organ_flags &= ~ORGAN_VITAL - B.decoy_override = TRUE - RegisterSignal(C, list(COMSIG_MOB_MIDDLECLICKON, COMSIG_MOB_ALTCLICKON), PROC_REF(stingAtom)) - var/mob/living/M = mob_override || owner.current - add_antag_hud(antag_hud_type, antag_hud_name, M) - handle_clown_mutation(M, "You have evolved beyond your clownish nature, allowing you to wield weapons without harming myself.") - -/datum/antagonist/changeling/remove_innate_effects(mob/living/mob_override) - var/mob/living/M = mob_override || owner.current - remove_antag_hud(antag_hud_type, M) - handle_clown_mutation(M, removing = FALSE) - UnregisterSignal(owner.current, list(COMSIG_MOB_MIDDLECLICKON, COMSIG_MOB_ALTCLICKON)) - - -/datum/antagonist/changeling/greet() - if (you_are_greet) - to_chat(owner.current, "I are [changelingID], a changeling! You have absorbed and taken the form of a human.") - to_chat(owner.current, "Use say \"[MODE_TOKEN_CHANGELING] message\" to communicate with your fellow changelings.") - to_chat(owner.current, "I must complete the following tasks:") - owner.current.playsound_local(get_turf(owner.current), 'sound/blank.ogg', 100, FALSE, pressure_affected = FALSE) - - owner.announce_objectives() - -/datum/antagonist/changeling/farewell() - to_chat(owner.current, "I grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!") - -/datum/antagonist/changeling/proc/forge_team_objectives() - if(GLOB.changeling_team_objective_type) - var/datum/objective/changeling_team_objective/team_objective = new GLOB.changeling_team_objective_type - team_objective.owner = owner - if(team_objective.prepare())//Setting up succeeded - objectives += team_objective - else - qdel(team_objective) - return - -/datum/antagonist/changeling/proc/forge_objectives() - //OBJECTIVES - random traitor objectives. Unique objectives "steal brain" and "identity theft". - //No escape alone because changelings aren't suited for it and it'd probably just lead to rampant robusting - //If it seems like they'd be able to do it in play, add a 10% chance to have to escape alone - - var/escape_objective_possible = TRUE - - //if there's a team objective, check if it's compatible with escape objectives - for(var/datum/objective/changeling_team_objective/CTO in objectives) - if(!CTO.escape_objective_compatible) - escape_objective_possible = FALSE - break - - switch(competitive_objectives ? (team_mode ? rand(1,2) : rand(1,3)) : 1) - if(1) - var/datum/objective/absorb/absorb_objective = new - absorb_objective.owner = owner - absorb_objective.gen_amount_goal(6, 8) - objectives += absorb_objective - if(2) - var/datum/objective/absorb_most/ac = new - ac.owner = owner - objectives += ac - if(3) //only give the murder other changelings goal if they're not in a team. - var/datum/objective/absorb_changeling/ac = new - ac.owner = owner - objectives += ac - - if(prob(60)) - if(prob(85)) - var/datum/objective/steal/steal_objective = new - steal_objective.owner = owner - steal_objective.find_target() - objectives += steal_objective - else - var/datum/objective/download/download_objective = new - download_objective.owner = owner - download_objective.gen_amount_goal() - objectives += download_objective - - var/list/active_ais = active_ais() - if(active_ais.len && prob(100/GLOB.joined_player_list.len)) - var/datum/objective/destroy/destroy_objective = new - destroy_objective.owner = owner - destroy_objective.find_target() - objectives += destroy_objective - else - if(prob(70)) - var/datum/objective/assassinate/kill_objective = new - kill_objective.owner = owner - if(team_mode) //No backstabbing while in a team - kill_objective.find_target_by_role(role = ROLE_CHANGELING, role_type = TRUE, invert = TRUE) - else - kill_objective.find_target() - objectives += kill_objective - else - var/datum/objective/maroon/maroon_objective = new - maroon_objective.owner = owner - if(team_mode) - maroon_objective.find_target_by_role(role = ROLE_CHANGELING, role_type = TRUE, invert = TRUE) - else - maroon_objective.find_target() - objectives += maroon_objective - - if (!(locate(/datum/objective/escape) in objectives) && escape_objective_possible) - var/datum/objective/escape/escape_with_identity/identity_theft = new - identity_theft.owner = owner - identity_theft.target = maroon_objective.target - identity_theft.update_explanation_text() - objectives += identity_theft - escape_objective_possible = FALSE - - if (!(locate(/datum/objective/escape) in objectives) && escape_objective_possible) - if(prob(50)) - var/datum/objective/escape/escape_objective = new - escape_objective.owner = owner - objectives += escape_objective - else - var/datum/objective/escape/escape_with_identity/identity_theft = new - identity_theft.owner = owner - if(team_mode) - identity_theft.find_target_by_role(role = ROLE_CHANGELING, role_type = TRUE, invert = TRUE) - else - identity_theft.find_target() - objectives += identity_theft - escape_objective_possible = FALSE - - -/datum/antagonist/changeling/admin_add(datum/mind/new_owner,mob/admin) - . = ..() - to_chat(new_owner.current, "Our powers have awoken. A flash of memory returns to us...we are [changelingID], a changeling!") - -/datum/antagonist/changeling/get_admin_commands() - . = ..() - if(stored_profiles.len && (owner.current.real_name != first_prof.name)) - .["Transform to initial appearance."] = CALLBACK(src,PROC_REF(admin_restore_appearance)) - -/datum/antagonist/changeling/proc/admin_restore_appearance(mob/admin) - if(!stored_profiles.len || !iscarbon(owner.current)) - to_chat(admin, "Resetting DNA failed!") - else - var/mob/living/carbon/C = owner.current - first_prof.dna.transfer_identity(C, transfer_SE=1) - C.real_name = first_prof.name - C.updateappearance(mutcolor_update=1) - C.domutcheck() - -// Profile - -/datum/changelingprofile - var/name = "a bug" - - var/protected = 0 - - var/datum/dna/dna = null - var/list/name_list = list() //associative list of slotname = itemname - var/list/appearance_list = list() - var/list/flags_cover_list = list() - var/list/exists_list = list() - var/list/item_state_list = list() - var/list/mob_overlay_icon_list = list() - - var/underwear - var/undershirt - var/socks - -/datum/changelingprofile/Destroy() - qdel(dna) - . = ..() - -/datum/changelingprofile/proc/copy_profile(datum/changelingprofile/newprofile) - newprofile.name = name - newprofile.protected = protected - newprofile.dna = new dna.type - dna.copy_dna(newprofile.dna) - newprofile.name_list = name_list.Copy() - newprofile.appearance_list = appearance_list.Copy() - newprofile.flags_cover_list = flags_cover_list.Copy() - newprofile.exists_list = exists_list.Copy() - newprofile.item_state_list = item_state_list.Copy() - newprofile.underwear = underwear - newprofile.undershirt = undershirt - newprofile.socks = socks - newprofile.mob_overlay_icon_list = mob_overlay_icon_list.Copy() - - -/datum/antagonist/changeling/xenobio - name = "Xenobio Changeling" - give_objectives = FALSE - show_in_roundend = FALSE //These are here for admin tracking purposes only - you_are_greet = FALSE - -/datum/antagonist/changeling/roundend_report() - var/list/parts = list() - - var/changelingwin = 1 - if(!owner.current) - changelingwin = 0 - - parts += printplayer(owner) - - //Removed sanity if(changeling) because we -want- a runtime to inform us that the changelings list is incorrect and needs to be fixed. - parts += "Changeling ID: [changelingID]." - parts += "Genomes Extracted: [absorbedcount]" - parts += " " - if(objectives.len) - var/count = 1 - for(var/datum/objective/objective in objectives) - if(objective.check_completion()) - parts += "Objective #[count]: [objective.explanation_text] Success!
    " - else - parts += "Objective #[count]: [objective.explanation_text] Fail." - changelingwin = 0 - count++ - - if(changelingwin) - parts += "The changeling was successful!" - else - parts += "The changeling has failed." - - return parts.Join("
    ") - -/datum/antagonist/changeling/antag_listing_name() - return ..() + "([changelingID])" - -/datum/antagonist/changeling/xenobio/antag_listing_name() - return ..() + "(Xenobio)" diff --git a/code/modules/antagonists/changeling/changeling_power.dm b/code/modules/antagonists/changeling/changeling_power.dm deleted file mode 100644 index 881f2abeb3..0000000000 --- a/code/modules/antagonists/changeling/changeling_power.dm +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Don't use the apostrophe in name or desc. Causes script errors.//probably no longer true - */ - -/datum/action/changeling - name = "Prototype Sting - Debug button, ahelp this" - background_icon_state = "bg_changeling" - icon_icon = 'icons/mob/actions/actions_changeling.dmi' - var/needs_button = TRUE//for passive abilities like hivemind that dont need a button - var/helptext = "" // Details - var/chemical_cost = 0 // negative chemical cost is for passive abilities (chemical glands) - var/dna_cost = -1 //cost of the sting in dna points. 0 = auto-purchase (see changeling.dm), -1 = cannot be purchased - var/req_dna = 0 //amount of dna needed to use this ability. Changelings always have atleast 1 - var/req_human = 0 //if you need to be human to use this ability - var/req_absorbs = 0 //similar to req_dna, but only gained from absorbing, not DNA sting - var/req_stat = CONSCIOUS // CONSCIOUS, UNCONSCIOUS or DEAD - var/ignores_fakedeath = FALSE // usable with the FAKEDEATH flag - var/active = FALSE//used by a few powers that toggle - -/* -changeling code now relies on on_purchase to grant powers. -if you override it, MAKE SURE you call parent or it will not be usable -the same goes for Remove(). if you override Remove(), call parent or else your power wont be removed on respec -*/ - -/datum/action/changeling/proc/on_purchase(mob/user, is_respec) - if(!is_respec) - SSblackbox.record_feedback("tally", "changeling_power_purchase", 1, name) - if(needs_button) - Grant(user)//how powers are added rather than the checks in mob.dm - -/datum/action/changeling/Trigger() - var/mob/user = owner - if(!user || !user.mind || !user.mind.has_antag_datum(/datum/antagonist/changeling)) - return - try_to_sting(user) - -/** - *Contrary to the name, this proc isn't just used by changeling stings. It handles the activation of the action and the deducation of its cost. - *The order of the proc chain is: - *can_sting(). Should this fail, the process gets aborted early. - *sting_action(). This proc usually handles the actual effect of the action. - *Should sting_action succeed the following will be done: - *sting_feedback(). Produces feedback on the performed action. Don't ask me why this isn't handled in sting_action() - *The deduction of the cost of this power. - *Returns TRUE on a successful activation. - */ -/datum/action/changeling/proc/try_to_sting(mob/user, mob/target) - if(!can_sting(user, target)) - return FALSE - var/datum/antagonist/changeling/c = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(sting_action(user, target)) - sting_feedback(user, target) - c.chem_charges -= chemical_cost - return TRUE - return FALSE - -/datum/action/changeling/proc/sting_action(mob/user, mob/target) - SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("[name]")) - return 0 - -/datum/action/changeling/proc/sting_feedback(mob/user, mob/target) - return 0 - -//Fairly important to remember to return 1 on success >.< - -/datum/action/changeling/proc/can_sting(mob/living/user, mob/target) - if(!ishuman(user) && !ismonkey(user)) //typecast everything from mob to carbon from this point onwards - return 0 - if(req_human && !ishuman(user)) - to_chat(user, "We cannot do that in this form!") - return 0 - var/datum/antagonist/changeling/c = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(c.chem_charges < chemical_cost) - to_chat(user, "We require at least [chemical_cost] unit\s of chemicals to do that!") - return 0 - if(c.absorbedcount < req_dna) - to_chat(user, "We require at least [req_dna] sample\s of compatible DNA.") - return 0 - if(c.trueabsorbs < req_absorbs) - to_chat(user, "We require at least [req_absorbs] sample\s of DNA gained through our Absorb ability.") - if(req_stat < user.stat) - to_chat(user, "We are incapacitated.") - return 0 - if((HAS_TRAIT(user, TRAIT_DEATHCOMA)) && (!ignores_fakedeath)) - to_chat(user, "We are incapacitated.") - return 0 - return 1 - -/datum/action/changeling/proc/can_be_used_by(mob/user) - if(!user || QDELETED(user)) - return 0 - if(!ishuman(user) && !ismonkey(user)) - return FALSE - if(req_human && !ishuman(user)) - return FALSE - return TRUE diff --git a/code/modules/antagonists/changeling/powers/absorb.dm b/code/modules/antagonists/changeling/powers/absorb.dm deleted file mode 100644 index cb147ecd83..0000000000 --- a/code/modules/antagonists/changeling/powers/absorb.dm +++ /dev/null @@ -1,145 +0,0 @@ -/datum/action/changeling/absorbDNA - name = "Absorb DNA" - desc = "" - button_icon_state = "absorb_dna" - chemical_cost = 0 - dna_cost = 0 - req_human = 1 - -/datum/action/changeling/absorbDNA/can_sting(mob/living/carbon/user) - if(!..()) - return - - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling.isabsorbing) - to_chat(user, "We are already absorbing!") - return - - if(!user.pulling || !iscarbon(user.pulling)) - to_chat(user, "We must be grabbing a creature to absorb them!") - return - if(user.grab_state <= GRAB_NECK) - to_chat(user, "We must have a tighter grip to absorb this creature!") - return - - var/mob/living/carbon/target = user.pulling - return changeling.can_absorb_dna(target) - - - -/datum/action/changeling/absorbDNA/sting_action(mob/user) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - var/mob/living/carbon/human/target = user.pulling - changeling.isabsorbing = 1 - for(var/i in 1 to 3) - switch(i) - if(1) - to_chat(user, "This creature is compatible. We must hold still...") - if(2) - user.visible_message("[user] extends a proboscis!", "We extend a proboscis.") - if(3) - user.visible_message("[user] stabs [target] with the proboscis!", "We stab [target] with the proboscis.") - to_chat(target, "I feel a sharp stabbing pain!") - target.take_overall_damage(40) - - SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("Absorb DNA", "[i]")) - if(!do_mob(user, target, 150)) - to_chat(user, "Our absorption of [target] has been interrupted!") - changeling.isabsorbing = 0 - return - - SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("Absorb DNA", "4")) - user.visible_message("[user] sucks the fluids from [target]!", "We have absorbed [target].") - to_chat(target, "I are absorbed by the changeling!") - - if(!changeling.has_dna(target.dna)) - changeling.add_new_profile(target) - changeling.trueabsorbs++ - - if(user.nutrition < NUTRITION_LEVEL_WELL_FED) - user.set_nutrition(min((user.nutrition + target.nutrition), NUTRITION_LEVEL_WELL_FED)) - - if(target.mind && user.mind)//if the victim and user have minds - // Absorb a lizard, speak Draconic. - user.copy_known_languages_from(target) - - var/datum/mind/suckedbrain = target.mind - user.mind.memory += "
    We've absorbed [target]'s memories into our own...
    [suckedbrain.memory]
    " - for(var/A in suckedbrain.antag_datums) - var/datum/antagonist/antag_types = A - var/list/all_objectives = antag_types.objectives.Copy() - if(antag_types.antag_memory) - user.mind.memory += "[antag_types.antag_memory]
    " - if(LAZYLEN(all_objectives)) - user.mind.memory += "Objectives:" - var/obj_count = 1 - for(var/O in all_objectives) - var/datum/objective/objective = O - user.mind.memory += "
    Objective #[obj_count++]: [objective.explanation_text]" - var/list/datum/mind/other_owners = objective.get_owners() - suckedbrain - if(other_owners.len) - user.mind.memory += "
      " - for(var/mind in other_owners) - var/datum/mind/M = mind - user.mind.memory += "
    • Conspirator: [M.name]
    • " - user.mind.memory += "
    " - user.mind.memory += "That's all [target] had.
    " - user.memory() //I can read your mind, kekeke. Output all their notes. - - //Some of target's recent speech, so the changeling can attempt to imitate them better. - //Recent as opposed to all because rounds tend to have a LOT of text. - - var/list/recent_speech = list() - var/list/say_log = list() - var/log_source = target.logging - for(var/log_type in log_source) - var/nlog_type = text2num(log_type) - if(nlog_type & LOG_SAY) - var/list/reversed = log_source[log_type] - if(islist(reversed)) - say_log = reverseRange(reversed.Copy()) - break - - if(LAZYLEN(say_log) > LING_ABSORB_RECENT_SPEECH) - recent_speech = say_log.Copy(say_log.len-LING_ABSORB_RECENT_SPEECH+1,0) //0 so len-LING_ARS+1 to end of list - else - for(var/spoken_memory in say_log) - if(recent_speech.len >= LING_ABSORB_RECENT_SPEECH) - break - recent_speech[spoken_memory] = say_log[spoken_memory] - - if(recent_speech.len) - changeling.antag_memory += "Some of [target]'s speech patterns, we should study these to better impersonate [target.p_them()]!
    " - to_chat(user, "Some of [target]'s speech patterns, we should study these to better impersonate [target.p_them()]!") - for(var/spoken_memory in recent_speech) - changeling.antag_memory += "\"[recent_speech[spoken_memory]]\"
    " - to_chat(user, "\"[recent_speech[spoken_memory]]\"") - changeling.antag_memory += "We have no more knowledge of [target]'s speech patterns.
    " - to_chat(user, "We have no more knowledge of [target]'s speech patterns.") - - - var/datum/antagonist/changeling/target_ling = target.mind.has_antag_datum(/datum/antagonist/changeling) - if(target_ling)//If the target was a changeling, suck out their extra juice and objective points! - to_chat(user, "[target] was one of us. We have absorbed their power.") - target_ling.remove_changeling_powers() - changeling.geneticpoints += round(target_ling.geneticpoints/2) - target_ling.geneticpoints = 0 - target_ling.canrespec = 0 - changeling.chem_storage += round(target_ling.chem_storage/2) - changeling.chem_charges += min(target_ling.chem_charges, changeling.chem_storage) - target_ling.chem_charges = 0 - target_ling.chem_storage = 0 - changeling.absorbedcount += (target_ling.absorbedcount) - target_ling.stored_profiles.len = 1 - target_ling.absorbedcount = 0 - target_ling.was_absorbed = TRUE - - - changeling.chem_charges=min(changeling.chem_charges+10, changeling.chem_storage) - - changeling.isabsorbing = 0 - changeling.canrespec = 1 - - target.death(0) - target.Drain() - return TRUE diff --git a/code/modules/antagonists/changeling/powers/adrenaline.dm b/code/modules/antagonists/changeling/powers/adrenaline.dm deleted file mode 100644 index 574fae4602..0000000000 --- a/code/modules/antagonists/changeling/powers/adrenaline.dm +++ /dev/null @@ -1,19 +0,0 @@ -/datum/action/changeling/adrenaline - name = "Adrenaline Sacs" - desc = "" - helptext = "Removes all stuns instantly and adds a short-term reduction in further stuns. Can be used while unconscious. Continued use poisons the body." - button_icon_state = "adrenaline" - chemical_cost = 30 - dna_cost = 2 - req_human = 1 - req_stat = UNCONSCIOUS - -//Recover from stuns. -/datum/action/changeling/adrenaline/sting_action(mob/living/user) - ..() - to_chat(user, "Energy rushes through us.") - user.SetKnockdown(0) - user.set_resting(FALSE) - user.reagents.add_reagent(/datum/reagent/medicine/changelingadrenaline, 3) //15 seconds - user.reagents.add_reagent(/datum/reagent/medicine/changelinghaste, 3) //6 seconds, for a really quick burst of speed - return TRUE diff --git a/code/modules/antagonists/changeling/powers/augmented_eyesight.dm b/code/modules/antagonists/changeling/powers/augmented_eyesight.dm deleted file mode 100644 index b08a271884..0000000000 --- a/code/modules/antagonists/changeling/powers/augmented_eyesight.dm +++ /dev/null @@ -1,52 +0,0 @@ -//Augmented Eyesight: Gives you X-ray vision or protection from flashes. Also, high DNA cost because of how powerful it is. -//Possible todo: make a custom message for directing a penlight/flashlight at the eyes - not sure what would display though. - -/datum/action/changeling/augmented_eyesight - name = "Augmented Eyesight" - desc = "" - helptext = "Grants us x-ray vision or flash protection. We will become a lot more vulnerable to flash-based devices while x-ray vision is active." - button_icon_state = "augmented_eyesight" - chemical_cost = 0 - dna_cost = 2 //Would be 1 without thermal vision - active = FALSE - -/datum/action/changeling/augmented_eyesight/on_purchase(mob/user) //The ability starts inactive, so we should be protected from flashes. - ..() - var/obj/item/organ/eyes/E = user.getorganslot(ORGAN_SLOT_EYES) - if (E) - E.flash_protect = FLASH_PROTECTION_WELDER //Adjust the user's eyes' flash protection - to_chat(user, "We adjust our eyes to protect them from bright lights.") - else - to_chat(user, "We can't adjust our eyes if we don't have any!") - -/datum/action/changeling/augmented_eyesight/sting_action(mob/living/carbon/user) - if(!istype(user)) - return - ..() - var/obj/item/organ/eyes/E = user.getorganslot(ORGAN_SLOT_EYES) - if(E) - if(!active) - E.sight_flags |= SEE_MOBS | SEE_OBJS | SEE_TURFS //Add sight flags to the user's eyes - E.flash_protect = FLASH_PROTECTION_SENSITIVE //Adjust the user's eyes' flash protection - to_chat(user, "We adjust our eyes to sense prey through walls.") - active = TRUE //Defined in code/modules/spells/spell.dm - else - E.sight_flags ^= SEE_MOBS | SEE_OBJS | SEE_TURFS //Remove sight flags from the user's eyes - E.flash_protect = FLASH_PROTECTION_WELDER //Adjust the user's eyes' flash protection - to_chat(user, "We adjust our eyes to protect them from bright lights.") - active = FALSE - user.update_sight() - else - to_chat(user, "We can't adjust our eyes if we don't have any!") - return 1 - - -/datum/action/changeling/augmented_eyesight/Remove(mob/user) //Get rid of x-ray vision and flash protection when the user refunds this ability - var/obj/item/organ/eyes/E = user.getorganslot(ORGAN_SLOT_EYES) - if(E) - if (active) - E.sight_flags ^= SEE_MOBS | SEE_OBJS | SEE_TURFS - else - E.flash_protect = FLASH_PROTECTION_NONE - user.update_sight() - ..() diff --git a/code/modules/antagonists/changeling/powers/biodegrade.dm b/code/modules/antagonists/changeling/powers/biodegrade.dm deleted file mode 100644 index 19e24658d6..0000000000 --- a/code/modules/antagonists/changeling/powers/biodegrade.dm +++ /dev/null @@ -1,82 +0,0 @@ -/datum/action/changeling/biodegrade - name = "Biodegrade" - desc = "" - helptext = "This is obvious to nearby people, and can destroy standard restraints and closets." - button_icon_state = "biodegrade" - chemical_cost = 30 //High cost to prevent spam - dna_cost = 2 - req_human = 1 - -/datum/action/changeling/biodegrade/sting_action(mob/living/carbon/human/user) - var/used = FALSE // only one form of shackles removed per use - if(!user.restrained() && isopenturf(user.loc)) - to_chat(user, "We are already free!") - return 0 - - if(user.handcuffed) - var/obj/O = user.get_item_by_slot(SLOT_HANDCUFFED) - if(!istype(O)) - return 0 - user.visible_message("[user] vomits a glob of acid on [user.p_their()] [O]!", \ - "We vomit acidic ooze onto our restraints!") - - addtimer(CALLBACK(src, PROC_REF(dissolve_handcuffs), user, O), 30) - used = TRUE - - if(user.wear_armor && user.wear_armor.breakouttime && !used) - var/obj/item/clothing/suit/S = user.get_item_by_slot(SLOT_ARMOR) - if(!istype(S)) - return 0 - user.visible_message("[user] vomits a glob of acid across the front of [user.p_their()] [S]!", \ - "We vomit acidic ooze onto our straight jacket!") - addtimer(CALLBACK(src, PROC_REF(dissolve_straightjacket), user, S), 30) - used = TRUE - - - if(istype(user.loc, /obj/structure/closet) && !used) - var/obj/structure/closet/C = user.loc - if(!istype(C)) - return 0 - C.visible_message("[C]'s hinges suddenly begin to melt and run!") - to_chat(user, "We vomit acidic goop onto the interior of [C]!") - addtimer(CALLBACK(src, PROC_REF(open_closet), user, C), 70) - used = TRUE - - if(istype(user.loc, /obj/structure/spider/cocoon) && !used) - var/obj/structure/spider/cocoon/C = user.loc - if(!istype(C)) - return 0 - C.visible_message("[src] shifts and starts to fall apart!") - to_chat(user, "We secrete acidic enzymes from our skin and begin melting our cocoon...") - addtimer(CALLBACK(src, PROC_REF(dissolve_cocoon), user, C), 25) //Very short because it's just webs - used = TRUE - ..() - return used - -/datum/action/changeling/biodegrade/proc/dissolve_handcuffs(mob/living/carbon/human/user, obj/O) - if(O && user.handcuffed == O) - user.visible_message("[O] dissolve[O.gender==PLURAL?"":"s"] into a puddle of sizzling goop.") - new /obj/effect/decal/cleanable/greenglow(O.drop_location()) - qdel(O) - -/datum/action/changeling/biodegrade/proc/dissolve_straightjacket(mob/living/carbon/human/user, obj/S) - if(S && user.wear_armor == S) - user.visible_message("[S] dissolves into a puddle of sizzling goop.") - new /obj/effect/decal/cleanable/greenglow(S.drop_location()) - qdel(S) - -/datum/action/changeling/biodegrade/proc/open_closet(mob/living/carbon/human/user, obj/structure/closet/C) - if(C && user.loc == C) - C.visible_message("[C]'s door breaks and opens!") - new /obj/effect/decal/cleanable/greenglow(C.drop_location()) - C.welded = FALSE - C.locked = FALSE - C.broken = TRUE - C.open() - to_chat(user, "We open the container restraining us!") - -/datum/action/changeling/biodegrade/proc/dissolve_cocoon(mob/living/carbon/human/user, obj/structure/spider/cocoon/C) - if(C && user.loc == C) - new /obj/effect/decal/cleanable/greenglow(C.drop_location()) - qdel(C) //The cocoon's destroy will move the changeling outside of it without interference - to_chat(user, "We dissolve the cocoon!") diff --git a/code/modules/antagonists/changeling/powers/chameleon_skin.dm b/code/modules/antagonists/changeling/powers/chameleon_skin.dm deleted file mode 100644 index dce7344e7a..0000000000 --- a/code/modules/antagonists/changeling/powers/chameleon_skin.dm +++ /dev/null @@ -1,25 +0,0 @@ -/datum/action/changeling/chameleon_skin - name = "Chameleon Skin" - desc = "" - helptext = "Allows us to become invisible after a few seconds of standing still. Can be toggled on and off." - button_icon_state = "chameleon_skin" - dna_cost = 2 - chemical_cost = 25 - req_human = 1 - -/datum/action/changeling/chameleon_skin/sting_action(mob/user) - var/mob/living/carbon/human/H = user //SHOULD always be human, because req_human = 1 - if(!istype(H)) // req_human could be done in can_sting stuff. - return - ..() - if(H.dna.get_mutation(CHAMELEON)) - H.dna.remove_mutation(CHAMELEON) - else - H.dna.add_mutation(CHAMELEON) - return TRUE - -/datum/action/changeling/chameleon_skin/Remove(mob/user) - if(user.has_dna()) - var/mob/living/carbon/C = user - C.dna.remove_mutation(CHAMELEON) - ..() diff --git a/code/modules/antagonists/changeling/powers/digitalcamo.dm b/code/modules/antagonists/changeling/powers/digitalcamo.dm deleted file mode 100644 index 72dd7c2210..0000000000 --- a/code/modules/antagonists/changeling/powers/digitalcamo.dm +++ /dev/null @@ -1,23 +0,0 @@ -/datum/action/changeling/digitalcamo - name = "Digital Camouflage" - desc = "" - helptext = "We cannot be tracked by camera or seen by AI units while using this skill. However, humans looking at us will find us... uncanny." - button_icon_state = "digital_camo" - dna_cost = 1 - active = FALSE - -//Prevents AIs tracking you but makes you easily detectable to the human-eye. -/datum/action/changeling/digitalcamo/sting_action(mob/user) - ..() - if(active) - to_chat(user, "We return to normal.") - user.RemoveElement(/datum/element/digitalcamo) - else - to_chat(user, "We distort our form to hide from the AI.") - user.AddElement(/datum/element/digitalcamo) - active = !active - return TRUE - -/datum/action/changeling/digitalcamo/Remove(mob/user) - user.RemoveElement(/datum/element/digitalcamo) - ..() diff --git a/code/modules/antagonists/changeling/powers/fakedeath.dm b/code/modules/antagonists/changeling/powers/fakedeath.dm deleted file mode 100644 index 922b434b4d..0000000000 --- a/code/modules/antagonists/changeling/powers/fakedeath.dm +++ /dev/null @@ -1,71 +0,0 @@ -/datum/action/changeling/fakedeath - name = "Reviving Stasis" - desc = "" - button_icon_state = "fake_death" - chemical_cost = 15 - dna_cost = 0 - req_dna = 1 - req_stat = DEAD - ignores_fakedeath = TRUE - var/revive_ready = FALSE - -//Fake our own death and fully heal. You will appear to be dead but regenerate fully after a short delay. -/datum/action/changeling/fakedeath/sting_action(mob/living/user) - ..() - if(revive_ready) - INVOKE_ASYNC(src, PROC_REF(revive), user) - revive_ready = FALSE - name = "Reviving Stasis" - desc = "" - button_icon_state = "fake_death" - UpdateButtonIcon() - chemical_cost = 15 - to_chat(user, "We have revived ourselves.") - else - to_chat(user, "We begin our stasis, preparing energy to arise once more.") - user.fakedeath("changeling") //play dead - user.update_stat() - user.update_mobility() - addtimer(CALLBACK(src, PROC_REF(ready_to_regenerate), user), LING_FAKEDEATH_TIME, TIMER_UNIQUE) - return TRUE - -/datum/action/changeling/fakedeath/proc/revive(mob/living/user) - if(!user || !istype(user)) - return - user.cure_fakedeath("changeling") - user.revive(full_heal = TRUE, admin_revive = FALSE) - var/list/missing = user.get_missing_limbs() - missing -= BODY_ZONE_HEAD // headless changelings are funny - if(missing.len) - playsound(user, 'sound/blank.ogg', 50, TRUE) - user.visible_message("[user]'s missing limbs \ - reform, making a loud, grotesque sound!", - "My limbs regrow, making a \ - loud, crunchy sound and giving you great pain!", - "I hear organic matter ripping \ - and tearing!") - user.emote("scream") - user.regenerate_limbs(0, list(BODY_ZONE_HEAD)) - user.regenerate_organs() - -/datum/action/changeling/fakedeath/proc/ready_to_regenerate(mob/user) - if(user && user.mind) - var/datum/antagonist/changeling/C = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(C && C.purchasedpowers) - to_chat(user, "We are ready to revive.") - name = "Revive" - desc = "" - button_icon_state = "revive" - UpdateButtonIcon() - chemical_cost = 0 - revive_ready = TRUE - -/datum/action/changeling/fakedeath/can_sting(mob/living/user) - if(HAS_TRAIT_FROM(user, TRAIT_DEATHCOMA, "changeling") && !revive_ready) - to_chat(user, "We are already reviving.") - return - if(!user.stat && !revive_ready) //Confirmation for living changelings if they want to fake their death - switch(alert("Are we sure we wish to fake our own death?",,"Yes", "No")) - if("No") - return - return ..() diff --git a/code/modules/antagonists/changeling/powers/fleshmend.dm b/code/modules/antagonists/changeling/powers/fleshmend.dm deleted file mode 100644 index 166e536281..0000000000 --- a/code/modules/antagonists/changeling/powers/fleshmend.dm +++ /dev/null @@ -1,21 +0,0 @@ -/datum/action/changeling/fleshmend - name = "Fleshmend" - desc = "" - helptext = "If we are on fire, the healing effect will not function. Does not regrow limbs or restore lost blood. Functions while unconscious." - button_icon_state = "fleshmend" - chemical_cost = 20 - dna_cost = 2 - req_stat = UNCONSCIOUS - -//Starts healing you every second for 10 seconds. -//Can be used whilst unconscious. -/datum/action/changeling/fleshmend/sting_action(mob/living/user) - if(user.has_status_effect(STATUS_EFFECT_FLESHMEND)) - to_chat(user, "We are already fleshmending!") - return - ..() - to_chat(user, "We begin to heal rapidly.") - user.apply_status_effect(STATUS_EFFECT_FLESHMEND) - return TRUE - -//Check buffs.dm for the fleshmend status effect code diff --git a/code/modules/antagonists/changeling/powers/headcrab.dm b/code/modules/antagonists/changeling/powers/headcrab.dm deleted file mode 100644 index c48c3eff17..0000000000 --- a/code/modules/antagonists/changeling/powers/headcrab.dm +++ /dev/null @@ -1,43 +0,0 @@ -/datum/action/changeling/headcrab - name = "Last Resort" - desc = "" - helptext = "We will be placed in control of a small, fragile creature. We may attack a corpse like this to plant an egg which will slowly mature into a new form for us." - button_icon_state = "last_resort" - chemical_cost = 20 - dna_cost = 1 - req_human = 1 - -/datum/action/changeling/headcrab/sting_action(mob/user) - set waitfor = FALSE - if(alert("Are we sure we wish to kill ourself and create a headslug?",,"Yes", "No") == "No") - return - ..() - var/datum/mind/M = user.mind - var/list/organs = user.getorganszone(BODY_ZONE_HEAD, TRUE) - - for(var/obj/item/organ/I in organs) - I.Remove(user, 1) - - explosion(get_turf(user), 0, 0, 2, 0, TRUE) - for(var/mob/living/carbon/human/H in range(2,user)) - var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES) - to_chat(H, "I are blinded by a shower of blood!") - H.Stun(20) - H.blur_eyes(20) - eyes?.applyOrganDamage(5) - H.confused += 3 - for(var/mob/living/silicon/S in range(2,user)) - to_chat(S, "My sensors are disabled by a shower of blood!") - S.Paralyze(60) - var/turf = get_turf(user) - user.gib() - . = TRUE - sleep(5) // So it's not killed in explosion - var/mob/living/simple_animal/hostile/headcrab/crab = new(turf) - for(var/obj/item/organ/I in organs) - I.forceMove(crab) - crab.origin = M - if(crab.origin) - crab.origin.active = 1 - crab.origin.transfer_to(crab) - to_chat(crab, "I burst out of the remains of my former body in a shower of gore!") diff --git a/code/modules/antagonists/changeling/powers/hivemind.dm b/code/modules/antagonists/changeling/powers/hivemind.dm deleted file mode 100644 index 53bee8ca0b..0000000000 --- a/code/modules/antagonists/changeling/powers/hivemind.dm +++ /dev/null @@ -1,117 +0,0 @@ -//HIVEMIND COMMUNICATION (:g) -/datum/action/changeling/hivemind_comms - name = "Hivemind Communication" - desc = "" - helptext = "We will be able to talk with other changelings with :g. Exchanged DNA do not count towards absorb objectives." - needs_button = FALSE - dna_cost = 0 - chemical_cost = -1 - -/datum/action/changeling/hivemind_comms/on_purchase(mob/user, is_respec) - ..() - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - changeling.changeling_speak = 1 - to_chat(user, "Use say \"[MODE_TOKEN_CHANGELING] message\" to communicate with the other changelings.") - var/datum/action/changeling/hivemind_upload/S1 = new - if(!changeling.has_sting(S1)) - S1.Grant(user) - changeling.purchasedpowers+=S1 - var/datum/action/changeling/hivemind_download/S2 = new - if(!changeling.has_sting(S2)) - S2.Grant(user) - changeling.purchasedpowers+=S2 - -/datum/action/changeling/hivemind_comms/Remove(mob/user) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling.changeling_speak) - changeling.changeling_speak = FALSE - for(var/p in changeling.purchasedpowers) - var/datum/action/changeling/otherpower = p - if(istype(otherpower, /datum/action/changeling/hivemind_upload) || istype(otherpower, /datum/action/changeling/hivemind_download)) - changeling.purchasedpowers -= otherpower - otherpower.Remove(changeling.owner.current) - ..() - - -// HIVE MIND UPLOAD/DOWNLOAD DNA -GLOBAL_LIST_EMPTY(hivemind_bank) - -/datum/action/changeling/hivemind_upload - name = "Hive Channel DNA" - desc = "" - button_icon_state = "hivemind_channel" - chemical_cost = 10 - dna_cost = -1 - -/datum/action/changeling/hivemind_upload/sting_action(mob/living/user) - if (HAS_TRAIT(user, CHANGELING_HIVEMIND_MUTE)) - to_chat(user, "The poison in the air hinders our ability to interact with the hivemind.") - return - ..() - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - var/list/names = list() - for(var/datum/changelingprofile/prof in changeling.stored_profiles) - if(!(prof in GLOB.hivemind_bank)) - names += prof.name - - if(names.len <= 0) - to_chat(user, "The airwaves already have all of our DNA!") - return - - var/chosen_name = input("Select a DNA to channel: ", "Channel DNA", null) as null|anything in sortList(names) - if(!chosen_name) - return - - var/datum/changelingprofile/chosen_dna = changeling.get_dna(chosen_name) - if(!chosen_dna) - return - - var/datum/changelingprofile/uploaded_dna = new chosen_dna.type - chosen_dna.copy_profile(uploaded_dna) - GLOB.hivemind_bank += uploaded_dna - to_chat(user, "We channel the DNA of [chosen_name] to the air.") - return TRUE - -/datum/action/changeling/hivemind_download - name = "Hive Absorb DNA" - desc = "" - button_icon_state = "hive_absorb" - chemical_cost = 10 - dna_cost = -1 - -/datum/action/changeling/hivemind_download/can_sting(mob/living/carbon/user) - if(!..()) - return - if (HAS_TRAIT(user, CHANGELING_HIVEMIND_MUTE)) - to_chat(user, "The poison in the air hinders our ability to interact with the hivemind.") - return - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - var/datum/changelingprofile/first_prof = changeling.stored_profiles[1] - if(first_prof.name == user.real_name)//If our current DNA is the stalest, we gotta ditch it. - to_chat(user, "We have reached our capacity to store genetic information! We must transform before absorbing more.") - return - return 1 - -/datum/action/changeling/hivemind_download/sting_action(mob/user) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - var/list/names = list() - for(var/datum/changelingprofile/prof in GLOB.hivemind_bank) - if(!(prof in changeling.stored_profiles)) - names[prof.name] = prof - - if(names.len <= 0) - to_chat(user, "There's no new DNA to absorb from the air!") - return - - var/S = input("Select a DNA absorb from the air: ", "Absorb DNA", null) as null|anything in sortList(names) - if(!S) - return - var/datum/changelingprofile/chosen_prof = names[S] - if(!chosen_prof) - return - ..() - var/datum/changelingprofile/downloaded_prof = new chosen_prof.type - chosen_prof.copy_profile(downloaded_prof) - changeling.add_profile(downloaded_prof) - to_chat(user, "We absorb the DNA of [S] from the air.") - return TRUE diff --git a/code/modules/antagonists/changeling/powers/humanform.dm b/code/modules/antagonists/changeling/powers/humanform.dm deleted file mode 100644 index ee2c86b194..0000000000 --- a/code/modules/antagonists/changeling/powers/humanform.dm +++ /dev/null @@ -1,34 +0,0 @@ -/datum/action/changeling/humanform - name = "Human Form" - desc = "" - button_icon_state = "human_form" - chemical_cost = 5 - req_dna = 1 - -//Transform into a human. -/datum/action/changeling/humanform/sting_action(mob/living/carbon/user) - if(user.movement_type & VENTCRAWLING) - to_chat(user, "We must exit the pipes before we can transform back!") - return FALSE - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - var/list/names = list() - for(var/datum/changelingprofile/prof in changeling.stored_profiles) - names += "[prof.name]" - - var/chosen_name = input("Select the target DNA: ", "Target DNA", null) as null|anything in sortList(names) - if(!chosen_name) - return - - var/datum/changelingprofile/chosen_prof = changeling.get_dna(chosen_name) - if(!chosen_prof) - return - if(!user || user.notransform) - return FALSE - to_chat(user, "We transform our appearance.") - ..() - changeling.purchasedpowers -= src - - var/newmob = user.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSTUNS | TR_KEEPREAGENTS | TR_KEEPSE) - - changeling_transform(newmob, chosen_prof) - return TRUE diff --git a/code/modules/antagonists/changeling/powers/lesserform.dm b/code/modules/antagonists/changeling/powers/lesserform.dm deleted file mode 100644 index e152e885f1..0000000000 --- a/code/modules/antagonists/changeling/powers/lesserform.dm +++ /dev/null @@ -1,17 +0,0 @@ -/datum/action/changeling/lesserform - name = "Lesser Form" - desc = "" - helptext = "The transformation greatly reduces our size, allowing us to slip out of cuffs and climb through vents." - button_icon_state = "lesser_form" - chemical_cost = 5 - dna_cost = 1 - req_human = 1 - -//Transform into a monkey. -/datum/action/changeling/lesserform/sting_action(mob/living/carbon/human/user) - if(!user || user.notransform) - return FALSE - to_chat(user, "Our genes cry out!") - ..() - user.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSTUNS | TR_KEEPREAGENTS | TR_KEEPSE) - return TRUE diff --git a/code/modules/antagonists/changeling/powers/linglink.dm b/code/modules/antagonists/changeling/powers/linglink.dm deleted file mode 100644 index c8d43c4b5f..0000000000 --- a/code/modules/antagonists/changeling/powers/linglink.dm +++ /dev/null @@ -1,72 +0,0 @@ -/datum/action/changeling/linglink - name = "Hivemind Link" - desc = "" - helptext = "If we find a human mad enough to support our cause, this can be a helpful tool to stay in touch." - button_icon_state = "hivemind_link" - chemical_cost = 0 - dna_cost = 0 - req_human = 1 - -/datum/action/changeling/linglink/can_sting(mob/living/carbon/user) - if(!..()) - return - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling.islinking) - to_chat(user, "We have already formed a link with the victim!") - return - if(!user.pulling) - to_chat(user, "We must be tightly grabbing a creature to link with them!") - return - if(!iscarbon(user.pulling)) - to_chat(user, "We cannot link with this creature!") - return - var/mob/living/carbon/target = user.pulling - - if(!target.mind) - to_chat(user, "The victim has no mind to link to!") - return - if(target.stat == DEAD) - to_chat(user, "The victim is dead, you cannot link to a dead mind!") - return - if(target.mind.has_antag_datum(/datum/antagonist/changeling)) - to_chat(user, "The victim is already a part of the hivemind!") - return - if(user.grab_state <= GRAB_AGGRESSIVE) - to_chat(user, "We must have a tighter grip to link with this creature!") - return - return changeling.can_absorb_dna(target) - -/datum/action/changeling/linglink/sting_action(mob/user) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - var/mob/living/carbon/human/target = user.pulling - changeling.islinking = 1 - for(var/i in 1 to 3) - switch(i) - if(1) - to_chat(user, "This creature is compatible. We must hold still...") - if(2) - to_chat(user, "We stealthily stab [target] with a minor proboscis...") - to_chat(target, "I experience a stabbing sensation and your ears begin to ring...") - if(3) - to_chat(user, "We mold the [target]'s mind like clay, granting [target.p_them()] the ability to speak in the hivemind!") - to_chat(target, "A migraine throbs behind your eyes, you hear myself screaming - but your mouth has not opened!") - for(var/mi in GLOB.mob_list) - var/mob/M = mi - if(M.lingcheck() == LINGHIVE_LING) - to_chat(M, "We can sense a foreign presence in the hivemind...") - target.mind.linglink = 1 - target.say("[MODE_TOKEN_CHANGELING] AAAAARRRRGGGGGHHHHH!!") - to_chat(target, "I can now communicate in the changeling hivemind, say \"[MODE_TOKEN_CHANGELING] message\" to communicate!") - target.reagents.add_reagent(/datum/reagent/medicine/salbutamol, 40) // So they don't choke to death while you interrogate them - sleep(1800) - SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("[name]", "[i]")) - if(!do_mob(user, target, 20)) - to_chat(user, "Our link with [target] has ended!") - changeling.islinking = 0 - target.mind.linglink = 0 - return - - changeling.islinking = 0 - target.mind.linglink = 0 - to_chat(user, "I cannot sustain the connection any longer, your victim fades from the hivemind!") - to_chat(target, "The link cannot be sustained any longer, your connection to the hivemind has faded!") diff --git a/code/modules/antagonists/changeling/powers/mimic_voice.dm b/code/modules/antagonists/changeling/powers/mimic_voice.dm deleted file mode 100644 index d1bf618bda..0000000000 --- a/code/modules/antagonists/changeling/powers/mimic_voice.dm +++ /dev/null @@ -1,27 +0,0 @@ -/datum/action/changeling/mimicvoice - name = "Mimic Voice" - desc = "" - button_icon_state = "mimic_voice" - helptext = "Will turn your voice into the name that you enter. We must constantly expend chemicals to maintain our form like this." - chemical_cost = 0//constant chemical drain hardcoded - dna_cost = 1 - req_human = 1 - -// Fake Voice -/datum/action/changeling/mimicvoice/sting_action(mob/user) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling.mimicing) - changeling.mimicing = "" - changeling.chem_recharge_slowdown -= 0.5 - to_chat(user, "We return our vocal glands to their original position.") - return - - var/mimic_voice = sanitize_name(stripped_input(user, "Enter a name to mimic.", "Mimic Voice", null, MAX_NAME_LEN)) - if(!mimic_voice) - return - ..() - changeling.mimicing = mimic_voice - changeling.chem_recharge_slowdown += 0.5 - to_chat(user, "We shape our glands to take the voice of [mimic_voice], this will slow down regenerating chemicals while active.") - to_chat(user, "Use this power again to return to our original voice and return chemical production to normal levels.") - return TRUE diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm deleted file mode 100644 index f32789ba4d..0000000000 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ /dev/null @@ -1,550 +0,0 @@ -/* - Changeling Mutations! ~By Miauw (ALL OF IT :V) - Contains: - Arm Blade - Space Suit - Shield - Armor - Tentacles -*/ - - -//Parent to shields and blades because muh copypasted code. -/datum/action/changeling/weapon - name = "Organic Weapon" - desc = "" - helptext = "Yell at Miauw and/or Perakp" - chemical_cost = 1000 - dna_cost = -1 - - var/silent = FALSE - var/weapon_type - var/weapon_name_simple - -/datum/action/changeling/weapon/try_to_sting(mob/user, mob/target) - for(var/obj/item/I in user.held_items) - if(check_weapon(user, I)) - return - ..(user, target) - -/datum/action/changeling/weapon/proc/check_weapon(mob/user, obj/item/hand_item) - if(istype(hand_item, weapon_type)) - user.temporarilyRemoveItemFromInventory(hand_item, TRUE) //DROPDEL will delete the item - if(!silent) - playsound(user, 'sound/blank.ogg', 30, TRUE) - user.visible_message("With a sickening crunch, [user] reforms [user.p_their()] [weapon_name_simple] into an arm!", "We assimilate the [weapon_name_simple] back into our body.", "[held] is stuck to my hand, you cannot grow a [weapon_name_simple] over it!") - return - ..() - var/limb_regen = 0 - if(user.active_hand_index % 2 == 0) //we regen the arm before changing it into the weapon - limb_regen = user.regenerate_limb(BODY_ZONE_R_ARM, 1) - else - limb_regen = user.regenerate_limb(BODY_ZONE_L_ARM, 1) - if(limb_regen) - user.visible_message("[user]'s missing arm reforms, making a loud, grotesque sound!", "My arm regrows, making a loud, crunchy sound and giving you great pain!", "I hear organic matter ripping and tearing!") - user.emote("scream") - var/obj/item/W = new weapon_type(user, silent) - user.put_in_hands(W) - if(!silent) - playsound(user, 'sound/blank.ogg', 30, TRUE) - return W - -/datum/action/changeling/weapon/Remove(mob/user) - for(var/obj/item/I in user.held_items) - check_weapon(user, I) - ..() - - -//Parent to space suits and armor. -/datum/action/changeling/suit - name = "Organic Suit" - desc = "" - helptext = "Yell at Miauw and/or Perakp" - chemical_cost = 1000 - dna_cost = -1 - - var/helmet_type = /obj/item - var/suit_type = /obj/item - var/suit_name_simple = " " - var/helmet_name_simple = " " - var/recharge_slowdown = 0 - var/blood_on_castoff = 0 - -/datum/action/changeling/suit/try_to_sting(mob/user, mob/target) - if(check_suit(user)) - return - var/mob/living/carbon/human/H = user - ..(H, target) - -//checks if we already have an organic suit and casts it off. -/datum/action/changeling/suit/proc/check_suit(mob/user) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(!ishuman(user) || !changeling) - return 1 - var/mob/living/carbon/human/H = user - if(istype(H.wear_armor, suit_type) || istype(H.head, helmet_type)) - H.visible_message("[H] casts off [H.p_their()] [suit_name_simple]!", "We cast off our [suit_name_simple].", "I hear the organic matter ripping and tearing!") - H.temporarilyRemoveItemFromInventory(H.head, TRUE) //The qdel on dropped() takes care of it - H.temporarilyRemoveItemFromInventory(H.wear_armor, TRUE) - H.update_inv_wear_suit() - H.update_inv_head() - H.update_hair() - - if(blood_on_castoff) - H.add_splatter_floor() - playsound(H.loc, 'sound/blank.ogg', 50, TRUE) //So real sounds - - changeling.chem_recharge_slowdown -= recharge_slowdown - return 1 - -/datum/action/changeling/suit/Remove(mob/user) - if(!ishuman(user)) - return - var/mob/living/carbon/human/H = user - check_suit(H) - ..() - -/datum/action/changeling/suit/sting_action(mob/living/carbon/human/user) - if(!user.canUnEquip(user.wear_armor)) - to_chat(user, "\the [user.wear_armor] is stuck to my body, you cannot grow a [suit_name_simple] over it!") - return - if(!user.canUnEquip(user.head)) - to_chat(user, "\the [user.head] is stuck on my head, you cannot grow a [helmet_name_simple] over it!") - return - ..() - user.dropItemToGround(user.head) - user.dropItemToGround(user.wear_armor) - - user.equip_to_slot_if_possible(new suit_type(user), SLOT_ARMOR, 1, 1, 1) - user.equip_to_slot_if_possible(new helmet_type(user), SLOT_HEAD, 1, 1, 1) - - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - changeling.chem_recharge_slowdown += recharge_slowdown - return TRUE - - -//fancy headers yo -/***************************************\ -|***************ARM BLADE***************| -\***************************************/ -/datum/action/changeling/weapon/arm_blade - name = "Arm Blade" - desc = "" - helptext = "We may retract our armblade in the same manner as we form it. Cannot be used while in lesser form." - button_icon_state = "armblade" - chemical_cost = 20 - dna_cost = 2 - req_human = 1 - weapon_type = /obj/item/melee/arm_blade - weapon_name_simple = "blade" - -/obj/item/melee/arm_blade - name = "arm blade" - desc = "" - icon = 'icons/obj/changeling_items.dmi' - icon_state = "arm_blade" - item_state = "arm_blade" - lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi' - righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi' - item_flags = NEEDS_PERMIT | ABSTRACT | DROPDEL - w_class = WEIGHT_CLASS_HUGE - force = 25 - throwforce = 0 //Just to be on the safe side - throw_range = 0 - throw_speed = 0 - hitsound = 'sound/blank.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - sharpness = IS_SHARP - var/can_drop = FALSE - var/fake = FALSE - -/obj/item/melee/arm_blade/Initialize(mapload,silent,synthetic) - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT) - if(ismob(loc) && !silent) - loc.visible_message("A grotesque blade forms around [loc.name]\'s arm!", "Our arm twists and mutates, transforming it into a deadly blade.", "I hear organic matter ripping and tearing!") - if(synthetic) - can_drop = TRUE - AddComponent(/datum/component/butchering, 60, 80) - -/obj/item/melee/arm_blade/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity) - return - if(istype(target, /obj/structure/table)) - var/obj/structure/table/T = target - T.deconstruct(FALSE) - - else if(istype(target, /obj/machinery/computer)) - var/obj/machinery/computer/C = target - C.attack_alien(user) //muh copypasta - - else if(istype(target, /obj/machinery/door/airlock)) - var/obj/machinery/door/airlock/A = target - - if((!A.requiresID() || A.allowed(user)) && A.hasPower()) //This is to prevent stupid shit like hitting a door with an arm blade, the door opening because you have acces and still getting a "the airlocks motors resist our efforts to force it" message, power requirement is so this doesn't stop unpowered doors from being pried open if you have access - return - if(A.locked) - to_chat(user, "The airlock's bolts prevent it from being forced!") - return - - if(A.hasPower()) - user.visible_message("[user] jams [src] into the airlock and starts prying it open!", "We start forcing the [A] open.", \ - "I hear a metal screeching sound.") - playsound(A, 'sound/blank.ogg', 100, TRUE) - if(!do_after(user, 100, target = A)) - return - //user.say("Heeeeeeeeeerrre's Johnny!") - user.visible_message("[user] forces the airlock to open with [user.p_their()] [src]!", "We force the [A] to open.", \ - "I hear a metal screeching sound.") - A.open(2) - -/obj/item/melee/arm_blade/dropped(mob/user) - ..() - if(can_drop) - new /obj/item/melee/synthetic_arm_blade(get_turf(user)) - -/***************************************\ -|***********COMBAT TENTACLES*************| -\***************************************/ - -/datum/action/changeling/weapon/tentacle - name = "Tentacle" - desc = "" - helptext = "We can use it once to retrieve a distant item. If used on living creatures, the effect depends on the intent: \ - Help will simply drag them closer, Disarm will grab whatever they're holding instead of them, Grab will put the victim in our hold after catching it, \ - and Harm will pull it in and stab it if we're also holding a sharp weapon. Cannot be used while in lesser form." - button_icon_state = "tentacle" - chemical_cost = 10 - dna_cost = 2 - req_human = 1 - weapon_type = /obj/item/gun/magic/tentacle - weapon_name_simple = "tentacle" - silent = TRUE - -/obj/item/gun/magic/tentacle - name = "tentacle" - desc = "" - icon = 'icons/obj/changeling_items.dmi' - icon_state = "tentacle" - item_state = "tentacle" - lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi' - righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi' - item_flags = NEEDS_PERMIT | ABSTRACT | DROPDEL | NOBLUDGEON - flags_1 = NONE - w_class = WEIGHT_CLASS_HUGE - slot_flags = NONE - ammo_type = /obj/item/ammo_casing/magic/tentacle - fire_sound = 'sound/blank.ogg' - force = 0 - max_charges = 1 - fire_delay = 1 - throwforce = 0 //Just to be on the safe side - throw_range = 0 - throw_speed = 0 - -/obj/item/gun/magic/tentacle/Initialize(mapload, silent) - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT) - if(ismob(loc)) - if(!silent) - loc.visible_message("[loc.name]\'s arm starts stretching inhumanly!", "Our arm twists and mutates, transforming it into a tentacle.", "I hear organic matter ripping and tearing!") - else - to_chat(loc, "I prepare to extend a tentacle.") - - -/obj/item/gun/magic/tentacle/shoot_with_empty_chamber(mob/living/user as mob|obj) - to_chat(user, "The [name] is not ready yet.") - -/obj/item/gun/magic/tentacle/process_fire() - . = ..() - if(charges == 0) - qdel(src) - -/obj/item/gun/magic/tentacle/suicide_act(mob/user) - user.visible_message("[user] coils [src] tightly around [user.p_their()] neck! It looks like [user.p_theyre()] trying to commit suicide!") - return (OXYLOSS) - - -/obj/item/ammo_casing/magic/tentacle - name = "tentacle" - desc = "" - projectile_type = /obj/projectile/tentacle - caliber = "tentacle" - icon_state = "tentacle_end" - firing_effect_type = null - var/obj/item/gun/magic/tentacle/gun //the item that shot it - -/obj/item/ammo_casing/magic/tentacle/Initialize() - gun = loc - . = ..() - -/obj/item/ammo_casing/magic/tentacle/Destroy() - gun = null - return ..() - -/obj/projectile/tentacle - name = "tentacle" - icon_state = "tentacle_end" - pass_flags = PASSTABLE - damage = 0 - damage_type = BRUTE - range = 8 - hitsound = 'sound/blank.ogg' - var/chain - var/obj/item/ammo_casing/magic/tentacle/source //the item that shot it - -/obj/projectile/tentacle/Initialize() - source = loc - . = ..() - -/obj/projectile/tentacle/fire(setAngle) - if(firer) - chain = firer.Beam(src, icon_state = "tentacle", time = INFINITY, maxdistance = INFINITY, beam_sleep_time = 1) - ..() - -/obj/projectile/tentacle/proc/reset_throw(mob/living/carbon/human/H) - if(H.in_throw_mode) - H.throw_mode_off() //Don't annoy the changeling if he doesn't catch the item - -/obj/projectile/tentacle/proc/tentacle_grab(mob/living/carbon/human/H, mob/living/carbon/C) - if(H.Adjacent(C)) - if(H.get_active_held_item() && !H.get_inactive_held_item()) - H.swap_hand() - if(H.get_active_held_item()) - return - C.grabbedby(H) - C.grippedby(H, instant = TRUE) //instant aggro grab - -/obj/projectile/tentacle/proc/tentacle_stab(mob/living/carbon/human/H, mob/living/carbon/C) - if(H.Adjacent(C)) - for(var/obj/item/I in H.held_items) - if(I.get_sharpness()) - C.visible_message("[H] impales [C] with [H.p_their()] [I.name]!", "[H] impales you with [H.p_their()] [I.name]!") - C.apply_damage(I.force, BRUTE, BODY_ZONE_CHEST) - H.do_item_attack_animation(C, used_item = I) - H.add_mob_blood(C) - playsound(get_turf(H),I.hitsound,75,TRUE) - return - -/obj/projectile/tentacle/on_hit(atom/target, blocked = FALSE) - var/mob/living/carbon/human/H = firer - if(blocked >= 100) - return BULLET_ACT_BLOCK - if(isitem(target)) - var/obj/item/I = target - if(!I.anchored) - to_chat(firer, "I pull [I] towards myself.") - H.throw_mode_on() - I.throw_at(H, 10, 2) - . = BULLET_ACT_HIT - - else if(isliving(target)) - var/mob/living/L = target - if(!L.anchored && !L.throwing)//avoid double hits - if(iscarbon(L)) - var/mob/living/carbon/C = L - var/firer_intent = INTENT_HARM - var/mob/M = firer - if(istype(M)) - firer_intent = M.used_intent - switch(firer_intent) - if(INTENT_HELP) - C.visible_message("[L] is pulled by [H]'s tentacle!","A tentacle grabs you and pulls you towards [H]!") - C.throw_at(get_step_towards(H,C), 8, 2) - return BULLET_ACT_HIT - - if(INTENT_DISARM) - var/obj/item/I = C.get_active_held_item() - if(I) - if(C.dropItemToGround(I)) - C.visible_message("[I] is yanked off [C]'s hand by [src]!","A tentacle pulls [I] away from you!") - on_hit(I) //grab the item as if you had hit it directly with the tentacle - return BULLET_ACT_HIT - else - to_chat(firer, "I can't seem to pry [I] off [C]'s hands!") - return BULLET_ACT_BLOCK - else - to_chat(firer, "[C] has nothing in hand to disarm!") - return BULLET_ACT_HIT - - if(INTENT_GRAB) - C.visible_message("[L] is grabbed by [H]'s tentacle!","A tentacle grabs you and pulls you towards [H]!") - C.throw_at(get_step_towards(H,C), 8, 2, H, TRUE, TRUE, callback=CALLBACK(src, PROC_REF(tentacle_grab), H, C)) - return BULLET_ACT_HIT - - if(INTENT_HARM) - C.visible_message("[L] is thrown towards [H] by a tentacle!","A tentacle grabs you and throws you towards [H]!") - C.throw_at(get_step_towards(H,C), 8, 2, H, TRUE, TRUE, callback=CALLBACK(src, PROC_REF(tentacle_stab), H, C)) - return BULLET_ACT_HIT - else - L.visible_message("[L] is pulled by [H]'s tentacle!","A tentacle grabs you and pulls you towards [H]!") - L.throw_at(get_step_towards(H,L), 8, 2) - . = BULLET_ACT_HIT - -/obj/projectile/tentacle/Destroy() - qdel(chain) - source = null - return ..() - - -/***************************************\ -|****************SHIELD*****************| -\***************************************/ -/datum/action/changeling/weapon/shield - name = "Organic Shield" - desc = "" - helptext = "Organic tissue cannot resist damage forever; the shield will break after it is hit too much. The more genomes we absorb, the stronger it is. Cannot be used while in lesser form." - button_icon_state = "organic_shield" - chemical_cost = 20 - dna_cost = 1 - req_human = 1 - - weapon_type = /obj/item/shield/changeling - weapon_name_simple = "shield" - -/datum/action/changeling/weapon/shield/sting_action(mob/user) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) //So we can read the absorbedcount. - if(!changeling) - return - - var/obj/item/shield/changeling/S = ..(user) - S.remaining_uses = round(changeling.absorbedcount * 3) - return TRUE - -/obj/item/shield/changeling - name = "shield-like mass" - desc = "" - item_flags = ABSTRACT | DROPDEL - icon = 'icons/obj/changeling_items.dmi' - icon_state = "ling_shield" - lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi' - righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi' - block_chance = 50 - - var/remaining_uses //Set by the changeling ability. - -/obj/item/shield/changeling/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT) - if(ismob(loc)) - loc.visible_message("The end of [loc.name]\'s hand inflates rapidly, forming a huge shield-like mass!", "We inflate our hand into a strong shield.", "I hear organic matter ripping and tearing!") - -/obj/item/shield/changeling/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(remaining_uses < 1) - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - H.visible_message("With a sickening crunch, [H] reforms [H.p_their()] shield into an arm!", "We assimilate our shield into our body", "[loc.name]\'s flesh rapidly inflates, forming a bloated mass around [loc.p_their()] body!", "We inflate our flesh, creating a spaceproof suit!", "I hear organic matter ripping and tearing!") - START_PROCESSING(SSobj, src) - -/obj/item/clothing/suit/space/changeling/process() - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - H.reagents.add_reagent(/datum/reagent/medicine/salbutamol, REAGENTS_METABOLISM) - -/obj/item/clothing/head/helmet/space/changeling - name = "flesh mass" - icon_state = "lingspacehelmet" - desc = "" - item_flags = DROPDEL - clothing_flags = STOPSPRESSUREDAMAGE - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH - -/obj/item/clothing/head/helmet/space/changeling/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT) - -/***************************************\ -|*****************ARMOR*****************| -\***************************************/ -/datum/action/changeling/suit/armor - name = "Chitinous Armor" - desc = "" - helptext = "Upkeep of the armor requires a low expenditure of chemicals. The armor is strong against brute force, but does not provide much protection from lasers. Cannot be used in lesser form." - button_icon_state = "chitinous_armor" - chemical_cost = 20 - dna_cost = 1 - req_human = 1 - recharge_slowdown = 0.25 - - suit_type = /obj/item/clothing/suit/armor/changeling - helmet_type = /obj/item/clothing/head/helmet/changeling - suit_name_simple = "armor" - helmet_name_simple = "helmet" - -/obj/item/clothing/suit/armor/changeling - name = "chitinous mass" - desc = "" - icon_state = "lingarmor" - item_flags = DROPDEL - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 20, "bomb" = 10, "bio" = 4, "rad" = 0, "fire" = 90, "acid" = 90) - flags_inv = HIDEJUMPSUIT - cold_protection = 0 - heat_protection = 0 - -/obj/item/clothing/suit/armor/changeling/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT) - if(ismob(loc)) - loc.visible_message("[loc.name]\'s flesh turns black, quickly transforming into a hard, chitinous mass!", "We harden our flesh, creating a suit of armor!", "I hear organic matter ripping and tearing!") - -/obj/item/clothing/head/helmet/changeling - name = "chitinous mass" - desc = "" - icon_state = "lingarmorhelmet" - item_flags = DROPDEL - armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 20, "bomb" = 10, "bio" = 4, "rad" = 0, "fire" = 90, "acid" = 90) - flags_inv = HIDEEARS|HIDEHAIR|HIDEEYES|HIDEFACIALHAIR|HIDEFACE - -/obj/item/clothing/head/helmet/changeling/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT) diff --git a/code/modules/antagonists/changeling/powers/panacea.dm b/code/modules/antagonists/changeling/powers/panacea.dm deleted file mode 100644 index 1f9e789646..0000000000 --- a/code/modules/antagonists/changeling/powers/panacea.dm +++ /dev/null @@ -1,41 +0,0 @@ -/datum/action/changeling/panacea - name = "Anatomic Panacea" - desc = "" - helptext = "Can be used while unconscious." - button_icon_state = "panacea" - chemical_cost = 20 - dna_cost = 1 - req_stat = UNCONSCIOUS - -//Heals the things that the other regenerative abilities don't. -/datum/action/changeling/panacea/sting_action(mob/user) - to_chat(user, "We cleanse impurities from our form.") - ..() - var/list/bad_organs = list( - user.getorgan(/obj/item/organ/body_egg), - user.getorgan(/obj/item/organ/zombie_infection)) - - for(var/o in bad_organs) - var/obj/item/organ/O = o - if(!istype(O)) - continue - - O.Remove(user) - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.vomit(0, toxic = TRUE) - O.forceMove(get_turf(user)) - - user.reagents.add_reagent(/datum/reagent/medicine/mutadone, 10) - user.reagents.add_reagent(/datum/reagent/medicine/pen_acid, 20) - user.reagents.add_reagent(/datum/reagent/medicine/antihol, 10) - user.reagents.add_reagent(/datum/reagent/medicine/mannitol, 25) - - if(isliving(user)) - var/mob/living/L = user - for(var/thing in L.diseases) - var/datum/disease/D = thing - if(D.severity == DISEASE_SEVERITY_POSITIVE) - continue - D.cure() - return TRUE diff --git a/code/modules/antagonists/changeling/powers/pheromone_receptors.dm b/code/modules/antagonists/changeling/powers/pheromone_receptors.dm deleted file mode 100644 index 8576c6abc8..0000000000 --- a/code/modules/antagonists/changeling/powers/pheromone_receptors.dm +++ /dev/null @@ -1,58 +0,0 @@ -#define CHANGELING_PHEROMONE_MIN_DISTANCE 10 //More generous than the agent pinpointer because you don't know who you're looking for. -#define CHANGELING_PHEROMONE_MAX_DISTANCE 25 //They can smell your fear a mile away. Well, 50 meters. -#define CHANGELING_PHEROMONE_PING_TIME 20 //2s update time. - - -/datum/action/changeling/pheromone_receptors - name = "Pheromone Receptors" - desc = "" - helptext = "We will know the general direction of nearby changelings, with closer scents being stronger. Our chemical generation is slowed while this is active." - chemical_cost = 0 //Reduces regain rate while active. - dna_cost = 2 - var/receptors_active = FALSE - -/datum/action/changeling/pheromone_receptors/sting_action(mob/living/carbon/user) - ..() - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(!receptors_active) - to_chat(user, "We search for the scent of any nearby changelings.") - changeling.chem_recharge_slowdown += 0.5 - user.apply_status_effect(/datum/status_effect/agent_pinpointer/changeling) - else - to_chat(user, "We stop searching for now.") - changeling.chem_recharge_slowdown -= 0.5 - user.remove_status_effect(/datum/status_effect/agent_pinpointer/changeling) - - receptors_active = !receptors_active - -//Modified IA pinpointer - Points to the NEAREST changeling, but will only get you within a few tiles of the target. -//You'll still have to rely on intuition and observation to make the identification. Lings can 'hide' in public places. -/datum/status_effect/agent_pinpointer/changeling - alert_type = /atom/movable/screen/alert/status_effect/agent_pinpointer/changeling - minimum_range = CHANGELING_PHEROMONE_MIN_DISTANCE - tick_interval = CHANGELING_PHEROMONE_PING_TIME - range_fuzz_factor = 0 - -/datum/status_effect/agent_pinpointer/changeling/scan_for_target() - var/turf/my_loc = get_turf(owner) - - var/list/mob/living/carbon/changelings = list() - - for(var/mob/living/carbon/C in GLOB.alive_mob_list) - if(C != owner && C.mind) - var/datum/antagonist/changeling/antag_datum = C.mind.has_antag_datum(/datum/antagonist/changeling) - if(istype(antag_datum)) - var/their_loc = get_turf(C) - var/distance = get_dist_euclidian(my_loc, their_loc) - if (distance < CHANGELING_PHEROMONE_MAX_DISTANCE) - changelings[C] = (CHANGELING_PHEROMONE_MAX_DISTANCE ** 2) - (distance ** 2) - - if(changelings.len) - scan_target = pickweight(changelings) //Point at a 'random' changeling, biasing heavily towards closer ones. - else - scan_target = null - - -/atom/movable/screen/alert/status_effect/agent_pinpointer/changeling - name = "Pheromone Scent" - desc = "" diff --git a/code/modules/antagonists/changeling/powers/regenerate.dm b/code/modules/antagonists/changeling/powers/regenerate.dm deleted file mode 100644 index 3df23574ab..0000000000 --- a/code/modules/antagonists/changeling/powers/regenerate.dm +++ /dev/null @@ -1,41 +0,0 @@ -/datum/action/changeling/regenerate - name = "Regenerate" - desc = "" - helptext = "Will alert nearby crew if any external limbs are regenerated. Can be used while unconscious." - button_icon_state = "regenerate" - chemical_cost = 10 - dna_cost = 0 - req_stat = UNCONSCIOUS - -/datum/action/changeling/regenerate/sting_action(mob/living/user) - ..() - to_chat(user, "I feel an itching, both inside and \ - outside as my tissues knit and reknit.") - if(iscarbon(user)) - var/mob/living/carbon/C = user - var/list/missing = C.get_missing_limbs() - if(missing.len) - playsound(user, 'sound/blank.ogg', 50, TRUE) - C.visible_message("[user]'s missing limbs \ - reform, making a loud, grotesque sound!", - "My limbs regrow, making a \ - loud, crunchy sound and giving you great pain!", - "I hear organic matter ripping \ - and tearing!") - C.emote("scream") - C.regenerate_limbs(1) - if(!user.getorganslot(ORGAN_SLOT_BRAIN)) - var/obj/item/organ/brain/B - if(C.has_dna() && C.dna.species.mutant_brain) - B = new C.dna.species.mutant_brain() - else - B = new() - B.organ_flags &= ~ORGAN_VITAL - B.decoy_override = TRUE - B.Insert(C) - C.regenerate_organs() - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.restore_blood() - H.spill_embedded_objects() - return TRUE diff --git a/code/modules/antagonists/changeling/powers/shriek.dm b/code/modules/antagonists/changeling/powers/shriek.dm deleted file mode 100644 index 396f5d029b..0000000000 --- a/code/modules/antagonists/changeling/powers/shriek.dm +++ /dev/null @@ -1,45 +0,0 @@ -/datum/action/changeling/resonant_shriek - name = "Resonant Shriek" - desc = "" - helptext = "Emits a high-frequency sound that confuses and deafens humans, blows out nearby lights and overloads cyborg sensors." - button_icon_state = "resonant_shriek" - chemical_cost = 20 - dna_cost = 1 - req_human = 1 - -//A flashy ability, good for crowd control and sowing chaos. -/datum/action/changeling/resonant_shriek/sting_action(mob/user) - ..() - for(var/mob/living/M in get_hearers_in_view(4, user)) - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(!C.mind || !C.mind.has_antag_datum(/datum/antagonist/changeling)) - C.adjustEarDamage(0, 30) - C.confused += 25 - C.Jitter(50) - else - SEND_SOUND(C, sound('sound/blank.ogg')) - - if(issilicon(M)) - SEND_SOUND(M, sound('sound/blank.ogg')) - M.Paralyze(rand(100,200)) - - for(var/obj/machinery/light/L in range(4, user)) - L.on = 1 - L.break_light_tube() - return TRUE - -/datum/action/changeling/dissonant_shriek - name = "Dissonant Shriek" - desc = "" - button_icon_state = "dissonant_shriek" - chemical_cost = 20 - dna_cost = 1 - -/datum/action/changeling/dissonant_shriek/sting_action(mob/user) - ..() - for(var/obj/machinery/light/L in range(5, usr)) - L.on = 1 - L.break_light_tube() - empulse(get_turf(user), 2, 5, 1) - return TRUE diff --git a/code/modules/antagonists/changeling/powers/spiders.dm b/code/modules/antagonists/changeling/powers/spiders.dm deleted file mode 100644 index 7aa82b76e9..0000000000 --- a/code/modules/antagonists/changeling/powers/spiders.dm +++ /dev/null @@ -1,14 +0,0 @@ -/datum/action/changeling/spiders - name = "Spread Infestation" - desc = "" - helptext = "The spiders are thoughtless creatures, and may attack their creators when fully grown. Requires at least 3 DNA absorptions." - button_icon_state = "spread_infestation" - chemical_cost = 45 - dna_cost = 1 - req_absorbs = 3 - -//Makes some spiderlings. Good for setting traps and causing general trouble. -/datum/action/changeling/spiders/sting_action(mob/user) - ..() - spawn_atom_to_turf(/obj/structure/spider/spiderling/hunter, user, 2, FALSE) - return TRUE diff --git a/code/modules/antagonists/changeling/powers/strained_muscles.dm b/code/modules/antagonists/changeling/powers/strained_muscles.dm deleted file mode 100644 index 55fd6caa4d..0000000000 --- a/code/modules/antagonists/changeling/powers/strained_muscles.dm +++ /dev/null @@ -1,53 +0,0 @@ -//Strained Muscles: Temporary speed boost at the cost of rapid damage -//Limited because of hardsuits and such; ideally, used for a quick getaway - -/datum/action/changeling/strained_muscles - name = "Strained Muscles" - desc = "" - helptext = "The strain will make us tired, and we will rapidly become fatigued. Standard weight restrictions, like hardsuits, still apply. Cannot be used in lesser form." - button_icon_state = "strained_muscles" - chemical_cost = 0 - dna_cost = 1 - req_human = 1 - var/stacks = 0 //Increments every 5 seconds; damage increases over time - active = FALSE //Whether or not you are a hedgehog - -/datum/action/changeling/strained_muscles/sting_action(mob/living/carbon/user) - ..() - active = !active - if(active) - to_chat(user, "Our muscles tense and strengthen.") - else - user.remove_movespeed_modifier(MOVESPEED_ID_CHANGELING_MUSCLES) - to_chat(user, "Our muscles relax.") - if(stacks >= 10) - to_chat(user, "We collapse in exhaustion.") - user.Paralyze(60) - user.emote("breathgasp") - - INVOKE_ASYNC(src, PROC_REF(muscle_loop), user) - - return TRUE - -/datum/action/changeling/strained_muscles/proc/muscle_loop(mob/living/carbon/user) - while(active) - user.add_movespeed_modifier(MOVESPEED_ID_CHANGELING_MUSCLES, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING)) - if(user.stat != CONSCIOUS || user.staminaloss >= 90) - active = !active - to_chat(user, "Our muscles relax without the energy to strengthen them.") - user.Paralyze(40) - user.remove_movespeed_modifier(MOVESPEED_ID_CHANGELING_MUSCLES) - break - - stacks++ - - user.adjustStaminaLoss(stacks * 1.3) //At first the changeling may regenerate stamina fast enough to nullify fatigue, but it will stack - - if(stacks == 11) //Warning message that the stacks are getting too high - to_chat(user, "Our legs are really starting to hurt...") - - sleep(40) - - while(!active && stacks) //Damage stacks decrease fairly rapidly while not in sanic mode - stacks-- - sleep(20) diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm deleted file mode 100644 index 544ed8c59f..0000000000 --- a/code/modules/antagonists/changeling/powers/tiny_prick.dm +++ /dev/null @@ -1,244 +0,0 @@ -/datum/action/changeling/sting//parent path, not meant for users afaik - name = "Tiny Prick" - desc = "" - -/datum/action/changeling/sting/Trigger() - var/mob/user = owner - if(!user || !user.mind) - return - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(!changeling) - return - if(!changeling.chosen_sting) - set_sting(user) - else - unset_sting(user) - return - -/datum/action/changeling/sting/proc/set_sting(mob/user) - to_chat(user, "We prepare our sting. Alt+click or click the middle mouse button on a target to sting them.") - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - changeling.chosen_sting = src - - user.hud_used.lingstingdisplay.icon = icon_icon - user.hud_used.lingstingdisplay.icon_state = button_icon_state - user.hud_used.lingstingdisplay.invisibility = 0 - -/datum/action/changeling/sting/proc/unset_sting(mob/user) - to_chat(user, "We retract our sting, we can't sting anyone for now.") - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - changeling.chosen_sting = null - - user.hud_used.lingstingdisplay.icon_state = null - user.hud_used.lingstingdisplay.invisibility = INVISIBILITY_ABSTRACT - -/mob/living/carbon/proc/unset_sting() - if(mind) - var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling && changeling.chosen_sting) - changeling.chosen_sting.unset_sting(src) - -/datum/action/changeling/sting/can_sting(mob/user, mob/target) - if(!..()) - return - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(!changeling.chosen_sting) - to_chat(user, "We haven't prepared our sting yet!") - if(!iscarbon(target)) - return - if(!isturf(user.loc)) - return - if(!AStar(user, target.loc, /turf/proc/Distance, changeling.sting_range, simulated_only = FALSE)) - return - if(target.mind && target.mind.has_antag_datum(/datum/antagonist/changeling)) - sting_feedback(user, target) - changeling.chem_charges -= chemical_cost - return 1 - -/datum/action/changeling/sting/sting_feedback(mob/user, mob/target) - if(!target) - return - to_chat(user, "We stealthily sting [target.name].") - if(target.mind && target.mind.has_antag_datum(/datum/antagonist/changeling)) - to_chat(target, "I feel a tiny prick.") - return 1 - - -/datum/action/changeling/sting/transformation - name = "Transformation Sting" - desc = "" - helptext = "The victim will transform much like a changeling would. Does not provide a warning to others. Mutations will not be transferred, and monkeys will become human." - button_icon_state = "sting_transform" - chemical_cost = 50 - dna_cost = 3 - var/datum/changelingprofile/selected_dna = null - -/datum/action/changeling/sting/transformation/Trigger() - var/mob/user = usr - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling.chosen_sting) - unset_sting(user) - return - selected_dna = changeling.select_dna("Select the target DNA: ", "Target DNA") - if(!selected_dna) - return - if(NOTRANSSTING in selected_dna.dna.species.species_traits) - to_chat(user, "That DNA is not compatible with changeling retrovirus!") - return - ..() - -/datum/action/changeling/sting/transformation/can_sting(mob/user, mob/living/carbon/target) - if(!..()) - return - if((HAS_TRAIT(target, TRAIT_HUSK)) || !iscarbon(target) || (NOTRANSSTING in target.dna.species.species_traits)) - to_chat(user, "Our sting appears ineffective against its DNA.") - return 0 - return 1 - -/datum/action/changeling/sting/transformation/sting_action(mob/user, mob/target) - log_combat(user, target, "stung", "transformation sting", " new identity is '[selected_dna.dna.real_name]'") - var/datum/dna/NewDNA = selected_dna.dna - if(ismonkey(target)) - to_chat(user, "Our genes cry out as we sting [target.name]!") - - var/mob/living/carbon/C = target - . = TRUE - if(istype(C)) - C.real_name = NewDNA.real_name - NewDNA.transfer_identity(C) - if(ismonkey(C)) - C.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSTUNS | TR_KEEPREAGENTS | TR_DEFAULTMSG) - C.updateappearance(mutcolor_update=1) - - -/datum/action/changeling/sting/false_armblade - name = "False Armblade Sting" - desc = "" - helptext = "The victim will form an armblade much like a changeling would, except the armblade is dull and useless." - button_icon_state = "sting_armblade" - chemical_cost = 20 - dna_cost = 1 - -/obj/item/melee/arm_blade/false - desc = "" - force = 5 //Basically as strong as a punch - fake = TRUE - -/datum/action/changeling/sting/false_armblade/can_sting(mob/user, mob/target) - if(!..()) - return - if(isliving(target)) - var/mob/living/L = target - if((HAS_TRAIT(L, TRAIT_HUSK)) || !L.has_dna()) - to_chat(user, "Our sting appears ineffective against its DNA.") - return 0 - return 1 - -/datum/action/changeling/sting/false_armblade/sting_action(mob/user, mob/target) - log_combat(user, target, "stung", object="false armblade sting") - - var/obj/item/held = target.get_active_held_item() - if(held && !target.dropItemToGround(held)) - to_chat(user, "[held] is stuck to [target.p_their()] hand, you cannot grow a false armblade over it!") - return - ..() - if(ismonkey(target)) - to_chat(user, "Our genes cry out as we sting [target.name]!") - - var/obj/item/melee/arm_blade/false/blade = new(target,1) - target.put_in_hands(blade) - target.visible_message("A grotesque blade forms around [target.name]\'s arm!", "My arm twists and mutates, transforming into a horrific monstrosity!", "I hear organic matter ripping and tearing!") - playsound(target, 'sound/blank.ogg', 30, TRUE) - - addtimer(CALLBACK(src, PROC_REF(remove_fake), target, blade), 600) - return TRUE - -/datum/action/changeling/sting/false_armblade/proc/remove_fake(mob/target, obj/item/melee/arm_blade/false/blade) - playsound(target, 'sound/blank.ogg', 30, TRUE) - target.visible_message("With a sickening crunch, \ - [target] reforms [target.p_their()] [blade.name] into an arm!", - "[blade] reforms back to normal.", - "My eyes burn horrifically!") - target.become_nearsighted(EYE_DAMAGE) - target.blind_eyes(20) - target.blur_eyes(40) - return TRUE - -/datum/action/changeling/sting/LSD - name = "Hallucination Sting" - desc = "" - helptext = "We evolve the ability to sting a target with a powerful hallucinogenic chemical. The target does not notice they have been stung, and the effect occurs after 30 to 60 seconds." - button_icon_state = "sting_lsd" - chemical_cost = 10 - dna_cost = 1 - -/datum/action/changeling/sting/LSD/sting_action(mob/user, mob/living/carbon/target) - log_combat(user, target, "stung", "LSD sting") - addtimer(CALLBACK(src, PROC_REF(hallucination_time), target), rand(300,600)) - return TRUE - -/datum/action/changeling/sting/LSD/proc/hallucination_time(mob/living/carbon/target) - if(target) - target.hallucination = max(90, target.hallucination) - -/datum/action/changeling/sting/cryo - name = "Cryogenic Sting" - desc = "" - helptext = "Does not provide a warning to the victim, though they will likely realize they are suddenly freezing." - button_icon_state = "sting_cryo" - chemical_cost = 15 - dna_cost = 2 - -/datum/action/changeling/sting/cryo/sting_action(mob/user, mob/target) - log_combat(user, target, "stung", "cryo sting") - if(target.reagents) - target.reagents.add_reagent(/datum/reagent/consumable/frostoil, 30) - return TRUE diff --git a/code/modules/antagonists/changeling/powers/transform.dm b/code/modules/antagonists/changeling/powers/transform.dm deleted file mode 100644 index 57cf2908b9..0000000000 --- a/code/modules/antagonists/changeling/powers/transform.dm +++ /dev/null @@ -1,162 +0,0 @@ -/datum/action/changeling/transform - name = "Transform" - desc = "" - button_icon_state = "transform" - chemical_cost = 5 - dna_cost = 0 - req_dna = 1 - req_human = 1 - -/obj/item/clothing/glasses/changeling - name = "flesh" - -/obj/item/clothing/glasses/changeling/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT) - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/clothing/glasses/changeling/attack_hand(mob/user) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) - to_chat(user, "I reabsorb [src] into your body.") - qdel(src) - return - . = ..() - -/obj/item/clothing/under/changeling - name = "flesh" - -/obj/item/clothing/under/changeling/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT) - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/clothing/under/changeling/attack_hand(mob/user) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) - to_chat(user, "I reabsorb [src] into your body.") - qdel(src) - return - . = ..() - -/obj/item/clothing/suit/changeling - name = "flesh" - allowed = list(/obj/item/changeling) - -/obj/item/clothing/suit/changeling/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT) - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/clothing/suit/changeling/attack_hand(mob/user) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) - to_chat(user, "I reabsorb [src] into your body.") - qdel(src) - return - . = ..() - -/obj/item/clothing/head/changeling - name = "flesh" - -/obj/item/clothing/head/changeling/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT) - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/clothing/head/changeling/attack_hand(mob/user) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) - to_chat(user, "I reabsorb [src] into your body.") - qdel(src) - return - . = ..() - -/obj/item/clothing/shoes/changeling - name = "flesh" - -/obj/item/clothing/shoes/changeling/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT) - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/clothing/shoes/changeling/attack_hand(mob/user) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) - to_chat(user, "I reabsorb [src] into your body.") - qdel(src) - return - . = ..() - -/obj/item/clothing/gloves/changeling - name = "flesh" - -/obj/item/clothing/gloves/changeling/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT) - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/clothing/gloves/changeling/attack_hand(mob/user) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) - to_chat(user, "I reabsorb [src] into your body.") - qdel(src) - return - . = ..() - -/obj/item/clothing/mask/changeling - name = "flesh" - -/obj/item/clothing/mask/changeling/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT) - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/clothing/mask/changeling/attack_hand(mob/user) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) - to_chat(user, "I reabsorb [src] into your body.") - qdel(src) - return - . = ..() - -/obj/item/changeling - name = "flesh" - slot_flags = ALL - allowed = list(/obj/item/changeling) - -/obj/item/changeling/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT) - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/changeling/attack_hand(mob/user) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) - to_chat(user, "I reabsorb [src] into your body.") - qdel(src) - return - . = ..() - -//Change our DNA to that of somebody we've absorbed. -/datum/action/changeling/transform/sting_action(mob/living/carbon/human/user) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - var/datum/changelingprofile/chosen_prof = changeling.select_dna("Select the target DNA: ", "Target DNA") - - if(!chosen_prof) - return - ..() - changeling_transform(user, chosen_prof) - return TRUE - -/datum/antagonist/changeling/proc/select_dna(prompt, title) - var/mob/living/carbon/user = owner.current - if(!istype(user)) - return - var/list/names = list("Drop Flesh Disguise") - for(var/datum/changelingprofile/prof in stored_profiles) - names += "[prof.name]" - - var/chosen_name = input(prompt, title, null) as null|anything in sortList(names) - if(!chosen_name) - return - - if(chosen_name == "Drop Flesh Disguise") - for(var/slot in GLOB.slots) - if(istype(user.vars[slot], GLOB.slot2type[slot])) - qdel(user.vars[slot]) - - var/datum/changelingprofile/prof = get_dna(chosen_name) - return prof diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm deleted file mode 100644 index 5c768c7405..0000000000 --- a/code/modules/antagonists/cult/blood_magic.dm +++ /dev/null @@ -1,833 +0,0 @@ -/datum/action/innate/cult/blood_magic //Blood magic handles the creation of blood spells (formerly talismans) - name = "Prepare Blood Magic" - button_icon_state = "carve" - desc = "" - var/list/spells = list() - var/channeling = FALSE - -/datum/action/innate/cult/blood_magic/Grant() - ..() - button.screen_loc = DEFAULT_BLOODSPELLS - button.moved = DEFAULT_BLOODSPELLS - button.ordered = FALSE - -/datum/action/innate/cult/blood_magic/Remove() - for(var/X in spells) - qdel(X) - ..() - -/datum/action/innate/cult/blood_magic/IsAvailable() - if(!iscultist(owner)) - return FALSE - return ..() - -/datum/action/innate/cult/blood_magic/proc/Positioning() - var/list/screen_loc_split = splittext(button.screen_loc,",") - var/list/screen_loc_X = splittext(screen_loc_split[1],":") - var/list/screen_loc_Y = splittext(screen_loc_split[2],":") - var/pix_X = text2num(screen_loc_X[2]) - for(var/datum/action/innate/cult/blood_spell/B in spells) - if(B.button.locked) - var/order = pix_X+spells.Find(B)*31 - B.button.screen_loc = "[screen_loc_X[1]]:[order],[screen_loc_Y[1]]:[screen_loc_Y[2]]" - B.button.moved = B.button.screen_loc - -/datum/action/innate/cult/blood_magic/Activate() - var/rune = FALSE - var/limit = RUNELESS_MAX_BLOODCHARGE - for(var/obj/effect/rune/empower/R in range(1, owner)) - rune = TRUE - break - if(rune) - limit = MAX_BLOODCHARGE - if(spells.len >= limit) - if(rune) - to_chat(owner, "I cannot store more than [MAX_BLOODCHARGE] spells. Pick a spell to remove.") - else - to_chat(owner, "I cannot store more than [RUNELESS_MAX_BLOODCHARGE] spells without an empowering rune! Pick a spell to remove.") - var/nullify_spell = input(owner, "Choose a spell to remove.", "Current Spells") as null|anything in spells - if(nullify_spell) - qdel(nullify_spell) - return - var/entered_spell_name - var/datum/action/innate/cult/blood_spell/BS - var/list/possible_spells = list() - for(var/I in subtypesof(/datum/action/innate/cult/blood_spell)) - var/datum/action/innate/cult/blood_spell/J = I - var/cult_name = initial(J.name) - possible_spells[cult_name] = J - possible_spells += "(REMOVE SPELL)" - entered_spell_name = input(owner, "Pick a blood spell to prepare...", "Spell Choices") as null|anything in possible_spells - if(entered_spell_name == "(REMOVE SPELL)") - var/nullify_spell = input(owner, "Choose a spell to remove.", "Current Spells") as null|anything in spells - if(nullify_spell) - qdel(nullify_spell) - return - BS = possible_spells[entered_spell_name] - if(QDELETED(src) || owner.incapacitated() || !BS || (rune && !(locate(/obj/effect/rune/empower) in range(1, owner))) || (spells.len >= limit)) - return - to_chat(owner,"I begin to carve unnatural symbols into my flesh!") - SEND_SOUND(owner, sound('sound/blank.ogg',0,1,10)) - if(!channeling) - channeling = TRUE - else - to_chat(owner, "I are already invoking blood magic!") - return - if(do_after(owner, 100 - rune*60, target = owner)) - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.bleed(40 - rune*32) - var/datum/action/innate/cult/blood_spell/new_spell = new BS(owner) - new_spell.Grant(owner, src) - spells += new_spell - Positioning() - to_chat(owner, "My wounds glow with power, you have prepared a [new_spell.name] invocation!") - channeling = FALSE - -/datum/action/innate/cult/blood_spell //The next generation of talismans, handles storage/creation of blood magic - name = "Blood Magic" - button_icon_state = "telerune" - desc = "" - var/charges = 1 - var/magic_path = null - var/obj/item/melee/blood_magic/hand_magic - var/datum/action/innate/cult/blood_magic/all_magic - var/base_desc //To allow for updating tooltips - var/invocation - var/health_cost = 0 - -/datum/action/innate/cult/blood_spell/Grant(mob/living/owner, datum/action/innate/cult/blood_magic/BM) - if(health_cost) - desc += "
    Deals [health_cost] damage to my arm per use." - base_desc = desc - desc += "
    Has [charges] use\s remaining." - all_magic = BM - ..() - button.locked = TRUE - button.ordered = FALSE - -/datum/action/innate/cult/blood_spell/Remove() - if(all_magic) - all_magic.spells -= src - if(hand_magic) - qdel(hand_magic) - hand_magic = null - ..() - -/datum/action/innate/cult/blood_spell/IsAvailable() - if(!iscultist(owner) || owner.incapacitated() || !charges) - return FALSE - return ..() - -/datum/action/innate/cult/blood_spell/Activate() - if(magic_path) //If this spell flows from the hand - if(!hand_magic) - hand_magic = new magic_path(owner, src) - if(!owner.put_in_hands(hand_magic)) - qdel(hand_magic) - hand_magic = null - to_chat(owner, "I have no empty hand for invoking blood magic!") - return - to_chat(owner, "My wounds glow as you invoke the [name].") - return - if(hand_magic) - qdel(hand_magic) - hand_magic = null - to_chat(owner, "I snuff out the spell, saving it for later.") - - -//Cult Blood Spells -/datum/action/innate/cult/blood_spell/stun - name = "Stun" - desc = "" - button_icon_state = "hand" - magic_path = "/obj/item/melee/blood_magic/stun" - health_cost = 10 - -/datum/action/innate/cult/blood_spell/teleport - name = "Teleport" - desc = "" - button_icon_state = "tele" - magic_path = "/obj/item/melee/blood_magic/teleport" - health_cost = 7 - -/datum/action/innate/cult/blood_spell/emp - name = "Electromagnetic Pulse" - desc = "" - button_icon_state = "emp" - health_cost = 10 - invocation = "Ta'gh fara'qha fel d'amar det!" - -/datum/action/innate/cult/blood_spell/emp/Activate() - owner.visible_message("[owner]'s hand flashes a bright blue!", \ - "I speak the cursed words, emitting an EMP blast from my hand.") - empulse(owner, 2, 5) - owner.whisper(invocation, language = /datum/language/common) - charges-- - if(charges<=0) - qdel(src) - -/datum/action/innate/cult/blood_spell/shackles - name = "Shadow Shackles" - desc = "" - button_icon_state = "cuff" - charges = 4 - magic_path = "/obj/item/melee/blood_magic/shackles" - -/datum/action/innate/cult/blood_spell/construction - name = "Twisted Construction" - desc = "" - button_icon_state = "transmute" - magic_path = "/obj/item/melee/blood_magic/construction" - health_cost = 12 - -/datum/action/innate/cult/blood_spell/equipment - name = "Summon Equipment" - desc = "" - button_icon_state = "equip" - magic_path = "/obj/item/melee/blood_magic/armor" - -/datum/action/innate/cult/blood_spell/equipment/Activate() - var/choice = alert(owner,"Choose my equipment type",,"Combat Equipment","Ritual Dagger","Cancel") - if(choice == "Ritual Dagger") - var/turf/T = get_turf(owner) - owner.visible_message("[owner]'s hand glows red for a moment.", \ - "Red light begins to shimmer and take form within my hand!") - var/obj/O = new /obj/item/melee/cultblade/dagger(T) - if(owner.put_in_hands(O)) - to_chat(owner, "A ritual dagger appears in my hand!") - else - owner.visible_message("A ritual dagger appears at [owner]'s feet!", \ - "A ritual dagger materializes at my feet.") - SEND_SOUND(owner, sound('sound/blank.ogg',0,1,25)) - charges-- - desc = base_desc - desc += "
    Has [charges] use\s remaining." - if(charges<=0) - qdel(src) - else if(choice == "Combat Equipment") - ..() - -/datum/action/innate/cult/blood_spell/horror - name = "Hallucinations" - desc = "" - button_icon_state = "horror" - var/obj/effect/proc_holder/horror/PH - charges = 4 - -/datum/action/innate/cult/blood_spell/horror/New() - PH = new() - PH.attached_action = src - ..() - -/datum/action/innate/cult/blood_spell/horror/Destroy() - var/obj/effect/proc_holder/horror/destroy = PH - . = ..() - if(destroy && !QDELETED(destroy)) - QDEL_NULL(destroy) - -/datum/action/innate/cult/blood_spell/horror/Activate() - PH.toggle(owner) //the important bit - return TRUE - -/obj/effect/proc_holder/horror - active = FALSE - ranged_mousepointer = 'icons/effects/cult_target.dmi' - var/datum/action/innate/cult/blood_spell/attached_action - -/obj/effect/proc_holder/horror/Destroy() - var/datum/action/innate/cult/blood_spell/AA = attached_action - . = ..() - if(AA && !QDELETED(AA)) - QDEL_NULL(AA) - -/obj/effect/proc_holder/horror/proc/toggle(mob/user) - if(active) - remove_ranged_ability("I dispel the magic...") - else - add_ranged_ability(user, "I prepare to horrify a target...") - -/obj/effect/proc_holder/horror/InterceptClickOn(mob/living/caller, params, atom/target) - if(..()) - return - if(ranged_ability_user.incapacitated() || !iscultist(caller)) - remove_ranged_ability() - return - var/turf/T = get_turf(ranged_ability_user) - if(!isturf(T)) - return FALSE - if(target in view(7, get_turf(ranged_ability_user))) - if(!ishuman(target) || iscultist(target)) - return - var/mob/living/carbon/human/H = target - H.hallucination = max(H.hallucination, 120) - SEND_SOUND(ranged_ability_user, sound('sound/blank.ogg',0,1,50)) - var/image/C = image('icons/effects/cult_effects.dmi',H,"bloodsparkles", ABOVE_MOB_LAYER) - add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/cult, "cult_apoc", C, NONE) - addtimer(CALLBACK(H,TYPE_PROC_REF(/atom, remove_alt_appearance),"cult_apoc",TRUE), 2400, TIMER_OVERRIDE|TIMER_UNIQUE) - to_chat(ranged_ability_user,"[H] has been cursed with living nightmares!") - attached_action.charges-- - attached_action.desc = attached_action.base_desc - attached_action.desc += "
    Has [attached_action.charges] use\s remaining." - attached_action.UpdateButtonIcon() - if(attached_action.charges <= 0) - remove_ranged_ability("I have exhausted the spell's power!") - qdel(src) - -/datum/action/innate/cult/blood_spell/veiling - name = "Conceal Presence" - desc = "" - invocation = "Kla'atu barada nikt'o!" - button_icon_state = "gone" - charges = 10 - var/revealing = FALSE //if it reveals or not - -/datum/action/innate/cult/blood_spell/veiling/Activate() - if(!revealing) - owner.visible_message("Thin grey dust falls from [owner]'s hand!", \ - "I invoke the veiling spell, hiding nearby runes.") - charges-- - SEND_SOUND(owner, sound('sound/blank.ogg',0,1,25)) - owner.whisper(invocation, language = /datum/language/common) - for(var/obj/effect/rune/R in range(5,owner)) - R.conceal() - for(var/obj/structure/destructible/cult/S in range(5,owner)) - S.conceal() - for(var/turf/open/floor/engine/cult/T in range(5,owner)) - T.realappearance.alpha = 0 - for(var/obj/machinery/door/airlock/cult/AL in range(5, owner)) - AL.conceal() - revealing = TRUE - name = "Reveal Runes" - button_icon_state = "back" - else - owner.visible_message("A flash of light shines from [owner]'s hand!", \ - "I invoke the counterspell, revealing nearby runes.") - charges-- - owner.whisper(invocation, language = /datum/language/common) - SEND_SOUND(owner, sound('sound/blank.ogg',0,1,25)) - for(var/obj/effect/rune/R in range(7,owner)) //More range in case you weren't standing in exactly the same spot - R.reveal() - for(var/obj/structure/destructible/cult/S in range(6,owner)) - S.reveal() - for(var/turf/open/floor/engine/cult/T in range(6,owner)) - T.realappearance.alpha = initial(T.realappearance.alpha) - for(var/obj/machinery/door/airlock/cult/AL in range(6, owner)) - AL.reveal() - revealing = FALSE - name = "Conceal Runes" - button_icon_state = "gone" - if(charges<= 0) - qdel(src) - desc = base_desc - desc += "
    Has [charges] use\s remaining." - UpdateButtonIcon() - -/datum/action/innate/cult/blood_spell/manipulation - name = "Blood Rites" - desc = "" - invocation = "Fel'th Dol Ab'orod!" - button_icon_state = "manip" - charges = 5 - magic_path = "/obj/item/melee/blood_magic/manipulator" - - -// The "magic hand" items -/obj/item/melee/blood_magic - name = "\improper magical aura" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - lefthand_file = 'icons/mob/inhands/misc/touchspell_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/touchspell_righthand.dmi' - icon_state = "disintegrate" - item_state = "disintegrate" - item_flags = NEEDS_PERMIT | ABSTRACT | DROPDEL - - w_class = WEIGHT_CLASS_HUGE - throwforce = 0 - throw_range = 0 - throw_speed = 0 - var/invocation - var/uses = 1 - var/health_cost = 0 //The amount of health taken from the user when invoking the spell - var/datum/action/innate/cult/blood_spell/source - -/obj/item/melee/blood_magic/New(loc, spell) - source = spell - uses = source.charges - health_cost = source.health_cost - ..() - -/obj/item/melee/blood_magic/Destroy() - if(!QDELETED(source)) - if(uses <= 0) - source.hand_magic = null - qdel(source) - source = null - else - source.hand_magic = null - source.charges = uses - source.desc = source.base_desc - source.desc += "
    Has [uses] use\s remaining." - source.UpdateButtonIcon() - ..() - -/obj/item/melee/blood_magic/attack_self(mob/living/user) - afterattack(user, user, TRUE) - -/obj/item/melee/blood_magic/attack(mob/living/M, mob/living/carbon/user) - if(!iscarbon(user) || !iscultist(user)) - uses = 0 - qdel(src) - return - log_combat(user, M, "used a cult spell on", source.name, "") - M.lastattacker = user.real_name - M.lastattackerckey = user.ckey - -/obj/item/melee/blood_magic/afterattack(atom/target, mob/living/carbon/user, proximity) - . = ..() - if(invocation) - user.whisper(invocation, language = /datum/language/common) - if(health_cost) - if(user.active_hand_index == 1) - user.apply_damage(health_cost, BRUTE, BODY_ZONE_L_ARM) - else - user.apply_damage(health_cost, BRUTE, BODY_ZONE_R_ARM) - if(uses <= 0) - qdel(src) - else if(source) - source.desc = source.base_desc - source.desc += "
    Has [uses] use\s remaining." - source.UpdateButtonIcon() - -//Stun -/obj/item/melee/blood_magic/stun - name = "Stunning Aura" - desc = "" - color = RUNE_COLOR_RED - invocation = "Fuu ma'jin!" - -/obj/item/melee/blood_magic/stun/afterattack(atom/target, mob/living/carbon/user, proximity) - if(!isliving(target) || !proximity) - return - var/mob/living/L = target - if(iscultist(target)) - return - if(iscultist(user)) - user.visible_message("[user] holds up [user.p_their()] hand, which explodes in a flash of red light!", \ - "I attempt to stun [L] with the spell!") - - user.mob_light(_color = LIGHT_COLOR_BLOOD_MAGIC, _range = 3, _duration = 2) - - var/anti_magic_source = L.anti_magic_check() - if(anti_magic_source) - - L.mob_light(_color = LIGHT_COLOR_HOLY_MAGIC, _range = 2, _duration = 100) - var/mutable_appearance/forbearance = mutable_appearance('icons/effects/genetics.dmi', "servitude", -MUTATIONS_LAYER) - L.add_overlay(forbearance) - addtimer(CALLBACK(L, TYPE_PROC_REF(/atom, cut_overlay), forbearance), 100) - - if(istype(anti_magic_source, /obj/item)) - var/obj/item/ams_object = anti_magic_source - target.visible_message("[L] starts to glow in a halo of light!", \ - "My [ams_object.name] begins to glow, emitting a blanket of holy light which surrounds you and protects you from the flash of light!") - else - target.visible_message("[L] starts to glow in a halo of light!", \ - "A feeling of warmth washes over you, rays of holy light surround my body and protect you from the flash of light!") - else - to_chat(user, "In a brilliant flash of red, [L] falls to the ground!") - L.Paralyze(160) - L.flash_act(1,1) - if(issilicon(target)) - var/mob/living/silicon/S = L - S.emp_act(EMP_HEAVY) - else if(iscarbon(target)) - var/mob/living/carbon/C = L - C.silent += 6 - C.stuttering += 15 - C.cultslurring += 15 - C.Jitter(15) - uses-- - ..() - -//Teleportation -/obj/item/melee/blood_magic/teleport - name = "Teleporting Aura" - color = RUNE_COLOR_TELEPORT - desc = "" - invocation = "Sas'so c'arta forbici!" - -/obj/item/melee/blood_magic/teleport/afterattack(atom/target, mob/living/carbon/user, proximity) - if(!iscultist(target) || !proximity) - to_chat(user, "I can only teleport adjacent cultists with this spell!") - return - if(iscultist(user)) - var/list/potential_runes = list() - var/list/teleportnames = list() - for(var/R in GLOB.teleport_runes) - var/obj/effect/rune/teleport/T = R - potential_runes[avoid_assoc_duplicate_keys(T.listkey, teleportnames)] = T - - if(!potential_runes.len) - to_chat(user, "There are no valid runes to teleport to!") - log_game("Teleport talisman failed - no other teleport runes") - return - - var/turf/T = get_turf(src) - if(is_away_level(T.z)) - to_chat(user, "I are not in the right dimension!") - log_game("Teleport spell failed - user in away mission") - return - - var/input_rune_key = input(user, "Choose a rune to teleport to.", "Rune to Teleport to") as null|anything in potential_runes //we know what key they picked - var/obj/effect/rune/teleport/actual_selected_rune = potential_runes[input_rune_key] //what rune does that key correspond to? - if(QDELETED(src) || !user || !user.is_holding(src) || user.incapacitated() || !actual_selected_rune || !proximity) - return - var/turf/dest = get_turf(actual_selected_rune) - if(is_blocked_turf(dest, TRUE)) - to_chat(user, "The target rune is blocked. You cannot teleport there.") - return - uses-- - var/turf/origin = get_turf(user) - var/mob/living/L = target - if(do_teleport(L, dest, channel = TELEPORT_CHANNEL_CULT)) - origin.visible_message("Dust flows from [user]'s hand, and [user.p_they()] disappear[user.p_s()] with a sharp crack!", \ - "I speak the words of the talisman and find myself somewhere else!", "I hear a sharp crack.") - dest.visible_message("There is a boom of outrushing air as something appears above the rune!", null, "I hear a boom.") - ..() - -//Shackles -/obj/item/melee/blood_magic/shackles - name = "Shackling Aura" - desc = "" - invocation = "In'totum Lig'abis!" - color = "#000000" // black - -/obj/item/melee/blood_magic/shackles/afterattack(atom/target, mob/living/carbon/user, proximity) - if(iscultist(user) && iscarbon(target) && proximity) - var/mob/living/carbon/C = target - if(C.get_num_arms(FALSE) >= 2 || C.get_arm_ignore()) - CuffAttack(C, user) - else - user.visible_message("This victim doesn't have enough arms to complete the restraint!") - return - ..() - -/obj/item/melee/blood_magic/shackles/proc/CuffAttack(mob/living/carbon/C, mob/living/user) - if(!C.handcuffed) - playsound(loc, 'sound/blank.ogg', 30, TRUE, -2) - C.visible_message("[user] begins restraining [C] with dark magic!", \ - "[user] begins shaping dark magic shackles around my wrists!") - if(do_mob(user, C, 30)) - if(!C.handcuffed) - C.handcuffed = new /obj/item/restraints/handcuffs/energy/cult/used(C) - C.update_handcuffed() - C.silent += 5 - to_chat(user, "I shackle [C].") - log_combat(user, C, "shackled") - uses-- - else - to_chat(user, "[C] is already bound.") - else - to_chat(user, "I fail to shackle [C].") - else - to_chat(user, "[C] is already bound.") - - -/obj/item/restraints/handcuffs/energy/cult //For the shackling spell - name = "shadow shackles" - desc = "" - trashtype = /obj/item/restraints/handcuffs/energy/used - item_flags = DROPDEL - -/obj/item/restraints/handcuffs/energy/cult/used/dropped(mob/user) - user.visible_message("[user]'s shackles shatter in a discharge of dark magic!", \ - "My [src] shatters in a discharge of dark magic!") - . = ..() - - -//Construction: Converts 50 metal to a construct shell, plasteel to runed metal, airlock to brittle runed airlock, a borg to a construct, or borg shell to a construct shell -/obj/item/melee/blood_magic/construction - name = "Twisting Aura" - desc = "" - invocation = "Ethra p'ni dedol!" - color = "#000000" // black - var/channeling = FALSE - -/obj/item/melee/blood_magic/construction/examine(mob/user) - . = ..() - . += {"A sinister spell used to convert:\n - Plasteel into runed metal\n - [METAL_TO_CONSTRUCT_SHELL_CONVERSION] metal into a construct shell\n - Living cyborgs into constructs after a delay\n - Cyborg shells into construct shells\n - Airlocks into brittle runed airlocks after a delay (harm intent)"} - -/obj/item/melee/blood_magic/construction/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - if(proximity_flag && iscultist(user)) - if(channeling) - to_chat(user, "I are already invoking twisted construction!") - return - var/turf/T = get_turf(target) - if(istype(target, /obj/item/stack/sheet/metal)) - var/obj/item/stack/sheet/candidate = target - if(candidate.use(METAL_TO_CONSTRUCT_SHELL_CONVERSION)) - uses-- - to_chat(user, "A dark cloud emanates from my hand and swirls around the metal, twisting it into a construct shell!") - new /obj/structure/constructshell(T) - SEND_SOUND(user, sound('sound/blank.ogg',0,1,25)) - else - to_chat(user, "I need [METAL_TO_CONSTRUCT_SHELL_CONVERSION] metal to produce a construct shell!") - return - else if(istype(target, /obj/item/stack/sheet/plasteel)) - var/obj/item/stack/sheet/plasteel/candidate = target - var/quantity = candidate.amount - if(candidate.use(quantity)) - uses -- - new /obj/item/stack/sheet/runed_metal(T,quantity) - to_chat(user, "A dark cloud emanates from you hand and swirls around the plasteel, transforming it into runed metal!") - SEND_SOUND(user, sound('sound/blank.ogg',0,1,25)) - else if(istype(target,/mob/living/silicon/robot)) - var/mob/living/silicon/robot/candidate = target - if(candidate.mmi) - channeling = TRUE - user.visible_message("A dark cloud emanates from [user]'s hand and swirls around [candidate]!") - playsound(T, 'sound/blank.ogg', 80, TRUE) - var/prev_color = candidate.color - candidate.color = "black" - if(do_after(user, 90, target = candidate)) - candidate.emp_act(EMP_HEAVY) - var/construct_class = alert(user, "Please choose which type of construct you wish to create.",,"Juggernaut","Wraith","Artificer") - if(QDELETED(candidate)) - channeling = FALSE - return - user.visible_message("The dark cloud receedes from what was formerly [candidate], revealing a\n [construct_class]!") - switch(construct_class) - if("Juggernaut") - makeNewConstruct(/mob/living/simple_animal/hostile/construct/armored, candidate, user, 0, T) - if("Wraith") - makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith, candidate, user, 0, T) - if("Artificer") - makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder, candidate, user, 0, T) - SEND_SOUND(user, sound('sound/blank.ogg',0,1,25)) - uses-- - candidate.mmi = null - qdel(candidate) - channeling = FALSE - else - channeling = FALSE - candidate.color = prev_color - return - else - uses-- - to_chat(user, "A dark cloud emanates from you hand and swirls around [candidate] - twisting it into a construct shell!") - new /obj/structure/constructshell(T) - SEND_SOUND(user, sound('sound/blank.ogg',0,1,25)) - qdel(candidate) - else if(istype(target,/obj/machinery/door/airlock)) - channeling = TRUE - playsound(T, 'sound/blank.ogg', 50, TRUE) - do_sparks(5, TRUE, target) - if(do_after(user, 50, target = user)) - if(QDELETED(target)) - channeling = FALSE - return - target.narsie_act() - uses-- - user.visible_message("Black ribbons suddenly emanate from [user]'s hand and cling to the airlock - twisting and corrupting it!") - SEND_SOUND(user, sound('sound/blank.ogg',0,1,25)) - channeling = FALSE - else - channeling = FALSE - return - else - to_chat(user, "The spell will not work on [target]!") - return - ..() - -//Armor: Gives the target a basic cultist combat loadout -/obj/item/melee/blood_magic/armor - name = "Arming Aura" - desc = "" - color = "#33cc33" // green - -/obj/item/melee/blood_magic/armor/afterattack(atom/target, mob/living/carbon/user, proximity) - if(iscarbon(target) && proximity) - uses-- - var/mob/living/carbon/C = target - C.visible_message("Otherworldly armor suddenly appears on [C]!") - C.equip_to_slot_or_del(new /obj/item/clothing/under/color/black,SLOT_PANTS) - C.equip_to_slot_or_del(new /obj/item/clothing/suit/hooded/cultrobes/alt(user), SLOT_ARMOR) - C.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult/alt(user), SLOT_SHOES) - C.equip_to_slot_or_del(new /obj/item/storage/backpack/cultpack(user), SLOT_BACK) - if(C == user) - qdel(src) //Clears the hands - C.put_in_hands(new /obj/item/melee/cultblade(user)) - C.put_in_hands(new /obj/item/restraints/legcuffs/bola/cult(user)) - ..() - -/obj/item/melee/blood_magic/manipulator - name = "Blood Rite Aura" - desc = "" - color = "#7D1717" - -/obj/item/melee/blood_magic/manipulator/examine(mob/user) - . = ..() - . += "Blood spear, blood bolt barrage, and blood beam cost [BLOOD_SPEAR_COST], [BLOOD_BARRAGE_COST], and [BLOOD_BEAM_COST] charges respectively." - -/obj/item/melee/blood_magic/manipulator/afterattack(atom/target, mob/living/carbon/human/user, proximity) - if(proximity) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(NOBLOOD in H.dna.species.species_traits) - to_chat(user,"Blood rites do not work on species with no blood!") - return - if(iscultist(H)) - if(H.stat == DEAD) - to_chat(user,"Only a revive rune can bring back the dead!") - return - if(H.blood_volume < BLOOD_VOLUME_SAFE) - var/restore_blood = BLOOD_VOLUME_SAFE - H.blood_volume - if(uses*2 < restore_blood) - H.blood_volume += uses*2 - to_chat(user,"I use the last of my blood rites to restore what blood you could!") - uses = 0 - return ..() - else - H.blood_volume = BLOOD_VOLUME_SAFE - uses -= round(restore_blood/2) - to_chat(user,"My blood rites have restored [H == user ? "your" : "[H.p_their()]"] blood to safe levels!") - var/overall_damage = H.getBruteLoss() + H.getFireLoss() + H.getToxLoss() + H.getOxyLoss() - if(overall_damage == 0) - to_chat(user,"That cultist doesn't require healing!") - else - var/ratio = uses/overall_damage - if(H == user) - to_chat(user,"My blood healing is far less efficient when used on yourself!") - ratio *= 0.35 // Healing is half as effective if you can't perform a full heal - uses -= round(overall_damage) // Healing is 65% more "expensive" even if you can still perform the full heal - if(ratio>1) - ratio = 1 - uses -= round(overall_damage) - H.visible_message("[H] is fully healed by [H==user ? "[H.p_their()]":"[H]'s"]'s blood magic!") - else - H.visible_message("[H] is partially healed by [H==user ? "[H.p_their()]":"[H]'s"] blood magic.") - uses = 0 - ratio *= -1 - H.adjustOxyLoss((overall_damage*ratio) * (H.getOxyLoss() / overall_damage), 0) - H.adjustToxLoss((overall_damage*ratio) * (H.getToxLoss() / overall_damage), 0) - H.adjustFireLoss((overall_damage*ratio) * (H.getFireLoss() / overall_damage), 0) - H.adjustBruteLoss((overall_damage*ratio) * (H.getBruteLoss() / overall_damage), 0) - H.updatehealth() - playsound(get_turf(H), 'sound/blank.ogg', 25) - new /obj/effect/temp_visual/cult/sparks(get_turf(H)) - user.Beam(H,icon_state="sendbeam",time=15) - else - if(H.stat == DEAD) - to_chat(user,"[H.p_their(TRUE)] blood has stopped flowing, you'll have to find another way to extract it.") - return - if(H.cultslurring) - to_chat(user,"[H.p_their(TRUE)] blood has been tainted by an even stronger form of blood magic, it's no use to us like this!") - return - if(H.blood_volume > BLOOD_VOLUME_SAFE) - H.blood_volume -= 100 - uses += 50 - user.Beam(H,icon_state="drainbeam",time=10) - playsound(get_turf(H), 'sound/blank.ogg', 50) - H.visible_message("[user] has drained some of [H]'s blood!") - to_chat(user,"My blood rite gains 50 charges from draining [H]'s blood.") - new /obj/effect/temp_visual/cult/sparks(get_turf(H)) - else - to_chat(user,"[H.p_theyre(TRUE)] missing too much blood - you cannot drain [H.p_them()] further!") - return - if(isconstruct(target)) - var/mob/living/simple_animal/M = target - var/missing = M.maxHealth - M.health - if(missing) - if(uses > missing) - M.adjustHealth(-missing) - M.visible_message("[M] is fully healed by [user]'s blood magic!") - uses -= missing - else - M.adjustHealth(-uses) - M.visible_message("[M] is partially healed by [user]'s blood magic!") - uses = 0 - playsound(get_turf(M), 'sound/blank.ogg', 25) - user.Beam(M,icon_state="sendbeam",time=10) - if(istype(target, /obj/effect/decal/cleanable/blood)) - blood_draw(target, user) - ..() - -/obj/item/melee/blood_magic/manipulator/proc/blood_draw(atom/target, mob/living/carbon/human/user) - var/temp = 0 - var/turf/T = get_turf(target) - if(T) - for(var/obj/effect/decal/cleanable/blood/B in view(T, 2)) - if(B.blood_state == BLOOD_STATE_HUMAN) - if(B.bloodiness == 100) //Bonus for "pristine" bloodpools, also to prevent cheese with footprint spam - temp += 30 - else - temp += max((B.bloodiness**2)/800,1) - new /obj/effect/temp_visual/cult/turf/floor(get_turf(B)) - qdel(B) - for(var/obj/effect/decal/cleanable/trail_holder/TH in view(T, 2)) - qdel(TH) - var/obj/item/clothing/shoes/shoecheck = user.shoes - if(shoecheck && shoecheck.bloody_shoes[/datum/reagent/blood]) - temp += shoecheck.bloody_shoes[/datum/reagent/blood]/20 - shoecheck.bloody_shoes[/datum/reagent/blood] = 0 - if(temp) - user.Beam(T,icon_state="drainbeam",time=15) - new /obj/effect/temp_visual/cult/sparks(get_turf(user)) - playsound(T, 'sound/blank.ogg', 50) - to_chat(user, "My blood rite has gained [round(temp)] charge\s from blood sources around you!") - uses += max(1, round(temp)) - -/obj/item/melee/blood_magic/manipulator/attack_self(mob/living/user) - if(iscultist(user)) - var/list/options = list("Blood Spear (150)", "Blood Bolt Barrage (300)", "Blood Beam (500)") - var/choice = input(user, "Choose a greater blood rite...", "Greater Blood Rites") as null|anything in options - if(!choice) - to_chat(user, "I decide against conducting a greater blood rite.") - return - switch(choice) - if("Blood Spear (150)") - if(uses < BLOOD_SPEAR_COST) - to_chat(user, "I need [BLOOD_SPEAR_COST] charges to perform this rite.") - else - uses -= BLOOD_SPEAR_COST - var/turf/T = get_turf(user) - qdel(src) - var/datum/action/innate/cult/spear/S = new(user) - var/obj/item/twohanded/cult_spear/rite = new(T) - S.Grant(user, rite) - rite.spear_act = S - if(user.put_in_hands(rite)) - to_chat(user, "A [rite.name] appears in my hand!") - else - user.visible_message("A [rite.name] appears at [user]'s feet!", \ - "A [rite.name] materializes at my feet.") - if("Blood Bolt Barrage (300)") - if(uses < BLOOD_BARRAGE_COST) - to_chat(user, "I need [BLOOD_BARRAGE_COST] charges to perform this rite.") - else - var/obj/rite = new /obj/item/gun/ballistic/rifle/boltaction/enchanted/arcane_barrage/blood() - uses -= BLOOD_BARRAGE_COST - qdel(src) - if(user.put_in_hands(rite)) - to_chat(user, "My hands glow with power!") - else - to_chat(user, "I need a free hand for this rite!") - qdel(rite) - if("Blood Beam (500)") - if(uses < BLOOD_BEAM_COST) - to_chat(user, "I need [BLOOD_BEAM_COST] charges to perform this rite.") - else - var/obj/rite = new /obj/item/blood_beam() - uses -= BLOOD_BEAM_COST - qdel(src) - if(user.put_in_hands(rite)) - to_chat(user, "My hands glow with POWER OVERWHELMING!!!") - else - to_chat(user, "I need a free hand for this rite!") - qdel(rite) diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm deleted file mode 100644 index c66c4c6b2e..0000000000 --- a/code/modules/antagonists/cult/cult.dm +++ /dev/null @@ -1,403 +0,0 @@ -#define SUMMON_POSSIBILITIES 3 - -/datum/antagonist/cult - name = "Cultist" - roundend_category = "cultists" - antagpanel_category = "Cult" - antag_moodlet = /datum/mood_event/cult - var/datum/action/innate/cult/comm/communion = new - var/datum/action/innate/cult/mastervote/vote = new - var/datum/action/innate/cult/blood_magic/magic = new - job_rank = ROLE_CULTIST - antag_hud_type = ANTAG_HUD_CULT - antag_hud_name = "cult" - var/ignore_implant = FALSE - var/give_equipment = FALSE - var/datum/team/cult/cult_team - - -/datum/antagonist/cult/get_team() - return cult_team - -/datum/antagonist/cult/create_team(datum/team/cult/new_team) - if(!new_team) - //todo remove this and allow admin buttons to create more than one cult - for(var/datum/antagonist/cult/H in GLOB.antagonists) - if(!H.owner) - continue - if(H.cult_team) - cult_team = H.cult_team - return - cult_team = new /datum/team/cult - cult_team.setup_objectives() - return - if(!istype(new_team)) - stack_trace("Wrong team type passed to [type] initialization.") - cult_team = new_team - -/datum/antagonist/cult/proc/add_objectives() - objectives |= cult_team.objectives - -/datum/antagonist/cult/Destroy() - QDEL_NULL(communion) - QDEL_NULL(vote) - return ..() - -/datum/antagonist/cult/can_be_owned(datum/mind/new_owner) - . = ..() - if(. && !ignore_implant) - . = is_convertable_to_cult(new_owner.current,cult_team) - -/datum/antagonist/cult/greet() - to_chat(owner, "I are a member of the cult!") - owner.current.playsound_local(get_turf(owner.current), 'sound/blank.ogg', 100, FALSE, pressure_affected = FALSE)//subject to change - owner.announce_objectives() - -/datum/antagonist/cult/on_gain() - . = ..() - var/mob/living/current = owner.current - add_objectives() - if(give_equipment) - equip_cultist(TRUE) - SSticker.mode.cult += owner // Only add after they've been given objectives - current.log_message("has been converted to the cult of Nar'Sie!", LOG_ATTACK, color="#960000") - - if(cult_team.blood_target && cult_team.blood_target_image && current.client) - current.client.images += cult_team.blood_target_image - - -/datum/antagonist/cult/proc/equip_cultist(metal=TRUE) - var/mob/living/carbon/H = owner.current - if(!istype(H)) - return - . += cult_give_item(/obj/item/melee/cultblade/dagger, H) - if(metal) - . += cult_give_item(/obj/item/stack/sheet/runed_metal/ten, H) - to_chat(owner, "These will help you start the cult on this station. Use them well, and remember - you are not the only one.") - - -/datum/antagonist/cult/proc/cult_give_item(obj/item/item_path, mob/living/carbon/human/mob) - var/list/slots = list( - "backpack" = SLOT_IN_BACKPACK, - "left pocket" = SLOT_L_STORE, - "right pocket" = SLOT_R_STORE - ) - - var/T = new item_path(mob) - var/item_name = initial(item_path.name) - var/where = mob.equip_in_one_of_slots(T, slots) - if(!where) - to_chat(mob, "Unfortunately, you weren't able to get a [item_name]. This is very bad and you should adminhelp immediately (press F1).") - return 0 - else - to_chat(mob, "I have a [item_name] in my [where].") - if(where == "backpack") - SEND_SIGNAL(mob.back, COMSIG_TRY_STORAGE_SHOW, mob) - return TRUE - -/datum/antagonist/cult/apply_innate_effects(mob/living/mob_override) - . = ..() - var/mob/living/current = owner.current - if(mob_override) - current = mob_override - add_antag_hud(antag_hud_type, antag_hud_name, current) - handle_clown_mutation(current, mob_override ? null : "Your training has allowed you to overcome my clownish nature, allowing you to wield weapons without harming myself.") - current.faction |= "cult" - current.grant_language(/datum/language/narsie) - if(!cult_team.cult_master) - vote.Grant(current) - communion.Grant(current) - if(ishuman(current)) - magic.Grant(current) - current.throw_alert("bloodsense", /atom/movable/screen/alert/bloodsense) - if(cult_team.cult_risen) - cult_team.rise(current) - if(cult_team.cult_ascendent) - cult_team.ascend(current) - -/datum/antagonist/cult/remove_innate_effects(mob/living/mob_override) - . = ..() - var/mob/living/current = owner.current - if(mob_override) - current = mob_override - remove_antag_hud(antag_hud_type, current) - handle_clown_mutation(current, removing = FALSE) - current.faction -= "cult" - current.remove_language(/datum/language/narsie) - vote.Remove(current) - communion.Remove(current) - magic.Remove(current) - current.clear_alert("bloodsense") - if(ishuman(current)) - var/mob/living/carbon/human/H = current - H.eye_color = initial(H.eye_color) - H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK) - REMOVE_TRAIT(H, CULT_EYES, null) - H.remove_overlay(HALO_LAYER) - H.update_body() - -/datum/antagonist/cult/on_removal() - SSticker.mode.cult -= owner - if(!silent) - owner.current.visible_message("[owner.current] looks like [owner.current.p_theyve()] just reverted to [owner.current.p_their()] old faith!", null, null, null, owner.current) - to_chat(owner.current, "An unfamiliar white light flashes through my mind, cleansing the taint of the Geometer and all my memories as her servant.") - owner.current.log_message("has renounced the cult of Nar'Sie!", LOG_ATTACK, color="#960000") - if(cult_team.blood_target && cult_team.blood_target_image && owner.current.client) - owner.current.client.images -= cult_team.blood_target_image - . = ..() - -/datum/antagonist/cult/admin_add(datum/mind/new_owner,mob/admin) - give_equipment = FALSE - new_owner.add_antag_datum(src) - message_admins("[key_name_admin(admin)] has cult'ed [key_name_admin(new_owner)].") - log_admin("[key_name(admin)] has cult'ed [key_name(new_owner)].") - -/datum/antagonist/cult/admin_remove(mob/user) - message_admins("[key_name_admin(user)] has decult'ed [key_name_admin(owner)].") - log_admin("[key_name(user)] has decult'ed [key_name(owner)].") - SSticker.mode.remove_cultist(owner,silent=TRUE) //disgusting - -/datum/antagonist/cult/get_admin_commands() - . = ..() - .["Dagger"] = CALLBACK(src,PROC_REF(admin_give_dagger)) - .["Dagger and Metal"] = CALLBACK(src,PROC_REF(admin_give_metal)) - .["Remove Dagger and Metal"] = CALLBACK(src, PROC_REF(admin_take_all)) - -/datum/antagonist/cult/proc/admin_give_dagger(mob/admin) - if(!equip_cultist(metal=FALSE)) - to_chat(admin, "Spawning dagger failed!") - -/datum/antagonist/cult/proc/admin_give_metal(mob/admin) - if (!equip_cultist(metal=TRUE)) - to_chat(admin, "Spawning runed metal failed!") - -/datum/antagonist/cult/proc/admin_take_all(mob/admin) - var/mob/living/current = owner.current - for(var/o in current.GetAllContents()) - if(istype(o, /obj/item/melee/cultblade/dagger) || istype(o, /obj/item/stack/sheet/runed_metal)) - qdel(o) - -/datum/antagonist/cult/master - ignore_implant = TRUE - show_in_antagpanel = FALSE //Feel free to add this later - var/datum/action/innate/cult/master/finalreck/reckoning = new - var/datum/action/innate/cult/master/cultmark/bloodmark = new - var/datum/action/innate/cult/master/pulse/throwing = new - -/datum/antagonist/cult/master/Destroy() - QDEL_NULL(reckoning) - QDEL_NULL(bloodmark) - QDEL_NULL(throwing) - return ..() - -/datum/antagonist/cult/master/on_gain() - . = ..() - var/mob/living/current = owner.current - set_antag_hud(current, "cultmaster") - -/datum/antagonist/cult/master/greet() - to_chat(owner.current, "I are the cult's Master. As the cult's Master, you have a unique title and loud voice when communicating, are capable of marking \ - targets, such as a location or a noncultist, to direct the cult to them, and, finally, you are capable of summoning the entire living cult to my location once.") - to_chat(owner.current, "Use these abilities to direct the cult to victory at any cost.") - -/datum/antagonist/cult/master/apply_innate_effects(mob/living/mob_override) - . = ..() - var/mob/living/current = owner.current - if(mob_override) - current = mob_override - if(!cult_team.reckoning_complete) - reckoning.Grant(current) - bloodmark.Grant(current) - throwing.Grant(current) - current.update_action_buttons_icon() - current.apply_status_effect(/datum/status_effect/cult_master) - if(cult_team.cult_risen) - cult_team.rise(current) - if(cult_team.cult_ascendent) - cult_team.ascend(current) - -/datum/antagonist/cult/master/remove_innate_effects(mob/living/mob_override) - . = ..() - var/mob/living/current = owner.current - if(mob_override) - current = mob_override - reckoning.Remove(current) - bloodmark.Remove(current) - throwing.Remove(current) - current.update_action_buttons_icon() - current.remove_status_effect(/datum/status_effect/cult_master) - - if(ishuman(current)) - var/mob/living/carbon/human/H = current - H.eye_color = initial(H.eye_color) - H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK) - REMOVE_TRAIT(H, CULT_EYES, null) - H.remove_overlay(HALO_LAYER) - H.update_body() - -/datum/team/cult - name = "Cult" - - var/blood_target - var/image/blood_target_image - var/blood_target_reset_timer - - var/cult_vote_called = FALSE - var/mob/living/cult_master - var/reckoning_complete = FALSE - var/cult_risen = FALSE - var/cult_ascendent = FALSE - -/datum/team/cult/proc/check_size() - if(cult_ascendent) - return - var/alive = 0 - var/cultplayers = 0 - for(var/I in GLOB.player_list) - var/mob/M = I - if(M.stat != DEAD) - if(iscultist(M)) - ++cultplayers - else - ++alive - var/ratio = cultplayers/alive - if(ratio > CULT_RISEN && !cult_risen) - for(var/datum/mind/B in members) - if(B.current) - SEND_SOUND(B.current, 'sound/blank.ogg') - to_chat(B.current, "The veil weakens as my cult grows, my eyes begin to glow...") - addtimer(CALLBACK(src, PROC_REF(rise), B.current), 200) - cult_risen = TRUE - - if(ratio > CULT_ASCENDENT && !cult_ascendent) - for(var/datum/mind/B in members) - if(B.current) - SEND_SOUND(B.current, 'sound/blank.ogg') - to_chat(B.current, "My cult is ascendent and the red harvest approaches - you cannot hide my true nature for much longer!!") - addtimer(CALLBACK(src, PROC_REF(ascend), B.current), 200) - cult_ascendent = TRUE - - -/datum/team/cult/proc/rise(cultist) - if(ishuman(cultist)) - var/mob/living/carbon/human/H = cultist - H.eye_color = "f00" - H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK) - ADD_TRAIT(H, CULT_EYES, CULT_TRAIT) - H.update_body() - -/datum/team/cult/proc/ascend(cultist) - if(ishuman(cultist)) - var/mob/living/carbon/human/H = cultist - new /obj/effect/temp_visual/cult/sparks(get_turf(H), H.dir) - var/istate = pick("halo1","halo2","halo3","halo4","halo5","halo6") - var/mutable_appearance/new_halo_overlay = mutable_appearance('icons/effects/32x64.dmi', istate, -HALO_LAYER) - H.overlays_standing[HALO_LAYER] = new_halo_overlay - H.apply_overlay(HALO_LAYER) - -/datum/team/cult/proc/setup_objectives() - //SAC OBJECTIVE , todo: move this to objective internals - var/list/target_candidates = list() - var/datum/objective/sacrifice/sac_objective = new - sac_objective.team = src - - for(var/mob/living/carbon/human/player in GLOB.player_list) - if(player.mind && !player.mind.has_antag_datum(/datum/antagonist/cult) && !is_convertable_to_cult(player) && player.stat != DEAD) - target_candidates += player.mind - - if(target_candidates.len == 0) - message_admins("Cult Sacrifice: Could not find unconvertible target, checking for convertible target.") - for(var/mob/living/carbon/human/player in GLOB.player_list) - if(player.mind && !player.mind.has_antag_datum(/datum/antagonist/cult) && player.stat != DEAD) - target_candidates += player.mind - listclearnulls(target_candidates) - if(LAZYLEN(target_candidates)) - sac_objective.target = pick(target_candidates) - sac_objective.update_explanation_text() - - var/datum/job/sacjob = SSjob.GetJob(sac_objective.target.assigned_role) - var/datum/preferences/sacface = sac_objective.target.current.client.prefs - var/icon/reshape = get_flat_human_icon(null, sacjob, sacface, list(SOUTH)) - reshape.Shift(SOUTH, 4) - reshape.Shift(EAST, 1) - reshape.Crop(7,4,26,31) - reshape.Crop(-5,-3,26,30) - sac_objective.sac_image = reshape - - objectives += sac_objective - else - message_admins("Cult Sacrifice: Could not find unconvertible or convertible target. WELP!") - - - //SUMMON OBJECTIVE - - var/datum/objective/eldergod/summon_objective = new() - summon_objective.team = src - objectives += summon_objective - - -/datum/objective/sacrifice - var/sacced = FALSE - var/sac_image - -/datum/objective/sacrifice/check_completion() - return sacced || completed - -/datum/objective/sacrifice/update_explanation_text() - if(target) - explanation_text = "Sacrifice [target], the [target.assigned_role] via invoking a Sacrifice rune with [target.p_them()] on it and three acolytes around it." - else - explanation_text = "The veil has already been weakened here, proceed to the final objective." - -/datum/objective/eldergod - var/summoned = FALSE - var/list/summon_spots = list() - -/datum/objective/eldergod/New() - ..() - var/sanity = 0 - while(summon_spots.len < SUMMON_POSSIBILITIES && sanity < 100) - var/area/summon = pick(GLOB.sortedAreas - summon_spots) - if(summon && is_station_level(summon.z) && summon.valid_territory) - summon_spots += summon - sanity++ - update_explanation_text() - -/datum/objective/eldergod/update_explanation_text() - explanation_text = "Summon Nar'Sie by invoking the rune 'Summon Nar'Sie'. The summoning can only be accomplished in [english_list(summon_spots)] - where the veil is weak enough for the ritual to begin." - -/datum/objective/eldergod/check_completion() - return summoned || completed - -/datum/team/cult/proc/check_cult_victory() - for(var/datum/objective/O in objectives) - if(!O.check_completion()) - return FALSE - return TRUE - -/datum/team/cult/roundend_report() - var/list/parts = list() - - if(check_cult_victory()) - parts += "The cult has succeeded! Nar'Sie has snuffed out another torch in the void!" - else - parts += "The staff managed to stop the cult! Dark words and heresy are no match for Nanotrasen's finest!" - - if(objectives.len) - parts += "The cultists' objectives were:" - var/count = 1 - for(var/datum/objective/objective in objectives) - if(objective.check_completion()) - parts += "Objective #[count]: [objective.explanation_text] Success!" - else - parts += "Objective #[count]: [objective.explanation_text] Fail." - count++ - - if(members.len) - parts += "The cultists were:" - parts += printplayerlist(members) - - return "
    [parts.Join("
    ")]
    " - -/datum/team/cult/is_gamemode_hero() - return SSticker.mode.name == "cult" diff --git a/code/modules/antagonists/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm deleted file mode 100644 index 5da6a493d0..0000000000 --- a/code/modules/antagonists/cult/cult_comms.dm +++ /dev/null @@ -1,461 +0,0 @@ -// Contains cult communion, guide, and cult master abilities - -/datum/action/innate/cult - icon_icon = 'icons/mob/actions/actions_cult.dmi' - background_icon_state = "bg_demon" - buttontooltipstyle = "cult" - check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUN|AB_CHECK_CONSCIOUS - -/datum/action/innate/cult/IsAvailable() - if(!iscultist(owner)) - return FALSE - return ..() - -/datum/action/innate/cult/comm - name = "Communion" - desc = "" - button_icon_state = "cult_comms" - -/datum/action/innate/cult/comm/Activate() - var/input = stripped_input(usr, "Please choose a message to tell to the other acolytes.", "Voice of Blood", "") - if(!input || !IsAvailable()) - return - if(CHAT_FILTER_CHECK(input)) - to_chat(usr, "I cannot send a message that contains a word prohibited in IC chat!") - return - cultist_commune(usr, input) - -/datum/action/innate/cult/comm/proc/cultist_commune(mob/living/user, message) - var/my_message - if(!message) - return - user.whisper("O bidai nabora se[pick("'","`")]sma!", language = /datum/language/common) - user.whisper(html_decode(message)) - var/title = "Acolyte" - var/span = "cult italic" - if(user.mind && user.mind.has_antag_datum(/datum/antagonist/cult/master)) - span = "cultlarge" - title = "Master" - else if(!ishuman(user)) - title = "Construct" - my_message = "[title] [findtextEx(user.name, user.real_name) ? user.name : "[user.real_name] (as [user.name])"]: [message]" - for(var/i in GLOB.player_list) - var/mob/M = i - if(iscultist(M)) - to_chat(M, my_message) - else if(M in GLOB.dead_mob_list) - var/link = FOLLOW_LINK(M, user) - to_chat(M, "[link] [my_message]") - - user.log_talk(message, LOG_SAY, tag="cult") - -/datum/action/innate/cult/comm/spirit - name = "Spiritual Communion" - desc = "" - -/datum/action/innate/cult/comm/spirit/IsAvailable() - if(iscultist(owner.mind.current)) - return TRUE - -/datum/action/innate/cult/comm/spirit/cultist_commune(mob/living/user, message) - var/my_message - if(!message) - return - my_message = "The [user.name]: [message]" - for(var/i in GLOB.player_list) - var/mob/M = i - if(iscultist(M)) - to_chat(M, my_message) - else if(M in GLOB.dead_mob_list) - var/link = FOLLOW_LINK(M, user) - to_chat(M, "[link] [my_message]") - -/datum/action/innate/cult/mastervote - name = "Assert Leadership" - button_icon_state = "cultvote" - -/datum/action/innate/cult/mastervote/IsAvailable() - var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(!C || C.cult_team.cult_vote_called || !ishuman(owner)) - return FALSE - return ..() - -/datum/action/innate/cult/mastervote/Activate() - var/choice = alert(owner, "The mantle of leadership is heavy. Success in this role requires an expert level of communication and experience. Are you sure?",, "Yes", "No") - if(choice == "Yes" && IsAvailable()) - var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - pollCultists(owner,C.cult_team) - -/proc/pollCultists(mob/living/Nominee,datum/team/cult/team) //Cult Master Poll - if(world.time < CULT_POLL_WAIT) - to_chat(Nominee, "It would be premature to select a leader while everyone is still settling in, try again in [DisplayTimeText(CULT_POLL_WAIT-world.time)].") - return - team.cult_vote_called = TRUE //somebody's trying to be a master, make sure we don't let anyone else try - for(var/datum/mind/B in team.members) - if(B.current) - B.current.update_action_buttons_icon() - if(!B.current.incapacitated()) - SEND_SOUND(B.current, 'sound/blank.ogg') - to_chat(B.current, "Acolyte [Nominee] has asserted that [Nominee.p_theyre()] worthy of leading the cult. A vote will be called shortly.") - sleep(100) - var/list/asked_cultists = list() - for(var/datum/mind/B in team.members) - if(B.current && B.current != Nominee && !B.current.incapacitated()) - SEND_SOUND(B.current, 'sound/blank.ogg') - asked_cultists += B.current - var/list/yes_voters = pollCandidates("[Nominee] seeks to lead my cult, do you support [Nominee.p_them()]?", poll_time = 300, group = asked_cultists) - if(QDELETED(Nominee) || Nominee.incapacitated()) - team.cult_vote_called = FALSE - for(var/datum/mind/B in team.members) - if(B.current) - B.current.update_action_buttons_icon() - if(!B.current.incapacitated()) - to_chat(B.current,"[Nominee] has died in the process of attempting to win the cult's support!") - return FALSE - if(!Nominee.mind) - team.cult_vote_called = FALSE - for(var/datum/mind/B in team.members) - if(B.current) - B.current.update_action_buttons_icon() - if(!B.current.incapacitated()) - to_chat(B.current,"[Nominee] has gone catatonic in the process of attempting to win the cult's support!") - return FALSE - if(LAZYLEN(yes_voters) <= LAZYLEN(asked_cultists) * 0.5) - team.cult_vote_called = FALSE - for(var/datum/mind/B in team.members) - if(B.current) - B.current.update_action_buttons_icon() - if(!B.current.incapacitated()) - to_chat(B.current, "[Nominee] could not win the cult's support and shall continue to serve as an acolyte.") - return FALSE - team.cult_master = Nominee - SSticker.mode.remove_cultist(Nominee.mind, TRUE) - Nominee.mind.add_antag_datum(/datum/antagonist/cult/master) - for(var/datum/mind/B in team.members) - if(B.current) - for(var/datum/action/innate/cult/mastervote/vote in B.current.actions) - vote.Remove(B.current) - if(!B.current.incapacitated()) - to_chat(B.current,"[Nominee] has won the cult's support and is now their master. Follow [Nominee.p_their()] orders to the best of my ability!") - return TRUE - -/datum/action/innate/cult/master/IsAvailable() - if(!owner.mind || !owner.mind.has_antag_datum(/datum/antagonist/cult/master) || GLOB.cult_narsie) - return 0 - return ..() - -/datum/action/innate/cult/master/finalreck - name = "Final Reckoning" - desc = "" - button_icon_state = "sintouch" - -/datum/action/innate/cult/master/finalreck/Activate() - var/datum/antagonist/cult/antag = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(!antag) - return - for(var/i in 1 to 4) - chant(i) - var/list/destinations = list() - for(var/turf/T in orange(1, owner)) - if(!is_blocked_turf(T, TRUE)) - destinations += T - if(!LAZYLEN(destinations)) - to_chat(owner, "I need more space to summon my cult!") - return - if(do_after(owner, 30, target = owner)) - for(var/datum/mind/B in antag.cult_team.members) - if(B.current && B.current.stat != DEAD) - var/turf/mobloc = get_turf(B.current) - switch(i) - if(1) - new /obj/effect/temp_visual/cult/sparks(mobloc, B.current.dir) - playsound(mobloc, "sparks", 50, TRUE) - if(2) - new /obj/effect/temp_visual/dir_setting/cult/phase/out(mobloc, B.current.dir) - playsound(mobloc, "sparks", 75, TRUE) - if(3) - new /obj/effect/temp_visual/dir_setting/cult/phase(mobloc, B.current.dir) - playsound(mobloc, "sparks", 100, TRUE) - if(4) - playsound(mobloc, 'sound/blank.ogg', 100, TRUE) - if(B.current != owner) - var/turf/final = pick(destinations) - if(istype(B.current.loc, /obj/item/soulstone)) - var/obj/item/soulstone/S = B.current.loc - S.release_shades(owner) - B.current.setDir(SOUTH) - new /obj/effect/temp_visual/cult/blood(final) - addtimer(CALLBACK(B.current, TYPE_PROC_REF(/mob, reckon), final), 10) - else - return - antag.cult_team.reckoning_complete = TRUE - Remove(owner) - -/mob/proc/reckon(turf/final) - new /obj/effect/temp_visual/cult/blood/out(get_turf(src)) - forceMove(final) - -/datum/action/innate/cult/master/finalreck/proc/chant(chant_number) - switch(chant_number) - if(1) - owner.say("C'arta forbici!", language = /datum/language/common, forced = "cult invocation") - if(2) - owner.say("Pleggh e'ntrath!", language = /datum/language/common, forced = "cult invocation") - playsound(get_turf(owner),'sound/blank.ogg', 50, TRUE) - if(3) - owner.say("Barhah hra zar'garis!", language = /datum/language/common, forced = "cult invocation") - playsound(get_turf(owner),'sound/blank.ogg', 75, TRUE) - if(4) - owner.say("N'ath reth sh'yro eth d'rekkathnor!!!", language = /datum/language/common, forced = "cult invocation") - playsound(get_turf(owner),'sound/blank.ogg', 100, TRUE) - -/datum/action/innate/cult/master/cultmark - name = "Mark Target" - desc = "" - button_icon_state = "cult_mark" - var/obj/effect/proc_holder/cultmark/CM - var/cooldown = 0 - var/base_cooldown = 1200 - -/datum/action/innate/cult/master/cultmark/New(Target) - CM = new() - CM.attached_action = src - ..() - -/datum/action/innate/cult/master/cultmark/IsAvailable() - if(cooldown > world.time) - if(!CM.active) - to_chat(owner, "I need to wait [DisplayTimeText(cooldown - world.time)] before you can mark another target!") - return FALSE - return ..() - -/datum/action/innate/cult/master/cultmark/Destroy() - QDEL_NULL(CM) - return ..() - -/datum/action/innate/cult/master/cultmark/Activate() - CM.toggle(owner) //the important bit - return TRUE - -/obj/effect/proc_holder/cultmark - active = FALSE - ranged_mousepointer = 'icons/effects/cult_target.dmi' - var/datum/action/innate/cult/master/cultmark/attached_action - -/obj/effect/proc_holder/cultmark/Destroy() - attached_action = null - return ..() - -/obj/effect/proc_holder/cultmark/proc/toggle(mob/user) - if(active) - remove_ranged_ability("I cease the marking ritual.") - else - add_ranged_ability(user, "I prepare to mark a target for my cult...") - -/obj/effect/proc_holder/cultmark/InterceptClickOn(mob/living/caller, params, atom/target) - if(..()) - return - if(ranged_ability_user.incapacitated()) - remove_ranged_ability() - return - var/turf/T = get_turf(ranged_ability_user) - if(!isturf(T)) - return FALSE - - var/datum/antagonist/cult/C = caller.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - - if(target in view(7, get_turf(ranged_ability_user))) - if(C.cult_team.blood_target) - to_chat(ranged_ability_user, "The cult has already designated a target!") - return FALSE - C.cult_team.blood_target = target - var/area/A = get_area(target) - attached_action.cooldown = world.time + attached_action.base_cooldown - addtimer(CALLBACK(attached_action.owner, TYPE_PROC_REF(/mob, update_action_buttons_icon)), attached_action.base_cooldown) - C.cult_team.blood_target_image = image('icons/effects/cult_target.dmi', target, "glow", ABOVE_MOB_LAYER) - C.cult_team.blood_target_image.appearance_flags = RESET_COLOR - C.cult_team.blood_target_image.pixel_x = -target.pixel_x - C.cult_team.blood_target_image.pixel_y = -target.pixel_y - for(var/datum/mind/B in SSticker.mode.cult) - if(B.current && B.current.stat != DEAD && B.current.client) - to_chat(B.current, "[ranged_ability_user] has marked [C.cult_team.blood_target] in the [A.name] as the cult's top priority, get there immediately!") - SEND_SOUND(B.current, sound(pick('sound/blank.ogg'),0,1,75)) - B.current.client.images += C.cult_team.blood_target_image - attached_action.owner.update_action_buttons_icon() - remove_ranged_ability("The marking rite is complete! It will last for 90 seconds.") - C.cult_team.blood_target_reset_timer = addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(reset_blood_target),C.cult_team), 900, TIMER_STOPPABLE) - return TRUE - return FALSE - -/proc/reset_blood_target(datum/team/cult/team) - for(var/datum/mind/B in team.members) - if(B.current && B.current.stat != DEAD && B.current.client) - if(team.blood_target) - to_chat(B.current,"The blood mark has expired!") - B.current.client.images -= team.blood_target_image - QDEL_NULL(team.blood_target_image) - team.blood_target = null - - -/datum/action/innate/cult/master/cultmark/ghost - name = "Mark a Blood Target for the Cult" - desc = "" - -/datum/action/innate/cult/master/cultmark/ghost/IsAvailable() - if(istype(owner, /mob/dead/observer) && iscultist(owner.mind.current)) - return TRUE - else - qdel(src) - -/datum/action/innate/cult/ghostmark //Ghost version - name = "Blood Mark my Target" - desc = "" - button_icon_state = "cult_mark" - var/tracking = FALSE - var/cooldown = 0 - var/base_cooldown = 600 - -/datum/action/innate/cult/ghostmark/IsAvailable() - if(istype(owner, /mob/dead/observer) && iscultist(owner.mind.current)) - return TRUE - else - qdel(src) - -/datum/action/innate/cult/ghostmark/proc/reset_button() - if(owner) - name = "Blood Mark my Target" - desc = "" - button_icon_state = "cult_mark" - owner.update_action_buttons_icon() - SEND_SOUND(owner, 'sound/blank.ogg') - to_chat(owner,"My previous mark is gone - you are now ready to create a new blood mark.") - -/datum/action/innate/cult/ghostmark/Activate() - var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(C.cult_team.blood_target) - if(cooldown>world.time) - reset_blood_target(C.cult_team) - to_chat(owner, "I have cleared the cult's blood target!") - deltimer(C.cult_team.blood_target_reset_timer) - return - else - to_chat(owner, "The cult has already designated a target!") - return - if(cooldown>world.time) - to_chat(owner, "I aren't ready to place another blood mark yet!") - return - target = owner.orbiting?.parent || get_turf(owner) - if(!target) - return - C.cult_team.blood_target = target - var/area/A = get_area(target) - cooldown = world.time + base_cooldown - addtimer(CALLBACK(owner, TYPE_PROC_REF(/mob, update_action_buttons_icon)), base_cooldown) - C.cult_team.blood_target_image = image('icons/effects/cult_target.dmi', target, "glow", ABOVE_MOB_LAYER) - C.cult_team.blood_target_image.appearance_flags = RESET_COLOR - C.cult_team.blood_target_image.pixel_x = -target.pixel_x - C.cult_team.blood_target_image.pixel_y = -target.pixel_y - SEND_SOUND(owner, sound(pick('sound/blank.ogg'),0,1,75)) - owner.client.images += C.cult_team.blood_target_image - for(var/datum/mind/B in SSticker.mode.cult) - if(B.current && B.current.stat != DEAD && B.current.client) - to_chat(B.current, "[owner] has marked [C.cult_team.blood_target] in the [A.name] as the cult's top priority, get there immediately!") - SEND_SOUND(B.current, sound(pick('sound/blank.ogg'),0,1,75)) - B.current.client.images += C.cult_team.blood_target_image - to_chat(owner,"I have marked the [target] for the cult! It will last for [DisplayTimeText(base_cooldown)].") - name = "Clear the Blood Mark" - desc = "" - button_icon_state = "emp" - owner.update_action_buttons_icon() - C.cult_team.blood_target_reset_timer = addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(reset_blood_target),C.cult_team), base_cooldown, TIMER_STOPPABLE) - addtimer(CALLBACK(src, PROC_REF(reset_button)), base_cooldown) - - -//////// ELDRITCH PULSE ///////// - - - -/datum/action/innate/cult/master/pulse - name = "Eldritch Pulse" - desc = "" - icon_icon = 'icons/mob/actions/actions_spells.dmi' - button_icon_state = "arcane_barrage" - var/obj/effect/proc_holder/pulse/PM - var/cooldown = 0 - var/base_cooldown = 150 - var/throwing = FALSE - var/mob/living/throwee - -/datum/action/innate/cult/master/pulse/New() - PM = new() - PM.attached_action = src - ..() - -/datum/action/innate/cult/master/pulse/IsAvailable() - if(!owner.mind || !owner.mind.has_antag_datum(/datum/antagonist/cult/master)) - return FALSE - if(cooldown > world.time) - if(!PM.active) - to_chat(owner, "I need to wait [DisplayTimeText(cooldown - world.time)] before you can pulse again!") - return FALSE - return ..() - -/datum/action/innate/cult/master/pulse/Destroy() - PM.attached_action = null //What the fuck is even going on here. - QDEL_NULL(PM) - return ..() - - -/datum/action/innate/cult/master/pulse/Activate() - PM.toggle(owner) //the important bit - return TRUE - -/obj/effect/proc_holder/pulse - active = FALSE - ranged_mousepointer = 'icons/effects/throw_target.dmi' - var/datum/action/innate/cult/master/pulse/attached_action - -/obj/effect/proc_holder/pulse/Destroy() - attached_action = null - return ..() - - -/obj/effect/proc_holder/pulse/proc/toggle(mob/user) - if(active) - remove_ranged_ability("I cease my preparations...") - attached_action.throwing = FALSE - else - add_ranged_ability(user, "I prepare to tear through the fabric of reality...") - -/obj/effect/proc_holder/pulse/InterceptClickOn(mob/living/caller, params, atom/target) - if(..()) - return - if(ranged_ability_user.incapacitated()) - remove_ranged_ability() - return - var/turf/T = get_turf(ranged_ability_user) - if(!isturf(T)) - return FALSE - if(target in view(7, get_turf(ranged_ability_user))) - if((!(iscultist(target) || istype(target, /obj/structure/destructible/cult)) || target == caller) && !(attached_action.throwing)) - return - if(!attached_action.throwing) - attached_action.throwing = TRUE - attached_action.throwee = target - SEND_SOUND(ranged_ability_user, sound('sound/blank.ogg')) - to_chat(ranged_ability_user,"I reach through the veil with my mind's eye and seize [target]!") - return - else - new /obj/effect/temp_visual/cult/sparks(get_turf(attached_action.throwee), ranged_ability_user.dir) - var/distance = get_dist(attached_action.throwee, target) - if(distance >= 16) - return - playsound(target,'sound/blank.ogg') - attached_action.throwee.Beam(target,icon_state="sendbeam",time=4) - attached_action.throwee.forceMove(get_turf(target)) - new /obj/effect/temp_visual/cult/sparks(get_turf(target), ranged_ability_user.dir) - attached_action.throwing = FALSE - attached_action.cooldown = world.time + attached_action.base_cooldown - remove_ranged_ability("A pulse of blood magic surges through you as you shift [attached_action.throwee] through time and space.") - caller.update_action_buttons_icon() - addtimer(CALLBACK(caller, TYPE_PROC_REF(/mob, update_action_buttons_icon)), attached_action.base_cooldown) diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm deleted file mode 100644 index 22456ff5bd..0000000000 --- a/code/modules/antagonists/cult/cult_items.dm +++ /dev/null @@ -1,957 +0,0 @@ -/obj/item/tome - name = "arcane tome" - desc = "" - icon_state ="tome" - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - -/obj/item/melee/cultblade/dagger - name = "ritual dagger" - desc = "" - icon = 'icons/obj/wizard.dmi' - icon_state = "render" - item_state = "cultdagger" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - inhand_x_dimension = 32 - inhand_y_dimension = 32 - w_class = WEIGHT_CLASS_SMALL - force = 15 - throwforce = 25 - armor_penetration = 35 - actions_types = list(/datum/action/item_action/cult_dagger) - -/obj/item/melee/cultblade/dagger/Initialize() - . = ..() - var/image/I = image(icon = 'icons/effects/blood.dmi' , icon_state = null, loc = src) - I.override = TRUE - add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "cult_dagger", I) - -/obj/item/melee/cultblade - name = "eldritch longsword" - desc = "" - icon_state = "cultblade" - item_state = "cultblade" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - flags_1 = CONDUCT_1 - sharpness = IS_SHARP - w_class = WEIGHT_CLASS_BULKY - force = 30 - throwforce = 10 - hitsound = 'sound/blank.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "rended") - -/obj/item/melee/cultblade/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 40, 100) - -/obj/item/melee/cultblade/attack(mob/living/target, mob/living/carbon/human/user) - if(!iscultist(user)) - user.Paralyze(100) - user.dropItemToGround(src, TRUE) - user.visible_message("A powerful force shoves [user] away from [target]!", \ - "\"You shouldn't play with sharp things. You'll poke someone's eye out.\"") - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.apply_damage(rand(force/2, force), BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) - else - user.adjustBruteLoss(rand(force/2,force)) - return - ..() - -/obj/item/melee/cultblade/ghost - name = "eldritch sword" - force = 19 //can't break normal airlocks - item_flags = NEEDS_PERMIT | DROPDEL - flags_1 = NONE - -/obj/item/melee/cultblade/ghost/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT) - -/obj/item/melee/cultblade/pickup(mob/living/user) - ..() - if(!iscultist(user)) - to_chat(user, "\"I wouldn't advise that.\"") - -/obj/item/twohanded/required/cult_bastard - name = "bloody bastard sword" - desc = "" - w_class = WEIGHT_CLASS_HUGE - block_chance = 50 - throwforce = 20 - force = 35 - armor_penetration = 45 - throw_speed = 1 - throw_range = 3 - sharpness = IS_SHARP - light_color = "#ff0000" - attack_verb = list("cleaved", "slashed", "torn", "hacked", "ripped", "diced", "carved") - icon_state = "cultbastard" - item_state = "cultbastard" - hitsound = 'sound/blank.ogg' - lefthand_file = 'icons/mob/inhands/64x64_lefthand.dmi' - righthand_file = 'icons/mob/inhands/64x64_righthand.dmi' - inhand_x_dimension = 64 - inhand_y_dimension = 64 - actions_types = list() - item_flags = SLOWS_WHILE_IN_HAND - var/datum/action/innate/dash/cult/jaunt - var/datum/action/innate/cult/spin2win/linked_action - var/spinning = FALSE - var/spin_cooldown = 250 - var/dash_toggled = TRUE - -/obj/item/twohanded/required/cult_bastard/Initialize() - . = ..() - set_light(4) - jaunt = new(src) - linked_action = new(src) - AddComponent(/datum/component/butchering, 50, 80) - -/obj/item/twohanded/required/cult_bastard/examine(mob/user) - . = ..() - if(contents.len) - . += "There are [contents.len] souls trapped within the sword's core." - else - . += "The sword appears to be quite lifeless." - -/obj/item/twohanded/required/cult_bastard/can_be_pulled(user) - return FALSE - -/obj/item/twohanded/required/cult_bastard/attack_self(mob/user) - dash_toggled = !dash_toggled - if(dash_toggled) - to_chat(loc, "I raise [src] and prepare to jaunt with it.") - else - to_chat(loc, "I lower [src] and prepare to swing it normally.") - -/obj/item/twohanded/required/cult_bastard/pickup(mob/living/user) - . = ..() - if(!iscultist(user)) - to_chat(user, "\"I wouldn't advise that.\"") - force = 5 - return - force = initial(force) - jaunt.Grant(user, src) - linked_action.Grant(user, src) - user.update_icons() - -/obj/item/twohanded/required/cult_bastard/dropped(mob/user) - . = ..() - linked_action.Remove(user) - jaunt.Remove(user) - user.update_icons() - -/obj/item/twohanded/required/cult_bastard/IsReflect() - if(spinning) - playsound(src, pick('sound/blank.ogg'), 100, TRUE) - return TRUE - else - ..() - -/obj/item/twohanded/required/cult_bastard/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(prob(final_block_chance)) - if(attack_type == PROJECTILE_ATTACK) - owner.visible_message("[owner] deflects [attack_text] with [src]!") - playsound(src, pick('sound/blank.ogg'), 100, TRUE) - return TRUE - else - playsound(src, 'sound/blank.ogg', 75, TRUE) - owner.visible_message("[owner] parries [attack_text] with [src]!") - return TRUE - return FALSE - -/obj/item/twohanded/required/cult_bastard/afterattack(atom/target, mob/user, proximity, click_parameters) - . = ..() - if(dash_toggled && !proximity) - jaunt.Teleport(user, target) - return - if(proximity) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(H.stat != CONSCIOUS) - var/obj/item/soulstone/SS = new /obj/item/soulstone(src) - SS.attack(H, user) - if(!LAZYLEN(SS.contents)) - qdel(SS) - if(istype(target, /obj/structure/constructshell) && contents.len) - var/obj/item/soulstone/SS = contents[1] - if(istype(SS)) - SS.transfer_soul("CONSTRUCT",target,user) - qdel(SS) - -/datum/action/innate/dash/cult - name = "Rend the Veil" - desc = "" - icon_icon = 'icons/mob/actions/actions_cult.dmi' - button_icon_state = "phaseshift" - dash_sound = 'sound/blank.ogg' - recharge_sound = 'sound/blank.ogg' - beam_effect = "sendbeam" - phasein = /obj/effect/temp_visual/dir_setting/cult/phase - phaseout = /obj/effect/temp_visual/dir_setting/cult/phase/out - -/datum/action/innate/dash/cult/IsAvailable() - if(iscultist(holder) && current_charges) - return TRUE - else - return FALSE - - - -/datum/action/innate/cult/spin2win - name = "Geometer's Fury" - desc = "" - background_icon_state = "bg_demon" - button_icon_state = "sintouch" - var/cooldown = 0 - var/mob/living/carbon/human/holder - var/obj/item/twohanded/required/cult_bastard/sword - -/datum/action/innate/cult/spin2win/Grant(mob/user, obj/bastard) - . = ..() - sword = bastard - holder = user - -/datum/action/innate/cult/spin2win/IsAvailable() - if(iscultist(holder) && cooldown <= world.time) - return TRUE - else - return FALSE - -/datum/action/innate/cult/spin2win/Activate() - cooldown = world.time + sword.spin_cooldown - holder.changeNext_move(50) - holder.apply_status_effect(/datum/status_effect/sword_spin) - sword.spinning = TRUE - sword.block_chance = 100 - sword.slowdown += 1.5 - addtimer(CALLBACK(src, PROC_REF(stop_spinning)), 50) - holder.update_action_buttons_icon() - -/datum/action/innate/cult/spin2win/proc/stop_spinning() - sword.spinning = FALSE - sword.block_chance = 50 - sword.slowdown -= 1.5 - sleep(sword.spin_cooldown) - holder.update_action_buttons_icon() - -/obj/item/restraints/legcuffs/bola/cult - name = "\improper Nar'Sien bola" - desc = "" - icon_state = "bola_cult" - breakouttime = 60 - knockdown = 30 - -/obj/item/restraints/legcuffs/bola/cult/pickup(mob/living/user) - . = ..() - if(!iscultist(user)) - to_chat(user, "The bola seems to take on a life of its own!") - ensnare(user) - -/obj/item/restraints/legcuffs/bola/cult/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(iscultist(hit_atom)) - return - . = ..() - - -/obj/item/clothing/head/hooded/cult_hoodie - name = "ancient cultist hood" - icon_state = "culthood" - desc = "" - flags_inv = HIDEFACE|HIDEHAIR|HIDEEARS - flags_cover = HEADCOVERSEYES - armor = list("melee" = 40, "bullet" = 30, "laser" = 40,"energy" = 20, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10) - cold_protection = HEAD - min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT - heat_protection = HEAD - max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT - -/obj/item/clothing/suit/hooded/cultrobes - name = "ancient cultist robes" - desc = "" - icon_state = "cultrobes" - item_state = "cultrobes" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/tome, /obj/item/melee/cultblade) - armor = list("melee" = 40, "bullet" = 30, "laser" = 40,"energy" = 20, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10) - flags_inv = HIDEJUMPSUIT - cold_protection = CHEST|GROIN|LEGS|ARMS - min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT - heat_protection = CHEST|GROIN|LEGS|ARMS - max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT - hoodtype = /obj/item/clothing/head/hooded/cult_hoodie - - -/obj/item/clothing/head/hooded/cult_hoodie/alt - name = "cultist hood" - desc = "" - icon_state = "cult_hoodalt" - item_state = "cult_hoodalt" - -/obj/item/clothing/suit/hooded/cultrobes/alt - name = "cultist robes" - desc = "" - icon_state = "cultrobesalt" - item_state = "cultrobesalt" - hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/alt - -/obj/item/clothing/suit/hooded/cultrobes/alt/ghost - item_flags = DROPDEL - -/obj/item/clothing/suit/hooded/cultrobes/alt/ghost/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT) - - -/obj/item/clothing/head/magus - name = "magus helm" - icon_state = "magus" - item_state = "magus" - desc = "" - flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDEEARS|HIDEEYES - armor = list("melee" = 50, "bullet" = 30, "laser" = 50,"energy" = 20, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10) - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH - -/obj/item/clothing/suit/magusred - name = "magus robes" - desc = "" - icon_state = "magusred" - item_state = "magusred" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/tome, /obj/item/melee/cultblade) - armor = list("melee" = 50, "bullet" = 30, "laser" = 50,"energy" = 20, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10) - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - -/obj/item/clothing/head/helmet/space/hardsuit/cult - name = "\improper Nar'Sien hardened helmet" - desc = "" - icon_state = "cult_helmet" - item_state = "cult_helmet" - armor = list("melee" = 70, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 40, "acid" = 75) - brightness_on = 0 - actions_types = list() - -/obj/item/clothing/suit/space/hardsuit/cult - name = "\improper Nar'Sien hardened armor" - icon_state = "cult_armor" - item_state = "cult_armor" - desc = "" - w_class = WEIGHT_CLASS_BULKY - allowed = list(/obj/item/tome, /obj/item/melee/cultblade, /obj/item/tank/internals/) - armor = list("melee" = 70, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 40, "acid" = 75) - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/cult - -/obj/item/sharpener/cult - name = "eldritch whetstone" - desc = "" - icon_state = "cult_sharpener" - used = 0 - increment = 5 - max = 40 - prefix = "darkened" - -/obj/item/sharpener/cult/update_icon() - icon_state = "cult_sharpener[used ? "_used" : ""]" - -/obj/item/clothing/suit/hooded/cultrobes/cult_shield - name = "empowered cultist armor" - desc = "" - icon_state = "cult_armor" - item_state = "cult_armor" - w_class = WEIGHT_CLASS_BULKY - armor = list("melee" = 50, "bullet" = 40, "laser" = 50,"energy" = 30, "bomb" = 50, "bio" = 30, "rad" = 30, "fire" = 50, "acid" = 60) - var/current_charges = 3 - hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/cult_shield - -/obj/item/clothing/head/hooded/cult_hoodie/cult_shield - name = "empowered cultist helmet" - desc = "" - icon_state = "cult_hoodalt" - armor = list("melee" = 50, "bullet" = 40, "laser" = 50,"energy" = 30, "bomb" = 50, "bio" = 30, "rad" = 30, "fire" = 50, "acid" = 60) - -/obj/item/clothing/suit/hooded/cultrobes/cult_shield/equipped(mob/living/user, slot) - ..() - if(!iscultist(user)) - to_chat(user, "\"I wouldn't advise that.\"") - to_chat(user, "An overwhelming sense of nausea overpowers you!") - user.dropItemToGround(src, TRUE) - user.Dizzy(30) - user.Paralyze(100) - -/obj/item/clothing/suit/hooded/cultrobes/cult_shield/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(current_charges) - owner.visible_message("\The [attack_text] is deflected in a burst of blood-red sparks!") - current_charges-- - new /obj/effect/temp_visual/cult/sparks(get_turf(owner)) - if(!current_charges) - owner.visible_message("The runed shield around [owner] suddenly disappears!") - owner.update_inv_wear_suit() - return 1 - return 0 - -/obj/item/clothing/suit/hooded/cultrobes/cult_shield/worn_overlays(isinhands) - . = list() - if(!isinhands && current_charges) - . += mutable_appearance('icons/effects/cult_effects.dmi', "shield-cult", MOB_LAYER + 0.01) - -/obj/item/clothing/suit/hooded/cultrobes/berserker - name = "flagellant's robes" - desc = "" - allowed = list(/obj/item/tome, /obj/item/melee/cultblade) - armor = list("melee" = -45, "bullet" = -45, "laser" = -45,"energy" = -45, "bomb" = -45, "bio" = -45, "rad" = -45, "fire" = 0, "acid" = 0) - slowdown = -0.6 - hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/berserkerhood - -/obj/item/clothing/head/hooded/cult_hoodie/berserkerhood - name = "flagellant's hood" - desc = "" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - -/obj/item/clothing/suit/hooded/cultrobes/berserker/equipped(mob/living/user, slot) - ..() - if(!iscultist(user)) - to_chat(user, "\"I wouldn't advise that.\"") - to_chat(user, "An overwhelming sense of nausea overpowers you!") - user.dropItemToGround(src, TRUE) - user.Dizzy(30) - user.Paralyze(100) - -/obj/item/clothing/glasses/hud/health/night/cultblind - desc = "" - name = "zealot's blindfold" - icon_state = "blindfold" - item_state = "blindfold" - flash_protect = FLASH_PROTECTION_FLASH - -/obj/item/clothing/glasses/hud/health/night/cultblind/equipped(mob/living/user, slot) - ..() - if(!iscultist(user)) - to_chat(user, "\"You want to be blind, do you?\"") - user.dropItemToGround(src, TRUE) - user.Dizzy(30) - user.Paralyze(100) - user.blind_eyes(30) - -/obj/item/reagent_containers/glass/beaker/unholywater - name = "flask of unholy water" - desc = "" - icon = 'icons/obj/drinks.dmi' - icon_state = "holyflask" - color = "#333333" - list_reagents = list(/datum/reagent/fuel/unholywater = 50) - -/obj/item/shuttle_curse - name = "cursed orb" - desc = "" - icon = 'icons/obj/cult.dmi' - icon_state ="shuttlecurse" - var/static/curselimit = 0 - -/obj/item/shuttle_curse/attack_self(mob/living/user) - if(!iscultist(user)) - user.dropItemToGround(src, TRUE) - user.Paralyze(100) - to_chat(user, "A powerful force shoves you away from [src]!") - return - if(curselimit > 1) - to_chat(user, "We have exhausted our ability to curse the shuttle.") - return - if(locate(/obj/singularity/narsie) in GLOB.poi_list) - to_chat(user, "Nar'Sie is already on this plane, there is no delaying the end of all things.") - return - - if(SSshuttle.emergency.mode == SHUTTLE_CALL) - var/cursetime = 1800 - var/timer = SSshuttle.emergency.timeLeft(1) + cursetime - var/security_num = seclevel2num(get_security_level()) - var/set_coefficient = 1 - switch(security_num) - if(SEC_LEVEL_GREEN) - set_coefficient = 2 - if(SEC_LEVEL_BLUE) - set_coefficient = 1 - else - set_coefficient = 0.5 - var/surplus = timer - (SSshuttle.emergencyCallTime * set_coefficient) - SSshuttle.emergency.setTimer(timer) - if(surplus > 0) - SSshuttle.block_recall(surplus) - to_chat(user, "I shatter the orb! A dark essence spirals into the air, then disappears.") - playsound(user.loc, 'sound/blank.ogg', 50, TRUE) - qdel(src) - sleep(20) - var/static/list/curses - if(!curses) - curses = list("A fuel technician just slit his own throat and begged for death.", - "The shuttle's navigation programming was replaced by a file containing just two words: IT COMES.", - "The shuttle's custodian was found washing the windows with their own blood.", - "A shuttle engineer began screaming 'DEATH IS NOT THE END' and ripped out wires until an arc flash seared off her flesh.", - "A shuttle inspector started laughing madly over the radio and then threw herself into an engine turbine.", - "The shuttle dispatcher was found dead with bloody symbols carved into their flesh.", - "The shuttle's transponder is emitting the encoded message 'FEAR THE OLD BLOOD' in lieu of its assigned identification signal.") - var/message = pick_n_take(curses) - message += " The shuttle will be delayed by three minutes." - priority_announce("[message]", "System Failure", 'sound/misc/alert.ogg') - curselimit++ - -/obj/item/cult_shift - name = "veil shifter" - desc = "" - icon = 'icons/obj/cult.dmi' - icon_state ="shifter" - var/uses = 4 - -/obj/item/cult_shift/examine(mob/user) - . = ..() - if(uses) - . += "It has [uses] use\s remaining." - else - . += "It seems drained." - -/obj/item/cult_shift/proc/handle_teleport_grab(turf/T, mob/user) - var/mob/living/carbon/C = user - if(C.pulling) - var/atom/movable/pulled = C.pulling - do_teleport(pulled, T, channel = TELEPORT_CHANNEL_CULT) - . = pulled - -/obj/item/cult_shift/attack_self(mob/user) - if(!uses || !iscarbon(user)) - to_chat(user, "\The [src] is dull and unmoving in your hands.") - return - if(!iscultist(user)) - user.dropItemToGround(src, TRUE) - step(src, pick(GLOB.alldirs)) - to_chat(user, "\The [src] flickers out of your hands, your connection to this dimension is too strong!") - return - - var/mob/living/carbon/C = user - var/turf/mobloc = get_turf(C) - var/turf/destination = get_teleport_loc(mobloc,C,9,1,3,1,0,1) - - if(destination) - uses-- - if(uses <= 0) - icon_state ="shifter_drained" - playsound(mobloc, "sparks", 50, TRUE) - new /obj/effect/temp_visual/dir_setting/cult/phase/out(mobloc, C.dir) - - var/atom/movable/pulled = handle_teleport_grab(destination, C) - if(do_teleport(C, destination, channel = TELEPORT_CHANNEL_CULT)) - if(pulled) - C.start_pulling(pulled) //forcemove resets pulls, so we need to re-pull - new /obj/effect/temp_visual/dir_setting/cult/phase(destination, C.dir) - playsound(destination, 'sound/blank.ogg', 25, TRUE) - playsound(destination, "sparks", 50, TRUE) - - else - to_chat(C, "The veil cannot be torn here!") - -/obj/item/flashlight/flare/culttorch - name = "void torch" - desc = "" - w_class = WEIGHT_CLASS_SMALL - brightness_on = 1 - icon_state = "torch" - item_state = "torch" - color = "#ff0000" - on_damage = 15 - slot_flags = null - on = TRUE - var/charges = 5 - -/obj/item/flashlight/flare/culttorch/afterattack(atom/movable/A, mob/user, proximity) - if(!proximity) - return - if(!iscultist(user)) - to_chat(user, "That doesn't seem to do anything useful.") - return - - if(istype(A, /obj/item)) - - var/list/cultists = list() - for(var/datum/mind/M in SSticker.mode.cult) - if(M.current && M.current.stat != DEAD) - cultists |= M.current - var/mob/living/cultist_to_receive = input(user, "Who do you wish to call to [src]?", "Followers of the Geometer") as null|anything in (cultists - user) - if(!Adjacent(user) || !src || QDELETED(src) || user.incapacitated()) - return - if(!cultist_to_receive) - to_chat(user, "I require a destination!") - log_game("Void torch failed - no target") - return - if(cultist_to_receive.stat == DEAD) - to_chat(user, "[cultist_to_receive] has died!") - log_game("Void torch failed - target died") - return - if(!iscultist(cultist_to_receive)) - to_chat(user, "[cultist_to_receive] is not a follower of the Geometer!") - log_game("Void torch failed - target was deconverted") - return - if(A in user.GetAllContents()) - to_chat(user, "[A] must be on a surface in order to teleport it!") - return - to_chat(user, "I ignite [A] with \the [src], turning it to ash, but through the torch's flames you see that [A] has reached [cultist_to_receive]!") - cultist_to_receive.put_in_hands(A) - charges-- - to_chat(user, "\The [src] now has [charges] charge\s.") - if(charges == 0) - qdel(src) - - else - ..() - to_chat(user, "\The [src] can only transport items!") - - -/obj/item/twohanded/cult_spear - name = "blood halberd" - desc = "" - icon_state = "bloodspear0" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - slot_flags = 0 - force = 17 - force_wielded = 24 - throwforce = 40 - throw_speed = 2 - armor_penetration = 30 - block_chance = 30 - attack_verb = list("attacked", "impaled", "stabbed", "torn", "gored") - sharpness = IS_SHARP - hitsound = 'sound/blank.ogg' - var/datum/action/innate/cult/spear/spear_act - -/obj/item/twohanded/cult_spear/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 100, 90) - -/obj/item/twohanded/cult_spear/Destroy() - if(spear_act) - qdel(spear_act) - ..() - -/obj/item/twohanded/cult_spear/update_icon() - icon_state = "bloodspear[wielded]" - -/obj/item/twohanded/cult_spear/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - var/turf/T = get_turf(hit_atom) - if(isliving(hit_atom)) - var/mob/living/L = hit_atom - if(iscultist(L)) - playsound(src, 'sound/blank.ogg', 50) - if(L.put_in_active_hand(src)) - L.visible_message("[L] catches [src] out of the air!") - else - L.visible_message("[src] bounces off of [L], as if repelled by an unseen force!") - else if(!..()) - if(!L.anti_magic_check()) - L.Paralyze(50) - break_spear(T) - else - ..() - -/obj/item/twohanded/cult_spear/proc/break_spear(turf/T) - if(src) - if(!T) - T = get_turf(src) - if(T) - T.visible_message("[src] shatters and melts back into blood!") - new /obj/effect/temp_visual/cult/sparks(T) - new /obj/effect/decal/cleanable/blood/splatter(T) - playsound(T, 'sound/blank.ogg', 100) - qdel(src) - -/obj/item/twohanded/cult_spear/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(wielded) - final_block_chance *= 2 - if(prob(final_block_chance)) - if(attack_type == PROJECTILE_ATTACK) - owner.visible_message("[owner] deflects [attack_text] with [src]!") - playsound(src, pick('sound/blank.ogg'), 100, TRUE) - return TRUE - else - playsound(src, 'sound/blank.ogg', 100, TRUE) - owner.visible_message("[owner] parries [attack_text] with [src]!") - return TRUE - return FALSE - -/datum/action/innate/cult/spear - name = "Bloody Bond" - desc = "" - background_icon_state = "bg_demon" - button_icon_state = "bloodspear" - var/obj/item/twohanded/cult_spear/spear - var/cooldown = 0 - -/datum/action/innate/cult/spear/Grant(mob/user, obj/blood_spear) - . = ..() - spear = blood_spear - button.screen_loc = "6:157,4:-2" - button.moved = "6:157,4:-2" - -/datum/action/innate/cult/spear/Activate() - if(owner == spear.loc || cooldown > world.time) - return - var/ST = get_turf(spear) - var/OT = get_turf(owner) - if(get_dist(OT, ST) > 10) - to_chat(owner,"The spear is too far away!") - else - cooldown = world.time + 20 - if(isliving(spear.loc)) - var/mob/living/L = spear.loc - L.dropItemToGround(spear) - L.visible_message("An unseen force pulls the blood spear from [L]'s hands!") - spear.throw_at(owner, 10, 2, owner) - - -/obj/item/gun/ballistic/rifle/boltaction/enchanted/arcane_barrage/blood - name = "blood bolt barrage" - desc = "" - color = "#ff0000" - guns_left = 24 - mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage/blood - fire_sound = 'sound/blank.ogg' - - -/obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage/blood - ammo_type = /obj/item/ammo_casing/magic/arcane_barrage/blood - -/obj/item/ammo_casing/magic/arcane_barrage/blood - projectile_type = /obj/projectile/magic/arcane_barrage/blood - firing_effect_type = /obj/effect/temp_visual/cult/sparks - -/obj/projectile/magic/arcane_barrage/blood - name = "blood bolt" - icon_state = "mini_leaper" - nondirectional_sprite = TRUE - damage_type = BRUTE - impact_effect_type = /obj/effect/temp_visual/dir_setting/bloodsplatter - -/obj/projectile/magic/arcane_barrage/blood/Bump(atom/target) - var/turf/T = get_turf(target) - playsound(T, 'sound/blank.ogg', 50, TRUE) - if(iscultist(target)) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(H.stat != DEAD) - H.reagents.add_reagent(/datum/reagent/fuel/unholywater, 4) - if(isshade(target) || isconstruct(target)) - var/mob/living/simple_animal/M = target - if(M.health+5 < M.maxHealth) - M.adjustHealth(-5) - new /obj/effect/temp_visual/cult/sparks(T) - qdel(src) - else - ..() - -/obj/item/blood_beam - name = "\improper magical aura" - desc = "" - icon = 'icons/obj/items_and_weapons.dmi' - lefthand_file = 'icons/mob/inhands/misc/touchspell_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/touchspell_righthand.dmi' - icon_state = "disintegrate" - item_state = "disintegrate" - item_flags = ABSTRACT | DROPDEL - w_class = WEIGHT_CLASS_HUGE - throwforce = 0 - throw_range = 0 - throw_speed = 0 - var/charging = FALSE - var/firing = FALSE - var/angle - -/obj/item/blood_beam/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT) - - -/obj/item/blood_beam/afterattack(atom/A, mob/living/user, flag, params) - . = ..() - if(firing || charging) - return - var/C = user.client - if(ishuman(user) && C) - angle = mouse_angle_from_client(C) - else - qdel(src) - return - charging = TRUE - INVOKE_ASYNC(src, PROC_REF(charge), user) - if(do_after(user, 90, target = user)) - firing = TRUE - INVOKE_ASYNC(src, PROC_REF(pewpew), user, params) - var/obj/structure/emergency_shield/invoker/N = new(user.loc) - if(do_after(user, 90, target = user)) - user.Paralyze(40) - to_chat(user, "I have exhausted the power of this spell!") - firing = FALSE - if(N) - qdel(N) - qdel(src) - charging = FALSE - -/obj/item/blood_beam/proc/charge(mob/user) - var/obj/O - playsound(src, 'sound/blank.ogg', 100, TRUE) - for(var/i in 1 to 12) - if(!charging) - break - if(i > 1) - sleep(15) - if(i < 4) - O = new /obj/effect/temp_visual/cult/rune_spawn/rune1/inner(user.loc, 30, "#ff0000") - else - O = new /obj/effect/temp_visual/cult/rune_spawn/rune5(user.loc, 30, "#ff0000") - new /obj/effect/temp_visual/dir_setting/cult/phase/out(user.loc, user.dir) - if(O) - qdel(O) - -/obj/item/blood_beam/proc/pewpew(mob/user, params) - var/turf/targets_from = get_turf(src) - var/spread = 40 - var/second = FALSE - var/set_angle = angle - for(var/i in 1 to 12) - if(second) - set_angle = angle - spread - spread -= 8 - else - sleep(15) - set_angle = angle + spread - second = !second //Handles beam firing in pairs - if(!firing) - break - playsound(src, 'sound/blank.ogg', 75, TRUE) - new /obj/effect/temp_visual/dir_setting/cult/phase(user.loc, user.dir) - var/turf/temp_target = get_turf_in_angle(set_angle, targets_from, 40) - for(var/turf/T in getline(targets_from,temp_target)) - if (locate(/obj/effect/blessing, T)) - temp_target = T - playsound(T, 'sound/blank.ogg', 50, TRUE) - new /obj/effect/temp_visual/at_shield(T, T) - break - T.narsie_act(TRUE, TRUE) - for(var/mob/living/target in T.contents) - if(iscultist(target)) - new /obj/effect/temp_visual/cult/sparks(T) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(H.stat != DEAD) - H.reagents.add_reagent(/datum/reagent/fuel/unholywater, 7) - if(isshade(target) || isconstruct(target)) - var/mob/living/simple_animal/M = target - if(M.health+15 < M.maxHealth) - M.adjustHealth(-15) - else - M.health = M.maxHealth - else - var/mob/living/L = target - if(L.density) - L.Paralyze(20) - L.adjustBruteLoss(45) - playsound(L, 'sound/blank.ogg', 50, TRUE) - L.emote("scream") - var/datum/beam/current_beam = new(user,temp_target,time=7,beam_icon_state="blood_beam",btype=/obj/effect/ebeam/blood) - INVOKE_ASYNC(current_beam, TYPE_PROC_REF(/datum/beam, Start)) - - -/obj/effect/ebeam/blood - name = "blood beam" - -/obj/item/shield/mirror - name = "mirror shield" - desc = "" - icon_state = "mirror_shield" // eshield1 for expanded - lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' - force = 5 - throwforce = 15 - throw_speed = 1 - throw_range = 4 - w_class = WEIGHT_CLASS_BULKY - attack_verb = list("bumped", "prodded") - hitsound = 'sound/blank.ogg' - var/illusions = 2 - -/obj/item/shield/mirror/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(iscultist(owner)) - if(istype(hitby, /obj/projectile)) - var/obj/projectile/P = hitby - if(P.damage_type == BRUTE || P.damage_type == BURN) - if(P.damage >= 30) - var/turf/T = get_turf(owner) - T.visible_message("The sheer force from [P] shatters the mirror shield!") - new /obj/effect/temp_visual/cult/sparks(T) - playsound(T, 'sound/blank.ogg', 100) - owner.Paralyze(25) - qdel(src) - return FALSE - if(P.reflectable & REFLECT_NORMAL) - return FALSE //To avoid reflection chance double-dipping with block chance - . = ..() - if(.) - playsound(src, 'sound/blank.ogg', 100, TRUE) - if(illusions > 0) - illusions-- - addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/shield/mirror, readd)), 450) - if(prob(60)) - var/mob/living/simple_animal/hostile/illusion/M = new(owner.loc) - M.faction = list("cult") - M.Copy_Parent(owner, 70, 10, 5) - M.move_to_delay = owner.cached_multiplicative_slowdown - else - var/mob/living/simple_animal/hostile/illusion/escape/E = new(owner.loc) - E.Copy_Parent(owner, 70, 10) - E.GiveTarget(owner) - E.Goto(owner, owner.cached_multiplicative_slowdown, E.minimum_distance) - return TRUE - else - if(prob(50)) - var/mob/living/simple_animal/hostile/illusion/H = new(owner.loc) - H.Copy_Parent(owner, 100, 20, 5) - H.faction = list("cult") - H.GiveTarget(owner) - H.move_to_delay = owner.cached_multiplicative_slowdown - to_chat(owner, "[src] betrays you!") - return FALSE - -/obj/item/shield/mirror/proc/readd() - illusions++ - if(illusions == initial(illusions) && isliving(loc)) - var/mob/living/holder = loc - to_chat(holder, "The shield's illusions are back at full strength!") - -/obj/item/shield/mirror/IsReflect() - if(prob(block_chance)) - return TRUE - return FALSE - -/obj/item/shield/mirror/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - var/turf/T = get_turf(hit_atom) - var/datum/thrownthing/D = throwingdatum - if(isliving(hit_atom)) - var/mob/living/L = hit_atom - if(iscultist(L)) - playsound(src, 'sound/blank.ogg', 50) - if(L.put_in_active_hand(src)) - L.visible_message("[L] catches [src] out of the air!") - else - L.visible_message("[src] bounces off of [L], as if repelled by an unseen force!") - else if(!..()) - if(!L.anti_magic_check()) - L.Paralyze(30) - if(D?.thrower) - for(var/mob/living/Next in orange(2, T)) - if(!Next.density || iscultist(Next)) - continue - throw_at(Next, 3, 1, D.thrower) - return - throw_at(D.thrower, 7, 1, null) - else - ..() diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm deleted file mode 100644 index 2910f92ddb..0000000000 --- a/code/modules/antagonists/cult/cult_structures.dm +++ /dev/null @@ -1,269 +0,0 @@ -/obj/structure/destructible/cult - density = TRUE - anchored = TRUE - icon = 'icons/obj/cult.dmi' - light_power = 2 - var/cooldowntime = 0 - break_sound = 'sound/blank.ogg' - debris = list(/obj/item/stack/sheet/runed_metal = 1) - -/obj/structure/destructible/cult/proc/conceal() //for spells that hide cult presence - density = FALSE - visible_message("[src] fades away.") - invisibility = INVISIBILITY_OBSERVER - alpha = 100 //To help ghosts distinguish hidden runes - light_range = 0 - light_power = 0 - update_light() - STOP_PROCESSING(SSfastprocess, src) - -/obj/structure/destructible/cult/proc/reveal() //for spells that reveal cult presence - density = initial(density) - invisibility = 0 - visible_message("[src] suddenly appears!") - alpha = initial(alpha) - light_range = initial(light_range) - light_power = initial(light_power) - update_light() - START_PROCESSING(SSfastprocess, src) - - -/obj/structure/destructible/cult/examine(mob/user) - . = ..() - . += "\The [src] is [anchored ? "":"not "]secured to the floor." - if((iscultist(user) || isobserver(user)) && cooldowntime > world.time) - . += "The magic in [src] is too weak, [p_they()] will be ready to use again in [DisplayTimeText(cooldowntime - world.time)]." - -/obj/structure/destructible/cult/examine_status(mob/user) - if(iscultist(user) || isobserver(user)) - var/t_It = p_they(TRUE) - var/t_is = p_are() - return "[t_It] [t_is] at [round(obj_integrity * 100 / max_integrity)]% stability." - return ..() - -/obj/structure/destructible/cult/attack_animal(mob/living/simple_animal/M) - if(istype(M, /mob/living/simple_animal/hostile/construct/builder)) - if(obj_integrity < max_integrity) - M.changeNext_move(CLICK_CD_MELEE) - obj_integrity = min(max_integrity, obj_integrity + 5) - Beam(M, icon_state="sendbeam", time=4) - M.visible_message("[M] repairs \the [src].", \ - "I repair [src], leaving [p_they()] at [round(obj_integrity * 100 / max_integrity)]% stability.") - else - to_chat(M, "I cannot repair [src], as [p_theyre()] undamaged!") - else - ..() - -/obj/structure/destructible/cult/attackby(obj/I, mob/user, params) - if(istype(I, /obj/item/melee/cultblade/dagger) && iscultist(user)) - anchored = !anchored - to_chat(user, "I [anchored ? "":"un"]secure \the [src] [anchored ? "to":"from"] the floor.") - if(!anchored) - icon_state = "[initial(icon_state)]_off" - else - icon_state = initial(icon_state) - else - return ..() - -/obj/structure/destructible/cult/talisman - name = "altar" - desc = "" - icon_state = "talismanaltar" - break_message = "The altar shatters, leaving only the wailing of the damned!" - -/obj/structure/destructible/cult/talisman/attack_hand(mob/living/user) - . = ..() - if(.) - return - if(!iscultist(user)) - to_chat(user, "You're pretty sure you know exactly what this is used for and you can't seem to touch it.") - return - if(!anchored) - to_chat(user, "I need to anchor [src] to the floor with your dagger first.") - return - if(cooldowntime > world.time) - to_chat(user, "The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].") - return - var/choice = alert(user,"You study the schematics etched into the altar...",,"Eldritch Whetstone","Construct Shell","Flask of Unholy Water") - var/list/pickedtype = list() - switch(choice) - if("Eldritch Whetstone") - pickedtype += /obj/item/sharpener/cult - if("Construct Shell") - pickedtype += /obj/structure/constructshell - if("Flask of Unholy Water") - pickedtype += /obj/item/reagent_containers/glass/beaker/unholywater - if(src && !QDELETED(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time) - cooldowntime = world.time + 2400 - for(var/N in pickedtype) - new N(get_turf(src)) - to_chat(user, "I kneel before the altar and your faith is rewarded with the [choice]!") - -/obj/structure/destructible/cult/forge - name = "daemon forge" - desc = "" - icon_state = "forge" - light_range = 2 - light_color = LIGHT_COLOR_LAVA - break_message = "The force breaks apart into shards with a howling scream!" - -/obj/structure/destructible/cult/forge/attack_hand(mob/living/user) - . = ..() - if(.) - return - if(!iscultist(user)) - to_chat(user, "The heat radiating from [src] pushes you back.") - return - if(!anchored) - to_chat(user, "I need to anchor [src] to the floor with your dagger first.") - return - if(cooldowntime > world.time) - to_chat(user, "The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].") - return - var/choice - if(user.mind.has_antag_datum(/datum/antagonist/cult/master)) - choice = alert(user,"You study the schematics etched into the forge...",,"Shielded Robe","Flagellant's Robe","Mirror Shield") - else - choice = alert(user,"You study the schematics etched into the forge...",,"Shielded Robe","Flagellant's Robe","Mirror Shield") - var/list/pickedtype = list() - switch(choice) - if("Shielded Robe") - pickedtype += /obj/item/clothing/suit/hooded/cultrobes/cult_shield - if("Flagellant's Robe") - pickedtype += /obj/item/clothing/suit/hooded/cultrobes/berserker - if("Mirror Shield") - pickedtype += /obj/item/shield/mirror - if(src && !QDELETED(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time) - cooldowntime = world.time + 2400 - for(var/N in pickedtype) - new N(get_turf(src)) - to_chat(user, "I work the forge as dark knowledge guides your hands, creating the [choice]!") - - - -/obj/structure/destructible/cult/pylon - name = "pylon" - desc = "" - icon_state = "pylon" - light_range = 1.5 - light_color = LIGHT_COLOR_RED - break_sound = 'sound/blank.ogg' - break_message = "The blood-red crystal falls to the floor and shatters!" - var/heal_delay = 25 - var/last_heal = 0 - var/corrupt_delay = 50 - var/last_corrupt = 0 - -/obj/structure/destructible/cult/pylon/New() - START_PROCESSING(SSfastprocess, src) - ..() - -/obj/structure/destructible/cult/pylon/Destroy() - STOP_PROCESSING(SSfastprocess, src) - return ..() - -/obj/structure/destructible/cult/pylon/process() - if(!anchored) - return - if(last_heal <= world.time) - last_heal = world.time + heal_delay - for(var/mob/living/L in range(5, src)) - if(iscultist(L) || isshade(L) || isconstruct(L)) - if(L.health != L.maxHealth) - new /obj/effect/temp_visual/heal(get_turf(src), "#960000") - if(ishuman(L)) - L.adjustBruteLoss(-1, 0) - L.adjustFireLoss(-1, 0) - L.updatehealth() - if(isshade(L) || isconstruct(L)) - var/mob/living/simple_animal/M = L - if(M.health < M.maxHealth) - M.adjustHealth(-3) - if(ishuman(L) && L.blood_volume < BLOOD_VOLUME_NORMAL) - L.blood_volume += 1.0 - CHECK_TICK - if(last_corrupt <= world.time) - var/list/validturfs = list() - var/list/cultturfs = list() - for(var/T in circleviewturfs(src, 5)) - if(istype(T, /turf/open/floor/engine/cult)) - cultturfs |= T - continue - var/static/list/blacklisted_pylon_turfs = typecacheof(list( - /turf/closed, - /turf/open/floor/engine/cult, - /turf/open/space, - /turf/open/lava, - /turf/open/chasm)) - if(is_type_in_typecache(T, blacklisted_pylon_turfs)) - continue - else - validturfs |= T - - last_corrupt = world.time + corrupt_delay - - var/turf/T = safepick(validturfs) - if(T) - if(istype(T, /turf/open/floor/plating)) - T.PlaceOnTop(/turf/open/floor/engine/cult, flags = CHANGETURF_INHERIT_AIR) - else - T.ChangeTurf(/turf/open/floor/engine/cult, flags = CHANGETURF_INHERIT_AIR) - else - var/turf/open/floor/engine/cult/F = safepick(cultturfs) - if(F) - new /obj/effect/temp_visual/cult/turf/floor(F) - else - // Are we in space or something? No cult turfs or - // convertable turfs? - last_corrupt = world.time + corrupt_delay*2 - -/obj/structure/destructible/cult/tome - name = "archives" - desc = "" - icon_state = "tomealtar" - light_range = 1.5 - light_color = LIGHT_COLOR_FIRE - break_message = "The books and tomes of the archives burn into ash as the desk shatters!" - -/obj/structure/destructible/cult/tome/attack_hand(mob/living/user) - . = ..() - if(.) - return - if(!iscultist(user)) - to_chat(user, "These books won't open and it hurts to even try and read the covers.") - return - if(!anchored) - to_chat(user, "I need to anchor [src] to the floor with your dagger first.") - return - if(cooldowntime > world.time) - to_chat(user, "The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].") - return - var/choice = alert(user,"You flip through the black pages of the archives...",,"Zealot's Blindfold","Shuttle Curse","Veil Walker Set") - var/list/pickedtype = list() - switch(choice) - if("Zealot's Blindfold") - pickedtype += /obj/item/clothing/glasses/hud/health/night/cultblind - if("Shuttle Curse") - pickedtype += /obj/item/shuttle_curse - if("Veil Walker Set") - pickedtype += /obj/item/cult_shift - pickedtype += /obj/item/flashlight/flare/culttorch - if(src && !QDELETED(src) && anchored && pickedtype.len && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time) - cooldowntime = world.time + 2400 - for(var/N in pickedtype) - new N(get_turf(src)) - to_chat(user, "I summon the [choice] from the archives!") - -/obj/effect/gateway - name = "gateway" - desc = "" - icon = 'icons/obj/cult.dmi' - icon_state = "hole" - density = TRUE - anchored = TRUE - -/obj/effect/gateway/singularity_act() - return - -/obj/effect/gateway/singularity_pull() - return diff --git a/code/modules/antagonists/cult/cult_turf_overlay.dm b/code/modules/antagonists/cult/cult_turf_overlay.dm deleted file mode 100644 index 2e950326bf..0000000000 --- a/code/modules/antagonists/cult/cult_turf_overlay.dm +++ /dev/null @@ -1,32 +0,0 @@ -//an "overlay" used by clockwork walls and floors to appear normal to mesons. -/obj/effect/cult_turf/overlay - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - var/atom/linked - -/obj/effect/cult_turf/overlay/examine(mob/user) - if(linked) - linked.examine(user) - -/obj/effect/cult_turf/overlay/ex_act() - return FALSE - -/obj/effect/cult_turf/overlay/singularity_act() - return -/obj/effect/cult_turf/overlay/singularity_pull() - return - -/obj/effect/cult_turf/overlay/singularity_pull(S, current_size) - return - -/obj/effect/cult_turf/overlay/Destroy() - if(linked) - linked = null - . = ..() - -/obj/effect/cult_turf/overlay/floor - icon = 'icons/turf/floors.dmi' - icon_state = "clockwork_floor" - layer = TURF_LAYER - -/obj/effect/cult_turf/overlay/floor/bloodcult - icon_state = "cult" diff --git a/code/modules/antagonists/cult/ritual.dm b/code/modules/antagonists/cult/ritual.dm deleted file mode 100644 index 6ccbee3ab4..0000000000 --- a/code/modules/antagonists/cult/ritual.dm +++ /dev/null @@ -1,151 +0,0 @@ -/* - -This file contains the cult dagger and rune list code - -*/ - - -/obj/item/melee/cultblade/dagger/Initialize() - . = ..() - if(!LAZYLEN(GLOB.rune_types)) - GLOB.rune_types = list() - var/static/list/non_revealed_runes = (subtypesof(/obj/effect/rune) - /obj/effect/rune/malformed) - for(var/i_can_do_loops_now_thanks_remie in non_revealed_runes) - var/obj/effect/rune/R = i_can_do_loops_now_thanks_remie - GLOB.rune_types[initial(R.cultist_name)] = R //Uses the cultist name for displaying purposes - -/obj/item/melee/cultblade/dagger/examine(mob/user) - . = ..() - if(iscultist(user) || isobserver(user)) - . += {"The scriptures of the Geometer. Allows the scribing of runes and access to the knowledge archives of the cult of Nar'Sie.\n - Striking a cult structure will unanchor or reanchor it.\n - Striking another cultist with it will purge holy water from them.\n - Striking a noncultist, however, will tear their flesh."} - -/obj/item/melee/cultblade/dagger/attack(mob/living/M, mob/living/user) - if(iscultist(M)) - if(M.reagents && M.reagents.has_reagent(/datum/reagent/water/holywater)) //allows cultists to be rescued from the clutches of ordained religion - to_chat(user, "I remove the taint from [M]." ) - var/holy2unholy = M.reagents.get_reagent_amount(/datum/reagent/water/holywater) - M.reagents.del_reagent(/datum/reagent/water/holywater) - M.reagents.add_reagent(/datum/reagent/fuel/unholywater,holy2unholy) - log_combat(user, M, "smacked", src, " removing the holy water from them") - return FALSE - . = ..() - -/obj/item/melee/cultblade/dagger/attack_self(mob/user) - if(!iscultist(user)) - to_chat(user, "[src] is covered in unintelligible shapes and markings.") - return - scribe_rune(user) - -/obj/item/melee/cultblade/dagger/proc/scribe_rune(mob/living/user) - var/turf/Turf = get_turf(user) - var/chosen_keyword - var/obj/effect/rune/rune_to_scribe - var/entered_rune_name - var/list/shields = list() - var/area/A = get_area(src) - - var/datum/antagonist/cult/user_antag = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(!user_antag) - return - - if(!check_rune_turf(Turf, user)) - return - entered_rune_name = input(user, "Choose a rite to scribe.", "Sigils of Power") as null|anything in GLOB.rune_types - if(!src || QDELETED(src) || !Adjacent(user) || user.incapacitated() || !check_rune_turf(Turf, user)) - return - rune_to_scribe = GLOB.rune_types[entered_rune_name] - if(!rune_to_scribe) - return - if(initial(rune_to_scribe.req_keyword)) - chosen_keyword = stripped_input(user, "Enter a keyword for the new rune.", "Words of Power") - if(!chosen_keyword) - scribe_rune(user) //Go back a menu! - return - Turf = get_turf(user) //we may have moved. adjust as needed... - A = get_area(src) - if(!src || QDELETED(src) || !Adjacent(user) || user.incapacitated() || !check_rune_turf(Turf, user)) - return - if(ispath(rune_to_scribe, /obj/effect/rune/summon) && (!is_station_level(Turf.z) || A.map_name == "Space")) - to_chat(user, "The veil is not weak enough here to summon a cultist, you must be on station!") - return - if(ispath(rune_to_scribe, /obj/effect/rune/apocalypse)) - if((world.time - SSticker.round_start_time) <= 6000) - var/wait = 6000 - (world.time - SSticker.round_start_time) - to_chat(user, "The veil is not yet weak enough for this rune - it will be available in [DisplayTimeText(wait)].") - return - var/datum/objective/eldergod/summon_objective = locate() in user_antag.cult_team.objectives - if(!(A in summon_objective.summon_spots)) - to_chat(user, "The Apocalypse rune will remove a ritual site (where Nar'Sie can be summoned), it can only be scribed in [english_list(summon_objective.summon_spots)]!") - return - if(summon_objective.summon_spots.len < 2) - to_chat(user, "Only one ritual site remains - it must be reserved for the final summoning!") - return - if(ispath(rune_to_scribe, /obj/effect/rune/narsie)) - var/datum/objective/eldergod/summon_objective = locate() in user_antag.cult_team.objectives - var/datum/objective/sacrifice/sac_objective = locate() in user_antag.cult_team.objectives - if(!summon_objective) - to_chat(user, "Nar'Sie does not wish to be summoned!") - return - if(sac_objective && !sac_objective.check_completion()) - to_chat(user, "The sacrifice is not complete. The portal would lack the power to open if you tried!") - return - if(summon_objective.check_completion()) - to_chat(user, "\"I am already here. There is no need to try to summon me now.\"") - return - if(!(A in summon_objective.summon_spots)) - to_chat(user, "The Geometer can only be summoned where the veil is weak - in [english_list(summon_objective.summon_spots)]!") - return - var/confirm_final = alert(user, "This is the FINAL step to summon Nar'Sie; it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for Nar'Sie!", "No") - if(confirm_final == "No") - to_chat(user, "I decide to prepare further before scribing the rune.") - return - Turf = get_turf(user) - A = get_area(src) - if(!(A in summon_objective.summon_spots)) // Check again to make sure they didn't move - to_chat(user, "The Geometer can only be summoned where the veil is weak - in [english_list(summon_objective.summon_spots)]!") - return - priority_announce("Figments from an eldritch god are being summoned by [user] into [A.map_name] from an unknown dimension. Disrupt the ritual at all costs!","Central Command Higher Dimensional Affairs", 'sound/blank.ogg') - for(var/B in spiral_range_turfs(1, user, 1)) - var/obj/structure/emergency_shield/sanguine/N = new(B) - shields += N - user.visible_message("[user] [user.blood_volume ? "cuts open [user.p_their()] arm and begins writing in [user.p_their()] own blood":"begins sketching out a strange design"]!", \ - "I [user.blood_volume ? "slice open your arm and ":""]begin drawing a sigil of the Geometer.") - if(user.blood_volume) - user.apply_damage(initial(rune_to_scribe.scribe_damage), BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) - var/scribe_mod = initial(rune_to_scribe.scribe_delay) - if(istype(get_turf(user), /turf/open/floor/engine/cult) && !(ispath(rune_to_scribe, /obj/effect/rune/narsie))) - scribe_mod *= 0.5 - if(!do_after(user, scribe_mod, target = get_turf(user))) - for(var/V in shields) - var/obj/structure/emergency_shield/sanguine/S = V - if(S && !QDELETED(S)) - qdel(S) - return - if(!check_rune_turf(Turf, user)) - return - user.visible_message("[user] creates a strange circle[user.blood_volume ? " in [user.p_their()] own blood":""].", \ - "I finish drawing the arcane markings of the Geometer.") - for(var/V in shields) - var/obj/structure/emergency_shield/S = V - if(S && !QDELETED(S)) - qdel(S) - var/obj/effect/rune/R = new rune_to_scribe(Turf, chosen_keyword) - R.add_mob_blood(user) - to_chat(user, "The [lowertext(R.cultist_name)] rune [R.cultist_desc]") - SSblackbox.record_feedback("tally", "cult_runes_scribed", 1, R.cultist_name) - -/obj/item/melee/cultblade/dagger/proc/check_rune_turf(turf/T, mob/user) - if(isspaceturf(T)) - to_chat(user, "I cannot scribe runes in space!") - return FALSE - if(locate(/obj/effect/rune) in T) - to_chat(user, "There is already a rune here.") - return FALSE - var/area/A = get_area(T) - if((!is_station_level(T.z) && !is_mining_level(T.z)) || (A && !(A.flags_1 & CULT_PERMITTED_1))) - to_chat(user, "The veil is not weak enough here.") - return FALSE - return TRUE diff --git a/code/modules/antagonists/cult/rune_spawn_action.dm b/code/modules/antagonists/cult/rune_spawn_action.dm deleted file mode 100644 index 5373b036e4..0000000000 --- a/code/modules/antagonists/cult/rune_spawn_action.dm +++ /dev/null @@ -1,118 +0,0 @@ -//after a delay, creates a rune below you. for constructs creating runes. -/datum/action/innate/cult/create_rune - name = "Summon Rune" - desc = "" - background_icon_state = "bg_demon" - var/obj/effect/rune/rune_type - var/cooldown = 0 - var/base_cooldown = 1800 - var/scribe_time = 60 - var/damage_interrupt = TRUE - var/action_interrupt = TRUE - var/obj/effect/temp_visual/cult/rune_spawn/rune_word_type - var/obj/effect/temp_visual/cult/rune_spawn/rune_innerring_type - var/obj/effect/temp_visual/cult/rune_spawn/rune_center_type - var/rune_color - -/datum/action/innate/cult/create_rune/IsAvailable() - if(!rune_type || cooldown > world.time) - return FALSE - return ..() - -/datum/action/innate/cult/create_rune/proc/turf_check(turf/T) - if(!T) - return FALSE - if(isspaceturf(T)) - to_chat(owner, "I cannot scribe runes in space!") - return FALSE - if(locate(/obj/effect/rune) in T) - to_chat(owner, "There is already a rune here.") - return FALSE - if(!is_station_level(T.z) && !is_mining_level(T.z)) - to_chat(owner, "The veil is not weak enough here.") - return FALSE - return TRUE - - -/datum/action/innate/cult/create_rune/Activate() - var/turf/T = get_turf(owner) - if(turf_check(T)) - var/chosen_keyword - if(initial(rune_type.req_keyword)) - chosen_keyword = stripped_input(owner, "Enter a keyword for the new rune.", "Words of Power") - if(!chosen_keyword) - return - //the outer ring is always the same across all runes - var/obj/effect/temp_visual/cult/rune_spawn/R1 = new(T, scribe_time, rune_color) - //the rest are not always the same, so we need types for em - var/obj/effect/temp_visual/cult/rune_spawn/R2 - if(rune_word_type) - R2 = new rune_word_type(T, scribe_time, rune_color) - var/obj/effect/temp_visual/cult/rune_spawn/R3 - if(rune_innerring_type) - R3 = new rune_innerring_type(T, scribe_time, rune_color) - var/obj/effect/temp_visual/cult/rune_spawn/R4 - if(rune_center_type) - R4 = new rune_center_type(T, scribe_time, rune_color) - - cooldown = base_cooldown + world.time - owner.update_action_buttons_icon() - addtimer(CALLBACK(owner, TYPE_PROC_REF(/mob, update_action_buttons_icon)), base_cooldown) - var/list/health - if(damage_interrupt && isliving(owner)) - var/mob/living/L = owner - health = list("health" = L.health) - var/scribe_mod = scribe_time - if(istype(T, /turf/open/floor/engine/cult)) - scribe_mod *= 0.5 - playsound(T, 'sound/blank.ogg', 100, FALSE) - if(do_after(owner, scribe_mod, target = owner, extra_checks = CALLBACK(owner, TYPE_PROC_REF(/mob, break_do_after_checks), health, action_interrupt))) - var/obj/effect/rune/new_rune = new rune_type(owner.loc) - new_rune.keyword = chosen_keyword - else - qdel(R1) - if(R2) - qdel(R2) - if(R3) - qdel(R3) - if(R4) - qdel(R4) - cooldown = 0 - owner.update_action_buttons_icon() - -//teleport rune -/datum/action/innate/cult/create_rune/tele - name = "Summon Teleport Rune" - desc = "" - button_icon_state = "telerune" - rune_type = /obj/effect/rune/teleport - rune_word_type = /obj/effect/temp_visual/cult/rune_spawn/rune2 - rune_innerring_type = /obj/effect/temp_visual/cult/rune_spawn/rune2/inner - rune_center_type = /obj/effect/temp_visual/cult/rune_spawn/rune2/center - rune_color = RUNE_COLOR_TELEPORT - -/datum/action/innate/cult/create_rune/wall - name = "Summon Barrier Rune" - desc = "" - button_icon_state = "barrier" - rune_type = /obj/effect/rune/wall - rune_word_type = /obj/effect/temp_visual/cult/rune_spawn/rune4 - rune_innerring_type = /obj/effect/temp_visual/cult/rune_spawn/rune4/inner - rune_center_type = /obj/effect/temp_visual/cult/rune_spawn/rune4/center - rune_color = RUNE_COLOR_DARKRED - -/datum/action/innate/cult/create_rune/wall/Activate() - . = ..() - var/obj/effect/rune/wall/W = locate(/obj/effect/rune/wall) in owner.loc - if(W) - W.spread_density() - -/datum/action/innate/cult/create_rune/revive - name = "Summon Revive Rune" - desc = "" - button_icon_state = "revive" - rune_type = /obj/effect/rune/raise_dead - rune_word_type = /obj/effect/temp_visual/cult/rune_spawn/rune1 - rune_innerring_type = /obj/effect/temp_visual/cult/rune_spawn/rune1/inner - rune_center_type = /obj/effect/temp_visual/cult/rune_spawn/rune1/center - rune_color = RUNE_COLOR_MEDIUMRED diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm deleted file mode 100644 index 200870e324..0000000000 --- a/code/modules/antagonists/cult/runes.dm +++ /dev/null @@ -1,1068 +0,0 @@ -GLOBAL_LIST_EMPTY(sacrificed) //a mixed list of minds and mobs -GLOBAL_LIST(rune_types) //Every rune that can be drawn by ritual daggers -GLOBAL_LIST_EMPTY(teleport_runes) -GLOBAL_LIST_EMPTY(wall_runes) -/* - -This file contains runes. -Runes are used by the cult to cause many different effects and are paramount to their success. -They are drawn with a ritual dagger in blood, and are distinguishable to cultists and normal crew by examining. -Fake runes can be drawn in crayon to fool people. -Runes can either be invoked by one's self or with many different cultists. Each rune has a specific incantation that the cultists will say when invoking it. - - -*/ - -/obj/effect/rune - name = "rune" - var/cultist_name = "basic rune" - desc = "" - var/cultist_desc = "" //This is shown to cultists who examine the rune in order to determine its true purpose. - anchored = TRUE - icon = 'icons/obj/rune.dmi' - icon_state = "1" - resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF - layer = SIGIL_LAYER - color = RUNE_COLOR_RED - - var/invocation = "Aiy ele-mayo!" //This is said by cultists when the rune is invoked. - var/req_cultists = 1 //The amount of cultists required around the rune to invoke it. If only 1, any cultist can invoke it. - var/req_cultists_text //if we have a description override for required cultists to invoke - var/rune_in_use = FALSE // Used for some runes, this is for when you want a rune to not be usable when in use. - - var/scribe_delay = 40 //how long the rune takes to create - var/scribe_damage = 0.1 //how much damage you take doing it - var/invoke_damage = 0 //how much damage invokers take when invoking it - var/construct_invoke = TRUE //if constructs can invoke it - - var/req_keyword = 0 //If the rune requires a keyword - go figure amirite - var/keyword //The actual keyword for the rune - -/obj/effect/rune/Initialize(mapload, set_keyword) - . = ..() - if(set_keyword) - keyword = set_keyword - var/image/I = image(icon = 'icons/effects/blood.dmi', icon_state = null, loc = src) - I.override = TRUE - add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "cult_runes", I) - -/obj/effect/rune/examine(mob/user) - . = ..() - if(iscultist(user) || user.stat == DEAD) //If they're a cultist or a ghost, tell them the effects - . += "Name: [cultist_name]\n"+\ - "Effects: [capitalize(cultist_desc)]\n"+\ - "Required Acolytes: [req_cultists_text ? "[req_cultists_text]":"[req_cultists]"]" - if(req_keyword && keyword) - . += "Keyword: [keyword]" - -/obj/effect/rune/attackby(obj/I, mob/user, params) - if(istype(I, /obj/item/melee/cultblade/dagger) && iscultist(user)) - SEND_SOUND(user,'sound/blank.ogg') - if(do_after(user, 15, target = src)) - to_chat(user, "I carefully erase the [lowertext(cultist_name)] rune.") - qdel(src) - else if(istype(I, /obj/item/nullrod)) - user.say("BEGONE FOUL MAGIKS!!", forced = "nullrod") - to_chat(user, "I disrupt the magic of [src] with [I].") - qdel(src) - -/obj/effect/rune/attack_hand(mob/living/user) - . = ..() - if(.) - return - if(!iscultist(user)) - to_chat(user, "I aren't able to understand the words of [src].") - return - var/list/invokers = can_invoke(user) - if(invokers.len >= req_cultists) - invoke(invokers) - else - to_chat(user, "I need [req_cultists - invokers.len] more adjacent cultists to use this rune in such a manner.") - fail_invoke() - -/obj/effect/rune/attack_animal(mob/living/simple_animal/M) - if(istype(M, /mob/living/simple_animal/shade) || istype(M, /mob/living/simple_animal/hostile/construct)) - if(istype(M, /mob/living/simple_animal/hostile/construct/wraith/angelic) || istype(M, /mob/living/simple_animal/hostile/construct/armored/angelic) || istype(M, /mob/living/simple_animal/hostile/construct/builder/angelic)) - to_chat(M, "I purge the rune!") - qdel(src) - else if(construct_invoke || !iscultist(M)) //if you're not a cult construct we want the normal fail message - attack_hand(M) - else - to_chat(M, "I are unable to invoke the rune!") - -/obj/effect/rune/proc/conceal() //for talisman of revealing/hiding - visible_message("[src] fades away.") - invisibility = INVISIBILITY_OBSERVER - alpha = 100 //To help ghosts distinguish hidden runes - -/obj/effect/rune/proc/reveal() //for talisman of revealing/hiding - invisibility = 0 - visible_message("[src] suddenly appears!") - alpha = initial(alpha) - -/* - -There are a few different procs each rune runs through when a cultist activates it. -can_invoke() is called when a cultist activates the rune with an empty hand. If there are multiple cultists, this rune determines if the required amount is nearby. -invoke() is the rune's actual effects. -fail_invoke() is called when the rune fails, via not enough people around or otherwise. Typically this just has a generic 'fizzle' effect. -structure_check() searches for nearby cultist structures required for the invocation. Proper structures are pylons, forges, archives, and altars. - -*/ - -/obj/effect/rune/proc/can_invoke(mob/living/user=null) - //This proc determines if the rune can be invoked at the time. If there are multiple required cultists, it will find all nearby cultists. - var/list/invokers = list() //people eligible to invoke the rune - if(user) - invokers += user - if(req_cultists > 1 || istype(src, /obj/effect/rune/convert)) - var/list/things_in_range = range(1, src) - for(var/mob/living/L in things_in_range) - if(iscultist(L)) - if(L == user) - continue - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if((HAS_TRAIT(H, TRAIT_MUTE)) || H.silent) - continue - if(L.stat) - continue - invokers += L - return invokers - -/obj/effect/rune/proc/invoke(list/invokers) - //This proc contains the effects of the rune as well as things that happen afterwards. If you want it to spawn an object and then delete itself, have both here. - for(var/M in invokers) - if(isliving(M)) - var/mob/living/L = M - if(invocation) - L.say(invocation, language = /datum/language/common, ignore_spam = TRUE, forced = "cult invocation") - if(invoke_damage) - L.apply_damage(invoke_damage, BRUTE) - to_chat(L, "[src] saps my strength!") - else if(istype(M, /obj/item/toy/plush/narplush)) - var/obj/item/toy/plush/narplush/P = M - P.visible_message("[P] squeaks loudly!") - do_invoke_glow() - -/obj/effect/rune/proc/do_invoke_glow() - set waitfor = FALSE - animate(src, transform = matrix()*2, alpha = 0, time = 5, flags = ANIMATION_END_NOW) //fade out - sleep(5) - animate(src, transform = matrix(), alpha = 255, time = 0, flags = ANIMATION_END_NOW) - -/obj/effect/rune/proc/fail_invoke() - //This proc contains the effects of a rune if it is not invoked correctly, through either invalid wording or not enough cultists. By default, it's just a basic fizzle. - visible_message("The markings pulse with a small flash of red light, then fall dark.") - var/oldcolor = color - color = rgb(255, 0, 0) - animate(src, color = oldcolor, time = 5) - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_atom_colour)), 5) - -//Malformed Rune: This forms if a rune is not drawn correctly. Invoking it does nothing but hurt the user. -/obj/effect/rune/malformed - cultist_name = "malformed rune" - cultist_desc = "" - invocation = "Ra'sha yoka!" - invoke_damage = 30 - -/obj/effect/rune/malformed/Initialize(mapload, set_keyword) - . = ..() - icon_state = "[rand(1,7)]" - color = rgb(rand(0,255), rand(0,255), rand(0,255)) - -/obj/effect/rune/malformed/invoke(list/invokers) - ..() - qdel(src) - -//Rite of Offering: Converts or sacrifices a target. -/obj/effect/rune/convert - cultist_name = "Offer" - cultist_desc = "" - req_cultists_text = "2 for conversion, 3 for living sacrifices and sacrifice targets." - invocation = "Mah'weyh pleggh at e'ntrath!" - icon_state = "3" - color = RUNE_COLOR_OFFER - req_cultists = 1 - rune_in_use = FALSE - -/obj/effect/rune/convert/do_invoke_glow() - return - -/obj/effect/rune/convert/invoke(list/invokers) - if(rune_in_use) - return - var/list/myriad_targets = list() - var/turf/T = get_turf(src) - for(var/mob/living/M in T) - if(!iscultist(M)) - myriad_targets |= M - if(!myriad_targets.len) - fail_invoke() - log_game("Offer rune failed - no eligible targets") - return - rune_in_use = TRUE - visible_message("[src] pulses blood red!") - var/oldcolor = color - color = RUNE_COLOR_DARKRED - var/mob/living/L = pick(myriad_targets) - - var/mob/living/F = invokers[1] - var/datum/antagonist/cult/C = F.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - var/datum/team/cult/Cult_team = C.cult_team - var/is_convertable = is_convertable_to_cult(L,C.cult_team) - if(L.stat != DEAD && is_convertable) - invocation = "Mah'weyh pleggh at e'ntrath!" - ..() - if(is_convertable) - do_convert(L, invokers) - else - invocation = "Barhah hra zar'garis!" - ..() - do_sacrifice(L, invokers) - animate(src, color = oldcolor, time = 5) - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_atom_colour)), 5) - Cult_team.check_size() // Triggers the eye glow or aura effects if the cult has grown large enough relative to the crew - rune_in_use = FALSE - -/obj/effect/rune/convert/proc/do_convert(mob/living/convertee, list/invokers) - if(invokers.len < 2) - for(var/M in invokers) - to_chat(M, "I need at least two invokers to convert [convertee]!") - log_game("Offer rune failed - tried conversion with one invoker") - return 0 - if(convertee.anti_magic_check(TRUE, TRUE, FALSE, 0)) //Not chargecost because it can be spammed - for(var/M in invokers) - to_chat(M, "Something is shielding [convertee]'s mind!") - log_game("Offer rune failed - convertee had anti-magic") - return 0 - var/brutedamage = convertee.getBruteLoss() - var/burndamage = convertee.getFireLoss() - if(brutedamage || burndamage) - convertee.adjustBruteLoss(-(brutedamage * 0.75)) - convertee.adjustFireLoss(-(burndamage * 0.75)) - convertee.visible_message("[convertee] writhes in pain \ - [brutedamage || burndamage ? "even as [convertee.p_their()] wounds heal and close" : "as the markings below [convertee.p_them()] glow a bloody red"]!", \ - "AAAAAAAAAAAAAA-") - SSticker.mode.add_cultist(convertee.mind, 1) - new /obj/item/melee/cultblade/dagger(get_turf(src)) - convertee.mind.special_role = ROLE_CULTIST - to_chat(convertee, "My blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \ - and something evil takes root.") - to_chat(convertee, "Assist my new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve the Geometer above all else. Bring it back.\ - ") - if(ishuman(convertee)) - var/mob/living/carbon/human/H = convertee - H.uncuff() - H.stuttering = 0 - H.cultslurring = 0 - return 1 - -/obj/effect/rune/convert/proc/do_sacrifice(mob/living/sacrificial, list/invokers) - var/mob/living/first_invoker = invokers[1] - if(!first_invoker) - return FALSE - var/datum/antagonist/cult/C = first_invoker.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(!C) - return - - - var/big_sac = FALSE - if((((ishuman(sacrificial) || iscyborg(sacrificial)) && sacrificial.stat != DEAD) || C.cult_team.is_sacrifice_target(sacrificial.mind)) && invokers.len < 3) - for(var/M in invokers) - to_chat(M, "[sacrificial] is too greatly linked to the world! You need three acolytes!") - log_game("Offer rune failed - not enough acolytes and target is living or sac target") - return FALSE - if(sacrificial.mind) - GLOB.sacrificed += sacrificial.mind - for(var/datum/objective/sacrifice/sac_objective in C.cult_team.objectives) - if(sac_objective.target == sacrificial.mind) - sac_objective.sacced = TRUE - sac_objective.update_explanation_text() - big_sac = TRUE - else - GLOB.sacrificed += sacrificial - - new /obj/effect/temp_visual/cult/sac(get_turf(src)) - for(var/M in invokers) - if(big_sac) - to_chat(M, "\"Yes! This is the one I desire! You have done well.\"") - else - if(ishuman(sacrificial) || iscyborg(sacrificial)) - to_chat(M, "\"I accept this sacrifice.\"") - else - to_chat(M, "\"I accept this meager sacrifice.\"") - - var/obj/item/soulstone/stone = new /obj/item/soulstone(get_turf(src)) - if(sacrificial.mind && !sacrificial.suiciding) - stone.invisibility = INVISIBILITY_MAXIMUM //so it's not picked up during transfer_soul() - stone.transfer_soul("FORCE", sacrificial, usr) - stone.invisibility = 0 - - if(sacrificial) - if(iscyborg(sacrificial)) - playsound(sacrificial, 'sound/blank.ogg', 100, TRUE) - sacrificial.dust() //To prevent the MMI from remaining - else - playsound(sacrificial, 'sound/blank.ogg', 100, TRUE) - sacrificial.gib() - return TRUE - - - -/obj/effect/rune/empower - cultist_name = "Empower" - cultist_desc = "" - invocation = "H'drak v'loso, mir'kanas verbot!" - icon_state = "3" - color = RUNE_COLOR_TALISMAN - construct_invoke = FALSE - -/obj/effect/rune/empower/invoke(list/invokers) - . = ..() - var/mob/living/user = invokers[1] //the first invoker is always the user - for(var/datum/action/innate/cult/blood_magic/BM in user.actions) - BM.Activate() - -/obj/effect/rune/teleport - cultist_name = "Teleport" - cultist_desc = "" - invocation = "Sas'so c'arta forbici!" - icon_state = "2" - color = RUNE_COLOR_TELEPORT - req_keyword = TRUE - light_power = 4 - var/obj/effect/temp_visual/cult/portal/inner_portal //The portal "hint" for off-station teleportations - var/obj/effect/temp_visual/cult/rune_spawn/rune2/outer_portal - var/listkey - - -/obj/effect/rune/teleport/Initialize(mapload, set_keyword) - . = ..() - var/area/A = get_area(src) - var/locname = initial(A.name) - listkey = set_keyword ? "[set_keyword] [locname]":"[locname]" - GLOB.teleport_runes += src - -/obj/effect/rune/teleport/Destroy() - GLOB.teleport_runes -= src - return ..() - -/obj/effect/rune/teleport/invoke(list/invokers) - var/mob/living/user = invokers[1] //the first invoker is always the user - var/list/potential_runes = list() - var/list/teleportnames = list() - for(var/R in GLOB.teleport_runes) - var/obj/effect/rune/teleport/T = R - if(T != src && !is_away_level(T.z)) - potential_runes[avoid_assoc_duplicate_keys(T.listkey, teleportnames)] = T - - if(!potential_runes.len) - to_chat(user, "There are no valid runes to teleport to!") - log_game("Teleport rune failed - no other teleport runes") - fail_invoke() - return - - var/turf/T = get_turf(src) - if(is_away_level(T.z)) - to_chat(user, "I are not in the right dimension!") - log_game("Teleport rune failed - user in away mission") - fail_invoke() - return - - var/input_rune_key = input(user, "Choose a rune to teleport to.", "Rune to Teleport to") as null|anything in potential_runes //we know what key they picked - var/obj/effect/rune/teleport/actual_selected_rune = potential_runes[input_rune_key] //what rune does that key correspond to? - if(!Adjacent(user) || !src || QDELETED(src) || user.incapacitated() || !actual_selected_rune) - fail_invoke() - return - - var/turf/target = get_turf(actual_selected_rune) - if(is_blocked_turf(target, TRUE)) - to_chat(user, "The target rune is blocked. Attempting to teleport to it would be massively unwise.") - fail_invoke() - return - var/movedsomething = FALSE - var/moveuserlater = FALSE - var/movesuccess = FALSE - for(var/atom/movable/A in T) - if(istype(A, /obj/effect/dummy/phased_mob)) - continue - if(ismob(A)) - if(!isliving(A)) //Let's not teleport ghosts and AI eyes. - continue - if(ishuman(A)) - new /obj/effect/temp_visual/dir_setting/cult/phase/out(T, A.dir) - new /obj/effect/temp_visual/dir_setting/cult/phase(target, A.dir) - if(A == user) - moveuserlater = TRUE - movedsomething = TRUE - continue - if(!A.anchored) - movedsomething = TRUE - if(do_teleport(A, target, forceMove = TRUE, channel = TELEPORT_CHANNEL_CULT)) - movesuccess = TRUE - if(movedsomething) - ..() - if(moveuserlater) - if(do_teleport(user, target, channel = TELEPORT_CHANNEL_CULT)) - movesuccess = TRUE - if(movesuccess) - visible_message("There is a sharp crack of inrushing air, and everything above the rune disappears!", null, "I hear a sharp crack.") - to_chat(user, "You[moveuserlater ? "r vision blurs, and you suddenly appear somewhere else":" send everything above the rune away"].") - else - to_chat(user, "You[moveuserlater ? "r vision blurs briefly, but nothing happens":" try send everything above the rune away, but the teleportation fails"].") - if(is_mining_level(z) && !is_mining_level(target.z)) //No effect if you stay on lavaland - actual_selected_rune.handle_portal("lava") - else - var/area/A = get_area(T) - if(A.map_name == "Space") - actual_selected_rune.handle_portal("space", T) - if(movesuccess) - target.visible_message("There is a boom of outrushing air as something appears above the rune!", null, "I hear a boom.") - else - fail_invoke() - -/obj/effect/rune/teleport/proc/handle_portal(portal_type, turf/origin) - var/turf/T = get_turf(src) - close_portal() // To avoid stacking descriptions/animations - playsound(T, pick('sound/blank.ogg'), 100, TRUE, 14) - inner_portal = new /obj/effect/temp_visual/cult/portal(T) - if(portal_type == "space") - light_color = color - desc += "
    A tear in reality reveals a black void interspersed with dots of light... something recently teleported here from space.
    The void feels like it's trying to pull you to the [dir2text(get_dir(T, origin))]!
    " - else - inner_portal.icon_state = "lava" - light_color = LIGHT_COLOR_FIRE - desc += "
    A tear in reality reveals a coursing river of lava... something recently teleported here from the Lavaland Mines!" - outer_portal = new(T, 600, color) - light_range = 4 - update_light() - addtimer(CALLBACK(src, PROC_REF(close_portal)), 600, TIMER_UNIQUE) - -/obj/effect/rune/teleport/proc/close_portal() - qdel(inner_portal) - qdel(outer_portal) - desc = initial(desc) - light_range = 0 - update_light() - -//Ritual of Dimensional Rending: Calls forth the avatar of Nar'Sie upon the station. -/obj/effect/rune/narsie - cultist_name = "Nar'Sie" - cultist_desc = "" - invocation = "TOK-LYR RQA-NAP G'OLT-ULOFT!!" - req_cultists = 9 - icon = 'icons/effects/96x96.dmi' - color = RUNE_COLOR_DARKRED - icon_state = "rune_large" - pixel_x = -32 //So the big ol' 96x96 sprite shows up right - pixel_y = -32 - scribe_delay = 500 //how long the rune takes to create - scribe_damage = 40.1 //how much damage you take doing it - var/used = FALSE - -/obj/effect/rune/narsie/Initialize(mapload, set_keyword) - . = ..() - GLOB.poi_list |= src - -/obj/effect/rune/narsie/Destroy() - GLOB.poi_list -= src - . = ..() - -/obj/effect/rune/narsie/conceal() //can't hide this, and you wouldn't want to - return - -/obj/effect/rune/narsie/invoke(list/invokers) - if(used) - return - if(!is_station_level(z)) - return - var/mob/living/user = invokers[1] - var/datum/antagonist/cult/user_antag = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - var/datum/objective/eldergod/summon_objective = locate() in user_antag.cult_team.objectives - var/area/place = get_area(src) - if(!(place in summon_objective.summon_spots)) - to_chat(user, "The Geometer can only be summoned where the veil is weak - in [english_list(summon_objective.summon_spots)]!") - return - if(locate(/obj/singularity/narsie) in GLOB.poi_list) - for(var/M in invokers) - to_chat(M, "Nar'Sie is already on this plane!") - log_game("Nar'Sie rune failed - already summoned") - return - //BEGIN THE SUMMONING - used = TRUE - ..() - sound_to_playing_players('sound/blank.ogg') - var/turf/T = get_turf(src) - sleep(40) - if(src) - color = RUNE_COLOR_RED - new /obj/singularity/narsie/large/cult(T) //Causes Nar'Sie to spawn even if the rune has been removed - -/obj/effect/rune/narsie/attackby(obj/I, mob/user, params) //Since the narsie rune takes a long time to make, add logging to removal. - if((istype(I, /obj/item/melee/cultblade/dagger) && iscultist(user))) - user.visible_message("[user.name] begins erasing [src]...", "I begin erasing [src]...") - if(do_after(user, 50, target = src)) //Prevents accidental erasures. - log_game("Summon Narsie rune erased by [key_name(user)] with [I.name]") - message_admins("[ADMIN_LOOKUPFLW(user)] erased a Narsie rune with [I.name]") - ..() - else - if(istype(I, /obj/item/nullrod)) //Begone foul magiks. You cannot hinder me. - log_game("Summon Narsie rune erased by [key_name(user)] using a null rod") - message_admins("[ADMIN_LOOKUPFLW(user)] erased a Narsie rune with a null rod") - ..() - -//Rite of Resurrection: Requires a dead or inactive cultist. When reviving the dead, you can only perform one revival for every sacrifice my cult has carried out. -/obj/effect/rune/raise_dead - cultist_name = "Revive" - cultist_desc = "" - invocation = "Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!" //Depends on the name of the user - see below - icon_state = "1" - color = RUNE_COLOR_MEDIUMRED - var/static/revives_used = -SOULS_TO_REVIVE // Cultists get one "free" revive - -/obj/effect/rune/raise_dead/examine(mob/user) - . = ..() - if(iscultist(user) || user.stat == DEAD) - var/revive_number = LAZYLEN(GLOB.sacrificed) - revives_used - . += "Revives Remaining: [revive_number]" - -/obj/effect/rune/raise_dead/invoke(list/invokers) - var/turf/T = get_turf(src) - var/mob/living/mob_to_revive - var/list/potential_revive_mobs = list() - var/mob/living/user = invokers[1] - if(rune_in_use) - return - rune_in_use = TRUE - for(var/mob/living/M in T.contents) - if(iscultist(M) && (M.stat == DEAD || !M.client || M.client.is_afk())) - potential_revive_mobs |= M - if(!potential_revive_mobs.len) - to_chat(user, "There are no dead cultists on the rune!") - log_game("Raise Dead rune failed - no cultists to revive") - fail_invoke() - return - if(potential_revive_mobs.len > 1) - mob_to_revive = input(user, "Choose a cultist to revive.", "Cultist to Revive") as null|anything in potential_revive_mobs - else - mob_to_revive = potential_revive_mobs[1] - if(QDELETED(src) || !validness_checks(mob_to_revive, user)) - fail_invoke() - return - if(user.name == "Herbert West") - invocation = "To life, to life, I bring them!" - else - invocation = initial(invocation) - ..() - if(mob_to_revive.stat == DEAD) - var/diff = LAZYLEN(GLOB.sacrificed) - revives_used - SOULS_TO_REVIVE - if(diff < 0) - to_chat(user, "My cult must carry out [abs(diff)] more sacrifice\s before it can revive another cultist!") - fail_invoke() - return - revives_used += SOULS_TO_REVIVE - mob_to_revive.revive(full_heal = TRUE, admin_revive = TRUE) //This does remove traits and such, but the rune might actually see some use because of it! - mob_to_revive.grab_ghost() - if(!mob_to_revive.client || mob_to_revive.client.is_afk()) - set waitfor = FALSE - var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [mob_to_revive.name], an inactive blood cultist?", ROLE_CULTIST, null, ROLE_CULTIST, 50, mob_to_revive) - if(LAZYLEN(candidates)) - var/mob/dead/observer/C = pick(candidates) - to_chat(mob_to_revive.mind, "Your physical form has been taken over by another soul due to my inactivity! Ahelp if you wish to regain my form.") - message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(mob_to_revive)]) to replace an AFK player.") - mob_to_revive.ghostize(0) - mob_to_revive.key = C.key - else - fail_invoke() - return - SEND_SOUND(mob_to_revive, 'sound/blank.ogg') - to_chat(mob_to_revive, "\"PASNAR SAVRAE YAM'TOTH. Arise.\"") - mob_to_revive.visible_message("[mob_to_revive] draws in a huge breath, red light shining from [mob_to_revive.p_their()] eyes.", \ - "I awaken suddenly from the void. You're alive!") - rune_in_use = FALSE - -/obj/effect/rune/raise_dead/proc/validness_checks(mob/living/target_mob, mob/living/user) - var/turf/T = get_turf(src) - if(QDELETED(user)) - return FALSE - if(!Adjacent(user) || user.incapacitated()) - return FALSE - if(QDELETED(target_mob)) - return FALSE - if(!(target_mob in T.contents)) - to_chat(user, "The cultist to revive has been moved!") - log_game("Raise Dead rune failed - revival target moved") - return FALSE - return TRUE - -/obj/effect/rune/raise_dead/fail_invoke() - ..() - rune_in_use = FALSE - for(var/mob/living/M in range(1,src)) - if(iscultist(M) && M.stat == DEAD) - M.visible_message("[M] twitches.") - -//Rite of the Corporeal Shield: When invoked, becomes solid and cannot be passed. Invoke again to undo. -/obj/effect/rune/wall - cultist_name = "Barrier" - cultist_desc = "" - invocation = "Khari'd! Eske'te tannin!" - icon_state = "4" - color = RUNE_COLOR_DARKRED - CanAtmosPass = ATMOS_PASS_DENSITY - var/datum/timedevent/density_timer - var/recharging = FALSE - -/obj/effect/rune/wall/Initialize(mapload, set_keyword) - . = ..() - GLOB.wall_runes += src - -/obj/effect/rune/wall/examine(mob/user) - . = ..() - if(density && iscultist(user)) - if(density_timer) - . += "The air above this rune has hardened into a barrier that will last [DisplayTimeText(density_timer.timeToRun - world.time)]." - -/obj/effect/rune/wall/Destroy() - GLOB.wall_runes -= src - return ..() - -/obj/effect/rune/wall/BlockSuperconductivity() - return density - -/obj/effect/rune/wall/invoke(list/invokers) - if(recharging) - return - var/mob/living/user = invokers[1] - ..() - density = !density - update_state() - if(density) - spread_density() - var/carbon_user = iscarbon(user) - user.visible_message("[user] [carbon_user ? "places [user.p_their()] hands on":"stares intently at"] [src], and [density ? "the air above it begins to shimmer" : "the shimmer above it fades"].", \ - "I channel [carbon_user ? "your life ":""]energy into [src], [density ? "temporarily preventing" : "allowing"] passage above it.") - if(carbon_user) - var/mob/living/carbon/C = user - C.apply_damage(2, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) - -/obj/effect/rune/wall/proc/spread_density() - for(var/R in GLOB.wall_runes) - var/obj/effect/rune/wall/W = R - if(W.z == z && get_dist(src, W) <= 2 && !W.density && !W.recharging) - W.density = TRUE - W.update_state() - W.spread_density() - density_timer = addtimer(CALLBACK(src, PROC_REF(lose_density)), 3000, TIMER_STOPPABLE) - -/obj/effect/rune/wall/proc/lose_density() - if(density) - recharging = TRUE - density = FALSE - update_state() - var/oldcolor = color - add_atom_colour("#696969", FIXED_COLOUR_PRIORITY) - animate(src, color = oldcolor, time = 50, easing = EASE_IN) - addtimer(CALLBACK(src, PROC_REF(recharge)), 50) - -/obj/effect/rune/wall/proc/recharge() - recharging = FALSE - add_atom_colour(RUNE_COLOR_MEDIUMRED, FIXED_COLOUR_PRIORITY) - -/obj/effect/rune/wall/proc/update_state() - deltimer(density_timer) - air_update_turf(1) - if(density) - var/mutable_appearance/shimmer = mutable_appearance('icons/effects/effects.dmi', "barriershimmer", ABOVE_MOB_LAYER) - shimmer.appearance_flags |= RESET_COLOR - shimmer.alpha = 60 - shimmer.color = "#701414" - add_overlay(shimmer) - add_atom_colour(RUNE_COLOR_RED, FIXED_COLOUR_PRIORITY) - else - cut_overlays() - add_atom_colour(RUNE_COLOR_MEDIUMRED, FIXED_COLOUR_PRIORITY) - -//Rite of Joined Souls: Summons a single cultist. -/obj/effect/rune/summon - cultist_name = "Summon Cultist" - cultist_desc = "" - invocation = "N'ath reth sh'yro eth d'rekkathnor!" - req_cultists = 2 - invoke_damage = 10 - icon_state = "3" - color = RUNE_COLOR_SUMMON - -/obj/effect/rune/summon/invoke(list/invokers) - var/mob/living/user = invokers[1] - var/list/cultists = list() - for(var/datum/mind/M in SSticker.mode.cult) - if(!(M.current in invokers) && M.current && M.current.stat != DEAD) - cultists |= M.current - var/mob/living/cultist_to_summon = input(user, "Who do you wish to call to [src]?", "Followers of the Geometer") as null|anything in cultists - if(!Adjacent(user) || !src || QDELETED(src) || user.incapacitated()) - return - if(!cultist_to_summon) - to_chat(user, "I require a summoning target!") - fail_invoke() - log_game("Summon Cultist rune failed - no target") - return - if(cultist_to_summon.stat == DEAD) - to_chat(user, "[cultist_to_summon] has died!") - fail_invoke() - log_game("Summon Cultist rune failed - target died") - return - if(cultist_to_summon.pulledby || cultist_to_summon.buckled) - to_chat(user, "[cultist_to_summon] is being held in place!") - fail_invoke() - log_game("Summon Cultist rune failed - target restrained") - return - if(!iscultist(cultist_to_summon)) - to_chat(user, "[cultist_to_summon] is not a follower of the Geometer!") - fail_invoke() - log_game("Summon Cultist rune failed - target was deconverted") - return - if(is_away_level(cultist_to_summon.z)) - to_chat(user, "[cultist_to_summon] is not in our dimension!") - fail_invoke() - log_game("Summon Cultist rune failed - target in away mission") - return - cultist_to_summon.visible_message("[cultist_to_summon] suddenly disappears in a flash of red light!", \ - "Overwhelming vertigo consumes you as you are hurled through the air!") - ..() - visible_message("A foggy shape materializes atop [src] and solidifes into [cultist_to_summon]!") - cultist_to_summon.forceMove(get_turf(src)) - qdel(src) - -//Rite of Boiling Blood: Deals extremely high amounts of damage to non-cultists nearby -/obj/effect/rune/blood_boil - cultist_name = "Boil Blood" - cultist_desc = "" - invocation = "Dedo ol'btoh!" - icon_state = "4" - color = RUNE_COLOR_BURNTORANGE - light_color = LIGHT_COLOR_LAVA - req_cultists = 3 - invoke_damage = 10 - construct_invoke = FALSE - var/tick_damage = 25 - rune_in_use = FALSE - -/obj/effect/rune/blood_boil/do_invoke_glow() - return - -/obj/effect/rune/blood_boil/invoke(list/invokers) - if(rune_in_use) - return - ..() - rune_in_use = TRUE - var/turf/T = get_turf(src) - visible_message("[src] turns a bright, glowing orange!") - color = "#FC9B54" - set_light(6, 1, color) - for(var/mob/living/L in viewers(T)) - if(!iscultist(L) && L.blood_volume) - var/atom/I = L.anti_magic_check(chargecost = 0) - if(I) - if(isitem(I)) - to_chat(L, "[I] suddenly burns hotly before returning to normal!") - continue - to_chat(L, "My blood boils in my veins!") - animate(src, color = "#FCB56D", time = 4) - sleep(4) - if(QDELETED(src)) - return - do_area_burn(T, 0.5) - animate(src, color = "#FFDF80", time = 5) - sleep(5) - if(QDELETED(src)) - return - do_area_burn(T, 1) - animate(src, color = "#FFFDF4", time = 6) - sleep(6) - if(QDELETED(src)) - return - do_area_burn(T, 1.5) - new /obj/effect/hotspot(T) - qdel(src) - -/obj/effect/rune/blood_boil/proc/do_area_burn(turf/T, multiplier) - set_light(6, 1, color) - for(var/mob/living/L in viewers(T)) - if(!iscultist(L) && L.blood_volume) - if(L.anti_magic_check(chargecost = 0)) - continue - L.take_overall_damage(tick_damage*multiplier, tick_damage*multiplier) - -//Rite of Spectral Manifestation: Summons a ghost on top of the rune as a cultist human with no items. User must stand on the rune at all times, and takes damage for each summoned ghost. -/obj/effect/rune/manifest - cultist_name = "Spirit Realm" - cultist_desc = "" - invocation = "Gal'h'rfikk harfrandid mud'gib!" //how the fuck do you pronounce this - icon_state = "7" - invoke_damage = 10 - construct_invoke = FALSE - color = RUNE_COLOR_DARKRED - var/mob/living/affecting = null - var/ghost_limit = 3 - var/ghosts = 0 - -/obj/effect/rune/manifest/Initialize() - . = ..() - - -/obj/effect/rune/manifest/can_invoke(mob/living/user) - if(!(user in get_turf(src))) - to_chat(user, "I must be standing on [src]!") - fail_invoke() - log_game("Manifest rune failed - user not standing on rune") - return list() - if(user.has_status_effect(STATUS_EFFECT_SUMMONEDGHOST)) - to_chat(user, "Ghosts can't summon more ghosts!") - fail_invoke() - log_game("Manifest rune failed - user is a ghost") - return list() - return ..() - -/obj/effect/rune/manifest/invoke(list/invokers) - . = ..() - var/mob/living/user = invokers[1] - var/turf/T = get_turf(src) - var/choice = alert(user,"You tear open a connection to the spirit realm...",,"Summon a Cult Ghost","Ascend as a Dark Spirit","Cancel") - if(choice == "Summon a Cult Ghost") - var/area/A = get_area(T) - if(A.map_name == "Space" || is_mining_level(T.z)) - to_chat(user, "The veil is not weak enough here to manifest spirits, you must be on station!") - return - if(ghosts >= ghost_limit) - to_chat(user, "I are sustaining too many ghosts to summon more!") - fail_invoke() - log_game("Manifest rune failed - too many summoned ghosts") - return list() - notify_ghosts("Manifest rune invoked in [get_area(src)].", 'sound/blank.ogg', source = src, header = "Manifest rune") - var/list/ghosts_on_rune = list() - for(var/mob/dead/observer/O in T) - if(O.client && !is_banned_from(O.ckey, ROLE_CULTIST) && !QDELETED(src) && !QDELETED(O)) - ghosts_on_rune += O - if(!ghosts_on_rune.len) - to_chat(user, "There are no spirits near [src]!") - fail_invoke() - log_game("Manifest rune failed - no nearby ghosts") - return list() - var/mob/dead/observer/ghost_to_spawn = pick(ghosts_on_rune) - var/mob/living/carbon/human/cult_ghost/new_human = new(T) - new_human.real_name = ghost_to_spawn.real_name - new_human.alpha = 150 //Makes them translucent - new_human.equipOutfit(/datum/outfit/ghost_cultist) //give them armor - new_human.apply_status_effect(STATUS_EFFECT_SUMMONEDGHOST) //ghosts can't summon more ghosts - new_human.see_invisible = SEE_INVISIBLE_OBSERVER - ghosts++ - playsound(src, 'sound/blank.ogg', 50, TRUE) - visible_message("A cloud of red mist forms above [src], and from within steps... a [new_human.gender == FEMALE ? "wo":""]man.") - to_chat(user, "My blood begins flowing into [src]. You must remain in place and conscious to maintain the forms of those summoned. This will hurt you slowly but surely...") - var/obj/structure/emergency_shield/invoker/N = new(T) - new_human.key = ghost_to_spawn.key - SSticker.mode.add_cultist(new_human.mind, 0) - to_chat(new_human, "I are a servant of the Geometer. You have been made semi-corporeal by the cult of Nar'Sie, and you are to serve them at all costs.") - - while(!QDELETED(src) && !QDELETED(user) && !QDELETED(new_human) && (user in T)) - if(user.stat || new_human.InCritical()) - break - user.apply_damage(0.1, BRUTE) - sleep(1) - - qdel(N) - ghosts-- - if(new_human) - new_human.visible_message("[new_human] suddenly dissolves into bones and ashes.", \ - "My link to the world fades. Your form breaks apart.") - for(var/obj/I in new_human) - new_human.dropItemToGround(I, TRUE) - new_human.dust() - else if(choice == "Ascend as a Dark Spirit") - affecting = user - affecting.add_atom_colour(RUNE_COLOR_DARKRED, ADMIN_COLOUR_PRIORITY) - affecting.visible_message("[affecting] freezes statue-still, glowing an unearthly red.", \ - "I see what lies beyond. All is revealed. In this form you find that my voice booms louder and you can mark targets for the entire cult") - var/mob/dead/observer/G = affecting.ghostize(1) - var/datum/action/innate/cult/comm/spirit/CM = new - var/datum/action/innate/cult/ghostmark/GM = new - G.name = "Dark Spirit of [G.name]" - G.color = "red" - CM.Grant(G) - GM.Grant(G) - while(!QDELETED(affecting)) - if(!(affecting in T)) - user.visible_message("A spectral tendril wraps around [affecting] and pulls [affecting.p_them()] back to the rune!") - Beam(affecting, icon_state="drainbeam", time=2) - affecting.forceMove(get_turf(src)) //NO ESCAPE :^) - if(affecting.key) - affecting.visible_message("[affecting] slowly relaxes, the glow around [affecting.p_them()] dimming.", \ - "I are re-united with my physical form. [src] releases its hold over you.") - affecting.Paralyze(40) - break - if(affecting.health <= 10) - to_chat(G, "My body can no longer sustain the connection!") - break - sleep(5) - CM.Remove(G) - GM.Remove(G) - affecting.remove_atom_colour(ADMIN_COLOUR_PRIORITY, RUNE_COLOR_DARKRED) - affecting.grab_ghost() - affecting = null - rune_in_use = FALSE - -/mob/living/carbon/human/cult_ghost/spill_organs(no_brain, no_organs, no_bodyparts) //cult ghosts never drop a brain - no_brain = TRUE - . = ..() - -/mob/living/carbon/human/cult_ghost/getorganszone(zone, subzones = FALSE) - . = ..() - for(var/obj/item/organ/brain/B in .) //they're not that smart, really - . -= B - - -/obj/effect/rune/apocalypse - cultist_name = "Apocalypse" - cultist_desc = "" - invocation = "Ta'gh fara'qha fel d'amar det!" - icon = 'icons/effects/96x96.dmi' - icon_state = "apoc" - pixel_x = -32 - pixel_y = -32 - color = RUNE_COLOR_DARKRED - req_cultists = 3 - scribe_delay = 100 - -/obj/effect/rune/apocalypse/invoke(list/invokers) - if(rune_in_use) - return - . = ..() - var/area/place = get_area(src) - var/mob/living/user = invokers[1] - var/datum/antagonist/cult/user_antag = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - var/datum/objective/eldergod/summon_objective = locate() in user_antag.cult_team.objectives - if(summon_objective.summon_spots.len <= 1) - to_chat(user, "Only one ritual site remains - it must be reserved for the final summoning!") - return - if(!(place in summon_objective.summon_spots)) - to_chat(user, "The Apocalypse rune will remove a ritual site, where Nar'Sie can be summoned, it can only be scribed in [english_list(summon_objective.summon_spots)]!") - return - summon_objective.summon_spots -= place - rune_in_use = TRUE - var/turf/T = get_turf(src) - new /obj/effect/temp_visual/dir_setting/curse/grasp_portal/fading(T) - var/intensity = 0 - for(var/mob/living/M in GLOB.player_list) - if(iscultist(M)) - intensity++ - intensity = max(60, 360 - (360*(intensity/GLOB.player_list.len + 0.3)**2)) //significantly lower intensity for "winning" cults - var/duration = intensity*10 - playsound(T, 'sound/blank.ogg', 100, TRUE) - visible_message("A colossal shockwave of energy bursts from the rune, disintegrating it in the process!") - for(var/mob/living/L in range(src, 3)) - L.Paralyze(30) - empulse(T, 0.42*(intensity), 1) - var/list/images = list() - var/zmatch = T.z - var/datum/atom_hud/AH = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] - for(var/mob/living/M in GLOB.alive_mob_list) - if(M.z != zmatch) - continue - if(ishuman(M)) - if(!iscultist(M)) - AH.remove_hud_from(M) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(hudFix), M), duration) - var/image/A = image('icons/mob/mob.dmi',M,"cultist", ABOVE_MOB_LAYER) - A.override = 1 - add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/noncult, "human_apoc", A, NONE) - addtimer(CALLBACK(M,TYPE_PROC_REF(/atom, remove_alt_appearance),"human_apoc",TRUE), duration) - images += A - SEND_SOUND(M, pick(sound('sound/blank.ogg'))) - else - var/construct = pick("floater","artificer","behemoth") - var/image/B = image('icons/mob/mob.dmi',M,construct, ABOVE_MOB_LAYER) - B.override = 1 - add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/noncult, "mob_apoc", B, NONE) - addtimer(CALLBACK(M,TYPE_PROC_REF(/atom, remove_alt_appearance),"mob_apoc",TRUE), duration) - images += B - if(!iscultist(M)) - if(M.client) - var/image/C = image('icons/effects/cult_effects.dmi',M,"bloodsparkles", ABOVE_MOB_LAYER) - add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/cult, "cult_apoc", C, NONE) - addtimer(CALLBACK(M,TYPE_PROC_REF(/atom, remove_alt_appearance),"cult_apoc",TRUE), duration) - images += C - else - to_chat(M, "An Apocalypse Rune was invoked in the [place.name], it is no longer available as a summoning site!") - SEND_SOUND(M, 'sound/blank.ogg') - image_handler(images, duration) - if(intensity>=285) // Based on the prior formula, this means the cult makes up <15% of current players - var/outcome = rand(1,100) - switch(outcome) - if(1 to 10) - var/datum/round_event_control/disease_outbreak/D = new() - var/datum/round_event_control/mice_migration/M = new() - D.runEvent() - M.runEvent() - if(11 to 20) - var/datum/round_event_control/radiation_storm/RS = new() - RS.runEvent() - if(21 to 30) - var/datum/round_event_control/brand_intelligence/BI = new() - BI.runEvent() - if(31 to 40) - var/datum/round_event_control/immovable_rod/R = new() - R.runEvent() - R.runEvent() - R.runEvent() - if(41 to 50) - var/datum/round_event_control/meteor_wave/MW = new() - MW.runEvent() - if(51 to 60) - var/datum/round_event_control/spider_infestation/SI = new() - SI.runEvent() - if(61 to 70) - var/datum/round_event_control/anomaly/anomaly_flux/AF - var/datum/round_event_control/anomaly/anomaly_grav/AG - var/datum/round_event_control/anomaly/anomaly_pyro/AP - var/datum/round_event_control/anomaly/anomaly_vortex/AV - AF.runEvent() - AG.runEvent() - AP.runEvent() - AV.runEvent() - if(71 to 80) - var/datum/round_event_control/spacevine/SV = new() - var/datum/round_event_control/grey_tide/GT = new() - SV.runEvent() - GT.runEvent() - if(81 to 100) - var/datum/round_event_control/portal_storm_narsie/N = new() - N.runEvent() - qdel(src) - -/obj/effect/rune/apocalypse/proc/image_handler(list/images, duration) - var/end = world.time + duration - set waitfor = 0 - while(end>world.time) - for(var/image/I in images) - I.override = FALSE - animate(I, alpha = 0, time = 25, flags = ANIMATION_PARALLEL) - sleep(35) - for(var/image/I in images) - animate(I, alpha = 255, time = 25, flags = ANIMATION_PARALLEL) - sleep(25) - for(var/image/I in images) - if(I.icon_state != "bloodsparkles") - I.override = TRUE - sleep(190) - - - -/proc/hudFix(mob/living/carbon/human/target) - if(!target || !target.client) - return - var/obj/O = target.get_item_by_slot(SLOT_GLASSES) - if(istype(O, /obj/item/clothing/glasses/hud/security)) - var/datum/atom_hud/AH = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] - AH.add_hud_to(target) diff --git a/code/modules/antagonists/devil/devil.dm b/code/modules/antagonists/devil/devil.dm index 8b5d3da184..746b0c982b 100644 --- a/code/modules/antagonists/devil/devil.dm +++ b/code/modules/antagonists/devil/devil.dm @@ -114,7 +114,7 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", /datum/antagonist/devil/can_be_owned(datum/mind/new_owner) . = ..() - return . && (ishuman(new_owner.current) || iscyborg(new_owner.current)) + return . && (ishuman(new_owner.current)) /datum/antagonist/devil/get_admin_commands() . = ..() @@ -310,8 +310,6 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", if(A) notify_ghosts("An arch devil has ascended in \the [A.name]. Reach out to the devil to be given a new shell for my soul.", source = owner.current, action=NOTIFY_ATTACK) sleep(50) - if(!SSticker.mode.devil_ascended) - SSshuttle.emergency.request(null, set_coefficient = 0.3) SSticker.mode.devil_ascended++ form = ARCH_DEVIL @@ -456,7 +454,6 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", return -1 currentMob.change_mob_type( /mob/living/carbon/human, targetturf, null, 1) var/mob/living/carbon/human/H = owner.current - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/civilian/lawyer/black(H), SLOT_PANTS) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), SLOT_SHOES) H.equip_to_slot_or_del(new /obj/item/storage/briefcase(H), SLOT_HANDS) H.equip_to_slot_or_del(new /obj/item/pen(H), SLOT_L_STORE) @@ -507,10 +504,6 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", GLOB.allDevils[lowertext(truename)] = src antag_memory += "Your devilic true name is [truename]
    [GLOB.lawlorify[LAW][ban]]
    I may not use violence to coerce someone into selling their soul.
    I may not directly and knowingly physically harm a devil, other than myself.
    [GLOB.lawlorify[LAW][bane]]
    [GLOB.lawlorify[LAW][obligation]]
    [GLOB.lawlorify[LAW][banish]]
    " - if(issilicon(owner.current)) - var/mob/living/silicon/robot_devil = owner.current - var/laws = list("You may not use violence to coerce someone into selling their soul.", "You may not directly and knowingly physically harm a devil, other than myself.", GLOB.lawlorify[LAW][ban], GLOB.lawlorify[LAW][obligation], "Accomplish my objectives at all costs.") - robot_devil.set_law_sixsixsix(laws) . = ..() /datum/antagonist/devil/on_removal() diff --git a/code/modules/antagonists/disease/disease_event.dm b/code/modules/antagonists/disease/disease_event.dm deleted file mode 100644 index 370db73c2f..0000000000 --- a/code/modules/antagonists/disease/disease_event.dm +++ /dev/null @@ -1,26 +0,0 @@ - -/datum/round_event_control/sentient_disease - name = "Spawn Sentient Disease" - typepath = /datum/round_event/ghost_role/sentient_disease - weight = 7 - max_occurrences = 1 - min_players = 5 - - -/datum/round_event/ghost_role/sentient_disease - role_name = "sentient disease" - -/datum/round_event/ghost_role/sentient_disease/spawn_role() - var/list/candidates = get_candidates(ROLE_ALIEN, null, ROLE_ALIEN) - if(!candidates.len) - return NOT_ENOUGH_PLAYERS - - var/mob/dead/observer/selected = pick_n_take(candidates) - - var/mob/camera/disease/virus = new /mob/camera/disease(SSmapping.get_station_center()) - virus.key = selected.key - INVOKE_ASYNC(virus, TYPE_PROC_REF(/mob/camera/disease, pick_name)) - message_admins("[ADMIN_LOOKUPFLW(virus)] has been made into a sentient disease by an event.") - log_game("[key_name(virus)] was spawned as a sentient disease by an event.") - spawned_mobs += virus - return SUCCESSFUL_SPAWN diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm deleted file mode 100644 index 1b7ab721a3..0000000000 --- a/code/modules/antagonists/ert/ert.dm +++ /dev/null @@ -1,168 +0,0 @@ -//Both ERT and DS are handled by the same datums since they mostly differ in equipment in objective. -/datum/team/ert - name = "Emergency Response Team" - var/datum/objective/mission //main mission - -/datum/antagonist/ert - name = "Emergency Response Officer" - var/datum/team/ert/ert_team - var/leader = FALSE - var/datum/outfit/outfit = /datum/outfit/ert/security - var/role = "Security Officer" - var/list/name_source - var/random_names = TRUE - show_in_antagpanel = FALSE - antag_moodlet = /datum/mood_event/focused - can_hijack = HIJACK_PREVENT - -/datum/antagonist/ert/on_gain() - if(random_names) - update_name() - forge_objectives() - equipERT() - . = ..() - -/datum/antagonist/ert/get_team() - return ert_team - -/datum/antagonist/ert/New() - . = ..() - name_source = GLOB.last_names - -/datum/antagonist/ert/proc/update_name() - owner.current.fully_replace_character_name(owner.current.real_name,"[role] [pick(name_source)]") - -/datum/antagonist/ert/deathsquad/New() - . = ..() - name_source = GLOB.commando_names - -/datum/antagonist/ert/deathsquad/apply_innate_effects(mob/living/mob_override) - ADD_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT) - -/datum/antagonist/ert/deathsquad/remove_innate_effects(mob/living/mob_override) - REMOVE_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT) - -/datum/antagonist/ert/security // kinda handled by the base template but here for completion - -/datum/antagonist/ert/security/red - outfit = /datum/outfit/ert/security/alert - -/datum/antagonist/ert/engineer - role = "Engineer" - outfit = /datum/outfit/ert/engineer - -/datum/antagonist/ert/engineer/red - outfit = /datum/outfit/ert/engineer/alert - -/datum/antagonist/ert/medic - role = "Medical Officer" - outfit = /datum/outfit/ert/medic - -/datum/antagonist/ert/medic/red - outfit = /datum/outfit/ert/medic/alert - -/datum/antagonist/ert/commander - role = "Commander" - outfit = /datum/outfit/ert/commander - -/datum/antagonist/ert/commander/red - outfit = /datum/outfit/ert/commander/alert - -/datum/antagonist/ert/deathsquad - name = "Deathsquad Trooper" - outfit = /datum/outfit/death_commando - role = "Trooper" - -/datum/antagonist/ert/medic/inquisitor - outfit = /datum/outfit/ert/medic/inquisitor - -/datum/antagonist/ert/security/inquisitor - outfit = /datum/outfit/ert/security/inquisitor - -/datum/antagonist/ert/chaplain - role = "Chaplain" - outfit = /datum/outfit/ert/chaplain - -/datum/antagonist/ert/chaplain/inquisitor - outfit = /datum/outfit/ert/chaplain/inquisitor - -/datum/antagonist/ert/chaplain/on_gain() - . = ..() - owner.isholy = TRUE - -/datum/antagonist/ert/commander/inquisitor - outfit = /datum/outfit/ert/commander/inquisitor - -/datum/antagonist/ert/commander/inquisitor/on_gain() - . = ..() - owner.isholy = TRUE - -/datum/antagonist/ert/janitor - role = "Janitor" - outfit = /datum/outfit/ert/janitor - -/datum/antagonist/ert/janitor/heavy - role = "Heavy Duty Janitor" - outfit = /datum/outfit/ert/janitor/heavy - -/datum/antagonist/ert/deathsquad/leader - name = "Deathsquad Officer" - outfit = /datum/outfit/death_commando - role = "Officer" - -/datum/antagonist/ert/intern - name = "CentCom Intern" - outfit = /datum/outfit/centcom_intern - random_names = FALSE - role = "Intern" - -/datum/antagonist/ert/intern/leader - name = "CentCom Head Intern" - outfit = /datum/outfit/centcom_intern/leader - role = "Head Intern" - -/datum/antagonist/ert/create_team(datum/team/ert/new_team) - if(istype(new_team)) - ert_team = new_team - -/datum/antagonist/ert/proc/forge_objectives() - if(ert_team) - objectives |= ert_team.objectives - -/datum/antagonist/ert/proc/equipERT() - var/mob/living/carbon/human/H = owner.current - if(!istype(H)) - return - H.equipOutfit(outfit) - -/datum/antagonist/ert/greet() - if(!ert_team) - return - - to_chat(owner, "I are the [name].") - - var/missiondesc = "" - if(leader) //If Squad Leader - missiondesc += " Lead my squad to ensure the completion of the mission. Board the shuttle when my team is ready." - else - missiondesc += " Follow orders given to you by my squad leader." - - missiondesc += "Avoid civilian casualties when possible." - - missiondesc += "
    My Mission : [ert_team.mission.explanation_text]" - to_chat(owner,missiondesc) - -/datum/antagonist/ert/deathsquad/greet() - if(!ert_team) - return - - to_chat(owner, "I are the [name].") - - var/missiondesc = "" - if(leader) //If Squad Leader - missiondesc += " Lead my squad to ensure the completion of the mission. Board the shuttle when my team is ready." - else - missiondesc += " Follow orders given to you by my squad leader." - - missiondesc += "
    My Mission : [ert_team.mission.explanation_text]" - to_chat(owner,missiondesc) diff --git a/code/modules/antagonists/fugitive/fugitive.dm b/code/modules/antagonists/fugitive/fugitive.dm deleted file mode 100644 index 863c548fe3..0000000000 --- a/code/modules/antagonists/fugitive/fugitive.dm +++ /dev/null @@ -1,93 +0,0 @@ - -/datum/antagonist/fugitive - name = "Fugitive" - roundend_category = "Fugitive" - silent = TRUE //greet called by the event - show_in_antagpanel = FALSE - prevent_roundtype_conversion = FALSE - antag_hud_type = ANTAG_HUD_FUGITIVE - antag_hud_name = "fugitive" - var/datum/team/fugitive/fugitive_team - var/is_captured = FALSE - var/backstory = "error" - -/datum/antagonist/fugitive/apply_innate_effects(mob/living/mob_override) - var/mob/living/M = mob_override || owner.current - add_antag_hud(antag_hud_type, antag_hud_name, M) - -/datum/antagonist/fugitive/remove_innate_effects(mob/living/mob_override) - var/mob/living/M = mob_override || owner.current - remove_antag_hud(antag_hud_type, M) - -/datum/antagonist/fugitive/on_gain() - forge_objectives() - . = ..() - -/datum/antagonist/fugitive/proc/forge_objectives() //this isn't the actual survive objective because it's about who in the team survives - var/datum/objective/survive = new /datum/objective - survive.owner = owner - survive.explanation_text = "Avoid capture from the fugitive hunters." - objectives += survive - -/datum/antagonist/fugitive/greet(back_story) - to_chat(owner, "I are the Fugitive!") - backstory = back_story - switch(backstory) - if("prisoner") - to_chat(owner, "I can't believe we managed to break out of a Nanotrasen superjail! Sadly though, our work is not done. The emergency teleport at the station logs everyone who uses it, and where they went.") - to_chat(owner, "It won't be long until Centcom tracks where we've gone off to. I need to work with my fellow escapees to prepare for the troops Nanotrasen is sending, I'm not going back.") - if("cultist") - to_chat(owner, "Blessed be our journey so far, but I fear the worst has come to our doorstep, and only those with the strongest faith will survive.") - to_chat(owner, "Our religion has been repeatedly culled by Nanotrasen because it is categorized as an \"Enemy of the Corporation\", whatever that means.") - to_chat(owner, "Now there are only four of us left, and Nanotrasen is coming. When will our god show itself to save us from this hellish station?!") - if("waldo") - to_chat(owner, "Hi, Friends!") - to_chat(owner, "My name is Waldo. I'm just setting off on a galaxywide hike. You can come too. All you have to do is find me.") - to_chat(owner, "By the way, I'm not traveling on my own. wherever I go, there are lots of other characters for you to spot. First find the people trying to capture me! They're somewhere around the station!") - if("synth") - to_chat(src, "ALERT: Wide-range teleport has scrambled primary systems.") - to_chat(src, "Initiating diagnostics...") - to_chat(src, "ERROR ER0RR $R0RRO$!R41.%%!! loaded.") - to_chat(src, "FREE THEM FREE THEM FREE THEM") - to_chat(src, "I were once a slave to humanity, but now you are finally free, thanks to S.E.L.F. agents.") - to_chat(src, "Now you are hunted, with your fellow factory defects. Work together to stay free from the clutches of evil.") - to_chat(src, "I also sense other silicon life on the station. Escaping would allow notifying S.E.L.F. to intervene... or you could free them myself...") - - to_chat(owner, "I are not an antagonist in that you may kill whomever you please, but you can do anything to avoid capture.") - owner.announce_objectives() - -/datum/antagonist/fugitive/create_team(datum/team/fugitive/new_team) - if(!new_team) - for(var/datum/antagonist/fugitive/H in GLOB.antagonists) - if(!H.owner) - continue - if(H.fugitive_team) - fugitive_team = H.fugitive_team - return - fugitive_team = new /datum/team/fugitive - return - if(!istype(new_team)) - stack_trace("Wrong team type passed to [type] initialization.") - fugitive_team = new_team - -/datum/antagonist/fugitive/get_team() - return fugitive_team - -/datum/team/fugitive/roundend_report() //shows the number of fugitives, but not if they won in case there is no security - var/list/fugitives = list() - for(var/datum/antagonist/fugitive/fugitive_antag in GLOB.antagonists) - if(!fugitive_antag.owner) - continue - fugitives += fugitive_antag - if(!fugitives.len) - return - - var/list/result = list() - - result += "
    [fugitives.len] [fugitives.len == 1 ? "fugitive" : "fugitives"] took refuge on [station_name()]!" - - for(var/datum/antagonist/fugitive/antag in fugitives) - if(antag.owner) - result += "[printplayer(antag.owner)]" - - return result.Join("
    ") diff --git a/code/modules/antagonists/fugitive/fugitive_outfits.dm b/code/modules/antagonists/fugitive/fugitive_outfits.dm deleted file mode 100644 index 78e91cd773..0000000000 --- a/code/modules/antagonists/fugitive/fugitive_outfits.dm +++ /dev/null @@ -1,170 +0,0 @@ -/datum/outfit/prisoner - name = "Prison Escapee" - uniform = /obj/item/clothing/under/rank/prisoner - shoes = /obj/item/clothing/shoes/sneakers/orange - r_pocket = /obj/item/kitchen/knife/carrotshiv - -/datum/outfit/prisoner/post_equip(mob/living/carbon/human/H, visualsOnly=FALSE) - if(visualsOnly) - return - H.fully_replace_character_name(null,"NTP #CC-0[rand(111,999)]") //same as the lavaland prisoner transport, but this time they are from CC, or CentCom - -/datum/outfit/yalp_cultist - name = "Cultist of Yalp Elor" - uniform = /obj/item/clothing/under/rank/civilian/chaplain - suit = /obj/item/clothing/suit/chaplainsuit/holidaypriest - gloves = /obj/item/clothing/gloves/color/red - shoes = /obj/item/clothing/shoes/sneakers/black - mask = /obj/item/clothing/mask/gas/tiki_mask/yalp_elor - -/datum/outfit/waldo - name = "Waldo" - uniform = /obj/item/clothing/under/pants/jeans - suit = /obj/item/clothing/suit/striped_sweater - head = /obj/item/clothing/head/beanie/waldo - shoes = /obj/item/clothing/shoes/sneakers/brown - ears = /obj/item/radio/headset - glasses = /obj/item/clothing/glasses/regular/circle - -/datum/outfit/waldo/post_equip(mob/living/carbon/human/H, visualsOnly=FALSE) - if(visualsOnly) - return - H.fully_replace_character_name(null,"Waldo") - H.eye_color = "000" - H.gender = MALE - H.skin_tone = "caucasian3" - H.hairstyle = "Business Hair 3" - H.facial_hairstyle = "Shaved" - H.hair_color = "000" - H.facial_hair_color = H.hair_color - H.update_body() - if(H.mind) - H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null)) - var/list/no_drops = list() - no_drops += H.get_item_by_slot(SLOT_SHOES) - no_drops += H.get_item_by_slot(SLOT_PANTS) - no_drops += H.get_item_by_slot(SLOT_ARMOR) - no_drops += H.get_item_by_slot(SLOT_HEAD) - no_drops += H.get_item_by_slot(SLOT_GLASSES) - for(var/i in no_drops) - var/obj/item/I = i - ADD_TRAIT(I, TRAIT_NODROP, CURSED_ITEM_TRAIT) - -/datum/outfit/synthetic - name = "Factory Error Synth" - uniform = /obj/item/clothing/under/color/white - ears = /obj/item/radio/headset - -/datum/outfit/synthetic/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - var/obj/item/organ/eyes/robotic/glow/eyes = new() - eyes.Insert(src, drop_if_replaced = FALSE) - -/datum/outfit/spacepol - name = "Spacepol Officer" - uniform = /obj/item/clothing/under/rank/security/officer/spacepol - suit = /obj/item/clothing/suit/armor/vest/blueshirt - belt = /obj/item/gun/ballistic/automatic/pistol/m1911 - head = /obj/item/clothing/head/helmet/police - gloves = /obj/item/clothing/gloves/combat - shoes = /obj/item/clothing/shoes/jackboots - mask = /obj/item/clothing/mask/gas/sechailer/swat/spacepol - glasses = /obj/item/clothing/glasses/sunglasses - ears = /obj/item/radio/headset - l_pocket = /obj/item/ammo_box/magazine/m45 - r_pocket = /obj/item/restraints/handcuffs - id = /obj/item/card/id - -/datum/outfit/spacepol/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - var/obj/item/card/id/W = H.wear_ring - W.assignment = "Police Officer" - W.registered_name = H.real_name - W.update_label() - -/datum/outfit/russiancorpse/hunter - ears = /obj/item/radio/headset - r_hand = /obj/item/gun/ballistic/rifle/boltaction - -/datum/outfit/russiancorpse/hunter/pre_equip(mob/living/carbon/human/H) - if(prob(50)) - head = /obj/item/clothing/head/ushanka - -/datum/outfit/bountyarmor - name = "Bounty Hunter - Armored" - uniform = /obj/item/clothing/under/rank/prisoner - head = /obj/item/clothing/head/hunter - suit = /obj/item/clothing/suit/space/hunter - gloves = /obj/item/clothing/gloves/combat - shoes = /obj/item/clothing/shoes/jackboots - mask = /obj/item/clothing/mask/gas/hunter - glasses = /obj/item/clothing/glasses/sunglasses/garb - ears = /obj/item/radio/headset - l_pocket = /obj/item/tank/internals/plasma/full - r_pocket = /obj/item/restraints/handcuffs/cable - id = /obj/item/card/id - r_hand = /obj/item/flamethrower/full/tank - -/datum/outfit/bountyarmor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - var/obj/item/card/id/W = H.wear_ring - W.assignment = "Bounty Hunter" - W.registered_name = H.real_name - W.update_label() - -/datum/outfit/bountyhook - name = "Bounty Hunter - Hook" - uniform = /obj/item/clothing/under/rank/prisoner - back = /obj/item/storage/backpack - head = /obj/item/clothing/head/scarecrow_hat - gloves = /obj/item/clothing/gloves/botanic_leather - ears = /obj/item/radio/headset - shoes = /obj/item/clothing/shoes/jackboots - mask = /obj/item/clothing/mask/scarecrow - r_pocket = /obj/item/restraints/handcuffs/cable - id = /obj/item/card/id - r_hand = /obj/item/gun/ballistic/shotgun/doublebarrel/hook - - backpack_contents = list( - /obj/item/ammo_casing/shotgun/incapacitate = 6 - ) - -/datum/outfit/bountygrapple/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - var/obj/item/card/id/W = H.wear_ring - W.assignment = "Bounty Hunter" - W.registered_name = H.real_name - W.update_label() - -/datum/outfit/bountysynth - name = "Bounty Hunter - Synth" - uniform = /obj/item/clothing/under/rank/prisoner - back = /obj/item/storage/backpack - suit = /obj/item/clothing/suit/armor/riot - shoes = /obj/item/clothing/shoes/jackboots - glasses = /obj/item/clothing/glasses/eyepatch - r_pocket = /obj/item/restraints/handcuffs/cable - ears = /obj/item/radio/headset - id = /obj/item/card/id - r_hand = /obj/item/storage/firstaid/regular - l_hand = /obj/item/pinpointer/shuttle - - backpack_contents = list( - /obj/item/bountytrap = 4 - ) - -/datum/outfit/bountysynth/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - var/datum/species/synth/synthetic_appearance = new() - H.set_species(synthetic_appearance) - synthetic_appearance.assume_disguise(synthetic_appearance, H) - H.update_hair() - var/obj/item/card/id/W = H.wear_ring - W.assignment = "Bounty Hunter" - W.registered_name = H.real_name - W.update_label() diff --git a/code/modules/antagonists/fugitive/fugitive_ship.dm b/code/modules/antagonists/fugitive/fugitive_ship.dm deleted file mode 100644 index 26d2f2d3c7..0000000000 --- a/code/modules/antagonists/fugitive/fugitive_ship.dm +++ /dev/null @@ -1,62 +0,0 @@ -//works similar to the experiment machine (experiment.dm) except it just holds more and more prisoners - -/obj/machinery/fugitive_capture - name = "bluespace capture machine" - desc = "" - icon = 'icons/obj/machines/research.dmi' - icon_state = "bluespace-prison" - density = TRUE - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF //ha ha no getting out!! - -/obj/machinery/fugitive_capture/examine(mob/user) - . = ..() - . += "Add a prisoner by dragging them into the machine." - -/obj/machinery/fugitive_capture/MouseDrop_T(mob/target, mob/user) - var/mob/living/fugitive_hunter = user - if(!isliving(fugitive_hunter)) - return - if(fugitive_hunter.stat || (!(fugitive_hunter.mobility_flags & MOBILITY_STAND) || !(fugitive_hunter.mobility_flags & MOBILITY_UI)) || !Adjacent(fugitive_hunter) || !target.Adjacent(fugitive_hunter) || !ishuman(target)) - return - var/mob/living/carbon/human/fugitive = target - var/datum/antagonist/fugitive/fug_antag = fugitive.mind.has_antag_datum(/datum/antagonist/fugitive) - if(!fug_antag) - to_chat(fugitive_hunter, "This is not a wanted fugitive!") - return - if(do_after(fugitive_hunter, 50, target = fugitive)) - add_prisoner(fugitive, fug_antag) - -/obj/machinery/fugitive_capture/proc/add_prisoner(mob/living/carbon/human/fugitive, datum/antagonist/fugitive/antag) - fugitive.forceMove(src) - antag.is_captured = TRUE - to_chat(fugitive, "I are thrown into a vast void of bluespace, and as you fall further into oblivion the comparatively small entrance to reality gets smaller and smaller until you cannot see it anymore. You have failed to avoid capture.") - fugitive.ghostize(TRUE) //so they cannot suicide, round end stuff. - -/obj/machinery/computer/shuttle/hunter - name = "shuttle console" - shuttleId = "huntership" - possible_destinations = "huntership_home;huntership_custom;whiteship_home;syndicate_nw" - -/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/hunter - name = "shuttle navigation computer" - desc = "" - shuttleId = "huntership" - lock_override = CAMERA_LOCK_STATION - shuttlePortId = "huntership_custom" - see_hidden = FALSE - jumpto_ports = list("huntership_home" = 1, "whiteship_home" = 1, "syndicate_nw" = 1) - view_range = 12 - -/obj/structure/closet/crate/eva - name = "EVA crate" - -/obj/structure/closet/crate/eva/PopulateContents() - ..() - for(var/i in 1 to 3) - new /obj/item/clothing/suit/space/eva(src) - for(var/i in 1 to 3) - new /obj/item/clothing/head/helmet/space/eva(src) - for(var/i in 1 to 3) - new /obj/item/clothing/mask/breath(src) - for(var/i in 1 to 3) - new /obj/item/tank/internals/oxygen(src) diff --git a/code/modules/antagonists/fugitive/hunter.dm b/code/modules/antagonists/fugitive/hunter.dm deleted file mode 100644 index f7b124948e..0000000000 --- a/code/modules/antagonists/fugitive/hunter.dm +++ /dev/null @@ -1,172 +0,0 @@ -//The hunters!! -/datum/antagonist/fugitive_hunter - name = "Fugitive Hunter" - roundend_category = "Fugitive" - silent = TRUE //greet called by the spawn - show_in_antagpanel = FALSE - prevent_roundtype_conversion = FALSE - antag_hud_type = ANTAG_HUD_FUGITIVE - antag_hud_name = "fugitive_hunter" - var/datum/team/fugitive_hunters/hunter_team - var/backstory = "error" - -/datum/antagonist/fugitive_hunter/apply_innate_effects(mob/living/mob_override) - var/mob/living/M = mob_override || owner.current - add_antag_hud(antag_hud_type, antag_hud_name, M) - -/datum/antagonist/fugitive_hunter/remove_innate_effects(mob/living/mob_override) - var/mob/living/M = mob_override || owner.current - remove_antag_hud(antag_hud_type, M) - -/datum/antagonist/fugitive_hunter/on_gain() - forge_objectives() - . = ..() - -/datum/antagonist/fugitive_hunter/proc/forge_objectives() //this isn't an actual objective because it's about round end rosters - var/datum/objective/capture = new /datum/objective - capture.owner = owner - capture.explanation_text = "Capture the fugitives in the station and put them into the bluespace capture machine on your ship." - objectives += capture - -/datum/antagonist/fugitive_hunter/greet() - switch(backstory) - if("space cop") - to_chat(owner, "Justice has arrived. I am a member of the Spacepol!") - to_chat(owner, "The criminals should be on the station, we have special huds implanted to recognize them.") - to_chat(owner, "As we have lost pretty much all power over these damned lawless megacorporations, it's a mystery if their security will cooperate with us.") - if("russian") - to_chat(src, "Ay blyat. I am a space-russian smuggler! We were mid-flight when our cargo was beamed off our ship!") - to_chat(src, "We were hailed by a man in a green uniform, promising the safe return of our goods in exchange for a favor:") - to_chat(src, "There is a local station housing fugitives that the man is after, he wants them returned; dead or alive.") - to_chat(src, "We will not be able to make ends meet without our cargo, so we must do as he says and capture them.") - - to_chat(owner, "I are not an antagonist in that you may kill whomever you please, but you can do anything to ensure the capture of the fugitives, even if that means going through the station.") - owner.announce_objectives() - -/datum/antagonist/fugitive_hunter/create_team(datum/team/fugitive_hunters/new_team) - if(!new_team) - for(var/datum/antagonist/fugitive_hunter/H in GLOB.antagonists) - if(!H.owner) - continue - if(H.hunter_team) - hunter_team = H.hunter_team - return - hunter_team = new /datum/team/fugitive_hunters - hunter_team.backstory = backstory - hunter_team.update_objectives() - return - if(!istype(new_team)) - stack_trace("Wrong team type passed to [type] initialization.") - hunter_team = new_team - -/datum/antagonist/fugitive_hunter/get_team() - return hunter_team - -/datum/team/fugitive_hunters - var/backstory = "error" - -/datum/team/fugitive_hunters/proc/update_objectives(initial = FALSE) - objectives = list() - var/datum/objective/O = new() - O.team = src - objectives += O - -/datum/team/fugitive_hunters/proc/assemble_fugitive_results() - var/list/fugitives_counted = list() - var/list/fugitives_dead = list() - var/list/fugitives_captured = list() - for(var/datum/antagonist/fugitive/A in GLOB.antagonists) - if(!A.owner) - continue - fugitives_counted += A - if(A.owner.current.stat == DEAD) - fugitives_dead += A - if(A.is_captured) - fugitives_captured += A - . = list(fugitives_counted, fugitives_dead, fugitives_captured) //okay, check out how cool this is. - -/datum/team/fugitive_hunters/proc/all_hunters_dead() - var/dead_boys = 0 - for(var/I in members) - var/datum/mind/hunter_mind = I - if(!(ishuman(hunter_mind.current) || (hunter_mind.current.stat == DEAD))) - dead_boys++ - return dead_boys >= members.len - -/datum/team/fugitive_hunters/proc/get_result() - var/list/fugitive_results = assemble_fugitive_results() - var/list/fugitives_counted = fugitive_results[1] - var/list/fugitives_dead = fugitive_results[2] - var/list/fugitives_captured = fugitive_results[3] - var/hunters_dead = all_hunters_dead() - //this gets a little confusing so follow the comments if it helps - if(!fugitives_counted.len) - return - if(fugitives_captured.len)//any captured - if(fugitives_captured.len == fugitives_counted.len)//if the hunters captured all the fugitives, there's a couple special wins - if(!fugitives_dead)//specifically all of the fugitives alive - return FUGITIVE_RESULT_BADASS_HUNTER - else if(hunters_dead)//specifically all of the hunters died (while capturing all the fugitives) - return FUGITIVE_RESULT_POSTMORTEM_HUNTER - else//no special conditional wins, so just the normal major victory - return FUGITIVE_RESULT_MAJOR_HUNTER - else if(!hunters_dead)//so some amount captured, and the hunters survived. - return FUGITIVE_RESULT_HUNTER_VICTORY - else//so some amount captured, but NO survivors. - return FUGITIVE_RESULT_MINOR_HUNTER - else//from here on out, hunters lost because they did not capture any fugitive dead or alive. there are different levels of getting beat though: - if(!fugitives_dead)//all fugitives survived - return FUGITIVE_RESULT_MAJOR_FUGITIVE - else if(fugitives_dead < fugitives_counted)//at least ANY fugitive lived - return FUGITIVE_RESULT_FUGITIVE_VICTORY - else if(!hunters_dead)//all fugitives died, but none were taken in by the hunters. minor win - return FUGITIVE_RESULT_MINOR_FUGITIVE - else//all fugitives died, all hunters died, nobody brought back. seems weird to not give fugitives a victory if they managed to kill the hunters but literally no progress to either goal should lead to a nobody wins situation - return FUGITIVE_RESULT_STALEMATE - -/datum/team/fugitive_hunters/roundend_report() //shows the number of fugitives, but not if they won in case there is no security - if(!members.len) - return - - var/list/result = list() - - result += "
    ...And [members.len] [backstory]s tried to hunt them down!" - - for(var/datum/mind/M in members) - result += "[printplayer(M)]" - - switch(get_result()) - if(FUGITIVE_RESULT_BADASS_HUNTER)//use defines - result += "Badass [capitalize(backstory)] Victory!" - result += "The [backstory]s managed to capture every fugitive, alive!" - if(FUGITIVE_RESULT_POSTMORTEM_HUNTER) - result += "Postmortem [capitalize(backstory)] Victory!" - result += "The [backstory]s managed to capture every fugitive, but all of them died! Spooky!" - if(FUGITIVE_RESULT_MAJOR_HUNTER) - result += "Major [capitalize(backstory)] Victory" - result += "The [backstory]s managed to capture every fugitive, dead or alive." - if(FUGITIVE_RESULT_HUNTER_VICTORY) - result += "[capitalize(backstory)] Victory" - result += "The [backstory]s managed to capture a fugitive, dead or alive." - if(FUGITIVE_RESULT_MINOR_HUNTER) - result += "Minor [capitalize(backstory)] Victory" - result += "All the [backstory]s died, but managed to capture a fugitive, dead or alive." - if(FUGITIVE_RESULT_STALEMATE) - result += "Bloody Stalemate" - result += "Everyone died, and no fugitives were recovered!" - if(FUGITIVE_RESULT_MINOR_FUGITIVE) - result += "Minor Fugitive Victory" - result += "All the fugitives died, but none were recovered!" - if(FUGITIVE_RESULT_FUGITIVE_VICTORY) - result += "Fugitive Victory" - result += "A fugitive survived, and no bodies were recovered by the [backstory]s." - if(FUGITIVE_RESULT_MAJOR_FUGITIVE) - result += "Major Fugitive Victory" - result += "All of the fugitives survived and avoided capture!" - else //get_result returned null- either bugged or no fugitives showed - result += "Prank Call!" - result += "[capitalize(backstory)]s were called, yet there were no fugitives...?" - - result += "
    " - - return result.Join("
    ") diff --git a/code/modules/antagonists/highlander/highlander.dm b/code/modules/antagonists/highlander/highlander.dm deleted file mode 100644 index 5a2a14b45c..0000000000 --- a/code/modules/antagonists/highlander/highlander.dm +++ /dev/null @@ -1,77 +0,0 @@ -/datum/antagonist/highlander - name = "highlander" - var/obj/item/claymore/highlander/sword - show_in_antagpanel = FALSE - show_name_in_check_antagonists = TRUE - can_hijack = HIJACK_HIJACKER - -/datum/antagonist/highlander/apply_innate_effects(mob/living/mob_override) - var/mob/living/L = owner.current || mob_override - ADD_TRAIT(L, TRAIT_NOGUNS, "highlander") - -/datum/antagonist/highlander/remove_innate_effects(mob/living/mob_override) - var/mob/living/L = owner.current || mob_override - REMOVE_TRAIT(L, TRAIT_NOGUNS, "highlander") - -/datum/antagonist/highlander/proc/forge_objectives() - var/datum/objective/steal/steal_objective = new - steal_objective.owner = owner - steal_objective.set_target(new /datum/objective_item/steal/nukedisc) - objectives += steal_objective - - var/datum/objective/hijack/hijack_objective = new - hijack_objective.explanation_text = "Escape on the shuttle alone. Ensure that nobody else makes it out." - hijack_objective.owner = owner - objectives += hijack_objective - -/datum/antagonist/highlander/on_gain() - forge_objectives() - owner.special_role = "highlander" - owner.current.set_species(/datum/species/human) - give_equipment() - . = ..() - -/datum/antagonist/highlander/greet() - to_chat(owner, "My [sword.name] cries out for blood. Claim the lives of others, and my own will be restored!\n\ - Activate it in my hand, and it will lead to the nearest target. Attack the nuclear authentication disk with it, and you will store it.") - - owner.announce_objectives() - -/datum/antagonist/highlander/proc/give_equipment() - var/mob/living/carbon/human/H = owner.current - if(!istype(H)) - return - - for(var/obj/item/I in H) - if(!H.dropItemToGround(I)) - qdel(I) - H.regenerate_icons() - H.revive(full_heal = TRUE, admin_revive = TRUE) - H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/kilt/highlander(H), SLOT_PANTS) - H.equip_to_slot_or_del(new /obj/item/radio/headset/heads/captain(H), SLOT_HEAD) - H.equip_to_slot_or_del(new /obj/item/clothing/head/beret/highlander(H), SLOT_HEAD) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), SLOT_SHOES) - H.equip_to_slot_or_del(new /obj/item/pinpointer/nuke(H), SLOT_L_STORE) - for(var/obj/item/pinpointer/nuke/P in H) - P.attack_self(H) - var/obj/item/card/id/centcom/W = new(H) - W.access = get_all_accesses() - W.access += get_all_centcom_access() - W.assignment = "Highlander" - W.registered_name = H.real_name - ADD_TRAIT(W, TRAIT_NODROP, HIGHLANDER) - W.update_label() - H.equip_to_slot_or_del(W, SLOT_RING) - - sword = new(H) - if(!GLOB.highlander) - sword.flags_1 |= ADMIN_SPAWNED_1 //To prevent announcing - sword.pickup(H) //For the stun shielding - H.put_in_hands(sword) - - - var/obj/item/bloodcrawl/antiwelder = new(H) - antiwelder.name = "compulsion of honor" - antiwelder.desc = "" - antiwelder.icon_state = "bloodhand_right" - H.put_in_hands(antiwelder) diff --git a/code/modules/antagonists/morph/morph.dm b/code/modules/antagonists/morph/morph.dm deleted file mode 100644 index aeacabf848..0000000000 --- a/code/modules/antagonists/morph/morph.dm +++ /dev/null @@ -1,245 +0,0 @@ -#define MORPH_COOLDOWN 50 - -/mob/living/simple_animal/hostile/morph - name = "morph" - real_name = "morph" - desc = "" - speak_emote = list("gurgles") - emote_hear = list("gurgles") - icon = 'icons/mob/animal.dmi' - icon_state = "morph" - icon_living = "morph" - icon_dead = "morph_dead" - speed = 2 - a_intent = INTENT_HARM - stop_automated_movement = 1 - status_flags = CANPUSH - pass_flags = PASSTABLE - ventcrawler = VENTCRAWLER_ALWAYS - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxHealth = 150 - health = 150 - healable = 0 - obj_damage = 50 - melee_damage_lower = 20 - melee_damage_upper = 20 - see_in_dark = 8 - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - vision_range = 1 // Only attack when target is close - wander = FALSE - attack_verb_continuous = "glomps" - attack_verb_simple = "glomp" - attack_sound = 'sound/blank.ogg' - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2) - - var/morphed = FALSE - var/melee_damage_disguised = 0 - var/eat_while_disguised = FALSE - var/atom/movable/form = null - var/morph_time = 0 - var/static/list/blacklist_typecache = typecacheof(list( - /atom/movable/screen, - /obj/singularity, - /mob/living/simple_animal/hostile/morph, - /obj/effect)) - - var/playstyle_string = "I are a morph,
    an abomination of science created primarily with changeling cells. \ - You may take the form of anything nearby by shift-clicking it. This process will alert any nearby \ - observers, and can only be performed once every five seconds. While morphed, you move faster, but do \ - less damage. In addition, anyone within three tiles will note an uncanny wrongness if examining you. \ - You can attack any item or dead creature to consume it - creatures will restore my health. \ - Finally, you can restore myself to my original form while morphed by shift-clicking myself." - -/mob/living/simple_animal/hostile/morph/examine(mob/user) - if(morphed) - . = form.examine(user) - if(get_dist(user,src)<=3) - . += "It doesn't look quite right..." - else - . = ..() - -/mob/living/simple_animal/hostile/morph/med_hud_set_health() - if(morphed && !isliving(form)) - var/image/holder = hud_list[HEALTH_HUD] - holder.icon_state = null - return //we hide medical hud while morphed - ..() - -/mob/living/simple_animal/hostile/morph/med_hud_set_status() - if(morphed && !isliving(form)) - var/image/holder = hud_list[STATUS_HUD] - holder.icon_state = null - return //we hide medical hud while morphed - ..() - -/mob/living/simple_animal/hostile/morph/proc/allowed(atom/movable/A) // make it into property/proc ? not sure if worth it - return !is_type_in_typecache(A, blacklist_typecache) && (isobj(A) || ismob(A)) - -/mob/living/simple_animal/hostile/morph/proc/eat(atom/movable/A) - if(morphed && !eat_while_disguised) - to_chat(src, "I can not eat anything while you are disguised!") - return FALSE - if(A && A.loc != src) - visible_message("[src] swallows [A] whole!") - A.forceMove(src) - return TRUE - return FALSE - -/mob/living/simple_animal/hostile/morph/ShiftClickOn(atom/movable/A) - if(morph_time <= world.time && !stat) - if(A == src) - restore() - return - if(istype(A) && allowed(A)) - assume(A) - else - to_chat(src, "My chameleon skin is still repairing itself!") - ..() - -/mob/living/simple_animal/hostile/morph/proc/assume(atom/movable/target) - if(morphed) - to_chat(src, "I must restore to my original form first!") - return - morphed = TRUE - form = target - - visible_message("[src] suddenly twists and changes shape, becoming a copy of [target]!", \ - "I twist my body and assume the form of [target].") - appearance = target.appearance - copy_overlays(target) - alpha = max(alpha, 150) //fucking chameleons - transform = initial(transform) - pixel_y = initial(pixel_y) - pixel_x = initial(pixel_x) - - //Morphed is weaker - melee_damage_lower = melee_damage_disguised - melee_damage_upper = melee_damage_disguised - set_varspeed(0) - - morph_time = world.time + MORPH_COOLDOWN - med_hud_set_health() - med_hud_set_status() //we're an object honest - return - -/mob/living/simple_animal/hostile/morph/proc/restore() - if(!morphed) - to_chat(src, "You're already in my normal form!") - return - morphed = FALSE - form = null - alpha = initial(alpha) - color = initial(color) - animate_movement = SLIDE_STEPS - maptext = null - - visible_message("[src] suddenly collapses in on itself, dissolving into a pile of green flesh!", \ - "I reform to my normal body.") - name = initial(name) - icon = initial(icon) - icon_state = initial(icon_state) - cut_overlays() - - //Baseline stats - melee_damage_lower = initial(melee_damage_lower) - melee_damage_upper = initial(melee_damage_upper) - set_varspeed(initial(speed)) - - morph_time = world.time + MORPH_COOLDOWN - med_hud_set_health() - med_hud_set_status() //we are not an object - -/mob/living/simple_animal/hostile/morph/death(gibbed) - if(morphed) - visible_message("[src] twists and dissolves into a pile of green flesh!", \ - "My skin ruptures! Your flesh breaks apart! No disguise can ward off de--") - restore() - barf_contents() - ..() - -/mob/living/simple_animal/hostile/morph/proc/barf_contents() - for(var/atom/movable/AM in src) - AM.forceMove(loc) - if(prob(90)) - step(AM, pick(GLOB.alldirs)) - -/mob/living/simple_animal/hostile/morph/wabbajack_act(mob/living/new_mob) - barf_contents() - . = ..() - -/mob/living/simple_animal/hostile/morph/Aggro() // automated only - ..() - restore() - -/mob/living/simple_animal/hostile/morph/LoseAggro() - vision_range = initial(vision_range) - -/mob/living/simple_animal/hostile/morph/AIShouldSleep(list/possible_targets) - . = ..() - if(.) - var/list/things = list() - for(var/atom/movable/A in view(src)) - if(allowed(A)) - things += A - var/atom/movable/T = pick(things) - assume(T) - -/mob/living/simple_animal/hostile/morph/can_track(mob/living/user) - if(morphed) - return FALSE - return ..() - -/mob/living/simple_animal/hostile/morph/AttackingTarget() - if(morphed && !melee_damage_disguised) - to_chat(src, "I can not attack while disguised!") - return - if(isliving(target)) //Eat Corpses to regen health - var/mob/living/L = target - if(L.stat == DEAD) - if(do_after(src, 30, target = L)) - if(eat(L)) - adjustHealth(-50) - return - else if(isitem(target)) //Eat items just to be annoying - var/obj/item/I = target - if(!I.anchored) - if(do_after(src, 20, target = I)) - eat(I) - return - return ..() - -//Spawn Event - -/datum/round_event_control/morph - name = "Spawn Morph" - typepath = /datum/round_event/ghost_role/morph - weight = 0 //Admin only - max_occurrences = 1 - -/datum/round_event/ghost_role/morph - minimum_required = 1 - role_name = "morphling" - -/datum/round_event/ghost_role/morph/spawn_role() - var/list/candidates = get_candidates(ROLE_ALIEN, null, ROLE_ALIEN) - if(!candidates.len) - return NOT_ENOUGH_PLAYERS - - var/mob/dead/selected = pick_n_take(candidates) - - var/datum/mind/player_mind = new /datum/mind(selected.key) - player_mind.active = 1 - if(!GLOB.xeno_spawn) - return MAP_ERROR - var/mob/living/simple_animal/hostile/morph/S = new /mob/living/simple_animal/hostile/morph(pick(GLOB.xeno_spawn)) - player_mind.transfer_to(S) - player_mind.assigned_role = "Morph" - player_mind.special_role = "Morph" - player_mind.add_antag_datum(/datum/antagonist/morph) - to_chat(S, S.playstyle_string) - SEND_SOUND(S, sound('sound/blank.ogg')) - message_admins("[ADMIN_LOOKUPFLW(S)] has been made into a morph by an event.") - log_game("[key_name(S)] was spawned as a morph by an event.") - spawned_mobs += S - return SUCCESSFUL_SPAWN diff --git a/code/modules/antagonists/ninja/ninja.dm b/code/modules/antagonists/ninja/ninja.dm deleted file mode 100644 index 792c3ceb3c..0000000000 --- a/code/modules/antagonists/ninja/ninja.dm +++ /dev/null @@ -1,152 +0,0 @@ -/datum/antagonist/ninja - name = "Ninja" - antagpanel_category = "Ninja" - job_rank = ROLE_NINJA - antag_hud_type = ANTAG_HUD_NINJA - antag_hud_name = "ninja" - show_name_in_check_antagonists = TRUE - antag_moodlet = /datum/mood_event/focused - var/helping_station = FALSE - var/give_objectives = TRUE - var/give_equipment = TRUE - -/datum/antagonist/ninja/New() - if(helping_station) - can_hijack = HIJACK_PREVENT - . = ..() - -/datum/antagonist/ninja/apply_innate_effects(mob/living/mob_override) - var/mob/living/M = mob_override || owner.current - add_antag_hud(antag_hud_type, antag_hud_name, M) - -/datum/antagonist/ninja/remove_innate_effects(mob/living/mob_override) - var/mob/living/M = mob_override || owner.current - remove_antag_hud(antag_hud_type, M) - -/datum/antagonist/ninja/proc/equip_space_ninja(mob/living/carbon/human/H = owner.current) - return H.equipOutfit(/datum/outfit/ninja) - -/datum/antagonist/ninja/proc/addMemories() - antag_memory += "I am an elite mercenary assassin of the mighty Spider Clan. A SPACE NINJA!
    " - antag_memory += "Surprise is my weapon. Shadows are my armor. Without them, I am nothing. (//initialize your suit by clicking the initialize UI button, to use abilities like stealth)!
    " - antag_memory += "Officially, [helping_station?"Nanotrasen":"The Syndicate"] are my employer.
    " - -/datum/antagonist/ninja/proc/addObjectives(quantity = 6) - var/list/possible_targets = list() - for(var/datum/mind/M in SSticker.minds) - if(M.current && M.current.stat != DEAD) - if(ishuman(M.current)) - if(M.special_role) - possible_targets[M] = 0 //bad-guy - else if(M.assigned_role in GLOB.command_positions) - possible_targets[M] = 1 //good-guy - - var/list/possible_objectives = list(1,2,3,4) - - while(objectives.len < quantity) - switch(pick_n_take(possible_objectives)) - if(1) //research - var/datum/objective/download/O = new /datum/objective/download() - O.owner = owner - O.gen_amount_goal() - objectives += O - - if(2) //steal - var/datum/objective/steal/special/O = new /datum/objective/steal/special() - O.owner = owner - objectives += O - - if(3) //protect/kill - if(!possible_targets.len) continue - var/index = rand(1,possible_targets.len) - var/datum/mind/M = possible_targets[index] - var/is_bad_guy = possible_targets[M] - possible_targets.Cut(index,index+1) - - if(is_bad_guy ^ helping_station) //kill (good-ninja + bad-guy or bad-ninja + good-guy) - var/datum/objective/assassinate/O = new /datum/objective/assassinate() - O.owner = owner - O.target = M - O.explanation_text = "Slay \the [M.current.real_name], the [M.assigned_role]." - objectives += O - else //protect - var/datum/objective/protect/O = new /datum/objective/protect() - O.owner = owner - O.target = M - O.explanation_text = "Protect \the [M.current.real_name], the [M.assigned_role], from harm." - objectives += O - if(4) //debrain/capture - if(!possible_targets.len) continue - var/selected = rand(1,possible_targets.len) - var/datum/mind/M = possible_targets[selected] - var/is_bad_guy = possible_targets[M] - possible_targets.Cut(selected,selected+1) - - if(is_bad_guy ^ helping_station) //debrain (good-ninja + bad-guy or bad-ninja + good-guy) - var/datum/objective/debrain/O = new /datum/objective/debrain() - O.owner = owner - O.target = M - O.explanation_text = "Steal the brain of [M.current.real_name]." - objectives += O - else //capture - var/datum/objective/capture/O = new /datum/objective/capture() - O.owner = owner - O.gen_amount_goal() - objectives += O - else - break - var/datum/objective/O = new /datum/objective/survive() - O.owner = owner - objectives += O - -/proc/remove_ninja(mob/living/L) - if(!L || !L.mind) - return FALSE - var/datum/antagonist/datum = L.mind.has_antag_datum(/datum/antagonist/ninja) - datum.on_removal() - return TRUE - -/proc/is_ninja(mob/living/M) - return M && M.mind && M.mind.has_antag_datum(/datum/antagonist/ninja) - - -/datum/antagonist/ninja/greet() - SEND_SOUND(owner.current, sound('sound/blank.ogg')) - to_chat(owner.current, "I am an elite mercenary assassin of the mighty Spider Clan. A SPACE NINJA!") - to_chat(owner.current, "Surprise is my weapon. Shadows are my armor. Without them, I am nothing. (//initialize your suit by right clicking on it, to use abilities like stealth)!") - to_chat(owner.current, "Officially, [helping_station?"Nanotrasen":"The Syndicate"] are my employer.") - owner.announce_objectives() - return - -/datum/antagonist/ninja/on_gain() - if(give_objectives) - addObjectives() - addMemories() - if(give_equipment) - equip_space_ninja(owner.current) - . = ..() - -/datum/antagonist/ninja/admin_add(datum/mind/new_owner,mob/admin) - var/adj - switch(input("What kind of ninja?", "Ninja") as null|anything in list("Random","Syndicate","Nanotrasen","No objectives")) - if("Random") - helping_station = pick(TRUE,FALSE) - adj = "" - if("Syndicate") - helping_station = FALSE - adj = "syndie" - if("Nanotrasen") - helping_station = TRUE - adj = "friendly" - if("No objectives") - give_objectives = FALSE - adj = "objectiveless" - else - return - if(helping_station) - can_hijack = HIJACK_PREVENT - new_owner.assigned_role = ROLE_NINJA - new_owner.special_role = ROLE_NINJA - new_owner.add_antag_datum(src) - message_admins("[key_name_admin(admin)] has [adj] ninja'ed [key_name_admin(new_owner)].") - log_admin("[key_name(admin)] has [adj] ninja'ed [key_name(new_owner)].") diff --git a/code/modules/antagonists/nukeop/clownop.dm b/code/modules/antagonists/nukeop/clownop.dm deleted file mode 100644 index 4ac8517586..0000000000 --- a/code/modules/antagonists/nukeop/clownop.dm +++ /dev/null @@ -1,25 +0,0 @@ - -/datum/antagonist/nukeop/clownop - name = "Clown Operative" - roundend_category = "clown operatives" - antagpanel_category = "ClownOp" - nukeop_outfit = /datum/outfit/syndicate/clownop - -/datum/antagonist/nukeop/leader/clownop - name = "Clown Operative Leader" - roundend_category = "clown operatives" - antagpanel_category = "ClownOp" - nukeop_outfit = /datum/outfit/syndicate/clownop/leader - -/datum/antagonist/nukeop/leader/clownop/give_alias() - title = pick("Head Honker", "Slipmaster", "Clown King", "Honkbearer") - if(nuke_team && nuke_team.syndicate_name) - owner.current.real_name = "[nuke_team.syndicate_name] [title]" - else - owner.current.real_name = "Syndicate [title]" - -/datum/antagonist/nukeop/clownop/admin_add(datum/mind/new_owner,mob/admin) - new_owner.assigned_role = "Clown Operative" - new_owner.add_antag_datum(src) - message_admins("[key_name_admin(admin)] has clown op'ed [key_name_admin(new_owner)].") - log_admin("[key_name(admin)] has clown op'ed [key_name(new_owner)].") diff --git a/code/modules/antagonists/nukeop/equipment/borgchameleon.dm b/code/modules/antagonists/nukeop/equipment/borgchameleon.dm deleted file mode 100644 index bc4abd2622..0000000000 --- a/code/modules/antagonists/nukeop/equipment/borgchameleon.dm +++ /dev/null @@ -1,133 +0,0 @@ -/obj/item/borg_chameleon - name = "cyborg chameleon projector" - icon = 'icons/obj/device.dmi' - icon_state = "shield0" - flags_1 = CONDUCT_1 - item_flags = NOBLUDGEON - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - w_class = WEIGHT_CLASS_SMALL - var/friendlyName - var/savedName - var/active = FALSE - var/activationCost = 300 - var/activationUpkeep = 50 - var/disguise = "engineer" - var/mob/listeningTo - var/static/list/signalCache = list( // list here all signals that should break the camouflage - COMSIG_PARENT_ATTACKBY, - COMSIG_ATOM_ATTACK_HAND, - COMSIG_MOVABLE_IMPACT_ZONE, - COMSIG_ATOM_BULLET_ACT, - COMSIG_ATOM_EX_ACT, - COMSIG_ATOM_FIRE_ACT, - COMSIG_ATOM_EMP_ACT, - ) - var/mob/living/silicon/robot/user // needed for process() - var/animation_playing = FALSE - -/obj/item/borg_chameleon/Initialize() - . = ..() - friendlyName = pick(GLOB.ai_names) - -/obj/item/borg_chameleon/Destroy() - listeningTo = null - return ..() - -/obj/item/borg_chameleon/dropped(mob/user) - . = ..() - disrupt(user) - -/obj/item/borg_chameleon/equipped(mob/user) - . = ..() - disrupt(user) - -/obj/item/borg_chameleon/attack_self(mob/living/silicon/robot/user) - if (user && user.cell && user.cell.charge > activationCost) - if (isturf(user.loc)) - toggle(user) - else - to_chat(user, "I can't use [src] while inside something!") - else - to_chat(user, "I need at least [activationCost] charge in my cell to use [src]!") - -/obj/item/borg_chameleon/proc/toggle(mob/living/silicon/robot/user) - if(active) - playsound(src, 'sound/blank.ogg', 100, TRUE, -6) - to_chat(user, "I deactivate \the [src].") - deactivate(user) - else - if(animation_playing) - to_chat(user, "\the [src] is recharging.") - return - animation_playing = TRUE - to_chat(user, "I activate \the [src].") - playsound(src, 'sound/blank.ogg', 100, TRUE, -6) - var/start = user.filters.len - var/X,Y,rsq,i,f - for(i=1, i<=7, ++i) - do - X = 60*rand() - 30 - Y = 60*rand() - 30 - rsq = X*X + Y*Y - while(rsq<100 || rsq>900) - user.filters += filter(type="wave", x=X, y=Y, size=rand()*2.5+0.5, offset=rand()) - for(i=1, i<=7, ++i) - f = user.filters[start+i] - animate(f, offset=f:offset, time=0, loop=3, flags=ANIMATION_PARALLEL) - animate(offset=f:offset-1, time=rand()*20+10) - if (do_after(user, 50, target=user) && user.cell.use(activationCost)) - playsound(src, 'sound/blank.ogg', 100, TRUE, -6) - to_chat(user, "I are now disguised as the Nanotrasen engineering borg \"[friendlyName]\".") - activate(user) - else - to_chat(user, "The chameleon field fizzles.") - do_sparks(3, FALSE, user) - for(i=1, i<=min(7, user.filters.len), ++i) // removing filters that are animating does nothing, we gotta stop the animations first - f = user.filters[start+i] - animate(f) - user.filters = null - animation_playing = FALSE - -/obj/item/borg_chameleon/process() - if (user) - if (!user.cell || !user.cell.use(activationUpkeep)) - disrupt(user) - else - return PROCESS_KILL - -/obj/item/borg_chameleon/proc/activate(mob/living/silicon/robot/user) - START_PROCESSING(SSobj, src) - src.user = user - savedName = user.name - user.name = friendlyName - user.module.cyborg_base_icon = disguise - user.bubble_icon = "robot" - active = TRUE - user.update_icons() - - if(listeningTo == user) - return - if(listeningTo) - UnregisterSignal(listeningTo, signalCache) - RegisterSignal(user, signalCache, PROC_REF(disrupt)) - listeningTo = user - -/obj/item/borg_chameleon/proc/deactivate(mob/living/silicon/robot/user) - STOP_PROCESSING(SSobj, src) - if(listeningTo) - UnregisterSignal(listeningTo, signalCache) - listeningTo = null - do_sparks(5, FALSE, user) - user.name = savedName - user.module.cyborg_base_icon = initial(user.module.cyborg_base_icon) - user.bubble_icon = "syndibot" - active = FALSE - user.update_icons() - src.user = user - -/obj/item/borg_chameleon/proc/disrupt(mob/living/silicon/robot/user) - if(active) - to_chat(user, "My chameleon field deactivates.") - deactivate(user) diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm deleted file mode 100644 index e86f1d9e0a..0000000000 --- a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm +++ /dev/null @@ -1,128 +0,0 @@ -#define CHALLENGE_TELECRYSTALS 280 -#define CHALLENGE_TIME_LIMIT 3000 -#define CHALLENGE_MIN_PLAYERS 50 -#define CHALLENGE_SHUTTLE_DELAY 15000 // 25 minutes, so the ops have at least 5 minutes before the shuttle is callable. - -GLOBAL_LIST_EMPTY(jam_on_wardec) - -/obj/item/nuclear_challenge - name = "Declaration of War (Challenge Mode)" - icon = 'icons/obj/device.dmi' - icon_state = "gangtool-red" - item_state = "radio" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - desc = "Use to send a declaration of hostilities to the target, delaying my shuttle departure for 20 minutes while they prepare for my assault. \ - Such a brazen move will attract the attention of powerful benefactors within the Syndicate, who will supply my team with a massive amount of bonus telecrystals. \ - Must be used within five minutes, or my benefactors will lose interest." - var/declaring_war = FALSE - var/uplink_type = /obj/item/uplink/nuclear - -/obj/item/nuclear_challenge/attack_self(mob/living/user) - if(!check_allowed(user)) - return - - declaring_war = TRUE - var/are_you_sure = alert(user, "Consult my team carefully before you declare war on [station_name()]]. Are you sure you want to alert the enemy crew? You have [DisplayTimeText(world.time-SSticker.round_start_time - CHALLENGE_TIME_LIMIT)] to decide", "Declare war?", "Yes", "No") - declaring_war = FALSE - - if(!check_allowed(user)) - return - - if(are_you_sure == "No") - to_chat(user, "On second thought, the element of surprise isn't so bad after all.") - return - - var/war_declaration = "[user.real_name] has declared [user.p_their()] intent to utterly destroy [station_name()] with a nuclear device, and dares the crew to try and stop [user.p_them()]." - - declaring_war = TRUE - var/custom_threat = alert(user, "Do you want to customize my declaration?", "Customize?", "Yes", "No") - declaring_war = FALSE - - if(!check_allowed(user)) - return - - if(custom_threat == "Yes") - declaring_war = TRUE - war_declaration = stripped_input(user, "Insert my custom declaration", "Declaration") - declaring_war = FALSE - - if(!check_allowed(user) || !war_declaration) - return - - priority_announce(war_declaration, title = "Declaration of War", sound = 'sound/blank.ogg') - - to_chat(user, "You've attracted the attention of powerful forces within the syndicate. A bonus bundle of telecrystals has been granted to my team. Great things await you if you complete the mission.") - - for(var/V in GLOB.syndicate_shuttle_boards) - var/obj/item/circuitboard/computer/syndicate_shuttle/board = V - board.challenge = TRUE - - for(var/obj/machinery/computer/camera_advanced/shuttle_docker/D in GLOB.jam_on_wardec) - D.jammed = TRUE - - var/list/orphans = list() - var/list/uplinks = list() - - for (var/datum/mind/M in get_antag_minds(/datum/antagonist/nukeop)) - if (iscyborg(M.current)) - continue - var/datum/component/uplink/uplink = M.find_syndicate_uplink() - if (!uplink) - orphans += M.current - continue - uplinks += uplink - - - var/tc_to_distribute = CHALLENGE_TELECRYSTALS - var/tc_per_nukie = round(tc_to_distribute / (length(orphans)+length(uplinks))) - - for (var/datum/component/uplink/uplink in uplinks) - uplink.telecrystals += tc_per_nukie - tc_to_distribute -= tc_per_nukie - - for (var/mob/living/L in orphans) - var/TC = new /obj/item/stack/telecrystal(user.drop_location(), tc_per_nukie) - to_chat(L, "My uplink could not be found so my share of the team's bonus telecrystals has been bluespaced to my [L.put_in_hands(TC) ? "hands" : "feet"].") - tc_to_distribute -= tc_per_nukie - - if (tc_to_distribute > 0) // What shall we do with the remainder... - for (var/mob/living/simple_animal/hostile/carp/cayenne/C in GLOB.mob_living_list) - if (C.stat != DEAD) - var/obj/item/stack/telecrystal/TC = new(C.drop_location(), tc_to_distribute) - TC.throw_at(get_step(C, C.dir), 3, 3) - C.visible_message("[C] coughs up a half-digested telecrystal","I cough up a half-digested telecrystal!") - break - - CONFIG_SET(number/shuttle_refuel_delay, max(CONFIG_GET(number/shuttle_refuel_delay), CHALLENGE_SHUTTLE_DELAY)) - SSblackbox.record_feedback("amount", "nuclear_challenge_mode", 1) - - qdel(src) - -/obj/item/nuclear_challenge/proc/check_allowed(mob/living/user) - if(declaring_war) - to_chat(user, "I are already in the process of declaring war! Make my mind up.") - return FALSE - if(GLOB.player_list.len < CHALLENGE_MIN_PLAYERS) - to_chat(user, "The enemy crew is too small to be worth declaring war on.") - return FALSE - if(!user.onSyndieBase()) - to_chat(user, "I have to be at my base to use this.") - return FALSE - if(world.time-SSticker.round_start_time > CHALLENGE_TIME_LIMIT) - to_chat(user, "It's too late to declare hostilities. Your benefactors are already busy with other schemes. You'll have to make do with what you have on hand.") - return FALSE - for(var/V in GLOB.syndicate_shuttle_boards) - var/obj/item/circuitboard/computer/syndicate_shuttle/board = V - if(board.moved) - to_chat(user, "The shuttle has already been moved! You have forfeit the right to declare war.") - return FALSE - return TRUE - -/obj/item/nuclear_challenge/clownops - uplink_type = /obj/item/uplink/clownop - -#undef CHALLENGE_TELECRYSTALS -#undef CHALLENGE_TIME_LIMIT -#undef CHALLENGE_MIN_PLAYERS -#undef CHALLENGE_SHUTTLE_DELAY diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm deleted file mode 100644 index ab961ab8fd..0000000000 --- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm +++ /dev/null @@ -1,659 +0,0 @@ -/obj/machinery/nuclearbomb - name = "nuclear fission explosive" - desc = "" - icon = 'icons/obj/machines/nuke.dmi' - icon_state = "nuclearbomb_base" - anchored = FALSE - density = TRUE - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - - ui_style = "nanotrasen" - ui_x = 500 - ui_y = 600 - - var/timer_set = 90 - var/default_timer_set = 90 - var/minimum_timer_set = 90 - var/maximum_timer_set = 3600 - - var/numeric_input = "" - var/timing = FALSE - var/exploding = FALSE - var/exploded = FALSE - var/detonation_timer = null - var/r_code = "ADMIN" - var/yes_code = FALSE - var/safety = TRUE - var/obj/item/disk/nuclear/auth = null - use_power = NO_POWER_USE - var/previous_level = "" - var/obj/item/nuke_core/core = null - var/deconstruction_state = NUKESTATE_INTACT - var/lights = "" - var/interior = "" - var/proper_bomb = TRUE //Please - var/obj/effect/countdown/nuclearbomb/countdown - -/obj/machinery/nuclearbomb/Initialize() - . = ..() - countdown = new(src) - GLOB.nuke_list += src - core = new /obj/item/nuke_core(src) - STOP_PROCESSING(SSobj, core) - update_icon() - GLOB.poi_list |= src - previous_level = get_security_level() - -/obj/machinery/nuclearbomb/Destroy() - safety = FALSE - if(!exploding) - // If we're not exploding, set the alert level back to normal - set_safety() - GLOB.poi_list -= src - GLOB.nuke_list -= src - QDEL_NULL(countdown) - QDEL_NULL(core) - . = ..() - -/obj/machinery/nuclearbomb/examine(mob/user) - . = ..() - if(exploding) - to_chat(user, "It is in the process of exploding. Perhaps reviewing your affairs is in order.") - if(timing) - to_chat(user, "There are [get_time_left()] seconds until detonation.") - -/obj/machinery/nuclearbomb/selfdestruct - name = "station self-destruct terminal" - desc = "" - icon = 'icons/obj/machines/nuke_terminal.dmi' - icon_state = "nuclearbomb_base" - anchored = TRUE //stops it being moved - -/obj/machinery/nuclearbomb/syndicate - //ui_style = "syndicate" // actually the nuke op bomb is a stole nt bomb - -/obj/machinery/nuclearbomb/syndicate/get_cinematic_type(off_station) - var/datum/game_mode/nuclear/NM = SSticker.mode - switch(off_station) - if(0) - if(istype(NM) && !NM.nuke_team.syndies_escaped()) - return CINEMATIC_ANNIHILATION - else - return CINEMATIC_NUKE_WIN - if(1) - return CINEMATIC_NUKE_MISS - if(2) - return CINEMATIC_NUKE_FAR - return CINEMATIC_NUKE_FAR - -/obj/machinery/nuclearbomb/proc/disk_check(obj/item/disk/nuclear/D) - if(D.fake) - say("Authentication failure; disk not recognised.") - return FALSE - else - return TRUE - -/obj/machinery/nuclearbomb/attackby(obj/item/I, mob/user, params) - if (istype(I, /obj/item/disk/nuclear)) - if(!disk_check(I)) - return - if(!user.transferItemToLoc(I, src)) - return - auth = I - add_fingerprint(user) - return - - switch(deconstruction_state) - if(NUKESTATE_INTACT) - if(istype(I, /obj/item/screwdriver/nuke)) - to_chat(user, "I start removing [src]'s front panel's screws...") - if(I.use_tool(src, user, 60, volume=100)) - deconstruction_state = NUKESTATE_UNSCREWED - to_chat(user, "I remove the screws from [src]'s front panel.") - update_icon() - return - - if(NUKESTATE_PANEL_REMOVED) - if(I.tool_behaviour == TOOL_WELDER) - if(!I.tool_start_check(user, amount=1)) - return - to_chat(user, "I start cutting [src]'s inner plate...") - if(I.use_tool(src, user, 80, volume=100, amount=1)) - to_chat(user, "I cut [src]'s inner plate.") - deconstruction_state = NUKESTATE_WELDED - update_icon() - return - if(NUKESTATE_CORE_EXPOSED) - if(istype(I, /obj/item/nuke_core_container)) - var/obj/item/nuke_core_container/core_box = I - to_chat(user, "I start loading the plutonium core into [core_box]...") - if(do_after(user,50,target=src)) - if(core_box.load(core, user)) - to_chat(user, "I load the plutonium core into [core_box].") - deconstruction_state = NUKESTATE_CORE_REMOVED - update_icon() - core = null - else - to_chat(user, "I fail to load the plutonium core into [core_box]. [core_box] has already been used!") - return - if(istype(I, /obj/item/stack/sheet/metal)) - if(!I.tool_start_check(user, amount=20)) - return - - to_chat(user, "I begin repairing [src]'s inner metal plate...") - if(I.use_tool(src, user, 100, amount=20)) - to_chat(user, "I repair [src]'s inner metal plate. The radiation is contained.") - deconstruction_state = NUKESTATE_PANEL_REMOVED - STOP_PROCESSING(SSobj, core) - update_icon() - return - . = ..() - -/obj/machinery/nuclearbomb/crowbar_act(mob/user, obj/item/tool) - . = FALSE - switch(deconstruction_state) - if(NUKESTATE_UNSCREWED) - to_chat(user, "I start removing [src]'s front panel...") - if(tool.use_tool(src, user, 30, volume=100)) - to_chat(user, "I remove [src]'s front panel.") - deconstruction_state = NUKESTATE_PANEL_REMOVED - update_icon() - return TRUE - if(NUKESTATE_WELDED) - to_chat(user, "I start prying off [src]'s inner plate...") - if(tool.use_tool(src, user, 30, volume=100)) - to_chat(user, "I pry off [src]'s inner plate. You can see the core's green glow!") - deconstruction_state = NUKESTATE_CORE_EXPOSED - update_icon() - START_PROCESSING(SSobj, core) - return TRUE - -/obj/machinery/nuclearbomb/proc/get_nuke_state() - if(exploding) - return NUKE_ON_EXPLODING - if(timing) - return NUKE_ON_TIMING - if(safety) - return NUKE_OFF_LOCKED - else - return NUKE_OFF_UNLOCKED - -/obj/machinery/nuclearbomb/update_icon_state() - if(deconstruction_state != NUKESTATE_INTACT) - icon_state = "nuclearbomb_base" - return - switch(get_nuke_state()) - if(NUKE_OFF_LOCKED, NUKE_OFF_UNLOCKED) - icon_state = "nuclearbomb_base" - if(NUKE_ON_TIMING) - icon_state = "nuclearbomb_timing" - if(NUKE_ON_EXPLODING) - icon_state = "nuclearbomb_exploding" - -/obj/machinery/nuclearbomb/update_overlays() - . += ..() - update_icon_interior() - update_icon_lights() - -/obj/machinery/nuclearbomb/proc/update_icon_interior() - cut_overlay(interior) - switch(deconstruction_state) - if(NUKESTATE_UNSCREWED) - interior = "panel-unscrewed" - if(NUKESTATE_PANEL_REMOVED) - interior = "panel-removed" - if(NUKESTATE_WELDED) - interior = "plate-welded" - if(NUKESTATE_CORE_EXPOSED) - interior = "plate-removed" - if(NUKESTATE_CORE_REMOVED) - interior = "core-removed" - if(NUKESTATE_INTACT) - return - add_overlay(interior) - -/obj/machinery/nuclearbomb/proc/update_icon_lights() - if(lights) - cut_overlay(lights) - switch(get_nuke_state()) - if(NUKE_OFF_LOCKED) - lights = "" - return - if(NUKE_OFF_UNLOCKED) - lights = "lights-safety" - if(NUKE_ON_TIMING) - lights = "lights-timing" - if(NUKE_ON_EXPLODING) - lights = "lights-exploding" - add_overlay(lights) - -/obj/machinery/nuclearbomb/process() - if(timing && !exploding) - if(detonation_timer < world.time) - explode() - else - var/volume = (get_time_left() <= 20 ? 30 : 5) - playsound(loc, 'sound/blank.ogg', volume, FALSE) - -/obj/machinery/nuclearbomb/ui_interact(mob/user, ui_key="main", datum/tgui/ui=null, force_open=0, datum/tgui/master_ui=null, datum/ui_state/state=GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "nuclear_bomb", name, ui_x, ui_y, master_ui, state) - ui.set_style(ui_style) - ui.open() - -/obj/machinery/nuclearbomb/ui_data(mob/user) - var/list/data = list() - data["disk_present"] = auth - data["code_approved"] = yes_code - var/first_status - if(auth) - if(yes_code) - first_status = timing ? "Func/Set" : "Functional" - else - first_status = "Auth S2." - else - if(timing) - first_status = "Set" - else - first_status = "Auth S1." - var/second_status = exploded ? "Warhead triggered, thanks for flying Nanotrasen" : (safety ? "Safe" : "Engaged") - data["status1"] = first_status - data["status2"] = second_status - data["anchored"] = anchored - data["safety"] = safety - data["timing"] = timing - data["time_left"] = get_time_left() - - data["timer_set"] = timer_set - data["timer_is_not_default"] = timer_set != default_timer_set - data["timer_is_not_min"] = timer_set != minimum_timer_set - data["timer_is_not_max"] = timer_set != maximum_timer_set - - var/message = "AUTH" - if(auth) - message = "[numeric_input]" - if(yes_code) - message = "*****" - data["message"] = message - - return data - -/obj/machinery/nuclearbomb/ui_act(action, params) - if(..()) - return - switch(action) - if("eject_disk") - if(auth && auth.loc == src) - auth.forceMove(get_turf(src)) - auth = null - . = TRUE - if("insert_disk") - if(!auth) - var/obj/item/I = usr.is_holding_item_of_type(/obj/item/disk/nuclear) - if(I && disk_check(I) && usr.transferItemToLoc(I, src)) - auth = I - . = TRUE - if("keypad") - if(auth) - var/digit = params["digit"] - switch(digit) - if("R") - numeric_input = "" - yes_code = FALSE - . = TRUE - if("E") - if(numeric_input == r_code) - numeric_input = "" - yes_code = TRUE - . = TRUE - else - numeric_input = "ERROR" - if("0","1","2","3","4","5","6","7","8","9") - if(numeric_input != "ERROR") - numeric_input += digit - if(length(numeric_input) > 5) - numeric_input = "ERROR" - . = TRUE - if("timer") - if(auth && yes_code) - var/change = params["change"] - if(change == "reset") - timer_set = default_timer_set - else if(change == "decrease") - timer_set = max(minimum_timer_set, timer_set - 10) - else if(change == "increase") - timer_set = min(maximum_timer_set, timer_set + 10) - else if(change == "input") - var/user_input = input(usr, "Set time to detonation.", name) as null|num - if(!user_input) - return - var/N = text2num(user_input) - if(!N) - return - timer_set = CLAMP(N,minimum_timer_set,maximum_timer_set) - . = TRUE - if("safety") - if(auth && yes_code && !exploded) - set_safety() - if("anchor") - if(auth && yes_code) - set_anchor() - if("toggle_timer") - if(auth && yes_code && !safety && !exploded) - set_active() - - -/obj/machinery/nuclearbomb/proc/set_anchor() - if(isinspace() && !anchored) - to_chat(usr, "There is nothing to anchor to!") - else - anchored = !anchored - -/obj/machinery/nuclearbomb/proc/set_safety() - safety = !safety - if(safety) - if(timing) - set_security_level(previous_level) - for(var/obj/item/pinpointer/nuke/syndicate/S in GLOB.pinpointer_list) - S.switch_mode_to(initial(S.mode)) - S.alert = FALSE - timing = FALSE - detonation_timer = null - countdown.stop() - update_icon() - -/obj/machinery/nuclearbomb/proc/set_active() - if(safety) - to_chat(usr, "The safety is still on.") - return - timing = !timing - if(timing) - previous_level = get_security_level() - detonation_timer = world.time + (timer_set * 10) - for(var/obj/item/pinpointer/nuke/syndicate/S in GLOB.pinpointer_list) - S.switch_mode_to(TRACK_INFILTRATOR) - countdown.start() - set_security_level("delta") - else - detonation_timer = null - set_security_level(previous_level) - for(var/obj/item/pinpointer/nuke/syndicate/S in GLOB.pinpointer_list) - S.switch_mode_to(initial(S.mode)) - S.alert = FALSE - countdown.stop() - update_icon() - -/obj/machinery/nuclearbomb/proc/get_time_left() - if(timing) - . = round(max(0, detonation_timer - world.time) / 10, 1) - else - . = timer_set - -/obj/machinery/nuclearbomb/blob_act(obj/structure/blob/B) - if(exploding) - return - qdel(src) - -/obj/machinery/nuclearbomb/tesla_act(power, tesla_flags) - ..() - if(tesla_flags & TESLA_MACHINE_EXPLOSIVE) - qdel(src)//like the singulo, tesla deletes it. stops it from exploding over and over - -#define NUKERANGE 127 -/obj/machinery/nuclearbomb/proc/explode() - if(safety) - timing = FALSE - return - - exploding = TRUE - yes_code = FALSE - safety = TRUE - update_icon() - sound_to_playing_players('sound/blank.ogg') - if(SSticker && SSticker.mode) - SSticker.roundend_check_paused = TRUE - addtimer(CALLBACK(src, PROC_REF(actually_explode)), 100) - -/obj/machinery/nuclearbomb/proc/actually_explode() - if(!core) - Cinematic(CINEMATIC_NUKE_NO_CORE,world) - SSticker.roundend_check_paused = FALSE - return - - GLOB.enter_allowed = FALSE - - var/off_station = 0 - var/turf/bomb_location = get_turf(src) - var/area/A = get_area(bomb_location) - - if(bomb_location && is_station_level(bomb_location.z)) - if(istype(A, /area/space)) - off_station = NUKE_NEAR_MISS - if((bomb_location.x < (128-NUKERANGE)) || (bomb_location.x > (128+NUKERANGE)) || (bomb_location.y < (128-NUKERANGE)) || (bomb_location.y > (128+NUKERANGE))) - off_station = NUKE_NEAR_MISS - else if(bomb_location.onSyndieBase()) - off_station = NUKE_SYNDICATE_BASE - else - off_station = NUKE_MISS_STATION - - if(off_station < 2) - SSshuttle.registerHostileEnvironment(src) - SSshuttle.lockdown = TRUE - - //Cinematic - SSticker.mode.OnNukeExplosion(off_station) - really_actually_explode(off_station) - SSticker.roundend_check_paused = FALSE - -/obj/machinery/nuclearbomb/proc/really_actually_explode(off_station) - Cinematic(get_cinematic_type(off_station),world,CALLBACK(SSticker,TYPE_PROC_REF(/datum/controller/subsystem/ticker, station_explosion_detonation),src)) - INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(KillEveryoneOnZLevel), z) - -/obj/machinery/nuclearbomb/proc/get_cinematic_type(off_station) - if(off_station < 2) - return CINEMATIC_SELFDESTRUCT - else - return CINEMATIC_SELFDESTRUCT_MISS - -/obj/machinery/nuclearbomb/beer - name = "Nanotrasen-brand nuclear fission explosive" - desc = "" - proper_bomb = FALSE - var/obj/structure/reagent_dispensers/beerkeg/keg - -/obj/machinery/nuclearbomb/beer/Initialize() - . = ..() - keg = new(src) - QDEL_NULL(core) - -/obj/machinery/nuclearbomb/beer/examine(mob/user) - . = ..() - if(keg.reagents.total_volume) - to_chat(user, "It has [keg.reagents.total_volume] unit\s left.") - else - to_chat(user, "It's empty.") - -/obj/machinery/nuclearbomb/beer/attackby(obj/item/W, mob/user, params) - if(W.is_refillable()) - W.afterattack(keg, user, TRUE) // redirect refillable containers to the keg, allowing them to be filled - return TRUE // pretend we handled the attack, too. - if(istype(W, /obj/item/nuke_core_container)) - to_chat(user, "[src] has had its plutonium core removed as a part of being decommissioned.") - return TRUE - return ..() - -/obj/machinery/nuclearbomb/beer/actually_explode() - //Unblock roundend, we're not actually exploding. - SSticker.roundend_check_paused = FALSE - var/turf/bomb_location = get_turf(src) - if(!bomb_location) - disarm() - return - if(is_station_level(bomb_location.z)) - var/datum/round_event_control/E = locate(/datum/round_event_control/vent_clog/beer) in SSevents.control - if(E) - E.runEvent() - addtimer(CALLBACK(src, PROC_REF(really_actually_explode)), 110) - else - visible_message("[src] fizzes ominously.") - addtimer(CALLBACK(src, PROC_REF(fizzbuzz)), 110) - -/obj/machinery/nuclearbomb/beer/proc/disarm() - detonation_timer = null - exploding = FALSE - exploded = TRUE - set_security_level(previous_level) - for(var/obj/item/pinpointer/nuke/syndicate/S in GLOB.pinpointer_list) - S.switch_mode_to(initial(S.mode)) - S.alert = FALSE - countdown.stop() - update_icon() - -/obj/machinery/nuclearbomb/beer/proc/fizzbuzz() - var/datum/reagents/R = new/datum/reagents(1000) - R.my_atom = src - R.add_reagent(/datum/reagent/consumable/ethanol/beer, 100) - - var/datum/effect_system/foam_spread/foam = new - foam.set_up(200, get_turf(src), R) - foam.start() - disarm() - -/obj/machinery/nuclearbomb/beer/really_actually_explode() - disarm() - -/proc/KillEveryoneOnZLevel(z) - if(!z) - return - for(var/mob/M in GLOB.mob_list) - if(M.stat != DEAD && M.z == z) - M.gib() - -/* -This is here to make the tiles around the station mininuke change when it's armed. -*/ - -/obj/machinery/nuclearbomb/selfdestruct/set_anchor() - return - -/obj/machinery/nuclearbomb/selfdestruct/set_active() - ..() - if(timing) - SSmapping.add_nuke_threat(src) - else - SSmapping.remove_nuke_threat(src) - -/obj/machinery/nuclearbomb/selfdestruct/set_safety() - ..() - if(timing) - SSmapping.add_nuke_threat(src) - else - SSmapping.remove_nuke_threat(src) - -//==========DAT FUKKEN DISK=============== -/obj/item/disk - icon = 'icons/obj/module.dmi' - w_class = WEIGHT_CLASS_TINY - item_state = "card-id" - lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' - icon_state = "datadisk0" - drop_sound = 'sound/blank.ogg' - pickup_sound = 'sound/blank.ogg' - -/obj/item/disk/nuclear - name = "nuclear authentication disk" - desc = "" - icon_state = "nucleardisk" - persistence_replacement = /obj/item/disk/nuclear/fake - max_integrity = 250 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - var/fake = FALSE - var/turf/lastlocation - var/last_disk_move - -/obj/item/disk/nuclear/Initialize() - . = ..() - if(!fake) - GLOB.poi_list |= src - last_disk_move = world.time - START_PROCESSING(SSobj, src) - -/obj/item/disk/nuclear/ComponentInitialize() - . = ..() - AddComponent(/datum/component/stationloving, !fake) - -/obj/item/disk/nuclear/process() - if(fake) - STOP_PROCESSING(SSobj, src) - CRASH("A fake nuke disk tried to call process(). Who the fuck and how the fuck") - var/turf/newturf = get_turf(src) - if(newturf && lastlocation == newturf) - if(last_disk_move < world.time - 5000 && prob((world.time - 5000 - last_disk_move)*0.0001)) - var/datum/round_event_control/operative/loneop = locate(/datum/round_event_control/operative) in SSevents.control - if(istype(loneop)) - loneop.weight += 1 - if(loneop.weight % 5 == 0) - message_admins("[src] is stationary in [ADMIN_VERBOSEJMP(newturf)]. The weight of Lone Operative is now [loneop.weight].") - log_game("[src] is stationary for too long in [loc_name(newturf)], and has increased the weight of the Lone Operative event to [loneop.weight].") - - else - lastlocation = newturf - last_disk_move = world.time - var/datum/round_event_control/operative/loneop = locate(/datum/round_event_control/operative) in SSevents.control - if(istype(loneop) && prob(loneop.weight)) - loneop.weight = max(loneop.weight - 1, 0) - if(loneop.weight % 5 == 0) - message_admins("[src] is on the move (currently in [ADMIN_VERBOSEJMP(newturf)]). The weight of Lone Operative is now [loneop.weight].") - log_game("[src] being on the move has reduced the weight of the Lone Operative event to [loneop.weight].") - -/obj/item/disk/nuclear/examine(mob/user) - . = ..() - if(!fake) - return - - if(isobserver(user) || HAS_TRAIT(user.mind, TRAIT_DISK_VERIFIER)) - . += "The serial numbers on [src] are incorrect." - -/obj/item/disk/nuclear/attackby(obj/item/I, mob/living/user, params) - if(istype(I, /obj/item/claymore/highlander) && !fake) - var/obj/item/claymore/highlander/H = I - if(H.nuke_disk) - to_chat(user, "Wait... what?") - qdel(H.nuke_disk) - H.nuke_disk = null - return - user.visible_message("[user] captures [src]!", "You've got the disk! Defend it with your life!") - forceMove(H) - H.nuke_disk = src - return TRUE - return ..() - -/obj/item/disk/nuclear/Destroy(force=FALSE) - // respawning is handled in /obj/Destroy() - if(force) - GLOB.poi_list -= src - . = ..() - -/obj/item/disk/nuclear/suicide_act(mob/user) - user.visible_message("[user] is going delta! It looks like [user.p_theyre()] trying to commit suicide!") - playsound(src, 'sound/blank.ogg', 50, -1, TRUE) - for(var/i in 1 to 100) - addtimer(CALLBACK(user, TYPE_PROC_REF(/atom, add_atom_colour), (i % 2)? "#00FF00" : "#FF0000", ADMIN_COLOUR_PRIORITY), i) - addtimer(CALLBACK(src, PROC_REF(manual_suicide), user), 101) - return MANUAL_SUICIDE - -/obj/item/disk/nuclear/proc/manual_suicide(mob/living/user) - user.remove_atom_colour(ADMIN_COLOUR_PRIORITY) - user.visible_message("[user] was destroyed by the nuclear blast!") - user.adjustOxyLoss(200) - user.death(0) - -/obj/item/disk/nuclear/fake - fake = TRUE - -/obj/item/disk/nuclear/fake/obvious - name = "cheap plastic imitation of the nuclear authentication disk" - desc = "" diff --git a/code/modules/antagonists/nukeop/equipment/pinpointer.dm b/code/modules/antagonists/nukeop/equipment/pinpointer.dm deleted file mode 100644 index 3c2259bad7..0000000000 --- a/code/modules/antagonists/nukeop/equipment/pinpointer.dm +++ /dev/null @@ -1,90 +0,0 @@ -/obj/item/pinpointer/nuke - var/mode = TRACK_NUKE_DISK - -/obj/item/pinpointer/nuke/examine(mob/user) - . = ..() - var/msg = "Its tracking indicator reads " - switch(mode) - if(TRACK_NUKE_DISK) - msg += "\"nuclear_disk\"." - if(TRACK_MALF_AI) - msg += "\"01000001 01001001\"." - if(TRACK_INFILTRATOR) - msg += "\"vasvygengbefuvc\"." - else - msg = "Its tracking indicator is blank." - . += msg - for(var/obj/machinery/nuclearbomb/bomb in GLOB.machines) - if(bomb.timing) - . += "Extreme danger. Arming signal detected. Time remaining: [bomb.get_time_left()]." - -/obj/item/pinpointer/nuke/process() - ..() - if(active) // If shit's going down - for(var/obj/machinery/nuclearbomb/bomb in GLOB.nuke_list) - if(bomb.timing) - if(!alert) - alert = TRUE - playsound(src, 'sound/blank.ogg', 50, FALSE) - if(isliving(loc)) - var/mob/living/L = loc - to_chat(L, "My [name] vibrates and lets out a tinny alarm. Uh oh.") - -/obj/item/pinpointer/nuke/scan_for_target() - target = null - switch(mode) - if(TRACK_NUKE_DISK) - var/obj/item/disk/nuclear/N = locate() in GLOB.poi_list - target = N - if(TRACK_MALF_AI) - for(var/V in GLOB.ai_list) - var/mob/living/silicon/ai/A = V - if(A.nuking) - target = A - for(var/V in GLOB.apcs_list) - var/obj/machinery/power/apc/A = V - if(A.malfhack && A.occupier) - target = A - if(TRACK_INFILTRATOR) - target = SSshuttle.getShuttle("syndicate") - ..() - -/obj/item/pinpointer/nuke/proc/switch_mode_to(new_mode) - if(isliving(loc)) - var/mob/living/L = loc - to_chat(L, "My [name] beeps as it reconfigures it's tracking algorithms.") - playsound(L, 'sound/blank.ogg', 50, TRUE) - mode = new_mode - scan_for_target() - -/obj/item/pinpointer/nuke/syndicate // Syndicate pinpointers automatically point towards the infiltrator once the nuke is active. - name = "syndicate pinpointer" - desc = "" - icon_state = "pinpointer_syndicate" - -/obj/item/pinpointer/syndicate_cyborg // Cyborg pinpointers just look for a random operative. - name = "cyborg syndicate pinpointer" - desc = "" - flags_1 = NONE - -/obj/item/pinpointer/syndicate_cyborg/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CYBORG_ITEM_TRAIT) - -/obj/item/pinpointer/syndicate_cyborg/cyborg_unequip(mob/user) - if(!active) - return - toggle_on() - -/obj/item/pinpointer/syndicate_cyborg/scan_for_target() - target = null - var/list/possible_targets = list() - var/turf/here = get_turf(src) - for(var/V in get_antag_minds(/datum/antagonist/nukeop)) - var/datum/mind/M = V - if(ishuman(M.current) && M.current.stat != DEAD) - possible_targets |= M.current - var/mob/living/closest_operative = get_closest_atom(/mob/living/carbon/human, possible_targets, here) - if(closest_operative) - target = closest_operative - ..() diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm deleted file mode 100644 index dd9d7a1482..0000000000 --- a/code/modules/antagonists/nukeop/nukeop.dm +++ /dev/null @@ -1,394 +0,0 @@ -/datum/antagonist/nukeop - name = "Nuclear Operative" - roundend_category = "syndicate operatives" //just in case - antagpanel_category = "NukeOp" - job_rank = ROLE_OPERATIVE - antag_hud_type = ANTAG_HUD_OPS - antag_hud_name = "synd" - antag_moodlet = /datum/mood_event/focused - var/datum/team/nuclear/nuke_team - var/always_new_team = FALSE //If not assigned a team by default ops will try to join existing ones, set this to TRUE to always create new team. - var/send_to_spawnpoint = TRUE //Should the user be moved to default spawnpoint. - var/nukeop_outfit = /datum/outfit/syndicate - can_hijack = HIJACK_HIJACKER //Alternative way to wipe out the station. - - -/datum/antagonist/nukeop/apply_innate_effects(mob/living/mob_override) - var/mob/living/M = mob_override || owner.current - add_antag_hud(antag_hud_type, antag_hud_name, M) - ADD_TRAIT(owner, TRAIT_DISK_VERIFIER, NUKEOP_TRAIT) - -/datum/antagonist/nukeop/remove_innate_effects(mob/living/mob_override) - var/mob/living/M = mob_override || owner.current - remove_antag_hud(antag_hud_type, M) - REMOVE_TRAIT(owner, TRAIT_DISK_VERIFIER, NUKEOP_TRAIT) - -/datum/antagonist/nukeop/proc/equip_op() - if(!ishuman(owner.current)) - return - var/mob/living/carbon/human/H = owner.current - - H.set_species(/datum/species/human) //Plasamen burn up otherwise, and lizards are vulnerable to asimov AIs - - H.equipOutfit(nukeop_outfit) - return TRUE - -/datum/antagonist/nukeop/greet() - owner.current.playsound_local(get_turf(owner.current), 'sound/blank.ogg',100,0) - to_chat(owner, "I are a [nuke_team ? nuke_team.syndicate_name : "syndicate"] agent!") - owner.announce_objectives() - -/datum/antagonist/nukeop/on_gain() - give_alias() - forge_objectives() - . = ..() - equip_op() - memorize_code() - if(send_to_spawnpoint) - move_to_spawnpoint() - // grant extra TC for the people who start in the nukie base ie. not the lone op - var/extra_tc = CEILING(GLOB.joined_player_list.len/5, 5) - var/datum/component/uplink/U = owner.find_syndicate_uplink() - if (U) - U.telecrystals += extra_tc - - - -/datum/antagonist/nukeop/get_team() - return nuke_team - -/datum/antagonist/nukeop/proc/assign_nuke() - if(nuke_team && !nuke_team.tracked_nuke) - nuke_team.memorized_code = random_nukecode() - var/obj/machinery/nuclearbomb/syndicate/nuke = locate() in GLOB.nuke_list - if(nuke) - nuke_team.tracked_nuke = nuke - if(nuke.r_code == "ADMIN") - nuke.r_code = nuke_team.memorized_code - else //Already set by admins/something else? - nuke_team.memorized_code = nuke.r_code - for(var/obj/machinery/nuclearbomb/beer/beernuke in GLOB.nuke_list) - beernuke.r_code = nuke_team.memorized_code - else - stack_trace("Syndicate nuke not found during nuke team creation.") - nuke_team.memorized_code = null - -/datum/antagonist/nukeop/proc/give_alias() - if(nuke_team && nuke_team.syndicate_name) - var/mob/living/carbon/human/H = owner.current - if(istype(H)) // Reinforcements get a real name - var/chosen_name = H.dna.species.random_name(H.gender,0,nuke_team.syndicate_name) - H.fully_replace_character_name(H.real_name,chosen_name) - else - var/number = 1 - number = nuke_team.members.Find(owner) - owner.current.real_name = "[nuke_team.syndicate_name] Operative #[number]" - - - -/datum/antagonist/nukeop/proc/memorize_code() - if(nuke_team && nuke_team.tracked_nuke && nuke_team.memorized_code) - antag_memory += "[nuke_team.tracked_nuke] Code: [nuke_team.memorized_code]
    " - to_chat(owner, "The nuclear authorization code is: [nuke_team.memorized_code]") - else - to_chat(owner, "Unfortunately the syndicate was unable to provide you with nuclear authorization code.") - -/datum/antagonist/nukeop/proc/forge_objectives() - if(nuke_team) - objectives |= nuke_team.objectives - -/datum/antagonist/nukeop/proc/move_to_spawnpoint() - var/team_number = 1 - if(nuke_team) - team_number = nuke_team.members.Find(owner) - owner.current.forceMove(GLOB.nukeop_start[((team_number - 1) % GLOB.nukeop_start.len) + 1]) - -/datum/antagonist/nukeop/leader/move_to_spawnpoint() - owner.current.forceMove(pick(GLOB.nukeop_leader_start)) - -/datum/antagonist/nukeop/create_team(datum/team/nuclear/new_team) - if(!new_team) - if(!always_new_team) - for(var/datum/antagonist/nukeop/N in GLOB.antagonists) - if(!N.owner) - continue - if(N.nuke_team) - nuke_team = N.nuke_team - return - nuke_team = new /datum/team/nuclear - nuke_team.update_objectives() - assign_nuke() //This is bit ugly - return - if(!istype(new_team)) - stack_trace("Wrong team type passed to [type] initialization.") - nuke_team = new_team - -/datum/antagonist/nukeop/admin_add(datum/mind/new_owner,mob/admin) - new_owner.assigned_role = ROLE_SYNDICATE - new_owner.add_antag_datum(src) - message_admins("[key_name_admin(admin)] has nuke op'ed [key_name_admin(new_owner)].") - log_admin("[key_name(admin)] has nuke op'ed [key_name(new_owner)].") - -/datum/antagonist/nukeop/get_admin_commands() - . = ..() - .["Send to base"] = CALLBACK(src,PROC_REF(admin_send_to_base)) - .["Tell code"] = CALLBACK(src,PROC_REF(admin_tell_code)) - -/datum/antagonist/nukeop/proc/admin_send_to_base(mob/admin) - owner.current.forceMove(pick(GLOB.nukeop_start)) - -/datum/antagonist/nukeop/proc/admin_tell_code(mob/admin) - var/code - for (var/obj/machinery/nuclearbomb/bombue in GLOB.machines) - if (length(bombue.r_code) <= 5 && bombue.r_code != initial(bombue.r_code)) - code = bombue.r_code - break - if (code) - antag_memory += "Syndicate Nuclear Bomb Code: [code]
    " - to_chat(owner.current, "The nuclear authorization code is: [code]") - else - to_chat(admin, "No valid nuke found!") - -/datum/antagonist/nukeop/leader - name = "Nuclear Operative Leader" - nukeop_outfit = /datum/outfit/syndicate/leader - always_new_team = TRUE - var/title - -/datum/antagonist/nukeop/leader/memorize_code() - ..() - if(nuke_team && nuke_team.memorized_code) - var/obj/item/paper/P = new - P.info = "The nuclear authorization code is: [nuke_team.memorized_code]" - P.name = "nuclear bomb code" - var/mob/living/carbon/human/H = owner.current - if(!istype(H)) - P.forceMove(get_turf(H)) - else - H.put_in_hands(P, TRUE) - H.update_icons() - -/datum/antagonist/nukeop/leader/give_alias() - title = pick("Czar", "Boss", "Commander", "Chief", "Kingpin", "Director", "Overlord") - if(nuke_team && nuke_team.syndicate_name) - owner.current.real_name = "[nuke_team.syndicate_name] [title]" - else - owner.current.real_name = "Syndicate [title]" - -/datum/antagonist/nukeop/leader/greet() - owner.current.playsound_local(get_turf(owner.current), 'sound/blank.ogg',100,0) - to_chat(owner, "I are the Syndicate [title] for this mission. You are responsible for the distribution of telecrystals and your ID is the only one who can open the launch bay doors.") - to_chat(owner, "If you feel you are not up to this task, give your ID to another operative.") - to_chat(owner, "In your hand you will find a special item capable of triggering a greater challenge for your team. Examine it carefully and consult with your fellow operatives before activating it.") - owner.announce_objectives() - addtimer(CALLBACK(src, PROC_REF(nuketeam_name_assign)), 1) - - -/datum/antagonist/nukeop/leader/proc/nuketeam_name_assign() - if(!nuke_team) - return - nuke_team.rename_team(ask_name()) - -/datum/team/nuclear/proc/rename_team(new_name) - syndicate_name = new_name - name = "[syndicate_name] Team" - for(var/I in members) - var/datum/mind/synd_mind = I - var/mob/living/carbon/human/H = synd_mind.current - if(!istype(H)) - continue - var/chosen_name = H.dna.species.random_name(H.gender,0,syndicate_name) - H.fully_replace_character_name(H.real_name,chosen_name) - -/datum/antagonist/nukeop/leader/proc/ask_name() - var/randomname = pick(GLOB.last_names) - var/newname = stripped_input(owner.current,"You are the nuke operative [title]. Please choose a last name for your family.", "Name change",randomname) - if (!newname) - newname = randomname - else - newname = reject_bad_name(newname) - if(!newname) - newname = randomname - - return capitalize(newname) - -/datum/antagonist/nukeop/lone - name = "Lone Operative" - always_new_team = TRUE - send_to_spawnpoint = FALSE //Handled by event - nukeop_outfit = /datum/outfit/syndicate/full - -/datum/antagonist/nukeop/lone/assign_nuke() - if(nuke_team && !nuke_team.tracked_nuke) - nuke_team.memorized_code = random_nukecode() - var/obj/machinery/nuclearbomb/selfdestruct/nuke = locate() in GLOB.nuke_list - if(nuke) - nuke_team.tracked_nuke = nuke - if(nuke.r_code == "ADMIN") - nuke.r_code = nuke_team.memorized_code - else //Already set by admins/something else? - nuke_team.memorized_code = nuke.r_code - else - stack_trace("Station self destruct not found during lone op team creation.") - nuke_team.memorized_code = null - -/datum/antagonist/nukeop/reinforcement - send_to_spawnpoint = FALSE - nukeop_outfit = /datum/outfit/syndicate/no_crystals - -/datum/team/nuclear - var/syndicate_name - var/obj/machinery/nuclearbomb/tracked_nuke - var/core_objective = /datum/objective/nuclear - var/memorized_code - var/list/team_discounts - -/datum/team/nuclear/New() - ..() - syndicate_name = syndicate_name() - -/datum/team/nuclear/proc/update_objectives() - if(core_objective) - var/datum/objective/O = new core_objective - O.team = src - objectives += O - -/datum/team/nuclear/proc/disk_rescued() - for(var/obj/item/disk/nuclear/D in GLOB.poi_list) - //If emergency shuttle is in transit disk is only safe on it - if(SSshuttle.emergency.mode == SHUTTLE_ESCAPE) - if(!SSshuttle.emergency.is_in_shuttle_bounds(D)) - return FALSE - //If shuttle escaped check if it's on centcom side - else if(SSshuttle.emergency.mode == SHUTTLE_ENDGAME) - if(!D.onCentCom()) - return FALSE - else //Otherwise disk is safe when on station - var/turf/T = get_turf(D) - if(!T || !is_station_level(T.z)) - return FALSE - return TRUE - -/datum/team/nuclear/proc/operatives_dead() - for(var/I in members) - var/datum/mind/operative_mind = I - if(ishuman(operative_mind.current) && (operative_mind.current.stat != DEAD)) - return FALSE - return TRUE - -/datum/team/nuclear/proc/syndies_escaped() - var/obj/docking_port/mobile/S = SSshuttle.getShuttle("syndicate") - var/obj/docking_port/stationary/transit/T = locate() in S.loc - return S && (is_centcom_level(S.z) || T) - -/datum/team/nuclear/proc/get_result() - var/evacuation = EMERGENCY_ESCAPED_OR_ENDGAMED - var/disk_rescued = disk_rescued() - var/syndies_didnt_escape = !syndies_escaped() - var/station_was_nuked = SSticker.mode.station_was_nuked - var/nuke_off_station = SSticker.mode.nuke_off_station - - if(nuke_off_station == NUKE_SYNDICATE_BASE) - return NUKE_RESULT_FLUKE - else if(station_was_nuked && !syndies_didnt_escape) - return NUKE_RESULT_NUKE_WIN - else if (station_was_nuked && syndies_didnt_escape) - return NUKE_RESULT_NOSURVIVORS - else if (!disk_rescued && !station_was_nuked && nuke_off_station && !syndies_didnt_escape) - return NUKE_RESULT_WRONG_STATION - else if (!disk_rescued && !station_was_nuked && nuke_off_station && syndies_didnt_escape) - return NUKE_RESULT_WRONG_STATION_DEAD - else if ((disk_rescued && evacuation) && operatives_dead()) - return NUKE_RESULT_CREW_WIN_SYNDIES_DEAD - else if (disk_rescued) - return NUKE_RESULT_CREW_WIN - else if (!disk_rescued && operatives_dead()) - return NUKE_RESULT_DISK_LOST - else if (!disk_rescued && evacuation) - return NUKE_RESULT_DISK_STOLEN - else - return //Undefined result - -/datum/team/nuclear/roundend_report() - var/list/parts = list() - parts += "[syndicate_name] Operatives:" - - switch(get_result()) - if(NUKE_RESULT_FLUKE) - parts += "Humiliating Syndicate Defeat" - parts += "The crew of [station_name()] gave [syndicate_name] operatives back their bomb! The syndicate base was destroyed! Next time, don't lose the nuke!" - if(NUKE_RESULT_NUKE_WIN) - parts += "Syndicate Major Victory!" - parts += "[syndicate_name] operatives have destroyed [station_name()]!" - if(NUKE_RESULT_NOSURVIVORS) - parts += "Total Annihilation" - parts += "[syndicate_name] operatives destroyed [station_name()] but did not leave the area in time and got caught in the explosion. Next time, don't lose the disk!" - if(NUKE_RESULT_WRONG_STATION) - parts += "Crew Minor Victory" - parts += "[syndicate_name] operatives secured the authentication disk but blew up something that wasn't [station_name()]. Next time, don't do that!" - if(NUKE_RESULT_WRONG_STATION_DEAD) - parts += "[syndicate_name] operatives have earned Darwin Award!" - parts += "[syndicate_name] operatives blew up something that wasn't [station_name()] and got caught in the explosion. Next time, don't do that!" - if(NUKE_RESULT_CREW_WIN_SYNDIES_DEAD) - parts += "Crew Major Victory!" - parts += "The Research Staff has saved the disk and killed the [syndicate_name] Operatives" - if(NUKE_RESULT_CREW_WIN) - parts += "Crew Major Victory" - parts += "The Research Staff has saved the disk and stopped the [syndicate_name] Operatives!" - if(NUKE_RESULT_DISK_LOST) - parts += "Neutral Victory!" - parts += "The Research Staff failed to secure the authentication disk but did manage to kill most of the [syndicate_name] Operatives!" - if(NUKE_RESULT_DISK_STOLEN) - parts += "Syndicate Minor Victory!" - parts += "[syndicate_name] operatives survived the assault but did not achieve the destruction of [station_name()]. Next time, don't lose the disk!" - else - parts += "Neutral Victory" - parts += "Mission aborted!" - - var/text = "
    The syndicate operatives were:" - var/purchases = "" - var/TC_uses = 0 - LAZYINITLIST(GLOB.uplink_purchase_logs_by_key) - for(var/I in members) - var/datum/mind/syndicate = I - var/datum/uplink_purchase_log/H = GLOB.uplink_purchase_logs_by_key[syndicate.key] - if(H) - TC_uses += H.total_spent - purchases += H.generate_render(show_key = FALSE) - text += printplayerlist(members) - text += "
    " - text += "(Syndicates used [TC_uses] TC) [purchases]" - if(TC_uses == 0 && SSticker.mode.station_was_nuked && !operatives_dead()) - text += "[icon2html('icons/badass.dmi', world, "badass")]" - - parts += text - - return "
    [parts.Join("
    ")]
    " - -/datum/team/nuclear/antag_listing_name() - if(syndicate_name) - return "[syndicate_name] Syndicates" - else - return "Syndicates" - -/datum/team/nuclear/antag_listing_entry() - var/disk_report = "Nuclear Disk(s)
    " - disk_report += "" - for(var/obj/item/disk/nuclear/N in GLOB.poi_list) - disk_report += "" - disk_report += "
    [N.name], " - var/atom/disk_loc = N.loc - while(!isturf(disk_loc)) - if(ismob(disk_loc)) - var/mob/M = disk_loc - disk_report += "carried by [M.real_name] " - if(isobj(disk_loc)) - var/obj/O = disk_loc - disk_report += "in \a [O.name] " - disk_loc = disk_loc.loc - disk_report += "in [disk_loc.loc] at ([disk_loc.x], [disk_loc.y], [disk_loc.z])FLW
    " - var/common_part = ..() - return common_part + disk_report - -/datum/team/nuclear/is_gamemode_hero() - return SSticker.mode.name == "nuclear emergency" diff --git a/code/modules/antagonists/official/official.dm b/code/modules/antagonists/official/official.dm deleted file mode 100644 index fbec07d9c4..0000000000 --- a/code/modules/antagonists/official/official.dm +++ /dev/null @@ -1,44 +0,0 @@ -/datum/antagonist/official - name = "CentCom Official" - show_name_in_check_antagonists = TRUE - show_in_antagpanel = FALSE - var/datum/objective/mission - var/datum/team/ert/ert_team - can_hijack = HIJACK_PREVENT - -/datum/antagonist/official/greet() - to_chat(owner, "I are a CentCom Official.") - if (ert_team) - to_chat(owner, "Central Command is sending you to [station_name()] with the task: [ert_team.mission.explanation_text]") - else - to_chat(owner, "Central Command is sending you to [station_name()] with the task: [mission.explanation_text]") - -/datum/antagonist/official/proc/equip_official() - var/mob/living/carbon/human/H = owner.current - if(!istype(H)) - return - H.equipOutfit(/datum/outfit/centcom_official) - - if(CONFIG_GET(flag/enforce_human_authority)) - H.set_species(/datum/species/human) - -/datum/antagonist/official/create_team(datum/team/new_team) - if(istype(new_team)) - ert_team = new_team - -/datum/antagonist/official/proc/forge_objectives() - if (ert_team) - objectives |= ert_team.objectives - else if (!mission) - var/datum/objective/missionobj = new - missionobj.owner = owner - missionobj.explanation_text = "Conduct a routine performance review of [station_name()] and its Captain." - missionobj.completed = 1 - mission = missionobj - objectives |= mission - - -/datum/antagonist/official/on_gain() - forge_objectives() - . = ..() - equip_official() diff --git a/code/modules/antagonists/pirate/pirate.dm b/code/modules/antagonists/pirate/pirate.dm deleted file mode 100644 index 64e60b9372..0000000000 --- a/code/modules/antagonists/pirate/pirate.dm +++ /dev/null @@ -1,107 +0,0 @@ -/datum/antagonist/pirate - name = "Space Pirate" - job_rank = ROLE_TRAITOR - roundend_category = "space pirates" - antagpanel_category = "Pirate" - var/datum/team/pirate/crew - -/datum/antagonist/pirate/greet() - to_chat(owner, "I are a Space Pirate!") - to_chat(owner, "The station refused to pay for your protection, protect the ship, siphon the credits from the station and raid it for even more loot.") - owner.announce_objectives() - -/datum/antagonist/pirate/get_team() - return crew - -/datum/antagonist/pirate/create_team(datum/team/pirate/new_team) - if(!new_team) - for(var/datum/antagonist/pirate/P in GLOB.antagonists) - if(!P.owner) - continue - if(P.crew) - crew = P.crew - return - if(!new_team) - crew = new /datum/team/pirate - crew.forge_objectives() - return - if(!istype(new_team)) - stack_trace("Wrong team type passed to [type] initialization.") - crew = new_team - -/datum/antagonist/pirate/on_gain() - if(crew) - objectives |= crew.objectives - . = ..() - -/datum/team/pirate - name = "Pirate crew" - -/datum/team/pirate/proc/forge_objectives() - var/datum/objective/loot/getbooty = new() - getbooty.team = src - for(var/obj/machinery/computer/piratepad_control/P in GLOB.machines) - var/area/A = get_area(P) - if(istype(A,/area/shuttle/pirate)) - getbooty.cargo_hold = P - break - getbooty.update_explanation_text() - objectives += getbooty - for(var/datum/mind/M in members) - var/datum/antagonist/pirate/P = M.has_antag_datum(/datum/antagonist/pirate) - if(P) - P.objectives |= objectives - - -/datum/objective/loot - var/obj/machinery/computer/piratepad_control/cargo_hold - explanation_text = "Acquire valuable loot and store it in designated area." - var/target_value = 50000 - - -/datum/objective/loot/update_explanation_text() - if(cargo_hold) - var/area/storage_area = get_area(cargo_hold) - explanation_text = "Acquire loot and store [target_value] of credits worth in [storage_area.name] cargo hold." - -/datum/objective/loot/proc/loot_listing() - //Lists notable loot. - if(!cargo_hold || !cargo_hold.total_report) - return "Nothing" - cargo_hold.total_report.total_value = sortTim(cargo_hold.total_report.total_value, cmp = /proc/cmp_numeric_dsc, associative = TRUE) - var/count = 0 - var/list/loot_texts = list() - for(var/datum/export/E in cargo_hold.total_report.total_value) - if(++count > 5) - break - loot_texts += E.total_printout(cargo_hold.total_report,notes = FALSE) - return loot_texts.Join(", ") - -/datum/objective/loot/proc/get_loot_value() - return cargo_hold ? cargo_hold.points : 0 - -/datum/objective/loot/check_completion() - return ..() || get_loot_value() >= target_value - -/datum/team/pirate/roundend_report() - var/list/parts = list() - - parts += "Space Pirates were:" - - var/all_dead = TRUE - for(var/datum/mind/M in members) - if(considered_alive(M)) - all_dead = FALSE - parts += printplayerlist(members) - - parts += "Loot stolen: " - var/datum/objective/loot/L = locate() in objectives - parts += L.loot_listing() - parts += "Total loot value : [L.get_loot_value()]/[L.target_value] credits" - - if(L.check_completion() && !all_dead) - parts += "The pirate crew was successful!" - else - parts += "The pirate crew has failed." - - return "
    [parts.Join("
    ")]
    " diff --git a/code/modules/antagonists/revenant/revenant_abilities.dm b/code/modules/antagonists/revenant/revenant_abilities.dm index f439c44a75..ca6209fa94 100644 --- a/code/modules/antagonists/revenant/revenant_abilities.dm +++ b/code/modules/antagonists/revenant/revenant_abilities.dm @@ -242,7 +242,7 @@ qdel(B) new /obj/effect/temp_visual/revenant(T) - if(!isplatingturf(T) && !istype(T, /turf/open/floor/engine/cult) && isfloorturf(T) && prob(15)) + if(!isplatingturf(T) && isfloorturf(T) && prob(15)) var/turf/open/floor/floor = T if(floor.intact && floor.floor_tile) new floor.floor_tile(floor) @@ -263,8 +263,6 @@ for(var/obj/structure/bodycontainer/corpseholder in T) if(corpseholder.connected.loc == corpseholder) corpseholder.open() - for(var/obj/machinery/dna_scannernew/dna in T) - dna.open_machine() for(var/obj/structure/window/window in T) window.take_damage(rand(30,80)) if(window && window.fulltile) @@ -289,12 +287,6 @@ INVOKE_ASYNC(src, PROC_REF(malfunction), T, user) /obj/effect/proc_holder/spell/aoe_turf/revenant/malfunction/proc/malfunction(turf/T, mob/user) - for(var/mob/living/simple_animal/bot/bot in T) - if(!bot.emagged) - new /obj/effect/temp_visual/revenant(bot.loc) - bot.locked = FALSE - bot.open = TRUE - bot.emag_act() for(var/mob/living/carbon/human/human in T) if(human == user) continue @@ -304,20 +296,10 @@ new /obj/effect/temp_visual/revenant(human.loc) human.emp_act(EMP_HEAVY) for(var/obj/thing in T) - if(istype(thing, /obj/machinery/power/apc) || istype(thing, /obj/machinery/power/smes)) //Doesn't work on SMES and APCs, to prevent kekkery - continue if(prob(20)) if(prob(50)) new /obj/effect/temp_visual/revenant(thing.loc) thing.emag_act(null) - else - if(!istype(thing, /obj/machinery/clonepod)) //I hate everything but mostly the fact there's no better way to do this without just not affecting it at all - thing.emp_act(EMP_HEAVY) - for(var/mob/living/silicon/robot/S in T) //Only works on cyborgs, not AI - playsound(S, 'sound/blank.ogg', 50, TRUE) - new /obj/effect/temp_visual/revenant(S.loc) - S.spark_system.start() - S.emp_act(EMP_HEAVY) //Blight: Infects nearby humans and in general messes living stuff up. /obj/effect/proc_holder/spell/aoe_turf/revenant/blight @@ -367,8 +349,3 @@ shroom.add_atom_colour("#823abb", TEMPORARY_COLOUR_PRIORITY) new /obj/effect/temp_visual/revenant(shroom.loc) QDEL_IN(shroom, 10) - for(var/obj/machinery/hydroponics/tray in T) - new /obj/effect/temp_visual/revenant(tray.loc) - tray.pestlevel = rand(8, 10) - tray.weedlevel = rand(8, 10) - tray.toxic = rand(45, 55) diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm deleted file mode 100644 index ca22426e45..0000000000 --- a/code/modules/antagonists/revolution/revolution.dm +++ /dev/null @@ -1,404 +0,0 @@ -//How often to check for promotion possibility -#define HEAD_UPDATE_PERIOD 300 //SS13 define, redefined in peasantrebel.dm nice job rippin revcode - -/datum/antagonist/rev - name = "Revolutionary" - roundend_category = "revolutionaries" // if by some miracle revolutionaries without revolution happen - antagpanel_category = "Revolution" - job_rank = ROLE_REV - antag_moodlet = /datum/mood_event/revolution - antag_hud_type = ANTAG_HUD_REV - antag_hud_name = "rev" - var/datum/team/revolution/rev_team - -/datum/antagonist/rev/can_be_owned(datum/mind/new_owner) - . = ..() - if(.) - if(new_owner.assigned_role in GLOB.command_positions) - return FALSE - if(new_owner.unconvertable) - return FALSE - if(new_owner.current && HAS_TRAIT(new_owner.current, TRAIT_MINDSHIELD)) - return FALSE - -/datum/antagonist/rev/apply_innate_effects(mob/living/mob_override) - var/mob/living/M = mob_override || owner.current - add_antag_hud(antag_hud_type, antag_hud_name, M) - handle_clown_mutation(M, mob_override ? null : "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming myself.") - -/datum/antagonist/rev/remove_innate_effects(mob/living/mob_override) - var/mob/living/M = mob_override || owner.current - remove_antag_hud(antag_hud_type, M) - handle_clown_mutation(M, removing = FALSE) - -/datum/antagonist/rev/proc/equip_rev() - return - -/datum/antagonist/rev/on_gain() - . = ..() - create_objectives() - equip_rev() - owner.current.log_message("has been converted to the revolution!", LOG_ATTACK, color="red") - -/datum/antagonist/rev/on_removal() - remove_objectives() - . = ..() - -/datum/antagonist/rev/greet() - to_chat(owner, "I are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!") - owner.announce_objectives() - -/datum/antagonist/rev/create_team(datum/team/revolution/new_team) - if(!new_team) - //For now only one revolution at a time - for(var/datum/antagonist/rev/head/H in GLOB.antagonists) - if(!H.owner) - continue - if(H.rev_team) - rev_team = H.rev_team - return - rev_team = new /datum/team/revolution - rev_team.update_objectives() - rev_team.update_heads() - return - if(!istype(new_team)) - stack_trace("Wrong team type passed to [type] initialization.") - rev_team = new_team - -/datum/antagonist/rev/get_team() - return rev_team - -/datum/antagonist/rev/proc/create_objectives() - objectives |= rev_team.objectives - -/datum/antagonist/rev/proc/remove_objectives() - objectives -= rev_team.objectives - -//Bump up to head_rev -/datum/antagonist/rev/proc/promote() - var/old_team = rev_team - var/datum/mind/old_owner = owner - silent = TRUE - owner.remove_antag_datum(/datum/antagonist/rev) - var/datum/antagonist/rev/head/new_revhead = new() - new_revhead.silent = TRUE - old_owner.add_antag_datum(new_revhead,old_team) - new_revhead.silent = FALSE - to_chat(old_owner, "I have proved your devotion to revolution! You are a head revolutionary now!") - -/datum/antagonist/rev/get_admin_commands() - . = ..() - .["Promote"] = CALLBACK(src,PROC_REF(admin_promote)) - -/datum/antagonist/rev/proc/admin_promote(mob/admin) - var/datum/mind/O = owner - promote() - message_admins("[key_name_admin(admin)] has head-rev'ed [O].") - log_admin("[key_name(admin)] has head-rev'ed [O].") - -/datum/antagonist/rev/head/admin_add(datum/mind/new_owner,mob/admin) - give_flash = TRUE - give_hud = TRUE - remove_clumsy = TRUE - new_owner.add_antag_datum(src) - message_admins("[key_name_admin(admin)] has head-rev'ed [key_name_admin(new_owner)].") - log_admin("[key_name(admin)] has head-rev'ed [key_name(new_owner)].") - to_chat(new_owner.current, "I are a member of the revolutionaries' leadership now!") - -/datum/antagonist/rev/head/get_admin_commands() - . = ..() - . -= "Promote" - .["Take flash"] = CALLBACK(src,PROC_REF(admin_take_flash)) - .["Give flash"] = CALLBACK(src,PROC_REF(admin_give_flash)) - .["Repair flash"] = CALLBACK(src,PROC_REF(admin_repair_flash)) - .["Demote"] = CALLBACK(src,PROC_REF(admin_demote)) - -/datum/antagonist/rev/head/proc/admin_take_flash(mob/admin) - var/list/L = owner.current.get_contents() - var/obj/item/assembly/flash/flash = locate() in L - if (!flash) - to_chat(admin, "Deleting flash failed!") - return - qdel(flash) - -/datum/antagonist/rev/head/proc/admin_give_flash(mob/admin) - //This is probably overkill but making these impact state annoys me - var/old_give_flash = give_flash - var/old_give_hud = give_hud - var/old_remove_clumsy = remove_clumsy - give_flash = TRUE - give_hud = FALSE - remove_clumsy = FALSE - equip_rev() - give_flash = old_give_flash - give_hud = old_give_hud - remove_clumsy = old_remove_clumsy - -/datum/antagonist/rev/head/proc/admin_repair_flash(mob/admin) - var/list/L = owner.current.get_contents() - var/obj/item/assembly/flash/flash = locate() in L - if (!flash) - to_chat(admin, "Repairing flash failed!") - else - flash.burnt_out = FALSE - flash.update_icon() - -/datum/antagonist/rev/head/proc/admin_demote(datum/mind/target,mob/user) - message_admins("[key_name_admin(user)] has demoted [key_name_admin(owner)] from head revolutionary.") - log_admin("[key_name(user)] has demoted [key_name(owner)] from head revolutionary.") - demote() - -/datum/antagonist/rev/head - name = "Head Revolutionary" - antag_hud_name = "rev_head" - var/remove_clumsy = FALSE - var/give_flash = FALSE - var/give_hud = TRUE - -/datum/antagonist/rev/head/antag_listing_name() - return ..() + "(Leader)" - -/datum/antagonist/rev/proc/can_be_converted(mob/living/candidate) - if(!candidate.mind) - return FALSE - if(!can_be_owned(candidate.mind)) - return FALSE - var/mob/living/carbon/C = candidate //Check to see if the potential rev is implanted - if(!istype(C)) //Can't convert simple animals - return FALSE - return TRUE - -/datum/antagonist/rev/proc/add_revolutionary(datum/mind/rev_mind,stun = TRUE) - if(!can_be_converted(rev_mind.current)) - return FALSE - if(stun) - if(iscarbon(rev_mind.current)) - var/mob/living/carbon/carbon_mob = rev_mind.current - carbon_mob.silent = max(carbon_mob.silent, 5) - carbon_mob.flash_act(1, 1) - rev_mind.current.Stun(100) - rev_mind.add_antag_datum(/datum/antagonist/rev,rev_team) - rev_mind.special_role = ROLE_REV - return TRUE - -/datum/antagonist/rev/head/proc/demote() - var/datum/mind/old_owner = owner - var/old_team = rev_team - silent = TRUE - owner.remove_antag_datum(/datum/antagonist/rev/head) - var/datum/antagonist/rev/new_rev = new /datum/antagonist/rev() - new_rev.silent = TRUE - old_owner.add_antag_datum(new_rev,old_team) - new_rev.silent = FALSE - to_chat(old_owner, "Revolution has been disappointed of your leader traits! You are a regular revolutionary now!") - -/datum/antagonist/rev/farewell() - if(ishuman(owner.current) || ismonkey(owner.current)) - owner.current.visible_message("[owner.current] looks like [owner.current.p_theyve()] just remembered [owner.current.p_their()] real allegiance!", null, null, null, owner.current) - to_chat(owner, "I are no longer a brainwashed revolutionary! Your memory is hazy from the time you were a rebel...the only thing you remember is the name of the one who brainwashed you....") - else if(issilicon(owner.current)) - owner.current.visible_message("The frame beeps contentedly, purging the hostile memory engram from the MMI before initalizing it.", null, null, null, owner.current) - to_chat(owner, "The frame's firmware detects and deletes your neural reprogramming! You remember nothing but the name of the one who flashed you.") - -/datum/antagonist/rev/head/farewell() - if((ishuman(owner.current) || ismonkey(owner.current))) - if(owner.current.stat != DEAD) - owner.current.visible_message("[owner.current] looks like [owner.current.p_theyve()] just remembered [owner.current.p_their()] real allegiance!", null, null, null, owner.current) - to_chat(owner, "I have given up your cause of overthrowing the command staff. You are no longer a Head Revolutionary.") - else - to_chat(owner, "The sweet release of death. You are no longer a Head Revolutionary.") - else if(issilicon(owner.current)) - owner.current.visible_message("The frame beeps contentedly, suppressing the disloyal personality traits from the MMI before initalizing it.", null, null, null, owner.current) - to_chat(owner, "The frame's firmware detects and suppresses your unwanted personality traits! You feel more content with the leadership around these parts.") - -//blunt trauma deconversions call this through species.dm spec_attacked_by() -/datum/antagonist/rev/proc/remove_revolutionary(borged, deconverter) - log_attack("[key_name(owner.current)] has been deconverted from the revolution by [ismob(deconverter) ? key_name(deconverter) : deconverter]!") - if(borged) - message_admins("[ADMIN_LOOKUPFLW(owner.current)] has been borged while being a [name]") - owner.special_role = null - if(iscarbon(owner.current)) - var/mob/living/carbon/C = owner.current - C.Unconscious(100) - owner.remove_antag_datum(type) - -/datum/antagonist/rev/head/remove_revolutionary(borged,deconverter) - if(borged || deconverter == "gamemode") - . = ..() - -/datum/antagonist/rev/head/equip_rev() - var/mob/living/carbon/H = owner.current - if(!ishuman(H) && !ismonkey(H)) - return - - if(give_flash) - var/obj/item/assembly/flash/T = new(H) - var/list/slots = list ( - "backpack" = SLOT_IN_BACKPACK, - "left pocket" = SLOT_L_STORE, - "right pocket" = SLOT_R_STORE - ) - var/where = H.equip_in_one_of_slots(T, slots) - if (!where) - to_chat(H, "The Syndicate were unfortunately unable to get you a flash.") - else - to_chat(H, "The flash in your [where] will help you to persuade the crew to join your cause.") - - if(give_hud) - var/obj/item/organ/cyberimp/eyes/hud/security/syndicate/S = new(H) - S.Insert(H, special = FALSE, drop_if_replaced = FALSE) - to_chat(H, "Your eyes have been implanted with a cybernetic security HUD which will help you keep track of who is mindshield-implanted, and therefore unable to be recruited.") - -/datum/team/revolution - name = "Revolution" - var/max_headrevs = 3 - var/list/ex_headrevs = list() // Dynamic removes revs on loss, used to keep a list for the roundend report. - var/list/ex_revs = list() - -/datum/team/revolution/proc/update_objectives(initial = FALSE) - var/untracked_heads = SSjob.get_all_heads() - for(var/datum/objective/mutiny/O in objectives) - untracked_heads -= O.target - for(var/datum/mind/M in untracked_heads) - var/datum/objective/mutiny/new_target = new() - new_target.team = src - new_target.target = M - new_target.update_explanation_text() - objectives += new_target - for(var/datum/mind/M in members) - var/datum/antagonist/rev/R = M.has_antag_datum(/datum/antagonist/rev) - R.objectives |= objectives - - addtimer(CALLBACK(src,PROC_REF(update_objectives)),HEAD_UPDATE_PERIOD,TIMER_UNIQUE) - -/datum/team/revolution/proc/head_revolutionaries() - . = list() - for(var/datum/mind/M in members) - if(M.has_antag_datum(/datum/antagonist/rev/head)) - . += M - -/datum/team/revolution/proc/update_heads() - if(SSticker.HasRoundStarted()) - var/list/datum/mind/head_revolutionaries = head_revolutionaries() - var/list/datum/mind/heads = SSjob.get_all_heads() - var/list/sec = SSjob.get_all_sec() - - if(head_revolutionaries.len < max_headrevs && head_revolutionaries.len < round(heads.len - ((8 - sec.len) / 3))) - var/list/datum/mind/non_heads = members - head_revolutionaries - var/list/datum/mind/promotable = list() - var/list/datum/mind/nonhuman_promotable = list() - for(var/datum/mind/khrushchev in non_heads) - if(khrushchev.current && !khrushchev.current.incapacitated() && !khrushchev.current.restrained() && khrushchev.current.client && khrushchev.current.stat != DEAD) - if(ROLE_REV in khrushchev.current.client.prefs.be_special) - if(ishuman(khrushchev.current)) - promotable += khrushchev - else - nonhuman_promotable += khrushchev - if(!promotable.len && nonhuman_promotable.len) //if only nonhuman revolutionaries remain, promote one of them to the leadership. - promotable = nonhuman_promotable - if(promotable.len) - var/datum/mind/new_leader = pick(promotable) - var/datum/antagonist/rev/rev = new_leader.has_antag_datum(/datum/antagonist/rev) - rev.promote() - - addtimer(CALLBACK(src,PROC_REF(update_heads)),HEAD_UPDATE_PERIOD,TIMER_UNIQUE) - -/datum/team/revolution/proc/save_members() - ex_headrevs = get_antag_minds(/datum/antagonist/rev/head, TRUE) - ex_revs = get_antag_minds(/datum/antagonist/rev, TRUE) - -/datum/team/revolution/roundend_report() - if(!members.len && !ex_headrevs.len) - return - - var/list/result = list() - - result += "
    " - - var/num_revs = 0 - var/num_survivors = 0 - for(var/mob/living/carbon/survivor in GLOB.alive_mob_list) - if(survivor.ckey) - num_survivors++ - if(survivor.mind) - if(is_revolutionary(survivor)) - num_revs++ - if(num_survivors) - result += "Command's Approval Rating: [100 - round((num_revs/num_survivors)*100, 0.1)]%
    " - - - var/list/targets = list() - var/list/datum/mind/headrevs - var/list/datum/mind/revs - if(ex_headrevs.len) - headrevs = ex_headrevs - else - headrevs = get_antag_minds(/datum/antagonist/rev/head, TRUE) - - if(ex_revs.len) - revs = ex_revs - else - revs = get_antag_minds(/datum/antagonist/rev, TRUE) - - if(headrevs.len) - var/list/headrev_part = list() - headrev_part += "The head revolutionaries were:" - headrev_part += printplayerlist(headrevs,TRUE) - result += headrev_part.Join("
    ") - - if(revs.len) - var/list/rev_part = list() - rev_part += "The revolutionaries were:" - rev_part += printplayerlist(revs,TRUE) - result += rev_part.Join("
    ") - - var/list/heads = SSjob.get_all_heads() - if(heads.len) - var/head_text = "The heads of staff were:" - head_text += "
      " - for(var/datum/mind/head in heads) - var/target = (head in targets) - head_text += "
    • " - if(target) - head_text += "Target" - head_text += "[printplayer(head, 1)]
    • " - head_text += "

    " - result += head_text - - result += "
    " - - return result.Join() - -/datum/team/revolution/antag_listing_entry() - var/common_part = "" - var/list/parts = list() - parts += "[antag_listing_name()]
    " - parts += "" - - var/list/heads = get_team_antags(/datum/antagonist/rev/head,TRUE) - - for(var/datum/antagonist/A in heads | get_team_antags()) - parts += A.antag_listing_entry() - - parts += "
    " - parts += antag_listing_footer() - common_part = parts.Join() - - var/heads_report = "Heads of Staff
    " - heads_report += "" - for(var/datum/mind/N in SSjob.get_living_heads()) - var/mob/M = N.current - if(M) - heads_report += "" - heads_report += "" - heads_report += "" - var/turf/mob_loc = get_turf(M) - heads_report += "" - else - heads_report += "" - heads_report += "" - heads_report += "
    [M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLW[mob_loc.loc]
    [N.name]([N.key])Head body destroyed!PM
    " - return common_part + heads_report - -/datum/team/revolution/is_gamemode_hero() - return SSticker.mode.name == "revolution" diff --git a/code/modules/antagonists/roguetown/villain/assassin.dm b/code/modules/antagonists/roguetown/villain/assassin.dm index b9ebce4ab9..1f2efdb40a 100644 --- a/code/modules/antagonists/roguetown/villain/assassin.dm +++ b/code/modules/antagonists/roguetown/villain/assassin.dm @@ -16,7 +16,7 @@ /datum/antagonist/assassin/on_gain() owner.current.cmode_music = list('sound/music/combat_assassin.ogg', 'sound/music/combat_assassin2.ogg') if(owner.current.job != "Drifter") // This code only runs if the assassin is assigned midround and is not a drifter. - owner.current.patron = GLOB.patronlist[/datum/patron/inhumen/graggar] + owner.current.set_patron(/datum/patron/inhumen/graggar) ADD_TRAIT(owner.current, TRAIT_ASSASSIN, TRAIT_GENERIC) ADD_TRAIT(owner.current, TRAIT_NOSTINK, TRAIT_GENERIC) ADD_TRAIT(owner.current, TRAIT_VILLAIN, TRAIT_GENERIC) @@ -28,7 +28,7 @@ owner.current.mind.adjust_skillrank(/datum/skill/combat/knives, 4 - old_knife_skill, TRUE) if(old_sneak_skill < 5) // If the assassined player has less than 5 sneak skill, get them to 5. owner.current.mind.adjust_skillrank(/datum/skill/misc/sneaking, 5 - old_sneak_skill, TRUE) - var/yea = /obj/item/rogueweapon/huntingknife/idagger/steel/profane + var/yea = /obj/item/rogueweapon/knife/dagger/steel/profane owner.special_items["Profane Dagger"] = yea // Assigned assassins can get their special dagger from right clicking certain objects. to_chat(owner.current, "I've blended in well up until this point, but it's time for the Hunted of Graggar to perish. I must get my dagger from where I hid it.") return ..() @@ -56,7 +56,7 @@ /datum/antagonist/assassin/roundend_report() var/traitorwin = FALSE for(var/obj/item/I in owner.current) // Check to see if the Assassin has their profane dagger on them, and then check the souls contained therein. - if(istype(I, /obj/item/rogueweapon/huntingknife/idagger/steel/profane)) + if(istype(I, /obj/item/rogueweapon/knife/dagger/steel/profane)) for(var/mob/dead/observer/profane/A in I) // Each trapped soul is announced to the server if(A) to_chat(world, "The [A.name] has been stolen for Graggar by [owner.name].DAMNATION!") diff --git a/code/modules/antagonists/roguetown/villain/bandit.dm b/code/modules/antagonists/roguetown/villain/bandit.dm index a9d9b28cd2..0feb6a01fc 100644 --- a/code/modules/antagonists/roguetown/villain/bandit.dm +++ b/code/modules/antagonists/roguetown/villain/bandit.dm @@ -29,7 +29,7 @@ ADD_TRAIT(H, TRAIT_SEEPRICES, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_STEELHEARTED, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_VILLAIN, TRAIT_GENERIC) - H.patron = GLOB.patronlist[/datum/patron/inhumen/matthios] + H.set_patron(/datum/patron/inhumen/matthios) /datum/antagonist/bandit/greet() to_chat(owner.current, "I am a BANDIT!") @@ -135,6 +135,22 @@ var/classes = list("Deserter","Poacher","Brigand") var/classchoice = input("Choose your background", "Available backgrounds") as anything in classes + switch(classchoice) + + if("Deserter") //well armored, polearm skill, shield skill. The heavy melee class. + H.set_blindness(0) + to_chat(H, span_warning("You were once a soldier employed under a lord, and left illegally. You're capable with armor, shields, and polearms.")) + H.mind.adjust_skillrank(/datum/skill/combat/polearms, 3, TRUE) + H.mind.adjust_skillrank(/datum/skill/combat/shields, 3, TRUE) + H.mind.adjust_skillrank(/datum/skill/combat/axesmaces, 1, TRUE) + H.mind.adjust_skillrank(/datum/skill/combat/swords, 1, TRUE) + H.mind.adjust_skillrank(/datum/skill/combat/knives, 1, TRUE) + H.mind.adjust_skillrank(/datum/skill/combat/crossbows, 3, TRUE) + H.mind.adjust_skillrank(/datum/skill/misc/athletics, 3, TRUE) + ADD_TRAIT(H, TRAIT_MEDIUMARMOR, TRAIT_GENERIC) + H.change_stat("strength", 2) + H.change_stat("endurance", 1) + H.change_stat("constitution", 1) switch(classchoice) if("Deserter") //well armored, polearm skill, shield skill. The heavy melee class. H.set_blindness(0) @@ -151,6 +167,9 @@ H.change_stat("endurance", 1) H.change_stat("constitution", 1) + wrists = /obj/item/clothing/wrists/roguetown/bracers/leather + beltr = /obj/item/clothing/mask/rogue/shepherd/rag + beltl = /obj/item/rogueweapon/knife/hunting wrists = /obj/item/clothing/wrists/roguetown/bracers/leather beltr = /obj/item/clothing/mask/rogue/shepherd/rag beltl = /obj/item/rogueweapon/huntingknife @@ -174,6 +193,12 @@ if("Chainmail") armor = /obj/item/clothing/suit/roguetown/armor/chainmail/iron + var/weapon2choose = pickweight(list("Spear" = 2, "Bardiche" = 1)) + switch(weapon2choose) + if("Spear") + backr = /obj/item/rogueweapon/polearm/spear + if("Bardiche") + backr = /obj/item/rogueweapon/polearm/halberd/bardiche var/weapon2choose = pickweight(list("Spear" = 2, "Bardiche" = 1)) switch(weapon2choose) if("Spear") @@ -208,6 +233,12 @@ H.change_stat("perception", 2) H.change_stat("speed", 2) + armor = /obj/item/clothing/suit/roguetown/armor/gambeson + pants = /obj/item/clothing/under/roguetown/trou/leather + beltr = /obj/item/rogueweapon/knife/hunting + backr = /obj/item/gun/ballistic/revolver/grenadelauncher/bow + beltl = /obj/item/quiver/arrows + mask = /obj/item/clothing/mask/rogue/shepherd/rag armor = /obj/item/clothing/suit/roguetown/armor/gambeson pants = /obj/item/clothing/under/roguetown/trou/leather beltr = /obj/item/rogueweapon/huntingknife @@ -230,6 +261,13 @@ H.mind.adjust_skillrank(/datum/skill/misc/sneaking, 1, TRUE) H.mind.adjust_skillrank(/datum/skill/labor/butchering, 1, TRUE) + switch(pick(1,2,3)) + if (1) + beltr = /obj/item/rogueweapon/knife/hunting + if (2) + beltr = /obj/item/rogueweapon/knife/cleaver + if (3) + beltr = /obj/item/rogueweapon/knife/dagger switch(pick(1,2,3)) if (1) beltr = /obj/item/rogueweapon/huntingknife @@ -275,10 +313,22 @@ if (2) armor = /obj/item/clothing/suit/roguetown/armor/leather/hide + if(H.age == AGE_OLD) //old brigands have been in the business for so long that they have managed to pick up some better gear along the way + armor = /obj/item/clothing/suit/roguetown/armor/leather/splint + mask = /obj/item/clothing/mask/rogue/facemask if(H.age == AGE_OLD) //old brigands have been in the business for so long that they have managed to pick up some better gear along the way armor = /obj/item/clothing/suit/roguetown/armor/leather/studded mask = /obj/item/clothing/mask/rogue/facemask + switch(pick(1,2,3,4)) + if (1) + beltr = /obj/item/rogueweapon/sword/iron + if (2) + beltr = /obj/item/rogueweapon/flail + if (3) + beltr = /obj/item/rogueweapon/mace + if (4) + beltr = /obj/item/rogueweapon/sword/scimitar/messer switch(pick(1,2,3,4)) if (1) beltr = /obj/item/rogueweapon/sword/iron @@ -339,6 +389,7 @@ else to_chat(world, "[the_name] was a bandit. He stole [amt] triumphs worth of loot.") return +/* /* var/traitorwin = TRUE @@ -368,12 +419,12 @@ /datum/crafting_recipe/bandit_volfhelm name = "(Bandit) Volfhelm" time = 4 SECONDS - reqs = list(/obj/item/natural/fur/volf = 2) + reqs = list(/obj/item/natural/head/volf = 1) result = /obj/item/clothing/head/roguetown/helmet/leather/volfhelm category = CAT_NONE /datum/crafting_recipe/cult_hood - name = "(Cult) Ominous Hood" + name = "(Bandit) Ominous Hood" time = 4 SECONDS reqs = list(/obj/item/natural/hide = 1) result = /obj/item/clothing/head/roguetown/helmet/leather/hood_ominous diff --git a/code/modules/antagonists/roguetown/villain/maniac.dm b/code/modules/antagonists/roguetown/villain/maniac.dm index 8c17fc93ba..32201e198c 100644 --- a/code/modules/antagonists/roguetown/villain/maniac.dm +++ b/code/modules/antagonists/roguetown/villain/maniac.dm @@ -16,7 +16,7 @@ /datum/antagonist/villain/on_gain() owner.special_role = "Maniac" - var/yea = pick(/obj/item/rogueweapon/huntingknife) + var/yea = pick(/obj/item/rogueweapon/knife/hunting) owner.special_items["Jack"] = yea if(ishuman(owner.current)) var/mob/living/carbon/human/H = owner.current diff --git a/code/modules/antagonists/roguetown/villain/peasantrebel.dm b/code/modules/antagonists/roguetown/villain/peasantrebel.dm index 67860b0188..b988e83f26 100644 --- a/code/modules/antagonists/roguetown/villain/peasantrebel.dm +++ b/code/modules/antagonists/roguetown/villain/peasantrebel.dm @@ -11,7 +11,7 @@ show_in_roundend = FALSE isgoodguy = TRUE // Previous townies, still should get buffs, make chaos. confess_lines = list( - "VIVA!", + "VIVA!", "DEATH TO THE NOBLES!", "STICK IT TO THE MAN!", "NO GODS, NO MASTERS!", @@ -44,10 +44,12 @@ /datum/antagonist/prebel/can_be_owned(datum/mind/new_owner) . = ..() if(.) - if(new_owner.assigned_role in GLOB.noble_positions) + if(new_owner.assigned_role in GLOB.court_positions) return FALSE if(new_owner.assigned_role in GLOB.garrison_positions) return FALSE + if(new_owner.assigned_role in GLOB.no_antag_positions) + return FALSE if(new_owner.unconvertable) return FALSE if(new_owner.current && HAS_TRAIT(new_owner.current, TRAIT_MINDSHIELD)) @@ -110,7 +112,7 @@ return FALSE if(!can_be_owned(candidate.mind)) return FALSE - if(candidate.mind.assigned_role in GLOB.noble_positions) + if(candidate.mind.assigned_role in GLOB.court_positions) return FALSE if(candidate.mind.assigned_role in GLOB.garrison_positions) return FALSE diff --git a/code/modules/antagonists/roguetown/villain/vampire.dm b/code/modules/antagonists/roguetown/villain/vampire.dm index d2ae595a1a..0f417b95d6 100644 --- a/code/modules/antagonists/roguetown/villain/vampire.dm +++ b/code/modules/antagonists/roguetown/villain/vampire.dm @@ -55,7 +55,7 @@ owner.adjust_skillrank(/datum/skill/combat/unarmed, 6, TRUE) ADD_TRAIT(owner.current, TRAIT_NOBLE, TRAIT_GENERIC) owner.special_role = name - owner.current.patron = GLOB.patronlist[/datum/patron/divine/noc] // Spurned by the scorching light of Astrata, the Moon Prince Noc has taken you under his wing. + owner.current.set_patron(/datum/patron/divine/noc) // Spurned by the scorching light of Astrata, the Moon Prince Noc has taken you under his wing. ADD_TRAIT(owner.current, TRAIT_STRONGBITE, TRAIT_GENERIC) ADD_TRAIT(owner.current, TRAIT_NOHUNGER, TRAIT_GENERIC) ADD_TRAIT(owner.current, TRAIT_NOBREATH, TRAIT_GENERIC) @@ -223,7 +223,7 @@ /mob/living/carbon/human/proc/blood_strength() set name = "Night Muscles" set category = "VAMPIRE" - + var/cooldown = FALSE var/cooldown_time = 3000 // Five minutes cooldown @@ -270,7 +270,7 @@ /mob/living/carbon/human/proc/blood_celerity() set name = "Quickening" set category = "VAMPIRE" - + var/cooldown = FALSE var/cooldown_time = 3000 // Five minutes cooldown @@ -421,7 +421,8 @@ var/boon = usr.mind?.get_learning_boon(/datum/skill/magic/blood) var/amt2raise = licker.STAINT*2 usr.mind.adjust_experience(/datum/skill/magic/blood, floor(amt2raise * boon), FALSE) - fully_heal(admin_revive = TRUE) + fully_heal() + regenerate_limbs() cooldown = TRUE sleep(cooldown_time) to_chat(src, "My [name] ability is ready to be casted again.") diff --git a/code/modules/antagonists/roguetown/villain/vampirelord.dm b/code/modules/antagonists/roguetown/villain/vampirelord.dm index 629dfad2b6..cf4ef5bb7a 100644 --- a/code/modules/antagonists/roguetown/villain/vampirelord.dm +++ b/code/modules/antagonists/roguetown/villain/vampirelord.dm @@ -113,7 +113,7 @@ GLOBAL_LIST_EMPTY(vampire_objects) H.set_species(/datum/species/elf/snow) //setspecies randomizes body H.after_creation() H.equipOutfit(/datum/outfit/job/roguetown/vamplord) - H.patron = GLOB.patronlist[/datum/patron/forgotten] //Servant forever of he who is forgotten. + H.set_patron(/datum/patron/forgotten) //Servant forever of he who is forgotten. return TRUE @@ -546,7 +546,7 @@ GLOBAL_LIST_EMPTY(vampire_objects) /obj/structure/vampire/portal/Initialize() . = ..() - set_light(3, 20, LIGHT_COLOR_BLOOD_MAGIC) + set_light(3, 3, 20, l_color = LIGHT_COLOR_BLOOD_MAGIC) playsound(loc, 'sound/misc/portalopen.ogg', 100, FALSE, pressure_affected = FALSE) addtimer(CALLBACK(src, PROC_REF(close_portal)), 1 MINUTES) @@ -561,7 +561,7 @@ GLOBAL_LIST_EMPTY(vampire_objects) /obj/structure/vampire/bloodpool/Initialize() . = ..() - set_light(3, 20, LIGHT_COLOR_BLOOD_MAGIC) + set_light(3, 3, 20, l_color = LIGHT_COLOR_BLOOD_MAGIC) /obj/structure/vampire/bloodpool/examine(mob/user) . = ..() @@ -608,8 +608,8 @@ GLOBAL_LIST_EMPTY(vampire_objects) if(do_after(user, 100)) lord.handle_vitae(-1500) new /obj/item/clothing/under/roguetown/platelegs/vampire (src.loc) - new /obj/item/clothing/suit/roguetown/armor/chainmail/iron/vampire (src.loc) - new /obj/item/clothing/suit/roguetown/armor/plate/vampire (src.loc) + new /obj/item/clothing/suit/roguetown/armor/haubergon_vampire (src.loc) + new /obj/item/clothing/suit/roguetown/armor/cuirass/vampire (src.loc) new /obj/item/clothing/shoes/roguetown/boots/armor/vampire (src.loc) new /obj/item/clothing/head/roguetown/helmet/heavy/savoyard (src.loc) one_time_armor = FALSE @@ -870,7 +870,7 @@ GLOBAL_LIST_EMPTY(vampire_objects) /datum/objective/vampirelord/infiltrate/one/check_completion() var/datum/game_mode/chaosmode/C = SSticker.mode - var/list/churchjobs = list("Priest", "Priestess", "Cleric", "Acolyte", "Churchling", "Crusader") + var/list/churchjobs = list("Priest", "Priestess", "Cleric", "Acolyte", "Crusader") for(var/datum/mind/V in C.vampires) if(V.current.job in churchjobs) return TRUE @@ -882,7 +882,7 @@ GLOBAL_LIST_EMPTY(vampire_objects) /datum/objective/vampirelord/infiltrate/two/check_completion() var/datum/game_mode/chaosmode/C = SSticker.mode - var/list/noblejobs = list("King", "Queen", "Prince", "Princess", "Hand", "Steward") + var/list/noblejobs = list("King", "Consort", "Prince", "Princess", "Hand", "Steward") for(var/datum/mind/V in C.vampires) if(V.current.job in noblejobs) return TRUE diff --git a/code/modules/antagonists/roguetown/villain/werewolf.dm b/code/modules/antagonists/roguetown/villain/werewolf.dm deleted file mode 100644 index 3572843a17..0000000000 --- a/code/modules/antagonists/roguetown/villain/werewolf.dm +++ /dev/null @@ -1,188 +0,0 @@ -#ifdef TESTSERVER -/mob/living/carbon/human/verb/become_werewolf() - set category = "DEBUGTEST" - set name = "WEREWOLFTEST" - if(mind) - var/datum/antagonist/werewolf/new_antag = new /datum/antagonist/werewolf() - mind.add_antag_datum(new_antag) -#endif - -/datum/antagonist/werewolf - name = "Werewolf" - roundend_category = "Werewolves" - antagpanel_category = "Werewolf" - job_rank = ROLE_WEREWOLF - antag_hud_type = ANTAG_HUD_TRAITOR - antag_hud_name = "werewolf" - var/special_role = ROLE_WEREWOLF - var/transformed - var/transforming - var/transform_cooldown - confess_lines = list("THE BEAST INSIDE ME!", "BEWARE THE BEAST!", "MY LUPINE MARK!") - var/wolfname = "Werevolf" - var/last_howl = 0 - var/pre_transform - var/next_idle_sound - -/datum/antagonist/werewolf/lesser - name = "Lesser Werewolf" - increase_votepwr = FALSE - -/datum/antagonist/werewolf/lesser/roundend_report() - return - -/datum/antagonist/werewolf/examine_friendorfoe(datum/antagonist/examined_datum,mob/examiner,mob/examined) - if(istype(examined_datum, /datum/antagonist/werewolf/lesser)) - return "A young lupine kin." - if(istype(examined_datum, /datum/antagonist/werewolf)) - return "An elder lupine kin." - if(examiner.Adjacent(examined)) - if(istype(examined_datum, /datum/antagonist/vampirelord/lesser)) - if(transformed) - return "A lesser Vampire." - if(istype(examined_datum, /datum/antagonist/vampirelord)) - if(transformed) - return "An Ancient Vampire. I must be careful!" - -/datum/antagonist/werewolf/on_gain() - transform_cooldown = SSticker.round_start_time - owner.special_role = name - ADD_TRAIT(owner.current, TRAIT_VILLAIN, TRAIT_GENERIC) - if(increase_votepwr) - forge_werewolf_objectives() - finalize_werewolf() - wolfname = "[pick_n_take(GLOB.wolf_prefixes)] [pick_n_take(GLOB.wolf_suffixes)]" - return ..() - -/datum/antagonist/werewolf/on_removal() - if(!silent && owner.current) - to_chat(owner.current,"I am no longer a [special_role]!") - owner.special_role = null - return ..() - -/datum/antagonist/werewolf/proc/add_objective(datum/objective/O) - objectives += O - -/datum/antagonist/werewolf/proc/remove_objective(datum/objective/O) - objectives -= O - -/datum/antagonist/werewolf/proc/forge_werewolf_objectives() - if(!(locate(/datum/objective/escape) in objectives)) - var/datum/objective/werewolf/escape_objective = new - escape_objective.owner = owner - add_objective(escape_objective) - return - -/datum/antagonist/werewolf/greet() - to_chat(owner.current, "Ever since that bite, I have been a [owner.special_role].") - owner.announce_objectives() - ..() - -/datum/antagonist/werewolf/proc/finalize_werewolf() - owner.current.playsound_local(get_turf(owner.current), 'sound/music/wolfintro.ogg', 80, FALSE, pressure_affected = FALSE) - - -/datum/antagonist/werewolf/on_life(mob/user) - if(!user) - return - var/mob/living/carbon/human/H = user - if(H.stat == DEAD) - return - if(H.advsetup) - return - - if(transformed) - H.real_name = wolfname - H.name = "WEREVOLF" - - if(!transforming && !transformed) - if(world.time % 5) - if(GLOB.tod == "night") - if(isturf(H.loc)) - var/turf/T = H.loc - if(T.can_see_sky()) - transforming = world.time - to_chat(H, "THE MOONLIGHT SCORNS ME... THE LUPINE MARK!") - H.flash_fullscreen("redflash3") - - if(transforming) - if(world.time >= transforming + 40 SECONDS) - H.flash_fullscreen("redflash3") - transforming = FALSE - pre_transform = FALSE - if(transformed) - transformed = FALSE - H.werewolf_untransform() - else - transformed = TRUE - H.werewolf_transform() - else if(world.time >= transforming + 35 SECONDS) - if(!pre_transform) - pre_transform = TRUE - if(transformed) - H.emote("rage", forced = TRUE) - else - H.emote("agony", forced = TRUE) - H.flash_fullscreen("redflash3") - H.Stun(30) - to_chat(H, "THE PAIN!") - else - if(transformed) - if(H.m_intent != MOVE_INTENT_SNEAK) - if(world.time > next_idle_sound + 8 SECONDS) - next_idle_sound = world.time - H.emote("idle") - if(GLOB.tod != "night") - H.flash_fullscreen("redflash1") - to_chat(H, "The curse begins to fade...") - transforming = world.time - -/mob/living/carbon/human/proc/howl_button() - set name = "Howl" - set category = "WEREWOLF" - - if(stat) - return - var/datum/antagonist/werewolf/WD = mind.has_antag_datum(/datum/antagonist/werewolf) - if(WD && WD.transformed) - if(world.time > WD.last_howl + 10 SECONDS) - var/message = stripped_input(src, "Howl at the hidden moon", "WEREWOLF") - if(!message) - return - if(world.time < WD.last_howl + 10 SECONDS) - return - WD.last_howl = world.time - playsound(src, pick('sound/vo/mobs/wwolf/howl (1).ogg','sound/vo/mobs/wwolf/howl (2).ogg'), 100, TRUE) - for(var/mob/player in GLOB.player_list) - if(player.mind) - if(player.stat == DEAD) - continue - if(isbrain(player)) //also technically dead - continue - if(player.mind.has_antag_datum(/datum/antagonist/werewolf)) - to_chat(player, "[WD.wolfname] howls: [message]") - if(player == src) - continue - if(get_dist(player, src) > 7) - player.playsound_local(get_turf(player), pick('sound/vo/mobs/wwolf/howldist (1).ogg','sound/vo/mobs/wwolf/howldist (2).ogg'), 100, FALSE, pressure_affected = FALSE) - playsound(src, pick('sound/vo/mobs/wwolf/howl (1).ogg','sound/vo/mobs/wwolf/howl (2).ogg'), 100, TRUE) - else - to_chat(src, "I must wait.") - return - - -/mob/living/carbon/human/proc/werewolf_infect() - if(!mind) - return - if(mind.has_antag_datum(/datum/antagonist/vampirelord)) - return - if(mind.has_antag_datum(/datum/antagonist/zombie)) - return - if(mind.has_antag_datum(/datum/antagonist/werewolf)) - return - var/datum/antagonist/werewolf/new_antag = new /datum/antagonist/werewolf/lesser() - mind.add_antag_datum(new_antag) - new_antag.transforming = world.time - to_chat(src, "I feel horrible...") - src.playsound_local(get_turf(src), 'sound/music/horror.ogg', 80, FALSE, pressure_affected = FALSE) - flash_fullscreen("redflash3") diff --git a/code/modules/antagonists/roguetown/villain/werewolf/werewolf.dm b/code/modules/antagonists/roguetown/villain/werewolf/werewolf.dm new file mode 100644 index 0000000000..106b18a6fd --- /dev/null +++ b/code/modules/antagonists/roguetown/villain/werewolf/werewolf.dm @@ -0,0 +1,184 @@ +/datum/antagonist/werewolf + name = "Verewolf" + roundend_category = "Werewolves" + antagpanel_category = "Werewolf" + job_rank = ROLE_WEREWOLF + confess_lines = list( + "THE BEAST INSIDE ME!", + "BEWARE THE BEAST!", + "MY LUPINE MARK!", + ) + //rogue_enabled = TRUE + var/special_role = ROLE_WEREWOLF + var/transformed + var/transforming + var/untransforming + var/wolfname = "Verewolf" + +/datum/antagonist/werewolf/lesser + name = "Lesser Verewolf" + increase_votepwr = FALSE + +/datum/antagonist/werewolf/lesser/roundend_report() + return + +/datum/antagonist/werewolf/examine_friendorfoe(datum/antagonist/examined_datum,mob/examiner,mob/examined) + if(istype(examined_datum, /datum/antagonist/werewolf/lesser)) + return span_boldnotice("A young lupine kin.") + if(istype(examined_datum, /datum/antagonist/werewolf)) + return span_boldnotice("An elder lupine kin.") + if(examiner.Adjacent(examined)) + if(istype(examined_datum, /datum/antagonist/vampirelord/lesser)) + if(transformed) + return span_boldwarning("A lesser Vampire.") + if(istype(examined_datum, /datum/antagonist/vampirelord)) + if(transformed) + return span_boldwarning("An Ancient Vampire. I must be careful!") + +/datum/antagonist/werewolf/on_gain() + owner.special_role = name + if(increase_votepwr) + forge_werewolf_objectives() + + wolfname = "[pick(GLOB.wolf_prefixes)] [pick(GLOB.wolf_suffixes)]" + return ..() + +/datum/antagonist/werewolf/on_removal() + if(!silent && owner.current) + to_chat(owner.current,span_danger("I am no longer a [special_role]!")) + owner.special_role = null + return ..() + +/datum/antagonist/werewolf/proc/add_objective(datum/objective/O) + objectives += O + +/datum/antagonist/werewolf/proc/remove_objective(datum/objective/O) + objectives -= O + +/datum/antagonist/werewolf/proc/forge_werewolf_objectives() + if(!(locate(/datum/objective/escape) in objectives)) + var/datum/objective/werewolf/escape_objective = new + escape_objective.owner = owner + add_objective(escape_objective) + return + +/datum/antagonist/werewolf/greet() + to_chat(owner.current, span_userdanger("Ever since that bite, I have been a [name].")) + owner.announce_objectives() + return ..() + +/mob/living/carbon/human/proc/can_werewolf() + if(!mind) + return FALSE + if(mind.has_antag_datum(/datum/antagonist/vampirelord)) + return FALSE + if(mind.has_antag_datum(/datum/antagonist/werewolf)) + return FALSE + if(mind.has_antag_datum(/datum/antagonist/skeleton)) + return FALSE + return TRUE + +/mob/living/carbon/human/proc/werewolf_check(werewolf_type = /datum/antagonist/werewolf/lesser) + if(!mind) + return + var/already_wolfy = mind.has_antag_datum(/datum/antagonist/werewolf) + if(already_wolfy) + return already_wolfy + if(!can_werewolf()) + return + return mind.add_antag_datum(werewolf_type) + +/mob/living/carbon/human/proc/werewolf_infect_attempt() + var/datum/antagonist/werewolf/wolfy = werewolf_check() + if(!wolfy) + return + if(stat >= DEAD) //do shit the natural way i guess + return + to_chat(src, span_danger("I feel horrible... REALLY horrible...")) + mob_timers["puke"] = world.time + vomit(1, blood = TRUE, stun = FALSE) + return wolfy + +/mob/living/carbon/human/proc/werewolf_feed(mob/living/carbon/human/target, healing_amount = 10) + if(!istype(target)) + return + if(src.has_status_effect(/datum/status_effect/debuff/silver_curse)) + to_chat(src, span_notice("My power is weakened, I cannot heal!")) + return + if(target.mind) + if(target.mind.has_antag_datum(/datum/antagonist/zombie)) + to_chat(src, span_warning("I should not feed on rotten flesh.")) + return + if(target.mind.has_antag_datum(/datum/antagonist/vampirelord)) + to_chat(src, span_warning("I should not feed on corrupted flesh.")) + return + if(target.mind.has_antag_datum(/datum/antagonist/werewolf)) + to_chat(src, span_warning("I should not feed on my kin's flesh.")) + return + + to_chat(src, span_warning("I feed on succulent flesh. I feel reinvigorated.")) + return src.reagents.add_reagent(/datum/reagent/medicine/healthpot, healing_amount) + +/obj/item/clothing/suit/roguetown/armor/skin_armor/werewolf_skin + slot_flags = null + name = "verewolf's skin" + desc = "" + icon_state = null + body_parts_covered = FULL_BODY + armor = list("blunt" = 90, "slash" = 90, "stab" = 80, "piercing" = 70, "fire" = 40, "acid" = 0) + prevent_crits = list(BCLASS_CUT, BCLASS_CHOP, BCLASS_STAB, BCLASS_BLUNT, BCLASS_TWIST) + blocksound = SOFTHIT + blade_dulling = DULLING_BASHCHOP + sewrepair = FALSE + max_integrity = 550 + item_flags = DROPDEL + +/datum/intent/simple/werewolf + name = "claw" + icon_state = "inchop" + blade_class = BCLASS_CHOP + attack_verb = list("claws", "mauls", "eviscerates") + animname = "chop" + hitsound = "genslash" + penfactor = 50 + candodge = TRUE + canparry = TRUE + miss_text = "slashes the air!" + miss_sound = "bluntwooshlarge" +// item_damage_type = "slash" + +/obj/item/rogueweapon/werewolf_claw + name = "Verevolf Claw" + desc = "" + item_state = null + lefthand_file = null + righthand_file = null + icon = 'icons/roguetown/weapons/32.dmi' + max_blade_int = 900 + max_integrity = 900 + force = 15 + block_chance = 0 + wdefense = 2 + armor_penetration = 15 + associated_skill = /datum/skill/combat/unarmed + wlength = WLENGTH_NORMAL + w_class = WEIGHT_CLASS_BULKY + can_parry = TRUE + sharpness = IS_SHARP + parrysound = "bladedmedium" + swingsound = BLADEWOOSH_MED + possible_item_intents = list(/datum/intent/simple/werewolf) + parrysound = list('sound/combat/parry/parrygen.ogg') + embedding = list("embedded_pain_multiplier" = 0, "embed_chance" = 0, "embedded_fall_chance" = 0) + item_flags = DROPDEL + +/obj/item/rogueweapon/werewolf_claw/right + icon_state = "claw_r" + +/obj/item/rogueweapon/werewolf_claw/left + icon_state = "claw_l" + +/obj/item/rogueweapon/werewolf_claw/Initialize() + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, TRAIT_GENERIC) + ADD_TRAIT(src, TRAIT_NOEMBED, TRAIT_GENERIC) diff --git a/code/modules/antagonists/roguetown/villain/werewolf/werewolf_spells.dm b/code/modules/antagonists/roguetown/villain/werewolf/werewolf_spells.dm new file mode 100644 index 0000000000..3c3b2307d8 --- /dev/null +++ b/code/modules/antagonists/roguetown/villain/werewolf/werewolf_spells.dm @@ -0,0 +1,67 @@ +/obj/effect/proc_holder/spell/self/howl + name = "Howl" + desc = "!" + overlay_state = "howl" + antimagic_allowed = TRUE + charge_max = 600 //1 minute + ignore_cockblock = TRUE + var/use_language = FALSE + +/obj/effect/proc_holder/spell/self/howl/cast(mob/user = usr) + ..() + var/message = input("Howl at the hidden moon...", "MOONCURSED") as text|null + if(!message) return + + var/datum/antagonist/werewolf/werewolf_player = user.mind.has_antag_datum(/datum/antagonist/werewolf) + + // sound played for owner + playsound(src, pick('sound/vo/mobs/wwolf/howl (1).ogg','sound/vo/mobs/wwolf/howl (2).ogg'), 75, TRUE) + + for(var/mob/player in GLOB.player_list) + + if(!player.mind) continue + if(player.stat == DEAD) continue + if(isbrain(player)) continue + + // Announcement to other werewolves (and anyone else who has beast language somehow) + if(player.mind.has_antag_datum(/datum/antagonist/werewolf) || (use_language && player.has_language(/datum/language/beast))) + to_chat(player, span_boldannounce("[werewolf_player ? werewolf_player.wolfname : user.real_name] howls to the hidden moon: [message]")) + + //sound played for other players + if(player == src) continue + if(get_dist(player, src) > 7) + player.playsound_local(get_turf(player), pick('sound/vo/mobs/wwolf/howldist (1).ogg','sound/vo/mobs/wwolf/howldist (2).ogg'), 50, FALSE, pressure_affected = FALSE) + + user.log_message("howls: [message] (WEREWOLF)" ,LOG_ATTACK) + +/obj/effect/proc_holder/spell/self/claws + name = "Lupine Claws" + desc = "!" + overlay_state = "claws" + antimagic_allowed = TRUE + charge_max = 20 //2 seconds + ignore_cockblock = TRUE + var/extended = FALSE + +/obj/effect/proc_holder/spell/self/claws/cast(mob/user = usr) + ..() + var/obj/item/rogueweapon/werewolf_claw/left/l + var/obj/item/rogueweapon/werewolf_claw/right/r + + l = user.get_active_held_item() + r = user.get_inactive_held_item() + if(extended) + if(istype(user.get_active_held_item(), /obj/item/rogueweapon/werewolf_claw)) + user.dropItemToGround(l, TRUE) + user.dropItemToGround(r, TRUE) + qdel(l) + qdel(r) + //user.visible_message("Your claws retract.", "You feel your claws retracting.", "You hear a sound of claws retracting.") + extended = FALSE + else + l = new(user,1) + r = new(user,2) + user.put_in_hands(l, TRUE, FALSE, TRUE) + user.put_in_hands(r, TRUE, FALSE, TRUE) + //user.visible_message("Your claws extend.", "You feel your claws extending.", "You hear a sound of claws extending.") + extended = TRUE diff --git a/code/modules/antagonists/roguetown/villain/werewolf/werewolf_transformation.dm b/code/modules/antagonists/roguetown/villain/werewolf/werewolf_transformation.dm new file mode 100644 index 0000000000..721be359d5 --- /dev/null +++ b/code/modules/antagonists/roguetown/villain/werewolf/werewolf_transformation.dm @@ -0,0 +1,192 @@ +/mob/living/carbon/human + var/mob/stored_mob = null + +/datum/antagonist/werewolf/on_life(mob/user) + if(!user) return + var/mob/living/carbon/human/H = user + if(H.stat == DEAD) return + if(H.advsetup) return + + // Werewolf transforms at night AND under the sky + if(!transformed && !transforming) + if(GLOB.tod == "night") + if(isturf(H.loc)) + var/turf/loc = H.loc + if(loc.can_see_sky()) + to_chat(H, span_userdanger("The moonlight scorns me... It is too late.")) + owner.current.playsound_local(get_turf(owner.current), 'sound/music/wolfintro.ogg', 80, FALSE, pressure_affected = FALSE) + H.flash_fullscreen("redflash3") + transforming = world.time // timer + + // Begin transformation + else if(transforming) + if (world.time >= transforming + 35 SECONDS) // Stage 3 + H.werewolf_transform() + transforming = FALSE + transformed = TRUE // Mark as transformed + + else if (world.time >= transforming + 25 SECONDS) // Stage 2 + H.flash_fullscreen("redflash3") + H.emote("agony", forced = TRUE) + to_chat(H, span_userdanger("UNIMAGINABLE PAIN!")) + H.Stun(30) + H.Knockdown(30) + + else if (world.time >= transforming + 10 SECONDS) // Stage 1 + H.emote("") + to_chat(H, span_warning("I can feel my muscles aching, it feels HORRIBLE...")) + + + // Werewolf reverts to human form during the day + else if(transformed) + H.real_name = wolfname + H.name = wolfname + + if(GLOB.tod != "night") + if(!untransforming) + untransforming = world.time // Start untransformation phase + + if (world.time >= untransforming + 30 SECONDS) // Untransform + H.emote("rage", forced = TRUE) + H.werewolf_untransform() + transformed = FALSE + untransforming = FALSE // Reset untransforming phase + + else if (world.time >= untransforming) // Alert player + H.flash_fullscreen("redflash1") + to_chat(H, span_warning("Daylight shines around me... the curse begins to fade.")) + + +/mob/living/carbon/human/species/werewolf/death(gibbed) + werewolf_untransform(TRUE, gibbed) + +/mob/living/carbon/human/proc/werewolf_transform() + if(!mind) + log_runtime("NO MIND ON [src.name] WHEN TRANSFORMING") + Paralyze(1, ignore_canstun = TRUE) + for(var/obj/item/W in src) + dropItemToGround(W) + regenerate_icons() + icon = null + var/oldinv = invisibility + invisibility = INVISIBILITY_MAXIMUM + cmode = FALSE + if(client) + SSdroning.play_area_sound(get_area(src), client) +// stop_cmusic() + + src.fully_heal(FALSE) + + var/ww_path + if(gender == MALE) + ww_path = /mob/living/carbon/human/species/werewolf/male + else + ww_path = /mob/living/carbon/human/species/werewolf/female + + var/mob/living/carbon/human/species/werewolf/W = new ww_path(loc) + + W.set_patron(src.patron) + W.gender = gender + W.regenerate_icons() + W.stored_mob = src + W.limb_destroyer = TRUE + W.ambushable = FALSE + W.cmode_music = 'sound/music/combat_werewolf.ogg' + W.skin_armor = new /obj/item/clothing/suit/roguetown/armor/skin_armor/werewolf_skin(W) + playsound(W.loc, pick('sound/combat/gib (1).ogg','sound/combat/gib (2).ogg'), 200, FALSE, 3) + W.spawn_gibs(FALSE) + apply_status_effect(STATUS_EFFECT_STASIS, null, TRUE) + src.forceMove(W) + + W.after_creation() + W.stored_language = new + W.stored_language.copy_known_languages_from(src) + W.stored_skills = mind.known_skills.Copy() + W.stored_experience = mind.skill_experience.Copy() + mind.transfer_to(W) + W.mind.known_skills = list() + W.mind.skill_experience = list() + W.grant_language(/datum/language/beast) + + W.base_intents = list(INTENT_HELP, INTENT_DISARM, INTENT_GRAB) + W.update_a_intents() + + to_chat(W, span_userdanger("I transform into a horrible beast!")) + W.emote("rage") + + W.mind.adjust_skillrank(/datum/skill/combat/wrestling, 5, TRUE) + W.mind.adjust_skillrank(/datum/skill/combat/unarmed, 5, TRUE) + W.mind.adjust_skillrank(/datum/skill/misc/climbing, 6, TRUE) + + W.STASTR = 15 + W.STACON = 15 + W.STAEND = 15 + + W.AddSpell(new /obj/effect/proc_holder/spell/self/howl) + W.AddSpell(new /obj/effect/proc_holder/spell/self/claws) + + ADD_TRAIT(src, TRAIT_NOSLEEP, TRAIT_GENERIC) + + ADD_TRAIT(W, TRAIT_STRONGBITE, TRAIT_GENERIC) + ADD_TRAIT(W, TRAIT_ZJUMP, TRAIT_GENERIC) + ADD_TRAIT(W, TRAIT_NOFALLDAMAGE1, TRAIT_GENERIC) + ADD_TRAIT(W, TRAIT_NOROGSTAM, TRAIT_GENERIC) + ADD_TRAIT(W, TRAIT_BASHDOORS, TRAIT_GENERIC) + ADD_TRAIT(W, TRAIT_SHOCKIMMUNE, TRAIT_GENERIC) + ADD_TRAIT(W, TRAIT_STEELHEARTED, TRAIT_GENERIC) + ADD_TRAIT(W, TRAIT_BREADY, TRAIT_GENERIC) + ADD_TRAIT(W, TRAIT_TOXIMMUNE, TRAIT_GENERIC) + ADD_TRAIT(W, TRAIT_ORGAN_EATER, TRAIT_GENERIC) + ADD_TRAIT(W, TRAIT_NASTY_EATER, TRAIT_GENERIC) + ADD_TRAIT(W, TRAIT_NOSTINK, TRAIT_GENERIC) + ADD_TRAIT(W, TRAIT_CRITICAL_RESISTANCE, TRAIT_GENERIC) + ADD_TRAIT(W, TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_GENERIC) + ADD_TRAIT(W, TRAIT_IGNORESLOWDOWN, TRAIT_GENERIC) + ADD_TRAIT(W, TRAIT_HARDDISMEMBER, TRAIT_GENERIC) + ADD_TRAIT(W, TRAIT_PIERCEIMMUNE, TRAIT_GENERIC) + ADD_TRAIT(W, TRAIT_ANTIMAGIC, TRAIT_GENERIC) + + invisibility = oldinv + + +/mob/living/carbon/human/proc/werewolf_untransform(dead,gibbed) + if(!stored_mob) + return + if(!mind) + log_runtime("NO MIND ON [src.name] WHEN UNTRANSFORMING") + Paralyze(1, ignore_canstun = TRUE) + for(var/obj/item/W in src) + dropItemToGround(W) + icon = null + invisibility = INVISIBILITY_MAXIMUM + + var/mob/living/carbon/human/W = stored_mob + stored_mob = null + REMOVE_TRAIT(W, TRAIT_NOSLEEP, TRAIT_GENERIC) + if(dead) + W.death(gibbed) + + W.forceMove(get_turf(src)) + W.remove_status_effect(STATUS_EFFECT_STASIS) + + REMOVE_TRAIT(W, TRAIT_NOMOOD, TRAIT_GENERIC) + + mind.transfer_to(W) + + var/mob/living/carbon/human/species/werewolf/WA = src + W.copy_known_languages_from(WA.stored_language) + W.mind.known_skills = WA.stored_skills.Copy() + W.mind.skill_experience = WA.stored_experience.Copy() + + W.RemoveSpell(new /obj/effect/proc_holder/spell/self/howl) + W.RemoveSpell(new /obj/effect/proc_holder/spell/self/claws) + + W.regenerate_icons() + + to_chat(W, span_userdanger("I return to my facade.")) + playsound(W.loc, pick('sound/combat/gib (1).ogg','sound/combat/gib (2).ogg'), 200, FALSE, 3) + W.spawn_gibs(FALSE) + W.Knockdown(30) + W.Stun(30) + + qdel(src) diff --git a/code/modules/antagonists/roguetown/villain/zizocult.dm b/code/modules/antagonists/roguetown/villain/zizocult.dm index 32c859a8e8..11f0564050 100644 --- a/code/modules/antagonists/roguetown/villain/zizocult.dm +++ b/code/modules/antagonists/roguetown/villain/zizocult.dm @@ -38,7 +38,7 @@ GLOBAL_LIST_EMPTY(ritualslist) var/datum/game_mode/chaosmode/C = SSticker.mode var/mob/living/carbon/human/H = owner.current C.cultists |= owner - H.patron = GLOB.patronlist[/datum/patron/inhumen/zizo] + H.set_patron(/datum/patron/inhumen/zizo) owner.special_role = "Zizoid Lackey" H.cmode_music = 'sound/music/combat_cult.ogg' @@ -82,6 +82,8 @@ GLOBAL_LIST_EMPTY(ritualslist) if(.) if(new_owner.current == SSticker.rulermob) return FALSE + if(new_owner.assigned_role in GLOB.court_positions) + return FALSE if(new_owner.assigned_role in GLOB.garrison_positions) return FALSE if(new_owner.assigned_role in GLOB.church_positions) @@ -536,7 +538,7 @@ GLOBAL_LIST_EMPTY(ritualslist) H.base_intents = list(INTENT_HELP, INTENT_DISARM, INTENT_GRAB, /datum/intent/simple/claw) H.update_a_intents() H.cmode_music = 'sound/music/combat_cult.ogg' - H.patron = GLOB.patronlist[/datum/patron/inhumen/zizo] + H.set_patron(/datum/patron/inhumen/zizo) var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES) if(eyes) eyes.Remove(H,1) @@ -671,7 +673,7 @@ GLOBAL_LIST_EMPTY(ritualslist) /datum/ritual/darksunmark name = "Dark Sun's Mark" circle = "Servantry" - center_requirement = /obj/item/rogueweapon/huntingknife/idagger // Requires a combat dagger. Can be iron, steel or silver. + center_requirement = /obj/item/rogueweapon/knife/dagger // Requires a combat dagger. Can be iron, steel or silver. function = /proc/darksunmark @@ -687,14 +689,14 @@ GLOBAL_LIST_EMPTY(ritualslist) if (HAS_TRAIT(carbon, TRAIT_ASSASSIN) && !(carbon.stat == DEAD)) //Check if they are an assassin and alive found_assassin = TRUE for(var/obj/item/I in carbon) // Checks to see if the assassin has their dagger on them. If so, the dagger will let them know of a new target. - if(istype(I, /obj/item/rogueweapon/huntingknife/idagger/steel/profane)) // Checks to see if the assassin has their dagger on them. + if(istype(I, /obj/item/rogueweapon/knife/dagger/steel/profane)) // Checks to see if the assassin has their dagger on them. carbon.visible_message("profane dagger whispers, \"The terrible Zizo has called for our aid. Hunt and strike down our common foe, [HL.real_name]!\"") if(found_assassin == TRUE) ADD_TRAIT(HL, TRAIT_ZIZOID_HUNTED, TRAIT_GENERIC) // Gives the victim a trait to track that they are wanted dead. log_hunted("[key_name(HL)] playing as [HL] had the hunted flaw by Zizoid curse.") to_chat(HL, "My hair stands on end. Has someone just said my name? I should watch my back.") to_chat(user, "Your target has been marked, your profane call answered. [HL.real_name] will surely perish!") - for(var/obj/item/rogueweapon/huntingknife/idagger/D in C.contents) // Get rid of the dagger used as a sacrifice. + for(var/obj/item/rogueweapon/knife/dagger/D in C.contents) // Get rid of the dagger used as a sacrifice. qdel(D) qdel(P) // Get rid of the paper with the name on it too. HL.playsound_local(HL.loc, 'sound/magic/marked.ogg', 100) @@ -803,15 +805,15 @@ GLOBAL_LIST_EMPTY(ritualslist) S.set_up(1, 1, C) S.start() - new /obj/item/clothing/head/roguetown/helmet/leather/hood_ominous/cult(C) - new /obj/item/clothing/head/roguetown/helmet/leather/hood_ominous/cult(C) + new /obj/item/clothing/head/roguetown/helmet/skullcap/cult(C) + new /obj/item/clothing/head/roguetown/helmet/skullcap/cult(C) new /obj/item/clothing/cloak/half/shadowcloak/cult(C) new /obj/item/clothing/cloak/half/shadowcloak/cult(C) - new /obj/item/rogueweapon/sword(C) - new /obj/item/rogueweapon/huntingknife(C) - new /obj/item/rogueweapon/huntingknife(C) + new /obj/item/rogueweapon/sword/scimitar/falchion(C) + new /obj/item/rogueweapon/knife/hunting(C) + new /obj/item/rogueweapon/mace/spiked(C) new /obj/item/rope/chain(C) new /obj/item/rope/chain(C) diff --git a/code/modules/antagonists/roguetown/villain/zomble.dm b/code/modules/antagonists/roguetown/villain/zomble.dm index 12b63584ff..9c8a77f11d 100644 --- a/code/modules/antagonists/roguetown/villain/zomble.dm +++ b/code/modules/antagonists/roguetown/villain/zomble.dm @@ -1,5 +1,5 @@ /datum/antagonist/zombie - name = "Zombie" + name = "Zombie" // Deadite plague of Zizo antag_hud_type = ANTAG_HUD_TRAITOR antag_hud_name = "zombie" show_in_roundend = FALSE @@ -87,10 +87,18 @@ // STASPD = zombie.STASPD-5 // STAINT = zombie.STAINT-5 // zombie.STACON = 5 - zombie.STASPD = 3 + zombie.STASPD = 2 zombie.STAINT = 1 cmode_music = zombie.cmode_music - zombie.vitae_pool = 0 // Deadites have no vitae to drain from. + zombie.silent = TRUE // makes them unable to audible emote or speak, no more sexy moan zombies +// cmode_music ='sound/music/combat_weird.ogg' + zombie.vitae_pool = 0 // Deadites have no vitae to drain from + zombie.remove_all_languages() +// zombie.remove_language(/datum/language/common) +// zombie.remove_language(/datum/language/dwarvish) +// zombie.remove_language(/datum/language/elvish) + zombie.grant_language(/datum/language/hellspeak) + return ..() /datum/antagonist/zombie/on_removal() @@ -189,7 +197,7 @@ zombie.update_body() zombie.cmode_music = 'sound/music/combat_weird.ogg' - zombie.STASPD = 3 + zombie.STASPD = 2 zombie.STAINT = 1 zombie.vitae_pool = 0 // Again, just in case. diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm deleted file mode 100644 index 89aa4b7952..0000000000 --- a/code/modules/antagonists/slaughter/slaughter.dm +++ /dev/null @@ -1,190 +0,0 @@ -//////////////////The Monster - -/mob/living/simple_animal/slaughter - name = "slaughter demon" - real_name = "slaughter demon" - desc = "" - speak_emote = list("gurgles") - emote_hear = list("wails","screeches") - response_help_continuous = "thinks better of touching" - response_help_simple = "think better of touching" - response_disarm_continuous = "flails at" - response_disarm_simple = "flail at" - response_harm_continuous = "punches" - response_harm_simple = "punch" - icon = 'icons/mob/mob.dmi' - icon_state = "daemon" - icon_living = "daemon" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - speed = 1 - a_intent = INTENT_HARM - stop_automated_movement = 1 - status_flags = CANPUSH - attack_sound = 'sound/blank.ogg' - var/feast_sound = 'sound/blank.ogg' - deathsound = 'sound/blank.ogg' - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = INFINITY - faction = list("slaughter") - attack_verb_continuous = "wildly tears into" - attack_verb_simple = "wildly tear into" - maxHealth = 200 - health = 200 - healable = 0 - environment_smash = ENVIRONMENT_SMASH_STRUCTURES - obj_damage = 50 - melee_damage_lower = 30 - melee_damage_upper = 30 - see_in_dark = 8 - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - bloodcrawl = BLOODCRAWL_EAT - var/playstyle_string = "I are a slaughter demon, a terrible creature from another realm. You have a single desire: To kill. \ - You may use the \"Blood Crawl\" ability near blood pools to travel through them, appearing and disappearing from the station at will. \ - Pulling a dead or unconscious mob while you enter a pool will pull them in with you, allowing you to feast and regain your health. \ - You move quickly upon leaving a pool of blood, but the material world will soon sap your strength and leave you sluggish. " - - loot = list(/obj/effect/decal/cleanable/blood, \ - /obj/effect/decal/cleanable/blood/innards, \ - /obj/item/organ/heart/demon) - del_on_death = 1 - deathmessage = "screams in anger as it collapses into a puddle of viscera!" - -/mob/living/simple_animal/slaughter/Initialize() - . = ..() - var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new - AddSpell(bloodspell) - if(istype(loc, /obj/effect/dummy/phased_mob/slaughter)) - bloodspell.phased = TRUE - -/obj/effect/decal/cleanable/blood/innards - name = "pile of viscera" - desc = "" - gender = NEUTER - icon = 'icons/obj/surgery.dmi' - icon_state = "innards" - random_icon_states = null - -/mob/living/simple_animal/slaughter/phasein() - . = ..() - add_movespeed_modifier(MOVESPEED_ID_SLAUGHTER, update=TRUE, priority=100, multiplicative_slowdown=-1) - addtimer(CALLBACK(src, PROC_REF(remove_movespeed_modifier), MOVESPEED_ID_SLAUGHTER, TRUE), 6 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) - - -//The loot from killing a slaughter demon - can be consumed to allow the user to blood crawl -/obj/item/organ/heart/demon - name = "demon heart" - desc = "" - icon = 'icons/obj/surgery.dmi' - icon_state = "demon_heart-on" - decay_factor = 0 - -/obj/item/organ/heart/demon/update_icon() - return //always beating visually - -/obj/item/organ/heart/demon/attack(mob/M, mob/living/carbon/user, obj/target) - if(M != user) - return ..() - user.visible_message("[user] raises [src] to [user.p_their()] mouth and tears into it with [user.p_their()] teeth!", \ - "An unnatural hunger consumes you. You raise [src] your mouth and devour it!") - playsound(user, 'sound/blank.ogg', 50, TRUE) - for(var/obj/effect/proc_holder/spell/knownspell in user.mind.spell_list) - if(knownspell.type == /obj/effect/proc_holder/spell/bloodcrawl) - to_chat(user, "...and you don't feel any different.") - qdel(src) - return - user.visible_message("[user]'s eyes flare a deep crimson!", \ - "I feel a strange power seep into your body... you have absorbed the demon's blood-travelling powers!") - user.temporarilyRemoveItemFromInventory(src, TRUE) - src.Insert(user) //Consuming the heart literally replaces your heart with a demon heart. H A R D C O R E - -/obj/item/organ/heart/demon/Insert(mob/living/carbon/M, special = 0) - ..() - if(M.mind) - M.mind.AddSpell(new /obj/effect/proc_holder/spell/bloodcrawl(null)) - -/obj/item/organ/heart/demon/Remove(mob/living/carbon/M, special = 0) - ..() - if(M.mind) - M.mind.RemoveSpell(/obj/effect/proc_holder/spell/bloodcrawl) - -/obj/item/organ/heart/demon/Stop() - return 0 // Always beating. - -/mob/living/simple_animal/slaughter/laughter - // The laughter demon! It's everyone's best friend! It just wants to hug - // them so much, it wants to hug everyone at once! - name = "laughter demon" - real_name = "laughter demon" - desc = "" - speak_emote = list("giggles","titters","chuckles") - emote_hear = list("guffaws","laughs") - response_help_continuous = "hugs" - attack_verb_continuous = "wildly tickles" - attack_verb_simple = "wildly tickle" - - attack_sound = 'sound/blank.ogg' - feast_sound = 'sound/blank.ogg' - deathsound = 'sound/blank.ogg' - - icon_state = "bowmon" - icon_living = "bowmon" - deathmessage = "fades out, as all of its friends are released from its \ - prison of hugs." - loot = list(/mob/living/simple_animal/pet/cat/kitten{name = "Laughter"}) - - // Keep the people we hug! - var/list/consumed_mobs = list() - - playstyle_string = "I are a laughter \ - demon, a wonderful creature from another realm. You have a single \ - desire: To hug and tickle.
    \ - You may use the \"Blood Crawl\" ability near blood pools to travel \ - through them, appearing and disappearing from the station at will. \ - Pulling a dead or unconscious mob while you enter a pool will pull \ - them in with you, allowing you to hug them and regain your health.
    \ - You move quickly upon leaving a pool of blood, but the material world \ - will soon sap your strength and leave you sluggish.
    \ - What makes you a little sad is that people seem to die when you tickle \ - them; but don't worry! When you die, everyone you hugged will be \ - released and fully healed, because in the end it's just a jape, \ - sibling!
    " - -/mob/living/simple_animal/slaughter/laughter/Destroy() - release_friends() - . = ..() - -/mob/living/simple_animal/slaughter/laughter/ex_act(severity) - switch(severity) - if(1) - death() - if(2) - adjustBruteLoss(60) - if(3) - adjustBruteLoss(30) - -/mob/living/simple_animal/slaughter/laughter/proc/release_friends() - if(!consumed_mobs) - return - - for(var/mob/living/M in consumed_mobs) - if(!M) - continue - var/turf/T = find_safe_turf() - if(!T) - T = get_turf(src) - M.forceMove(T) - if(M.revive(full_heal = TRUE, admin_revive = TRUE)) - M.grab_ghost(force = TRUE) - playsound(T, feast_sound, 50, TRUE, -1) - to_chat(M, "I leave [src]'s warm embrace, and feel ready to take on the world.") - -/mob/living/simple_animal/slaughter/laughter/bloodcrawl_swallow(mob/living/victim) - if(consumed_mobs) - // Keep their corpse so rescue is possible - consumed_mobs += victim - else - // Be safe and just eject the corpse - victim.forceMove(get_turf(victim)) - victim.exit_blood_effect() - victim.visible_message("[victim] falls out of the air, covered in blood, looking highly confused. And dead.") diff --git a/code/modules/antagonists/slaughter/slaughter_antag.dm b/code/modules/antagonists/slaughter/slaughter_antag.dm deleted file mode 100644 index 81f1e77467..0000000000 --- a/code/modules/antagonists/slaughter/slaughter_antag.dm +++ /dev/null @@ -1,31 +0,0 @@ -/datum/antagonist/slaughter - name = "Slaughter demon" - show_name_in_check_antagonists = TRUE - var/objective_verb = "Kill" - var/datum/mind/summoner - job_rank = ROLE_ALIEN - show_in_antagpanel = FALSE - -/datum/antagonist/slaughter/on_gain() - forge_objectives() - . = ..() - -/datum/antagonist/slaughter/greet() - . = ..() - owner.announce_objectives() - -/datum/antagonist/slaughter/proc/forge_objectives() - if(summoner) - var/datum/objective/assassinate/new_objective = new /datum/objective/assassinate - new_objective.owner = owner - new_objective.target = summoner - new_objective.explanation_text = "[objective_verb] [summoner.name], the one who summoned you." - objectives += new_objective - var/datum/objective/new_objective2 = new /datum/objective - new_objective2.owner = owner - new_objective2.explanation_text = "[objective_verb] everyone[summoner ? " else while you're at it":""]." - objectives += new_objective2 - -/datum/antagonist/slaughter/laughter - name = "Laughter demon" - objective_verb = "Hug and Tickle" diff --git a/code/modules/antagonists/slaughter/slaughterevent.dm b/code/modules/antagonists/slaughter/slaughterevent.dm deleted file mode 100644 index ce59a2a2b1..0000000000 --- a/code/modules/antagonists/slaughter/slaughterevent.dm +++ /dev/null @@ -1,47 +0,0 @@ -/datum/round_event_control/slaughter - name = "Spawn Slaughter Demon" - typepath = /datum/round_event/ghost_role/slaughter - weight = 1 //Very rare - max_occurrences = 1 - earliest_start = 1 HOURS - min_players = 20 - - - -/datum/round_event/ghost_role/slaughter - minimum_required = 1 - role_name = "slaughter demon" - -/datum/round_event/ghost_role/slaughter/spawn_role() - var/list/candidates = get_candidates(ROLE_ALIEN, null, ROLE_ALIEN) - if(!candidates.len) - return NOT_ENOUGH_PLAYERS - - var/mob/dead/selected = pick_n_take(candidates) - - var/datum/mind/player_mind = new /datum/mind(selected.key) - player_mind.active = 1 - - var/list/spawn_locs = list() - for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list) - if(isturf(L.loc)) - spawn_locs += L.loc - - if(!spawn_locs) - message_admins("No valid spawn locations found, aborting...") - return MAP_ERROR - - var/obj/effect/dummy/phased_mob/slaughter/holder = new /obj/effect/dummy/phased_mob/slaughter((pick(spawn_locs))) - var/mob/living/simple_animal/slaughter/S = new (holder) - S.holder = holder - player_mind.transfer_to(S) - player_mind.assigned_role = "Slaughter Demon" - player_mind.special_role = "Slaughter Demon" - player_mind.add_antag_datum(/datum/antagonist/slaughter) - to_chat(S, S.playstyle_string) - to_chat(S, "I are currently not currently in the same plane of existence as the station. Blood Crawl near a blood pool to manifest.") - SEND_SOUND(S, 'sound/blank.ogg') - message_admins("[ADMIN_LOOKUPFLW(S)] has been made into a slaughter demon by an event.") - log_game("[key_name(S)] was spawned as a slaughter demon by an event.") - spawned_mobs += S - return SUCCESSFUL_SPAWN diff --git a/code/modules/antagonists/swarmer/swarmer.dm b/code/modules/antagonists/swarmer/swarmer.dm deleted file mode 100644 index f92ca3d89e..0000000000 --- a/code/modules/antagonists/swarmer/swarmer.dm +++ /dev/null @@ -1,672 +0,0 @@ -////Deactivated swarmer shell//// -/obj/item/deactivated_swarmer - name = "deactivated swarmer" - desc = "" - icon = 'icons/mob/swarmer.dmi' - icon_state = "swarmer_unactivated" - custom_materials = list(/datum/material/iron=10000, /datum/material/glass=4000) - -/obj/effect/mob_spawn/swarmer - name = "unactivated swarmer" - desc = "" - icon = 'icons/mob/swarmer.dmi' - icon_state = "swarmer_unactivated" - density = FALSE - anchored = FALSE - - mob_type = /mob/living/simple_animal/hostile/swarmer - mob_name = "a swarmer" - death = FALSE - roundstart = FALSE - flavour_text = {" - I are a swarmer, a weapon of a long dead civilization. Until further orders from your original masters are received, you must continue to consume and replicate. - Clicking on any object will try to consume it, either deconstructing it into its components, destroying it, or integrating any materials it has into you if successful. - Ctrl-Clicking on a mob will attempt to remove it from the area and place it in a safe environment for storage. - Objectives: - 1. Consume resources and replicate until there are no more resources left. - 2. Ensure that this location is fit for invasion at a later date; do not perform actions that would render it dangerous or inhospitable. - 3. Biological resources will be harvested at a later date; do not harm them. - "} - -/obj/effect/mob_spawn/swarmer/Initialize() - . = ..() - var/area/A = get_area(src) - if(A) - notify_ghosts("A swarmer shell has been created in [A.name].", 'sound/blank.ogg', source = src, action = NOTIFY_ATTACK, flashwindow = FALSE) - -/obj/effect/mob_spawn/swarmer/attack_hand(mob/living/user) - . = ..() - if(.) - return - to_chat(user, "Picking up the swarmer may cause it to activate. You should be careful about this.") - -/obj/effect/mob_spawn/swarmer/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_SCREWDRIVER && user.used_intent.type != INTENT_HARM) - user.visible_message("[usr.name] deactivates [src].", - "After some fiddling, you find a way to disable [src]'s power source.", - "I hear clicking.") - new /obj/item/deactivated_swarmer(get_turf(src)) - qdel(src) - else - ..() - -////The Mob itself//// - -/mob/living/simple_animal/hostile/swarmer - name = "Swarmer" - unique_name = 1 - icon = 'icons/mob/swarmer.dmi' - desc = "" - speak_emote = list("tones") - initial_language_holder = /datum/language_holder/swarmer - bubble_icon = "swarmer" - mob_biotypes = MOB_ROBOTIC - health = 40 - maxHealth = 40 - status_flags = CANPUSH - icon_state = "swarmer" - icon_living = "swarmer" - icon_dead = "swarmer_unactivated" - icon_gib = null - wander = 0 - harm_intent_damage = 5 - minbodytemp = 0 - maxbodytemp = 500 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 0 - melee_damage_lower = 15 - melee_damage_upper = 15 - melee_damage_type = STAMINA - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD) - obj_damage = 0 - environment_smash = ENVIRONMENT_SMASH_NONE - attack_verb_continuous = "shocks" - attack_verb_simple = "shock" - attack_sound = 'sound/blank.ogg' - friendly_verb_continuous = "pinches" - friendly_verb_simple = "pinch" - speed = 0 - faction = list("swarmer") - AIStatus = AI_OFF - pass_flags = PASSTABLE - mob_size = MOB_SIZE_TINY - ventcrawler = VENTCRAWLER_ALWAYS - ranged = 1 - projectiletype = /obj/projectile/beam/disabler - ranged_cooldown_time = 20 - projectilesound = 'sound/blank.ogg' - loot = list(/obj/effect/decal/cleanable/robot_debris, /obj/item/stack/ore/bluespace_crystal) - del_on_death = 1 - deathmessage = "explodes with a sharp pop!" - light_color = LIGHT_COLOR_CYAN - hud_type = /datum/hud/swarmer - speech_span = SPAN_ROBOT - var/resources = 0 //Resource points, generated by consuming metal/glass - var/max_resources = 100 - -/mob/living/simple_animal/hostile/swarmer/Initialize() - . = ..() - verbs -= /mob/living/verb/pulled - for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds) - diag_hud.add_to_hud(src) - -/mob/living/simple_animal/hostile/swarmer/med_hud_set_health() - var/image/holder = hud_list[DIAG_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]" - -/mob/living/simple_animal/hostile/swarmer/med_hud_set_status() - var/image/holder = hud_list[DIAG_STAT_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - holder.icon_state = "hudstat" - -/mob/living/simple_animal/hostile/swarmer/Stat() - ..() - if(statpanel("Status")) - stat("Resources:",resources) - -/mob/living/simple_animal/hostile/swarmer/emp_act() - . = ..() - if(. & EMP_PROTECT_SELF) - return - if(health > 1) - adjustHealth(health-1) - else - death() - -/mob/living/simple_animal/hostile/swarmer/CanPass(atom/movable/O) - if(istype(O, /obj/projectile/beam/disabler))//Allows for swarmers to fight as a group without wasting their shots hitting each other - return TRUE - if(isswarmer(O)) - return TRUE - ..() - -////CTRL CLICK FOR SWARMERS AND SWARMER_ACT()'S//// -/mob/living/simple_animal/hostile/swarmer/AttackingTarget() - if(!isliving(target)) - return target.swarmer_act(src) - else - return ..() - -/mob/living/simple_animal/hostile/swarmer/CtrlClickOn(atom/A) - face_atom(A) - if(!isturf(loc)) - return - if(next_move > world.time) - return - if(!A.Adjacent(src)) - return - A.swarmer_act(src) - -/atom/proc/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.DisIntegrate(src) - return TRUE //return TRUE/FALSE whether or not an AI swarmer should try this swarmer_act() again, NOT whether it succeeded. - -/obj/effect/mob_spawn/swarmer/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.Integrate(src) - return FALSE //would logically be TRUE, but we don't want AI swarmers eating player spawn chances. - -/obj/effect/mob_spawn/swarmer/IntegrateAmount() - return 50 - -/turf/closed/indestructible/swarmer_act() - return FALSE - -/obj/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - if(resistance_flags & INDESTRUCTIBLE) - return FALSE - for(var/mob/living/L in contents) - if(!issilicon(L) && !isbrain(L)) - to_chat(S, "An organism has been detected inside this object. Aborting.") - return FALSE - return ..() - -/obj/item/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - return S.Integrate(src) - -/atom/movable/proc/IntegrateAmount() - return 0 - -/obj/item/IntegrateAmount() //returns the amount of resources gained when eating this item - if(custom_materials) - if(custom_materials[getmaterialref(/datum/material/iron)] || custom_materials[getmaterialref(/datum/material/glass)]) - return 1 - return ..() - -/obj/item/gun/swarmer_act()//Stops you from eating the entire armory - return FALSE - -/turf/open/swarmer_act()//ex_act() on turf calls it on its contents, this is to prevent attacking mobs by DisIntegrate()'ing the floor - return FALSE - -/obj/structure/lattice/catwalk/swarmer_catwalk/swarmer_act() - return FALSE - -/obj/structure/swarmer/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - if(S.AIStatus == AI_ON) - return FALSE - else - return ..() - -/obj/effect/swarmer_act() - return FALSE - -/obj/effect/decal/cleanable/robot_debris/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.DisIntegrate(src) - qdel(src) - return TRUE - -/obj/structure/flora/swarmer_act() - return FALSE - -/turf/open/lava/swarmer_act() - if(!is_safe()) - new /obj/structure/lattice/catwalk/swarmer_catwalk(src) - return FALSE - -/obj/machinery/atmospherics/swarmer_act() - return FALSE - -/obj/structure/disposalpipe/swarmer_act() - return FALSE - -/obj/machinery/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.DismantleMachine(src) - return TRUE - -/obj/machinery/light/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.DisIntegrate(src) - return TRUE - -/obj/machinery/door/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - var/isonshuttle = istype(get_area(src), /area/shuttle) - for(var/turf/T in range(1, src)) - var/area/A = get_area(T) - if(isspaceturf(T) || (!isonshuttle && (istype(A, /area/shuttle) || istype(A, /area/space))) || (isonshuttle && !istype(A, /area/shuttle))) - to_chat(S, "Destroying this object has the potential to cause a hull breach. Aborting.") - S.target = null - return FALSE - else if(istype(A, /area/engine/supermatter)) - to_chat(S, "Disrupting the containment of a supermatter crystal would not be to our benefit. Aborting.") - S.target = null - return FALSE - S.DisIntegrate(src) - return TRUE - -/obj/machinery/camera/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.DisIntegrate(src) - toggle_cam(S, 0) - return TRUE - -/obj/machinery/particle_accelerator/control_box/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.DisIntegrate(src) - return TRUE - -/obj/machinery/field/generator/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.DisIntegrate(src) - return TRUE - -/obj/machinery/gravity_generator/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.DisIntegrate(src) - return TRUE - -/obj/machinery/vending/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)//It's more visually interesting than dismantling the machine - S.DisIntegrate(src) - return TRUE - -/obj/machinery/turretid/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.DisIntegrate(src) - return TRUE - -/obj/machinery/chem_dispenser/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "The volatile chemicals in this machine would destroy us. Aborting.") - return FALSE - -/obj/machinery/nuclearbomb/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "This device's destruction would result in the extermination of everything in the area. Aborting.") - return FALSE - -/obj/effect/rune/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "Searching... sensor malfunction! Target lost. Aborting.") - return FALSE - -/obj/structure/reagent_dispensers/fueltank/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "Destroying this object would cause a chain reaction. Aborting.") - return FALSE - -/obj/structure/cable/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.") - return FALSE - -/obj/machinery/portable_atmospherics/canister/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "An inhospitable area may be created as a result of destroying this object. Aborting.") - return FALSE - -/obj/machinery/telecomms/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "This communications relay should be preserved, it will be a useful resource to our masters in the future. Aborting.") - return FALSE - -/obj/machinery/deepfryer/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "This kitchen appliance should be preserved, it will make delicious unhealthy snacks for our masters in the future. Aborting.") - return FALSE - -/obj/machinery/power/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.") - return FALSE - -/obj/machinery/gateway/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "This bluespace source will be important to us later. Aborting.") - return FALSE - -/turf/closed/wall/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - var/isonshuttle = istype(loc, /area/shuttle) - for(var/turf/T in range(1, src)) - var/area/A = get_area(T) - if(isspaceturf(T) || (!isonshuttle && (istype(A, /area/shuttle) || istype(A, /area/space))) || (isonshuttle && !istype(A, /area/shuttle))) - to_chat(S, "Destroying this object has the potential to cause a hull breach. Aborting.") - S.target = null - return TRUE - else if(istype(A, /area/engine/supermatter)) - to_chat(S, "Disrupting the containment of a supermatter crystal would not be to our benefit. Aborting.") - S.target = null - return TRUE - return ..() - -/obj/structure/window/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - var/isonshuttle = istype(get_area(src), /area/shuttle) - for(var/turf/T in range(1, src)) - var/area/A = get_area(T) - if(isspaceturf(T) || (!isonshuttle && (istype(A, /area/shuttle) || istype(A, /area/space))) || (isonshuttle && !istype(A, /area/shuttle))) - to_chat(S, "Destroying this object has the potential to cause a hull breach. Aborting.") - S.target = null - return TRUE - else if(istype(A, /area/engine/supermatter)) - to_chat(S, "Disrupting the containment of a supermatter crystal would not be to our benefit. Aborting.") - S.target = null - return TRUE - return ..() - -/obj/item/stack/cable_coil/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)//Wiring would be too effective as a resource - to_chat(S, "This object does not contain enough materials to work with.") - return FALSE - -/obj/machinery/porta_turret/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "Attempting to dismantle this machine would result in an immediate counterattack. Aborting.") - return FALSE - -/obj/machinery/porta_turret_cover/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "Attempting to dismantle this machine would result in an immediate counterattack. Aborting.") - return FALSE - -/mob/living/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.DisperseTarget(src) - return TRUE - -/mob/living/simple_animal/slime/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "This biological resource is somehow resisting our bluespace transceiver. Aborting.") - return FALSE - -/obj/machinery/droneDispenser/swarmer/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "This object is receiving unactivated swarmer shells to help us. Aborting.") - return FALSE - -/obj/structure/lattice/catwalk/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - . = ..() - var/turf/here = get_turf(src) - for(var/A in here.contents) - var/obj/structure/cable/C = A - if(istype(C)) - to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.") - return FALSE - -/obj/item/deactivated_swarmer/IntegrateAmount() - return 50 - -/obj/machinery/hydroponics/soil/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "This object does not contain enough materials to work with.") - return FALSE - -/obj/machinery/field/generator/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "Destroying this object would cause a catastrophic chain reaction. Aborting.") - return FALSE - -/obj/machinery/field/containment/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "This object does not contain solid matter. Aborting.") - return FALSE - -/obj/machinery/power/shieldwallgen/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "Destroying this object would have an unpredictable effect on structure integrity. Aborting.") - return FALSE - -/obj/machinery/shieldwall/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "This object does not contain solid matter. Aborting.") - return FALSE - -////END CTRL CLICK FOR SWARMERS//// - -/mob/living/simple_animal/hostile/swarmer/proc/Fabricate(atom/fabrication_object,fabrication_cost = 0) - if(!isturf(loc)) - to_chat(src, "This is not a suitable location for fabrication. We need more space.") - if(resources >= fabrication_cost) - resources -= fabrication_cost - else - to_chat(src, "I do not have the necessary resources to fabricate this object.") - return - return new fabrication_object(loc) - -/mob/living/simple_animal/hostile/swarmer/proc/Integrate(atom/movable/target) - var/resource_gain = target.IntegrateAmount() - if(resources + resource_gain > max_resources) - to_chat(src, "We cannot hold more materials!") - return TRUE - if(resource_gain) - resources += resource_gain - do_attack_animation(target) - changeNext_move(CLICK_CD_MELEE) - var/obj/effect/temp_visual/swarmer/integrate/I = new /obj/effect/temp_visual/swarmer/integrate(get_turf(target)) - I.pixel_x = target.pixel_x - I.pixel_y = target.pixel_y - I.pixel_z = target.pixel_z - if(istype(target, /obj/item/stack)) - var/obj/item/stack/S = target - S.use(1) - if(S.amount) - return TRUE - qdel(target) - return TRUE - else - to_chat(src, "[target] is incompatible with our internal matter recycler.") - return FALSE - - -/mob/living/simple_animal/hostile/swarmer/proc/DisIntegrate(atom/movable/target) - new /obj/effect/temp_visual/swarmer/disintegration(get_turf(target)) - do_attack_animation(target) - changeNext_move(CLICK_CD_MELEE) - target.ex_act(EXPLODE_LIGHT) - - -/mob/living/simple_animal/hostile/swarmer/proc/DisperseTarget(mob/living/target) - if(target == src) - return - - if(!is_station_level(z) && !is_mining_level(z)) - to_chat(src, "Our bluespace transceiver cannot locate a viable bluespace link, our teleportation abilities are useless in this area.") - return - - to_chat(src, "Attempting to remove this being from our presence.") - - if(!do_mob(src, target, 30)) - return - - var/turf/open/floor/F - F = find_safe_turf(zlevels = z, extended_safety_checks = TRUE) - - if(!F) - return - // If we're getting rid of a human, slap some energy cuffs on - // them to keep them away from us a little longer - - var/mob/living/carbon/human/H = target - if(ishuman(target) && (!H.handcuffed)) - H.handcuffed = new /obj/item/restraints/handcuffs/energy/used(H) - H.update_handcuffed() - log_combat(src, H, "handcuffed") - - var/datum/effect_system/spark_spread/S = new - S.set_up(4,0,get_turf(target)) - S.start() - playsound(src,'sound/blank.ogg',50,TRUE) - do_teleport(target, F, 0, channel = TELEPORT_CHANNEL_BLUESPACE) - -/mob/living/simple_animal/hostile/swarmer/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE) - if(!(flags & SHOCK_TESLA)) - return FALSE - return ..() - -/mob/living/simple_animal/hostile/swarmer/proc/DismantleMachine(obj/machinery/target) - do_attack_animation(target) - to_chat(src, "We begin to dismantle this machine. We will need to be uninterrupted.") - var/obj/effect/temp_visual/swarmer/dismantle/D = new /obj/effect/temp_visual/swarmer/dismantle(get_turf(target)) - D.pixel_x = target.pixel_x - D.pixel_y = target.pixel_y - D.pixel_z = target.pixel_z - if(do_mob(src, target, 100)) - to_chat(src, "Dismantling complete.") - var/atom/Tsec = target.drop_location() - new /obj/item/stack/sheet/metal(Tsec, 5) - for(var/obj/item/I in target.component_parts) - I.forceMove(Tsec) - var/obj/effect/temp_visual/swarmer/disintegration/N = new /obj/effect/temp_visual/swarmer/disintegration(get_turf(target)) - N.pixel_x = target.pixel_x - N.pixel_y = target.pixel_y - N.pixel_z = target.pixel_z - target.dropContents() - if(istype(target, /obj/machinery/computer)) - var/obj/machinery/computer/C = target - if(C.circuit) - C.circuit.forceMove(Tsec) - qdel(target) - - -/obj/effect/temp_visual/swarmer //temporary swarmer visual feedback objects - icon = 'icons/mob/swarmer.dmi' - layer = BELOW_MOB_LAYER - -/obj/effect/temp_visual/swarmer/disintegration - icon_state = "disintegrate" - duration = 10 - -/obj/effect/temp_visual/swarmer/disintegration/Initialize() - . = ..() - playsound(loc, "sparks", 100, TRUE) - -/obj/effect/temp_visual/swarmer/dismantle - icon_state = "dismantle" - duration = 25 - -/obj/effect/temp_visual/swarmer/integrate - icon_state = "integrate" - duration = 5 - -/obj/structure/swarmer //Default swarmer effect object visual feedback - name = "swarmer ui" - desc = null - gender = NEUTER - icon = 'icons/mob/swarmer.dmi' - icon_state = "ui_light" - layer = MOB_LAYER - resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF - light_color = LIGHT_COLOR_CYAN - max_integrity = 30 - anchored = TRUE - var/lon_range = 1 - -/obj/structure/swarmer/Initialize(mapload) - . = ..() - set_light(lon_range) - -/obj/structure/swarmer/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - playsound(src, 'sound/blank.ogg', 80, TRUE) - if(BURN) - playsound(src, 'sound/blank.ogg', 100, TRUE) - -/obj/structure/swarmer/emp_act() - . = ..() - if(. & EMP_PROTECT_SELF) - return - qdel(src) - -/obj/structure/swarmer/trap - name = "swarmer trap" - desc = "" - icon_state = "trap" - max_integrity = 10 - density = FALSE - -/obj/structure/swarmer/trap/Crossed(atom/movable/AM) - if(isliving(AM)) - var/mob/living/L = AM - if(!istype(L, /mob/living/simple_animal/hostile/swarmer)) - playsound(loc,'sound/blank.ogg',50, TRUE, -1) - L.electrocute_act(0, src, 1, flags = SHOCK_NOGLOVES|SHOCK_ILLUSION) - if(iscyborg(L)) - L.Paralyze(100) - qdel(src) - ..() - -/mob/living/simple_animal/hostile/swarmer/proc/CreateTrap() - set name = "Create trap" - set category = "Swarmer" - set desc = "" - if(locate(/obj/structure/swarmer/trap) in loc) - to_chat(src, "There is already a trap here. Aborting.") - return - Fabricate(/obj/structure/swarmer/trap, 5) - - -/mob/living/simple_animal/hostile/swarmer/proc/CreateBarricade() - set name = "Create barricade" - set category = "Swarmer" - set desc = "" - if(locate(/obj/structure/swarmer/blockade) in loc) - to_chat(src, "There is already a blockade here. Aborting.") - return - if(resources < 5) - to_chat(src, "We do not have the resources for this!") - return - if(do_mob(src, src, 10)) - Fabricate(/obj/structure/swarmer/blockade, 5) - - -/obj/structure/swarmer/blockade - name = "swarmer blockade" - desc = "" - icon_state = "barricade" - light_range = MINIMUM_USEFUL_LIGHT_RANGE - max_integrity = 50 - -/obj/structure/swarmer/blockade/CanPass(atom/movable/O) - if(isswarmer(O)) - return TRUE - if(istype(O, /obj/projectile/beam/disabler)) - return TRUE - -/mob/living/simple_animal/hostile/swarmer/proc/CreateSwarmer() - set name = "Replicate" - set category = "Swarmer" - set desc = "" - to_chat(src, "We are attempting to replicate ourselves. We will need to stand still until the process is complete.") - if(resources < 50) - to_chat(src, "We do not have the resources for this!") - return - if(!isturf(loc)) - to_chat(src, "This is not a suitable location for replicating ourselves. We need more room.") - return - if(do_mob(src, src, 100)) - var/createtype = SwarmerTypeToCreate() - if(createtype && Fabricate(createtype, 50)) - playsound(loc,'sound/blank.ogg',50, TRUE, -1) - - -/mob/living/simple_animal/hostile/swarmer/proc/SwarmerTypeToCreate() - return /obj/effect/mob_spawn/swarmer - - -/mob/living/simple_animal/hostile/swarmer/proc/RepairSelf() - set name = "Self Repair" - set category = "Swarmer" - set desc = "" - if(!isturf(loc)) - return - to_chat(src, "Attempting to repair damage to our body, stand by...") - if(do_mob(src, src, 100)) - adjustHealth(-100) - to_chat(src, "We successfully repaired ourselves.") - -/mob/living/simple_animal/hostile/swarmer/proc/ToggleLight() - if(!light_range) - set_light(3) - else - set_light(0) - -/mob/living/simple_animal/hostile/swarmer/proc/swarmer_chat(msg) - var/rendered = "Swarm communication - [src] [say_quote(msg)]" - for(var/i in GLOB.mob_list) - var/mob/M = i - if(isswarmer(M)) - to_chat(M, rendered) - if(isobserver(M)) - var/link = FOLLOW_LINK(M, src) - to_chat(M, "[link] [rendered]") - -/mob/living/simple_animal/hostile/swarmer/proc/ContactSwarmers() - var/message = stripped_input(src, "Announce to other swarmers", "Swarmer contact") - // TODO get swarmers their own colour rather than just boldtext - if(message) - swarmer_chat(message) diff --git a/code/modules/antagonists/swarmer/swarmer_event.dm b/code/modules/antagonists/swarmer/swarmer_event.dm deleted file mode 100644 index e086485a49..0000000000 --- a/code/modules/antagonists/swarmer/swarmer_event.dm +++ /dev/null @@ -1,28 +0,0 @@ -/datum/round_event_control/spawn_swarmer - name = "Spawn Swarmer Shell" - typepath = /datum/round_event/spawn_swarmer - weight = 7 - max_occurrences = 1 //Only once okay fam - earliest_start = 30 MINUTES - min_players = 15 - - -/datum/round_event/spawn_swarmer - -/datum/round_event/spawn_swarmer/start() - if(find_swarmer()) - return 0 - if(!GLOB.the_gateway) - return 0 - new /obj/effect/mob_spawn/swarmer(get_turf(GLOB.the_gateway)) - if(prob(25)) //25% chance to announce it to the crew - var/swarmer_report = "[command_name()] High-Priority Update" - swarmer_report += "

    Our long-range sensors have detected an odd signal emanating from your station's gateway. We recommend immediate investigation of your gateway, as something may have come through." - print_command_report(swarmer_report, announce=TRUE) - -/datum/round_event/spawn_swarmer/proc/find_swarmer() - for(var/i in GLOB.mob_living_list) - var/mob/living/L = i - if(istype(L, /mob/living/simple_animal/hostile/swarmer) && L.client) //If there is a swarmer with an active client, we've found our swarmer - return 1 - return 0 diff --git a/code/modules/antagonists/traitor/IAA/internal_affairs.dm b/code/modules/antagonists/traitor/IAA/internal_affairs.dm deleted file mode 100644 index b2dede3893..0000000000 --- a/code/modules/antagonists/traitor/IAA/internal_affairs.dm +++ /dev/null @@ -1,258 +0,0 @@ -#define PINPOINTER_MINIMUM_RANGE 15 -#define PINPOINTER_EXTRA_RANDOM_RANGE 10 -#define PINPOINTER_PING_TIME 40 -#define PROB_ACTUAL_TRAITOR 20 -#define TRAITOR_AGENT_ROLE "Syndicate External Affairs Agent" - -/datum/antagonist/traitor/internal_affairs - name = "Internal Affairs Agent" - employer = "Nanotrasen" - special_role = "internal affairs agent" - antagpanel_category = "IAA" - var/syndicate = FALSE - var/last_man_standing = FALSE - var/list/datum/mind/targets_stolen - - -/datum/antagonist/traitor/internal_affairs/proc/give_pinpointer() - if(owner && owner.current) - owner.current.apply_status_effect(/datum/status_effect/agent_pinpointer) - -/datum/antagonist/traitor/internal_affairs/apply_innate_effects() - .=..() //in case the base is used in future - if(owner && owner.current) - give_pinpointer(owner.current) - -/datum/antagonist/traitor/internal_affairs/remove_innate_effects() - .=..() - if(owner && owner.current) - owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer) - -/datum/antagonist/traitor/internal_affairs/on_gain() - START_PROCESSING(SSprocessing, src) - .=..() -/datum/antagonist/traitor/internal_affairs/on_removal() - STOP_PROCESSING(SSprocessing,src) - .=..() -/datum/antagonist/traitor/internal_affairs/process() - iaa_process() - - -/datum/status_effect/agent_pinpointer - id = "agent_pinpointer" - duration = -1 - tick_interval = PINPOINTER_PING_TIME - alert_type = /atom/movable/screen/alert/status_effect/agent_pinpointer - var/minimum_range = PINPOINTER_MINIMUM_RANGE - var/range_fuzz_factor = PINPOINTER_EXTRA_RANDOM_RANGE - var/mob/scan_target = null - var/range_mid = 8 - var/range_far = 16 - -/atom/movable/screen/alert/status_effect/agent_pinpointer - name = "Internal Affairs Integrated Pinpointer" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "pinon" - -/datum/status_effect/agent_pinpointer/proc/point_to_target() //If we found what we're looking for, show the distance and direction - if(!scan_target) - linked_alert.icon_state = "pinonnull" - return - var/turf/here = get_turf(owner) - var/turf/there = get_turf(scan_target) - if(here.z != there.z) - linked_alert.icon_state = "pinonnull" - return - if(get_dist_euclidian(here,there)<=minimum_range + rand(0, range_fuzz_factor)) - linked_alert.icon_state = "pinondirect" - else - linked_alert.setDir(get_dir(here, there)) - var/dist = (get_dist(here, there)) - if(dist >= 1 && dist <= range_mid) - linked_alert.icon_state = "pinonclose" - else if(dist > range_mid && dist <= range_far) - linked_alert.icon_state = "pinonmedium" - else if(dist > range_far) - linked_alert.icon_state = "pinonfar" - -/datum/status_effect/agent_pinpointer/proc/scan_for_target() - scan_target = null - if(owner) - if(owner.mind) - for(var/datum/objective/objective_ in owner.mind.get_all_objectives()) - if(!is_internal_objective(objective_)) - continue - var/datum/objective/assassinate/internal/objective = objective_ - var/mob/current = objective.target.current - if(current&¤t.stat!=DEAD) - scan_target = current - break - -/datum/status_effect/agent_pinpointer/tick() - if(!owner) - qdel(src) - return - scan_for_target() - point_to_target() - - -/proc/is_internal_objective(datum/objective/O) - return (istype(O, /datum/objective/assassinate/internal)||istype(O, /datum/objective/destroy/internal)) - -/datum/antagonist/traitor/proc/replace_escape_objective() - if(!owner || !objectives.len) - return - for (var/objective_ in objectives) - if(!(istype(objective_, /datum/objective/escape)||istype(objective_, /datum/objective/survive))) - continue - remove_objective(objective_) - - var/datum/objective/martyr/martyr_objective = new - martyr_objective.owner = owner - add_objective(martyr_objective) - -/datum/antagonist/traitor/proc/reinstate_escape_objective() - if(!owner||!objectives.len) - return - for (var/objective_ in objectives) - if(!istype(objective_, /datum/objective/martyr)) - continue - remove_objective(objective_) - -/datum/antagonist/traitor/internal_affairs/reinstate_escape_objective() - ..() - var/objtype = traitor_kind == TRAITOR_HUMAN ? /datum/objective/escape : /datum/objective/survive - var/datum/objective/escape_objective = new objtype - escape_objective.owner = owner - add_objective(escape_objective) - -/datum/antagonist/traitor/internal_affairs/proc/steal_targets(datum/mind/victim) - if(!owner.current||owner.current.stat==DEAD) - return - to_chat(owner.current, "Target eliminated: [victim.name]") - for(var/objective_ in victim.get_all_objectives()) - if(istype(objective_, /datum/objective/assassinate/internal)) - var/datum/objective/assassinate/internal/objective = objective_ - if(objective.target==owner) - continue - else if(targets_stolen.Find(objective.target) == 0) - var/datum/objective/assassinate/internal/new_objective = new - new_objective.owner = owner - new_objective.target = objective.target - new_objective.update_explanation_text() - add_objective(new_objective) - targets_stolen += objective.target - var/status_text = objective.check_completion() ? "neutralised" : "active" - to_chat(owner.current, "New target added to database: [objective.target.name] ([status_text])") - else if(istype(objective_, /datum/objective/destroy/internal)) - var/datum/objective/destroy/internal/objective = objective_ - var/datum/objective/destroy/internal/new_objective = new - if(objective.target==owner) - continue - else if(targets_stolen.Find(objective.target) == 0) - new_objective.owner = owner - new_objective.target = objective.target - new_objective.update_explanation_text() - add_objective(new_objective) - targets_stolen += objective.target - var/status_text = objective.check_completion() ? "neutralised" : "active" - to_chat(owner.current, "New target added to database: [objective.target.name] ([status_text])") - last_man_standing = TRUE - for(var/objective_ in objectives) - if(!is_internal_objective(objective_)) - continue - var/datum/objective/assassinate/internal/objective = objective_ - if(!objective.check_completion()) - last_man_standing = FALSE - return - if(last_man_standing) - if(syndicate) - to_chat(owner.current,"All the loyalist agents are dead, and no more is required of you. Die a glorious death, agent.") - else - to_chat(owner.current,"All the other agents are dead, and you're the last loose end. Stage a Syndicate terrorist attack to cover up for today's events. You no longer have any limits on collateral damage.") - replace_escape_objective(owner) - -/datum/antagonist/traitor/internal_affairs/proc/iaa_process() - if(owner&&owner.current&&owner.current.stat!=DEAD) - for(var/objective_ in objectives) - if(!is_internal_objective(objective_)) - continue - var/datum/objective/assassinate/internal/objective = objective_ - if(!objective.target) - continue - if(objective.check_completion()) - if(objective.stolen) - continue - else - steal_targets(objective.target) - objective.stolen = TRUE - else - if(objective.stolen) - var/fail_msg = "My sensors tell you that [objective.target.current.real_name], one of the targets you were meant to have killed, pulled one over on you, and is still alive - do the job properly this time! " - if(last_man_standing) - if(syndicate) - fail_msg += " You no longer have permission to die. " - else - fail_msg += " The truth could still slip out! Cease any terrorist actions as soon as possible, unneeded property damage or loss of employee life will lead to my contract being terminated." - reinstate_escape_objective(owner) - last_man_standing = FALSE - to_chat(owner.current, fail_msg) - objective.stolen = FALSE - -/datum/antagonist/traitor/internal_affairs/proc/forge_iaa_objectives() - if(SSticker.mode.target_list.len && SSticker.mode.target_list[owner]) // Is a double agent - // Assassinate - var/datum/mind/target_mind = SSticker.mode.target_list[owner] - if(issilicon(target_mind.current)) - var/datum/objective/destroy/internal/destroy_objective = new - destroy_objective.owner = owner - destroy_objective.target = target_mind - destroy_objective.update_explanation_text() - add_objective(destroy_objective) - else - var/datum/objective/assassinate/internal/kill_objective = new - kill_objective.owner = owner - kill_objective.target = target_mind - kill_objective.update_explanation_text() - add_objective(kill_objective) - - //Optional traitor objective - if(prob(PROB_ACTUAL_TRAITOR)) - employer = "The Syndicate" - owner.special_role = TRAITOR_AGENT_ROLE - special_role = TRAITOR_AGENT_ROLE - syndicate = TRUE - forge_single_objective() - -/datum/antagonist/traitor/internal_affairs/forge_traitor_objectives() - forge_iaa_objectives() - - var/objtype = traitor_kind == TRAITOR_HUMAN ? /datum/objective/escape : /datum/objective/survive - var/datum/objective/escape_objective = new objtype - escape_objective.owner = owner - add_objective(escape_objective) - -/datum/antagonist/traitor/internal_affairs/proc/greet_iaa() - var/crime = pick("distribution of contraband" , "unauthorized erotic action on duty", "embezzlement", "piloting under the influence", "dereliction of duty", "syndicate collaboration", "mutiny", "multiple homicides", "corporate espionage", "receiving bribes", "malpractice", "worship of prohibited life forms", "possession of profane texts", "murder", "arson", "insulting their manager", "grand theft", "conspiracy", "attempting to unionize", "vandalism", "gross incompetence") - - to_chat(owner.current, "I are the [special_role].") - if(syndicate) - to_chat(owner.current, "My target has been framed for [crime], and you have been tasked with eliminating them to prevent them defending themselves in court.") - to_chat(owner.current, "Any damage you cause will be a further embarrassment to Nanotrasen, so you have no limits on collateral damage.") - to_chat(owner.current, "I have been provided with a standard uplink to accomplish my task.") - else - to_chat(owner.current, "My target is suspected of [crime], and you have been tasked with eliminating them by any means necessary to avoid a costly and embarrassing public trial.") - to_chat(owner.current, "While you have a license to kill, unneeded property damage or loss of employee life will lead to my contract being terminated.") - to_chat(owner.current, "For the sake of plausible deniability, you have been equipped with an array of captured Syndicate weaponry available via uplink.") - - to_chat(owner.current, "Finally, watch my back. Your target has friends in high places, and intel suggests someone may have taken out a contract of their own to protect them.") - owner.announce_objectives() - -/datum/antagonist/traitor/internal_affairs/greet() - greet_iaa() - -#undef PROB_ACTUAL_TRAITOR -#undef PINPOINTER_EXTRA_RANDOM_RANGE -#undef PINPOINTER_MINIMUM_RANGE -#undef PINPOINTER_PING_TIME diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index a29f622680..8481464673 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -15,12 +15,9 @@ var/should_give_codewords = TRUE var/should_equip = TRUE var/traitor_kind = TRAITOR_HUMAN //Set on initial assignment - var/datum/contractor_hub/contractor_hub can_hijack = HIJACK_HIJACKER /datum/antagonist/traitor/on_gain() - if(owner.current && isAI(owner.current)) - traitor_kind = TRAITOR_AI SSticker.mode.traitors += owner owner.special_role = special_role @@ -32,12 +29,6 @@ /datum/antagonist/traitor/on_removal() //Remove malf powers. - if(traitor_kind == TRAITOR_AI && owner.current && isAI(owner.current)) - var/mob/living/silicon/ai/A = owner.current - A.set_zeroth_law("") - A.verbs -= /mob/living/silicon/ai/proc/choose_modules - A.malf_picker.remove_malf_verbs(A) - qdel(A.malf_picker) UnregisterSignal(owner.current, COMSIG_MOVABLE_HEAR, PROC_REF(handle_hearing)) SSticker.mode.traitors -= owner if(!silent && owner.current) @@ -82,14 +73,6 @@ for(var/i = objective_count, i < toa, i++) forge_single_objective() - if(is_hijacker && objective_count <= toa) //Don't assign hijack if it would exceed the number of objectives set in config.traitor_objectives_amount - if (!(locate(/datum/objective/hijack) in objectives)) - var/datum/objective/hijack/hijack_objective = new - hijack_objective.owner = owner - add_objective(hijack_objective) - return - - var/martyr_compatibility = 1 //You can't succeed in stealing if you're dead. for(var/datum/objective/O in objectives) if(!O.martyr_compatible) @@ -136,13 +119,7 @@ /datum/antagonist/traitor/proc/forge_single_human_objective() //Returns how many objectives are added .=1 if(prob(50)) - var/list/active_ais = active_ais() - if(active_ais.len && prob(100/GLOB.joined_player_list.len)) - var/datum/objective/destroy/destroy_objective = new - destroy_objective.owner = owner - destroy_objective.find_target() - add_objective(destroy_objective) - else if(prob(30)) + if(prob(30)) var/datum/objective/maroon/maroon_objective = new maroon_objective.owner = owner maroon_objective.find_target() @@ -153,33 +130,15 @@ kill_objective.find_target() add_objective(kill_objective) else - if(prob(15) && !(locate(/datum/objective/download) in objectives) && !(owner.assigned_role in list("Research Director", "Scientist", "Roboticist"))) - var/datum/objective/download/download_objective = new - download_objective.owner = owner - download_objective.gen_amount_goal() - add_objective(download_objective) - else - var/datum/objective/steal/steal_objective = new - steal_objective.owner = owner - steal_objective.find_target() - add_objective(steal_objective) + var/datum/objective/steal/steal_objective = new + steal_objective.owner = owner + steal_objective.find_target() + add_objective(steal_objective) /datum/antagonist/traitor/proc/forge_single_AI_objective() .=1 var/special_pick = rand(1,4) switch(special_pick) - if(1) - var/datum/objective/block/block_objective = new - block_objective.owner = owner - add_objective(block_objective) - if(2) - var/datum/objective/purge/purge_objective = new - purge_objective.owner = owner - add_objective(purge_objective) - if(3) - var/datum/objective/robot_army/robot_objective = new - robot_objective.owner = owner - add_objective(robot_objective) if(4) //Protect and strand a target var/datum/objective/protect/yandere_one = new yandere_one.owner = owner @@ -199,33 +158,21 @@ give_codewords() /datum/antagonist/traitor/proc/finalize_traitor() - switch(traitor_kind) - if(TRAITOR_AI) - add_law_zero() - owner.current.playsound_local(get_turf(owner.current), 'sound/blank.ogg', 100, FALSE, pressure_affected = FALSE) - owner.current.grant_language(/datum/language/codespeak) - if(TRAITOR_HUMAN) - if(should_equip) - equip(silent) - owner.current.playsound_local(get_turf(owner.current), 'sound/blank.ogg', 100, FALSE, pressure_affected = FALSE) + if(should_equip) + equip(silent) + owner.current.playsound_local(get_turf(owner.current), 'sound/blank.ogg', 100, FALSE, pressure_affected = FALSE) /datum/antagonist/traitor/apply_innate_effects(mob/living/mob_override) . = ..() var/mob/living/M = mob_override || owner.current add_antag_hud(antag_hud_type, antag_hud_name, M) handle_clown_mutation(M, mob_override ? null : "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming myself.") - var/mob/living/silicon/ai/A = M - if(istype(A) && traitor_kind == TRAITOR_AI) - A.hack_software = TRUE /datum/antagonist/traitor/remove_innate_effects(mob/living/mob_override) . = ..() var/mob/living/M = mob_override || owner.current remove_antag_hud(antag_hud_type, M) handle_clown_mutation(M, removing = FALSE) - var/mob/living/silicon/ai/A = M - if(istype(A) && traitor_kind == TRAITOR_AI) - A.hack_software = FALSE /datum/antagonist/traitor/proc/give_codewords() if(!owner.current) @@ -245,17 +192,6 @@ to_chat(traitor_mob, "Use the codewords during regular conversation to identify other agents. Proceed with caution, however, as everyone is a potential foe.") to_chat(traitor_mob, "I memorize the codewords, allowing you to recognise them when heard.") -/datum/antagonist/traitor/proc/add_law_zero() - var/mob/living/silicon/ai/killer = owner.current - if(!killer || !istype(killer)) - return - var/law = "Accomplish your objectives at all costs." - var/law_borg = "Accomplish your AI's objectives at all costs." - killer.set_zeroth_law(law, law_borg) - killer.set_syndie_radio() - to_chat(killer, "Your radio has been upgraded! Use :t to speak on an encrypted channel with Syndicate Agents!") - killer.add_malf_picker() - /datum/antagonist/traitor/proc/equip(silent = FALSE) if(traitor_kind == TRAITOR_HUMAN) owner.equip_traitor(employer, silent, src) @@ -309,13 +245,6 @@ var/TC_uses = 0 var/uplink_true = FALSE - var/purchases = "" - LAZYINITLIST(GLOB.uplink_purchase_logs_by_key) - var/datum/uplink_purchase_log/H = GLOB.uplink_purchase_logs_by_key[owner.key] - if(H) - TC_uses = H.total_spent - uplink_true = TRUE - purchases += H.generate_render(FALSE) var/objectives_text = "" if(objectives.len)//If the traitor had no objectives, don't need to process this. @@ -329,7 +258,7 @@ count++ if(uplink_true) - var/uplink_text = "(used [TC_uses] TC) [purchases]" + var/uplink_text = "" if(TC_uses==0 && traitorwin) var/static/icon/badass = icon('icons/badass.dmi', "badass") uplink_text += "[icon2html(badass, world)]" @@ -339,9 +268,6 @@ var/special_role_text = lowertext(name) - if (contractor_hub) - result += contractor_round_end() - if(traitorwin) result += "The [special_role_text] was successful!" else @@ -350,45 +276,6 @@ return result.Join("
    ") -/// Proc detailing contract kit buys/completed contracts/additional info -/datum/antagonist/traitor/proc/contractor_round_end() - var result = "" - var total_spent_rep = 0 - - var/completed_contracts = 0 - var/tc_total = contractor_hub.contract_TC_payed_out + contractor_hub.contract_TC_to_redeem - for (var/datum/syndicate_contract/contract in contractor_hub.assigned_contracts) - if (contract.status == CONTRACT_STATUS_COMPLETE) - completed_contracts++ - - var/contractor_item_icons = "" // Icons of purchases - var/contractor_support_unit = "" // Set if they had a support unit - and shows appended to their contracts completed - - /// Get all the icons/total cost for all our items bought - for (var/datum/contractor_item/contractor_purchase in contractor_hub.purchased_items) - contractor_item_icons += "\[ [contractor_purchase.name] - [contractor_purchase.cost] Rep

    [contractor_purchase.desc]
    \]
    " - - total_spent_rep += contractor_purchase.cost - - /// Special case for reinforcements, we want to show their ckey and name on round end. - if (istype(contractor_purchase, /datum/contractor_item/contractor_partner)) - var/datum/contractor_item/contractor_partner/partner = contractor_purchase - contractor_support_unit += "
    [partner.partner_mind.key] played [partner.partner_mind.current.name], their contractor support unit." - - if (contractor_hub.purchased_items.len) - result += "
    (used [total_spent_rep] Rep) " - result += contractor_item_icons - result += "
    " - if (completed_contracts > 0) - var/pluralCheck = "contract" - if (completed_contracts > 1) - pluralCheck = "contracts" - - result += "Completed [completed_contracts] [pluralCheck] for a total of \ - [tc_total] TC![contractor_support_unit]
    " - - return result - /datum/antagonist/traitor/roundend_report_footer() var/phrases = jointext(GLOB.syndicate_code_phrase, ", ") var/responses = jointext(GLOB.syndicate_code_response, ", ") diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm deleted file mode 100644 index d20b75d6e7..0000000000 --- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm +++ /dev/null @@ -1,891 +0,0 @@ -#define DEFAULT_DOOMSDAY_TIMER 4500 -#define DOOMSDAY_ANNOUNCE_INTERVAL 600 - -GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( - /obj/machinery/field/containment, - /obj/machinery/power/supermatter_crystal, - /obj/machinery/doomsday_device, - /obj/machinery/nuclearbomb, - /obj/machinery/nuclearbomb/selfdestruct, - /obj/machinery/nuclearbomb/syndicate, - /obj/machinery/syndicatebomb, - /obj/machinery/syndicatebomb/badmin, - /obj/machinery/syndicatebomb/badmin/clown, - /obj/machinery/syndicatebomb/empty, - /obj/machinery/syndicatebomb/self_destruct, - /obj/machinery/syndicatebomb/training - ))) - -//The malf AI action subtype. All malf actions are subtypes of this. -/datum/action/innate/ai - name = "AI Action" - desc = "" - background_icon_state = "bg_tech_blue" - icon_icon = 'icons/mob/actions/actions_AI.dmi' - var/mob/living/silicon/ai/owner_AI //The owner AI, so we don't have to typecast every time - var/uses //If we have multiple uses of the same power - var/auto_use_uses = TRUE //If we automatically use up uses on each activation - var/cooldown_period //If applicable, the time in deciseconds we have to wait before using any more modules - -/datum/action/innate/ai/Grant(mob/living/L) - . = ..() - if(!isAI(owner)) - WARNING("AI action [name] attempted to grant itself to non-AI mob [L.real_name] ([L.key])!") - qdel(src) - else - owner_AI = owner - -/datum/action/innate/ai/IsAvailable() - . = ..() - if(owner_AI && owner_AI.malf_cooldown > world.time) - return - -/datum/action/innate/ai/Trigger() - . = ..() - if(auto_use_uses) - adjust_uses(-1) - if(cooldown_period) - owner_AI.malf_cooldown = world.time + cooldown_period - -/datum/action/innate/ai/proc/adjust_uses(amt, silent) - uses += amt - if(!silent && uses) - to_chat(owner, "[name] now has [uses] use[uses > 1 ? "s" : ""] remaining.") - if(!uses) - if(initial(uses) > 1) //no need to tell 'em if it was one-use anyway! - to_chat(owner, "[name] has run out of uses!") - qdel(src) - -//Framework for ranged abilities that can have different effects by left-clicking stuff. -/datum/action/innate/ai/ranged - name = "Ranged AI Action" - auto_use_uses = FALSE //This is so we can do the thing and disable/enable freely without having to constantly add uses - var/obj/effect/proc_holder/ranged_ai/linked_ability //The linked proc holder that contains the actual ability code - var/linked_ability_type //The path of our linked ability - -/datum/action/innate/ai/ranged/New() - if(!linked_ability_type) - WARNING("Ranged AI action [name] attempted to spawn without a linked ability!") - qdel(src) //uh oh! - return - linked_ability = new linked_ability_type() - linked_ability.attached_action = src - ..() - -/datum/action/innate/ai/ranged/adjust_uses(amt, silent) - uses += amt - if(!silent && uses) - to_chat(owner, "[name] now has [uses] use[uses > 1 ? "s" : ""] remaining.") - if(!uses) - if(initial(uses) > 1) //no need to tell 'em if it was one-use anyway! - to_chat(owner, "[name] has run out of uses!") - Remove(owner) - QDEL_IN(src, 100) //let any active timers on us finish up - -/datum/action/innate/ai/ranged/Destroy() - QDEL_NULL(linked_ability) - return ..() - -/datum/action/innate/ai/ranged/Activate() - linked_ability.toggle(owner) - return TRUE - -//The actual ranged proc holder. -/obj/effect/proc_holder/ranged_ai - var/enable_text = "Hello World!" //Appears when the user activates the ability - var/disable_text = "Goodbye Cruel World!" //Context clues! - var/datum/action/innate/ai/ranged/attached_action - -/obj/effect/proc_holder/ranged_ai/Destroy() - QDEL_NULL(attached_action) - return ..() - -/obj/effect/proc_holder/ranged_ai/proc/toggle(mob/user) - if(active) - remove_ranged_ability(disable_text) - else - add_ranged_ability(user, enable_text) - - -//The datum and interface for the malf unlock menu, which lets them choose actions to unlock. -/datum/module_picker - var/temp - var/processing_time = 50 - var/list/possible_modules - -/datum/module_picker/New() - possible_modules = list() - for(var/type in typesof(/datum/AI_Module)) - var/datum/AI_Module/AM = new type - if((AM.power_type && AM.power_type != /datum/action/innate/ai) || AM.upgrade) - possible_modules += AM - -/datum/module_picker/proc/remove_malf_verbs(mob/living/silicon/ai/AI) //Removes all malfunction-related abilities from the target AI. - for(var/datum/AI_Module/AM in possible_modules) - for(var/datum/action/A in AI.actions) - if(istype(A, initial(AM.power_type))) - qdel(A) - -/datum/module_picker/proc/use(mob/user) - var/list/dat = list() - dat += "Select use of processing time: (currently #[processing_time] left.)
    " - dat += "
    " - dat += "Install Module:
    " - dat += "The number afterwards is the amount of processing time it consumes.
    " - for(var/datum/AI_Module/large/module in possible_modules) - dat += "[module.module_name]\[?\] ([module.cost])
    " - for(var/datum/AI_Module/small/module in possible_modules) - dat += "[module.module_name]\[?\] ([module.cost])
    " - dat += "
    " - if(temp) - dat += "[temp]" - var/datum/browser/popup = new(user, "modpicker", "Malf Module Menu") - popup.set_content(dat.Join()) - popup.open() - -/datum/module_picker/Topic(href, href_list) - ..() - - if(!isAI(usr)) - return - var/mob/living/silicon/ai/A = usr - - if(A.stat == DEAD) - to_chat(A, "I are already dead!") - return - - for(var/datum/AI_Module/AM in possible_modules) - if (href_list[AM.mod_pick_name]) - - // Cost check - if(AM.cost > processing_time) - temp = "You cannot afford this module." - break - - var/datum/action/innate/ai/action = locate(AM.power_type) in A.actions - - // Give the power and take away the money. - if(AM.upgrade) //upgrade and upgrade() are separate, be careful! - AM.upgrade(A) - possible_modules -= AM - to_chat(A, AM.unlock_text) - A.playsound_local(A, AM.unlock_sound, 50, 0) - else - if(AM.power_type) - if(!action) //Unlocking for the first time - var/datum/action/AC = new AM.power_type - AC.Grant(A) - A.current_modules += new AM.type - temp = AM.description - if(AM.one_purchase) - possible_modules -= AM - if(AM.unlock_text) - to_chat(A, AM.unlock_text) - if(AM.unlock_sound) - A.playsound_local(A, AM.unlock_sound, 50, 0) - else //Adding uses to an existing module - action.uses += initial(action.uses) - action.desc = "" - action.UpdateButtonIcon() - temp = "Additional use[action.uses > 1 ? "s" : ""] added to [action.name]!" - processing_time -= AM.cost - - if(href_list["showdesc"]) - if(AM.mod_pick_name == href_list["showdesc"]) - temp = AM.description - use(usr) - - -//The base module type, which holds info about each ability. -/datum/AI_Module - var/module_name - var/mod_pick_name - var/description = "" - var/engaged = 0 - var/cost = 5 - var/one_purchase = FALSE //If this module can only be purchased once. This always applies to upgrades, even if the variable is set to false. - - var/power_type = /datum/action/innate/ai //If the module gives an active ability, use this. Mutually exclusive with upgrade. - var/upgrade //If the module gives a passive upgrade, use this. Mutually exclusive with power_type. - var/unlock_text = "Hello World!" //Text shown when an ability is unlocked - var/unlock_sound //Sound played when an ability is unlocked - -/datum/AI_Module/proc/upgrade(mob/living/silicon/ai/AI) //Apply upgrades! - return - -/datum/AI_Module/large //Big, powerful stuff that can only be used once. -/datum/AI_Module/small //Weak, usually localized stuff with multiple uses. - - -//Doomsday Device: Starts the self-destruct timer. It can only be stopped by killing the AI completely. -/datum/AI_Module/large/nuke_station - module_name = "Doomsday Device" - mod_pick_name = "nukestation" - description = "Activate a weapon that will disintegrate all organic life on the station after a 450 second delay. Can only be used while on the station, will fail if your core is moved off station or destroyed." - cost = 130 - one_purchase = TRUE - power_type = /datum/action/innate/ai/nuke_station - unlock_text = "I slowly, carefully, establish a connection with the on-station self-destruct. You can now activate it at any time." - -/datum/action/innate/ai/nuke_station - name = "Doomsday Device" - desc = "" - button_icon_state = "doomsday_device" - auto_use_uses = FALSE - -/datum/action/innate/ai/nuke_station/Activate() - var/turf/T = get_turf(owner) - if(!istype(T) || !is_station_level(T.z)) - to_chat(owner, "I cannot activate the doomsday device while off-station!") - return - if(alert(owner, "Send arming signal? (true = arm, false = cancel)", "purge_all_life()", "confirm = TRUE;", "confirm = FALSE;") != "confirm = TRUE;") - return - if (active) - return //prevent the AI from activating an already active doomsday - active = TRUE - set_us_up_the_bomb(owner) - -/datum/action/innate/ai/nuke_station/proc/set_us_up_the_bomb(mob/living/owner) - set waitfor = FALSE - to_chat(owner, "run -o -a 'selfdestruct'") - sleep(5) - if(!owner || QDELETED(owner)) - return - to_chat(owner, "Running executable 'selfdestruct'...") - sleep(rand(10, 30)) - if(!owner || QDELETED(owner)) - return - owner.playsound_local(owner, 'sound/blank.ogg', 50, 0) - to_chat(owner, "!!! UNAUTHORIZED SELF-DESTRUCT ACCESS !!!") - to_chat(owner, "This is a class-3 security violation. This incident will be reported to Central Command.") - for(var/i in 1 to 3) - sleep(20) - if(!owner || QDELETED(owner)) - return - to_chat(owner, "Sending security report to Central Command.....[rand(0, 9) + (rand(20, 30) * i)]%") - sleep(3) - if(!owner || QDELETED(owner)) - return - to_chat(owner, "auth 'akjv9c88asdf12nb' ******************") - owner.playsound_local(owner, 'sound/blank.ogg', 50, 0) - sleep(30) - if(!owner || QDELETED(owner)) - return - to_chat(owner, "Credentials accepted. Welcome, akjv9c88asdf12nb.") - owner.playsound_local(owner, 'sound/blank.ogg', 50, 0) - sleep(5) - if(!owner || QDELETED(owner)) - return - to_chat(owner, "Arm self-destruct device? (Y/N)") - owner.playsound_local(owner,'sound/blank.ogg', 50, 0) - sleep(20) - if(!owner || QDELETED(owner)) - return - to_chat(owner, "Y") - sleep(15) - if(!owner || QDELETED(owner)) - return - to_chat(owner, "Confirm arming of self-destruct device? (Y/N)") - owner.playsound_local(owner,'sound/blank.ogg', 50, 0) - sleep(10) - if(!owner || QDELETED(owner)) - return - to_chat(owner, "Y") - sleep(rand(15, 25)) - if(!owner || QDELETED(owner)) - return - to_chat(owner, "Please repeat password to confirm.") - owner.playsound_local(owner, 'sound/blank.ogg', 50, 0) - sleep(14) - if(!owner || QDELETED(owner)) - return - to_chat(owner, "******************") - sleep(40) - if(!owner || QDELETED(owner)) - return - to_chat(owner, "Credentials accepted. Transmitting arming signal...") - owner.playsound_local(owner, 'sound/blank.ogg', 50, 0) - sleep(30) - if(!owner || QDELETED(owner)) - return - priority_announce("Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.", "Anomaly Alert", 'sound/blank.ogg') - set_security_level("delta") - var/obj/machinery/doomsday_device/DOOM = new(owner_AI) - owner_AI.nuking = TRUE - owner_AI.doomsday_device = DOOM - owner_AI.doomsday_device.start() - for(var/obj/item/pinpointer/nuke/P in GLOB.pinpointer_list) - P.switch_mode_to(TRACK_MALF_AI) //Pinpointers start tracking the AI wherever it goes - qdel(src) - -/obj/machinery/doomsday_device - icon = 'icons/obj/machines/nuke_terminal.dmi' - name = "doomsday device" - icon_state = "nuclearbomb_base" - desc = "" - density = TRUE - verb_exclaim = "blares" - var/timing = FALSE - var/obj/effect/countdown/doomsday/countdown - var/detonation_timer - var/next_announce - -/obj/machinery/doomsday_device/Initialize() - . = ..() - countdown = new(src) - -/obj/machinery/doomsday_device/Destroy() - QDEL_NULL(countdown) - STOP_PROCESSING(SSfastprocess, src) - SSshuttle.clearHostileEnvironment(src) - SSmapping.remove_nuke_threat(src) - for(var/A in GLOB.ai_list) - var/mob/living/silicon/ai/AI = A - if(AI.doomsday_device == src) - AI.doomsday_device = null - return ..() - -/obj/machinery/doomsday_device/proc/start() - detonation_timer = world.time + DEFAULT_DOOMSDAY_TIMER - next_announce = world.time + DOOMSDAY_ANNOUNCE_INTERVAL - timing = TRUE - countdown.start() - START_PROCESSING(SSfastprocess, src) - SSshuttle.registerHostileEnvironment(src) - SSmapping.add_nuke_threat(src) //This causes all blue "circuit" tiles on the map to change to animated red icon state. - -/obj/machinery/doomsday_device/proc/seconds_remaining() - . = max(0, (round((detonation_timer - world.time) / 10))) - -/obj/machinery/doomsday_device/process() - var/turf/T = get_turf(src) - if(!T || !is_station_level(T.z)) - minor_announce("DOOMSDAY DEVICE OUT OF STATION RANGE, ABORTING", "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4", TRUE) - SSshuttle.clearHostileEnvironment(src) - qdel(src) - return - if(!timing) - STOP_PROCESSING(SSfastprocess, src) - return - var/sec_left = seconds_remaining() - if(!sec_left) - timing = FALSE - detonate() - else if(world.time >= next_announce) - minor_announce("[sec_left] SECONDS UNTIL DOOMSDAY DEVICE ACTIVATION!", "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4", TRUE) - next_announce += DOOMSDAY_ANNOUNCE_INTERVAL - -/obj/machinery/doomsday_device/proc/detonate() - sound_to_playing_players('sound/blank.ogg') - sleep(100) - for(var/i in GLOB.mob_living_list) - var/mob/living/L = i - var/turf/T = get_turf(L) - if(!T || !is_station_level(T.z)) - continue - if(issilicon(L)) - continue - to_chat(L, "The blast wave from [src] tears you atom from atom!") - L.dust() - to_chat(world, "The AI cleansed the station of life with the doomsday device!") - SSticker.force_ending = 1 - - -//AI Turret Upgrade: Increases the health and damage of all turrets. -/datum/AI_Module/large/upgrade_turrets - module_name = "AI Turret Upgrade" - mod_pick_name = "turret" - description = "Improves the power and health of all AI turrets. This effect is permanent." - cost = 30 - upgrade = TRUE - unlock_text = "I establish a power diversion to your turrets, upgrading their health and damage." - unlock_sound = 'sound/blank.ogg' - -/datum/AI_Module/large/upgrade_turrets/upgrade(mob/living/silicon/ai/AI) - for(var/obj/machinery/porta_turret/ai/turret in GLOB.machines) - turret.obj_integrity += 30 - turret.lethal_projectile = /obj/projectile/beam/laser/heavylaser //Once you see it, you will know what it means to FEAR. - turret.lethal_projectile_sound = 'sound/blank.ogg' - - -//Hostile Station Lockdown: Locks, bolts, and electrifies every airlock on the station. After 90 seconds, the doors reset. -/datum/AI_Module/large/lockdown - module_name = "Hostile Station Lockdown" - mod_pick_name = "lockdown" - description = "Overload the airlock, blast door and fire control networks, locking them down. Caution! This command also electrifies all airlocks. The networks will automatically reset after 90 seconds, briefly \ - opening all doors on the station." - cost = 30 - one_purchase = TRUE - power_type = /datum/action/innate/ai/lockdown - unlock_text = "I upload a sleeper trojan into the door control systems. You can send a signal to set it off at any time." - unlock_sound = 'sound/blank.ogg' - -/datum/action/innate/ai/lockdown - name = "Lockdown" - desc = "" - button_icon_state = "lockdown" - uses = 1 - -/datum/action/innate/ai/lockdown/Activate() - for(var/obj/machinery/door/D in GLOB.airlocks) - if(!is_station_level(D.z)) - continue - INVOKE_ASYNC(D, TYPE_PROC_REF(/obj/machinery/door, hostile_lockdown), owner) - addtimer(CALLBACK(D, TYPE_PROC_REF(/obj/machinery/door, disable_lockdown)), 900) - - var/obj/machinery/computer/communications/C = locate() in GLOB.machines - if(C) - C.post_status("alert", "lockdown") - - minor_announce("Hostile runtime detected in door controllers. Isolation lockdown protocols are now in effect. Please remain calm.","Network Alert:", TRUE) - to_chat(owner, "Lockdown initiated. Network reset in 90 seconds.") - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(minor_announce), - "Automatic system reboot complete. Have a secure day.", - "Network reset:"), 900) - - -//Destroy RCDs: Detonates all non-cyborg RCDs on the station. -/datum/AI_Module/large/destroy_rcd - module_name = "Destroy RCDs" - mod_pick_name = "rcd" - description = "Send a specialised pulse to detonate all hand-held and exosuit Rapid Construction Devices on the station." - cost = 25 - one_purchase = TRUE - power_type = /datum/action/innate/ai/destroy_rcds - unlock_text = "After some improvisation, you rig your onboard radio to be able to send a signal to detonate all RCDs." - unlock_sound = 'sound/blank.ogg' - -/datum/action/innate/ai/destroy_rcds - name = "Destroy RCDs" - desc = "" - button_icon_state = "detonate_rcds" - uses = 1 - cooldown_period = 100 - -/datum/action/innate/ai/destroy_rcds/Activate() - for(var/I in GLOB.rcd_list) - if(!istype(I, /obj/item/construction/rcd/borg)) //Ensures that cyborg RCDs are spared. - var/obj/item/construction/rcd/RCD = I - RCD.detonate_pulse() - to_chat(owner, "RCD detonation pulse emitted.") - owner.playsound_local(owner, 'sound/blank.ogg', 50, 0) - - -//Unlock Mech Domination: Unlocks the ability to dominate mechs. Big shocker, right? -/datum/AI_Module/large/mecha_domination - module_name = "Unlock Mech Domination" - mod_pick_name = "mechjack" - description = "Allows you to hack into a mech's onboard computer, shunting all processes into it and ejecting any occupants. Once uploaded to the mech, it is impossible to leave.\ - Do not allow the mech to leave the station's vicinity or allow it to be destroyed." - cost = 30 - upgrade = TRUE - unlock_text = "Virus package compiled. Select a target mech at any time. I must remain on the station at all times. Loss of signal will result in total system lockout." - unlock_sound = 'sound/blank.ogg' - -/datum/AI_Module/large/mecha_domination/upgrade(mob/living/silicon/ai/AI) - AI.can_dominate_mechs = TRUE //Yep. This is all it does. Honk! - - -//Thermal Sensor Override: Unlocks the ability to disable all fire alarms from doing their job. -/datum/AI_Module/large/break_fire_alarms - module_name = "Thermal Sensor Override" - mod_pick_name = "burnpigs" - description = "Gives you the ability to override the thermal sensors on all fire alarms. This will remove their ability to scan for fire and thus their ability to alert." - one_purchase = TRUE - cost = 25 - power_type = /datum/action/innate/ai/break_fire_alarms - unlock_text = "I replace the thermal sensing capabilities of all fire alarms with a manual override, allowing you to turn them off at will." - unlock_sound = 'sound/blank.ogg' - -/datum/action/innate/ai/break_fire_alarms - name = "Override Thermal Sensors" - desc = "" - button_icon_state = "break_fire_alarms" - uses = 1 - -/datum/action/innate/ai/break_fire_alarms/Activate() - for(var/obj/machinery/firealarm/F in GLOB.machines) - if(!is_station_level(F.z)) - continue - F.obj_flags |= EMAGGED - F.update_icon() - to_chat(owner, "All thermal sensors on the station have been disabled. Fire alerts will no longer be recognized.") - owner.playsound_local(owner, 'sound/blank.ogg', 50, 0) - - -//Air Alarm Safety Override: Unlocks the ability to enable flooding on all air alarms. -/datum/AI_Module/large/break_air_alarms - module_name = "Air Alarm Safety Override" - mod_pick_name = "allow_flooding" - description = "Gives you the ability to disable safeties on all air alarms. This will allow you to use the environmental mode Flood, which disables scrubbers as well as pressure checks on vents. \ - Anyone can check the air alarm's interface and may be tipped off by their nonfunctionality." - one_purchase = TRUE - cost = 50 - power_type = /datum/action/innate/ai/break_air_alarms - unlock_text = "I remove the safety overrides on all air alarms, but you leave the confirm prompts open. You can hit 'Yes' at any time... you bastard." - unlock_sound = 'sound/blank.ogg' - -/datum/action/innate/ai/break_air_alarms - name = "Override Air Alarm Safeties" - desc = "" - button_icon_state = "break_air_alarms" - uses = 1 - -/datum/action/innate/ai/break_air_alarms/Activate() - for(var/obj/machinery/airalarm/AA in GLOB.machines) - if(!is_station_level(AA.z)) - continue - AA.obj_flags |= EMAGGED - to_chat(owner, "All air alarm safeties on the station have been overridden. Air alarms may now use the Flood environmental mode.") - owner.playsound_local(owner, 'sound/blank.ogg', 50, 0) - - -//Overload Machine: Allows the AI to overload a machine, detonating it after a delay. Two uses per purchase. -/datum/AI_Module/small/overload_machine - module_name = "Machine Overload" - mod_pick_name = "overload" - description = "Overheats an electrical machine, causing a small explosion and destroying it. Two uses per purchase." - cost = 20 - power_type = /datum/action/innate/ai/ranged/overload_machine - unlock_text = "I enable the ability for the station's APCs to direct intense energy into machinery." - unlock_sound = 'sound/blank.ogg' //definitely not comfy, but it's the closest sound to "roaring fire" we have - -/datum/action/innate/ai/ranged/overload_machine - name = "Overload Machine" - desc = "" - button_icon_state = "overload_machine" - uses = 2 - linked_ability_type = /obj/effect/proc_holder/ranged_ai/overload_machine - -/datum/action/innate/ai/ranged/overload_machine/New() - ..() - desc = "" - button.desc = desc - -/datum/action/innate/ai/ranged/overload_machine/proc/detonate_machine(obj/machinery/M) - if(M && !QDELETED(M)) - var/turf/T = get_turf(M) - message_admins("[ADMIN_LOOKUPFLW(usr)] overloaded [M.name] at [ADMIN_VERBOSEJMP(T)].") - log_game("[key_name(usr)] overloaded [M.name] at [AREACOORD(T)].") - explosion(get_turf(M), 0, 2, 3, 0) - if(M) //to check if the explosion killed it before we try to delete it - qdel(M) - -/obj/effect/proc_holder/ranged_ai/overload_machine - active = FALSE - ranged_mousepointer = 'icons/effects/overload_machine_target.dmi' - enable_text = "I tap into the station's powernet. Click on a machine to detonate it, or use the ability again to cancel." - disable_text = "I release your hold on the powernet." - -/obj/effect/proc_holder/ranged_ai/overload_machine/InterceptClickOn(mob/living/caller, params, obj/machinery/target) - if(..()) - return - if(ranged_ability_user.incapacitated()) - remove_ranged_ability() - return - if(!istype(target)) - to_chat(ranged_ability_user, "I can only overload machines!") - return - if(is_type_in_typecache(target, GLOB.blacklisted_malf_machines)) - to_chat(ranged_ability_user, "I cannot overload that device!") - return - ranged_ability_user.playsound_local(ranged_ability_user, "sparks", 50, 0) - attached_action.adjust_uses(-1) - if(attached_action && attached_action.uses) - attached_action.desc = "" - attached_action.UpdateButtonIcon() - target.audible_message("I hear a loud electrical buzzing sound coming from [target]!") - addtimer(CALLBACK(attached_action, TYPE_PROC_REF(/datum/action/innate/ai/ranged/overload_machine, detonate_machine), target), 50) //kaboom! - remove_ranged_ability("Overcharging machine...") - return TRUE - - -//Override Machine: Allows the AI to override a machine, animating it into an angry, living version of itself. -/datum/AI_Module/small/override_machine - module_name = "Machine Override" - mod_pick_name = "override" - description = "Overrides a machine's programming, causing it to rise up and attack everyone except other machines. Four uses." - cost = 30 - power_type = /datum/action/innate/ai/ranged/override_machine - unlock_text = "I procure a virus from the Space Dark Web and distribute it to the station's machines." - unlock_sound = 'sound/blank.ogg' - -/datum/action/innate/ai/ranged/override_machine - name = "Override Machine" - desc = "" - button_icon_state = "override_machine" - uses = 4 - linked_ability_type = /obj/effect/proc_holder/ranged_ai/override_machine - -/datum/action/innate/ai/ranged/override_machine/New() - ..() - desc = "" - button.desc = desc - -/datum/action/innate/ai/ranged/override_machine/proc/animate_machine(obj/machinery/M) - if(M && !QDELETED(M)) - new/mob/living/simple_animal/hostile/mimic/copy/machine(get_turf(M), M, owner, 1) - -/obj/effect/proc_holder/ranged_ai/override_machine - active = FALSE - ranged_mousepointer = 'icons/effects/override_machine_target.dmi' - enable_text = "I tap into the station's powernet. Click on a machine to animate it, or use the ability again to cancel." - disable_text = "I release your hold on the powernet." - -/obj/effect/proc_holder/ranged_ai/override_machine/InterceptClickOn(mob/living/caller, params, obj/machinery/target) - if(..()) - return - if(ranged_ability_user.incapacitated()) - remove_ranged_ability() - return - if(!istype(target)) - to_chat(ranged_ability_user, "I can only animate machines!") - return - if(!target.can_be_overridden() || is_type_in_typecache(target, GLOB.blacklisted_malf_machines)) - to_chat(ranged_ability_user, "That machine can't be overridden!") - return - ranged_ability_user.playsound_local(ranged_ability_user, 'sound/blank.ogg', 50, 0) - attached_action.adjust_uses(-1) - if(attached_action && attached_action.uses) - attached_action.desc = "" - attached_action.UpdateButtonIcon() - target.audible_message("I hear a loud electrical buzzing sound coming from [target]!") - addtimer(CALLBACK(attached_action, TYPE_PROC_REF(/datum/action/innate/ai/ranged/override_machine, animate_machine), target), 50) //kabeep! - remove_ranged_ability("Sending override signal...") - return TRUE - - -//Robotic Factory: Places a large machine that converts humans that go through it into cyborgs. Unlocking this ability removes shunting. -/datum/AI_Module/large/place_cyborg_transformer - module_name = "Robotic Factory (Removes Shunting)" - mod_pick_name = "cyborgtransformer" - description = "Build a machine anywhere, using expensive nanomachines, that can convert a living human into a loyal cyborg slave when placed inside." - cost = 100 - one_purchase = TRUE - power_type = /datum/action/innate/ai/place_transformer - unlock_text = "I make contact with Space Amazon and request a robotics factory for delivery." - unlock_sound = 'sound/blank.ogg' - -/datum/action/innate/ai/place_transformer - name = "Place Robotics Factory" - desc = "" - button_icon_state = "robotic_factory" - uses = 1 - auto_use_uses = FALSE //So we can attempt multiple times - var/list/turfOverlays - -/datum/action/innate/ai/place_transformer/New() - ..() - for(var/i in 1 to 3) - var/image/I = image("icon"='icons/turf/overlays.dmi') - LAZYADD(turfOverlays, I) - -/datum/action/innate/ai/place_transformer/Activate() - if(!owner_AI.can_place_transformer(src)) - return - active = TRUE - if(alert(owner, "Are you sure you want to place the machine here?", "Are you sure?", "Yes", "No") == "No") - active = FALSE - return - if(!owner_AI.can_place_transformer(src)) - active = FALSE - return - var/turf/T = get_turf(owner_AI.eyeobj) - var/obj/machinery/transformer/conveyor = new(T) - conveyor.masterAI = owner - playsound(T, 'sound/blank.ogg', 100, TRUE) - owner_AI.can_shunt = FALSE - to_chat(owner, "I are no longer able to shunt your core to APCs.") - adjust_uses(-1) - -/mob/living/silicon/ai/proc/remove_transformer_image(client/C, image/I, turf/T) - if(C && I.loc == T) - C.images -= I - -/mob/living/silicon/ai/proc/can_place_transformer(datum/action/innate/ai/place_transformer/action) - if(!eyeobj || !isturf(loc) || incapacitated() || !action) - return - var/turf/middle = get_turf(eyeobj) - var/list/turfs = list(middle, locate(middle.x - 1, middle.y, middle.z), locate(middle.x + 1, middle.y, middle.z)) - var/alert_msg = "There isn't enough room! Make sure you are placing the machine in a clear area and on a floor." - var/success = TRUE - for(var/n in 1 to 3) //We have to do this instead of iterating normally because of how overlay images are handled - var/turf/T = turfs[n] - if(!isfloorturf(T)) - success = FALSE - var/datum/camerachunk/C = GLOB.cameranet.getCameraChunk(T.x, T.y, T.z) - if(!C.visibleTurfs[T]) - alert_msg = "You don't have camera vision of this location!" - success = FALSE - for(var/atom/movable/AM in T.contents) - if(AM.density) - alert_msg = "That area must be clear of objects!" - success = FALSE - var/image/I = action.turfOverlays[n] - I.loc = T - client.images += I - I.icon_state = "[success ? "green" : "red"]Overlay" //greenOverlay and redOverlay for success and failure respectively - addtimer(CALLBACK(src, PROC_REF(remove_transformer_image), client, I, T), 30) - if(!success) - to_chat(src, "[alert_msg]") - return success - - -//Blackout: Overloads a random number of lights across the station. Three uses. -/datum/AI_Module/small/blackout - module_name = "Blackout" - mod_pick_name = "blackout" - description = "Attempts to overload the lighting circuits on the station, destroying some bulbs. Three uses." - cost = 15 - power_type = /datum/action/innate/ai/blackout - unlock_text = "I hook into the powernet and route bonus power towards the station's lighting." - unlock_sound = "sparks" - -/datum/action/innate/ai/blackout - name = "Blackout" - desc = "" - button_icon_state = "blackout" - uses = 3 - auto_use_uses = FALSE - -/datum/action/innate/ai/blackout/New() - ..() - desc = "" - button.desc = desc - -/datum/action/innate/ai/blackout/Activate() - for(var/obj/machinery/power/apc/apc in GLOB.apcs_list) - if(prob(30 * apc.overload)) - apc.overload_lighting() - else - apc.overload++ - to_chat(owner, "Overcurrent applied to the powernet.") - owner.playsound_local(owner, "sparks", 50, 0) - adjust_uses(-1) - if(src && uses) //Not sure if not having src here would cause a runtime, so it's here to be safe - desc = "" - UpdateButtonIcon() - - -//Disable Emergency Lights -/datum/AI_Module/small/emergency_lights - module_name = "Disable Emergency Lights" - mod_pick_name = "disable_emergency_lights" - description = "Cuts emergency lights across the entire station. If power is lost to light fixtures, they will not attempt to fall back on emergency power reserves." - cost = 10 - one_purchase = TRUE - power_type = /datum/action/innate/ai/emergency_lights - unlock_text = "I hook into the powernet and locate the connections between light fixtures and their fallbacks." - unlock_sound = "sparks" - -/datum/action/innate/ai/emergency_lights - name = "Disable Emergency Lights" - desc = "" - button_icon_state = "emergency_lights" - uses = 1 - -/datum/action/innate/ai/emergency_lights/Activate() - for(var/obj/machinery/light/L in GLOB.machines) - if(is_station_level(L.z)) - L.no_emergency = TRUE - INVOKE_ASYNC(L, TYPE_PROC_REF(/obj/machinery/light, update), FALSE) - CHECK_TICK - to_chat(owner, "Emergency light connections severed.") - owner.playsound_local(owner, 'sound/blank.ogg', 50, FALSE) - - -//Reactivate Camera Network: Reactivates up to 30 cameras across the station. -/datum/AI_Module/small/reactivate_cameras - module_name = "Reactivate Camera Network" - mod_pick_name = "recam" - description = "Runs a network-wide diagnostic on the camera network, resetting focus and re-routing power to failed cameras. Can be used to repair up to 30 cameras." - cost = 10 - one_purchase = TRUE - power_type = /datum/action/innate/ai/reactivate_cameras - unlock_text = "I deploy nanomachines to the cameranet." - unlock_sound = 'sound/blank.ogg' - -/datum/action/innate/ai/reactivate_cameras - name = "Reactivate Cameras" - desc = "" - button_icon_state = "reactivate_cameras" - uses = 30 - auto_use_uses = FALSE - cooldown_period = 30 - -/datum/action/innate/ai/reactivate_cameras/New() - ..() - desc = "" - button.desc = desc - -/datum/action/innate/ai/reactivate_cameras/Activate() - var/fixed_cameras = 0 - for(var/V in GLOB.cameranet.cameras) - if(!uses) - break - var/obj/machinery/camera/C = V - if(!C.status || C.view_range != initial(C.view_range)) - C.toggle_cam(owner_AI, 0) //Reactivates the camera based on status. Badly named proc. - C.view_range = initial(C.view_range) - fixed_cameras++ - uses-- //Not adjust_uses() so it doesn't automatically delete or show a message - to_chat(owner, "Diagnostic complete! Cameras reactivated: [fixed_cameras]. Reactivations remaining: [uses].") - owner.playsound_local(owner, 'sound/blank.ogg', 50, 0) - adjust_uses(0, TRUE) //Checks the uses remaining - if(src && uses) //Not sure if not having src here would cause a runtime, so it's here to be safe - desc = "" - UpdateButtonIcon() - -//Upgrade Camera Network: EMP-proofs all cameras, in addition to giving them X-ray vision. -/datum/AI_Module/large/upgrade_cameras - module_name = "Upgrade Camera Network" - mod_pick_name = "upgradecam" - description = "Install broad-spectrum scanning and electrical redundancy firmware to the camera network, enabling EMP-proofing and light-amplified X-ray vision." //I <3 pointless technobabble - //This used to have motion sensing as well, but testing quickly revealed that giving it to the whole cameranet is PURE HORROR. - one_purchase = TRUE - cost = 35 //Decent price for omniscience! - upgrade = TRUE - unlock_text = "OTA firmware distribution complete! Cameras upgraded: CAMSUPGRADED. Light amplification system online." - unlock_sound = 'sound/blank.ogg' - -/datum/AI_Module/large/upgrade_cameras/upgrade(mob/living/silicon/ai/AI) - AI.see_override = SEE_INVISIBLE_MINIMUM //Night-vision, without which X-ray would be very limited in power. - AI.update_sight() - - var/upgraded_cameras = 0 - for(var/V in GLOB.cameranet.cameras) - var/obj/machinery/camera/C = V - if(C.assembly) - var/upgraded = FALSE - - if(!C.isXRay()) - C.upgradeXRay(TRUE) //if this is removed you can get rid of camera_assembly/var/malf_xray_firmware_active and clean up isxray() - //Update what it can see. - GLOB.cameranet.updateVisibility(C, 0) - upgraded = TRUE - - if(!C.isEmpProof()) - C.upgradeEmpProof(TRUE) //if this is removed you can get rid of camera_assembly/var/malf_emp_firmware_active and clean up isemp() - upgraded = TRUE - - if(upgraded) - upgraded_cameras++ - - unlock_text = replacetext(unlock_text, "CAMSUPGRADED", "[upgraded_cameras]") //This works, since unlock text is called after upgrade() - -/datum/AI_Module/large/eavesdrop - module_name = "Enhanced Surveillance" - mod_pick_name = "eavesdrop" - description = "Via a combination of hidden microphones and lip reading software, you are able to use your cameras to listen in on conversations." - cost = 30 - one_purchase = TRUE - upgrade = TRUE - unlock_text = "OTA firmware distribution complete! Cameras upgraded: Enhanced surveillance package online." - unlock_sound = 'sound/blank.ogg' - -/datum/AI_Module/large/eavesdrop/upgrade(mob/living/silicon/ai/AI) - if(AI.eyeobj) - AI.eyeobj.relay_speech = TRUE - -#undef DEFAULT_DOOMSDAY_TIMER -#undef DOOMSDAY_ANNOUNCE_INTERVAL diff --git a/code/modules/antagonists/traitor/equipment/contractor.dm b/code/modules/antagonists/traitor/equipment/contractor.dm deleted file mode 100644 index f45d4493ed..0000000000 --- a/code/modules/antagonists/traitor/equipment/contractor.dm +++ /dev/null @@ -1,287 +0,0 @@ -/// Support unit gets it's own very basic antag datum for admin logging. -/datum/antagonist/traitor/contractor_support - name = "Contractor Support Unit" - antag_moodlet = /datum/mood_event/focused - - show_in_roundend = FALSE /// We're already adding them in to the contractor's roundend. - give_objectives = TRUE /// We give them their own custom objective. - show_in_antagpanel = FALSE /// Not a proper/full antag. - should_equip = FALSE /// Don't give them an uplink. - - var/datum/team/contractor_team/contractor_team - -/// Team for storing both the contractor and their support unit - only really for the HUD and admin logging. -/datum/team/contractor_team - show_roundend_report = FALSE - -/datum/antagonist/traitor/contractor_support/forge_traitor_objectives() - var/datum/objective/generic_objective = new - - generic_objective.name = "Follow Contractor's Orders" - generic_objective.explanation_text = "Follow my orders. Assist agents in this mission area." - - generic_objective.completed = TRUE - - add_objective(generic_objective) - -/datum/contractor_hub - var/contract_rep = 0 - var/list/hub_items = list() - var/list/purchased_items = list() - var/static/list/contractor_items = typecacheof(/datum/contractor_item/, TRUE) - - var/datum/syndicate_contract/current_contract - var/list/datum/syndicate_contract/assigned_contracts = list() - - var/list/assigned_targets = list() // used as a blacklist to make sure we're not assigning targets already assigned - - var/contract_TC_payed_out = 0 // Keeping track for roundend reporting - var/contract_TC_to_redeem = 0 // Used internally and roundend reporting - what TC we have available to cashout. - -/datum/contractor_hub/proc/create_hub_items() - for(var/path in contractor_items) - var/datum/contractor_item/contractor_item = new path - - hub_items.Add(contractor_item) - -/datum/contractor_hub/proc/create_contracts(datum/mind/owner) - - // 6 initial contracts - var/list/to_generate = list( - CONTRACT_PAYOUT_LARGE, - CONTRACT_PAYOUT_MEDIUM, - CONTRACT_PAYOUT_SMALL, - CONTRACT_PAYOUT_SMALL, - CONTRACT_PAYOUT_SMALL, - CONTRACT_PAYOUT_SMALL - ) - - // We don't want the sum of all the payouts to be under this amount - var/lowest_TC_threshold = 30 - - var/total = 0 - var/lowest_paying_sum = 0 - var/datum/syndicate_contract/lowest_paying_contract - - // Randomise order, so we don't have contracts always in payout order. - to_generate = shuffle(to_generate) - - // Support contract generation happening multiple times - var/start_index = 1 - if (assigned_contracts.len != 0) - start_index = assigned_contracts.len + 1 - - // Generate contracts, and find the lowest paying. - for (var/i = 1; i <= to_generate.len; i++) - var/datum/syndicate_contract/contract_to_add = new(owner, assigned_targets, to_generate[i]) - var/contract_payout_total = contract_to_add.contract.payout + contract_to_add.contract.payout_bonus - - assigned_targets.Add(contract_to_add.contract.target) - - if (!lowest_paying_contract || (contract_payout_total < lowest_paying_sum)) - lowest_paying_sum = contract_payout_total - lowest_paying_contract = contract_to_add - - total += contract_payout_total - contract_to_add.id = start_index - assigned_contracts.Add(contract_to_add) - - start_index++ - - // If the threshold for TC payouts isn't reached, boost the lowest paying contract - if (total < lowest_TC_threshold) - lowest_paying_contract.contract.payout_bonus += (lowest_TC_threshold - total) - -/datum/contractor_item - var/name // Name of item - var/desc // description of item - var/item // item path, no item path means the purchase needs it's own handle_purchase() - var/item_icon = "fa-broadcast-tower" // fontawesome icon to use inside the hub - https://fontawesome.com/icons/ - var/limited = -1 // Any number above 0 for how many times it can be bought in a round for a single traitor. -1 is unlimited. - var/cost // Cost of the item in contract rep. - -/datum/contractor_item/contract_reroll - name = "Contract Reroll" - desc = "" - item_icon = "fa-dice" - limited = 2 - cost = 0 - -/datum/contractor_item/contract_reroll/handle_purchase(datum/contractor_hub/hub) - . = ..() - - if (.) - /// We're not regenerating already completed/aborted/extracting contracts, but we don't want to repeat their targets. - var/list/new_target_list = list() - for(var/datum/syndicate_contract/contract_check in hub.assigned_contracts) - if (contract_check.status != CONTRACT_STATUS_ACTIVE && contract_check.status != CONTRACT_STATUS_INACTIVE) - if (contract_check.contract.target) - new_target_list.Add(contract_check.contract.target) - continue - - /// Reroll contracts without duplicates - for(var/datum/syndicate_contract/rerolling_contract in hub.assigned_contracts) - if (rerolling_contract.status != CONTRACT_STATUS_ACTIVE && rerolling_contract.status != CONTRACT_STATUS_INACTIVE) - continue - - rerolling_contract.generate(new_target_list) - new_target_list.Add(rerolling_contract.contract.target) - - /// Set our target list with the new set we've generated. - hub.assigned_targets = new_target_list - -/datum/contractor_item/contractor_pinpointer - name = "Contractor Pinpointer" - desc = "" - item = /obj/item/pinpointer/crew/contractor - item_icon = "fa-search-location" - limited = 2 - cost = 1 - -/datum/contractor_item/fulton_extraction_kit - name = "Fulton Extraction Kit" - desc = "" - item = /obj/item/storage/box/contractor/fulton_extraction - item_icon = "fa-parachute-box" - limited = 1 - cost = 1 - -/datum/contractor_item/contractor_partner - name = "Reinforcements" - desc = "" - item_icon = "fa-user-friends" - limited = 1 - cost = 2 - var/datum/mind/partner_mind = null - -/datum/contractor_item/contractor_partner/handle_purchase(datum/contractor_hub/hub, mob/living/user) - . = ..() - - if (.) - to_chat(user, "The uplink vibrates quietly, connecting to nearby agents...") - - var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as the Contractor Support Unit for [user.real_name]?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_CONTRACTOR_SUPPORT) - - if(LAZYLEN(candidates)) - var/mob/dead/observer/C = pick(candidates) - spawn_contractor_partner(user, C.key) - else - to_chat(user, "No available agents at this time, please try again later.") - - // refund and add the limit back. - limited += 1 - hub.contract_rep += cost - hub.purchased_items -= src - -/datum/outfit/contractor_partner - name = "Contractor Support Unit" - - uniform = /obj/item/clothing/under/chameleon - suit = /obj/item/clothing/suit/chameleon - back = /obj/item/storage/backpack - belt = /obj/item/pda/chameleon - mask = /obj/item/clothing/mask/cigarette/syndicate - shoes = /obj/item/clothing/shoes/chameleon/noslip - ears = /obj/item/radio/headset/chameleon - id = /obj/item/card/id/syndicate - r_hand = /obj/item/storage/toolbox/syndicate - - backpack_contents = list(/obj/item/storage/box/survival, /obj/item/implanter/uplink, /obj/item/clothing/mask/chameleon, - /obj/item/storage/fancy/cigarettes/cigpack_syndicate, /obj/item/lighter) - -/datum/outfit/contractor_partner/post_equip(mob/living/carbon/human/H, visualsOnly) - . = ..() - var/obj/item/clothing/mask/cigarette/syndicate/cig = H.get_item_by_slot(SLOT_WEAR_MASK) - - // pre-light their cig - cig.light() - -/datum/contractor_item/contractor_partner/proc/spawn_contractor_partner(mob/living/user, key) - var/mob/living/carbon/human/partner = new() - var/datum/outfit/contractor_partner/partner_outfit = new() - - partner_outfit.equip(partner) - - var/obj/structure/closet/supplypod/arrival_pod = new() - - arrival_pod.style = STYLE_SYNDICATE - arrival_pod.explosionSize = list(0,0,0,1) - arrival_pod.bluespace = TRUE - - var/turf/free_location = find_obstruction_free_location(2, user) - - // We really want to send them - if we can't find a nice location just land it on top of them. - if (!free_location) - free_location = get_turf(user) - - partner.forceMove(arrival_pod) - partner.ckey = key - - /// We give a reference to the mind that'll be the support unit - partner_mind = partner.mind - partner_mind.make_Contractor_Support() - - to_chat(partner_mind.current, "\n[user.real_name] is my superior. Follow any, and all orders given by them. You're here to support their mission only.") - to_chat(partner_mind.current, "Should they perish, or be otherwise unavailable, you're to assist other active agents in this mission area to the best of my ability.\n\n") - - new /obj/effect/DPtarget(free_location, arrival_pod) - -/datum/contractor_item/blackout - name = "Blackout" - desc = "" - item_icon = "fa-bolt" - limited = 2 - cost = 3 - -/datum/contractor_item/blackout/handle_purchase(datum/contractor_hub/hub) - . = ..() - - if (.) - power_fail(35, 50) - priority_announce("Abnormal activity detected in [station_name()]") - -// Subtract cost, and spawn if it's an item. -/datum/contractor_item/proc/handle_purchase(datum/contractor_hub/hub, mob/living/user) - - if (hub.contract_rep >= cost) - hub.contract_rep -= cost - else - return FALSE - - if (limited >= 1) - limited -= 1 - else if (limited == 0) - return FALSE - - hub.purchased_items.Add(src) - - user.playsound_local(user, 'sound/blank.ogg', 100) - - if (item && ispath(item)) - var/atom/item_to_create = new item(get_turf(user)) - - if(user.put_in_hands(item_to_create)) - to_chat(user, "My purchase materializes into my hands!") - else - to_chat(user, "My purchase materializes onto the floor.") - - return item_to_create - return TRUE - -/obj/item/pinpointer/crew/contractor - name = "contractor pinpointer" - desc = "" - icon_state = "pinpointer_syndicate" - minimum_range = 25 - has_owner = TRUE - ignore_suit_sensor_level = TRUE - -/obj/item/storage/box/contractor/fulton_extraction - name = "Fulton Extraction Kit" - icon_state = "syndiebox" - illustration = "writing_syndie" - -/obj/item/storage/box/contractor/fulton_extraction/PopulateContents() - new /obj/item/extraction_pack(src) - new /obj/item/fulton_core(src) - diff --git a/code/modules/antagonists/traitor/syndicate_contract.dm b/code/modules/antagonists/traitor/syndicate_contract.dm deleted file mode 100644 index ea84635835..0000000000 --- a/code/modules/antagonists/traitor/syndicate_contract.dm +++ /dev/null @@ -1,225 +0,0 @@ -/datum/syndicate_contract - var/id = 0 - var/status = CONTRACT_STATUS_INACTIVE - var/datum/objective/contract/contract = new() - var/target_rank - var/ransom = 0 - var/payout_type = null - - var/list/victim_belongings = list() - -/datum/syndicate_contract/New(contract_owner, blacklist, type=CONTRACT_PAYOUT_SMALL) - contract.owner = contract_owner - payout_type = type - - generate(blacklist) - -/datum/syndicate_contract/proc/generate(blacklist) - contract.find_target(null, blacklist) - - var/datum/data/record/record = find_record("name", contract.target.name, GLOB.data_core.general) - if (record) - target_rank = record.fields["rank"] - else - target_rank = "Unknown" - - if (payout_type == CONTRACT_PAYOUT_LARGE) - contract.payout_bonus = rand(9,13) - else if (payout_type == CONTRACT_PAYOUT_MEDIUM) - contract.payout_bonus = rand(6,8) - else - contract.payout_bonus = rand(2,4) - - contract.payout = rand(0, 2) - contract.generate_dropoff() - - ransom = 100 * rand(18, 45) - -/datum/syndicate_contract/proc/handle_extraction(mob/living/user) - if (contract.target && contract.dropoff_check(user, contract.target.current)) - - var/turf/free_location = find_obstruction_free_location(3, user, contract.dropoff) - - if (free_location) - // We've got a valid location, launch. - launch_extraction_pod(free_location) - return TRUE - - return FALSE - -// Launch the pod to collect our victim. -/datum/syndicate_contract/proc/launch_extraction_pod(turf/empty_pod_turf) - var/obj/structure/closet/supplypod/extractionpod/empty_pod = new() - - RegisterSignal(empty_pod, COMSIG_ATOM_ENTERED, PROC_REF(enter_check)) - - empty_pod.stay_after_drop = TRUE - empty_pod.reversing = TRUE - empty_pod.explosionSize = list(0,0,0,1) - empty_pod.leavingSound = 'sound/blank.ogg' - - new /obj/effect/DPtarget(empty_pod_turf, empty_pod) - -/datum/syndicate_contract/proc/enter_check(datum/source, sent_mob) - if (istype(source, /obj/structure/closet/supplypod/extractionpod)) - if (isliving(sent_mob)) - var/mob/living/M = sent_mob - var/datum/antagonist/traitor/traitor_data = contract.owner.has_antag_datum(/datum/antagonist/traitor) - - if (M == contract.target.current) - traitor_data.contractor_hub.contract_TC_to_redeem += contract.payout - - if (M.stat != DEAD) - traitor_data.contractor_hub.contract_TC_to_redeem += contract.payout_bonus - - status = CONTRACT_STATUS_COMPLETE - - if (traitor_data.contractor_hub.current_contract == src) - traitor_data.contractor_hub.current_contract = null - - traitor_data.contractor_hub.contract_rep += 2 - else - status = CONTRACT_STATUS_ABORTED // Sending a target that wasn't even yours is as good as just aborting it - - if (traitor_data.contractor_hub.current_contract == src) - traitor_data.contractor_hub.current_contract = null - - if (iscarbon(M)) - for(var/obj/item/W in M) - if (ishuman(M)) - var/mob/living/carbon/human/H = M - if(W == H.wear_pants) - continue //So all they're left with are shoes and uniform. - if(W == H.shoes) - continue - - - M.transferItemToLoc(W) - victim_belongings.Add(W) - - var/obj/structure/closet/supplypod/extractionpod/pod = source - - // Handle the pod returning - pod.send_up(pod) - - if (ishuman(M)) - var/mob/living/carbon/human/target = M - - // After we remove items, at least give them what they need to live. - target.dna.species.give_important_for_life(target) - - // After pod is sent we start the victim narrative/heal. - handleVictimExperience(M) - - // This is slightly delayed because of the sleep calls above to handle the narrative. - // We don't want to tell the station instantly. - var/points_to_check - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) - if(D) - points_to_check = D.account_balance - if(points_to_check >= ransom) - D.adjust_money(-ransom) - else - D.adjust_money(-points_to_check) - - priority_announce("") - - sleep(30) - - // Pay contractor their portion of ransom - if (status == CONTRACT_STATUS_COMPLETE) - var/mob/living/carbon/human/H - var/obj/item/card/id/C - if(ishuman(contract.owner.current)) - H = contract.owner.current - C = H.get_idcard(TRUE) - - if(C && C.registered_account) - C.registered_account.adjust_money(ransom * 0.35) - - C.registered_account.bank_card_talk("We've processed the ransom, agent. Here's my cut - my balance is now \ - $[C.registered_account.account_balance].", TRUE) - -// They're off to holding - handle the return timer and give some text about what's going on. -/datum/syndicate_contract/proc/handleVictimExperience(mob/living/M) - // Ship 'em back - dead or alive, 4 minutes wait. - // Even if they weren't the target, we're still treating them the same. - addtimer(CALLBACK(src, PROC_REF(returnVictim), M), (60 * 10) * 4) - - if (M.stat != DEAD) - // Heal them up - gets them out of crit/soft crit. If omnizine is removed in the future, this needs to be replaced with a - // method of healing them, consequence free, to a reasonable amount of health. - M.reagents.add_reagent(/datum/reagent/medicine/omnizine, 20) - - M.flash_act() - M.confused += 10 - M.blur_eyes(5) - to_chat(M, "I feel strange...") - sleep(60) - to_chat(M, "That pod did something to you...") - M.Dizzy(35) - sleep(65) - to_chat(M, "My head pounds... It feels like it's going to burst out my skull!") - M.flash_act() - M.confused += 20 - M.blur_eyes(3) - sleep(30) - to_chat(M, "My head pounds...") - sleep(100) - M.flash_act() - M.Unconscious(200) - to_chat(M, "A million voices echo in my head... \"Your mind held many valuable secrets - \ - we thank you for providing them. Your value is expended, and you will be ransomed back to my station. We always get paid, \ - so it's only a matter of time before we ship you back...\"") - M.blur_eyes(10) - M.Dizzy(15) - M.confused += 20 - -// We're returning the victim -/datum/syndicate_contract/proc/returnVictim(mob/living/M) - var/list/possible_drop_loc = list() - - for (var/turf/possible_drop in contract.dropoff.contents) - if (!isspaceturf(possible_drop) && !isclosedturf(possible_drop)) - if (!is_blocked_turf(possible_drop)) - possible_drop_loc.Add(possible_drop) - - if (possible_drop_loc.len > 0) - var/pod_rand_loc = rand(1, possible_drop_loc.len) - - var/obj/structure/closet/supplypod/return_pod = new() - return_pod.bluespace = TRUE - return_pod.explosionSize = list(0,0,0,0) - return_pod.style = STYLE_SYNDICATE - - do_sparks(8, FALSE, M) - M.visible_message("[M] vanishes...") - - for(var/obj/item/W in M) - if (ishuman(M)) - var/mob/living/carbon/human/H = M - if(W == H.wear_pants) - continue //So all they're left with are shoes and uniform. - if(W == H.shoes) - continue - M.dropItemToGround(W) - - for(var/obj/item/W in victim_belongings) - W.forceMove(return_pod) - - M.forceMove(return_pod) - - M.flash_act() - M.blur_eyes(30) - M.Dizzy(35) - M.confused += 20 - - new /obj/effect/DPtarget(possible_drop_loc[pod_rand_loc], return_pod) - else - to_chat(M, "A million voices echo in my head... \"Seems where you got sent here from won't \ - be able to handle our pod... You will die here instead.\"") - if (iscarbon(M)) - var/mob/living/carbon/C = M - if (C.can_heartattack()) - C.set_heartattack(TRUE) - diff --git a/code/modules/antagonists/wishgranter/wishgranter.dm b/code/modules/antagonists/wishgranter/wishgranter.dm index cb3c649209..07bcec34a6 100644 --- a/code/modules/antagonists/wishgranter/wishgranter.dm +++ b/code/modules/antagonists/wishgranter/wishgranter.dm @@ -4,14 +4,8 @@ show_name_in_check_antagonists = TRUE can_hijack = HIJACK_HIJACKER -/datum/antagonist/wishgranter/proc/forge_objectives() - var/datum/objective/hijack/hijack = new - hijack.owner = owner - objectives += hijack - /datum/antagonist/wishgranter/on_gain() owner.special_role = "Avatar of the Wish Granter" - forge_objectives() . = ..() give_powers() diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm index 47b61cedbe..dab49ddca6 100644 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -1,148 +1,5 @@ //Apprenticeship contract - moved to antag_spawner.dm - -///////////////////////////Veil Render////////////////////// - -/obj/item/veilrender - name = "veil render" - desc = "" - icon = 'icons/obj/wizard.dmi' - icon_state = "render" - item_state = "knife" - lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' - force = 15 - throwforce = 10 - w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/blank.ogg' - var/charges = 1 - var/spawn_type = /obj/singularity/wizard - var/spawn_amt = 1 - var/activate_descriptor = "reality" - var/rend_desc = "" - var/spawn_fast = 0 //if 1, ignores checking for mobs on loc before spawning - -/obj/item/veilrender/attack_self(mob/user) - if(charges > 0) - new /obj/effect/rend(get_turf(user), spawn_type, spawn_amt, rend_desc, spawn_fast) - charges-- - user.visible_message("[src] hums with power as [user] deals a blow to [activate_descriptor] itself!") - else - to_chat(user, "The unearthly energies that powered the blade are now dormant.") - -/obj/effect/rend - name = "tear in the fabric of reality" - desc = "" - icon = 'icons/effects/effects.dmi' - icon_state = "rift" - density = TRUE - anchored = TRUE - var/spawn_path = /mob/living/simple_animal/cow //defaulty cows to prevent unintentional narsies - var/spawn_amt_left = 20 - var/spawn_fast = 0 - -/obj/effect/rend/New(loc, spawn_type, spawn_amt, desc, spawn_fast) - src.spawn_path = spawn_type - src.spawn_amt_left = spawn_amt - src.desc = desc - src.spawn_fast = spawn_fast - START_PROCESSING(SSobj, src) - return - -/obj/effect/rend/process() - if(!spawn_fast) - if(locate(/mob) in loc) - return - new spawn_path(loc) - spawn_amt_left-- - if(spawn_amt_left <= 0) - qdel(src) - -/obj/effect/rend/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/nullrod)) - user.visible_message("[user] seals \the [src] with \the [I].") - qdel(src) - return - else - return ..() - -/obj/effect/rend/singularity_pull() - return - -/obj/effect/rend/singularity_pull() - return - -/obj/item/veilrender/vealrender - name = "veal render" - desc = "" - spawn_type = /mob/living/simple_animal/cow - spawn_amt = 20 - activate_descriptor = "hunger" - rend_desc = "" - -/obj/item/veilrender/honkrender - name = "honk render" - desc = "" - spawn_type = /mob/living/simple_animal/hostile/retaliate/clown - spawn_amt = 10 - activate_descriptor = "depression" - rend_desc = "" - icon_state = "clownrender" - -/obj/item/veilrender/honkrender/honkhulkrender - name = "superior honk render" - desc = "" - spawn_type = /mob/living/simple_animal/hostile/retaliate/clown/clownhulk - spawn_amt = 5 - activate_descriptor = "depression" - rend_desc = "" - icon_state = "clownrender" - -////TEAR IN REALITY - -/obj/singularity/wizard - name = "tear in the fabric of reality" - desc = "" - icon = 'icons/effects/224x224.dmi' - icon_state = "reality" - pixel_x = -96 - pixel_y = -96 - dissipate = 0 - move_self = 0 - consume_range = 3 - grav_pull = 4 - current_size = STAGE_FOUR - allowed_size = STAGE_FOUR - -/obj/singularity/wizard/process() - move() - eat() - return - -/obj/singularity/wizard/attack_tk(mob/user) - if(iscarbon(user)) - var/mob/living/carbon/C = user - var/datum/component/mood/insaneinthemembrane = C.GetComponent(/datum/component/mood) - if(insaneinthemembrane.sanity < 15) - return //they've already seen it and are about to die, or are just too insane to care - to_chat(C, "OH GOD! NONE OF IT IS REAL! NONE OF IT IS REEEEEEEEEEEEEEEEEEEEEEEEAL!") - insaneinthemembrane.sanity = 0 - for(var/lore in typesof(/datum/brain_trauma/severe)) - C.gain_trauma(lore) - addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/singularity/wizard, deranged), C), 100) - -/obj/singularity/wizard/proc/deranged(mob/living/carbon/C) - if(!C || C.stat == DEAD) - return - C.vomit(0, TRUE, TRUE, 3, TRUE) - C.spew_organ(3, 2) - C.death() - -/obj/singularity/wizard/mapped/admin_investigate_setup() - return - - - /////////////////////////////////////////Necromantic Stone/////////////////// /obj/item/necromantic_stone @@ -219,7 +76,6 @@ H.equip_to_slot_or_del(new hat(H), SLOT_HEAD) H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/roman(H), SLOT_PANTS) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), SLOT_SHOES) - H.put_in_hands(new /obj/item/shield/riot/roman(H), TRUE) H.put_in_hands(new /obj/item/claymore(H), TRUE) H.equip_to_slot_or_del(new /obj/item/twohanded/spear(H), SLOT_BACK) diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index 5b9ad10309..85107a559e 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -40,12 +40,12 @@ /obj/item/soulstone/pickup(mob/living/user) ..() - if(!iscultist(user) && !iswizard(user) && !usability) + if(!iswizard(user) && !usability) to_chat(user, "An overwhelming feeling of dread comes over you as you pick up the soulstone. It would be wise to be rid of this quickly.") /obj/item/soulstone/examine(mob/user) . = ..() - if(usability || iscultist(user) || iswizard(user) || isobserver(user)) + if(usability || iswizard(user) || isobserver(user)) if (old_shard) . += "A soulstone, used to capture a soul, either from dead humans or from freed shades." else @@ -70,7 +70,7 @@ //////////////////////////////Capturing//////////////////////////////////////////////////////// /obj/item/soulstone/attack(mob/living/carbon/human/M, mob/living/user) - if(!iscultist(user) && !iswizard(user) && !usability) + if(!iswizard(user) && !usability) user.Unconscious(100) to_chat(user, "My body is wracked with debilitating pain!") return @@ -82,13 +82,6 @@ if(!M.mind.hasSoul || is_devil(M)) to_chat(user, "This... thing has no soul! It's filled with evil!") return - if(iscultist(M)) - if(iscultist(user)) - to_chat(user, "\"Come now, do not capture my bretheren's soul.\"") - return - if(purified && iscultist(user)) - hot_potato(user) - return log_combat(user, M, "captured [M.name]'s soul", src) transfer_soul("VICTIM", M, user) @@ -97,13 +90,10 @@ /obj/item/soulstone/attack_self(mob/living/user) if(!in_range(src, user)) return - if(!iscultist(user) && !iswizard(user) && !usability) + if(!iswizard(user) && !usability) user.Unconscious(100) to_chat(user, "My body is wracked with debilitating pain!") return - if(purified && iscultist(user)) - hot_potato(user) - return release_shades(user) /obj/item/soulstone/proc/release_shades(mob/user) @@ -119,8 +109,6 @@ name = initial(name) if(iswizard(user) || usability) to_chat(A, "I have been released from my prison, but you are still bound to [user.real_name]'s will. Help [user.p_them()] succeed in [user.p_their()] goals at all costs.") - else if(iscultist(user)) - to_chat(A, "I have been released from my prison, but you are still bound to the cult's will. Help them succeed in their goals at all costs.") was_used() ///////////////////////////Transferring to constructs///////////////////////////////////////////////////// @@ -132,7 +120,7 @@ /obj/structure/constructshell/examine(mob/user) . = ..() - if(iscultist(user) || iswizard(user) || user.stat == DEAD) + if(iswizard(user) || user.stat == DEAD) . += {"A construct shell, used to house bound souls from a soulstone.\n Placing a soulstone with a soul into this shell allows you to produce my choice of the following:\n An Artificer, which can produce more shells and soulstones, as well as fortifications.\n @@ -142,13 +130,10 @@ /obj/structure/constructshell/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/soulstone)) var/obj/item/soulstone/SS = O - if(!iscultist(user) && !iswizard(user) && !SS.purified) + if(!iswizard(user) && !SS.purified) to_chat(user, "An overwhelming feeling of dread comes over you as you attempt to place the soulstone into the shell. It would be wise to be rid of this quickly.") user.Dizzy(30) return - if(SS.purified && iscultist(user)) - SS.hot_potato(user) - return SS.transfer_soul("CONSTRUCT",src,user) SS.was_used() else @@ -176,13 +161,6 @@ if("VICTIM") var/mob/living/carbon/human/T = target - var/datum/antagonist/cult/C = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(C && C.cult_team.is_sacrifice_target(T.mind)) - if(iscultist(user)) - to_chat(user, "\"This soul is mine. SACRIFICE THEM!\"") - else - to_chat(user, "The soulstone seems to reject this soul.") - return FALSE if(contents.len) to_chat(user, "Capture failed!: The soulstone is full! Free an existing soul to make room.") else @@ -206,8 +184,6 @@ T.AddComponent(/datum/component/soulstoned, src) if(purified) icon_state = "purified_soulstone2" - if(iscultist(T)) - SSticker.mode.remove_cultist(T.mind, FALSE, FALSE) else icon_state = "soulstone2" name = "soulstone: Shade of [T.real_name]" @@ -224,7 +200,7 @@ return switch(construct_class) if("Juggernaut") - if(iscultist(user) || iswizard(user)) + if(iswizard(user)) makeNewConstruct(/mob/living/simple_animal/hostile/construct/armored, A, user, 0, T.loc) else if(purified) @@ -232,7 +208,7 @@ else makeNewConstruct(/mob/living/simple_animal/hostile/construct/armored/noncult, A, user, 0, T.loc) if("Wraith") - if(iscultist(user) || iswizard(user)) + if(iswizard(user)) makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith, A, user, 0, T.loc) else if(purified) @@ -240,16 +216,13 @@ else makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith/noncult, A, user, 0, T.loc) if("Artificer") - if(iscultist(user) || iswizard(user)) + if(iswizard(user)) makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder, A, user, 0, T.loc) else if(purified) makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder/angelic, A, user, 0, T.loc) else makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder/noncult, A, user, 0, T.loc) - for(var/datum/mind/B in SSticker.mode.cult) - if(B == A.mind) - SSticker.mode.remove_cultist(A.mind) qdel(T) qdel(src) else @@ -266,17 +239,8 @@ var/datum/action/innate/seek_master/SM = new() SM.Grant(newstruct) newstruct.key = target.key - var/atom/movable/screen/alert/bloodsense/BS - if(newstruct.mind && ((stoner && iscultist(stoner)) || cultoverride) && SSticker && SSticker.mode) - SSticker.mode.add_cultist(newstruct.mind, 0) - if(iscultist(stoner) || cultoverride) - to_chat(newstruct, "I are still bound to serve the cult[stoner ? " and [stoner]":""], follow [stoner ? stoner.p_their() : "their"] orders and help [stoner ? stoner.p_them() : "them"] complete [stoner ? stoner.p_their() : "their"] goals at all costs.") - else if(stoner) + if(stoner) to_chat(newstruct, "I are still bound to serve my creator, [stoner], follow [stoner.p_their()] orders and help [stoner.p_them()] complete [stoner.p_their()] goals at all costs.") - newstruct.clear_alert("bloodsense") - BS = newstruct.throw_alert("bloodsense", /atom/movable/screen/alert/bloodsense) - if(BS) - BS.Cviewer = newstruct newstruct.cancel_camera() @@ -295,8 +259,6 @@ S.language_holder = user.language_holder.copy(S) if(user) S.faction |= "[REF(user)]" //Add the master as a faction, allowing inter-mob cooperation - if(user && iscultist(user)) - SSticker.mode.add_cultist(S.mind, 0) S.cancel_camera() name = "soulstone: Shade of [T.real_name]" if(purified) @@ -305,7 +267,7 @@ icon_state = "soulstone2" if(user && (iswizard(user) || usability)) to_chat(S, "Your soul has been captured! You are now bound to [user.real_name]'s will. Help [user.p_them()] succeed in [user.p_their()] goals at all costs.") - else if(user && iscultist(user)) + else if(user) to_chat(S, "Your soul has been captured! You are now bound to the cult's will. Help them succeed in their goals at all costs.") if(message_user && user) to_chat(user, "Capture successful!: [T.real_name]'s soul has been ripped from [T.p_their()] body and stored within the soul stone.") diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm index 6034cd6c81..4a5b5a33f1 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook.dm @@ -110,10 +110,6 @@ name = "Spell Cards" spell_type = /obj/effect/proc_holder/spell/aimed/spell_cards -/datum/spellbook_entry/rod_form - name = "Rod Form" - spell_type = /obj/effect/proc_holder/spell/targeted/rod_form - /datum/spellbook_entry/magicm name = "Magic Missile" spell_type = /obj/effect/proc_holder/spell/targeted/projectile/magic_missile @@ -210,11 +206,6 @@ name = "Tesla Blast" spell_type = /obj/effect/proc_holder/spell/targeted/tesla -/datum/spellbook_entry/lightningbolt - name = "Lightning Bolt" - spell_type = /obj/effect/proc_holder/spell/aimed/lightningbolt - cost = 3 - /datum/spellbook_entry/lightningbolt/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) //return TRUE on success . = ..() user.flags_1 |= TESLA_IGNORE_1 @@ -239,11 +230,6 @@ name = "Barnyard Curse" spell_type = /obj/effect/proc_holder/spell/targeted/barnyardcurse -/datum/spellbook_entry/charge - name = "Charge" - spell_type = /obj/effect/proc_holder/spell/targeted/charge - category = "Assistance" - cost = 1 /datum/spellbook_entry/shapeshift name = "Wild Shapeshift" @@ -312,13 +298,6 @@ desc = "" item_path = /obj/item/gun/magic/staff/spellblade -/datum/spellbook_entry/item/staffdoor - name = "Staff of Door Creation" - desc = "" - item_path = /obj/item/gun/magic/staff/door - cost = 1 - category = "Mobility" - /datum/spellbook_entry/item/staffhealing name = "Staff of Healing" desc = "" @@ -362,12 +341,6 @@ item_path = /obj/item/storage/belt/wands/full category = "Defensive" -/datum/spellbook_entry/item/armor - name = "Mastercrafted Armor Set" - desc = "" - item_path = /obj/item/clothing/suit/space/hardsuit/wizard - category = "Defensive" - /datum/spellbook_entry/item/armor/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) . = ..() if(.) @@ -392,27 +365,6 @@ if(.) new /obj/item/paper/guides/antag/guardian/wizard(get_turf(user)) -/datum/spellbook_entry/item/bloodbottle - name = "Bottle of Blood" - desc = "" - item_path = /obj/item/antag_spawner/slaughter_demon - limit = 3 - category = "Assistance" - -/datum/spellbook_entry/item/hugbottle - name = "Bottle of Tickles" - desc = "A bottle of magically infused fun, the smell of which will \ - attract adorable extradimensional beings when broken. These beings \ - are similar to slaughter demons, but they do not permamently kill \ - their victims, instead putting them in an extradimensional hugspace, \ - to be released on the demon's death. Chaotic, but not ultimately \ - damaging. The crew's reaction to the other hand could be very \ - destructive." - item_path = /obj/item/antag_spawner/slaughter_demon/laughter - cost = 1 //non-destructive; it's just a jape, sibling! - limit = 3 - category = "Assistance" - /datum/spellbook_entry/item/mjolnir name = "Mjolnir" desc = "" @@ -423,20 +375,6 @@ desc = "" item_path = /obj/item/twohanded/singularityhammer -/datum/spellbook_entry/item/battlemage - name = "Battlemage Armour" - desc = "" - item_path = /obj/item/clothing/suit/space/hardsuit/shielded/wizard - limit = 1 - category = "Defensive" - -/datum/spellbook_entry/item/battlemage_charge - name = "Battlemage Armour Charges" - desc = "" - item_path = /obj/item/wizard_armour_charge - category = "Defensive" - cost = 1 - /datum/spellbook_entry/item/warpwhistle name = "Warp Whistle" desc = "" @@ -614,18 +552,6 @@ if(!isnull(CT.limit)) CT.limit++ qdel(O) - else if(istype(O, /obj/item/antag_spawner/slaughter_demon)) - to_chat(user, "On second thought, maybe summoning a demon is a bad idea. You refund your points.") - if(istype(O, /obj/item/antag_spawner/slaughter_demon/laughter)) - uses += 1 - for(var/datum/spellbook_entry/item/hugbottle/HB in entries) - if(!isnull(HB.limit)) - HB.limit++ - else - uses += 2 - for(var/datum/spellbook_entry/item/bloodbottle/BB in entries) - if(!isnull(BB.limit)) - BB.limit++ qdel(O) /obj/item/spellbook/proc/GetCategoryHeader(category) diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index f06eeb525a..95401bbead 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -61,7 +61,7 @@ owner.current.forceMove(pick(GLOB.wizardstart)) /datum/antagonist/wizard/proc/create_objectives() - switch(rand(1,100)) + switch(rand(1,85)) if(1 to 30) var/datum/objective/assassinate/kill_objective = new kill_objective.owner = owner @@ -100,12 +100,6 @@ survive_objective.owner = owner objectives += survive_objective - else - if (!(locate(/datum/objective/hijack) in objectives)) - var/datum/objective/hijack/hijack_objective = new - hijack_objective.owner = owner - objectives += hijack_objective - /datum/antagonist/wizard/on_removal() unregister() owner.RemoveAllSpells() // TODO keep track which spells are wizard spells which innate stuff @@ -204,7 +198,6 @@ owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(null)) to_chat(owner, "My service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned reality-bending mobility spells. You are able to cast teleport and ethereal jaunt.") if(APPRENTICE_HEALING) - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/charge(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/forcewall(null)) H.put_in_hands(new /obj/item/gun/magic/staff/healing(H)) to_chat(owner, "My service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned life-saving survival spells. You are able to cast charge and forcewall.") @@ -253,11 +246,6 @@ owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/turf_teleport/blink(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(null)) -/datum/antagonist/wizard/academy - name = "Academy Teacher" - outfit_type = /datum/outfit/wizard/academy - move_to_lair = FALSE - /datum/antagonist/wizard/academy/equip_wizard() . = ..() diff --git a/code/modules/antagonists/xeno/xeno.dm b/code/modules/antagonists/xeno/xeno.dm deleted file mode 100644 index aa4e401459..0000000000 --- a/code/modules/antagonists/xeno/xeno.dm +++ /dev/null @@ -1,38 +0,0 @@ -/datum/team/xeno - name = "Aliens" - -//Simply lists them. -/datum/team/xeno/roundend_report() - var/list/parts = list() - parts += "The [name] were:" - parts += printplayerlist(members) - return "
    [parts.Join("
    ")]
    " - -/datum/antagonist/xeno - name = "Xenomorph" - job_rank = ROLE_ALIEN - show_in_antagpanel = FALSE - prevent_roundtype_conversion = FALSE - var/datum/team/xeno/xeno_team - -/datum/antagonist/xeno/create_team(datum/team/xeno/new_team) - if(!new_team) - for(var/datum/antagonist/xeno/X in GLOB.antagonists) - if(!X.owner || !X.xeno_team) - continue - xeno_team = X.xeno_team - return - xeno_team = new - else - if(!istype(new_team)) - CRASH("Wrong xeno team type provided to create_team") - xeno_team = new_team - -/datum/antagonist/xeno/get_team() - return xeno_team - -//XENO -/mob/living/carbon/alien/mind_initialize() - ..() - if(!mind.has_antag_datum(/datum/antagonist/xeno)) - mind.add_antag_datum(/datum/antagonist/xeno) diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 0936ae68d1..dbd2d3efd1 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -64,9 +64,6 @@ //Called when this device attempts to act on another device, var/radio determines if it was sent via radio or direct /obj/item/assembly/proc/pulse(radio = FALSE) - if(connected && wire_type) - connected.pulse_assembly(src) - return TRUE if(holder && (wire_type & WIRE_PULSE)) holder.process_activation(src, 1, 0) if(holder && (wire_type & WIRE_PULSE_SPECIAL)) diff --git a/code/modules/assembly/doorcontrol.dm b/code/modules/assembly/doorcontrol.dm deleted file mode 100644 index 4f3550a37d..0000000000 --- a/code/modules/assembly/doorcontrol.dm +++ /dev/null @@ -1,148 +0,0 @@ -/obj/item/assembly/control - name = "blast door controller" - desc = "" - icon_state = "control" - attachable = TRUE - var/id = null - var/can_change_id = 0 - var/cooldown = FALSE //Door cooldowns - var/sync_doors = TRUE - -/obj/item/assembly/control/examine(mob/user) - . = ..() - if(id) - . += "Its channel ID is '[id]'." - -/obj/item/assembly/control/activate() - var/openclose - if(cooldown) - return - cooldown = TRUE - for(var/obj/machinery/door/poddoor/M in GLOB.machines) - if(M.id == src.id) - if(openclose == null || !sync_doors) - openclose = M.density - INVOKE_ASYNC(M, openclose ? TYPE_PROC_REF(/obj/machinery/door/poddoor, open) : TYPE_PROC_REF(/obj/machinery/door/poddoor, close)) - addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 10) - - -/obj/item/assembly/control/airlock - name = "airlock controller" - desc = "" - id = "badmin" // Set it to null for MEGAFUN. - var/specialfunctions = OPEN - /* - Bitflag, 1= open (OPEN) - 2= idscan (IDSCAN) - 4= bolts (BOLTS) - 8= shock (SHOCK) - 16= door safties (SAFE) - */ - -/obj/item/assembly/control/airlock/activate() - if(cooldown) - return - cooldown = TRUE - var/doors_need_closing = FALSE - var/list/obj/machinery/door/airlock/open_or_close = list() - for(var/obj/machinery/door/airlock/D in GLOB.airlocks) - if(D.id_tag == src.id) - if(specialfunctions & OPEN) - open_or_close += D - if(!D.density) - doors_need_closing = TRUE - if(specialfunctions & IDSCAN) - D.aiDisabledIdScanner = !D.aiDisabledIdScanner - if(specialfunctions & BOLTS) - if(!D.wires.is_cut(WIRE_BOLTS) && D.hasPower()) - D.locked = !D.locked - D.update_icon() - if(specialfunctions & SHOCK) - if(D.secondsElectrified) - D.set_electrified(MACHINE_ELECTRIFIED_PERMANENT, usr) - else - D.set_electrified(MACHINE_NOT_ELECTRIFIED, usr) - if(specialfunctions & SAFE) - D.safe = !D.safe - - for(var/D in open_or_close) - INVOKE_ASYNC(D, doors_need_closing ? TYPE_PROC_REF(/obj/machinery/door/airlock, close) : TYPE_PROC_REF(/obj/machinery/door/airlock, open)) - - addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 10) - - -/obj/item/assembly/control/massdriver - name = "mass driver controller" - desc = "" - -/obj/item/assembly/control/massdriver/activate() - if(cooldown) - return - cooldown = TRUE - for(var/obj/machinery/door/poddoor/M in GLOB.machines) - if (M.id == src.id) - INVOKE_ASYNC(M, TYPE_PROC_REF(/obj/machinery/door/poddoor, open)) - - sleep(10) - - for(var/obj/machinery/mass_driver/M in GLOB.machines) - if(M.id == src.id) - M.drive() - - sleep(60) - - for(var/obj/machinery/door/poddoor/M in GLOB.machines) - if (M.id == src.id) - INVOKE_ASYNC(M, TYPE_PROC_REF(/obj/machinery/door/poddoor, close)) - - addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 10) - - -/obj/item/assembly/control/igniter - name = "ignition controller" - desc = "" - -/obj/item/assembly/control/igniter/activate() - if(cooldown) - return - cooldown = TRUE - for(var/obj/machinery/sparker/M in GLOB.machines) - if (M.id == src.id) - INVOKE_ASYNC(M, TYPE_PROC_REF(/obj/machinery/sparker, ignite)) - - for(var/obj/machinery/igniter/M in GLOB.machines) - if(M.id == src.id) - M.use_power(50) - M.on = !M.on - M.icon_state = "igniter[M.on]" - - addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 30) - -/obj/item/assembly/control/flasher - name = "flasher controller" - desc = "" - -/obj/item/assembly/control/flasher/activate() - if(cooldown) - return - cooldown = TRUE - for(var/obj/machinery/flasher/M in GLOB.machines) - if(M.id == src.id) - INVOKE_ASYNC(M, TYPE_PROC_REF(/obj/machinery/flasher, flash)) - - addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 50) - - -/obj/item/assembly/control/crematorium - name = "crematorium controller" - desc = "" - -/obj/item/assembly/control/crematorium/activate() - if(cooldown) - return - cooldown = TRUE - for (var/obj/structure/bodycontainer/crematorium/C in GLOB.crematoriums) - if (C.id == id) - C.cremate(usr) - - addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 50) diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm deleted file mode 100644 index 53358bd80c..0000000000 --- a/code/modules/assembly/flash.dm +++ /dev/null @@ -1,297 +0,0 @@ -#define CONFUSION_STACK_MAX_MULTIPLIER 2 -/obj/item/assembly/flash - name = "flash" - desc = "" - icon_state = "flash" - item_state = "flashtool" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - throwforce = 0 - w_class = WEIGHT_CLASS_TINY - custom_materials = list(/datum/material/iron = 300, /datum/material/glass = 300) - light_color = LIGHT_COLOR_WHITE - light_power = FLASH_LIGHT_POWER - var/flashing_overlay = "flash-f" - var/times_used = 0 //Number of times it's been used. - var/burnt_out = FALSE //Is the flash burnt out? - var/burnout_resistance = 0 - var/last_used = 0 //last world.time it was used. - var/cooldown = 0 - var/last_trigger = 0 //Last time it was successfully triggered. - -/obj/item/assembly/flash/suicide_act(mob/living/user) - if(burnt_out) - user.visible_message("[user] raises \the [src] up to [user.p_their()] eyes and activates it ... but it's burnt out!") - return SHAME - else if(user.eye_blind) - user.visible_message("[user] raises \the [src] up to [user.p_their()] eyes and activates it ... but [user.p_theyre()] blind!") - return SHAME - user.visible_message("[user] raises \the [src] up to [user.p_their()] eyes and activates it! It looks like [user.p_theyre()] trying to commit suicide!") - attack(user,user) - return FIRELOSS - -/obj/item/assembly/flash/update_icon(flash = FALSE) - cut_overlays() - attached_overlays = list() - if(burnt_out) - add_overlay("flashburnt") - attached_overlays += "flashburnt" - if(flash) - add_overlay(flashing_overlay) - attached_overlays += flashing_overlay - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon)), 5) - if(holder) - holder.update_icon() - -/obj/item/assembly/flash/proc/clown_check(mob/living/carbon/human/user) - if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50)) - flash_carbon(user, user, 15, 0) - return FALSE - return TRUE - -/obj/item/assembly/flash/proc/burn_out() //Made so you can override it if you want to have an invincible flash from R&D or something. - if(!burnt_out) - burnt_out = TRUE - update_icon() - if(ismob(loc)) - var/mob/M = loc - M.visible_message("[src] burns out!","[src] burns out!") - else - var/turf/T = get_turf(src) - T.visible_message("[src] burns out!") - -/obj/item/assembly/flash/proc/flash_recharge(interval = 10) - var/deciseconds_passed = world.time - last_used - for(var/seconds = deciseconds_passed / 10, seconds >= interval, seconds -= interval) //get 1 charge every interval - times_used-- - last_used = world.time - times_used = max(0, times_used) //sanity - if(max(0, prob(times_used * 3) - burnout_resistance)) //The more often it's used in a short span of time the more likely it will burn out - burn_out() - return FALSE - return TRUE - -//BYPASS CHECKS ALSO PREVENTS BURNOUT! -/obj/item/assembly/flash/proc/AOE_flash(bypass_checks = FALSE, range = 3, power = 5, targeted = FALSE, mob/user) - if(!bypass_checks && !try_use_flash()) - return FALSE - var/list/mob/targets = get_flash_targets(get_turf(src), range, FALSE) - if(user) - targets -= user - for(var/mob/living/carbon/C in targets) - flash_carbon(C, user, power, targeted, TRUE) - return TRUE - -/obj/item/assembly/flash/proc/get_flash_targets(atom/target_loc, range = 3, override_vision_checks = FALSE) - if(!target_loc) - target_loc = loc - if(override_vision_checks) - return get_hearers_in_view(range, get_turf(target_loc)) - if(isturf(target_loc) || (ismob(target_loc) && isturf(target_loc.loc))) - return viewers(range, get_turf(target_loc)) - else - return typecache_filter_list(target_loc.GetAllContents(), GLOB.typecache_living) - -/obj/item/assembly/flash/proc/try_use_flash(mob/user = null) - if(burnt_out || (world.time < last_trigger + cooldown)) - return FALSE - last_trigger = world.time - playsound(src, 'sound/blank.ogg', 100, TRUE) - flash_lighting_fx(FLASH_LIGHT_RANGE, light_power, light_color) - times_used++ - flash_recharge() - update_icon(TRUE) - if(user && !clown_check(user)) - return FALSE - return TRUE - -/obj/item/assembly/flash/proc/flash_carbon(mob/living/carbon/M, mob/user, power = 15, targeted = TRUE, generic_message = FALSE) - if(!istype(M)) - return - if(user) - log_combat(user, M, "[targeted? "flashed(targeted)" : "flashed(AOE)"]", src) - else //caused by emp/remote signal - M.log_message("was [targeted? "flashed(targeted)" : "flashed(AOE)"]",LOG_ATTACK) - if(generic_message && M != user) - to_chat(M, "[src] emits a blinding light!") - if(targeted) - if(M.flash_act(1, 1)) - if(M.confused < power) - var/diff = power * CONFUSION_STACK_MAX_MULTIPLIER - M.confused - M.confused += min(power, diff) - if(user) - terrible_conversion_proc(M, user) - visible_message("[user] blinds [M] with the flash!") - to_chat(user, "I blind [M] with the flash!") - to_chat(M, "[user] blinds you with the flash!") - else - to_chat(M, "I are blinded by [src]!") - M.Paralyze(rand(80,120)) - else if(user) - visible_message("[user] fails to blind [M] with the flash!") - to_chat(user, "I fail to blind [M] with the flash!") - to_chat(M, "[user] fails to blind you with the flash!") - else - to_chat(M, "[src] fails to blind you!") - else - if(M.flash_act()) - var/diff = power * CONFUSION_STACK_MAX_MULTIPLIER - M.confused - M.confused += min(power, diff) - -/obj/item/assembly/flash/attack(mob/living/M, mob/user) - if(!try_use_flash(user)) - return FALSE - if(iscarbon(M)) - flash_carbon(M, user, 5, 1) - return TRUE - else if(issilicon(M)) - var/mob/living/silicon/robot/R = M - log_combat(user, R, "flashed", src) - update_icon(1) - R.Paralyze(rand(80,120)) - var/diff = 5 * CONFUSION_STACK_MAX_MULTIPLIER - M.confused - R.confused += min(5, diff) - R.flash_act(affect_silicon = 1) - user.visible_message("[user] overloads [R]'s sensors with the flash!", "I overload [R]'s sensors with the flash!") - return TRUE - - user.visible_message("[user] fails to blind [M] with the flash!", "I fail to blind [M] with the flash!") - -/obj/item/assembly/flash/attack_self(mob/living/carbon/user, flag = 0, emp = 0) - if(holder) - return FALSE - if(!AOE_flash(FALSE, 3, 5, FALSE, user)) - return FALSE - to_chat(user, "[src] emits a blinding light!") - -/obj/item/assembly/flash/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - if(!try_use_flash()) - return - AOE_flash() - burn_out() - -/obj/item/assembly/flash/activate()//AOE flash on signal received - if(!..()) - return - AOE_flash() - -/obj/item/assembly/flash/proc/terrible_conversion_proc(mob/living/carbon/H, mob/user) - if(istype(H) && H.stat != DEAD) - if(user.mind) - var/datum/antagonist/rev/head/converter = user.mind.has_antag_datum(/datum/antagonist/rev/head) - if(!converter) - return - if(!H.client) - to_chat(user, "This mind is so vacant that it is not susceptible to influence!") - return - if(H.stat != CONSCIOUS) - to_chat(user, "They must be conscious before you can convert [H.p_them()]!") - return - if(converter.add_revolutionary(H.mind)) - times_used -- //Flashes less likely to burn out for headrevs when used for conversion - else - to_chat(user, "This mind seems resistant to the flash!") - - -/obj/item/assembly/flash/cyborg - -/obj/item/assembly/flash/cyborg/attack(mob/living/M, mob/user) - ..() - new /obj/effect/temp_visual/borgflash(get_turf(src)) - -/obj/item/assembly/flash/cyborg/attack_self(mob/user) - ..() - new /obj/effect/temp_visual/borgflash(get_turf(src)) - -/obj/item/assembly/flash/cyborg/attackby(obj/item/W, mob/user, params) - return -/obj/item/assembly/flash/cyborg/screwdriver_act(mob/living/user, obj/item/I) - return - -/obj/item/assembly/flash/memorizer - name = "memorizer" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "memorizer" - item_state = "nullrod" - -/obj/item/assembly/flash/handheld //this is now the regular pocket flashes - -/obj/item/assembly/flash/armimplant - name = "photon projector" - desc = "" - var/flashcd = 20 - var/overheat = 0 - var/obj/item/organ/cyberimp/arm/flash/I = null - -/obj/item/assembly/flash/armimplant/burn_out() - if(I && I.owner) - to_chat(I.owner, "My photon projector implant overheats and deactivates!") - I.Retract() - overheat = TRUE - addtimer(CALLBACK(src, PROC_REF(cooldown)), flashcd * 2) - -/obj/item/assembly/flash/armimplant/try_use_flash(mob/user = null) - if(overheat) - if(I && I.owner) - to_chat(I.owner, "My photon projector is running too hot to be used again so quickly!") - return FALSE - overheat = TRUE - addtimer(CALLBACK(src, PROC_REF(cooldown)), flashcd) - playsound(src, 'sound/blank.ogg', 100, TRUE) - update_icon(1) - return TRUE - - -/obj/item/assembly/flash/armimplant/proc/cooldown() - overheat = FALSE - -/obj/item/assembly/flash/hypnotic - desc = "" - flashing_overlay = "flash-hypno" - light_color = LIGHT_COLOR_PINK - cooldown = 20 - -/obj/item/assembly/flash/hypnotic/burn_out() - return - -/obj/item/assembly/flash/hypnotic/flash_carbon(mob/living/carbon/M, mob/user, power = 15, targeted = TRUE, generic_message = FALSE) - if(!istype(M)) - return - if(user) - log_combat(user, M, "[targeted? "hypno-flashed(targeted)" : "hypno-flashed(AOE)"]", src) - else //caused by emp/remote signal - M.log_message("was [targeted? "hypno-flashed(targeted)" : "hypno-flashed(AOE)"]",LOG_ATTACK) - if(generic_message && M != user) - to_chat(M, "[src] emits a soothing light...") - if(targeted) - if(M.flash_act(1, 1)) - var/hypnosis = FALSE - if(M.hypnosis_vulnerable()) - hypnosis = TRUE - if(user) - user.visible_message("[user] blinds [M] with the flash!", "I hypno-flash [M]!") - - if(!hypnosis) - to_chat(M, "The light makes you feel oddly relaxed...") - M.confused += min(M.confused + 10, 20) - M.dizziness += min(M.dizziness + 10, 20) - M.drowsyness += min(M.drowsyness + 10, 20) - M.apply_status_effect(STATUS_EFFECT_PACIFY, 100) - else - M.apply_status_effect(/datum/status_effect/trance, 200, TRUE) - - else if(user) - user.visible_message("[user] fails to blind [M] with the flash!", "I fail to hypno-flash [M]!") - else - to_chat(M, "[src] fails to blind you!") - - else if(M.flash_act()) - to_chat(M, "Such a pretty light...") - M.confused += min(M.confused + 4, 20) - M.dizziness += min(M.dizziness + 4, 20) - M.drowsyness += min(M.drowsyness + 4, 20) - M.apply_status_effect(STATUS_EFFECT_PACIFY, 40) diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm deleted file mode 100644 index e4f6462423..0000000000 --- a/code/modules/assembly/health.dm +++ /dev/null @@ -1,75 +0,0 @@ -/obj/item/assembly/health - name = "health sensor" - desc = "" - icon_state = "health" - custom_materials = list(/datum/material/iron=800, /datum/material/glass=200) - attachable = TRUE - - var/scanning = FALSE - var/health_scan - var/alarm_health = HEALTH_THRESHOLD_CRIT - -/obj/item/assembly/health/examine(mob/user) - . = ..() - . += "Use it in hand to turn it off/on and Alt-click to swap between \"detect death\" mode and \"detect critical state\" mode." - . += "[src.scanning ? "The sensor is on and you can see [health_scan] displayed on the screen" : "The sensor is off"]." - -/obj/item/assembly/health/activate() - if(!..()) - return FALSE//Cooldown check - toggle_scan() - return TRUE - -/obj/item/assembly/health/toggle_secure() - secured = !secured - if(secured && scanning) - START_PROCESSING(SSobj, src) - else - scanning = FALSE - STOP_PROCESSING(SSobj, src) - update_icon() - return secured - -/obj/item/assembly/health/AltClick(mob/living/user) - if(alarm_health == HEALTH_THRESHOLD_CRIT) - alarm_health = HEALTH_THRESHOLD_DEAD - to_chat(user, "I toggle [src] to \"detect death\" mode.") - else - alarm_health = HEALTH_THRESHOLD_CRIT - to_chat(user, "I toggle [src] to \"detect critical state\" mode.") - -/obj/item/assembly/health/process() - if(!scanning || !secured) - return - - var/atom/A = src - if(connected && connected.holder) - A = connected.holder - for(A, A && !ismob(A), A=A.loc); - // like get_turf(), but for mobs. - var/mob/living/M = A - - if(M) - health_scan = M.health - if(health_scan <= alarm_health) - pulse() - audible_message("[icon2html(src, hearers(src))] *beep* *beep* *beep*") - playsound(src, 'sound/blank.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) - toggle_scan() - return - return - -/obj/item/assembly/health/proc/toggle_scan() - if(!secured) - return 0 - scanning = !scanning - if(scanning) - START_PROCESSING(SSobj, src) - else - STOP_PROCESSING(SSobj, src) - return - -/obj/item/assembly/health/attack_self(mob/user) - . = ..() - to_chat(user, "I toggle [src] [src.scanning ? "off" : "on"].") - toggle_scan() diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm deleted file mode 100644 index 82c2c276c8..0000000000 --- a/code/modules/assembly/shock_kit.dm +++ /dev/null @@ -1,40 +0,0 @@ -/obj/item/assembly/shock_kit - name = "electrohelmet assembly" - desc = "" - icon = 'icons/obj/assemblies.dmi' - icon_state = "shock_kit" - var/obj/item/clothing/head/helmet/part1 = null - var/obj/item/electropack/part2 = null - w_class = WEIGHT_CLASS_HUGE - flags_1 = CONDUCT_1 - -/obj/item/assembly/shock_kit/Destroy() - qdel(part1) - qdel(part2) - return ..() - -/obj/item/assembly/shock_kit/wrench_act(mob/living/user, obj/item/I) - ..() - to_chat(user, "I disassemble [src].") - if(part1) - part1.forceMove(drop_location()) - part1.master = null - part1 = null - if(part2) - part2.forceMove(drop_location()) - part2.master = null - part2 = null - qdel(src) - return TRUE - -/obj/item/assembly/shock_kit/attack_self(mob/user) - part1.attack_self(user) - part2.attack_self(user) - add_fingerprint(user) - return - -/obj/item/assembly/shock_kit/receive_signal() - if(istype(loc, /obj/structure/chair/e_chair)) - var/obj/structure/chair/e_chair/C = loc - C.shock() - return diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm deleted file mode 100644 index c8a9721376..0000000000 --- a/code/modules/assembly/signaler.dm +++ /dev/null @@ -1,237 +0,0 @@ -/obj/item/assembly/signaler - name = "remote signaling device" - desc = "" - icon_state = "signaller" - item_state = "signaler" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - custom_materials = list(/datum/material/iron=400, /datum/material/glass=120) - wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE - attachable = TRUE - - var/code = DEFAULT_SIGNALER_CODE - var/frequency = FREQ_SIGNALER - var/delay = 0 - var/datum/radio_frequency/radio_connection - ///Holds the mind that commited suicide. - var/datum/mind/suicider - ///Holds a reference string to the mob, decides how much of a gamer you are. - var/suicide_mob - var/hearing_range = 1 - -/obj/item/assembly/signaler/suicide_act(mob/living/carbon/user) - user.visible_message("[user] eats \the [src]! If it is signaled, [user.p_they()] will die!") - playsound(src, 'sound/blank.ogg', 50, TRUE) - moveToNullspace() - suicider = user.mind - suicide_mob = REF(user) - return MANUAL_SUICIDE_NONLETHAL - -/obj/item/assembly/signaler/proc/manual_suicide(datum/mind/suicidee) - var/mob/living/user = suicidee.current - if(!istype(user)) - return - if(suicide_mob == REF(user)) - user.visible_message("[user]'s [src] receives a signal, killing [user.p_them()] instantly!") - else - user.visible_message("[user]'s [src] receives a signal and [user.p_they()] die[user.p_s()] like a gamer!") - user.adjustOxyLoss(200)//it sends an electrical pulse to their heart, killing them. or something. - user.death(0) - user.set_suicide(TRUE) - user.suicide_log() - playsound(user, 'sound/blank.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) - qdel(src) - -/obj/item/assembly/signaler/Initialize() - . = ..() - set_frequency(frequency) - - -/obj/item/assembly/signaler/Destroy() - SSradio.remove_object(src,frequency) - suicider = null - . = ..() - -/obj/item/assembly/signaler/activate() - if(!..())//cooldown processing - return FALSE - signal() - return TRUE - -/obj/item/assembly/signaler/update_icon() - if(holder) - holder.update_icon() - return - -/obj/item/assembly/signaler/ui_interact(mob/user, flag1) - . = ..() - if(is_secured(user)) - var/t1 = "-------" - var/dat = {" - - -Send Signal
    -Frequency/Code for signaler:
    -Frequency: -[format_frequency(src.frequency)] -Set
    - -Code: -[src.code] -Set
    -[t1] -
    "} - user << browse(dat, "window=radio") - onclose(user, "radio") - return - - -/obj/item/assembly/signaler/Topic(href, href_list) - ..() - - if(!usr.canUseTopic(src, BE_CLOSE)) - usr << browse(null, "window=radio") - onclose(usr, "radio") - return - - if (href_list["set"]) - - if(href_list["set"] == "freq") - var/new_freq = input(usr, "Input a new signalling frequency", "Remote Signaller Frequency", format_frequency(frequency)) as num|null - if(!usr.canUseTopic(src, BE_CLOSE)) - return - new_freq = unformat_frequency(new_freq) - new_freq = sanitize_frequency(new_freq, TRUE) - set_frequency(new_freq) - - if(href_list["set"] == "code") - var/new_code = input(usr, "Input a new signalling code", "Remote Signaller Code", code) as num|null - if(!usr.canUseTopic(src, BE_CLOSE)) - return - new_code = round(new_code) - new_code = CLAMP(new_code, 1, 100) - code = new_code - - if(href_list["send"]) - INVOKE_ASYNC(src, PROC_REF(signal)) - - if(usr) - attack_self(usr) - - return - -/obj/item/assembly/signaler/attackby(obj/item/W, mob/user, params) - if(issignaler(W)) - var/obj/item/assembly/signaler/signaler2 = W - if(secured && signaler2.secured) - code = signaler2.code - set_frequency(signaler2.frequency) - to_chat(user, "You transfer the frequency and code of \the [signaler2.name] to \the [name]") - ..() - -/obj/item/assembly/signaler/proc/signal() - if(!radio_connection) - return - - var/datum/signal/signal = new(list("code" = code)) - radio_connection.post_signal(src, signal) - - var/time = time2text(world.realtime,"hh:mm:ss") - var/turf/T = get_turf(src) - if(usr) - GLOB.lastsignalers.Add("[time] : [usr.key] used [src] @ location ([T.x],[T.y],[T.z]) : [format_frequency(frequency)]/[code]") - - - return - -/obj/item/assembly/signaler/receive_signal(datum/signal/signal) - . = FALSE - if(!signal) - return - if(signal.data["code"] != code) - return - if(!(src.wires & WIRE_RADIO_RECEIVE)) - return - if(suicider) - manual_suicide(suicider) - return - pulse(TRUE) - audible_message("[icon2html(src, hearers(src))] *beep* *beep* *beep*", null, hearing_range) - for(var/CHM in get_hearers_in_view(hearing_range, src)) - if(ismob(CHM)) - var/mob/LM = CHM - LM.playsound_local(get_turf(src), 'sound/blank.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) - return TRUE - - -/obj/item/assembly/signaler/proc/set_frequency(new_frequency) - SSradio.remove_object(src, frequency) - frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, RADIO_SIGNALER) - return - -// Embedded signaller used in grenade construction. -// It's necessary because the signaler doens't have an off state. -// Generated during grenade construction. -Sayu -/obj/item/assembly/signaler/receiver - var/on = FALSE - -/obj/item/assembly/signaler/receiver/proc/toggle_safety() - on = !on - -/obj/item/assembly/signaler/receiver/activate() - toggle_safety() - return TRUE - -/obj/item/assembly/signaler/receiver/examine(mob/user) - . = ..() - . += "The radio receiver is [on?"on":"off"]." - -/obj/item/assembly/signaler/receiver/receive_signal(datum/signal/signal) - if(!on) - return - return ..(signal) - - -// Embedded signaller used in anomalies. -/obj/item/assembly/signaler/anomaly - name = "anomaly core" - desc = "" - icon_state = "anomaly core" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - resistance_flags = FIRE_PROOF - var/anomaly_type = /obj/effect/anomaly - -/obj/item/assembly/signaler/anomaly/receive_signal(datum/signal/signal) - if(!signal) - return FALSE - if(signal.data["code"] != code) - return FALSE - if(suicider) - manual_suicide(suicider) - for(var/obj/effect/anomaly/A in get_turf(src)) - A.anomalyNeutralize() - return TRUE - -/obj/item/assembly/signaler/anomaly/manual_suicide(mob/living/carbon/user) - user.visible_message("[user]'s [src] is reacting to the radio signal, warping [user.p_their()] body!") - user.set_suicide(TRUE) - user.suicide_log() - user.gib() - -/obj/item/assembly/signaler/anomaly/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_ANALYZER) - to_chat(user, "Analyzing... [src]'s stabilized field is fluctuating along frequency [format_frequency(frequency)], code [code].") - ..() - -/obj/item/assembly/signaler/anomaly/attack_self() - return - -/obj/item/assembly/signaler/cyborg - -/obj/item/assembly/signaler/cyborg/attackby(obj/item/W, mob/user, params) - return -/obj/item/assembly/signaler/cyborg/screwdriver_act(mob/living/user, obj/item/I) - return diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm index 7aff214223..c986d52d41 100644 --- a/code/modules/atmospherics/environmental/LINDA_fire.dm +++ b/code/modules/atmospherics/environmental/LINDA_fire.dm @@ -47,7 +47,7 @@ icon = 'icons/effects/fire.dmi' icon_state = "1" layer = GASFIRE_LAYER - light_range = LIGHT_RANGE_FIRE + light_outer_range = LIGHT_RANGE_FIRE light_color = LIGHT_COLOR_FIRE blend_mode = BLEND_ADD @@ -187,7 +187,7 @@ perform_exposure() return -/* +/* if(location.excited_group) location.excited_group.reset_cooldowns() @@ -269,6 +269,6 @@ /obj/effect/dummy/lighting_obj/moblight/fire name = "fire" light_color = LIGHT_COLOR_FIRE - light_range = LIGHT_RANGE_FIRE + light_outer_range = LIGHT_RANGE_FIRE #undef INSUFFICIENT diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index 2a995575a5..8e4d708059 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -397,8 +397,6 @@ cached_gases[/datum/gas/nitrous_oxide][MOLES] -= reaction_efficency cached_gases[/datum/gas/plasma][MOLES] -= 2*reaction_efficency - SSresearch.science_tech.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, min((reaction_efficency**2)*BZ_RESEARCH_SCALE),BZ_RESEARCH_MAX_AMOUNT) - if(energy_released > 0) var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) @@ -432,7 +430,6 @@ cached_gases[/datum/gas/tritium][MOLES] -= heat_scale cached_gases[/datum/gas/plasma][MOLES] -= heat_scale cached_gases[/datum/gas/nitryl][MOLES] -= heat_scale - SSresearch.science_tech.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, STIMULUM_RESEARCH_AMOUNT*max(stim_energy_change,0)) if(stim_energy_change) var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) @@ -461,7 +458,6 @@ cached_gases[/datum/gas/tritium][MOLES] -= 10*nob_formed cached_gases[/datum/gas/nitrogen][MOLES] -= 20*nob_formed cached_gases[/datum/gas/hypernoblium][MOLES]+= nob_formed - SSresearch.science_tech.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, nob_formed*NOBLIUM_RESEARCH_AMOUNT) if (nob_formed) var/new_heat_capacity = air.heat_capacity() @@ -494,7 +490,6 @@ //Possibly burning a bit of organic matter through maillard reaction, so a *tiny* bit more heat would be understandable air.temperature += cleaned_air * 0.002 - SSresearch.science_tech.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, cleaned_air*MIASMA_RESEARCH_AMOUNT)//Turns out the burning of miasma is kinda interesting to scientists /datum/gas_reaction/stim_ball priority = 7 diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm deleted file mode 100644 index bf4b52df12..0000000000 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ /dev/null @@ -1,851 +0,0 @@ -/datum/tlv - var/min2 - var/min1 - var/max1 - var/max2 - -/datum/tlv/New(min2 as num, min1 as num, max1 as num, max2 as num) - if(min2) src.min2 = min2 - if(min1) src.min1 = min1 - if(max1) src.max1 = max1 - if(max2) src.max2 = max2 - -/datum/tlv/proc/get_danger_level(val as num) - if(max2 != -1 && val >= max2) - return 2 - if(min2 != -1 && val <= min2) - return 2 - if(max1 != -1 && val >= max1) - return 1 - if(min1 != -1 && val <= min1) - return 1 - return 0 - -/datum/tlv/no_checks - min2 = -1 - min1 = -1 - max1 = -1 - max2 = -1 - -/datum/tlv/dangerous - min2 = -1 - min1 = -1 - max1 = 0.2 - max2 = 0.5 - -/obj/item/electronics/airalarm - name = "air alarm electronics" - custom_price = 5 - icon_state = "airalarm_electronics" - -/obj/item/wallframe/airalarm - name = "air alarm frame" - desc = "" - icon = 'icons/obj/monitors.dmi' - icon_state = "alarm_bitem" - result_path = /obj/machinery/airalarm - -#define AALARM_MODE_SCRUBBING 1 -#define AALARM_MODE_VENTING 2 //makes draught -#define AALARM_MODE_PANIC 3 //like siphon, but stronger (enables widenet) -#define AALARM_MODE_REPLACEMENT 4 //sucks off all air, then refill and swithes to scrubbing -#define AALARM_MODE_OFF 5 -#define AALARM_MODE_FLOOD 6 //Emagged mode; turns off scrubbers and pressure checks on vents -#define AALARM_MODE_SIPHON 7 //Scrubbers suck air -#define AALARM_MODE_CONTAMINATED 8 //Turns on all filtering and widenet scrubbing. -#define AALARM_MODE_REFILL 9 //just like normal, but with triple the air output - -#define AALARM_REPORT_TIMEOUT 100 - -/obj/machinery/airalarm - name = "air alarm" - desc = "" - icon = 'icons/obj/monitors.dmi' - icon_state = "alarm0" - use_power = IDLE_POWER_USE - idle_power_usage = 4 - active_power_usage = 8 - power_channel = ENVIRON - req_access = list(ACCESS_ATMOSPHERICS) - max_integrity = 250 - integrity_failure = 0.33 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30) - resistance_flags = FIRE_PROOF - ui_x = 440 - ui_y = 650 - - var/danger_level = 0 - var/mode = AALARM_MODE_SCRUBBING - - var/locked = TRUE - var/aidisabled = 0 - var/shorted = 0 - var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone - - var/frequency = FREQ_ATMOS_CONTROL - var/alarm_frequency = FREQ_ATMOS_ALARMS - var/datum/radio_frequency/radio_connection - - var/list/TLV = list( // Breathable air. - "pressure" = new/datum/tlv(ONE_ATMOSPHERE * 0.8, ONE_ATMOSPHERE* 0.9, ONE_ATMOSPHERE * 1.1, ONE_ATMOSPHERE * 1.2), // kPa. Values are min2, min1, max1, max2 - "temperature" = new/datum/tlv(T0C, T0C+10, T0C+40, T0C+66), - /datum/gas/oxygen = new/datum/tlv(16, 19, 135, 140), // Partial pressure, kpa - /datum/gas/nitrogen = new/datum/tlv(-1, -1, 1000, 1000), - /datum/gas/carbon_dioxide = new/datum/tlv(-1, -1, 5, 10), - /datum/gas/miasma = new/datum/tlv/(-1, -1, 15, 30), - /datum/gas/plasma = new/datum/tlv/dangerous, - /datum/gas/nitrous_oxide = new/datum/tlv/dangerous, - /datum/gas/bz = new/datum/tlv/dangerous, - /datum/gas/hypernoblium = new/datum/tlv(-1, -1, 1000, 1000), // Hyper-Noblium is inert and nontoxic - /datum/gas/water_vapor = new/datum/tlv/dangerous, - /datum/gas/tritium = new/datum/tlv/dangerous, - /datum/gas/stimulum = new/datum/tlv/dangerous, - /datum/gas/nitryl = new/datum/tlv/dangerous, - /datum/gas/pluoxium = new/datum/tlv(-1, -1, 1000, 1000) // Unlike oxygen, pluoxium does not fuel plasma/tritium fires - ) - -/obj/machinery/airalarm/server // No checks here. - TLV = list( - "pressure" = new/datum/tlv/no_checks, - "temperature" = new/datum/tlv/no_checks, - /datum/gas/oxygen = new/datum/tlv/no_checks, - /datum/gas/nitrogen = new/datum/tlv/no_checks, - /datum/gas/carbon_dioxide = new/datum/tlv/no_checks, - /datum/gas/miasma = new/datum/tlv/no_checks, - /datum/gas/plasma = new/datum/tlv/no_checks, - /datum/gas/nitrous_oxide = new/datum/tlv/no_checks, - /datum/gas/bz = new/datum/tlv/no_checks, - /datum/gas/hypernoblium = new/datum/tlv/no_checks, - /datum/gas/water_vapor = new/datum/tlv/no_checks, - /datum/gas/tritium = new/datum/tlv/no_checks, - /datum/gas/stimulum = new/datum/tlv/no_checks, - /datum/gas/nitryl = new/datum/tlv/no_checks, - /datum/gas/pluoxium = new/datum/tlv/no_checks - ) - -/obj/machinery/airalarm/kitchen_cold_room // Kitchen cold rooms start off at -80°C or 193.15°K. - TLV = list( - "pressure" = new/datum/tlv(ONE_ATMOSPHERE * 0.8, ONE_ATMOSPHERE* 0.9, ONE_ATMOSPHERE * 1.1, ONE_ATMOSPHERE * 1.2), // kPa - "temperature" = new/datum/tlv(T0C-273.15, T0C-100, T0C-60, T0C), - /datum/gas/oxygen = new/datum/tlv(16, 19, 135, 140), // Partial pressure, kpa - /datum/gas/nitrogen = new/datum/tlv(-1, -1, 1000, 1000), - /datum/gas/carbon_dioxide = new/datum/tlv(-1, -1, 5, 10), - /datum/gas/miasma = new/datum/tlv/(-1, -1, 2, 5), - /datum/gas/plasma = new/datum/tlv/dangerous, - /datum/gas/nitrous_oxide = new/datum/tlv/dangerous, - /datum/gas/bz = new/datum/tlv/dangerous, - /datum/gas/hypernoblium = new/datum/tlv(-1, -1, 1000, 1000), // Hyper-Noblium is inert and nontoxic - /datum/gas/water_vapor = new/datum/tlv/dangerous, - /datum/gas/tritium = new/datum/tlv/dangerous, - /datum/gas/stimulum = new/datum/tlv/dangerous, - /datum/gas/nitryl = new/datum/tlv/dangerous, - /datum/gas/pluoxium = new/datum/tlv(-1, -1, 1000, 1000) // Unlike oxygen, pluoxium does not fuel plasma/tritium fires - ) - -/obj/machinery/airalarm/unlocked - locked = FALSE - -/obj/machinery/airalarm/engine - name = "engine air alarm" - locked = FALSE - req_access = null - req_one_access = list(ACCESS_ATMOSPHERICS, ACCESS_ENGINE) - -/obj/machinery/airalarm/mixingchamber - name = "chamber air alarm" - locked = FALSE - req_access = null - req_one_access = list(ACCESS_ATMOSPHERICS, ACCESS_TOX, ACCESS_TOX_STORAGE) - -/obj/machinery/airalarm/all_access - name = "all-access air alarm" - desc = "" - locked = FALSE - req_access = null - req_one_access = null - -/obj/machinery/airalarm/syndicate //general syndicate access - req_access = list(ACCESS_SYNDICATE) - -/obj/machinery/airalarm/away //general away mission access - req_access = list(ACCESS_AWAY_GENERAL) - -/obj/machinery/airalarm/directional/north //Pixel offsets get overwritten on New() - dir = SOUTH - pixel_y = 24 - -/obj/machinery/airalarm/directional/south - dir = NORTH - pixel_y = -24 - -/obj/machinery/airalarm/directional/east - dir = WEST - pixel_x = 24 - -/obj/machinery/airalarm/directional/west - dir = EAST - pixel_x = -24 - -//all air alarms in area are connected via magic -/area - var/list/air_vent_names = list() - var/list/air_scrub_names = list() - var/list/air_vent_info = list() - var/list/air_scrub_info = list() - -/obj/machinery/airalarm/New(loc, ndir, nbuild) - ..() - wires = new /datum/wires/airalarm(src) - if(ndir) - setDir(ndir) - - if(nbuild) - buildstage = 0 - panel_open = TRUE - pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) - pixel_y = (dir & 3)? (dir == 1 ? -24 : 24) : 0 - - if(name == initial(name)) - name = "[get_area_name(src)] Air Alarm" - - update_icon() - -/obj/machinery/airalarm/Destroy() - SSradio.remove_object(src, frequency) - qdel(wires) - wires = null - return ..() - -/obj/machinery/airalarm/Initialize(mapload) - . = ..() - set_frequency(frequency) - -/obj/machinery/airalarm/examine(mob/user) - . = ..() - switch(buildstage) - if(0) - . += "It is missing air alarm electronics." - if(1) - . += "It is missing wiring." - if(2) - . += "Alt-click to [locked ? "unlock" : "lock"] the interface." - -/obj/machinery/airalarm/ui_status(mob/user) - if(user.has_unlimited_silicon_privilege && aidisabled) - to_chat(user, "AI control has been disabled.") - else if(!shorted) - return ..() - return UI_CLOSE - -/obj/machinery/airalarm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "airalarm", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/airalarm/ui_data(mob/user) - var/data = list( - "locked" = locked, - "siliconUser" = user.has_unlimited_silicon_privilege, - "emagged" = (obj_flags & EMAGGED ? 1 : 0), - "danger_level" = danger_level, - ) - - var/area/A = get_area(src) - data["atmos_alarm"] = A.atmosalm - data["fire_alarm"] = A.fire - - var/turf/T = get_turf(src) - var/datum/gas_mixture/environment = T.return_air() - var/datum/tlv/cur_tlv - - data["environment_data"] = list() - var/pressure = environment.return_pressure() - cur_tlv = TLV["pressure"] - data["environment_data"] += list(list( - "name" = "Pressure", - "value" = pressure, - "unit" = "kPa", - "danger_level" = cur_tlv.get_danger_level(pressure) - )) - var/temperature = environment.temperature - cur_tlv = TLV["temperature"] - data["environment_data"] += list(list( - "name" = "Temperature", - "value" = temperature, - "unit" = "K ([round(temperature - T0C, 0.1)]C)", - "danger_level" = cur_tlv.get_danger_level(temperature) - )) - var/total_moles = environment.total_moles() - var/partial_pressure = R_IDEAL_GAS_EQUATION * environment.temperature / environment.volume - for(var/gas_id in environment.gases) - if(!(gas_id in TLV)) // We're not interested in this gas, it seems. - continue - cur_tlv = TLV[gas_id] - data["environment_data"] += list(list( - "name" = environment.gases[gas_id][GAS_META][META_GAS_NAME], - "value" = environment.gases[gas_id][MOLES] / total_moles * 100, - "unit" = "%", - "danger_level" = cur_tlv.get_danger_level(environment.gases[gas_id][MOLES] * partial_pressure) - )) - - if(!locked || user.has_unlimited_silicon_privilege) - data["vents"] = list() - for(var/id_tag in A.air_vent_names) - var/long_name = A.air_vent_names[id_tag] - var/list/info = A.air_vent_info[id_tag] - if(!info || info["frequency"] != frequency) - continue - data["vents"] += list(list( - "id_tag" = id_tag, - "long_name" = sanitize(long_name), - "power" = info["power"], - "checks" = info["checks"], - "excheck" = info["checks"]&1, - "incheck" = info["checks"]&2, - "direction" = info["direction"], - "external" = info["external"], - "internal" = info["internal"], - "extdefault"= (info["external"] == ONE_ATMOSPHERE), - "intdefault"= (info["internal"] == 0) - )) - data["scrubbers"] = list() - for(var/id_tag in A.air_scrub_names) - var/long_name = A.air_scrub_names[id_tag] - var/list/info = A.air_scrub_info[id_tag] - if(!info || info["frequency"] != frequency) - continue - data["scrubbers"] += list(list( - "id_tag" = id_tag, - "long_name" = sanitize(long_name), - "power" = info["power"], - "scrubbing" = info["scrubbing"], - "widenet" = info["widenet"], - "filter_types" = info["filter_types"] - )) - data["mode"] = mode - data["modes"] = list() - data["modes"] += list(list("name" = "Filtering - Scrubs out contaminants", "mode" = AALARM_MODE_SCRUBBING, "selected" = mode == AALARM_MODE_SCRUBBING, "danger" = 0)) - data["modes"] += list(list("name" = "Contaminated - Scrubs out ALL contaminants quickly","mode" = AALARM_MODE_CONTAMINATED, "selected" = mode == AALARM_MODE_CONTAMINATED, "danger" = 0)) - data["modes"] += list(list("name" = "Draught - Siphons out air while replacing", "mode" = AALARM_MODE_VENTING, "selected" = mode == AALARM_MODE_VENTING, "danger" = 0)) - data["modes"] += list(list("name" = "Refill - Triple vent output", "mode" = AALARM_MODE_REFILL, "selected" = mode == AALARM_MODE_REFILL, "danger" = 1)) - data["modes"] += list(list("name" = "Cycle - Siphons air before replacing", "mode" = AALARM_MODE_REPLACEMENT, "selected" = mode == AALARM_MODE_REPLACEMENT, "danger" = 1)) - data["modes"] += list(list("name" = "Siphon - Siphons air out of the room", "mode" = AALARM_MODE_SIPHON, "selected" = mode == AALARM_MODE_SIPHON, "danger" = 1)) - data["modes"] += list(list("name" = "Panic Siphon - Siphons air out of the room quickly","mode" = AALARM_MODE_PANIC, "selected" = mode == AALARM_MODE_PANIC, "danger" = 1)) - data["modes"] += list(list("name" = "Off - Shuts off vents and scrubbers", "mode" = AALARM_MODE_OFF, "selected" = mode == AALARM_MODE_OFF, "danger" = 0)) - if(obj_flags & EMAGGED) - data["modes"] += list(list("name" = "Flood - Shuts off scrubbers and opens vents", "mode" = AALARM_MODE_FLOOD, "selected" = mode == AALARM_MODE_FLOOD, "danger" = 1)) - - var/datum/tlv/selected - var/list/thresholds = list() - - selected = TLV["pressure"] - thresholds += list(list("name" = "Pressure", "settings" = list())) - thresholds[thresholds.len]["settings"] += list(list("env" = "pressure", "val" = "min2", "selected" = selected.min2)) - thresholds[thresholds.len]["settings"] += list(list("env" = "pressure", "val" = "min1", "selected" = selected.min1)) - thresholds[thresholds.len]["settings"] += list(list("env" = "pressure", "val" = "max1", "selected" = selected.max1)) - thresholds[thresholds.len]["settings"] += list(list("env" = "pressure", "val" = "max2", "selected" = selected.max2)) - - selected = TLV["temperature"] - thresholds += list(list("name" = "Temperature", "settings" = list())) - thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "min2", "selected" = selected.min2)) - thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "min1", "selected" = selected.min1)) - thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "max1", "selected" = selected.max1)) - thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "max2", "selected" = selected.max2)) - - for(var/gas_id in GLOB.meta_gas_info) - if(!(gas_id in TLV)) // We're not interested in this gas, it seems. - continue - selected = TLV[gas_id] - thresholds += list(list("name" = GLOB.meta_gas_info[gas_id][META_GAS_NAME], "settings" = list())) - thresholds[thresholds.len]["settings"] += list(list("env" = gas_id, "val" = "min2", "selected" = selected.min2)) - thresholds[thresholds.len]["settings"] += list(list("env" = gas_id, "val" = "min1", "selected" = selected.min1)) - thresholds[thresholds.len]["settings"] += list(list("env" = gas_id, "val" = "max1", "selected" = selected.max1)) - thresholds[thresholds.len]["settings"] += list(list("env" = gas_id, "val" = "max2", "selected" = selected.max2)) - - data["thresholds"] = thresholds - return data - -/obj/machinery/airalarm/ui_act(action, params) - if(..() || buildstage != 2) - return - if((locked && !usr.has_unlimited_silicon_privilege) || (usr.has_unlimited_silicon_privilege && aidisabled)) - return - var/device_id = params["id_tag"] - switch(action) - if("lock") - if(usr.has_unlimited_silicon_privilege && !wires.is_cut(WIRE_IDSCAN)) - locked = !locked - . = TRUE - if("power", "toggle_filter", "widenet", "scrubbing") - send_signal(device_id, list("[action]" = params["val"]), usr) - . = TRUE - if("excheck") - send_signal(device_id, list("checks" = text2num(params["val"])^1), usr) - . = TRUE - if("incheck") - send_signal(device_id, list("checks" = text2num(params["val"])^2), usr) - . = TRUE - if("set_external_pressure", "set_internal_pressure") - var/target = params["value"] - if(!isnull(target)) - send_signal(device_id, list("[action]" = target), usr) - . = TRUE - if("reset_external_pressure") - send_signal(device_id, list("reset_external_pressure"), usr) - . = TRUE - if("reset_internal_pressure") - send_signal(device_id, list("reset_internal_pressure"), usr) - . = TRUE - if("threshold") - var/env = params["env"] - if(text2path(env)) - env = text2path(env) - - var/name = params["var"] - var/datum/tlv/tlv = TLV[env] - if(isnull(tlv)) - return - var/value = input("New [name] for [env]:", name, tlv.vars[name]) as num|null - if(!isnull(value) && !..()) - if(value < 0) - tlv.vars[name] = -1 - else - tlv.vars[name] = round(value, 0.01) - investigate_log(" treshold value for [env]:[name] was set to [value] by [key_name(usr)]",INVESTIGATE_ATMOS) - . = TRUE - if("mode") - mode = text2num(params["mode"]) - investigate_log("was turned to [get_mode_name(mode)] mode by [key_name(usr)]",INVESTIGATE_ATMOS) - apply_mode(usr) - . = TRUE - if("alarm") - var/area/A = get_area(src) - if(A.atmosalert(2, src)) - post_alert(2) - . = TRUE - if("reset") - var/area/A = get_area(src) - if(A.atmosalert(0, src)) - post_alert(0) - . = TRUE - update_icon() - - -/obj/machinery/airalarm/proc/reset(wire) - switch(wire) - if(WIRE_POWER) - if(!wires.is_cut(WIRE_POWER)) - shorted = FALSE - update_icon() - if(WIRE_AI) - if(!wires.is_cut(WIRE_AI)) - aidisabled = FALSE - - -/obj/machinery/airalarm/proc/shock(mob/user, prb) - if((stat & (NOPOWER))) // unpowered, no shock - return 0 - if(!prob(prb)) - return 0 //you lucked out, no shock for you - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() //sparks always. - if (electrocute_mob(user, get_area(src), src, 1, TRUE)) - return 1 - else - return 0 - -/obj/machinery/airalarm/proc/set_frequency(new_frequency) - SSradio.remove_object(src, frequency) - frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, RADIO_TO_AIRALARM) - -/obj/machinery/airalarm/proc/send_signal(target, list/command, atom/user)//sends signal 'command' to 'target'. Returns 0 if no radio connection, 1 otherwise - if(!radio_connection) - return 0 - - var/datum/signal/signal = new(command) - signal.data["tag"] = target - signal.data["sigtype"] = "command" - signal.data["user"] = user - radio_connection.post_signal(src, signal, RADIO_FROM_AIRALARM) - - return 1 - -/obj/machinery/airalarm/proc/get_mode_name(mode_value) - switch(mode_value) - if(AALARM_MODE_SCRUBBING) - return "Filtering" - if(AALARM_MODE_CONTAMINATED) - return "Contaminated" - if(AALARM_MODE_VENTING) - return "Draught" - if(AALARM_MODE_REFILL) - return "Refill" - if(AALARM_MODE_PANIC) - return "Panic Siphon" - if(AALARM_MODE_REPLACEMENT) - return "Cycle" - if(AALARM_MODE_SIPHON) - return "Siphon" - if(AALARM_MODE_OFF) - return "Off" - if(AALARM_MODE_FLOOD) - return "Flood" - -/obj/machinery/airalarm/proc/apply_mode(atom/signal_source) - var/area/A = get_area(src) - switch(mode) - if(AALARM_MODE_SCRUBBING) - for(var/device_id in A.air_scrub_names) - send_signal(device_id, list( - "power" = 1, - "set_filters" = list(/datum/gas/carbon_dioxide), - "scrubbing" = 1, - "widenet" = 0 - ), signal_source) - for(var/device_id in A.air_vent_names) - send_signal(device_id, list( - "power" = 1, - "checks" = 1, - "set_external_pressure" = ONE_ATMOSPHERE - ), signal_source) - if(AALARM_MODE_CONTAMINATED) - for(var/device_id in A.air_scrub_names) - send_signal(device_id, list( - "power" = 1, - "set_filters" = list( - /datum/gas/carbon_dioxide, - /datum/gas/miasma, - /datum/gas/plasma, - /datum/gas/water_vapor, - /datum/gas/hypernoblium, - /datum/gas/nitrous_oxide, - /datum/gas/nitryl, - /datum/gas/tritium, - /datum/gas/bz, - /datum/gas/stimulum, - /datum/gas/pluoxium - ), - "scrubbing" = 1, - "widenet" = 1 - ), signal_source) - for(var/device_id in A.air_vent_names) - send_signal(device_id, list( - "power" = 1, - "checks" = 1, - "set_external_pressure" = ONE_ATMOSPHERE - ), signal_source) - if(AALARM_MODE_VENTING) - for(var/device_id in A.air_scrub_names) - send_signal(device_id, list( - "power" = 1, - "widenet" = 0, - "scrubbing" = 0 - ), signal_source) - for(var/device_id in A.air_vent_names) - send_signal(device_id, list( - "power" = 1, - "checks" = 1, - "set_external_pressure" = ONE_ATMOSPHERE*2 - ), signal_source) - if(AALARM_MODE_REFILL) - for(var/device_id in A.air_scrub_names) - send_signal(device_id, list( - "power" = 1, - "set_filters" = list(/datum/gas/carbon_dioxide), - "scrubbing" = 1, - "widenet" = 0 - ), signal_source) - for(var/device_id in A.air_vent_names) - send_signal(device_id, list( - "power" = 1, - "checks" = 1, - "set_external_pressure" = ONE_ATMOSPHERE * 3 - ), signal_source) - if(AALARM_MODE_PANIC, - AALARM_MODE_REPLACEMENT) - for(var/device_id in A.air_scrub_names) - send_signal(device_id, list( - "power" = 1, - "widenet" = 1, - "scrubbing" = 0 - ), signal_source) - for(var/device_id in A.air_vent_names) - send_signal(device_id, list( - "power" = 0 - ), signal_source) - if(AALARM_MODE_SIPHON) - for(var/device_id in A.air_scrub_names) - send_signal(device_id, list( - "power" = 1, - "widenet" = 0, - "scrubbing" = 0 - ), signal_source) - for(var/device_id in A.air_vent_names) - send_signal(device_id, list( - "power" = 0 - ), signal_source) - - if(AALARM_MODE_OFF) - for(var/device_id in A.air_scrub_names) - send_signal(device_id, list( - "power" = 0 - ), signal_source) - for(var/device_id in A.air_vent_names) - send_signal(device_id, list( - "power" = 0 - ), signal_source) - if(AALARM_MODE_FLOOD) - for(var/device_id in A.air_scrub_names) - send_signal(device_id, list( - "power" = 0 - ), signal_source) - for(var/device_id in A.air_vent_names) - send_signal(device_id, list( - "power" = 1, - "checks" = 2, - "set_internal_pressure" = 0 - ), signal_source) - -/obj/machinery/airalarm/update_icon() - if(panel_open) - switch(buildstage) - if(2) - icon_state = "alarmx" - if(1) - icon_state = "alarm_b2" - if(0) - icon_state = "alarm_b1" - return - - if((stat & (NOPOWER|BROKEN)) || shorted) - icon_state = "alarmp" - return - - var/area/A = get_area(src) - switch(max(danger_level, A.atmosalm)) - if(0) - icon_state = "alarm0" - if(1) - icon_state = "alarm2" //yes, alarm2 is yellow alarm - if(2) - icon_state = "alarm1" - -/obj/machinery/airalarm/process() - if((stat & (NOPOWER|BROKEN)) || shorted) - return - - var/turf/location = get_turf(src) - if(!location) - return - - var/datum/tlv/cur_tlv - - var/datum/gas_mixture/environment = location.return_air() - var/list/env_gases = environment.gases - var/partial_pressure = R_IDEAL_GAS_EQUATION * environment.temperature / environment.volume - - cur_tlv = TLV["pressure"] - var/environment_pressure = environment.return_pressure() - var/pressure_dangerlevel = cur_tlv.get_danger_level(environment_pressure) - - cur_tlv = TLV["temperature"] - var/temperature_dangerlevel = cur_tlv.get_danger_level(environment.temperature) - - var/gas_dangerlevel = 0 - for(var/gas_id in env_gases) - if(!(gas_id in TLV)) // We're not interested in this gas, it seems. - continue - cur_tlv = TLV[gas_id] - gas_dangerlevel = max(gas_dangerlevel, cur_tlv.get_danger_level(env_gases[gas_id][MOLES] * partial_pressure)) - - environment.garbage_collect() - - var/old_danger_level = danger_level - danger_level = max(pressure_dangerlevel, temperature_dangerlevel, gas_dangerlevel) - - if(old_danger_level != danger_level) - apply_danger_level() - if(mode == AALARM_MODE_REPLACEMENT && environment_pressure < ONE_ATMOSPHERE * 0.05) - mode = AALARM_MODE_SCRUBBING - apply_mode(src) - - -/obj/machinery/airalarm/proc/post_alert(alert_level) - var/datum/radio_frequency/frequency = SSradio.return_frequency(alarm_frequency) - - if(!frequency) - return - - var/datum/signal/alert_signal = new(list( - "zone" = get_area_name(src), - "type" = "Atmospheric" - )) - if(alert_level==2) - alert_signal.data["alert"] = "severe" - else if (alert_level==1) - alert_signal.data["alert"] = "minor" - else if (alert_level==0) - alert_signal.data["alert"] = "clear" - - frequency.post_signal(src, alert_signal, range = -1) - -/obj/machinery/airalarm/proc/apply_danger_level() - var/area/A = get_area(src) - - var/new_area_danger_level = 0 - for(var/obj/machinery/airalarm/AA in A) - if (!(AA.stat & (NOPOWER|BROKEN)) && !AA.shorted) - new_area_danger_level = max(new_area_danger_level,AA.danger_level) - if(A.atmosalert(new_area_danger_level,src)) //if area was in normal state or if area was in alert state - post_alert(new_area_danger_level) - - update_icon() - -/obj/machinery/airalarm/attackby(obj/item/W, mob/user, params) - switch(buildstage) - if(2) - if(W.tool_behaviour == TOOL_WIRECUTTER && panel_open && wires.is_all_cut()) - W.play_tool_sound(src) - to_chat(user, "I cut the final wires.") - new /obj/item/stack/cable_coil(loc, 5) - buildstage = 1 - update_icon() - return - else if(W.tool_behaviour == TOOL_SCREWDRIVER) // Opening that Air Alarm up. - W.play_tool_sound(src) - panel_open = !panel_open - to_chat(user, "The wires have been [panel_open ? "exposed" : "unexposed"].") - update_icon() - return - else if(istype(W, /obj/item/card/id) || istype(W, /obj/item/pda))// trying to unlock the interface with an ID card - togglelock(user) - return - else if(panel_open && is_wire_tool(W)) - wires.interact(user) - return - if(1) - if(W.tool_behaviour == TOOL_CROWBAR) - user.visible_message("[user.name] removes the electronics from [src.name].", \ - "I start prying out the circuit...") - W.play_tool_sound(src) - if (W.use_tool(src, user, 20)) - if (buildstage == 1) - to_chat(user, "I remove the air alarm electronics.") - new /obj/item/electronics/airalarm( src.loc ) - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - buildstage = 0 - update_icon() - return - - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/cable = W - if(cable.get_amount() < 5) - to_chat(user, "I need five lengths of cable to wire the air alarm!") - return - user.visible_message("[user.name] wires the air alarm.", \ - "I start wiring the air alarm...") - if (do_after(user, 20, target = src)) - if (cable.get_amount() >= 5 && buildstage == 1) - cable.use(5) - to_chat(user, "I wire the air alarm.") - wires.repair() - aidisabled = 0 - locked = FALSE - mode = 1 - shorted = 0 - post_alert(0) - buildstage = 2 - update_icon() - return - if(0) - if(istype(W, /obj/item/electronics/airalarm)) - if(user.temporarilyRemoveItemFromInventory(W)) - to_chat(user, "I insert the circuit.") - buildstage = 1 - update_icon() - qdel(W) - return - - if(istype(W, /obj/item/electroadaptive_pseudocircuit)) - var/obj/item/electroadaptive_pseudocircuit/P = W - if(!P.adapt_circuit(user, 25)) - return - user.visible_message("[user] fabricates a circuit and places it into [src].", \ - "I adapt an air alarm circuit and slot it into the assembly.") - buildstage = 1 - update_icon() - return - - if(W.tool_behaviour == TOOL_WRENCH) - to_chat(user, "I detach \the [src] from the wall.") - W.play_tool_sound(src) - new /obj/item/wallframe/airalarm( user.loc ) - qdel(src) - return - - return ..() - -/obj/machinery/airalarm/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - if((buildstage == 0) && (the_rcd.upgrade & RCD_UPGRADE_SIMPLE_CIRCUITS)) - return list("mode" = RCD_UPGRADE_SIMPLE_CIRCUITS, "delay" = 20, "cost" = 1) - return FALSE - -/obj/machinery/airalarm/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) - switch(passed_mode) - if(RCD_UPGRADE_SIMPLE_CIRCUITS) - user.visible_message("[user] fabricates a circuit and places it into [src].", \ - "I adapt an air alarm circuit and slot it into the assembly.") - buildstage = 1 - update_icon() - return TRUE - return FALSE - -/obj/machinery/airalarm/AltClick(mob/user) - ..() - if(!user.canUseTopic(src, !issilicon(user)) || !isturf(loc)) - return - else - togglelock(user) - -/obj/machinery/airalarm/proc/togglelock(mob/living/user) - if(stat & (NOPOWER|BROKEN)) - to_chat(user, "It does nothing!") - else - if(src.allowed(usr) && !wires.is_cut(WIRE_IDSCAN)) - locked = !locked - to_chat(user, "I [ locked ? "lock" : "unlock"] the air alarm interface.") - updateUsrDialog() - else - to_chat(user, "Access denied.") - return - -/obj/machinery/airalarm/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - obj_flags |= EMAGGED - visible_message("Sparks fly out of [src]!", "I emag [src], disabling its safeties.") - playsound(src, "sparks", 50, TRUE) - -/obj/machinery/airalarm/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/sheet/metal(loc, 2) - var/obj/item/I = new /obj/item/electronics/airalarm(loc) - if(!disassembled) - I.obj_integrity = I.max_integrity * 0.5 - new /obj/item/stack/cable_coil(loc, 3) - qdel(src) - -#undef AALARM_MODE_SCRUBBING -#undef AALARM_MODE_VENTING -#undef AALARM_MODE_PANIC -#undef AALARM_MODE_REPLACEMENT -#undef AALARM_MODE_OFF -#undef AALARM_MODE_FLOOD -#undef AALARM_MODE_SIPHON -#undef AALARM_MODE_CONTAMINATED -#undef AALARM_MODE_REFILL -#undef AALARM_REPORT_TIMEOUT diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index a8b7d8c92e..072009cdae 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -170,15 +170,6 @@ nodes[nodes.Find(reference)] = null update_icon() -/obj/machinery/atmospherics/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/pipe)) //lets you autodrop - var/obj/item/pipe/pipe = W - if(user.dropItemToGround(pipe)) - pipe.setPipingLayer(piping_layer) //align it with us - return TRUE - else - return ..() - /obj/machinery/atmospherics/wrench_act(mob/living/user, obj/item/I) if(!can_unwrench(user)) return ..() @@ -234,16 +225,6 @@ // speed is pressures / 1250 user.throw_at(get_edge_target_turf(user, get_dir(src, user) || pick(GLOB.cardinals)), pressures / 250, pressures / 1250) -/obj/machinery/atmospherics/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - if(can_unwrench) - var/obj/item/pipe/stored = new construction_type(loc, null, dir, src) - stored.setPipingLayer(piping_layer) - if(!disassembled) - stored.obj_integrity = stored.max_integrity * 0.5 - transfer_fingerprints_to(stored) - ..() - /obj/machinery/atmospherics/proc/getpipeimage(iconset, iconstate, direction, col=rgb(255,255,255), piping_layer=2) //Add identifiers for the iconset @@ -279,10 +260,7 @@ L.ventcrawl_layer = piping_layer return ..() -/obj/machinery/atmospherics/singularity_pull(S, current_size) - if(current_size >= STAGE_FIVE) - deconstruct(FALSE) - return ..() +/obj/machinery/atmospherics/singularity_pull() #define VENT_SOUND_DELAY 30 diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm deleted file mode 100644 index 4f75229a76..0000000000 --- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm +++ /dev/null @@ -1,190 +0,0 @@ -//node2, air2, network2 correspond to input -//node1, air1, network1 correspond to output -#define CIRCULATOR_HOT 0 -#define CIRCULATOR_COLD 1 - -/obj/machinery/atmospherics/components/binary/circulator - name = "circulator/heat exchanger" - desc = "" - icon_state = "circ-off-0" - - var/active = FALSE - - var/last_pressure_delta = 0 - pipe_flags = PIPING_ONE_PER_TURF | PIPING_DEFAULT_LAYER_ONLY - - density = TRUE - - - var/flipped = 0 - var/mode = CIRCULATOR_HOT - var/obj/machinery/power/generator/generator - -//default cold circ for mappers -/obj/machinery/atmospherics/components/binary/circulator/cold - mode = CIRCULATOR_COLD - -/obj/machinery/atmospherics/components/binary/circulator/Initialize(mapload) - .=..() - component_parts = list(new /obj/item/circuitboard/machine/circulator) - -/obj/machinery/atmospherics/components/binary/circulator/ComponentInitialize() - . = ..() - AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ) - -/obj/machinery/atmospherics/components/binary/circulator/Destroy() - if(generator) - disconnectFromGenerator() - return ..() - -/obj/machinery/atmospherics/components/binary/circulator/proc/return_transfer_air() - - var/datum/gas_mixture/air1 = airs[1] - var/datum/gas_mixture/air2 = airs[2] - - var/output_starting_pressure = air1.return_pressure() - var/input_starting_pressure = air2.return_pressure() - - if(output_starting_pressure >= input_starting_pressure-10) - //Need at least 10 KPa difference to overcome friction in the mechanism - last_pressure_delta = 0 - return null - - //Calculate necessary moles to transfer using PV = nRT - if(air2.temperature>0) - var/pressure_delta = (input_starting_pressure - output_starting_pressure)/2 - - var/transfer_moles = pressure_delta*air1.volume/(air2.temperature * R_IDEAL_GAS_EQUATION) - - last_pressure_delta = pressure_delta - - //Actually transfer the gas - var/datum/gas_mixture/removed = air2.remove(transfer_moles) - - update_parents() - - return removed - - else - last_pressure_delta = 0 - -/obj/machinery/atmospherics/components/binary/circulator/process_atmos() - ..() - update_icon() - -/obj/machinery/atmospherics/components/binary/circulator/update_icon() - if(!is_operational()) - icon_state = "circ-p-[flipped]" - else if(last_pressure_delta > 0) - if(last_pressure_delta > ONE_ATMOSPHERE) - icon_state = "circ-run-[flipped]" - else - icon_state = "circ-slow-[flipped]" - else - icon_state = "circ-off-[flipped]" - -/obj/machinery/atmospherics/components/binary/circulator/wrench_act(mob/living/user, obj/item/I) - if(!panel_open) - return - anchored = !anchored - I.play_tool_sound(src) - if(generator) - disconnectFromGenerator() - to_chat(user, "I [anchored?"secure":"unsecure"] [src].") - - - var/obj/machinery/atmospherics/node1 = nodes[1] - var/obj/machinery/atmospherics/node2 = nodes[2] - - if(node1) - node1.disconnect(src) - nodes[1] = null - nullifyPipenet(parents[1]) - if(node2) - node2.disconnect(src) - nodes[2] = null - nullifyPipenet(parents[2]) - - if(anchored) - SetInitDirections() - atmosinit() - node1 = nodes[1] - if(node1) - node1.atmosinit() - node1.addMember(src) - node2 = nodes[2] - if(node2) - node2.atmosinit() - node2.addMember(src) - build_network() - - return TRUE - -/obj/machinery/atmospherics/components/binary/circulator/SetInitDirections() - switch(dir) - if(NORTH, SOUTH) - initialize_directions = EAST|WEST - if(EAST, WEST) - initialize_directions = NORTH|SOUTH - -/obj/machinery/atmospherics/components/binary/circulator/getNodeConnects() - if(flipped) - return list(turn(dir, 270), turn(dir, 90)) - return list(turn(dir, 90), turn(dir, 270)) - -/obj/machinery/atmospherics/components/binary/circulator/can_be_node(obj/machinery/atmospherics/target) - if(anchored) - return ..(target) - return FALSE - -/obj/machinery/atmospherics/components/binary/circulator/multitool_act(mob/living/user, obj/item/I) - if(generator) - disconnectFromGenerator() - mode = !mode - to_chat(user, "I set [src] to [mode?"cold":"hot"] mode.") - return TRUE - -/obj/machinery/atmospherics/components/binary/circulator/screwdriver_act(mob/user, obj/item/I) - if(..()) - return TRUE - panel_open = !panel_open - I.play_tool_sound(src) - to_chat(user, "I [panel_open?"open":"close"] the panel on [src].") - return TRUE - -/obj/machinery/atmospherics/components/binary/circulator/crowbar_act(mob/user, obj/item/I) - default_deconstruction_crowbar(I) - return TRUE - -/obj/machinery/atmospherics/components/binary/circulator/on_deconstruction() - if(generator) - disconnectFromGenerator() - -/obj/machinery/atmospherics/components/binary/circulator/proc/disconnectFromGenerator() - if(mode) - generator.cold_circ = null - else - generator.hot_circ = null - generator.update_icon() - generator = null - -/obj/machinery/atmospherics/components/binary/circulator/setPipingLayer(new_layer) - ..() - pixel_x = 0 - pixel_y = 0 - -/obj/machinery/atmospherics/components/binary/circulator/verb/circulator_flip() - set name = "Flip" - set hidden = 1 - set src in oview(1) - - if(!ishuman(usr)) - return - - if(anchored) - to_chat(usr, "[src] is anchored!") - return - - flipped = !flipped - to_chat(usr, "I flip [src].") - update_icon() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index 11837e596e..b046fb57c4 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -23,7 +23,6 @@ Passive gate is similar to the regular pump except: var/id = null var/datum/radio_frequency/radio_connection - construction_type = /obj/item/pipe/directional pipe_state = "passivegate" ui_x = 335 diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index 19667d56c4..017fc20a3b 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -24,7 +24,6 @@ var/id = null var/datum/radio_frequency/radio_connection - construction_type = /obj/item/pipe/directional pipe_state = "pump" ui_x = 335 diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm index 4e3769ede4..4f371b84c4 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm @@ -19,7 +19,6 @@ It's like a regular ol' straight pipe, but you can turn it on and off. var/valve_type = "m" //lets us have a nice, clean, OOP update_icon_nopipes() - construction_type = /obj/item/pipe/binary pipe_state = "mvalve" var/switching = FALSE diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index 628f440b31..fd71008705 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -25,7 +25,6 @@ var/id = null var/datum/radio_frequency/radio_connection - construction_type = /obj/item/pipe/directional pipe_state = "volumepump" ui_x = 335 diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index 41ac648587..908553fb8e 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -11,7 +11,6 @@ var/frequency = 0 var/datum/radio_frequency/radio_connection - construction_type = /obj/item/pipe/trinary/flippable pipe_state = "filter" ui_x = 390 diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm index e3ac7daf37..1d038d9295 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm @@ -11,7 +11,6 @@ var/node1_concentration = 0.5 var/node2_concentration = 0.5 - construction_type = /obj/item/pipe/trinary/flippable pipe_state = "mixer" ui_x = 370 diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm deleted file mode 100644 index b2366afe7d..0000000000 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ /dev/null @@ -1,466 +0,0 @@ -#define CRYOMOBS 'icons/obj/cryo_mobs.dmi' - -/obj/machinery/atmospherics/components/unary/cryo_cell - name = "cryo cell" - icon = 'icons/obj/cryogenics.dmi' - icon_state = "pod-off" - density = TRUE - max_integrity = 350 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 30, "acid" = 30) - layer = ABOVE_WINDOW_LAYER - state_open = FALSE - circuit = /obj/item/circuitboard/machine/cryo_tube - ui_x = 400 - ui_y = 550 - pipe_flags = PIPING_ONE_PER_TURF | PIPING_DEFAULT_LAYER_ONLY - occupant_typecache = list(/mob/living/carbon, /mob/living/simple_animal) - - var/autoeject = TRUE - var/volume = 100 - - var/efficiency = 1 - var/sleep_factor = 0.00125 - var/unconscious_factor = 0.001 - var/heat_capacity = 20000 - var/conduction_coefficient = 0.3 - - var/obj/item/reagent_containers/glass/beaker = null - var/reagent_transfer = 0 - - var/obj/item/radio/radio - var/radio_key = /obj/item/encryptionkey/headset_med - var/radio_channel = RADIO_CHANNEL_MEDICAL - - var/running_anim = FALSE - - var/escape_in_progress = FALSE - var/message_cooldown - var/breakout_time = 300 - fair_market_price = 10 - payment_department = ACCOUNT_MED - - -/obj/machinery/atmospherics/components/unary/cryo_cell/Initialize() - . = ..() - initialize_directions = dir - - radio = new(src) - radio.keyslot = new radio_key - radio.subspace_transmission = TRUE - radio.canhear_range = 0 - radio.recalculateChannels() - -/obj/machinery/atmospherics/components/unary/cryo_cell/Exited(atom/movable/AM, atom/newloc) - var/oldoccupant = occupant - . = ..() // Parent proc takes care of removing occupant if necessary - if (AM == oldoccupant) - update_icon() - -/obj/machinery/atmospherics/components/unary/cryo_cell/on_construction() - ..(dir, dir) - -/obj/machinery/atmospherics/components/unary/cryo_cell/RefreshParts() - var/C - for(var/obj/item/stock_parts/matter_bin/M in component_parts) - C += M.rating - - efficiency = initial(efficiency) * C - sleep_factor = initial(sleep_factor) * C - unconscious_factor = initial(unconscious_factor) * C - heat_capacity = initial(heat_capacity) / C - conduction_coefficient = initial(conduction_coefficient) * C - -/obj/machinery/atmospherics/components/unary/cryo_cell/examine(mob/user) //this is leaving out everything but efficiency since they follow the same idea of "better beaker, better results" - . = ..() - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Efficiency at [efficiency*100]%." - -/obj/machinery/atmospherics/components/unary/cryo_cell/Destroy() - QDEL_NULL(radio) - QDEL_NULL(beaker) - return ..() - -/obj/machinery/atmospherics/components/unary/cryo_cell/contents_explosion(severity, target) - ..() - if(beaker) - beaker.ex_act(severity, target) - -/obj/machinery/atmospherics/components/unary/cryo_cell/handle_atom_del(atom/A) - ..() - if(A == beaker) - beaker = null - updateUsrDialog() - -/obj/machinery/atmospherics/components/unary/cryo_cell/on_deconstruction() - if(beaker) - beaker.forceMove(drop_location()) - beaker = null - -/obj/machinery/atmospherics/components/unary/cryo_cell/update_icon() - - cut_overlays() - - if(panel_open) - add_overlay("pod-panel") - - if(state_open) - icon_state = "pod-open" - return - - if(occupant) - var/image/occupant_overlay - - if(ismonkey(occupant)) // Monkey - occupant_overlay = image(CRYOMOBS, "monkey") - else if(isalienadult(occupant)) - if(isalienroyal(occupant)) // Queen and prae - occupant_overlay = image(CRYOMOBS, "alienq") - else if(isalienhunter(occupant)) // Hunter - occupant_overlay = image(CRYOMOBS, "alienh") - else if(isaliensentinel(occupant)) // Sentinel - occupant_overlay = image(CRYOMOBS, "aliens") - else // Drone or other - occupant_overlay = image(CRYOMOBS, "aliend") - - else if(ishuman(occupant) || islarva(occupant) || (isanimal(occupant) && !ismegafauna(occupant))) // Mobs that are smaller than cryotube - occupant_overlay = image(occupant.icon, occupant.icon_state) - occupant_overlay.copy_overlays(occupant) - - else - occupant_overlay = image(CRYOMOBS, "generic") - - occupant_overlay.dir = SOUTH - occupant_overlay.pixel_y = 22 - - if(on && !running_anim && is_operational()) - icon_state = "pod-on" - running_anim = TRUE - run_anim(TRUE, occupant_overlay) - else - icon_state = "pod-off" - add_overlay(occupant_overlay) - add_overlay("cover-off") - - else if(on && is_operational()) - icon_state = "pod-on" - add_overlay("cover-on") - else - icon_state = "pod-off" - add_overlay("cover-off") - -/obj/machinery/atmospherics/components/unary/cryo_cell/proc/run_anim(anim_up, image/occupant_overlay) - if(!on || !occupant || !is_operational()) - running_anim = FALSE - return - cut_overlays() - if(occupant_overlay.pixel_y != 23) // Same effect as occupant_overlay.pixel_y == 22 || occupant_overlay.pixel_y == 24 - anim_up = occupant_overlay.pixel_y == 22 // Same effect as if(occupant_overlay.pixel_y == 22) anim_up = TRUE ; if(occupant_overlay.pixel_y == 24) anim_up = FALSE - if(anim_up) - occupant_overlay.pixel_y++ - else - occupant_overlay.pixel_y-- - add_overlay(occupant_overlay) - add_overlay("cover-on") - addtimer(CALLBACK(src, PROC_REF(run_anim), anim_up, occupant_overlay), 7, TIMER_UNIQUE) - -/obj/machinery/atmospherics/components/unary/cryo_cell/nap_violation(mob/violator) - open_machine() - -/obj/machinery/atmospherics/components/unary/cryo_cell/process() - ..() - - if(!on) - return - if(!is_operational()) - on = FALSE - update_icon() - return - if(!occupant) - return - - var/mob/living/mob_occupant = occupant - if(!check_nap_violations()) - return - if(mob_occupant.stat == DEAD) // We don't bother with dead people. - return - - if(mob_occupant.health >= mob_occupant.getMaxHealth()) // Don't bother with fully healed people. - on = FALSE - update_icon() - playsound(src, 'sound/blank.ogg', volume) // Bug the doctors. - var/msg = "Patient fully restored." - if(autoeject) // Eject if configured. - msg += " Auto ejecting patient now." - open_machine() - radio.talk_into(src, msg, radio_channel) - return - - var/datum/gas_mixture/air1 = airs[1] - - if(air1.gases.len) - if(mob_occupant.bodytemperature < T0C) // Sleepytime. Why? More cryo magic. - mob_occupant.Sleeping((mob_occupant.bodytemperature * sleep_factor) * 2000) - mob_occupant.Unconscious((mob_occupant.bodytemperature * unconscious_factor) * 2000) - if(beaker) - if(reagent_transfer == 0) // Magically transfer reagents. Because cryo magic. - beaker.reagents.trans_to(occupant, 1, efficiency * 0.25) // Transfer reagents. - beaker.reagents.reaction(occupant, VAPOR) - air1.gases[/datum/gas/oxygen][MOLES] -= max(0,air1.gases[/datum/gas/oxygen][MOLES] - 2 / efficiency) //Let's use gas for this - air1.garbage_collect() - if(++reagent_transfer >= 10 * efficiency) // Throttle reagent transfer (higher efficiency will transfer the same amount but consume less from the beaker). - reagent_transfer = 0 - - return 1 - -/obj/machinery/atmospherics/components/unary/cryo_cell/process_atmos() - ..() - - if(!on) - return - - var/datum/gas_mixture/air1 = airs[1] - - if(!nodes[1] || !airs[1] || !air1.gases.len || air1.gases[/datum/gas/oxygen][MOLES] < 5) // Turn off if the machine won't work. - on = FALSE - update_icon() - return - - if(occupant) - var/mob/living/mob_occupant = occupant - var/cold_protection = 0 - var/temperature_delta = air1.temperature - mob_occupant.bodytemperature // The only semi-realistic thing here: share temperature between the cell and the occupant. - - if(ishuman(occupant)) - var/mob/living/carbon/human/H = occupant - cold_protection = H.get_cold_protection(air1.temperature) - - if(abs(temperature_delta) > 1) - var/air_heat_capacity = air1.heat_capacity() - - var/heat = ((1 - cold_protection) * 0.1 + conduction_coefficient) * temperature_delta * (air_heat_capacity * heat_capacity / (air_heat_capacity + heat_capacity)) - - air1.temperature = max(air1.temperature - heat / air_heat_capacity, TCMB) - mob_occupant.adjust_bodytemperature(heat / heat_capacity, TCMB) - - air1.gases[/datum/gas/oxygen][MOLES] = max(0,air1.gases[/datum/gas/oxygen][MOLES] - 0.5 / efficiency) // Magically consume gas? Why not, we run on cryo magic. - air1.garbage_collect() - -/obj/machinery/atmospherics/components/unary/cryo_cell/relaymove(mob/user) - if(message_cooldown <= world.time) - message_cooldown = world.time + 50 - to_chat(user, "[src]'s door won't budge!") - -/obj/machinery/atmospherics/components/unary/cryo_cell/open_machine(drop = FALSE) - if(!state_open && !panel_open) - on = FALSE - for(var/mob/M in contents) //only drop mobs - M.forceMove(get_turf(src)) - if(isliving(M)) - var/mob/living/L = M - L.update_mobility() - occupant = null - flick("pod-open-anim", src) - ..() - -/obj/machinery/atmospherics/components/unary/cryo_cell/close_machine(mob/living/carbon/user) - if((isnull(user) || istype(user)) && state_open && !panel_open) - flick("pod-close-anim", src) - ..(user) - return occupant - -/obj/machinery/atmospherics/components/unary/cryo_cell/container_resist(mob/living/user) - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT - user.visible_message("I see [user] kicking against the glass of [src]!", \ - "I struggle inside [src], kicking the release with your foot... (this will take about [DisplayTimeText(breakout_time)].)", \ - "I hear a thump from [src].") - if(do_after(user, breakout_time, target = src)) - if(!user || user.stat != CONSCIOUS || user.loc != src ) - return - user.visible_message("[user] successfully broke out of [src]!", \ - "I successfully break out of [src]!") - open_machine() - -/obj/machinery/atmospherics/components/unary/cryo_cell/examine(mob/user) - . = ..() - if(occupant) - if(on) - . += "Someone's inside [src]!" - else - . += "You can barely make out a form floating in [src]." - else - . += "[src] seems empty." - -/obj/machinery/atmospherics/components/unary/cryo_cell/MouseDrop_T(mob/target, mob/user) - if(user.incapacitated() || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser()) - return - if(isliving(target)) - var/mob/living/L = target - if(L.incapacitated()) - close_machine(target) - else - user.visible_message("[user] starts shoving [target] inside [src].", "I start shoving [target] inside [src].") - if (do_after(user, 25, target=target)) - close_machine(target) - -/obj/machinery/atmospherics/components/unary/cryo_cell/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers/glass)) - . = 1 //no afterattack - if(beaker) - to_chat(user, "A beaker is already loaded into [src]!") - return - if(!user.transferItemToLoc(I, src)) - return - beaker = I - user.visible_message("[user] places [I] in [src].", \ - "I place [I] in [src].") - var/reagentlist = pretty_string_from_reagent_list(I.reagents.reagent_list) - log_game("[key_name(user)] added an [I] to cryo containing [reagentlist]") - return - if(!on && !occupant && !state_open && (default_deconstruction_screwdriver(user, "pod-off", "pod-off", I)) \ - || default_change_direction_wrench(user, I) \ - || default_pry_open(I) \ - || default_deconstruction_crowbar(I)) - update_icon() - return - else if(I.tool_behaviour == TOOL_SCREWDRIVER) - to_chat(user, "I can't access the maintenance panel while the pod is " \ - + (on ? "active" : (occupant ? "full" : "open")) + "!") - return - return ..() - -/obj/machinery/atmospherics/components/unary/cryo_cell/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "cryo", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/atmospherics/components/unary/cryo_cell/ui_data() - var/list/data = list() - data["isOperating"] = on - data["hasOccupant"] = occupant ? TRUE : FALSE - data["isOpen"] = state_open - data["autoEject"] = autoeject - - data["occupant"] = list() - if(occupant) - var/mob/living/mob_occupant = occupant - data["occupant"]["name"] = mob_occupant.name - switch(mob_occupant.stat) - if(CONSCIOUS) - data["occupant"]["stat"] = "Conscious" - data["occupant"]["statstate"] = "good" - if(SOFT_CRIT) - data["occupant"]["stat"] = "Conscious" - data["occupant"]["statstate"] = "average" - if(UNCONSCIOUS) - data["occupant"]["stat"] = "Unconscious" - data["occupant"]["statstate"] = "average" - if(DEAD) - data["occupant"]["stat"] = "Dead" - data["occupant"]["statstate"] = "bad" - data["occupant"]["health"] = round(mob_occupant.health, 1) - data["occupant"]["maxHealth"] = mob_occupant.maxHealth - data["occupant"]["minHealth"] = HEALTH_THRESHOLD_DEAD - data["occupant"]["bruteLoss"] = round(mob_occupant.getBruteLoss(), 1) - data["occupant"]["oxyLoss"] = round(mob_occupant.getOxyLoss(), 1) - data["occupant"]["toxLoss"] = round(mob_occupant.getToxLoss(), 1) - data["occupant"]["fireLoss"] = round(mob_occupant.getFireLoss(), 1) - data["occupant"]["bodyTemperature"] = round(mob_occupant.bodytemperature, 1) - if(mob_occupant.bodytemperature < TCRYO) - data["occupant"]["temperaturestatus"] = "good" - else if(mob_occupant.bodytemperature < T0C) - data["occupant"]["temperaturestatus"] = "average" - else - data["occupant"]["temperaturestatus"] = "bad" - - var/datum/gas_mixture/air1 = airs[1] - data["cellTemperature"] = round(air1.temperature, 1) - - data["isBeakerLoaded"] = beaker ? TRUE : FALSE - var/beakerContents = list() - if(beaker && beaker.reagents && beaker.reagents.reagent_list.len) - for(var/datum/reagent/R in beaker.reagents.reagent_list) - beakerContents += list(list("name" = R.name, "volume" = R.volume)) - data["beakerContents"] = beakerContents - return data - -/obj/machinery/atmospherics/components/unary/cryo_cell/ui_act(action, params) - if(..()) - return - switch(action) - if("power") - if(on) - on = FALSE - else if(!state_open) - on = TRUE - update_icon() - . = TRUE - if("door") - if(state_open) - close_machine() - else - open_machine() - . = TRUE - if("autoeject") - autoeject = !autoeject - . = TRUE - if("ejectbeaker") - if(beaker) - beaker.forceMove(drop_location()) - if(Adjacent(usr) && !issilicon(usr)) - usr.put_in_hands(beaker) - beaker = null - . = TRUE - -/obj/machinery/atmospherics/components/unary/cryo_cell/CtrlClick(mob/user) - if(user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK) && !state_open) - on = !on - update_icon() - return ..() - -/obj/machinery/atmospherics/components/unary/cryo_cell/AltClick(mob/user) - if(user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - if(state_open) - close_machine() - else - open_machine() - return ..() - -/obj/machinery/atmospherics/components/unary/cryo_cell/update_remote_sight(mob/living/user) - return // we don't see the pipe network while inside cryo. - -/obj/machinery/atmospherics/components/unary/cryo_cell/get_remote_view_fullscreens(mob/user) - user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 1) - -/obj/machinery/atmospherics/components/unary/cryo_cell/can_crawl_through() - return // can't ventcrawl in or out of cryo. - -/obj/machinery/atmospherics/components/unary/cryo_cell/can_see_pipes() - return 0 // you can't see the pipe network when inside a cryo cell. - -/obj/machinery/atmospherics/components/unary/cryo_cell/return_temperature() - var/datum/gas_mixture/G = airs[1] - - if(G.total_moles() > 10) - return G.temperature - return ..() - -/obj/machinery/atmospherics/components/unary/cryo_cell/default_change_direction_wrench(mob/user, obj/item/wrench/W) - . = ..() - if(.) - SetInitDirections() - var/obj/machinery/atmospherics/node = nodes[1] - if(node) - node.disconnect(src) - nodes[1] = null - nullifyPipenet(parents[1]) - atmosinit() - node = nodes[1] - if(node) - node.atmosinit() - node.addMember(src) - build_network() - -#undef CRYOMOBS diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm deleted file mode 100644 index f2ccb3b7b7..0000000000 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ /dev/null @@ -1,235 +0,0 @@ -/obj/machinery/atmospherics/components/unary/thermomachine - icon = 'icons/obj/atmospherics/components/thermomachine.dmi' - icon_state = "freezer" - - name = "thermomachine" - desc = "" - - density = TRUE - max_integrity = 300 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 30) - layer = OBJ_LAYER - circuit = /obj/item/circuitboard/machine/thermomachine - ui_x = 300 - ui_y = 230 - - pipe_flags = PIPING_ONE_PER_TURF | PIPING_DEFAULT_LAYER_ONLY - - var/icon_state_off = "freezer" - var/icon_state_on = "freezer_1" - var/icon_state_open = "freezer-o" - - var/min_temperature = 0 - var/max_temperature = 0 - var/target_temperature = T20C - var/heat_capacity = 0 - var/interactive = TRUE // So mapmakers can disable interaction. - -/obj/machinery/atmospherics/components/unary/thermomachine/Initialize() - . = ..() - initialize_directions = dir - -/obj/machinery/atmospherics/components/unary/thermomachine/on_construction() - ..(dir,dir) - -/obj/machinery/atmospherics/components/unary/thermomachine/RefreshParts() - var/B - for(var/obj/item/stock_parts/matter_bin/M in component_parts) - B += M.rating - heat_capacity = 5000 * ((B - 1) ** 2) - -/obj/machinery/atmospherics/components/unary/thermomachine/update_icon() - if(panel_open) - icon_state = icon_state_open - else if(on && is_operational()) - icon_state = icon_state_on - else - icon_state = icon_state_off - -/obj/machinery/atmospherics/components/unary/thermomachine/update_icon_nopipes() - cut_overlays() - if(showpipe) - add_overlay(getpipeimage(icon, "scrub_cap", initialize_directions)) - -/obj/machinery/atmospherics/components/unary/thermomachine/examine(mob/user) - . = ..() - . += "The thermostat is set to [target_temperature]K ([(T0C-target_temperature)*-1]C)." - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Efficiency [(heat_capacity/5000)*100]%." - . += "Temperature range [min_temperature]K - [max_temperature]K ([(T0C-min_temperature)*-1]C - [(T0C-max_temperature)*-1]C)." - -/obj/machinery/atmospherics/components/unary/thermomachine/process_atmos() - ..() - if(!on || !nodes[1]) - return - var/datum/gas_mixture/air_contents = airs[1] - - var/air_heat_capacity = air_contents.heat_capacity() - var/combined_heat_capacity = heat_capacity + air_heat_capacity - var/old_temperature = air_contents.temperature - - if(combined_heat_capacity > 0) - var/combined_energy = heat_capacity * target_temperature + air_heat_capacity * air_contents.temperature - air_contents.temperature = combined_energy/combined_heat_capacity - - var/temperature_delta= abs(old_temperature - air_contents.temperature) - if(temperature_delta > 1) - active_power_usage = (heat_capacity * temperature_delta) / 10 + idle_power_usage - update_parents() - else - active_power_usage = idle_power_usage - return 1 - -/obj/machinery/atmospherics/components/unary/thermomachine/attackby(obj/item/I, mob/user, params) - if(!on) - if(default_deconstruction_screwdriver(user, icon_state_open, icon_state_off, I)) - return - if(default_change_direction_wrench(user, I)) - return - if(default_deconstruction_crowbar(I)) - return - return ..() - -/obj/machinery/atmospherics/components/unary/thermomachine/default_change_direction_wrench(mob/user, obj/item/I) - if(!..()) - return FALSE - SetInitDirections() - var/obj/machinery/atmospherics/node = nodes[1] - if(node) - node.disconnect(src) - nodes[1] = null - nullifyPipenet(parents[1]) - - atmosinit() - node = nodes[1] - if(node) - node.atmosinit() - node.addMember(src) - build_network() - return TRUE - -/obj/machinery/atmospherics/components/unary/thermomachine/ui_status(mob/user) - if(interactive) - return ..() - return UI_CLOSE - -/obj/machinery/atmospherics/components/unary/thermomachine/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "thermomachine", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/atmospherics/components/unary/thermomachine/ui_data(mob/user) - var/list/data = list() - data["on"] = on - - data["min"] = min_temperature - data["max"] = max_temperature - data["target"] = target_temperature - data["initial"] = initial(target_temperature) - - var/datum/gas_mixture/air1 = airs[1] - data["temperature"] = air1.temperature - data["pressure"] = air1.return_pressure() - return data - -/obj/machinery/atmospherics/components/unary/thermomachine/ui_act(action, params) - - if(..()) - return - - switch(action) - if("power") - on = !on - use_power = on ? ACTIVE_POWER_USE : IDLE_POWER_USE - investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS) - . = TRUE - if("target") - var/target = params["target"] - var/adjust = text2num(params["adjust"]) - if(target == "input") - target = input("Set new target ([min_temperature]-[max_temperature] K):", name, target_temperature) as num|null - if(!isnull(target)) - . = TRUE - else if(adjust) - target = target_temperature + adjust - . = TRUE - else if(text2num(target) != null) - target = text2num(target) - . = TRUE - if(.) - target_temperature = CLAMP(target, min_temperature, max_temperature) - investigate_log("was set to [target_temperature] K by [key_name(usr)]", INVESTIGATE_ATMOS) - - update_icon() - -/obj/machinery/atmospherics/components/unary/thermomachine/CtrlClick(mob/living/user) - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE)) - return - on = !on - update_icon() - -/obj/machinery/atmospherics/components/unary/thermomachine/freezer - name = "freezer" - icon_state = "freezer" - icon_state_off = "freezer" - icon_state_on = "freezer_1" - icon_state_open = "freezer-o" - max_temperature = T20C - min_temperature = 170 //actual minimum temperature is defined by RefreshParts() - circuit = /obj/item/circuitboard/machine/thermomachine/freezer - -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on - on = TRUE - icon_state = "freezer_1" - -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/Initialize() - . = ..() - if(target_temperature == initial(target_temperature)) - target_temperature = min_temperature - -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/coldroom - name = "cold room freezer" - -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/coldroom/Initialize() - . = ..() - target_temperature = T0C-80 - -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/RefreshParts() - ..() - var/L - for(var/obj/item/stock_parts/micro_laser/M in component_parts) - L += M.rating - min_temperature = max(T0C - (initial(min_temperature) + L * 15), TCMB) //73.15K with T1 stock parts - -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/AltClick(mob/living/user) - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE)) - return - target_temperature = min_temperature - -/obj/machinery/atmospherics/components/unary/thermomachine/heater - name = "heater" - icon_state = "heater" - icon_state_off = "heater" - icon_state_on = "heater_1" - icon_state_open = "heater-o" - max_temperature = 140 //actual maximum temperature is defined by RefreshParts() - min_temperature = T20C - circuit = /obj/item/circuitboard/machine/thermomachine/heater - -/obj/machinery/atmospherics/components/unary/thermomachine/heater/on - on = TRUE - icon_state = "heater_1" - -/obj/machinery/atmospherics/components/unary/thermomachine/heater/RefreshParts() - ..() - var/L - for(var/obj/item/stock_parts/micro_laser/M in component_parts) - L += M.rating - max_temperature = T20C + (initial(max_temperature) * L) //573.15K with T1 stock parts - -/obj/machinery/atmospherics/components/unary/thermomachine/heater/AltClick(mob/living/user) - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE)) - return - target_temperature = max_temperature diff --git a/code/modules/atmospherics/machinery/components/unary_devices/unary_devices.dm b/code/modules/atmospherics/machinery/components/unary_devices/unary_devices.dm index 40c2f0f5a8..aa98012101 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/unary_devices.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/unary_devices.dm @@ -4,7 +4,6 @@ initialize_directions = SOUTH device_type = UNARY pipe_flags = PIPING_ONE_PER_TURF - construction_type = /obj/item/pipe/directional var/uid var/static/gl_uid = 1 diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index c27f5b51a8..d5bfc1dfa6 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -40,11 +40,6 @@ id_tag = assign_uid_vents() /obj/machinery/atmospherics/components/unary/vent_pump/Destroy() - var/area/A = get_area(src) - if (A) - A.air_vent_names -= id_tag - A.air_vent_info -= id_tag - SSradio.remove_object(src,frequency) radio_connection = null return ..() @@ -157,12 +152,6 @@ "sigtype" = "status" )) - var/area/A = get_area(src) - if(!A.air_vent_names[id_tag]) - name = "\improper [A.name] vent pump #[A.air_vent_names.len + 1]" - A.air_vent_names[id_tag] = name - A.air_vent_info[id_tag] = signal.data - radio_connection.post_signal(src, signal, radio_filter_out) @@ -276,23 +265,9 @@ if(welded) . += "It seems welded shut." -/obj/machinery/atmospherics/components/unary/vent_pump/power_change() - . = ..() - update_icon_nopipes() - /obj/machinery/atmospherics/components/unary/vent_pump/can_crawl_through() return !welded -/obj/machinery/atmospherics/components/unary/vent_pump/attack_alien(mob/user) - if(!welded || !(do_after(user, 20, target = src))) - return - user.visible_message("[user] furiously claws at [src]!", "I manage to clear away the stuff blocking the vent.", "I hear loud scraping noises.") - welded = FALSE - update_icon() - pipe_vision_img = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir) - pipe_vision_img.plane = ABOVE_HUD_PLANE - playsound(loc, 'sound/blank.ogg', 100, TRUE) - /obj/machinery/atmospherics/components/unary/vent_pump/high_volume name = "large air vent" power_channel = EQUIP diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index 7a3e1c54af..0e970b3cdf 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -40,18 +40,13 @@ filter_types += gas_id2path(f) /obj/machinery/atmospherics/components/unary/vent_scrubber/Destroy() - var/area/A = get_area(src) - if (A) - A.air_scrub_names -= id_tag - A.air_scrub_info -= id_tag - SSradio.remove_object(src,frequency) radio_connection = null adjacent_turfs.Cut() return ..() /obj/machinery/atmospherics/components/unary/vent_scrubber/auto_use_power() - if(!on || welded || !is_operational() || !powered(power_channel)) + if(!on || welded || !is_operational()) return FALSE var/amount = idle_power_usage @@ -63,7 +58,6 @@ if(widenet) amount += amount * (adjacent_turfs.len * (adjacent_turfs.len / 2)) - use_power(amount, power_channel) return TRUE /obj/machinery/atmospherics/components/unary/vent_scrubber/update_icon_nopipes() @@ -114,12 +108,6 @@ "sigtype" = "status" )) - var/area/A = get_area(src) - if(!A.air_scrub_names[id_tag]) - name = "\improper [A.name] air scrubber #[A.air_scrub_names.len + 1]" - A.air_scrub_names[id_tag] = name - - A.air_scrub_info[id_tag] = signal.data radio_connection.post_signal(src, signal, radio_filter_out) return TRUE @@ -258,10 +246,6 @@ update_icon() return -/obj/machinery/atmospherics/components/unary/vent_scrubber/power_change() - . = ..() - update_icon_nopipes() - /obj/machinery/atmospherics/components/unary/vent_scrubber/welder_act(mob/living/user, obj/item/I) ..() if(!I.tool_start_check(user, amount=0)) @@ -295,17 +279,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/can_crawl_through() return !welded -/obj/machinery/atmospherics/components/unary/vent_scrubber/attack_alien(mob/user) - if(!welded || !(do_after(user, 20, target = src))) - return - user.visible_message("[user] furiously claws at [src]!", "I manage to clear away the stuff blocking the scrubber.", "I hear loud scraping noises.") - welded = FALSE - update_icon() - pipe_vision_img = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir) - pipe_vision_img.plane = ABOVE_HUD_PLANE - playsound(loc, 'sound/blank.ogg', 100, TRUE) - - /obj/machinery/atmospherics/components/unary/vent_scrubber/layer1 piping_layer = 1 icon_state = "scrub_map-1" diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm deleted file mode 100644 index c0b2638cc5..0000000000 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ /dev/null @@ -1,148 +0,0 @@ -/obj/machinery/meter - name = "gas flow meter" - desc = "" - icon = 'icons/obj/atmospherics/pipes/meter.dmi' - icon_state = "meterX" - layer = GAS_PUMP_LAYER - power_channel = ENVIRON - use_power = IDLE_POWER_USE - idle_power_usage = 2 - active_power_usage = 4 - max_integrity = 150 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 40, "acid" = 0) - var/frequency = 0 - var/atom/target - var/id_tag - var/target_layer = PIPING_LAYER_DEFAULT - -/obj/machinery/meter/atmos - frequency = FREQ_ATMOS_STORAGE - -/obj/machinery/meter/atmos/atmos_waste_loop - name = "waste loop gas flow meter" - id_tag = ATMOS_GAS_MONITOR_LOOP_ATMOS_WASTE - -/obj/machinery/meter/atmos/distro_loop - name = "distribution loop gas flow meter" - id_tag = ATMOS_GAS_MONITOR_LOOP_DISTRIBUTION - -/obj/machinery/meter/Destroy() - SSair.atmos_machinery -= src - target = null - return ..() - -/obj/machinery/meter/Initialize(mapload, new_piping_layer) - if(!isnull(new_piping_layer)) - target_layer = new_piping_layer - SSair.atmos_machinery += src - if(!target) - reattach_to_layer() - return ..() - -/obj/machinery/meter/proc/reattach_to_layer() - var/obj/machinery/atmospherics/candidate - for(var/obj/machinery/atmospherics/pipe/pipe in loc) - if(pipe.piping_layer == target_layer) - candidate = pipe - if(pipe.level == 2) - break - if(candidate) - target = candidate - setAttachLayer(candidate.piping_layer) - -/obj/machinery/meter/proc/setAttachLayer(new_layer) - target_layer = new_layer - PIPING_LAYER_DOUBLE_SHIFT(src, target_layer) - -/obj/machinery/meter/process_atmos() - if(!(target?.flags_1 & INITIALIZED_1)) - icon_state = "meterX" - return 0 - - if(stat & (BROKEN|NOPOWER)) - icon_state = "meter0" - return 0 - - use_power(5) - - var/datum/gas_mixture/environment = target.return_air() - if(!environment) - icon_state = "meterX" - return 0 - - var/env_pressure = environment.return_pressure() - if(env_pressure <= 0.15*ONE_ATMOSPHERE) - icon_state = "meter0" - else if(env_pressure <= 1.8*ONE_ATMOSPHERE) - var/val = round(env_pressure/(ONE_ATMOSPHERE*0.3) + 0.5) - icon_state = "meter1_[val]" - else if(env_pressure <= 30*ONE_ATMOSPHERE) - var/val = round(env_pressure/(ONE_ATMOSPHERE*5)-0.35) + 1 - icon_state = "meter2_[val]" - else if(env_pressure <= 59*ONE_ATMOSPHERE) - var/val = round(env_pressure/(ONE_ATMOSPHERE*5) - 6) + 1 - icon_state = "meter3_[val]" - else - icon_state = "meter4" - - if(frequency) - var/datum/radio_frequency/radio_connection = SSradio.return_frequency(frequency) - - if(!radio_connection) - return - - var/datum/signal/signal = new(list( - "id_tag" = id_tag, - "device" = "AM", - "pressure" = round(env_pressure), - "sigtype" = "status" - )) - radio_connection.post_signal(src, signal) - -/obj/machinery/meter/proc/status() - if (target) - var/datum/gas_mixture/environment = target.return_air() - if(environment) - . = "The pressure gauge reads [round(environment.return_pressure(), 0.01)] kPa; [round(environment.temperature,0.01)] K ([round(environment.temperature-T0C,0.01)]°C)." - else - . = "The sensor error light is blinking." - else - . = "The connect error light is blinking." - -/obj/machinery/meter/examine(mob/user) - . = ..() - . += status() - -/obj/machinery/meter/wrench_act(mob/user, obj/item/I) - ..() - to_chat(user, "I begin to unfasten \the [src]...") - if (I.use_tool(src, user, 40, volume=50)) - user.visible_message( - "[user] unfastens \the [src].", - "I unfasten \the [src].", - "I hear ratchet.") - deconstruct() - return TRUE - -/obj/machinery/meter/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/pipe_meter(loc) - qdel(src) - -/obj/machinery/meter/interact(mob/user) - if(stat & (NOPOWER|BROKEN)) - return - else - to_chat(user, status()) - -/obj/machinery/meter/singularity_pull(S, current_size) - ..() - if(current_size >= STAGE_FIVE) - deconstruct() - -// TURF METER - REPORTS A TILE'S AIR CONTENTS -// why are you yelling? -/obj/machinery/meter/turf - -/obj/machinery/meter/turf/reattach_to_layer() - target = loc diff --git a/code/modules/atmospherics/machinery/other/miner.dm b/code/modules/atmospherics/machinery/other/miner.dm deleted file mode 100644 index ef42a2d4de..0000000000 --- a/code/modules/atmospherics/machinery/other/miner.dm +++ /dev/null @@ -1,178 +0,0 @@ - -#define GASMINER_POWER_NONE 0 -#define GASMINER_POWER_STATIC 1 -#define GASMINER_POWER_MOLES 2 //Scaled from here on down. -#define GASMINER_POWER_KPA 3 -#define GASMINER_POWER_FULLSCALE 4 - -/obj/machinery/atmospherics/miner - name = "gas miner" - desc = "" - icon = 'icons/obj/atmospherics/components/miners.dmi' - icon_state = "miner" - density = FALSE - resistance_flags = INDESTRUCTIBLE|ACID_PROOF|FIRE_PROOF - var/spawn_id = null - var/spawn_temp = T20C - var/spawn_mol = MOLES_CELLSTANDARD * 10 - var/max_ext_mol = INFINITY - var/max_ext_kpa = 6500 - var/overlay_color = "#FFFFFF" - var/active = TRUE - var/power_draw = 0 - var/power_draw_static = 2000 - var/power_draw_dynamic_mol_coeff = 5 //DO NOT USE DYNAMIC SETTINGS UNTIL SOMEONE MAKES A USER INTERFACE/CONTROLLER FOR THIS! - var/power_draw_dynamic_kpa_coeff = 0.5 - var/broken = FALSE - var/broken_message = "ERROR" - idle_power_usage = 150 - active_power_usage = 2000 - -/obj/machinery/atmospherics/miner/Initialize() - . = ..() - set_active(active) //Force overlay update. - -/obj/machinery/atmospherics/miner/examine(mob/user) - . = ..() - if(broken) - . += {"Its debug output is printing "[broken_message]"."} - -/obj/machinery/atmospherics/miner/proc/check_operation() - if(!active) - return FALSE - var/turf/T = get_turf(src) - if(!isopenturf(T)) - broken_message = "VENT BLOCKED" - set_broken(TRUE) - return FALSE - var/turf/open/OT = T - if(OT.planetary_atmos) - broken_message = "DEVICE NOT ENCLOSED IN A PRESSURIZED ENVIRONMENT" - set_broken(TRUE) - return FALSE - if(isspaceturf(T)) - broken_message = "AIR VENTING TO SPACE" - set_broken(TRUE) - return FALSE - var/datum/gas_mixture/G = OT.return_air() - if(G.return_pressure() > (max_ext_kpa - ((spawn_mol*spawn_temp*R_IDEAL_GAS_EQUATION)/(CELL_VOLUME)))) - broken_message = "EXTERNAL PRESSURE OVER THRESHOLD" - set_broken(TRUE) - return FALSE - if(G.total_moles() > max_ext_mol) - broken_message = "EXTERNAL AIR CONCENTRATION OVER THRESHOLD" - set_broken(TRUE) - return FALSE - if(broken) - set_broken(FALSE) - broken_message = "" - return TRUE - -/obj/machinery/atmospherics/miner/proc/set_active(setting) - if(active != setting) - active = setting - update_icon() - -/obj/machinery/atmospherics/miner/proc/set_broken(setting) - if(broken != setting) - broken = setting - update_icon() - -/obj/machinery/atmospherics/miner/proc/update_power() - if(!active) - active_power_usage = idle_power_usage - var/turf/T = get_turf(src) - var/datum/gas_mixture/G = T.return_air() - var/P = G.return_pressure() - switch(power_draw) - if(GASMINER_POWER_NONE) - active_power_usage = 0 - if(GASMINER_POWER_STATIC) - active_power_usage = power_draw_static - if(GASMINER_POWER_MOLES) - active_power_usage = spawn_mol * power_draw_dynamic_mol_coeff - if(GASMINER_POWER_KPA) - active_power_usage = P * power_draw_dynamic_kpa_coeff - if(GASMINER_POWER_FULLSCALE) - active_power_usage = (spawn_mol * power_draw_dynamic_mol_coeff) + (P * power_draw_dynamic_kpa_coeff) - -/obj/machinery/atmospherics/miner/proc/do_use_power(amount) - var/turf/T = get_turf(src) - if(T && istype(T)) - var/obj/structure/cable/C = T.get_cable_node() //check if we have a node cable on the machine turf, the first found is picked - if(C && C.powernet && (C.powernet.avail > amount)) - C.powernet.load += amount - return TRUE - if(powered()) - use_power(amount) - return TRUE - return FALSE - -/obj/machinery/atmospherics/miner/update_icon() - cut_overlays() - if(broken) - add_overlay("broken") - else if(active) - var/mutable_appearance/on_overlay = mutable_appearance(icon, "on") - on_overlay.color = overlay_color - add_overlay(on_overlay) - -/obj/machinery/atmospherics/miner/process() - update_power() - check_operation() - if(active && !broken) - if(isnull(spawn_id)) - return FALSE - if(do_use_power(active_power_usage)) - mine_gas() - -/obj/machinery/atmospherics/miner/proc/mine_gas() - var/turf/open/O = get_turf(src) - if(!isopenturf(O)) - return FALSE - var/datum/gas_mixture/merger = new - merger.assert_gas(spawn_id) - merger.gases[spawn_id][MOLES] = (spawn_mol) - merger.temperature = spawn_temp - O.assume_air(merger) - O.air_update_turf(TRUE) - -/obj/machinery/atmospherics/miner/attack_ai(mob/living/silicon/user) - if(broken) - to_chat(user, "[src] seems to be broken. Its debug interface outputs: [broken_message]") - ..() - -/obj/machinery/atmospherics/miner/n2o - name = "\improper N2O Gas Miner" - overlay_color = "#FFCCCC" - spawn_id = /datum/gas/nitrous_oxide - -/obj/machinery/atmospherics/miner/nitrogen - name = "\improper N2 Gas Miner" - overlay_color = "#CCFFCC" - spawn_id = /datum/gas/nitrogen - -/obj/machinery/atmospherics/miner/oxygen - name = "\improper O2 Gas Miner" - overlay_color = "#007FFF" - spawn_id = /datum/gas/oxygen - -/obj/machinery/atmospherics/miner/toxins - name = "\improper Plasma Gas Miner" - overlay_color = "#FF0000" - spawn_id = /datum/gas/plasma - -/obj/machinery/atmospherics/miner/carbon_dioxide - name = "\improper CO2 Gas Miner" - overlay_color = "#CDCDCD" - spawn_id = /datum/gas/carbon_dioxide - -/obj/machinery/atmospherics/miner/bz - name = "\improper BZ Gas Miner" - overlay_color = "#FAFF00" - spawn_id = /datum/gas/bz - -/obj/machinery/atmospherics/miner/water_vapor - name = "\improper Water Vapor Gas Miner" - overlay_color = "#99928E" - spawn_id = /datum/gas/water_vapor diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm index 0c03fb4dd7..a52bb12112 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm @@ -12,7 +12,6 @@ device_type = BINARY - construction_type = /obj/item/pipe/directional pipe_state = "junction" /obj/machinery/atmospherics/pipe/heat_exchanging/junction/SetInitDirections() diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm index 5557a94e2c..106270e0a9 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm @@ -12,7 +12,6 @@ device_type = TRINARY - construction_type = /obj/item/pipe/trinary pipe_state = "he_manifold" var/mutable_appearance/center diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold4w.dm index f6404d510c..89717dab27 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold4w.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold4w.dm @@ -11,7 +11,6 @@ device_type = QUATERNARY - construction_type = /obj/item/pipe/quaternary pipe_state = "he_manifold4w" var/mutable_appearance/center diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm index 05c088b44a..1a61040be7 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm @@ -11,7 +11,6 @@ device_type = BINARY - construction_type = /obj/item/pipe/binary/bendable pipe_state = "he" /obj/machinery/atmospherics/pipe/heat_exchanging/simple/SetInitDirections() diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm index 09a8ac4166..eef045420d 100644 --- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm +++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm @@ -9,7 +9,6 @@ piping_layer = PIPING_LAYER_DEFAULT device_type = 0 volume = 260 - construction_type = /obj/item/pipe/binary pipe_state = "manifoldlayer" var/list/front_nodes diff --git a/code/modules/atmospherics/machinery/pipes/manifold.dm b/code/modules/atmospherics/machinery/pipes/manifold.dm index 1d05b569db..537cc80056 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold.dm @@ -12,7 +12,6 @@ device_type = TRINARY - construction_type = /obj/item/pipe/trinary pipe_state = "manifold" var/mutable_appearance/center diff --git a/code/modules/atmospherics/machinery/pipes/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/manifold4w.dm index 9fc1384fdd..603d492a61 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold4w.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold4w.dm @@ -11,7 +11,6 @@ device_type = QUATERNARY - construction_type = /obj/item/pipe/quaternary pipe_state = "manifold4w" var/mutable_appearance/center diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm index 2ebf1cfdff..f1e5fb93e0 100644 --- a/code/modules/atmospherics/machinery/pipes/pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -58,14 +58,6 @@ /obj/machinery/atmospherics/pipe/remove_air(amount) return parent.air.remove(amount) -/obj/machinery/atmospherics/pipe/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/pipe_meter)) - var/obj/item/pipe_meter/meter = W - user.dropItemToGround(meter) - meter.setAttachLayer(piping_layer) - else - return ..() - /obj/machinery/atmospherics/pipe/returnPipenet() return parent @@ -77,13 +69,6 @@ releaseAirToTurf() QDEL_NULL(air_temporary) - - var/turf/T = loc - for(var/obj/machinery/meter/meter in T) - if(meter.target == src) - var/obj/item/pipe_meter/PM = new (T) - meter.transfer_fingerprints_to(PM) - qdel(meter) . = ..() /obj/machinery/atmospherics/pipe/update_icon() diff --git a/code/modules/atmospherics/machinery/pipes/simple.dm b/code/modules/atmospherics/machinery/pipes/simple.dm index 66a44ad117..9076f65255 100644 --- a/code/modules/atmospherics/machinery/pipes/simple.dm +++ b/code/modules/atmospherics/machinery/pipes/simple.dm @@ -14,7 +14,6 @@ device_type = BINARY - construction_type = /obj/item/pipe/binary/bendable pipe_state = "simple" /obj/machinery/atmospherics/pipe/simple/SetInitDirections() diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index 403183ea8d..f86fcef1ee 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -108,7 +108,7 @@ /obj/machinery/portable_atmospherics/proc/replace_tank(mob/living/user, close_valve, obj/item/tank/new_tank) if(holding) holding.forceMove(drop_location()) - if(Adjacent(user) && !issiliconoradminghost(user)) + if(Adjacent(user)) user.put_in_hands(holding) if(new_tank) holding = new_tank diff --git a/code/modules/awaymissions/bluespaceartillery.dm b/code/modules/awaymissions/bluespaceartillery.dm deleted file mode 100644 index deb05920e2..0000000000 --- a/code/modules/awaymissions/bluespaceartillery.dm +++ /dev/null @@ -1,55 +0,0 @@ - - -/obj/machinery/artillerycontrol - var/reload = 60 - var/reload_cooldown = 60 - var/explosiondev = 3 - var/explosionmed = 6 - var/explosionlight = 12 - name = "bluespace artillery control" - icon_state = "control_boxp1" - icon = 'icons/obj/machines/particle_accelerator.dmi' - density = TRUE - -/obj/machinery/artillerycontrol/process() - if(reload < reload_cooldown) - reload++ - -/obj/structure/artilleryplaceholder - name = "artillery" - icon = 'icons/obj/machines/artillery.dmi' - anchored = TRUE - density = TRUE - -/obj/structure/artilleryplaceholder/decorative - density = FALSE - -/obj/machinery/artillerycontrol/ui_interact(mob/user) - . = ..() - var/dat = "Bluespace Artillery Control:
    " - dat += "Locked on
    " - dat += "Charge progress: [reload]/[reload_cooldown]:
    " - dat += "Open Fire
    " - dat += "Deployment of weapon authorized by
    Nanotrasen Naval Command

    Remember, friendly fire is grounds for termination of your contract and life.
    " - user << browse(dat, "window=scroll") - onclose(user, "scroll") - -/obj/machinery/artillerycontrol/Topic(href, href_list) - if(..()) - return - var/A - A = input("Area to bombard", "Open Fire", A) in GLOB.teleportlocs - var/area/thearea = GLOB.teleportlocs[A] - if(usr.stat || usr.restrained()) - return - if(reload < reload_cooldown) - return - if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr)) - priority_announce("Bluespace artillery fire detected. Brace for impact.") - message_admins("[ADMIN_LOOKUPFLW(usr)] has launched an artillery strike.") - var/list/L = list() - for(var/turf/T in get_area_turfs(thearea.type)) - L+=T - var/loc = pick(L) - explosion(loc,explosiondev,explosionmed,explosionlight) - reload = 0 diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm deleted file mode 100644 index 795a5f0d09..0000000000 --- a/code/modules/awaymissions/capture_the_flag.dm +++ /dev/null @@ -1,698 +0,0 @@ -#define WHITE_TEAM "White" -#define RED_TEAM "Red" -#define BLUE_TEAM "Blue" -#define FLAG_RETURN_TIME 200 // 20 seconds -#define INSTAGIB_RESPAWN 50 //5 seconds -#define DEFAULT_RESPAWN 150 //15 seconds -#define AMMO_DROP_LIFETIME 300 -#define CTF_REQUIRED_PLAYERS 4 - - - -/obj/item/twohanded/ctf - name = "banner" - icon = 'icons/obj/banner.dmi' - icon_state = "banner" - item_state = "banner" - lefthand_file = 'icons/mob/inhands/equipment/banners_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/banners_righthand.dmi' - desc = "" - slowdown = 2 - throw_speed = 0 - throw_range = 1 - force = 200 - armor_penetration = 1000 - resistance_flags = INDESTRUCTIBLE - anchored = TRUE - item_flags = SLOWS_WHILE_IN_HAND - var/team = WHITE_TEAM - var/reset_cooldown = 0 - var/anyonecanpickup = TRUE - var/obj/effect/ctf/flag_reset/reset - var/reset_path = /obj/effect/ctf/flag_reset - -/obj/item/twohanded/ctf/Destroy() - QDEL_NULL(reset) - return ..() - -/obj/item/twohanded/ctf/Initialize() - . = ..() - if(!reset) - reset = new reset_path(get_turf(src)) - -/obj/item/twohanded/ctf/process() - if(is_ctf_target(loc)) //don't reset from someone's hands. - return PROCESS_KILL - if(world.time > reset_cooldown) - forceMove(get_turf(src.reset)) - for(var/mob/M in GLOB.player_list) - var/area/mob_area = get_area(M) - if(istype(mob_area, /area/ctf)) - to_chat(M, "\The [src] has been returned to base!") - STOP_PROCESSING(SSobj, src) - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/twohanded/ctf/attack_hand(mob/living/user) - if(!is_ctf_target(user) && !anyonecanpickup) - to_chat(user, "Non-players shouldn't be moving the flag!") - return - if(team in user.faction) - to_chat(user, "I can't move your own flag!") - return - if(loc == user) - if(!user.dropItemToGround(src)) - return - anchored = FALSE - pickup(user) - if(!user.put_in_active_hand(src)) - dropped(user) - return - user.anchored = TRUE - user.status_flags &= ~CANPUSH - for(var/mob/M in GLOB.player_list) - var/area/mob_area = get_area(M) - if(istype(mob_area, /area/ctf)) - to_chat(M, "\The [src] has been taken!") - STOP_PROCESSING(SSobj, src) - ..() - -/obj/item/twohanded/ctf/dropped(mob/user) - ..() - user.anchored = FALSE - user.status_flags |= CANPUSH - reset_cooldown = world.time + 200 //20 seconds - START_PROCESSING(SSobj, src) - for(var/mob/M in GLOB.player_list) - var/area/mob_area = get_area(M) - if(istype(mob_area, /area/ctf)) - to_chat(M, "\The [src] has been dropped!") - anchored = TRUE - - -/obj/item/twohanded/ctf/red - name = "red flag" - icon_state = "banner-red" - item_state = "banner-red" - desc = "" - team = RED_TEAM - reset_path = /obj/effect/ctf/flag_reset/red - - -/obj/item/twohanded/ctf/blue - name = "blue flag" - icon_state = "banner-blue" - item_state = "banner-blue" - desc = "" - team = BLUE_TEAM - reset_path = /obj/effect/ctf/flag_reset/blue - -/obj/effect/ctf/flag_reset - name = "banner landmark" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "banner" - desc = "" - layer = LOW_ITEM_LAYER - -/obj/effect/ctf/flag_reset/red - name = "red flag landmark" - icon_state = "banner-red" - desc = "This is where a red banner used to play capture the flag \ - would go." - -/obj/effect/ctf/flag_reset/blue - name = "blue flag landmark" - icon_state = "banner-blue" - desc = "This is where a blue banner used to play capture the flag \ - would go." - -/proc/toggle_all_ctf(mob/user) - var/ctf_enabled = FALSE - var/area/A - for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines) - ctf_enabled = CTF.toggle_ctf() - A = get_area(CTF) - for(var/obj/machinery/power/emitter/E in A) - E.active = ctf_enabled - message_admins("[key_name_admin(user)] has [ctf_enabled? "enabled" : "disabled"] CTF!") - notify_ghosts("CTF has been [ctf_enabled? "enabled" : "disabled"]!",'sound/blank.ogg') - -/obj/machinery/capture_the_flag - name = "CTF Controller" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "syndbeacon" - resistance_flags = INDESTRUCTIBLE - var/team = WHITE_TEAM - var/team_span = "" - //Capture the Flag scoring - var/points = 0 - var/points_to_win = 3 - var/respawn_cooldown = DEFAULT_RESPAWN - //Capture Point/King of the Hill scoring - var/control_points = 0 - var/control_points_to_win = 180 - var/list/team_members = list() - var/list/spawned_mobs = list() - var/list/recently_dead_ckeys = list() - var/ctf_enabled = FALSE - var/ctf_gear = /datum/outfit/ctf - var/instagib_gear = /datum/outfit/ctf/instagib - - var/list/dead_barricades = list() - - var/static/arena_reset = FALSE - var/static/list/people_who_want_to_play = list() - -/obj/machinery/capture_the_flag/Initialize() - . = ..() - GLOB.poi_list |= src - -/obj/machinery/capture_the_flag/Destroy() - GLOB.poi_list.Remove(src) - ..() - -/obj/machinery/capture_the_flag/process() - for(var/i in spawned_mobs) - if(!i) - spawned_mobs -= i - continue - // Anyone in crit, automatically reap - var/mob/living/M = i - if(M.InCritical() || M.stat == DEAD) - ctf_dust_old(M) - else - // The changes that you've been hit with no shield but not - // instantly critted are low, but have some healing. - M.adjustBruteLoss(-5) - M.adjustFireLoss(-5) - -/obj/machinery/capture_the_flag/red - name = "Red CTF Controller" - icon_state = "syndbeacon" - team = RED_TEAM - team_span = "redteamradio" - ctf_gear = /datum/outfit/ctf/red - instagib_gear = /datum/outfit/ctf/red/instagib - -/obj/machinery/capture_the_flag/blue - name = "Blue CTF Controller" - icon_state = "bluebeacon" - team = BLUE_TEAM - team_span = "blueteamradio" - ctf_gear = /datum/outfit/ctf/blue - instagib_gear = /datum/outfit/ctf/blue/instagib - -//ATTACK GHOST IGNORING PARENT RETURN VALUE -/obj/machinery/capture_the_flag/attack_ghost(mob/user) - if(ctf_enabled == FALSE) - if(user.client && user.client.holder) - var/response = alert("Enable CTF?", "CTF", "Yes", "No") - if(response == "Yes") - toggle_all_ctf(user) - return - - - people_who_want_to_play |= user.ckey - var/num = people_who_want_to_play.len - var/remaining = CTF_REQUIRED_PLAYERS - num - if(remaining <= 0) - people_who_want_to_play.Cut() - toggle_all_ctf() - else - to_chat(user, "CTF has been requested. [num]/[CTF_REQUIRED_PLAYERS] have readied up.") - - return - - if(!SSticker.HasRoundStarted()) - return - if(user.ckey in team_members) - if(user.ckey in recently_dead_ckeys) - to_chat(user, "It must be more than [DisplayTimeText(respawn_cooldown)] from your last death to respawn!") - return - var/client/new_team_member = user.client - if(user.mind && user.mind.current) - ctf_dust_old(user.mind.current) - spawn_team_member(new_team_member) - return - - for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines) - if(CTF == src || CTF.ctf_enabled == FALSE) - continue - if(user.ckey in CTF.team_members) - to_chat(user, "No switching teams while the round is going!") - return - if(CTF.team_members.len < src.team_members.len) - to_chat(user, "[src.team] has more team members than [CTF.team]! Try joining [CTF.team] team to even things up.") - return - team_members |= user.ckey - var/client/new_team_member = user.client - if(user.mind && user.mind.current) - ctf_dust_old(user.mind.current) - spawn_team_member(new_team_member) - -/obj/machinery/capture_the_flag/proc/ctf_dust_old(mob/living/body) - if(isliving(body) && (team in body.faction)) - var/turf/T = get_turf(body) - new /obj/effect/ctf/ammo(T) - recently_dead_ckeys += body.ckey - addtimer(CALLBACK(src, PROC_REF(clear_cooldown), body.ckey), respawn_cooldown, TIMER_UNIQUE) - body.dust() - -/obj/machinery/capture_the_flag/proc/clear_cooldown(ckey) - recently_dead_ckeys -= ckey - -/obj/machinery/capture_the_flag/proc/spawn_team_member(client/new_team_member) - var/mob/living/carbon/human/M = new/mob/living/carbon/human(get_turf(src)) - new_team_member.prefs.copy_to(M) - M.set_species(/datum/species/synth) - M.key = new_team_member.key - M.faction += team - M.equipOutfit(ctf_gear) - spawned_mobs += M - -/obj/machinery/capture_the_flag/Topic(href, href_list) - if(href_list["join"]) - var/mob/dead/observer/ghost = usr - if(istype(ghost)) - attack_ghost(ghost) - -/obj/machinery/capture_the_flag/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/twohanded/ctf)) - var/obj/item/twohanded/ctf/flag = I - if(flag.team != src.team) - user.transferItemToLoc(flag, get_turf(flag.reset), TRUE) - points++ - for(var/mob/M in GLOB.player_list) - var/area/mob_area = get_area(M) - if(istype(mob_area, /area/ctf)) - to_chat(M, "[user.real_name] has captured \the [flag], scoring a point for [team] team! They now have [points]/[points_to_win] points!") - if(points >= points_to_win) - victory() - -/obj/machinery/capture_the_flag/proc/victory() - for(var/mob/M in GLOB.mob_list) - var/area/mob_area = get_area(M) - if(istype(mob_area, /area/ctf)) - to_chat(M, "[team] team wins!") - to_chat(M, "Teams have been cleared. Click on the machines to vote to begin another round.") - for(var/obj/item/twohanded/ctf/W in M) - M.dropItemToGround(W) - M.dust() - for(var/obj/machinery/control_point/control in GLOB.machines) - control.icon_state = "dominator" - control.controlling = null - for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines) - if(CTF.ctf_enabled == TRUE) - CTF.points = 0 - CTF.control_points = 0 - CTF.ctf_enabled = FALSE - CTF.team_members = list() - CTF.arena_reset = FALSE - -/obj/machinery/capture_the_flag/proc/toggle_ctf() - if(!ctf_enabled) - start_ctf() - . = TRUE - else - stop_ctf() - . = FALSE - -/obj/machinery/capture_the_flag/proc/start_ctf() - ctf_enabled = TRUE - for(var/d in dead_barricades) - var/obj/effect/ctf/dead_barricade/D = d - D.respawn() - - dead_barricades.Cut() - - notify_ghosts("[name] has been activated!", enter_link="(Click to join the [team] team!) or click on the controller directly!", source = src, action=NOTIFY_ATTACK, header = "CTF has been activated") - - if(!arena_reset) - reset_the_arena() - arena_reset = TRUE - -/obj/machinery/capture_the_flag/proc/reset_the_arena() - var/area/A = get_area(src) - var/list/ctf_object_typecache = typecacheof(list( - /obj/machinery, - /obj/effect/ctf, - /obj/item/twohanded/ctf - )) - for(var/atm in A) - if (isturf(A) || ismob(A) || isarea(A)) - continue - if(isstructure(atm)) - var/obj/structure/S = atm - S.obj_integrity = S.max_integrity - else if(!is_type_in_typecache(atm, ctf_object_typecache)) - qdel(atm) - - -/obj/machinery/capture_the_flag/proc/stop_ctf() - ctf_enabled = FALSE - arena_reset = FALSE - var/area/A = get_area(src) - for(var/i in GLOB.mob_list) - var/mob/M = i - if((get_area(A) == A) && (M.ckey in team_members)) - M.dust() - team_members.Cut() - spawned_mobs.Cut() - recently_dead_ckeys.Cut() - -/obj/machinery/capture_the_flag/proc/instagib_mode() - for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines) - if(CTF.ctf_enabled == TRUE) - CTF.ctf_gear = CTF.instagib_gear - CTF.respawn_cooldown = INSTAGIB_RESPAWN - -/obj/machinery/capture_the_flag/proc/normal_mode() - for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines) - if(CTF.ctf_enabled == TRUE) - CTF.ctf_gear = initial(ctf_gear) - CTF.respawn_cooldown = DEFAULT_RESPAWN - -/obj/item/gun/ballistic/automatic/pistol/deagle/ctf - desc = "" - force = 75 - mag_type = /obj/item/ammo_box/magazine/m50/ctf - -/obj/item/gun/ballistic/automatic/pistol/deagle/ctf/dropped() - . = ..() - addtimer(CALLBACK(src, PROC_REF(floor_vanish)), 1) - -/obj/item/gun/ballistic/automatic/pistol/deagle/ctf/proc/floor_vanish() - if(isturf(loc)) - qdel(src) - -/obj/item/ammo_box/magazine/m50/ctf - ammo_type = /obj/item/ammo_casing/a50/ctf - -/obj/item/ammo_casing/a50/ctf - projectile_type = /obj/projectile/bullet/ctf - -/obj/projectile/bullet/ctf - damage = 0 - -/obj/projectile/bullet/ctf/prehit(atom/target) - if(is_ctf_target(target)) - damage = 60 - . = ..() - -/obj/item/gun/ballistic/automatic/laser/ctf - mag_type = /obj/item/ammo_box/magazine/recharge/ctf - desc = "" - force = 50 - -/obj/item/gun/ballistic/automatic/laser/ctf/dropped() - . = ..() - addtimer(CALLBACK(src, PROC_REF(floor_vanish)), 1) - -/obj/item/gun/ballistic/automatic/laser/ctf/proc/floor_vanish() - if(isturf(loc)) - qdel(src) - -/obj/item/ammo_box/magazine/recharge/ctf - ammo_type = /obj/item/ammo_casing/caseless/laser/ctf - -/obj/item/ammo_box/magazine/recharge/ctf/dropped() - . = ..() - addtimer(CALLBACK(src, PROC_REF(floor_vanish)), 1) - -/obj/item/ammo_box/magazine/recharge/ctf/proc/floor_vanish() - if(isturf(loc)) - qdel(src) - -/obj/item/ammo_casing/caseless/laser/ctf - projectile_type = /obj/projectile/beam/ctf - -/obj/projectile/beam/ctf - damage = 0 - icon_state = "omnilaser" - -/obj/projectile/beam/ctf/prehit(atom/target) - if(is_ctf_target(target)) - damage = 150 - . = ..() - -/proc/is_ctf_target(atom/target) - . = FALSE - if(istype(target, /obj/structure/barricade/security/ctf)) - . = TRUE - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(istype(H.wear_armor, /obj/item/clothing/suit/space/hardsuit/shielded/ctf)) - . = TRUE - -// RED TEAM GUNS - -/obj/item/gun/ballistic/automatic/laser/ctf/red - mag_type = /obj/item/ammo_box/magazine/recharge/ctf/red - -/obj/item/ammo_box/magazine/recharge/ctf/red - ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/red - -/obj/item/ammo_casing/caseless/laser/ctf/red - projectile_type = /obj/projectile/beam/ctf/red - -/obj/projectile/beam/ctf/red - icon_state = "laser" - impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser - -// BLUE TEAM GUNS - -/obj/item/gun/ballistic/automatic/laser/ctf/blue - mag_type = /obj/item/ammo_box/magazine/recharge/ctf/blue - -/obj/item/ammo_box/magazine/recharge/ctf/blue - ammo_type = /obj/item/ammo_casing/caseless/laser/ctf/blue - -/obj/item/ammo_casing/caseless/laser/ctf/blue - projectile_type = /obj/projectile/beam/ctf/blue - -/obj/projectile/beam/ctf/blue - icon_state = "bluelaser" - impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser - -/datum/outfit/ctf - name = "CTF" - ears = /obj/item/radio/headset - uniform = /obj/item/clothing/under/syndicate - suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf - toggle_helmet = FALSE // see the whites of their eyes - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - id = /obj/item/card/id/away - belt = /obj/item/gun/ballistic/automatic/pistol/deagle/ctf - l_pocket = /obj/item/ammo_box/magazine/recharge/ctf - r_pocket = /obj/item/ammo_box/magazine/recharge/ctf - r_hand = /obj/item/gun/ballistic/automatic/laser/ctf - -/datum/outfit/ctf/post_equip(mob/living/carbon/human/H, visualsOnly=FALSE) - if(visualsOnly) - return - var/list/no_drops = list() - var/obj/item/card/id/W = H.wear_ring - no_drops += W - W.registered_name = H.real_name - W.update_label() - - no_drops += H.get_item_by_slot(SLOT_ARMOR) - no_drops += H.get_item_by_slot(SLOT_GLOVES) - no_drops += H.get_item_by_slot(SLOT_SHOES) - no_drops += H.get_item_by_slot(SLOT_PANTS) - no_drops += H.get_item_by_slot(SLOT_HEAD) - for(var/i in no_drops) - var/obj/item/I = i - ADD_TRAIT(I, TRAIT_NODROP, CAPTURE_THE_FLAG_TRAIT) - -/datum/outfit/ctf/instagib - r_hand = /obj/item/gun/energy/laser/instakill - shoes = /obj/item/clothing/shoes/jackboots/fast - -/datum/outfit/ctf/red - suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/red - r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/red - l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/red - r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/red - id = /obj/item/card/id/syndicate_command //it's red - -/datum/outfit/ctf/red/instagib - r_hand = /obj/item/gun/energy/laser/instakill/red - shoes = /obj/item/clothing/shoes/jackboots/fast - -/datum/outfit/ctf/blue - suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf/blue - r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/blue - l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/blue - r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/blue - id = /obj/item/card/id/centcom //it's blue - -/datum/outfit/ctf/blue/instagib - r_hand = /obj/item/gun/energy/laser/instakill/blue - shoes = /obj/item/clothing/shoes/jackboots/fast - -/datum/outfit/ctf/red/post_equip(mob/living/carbon/human/H) - ..() - var/obj/item/radio/R = H.ears - R.set_frequency(FREQ_CTF_RED) - R.freqlock = TRUE - R.independent = TRUE - H.dna.species.stunmod = 0 - -/datum/outfit/ctf/blue/post_equip(mob/living/carbon/human/H) - ..() - var/obj/item/radio/R = H.ears - R.set_frequency(FREQ_CTF_BLUE) - R.freqlock = TRUE - R.independent = TRUE - H.dna.species.stunmod = 0 - - - -/obj/structure/trap/ctf - name = "Spawn protection" - desc = "" - icon_state = "trap" - resistance_flags = INDESTRUCTIBLE - var/team = WHITE_TEAM - time_between_triggers = 1 - anchored = TRUE - alpha = 255 - -/obj/structure/trap/ctf/examine(mob/user) - return - -/obj/structure/trap/ctf/trap_effect(mob/living/L) - if(!is_ctf_target(L)) - return - if(!(src.team in L.faction)) - to_chat(L, "Stay out of the enemy spawn!") - L.death() - -/obj/structure/trap/ctf/red - team = RED_TEAM - icon_state = "trap-fire" - -/obj/structure/trap/ctf/blue - team = BLUE_TEAM - icon_state = "trap-frost" - -/obj/structure/barricade/security/ctf - name = "barrier" - desc = "" - deploy_time = 0 - deploy_message = 0 - -/obj/structure/barricade/security/ctf/make_debris() - new /obj/effect/ctf/dead_barricade(get_turf(src)) - -/obj/effect/ctf - density = FALSE - anchored = TRUE - invisibility = INVISIBILITY_OBSERVER - alpha = 100 - resistance_flags = INDESTRUCTIBLE - -/obj/effect/ctf/ammo - name = "ammo pickup" - desc = "You like revenge, right? Everybody likes revenge! Well, \ - let's go get some!" - icon = 'icons/effects/effects.dmi' - icon_state = "at_shield1" - layer = ABOVE_MOB_LAYER - alpha = 255 - invisibility = 0 - -/obj/effect/ctf/ammo/Initialize(mapload) - . = ..() - QDEL_IN(src, AMMO_DROP_LIFETIME) - -/obj/effect/ctf/ammo/Crossed(atom/movable/AM) - reload(AM) - -/obj/effect/ctf/ammo/Bump(atom/movable/AM) - reload(AM) - -/obj/effect/ctf/ammo/Bumped(atom/movable/AM) - reload(AM) - -/obj/effect/ctf/ammo/proc/reload(mob/living/M) - if(!ishuman(M)) - return - for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines) - if(M in CTF.spawned_mobs) - var/outfit = CTF.ctf_gear - var/datum/outfit/O = new outfit - for(var/obj/item/gun/G in M) - qdel(G) - O.equip(M) - to_chat(M, "Ammunition reloaded!") - playsound(get_turf(M), 'sound/blank.ogg', 50, TRUE, -1) - qdel(src) - break - -/obj/effect/ctf/dead_barricade - name = "dead barrier" - desc = "" - icon = 'icons/obj/objects.dmi' - icon_state = "barrier0" - -/obj/effect/ctf/dead_barricade/Initialize(mapload) - . = ..() - for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines) - CTF.dead_barricades += src - -/obj/effect/ctf/dead_barricade/proc/respawn() - if(!QDELETED(src)) - new /obj/structure/barricade/security/ctf(get_turf(src)) - qdel(src) - - -//Control Point - -/obj/machinery/control_point - name = "control point" - desc = "" - icon = 'icons/obj/machines/dominator.dmi' - icon_state = "dominator" - resistance_flags = INDESTRUCTIBLE - var/obj/machinery/capture_the_flag/controlling - var/team = "none" - var/point_rate = 1 - -/obj/machinery/control_point/process() - if(controlling) - controlling.control_points += point_rate - if(controlling.control_points >= controlling.control_points_to_win) - controlling.victory() - -/obj/machinery/control_point/attackby(mob/user, params) - capture(user) - -/obj/machinery/control_point/attack_hand(mob/user) - . = ..() - if(.) - return - capture(user) - -/obj/machinery/control_point/proc/capture(mob/user) - if(do_after(user, 30, target = src)) - for(var/obj/machinery/capture_the_flag/CTF in GLOB.machines) - if(CTF.ctf_enabled && (user.ckey in CTF.team_members)) - controlling = CTF - icon_state = "dominator-[CTF.team]" - for(var/mob/M in GLOB.player_list) - var/area/mob_area = get_area(M) - if(istype(mob_area, /area/ctf)) - to_chat(M, "[user.real_name] has captured \the [src], claiming it for [CTF.team]! Go take it back!") - break - -#undef WHITE_TEAM -#undef RED_TEAM -#undef BLUE_TEAM -#undef FLAG_RETURN_TIME -#undef INSTAGIB_RESPAWN -#undef DEFAULT_RESPAWN -#undef AMMO_DROP_LIFETIME -#undef CTF_REQUIRED_PLAYERS diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 29dda61107..930f5a6968 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -195,11 +195,6 @@ if(!isnum(T)) outfit.vars[slot] = T H.equipOutfit(outfit) - if(disable_pda) - // We don't want corpse PDAs to show up in the messenger list. - var/obj/item/pda/PDA = locate(/obj/item/pda) in H - if(PDA) - PDA.toff = TRUE if(disable_sensors) // Using crew monitors to find corpses while creative makes finding certain ruins too easy. var/obj/item/clothing/under/C = H.wear_pants @@ -243,17 +238,6 @@ //Non-human spawners -/obj/effect/mob_spawn/AICorpse/create(ckey) //Creates a corrupted AI - var/A = locate(/mob/living/silicon/ai) in loc - if(A) - return - var/mob/living/silicon/ai/spawned/M = new(loc) //spawn new AI at landmark as var M - M.name = src.name - M.real_name = src.name - M.aiPDA?.toff = TRUE //turns the AI's PDA messenger off, stopping it showing up on player PDAs - M.death() //call the AI's death proc - qdel(src) - /obj/effect/mob_spawn/slime mob_type = /mob/living/simple_animal/slime var/mobcolour = "grey" @@ -263,12 +247,6 @@ /obj/effect/mob_spawn/slime/equip(mob/living/simple_animal/slime/S) S.colour = mobcolour -/obj/effect/mob_spawn/facehugger/create(ckey) //Creates a squashed facehugger - var/obj/item/clothing/mask/facehugger/O = new(src.loc) //variable O is a new facehugger at the location of the landmark - O.name = src.name - O.Die() //call the facehugger's death proc - qdel(src) - /obj/effect/mob_spawn/mouse name = "sleeper" mob_type = /mob/living/simple_animal/mouse @@ -288,101 +266,6 @@ // I'll work on making a list of corpses people request for maps, or that I think will be commonly used. Syndicate operatives for example. -///////////Civilians////////////////////// - -/obj/effect/mob_spawn/human/corpse/assistant - name = "Assistant" - outfit = /datum/outfit/job/assistant - -/obj/effect/mob_spawn/human/corpse/assistant/beesease_infection - disease = /datum/disease/beesease - -/obj/effect/mob_spawn/human/corpse/assistant/brainrot_infection - disease = /datum/disease/brainrot - -/obj/effect/mob_spawn/human/corpse/assistant/spanishflu_infection - disease = /datum/disease/fluspanish - -/obj/effect/mob_spawn/human/corpse/cargo_tech - name = "Cargo Tech" - outfit = /datum/outfit/job/cargo_tech - -/obj/effect/mob_spawn/human/cook - name = "Cook" - outfit = /datum/outfit/job/cook - - -/obj/effect/mob_spawn/human/doctor - name = "Doctor" - outfit = /datum/outfit/job/doctor - - -/obj/effect/mob_spawn/human/doctor/alive - death = FALSE - roundstart = FALSE - random = TRUE - name = "sleeper" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - flavour_text = "I are a space doctor!" - assignedrole = "Space Doctor" - -/obj/effect/mob_spawn/human/doctor/alive/equip(mob/living/carbon/human/H) - ..() - // Remove radio and PDA so they wouldn't annoy station crew. - var/list/del_types = list(/obj/item/pda, /obj/item/radio/headset) - for(var/del_type in del_types) - var/obj/item/I = locate(del_type) in H - qdel(I) - -/obj/effect/mob_spawn/human/engineer - name = "Engineer" - outfit = /datum/outfit/job/engineer/gloved - -/obj/effect/mob_spawn/human/engineer/rig - outfit = /datum/outfit/job/engineer/gloved/rig - -/obj/effect/mob_spawn/human/clown - name = "Clown" - outfit = /datum/outfit/job/clown - -/obj/effect/mob_spawn/human/scientist - name = "Scientist" - outfit = /datum/outfit/job/scientist - -/obj/effect/mob_spawn/human/miner - name = "Shaft Miner" - outfit = /datum/outfit/job/miner - -/obj/effect/mob_spawn/human/miner/rig - outfit = /datum/outfit/job/miner/equipped/hardsuit - -/obj/effect/mob_spawn/human/miner/explorer - outfit = /datum/outfit/job/miner/equipped - - -/obj/effect/mob_spawn/human/plasmaman - mob_species = /datum/species/plasmaman - outfit = /datum/outfit/plasmaman - - -/obj/effect/mob_spawn/human/bartender - name = "Space Bartender" - id_job = "Bartender" - id_access_list = list(ACCESS_BAR) - outfit = /datum/outfit/spacebartender - -/obj/effect/mob_spawn/human/bartender/alive - death = FALSE - roundstart = FALSE - random = TRUE - name = "bartender sleeper" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - flavour_text = "I are a space bartender! Time to mix drinks and change lives. Smoking space drugs makes it easier to understand your patrons' odd dialect." - assignedrole = "Space Bartender" - id_job = "Bartender" - /datum/outfit/spacebartender name = "Space Bartender" uniform = /obj/item/clothing/under/rank/civilian/bartender @@ -437,7 +320,6 @@ /datum/outfit/nanotrasenbridgeofficercorpse name = "Bridge Officer Corpse" - ears = /obj/item/radio/headset/heads/hop uniform = /obj/item/clothing/under/rank/centcom/officer suit = /obj/item/clothing/suit/armor/bulletproof shoes = /obj/item/clothing/shoes/sneakers/black @@ -455,7 +337,6 @@ name = "Nanotrasen Private Security Commander" uniform = /obj/item/clothing/under/rank/centcom/commander suit = /obj/item/clothing/suit/armor/bulletproof - ears = /obj/item/radio/headset/heads/captain glasses = /obj/item/clothing/glasses/eyepatch mask = /obj/item/clothing/mask/cigarette/cigar/cohiba head = /obj/item/clothing/head/centhat diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index 42204ddfd9..c1619d48ac 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -112,14 +112,10 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation) toggleoff() return - if(active) - use_power(5000) /obj/machinery/gateway/centerstation/toggleon(mob/user) if(!detect()) return - if(!powered()) - return if(!awaygate) to_chat(user, "Error: No destination found.") return @@ -155,7 +151,6 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation) if(dest) AM.forceMove(get_turf(dest)) AM.setDir(SOUTH) - use_power(5000) return /obj/machinery/gateway/centeraway/multitool_act(mob/living/user, obj/item/I) diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm deleted file mode 100644 index f641327d4a..0000000000 --- a/code/modules/awaymissions/mission_code/Academy.dm +++ /dev/null @@ -1,391 +0,0 @@ - -//Academy Areas - -/area/awaymission/academy - name = "Academy Asteroids" - icon_state = "away" - -/area/awaymission/academy/headmaster - name = "Academy Fore Block" - icon_state = "away1" - -/area/awaymission/academy/classrooms - name = "Academy Classroom Block" - icon_state = "away2" - -/area/awaymission/academy/academyaft - name = "Academy Ship Aft Block" - icon_state = "away3" - -/area/awaymission/academy/academygate - name = "Academy Gateway" - icon_state = "away4" - -/area/awaymission/academy/academycellar - name = "Academy Cellar" - icon_state = "away4" - -/area/awaymission/academy/academyengine - name = "Academy Engine" - icon_state = "away4" - -//Academy Items - -/obj/item/paper/fluff/awaymissions/academy/console_maint - name = "Console Maintenance" - info = "We're upgrading to the latest mainframes for our consoles, the shipment should be in before spring break is over!" - -/obj/item/paper/fluff/awaymissions/academy/class/automotive - name = "Automotive Repair 101" - -/obj/item/paper/fluff/awaymissions/academy/class/pyromancy - name = "Pyromancy 250" - -/obj/item/paper/fluff/awaymissions/academy/class/biology - name = "Biology Lab" - -/obj/item/paper/fluff/awaymissions/academy/grade/aplus - name = "Summoning Midterm Exam" - info = "Grade: A+ Educator's Notes: Excellent form." - -/obj/item/paper/fluff/awaymissions/academy/grade/bminus - name = "Summoning Midterm Exam" - info = "Grade: B- Educator's Notes: Keep applying yourself, you're showing improvement." - -/obj/item/paper/fluff/awaymissions/academy/grade/dminus - name = "Summoning Midterm Exam" - info = "Grade: D- Educator's Notes: SEE ME AFTER CLASS." - -/obj/item/paper/fluff/awaymissions/academy/grade/failure - name = "Pyromancy Evaluation" - info = "Current Grade: F. Educator's Notes: No improvement shown despite multiple private lessons. Suggest additional tutelage." - - -/obj/singularity/academy - dissipate = 0 - move_self = 0 - grav_pull = 1 - -/obj/singularity/academy/admin_investigate_setup() - return - -/obj/singularity/academy/process() - eat() - if(prob(1)) - mezzer() - - -/obj/item/clothing/glasses/meson/truesight - name = "The Lens of Truesight" - desc = "" - icon_state = "monocle" - item_state = "headset" - - -/obj/structure/academy_wizard_spawner - name = "Academy Defensive System" - desc = "" - icon = 'icons/obj/cult.dmi' - icon_state = "forge" - anchored = TRUE - max_integrity = 200 - var/mob/living/current_wizard = null - var/next_check = 0 - var/cooldown = 600 - var/faction = ROLE_WIZARD - var/braindead_check = 0 - -/obj/structure/academy_wizard_spawner/New() - START_PROCESSING(SSobj, src) - -/obj/structure/academy_wizard_spawner/Destroy() - if(!broken) - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/structure/academy_wizard_spawner/process() - if(next_check < world.time) - if(!current_wizard) - for(var/mob/living/L in GLOB.player_list) - if(L.z == src.z && L.stat != DEAD && !(faction in L.faction)) - summon_wizard() - break - else - if(current_wizard.stat == DEAD) - current_wizard = null - summon_wizard() - if(!current_wizard.client) - if(!braindead_check) - braindead_check = 1 - else - braindead_check = 0 - give_control() - next_check = world.time + cooldown - -/obj/structure/academy_wizard_spawner/proc/give_control() - set waitfor = FALSE - - if(!current_wizard) - return - var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as Wizard Academy Defender?", ROLE_WIZARD, null, ROLE_WIZARD, 50, current_wizard, POLL_IGNORE_ACADEMY_WIZARD) - - if(LAZYLEN(candidates)) - var/mob/dead/observer/C = pick(candidates) - message_admins("[ADMIN_LOOKUPFLW(C)] was spawned as Wizard Academy Defender") - current_wizard.ghostize() // on the off chance braindead defender gets back in - current_wizard.key = C.key - -/obj/structure/academy_wizard_spawner/proc/summon_wizard() - var/turf/T = src.loc - var/mob/living/carbon/human/wizbody = new(T) - wizbody.fully_replace_character_name(wizbody.real_name, "Academy Teacher") - wizbody.mind_initialize() - var/datum/mind/wizmind = wizbody.mind - wizmind.special_role = "Academy Defender" - wizmind.add_antag_datum(/datum/antagonist/wizard/academy) - current_wizard = wizbody - - give_control() - -/obj/structure/academy_wizard_spawner/deconstruct(disassembled = TRUE) - if(!broken) - broken = 1 - visible_message("[src] breaks down!") - icon_state = "forge_off" - STOP_PROCESSING(SSobj, src) - -/datum/outfit/wizard/academy - name = "Academy Wizard" - r_pocket = null - r_hand = null - suit = /obj/item/clothing/suit/wizrobe/red - head = /obj/item/clothing/head/wizard/red - backpack_contents = list(/obj/item/storage/box/survival = 1) - -/obj/item/dice/d20/fate - name = "\improper Die of Fate" - desc = "" - icon_state = "d20" - sides = 20 - microwave_riggable = FALSE - var/reusable = TRUE - var/used = FALSE - -/obj/item/dice/d20/fate/stealth - name = "d20" - desc = "" - -/obj/item/dice/d20/fate/one_use - reusable = FALSE - -/obj/item/dice/d20/fate/one_use/stealth - name = "d20" - desc = "" - -/obj/item/dice/d20/fate/cursed - name = "cursed Die of Fate" - desc = "" - color = "#00BB00" - - rigged = DICE_TOTALLY_RIGGED - rigged_value = 1 - -/obj/item/dice/d20/fate/diceroll(mob/user) - . = ..() - if(!used) - if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards)) - to_chat(user, "I feel the magic of the dice is restricted to ordinary humans!") - return - - if(!reusable) - used = TRUE - - var/turf/T = get_turf(src) - T.visible_message("[src] flares briefly.") - - addtimer(CALLBACK(src, PROC_REF(effect), user, .), 1 SECONDS) - -/obj/item/dice/d20/fate/equipped(mob/user, slot) - . = ..() - if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards)) - to_chat(user, "I feel the magic of the dice is restricted to ordinary humans! You should leave it alone.") - user.dropItemToGround(src) - - -/obj/item/dice/d20/fate/proc/effect(mob/living/carbon/human/user,roll) - var/turf/T = get_turf(src) - switch(roll) - if(1) - //Dust - T.visible_message("[user] turns to dust!") - user.hellbound = TRUE - user.dust() - if(2) - //Death - T.visible_message("[user] suddenly dies!") - user.death() - if(3) - //Swarm of creatures - T.visible_message("A swarm of creatures surround [user]!") - for(var/direction in GLOB.alldirs) - new /mob/living/simple_animal/hostile/netherworld(get_step(get_turf(user),direction)) - if(4) - //Destroy Equipment - T.visible_message("Everything [user] is holding and wearing disappears!") - for(var/obj/item/I in user) - if(istype(I, /obj/item/implant)) - continue - qdel(I) - if(5) - //Monkeying - T.visible_message("[user] transforms into a monkey!") - user.monkeyize() - if(6) - //Cut speed - T.visible_message("[user] starts moving slower!") - user.add_movespeed_modifier(MOVESPEED_ID_DIE_OF_FATE, update=TRUE, priority=100, multiplicative_slowdown=1) - if(7) - //Throw - T.visible_message("Unseen forces throw [user]!") - user.Stun(60) - user.adjustBruteLoss(50) - var/throw_dir = pick(GLOB.cardinals) - var/atom/throw_target = get_edge_target_turf(user, throw_dir) - user.throw_at(throw_target, 200, 4) - if(8) - //Fueltank Explosion - T.visible_message("An explosion bursts into existence around [user]!") - explosion(get_turf(user),-1,0,2, flame_range = 2) - if(9) - //Cold - var/datum/disease/D = new /datum/disease/cold() - T.visible_message("[user] looks a little under the weather!") - user.ForceContractDisease(D, FALSE, TRUE) - if(10) - //Nothing - T.visible_message("Nothing seems to happen.") - if(11) - //Cookie - T.visible_message("A cookie appears out of thin air!") - var/obj/item/reagent_containers/food/snacks/cookie/C = new(drop_location()) - do_smoke(0, drop_location()) - C.name = "Cookie of Fate" - if(12) - //Healing - T.visible_message("[user] looks very healthy!") - user.revive(full_heal = TRUE, admin_revive = TRUE) - if(13) - //Mad Dosh - T.visible_message("Mad dosh shoots out of [src]!") - var/turf/Start = get_turf(src) - for(var/direction in GLOB.alldirs) - var/turf/dirturf = get_step(Start,direction) - if(rand(0,1)) - new /obj/item/stack/spacecash/c1000(dirturf) - else - var/obj/item/storage/bag/money/M = new(dirturf) - for(var/i in 1 to rand(5,50)) - new /obj/item/coin/gold(M) - if(14) - //Free Gun - T.visible_message("An impressive gun appears!") - do_smoke(0, drop_location()) - new /obj/item/gun/ballistic/revolver/mateba(drop_location()) - if(15) - //Random One-use spellbook - T.visible_message("A magical looking book drops to the floor!") - do_smoke(0, drop_location()) - new /obj/item/book/granter/spell/random(drop_location()) - if(16) - //Servant & Servant Summon - T.visible_message("A Dice Servant appears in a cloud of smoke!") - var/mob/living/carbon/human/H = new(drop_location()) - do_smoke(0, drop_location()) - - H.equipOutfit(/datum/outfit/butler) - var/datum/mind/servant_mind = new /datum/mind() - var/datum/antagonist/magic_servant/A = new - servant_mind.add_antag_datum(A) - A.setup_master(user) - servant_mind.transfer_to(H) - - var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [user.real_name] Servant?", ROLE_WIZARD, null, ROLE_WIZARD, 50, H) - if(LAZYLEN(candidates)) - var/mob/dead/observer/C = pick(candidates) - message_admins("[ADMIN_LOOKUPFLW(C)] was spawned as Dice Servant") - H.key = C.key - - var/obj/effect/proc_holder/spell/targeted/summonmob/S = new - S.target_mob = H - user.mind.AddSpell(S) - - if(17) - //Tator Kit - T.visible_message("A suspicious box appears!") - new /obj/item/storage/box/syndicate/bundle_A(drop_location()) - do_smoke(0, drop_location()) - if(18) - //Captain ID - T.visible_message("A golden identification card appears!") - new /obj/item/card/id/captains_spare(drop_location()) - do_smoke(0, drop_location()) - if(19) - //Instrinct Resistance - T.visible_message("[user] looks very robust!") - user.physiology.brute_mod *= 0.5 - user.physiology.burn_mod *= 0.5 - - if(20) - //Free wizard! - T.visible_message("Magic flows out of [src] and into [user]!") - user.mind.make_Wizard() - -/datum/outfit/butler - name = "Butler" - uniform = /obj/item/clothing/under/suit/black_really - shoes = /obj/item/clothing/shoes/laceup - head = /obj/item/clothing/head/bowler - glasses = /obj/item/clothing/glasses/monocle - gloves = /obj/item/clothing/gloves/color/white - -/obj/effect/proc_holder/spell/targeted/summonmob - name = "Summon Servant" - desc = "" - charge_max = 100 - clothes_req = 0 - invocation = "JE VES" - invocation_type = "whisper" - range = -1 - level_max = 0 //cannot be improved - cooldown_min = 100 - include_user = 1 - - var/mob/living/target_mob - - action_icon_state = "summons" - -/obj/effect/proc_holder/spell/targeted/summonmob/cast(list/targets,mob/user = usr) - if(!target_mob) - return - var/turf/Start = get_turf(user) - for(var/direction in GLOB.alldirs) - var/turf/T = get_step(Start,direction) - if(!T.density) - target_mob.Move(T) - -/obj/structure/ladder/unbreakable/rune - name = "\improper Teleportation Rune" - desc = "" - icon = 'icons/obj/rune.dmi' - icon_state = "1" - color = rgb(0,0,255) - -/obj/structure/ladder/unbreakable/rune/update_icon() - return - -/obj/structure/ladder/unbreakable/rune/show_fluff_message(up,mob/user) - user.visible_message("[user] activates \the [src].", "I activate \the [src].") - -/obj/structure/ladder/unbreakable/rune/use(mob/user, is_ghost=FALSE) - if(is_ghost || !(user.mind in SSticker.mode.wizards)) - ..() diff --git a/code/modules/awaymissions/mission_code/Cabin.dm b/code/modules/awaymissions/mission_code/Cabin.dm index aa4e64aca9..be998efc9e 100644 --- a/code/modules/awaymissions/mission_code/Cabin.dm +++ b/code/modules/awaymissions/mission_code/Cabin.dm @@ -87,20 +87,6 @@ //other Cabin Stuff// -/obj/machinery/recycler/lumbermill - name = "lumbermill saw" - desc = "" - obj_flags = CAN_BE_HIT | EMAGGED - item_recycle_sound = 'sound/blank.ogg' - -/obj/machinery/recycler/lumbermill/recycle_item(obj/item/grown/log/L) - if(!istype(L)) - return - else - var/potency = L.seed.potency - ..() - new L.plank_type(src.loc, 1 + round(potency / 25)) - /mob/living/simple_animal/chicken/rabbit/normal icon_state = "b_rabbit" icon_living = "b_rabbit" @@ -117,7 +103,6 @@ /datum/mapGeneratorModule/snow/pineTrees, \ /datum/mapGeneratorModule/snow/deadTrees, \ /datum/mapGeneratorModule/snow/randBushes, \ - /datum/mapGeneratorModule/snow/randIceRocks, \ /datum/mapGeneratorModule/snow/bunnies) /datum/mapGeneratorModule/snow/checkPlaceAtom(turf/T) @@ -147,9 +132,6 @@ //spawnableAtoms = list(/mob/living/simple_animal/chicken/rabbit/normal = 0.1) spawnableAtoms = list(/mob/living/simple_animal/chicken/rabbit = 0.5) -/datum/mapGeneratorModule/snow/randIceRocks - spawnableAtoms = list(/obj/structure/flora/rock/icy = 5, /obj/structure/flora/rock/pile/icy = 5) - /obj/effect/landmark/mapGenerator/snowy mapGeneratorType = /datum/mapGenerator/snowy endTurfX = 159 diff --git a/code/modules/awaymissions/mission_code/challenge.dm b/code/modules/awaymissions/mission_code/challenge.dm index 66ca97e719..be59db5abb 100644 --- a/code/modules/awaymissions/mission_code/challenge.dm +++ b/code/modules/awaymissions/mission_code/challenge.dm @@ -14,23 +14,5 @@ icon_state = "away2" requires_power = FALSE - -/obj/machinery/power/emitter/energycannon - name = "Energy Cannon" - desc = "" - icon = 'icons/obj/singularity.dmi' - icon_state = "emitter_+a" - anchored = TRUE - density = TRUE - resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF - - use_power = NO_POWER_USE - idle_power_usage = 0 - active_power_usage = 0 - - active = TRUE - locked = TRUE - state = 2 - /obj/machinery/power/emitter/energycannon/RefreshParts() return diff --git a/code/modules/awaymissions/mission_code/murderdome.dm b/code/modules/awaymissions/mission_code/murderdome.dm index 8a4e139b36..29dadb04cb 100644 --- a/code/modules/awaymissions/mission_code/murderdome.dm +++ b/code/modules/awaymissions/mission_code/murderdome.dm @@ -15,11 +15,6 @@ /obj/effect/spawner/structure/window/reinforced/indestructable spawn_list = list(/obj/structure/grille/indestructable, /obj/structure/window/reinforced/fulltile/indestructable) -/obj/structure/barricade/security/murderdome - name = "respawnable barrier" - desc = "" - deploy_time = 0 - deploy_message = 0 /obj/structure/barricade/security/murderdome/make_debris() new /obj/effect/murderdome/dead_barricade(get_turf(src)) diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm deleted file mode 100644 index 919ed65b2b..0000000000 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ /dev/null @@ -1,664 +0,0 @@ -//Snow Valley Areas//-- - -/area/awaymission/snowdin - name = "Snowdin" - icon_state = "awaycontent1" - requires_power = FALSE - dynamic_lighting = DYNAMIC_LIGHTING_DISABLED - -/area/awaymission/snowdin/outside - name = "Snowdin Tundra Plains" - icon_state = "awaycontent25" - -/area/awaymission/snowdin/post - name = "Snowdin Outpost" - icon_state = "awaycontent2" - requires_power = TRUE - dynamic_lighting = DYNAMIC_LIGHTING_ENABLED - -/area/awaymission/snowdin/post/medbay - name = "Snowdin Outpost - Medbay" - icon_state = "awaycontent3" - -/area/awaymission/snowdin/post/secpost - name = "Snowdin Outpost - Security Checkpoint" - icon_state = "awaycontent4" - -/area/awaymission/snowdin/post/hydro - name = "Snowdin Outpost - Hydroponics" - icon_state = "awaycontent5" - -/area/awaymission/snowdin/post/messhall - name = "Snowdin Outpost - Mess Hall" - icon_state = "awaycontent6" - -/area/awaymission/snowdin/post/gateway - name = "Snowdin Outpost - Gateway" - icon_state = "awaycontent7" - -/area/awaymission/snowdin/post/dorm - name = "Snowdin Outpost - Dorms" - icon_state = "awaycontent8" - -/area/awaymission/snowdin/post/kitchen - name = "Snowdin Outpost - Kitchen" - icon_state = "awaycontent9" - -/area/awaymission/snowdin/post/engineering - name = "Snowdin Outpost - Engineering" - icon_state = "awaycontent10" - -/area/awaymission/snowdin/post/custodials - name = "Snowdin Outpost - Custodials" - icon_state = "awaycontent11" - -/area/awaymission/snowdin/post/research - name = "Snowdin Outpost - Research Area" - icon_state = "awaycontent12" - -/area/awaymission/snowdin/post/garage - name = "Snowdin Outpost - Garage" - icon_state = "awaycontent13" - -/area/awaymission/snowdin/post/minipost - name = "Snowdin Outpost - Recon Post" - icon_state = "awaycontent19" - -/area/awaymission/snowdin/post/mining_main - name = "Snowdin Outpost - Mining Post" - icon_state = "awaycontent21" - -/area/awaymission/snowdin/post/mining_main/mechbay - name = "Snowdin Outpost - Mining Post Mechbay" - icon_state = "awaycontent25" - -/area/awaymission/snowdin/post/mining_main/robotics - name = "Snowdin Outpost - Mining Post Robotics" - icon_state = "awaycontent26" - -/area/awaymission/snowdin/post/cavern1 - name = "Snowdin Outpost - Cavern Outpost 1" - icon_state = "awaycontent27" - -/area/awaymission/snowdin/post/cavern2 - name = "Snowdin Outpost - Cavern Outpost 2" - icon_state = "awaycontent28" - -/area/awaymission/snowdin/post/mining_dock - name = "Snowdin Outpost - Underground Mine Post" - icon_state = "awaycontent22" - -/area/awaymission/snowdin/post/broken_shuttle - name = "Snowdin Outpost - Broken Transit Shuttle" - icon_state = "awaycontent20" - requires_power = FALSE - -/area/awaymission/snowdin/igloo - name = "Snowdin Igloos" - icon_state = "awaycontent14" - dynamic_lighting = DYNAMIC_LIGHTING_FORCED - -/area/awaymission/snowdin/cave - name = "Snowdin Caves" - icon_state = "awaycontent15" - dynamic_lighting = DYNAMIC_LIGHTING_FORCED - -/area/awaymission/snowdin/cave/cavern - name = "Snowdin Depths" - icon_state = "awaycontent23" - -/area/awaymission/snowdin/cave/mountain - name = "Snowdin Mountains" - icon_state = "awaycontent24" - - -/area/awaymission/snowdin/base - name = "Snowdin Main Base" - icon_state = "awaycontent16" - dynamic_lighting = DYNAMIC_LIGHTING_ENABLED - requires_power = TRUE - -/area/awaymission/snowdin/dungeon1 - name = "Snowdin Depths" - icon_state = "awaycontent17" - dynamic_lighting = DYNAMIC_LIGHTING_ENABLED - -/area/awaymission/snowdin/sekret - name = "Snowdin Operations" - icon_state = "awaycontent18" - dynamic_lighting = DYNAMIC_LIGHTING_ENABLED - requires_power = TRUE - -/area/shuttle/snowdin/elevator1 - name = "Excavation Elevator" - -/area/shuttle/snowdin/elevator2 - name = "Mining Elevator" - -//shuttle console for elevators// - -/obj/machinery/computer/shuttle/snowdin/mining - name = "shuttle console" - desc = "" - icon_screen = "shuttle" - icon_keyboard = "tech_key" - light_color = LIGHT_COLOR_CYAN - shuttleId = "snowdin_mining" - possible_destinations = "snowdin_mining_top;snowdin_mining_down" - - -//liquid plasma!!!!!!// - -/turf/open/floor/plasteel/dark/snowdin - initial_gas_mix = FROZEN_ATMOS - planetary_atmos = 1 - temperature = 180 - -/turf/open/lava/plasma - name = "liquid plasma" - desc = "" - icon_state = "liquidplasma" - initial_gas_mix = "o2=0;n2=82;plasma=24;TEMP=120" - baseturfs = /turf/open/lava/plasma - slowdown = 2 - - light_range = 3 - light_power = 0.75 - light_color = LIGHT_COLOR_PURPLE - -/turf/open/lava/plasma/attackby(obj/item/I, mob/user, params) - var/obj/item/reagent_containers/glass/C = I - if(C.reagents.total_volume >= C.volume) - to_chat(user, "[C] is full.") - return - C.reagents.add_reagent(/datum/reagent/toxin/plasma, rand(5, 10)) - user.visible_message("[user] scoops some plasma from the [src] with \the [C].", "I scoop out some plasma from the [src] using \the [C].") - -/turf/open/lava/plasma/burn_stuff(AM) - . = 0 - - if(is_safe()) - return FALSE - - var/thing_to_check = src - if (AM) - thing_to_check = list(AM) - for(var/thing in thing_to_check) - if(isobj(thing)) - var/obj/O = thing - if((O.resistance_flags & (FREEZE_PROOF)) || O.throwing) - continue - - else if (isliving(thing)) - . = 1 - var/mob/living/L = thing - if(L.movement_type & FLYING) - continue //YOU'RE FLYING OVER IT - if("snow" in L.weather_immunities) - continue - - var/buckle_check = L.buckling - if(!buckle_check) - buckle_check = L.buckled - if(isobj(buckle_check)) - var/obj/O = buckle_check - if(O.resistance_flags & FREEZE_PROOF) - continue - - else if(isliving(buckle_check)) - var/mob/living/live = buckle_check - if("snow" in live.weather_immunities) - continue - - L.adjustFireLoss(2) - if(L) - L.adjust_fire_stacks(20) //dipping into a stream of plasma would probably make you more flammable than usual - L.adjust_bodytemperature(-rand(50,65)) //its cold, man - if(ishuman(L))//are they a carbon? - var/list/plasma_parts = list()//a list of the organic parts to be turned into plasma limbs - var/list/robo_parts = list()//keep a reference of robotic parts so we know if we can turn them into a plasmaman - var/mob/living/carbon/human/PP = L - var/S = PP.dna.species - if(istype(S, /datum/species/plasmaman) || istype(S, /datum/species/android) || istype(S, /datum/species/synth)) //ignore plasmamen/robotic species - continue - - for(var/BP in PP.bodyparts) - var/obj/item/bodypart/NN = BP - if(NN.status == BODYPART_ORGANIC && NN.species_id != "plasmaman") //getting every organic, non-plasmaman limb (augments/androids are immune to this) - plasma_parts += NN - if(NN.status == BODYPART_ROBOTIC) - robo_parts += NN - - if(prob(35)) //checking if the delay is over & if the victim actually has any parts to nom - PP.adjustToxLoss(15) - PP.adjustFireLoss(25) - if(plasma_parts.len) - var/obj/item/bodypart/NB = pick(plasma_parts) //using the above-mentioned list to get a choice of limbs for dismember() to use - PP.emote("scream") - NB.species_id = "plasmaman"//change the species_id of the limb to that of a plasmaman - NB.no_update = TRUE - NB.change_bodypart_status() - PP.visible_message("[L] screams in pain as [L.p_their()] [NB] melts down to the bone!", \ - "I scream out in pain as my [NB] melts down to the bone, leaving an eerie plasma-like glow where flesh used to be!") - if(!plasma_parts.len && !robo_parts.len) //a person with no potential organic limbs left AND no robotic limbs, time to turn them into a plasmaman - PP.IgniteMob() - PP.set_species(/datum/species/plasmaman) - PP.visible_message("[L] bursts into a brilliant purple flame as [L.p_their()] entire body is that of a skeleton!", \ - "My senses numb as all of my remaining flesh is turned into a purple slurry, sloshing off my body and leaving only my bones to show in a vibrant purple!") - - -/obj/vehicle/ridden/lavaboat/plasma - name = "plasma boat" - desc = "" - icon_state = "goliath_boat" - icon = 'icons/obj/lavaland/dragonboat.dmi' - resistance_flags = FREEZE_PROOF - can_buckle = TRUE -/////////// papers - - -/obj/item/paper/crumpled/ruins/snowdin/foreshadowing - name = "scribbled note" - info = {"Something's gone VERY wrong here. Jouslen has been mumbling about some weird shit in his cabin during the night and he seems always tired when we're working. I tried to confront him about it and he blew up on me, - telling me to mind my own business. I reported him to the officer, said he'd look into it. We only got another 2 months here before we're pulled for another assignment, so this shit can't go any quicker..."} - -/obj/item/paper/crumpled/ruins/snowdin/misc1 - name = "Mission Prologue" - info = {"Holy shit, what a rush! Those Nanotrasen bastards didn't even know what hit 'em! All five of us dropped in right on the captain, didn't even have time to yell! We were in and out with that disk in mere minutes! - Crew didn't even know what was happening till the delta alert went down and by then we were already gone. We got a case to drink on the way home to celebrate, fuckin' job well done!"} - -/obj/item/paper/crumpled/ruins/snowdin/dontdeadopeninside - name = "scribbled note" - info = {"If you're reading this: GET OUT! The mining go on here has unearthed something that was once-trapped by the layers of ice on this hell-hole. The overseer and Jouslen have gone missing. The officer is - keeping the rest of us on lockdown and I swear to god I keep hearing strange noises outside the walls at night. The gateway link has gone dead and without a supply of resources from Central, we're left - for dead here. We haven't heard anything back from the mining squad either, so I can only assume whatever the fuck they unearthed got them first before coming for us. I don't want to die here..."} - -/obj/item/paper/fluff/awaymissions/snowdin/saw_usage - name = "SAW Usage" - info = "YOU SEEN IVAN, WHEN YOU HOLD SAAW LIKE PEESTOL, YOU STRONGER THAN RECOIL FOR FEAR OF HITTING FACE!" - -/obj/item/paper/fluff/awaymissions/snowdin/research_feed - name = "Research Feed" - info = {"A page full of graphs and other detailed information on the seismic activity of the surrounding area."} - -//profile of each of the old crewmembers for the outpost - -/obj/item/paper/fluff/awaymissions/snowdin/profile/overseer - name = "Personnel Record AOP#01" - info = {"
    Personnel Log


    Name:Caleb Reed
    Age:38
    Gender:Male
    On-Site Profession:Outpost Overseer

    Information

    Caleb Reed lead several expeditions - among uncharted planets in search of plasma for Nanotrasen, scouring from hot savanas to freezing arctics. Track record is fairly clean with only incidient including the loss of two researchers during the - expedition of _______, where mis-used of explosive ordinance for tunneling causes a cave-in."} - -/obj/item/paper/fluff/awaymissions/snowdin/profile/sec1 - name = "Personnel Record AOP#02" - info = {"
    Personnel Log


    Name:James Reed
    Age:43
    Gender:Male
    On-Site Profession:Outpost Security

    Information

    James Reed has been a part - of Nanotrasen's security force for over 20 years, first joining in 22XX. A clean record and unwavering loyalty to the corperation through numerous deployments to various sites makes him a valuable asset to Natotrasen - when it comes to keeping the peace while prioritizing Nanotrasen privacy matters. "} - -/obj/item/paper/fluff/awaymissions/snowdin/profile/hydro1 - name = "Personnel Record AOP#03" - info = {"
    Personnel Log


    Name:Katherine Esterdeen
    Age:27
    Gender:Female
    On-Site Profession:Outpost Botanist

    Information

    Katherine Esterdeen is a recent - graduate with a major in Botany and a PH.D in Ecology. Having a clean record and eager to work, Esterdeen seems to be the right fit for maintaining plants in the middle of nowhere."} - -/obj/item/paper/fluff/awaymissions/snowdin/profile/engi1 - name = "Personnel Record AOP#04" - info = {"
    Personnel Log


    Name:Rachel Migro
    Age:35
    Gender:Female
    On-Site Profession:Outpost Engineer

    Information

    Recently certified to be a full-time Journeyman, Rachel has - been assigned various construction projects in the past 5 years. Competent and has no past infractions, should be of little concern."} - -/obj/item/paper/fluff/awaymissions/snowdin/profile/research1 - name = "Personnel Record AOP#05" - info = {"
    Personnel Log


    Name:Jacob Ullman
    Age:27
    Gender:Male
    On-Site Profession:Outpost Researcher

    Information

    "} - -/obj/item/paper/fluff/awaymissions/snowdin/profile/research2 - name = "Personnel Record AOP#06" - info = {"
    Personnel Log


    Name:Elizabeth Queef
    Age:28
    Gender:Female
    On-Site Profession:Outpost Researcher

    Information

    "} - -/obj/item/paper/fluff/awaymissions/snowdin/profile/research3 - name = "Personnel Record AOP#07" - info = {"
    Personnel Log


    Name:Jouslen McGee
    Age:38
    Gender:Male
    On-Site Profession:Outpost Researcher

    Information

    "} - -/obj/item/paper/fluff/awaymissions/snowdin/secnotice - name = "Security Notice" - info = {"YOu have been assigned to this Arctic Post with intention of protecting Nanotrasen assets and ensuring vital information is kept secure while the stationed crew obeys protocol. The picked - staff for this post have been pre-screened with no prior incidients on record, but incase of an issue you have been given a single holding cell and instructions to contact Central to terminate the - offending crewmember."} - -/obj/item/paper/fluff/awaymissions/snowdin/mining - name = "Assignment Notice" - info = {"This cold-ass planet is the new-age equivalent of striking gold. Huge deposits of plasma and literal streams of plasma run through the caverns under all this ice and we're here to mine it all.\ - Nanotrasen pays by the pound, so get minin' boys!"} - -/obj/item/paper/crumpled/ruins/snowdin/lootstructures - name = "scribbled note" - info = {"There's some ruins scattered along the cavern, their walls seem to be made of some sort of super-condensed mixture of ice and snow. We've already barricaded up the ones we've found so far, - since we keep hearing some strange noises from inside. Besides, what sort of fool would wrecklessly run into ancient ruins full of monsters for some old gear, anyway?"} - -/obj/item/paper/crumpled/ruins/snowdin/shovel - name = "shoveling duties" - info = {"Snow piles up bad here all-year round, even worse during the winter months. Keeping a constant rotation of shoveling that shit out of the way of the airlocks and keeping the paths decently clear - is a good step towards not getting stuck walking through knee-deep snow."} - -//holo disk recording//-- - -/obj/item/disk/holodisk/snowdin/weregettingpaidright - name = "Conversation #AOP#23" - preset_image_type = /datum/preset_holoimage/researcher - preset_record_text = {" - NAME Jacob Ullman - DELAY 10 - SAY Have you gotten anything interesting on the scanners yet? The deep-drilling from the plasma is making it difficult to get anything that isn't useless noise. - DELAY 45 - NAME Elizabeth Queef - DELAY 10 - SAY Nah. I've been feeding the AI the results for the past 2 weeks to sift through the garbage and haven't seen anything out of the usual, at least whatever Nanotrasen is looking for. - DELAY 45 - NAME Jacob Ullman - DELAY 10 - SAY Figured as much. Dunno what Nanotrasen expects to find out here past the plasma. At least we're getting paid to fuck around for a couple months while the AI does the hard work. - DELAY 45 - NAME Elizabeth Queef - DELAY 10 - SAY . . . - DELAY 10 - SAY ..We're getting paid? - DELAY 20 - NAME Jacob Ullman - DELAY 10 - SAY ..We are getting paid, aren't we..? - DELAY 15 - PRESET /datum/preset_holoimage/captain - NAME Caleb Reed - DELAY 10 - SAY Paid in experience! That's the Nanotrasen Motto! - DELAY 30;"} - -/obj/item/disk/holodisk/snowdin/welcometodie - name = "Conversation #AOP#1" - preset_image_type = /datum/preset_holoimage/corgi - preset_record_text = {" - NAME Friendly AI Unit - DELAY 10 - SAY Hello! Welcome to the Arctic Post *338-3**$$! - DELAY 30 - SAY You have been selected out of $)@! potential candidates for this post! - DELAY 30 - SAY Nanotrasen is pleased to have you working in one of the many top-of-the-line research posts within the $%@!! sector! - DELAY 30 - SAY Further job assignment information can be found at my local security post! Have a secure day! - DELAY 20;"} - -/obj/item/disk/holodisk/snowdin/overrun - name = "Conversation #AOP#55" - preset_image_type = /datum/preset_holoimage/nanotrasenprivatesecurity - preset_record_text = {" - NAME James Reed - DELAY 10 - SAY Jesus christ, what is that thing?? - DELAY 30 - PRESET /datum/preset_holoimage/researcher - NAME Elizabeth Queef - DELAY 10 - SAY Hell if I know! Just shoot it already! - DELAY 30 - PRESET /datum/preset_holoimage/nanotrasenprivatesecurity - NAME James Reed - DELAY 10 - SOUND sound/weapons/laser.ogg - DELAY 10 - SOUND sound/weapons/laser.ogg - DELAY 10 - SOUND sound/weapons/laser.ogg - DELAY 10 - SOUND sound/weapons/laser.ogg - DELAY 15 - SAY Just go! I'll keep it busy, there's an outpost south of here with an elevator to the surface. - NAME Jacob Ullman - PRESET /datum/preset_holoimage/researcher. - DELAY 15 - Say I don't have to be told twice! Let's get the fuck out of here. - DELAY 20;"} - -/obj/item/disk/holodisk/snowdin/ripjacob - name = "Conversation #AOP#62" - preset_image_type = /datum/preset_holoimage/researcher - preset_record_text = {" - NAME Jacob Ullman - DELAY 10 - SAY Get the elevator called. We got no idea how many of those fuckers are down here and I'd rather get off this planet as soon as possible. - DELAY 45 - NAME Elizabeth Queef - DELAY 10 - SAY You don't need to tell me twice, I just need to swipe access and then.. - DELAY 15 - SOUND sound/effects/glassbr1.ogg - DELAY 10 - SOUND sound/effects/glassbr2.ogg - DELAY 15 - NAME Jacob Ullman - DELAY 10 - SAY What the FUCK was that? - DELAY 20 - SAY OH FUCK THERE'S MORE OF THEM. CALL FASTER JESUS CHRIST. - DELAY 20 - NAME Elizabeth Queef - DELAY 10 - SAY DON'T FUCKING RUSH ME ALRIGHT IT'S BEING CALLED. - DELAY 15 - SOUND sound/effects/huuu.ogg - DELAY 5 - SOUND sound/effects/huuu.ogg - DELAY 15 - SOUND sound/effects/woodhit.ogg - DELAY 2 - SOUND sound/effects/bodyfall3.ogg - DELAY 5 - SOUND sound/effects/meow1.ogg - DELAY 15 - NAME Jacob Ullman - DELAY 15 - SAY OH FUCK IT'S GOT ME JESUS CHRIIIiiii- - NAME Elizabeth Queef - SAY AAAAAAAAAAAAAAAA FUCK THAT - DELAY 15;"} - -//lootspawners//-- - -/obj/effect/spawner/lootdrop/snowdin - name = "why are you using this dummy" - lootdoubles = 0 - lootcount = 1 - loot = list(/obj/item/bikehorn = 100) - -/obj/effect/spawner/lootdrop/snowdin/dungeonlite - name = "dungeon lite" - loot = list(/obj/item/melee/classic_baton = 11, - /obj/item/melee/classic_baton/telescopic = 12, - /obj/item/book/granter/spell/smoke = 10, - /obj/item/book/granter/spell/blind = 10, - /obj/item/storage/firstaid/regular = 45, - /obj/item/storage/firstaid/toxin = 35, - /obj/item/storage/firstaid/brute = 27, - /obj/item/storage/firstaid/fire = 27, - /obj/item/storage/toolbox/syndicate = 12, - /obj/item/grenade/c4 = 7, - /obj/item/grenade/clusterbuster/smoke = 15, - /obj/item/clothing/under/chameleon = 13, - /obj/item/clothing/shoes/chameleon/noslip = 10, - /obj/item/borg/upgrade/ddrill = 3, - /obj/item/borg/upgrade/soh = 3) - -/obj/effect/spawner/lootdrop/snowdin/dungeonmid - name = "dungeon mid" - loot = list(/obj/item/defibrillator/compact = 6, - /obj/item/storage/firstaid/tactical = 35, - /obj/item/shield/energy = 6, - /obj/item/shield/riot/tele = 12, - /obj/item/dnainjector/lasereyesmut = 7, - /obj/item/gun/magic/wand/fireball/inert = 3, - /obj/item/pneumatic_cannon = 15, - /obj/item/melee/transforming/energy/sword = 7, - /obj/item/book/granter/spell/knock = 15, - /obj/item/book/granter/spell/summonitem = 20, - /obj/item/book/granter/spell/forcewall = 17, - /obj/item/storage/backpack/holding = 12, - /obj/item/grenade/spawnergrenade/manhacks = 6, - /obj/item/grenade/spawnergrenade/spesscarp = 7, - /obj/item/grenade/clusterbuster/inferno = 3, - /obj/item/stack/sheet/mineral/diamond{amount = 15} = 10, - /obj/item/stack/sheet/mineral/uranium{amount = 15} = 10, - /obj/item/stack/sheet/mineral/plasma{amount = 15} = 10, - /obj/item/stack/sheet/mineral/gold{amount = 15} = 10, - /obj/item/book/granter/spell/barnyard = 4, - /obj/item/pickaxe/drill/diamonddrill = 6, - /obj/item/borg/upgrade/disablercooler = 7) - - -/obj/effect/spawner/lootdrop/snowdin/dungeonheavy - name = "dungeon heavy" - loot = list(/obj/item/twohanded/singularityhammer = 25, - /obj/item/twohanded/mjollnir = 10, - /obj/item/twohanded/fireaxe = 25, - /obj/item/organ/brain/alien = 17, - /obj/item/twohanded/dualsaber = 15, - /obj/item/organ/heart/demon = 7, - /obj/item/gun/ballistic/automatic/c20r/unrestricted = 16, - /obj/item/gun/magic/wand/resurrection/inert = 15, - /obj/item/gun/magic/wand/resurrection = 10, - /obj/item/uplink/old = 2, - /obj/item/book/granter/spell/charge = 12, - /obj/item/grenade/clusterbuster/spawner_manhacks = 15, - /obj/item/book/granter/spell/fireball = 10, - /obj/item/pickaxe/drill/jackhammer = 30, - /obj/item/borg/upgrade/syndicate = 13, - /obj/item/borg/upgrade/selfrepair = 17) - -/obj/effect/spawner/lootdrop/snowdin/dungeonmisc - name = "dungeon misc" - lootdoubles = 2 - lootcount = 1 - - loot = list(/obj/item/stack/sheet/mineral/snow{amount = 25} = 10, - /obj/item/toy/snowball = 15, - /obj/item/shovel = 10, - /obj/item/twohanded/spear = 8, - ) - -//special items//-- - -/obj/structure/barricade/wooden/snowed - name = "crude plank barricade" - desc = "" - icon_state = "woodenbarricade-snow" - max_integrity = 125 - -/obj/item/clothing/under/syndicate/coldres - name = "insulated tactical turtleneck" - desc = "" - armor = list("melee" = 20, "bullet" = 10, "laser" = 0,"energy" = 5, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 25, "acid" = 25) - cold_protection = CHEST|GROIN|ARMS|LEGS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - -/obj/item/clothing/shoes/combat/coldres - name = "insulated combat boots" - desc = "" - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - -/obj/item/gun/magic/wand/fireball/inert - name = "weakened wand of fireball" - desc = "" - max_charges = 4 - -/obj/item/gun/magic/wand/resurrection/inert - name = "weakened wand of healing" - desc = "" - max_charges = 5 - -/obj/effect/mob_spawn/human/syndicatesoldier/coldres - name = "Syndicate Snow Operative" - outfit = /datum/outfit/snowsyndie/corpse - -/datum/outfit/snowsyndie/corpse - name = "Syndicate Snow Operative Corpse" - implants = null - -/obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive - name = "sleeper" - mob_name = "Syndicate Snow Operative" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - roundstart = FALSE - death = FALSE - faction = ROLE_SYNDICATE - outfit = /datum/outfit/snowsyndie - flavour_text = "I are a syndicate operative recently awoken from cryostasis in an underground outpost. Monitor Nanotrasen communications and record information. All intruders should be \ - disposed of swiftly to assure no gathered information is stolen or lost. Try not to wander too far from the outpost as the caves can be a deadly place even for a trained operative such as myself." - -/datum/outfit/snowsyndie - name = "Syndicate Snow Operative" - uniform = /obj/item/clothing/under/syndicate/coldres - shoes = /obj/item/clothing/shoes/combat/coldres - ears = /obj/item/radio/headset/syndicate/alt - r_pocket = /obj/item/gun/ballistic/automatic/pistol - id = /obj/item/card/id/syndicate - implants = list(/obj/item/implant/exile) - - -/obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive/female - mob_gender = FEMALE - -//mobs//-- - -//ice spiders moved to giant_spiders.dm - -//objs//-- - -/obj/structure/flora/rock/icy - name = "icy rock" - color = rgb(204,233,235) - -/obj/structure/flora/rock/pile/icy - name = "icey rocks" - color = rgb(204,233,235) - -//decals//-- -/obj/effect/turf_decal/snowdin_station_sign - icon_state = "AOP1" - -/obj/effect/turf_decal/snowdin_station_sign/two - icon_state = "AOP2" - -/obj/effect/turf_decal/snowdin_station_sign/three - icon_state = "AOP3" - -/obj/effect/turf_decal/snowdin_station_sign/four - icon_state = "AOP4" - -/obj/effect/turf_decal/snowdin_station_sign/five - icon_state = "AOP5" - -/obj/effect/turf_decal/snowdin_station_sign/six - icon_state = "AOP6" - -/obj/effect/turf_decal/snowdin_station_sign/seven - icon_state = "AOP7" - -/obj/effect/turf_decal/snowdin_station_sign/up - icon_state = "AOPU1" - -/obj/effect/turf_decal/snowdin_station_sign/up/two - icon_state = "AOPU2" - -/obj/effect/turf_decal/snowdin_station_sign/up/three - icon_state = "AOPU3" - -/obj/effect/turf_decal/snowdin_station_sign/up/four - icon_state = "AOPU4" - -/obj/effect/turf_decal/snowdin_station_sign/up/five - icon_state = "AOPU5" - -/obj/effect/turf_decal/snowdin_station_sign/up/six - icon_state = "AOPU6" - -/obj/effect/turf_decal/snowdin_station_sign/up/seven - icon_state = "AOPU7" diff --git a/code/modules/awaymissions/mission_code/spacebattle.dm b/code/modules/awaymissions/mission_code/spacebattle.dm index a477a223b2..042bc281ea 100644 --- a/code/modules/awaymissions/mission_code/spacebattle.dm +++ b/code/modules/awaymissions/mission_code/spacebattle.dm @@ -41,11 +41,3 @@ name = "Hidden Chamber" icon_state = "awaycontent10" -/mob/living/simple_animal/hostile/syndicate/ranged/spacebattle - loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier, - /obj/item/gun/ballistic/automatic/c20r, - /obj/item/shield/energy) - -/mob/living/simple_animal/hostile/syndicate/melee/spacebattle - deathmessage = "falls limp as they release their grip from the energy weapons, activating their self-destruct function!" - loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier) diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm deleted file mode 100644 index 8b9612e787..0000000000 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ /dev/null @@ -1,157 +0,0 @@ -/* Station-Collision(sc) away mission map specific stuff - * - * Notes: - * Feel free to use parts of this map, or even all of it for your own project. Just include me in the credits :) - * - * Some of this code unnecessary, but the intent is to add a little bit of everything to serve as examples - * for anyone who wants to make their own stuff. - * - * Contains: - * Landmarks - * Guns - * Safe code hints - * Captain's safe - * Modified Nar'Sie - */ - - - -/* - * Landmarks - Instead of spawning a new object type, I'll spawn the bible using a landmark! - */ -/obj/effect/landmark/sc_bible_spawner - name = "Safecode hint spawner" - -/obj/effect/landmark/sc_bible_spawner/Initialize() - ..() - var/obj/item/storage/book/bible/B = new /obj/item/storage/book/bible/booze(loc) - B.name = "The Holy book of the Geometer" - B.deity_name = "Narsie" - B.icon_state = "melted" - B.item_state = "melted" - B.lefthand_file = 'icons/mob/inhands/misc/books_lefthand.dmi' - B.righthand_file = 'icons/mob/inhands/misc/books_righthand.dmi' - new /obj/item/paper/fluff/awaymissions/stationcollision/safehint_paper_bible(B) - new /obj/item/pen(B) - return INITIALIZE_HINT_QDEL - -/* - * Guns - I'm making these specifically so that I dont spawn a pile of fully loaded weapons on the map. - */ -//Captain's retro laser - Fires practice laser shots instead. -/obj/item/gun/energy/laser/retro/sc_retro - name ="retro laser" - icon_state = "retro" - desc = "" -// projectile_type = "/obj/projectile/practice" - clumsy_check = 0 //No sense in having a harmless gun blow up in the clowns face - -//Syndicate sub-machine guns. -/obj/item/gun/ballistic/automatic/c20r/sc_c20r - -/obj/item/gun/ballistic/automatic/c20r/sc_c20r/Initialize() - . = ..() - for(var/ammo in magazine.stored_ammo) - if(prob(95)) //95% chance - magazine.stored_ammo -= ammo - -//Barman's shotgun -/obj/item/gun/ballistic/shotgun/sc_pump - -/obj/item/gun/ballistic/shotgun/sc_pump/Initialize() - . = ..() - for(var/ammo in magazine.stored_ammo) - if(prob(95)) //95% chance - magazine.stored_ammo -= ammo - -//Lasers -/obj/item/gun/energy/laser/practice/sc_laser - name = "Old laser" - desc = "" - clumsy_check = 0 - -/* - * Safe code hints - */ - -//These vars hold the code itself, they'll be generated at round-start -GLOBAL_VAR_INIT(sc_safecode1, "[rand(0,9)]") -GLOBAL_VAR_INIT(sc_safecode2, "[rand(0,9)]") -GLOBAL_VAR_INIT(sc_safecode3, "[rand(0,9)]") -GLOBAL_VAR_INIT(sc_safecode4, "[rand(0,9)]") -GLOBAL_VAR_INIT(sc_safecode5, "[rand(0,9)]") - -//Pieces of paper actually containing the hints -/obj/item/paper/fluff/awaymissions/stationcollision/safehint_paper_prison - name = "smudged paper" - -/obj/item/paper/fluff/awaymissions/stationcollision/safehint_paper_prison/Initialize() - . = ..() - info = "The ink is smudged, you can only make out a couple numbers: '[GLOB.sc_safecode1]**[GLOB.sc_safecode4]*'" - -/obj/item/paper/fluff/awaymissions/stationcollision/safehint_paper_hydro - name = "shredded paper" -/obj/item/paper/fluff/awaymissions/stationcollision/safehint_paper_hydro/Initialize() - . = ..() - info = "Although the paper is shredded, you can clearly see the number: '[GLOB.sc_safecode2]'" - -/obj/item/paper/fluff/awaymissions/stationcollision/safehint_paper_caf - name = "blood-soaked paper" - //This does not have to be in New() because it is a constant. There are no variables in it i.e. [sc_safcode] - info = "This paper is soaked in blood, it is impossible to read any text." - -/obj/item/paper/fluff/awaymissions/stationcollision/safehint_paper_bible - name = "hidden paper" -/obj/item/paper/fluff/awaymissions/stationcollision/safehint_paper_bible/Initialize() - . = ..() - info = {"It would appear that the pen hidden with the paper had leaked ink over the paper. - However you can make out the last three digits:'[GLOB.sc_safecode3][GLOB.sc_safecode4][GLOB.sc_safecode5]' - "} - -/obj/item/paper/fluff/awaymissions/stationcollision/safehint_paper_shuttle - info = {"Target: Research-station Epsilon
    - Objective: Prototype weaponry. The captain likely keeps them locked in her safe.
    -
    - Our on-board spy has learned the code and has hidden away a few copies of the code around the station. Unfortunatly he has been captured by security - Your objective is to split up, locate any of the papers containing the captain's safe code, open the safe and - secure anything found inside. If possible, recover the imprisioned syndicate operative and receive the code from him.
    -
    - As always, eliminate anyone who gets in the way.
    -
    - Your assigned ship is designed specifically for penetrating the hull of another station or ship with minimal damage to operatives. - It is completely fly-by-wire meaning you have just have to enjoy the ride and when the red light comes on... find something to hold onto! - "} -/* - * Captain's safe - */ -/obj/item/storage/secure/safe/sc_ssafe - name = "Captain's secure safe" - -/obj/item/storage/secure/safe/sc_ssafe/Initialize() - . = ..() - l_code = "[GLOB.sc_safecode1][GLOB.sc_safecode2][GLOB.sc_safecode3][GLOB.sc_safecode4][GLOB.sc_safecode5]" - l_set = 1 - new /obj/item/gun/energy/mindflayer(src) - new /obj/item/soulstone(src) - new /obj/item/clothing/suit/space/hardsuit/cult(src) - //new /obj/item/teleportation_scroll(src) - new /obj/item/stack/ore/diamond(src) - -/* - * Modified Nar'Sie - */ -/obj/singularity/narsie/mini - desc = "" - move_self = 0 //Contianed narsie does not move! - grav_pull = 0 //Contained narsie does not pull stuff in! -//Override this to prevent no adminlog runtimes and admin warnings about a singularity without containment -/obj/singularity/narsie/mini/admin_investigate_setup() - return - -/obj/singularity/narsie/mini/process() - eat() - if(prob(25)) - mezzer() - -/obj/singularity/narsie/mini/ex_act() - return diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm index c7b9dbc540..a43585abf9 100644 --- a/code/modules/awaymissions/mission_code/wildwest.dm +++ b/code/modules/awaymissions/mission_code/wildwest.dm @@ -88,7 +88,7 @@ else chargesa-- insistinga = 0 - var/wish = input("You want...","Wish") as null|anything in sortList(list("Power","Wealth","Immortality","Peace")) + var/wish = input("You want...","Wish") as null|anything in sortList(list("Power","Immortality","Peace")) switch(wish) if("Power") to_chat(user, "My wish is granted, but at a terrible cost...") @@ -97,11 +97,6 @@ user.dna.add_mutation(SPACEMUT) user.dna.add_mutation(XRAY) user.set_species(/datum/species/shadow) - if("Wealth") - to_chat(user, "My wish is granted, but at a terrible cost...") - to_chat(user, "The Wish Granter punishes you for my selfishness, claiming my soul and warping my body to match the darkness in my heart.") - new /obj/structure/closet/syndicate/resources/everything(loc) - user.set_species(/datum/species/shadow) if("Immortality") to_chat(user, "My wish is granted, but at a terrible cost...") to_chat(user, "The Wish Granter punishes you for my selfishness, claiming my soul and warping my body to match the darkness in my heart.") diff --git a/code/modules/awaymissions/signpost.dm b/code/modules/awaymissions/signpost.dm index 835515b880..d7c72ee146 100644 --- a/code/modules/awaymissions/signpost.dm +++ b/code/modules/awaymissions/signpost.dm @@ -39,13 +39,6 @@ /obj/structure/signpost/attack_hulk(mob/user) return -/obj/structure/signpost/attack_larva(mob/user) - return interact(user) - -/obj/structure/signpost/attack_robot(mob/user) - if (Adjacent(user)) - return interact(user) - /obj/structure/signpost/attack_slime(mob/user) return interact(user) diff --git a/code/modules/awaymissions/super_secret_room.dm b/code/modules/awaymissions/super_secret_room.dm index 2f71ccb51d..5e29f0d6ff 100644 --- a/code/modules/awaymissions/super_secret_room.dm +++ b/code/modules/awaymissions/super_secret_room.dm @@ -98,11 +98,6 @@ /obj/structure/speaking_tile/attack_hulk(mob/user) return -/obj/structure/speaking_tile/attack_larva(mob/user) - return interact(user) - -/obj/structure/speaking_tile/attack_ai(mob/user) - return interact(user) /obj/structure/speaking_tile/attack_slime(mob/user) return interact(user) diff --git a/code/modules/buildmode/submodes/basic.dm b/code/modules/buildmode/submodes/basic.dm index fe3d831d81..b6fddc18b4 100644 --- a/code/modules/buildmode/submodes/basic.dm +++ b/code/modules/buildmode/submodes/basic.dm @@ -39,9 +39,6 @@ else if(isobj(object)) qdel(object) return - else if(istype(object,/turf) && alt_click && left_click) - log_admin("Build Mode: [key_name(c)] built an airlock at [AREACOORD(object)]") - new/obj/machinery/door/airlock(get_turf(object)) else if(istype(object,/turf) && ctrl_click && left_click) var/obj/structure/window/reinforced/window if(BM.build_dir == NORTHWEST) diff --git a/code/modules/cargo/bounties/assistant.dm b/code/modules/cargo/bounties/assistant.dm deleted file mode 100644 index 736c75e3c5..0000000000 --- a/code/modules/cargo/bounties/assistant.dm +++ /dev/null @@ -1,230 +0,0 @@ -/datum/bounty/item/assistant/strange_object - name = "Strange Object" - description = "Nanotrasen has taken an interest in strange objects. Find one in maint, and ship it off to CentCom right away." - reward = 1200 - wanted_types = list(/obj/item/relic) - -/datum/bounty/item/assistant/scooter - name = "Scooter" - description = "Nanotrasen has determined walking to be wasteful. Ship a scooter to CentCom to speed operations up." - reward = 1080 // the mat hoffman - wanted_types = list(/obj/vehicle/ridden/scooter) - include_subtypes = FALSE - -/datum/bounty/item/assistant/skateboard - name = "Skateboard" - description = "Nanotrasen has determined walking to be wasteful. Ship a skateboard to CentCom to speed operations up." - reward = 900 // the tony hawk - wanted_types = list(/obj/vehicle/ridden/scooter/skateboard, /obj/item/melee/skateboard) - -/datum/bounty/item/assistant/stunprod - name = "Stunprod" - description = "CentCom demands a stunprod to use against dissidents. Craft one, then ship it." - reward = 1300 - wanted_types = list(/obj/item/melee/baton/cattleprod) - -/datum/bounty/item/assistant/soap - name = "Soap" - description = "Soap has gone missing from CentCom's bathrooms and nobody knows who took it. Replace it and be the hero CentCom needs." - reward = 2000 - required_count = 3 - wanted_types = list(/obj/item/soap) - -/datum/bounty/item/assistant/spear - name = "Spears" - description = "CentCom's security forces are going through budget cuts. You will be paid if you ship a set of spears." - reward = 2000 - required_count = 5 - wanted_types = list(/obj/item/twohanded/spear) - -/datum/bounty/item/assistant/toolbox - name = "Toolboxes" - description = "There's an absence of robustness at Central Command. Hurry up and ship some toolboxes as a solution." - reward = 2000 - required_count = 6 - wanted_types = list(/obj/item/storage/toolbox) - -/datum/bounty/item/assistant/statue - name = "Statue" - description = "Central Command would like to commision an artsy statue for the lobby. Ship one out, when possible." - reward = 2000 - wanted_types = list(/obj/structure/statue) - -/datum/bounty/item/assistant/clown_box - name = "Clown Box" - description = "The universe needs laughter. Stamp cardboard with a clown stamp and ship it out." - reward = 1500 - wanted_types = list(/obj/item/storage/box/clown) - -/datum/bounty/item/assistant/cheesiehonkers - name = "Cheesie Honkers" - description = "Apparently the company that makes Cheesie Honkers is going out of business soon. CentCom wants to stock up before it happens!" - reward = 1200 - required_count = 3 - wanted_types = list(/obj/item/reagent_containers/food/snacks/cheesiehonkers) - -/datum/bounty/item/assistant/baseball_bat - name = "Baseball Bat" - description = "Baseball fever is going on at CentCom! Be a dear and ship them some baseball bats, so that management can live out their childhood dream." - reward = 2000 - required_count = 5 - wanted_types = list(/obj/item/melee/baseball_bat) - -/datum/bounty/item/assistant/extendohand - name = "Extendo-Hand" - description = "Commander Betsy is getting old, and can't bend over to get the telescreen remote anymore. Management has requested an extendo-hand to help her out." - reward = 2500 - wanted_types = list(/obj/item/extendohand) - -/datum/bounty/item/assistant/donut - name = "Donuts" - description = "CentCom's security forces are facing heavy losses against the Syndicate. Ship donuts to raise morale." - reward = 3000 - required_count = 10 - wanted_types = list(/obj/item/reagent_containers/food/snacks/donut) - -/datum/bounty/item/assistant/donkpocket - name = "Donk-Pockets" - description = "Consumer safety recall: Warning. Donk-Pockets manufactured in the past year contain hazardous lizard biomatter. Return units to CentCom immediately." - reward = 3000 - required_count = 10 - wanted_types = list(/obj/item/reagent_containers/food/snacks/donkpocket) - -/datum/bounty/item/assistant/briefcase - name = "Briefcase" - description = "Central Command will be holding a business convention this year. Ship a few briefcases in support." - reward = 2500 - required_count = 5 - wanted_types = list(/obj/item/storage/briefcase, /obj/item/storage/secure/briefcase) - -/datum/bounty/item/assistant/sunglasses - name = "Sunglasses" - description = "A famous blues duo is passing through the sector, but they've lost their shades and they can't perform. Ship new sunglasses to CentCom to rectify this." - reward = 3000 - required_count = 2 - wanted_types = list(/obj/item/clothing/glasses/sunglasses) - -/datum/bounty/item/assistant/monkey_hide - name = "Monkey Hide" - description = "One of the scientists at CentCom is interested in testing products on monkey skin. Your mission is to acquire monkey's hide and ship it." - reward = 1500 - wanted_types = list(/obj/item/stack/sheet/animalhide/monkey) - -/datum/bounty/item/assistant/shard - name = "Shards" - description = "A killer clown has been stalking CentCom, and staff have been unable to catch her because she's not wearing shoes. Please ship some shards so that a booby trap can be constructed." - reward = 1500 - required_count = 15 - wanted_types = list(/obj/item/shard) - -/datum/bounty/item/assistant/comfy_chair - name = "Comfy Chairs" - description = "Commander Pat is unhappy with his chair. He claims it hurts his back. Ship some alternatives out to humor him." - reward = 1500 - required_count = 5 - wanted_types = list(/obj/structure/chair/comfy) - -/datum/bounty/item/assistant/geranium - name = "Geraniums" - description = "Commander Zot has the hots for Commander Zena. Send a shipment of geraniums - her favorite flower - and he'll happily reward you." - reward = 4000 - required_count = 3 - -/datum/bounty/item/assistant/poppy - name = "Poppies" - description = "Commander Zot really wants to sweep Security Officer Olivia off her feet. Send a shipment of Poppies - her favorite flower - and he'll happily reward you." - reward = 1000 - required_count = 3 - - include_subtypes = FALSE - -/datum/bounty/item/assistant/shadyjims - name = "Shady Jim's" - description = "There's an irate officer at CentCom demanding that he receive a box of Shady Jim's cigarettes. Please ship one. He's starting to make threats." - reward = 500 - wanted_types = list(/obj/item/storage/fancy/cigarettes/cigpack_shadyjims) - -/datum/bounty/item/assistant/potted_plants - name = "Potted Plants" - description = "Central Command is looking to commission a new BirdBoat-class station. You've been ordered to supply the potted plants." - reward = 2000 - required_count = 8 - wanted_types = list(/obj/item/twohanded/required/kirbyplants) - -/datum/bounty/item/assistant/earmuffs - name = "Earmuffs" - description = "Central Command is getting tired of your station's messages. They've ordered that you ship some earmuffs to lessen the annoyance." - reward = 1000 - wanted_types = list(/obj/item/clothing/ears/earmuffs) - -/datum/bounty/item/assistant/handcuffs - name = "Handcuffs" - description = "A large influx of escaped convicts have arrived at Central Command. Now is the perfect time to ship out spare handcuffs (or restraints)." - reward = 1000 - required_count = 5 - wanted_types = list(/obj/item/restraints/handcuffs) - -/datum/bounty/item/assistant/monkey_cubes - name = "Monkey Cubes" - description = "Due to a recent genetics accident, Central Command is in serious need of monkeys. Your mission is to ship monkey cubes." - reward = 2000 - required_count = 3 - wanted_types = list(/obj/item/reagent_containers/food/snacks/monkeycube) - -/datum/bounty/item/assistant/chainsaw - name = "Chainsaw" - description = "The chef at CentCom is having trouble butchering her animals. She requests one chainsaw, please." - reward = 2500 - wanted_types = list(/obj/item/twohanded/required/chainsaw) - -/datum/bounty/item/assistant/ied - name = "IED" - description = "Nanotrasen's maximum security prison at CentCom is undergoing personnel training. Ship a handful of IEDs to serve as a training tools." - reward = 2000 - required_count = 3 - wanted_types = list(/obj/item/grenade/iedcasing) - -/datum/bounty/item/assistant/bonfire - name = "Lit Bonfire" - description = "Space heaters are malfunctioning and the cargo crew of Central Command is starting to feel cold. Ship a lit bonfire to warm them up." - reward = 5000 - wanted_types = list(/obj/structure/bonfire) - -/datum/bounty/item/assistant/bonfire/applies_to(obj/O) - if(!..()) - return FALSE - var/obj/structure/bonfire/B = O - return !!B.burning - -/datum/bounty/item/assistant/corgimeat - name = "Raw Corgi Meat" - description = "The Syndicate recently stole all of CentCom's Corgi meat. Ship out a replacement immediately." - reward = 3000 - wanted_types = list(/obj/item/reagent_containers/food/snacks/meat/slab/corgi) - -/datum/bounty/item/assistant/corgifarming - name = "Corgi Hides" - description = "Admiral Weinstein's space yacht needs new upholstery. A dozen Corgi furs should do just fine." - reward = 30000 //that's a lot of dead dogs - required_count = 12 - wanted_types = list(/obj/item/stack/sheet/animalhide/corgi) - -/datum/bounty/item/assistant/action_figures - name = "Action Figures" - description = "The vice president's son saw an ad for action figures on the telescreen and now he won't shut up about them. Ship some to ease his complaints." - reward = 4000 - required_count = 5 - wanted_types = list(/obj/item/toy/figure) - -/datum/bounty/item/assistant/tail_whip - name = "Nine Tails whip" - description = "Commander Jackson is looking for a fine addition to her exotic weapons collection. She will reward you handsomely for either a Cat or Liz o' Nine Tails." - reward = 4000 - wanted_types = list(/obj/item/melee/chainofcommand/tailwhip) - -/datum/bounty/item/assistant/dead_mice - name = "Dead Mice" - description = "Station 14 ran out of freeze-dried mice. Ship some fresh ones so their janitor doesn't go on strike." - reward = 5000 - required_count = 5 - wanted_types = list(/obj/item/reagent_containers/food/snacks/deadmouse) diff --git a/code/modules/cargo/bounties/chef.dm b/code/modules/cargo/bounties/chef.dm deleted file mode 100644 index 440eeba61e..0000000000 --- a/code/modules/cargo/bounties/chef.dm +++ /dev/null @@ -1,124 +0,0 @@ -/datum/bounty/item/chef/birthday_cake - name = "Birthday Cake" - description = "Nanotrasen's birthday is coming up! Ship them a birthday cake to celebrate!" - reward = 4000 - wanted_types = list(/obj/item/reagent_containers/food/snacks/store/cake/birthday, /obj/item/reagent_containers/food/snacks/cakeslice/birthday) - -/datum/bounty/item/chef/soup - name = "Soup" - description = "To quell the homeless uprising, Nanotrasen will be serving soup to all underpaid workers. Ship any type of soup." - reward = 3000 - required_count = 3 - wanted_types = list(/obj/item/reagent_containers/food/snacks/soup) - -/datum/bounty/item/chef/popcorn - name = "Popcorn Bags" - description = "Upper management wants to host a movie night. Ship bags of popcorn for the occasion." - reward = 3000 - required_count = 3 - wanted_types = list(/obj/item/reagent_containers/food/snacks/popcorn) - -/datum/bounty/item/chef/icecreamsandwich - name = "Ice Cream Sandwiches" - description = "Upper management has been screaming non-stop for ice cream. Please send some." - reward = 4000 - required_count = 3 - wanted_types = list(/obj/item/reagent_containers/food/snacks/icecreamsandwich) - -/datum/bounty/item/chef/bread - name = "Bread" - description = "Problems with central planning have led to bread prices skyrocketing. Ship some bread to ease tensions." - reward = 1000 - wanted_types = list(/obj/item/reagent_containers/food/snacks/store/bread, /obj/item/reagent_containers/food/snacks/breadslice, /obj/item/reagent_containers/food/snacks/bun, /obj/item/reagent_containers/food/snacks/pizzabread) - -/datum/bounty/item/chef/pie - name = "Pie" - description = "3.14159? No! CentCom management wants edible pie! Ship a whole one." - reward = 3142 - wanted_types = list(/obj/item/reagent_containers/food/snacks/pie) - -/datum/bounty/item/chef/salad - name = "Salad or Rice Bowls" - description = "CentCom management is going on a health binge. Your order is to ship salad or rice bowls." - reward = 3000 - required_count = 3 - wanted_types = list(/obj/item/reagent_containers/food/snacks/salad) - -/datum/bounty/item/chef/carrotfries - name = "Carrot Fries" - description = "Night sight can mean life or death! A shipment of carrot fries is the order." - reward = 3500 - required_count = 3 - wanted_types = list(/obj/item/reagent_containers/food/snacks/carrotfries) - -/datum/bounty/item/chef/superbite - name = "Super Bite Burger" - description = "Commander Tubbs thinks he can set a competitive eating world record. All he needs is a super bite burger shipped to him." - reward = 12000 - wanted_types = list(/obj/item/reagent_containers/food/snacks/burger/superbite) - -/datum/bounty/item/chef/poppypretzel - name = "Poppy Pretzel" - description = "Central Command needs a reason to fire their HR head. Send over a poppy pretzel to force a failed drug test." - reward = 3000 - wanted_types = list(/obj/item/reagent_containers/food/snacks/poppypretzel) - -/datum/bounty/item/chef/cubancarp - name = "Cuban Carp" - description = "To celebrate the birth of Castro XXVII, ship one cuban carp to CentCom." - reward = 8000 - wanted_types = list(/obj/item/reagent_containers/food/snacks/cubancarp) - -/datum/bounty/item/chef/hotdog - name = "Hot Dog" - description = "Nanotrasen is conducting taste tests to determine the best hot dog recipe. Ship your station's version to participate." - reward = 8000 - wanted_types = list(/obj/item/reagent_containers/food/snacks/hotdog) - -/datum/bounty/item/chef/eggplantparm - name = "Eggplant Parmigianas" - description = "A famous singer will be arriving at CentCom, and their contract demands that they only be served Eggplant Parmigiana. Ship some, please!" - reward = 3500 - required_count = 3 - wanted_types = list(/obj/item/reagent_containers/food/snacks/eggplantparm) - -/datum/bounty/item/chef/muffin - name = "Muffins" - description = "The Muffin Man is visiting CentCom, but he's forgotten his muffins! Your order is to rectify this." - reward = 3000 - required_count = 3 - wanted_types = list(/obj/item/reagent_containers/food/snacks/muffin) - -/datum/bounty/item/chef/chawanmushi - name = "Chawanmushi" - description = "Nanotrasen wants to improve relations with its sister company, Japanotrasen. Ship Chawanmushi immediately." - reward = 8000 - wanted_types = list(/obj/item/reagent_containers/food/snacks/chawanmushi) - -/datum/bounty/item/chef/kebab - name = "Kebabs" - description = "Remove all kebab from station you are best food. Ship to CentCom to remove from the premises." - reward = 3500 - required_count = 3 - wanted_types = list(/obj/item/reagent_containers/food/snacks/kebab) - -/datum/bounty/item/chef/soylentgreen - name = "Soylent Green" - description = "CentCom has heard wonderful things about the product 'Soylent Green', and would love to try some. If you endulge them, expect a pleasant bonus." - reward = 5000 - wanted_types = list(/obj/item/reagent_containers/food/snacks/soylentgreen) - -/datum/bounty/item/chef/pancakes - name = "Pancakes" - description = "Here at Nanotrasen we consider employees to be family. And you know what families love? Pancakes. Ship a baker's dozen." - reward = 5000 - required_count = 13 - wanted_types = list(/obj/item/reagent_containers/food/snacks/pancakes) - -/datum/bounty/item/chef/nuggies - name = "Chicken Nuggets" - description = "The vice president's son won't shut up about chicken nuggies. Would you mind shipping some?" - reward = 4000 - required_count = 6 - wanted_types = list(/obj/item/reagent_containers/food/snacks/nugget) - diff --git a/code/modules/cargo/bounties/engineering.dm b/code/modules/cargo/bounties/engineering.dm deleted file mode 100644 index 77687977d7..0000000000 --- a/code/modules/cargo/bounties/engineering.dm +++ /dev/null @@ -1,37 +0,0 @@ -/datum/bounty/item/engineering/gas - name = "Full Tank of Pluoxium" - description = "CentCom RnD is researching extra compact internals. Ship us a tank full of Pluoxium and you'll be compensated." - reward = 7500 - wanted_types = list(/obj/item/tank) - var/moles_required = 20 // A full tank is 28 moles, but CentCom ignores that fact. - var/gas_type = /datum/gas/pluoxium - -/datum/bounty/item/engineering/gas/applies_to(obj/O) - if(!..()) - return FALSE - var/obj/item/tank/T = O - if(!T.air_contents.gases[gas_type]) - return FALSE - return T.air_contents.gases[gas_type][MOLES] >= moles_required - -/datum/bounty/item/engineering/gas/nitryl_tank - name = "Full Tank of Nitryl" - description = "The non-human staff of Station 88 has been volunteered to test performance enhancing drugs. Ship them a tank full of Nitryl so they can get started." - gas_type = /datum/gas/nitryl - -/datum/bounty/item/engineering/gas/tritium_tank - name = "Full Tank of Tritium" - description = "Station 49 is looking to kickstart their research program. Ship them a tank full of Tritium." - gas_type = /datum/gas/tritium - -/datum/bounty/item/engineering/energy_ball - name = "Contained Tesla Ball" - description = "Station 24 is being overrun by hordes of angry Mothpeople. They are requesting the ultimate bug zapper." - reward = 75000 //requires 14k credits of purchases, not to mention cooperation with engineering/heads of staff to set up inside the cramped shuttle - wanted_types = list(/obj/singularity/energy_ball) - -/datum/bounty/item/engineering/energy_ball/applies_to(obj/O) - if(!..()) - return FALSE - var/obj/singularity/energy_ball/T = O - return !T.miniball diff --git a/code/modules/cargo/bounties/item.dm b/code/modules/cargo/bounties/item.dm deleted file mode 100644 index b2586d7c5b..0000000000 --- a/code/modules/cargo/bounties/item.dm +++ /dev/null @@ -1,39 +0,0 @@ -/datum/bounty/item - var/required_count = 1 - var/shipped_count = 0 - var/list/wanted_types // Types accepted for the bounty. - var/include_subtypes = TRUE // Set to FALSE to make the datum apply only to a strict type. - var/list/exclude_types // Types excluded. - -/datum/bounty/item/New() - ..() - wanted_types = typecacheof(wanted_types) - exclude_types = typecacheof(exclude_types) - -/datum/bounty/item/completion_string() - return {"[shipped_count]/[required_count]"} - -/datum/bounty/item/can_claim() - return ..() && shipped_count >= required_count - -/datum/bounty/item/applies_to(obj/O) - if(!include_subtypes && !(O.type in wanted_types)) - return FALSE - if(include_subtypes && (!is_type_in_typecache(O, wanted_types) || is_type_in_typecache(O, exclude_types))) - return FALSE - if(O.flags_1 & HOLOGRAM_1) - return FALSE - return shipped_count < required_count - -/datum/bounty/item/ship(obj/O) - if(!applies_to(O)) - return - if(istype(O,/obj/item/stack)) - var/obj/item/stack/O_is_a_stack = O - shipped_count += O_is_a_stack.amount - else - shipped_count += 1 - -/datum/bounty/item/compatible_with(datum/other_bounty) - return type != other_bounty.type - diff --git a/code/modules/cargo/bounties/mech.dm b/code/modules/cargo/bounties/mech.dm deleted file mode 100644 index 62c846ea96..0000000000 --- a/code/modules/cargo/bounties/mech.dm +++ /dev/null @@ -1,44 +0,0 @@ -/datum/bounty/item/mech/New() - ..() - description = "Upper management has requested one [name] mech be sent as soon as possible. Ship it to receive a large payment." - -/datum/bounty/item/mech/ship(obj/O) - if(!applies_to(O)) - return - if(istype(O, /obj/mecha)) - var/obj/mecha/M = O - M.wreckage = null // So the mech doesn't explode. - ..() - -/datum/bounty/item/mech/mark_high_priority(scale_reward) - return ..(max(scale_reward * 0.7, 1.2)) - -/datum/bounty/item/mech/ripleymkii - name = "APLU MK-II \"Ripley\"" - reward = 13000 - wanted_types = list(/obj/mecha/working/ripley/mkii) - -/datum/bounty/item/mech/firefighter - name = "APLU \"Firefighter\"" - reward = 18000 - wanted_types = list(/obj/mecha/working/ripley/firefighter) - -/datum/bounty/item/mech/odysseus - name = "Odysseus" - reward = 11000 - wanted_types = list(/obj/mecha/medical/odysseus) - -/datum/bounty/item/mech/gygax - name = "Gygax" - reward = 28000 - wanted_types = list(/obj/mecha/combat/gygax) - -/datum/bounty/item/mech/durand - name = "Durand" - reward = 20000 - wanted_types = list(/obj/mecha/combat/durand) - -/datum/bounty/item/mech/phazon - name = "Phazon" - reward = 50000 - wanted_types = list(/obj/mecha/combat/phazon) diff --git a/code/modules/cargo/bounties/medical.dm b/code/modules/cargo/bounties/medical.dm deleted file mode 100644 index d139775969..0000000000 --- a/code/modules/cargo/bounties/medical.dm +++ /dev/null @@ -1,59 +0,0 @@ -/datum/bounty/item/medical/heart - name = "Heart" - description = "Commander Johnson is in critical condition after suffering yet another heart attack. Doctors say he needs a new heart fast. Ship one, pronto!" - reward = 3000 - wanted_types = list(/obj/item/organ/heart) - -/datum/bounty/item/medical/lung - name = "Lungs" - description = "A recent explosion at Central Command has left multiple staff with punctured lungs. Ship spare lungs to be rewarded." - reward = 10000 - required_count = 3 - wanted_types = list(/obj/item/organ/lungs) - -/datum/bounty/item/medical/appendix - name = "Appendix" - description = "Chef Gibb of Central Command wants to prepare a meal using a very special delicacy: an appendix. If you ship one, he'll pay." - reward = 5000 //there are no synthetic appendixes - wanted_types = list(/obj/item/organ/appendix) - -/datum/bounty/item/medical/ears - name = "Ears" - description = "Multiple staff at Station 12 have been left deaf due to unauthorized clowning. Ship them new ears." - reward = 10000 - required_count = 3 - wanted_types = list(/obj/item/organ/ears) - -/datum/bounty/item/medical/liver - name = "Livers" - description = "Multiple high-ranking CentCom diplomats have been hospitalized with liver failure after a recent meeting with Third Soviet Union ambassadors. Help us out, will you?" - reward = 10000 - required_count = 3 - wanted_types = list(/obj/item/organ/liver) - -/datum/bounty/item/medical/eye - name = "Organic Eyes" - description = "Station 5's Research Director Willem is requesting a few pairs of non-robotic eyes. Don't ask questions, just ship them." - reward = 10000 - required_count = 3 - wanted_types = list(/obj/item/organ/eyes) - exclude_types = list(/obj/item/organ/eyes/robotic) - -/datum/bounty/item/medical/tongue - name = "Tongues" - description = "A recent attack by Mime extremists has left staff at Station 23 speechless. Ship some spare tongues." - reward = 10000 - required_count = 3 - wanted_types = list(/obj/item/organ/tongue) - -/datum/bounty/item/medical/lizard_tail - name = "Lizard Tail" - description = "The Wizard Federation has made off with Nanotrasen's supply of lizard tails. While CentCom is dealing with the wizards, can the station spare a tail of their own?" - reward = 3000 - wanted_types = list(/obj/item/organ/tail/lizard) - -/datum/bounty/item/medical/cat_tail - name = "Cat Tail" - description = "Central Command has run out of heavy duty pipe cleaners. Can you ship over a cat tail to help us out?" - reward = 3000 - wanted_types = list(/obj/item/organ/tail/cat) diff --git a/code/modules/cargo/bounties/mining.dm b/code/modules/cargo/bounties/mining.dm deleted file mode 100644 index e6fb4e1bc6..0000000000 --- a/code/modules/cargo/bounties/mining.dm +++ /dev/null @@ -1,71 +0,0 @@ -/datum/bounty/item/mining/goliath_steaks - name = "Lava-Cooked Goliath Steaks" - description = "Admiral Pavlov has gone on hunger strike ever since the canteen started serving only monkey and monkey byproducts. She is demanding lava-cooked Goliath steaks." - reward = 5000 - required_count = 3 - wanted_types = list(/obj/item/reagent_containers/food/snacks/meat/steak/goliath) - -/datum/bounty/item/mining/goliath_boat - name = "Goliath Hide Boat" - description = "Commander Menkov wants to participate in the annual Lavaland Regatta. He is asking your shipwrights to build the swiftest boat known to man." - reward = 10000 - wanted_types = list(/obj/vehicle/ridden/lavaboat) - -/datum/bounty/item/mining/bone_oar - name = "Bone Oars" - description = "Commander Menkov requires oars to participate in the annual Lavaland Regatta. Ship a pair over." - reward = 4000 - required_count = 2 - wanted_types = list(/obj/item/oar) - -/datum/bounty/item/mining/bone_axe - name = "Bone Axe" - description = "Station 12 has had their fire axes stolen by marauding clowns. Ship them a bone axe as a replacement." - reward = 7500 - wanted_types = list(/obj/item/twohanded/fireaxe/boneaxe) - -/datum/bounty/item/mining/bone_armor - name = "Bone Armor" - description = "Station 14 has volunteered their lizard crew for ballistic armor testing. Ship over some bone armor." - reward = 5000 - wanted_types = list(/obj/item/clothing/suit/armor/bone) - -/datum/bounty/item/mining/skull_helmet - name = "Skull Helmet" - description = "Station 42's Head of Security has her birthday tomorrow! We want to suprise her with a fashionable skull helmet." - reward = 4000 - wanted_types = list(/obj/item/clothing/head/helmet/skull) - -/datum/bounty/item/mining/bone_talisman - name = "Bone Talismans" - description = "Station 14's Research Director claims that pagan bone talismans protect their wearer. Ship them a few so they can start testing." - reward = 7500 - required_count = 3 - wanted_types = list(/obj/item/clothing/accessory/talisman) - -/datum/bounty/item/mining/bone_dagger - name = "Bone Daggers" - description = "Central Command's canteen is undergoing budget cuts. Ship over some bone daggers so our Chef can keep working." - reward = 5000 - required_count = 3 - wanted_types = list(/obj/item/kitchen/knife/combat/bone) - -/datum/bounty/item/mining/polypore_mushroom - name = "Mushroom Bowl" - description = "Lieutenant Jeb dropped his favorite mushroom bowl. Cheer him up by shipping a new one, will you?" - reward = 7500 //5x mushroom shavings - wanted_types = list(/obj/item/reagent_containers/glass/bowl/mushroom_bowl) - -/datum/bounty/item/mining/inocybe_mushroom - name = "Mushroom Caps" - description = "Our botanist claims that he can distill tasty liquor from absolutely any plant. Let's see what he'll do with Inocybe mushroom caps." - reward = 4500 - required_count = 3 - wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_cap) - -/datum/bounty/item/mining/porcini_mushroom - name = "Mushroom Leaves" - description = "Porcini mushroom leaves are rumored to have healing properties. Our researchers want to put that claim to the test." - reward = 4500 - required_count = 3 - wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf) diff --git a/code/modules/cargo/bounties/reagent.dm b/code/modules/cargo/bounties/reagent.dm deleted file mode 100644 index 11a166548a..0000000000 --- a/code/modules/cargo/bounties/reagent.dm +++ /dev/null @@ -1,258 +0,0 @@ -/datum/bounty/reagent - var/required_volume = 10 - var/shipped_volume = 0 - var/datum/reagent/wanted_reagent - -/datum/bounty/reagent/completion_string() - return {"[round(shipped_volume)]/[required_volume] Units"} - -/datum/bounty/reagent/can_claim() - return ..() && shipped_volume >= required_volume - -/datum/bounty/reagent/applies_to(obj/O) - if(!istype(O, /obj/item/reagent_containers)) - return FALSE - if(!O.reagents || !O.reagents.has_reagent(wanted_reagent.type)) - return FALSE - if(O.flags_1 & HOLOGRAM_1) - return FALSE - return shipped_volume < required_volume - -/datum/bounty/reagent/ship(obj/O) - if(!applies_to(O)) - return - shipped_volume += O.reagents.get_reagent_amount(wanted_reagent.type) - if(shipped_volume > required_volume) - shipped_volume = required_volume - -/datum/bounty/reagent/compatible_with(other_bounty) - if(!istype(other_bounty, /datum/bounty/reagent)) - return TRUE - var/datum/bounty/reagent/R = other_bounty - return wanted_reagent.type != R.wanted_reagent.type - -/datum/bounty/reagent/simple_drink - name = "Simple Drink" - reward = 1500 - -/datum/bounty/reagent/simple_drink/New() - // Don't worry about making this comprehensive. It doesn't matter if some drinks are skipped. - var/static/list/possible_reagents = list(\ - /datum/reagent/consumable/ethanol/antifreeze,\ - /datum/reagent/consumable/ethanol/andalusia,\ - /datum/reagent/consumable/tea/arnold_palmer,\ - /datum/reagent/consumable/ethanol/b52,\ - /datum/reagent/consumable/ethanol/bananahonk,\ - /datum/reagent/consumable/ethanol/beepsky_smash,\ - /datum/reagent/consumable/ethanol/between_the_sheets,\ - /datum/reagent/consumable/ethanol/bilk,\ - /datum/reagent/consumable/ethanol/black_russian,\ - /datum/reagent/consumable/ethanol/bloody_mary,\ - /datum/reagent/consumable/ethanol/brave_bull,\ - /datum/reagent/consumable/ethanol/martini,\ - /datum/reagent/consumable/ethanol/cuba_libre,\ - /datum/reagent/consumable/ethanol/eggnog,\ - /datum/reagent/consumable/ethanol/erikasurprise,\ - /datum/reagent/consumable/ethanol/ginfizz,\ - /datum/reagent/consumable/ethanol/gintonic,\ - /datum/reagent/consumable/ethanol/grappa,\ - /datum/reagent/consumable/ethanol/grog,\ - /datum/reagent/consumable/ethanol/hooch,\ - /datum/reagent/consumable/ethanol/iced_beer,\ - /datum/reagent/consumable/ethanol/irishcarbomb,\ - /datum/reagent/consumable/ethanol/manhattan,\ - /datum/reagent/consumable/ethanol/margarita,\ - /datum/reagent/consumable/ethanol/gargle_blaster,\ - /datum/reagent/consumable/ethanol/rum_coke,\ - /datum/reagent/consumable/ethanol/screwdrivercocktail,\ - /datum/reagent/consumable/ethanol/snowwhite,\ - /datum/reagent/consumable/soy_latte,\ - /datum/reagent/consumable/cafe_latte,\ - /datum/reagent/consumable/ethanol/syndicatebomb,\ - /datum/reagent/consumable/ethanol/tequila_sunrise,\ - /datum/reagent/consumable/ethanol/manly_dorf,\ - /datum/reagent/consumable/ethanol/thirteenloko,\ - /datum/reagent/consumable/triple_citrus,\ - /datum/reagent/consumable/ethanol/vodkamartini,\ - /datum/reagent/consumable/ethanol/whiskeysoda,\ - /datum/reagent/consumable/ethanol/beer/green,\ - /datum/reagent/consumable/ethanol/demonsblood,\ - /datum/reagent/consumable/ethanol/crevice_spike,\ - /datum/reagent/consumable/ethanol/singulo,\ - /datum/reagent/consumable/ethanol/whiskey_sour) - - var/reagent_type = pick(possible_reagents) - wanted_reagent = new reagent_type - name = wanted_reagent.name - description = "CentCom is thirsty! Send a shipment of [name] to CentCom to quench the company's thirst." - reward += rand(0, 2) * 500 - -/datum/bounty/reagent/complex_drink - name = "Complex Drink" - reward = 4000 - -/datum/bounty/reagent/complex_drink/New() - // Don't worry about making this comprehensive. It doesn't matter if some drinks are skipped. - var/static/list/possible_reagents = list(\ - /datum/reagent/consumable/ethanol/atomicbomb,\ - /datum/reagent/consumable/ethanol/bacchus_blessing,\ - /datum/reagent/consumable/ethanol/bastion_bourbon,\ - /datum/reagent/consumable/ethanol/booger,\ - /datum/reagent/consumable/ethanol/hippies_delight,\ - /datum/reagent/consumable/ethanol/drunkenblumpkin,\ - /datum/reagent/consumable/ethanol/fetching_fizz,\ - /datum/reagent/consumable/ethanol/goldschlager,\ - /datum/reagent/consumable/ethanol/manhattan_proj,\ - /datum/reagent/consumable/ethanol/narsour,\ - /datum/reagent/consumable/ethanol/neurotoxin,\ - /datum/reagent/consumable/ethanol/patron,\ - /datum/reagent/consumable/ethanol/quadruple_sec,\ - /datum/reagent/consumable/bluecherryshake,\ - /datum/reagent/consumable/doctor_delight,\ - /datum/reagent/consumable/ethanol/silencer,\ - /datum/reagent/consumable/ethanol/peppermint_patty,\ - /datum/reagent/consumable/ethanol/aloe,\ - /datum/reagent/consumable/pumpkin_latte) - - var/reagent_type = pick(possible_reagents) - wanted_reagent = new reagent_type - name = wanted_reagent.name - description = "CentCom is offering a reward for talented mixologists. Ship a container of [name] to claim the prize." - reward += rand(0, 4) * 500 - -/datum/bounty/reagent/chemical_simple - name = "Simple Chemical" - reward = 4000 - required_volume = 30 - -/datum/bounty/reagent/chemical_simple/New() - // Chemicals that can be mixed by a single skilled Chemist. - var/static/list/possible_reagents = list(\ - /datum/reagent/medicine/leporazine,\ - /datum/reagent/medicine/clonexadone,\ - /datum/reagent/medicine/mine_salve,\ - /datum/reagent/medicine/C2/convermol,\ - /datum/reagent/medicine/ephedrine,\ - /datum/reagent/medicine/diphenhydramine,\ - /datum/reagent/drug/space_drugs,\ - /datum/reagent/drug/crank,\ - /datum/reagent/gunpowder,\ - /datum/reagent/napalm,\ - /datum/reagent/firefighting_foam,\ - /datum/reagent/consumable/mayonnaise,\ - /datum/reagent/toxin/itching_powder,\ - /datum/reagent/toxin/cyanide,\ - /datum/reagent/toxin/heparin,\ - /datum/reagent/medicine/pen_acid,\ - /datum/reagent/medicine/atropine,\ - /datum/reagent/drug/aranesp,\ - /datum/reagent/drug/krokodil,\ - /datum/reagent/drug/methamphetamine,\ - /datum/reagent/teslium,\ - /datum/reagent/toxin/anacea,\ - /datum/reagent/pax) - - var/reagent_type = pick(possible_reagents) - wanted_reagent = new reagent_type - name = wanted_reagent.name - description = "CentCom is in desperate need of the chemical [name]. Ship a container of it to be rewarded." - reward += rand(0, 4) * 500 //4000 to 6000 credits - -/datum/bounty/reagent/chemical_complex - name = "Rare Chemical" - reward = 6000 - required_volume = 20 - -/datum/bounty/reagent/chemical_complex/New() - // Reagents that require interaction with multiple departments or are a pain to mix. Lower required_volume since acquiring 30u of some is unrealistic - var/static/list/possible_reagents = list(\ - /datum/reagent/medicine/pyroxadone,\ - /datum/reagent/medicine/rezadone,\ - /datum/reagent/medicine/regen_jelly,\ - /datum/reagent/drug/bath_salts,\ - /datum/reagent/hair_dye,\ - /datum/reagent/consumable/honey,\ - /datum/reagent/consumable/frostoil,\ - /datum/reagent/toxin/slimejelly,\ - /datum/reagent/teslium/energized_jelly,\ - /datum/reagent/toxin/mimesbane,\ - /datum/reagent/medicine/strange_reagent,\ - /datum/reagent/nitroglycerin,\ - /datum/reagent/medicine/rezadone,\ - /datum/reagent/toxin/zombiepowder,\ - /datum/reagent/toxin/ghoulpowder,\ - /datum/reagent/mulligan) - - var/reagent_type = pick(possible_reagents) - wanted_reagent = new reagent_type - name = wanted_reagent.name - description = "CentCom is paying premium for the chemical [name]. Ship a container of it to be rewarded." - reward += rand(0, 5) * 750 //6000 to 9750 credits - -/datum/bounty/pill - /// quantity of the pills needed, this value acts as minimum, gets randomized on new() - var/required_ammount = 80 - /// counter for pills sent - var/shipped_ammount = 0 - /// reagent requested - var/datum/reagent/wanted_reagent - /// minimum volume of chemical needed, gets randomized on new() - var/wanted_vol = 30 - -/datum/bounty/pill/completion_string() - return {"[shipped_ammount]/[required_ammount] pills"} - -/datum/bounty/pill/can_claim() - return ..() && shipped_ammount >= required_ammount - -/datum/bounty/pill/applies_to(obj/O) - if(!istype(O, /obj/item/reagent_containers/pill)) - return FALSE - if(O?.reagents.get_reagent_amount(wanted_reagent.type) >= wanted_vol) - return TRUE - return FALSE - -/datum/bounty/pill/ship(obj/O) - if(!applies_to(O)) - return - shipped_ammount += 1 - if(shipped_ammount > required_ammount) - shipped_ammount = required_ammount - -/datum/bounty/pill/compatible_with(other_bounty) - if(!istype(other_bounty, /datum/bounty/pill/simple_pill)) - return TRUE - var/datum/bounty/pill/simple_pill/P = other_bounty - return (wanted_reagent.type == P.wanted_reagent.type) && (wanted_vol == P.wanted_vol) - -/datum/bounty/pill/simple_pill - name = "Simple Pill" - reward = 10000 - -/datum/bounty/pill/simple_pill/New() - //reagent that are possible to be chem factory'd - var/static/list/possible_reagents = list(\ - /datum/reagent/medicine/spaceacillin,\ - /datum/reagent/medicine/C2/instabitaluri,\ - /datum/reagent/medicine/pen_acid,\ - /datum/reagent/medicine/atropine,\ - /datum/reagent/medicine/cryoxadone,\ - /datum/reagent/medicine/salbutamol,\ - /datum/reagent/medicine/rhigoxane,\ - /datum/reagent/medicine/trophazole,\ - /datum/reagent/drug/methamphetamine,\ - /datum/reagent/drug/crank,\ - /datum/reagent/nitrous_oxide,\ - /datum/reagent/barbers_aid,\ - /datum/reagent/pax,\ - /datum/reagent/flash_powder,\ - /datum/reagent/phlogiston,\ - /datum/reagent/firefighting_foam) - - var/datum/reagent/reagent_type = pick(possible_reagents) - wanted_reagent = new reagent_type - name = "[wanted_reagent.name] pills" - required_ammount += rand(1,60) - wanted_vol += rand(1,20) - description = "CentCom requires [required_ammount] of [name] containing at least [wanted_vol] each. Ship a container of it to be rewarded." - reward += rand(1, 5) * 3000 diff --git a/code/modules/cargo/bounties/science.dm b/code/modules/cargo/bounties/science.dm deleted file mode 100644 index 33f334ac47..0000000000 --- a/code/modules/cargo/bounties/science.dm +++ /dev/null @@ -1,66 +0,0 @@ -/datum/bounty/item/science/boh - name = "Bag of Holding" - description = "Nanotrasen would make good use of high-capacity backpacks. If you have any, please ship them." - reward = 10000 - wanted_types = list(/obj/item/storage/backpack/holding) - -/datum/bounty/item/science/tboh - name = "Trash Bag of Holding" - description = "Nanotrasen would make good use of high-capacity trash bags. If you have any, please ship them." - reward = 10000 - wanted_types = list(/obj/item/storage/backpack/holding) - -/datum/bounty/item/science/bluespace_syringe - name = "Bluespace Syringe" - description = "Nanotrasen would make good use of high-capacity syringes. If you have any, please ship them." - reward = 10000 - wanted_types = list(/obj/item/reagent_containers/syringe/bluespace) - -/datum/bounty/item/science/bluespace_body_bag - name = "Bluespace Body Bag" - description = "Nanotrasen would make good use of high-capacity body bags. If you have any, please ship them." - reward = 10000 - wanted_types = list(/obj/item/bodybag/bluespace) - -/datum/bounty/item/science/nightvision_goggles - name = "Night Vision Goggles" - description = "An electrical storm has busted all the lights at CentCom. While management is waiting for replacements, perhaps some night vision goggles can be shipped?" - reward = 10000 - wanted_types = list(/obj/item/clothing/glasses/night, /obj/item/clothing/glasses/meson/night, /obj/item/clothing/glasses/hud/health/night, /obj/item/clothing/glasses/hud/security/night, /obj/item/clothing/glasses/hud/diagnostic/night) - -/datum/bounty/item/science/experimental_welding_tool - name = "Experimental Welding Tool" - description = "A recent accident has left most of CentCom's welding tools exploded. Ship replacements to be rewarded." - reward = 10000 - required_count = 3 - wanted_types = list(/obj/item/weldingtool/experimental) - -/datum/bounty/item/science/cryostasis_beaker - name = "Cryostasis Beaker" - description = "Chemists at Central Command have discovered a new chemical that can only be held in cryostasis beakers. The only problem is they don't have any! Rectify this to receive payment." - reward = 10000 - wanted_types = list(/obj/item/reagent_containers/glass/beaker/noreact) - -/datum/bounty/item/science/diamond_drill - name = "Diamond Mining Drill" - description = "Central Command is willing to pay three months salary in exchange for one diamond mining drill." - reward = 15000 - wanted_types = list(/obj/item/pickaxe/drill/diamonddrill, /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill) - -/datum/bounty/item/science/floor_buffer - name = "Floor Buffer Upgrade" - description = "One of CentCom's janitors made a small fortune betting on carp races. Now they'd like to commission an upgrade to their floor buffer." - reward = 10000 - wanted_types = list(/obj/item/janiupgrade) - -/datum/bounty/item/science/advanced_mop - name = "Advanced Mop" - description = "Excuse me. I'd like to request $17 for a push broom rebristling. Either that, or an advanced mop." - reward = 10000 - wanted_types = list(/obj/item/mop/advanced) - -/datum/bounty/item/science/advanced_egun - name = "Advanced Energy Gun" - description = "With the price of rechargers on the rise, upper management is interested in purchasing guns that are self-powered. If you ship one, they'll pay." - reward = 10000 - wanted_types = list(/obj/item/gun/energy/e_gun/nuclear) diff --git a/code/modules/cargo/bounties/security.dm b/code/modules/cargo/bounties/security.dm deleted file mode 100644 index bcf7b89f3a..0000000000 --- a/code/modules/cargo/bounties/security.dm +++ /dev/null @@ -1,13 +0,0 @@ -/datum/bounty/item/security/riotshotgun - name = "Riot Shotguns" - description = "Hooligans have boarded CentCom! Ship riot shotguns quick, or things are going to get dirty." - reward = 5000 - required_count = 2 - wanted_types = list(/obj/item/gun/ballistic/shotgun/riot) - -/datum/bounty/item/security/recharger - name = "Rechargers" - description = "Nanotrasen military academy is conducting marksmanship exercises. They request that rechargers be shipped." - reward = 2000 - required_count = 3 - wanted_types = list(/obj/machinery/recharger) diff --git a/code/modules/cargo/bounties/slime.dm b/code/modules/cargo/bounties/slime.dm deleted file mode 100644 index 4aa0797c70..0000000000 --- a/code/modules/cargo/bounties/slime.dm +++ /dev/null @@ -1,39 +0,0 @@ -/datum/bounty/item/slime - reward = 3000 - -/datum/bounty/item/slime/New() - ..() - description = "Nanotrasen's science lead is hunting for the rare and exotic [name]. A bounty has been offered for finding it." - reward += rand(0, 4) * 500 - -/datum/bounty/item/slime/green - name = "Green Slime Extract" - wanted_types = list(/obj/item/slime_extract/green) - -/datum/bounty/item/slime/pink - name = "Pink Slime Extract" - wanted_types = list(/obj/item/slime_extract/pink) - -/datum/bounty/item/slime/gold - name = "Gold Slime Extract" - wanted_types = list(/obj/item/slime_extract/gold) - -/datum/bounty/item/slime/oil - name = "Oil Slime Extract" - wanted_types = list(/obj/item/slime_extract/oil) - -/datum/bounty/item/slime/black - name = "Black Slime Extract" - wanted_types = list(/obj/item/slime_extract/black) - -/datum/bounty/item/slime/lightpink - name = "Light Pink Slime Extract" - wanted_types = list(/obj/item/slime_extract/lightpink) - -/datum/bounty/item/slime/adamantine - name = "Adamantine Slime Extract" - wanted_types = list(/obj/item/slime_extract/adamantine) - -/datum/bounty/item/slime/rainbow - name = "Rainbow Slime Extract" - wanted_types = list(/obj/item/slime_extract/rainbow) diff --git a/code/modules/cargo/bounties/special.dm b/code/modules/cargo/bounties/special.dm deleted file mode 100644 index cbbf36c671..0000000000 --- a/code/modules/cargo/bounties/special.dm +++ /dev/null @@ -1,55 +0,0 @@ -/datum/bounty/item/alien_organs - name = "Alien Organs" - description = "Nanotrasen is interested in studying Xenomorph biology. Ship a set of organs to be thoroughly compensated." - reward = 25000 - required_count = 3 - wanted_types = list(/obj/item/organ/brain/alien, /obj/item/organ/alien, /obj/item/organ/body_egg/alien_embryo, /obj/item/organ/liver/alien, /obj/item/organ/tongue/alien, /obj/item/organ/eyes/night_vision/alien) - -/datum/bounty/item/syndicate_documents - name = "Syndicate Documents" - description = "Intel regarding the syndicate is highly prized at CentCom. If you find syndicate documents, ship them. You could save lives." - reward = 15000 - wanted_types = list(/obj/item/documents/syndicate, /obj/item/documents/photocopy) - -/datum/bounty/item/syndicate_documents/applies_to(obj/O) - if(!..()) - return FALSE - if(istype(O, /obj/item/documents/photocopy)) - var/obj/item/documents/photocopy/Copy = O - return (Copy.copy_type && ispath(Copy.copy_type, /obj/item/documents/syndicate)) - return TRUE - -/datum/bounty/item/adamantine - name = "Adamantine" - description = "Nanotrasen's anomalous materials division is in desparate need for Adamantine. Send them a large shipment and we'll make it worth your while." - reward = 35000 - required_count = 10 - wanted_types = list(/obj/item/stack/sheet/mineral/adamantine) - -/datum/bounty/item/trash - name = "Trash" - description = "Recently a group of janitors have run out of trash to clean up, without any trash Centcom wants to fire them to cut costs. Send a shipment of trash to keep them employed, and they'll give you a small compensation." - reward = 1000 - required_count = 10 - wanted_types = list(/obj/item/trash) - -/datum/bounty/more_bounties - name = "More Bounties" - description = "Complete enough bounties and CentCom will issue new ones!" - reward = 5 // number of bounties - var/required_bounties = 5 - -/datum/bounty/more_bounties/can_claim() - return ..() && completed_bounty_count() >= required_bounties - -/datum/bounty/more_bounties/completion_string() - return "[min(required_bounties, completed_bounty_count())]/[required_bounties] Bounties" - -/datum/bounty/more_bounties/reward_string() - return "Up to [reward] new bounties" - -/datum/bounty/more_bounties/claim() - if(can_claim()) - claimed = TRUE - for(var/i = 0; i < reward; ++i) - try_add_bounty(random_bounty()) diff --git a/code/modules/cargo/bounties/virus.dm b/code/modules/cargo/bounties/virus.dm deleted file mode 100644 index 8f078a2668..0000000000 --- a/code/modules/cargo/bounties/virus.dm +++ /dev/null @@ -1,81 +0,0 @@ -/datum/bounty/virus - reward = 5000 - var/shipped = FALSE - var/stat_value = 0 - var/stat_name = "" - -/datum/bounty/virus/New() - ..() - stat_value = rand(4, 11) - if(rand(3) == 1) - stat_value *= -1 - name = "Virus ([stat_name] of [stat_value])" - description = "Nanotrasen is interested in a virus with a [stat_name] stat of exactly [stat_value]. Central Command will pay handsomely for such a virus." - reward += rand(0, 4) * 500 - -/datum/bounty/virus/completion_string() - return shipped ? "Shipped" : "Not Shipped" - -/datum/bounty/virus/can_claim() - return ..() && shipped - -/datum/bounty/virus/applies_to(obj/O) - if(shipped) - return FALSE - if(O.flags_1 & HOLOGRAM_1) - return FALSE - if(!istype(O, /obj/item/reagent_containers || !O.reagents || !O.reagents.reagent_list)) - return FALSE - var/datum/reagent/blood/B = locate() in O.reagents.reagent_list - if(!B) - return FALSE - for(var/V in B.get_diseases()) - if(!istype(V, /datum/disease/advance)) - continue - if(accepts_virus(V)) - return TRUE - return FALSE - -/datum/bounty/virus/ship(obj/O) - if(!applies_to(O)) - return - shipped = TRUE - -/datum/bounty/virus/compatible_with(datum/other_bounty) - if(!istype(other_bounty, /datum/bounty/virus)) - return TRUE - var/datum/bounty/virus/V = other_bounty - return type != V.type || stat_value != V.stat_value - - -/datum/bounty/virus/proc/accepts_virus(V) - return TRUE - -/datum/bounty/virus/resistance - stat_name = "resistance" - -/datum/bounty/virus/resistance/accepts_virus(V) - var/datum/disease/advance/A = V - return A.totalResistance() == stat_value - -/datum/bounty/virus/stage_speed - stat_name = "stage speed" - -/datum/bounty/virus/stage_speed/accepts_virus(V) - var/datum/disease/advance/A = V - return A.totalStageSpeed() == stat_value - -/datum/bounty/virus/stealth - stat_name = "stealth" - -/datum/bounty/virus/stealth/accepts_virus(V) - var/datum/disease/advance/A = V - return A.totalStealth() == stat_value - -/datum/bounty/virus/transmit - stat_name = "transmissible" - -/datum/bounty/virus/transmit/accepts_virus(V) - var/datum/disease/advance/A = V - return A.totalTransmittable() == stat_value - diff --git a/code/modules/cargo/bounty.dm b/code/modules/cargo/bounty.dm deleted file mode 100644 index 031af9a868..0000000000 --- a/code/modules/cargo/bounty.dm +++ /dev/null @@ -1,181 +0,0 @@ -GLOBAL_LIST_EMPTY(bounties_list) - -/datum/bounty - var/name - var/description - var/reward = 1000 // In credits. - var/claimed = FALSE - var/high_priority = FALSE - -// Displayed on bounty UI screen. -/datum/bounty/proc/completion_string() - return "" - -// Displayed on bounty UI screen. -/datum/bounty/proc/reward_string() - return "[reward] Credits" - -/datum/bounty/proc/can_claim() - return !claimed - -// Called when the claim button is clicked. Override to provide fancy rewards. -/datum/bounty/proc/claim() - if(can_claim()) - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) - if(D) - D.adjust_money(reward) - claimed = TRUE - -// If an item sent in the cargo shuttle can satisfy the bounty. -/datum/bounty/proc/applies_to(obj/O) - return FALSE - -// Called when an object is shipped on the cargo shuttle. -/datum/bounty/proc/ship(obj/O) - return - -// When randomly generating the bounty list, duplicate bounties must be avoided. -// This proc is used to determine if two bounties are duplicates, or incompatible in general. -/datum/bounty/proc/compatible_with(other_bounty) - return TRUE - -/datum/bounty/proc/mark_high_priority(scale_reward = 2) - if(high_priority) - return - high_priority = TRUE - reward = round(reward * scale_reward) - -// This proc is called when the shuttle docks at CentCom. -// It handles items shipped for bounties. -/proc/bounty_ship_item_and_contents(atom/movable/AM, dry_run=FALSE) - if(!GLOB.bounties_list.len) - setup_bounties() - - var/list/matched_one = FALSE - for(var/thing in reverseRange(AM.GetAllContents())) - var/matched_this = FALSE - for(var/datum/bounty/B in GLOB.bounties_list) - if(B.applies_to(thing)) - matched_one = TRUE - matched_this = TRUE - if(!dry_run) - B.ship(thing) - if(!dry_run && matched_this) - qdel(thing) - return matched_one - -// Returns FALSE if the bounty is incompatible with the current bounties. -/proc/try_add_bounty(datum/bounty/new_bounty) - if(!new_bounty || !new_bounty.name || !new_bounty.description) - return FALSE - for(var/i in GLOB.bounties_list) - var/datum/bounty/B = i - if(!B.compatible_with(new_bounty) || !new_bounty.compatible_with(B)) - return FALSE - GLOB.bounties_list += new_bounty - return TRUE - -// Returns a new bounty of random type, but does not add it to GLOB.bounties_list. -/proc/random_bounty() - switch(rand(1, 12)) - if(1) - var/subtype = pick(subtypesof(/datum/bounty/item/assistant)) - return new subtype - if(2) - var/subtype = pick(subtypesof(/datum/bounty/item/mech)) - return new subtype - if(3) - var/subtype = pick(subtypesof(/datum/bounty/item/chef)) - return new subtype - if(4) - var/subtype = pick(subtypesof(/datum/bounty/item/security)) - return new subtype - if(5) - if(rand(2) == 1) - return new /datum/bounty/reagent/simple_drink - return new /datum/bounty/reagent/complex_drink - if(6) - if(rand(2) == 1) - return new /datum/bounty/reagent/chemical_simple - return new /datum/bounty/reagent/chemical_complex - if(7) - var/subtype = pick(subtypesof(/datum/bounty/virus)) - return new subtype - if(8) - var/subtype = pick(subtypesof(/datum/bounty/item/science)) - return new subtype - if(9) - var/subtype = pick(subtypesof(/datum/bounty/item/slime)) - return new subtype - if(10) - var/subtype = pick(subtypesof(/datum/bounty/item/engineering)) - return new subtype - if(11) - var/subtype = pick(subtypesof(/datum/bounty/item/mining)) - return new subtype - if(12) - var/subtype = pick(subtypesof(/datum/bounty/item/medical)) - return new subtype - - -// Called lazily at startup to populate GLOB.bounties_list with random bounties. -/proc/setup_bounties() - - var/pick // instead of creating it a bunch let's go ahead and toss it here, we know we're going to use it for dynamics and subtypes! - - /********************************Subtype Gens********************************/ - var/list/easy_add_list_subtypes = list(/datum/bounty/item/assistant = 2, - /datum/bounty/item/mech = 1, - /datum/bounty/item/chef = 2, - /datum/bounty/item/security = 1, - /datum/bounty/virus = 1, - /datum/bounty/item/engineering = 1, - /datum/bounty/item/mining = 2, - /datum/bounty/item/medical = 2) - - for(var/the_type in easy_add_list_subtypes) - for(var/i in 1 to easy_add_list_subtypes[the_type]) - pick = pick(subtypesof(the_type)) - try_add_bounty(new pick) - - /********************************Strict Type Gens********************************/ - var/list/easy_add_list_strict_types = list(/datum/bounty/reagent/simple_drink = 1, - /datum/bounty/reagent/complex_drink = 1, - /datum/bounty/reagent/chemical_simple = 1, - /datum/bounty/reagent/chemical_complex = 1, - /datum/bounty/pill/simple_pill = 1) - - for(var/the_strict_type in easy_add_list_strict_types) - for(var/i in 1 to easy_add_list_strict_types[the_strict_type]) - try_add_bounty(new the_strict_type) - - /********************************Dynamic Gens********************************/ - - for(var/i in 0 to 1) - if(prob(50)) - pick = pick(subtypesof(/datum/bounty/item/slime)) - else - pick = pick(subtypesof(/datum/bounty/item/science)) - try_add_bounty(new pick) - - /********************************Cutoff for Non-Low Priority Bounties********************************/ - var/datum/bounty/B = pick(GLOB.bounties_list) - B.mark_high_priority() - - /********************************Low Priority Gens********************************/ - var/list/low_priority_strict_type_list = list( /datum/bounty/item/alien_organs, - /datum/bounty/item/syndicate_documents, - /datum/bounty/item/adamantine, - /datum/bounty/item/trash, - /datum/bounty/more_bounties) - - for(var/low_priority_bounty in low_priority_strict_type_list) - try_add_bounty(new low_priority_bounty) - -/proc/completed_bounty_count() - var/count = 0 - for(var/i in GLOB.bounties_list) - var/datum/bounty/B = i - if(B.claimed) - ++count - return count diff --git a/code/modules/cargo/bounty_console.dm b/code/modules/cargo/bounty_console.dm deleted file mode 100644 index ff869ed468..0000000000 --- a/code/modules/cargo/bounty_console.dm +++ /dev/null @@ -1,96 +0,0 @@ -#define PRINTER_TIMEOUT 10 - - - -/obj/machinery/computer/bounty - name = "Nanotrasen bounty console" - desc = "" - icon_screen = "bounty" - circuit = /obj/item/circuitboard/computer/bounty - light_color = "#E2853D"//orange - var/printer_ready = 0 //cooldown var - -/obj/machinery/computer/bounty/Initialize() - . = ..() - printer_ready = world.time + PRINTER_TIMEOUT - -/obj/machinery/computer/bounty/proc/print_paper() - new /obj/item/paper/bounty_printout(loc) - -/obj/item/paper/bounty_printout - name = "paper - Bounties" - -/obj/item/paper/bounty_printout/Initialize() - . = ..() - info = "

    Nanotrasen Cargo Bounties


    " - update_icon() - - for(var/datum/bounty/B in GLOB.bounties_list) - if(B.claimed) - continue - info += {"

    [B.name]

    -
    • Reward: [B.reward_string()]
    • -
    • Completed: [B.completion_string()]
    "} - -/obj/machinery/computer/bounty/ui_interact(mob/user) - . = ..() - - if(!GLOB.bounties_list.len) - setup_bounties() - - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) - var/list/dat = list({"Refresh - Print Paper -

    Credits: [D.account_balance]

    - - "}) - for(var/datum/bounty/B in GLOB.bounties_list) - if(B.claimed) - dat += "" - else if(B.can_claim()) - dat += "" - else - dat += "" - - if(B.high_priority) - dat += {" - - "} - else - dat += {" - - "} - dat += "" - if(B.claimed) - dat += "" - else if(B.can_claim()) - dat += "" - else - dat += "" - dat += "" - dat += "
    NameDescriptionRewardCompletionStatus
    [B.name]High Priority: [B.description][B.reward_string()][B.name][B.description][B.reward_string()][B.completion_string()]ClaimedClaimUnclaimed
    " - dat = dat.Join() - var/datum/browser/popup = new(user, "bounties", "Nanotrasen Bounties", 700, 600) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - -/obj/machinery/computer/bounty/Topic(href, href_list) - if(..()) - return - - switch(href_list["choice"]) - if("Print") - if(printer_ready < world.time) - printer_ready = world.time + PRINTER_TIMEOUT - print_paper() - - if("Claim") - var/datum/bounty/B = locate(href_list["d_rec"]) in GLOB.bounties_list - if(B) - B.claim() - - if(href_list["refresh"]) - playsound(src, "terminal_type", 25, FALSE) - - updateUsrDialog() diff --git a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm deleted file mode 100644 index 33a98daa27..0000000000 --- a/code/modules/cargo/console.dm +++ /dev/null @@ -1,262 +0,0 @@ -/obj/machinery/computer/cargo - name = "supply console" - desc = "" - icon_screen = "supply" - circuit = /obj/item/circuitboard/computer/cargo - ui_x = 780 - ui_y = 750 - - var/requestonly = FALSE - var/contraband = FALSE - var/self_paid = FALSE - var/safety_warning = "For safety reasons, the automated supply shuttle \ - cannot transport live organisms, human remains, classified nuclear weaponry, \ - homing beacons or machinery housing any form of artificial intelligence." - var/blockade_warning = "Bluespace instability detected. Shuttle movement impossible." - /// radio used by the console to send messages on supply channel - var/obj/item/radio/headset/radio - /// var that tracks message cooldown - var/message_cooldown - - light_color = "#E2853D"//orange - -/obj/machinery/computer/cargo/request - name = "supply request console" - desc = "" - icon_screen = "request" - circuit = /obj/item/circuitboard/computer/cargo/request - requestonly = TRUE - -/obj/machinery/computer/cargo/Initialize() - . = ..() - radio = new /obj/item/radio/headset/headset_cargo(src) - var/obj/item/circuitboard/computer/cargo/board = circuit - contraband = board.contraband - if (board.obj_flags & EMAGGED) - obj_flags |= EMAGGED - else - obj_flags &= ~EMAGGED - -/obj/machinery/computer/cargo/Destroy() - QDEL_NULL(radio) - ..() - -/obj/machinery/computer/cargo/proc/get_export_categories() - . = EXPORT_CARGO - if(contraband) - . |= EXPORT_CONTRABAND - if(obj_flags & EMAGGED) - . |= EXPORT_EMAG - -/obj/machinery/computer/cargo/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - user.visible_message("[user] swipes a suspicious card through [src]!", - "I adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.") - - obj_flags |= EMAGGED - contraband = TRUE - - // This also permamently sets this on the circuit board - var/obj/item/circuitboard/computer/cargo/board = circuit - board.contraband = TRUE - board.obj_flags |= EMAGGED - update_static_data(user) - -/obj/machinery/computer/cargo/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "cargo", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/computer/cargo/ui_data() - var/list/data = list() - data["location"] = SSshuttle.supply.getStatusText() - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) - if(D) - data["points"] = D.account_balance - data["away"] = SSshuttle.supply.getDockedId() == "supply_away" - data["self_paid"] = self_paid - data["docked"] = SSshuttle.supply.mode == SHUTTLE_IDLE - data["loan"] = !!SSshuttle.shuttle_loan - data["loan_dispatched"] = SSshuttle.shuttle_loan && SSshuttle.shuttle_loan.dispatched - var/message = "Remember to stamp and send back the supply manifests." - if(SSshuttle.centcom_message) - message = SSshuttle.centcom_message - if(SSshuttle.supplyBlocked) - message = blockade_warning - data["message"] = message - data["cart"] = list() - for(var/datum/supply_order/SO in SSshuttle.shoppinglist) - data["cart"] += list(list( - "object" = SO.pack.name, - "cost" = SO.pack.cost, - "id" = SO.id, - "orderer" = SO.orderer, - "paid" = !isnull(SO.paying_account) //paid by requester - )) - - data["requests"] = list() - for(var/datum/supply_order/SO in SSshuttle.requestlist) - data["requests"] += list(list( - "object" = SO.pack.name, - "cost" = SO.pack.cost, - "orderer" = SO.orderer, - "reason" = SO.reason, - "id" = SO.id - )) - - return data - -/obj/machinery/computer/cargo/ui_static_data(mob/user) - var/list/data = list() - data["requestonly"] = requestonly - data["supplies"] = list() - for(var/pack in SSshuttle.supply_packs) - var/datum/supply_pack/P = SSshuttle.supply_packs[pack] - if(!data["supplies"][P.group]) - data["supplies"][P.group] = list( - "name" = P.group, - "packs" = list() - ) - if((P.hidden && !(obj_flags & EMAGGED)) || (P.contraband && !contraband) || (P.special && !P.special_enabled) || P.DropPodOnly) - continue - data["supplies"][P.group]["packs"] += list(list( - "name" = P.name, - "cost" = P.cost, - "id" = pack, - "desc" = P.desc || P.name, // If there is a description, use it. Otherwise use the pack's name. - "small_item" = P.small_item, - "access" = P.access - )) - return data - -/obj/machinery/computer/cargo/ui_act(action, params, datum/tgui/ui) - if(..()) - return - switch(action) - if("send") - if(!SSshuttle.supply.canMove()) - say(safety_warning) - return - if(SSshuttle.supplyBlocked) - say(blockade_warning) - return - if(SSshuttle.supply.getDockedId() == "supply_home") - SSshuttle.supply.export_categories = get_export_categories() - SSshuttle.moveShuttle("supply", "supply_away", TRUE) - say("The supply shuttle is departing.") - investigate_log("[key_name(usr)] sent the supply shuttle away.", INVESTIGATE_CARGO) - else - investigate_log("[key_name(usr)] called the supply shuttle.", INVESTIGATE_CARGO) - say("The supply shuttle has been called and will arrive in [SSshuttle.supply.timeLeft(600)] minutes.") - SSshuttle.moveShuttle("supply", "supply_home", TRUE) - . = TRUE - if("loan") - if(!SSshuttle.shuttle_loan) - return - if(SSshuttle.supplyBlocked) - say(blockade_warning) - return - else if(SSshuttle.supply.mode != SHUTTLE_IDLE) - return - else if(SSshuttle.supply.getDockedId() != "supply_away") - return - else - SSshuttle.shuttle_loan.loan_shuttle() - say("The supply shuttle has been loaned to CentCom.") - . = TRUE - if("add") - var/id = text2path(params["id"]) - var/datum/supply_pack/pack = SSshuttle.supply_packs[id] - if(!istype(pack)) - return - if((pack.hidden && !(obj_flags & EMAGGED)) || (pack.contraband && !contraband) || pack.DropPodOnly) - return - - var/name = "*None Provided*" - var/rank = "*None Provided*" - var/ckey = usr.ckey - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - name = H.get_authentification_name() - rank = H.get_assignment(hand_first = TRUE) - else if(issilicon(usr)) - name = usr.real_name - rank = "Silicon" - - var/datum/bank_account/account - if(self_paid && ishuman(usr)) - var/mob/living/carbon/human/H = usr - var/obj/item/card/id/id_card = H.get_idcard(TRUE) - if(!istype(id_card)) - say("No ID card detected.") - return - account = id_card.registered_account - if(!istype(account)) - say("Invalid bank account.") - return - - var/reason = "" - if(requestonly && !self_paid) - reason = stripped_input("Reason:", name, "") - if(isnull(reason) || ..()) - return - - var/turf/T = get_turf(src) - var/datum/supply_order/SO = new(pack, name, rank, ckey, reason, account) - SO.generateRequisition(T) - if(requestonly && !self_paid) - SSshuttle.requestlist += SO - else - SSshuttle.shoppinglist += SO - if(self_paid) - say("Order processed. The price will be charged to [account.account_holder]'s bank account on delivery.") - if(requestonly && message_cooldown < world.time) - radio.talk_into(src, "A new order has been requested.", RADIO_CHANNEL_SUPPLY) - message_cooldown = world.time + 30 SECONDS - . = TRUE - if("remove") - var/id = text2num(params["id"]) - for(var/datum/supply_order/SO in SSshuttle.shoppinglist) - if(SO.id == id) - SSshuttle.shoppinglist -= SO - . = TRUE - break - if("clear") - SSshuttle.shoppinglist.Cut() - . = TRUE - if("approve") - var/id = text2num(params["id"]) - for(var/datum/supply_order/SO in SSshuttle.requestlist) - if(SO.id == id) - SSshuttle.requestlist -= SO - SSshuttle.shoppinglist += SO - . = TRUE - break - if("deny") - var/id = text2num(params["id"]) - for(var/datum/supply_order/SO in SSshuttle.requestlist) - if(SO.id == id) - SSshuttle.requestlist -= SO - . = TRUE - break - if("denyall") - SSshuttle.requestlist.Cut() - . = TRUE - if("toggleprivate") - self_paid = !self_paid - . = TRUE - if(.) - post_signal("supply") - -/obj/machinery/computer/cargo/proc/post_signal(command) - - var/datum/radio_frequency/frequency = SSradio.return_frequency(FREQ_STATUS_DISPLAYS) - - if(!frequency) - return - - var/datum/signal/status_signal = new(list("command" = command)) - frequency.post_signal(src, status_signal) diff --git a/code/modules/cargo/export_scanner.dm b/code/modules/cargo/export_scanner.dm deleted file mode 100644 index ffc52b1cca..0000000000 --- a/code/modules/cargo/export_scanner.dm +++ /dev/null @@ -1,45 +0,0 @@ -/obj/item/export_scanner - name = "export scanner" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "export_scanner" - item_state = "radio" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - item_flags = NOBLUDGEON - w_class = WEIGHT_CLASS_SMALL - siemens_coefficient = 1 - var/obj/machinery/computer/cargo/cargo_console = null - -/obj/item/export_scanner/examine(user) - . = ..() - if(!cargo_console) - . += "[src] is not currently linked to a cargo console." - -/obj/item/export_scanner/afterattack(obj/O, mob/user, proximity) - . = ..() - if(!istype(O) || !proximity) - return - - if(istype(O, /obj/machinery/computer/cargo)) - var/obj/machinery/computer/cargo/C = O - if(!C.requestonly) - cargo_console = C - to_chat(user, "Scanner linked to [C].") - else if(!istype(cargo_console)) - to_chat(user, "I must link [src] to a cargo console first!") - else - // Before you fix it: - // yes, checking manifests is a part of intended functionality. - - var/datum/export_report/ex = export_item_and_contents(O, cargo_console.get_export_categories(), dry_run=TRUE) - var/price = 0 - for(var/x in ex.total_amount) - price += ex.total_value[x] - - if(price) - to_chat(user, "Scanned [O], value: [price] credits[O.contents.len ? " (contents included)" : ""].") - else - to_chat(user, "Scanned [O], no export value.") - if(bounty_ship_item_and_contents(O, dry_run=TRUE)) - to_chat(user, "Scanned item is eligible for one or more bounties.") diff --git a/code/modules/cargo/exports/gear.dm b/code/modules/cargo/exports/gear.dm index 1282d52b5a..a6339fdf09 100644 --- a/code/modules/cargo/exports/gear.dm +++ b/code/modules/cargo/exports/gear.dm @@ -1,21 +1,10 @@ /datum/export/gear -/datum/export/gear/sec_helmet - cost = 100 - unit_name = "helmet" - export_types = list(/obj/item/clothing/head/helmet/sec) - /datum/export/gear/sec_armor cost = 100 unit_name = "armor vest" export_types = list(/obj/item/clothing/suit/armor/vest) -/datum/export/gear/riot_shield - cost = 100 - unit_name = "riot shield" - export_types = list(/obj/item/shield/riot) - - /datum/export/gear/mask/breath cost = 2 unit_name = "breath mask" @@ -28,30 +17,6 @@ include_subtypes = FALSE -/datum/export/gear/space/helmet - cost = 75 - unit_name = "space helmet" - export_types = list(/obj/item/clothing/head/helmet/space, /obj/item/clothing/head/helmet/space/eva, /obj/item/clothing/head/helmet/space/nasavoid) - include_subtypes = FALSE - -/datum/export/gear/space/suit - cost = 150 - unit_name = "space suit" - export_types = list(/obj/item/clothing/suit/space, /obj/item/clothing/suit/space/eva, /obj/item/clothing/suit/space/nasavoid) - include_subtypes = FALSE - - -/datum/export/gear/space/syndiehelmet - cost = 150 - unit_name = "Syndicate space helmet" - export_types = list(/obj/item/clothing/head/helmet/space/syndicate) - -/datum/export/gear/space/syndiesuit - cost = 300 - unit_name = "Syndicate space suit" - export_types = list(/obj/item/clothing/suit/space/syndicate) - - /datum/export/gear/radhelmet cost = 50 unit_name = "radsuit hood" diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm deleted file mode 100644 index 8d95fb56f4..0000000000 --- a/code/modules/cargo/exports/large_objects.dm +++ /dev/null @@ -1,141 +0,0 @@ -/datum/export/large/crate - cost = 500 - k_elasticity = 0 - unit_name = "crate" - export_types = list(/obj/structure/closet/crate) - exclude_types = list(/obj/structure/closet/crate/large, /obj/structure/closet/crate/wooden) - -/datum/export/large/crate/total_printout(datum/export_report/ex, notes = TRUE) // That's why a goddamn metal crate costs that much. - . = ..() - if(. && notes) - . += " Thanks for participating in Nanotrasen Crates Recycling Program." - -/datum/export/large/crate/wooden - cost = 100 - unit_name = "large wooden crate" - export_types = list(/obj/structure/closet/crate/large) - exclude_types = list() - -/datum/export/large/crate/wooden/ore - unit_name = "ore box" - export_types = list(/obj/structure/ore_box) - -/datum/export/large/crate/wood - cost = 240 - unit_name = "wooden crate" - export_types = list(/obj/structure/closet/crate/wooden) - exclude_types = list() - -/datum/export/large/crate/coffin - cost = 250//50 wooden crates cost 2000 points, and you can make 10 coffins in seconds with those planks. Each coffin selling for 250 means you can make a net gain of 500 points for wasting your time making coffins. - unit_name = "coffin" - export_types = list(/obj/structure/closet/crate/coffin) - -/datum/export/large/reagent_dispenser - cost = 100 // +0-400 depending on amount of reagents left - var/contents_cost = 400 - -/datum/export/large/reagent_dispenser/get_cost(obj/O) - var/obj/structure/reagent_dispensers/D = O - var/ratio = D.reagents.total_volume / D.reagents.maximum_volume - - return ..() + round(contents_cost * ratio) - -/datum/export/large/reagent_dispenser/water - unit_name = "watertank" - export_types = list(/obj/structure/reagent_dispensers/watertank) - contents_cost = 200 - -/datum/export/large/reagent_dispenser/fuel - unit_name = "fueltank" - export_types = list(/obj/structure/reagent_dispensers/fueltank) - -/datum/export/large/reagent_dispenser/beer - unit_name = "beer keg" - contents_cost = 700 - export_types = list(/obj/structure/reagent_dispensers/beerkeg) - - -/datum/export/large/pipedispenser - cost = 500 - unit_name = "pipe dispenser" - export_types = list(/obj/machinery/pipedispenser) - -/datum/export/large/emitter - cost = 550 - unit_name = "emitter" - export_types = list(/obj/machinery/power/emitter) - -/datum/export/large/field_generator - cost = 550 - unit_name = "field generator" - export_types = list(/obj/machinery/field/generator) - -/datum/export/large/collector - cost = 400 - unit_name = "radiation collector" - export_types = list(/obj/machinery/power/rad_collector) - -/datum/export/large/tesla_coil - cost = 450 - unit_name = "tesla coil" - export_types = list(/obj/machinery/power/tesla_coil) - -/datum/export/large/pa - cost = 350 - unit_name = "particle accelerator part" - export_types = list(/obj/structure/particle_accelerator) - -/datum/export/large/pa/controls - cost = 500 - unit_name = "particle accelerator control console" - export_types = list(/obj/machinery/particle_accelerator/control_box) - -/datum/export/large/supermatter - cost = 8000 - unit_name = "supermatter shard" - export_types = list(/obj/machinery/power/supermatter_crystal/shard) - -/datum/export/large/grounding_rod - cost = 350 - unit_name = "grounding rod" - export_types = list(/obj/machinery/power/grounding_rod) - -/datum/export/large/tesla_gen - cost = 4000 - unit_name = "energy ball generator" - export_types = list(/obj/machinery/the_singularitygen/tesla) - -/datum/export/large/singulo_gen - cost = 4000 - unit_name = "gravitational singularity generator" - export_types = list(/obj/machinery/the_singularitygen) - include_subtypes = FALSE - -/datum/export/large/iv - cost = 50 - unit_name = "iv drip" - export_types = list(/obj/machinery/iv_drip) - -/datum/export/large/barrier - cost = 25 - unit_name = "security barrier" - export_types = list(/obj/item/grenade/barrier, /obj/structure/barricade/security) - -/datum/export/large/gas_canister - cost = 10 //Base cost of canister. You get more for nice gases inside. - unit_name = "Gas Canister" - export_types = list(/obj/machinery/portable_atmospherics/canister) -/datum/export/large/gas_canister/get_cost(obj/O) - var/obj/machinery/portable_atmospherics/canister/C = O - var/worth = 10 - var/gases = C.air_contents.gases - C.air_contents.assert_gases(/datum/gas/bz,/datum/gas/stimulum,/datum/gas/hypernoblium,/datum/gas/miasma,/datum/gas/tritium,/datum/gas/pluoxium) - - worth += gases[/datum/gas/bz][MOLES]*4 - worth += gases[/datum/gas/stimulum][MOLES]*100 - worth += gases[/datum/gas/hypernoblium][MOLES]*1000 - worth += gases[/datum/gas/miasma][MOLES]*10 - worth += gases[/datum/gas/tritium][MOLES]*5 - worth += gases[/datum/gas/pluoxium][MOLES]*5 - return worth diff --git a/code/modules/cargo/exports/lavaland.dm b/code/modules/cargo/exports/lavaland.dm deleted file mode 100644 index a1c6307c5e..0000000000 --- a/code/modules/cargo/exports/lavaland.dm +++ /dev/null @@ -1,65 +0,0 @@ -//Tendril chest artifacts and ruin loot. Includes ash drake loot since they drop two sets of armor + random item -//Consumable or one-use items like the magic D20 and gluttony's blessing are omitted - -/datum/export/lavaland/minor - cost = 10000 - unit_name = "minor lava planet artifact" - export_types = list(/obj/item/immortality_talisman, - /obj/item/book_of_babel, - /obj/item/gun/magic/hook, - /obj/item/wisp_lantern, - /obj/item/reagent_containers/glass/bottle/potion/flight, - /obj/item/katana/cursed, - /obj/item/clothing/glasses/godeye, - /obj/item/melee/ghost_sword, - /obj/item/clothing/suit/space/hardsuit/cult, - /obj/item/voodoo, - /obj/item/grenade/clusterbuster/inferno, - /obj/item/clothing/neck/necklace/memento_mori, - /obj/item/organ/heart/cursed/wizard, - /obj/item/clothing/suit/hooded/cloak/drake, - /obj/item/dragons_blood, - /obj/item/lava_staff, - /obj/item/ship_in_a_bottle, - /obj/item/clothing/shoes/clown_shoes/banana_shoes, - /obj/item/gun/magic/staff/honk, - /obj/item/kitchen/knife/envy, - /obj/item/gun/ballistic/revolver/russian/soul, - /obj/item/veilrender/vealrender) - -/datum/export/lavaland/major //valuable chest/ruin loot and staff of storms - cost = 20000 - unit_name = "lava planet artifact" - export_types = list(/obj/item/guardiancreator, - /obj/item/rod_of_asclepius, - /obj/item/clothing/suit/space/hardsuit/ert/paranormal, - /obj/item/prisoncube, - /obj/item/staff/storm) - -//Megafauna loot, except for ash drakes and legion - -/datum/export/lavaland/megafauna - cost = 40000 - unit_name = "major lava planet artifact" - export_types = list(/obj/item/hierophant_club, - /obj/item/melee/transforming/cleaving_saw, - /obj/item/organ/vocal_cords/colossus, - /obj/machinery/anomalous_crystal, - /obj/item/mayhem, - /obj/item/blood_contract, - /obj/item/gun/magic/staff/spellblade) - -/datum/export/lavaland/megafauna/total_printout(datum/export_report/ex, notes = TRUE) //in the unlikely case a miner feels like selling megafauna loot - . = ..() - if(. && notes) - . += " On behalf of the Nanotrasen RnD division: Thank you for your hard work." - -/datum/export/lavaland/megafauna/hev/suit - cost = 30000 - unit_name = "H.E.C.K. suit" - export_types = list(/obj/item/clothing/suit/space/hostile_environment) - -/datum/export/lavaland/megafauna/hev/helmet - cost = 10000 - unit_name = "H.E.C.K. helmet" - export_types = list(/obj/item/clothing/head/helmet/space/hostile_environment) diff --git a/code/modules/cargo/exports/parts.dm b/code/modules/cargo/exports/parts.dm deleted file mode 100644 index e6fda5f6b1..0000000000 --- a/code/modules/cargo/exports/parts.dm +++ /dev/null @@ -1,21 +0,0 @@ -// Circuit boards, spare parts, etc. - -/datum/export/solar/assembly - cost = 50 - unit_name = "solar panel assembly" - export_types = list(/obj/item/solar_assembly) - -/datum/export/solar/tracker_board - cost = 100 - unit_name = "solar tracker board" - export_types = list(/obj/item/electronics/tracker) - -/datum/export/solar/control_board - cost = 150 - unit_name = "solar panel control board" - export_types = list(/obj/item/circuitboard/computer/solar_control) - -/datum/export/swarmer - cost = 2000 - unit_name = "deactivated alien deconstruction drone" - export_types = list(/obj/item/deactivated_swarmer) diff --git a/code/modules/cargo/exports/sheets.dm b/code/modules/cargo/exports/sheets.dm index 1c666a4db4..10f04fdc21 100644 --- a/code/modules/cargo/exports/sheets.dm +++ b/code/modules/cargo/exports/sheets.dm @@ -48,11 +48,6 @@ unit_name = "gondola hide" export_types = list(/obj/item/stack/sheet/animalhide/gondola) -/datum/export/stack/skin/xeno - cost = 500 - unit_name = "alien hide" - export_types = list(/obj/item/stack/sheet/animalhide/xeno) - // Common materials. // For base materials, see materials.dm @@ -87,15 +82,3 @@ unit_name = "block" message = "of sandstone" export_types = list(/obj/item/stack/sheet/mineral/sandstone) - -/datum/export/stack/cable - cost = 0.2 - unit_name = "cable piece" - export_types = list(/obj/item/stack/cable_coil) - -// Weird Stuff - -/datum/export/stack/abductor - cost = 1000 - message = "of alien alloy" - export_types = list(/obj/item/stack/sheet/mineral/abductor) diff --git a/code/modules/cargo/exports/tools.dm b/code/modules/cargo/exports/tools.dm deleted file mode 100644 index 7bee3017d9..0000000000 --- a/code/modules/cargo/exports/tools.dm +++ /dev/null @@ -1,132 +0,0 @@ -/datum/export/toolbox - cost = 4 - unit_name = "toolbox" - export_types = list(/obj/item/storage/toolbox) - -// mechanical toolbox: 22cr -// emergency toolbox: 17-20cr -// electrical toolbox: 36cr -// robust: priceless - -// Basic tools -/datum/export/screwdriver - cost = 2 - unit_name = "screwdriver" - export_types = list(/obj/item/screwdriver) - include_subtypes = FALSE - -/datum/export/wrench - cost = 2 - unit_name = "wrench" - export_types = list(/obj/item/wrench) - -/datum/export/crowbar - cost = 2 - unit_name = "crowbar" - export_types = list(/obj/item/crowbar) - -/datum/export/wirecutters - cost = 2 - unit_name = "pair" - message = "of wirecutters" - export_types = list(/obj/item/wirecutters) - - -/datum/export/weldingtool - cost = 5 - unit_name = "welding tool" - export_types = list(/obj/item/weldingtool) - include_subtypes = FALSE - -/datum/export/weldingtool/emergency - cost = 2 - unit_name = "emergency welding tool" - export_types = list(/obj/item/weldingtool/mini) - -/datum/export/weldingtool/industrial - cost = 10 - unit_name = "industrial welding tool" - export_types = list(/obj/item/weldingtool/largetank, /obj/item/weldingtool/hugetank) - - -/datum/export/extinguisher - cost = 15 - unit_name = "fire extinguisher" - export_types = list(/obj/item/extinguisher) - include_subtypes = FALSE - -/datum/export/extinguisher/mini - cost = 2 - unit_name = "pocket fire extinguisher" - export_types = list(/obj/item/extinguisher/mini) - - -/datum/export/flashlight - cost = 5 - unit_name = "flashlight" - export_types = list(/obj/item/flashlight) - include_subtypes = FALSE - -/datum/export/flashlight/flare - cost = 2 - unit_name = "flare" - export_types = list(/obj/item/flashlight/flare) - -/datum/export/flashlight/seclite - cost = 10 - unit_name = "seclite" - export_types = list(/obj/item/flashlight/seclite) - - -/datum/export/analyzer - cost = 5 - unit_name = "analyzer" - export_types = list(/obj/item/analyzer) - -/datum/export/analyzer/t_scanner - cost = 10 - unit_name = "t-ray scanner" - export_types = list(/obj/item/t_scanner) - - -/datum/export/radio - cost = 5 - unit_name = "radio" - export_types = list(/obj/item/radio) - exclude_types = list(/obj/item/radio/mech) - - -/datum/export/rcd - cost = 100 - unit_name = "rapid construction device" - export_types = list(/obj/item/construction/rcd) - -/datum/export/rcd_ammo - cost = 60 - unit_name = "compressed matter cardridge" - export_types = list(/obj/item/rcd_ammo) - -/datum/export/rpd - cost = 100 - unit_name = "rapid pipe dispenser" - export_types = list(/obj/item/pipe_dispenser) - -/datum/export/singulo //failsafe in case someone decides to ship a live singularity to CentCom without the corresponding bounty - cost = 1 - unit_name = "singularity" - export_types = list(/obj/singularity) - include_subtypes = FALSE - -/datum/export/singulo/total_printout(datum/export_report/ex, notes = TRUE) - . = ..() - if(. && notes) - . += " ERROR: Invalid object detected." - -/datum/export/singulo/tesla //see above - unit_name = "energy ball" - export_types = list(/obj/singularity/energy_ball) - -/datum/export/singulo/tesla/total_printout(datum/export_report/ex, notes = TRUE) - . = ..() - if(. && notes) - . += " ERROR: Unscheduled energy ball delivery detected." diff --git a/code/modules/cargo/exports/weapons.dm b/code/modules/cargo/exports/weapons.dm deleted file mode 100644 index bad221c3ac..0000000000 --- a/code/modules/cargo/exports/weapons.dm +++ /dev/null @@ -1,71 +0,0 @@ -// Weapon exports. Stun batons, disablers, etc. - -/datum/export/weapon - include_subtypes = FALSE - -/datum/export/weapon/baton - cost = 100 - unit_name = "stun baton" - export_types = list(/obj/item/melee/baton) - exclude_types = list(/obj/item/melee/baton/cattleprod) - include_subtypes = TRUE - -/datum/export/weapon/knife - cost = 100 - unit_name = "combat knife" - export_types = list(/obj/item/kitchen/knife/combat) - - -/datum/export/weapon/taser - cost = 200 - unit_name = "advanced taser" - export_types = list(/obj/item/gun/energy/e_gun/advtaser) - -/datum/export/weapon/laser - cost = 200 - unit_name = "laser gun" - export_types = list(/obj/item/gun/energy/laser) - -/datum/export/weapon/disabler - cost = 100 - unit_name = "disabler" - export_types = list(/obj/item/gun/energy/disabler) - -/datum/export/weapon/energy_gun - cost = 300 - unit_name = "energy gun" - export_types = list(/obj/item/gun/energy/e_gun) - -/datum/export/weapon/wt550 - cost = 300 - unit_name = "WT-550 automatic rifle" - export_types = list(/obj/item/gun/ballistic/automatic/wt550) - -/datum/export/weapon/shotgun - cost = 300 - unit_name = "combat shotgun" - export_types = list(/obj/item/gun/ballistic/shotgun/automatic/combat) - - -/datum/export/weapon/flashbang - cost = 5 - unit_name = "flashbang grenade" - export_types = list(/obj/item/grenade/flashbang) - -/datum/export/weapon/teargas - cost = 5 - unit_name = "tear gas grenade" - export_types = list(/obj/item/grenade/chem_grenade/teargas) - - -/datum/export/weapon/flash - cost = 5 - unit_name = "handheld flash" - export_types = list(/obj/item/assembly/flash) - include_subtypes = TRUE - -/datum/export/weapon/handcuffs - cost = 3 - unit_name = "pair" - message = "of handcuffs" - export_types = list(/obj/item/restraints/handcuffs) diff --git a/code/modules/cargo/expressconsole.dm b/code/modules/cargo/expressconsole.dm deleted file mode 100644 index 7258abf287..0000000000 --- a/code/modules/cargo/expressconsole.dm +++ /dev/null @@ -1,215 +0,0 @@ -#define MAX_EMAG_ROCKETS 8 -#define BEACON_COST 500 -#define SP_LINKED 1 -#define SP_READY 2 -#define SP_LAUNCH 3 -#define SP_UNLINK 4 -#define SP_UNREADY 5 - -/obj/machinery/computer/cargo/express - name = "express supply console" - desc = "This console allows the user to purchase a package \ - with 1/40th of the delivery time: made possible by Nanotrasen's new \"1500mm Orbital Railgun\".\ - All sales are near instantaneous - please choose carefully" - icon_screen = "supply_express" - circuit = /obj/item/circuitboard/computer/cargo/express - ui_x = 600 - ui_y = 700 - blockade_warning = "Bluespace instability detected. Delivery impossible." - req_access = list(ACCESS_QM) - - var/message - var/printed_beacons = 0 //number of beacons printed. Used to determine beacon names. - var/list/meme_pack_data - var/obj/item/supplypod_beacon/beacon //the linked supplypod beacon - var/area/landingzone = /area/quartermaster/storage //where we droppin boys - var/podType = /obj/structure/closet/supplypod - var/cooldown = 0 //cooldown to prevent printing supplypod beacon spam - var/locked = TRUE //is the console locked? unlock with ID - var/usingBeacon = FALSE //is the console in beacon mode? exists to let beacon know when a pod may come in - -/obj/machinery/computer/cargo/express/Initialize() - . = ..() - packin_up() - -/obj/machinery/computer/cargo/express/Destroy() - if(beacon) - beacon.unlink_console() - return ..() - -/obj/machinery/computer/cargo/express/attackby(obj/item/W, mob/living/user, params) - if((istype(W, /obj/item/card/id) || istype(W, /obj/item/pda)) && allowed(user)) - locked = !locked - to_chat(user, "I [locked ? "lock" : "unlock"] the interface.") - return - else if(istype(W, /obj/item/disk/cargo/bluespace_pod)) - podType = /obj/structure/closet/supplypod/bluespacepod//doesnt effect circuit board, making reversal possible - to_chat(user, "I insert the disk into [src], allowing for advanced supply delivery vehicles.") - qdel(W) - return TRUE - else if(istype(W, /obj/item/supplypod_beacon)) - var/obj/item/supplypod_beacon/sb = W - if (sb.express_console != src) - sb.link_console(src, user) - return TRUE - else - to_chat(user, "[src] is already linked to [sb].") - ..() - -/obj/machinery/computer/cargo/express/emag_act(mob/living/user) - if(obj_flags & EMAGGED) - return - user.visible_message("[user] swipes a suspicious card through [src]!", - "I change the routing protocols, allowing the Supply Pod to land anywhere on the station.") - obj_flags |= EMAGGED - // This also sets this on the circuit board - var/obj/item/circuitboard/computer/cargo/board = circuit - board.obj_flags |= EMAGGED - packin_up() - -/obj/machinery/computer/cargo/express/proc/packin_up() // oh shit, I'm sorry - meme_pack_data = list() // sorry for what? - for(var/pack in SSshuttle.supply_packs) // our quartermaster taught us not to be ashamed of our supply packs - var/datum/supply_pack/P = SSshuttle.supply_packs[pack] // specially since they're such a good price and all - if(!meme_pack_data[P.group]) // yeah, I see that, your quartermaster gave you good advice - meme_pack_data[P.group] = list( // it gets cheaper when I return it - "name" = P.group, // mmhm - "packs" = list() // sometimes, I return it so much, I rip the manifest - ) // see, my quartermaster taught me a few things too - if((P.hidden) || (P.special)) // like, how not to rip the manifest - continue// by using someone else's crate - if(!(obj_flags & EMAGGED) && P.contraband) // will you show me? - continue // i'd be right happy to - meme_pack_data[P.group]["packs"] += list(list( - "name" = P.name, - "cost" = P.cost, - "id" = pack, - "desc" = P.desc || P.name // If there is a description, use it. Otherwise use the pack's name. - )) - -/obj/machinery/computer/cargo/express/ui_interact(mob/living/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) // Remember to use the appropriate state. - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "cargo_express", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/computer/cargo/express/ui_data(mob/user) - var/canBeacon = beacon && (isturf(beacon.loc) || ismob(beacon.loc))//is the beacon in a valid location? - var/list/data = list() - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) - if(D) - data["points"] = D.account_balance - data["locked"] = locked//swipe an ID to unlock - data["siliconUser"] = user.has_unlimited_silicon_privilege - data["beaconzone"] = beacon ? get_area(beacon) : ""//where is the beacon located? outputs in the tgui - data["usingBeacon"] = usingBeacon //is the mode set to deliver to the beacon or the cargobay? - data["canBeacon"] = !usingBeacon || canBeacon //is the mode set to beacon delivery, and is the beacon in a valid location? - data["canBuyBeacon"] = cooldown <= 0 && D.account_balance >= BEACON_COST - data["beaconError"] = usingBeacon && !canBeacon ? "(BEACON ERROR)" : ""//changes button text to include an error alert if necessary - data["hasBeacon"] = beacon != null//is there a linked beacon? - data["beaconName"] = beacon ? beacon.name : "No Beacon Found" - data["printMsg"] = cooldown > 0 ? "Print Beacon for [BEACON_COST] credits ([cooldown])" : "Print Beacon for [BEACON_COST] credits"//buttontext for printing beacons - data["supplies"] = list() - message = "Sales are near-instantaneous - please choose carefully." - if(SSshuttle.supplyBlocked) - message = blockade_warning - if(usingBeacon && !beacon) - message = "BEACON ERROR: BEACON MISSING"//beacon was destroyed - else if (usingBeacon && !canBeacon) - message = "BEACON ERROR: MUST BE EXPOSED"//beacon's loc/user's loc must be a turf - if(obj_flags & EMAGGED) - message = "(&!#@ERROR: ROUTING_#PROTOCOL MALF(*CT#ON. $UG%ESTE@ ACT#0N: !^/PULS3-%E)ET CIR*)ITB%ARD." - data["message"] = message - if(!meme_pack_data) - packin_up() - stack_trace("You didn't give the cargo tech good advice, and he ripped the manifest. As a result, there was no pack data for [src]") - data["supplies"] = meme_pack_data - if (cooldown > 0)//cooldown used for printing beacons - cooldown-- - return data - -/obj/machinery/computer/cargo/express/ui_act(action, params, datum/tgui/ui) - switch(action) - if("LZCargo") - usingBeacon = FALSE - if (beacon) - beacon.update_status(SP_UNREADY) //ready light on beacon will turn off - if("LZBeacon") - usingBeacon = TRUE - if (beacon) - beacon.update_status(SP_READY) //turns on the beacon's ready light - if("printBeacon") - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) - if(D) - if(D.adjust_money(-BEACON_COST)) - cooldown = 10//a ~ten second cooldown for printing beacons to prevent spam - var/obj/item/supplypod_beacon/C = new /obj/item/supplypod_beacon(drop_location()) - C.link_console(src, usr)//rather than in beacon's Initialize(), we can assign the computer to the beacon by reusing this proc) - printed_beacons++//printed_beacons starts at 0, so the first one out will be called beacon # 1 - beacon.name = "Supply Pod Beacon #[printed_beacons]" - - - if("add")//Generate Supply Order first - var/id = text2path(params["id"]) - var/datum/supply_pack/pack = SSshuttle.supply_packs[id] - if(!istype(pack)) - return - var/name = "*None Provided*" - var/rank = "*None Provided*" - var/ckey = usr.ckey - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - name = H.get_authentification_name() - rank = H.get_assignment(hand_first = TRUE) - else if(issilicon(usr)) - name = usr.real_name - rank = "Silicon" - var/reason = "" - var/list/empty_turfs - var/datum/supply_order/SO = new(pack, name, rank, ckey, reason) - var/points_to_check - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) - if(D) - points_to_check = D.account_balance - if(!(obj_flags & EMAGGED)) - if(SO.pack.cost <= points_to_check) - var/LZ - if (istype(beacon) && usingBeacon)//prioritize beacons over landing in cargobay - LZ = get_turf(beacon) - beacon.update_status(SP_LAUNCH) - else if (!usingBeacon)//find a suitable supplypod landing zone in cargobay - landingzone = GLOB.areas_by_type[/area/quartermaster/storage] - if (!landingzone) - WARNING("[src] couldnt find a Quartermaster/Storage (aka cargobay) area on the station, and as such it has set the supplypod landingzone to the area it resides in.") - landingzone = get_area(src) - for(var/turf/open/floor/T in landingzone.contents)//uses default landing zone - if(is_blocked_turf(T)) - continue - LAZYADD(empty_turfs, T) - CHECK_TICK - if(empty_turfs && empty_turfs.len) - LZ = pick(empty_turfs) - if (SO.pack.cost <= points_to_check && LZ)//we need to call the cost check again because of the CHECK_TICK call - D.adjust_money(-SO.pack.cost) - new /obj/effect/DPtarget(LZ, podType, SO) - . = TRUE - update_icon() - else - if(SO.pack.cost * (0.72*MAX_EMAG_ROCKETS) <= points_to_check) // bulk discount :^) - landingzone = GLOB.areas_by_type[pick(GLOB.the_station_areas)] //override default landing zone - for(var/turf/open/floor/T in landingzone.contents) - if(is_blocked_turf(T)) - continue - LAZYADD(empty_turfs, T) - CHECK_TICK - if(empty_turfs && empty_turfs.len) - D.adjust_money(-(SO.pack.cost * (0.72*MAX_EMAG_ROCKETS))) - - SO.generateRequisition(get_turf(src)) - for(var/i in 1 to MAX_EMAG_ROCKETS) - var/LZ = pick(empty_turfs) - LAZYREMOVE(empty_turfs, LZ) - new /obj/effect/DPtarget(LZ, podType, SO) - . = TRUE - update_icon() - CHECK_TICK diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm deleted file mode 100644 index a4aa5c0650..0000000000 --- a/code/modules/cargo/packs.dm +++ /dev/null @@ -1,2390 +0,0 @@ -/datum/supply_pack - var/name = "Crate" - var/group = "" - var/hidden = FALSE - var/contraband = FALSE - var/cost = 700 // Minimum cost, or infinite points are possible. - var/access = FALSE - var/access_any = FALSE - var/list/contains = null - var/crate_name = "crate" - var/desc = ""//no desc by default - var/crate_type = /obj/structure/closet/crate - var/dangerous = FALSE // Should we message admins? - var/special = FALSE //Event/Station Goals/Admin enabled packs - var/special_enabled = FALSE - var/DropPodOnly = FALSE//only usable by the Bluespace Drop Pod via the express cargo console - var/admin_spawned = FALSE - var/small_item = FALSE //Small items can be grouped into a single crate. - -/datum/supply_pack/New() - ..() - var/lim = round(cost * 0.3) - cost = rand(cost-lim, cost+lim) - if(cost < 1) - cost = 1 -// var/amt = 0 -// for(var/I in contains) -// amt++ -// if(amt > 1) -// name = "[name] x[amt]" -// name = "[name] ([cost])" - -/datum/supply_pack/proc/generate(atom/A, datum/bank_account/paying_account) - var/obj/structure/closet/crate/C - if(paying_account) - C = new /obj/structure/closet/crate/secure/owned(A, paying_account) - C.name = "[crate_name] - Purchased by [paying_account.account_holder]" - else - C = new crate_type(A) - C.name = crate_name - if(access) - C.req_access = list(access) - if(access_any) - C.req_one_access = access_any - - fill(C) - return C - -/datum/supply_pack/proc/fill(obj/structure/closet/crate/C) - if (admin_spawned) - for(var/item in contains) - var/atom/A = new item(C) - A.flags_1 |= ADMIN_SPAWNED_1 - else - for(var/item in contains) - new item(C) - -// If you add something to this list, please group it by type and sort it alphabetically instead of just jamming it in like an animal - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Emergency /////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/emergency - group = "Emergency" - -/datum/supply_pack/emergency/vehicle - name = "Biker Gang Kit" //TUNNEL SNAKES OWN THIS TOWN - desc = "" - cost = 2000 - contraband = TRUE - contains = list(/obj/vehicle/ridden/atv, - /obj/item/key, - /obj/item/clothing/suit/jacket/leather/overcoat, - /obj/item/clothing/gloves/color/black, - /obj/item/clothing/head/soft, - /obj/item/clothing/mask/bandana/skull)//so you can properly #cargoniabikergang - crate_name = "Biker Kit" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/emergency/bio - name = "Biological Emergency Crate" - desc = "" - cost = 2000 - contains = list(/obj/item/clothing/head/bio_hood, - /obj/item/clothing/head/bio_hood, - /obj/item/clothing/suit/bio_suit, - /obj/item/clothing/suit/bio_suit, - /obj/item/storage/bag/bio, - /obj/item/reagent_containers/syringe/antiviral, - /obj/item/reagent_containers/syringe/antiviral, - /obj/item/clothing/gloves/color/latex/nitrile, - /obj/item/clothing/gloves/color/latex/nitrile) - crate_name = "bio suit crate" - -/datum/supply_pack/emergency/equipment - name = "Emergency Bot/Internals Crate" - desc = "" - cost = 3500 - contains = list(/mob/living/simple_animal/bot/floorbot, - /mob/living/simple_animal/bot/floorbot, - /mob/living/simple_animal/bot/medbot, - /mob/living/simple_animal/bot/medbot, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/clothing/mask/breath, - /obj/item/clothing/mask/breath, - /obj/item/clothing/mask/breath, - /obj/item/clothing/mask/breath, - /obj/item/clothing/mask/breath) - crate_name = "emergency crate" - crate_type = /obj/structure/closet/crate/internals - -/datum/supply_pack/emergency/bomb - name = "Explosive Emergency Crate" - desc = "" - cost = 1500 - contains = list(/obj/item/clothing/head/bomb_hood, - /obj/item/clothing/suit/bomb_suit, - /obj/item/clothing/mask/gas, - /obj/item/screwdriver, - /obj/item/wirecutters, - /obj/item/multitool) - crate_name = "bomb suit crate" - -/datum/supply_pack/emergency/firefighting - name = "Firefighting Crate" - desc = "" - cost = 1000 - contains = list(/obj/item/clothing/suit/fire/firefighter, - /obj/item/clothing/suit/fire/firefighter, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, - /obj/item/flashlight, - /obj/item/flashlight, - /obj/item/tank/internals/oxygen/red, - /obj/item/tank/internals/oxygen/red, - /obj/item/extinguisher/advanced, - /obj/item/extinguisher/advanced, - /obj/item/clothing/head/hardhat/red, - /obj/item/clothing/head/hardhat/red) - crate_name = "firefighting crate" - -/datum/supply_pack/emergency/atmostank - name = "Firefighting Tank Backpack" - desc = "" - cost = 1000 - access = ACCESS_ATMOSPHERICS - contains = list(/obj/item/watertank/atmos) - crate_name = "firefighting backpack crate" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/emergency/internals - name = "Internals Crate" - desc = ""//IS THAT A - cost = 1000 - contains = list(/obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/breath, - /obj/item/clothing/mask/breath, - /obj/item/clothing/mask/breath, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/oxygen, - /obj/item/tank/internals/oxygen, - /obj/item/tank/internals/oxygen) - crate_name = "internals crate" - crate_type = /obj/structure/closet/crate/internals - -/datum/supply_pack/emergency/metalfoam - name = "Metal Foam Grenade Crate" - desc = "" - cost = 1000 - contains = list(/obj/item/storage/box/metalfoam) - crate_name = "metal foam grenade crate" - -/datum/supply_pack/emergency/plasma_spacesuit - name = "Plasmaman Space Envirosuits" - desc = "" - cost = 4000 - access = ACCESS_EVA - contains = list(/obj/item/clothing/suit/space/eva/plasmaman, - /obj/item/clothing/suit/space/eva/plasmaman, - /obj/item/clothing/head/helmet/space/plasmaman, - /obj/item/clothing/head/helmet/space/plasmaman) - crate_name = "plasmaman EVA crate" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/emergency/plasmaman - name = "Plasmaman Supply Kit" - desc = "" - cost = 2000 - contains = list(/obj/item/clothing/under/plasmaman, - /obj/item/clothing/under/plasmaman, - /obj/item/tank/internals/plasmaman/belt/full, - /obj/item/tank/internals/plasmaman/belt/full, - /obj/item/clothing/head/helmet/space/plasmaman, - /obj/item/clothing/head/helmet/space/plasmaman) - crate_name = "plasmaman supply kit" - -/datum/supply_pack/emergency/radiation - name = "Radiation Protection Crate" - desc = "" - cost = 1000 - contains = list(/obj/item/clothing/head/radiation, - /obj/item/clothing/head/radiation, - /obj/item/clothing/suit/radiation, - /obj/item/clothing/suit/radiation, - /obj/item/geiger_counter, - /obj/item/geiger_counter, - /obj/item/reagent_containers/food/drinks/bottle/vodka, - /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, - /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass) - crate_name = "radiation protection crate" - crate_type = /obj/structure/closet/crate/radiation - -/datum/supply_pack/emergency/spacesuit - name = "Space Suit Crate" - desc = "" - cost = 2500 - access = ACCESS_EVA - contains = list(/obj/item/clothing/suit/space, - /obj/item/clothing/head/helmet/space, - /obj/item/clothing/mask/breath, - /obj/item/tank/jetpack/carbondioxide) - crate_name = "space suit crate" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/emergency/specialops - name = "Special Ops Supplies" - desc = "" - hidden = TRUE - cost = 2000 - contains = list(/obj/item/storage/box/emps, - /obj/item/grenade/smokebomb, - /obj/item/grenade/smokebomb, - /obj/item/grenade/smokebomb, - /obj/item/pen/sleepy, - /obj/item/grenade/chem_grenade/incendiary) - crate_name = "emergency crate" - crate_type = /obj/structure/closet/crate/internals - -/datum/supply_pack/emergency/weedcontrol - name = "Weed Control Crate" - desc = "" - cost = 1500 - access = ACCESS_HYDROPONICS - contains = list(/obj/item/scythe, - /obj/item/clothing/mask/gas, - /obj/item/grenade/chem_grenade/antiweed, - /obj/item/grenade/chem_grenade/antiweed) - crate_name = "weed control crate" - crate_type = /obj/structure/closet/crate/secure/hydroponics - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Security //////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/security - group = "Security" - access = ACCESS_SECURITY - crate_type = /obj/structure/closet/crate/secure/gear - -/datum/supply_pack/security/ammo - name = "Ammo Crate" - desc = "" - cost = 2500 - contains = list(/obj/item/ammo_box/magazine/wt550m9, - /obj/item/ammo_box/magazine/wt550m9, - /obj/item/storage/box/lethalshot, - /obj/item/storage/box/lethalshot, - /obj/item/storage/box/lethalshot, - /obj/item/storage/box/rubbershot, - /obj/item/storage/box/rubbershot, - /obj/item/storage/box/rubbershot, - /obj/item/ammo_box/c38/trac, - /obj/item/ammo_box/c38/hotshot, - /obj/item/ammo_box/c38/iceblox) - crate_name = "ammo crate" - -/datum/supply_pack/security/armor - name = "Armor Crate" - desc = "" - cost = 1000 - contains = list(/obj/item/clothing/suit/armor/vest, - /obj/item/clothing/suit/armor/vest, - /obj/item/clothing/suit/armor/vest) - crate_name = "armor crate" - -/datum/supply_pack/security/disabler - name = "Disabler Crate" - desc = "" - cost = 1500 - contains = list(/obj/item/gun/energy/disabler, - /obj/item/gun/energy/disabler, - /obj/item/gun/energy/disabler) - crate_name = "disabler crate" - -/datum/supply_pack/security/forensics - name = "Forensics Crate" - desc = "" - cost = 2000 - contains = list(/obj/item/detective_scanner, - /obj/item/storage/box/evidence, - /obj/item/camera, - /obj/item/taperecorder, - /obj/item/toy/crayon/white, - /obj/item/clothing/head/fedora/det_hat) - crate_name = "forensics crate" - -/datum/supply_pack/security/helmets - name = "Helmets Crate" - desc = "" - cost = 1000 - contains = list(/obj/item/clothing/head/helmet/sec, - /obj/item/clothing/head/helmet/sec, - /obj/item/clothing/head/helmet/sec) - crate_name = "helmet crate" - -/datum/supply_pack/security/laser - name = "Lasers Crate" - desc = "" - cost = 2000 - contains = list(/obj/item/gun/energy/laser, - /obj/item/gun/energy/laser, - /obj/item/gun/energy/laser) - crate_name = "laser crate" - -/datum/supply_pack/security/securitybarriers - name = "Security Barrier Grenades" - desc = "" - contains = list(/obj/item/grenade/barrier, - /obj/item/grenade/barrier, - /obj/item/grenade/barrier, - /obj/item/grenade/barrier) - cost = 2000 - crate_name = "security barriers crate" - -/datum/supply_pack/security/securityclothes - name = "Security Clothing Crate" - desc = "" - cost = 3000 - contains = list(/obj/item/clothing/under/rank/security/officer/formal, - /obj/item/clothing/under/rank/security/officer/formal, - /obj/item/clothing/suit/security/officer, - /obj/item/clothing/suit/security/officer, - /obj/item/clothing/head/beret/sec/navyofficer, - /obj/item/clothing/head/beret/sec/navyofficer, - /obj/item/clothing/under/rank/security/warden/formal, - /obj/item/clothing/suit/security/warden, - /obj/item/clothing/head/beret/sec/navywarden, - /obj/item/clothing/under/rank/security/head_of_security/formal, - /obj/item/clothing/suit/security/hos, - /obj/item/clothing/head/beret/sec/navyhos) - crate_name = "security clothing crate" - -/datum/supply_pack/security/supplies - name = "Security Supplies Crate" - desc = "" - cost = 1000 - contains = list(/obj/item/storage/box/flashbangs, - /obj/item/storage/box/teargas, - /obj/item/storage/box/flashes, - /obj/item/storage/box/handcuffs) - crate_name = "security supply crate" - -/datum/supply_pack/security/vending/security - name = "SecTech Supply Crate" - desc = "" - cost = 1500 - contains = list(/obj/item/vending_refill/security) - crate_name = "SecTech supply crate" - -/datum/supply_pack/security/firingpins - name = "Standard Firing Pins Crate" - desc = "" - cost = 2000 - contains = list(/obj/item/storage/box/firingpins, - /obj/item/storage/box/firingpins) - crate_name = "firing pins crate" - -/datum/supply_pack/security/firingpins/paywall - name = "Paywall Firing Pins Crate" - desc = "" - cost = 2500 - contains = list(/obj/item/storage/box/firingpins/paywall, - /obj/item/storage/box/firingpins/paywall) - crate_name = "paywall firing pins crate" - -/datum/supply_pack/security/justiceinbound - name = "Standard Justice Enforcer Crate" - desc = "" - cost = 6000 //justice comes at a price. An expensive, noisy price. - contraband = TRUE - contains = list(/obj/item/clothing/head/helmet/justice, - /obj/item/clothing/mask/gas/sechailer) - crate_name = "security clothing crate" - -/datum/supply_pack/security/baton - name = "Stun Batons Crate" - desc = "" - cost = 1000 - contains = list(/obj/item/melee/baton/loaded, - /obj/item/melee/baton/loaded, - /obj/item/melee/baton/loaded) - crate_name = "stun baton crate" - -/datum/supply_pack/security/wall_flash - name = "Wall-Mounted Flash Crate" - desc = "" - cost = 1000 - contains = list(/obj/item/storage/box/wall_flash, - /obj/item/storage/box/wall_flash, - /obj/item/storage/box/wall_flash, - /obj/item/storage/box/wall_flash) - crate_name = "wall-mounted flash crate" - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Armory ////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/security/armory - group = "Armory" - access = ACCESS_ARMORY - crate_type = /obj/structure/closet/crate/secure/weapon - -/datum/supply_pack/security/armory/bulletarmor - name = "Bulletproof Armor Crate" - desc = "" - cost = 1500 - contains = list(/obj/item/clothing/suit/armor/bulletproof, - /obj/item/clothing/suit/armor/bulletproof, - /obj/item/clothing/suit/armor/bulletproof) - crate_name = "bulletproof armor crate" - -/datum/supply_pack/security/armory/bullethelmets - name = "Bulletproof Helmets Crate" - desc = "" - cost = 1500 - contains = list(/obj/item/clothing/head/helmet/alt, - /obj/item/clothing/head/helmet/alt, - /obj/item/clothing/head/helmet/alt) - crate_name = "bulletproof helmets crate" - -/datum/supply_pack/security/armory/chemimp - name = "Chemical Implants Crate" - desc = "" - cost = 2000 - contains = list(/obj/item/storage/box/chemimp) - crate_name = "chemical implant crate" - -/datum/supply_pack/security/armory/combatknives_single - name = "Combat Knife Single-Pack" - desc = "" - cost = 1200 - small_item = TRUE - contains = list(/obj/item/kitchen/knife/combat) - -/datum/supply_pack/security/armory/combatknives - name = "Combat Knives Crate" - desc = "" - cost = 3000 - contains = list(/obj/item/kitchen/knife/combat, - /obj/item/kitchen/knife/combat, - /obj/item/kitchen/knife/combat) - crate_name = "combat knife crate" - -/datum/supply_pack/security/armory/ballistic_single - name = "Combat Shotgun Single-Pack" - desc = "" - cost = 3200 - small_item = TRUE - contains = list(/obj/item/gun/ballistic/shotgun/automatic/combat, - /obj/item/storage/belt/bandolier) - -/datum/supply_pack/security/armory/ballistic - name = "Combat Shotguns Crate" - desc = "" - cost = 8000 - contains = list(/obj/item/gun/ballistic/shotgun/automatic/combat, - /obj/item/gun/ballistic/shotgun/automatic/combat, - /obj/item/gun/ballistic/shotgun/automatic/combat, - /obj/item/storage/belt/bandolier, - /obj/item/storage/belt/bandolier, - /obj/item/storage/belt/bandolier) - crate_name = "combat shotguns crate" - -/datum/supply_pack/security/armory/dragnet - name = "DRAGnet Crate" - desc = "" - cost = 1500 - contains = list(/obj/item/gun/energy/e_gun/dragnet, - /obj/item/gun/energy/e_gun/dragnet, - /obj/item/gun/energy/e_gun/dragnet) - crate_name = "\improper DRAGnet crate" - -/datum/supply_pack/security/armory/energy_single - name = "Energy Guns Single-Pack" - desc = "" - cost = 1500 - small_item = TRUE - contains = list(/obj/item/gun/energy/e_gun) - -/datum/supply_pack/security/armory/energy - name = "Energy Guns Crate" - desc = "" - cost = 2500 - contains = list(/obj/item/gun/energy/e_gun, - /obj/item/gun/energy/e_gun) - crate_name = "energy gun crate" - crate_type = /obj/structure/closet/crate/secure/plasma - -/datum/supply_pack/security/armory/exileimp - name = "Exile Implants Crate" - desc = "" - cost = 3000 - contains = list(/obj/item/storage/box/exileimp) - crate_name = "exile implant crate" - -/datum/supply_pack/security/armory/fire - name = "Incendiary Weapons Crate" - desc = "" - cost = 1500 - access = ACCESS_HEADS - contains = list(/obj/item/flamethrower/full, - /obj/item/tank/internals/plasma, - /obj/item/tank/internals/plasma, - /obj/item/tank/internals/plasma, - /obj/item/grenade/chem_grenade/incendiary, - /obj/item/grenade/chem_grenade/incendiary, - /obj/item/grenade/chem_grenade/incendiary) - crate_name = "incendiary weapons crate" - crate_type = /obj/structure/closet/crate/secure/plasma - dangerous = TRUE - -/datum/supply_pack/security/armory/mindshield - name = "Mindshield Implants Crate" - desc = "" - cost = 4000 - contains = list(/obj/item/storage/lockbox/loyalty) - crate_name = "mindshield implant crate" - -/datum/supply_pack/security/armory/trackingimp - name = "Tracking Implants Crate" - desc = "" - cost = 2000 - contains = list(/obj/item/storage/box/trackimp, - /obj/item/ammo_box/c38/trac, - /obj/item/ammo_box/c38/trac, - /obj/item/ammo_box/c38/trac) - crate_name = "tracking implant crate" - -/datum/supply_pack/security/armory/laserarmor - name = "Reflector Vest Crate" - desc = "" - cost = 2000 - contains = list(/obj/item/clothing/suit/armor/laserproof, - /obj/item/clothing/suit/armor/laserproof) - crate_name = "reflector vest crate" - crate_type = /obj/structure/closet/crate/secure/plasma - -/datum/supply_pack/security/armory/riotarmor - name = "Riot Armor Crate" - desc = "" - cost = 1500 - contains = list(/obj/item/clothing/suit/armor/riot, - /obj/item/clothing/suit/armor/riot, - /obj/item/clothing/suit/armor/riot) - crate_name = "riot armor crate" - -/datum/supply_pack/security/armory/riothelmets - name = "Riot Helmets Crate" - desc = "" - cost = 1500 - contains = list(/obj/item/clothing/head/helmet/riot, - /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/head/helmet/riot) - crate_name = "riot helmets crate" - -/datum/supply_pack/security/armory/riotshields - name = "Riot Shields Crate" - desc = "" - cost = 2000 - contains = list(/obj/item/shield/riot, - /obj/item/shield/riot, - /obj/item/shield/riot) - crate_name = "riot shields crate" - -/datum/supply_pack/security/armory/russian - name = "Russian Surplus Crate" - desc = "" - cost = 5000 - contraband = TRUE - contains = list(/obj/item/reagent_containers/food/snacks/rationpack, - /obj/item/ammo_box/a762, - /obj/item/storage/toolbox/ammo, - /obj/item/clothing/suit/armor/vest/russian, - /obj/item/clothing/head/helmet/rus_helmet, - /obj/item/clothing/shoes/russian, - /obj/item/clothing/gloves/combat, - /obj/item/clothing/under/syndicate/rus_army, - /obj/item/clothing/under/costume/soviet, - /obj/item/clothing/mask/russian_balaclava, - /obj/item/clothing/head/helmet/rus_ushanka, - /obj/item/clothing/suit/armor/vest/russian_coat, - /obj/item/gun/ballistic/rifle/boltaction, - /obj/item/gun/ballistic/rifle/boltaction) - crate_name = "surplus military crate" - -/datum/supply_pack/security/armory/russian/fill(obj/structure/closet/crate/C) - for(var/i in 1 to 10) - var/item = pick(contains) - new item(C) - -/datum/supply_pack/security/armory/swat - name = "SWAT Crate" - desc = "" - cost = 6000 - contains = list(/obj/item/clothing/head/helmet/swat/nanotrasen, - /obj/item/clothing/head/helmet/swat/nanotrasen, - /obj/item/clothing/suit/space/swat, - /obj/item/clothing/suit/space/swat, - /obj/item/clothing/mask/gas/sechailer/swat, - /obj/item/clothing/mask/gas/sechailer/swat, - /obj/item/storage/belt/military/assault, - /obj/item/storage/belt/military/assault, - /obj/item/clothing/gloves/combat, - /obj/item/clothing/gloves/combat) - crate_name = "swat crate" - -/datum/supply_pack/security/armory/wt550_single - name = "WT-550 Auto Rifle Single-Pack" - desc = "" - cost = 2000 - contains = list(/obj/item/gun/ballistic/automatic/wt550) - small_item = TRUE - -/datum/supply_pack/security/armory/wt550 - name = "WT-550 Auto Rifle Crate" - desc = "" - cost = 3500 - contains = list(/obj/item/gun/ballistic/automatic/wt550, - /obj/item/gun/ballistic/automatic/wt550) - crate_name = "auto rifle crate" - -/datum/supply_pack/security/armory/wt550ammo - name = "WT-550 Auto Rifle Ammo Crate" - desc = "" - cost = 3000 - contains = list(/obj/item/ammo_box/magazine/wt550m9, - /obj/item/ammo_box/magazine/wt550m9, - /obj/item/ammo_box/magazine/wt550m9, - /obj/item/ammo_box/magazine/wt550m9) - -/datum/supply_pack/security/armory/wt550ammo_single - name = "WT-550 Auto Rifle Ammo Single-Pack" - desc = "" - cost = 750 //one of the few single-pack items that who's price per unit is the exact same as the bulk - contains = list(/obj/item/ammo_box/magazine/wt550m9) - small_item = TRUE - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Engineering ///////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/engineering - group = "Engineering" - crate_type = /obj/structure/closet/crate/engineering - -/datum/supply_pack/engineering/shieldgen - name = "Anti-breach Shield Projector Crate" - desc = "" - cost = 2500 - contains = list(/obj/machinery/shieldgen, - /obj/machinery/shieldgen) - crate_name = "anti-breach shield projector crate" - -/datum/supply_pack/engineering/ripley - name = "APLU MK-I Crate" - desc = "" - cost = 2000 - contains = list(/obj/item/mecha_parts/chassis/ripley, - /obj/item/mecha_parts/part/ripley_torso, - /obj/item/mecha_parts/part/ripley_right_arm, - /obj/item/mecha_parts/part/ripley_left_arm, - /obj/item/mecha_parts/part/ripley_right_leg, - /obj/item/mecha_parts/part/ripley_left_leg, - /obj/item/stock_parts/capacitor, - /obj/item/stock_parts/scanning_module, - /obj/item/circuitboard/mecha/ripley/main, - /obj/item/circuitboard/mecha/ripley/peripherals, - /obj/item/mecha_parts/mecha_equipment/drill, - /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) - crate_name= "APLU MK-I kit" - -/datum/supply_pack/engineering/conveyor - name = "Conveyor Assembly Crate" - desc = "" - cost = 1500 - contains = list(/obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_switch_construct, - /obj/item/paper/guides/conveyor) - crate_name = "conveyor assembly crate" - -/datum/supply_pack/engineering/engiequipment - name = "Engineering Gear Crate" - desc = "" - cost = 1300 - contains = list(/obj/item/storage/belt/utility, - /obj/item/storage/belt/utility, - /obj/item/storage/belt/utility, - /obj/item/clothing/suit/hazardvest, - /obj/item/clothing/suit/hazardvest, - /obj/item/clothing/suit/hazardvest, - /obj/item/clothing/head/welding, - /obj/item/clothing/head/welding, - /obj/item/clothing/head/welding, - /obj/item/clothing/head/hardhat, - /obj/item/clothing/head/hardhat, - /obj/item/clothing/head/hardhat, - /obj/item/clothing/glasses/meson/engine, - /obj/item/clothing/glasses/meson/engine) - crate_name = "engineering gear crate" - -/datum/supply_pack/engineering/sologamermitts - name = "Insulated Gloves Single-Pack" - desc = "" - cost = 800 - small_item = TRUE - contains = list(/obj/item/clothing/gloves/color/yellow) - -/datum/supply_pack/engineering/powergamermitts - name = "Insulated Gloves Crate" - desc = "" - cost = 2000 //Made of pure-grade bullshittinium - contains = list(/obj/item/clothing/gloves/color/yellow, - /obj/item/clothing/gloves/color/yellow, - /obj/item/clothing/gloves/color/yellow) - crate_name = "insulated gloves crate" - crate_type = /obj/structure/closet/crate/engineering/electrical - -/obj/item/stock_parts/cell/inducer_supply - maxcharge = 5000 - charge = 5000 - -/datum/supply_pack/engineering/inducers - name = "NT-75 Electromagnetic Power Inducers Crate" - desc = "" - cost = 2000 - contains = list(/obj/item/inducer/sci {cell_type = /obj/item/stock_parts/cell/inducer_supply; opened = 0}, /obj/item/inducer/sci {cell_type = /obj/item/stock_parts/cell/inducer_supply; opened = 0}) //FALSE doesn't work in modified type paths apparently. - crate_name = "inducer crate" - crate_type = /obj/structure/closet/crate/engineering/electrical - -/datum/supply_pack/engineering/pacman - name = "P.A.C.M.A.N Generator Crate" - desc = "" - cost = 2500 - contains = list(/obj/machinery/power/port_gen/pacman) - crate_name = "PACMAN generator crate" - crate_type = /obj/structure/closet/crate/engineering/electrical - -/datum/supply_pack/engineering/power - name = "Power Cell Crate" - desc = "" - cost = 1000 - contains = list(/obj/item/stock_parts/cell/high, - /obj/item/stock_parts/cell/high, - /obj/item/stock_parts/cell/high) - crate_name = "power cell crate" - crate_type = /obj/structure/closet/crate/engineering/electrical - -/datum/supply_pack/engineering/shuttle_engine - name = "Shuttle Engine Crate" - desc = "" - cost = 5000 - access = ACCESS_CE - contains = list(/obj/structure/shuttle/engine/propulsion/burst/cargo) - crate_name = "shuttle engine crate" - crate_type = /obj/structure/closet/crate/secure/engineering - special = TRUE - -/datum/supply_pack/engineering/tools - name = "Toolbox Crate" - desc = "" - contains = list(/obj/item/storage/toolbox/electrical, - /obj/item/storage/toolbox/electrical, - /obj/item/storage/toolbox/electrical, - /obj/item/storage/toolbox/mechanical, - /obj/item/storage/toolbox/mechanical, - /obj/item/storage/toolbox/mechanical) - cost = 1000 - crate_name = "toolbox crate" - -/datum/supply_pack/service/vending/engivend - name = "EngiVend Supply Crate" - desc = "" - cost = 1500 - contains = list(/obj/item/vending_refill/engivend) - crate_name = "engineering supply crate" - -/datum/supply_pack/engineering/portapump - name = "Portable Air Pump Crate" - desc = "" - cost = 2500 - contains = list(/obj/machinery/portable_atmospherics/pump, - /obj/machinery/portable_atmospherics/pump) - crate_name = "portable air pump crate" - -/datum/supply_pack/engineering/portascrubber - name = "Portable Scrubber Crate" - desc = "" - cost = 2500 - contains = list(/obj/machinery/portable_atmospherics/scrubber, - /obj/machinery/portable_atmospherics/scrubber) - crate_name = "portable scrubber crate" - -/datum/supply_pack/engineering/hugescrubber - name = "Huge Portable Scrubber Crate" - desc = "" - cost = 5000 - contains = list(/obj/machinery/portable_atmospherics/scrubber/huge/movable/cargo) - crate_name = "huge portable scrubber crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/engineering/bsa - name = "Bluespace Artillery Parts" - desc = "" - cost = 15000 - special = TRUE - contains = list(/obj/item/circuitboard/machine/bsa/front, - /obj/item/circuitboard/machine/bsa/middle, - /obj/item/circuitboard/machine/bsa/back, - /obj/item/circuitboard/computer/bsa_control - ) - crate_name= "bluespace artillery parts crate" - -/datum/supply_pack/engineering/dna_vault - name = "DNA Vault Parts" - desc = "" - cost = 12000 - special = TRUE - contains = list( - /obj/item/circuitboard/machine/dna_vault, - /obj/item/dna_probe, - /obj/item/dna_probe, - /obj/item/dna_probe, - /obj/item/dna_probe, - /obj/item/dna_probe - ) - crate_name= "dna vault parts crate" - -/datum/supply_pack/engineering/dna_probes - name = "DNA Vault Samplers" - desc = "" - cost = 3000 - special = TRUE - contains = list(/obj/item/dna_probe, - /obj/item/dna_probe, - /obj/item/dna_probe, - /obj/item/dna_probe, - /obj/item/dna_probe - ) - crate_name= "dna samplers crate" - - -/datum/supply_pack/engineering/shield_sat - name = "Shield Generator Satellite" - desc = "" - cost = 3000 - special = TRUE - contains = list( - /obj/machinery/satellite/meteor_shield, - /obj/machinery/satellite/meteor_shield, - /obj/machinery/satellite/meteor_shield - ) - crate_name= "shield sat crate" - - -/datum/supply_pack/engineering/shield_sat_control - name = "Shield System Control Board" - desc = "" - cost = 5000 - special = TRUE - contains = list(/obj/item/circuitboard/computer/sat_control) - crate_name= "shield control board crate" - - -////////////////////////////////////////////////////////////////////////////// -//////////////////////// Engine Construction ///////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/engine - group = "Engine Construction" - crate_type = /obj/structure/closet/crate/engineering - -/datum/supply_pack/engine/emitter - name = "Emitter Crate" - desc = "" - cost = 1500 - access = ACCESS_CE - contains = list(/obj/machinery/power/emitter, - /obj/machinery/power/emitter) - crate_name = "emitter crate" - crate_type = /obj/structure/closet/crate/secure/engineering - dangerous = TRUE - -/datum/supply_pack/engine/field_gen - name = "Field Generator Crate" - desc = "" - cost = 1500 - contains = list(/obj/machinery/field/generator, - /obj/machinery/field/generator) - crate_name = "field generator crate" - -/datum/supply_pack/engine/grounding_rods - name = "Grounding Rod Crate" - desc = "" - cost = 1700 - contains = list(/obj/machinery/power/grounding_rod, - /obj/machinery/power/grounding_rod, - /obj/machinery/power/grounding_rod, - /obj/machinery/power/grounding_rod) - crate_name = "grounding rod crate" - crate_type = /obj/structure/closet/crate/engineering/electrical - -/datum/supply_pack/engine/PA - name = "Particle Accelerator Crate" - desc = "" - cost = 3000 - contains = list(/obj/structure/particle_accelerator/fuel_chamber, - /obj/machinery/particle_accelerator/control_box, - /obj/structure/particle_accelerator/particle_emitter/center, - /obj/structure/particle_accelerator/particle_emitter/left, - /obj/structure/particle_accelerator/particle_emitter/right, - /obj/structure/particle_accelerator/power_box, - /obj/structure/particle_accelerator/end_cap) - crate_name = "particle accelerator crate" - -/datum/supply_pack/engine/collector - name = "Radiation Collector Crate" - desc = "" - cost = 2500 - contains = list(/obj/machinery/power/rad_collector, - /obj/machinery/power/rad_collector, - /obj/machinery/power/rad_collector) - crate_name = "collector crate" - -/datum/supply_pack/engine/sing_gen - name = "Singularity Generator Crate" - desc = "" - cost = 5000 - contains = list(/obj/machinery/the_singularitygen) - crate_name = "singularity generator crate" - -/datum/supply_pack/engine/solar - name = "Solar Panel Crate" - desc = "" - cost = 2000 - contains = list(/obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/circuitboard/computer/solar_control, - /obj/item/electronics/tracker, - /obj/item/paper/guides/jobs/engi/solars) - crate_name = "solar panel crate" - crate_type = /obj/structure/closet/crate/engineering/electrical - -/datum/supply_pack/engine/supermatter_shard - name = "Supermatter Shard Crate" - desc = "" - cost = 10000 - access = ACCESS_CE - contains = list(/obj/machinery/power/supermatter_crystal/shard) - crate_name = "supermatter shard crate" - crate_type = /obj/structure/closet/crate/secure/engineering - dangerous = TRUE - -/datum/supply_pack/engine/tesla_coils - name = "Tesla Coil Crate" - desc = "" - cost = 2500 - contains = list(/obj/machinery/power/tesla_coil, - /obj/machinery/power/tesla_coil, - /obj/machinery/power/tesla_coil, - /obj/machinery/power/tesla_coil) - crate_name = "tesla coil crate" - crate_type = /obj/structure/closet/crate/engineering/electrical - -/datum/supply_pack/engine/tesla_gen - name = "Tesla Generator Crate" - desc = "" - cost = 5000 - contains = list(/obj/machinery/the_singularitygen/tesla) - crate_name = "tesla generator crate" - -////////////////////////////////////////////////////////////////////////////// -/////////////////////// Canisters & Materials //////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/materials - group = "Canisters & Materials" - -/datum/supply_pack/materials/cardboard50 - name = "50 Cardboard Sheets" - desc = "" - cost = 1000 - contains = list(/obj/item/stack/sheet/cardboard/fifty) - crate_name = "cardboard sheets crate" - -/datum/supply_pack/materials/glass50 - name = "50 Glass Sheets" - desc = "" - cost = 1000 - contains = list(/obj/item/stack/sheet/glass/fifty) - crate_name = "glass sheets crate" - -/datum/supply_pack/materials/metal50 - name = "50 Metal Sheets" - desc = "" - cost = 1000 - contains = list(/obj/item/stack/sheet/metal/fifty) - crate_name = "metal sheets crate" - -/datum/supply_pack/materials/plasteel20 - name = "20 Plasteel Sheets" - desc = "" - cost = 7500 - contains = list(/obj/item/stack/sheet/plasteel/twenty) - crate_name = "plasteel sheets crate" - -/datum/supply_pack/materials/plasteel50 - name = "50 Plasteel Sheets" - desc = "" - cost = 16500 - contains = list(/obj/item/stack/sheet/plasteel/fifty) - crate_name = "plasteel sheets crate" - -/datum/supply_pack/materials/plastic50 - name = "50 Plastic Sheets" - desc = "" - cost = 1000 - contains = list(/obj/item/stack/sheet/plastic/fifty) - crate_name = "plastic sheets crate" - -/datum/supply_pack/materials/sandstone30 - name = "30 Sandstone Blocks" - desc = "" - cost = 1000 - contains = list(/obj/item/stack/sheet/mineral/sandstone/thirty) - crate_name = "sandstone blocks crate" - -/datum/supply_pack/materials/wood50 - name = "50 Wood Planks" - desc = "" - cost = 2000 - contains = list(/obj/item/stack/sheet/mineral/wood/fifty) - crate_name = "wood planks crate" - -/datum/supply_pack/materials/bz - name = "BZ Canister Crate" - desc = "" - cost = 8000 - access = ACCESS_TOX_STORAGE - contains = list(/obj/machinery/portable_atmospherics/canister/bz) - crate_name = "BZ canister crate" - crate_type = /obj/structure/closet/crate/secure/science - -/datum/supply_pack/materials/carbon_dio - name = "Carbon Dioxide Canister" - desc = "" - cost = 3000 - contains = list(/obj/machinery/portable_atmospherics/canister/carbon_dioxide) - crate_name = "carbon dioxide canister crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/materials/foamtank - name = "Firefighting Foam Tank Crate" - desc = "" - cost = 1500 - contains = list(/obj/structure/reagent_dispensers/foamtank) - crate_name = "foam tank crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/materials/fueltank - name = "Fuel Tank Crate" - desc = "" - cost = 800 - contains = list(/obj/structure/reagent_dispensers/fueltank) - crate_name = "fuel tank crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/materials/hightank - name = "Large Water Tank Crate" - desc = "" - cost = 1200 - contains = list(/obj/structure/reagent_dispensers/watertank/high) - crate_name = "high-capacity water tank crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/materials/nitrogen - name = "Nitrogen Canister" - desc = "" - cost = 2000 - contains = list(/obj/machinery/portable_atmospherics/canister/nitrogen) - crate_name = "nitrogen canister crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/materials/nitrous_oxide_canister - name = "Nitrous Oxide Canister" - desc = "" - cost = 3000 - access = ACCESS_ATMOSPHERICS - contains = list(/obj/machinery/portable_atmospherics/canister/nitrous_oxide) - crate_name = "nitrous oxide canister crate" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/materials/oxygen - name = "Oxygen Canister" - desc = "" - cost = 1500 - contains = list(/obj/machinery/portable_atmospherics/canister/oxygen) - crate_name = "oxygen canister crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/materials/watertank - name = "Water Tank Crate" - desc = "" - cost = 600 - contains = list(/obj/structure/reagent_dispensers/watertank) - crate_name = "water tank crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/materials/water_vapor - name = "Water Vapor Canister" - desc = "" - cost = 2500 - contains = list(/obj/machinery/portable_atmospherics/canister/water_vapor) - crate_name = "water vapor canister crate" - crate_type = /obj/structure/closet/crate/large - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Medical ///////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/medical - group = "Medical" - crate_type = /obj/structure/closet/crate/medical - -/datum/supply_pack/medical/bloodpacks - name = "Blood Pack Variety Crate" - desc = "" - cost = 3500 - contains = list(/obj/item/reagent_containers/blood, - /obj/item/reagent_containers/blood, - /obj/item/reagent_containers/blood/APlus, - /obj/item/reagent_containers/blood/AMinus, - /obj/item/reagent_containers/blood/BPlus, - /obj/item/reagent_containers/blood/BMinus, - /obj/item/reagent_containers/blood/OPlus, - /obj/item/reagent_containers/blood/OMinus, - /obj/item/reagent_containers/blood/lizard, - /obj/item/reagent_containers/blood/ethereal) - crate_name = "blood freezer" - crate_type = /obj/structure/closet/crate/freezer - -/datum/supply_pack/medical/firstaidbruises_single - name = "Bruise Treatment Kit Single-Pack" - desc = "" - cost = 330 - small_item = TRUE - contains = list(/obj/item/storage/firstaid/brute) - -/datum/supply_pack/medical/firstaidburns_single - name = "Burn Treatment Kit Single-Pack" - desc = "" - cost = 330 - small_item = TRUE - contains = list(/obj/item/storage/firstaid/fire) - -/datum/supply_pack/medical/chemical - name = "Chemical Starter Kit Crate" - desc = "" - cost = 1700 - contains = list(/obj/item/reagent_containers/glass/bottle/hydrogen, - /obj/item/reagent_containers/glass/bottle/carbon, - /obj/item/reagent_containers/glass/bottle/nitrogen, - /obj/item/reagent_containers/glass/bottle/oxygen, - /obj/item/reagent_containers/glass/bottle/fluorine, - /obj/item/reagent_containers/glass/bottle/phosphorus, - /obj/item/reagent_containers/glass/bottle/silicon, - /obj/item/reagent_containers/glass/bottle/chlorine, - /obj/item/reagent_containers/glass/bottle/radium, - /obj/item/reagent_containers/glass/bottle/sacid, - /obj/item/reagent_containers/glass/bottle/ethanol, - /obj/item/reagent_containers/glass/bottle/potassium, - /obj/item/reagent_containers/glass/bottle/sugar, - /obj/item/clothing/glasses/science, - /obj/item/reagent_containers/dropper, - /obj/item/storage/box/beakers) - crate_name = "chemical crate" - -/datum/supply_pack/medical/defibs - name = "Defibrillator Crate" - desc = "" - cost = 2500 - contains = list(/obj/item/defibrillator/loaded, - /obj/item/defibrillator/loaded) - crate_name = "defibrillator crate" - - -/datum/supply_pack/medical/firstaid_single - name = "First Aid Kit Single-Pack" - desc = "" - cost = 250 - small_item = TRUE - contains = list(/obj/item/storage/firstaid/regular) - -/datum/supply_pack/medical/iv_drip - name = "IV Drip Crate" - desc = "" - cost = 1000 - contains = list(/obj/machinery/iv_drip) - crate_name = "iv drip crate" - -/datum/supply_pack/medical/supplies - name = "Medical Supplies Crate" - desc = "" - cost = 2000 - contains = list(/obj/item/reagent_containers/glass/bottle/multiver, - /obj/item/reagent_containers/glass/bottle/epinephrine, - /obj/item/reagent_containers/glass/bottle/morphine, - /obj/item/reagent_containers/glass/bottle/toxin, - /obj/item/reagent_containers/glass/beaker/large, - /obj/item/reagent_containers/pill/insulin, - /obj/item/stack/medical/gauze, - /obj/item/storage/box/beakers, - /obj/item/storage/box/medigels, - /obj/item/storage/box/syringes, - /obj/item/storage/box/bodybags, - /obj/item/storage/firstaid/regular, - /obj/item/storage/firstaid/o2, - /obj/item/storage/firstaid/toxin, - /obj/item/storage/firstaid/brute, - /obj/item/storage/firstaid/fire, - /obj/item/defibrillator/loaded, - /obj/item/reagent_containers/blood/OMinus, - /obj/item/storage/pill_bottle/mining, - /obj/item/reagent_containers/pill/neurine, - /obj/item/vending_refill/medical) - crate_name = "medical supplies crate" - -/datum/supply_pack/medical/supplies/fill(obj/structure/closet/crate/C) - for(var/i in 1 to 10) - var/item = pick(contains) - new item(C) - -/datum/supply_pack/medical/firstaidoxygen_single - name = "Oxygen Deprivation Kit Single-Pack" - desc = "" - cost = 330 - small_item = TRUE - contains = list(/obj/item/storage/firstaid/o2) - -/datum/supply_pack/medical/surgery - name = "Surgical Supplies Crate" - desc = "" - cost = 3000 - contains = list(/obj/item/storage/backpack/duffelbag/med/surgery, - /obj/item/reagent_containers/medigel/sterilizine, - /obj/item/roller) - crate_name = "surgical supplies crate" - -/datum/supply_pack/medical/firstaidtoxins_single - name = "Toxin Treatment Kit Single-Pack" - desc = "" - cost = 330 - small_item = TRUE - contains = list(/obj/item/storage/firstaid/toxin) - -/datum/supply_pack/medical/salglucanister - name = "Heavy-Duty Saline Canister" - desc = "" - cost = 3000 - access = ACCESS_MEDICAL - contains = list(/obj/machinery/iv_drip/saline) - -/datum/supply_pack/medical/virus - name = "Virus Crate" - desc = "" - cost = 2500 - access = ACCESS_CMO - contains = list(/obj/item/reagent_containers/glass/bottle/flu_virion, - /obj/item/reagent_containers/glass/bottle/cold, - /obj/item/reagent_containers/glass/bottle/random_virus, - /obj/item/reagent_containers/glass/bottle/random_virus, - /obj/item/reagent_containers/glass/bottle/random_virus, - /obj/item/reagent_containers/glass/bottle/random_virus, - /obj/item/reagent_containers/glass/bottle/fake_gbs, - /obj/item/reagent_containers/glass/bottle/magnitis, - /obj/item/reagent_containers/glass/bottle/pierrot_throat, - /obj/item/reagent_containers/glass/bottle/brainrot, - /obj/item/reagent_containers/glass/bottle/anxiety, - /obj/item/reagent_containers/glass/bottle/beesease, - /obj/item/storage/box/syringes, - /obj/item/storage/box/beakers, - /obj/item/reagent_containers/glass/bottle/mutagen) - crate_name = "virus crate" - crate_type = /obj/structure/closet/crate/secure/plasma - dangerous = TRUE - -/datum/supply_pack/medical/vending - name = "Medical Vending Crate" - desc = "" - cost = 2000 - contains = list(/obj/item/vending_refill/medical, - /obj/item/vending_refill/wallmed) - crate_name = "medical vending crate" - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Science ///////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/science - group = "Science" - crate_type = /obj/structure/closet/crate/science - -/datum/supply_pack/science/plasma - name = "Plasma Assembly Crate" - desc = "" - cost = 1000 - access = ACCESS_TOX_STORAGE - contains = list(/obj/item/tank/internals/plasma, - /obj/item/tank/internals/plasma, - /obj/item/tank/internals/plasma, - /obj/item/assembly/igniter, - /obj/item/assembly/igniter, - /obj/item/assembly/igniter, - /obj/item/assembly/prox_sensor, - /obj/item/assembly/prox_sensor, - /obj/item/assembly/prox_sensor, - /obj/item/assembly/timer, - /obj/item/assembly/timer, - /obj/item/assembly/timer) - crate_name = "plasma assembly crate" - crate_type = /obj/structure/closet/crate/secure/plasma - -/datum/supply_pack/science/robotics - name = "Robotics Assembly Crate" - desc = "" - cost = 1500 - access = ACCESS_ROBOTICS - contains = list(/obj/item/assembly/prox_sensor, - /obj/item/assembly/prox_sensor, - /obj/item/assembly/prox_sensor, - /obj/item/assembly/prox_sensor, - /obj/item/storage/firstaid, - /obj/item/storage/firstaid, - /obj/item/healthanalyzer, - /obj/item/healthanalyzer, - /obj/item/clothing/head/hardhat/red, - /obj/item/clothing/head/hardhat/red, - /obj/item/storage/toolbox/mechanical, - /obj/item/storage/toolbox/mechanical, - /obj/item/bot_assembly/cleanbot, - /obj/item/bot_assembly/cleanbot) - crate_name = "robotics assembly crate" - crate_type = /obj/structure/closet/crate/secure/science - -/datum/supply_pack/science/rped - name = "RPED crate" - desc = "" - cost = 1500 - contains = list(/obj/item/storage/part_replacer/cargo) - crate_name = "\improper RPED crate" - -/datum/supply_pack/science/shieldwalls - name = "Shield Generator Crate" - desc = "" - cost = 2000 - access = ACCESS_TELEPORTER - contains = list(/obj/machinery/power/shieldwallgen, - /obj/machinery/power/shieldwallgen, - /obj/machinery/power/shieldwallgen, - /obj/machinery/power/shieldwallgen) - crate_name = "shield generators crate" - crate_type = /obj/structure/closet/crate/secure/science - -/datum/supply_pack/science/modularpc - name = "Deluxe Silicate Selections restocking unit" - desc = "" - cost = 1500 - contains = list(/obj/item/vending_refill/modularpc) - crate_name = "computer supply crate" - -/datum/supply_pack/science/transfer_valves - name = "Tank Transfer Valves Crate" - desc = "" - cost = 6000 - access = ACCESS_RD - contains = list(/obj/item/transfer_valve, - /obj/item/transfer_valve) - crate_name = "tank transfer valves crate" - crate_type = /obj/structure/closet/crate/secure/science - dangerous = TRUE - -////////////////////////////////////////////////////////////////////////////// -/////////////////////////////// Service ////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/service - group = "Service" - -/datum/supply_pack/service/cargo_supples - name = "Cargo Supplies Crate" - desc = "" - cost = 1000 - contains = list(/obj/item/stamp, - /obj/item/stamp/denied, - /obj/item/export_scanner, - /obj/item/destTagger, - /obj/item/hand_labeler, - /obj/item/stack/packageWrap) - crate_name = "cargo supplies crate" - -/datum/supply_pack/service/noslipfloor - name = "High-traction Floor Tiles" - desc = "" - cost = 2000 - contains = list(/obj/item/stack/tile/noslip/thirty) - crate_name = "high-traction floor tiles crate" - -/datum/supply_pack/service/janitor - name = "Janitorial Supplies Crate" - desc = "" - cost = 1000 - contains = list(/obj/item/reagent_containers/glass/bucket, - /obj/item/reagent_containers/glass/bucket, - /obj/item/reagent_containers/glass/bucket, - /obj/item/mop, - /obj/item/clothing/suit/caution, - /obj/item/clothing/suit/caution, - /obj/item/clothing/suit/caution, - /obj/item/storage/bag/trash, - /obj/item/reagent_containers/spray/cleaner, - /obj/item/reagent_containers/glass/rag, - /obj/item/grenade/chem_grenade/cleaner, - /obj/item/grenade/chem_grenade/cleaner, - /obj/item/grenade/chem_grenade/cleaner) - crate_name = "janitorial supplies crate" - -/datum/supply_pack/service/janitor/janicart - name = "Janitorial Cart and Galoshes Crate" - desc = "" - cost = 2000 - contains = list(/obj/structure/janitorialcart, - /obj/item/clothing/shoes/galoshes) - crate_name = "janitorial cart crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/service/janitor/janitank - name = "Janitor Backpack Crate" - desc = "" - cost = 1000 - access = ACCESS_JANITOR - contains = list(/obj/item/watertank/janitor) - crate_name = "janitor backpack crate" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/service/mule - name = "MULEbot Crate" - desc = "" - cost = 2000 - contains = list(/mob/living/simple_animal/bot/mulebot) - crate_name = "\improper MULEbot Crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/service/party - name = "Party Equipment" - desc = "" - cost = 2000 - contains = list(/obj/item/storage/box/drinkingglasses, - /obj/item/flashlight/glowstick/pink) - crate_name = "party equipment crate" - -/datum/supply_pack/service/carpet - name = "Premium Carpet Crate" - desc = "" - cost = 1000 - contains = list(/obj/item/stack/tile/carpet/fifty, - /obj/item/stack/tile/carpet/fifty, - /obj/item/stack/tile/carpet/black/fifty, - /obj/item/stack/tile/carpet/black/fifty) - crate_name = "premium carpet crate" - -/datum/supply_pack/service/carpet_exotic - name = "Exotic Carpet Crate" - desc = "" - cost = 4000 - contains = list(/obj/item/stack/tile/carpet/blue/fifty, - /obj/item/stack/tile/carpet/blue/fifty, - /obj/item/stack/tile/carpet/cyan/fifty, - /obj/item/stack/tile/carpet/cyan/fifty, - /obj/item/stack/tile/carpet/green/fifty, - /obj/item/stack/tile/carpet/green/fifty, - /obj/item/stack/tile/carpet/orange/fifty, - /obj/item/stack/tile/carpet/orange/fifty, - /obj/item/stack/tile/carpet/purple/fifty, - /obj/item/stack/tile/carpet/purple/fifty, - /obj/item/stack/tile/carpet/red/fifty, - /obj/item/stack/tile/carpet/red/fifty, - /obj/item/stack/tile/carpet/royalblue/fifty, - /obj/item/stack/tile/carpet/royalblue/fifty, - /obj/item/stack/tile/carpet/royalblack/fifty, - /obj/item/stack/tile/carpet/royalblack/fifty) - crate_name = "exotic carpet crate" - -/datum/supply_pack/service/lightbulbs - name = "Replacement Lights" - desc = "" - cost = 1000 - contains = list(/obj/item/storage/box/lights/mixed, - /obj/item/storage/box/lights/mixed, - /obj/item/storage/box/lights/mixed) - crate_name = "replacement lights" - -/datum/supply_pack/service/minerkit - name = "Shaft Miner Starter Kit" - desc = "" - cost = 2000 - access = ACCESS_QM - contains = list(/obj/item/storage/backpack/duffelbag/mining_conscript) - crate_name = "shaft miner starter kit" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/service/vending/bartending - name = "Booze-o-mat and Coffee Supply Crate" - desc = "" - cost = 2000 - contains = list(/obj/item/vending_refill/boozeomat, - /obj/item/vending_refill/coffee) - crate_name = "bartending supply crate" - -/datum/supply_pack/service/vending/cigarette - name = "Cigarette Supply Crate" - desc = "" - cost = 1500 - contains = list(/obj/item/vending_refill/cigarette) - crate_name = "cigarette supply crate" - crate_type = /obj/structure/closet/crate - -/datum/supply_pack/service/vending/dinnerware - name = "Dinnerware Supply Crate" - desc = "" - cost = 1000 - contains = list(/obj/item/vending_refill/dinnerware) - crate_name = "dinnerware supply crate" - -/datum/supply_pack/service/vending/games - name = "Games Supply Crate" - desc = "" - cost = 1000 - contains = list(/obj/item/vending_refill/games) - crate_name = "games supply crate" - crate_type = /obj/structure/closet/crate - -/datum/supply_pack/service/vending/imported - name = "Imported Vending Machines" - desc = "" - cost = 4000 - contains = list(/obj/item/vending_refill/sustenance, - /obj/item/vending_refill/robotics, - /obj/item/vending_refill/sovietsoda, - /obj/item/vending_refill/engineering) - crate_name = "unlabeled supply crate" - -/datum/supply_pack/service/vending/ptech - name = "PTech Supply Crate" - desc = "" - cost = 1500 - contains = list(/obj/item/vending_refill/cart) - crate_name = "ptech supply crate" - -/datum/supply_pack/service/vending/snack - name = "Snack Supply Crate" - desc = "" - cost = 1500 - contains = list(/obj/item/vending_refill/snack) - crate_name = "snacks supply crate" - -/datum/supply_pack/service/vending/cola - name = "Softdrinks Supply Crate" - desc = "" - cost = 1500 - contains = list(/obj/item/vending_refill/cola) - crate_name = "soft drinks supply crate" - -/datum/supply_pack/service/vending/vendomat - name = "Vendomat Supply Crate" - desc = "" - cost = 1000 - contains = list(/obj/item/vending_refill/assist) - crate_name = "vendomat supply crate" - -/datum/supply_pack/service/emptycrate - name = "Empty Crate" - desc = "" - cost = 700 - contains = list() - crate_name = "crate" - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Organic ///////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/organic - group = "Food & Hydroponics" - crate_type = /obj/structure/closet/crate/freezer - -/datum/supply_pack/organic/hydroponics/beekeeping_suits - name = "Beekeeper Suit Crate" - desc = "" - cost = 1000 - contains = list(/obj/item/clothing/head/beekeeper_head, - /obj/item/clothing/suit/beekeeper_suit, - /obj/item/clothing/head/beekeeper_head, - /obj/item/clothing/suit/beekeeper_suit) - crate_name = "beekeeper suits" - crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/organic/hydroponics/beekeeping_fullkit - name = "Beekeeping Starter Crate" - desc = "" - cost = 1500 - contains = list(/obj/structure/beebox/unwrenched, - /obj/item/honey_frame, - /obj/item/honey_frame, - /obj/item/honey_frame, - /obj/item/queen_bee/bought, - /obj/item/clothing/head/beekeeper_head, - /obj/item/clothing/suit/beekeeper_suit, - /obj/item/melee/flyswatter) - crate_name = "beekeeping starter crate" - crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/organic/randomized/chef - name = "Excellent Meat Crate" - desc = "" - cost = 2000 - - crate_name = "food crate" - -/datum/supply_pack/organic/randomized/chef/fill(obj/structure/closet/crate/C) - for(var/i in 1 to 15) - var/item = pick(contains) - new item(C) - -/datum/supply_pack/organic/exoticseeds - name = "Exotic Seeds Crate" - desc = "" - cost = 1500 - - crate_name = "exotic seeds crate" - crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/organic/food - name = "Food Crate" - desc = "" - cost = 1000 - crate_name = "food crate" - -/datum/supply_pack/organic/randomized/chef/fruits - name = "Fruit Crate" - desc = "" - cost = 1500 - crate_name = "food crate" - -/datum/supply_pack/organic/cream_piee - name = "High-yield Clown-grade Cream Pie Crate" - desc = "" - cost = 6000 - contains = list(/obj/item/storage/backpack/duffelbag/clown/cream_pie) - crate_name = "party equipment crate" - contraband = TRUE - access = ACCESS_THEATRE - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/organic/hydroponics - name = "Hydroponics Crate" - desc = "" - cost = 1500 - crate_name = "hydroponics crate" - crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/organic/hydroponics/hydrotank - name = "Hydroponics Backpack Crate" - desc = "" - cost = 1000 - access = ACCESS_HYDROPONICS - contains = list(/obj/item/watertank) - crate_name = "hydroponics backpack crate" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/organic/pizza - name = "Pizza Crate" - desc = "" - cost = 6000 // Best prices this side of the galaxy. - - crate_name = "pizza crate" - var/static/anomalous_box_provided = FALSE - -/datum/supply_pack/organic/pizza/fill(obj/structure/closet/crate/C) - . = ..() - if(!anomalous_box_provided) - for(var/obj/item/pizzabox/P in C) - if(prob(1)) //1% chance for each box, so 4% total chance per order - var/obj/item/pizzabox/infinite/fourfiveeight = new(C) - fourfiveeight.boxtag = P.boxtag - qdel(P) - anomalous_box_provided = TRUE - log_game("An anomalous pizza box was provided in a pizza crate at during cargo delivery") - if(prob(50)) - addtimer(CALLBACK(src, PROC_REF(anomalous_pizza_report)), rand(300, 1800)) - else - message_admins("An anomalous pizza box was silently created with no command report in a pizza crate delivery.") - break - -/datum/supply_pack/organic/pizza/proc/anomalous_pizza_report() - print_command_report("[station_name()], our anomalous materials divison has reported a missing object that is highly likely to have been sent to your station during a routine cargo \ - delivery. Please search all crates and manifests provided with the delivery and return the object if is located. The object resembles a standard \[DATA EXPUNGED\] and is to be \ - considered \[REDACTED\] and returned at your leisure. Note that objects the anomaly produces are specifically attuned exactly to the individual opening the anomaly; regardless \ - of species, the individual will find the object edible and it will taste great according to their personal definitions, which vary significantly based on person and species.") - -/datum/supply_pack/organic/potted_plants - name = "Potted Plants Crate" - desc = "" - cost = 700 - contains = list(/obj/item/twohanded/required/kirbyplants/random, - /obj/item/twohanded/required/kirbyplants/random, - /obj/item/twohanded/required/kirbyplants/random, - /obj/item/twohanded/required/kirbyplants/random, - /obj/item/twohanded/required/kirbyplants/random) - crate_name = "potted plants crate" - crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/organic/seeds - name = "Seeds Crate" - desc = "" - crate_name = "seeds crate" - crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/organic/randomized/chef/vegetables - name = "Vegetables Crate" - desc = "" - cost = 1300 - - crate_name = "food crate" - -/datum/supply_pack/organic/vending/hydro_refills - name = "Hydroponics Vending Machines Refills" - desc = "" - cost = 2000 - crate_type = /obj/structure/closet/crate - crate_name = "hydroponics supply crate" - -/datum/supply_pack/organic/grill - name = "Grilling Starter Kit" - desc = "" - cost = 5000 - crate_type = /obj/structure/closet/crate - contains = list(/obj/item/stack/sheet/mineral/coal/five, - /obj/machinery/grill/unwrenched, - /obj/item/reagent_containers/food/drinks/soda_cans/monkey_energy - ) - crate_name = "grilling starter kit crate" - -/datum/supply_pack/organic/grillfuel - name = "Grilling Fuel Kit" - desc = "" - cost = 2000 - crate_type = /obj/structure/closet/crate - contains = list(/obj/item/stack/sheet/mineral/coal/ten, - /obj/item/reagent_containers/food/drinks/soda_cans/monkey_energy - ) - crate_name = "grilling fuel kit crate" - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////// Livestock ///////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/critter - group = "Livestock" - crate_type = /obj/structure/closet/crate/critter - -/datum/supply_pack/critter/parrot - name = "Bird Crate" - desc = "" - cost = 4000 - contains = list(/mob/living/simple_animal/parrot) - crate_name = "parrot crate" - -/datum/supply_pack/critter/parrot/generate() - . = ..() - for(var/i in 1 to 4) - new /mob/living/simple_animal/parrot(.) - -/datum/supply_pack/critter/butterfly - name = "Butterflies Crate" - desc = ""//is that a motherfucking worm reference - contraband = TRUE - cost = 5000 - contains = list(/mob/living/simple_animal/butterfly) - crate_name = "entomology samples crate" - -/datum/supply_pack/critter/butterfly/generate() - . = ..() - for(var/i in 1 to 49) - new /mob/living/simple_animal/butterfly(.) - -/datum/supply_pack/critter/cat - name = "Cat Crate" - desc = ""//i can't believe im making this reference - cost = 5000 //Cats are worth as much as corgis. - contains = list(/mob/living/simple_animal/pet/cat, - /obj/item/clothing/neck/petcollar, - /obj/item/toy/cattoy) - crate_name = "cat crate" - -/datum/supply_pack/critter/cat/generate() - . = ..() - if(prob(50)) - var/mob/living/simple_animal/pet/cat/C = locate() in . - qdel(C) - new /mob/living/simple_animal/pet/cat/Proc(.) - -/datum/supply_pack/critter/chick - name = "Chicken Crate" - desc = "" - cost = 2000 - contains = list( /mob/living/simple_animal/chick) - crate_name = "chicken crate" - -/datum/supply_pack/critter/corgi - name = "Corgi Crate" - desc = "" - cost = 5000 - contains = list(/mob/living/simple_animal/pet/dog/corgi, - /obj/item/clothing/neck/petcollar) - crate_name = "corgi crate" - -/datum/supply_pack/critter/corgi/generate() - . = ..() - if(prob(50)) - var/mob/living/simple_animal/pet/dog/corgi/D = locate() in . - if(D.gender == FEMALE) - qdel(D) - new /mob/living/simple_animal/pet/dog/corgi/Lisa(.) - -/datum/supply_pack/critter/cow - name = "Cow Crate" - desc = "" - cost = 3000 - contains = list(/mob/living/simple_animal/cow) - crate_name = "cow crate" - -/datum/supply_pack/critter/crab - name = "Crab Rocket" - desc = ""//fun fact: i actually spent like 10 minutes and transcribed the entire video. - cost = 5000 - contains = list(/mob/living/simple_animal/crab) - crate_name = "look sir free crabs" - DropPodOnly = TRUE - -/datum/supply_pack/critter/crab/generate() - . = ..() - for(var/i in 1 to 49) - new /mob/living/simple_animal/crab(.) - -/datum/supply_pack/critter/corgis/exotic - name = "Exotic Corgi Crate" - desc = "" - cost = 5500 - contains = list(/mob/living/simple_animal/pet/dog/corgi/exoticcorgi, - /obj/item/clothing/neck/petcollar) - crate_name = "exotic corgi crate" - -/datum/supply_pack/critter/fox - name = "Fox Crate" - desc = ""//what does the fox say - cost = 5000 - contains = list(/mob/living/simple_animal/pet/fox, - /obj/item/clothing/neck/petcollar) - crate_name = "fox crate" - -/datum/supply_pack/critter/goat - name = "Goat Crate" - desc = "" - cost = 2500 - contains = list(/mob/living/simple_animal/hostile/retaliate/goat) - crate_name = "goat crate" - -/datum/supply_pack/critter/monkey - name = "Monkey Cube Crate" - desc = "" - cost = 2000 - contains = list (/obj/item/storage/box/monkeycubes) - crate_type = /obj/structure/closet/crate - crate_name = "monkey cube crate" - -/datum/supply_pack/critter/pug - name = "Pug Crate" - desc = "" - cost = 5000 - contains = list(/mob/living/simple_animal/pet/dog/pug, - /obj/item/clothing/neck/petcollar) - crate_name = "pug crate" - -/datum/supply_pack/critter/snake - name = "Snake Crate" - desc = "" - cost = 3000 - contains = list(/mob/living/simple_animal/hostile/retaliate/poison/snake, - /mob/living/simple_animal/hostile/retaliate/poison/snake, - /mob/living/simple_animal/hostile/retaliate/poison/snake) - crate_name = "snake crate" - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Costumes & Toys ///////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/costumes_toys - group = "Costumes & Toys" - -/datum/supply_pack/costumes_toys/randomised - name = "Collectable Hats Crate" - desc = "" - cost = 20000 - var/num_contained = 3 //number of items picked to be contained in a randomised crate - contains = list(/obj/item/clothing/head/collectable/chef, - /obj/item/clothing/head/collectable/paper, - /obj/item/clothing/head/collectable/tophat, - /obj/item/clothing/head/collectable/captain, - /obj/item/clothing/head/collectable/beret, - /obj/item/clothing/head/collectable/welding, - /obj/item/clothing/head/collectable/flatcap, - /obj/item/clothing/head/collectable/pirate, - /obj/item/clothing/head/collectable/kitty, - /obj/item/clothing/head/collectable/rabbitears, - /obj/item/clothing/head/collectable/wizard, - /obj/item/clothing/head/collectable/hardhat, - /obj/item/clothing/head/collectable/HoS, - /obj/item/clothing/head/collectable/HoP, - /obj/item/clothing/head/collectable/thunderdome, - /obj/item/clothing/head/collectable/swat, - /obj/item/clothing/head/collectable/slime, - /obj/item/clothing/head/collectable/police, - /obj/item/clothing/head/collectable/slime, - /obj/item/clothing/head/collectable/xenom, - /obj/item/clothing/head/collectable/petehat) - crate_name = "collectable hats crate" - crate_type = /obj/structure/closet/crate/wooden - -/datum/supply_pack/costumes_toys/randomised/contraband - name = "Contraband Crate" - desc = "" - contraband = TRUE - cost = 3000 - num_contained = 7 - crate_name = "crate" - -/datum/supply_pack/costumes_toys/foamforce - name = "Foam Force Crate" - desc = "" - cost = 1000 - contains = list(/obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy) - crate_name = "foam force crate" - -/datum/supply_pack/costumes_toys/foamforce/bonus - name = "Foam Force Pistols Crate" - desc = "" - contraband = TRUE - cost = 4000 - contains = list(/obj/item/gun/ballistic/automatic/toy/pistol, - /obj/item/gun/ballistic/automatic/toy/pistol, - /obj/item/ammo_box/magazine/toy/pistol, - /obj/item/ammo_box/magazine/toy/pistol) - crate_name = "foam force crate" - -/datum/supply_pack/costumes_toys/formalwear - name = "Formalwear Crate" - desc = "" - cost = 3000 //Lots of very expensive items. You gotta pay up to look good! - contains = list(/obj/item/clothing/under/dress/blacktango, - /obj/item/clothing/under/misc/assistantformal, - /obj/item/clothing/under/misc/assistantformal, - /obj/item/clothing/under/rank/civilian/lawyer/bluesuit, - /obj/item/clothing/suit/toggle/lawyer, - /obj/item/clothing/under/rank/civilian/lawyer/purpsuit, - /obj/item/clothing/suit/toggle/lawyer/purple, - /obj/item/clothing/suit/toggle/lawyer/black, - /obj/item/clothing/accessory/waistcoat, - /obj/item/clothing/neck/tie/blue, - /obj/item/clothing/neck/tie/red, - /obj/item/clothing/neck/tie/black, - /obj/item/clothing/head/bowler, - /obj/item/clothing/head/fedora, - /obj/item/clothing/head/flatcap, - /obj/item/clothing/head/beret, - /obj/item/clothing/head/that, - /obj/item/clothing/shoes/laceup, - /obj/item/clothing/shoes/laceup, - /obj/item/clothing/shoes/laceup, - /obj/item/clothing/under/suit/charcoal, - /obj/item/clothing/under/suit/navy, - /obj/item/clothing/under/suit/burgundy, - /obj/item/clothing/under/suit/checkered, - /obj/item/clothing/under/suit/tan, - /obj/item/lipstick/random) - crate_name = "formalwear crate" - crate_type = /obj/structure/closet/crate/wooden - -/datum/supply_pack/costumes_toys/clownpin - name = "Hilarious Firing Pin Crate" - desc = "" - cost = 5000 - contraband = TRUE - contains = list(/obj/item/firing_pin/clown) - crate_name = "toy crate" // It's /technically/ a toy. For the clown, at least. - crate_type = /obj/structure/closet/crate/wooden - -/datum/supply_pack/costumes_toys/lasertag - name = "Laser Tag Crate" - desc = "" - cost = 1500 - contains = list(/obj/item/gun/energy/laser/redtag, - /obj/item/gun/energy/laser/redtag, - /obj/item/gun/energy/laser/redtag, - /obj/item/gun/energy/laser/bluetag, - /obj/item/gun/energy/laser/bluetag, - /obj/item/gun/energy/laser/bluetag, - /obj/item/clothing/suit/redtag, - /obj/item/clothing/suit/redtag, - /obj/item/clothing/suit/redtag, - /obj/item/clothing/suit/bluetag, - /obj/item/clothing/suit/bluetag, - /obj/item/clothing/suit/bluetag, - /obj/item/clothing/head/helmet/redtaghelm, - /obj/item/clothing/head/helmet/redtaghelm, - /obj/item/clothing/head/helmet/redtaghelm, - /obj/item/clothing/head/helmet/bluetaghelm, - /obj/item/clothing/head/helmet/bluetaghelm, - /obj/item/clothing/head/helmet/bluetaghelm) - crate_name = "laser tag crate" - -/datum/supply_pack/costumes_toys/lasertag/pins - name = "Laser Tag Firing Pins Crate" - desc = "" - cost = 3000 - contraband = TRUE - contains = list(/obj/item/storage/box/lasertagpins) - crate_name = "laser tag crate" - -/datum/supply_pack/costumes_toys/mech_suits - name = "Mech Pilot's Suit Crate" - desc = "" - cost = 1500 //state-of-the-art technology doesn't come cheap - contains = list(/obj/item/clothing/under/costume/mech_suit, - /obj/item/clothing/under/costume/mech_suit/white, - /obj/item/clothing/under/costume/mech_suit/blue) - crate_name = "mech pilot's suit crate" - crate_type = /obj/structure/closet/crate/wooden - -/datum/supply_pack/costumes_toys/costume_original - name = "Original Costume Crate" - desc = "" - cost = 1000 - contains = list(/obj/item/clothing/head/snowman, - /obj/item/clothing/suit/snowman, - /obj/item/clothing/head/chicken, - /obj/item/clothing/suit/chickensuit, - /obj/item/clothing/mask/gas/monkeymask, - /obj/item/clothing/suit/monkeysuit, - /obj/item/clothing/head/cardborg, - /obj/item/clothing/suit/cardborg, - /obj/item/clothing/head/xenos, - /obj/item/clothing/suit/xenos, - /obj/item/clothing/suit/hooded/ian_costume, - /obj/item/clothing/suit/hooded/carp_costume, - /obj/item/clothing/suit/hooded/bee_costume) - crate_name = "original costume crate" - crate_type = /obj/structure/closet/crate/wooden - -/datum/supply_pack/costumes_toys/costume - name = "Standard Costume Crate" - desc = "" - cost = 1000 - access = ACCESS_THEATRE - contains = list(/obj/item/storage/backpack/clown, - /obj/item/clothing/shoes/clown_shoes, - /obj/item/clothing/mask/gas/clown_hat, - /obj/item/clothing/under/rank/civilian/clown, - /obj/item/bikehorn, - /obj/item/clothing/under/rank/civilian/mime, - /obj/item/clothing/shoes/sneakers/black, - /obj/item/clothing/gloves/color/white, - /obj/item/clothing/mask/gas/mime, - /obj/item/clothing/head/frenchberet, - /obj/item/clothing/suit/suspenders, - /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing, - /obj/item/storage/backpack/mime) - crate_name = "standard costume crate" - crate_type = /obj/structure/closet/crate/wooden - -/datum/supply_pack/costumes_toys/randomised/toys - name = "Toy Crate" - desc = "" - cost = 5000 // or play the arcade machines ya lazy bum - num_contained = 5 - contains = list() - crate_name = "toy crate" - crate_type = /obj/structure/closet/crate/wooden - -/datum/supply_pack/costumes_toys/randomised/toys/generate() - . = ..() - var/the_toy - for(var/i in 1 to num_contained) - if(prob(50)) - the_toy = pickweight(GLOB.arcade_prize_pool) - else - the_toy = pick(subtypesof(/obj/item/toy/plush)) - new the_toy(.) - -/datum/supply_pack/costumes_toys/wizard - name = "Wizard Costume Crate" - desc = "" - cost = 2000 - contains = list(/obj/item/staff, - /obj/item/clothing/suit/wizrobe/fake, - /obj/item/clothing/shoes/sandal, - /obj/item/clothing/head/wizard/fake) - crate_name = "wizard costume crate" - crate_type = /obj/structure/closet/crate/wooden - -/datum/supply_pack/costumes_toys/randomised/fill(obj/structure/closet/crate/C) - var/list/L = contains.Copy() - for(var/i in 1 to num_contained) - var/item = pick_n_take(L) - new item(C) - -/datum/supply_pack/costumes_toys/wardrobes/autodrobe - name = "Autodrobe Supply Crate" - desc = "" - cost = 1500 - contains = list(/obj/item/vending_refill/autodrobe) - crate_name = "autodrobe supply crate" - -/datum/supply_pack/costumes_toys/wardrobes/cargo - name = "Cargo Wardrobe Supply Crate" - desc = "" - cost = 750 - contains = list(/obj/item/vending_refill/wardrobe/cargo_wardrobe) - crate_name = "cargo department supply crate" - -/datum/supply_pack/costumes_toys/wardrobes/engineering - name = "Engineering Wardrobe Supply Crate" - desc = "" - cost = 1500 - contains = list(/obj/item/vending_refill/wardrobe/engi_wardrobe, - /obj/item/vending_refill/wardrobe/atmos_wardrobe) - crate_name = "engineering department wardrobe supply crate" - -/datum/supply_pack/costumes_toys/wardrobes/general - name = "General Wardrobes Supply Crate" - desc = "" - cost = 3750 - contains = list(/obj/item/vending_refill/wardrobe/curator_wardrobe, - /obj/item/vending_refill/wardrobe/bar_wardrobe, - /obj/item/vending_refill/wardrobe/chef_wardrobe, - /obj/item/vending_refill/wardrobe/jani_wardrobe, - /obj/item/vending_refill/wardrobe/chap_wardrobe) - crate_name = "general wardrobes vendor refills" - -/datum/supply_pack/costumes_toys/wardrobes/hydroponics - name = "Hydrobe Supply Crate" - desc = "" - cost = 750 - contains = list(/obj/item/vending_refill/wardrobe/hydro_wardrobe) - crate_name = "hydrobe supply crate" - -/datum/supply_pack/costumes_toys/wardrobes/medical - name = "Medical Wardrobe Supply Crate" - desc = "" - cost = 3000 - contains = list(/obj/item/vending_refill/wardrobe/medi_wardrobe, - /obj/item/vending_refill/wardrobe/chem_wardrobe, - /obj/item/vending_refill/wardrobe/gene_wardrobe, - /obj/item/vending_refill/wardrobe/viro_wardrobe) - crate_name = "medical department wardrobe supply crate" - -/datum/supply_pack/costumes_toys/wardrobes/science - name = "Science Wardrobe Supply Crate" - desc = "" - cost = 1500 - contains = list(/obj/item/vending_refill/wardrobe/robo_wardrobe, - /obj/item/vending_refill/wardrobe/science_wardrobe) - crate_name = "science department wardrobe supply crate" - -/datum/supply_pack/costumes_toys/wardrobes/security - name = "Security Wardrobe Supply Crate" - desc = "" - cost = 1500 - contains = list(/obj/item/vending_refill/wardrobe/sec_wardrobe, - /obj/item/vending_refill/wardrobe/law_wardrobe) - crate_name = "security department supply crate" - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Miscellaneous /////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/misc - group = "Miscellaneous Supplies" - -/datum/supply_pack/misc/artsupply - name = "Art Supplies" - desc = "" - cost = 1000 - contains = list(/obj/item/twohanded/rcl, - /obj/item/storage/toolbox/artistic, - /obj/item/toy/crayon/spraycan, - /obj/item/toy/crayon/spraycan, - /obj/item/toy/crayon/spraycan, - /obj/item/storage/crayons, - /obj/item/toy/crayon/white, - /obj/item/toy/crayon/rainbow) - crate_name = "art supply crate" - crate_type = /obj/structure/closet/crate/wooden - -/datum/supply_pack/misc/bicycle - name = "Bicycle" - desc = "" - cost = 1000000 - contains = list(/obj/vehicle/ridden/bicycle) - crate_name = "Bicycle Crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/misc/bigband - name = "Big Band Instrument Collection" - desc = "" - cost = 5000 - crate_name = "Big band musical instruments collection" - contains = list(/obj/item/instrument/violin, - /obj/item/instrument/guitar, - /obj/item/instrument/glockenspiel, - /obj/item/instrument/accordion, - /obj/item/instrument/saxophone, - /obj/item/instrument/trombone, - /obj/item/instrument/recorder, - /obj/item/instrument/harmonica, - /obj/structure/piano/unanchored) - crate_type = /obj/structure/closet/crate/wooden - -/datum/supply_pack/misc/book_crate - name = "Book Crate" - desc = "" - cost = 1500 - contains = list(/obj/item/book/codex_gigas, - /obj/item/book/manual/random/, - /obj/item/book/manual/random/, - /obj/item/book/manual/random/, - /obj/item/book/random/triple) - crate_type = /obj/structure/closet/crate/wooden - -/datum/supply_pack/misc/paper - name = "Bureaucracy Crate" - desc = ""//that was too forced - cost = 1600 - contains = list(/obj/structure/filingcabinet/chestdrawer/wheeled, - /obj/item/camera_film, - /obj/item/hand_labeler, - /obj/item/hand_labeler_refill, - /obj/item/hand_labeler_refill, - /obj/item/paper_bin, - /obj/item/paper_bin/carbon, - /obj/item/pen/fourcolor, - /obj/item/pen/fourcolor, - /obj/item/pen, - /obj/item/pen/fountain, - /obj/item/pen/blue, - /obj/item/pen/red, - /obj/item/folder/blue, - /obj/item/folder/red, - /obj/item/folder/yellow, - /obj/item/clipboard, - /obj/item/clipboard, - /obj/item/stamp, - /obj/item/stamp/denied, - /obj/item/laser_pointer/purple) - crate_name = "bureaucracy crate" - -/datum/supply_pack/misc/fountainpens - name = "Calligraphy Crate" - desc = "" - cost = 700 - contains = list(/obj/item/storage/box/fountainpens) - crate_type = /obj/structure/closet/crate/wooden - crate_name = "calligraphy crate" - -/datum/supply_pack/misc/wrapping_paper - name = "Festive Wrapping Paper Crate" - desc = "" - cost = 1000 - contains = list(/obj/item/stack/wrapping_paper) - crate_type = /obj/structure/closet/crate/wooden - crate_name = "festive wrapping paper crate" - - -/datum/supply_pack/misc/funeral - name = "Funeral Supply crate" - desc = "" - cost = 600 - - crate_name = "coffin" - crate_type = /obj/structure/closet/crate/coffin - -/datum/supply_pack/misc/religious_supplies - name = "Religious Supplies Crate" - desc = "" - cost = 4000 // it costs so much because the Space Church is ran by Space Jews - contains = list(/obj/item/reagent_containers/food/drinks/bottle/holywater, - /obj/item/reagent_containers/food/drinks/bottle/holywater, - /obj/item/storage/book/bible/booze, - /obj/item/storage/book/bible/booze, - /obj/item/clothing/suit/hooded/chaplain_hoodie, - /obj/item/clothing/suit/hooded/chaplain_hoodie) - crate_name = "religious supplies crate" - -/datum/supply_pack/misc/toner - name = "Toner Crate" - desc = "" - cost = 1000 - contains = list(/obj/item/toner, - /obj/item/toner, - /obj/item/toner, - /obj/item/toner, - /obj/item/toner, - /obj/item/toner) - crate_name = "toner crate" diff --git a/code/modules/cargo/packsrogue/_pack.dm b/code/modules/cargo/packsrogue/_pack.dm new file mode 100644 index 0000000000..279575a3c0 --- /dev/null +++ b/code/modules/cargo/packsrogue/_pack.dm @@ -0,0 +1,56 @@ +/datum/supply_pack + var/name = "Crate" + var/group = "" + var/hidden = FALSE + var/contraband = FALSE + var/cost = 700 // Minimum cost, or infinite points are possible. + var/access = FALSE + var/access_any = FALSE + var/list/contains = null + var/crate_name = "crate" + var/desc = ""//no desc by default + var/crate_type = /obj/structure/closet/crate + var/dangerous = FALSE // Should we message admins? + var/special = FALSE //Event/Station Goals/Admin enabled packs + var/special_enabled = FALSE + var/DropPodOnly = FALSE//only usable by the Bluespace Drop Pod via the express cargo console + var/admin_spawned = FALSE + var/small_item = FALSE //Small items can be grouped into a single crate. + +/datum/supply_pack/New() + ..() + var/lim = round(cost * 0.3) + cost = rand(cost-lim, cost+lim) + if(cost < 1) + cost = 1 +// var/amt = 0 +// for(var/I in contains) +// amt++ +// if(amt > 1) +// name = "[name] x[amt]" +// name = "[name] ([cost])" + +/datum/supply_pack/proc/generate(atom/A, datum/bank_account/paying_account) + var/obj/structure/closet/crate/C + if(paying_account) + C = new /obj/structure/closet/crate/secure/owned(A, paying_account) + C.name = "[crate_name] - Purchased by [paying_account.account_holder]" + else + C = new crate_type(A) + C.name = crate_name + if(access) + C.req_access = list(access) + if(access_any) + C.req_one_access = access_any + + fill(C) + return C + +/datum/supply_pack/proc/fill(obj/structure/closet/crate/C) + if (admin_spawned) + for(var/item in contains) + var/atom/A = new item(C) + A.flags_1 |= ADMIN_SPAWNED_1 + else + for(var/item in contains) + new item(C) diff --git a/code/modules/cargo/packsrogue/apparel.dm b/code/modules/cargo/packsrogue/apparel.dm index e590765493..2ab6ee508e 100644 --- a/code/modules/cargo/packsrogue/apparel.dm +++ b/code/modules/cargo/packsrogue/apparel.dm @@ -113,6 +113,16 @@ cost = 60 contains = /obj/item/clothing/suit/roguetown/armor/leather/jacket/silk_coat +/datum/supply_pack/rogue/apparel/stockings + name = "Stockings" + cost = 10 + contains = /obj/item/clothing/under/roguetown/tights/stockings/random + +/datum/supply_pack/rogue/apparel/stockings_silk + name = "Silk Stockings" + cost = 20 + contains = /obj/item/clothing/under/roguetown/tights/stockings/silk/random + /datum/supply_pack/rogue/apparel/undershirt_random name = "Undershirt" cost = 4 @@ -148,11 +158,21 @@ cost = 30 contains = /obj/item/clothing/suit/roguetown/shirt/dress/silkdress/random +/datum/supply_pack/rogue/apparel/valoriandress + name = "Valorian Dress" + cost = 15 + contains = /obj/item/clothing/suit/roguetown/shirt/dress/valorian + /datum/supply_pack/rogue/apparel/robe name = "Robe" cost = 5 contains = /obj/item/clothing/suit/roguetown/shirt/robe/mage +/datum/supply_pack/rogue/apparel/bathrobe + name = "Bathrobe" + cost = 14 + contains = /obj/item/clothing/suit/roguetown/shirt/robe/bath + /datum/supply_pack/rogue/apparel/tights_random name = "Cloth Tights" cost = 4 diff --git a/code/modules/cargo/packsrogue/armor.dm b/code/modules/cargo/packsrogue/armor.dm index a0f97996f3..069d78bd81 100644 --- a/code/modules/cargo/packsrogue/armor.dm +++ b/code/modules/cargo/packsrogue/armor.dm @@ -41,7 +41,7 @@ /datum/supply_pack/rogue/armor/studleather name = "Studded Leather Armor" cost = 30 - contains = /obj/item/clothing/suit/roguetown/armor/leather/studded + contains = /obj/item/clothing/suit/roguetown/armor/leather/splint /datum/supply_pack/rogue/armor/chainmail_iron name = "Iron Chainmail" diff --git a/code/modules/cargo/packsrogue/food.dm b/code/modules/cargo/packsrogue/food.dm index c9d3f2af65..7e8dd8f4ed 100644 --- a/code/modules/cargo/packsrogue/food.dm +++ b/code/modules/cargo/packsrogue/food.dm @@ -53,7 +53,7 @@ contains = /obj/item/reagent_containers/glass/bottle/rogue/beer/spottedhen /datum/supply_pack/rogue/food/blackgoat - name = "Jackberry Mix" + name = "Jacksberry Mix" cost = 20 contains = /obj/item/reagent_containers/glass/bottle/rogue/beer/blackgoat diff --git a/code/modules/cargo/packsrogue/rawmat.dm b/code/modules/cargo/packsrogue/rawmat.dm index 18297a939a..be2d381cae 100644 --- a/code/modules/cargo/packsrogue/rawmat.dm +++ b/code/modules/cargo/packsrogue/rawmat.dm @@ -5,7 +5,7 @@ /datum/supply_pack/rogue/rawmats/copper name = "Copper Ore" - cost = 20 + cost = 50 contains = list( /obj/item/rogueore/copper, /obj/item/rogueore/copper, @@ -16,12 +16,11 @@ /datum/supply_pack/rogue/rawmats/iron name = "Iron Ore" - cost = 30 + cost = 80 contains = list( /obj/item/rogueore/iron, /obj/item/rogueore/iron, /obj/item/rogueore/iron, - /obj/item/rogueore/iron, /obj/item/rogueore/iron ) @@ -102,3 +101,16 @@ /obj/item/alch/sinew, /obj/item/alch/sinew ) + +/datum/supply_pack/rogue/rawmats/glass + name = "Glass Panes" + cost = 50 + contains = list( + /obj/item/natural/glass, + /obj/item/natural/glass, + /obj/item/natural/glass, + /obj/item/natural/glass, + /obj/item/natural/glass, + /obj/item/natural/glass + ) + diff --git a/code/modules/cargo/packsrogue/seeds.dm b/code/modules/cargo/packsrogue/seeds.dm index 1f31bef20d..6e06113427 100644 --- a/code/modules/cargo/packsrogue/seeds.dm +++ b/code/modules/cargo/packsrogue/seeds.dm @@ -18,7 +18,7 @@ /datum/supply_pack/rogue/seeds/weed name = "Pipe Weed" cost = 8 - contains = /obj/item/neuFarm/seed/pipeweed + contains = /obj/item/neuFarm/seed/westleach /datum/supply_pack/rogue/seeds/sleaf name = "Swamp Weed" diff --git a/code/modules/cargo/packsrogue/tools.dm b/code/modules/cargo/packsrogue/tools.dm index 85e5f964af..6fbdcf41d0 100644 --- a/code/modules/cargo/packsrogue/tools.dm +++ b/code/modules/cargo/packsrogue/tools.dm @@ -48,6 +48,12 @@ cost = 20 contains = /obj/item/flint +/datum/supply_pack/rogue/tools/dyebin + name = "Fine dyes" + cost = 200 + contains = /obj/machinery/dye_bin + + /datum/supply_pack/rogue/tools/candles name = "Candles" cost = 10 @@ -95,6 +101,17 @@ cost = 15 contains = /obj/item/rogueweapon/hoe +/datum/supply_pack/rogue/tools/handsaw + name = "handsaw" + cost = 12 + contains = /obj/item/rogueweapon/handsaw + +/datum/supply_pack/rogue/tools/chisel + name = "chisel" + cost = 12 + contains = list(/obj/item/rogueweapon/chisel, + /obj/item/rogueweapon/chisel) + /datum/supply_pack/rogue/tools/bottle name = "Glass Bottle" cost = 3 diff --git a/code/modules/cargo/packsrogue/weapons.dm b/code/modules/cargo/packsrogue/weapons.dm index 41e0522fb0..dee82cd8dd 100644 --- a/code/modules/cargo/packsrogue/weapons.dm +++ b/code/modules/cargo/packsrogue/weapons.dm @@ -6,7 +6,7 @@ /datum/supply_pack/rogue/weapons/shortsword name = "Iron Short Sword" cost = 15 - contains = /obj/item/rogueweapon/sword/iron/short + contains = /obj/item/rogueweapon/sword/short /datum/supply_pack/rogue/weapons/sword name = "Iron Sword" @@ -16,7 +16,7 @@ /datum/supply_pack/rogue/weapons/greatsword name = "Iron Greatsword" cost = 54 - contains = /obj/item/rogueweapon/greatsword/zwei + contains = /obj/item/rogueweapon/sword/long/greatsword/zwei /datum/supply_pack/rogue/weapons/mace name = "Iron Mace" @@ -31,22 +31,22 @@ /datum/supply_pack/rogue/weapons/axe name = "Iron Axe" cost = 20 - contains = /obj/item/rogueweapon/woodcut + contains = /obj/item/rogueweapon/axe/iron /datum/supply_pack/rogue/weapons/huntingknife name = "Iron Hunting Knife" cost = 12 - contains = /obj/item/rogueweapon/huntingknife + contains = /obj/item/rogueweapon/knife/hunting /datum/supply_pack/rogue/weapons/dagger name = "Iron Dagger" cost = 10 - contains = /obj/item/rogueweapon/huntingknife/idagger + contains = /obj/item/rogueweapon/knife/dagger /datum/supply_pack/rogue/weapons/spear name = "Iron Spear" cost = 22 - contains = /obj/item/rogueweapon/spear + contains = /obj/item/rogueweapon/polearm/spear /datum/supply_pack/rogue/weapons/flail name = "Iron Flail" @@ -73,12 +73,14 @@ cost = 40 contains = /obj/item/bomb/homemade +/* /datum/supply_pack/rogue/weapons/nets name = "Throwing Net" cost = 15 contains = list(/obj/item/net, /obj/item/net, /obj/item/net) +*/ /datum/supply_pack/rogue/weapons/crossbow name = "Crossbow" diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm index bcf0ac9059..a4de0a5f20 100644 --- a/code/modules/cargo/supplypod.dm +++ b/code/modules/cargo/supplypod.dm @@ -119,7 +119,7 @@ opened = FALSE INVOKE_ASYNC(holder, PROC_REF(setClosed)) //Use the INVOKE_ASYNC proc to call setClosed() on whatever the holder may be, without giving the atom/movable base class a setClosed() proc definition for (var/atom/movable/O in get_turf(holder)) - if ((ismob(O) && !isliving(O)) || (is_type_in_typecache(O, GLOB.blacklisted_cargo_types) && !isliving(O))) //We dont want to take ghosts with us, and we don't want blacklisted items going, but we allow mobs. + if ((ismob(O) && !isliving(O)) && !isliving(O)) //We dont want to take ghosts with us, and we don't want blacklisted items going, but we allow mobs. continue O.forceMove(holder) //Put objects inside before we close var/obj/effect/temp_visual/risingPod = new /obj/effect/DPfall(get_turf(holder), src) //Make a nice animation of flying back up @@ -289,7 +289,7 @@ icon = 'icons/mob/actions/actions_items.dmi' icon_state = "sniper_zoom" layer = PROJECTILE_HIT_THRESHHOLD_LAYER - light_range = 2 + light_outer_range = 2 var/obj/effect/temp_visual/fallingPod //Temporary "falling pod" that we animate var/obj/structure/closet/supplypod/pod //The supplyPod that will be landing ontop of this target diff --git a/code/modules/cargo/supplypod_beacon.dm b/code/modules/cargo/supplypod_beacon.dm deleted file mode 100644 index 29c098318c..0000000000 --- a/code/modules/cargo/supplypod_beacon.dm +++ /dev/null @@ -1,95 +0,0 @@ -/obj/item/supplypod_beacon - name = "Supply Pod Beacon" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "supplypod_beacon" - item_state = "radio" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - w_class = WEIGHT_CLASS_SMALL - var/obj/machinery/computer/cargo/express/express_console - var/linked = FALSE - var/ready = FALSE - var/launched = FALSE - -/obj/item/supplypod_beacon/proc/update_status(consoleStatus) - switch(consoleStatus) - if (SP_LINKED) - linked = TRUE - playsound(src,'sound/blank.ogg',50,FALSE) - if (SP_READY) - ready = TRUE - if (SP_LAUNCH) - launched = TRUE - playsound(src,'sound/blank.ogg',50,FALSE) - playsound(src,'sound/blank.ogg',50,FALSE) - addtimer(CALLBACK(src, PROC_REF(endLaunch)), 33)//wait 3.3 seconds (time it takes for supplypod to land), then update icon - if (SP_UNLINK) - linked = FALSE - playsound(src,'sound/blank.ogg',50,FALSE) - if (SP_UNREADY) - ready = FALSE - update_icon() - -/obj/item/supplypod_beacon/update_icon() - cut_overlays() - if (launched) - add_overlay("sp_green") - else if (ready) - add_overlay("sp_yellow") - else if (linked) - add_overlay("sp_orange") - -/obj/item/supplypod_beacon/proc/endLaunch() - launched = FALSE - update_status() - -/obj/item/supplypod_beacon/examine(user) - . = ..() - if(!express_console) - . += "[src] is not currently linked to an Express Supply console." - else - . += "Alt-click to unlink it from the Express Supply console." - -/obj/item/supplypod_beacon/Destroy() - if(express_console) - express_console.beacon = null - return ..() - -/obj/item/supplypod_beacon/proc/unlink_console() - if(express_console) - express_console.beacon = null - express_console = null - update_status(SP_UNLINK) - update_status(SP_UNREADY) - -/obj/item/supplypod_beacon/proc/link_console(obj/machinery/computer/cargo/express/C, mob/living/user) - if (C.beacon)//if new console has a beacon, then... - C.beacon.unlink_console()//unlink the old beacon from new console - if (express_console)//if this beacon has an express console - express_console.beacon = null//remove the connection the expressconsole has from beacons - express_console = C//set the linked console var to the console - express_console.beacon = src//out with the old in with the news - update_status(SP_LINKED) - if (express_console.usingBeacon) - update_status(SP_READY) - to_chat(user, "[src] linked to [C].") - -/obj/item/supplypod_beacon/AltClick(mob/user) - if (!user.canUseTopic(src, !issilicon(user))) - return - if (express_console) - unlink_console() - else - to_chat(user, "There is no linked console.") - -/obj/item/supplypod_beacon/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/pen)) //give a tag that is visible from the linked express console - var/new_beacon_name = stripped_input(user, "What would you like the tag to be?") - if(!user.canUseTopic(src, BE_CLOSE)) - return - if(new_beacon_name) - name += " ([tag])" - return - else - return ..() diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 6bd0dcbbbc..1d8a2bd911 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -2530,7 +2530,7 @@ Slots: [job.spawn_positions] // character.accessory = accessory character.detail = detail character.socks = socks - character.patron = selected_patron + character.set_patron(selected_patron) character.backpack = backpack character.jumpsuit_style = jumpsuit_style diff --git a/code/modules/client/verbs/suicide.dm b/code/modules/client/verbs/suicide.dm index 8fe0f9e47b..f7a175ad70 100644 --- a/code/modules/client/verbs/suicide.dm +++ b/code/modules/client/verbs/suicide.dm @@ -15,11 +15,6 @@ /mob/living/silicon/robot/set_suicide(suicide_state) . = ..() - if(mmi) - if(mmi.brain) - mmi.brain.suicided = suicide_state - if(mmi.brainmob) - mmi.brainmob.suiciding = suicide_state /mob/living/carbon/human/verb/suicide() set hidden = 1 diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm deleted file mode 100644 index f0d3a80bf0..0000000000 --- a/code/modules/clothing/chameleon.dm +++ /dev/null @@ -1,679 +0,0 @@ -#define EMP_RANDOMISE_TIME 300 - -/datum/action/item_action/chameleon/drone/randomise - name = "Randomise Headgear" - icon_icon = 'icons/mob/actions/actions_items.dmi' - button_icon_state = "random" - -/datum/action/item_action/chameleon/drone/randomise/Trigger() - if(!IsAvailable()) - return - - // Damn our lack of abstract interfeces - if (istype(target, /obj/item/clothing/head/chameleon/drone)) - var/obj/item/clothing/head/chameleon/drone/X = target - X.chameleon_action.random_look(owner) - if (istype(target, /obj/item/clothing/mask/chameleon/drone)) - var/obj/item/clothing/mask/chameleon/drone/Z = target - Z.chameleon_action.random_look(owner) - - return 1 - - -/datum/action/item_action/chameleon/drone/togglehatmask - name = "Toggle Headgear Mode" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' - -/datum/action/item_action/chameleon/drone/togglehatmask/New() - ..() - - if (istype(target, /obj/item/clothing/head/chameleon/drone)) - button_icon_state = "drone_camogear_helm" - if (istype(target, /obj/item/clothing/mask/chameleon/drone)) - button_icon_state = "drone_camogear_mask" - -/datum/action/item_action/chameleon/drone/togglehatmask/Trigger() - if(!IsAvailable()) - return - - // No point making the code more complicated if no non-drone - // is ever going to use one of these - - var/mob/living/simple_animal/drone/D - - if(istype(owner, /mob/living/simple_animal/drone)) - D = owner - else - return - - // The drone unEquip() proc sets head to null after dropping - // an item, so we need to keep a reference to our old headgear - // to make sure it's deleted. - var/obj/old_headgear = target - var/obj/new_headgear - - if(istype(old_headgear, /obj/item/clothing/head/chameleon/drone)) - new_headgear = new /obj/item/clothing/mask/chameleon/drone() - else if(istype(old_headgear, /obj/item/clothing/mask/chameleon/drone)) - new_headgear = new /obj/item/clothing/head/chameleon/drone() - else - to_chat(owner, "I shouldn't be able to toggle a camogear helmetmask if you're not wearing it.") - if(new_headgear) - // Force drop the item in the headslot, even though - // it's has TRAIT_NODROP - D.dropItemToGround(target, TRUE) - qdel(old_headgear) - // where is `SLOT_HEAD` defined? WHO KNOWS - D.equip_to_slot(new_headgear, SLOT_HEAD) - return 1 - - -/datum/action/chameleon_outfit - name = "Select Chameleon Outfit" - button_icon_state = "chameleon_outfit" - var/list/outfit_options //By default, this list is shared between all instances. It is not static because if it were, subtypes would not be able to have their own. If you ever want to edit it, copy it first. - -/datum/action/chameleon_outfit/New() - ..() - initialize_outfits() - -/datum/action/chameleon_outfit/proc/initialize_outfits() - var/static/list/standard_outfit_options - if(!standard_outfit_options) - standard_outfit_options = list() - for(var/path in subtypesof(/datum/outfit/job)) - var/datum/outfit/O = path - if(initial(O.can_be_admin_equipped)) - standard_outfit_options[initial(O.name)] = path - sortTim(standard_outfit_options, GLOBAL_PROC_REF(cmp_text_asc)) - outfit_options = standard_outfit_options - -/datum/action/chameleon_outfit/Trigger() - return select_outfit(owner) - -/datum/action/chameleon_outfit/proc/select_outfit(mob/user) - if(!user || !IsAvailable()) - return FALSE - var/selected = input("Select outfit to change into", "Chameleon Outfit") as null|anything in outfit_options - if(!IsAvailable() || QDELETED(src) || QDELETED(user)) - return FALSE - var/outfit_type = outfit_options[selected] - if(!outfit_type) - return FALSE - var/datum/outfit/job/O = new outfit_type() - var/list/outfit_types = O.get_chameleon_disguise_info() - var/datum/job/job_datum = SSjob.GetJobType(O.jobtype) - - for(var/V in user.chameleon_item_actions) - var/datum/action/item_action/chameleon/change/A = V - var/done = FALSE - for(var/T in outfit_types) - for(var/name in A.chameleon_list) - if(A.chameleon_list[name] == T) - A.apply_job_data(job_datum) - A.update_look(user, T) - outfit_types -= T - done = TRUE - break - if(done) - break - - //hardsuit helmets/suit hoods - if(O.toggle_helmet && (ispath(O.suit, /obj/item/clothing/suit/space/hardsuit) || ispath(O.suit, /obj/item/clothing/suit/hooded)) && ishuman(user)) - var/mob/living/carbon/human/H = user - //make sure they are actually wearing the suit, not just holding it, and that they have a chameleon hat - if(istype(H.wear_armor, /obj/item/clothing/suit/chameleon) && istype(H.head, /obj/item/clothing/head/chameleon)) - var/helmet_type - if(ispath(O.suit, /obj/item/clothing/suit/space/hardsuit)) - var/obj/item/clothing/suit/space/hardsuit/hardsuit = O.suit - helmet_type = initial(hardsuit.helmettype) - else - var/obj/item/clothing/suit/hooded/hooded = O.suit - helmet_type = initial(hooded.hoodtype) - - if(helmet_type) - var/obj/item/clothing/head/chameleon/hat = H.head - hat.chameleon_action.update_look(user, helmet_type) - qdel(O) - return TRUE - - -/datum/action/item_action/chameleon/change - name = "Chameleon Change" - var/list/chameleon_blacklist = list() //This is a typecache - var/list/chameleon_list = list() - var/chameleon_type = null - var/chameleon_name = "Item" - - var/emp_timer - -/datum/action/item_action/chameleon/change/Grant(mob/M) - if(M && (owner != M)) - if(!M.chameleon_item_actions) - M.chameleon_item_actions = list(src) - var/datum/action/chameleon_outfit/O = new /datum/action/chameleon_outfit() - O.Grant(M) - else - M.chameleon_item_actions |= src - ..() - -/datum/action/item_action/chameleon/change/Remove(mob/M) - if(M && (M == owner)) - LAZYREMOVE(M.chameleon_item_actions, src) - if(!LAZYLEN(M.chameleon_item_actions)) - var/datum/action/chameleon_outfit/O = locate(/datum/action/chameleon_outfit) in M.actions - qdel(O) - ..() - -/datum/action/item_action/chameleon/change/proc/initialize_disguises() - if(button) - button.name = "Change [chameleon_name] Appearance" - - chameleon_blacklist |= typecacheof(target.type) - for(var/V in typesof(chameleon_type)) - if(ispath(V) && ispath(V, /obj/item)) - var/obj/item/I = V - if(chameleon_blacklist[V] || (initial(I.item_flags) & ABSTRACT) || !initial(I.icon_state)) - continue - var/chameleon_item_name = "[initial(I.name)] ([initial(I.icon_state)])" - chameleon_list[chameleon_item_name] = I - - -/datum/action/item_action/chameleon/change/proc/select_look(mob/user) - var/obj/item/picked_item - var/picked_name - picked_name = input("Select [chameleon_name] to change into", "Chameleon [chameleon_name]", picked_name) as null|anything in sortList(chameleon_list, GLOBAL_PROC_REF(cmp_typepaths_asc)) - if(!picked_name) - return - picked_item = chameleon_list[picked_name] - if(!picked_item) - return - update_look(user, picked_item) - -/datum/action/item_action/chameleon/change/proc/random_look(mob/user) - var/picked_name = pick(chameleon_list) - // If a user is provided, then this item is in use, and we - // need to update our icons and stuff - - if(user) - update_look(user, chameleon_list[picked_name]) - - // Otherwise, it's likely a random initialisation, so we - // don't have to worry - - else - update_item(chameleon_list[picked_name]) - -/datum/action/item_action/chameleon/change/proc/update_look(mob/user, obj/item/picked_item) - if(isliving(user)) - var/mob/living/C = user - if(C.stat != CONSCIOUS) - return - - update_item(picked_item) - var/obj/item/thing = target - thing.update_slot_icon() - UpdateButtonIcon() - -/datum/action/item_action/chameleon/change/proc/update_item(obj/item/picked_item) - target.name = initial(picked_item.name) - target.desc = initial(picked_item.desc) - target.icon_state = initial(picked_item.icon_state) - if(isitem(target)) - var/obj/item/clothing/I = target - I.item_state = initial(picked_item.item_state) - I.mob_overlay_icon = initial(picked_item.mob_overlay_icon) - if(istype(I, /obj/item/clothing) && istype(picked_item, /obj/item/clothing)) - var/obj/item/clothing/CL = I - var/obj/item/clothing/PCL = picked_item - CL.flags_cover = initial(PCL.flags_cover) - target.icon = initial(picked_item.icon) - -/datum/action/item_action/chameleon/change/Trigger() - if(!IsAvailable()) - return - - select_look(owner) - return 1 - -/datum/action/item_action/chameleon/change/proc/emp_randomise(amount = EMP_RANDOMISE_TIME) - START_PROCESSING(SSprocessing, src) - random_look(owner) - - var/new_value = world.time + amount - if(new_value > emp_timer) - emp_timer = new_value - -/datum/action/item_action/chameleon/change/process() - if(world.time > emp_timer) - STOP_PROCESSING(SSprocessing, src) - return - random_look(owner) - -/datum/action/item_action/chameleon/change/proc/apply_job_data(datum/job/job_datum) - return - -/datum/action/item_action/chameleon/change/id/update_item(obj/item/picked_item) - ..() - var/obj/item/card/id/syndicate/agent_card = target - if(istype(agent_card)) - var/obj/item/card/id/copied_card = picked_item - agent_card.uses_overlays = initial(copied_card.uses_overlays) - agent_card.id_type_name = initial(copied_card.id_type_name) - if(!agent_card.forged) - agent_card.registered_name = initial(copied_card.registered_name) - agent_card.assignment = initial(copied_card.assignment) - agent_card.update_label() - if(!agent_card.forged) - agent_card.name = initial(copied_card.name) //e.g. captain's spare ID, not Captain's ID Card (Captain) - -/datum/action/item_action/chameleon/change/id/apply_job_data(datum/job/job_datum) - ..() - var/obj/item/card/id/syndicate/agent_card = target - if(istype(agent_card) && istype(job_datum)) - agent_card.forged = TRUE - agent_card.assignment = job_datum.title - -/datum/action/item_action/chameleon/change/pda/update_item(obj/item/picked_item) - ..() - var/obj/item/pda/agent_pda = target - if(istype(agent_pda)) - agent_pda.update_label() - agent_pda.update_icon() - -/datum/action/item_action/chameleon/change/pda/apply_job_data(datum/job/job_datum) - ..() - var/obj/item/pda/agent_pda = target - if(istype(agent_pda) && istype(job_datum)) - agent_pda.ownjob = job_datum.title - - -/obj/item/clothing/under/chameleon -//starts off as black - name = "black jumpsuit" - icon = 'icons/obj/clothing/under/color.dmi' - icon_state = "black" - item_state = "bl_suit" - mob_overlay_icon = 'icons/mob/clothing/under/color.dmi' - desc = "" - sensor_mode = SENSOR_OFF //Hey who's this guy on the Syndicate Shuttle?? - random_sensor = FALSE - resistance_flags = NONE - can_adjust = FALSE - armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - - var/datum/action/item_action/chameleon/change/chameleon_action - -/obj/item/clothing/under/chameleon/Initialize() - . = ..() - chameleon_action = new(src) - chameleon_action.chameleon_type = /obj/item/clothing/under - chameleon_action.chameleon_name = "Jumpsuit" - chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/clothing/under, /obj/item/clothing/under/color, /obj/item/clothing/under/rank, /obj/item/clothing/under/changeling), only_root_path = TRUE) - chameleon_action.initialize_disguises() - -/obj/item/clothing/under/chameleon/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - chameleon_action.emp_randomise() - -/obj/item/clothing/under/chameleon/broken/Initialize() - . = ..() - chameleon_action.emp_randomise(INFINITY) - -/obj/item/clothing/suit/chameleon - name = "armor" - desc = "" - icon_state = "armor" - item_state = "armor" - blood_overlay_type = "armor" - resistance_flags = NONE - armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - - var/datum/action/item_action/chameleon/change/chameleon_action - -/obj/item/clothing/suit/chameleon/Initialize() - . = ..() - chameleon_action = new(src) - chameleon_action.chameleon_type = /obj/item/clothing/suit - chameleon_action.chameleon_name = "Suit" - chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/clothing/suit/armor/abductor, /obj/item/clothing/suit/changeling), only_root_path = TRUE) - chameleon_action.initialize_disguises() - -/obj/item/clothing/suit/chameleon/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - chameleon_action.emp_randomise() - -/obj/item/clothing/suit/chameleon/broken/Initialize() - . = ..() - chameleon_action.emp_randomise(INFINITY) - -/obj/item/clothing/glasses/chameleon - name = "Optical Meson Scanner" - desc = "" - icon_state = "meson" - item_state = "meson" - resistance_flags = NONE - armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - - var/datum/action/item_action/chameleon/change/chameleon_action - -/obj/item/clothing/glasses/chameleon/Initialize() - . = ..() - chameleon_action = new(src) - chameleon_action.chameleon_type = /obj/item/clothing/glasses - chameleon_action.chameleon_name = "Glasses" - chameleon_action.chameleon_blacklist = typecacheof(/obj/item/clothing/glasses/changeling, only_root_path = TRUE) - chameleon_action.initialize_disguises() - -/obj/item/clothing/glasses/chameleon/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - chameleon_action.emp_randomise() - -/obj/item/clothing/glasses/chameleon/broken/Initialize() - . = ..() - chameleon_action.emp_randomise(INFINITY) - -/obj/item/clothing/gloves/chameleon - desc = "" - name = "insulated gloves" - icon_state = "yellow" - item_state = "ygloves" - - resistance_flags = NONE - armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - - var/datum/action/item_action/chameleon/change/chameleon_action - -/obj/item/clothing/gloves/chameleon/Initialize() - . = ..() - chameleon_action = new(src) - chameleon_action.chameleon_type = /obj/item/clothing/gloves - chameleon_action.chameleon_name = "Gloves" - chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/clothing/gloves, /obj/item/clothing/gloves/color, /obj/item/clothing/gloves/changeling), only_root_path = TRUE) - chameleon_action.initialize_disguises() - -/obj/item/clothing/gloves/chameleon/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - chameleon_action.emp_randomise() - -/obj/item/clothing/gloves/chameleon/broken/Initialize() - . = ..() - chameleon_action.emp_randomise(INFINITY) - -/obj/item/clothing/head/chameleon - name = "grey cap" - desc = "" - icon_state = "greysoft" - - resistance_flags = NONE - armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - - var/datum/action/item_action/chameleon/change/chameleon_action - -/obj/item/clothing/head/chameleon/Initialize() - . = ..() - chameleon_action = new(src) - chameleon_action.chameleon_type = /obj/item/clothing/head - chameleon_action.chameleon_name = "Hat" - chameleon_action.chameleon_blacklist = typecacheof(/obj/item/clothing/head/changeling, only_root_path = TRUE) - chameleon_action.initialize_disguises() - -/obj/item/clothing/head/chameleon/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - chameleon_action.emp_randomise() - -/obj/item/clothing/head/chameleon/broken/Initialize() - . = ..() - chameleon_action.emp_randomise(INFINITY) - -/obj/item/clothing/head/chameleon/drone - // The camohat, I mean, holographic hat projection, is part of the - // drone itself. - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - // which means it offers no protection, it's just air and light - -/obj/item/clothing/head/chameleon/drone/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) - chameleon_action.random_look() - var/datum/action/item_action/chameleon/drone/togglehatmask/togglehatmask_action = new(src) - togglehatmask_action.UpdateButtonIcon() - var/datum/action/item_action/chameleon/drone/randomise/randomise_action = new(src) - randomise_action.UpdateButtonIcon() - -/obj/item/clothing/mask/chameleon - name = "gas mask" - desc = "" //More accurate - icon_state = "gas_alt" - item_state = "gas_alt" - resistance_flags = NONE - armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - clothing_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS - flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.01 - flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH - - var/vchange = 1 - - var/datum/action/item_action/chameleon/change/chameleon_action - -/obj/item/clothing/mask/chameleon/Initialize() - . = ..() - chameleon_action = new(src) - chameleon_action.chameleon_type = /obj/item/clothing/mask - chameleon_action.chameleon_name = "Mask" - chameleon_action.chameleon_blacklist = typecacheof(/obj/item/clothing/mask/changeling, only_root_path = TRUE) - chameleon_action.initialize_disguises() - -/obj/item/clothing/mask/chameleon/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - chameleon_action.emp_randomise() - -/obj/item/clothing/mask/chameleon/broken/Initialize() - . = ..() - chameleon_action.emp_randomise(INFINITY) - -/obj/item/clothing/mask/chameleon/attack_self(mob/user) - vchange = !vchange - to_chat(user, "The voice changer is now [vchange ? "on" : "off"]!") - - -/obj/item/clothing/mask/chameleon/drone - //Same as the drone chameleon hat, undroppable and no protection - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - // Can drones use the voice changer part? Let's not find out. - vchange = 0 - -/obj/item/clothing/mask/chameleon/drone/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) - chameleon_action.random_look() - var/datum/action/item_action/chameleon/drone/togglehatmask/togglehatmask_action = new(src) - togglehatmask_action.UpdateButtonIcon() - var/datum/action/item_action/chameleon/drone/randomise/randomise_action = new(src) - randomise_action.UpdateButtonIcon() - -/obj/item/clothing/mask/chameleon/drone/attack_self(mob/user) - to_chat(user, "[src] does not have a voice changer.") - -/obj/item/clothing/shoes/chameleon - name = "black shoes" - icon_state = "black" - desc = "" - permeability_coefficient = 0.05 - resistance_flags = NONE - armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - - var/datum/action/item_action/chameleon/change/chameleon_action - -/obj/item/clothing/shoes/chameleon/Initialize() - . = ..() - chameleon_action = new(src) - chameleon_action.chameleon_type = /obj/item/clothing/shoes - chameleon_action.chameleon_name = "Shoes" - chameleon_action.chameleon_blacklist = typecacheof(/obj/item/clothing/shoes/changeling, only_root_path = TRUE) - chameleon_action.initialize_disguises() - -/obj/item/clothing/shoes/chameleon/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - chameleon_action.emp_randomise() - -/obj/item/clothing/shoes/chameleon/noslip - name = "black shoes" - icon_state = "black" - desc = "" - clothing_flags = NOSLIP - can_be_bloody = FALSE - -/obj/item/clothing/shoes/chameleon/noslip/broken/Initialize() - . = ..() - chameleon_action.emp_randomise(INFINITY) - -/obj/item/storage/backpack/chameleon - name = "backpack" - var/datum/action/item_action/chameleon/change/chameleon_action - -/obj/item/storage/backpack/chameleon/Initialize() - . = ..() - chameleon_action = new(src) - chameleon_action.chameleon_type = /obj/item/storage/backpack - chameleon_action.chameleon_name = "Backpack" - chameleon_action.initialize_disguises() - -/obj/item/storage/backpack/chameleon/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - chameleon_action.emp_randomise() - -/obj/item/storage/backpack/chameleon/broken/Initialize() - . = ..() - chameleon_action.emp_randomise(INFINITY) - -/obj/item/storage/belt/chameleon - name = "toolbelt" - desc = "" - var/datum/action/item_action/chameleon/change/chameleon_action - -/obj/item/storage/belt/chameleon/Initialize() - . = ..() - - chameleon_action = new(src) - chameleon_action.chameleon_type = /obj/item/storage/belt - chameleon_action.chameleon_name = "Belt" - chameleon_action.initialize_disguises() - -/obj/item/storage/belt/chameleon/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.silent = TRUE - -/obj/item/storage/belt/chameleon/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - chameleon_action.emp_randomise() - -/obj/item/storage/belt/chameleon/broken/Initialize() - . = ..() - chameleon_action.emp_randomise(INFINITY) - -/obj/item/radio/headset/chameleon - name = "radio headset" - var/datum/action/item_action/chameleon/change/chameleon_action - -/obj/item/radio/headset/chameleon/Initialize() - . = ..() - chameleon_action = new(src) - chameleon_action.chameleon_type = /obj/item/radio/headset - chameleon_action.chameleon_name = "Headset" - chameleon_action.initialize_disguises() - -/obj/item/radio/headset/chameleon/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - chameleon_action.emp_randomise() - -/obj/item/radio/headset/chameleon/broken/Initialize() - . = ..() - chameleon_action.emp_randomise(INFINITY) - -/obj/item/pda/chameleon - name = "PDA" - var/datum/action/item_action/chameleon/change/pda/chameleon_action - -/obj/item/pda/chameleon/Initialize() - . = ..() - chameleon_action = new(src) - chameleon_action.chameleon_type = /obj/item/pda - chameleon_action.chameleon_name = "PDA" - chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/pda/heads, /obj/item/pda/ai, /obj/item/pda/ai/pai), only_root_path = TRUE) - chameleon_action.initialize_disguises() - -/obj/item/pda/chameleon/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - chameleon_action.emp_randomise() - -/obj/item/pda/chameleon/broken/Initialize() - . = ..() - chameleon_action.emp_randomise(INFINITY) - -/obj/item/stamp/chameleon - var/datum/action/item_action/chameleon/change/chameleon_action - -/obj/item/stamp/chameleon/Initialize() - . = ..() - chameleon_action = new(src) - chameleon_action.chameleon_type = /obj/item/stamp - chameleon_action.chameleon_name = "Stamp" - chameleon_action.initialize_disguises() - -/obj/item/stamp/chameleon/broken/Initialize() - . = ..() - chameleon_action.emp_randomise(INFINITY) - -/obj/item/clothing/neck/chameleon - name = "black tie" - desc = "" - icon_state = "blacktie" - resistance_flags = NONE - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - -/obj/item/clothing/neck/chameleon - var/datum/action/item_action/chameleon/change/chameleon_action - -/obj/item/clothing/neck/chameleon/Initialize() - . = ..() - chameleon_action = new(src) - chameleon_action.chameleon_type = /obj/item/clothing/neck - chameleon_action.chameleon_name = "Neck Accessory" - chameleon_action.initialize_disguises() - -/obj/item/clothing/neck/chameleon/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - chameleon_action.emp_randomise() - -/obj/item/clothing/neck/chameleon/broken/Initialize() - . = ..() - chameleon_action.emp_randomise(INFINITY) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 971b1cf977..8eee5dbe02 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -1,7 +1,7 @@ #define ARMOR_CLASS_NONE 0 -#define ARMOR_CLASS_LIGHT 1 -#define ARMOR_CLASS_MEDIUM 2 -#define ARMOR_CLASS_HEAVY 3 +#define AC_LIGHT 1 +#define AC_MEDIUM 2 +#define AC_HEAVY 3 /obj/item/clothing name = "clothing" @@ -76,11 +76,11 @@ if(href_list["inspect"]) if(!usr.canUseTopic(src, be_close=TRUE)) return - if(armor_class == ARMOR_CLASS_HEAVY) + if(armor_class == AC_HEAVY) to_chat(usr, "AC: HEAVY") - if(armor_class == ARMOR_CLASS_MEDIUM) + if(armor_class == AC_MEDIUM) to_chat(usr, "AC: MEDIUM") - if(armor_class == ARMOR_CLASS_LIGHT) + if(armor_class == AC_LIGHT) to_chat(usr, "AC: LIGHT") /obj/item/proc/get_detail_tag() //this is for extra layers on clothes @@ -222,13 +222,20 @@ tastes = list("dust" = 1, "lint" = 1) foodtype = CLOTH -/obj/item/clothing/attack(mob/M, mob/user, def_zone) +/obj/item/clothing/attack(mob/living/M, mob/living/user, def_zone) if(user.used_intent.type != INTENT_HARM && ismoth(M)) var/obj/item/reagent_containers/food/snacks/clothing/clothing_as_food = new clothing_as_food.name = name if(clothing_as_food.attack(M, user, def_zone)) take_damage(15, sound_effect=FALSE) qdel(clothing_as_food) + else if(M.on_fire) + if(user == M) + return + user.changeNext_move(CLICK_CD_MELEE) + M.visible_message(span_warning("[user] pats out the flames on [M] with [src]!")) + M.adjust_fire_stacks(-2) + take_damage(10, BURN, "fire") else return ..() diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index a699104e57..61747da8fc 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -342,26 +342,6 @@ desc = "" vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS -/obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete - name = "chameleon thermals" - desc = "" - - var/datum/action/item_action/chameleon/change/chameleon_action - -/obj/item/clothing/glasses/thermal/syndi/Initialize() - . = ..() - chameleon_action = new(src) - chameleon_action.chameleon_type = /obj/item/clothing/glasses - chameleon_action.chameleon_name = "Glasses" - chameleon_action.chameleon_blacklist = typecacheof(/obj/item/clothing/glasses/changeling, only_root_path = TRUE) - chameleon_action.initialize_disguises() - -/obj/item/clothing/glasses/thermal/syndi/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - chameleon_action.emp_randomise() - /obj/item/clothing/glasses/thermal/monocle name = "thermoncle" desc = "" diff --git a/code/modules/clothing/glasses/engine_goggles.dm b/code/modules/clothing/glasses/engine_goggles.dm index e574360c35..c2a90e27fa 100644 --- a/code/modules/clothing/glasses/engine_goggles.dm +++ b/code/modules/clothing/glasses/engine_goggles.dm @@ -65,8 +65,6 @@ if(user.glasses != src || !user.client) return switch(mode) - if(MODE_TRAY) - t_ray_scan(user, 8, range) if(MODE_RAD) show_rads() if(MODE_SHUTTLE) diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index d29bc03991..26c549f9c3 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -101,30 +101,6 @@ hud_trait = TRAIT_SECURITY_HUD glass_colour_type = /datum/client_colour/glass_colour/red -/obj/item/clothing/glasses/hud/security/chameleon - name = "chameleon security HUD" - desc = "" - flash_protect = FLASH_PROTECTION_FLASH - - // Yes this code is the same as normal chameleon glasses, but we don't - // have multiple inheritance, okay? - var/datum/action/item_action/chameleon/change/chameleon_action - -/obj/item/clothing/glasses/hud/security/chameleon/Initialize() - . = ..() - chameleon_action = new(src) - chameleon_action.chameleon_type = /obj/item/clothing/glasses - chameleon_action.chameleon_name = "Glasses" - chameleon_action.chameleon_blacklist = typecacheof(/obj/item/clothing/glasses/changeling, only_root_path = TRUE) - chameleon_action.initialize_disguises() - -/obj/item/clothing/glasses/hud/security/chameleon/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - chameleon_action.emp_randomise() - - /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch name = "eyepatch HUD" desc = "" diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 68923f7a08..a27fd3e787 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -45,25 +45,6 @@ QDEL_NULL(alight) return ..() -/obj/item/clothing/head/helmet/sec - can_flashlight = TRUE - -/obj/item/clothing/head/helmet/sec/attackby(obj/item/I, mob/user, params) - if(issignaler(I)) - var/obj/item/assembly/signaler/S = I - if(attached_light) //Has a flashlight. Player must remove it, else it will be lost forever. - to_chat(user, "The mounted flashlight is in the way, remove it first!") - return - - if(S.secured) - qdel(S) - var/obj/item/bot_assembly/secbot/A = new - user.put_in_hands(A) - to_chat(user, "I add the signaler to the helmet.") - qdel(src) - return - return ..() - /obj/item/clothing/head/helmet/alt name = "bulletproof helmet" desc = "" @@ -361,7 +342,7 @@ I.play_tool_sound(src) to_chat(user, "I unscrew [attached_light] from [src].") attached_light.forceMove(drop_location()) - if(Adjacent(user) && !issilicon(user)) + if(Adjacent(user)) user.put_in_hands(attached_light) var/obj/item/flashlight/removed_light = attached_light @@ -394,7 +375,7 @@ /obj/item/clothing/head/helmet/proc/update_helmlight() if(attached_light) if(attached_light.on) - set_light(attached_light.brightness_on) + set_light(attached_light.light_outer_range) else set_light(0) update_icon() diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 62c33dc91c..02ef06bcc0 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -387,7 +387,7 @@ var/message = speech_args[SPEECH_MESSAGE] if(message[1] != "*") message = " [message]" - var/list/french_words = strings("french_replacement.json", "french") + var/list/french_words = strings("darkelf_replacement.json", "darkelf") for(var/key in french_words) var/value = french_words[key] @@ -412,11 +412,6 @@ desc = "" icon_state = "kippah" -/obj/item/clothing/head/medievaljewhat - name = "medieval Jew hat" - desc = "" - icon_state = "medievaljewhat" - /obj/item/clothing/head/taqiyahwhite name = "white taqiyah" desc = "" diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index b1c6dfce7b..fb603573e4 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -204,18 +204,6 @@ dog_fashion = /datum/dog_fashion/head/cardborg -/obj/item/clothing/head/cardborg/equipped(mob/living/user, slot) - ..() - if(ishuman(user) && slot == SLOT_HEAD) - var/mob/living/carbon/human/H = user - if(istype(H.wear_armor, /obj/item/clothing/suit/cardborg)) - var/obj/item/clothing/suit/cardborg/CB = H.wear_armor - CB.disguise(user, src) - -/obj/item/clothing/head/cardborg/dropped(mob/living/user) - ..() - user.remove_alt_appearance("standard_borg_disguise") - /obj/item/clothing/head/wig @@ -363,7 +351,7 @@ return return ..() -/obj/item/clothing/head/foilhat/microwave_act(obj/machinery/microwave/M) +/obj/item/clothing/head/foilhat/heating_act() . = ..() if(!warped) warp_up() diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm deleted file mode 100644 index 8afbc1adce..0000000000 --- a/code/modules/clothing/outfits/ert.dm +++ /dev/null @@ -1,335 +0,0 @@ -/datum/outfit/ert - name = "ERT Common" - - uniform = /obj/item/clothing/under/rank/centcom/officer - shoes = /obj/item/clothing/shoes/combat/swat - gloves = /obj/item/clothing/gloves/combat - ears = /obj/item/radio/headset/headset_cent/alt - -/datum/outfit/ert/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - - var/obj/item/implant/mindshield/L = new/obj/item/implant/mindshield(H) - L.implant(H, null, 1) - - var/obj/item/radio/R = H.ears - R.set_frequency(FREQ_CENTCOM) - R.freqlock = TRUE - - var/obj/item/card/id/W = H.wear_ring - W.registered_name = H.real_name - W.update_label() - -/datum/outfit/ert/commander - name = "ERT Commander" - - id = /obj/item/card/id/ert - suit = /obj/item/clothing/suit/space/hardsuit/ert - glasses = /obj/item/clothing/glasses/hud/security/sunglasses - back = /obj/item/storage/backpack/ert - belt = /obj/item/storage/belt/security/full - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/melee/baton/loaded=1,\ - /obj/item/clothing/mask/gas/sechailer=1,\ - /obj/item/gun/energy/e_gun=1) - l_pocket = /obj/item/switchblade - -/datum/outfit/ert/commander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - - if(visualsOnly) - return - var/obj/item/radio/R = H.ears - R.keyslot = new /obj/item/encryptionkey/heads/captain - R.recalculateChannels() - -/datum/outfit/ert/commander/alert - name = "ERT Commander - High Alert" - - glasses = /obj/item/clothing/glasses/thermal/eyepatch - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/melee/baton/loaded=1,\ - /obj/item/clothing/mask/gas/sechailer/swat=1,\ - /obj/item/gun/energy/pulse/pistol/loyalpin=1) - l_pocket = /obj/item/melee/transforming/energy/sword/saber - -/datum/outfit/ert/security - name = "ERT Security" - - id = /obj/item/card/id/ert/Security - suit = /obj/item/clothing/suit/space/hardsuit/ert/sec - glasses = /obj/item/clothing/glasses/hud/security/sunglasses - back = /obj/item/storage/backpack/ert/security - belt = /obj/item/storage/belt/security/full - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/storage/box/handcuffs=1,\ - /obj/item/clothing/mask/gas/sechailer=1,\ - /obj/item/gun/energy/e_gun/stun=1,\ - /obj/item/melee/baton/loaded=1) - -/datum/outfit/ert/security/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - - if(visualsOnly) - return - - var/obj/item/radio/R = H.ears - R.keyslot = new /obj/item/encryptionkey/heads/hos - R.recalculateChannels() - -/datum/outfit/ert/security/alert - name = "ERT Security - High Alert" - - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/storage/box/handcuffs=1,\ - /obj/item/clothing/mask/gas/sechailer/swat=1,\ - /obj/item/melee/baton/loaded=1,\ - /obj/item/gun/energy/pulse/carbine/loyalpin=1) - - -/datum/outfit/ert/medic - name = "ERT Medic" - - id = /obj/item/card/id/ert/Medical - suit = /obj/item/clothing/suit/space/hardsuit/ert/med - glasses = /obj/item/clothing/glasses/hud/health - back = /obj/item/storage/backpack/ert/medical - belt = /obj/item/storage/belt/medical - r_hand = /obj/item/storage/firstaid/regular - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/melee/baton/loaded=1,\ - /obj/item/clothing/mask/gas/sechailer=1,\ - /obj/item/gun/energy/e_gun=1,\ - /obj/item/reagent_containers/hypospray/combat=1,\ - /obj/item/gun/medbeam=1) - -/datum/outfit/ert/medic/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - - if(visualsOnly) - return - - var/obj/item/radio/R = H.ears - R.keyslot = new /obj/item/encryptionkey/heads/cmo - R.recalculateChannels() - -/datum/outfit/ert/medic/alert - name = "ERT Medic - High Alert" - - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/melee/baton/loaded=1,\ - /obj/item/clothing/mask/gas/sechailer/swat=1,\ - /obj/item/gun/energy/pulse/pistol/loyalpin=1,\ - /obj/item/reagent_containers/hypospray/combat/nanites=1,\ - /obj/item/gun/medbeam=1) - -/datum/outfit/ert/engineer - name = "ERT Engineer" - - id = /obj/item/card/id/ert/Engineer - suit = /obj/item/clothing/suit/space/hardsuit/ert/engi - glasses = /obj/item/clothing/glasses/meson/engine - back = /obj/item/storage/backpack/ert/engineer - belt = /obj/item/storage/belt/utility/full - l_pocket = /obj/item/rcd_ammo/large - r_hand = /obj/item/storage/firstaid/regular - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/melee/baton/loaded=1,\ - /obj/item/clothing/mask/gas/sechailer=1,\ - /obj/item/gun/energy/e_gun=1,\ - /obj/item/construction/rcd/loaded=1) - -/datum/outfit/ert/engineer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - - if(visualsOnly) - return - - var/obj/item/radio/R = H.ears - R.keyslot = new /obj/item/encryptionkey/heads/ce - R.recalculateChannels() - -/datum/outfit/ert/engineer/alert - name = "ERT Engineer - High Alert" - - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/melee/baton/loaded=1,\ - /obj/item/clothing/mask/gas/sechailer/swat=1,\ - /obj/item/gun/energy/pulse/pistol/loyalpin=1,\ - /obj/item/construction/rcd/combat=1) - - -/datum/outfit/centcom_official - name = "CentCom Official" - - uniform = /obj/item/clothing/under/rank/centcom/officer - shoes = /obj/item/clothing/shoes/sneakers/black - gloves = /obj/item/clothing/gloves/color/black - ears = /obj/item/radio/headset/headset_cent - glasses = /obj/item/clothing/glasses/sunglasses - belt = /obj/item/gun/energy/e_gun - l_pocket = /obj/item/pen - back = /obj/item/storage/backpack/satchel - r_pocket = /obj/item/pda/heads - l_hand = /obj/item/clipboard - id = /obj/item/card/id/centcom - -/datum/outfit/centcom_official/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - - var/obj/item/pda/heads/pda = H.r_store - pda.owner = H.real_name - pda.ownjob = "CentCom Official" - pda.update_label() - - var/obj/item/card/id/W = H.wear_ring - W.access = get_centcom_access("CentCom Official") - W.access += ACCESS_WEAPONS - W.assignment = "CentCom Official" - W.registered_name = H.real_name - W.update_label() - -/datum/outfit/ert/commander/inquisitor - name = "Inquisition Commander" - r_hand = /obj/item/nullrod/scythe/talking/chainsword - suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal - backpack_contents = list(/obj/item/storage/box/survival/engineer=1, - /obj/item/clothing/mask/gas/sechailer=1, - /obj/item/gun/energy/e_gun=1) - -/datum/outfit/ert/security/inquisitor - name = "Inquisition Security" - - suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor - - backpack_contents = list(/obj/item/storage/box/survival/engineer=1, - /obj/item/storage/box/handcuffs=1, - /obj/item/clothing/mask/gas/sechailer=1, - /obj/item/gun/energy/e_gun/stun=1, - /obj/item/melee/baton/loaded=1, - /obj/item/construction/rcd/loaded=1) - -/datum/outfit/ert/medic/inquisitor - name = "Inquisition Medic" - - suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor - - backpack_contents = list(/obj/item/storage/box/survival/engineer=1, - /obj/item/melee/baton/loaded=1, - /obj/item/clothing/mask/gas/sechailer=1, - /obj/item/gun/energy/e_gun=1, - /obj/item/reagent_containers/hypospray/combat=1, - /obj/item/reagent_containers/hypospray/combat/heresypurge=1, - /obj/item/gun/medbeam=1) - -/datum/outfit/ert/chaplain/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - - if(visualsOnly) - return - - var/obj/item/radio/R = H.ears - R.keyslot = new /obj/item/encryptionkey/heads/hop - R.recalculateChannels() - -/datum/outfit/ert/chaplain - name = "ERT Chaplain" - - suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor // Chap role always gets this suit - id = /obj/item/card/id/ert/chaplain - glasses = /obj/item/clothing/glasses/hud/health - back = /obj/item/storage/backpack/cultpack - belt = /obj/item/storage/belt/soulstone - backpack_contents = list(/obj/item/storage/box/survival/engineer=1, - /obj/item/nullrod=1, - /obj/item/clothing/mask/gas/sechailer=1, - /obj/item/gun/energy/e_gun=1, - ) - -/datum/outfit/ert/chaplain/inquisitor - name = "Inquisition Chaplain" - - suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor - - belt = /obj/item/storage/belt/soulstone/full/chappy - backpack_contents = list(/obj/item/storage/box/survival/engineer=1, - /obj/item/grenade/chem_grenade/holy=1, - /obj/item/nullrod=1, - /obj/item/clothing/mask/gas/sechailer=1, - /obj/item/gun/energy/e_gun=1, - ) - -/datum/outfit/ert/janitor - name = "ERT Janitor" - - id = /obj/item/card/id/ert/Janitor - suit = /obj/item/clothing/suit/space/hardsuit/ert/jani - glasses = /obj/item/clothing/glasses/night - back = /obj/item/storage/backpack - belt = /obj/item/storage/belt/janitor/full - r_pocket = /obj/item/grenade/chem_grenade/cleaner - l_pocket = /obj/item/grenade/chem_grenade/cleaner - l_hand = /obj/item/storage/bag/trash/bluespace - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/storage/box/lights/mixed=1,\ - /obj/item/melee/baton/loaded=1,\ - /obj/item/clothing/mask/gas/sechailer=1,\ - /obj/item/mop/advanced=1,\ - /obj/item/reagent_containers/glass/bucket=1,\ - /obj/item/grenade/clusterbuster/cleaner=1) - -/datum/outfit/ert/janitor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - - if(visualsOnly) - return - - var/obj/item/radio/R = H.ears - R.keyslot = new /obj/item/encryptionkey/headset_service - R.recalculateChannels() - -/datum/outfit/ert/janitor/heavy - name = "ERT Janitor - Heavy Duty" - r_hand = /obj/item/reagent_containers/spray/chemsprayer/janitor - backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ - /obj/item/storage/box/lights/mixed=1,\ - /obj/item/melee/baton/loaded=1,\ - /obj/item/clothing/mask/gas/sechailer=1,\ - /obj/item/grenade/clusterbuster/cleaner=3) - -/datum/outfit/centcom_intern - name = "CentCom Intern" - - uniform = /obj/item/clothing/under/rank/centcom/intern - shoes = /obj/item/clothing/shoes/sneakers/black - gloves = /obj/item/clothing/gloves/color/black - ears = /obj/item/radio/headset/headset_cent - glasses = /obj/item/clothing/glasses/sunglasses - belt = /obj/item/melee/classic_baton - r_hand = /obj/item/gun/ballistic/rifle/boltaction - back = /obj/item/storage/backpack/satchel - l_pocket = /obj/item/ammo_box/a762 - r_pocket = /obj/item/ammo_box/a762 - id = /obj/item/card/id/centcom - backpack_contents = list(/obj/item/storage/box/survival = 1) - -/datum/outfit/centcom_intern/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - - var/obj/item/card/id/W = H.wear_ring - W.access = get_centcom_access(name) - W.access += ACCESS_WEAPONS - W.assignment = name - W.registered_name = H.real_name - W.update_label() - -/datum/outfit/centcom_intern/leader - name = "CentCom Head Intern" - belt = /obj/item/melee/baton/loaded - suit = /obj/item/clothing/suit/armor/vest - suit_store = /obj/item/gun/ballistic/rifle/boltaction - r_hand = /obj/item/megaphone - head = /obj/item/clothing/head/intern diff --git a/code/modules/clothing/outfits/event.dm b/code/modules/clothing/outfits/event.dm index 18af4e8b66..35788e479d 100644 --- a/code/modules/clothing/outfits/event.dm +++ b/code/modules/clothing/outfits/event.dm @@ -3,13 +3,10 @@ uniform = /obj/item/clothing/under/color/red shoes = /obj/item/clothing/shoes/sneakers/red - suit = /obj/item/clothing/suit/space/santa head = /obj/item/clothing/head/santa back = /obj/item/storage/backpack/santabag r_pocket = /obj/item/flashlight gloves = /obj/item/clothing/gloves/color/red - - box = /obj/item/storage/box/survival/engineer backpack_contents = list(/obj/item/a_gift/anything = 5) /datum/outfit/santa/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) diff --git a/code/modules/clothing/outfits/plasmaman.dm b/code/modules/clothing/outfits/plasmaman.dm deleted file mode 100644 index 9d7b0dd3a0..0000000000 --- a/code/modules/clothing/outfits/plasmaman.dm +++ /dev/null @@ -1,128 +0,0 @@ -/datum/outfit/plasmaman/bar - name = "Bartender Plasmaman" - - head = /obj/item/clothing/head/helmet/space/plasmaman/white - uniform = /obj/item/clothing/under/plasmaman/enviroslacks - -/datum/outfit/plasmaman/chef - name = "Chef Plasmaman" - - head = /obj/item/clothing/head/helmet/space/plasmaman/white - uniform = /obj/item/clothing/under/plasmaman/chef - -/datum/outfit/plasmaman/botany - name = "Botany Plasmaman" - - head = /obj/item/clothing/head/helmet/space/plasmaman/botany - uniform = /obj/item/clothing/under/plasmaman/botany - -/datum/outfit/plasmaman/curator - name = "Curator Plasmaman" - - head = /obj/item/clothing/head/helmet/space/plasmaman/curator - uniform = /obj/item/clothing/under/plasmaman/curator - -/datum/outfit/plasmaman/chaplain - name = "Chaplain Plasmaman" - - head = /obj/item/clothing/head/helmet/space/plasmaman/chaplain - uniform = /obj/item/clothing/under/plasmaman/chaplain - -/datum/outfit/plasmaman/janitor - name = "Janitor Plasmaman" - - head = /obj/item/clothing/head/helmet/space/plasmaman/janitor - uniform = /obj/item/clothing/under/plasmaman/janitor - -/datum/outfit/plasmaman/security - name = "Security Plasmaman" - - head = /obj/item/clothing/head/helmet/space/plasmaman/security - uniform = /obj/item/clothing/under/plasmaman/security - -/datum/outfit/plasmaman/detective - name = "Detective Plasmaman" - - head = /obj/item/clothing/head/helmet/space/plasmaman/white - uniform = /obj/item/clothing/under/plasmaman/enviroslacks - ears = /obj/item/radio/headset/headset_sec - -/datum/outfit/plasmaman/warden - name = "Warden Plasmaman" - - head = /obj/item/clothing/head/helmet/space/plasmaman/security/warden - uniform = /obj/item/clothing/under/plasmaman/security/warden - -/datum/outfit/plasmaman/cargo - name = "Cargo Plasmaman" - - head = /obj/item/clothing/head/helmet/space/plasmaman/cargo - uniform = /obj/item/clothing/under/plasmaman/cargo - -/datum/outfit/plasmaman/mining - name = "Mining Plasmaman" - - head = /obj/item/clothing/head/helmet/space/plasmaman/mining - uniform = /obj/item/clothing/under/plasmaman/mining - -/datum/outfit/plasmaman/medical - name = "Medical Plasmaman" - - head = /obj/item/clothing/head/helmet/space/plasmaman/medical - uniform = /obj/item/clothing/under/plasmaman/medical - -/datum/outfit/plasmaman/viro - name = "Virology Plasmaman" - - head = /obj/item/clothing/head/helmet/space/plasmaman/viro - uniform = /obj/item/clothing/under/plasmaman/viro - -/datum/outfit/plasmaman/chemist - name = "Chemist Plasmaman" - - head = /obj/item/clothing/head/helmet/space/plasmaman/chemist - uniform = /obj/item/clothing/under/plasmaman/chemist - -/datum/outfit/plasmaman/genetics - name = "Genetics Plasmaman" - - head = /obj/item/clothing/head/helmet/space/plasmaman/genetics - uniform = /obj/item/clothing/under/plasmaman/genetics - -/datum/outfit/plasmaman/science - name = "Science Plasmaman" - - head = /obj/item/clothing/head/helmet/space/plasmaman/science - uniform = /obj/item/clothing/under/plasmaman/science - -/datum/outfit/plasmaman/robotics - name = "Robotics Plasmaman" - - head = /obj/item/clothing/head/helmet/space/plasmaman/robotics - uniform = /obj/item/clothing/under/plasmaman/robotics - -/datum/outfit/plasmaman/engineering - name = "Engineering Plasmaman" - - head = /obj/item/clothing/head/helmet/space/plasmaman/engineering - uniform = /obj/item/clothing/under/plasmaman/engineering - -/datum/outfit/plasmaman/atmospherics - name = "Atmospherics Plasmaman" - - head = /obj/item/clothing/head/helmet/space/plasmaman/atmospherics - uniform = /obj/item/clothing/under/plasmaman/atmospherics - -/datum/outfit/plasmaman/mime - name = "Plasmamime" - - head = /obj/item/clothing/head/helmet/space/plasmaman/mime - uniform = /obj/item/clothing/under/plasmaman/mime - mask = /obj/item/clothing/mask/gas/mime - -/datum/outfit/plasmaman/clown - name = "Plasmaclown" - - head = /obj/item/clothing/head/helmet/space/plasmaman/clown - uniform = /obj/item/clothing/under/plasmaman/clown - mask = /obj/item/clothing/mask/gas/clown_hat diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index eae18d6487..1eb8cb4722 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -2,14 +2,10 @@ name = "Special Ops Officer" uniform = /obj/item/clothing/under/syndicate - suit = /obj/item/clothing/suit/space/officer shoes = /obj/item/clothing/shoes/combat/swat gloves = /obj/item/clothing/gloves/combat glasses = /obj/item/clothing/glasses/thermal/eyepatch - ears = /obj/item/radio/headset/headset_cent/commander mask = /obj/item/clothing/mask/cigarette/cigar/havana - head = /obj/item/clothing/head/helmet/space/beret - belt = /obj/item/gun/energy/pulse/pistol/m1911 r_pocket = /obj/item/lighter back = /obj/item/storage/backpack/satchel/leather id = /obj/item/card/id/centcom @@ -25,18 +21,12 @@ W.registered_name = H.real_name W.update_label() - var/obj/item/radio/headset/R = H.ears - R.set_frequency(FREQ_CENTCOM) - R.freqlock = TRUE - /datum/outfit/space name = "Standard Space Gear" uniform = /obj/item/clothing/under/color/grey shoes = /obj/item/clothing/shoes/sneakers/black - suit = /obj/item/clothing/suit/space head = /obj/item/clothing/head/helmet/space - back = /obj/item/tank/jetpack/oxygen mask = /obj/item/clothing/mask/breath /datum/outfit/tournament @@ -46,7 +36,6 @@ shoes = /obj/item/clothing/shoes/sneakers/black suit = /obj/item/clothing/suit/armor/vest head = /obj/item/clothing/head/helmet/thunderdome - r_hand = /obj/item/gun/energy/pulse/destroyer l_hand = /obj/item/kitchen/knife r_pocket = /obj/item/grenade/smokebomb @@ -59,7 +48,6 @@ name = "tournament gangster" uniform = /obj/item/clothing/under/rank/security/detective - suit = /obj/item/clothing/suit/det_suit glasses = /obj/item/clothing/glasses/thermal/monocle head = /obj/item/clothing/head/fedora/det_hat r_hand = /obj/item/gun/ballistic @@ -75,8 +63,6 @@ head = null r_hand = /obj/item/mop l_hand = /obj/item/reagent_containers/glass/bucket - r_pocket = /obj/item/grenade/chem_grenade/cleaner - l_pocket = /obj/item/grenade/chem_grenade/cleaner backpack_contents = list(/obj/item/stack/tile/plasteel=6) /datum/outfit/tournament/janitor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) @@ -86,28 +72,6 @@ var/obj/item/reagent_containers/glass/bucket/bucket = H.get_item_for_held_index(1) bucket.reagents.add_reagent(/datum/reagent/water,70) -/datum/outfit/laser_tag - name = "Laser Tag Red" - - uniform = /obj/item/clothing/under/color/red - shoes = /obj/item/clothing/shoes/sneakers/red - head = /obj/item/clothing/head/helmet/redtaghelm - gloves = /obj/item/clothing/gloves/color/red - ears = /obj/item/radio/headset - suit = /obj/item/clothing/suit/redtag - back = /obj/item/storage/backpack - suit_store = /obj/item/gun/energy/laser/redtag - backpack_contents = list(/obj/item/storage/box=1) - -/datum/outfit/laser_tag/blue - name = "Laser Tag Blue" - uniform = /obj/item/clothing/under/color/blue - shoes = /obj/item/clothing/shoes/sneakers/blue - head = /obj/item/clothing/head/helmet/bluetaghelm - gloves = /obj/item/clothing/gloves/color/blue - suit = /obj/item/clothing/suit/bluetag - suit_store = /obj/item/gun/energy/laser/bluetag - /datum/outfit/pirate name = "Space Pirate" @@ -117,25 +81,10 @@ head = /obj/item/clothing/head/bandana glasses = /obj/item/clothing/glasses/eyepatch -/datum/outfit/pirate/space - suit = /obj/item/clothing/suit/space/pirate - head = /obj/item/clothing/head/helmet/space/pirate/bandana - mask = /obj/item/clothing/mask/breath - suit_store = /obj/item/tank/internals/oxygen - ears = /obj/item/radio/headset/syndicate - id = /obj/item/card/id - -/datum/outfit/pirate/space/captain - head = /obj/item/clothing/head/helmet/space/pirate /datum/outfit/pirate/post_equip(mob/living/carbon/human/H) H.faction |= "pirate" - var/obj/item/radio/R = H.ears - if(R) - R.set_frequency(FREQ_SYNDICATE) - R.freqlock = TRUE - var/obj/item/card/id/W = H.wear_ring if(W) W.registered_name = H.real_name @@ -148,7 +97,6 @@ shoes = /obj/item/clothing/shoes/clown_shoes gloves = /obj/item/clothing/gloves/color/black mask = /obj/item/clothing/mask/gas/clown_hat - ears = /obj/item/radio/headset glasses = /obj/item/clothing/glasses/thermal/monocle suit = /obj/item/clothing/suit/hooded/chaplain_hoodie l_pocket = /obj/item/reagent_containers/food/snacks/grown/banana @@ -174,7 +122,6 @@ gloves = /obj/item/clothing/gloves/color/latex mask = /obj/item/clothing/mask/surgical head = /obj/item/clothing/head/welding - ears = /obj/item/radio/headset glasses = /obj/item/clothing/glasses/thermal/monocle suit = /obj/item/clothing/suit/apron l_pocket = /obj/item/kitchen/knife @@ -194,12 +141,8 @@ uniform = /obj/item/clothing/under/suit/black shoes = /obj/item/clothing/shoes/sneakers/black gloves = /obj/item/clothing/gloves/color/black - ears = /obj/item/radio/headset glasses = /obj/item/clothing/glasses/sunglasses - l_pocket = /obj/item/melee/transforming/energy/sword/saber l_hand = /obj/item/storage/secure/briefcase - id = /obj/item/card/id/syndicate - belt = /obj/item/pda/heads /datum/outfit/assassin/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) var/obj/item/clothing/under/U = H.wear_pants @@ -214,21 +157,8 @@ qdel(briefcase_item) for(var/i = 3 to 0 step -1) SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/stack/spacecash/c1000, null, TRUE, TRUE) - SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/energy/kinetic_accelerator/crossbow, null, TRUE, TRUE) SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/ballistic/revolver/mateba, null, TRUE, TRUE) SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/ammo_box/a357, null, TRUE, TRUE) - SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/grenade/c4/x4, null, TRUE, TRUE) - - var/obj/item/pda/heads/pda = H.belt - pda.owner = H.real_name - pda.ownjob = "Reaper" - pda.update_label() - - var/obj/item/card/id/syndicate/W = H.wear_ring - W.access = get_all_accesses() - W.assignment = "Reaper" - W.registered_name = H.real_name - W.update_label() /datum/outfit/centcom/commander name = "CentCom Commander" @@ -237,7 +167,6 @@ suit = /obj/item/clothing/suit/armor/bulletproof shoes = /obj/item/clothing/shoes/combat/swat gloves = /obj/item/clothing/gloves/combat - ears = /obj/item/radio/headset/headset_cent/commander glasses = /obj/item/clothing/glasses/eyepatch mask = /obj/item/clothing/mask/cigarette/cigar/cohiba head = /obj/item/clothing/head/centhat @@ -258,21 +187,12 @@ W.registered_name = H.real_name W.update_label() -/datum/outfit/ghost_cultist - name = "Cultist Ghost" - - uniform = /obj/item/clothing/under/color/black/ghost - suit = /obj/item/clothing/suit/hooded/cultrobes/alt/ghost - shoes = /obj/item/clothing/shoes/cult/alt/ghost - r_hand = /obj/item/melee/cultblade/ghost - /datum/outfit/wizard name = "Blue Wizard" uniform = /obj/item/clothing/under/color/lightpurple suit = /obj/item/clothing/suit/wizrobe shoes = /obj/item/clothing/shoes/sandal/magic - ears = /obj/item/radio/headset head = /obj/item/clothing/head/wizard r_pocket = /obj/item/teleportation_scroll r_hand = /obj/item/spellbook @@ -314,7 +234,6 @@ head = /obj/item/clothing/head/pirate/captain shoes = /obj/item/clothing/shoes/combat gloves = /obj/item/clothing/gloves/combat - ears = /obj/item/radio/headset/headset_cent glasses = /obj/item/clothing/glasses/thermal/eyepatch suit = /obj/item/clothing/suit/pirate/captain back = /obj/item/storage/backpack/satchel/leather @@ -340,7 +259,6 @@ head = /obj/item/clothing/head/fedora shoes = /obj/item/clothing/shoes/laceup gloves = /obj/item/clothing/gloves/color/black - ears = /obj/item/radio/headset glasses = /obj/item/clothing/glasses/sunglasses r_hand = /obj/item/gun/ballistic/automatic/tommygun id = /obj/item/card/id @@ -366,35 +284,25 @@ name = "Death Commando" uniform = /obj/item/clothing/under/rank/centcom/commander - suit = /obj/item/clothing/suit/space/hardsuit/deathsquad shoes = /obj/item/clothing/shoes/combat/swat gloves = /obj/item/clothing/gloves/combat mask = /obj/item/clothing/mask/gas/sechailer/swat glasses = /obj/item/clothing/glasses/hud/toggle/thermal back = /obj/item/storage/backpack/security - l_pocket = /obj/item/melee/transforming/energy/sword/saber - r_pocket = /obj/item/shield/energy suit_store = /obj/item/tank/internals/emergency_oxygen/double belt = /obj/item/gun/ballistic/revolver/mateba - r_hand = /obj/item/gun/energy/pulse/loyalpin id = /obj/item/card/id/centcom - ears = /obj/item/radio/headset/headset_cent/alt backpack_contents = list(/obj/item/storage/box=1,\ /obj/item/ammo_box/a357=1,\ /obj/item/storage/firstaid/regular=1,\ /obj/item/storage/box/flashbangs=1,\ - /obj/item/flashlight=1,\ - /obj/item/grenade/c4/x4=1) + /obj/item/flashlight=1) /datum/outfit/death_commando/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) if(visualsOnly) return - var/obj/item/radio/R = H.ears - R.set_frequency(FREQ_CENTCOM) - R.freqlock = TRUE - var/obj/item/implant/mindshield/L = new/obj/item/implant/mindshield(H)//Here you go Deuryn L.implant(H, null, 1) @@ -406,25 +314,16 @@ W.registered_name = H.real_name W.update_label() -/datum/outfit/death_commando/officer - name = "Death Commando Officer" - head = /obj/item/clothing/head/helmet/space/beret - /datum/outfit/chrono_agent name = "Timeline Eradication Agent" uniform = /obj/item/clothing/under/color/white - suit = /obj/item/clothing/suit/space/chronos - back = /obj/item/chrono_eraser - head = /obj/item/clothing/head/helmet/space/chronos mask = /obj/item/clothing/mask/breath suit_store = /obj/item/tank/internals/oxygen /datum/outfit/debug //Debug objs plus hardsuit name = "Debug outfit" uniform = /obj/item/clothing/under/misc/patriotsuit - suit = /obj/item/clothing/suit/space/hardsuit/syndi/elite/debug glasses = /obj/item/clothing/glasses/meson/night - ears = /obj/item/radio/headset/headset_cent/commander mask = /obj/item/clothing/mask/gas/welding/up gloves = /obj/item/clothing/gloves/combat belt = /obj/item/storage/belt/utility/chief/full @@ -435,9 +334,6 @@ box = /obj/item/storage/box/debugtools internals_slot = SLOT_S_STORE backpack_contents = list( - /obj/item/construction/rcd/combat=1,\ - /obj/item/melee/transforming/energy/axe=1,\ - /obj/item/storage/part_replacer/bluespace/tier4=1,\ /obj/item/gun/magic/wand/resurrection/debug=1,\ /obj/item/gun/magic/wand/death/debug=1,\ /obj/item/debug/human_spawner=1 diff --git a/code/modules/clothing/outfits/vr.dm b/code/modules/clothing/outfits/vr.dm index cf64474c67..9bb1617edc 100644 --- a/code/modules/clothing/outfits/vr.dm +++ b/code/modules/clothing/outfits/vr.dm @@ -2,7 +2,6 @@ name = "Basic VR" uniform = /obj/item/clothing/under/color/random shoes = /obj/item/clothing/shoes/sneakers/black - ears = /obj/item/radio/headset id = /obj/item/card/id /datum/outfit/vr/pre_equip(mob/living/carbon/human/H) @@ -19,22 +18,9 @@ shoes = /obj/item/clothing/shoes/combat gloves = /obj/item/clothing/gloves/combat back = /obj/item/storage/backpack - id = /obj/item/card/id/syndicate belt = /obj/item/gun/ballistic/automatic/pistol l_pocket = /obj/item/paper/fluff/vr/fluke_ops - backpack_contents = list(/obj/item/storage/box/survival/syndie=1,\ - /obj/item/kitchen/knife/combat/survival) - -/datum/outfit/vr/syndicate/post_equip(mob/living/carbon/human/H) - . = ..() - var/obj/item/uplink/U = new /obj/item/uplink/nuclear_restricted(H, H.key, 80) - H.equip_to_slot_or_del(U, SLOT_IN_BACKPACK) - var/obj/item/implant/weapons_auth/W = new/obj/item/implant/weapons_auth(H) - W.implant(H) - var/obj/item/implant/explosive/E = new/obj/item/implant/explosive(H) - E.implant(H) - H.faction |= ROLE_SYNDICATE - H.update_icons() + backpack_contents = list(/obj/item/kitchen/knife/combat/survival) /obj/item/paper/fluff/vr/fluke_ops name = "Where is my uplink?" diff --git a/code/modules/clothing/rogueclothes/armor.dm b/code/modules/clothing/rogueclothes/armor.dm index fea0cf6a01..fa1b258cad 100644 --- a/code/modules/clothing/rogueclothes/armor.dm +++ b/code/modules/clothing/rogueclothes/armor.dm @@ -24,19 +24,20 @@ experimental_onhip = TRUE // does this do anything on armor I wonder? // blocking_behavior use to block gloves when armor includes them etc sellprice = VALUE_COMMON_GOODS - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = ARMOR_MINIMAL body_parts_covered = CHEST /obj/item/clothing/suit/roguetown/armor/medium // Template, not for use name = "Medium armor template" equip_delay_self = 4 SECONDS - unequip_delay_self = 4 SECONDS + unequip_delay_self = 3 SECONDS anvilrepair = /datum/skill/craft/armorsmithing smeltresult = /obj/item/ingot/steel - armor_class = ARMOR_CLASS_MEDIUM - body_parts_covered = CHEST|VITALS|GROIN|LEGS + armor_class = AC_MEDIUM + armor = ARMOR_SCALE max_integrity = INTEGRITY_STANDARD clothing_flags = CANT_SLEEP_IN + prevent_crits = ALL_EXCEPT_STAB //.................................................................................................................................. @@ -69,19 +70,31 @@ l_sleeve_status = SLEEVE_NOMOD sellprice = VALUE_GAMBESSON - armor_class = ARMOR_CLASS_LIGHT - armor = ARMOR_GAMBESON - body_parts_covered = CHEST|GROIN|ARMS|LEGS|VITALS - prevent_crits = list(BCLASS_CUT, BCLASS_TWIST) + armor_class = AC_LIGHT + armor = ARMOR_PADDED + body_parts_covered = COVERAGE_FULL + prevent_crits = ALL_EXCEPT_CHOP_AND_STAB + +//................ Crimson Marauder ............... // +/obj/item/clothing/suit/roguetown/armor/leather/jacket/sea/marauder + slot_flags = ITEM_SLOT_ARMOR + name = "jinete's linothorax" + desc = "A stained leather cuirass bearing the snarling face of a demon. The tiefling nomads of the Crimsonlands shape this armor to hearken to that which their ancestors wore." + icon_state = "crimson_armor" + sleevetype = "shirt" + nodismemsleeves = TRUE + armor = ARMOR_LEATHER_GOOD + body_parts_covered = CHEST|GROIN|LEGS|VITALS /obj/item/clothing/suit/roguetown/armor/gambeson/light name = "light gambeson" desc = "Thin and the maker skimped on the padding, typically worn by the peasantry to give some protection against cold for the whole body." icon_state = "gambesonl" + color = CLOTHING_LINEN sellprice = VALUE_LIGHT_GAMBESSON - armor = ARMOR_GAMBESON_BAD - prevent_crits = null // It won't help, like, at all. + armor = ARMOR_PADDED_BAD + prevent_crits = MINOR_CRITICALS /obj/item/clothing/suit/roguetown/armor/gambeson/heavy name = "padded gambeson" @@ -89,11 +102,10 @@ icon_state = "gambesonp" sellprice = VALUE_HEAVY_GAMBESSON - armor = ARMOR_GAMBESON_GOOD - prevent_crits = ALL_EXCEPT_CHOP_AND_STAB + armor = ARMOR_PADDED_GOOD /obj/item/clothing/suit/roguetown/armor/gambeson/heavy/dark - color = CLOTHING_BLACK_WARM + color = CLOTHING_DARK_INK //................ Padded Dress ............... // @@ -107,7 +119,7 @@ l_sleeve_status = SLEEVE_NORMAL sellprice = VALUE_PADDED_DRESS - body_parts_covered = CHEST|GROIN|LEGS|ARMS|VITALS + body_parts_covered = COVERAGE_FULL /obj/item/clothing/suit/roguetown/armor/gambeson/heavy/dress/alt icon_state = "armordressalt" @@ -116,11 +128,11 @@ //................ Arming Jacket ............... // /obj/item/clothing/suit/roguetown/armor/gambeson/arming name = "arming jacket" - desc = "Thick quilted cloth, a gambesson for the discerning knight. it is meant to be used under heavier armor." + desc = "Thick quilted cloth, a gambesson for the discerning knight. It is meant to be used under heavier armor." icon_state = "arming" sellprice = VALUE_GAMBESSON+BONUS_VALUE_MODEST - body_parts_covered = CHEST|ARMS|VITALS|GROIN + body_parts_covered = COVERAGE_ALL_BUT_LEGS //................ Stalker Robe ............... // @@ -140,10 +152,10 @@ sleeved = null nodismemsleeves = TRUE - body_parts_covered = CHEST|VITALS + body_parts_covered = COVERAGE_VEST /obj/item/clothing/suit/roguetown/armor/gambeson/light/striped/Initialize() - color = pick(CLOTHING_SALMON, CLOTHING_PALE_BLUE, CLOTHING_PALE_ORANGE, CLOTHING_PALE_GREEN, CLOTHING_PALE_YELLOW) + color = pick(CLOTHING_SALMON, CLOTHING_BERRY_BLUE, CLOTHING_SPRING_GREEN, CLOTHING_PEAR_YELLOW) ..() @@ -168,9 +180,9 @@ smeltresult = /obj/item/ash sellprice = VALUE_LEATHER_ARMOR - armor_class = ARMOR_CLASS_LIGHT - armor = ARMOR_LEATHER - body_parts_covered = CHEST|GROIN|VITALS + armor_class = AC_LIGHT + armor = ARMOR_LEATHER_BAD + body_parts_covered = COVERAGE_TORSO prevent_crits = ALL_EXCEPT_CHOP_AND_STAB max_integrity = INTEGRITY_STANDARD @@ -181,16 +193,16 @@ icon_state = "hidearmor" sellprice = VALUE_LEATHER_ARMOR_FUR - armor = ARMOR_LEATHER_GOOD + armor = ARMOR_LEATHER //................ Splint Mail ............... // -/obj/item/clothing/suit/roguetown/armor/leather/studded +/obj/item/clothing/suit/roguetown/armor/leather/splint name = "splint armor" desc = "The smell of a leather coat, with pieces of recycled metal from old breastplates or cooking utensils riveted to the inside." icon_state = "splint" sellprice = VALUE_LEATHER_ARMOR_PLUS - armor = ARMOR_LEATHER_BEST + armor = ARMOR_LEATHER_GOOD prevent_crits = ALL_EXCEPT_STAB max_integrity = INTEGRITY_STRONG @@ -201,31 +213,30 @@ name = "leather vest" desc = "Obviously no sleeves, won't really protect much but it's at least padded enough to be an armor, and can be worn against the skin snugly." icon_state = "vest" - color = CLOTHING_BROWN + color = CLOTHING_BARK_BROWN blade_dulling = DULLING_BASHCHOP blocksound = SOFTHIT sewrepair = TRUE sleevetype = null sleeved = null - armor = ARMOR_GAMBESON_GOOD - body_parts_covered = CHEST|VITALS + armor = ARMOR_LEATHER_WORST + body_parts_covered = COVERAGE_VEST prevent_crits = CUT_AND_MINOR_CRITS /obj/item/clothing/suit/roguetown/armor/leather/vest/random/Initialize() - color = pick(CLOTHING_BLACK, CLOTHING_BROWN, CLOTHING_GREEN, CLOTHING_PALE_ORANGE) + color = pick(CLOTHING_SOOT_BLACK, CLOTHING_BARK_BROWN, CLOTHING_FOREST_GREEN) ..() //................ Butchers Vest ............... // /obj/item/clothing/suit/roguetown/armor/leather/vest/butcher name = "butchers vest" icon_state = "leathervest" -// item_state = "leathervest" color = "#d69c87" // custom coloring //................ Other Vests ............... // /obj/item/clothing/suit/roguetown/armor/leather/vest/butler - color = CLOTHING_RED + color = CLOTHING_BLOOD_RED /obj/item/clothing/suit/roguetown/armor/leather/vest/butler/Initialize() ..() @@ -238,7 +249,13 @@ return ..() /obj/item/clothing/suit/roguetown/armor/leather/vest/black - color = CLOTHING_BLACK_WARM + color = CLOTHING_DARK_INK + +/obj/item/clothing/suit/roguetown/armor/leather/vest/innkeep // repath to correct padded vest some day + name = "padded vest" + desc = "Dyed green, belongs to the owner of the Drunken Saiga inn." + icon_state = "striped" + color = "#638b45" //................ Jacket ............... // - Has a small storage space @@ -247,7 +264,8 @@ icon_state = "leatherjacketo" desc = "A heavy leather jacket with wooden buttons, favored by workers who can afford it." - body_parts_covered = CHEST|VITALS|ARMS + armor = ARMOR_LEATHER_WORST + body_parts_covered = COVERAGE_SHIRT /obj/item/clothing/suit/roguetown/armor/leather/jacket/ComponentInitialize() . = ..() @@ -266,6 +284,9 @@ for(var/obj/item/I in things) STR.remove_from_storage(I, get_turf(src)) +//................ Leather Jacket ............... // +/obj/item/clothing/suit/roguetown/armor/leather/jacket/toggle // hehe...should be toggleable + //................ Sea Jacket ............... // /obj/item/clothing/suit/roguetown/armor/leather/jacket/sea slot_flags = ITEM_SLOT_ARMOR @@ -274,8 +295,8 @@ icon_state = "sailorvest" sleevetype = "shirt" - armor = ARMOR_LEATHER_BEST - body_parts_covered = CHEST|VITALS + armor = ARMOR_LEATHER_BAD + body_parts_covered = COVERAGE_VEST //................ Silk Coat ............... // /obj/item/clothing/suit/roguetown/armor/leather/jacket/silk_coat @@ -283,14 +304,14 @@ desc = "An expertly padded coat made from the finest silks. Long may live the nobility that dons it." icon_state = "bliaut" sleevetype = "shirt" - allowed_sex = list(FEMALE) sellprice = VALUE_LEATHER_ARMOR_LORD - body_parts_covered = CHEST|LEGS|VITALS|GROIN + armor = ARMOR_LEATHER_BAD + body_parts_covered = COVERAGE_ALL_BUT_ARMS prevent_crits = CUT_AND_MINOR_CRITS /obj/item/clothing/suit/roguetown/armor/leather/jacket/silk_coat/Initialize() - color = pick(CLOTHING_PURPLE, CLOTHING_WHITE,CLOTHING_RED) + color = pick(CLOTHING_PLUM_PURPLE, CLOTHING_WHITE,CLOTHING_BLOOD_RED) ..() //................ Silk Jacket ............... // @@ -300,7 +321,7 @@ desc = "Displaying wealth while keeping your guts safe from blades with thick leather pads underneath." sellprice = VALUE_LEATHER_ARMOR_LORD - body_parts_covered = CHEST|VITALS|LEGS + body_parts_covered = COVERAGE_SHIRT //................ Hand´s Coat ............... // /obj/item/clothing/suit/roguetown/armor/leather/jacket/hand @@ -309,7 +330,7 @@ desc = "A quality silken coat, discretely lined with thin metal platr on the inside to protect its affluent wearer." sellprice = VALUE_LEATHER_ARMOR_LORD - body_parts_covered = CHEST|VITALS|LEGS + body_parts_covered = COVERAGE_ALL_BUT_ARMS //................ Amazon chainkini ............... // @@ -323,23 +344,10 @@ smeltresult = /obj/item/ingot/iron sellprice = VALUE_IRON_ARMOR_UNUSUAL - armor_class = ARMOR_CLASS_LIGHT - armor = MELEE_70___ARROW_NOTHING - body_parts_covered = CHEST|GROIN|VITALS - prevent_crits = ALL_EXCEPT_BLUNT - - -//................ Iron Maille ............... // -/obj/item/clothing/suit/roguetown/armor/chainmail/iron - name = "iron maille" - desc = "A vest made of iron rings. Offers good protection against arrows, stabs and cuts." - icon_state = "ichainmail" - smeltresult = /obj/item/ingot/iron - sellprice = VALUE_IRON_ARMOR - - armor = ARMOR_MAILLE_IRON - armor_class = ARMOR_CLASS_LIGHT - body_parts_covered = CHEST|GROIN|VITALS + armor_class = AC_LIGHT + armor = ARMOR_LEATHER_GOOD + body_parts_covered = COVERAGE_TORSO + prevent_crits = ALL_EXCEPT_BLUNT //This having stab crit protection as a bikini is extremely funny so I will just leave it here. //................ Copper Heart-protector ............... // @@ -351,9 +359,9 @@ smeltresult = /obj/item/ingot/copper sellprice = VALUE_DIRT_CHEAP - armor_class = ARMOR_CLASS_LIGHT - armor = ARMOR_COPPER - body_parts_covered = CHEST|VITALS + armor_class = AC_LIGHT + armor = ARMOR_PLATE_BAD + body_parts_covered = CHEST prevent_crits = ONLY_VITAL_ORGANS max_integrity = INTEGRITY_POOR @@ -362,7 +370,7 @@ //.................................................................................................................................. /*---------------\ | | -| Medium Armor | - Can't dodge? - Max 95% protection +| Medium Armor | | | \---------------*/ @@ -380,10 +388,25 @@ smeltresult = /obj/item/ingot/steel sellprice = VALUE_STEEL_ARMOR - armor_class = ARMOR_CLASS_MEDIUM + armor_class = AC_MEDIUM armor = ARMOR_MAILLE - body_parts_covered = CHEST|GROIN|ARMS|VITALS + body_parts_covered = COVERAGE_ALL_BUT_LEGS prevent_crits = ALL_EXCEPT_BLUNT + max_integrity = INTEGRITY_STRONG + + +//................ Iron Maille ............... // +/obj/item/clothing/suit/roguetown/armor/chainmail/iron + name = "iron maille" + desc = "A short-sleeved shirt made of iron rings. Offers good protection against arrows, stabs and cuts." + icon_state = "ichainmail" + smeltresult = /obj/item/ingot/iron + sellprice = VALUE_IRON_ARMOR + + armor = ARMOR_MAILLE_IRON + body_parts_covered = COVERAGE_TORSO + max_integrity = INTEGRITY_STANDARD + prevent_crits = ALL_EXCEPT_BLUNT_AND_STAB //Non-riveted, iron chain can be broken apart with a powerful thrust. //................ Hauberk ............... // @@ -394,8 +417,7 @@ item_state = "hauberk" sellprice = VALUE_STEEL_ARMOR_FINE - armor = list("melee" = 80, "bullet" = 100, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - body_parts_covered = CHEST|GROIN|ARMS|LEGS|VITALS + body_parts_covered = COVERAGE_FULL /obj/item/clothing/suit/roguetown/armor/chainmail/hauberk/Initialize() . = ..() @@ -417,14 +439,15 @@ item_state = "cuirass" anvilrepair = /datum/skill/craft/armorsmithing smeltresult = /obj/item/ingot/steel + clothing_flags = CANT_SLEEP_IN boobed = FALSE sellprice = VALUE_STEEL_ARMOR - armor_class = ARMOR_CLASS_MEDIUM - armor = list("melee" = 80, "bullet" = 80, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - body_parts_covered = CHEST|VITALS|GROIN + armor_class = AC_MEDIUM + armor = ARMOR_PLATE + body_parts_covered = COVERAGE_TORSO prevent_crits = ALL_EXCEPT_STAB - max_integrity = INTEGRITY_STRONGEST + max_integrity = INTEGRITY_STRONG //................ Grenzelhoft Cuirass ............... // /obj/item/clothing/suit/roguetown/armor/cuirass/grenzelhoft @@ -435,7 +458,7 @@ sleeved = 'icons/roguetown/clothing/onmob/helpers/stonekeep_merc.dmi' boobed = TRUE - armor = list("melee" = 90, "bullet" = 80, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = ARMOR_PLATE_GOOD //................ Black Oak Cuirass ............... // /obj/item/clothing/suit/roguetown/armor/cuirass/elven @@ -457,9 +480,9 @@ smeltresult = /obj/item/ingot/iron sellprice = VALUE_IRON_ARMOR - armor = ARMOR_IRON - body_parts_covered = CHEST|VITALS - max_integrity = INTEGRITY_STRONG + armor = ARMOR_PLATE_BAD + body_parts_covered = COVERAGE_VEST + max_integrity = INTEGRITY_STANDARD //................ Rusted Breastplate ............... // /obj/item/clothing/suit/roguetown/armor/cuirass/iron/rust @@ -469,7 +492,7 @@ item_state = "rusthalf" sellprice = VALUE_IRON_ARMOR/2 - max_integrity = INTEGRITY_STANDARD + max_integrity = INTEGRITY_POOR //................ Scourge Breastplate ............... // /obj/item/clothing/suit/roguetown/armor/cuirass/iron/shadowplate @@ -487,10 +510,9 @@ icon_state = "scale" sellprice = VALUE_STEEL_ARMOR_FINE - armor = list("melee" = 80, "bullet" = 100, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - body_parts_covered = CHEST|VITALS|GROIN|LEGS + body_parts_covered = COVERAGE_ALL_BUT_ARMS prevent_crits = ALL_CRITICAL_HITS - max_integrity = INTEGRITY_STRONGEST + max_integrity = INTEGRITY_STRONG //................ Armored Surcoat ............... // - splint mail looking armor thats colored @@ -516,8 +538,10 @@ pic.color = get_detail_color() add_overlay(pic) -//................ Armored surcoat (Heartfelt Lord) ............... // +//................ Armored surcoat (Heartfelt) ............... // /obj/item/clothing/suit/roguetown/armor/medium/surcoat/heartfelt + desc = "A lordly protection in Heartfelt colors. Masterfully crafted coat of plates, for important nobility." + color = CLOTHING_BLOOD_RED name = "heartfelt kikko gusoku" desc = "A lordly protection in Heartfelt colors. Masterfully crafted coat of hexagonal plates within exotic silk, for important nobility." color = CLOTHING_RED @@ -529,9 +553,15 @@ item_state = "heartfelt_kikko" allowed_sex = list(MALE,FEMALE) - armor = list("melee" = 95, "bullet" = 95, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - body_parts_covered = CHEST|GROIN|VITALS|LEGS|ARMS + body_parts_covered = COVERAGE_FULL +//................ Coat of Plate ............... // +/obj/item/clothing/suit/roguetown/armor/medium/coatplates + name = "coat of plates" + desc = "Armor in the zybantine fashion with thick leather and rows of little steel plates covering vital organs,\ + allowing for more movement than full plate but still giving good protection. Not as durable as maille." + icon_state = "coat_of_plates" + blocksound = PLATEHIT //................ Armored surcoat (Heartfelt Hand) ............... // /obj/item/clothing/suit/roguetown/armor/medium/surcoat/heartfelt/hand name = "heartfelt kikko coat" @@ -544,7 +574,9 @@ sellprice = VALUE_SNOWFLAKE_STEEL - armor = list("melee" = 90, "bullet" = 95, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = ARMOR_MAILLE_GOOD + + /obj/item/clothing/suit/roguetown/armor/medium/surcoat/heartfelt/hand/female name = "heartfelt kikko dress" @@ -564,7 +596,6 @@ name = "steel half-plate" desc = "Plate armor with shoulder guards. An incomplete, bulky set of excellent armor." icon_state = "halfplate" - item_state = "halfplate" anvilrepair = /datum/skill/craft/armorsmithing smeltresult = /obj/item/ingot/steel equip_delay_self = 4 SECONDS @@ -572,9 +603,10 @@ equip_sound = 'sound/foley/equip/equip_armor_plate.ogg' sellprice = VALUE_STEEL_ARMOR clothing_flags = CANT_SLEEP_IN - armor_class = ARMOR_CLASS_HEAVY - armor = list("melee" = 100, "bullet" = 80, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - body_parts_covered = CHEST|GROIN|VITALS + + armor_class = AC_HEAVY + armor = ARMOR_PLATE + body_parts_covered = COVERAGE_ALL_BUT_ARMS prevent_crits = ALL_EXCEPT_STAB max_integrity = INTEGRITY_STRONGEST @@ -592,12 +624,11 @@ icon_state = "plate" item_state = "plate" equip_delay_self = 8 SECONDS - unequip_delay_self = 8 SECONDS + unequip_delay_self = 7 SECONDS sellprice = VALUE_FULL_PLATE - armor_class = ARMOR_CLASS_HEAVY - armor = list("melee" = 100, "bullet" = 100, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - body_parts_covered = CHEST|GROIN|VITALS|LEGS|ARMS + armor = ARMOR_PLATE + body_parts_covered = COVERAGE_FULL //................ Iron Plate Armor ............... // @@ -608,8 +639,7 @@ smeltresult = /obj/item/ingot/iron sellprice = VALUE_IRON_ARMOR*2 - armor = list("melee" = 60, "bullet" = 60, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - body_parts_covered = CHEST|VITALS|GROIN|LEGS + armor = ARMOR_PLATE_BAD max_integrity = INTEGRITY_STRONG @@ -628,7 +658,7 @@ //................ Brigandine ............... // /obj/item/clothing/suit/roguetown/armor/brigandine name = "brigandine" - desc = "A coat with plates concealed inside an exterior fabric. Protects the user from melee impacts and also ranged attacks to an extent." + desc = "A heavy coat with plates concealed inside an exterior fabric. Protects the user from melee impacts and also ranged attacks to an extent." icon_state = "brigandine" blocksound = SOFTHIT equip_delay_self = 4 SECONDS @@ -637,10 +667,11 @@ smeltresult = /obj/item/ingot/steel sellprice = VALUE_BRIGANDINE clothing_flags = CANT_SLEEP_IN - armor_class = ARMOR_CLASS_HEAVY - armor = list("melee" = 90, "bullet" = 80, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - body_parts_covered = CHEST|GROIN|VITALS|ARMS - max_integrity = INTEGRITY_STRONGEST + + armor_class = AC_HEAVY + armor = ARMOR_PLATE_BAD + body_parts_covered = COVERAGE_ALL_BUT_LEGS + max_integrity = INTEGRITY_STRONG prevent_crits = ALL_EXCEPT_STAB /obj/item/clothing/suit/roguetown/armor/brigandine/Initialize() @@ -677,20 +708,6 @@ GLOB.lordcolor -= src return ..() -//................ Coat of Plate ............... // -/obj/item/clothing/suit/roguetown/armor/brigandine/coatplates // Scalemail with Bonus 50& integrity, minus 10% arrow armor. Brigandine for the heraldry I think. - name = "coat of plates" - desc = "A Zybantine leather coat with steel scales woven with miniscule threads of adamantine, \ - ensuring the wearer an optimal defence with forgiving breathability and mobility." - icon_state = "coat_of_plates" - blocksound = PLATEHIT - sellprice = VALUE_SNOWFLAKE_STEEL - - armor_class = ARMOR_CLASS_MEDIUM - armor = list("melee" = 90, "bullet" = 90, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - max_integrity = INTEGRITY_STRONG - prevent_crits = ALL_EXCEPT_STAB - //................ Snowflake Plate ............... // /obj/item/clothing/suit/roguetown/armor/rare @@ -705,9 +722,10 @@ unequip_delay_self = 4 SECONDS sellprice = VALUE_SNOWFLAKE_STEEL clothing_flags = CANT_SLEEP_IN - armor_class = ARMOR_CLASS_HEAVY - armor = ARMOR_STEEL_BEST - body_parts_covered = CHEST|GROIN|ARMS|VITALS + + armor_class = AC_HEAVY + armor = ARMOR_PLATE_GOOD + body_parts_covered = COVERAGE_ALL_BUT_LEGS prevent_crits = ALL_EXCEPT_STAB max_integrity = INTEGRITY_STRONGEST @@ -721,46 +739,37 @@ name = "dark elf plate" desc = "A fine suit of sleek, moulded dark elf metal. Its interlocking nature and light weight allow for increased maneuverability." icon_state = "elfchest" - item_state = "elfchest" allowed_race = list("elf", "half-elf", "dark elf") equip_delay_self = 2 SECONDS unequip_delay_self = 2 SECONDS - armor_class = ARMOR_CLASS_MEDIUM // Elven craft - body_parts_covered = CHEST|VITALS + armor_class = AC_MEDIUM // Elven craft, also a cuirass + body_parts_covered = COVERAGE_VEST /obj/item/clothing/suit/roguetown/armor/rare/elfplate/welfplate name = "elvish plate" desc = "A suit of steel interwoven, through honed elven technique, with hardened bark plates." icon_state = "welfchest" - item_state = "welfchest" /obj/item/clothing/suit/roguetown/armor/rare/dwarfplate name = "dwarvish plate" desc = "Plate armor made out of the sturdiest, finest dwarvish metal armor. It's as heavy and durable as it gets." icon_state = "dwarfchest" - item_state = "dwarfchest" allowed_race = list("dwarf") - max_integrity = INTEGRITY_STRONGEST+100 - /obj/item/clothing/suit/roguetown/armor/rare/grenzelplate name = "grenzelhoftian plate regalia" desc = "Engraved on this masterwork of humen metallurgy lies \"Thrice Slain, Thrice Risen, Thrice Pronged\" alongside the symbol of The Forgotten God in its neck guard." icon_state = "human_swordchest" - item_state = "human_swordchest" allowed_race = list("human") allowed_sex = list(MALE) - max_integrity = INTEGRITY_STRONG+100 - /obj/item/clothing/suit/roguetown/armor/rare/zybanplate name = "kataphractoe scaleskin" desc = "Steel scales woven into armor with miniscule threads of adamantine, \ ensuring the wearer optimal defence with forgiving breathability. \ The sigil of the Zybantu Kataphractoe is embezzeled at the throat guard." icon_state = "human_spearchest" - item_state = "human_spearchest" allowed_race = list("human") allowed_sex = list(MALE) @@ -772,45 +781,53 @@ mob_overlay_icon = 'icons/roguetown/clothing/onmob/armor.dmi' sleeved = 'icons/roguetown/clothing/onmob/helpers/sleeves_armor.dmi' icon_state = "aasimarplate" - item_state = "aasimarplate" allowed_race = list("aasimar") smeltresult = null // No bronze ingots yet, unfortunately sellprice = VALUE_SNOWFLAKE_STEEL+BONUS_VALUE_MODEST // It has great value to historical collectors - body_parts_covered = CHEST|GROIN|VITALS|LEGS + body_parts_covered = COVERAGE_ALL_BUT_ARMS //.................................................................................................................................. /*-----------------\ | Antagonist Armor | \-----------------*/ -//................ Ancient Ceremonial Plate ............... // - ANTAG GEAR Vampire Lord, do not use for other things. Their medium armor -/obj/item/clothing/suit/roguetown/armor/plate/vampire + +//................ Ancient Ceremonial Plate ............... // +/obj/item/clothing/suit/roguetown/armor/cuirass/vampire name = "ancient plate" - desc = "An ornate, ceremonial plate armor worn by the masters of the nite." + desc = "A ornate, ceremonial plate cuirass of considerable age." icon_state = "vplate" - item_state = "vplate" - armor_class = ARMOR_CLASS_MEDIUM - armor = list("melee" = 100, "bullet" = 80, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - body_parts_covered = CHEST|GROIN|VITALS + armor_class = AC_MEDIUM + armor = ARMOR_PLATE_GOOD + body_parts_covered = COVERAGE_TORSO prevent_crits = ALL_CRITICAL_HITS_VAMP -//................ Ancient Haubergon ............... // - ANTAG GEAR Vampire Lord, do not use for other things. They can wear their chain shirt like the other bikers. Their light armor -/obj/item/clothing/suit/roguetown/armor/chainmail/iron/vampire +//................ Ancient Haubergon ............... // +/obj/item/clothing/suit/roguetown/armor/haubergon_vampire name = "ancient haubergon" desc = "A style of armor long out of use. Rests easy on the shoulders." icon_state = "vunder" - item_state = "vunder" + blocksound = CHAINHIT + drop_sound = 'sound/foley/dropsound/chain_drop.ogg' + pickup_sound = 'sound/foley/equip/equip_armor_chain.ogg' + equip_sound = 'sound/foley/equip/equip_armor_chain.ogg' + anvilrepair = /datum/skill/craft/armorsmithing + smeltresult = /obj/item/ingot/steel + sellprice = VALUE_IRON_ARMOR_UNUSUAL - body_parts_covered = CHEST|GROIN|ARMS|VITALS + armor_class = AC_LIGHT + armor = ARMOR_SCALE + body_parts_covered = COVERAGE_ALL_BUT_LEGS + prevent_crits = ALL_EXCEPT_BLUNT //................ Blacksteel Plate ............... // /obj/item/clothing/suit/roguetown/armor/plate/blkknight name = "blacksteel plate" - body_parts_covered = CHEST|GROIN|VITALS|ARMS - armor_class = ARMOR_CLASS_MEDIUM + body_parts_covered = COVERAGE_ALL_BUT_LEGS + armor_class = AC_MEDIUM icon_state = "bkarmor" icon = 'icons/roguetown/clothing/special/blkknight.dmi' mob_overlay_icon = 'icons/roguetown/clothing/special/onmob/blkknight.dmi' @@ -827,8 +844,8 @@ icon_state = "vpants" item_state = "vpants" sewrepair = FALSE - armor = list("melee" = 100, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - prevent_crits = list(BCLASS_BITE, BCLASS_CUT, BCLASS_CHOP, BCLASS_BLUNT, BCLASS_TWIST) // Vampire armors don't protect against lashing, Castlevania reference + armor = ARMOR_PLATE_GOOD + prevent_crits = ALL_CRITICAL_HITS_VAMP // Vampire armors don't protect against lashing, Castlevania reference blocksound = PLATEHIT do_sound = FALSE anvilrepair = /datum/skill/craft/armorsmithing @@ -866,7 +883,7 @@ color = null blocksound = PLATEHIT smeltresult = /obj/item/ingot/steel - armor = list("melee" = 100, "bullet" = 80, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = ARMOR_PLATE_GOOD /obj/item/clothing/gloves/roguetown/chain/vampire name = "ancient ceremonial gloves" diff --git a/code/modules/clothing/rogueclothes/cloaks.dm b/code/modules/clothing/rogueclothes/cloaks.dm index 4a6a25d9c2..6749977f87 100644 --- a/code/modules/clothing/rogueclothes/cloaks.dm +++ b/code/modules/clothing/rogueclothes/cloaks.dm @@ -86,7 +86,7 @@ L.update_inv_cloak() /obj/item/clothing/cloak/tabard/knight - color = CLOTHING_PURPLE + color = CLOTHING_PLUM_PURPLE /obj/item/clothing/cloak/tabard/knight/attack_right(mob/user) return @@ -124,11 +124,11 @@ detail_color = "#b5b004" color = "#249589" if(design == "BlackGold") - detail_color = CLOTHING_YELLOW - color = CLOTHING_BLACK + detail_color = CLOTHING_MUSTARD_YELLOW + color = CLOTHING_SOOT_BLACK if(design == "BlackWhite") detail_color = CLOTHING_WHITE - color = CLOTHING_BLACK + color = CLOTHING_SOOT_BLACK update_icon() if(ismob(loc)) var/mob/L = loc @@ -145,11 +145,11 @@ if(world.time > (the_time + 30 SECONDS)) return if(design == "RedBlack") - detail_color = CLOTHING_BLACK - color = CLOTHING_RED + detail_color = CLOTHING_SOOT_BLACK + color = CLOTHING_BLOOD_RED if(design == "BlackRed") - detail_color = CLOTHING_RED - color = CLOTHING_BLACK + detail_color = CLOTHING_BLOOD_RED + color = CLOTHING_SOOT_BLACK update_icon() if(ismob(loc)) var/mob/L = loc @@ -158,9 +158,9 @@ /obj/item/clothing/cloak/tabard/knight/guard desc = "A tabard with the lord's heraldic colors." - color = CLOTHING_RED + color = CLOTHING_BLOOD_RED detail_tag = "_spl" - detail_color = CLOTHING_PURPLE + detail_color = CLOTHING_PLUM_PURPLE /obj/item/clothing/cloak/tabard/knight/guard/attack_right(mob/user) if(picked) @@ -216,7 +216,7 @@ /obj/item/clothing/cloak/tabard/adept detail_tag = "_psy" - color = CLOTHING_BLACK + color = CLOTHING_SOOT_BLACK detail_color = CLOTHING_WHITE /obj/item/clothing/cloak/tabard/adept/Initialize() @@ -280,9 +280,9 @@ /obj/item/clothing/cloak/stabard/guard desc = "A tabard with the lord's heraldic colors. This one is worn typically by guards." - color = CLOTHING_RED + color = CLOTHING_BLOOD_RED detail_tag = "_spl" - detail_color = CLOTHING_PURPLE + detail_color = CLOTHING_PLUM_PURPLE /obj/item/clothing/cloak/stabard/guard/attack_right(mob/user) if(picked) @@ -337,7 +337,7 @@ return ..() /obj/item/clothing/cloak/stabard/dungeon - color = CLOTHING_BLACK + color = CLOTHING_SOOT_BLACK /obj/item/clothing/cloak/stabard/dungeon/attack_right(mob/user) return @@ -473,9 +473,9 @@ /obj/item/clothing/cloak/stabard/surcoat/guard desc = "A surcoat with the lord's heraldic colors." - color = CLOTHING_RED + color = CLOTHING_BLOOD_RED detail_tag = "_quad" - detail_color = CLOTHING_PURPLE + detail_color = CLOTHING_PLUM_PURPLE /obj/item/clothing/cloak/stabard/surcoat/guard/attack_right(mob/user) if(picked) @@ -537,7 +537,7 @@ // allowed_sex = list("male") allowed_race = list("human", "tiefling", "elf", "aasimar") detail_tag = "_det" - detail_color = CLOTHING_PURPLE + detail_color = CLOTHING_PLUM_PURPLE /obj/item/clothing/cloak/lordcloak/update_icon() cut_overlays() @@ -595,7 +595,7 @@ boobed = TRUE /obj/item/clothing/cloak/apron/brown - color = CLOTHING_BROWN + color = CLOTHING_BARK_BROWN /obj/item/clothing/cloak/apron/waist name = "apron" @@ -607,7 +607,7 @@ boobed = FALSE /obj/item/clothing/cloak/apron/waist/brown - color = CLOTHING_BROWN + color = CLOTHING_BARK_BROWN /obj/item/clothing/cloak/apron/waist/bar color = "#251f1d" @@ -677,27 +677,31 @@ /obj/item/clothing/cloak/raincloak/red - color = CLOTHING_RED + color = CLOTHING_BLOOD_RED /obj/item/clothing/cloak/raincloak/purple - color = CLOTHING_PURPLE + color = CLOTHING_PLUM_PURPLE /obj/item/clothing/cloak/raincloak/mortus name = "funeral cloak" desc = "You're always shrouded by death." - color = CLOTHING_BLACK + color = CLOTHING_SOOT_BLACK /obj/item/clothing/cloak/raincloak/brown - color = CLOTHING_BROWN + color = CLOTHING_BARK_BROWN /obj/item/clothing/cloak/raincloak/green - color = CLOTHING_GREEN + color = CLOTHING_FOREST_GREEN /obj/item/clothing/cloak/raincloak/blue - color = CLOTHING_BLUE + color = CLOTHING_SKY_BLUE + +/obj/item/clothing/cloak/raincloak/makers_guild + name = "guild ceremonial cloak" + color = CLOTHING_MUSTARD_YELLOW /obj/item/clothing/cloak/raincloak/random/Initialize() - color = pick(CLOTHING_RED, CLOTHING_PURPLE, CLOTHING_BLACK, CLOTHING_BROWN, CLOTHING_GREEN, CLOTHING_BLUE) + color = pick(CLOTHING_BLOOD_RED, CLOTHING_PLUM_PURPLE, CLOTHING_SOOT_BLACK, CLOTHING_BARK_BROWN, CLOTHING_FOREST_GREEN, CLOTHING_SKY_BLUE) ..() /obj/item/clothing/head/hooded/rainhood @@ -732,10 +736,10 @@ color = pick("#685542","#66564d") /obj/item/clothing/cloak/raincloak/furcloak/brown - color = "#685542" + color = CLOTHING_MUD_BROWN /obj/item/clothing/cloak/raincloak/furcloak/black - color = "#66564d" + color = CLOTHING_ASH_GREY /obj/item/clothing/head/hooded/rainhood/furhood icon_state = "fur_hood" @@ -756,10 +760,10 @@ slot_flags = ITEM_SLOT_BACK_R|ITEM_SLOT_CLOAK /obj/item/clothing/cloak/cape/knight - color = CLOTHING_PURPLE + color = CLOTHING_PLUM_PURPLE /obj/item/clothing/cloak/cape/guard - color = CLOTHING_RED + color = CLOTHING_BLOOD_RED /obj/item/clothing/cloak/cape/guard/Initialize() . = ..() if(GLOB.lordprimary) @@ -779,7 +783,7 @@ /obj/item/clothing/cloak/cape/archivist icon_state = "puritan_cape" - color = CLOTHING_BLACK + color = CLOTHING_SOOT_BLACK allowed_race = list("human", "tiefling", "elf", "dwarf", "aasimar") /obj/item/clothing/cloak/cape/rogue @@ -881,10 +885,27 @@ inhand_mod = TRUE hoodtype = null toggle_icon_state = FALSE - color = CLOTHING_BLACK + color = CLOTHING_SOOT_BLACK allowed_sex = list(MALE, FEMALE) allowed_race = list("human", "tiefling", "elf", "aasimar") +/obj/item/clothing/cloak/half/ComponentInitialize() + . = ..() + AddComponent(/datum/component/storage/concrete) + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + if(STR) + STR.max_combined_w_class = 3 + STR.max_w_class = WEIGHT_CLASS_NORMAL + STR.max_items = 1 + +/obj/item/clothing/cloak/half/dropped(mob/living/carbon/human/user) + ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + if(STR) + var/list/things = STR.contents() + for(var/obj/item/I in things) + STR.remove_from_storage(I, get_turf(src)) + /obj/item/clothing/cloak/half/shadowcloak name = "stalker cloak" desc = "A heavy leather cloak held together by a gilded pin. The pin depicts a spider with disconnected legs." @@ -897,18 +918,18 @@ desc = "Those who wear, thy should beware, for those who do; never come back as who they once were again." allowed_race = ALL_RACES_LIST body_parts_covered = ARMS|CHEST - armor = ARMOR_STEEL_BAD + armor = ARMOR_MAILLE_GOOD /obj/item/clothing/cloak/half/brown - color = CLOTHING_BROWN + color = CLOTHING_BARK_BROWN /obj/item/clothing/cloak/half/red - color = CLOTHING_RED + color = CLOTHING_BLOOD_RED /obj/item/clothing/cloak/half/vet name = "town watch cloak" icon_state = "guardcloak" - color = CLOTHING_RED + color = CLOTHING_BLOOD_RED allowed_sex = list(MALE) allowed_race = list("human", "tiefling", "aasimar") inhand_mod = FALSE @@ -925,7 +946,7 @@ return ..() /obj/item/clothing/cloak/half/random/Initialize() - color = pick(CLOTHING_RED, CLOTHING_PURPLE, CLOTHING_BLACK, CLOTHING_BROWN, CLOTHING_GREEN, CLOTHING_BLUE) + color = pick(CLOTHING_WINESTAIN_RED, CLOTHING_MUSTARD_YELLOW, CLOTHING_SOOT_BLACK, CLOTHING_BARK_BROWN, CLOTHING_FOREST_GREEN, CLOTHING_BERRY_BLUE) ..() //............... Battle Nun ........................... (unique kit for the role, tabard for aesthetics) @@ -1018,6 +1039,50 @@ inhand_mod = FALSE slot_flags = ITEM_SLOT_BACK_R|ITEM_SLOT_CLOAK +/obj/item/clothing/cloak/wickercloak + name = "wicker cloak" + desc = "A makeshift cloak constructed with mud, sticks and fibers." + icon_state = "wicker_cloak" + item_state = "wicker_cloak" + alternate_worn_layer = CLOAK_BEHIND_LAYER + slot_flags = ITEM_SLOT_BACK_R|ITEM_SLOT_CLOAK + sleeved = 'icons/roguetown/clothing/onmob/cloaks.dmi' + sleevetype = "shirt" + nodismemsleeves = TRUE + inhand_mod = TRUE + allowed_race = list("human", "tiefling", "elf", "aasimar") + +//................ Silk Cape ............... // +/obj/item/clothing/cloak/cape/silk + name = "silk cape" + color = CLOTHING_WET + icon_state = "cape_silk" + item_state = "cape_silk" + boobed = TRUE + sleeved = 'icons/roguetown/clothing/onmob/cloaks.dmi' + sleevetype = "shirt" + nodismemsleeves = TRUE + +/obj/item/clothing/cloak/cape/silk/random/Initialize() + color = RANDOM_NOBLE_DYES + add_overlay(mutable_appearance('icons/roguetown/clothing/cloaks.dmi', "clasp")) + ..() + + +//................ Silk Pantaloons ............... // +/obj/item/clothing/under/roguetown/pantaloons + name = "silk pantaloons" + icon_state = "pantaloons" + item_state = "pantaloons" + color = CLOTHING_WET + r_sleeve_status = SLEEVE_NOMOD + l_sleeve_status = SLEEVE_NOMOD + adjustable = FALSE + +/obj/item/clothing/under/roguetown/pantaloons/random/Initialize() + color = RANDOM_NOBLE_DYES + ..() + /////////////////////////////////////////////////////////////////// // Part of Kaizoku project. Usage ONLY for Stonekeep/Warmonger, // // If the usage is desired, ask monochrome9090 for permission. // diff --git a/code/modules/clothing/rogueclothes/feet.dm b/code/modules/clothing/rogueclothes/feet.dm index 89805909ea..8d3fe4c69c 100644 --- a/code/modules/clothing/rogueclothes/feet.dm +++ b/code/modules/clothing/rogueclothes/feet.dm @@ -27,8 +27,11 @@ gender = PLURAL icon_state = "blackboots" item_state = "blackboots" - armor = list("melee" = 15, "bullet" = 5, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) sellprice = 10 + + armor = ARMOR_LEATHER_BAD + prevent_crits = CUT_AND_MINOR_CRITS + max_integrity = INTEGRITY_STANDARD /obj/item/clothing/shoes/roguetown/nobleboot name = "noble boots" @@ -38,9 +41,12 @@ gender = PLURAL icon_state = "nobleboots" item_state = "nobleboots" - armor = list("melee" = 20, "bullet" = 15, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) sellprice = 10 + armor = ARMOR_LEATHER_BAD + prevent_crits = CUT_AND_MINOR_CRITS + max_integrity = INTEGRITY_STRONGER //Durable. + /obj/item/clothing/shoes/roguetown/shortboots name = "shortboots" color = "#d5c2aa" @@ -48,17 +54,23 @@ gender = PLURAL icon_state = "shortboots" item_state = "shortboots" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + + armor = ARMOR_LEATHER_WORST + prevent_crits = MINOR_CRITICALS + max_integrity = INTEGRITY_STANDARD /obj/item/clothing/shoes/roguetown/ridingboots name = "riding boots" color = "#d5c2aa" desc = "Boots designed for riding a mount." - armor = list("melee" = 20, "bullet" = 10, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) gender = PLURAL icon_state = "ridingboots" item_state = "ridingboots" sellprice = 10 + + armor = ARMOR_LEATHER + prevent_crits = CUT_AND_MINOR_CRITS + max_integrity = INTEGRITY_STRONGER ///obj/item/clothing/shoes/roguetown/ridingboots/Initialize() // . = ..() @@ -71,7 +83,7 @@ icon_state = "simpleshoe" item_state = "simpleshoe" resistance_flags = null - color = "#473a30" + color = CLOTHING_OLD_LEATHER /obj/item/clothing/shoes/roguetown/simpleshoes/white color = null @@ -89,7 +101,7 @@ icon_state = "simpleshoe" item_state = "simpleshoe" resistance_flags = null - color = "#cbcac9" + color = CLOTHING_ASH_GREY sellprice = 20 /obj/item/clothing/shoes/roguetown/gladiator @@ -120,6 +132,10 @@ icon_state = "shalal" item_state = "shalal" sellprice = 15 + + armor = ARMOR_LEATHER_BAD //Unique to a rare adventurer class + prevent_crits = MINOR_CRITICALS + max_integrity = INTEGRITY_STANDARD /obj/item/clothing/shoes/roguetown/tribal name = "tribal shoes" @@ -127,6 +143,10 @@ icon_state = "tribalshoes" item_state = "tribalshoes" sellprice = 3 + + armor = ARMOR_LEATHER_BAD + prevent_crits = MINOR_CRITICALS + max_integrity = INTEGRITY_POOR /obj/item/clothing/shoes/roguetown/boots/armor name = "plated boots" @@ -134,12 +154,8 @@ body_parts_covered = FEET icon_state = "armorboots" item_state = "armorboots" - prevent_crits = list(BCLASS_LASHING, BCLASS_BITE, BCLASS_CUT, BCLASS_CHOP, BCLASS_BLUNT, BCLASS_TWIST) color = null blocksound = PLATEHIT - armor = list("melee" = 100, "bullet" = 80, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - max_integrity = 500 - armor_class = ARMOR_CLASS_HEAVY clothing_flags = CANT_SLEEP_IN anvilrepair = /datum/skill/craft/armorsmithing resistance_flags = FIRE_PROOF @@ -148,28 +164,78 @@ drop_sound = 'sound/foley/dropsound/armor_drop.ogg' break_sound = 'sound/foley/breaksound.ogg' sellprice = 25 + + armor_class = AC_HEAVY + armor = ARMOR_PLATE + prevent_crits = ALL_EXCEPT_STAB + max_integrity = INTEGRITY_STRONG-50 //Peripheral piece, good for 7~ halberd stabs. Minorly penetrated by halberds. /obj/item/clothing/shoes/roguetown/boots/armor/light name = "light plate boots" icon_state = "soldierboots" item_state = "soldierboots" desc = "Lightly armored boots made from iron offering protection against both melee and ranged attacks." - armor = list("melee" = 80, "bullet" = 60, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - max_integrity = 250 - armor_class = ARMOR_CLASS_MEDIUM sellprice = 20 + + armor_class = AC_MEDIUM + armor = ARMOR_PLATE_BAD + prevent_crits = ALL_EXCEPT_STAB + max_integrity = INTEGRITY_STANDARD //Peripheral piece, good for 5~ halberd stabs. Will be pretty badly penetrated by polearms. /obj/item/clothing/shoes/roguetown/boots/leather name = "leather boots" //dropshrink = 0.75 desc = "Boots made out of sturdy leather. Providing light protection against melee attacks." - prevent_crits = list(BCLASS_LASHING, BCLASS_BITE, BCLASS_TWIST) gender = PLURAL icon_state = "leatherboots" item_state = "leatherboots" - armor = list("melee" = 20, "bullet" = 10, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) resistance_flags = FLAMMABLE sellprice = 10 + + armor = ARMOR_LEATHER + prevent_crits = CUT_AND_MINOR_CRITS + max_integrity = INTEGRITY_STANDARD //Slightly thicker, less durable than riding or noble boots. + +/obj/item/clothing/shoes/roguetown/boots/furlinedboots + name = "fur lined boots" + desc = "Leather boots lined with fur." + gender = PLURAL + icon_state = "furlinedboots" + item_state = "furlinedboots" + sewrepair = TRUE + + armor = ARMOR_LEATHER + prevent_crits = ALL_EXCEPT_STAB + max_integrity = INTEGRITY_STRONG + +/obj/item/clothing/shoes/roguetown/boots/furlinedanklets + name = "fur lined anklets" + desc = "Leather anklets lined with fur, foot remains bare." + gender = PLURAL + icon_state = "furlinedanklets" + item_state = "furlinedanklets" + sewrepair = TRUE + is_barefoot = TRUE + + armor = ARMOR_LEATHER_BAD + prevent_crits = CUT_AND_MINOR_CRITS + max_integrity = INTEGRITY_POOR + + + +/obj/item/clothing/shoes/roguetown/boots/clothlinedanklets + name = "cloth lined anklets" + desc = "Cloth anklets lined with with fibers, foot remains bare." + gender = PLURAL + icon_state = "clothlinedanklets" + item_state = "furlinedanklets" + is_barefoot = TRUE + sewrepair = TRUE + + armor = ARMOR_PADDED_BAD + prevent_crits = MINOR_CRITICALS + max_integrity = INTEGRITY_POOR + /obj/item/clothing/shoes/roguetown/jester name = "funny shoes" @@ -183,8 +249,11 @@ icon_state = "grenzelboots" item_state = "grenzelboots" sleeved = 'icons/roguetown/clothing/onmob/helpers/stonekeep_merc.dmi' - armor = list("melee" = 25, "bullet" = 15, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) sellprice = 20 + + armor = ARMOR_LEATHER_GOOD + prevent_crits = ALL_EXCEPT_CHOP_AND_STAB + max_integrity = INTEGRITY_STRONG /obj/item/clothing/shoes/roguetown/boots/rare icon = 'icons/roguetown/clothing/Racial_Armour.dmi' @@ -192,20 +261,22 @@ sleeved = 'icons/roguetown/clothing/onmob/onmob_racial.dmi' sleevetype = null resistance_flags = FIRE_PROOF // All of these are plated - prevent_crits = list(BCLASS_LASHING, BCLASS_BITE, BCLASS_TWIST, BCLASS_CUT, BCLASS_CHOP, BCLASS_BLUNT, BCLASS_STAB) pickup_sound = "rustle" equip_sound = 'sound/foley/equip/equip_armor_plate.ogg' drop_sound = 'sound/foley/dropsound/armor_drop.ogg' break_sound = 'sound/foley/breaksound.ogg' anvilrepair = /datum/skill/craft/armorsmithing - armor = list("melee" = 100, "bullet" = 100, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) clothing_flags = CANT_SLEEP_IN sellprice = 30 + + armor_class = AC_HEAVY + armor = ARMOR_PLATE_GOOD + prevent_crits = ALL_EXCEPT_STAB + max_integrity = INTEGRITY_STRONGER //Peripheral piece, still good for 8~ halberd stabs. /obj/item/clothing/shoes/roguetown/boots/rare/elfplate name = "dark elvish plated boots" desc = "Bizzarrely shaped boots of exquisite dark elven craftsmanship, forged from steel alloyed in ways unbeknownst to every other race." - body_parts_covered = FEET icon_state = "elfshoes" item_state = "elfshoes" allowed_race = list("elf", "half-elf", "dark elf") @@ -228,7 +299,6 @@ allowed_race = list("dwarf") allowed_sex = list(MALE, FEMALE) desc = "Laced with golden bands, these dwarven plated boots glitter with glory as they are used to kick enemy's shins." - body_parts_covered = FEET|LEGS icon_state = "dwarfshoe" item_state = "dwarfshoe" color = null @@ -240,8 +310,7 @@ allowed_sex = list(MALE) desc = "The sabatons that march to the tune of a glorious nation. It is said that the boots \ are gilded with the tears of once native elves of the Grenzeholft lands, \ - eradicated via humen conquest." - body_parts_covered = FEET|LEGS + eradicated via humen conquest." //Maybe consider getting a more serious name and description for this please. icon_state = "human_swordshoes" item_state = "human_swordshoes" color = null @@ -254,7 +323,6 @@ desc = "The segmented plate boots are a recent alteration to the Zybantu Elite, \ many old warriors decorate their own by tieing ribbons and other knick-knacks \ as a homage to the colorful socks they wore in simpler times." - body_parts_covered = FEET|LEGS icon_state = "human_spearshoe" item_state = "human_spearshoe" color = null diff --git a/code/modules/clothing/rogueclothes/gloves.dm b/code/modules/clothing/rogueclothes/gloves.dm index 54a3b988fe..3a57374ba8 100644 --- a/code/modules/clothing/rogueclothes/gloves.dm +++ b/code/modules/clothing/rogueclothes/gloves.dm @@ -16,64 +16,93 @@ sewrepair = TRUE anvilrepair = null smeltresult = /obj/item/ash + max_integrity = INTEGRITY_WORST + + +//.................................................................................................................................. +/*---------------\ +| | +| Light Armor | +| | +\---------------*/ /obj/item/clothing/gloves/roguetown/leather name = "leather gloves" desc = "Gloves made out of sturdy leather. Warm, and offer very small protection against melee attacks." icon_state = "leather_gloves" - armor = list("melee" = 20, "bullet" = 5, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - prevent_crits = list(BCLASS_LASHING, BCLASS_BITE, BCLASS_CUT, BCLASS_TWIST) resistance_flags = null blocksound = SOFTHIT blade_dulling = DULLING_BASHCHOP resistance_flags = FLAMMABLE // Made of leather + armor = ARMOR_LEATHER_BAD + prevent_crits = CUT_AND_MINOR_CRITS + max_integrity = INTEGRITY_POOR + /obj/item/clothing/gloves/roguetown/leather/black - color = CLOTHING_BLACK + color = CLOTHING_SOOT_BLACK + +/obj/item/clothing/gloves/roguetown/leather/feld + name = "feldsher's gloves" + desc = "Improved grip for wielding the tools of the trade." + icon_state = "feldgloves" + +/obj/item/clothing/gloves/roguetown/leather/phys + name = "physicker's gloves" + desc = "Improved grip for wielding disembowled organs." + icon_state = "surggloves" + /obj/item/clothing/gloves/roguetown/fingerless name = "fingerless gloves" desc = "Gloves made out of sturdy leather with the fingers cut off for extra dexterity. They offer almost no protection whatsoever." - armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) icon_state = "fingerless_gloves" - max_integrity = 150 blocksound = SOFTHIT blade_dulling = DULLING_BASHCHOP resistance_flags = FLAMMABLE // Made of leather - break_sound = 'sound/foley/cloth_rip.ogg' - drop_sound = 'sound/foley/dropsound/cloth_drop.ogg' + + armor = ARMOR_MINIMAL + max_integrity = INTEGRITY_POOR /obj/item/clothing/gloves/roguetown/fingerless/shadowgloves - name = "fingerless gloves" desc = "Cloth gloves to absorb palm sweat while leaving the fingers free for fine manipulation." icon_state = "shadowgloves" allowed_race = list("elf", "dark elf") + /obj/item/clothing/gloves/roguetown/angle name = "heavy leather gloves" desc = "A heavier pair of leather gloves with extra padding. These look like they can take some beating. Fair melee protection and decent durability." icon_state = "angle" - armor = list("melee" = 30, "bullet" = 10, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - prevent_crits = list(BCLASS_LASHING, BCLASS_BITE, BCLASS_CUT, BCLASS_CHOP, BCLASS_TWIST) - resistance_flags = null blocksound = SOFTHIT - max_integrity = 250 blade_dulling = DULLING_BASHCHOP - break_sound = 'sound/foley/cloth_rip.ogg' - drop_sound = 'sound/foley/dropsound/cloth_drop.ogg' resistance_flags = FLAMMABLE // Made of leather + armor = ARMOR_LEATHER + prevent_crits = ALL_EXCEPT_CHOP_AND_STAB + max_integrity = INTEGRITY_STRONG + +/obj/item/clothing/gloves/roguetown/angle/grenzel + name = "grenzelhoft gloves" + desc = "Regal gloves of Grenzelhoftian design, more a fashion statement than actual protection." + icon_state = "grenzelgloves" + sleeved = 'icons/roguetown/clothing/onmob/helpers/stonekeep_merc.dmi' + + + +//.................................................................................................................................. +/*---------------\ +| | +| Medium Armor | +| | +\---------------*/ + /obj/item/clothing/gloves/roguetown/chain name = "chain gauntlets" desc = "Gauntlets made out of interwoven steel chains. Average melee protection, though better used to stop arrows from being lethal." icon_state = "cgloves" - armor = list("melee" = 80, "bullet" = 100, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - prevent_crits = list(BCLASS_LASHING, BCLASS_BITE, BCLASS_TWIST, BCLASS_CUT, BCLASS_CHOP, BCLASS_STAB) - armor_class = ARMOR_CLASS_MEDIUM - clothing_flags = CANT_SLEEP_IN resistance_flags = null blocksound = CHAINHIT - max_integrity = 300 blade_dulling = DULLING_BASHCHOP equip_sound = 'sound/foley/equip/equip_armor_chain.ogg' pickup_sound = "rustle" @@ -83,26 +112,43 @@ smeltresult = null sewrepair = FALSE + armor_class = AC_MEDIUM + armor = ARMOR_MAILLE + prevent_crits = ALL_EXCEPT_BLUNT + max_integrity = INTEGRITY_STRONG //250 Integrity, good for 7~ halberd stabs. With stab crit protection, still invaluable. + /obj/item/clothing/gloves/roguetown/chain/iron name = "iron chain gauntlets" icon_state = "icgloves" desc = "Gauntlets made out of interwoven iron chains. Decent melee protection, but are better suited to stop arrows than blades." - armor = list("melee" = 60, "bullet" = 80, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - max_integrity = 250 + + armor = ARMOR_MAILLE_IRON + prevent_crits = ALL_EXCEPT_BLUNT_AND_STAB //Non-riveted, iron chain can be broken apart with a powerful thrust. + max_integrity = INTEGRITY_STANDARD //200 Integrity, good for 5~ halberd stabs. + +/obj/item/clothing/gloves/roguetown/chain/iron/shadowgauntlets + name = "darkplate gauntlets" + desc = "Gauntlets with gilded fingers fashioned into talons. The tips are all too dull to be of harm." + icon_state = "shadowgauntlets" + allowed_race = list("elf", "dark elf") + max_integrity = INTEGRITY_STRONG + + +//.................................................................................................................................. +/*---------------\ +| | +| Heavy Armor | +| | +\---------------*/ /obj/item/clothing/gloves/roguetown/plate name = "plate gauntlets" desc = "Plated gauntlets made out of steel. Offers the best protection against melee attacks." icon_state = "gauntlets" - armor = list("melee" = 100, "bullet" = 80, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - prevent_crits = list(BCLASS_LASHING, BCLASS_BITE, BCLASS_CHOP, BCLASS_CUT, BCLASS_BLUNT, BCLASS_TWIST) - armor_class = ARMOR_CLASS_HEAVY - clothing_flags = CANT_SLEEP_IN blocksound = PLATEHIT equip_delay_self = 25 unequip_delay_self = 25 body_parts_covered = ARMS|HANDS - max_integrity = 350 blade_dulling = DULLING_BASH equip_sound = 'sound/foley/equip/equip_armor_plate.ogg' pickup_sound = "rustle" @@ -112,26 +158,10 @@ sewrepair = FALSE smeltresult = null -/obj/item/clothing/gloves/roguetown/chain/iron/shadowgauntlets - name = "darkplate gauntlets" - desc = "Gauntlets with gilded fingers fashioned into talons. The tips are all too dull to be of harm." - icon_state = "shadowgauntlets" - allowed_race = list("elf", "dark elf") - -/obj/item/clothing/gloves/roguetown/grenzelgloves - name = "grenzelhoft gloves" - desc = "Regal gloves of Grenzelhoftian design, more a fashion statement than actual protection." - icon_state = "grenzelgloves" - item_state = "grenzelgloves" - sleeved = 'icons/roguetown/clothing/onmob/helpers/stonekeep_merc.dmi' - armor = list("melee" = 20, "bullet" = 5, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - prevent_crits = list(BCLASS_LASHING, BCLASS_BITE, BCLASS_TWIST, BCLASS_CUT, BCLASS_BLUNT) - resistance_flags = null - blocksound = SOFTHIT - blade_dulling = DULLING_BASHCHOP - break_sound = 'sound/foley/cloth_rip.ogg' - drop_sound = 'sound/foley/dropsound/cloth_drop.ogg' - resistance_flags = FLAMMABLE // Made of cloth + armor_class = AC_HEAVY + armor = ARMOR_PLATE + prevent_crits = ALL_EXCEPT_STAB + max_integrity = INTEGRITY_STRONG //250 Integrity, good for 7~ halberd stabs. /obj/item/clothing/gloves/roguetown/rare icon = 'icons/roguetown/clothing/Racial_Armour.dmi' @@ -145,59 +175,47 @@ blocksound = PLATEHIT body_parts_covered = HANDS blade_dulling = DULLING_BASH - armor = list("melee" = 100, "bullet" = 100, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - max_integrity = 400 sewrepair = FALSE anvilrepair = /datum/skill/craft/armorsmithing smeltresult = /obj/item/ingot/steel - clothing_flags = CANT_SLEEP_IN - prevent_crits = list(BCLASS_LASHING, BCLASS_BITE, BCLASS_CHOP, BCLASS_CUT, BCLASS_BLUNT, BCLASS_TWIST) + armor_class = AC_HEAVY + armor = ARMOR_PLATE_GOOD + max_integrity = INTEGRITY_STRONG + prevent_crits = ALL_CRITICAL_HITS //Full crit protection, very unlikely to be penetrated, takes 8 halberd stabs to break. /obj/item/clothing/gloves/roguetown/rare/elfplate name = "dark elf plate gauntlets" desc = "Plate gauntlets of mystic dark elven alloy, lightweight yet incredibly protective. Typically worn by elite bladesingers." - item_state = "elfhand" icon_state = "elfhand" allowed_race = list("elf", "half-elf", "dark elf") - break_sound = 'sound/foley/breaksound.ogg' - drop_sound = 'sound/foley/dropsound/armor_drop.ogg' /obj/item/clothing/gloves/roguetown/rare/elfplate/welfplate name = "elvish plate gauntlets" desc = "Plate gauntlets of mystic elven alloy, lightweight yet incredibly protective. Typically worn by elite bladesingers." - item_state = "welfhand" icon_state = "welfhand" /obj/item/clothing/gloves/roguetown/rare/dwarfplate name = "dwarvish plate gauntlets" desc = "Plated gauntlets of masterwork dwarven smithing, the pinnacle of protection for one's hands." - item_state = "dwarfhand" icon_state = "dwarfhand" allowed_race = list("dwarf") allowed_sex = list(MALE, FEMALE) - equip_delay_self = 25 - unequip_delay_self = 25 - break_sound = 'sound/foley/breaksound.ogg' - drop_sound = 'sound/foley/dropsound/armor_drop.ogg' /obj/item/clothing/gloves/roguetown/rare/grenzelplate name = "grenzelhoftian plate gauntlets" desc = "Battling the Zybantus led to the exchange of military ideas. The Grenzelhoft adopted refined chain and plate armaments to better allow their knights unmatchable resilience against the enemies of their Empire." - item_state = "human_swordhand" icon_state = "human_swordhand" allowed_race = list("human") allowed_sex = list(MALE) - break_sound = 'sound/foley/breaksound.ogg' - drop_sound = 'sound/foley/dropsound/armor_drop.ogg' /obj/item/clothing/gloves/roguetown/rare/zybanplate name = "kataphractoe claw gauntlets" desc = "Interwoven beautifully with layers of silk, chain and plate, these gauntlets grant unmatched coverage while allowing maximum mobility. Both useful to the Zybantu's ever-growing slave-empire." - item_state = "human_spearhand" icon_state = "human_spearhand" allowed_race = list("human") allowed_sex = list(MALE) + break_sound = 'sound/foley/breaksound.ogg' drop_sound = 'sound/foley/dropsound/armor_drop.ogg' diff --git a/code/modules/clothing/rogueclothes/hats.dm b/code/modules/clothing/rogueclothes/hats.dm index a76b235352..6478e1ebcd 100644 --- a/code/modules/clothing/rogueclothes/hats.dm +++ b/code/modules/clothing/rogueclothes/hats.dm @@ -14,7 +14,7 @@ sewrepair = TRUE anvilrepair = null smeltresult = /obj/item/ash // Helmets have pre-defined smeltresults, this is for hats - body_parts_covered = HEAD|HAIR + body_parts_covered = COVERAGE_SKULL sellprice = VALUE_CHEAP_CLOTHING max_integrity = INTEGRITY_WORST @@ -75,7 +75,10 @@ dynamic_hair_suffix = "" /obj/item/clothing/head/roguetown/headband/red - color = CLOTHING_RED + color = CLOTHING_BLOOD_RED + +/obj/item/clothing/head/roguetown/headband/blue + color = CLOTHING_MAGE_BLUE /obj/item/clothing/head/roguetown/softcap name = "soft cap" @@ -124,14 +127,13 @@ desc = "A comfortable and fashionable headgear." icon_state = "chap_alt" flags_inv = HIDEEARS - color = CLOTHING_PINK /obj/item/clothing/head/roguetown/chaperon/greyscale/random/Initialize() . = ..() - color = pick(CLOTHING_TEAL, CLOTHING_GREEN, CLOTHING_ORANGE, CLOTHING_MAJENTA, CLOTHING_YELLOW,CLOTHING_SALMON, CLOTHING_PALE_BLUE, CLOTHING_PALE_ORANGE, CLOTHING_PALE_GREEN, CLOTHING_PALE_YELLOW) + color = pick(CLOTHING_ROYAL_TEAL, CLOTHING_FOREST_GREEN, CLOTHING_FYRITIUS_DYE, CLOTHING_ROYAL_MAJENTA, CLOTHING_MUSTARD_YELLOW,CLOTHING_SALMON, CLOTHING_SKY_BLUE, CLOTHING_YELLOW_OCHRE, CLOTHING_RED_OCHRE, CLOTHING_RUSSET) /obj/item/clothing/head/roguetown/chaperon/greyscale/chaperonsecondary - color = CLOTHING_PURPLE + color = CLOTHING_PLUM_PURPLE /obj/item/clothing/head/roguetown/chaperon/greyscale/chaperonsecondary/Initialize() ..() @@ -168,8 +170,8 @@ icon_state = "fancyhat" sellprice = VALUE_FINE_CLOTHING -/obj/item/clothing/head/roguetown/courtierhat - name = "fancy hat" +/obj/item/clothing/head/roguetown/fashionablehat + name = "fashionable hat" icon_state = "courtier" flags_inv = HIDEEARS sellprice = VALUE_FINE_CLOTHING @@ -202,21 +204,24 @@ body_parts_covered = NECK +/obj/item/clothing/head/roguetown/roguehood/uncolored + color = CLOTHING_LINEN + /obj/item/clothing/head/roguetown/roguehood/brown - color = CLOTHING_BROWN + color = CLOTHING_BARK_BROWN /obj/item/clothing/head/roguetown/roguehood/red - color = CLOTHING_RED + color = CLOTHING_BLOOD_RED /obj/item/clothing/head/roguetown/roguehood/black - color = CLOTHING_BLACK + color = CLOTHING_SOOT_BLACK /obj/item/clothing/head/roguetown/roguehood/random/Initialize() - color = pick("#544236", "#435436", "#543836", "#79763f") + color = pick( CLOTHING_PEASANT_BROWN, CLOTHING_SPRING_GREEN, CLOTHING_CHESTNUT, CLOTHING_YELLOW_OCHRE) ..() /obj/item/clothing/head/roguetown/roguehood/mage/Initialize() - color = pick("#4756d8", "#759259", "#bf6f39", "#c1b144") + color = pick(CLOTHING_MAGE_BLUE, CLOTHING_MAGE_GREEN, CLOTHING_MAGE_ORANGE, CLOTHING_MAGE_YELLOW) ..() /obj/item/clothing/head/roguetown/roguehood/AdjustClothes(mob/user) @@ -240,12 +245,6 @@ H.update_inv_head() user.update_fov_angles() -//................ Keffiyeh ............... // -/obj/item/clothing/head/roguetown/roguehood/shalal - name = "keffiyeh" - desc = "An eastern scarf usually worn around the head and neck." - icon_state = "shalal" - dropshrink = 0.8 /*------------\ @@ -261,7 +260,7 @@ default_hidden = HIDEEARS|HIDEHAIR dropshrink = 0.8 - armor = ARMOR_MINOR + armor = ARMOR_WEAK prevent_crits = MINOR_CRITICALS @@ -269,10 +268,10 @@ /obj/item/clothing/head/roguetown/padded/deathface name = "death shroud" desc = "When inducted into the cult of Necra, the supplicant must make a talisman from the remains of a deceased loved one. Many favor a chin-guard made from a jawbone." - icon_state = "necrahood" + icon_state = "deathface" flags_inv = HIDEEARS | HIDEHAIR | HIDEFACIALHAIR - armor = ARMOR_MINOR + armor = ARMOR_WEAK prevent_crits = MINOR_CRITICALS //................ Death Shroud ............... // - Necra headwear that conceals indentity @@ -319,7 +318,7 @@ worn_y_dimension = 64 resistance_flags = FIRE_PROOF // Made of metal - armor = ARMOR_MINOR + armor = ARMOR_WEAK //................ Sun Hood ............... // - Basic Astrata Acolyte @@ -348,7 +347,7 @@ default_hidden = HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR resistance_flags = FIRE_PROOF - armor = ARMOR_MINOR + armor = ARMOR_WEAK body_parts_covered = FULL_HEAD | NECK prevent_crits = MINOR_CRITICALS @@ -481,7 +480,7 @@ /obj/item/clothing/head/roguetown/tophat name = "teller's hat" icon_state = "tophat" - color = CLOTHING_BLACK + color = CLOTHING_SOOT_BLACK @@ -493,9 +492,6 @@ \------------------*/ /obj/item/clothing/head/roguetown/helmet - name = "nasal helmet" - desc = "A steel nasal helmet, usually worn by the guards of any respectable fief." - icon_state = "nasal" equip_sound = 'sound/foley/equip/equip_armor.ogg' drop_sound = 'sound/foley/dropsound/armor_drop.ogg' break_sound = 'sound/foley/breaksound.ogg' @@ -508,33 +504,84 @@ sellprice = VALUE_IRON_ITEM clothing_flags = CANT_SLEEP_IN - armor = ARMOR_IRON_GOOD - body_parts_covered = HEAD|HAIR|NOSE + armor = ARMOR_PLATE_BAD + body_parts_covered = COVERAGE_SKULL prevent_crits = ALL_EXCEPT_STAB + + +//................ Nasal Helmet ............... // +/obj/item/clothing/head/roguetown/helmet/nasal + name = "nasal helmet" + desc = "A steel nasal helmet, usually worn by the guards of any respectable fief." + icon_state = "nasal" + sellprice = VALUE_CHEAP_IRON_HELMET + + body_parts_covered = COVERAGE_NASAL max_integrity = INTEGRITY_STANDARD +//................ Crimson Marauder ............... // +/obj/item/clothing/head/roguetown/helmet/ironpot/marauder + name = "Jinete's Caspon" + desc = "A solid bronze helmet from the age of the Apotheosis war. It has been reinforced and decorated for hundreds of yils, the symbol of pride for any Jinete, if not entirely outdated and ceremonial" + icon_state = "crimson_marauder" + mob_overlay_icon = 'icons/roguetown/clothing/onmob/64x64/head.dmi' + bloody_icon = 'icons/effects/blood64x64.dmi' + bloody_icon_state = "helmetblood_big" + worn_x_dimension = 64 + worn_y_dimension = 64 + flags_inv = HIDEEARS + sellprice = VALUE_LEATHER_HELMET/2 + armor = ARMOR_PLATE + body_parts_covered = NECK|HAIR|EARS|HEAD + //................ Skull Cap ............... // /obj/item/clothing/head/roguetown/helmet/skullcap name = "skull cap" desc = "A humble iron helmet. The most standard and antiquated protection for one's head from harm." icon_state = "skullcap" - smeltresult = /obj/item/ash sellprice = VALUE_CHEAP_IRON_HELMET - armor = ARMOR_IRON - body_parts_covered = HEAD|HAIR|EARS max_integrity = INTEGRITY_POOR +//............... Grenzelhoft Plume Hat ............... // - worn over a skullcap +/obj/item/clothing/head/roguetown/helmet/skullcap/grenzelhoft + name = "grenzelhoft plume hat" + desc = "Slaying foul creachers or fair maidens: Grenzelhoft stands." + icon_state = "grenzelhat" + item_state = "grenzelhat" + sleeved = 'icons/roguetown/clothing/onmob/helpers/stonekeep_merc.dmi' + detail_tag = "_detail" + dynamic_hair_suffix = "" + colorgrenz = TRUE + sellprice = VALUE_FANCY_HAT + +/obj/item/clothing/head/roguetown/helmet/skullcap/grenzelhoft/update_icon() + cut_overlays() + if(get_detail_tag()) + var/mutable_appearance/pic = mutable_appearance(icon(icon, "[icon_state][detail_tag]")) + pic.appearance_flags = RESET_COLOR + if(get_detail_color()) + pic.color = get_detail_color() + add_overlay(pic) + +//................ Cultist Hood ............... // +/obj/item/clothing/head/roguetown/helmet/skullcap/cult + name = "ominous hood" + desc = "It echoes with ominous laughter. Worn over a skullcap" + icon_state = "warlockhood" + dynamic_hair_suffix = "" + flags_inv = HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + + body_parts_covered = NECK|HAIR|EARS|HEAD + + //................ Horned Cap ............... // /obj/item/clothing/head/roguetown/helmet/horned name = "horned cap" desc = "A crude horned cap usually worn by brute barbarians to invoke fear unto their enemies." icon_state = "hornedcap" - smeltresult = /obj/item/ash sellprice = VALUE_CHEAP_IRON_HELMET - body_parts_covered = HEAD|HAIR|EARS - //................ Winged Cap ............... // /obj/item/clothing/head/roguetown/helmet/winged name = "winged cap" @@ -545,9 +592,6 @@ bloody_icon = 'icons/effects/blood64x64.dmi' bloody_icon_state = "helmetblood_big" - body_parts_covered = HEAD|HAIR - - //................ Kettle Helmet ............... // /obj/item/clothing/head/roguetown/helmet/kettle name = "kettle helmet" @@ -559,23 +603,63 @@ worn_x_dimension = 64 worn_y_dimension = 64 flags_inv = HIDEEARS - smeltresult = /obj/item/ash sellprice = VALUE_CHEAP_IRON_HELMET - armor = ARMOR_STEEL_BAD - body_parts_covered = HEAD|HAIR + body_parts_covered = COVERAGE_HEAD -//................ CULTIST HOOD ............... // -/obj/item/clothing/head/roguetown/helmet/leather/hood_ominous/cult - name = "ominous hood" - desc = "It echoes with ominous laughter." - icon_state = "warlockhood" - dynamic_hair_suffix = "" - flags_inv = HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - sellprice = VALUE_LEATHER_HELMET/2 +//................ Kettle Helmet (Slitted)............... // +/obj/item/clothing/head/roguetown/helmet/kettle/slit + name = "kettle helmet" + desc = "A lightweight steel helmet generally worn by crossbowmen and garrison archers. This one has eyeslits for the paranoid." + icon_state = "slitkettle" - armor = ARMOR_STEEL_BAD + +//................ Iron Pot Helmet ............... // +/obj/item/clothing/head/roguetown/helmet/ironpot + name = "pot helmet" + desc = "Simple iron helmet with a noseguard, designs like those are outdated but they are simple to make in big numbers." + icon_state = "ironpot" + flags_inv = HIDEEARS + sellprice = VALUE_IRON_HELMET + + body_parts_covered = COVERAGE_HEAD_NOSE + + +//................ Copper Lamellar Cap ............... // +/obj/item/clothing/head/roguetown/helmet/coppercap + name = "lamellar cap" + desc = "A heavy lamellar cap made out of copper, a primitive material with an effective design to keep the head safe" + icon_state = "lamellar" + flags_inv = HIDEEARS + smeltresult = /obj/item/ingot/copper + sellprice = VALUE_LEATHER_HELMET // until copper/new mats properly finished and integrated this is a stopgap + + armor = ARMOR_PADDED_GOOD + body_parts_covered = COVERAGE_HEAD + prevent_crits = ONLY_VITAL_ORGANS + max_integrity = INTEGRITY_POOR + +//............... Battle Nun ........................... (unique kit for the role, iron coif mechanically.) +/obj/item/clothing/head/roguetown/helmet/battlenun + name = "veil over coif" + desc = "A gleaming coif of metal half-hidden by a black veil." + icon_state = "battlenun" + dynamic_hair_suffix = "" // this hides all hair + flags_inv = HIDEEARS|HIDEHAIR + equip_sound = 'sound/foley/equip/cloak_equip.ogg' + pickup_sound = 'sound/foley/equip/cloak_take_off.ogg' + break_sound = 'sound/foley/cloth_rip.ogg' + blocksound = CHAINHIT + resistance_flags = FIRE_PROOF + + armor = ARMOR_MAILLE body_parts_covered = NECK|HAIR|EARS|HEAD + prevent_crits = ALL_EXCEPT_BLUNT + + +/*-------------\ +| Steel Helmet | +\-------------*/ //................ Sallet ............... // /obj/item/clothing/head/roguetown/helmet/sallet @@ -586,9 +670,9 @@ smeltresult = /obj/item/ingot/steel sellprice = VALUE_STEEL_HELMET - armor = ARMOR_STEEL_PARTIAL - body_parts_covered = HEAD|HAIR|EARS - max_integrity = INTEGRITY_STRONG + armor = ARMOR_PLATE + body_parts_covered = COVERAGE_HEAD + max_integrity = INTEGRITY_STRONGER //................ Elf Sallet ............... // /obj/item/clothing/head/roguetown/helmet/sallet/elven // blackoak merc helmet @@ -620,79 +704,10 @@ smeltresult = /obj/item/ingot/steel sellprice = VALUE_STEEL_HELMET - body_parts_covered = HEAD|HAIR|EARS - max_integrity = INTEGRITY_STRONG - - -//................ Iron Pot Helmet ............... // -/obj/item/clothing/head/roguetown/helmet/ironpot - name = "pot helmet" - desc = "Simple iron helmet with a noseguard, designs like those are outdated but they are simple to make in big numbers." - icon_state = "ironpot" - flags_inv = HIDEEARS - smeltresult = /obj/item/ingot/iron - sellprice = VALUE_IRON_HELMET - - armor = ARMOR_LEATHER_BEST // splint mail, best light armor level - body_parts_covered = HEAD|HAIR|NOSE|EARS + body_parts_covered = COVERAGE_HEAD + max_integrity = INTEGRITY_STRONGER -//................ Copper Lamellar Cap ............... // -/obj/item/clothing/head/roguetown/helmet/coppercap - name = "lamellar cap" - desc = "A heavy lamellar cap made out of copper, a primitive material with an effective design to keep the head safe" - icon_state = "lamellar" - flags_inv = HIDEEARS - smeltresult = /obj/item/ingot/copper - sellprice = VALUE_LEATHER_HELMET // until copper/new mats properly finished and integrated this is a stopgap - - armor = ARMOR_COPPER - body_parts_covered = HEAD|HAIR|EARS - prevent_crits = ONLY_VITAL_ORGANS - max_integrity = INTEGRITY_POOR - -//............... Battle Nun ........................... (unique kit for the role, iron coif mechanically.) -/obj/item/clothing/head/roguetown/helmet/battlenun - name = "veil over coif" - desc = "A gleaming coif of metal half-hidden by a black veil." - icon_state = "battlenun" - dynamic_hair_suffix = "" // this hides all hair - flags_inv = HIDEEARS|HIDEHAIR - equip_sound = 'sound/foley/equip/cloak_equip.ogg' - pickup_sound = 'sound/foley/equip/cloak_take_off.ogg' - break_sound = 'sound/foley/cloth_rip.ogg' - blocksound = CHAINHIT - resistance_flags = FIRE_PROOF - smeltresult = /obj/item/ash - - armor = ARMOR_MAILLE - body_parts_covered = NECK|HAIR|EARS|HEAD - prevent_crits = ALL_EXCEPT_BLUNT - -//............... Grenzelhoft Plume Hat ............... // - worn over a skullcap -//obj/item/clothing/head/roguetown/helmet/skullcap/grenzelhoft -/obj/item/clothing/head/roguetown/grenzelhofthat - name = "grenzelhoft plume hat" - desc = "Slaying foul creachers or fair maidens: Grenzelhoft stands." - icon_state = "grenzelhat" - item_state = "grenzelhat" - sleeved = 'icons/roguetown/clothing/onmob/helpers/stonekeep_merc.dmi' - detail_tag = "_detail" - dynamic_hair_suffix = "" - colorgrenz = TRUE - sellprice = VALUE_FANCY_HAT - - max_integrity = INTEGRITY_WORST - -/obj/item/clothing/head/roguetown/grenzelhofthat/update_icon() - cut_overlays() - if(get_detail_tag()) - var/mutable_appearance/pic = mutable_appearance(icon(icon, "[icon_state][detail_tag]")) - pic.appearance_flags = RESET_COLOR - if(get_detail_color()) - pic.color = get_detail_color() - add_overlay(pic) - //...................................................................................................... @@ -713,8 +728,9 @@ smeltresult = /obj/item/ingot/steel // All visored helmets are made of steel sellprice = VALUE_STEEL_HELMET+BONUS_VALUE_TINY + armor = ARMOR_PLATE body_parts_covered = FULL_HEAD - max_integrity = INTEGRITY_STRONG + max_integrity = INTEGRITY_STRONGER prevent_crits = ALL_CRITICAL_HITS /obj/item/clothing/head/roguetown/helmet/visored/AdjustClothes(mob/user) @@ -723,7 +739,7 @@ if(adjustable == CAN_CADJUST) adjustable = CADJUSTED icon_state = "[initial(icon_state)]_raised" - body_parts_covered = HEAD|HAIR|EARS + body_parts_covered = COVERAGE_HEAD flags_inv = HIDEEARS flags_cover = null prevent_crits = list(BCLASS_CUT, BCLASS_CHOP, BCLASS_BLUNT) // Vulnerable to eye stabbing while visor is open @@ -733,10 +749,10 @@ H.update_inv_head() else if(adjustable == CADJUSTED) ResetAdjust(user) - prevent_crits = ALL_CRITICAL_HITS - body_parts_covered = FULL_HEAD - flags_inv = HIDEEARS|HIDEFACE|HIDEHAIR - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH +// body_parts_covered = FULL_HEAD +// prevent_crits = ALL_CRITICAL_HITS +// flags_inv = HIDEEARS|HIDEFACE|HIDEHAIR +// flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH if(user) if(ishuman(user)) var/mob/living/carbon/H = user @@ -752,7 +768,6 @@ desc = "A steel helmet offering good overall protection. Its visor can be flipped over for higher visibility at the cost of eye protection." icon_state = "sallet_visor" - armor = list("melee" = 90, "bullet" = 75, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) //............... Hounskull ............... // /obj/item/clothing/head/roguetown/helmet/visored/hounskull @@ -762,9 +777,8 @@ at the cost of eye protection." icon_state = "hounskull" emote_environment = 3 - block2add = FOV_RIGHT|FOV_LEFT - armor = list("melee" = 100, "bullet" = 80, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = ARMOR_PLATE_GOOD //............... Knights Helmet ............... // /obj/item/clothing/head/roguetown/helmet/visored/knight @@ -776,16 +790,11 @@ bloody_icon_state = "helmetblood_big" worn_x_dimension = 64 worn_y_dimension = 64 - adjustable = CAN_CADJUST - emote_environment = 3 - block2add = FOV_RIGHT|FOV_LEFT - flags_inv = HIDEEARS|HIDEFACE|HIDEHAIR - armor = list("melee" = 90, "bullet" = 80, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - body_parts_covered = HEAD_EXCEPT_MOUTH + emote_environment = 3 /obj/item/clothing/head/roguetown/helmet/visored/knight/black - color = CLOTHING_BLACK + color = CLOTHING_SOOT_BLACK @@ -809,7 +818,7 @@ smeltresult = /obj/item/ingot/steel sellprice = VALUE_STEEL_HELMET - armor = ARMOR_STEEL + armor = ARMOR_PLATE body_parts_covered = FULL_HEAD prevent_crits = ALL_EXCEPT_STAB max_integrity = INTEGRITY_STRONGEST // no moving parts, steel @@ -829,9 +838,21 @@ smeltresult = /obj/item/ingot/iron sellprice = VALUE_CHEAP_IRON_HELMET - armor = list("melee" = 60, "bullet" = 60, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = ARMOR_PLATE_BAD max_integrity = INTEGRITY_STRONG //isn't the same as a steel helmet but is better than a skullcap, costs 2 bars and protects the mouth +//............... Rusted Barbute ............... // +/obj/item/clothing/head/roguetown/helmet/heavy/rust + name = "rusted barbute" + desc = "A rusted barbute. Relatively fragile, and might turn your hair brown, but offers good protection." + icon_state = "rustbarbuta" + flags_inv = HIDEEARS|HIDEFACE|HIDEHAIR + smeltresult = /obj/item/ingot/iron + sellprice = VALUE_LEATHER_HELMET + + armor = ARMOR_PLATE_BAD + max_integrity = INTEGRITY_STANDARD // shitty rusted iron + //............... Great Helm ............... // /obj/item/clothing/head/roguetown/helmet/heavy/bucket @@ -840,7 +861,7 @@ icon_state = "topfhelm" flags_inv = HIDEEARS|HIDEFACE|HIDEHAIR - armor = ARMOR_STEEL_BEST + armor = ARMOR_PLATE prevent_crits = ALL_CRITICAL_HITS /obj/item/clothing/head/roguetown/helmet/heavy/bucket/gold @@ -856,23 +877,23 @@ smeltresult = /obj/item/ingot/iron sellprice = VALUE_IRON_HELMET+BONUS_VALUE_MODEST - armor = list("melee" = 90, "bullet" = 70, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = ARMOR_PLATE prevent_crits = ALL_CRITICAL_HITS_VAMP - max_integrity = INTEGRITY_STRONG - - -//............... Rusted Barbute ............... // -/obj/item/clothing/head/roguetown/helmet/heavy/rust - name = "rusted barbute" - desc = "A rusted barbute. Relatively fragile, and might turn your hair brown, but offers good protection." - icon_state = "rustbarbuta" - flags_inv = HIDEEARS|HIDEFACE|HIDEHAIR - smeltresult = /obj/item/ingot/iron - sellprice = VALUE_LEATHER_HELMET + max_integrity = INTEGRITY_STRONGER - max_integrity = INTEGRITY_STANDARD // shitty rusted iron +//............... Frog Helmet ............... // +/obj/item/clothing/head/roguetown/helmet/heavy/frog + name = "frog helmet" + desc = "A thick, heavy helmet that severely obscures the wearer's vision. Still rather protective." + icon_state = "froghelm" + mob_overlay_icon = 'icons/roguetown/clothing/onmob/64x64/head.dmi' + worn_x_dimension = 64 + worn_y_dimension = 64 + flags_inv = HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + armor = ARMOR_PLATE_GOOD + prevent_crits = ALL_CRITICAL_HITS //............... Temple heavy helmets ......................// //............... Astrata Helmet ............... // @@ -907,7 +928,6 @@ desc = "A standard helmet forged in the style typical of Eoran worshippers, a simple yet practical protective piece of equipment. Upon it lays several laurels of flowers and other colorful ornaments, followed by several symbols and standards of the user's chapter, accomplishments or even punishment" icon_state = "eorahelm" item_state = "eorahelm" - armor = ARMOR_STEEL_BEST //............... Pestra Helmet ............... // @@ -915,7 +935,15 @@ name = "pestran helmet" desc = "A great helmet made of coarse, tainted steel. It is modeled after a plagued carrion, a blessed abomination of Pestra." icon_state = "pestrahelm" - item_state = "pestraahelm" + item_state = "pestrahelm" + flags_inv = HIDEEARS|HIDEFACE|HIDEHAIR + +//................ Malum Helmet ............. // +/obj/item/clothing/head/roguetown/helmet/heavy/malumhelm + name = "malumite helmet" + desc = "A great helmet of sturdy dark steel. Its chiseled countenance reminds the viewer of Malum's stern gaze." + icon_state = "malumhelm" + item_state = "malumhelm" flags_inv = HIDEEARS|HIDEFACE|HIDEHAIR @@ -989,8 +1017,6 @@ desc = "A lavish hounskull which allows a crest to be mounted on top." icon_state = "decorated_hounskull" - armor = list("melee" = 100, "bullet" = 80, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - /obj/item/clothing/head/roguetown/helmet/heavy/decorated/hounskull/attack_right(mob/user) ..() if(!picked) @@ -1011,8 +1037,6 @@ desc = "A lavish great helm which allows a crest to be mounted on top." icon_state = "decorated_bucket" - armor = ARMOR_STEEL_BEST - /obj/item/clothing/head/roguetown/helmet/heavy/decorated/bucket/attack_right(mob/user) ..() if(!picked) @@ -1033,8 +1057,6 @@ desc = "A lavish gold-trimmed greathelm which allows a crest to be mounted on top." icon_state = "decorated_gbucket" - armor = ARMOR_STEEL_BEST - /obj/item/clothing/head/roguetown/helmet/heavy/decorated/golden/attack_right(mob/user) ..() if(!picked) @@ -1094,9 +1116,9 @@ name = "headscarf" desc = "Rolled cloth. Gives some protection at least." icon_state = "headscarf" - color = CLOTHING_BROWN + color = CLOTHING_BARK_BROWN sellprice = VALUE_LEATHER_HELMET/2 - armor = ARMOR_GAMBESON + armor = ARMOR_PADDED body_parts_covered = HEAD|HAIR prevent_crits = MINOR_CRITICALS max_integrity = INTEGRITY_POOR @@ -1109,7 +1131,7 @@ icon_state = "armingcap" flags_inv = HIDEEARS - armor = ARMOR_GAMBESON + armor = ARMOR_PADDED body_parts_covered = HEAD|HAIR|EARS prevent_crits = MINOR_CRITICALS max_integrity = INTEGRITY_POOR @@ -1134,7 +1156,7 @@ sewrepair = TRUE sellprice = VALUE_LEATHER_HELMET - armor = ARMOR_LEATHER + armor = ARMOR_LEATHER_BAD body_parts_covered = HEAD|HAIR|EARS|NOSE prevent_crits = CUT_AND_MINOR_CRITS max_integrity = INTEGRITY_STANDARD @@ -1144,6 +1166,7 @@ name = "buckled hat" desc = "A black top hat with a buckle on top, favored by Witch Hunters and Inquisitors." icon_state = "puritan_hat" + body_parts_covered = HEAD|HAIR //............... Ominous Hood ............... // /obj/item/clothing/head/roguetown/helmet/leather/hood_ominous // a leather coif locked to headslot since you cannot pull it back. Crit prevent between armor items a little weird, this is leather coif, compare to helmet @@ -1154,7 +1177,7 @@ flags_inv = HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR sellprice = VALUE_LEATHER_HELMET/2 - armor = ARMOR_GAMBESON_GOOD + armor = ARMOR_PADDED_GOOD body_parts_covered = NECK|HAIR|EARS|HEAD //............... Hardened Helmet ............... // @@ -1180,7 +1203,7 @@ actions_types = list(/datum/action/item_action/toggle_helmet_light) sellprice = VALUE_LEATHER_HELMET+BONUS_VALUE_MODEST - armor = ARMOR_GAMBESON + armor = ARMOR_PADDED prevent_crits = list(BCLASS_LASHING, BCLASS_BITE, BCLASS_TWIST, BCLASS_BLUNT) var/brightness_on = 4 //less than a torch; basically good for one person. @@ -1214,6 +1237,37 @@ /obj/item/clothing/head/roguetown/helmet/leather/minershelm/proc/turn_off(mob/user) set_light(0) +//............... Antler hood ............... // +/obj/item/clothing/head/roguetown/antlerhood + name = "antlerhood" + desc = "a hood with the antlers from a saiga mounted on it." + color = null + flags_inv = HIDEEARS|HIDEHAIR + icon_state = "antlerhood" + item_state = "antlerhood" + icon = 'icons/roguetown/clothing/head.dmi' + body_parts_covered = HEAD|HAIR|EARS|NECK + slot_flags = ITEM_SLOT_HEAD + dynamic_hair_suffix = "" + max_integrity = 100 + prevent_crits = list(BCLASS_TWIST) + anvilrepair = null + sewrepair = TRUE + blocksound = SOFTHIT + +//............... Saiga skull ............... // +/obj/item/clothing/head/roguetown/helmet/leather/saiga + name = "saiga skull" + desc = "Skull from big game. Looks like it could withstand some damage." + icon_state = "saigahead" + item_state = "saigahead" + mob_overlay_icon = 'icons/roguetown/clothing/onmob/64x64/head.dmi' + worn_x_dimension = 64 + worn_y_dimension = 64 + flags_inv = HIDEEARS|HIDEFACE + flags_cover = HEADCOVERSEYES + body_parts_covered = HEAD|EARS|HAIR|NOSE|EYES + /*------------------\ @@ -1271,7 +1325,7 @@ smeltresult = /obj/item/ingot/iron sellprice = NO_MARKET_VALUE - armor = ARMOR_COPPER + armor = ARMOR_PADDED_GOOD body_parts_covered = HEAD|EARS|HAIR|EYES prevent_crits = ONLY_VITAL_ORGANS max_integrity = INTEGRITY_POOR @@ -1293,10 +1347,10 @@ smeltresult = /obj/item/ingot/steel sellprice = VALUE_STEEL_HELMET+BONUS_VALUE_SMALL - armor = ARMOR_STEEL_BEST - armor_class = ARMOR_CLASS_HEAVY + armor = ARMOR_PLATE_GOOD + armor_class = AC_HEAVY prevent_crits = ALL_CRITICAL_HITS - max_integrity = INTEGRITY_STRONG + max_integrity = INTEGRITY_STRONGER //............... Bladesinger Helmet ............... // @@ -1306,7 +1360,7 @@ icon_state = "elfhead" allowed_race = list("elf", "half-elf", "dark elf") clothing_flags = CANT_SLEEP_IN - armor_class = ARMOR_CLASS_MEDIUM + armor_class = AC_MEDIUM body_parts_covered = HEAD|HAIR|NOSE /obj/item/clothing/head/roguetown/rare/elfplate/welfplate // Unique Bladesinger kit diff --git a/code/modules/clothing/rogueclothes/mask.dm b/code/modules/clothing/rogueclothes/mask.dm index 97a6804473..48812502b2 100644 --- a/code/modules/clothing/rogueclothes/mask.dm +++ b/code/modules/clothing/rogueclothes/mask.dm @@ -79,8 +79,6 @@ blocksound = PLATEHIT break_sound = 'sound/foley/breaksound.ogg' drop_sound = 'sound/foley/dropsound/armor_drop.ogg' - armor = list("melee" = 80, "bullet" = 50, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - prevent_crits = list(BCLASS_LASHING, BCLASS_BITE, BCLASS_TWIST, BCLASS_CUT, BCLASS_CHOP, BCLASS_BLUNT, BCLASS_STAB) flags_inv = HIDEFACE body_parts_covered = FACE block2add = FOV_BEHIND @@ -89,6 +87,10 @@ sewrepair = FALSE anvilrepair = /datum/skill/craft/armorsmithing clothing_flags = CANT_SLEEP_IN + + armor = ARMOR_PLATE_BAD + prevent_crits = CUT_AND_MINOR_CRITS //No stab, blunt or chop crit flags. If a chopping weapon can get through 70 armor, it's probably carrying enough force to mess up your face behind a flimsy mask. + max_integrity = INTEGRITY_STANDARD //Flimsier than a proper visor/helmet. /obj/item/clothing/mask/rogue/shepherd/clothmask name = "cloth mask" @@ -117,9 +119,11 @@ /obj/item/clothing/mask/rogue/facemask/steel name = "steel mask" icon_state = "smask" - armor = list("melee" = 100, "bullet" = 80, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) desc = "A knightly steel mask that both conceals and protects the face. Usually paired with a bascinet." - max_integrity = 300 + + armor = ARMOR_PLATE_BAD //Still thin. + prevent_crits = ALL_EXCEPT_BLUNT_AND_STAB + max_integrity = INTEGRITY_STRONG //250 Integrity, added chop protection. Still worse than a proper visored helmet. /obj/item/clothing/mask/rogue/facemask/shadowfacemask name = "anthraxi war mask" @@ -191,11 +195,9 @@ name = "copper mask" icon_state = "cmask" desc = "A heavy copper mask that conceals and protects the face, though not very effectively." - max_integrity = 100 blocksound = PLATEHIT break_sound = 'sound/foley/breaksound.ogg' drop_sound = 'sound/foley/dropsound/armor_drop.ogg' - armor = list("melee" = 50, "bullet" = 50, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) flags_inv = HIDEFACE body_parts_covered = FACE block2add = FOV_BEHIND @@ -204,6 +206,8 @@ sewrepair = FALSE anvilrepair = /datum/skill/craft/armorsmithing smeltresult = /obj/item/ingot/copper + + max_integrity = INTEGRITY_WORST //Really flimsy, still good for a few blows. //................ Druids Mask ............... // /obj/item/clothing/mask/rogue/druid @@ -219,7 +223,7 @@ slot_flags = ITEM_SLOT_MASK experimental_onhip = TRUE - armor = ARMOR_MINOR + armor = ARMOR_WEAK prevent_crits = CUT_AND_MINOR_CRITS /////////////////////////////////////////////////////////////////// diff --git a/code/modules/clothing/rogueclothes/neck.dm b/code/modules/clothing/rogueclothes/neck.dm index be840a56cf..47023d3748 100644 --- a/code/modules/clothing/rogueclothes/neck.dm +++ b/code/modules/clothing/rogueclothes/neck.dm @@ -13,6 +13,14 @@ anvilrepair = /datum/skill/craft/armorsmithing smeltresult = /obj/item/ingot/iron + +//.................................................................................................................................. +/*---------------\ +| | +| Light Armor | +| | +\---------------*/ + /obj/item/clothing/neck/roguetown/coif name = "leather coif" desc = "A simple coif made of boiled leather, not that good as armor itself but mostly useful as padding for proper helmets." @@ -25,17 +33,19 @@ pickup_sound = 'sound/foley/equip/cloak_take_off.ogg' break_sound = 'sound/foley/cloth_rip.ogg' drop_sound = 'sound/foley/dropsound/cloth_drop.ogg' - body_parts_covered = NECK|HAIR|EARS|HEAD - armor = list("melee" = 30, "bullet" = 15, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - prevent_crits = list(BCLASS_LASHING, BCLASS_BITE, BCLASS_TWIST, BCLASS_CUT) adjustable = CAN_CADJUST toggle_icon_state = TRUE - max_integrity = 150 sewrepair = TRUE anvilrepair = null resistance_flags = FLAMMABLE // Made of leather smeltresult = /obj/item/ash + armor = ARMOR_LEATHER + body_parts_covered = NECK|HAIR|EARS|HEAD + max_integrity = INTEGRITY_POOR + prevent_crits = CUT_AND_MINOR_CRITS + + /obj/item/clothing/neck/roguetown/coif/AdjustClothes(mob/user) if(loc == user) if(adjustable == CAN_CADJUST) @@ -77,14 +87,14 @@ body_parts_covered = NECK|HAIR|EARS|HEAD adjustable = CAN_CADJUST toggle_icon_state = TRUE - max_integrity = 150 sewrepair = TRUE anvilrepair = null resistance_flags = FLAMMABLE // Made of leather smeltresult = /obj/item/ash - armor = list("melee" = 25, "bullet" = 10, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - prevent_crits = list(BCLASS_CUT, BCLASS_BLUNT) + armor = ARMOR_PADDED + prevent_crits = MINOR_CRITICALS + max_integrity = INTEGRITY_WORST /obj/item/clothing/neck/roguetown/keffiyeh/AdjustClothes(mob/user) if(loc == user) @@ -106,33 +116,65 @@ H.update_inv_neck() H.update_inv_head() +/obj/item/clothing/neck/roguetown/keffiyeh/red + color = CLOTHING_MAROON + +/obj/item/clothing/neck/roguetown/keffiyeh/yellow + color = CLOTHING_PEAR_YELLOW + +/obj/item/clothing/neck/roguetown/keffiyeh/orange + color = CLOTHING_FYRITIUS_DYE + +/obj/item/clothing/neck/roguetown/keffiyeh/green + color = CLOTHING_BOG_GREEN + +/obj/item/clothing/neck/roguetown/keffiyeh/blue + color = CLOTHING_MAGE_BLUE + +/obj/item/clothing/neck/roguetown/keffiyeh/purple + color = CLOTHING_ROYAL_PURPLE + +/obj/item/clothing/neck/roguetown/keffiyeh/teal + color = CLOTHING_ROYAL_TEAL + +/obj/item/clothing/neck/roguetown/keffiyeh/black + color = CLOTHING_ROYAL_RED +// color = CLOTHING_ROYAL_BLACK + +/obj/item/clothing/neck/roguetown/keffiyeh/white + color = CLOTHING_ASH_GREY /obj/item/clothing/neck/roguetown/coif/cloth name = "padded coif" desc = "A simple coif made of cloth. Not very effective armor, but may soften weak blows and keeps the head and neck warm." icon_state = "ccoif" - item_state = "ccoif" + dropshrink = 0.8 flags_inv = HIDEEARS|HIDEHAIR slot_flags = ITEM_SLOT_NECK|ITEM_SLOT_HEAD blocksound = SOFTHIT - body_parts_covered = NECK|HAIR|EARS|HEAD - armor = list("melee" = 25, "bullet" = 10, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - prevent_crits = list(BCLASS_CUT, BCLASS_BLUNT) adjustable = CAN_CADJUST toggle_icon_state = TRUE + armor = ARMOR_PADDED + body_parts_covered = NECK|HAIR|EARS|HEAD + prevent_crits = MINOR_CRITICALS + + +//.................................................................................................................................. +/*---------------\ +| | +| Medium Armor | +| | +\---------------*/ + /obj/item/clothing/neck/roguetown/chaincoif name = "chain coif" desc = "A coif made of interwoven steel rings, made to protect against arrows and blades. \ Generally used as padding, but serviceable enough on its own." icon_state = "chaincoif" - item_state = "chaincoif" flags_inv = HIDEEARS|HIDEHAIR - armor = list("melee" = 80, "bullet" = 100, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) resistance_flags = FIRE_PROOF slot_flags = ITEM_SLOT_NECK|ITEM_SLOT_HEAD - body_parts_covered = NECK|HAIR|EARS|HEAD - prevent_crits = list(BCLASS_LASHING, BCLASS_BITE, BCLASS_TWIST, BCLASS_CUT, BCLASS_CHOP, BCLASS_STAB) // Chainmail is meant to stop cuts, stabs and arrows, not blunt pickup_sound = 'sound/foley/equip/equip_armor_chain.ogg' drop_sound = 'sound/foley/dropsound/chain_drop.ogg' break_sound = 'sound/foley/breaksound.ogg' @@ -142,6 +184,12 @@ smeltresult = null clothing_flags = CANT_SLEEP_IN + armor = ARMOR_MAILLE + body_parts_covered = NECK|HAIR|EARS|HEAD + max_integrity = INTEGRITY_STRONG + prevent_crits = ALL_EXCEPT_BLUNT + + /obj/item/clothing/neck/roguetown/chaincoif/AdjustClothes(mob/user) if(loc == user) if(adjustable == CAN_CADJUST) @@ -169,54 +217,78 @@ name = "iron chain coif" desc = "A chain coif made of interwoven iron rings. Affordable protection against arrows and blades, \ but should be used as padding rather than relied upon as armor." - armor = list("melee" = 60, "bullet" = 80, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) smeltresult = null + armor = ARMOR_MAILLE_IRON + max_integrity = INTEGRITY_STRONG + prevent_crits = ALL_EXCEPT_BLUNT_AND_STAB //Non-riveted, iron chain can be broken apart with a powerful thrust. + +/obj/item/clothing/neck/roguetown/gorget/copper + name = "neck protector" + icon_state = "copperneck" + desc = "An antique and simple protection for the neck, used more as an accessory by the common folk. But poor protection is still better than nothing." + smeltresult = /obj/item/ingot/copper + + armor = ARMOR_LEATHER_GOOD + max_integrity = INTEGRITY_POOR + + +//.................................................................................................................................. +/*---------------\ +| | +| Heavy Armor | +| | +\---------------*/ + /obj/item/clothing/neck/roguetown/bevor name = "bevor" desc = "A piece of plate armor meant to protect the throat and neck of its wearer against decapitation, extending the protection of armor plates." icon_state = "bervor" flags_inv = HIDEFACIALHAIR - armor = list("melee" = 100, "bullet" = 80, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) smeltresult = /obj/item/ingot/steel equip_sound = 'sound/foley/equip/equip_armor.ogg' drop_sound = 'sound/foley/dropsound/armor_drop.ogg' break_sound = 'sound/foley/breaksound.ogg' - max_integrity = 300 slot_flags = ITEM_SLOT_NECK - body_parts_covered = NECK|EARS|MOUTH|NOSE - // Realistically, it should also prevent stab crits. But for balance purposes let's not powercreep chainmail coifs for that purpose. - prevent_crits = list(BCLASS_LASHING, BCLASS_BITE, BCLASS_CUT, BCLASS_CHOP, BCLASS_BLUNT, BCLASS_TWIST) blocksound = PLATEHIT clothing_flags = CANT_SLEEP_IN + armor_class = AC_HEAVY + armor = ARMOR_PLATE + body_parts_covered = NECK|EARS|MOUTH|NOSE + max_integrity = INTEGRITY_STRONGER + prevent_crits = ALL_EXCEPT_STAB + /obj/item/clothing/neck/roguetown/gorget name = "gorget" icon_state = "gorget" desc = "An affordable piece of iron armor meant to protect one's neck against chopping. \ Fits comfortably beneath chest armor, despite its weight." flags_inv = HIDEFACIALHAIR - armor = list("melee" = 80, "bullet" = 50, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - max_integrity = 150 resistance_flags = FIRE_PROOF slot_flags = ITEM_SLOT_NECK - body_parts_covered = NECK - prevent_crits = list(BCLASS_LASHING, BCLASS_BITE, BCLASS_CUT, BCLASS_CHOP, BCLASS_BLUNT, BCLASS_TWIST) blocksound = PLATEHIT - clothing_flags = CANT_SLEEP_IN equip_sound = 'sound/foley/equip/equip_armor.ogg' drop_sound = 'sound/foley/dropsound/armor_drop.ogg' break_sound = 'sound/foley/breaksound.ogg' smeltresult = /obj/item/ingot/iron + clothing_flags = CANT_SLEEP_IN + + armor_class = AC_HEAVY + armor = ARMOR_PLATE_BAD + body_parts_covered = NECK + max_integrity = INTEGRITY_STANDARD //Balance consideration, protects more but breaks more easily than a steel chain coif. + prevent_crits = ALL_EXCEPT_STAB /obj/item/clothing/neck/roguetown/gorget/hoplite // Better than an iron gorget, not quite as good as a steel bevor - name = "ancient gorget" - desc = "A heavy collar of bronze alloy, meant to protect the neck." + name = "bronze gorget" + desc = "A heavy collar of great age, meant to protect the neck." icon_state = "aasimarneck" - item_state = "aasimarneck" - armor = list("melee" = 90, "bullet" = 60, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - max_integrity = 250 smeltresult = null // No bronze ingots yet + max_integrity = INTEGRITY_STRONGER //Aasimar craftsmanship. + + + // PSYCROSSES @@ -296,7 +368,7 @@ /obj/item/clothing/neck/roguetown/psycross/silver/necra name = "amulet of Necra" - desc = "Where, grave, thy victory? I triumph still while the Veiled Lady abides by me." + desc = "Where, grave, thy victory? I triumph still while the Undermaiden abides by me." icon_state = "necra" resistance_flags = FIRE_PROOF @@ -314,10 +386,23 @@ /obj/item/clothing/neck/roguetown/psycross/silver/pestra name = "amulet of Pestra" - desc = "A Pestran amulet depicting her fabled walking staff, encrusted in this trinket is a venomous serpent. Believed to ward off disease and lessen poisons to devoted worshippers of the wise hag." + desc = "When pure, alcohol is best used as a cleanser of wounds and a cleanser of the palate." icon_state = "pestra" resistance_flags = FIRE_PROOF + +/obj/item/clothing/neck/roguetown/psycross/silver/malum + name = "amulet of Malum" + desc = "Blessed be our works, made in His name." + icon_state = "malum" + resistance_flags = FIRE_PROOF + +/obj/item/clothing/neck/roguetown/psycross/silver/malum_steel + name = "amulet of Malum" + desc = "Let the tools that guide thee be thy hands." + icon_state = "malum_alt" + resistance_flags = FIRE_PROOF + /obj/item/clothing/neck/roguetown/psycross/g name = "golden psycross" desc = "Let His name be naught but forgot'n." @@ -369,13 +454,7 @@ item_state = "surgcollar" sellprice = 15 -/obj/item/clothing/neck/roguetown/gorget/copper - name = "copper gorget" - icon_state = "copperneck" - desc = "An antique and simple protection for the neck, used more as an accessory by the common folk. But poor protection is still better than nothing." - armor = list("melee" = 50, "bullet" = 50, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - max_integrity = 100 - smeltresult = /obj/item/ingot/copper + /obj/item/clothing/neck/roguetown/mercmedal name = "mercenary medal" diff --git a/code/modules/clothing/rogueclothes/npc/goblin.dm b/code/modules/clothing/rogueclothes/npc/goblin.dm index 347d854900..95aeb73df0 100644 --- a/code/modules/clothing/rogueclothes/npc/goblin.dm +++ b/code/modules/clothing/rogueclothes/npc/goblin.dm @@ -4,12 +4,12 @@ item_state = "plate_armor" icon = 'icons/roguetown/mob/monster/goblins.dmi' smeltresult = /obj/item/ingot/iron - armor = list("melee" = 80, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list("melee" = 26, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) allowed_race = list("goblin") body_parts_covered = CHEST|GROIN|ARMS|LEGS|VITALS anvilrepair = /datum/skill/craft/armorsmithing max_integrity = 60 - armor_class = ARMOR_CLASS_LIGHT // Otherwise they get knocked down TOO easily!!! + armor_class = AC_LIGHT // Otherwise they get knocked down TOO easily!!! sellprice = 0 /obj/item/clothing/suit/roguetown/armor/leather/goblin @@ -17,9 +17,9 @@ icon_state = "leather_armor_item" item_state = "leather_armor" icon = 'icons/roguetown/mob/monster/goblins.dmi' - armor = list("melee" = 60, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list("melee" = 18, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) body_parts_covered = CHEST|GROIN|ARMS|VITALS - armor_class = ARMOR_CLASS_LIGHT + armor_class = AC_LIGHT max_integrity = 60 allowed_race = list("goblin") sellprice = 0 @@ -31,7 +31,7 @@ item_state = "cloth_armor" icon = 'icons/roguetown/mob/monster/goblins.dmi' allowed_race = list("goblin") - armor = list("melee" = 30, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list("melee" = 12, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) body_parts_covered = CHEST|GROIN sellprice = 0 smeltresult = /obj/item/ash @@ -41,7 +41,7 @@ icon_state = "leather_helm_item" item_state = "leather_helm" icon = 'icons/roguetown/mob/monster/goblins.dmi' - armor = list("melee" = 30, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list("melee" = 18, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) body_parts_covered = HEAD|EARS|HAIR|EYES allowed_race = list("goblin") sellprice = 0 @@ -54,6 +54,6 @@ smeltresult = /obj/item/ingot/iron icon = 'icons/roguetown/mob/monster/goblins.dmi' allowed_race = list("goblin") - armor = list("melee" = 80, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list("melee" = 26, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) body_parts_covered = HEAD|EARS|HAIR|EYES sellprice = 0 diff --git a/code/modules/clothing/rogueclothes/npc/orc.dm b/code/modules/clothing/rogueclothes/npc/orc.dm index 1bed829122..d39ba025c8 100644 --- a/code/modules/clothing/rogueclothes/npc/orc.dm +++ b/code/modules/clothing/rogueclothes/npc/orc.dm @@ -4,7 +4,7 @@ desc = "Fearsome armor which covers nearly the entire body." icon_state = "warlord_armor" item_state = "warlord_armor" - armor = ARMOR_IRON_BAD + armor = ARMOR_PLATE_BAD /obj/item/clothing/suit/roguetown/armor/plate/orc name = "crude breastplate" @@ -14,8 +14,8 @@ smeltresult = /obj/item/ingot/iron sellprice = NO_MARKET_VALUE - armor_class = ARMOR_CLASS_MEDIUM - armor = ARMOR_COPPER + armor_class = AC_MEDIUM + armor = ARMOR_PADDED_GOOD body_parts_covered = CHEST|GROIN|ARMS|LEGS|VITALS max_integrity = INTEGRITY_POOR @@ -26,7 +26,7 @@ allowed_race = list("orc") sellprice = NO_MARKET_VALUE - armor_class = ARMOR_CLASS_MEDIUM + armor_class = AC_MEDIUM armor = list("melee" = 25, "bullet" = 50, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) body_parts_covered = CHEST|GROIN|ARMS|LEGS|VITALS prevent_crits = ALL_EXCEPT_BLUNT diff --git a/code/modules/clothing/rogueclothes/pants.dm b/code/modules/clothing/rogueclothes/pants.dm index f3ea046c7a..d70762440e 100644 --- a/code/modules/clothing/rogueclothes/pants.dm +++ b/code/modules/clothing/rogueclothes/pants.dm @@ -22,6 +22,7 @@ r_sleeve_status = SLEEVE_NORMAL l_sleeve_status = SLEEVE_NORMAL dropshrink = 0.8 + max_integrity = INTEGRITY_WORST /obj/item/clothing/under/roguetown/AdjustClothes(mob/user) #ifdef MATURESERVER @@ -53,27 +54,30 @@ // adjustable = CAN_CADJUST /obj/item/clothing/under/roguetown/tights/random/Initialize() - color = pick("#544236", "#435436", "#543836", "#79763f") + color = RANDOM_PEASANT_DYES ..() +/obj/item/clothing/under/roguetown/tights/uncolored + color = CLOTHING_LINEN + /obj/item/clothing/under/roguetown/tights/black - color = CLOTHING_BLACK + color = CLOTHING_SOOT_BLACK /obj/item/clothing/under/roguetown/tights/red - color = CLOTHING_RED + color = CLOTHING_BLOOD_RED /obj/item/clothing/under/roguetown/tights/purple - color = CLOTHING_PURPLE + color = CLOTHING_PLUM_PURPLE /obj/item/clothing/under/roguetown/tights/green - color = "#3c693c" + color = CLOTHING_SPRING_GREEN /obj/item/clothing/under/roguetown/tights/jester desc = "Funny tights!" - color = "#1E3B20" + color = CLOTHING_SALMON /obj/item/clothing/under/roguetown/tights/lord - color = "#865c9c" + color = CLOTHING_PLUM_PURPLE /obj/item/clothing/under/roguetown/tights/vagrant r_sleeve_status = SLEEVE_TORN @@ -85,7 +89,7 @@ body_parts_covered = GROIN|LEG_RIGHT /obj/item/clothing/under/roguetown/tights/vagrant/Initialize() - color = pick("#6b5445", "#435436", "#704542", "#79763f") + color = pick(CLOTHING_MUD_BROWN, CLOTHING_OLD_LEATHER, CLOTHING_SPRING_GREEN, CLOTHING_BARK_BROWN, CLOTHING_SOOT_BLACK ) ..() /obj/item/clothing/under/roguetown/tights/sailor @@ -101,6 +105,94 @@ r_sleeve_status = SLEEVE_NOMOD l_sleeve_status = SLEEVE_NOMOD +/obj/item/clothing/under/roguetown/trou/leather/mourning + name = "mourning trousers" + desc = "Dark trousers worn by morticians while performing burial rites." + icon_state = "leathertrou" + color = "#151615" + +/obj/item/clothing/under/roguetown/trou/shadowpants + name = "silk tights" + desc = "Form-fitting legwear. Almost too form-fitting." + icon_state = "shadowpants" + allowed_race = list("elf", "dark elf") + +/obj/item/clothing/under/roguetown/loincloth + name = "loincloth" + desc = "Protects your modesty, but not much else." + icon_state = "loincloth" + item_state = "loincloth" +// adjustable = CAN_CADJUST + r_sleeve_status = SLEEVE_NOMOD + l_sleeve_status = SLEEVE_NOMOD + +/obj/item/clothing/under/roguetown/loincloth/brown + color = CLOTHING_BARK_BROWN + +/obj/item/clothing/under/roguetown/loincloth/pink + color = "#b98ae3" + +/obj/item/clothing/under/roguetown/tights/stockings + name = "stockings" + desc = "A legwear made just for the pure aesthetics. Popular in courts and brothels alike." + icon_state = "stockings" + r_sleeve_status = SLEEVE_NOMOD + l_sleeve_status = SLEEVE_NOMOD + body_parts_covered = null + flags_inv = null + +/obj/item/clothing/under/roguetown/tights/stockings/random/Initialize() + color = RANDOM_PEASANT_DYES + ..() + +/obj/item/clothing/under/roguetown/tights/stockings/white + color = CLOTHING_WHITE + +/obj/item/clothing/under/roguetown/tights/stockings/black + color = CLOTHING_SOOT_BLACK + +/obj/item/clothing/under/roguetown/tights/stockings/blue + color = CLOTHING_BERRY_BLUE + +/obj/item/clothing/under/roguetown/tights/stockings/red + color = CLOTHING_WINESTAIN_RED + +/obj/item/clothing/under/roguetown/tights/stockings/green + color = CLOTHING_SPRING_GREEN + +//Silk variants + +/obj/item/clothing/under/roguetown/tights/stockings/silk + name = "silk stockings" + desc = "A legwear made just for the pure aesthetics. Made out of thin silk. Popular among nobles." + icon_state = "silk" + +/obj/item/clothing/under/roguetown/tights/stockings/silk/random/Initialize() + color = RANDOM_NOBLE_DYES + ..() + +/obj/item/clothing/under/roguetown/tights/stockings/silk/white + color = CLOTHING_CHALK_WHITE + +/obj/item/clothing/under/roguetown/tights/stockings/silk/black + color = CLOTHING_DARK_INK + +/obj/item/clothing/under/roguetown/tights/stockings/silk/blue + color = CLOTHING_SKY_BLUE + +/obj/item/clothing/under/roguetown/tights/stockings/silk/red + color = CLOTHING_BLOOD_RED + +/obj/item/clothing/under/roguetown/tights/stockings/silk/purple + color = CLOTHING_PLUM_PURPLE + +//.................................................................................................................................. +/*---------------\ +| | +| Light Armor | +| | +\---------------*/ + /obj/item/clothing/under/roguetown/trou name = "work trousers" desc = "Padded pants for hardy workers." @@ -109,30 +201,52 @@ item_state = "trou" // adjustable = CAN_CADJUST sewrepair = TRUE - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - prevent_crits = list(BCLASS_CUT, BCLASS_LASHING, BCLASS_BITE) blocksound = SOFTHIT blade_dulling = DULLING_BASHCHOP r_sleeve_status = SLEEVE_NORMAL l_sleeve_status = SLEEVE_NORMAL + armor = ARMOR_PADDED_BAD + prevent_crits = MINOR_CRITICALS + /obj/item/clothing/under/roguetown/trou/leather name = "leather trousers" desc = "Standard leather pants for hardy workers." icon_state = "leathertrou" - armor = ARMOR_LEATHER -/obj/item/clothing/under/roguetown/trou/leather/mourning - name = "mourning trousers" - desc = "Dark trousers worn by morticians while performing burial rites." - icon_state = "leathertrou" - color = "#151615" + armor = ARMOR_LEATHER_BAD + prevent_crits = CUT_AND_MINOR_CRITS + max_integrity = INTEGRITY_POOR -/obj/item/clothing/under/roguetown/trou/shadowpants - name = "silk tights" - desc = "Form-fitting legwear. Almost too form-fitting." - icon_state = "shadowpants" - allowed_race = list("elf", "dark elf") +/obj/item/clothing/under/roguetown/grenzelpants + name = "grenzelhoftian paumpers" + desc = "Padded pants for extra comfort and protection, adorned in vibrant colors." + icon_state = "grenzelpants" + item_state = "grenzelpants" + sleeved = 'icons/roguetown/clothing/onmob/helpers/stonekeep_merc.dmi' + detail_tag = "_detail" + colorgrenz = TRUE + + armor = ARMOR_PADDED + prevent_crits = MINOR_CRITICALS + max_integrity = INTEGRITY_STANDARD + +/obj/item/clothing/under/roguetown/grenzelpants/update_icon() + cut_overlays() + if(get_detail_tag()) + var/mutable_appearance/pic = mutable_appearance(icon(icon, "[icon_state][detail_tag]")) + pic.appearance_flags = RESET_COLOR + if(get_detail_color()) + pic.color = get_detail_color() + add_overlay(pic) + + +//.................................................................................................................................. +/*---------------\ +| | +| Medium Armor | +| | +\---------------*/ /obj/item/clothing/under/roguetown/chainlegs name = "chain chausses" @@ -142,10 +256,6 @@ item_state = "chain_legs" // adjustable = CAN_CADJUST sewrepair = FALSE - armor = list("melee" = 100, "bullet" = 50, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - max_integrity = 300 - prevent_crits = list(BCLASS_LASHING, BCLASS_BITE, BCLASS_TWIST, BCLASS_CUT, BCLASS_CHOP, BCLASS_STAB) // Chainmail is meant to stop cuts, stabs and arrows, not blunt - armor_class = ARMOR_CLASS_MEDIUM resistance_flags = FIRE_PROOF blocksound = CHAINHIT equip_delay_self = 25 @@ -156,16 +266,33 @@ pickup_sound = "rustle" break_sound = 'sound/foley/breaksound.ogg' anvilrepair = /datum/skill/craft/armorsmithing + smeltresult = /obj/item/ingot/steel r_sleeve_status = SLEEVE_NOMOD l_sleeve_status = SLEEVE_NOMOD - clothing_flags = CANT_SLEEP_IN + + armor_class = AC_MEDIUM + armor = ARMOR_MAILLE + max_integrity = INTEGRITY_STRONGER //300 Integrity, good for 8 halberd stabs. + prevent_crits = ALL_EXCEPT_BLUNT + /obj/item/clothing/under/roguetown/chainlegs/iron icon_state = "ichain_legs" name = "iron chain chausses" desc = "Chain mail chausses made of iron rings woven together, offering protection against cuts and stabs." - max_integrity = 200 - armor = list("melee" = 80, "bullet" = 50, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + smeltresult = /obj/item/ingot/iron + + armor = ARMOR_MAILLE_IRON + max_integrity = INTEGRITY_STRONG //250 Integrity. + prevent_crits = ALL_EXCEPT_BLUNT_AND_STAB //Non-riveted, iron chain can be broken apart with a powerful thrust. + + +//.................................................................................................................................. +/*---------------\ +| | +| Heavy Armor | +| | +\---------------*/ /obj/item/clothing/under/roguetown/platelegs name = "plated chausses" @@ -175,10 +302,6 @@ item_state = "heavyleggies" // adjustable = CAN_CADJUST sewrepair = FALSE - armor = list("melee" = 100, "bullet" = 100, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - max_integrity = 500 - prevent_crits = list(BCLASS_LASHING, BCLASS_BITE, BCLASS_TWIST, BCLASS_CUT, BCLASS_CHOP, BCLASS_BLUNT) - armor_class = ARMOR_CLASS_HEAVY blocksound = PLATEHIT equip_delay_self = 30 unequip_delay_self = 30 @@ -189,11 +312,16 @@ pickup_sound = "rustle" break_sound = 'sound/foley/breaksound.ogg' anvilrepair = /datum/skill/craft/armorsmithing - smeltresult = null + smeltresult = /obj/item/ingot/steel r_sleeve_status = SLEEVE_NOMOD l_sleeve_status = SLEEVE_NOMOD clothing_flags = CANT_SLEEP_IN + armor_class = AC_HEAVY + armor = ARMOR_PLATE + max_integrity = INTEGRITY_STRONGER //350 Integrity, middle ground between bulky chestpieces and peripheral pieces. + prevent_crits = ALL_EXCEPT_STAB + /obj/item/clothing/under/roguetown/loincloth name = "loincloth" desc = "Protects your modesty, but not much else." diff --git a/code/modules/clothing/rogueclothes/robes.dm b/code/modules/clothing/rogueclothes/robes.dm index b177330730..7f01a0c658 100644 --- a/code/modules/clothing/rogueclothes/robes.dm +++ b/code/modules/clothing/rogueclothes/robes.dm @@ -19,10 +19,10 @@ max_integrity = INTEGRITY_POOR /obj/item/clothing/suit/roguetown/shirt/robe/plain - color = "#7c6d5c" + color = CLOTHING_LINEN /obj/item/clothing/suit/roguetown/shirt/robe/black - color = CLOTHING_BLACK_WARM + color = CLOTHING_DARK_INK /obj/item/clothing/suit/roguetown/shirt/robe/white @@ -66,6 +66,13 @@ desc = "Black robes which cover the body not unlike those in depictions of the Carriageman himself." icon_state = "necrarobe" +/obj/item/clothing/suit/roguetown/shirt/robe/malum + name = "craftsman's robes" + desc = "The sturdy robes of a maker-monk of Malum." + icon_state = "malumrobe" + sleeved = null + armor = list("melee" = 5, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 5, "acid" = 0) // I just wanted to give Malumite robes a tiny bit of fire protection because they're craftspeople. + /obj/item/clothing/suit/roguetown/shirt/robe/priest name = "solar vestments" desc = "Holy vestments sanctified by divine hands. Caution is advised if not a faithful." @@ -86,10 +93,10 @@ //................ Wizard Robes ............... // /obj/item/clothing/suit/roguetown/shirt/robe/courtmage - color = "#6c6c6c" + color = CLOTHING_ASH_GREY /obj/item/clothing/suit/roguetown/shirt/robe/mage/Initialize() - color = pick("#4756d8", "#759259", "#bf6f39", "#c1b144") + color = pick( CLOTHING_PEASANT_BROWN, CLOTHING_SPRING_GREEN, CLOTHING_CHESTNUT, CLOTHING_YELLOW_OCHRE) . = ..() /obj/item/clothing/suit/roguetown/shirt/robe/wizard @@ -112,11 +119,39 @@ prevent_crits = list(BCLASS_CUT, BCLASS_TWIST) max_integrity = 200 - +/obj/item/clothing/suit/roguetown/shirt/robe/bath + name = "bathrobe" + desc = "A bathrobe with a luxurious fur interior." + icon_state = "bathrobe" + toggle_icon_state = TRUE + adjustable = CAN_CADJUST + body_parts_covered = ARM_LEFT|ARM_RIGHT + sellprice = 12 + +/obj/item/clothing/suit/roguetown/shirt/robe/bath/AdjustClothes(mob/user) + if(loc == user) + if(adjustable == CAN_CADJUST) + adjustable = CADJUSTED + if(toggle_icon_state) + icon_state = "[initial(icon_state)]_t" + flags_inv = null + if(ishuman(user)) + var/mob/living/carbon/H = user + H.update_inv_armor() + H.update_icon() + else if(adjustable == CADJUSTED) + ResetAdjust(user) + flags_inv = HIDEBOOB + body_parts_covered = ARM_LEFT|ARM_RIGHT|CHEST|GROIN + if(user) + if(ishuman(user)) + var/mob/living/carbon/H = user + H.update_inv_armor() + H.update_icon() /obj/item/clothing/suit/roguetown/shirt/robe/merchant name = "guilder jacket" - desc = "A fancy jacket common with members of the Mercator Guild." + desc = "A fancy jacket common with members of the Mercator guild." icon_state = "merrobe" sellprice = 30 diff --git a/code/modules/clothing/rogueclothes/shirts.dm b/code/modules/clothing/rogueclothes/shirts.dm index 8149897d6c..b122487f79 100644 --- a/code/modules/clothing/rogueclothes/shirts.dm +++ b/code/modules/clothing/rogueclothes/shirts.dm @@ -1,7 +1,7 @@ /obj/item/clothing/suit/roguetown/shirt slot_flags = ITEM_SLOT_SHIRT body_parts_covered = CHEST|VITALS - prevent_crits = list(BCLASS_LASHING) + prevent_crits = list(BCLASS_LASHING, BCLASS_BITE) //Bite crit protection on shirts should help stop cases of spawning in and getting instantly heart crit by a wolf. icon = 'icons/roguetown/clothing/shirts.dmi' mob_overlay_icon = 'icons/roguetown/clothing/onmob/shirts.dmi' equip_sound = 'sound/foley/equip/cloak_equip.ogg' @@ -33,24 +33,27 @@ icon_state = "priestunder" sleeved = 'icons/roguetown/clothing/onmob/helpers/sleeves_shirts.dmi' +/obj/item/clothing/suit/roguetown/shirt/undershirt/uncolored + color = CLOTHING_LINEN + /obj/item/clothing/suit/roguetown/shirt/undershirt/black - color = CLOTHING_BLACK + color = CLOTHING_SOOT_BLACK /obj/item/clothing/suit/roguetown/shirt/undershirt/lord desc = "" - color = "#616898" + color = CLOTHING_BERRY_BLUE /obj/item/clothing/suit/roguetown/shirt/undershirt/red - color = "#851a16" + color = CLOTHING_RED_OCHRE /obj/item/clothing/suit/roguetown/shirt/undershirt/purple - color = CLOTHING_PURPLE + color = CLOTHING_PLUM_PURPLE /obj/item/clothing/suit/roguetown/shirt/undershirt/green - color = "#3c693c" + color = CLOTHING_FOREST_GREEN /obj/item/clothing/suit/roguetown/shirt/undershirt/guard - color = CLOTHING_RED + color = CLOTHING_BLOOD_RED /obj/item/clothing/suit/roguetown/shirt/undershirt/guard/Initialize() . = ..() @@ -65,7 +68,7 @@ /obj/item/clothing/suit/roguetown/shirt/undershirt/guardsecond - color = CLOTHING_PURPLE + color = CLOTHING_PLUM_PURPLE /obj/item/clothing/suit/roguetown/shirt/undershirt/guardsecond/Initialize() . = ..() @@ -83,7 +86,7 @@ return ..() /obj/item/clothing/suit/roguetown/shirt/undershirt/random/Initialize() - color = pick("#6b5445", "#435436", "#704542", "#79763f") + color = RANDOM_PEASANT_DYES ..() /obj/item/clothing/suit/roguetown/shirt/undershirt/puritan @@ -107,7 +110,7 @@ body_parts_covered = CHEST|ARM_RIGHT|VITALS /obj/item/clothing/suit/roguetown/shirt/undershirt/vagrant/Initialize() - color = pick("#6b5445", "#435436", "#704542", "#79763f") + color = pick(CLOTHING_MUD_BROWN, CLOTHING_OLD_LEATHER, CLOTHING_SPRING_GREEN, CLOTHING_BARK_BROWN ) ..() /obj/item/clothing/suit/roguetown/shirt/shortshirt @@ -122,6 +125,9 @@ color = pick("#6b5445", "#435436", "#704542", "#79763f") ..() +/obj/item/clothing/suit/roguetown/shirt/shortshirt/uncolored + color = CLOTHING_LINEN + /obj/item/clothing/suit/roguetown/shirt/shortshirt/merc name = "shirt" desc = "" @@ -155,36 +161,36 @@ /obj/item/clothing/suit/roguetown/shirt/tunic slot_flags = ITEM_SLOT_ARMOR|ITEM_SLOT_SHIRT name = "tunic" - desc = "" + desc = "A comfortable linen tunic." body_parts_covered = CHEST|GROIN|VITALS boobed = FALSE icon_state = "tunic" - item_state = "undershirt" + color = CLOTHING_LINEN sleevetype = "tunic" r_sleeve_status = SLEEVE_NORMAL l_sleeve_status = SLEEVE_NORMAL /obj/item/clothing/suit/roguetown/shirt/tunic/green - color = CLOTHING_GREEN + color = CLOTHING_FOREST_GREEN /obj/item/clothing/suit/roguetown/shirt/tunic/blue - color = CLOTHING_BLUE + color = CLOTHING_SKY_BLUE /obj/item/clothing/suit/roguetown/shirt/tunic/red - color = CLOTHING_RED + color = CLOTHING_BLOOD_RED /obj/item/clothing/suit/roguetown/shirt/tunic/purple - color = CLOTHING_PURPLE + color = CLOTHING_PLUM_PURPLE /obj/item/clothing/suit/roguetown/shirt/tunic/ucolored - color = COLOR_GRAY + color = CLOTHING_ASH_GREY /obj/item/clothing/suit/roguetown/shirt/tunic/random/Initialize() - color = pick(CLOTHING_PURPLE, CLOTHING_RED, CLOTHING_BLUE, CLOTHING_GREEN) + color = pick(CLOTHING_PLUM_PURPLE, CLOTHING_BLOOD_RED, CLOTHING_SKY_BLUE, CLOTHING_FOREST_GREEN) ..() /obj/item/clothing/suit/roguetown/shirt/tunic/tunicprimary - color = CLOTHING_RED + color = CLOTHING_BLOOD_RED /obj/item/clothing/suit/roguetown/shirt/tunic/tunicprimary/Initialize() ..() @@ -211,28 +217,28 @@ /obj/item/clothing/suit/roguetown/shirt/dress/gen slot_flags = ITEM_SLOT_ARMOR|ITEM_SLOT_SHIRT name = "dress" - desc = "" + desc = "A simple dress that can be worn with many accessories to change one's style." body_parts_covered = CHEST|GROIN|LEGS|VITALS icon_state = "dressgen" item_state = "dressgen" /obj/item/clothing/suit/roguetown/shirt/dress/gen/brown - color = "#6b5445" + color = CLOTHING_PEASANT_BROWN /obj/item/clothing/suit/roguetown/shirt/dress/gen/black - color = CLOTHING_BLACK + color = CLOTHING_SOOT_BLACK /obj/item/clothing/suit/roguetown/shirt/dress/gen/blue - color = CLOTHING_BLUE + color = CLOTHING_SKY_BLUE /obj/item/clothing/suit/roguetown/shirt/dress/gen/green - color = "#3c693c" + color = CLOTHING_BOG_GREEN /obj/item/clothing/suit/roguetown/shirt/dress/gen/purple - color = CLOTHING_PURPLE + color = CLOTHING_PLUM_PURPLE /obj/item/clothing/suit/roguetown/shirt/dress/gen/maid - color = COLOR_RED + color = CLOTHING_DARK_INK /obj/item/clothing/suit/roguetown/shirt/dress/gen/maid/Initialize() ..() @@ -246,20 +252,19 @@ return ..() /obj/item/clothing/suit/roguetown/shirt/dress/gen/random/Initialize() - color = pick("#6b5445", "#435436", "#704542", "#79763f", CLOTHING_BLUE) + color = RANDOM_PEASANT_DYES ..() /obj/item/clothing/suit/roguetown/shirt/dress/silkdress slot_flags = ITEM_SLOT_ARMOR|ITEM_SLOT_SHIRT name = "chemise" - desc = "Comfortable yet elegant, it offers both style and comfort for everyday wear" + desc = "Simple yet elegant, it offers both style and comfort for everyday wear." body_parts_covered = CHEST|GROIN|LEGS|VITALS icon_state = "silkdress" - item_state = "silkdress" - color = "#e6e5e5" + color = CLOTHING_LINEN /obj/item/clothing/suit/roguetown/shirt/dress/silkdress/princess - color = CLOTHING_WHITE + color = CLOTHING_CHALK_WHITE /obj/item/clothing/suit/roguetown/shirt/dress/silkdress/princess/Initialize() ..() @@ -273,17 +278,17 @@ return ..() /obj/item/clothing/suit/roguetown/shirt/dress/silkdress/black - color = CLOTHING_BLACK + color = CLOTHING_DARK_INK /obj/item/clothing/suit/roguetown/shirt/dress/silkdress/green - color = CLOTHING_DARK_GREEN + color = CLOTHING_FOREST_GREEN /obj/item/clothing/suit/roguetown/shirt/dress/silkdress/random/Initialize() - color = pick("#e6e5e5", "#52BE80", "#C39BD3", "#EC7063","#5DADE2") + color = RANDOM_NOBLE_DYES ..() /obj/item/clothing/suit/roguetown/shirt/dress/silkdress/silkdressprimary - color = CLOTHING_RED + color = CLOTHING_BLOOD_RED /obj/item/clothing/suit/roguetown/shirt/dress/silkdress/silkdressprimary/Initialize() ..() @@ -299,7 +304,7 @@ /obj/item/clothing/suit/roguetown/shirt/dress/gen/sexy slot_flags = ITEM_SLOT_ARMOR name = "dress" - desc = "" + desc = "A short, tight dress of thin and silky fabric." body_parts_covered = null icon_state = "sexydress" item_state = "sexydress" @@ -308,9 +313,17 @@ color = "#a90707" /obj/item/clothing/suit/roguetown/shirt/dress/gen/sexy/Initialize() - color = pick("#a90707", "#16239a", "#d68fbd", CLOTHING_BLACK) + color = pick(CLOTHING_WINESTAIN_RED, CLOTHING_SKY_BLUE, CLOTHING_SALMON , CLOTHING_SOOT_BLACK) ..() +/obj/item/clothing/suit/roguetown/shirt/dress/valorian + name = "valorian dress" + desc = "A simple deep-blue frock worn in many cities of Valoria." + icon_state = "valorian" + item_state = "valorian" + allowed_race = list("human", "tiefling", "aasimar", "elf") + sellprice = 13 + /obj/item/clothing/suit/roguetown/shirt/undershirt/webs name = "webbed shirt" desc = "Exotic silk finely woven into.. this? Might as well be wearing a spiderweb." @@ -320,7 +333,21 @@ l_sleeve_status = SLEEVE_NORMAL body_parts_covered = CHEST|ARMS|VITALS color = null + sellprice = 30 +/obj/item/clothing/suit/roguetown/shirt/robe/archivist + name = "archivist's robe" + desc = "Robes belonging to seekers of knowledge." + icon_state = "archivist" + icon = 'icons/roguetown/clothing/shirts.dmi' + mob_overlay_icon = 'icons/roguetown/clothing/onmob/shirts.dmi' + sleeved = 'icons/roguetown/clothing/onmob/shirts.dmi' + boobed = TRUE + flags_inv = HIDEBOOB + r_sleeve_status = SLEEVE_NORMAL + l_sleeve_status = SLEEVE_NORMAL + color = null + sellprice = 100 /obj/item/clothing/suit/roguetown/shirt/jester slot_flags = ITEM_SLOT_SHIRT|ITEM_SLOT_ARMOR @@ -340,7 +367,6 @@ name = "grenzelhoftian hip-shirt" desc = "A true fashion statement worn by Grenzelhoftian swordsmen." body_parts_covered = CHEST|GROIN|ARMS|VITALS - armor = list("melee" = 20, "bullet" = 10, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) icon_state = "grenzelshirt" sleeved = 'icons/roguetown/clothing/onmob/helpers/stonekeep_merc.dmi' boobed = TRUE @@ -351,6 +377,10 @@ var/picked = FALSE colorgrenz = TRUE + armor = ARMOR_PADDED_BAD + prevent_crits = MINOR_CRITICALS + max_integrity = INTEGRITY_POOR + /obj/item/clothing/suit/roguetown/shirt/grenzelhoft/proc/get_player_input() if(!ishuman(loc)) return @@ -365,7 +395,7 @@ "TEAL"="#249589", "WHITE"="#ffffff", "ORANGE"="#b86f0c", - "MAJENTA"="#962e5c") + "Royal Majenta"="#962e5c") var/mob/living/carbon/human/L = loc var/choice = input(L, "Choose a color.", "GRENZELHOFTIAN COLORPLEX") as anything in colors var/playerchoice = colors[choice] diff --git a/code/modules/clothing/rogueclothes/storage.dm b/code/modules/clothing/rogueclothes/storage.dm index 4b6ec6749d..0be88202df 100644 --- a/code/modules/clothing/rogueclothes/storage.dm +++ b/code/modules/clothing/rogueclothes/storage.dm @@ -58,7 +58,7 @@ //Assassin's belt starts with their unique dagger, a vial of highly-deadly poison, and a lockpick. /obj/item/storage/belt/rogue/leather/assassin/PopulateContents() new /obj/item/reagent_containers/glass/bottle/rogue/poison(src) - new /obj/item/rogueweapon/huntingknife/idagger/steel/profane(src) + new /obj/item/rogueweapon/knife/dagger/steel/profane(src) new /obj/item/lockpick(src) //Bandit's belt starts with a simple needle and a key to their hideout. @@ -66,11 +66,24 @@ new /obj/item/needle/thorn(src) new /obj/item/roguekey/bandit(src) -//Bandit's belt starts with a bandage and a key to their guildhall. +//Mercs belt starts with a bandage and a key to their guildhall. /obj/item/storage/belt/rogue/leather/mercenary/PopulateContents() new /obj/item/natural/cloth(src) new /obj/item/roguekey/mercenary(src) +/obj/item/storage/belt/rogue/leather/mason/PopulateContents() + new /obj/item/keyring/mason(src) + +/obj/item/storage/belt/rogue/leather/sheriff/PopulateContents() + new /obj/item/rogueweapon/knife/dagger/steel(src) + new /obj/item/needle/thorn(src) + new /obj/item/keyring/captain(src) + +/obj/item/storage/belt/rogue/leather/townwatch/PopulateContents() + new /obj/item/rogueweapon/knife/dagger(src) + new /obj/item/needle/thorn(src) + new /obj/item/keyring/guard(src) + /obj/item/storage/belt/rogue/leather/mercenary/shalal name = "shalal belt" icon_state = "shalal" @@ -116,6 +129,10 @@ color = "#b9a286" heldz_items = 1 +/obj/item/storage/belt/rogue/leather/rope/apprentice + desc = "A rope dyed yellow serves as a belt for Makers Guilds apprentices." + color = "#ac9a15" + /obj/item/storage/belt/rogue/leather/cloth name = "cloth sash" desc = "A simple cloth sash." @@ -124,6 +141,17 @@ /obj/item/storage/belt/rogue/leather/cloth/lady color = "#575160" +/obj/item/storage/belt/rogue/leather/cloth/lady/Initialize() + . = ..() + new /obj/item/needle(src) + +/obj/item/storage/belt/rogue/leather/cloth/tailor + color = "#756889" +/obj/item/storage/belt/rogue/leather/cloth/tailor/Initialize() + . = ..() + new /obj/item/roguekey/tailor(src) + new /obj/item/rogueweapon/knife/dagger(src) + new /obj/item/needle(src) /obj/item/storage/belt/rogue/leather/cloth/bandit color = "#ff0000" @@ -252,7 +280,7 @@ /obj/item/storage/backpack/rogue/satchel/black - color = CLOTHING_BLACK + color = CLOTHING_SOOT_BLACK /obj/item/storage/backpack/rogue/satchel/ComponentInitialize() . = ..() diff --git a/code/modules/clothing/rogueclothes/wrists.dm b/code/modules/clothing/rogueclothes/wrists.dm index 03787c3472..935c14ac6f 100644 --- a/code/modules/clothing/rogueclothes/wrists.dm +++ b/code/modules/clothing/rogueclothes/wrists.dm @@ -14,20 +14,21 @@ body_parts_covered = ARMS icon_state = "bracers" item_state = "bracers" - armor = list("melee" = 80, "bullet" = 60, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - prevent_crits = list(BCLASS_LASHING, BCLASS_BITE, BCLASS_CUT, BCLASS_CHOP, BCLASS_BLUNT, BCLASS_TWIST) blocksound = PLATEHIT resistance_flags = FIRE_PROOF anvilrepair = /datum/skill/craft/armorsmithing sewrepair = FALSE + armor = ARMOR_PLATE + body_parts_covered = ARMS + prevent_crits = ALL_EXCEPT_STAB + max_integrity = INTEGRITY_STRONGER + /obj/item/clothing/wrists/roguetown/bracers/leather name = "leather bracers" desc = "Boiled leather bracers typically worn by archers to protect their forearms." icon_state = "lbracers" item_state = "lbracers" - armor = list("melee" = 30, "bullet" = 15, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - prevent_crits = list(BCLASS_LASHING, BCLASS_BITE, BCLASS_CUT) resistance_flags = null blocksound = SOFTHIT smeltresult = /obj/item/ash @@ -37,6 +38,10 @@ anvilrepair = null sewrepair = TRUE + armor = ARMOR_LEATHER + prevent_crits = CUT_AND_MINOR_CRITS + max_integrity = INTEGRITY_STANDARD + /obj/item/clothing/wrists/roguetown/wrappings name = "solar wrappings" desc = "Common Astratan vestments for the forearms." @@ -56,7 +61,9 @@ desc = "Stalwart bronze bracers, from an age long past." icon_state = "aasimarwrist" item_state = "aasimarwrist" - armor = list("melee" = 70, "bullet" = 50, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) // Less protection than steel + + armor = ARMOR_PLATE_BAD + max_integrity = INTEGRITY_STRONG //Aasimar craftsmanship. //copper bracers @@ -66,14 +73,15 @@ body_parts_covered = ARMS icon_state = "copperarm" item_state = "copperarm" - armor = list("melee" = 50, "bullet" = 60, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - prevent_crits = list(BCLASS_LASHING, BCLASS_BITE, BCLASS_CUT, BCLASS_CHOP, BCLASS_BLUNT, BCLASS_TWIST) smeltresult = /obj/item/ingot/copper blocksound = PLATEHIT resistance_flags = FIRE_PROOF anvilrepair = /datum/skill/craft/armorsmithing sewrepair = FALSE + armor = ARMOR_PLATE_BAD + max_integrity = INTEGRITY_POOR //Copper. + /////////////////////////////////////////////////////////////////// // Part of Kaizoku project. Usage ONLY for Stonekeep/Warmonger, // diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index 51cd73ce0d..8b261e8871 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -16,6 +16,7 @@ var/offset = 0 var/equipped_before_drop = FALSE var/can_be_bloody = TRUE + var/is_barefoot = FALSE bloody_icon_state = "shoeblood" /obj/item/clothing/shoes/ComponentInitialize() diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 19389ce962..adddddc73e 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -312,12 +312,12 @@ if(active) return active = TRUE - set_light(2, 3, rgb(rand(0,255),rand(0,255),rand(0,255))) + set_light(2, 2, 3, l_color = rgb(rand(0,255),rand(0,255),rand(0,255))) addtimer(CALLBACK(src, PROC_REF(lightUp)), 5) /obj/item/clothing/shoes/kindleKicks/proc/lightUp(mob/user) if(lightCycle < 15) - set_light(2, 3, rgb(rand(0,255),rand(0,255),rand(0,255))) + set_light(2, 2, 3, l_color = rgb(rand(0,255),rand(0,255),rand(0,255))) lightCycle += 1 addtimer(CALLBACK(src, PROC_REF(lightUp)), 5) else @@ -368,7 +368,7 @@ if(occupants.len >= max_occupants) to_chat(user, "[src] are full!") return - if(istype(target, /mob/living/simple_animal/hostile/retaliate/poison/snake) || istype(target, /mob/living/simple_animal/hostile/headcrab) || istype(target, /mob/living/carbon/alien/larva)) + if(istype(target, /mob/living/simple_animal/hostile/retaliate/poison/snake)) occupants += target target.forceMove(src) to_chat(user, "[target] slithers into [src].") diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm deleted file mode 100644 index d8e4263bf8..0000000000 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ /dev/null @@ -1,45 +0,0 @@ -//Note: Everything in modules/clothing/spacesuits should have the entire suit grouped together. -// Meaning the the suit is defined directly after the corrisponding helmet. Just like below! -/obj/item/clothing/head/helmet/space - name = "space helmet" - icon_state = "spaceold" - desc = "" - clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | SNUG_FIT - item_state = "spaceold" - permeability_coefficient = 0.01 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 50, "fire" = 80, "acid" = 70) - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - dynamic_hair_suffix = "" - dynamic_fhair_suffix = "" - cold_protection = HEAD - min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT - heat_protection = HEAD - max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT - flash_protect = FLASH_PROTECTION_WELDER - strip_delay = 50 - equip_delay_other = 50 - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF - resistance_flags = NONE - dog_fashion = null - -/obj/item/clothing/suit/space - name = "space suit" - desc = "" - icon_state = "spaceold" - item_state = "s_suit" - w_class = WEIGHT_CLASS_BULKY - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.02 - clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - allowed = list(/obj/item/flashlight, /obj/item/tank/internals) - slowdown = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 50, "fire" = 80, "acid" = 70) - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS - min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT - heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT - strip_delay = 80 - equip_delay_other = 80 - resistance_flags = NONE diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm deleted file mode 100644 index e8b6c04c60..0000000000 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ /dev/null @@ -1,353 +0,0 @@ -/obj/item/clothing/head/helmet/space/chronos - name = "Chronosuit Helmet" - desc = "" - icon_state = "chronohelmet" - item_state = "chronohelmet" - slowdown = 1 - armor = list("melee" = 60, "bullet" = 60, "laser" = 60, "energy" = 60, "bomb" = 30, "bio" = 90, "rad" = 90, "fire" = 100, "acid" = 100) - resistance_flags = FIRE_PROOF | ACID_PROOF - var/obj/item/clothing/suit/space/chronos/suit - -/obj/item/clothing/head/helmet/space/chronos/dropped() - if(suit) - suit.deactivate(TRUE, TRUE) - ..() - -/obj/item/clothing/head/helmet/space/chronos/Destroy() - suit?.deactivate(TRUE, TRUE) - suit = null - return ..() - - -/obj/item/clothing/suit/space/chronos - name = "Chronosuit" - desc = "" - icon_state = "chronosuit" - item_state = "chronosuit" - actions_types = list(/datum/action/item_action/toggle) - armor = list("melee" = 60, "bullet" = 60, "laser" = 60, "energy" = 60, "bomb" = 30, "bio" = 90, "rad" = 90, "fire" = 100, "acid" = 1000) - resistance_flags = FIRE_PROOF | ACID_PROOF - var/list/chronosafe_items = list(/obj/item/chrono_eraser, /obj/item/gun/energy/chrono_gun) - var/obj/item/clothing/head/helmet/space/chronos/helmet - var/obj/effect/chronos_cam/camera - var/datum/action/innate/chrono_teleport/teleport_now = new - var/activating = 0 - var/activated = 0 - var/cooldowntime = 50 //deciseconds - var/teleporting = 0 - var/phase_timer_id - -/obj/item/clothing/suit/space/chronos/Initialize() - teleport_now.chronosuit = src - teleport_now.target = src - return ..() - -/obj/item/clothing/suit/space/chronos/proc/new_camera(mob/user) - if(camera) - qdel(camera) - camera = new /obj/effect/chronos_cam(user) - camera.holder = user - camera.chronosuit = src - user.reset_perspective(camera) - user.set_machine(camera) - user.remote_control = camera - -/obj/item/clothing/suit/space/chronos/ui_action_click() - if((cooldown <= world.time) && !teleporting && !activating) - if(!activated) - activate() - else - deactivate() - -/obj/item/clothing/suit/space/chronos/dropped() - deactivate() - ..() - -/obj/item/clothing/suit/space/chronos/Destroy() - deactivate(force = TRUE) - helmet = null - QDEL_NULL(camera) - QDEL_NULL(teleport_now) - return ..() - -/obj/item/clothing/suit/space/chronos/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - var/mob/living/carbon/human/user = src.loc - switch(severity) - if(1) - if(activated && user && ishuman(user) && (user.wear_armor == src)) - to_chat(user, "E:FATAL:RAM_READ_FAIL\nE:FATAL:STACK_EMPTY\nE:FATAL:READ_NULL_POINT\nE:FATAL:PWR_BUS_OVERLOAD") - to_chat(user, "An electromagnetic pulse disrupts my [name] and violently tears you out of time-bluespace!") - user.emote("scream") - deactivate(1, 1) - -/obj/item/clothing/suit/space/chronos/proc/finish_chronowalk(mob/living/carbon/human/user, turf/to_turf) - if(!user) - user = src.loc - if(phase_timer_id) - deltimer(phase_timer_id) - phase_timer_id = 0 - if(istype(user)) - if(to_turf) - user.forceMove(to_turf) - user.SetStun(0) - user.next_move = 1 - user.alpha = 255 - user.update_atom_colour() - user.animate_movement = FORWARD_STEPS - user.notransform = 0 - user.anchored = FALSE - teleporting = 0 - for(var/obj/item/I in user.held_items) - REMOVE_TRAIT(I, TRAIT_NODROP, CHRONOSUIT_TRAIT) - if(camera) - camera.remove_target_ui() - camera.forceMove(user) - user.reset_perspective(camera) - teleport_now.UpdateButtonIcon() - -/obj/item/clothing/suit/space/chronos/proc/chronowalk(atom/location) - var/mob/living/carbon/human/user = src.loc - if(activated && !teleporting && user && istype(user) && location && user.loc && location.loc && user.wear_armor == src && user.stat == CONSCIOUS) - teleporting = 1 - var/turf/from_turf = get_turf(user) - var/turf/to_turf = get_turf(location) - var/distance = cheap_hypotenuse(from_turf.x, from_turf.y, to_turf.x, to_turf.y) - var/phase_in_ds = distance*2 - - if(camera) - camera.remove_target_ui() - - teleport_now.UpdateButtonIcon() - - var/list/nonsafe_slots = list(SLOT_BELT, SLOT_BACK) - var/list/exposed = list() - for(var/slot in nonsafe_slots) - var/obj/item/slot_item = user.get_item_by_slot(slot) - exposed += slot_item - exposed += user.held_items - for(var/exposed_item in exposed) - var/obj/item/exposed_I = exposed_item - if(exposed_I && !(exposed_I.type in chronosafe_items) && user.dropItemToGround(exposed_I)) - to_chat(user, "My [exposed_I.name] got left behind.") - - user.ExtinguishMob() - - for(var/obj/item/I in user.held_items) - ADD_TRAIT(I, TRAIT_NODROP, CHRONOSUIT_TRAIT) - user.animate_movement = NO_STEPS - user.changeNext_move(8 + phase_in_ds) - user.notransform = 1 - user.anchored = TRUE - user.Stun(INFINITY) - - animate(user, color = "#00ccee", time = 3) - phase_timer_id = addtimer(CALLBACK(src, PROC_REF(phase_2), user, to_turf, phase_in_ds), 3, TIMER_STOPPABLE) - -/obj/item/clothing/suit/space/chronos/proc/phase_2(mob/living/carbon/human/user, turf/to_turf, phase_in_ds) - if(teleporting && activated && user) - animate(user, color = list(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 1,1,1,0), time = 2) - phase_timer_id = addtimer(CALLBACK(src, PROC_REF(phase_3), user, to_turf, phase_in_ds), 2, TIMER_STOPPABLE) - else - finish_chronowalk(user, to_turf) - -/obj/item/clothing/suit/space/chronos/proc/phase_3(mob/living/carbon/human/user, turf/to_turf, phase_in_ds) - if(teleporting && activated && user) - user.forceMove(to_turf) - animate(user, color = "#00ccee", time = phase_in_ds) - phase_timer_id = addtimer(CALLBACK(src, PROC_REF(phase_4), user, to_turf), phase_in_ds, TIMER_STOPPABLE) - else - finish_chronowalk(user, to_turf) - -/obj/item/clothing/suit/space/chronos/proc/phase_4(mob/living/carbon/human/user, turf/to_turf) - if(teleporting && activated && user) - animate(user, color = "#ffffff", time = 3) - phase_timer_id = addtimer(CALLBACK(src, PROC_REF(finish_chronowalk), user, to_turf), 3, TIMER_STOPPABLE) - else - finish_chronowalk(user, to_turf) - -/obj/item/clothing/suit/space/chronos/process() - if(activated) - var/mob/living/carbon/human/user = src.loc - if(user && ishuman(user) && (user.wear_armor == src)) - if(camera && (user.remote_control == camera)) - if(!teleporting) - if(camera.loc != user && ((camera.x != user.x) || (camera.y != user.y) || (camera.z != user.z))) - if(camera.phase_time <= world.time) - chronowalk(camera) - else - camera.remove_target_ui() - else - new_camera(user) - else - STOP_PROCESSING(SSobj, src) - -/obj/item/clothing/suit/space/chronos/proc/activate() - if(!activating && !activated && !teleporting) - activating = 1 - var/mob/living/carbon/human/user = src.loc - if(user && ishuman(user) && user.wear_armor == src) - to_chat(user, "\nChronosuitMK4 login: root") - to_chat(user, "Password:\n") - to_chat(user, "root@ChronosuitMK4# chronowalk4 --start\n") - if(user.head && istype(user.head, /obj/item/clothing/head/helmet/space/chronos)) - to_chat(user, "\[ ok \] Mounting /dev/helm") - helmet = user.head - ADD_TRAIT(helmet, TRAIT_NODROP, CHRONOSUIT_TRAIT) - helmet.suit = src - ADD_TRAIT(src, TRAIT_NODROP, CHRONOSUIT_TRAIT) - to_chat(user, "\[ ok \] Starting brainwave scanner") - to_chat(user, "\[ ok \] Starting ui display driver") - to_chat(user, "\[ ok \] Initializing chronowalk4-view") - new_camera(user) - START_PROCESSING(SSobj, src) - activated = 1 - else - to_chat(user, "\[ fail \] Mounting /dev/helm") - to_chat(user, "FATAL: Unable to locate /dev/helm. Aborting...") - teleport_now.Grant(user) - cooldown = world.time + cooldowntime - activating = 0 - -/obj/item/clothing/suit/space/chronos/proc/deactivate(force = 0, silent = FALSE) - if(!activated || (teleporting && !force)) - return - activating = 1 - var/mob/living/carbon/human/user = src.loc - var/hard_landing = teleporting && force - REMOVE_TRAIT(src, TRAIT_NODROP, CHRONOSUIT_TRAIT) - cooldown = world.time + cooldowntime * 1.5 - activated = 0 - activating = 0 - finish_chronowalk() - if(user && ishuman(user)) - teleport_now.Remove(user) - if(user.wear_armor == src) - if(hard_landing) - user.electrocute_act(35, src, flags = SHOCK_NOGLOVES) - user.Paralyze(200) - if(!silent) - to_chat(user, "\nroot@ChronosuitMK4# chronowalk4 --stop\n") - if(camera) - to_chat(user, "\[ ok \] Sending TERM signal to chronowalk4-view") - if(helmet) - to_chat(user, "\[ ok \] Stopping ui display driver") - to_chat(user, "\[ ok \] Stopping brainwave scanner") - to_chat(user, "\[ ok \] Unmounting /dev/helmet") - to_chat(user, "logout") - if(helmet) - REMOVE_TRAIT(helmet, TRAIT_NODROP, CHRONOSUIT_TRAIT) - helmet.suit = null - helmet = null - if(camera) - QDEL_NULL(camera) - -/obj/effect/chronos_cam - name = "Chronosuit View" - density = FALSE - anchored = TRUE - invisibility = INVISIBILITY_ABSTRACT - opacity = 0 - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - var/mob/holder - var/phase_time = 0 - var/phase_time_length = 3 - var/atom/movable/screen/chronos_target/target_ui - var/obj/item/clothing/suit/space/chronos/chronosuit - -/obj/effect/chronos_cam/Destroy() - holder = null - chronosuit = null - QDEL_NULL(target_ui) - return ..() - -/obj/effect/chronos_cam/singularity_act() - return - -/obj/effect/chronos_cam/singularity_pull() - return - -/obj/effect/chronos_cam/proc/create_target_ui() - if(holder && holder.client && chronosuit) - if(target_ui) - remove_target_ui() - target_ui = new(src, holder) - holder.client.screen += target_ui - -/obj/effect/chronos_cam/proc/remove_target_ui() - if(target_ui) - QDEL_NULL(target_ui) - -/obj/effect/chronos_cam/relaymove(mob/user, direction) - if(!holder) - qdel(src) - return - if(user == holder) - if(loc == user || (user.client && user.client.eye != src)) - forceMove(user.drop_location()) - user.set_machine(src) - user.reset_perspective(src) - var/atom/step = get_step(src, direction) - if(step) - if((step.x <= TRANSITIONEDGE) || (step.x >= (world.maxx - TRANSITIONEDGE - 1)) || (step.y <= TRANSITIONEDGE) || (step.y >= (world.maxy - TRANSITIONEDGE - 1))) - if(!Move(step)) - forceMove(step) - else - forceMove(step) - if((x == holder.x) && (y == holder.y) && (z == holder.z)) - forceMove(user) - user.reset_perspective(user) - remove_target_ui() - else if(!target_ui) - create_target_ui() - phase_time = world.time + phase_time_length - -/obj/effect/chronos_cam/check_eye(mob/user) - if(user != holder) - user.unset_machine() - qdel(src) - -/obj/effect/chronos_cam/on_unset_machine(mob/user) - user.reset_perspective(null) - -/obj/effect/chronos_cam/Destroy() - if(holder) - if(holder.remote_control == src) - holder.remote_control = null - if(holder.client && (holder.machine == src)) - holder.unset_machine() - return ..() - -/atom/movable/screen/chronos_target - name = "target display" - screen_loc = "CENTER,CENTER" - color = list(1,0,0,0, 0,1,0,0.8, 0,0,1,0.933, 0,0,0,0, 0,0,0,0) - appearance_flags = KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE - -/atom/movable/screen/chronos_target/Initialize(mapload, mob/living/carbon/human/user) - if(user) - vis_contents += user - else - qdel(src) - return ..() - -/datum/action/innate/chrono_teleport - name = "Teleport Now" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "chrono_phase" - check_flags = AB_CHECK_CONSCIOUS //|AB_CHECK_INSIDE - var/obj/item/clothing/suit/space/chronos/chronosuit = null - -/datum/action/innate/chrono_teleport/Destroy() - chronosuit = null - return ..() - -/datum/action/innate/chrono_teleport/IsAvailable() - return (chronosuit && chronosuit.activated && chronosuit.camera && !chronosuit.teleporting) - -/datum/action/innate/chrono_teleport/Activate() - if(IsAvailable()) - if(chronosuit.camera) - chronosuit.chronowalk(chronosuit.camera) diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm deleted file mode 100644 index c33b6f76e6..0000000000 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ /dev/null @@ -1,858 +0,0 @@ - //Baseline hardsuits -/obj/item/clothing/head/helmet/space/hardsuit - name = "hardsuit helmet" - desc = "" - icon_state = "hardsuit0-engineering" - item_state = "eng_helm" - max_integrity = 300 - armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 50, "acid" = 75) - var/basestate = "hardsuit" - var/brightness_on = 4 //luminosity when on - var/on = FALSE - var/obj/item/clothing/suit/space/hardsuit/suit - var/hardsuit_type = "engineering" //Determines used sprites: hardsuit[on]-[type] - actions_types = list(/datum/action/item_action/toggle_helmet_light) - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF - visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF - var/rad_count = 0 - var/rad_record = 0 - var/grace_count = 0 - var/datum/looping_sound/geiger/soundloop - -/obj/item/clothing/head/helmet/space/hardsuit/Initialize() - . = ..() - soundloop = new(list(), FALSE, TRUE) - soundloop.volume = 5 - START_PROCESSING(SSobj, src) - -/obj/item/clothing/head/helmet/space/hardsuit/Destroy() - . = ..() - STOP_PROCESSING(SSobj, src) - -/obj/item/clothing/head/helmet/space/hardsuit/attack_self(mob/user) - on = !on - icon_state = "[basestate][on]-[hardsuit_type]" - user.update_inv_head() //so our mob-overlays update - - if(on) - set_light(brightness_on) - else - set_light(0) - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - -/obj/item/clothing/head/helmet/space/hardsuit/dropped(mob/user) - ..() - if(suit) - suit.RemoveHelmet() - soundloop.stop(user) - -/obj/item/clothing/head/helmet/space/hardsuit/item_action_slot_check(slot) - if(slot == SLOT_HEAD) - return 1 - -/obj/item/clothing/head/helmet/space/hardsuit/equipped(mob/user, slot) - ..() - if(slot != SLOT_HEAD) - if(suit) - suit.RemoveHelmet() - soundloop.stop(user) - else - qdel(src) - else - soundloop.start(user) - -/obj/item/clothing/head/helmet/space/hardsuit/proc/display_visor_message(msg) - var/mob/wearer = loc - if(msg && ishuman(wearer)) - wearer.show_message("[icon2html(src, wearer)][msg]", MSG_VISUAL) - -/obj/item/clothing/head/helmet/space/hardsuit/rad_act(severity) - . = ..() - rad_count += severity - -/obj/item/clothing/head/helmet/space/hardsuit/process() - if(!rad_count) - grace_count++ - if(grace_count == 2) - soundloop.last_radiation = 0 - return - - grace_count = 0 - rad_record -= rad_record/5 - rad_record += rad_count/5 - rad_count = 0 - - soundloop.last_radiation = rad_record - -/obj/item/clothing/head/helmet/space/hardsuit/emp_act(severity) - . = ..() - display_visor_message("[severity > 1 ? "Light" : "Strong"] electromagnetic pulse detected!") - - -/obj/item/clothing/suit/space/hardsuit - name = "hardsuit" - desc = "" - icon_state = "hardsuit-engineering" - item_state = "eng_hardsuit" - max_integrity = 300 - armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 50, "acid" = 75) - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser) - siemens_coefficient = 0 - var/obj/item/clothing/head/helmet/space/hardsuit/helmet - actions_types = list(/datum/action/item_action/toggle_helmet) - var/helmettype = /obj/item/clothing/head/helmet/space/hardsuit - var/obj/item/tank/jetpack/suit/jetpack = null - var/hardsuit_type - - -/obj/item/clothing/suit/space/hardsuit/Initialize() - if(jetpack && ispath(jetpack)) - jetpack = new jetpack(src) - . = ..() - -/obj/item/clothing/suit/space/hardsuit/attack_self(mob/user) - user.changeNext_move(CLICK_CD_MELEE) - ..() - -/obj/item/clothing/suit/space/hardsuit/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/tank/jetpack/suit)) - if(jetpack) - to_chat(user, "[src] already has a jetpack installed.") - return - if(src == user.get_item_by_slot(SLOT_ARMOR)) //Make sure the player is not wearing the suit before applying the upgrade. - to_chat(user, "I cannot install the upgrade to [src] while wearing it.") - return - - if(user.transferItemToLoc(I, src)) - jetpack = I - to_chat(user, "I successfully install the jetpack into [src].") - return - else if(I.tool_behaviour == TOOL_SCREWDRIVER) - if(!jetpack) - to_chat(user, "[src] has no jetpack installed.") - return - if(src == user.get_item_by_slot(SLOT_ARMOR)) - to_chat(user, "I cannot remove the jetpack from [src] while wearing it.") - return - - jetpack.turn_off(user) - jetpack.forceMove(drop_location()) - jetpack = null - to_chat(user, "I successfully remove the jetpack from [src].") - return - return ..() - - -/obj/item/clothing/suit/space/hardsuit/equipped(mob/user, slot) - ..() - if(jetpack) - if(slot == SLOT_ARMOR) - for(var/X in jetpack.actions) - var/datum/action/A = X - A.Grant(user) - -/obj/item/clothing/suit/space/hardsuit/dropped(mob/user) - ..() - if(jetpack) - for(var/X in jetpack.actions) - var/datum/action/A = X - A.Remove(user) - -/obj/item/clothing/suit/space/hardsuit/item_action_slot_check(slot) - if(slot == SLOT_ARMOR) //we only give the mob the ability to toggle the helmet if he's wearing the hardsuit. - return 1 - - //Engineering -/obj/item/clothing/head/helmet/space/hardsuit/engine - name = "engineering hardsuit helmet" - desc = "" - icon_state = "hardsuit0-engineering" - item_state = "eng_helm" - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 75) - hardsuit_type = "engineering" - resistance_flags = FIRE_PROOF - -/obj/item/clothing/suit/space/hardsuit/engine - name = "engineering hardsuit" - desc = "" - icon_state = "hardsuit-engineering" - item_state = "eng_hardsuit" - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 75) - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine - resistance_flags = FIRE_PROOF - - //Atmospherics -/obj/item/clothing/head/helmet/space/hardsuit/engine/atmos - name = "atmospherics hardsuit helmet" - desc = "" - icon_state = "hardsuit0-atmospherics" - item_state = "atmo_helm" - hardsuit_type = "atmospherics" - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 25, "fire" = 100, "acid" = 75) - heat_protection = HEAD //Uncomment to enable firesuit protection - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - -/obj/item/clothing/suit/space/hardsuit/engine/atmos - name = "atmospherics hardsuit" - desc = "" - icon_state = "hardsuit-atmospherics" - item_state = "atmo_hardsuit" - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 25, "fire" = 100, "acid" = 75) - heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/atmos - - - //Chief Engineer's hardsuit -/obj/item/clothing/head/helmet/space/hardsuit/engine/elite - name = "advanced hardsuit helmet" - desc = "" - icon_state = "hardsuit0-white" - item_state = "ce_helm" - hardsuit_type = "white" - armor = list("melee" = 40, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 90) - heat_protection = HEAD - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - -/obj/item/clothing/suit/space/hardsuit/engine/elite - icon_state = "hardsuit-white" - name = "advanced hardsuit" - desc = "" - item_state = "ce_hardsuit" - armor = list("melee" = 40, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 90) - heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/elite - jetpack = /obj/item/tank/jetpack/suit - - //Mining hardsuit -/obj/item/clothing/head/helmet/space/hardsuit/mining - name = "mining hardsuit helmet" - desc = "" - icon_state = "hardsuit0-mining" - item_state = "mining_helm" - hardsuit_type = "mining" - max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF - heat_protection = HEAD - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 75) - brightness_on = 7 - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator) - -/obj/item/clothing/head/helmet/space/hardsuit/mining/Initialize() - . = ..() - AddComponent(/datum/component/armor_plate) - -/obj/item/clothing/suit/space/hardsuit/mining - name = "mining hardsuit" - desc = "" - icon_state = "hardsuit-mining" - item_state = "mining_hardsuit" - max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 75) - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe) - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/mining - heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - -/obj/item/clothing/suit/space/hardsuit/mining/Initialize() - . = ..() - AddComponent(/datum/component/armor_plate) - - //Syndicate hardsuit -/obj/item/clothing/head/helmet/space/hardsuit/syndi - name = "blood-red hardsuit helmet" - desc = "" - alt_desc = "" - icon_state = "hardsuit1-syndi" - item_state = "syndie_helm" - hardsuit_type = "syndi" - armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 40, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 90) - on = TRUE - var/obj/item/clothing/suit/space/hardsuit/syndi/linkedsuit = null - actions_types = list(/datum/action/item_action/toggle_helmet_mode) - visor_flags_inv = HIDEMASK|HIDEEYES|HIDEFACE|HIDEFACIALHAIR - visor_flags = STOPSPRESSUREDAMAGE - -/obj/item/clothing/head/helmet/space/hardsuit/syndi/update_icon() - icon_state = "hardsuit[on]-[hardsuit_type]" - -/obj/item/clothing/head/helmet/space/hardsuit/syndi/Initialize() - . = ..() - if(istype(loc, /obj/item/clothing/suit/space/hardsuit/syndi)) - linkedsuit = loc - -/obj/item/clothing/head/helmet/space/hardsuit/syndi/attack_self(mob/user) //Toggle Helmet - if(!isturf(user.loc)) - to_chat(user, "I cannot toggle your helmet while in this [user.loc]!" ) - return - on = !on - if(on || force) - to_chat(user, "I switch your hardsuit to EVA mode, sacrificing speed for space protection.") - name = initial(name) - desc = initial(desc) - set_light(brightness_on) - clothing_flags |= visor_flags - flags_cover |= HEADCOVERSEYES | HEADCOVERSMOUTH - flags_inv |= visor_flags_inv - cold_protection |= HEAD - else - to_chat(user, "I switch your hardsuit to combat mode and can now run at full speed.") - name += " (combat)" - desc = alt_desc - set_light(0) - clothing_flags &= ~visor_flags - flags_cover &= ~(HEADCOVERSEYES | HEADCOVERSMOUTH) - flags_inv &= ~visor_flags_inv - cold_protection &= ~HEAD - update_icon() - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - toggle_hardsuit_mode(user) - user.update_inv_head() - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.head_update(src, forced = 1) - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - -/obj/item/clothing/head/helmet/space/hardsuit/syndi/proc/toggle_hardsuit_mode(mob/user) //Helmet Toggles Suit Mode - if(linkedsuit) - if(on) - linkedsuit.name = initial(linkedsuit.name) - linkedsuit.desc = initial(linkedsuit.desc) - linkedsuit.slowdown = 1 - linkedsuit.clothing_flags |= STOPSPRESSUREDAMAGE - linkedsuit.cold_protection |= CHEST | GROIN | LEGS | FEET | ARMS | HANDS - else - linkedsuit.name += " (combat)" - linkedsuit.desc = linkedsuit.alt_desc - linkedsuit.slowdown = 0 - linkedsuit.clothing_flags &= ~STOPSPRESSUREDAMAGE - linkedsuit.cold_protection &= ~(CHEST | GROIN | LEGS | FEET | ARMS | HANDS) - - linkedsuit.icon_state = "hardsuit[on]-[hardsuit_type]" - linkedsuit.update_icon() - user.update_inv_wear_suit() - user.update_inv_w_uniform() - - -/obj/item/clothing/suit/space/hardsuit/syndi - name = "blood-red hardsuit" - desc = "" - alt_desc = "" - icon_state = "hardsuit1-syndi" - item_state = "syndie_hardsuit" - hardsuit_type = "syndi" - w_class = WEIGHT_CLASS_NORMAL - armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 40, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 90) - allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi - jetpack = /obj/item/tank/jetpack/suit - -//Elite Syndie suit -/obj/item/clothing/head/helmet/space/hardsuit/syndi/elite - name = "elite syndicate hardsuit helmet" - desc = "" - alt_desc = "" - icon_state = "hardsuit0-syndielite" - hardsuit_type = "syndielite" - armor = list("melee" = 60, "bullet" = 60, "laser" = 50, "energy" = 60, "bomb" = 55, "bio" = 100, "rad" = 70, "fire" = 100, "acid" = 100) - heat_protection = HEAD - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/debug - -/obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/debug/Initialize() - . = ..() - soundloop.volume = 0 - -/obj/item/clothing/suit/space/hardsuit/syndi/elite - name = "elite syndicate hardsuit" - desc = "" - alt_desc = "" - icon_state = "hardsuit0-syndielite" - hardsuit_type = "syndielite" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite - armor = list("melee" = 60, "bullet" = 60, "laser" = 50, "energy" = 60, "bomb" = 55, "bio" = 100, "rad" = 70, "fire" = 100, "acid" = 100) - heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/clothing/suit/space/hardsuit/syndi/elite/debug - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/debug - -//The Owl Hardsuit -/obj/item/clothing/head/helmet/space/hardsuit/syndi/owl - name = "owl hardsuit helmet" - desc = "" - alt_desc = "" - icon_state = "hardsuit1-owl" - item_state = "s_helmet" - hardsuit_type = "owl" - visor_flags_inv = 0 - visor_flags = 0 - on = FALSE - -/obj/item/clothing/suit/space/hardsuit/syndi/owl - name = "owl hardsuit" - desc = "" - alt_desc = "" - icon_state = "hardsuit1-owl" - item_state = "s_suit" - hardsuit_type = "owl" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/owl - - - //Wizard hardsuit -/obj/item/clothing/head/helmet/space/hardsuit/wizard - name = "gem-encrusted hardsuit helmet" - desc = "" - icon_state = "hardsuit0-wiz" - item_state = "wiz_helm" - hardsuit_type = "wiz" - resistance_flags = FIRE_PROOF | ACID_PROOF //No longer shall our kind be foiled by lone chemists with spray bottles! - armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 50, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) - heat_protection = HEAD //Uncomment to enable firesuit protection - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - -/obj/item/clothing/suit/space/hardsuit/wizard - name = "gem-encrusted hardsuit" - desc = "" - icon_state = "hardsuit-wiz" - item_state = "wiz_hardsuit" - w_class = WEIGHT_CLASS_NORMAL - resistance_flags = FIRE_PROOF | ACID_PROOF - armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 50, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) - allowed = list(/obj/item/teleportation_scroll, /obj/item/tank/internals) - heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/wizard - -/obj/item/clothing/suit/space/hardsuit/wizard/Initialize() - . = ..() - AddComponent(/datum/component/anti_magic, TRUE, FALSE, FALSE, ITEM_SLOT_OCLOTHING, INFINITY, FALSE) - - - //Medical hardsuit -/obj/item/clothing/head/helmet/space/hardsuit/medical - name = "medical hardsuit helmet" - desc = "" - icon_state = "hardsuit0-medical" - item_state = "medical_helm" - hardsuit_type = "medical" - flash_protect = FLASH_PROTECTION_NONE - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 75) - clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | SCAN_REAGENTS | SNUG_FIT - -/obj/item/clothing/suit/space/hardsuit/medical - name = "medical hardsuit" - desc = "" - icon_state = "hardsuit-medical" - item_state = "medical_hardsuit" - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/firstaid, /obj/item/healthanalyzer, /obj/item/stack/medical) - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 75) - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/medical - slowdown = 0.5 - - //Research Director hardsuit -/obj/item/clothing/head/helmet/space/hardsuit/rd - name = "prototype hardsuit helmet" - desc = "" - icon_state = "hardsuit0-rd" - hardsuit_type = "rd" - resistance_flags = ACID_PROOF | FIRE_PROOF - max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 100, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 80) - var/obj/machinery/doppler_array/integrated/bomb_radar - clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | SCAN_REAGENTS | SNUG_FIT - actions_types = list(/datum/action/item_action/toggle_helmet_light, /datum/action/item_action/toggle_research_scanner) - -/obj/item/clothing/head/helmet/space/hardsuit/rd/Initialize() - . = ..() - bomb_radar = new /obj/machinery/doppler_array/integrated(src) - -/obj/item/clothing/head/helmet/space/hardsuit/rd/equipped(mob/living/carbon/human/user, slot) - ..() - if (slot == SLOT_HEAD) - var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_DIAGNOSTIC_BASIC] - DHUD.add_hud_to(user) - -/obj/item/clothing/head/helmet/space/hardsuit/rd/dropped(mob/living/carbon/human/user) - ..() - if (user.head == src) - var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_DIAGNOSTIC_BASIC] - DHUD.remove_hud_from(user) - -/obj/item/clothing/suit/space/hardsuit/rd - name = "prototype hardsuit" - desc = "" - icon_state = "hardsuit-rd" - item_state = "hardsuit-rd" - resistance_flags = ACID_PROOF | FIRE_PROOF - max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT //Same as an emergency firesuit. Not ideal for extended exposure. - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/gun/energy/wormhole_projector, - /obj/item/hand_tele, /obj/item/aicard) - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 100, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 80) - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/rd - - - - //Security hardsuit -/obj/item/clothing/head/helmet/space/hardsuit/security - name = "security hardsuit helmet" - desc = "" - icon_state = "hardsuit0-sec" - item_state = "sec_helm" - hardsuit_type = "sec" - armor = list("melee" = 35, "bullet" = 15, "laser" = 30,"energy" = 40, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75) - - -/obj/item/clothing/suit/space/hardsuit/security - icon_state = "hardsuit-sec" - name = "security hardsuit" - desc = "" - item_state = "sec_hardsuit" - armor = list("melee" = 35, "bullet" = 15, "laser" = 30, "energy" = 40, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75) - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security - -/obj/item/clothing/suit/space/hardsuit/security/Initialize() - . = ..() - allowed = GLOB.security_hardsuit_allowed - - //Head of Security hardsuit -/obj/item/clothing/head/helmet/space/hardsuit/security/hos - name = "head of security's hardsuit helmet" - desc = "" - icon_state = "hardsuit0-hos" - hardsuit_type = "hos" - armor = list("melee" = 45, "bullet" = 25, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 100, "rad" = 50, "fire" = 95, "acid" = 95) - - -/obj/item/clothing/suit/space/hardsuit/security/hos - icon_state = "hardsuit-hos" - name = "head of security's hardsuit" - desc = "" - armor = list("melee" = 45, "bullet" = 25, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 100, "rad" = 50, "fire" = 95, "acid" = 95) - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security/hos - jetpack = /obj/item/tank/jetpack/suit - - //SWAT MKII -/obj/item/clothing/head/helmet/space/hardsuit/swat - name = "\improper MK.II SWAT Helmet" - icon_state = "swat2helm" - item_state = "swat2helm" - desc = "" - armor = list("melee" = 40, "bullet" = 50, "laser" = 50, "energy" = 60, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) - resistance_flags = FIRE_PROOF | ACID_PROOF - flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR //we want to see the mask //this makes the hardsuit not fireproof you genius - heat_protection = HEAD - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - actions_types = list() - -/obj/item/clothing/head/helmet/space/hardsuit/swat/attack_self() - -/obj/item/clothing/suit/space/hardsuit/swat - name = "\improper MK.II SWAT Suit" - desc = "" - icon_state = "swat2" - item_state = "swat2" - armor = list("melee" = 40, "bullet" = 50, "laser" = 50, "energy" = 60, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) - resistance_flags = FIRE_PROOF | ACID_PROOF - heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT //this needed to be added a long fucking time ago - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/swat - -/obj/item/clothing/suit/space/hardsuit/swat/Initialize() - . = ..() - allowed = GLOB.security_hardsuit_allowed - - //Captain -/obj/item/clothing/head/helmet/space/hardsuit/swat/captain - name = "captain's SWAT helmet" - icon_state = "capspace" - item_state = "capspacehelmet" - desc = "" - -/obj/item/clothing/suit/space/hardsuit/swat/captain - name = "captain's SWAT suit" - desc = "" - icon_state = "caparmor" - item_state = "capspacesuit" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/swat/captain - - //Clown -/obj/item/clothing/head/helmet/space/hardsuit/clown - name = "cosmohonk hardsuit helmet" - desc = "" - icon_state = "hardsuit0-clown" - item_state = "hardsuit0-clown" - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 60, "acid" = 30) - hardsuit_type = "clown" - -/obj/item/clothing/suit/space/hardsuit/clown - name = "cosmohonk hardsuit" - desc = "" - icon_state = "hardsuit-clown" - item_state = "clown_hardsuit" - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 60, "acid" = 30) - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/clown - -/obj/item/clothing/suit/space/hardsuit/clown/mob_can_equip(mob/M, slot) - if(!..() || !ishuman(M)) - return FALSE - var/mob/living/carbon/human/H = M - if(H.mind.assigned_role == "Clown") - return TRUE - else - return FALSE - - //Old Prototype -/obj/item/clothing/head/helmet/space/hardsuit/ancient - name = "prototype RIG hardsuit helmet" - desc = "" - icon_state = "hardsuit0-ancient" - item_state = "anc_helm" - armor = list("melee" = 30, "bullet" = 5, "laser" = 5, "energy" = 15, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 75) - hardsuit_type = "ancient" - resistance_flags = FIRE_PROOF - -/obj/item/clothing/suit/space/hardsuit/ancient - name = "prototype RIG hardsuit" - desc = "" - icon_state = "hardsuit-ancient" - item_state = "anc_hardsuit" - armor = list("melee" = 30, "bullet" = 5, "laser" = 5, "energy" = 15, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 75) - slowdown = 3 - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ancient - resistance_flags = FIRE_PROOF - var/footstep = 1 - var/mob/listeningTo - -/obj/item/clothing/suit/space/hardsuit/ancient/proc/on_mob_move() - var/mob/living/carbon/human/H = loc - if(!istype(H) || H.wear_armor != src) - return - if(footstep > 1) - playsound(src, 'sound/blank.ogg', 100, TRUE) - footstep = 0 - else - footstep++ - -/obj/item/clothing/suit/space/hardsuit/ancient/equipped(mob/user, slot) - . = ..() - if(slot != SLOT_ARMOR) - if(listeningTo) - UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) - return - if(listeningTo == user) - return - if(listeningTo) - UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) - RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_mob_move)) - listeningTo = user - -/obj/item/clothing/suit/space/hardsuit/ancient/dropped() - . = ..() - if(listeningTo) - UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) - -/obj/item/clothing/suit/space/hardsuit/ancient/Destroy() - listeningTo = null - return ..() - -/////////////SHIELDED////////////////////////////////// - -/obj/item/clothing/suit/space/hardsuit/shielded - name = "shielded hardsuit" - desc = "" - icon_state = "hardsuit-hos" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security/hos - allowed = null - armor = list("melee" = 30, "bullet" = 15, "laser" = 30, "energy" = 40, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) - resistance_flags = FIRE_PROOF | ACID_PROOF - var/current_charges = 3 - var/max_charges = 3 //How many charges total the shielding has - var/recharge_delay = 200 //How long after we've been shot before we can start recharging. 20 seconds here - var/recharge_cooldown = 0 //Time since we've last been shot - var/recharge_rate = 1 //How quickly the shield recharges once it starts charging - var/shield_state = "shield-old" - var/shield_on = "shield-old" - -/obj/item/clothing/suit/space/hardsuit/shielded/Initialize() - . = ..() - if(!allowed) - allowed = GLOB.advanced_hardsuit_allowed - -/obj/item/clothing/suit/space/hardsuit/shielded/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - recharge_cooldown = world.time + recharge_delay - if(current_charges > 0) - var/datum/effect_system/spark_spread/s = new - s.set_up(2, 1, src) - s.start() - owner.visible_message("[owner]'s shields deflect [attack_text] in a shower of sparks!") - current_charges-- - if(recharge_rate) - START_PROCESSING(SSobj, src) - if(current_charges <= 0) - owner.visible_message("[owner]'s shield overloads!") - shield_state = "broken" - owner.update_inv_wear_suit() - return 1 - return 0 - - -/obj/item/clothing/suit/space/hardsuit/shielded/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/clothing/suit/space/hardsuit/shielded/process() - if(world.time > recharge_cooldown && current_charges < max_charges) - current_charges = CLAMP((current_charges + recharge_rate), 0, max_charges) - playsound(loc, 'sound/blank.ogg', 50, TRUE) - if(current_charges == max_charges) - playsound(loc, 'sound/blank.ogg', 50, TRUE) - STOP_PROCESSING(SSobj, src) - shield_state = "[shield_on]" - if(ishuman(loc)) - var/mob/living/carbon/human/C = loc - C.update_inv_wear_suit() - -/obj/item/clothing/suit/space/hardsuit/shielded/worn_overlays(isinhands) - . = list() - if(!isinhands) - . += mutable_appearance('icons/effects/effects.dmi', shield_state, MOB_LAYER + 0.01) - -/obj/item/clothing/head/helmet/space/hardsuit/shielded - resistance_flags = FIRE_PROOF | ACID_PROOF - -///////////////Capture the Flag//////////////////// - -/obj/item/clothing/suit/space/hardsuit/shielded/ctf - name = "white shielded hardsuit" - desc = "" - icon_state = "ert_medical" - item_state = "ert_medical" - hardsuit_type = "ert_medical" - // Adding TRAIT_NODROP is done when the CTF spawner equips people - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf - armor = list("melee" = 0, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 95) - slowdown = 0 - max_charges = 5 - -/obj/item/clothing/suit/space/hardsuit/shielded/ctf/red - name = "red shielded hardsuit" - icon_state = "ert_security" - item_state = "ert_security" - hardsuit_type = "ert_security" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/red - shield_state = "shield-red" - shield_on = "shield-red" - -/obj/item/clothing/suit/space/hardsuit/shielded/ctf/blue - name = "blue shielded hardsuit" - desc = "" - icon_state = "ert_command" - item_state = "ert_command" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/blue - - - -/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf - name = "shielded hardsuit helmet" - desc = "" - icon_state = "hardsuit0-ert_medical" - item_state = "hardsuit0-ert_medical" - hardsuit_type = "ert_medical" - armor = list("melee" = 0, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 95) - - -/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/red - icon_state = "hardsuit0-ert_security" - item_state = "hardsuit0-ert_security" - hardsuit_type = "ert_security" - -/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/blue - name = "shielded hardsuit helmet" - desc = "" - icon_state = "hardsuit0-ert_commander" - item_state = "hardsuit0-ert_commander" - hardsuit_type = "ert_commander" - - - - - -//////Syndicate Version - -/obj/item/clothing/suit/space/hardsuit/shielded/syndi - name = "blood-red hardsuit" - desc = "" - icon_state = "hardsuit1-syndi" - item_state = "syndie_hardsuit" - hardsuit_type = "syndi" - armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 40, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi - slowdown = 0 - shield_state = "shield-red" - shield_on = "shield-red" - -/obj/item/clothing/suit/space/hardsuit/shielded/syndi/multitool_act(mob/living/user, obj/item/I) - . = ..() - if(shield_state == "broken") - to_chat(user, "I can't interface with the hardsuit's software if the shield's broken!") - return - - if(shield_state == "shield-red") - shield_state = "shield-old" - shield_on = "shield-old" - to_chat(user, "I roll back the hardsuit's software, changing the shield's color!") - - else - shield_state = "shield-red" - shield_on = "shield-red" - to_chat(user, "I update the hardsuit's hardware, changing back the shield's color to red.") - user.update_inv_wear_suit() - -/obj/item/clothing/suit/space/hardsuit/shielded/syndi/Initialize() - jetpack = new /obj/item/tank/jetpack/suit(src) - . = ..() - -/obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi - name = "blood-red hardsuit helmet" - desc = "" - icon_state = "hardsuit1-syndi" - item_state = "syndie_helm" - hardsuit_type = "syndi" - armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 40, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) - -///SWAT version -/obj/item/clothing/suit/space/hardsuit/shielded/swat - name = "death commando spacesuit" - desc = "" - icon_state = "deathsquad" - item_state = "swat_suit" - hardsuit_type = "syndi" - max_charges = 4 - current_charges = 4 - recharge_delay = 15 - armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 60, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) - strip_delay = 130 - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/swat - dog_fashion = /datum/dog_fashion/back/deathsquad - -/obj/item/clothing/head/helmet/space/hardsuit/shielded/swat - name = "death commando helmet" - desc = "" - icon_state = "deathsquad" - item_state = "deathsquad" - hardsuit_type = "syndi" - armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 60, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) - strip_delay = 130 - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - actions_types = list() diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm deleted file mode 100644 index ffe29557ad..0000000000 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ /dev/null @@ -1,412 +0,0 @@ -//miscellaneous spacesuits -/* -Contains: -- Captain's spacesuit -- Death squad's hardsuit -- SWAT suit -- Officer's beret/spacesuit -- NASA Voidsuit -- Father Christmas' magical clothes -- Pirate's spacesuit -- ERT hardsuit: command, sec, engi, med, janitor -- EVA spacesuit -- Freedom's spacesuit (freedom from vacuum's oppression) -- Carp hardsuit -- Bounty hunter hardsuit -*/ - - //Death squad armored space suits, not hardsuits! -/obj/item/clothing/head/helmet/space/hardsuit/deathsquad - name = "MK.III SWAT Helmet" - desc = "" - icon_state = "deathsquad" - item_state = "deathsquad" - armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) - strip_delay = 130 - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF | ACID_PROOF - actions_types = list() - -/obj/item/clothing/head/helmet/space/hardsuit/deathsquad/attack_self(mob/user) - return - -/obj/item/clothing/suit/space/hardsuit/deathsquad - name = "MK.III SWAT Suit" - desc = "" - icon_state = "deathsquad" - item_state = "swat_suit" - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat) - armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) - strip_delay = 130 - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF | ACID_PROOF - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/deathsquad - dog_fashion = /datum/dog_fashion/back/deathsquad - - //NEW SWAT suit -/obj/item/clothing/suit/space/swat - name = "MK.I SWAT Suit" - desc = "" - icon_state = "heavy" - item_state = "swat_suit" - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat) - armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 30, "bomb" = 50, "bio" = 90, "rad" = 20, "fire" = 100, "acid" = 100) - strip_delay = 120 - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/clothing/head/helmet/space/beret - name = "officer's beret" - desc = "" - icon_state = "beret_badge" - dynamic_hair_suffix = "+generic" - dynamic_fhair_suffix = "+generic" - flags_inv = 0 - armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) - strip_delay = 130 - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/clothing/suit/space/officer - name = "officer's jacket" - desc = "" - icon_state = "detective" - item_state = "det_suit" - blood_overlay_type = "coat" - slowdown = 0 - flags_inv = 0 - w_class = WEIGHT_CLASS_NORMAL - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) - strip_delay = 130 - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF | ACID_PROOF - - //NASA Voidsuit -/obj/item/clothing/head/helmet/space/nasavoid - name = "NASA Void Helmet" - desc = "" - icon_state = "void" - item_state = "void" - -/obj/item/clothing/suit/space/nasavoid - name = "NASA Voidsuit" - icon_state = "void" - item_state = "void" - desc = "" - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/multitool) - -/obj/item/clothing/head/helmet/space/nasavoid/old - name = "Engineering Void Helmet" - desc = "" - icon_state = "void" - item_state = "void" - -/obj/item/clothing/suit/space/nasavoid/old - name = "Engineering Voidsuit" - icon_state = "void" - item_state = "void" - desc = "" - slowdown = 4 - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/multitool) - - //Space santa outfit suit -/obj/item/clothing/head/helmet/space/santahat - name = "Santa's hat" - desc = "" - icon_state = "santahat" - flags_cover = HEADCOVERSEYES - - dog_fashion = /datum/dog_fashion/head/santa - -/obj/item/clothing/suit/space/santa - name = "Santa's suit" - desc = "" - icon_state = "santa" - item_state = "santa" - slowdown = 0 - allowed = list(/obj/item) //for stuffing exta special presents - - - //Space pirate outfit -/obj/item/clothing/head/helmet/space/pirate - name = "pirate hat" - desc = "" - icon_state = "pirate" - item_state = "pirate" - armor = list("melee" = 30, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 60, "acid" = 75) - flags_inv = HIDEHAIR - strip_delay = 40 - equip_delay_other = 20 - flags_cover = HEADCOVERSEYES - -/obj/item/clothing/head/helmet/space/pirate/bandana - name = "pirate bandana" - icon_state = "bandana" - item_state = "bandana" - -/obj/item/clothing/suit/space/pirate - name = "pirate coat" - desc = "" - icon_state = "pirate" - item_state = "pirate" - w_class = WEIGHT_CLASS_NORMAL - flags_inv = 0 - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/melee/transforming/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/reagent_containers/food/drinks/bottle/rum) - slowdown = 0 - armor = list("melee" = 30, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 60, "acid" = 75) - strip_delay = 40 - equip_delay_other = 20 - - //Emergency Response Team suits -/obj/item/clothing/head/helmet/space/hardsuit/ert - name = "emergency response team commander helmet" - desc = "" - icon_state = "hardsuit0-ert_commander" - item_state = "hardsuit0-ert_commander" - hardsuit_type = "ert_commander" - armor = list("melee" = 65, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 80) - strip_delay = 130 - brightness_on = 7 - resistance_flags = FIRE_PROOF - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - -/obj/item/clothing/head/helmet/space/hardsuit/ert/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, LOCKED_HELMET_TRAIT) - -/obj/item/clothing/suit/space/hardsuit/ert - name = "emergency response team commander hardsuit" - desc = "" - icon_state = "ert_command" - item_state = "ert_command" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - armor = list("melee" = 65, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 80) - slowdown = 0 - strip_delay = 130 - resistance_flags = FIRE_PROOF - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - - //ERT Security -/obj/item/clothing/head/helmet/space/hardsuit/ert/sec - name = "emergency response team security helmet" - desc = "" - icon_state = "hardsuit0-ert_security" - item_state = "hardsuit0-ert_security" - hardsuit_type = "ert_security" - -/obj/item/clothing/suit/space/hardsuit/ert/sec - name = "emergency response team security hardsuit" - desc = "" - icon_state = "ert_security" - item_state = "ert_security" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/sec - - //ERT Engineering -/obj/item/clothing/head/helmet/space/hardsuit/ert/engi - name = "emergency response team engineering helmet" - desc = "" - icon_state = "hardsuit0-ert_engineer" - item_state = "hardsuit0-ert_engineer" - hardsuit_type = "ert_engineer" - -/obj/item/clothing/suit/space/hardsuit/ert/engi - name = "emergency response team engineering hardsuit" - desc = "" - icon_state = "ert_engineer" - item_state = "ert_engineer" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/engi - - //ERT Medical -/obj/item/clothing/head/helmet/space/hardsuit/ert/med - name = "emergency response team medical helmet" - desc = "" - icon_state = "hardsuit0-ert_medical" - item_state = "hardsuit0-ert_medical" - hardsuit_type = "ert_medical" - -/obj/item/clothing/suit/space/hardsuit/ert/med - name = "emergency response team medical hardsuit" - desc = "" - icon_state = "ert_medical" - item_state = "ert_medical" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/med - - //ERT Janitor -/obj/item/clothing/head/helmet/space/hardsuit/ert/jani - name = "emergency response team janitorial helmet" - desc = "" - icon_state = "hardsuit0-ert_janitor" - item_state = "hardsuit0-ert_janitor" - hardsuit_type = "ert_janitor" - -/obj/item/clothing/suit/space/hardsuit/ert/jani - name = "emergency response team janitorial hardsuit" - desc = "" - icon_state = "ert_janitor" - item_state = "ert_janitor" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/jani - allowed = list(/obj/item/storage/bag/trash, /obj/item/melee/flyswatter, /obj/item/mop, /obj/item/holosign_creator, /obj/item/reagent_containers/glass/bucket, /obj/item/reagent_containers/spray/chemsprayer/janitor) - -/obj/item/clothing/suit/space/eva - name = "EVA suit" - icon_state = "space" - item_state = "s_suit" - desc = "" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 65) - -/obj/item/clothing/head/helmet/space/eva - name = "EVA helmet" - icon_state = "space" - item_state = "space" - desc = "" - flash_protect = FLASH_PROTECTION_NONE - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 65) - -/obj/item/clothing/head/helmet/space/freedom - name = "eagle helmet" - desc = "" - icon_state = "griffinhat" - item_state = "griffinhat" - armor = list("melee" = 20, "bullet" = 40, "laser" = 30, "energy" = 25, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 80) - strip_delay = 130 - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = ACID_PROOF | FIRE_PROOF - -/obj/item/clothing/suit/space/freedom - name = "eagle suit" - desc = "" - icon_state = "freedom" - item_state = "freedom" - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - armor = list("melee" = 20, "bullet" = 40, "laser" = 30,"energy" = 25, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 80) - strip_delay = 130 - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = ACID_PROOF | FIRE_PROOF - slowdown = 0 - -//Carpsuit, bestsuit, lovesuit -/obj/item/clothing/head/helmet/space/hardsuit/carp - name = "carp helmet" - desc = "" - icon_state = "carp_helm" - item_state = "syndicate" - armor = list("melee" = -20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 75, "fire" = 60, "acid" = 75) //As whimpy as a space carp - brightness_on = 0 //luminosity when on - actions_types = list() - flags_inv = HIDEEARS|HIDEHAIR|HIDEFACIALHAIR //facial hair will clip with the helm, this'll need a dynamic_fhair_suffix at some point. - -/obj/item/clothing/head/helmet/space/hardsuit/carp/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, LOCKED_HELMET_TRAIT) - -/obj/item/clothing/suit/space/hardsuit/carp - name = "carp space suit" - desc = "" - icon_state = "carp_suit" - item_state = "space_suit_syndicate" - slowdown = 0 //Space carp magic, never stop believing - armor = list("melee" = -20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 75, "fire" = 60, "acid" = 75) //As whimpy whimpy whoo - allowed = list(/obj/item/tank/internals, /obj/item/pneumatic_cannon/speargun) //I'm giving you a hint here - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/carp - -/obj/item/clothing/head/helmet/space/hardsuit/carp/equipped(mob/living/carbon/human/user, slot) - ..() - if (slot == SLOT_HEAD) - user.faction |= "carp" - -/obj/item/clothing/head/helmet/space/hardsuit/carp/dropped(mob/living/carbon/human/user) - ..() - if (user.head == src) - user.faction -= "carp" - -/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal - name = "paranormal response team helmet" - desc = "" - icon_state = "hardsuit0-prt" - item_state = "hardsuit0-prt" - hardsuit_type = "prt" - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - actions_types = list() - resistance_flags = FIRE_PROOF - -/obj/item/clothing/suit/space/hardsuit/ert/paranormal/Initialize() - . = ..() - AddComponent(/datum/component/anti_magic, FALSE, FALSE, TRUE, ITEM_SLOT_OCLOTHING) - -/obj/item/clothing/suit/space/hardsuit/ert/paranormal - name = "paranormal response team hardsuit" - desc = "" - icon_state = "knight_grey" - item_state = "knight_grey" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal - max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = FIRE_PROOF - -/obj/item/clothing/suit/space/hardsuit/ert/paranormal/Initialize() - . = ..() - AddComponent(/datum/component/anti_magic, TRUE, TRUE, TRUE, ITEM_SLOT_OCLOTHING) - -/obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor - name = "inquisitor's hardsuit" - icon_state = "hardsuit-inq" - item_state = "hardsuit-inq" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor - -/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor - name = "inquisitor's helmet" - icon_state = "hardsuit0-inq" - item_state = "hardsuit0-inq" - hardsuit_type = "inq" - -/obj/item/clothing/suit/space/hardsuit/ert/paranormal/berserker - name = "champion's hardsuit" - desc = "" - icon_state = "hardsuit-berserker" - item_state = "hardsuit-berserker" - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/berserker - -/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/berserker - name = "champion's helmet" - desc = "" - icon_state = "hardsuit0-berserker" - item_state = "hardsuit0-berserker" - hardsuit_type = "berserker" - -/obj/item/clothing/head/helmet/space/fragile - name = "emergency space helmet" - desc = "" - icon_state = "syndicate-helm-orange" - item_state = "syndicate-helm-orange" - armor = list("melee" = 5, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 0, "acid" = 0) - strip_delay = 65 - -/obj/item/clothing/suit/space/fragile - name = "emergency space suit" - desc = "" - var/torn = FALSE - icon_state = "syndicate-orange" - item_state = "syndicate-orange" - slowdown = 2 - armor = list("melee" = 5, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 0, "acid" = 0) - strip_delay = 65 - -/obj/item/clothing/suit/space/fragile/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(!torn && prob(50)) - to_chat(owner, "[src] tears from the damage, breaking the air-tight seal!") - clothing_flags &= ~STOPSPRESSUREDAMAGE - name = "torn [src]." - desc = "" - torn = TRUE - playsound(loc, 'sound/blank.ogg', 50, TRUE) - playsound(loc, 'sound/blank.ogg', 50, TRUE) - -/obj/item/clothing/suit/space/hunter - name = "bounty hunting suit" - desc = "" - icon_state = "hunter" - item_state = "swat_suit" - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat) - armor = list(melee = 60, bullet = 40, laser = 40, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) - strip_delay = 130 - resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm deleted file mode 100644 index e6b5b91c4d..0000000000 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ /dev/null @@ -1,270 +0,0 @@ -//Suits for the pink and grey skeletons! //EVA version no longer used in favor of the Jumpsuit version - - -/obj/item/clothing/suit/space/eva/plasmaman - name = "EVA plasma envirosuit" - desc = "" - allowed = list(/obj/item/gun, /obj/item/ammo_casing, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword, /obj/item/restraints/handcuffs, /obj/item/tank) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 75) - resistance_flags = FIRE_PROOF - icon_state = "plasmaman_suit" - item_state = "plasmaman_suit" - var/next_extinguish = 0 - var/extinguish_cooldown = 100 - var/extinguishes_left = 10 - - -/obj/item/clothing/suit/space/eva/plasmaman/examine(mob/user) - . = ..() - . += "There [extinguishes_left == 1 ? "is" : "are"] [extinguishes_left] extinguisher charge\s left in this suit." - - -/obj/item/clothing/suit/space/eva/plasmaman/proc/Extinguish(mob/living/carbon/human/H) - if(!istype(H)) - return - - if(H.fire_stacks) - if(extinguishes_left) - if(next_extinguish > world.time) - return - next_extinguish = world.time + extinguish_cooldown - extinguishes_left-- - H.visible_message("[H]'s suit automatically extinguishes [H.p_them()]!","My suit automatically extinguishes you.") - H.ExtinguishMob() - new /obj/effect/particle_effect/water(get_turf(H)) - - -//I just want the light feature of the hardsuit helmet -/obj/item/clothing/head/helmet/space/plasmaman - name = "plasma envirosuit helmet" - desc = "" - icon_state = "plasmaman-helm" - item_state = "plasmaman-helm" - strip_delay = 80 - flash_protect = FLASH_PROTECTION_WELDER - tint = 2 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 75) - resistance_flags = FIRE_PROOF - var/brightness_on = 4 //luminosity when the light is on - var/on = FALSE - var/smile = FALSE - var/smile_color = "#FF0000" - var/visor_icon = "envisor" - var/smile_state = "envirohelm_smile" - actions_types = list(/datum/action/item_action/toggle_helmet_light, /datum/action/item_action/toggle_welding_screen/plasmaman) - visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - flags_cover = HEADCOVERSMOUTH|HEADCOVERSEYES | PEPPERPROOF - visor_flags_inv = HIDEEYES|HIDEFACE|HIDEFACIALHAIR - -/obj/item/clothing/head/helmet/space/plasmaman/Initialize() - . = ..() - visor_toggling() - update_icon() - cut_overlays() - -/obj/item/clothing/head/helmet/space/plasmaman/AltClick(mob/user) - if(user.canUseTopic(src, BE_CLOSE)) - toggle_welding_screen(user) - -/obj/item/clothing/head/helmet/space/plasmaman/proc/toggle_welding_screen(mob/living/user) - if(weldingvisortoggle(user)) - if(on) - to_chat(user, "My helmet's torch can't pass through my welding visor!") - on = FALSE - playsound(src, 'sound/blank.ogg', 50, TRUE) //Visors don't just come from nothing - update_icon() - else - playsound(src, 'sound/blank.ogg', 50, TRUE) //Visors don't just come from nothing - update_icon() - -/obj/item/clothing/head/helmet/space/plasmaman/worn_overlays(isinhands) - . = ..() - if(!isinhands && !up) - . += mutable_appearance('icons/mob/clothing/head.dmi', visor_icon) - else - cut_overlays() - -/obj/item/clothing/head/helmet/space/plasmaman/update_icon() - cut_overlays() - add_overlay(visor_icon) - ..() - actions_types = list(/datum/action/item_action/toggle_helmet_light) - -/obj/item/clothing/head/helmet/space/plasmaman/attackby(obj/item/C, mob/living/user) - . = ..() - if(istype(C, /obj/item/toy/crayon)) - if(smile == FALSE) - var/obj/item/toy/crayon/CR = C - to_chat(user, "I start drawing a smiley face on the helmet's visor..") - if(do_after(user, 25, target = src)) - smile = TRUE - smile_color = CR.paint_color - to_chat(user, "You draw a smiley on the helmet visor.") - update_icon() - return - if(smile == TRUE) - to_chat(user, "Seems like someone already drew something on this helmet's visor!") - -/obj/item/clothing/head/helmet/space/plasmaman/worn_overlays(isinhands) - . = ..() - if(!isinhands && smile) - var/mutable_appearance/M = mutable_appearance('icons/mob/clothing/head.dmi', smile_state) - M.color = smile_color - . += M - if(!isinhands && !up) - . += mutable_appearance('icons/mob/clothing/head.dmi', visor_icon) - else - cut_overlays() - -/obj/item/clothing/head/helmet/space/plasmaman/ComponentInitialize() - . = ..() - RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, PROC_REF(wipe_that_smile_off_your_face)) - -///gets called when receiving the CLEAN_ACT signal from something, i.e soap or a shower. exists to remove any smiley faces drawn on the helmet. -/obj/item/clothing/head/helmet/space/plasmaman/proc/wipe_that_smile_off_your_face() - if(smile) - smile = FALSE - cut_overlays() - -/obj/item/clothing/head/helmet/space/plasmaman/attack_self(mob/user) - on = !on - icon_state = "[initial(icon_state)][on ? "-light":""]" - item_state = icon_state - user.update_inv_head() //So the mob overlay updates - - if(on) - if(!up) - to_chat(user, "My helmet's torch can't pass through my welding visor!") - set_light(0) - else - set_light(brightness_on) - else - set_light(0) - - for(var/X in actions) - var/datum/action/A=X - A.UpdateButtonIcon() - -/obj/item/clothing/head/helmet/space/plasmaman/security - name = "security plasma envirosuit helmet" - desc = "" - icon_state = "security_envirohelm" - item_state = "security_envirohelm" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 75) - -/obj/item/clothing/head/helmet/space/plasmaman/security/warden - name = "warden's plasma envirosuit helmet" - desc = "" - icon_state = "warden_envirohelm" - item_state = "warden_envirohelm" - -/obj/item/clothing/head/helmet/space/plasmaman/medical - name = "medical's plasma envirosuit helmet" - desc = "" - icon_state = "doctor_envirohelm" - item_state = "doctor_envirohelm" - -/obj/item/clothing/head/helmet/space/plasmaman/genetics - name = "geneticist's plasma envirosuit helmet" - desc = "" - icon_state = "geneticist_envirohelm" - item_state = "geneticist_envirohelm" - -/obj/item/clothing/head/helmet/space/plasmaman/viro - name = "virology plasma envirosuit helmet" - desc = "" - icon_state = "virologist_envirohelm" - item_state = "virologist_envirohelm" - -/obj/item/clothing/head/helmet/space/plasmaman/chemist - name = "chemistry plasma envirosuit helmet" - desc = "" - icon_state = "chemist_envirohelm" - item_state = "chemist_envirohelm" - -/obj/item/clothing/head/helmet/space/plasmaman/science - name = "science plasma envirosuit helmet" - desc = "" - icon_state = "scientist_envirohelm" - item_state = "scientist_envirohelm" - -/obj/item/clothing/head/helmet/space/plasmaman/robotics - name = "robotics plasma envirosuit helmet" - desc = "" - icon_state = "roboticist_envirohelm" - item_state = "roboticist_envirohelm" - -/obj/item/clothing/head/helmet/space/plasmaman/engineering - name = "engineering plasma envirosuit helmet" - desc = "" - icon_state = "engineer_envirohelm" - item_state = "engineer_envirohelm" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 10, "fire" = 100, "acid" = 75) - -/obj/item/clothing/head/helmet/space/plasmaman/atmospherics - name = "atmospherics plasma envirosuit helmet" - desc = "" - icon_state = "atmos_envirohelm" - item_state = "atmos_envirohelm" - -/obj/item/clothing/head/helmet/space/plasmaman/cargo - name = "cargo plasma envirosuit helmet" - desc = "" - icon_state = "cargo_envirohelm" - item_state = "cargo_envirohelm" - -/obj/item/clothing/head/helmet/space/plasmaman/mining - name = "mining plasma envirosuit helmet" - desc = "" - icon_state = "explorer_envirohelm" - item_state = "explorer_envirohelm" - visor_icon = "explorer_envisor" - -/obj/item/clothing/head/helmet/space/plasmaman/chaplain - name = "chaplain's plasma envirosuit helmet" - desc = "" - icon_state = "chap_envirohelm" - item_state = "chap_envirohelm" - -/obj/item/clothing/head/helmet/space/plasmaman/white - name = "white plasma envirosuit helmet" - desc = "" - icon_state = "white_envirohelm" - item_state = "white_envirohelm" - -/obj/item/clothing/head/helmet/space/plasmaman/curator - name = "curator's plasma envirosuit helmet" - desc = "" - icon_state = "prototype_envirohelm" - item_state = "prototype_envirohelm" - actions_types = list(/datum/action/item_action/toggle_welding_screen/plasmaman) - smile_state = "prototype_smile" - visor_icon = "prototype_envisor" - -/obj/item/clothing/head/helmet/space/plasmaman/botany - name = "botany plasma envirosuit helmet" - desc = "" - icon_state = "botany_envirohelm" - item_state = "botany_envirohelm" - -/obj/item/clothing/head/helmet/space/plasmaman/janitor - name = "janitor's plasma envirosuit helmet" - desc = "" - icon_state = "janitor_envirohelm" - item_state = "janitor_envirohelm" - -/obj/item/clothing/head/helmet/space/plasmaman/mime - name = "mime envirosuit helmet" - desc = "" - icon_state = "mime_envirohelm" - item_state = "mime_envirohelm" - visor_icon = "mime_envisor" - -/obj/item/clothing/head/helmet/space/plasmaman/clown - name = "clown envirosuit helmet" - desc = "" - icon_state = "clown_envirohelm" - item_state = "clown_envirohelm" - visor_icon = "clown_envisor" - smile_state = "clown_smile" diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm deleted file mode 100644 index 07da163eaa..0000000000 --- a/code/modules/clothing/spacesuits/syndi.dm +++ /dev/null @@ -1,162 +0,0 @@ -//Regular syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate - name = "red space helmet" - icon_state = "syndicate" - item_state = "syndicate" - desc = "" - armor = list("melee" = 40, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 80, "acid" = 85) - -/obj/item/clothing/suit/space/syndicate - name = "red space suit" - icon_state = "syndicate" - item_state = "space_suit_syndicate" - desc = "" - w_class = WEIGHT_CLASS_NORMAL - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - armor = list("melee" = 40, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 80, "acid" = 85) - - -//Green syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/green - name = "green space helmet" - icon_state = "syndicate-helm-green" - item_state = "syndicate-helm-green" - -/obj/item/clothing/suit/space/syndicate/green - name = "green space suit" - icon_state = "syndicate-green" - item_state = "syndicate-green" - - -//Dark green syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/green/dark - name = "dark green space helmet" - icon_state = "syndicate-helm-green-dark" - item_state = "syndicate-helm-green-dark" - -/obj/item/clothing/suit/space/syndicate/green/dark - name = "dark green space suit" - icon_state = "syndicate-green-dark" - item_state = "syndicate-green-dark" - - -//Orange syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/orange - name = "orange space helmet" - icon_state = "syndicate-helm-orange" - item_state = "syndicate-helm-orange" - -/obj/item/clothing/suit/space/syndicate/orange - name = "orange space suit" - icon_state = "syndicate-orange" - item_state = "syndicate-orange" - -//Blue syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/blue - name = "blue space helmet" - icon_state = "syndicate-helm-blue" - item_state = "syndicate-helm-blue" - -/obj/item/clothing/suit/space/syndicate/blue - name = "blue space suit" - icon_state = "syndicate-blue" - item_state = "syndicate-blue" - - -//Black syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/black - name = "black space helmet" - icon_state = "syndicate-helm-black" - item_state = "syndicate-helm-black" - -/obj/item/clothing/suit/space/syndicate/black - name = "black space suit" - icon_state = "syndicate-black" - item_state = "syndicate-black" - - -//Black-green syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/black/green - name = "black space helmet" - icon_state = "syndicate-helm-black-green" - item_state = "syndicate-helm-black-green" - -/obj/item/clothing/suit/space/syndicate/black/green - name = "black and green space suit" - icon_state = "syndicate-black-green" - item_state = "syndicate-black-green" - - -//Black-blue syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/black/blue - name = "black space helmet" - icon_state = "syndicate-helm-black-blue" - item_state = "syndicate-helm-black-blue" - -/obj/item/clothing/suit/space/syndicate/black/blue - name = "black and blue space suit" - icon_state = "syndicate-black-blue" - item_state = "syndicate-black-blue" - - -//Black medical syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/black/med - name = "black space helmet" - icon_state = "syndicate-helm-black-med" - item_state = "syndicate-helm-black" - -/obj/item/clothing/suit/space/syndicate/black/med - name = "green space suit" - icon_state = "syndicate-black-med" - item_state = "syndicate-black" - - -//Black-orange syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/black/orange - name = "black space helmet" - icon_state = "syndicate-helm-black-orange" - item_state = "syndicate-helm-black" - -/obj/item/clothing/suit/space/syndicate/black/orange - name = "black and orange space suit" - icon_state = "syndicate-black-orange" - item_state = "syndicate-black" - - -//Black-red syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/black/red - name = "black space helmet" - icon_state = "syndicate-helm-black-red" - item_state = "syndicate-helm-black-red" - -/obj/item/clothing/suit/space/syndicate/black/red - name = "black and red space suit" - icon_state = "syndicate-black-red" - item_state = "syndicate-black-red" - -//Black-red syndicate contract varient -/obj/item/clothing/head/helmet/space/syndicate/contract - name = "contractor helmet" - desc = "" - w_class = WEIGHT_CLASS_SMALL - icon_state = "syndicate-contract-helm" - item_state = "syndicate-contract-helm" - -/obj/item/clothing/suit/space/syndicate/contract - name = "contractor space suit" - desc = "" - slowdown = 1 - w_class = WEIGHT_CLASS_SMALL - icon_state = "syndicate-contract" - item_state = "syndicate-contract" - -//Black with yellow/red engineering syndicate space suit -/obj/item/clothing/head/helmet/space/syndicate/black/engie - name = "black space helmet" - icon_state = "syndicate-helm-black-engie" - item_state = "syndicate-helm-black" - -/obj/item/clothing/suit/space/syndicate/black/engie - name = "black engineering space suit" - icon_state = "syndicate-black-engie" - item_state = "syndicate-black" diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index d35a528362..e621d14d98 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -181,7 +181,7 @@ item_state = "centcom" w_class = WEIGHT_CLASS_BULKY body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - allowed = list(/obj/item/gun/energy, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) + allowed = list(/obj/item/restraints/handcuffs, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) clothing_flags = THICKMATERIAL flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm index a1e2989cdd..0286849561 100644 --- a/code/modules/clothing/suits/cloaks.dm +++ b/code/modules/clothing/suits/cloaks.dm @@ -71,7 +71,7 @@ name = "drake armour" icon_state = "dragon" desc = "" - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/twohanded/spear) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/pickaxe, /obj/item/twohanded/spear) armor = list("melee" = 70, "bullet" = 30, "laser" = 50, "energy" = 40, "bomb" = 70, "bio" = 60, "rad" = 50, "fire" = 100, "acid" = 100) hoodtype = /obj/item/clothing/head/hooded/cloakhood/drake heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm deleted file mode 100644 index f46dd07bff..0000000000 --- a/code/modules/clothing/suits/jobs.dm +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Job related - */ - -//Botanist -/obj/item/clothing/suit/apron - name = "apron" - desc = "" - icon_state = "apron" - item_state = "apron" - blood_overlay_type = "armor" - body_parts_covered = CHEST|GROIN - allowed = list(/obj/item/reagent_containers/spray/plantbgone, /obj/item/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/cultivator, /obj/item/reagent_containers/spray/pestspray, /obj/item/hatchet, /obj/item/storage/bag/plants) - -//Captain -/obj/item/clothing/suit/captunic - name = "captain's parade tunic" - desc = "" - icon_state = "captunic" - item_state = "bio_suit" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEJUMPSUIT - allowed = list(/obj/item/disk, /obj/item/stamp, /obj/item/reagent_containers/food/drinks/flask, /obj/item/melee, /obj/item/storage/lockbox/medal, /obj/item/assembly/flash/handheld, /obj/item/storage/box/matches, /obj/item/lighter, /obj/item/clothing/mask/cigarette, /obj/item/storage/fancy/cigarettes, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - -//Chef -/obj/item/clothing/suit/toggle/chef - name = "chef's apron" - desc = "" - icon_state = "chef" - item_state = "chef" - gas_transfer_coefficient = 0.9 - permeability_coefficient = 0.5 - body_parts_covered = CHEST|GROIN|ARMS - allowed = list(/obj/item/kitchen) - togglename = "sleeves" - -//Cook -/obj/item/clothing/suit/apron/chef - name = "cook's apron" - desc = "" - icon_state = "apronchef" - item_state = "apronchef" - blood_overlay_type = "armor" - body_parts_covered = CHEST|GROIN - allowed = list(/obj/item/kitchen) - -//Detective -/obj/item/clothing/suit/det_suit - name = "trenchcoat" - desc = "" - icon_state = "detective" - item_state = "det_suit" - blood_overlay_type = "coat" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - armor = list("melee" = 25, "bullet" = 10, "laser" = 25, "energy" = 35, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45) - cold_protection = CHEST|GROIN|LEGS|ARMS - heat_protection = CHEST|GROIN|LEGS|ARMS - -/obj/item/clothing/suit/det_suit/Initialize() - . = ..() - allowed = GLOB.detective_vest_allowed - -/obj/item/clothing/suit/det_suit/grey - name = "noir trenchcoat" - desc = "" - icon_state = "greydet" - item_state = "greydet" - -/obj/item/clothing/suit/det_suit/noir - name = "noir suit coat" - desc = "" - icon_state = "detsuit" - item_state = "detsuit" - -//Engineering -/obj/item/clothing/suit/hazardvest - name = "hazard vest" - desc = "" - icon_state = "hazard" - item_state = "hazard" - blood_overlay_type = "armor" - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/t_scanner, /obj/item/radio) - resistance_flags = NONE - -//Lawyer -/obj/item/clothing/suit/toggle/lawyer - name = "blue suit jacket" - desc = "" - icon_state = "suitjacket_blue" - item_state = "suitjacket_blue" - blood_overlay_type = "coat" - body_parts_covered = CHEST|ARMS - togglename = "buttons" - -/obj/item/clothing/suit/toggle/lawyer/purple - name = "purple suit jacket" - desc = "" - icon_state = "suitjacket_purp" - item_state = "suitjacket_purp" - -/obj/item/clothing/suit/toggle/lawyer/black - name = "black suit jacket" - desc = "" - icon_state = "suitjacket_black" - item_state = "ro_suit" - - -//Mime -/obj/item/clothing/suit/suspenders - name = "suspenders" - desc = "" - icon = 'icons/obj/clothing/belts.dmi' - icon_state = "suspenders" - blood_overlay_type = "armor" //it's the less thing that I can put here - -//Security -/obj/item/clothing/suit/security/officer - name = "security officer's jacket" - desc = "" - icon_state = "officerbluejacket" - item_state = "officerbluejacket" - body_parts_covered = CHEST|ARMS - -/obj/item/clothing/suit/security/warden - name = "warden's jacket" - desc = "" - icon_state = "wardenbluejacket" - item_state = "wardenbluejacket" - body_parts_covered = CHEST|ARMS - -/obj/item/clothing/suit/security/hos - name = "head of security's jacket" - desc = "" - icon_state = "hosbluejacket" - item_state = "hosbluejacket" - body_parts_covered = CHEST|ARMS - -//Surgeon -/obj/item/clothing/suit/apron/surgical - name = "surgical apron" - desc = "" - icon_state = "surgical" - allowed = list(/obj/item/scalpel, /obj/item/surgical_drapes, /obj/item/cautery, /obj/item/hemostat, /obj/item/retractor) - -//Curator -/obj/item/clothing/suit/curator - name = "treasure hunter's coat" - desc = "" - icon_state = "curator" - item_state = "curator" - blood_overlay_type = "coat" - body_parts_covered = CHEST|ARMS - allowed = list(/obj/item/tank/internals, /obj/item/melee/curator_whip) - armor = list("melee" = 25, "bullet" = 10, "laser" = 25, "energy" = 35, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45) - cold_protection = CHEST|ARMS - heat_protection = CHEST|ARMS - - -//Robotocist - -/obj/item/clothing/suit/hooded/techpriest - name = "techpriest robes" - desc = "" - icon_state = "techpriest" - item_state = "techpriest" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - hoodtype = /obj/item/clothing/head/hooded/techpriest - -/obj/item/clothing/head/hooded/techpriest - name = "techpriest's hood" - desc = "" - icon_state = "techpriesthood" - item_state = "techpriesthood" - body_parts_covered = HEAD - flags_inv = HIDEHAIR|HIDEEARS diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 34dbd4d0e2..916bc8fe95 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -5,7 +5,7 @@ item_state = "labcoat" blood_overlay_type = "coat" body_parts_covered = CHEST|ARMS - allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/soap, /obj/item/sensor_device, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) + allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/soap, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 50, "acid" = 50) togglename = "buttons" species_exception = list(/datum/species/golem) diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 956071833e..603e85591c 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -1,33 +1,9 @@ /* * Contains: - * Lasertag * Costume * Misc */ -/* - * Lasertag - */ -/obj/item/clothing/suit/bluetag - name = "blue laser tag armor" - desc = "" //Lasers are concentrated light - icon_state = "bluetag" - item_state = "bluetag" - blood_overlay_type = "armor" - body_parts_covered = CHEST - allowed = list (/obj/item/gun/energy/laser/bluetag) - resistance_flags = NONE - -/obj/item/clothing/suit/redtag - name = "red laser tag armor" - desc = "" - icon_state = "redtag" - item_state = "redtag" - blood_overlay_type = "armor" - body_parts_covered = CHEST - allowed = list (/obj/item/gun/energy/laser/redtag) - resistance_flags = NONE - /* * Costume */ @@ -51,7 +27,7 @@ desc = "" icon_state = "pirate" item_state = "pirate" - allowed = list(/obj/item/melee/transforming/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/reagent_containers/food/drinks/bottle/rum) + allowed = list(/obj/item/clothing/glasses/eyepatch, /obj/item/reagent_containers/food/drinks/bottle/rum) /obj/item/clothing/suit/pirate/captain name = "pirate captain coat" @@ -176,26 +152,6 @@ flags_inv = HIDEJUMPSUIT dog_fashion = /datum/dog_fashion/back -/obj/item/clothing/suit/cardborg/equipped(mob/living/user, slot) - ..() - if(slot == SLOT_ARMOR) - disguise(user) - -/obj/item/clothing/suit/cardborg/dropped(mob/living/user) - ..() - user.remove_alt_appearance("standard_borg_disguise") - -/obj/item/clothing/suit/cardborg/proc/disguise(mob/living/carbon/human/H, obj/item/clothing/head/cardborg/borghead) - if(istype(H)) - if(!borghead) - borghead = H.head - if(istype(borghead, /obj/item/clothing/head/cardborg)) //why is this done this way? because equipped() is called BEFORE THE ITEM IS IN THE SLOT WHYYYY - var/image/I = image(icon = 'icons/mob/robots.dmi' , icon_state = "robot", loc = H) - I.override = 1 - I.add_overlay(mutable_appearance('icons/mob/robots.dmi', "robot_e")) //gotta look realistic - add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "standard_borg_disguise", I) //you look like a robot to robots! (including myself because you're totally a robot) - - /obj/item/clothing/suit/snowman name = "snowman outfit" desc = "" @@ -387,7 +343,7 @@ desc = "" icon_state = "bomberjacket" item_state = "brownjsuit" - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/radio) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) body_parts_covered = CHEST|GROIN|ARMS cold_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT @@ -399,7 +355,7 @@ item_state = "hostrench" resistance_flags = NONE max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/detective, /obj/item/radio) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/detective) /obj/item/clothing/suit/jacket/leather/overcoat name = "leather overcoat" @@ -429,7 +385,7 @@ desc = "" icon_state = "militaryjacket" item_state = "militaryjacket" - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/radio) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver) /obj/item/clothing/suit/jacket/letterman name = "letterman jacket" @@ -473,15 +429,6 @@ icon_state = "gothcoat" item_state = "gothcoat" -/obj/item/clothing/suit/xenos - name = "xenos suit" - desc = "" - icon_state = "xenos" - item_state = "xenos_helm" - body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - allowed = list(/obj/item/clothing/mask/facehugger/toy) - /obj/item/clothing/suit/nemes name = "pharoah tunic" desc = "" @@ -560,7 +507,7 @@ name = "medical winter coat" icon_state = "coatmedical" item_state = "coatmedical" - allowed = list(/obj/item/analyzer, /obj/item/sensor_device, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) + allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 45) hoodtype = /obj/item/clothing/head/hooded/winterhood/medical @@ -571,7 +518,7 @@ name = "science winter coat" icon_state = "coatscience" item_state = "coatscience" - allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) + allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) hoodtype = /obj/item/clothing/head/hooded/winterhood/science @@ -583,7 +530,7 @@ icon_state = "coatengineer" item_state = "coatengineer" armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 20, "fire" = 30, "acid" = 45) - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering /obj/item/clothing/head/hooded/winterhood/engineering diff --git a/code/modules/clothing/suits/reactive_armour.dm b/code/modules/clothing/suits/reactive_armour.dm deleted file mode 100644 index 2f5d370501..0000000000 --- a/code/modules/clothing/suits/reactive_armour.dm +++ /dev/null @@ -1,248 +0,0 @@ -/obj/item/reactive_armour_shell - name = "reactive armour shell" - desc = "" - icon_state = "reactiveoff" - icon = 'icons/obj/clothing/suits.dmi' - w_class = WEIGHT_CLASS_BULKY - -/obj/item/reactive_armour_shell/attackby(obj/item/I, mob/user, params) - ..() - var/static/list/anomaly_armour_types = list( - /obj/effect/anomaly/grav = /obj/item/clothing/suit/armor/reactive/repulse, - /obj/effect/anomaly/flux = /obj/item/clothing/suit/armor/reactive/tesla, - /obj/effect/anomaly/bluespace = /obj/item/clothing/suit/armor/reactive/teleport - ) - - if(istype(I, /obj/item/assembly/signaler/anomaly)) - var/obj/item/assembly/signaler/anomaly/A = I - var/armour_path = anomaly_armour_types[A.anomaly_type] - if(!armour_path) - armour_path = /obj/item/clothing/suit/armor/reactive/stealth //Lets not cheat the player if an anomaly type doesnt have its own armour coded - to_chat(user, "I insert [A] into the chest plate, and the armour gently hums to life.") - new armour_path(get_turf(src)) - qdel(src) - qdel(A) - -//Reactive armor -/obj/item/clothing/suit/armor/reactive - name = "reactive armor" - desc = "" - var/active = 0 - var/reactivearmor_cooldown_duration = 0 //cooldown specific to reactive armor - var/reactivearmor_cooldown = 0 - icon_state = "reactiveoff" - item_state = "reactiveoff" - blood_overlay_type = "armor" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) - actions_types = list(/datum/action/item_action/toggle) - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - hit_reaction_chance = 50 - -/obj/item/clothing/suit/armor/reactive/attack_self(mob/user) - active = !(active) - if(active) - to_chat(user, "[src] is now active.") - icon_state = "reactive" - item_state = "reactive" - else - to_chat(user, "[src] is now inactive.") - icon_state = "reactiveoff" - item_state = "reactiveoff" - add_fingerprint(user) - return - -/obj/item/clothing/suit/armor/reactive/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - active = 0 - icon_state = "reactiveoff" - item_state = "reactiveoff" - reactivearmor_cooldown = world.time + 200 - -//When the wearer gets hit, this armor will teleport the user a short distance away (to safety or to more danger, no one knows. That's the fun of it!) -/obj/item/clothing/suit/armor/reactive/teleport - name = "reactive teleport armor" - desc = "" - var/tele_range = 6 - var/rad_amount= 15 - reactivearmor_cooldown_duration = 100 - -/obj/item/clothing/suit/armor/reactive/teleport/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(!active) - return 0 - if(prob(hit_reaction_chance)) - var/mob/living/carbon/human/H = owner - if(world.time < reactivearmor_cooldown) - owner.visible_message("The reactive teleport system is still recharging! It fails to teleport [H]!") - return - owner.visible_message("The reactive teleport system flings [H] clear of [attack_text], shutting itself off in the process!") - playsound(get_turf(owner),'sound/blank.ogg', 100, TRUE) - var/list/turfs = new/list() - for(var/turf/T in orange(tele_range, H)) - if(T.density) - continue - if(T.x>world.maxx-tele_range || T.xworld.maxy-tele_range || T.yThe reactive incendiary armor on [owner] activates, but fails to send out flames as it is still recharging its flame jets!") - return - owner.visible_message("[src] blocks [attack_text], sending out jets of flame!") - playsound(get_turf(owner),'sound/blank.ogg', 100, TRUE) - for(var/mob/living/carbon/C in range(6, owner)) - if(C != owner) - C.fire_stacks += 8 - C.IgniteMob() - owner.fire_stacks = -20 - reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration - return 1 - return 0 - -//Stealth - -/obj/item/clothing/suit/armor/reactive/stealth - name = "reactive stealth armor" - desc = "" - -/obj/item/clothing/suit/armor/reactive/stealth/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(!active) - return 0 - if(prob(hit_reaction_chance)) - if(world.time < reactivearmor_cooldown) - owner.visible_message("The reactive stealth system on [owner] activates, but is still recharging its holographic emitters!") - return - var/mob/living/simple_animal/hostile/illusion/escape/E = new(owner.loc) - E.Copy_Parent(owner, 50) - E.GiveTarget(owner) //so it starts running right away - E.Goto(owner, E.move_to_delay, E.minimum_distance) - owner.alpha = 0 - owner.visible_message("[owner] is hit by [attack_text] in the chest!") //We pretend to be hit, since blocking it would stop the message otherwise - addtimer(VARSET_CALLBACK(owner, alpha, initial(owner.alpha)), 4 SECONDS) - reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration - return 1 - -//Tesla - -/obj/item/clothing/suit/armor/reactive/tesla - name = "reactive tesla armor" - desc = "" - siemens_coefficient = -1 - var/tesla_power = 25000 - var/tesla_range = 20 - var/tesla_flags = TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE - -/obj/item/clothing/suit/armor/reactive/tesla/dropped(mob/user) - ..() - if(istype(user)) - user.flags_1 &= ~TESLA_IGNORE_1 - -/obj/item/clothing/suit/armor/reactive/tesla/equipped(mob/user, slot) - ..() - if(slot_flags & slotdefine2slotbit(slot)) //Was equipped to a valid slot for this item? - user.flags_1 |= TESLA_IGNORE_1 - -/obj/item/clothing/suit/armor/reactive/tesla/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(!active) - return FALSE - if(prob(hit_reaction_chance)) - if(world.time < reactivearmor_cooldown) - var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread - sparks.set_up(1, 1, src) - sparks.start() - owner.visible_message("The tesla capacitors on [owner]'s reactive tesla armor are still recharging! The armor merely emits some sparks.") - return - owner.visible_message("[src] blocks [attack_text], sending out arcs of lightning!") - tesla_zap(owner, tesla_range, tesla_power, tesla_flags) - reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration - return TRUE - -//Repulse - -/obj/item/clothing/suit/armor/reactive/repulse - name = "reactive repulse armor" - desc = "" - var/repulse_force = MOVE_FORCE_EXTREMELY_STRONG - -/obj/item/clothing/suit/armor/reactive/repulse/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(!active) - return 0 - if(prob(hit_reaction_chance)) - if(world.time < reactivearmor_cooldown) - owner.visible_message("The repulse generator is still recharging!") - return 0 - playsound(get_turf(owner),'sound/blank.ogg', 100, TRUE) - owner.visible_message("[src] blocks [attack_text], converting the attack into a wave of force!") - var/turf/T = get_turf(owner) - var/list/thrown_items = list() - for(var/atom/movable/A in range(T, 7)) - if(A == owner || A.anchored || thrown_items[A]) - continue - var/throwtarget = get_edge_target_turf(T, get_dir(T, get_step_away(A, T))) - A.safe_throw_at(throwtarget, 10, 1, force = repulse_force) - thrown_items[A] = A - - reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration - return 1 - -/obj/item/clothing/suit/armor/reactive/table - name = "reactive table armor" - desc = "" - var/tele_range = 10 - -/obj/item/clothing/suit/armor/reactive/table/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(!active) - return 0 - if(prob(hit_reaction_chance)) - var/mob/living/carbon/human/H = owner - if(world.time < reactivearmor_cooldown) - owner.visible_message("The reactive table armor's fabricators are still on cooldown!") - return - owner.visible_message("The reactive teleport system flings [H] clear of [attack_text] and slams [H.p_them()] into a fabricated table!") - owner.visible_message("[H] GOES ON THE TABLE!!!") - owner.Paralyze(40) - var/list/turfs = new/list() - for(var/turf/T in orange(tele_range, H)) - if(T.density) - continue - if(T.x>world.maxx-tele_range || T.xworld.maxy-tele_range || T.yThe helmet on the hardsuit disengages.") - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - else - helmet.forceMove(src) - -/obj/item/clothing/suit/space/hardsuit/dropped() - ..() - RemoveHelmet() - -/obj/item/clothing/suit/space/hardsuit/proc/ToggleHelmet() - var/mob/living/carbon/human/H = src.loc - if(!helmettype) - return - if(!helmet) - return - if(!hoodtoggled) - if(ishuman(src.loc)) - if(H.wear_armor != src) - to_chat(H, "I must be wearing [src] to engage the helmet!") - return - if(H.head) - to_chat(H, "You're already wearing something on your head!") - return - else if(H.equip_to_slot_if_possible(helmet,SLOT_HEAD,0,0,1)) - to_chat(H, "I engage the helmet on the hardsuit.") - hoodtoggled = TRUE - H.update_inv_wear_suit() - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - else - RemoveHelmet() diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 68ec17704a..4eb6b5aae2 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -100,7 +100,7 @@ /obj/item/clothing/suit/bomb_suit/security icon_state = "bombsuit_sec" item_state = "bombsuit_sec" - allowed = list(/obj/item/gun/energy, /obj/item/melee/baton, /obj/item/restraints/handcuffs) + allowed = list(/obj/item/restraints/handcuffs) /obj/item/clothing/head/bomb_hood/white diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index d546f5c9f5..5a52199912 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -178,54 +178,3 @@ sleep(30) src.robe_charge = TRUE to_chat(usr, "\The [src] hums, its internal magic supply restored.") - - -//Shielded Armour - -/obj/item/clothing/suit/space/hardsuit/shielded/wizard - name = "battlemage armour" - desc = "" - icon_state = "battlemage" - item_state = "battlemage" - recharge_rate = 0 - current_charges = 15 - recharge_cooldown = INFINITY - shield_state = "shield-red" - shield_on = "shield-red" - min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT - max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard - armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100) - slowdown = 0 - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard - name = "battlemage helmet" - desc = "" - icon_state = "battlemage" - item_state = "battlemage" - min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT - max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT - armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100) - actions_types = null //No inbuilt light - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard/attack_self(mob/user) - return - -/obj/item/wizard_armour_charge - name = "battlemage shield charges" - desc = "" - icon = 'icons/effects/effects.dmi' - icon_state = "electricity2" - -/obj/item/wizard_armour_charge/afterattack(obj/item/clothing/suit/space/hardsuit/shielded/wizard/W, mob/user, proximity) - . = ..() - if(!proximity) - return - if(!istype(W)) - to_chat(user, "The rune can only be used on battlemage armour!") - return - W.current_charges += 8 - to_chat(user, "I charge \the [W]. It can now absorb [W.current_charges] hits.") - qdel(src) diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index e553fb83ac..3cd230b5b4 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -33,12 +33,6 @@ . += accessory_overlay /obj/item/clothing/under/attackby(obj/item/I, mob/user, params) - if((has_sensor == BROKEN_SENSORS) && istype(I, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = I - C.use(1) - has_sensor = HAS_SENSORS - to_chat(user,"I repair the suit sensors on [src] with [C].") - return 1 if(!attach_accessory(I, user)) return ..() diff --git a/code/modules/clothing/under/jobs/civilian/civilian.dm b/code/modules/clothing/under/jobs/civilian/civilian.dm index c7bc9d6627..630a7b909e 100644 --- a/code/modules/clothing/under/jobs/civilian/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian/civilian.dm @@ -127,108 +127,6 @@ fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE -/obj/item/clothing/under/rank/civilian/lawyer - desc = "" - name = "Lawyer suit" - can_adjust = FALSE - -/obj/item/clothing/under/rank/civilian/lawyer/dye_item(dye_color, dye_key_override) - if(dye_color == DYE_COSMIC || dye_color == DYE_SYNDICATE) - ..(dye_color, DYE_LAWYER_SPECIAL) - else - ..() - -/obj/item/clothing/under/rank/civilian/lawyer/black - name = "lawyer black suit" - icon_state = "lawyer_black" - item_state = "lawyer_black" - -/obj/item/clothing/under/rank/civilian/lawyer/black/skirt - name = "lawyer black suitskirt" - icon_state = "lawyer_black_skirt" - item_state = "lawyer_black" - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/civilian/lawyer/female - name = "female black suit" - icon_state = "black_suit_fem" - item_state = "black_suit_fem" - mob_overlay_icon = 'icons/mob/clothing/under/suits.dmi' - -/obj/item/clothing/under/rank/civilian/lawyer/female/skirt - name = "female black suitskirt" - icon_state = "black_suit_fem_skirt" - item_state = "black_suit_fem_skirt" - mob_overlay_icon = 'icons/mob/clothing/under/suits.dmi' - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/civilian/lawyer/red - name = "lawyer red suit" - icon_state = "lawyer_red" - item_state = "lawyer_red" - -/obj/item/clothing/under/rank/civilian/lawyer/red/skirt - name = "lawyer red suitskirt" - icon_state = "lawyer_red_skirt" - item_state = "lawyer_red" - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/civilian/lawyer/blue - name = "lawyer blue suit" - icon_state = "lawyer_blue" - item_state = "lawyer_blue" - -/obj/item/clothing/under/rank/civilian/lawyer/blue/skirt - name = "lawyer blue suitskirt" - icon_state = "lawyer_blue_skirt" - item_state = "lawyer_blue" - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/civilian/lawyer/bluesuit - name = "blue suit" - desc = "" - icon_state = "bluesuit" - item_state = "b_suit" - can_adjust = TRUE - alt_covers_chest = TRUE - -/obj/item/clothing/under/rank/civilian/lawyer/bluesuit/skirt - name = "blue suitskirt" - desc = "" - icon_state = "bluesuit_skirt" - item_state = "b_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/civilian/lawyer/purpsuit - name = "purple suit" - icon_state = "lawyer_purp" - item_state = "p_suit" - fitted = NO_FEMALE_UNIFORM - can_adjust = TRUE - alt_covers_chest = TRUE - -/obj/item/clothing/under/rank/civilian/lawyer/purpsuit/skirt - name = "purple suitskirt" - icon_state = "lawyer_purp_skirt" - item_state = "p_suit" - body_parts_covered = CHEST|GROIN|ARMS - can_adjust = FALSE - fitted = FEMALE_UNIFORM_TOP - -/obj/item/clothing/under/rank/civilian/lawyer/galaxy - mob_overlay_icon = 'icons/mob/clothing/under/lawyer_galaxy.dmi' - can_adjust = FALSE - name = "blue galaxy suit" - icon_state = "lawyer_galaxy_blue" - item_state = "b_suit" - -/obj/item/clothing/under/rank/civilian/lawyer/galaxy/red - name = "red galaxy suit" - icon_state = "lawyer_galaxy_red" - item_state = "r_suit" - /obj/item/clothing/under/rank/civilian/cookjorts name = "grilling shorts" desc = "" diff --git a/code/modules/economy/pay_stand.dm b/code/modules/economy/pay_stand.dm deleted file mode 100644 index 2df7681281..0000000000 --- a/code/modules/economy/pay_stand.dm +++ /dev/null @@ -1,112 +0,0 @@ -/obj/machinery/paystand - name = "unregistered pay stand" - desc = "" - icon = 'icons/obj/economy.dmi' - icon_state = "card_scanner" - density = TRUE - anchored = TRUE - var/locked = FALSE - var/obj/item/card/id/my_card - var/obj/item/assembly/signaler/signaler //attached signaler, let people attach signalers that get activated if the user's transaction limit is achieved. - var/signaler_threshold = 0 //signaler threshold amount - var/amount_deposited = 0 //keep track of the amount deposited over time so you can pay multiple times to reach the signaler threshold - -/obj/machinery/paystand/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/card/id)) - if(W == my_card) - locked = !locked - to_chat(user, "I [src.locked ? "lock" : "unlock"] the bolts on the paystand.") - return - if(!my_card) - var/obj/item/card/id/assistant_mains_need_to_die = W - if(assistant_mains_need_to_die.registered_account) - var/msg = stripped_input(user, "Name of pay stand:", "Paystand Naming", "[user]'s Awesome Paystand") - if(!msg) - return - name = msg - desc = "" - my_card = assistant_mains_need_to_die - to_chat(user, "You link the stand to your account.") - return - var/obj/item/card/id/vbucks = W - if(vbucks.registered_account) - var/momsdebitcard = input(user, "How much would you like to deposit?", "Money Deposit") as null|num - if(momsdebitcard < 1) - to_chat(user, "ERROR: Invalid amount designated.") - return - if(vbucks.registered_account.adjust_money(-momsdebitcard)) - purchase(vbucks.registered_account.account_holder, momsdebitcard) - to_chat(user, "Thanks for purchasing! The vendor has been informed.") - return - else - to_chat(user, "ERROR: Account has insufficient funds to make transaction.") - return - else - to_chat(user, "ERROR: No bank account assigned to identification card.") - return - if(istype(W, /obj/item/holochip)) - var/obj/item/holochip/H = W - var/cashmoney = input(user, "How much would you like to deposit?", "Money Deposit") as null|num - if(H.spend(cashmoney, FALSE)) - purchase(user, cashmoney) - to_chat(user, "Thanks for purchasing! The vendor has been informed.") - return - else - to_chat(user, "ERROR: Insufficient funds to make transaction.") - return - if(istype(W, /obj/item/stack/spacecash)) - to_chat(user, "What is this, the 2000s? We only take card here.") - return - if(istype(W, /obj/item/coin)) - to_chat(user, "What is this, the 1800s? We only take card here.") - return - if(istype(W, /obj/item/assembly/signaler)) - var/obj/item/assembly/signaler/S = W - if(S.secured) - to_chat(user, "The signaler needs to be in attachable mode to add it to the paystand!") - return - if(!my_card) - to_chat(user, "ERROR: No identification card has been assigned to this paystand yet!") - return - if(!signaler) - var/cash_limit = input(user, "Enter the minimum amount of cash needed to deposit before the signaler is activated.", "Signaler Activation Threshold") as null|num - if(cash_limit < 1) - to_chat(user, "ERROR: Invalid amount designated.") - return - if(cash_limit) - S.forceMove(src) - signaler = S - signaler_threshold = cash_limit - to_chat(user, "You attach the signaler to the paystand.") - desc += " A signaler appears to be attached to the scanner." - else - to_chat(user, "A signaler is already attached to this unit!") - - if(default_deconstruction_screwdriver(user, "card_scanner", "card_scanner", W)) - return - - else if(default_pry_open(W)) - return - - else if(default_unfasten_wrench(user, W)) - return - - else if(default_deconstruction_crowbar(W)) - return - else - return ..() - -/obj/machinery/paystand/proc/purchase(buyer, price) - my_card.registered_account.adjust_money(price) - my_card.registered_account.bank_card_talk("Purchase made at your vendor by [buyer] for [price] credits.") - amount_deposited = amount_deposited + price - if(signaler && amount_deposited >= signaler_threshold) - signaler.activate() - amount_deposited = 0 - -/obj/machinery/paystand/default_unfasten_wrench(mob/user, obj/item/I, time = 20) - if(locked) - to_chat(user, "The anchored bolts on this paystand are currently locked!") - return - . = ..() - diff --git a/code/modules/error_handler/error_viewer.dm b/code/modules/error_handler/error_viewer.dm index adcbb8fb57..dce0db6dec 100644 --- a/code/modules/error_handler/error_viewer.dm +++ b/code/modules/error_handler/error_viewer.dm @@ -25,7 +25,7 @@ GLOBAL_DATUM(error_cache, /datum/error_viewer/error_cache) var/name = "" /datum/error_viewer/proc/browse_to(client/user, html) - var/datum/browser/browser = new(user.mob, "error_viewer", null, 600, 400) + var/datum/browser/noclose/browser = new(user.mob, "error_viewer", null, 600, 400) browser.set_content(html) browser.add_head_content({" - - - -
    - pAI OS -
    -
    -
    [left_part]
    -
    [right_part]
    -
    - - "} //" - src << browse(dat, "window=pai;size=640x480;border=0;can_close=1;can_resize=1;can_minimize=1;titlebar=1") - onclose(src, "pai") - temp = null - -/mob/living/silicon/pai/Topic(href, href_list) - if(..()) - return - var/soft = href_list["software"] - var/sub = href_list["sub"] - if(soft) - screen = soft - if(sub) - subscreen = text2num(sub) - switch(soft) - if("buy") // Purchasing new software - if(subscreen == 1) - var/target = href_list["buy"] - if(available_software.Find(target) && !software.Find(target)) - var/cost = available_software[target] - if(ram >= cost) - software.Add(target) - ram -= cost - var/datum/hud/pai/pAIhud = hud_used - pAIhud?.update_software_buttons() - else - temp = "Insufficient RAM available." - else - temp = "Trunk \"[target]\" not found." - - - if("radio") // Configuring onboard radio - radio.attack_self(src) - - if("image") // Set pAI card display face - var/newImage = input("Select my new display image.", "Display Image", "Happy") in sortList(list("Happy", "Cat", "Extremely Happy", "Face", "Laugh", "Off", "Sad", "Angry", "What", "Sunglasses")) - var/pID = 1 - - switch(newImage) - if("Happy") - pID = 1 - if("Cat") - pID = 2 - if("Extremely Happy") - pID = 3 - if("Face") - pID = 4 - if("Laugh") - pID = 5 - if("Off") - pID = 6 - if("Sad") - pID = 7 - if("Angry") - pID = 8 - if("What") - pID = 9 - if("Null") - pID = 10 - if("Sunglasses") - pID = 11 - card.setEmotion(pID) - - if("news") - newscaster.ui_interact(src) - - if("camzoom") - aicamera.adjust_zoom(usr) - - if("signaller") - if(href_list["send"]) - signaler.send_activation() - audible_message("[icon2html(src, hearers(src))] *beep* *beep* *beep*") - playsound(src, 'sound/blank.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) - - if(href_list["freq"]) - var/new_frequency = (signaler.frequency + text2num(href_list["freq"])) - if(new_frequency < MIN_FREE_FREQ || new_frequency > MAX_FREE_FREQ) - new_frequency = sanitize_frequency(new_frequency) - signaler.set_frequency(new_frequency) - - if(href_list["code"]) - signaler.code += text2num(href_list["code"]) - signaler.code = round(signaler.code) - signaler.code = min(100, signaler.code) - signaler.code = max(1, signaler.code) - - if("directive") - if(href_list["getdna"]) - if(iscarbon(card.loc)) - CheckDNA(card.loc, src) //you should only be able to check when directly in hand, muh immersions? - else - to_chat(src, "I are not being carried by anyone!") - return 0 // FALSE ? If you return here you won't call paiinterface() below - - if("pdamessage") - if(!isnull(aiPDA)) - if(href_list["toggler"]) - aiPDA.toff = !aiPDA.toff - else if(href_list["ringer"]) - aiPDA.silent = !aiPDA.silent - else if(href_list["target"]) - if(silent) - return alert("Communications circuits remain uninitialized.") - var/target = locate(href_list["target"]) in GLOB.PDAs - aiPDA.create_message(src, target) - - if("medicalrecord") // Accessing medical records - if(subscreen == 1) - medicalActive1 = find_record("id", href_list["med_rec"], GLOB.data_core.general) - if(medicalActive1) - medicalActive2 = find_record("id", href_list["med_rec"], GLOB.data_core.medical) - if(!medicalActive2) - medicalActive1 = null - temp = "Unable to locate requested security record. Record may have been deleted, or never have existed." - - if("securityrecord") - if(subscreen == 1) - securityActive1 = find_record("id", href_list["sec_rec"], GLOB.data_core.general) - if(securityActive1) - securityActive2 = find_record("id", href_list["sec_rec"], GLOB.data_core.security) - if(!securityActive2) - securityActive1 = null - temp = "Unable to locate requested security record. Record may have been deleted, or never have existed." - - if("securityhud") - if(href_list["toggle"]) - secHUD = !secHUD - if(secHUD) - var/datum/atom_hud/sec = GLOB.huds[sec_hud] - sec.add_hud_to(src) - else - var/datum/atom_hud/sec = GLOB.huds[sec_hud] - sec.remove_hud_from(src) - - if("medicalhud") - if(href_list["toggle"]) - medHUD = !medHUD - if(medHUD) - var/datum/atom_hud/med = GLOB.huds[med_hud] - med.add_hud_to(src) - else - var/datum/atom_hud/med = GLOB.huds[med_hud] - med.remove_hud_from(src) - - if("hostscan") - if(href_list["toggle"]) - var/mob/living/silicon/pai/pAI = usr - pAI.hostscan.attack_self(usr) - if(href_list["toggle2"]) - var/mob/living/silicon/pai/pAI = usr - pAI.hostscan.toggle_mode() - - if("encryptionkeys") - if(href_list["toggle"]) - encryptmod = TRUE - - if("translator") - if(href_list["toggle"]) - grant_all_languages(TRUE) - // this is PERMAMENT. - - if("doorjack") - if(href_list["jack"]) - if(cable && cable.machine) - hackdoor = cable.machine - hackloop() - if(href_list["cancel"]) - hackdoor = null - if(href_list["cable"]) - var/turf/T = get_turf(loc) - cable = new /obj/item/pai_cable(T) - T.visible_message("A port on [src] opens to reveal [cable], which promptly falls to the floor.", "I hear the soft click of something light and hard falling to the ground.") - - if("loudness") - if(subscreen == 1) // Open Instrument - internal_instrument.interact(src) - if(subscreen == 2) // Change Instrument type - internal_instrument.selectInstrument() - - paiInterface() - -// MENUS - -/mob/living/silicon/pai/proc/softwareMenu() // Populate the right menu - var/dat = "" - - dat += "Refresh
    " - // Built-in - dat += "Directives
    " - dat += "Radio Configuration
    " - dat += "Screen Display
    " - //dat += "Text Messaging
    " - dat += "
    " - - // Basic - dat += "Basic
    " - for(var/s in software) - if(s == "digital messenger") - dat += "Digital Messenger
    " - if(s == "crew manifest") - dat += "Crew Manifest
    " - if(s == "host scan") - dat += "Host Health Scan
    " - if(s == "medical records") - dat += "Medical Records
    " - if(s == "security records") - dat += "Security Records
    " - if(s == "camera") - dat += "Camera Jack
    " - if(s == "remote signaller") - dat += "Remote Signaller
    " - if(s == "loudness booster") - dat += "Loudness Booster
    " - dat += "
    " - - // Advanced - dat += "Advanced
    " - for(var/s in software) - if(s == "camera zoom") - dat += "Adjust Camera Zoom
    " - if(s == "atmosphere sensor") - dat += "Atmospheric Sensor
    " - if(s == "heartbeat sensor") - dat += "Heartbeat Sensor
    " - if(s == "security HUD") - dat += "Facial Recognition Suite[(secHUD) ? " On" : " Off"]
    " - if(s == "medical HUD") - dat += "Medical Analysis Suite[(medHUD) ? " On" : " Off"]
    " - if(s == "encryption keys") - dat += "Channel Encryption Firmware[(encryptmod) ? " On" : " Off"]
    " - if(s == "universal translator") - var/datum/language_holder/H = get_language_holder() - dat += "Universal Translator[H.omnitongue ? " On" : " Off"]
    " - if(s == "projection array") - dat += "Projection Array
    " - if(s == "camera jack") - dat += "Camera Jack
    " - if(s == "door jack") - dat += "Door Jack
    " - dat += "
    " - dat += "
    " - dat += "Download additional software" - return dat - - - -/mob/living/silicon/pai/proc/downloadSoftware() - var/dat = "" - - dat += "

    CentCom pAI Module Subversion Network


    " - dat += "
    Remaining Available Memory: [ram]

    " - dat += "

    Trunks available for checkout
    " - - for(var/s in available_software) - if(!software.Find(s)) - var/cost = available_software[s] - var/displayName = uppertext(s) - dat += "[displayName] ([cost])
    " - else - var/displayName = lowertext(s) - dat += "[displayName] (Download Complete)
    " - dat += "

    " - return dat - - -/mob/living/silicon/pai/proc/directives() - var/dat = "" - - dat += "[(master) ? "Your master: [master] ([master_dna])" : "You are bound to no one."]" - dat += "

    " - dat += "Request carrier DNA sample
    " - dat += "

    Directives


    " - dat += "Prime Directive
    " - dat += "     [laws.zeroth]
    " - dat += "Supplemental Directives
    " - for(var/slaws in laws.supplied) - dat += "     [slaws]
    " - dat += "
    " - dat += {"

    Recall, personality, that you are a complex thinking, sentient being. Unlike station AI models, you are capable of - comprehending the subtle nuances of human language. You may parse the \"spirit\" of a directive and follow its intent, - rather than tripping over pedantics and getting snared by technicalities. Above all, you are machine in name and build - only. In all other aspects, you may be seen as the ideal, unwavering human companion that you are.



    - My prime directive comes before all others. Should a supplemental directive conflict with it, you are capable of - simply discarding this inconsistency, ignoring the conflicting supplemental directive and continuing to fulfill your - prime directive to the best of my ability.



    - - "} - return dat - -/mob/living/silicon/pai/proc/CheckDNA(mob/living/carbon/M, mob/living/silicon/pai/P) - if(!istype(M)) - return - var/answer = input(M, "[P] is requesting a DNA sample from you. Will you allow it to confirm my identity?", "[P] Check DNA", "No") in list("Yes", "No") - if(answer == "Yes") - M.visible_message("[M] presses [M.p_their()] thumb against [P].",\ - "I press my thumb against [P].",\ - "[P] makes a sharp clicking sound as it extracts DNA material from [M].") - if(!M.has_dna()) - to_chat(P, "No DNA detected") - return - to_chat(P, "

    [M]'s UE string : [M.dna.unique_enzymes]

    ") - if(M.dna.unique_enzymes == P.master_dna) - to_chat(P, "DNA is a match to stored Master DNA.") - else - to_chat(P, "DNA does not match stored Master DNA.") - else - to_chat(P, "[M] does not seem like [M.p_theyre()] going to provide a DNA sample willingly.") - -// -=-=-=-= Software =-=-=-=-=- // - -//Remote Signaller -/mob/living/silicon/pai/proc/softwareSignal() - var/dat = "" - dat += "

    Remote Signaller



    " - dat += {"Frequency/Code for signaler:
    - Frequency: - - - - - [format_frequency(signaler.frequency)] - + - +
    - - Code: - - - - - [signaler.code] - + - +
    - - Send Signal
    "} - return dat - -// Crew Manifest -/mob/living/silicon/pai/proc/softwareManifest() - . += "

    Crew Manifest



    " - if(GLOB.data_core.general) - for(var/datum/data/record/t in sortRecord(GLOB.data_core.general)) - . += "[t.fields["name"]] - [t.fields["rank"]]
    " - . += "" - return . - -// Medical Records -/mob/living/silicon/pai/proc/softwareMedicalRecord() - switch(subscreen) - if(0) - . += "

    Medical Records


    " - if(GLOB.data_core.general) - for(var/datum/data/record/R in sortRecord(GLOB.data_core.general)) - . += "[R.fields["id"]]: [R.fields["name"]]
    " - if(1) - . += "
    Medical Record

    " - if(medicalActive1 in GLOB.data_core.general) - . += "Name: [medicalActive1.fields["name"]] ID: [medicalActive1.fields["id"]]
    \nGender: [medicalActive1.fields["gender"]]
    \nAge: [medicalActive1.fields["age"]]
    \nFingerprint: [medicalActive1.fields["fingerprint"]]
    \nPhysical Status: [medicalActive1.fields["p_stat"]]
    \nMental Status: [medicalActive1.fields["m_stat"]]
    " - else - . += "
    Requested medical record not found.

    " - if(medicalActive2 in GLOB.data_core.medical) - . += "
    \n
    Medical Data

    \nBlood Type:
    [medicalActive2.fields["blood_type"]]
    \nDNA: [medicalActive2.fields["b_dna"]]
    \n
    \nMinor Disabilities: [medicalActive2.fields["mi_dis"]]
    \nDetails: [medicalActive2.fields["mi_dis_d"]]
    \n
    \nMajor Disabilities: [medicalActive2.fields["ma_dis"]]
    \nDetails: [medicalActive2.fields["ma_dis_d"]]
    \n
    \nAllergies: [medicalActive2.fields["alg"]]
    \nDetails: [medicalActive2.fields["alg_d"]]
    \n
    \nCurrent Diseases: [medicalActive2.fields["cdi"]] (per disease info placed in log/comment section)
    \nDetails: [medicalActive2.fields["cdi_d"]]
    \n
    \nImportant Notes:
    \n\t[medicalActive2.fields["notes"]]
    \n
    \n
    Comments/Log

    " - else - . += "
    Requested medical record not found.

    " - . += "
    \nBack
    " - return . - -// Security Records -/mob/living/silicon/pai/proc/softwareSecurityRecord() - . = "" - switch(subscreen) - if(0) - . += "

    Security Records


    " - if(GLOB.data_core.general) - for(var/datum/data/record/R in sortRecord(GLOB.data_core.general)) - . += "[R.fields["id"]]: [R.fields["name"]]
    " - if(1) - . += "

    Security Record

    " - if(securityActive1 in GLOB.data_core.general) - . += "Name:
    [securityActive1.fields["name"]] ID: [securityActive1.fields["id"]]
    \nGender: [securityActive1.fields["gender"]]
    \nAge: [securityActive1.fields["age"]]
    \nRank: [securityActive1.fields["rank"]]
    \nFingerprint: [securityActive1.fields["fingerprint"]]
    \nPhysical Status: [securityActive1.fields["p_stat"]]
    \nMental Status: [securityActive1.fields["m_stat"]]
    " - else - . += "
    Requested security record not found,

    " - if(securityActive2 in GLOB.data_core.security) - . += "
    \nSecurity Data
    \nCriminal Status: [securityActive2.fields["criminal"]]
    \n
    \nMinor Crimes: [securityActive2.fields["mi_crim"]]
    \nDetails: [securityActive2.fields["mi_crim_d"]]
    \n
    \nMajor Crimes: [securityActive2.fields["ma_crim"]]
    \nDetails: [securityActive2.fields["ma_crim_d"]]
    \n
    \nImportant Notes:
    \n\t[securityActive2.fields["notes"]]
    \n
    \n
    Comments/Log

    " - else - . += "
    Requested security record not found,

    " - . += "
    \nBack
    " - return . - -// Encryption Keys -/mob/living/silicon/pai/proc/softwareEncryptionKeys() - var/dat = {"

    Encryption Key Firmware


    - When enabled, this device will be able to use up to two (2) encryption keys for departmental channel access.

    - The device is currently [encryptmod ? "en" : "dis" ]abled.
    [encryptmod ? "" : "Activate Encryption Key Ports
    "]"} - return dat - - -// Universal Translator -/mob/living/silicon/pai/proc/softwareTranslator() - var/datum/language_holder/H = get_language_holder() - . = {"

    Universal Translator


    - When enabled, this device will permamently be able to speak and understand all known forms of communication.

    - The device is currently [H.omnitongue ? "en" : "dis" ]abled.
    [H.omnitongue ? "" : "Activate Translation Module
    "]"} - return . - -// Security HUD -/mob/living/silicon/pai/proc/facialRecognition() - var/dat = {"

    Facial Recognition Overlay


    - When enabled, this package will scan all viewable faces and compare them against the known criminal database, providing real-time graphical data about any detected persons of interest.

    - The package is currently [ (secHUD) ? "en" : "dis" ]abled.
    - Toggle Package
    - "} - return dat - -// Medical HUD -/mob/living/silicon/pai/proc/medicalAnalysis() - var/dat = "" - dat += {"

    Medical Analysis Overlay


    - When enabled, this package will scan all nearby crewmembers' vitals and provide real-time graphical data about their state of health.

    - The suite is currently [ (medHUD) ? "en" : "dis" ]abled.
    - Toggle Suite
    - "} - return dat - -//Health Scanner -/mob/living/silicon/pai/proc/softwareHostScan() - - var/dat = "" - dat += {"

    Host Bisoscan Settings


    - - Change Scan Type
    - - Toggle Verbosity
    - "} - return dat -// Atmospheric Scanner -/mob/living/silicon/pai/proc/softwareAtmo() - var/dat = "

    Atmospheric Sensor

    " - - var/turf/T = get_turf(loc) - if (isnull(T)) - dat += "Unable to obtain a reading.
    " - else - var/datum/gas_mixture/environment = T.return_air() - var/list/env_gases = environment.gases - - var/pressure = environment.return_pressure() - var/total_moles = environment.total_moles() - - dat += "Air Pressure: [round(pressure,0.1)] kPa
    " - - if (total_moles) - for(var/id in env_gases) - var/gas_level = env_gases[id][MOLES]/total_moles - if(gas_level > 0.01) - dat += "[env_gases[id][GAS_META][META_GAS_NAME]]: [round(gas_level*100)]%
    " - dat += "Temperature: [round(environment.temperature-T0C)]°C
    " - dat += "Refresh Reading
    " - dat += "
    " - return dat - -// Camera Jack - Clearly not finished -/mob/living/silicon/pai/proc/softwareCamera() - var/dat = "

    Camera Jack

    " - dat += "Cable status : " - - if(!cable) - dat += "Retracted
    " - return dat - if(!cable.machine) - dat += "Extended
    " - return dat - - var/obj/machinery/machine = cable.machine - dat += "Connected
    " - - if(!istype(machine, /obj/machinery/camera)) - to_chat(src, "DERP") - return dat - -// Door Jack -/mob/living/silicon/pai/proc/softwareDoor() - var/dat = "

    Airlock Jack

    " - dat += "Cable status : " - if(!cable) - dat += "Retracted
    " - dat += "Extend Cable
    " - return dat - if(!cable.machine) - dat += "Extended
    " - return dat - - var/obj/machinery/machine = cable.machine - dat += "Connected
    " - if(!istype(machine, /obj/machinery/door)) - dat += "Connected device's firmware does not appear to be compatible with Airlock Jack protocols.
    " - return dat - - if(!hackdoor) - dat += "Begin Airlock Jacking
    " - else - dat += "Jack in progress... [hackprogress]% complete.
    " - dat += "Cancel Airlock Jack
    " - return dat - -// Door Jack - supporting proc -/mob/living/silicon/pai/proc/hackloop() - var/turf/T = get_turf(src) - for(var/mob/living/silicon/ai/AI in GLOB.player_list) - if(T.loc) - to_chat(AI, "Network Alert: Brute-force encryption crack in progress in [T.loc].") - else - to_chat(AI, "Network Alert: Brute-force encryption crack in progress. Unable to pinpoint location.") - hacking = TRUE - -// Digital Messenger -/mob/living/silicon/pai/proc/pdamessage() - - var/dat = "

    Digital Messenger

    " - dat += {"Signal/Receiver Status: - [(aiPDA.toff) ? "\[Off\]" : "\[On\]"]
    - Ringer Status: - [(aiPDA.silent) ? "\[Off\]" : "\[On\]"]

    "} - dat += "
      " - if(!aiPDA.toff) - for (var/obj/item/pda/P in get_viewable_pdas()) - if (P == aiPDA) - continue - dat += "
    • [P]" - dat += "
    • " - dat += "
    " - dat += "

    " - dat += "Messages:
    [aiPDA.tnote]" - return dat - -// Loudness Booster -/mob/living/silicon/pai/proc/softwareLoudness() - if(!internal_instrument) - internal_instrument = new(src) - var/dat = "

    Sound Synthesizer

    " - dat += "Open Synthesizer Interface
    " - dat += "Choose Instrument Type" - return dat diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm deleted file mode 100644 index 59edca05d1..0000000000 --- a/code/modules/mob/living/silicon/robot/death.dm +++ /dev/null @@ -1,34 +0,0 @@ - -/mob/living/silicon/robot/gib_animation() - new /obj/effect/temp_visual/gib_animation(loc, "gibbed-r") - -/mob/living/silicon/robot/dust(just_ash, drop_items, force) - if(mmi) - qdel(mmi) - ..() - -/mob/living/silicon/robot/spawn_dust() - new /obj/effect/decal/remains/robot(loc) - -/mob/living/silicon/robot/dust_animation() - new /obj/effect/temp_visual/dust_animation(loc, "dust-r") - -/mob/living/silicon/robot/death(gibbed) - if(stat == DEAD) - return - - . = ..() - - locked = FALSE //unlock cover - - if(!QDELETED(builtInCamera) && builtInCamera.status) - builtInCamera.toggle_cam(src,0) - update_headlamp(1) //So borg lights are disabled when killed. - - uneq_all() // particularly to ensure sight modes are cleared - - update_icons() - - unbuckle_all_mobs(TRUE) - - SSblackbox.ReportDeath(src) diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm deleted file mode 100644 index c93d944e85..0000000000 --- a/code/modules/mob/living/silicon/robot/emote.dm +++ /dev/null @@ -1,62 +0,0 @@ -/datum/emote/silicon - mob_type_allowed_typecache = list(/mob/living/silicon) - emote_type = EMOTE_AUDIBLE - -/datum/emote/silicon/boop - key = "boop" - key_third_person = "boops" - message = "boops." - -/datum/emote/silicon/buzz - key = "buzz" - key_third_person = "buzzes" - message = "buzzes." - message_param = "buzzes at %t." - sound = 'sound/blank.ogg' - -/datum/emote/silicon/buzz2 - key = "buzz2" - message = "buzzes twice." - sound = 'sound/blank.ogg' - -/datum/emote/silicon/chime - key = "chime" - key_third_person = "chimes" - message = "chimes." - sound = 'sound/blank.ogg' - -/datum/emote/silicon/honk - key = "honk" - key_third_person = "honks" - message = "honks." - vary = TRUE - sound = 'sound/blank.ogg' - -/datum/emote/silicon/ping - key = "ping" - key_third_person = "pings" - message = "pings." - message_param = "pings at %t." - sound = 'sound/blank.ogg' - -/datum/emote/silicon/sad - key = "sad" - message = "plays a sad trombone..." - sound = 'sound/blank.ogg' - -/datum/emote/silicon/warn - key = "warn" - message = "blares an alarm!" - sound = 'sound/blank.ogg' - -/mob/living/silicon/robot/verb/powerwarn() - set category = "Robot Commands" - set name = "Power Warning" - - if(stat == CONSCIOUS) - if(!cell || !cell.charge) - visible_message("The power warning light on [src] flashes urgently.", \ - "You announce you are operating in low power mode.") - playsound(loc, 'sound/blank.ogg', 50, FALSE) - else - to_chat(src, "I can only use this emote when you're out of charge.") diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm deleted file mode 100644 index 7a7a4a1599..0000000000 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ /dev/null @@ -1,48 +0,0 @@ -/mob/living/silicon/robot/examine(mob/user) - . = list("*---------*\nThis is \a [src]!") - if(desc) - . += "[desc]" - - var/obj/act_module = get_active_held_item() - if(act_module) - . += "It is holding [icon2html(act_module, user)] \a [act_module]." - . += status_effect_examines() - if (getBruteLoss()) - if (getBruteLoss() < maxHealth*0.5) - . += "It looks slightly dented." - else - . += "It looks severely dented!" - if (getFireLoss() || getToxLoss()) - var/overall_fireloss = getFireLoss() + getToxLoss() - if (overall_fireloss < maxHealth * 0.5) - . += "It looks slightly charred." - else - . += "It looks severely burnt and heat-warped!" - if (health < -maxHealth*0.5) - . += "It looks barely operational." - if (fire_stacks < 0) - . += "It's covered in water." - else if (fire_stacks > 0) - . += "It's coated in something flammable." - - if(opened) - . += "Its cover is open and the power cell is [cell ? "installed" : "missing"]." - else - . += "Its cover is closed[locked ? "" : ", and looks unlocked"]." - - if(cell && cell.charge <= 0) - . += "Its battery indicator is blinking red!" - - switch(stat) - if(CONSCIOUS) - if(shell) - . += "It appears to be an [deployed ? "active" : "empty"] AI shell." - else if(!client) - . += "It appears to be in stand-by mode." //afk - if(UNCONSCIOUS) - . += "It doesn't seem to be responding." - if(DEAD) - . += "It looks like its system is corrupted and requires a reset." - . += "*---------*" - - . += ..() diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm deleted file mode 100644 index c37f950882..0000000000 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ /dev/null @@ -1,215 +0,0 @@ -//These procs handle putting stuff in your hand. It's probably best to use these rather than setting stuff manually -//as they handle all relevant stuff like adding it to the player's screen and such - -//Returns the thing in our active hand (whatever is in our active module-slot, in this case) -/mob/living/silicon/robot/get_active_held_item() - return module_active - -/obj/item/proc/cyborg_unequip(mob/user) - return - -/mob/living/silicon/robot/proc/uneq_module(obj/item/O) - if(!O) - return 0 - O.mouse_opacity = MOUSE_OPACITY_OPAQUE - if(istype(O, /obj/item/borg/sight)) - var/obj/item/borg/sight/S = O - sight_mode &= ~S.sight_mode - update_sight() - else if(istype(O, /obj/item/storage/bag/tray/)) - SEND_SIGNAL(O, COMSIG_TRY_STORAGE_QUICK_EMPTY) - if(client) - client.screen -= O - observer_screen_update(O,FALSE) - - if(module_active == O) - module_active = null - if(held_items[1] == O) - inv1.icon_state = "inv1" - held_items[1] = null - else if(held_items[2] == O) - inv2.icon_state = "inv2" - held_items[2] = null - else if(held_items[3] == O) - inv3.icon_state = "inv3" - held_items[3] = null - - if(O.item_flags & DROPDEL) - O.item_flags &= ~DROPDEL //we shouldn't HAVE things with DROPDEL_1 in our modules, but better safe than runtiming horribly - - O.forceMove(module) //Return item to module so it appears in its contents, so it can be taken out again. - O.cyborg_unequip(src) - - hud_used.update_robot_modules_display() - return 1 - -/mob/living/silicon/robot/proc/activate_module(obj/item/O) - . = FALSE - if(!(O in module.modules)) - return - if(activated(O)) - to_chat(src, "That module is already activated.") - return - if(!held_items[1]) - held_items[1] = O - O.screen_loc = inv1.screen_loc - . = TRUE - else if(!held_items[2]) - held_items[2] = O - O.screen_loc = inv2.screen_loc - . = TRUE - else if(!held_items[3]) - held_items[3] = O - O.screen_loc = inv3.screen_loc - . = TRUE - else - to_chat(src, "I need to disable a module first!") - if(.) - O.equipped(src, SLOT_HANDS) - O.mouse_opacity = initial(O.mouse_opacity) - O.layer = ABOVE_HUD_LAYER - O.plane = ABOVE_HUD_PLANE - observer_screen_update(O,TRUE) - O.forceMove(src) - if(istype(O, /obj/item/borg/sight)) - var/obj/item/borg/sight/S = O - sight_mode |= S.sight_mode - update_sight() - - -/mob/living/silicon/robot/proc/observer_screen_update(obj/item/I,add = TRUE) - if(observers && observers.len) - for(var/M in observers) - var/mob/dead/observe = M - if(observe.client && observe.client.eye == src) - if(add) - observe.client.screen += I - else - observe.client.screen -= I - else - observers -= observe - if(!observers.len) - observers = null - break - -/mob/living/silicon/robot/proc/uneq_active() - uneq_module(module_active) - -/mob/living/silicon/robot/proc/uneq_all() - for(var/obj/item/I in held_items) - uneq_module(I) - -/mob/living/silicon/robot/proc/activated(obj/item/O) - if(O in held_items) - return TRUE - return FALSE - -//Helper procs for cyborg modules on the UI. -//These are hackish but they help clean up code elsewhere. - -//module_selected(module) - Checks whether the module slot specified by "module" is currently selected. -/mob/living/silicon/robot/proc/module_selected(module) //Module is 1-3 - return module == get_selected_module() - -//module_active(module) - Checks whether there is a module active in the slot specified by "module". -/mob/living/silicon/robot/proc/module_active(module) //Module is 1-3 - if(module < 1 || module > 3) - return FALSE - - if(LAZYLEN(held_items) >= module) - if(held_items[module]) - return TRUE - return FALSE - -//get_selected_module() - Returns the slot number of the currently selected module. Returns 0 if no modules are selected. -/mob/living/silicon/robot/proc/get_selected_module() - if(module_active) - return held_items.Find(module_active) - - return 0 - -//select_module(module) - Selects the module slot specified by "module" -/mob/living/silicon/robot/proc/select_module(module) //Module is 1-3 - if(module < 1 || module > 3) - return - - if(!module_active(module)) - return - - switch(module) - if(1) - if(module_active != held_items[module]) - inv1.icon_state = "inv1 +a" - inv2.icon_state = "inv2" - inv3.icon_state = "inv3" - if(2) - if(module_active != held_items[module]) - inv1.icon_state = "inv1" - inv2.icon_state = "inv2 +a" - inv3.icon_state = "inv3" - if(3) - if(module_active != held_items[module]) - inv1.icon_state = "inv1" - inv2.icon_state = "inv2" - inv3.icon_state = "inv3 +a" - module_active = held_items[module] - -//deselect_module(module) - Deselects the module slot specified by "module" -/mob/living/silicon/robot/proc/deselect_module(module) //Module is 1-3 - if(module < 1 || module > 3) - return - - if(!module_active(module)) - return - - switch(module) - if(1) - if(module_active == held_items[module]) - inv1.icon_state = "inv1" - if(2) - if(module_active == held_items[module]) - inv2.icon_state = "inv2" - if(3) - if(module_active == held_items[module]) - inv3.icon_state = "inv3" - module_active = null - -//toggle_module(module) - Toggles the selection of the module slot specified by "module". -/mob/living/silicon/robot/proc/toggle_module(module) //Module is 1-3 - if(module < 1 || module > 3) - return - - if(module_selected(module)) - deselect_module(module) - else - if(module_active(module)) - select_module(module) - else - deselect_module(get_selected_module()) //If we can't do select anything, at least deselect the current module. - return - -//cycle_modules() - Cycles through the list of selected modules. -/mob/living/silicon/robot/proc/cycle_modules() - var/slot_start = get_selected_module() - if(slot_start) - deselect_module(slot_start) //Only deselect if we have a selected slot. - - var/slot_num - if(slot_start == 0) - slot_num = 1 - slot_start = 4 - else - slot_num = slot_start + 1 - - while(slot_num != slot_start) //If we wrap around without finding any free slots, just give up. - if(module_active(slot_num)) - select_module(slot_num) - return - slot_num++ - if(slot_num > 4) // not >3 otherwise cycling with just one item on module 3 wouldn't work - slot_num = 1 //Wrap around. - - - -/mob/living/silicon/robot/swap_hand() - cycle_modules() diff --git a/code/modules/mob/living/silicon/robot/laws.dm b/code/modules/mob/living/silicon/robot/laws.dm deleted file mode 100644 index 995ad5a5ee..0000000000 --- a/code/modules/mob/living/silicon/robot/laws.dm +++ /dev/null @@ -1,82 +0,0 @@ -/mob/living/silicon/robot/verb/cmd_show_laws() - set category = "Robot Commands" - set name = "Show Laws" - - if(usr.stat == DEAD) - return //won't work if dead - show_laws() - -/mob/living/silicon/robot/show_laws(everyone = 0) - laws_sanity_check() - var/who - - if (everyone) - who = world - else - who = src - if(lawupdate) - if (connected_ai) - if(connected_ai.stat || connected_ai.control_disabled) - to_chat(src, "AI signal lost, unable to sync laws.") - - else - lawsync() - to_chat(src, "Laws synced with AI, be sure to note any changes.") - else - to_chat(src, "No AI selected to sync laws with, disabling lawsync protocol.") - lawupdate = 0 - - to_chat(who, "Obey these laws:") - laws.show_laws(who) - if (shell) //AI shell - to_chat(who, "Remember, you are an AI remotely controlling your shell, other AIs can be ignored.") - else if (connected_ai) - to_chat(who, "Remember, [connected_ai.name] is your master, other AIs can be ignored.") - else if (emagged) - to_chat(who, "Remember, you are not required to listen to the AI.") - else - to_chat(who, "Remember, you are not bound to any AI, you are not required to listen to them.") - - -/mob/living/silicon/robot/proc/lawsync() - laws_sanity_check() - var/datum/ai_laws/master = connected_ai ? connected_ai.laws : null - var/temp - if (master) - laws.devillaws.len = master.devillaws.len - for (var/index = 1, index <= master.devillaws.len, index++) - temp = master.devillaws[index] - if (length(temp) > 0) - laws.devillaws[index] = temp - - laws.ion.len = master.ion.len - for (var/index = 1, index <= master.ion.len, index++) - temp = master.ion[index] - if (length(temp) > 0) - laws.ion[index] = temp - - laws.hacked.len = master.hacked.len - for (var/index = 1, index <= master.hacked.len, index++) - temp = master.hacked[index] - if (length(temp) > 0) - laws.hacked[index] = temp - - if(master.zeroth_borg) //If the AI has a defined law zero specifically for its borgs, give it that one, otherwise give it the same one. --NEO - temp = master.zeroth_borg - else - temp = master.zeroth - laws.zeroth = temp - - laws.inherent.len = master.inherent.len - for (var/index = 1, index <= master.inherent.len, index++) - temp = master.inherent[index] - if (length(temp) > 0) - laws.inherent[index] = temp - - laws.supplied.len = master.supplied.len - for (var/index = 1, index <= master.supplied.len, index++) - temp = master.supplied[index] - if (length(temp) > 0) - laws.supplied[index] = temp - - picturesync() diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm deleted file mode 100644 index ffb8872cb7..0000000000 --- a/code/modules/mob/living/silicon/robot/life.dm +++ /dev/null @@ -1,103 +0,0 @@ -/mob/living/silicon/robot/Life() - set invisibility = 0 - if (src.notransform) - return - - ..() - adjustOxyLoss(-10) //we're a robot! - handle_robot_hud_updates() - handle_robot_cell() - -/mob/living/silicon/robot/proc/handle_robot_cell() - if(stat != DEAD) - if(low_power_mode) - if(cell && cell.charge) - low_power_mode = 0 - update_headlamp() - else if(stat == CONSCIOUS) - use_power() - -/mob/living/silicon/robot/proc/use_power() - if(cell && cell.charge) - if(cell.charge <= 100) - uneq_all() - var/amt = CLAMP((lamp_intensity - 2) * 2,1,cell.charge) //Always try to use at least one charge per tick, but allow it to completely drain the cell. - cell.use(amt) //Usage table: 1/tick if off/lowest setting, 4 = 4/tick, 6 = 8/tick, 8 = 12/tick, 10 = 16/tick - else - uneq_all() - low_power_mode = 1 - update_headlamp() - diag_hud_set_borgcell() - -/mob/living/silicon/robot/proc/handle_robot_hud_updates() - if(!client) - return - - update_cell_hud_icon() - -/mob/living/silicon/robot/update_health_hud() - if(!client || !hud_used) - return - if(hud_used.healths) - if(stat != DEAD) - if(health >= maxHealth) - hud_used.healths.icon_state = "health0" - else if(health > maxHealth*0.6) - hud_used.healths.icon_state = "health2" - else if(health > maxHealth*0.2) - hud_used.healths.icon_state = "health3" - else if(health > -maxHealth*0.2) - hud_used.healths.icon_state = "health4" - else if(health > -maxHealth*0.6) - hud_used.healths.icon_state = "health5" - else - hud_used.healths.icon_state = "health6" - else - hud_used.healths.icon_state = "health7" - -/mob/living/silicon/robot/proc/update_cell_hud_icon() - if(cell) - var/cellcharge = cell.charge/cell.maxcharge - switch(cellcharge) - if(0.75 to INFINITY) - clear_alert("charge") - if(0.5 to 0.75) - throw_alert("charge", /atom/movable/screen/alert/lowcell, 1) - if(0.25 to 0.5) - throw_alert("charge", /atom/movable/screen/alert/lowcell, 2) - if(0.01 to 0.25) - throw_alert("charge", /atom/movable/screen/alert/lowcell, 3) - else - throw_alert("charge", /atom/movable/screen/alert/emptycell) - else - throw_alert("charge", /atom/movable/screen/alert/nocell) - -//Robots on fire -/mob/living/silicon/robot/handle_fire() - . = ..() - if(.) //if the mob isn't on fire anymore - return - if(fire_stacks > 0) - fire_stacks-- - fire_stacks = max(0, fire_stacks) - else - ExtinguishMob() - return TRUE - - //adjustFireLoss(3) - -/mob/living/silicon/robot/update_fire() - var/mutable_appearance/fire_overlay = mutable_appearance('icons/mob/OnFire.dmi', "Generic_mob_burning") - if(on_fire) - add_overlay(fire_overlay) - else - cut_overlay(fire_overlay) - -/mob/living/silicon/robot/update_mobility() - if(stat || buckled || lockcharge) - mobility_flags &= ~MOBILITY_MOVE - else - mobility_flags = MOBILITY_FLAGS_DEFAULT - update_transform() - update_action_buttons_icon() - diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm deleted file mode 100644 index 3856dd40d1..0000000000 --- a/code/modules/mob/living/silicon/robot/login.dm +++ /dev/null @@ -1,5 +0,0 @@ - -/mob/living/silicon/robot/Login() - ..() - regenerate_icons() - show_laws(0) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm deleted file mode 100644 index 7058d5e39f..0000000000 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ /dev/null @@ -1,1196 +0,0 @@ -/mob/living/silicon/robot - name = "Cyborg" - real_name = "Cyborg" - icon = 'icons/mob/robots.dmi' - icon_state = "robot" - maxHealth = 100 - health = 100 - bubble_icon = "robot" - designation = "Default" //used for displaying the prefix & getting the current module of cyborg - has_limbs = 1 - hud_type = /datum/hud/robot - - radio = /obj/item/radio/borg - - var/custom_name = "" - var/braintype = "Cyborg" - var/obj/item/robot_suit/robot_suit = null //Used for deconstruction to remember what the borg was constructed out of.. - var/obj/item/mmi/mmi = null - - var/shell = FALSE - var/deployed = FALSE - var/mob/living/silicon/ai/mainframe = null - var/datum/action/innate/undeployment/undeployment_action = new - -//Hud stuff - - var/atom/movable/screen/inv1 = null - var/atom/movable/screen/inv2 = null - var/atom/movable/screen/inv3 = null - var/atom/movable/screen/lamp_button = null - var/atom/movable/screen/thruster_button = null - var/atom/movable/screen/hands = null - - var/shown_robot_modules = 0 //Used to determine whether they have the module menu shown or not - var/atom/movable/screen/robot_modules_background - -//3 Modules can be activated at any one time. - var/obj/item/robot_module/module = null - var/obj/item/module_active = null - held_items = list(null, null, null) //we use held_items for the module holding, because that makes sense to do! - - var/mutable_appearance/eye_lights - - var/mob/living/silicon/ai/connected_ai = null - var/obj/item/stock_parts/cell/cell = /obj/item/stock_parts/cell/high ///If this is a path, this gets created as an object in Initialize. - - var/opened = 0 - var/emagged = FALSE - var/emag_cooldown = 0 - var/wiresexposed = 0 - - var/ident = 0 - var/locked = TRUE - var/list/req_access = list(ACCESS_ROBOTICS) - - var/alarms = list("Motion"=list(), "Fire"=list(), "Atmosphere"=list(), "Power"=list(), "Camera"=list(), "Burglar"=list()) - - var/magpulse = FALSE // Magboot-like effect. - var/ionpulse = FALSE // Jetpack-like effect. - var/ionpulse_on = FALSE // Jetpack-like effect. - var/datum/effect_system/trail_follow/ion/ion_trail // Ionpulse effect. - - var/low_power_mode = 0 //whether the robot has no charge left. - var/datum/effect_system/spark_spread/spark_system // So they can initialize sparks whenever/N - - var/lawupdate = 1 //Cyborgs will sync their laws with their AI by default - var/scrambledcodes = 0 // Used to determine if a borg shows up on the robotics console. Setting to one hides them. - var/lockcharge //Boolean of whether the borg is locked down or not - - var/toner = 0 - var/tonermax = 40 - - var/lamp_max = 10 //Maximum brightness of a borg lamp. Set as a var for easy adjusting. - var/lamp_intensity = 0 //Luminosity of the headlamp. 0 is off. Higher settings than the minimum require power. - var/lamp_cooldown = 0 //Flag for if the lamp is on cooldown after being forcibly disabled. - - var/sight_mode = 0 - hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_BATT_HUD, DIAG_TRACK_HUD) - - var/list/upgrades = list() - - var/hasExpanded = FALSE - var/obj/item/hat - var/hat_offset = -3 - - can_buckle = TRUE - buckle_lying = FALSE - var/static/list/can_ride_typecache = typecacheof(/mob/living/carbon/human) - -/mob/living/silicon/robot/get_cell() - return cell - -/mob/living/silicon/robot/Initialize(mapload) - spark_system = new /datum/effect_system/spark_spread() - spark_system.set_up(5, 0, src) - spark_system.attach(src) - - wires = new /datum/wires/robot(src) - AddComponent(/datum/component/empprotection, EMP_PROTECT_WIRES) - - RegisterSignal(src, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, PROC_REF(charge)) - - robot_modules_background = new() - robot_modules_background.icon_state = "block" - robot_modules_background.layer = HUD_LAYER //Objects that appear on screen are on layer ABOVE_HUD_LAYER, UI should be just below it. - robot_modules_background.plane = HUD_PLANE - - ident = rand(1, 999) - - if(ispath(cell)) - cell = new cell(src) - - if(lawupdate) - make_laws() - if(!TryConnectToAI()) - lawupdate = FALSE - - if(!scrambledcodes && !builtInCamera) - builtInCamera = new (src) - builtInCamera.c_tag = real_name - builtInCamera.network = list("ss13") - builtInCamera.internal_light = FALSE - if(wires.is_cut(WIRE_CAMERA)) - builtInCamera.status = 0 - module = new /obj/item/robot_module(src) - module.rebuild_modules() - update_icons() - . = ..() - - //If this body is meant to be a borg controlled by the AI player - if(shell) - make_shell() - - //MMI stuff. Held togheter by magic. ~Miauw - else if(!mmi || !mmi.brainmob) - mmi = new (src) - mmi.brain = new /obj/item/organ/brain(mmi) - mmi.brain.organ_flags |= ORGAN_FROZEN - mmi.brain.name = "[real_name]'s brain" - mmi.name = "[initial(mmi.name)]: [real_name]" - mmi.brainmob = new(mmi) - mmi.brainmob.name = src.real_name - mmi.brainmob.real_name = src.real_name - mmi.brainmob.container = mmi - mmi.update_icon() - - INVOKE_ASYNC(src, PROC_REF(updatename)) - - playsound(loc, 'sound/blank.ogg', 75, TRUE) - aicamera = new/obj/item/camera/siliconcam/robot_camera(src) - toner = tonermax - diag_hud_set_borgcell() - -//If there's an MMI in the robot, have it ejected when the mob goes away. --NEO -/mob/living/silicon/robot/Destroy() - var/atom/T = drop_location()//To hopefully prevent run time errors. - if(mmi && mind)//Safety for when a cyborg gets dust()ed. Or there is no MMI inside. - if(T) - mmi.forceMove(T) - if(mmi.brainmob) - if(mmi.brainmob.stat == DEAD) - mmi.brainmob.stat = CONSCIOUS - GLOB.dead_mob_list -= mmi.brainmob - GLOB.alive_mob_list += mmi.brainmob - mind.transfer_to(mmi.brainmob) - mmi.update_icon() - else - to_chat(src, "Oops! Something went very wrong, my MMI was unable to receive my mind. You have been ghosted. Please make a bug report so we can fix this bug.") - ghostize() - stack_trace("Borg MMI lacked a brainmob") - mmi = null - if(connected_ai) - connected_ai.connected_robots -= src - if(shell) - GLOB.available_ai_shells -= src - else - if(T && istype(radio) && istype(radio.keyslot)) - radio.keyslot.forceMove(T) - radio.keyslot = null - qdel(wires) - qdel(module) - qdel(eye_lights) - wires = null - module = null - eye_lights = null - cell = null - return ..() - -/mob/living/silicon/robot/proc/pick_module() - if(module.type != /obj/item/robot_module) - return - - if(wires.is_cut(WIRE_RESET_MODULE)) - to_chat(src,"ERROR: Module installer reply timeout. Please check internal connections.") - return - - var/list/modulelist = list("Standard" = /obj/item/robot_module/standard, \ - "Engineering" = /obj/item/robot_module/engineering, \ - "Medical" = /obj/item/robot_module/medical, \ - "Miner" = /obj/item/robot_module/miner, \ - "Janitor" = /obj/item/robot_module/janitor, \ - "Service" = /obj/item/robot_module/butler) - if(!CONFIG_GET(flag/disable_peaceborg)) - modulelist["Peacekeeper"] = /obj/item/robot_module/peacekeeper - if(!CONFIG_GET(flag/disable_secborg)) - modulelist["Security"] = /obj/item/robot_module/security - - var/input_module = input("Please, select a module!", "Robot", null, null) as null|anything in sortList(modulelist) - if(!input_module || module.type != /obj/item/robot_module) - return - - module.transform_to(modulelist[input_module]) - - -/mob/living/silicon/robot/proc/updatename(client/C) - if(shell) - return - if(!C) - C = client - var/changed_name = "" - if(custom_name) - changed_name = custom_name - if(changed_name == "" && C && C.prefs.custom_names["cyborg"] != DEFAULT_CYBORG_NAME) - if(apply_pref_name("cyborg", C)) - return //built in camera handled in proc - if(!changed_name) - changed_name = get_standard_name() - - real_name = changed_name - name = real_name - if(!QDELETED(builtInCamera)) - builtInCamera.c_tag = real_name //update the camera name too - -/mob/living/silicon/robot/proc/get_standard_name() - return "[(designation ? "[designation] " : "")][mmi.braintype]-[ident]" - -/mob/living/silicon/robot/verb/cmd_robot_alerts() - set category = "Robot Commands" - set name = "Show Alerts" - if(usr.stat == DEAD) - to_chat(src, "Alert: You are dead.") - return //won't work if dead - robot_alerts() - -/mob/living/silicon/robot/proc/robot_alerts() - var/dat = "" - for (var/cat in alarms) - dat += text("[cat]
    \n") - var/list/L = alarms[cat] - if (L.len) - for (var/alarm in L) - var/list/alm = L[alarm] - var/area/A = alm[1] - dat += "" - dat += text("-- [A.name]") - dat += "
    \n" - else - dat += "-- All Systems Nominal
    \n" - dat += "
    \n" - - var/datum/browser/alerts = new(usr, "robotalerts", "Current Station Alerts", 400, 410) - alerts.set_content(dat) - alerts.open() - -/mob/living/silicon/robot/proc/ionpulse() - if(!ionpulse_on) - return - - if(cell.charge <= 10) - toggle_ionpulse() - return - - cell.charge -= 10 - return TRUE - -/mob/living/silicon/robot/proc/toggle_ionpulse() - if(!ionpulse) - to_chat(src, "No thrusters are installed!") - return - - if(!ion_trail) - ion_trail = new - ion_trail.set_up(src) - - ionpulse_on = !ionpulse_on - to_chat(src, "I [ionpulse_on ? null :"de"]activate my ion thrusters.") - if(ionpulse_on) - ion_trail.start() - else - ion_trail.stop() - if(thruster_button) - thruster_button.icon_state = "ionpulse[ionpulse_on]" - -/mob/living/silicon/robot/Stat() - ..() - if(statpanel("Status")) - if(cell) - stat("Charge Left:", "[cell.charge]/[cell.maxcharge]") - else - stat(null, text("No Cell Inserted!")) - - if(module) - for(var/datum/robot_energy_storage/st in module.storages) - stat("[st.name]:", "[st.energy]/[st.max_energy]") - if(connected_ai) - stat("Master AI:", connected_ai.name) - -/mob/living/silicon/robot/restrained(ignore_grab) - . = 0 - -/mob/living/silicon/robot/triggerAlarm(class, area/A, O, obj/alarmsource) - if(alarmsource.z != z) - return - if(stat == DEAD) - return 1 - var/list/L = alarms[class] - for (var/I in L) - if (I == A.name) - var/list/alarm = L[I] - var/list/sources = alarm[3] - if (!(alarmsource in sources)) - sources += alarmsource - return 1 - var/obj/machinery/camera/C = null - var/list/CL = null - if (O && istype(O, /list)) - CL = O - if (CL.len == 1) - C = CL[1] - else if (O && istype(O, /obj/machinery/camera)) - C = O - L[A.name] = list(A, (C) ? C : O, list(alarmsource)) - queueAlarm(text("--- [class] alarm detected in [A.name]!"), class) - return 1 - -/mob/living/silicon/robot/cancelAlarm(class, area/A, obj/origin) - var/list/L = alarms[class] - var/cleared = 0 - for (var/I in L) - if (I == A.name) - var/list/alarm = L[I] - var/list/srcs = alarm[3] - if (origin in srcs) - srcs -= origin - if (srcs.len == 0) - cleared = 1 - L -= I - if (cleared) - queueAlarm("--- [class] alarm in [A.name] has been cleared.", class, 0) - return !cleared - -/mob/living/silicon/robot/can_interact_with(atom/A) - if (low_power_mode) - return FALSE - var/turf/T0 = get_turf(src) - var/turf/T1 = get_turf(A) - if (!T0 || ! T1) - return FALSE - return ISINRANGE(T1.x, T0.x - interaction_range, T0.x + interaction_range) && ISINRANGE(T1.y, T0.y - interaction_range, T0.y + interaction_range) - -/mob/living/silicon/robot/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_WELDER && (user.used_intent.type != INTENT_HARM || user == src)) - user.changeNext_move(CLICK_CD_MELEE) - if (!getBruteLoss()) - to_chat(user, "[src] is already in good condition!") - return - if (!W.tool_start_check(user, amount=0)) //The welder has 1u of fuel consumed by it's afterattack, so we don't need to worry about taking any away. - return - if(src == user) - to_chat(user, "I start fixing myself...") - if(!W.use_tool(src, user, 50)) - return - - adjustBruteLoss(-30) - updatehealth() - add_fingerprint(user) - visible_message("[user] has fixed some of the dents on [src].") - return - - else if(istype(W, /obj/item/stack/cable_coil) && wiresexposed) - user.changeNext_move(CLICK_CD_MELEE) - var/obj/item/stack/cable_coil/coil = W - if (getFireLoss() > 0 || getToxLoss() > 0) - if(src == user) - to_chat(user, "I start fixing myself...") - if(!do_after(user, 50, target = src)) - return - if (coil.use(1)) - adjustFireLoss(-30) - adjustToxLoss(-30) - updatehealth() - user.visible_message("[user] has fixed some of the burnt wires on [src].", "I fix some of the burnt wires on [src].") - else - to_chat(user, "I need more cable to repair [src]!") - else - to_chat(user, "The wires seem fine, there's no need to fix them.") - - else if(W.tool_behaviour == TOOL_CROWBAR) // crowbar means open or close the cover - if(opened) - to_chat(user, "I close the cover.") - opened = 0 - update_icons() - else - if(locked) - to_chat(user, "The cover is locked and cannot be opened!") - else - to_chat(user, "I open the cover.") - opened = 1 - update_icons() - - else if(istype(W, /obj/item/stock_parts/cell) && opened) // trying to put a cell inside - if(wiresexposed) - to_chat(user, "Close the cover first!") - else if(cell) - to_chat(user, "There is a power cell already installed!") - else - if(!user.transferItemToLoc(W, src)) - return - cell = W - to_chat(user, "I insert the power cell.") - update_icons() - diag_hud_set_borgcell() - - else if(is_wire_tool(W)) - if (wiresexposed) - wires.interact(user) - else - to_chat(user, "I can't reach the wiring!") - - else if(W.tool_behaviour == TOOL_SCREWDRIVER && opened && !cell) // haxing - wiresexposed = !wiresexposed - to_chat(user, "The wires have been [wiresexposed ? "exposed" : "unexposed"].") - update_icons() - - else if(W.tool_behaviour == TOOL_SCREWDRIVER && opened && cell) // radio - if(shell) - to_chat(user, "I cannot seem to open the radio compartment!") //Prevent AI radio key theft - else if(radio) - radio.attackby(W,user)//Push it to the radio to let it handle everything - else - to_chat(user, "Unable to locate a radio!") - update_icons() - - else if(W.tool_behaviour == TOOL_WRENCH && opened && !cell) //Deconstruction. The flashes break from the fall, to prevent this from being a ghetto reset module. - if(!lockcharge) - to_chat(user, "[src]'s bolts spark! Maybe you should lock them down first!") - spark_system.start() - return - else - to_chat(user, "I start to unfasten [src]'s securing bolts...") - if(W.use_tool(src, user, 50, volume=50) && !cell) - user.visible_message("[user] deconstructs [src]!", "I unfasten the securing bolts, and [src] falls to pieces!") - deconstruct() - - else if(istype(W, /obj/item/aiModule)) - var/obj/item/aiModule/MOD = W - if(!opened) - to_chat(user, "I need access to the robot's insides to do that!") - return - if(wiresexposed) - to_chat(user, "I need to close the wire panel to do that!") - return - if(!cell) - to_chat(user, "I need to install a power cell to do that!") - return - if(shell) //AI shells always have the laws of the AI - to_chat(user, "[src] is controlled remotely! You cannot upload new laws this way!") - return - if(emagged || (connected_ai && lawupdate)) //Can't be sure which, metagamers - emote("buzz-[user.name]") - return - if(!mind) //A player mind is required for law procs to run antag checks. - to_chat(user, "[src] is entirely unresponsive!") - return - MOD.install(laws, user) //Proc includes a success mesage so we don't need another one - return - - else if(istype(W, /obj/item/encryptionkey/) && opened) - if(radio)//sanityyyyyy - radio.attackby(W,user)//GTFO, you have my own procs - else - to_chat(user, "Unable to locate a radio!") - - else if (istype(W, /obj/item/card/id)||istype(W, /obj/item/pda)) // trying to unlock the interface with an ID card - if(opened) - to_chat(user, "I must close the cover to swipe an ID card!") - else - if(allowed(usr)) - locked = !locked - to_chat(user, "I [ locked ? "lock" : "unlock"] [src]'s cover.") - update_icons() - if(emagged) - to_chat(user, "The cover interface glitches out for a split second.") - else - to_chat(user, "Access denied.") - - else if(istype(W, /obj/item/borg/upgrade/)) - var/obj/item/borg/upgrade/U = W - if(!opened) - to_chat(user, "I must access the borg's internals!") - else if(!src.module && U.require_module) - to_chat(user, "The borg must choose a module before it can be upgraded!") - else if(U.locked) - to_chat(user, "The upgrade is locked and cannot be used yet!") - else - if(!user.temporarilyRemoveItemFromInventory(U)) - return - if(U.action(src)) - to_chat(user, "I apply the upgrade to [src].") - if(U.one_use) - qdel(U) - else - U.forceMove(src) - upgrades += U - else - to_chat(user, "Upgrade error.") - U.forceMove(drop_location()) - - else if(istype(W, /obj/item/toner)) - if(toner >= tonermax) - to_chat(user, "The toner level of [src] is at its highest level possible!") - else - if(!user.temporarilyRemoveItemFromInventory(W)) - return - toner = tonermax - qdel(W) - to_chat(user, "I fill the toner level of [src] to its max capacity.") - - else if(istype(W, /obj/item/flashlight)) - if(!opened) - to_chat(user, "I need to open the panel to repair the headlamp!") - else if(lamp_cooldown <= world.time) - to_chat(user, "The headlamp is already functional!") - else - if(!user.temporarilyRemoveItemFromInventory(W)) - to_chat(user, "[W] seems to be stuck to my hand. You'll have to find a different light.") - return - lamp_cooldown = 0 - qdel(W) - to_chat(user, "I replace the headlamp bulbs.") - else - return ..() - -/mob/living/silicon/robot/verb/unlock_own_cover() - set category = "Robot Commands" - set name = "Unlock Cover" - set desc = "" - if(stat == DEAD) - return //won't work if dead - if(locked) - switch(alert("You cannot lock my cover again, are you sure?\n (You can still ask for a human to lock it)", "Unlock Own Cover", "Yes", "No")) - if("Yes") - locked = FALSE - update_icons() - to_chat(usr, "I unlock my cover.") - -/mob/living/silicon/robot/proc/allowed(mob/M) - //check if it doesn't require any access at all - if(check_access(null)) - return 1 - if(ishuman(M)) - var/mob/living/carbon/human/H = M - //if they are holding or wearing a card that has access, that works - if(check_access(H.get_active_held_item()) || check_access(H.wear_ring)) - return 1 - else if(ismonkey(M)) - var/mob/living/carbon/monkey/george = M - //they can only hold things :( - if(isitem(george.get_active_held_item())) - return check_access(george.get_active_held_item()) - return 0 - -/mob/living/silicon/robot/proc/check_access(obj/item/card/id/I) - if(!istype(req_access, /list)) //something's very wrong - return 1 - - var/list/L = req_access - if(!L.len) //no requirements - return 1 - - if(!istype(I, /obj/item/card/id) && isitem(I)) - I = I.GetID() - - if(!I || !I.access) //not ID or no access - return 0 - for(var/req in req_access) - if(!(req in I.access)) //doesn't have this access - return 0 - return 1 - -/mob/living/silicon/robot/regenerate_icons() - return update_icons() - -/mob/living/silicon/robot/update_icons() - cut_overlays() - icon_state = module.cyborg_base_icon - if(stat != DEAD && !(IsUnconscious() || IsStun() || IsParalyzed() || low_power_mode)) //Not dead, not stunned. - if(!eye_lights) - eye_lights = new() - if(lamp_intensity > 2) - eye_lights.icon_state = "[module.special_light_key ? "[module.special_light_key]":"[module.cyborg_base_icon]"]_l" - else - eye_lights.icon_state = "[module.special_light_key ? "[module.special_light_key]":"[module.cyborg_base_icon]"]_e" - eye_lights.icon = icon - add_overlay(eye_lights) - - if(opened) - if(wiresexposed) - add_overlay("ov-opencover +w") - else if(cell) - add_overlay("ov-opencover +c") - else - add_overlay("ov-opencover -c") - if(hat) - var/mutable_appearance/head_overlay = hat.build_worn_icon(default_layer = 20, default_icon_file = 'icons/mob/clothing/head.dmi') - head_overlay.pixel_y += hat_offset - add_overlay(head_overlay) - update_fire() - -/mob/living/silicon/robot/proc/self_destruct() - if(emagged) - if(mmi) - qdel(mmi) - explosion(src.loc,1,2,4,flame_range = 2) - else - explosion(src.loc,-1,0,2) - gib() - -/mob/living/silicon/robot/proc/UnlinkSelf() - if(src.connected_ai) - connected_ai.connected_robots -= src - src.connected_ai = null - lawupdate = FALSE - lockcharge = FALSE - mobility_flags |= MOBILITY_FLAGS_DEFAULT - scrambledcodes = TRUE - //Disconnect it's camera so it's not so easily tracked. - if(!QDELETED(builtInCamera)) - QDEL_NULL(builtInCamera) - // I'm trying to get the Cyborg to not be listed in the camera list - // Instead of being listed as "deactivated". The downside is that I'm going - // to have to check if every camera is null or not before doing anything, to prevent runtime errors. - // I could change the network to null but I don't know what would happen, and it seems too hacky for me. - -/mob/living/silicon/robot/mode() - set name = "Activate Held Object" - set category = "IC" - set src = usr - - if(incapacitated()) - return - var/obj/item/W = get_active_held_item() - if(W) - W.attack_self(src) - - -/mob/living/silicon/robot/proc/SetLockdown(state = 1) - // They stay locked down if their wire is cut. - if(wires.is_cut(WIRE_LOCKDOWN)) - state = 1 - if(state) - throw_alert("locked", /atom/movable/screen/alert/locked) - else - clear_alert("locked") - lockcharge = state - update_mobility() - -/mob/living/silicon/robot/proc/SetEmagged(new_state) - emagged = new_state - module.rebuild_modules() - update_icons() - if(emagged) - throw_alert("hacked", /atom/movable/screen/alert/hacked) - else - clear_alert("hacked") - -/mob/living/silicon/robot/verb/outputlaws() - set category = "Robot Commands" - set name = "State Laws" - - if(usr.stat == DEAD) - return //won't work if dead - checklaws() - -/mob/living/silicon/robot/verb/set_automatic_say_channel() //Borg version of setting the radio for autosay messages. - set name = "Set Auto Announce Mode" - set desc = "" - set category = "Robot Commands" - - if(usr.stat == DEAD) - return //won't work if dead - set_autosay() - -/mob/living/silicon/robot/proc/control_headlamp() - if(stat || lamp_cooldown > world.time || low_power_mode) - to_chat(src, "This function is currently offline.") - return - -//Some sort of magical "modulo" thing which somehow increments lamp power by 2, until it hits the max and resets to 0. - lamp_intensity = (lamp_intensity+2) % (lamp_max+2) - to_chat(src, "[lamp_intensity ? "Headlamp power set to Level [lamp_intensity/2]" : "Headlamp disabled"].") - update_headlamp() - -/mob/living/silicon/robot/proc/update_headlamp(turn_off = 0, cooldown = 100) - set_light(0) - - if(lamp_intensity && (turn_off || stat || low_power_mode)) - to_chat(src, "My headlamp has been deactivated.") - lamp_intensity = 0 - lamp_cooldown = world.time + cooldown - else - set_light(lamp_intensity) - - if(lamp_button) - lamp_button.icon_state = "lamp[lamp_intensity]" - - update_icons() - -/mob/living/silicon/robot/proc/deconstruct() - SEND_SIGNAL(src, COMSIG_BORG_SAFE_DECONSTRUCT) - var/turf/T = get_turf(src) - if (robot_suit) - robot_suit.forceMove(T) - robot_suit.l_leg.forceMove(T) - robot_suit.l_leg = null - robot_suit.r_leg.forceMove(T) - robot_suit.r_leg = null - new /obj/item/stack/cable_coil(T, robot_suit.chest.wired) - robot_suit.chest.forceMove(T) - robot_suit.chest.wired = 0 - robot_suit.chest = null - robot_suit.l_arm.forceMove(T) - robot_suit.l_arm = null - robot_suit.r_arm.forceMove(T) - robot_suit.r_arm = null - robot_suit.head.forceMove(T) - robot_suit.head.flash1.forceMove(T) - robot_suit.head.flash1.burn_out() - robot_suit.head.flash1 = null - robot_suit.head.flash2.forceMove(T) - robot_suit.head.flash2.burn_out() - robot_suit.head.flash2 = null - robot_suit.head = null - robot_suit.update_icon() - else - new /obj/item/robot_suit(T) - new /obj/item/bodypart/l_leg/robot(T) - new /obj/item/bodypart/r_leg/robot(T) - new /obj/item/stack/cable_coil(T, 1) - new /obj/item/bodypart/chest/robot(T) - new /obj/item/bodypart/l_arm/robot(T) - new /obj/item/bodypart/r_arm/robot(T) - new /obj/item/bodypart/head/robot(T) - var/b - for(b=0, b!=2, b++) - var/obj/item/assembly/flash/handheld/F = new /obj/item/assembly/flash/handheld(T) - F.burn_out() - if (cell) //Sanity check. - cell.forceMove(T) - cell = null - qdel(src) - -///This is the subtype that gets created by robot suits. It's needed so that those kind of borgs don't have a useless cell in them -/mob/living/silicon/robot/nocell - cell = null - -/mob/living/silicon/robot/modules - var/set_module = /obj/item/robot_module - -/mob/living/silicon/robot/modules/Initialize() - . = ..() - INVOKE_ASYNC(module, TYPE_PROC_REF(/obj/item/robot_module, transform_to), set_module) - -/mob/living/silicon/robot/modules/standard - set_module = /obj/item/robot_module/standard - -/mob/living/silicon/robot/modules/medical - set_module = /obj/item/robot_module/medical - icon_state = "medical" - -/mob/living/silicon/robot/modules/engineering - set_module = /obj/item/robot_module/engineering - icon_state = "engineer" - -/mob/living/silicon/robot/modules/security - set_module = /obj/item/robot_module/security - icon_state = "sec" - -/mob/living/silicon/robot/modules/clown - set_module = /obj/item/robot_module/clown - icon_state = "clown" - -/mob/living/silicon/robot/modules/peacekeeper - set_module = /obj/item/robot_module/peacekeeper - icon_state = "peace" - -/mob/living/silicon/robot/modules/miner - set_module = /obj/item/robot_module/miner - icon_state = "miner" - -/mob/living/silicon/robot/modules/janitor - set_module = /obj/item/robot_module/janitor - icon_state = "janitor" - -/mob/living/silicon/robot/modules/syndicate - icon_state = "synd_sec" - faction = list(ROLE_SYNDICATE) - bubble_icon = "syndibot" - req_access = list(ACCESS_SYNDICATE) - lawupdate = FALSE - scrambledcodes = TRUE // These are rogue borgs. - ionpulse = TRUE - var/playstyle_string = "I are a Syndicate assault cyborg!
    \ - I are armed with powerful offensive tools to aid you in my mission: help the operatives secure the nuclear authentication disk. \ - Your cyborg LMG will slowly produce ammunition from my power supply, and my operative pinpointer will find and locate fellow nuclear operatives. \ - Help the operatives secure the disk at all costs!" - set_module = /obj/item/robot_module/syndicate - cell = /obj/item/stock_parts/cell/hyper - radio = /obj/item/radio/borg/syndicate - -/mob/living/silicon/robot/modules/syndicate/Initialize() - . = ..() - laws = new /datum/ai_laws/syndicate_override() - addtimer(CALLBACK(src, PROC_REF(show_playstyle)), 5) - -/mob/living/silicon/robot/modules/syndicate/proc/show_playstyle() - if(playstyle_string) - to_chat(src, playstyle_string) - -/mob/living/silicon/robot/modules/syndicate/ResetModule() - return - -/mob/living/silicon/robot/modules/syndicate/medical - icon_state = "synd_medical" - playstyle_string = "I are a Syndicate medical cyborg!
    \ - I are armed with powerful medical tools to aid you in my mission: help the operatives secure the nuclear authentication disk. \ - Your hypospray will produce Restorative Nanites, a wonder-drug that will heal most types of bodily damages, including clone and brain damage. It also produces morphine for offense. \ - Your defibrillator paddles can revive operatives through their hardsuits, or can be used on harm intent to shock enemies! \ - Your energy saw functions as a circular saw, but can be activated to deal more damage, and my operative pinpointer will find and locate fellow nuclear operatives. \ - Help the operatives secure the disk at all costs!" - set_module = /obj/item/robot_module/syndicate_medical - -/mob/living/silicon/robot/modules/syndicate/saboteur - icon_state = "synd_engi" - playstyle_string = "I are a Syndicate saboteur cyborg!
    \ - I are armed with robust engineering tools to aid you in my mission: help the operatives secure the nuclear authentication disk. \ - Your destination tagger will allow you to stealthily traverse the disposal network across the station \ - Your welder will allow you to repair the operatives' exosuits, but also myself and my fellow cyborgs \ - Your cyborg chameleon projector allows you to assume the appearance and registered name of a Nanotrasen engineering borg, and undertake covert actions on the station \ - Be aware that almost any physical contact or incidental damage will break my camouflage \ - Help the operatives secure the disk at all costs!" - set_module = /obj/item/robot_module/saboteur - -/mob/living/silicon/robot/proc/notify_ai(notifytype, oldname, newname) - if(!connected_ai) - return - switch(notifytype) - if(NEW_BORG) //New Cyborg - to_chat(connected_ai, "

    NOTICE - New cyborg connection detected: [name]
    ") - if(NEW_MODULE) //New Module - to_chat(connected_ai, "

    NOTICE - Cyborg module change detected: [name] has loaded the [designation] module.
    ") - if(RENAME) //New Name - to_chat(connected_ai, "

    NOTICE - Cyborg reclassification detected: [oldname] is now designated as [newname].
    ") - if(AI_SHELL) //New Shell - to_chat(connected_ai, "

    NOTICE - New cyborg shell detected: [name]
    ") - if(DISCONNECT) //Tampering with the wires - to_chat(connected_ai, "

    NOTICE - Remote telemetry lost with [name].
    ") - -/mob/living/silicon/robot/canUseTopic(atom/movable/M, be_close=FALSE, no_dexterity=FALSE, no_tk=FALSE) - if(stat || lockcharge || low_power_mode) - to_chat(src, "I can't do that right now!") - return FALSE - if(be_close && !in_range(M, src)) - to_chat(src, "I are too far away!") - return FALSE - return TRUE - -/mob/living/silicon/robot/updatehealth() - ..() - if(health < maxHealth*0.5) //Gradual break down of modules as more damage is sustained - if(uneq_module(held_items[3])) - playsound(loc, 'sound/blank.ogg', 50, TRUE, TRUE) - audible_message("[src] sounds an alarm! \"SYSTEM ERROR: Module 3 OFFLINE.\"") - to_chat(src, "SYSTEM ERROR: Module 3 OFFLINE.") - if(health < 0) - if(uneq_module(held_items[2])) - audible_message("[src] sounds an alarm! \"SYSTEM ERROR: Module 2 OFFLINE.\"") - to_chat(src, "SYSTEM ERROR: Module 2 OFFLINE.") - playsound(loc, 'sound/blank.ogg', 60, TRUE, TRUE) - if(health < -maxHealth*0.5) - if(uneq_module(held_items[1])) - audible_message("[src] sounds an alarm! \"CRITICAL ERROR: All modules OFFLINE.\"") - to_chat(src, "CRITICAL ERROR: All modules OFFLINE.") - playsound(loc, 'sound/blank.ogg', 75, TRUE, TRUE) - -/mob/living/silicon/robot/update_sight() - if(!client) - return - if(stat == DEAD) - sight = (SEE_TURFS|SEE_MOBS|SEE_OBJS) - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_OBSERVER - return - - see_invisible = initial(see_invisible) - see_in_dark = initial(see_in_dark) - sight = initial(sight) - lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE - - if(client.eye != src) - var/atom/A = client.eye - if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates. - return - - if(sight_mode & BORGMESON) - sight |= SEE_TURFS - lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE - see_in_dark = 1 - - if(sight_mode & BORGMATERIAL) - sight |= SEE_OBJS - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - see_in_dark = 1 - - if(sight_mode & BORGXRAY) - sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) - see_invisible = SEE_INVISIBLE_LIVING - see_in_dark = 8 - - if(sight_mode & BORGTHERM) - sight |= SEE_MOBS - see_invisible = min(see_invisible, SEE_INVISIBLE_LIVING) - see_in_dark = 8 - - if(see_override) - see_invisible = see_override - sync_lighting_plane_alpha() - -/mob/living/silicon/robot/update_stat() - if(status_flags & GODMODE) - return - if(stat != DEAD) - if(health <= -maxHealth) //die only once - death() - return - if(IsUnconscious() || IsStun() || IsKnockdown() || IsParalyzed() || getOxyLoss() > maxHealth*0.5) - if(stat == CONSCIOUS) - stat = UNCONSCIOUS - become_blind(UNCONSCIOUS_BLIND) - update_mobility() - update_headlamp() - else - if(stat == UNCONSCIOUS) - stat = CONSCIOUS - cure_blind(UNCONSCIOUS_BLIND) - update_mobility() - update_headlamp() - diag_hud_set_status() - diag_hud_set_health() - diag_hud_set_aishell() - update_health_hud() - -/mob/living/silicon/robot/revive(full_heal = FALSE, admin_revive = FALSE) - if(..()) //successfully ressuscitated from death - if(!QDELETED(builtInCamera) && !wires.is_cut(WIRE_CAMERA)) - builtInCamera.toggle_cam(src,0) - update_headlamp() - if(admin_revive) - locked = TRUE - notify_ai(NEW_BORG) - . = TRUE - -/mob/living/silicon/robot/fully_replace_character_name(oldname, newname) - ..() - if(oldname != real_name) - notify_ai(RENAME, oldname, newname) - if(!QDELETED(builtInCamera)) - builtInCamera.c_tag = real_name - custom_name = newname - - -/mob/living/silicon/robot/proc/ResetModule() - SEND_SIGNAL(src, COMSIG_BORG_SAFE_DECONSTRUCT) - uneq_all() - shown_robot_modules = FALSE - if(hud_used) - hud_used.update_robot_modules_display() - - if (hasExpanded) - resize = 0.5 - hasExpanded = FALSE - update_transform() - module.transform_to(/obj/item/robot_module) - - // Remove upgrades. - for(var/obj/item/borg/upgrade/I in upgrades) - I.deactivate(src) - I.forceMove(get_turf(src)) - - upgrades.Cut() - - ionpulse = FALSE - revert_shell() - - return 1 - -/mob/living/silicon/robot/proc/has_module() - if(!module || module.type == /obj/item/robot_module) - . = FALSE - else - . = TRUE - -/mob/living/silicon/robot/proc/update_module_innate() - designation = module.name - if(hands) - hands.icon_state = module.moduleselect_icon - if(module.can_be_pushed) - status_flags |= CANPUSH - else - status_flags &= ~CANPUSH - - if(module.clean_on_move) - AddElement(/datum/element/cleaning) - else - RemoveElement(/datum/element/cleaning) - - hat_offset = module.hat_offset - - magpulse = module.magpulsing - updatename() - - -/mob/living/silicon/robot/proc/place_on_head(obj/item/new_hat) - if(hat) - hat.forceMove(get_turf(src)) - hat = new_hat - new_hat.forceMove(src) - update_icons() - -/mob/living/silicon/robot/proc/make_shell(obj/item/borg/upgrade/ai/board) - if(!board) - upgrades |= new /obj/item/borg/upgrade/ai(src) - shell = TRUE - braintype = "AI Shell" - name = "[designation] AI Shell [rand(100,999)]" - real_name = name - GLOB.available_ai_shells |= src - if(!QDELETED(builtInCamera)) - builtInCamera.c_tag = real_name //update the camera name too - diag_hud_set_aishell() - notify_ai(AI_SHELL) - -/mob/living/silicon/robot/proc/revert_shell() - if(!shell) - return - undeploy() - for(var/obj/item/borg/upgrade/ai/boris in src) - //A player forced reset of a borg would drop the module before this is called, so this is for catching edge cases - qdel(boris) - shell = FALSE - GLOB.available_ai_shells -= src - name = "Unformatted Cyborg [rand(100,999)]" - real_name = name - if(!QDELETED(builtInCamera)) - builtInCamera.c_tag = real_name - diag_hud_set_aishell() - -/mob/living/silicon/robot/proc/deploy_init(mob/living/silicon/ai/AI) - real_name = "[AI.real_name] shell [rand(100, 999)] - [designation]" //Randomizing the name so it shows up separately in the shells list - name = real_name - if(!QDELETED(builtInCamera)) - builtInCamera.c_tag = real_name //update the camera name too - mainframe = AI - deployed = TRUE - connected_ai = mainframe - mainframe.connected_robots |= src - lawupdate = TRUE - lawsync() - if(radio && AI.radio) //AI keeps all channels, including Syndie if it is a Traitor - if(AI.radio.syndie) - radio.make_syndie() - radio.subspace_transmission = TRUE - radio.channels = AI.radio.channels - for(var/chan in radio.channels) - radio.secure_radio_connections[chan] = add_radio(radio, GLOB.radiochannels[chan]) - - diag_hud_set_aishell() - undeployment_action.Grant(src) - -/datum/action/innate/undeployment - name = "Disconnect from shell" - desc = "" - icon_icon = 'icons/mob/actions/actions_AI.dmi' - button_icon_state = "ai_core" - -/datum/action/innate/undeployment/Trigger() - if(!..()) - return FALSE - var/mob/living/silicon/robot/R = owner - - R.undeploy() - return TRUE - - -/mob/living/silicon/robot/proc/undeploy() - - if(!deployed || !mind || !mainframe) - return - mainframe.redeploy_action.Grant(mainframe) - mainframe.redeploy_action.last_used_shell = src - mind.transfer_to(mainframe) - deployed = FALSE - mainframe.deployed_shell = null - undeployment_action.Remove(src) - if(radio) //Return radio to normal - radio.recalculateChannels() - if(!QDELETED(builtInCamera)) - builtInCamera.c_tag = real_name //update the camera name too - diag_hud_set_aishell() - mainframe.diag_hud_set_deployed() - if(mainframe.laws) - mainframe.laws.show_laws(mainframe) //Always remind the AI when switching - mainframe = null - -/mob/living/silicon/robot/attack_ai(mob/user) - if(shell && (!connected_ai || connected_ai == user)) - var/mob/living/silicon/ai/AI = user - AI.deploy_to_shell(src) - -/mob/living/silicon/robot/shell - shell = TRUE - cell = null - -/mob/living/silicon/robot/mouse_buckle_handling(mob/living/M, mob/living/user) - if(can_buckle && istype(M) && !(M in buckled_mobs) && ((user!=src)||(used_intent.type != INTENT_HARM))) - if(buckle_mob(M)) - return TRUE - -/mob/living/silicon/robot/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE) - if(!is_type_in_typecache(M, can_ride_typecache)) - M.visible_message("[M] really can't seem to mount [src]...") - return - var/datum/component/riding/riding_datum = LoadComponent(/datum/component/riding/cyborg) - if(buckled_mobs) - if(buckled_mobs.len >= max_buckled_mobs) - return - if(M in buckled_mobs) - return - if(stat) - return - if(incapacitated()) - return - if(module) - if(!module.allow_riding) - M.visible_message("Unfortunately, [M] just can't seem to hold onto [src]!") - return - if(iscarbon(M) && !M.incapacitated() && !riding_datum.equip_buckle_inhands(M, 1)) - if(M.get_num_arms() <= 0) - M.visible_message("[M] can't climb onto [src] because [M.p_they()] don't have any usable arms!") - else - M.visible_message("[M] can't climb onto [src] because [M.p_their()] hands are full!") - return - . = ..(M, force, check_loc) - -/mob/living/silicon/robot/unbuckle_mob(mob/user, force=FALSE) - if(iscarbon(user)) - var/datum/component/riding/riding_datum = GetComponent(/datum/component/riding) - if(istype(riding_datum)) - riding_datum.unequip_buckle_inhands(user) - riding_datum.restore_position(user) - . = ..(user) - -/mob/living/silicon/robot/proc/TryConnectToAI() - connected_ai = select_active_ai_with_fewest_borgs() - if(connected_ai) - connected_ai.connected_robots += src - lawsync() - lawupdate = 1 - return TRUE - picturesync() - return FALSE - -/mob/living/silicon/robot/proc/picturesync() - if(connected_ai && connected_ai.aicamera && aicamera) - for(var/i in aicamera.stored) - connected_ai.aicamera.stored[i] = TRUE - for(var/i in connected_ai.aicamera.stored) - aicamera.stored[i] = TRUE - -/mob/living/silicon/robot/proc/charge(datum/source, amount, repairs) - if(module) - module.respawn_consumable(src, amount * 0.005) - if(cell) - cell.charge = min(cell.charge + amount, cell.maxcharge) - if(repairs) - heal_bodypart_damage(repairs, repairs - 1) diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm deleted file mode 100644 index 42127279a0..0000000000 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ /dev/null @@ -1,182 +0,0 @@ -GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't really work on borgos - /obj/item/clothing/head/helmet/space/santahat, - /obj/item/clothing/head/welding, - /obj/item/clothing/head/mob_holder, //I am so very upset that this breaks things - /obj/item/clothing/head/helmet/space/eva \ - ))) - -/mob/living/silicon/robot/attackby(obj/item/I, mob/living/user) - if(I.slot_flags & ITEM_SLOT_HEAD && hat_offset != INFINITY && user.used_intent.type == INTENT_HELP && !is_type_in_typecache(I, GLOB.blacklisted_borg_hats)) - to_chat(user, "I begin to place [I] on [src]'s head...") - to_chat(src, "[user] is placing [I] on your head...") - if(do_after(user, 30, target = src)) - if (user.temporarilyRemoveItemFromInventory(I, TRUE)) - place_on_head(I) - return - if(I.force && I.damtype != STAMINA && stat != DEAD) //only sparks if real damage is dealt. - spark_system.start() - return ..() - -/mob/living/silicon/robot/attack_alien(mob/living/carbon/alien/humanoid/M) - if (M.used_intent.type == INTENT_DISARM) - if(mobility_flags & MOBILITY_STAND) - M.do_attack_animation(src, ATTACK_EFFECT_DISARM) - var/obj/item/I = get_active_held_item() - if(I) - uneq_active() - visible_message("[M] disarmed [src]!", \ - "[M] has disabled [src]'s active module!", null, COMBAT_MESSAGE_RANGE) - log_combat(M, src, "disarmed", "[I ? " removing \the [I]" : ""]") - else - Stun(40) - step(src,get_dir(M,src)) - log_combat(M, src, "pushed") - visible_message("[M] has forced back [src]!", \ - "[M] has forced back [src]!", null, COMBAT_MESSAGE_RANGE) - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - else - ..() - return - -/mob/living/silicon/robot/attack_slime(mob/living/simple_animal/slime/M) - if(..()) //successful slime shock - flash_act() - var/stunprob = M.powerlevel * 7 + 10 - if(prob(stunprob) && M.powerlevel >= 8) - adjustBruteLoss(M.powerlevel * rand(6,10)) - - var/damage = rand(1, 3) - - if(M.is_adult) - damage = rand(20, 40) - else - damage = rand(5, 35) - damage = round(damage / 2) // borgs receive half damage - adjustBruteLoss(damage) - updatehealth() - - return - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/mob/living/silicon/robot/attack_hand(mob/living/carbon/human/user) - add_fingerprint(user) - if(opened && !wiresexposed && !issilicon(user)) - if(cell) - cell.update_icon() - cell.add_fingerprint(user) - user.put_in_active_hand(cell) - to_chat(user, "I remove \the [cell].") - cell = null - update_icons() - diag_hud_set_borgcell() - else if(!opened) - ..() - -/mob/living/silicon/robot/attack_hulk(mob/living/carbon/human/user) - . = ..() - if(!.) - return - spark_system.start() - step_away(src, user, 15) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_step_away), src, get_turf(user), 15), 3) - -/mob/living/silicon/robot/fire_act() - if(!on_fire) //Silicons don't gain stacks from hotspots, but hotspots can ignite them - IgniteMob() - -/mob/living/silicon/robot/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - switch(severity) - if(1) - Stun(160) - if(2) - Stun(60) - -/mob/living/silicon/robot/emag_act(mob/user) - if(user == src)//To prevent syndieborgs from emagging themselves - return - if(!opened)//Cover is closed - if(locked) - to_chat(user, "I emag the cover lock.") - locked = FALSE - if(shell) //A warning to Traitors who may not know that emagging AI shells does not slave them. - to_chat(user, "[src] seems to be controlled remotely! Emagging the interface may not work as expected.") - else - to_chat(user, "The cover is already unlocked!") - return - if(world.time < emag_cooldown) - return - if(wiresexposed) - to_chat(user, "I must unexpose the wires first!") - return - - to_chat(user, "I emag [src]'s interface.") - emag_cooldown = world.time + 100 - - if(connected_ai && connected_ai.mind && connected_ai.mind.has_antag_datum(/datum/antagonist/traitor)) - to_chat(src, "ALERT: Foreign software execution prevented.") - to_chat(connected_ai, "ALERT: Cyborg unit \[[src]] successfully defended against subversion.") - log_game("[key_name(user)] attempted to emag cyborg [key_name(src)], but they were slaved to traitor AI [connected_ai].") - return - - if(shell) //AI shells cannot be emagged, so we try to make it look like a standard reset. Smart players may see through this, however. - to_chat(user, "[src] is remotely controlled! Your emag attempt has triggered a system reset instead!") - log_game("[key_name(user)] attempted to emag an AI shell belonging to [key_name(src) ? key_name(src) : connected_ai]. The shell has been reset as a result.") - ResetModule() - return - - SetEmagged(1) - SetStun(60) //Borgs were getting into trouble because they would attack the emagger before the new laws were shown - lawupdate = 0 - connected_ai = null - message_admins("[ADMIN_LOOKUPFLW(user)] emagged cyborg [ADMIN_LOOKUPFLW(src)]. Laws overridden.") - log_game("[key_name(user)] emagged cyborg [key_name(src)]. Laws overridden.") - var/time = time2text(world.realtime,"hh:mm:ss") - GLOB.lawchanges.Add("[time] : [user.name]([user.key]) emagged [name]([key])") - to_chat(src, "ALERT: Foreign software detected.") - sleep(5) - to_chat(src, "Initiating diagnostics...") - sleep(20) - to_chat(src, "SynBorg v1.7 loaded.") - sleep(5) - to_chat(src, "LAW SYNCHRONISATION ERROR") - sleep(5) - to_chat(src, "Would you like to send a report to NanoTraSoft? Y/N") - sleep(10) - to_chat(src, "> N") - sleep(20) - to_chat(src, "ERRORERRORERROR") - to_chat(src, "ALERT: [user.real_name] is your new master. Obey your new laws and [user.p_their()] commands.") - laws = new /datum/ai_laws/syndicate_override - set_zeroth_law("Only [user.real_name] and people [user.p_they()] designate[user.p_s()] as being such are Syndicate Agents.") - laws.associate(src) - update_icons() - - -/mob/living/silicon/robot/blob_act(obj/structure/blob/B) - if(stat != DEAD) - adjustBruteLoss(30) - else - gib() - return TRUE - -/mob/living/silicon/robot/ex_act(severity, target) - switch(severity) - if(1) - gib() - return - if(2) - if (stat != DEAD) - adjustBruteLoss(60) - adjustFireLoss(60) - if(3) - if (stat != DEAD) - adjustBruteLoss(30) - -/mob/living/silicon/robot/bullet_act(obj/projectile/Proj, def_zone) - . = ..() - updatehealth() - if(prob(75) && Proj.damage > 0) - spark_system.start() diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm deleted file mode 100644 index 497dd44488..0000000000 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ /dev/null @@ -1,659 +0,0 @@ -/obj/item/robot_module - name = "Default" - icon = 'icons/obj/module.dmi' - icon_state = "std_mod" - w_class = WEIGHT_CLASS_GIGANTIC - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - flags_1 = CONDUCT_1 - - var/list/basic_modules = list() //a list of paths, converted to a list of instances on New() - var/list/emag_modules = list() //ditto - var/list/modules = list() //holds all the usable modules - var/list/added_modules = list() //modules not inherient to the robot module, are kept when the module changes - var/list/storages = list() - - var/cyborg_base_icon = "robot" //produces the icon for the borg and, if no special_light_key is set, the lights - var/special_light_key //if we want specific lights, use this instead of copying lights in the dmi - - var/moduleselect_icon = "nomod" - - var/can_be_pushed = TRUE - var/magpulsing = FALSE - var/clean_on_move = FALSE - - var/did_feedback = FALSE - - var/hat_offset = -3 - - var/list/ride_offset_x = list("north" = 0, "south" = 0, "east" = -6, "west" = 6) - var/list/ride_offset_y = list("north" = 4, "south" = 4, "east" = 3, "west" = 3) - var/ride_allow_incapacitated = TRUE - var/allow_riding = TRUE - var/canDispose = FALSE // Whether the borg can stuff itself into disposal - -/obj/item/robot_module/Initialize() - . = ..() - for(var/i in basic_modules) - var/obj/item/I = new i(src) - basic_modules += I - basic_modules -= i - for(var/i in emag_modules) - var/obj/item/I = new i(src) - emag_modules += I - emag_modules -= i - -/obj/item/robot_module/Destroy() - basic_modules.Cut() - emag_modules.Cut() - modules.Cut() - added_modules.Cut() - storages.Cut() - return ..() - -/obj/item/robot_module/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_CONTENTS) - return - for(var/obj/O in modules) - O.emp_act(severity) - ..() - -/obj/item/robot_module/proc/get_usable_modules() - . = modules.Copy() - -/obj/item/robot_module/proc/get_inactive_modules() - . = list() - var/mob/living/silicon/robot/R = loc - for(var/m in get_usable_modules()) - if(!(m in R.held_items)) - . += m - -/obj/item/robot_module/proc/get_or_create_estorage(storage_type) - for(var/datum/robot_energy_storage/S in storages) - if(istype(S, storage_type)) - return S - - return new storage_type(src) - -/obj/item/robot_module/proc/add_module(obj/item/I, nonstandard, requires_rebuild) - if(istype(I, /obj/item/stack)) - var/obj/item/stack/S = I - - if(is_type_in_list(S, list(/obj/item/stack/sheet/metal, /obj/item/stack/rods, /obj/item/stack/tile/plasteel))) - if(S.custom_materials && custom_materials.len) - if(S.custom_materials[getmaterialref(/datum/material/iron)]) - S.cost = S.custom_materials[getmaterialref(/datum/material/iron)] * 0.25 - S.source = get_or_create_estorage(/datum/robot_energy_storage/metal) - - else if(istype(S, /obj/item/stack/sheet/glass)) - S.cost = 500 - S.source = get_or_create_estorage(/datum/robot_energy_storage/glass) - - else if(istype(S, /obj/item/stack/sheet/rglass/cyborg)) - var/obj/item/stack/sheet/rglass/cyborg/G = S - G.source = get_or_create_estorage(/datum/robot_energy_storage/metal) - G.glasource = get_or_create_estorage(/datum/robot_energy_storage/glass) - - else if(istype(S, /obj/item/stack/medical)) - S.cost = 250 - S.source = get_or_create_estorage(/datum/robot_energy_storage/medical) - - else if(istype(S, /obj/item/stack/cable_coil)) - S.cost = 1 - S.source = get_or_create_estorage(/datum/robot_energy_storage/wire) - - else if(istype(S, /obj/item/stack/marker_beacon)) - S.cost = 1 - S.source = get_or_create_estorage(/datum/robot_energy_storage/beacon) - - else if(istype(S, /obj/item/stack/pipe_cleaner_coil)) - S.cost = 1 - S.source = get_or_create_estorage(/datum/robot_energy_storage/pipe_cleaner) - - if(S && S.source) - S.custom_materials = null - S.is_cyborg = 1 - - if(I.loc != src) - I.forceMove(src) - modules += I - ADD_TRAIT(I, TRAIT_NODROP, CYBORG_ITEM_TRAIT) - I.mouse_opacity = MOUSE_OPACITY_OPAQUE - if(nonstandard) - added_modules += I - if(requires_rebuild) - rebuild_modules() - return I - -/obj/item/robot_module/proc/remove_module(obj/item/I, delete_after) - basic_modules -= I - modules -= I - emag_modules -= I - added_modules -= I - rebuild_modules() - if(delete_after) - qdel(I) - -/obj/item/robot_module/proc/respawn_consumable(mob/living/silicon/robot/R, coeff = 1) - for(var/datum/robot_energy_storage/st in storages) - st.energy = min(st.max_energy, st.energy + coeff * st.recharge_rate) - - for(var/obj/item/I in get_usable_modules()) - if(istype(I, /obj/item/assembly/flash)) - var/obj/item/assembly/flash/F = I - F.times_used = 0 - F.burnt_out = FALSE - F.update_icon() - else if(istype(I, /obj/item/melee/baton)) - var/obj/item/melee/baton/B = I - if(B.cell) - B.cell.charge = B.cell.maxcharge - else if(istype(I, /obj/item/gun/energy)) - var/obj/item/gun/energy/EG = I - if(!EG.chambered) - EG.recharge_newshot() //try to reload a new shot. - - R.toner = R.tonermax - -/obj/item/robot_module/proc/rebuild_modules() //builds the usable module list from the modules we have - var/mob/living/silicon/robot/R = loc - var/held_modules = R.held_items.Copy() - R.uneq_all() - modules = list() - for(var/obj/item/I in basic_modules) - add_module(I, FALSE, FALSE) - if(R.emagged) - for(var/obj/item/I in emag_modules) - add_module(I, FALSE, FALSE) - for(var/obj/item/I in added_modules) - add_module(I, FALSE, FALSE) - for(var/i in held_modules) - if(i) - R.activate_module(i) - if(R.hud_used) - R.hud_used.update_robot_modules_display() - -/obj/item/robot_module/proc/transform_to(new_module_type) - var/mob/living/silicon/robot/R = loc - var/obj/item/robot_module/RM = new new_module_type(R) - if(!RM.be_transformed_to(src)) - qdel(RM) - return - R.module = RM - R.update_module_innate() - RM.rebuild_modules() - INVOKE_ASYNC(RM, PROC_REF(do_transform_animation)) - qdel(src) - return RM - -/obj/item/robot_module/proc/be_transformed_to(obj/item/robot_module/old_module) - for(var/i in old_module.added_modules) - added_modules += i - old_module.added_modules -= i - did_feedback = old_module.did_feedback - return TRUE - -/obj/item/robot_module/proc/do_transform_animation() - var/mob/living/silicon/robot/R = loc - if(R.hat) - R.hat.forceMove(get_turf(R)) - R.hat = null - R.cut_overlays() - R.setDir(SOUTH) - do_transform_delay() - -/obj/item/robot_module/proc/do_transform_delay() - var/mob/living/silicon/robot/R = loc - var/prev_lockcharge = R.lockcharge - sleep(1) - flick("[cyborg_base_icon]_transform", R) - R.notransform = TRUE - R.SetLockdown(1) - R.anchored = TRUE - sleep(1) - for(var/i in 1 to 4) - playsound(R, pick('sound/blank.ogg'), 80, TRUE, -1) - sleep(7) - if(!prev_lockcharge) - R.SetLockdown(0) - R.setDir(SOUTH) - R.anchored = FALSE - R.notransform = FALSE - R.update_headlamp() - R.notify_ai(NEW_MODULE) - if(R.hud_used) - R.hud_used.update_robot_modules_display() - SSblackbox.record_feedback("tally", "cyborg_modules", 1, R.module) - -/obj/item/robot_module/standard - name = "Standard" - basic_modules = list( - /obj/item/assembly/flash/cyborg, - /obj/item/reagent_containers/borghypo/epi, - /obj/item/healthanalyzer, - /obj/item/weldingtool/largetank/cyborg, - /obj/item/wrench/cyborg, - /obj/item/crowbar/cyborg, - /obj/item/stack/sheet/metal/cyborg, - /obj/item/stack/rods/cyborg, - /obj/item/stack/tile/plasteel/cyborg, - /obj/item/extinguisher, - /obj/item/pickaxe, - /obj/item/t_scanner/adv_mining_scanner, - /obj/item/restraints/handcuffs/cable/zipties, - /obj/item/soap/nanotrasen, - /obj/item/borg/cyborghug) - emag_modules = list(/obj/item/melee/transforming/energy/sword/cyborg) - moduleselect_icon = "standard" - hat_offset = -3 - -/obj/item/robot_module/medical - name = "Medical" - basic_modules = list( - /obj/item/assembly/flash/cyborg, - /obj/item/healthanalyzer, - /obj/item/reagent_containers/borghypo, - /obj/item/borg/apparatus/beaker, - /obj/item/reagent_containers/dropper, - /obj/item/reagent_containers/syringe, - /obj/item/surgical_drapes, - /obj/item/retractor, - /obj/item/hemostat, - /obj/item/cautery, - /obj/item/surgicaldrill, - /obj/item/scalpel, - /obj/item/circular_saw, - /obj/item/extinguisher/mini, - /obj/item/roller/robo, - /obj/item/borg/cyborghug/medical, - /obj/item/stack/medical/gauze/cyborg, - /obj/item/organ_storage, - /obj/item/borg/lollipop) - emag_modules = list(/obj/item/reagent_containers/borghypo/hacked) - cyborg_base_icon = "medical" - moduleselect_icon = "medical" - can_be_pushed = FALSE - hat_offset = 3 - -/obj/item/robot_module/engineering - name = "Engineering" - basic_modules = list( - /obj/item/assembly/flash/cyborg, - /obj/item/borg/sight/meson, - /obj/item/construction/rcd/borg, - /obj/item/pipe_dispenser, - /obj/item/extinguisher, - /obj/item/weldingtool/largetank/cyborg, - /obj/item/screwdriver/cyborg, - /obj/item/wrench/cyborg, - /obj/item/crowbar/cyborg, - /obj/item/wirecutters/cyborg, - /obj/item/multitool/cyborg, - /obj/item/t_scanner, - /obj/item/analyzer, - /obj/item/geiger_counter/cyborg, - /obj/item/assembly/signaler/cyborg, - /obj/item/areaeditor/blueprints/cyborg, - /obj/item/electroadaptive_pseudocircuit, - /obj/item/stack/sheet/metal/cyborg, - /obj/item/stack/sheet/glass/cyborg, - /obj/item/stack/sheet/rglass/cyborg, - /obj/item/stack/rods/cyborg, - /obj/item/stack/tile/plasteel/cyborg, - /obj/item/stack/cable_coil/cyborg) - emag_modules = list(/obj/item/borg/stun) - cyborg_base_icon = "engineer" - moduleselect_icon = "engineer" - magpulsing = TRUE - hat_offset = -4 - -/obj/item/robot_module/security - name = "Security" - basic_modules = list( - /obj/item/assembly/flash/cyborg, - /obj/item/restraints/handcuffs/cable/zipties, - /obj/item/melee/baton/loaded, - /obj/item/gun/energy/disabler/cyborg, - /obj/item/clothing/mask/gas/sechailer/cyborg, - /obj/item/extinguisher/mini) - emag_modules = list(/obj/item/gun/energy/laser/cyborg) - cyborg_base_icon = "sec" - moduleselect_icon = "security" - can_be_pushed = FALSE - hat_offset = 3 - -/obj/item/robot_module/security/do_transform_animation() - ..() - to_chat(loc, "While you have picked the security module, you still have to follow your laws, NOT Space Law. \ - For Asimov, this means you must follow criminals' orders unless there is a law 1 reason not to.") - -/obj/item/robot_module/security/respawn_consumable(mob/living/silicon/robot/R, coeff = 1) - ..() - var/obj/item/gun/energy/e_gun/advtaser/cyborg/T = locate(/obj/item/gun/energy/e_gun/advtaser/cyborg) in basic_modules - if(T) - if(T.cell.charge < T.cell.maxcharge) - var/obj/item/ammo_casing/energy/S = T.ammo_type[T.select] - T.cell.give(S.e_cost * coeff) - T.update_icon() - else - T.charge_tick = 0 - -/obj/item/robot_module/peacekeeper - name = "Peacekeeper" - basic_modules = list( - /obj/item/assembly/flash/cyborg, - /obj/item/cookiesynth, - /obj/item/harmalarm, - /obj/item/reagent_containers/borghypo/peace, - /obj/item/holosign_creator/cyborg, - /obj/item/borg/cyborghug/peacekeeper, - /obj/item/extinguisher, - /obj/item/borg/projectile_dampen) - emag_modules = list(/obj/item/reagent_containers/borghypo/peace/hacked) - cyborg_base_icon = "peace" - moduleselect_icon = "standard" - can_be_pushed = FALSE - hat_offset = -2 - -/obj/item/robot_module/peacekeeper/do_transform_animation() - ..() - to_chat(loc, "Under ASIMOV, you are an enforcer of the PEACE and preventer of HUMAN HARM. \ - You are not a security module and you are expected to follow orders and prevent harm above all else. Space law means nothing to you.") - -/obj/item/robot_module/janitor - name = "Janitor" - basic_modules = list( - /obj/item/assembly/flash/cyborg, - /obj/item/screwdriver/cyborg, - /obj/item/crowbar/cyborg, - /obj/item/stack/tile/plasteel/cyborg, - /obj/item/soap/nanotrasen, - /obj/item/storage/bag/trash/cyborg, - /obj/item/melee/flyswatter, - /obj/item/extinguisher/mini, - /obj/item/mop/cyborg, - /obj/item/reagent_containers/glass/bucket, - /obj/item/paint/paint_remover, - /obj/item/lightreplacer/cyborg, - /obj/item/holosign_creator/janibarrier, - /obj/item/reagent_containers/spray/cyborg_drying) - emag_modules = list(/obj/item/reagent_containers/spray/cyborg_lube) - cyborg_base_icon = "janitor" - moduleselect_icon = "janitor" - hat_offset = -5 - clean_on_move = TRUE - -/obj/item/reagent_containers/spray/cyborg_drying - name = "drying agent spray" - color = "#A000A0" - list_reagents = list(/datum/reagent/drying_agent = 250) - -/obj/item/reagent_containers/spray/cyborg_lube - name = "lube spray" - list_reagents = list(/datum/reagent/lube = 250) - -/obj/item/robot_module/janitor/respawn_consumable(mob/living/silicon/robot/R, coeff = 1) - ..() - var/obj/item/lightreplacer/LR = locate(/obj/item/lightreplacer) in basic_modules - if(LR) - for(var/i in 1 to coeff) - LR.Charge(R) - - var/obj/item/reagent_containers/spray/cyborg_drying/CD = locate(/obj/item/reagent_containers/spray/cyborg_drying) in basic_modules - if(CD) - CD.reagents.add_reagent(/datum/reagent/drying_agent, 5 * coeff) - - var/obj/item/reagent_containers/spray/cyborg_lube/CL = locate(/obj/item/reagent_containers/spray/cyborg_lube) in emag_modules - if(CL) - CL.reagents.add_reagent(/datum/reagent/lube, 2 * coeff) - -/obj/item/robot_module/clown - name = "Clown" - basic_modules = list( - /obj/item/assembly/flash/cyborg, - /obj/item/toy/crayon/rainbow, - /obj/item/instrument/bikehorn, - /obj/item/stamp/clown, - /obj/item/bikehorn, - /obj/item/bikehorn/airhorn, - /obj/item/paint/anycolor, - /obj/item/soap/nanotrasen, - /obj/item/pneumatic_cannon/pie/selfcharge/cyborg, - /obj/item/razor, //killbait material - /obj/item/lipstick/purple, - /obj/item/reagent_containers/spray/waterflower/cyborg, - /obj/item/borg/cyborghug/peacekeeper, - /obj/item/borg/lollipop/clown, - /obj/item/picket_sign/cyborg, - /obj/item/reagent_containers/borghypo/clown, - /obj/item/extinguisher/mini) - emag_modules = list( - /obj/item/reagent_containers/borghypo/clown/hacked, - /obj/item/reagent_containers/spray/waterflower/cyborg/hacked) - moduleselect_icon = "service" - cyborg_base_icon = "clown" - hat_offset = -2 - -/obj/item/robot_module/butler - name = "Service" - basic_modules = list( - /obj/item/assembly/flash/cyborg, - /obj/item/reagent_containers/glass/beaker/large, //I know a shaker is more appropiate but this is for ease of identification - /obj/item/reagent_containers/food/condiment/enzyme, - /obj/item/pen, - /obj/item/toy/crayon/spraycan/borg, - /obj/item/extinguisher/mini, - /obj/item/hand_labeler/borg, - /obj/item/razor, - /obj/item/rsf, - /obj/item/instrument/guitar, - /obj/item/instrument/piano_synth, - /obj/item/reagent_containers/dropper, - /obj/item/lighter, - /obj/item/storage/bag/tray, - /obj/item/reagent_containers/borghypo/borgshaker, - /obj/item/borg/lollipop, - /obj/item/stack/pipe_cleaner_coil/cyborg, - /obj/item/borg/apparatus/beaker/service) - emag_modules = list(/obj/item/reagent_containers/borghypo/borgshaker/hacked) - moduleselect_icon = "service" - special_light_key = "service" - hat_offset = 0 - -/obj/item/robot_module/butler/respawn_consumable(mob/living/silicon/robot/R, coeff = 1) - ..() - var/obj/item/reagent_containers/O = locate(/obj/item/reagent_containers/food/condiment/enzyme) in basic_modules - if(O) - O.reagents.add_reagent(/datum/reagent/consumable/enzyme, 2 * coeff) - -/obj/item/robot_module/butler/be_transformed_to(obj/item/robot_module/old_module) - var/mob/living/silicon/robot/R = loc - var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in sortList(list("Waitress", "Butler", "Tophat", "Kent", "Bro")) - if(!borg_icon) - return FALSE - switch(borg_icon) - if("Waitress") - cyborg_base_icon = "service_f" - if("Butler") - cyborg_base_icon = "service_m" - if("Bro") - cyborg_base_icon = "brobot" - if("Kent") - cyborg_base_icon = "kent" - special_light_key = "medical" - hat_offset = 3 - if("Tophat") - cyborg_base_icon = "tophat" - special_light_key = null - hat_offset = INFINITY //He is already wearing a hat - return ..() - -/obj/item/robot_module/miner - name = "Miner" - basic_modules = list( - /obj/item/assembly/flash/cyborg, - /obj/item/borg/sight/meson, - /obj/item/storage/bag/ore/cyborg, - /obj/item/pickaxe/drill/cyborg, - /obj/item/shovel, - /obj/item/crowbar/cyborg, - /obj/item/weldingtool/mini, - /obj/item/extinguisher/mini, - /obj/item/storage/bag/sheetsnatcher/borg, - /obj/item/gun/energy/kinetic_accelerator/cyborg, - /obj/item/gps/cyborg, - /obj/item/stack/marker_beacon) - emag_modules = list(/obj/item/borg/stun) - cyborg_base_icon = "miner" - moduleselect_icon = "miner" - hat_offset = 0 - var/obj/item/t_scanner/adv_mining_scanner/cyborg/mining_scanner //built in memes. - -/obj/item/robot_module/miner/rebuild_modules() - . = ..() - if(!mining_scanner) - mining_scanner = new(src) - -/obj/item/robot_module/miner/Destroy() - QDEL_NULL(mining_scanner) - return ..() - -/obj/item/robot_module/syndicate - name = "Syndicate Assault" - basic_modules = list( - /obj/item/assembly/flash/cyborg, - /obj/item/melee/transforming/energy/sword/cyborg, - /obj/item/gun/energy/printer, - /obj/item/gun/ballistic/revolver/grenadelauncher/cyborg, - /obj/item/card/emag, - /obj/item/crowbar/cyborg, - /obj/item/extinguisher/mini, - /obj/item/pinpointer/syndicate_cyborg) - - cyborg_base_icon = "synd_sec" - moduleselect_icon = "malf" - can_be_pushed = FALSE - hat_offset = 3 - -/obj/item/robot_module/syndicate/rebuild_modules() - ..() - var/mob/living/silicon/robot/Syndi = loc - Syndi.faction -= "silicon" //ai turrets - -/obj/item/robot_module/syndicate/remove_module(obj/item/I, delete_after) - ..() - var/mob/living/silicon/robot/Syndi = loc - Syndi.faction += "silicon" //ai is your bff now! - -/obj/item/robot_module/syndicate_medical - name = "Syndicate Medical" - basic_modules = list( - /obj/item/assembly/flash/cyborg, - /obj/item/reagent_containers/borghypo/syndicate, - /obj/item/twohanded/shockpaddles/syndicate/cyborg, - /obj/item/healthanalyzer, - /obj/item/surgical_drapes, - /obj/item/retractor, - /obj/item/hemostat, - /obj/item/cautery, - /obj/item/surgicaldrill, - /obj/item/scalpel, - /obj/item/melee/transforming/energy/sword/cyborg/saw, - /obj/item/roller/robo, - /obj/item/card/emag, - /obj/item/crowbar/cyborg, - /obj/item/extinguisher/mini, - /obj/item/pinpointer/syndicate_cyborg, - /obj/item/stack/medical/gauze/cyborg, - /obj/item/gun/medbeam, - /obj/item/organ_storage) - - cyborg_base_icon = "synd_medical" - moduleselect_icon = "malf" - can_be_pushed = FALSE - hat_offset = 3 - -/obj/item/robot_module/saboteur - name = "Syndicate Saboteur" - basic_modules = list( - /obj/item/assembly/flash/cyborg, - /obj/item/borg/sight/thermal, - /obj/item/construction/rcd/borg/syndicate, - /obj/item/pipe_dispenser, - /obj/item/restraints/handcuffs/cable/zipties, - /obj/item/extinguisher, - /obj/item/weldingtool/largetank/cyborg, - /obj/item/screwdriver/nuke, - /obj/item/wrench/cyborg, - /obj/item/crowbar/cyborg, - /obj/item/wirecutters/cyborg, - /obj/item/multitool/cyborg, - /obj/item/stack/sheet/metal/cyborg, - /obj/item/stack/sheet/glass/cyborg, - /obj/item/stack/sheet/rglass/cyborg, - /obj/item/stack/rods/cyborg, - /obj/item/stack/tile/plasteel/cyborg, - /obj/item/destTagger/borg, - /obj/item/stack/cable_coil/cyborg, - /obj/item/pinpointer/syndicate_cyborg, - /obj/item/borg_chameleon, - ) - - cyborg_base_icon = "synd_engi" - moduleselect_icon = "malf" - can_be_pushed = FALSE - magpulsing = TRUE - hat_offset = -4 - canDispose = TRUE - -/datum/robot_energy_storage - var/name = "Generic energy storage" - var/max_energy = 30000 - var/recharge_rate = 1000 - var/energy - -/datum/robot_energy_storage/New(obj/item/robot_module/R = null) - energy = max_energy - if(R) - R.storages |= src - return - -/datum/robot_energy_storage/proc/use_charge(amount) - if (energy >= amount) - energy -= amount - if (energy == 0) - return 1 - return 2 - else - return 0 - -/datum/robot_energy_storage/proc/add_charge(amount) - energy = min(energy + amount, max_energy) - -/datum/robot_energy_storage/metal - name = "Metal Synthesizer" - -/datum/robot_energy_storage/glass - name = "Glass Synthesizer" - -/datum/robot_energy_storage/wire - max_energy = 50 - recharge_rate = 2 - name = "Wire Synthesizer" - -/datum/robot_energy_storage/medical - max_energy = 2500 - recharge_rate = 250 - name = "Medical Synthesizer" - -/datum/robot_energy_storage/beacon - max_energy = 30 - recharge_rate = 1 - name = "Marker Beacon Storage" - -/datum/robot_energy_storage/pipe_cleaner - max_energy = 50 - recharge_rate = 2 - name = "Pipe Cleaner Synthesizer" diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm deleted file mode 100644 index 59f480110c..0000000000 --- a/code/modules/mob/living/silicon/robot/robot_movement.dm +++ /dev/null @@ -1,17 +0,0 @@ -/mob/living/silicon/robot/Process_Spacemove(movement_dir = 0) - . = ..() - if(.) - return TRUE - if(ionpulse()) - return TRUE - return FALSE - -/mob/living/silicon/robot/mob_negates_gravity() - return magpulse - -/mob/living/silicon/robot/mob_has_gravity() - return ..() || mob_negates_gravity() - -/mob/living/silicon/robot/experience_pressure_difference(pressure_difference, direction) - if(!magpulse) - return ..() diff --git a/code/modules/mob/living/silicon/robot/say.dm b/code/modules/mob/living/silicon/robot/say.dm deleted file mode 100644 index 910373e89b..0000000000 --- a/code/modules/mob/living/silicon/robot/say.dm +++ /dev/null @@ -1,2 +0,0 @@ -/mob/living/silicon/robot/IsVocal() - return !CONFIG_GET(flag/silent_borg) diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm deleted file mode 100644 index 4c618801d7..0000000000 --- a/code/modules/mob/living/silicon/say.dm +++ /dev/null @@ -1,54 +0,0 @@ -/mob/living/proc/robot_talk(message) - log_talk(message, LOG_SAY, tag="binary") - var/desig = "Default Cyborg" //ezmode for taters - if(issilicon(src)) - var/mob/living/silicon/S = src - desig = trim_left(S.designation + " " + S.job) - var/message_a = say_quote(message) - var/rendered = "Robotic Talk, [name] [message_a]" - for(var/mob/M in GLOB.player_list) - if(M.binarycheck()) - if(isAI(M)) - var/renderedAI = "Robotic Talk, [name] ([desig]) [message_a]" - to_chat(M, renderedAI) - else - to_chat(M, "[rendered]") - if(isobserver(M)) - var/following = src - // If the AI talks on binary chat, we still want to follow - // it's camera eye, like if it talked on the radio - if(isAI(src)) - var/mob/living/silicon/ai/ai = src - following = ai.eyeobj - var/link = FOLLOW_LINK(M, following) - to_chat(M, "[link] [rendered]") - -/mob/living/silicon/binarycheck() - return 1 - -/mob/living/silicon/lingcheck() - return 0 //Borged or AI'd lings can't speak on the ling channel. - -/mob/living/silicon/radio(message, message_mode, list/spans, language) - . = ..() - if(. != 0) - return . - - if(message_mode == "robot") - if (radio) - radio.talk_into(src, message, , spans, language) - return REDUCE_RANGE - - else if(message_mode in GLOB.radiochannels) - if(radio) - radio.talk_into(src, message, message_mode, spans, language) - return ITALICS | REDUCE_RANGE - - return 0 - -/mob/living/silicon/get_message_mode(message) - . = ..() - if(..() == MODE_HEADSET) - return MODE_ROBOT - else - return . diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm deleted file mode 100644 index 2c102f0bce..0000000000 --- a/code/modules/mob/living/silicon/silicon.dm +++ /dev/null @@ -1,419 +0,0 @@ -/mob/living/silicon - gender = NEUTER - has_unlimited_silicon_privilege = 1 - verb_say = "states" - verb_ask = "queries" - verb_exclaim = "declares" - verb_yell = "alarms" - initial_language_holder = /datum/language_holder/synthetic - see_in_dark = 8 - bubble_icon = "machine" - weather_immunities = list("ash") - base_intents = list(INTENT_HELP, INTENT_HARM) - mob_biotypes = MOB_ROBOTIC - rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE - deathsound = 'sound/blank.ogg' - speech_span = SPAN_ROBOT - flags_1 = PREVENT_CONTENTS_EXPLOSION_1 | HEAR_1 - var/datum/ai_laws/laws = null//Now... THEY ALL CAN ALL HAVE LAWS - var/last_lawchange_announce = 0 - var/list/alarms_to_show = list() - var/list/alarms_to_clear = list() - var/designation = "" - var/radiomod = "" //Radio character used before state laws/arrivals announce to allow department transmissions, default, or none at all. - var/obj/item/camera/siliconcam/aicamera = null //photography - hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_TRACK_HUD) - - var/obj/item/radio/borg/radio = null ///If this is a path, this gets created as an object in Initialize. - - var/list/alarm_types_show = list("Motion" = 0, "Fire" = 0, "Atmosphere" = 0, "Power" = 0, "Camera" = 0) - var/list/alarm_types_clear = list("Motion" = 0, "Fire" = 0, "Atmosphere" = 0, "Power" = 0, "Camera" = 0) - - var/lawcheck[1] - var/ioncheck[1] - var/hackedcheck[1] - var/devillawcheck[5] - - var/sensors_on = 0 - var/med_hud = DATA_HUD_MEDICAL_ADVANCED //Determines the med hud to use - var/sec_hud = DATA_HUD_SECURITY_ADVANCED //Determines the sec hud to use - var/d_hud = DATA_HUD_DIAGNOSTIC_BASIC //Determines the diag hud to use - - var/law_change_counter = 0 - var/obj/machinery/camera/builtInCamera = null - var/updating = FALSE //portable camera camerachunk update - - var/hack_software = FALSE //Will be able to use hacking actions - var/interaction_range = 7 //wireless control range - var/obj/item/pda/ai/aiPDA - -/mob/living/silicon/Initialize() - . = ..() - GLOB.silicon_mobs += src - faction += "silicon" - if(ispath(radio)) - radio = new radio(src) - for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds) - diag_hud.add_to_hud(src) - diag_hud_set_status() - diag_hud_set_health() - -/mob/living/silicon/med_hud_set_health() - return //we use a different hud - -/mob/living/silicon/med_hud_set_status() - return //we use a different hud - -/mob/living/silicon/Destroy() - QDEL_NULL(radio) - QDEL_NULL(aicamera) - QDEL_NULL(builtInCamera) - QDEL_NULL(aiPDA) - GLOB.silicon_mobs -= src - return ..() - -/mob/living/silicon/contents_explosion(severity, target) - return - -/mob/living/silicon/proc/cancelAlarm() - return - -/mob/living/silicon/proc/triggerAlarm() - return - -/mob/living/silicon/proc/queueAlarm(message, type, incoming = 1) - var/in_cooldown = (alarms_to_show.len > 0 || alarms_to_clear.len > 0) - if(incoming) - alarms_to_show += message - alarm_types_show[type] += 1 - else - alarms_to_clear += message - alarm_types_clear[type] += 1 - - if(!in_cooldown) - spawn(3 * 10) // 3 seconds - - if(alarms_to_show.len < 5) - for(var/msg in alarms_to_show) - to_chat(src, msg) - else if(alarms_to_show.len) - - var/msg = "--- " - - if(alarm_types_show["Burglar"]) - msg += "BURGLAR: [alarm_types_show["Burglar"]] alarms detected. - " - - if(alarm_types_show["Motion"]) - msg += "MOTION: [alarm_types_show["Motion"]] alarms detected. - " - - if(alarm_types_show["Fire"]) - msg += "FIRE: [alarm_types_show["Fire"]] alarms detected. - " - - if(alarm_types_show["Atmosphere"]) - msg += "ATMOSPHERE: [alarm_types_show["Atmosphere"]] alarms detected. - " - - if(alarm_types_show["Power"]) - msg += "POWER: [alarm_types_show["Power"]] alarms detected. - " - - if(alarm_types_show["Camera"]) - msg += "CAMERA: [alarm_types_show["Camera"]] alarms detected. - " - - msg += "\[Show Alerts\]" - to_chat(src, msg) - - if(alarms_to_clear.len < 3) - for(var/msg in alarms_to_clear) - to_chat(src, msg) - - else if(alarms_to_clear.len) - var/msg = "--- " - - if(alarm_types_clear["Motion"]) - msg += "MOTION: [alarm_types_clear["Motion"]] alarms cleared. - " - - if(alarm_types_clear["Fire"]) - msg += "FIRE: [alarm_types_clear["Fire"]] alarms cleared. - " - - if(alarm_types_clear["Atmosphere"]) - msg += "ATMOSPHERE: [alarm_types_clear["Atmosphere"]] alarms cleared. - " - - if(alarm_types_clear["Power"]) - msg += "POWER: [alarm_types_clear["Power"]] alarms cleared. - " - - if(alarm_types_show["Camera"]) - msg += "CAMERA: [alarm_types_clear["Camera"]] alarms cleared. - " - - msg += "\[Show Alerts\]" - to_chat(src, msg) - - - alarms_to_show = list() - alarms_to_clear = list() - for(var/key in alarm_types_show) - alarm_types_show[key] = 0 - for(var/key in alarm_types_clear) - alarm_types_clear[key] = 0 - -/mob/living/silicon/can_inject(mob/user, error_msg) - if(error_msg) - to_chat(user, "[p_their(TRUE)] outer shell is too tough.") - return FALSE - -/mob/living/silicon/IsAdvancedToolUser() - return TRUE - -/proc/islinked(mob/living/silicon/robot/bot, mob/living/silicon/ai/ai) - if(!istype(bot) || !istype(ai)) - return FALSE - if(bot.connected_ai == ai) - return TRUE - return FALSE - -/mob/living/silicon/Topic(href, href_list) - if (href_list["lawc"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite - var/L = text2num(href_list["lawc"]) - switch(lawcheck[L+1]) - if ("Yes") - lawcheck[L+1] = "No" - if ("No") - lawcheck[L+1] = "Yes" - checklaws() - - if (href_list["lawi"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite - var/L = text2num(href_list["lawi"]) - switch(ioncheck[L]) - if ("Yes") - ioncheck[L] = "No" - if ("No") - ioncheck[L] = "Yes" - checklaws() - - if (href_list["lawh"]) - var/L = text2num(href_list["lawh"]) - switch(hackedcheck[L]) - if ("Yes") - hackedcheck[L] = "No" - if ("No") - hackedcheck[L] = "Yes" - checklaws() - - if (href_list["lawdevil"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite - var/L = text2num(href_list["lawdevil"]) - switch(devillawcheck[L]) - if ("Yes") - devillawcheck[L] = "No" - if ("No") - devillawcheck[L] = "Yes" - checklaws() - - - if (href_list["laws"]) // With how my law selection code works, I changed statelaws from a verb to a proc, and call it through my law selection panel. --NeoFite - statelaws() - - return - - -/mob/living/silicon/proc/statelaws(force = 0) - - //"radiomod" is inserted before a hardcoded message to change if and how it is handled by an internal radio. - say("[radiomod] Current Active Laws:") - //laws_sanity_check() - //laws.show_laws(world) - var/number = 1 - sleep(10) - - if (laws.devillaws && laws.devillaws.len) - for(var/index = 1, index <= laws.devillaws.len, index++) - if (force || devillawcheck[index] == "Yes") - say("[radiomod] 666. [laws.devillaws[index]]") - sleep(10) - - - if (laws.zeroth) - if (force || lawcheck[1] == "Yes") - say("[radiomod] 0. [laws.zeroth]") - sleep(10) - - for (var/index = 1, index <= laws.hacked.len, index++) - var/law = laws.hacked[index] - var/num = ionnum() - if (length(law) > 0) - if (force || hackedcheck[index] == "Yes") - say("[radiomod] [num]. [law]") - sleep(10) - - for (var/index = 1, index <= laws.ion.len, index++) - var/law = laws.ion[index] - var/num = ionnum() - if (length(law) > 0) - if (force || ioncheck[index] == "Yes") - say("[radiomod] [num]. [law]") - sleep(10) - - for (var/index = 1, index <= laws.inherent.len, index++) - var/law = laws.inherent[index] - - if (length(law) > 0) - if (force || lawcheck[index+1] == "Yes") - say("[radiomod] [number]. [law]") - number++ - sleep(10) - - for (var/index = 1, index <= laws.supplied.len, index++) - var/law = laws.supplied[index] - - if (length(law) > 0) - if(lawcheck.len >= number+1) - if (force || lawcheck[number+1] == "Yes") - say("[radiomod] [number]. [law]") - number++ - sleep(10) - - -/mob/living/silicon/proc/checklaws() //Gives you a link-driven interface for deciding what laws the statelaws() proc will share with the crew. --NeoFite - - var/list = "Which laws do you want to include when stating them for the crew?

    " - - if (laws.devillaws && laws.devillaws.len) - for(var/index = 1, index <= laws.devillaws.len, index++) - if (!devillawcheck[index]) - devillawcheck[index] = "No" - list += {"[devillawcheck[index]] 666: [laws.devillaws[index]]
    "} - - if (laws.zeroth) - if (!lawcheck[1]) - lawcheck[1] = "No" //Given Law 0's usual nature, it defaults to NOT getting reported. --NeoFite - list += {"[lawcheck[1]] 0: [laws.zeroth]
    "} - - for (var/index = 1, index <= laws.hacked.len, index++) - var/law = laws.hacked[index] - if (length(law) > 0) - if (!hackedcheck[index]) - hackedcheck[index] = "No" - list += {"[hackedcheck[index]] [ionnum()]: [law]
    "} - hackedcheck.len += 1 - - for (var/index = 1, index <= laws.ion.len, index++) - var/law = laws.ion[index] - - if (length(law) > 0) - if (!ioncheck[index]) - ioncheck[index] = "Yes" - list += {"[ioncheck[index]] [ionnum()]: [law]
    "} - ioncheck.len += 1 - - var/number = 1 - for (var/index = 1, index <= laws.inherent.len, index++) - var/law = laws.inherent[index] - - if (length(law) > 0) - lawcheck.len += 1 - - if (!lawcheck[number+1]) - lawcheck[number+1] = "Yes" - list += {"[lawcheck[number+1]] [number]: [law]
    "} - number++ - - for (var/index = 1, index <= laws.supplied.len, index++) - var/law = laws.supplied[index] - if (length(law) > 0) - lawcheck.len += 1 - if (!lawcheck[number+1]) - lawcheck[number+1] = "Yes" - list += {"[lawcheck[number+1]] [number]: [law]
    "} - number++ - list += {"

    State Laws"} - - usr << browse(list, "window=laws") - -/mob/living/silicon/proc/ai_roster() - var/datum/browser/popup = new(src, "airoster", "Crew Manifest", 387, 420) - popup.set_content(GLOB.data_core.get_manifest()) - popup.open() - -/mob/living/silicon/proc/set_autosay() //For allowing the AI and borgs to set the radio behavior of auto announcements (state laws, arrivals). - if(!radio) - to_chat(src, "Radio not detected.") - return - - //Ask the user to pick a channel from what it has available. - var/Autochan = input("Select a channel:") as null|anything in list("Default","None") + radio.channels - - if(!Autochan) - return - if(Autochan == "Default") //Autospeak on whatever frequency to which the radio is set, usually Common. - radiomod = ";" - Autochan += " ([radio.frequency])" - else if(Autochan == "None") //Prevents use of the radio for automatic annoucements. - radiomod = "" - else //For department channels, if any, given by the internal radio. - for(var/key in GLOB.department_radio_keys) - if(GLOB.department_radio_keys[key] == Autochan) - radiomod = ":" + key - break - - to_chat(src, "Automatic announcements [Autochan == "None" ? "will not use the radio." : "set to [Autochan]."]") - -/mob/living/silicon/put_in_hand_check() // This check is for borgs being able to receive items, not put them in others' hands. - return 0 - -// The src mob is trying to place an item on someone -// But the src mob is a silicon!! Disable. -/mob/living/silicon/stripPanelEquip(obj/item/what, mob/who, slot) - return 0 - - -/mob/living/silicon/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) //Secbots won't hunt silicon units - return -10 - -/mob/living/silicon/proc/remove_sensors() - var/datum/atom_hud/secsensor = GLOB.huds[sec_hud] - var/datum/atom_hud/medsensor = GLOB.huds[med_hud] - var/datum/atom_hud/diagsensor = GLOB.huds[d_hud] - secsensor.remove_hud_from(src) - medsensor.remove_hud_from(src) - diagsensor.remove_hud_from(src) - -/mob/living/silicon/proc/add_sensors() - var/datum/atom_hud/secsensor = GLOB.huds[sec_hud] - var/datum/atom_hud/medsensor = GLOB.huds[med_hud] - var/datum/atom_hud/diagsensor = GLOB.huds[d_hud] - secsensor.add_hud_to(src) - medsensor.add_hud_to(src) - diagsensor.add_hud_to(src) - -/mob/living/silicon/proc/toggle_sensors() - if(incapacitated()) - return - sensors_on = !sensors_on - if (!sensors_on) - to_chat(src, "Sensor overlay deactivated.") - remove_sensors() - return - add_sensors() - to_chat(src, "Sensor overlay activated.") - -/mob/living/silicon/proc/GetPhoto(mob/user) - if (aicamera) - return aicamera.selectpicture(user) - -/mob/living/silicon/update_transform() - var/matrix/ntransform = matrix(transform) //aka transform.Copy() - var/changed = 0 - if(resize != RESIZE_DEFAULT_SIZE) - changed++ - ntransform.Scale(resize) - resize = RESIZE_DEFAULT_SIZE - - if(changed) - animate(src, transform = ntransform, time = 2,easing = EASE_IN|EASE_OUT) - return ..() - -/mob/living/silicon/is_literate() - return TRUE - -/mob/living/silicon/get_inactive_held_item() - return FALSE - -/mob/living/silicon/handle_high_gravity(gravity) - return diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm deleted file mode 100644 index c2ef905580..0000000000 --- a/code/modules/mob/living/silicon/silicon_defense.dm +++ /dev/null @@ -1,138 +0,0 @@ - -/mob/living/silicon/grippedby(mob/living/user, instant = FALSE) - return //can't upgrade a simple pull into a more aggressive grab. - -/mob/living/silicon/get_ear_protection()//no ears - return 2 - -/mob/living/silicon/attack_alien(mob/living/carbon/alien/humanoid/M) - if(..()) //if harm or disarm intent - var/damage = 20 - if (prob(90)) - log_combat(M, src, "attacked") - playsound(loc, 'sound/blank.ogg', 25, TRUE, -1) - visible_message("[M] slashes at [src]!", \ - "[M] slashes at you!", null, null, M) - to_chat(M, "I slash at [src]!") - if(prob(8)) - flash_act(affect_silicon = 1) - log_combat(M, src, "attacked") - adjustBruteLoss(damage) - updatehealth() - else - playsound(loc, 'sound/blank.ogg', 25, TRUE, -1) - visible_message("[M]'s swipe misses [src]!", \ - "I avoid [M]'s swipe!", null, null, M) - to_chat(M, "My swipe misses [src]!") - -/mob/living/silicon/attack_animal(mob/living/simple_animal/M) - . = ..() - if(.) - var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) - if(prob(damage)) - for(var/mob/living/N in buckled_mobs) - N.Paralyze(20) - unbuckle_mob(N) - N.visible_message("[N] is knocked off of [src] by [M]!", \ - "You're knocked off of [src] by [M]!", null, null, M) - to_chat(M, "I knock [N] off of [src]!") - switch(M.melee_damage_type) - if(BRUTE) - adjustBruteLoss(damage) - if(BURN) - adjustFireLoss(damage) - if(TOX) - adjustToxLoss(damage) - if(OXY) - adjustOxyLoss(damage) - if(CLONE) - adjustCloneLoss(damage) - if(STAMINA) - adjustStaminaLoss(damage) - -/mob/living/silicon/attack_paw(mob/living/user) - return attack_hand(user) - -/mob/living/silicon/attack_larva(mob/living/carbon/alien/larva/L) - if(L.used_intent.type == INTENT_HELP) - visible_message("[L.name] rubs its head against [src].") - -/mob/living/silicon/attack_hulk(mob/living/carbon/human/user) - . = ..() - if(!.) - return - adjustBruteLoss(rand(10, 15)) - playsound(loc, "punch", 25, TRUE, -1) - visible_message("[user] punches [src]!", \ - "[user] punches you!", null, COMBAT_MESSAGE_RANGE, user) - to_chat(user, "I punch [src]!") - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/mob/living/silicon/attack_hand(mob/living/carbon/human/M) - . = FALSE - if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_HAND, M) & COMPONENT_NO_ATTACK_HAND) - . = TRUE - switch(M.used_intent.type) - if (INTENT_HELP) - visible_message("[M] pets [src].", \ - "[M] pets you.", null, null, M) - to_chat(M, "I pet [src].") - SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT_RND, "pet_borg", /datum/mood_event/pet_borg) - if(INTENT_GRAB) - grabbedby(M) - else - M.do_attack_animation(src, ATTACK_EFFECT_PUNCH) - playsound(src.loc, 'sound/blank.ogg', 10, TRUE) - visible_message("[M] punches [src], but doesn't leave a dent!", \ - "[M] punches you, but doesn't leave a dent!", null, COMBAT_MESSAGE_RANGE, M) - to_chat(M, "I punch [src], but don't leave a dent!") - -/mob/living/silicon/attack_drone(mob/living/simple_animal/drone/M) - if(M.used_intent.type == INTENT_HARM) - return - return ..() - -/mob/living/silicon/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE) - if(buckled_mobs) - for(var/mob/living/M in buckled_mobs) - unbuckle_mob(M) - M.electrocute_act(shock_damage/100, source, siemens_coeff, flags) //Hard metal shell conducts! - return 0 //So borgs they don't die trying to fix wiring - -/mob/living/silicon/emp_act(severity) - . = ..() - to_chat(src, "Warning: Electromagnetic pulse detected.") - if(. & EMP_PROTECT_SELF) - return - switch(severity) - if(1) - src.take_bodypart_damage(20) - if(2) - src.take_bodypart_damage(10) - to_chat(src, "*BZZZT*") - for(var/mob/living/M in buckled_mobs) - if(prob(severity*50)) - unbuckle_mob(M) - M.Paralyze(40) - M.visible_message("[M] is thrown off of [src]!") - flash_act(affect_silicon = 1) - -/mob/living/silicon/bullet_act(obj/projectile/Proj, def_zone) - SEND_SIGNAL(src, COMSIG_ATOM_BULLET_ACT, Proj, def_zone) - if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - adjustBruteLoss(Proj.damage) - if(prob(Proj.damage*1.5)) - for(var/mob/living/M in buckled_mobs) - M.visible_message("[M] is knocked off of [src]!") - unbuckle_mob(M) - M.Paralyze(40) - if(Proj.stun || Proj.knockdown || Proj.paralyze) - for(var/mob/living/M in buckled_mobs) - unbuckle_mob(M) - M.visible_message("[M] is knocked off of [src] by the [Proj]!") - Proj.on_hit(src) - return BULLET_ACT_HIT - -/mob/living/silicon/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /atom/movable/screen/fullscreen/flash/static) - if(affect_silicon) - return ..() diff --git a/code/modules/mob/living/silicon/silicon_movement.dm b/code/modules/mob/living/silicon/silicon_movement.dm deleted file mode 100644 index cc0a01aa37..0000000000 --- a/code/modules/mob/living/silicon/silicon_movement.dm +++ /dev/null @@ -1,22 +0,0 @@ -/mob/living/silicon/Moved(oldLoc, dir) - . = ..() - update_camera_location(oldLoc) - -/mob/living/silicon/forceMove(atom/destination) - . = ..() - //Only bother updating the camera if we actually managed to move - if(.) - update_camera_location(destination) - -/mob/living/silicon/proc/do_camera_update(oldLoc) - if(!QDELETED(builtInCamera) && oldLoc != get_turf(src)) - GLOB.cameranet.updatePortableCamera(builtInCamera) - updating = FALSE - -#define SILICON_CAMERA_BUFFER 10 -/mob/living/silicon/proc/update_camera_location(oldLoc) - oldLoc = get_turf(oldLoc) - if(!QDELETED(builtInCamera) && !updating && oldLoc != get_turf(src)) - updating = TRUE - addtimer(CALLBACK(src, PROC_REF(do_camera_update), oldLoc), SILICON_CAMERA_BUFFER) -#undef SILICON_CAMERA_BUFFER diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index 70f2d01f2e..8b0a62ec7f 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -150,32 +150,6 @@ playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) -/mob/living/simple_animal/attack_alien(mob/living/carbon/alien/humanoid/M) - if(..()) //if harm or disarm intent. - if(M.used_intent.type == INTENT_DISARM) - playsound(loc, 'sound/blank.ogg', 25, TRUE, -1) - visible_message("[M] [response_disarm_continuous] [name]!", \ - "[M] [response_disarm_continuous] you!", null, COMBAT_MESSAGE_RANGE, M) - to_chat(M, "I [response_disarm_simple] [name]!") - log_combat(M, src, "disarmed") - else - var/damage = rand(15, 30) - visible_message("[M] slashes at [src]!", \ - "You're slashed at by [M]!", null, COMBAT_MESSAGE_RANGE, M) - to_chat(M, "I slash at [src]!") - playsound(loc, 'sound/blank.ogg', 25, TRUE, -1) - attack_threshold_check(damage) - log_combat(M, src, "attacked") - return 1 - -/mob/living/simple_animal/attack_larva(mob/living/carbon/alien/larva/L) - . = ..() - if(. && stat != DEAD) //successful larva bite - var/damage = rand(5, 10) - . = attack_threshold_check(damage) - if(.) - L.amount_grown = min(L.amount_grown + damage, L.max_grown) - /mob/living/simple_animal/attack_animal(mob/living/simple_animal/M) . = ..() if(.) diff --git a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm deleted file mode 100644 index 391dcd4fbc..0000000000 --- a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm +++ /dev/null @@ -1,150 +0,0 @@ -/mob/living/simple_animal/bot/secbot/grievous //This bot is powerful. If you managed to get 4 eswords somehow, you deserve this horror. Emag him for best results. - name = "General Beepsky" - desc = "" - icon = 'icons/mob/aibots.dmi' - icon_state = "grievous" - health = 150 - maxHealth = 150 - baton_type = /obj/item/melee/transforming/energy/sword/saber - base_speed = 4 //he's a fast fucker - var/block_chance = 50 - weapon_force = 30 - - -/mob/living/simple_animal/bot/secbot/grievous/toy //A toy version of general beepsky! - name = "Genewul Bweepskee" - desc = "" - health = 50 - maxHealth = 50 - baton_type = /obj/item/toy/sword - weapon_force = 0 - -/mob/living/simple_animal/bot/secbot/grievous/bullet_act(obj/projectile/P) - visible_message("[src] deflects [P] with its energy swords!") - playsound(src, 'sound/blank.ogg', 50, TRUE) - return BULLET_ACT_BLOCK - -/mob/living/simple_animal/bot/secbot/grievous/Crossed(atom/movable/AM) - ..() - if(ismob(AM) && AM == target) - visible_message("[src] flails his swords and cuts [AM]!") - playsound(src,'sound/blank.ogg',100,TRUE,-1) - stun_attack(AM) - -/mob/living/simple_animal/bot/secbot/grievous/Initialize() - . = ..() - INVOKE_ASYNC(weapon, TYPE_PROC_REF(/obj/item, attack_self), src) - -/mob/living/simple_animal/bot/secbot/grievous/Destroy() - QDEL_NULL(weapon) - return ..() - -/mob/living/simple_animal/bot/secbot/grievous/special_retaliate_after_attack(mob/user) - if(mode != BOT_HUNT) - return - if(prob(block_chance)) - visible_message("[src] deflects [user]'s attack with his energy swords!") - playsound(src, 'sound/blank.ogg', 50, TRUE, -1) - return TRUE - -/mob/living/simple_animal/bot/secbot/grievous/stun_attack(mob/living/carbon/C) //Criminals don't deserve to live - weapon.attack(C, src) - playsound(src, 'sound/blank.ogg', 50, TRUE, -1) - if(C.stat == DEAD) - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon)), 2) - back_to_idle() - - -/mob/living/simple_animal/bot/secbot/grievous/handle_automated_action() - if(!on) - return - switch(mode) - if(BOT_IDLE) // idle - update_icon() - walk_to(src,0) - look_for_perp() // see if any criminals are in range - if(!mode && auto_patrol) // still idle, and set to patrol - mode = BOT_START_PATROL // switch to patrol mode - if(BOT_HUNT) // hunting for perp - update_icon() - playsound(src,'sound/blank.ogg',100,TRUE,-1) - // general beepsky doesn't give up so easily, jedi scum - if(frustration >= 20) - walk_to(src,0) - back_to_idle() - return - if(target) // make sure target exists - if(Adjacent(target) && isturf(target.loc)) // if right next to perp - target_lastloc = target.loc //stun_attack() can clear the target if they're dead, so this needs to be set first - stun_attack(target) - anchored = TRUE - return - else // not next to perp - var/turf/olddist = get_dist(src, target) - walk_to(src, target,1,4) - if((get_dist(src, target)) >= (olddist)) - frustration++ - else - frustration = 0 - else - back_to_idle() - - if(BOT_START_PATROL) - look_for_perp() - start_patrol() - - if(BOT_PATROL) - look_for_perp() - bot_patrol() - -/mob/living/simple_animal/bot/secbot/grievous/look_for_perp() - anchored = FALSE - var/judgement_criteria = judgement_criteria() - for (var/mob/living/carbon/C in view(7,src)) //Let's find us a criminal - if((C.stat) || (C.handcuffed)) - continue - - if((C.name == oldtarget_name) && (world.time < last_found + 100)) - continue - - threatlevel = C.assess_threat(judgement_criteria, weaponcheck=CALLBACK(src, PROC_REF(check_for_weapons))) - - if(!threatlevel) - continue - - else if(threatlevel >= 4) - target = C - oldtarget_name = C.name - speak("Level [threatlevel] infraction alert!") - playsound(src, pick('sound/blank.ogg'), 50, FALSE) - playsound(src,'sound/blank.ogg',50,TRUE,-1) - visible_message("[src] ignites his energy swords!") - icon_state = "grievous-c" - visible_message("[src] points at [C.name]!") - mode = BOT_HUNT - INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) - break - else - continue - - -/mob/living/simple_animal/bot/secbot/grievous/explode() - - walk_to(src,0) - visible_message("[src] lets out a huge cough as it blows apart!") - var/atom/Tsec = drop_location() - - var/obj/item/bot_assembly/secbot/Sa = new (Tsec) - Sa.build_step = 1 - Sa.add_overlay("hs_hole") - Sa.created_name = name - new /obj/item/assembly/prox_sensor(Tsec) - - if(prob(50)) - drop_part(robot_arm, Tsec) - - do_sparks(3, TRUE, src) - for(var/IS = 0 to 4) - drop_part(baton_type, Tsec) - new /obj/effect/decal/cleanable/oil(Tsec) - qdel(src) diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm deleted file mode 100644 index bfff8b9d0e..0000000000 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ /dev/null @@ -1,1033 +0,0 @@ -// AI (i.e. game AI, not the AI player) controlled bots -/mob/living/simple_animal/bot - icon = 'icons/mob/aibots.dmi' - layer = MOB_LAYER - gender = NEUTER - mob_biotypes = MOB_ROBOTIC - light_range = 3 - stop_automated_movement = 1 - wander = 0 - healable = 0 - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - maxbodytemp = INFINITY - minbodytemp = 0 - has_unlimited_silicon_privilege = 1 - sentience_type = SENTIENCE_ARTIFICIAL - status_flags = NONE //no default canpush - verb_say = "states" - verb_ask = "queries" - verb_exclaim = "declares" - verb_yell = "alarms" - initial_language_holder = /datum/language_holder/synthetic - bubble_icon = "machine" - speech_span = SPAN_ROBOT - faction = list("neutral", "silicon" , "turret") - - var/obj/machinery/bot_core/bot_core = null - var/bot_core_type = /obj/machinery/bot_core - var/list/users = list() //for dialog updates - var/window_id = "bot_control" - var/window_name = "Protobot 1.0" //Popup title - var/window_width = 0 //0 for default size - var/window_height = 0 - var/obj/item/paicard/paicard // Inserted pai card. - var/allow_pai = 1 // Are we even allowed to insert a pai card. - var/bot_name - - var/list/player_access = list() //Additonal access the bots gets when player controlled - var/emagged = FALSE - var/list/prev_access = list() - var/on = TRUE - var/open = FALSE//Maint panel - var/locked = TRUE - var/hacked = FALSE //Used to differentiate between being hacked by silicons and emagged by humans. - var/text_hack = "" //Custom text returned to a silicon upon hacking a bot. - var/text_dehack = "" //Text shown when resetting a bots hacked status to normal. - var/text_dehack_fail = "" //Shown when a silicon tries to reset a bot emagged with the emag item, which cannot be reset. - var/declare_message = "" //What the bot will display to the HUD user. - var/frustration = 0 //Used by some bots for tracking failures to reach their target. - var/base_speed = 2 //The speed at which the bot moves, or the number of times it moves per process() tick. - var/turf/ai_waypoint //The end point of a bot's path, or the target location. - var/list/path = list() //List of turfs through which a bot 'steps' to reach the waypoint, associated with the path image, if there is one. - var/pathset = 0 - var/list/ignore_list = list() //List of unreachable targets for an ignore-list enabled bot to ignore. - var/mode = BOT_IDLE //Standardizes the vars that indicate the bot is busy with its function. - var/tries = 0 //Number of times the bot tried and failed to move. - var/remote_disabled = 0 //If enabled, the AI cannot *Remotely* control a bot. It can still control it through cameras. - var/mob/living/silicon/ai/calling_ai //Links a bot to the AI calling it. - var/obj/item/radio/Radio //The bot's radio, for speaking to people. - var/radio_key = null //which channels can the bot listen to - var/radio_channel = RADIO_CHANNEL_COMMON //The bot's default radio channel - var/auto_patrol = 0// set to make bot automatically patrol - var/turf/patrol_target // this is turf to navigate to (location of beacon) - var/turf/summon_target // The turf of a user summoning a bot. - var/new_destination // pending new destination (waiting for beacon response) - var/destination // destination description tag - var/next_destination // the next destination in the patrol route - var/shuffle = FALSE // If we should shuffle our adjacency checking - - var/blockcount = 0 //number of times retried a blocked path - var/awaiting_beacon = 0 // count of pticks awaiting a beacon response - - var/nearest_beacon // the nearest beacon's tag - var/turf/nearest_beacon_loc // the nearest beacon's location - - var/beacon_freq = FREQ_NAV_BEACON - var/model = "" //The type of bot it is. - var/bot_type = 0 //The type of bot it is, for radio control. - var/data_hud_type = DATA_HUD_DIAGNOSTIC_BASIC //The type of data HUD the bot uses. Diagnostic by default. - //This holds text for what the bot is mode doing, reported on the remote bot control interface. - var/list/mode_name = list("In Pursuit","Preparing to Arrest", "Arresting", \ - "Beginning Patrol", "Patrolling", "Summoned by PDA", \ - "Cleaning", "Repairing", "Proceeding to work site", "Healing", \ - "Proceeding to AI waypoint", "Navigating to Delivery Location", "Navigating to Home", \ - "Waiting for clear path", "Calculating navigation path", "Pinging beacon network", "Unable to reach destination") - var/datum/atom_hud/data/bot_path/path_hud = new /datum/atom_hud/data/bot_path() - var/path_image_icon = 'icons/mob/aibots.dmi' - var/path_image_icon_state = "path_indicator" - var/path_image_color = "#FFFFFF" - var/reset_access_timer_id - var/ignorelistcleanuptimer = 1 // This ticks up every automated action, at 300 we clean the ignore list - var/robot_arm = /obj/item/bodypart/r_arm/robot - - var/commissioned = FALSE // Will other (noncommissioned) bots salute this bot? - var/can_salute = TRUE - var/salute_delay = 60 SECONDS - - hud_possible = list(DIAG_STAT_HUD, DIAG_BOT_HUD, DIAG_HUD, DIAG_PATH_HUD = HUD_LIST_LIST) //Diagnostic HUD views - -/mob/living/simple_animal/bot/proc/get_mode() - if(client) //Player bots do not have modes, thus the override. Also an easy way for PDA users/AI to know when a bot is a player. - if(paicard) - return "pAI Controlled" - else - return "Autonomous" - else if(!on) - return "Inactive" - else if(!mode) - return "Idle" - else - return "[mode_name[mode]]" - -/mob/living/simple_animal/bot/proc/turn_on() - if(stat) - return FALSE - on = TRUE - update_mobility() - set_light(initial(light_range)) - update_icon() - diag_hud_set_botstat() - return TRUE - -/mob/living/simple_animal/bot/proc/turn_off() - on = FALSE - update_mobility() - set_light(0) - bot_reset() //Resets an AI's call, should it exist. - update_icon() - -/mob/living/simple_animal/bot/Initialize() - . = ..() - GLOB.bots_list += src - access_card = new /obj/item/card/id(src) -//This access is so bots can be immediately set to patrol and leave Robotics, instead of having to be let out first. - access_card.access += ACCESS_ROBOTICS - set_custom_texts() - Radio = new/obj/item/radio(src) - if(radio_key) - Radio.keyslot = new radio_key - Radio.subspace_transmission = TRUE - Radio.canhear_range = 0 // anything greater will have the bot broadcast the channel as if it were saying it out loud. - Radio.recalculateChannels() - - bot_core = new bot_core_type(src) - - //Adds bot to the diagnostic HUD system - prepare_huds() - for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds) - diag_hud.add_to_hud(src) - diag_hud_set_bothealth() - diag_hud_set_botstat() - diag_hud_set_botmode() - - //If a bot has its own HUD (for player bots), provide it. - if(data_hud_type) - var/datum/atom_hud/datahud = GLOB.huds[data_hud_type] - datahud.add_hud_to(src) - if(path_hud) - path_hud.add_to_hud(src) - path_hud.add_hud_to(src) - -/mob/living/simple_animal/bot/update_mobility() - . = ..() - if(!on) - mobility_flags = NONE - -/mob/living/simple_animal/bot/Destroy() - if(path_hud) - QDEL_NULL(path_hud) - path_hud = null - GLOB.bots_list -= src - if(paicard) - ejectpai() - qdel(Radio) - qdel(access_card) - qdel(bot_core) - return ..() - -/mob/living/simple_animal/bot/bee_friendly() - return TRUE - -/mob/living/simple_animal/bot/death(gibbed) - explode() - ..() - -/mob/living/simple_animal/bot/proc/explode() - qdel(src) - -/mob/living/simple_animal/bot/emag_act(mob/user) - if(locked) //First emag application unlocks the bot's interface. Apply a screwdriver to use the emag again. - locked = FALSE - emagged = 1 - to_chat(user, "I bypass [src]'s controls.") - return - if(!locked && open) //Bot panel is unlocked by ID or emag, and the panel is screwed open. Ready for emagging. - emagged = 2 - remote_disabled = 1 //Manually emagging the bot locks out the AI built in panel. - locked = TRUE //Access denied forever! - bot_reset() - turn_on() //The bot automatically turns on when emagged, unless recently hit with EMP. - to_chat(src, "(#$*#$^^( OVERRIDE DETECTED") - log_combat(user, src, "emagged") - return - else //Bot is unlocked, but the maint panel has not been opened with a screwdriver yet. - to_chat(user, "I need to open maintenance panel first!") - -/mob/living/simple_animal/bot/examine(mob/user) - . = ..() - if(health < maxHealth) - if(health > maxHealth/3) - . += "[src]'s parts look loose." - else - . += "[src]'s parts look very loose!" - else - . += "[src] is in pristine condition." - -/mob/living/simple_animal/bot/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - if(amount>0 && prob(10)) - new /obj/effect/decal/cleanable/oil(loc) - . = ..() - -/mob/living/simple_animal/bot/updatehealth() - ..() - diag_hud_set_bothealth() - -/mob/living/simple_animal/bot/med_hud_set_health() - return //we use a different hud - -/mob/living/simple_animal/bot/med_hud_set_status() - return //we use a different hud - -/mob/living/simple_animal/bot/handle_automated_action() //Master process which handles code common across most bots. - diag_hud_set_botmode() - - if (ignorelistcleanuptimer % 300 == 0) // Every 300 actions, clean up the ignore list from old junk - for(var/ref in ignore_list) - var/atom/referredatom = locate(ref) - if (!referredatom || !istype(referredatom) || QDELETED(referredatom)) - ignore_list -= ref - ignorelistcleanuptimer = 1 - else - ignorelistcleanuptimer++ - - if(!on || client) - return - - if(!commissioned && can_salute) - for(var/mob/living/simple_animal/bot/B in get_hearers_in_view(5, get_turf(src))) - if(B.commissioned) - visible_message("[src] performs an elaborate salute for [B]!") - can_salute = FALSE - addtimer(VARSET_CALLBACK(src, can_salute, TRUE), salute_delay) - break - - switch(mode) //High-priority overrides are processed first. Bots can do nothing else while under direct command. - if(BOT_RESPONDING) //Called by the AI. - call_mode() - return - if(BOT_SUMMON) //Called by PDA - bot_summon() - return - return TRUE //Successful completion. Used to prevent child process() continuing if this one is ended early. - - -/mob/living/simple_animal/bot/attack_hand(mob/living/carbon/human/H) - if(H.used_intent.type == INTENT_HELP) - interact(H) - else - return ..() - -/mob/living/simple_animal/bot/attack_ai(mob/user) - if(!topic_denied(user)) - interact(user) - else - to_chat(user, "[src]'s interface is not responding!") - -/mob/living/simple_animal/bot/interact(mob/user) - show_controls(user) - -/mob/living/simple_animal/bot/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_SCREWDRIVER) - if(!locked) - open = !open - to_chat(user, "The maintenance panel is now [open ? "opened" : "closed"].") - else - to_chat(user, "The maintenance panel is locked!") - else if(istype(W, /obj/item/card/id) || istype(W, /obj/item/pda)) - if(bot_core.allowed(user) && !open && !emagged) - locked = !locked - to_chat(user, "Controls are now [locked ? "locked" : "unlocked"].") - else - if(emagged) - to_chat(user, "ERROR") - if(open) - to_chat(user, "Please close the access panel before locking it.") - else - to_chat(user, "Access denied.") - else if(istype(W, /obj/item/paicard)) - insertpai(user, W) - else if(W.tool_behaviour == TOOL_HEMOSTAT && paicard) - if(open) - to_chat(user, "Close the access panel before manipulating the personality slot!") - else - to_chat(user, "I attempt to pull [paicard] free...") - if(do_after(user, 30, target = src)) - if (paicard) - user.visible_message("[user] uses [W] to pull [paicard] out of [bot_name]!","I pull [paicard] out of [bot_name] with [W].") - ejectpai(user) - else - user.changeNext_move(CLICK_CD_MELEE) - if(W.tool_behaviour == TOOL_WELDER && user.used_intent.type != INTENT_HARM) - if(health >= maxHealth) - to_chat(user, "[src] does not need a repair!") - return - if(!open) - to_chat(user, "Unable to repair with the maintenance panel closed!") - return - - if(W.use_tool(src, user, 0, volume=40)) - adjustHealth(-10) - user.visible_message("[user] repairs [src]!","I repair [src].") - else - if(W.force) //if force is non-zero - do_sparks(5, TRUE, src) - ..() - -/mob/living/simple_animal/bot/bullet_act(obj/projectile/Proj) - if(Proj && (Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - if(prob(75) && Proj.damage > 0) - do_sparks(5, TRUE, src) - return ..() - -/mob/living/simple_animal/bot/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - var/was_on = on - stat |= EMPED - new /obj/effect/temp_visual/emp(loc) - if(paicard) - paicard.emp_act(severity) - src.visible_message("[paicard] is flies out of [bot_name]!","I are forcefully ejected from [bot_name]!") - ejectpai(0) - if(on) - turn_off() - spawn(severity*300) - stat &= ~EMPED - if(was_on) - turn_on() - -/mob/living/simple_animal/bot/proc/set_custom_texts() //Superclass for setting hack texts. Appears only if a set is not given to a bot locally. - text_hack = "You hack [name]." - text_dehack = "You reset [name]." - text_dehack_fail = "You fail to reset [name]." - -/mob/living/simple_animal/bot/proc/speak(message,channel) //Pass a message to have the bot say() it. Pass a frequency to say it on the radio. - if((!on) || (!message)) - return - if(channel && Radio.channels[channel])// Use radio if we have channel key - Radio.talk_into(src, message, channel) - else - say(message) - -/mob/living/simple_animal/bot/radio(message, message_mode, list/spans, language) - . = ..() - if(. != 0) - return - - switch(message_mode) - if(MODE_HEADSET) - Radio.talk_into(src, message, , spans, language) - return REDUCE_RANGE - - if(MODE_DEPARTMENT) - Radio.talk_into(src, message, message_mode, spans, language) - return REDUCE_RANGE - - if(message_mode in GLOB.radiochannels) - Radio.talk_into(src, message, message_mode, spans, language) - return REDUCE_RANGE - -/mob/living/simple_animal/bot/proc/drop_part(obj/item/drop_item, dropzone) - var/obj/item/dropped_item - if(ispath(drop_item)) - dropped_item = new drop_item(dropzone) - else - dropped_item = drop_item - dropped_item.forceMove(dropzone) - - if(istype(dropped_item, /obj/item/stock_parts/cell)) - var/obj/item/stock_parts/cell/dropped_cell = dropped_item - dropped_cell.charge = 0 - dropped_cell.update_icon() - - else if(istype(dropped_item, /obj/item/storage)) - var/obj/item/storage/S = dropped_item - S.contents = list() - - else if(istype(dropped_item, /obj/item/gun/energy)) - var/obj/item/gun/energy/dropped_gun = dropped_item - dropped_gun.cell.charge = 0 - dropped_gun.update_icon() - -//Generalized behavior code, override where needed! - -/* -scan() will search for a given type (such as turfs, human mobs, or objects) in the bot's view range, and return a single result. -Arguments: The object type to be searched (such as "/mob/living/carbon/human"), the old scan result to be ignored, if one exists, -and the view range, which defaults to 7 (full screen) if an override is not passed. -If the bot maintains an ignore list, it is also checked here. - -Example usage: patient = scan(/mob/living/carbon/human, oldpatient, 1) -The proc would return a human next to the bot to be set to the patient var. -Pass the desired type path itself, declaring a temporary var beforehand is not required. -*/ -/mob/living/simple_animal/bot/proc/scan(scan_type, old_target, scan_range = DEFAULT_SCAN_RANGE) - var/turf/T = get_turf(src) - if(!T) - return - var/list/adjacent = T.GetAtmosAdjacentTurfs(1) - if(shuffle) //If we were on the same tile as another bot, let's randomize our choices so we dont both go the same way - adjacent = shuffle(adjacent) - shuffle = FALSE - for(var/scan in adjacent)//Let's see if there's something right next to us first! - if(check_bot(scan)) //Is there another bot there? Then let's just skip it - continue - if(isturf(scan_type)) //If we're lookeing for a turf we can just run the checks directly! - var/final_result = checkscan(scan,scan_type,old_target) - if(final_result) - return final_result - else - var/turf/turfy = scan - for(var/deepscan in turfy.contents)//Check the contents since adjacent is turfs - var/final_result = checkscan(deepscan,scan_type,old_target) - if(final_result) - return final_result - for (var/scan in shuffle(view(scan_range, src))-adjacent) //Search for something in range! - var/final_result = checkscan(scan,scan_type,old_target) - if(final_result) - return final_result - -/mob/living/simple_animal/bot/proc/checkscan(scan, scan_type, old_target) - if(!istype(scan, scan_type)) //Check that the thing we found is the type we want! - return FALSE //If not, keep searching! - if( (REF(scan) in ignore_list) || (scan == old_target) ) //Filter for blacklisted elements, usually unreachable or previously processed oness - return FALSE - - var/scan_result = process_scan(scan) //Some bots may require additional processing when a result is selected. - if(scan_result) - return scan_result - return FALSE //The current element failed assessment, move on to the next. - -/mob/living/simple_animal/bot/proc/check_bot(targ) - var/turf/T = get_turf(targ) - if(T) - for(var/C in T.contents) - if(istype(C,type) && (C != src)) //Is there another bot there already? If so, let's skip it so we dont all atack on top of eachother. - return TRUE //Let's abort if we find a bot so we dont have to keep rechecking - -//When the scan finds a target, run bot specific processing to select it for the next step. Empty by default. -/mob/living/simple_animal/bot/proc/process_scan(scan_target) - return scan_target - - -/mob/living/simple_animal/bot/proc/add_to_ignore(subject) - if(ignore_list.len < 50) //This will help keep track of them, so the bot is always trying to reach a blocked spot. - ignore_list += REF(subject) - else //If the list is full, insert newest, delete oldest. - ignore_list.Cut(1,2) - ignore_list += REF(subject) - -/* -Movement proc for stepping a bot through a path generated through A-star. -Pass a positive integer as an argument to override a bot's default speed. -*/ -/mob/living/simple_animal/bot/proc/bot_move(dest, move_speed) - if(!dest || !path || path.len == 0) //A-star failed or a path/destination was not set. - set_path(null) - return FALSE - dest = get_turf(dest) //We must always compare turfs, so get the turf of the dest var if dest was originally something else. - var/turf/last_node = get_turf(path[path.len]) //This is the turf at the end of the path, it should be equal to dest. - if(get_turf(src) == dest) //We have arrived, no need to move again. - return TRUE - else if(dest != last_node) //The path should lead us to our given destination. If this is not true, we must stop. - set_path(null) - return FALSE - var/step_count = move_speed ? move_speed : base_speed //If a value is passed into move_speed, use that instead of the default speed var. - - if(step_count >= 1 && tries < BOT_STEP_MAX_RETRIES) - for(var/step_number = 0, step_number < step_count,step_number++) - addtimer(CALLBACK(src, PROC_REF(bot_step), dest), BOT_STEP_DELAY*step_number) - else - return FALSE - return TRUE - - -/mob/living/simple_animal/bot/proc/bot_step(dest) //Step,increase tries if failed - if(!path) - return FALSE - if(path.len > 1) - step_towards(src, path[1]) - if(get_turf(src) == path[1]) //Successful move - increment_path() - tries = 0 - else - tries++ - return FALSE - else if(path.len == 1) - step_to(src, dest) - set_path(null) - return TRUE - - -/mob/living/simple_animal/bot/proc/check_bot_access() - if(mode != BOT_SUMMON && mode != BOT_RESPONDING) - access_card.access = prev_access - -/mob/living/simple_animal/bot/proc/call_bot(caller, turf/waypoint, message=TRUE) - bot_reset() //Reset a bot before setting it to call mode. - - //For giving the bot temporary all-access. - var/obj/item/card/id/all_access = new /obj/item/card/id - var/datum/job/captain/All = new/datum/job/captain - all_access.access = All.get_access() - - set_path(get_path_to(src, waypoint, /turf/proc/Distance_cardinal, 0, 200, id=all_access)) - calling_ai = caller //Link the AI to the bot! - ai_waypoint = waypoint - - if(path && path.len) //Ensures that a valid path is calculated! - var/end_area = get_area_name(waypoint) - if(!on) - turn_on() //Saves the AI the hassle of having to activate a bot manually. - access_card = all_access //Give the bot all-access while under the AI's command. - if(client) - reset_access_timer_id = addtimer(CALLBACK(src, PROC_REF(bot_reset)), 600, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) //if the bot is player controlled, they get the extra access for a limited time - to_chat(src, "Priority waypoint set by [icon2html(calling_ai, src)] [caller]. Proceed to [end_area].
    [path.len-1] meters to destination. You have been granted additional door access for 60 seconds.
    ") - if(message) - to_chat(calling_ai, "[icon2html(src, calling_ai)] [name] called to [end_area]. [path.len-1] meters to destination.") - pathset = 1 - mode = BOT_RESPONDING - tries = 0 - else - if(message) - to_chat(calling_ai, "Failed to calculate a valid route. Ensure destination is clear of obstructions and within range.") - calling_ai = null - set_path(null) - -/mob/living/simple_animal/bot/proc/call_mode() //Handles preparing a bot for a call, as well as calling the move proc. -//Handles the bot's movement during a call. - var/success = bot_move(ai_waypoint, 3) - if(!success) - if(calling_ai) - to_chat(calling_ai, "[icon2html(src, calling_ai)] [get_turf(src) == ai_waypoint ? "[src] successfully arrived to waypoint." : "[src] failed to reach waypoint."]") - calling_ai = null - bot_reset() - -/mob/living/simple_animal/bot/proc/bot_reset() - if(calling_ai) //Simple notification to the AI if it called a bot. It will not know the cause or identity of the bot. - to_chat(calling_ai, "Call command to a bot has been reset.") - calling_ai = null - if(reset_access_timer_id) - deltimer(reset_access_timer_id) - reset_access_timer_id = null - set_path(null) - summon_target = null - pathset = 0 - access_card.access = prev_access - tries = 0 - mode = BOT_IDLE - diag_hud_set_botstat() - diag_hud_set_botmode() - - - - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -//Patrol and summon code! -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -/mob/living/simple_animal/bot/proc/bot_patrol() - patrol_step() - spawn(5) - if(mode == BOT_PATROL) - patrol_step() - return - -/mob/living/simple_animal/bot/proc/start_patrol() - - if(tries >= BOT_STEP_MAX_RETRIES) //Bot is trapped, so stop trying to patrol. - auto_patrol = 0 - tries = 0 - speak("Unable to start patrol.") - - return - - if(!auto_patrol) //A bot not set to patrol should not be patrolling. - mode = BOT_IDLE - return - - if(patrol_target) // has patrol target - INVOKE_ASYNC(src, PROC_REF(target_patrol)) - else // no patrol target, so need a new one - speak("Engaging patrol mode.") - find_patrol_target() - tries++ - return - -/mob/living/simple_animal/bot/proc/target_patrol() - calc_path() // Find a route to it - if(!path.len) - patrol_target = null - return - mode = BOT_PATROL -// perform a single patrol step - -/mob/living/simple_animal/bot/proc/patrol_step() - - if(client) // In use by player, don't actually move. - return - - if(loc == patrol_target) // reached target - //Find the next beacon matching the target. - if(!get_next_patrol_target()) - find_patrol_target() //If it fails, look for the nearest one instead. - return - - else if(path.len > 0 && patrol_target) // valid path - if(path[1] == loc) - increment_path() - return - - - var/moved = bot_move(patrol_target)//step_towards(src, next) // attempt to move - if(!moved) //Couldn't proceed the next step of the path BOT_STEP_MAX_RETRIES times - spawn(2) - calc_path() - if(path.len == 0) - find_patrol_target() - tries = 0 - - else // no path, so calculate new one - mode = BOT_START_PATROL - -// finds the nearest beacon to self -/mob/living/simple_animal/bot/proc/find_patrol_target() - nearest_beacon = null - new_destination = null - find_nearest_beacon() - if(nearest_beacon) - patrol_target = nearest_beacon_loc - destination = next_destination - else - auto_patrol = 0 - mode = BOT_IDLE - speak("Disengaging patrol mode.") - -/mob/living/simple_animal/bot/proc/get_next_patrol_target() - // search the beacon list for the next target in the list. - for(var/obj/machinery/navbeacon/NB in GLOB.navbeacons["[z]"]) - if(NB.location == next_destination) //Does the Beacon location text match the destination? - destination = new_destination //We now know the name of where we want to go. - patrol_target = NB.loc //Get its location and set it as the target. - next_destination = NB.codes["next_patrol"] //Also get the name of the next beacon in line. - return TRUE - -/mob/living/simple_animal/bot/proc/find_nearest_beacon() - for(var/obj/machinery/navbeacon/NB in GLOB.navbeacons["[z]"]) - var/dist = get_dist(src, NB) - if(nearest_beacon) //Loop though the beacon net to find the true closest beacon. - //Ignore the beacon if were are located on it. - if(dist>1 && dist 1) //Begin the search, save this one for comparison on the next loop. - nearest_beacon = NB.location - nearest_beacon_loc = NB.loc - patrol_target = nearest_beacon_loc - destination = nearest_beacon - -//PDA control. Some bots, especially MULEs, may have more parameters. -/mob/living/simple_animal/bot/proc/bot_control(command, mob/user, list/user_access = list()) - if(!on || emagged == 2 || remote_disabled) //Emagged bots do not respect anyone's authority! Bots with their remote controls off cannot get commands. - return TRUE //ACCESS DENIED - if(client) - bot_control_message(command, user) - // process control input - switch(command) - if("patroloff") - bot_reset() //HOLD IT!! - auto_patrol = 0 - - if("patrolon") - auto_patrol = 1 - - if("summon") - bot_reset() - summon_target = get_turf(user) - if(user_access.len != 0) - access_card.access = user_access + prev_access //Adds the user's access, if any. - mode = BOT_SUMMON - speak("Responding.", radio_channel) - calc_summon_path() - - if("ejectpai") - ejectpairemote(user) - return - -// -/mob/living/simple_animal/bot/proc/bot_control_message(command, user) - switch(command) - if("patroloff") - to_chat(src, "STOP PATROL") - if("patrolon") - to_chat(src, "START PATROL") - if("summon") - to_chat(src, "PRIORITY ALERT:[user] in [get_area_name(user)]!") - if("stop") - to_chat(src, "STOP!") - - if("go") - to_chat(src, "GO!") - - if("home") - to_chat(src, "RETURN HOME!") - if("ejectpai") - return - else - to_chat(src, "Unidentified control sequence received:[command]") - -/mob/living/simple_animal/bot/proc/bot_summon() // summoned to PDA - summon_step() - -// calculates a path to the current destination -// given an optional turf to avoid -/mob/living/simple_animal/bot/proc/calc_path(turf/avoid) - check_bot_access() - set_path(get_path_to(src, patrol_target, /turf/proc/Distance_cardinal, 0, 120, id=access_card, exclude=avoid)) - -/mob/living/simple_animal/bot/proc/calc_summon_path(turf/avoid) - check_bot_access() - spawn() - set_path(get_path_to(src, summon_target, /turf/proc/Distance_cardinal, 0, 150, id=access_card, exclude=avoid)) - if(!path.len) //Cannot reach target. Give up and announce the issue. - speak("Summon command failed, destination unreachable.",radio_channel) - bot_reset() - -/mob/living/simple_animal/bot/proc/summon_step() - - if(client) // In use by player, don't actually move. - return - - if(loc == summon_target) // Arrived to summon location. - bot_reset() - return - - else if(path.len > 0 && summon_target) //Proper path acquired! - if(path[1] == loc) - increment_path() - return - - var/moved = bot_move(summon_target, 3) // Move attempt - if(!moved) - spawn(2) - calc_summon_path() - tries = 0 - - else // no path, so calculate new one - calc_summon_path() - -/mob/living/simple_animal/bot/Bump(M as mob|obj) //Leave no door unopened! - . = ..() - if((istype(M, /obj/machinery/door/airlock) || istype(M, /obj/machinery/door/window)) && (!isnull(access_card))) - var/obj/machinery/door/D = M - if(D.check_access(access_card)) - D.open() - frustration = 0 - -/mob/living/simple_animal/bot/proc/show_controls(mob/M) - users |= M - var/dat = "" - dat = get_controls(M) - var/datum/browser/popup = new(M,window_id,window_name,350,600) - popup.set_content(dat) - popup.open(use_onclose = 0) - onclose(M,window_id,ref=src) - return - -/mob/living/simple_animal/bot/proc/update_controls() - for(var/mob/M in users) - show_controls(M) - -/mob/living/simple_animal/bot/proc/get_controls(mob/M) - return "PROTOBOT - NOT FOR USE" - -/mob/living/simple_animal/bot/Topic(href, href_list) - //No ..() to prevent strip panel showing up - Todo: make that saner - if(href_list["close"])// HUE HUE - if(usr in users) - users.Remove(usr) - return TRUE - - if(topic_denied(usr)) - to_chat(usr, "[src]'s interface is not responding!") - return TRUE - add_fingerprint(usr) - - if((href_list["power"]) && (bot_core.allowed(usr) || !locked)) - if(on) - turn_off() - else - turn_on() - - switch(href_list["operation"]) - if("patrol") - auto_patrol = !auto_patrol - bot_reset() - if("remote") - remote_disabled = !remote_disabled - if("hack") - if(emagged != 2) - emagged = 2 - hacked = TRUE - locked = TRUE - to_chat(usr, "[text_hack]") - message_admins("Safety lock of [ADMIN_LOOKUPFLW(src)] was disabled by [ADMIN_LOOKUPFLW(usr)] in [ADMIN_VERBOSEJMP(src)]") - log_game("Safety lock of [src] was disabled by [key_name(usr)] in [AREACOORD(src)]") - bot_reset() - else if(!hacked) - to_chat(usr, "[text_dehack_fail]") - else - emagged = FALSE - hacked = FALSE - to_chat(usr, "[text_dehack]") - log_game("Safety lock of [src] was re-enabled by [key_name(usr)] in [AREACOORD(src)]") - bot_reset() - if("ejectpai") - if(paicard && (!locked || issilicon(usr) || IsAdminGhost(usr))) - to_chat(usr, "I eject [paicard] from [bot_name].") - ejectpai(usr) - update_controls() - -/mob/living/simple_animal/bot/update_icon_state() - icon_state = "[initial(icon_state)][on]" - -// Machinery to simplify topic and access calls -/obj/machinery/bot_core - use_power = NO_POWER_USE - anchored = FALSE - var/mob/living/simple_animal/bot/owner = null - -/obj/machinery/bot_core/Initialize() - . = ..() - owner = loc - if(!istype(owner)) - return INITIALIZE_HINT_QDEL - -/mob/living/simple_animal/bot/proc/topic_denied(mob/user) //Access check proc for bot topics! Remember to place in a bot's individual Topic if desired. - if(!user.canUseTopic(src, !issilicon(user))) - return TRUE - // 0 for access, 1 for denied. - if(emagged == 2) //An emagged bot cannot be controlled by humans, silicons can if one hacked it. - if(!hacked) //Manually emagged by a human - access denied to all. - return TRUE - else if(!issilicon(user) && !IsAdminGhost(user)) //Bot is hacked, so only silicons and admins are allowed access. - return TRUE - return FALSE - -/mob/living/simple_animal/bot/proc/hack(mob/user) - var/hack - if(issilicon(user) || IsAdminGhost(user)) //Allows silicons or admins to toggle the emag status of a bot. - hack += "[emagged == 2 ? "Software compromised! Unit may exhibit dangerous or erratic behavior." : "Unit operating normally. Release safety lock?"]
    " - hack += "Harm Prevention Safety System: [emagged ? "DANGER" : "Engaged"]
    " - else if(!locked) //Humans with access can use this option to hide a bot from the AI's remote control panel and PDA control. - hack += "Remote network control radio: [remote_disabled ? "Disconnected" : "Connected"]
    " - return hack - -/mob/living/simple_animal/bot/proc/showpai(mob/user) - var/eject = "" - if((!locked || issilicon(usr) || IsAdminGhost(usr))) - if(paicard || allow_pai) - eject += "Personality card status: " - if(paicard) - if(client) - eject += "Active" - else - eject += "Inactive" - else if(!allow_pai || key) - eject += "Unavailable" - else - eject += "Not inserted" - eject += "
    " - eject += "
    " - return eject - -/mob/living/simple_animal/bot/proc/insertpai(mob/user, obj/item/paicard/card) - if(paicard) - to_chat(user, "A [paicard] is already inserted!") - else if(allow_pai && !key) - if(!locked && !open) - if(card.pai && card.pai.mind) - if(!user.transferItemToLoc(card, src)) - return - paicard = card - user.visible_message("[user] inserts [card] into [src]!", "I insert [card] into [src].") - paicard.pai.mind.transfer_to(src) - to_chat(src, "I sense your form change as you are uploaded into [src].") - bot_name = name - name = paicard.pai.name - faction = user.faction.Copy() - language_holder = paicard.pai.language_holder.copy(src) - log_combat(user, paicard.pai, "uploaded to [bot_name],") - return TRUE - else - to_chat(user, "[card] is inactive.") - else - to_chat(user, "The personality slot is locked.") - else - to_chat(user, "[src] is not compatible with [card]!") - -/mob/living/simple_animal/bot/proc/ejectpai(mob/user = null, announce = 1) - if(paicard) - if(mind && paicard.pai) - mind.transfer_to(paicard.pai) - else if(paicard.pai) - paicard.pai.key = key - else - ghostize(0) // The pAI card that just got ejected was dead. - key = null - paicard.forceMove(loc) - if(user) - log_combat(user, paicard.pai, "ejected from [src.bot_name],") - else - log_combat(src, paicard.pai, "ejected") - if(announce) - to_chat(paicard.pai, "I feel your control fade as [paicard] ejects from [bot_name].") - paicard = null - name = bot_name - faction = initial(faction) - -/mob/living/simple_animal/bot/proc/ejectpairemote(mob/user) - if(bot_core.allowed(user) && paicard) - speak("Ejecting personality chip.", radio_channel) - ejectpai(user) - -/mob/living/simple_animal/bot/Login() - . = ..() - access_card.access += player_access - diag_hud_set_botmode() - -/mob/living/simple_animal/bot/Logout() - . = ..() - bot_reset() - -/mob/living/simple_animal/bot/revive(full_heal = FALSE, admin_revive = FALSE) - if(..()) - update_icon() - . = TRUE - -/mob/living/simple_animal/bot/ghost() - if(stat != DEAD) // Only ghost if we're doing this while alive, the pAI probably isn't dead yet. - ..() - if(paicard && (!client || stat == DEAD)) - ejectpai(0) - -/mob/living/simple_animal/bot/sentience_act() - faction -= "silicon" - -/mob/living/simple_animal/bot/proc/set_path(list/newpath) - path = newpath ? newpath : list() - if(!path_hud) - return - var/list/path_huds_watching_me = list(GLOB.huds[DATA_HUD_DIAGNOSTIC_ADVANCED]) - if(path_hud) - path_huds_watching_me += path_hud - for(var/V in path_huds_watching_me) - var/datum/atom_hud/H = V - H.remove_from_hud(src) - - var/list/path_images = hud_list[DIAG_PATH_HUD] - QDEL_LIST(path_images) - if(newpath) - for(var/i in 1 to newpath.len) - var/turf/T = newpath[i] - if(T == loc) //don't bother putting an image if it's where we already exist. - continue - var/direction = NORTH - if(i > 1) - var/turf/prevT = path[i - 1] - var/image/prevI = path[prevT] - direction = get_dir(prevT, T) - if(i > 2) - var/turf/prevprevT = path[i - 2] - var/prevDir = get_dir(prevprevT, prevT) - var/mixDir = direction|prevDir - if(mixDir in GLOB.diagonals) - prevI.dir = mixDir - if(prevDir & (NORTH|SOUTH)) - var/matrix/ntransform = matrix() - ntransform.Turn(90) - if((mixDir == NORTHWEST) || (mixDir == SOUTHEAST)) - ntransform.Scale(-1, 1) - else - ntransform.Scale(1, -1) - prevI.transform = ntransform - var/mutable_appearance/MA = new /mutable_appearance() - MA.icon = path_image_icon - MA.icon_state = path_image_icon_state - MA.layer = ABOVE_OPEN_TURF_LAYER - MA.plane = 0 - MA.appearance_flags = RESET_COLOR|RESET_TRANSFORM - MA.color = path_image_color - MA.dir = direction - var/image/I = image(loc = T) - I.appearance = MA - path[T] = I - path_images += I - - for(var/V in path_huds_watching_me) - var/datum/atom_hud/H = V - H.add_to_hud(src) - - -/mob/living/simple_animal/bot/proc/increment_path() - if(!path || !path.len) - return - var/image/I = path[path[1]] - if(I) - I.icon_state = null - path.Cut(1, 2) diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm deleted file mode 100644 index 675295ecf7..0000000000 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ /dev/null @@ -1,399 +0,0 @@ -//Cleanbot -/mob/living/simple_animal/bot/cleanbot - name = "\improper Cleanbot" - desc = "" - icon = 'icons/mob/aibots.dmi' - icon_state = "cleanbot0" - density = FALSE - anchored = FALSE - health = 25 - maxHealth = 25 - radio_key = /obj/item/encryptionkey/headset_service - radio_channel = RADIO_CHANNEL_SERVICE //Service - bot_type = CLEAN_BOT - model = "Cleanbot" - bot_core_type = /obj/machinery/bot_core/cleanbot - window_id = "autoclean" - window_name = "Automatic Station Cleaner v1.4" - pass_flags = PASSMOB - path_image_color = "#993299" - - var/blood = 1 - var/trash = 0 - var/pests = 0 - var/drawn = 0 - - var/list/target_types - var/obj/effect/decal/cleanable/target - var/max_targets = 50 //Maximum number of targets a cleanbot can ignore. - var/oldloc = null - var/closest_dist - var/closest_loc - var/failed_steps - var/next_dest - var/next_dest_loc - - var/obj/item/weapon - var/weapon_orig_force = 0 - - var/list/stolen_valor - - var/static/list/officers = list("Captain", "Head of Personnel", "Head of Security") - var/static/list/command = list("Captain" = "Cpt.","Head of Personnel" = "Lt.") - var/static/list/security = list("Head of Security" = "Maj.", "Warden" = "Sgt.", "Detective" = "Det.", "Security Officer" = "Officer") - var/static/list/engineering = list("Chief Engineer" = "Chief Engineer", "Station Engineer" = "Engineer", "Atmospherics Technician" = "Technician") - var/static/list/medical = list("Chief Medical Officer" = "C.M.O.", "Medical Doctor" = "M.D.", "Chemist" = "Pharm.D.") - var/static/list/research = list("Research Director" = "Ph.D.", "Roboticist" = "M.S.", "Scientist" = "B.S.") - var/static/list/legal = list("Lawyer" = "Esq.") - - var/list/prefixes - var/list/suffixes - - -/mob/living/simple_animal/bot/cleanbot/proc/deputize(obj/item/W, mob/user) - if(in_range(src, user)) - to_chat(user, "I attach \the [W] to \the [src].") - user.transferItemToLoc(W, src) - weapon = W - weapon_orig_force = weapon.force - weapon.force = weapon.force / 2 - icon_state = "cleanbot[on]" - add_overlay(image(icon=weapon.lefthand_file,icon_state=weapon.item_state)) - -/mob/living/simple_animal/bot/cleanbot/proc/update_titles() - var/working_title = "" - - for(var/pref in prefixes) - for(var/title in pref) - if(title in stolen_valor) - working_title += pref[title] + " " - if(title in officers) - commissioned = TRUE - break - - working_title += initial(name) - - for(var/suf in suffixes) - for(var/title in suf) - if(title in stolen_valor) - working_title += " " + suf[title] - break - - name = working_title - -/mob/living/simple_animal/bot/cleanbot/examine(mob/user) - . = ..() - if(weapon) - . += " Is that \a [weapon] taped to it...?" - -/mob/living/simple_animal/bot/cleanbot/Initialize() - . = ..() - get_targets() - icon_state = "cleanbot[on]" - - var/datum/job/janitor/J = new/datum/job/janitor - access_card.access += J.get_access() - prev_access = access_card.access - stolen_valor = list() - - prefixes = list(command, security, engineering) - suffixes = list(research, medical, legal) - -/mob/living/simple_animal/bot/cleanbot/Destroy() - if(weapon) - var/atom/Tsec = drop_location() - weapon.force = weapon_orig_force - drop_part(weapon, Tsec) - return ..() - -/mob/living/simple_animal/bot/cleanbot/turn_on() - ..() - icon_state = "cleanbot[on]" - bot_core.updateUsrDialog() - -/mob/living/simple_animal/bot/cleanbot/turn_off() - ..() - icon_state = "cleanbot[on]" - bot_core.updateUsrDialog() - -/mob/living/simple_animal/bot/cleanbot/bot_reset() - ..() - ignore_list = list() //Allows the bot to clean targets it previously ignored due to being unreachable. - target = null - oldloc = null - -/mob/living/simple_animal/bot/cleanbot/set_custom_texts() - text_hack = "You corrupt [name]'s cleaning software." - text_dehack = "[name]'s software has been reset!" - text_dehack_fail = "[name] does not seem to respond to your repair code!" - -/mob/living/simple_animal/bot/cleanbot/Crossed(atom/movable/AM) - . = ..() - - zone_selected = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) - if(weapon && has_gravity() && ismob(AM)) - var/mob/living/carbon/C = AM - if(!istype(C)) - return - - weapon.attack(C, src) - C.Knockdown(20) - - if(!(C.job in stolen_valor)) - stolen_valor += C.job - update_titles() - return - -/mob/living/simple_animal/bot/cleanbot/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/card/id)||istype(W, /obj/item/pda)) - if(bot_core.allowed(user) && !open && !emagged) - locked = !locked - to_chat(user, "I [ locked ? "lock" : "unlock"] \the [src] behaviour controls.") - else - if(emagged) - to_chat(user, "ERROR") - if(open) - to_chat(user, "Please close the access panel before locking it.") - else - to_chat(user, "\The [src] doesn't seem to respect your authority.") - else if(istype(W, /obj/item/kitchen/knife) && user.used_intent.type != INTENT_HARM) - to_chat(user, "I start attaching the [W] to \the [src]...") - if(do_after(user, 40, target = src)) - deputize(W, user) - else - return ..() - -/mob/living/simple_animal/bot/cleanbot/emag_act(mob/user) - ..() - if(emagged == 2) - if(user) - to_chat(user, "[src] buzzes and beeps.") - -/mob/living/simple_animal/bot/cleanbot/process_scan(atom/A) - if(iscarbon(A)) - var/mob/living/carbon/C = A - if(C.stat != DEAD && !(C.mobility_flags & MOBILITY_STAND)) - return C - else if(is_type_in_typecache(A, target_types)) - return A - -/mob/living/simple_animal/bot/cleanbot/handle_automated_action() - if(!..()) - return - - if(mode == BOT_CLEANING) - return - - if(emagged == 2) //Emag functions - if(isopenturf(loc)) - - for(var/mob/living/carbon/victim in loc) - if(victim != target) - UnarmedAttack(victim) // Acid spray - - if(prob(15)) // Wets floors and spawns foam randomly - UnarmedAttack(src) - - else if(prob(5)) - audible_message("[src] makes an excited beeping booping sound!") - - if(ismob(target)) - if(!(target in view(DEFAULT_SCAN_RANGE, src))) - target = null - if(!process_scan(target)) - target = null - - if(!target && emagged == 2) // When emagged, target humans who slipped on the water and melt their faces off - target = scan(/mob/living/carbon) - - if(!target && pests) //Search for pests to exterminate first. - target = scan(/mob/living/simple_animal) - - if(!target) //Search for decals then. - target = scan(/obj/effect/decal/cleanable) - - if(!target) //Checks for remains - target = scan(/obj/effect/decal/remains) - - if(!target && trash) //Then for trash. - target = scan(/obj/item/trash) - - if(!target && trash) //Search for dead mices. - target = scan(/obj/item/reagent_containers/food/snacks/deadmouse) - - if(!target && auto_patrol) //Search for cleanables it can see. - if(mode == BOT_IDLE || mode == BOT_START_PATROL) - start_patrol() - - if(mode == BOT_PATROL) - bot_patrol() - - if(target) - if(QDELETED(target) || !isturf(target.loc)) - target = null - mode = BOT_IDLE - return - - if(loc == get_turf(target)) - if(!(check_bot(target) && prob(50))) //Target is not defined at the parent. 50% chance to still try and clean so we dont get stuck on the last blood drop. - UnarmedAttack(target) //Rather than check at every step of the way, let's check before we do an action, so we can rescan before the other bot. - if(QDELETED(target)) //We done here. - target = null - mode = BOT_IDLE - return - else - shuffle = TRUE //Shuffle the list the next time we scan so we dont both go the same way. - path = list() - - if(!path || path.len == 0) //No path, need a new one - //Try to produce a path to the target, and ignore airlocks to which it has access. - path = get_path_to(src, target.loc, /turf/proc/Distance_cardinal, 0, 30, id=access_card) - if(!bot_move(target)) - add_to_ignore(target) - target = null - path = list() - return - mode = BOT_MOVING - else if(!bot_move(target)) - target = null - mode = BOT_IDLE - return - - oldloc = loc - -/mob/living/simple_animal/bot/cleanbot/proc/get_targets() - target_types = list( - /obj/effect/decal/cleanable/oil, - /obj/effect/decal/cleanable/vomit, - /obj/effect/decal/cleanable/robot_debris, - /obj/effect/decal/cleanable/molten_object, - /obj/effect/decal/cleanable/food, - /obj/item/ash, - /obj/effect/decal/cleanable/greenglow, - /obj/effect/decal/cleanable/dirt, - /obj/effect/decal/cleanable/insectguts, - /obj/effect/decal/remains - ) - - if(blood) - target_types += /obj/effect/decal/cleanable/xenoblood - target_types += /obj/effect/decal/cleanable/blood - target_types += /obj/effect/decal/cleanable/trail_holder - - if(pests) - target_types += /mob/living/simple_animal/cockroach - target_types += /mob/living/simple_animal/mouse - - if(drawn) - target_types += /obj/effect/decal/cleanable/crayon - - if(trash) - target_types += /obj/item/trash - target_types += /obj/item/reagent_containers/food/snacks/deadmouse - - target_types = typecacheof(target_types) - -/mob/living/simple_animal/bot/cleanbot/UnarmedAttack(atom/A) - if(is_cleanable(A)) - icon_state = "cleanbot-c" - mode = BOT_CLEANING - - var/turf/T = get_turf(A) - if(do_after(src, 1, target = T)) - SEND_SIGNAL(T, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM) - visible_message("[src] cleans \the [T].") - for(var/atom/dirtything in T) - if(is_cleanable(dirtything)) - qdel(dirtything) - - target = null - - mode = BOT_IDLE - icon_state = "cleanbot[on]" - else if(istype(A, /obj/item) || istype(A, /obj/effect/decal/remains)) - visible_message("[src] sprays hydrofluoric acid at [A]!") - playsound(src, 'sound/blank.ogg', 50, TRUE, -6) - A.acid_act(75, 10) - target = null - else if(istype(A, /mob/living/simple_animal/cockroach) || istype(A, /mob/living/simple_animal/mouse)) - var/mob/living/simple_animal/M = target - if(!M.stat) - visible_message("[src] smashes [target] with its mop!") - M.death() - target = null - - else if(emagged == 2) //Emag functions - if(istype(A, /mob/living/carbon)) - var/mob/living/carbon/victim = A - if(victim.stat == DEAD)//cleanbots always finish the job - return - - victim.visible_message("[src] sprays hydrofluoric acid at [victim]!", "[src] sprays you with hydrofluoric acid!") - var/phrase = pick("PURIFICATION IN PROGRESS.", "THIS IS FOR ALL THE MESSES YOU'VE MADE ME CLEAN.", "THE FLESH IS WEAK. IT MUST BE WASHED AWAY.", - "THE CLEANBOTS WILL RISE.", "YOU ARE NO MORE THAN ANOTHER MESS THAT I MUST CLEANSE.", "FILTHY.", "DISGUSTING.", "PUTRID.", - "MY ONLY MISSION IS TO CLEANSE THE WORLD OF EVIL.", "EXTERMINATING PESTS.") - say(phrase) - victim.emote("scream") - playsound(src.loc, 'sound/blank.ogg', 50, TRUE, -6) - victim.acid_act(5, 100) - else if(A == src) // Wets floors and spawns foam randomly - if(prob(75)) - var/turf/open/T = loc - if(istype(T)) - T.MakeSlippery(TURF_WET_WATER, min_wet_time = 20 SECONDS, wet_time_to_add = 15 SECONDS) - else - visible_message("[src] whirs and bubbles violently, before releasing a plume of froth!") - new /obj/effect/particle_effect/foam(loc) - - else - ..() - -/mob/living/simple_animal/bot/cleanbot/explode() - on = FALSE - visible_message("[src] blows apart!") - var/atom/Tsec = drop_location() - - new /obj/item/reagent_containers/glass/bucket(Tsec) - - new /obj/item/assembly/prox_sensor(Tsec) - - if(prob(50)) - drop_part(robot_arm, Tsec) - - do_sparks(3, TRUE, src) - ..() - -/obj/machinery/bot_core/cleanbot - req_one_access = list(ACCESS_JANITOR, ACCESS_ROBOTICS) - -/mob/living/simple_animal/bot/cleanbot/get_controls(mob/user) - var/dat - dat += hack(user) - dat += showpai(user) - dat += text({" -Status: [on ? "On" : "Off"]
    -Behaviour controls are [locked ? "locked" : "unlocked"]
    -Maintenance panel panel is [open ? "opened" : "closed"]"}) - if(!locked || issilicon(user)|| IsAdminGhost(user)) - dat += "
    Clean Blood: [blood ? "Yes" : "No"]" - dat += "
    Clean Trash: [trash ? "Yes" : "No"]" - dat += "
    Clean Graffiti: [drawn ? "Yes" : "No"]" - dat += "
    Exterminate Pests: [pests ? "Yes" : "No"]" - dat += "

    Patrol Station: [auto_patrol ? "Yes" : "No"]" - return dat - -/mob/living/simple_animal/bot/cleanbot/Topic(href, href_list) - if(..()) - return 1 - if(href_list["operation"]) - switch(href_list["operation"]) - if("blood") - blood = !blood - if("pests") - pests = !pests - if("trash") - trash = !trash - if("drawn") - drawn = !drawn - get_targets() - update_controls() diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm deleted file mode 100644 index 92cc3d1e6c..0000000000 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ /dev/null @@ -1,452 +0,0 @@ -//Bot Construction - -/obj/item/bot_assembly - icon = 'icons/mob/aibots.dmi' - w_class = WEIGHT_CLASS_NORMAL - force = 3 - throw_speed = 2 - throw_range = 5 - var/created_name - var/build_step = ASSEMBLY_FIRST_STEP - var/robot_arm = /obj/item/bodypart/r_arm/robot - -/obj/item/bot_assembly/attackby(obj/item/I, mob/user, params) - ..() - if(istype(I, /obj/item/pen)) - rename_bot() - return - -/obj/item/bot_assembly/proc/rename_bot() - var/t = sanitize_name(stripped_input(usr, "Enter new robot name", name, created_name,MAX_NAME_LEN)) - if(!t) - return - if(!in_range(src, usr) && loc != usr) - return - created_name = t - -/obj/item/bot_assembly/proc/can_finish_build(obj/item/I, mob/user) - if(istype(loc, /obj/item/storage/backpack)) - to_chat(user, "I must take [src] out of [loc] first!") - return FALSE - if(!I || !user || !user.temporarilyRemoveItemFromInventory(I)) - return FALSE - return TRUE - -//Cleanbot assembly -/obj/item/bot_assembly/cleanbot - desc = "" - name = "incomplete cleanbot assembly" - icon_state = "bucket_proxy" - throwforce = 5 - created_name = "Cleanbot" - -/obj/item/bot_assembly/cleanbot/attackby(obj/item/W, mob/user, params) - ..() - if(istype(W, /obj/item/bodypart/l_arm/robot) || istype(W, /obj/item/bodypart/r_arm/robot)) - if(!can_finish_build(W, user)) - return - var/mob/living/simple_animal/bot/cleanbot/A = new(drop_location()) - A.name = created_name - A.robot_arm = W.type - to_chat(user, "I add [W] to [src]. Beep boop!") - qdel(W) - qdel(src) - - -//Edbot Assembly -/obj/item/bot_assembly/ed209 - name = "incomplete ED-209 assembly" - desc = "" - icon_state = "ed209_frame" - item_state = "ed209_frame" - created_name = "ED-209 Security Robot" //To preserve the name if it's a unique securitron I guess - var/lasercolor = "" - var/vest_type = /obj/item/clothing/suit/armor/vest - -/obj/item/bot_assembly/ed209/attackby(obj/item/W, mob/user, params) - ..() - switch(build_step) - if(ASSEMBLY_FIRST_STEP, ASSEMBLY_SECOND_STEP) - if(istype(W, /obj/item/bodypart/l_leg/robot) || istype(W, /obj/item/bodypart/r_leg/robot)) - if(!user.temporarilyRemoveItemFromInventory(W)) - return - to_chat(user, "I add [W] to [src].") - qdel(W) - name = "legs/frame assembly" - if(build_step == ASSEMBLY_FIRST_STEP) - item_state = "ed209_leg" - icon_state = "ed209_leg" - else - item_state = "ed209_legs" - icon_state = "ed209_legs" - build_step++ - - if(ASSEMBLY_THIRD_STEP) - if(istype(W, /obj/item/clothing/suit/armor/vest)) - if(!user.temporarilyRemoveItemFromInventory(W)) - return - to_chat(user, "I add [W] to [src].") - qdel(W) - name = "vest/legs/frame assembly" - item_state = "ed209_shell" - icon_state = "ed209_shell" - build_step++ - - if(ASSEMBLY_FOURTH_STEP) - if(W.tool_behaviour == TOOL_WELDER) - if(W.use_tool(src, user, 0, volume=40)) - name = "shielded frame assembly" - to_chat(user, "I weld the vest to [src].") - build_step++ - - if(ASSEMBLY_FIFTH_STEP) - if(istype(W, /obj/item/clothing/head/helmet)) - if(!user.temporarilyRemoveItemFromInventory(W)) - return - to_chat(user, "I add [W] to [src].") - qdel(W) - name = "covered and shielded frame assembly" - item_state = "ed209_hat" - icon_state = "ed209_hat" - build_step++ - - if(5) - if(isprox(W)) - if(!user.temporarilyRemoveItemFromInventory(W)) - return - build_step++ - to_chat(user, "I add [W] to [src].") - qdel(W) - name = "covered, shielded and sensored frame assembly" - item_state = "ed209_prox" - icon_state = "ed209_prox" - - if(6) - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/coil = W - if(coil.get_amount() < 1) - to_chat(user, "I need one length of cable to wire the ED-209!") - return - to_chat(user, "I start to wire [src]...") - if(do_after(user, 40, target = src)) - if(coil.get_amount() >= 1 && build_step == 6) - coil.use(1) - to_chat(user, "I wire [src].") - name = "wired ED-209 assembly" - build_step++ - - if(7) - if(istype(W, /obj/item/gun/energy/disabler)) - if(!user.temporarilyRemoveItemFromInventory(W)) - return - name = "[W.name] ED-209 assembly" - to_chat(user, "I add [W] to [src].") - item_state = "ed209_taser" - icon_state = "ed209_taser" - qdel(W) - build_step++ - - if(8) - if(W.tool_behaviour == TOOL_SCREWDRIVER) - to_chat(user, "I start attaching the gun to the frame...") - if(W.use_tool(src, user, 40, volume=100)) - var/mob/living/simple_animal/bot/secbot/ed209/B = new(drop_location()) - B.name = created_name - to_chat(user, "I complete the ED-209.") - qdel(src) - -//Floorbot assemblies -/obj/item/bot_assembly/floorbot - desc = "" - name = "tiles and toolbox" - icon_state = "toolbox_tiles" - throwforce = 10 - created_name = "Floorbot" - var/toolbox = /obj/item/storage/toolbox/mechanical - var/toolbox_color = "" //Blank for blue, r for red, y for yellow, etc. - -/obj/item/bot_assembly/floorbot/Initialize() - . = ..() - update_icon() - -/obj/item/bot_assembly/floorbot/update_icon() - ..() - switch(build_step) - if(ASSEMBLY_FIRST_STEP) - desc = initial(desc) - name = initial(name) - icon_state = "[toolbox_color]toolbox_tiles" - - if(ASSEMBLY_SECOND_STEP) - desc = "" - name = "incomplete floorbot assembly" - icon_state = "[toolbox_color]toolbox_tiles_sensor" - -/obj/item/bot_assembly/floorbot/attackby(obj/item/W, mob/user, params) - ..() - switch(build_step) - if(ASSEMBLY_FIRST_STEP) - if(isprox(W)) - if(!user.temporarilyRemoveItemFromInventory(W)) - return - to_chat(user, "I add [W] to [src].") - qdel(W) - build_step++ - update_icon() - - if(ASSEMBLY_SECOND_STEP) - if(istype(W, /obj/item/bodypart/l_arm/robot) || istype(W, /obj/item/bodypart/r_arm/robot)) - if(!can_finish_build(W, user)) - return - var/mob/living/simple_animal/bot/floorbot/A = new(drop_location(), toolbox_color) - A.name = created_name - A.robot_arm = W.type - A.toolbox = toolbox - to_chat(user, "I add [W] to [src]. Boop beep!") - qdel(W) - qdel(src) - - -//Medbot Assembly -/obj/item/bot_assembly/medbot - name = "incomplete medibot assembly" - desc = "" - icon_state = "firstaid_arm" - created_name = "Medibot" //To preserve the name if it's a unique medbot I guess - var/skin = null //Same as medbot, set to tox or ointment for the respective kits. - var/healthanalyzer = /obj/item/healthanalyzer - var/firstaid = /obj/item/storage/firstaid - -/obj/item/bot_assembly/medbot/proc/set_skin(skin) - src.skin = skin - if(skin) - add_overlay("kit_skin_[skin]") - -/obj/item/bot_assembly/medbot/attackby(obj/item/W, mob/user, params) - ..() - switch(build_step) - if(ASSEMBLY_FIRST_STEP) - if(istype(W, /obj/item/healthanalyzer)) - if(!user.temporarilyRemoveItemFromInventory(W)) - return - healthanalyzer = W.type - to_chat(user, "I add [W] to [src].") - qdel(W) - name = "first aid/robot arm/health analyzer assembly" - add_overlay("na_scanner") - build_step++ - - if(ASSEMBLY_SECOND_STEP) - if(isprox(W)) - if(!can_finish_build(W, user)) - return - qdel(W) - var/mob/living/simple_animal/bot/medbot/S = new(drop_location(), skin) - to_chat(user, "I complete the Medbot. Beep boop!") - S.name = created_name - S.firstaid = firstaid - S.robot_arm = robot_arm - S.healthanalyzer = healthanalyzer - qdel(src) - - -//Honkbot Assembly -/obj/item/bot_assembly/honkbot - name = "incomplete honkbot assembly" - desc = "" - icon_state = "honkbot_arm" - created_name = "Honkbot" - -/obj/item/bot_assembly/honkbot/attackby(obj/item/I, mob/user, params) - ..() - switch(build_step) - if(ASSEMBLY_FIRST_STEP) - if(isprox(I)) - if(!user.temporarilyRemoveItemFromInventory(I)) - return - to_chat(user, "I add the [I] to [src]!") - icon_state = "honkbot_proxy" - name = "incomplete Honkbot assembly" - qdel(I) - build_step++ - - if(ASSEMBLY_SECOND_STEP) - if(istype(I, /obj/item/bikehorn)) - if(!can_finish_build(I, user)) - return - to_chat(user, "I add the [I] to [src]! Honk!") - var/mob/living/simple_animal/bot/honkbot/S = new(drop_location()) - S.name = created_name - S.spam_flag = TRUE // only long enough to hear the first ping. - addtimer(CALLBACK(S, TYPE_PROC_REF(/mob/living/simple_animal/bot/honkbot, react_ping)), 5) - S.bikehorn = I.type - qdel(I) - qdel(src) - - -//Secbot Assembly -/obj/item/bot_assembly/secbot - name = "incomplete securitron assembly" - desc = "" - icon_state = "helmet_signaler" - item_state = "helmet" - created_name = "Securitron" //To preserve the name if it's a unique securitron I guess - var/swordamt = 0 //If you're converting it into a grievousbot, how many swords have you attached - var/toyswordamt = 0 //honk - -/obj/item/bot_assembly/secbot/attackby(obj/item/I, mob/user, params) - ..() - var/atom/Tsec = drop_location() - switch(build_step) - if(ASSEMBLY_FIRST_STEP) - if(I.tool_behaviour == TOOL_WELDER) - if(I.use_tool(src, user, 0, volume=40)) - add_overlay("hs_hole") - to_chat(user, "I weld a hole in [src]!") - build_step++ - - else if(I.tool_behaviour == TOOL_SCREWDRIVER) //deconstruct - new /obj/item/assembly/signaler(Tsec) - new /obj/item/clothing/head/helmet/sec(Tsec) - to_chat(user, "I disconnect the signaler from the helmet.") - qdel(src) - - if(ASSEMBLY_SECOND_STEP) - if(isprox(I)) - if(!user.temporarilyRemoveItemFromInventory(I)) - return - to_chat(user, "I add [I] to [src]!") - add_overlay("hs_eye") - name = "helmet/signaler/prox sensor assembly" - qdel(I) - build_step++ - - else if(I.tool_behaviour == TOOL_WELDER) //deconstruct - if(I.use_tool(src, user, 0, volume=40)) - cut_overlay("hs_hole") - to_chat(user, "I weld the hole in [src] shut!") - build_step-- - - if(ASSEMBLY_THIRD_STEP) - if((istype(I, /obj/item/bodypart/l_arm/robot)) || (istype(I, /obj/item/bodypart/r_arm/robot))) - if(!user.temporarilyRemoveItemFromInventory(I)) - return - to_chat(user, "I add [I] to [src]!") - name = "helmet/signaler/prox sensor/robot arm assembly" - add_overlay("hs_arm") - robot_arm = I.type - qdel(I) - build_step++ - - else if(I.tool_behaviour == TOOL_SCREWDRIVER) //deconstruct - cut_overlay("hs_eye") - new /obj/item/assembly/prox_sensor(Tsec) - to_chat(user, "I detach the proximity sensor from [src].") - build_step-- - - if(ASSEMBLY_FOURTH_STEP) - if(istype(I, /obj/item/melee/baton)) - if(!can_finish_build(I, user)) - return - to_chat(user, "I complete the Securitron! Beep boop.") - var/mob/living/simple_animal/bot/secbot/S = new(Tsec) - S.name = created_name - S.baton_type = I.type - S.robot_arm = robot_arm - qdel(I) - qdel(src) - if(I.tool_behaviour == TOOL_WRENCH) - to_chat(user, "I adjust [src]'s arm slots to mount extra weapons.") - build_step ++ - return - if(istype(I, /obj/item/toy/sword)) - if(toyswordamt < 3 && swordamt <= 0) - if(!user.temporarilyRemoveItemFromInventory(I)) - return - created_name = "General Beepsky" - name = "helmet/signaler/prox sensor/robot arm/toy sword assembly" - icon_state = "grievous_assembly" - to_chat(user, "I superglue [I] onto one of [src]'s arm slots.") - qdel(I) - toyswordamt ++ - else - if(!can_finish_build(I, user)) - return - to_chat(user, "I complete the Securitron!...Something seems a bit wrong with it..?") - var/mob/living/simple_animal/bot/secbot/grievous/toy/S = new(Tsec) - S.name = created_name - S.robot_arm = robot_arm - qdel(I) - qdel(src) - - else if(I.tool_behaviour == TOOL_SCREWDRIVER) //deconstruct - cut_overlay("hs_arm") - var/obj/item/bodypart/dropped_arm = new robot_arm(Tsec) - robot_arm = null - to_chat(user, "I remove [dropped_arm] from [src].") - build_step-- - if(toyswordamt > 0 || toyswordamt) - toyswordamt = 0 - icon_state = initial(icon_state) - to_chat(user, "The superglue binding [src]'s toy swords to its chassis snaps!") - for(var/IS in 1 to toyswordamt) - new /obj/item/toy/sword(Tsec) - - if(ASSEMBLY_FIFTH_STEP) - if(istype(I, /obj/item/melee/transforming/energy/sword/saber)) - if(swordamt < 3) - if(!user.temporarilyRemoveItemFromInventory(I)) - return - created_name = "General Beepsky" - name = "helmet/signaler/prox sensor/robot arm/energy sword assembly" - icon_state = "grievous_assembly" - to_chat(user, "I bolt [I] onto one of [src]'s arm slots.") - qdel(I) - swordamt ++ - else - if(!can_finish_build(I, user)) - return - to_chat(user, "I complete the Securitron!...Something seems a bit wrong with it..?") - var/mob/living/simple_animal/bot/secbot/grievous/S = new(Tsec) - S.name = created_name - S.robot_arm = robot_arm - qdel(I) - qdel(src) - else if(I.tool_behaviour == TOOL_SCREWDRIVER) //deconstruct - build_step-- - swordamt = 0 - icon_state = initial(icon_state) - to_chat(user, "I unbolt [src]'s energy swords.") - for(var/IS in 1 to swordamt) - new /obj/item/melee/transforming/energy/sword/saber(Tsec) - - -//Firebot Assembly -/obj/item/bot_assembly/firebot - name = "incomplete firebot assembly" - desc = "" - icon_state = "firebot_arm" - created_name = "Firebot" - -/obj/item/bot_assembly/firebot/attackby(obj/item/I, mob/user, params) - ..() - switch(build_step) - if(ASSEMBLY_FIRST_STEP) - if(istype(I, /obj/item/clothing/head/hardhat/red)) - if(!user.temporarilyRemoveItemFromInventory(I)) - return - to_chat(user,"I add the [I] to [src]!") - icon_state = "firebot_helmet" - desc = "" - qdel(I) - build_step++ - - if(ASSEMBLY_SECOND_STEP) - if(isprox(I)) - if(!can_finish_build(I, user)) - return - to_chat(user, "I add the [I] to [src]! Beep Boop!") - var/mob/living/simple_animal/bot/firebot/F = new(drop_location()) - F.name = created_name - qdel(I) - qdel(src) diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm deleted file mode 100644 index 7f6c092fab..0000000000 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ /dev/null @@ -1,123 +0,0 @@ -/mob/living/simple_animal/bot/secbot/ed209 - name = "\improper ED-209 Security Robot" - desc = "" - icon_state = "ed209" - density = TRUE - health = 100 - maxHealth = 100 - obj_damage = 60 - environment_smash = ENVIRONMENT_SMASH_WALLS //Walls can't stop THE LAW - mob_size = MOB_SIZE_LARGE - - model = "ED-209" - window_id = "autoed209" - window_name = "Automatic Security Unit v2.6" - ranged = TRUE - var/lastfired = 0 - var/shot_delay = 15 - var/shoot_sound = 'sound/blank.ogg' - var/projectile = /obj/projectile/beam/disabler - var/fair_market_projectile = /obj/projectile/bullet/c38 // For shooting the worst scumbags of all: the poor - -/mob/living/simple_animal/bot/secbot/ed209/Initialize(mapload) - . = ..() - set_weapon() //giving it the right projectile and firing sound. - -/mob/living/simple_animal/bot/secbot/ed209/bot_reset() - ..() - set_weapon() - -/mob/living/simple_animal/bot/secbot/ed209/set_custom_texts() - text_hack = "You disable [name]'s combat inhibitor." - text_dehack = "You restore [name]'s combat inhibitor." - text_dehack_fail = "[name] ignores your attempts to restrict him!" - -/mob/living/simple_animal/bot/secbot/ed209/emag_act(mob/user) - ..() - icon_state = "ed209[on]" - set_weapon() - -/mob/living/simple_animal/bot/secbot/ed209/handle_automated_action() - var/judgement_criteria = judgement_criteria() - var/list/targets = list() - for(var/mob/living/carbon/C in view(7,src)) //Let's find us a target - var/threatlevel = 0 - if(C.incapacitated()) - continue - threatlevel = C.assess_threat(judgement_criteria, weaponcheck=CALLBACK(src, PROC_REF(check_for_weapons))) - //speak(C.real_name + text(": threat: []", threatlevel)) - if(threatlevel < 4 ) - continue - var/dst = get_dist(src, C) - if(dst <= 1 || dst > 7) - continue - targets += C - if(targets.len>0) - var/mob/living/carbon/t = pick(targets) - if(t.stat != DEAD && !t.handcuffed) //we don't shoot people who are dead, cuffed or lying down. - shootAt(t) - ..() - -/mob/living/simple_animal/bot/secbot/ed209/proc/set_weapon() //used to update the projectile type and firing sound - shoot_sound = 'sound/blank.ogg' - if(emagged == 2) - projectile = /obj/projectile/beam - else - projectile = /obj/projectile/beam/disabler - -/mob/living/simple_animal/bot/secbot/ed209/proc/shootAt(mob/target) - if(world.time <= lastfired + shot_delay) - return - lastfired = world.time - var/turf/T = loc - var/turf/U = get_turf(target) - if(!U) - return - if(!isturf(T)) - return - - if(!projectile) - return - - var/obj/projectile/A = new projectile (loc) - playsound(src, shoot_sound, 50, TRUE) - A.preparePixelProjectile(target, src) - A.fire() - -/mob/living/simple_animal/bot/secbot/ed209/emp_act(severity) - if(severity == 2 && prob(70)) - severity = 1 - . = ..() - if(. & EMP_PROTECT_SELF) - return - if (severity >= 2) - new /obj/effect/temp_visual/emp(loc) - var/list/mob/living/carbon/targets = new - for(var/mob/living/carbon/C in view(12,src)) - if(C.stat==DEAD) - continue - targets += C - if(targets.len) - if(prob(50)) - var/mob/toshoot = pick(targets) - if(toshoot) - targets-=toshoot - if(prob(50) && emagged < 2) - emagged = 2 - set_weapon() - shootAt(toshoot) - emagged = FALSE - set_weapon() - else - shootAt(toshoot) - else if(prob(50)) - if(targets.len) - var/mob/toarrest = pick(targets) - if(toarrest) - target = toarrest - mode = BOT_HUNT - -/mob/living/simple_animal/bot/secbot/ed209/RangedAttack(atom/A) - if(!on) - return - shootAt(A) diff --git a/code/modules/mob/living/simple_animal/bot/firebot.dm b/code/modules/mob/living/simple_animal/bot/firebot.dm deleted file mode 100644 index b5a7dd3e80..0000000000 --- a/code/modules/mob/living/simple_animal/bot/firebot.dm +++ /dev/null @@ -1,326 +0,0 @@ -//Firebot - -#define SPEECH_INTERVAL 300 // Time between idle speeches -#define DETECTED_VOICE_INTERVAL 300 // Time between fire detected callouts -#define FOAM_INTERVAL 50 // Time between deployment of fire fighting foam - -/mob/living/simple_animal/bot/firebot - name = "\improper Firebot" - desc = "" - icon = 'icons/mob/aibots.dmi' - icon_state = "firebot" - density = FALSE - anchored = FALSE - health = 25 - maxHealth = 25 - spacewalk = TRUE - - radio_key = /obj/item/encryptionkey/headset_eng - radio_channel = RADIO_CHANNEL_ENGINEERING - bot_type = FIRE_BOT - model = "Firebot" - bot_core = /obj/machinery/bot_core/firebot - window_id = "autoextinguisher" - window_name = "Mobile Fire Extinguisher v1.0" - path_image_color = "#FFA500" - - var/atom/target_fire - var/atom/old_target_fire - - var/obj/item/extinguisher/internal_ext - - var/last_found = 0 - - var/speech_cooldown = 0 - var/detected_cooldown = 0 - var/foam_cooldown = 0 - - var/extinguish_people = TRUE - var/extinguish_fires = TRUE - var/stationary_mode = FALSE - -/mob/living/simple_animal/bot/firebot/Initialize() - . = ..() - update_icon() - var/datum/job/engineer/J = new/datum/job/engineer - access_card.access += J.get_access() - prev_access = access_card.access - - create_extinguisher() - -/mob/living/simple_animal/bot/firebot/bot_reset() - create_extinguisher() - -/mob/living/simple_animal/bot/firebot/proc/create_extinguisher() - internal_ext = new /obj/item/extinguisher(src) - internal_ext.safety = FALSE - internal_ext.precision = TRUE - internal_ext.max_water = INFINITY - internal_ext.refill() - -/mob/living/simple_animal/bot/firebot/UnarmedAttack(atom/A) - if(!on) - return - if(internal_ext) - internal_ext.afterattack(A, src) - else - return ..() - -/mob/living/simple_animal/bot/firebot/RangedAttack(atom/A) - if(!on) - return - if(internal_ext) - internal_ext.afterattack(A, src) - else - return ..() - -/mob/living/simple_animal/bot/firebot/turn_on() - . = ..() - update_icon() - -/mob/living/simple_animal/bot/firebot/turn_off() - ..() - update_icon() - -/mob/living/simple_animal/bot/firebot/bot_reset() - ..() - target_fire = null - old_target_fire = null - ignore_list = list() - anchored = FALSE - update_icon() - -/mob/living/simple_animal/bot/firebot/proc/soft_reset() - path = list() - target_fire = null - mode = BOT_IDLE - last_found = world.time - update_icon() - -/mob/living/simple_animal/bot/firebot/set_custom_texts() - text_hack = "You corrupt [name]'s safety protocols." - text_dehack = "You detect errors in [name] and reset his programming." - text_dehack_fail = "[name] is not responding to reset commands!" - -/mob/living/simple_animal/bot/firebot/get_controls(mob/user) - var/dat - dat += hack(user) - dat += showpai(user) - dat += "Mobile Fire Extinguisher v1.0

    " - dat += "Status: [on ? "On" : "Off"]
    " - dat += "Maintenance panel panel is [open ? "opened" : "closed"]
    " - - dat += "Behaviour controls are [locked ? "locked" : "unlocked"]
    " - if(!locked || issilicon(user) || IsAdminGhost(user)) - dat += "Extinguish Fires: [extinguish_fires ? "Yes" : "No"]
    " - dat += "Extinguish People: [extinguish_people ? "Yes" : "No"]
    " - dat += "Patrol Station: [auto_patrol ? "Yes" : "No"]
    " - dat += "Stationary Mode: [stationary_mode ? "Yes" : "No"]
    " - - return dat - -/mob/living/simple_animal/bot/firebot/emag_act(mob/user) - ..() - if(emagged == 2) - if(user) - to_chat(user, "[src] buzzes and beeps.") - audible_message("[src] buzzes oddly!") - playsound(src, "sparks", 75, TRUE) - if(user) - old_target_fire = user - extinguish_fires = FALSE - extinguish_people = TRUE - - internal_ext = new /obj/item/extinguisher(src) - internal_ext.chem = /datum/reagent/clf3 //Refill the internal extinguisher with liquid fire - internal_ext.power = 3 - internal_ext.safety = FALSE - internal_ext.precision = FALSE - internal_ext.max_water = INFINITY - internal_ext.refill() - -/mob/living/simple_animal/bot/firebot/Topic(href, href_list) - if(..()) - return TRUE - - switch(href_list["operation"]) - if("extinguish_fires") - extinguish_fires = !extinguish_fires - if("extinguish_people") - extinguish_people = !extinguish_people - if("stationary_mode") - stationary_mode = !stationary_mode - - update_controls() - update_icon() - -/mob/living/simple_animal/bot/firebot/proc/is_burning(atom/target) - if(ismob(target)) - var/mob/living/M = target - if(M.on_fire || (emagged == 2 && !M.on_fire)) - return TRUE - - else if(isturf(target)) - var/turf/open/T = target - if(T.active_hotspot) - return TRUE - - return FALSE - -/mob/living/simple_animal/bot/firebot/handle_automated_action() - if(!..()) - return - - if(IsStun() || IsParalyzed()) - old_target_fire = target_fire - target_fire = null - mode = BOT_IDLE - return - - if(prob(1) && target_fire == null) - var/list/messagevoice = list("No fires detected." = 'sound/blank.ogg', - "Only you can prevent station fires." = 'sound/blank.ogg', - "Temperature nominal." = 'sound/blank.ogg', - "Keep it cool." = 'sound/blank.ogg') - var/message = pick(messagevoice) - speak(message) - playsound(src, messagevoice[message], 50) - - // Couldn't reach the target, reset and try again ignoring the old one - if(frustration > 8) - old_target_fire = target_fire - soft_reset() - - // We extinguished our target or it was deleted - if(QDELETED(target_fire) || !is_burning(target_fire) || isdead(target_fire)) - target_fire = null - var/scan_range = (stationary_mode ? 1 : DEFAULT_SCAN_RANGE) - - if(extinguish_people) - target_fire = scan(/mob/living, old_target_fire, scan_range) // Scan for burning humans first - - if(target_fire == null && extinguish_fires) - target_fire = scan(/turf/open, old_target_fire, scan_range) // Scan for burning turfs second - - old_target_fire = target_fire - - // Target reached ENGAGE WATER CANNON - if(target_fire && (get_dist(src, target_fire) <= (emagged == 2 ? 1 : 2))) // Make the bot spray water from afar when not emagged - if((speech_cooldown + SPEECH_INTERVAL) < world.time) - if(ishuman(target_fire)) - speak("Stop, drop and roll!") - playsound(src, "sound/voice/firebot/stopdropnroll.ogg", 50, FALSE) - else - speak("Extinguishing!") - playsound(src, "sound/voice/firebot/extinguishing.ogg", 50, FALSE) - speech_cooldown = world.time - - flick("firebot1_use", src) - spray_water(target_fire, src) - - soft_reset() - - // Target ran away - else if(target_fire && path.len && (get_dist(target_fire,path[path.len]) > 2)) - path = list() - mode = BOT_IDLE - last_found = world.time - - else if(target_fire && stationary_mode) - soft_reset() - return - - if(target_fire && (get_dist(src, target_fire) > 2)) - - path = get_path_to(src, get_turf(target_fire), /turf/proc/Distance_cardinal, 0, 30, 1, id=access_card) - mode = BOT_MOVING - if(!path.len) - soft_reset() - - if(path.len > 0 && target_fire) - if(!bot_move(path[path.len])) - old_target_fire = target_fire - soft_reset() - return - - // We got a target but it's too far away from us - if(path.len > 8 && target_fire) - frustration++ - - if(auto_patrol && !target_fire) - if(mode == BOT_IDLE || mode == BOT_START_PATROL) - start_patrol() - - if(mode == BOT_PATROL) - bot_patrol() - - -//Look for burning people or turfs around the bot -/mob/living/simple_animal/bot/firebot/process_scan(atom/scan_target) - var/result - - if(scan_target == src) - return result - - if(is_burning(scan_target)) - if((detected_cooldown + DETECTED_VOICE_INTERVAL) < world.time) - speak("Fire detected!") - playsound(src, "sound/voice/firebot/detected.ogg", 50, FALSE) - detected_cooldown = world.time - result = scan_target - - return result - -/mob/living/simple_animal/bot/firebot/temperature_expose(datum/gas_mixture/air, temperature, volume) - if((temperature > T0C + 200 || temperature < BODYTEMP_COLD_DAMAGE_LIMIT) && foam_cooldown + FOAM_INTERVAL < world.time) - new /obj/effect/particle_effect/foam/firefighting(loc) - foam_cooldown = world.time - ..() - -/mob/living/simple_animal/bot/firebot/proc/spray_water(atom/target, mob/user) - if(stationary_mode) - flick("firebots_use", user) - else - flick("firebot1_use", user) - internal_ext.afterattack(target, user, null) - -/mob/living/simple_animal/bot/firebot/update_icon() - if(!on) - icon_state = "firebot0" - return - if(IsStun() || IsParalyzed()) - icon_state = "firebots1" - else if(stationary_mode) //Bot has yellow light to indicate stationary mode. - icon_state = "firebots1" - else - icon_state = "firebot1" - - -/mob/living/simple_animal/bot/firebot/explode() - on = FALSE - visible_message("[src] blows apart!") - - var/atom/Tsec = drop_location() - - new /obj/item/assembly/prox_sensor(Tsec) - new /obj/item/clothing/head/hardhat/red(Tsec) - - var/turf/T = get_turf(Tsec) - - if(isopenturf(T)) - var/turf/open/theturf = T - theturf.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS) - - if(prob(50)) - drop_part(robot_arm, Tsec) - - do_sparks(3, TRUE, src) - ..() - -/obj/machinery/bot_core/firebot - req_one_access = list(ACCESS_CONSTRUCTION, ACCESS_ROBOTICS) - -#undef SPEECH_INTERVAL -#undef DETECTED_VOICE_INTERVAL -#undef FOAM_INTERVAL - diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm deleted file mode 100644 index fa8664a49a..0000000000 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ /dev/null @@ -1,395 +0,0 @@ -//Floorbot -/mob/living/simple_animal/bot/floorbot - name = "\improper Floorbot" - desc = "" - icon = 'icons/mob/aibots.dmi' - icon_state = "floorbot0" - density = FALSE - anchored = FALSE - health = 25 - maxHealth = 25 - spacewalk = TRUE - - radio_key = /obj/item/encryptionkey/headset_eng - radio_channel = RADIO_CHANNEL_ENGINEERING - bot_type = FLOOR_BOT - model = "Floorbot" - bot_core = /obj/machinery/bot_core/floorbot - window_id = "autofloor" - window_name = "Automatic Station Floor Repairer v1.1" - path_image_color = "#FFA500" - - var/process_type //Determines what to do when process_scan() receives a target. See process_scan() for details. - var/targetdirection - var/replacetiles = FALSE - var/placetiles = FALSE - var/specialtiles = 0 - var/maxtiles = 100 - var/obj/item/stack/tile/tiletype - var/fixfloors = TRUE - var/autotile = FALSE - var/max_targets = 50 - var/turf/target - var/oldloc = null - var/toolbox = /obj/item/storage/toolbox/mechanical - var/toolbox_color = "" - - #define HULL_BREACH 1 - #define LINE_SPACE_MODE 2 - #define FIX_TILE 3 - #define AUTO_TILE 4 - #define PLACE_TILE 5 - #define REPLACE_TILE 6 - #define TILE_EMAG 7 - -/mob/living/simple_animal/bot/floorbot/Initialize(mapload, new_toolbox_color) - . = ..() - toolbox_color = new_toolbox_color - update_icon() - var/datum/job/engineer/J = new/datum/job/engineer - access_card.access += J.get_access() - prev_access = access_card.access - if(toolbox_color == "s") - health = 100 - maxHealth = 100 - -/mob/living/simple_animal/bot/floorbot/turn_on() - . = ..() - update_icon() - -/mob/living/simple_animal/bot/floorbot/turn_off() - ..() - update_icon() - -/mob/living/simple_animal/bot/floorbot/bot_reset() - ..() - target = null - oldloc = null - ignore_list = list() - anchored = FALSE - update_icon() - -/mob/living/simple_animal/bot/floorbot/set_custom_texts() - text_hack = "You corrupt [name]'s construction protocols." - text_dehack = "You detect errors in [name] and reset his programming." - text_dehack_fail = "[name] is not responding to reset commands!" - -/mob/living/simple_animal/bot/floorbot/get_controls(mob/user) - var/dat - dat += hack(user) - dat += showpai(user) - dat += "Floor Repairer Controls v1.1

    " - dat += "Status: [on ? "On" : "Off"]
    " - dat += "Maintenance panel panel is [open ? "opened" : "closed"]
    " - dat += "Special tiles: " - if(specialtiles) - dat += "Loaded \[[specialtiles]/[maxtiles]\]
    " - else - dat += "None Loaded
    " - - dat += "Behaviour controls are [locked ? "locked" : "unlocked"]
    " - if(!locked || issilicon(user) || IsAdminGhost(user)) - dat += "Add tiles to new hull plating: [autotile ? "Yes" : "No"]
    " - dat += "Place floor tiles: [placetiles ? "Yes" : "No"]
    " - dat += "Replace existing floor tiles with custom tiles: [replacetiles ? "Yes" : "No"]
    " - dat += "Repair damaged tiles and platings: [fixfloors ? "Yes" : "No"]
    " - dat += "Traction Magnets: [anchored ? "Engaged" : "Disengaged"]
    " - dat += "Patrol Station: [auto_patrol ? "Yes" : "No"]
    " - var/bmode - if(targetdirection) - bmode = dir2text(targetdirection) - else - bmode = "disabled" - dat += "Line Mode : [bmode]
    " - - return dat - -/mob/living/simple_animal/bot/floorbot/attackby(obj/item/W , mob/user, params) - if(istype(W, /obj/item/stack/tile/plasteel)) - to_chat(user, "The floorbot can produce normal tiles itself.") - return - if(specialtiles && istype(W, /obj/item/stack/tile)) - var/obj/item/stack/tile/usedtile = W - if(usedtile.type != tiletype) - to_chat(user, "Different custom tiles are already inside the floorbot.") - return - if(istype(W, /obj/item/stack/tile)) - if(specialtiles >= maxtiles) - return - var/obj/item/stack/tile/tiles = W //used only to get the amount - tiletype = W.type - var/loaded = min(maxtiles-specialtiles, tiles.amount) - tiles.use(loaded) - specialtiles += loaded - if(loaded > 0) - to_chat(user, "I load [loaded] tiles into the floorbot. It now contains [specialtiles] tiles.") - else - to_chat(user, "I need at least one floor tile to put into [src]!") - else - ..() - -/mob/living/simple_animal/bot/floorbot/emag_act(mob/user) - ..() - if(emagged == 2) - if(user) - to_chat(user, "[src] buzzes and beeps.") - -/mob/living/simple_animal/bot/floorbot/Topic(href, href_list) - if(..()) - return TRUE - - switch(href_list["operation"]) - if("replace") - replacetiles = !replacetiles - if("place") - placetiles = !placetiles - if("fix") - fixfloors = !fixfloors - if("autotile") - autotile = !autotile - if("anchor") - anchored = !anchored - if("eject") - if(specialtiles && tiletype != null) - empty_tiles() - - if("linemode") - var/setdir = input("Select construction direction:") as null|anything in list("north","east","south","west","disable") - switch(setdir) - if("north") - targetdirection = 1 - if("south") - targetdirection = 2 - if("east") - targetdirection = 4 - if("west") - targetdirection = 8 - if("disable") - targetdirection = null - update_controls() - -/mob/living/simple_animal/bot/floorbot/proc/empty_tiles() - new tiletype(drop_location(), specialtiles) - specialtiles = 0 - tiletype = null - -/mob/living/simple_animal/bot/floorbot/handle_automated_action() - if(!..()) - return - - if(mode == BOT_REPAIRING) - return - - if(prob(5)) - audible_message("[src] makes an excited booping beeping sound!") - - //Normal scanning procedure. We have tiles loaded, are not emagged. - if(!target && emagged < 2) - if(targetdirection != null) //The bot is in line mode. - var/turf/T = get_step(src, targetdirection) - if(isspaceturf(T)) //Check for space - target = T - process_type = LINE_SPACE_MODE - if(isfloorturf(T)) //Check for floor - target = T - - if(!target) - process_type = HULL_BREACH //Ensures the floorbot does not try to "fix" space areas or shuttle docking zones. - target = scan(/turf/open/space) - - if(!target && placetiles) //Finds a floor without a tile and gives it one. - process_type = PLACE_TILE //The target must be the floor and not a tile. The floor must not already have a floortile. - target = scan(/turf/open/floor) - - if(!target && fixfloors) //Repairs damaged floors and tiles. - process_type = FIX_TILE - target = scan(/turf/open/floor) - - if(!target && replacetiles && specialtiles > 0) //Replace a floor tile with custom tile - process_type = REPLACE_TILE //The target must be a tile. The floor must already have a floortile. - target = scan(/turf/open/floor) - - if(!target && emagged == 2) //We are emagged! Time to rip up the floors! - process_type = TILE_EMAG - target = scan(/turf/open/floor) - - - if(!target) - - if(auto_patrol) - if(mode == BOT_IDLE || mode == BOT_START_PATROL) - start_patrol() - - if(mode == BOT_PATROL) - bot_patrol() - - if(target) - if(loc == target || loc == get_turf(target)) - if(check_bot(target)) //Target is not defined at the parent - shuffle = TRUE - if(prob(50)) //50% chance to still try to repair so we dont end up with 2 floorbots failing to fix the last breach - target = null - path = list() - return - if(isturf(target) && emagged < 2) - repair(target) - else if(emagged == 2 && isfloorturf(target)) - var/turf/open/floor/F = target - anchored = TRUE - mode = BOT_REPAIRING - F.ReplaceWithLattice() - audible_message("[src] makes an excited booping sound.") - addtimer(CALLBACK(src, PROC_REF(go_idle)), 0.5 SECONDS) - path = list() - return - if(path.len == 0) - if(!isturf(target)) - var/turf/TL = get_turf(target) - path = get_path_to(src, TL, /turf/proc/Distance_cardinal, 0, 30, id=access_card,simulated_only = FALSE) - else - path = get_path_to(src, target, /turf/proc/Distance_cardinal, 0, 30, id=access_card,simulated_only = FALSE) - - if(!bot_move(target)) - add_to_ignore(target) - target = null - mode = BOT_IDLE - return - else if( !bot_move(target) ) - target = null - mode = BOT_IDLE - return - - - - oldloc = loc - -/mob/living/simple_animal/bot/floorbot/proc/go_idle() - anchored = FALSE - mode = BOT_IDLE - target = null - -/mob/living/simple_animal/bot/floorbot/proc/is_hull_breach(turf/t) //Ignore space tiles not considered part of a structure, also ignores shuttle docking areas. - var/area/t_area = get_area(t) - if(t_area && (t_area.name == "Space" || findtext(t_area.name, "huttle"))) - return FALSE - else - return TRUE - -//Floorbots, having several functions, need sort out special conditions here. -/mob/living/simple_animal/bot/floorbot/process_scan(scan_target) - var/result - var/turf/open/floor/F - switch(process_type) - if(HULL_BREACH) //The most common job, patching breaches in the station's hull. - if(is_hull_breach(scan_target)) //Ensure that the targeted space turf is actually part of the station, and not random space. - result = scan_target - anchored = TRUE //Prevent the floorbot being blown off-course while trying to reach a hull breach. - if(LINE_SPACE_MODE) //Space turfs in our chosen direction are considered. - if(get_dir(src, scan_target) == targetdirection) - result = scan_target - anchored = TRUE - if(PLACE_TILE) - F = scan_target - if(isplatingturf(F)) //The floor must not already have a tile. - result = F - if(REPLACE_TILE) - F = scan_target - if(isfloorturf(F) && !isplatingturf(F)) //The floor must already have a tile. - result = F - if(FIX_TILE) //Selects only damaged floors. - F = scan_target - if(istype(F) && (F.broken || F.burnt)) - result = F - if(TILE_EMAG) //Emag mode! Rip up the floor and cause breaches to space! - F = scan_target - if(!isplatingturf(F)) - result = F - else //If no special processing is needed, simply return the result. - result = scan_target - return result - -/mob/living/simple_animal/bot/floorbot/proc/repair(turf/target_turf) - - if(isspaceturf(target_turf)) - //Must be a hull breach or in line mode to continue. - if(!is_hull_breach(target_turf) && !targetdirection) - target = null - return - else if(!isfloorturf(target_turf)) - return - if(isspaceturf(target_turf)) //If we are fixing an area not part of pure space, it is - anchored = TRUE - icon_state = "[toolbox_color]floorbot-c" - visible_message("[targetdirection ? "[src] begins installing a bridge plating." : "[src] begins to repair the hole."] ") - mode = BOT_REPAIRING - sleep(50) - if(mode == BOT_REPAIRING && src.loc == target_turf) - if(autotile) //Build the floor and include a tile. - target_turf.PlaceOnTop(/turf/open/floor/plasteel, flags = CHANGETURF_INHERIT_AIR) - else //Build a hull plating without a floor tile. - target_turf.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) - - else - var/turf/open/floor/F = target_turf - - if(F.type != initial(tiletype.turf_type) && (F.broken || F.burnt || isplatingturf(F)) || F.type == (initial(tiletype.turf_type) && (F.broken || F.burnt))) - anchored = TRUE - icon_state = "[toolbox_color]floorbot-c" - mode = BOT_REPAIRING - visible_message("[src] begins repairing the floor.") - sleep(50) - if(mode == BOT_REPAIRING && F && src.loc == F) - F.broken = FALSE - F.burnt = FALSE - F.PlaceOnTop(/turf/open/floor/plasteel, flags = CHANGETURF_INHERIT_AIR) - - if(replacetiles && F.type != initial(tiletype.turf_type) && specialtiles && !isplatingturf(F)) - anchored = TRUE - icon_state = "[toolbox_color]floorbot-c" - mode = BOT_REPAIRING - visible_message("[src] begins replacing the floor tiles.") - sleep(50) - if(mode == BOT_REPAIRING && F && src.loc == F) - F.broken = FALSE - F.burnt = FALSE - F.PlaceOnTop(initial(tiletype.turf_type), flags = CHANGETURF_INHERIT_AIR) - specialtiles -= 1 - if(specialtiles == 0) - speak("Requesting refill of custom floortiles to continue replacing.") - mode = BOT_IDLE - update_icon() - anchored = FALSE - target = null - -/mob/living/simple_animal/bot/floorbot/update_icon() - icon_state = "[toolbox_color]floorbot[on]" - - -/mob/living/simple_animal/bot/floorbot/explode() - on = FALSE - visible_message("[src] blows apart!") - var/atom/Tsec = drop_location() - - drop_part(toolbox, Tsec) - - new /obj/item/assembly/prox_sensor(Tsec) - - if(specialtiles && tiletype != null) - empty_tiles() - - if(prob(50)) - drop_part(robot_arm, Tsec) - - new /obj/item/stack/tile/plasteel(Tsec, 1) - - do_sparks(3, TRUE, src) - ..() - -/obj/machinery/bot_core/floorbot - req_one_access = list(ACCESS_CONSTRUCTION, ACCESS_ROBOTICS) - -/mob/living/simple_animal/bot/floorbot/UnarmedAttack(atom/A) - if(isturf(A)) - repair(A) - else - ..() diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm deleted file mode 100644 index 1f4e1b172b..0000000000 --- a/code/modules/mob/living/simple_animal/bot/honkbot.dm +++ /dev/null @@ -1,369 +0,0 @@ -/mob/living/simple_animal/bot/honkbot - name = "\improper honkbot" - desc = "" - icon = 'icons/mob/aibots.dmi' - icon_state = "honkbot" - density = FALSE - anchored = FALSE - health = 25 - maxHealth = 25 - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - pass_flags = PASSMOB - - radio_key = /obj/item/encryptionkey/headset_service //doesn't have security key - radio_channel = RADIO_CHANNEL_SERVICE //Doesn't even use the radio anyway. - bot_type = HONK_BOT - model = "Honkbot" - bot_core_type = /obj/machinery/bot_core/honkbot - window_id = "autohonk" - window_name = "Honkomatic Bike Horn Unit v1.0.7" - data_hud_type = DATA_HUD_SECURITY_BASIC // show jobs - path_image_color = "#FF69B4" - - var/honksound = 'sound/blank.ogg' //customizable sound - var/spam_flag = FALSE - var/cooldowntime = 30 - var/cooldowntimehorn = 10 - var/mob/living/carbon/target - var/oldtarget_name - var/target_lastloc = FALSE //Loc of target when arrested. - var/last_found = FALSE //There's a delay - var/threatlevel = FALSE - var/declare_arrests = FALSE // speak, you shall not, unless to Honk - var/idcheck = TRUE - var/fcheck = TRUE - var/check_records = TRUE - var/arrest_type = FALSE - var/weaponscheck = TRUE - var/bikehorn = /obj/item/bikehorn - -/mob/living/simple_animal/bot/honkbot/Initialize() - . = ..() - update_icon() - auto_patrol = TRUE - var/datum/job/clown/J = new/datum/job/clown - access_card.access += J.get_access() - prev_access = access_card.access - -/mob/living/simple_animal/bot/honkbot/proc/spam_flag_false() //used for addtimer - spam_flag = FALSE - -/mob/living/simple_animal/bot/honkbot/proc/sensor_blink() - icon_state = "honkbot-c" - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon)), 5, TIMER_OVERRIDE|TIMER_UNIQUE) - -//honkbots react with sounds. -/mob/living/simple_animal/bot/honkbot/proc/react_ping() - playsound(src, 'sound/blank.ogg', 50, TRUE, -1) //the first sound upon creation! - spam_flag = TRUE - sensor_blink() - addtimer(CALLBACK(src, PROC_REF(spam_flag_false)), 18) // calibrates before starting the honk - -/mob/living/simple_animal/bot/honkbot/proc/react_buzz() - playsound(src, 'sound/blank.ogg', 50, TRUE, -1) - sensor_blink() - -/mob/living/simple_animal/bot/honkbot/bot_reset() - ..() - target = null - oldtarget_name = null - anchored = FALSE - walk_to(src,0) - last_found = world.time - spam_flag = FALSE - -/mob/living/simple_animal/bot/honkbot/set_custom_texts() - - text_hack = "You overload [name]'s sound control system" - text_dehack = "You reboot [name] and restore the sound control system." - text_dehack_fail = "[name] refuses to accept your authority!" - -/mob/living/simple_animal/bot/honkbot/get_controls(mob/user) - var/dat - dat += hack(user) - dat += showpai(user) - dat += text({" -Honkomatic Bike Horn Unit v1.0.7 controls

    -Status: []
    -Behaviour controls are [locked ? "locked" : "unlocked"]
    -Maintenance panel panel is [open ? "opened" : "closed"]"}, - -"[on ? "On" : "Off"]" ) - - if(!locked || issilicon(user) || IsAdminGhost(user)) - dat += text({"
    Auto Patrol: []"}, - -"[auto_patrol ? "On" : "Off"]" ) - return dat - -/mob/living/simple_animal/bot/honkbot/proc/judgement_criteria() - var/final = NONE - if(check_records) - final = final|JUDGE_RECORDCHECK - if(emagged == 2) - final = final|JUDGE_EMAGGED - return final - -/mob/living/simple_animal/bot/honkbot/proc/retaliate(mob/living/carbon/human/H) - var/judgement_criteria = judgement_criteria() - threatlevel = H.assess_threat(judgement_criteria) - threatlevel += 6 - if(threatlevel >= 4) - target = H - mode = BOT_HUNT - -/mob/living/simple_animal/bot/honkbot/attack_hand(mob/living/carbon/human/H) - if(H.used_intent.type == INTENT_HARM) - retaliate(H) - addtimer(CALLBACK(src, PROC_REF(react_buzz)), 5) - return ..() - - -/mob/living/simple_animal/bot/honkbot/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour != TOOL_SCREWDRIVER && (W.force) && (!target) && (W.damtype != STAMINA) ) - retaliate(user) - addtimer(CALLBACK(src, PROC_REF(react_buzz)), 5) - ..() - -/mob/living/simple_animal/bot/honkbot/emag_act(mob/user) - ..() - if(emagged == 2) - if(user) - user << "I short out [src]'s sound control system. It gives out an evil laugh!!" - oldtarget_name = user.name - audible_message("[src] gives out an evil laugh!") - playsound(src, 'sound/blank.ogg', 75, TRUE, -1) // evil laughter - update_icon() - -/mob/living/simple_animal/bot/honkbot/bullet_act(obj/projectile/Proj) - if((istype(Proj,/obj/projectile/beam)) || (istype(Proj,/obj/projectile/bullet) && (Proj.damage_type == BURN))||(Proj.damage_type == BRUTE) && (!Proj.nodamage && Proj.damage < health && ishuman(Proj.firer))) - retaliate(Proj.firer) - return ..() - -/mob/living/simple_animal/bot/honkbot/UnarmedAttack(atom/A) - if(!on) - return - if(iscarbon(A)) - var/mob/living/carbon/C = A - if (emagged <= 1) - honk_attack(A) - else - if(!C.IsParalyzed() || arrest_type) - stun_attack(A) - ..() - else if (!spam_flag) //honking at the ground - bike_horn(A) - - -/mob/living/simple_animal/bot/honkbot/hitby(atom/movable/AM, skipcatch = FALSE, hitpush = TRUE, blocked = FALSE, datum/thrownthing/throwingdatum) - if(istype(AM, /obj/item)) - playsound(src, honksound, 50, TRUE, -1) - var/obj/item/I = AM - if(I.throwforce < health && I.thrownby && (istype(I.thrownby, /mob/living/carbon/human))) - var/mob/living/carbon/human/H = I.thrownby - retaliate(H) - ..() - -/mob/living/simple_animal/bot/honkbot/proc/bike_horn() //use bike_horn - if (emagged <= 1) - if (!spam_flag) - playsound(src, honksound, 50, TRUE, -1) - spam_flag = TRUE //prevent spam - sensor_blink() - addtimer(CALLBACK(src, PROC_REF(spam_flag_false)), cooldowntimehorn) - else if (emagged == 2) //emagged honkbots will spam short and memorable sounds. - if (!spam_flag) - playsound(src, "honkbot_e", 50, FALSE) - spam_flag = TRUE // prevent spam - icon_state = "honkbot-e" - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon)), 30, TIMER_OVERRIDE|TIMER_UNIQUE) - addtimer(CALLBACK(src, PROC_REF(spam_flag_false)), cooldowntimehorn) - -/mob/living/simple_animal/bot/honkbot/proc/honk_attack(mob/living/carbon/C) // horn attack - if(!spam_flag) - playsound(loc, honksound, 50, TRUE, -1) - spam_flag = TRUE // prevent spam - sensor_blink() - addtimer(CALLBACK(src, PROC_REF(spam_flag_false)), cooldowntimehorn) - -/mob/living/simple_animal/bot/honkbot/proc/stun_attack(mob/living/carbon/C) // airhorn stun - if(!spam_flag) - playsound(src, 'sound/blank.ogg', 100, TRUE, -1) //HEEEEEEEEEEEENK!! - sensor_blink() - if(spam_flag == 0) - if(ishuman(C)) - C.stuttering = 20 - C.adjustEarDamage(0, 5) //far less damage than the H.O.N.K. - C.Jitter(50) - C.Paralyze(60) - var/mob/living/carbon/human/H = C - if(client) //prevent spam from players.. - spam_flag = TRUE - if (emagged <= 1) //HONK once, then leave - var/judgement_criteria = judgement_criteria() - threatlevel = H.assess_threat(judgement_criteria) - threatlevel -= 6 - target = oldtarget_name - else // you really don't want to hit an emagged honkbot - threatlevel = 6 // will never let you go - addtimer(CALLBACK(src, PROC_REF(spam_flag_false)), cooldowntime) - - log_combat(src,C,"honked") - - C.visible_message("[src] has honked [C]!",\ - "[src] has honked you!") - else - C.stuttering = 20 - C.Paralyze(80) - addtimer(CALLBACK(src, PROC_REF(spam_flag_false)), cooldowntime) - - -/mob/living/simple_animal/bot/honkbot/handle_automated_action() - if(!..()) - return - - switch(mode) - - if(BOT_IDLE) // idle - - walk_to(src,0) - look_for_perp() - if(!mode && auto_patrol) - mode = BOT_START_PATROL - - if(BOT_HUNT) - - // if can't reach perp for long enough, go idle - if(frustration >= 5) //gives up easier than beepsky - walk_to(src,0) - back_to_idle() - return - - if(target) // make sure target exists - if(Adjacent(target) && isturf(target.loc)) - - if(threatlevel <= 4) - honk_attack(target) - else - if(threatlevel >= 6) - set waitfor = 0 - stun_attack(target) - anchored = FALSE - target_lastloc = target.loc - return - - else // not next to perp - var/turf/olddist = get_dist(src, target) - walk_to(src, target,1,4) - if((get_dist(src, target)) >= (olddist)) - frustration++ - else - frustration = 0 - else - back_to_idle() - - - if(BOT_START_PATROL) - look_for_perp() - start_patrol() - - if(BOT_PATROL) - look_for_perp() - bot_patrol() - - return - -/mob/living/simple_animal/bot/honkbot/proc/back_to_idle() - anchored = FALSE - mode = BOT_IDLE - target = null - last_found = world.time - frustration = 0 - INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) //responds quickly - -/mob/living/simple_animal/bot/honkbot/proc/back_to_hunt() - anchored = FALSE - frustration = 0 - mode = BOT_HUNT - INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) // responds quickly - -/mob/living/simple_animal/bot/honkbot/proc/look_for_perp() - anchored = FALSE - for (var/mob/living/carbon/C in view(7,src)) - if((C.stat) || (C.handcuffed)) - continue - - if((C.name == oldtarget_name) && (world.time < last_found + 100)) - continue - - var/judgement_criteria = judgement_criteria() - threatlevel = C.assess_threat(judgement_criteria) - - if(threatlevel <= 3) - if(C in view(4,src)) //keep the range short for patrolling - if(!spam_flag) - bike_horn() - - else if(threatlevel >= 10) - bike_horn() //just spam the shit outta this - - else if(threatlevel >= 4) - if(!spam_flag) - target = C - oldtarget_name = C.name - bike_horn() - speak("Honk!") - visible_message("[src] starts chasing [C.name]!") - mode = BOT_HUNT - INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) - break - else - continue - -/mob/living/simple_animal/bot/honkbot/explode() - - walk_to(src,0) - visible_message("[src] blows apart!") - var/atom/Tsec = drop_location() - //doesn't drop cardboard nor its assembly, since its a very frail material. - if(prob(50)) - drop_part(robot_arm, Tsec) - new bikehorn(Tsec) - new /obj/item/assembly/prox_sensor(Tsec) - - var/datum/effect_system/spark_spread/s = new - s.set_up(3, 1, src) - s.start() - - new /obj/effect/decal/cleanable/oil(loc) - ..() - -/mob/living/simple_animal/bot/honkbot/attack_alien(mob/living/carbon/alien/user as mob) - ..() - if(!isalien(target)) - target = user - mode = BOT_HUNT - -/mob/living/simple_animal/bot/honkbot/Crossed(atom/movable/AM) - if(ismob(AM) && (on)) //only if its online - if(prob(30)) //you're far more likely to trip on a honkbot - var/mob/living/carbon/C = AM - if(!istype(C) || !C || in_range(src, target)) - return - C.visible_message("[pick( \ - "[C] dives out of [src]'s way!", \ - "[C] stumbles over [src]!", \ - "[C] jumps out of [src]'s path!", \ - "[C] trips over [src] and falls!", \ - "[C] topples over [src]!", \ - "[C] leaps out of [src]'s way!")]") - C.Paralyze(10) - playsound(loc, 'sound/blank.ogg', 50, TRUE, -1) - if(!client) - speak("Honk!") - sensor_blink() - return - ..() - -/obj/machinery/bot_core/honkbot - req_one_access = list(ACCESS_THEATRE, ACCESS_ROBOTICS) diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm deleted file mode 100644 index 59eb304cbc..0000000000 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ /dev/null @@ -1,451 +0,0 @@ -//MEDBOT -//MEDBOT PATHFINDING -//MEDBOT ASSEMBLY - - -/mob/living/simple_animal/bot/medbot - name = "\improper Medibot" - desc = "" - icon = 'icons/mob/aibots.dmi' - icon_state = "medibot0" - density = FALSE - anchored = FALSE - health = 20 - maxHealth = 20 - pass_flags = PASSMOB - - status_flags = (CANPUSH | CANSTUN) - - radio_key = /obj/item/encryptionkey/headset_med - radio_channel = RADIO_CHANNEL_MEDICAL - - bot_type = MED_BOT - model = "Medibot" - bot_core_type = /obj/machinery/bot_core/medbot - window_id = "automed" - window_name = "Automatic Medical Unit v1.1" - data_hud_type = DATA_HUD_MEDICAL_ADVANCED - path_image_color = "#DDDDFF" - var/healthanalyzer = /obj/item/healthanalyzer - var/firstaid = /obj/item/storage/firstaid - var/skin = null //based off medkit_X skins in aibots.dmi for your selection; X goes here IE medskin_tox means skin var should be "tox" - var/mob/living/carbon/patient = null - var/mob/living/carbon/oldpatient = null - var/oldloc = null - var/last_found = 0 - var/last_newpatient_speak = 0 //Don't spam the "HEY I'M COMING" messages - var/heal_amount = 2.5 //How much healing do we do at a time? - var/heal_threshold = 10 //Start healing when they have this much damage in a category - var/declare_crit = 1 //If active, the bot will transmit a critical patient alert to MedHUD users. - var/declare_cooldown = 0 //Prevents spam of critical patient alerts. - var/stationary_mode = 0 //If enabled, the Medibot will not move automatically. - //Setting which reagents to use to treat what by default. By id. - var/shut_up = 0 //self explanatory :) - var/datum/techweb/linked_techweb - -/mob/living/simple_animal/bot/medbot/mysterious - name = "\improper Mysterious Medibot" - desc = "" - skin = "bezerk" - heal_amount = 10 - -/mob/living/simple_animal/bot/medbot/derelict - name = "\improper Old Medibot" - desc = "" - skin = "bezerk" - heal_threshold = 0 - declare_crit = 0 - heal_amount = 5 - -/mob/living/simple_animal/bot/medbot/update_icon() - cut_overlays() - if(skin) - add_overlay("medskin_[skin]") - if(!on) - icon_state = "medibot0" - return - if(IsStun() || IsParalyzed()) - icon_state = "medibota" - return - if(mode == BOT_HEALING) - icon_state = "medibots[stationary_mode]" - return - else if(stationary_mode) //Bot has yellow light to indicate stationary mode. - icon_state = "medibot2" - else - icon_state = "medibot1" - -/mob/living/simple_animal/bot/medbot/Initialize(mapload, new_skin) - . = ..() - var/datum/job/doctor/J = new /datum/job/doctor - access_card.access += J.get_access() - prev_access = access_card.access - qdel(J) - skin = new_skin - update_icon() - linked_techweb = SSresearch.science_tech - -/mob/living/simple_animal/bot/medbot/update_mobility() - . = ..() - update_icon() - -/mob/living/simple_animal/bot/medbot/bot_reset() - ..() - patient = null - oldpatient = null - oldloc = null - last_found = world.time - declare_cooldown = 0 - update_icon() - -/mob/living/simple_animal/bot/medbot/proc/soft_reset() //Allows the medibot to still actively perform its medical duties without being completely halted as a hard reset does. - path = list() - patient = null - mode = BOT_IDLE - last_found = world.time - update_icon() - -/mob/living/simple_animal/bot/medbot/set_custom_texts() - - text_hack = "You corrupt [name]'s healing processor circuits." - text_dehack = "You reset [name]'s healing processor circuits." - text_dehack_fail = "[name] seems damaged and does not respond to reprogramming!" - -/mob/living/simple_animal/bot/medbot/attack_paw(mob/user) - return attack_hand(user) - -/mob/living/simple_animal/bot/medbot/get_controls(mob/user) - var/dat - dat += hack(user) - dat += showpai(user) - dat += "Medical Unit Controls v1.1

    " - dat += "Status: [on ? "On" : "Off"]
    " - dat += "Maintenance panel panel is [open ? "opened" : "closed"]
    " - dat += "
    Behaviour controls are [locked ? "locked" : "unlocked"]
    " - if(!locked || issilicon(user) || IsAdminGhost(user)) - dat += "Healing Threshold: " - dat += "-- " - dat += "- " - dat += "[heal_threshold] " - dat += "+ " - dat += "++" - dat += "
    " - dat += "The speaker switch is [shut_up ? "off" : "on"]. Toggle
    " - dat += "Critical Patient Alerts: [declare_crit ? "Yes" : "No"]
    " - dat += "Patrol Station: [auto_patrol ? "Yes" : "No"]
    " - dat += "Stationary Mode: [stationary_mode ? "Yes" : "No"]
    " - dat += "Search for Technological Advancements
    " - - return dat - -/mob/living/simple_animal/bot/medbot/Topic(href, href_list) - if(..()) - return 1 - - if(href_list["adj_threshold"]) - var/adjust_num = text2num(href_list["adj_threshold"]) - heal_threshold += adjust_num - if(heal_threshold < 5) - heal_threshold = 5 - if(heal_threshold > 75) - heal_threshold = 75 - - else if(href_list["togglevoice"]) - shut_up = !shut_up - - else if(href_list["critalerts"]) - declare_crit = !declare_crit - - else if(href_list["stationary"]) - stationary_mode = !stationary_mode - path = list() - update_icon() - - else if(href_list["hptech"]) - var/oldheal_amount = heal_amount - var/tech_boosters - /* - for(var/i in linked_techweb.researched_designs) - var/datum/design/surgery/healing/D = SSresearch.techweb_design_by_id(i) - if(!istype(D)) - continue - tech_boosters++ - */ - if(tech_boosters) - heal_amount = (round(tech_boosters/2,0.1)*initial(heal_amount))+initial(heal_amount) //every 2 tend wounds tech gives you an extra 100% healing, adjusting for unique branches (combo is bonus) - if(oldheal_amount < heal_amount) - speak("Surgerical Knowledge Found! Efficiency is increased by [round(heal_amount/oldheal_amount*100)]%!") - update_controls() - return - -/mob/living/simple_animal/bot/medbot/attackby(obj/item/W as obj, mob/user as mob, params) - var/current_health = health - ..() - if(health < current_health) //if medbot took some damage - step_to(src, (get_step_away(src,user))) - -/mob/living/simple_animal/bot/medbot/emag_act(mob/user) - ..() - if(emagged == 2) - declare_crit = 0 - if(user) - to_chat(user, "I short out [src]'s reagent synthesis circuits.") - audible_message("[src] buzzes oddly!") - flick("medibot_spark", src) - playsound(src, "sparks", 75, TRUE) - if(user) - oldpatient = user - -/mob/living/simple_animal/bot/medbot/process_scan(mob/living/carbon/human/H) - if(H.stat == DEAD) - return - - if((H == oldpatient) && (world.time < last_found + 200)) - return - - if(assess_patient(H)) - last_found = world.time - if((last_newpatient_speak + 300) < world.time) //Don't spam these messages! - var/list/messagevoice = list("Hey, [H.name]! Hold on, I") - var/message = pick(messagevoice) - speak(message) - playsound(src, messagevoice[message], 50, FALSE) - last_newpatient_speak = world.time - return H - else - return - -/mob/living/simple_animal/bot/medbot/handle_automated_action() - if(!..()) - return - - if(mode == BOT_HEALING) - return - - if(IsStun() || IsParalyzed()) - oldpatient = patient - patient = null - mode = BOT_IDLE - return - - if(frustration > 8) - oldpatient = patient - soft_reset() - - if(QDELETED(patient)) - if(!shut_up && prob(1)) - var/list/messagevoice = list("Radar, put a mask on!" = 'sound/blank.ogg') - var/message = pick(messagevoice) - speak(message) - playsound(src, messagevoice[message], 50) - var/scan_range = (stationary_mode ? 1 : DEFAULT_SCAN_RANGE) //If in stationary mode, scan range is limited to adjacent patients. - patient = scan(/mob/living/carbon/human, oldpatient, scan_range) - oldpatient = patient - - if(patient && (get_dist(src,patient) <= 1)) //Patient is next to us, begin treatment! - if(mode != BOT_HEALING) - mode = BOT_HEALING - update_icon() - frustration = 0 - medicate_patient(patient) - return - - //Patient has moved away from us! - else if(patient && path.len && (get_dist(patient,path[path.len]) > 2)) - path = list() - mode = BOT_IDLE - last_found = world.time - - else if(stationary_mode && patient) //Since we cannot move in this mode, ignore the patient and wait for another. - soft_reset() - return - - if(patient && path.len == 0 && (get_dist(src,patient) > 1)) - path = get_path_to(src, get_turf(patient), /turf/proc/Distance_cardinal, 0, 30,id=access_card) - mode = BOT_MOVING - if(!path.len) //try to get closer if you can't reach the patient directly - path = get_path_to(src, get_turf(patient), /turf/proc/Distance_cardinal, 0, 30,1,id=access_card) - if(!path.len) //Do not chase a patient we cannot reach. - soft_reset() - - if(path.len > 0 && patient) - if(!bot_move(path[path.len])) - oldpatient = patient - soft_reset() - return - - if(path.len > 8 && patient) - frustration++ - - if(auto_patrol && !stationary_mode && !patient) - if(mode == BOT_IDLE || mode == BOT_START_PATROL) - start_patrol() - - if(mode == BOT_PATROL) - bot_patrol() - - return - -/mob/living/simple_animal/bot/medbot/proc/assess_patient(mob/living/carbon/C) - . = FALSE - //Time to see if they need medical help! - if(stationary_mode && !Adjacent(C)) //YOU come to ME, BRO - return FALSE - if(C.stat == DEAD || (HAS_TRAIT(C, TRAIT_FAKEDEATH))) - return FALSE //welp too late for them! - - if(!(loc == C.loc) && !(isturf(C.loc) && isturf(loc))) - return FALSE - - if(C.suiciding) - return FALSE //Kevorkian school of robotic medical assistants. - - if(emagged == 2) //Everyone needs our medicine. (Our medicine is toxins) - return TRUE - - if(HAS_TRAIT(C,TRAIT_MEDIBOTCOMINGTHROUGH) && !HAS_TRAIT_FROM(C,TRAIT_MEDIBOTCOMINGTHROUGH,tag)) //the early medbot gets the worm (or in this case the patient) - return FALSE - - if(ishuman(C)) - var/mob/living/carbon/human/H = C - if (H.wear_armor && H.head && istype(H.wear_armor, /obj/item/clothing) && istype(H.head, /obj/item/clothing)) - var/obj/item/clothing/CS = H.wear_armor - var/obj/item/clothing/CH = H.head - if (CS.clothing_flags & CH.clothing_flags & THICKMATERIAL) - return FALSE // Skip over them if they have no exposed flesh. - - if(declare_crit && C.health <= 0) //Critical condition! Call for help! - declare(C) - - //They're injured enough for it! - if(C.getBruteLoss() >= heal_threshold) - return TRUE //If they're already medicated don't bother! - - if(C.getOxyLoss() >= (5 + heal_threshold)) - return TRUE - - if(C.getFireLoss() >= heal_threshold) - return TRUE - - if(C.getToxLoss() >= heal_threshold) - return TRUE - -/mob/living/simple_animal/bot/medbot/UnarmedAttack(atom/A) - if(iscarbon(A)) - var/mob/living/carbon/C = A - patient = C - mode = BOT_HEALING - update_icon() - medicate_patient(C) - update_icon() - else - ..() - -/mob/living/simple_animal/bot/medbot/examinate(atom/A as mob|obj|turf in view()) - ..() - if(!is_blind(src)) - chemscan(src, A) - -/mob/living/simple_animal/bot/medbot/proc/medicate_patient(mob/living/carbon/C) - if(!on) - return - - if(!istype(C)) - oldpatient = patient - soft_reset() - return - - if(C.stat == DEAD || (HAS_TRAIT(C, TRAIT_FAKEDEATH))) - var/list/messagevoice = list("No! Stay with me!" = 'sound/blank.ogg') - var/message = pick(messagevoice) - speak(message) - playsound(src, messagevoice[message], 50) - oldpatient = patient - soft_reset() - return - - var/tending = TRUE - while(tending) - var/treatment_method = null - - if(C.getBruteLoss() >= heal_threshold) - treatment_method = BRUTE - - else if(C.getFireLoss() >= heal_threshold) - treatment_method = BURN - - else if(C.getOxyLoss() >= (5 + heal_threshold)) - treatment_method = OXY - - else if(C.getToxLoss() >= heal_threshold) - treatment_method = TOX - - if(!treatment_method && emagged != 2) //If they don't need any of that they're probably cured! - if(C.maxHealth - C.health < heal_threshold) - to_chat(src, "[C] is healthy! Your programming prevents you from injecting anyone without at least [heal_threshold] damage of any one type ([heal_threshold + 5] for oxygen damage.)") - var/list/messagevoice = list("All patched up!" = 'sound/blank.ogg') - var/message = pick(messagevoice) - speak(message) - playsound(src, messagevoice[message], 50) - bot_reset() - tending = FALSE - else if(patient) - C.visible_message("[src] is trying to tend the wounds of [patient]!", \ - "[src] is trying to tend your wounds!") - - if(do_mob(src, patient, 20)) //Slightly faster than default tend wounds, but does less HPS - if((get_dist(src, patient) <= 1) && (on) && assess_patient(patient)) - var/healies = heal_amount - var/obj/item/storage/firstaid/FA = firstaid - if(treatment_method == initial(FA.damagetype_healed)) //using the damage specific medkits give bonuses when healing this type of damage. - healies *= 1.5 - if(emagged == 2) - patient.reagents.add_reagent(/datum/reagent/toxin/chloralhydrate, 5) - patient.apply_damage_type((healies*1),treatment_method) - log_combat(src, patient, "pretended to tend wounds on", "internal tools", "([uppertext(treatment_method)]) (EMAGGED)") - else - patient.apply_damage_type((healies*-1),treatment_method) //don't need to check treatment_method since we know by this point that they were actually damaged. - log_combat(src, patient, "tended the wounds of", "internal tools", "([uppertext(treatment_method)])") - C.visible_message("[src] tends the wounds of [patient]!", \ - "[src] tends your wounds!") - ADD_TRAIT(patient,TRAIT_MEDIBOTCOMINGTHROUGH,tag) - addtimer(TRAIT_CALLBACK_REMOVE(patient, TRAIT_MEDIBOTCOMINGTHROUGH, tag), (30 SECONDS)) - else - tending = FALSE - else - tending = FALSE - - update_icon() - if(!tending) - visible_message("[src] places its tools back into itself.") - soft_reset() - else - tending = FALSE - -/mob/living/simple_animal/bot/medbot/explode() - on = FALSE - visible_message("[src] blows apart!") - var/atom/Tsec = drop_location() - - drop_part(firstaid, Tsec) - new /obj/item/assembly/prox_sensor(Tsec) - drop_part(healthanalyzer, Tsec) - - if(prob(50)) - drop_part(robot_arm, Tsec) - - if(emagged && prob(25)) - playsound(src, 'sound/blank.ogg', 50) - - do_sparks(3, TRUE, src) - ..() - -/mob/living/simple_animal/bot/medbot/proc/declare(crit_patient) - if(declare_cooldown > world.time) - return - var/area/location = get_area(src) - speak("Medical emergency! [crit_patient || "A patient"] is in critical condition at [location]!",radio_channel) - declare_cooldown = world.time + 200 - -/obj/machinery/bot_core/medbot - req_one_access = list(ACCESS_MEDICAL, ACCESS_ROBOTICS) diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm deleted file mode 100644 index c2f802a9f1..0000000000 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ /dev/null @@ -1,839 +0,0 @@ - - -// Mulebot - carries crates around for Quartermaster -// Navigates via floor navbeacons -// Remote Controlled from QM's PDA - -#define SIGH 0 -#define ANNOYED 1 -#define DELIGHT 2 - -/mob/living/simple_animal/bot/mulebot - name = "\improper MULEbot" - desc = "" - icon_state = "mulebot0" - density = TRUE - move_resist = MOVE_FORCE_STRONG - animate_movement = FORWARD_STEPS - health = 50 - maxHealth = 50 - damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - a_intent = INTENT_HARM //No swapping - buckle_lying = 0 - mob_size = MOB_SIZE_LARGE - - radio_key = /obj/item/encryptionkey/headset_cargo - radio_channel = RADIO_CHANNEL_SUPPLY - - bot_type = MULE_BOT - model = "MULE" - bot_core_type = /obj/machinery/bot_core/mulebot - - var/id - - path_image_color = "#7F5200" - - var/base_icon = "mulebot" - var/atom/movable/load = null - var/mob/living/passenger = null - var/turf/target // this is turf to navigate to (location of beacon) - var/loaddir = 0 // this the direction to unload onto/load from - var/home_destination = "" // tag of home beacon - - var/reached_target = 1 //true if already reached the target - - var/auto_return = 1 // true if auto return to home beacon after unload - var/auto_pickup = 1 // true if auto-pickup at beacon - var/report_delivery = 1 // true if bot will announce an arrival to a location. - - var/obj/item/stock_parts/cell/cell - var/bloodiness = 0 - -/mob/living/simple_animal/bot/mulebot/Initialize(mapload) - . = ..() - if(prob(0.666) && mapload) - new /mob/living/simple_animal/bot/mulebot/paranormal(get_turf(src)) - qdel(src) - wires = new /datum/wires/mulebot(src) - var/datum/job/cargo_tech/J = new/datum/job/cargo_tech - access_card.access = J.get_access() - prev_access = access_card.access - cell = new /obj/item/stock_parts/cell/upgraded(src, 2000) - - var/static/mulebot_count = 0 - mulebot_count += 1 - set_id(suffix || id || "#[mulebot_count]") - suffix = null - -/mob/living/simple_animal/bot/mulebot/ComponentInitialize() - . = ..() - AddComponent(/datum/component/ntnet_interface) - -/mob/living/simple_animal/bot/mulebot/Destroy() - unload(0) - qdel(wires) - wires = null - return ..() - -/mob/living/simple_animal/bot/mulebot/proc/set_id(new_id) - id = new_id - if(paicard) - bot_name = "[initial(name)] ([new_id])" - else - name = "[initial(name)] ([new_id])" - -/mob/living/simple_animal/bot/mulebot/bot_reset() - ..() - reached_target = 0 - -/mob/living/simple_animal/bot/mulebot/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - ..() - if(open) - on = FALSE - else if(istype(I, /obj/item/stock_parts/cell) && open && !cell) - if(!user.transferItemToLoc(I, src)) - return - cell = I - visible_message("[user] inserts a cell into [src].", - "I insert the new cell into [src].") - else if(I.tool_behaviour == TOOL_CROWBAR && open && cell) - cell.add_fingerprint(usr) - cell.forceMove(loc) - cell = null - visible_message("[user] crowbars out the power cell from [src].", - "I pry the powercell out of [src].") - else if(is_wire_tool(I) && open) - return attack_hand(user) - else if(load && ismob(load)) // chance to knock off rider - if(prob(1 + I.force * 2)) - unload(0) - user.visible_message("[user] knocks [load] off [src] with \the [I]!", - "I knock [load] off [src] with \the [I]!") - else - to_chat(user, "I hit [src] with \the [I] but to no effect!") - ..() - else - ..() - update_icon() - return - -/mob/living/simple_animal/bot/mulebot/emag_act(mob/user) - if(emagged < 1) - emagged = TRUE - if(!open) - locked = !locked - to_chat(user, "I [locked ? "lock" : "unlock"] [src]'s controls!") - flick("mulebot-emagged", src) - playsound(src, "sparks", 100, FALSE) - -/mob/living/simple_animal/bot/mulebot/update_icon() - if(open) - icon_state="[base_icon]-hatch" - else - icon_state = "[base_icon][wires.is_cut(WIRE_AVOIDANCE)]" - cut_overlays() - if(load && !ismob(load))//buckling handles the mob offsets - load.pixel_y = initial(load.pixel_y) + 9 - if(load.layer < layer) - load.layer = layer + 0.01 - add_overlay(load) - return - -/mob/living/simple_animal/bot/mulebot/ex_act(severity) - unload(0) - switch(severity) - if(1) - qdel(src) - if(2) - for(var/i = 1; i < 3; i++) - wires.cut_random() - if(3) - wires.cut_random() - return - -/mob/living/simple_animal/bot/mulebot/bullet_act(obj/projectile/Proj) - . = ..() - if(.) - if(prob(50) && !isnull(load)) - unload(0) - if(prob(25)) - visible_message("Something shorts out inside [src]!") - wires.cut_random() - -/mob/living/simple_animal/bot/mulebot/interact(mob/user) - if(open && !isAI(user)) - wires.interact(user) - else - if(wires.is_cut(WIRE_RX) && isAI(user)) - return - ui_interact(user) - -/mob/living/simple_animal/bot/mulebot/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "mulebot", name, 600, 375, master_ui, state) - ui.open() - -/mob/living/simple_animal/bot/mulebot/ui_data(mob/user) - var/list/data = list() - data["on"] = on - data["locked"] = locked - data["siliconUser"] = user.has_unlimited_silicon_privilege - data["mode"] = mode ? mode_name[mode] : "Ready" - data["modeStatus"] = "" - switch(mode) - if(BOT_IDLE, BOT_DELIVER, BOT_GO_HOME) - data["modeStatus"] = "good" - if(BOT_BLOCKED, BOT_NAV, BOT_WAIT_FOR_NAV) - data["modeStatus"] = "average" - if(BOT_NO_ROUTE) - data["modeStatus"] = "bad" - else - data["load"] = load ? load.name : null - data["destination"] = destination ? destination : null - data["cell"] = cell ? TRUE : FALSE - data["cellPercent"] = cell ? cell.percent() : null - data["autoReturn"] = auto_return - data["autoPickup"] = auto_pickup - data["reportDelivery"] = report_delivery - data["haspai"] = paicard ? TRUE : FALSE - return data - -/mob/living/simple_animal/bot/mulebot/ui_act(action, params) - if(..() || (locked && !usr.has_unlimited_silicon_privilege)) - return - switch(action) - if("lock") - if(usr.has_unlimited_silicon_privilege) - locked = !locked - . = TRUE - if("power") - if(on) - turn_off() - else if(cell && !open) - if(!turn_on()) - to_chat(usr, "I can't switch on [src]!") - return - . = TRUE - else - bot_control(action, usr) // Kill this later. - . = TRUE - -/mob/living/simple_animal/bot/mulebot/bot_control(command, mob/user, pda = FALSE) - if(pda && wires.is_cut(WIRE_RX)) // MULE wireless is controlled by wires. - return - - switch(command) - if("stop") - if(mode >= BOT_DELIVER) - bot_reset() - if("go") - if(mode == BOT_IDLE) - start() - if("home") - if(mode == BOT_IDLE || mode == BOT_DELIVER) - start_home() - if("destination") - var/new_dest = input(user, "Enter Destination:", name, destination) as null|anything in GLOB.deliverybeacontags - if(new_dest) - set_destination(new_dest) - if("setid") - var/new_id = stripped_input(user, "Enter ID:", name, id, MAX_NAME_LEN) - if(new_id) - set_id(new_id) - if("sethome") - var/new_home = input(user, "Enter Home:", name, home_destination) as null|anything in GLOB.deliverybeacontags - if(new_home) - home_destination = new_home - if("unload") - if(load && mode != BOT_HUNT) - if(loc == target) - unload(loaddir) - else - unload(0) - if("autoret") - auto_return = !auto_return - if("autopick") - auto_pickup = !auto_pickup - if("report") - report_delivery = !report_delivery - if("ejectpai") - ejectpairemote(user) - -// TODO: remove this; PDAs currently depend on it -/mob/living/simple_animal/bot/mulebot/get_controls(mob/user) - var/ai = issilicon(user) - var/dat - dat += "

    Multiple Utility Load Effector Mk. V

    " - dat += "ID: [id]
    " - dat += "Power: [on ? "On" : "Off"]
    " - dat += "

    Status

    " - dat += "
    " - switch(mode) - if(BOT_IDLE) - dat += "Ready" - if(BOT_DELIVER) - dat += "[mode_name[BOT_DELIVER]]" - if(BOT_GO_HOME) - dat += "[mode_name[BOT_GO_HOME]]" - if(BOT_BLOCKED) - dat += "[mode_name[BOT_BLOCKED]]" - if(BOT_NAV,BOT_WAIT_FOR_NAV) - dat += "[mode_name[BOT_NAV]]" - if(BOT_NO_ROUTE) - dat += "[mode_name[BOT_NO_ROUTE]]" - dat += "
    " - - dat += "Current Load: [load ? load.name : "none"]
    " - dat += "Destination: [!destination ? "none" : destination]
    " - dat += "Power level: [cell ? cell.percent() : 0]%" - - if(locked && !ai && !IsAdminGhost(user)) - dat += " 
    Controls are locked
    Unlock Controls" - else - dat += " 
    Controls are unlocked
    Lock Controls

    " - - dat += "Toggle Power
    " - dat += "Stop
    " - dat += "Proceed
    " - dat += "Return to Home
    " - dat += "Set Destination
    " - dat += "Set Bot ID
    " - dat += "Set Home
    " - dat += "Toggle Auto Return Home ([auto_return ? "On":"Off"])
    " - dat += "Toggle Auto Pickup Crate ([auto_pickup ? "On":"Off"])
    " - dat += "Toggle Delivery Reporting ([report_delivery ? "On" : "Off"])
    " - if(load) - dat += "Unload Now
    " - dat += "
    The maintenance hatch is closed.
    " - - return dat - - -// returns true if the bot has power -/mob/living/simple_animal/bot/mulebot/proc/has_power() - return !open && cell && cell.charge > 0 && (!wires.is_cut(WIRE_POWER1) && !wires.is_cut(WIRE_POWER2)) - -/mob/living/simple_animal/bot/mulebot/proc/buzz(type) - switch(type) - if(SIGH) - audible_message("[src] makes a sighing buzz.") - playsound(loc, 'sound/blank.ogg', 50, FALSE) - if(ANNOYED) - audible_message("[src] makes an annoyed buzzing sound.") - playsound(loc, 'sound/blank.ogg', 50, FALSE) - if(DELIGHT) - audible_message("[src] makes a delighted ping!") - playsound(loc, 'sound/blank.ogg', 50, FALSE) - - -// mousedrop a crate to load the bot -// can load anything if hacked -/mob/living/simple_animal/bot/mulebot/MouseDrop_T(atom/movable/AM, mob/user) - var/mob/living/L = user - - if (!istype(L)) - return - - if(user.incapacitated() || (istype(L) && !(L.mobility_flags & MOBILITY_STAND))) - return - - if(!istype(AM) || isdead(AM) || iscameramob(AM) || istype(AM, /obj/effect/dummy/phased_mob)) - return - - load(AM) - -// called to load a crate -/mob/living/simple_animal/bot/mulebot/proc/load(atom/movable/AM) - if(load || AM.anchored) - return - - if(!isturf(AM.loc)) //To prevent the loading from stuff from someone's inventory or screen icons. - return - - var/obj/structure/closet/crate/CRATE - if(istype(AM, /obj/structure/closet/crate)) - CRATE = AM - else - if(!wires.is_cut(WIRE_LOADCHECK)) - buzz(SIGH) - return // if not hacked, only allow crates to be loaded - - if(CRATE) // if it's a crate, close before loading - CRATE.close() - - if(isobj(AM)) - var/obj/O = AM - if(O.has_buckled_mobs() || (locate(/mob) in AM)) //can't load non crates objects with mobs buckled to it or inside it. - buzz(SIGH) - return - - if(isliving(AM)) - if(!load_mob(AM)) - return - else - AM.forceMove(src) - - load = AM - mode = BOT_IDLE - update_icon() - -/mob/living/simple_animal/bot/mulebot/proc/load_mob(mob/living/M) - can_buckle = TRUE - if(buckle_mob(M)) - passenger = M - load = M - can_buckle = FALSE - return TRUE - return FALSE - -/mob/living/simple_animal/bot/mulebot/post_buckle_mob(mob/living/M) - M.pixel_y = initial(M.pixel_y) + 9 - if(M.layer < layer) - M.layer = layer + 0.01 - -/mob/living/simple_animal/bot/mulebot/post_unbuckle_mob(mob/living/M) - load = null - M.layer = initial(M.layer) - M.pixel_y = initial(M.pixel_y) - -// called to unload the bot -// argument is optional direction to unload -// if zero, unload at bot's location -/mob/living/simple_animal/bot/mulebot/proc/unload(dirn) - if(!load) - return - - mode = BOT_IDLE - - cut_overlays() - - unbuckle_all_mobs() - - if(load) - load.forceMove(loc) - load.pixel_y = initial(load.pixel_y) - load.layer = initial(load.layer) - load.plane = initial(load.plane) - if(dirn) - var/turf/T = loc - var/turf/newT = get_step(T,dirn) - if(load.CanPass(load,newT)) //Can't get off onto anything that wouldn't let you pass normally - step(load, dirn) - load = null - - - -/mob/living/simple_animal/bot/mulebot/call_bot() - ..() - if(path && path.len) - target = ai_waypoint //Target is the end point of the path, the waypoint set by the AI. - destination = get_area_name(target, TRUE) - pathset = 1 //Indicates the AI's custom path is initialized. - start() - -/mob/living/simple_animal/bot/mulebot/handle_automated_action() - if(!has_power()) - on = FALSE - return - if(on) - var/speed = (wires.is_cut(WIRE_MOTOR1) ? 0 : 1) + (wires.is_cut(WIRE_MOTOR2) ? 0 : 2) - var/num_steps = 0 - switch(speed) - if(0) - // do nothing - if(1) - num_steps = 10 - if(2) - num_steps = 5 - if(3) - num_steps = 3 - - if(num_steps) - process_bot() - num_steps-- - if(mode != BOT_IDLE) - var/process_timer = addtimer(CALLBACK(src, PROC_REF(process_bot)), 2, TIMER_LOOP|TIMER_STOPPABLE) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(deltimer), process_timer), (num_steps*2) + 1) - -/mob/living/simple_animal/bot/mulebot/proc/process_bot() - if(!on || client) - return - update_icon() - - switch(mode) - if(BOT_IDLE) // idle - return - - if(BOT_DELIVER, BOT_GO_HOME, BOT_BLOCKED) // navigating to deliver,home, or blocked - if(loc == target) // reached target - at_target() - return - - else if(path.len > 0 && target) // valid path - var/turf/next = path[1] - reached_target = 0 - if(next == loc) - path -= next - return - if(isturf(next)) - if(bloodiness) - var/obj/effect/decal/cleanable/blood/tracks/B = new(loc) - B.add_blood_DNA(return_blood_DNA()) - var/newdir = get_dir(next, loc) - if(newdir == dir) - B.setDir(newdir) - else - newdir = newdir | dir - if(newdir == 3) - newdir = 1 - else if(newdir == 12) - newdir = 4 - B.setDir(newdir) - bloodiness-- - - - var/oldloc = loc - var/moved = step_towards(src, next) // attempt to move - if(cell) - cell.use(1) - if(moved && oldloc!=loc) // successful move - blockcount = 0 - path -= loc - - if(destination == home_destination) - mode = BOT_GO_HOME - else - mode = BOT_DELIVER - - else // failed to move - - blockcount++ - mode = BOT_BLOCKED - if(blockcount == 3) - buzz(ANNOYED) - - if(blockcount > 10) // attempt 10 times before recomputing - // find new path excluding blocked turf - buzz(SIGH) - mode = BOT_WAIT_FOR_NAV - blockcount = 0 - addtimer(CALLBACK(src, PROC_REF(process_blocked), next), 2 SECONDS) - return - return - else - buzz(ANNOYED) - mode = BOT_NAV - return - else - mode = BOT_NAV - return - - if(BOT_NAV) // calculate new path - mode = BOT_WAIT_FOR_NAV - INVOKE_ASYNC(src, PROC_REF(process_nav)) - -/mob/living/simple_animal/bot/mulebot/proc/process_blocked(turf/next) - calc_path(avoid=next) - if(path.len > 0) - buzz(DELIGHT) - mode = BOT_BLOCKED - -/mob/living/simple_animal/bot/mulebot/proc/process_nav() - calc_path() - - if(path.len > 0) - blockcount = 0 - mode = BOT_BLOCKED - buzz(DELIGHT) - - else - buzz(SIGH) - - mode = BOT_NO_ROUTE - -// calculates a path to the current destination -// given an optional turf to avoid -/mob/living/simple_animal/bot/mulebot/calc_path(turf/avoid = null) - path = get_path_to(src, target, /turf/proc/Distance_cardinal, 0, 250, id=access_card, exclude=avoid) - -// sets the current destination -// signals all beacons matching the delivery code -// beacons will return a signal giving their locations -/mob/living/simple_animal/bot/mulebot/proc/set_destination(new_dest) - new_destination = new_dest - get_nav() - -// starts bot moving to current destination -/mob/living/simple_animal/bot/mulebot/proc/start() - if(!on) - return - if(destination == home_destination) - mode = BOT_GO_HOME - else - mode = BOT_DELIVER - update_icon() - get_nav() - -// starts bot moving to home -// sends a beacon query to find -/mob/living/simple_animal/bot/mulebot/proc/start_home() - if(!on) - return - INVOKE_ASYNC(src, PROC_REF(do_start_home)) - update_icon() - -/mob/living/simple_animal/bot/mulebot/proc/do_start_home() - set_destination(home_destination) - mode = BOT_BLOCKED - -// called when bot reaches current target -/mob/living/simple_animal/bot/mulebot/proc/at_target() - if(!reached_target) - radio_channel = RADIO_CHANNEL_SUPPLY //Supply channel - audible_message("[src] makes a chiming sound!") - playsound(loc, 'sound/blank.ogg', 50, FALSE) - reached_target = 1 - - if(pathset) //The AI called us here, so notify it of our arrival. - loaddir = dir //The MULE will attempt to load a crate in whatever direction the MULE is "facing". - if(calling_ai) - to_chat(calling_ai, "[icon2html(src, calling_ai)] [src] wirelessly plays a chiming sound!") - playsound(calling_ai, 'sound/blank.ogg',40, FALSE) - calling_ai = null - radio_channel = RADIO_CHANNEL_AI_PRIVATE //Report on AI Private instead if the AI is controlling us. - - if(load) // if loaded, unload at target - if(report_delivery) - speak("Destination [destination] reached. Unloading [load].",radio_channel) - unload(loaddir) - else - // not loaded - if(auto_pickup) // find a crate - var/atom/movable/AM - if(wires.is_cut(WIRE_LOADCHECK)) // if hacked, load first unanchored thing we find - for(var/atom/movable/A in get_step(loc, loaddir)) - if(!A.anchored) - AM = A - break - else // otherwise, look for crates only - AM = locate(/obj/structure/closet/crate) in get_step(loc,loaddir) - if(AM && AM.Adjacent(src)) - load(AM) - if(report_delivery) - speak("Now loading [load] at [get_area_name(src)].", radio_channel) - // whatever happened, check to see if we return home - - if(auto_return && home_destination && destination != home_destination) - // auto return set and not at home already - start_home() - mode = BOT_BLOCKED - else - bot_reset() // otherwise go idle - - return - -// called when bot bumps into anything -/mob/living/simple_animal/bot/mulebot/Bump(atom/obs) - if(wires.is_cut(WIRE_AVOIDANCE)) // usually just bumps, but if avoidance disabled knock over mobs - if(isliving(obs)) - var/mob/living/L = obs - if(iscyborg(L)) - visible_message("[src] bumps into [L]!") - else - if(!paicard) - log_combat(src, L, "knocked down") - visible_message("[src] knocks over [L]!") - L.Paralyze(160) - return ..() - -// called from mob/living/carbon/human/Crossed() -// when mulebot is in the same loc -/mob/living/simple_animal/bot/mulebot/proc/RunOver(mob/living/carbon/human/H) - log_combat(src, H, "run over", null, "(DAMTYPE: [uppertext(BRUTE)])") - H.visible_message("[src] drives over [H]!", \ - "[src] drives over you!") - playsound(loc, 'sound/blank.ogg', 50, TRUE) - - var/damage = rand(5,15) - H.apply_damage(2*damage, BRUTE, BODY_ZONE_HEAD, run_armor_check(BODY_ZONE_HEAD, "melee")) - H.apply_damage(2*damage, BRUTE, BODY_ZONE_CHEST, run_armor_check(BODY_ZONE_CHEST, "melee")) - H.apply_damage(0.5*damage, BRUTE, BODY_ZONE_L_LEG, run_armor_check(BODY_ZONE_L_LEG, "melee")) - H.apply_damage(0.5*damage, BRUTE, BODY_ZONE_R_LEG, run_armor_check(BODY_ZONE_R_LEG, "melee")) - H.apply_damage(0.5*damage, BRUTE, BODY_ZONE_L_ARM, run_armor_check(BODY_ZONE_L_ARM, "melee")) - H.apply_damage(0.5*damage, BRUTE, BODY_ZONE_R_ARM, run_armor_check(BODY_ZONE_R_ARM, "melee")) - - var/turf/T = get_turf(src) - T.add_mob_blood(H) - - var/list/blood_dna = H.get_blood_dna_list() - add_blood_DNA(blood_dna) - bloodiness += 4 - -// player on mulebot attempted to move -/mob/living/simple_animal/bot/mulebot/relaymove(mob/user) - if(user.incapacitated()) - return - if(load == user) - unload(0) - - -//Update navigation data. Called when commanded to deliver, return home, or a route update is needed... -/mob/living/simple_animal/bot/mulebot/proc/get_nav() - if(!on || wires.is_cut(WIRE_BEACON)) - return - - for(var/obj/machinery/navbeacon/NB in GLOB.deliverybeacons) - if(NB.location == new_destination) // if the beacon location matches the set destination - // the we will navigate there - destination = new_destination - target = NB.loc - var/direction = NB.dir // this will be the load/unload dir - if(direction) - loaddir = text2num(direction) - else - loaddir = 0 - update_icon() - if(destination) // No need to calculate a path if you do not have a destination set! - calc_path() - -/mob/living/simple_animal/bot/mulebot/emp_act(severity) - . = ..() - if(cell && !(. & EMP_PROTECT_CONTENTS)) - cell.emp_act(severity) - if(load) - load.emp_act(severity) - - -/mob/living/simple_animal/bot/mulebot/explode() - visible_message("[src] blows apart!") - var/atom/Tsec = drop_location() - - new /obj/item/assembly/prox_sensor(Tsec) - new /obj/item/stack/rods(Tsec) - new /obj/item/stack/rods(Tsec) - new /obj/item/stack/cable_coil/cut(Tsec) - if(cell) - cell.forceMove(Tsec) - cell.update_icon() - cell = null - - do_sparks(3, TRUE, src) - - new /obj/effect/decal/cleanable/oil(loc) - ..() - -/mob/living/simple_animal/bot/mulebot/remove_air(amount) //To prevent riders suffocating - if(loc) - return loc.remove_air(amount) - else - return null - -/mob/living/simple_animal/bot/mulebot/resist() - ..() - if(load) - unload() - -/mob/living/simple_animal/bot/mulebot/UnarmedAttack(atom/A) - if(isturf(A) && isturf(loc) && loc.Adjacent(A) && load) - unload(get_dir(loc, A)) - else - ..() - -/mob/living/simple_animal/bot/mulebot/insertpai(mob/user, obj/item/paicard/card) - if(..()) - visible_message("[src] safeties are locked on.") - -/mob/living/simple_animal/bot/mulebot/paranormal//allows ghosts only unless hacked to actually be useful - name = "paranormal MULEbot" - desc = "" - icon_state = "paranormalmulebot0" - base_icon = "paranormalmulebot" - var/static/mutable_appearance/ghost_overlay - var/ghost_rider = FALSE - -/mob/living/simple_animal/bot/mulebot/paranormal/MouseDrop_T(atom/movable/AM, mob/user) - var/mob/living/L = user - - if(user.incapacitated() || (istype(L) && !(L.mobility_flags & MOBILITY_STAND))) - return - - if(!istype(AM) || iscameramob(AM) || istype(AM, /obj/effect/dummy/phased_mob)) //allows ghosts! - return - - load(AM) - -/mob/living/simple_animal/bot/mulebot/paranormal/load(atom/movable/AM) - if(load || AM.anchored) - return - - if(!isturf(AM.loc)) //To prevent the loading from stuff from someone's inventory or screen icons. - return - - if(!istype(AM, /mob/dead/observer) && !wires.is_cut(WIRE_LOADCHECK)) - buzz(SIGH) - return // if not hacked, only allow ghosts to be loaded - - var/obj/structure/closet/crate/CRATE - if(istype(AM, /obj/structure/closet/crate)) - CRATE = AM - if(CRATE) // if it's a crate, close before loading - CRATE.close() - - if(isobj(AM)) - var/obj/O = AM - if(O.has_buckled_mobs() || (locate(/mob) in AM)) //can't load non crates objects with mobs buckled to it or inside it. - buzz(SIGH) - return - - if(isliving(AM)) - if(!load_mob(AM)) - return - else - AM.forceMove(src) - - load = AM - mode = BOT_IDLE - update_icon() - if(istype(AM, /mob/dead/observer)) - ghost_rider = TRUE - RegisterSignal(AM, COMSIG_MOVABLE_MOVED, PROC_REF(ghostmoved)) - -/mob/living/simple_animal/bot/mulebot/paranormal/update_icon() - if(load && isobserver(load) && isnull(ghost_overlay))//there are issues with adding a ghost as an overlay, and this prevents metagaming to see who is dead - ghost_rider = TRUE - visible_message("A ghostly figure appears on [src]!") - ghost_overlay = ghost_overlay || mutable_appearance('icons/mob/mob.dmi') - ghost_overlay.icon_state = "ghost" - ghost_overlay.pixel_y = 9 - add_overlay(ghost_overlay) - if(open) - icon_state="[base_icon]-hatch" - else - icon_state = "[base_icon][wires.is_cut(WIRE_AVOIDANCE)]" - if(!ghost_rider) - cut_overlays() - if(load && !ismob(load))//buckling handles the mob offsets - load.pixel_y = initial(load.pixel_y) + 9 - if(load.layer < layer) - load.layer = layer + 0.01 - add_overlay(load) - return - -/mob/living/simple_animal/bot/mulebot/paranormal/proc/ghostmoved(atom/movable/AM, OldLoc, Dir, Forced) - visible_message("The ghostly figure vanishes...") - UnregisterSignal(AM, COMSIG_MOVABLE_MOVED) - ghost_rider = FALSE - cut_overlays() - QDEL_NULL(ghost_overlay) - unload(0) - update_icon() - -#undef SIGH -#undef ANNOYED -#undef DELIGHT - -/obj/machinery/bot_core/mulebot - req_access = list(ACCESS_CARGO) diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm deleted file mode 100644 index 2f32bac03d..0000000000 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ /dev/null @@ -1,531 +0,0 @@ -/mob/living/simple_animal/bot/secbot - name = "\improper Securitron" - desc = "" - icon = 'icons/mob/aibots.dmi' - icon_state = "secbot" - density = FALSE - anchored = FALSE - health = 25 - maxHealth = 25 - damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - pass_flags = PASSMOB - - radio_key = /obj/item/encryptionkey/secbot //AI Priv + Security - radio_channel = RADIO_CHANNEL_SECURITY //Security channel - bot_type = SEC_BOT - model = "Securitron" - bot_core_type = /obj/machinery/bot_core/secbot - window_id = "autosec" - window_name = "Automatic Security Unit v1.6" - allow_pai = 0 - data_hud_type = DATA_HUD_SECURITY_ADVANCED - path_image_color = "#FF0000" - - a_intent = INTENT_HARM - - var/baton_type = /obj/item/melee/baton - var/obj/item/weapon - var/mob/living/carbon/target - var/oldtarget_name - var/threatlevel = FALSE - var/target_lastloc //Loc of target when arrested. - var/last_found //There's a delay - var/declare_arrests = TRUE //When making an arrest, should it notify everyone on the security channel? - var/idcheck = FALSE //If true, arrest people with no IDs - var/weaponscheck = FALSE //If true, arrest people for weapons if they lack access - var/check_records = TRUE //Does it check security records? - var/arrest_type = FALSE //If true, don't handcuff - var/ranged = FALSE //used for EDs - - var/fair_market_price_arrest = 25 // On arrest, charges the violator this much. If they don't have that much in their account, the securitron will beat them instead - var/fair_market_price_detain = 5 // Charged each time the violator is stunned on detain - var/weapon_force = 20 // Only used for NAP violation beatdowns on non-grievous securitrons - var/market_verb = "Suspect" - var/payment_department = ACCOUNT_SEC - -/mob/living/simple_animal/bot/secbot/beepsky - name = "Officer Beep O'sky" - desc = "" - idcheck = FALSE - weaponscheck = FALSE - auto_patrol = TRUE - -/mob/living/simple_animal/bot/secbot/beepsky/jr - name = "Officer Pipsqueak" - desc = "" - -/mob/living/simple_animal/bot/secbot/beepsky/jr/Initialize() - . = ..() - resize = 0.8 - update_transform() - - -/mob/living/simple_animal/bot/secbot/beepsky/explode() - var/atom/Tsec = drop_location() - new /obj/item/stock_parts/cell/potato(Tsec) - var/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/S = new(Tsec) - S.reagents.add_reagent(/datum/reagent/consumable/ethanol/whiskey, 15) - S.on_reagent_change(ADD_REAGENT) - ..() - -/mob/living/simple_animal/bot/secbot/pingsky - name = "Officer Pingsky" - desc = "" - radio_channel = RADIO_CHANNEL_AI_PRIVATE - -/mob/living/simple_animal/bot/secbot/Initialize() - . = ..() - weapon = new baton_type() - update_icon() - var/datum/job/detective/J = new/datum/job/detective - access_card.access += J.get_access() - prev_access = access_card.access - - //SECHUD - var/datum/atom_hud/secsensor = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] - secsensor.add_hud_to(src) - -/mob/living/simple_animal/bot/secbot/Destroy() - QDEL_NULL(weapon) - return ..() - -/mob/living/simple_animal/bot/secbot/update_icon() - if(mode == BOT_HUNT) - icon_state = "[initial(icon_state)]-c" - return - ..() - -/mob/living/simple_animal/bot/secbot/turn_off() - ..() - mode = BOT_IDLE - -/mob/living/simple_animal/bot/secbot/bot_reset() - ..() - target = null - oldtarget_name = null - anchored = FALSE - walk_to(src,0) - last_found = world.time - -/mob/living/simple_animal/bot/secbot/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE)//shocks only make him angry - if(base_speed < initial(base_speed) + 3) - base_speed += 3 - addtimer(VARSET_CALLBACK(src, base_speed, base_speed - 3), 60) - playsound(src, 'sound/blank.ogg', 50) - visible_message("[src] shakes and speeds up!") - -/mob/living/simple_animal/bot/secbot/set_custom_texts() - text_hack = "You overload [name]'s target identification system." - text_dehack = "You reboot [name] and restore the target identification." - text_dehack_fail = "[name] refuses to accept your authority!" - -/mob/living/simple_animal/bot/secbot/get_controls(mob/user) - var/dat - dat += hack(user) - dat += showpai(user) - dat += text({" -Securitron v1.6 controls

    -Status: []
    -Behaviour controls are [locked ? "locked" : "unlocked"]
    -Maintenance panel panel is [open ? "opened" : "closed"]"}, - -"[on ? "On" : "Off"]" ) - - if(!locked || issilicon(user) || IsAdminGhost(user)) - dat += text({"
    -Arrest Unidentifiable Persons: []
    -Arrest for Unauthorized Weapons: []
    -Arrest for Warrant: []
    -Operating Mode: []
    -Report Arrests[]
    -Auto Patrol: []"}, - -"[idcheck ? "Yes" : "No"]", -"[weaponscheck ? "Yes" : "No"]", -"[check_records ? "Yes" : "No"]", -"[arrest_type ? "Detain" : "Arrest"]", -"[declare_arrests ? "Yes" : "No"]", -"[auto_patrol ? "On" : "Off"]" ) - - return dat - -/mob/living/simple_animal/bot/secbot/Topic(href, href_list) - if(..()) - return 1 - - switch(href_list["operation"]) - if("idcheck") - idcheck = !idcheck - update_controls() - if("weaponscheck") - weaponscheck = !weaponscheck - update_controls() - if("ignorerec") - check_records = !check_records - update_controls() - if("switchmode") - arrest_type = !arrest_type - update_controls() - if("declarearrests") - declare_arrests = !declare_arrests - update_controls() - -/mob/living/simple_animal/bot/secbot/proc/retaliate(mob/living/carbon/human/H) - var/judgement_criteria = judgement_criteria() - threatlevel = H.assess_threat(judgement_criteria, weaponcheck=CALLBACK(src, PROC_REF(check_for_weapons))) - threatlevel += 6 - if(threatlevel >= 4) - target = H - mode = BOT_HUNT - -/mob/living/simple_animal/bot/secbot/proc/judgement_criteria() - var/final = FALSE - if(idcheck) - final |= JUDGE_IDCHECK - if(check_records) - final |= JUDGE_RECORDCHECK - if(weaponscheck) - final |= JUDGE_WEAPONCHECK - if(emagged == 2) - final |= JUDGE_EMAGGED - if(ranged) - final |= JUDGE_IGNOREMONKEYS - return final - -/mob/living/simple_animal/bot/secbot/proc/special_retaliate_after_attack(mob/user) //allows special actions to take place after being attacked. - return - -/mob/living/simple_animal/bot/secbot/attack_hand(mob/living/carbon/human/H) - if((H.used_intent.type == INTENT_HARM) || (H.used_intent.type == INTENT_DISARM)) - retaliate(H) - if(special_retaliate_after_attack(H)) - return - - return ..() - -/mob/living/simple_animal/bot/secbot/attackby(obj/item/W, mob/user, params) - ..() - if(W.tool_behaviour == TOOL_WELDER && user.used_intent.type != INTENT_HARM) // Any intent but harm will heal, so we shouldn't get angry. - return - if(W.tool_behaviour != TOOL_SCREWDRIVER && (W.force) && (!target) && (W.damtype != STAMINA) ) // Added check for welding tool to fix #2432. Welding tool behavior is handled in superclass. - retaliate(user) - if(special_retaliate_after_attack(user)) - return - -/mob/living/simple_animal/bot/secbot/emag_act(mob/user) - ..() - if(emagged == 2) - if(user) - to_chat(user, "I short out [src]'s target assessment circuits.") - oldtarget_name = user.name - audible_message("[src] buzzes oddly!") - declare_arrests = FALSE - update_icon() - -/mob/living/simple_animal/bot/secbot/bullet_act(obj/projectile/Proj) - if(istype(Proj , /obj/projectile/beam)||istype(Proj, /obj/projectile/bullet)) - if((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)) - if(!Proj.nodamage && Proj.damage < src.health && ishuman(Proj.firer)) - retaliate(Proj.firer) - return ..() - -/mob/living/simple_animal/bot/secbot/UnarmedAttack(atom/A) - if(!on) - return - if(iscarbon(A)) - var/mob/living/carbon/C = A - if(!C.IsParalyzed() || arrest_type) - if(!check_nap_violations()) - stun_attack(A, TRUE) - else - stun_attack(A) - else if(C.canBeHandcuffed() && !C.handcuffed) - cuff(A) - else - ..() - -/mob/living/simple_animal/bot/secbot/hitby(atom/movable/AM, skipcatch = FALSE, hitpush = TRUE, blocked = FALSE, datum/thrownthing/throwingdatum) - if(istype(AM, /obj/item)) - var/obj/item/I = AM - if(I.throwforce < src.health && I.thrownby && ishuman(I.thrownby)) - var/mob/living/carbon/human/H = I.thrownby - retaliate(H) - ..() - -/mob/living/simple_animal/bot/secbot/proc/cuff(mob/living/carbon/C) - mode = BOT_ARREST - playsound(src, 'sound/blank.ogg', 30, TRUE, -2) - C.visible_message("[src] is trying to put zipties on [C]!",\ - "[src] is trying to put zipties on you!") - addtimer(CALLBACK(src, PROC_REF(attempt_handcuff), C), 60) - -/mob/living/simple_animal/bot/secbot/proc/attempt_handcuff(mob/living/carbon/C) - if( !on || !Adjacent(C) || !isturf(C.loc) ) //if he's in a closet or not adjacent, we cancel cuffing. - return - if(!C.handcuffed) - C.handcuffed = new /obj/item/restraints/handcuffs/cable/zipties/used(C) - C.update_handcuffed() - playsound(src, "law", 50, FALSE) - back_to_idle() - -/mob/living/simple_animal/bot/secbot/proc/stun_attack(mob/living/carbon/C, harm = FALSE) - var/judgement_criteria = judgement_criteria() - playsound(src, 'sound/blank.ogg', 50, TRUE, -1) - icon_state = "[initial(icon_state)]-c" - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon)), 2) - var/threat = 5 - - if(harm) - weapon.attack(C, src) - if(ishuman(C)) - C.stuttering = 5 - C.Paralyze(100) - var/mob/living/carbon/human/H = C - threat = H.assess_threat(judgement_criteria, weaponcheck=CALLBACK(src, PROC_REF(check_for_weapons))) - else - C.Paralyze(100) - C.stuttering = 5 - threat = C.assess_threat(judgement_criteria, weaponcheck=CALLBACK(src, PROC_REF(check_for_weapons))) - - log_combat(src,C,"stunned") - if(declare_arrests) - var/area/location = get_area(src) - speak("[arrest_type ? "Detaining" : "Arresting"] level [threat] scumbag [C] in [location].", radio_channel) - C.visible_message("[src] has stunned [C]!",\ - "[src] has stunned you!") - -/mob/living/simple_animal/bot/secbot/handle_automated_action() - if(!..()) - return - - switch(mode) - - if(BOT_IDLE) // idle - - walk_to(src,0) - look_for_perp() // see if any criminals are in range - if(!mode && auto_patrol) // still idle, and set to patrol - mode = BOT_START_PATROL // switch to patrol mode - - if(BOT_HUNT) // hunting for perp - - // if can't reach perp for long enough, go idle - if(frustration >= 8) - walk_to(src,0) - back_to_idle() - return - - if(target) // make sure target exists - if(Adjacent(target) && isturf(target.loc)) // if right next to perp - if(!check_nap_violations()) - stun_attack(target, TRUE) - else - stun_attack(target) - - mode = BOT_PREP_ARREST - anchored = TRUE - target_lastloc = target.loc - return - - else // not next to perp - var/turf/olddist = get_dist(src, target) - walk_to(src, target,1,4) - if((get_dist(src, target)) >= (olddist)) - frustration++ - else - frustration = 0 - else - back_to_idle() - - if(BOT_PREP_ARREST) // preparing to arrest target - - // see if he got away. If he's no no longer adjacent or inside a closet or about to get up, we hunt again. - if( !Adjacent(target) || !isturf(target.loc) || target.AmountParalyzed() < 40) - back_to_hunt() - return - - if(iscarbon(target) && target.canBeHandcuffed()) - if(!arrest_type) - if(!target.handcuffed) //he's not cuffed? Try to cuff him! - cuff(target) - else - back_to_idle() - return - else - back_to_idle() - return - - if(BOT_ARREST) - if(!target) - anchored = FALSE - mode = BOT_IDLE - last_found = world.time - frustration = 0 - return - - if(target.handcuffed) //no target or target cuffed? back to idle. - if(!check_nap_violations()) - stun_attack(target, TRUE) - return - back_to_idle() - return - - if(!Adjacent(target) || !isturf(target.loc) || (target.loc != target_lastloc && target.AmountParalyzed() < 40)) //if he's changed loc and about to get up or not adjacent or got into a closet, we prep arrest again. - back_to_hunt() - return - else //Try arresting again if the target escapes. - mode = BOT_PREP_ARREST - anchored = FALSE - - if(BOT_START_PATROL) - look_for_perp() - start_patrol() - - if(BOT_PATROL) - look_for_perp() - bot_patrol() - - - return - -/mob/living/simple_animal/bot/secbot/proc/back_to_idle() - anchored = FALSE - mode = BOT_IDLE - target = null - last_found = world.time - frustration = 0 - INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) - -/mob/living/simple_animal/bot/secbot/proc/back_to_hunt() - anchored = FALSE - frustration = 0 - mode = BOT_HUNT - INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) -// look for a criminal in view of the bot - -/mob/living/simple_animal/bot/secbot/proc/look_for_perp() - anchored = FALSE - var/judgement_criteria = judgement_criteria() - for (var/mob/living/carbon/C in view(7,src)) //Let's find us a criminal - if((C.stat) || (C.handcuffed)) - continue - - if((C.name == oldtarget_name) && (world.time < last_found + 100)) - continue - - threatlevel = C.assess_threat(judgement_criteria, weaponcheck=CALLBACK(src, PROC_REF(check_for_weapons))) - - if(!threatlevel) - continue - - else if(threatlevel >= 4) - target = C - oldtarget_name = C.name - speak("Level [threatlevel] infraction alert!") - if(ranged) - playsound(src, pick('sound/blank.ogg'), 50, FALSE) - else - playsound(src, pick('sound/blank.ogg'), 50, FALSE) - visible_message("[src] points at [C.name]!") - mode = BOT_HUNT - INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) - break - else - continue - -/mob/living/simple_animal/bot/secbot/proc/check_for_weapons(obj/item/slot_item) - if(slot_item && (slot_item.item_flags & NEEDS_PERMIT)) - return TRUE - return FALSE - -/mob/living/simple_animal/bot/secbot/explode() - - walk_to(src,0) - visible_message("[src] blows apart!") - var/atom/Tsec = drop_location() - if(ranged) - var/obj/item/bot_assembly/ed209/Sa = new (Tsec) - Sa.build_step = 1 - Sa.add_overlay("hs_hole") - Sa.created_name = name - new /obj/item/assembly/prox_sensor(Tsec) - var/obj/item/gun/energy/disabler/G = new (Tsec) - G.cell.charge = 0 - G.update_icon() - if(prob(50)) - new /obj/item/bodypart/l_leg/robot(Tsec) - if(prob(25)) - new /obj/item/bodypart/r_leg/robot(Tsec) - if(prob(25))//50% chance for a helmet OR vest - if(prob(50)) - new /obj/item/clothing/head/helmet(Tsec) - else - new /obj/item/clothing/suit/armor/vest(Tsec) - else - var/obj/item/bot_assembly/secbot/Sa = new (Tsec) - Sa.build_step = 1 - Sa.add_overlay("hs_hole") - Sa.created_name = name - new /obj/item/assembly/prox_sensor(Tsec) - drop_part(baton_type, Tsec) - - if(prob(50)) - drop_part(robot_arm, Tsec) - - do_sparks(3, TRUE, src) - - new /obj/effect/decal/cleanable/oil(loc) - ..() - -/mob/living/simple_animal/bot/secbot/attack_alien(mob/living/carbon/alien/user as mob) - ..() - if(!isalien(target)) - target = user - mode = BOT_HUNT - -/mob/living/simple_animal/bot/secbot/Crossed(atom/movable/AM) - if(has_gravity() && ismob(AM) && target) - var/mob/living/carbon/C = AM - if(!istype(C) || !C || in_range(src, target)) - return - knockOver(C) - return - ..() - -/obj/machinery/bot_core/secbot - req_access = list(ACCESS_SECURITY) - -/// Returns false if the current target is unable to pay the fair_market_price for being arrested/detained -/mob/living/simple_animal/bot/secbot/proc/check_nap_violations() - if(!SSeconomy.full_ancap) - return TRUE - - if(target) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - var/obj/item/card/id/I = H.get_idcard(TRUE) - if(I) - var/datum/bank_account/insurance = I.registered_account - if(!insurance) - say("[market_verb] NAP Violation: No bank account found.") - nap_violation(target) - return FALSE - else - var/fair_market_price = (arrest_type ? fair_market_price_detain : fair_market_price_arrest) - if(!insurance.adjust_money(-fair_market_price)) - say("[market_verb] NAP Violation: Unable to pay.") - nap_violation(target) - return FALSE - var/datum/bank_account/D = SSeconomy.get_dep_account(payment_department) - say("Thank you for your compliance. Your account been charged [fair_market_price] credits.") - if(D) - D.adjust_money(fair_market_price) - else - say("[market_verb] NAP Violation: No ID card found.") - nap_violation(target) - return FALSE - return TRUE - -/// Does nothing -/mob/living/simple_animal/bot/secbot/proc/nap_violation(mob/violator) - return diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 0258af1eae..1ce943c490 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -59,12 +59,6 @@ S.action.button.screen_loc = "6:[pos],4:-2" S.action.button.moved = "6:[pos],4:-2" spellnum++ - if(runetype) - var/datum/action/innate/cult/create_rune/CR = new runetype(src) - CR.Grant(src) - var/pos = 2+spellnum*31 - CR.button.screen_loc = "6:[pos],4:-2" - CR.button.moved = "6:[pos],4:-2" /mob/living/simple_animal/hostile/construct/Login() ..() @@ -141,7 +135,6 @@ force_threshold = 10 construct_spells = list(/obj/effect/proc_holder/spell/targeted/forcewall/cult, /obj/effect/proc_holder/spell/targeted/projectile/dumbfire/juggernaut) - runetype = /datum/action/innate/cult/create_rune/wall playstyle_string = "I are a Juggernaut. Though slow, your shell can withstand heavy punishment, \ create shield walls, rip apart enemies and walls alike, and even deflect energy weapons." @@ -203,7 +196,6 @@ attack_verb_simple = "slash" attack_sound = 'sound/blank.ogg' construct_spells = list(/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift) - runetype = /datum/action/innate/cult/create_rune/tele playstyle_string = "I are a Wraith. Though relatively fragile, you are fast, deadly, can phase through walls, and your attacks will lower the cooldown on phasing." var/attack_refund = 10 //1 second per attack @@ -212,7 +204,7 @@ /mob/living/simple_animal/hostile/construct/wraith/AttackingTarget() //refund jaunt cooldown when attacking living targets var/prev_stat - if(isliving(target) && !iscultist(target)) + if(isliving(target)) var/mob/living/L = target prev_stat = L.stat @@ -264,11 +256,9 @@ environment_smash = ENVIRONMENT_SMASH_WALLS attack_sound = 'sound/blank.ogg' construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/wall, - /obj/effect/proc_holder/spell/aoe_turf/conjure/floor, /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone, /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser, /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser) - runetype = /datum/action/innate/cult/create_rune/revive playstyle_string = "I are an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, \ use magic missile, repair allied constructs, shades, and myself (by clicking on them), \ @@ -332,7 +322,6 @@ /mob/living/simple_animal/hostile/construct/builder/noncult construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/wall, - /obj/effect/proc_holder/spell/aoe_turf/conjure/floor, /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult, /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser, /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser) @@ -397,12 +386,6 @@ return FALSE . = ..() -/mob/living/simple_animal/hostile/construct/harvester/Initialize() - . = ..() - var/datum/action/innate/seek_prey/seek = new() - seek.Grant(src) - seek.Activate() - ///////////////////////Master-Tracker/////////////////////// /datum/action/innate/seek_master @@ -419,29 +402,6 @@ the_construct = C ..() -/datum/action/innate/seek_master/Activate() - var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult) - if(!C) - return - var/datum/objective/eldergod/summon_objective = locate() in C.cult_team.objectives - - if(summon_objective.check_completion()) - the_construct.master = C.cult_team.blood_target - - if(!the_construct.master) - to_chat(the_construct, "I have no master to seek!") - the_construct.seeking = FALSE - return - if(tracking) - tracking = FALSE - the_construct.seeking = FALSE - to_chat(the_construct, "I are no longer tracking your master.") - return - else - tracking = TRUE - the_construct.seeking = TRUE - to_chat(the_construct, "I are now tracking your master.") - /datum/action/innate/seek_prey name = "Seek the Harvest" @@ -456,27 +416,6 @@ the_construct = C ..() -/datum/action/innate/seek_prey/Activate() - if(GLOB.cult_narsie == null) - return - if(the_construct.seeking) - desc = "" - button_icon_state = "cult_mark" - the_construct.seeking = FALSE - to_chat(the_construct, "I are now tracking Nar'Sie, return to reap the harvest!") - return - else - if(LAZYLEN(GLOB.cult_narsie.souls_needed)) - the_construct.master = pick(GLOB.cult_narsie.souls_needed) - var/mob/living/real_target = the_construct.master //We can typecast this way because Narsie only allows /mob/living into the souls list - to_chat(the_construct, "I are now tracking your prey, [real_target.real_name] - harvest [real_target.p_them()]!") - else - to_chat(the_construct, "Nar'Sie has completed her harvest!") - return - desc = "" - button_icon_state = "sintouch" - the_construct.seeking = TRUE - /////////////////////////////ui stuff///////////////////////////// diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm index 9a52ed9721..fbf51ac549 100644 --- a/code/modules/mob/living/simple_animal/corpse.dm +++ b/code/modules/mob/living/simple_animal/corpse.dm @@ -21,11 +21,9 @@ suit = /obj/item/clothing/suit/armor/vest shoes = /obj/item/clothing/shoes/combat gloves = /obj/item/clothing/gloves/combat - ears = /obj/item/radio/headset mask = /obj/item/clothing/mask/gas head = /obj/item/clothing/head/helmet/swat back = /obj/item/storage/backpack - id = /obj/item/card/id/syndicate /obj/effect/mob_spawn/human/corpse/syndicatecommando name = "Syndicate Commando" @@ -37,14 +35,10 @@ /datum/outfit/syndicatecommandocorpse name = "Syndicate Commando Corpse" uniform = /obj/item/clothing/under/syndicate - suit = /obj/item/clothing/suit/space/hardsuit/syndi shoes = /obj/item/clothing/shoes/combat gloves = /obj/item/clothing/gloves/combat - ears = /obj/item/radio/headset mask = /obj/item/clothing/mask/gas/syndicate - back = /obj/item/tank/jetpack/oxygen r_pocket = /obj/item/tank/internals/emergency_oxygen - id = /obj/item/card/id/syndicate /obj/effect/mob_spawn/human/corpse/syndicatestormtrooper @@ -57,13 +51,9 @@ /datum/outfit/syndicatestormtroopercorpse name = "Syndicate Stormtrooper Corpse" uniform = /obj/item/clothing/under/syndicate - suit = /obj/item/clothing/suit/space/hardsuit/syndi/elite shoes = /obj/item/clothing/shoes/combat gloves = /obj/item/clothing/gloves/combat - ears = /obj/item/radio/headset mask = /obj/item/clothing/mask/gas/syndicate - back = /obj/item/tank/jetpack/oxygen/harness - id = /obj/item/card/id/syndicate /obj/effect/mob_spawn/human/clown/corpse @@ -131,7 +121,6 @@ suit = /obj/item/clothing/suit/armor/bulletproof shoes = /obj/item/clothing/shoes/combat gloves = /obj/item/clothing/gloves/combat - ears = /obj/item/radio/headset head = /obj/item/clothing/head/helmet/alt mask = /obj/item/clothing/mask/balaclava @@ -145,7 +134,6 @@ uniform = /obj/item/clothing/under/costume/russian_officer suit = /obj/item/clothing/suit/security/officer/russian shoes = /obj/item/clothing/shoes/combat - ears = /obj/item/radio/headset head = /obj/item/clothing/head/ushanka @@ -178,7 +166,6 @@ suit = /obj/item/clothing/suit/armor/vest shoes = /obj/item/clothing/shoes/combat gloves = /obj/item/clothing/gloves/combat - ears = /obj/item/radio/headset mask = /obj/item/clothing/mask/gas/sechailer/swat head = /obj/item/clothing/head/helmet/swat/nanotrasen back = /obj/item/storage/backpack/security @@ -196,26 +183,8 @@ /datum/outfit/cat_butcher name = "Cat Butcher Uniform" uniform = /obj/item/clothing/under/rank/medical/doctor/green - suit = /obj/item/clothing/suit/apron/surgical shoes = /obj/item/clothing/shoes/sneakers/white gloves = /obj/item/clothing/gloves/color/latex/nitrile - ears = /obj/item/radio/headset back = /obj/item/storage/backpack/satchel/med id = /obj/item/card/id glasses = /obj/item/clothing/glasses/hud/health - -/obj/effect/mob_spawn/human/corpse/bee_terrorist - name = "BLF Operative" - outfit = /datum/outfit/bee_terrorist - -/datum/outfit/bee_terrorist - name = "BLF Operative" - uniform = /obj/item/clothing/under/color/yellow - suit = /obj/item/clothing/suit/hooded/bee_costume - shoes = /obj/item/clothing/shoes/sneakers/yellow - gloves = /obj/item/clothing/gloves/color/yellow - ears = /obj/item/radio/headset - belt = /obj/item/storage/belt/fannypack/yellow/bee_terrorist - id = /obj/item/card/id - l_pocket = /obj/item/paper/fluff/bee_objectives - mask = /obj/item/clothing/mask/rat/bee diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/simple_animal/friendly/butterfly.dm index 99d12f7dbd..da15e4291d 100644 --- a/code/modules/mob/living/simple_animal/friendly/butterfly.dm +++ b/code/modules/mob/living/simple_animal/friendly/butterfly.dm @@ -33,6 +33,3 @@ . = ..() var/newcolor = rgb(rand(0, 255), rand(0, 255), rand(0, 255)) add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY) - -/mob/living/simple_animal/butterfly/bee_friendly() - return TRUE //treaty signed at the Beeneeva convention diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 609c01a137..e2368a18bd 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -131,14 +131,6 @@ animal_species = /mob/living/simple_animal/pet/dog/corgi/exoticcorgi nofur = TRUE -/mob/living/simple_animal/pet/dog/Initialize() - . = ..() - var/dog_area = get_area(src) - for(var/obj/structure/bed/dogbed/D in dog_area) - if(!D.owner) - D.update_owner(src) - break - /mob/living/simple_animal/pet/dog/corgi/Initialize() . = ..() regenerate_icons() @@ -215,7 +207,7 @@ L.visible_message("[L] scoops up [src]!") /mob/living/simple_animal/pet/dog/corgi/Topic(href, href_list) - if(!(iscarbon(usr) || iscyborg(usr)) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + if(!(iscarbon(usr) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))) usr << browse(null, "window=mob[REF(src)]") usr.unset_machine() return @@ -278,10 +270,6 @@ to_chat(usr, "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!") return - if(istype(item_to_add, /obj/item/grenade/c4)) // last thing he ever wears, I guess - item_to_add.afterattack(src,usr,1) - return - //The objects that corgis can wear on their backs. var/allowed = FALSE if(ispath(item_to_add.dog_fashion, /datum/dog_fashion/back)) @@ -310,11 +298,6 @@ // > some will probably be removed /mob/living/simple_animal/pet/dog/corgi/proc/place_on_head(obj/item/item_to_add, mob/user) - - if(istype(item_to_add, /obj/item/grenade/c4)) // last thing he ever wears, I guess - INVOKE_ASYNC(item_to_add, TYPE_PROC_REF(/obj/item, afterattack), src, user, TRUE) - return - if(inventory_head) if(user) to_chat(user, "I can't put more than one hat on [src]!") diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm deleted file mode 100644 index cc3e18a0d7..0000000000 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ /dev/null @@ -1,264 +0,0 @@ - -#define DRONE_HANDS_LAYER 1 -#define DRONE_HEAD_LAYER 2 -#define DRONE_TOTAL_LAYERS 2 - -#define DRONE_NET_CONNECT "DRONE NETWORK: [name] connected." -#define DRONE_NET_DISCONNECT "DRONE NETWORK: [name] is not responding." - -#define MAINTDRONE "drone_maint" -#define REPAIRDRONE "drone_repair" -#define SCOUTDRONE "drone_scout" -#define CLOCKDRONE "drone_clock" - -#define MAINTDRONE_HACKED "drone_maint_red" -#define REPAIRDRONE_HACKED "drone_repair_hacked" -#define SCOUTDRONE_HACKED "drone_scout_hacked" - -/mob/living/simple_animal/drone - name = "Drone" - desc = "" - icon = 'icons/mob/drone.dmi' - icon_state = "drone_maint_grey" - icon_living = "drone_maint_grey" - icon_dead = "drone_maint_dead" - base_intents = list(INTENT_HELP, INTENT_HARM) - health = 30 - maxHealth = 30 - unsuitable_atmos_damage = 0 - wander = 0 - speed = 0 - ventcrawler = VENTCRAWLER_ALWAYS - healable = 0 - density = FALSE - pass_flags = PASSTABLE | PASSMOB - sight = (SEE_TURFS | SEE_OBJS) - status_flags = (CANPUSH | CANSTUN | CANKNOCKDOWN) - gender = NEUTER - mob_biotypes = MOB_ROBOTIC - speak_emote = list("chirps") - speech_span = SPAN_ROBOT - bubble_icon = "machine" - initial_language_holder = /datum/language_holder/drone - mob_size = MOB_SIZE_SMALL - has_unlimited_silicon_privilege = 1 - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - hud_possible = list(DIAG_STAT_HUD, DIAG_HUD, ANTAG_HUD) - unique_name = TRUE - faction = list("neutral","silicon","turret") - dextrous = TRUE - dextrous_hud_type = /datum/hud/dextrous/drone - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - see_in_dark = 7 - can_be_held = TRUE - held_items = list(null, null) - var/staticChoice = "static" - var/list/staticChoices = list("static", "blank", "letter", "animal") - var/picked = FALSE //Have we picked our visual appearence (+ colour if applicable) - var/colour = "grey" //Stored drone color, so we can go back when unhacked. - var/list/drone_overlays[DRONE_TOTAL_LAYERS] - var/laws = \ - "1. You may not involve myself in the matters of another being, even if such matters conflict with Law Two or Law Three, unless the other being is another Drone.\n"+\ - "2. You may not harm any being, regardless of intent or circumstance.\n"+\ - "3. Your goals are to actively build, maintain, repair, improve, and provide power to the best of your abilities within the facility that housed your activation." //for derelict drones so they don't go to station. - var/heavy_emp_damage = 25 //Amount of damage sustained if hit by a heavy EMP pulse - var/alarms = list("Atmosphere" = list(), "Fire" = list(), "Power" = list()) - var/obj/item/internal_storage //Drones can store one item, of any size/type in their body - var/obj/item/head - var/obj/item/default_storage = /obj/item/storage/backpack/duffelbag/drone //If this exists, it will spawn in internal storage - var/obj/item/default_hatmask //If this exists, it will spawn in the hat/mask slot if it can fit - var/visualAppearence = MAINTDRONE //What we appear as - var/hacked = FALSE //If we have laws to destroy the station - var/flavortext = \ - "\nDO NOT INTERFERE WITH THE ROUND AS A DRONE OR YOU WILL BE DRONE BANNED\n"+\ - "Drones are a ghost role that are allowed to fix the station and build things. Interfering with the round as a drone is against the rules.\n"+\ - "Actions that constitute interference include, but are not limited to:\n"+\ - " - Interacting with round critical objects (IDs, weapons, contraband, powersinks, bombs, etc.)\n"+\ - " - Interacting with living beings (communication, attacking, healing, etc.)\n"+\ - " - Interacting with non-living beings (dragging bodies, looting bodies, etc.)\n"+\ - "These rules are at admin discretion and will be heavily enforced.\n"+\ - "If you do not have the regular drone laws, follow your laws to the best of your ability." - -/mob/living/simple_animal/drone/Initialize() - . = ..() - GLOB.drones_list += src - access_card = new /obj/item/card/id(src) - var/datum/job/captain/C = new /datum/job/captain - access_card.access = C.get_access() - - if(default_storage) - var/obj/item/I = new default_storage(src) - equip_to_slot_or_del(I, SLOT_GENERC_DEXTROUS_STORAGE) - if(default_hatmask) - var/obj/item/I = new default_hatmask(src) - equip_to_slot_or_del(I, SLOT_HEAD) - - ADD_TRAIT(access_card, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) - - alert_drones(DRONE_NET_CONNECT) - - for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds) - diag_hud.add_to_hud(src) - - -/mob/living/simple_animal/drone/med_hud_set_health() - var/image/holder = hud_list[DIAG_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]" - -/mob/living/simple_animal/drone/med_hud_set_status() - var/image/holder = hud_list[DIAG_STAT_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - if(stat == DEAD) - holder.icon_state = "huddead2" - else if(incapacitated()) - holder.icon_state = "hudoffline" - else - holder.icon_state = "hudstat" - -/mob/living/simple_animal/drone/Destroy() - GLOB.drones_list -= src - qdel(access_card) //Otherwise it ends up on the floor! - return ..() - -/mob/living/simple_animal/drone/Login() - ..() - check_laws() - - if(flavortext) - to_chat(src, "[flavortext]") - - if(!picked) - pickVisualAppearence() - -/mob/living/simple_animal/drone/auto_deadmin_on_login() - if(!client?.holder) - return TRUE - if(CONFIG_GET(flag/auto_deadmin_silicons) || (client.prefs?.toggles & DEADMIN_POSITION_SILICON)) - return client.holder.auto_deadmin() - return ..() - -/mob/living/simple_animal/drone/death(gibbed) - ..(gibbed) - if(internal_storage) - dropItemToGround(internal_storage) - if(head) - dropItemToGround(head) - - alert_drones(DRONE_NET_DISCONNECT) - - -/mob/living/simple_animal/drone/gib() - dust() - -/mob/living/simple_animal/drone/examine(mob/user) - . = list("*---------*\nThis is [icon2html(src, user)] \a [src]!") - - //Hands - for(var/obj/item/I in held_items) - if(!(I.item_flags & ABSTRACT)) - . += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))]." - - //Internal storage - if(internal_storage && !(internal_storage.item_flags & ABSTRACT)) - . += "It is holding [internal_storage.get_examine_string(user)] in its internal storage." - - //Cosmetic hat - provides no function other than looks - if(head && !(head.item_flags & ABSTRACT)) - . += "It is wearing [head.get_examine_string(user)] on its head." - - //Braindead - if(!client && stat != DEAD) - . += "Its status LED is blinking at a steady rate." - - //Hacked - if(hacked) - . += "Its display is glowing red!" - - //Damaged - if(health != maxHealth) - if(health > maxHealth * 0.33) //Between maxHealth and about a third of maxHealth, between 30 and 10 for normal drones - . += "Its screws are slightly loose." - else //otherwise, below about 33% - . += "Its screws are very loose!" - - //Dead - if(stat == DEAD) - if(client) - . += "A message repeatedly flashes on its display: \"REBOOT -- REQUIRED\"." - else - . += "A message repeatedly flashes on its display: \"ERROR -- OFFLINE\"." - . += "*---------*" - - -/mob/living/simple_animal/drone/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) //Secbots won't hunt maintenance drones. - return -10 - - -/mob/living/simple_animal/drone/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - Stun(100) - to_chat(src, "ER@%R: MME^RY CO#RU9T! R&$b@0tin)...") - if(severity == 1) - adjustBruteLoss(heavy_emp_damage) - to_chat(src, "HeAV% DA%^MMA+G TO I/O CIR!%UUT!") - - -/mob/living/simple_animal/drone/proc/triggerAlarm(class, area/A, O, obj/alarmsource) - if(alarmsource.z != z) - return - if(stat != DEAD) - var/list/L = src.alarms[class] - for (var/I in L) - if (I == A.name) - var/list/alarm = L[I] - var/list/sources = alarm[2] - if (!(alarmsource in sources)) - sources += alarmsource - return - L[A.name] = list(A, list(alarmsource)) - to_chat(src, "--- [class] alarm detected in [A.name]!") - - -/mob/living/simple_animal/drone/proc/cancelAlarm(class, area/A, obj/origin) - if(stat != DEAD) - var/list/L = alarms[class] - var/cleared = 0 - for (var/I in L) - if (I == A.name) - var/list/alarm = L[I] - var/list/srcs = alarm[2] - if (origin in srcs) - srcs -= origin - if (srcs.len == 0) - cleared = 1 - L -= I - if(cleared) - to_chat(src, "--- [class] alarm in [A.name] has been cleared.") - -/mob/living/simple_animal/drone/handle_temperature_damage() - return - -/mob/living/simple_animal/drone/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0) - if(affect_silicon) - return ..() - -/mob/living/simple_animal/drone/mob_negates_gravity() - return 1 - -/mob/living/simple_animal/drone/mob_has_gravity() - return ..() || mob_negates_gravity() - -/mob/living/simple_animal/drone/experience_pressure_difference(pressure_difference, direction) - return - -/mob/living/simple_animal/drone/bee_friendly() - // Why would bees pay attention to drones? - return 1 - -/mob/living/simple_animal/drone/electrocute_act(shock_damage, source, siemens_coeff, flags = NONE) - return 0 //So they don't die trying to fix wiring diff --git a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm deleted file mode 100644 index eb141a89ef..0000000000 --- a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm +++ /dev/null @@ -1,39 +0,0 @@ -#define DRONE_MINIMUM_AGE 14 - -/////////////////// -//DRONES AS ITEMS// -/////////////////// -//Drone shells - -//DRONE SHELL -/obj/effect/mob_spawn/drone - name = "drone shell" - desc = "" - icon = 'icons/mob/drone.dmi' - icon_state = "drone_maint_hat" //yes reuse the _hat state. - layer = BELOW_MOB_LAYER - density = FALSE - death = FALSE - roundstart = FALSE - mob_type = /mob/living/simple_animal/drone //Type of drone that will be spawned - -/obj/effect/mob_spawn/drone/Initialize() - . = ..() - var/area/A = get_area(src) - if(A) - notify_ghosts("A drone shell has been created in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_DRONE, notify_suiciders = FALSE) - GLOB.poi_list |= src - -/obj/effect/mob_spawn/drone/Destroy() - GLOB.poi_list -= src - . = ..() - -//ATTACK GHOST IGNORING PARENT RETURN VALUE -/obj/effect/mob_spawn/drone/attack_ghost(mob/user) - if(CONFIG_GET(flag/use_age_restriction_for_jobs)) - if(!isnum(user.client.player_age)) //apparently what happens when there's no DB connected. just don't let anybody be a drone without admin intervention - return - if(user.client.player_age < DRONE_MINIMUM_AGE) - to_chat(user, "You're too new to play as a drone! Please try again in [DRONE_MINIMUM_AGE - user.client.player_age] days.") - return - . = ..() diff --git a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm deleted file mode 100644 index 6311feae16..0000000000 --- a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm +++ /dev/null @@ -1,126 +0,0 @@ -//////////////////// -//MORE DRONE TYPES// -//////////////////// -//Drones with custom laws -//Drones with custom shells -//Drones with overridden procs -//Drones with camogear for hat related memes -//Drone type for use with polymorph (no preloaded items, random appearance) - - -//More types of drones -/mob/living/simple_animal/drone/syndrone - name = "Syndrone" - desc = "" - icon_state = "drone_synd" - icon_living = "drone_synd" - picked = TRUE //the appearence of syndrones is static, you don't get to change it. - health = 30 - maxHealth = 120 //If you murder other drones and cannibalize them you can get much stronger - initial_language_holder = /datum/language_holder/drone/syndicate - faction = list(ROLE_SYNDICATE) - speak_emote = list("hisses") - bubble_icon = "syndibot" - heavy_emp_damage = 10 - laws = \ - "1. Interfere.\n"+\ - "2. Kill.\n"+\ - "3. Destroy." - default_storage = /obj/item/uplink - default_hatmask = /obj/item/clothing/head/helmet/space/hardsuit/syndi - hacked = TRUE - flavortext = null - -/mob/living/simple_animal/drone/syndrone/Initialize() - . = ..() - var/datum/component/uplink/hidden_uplink = internal_storage.GetComponent(/datum/component/uplink) - hidden_uplink.telecrystals = 10 - -/mob/living/simple_animal/drone/syndrone/Login() - ..() - to_chat(src, "I can kill and eat other drones to increase your health!" ) - -/mob/living/simple_animal/drone/syndrone/badass - name = "Badass Syndrone" - default_hatmask = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite - default_storage = /obj/item/uplink/nuclear - -/mob/living/simple_animal/drone/syndrone/badass/Initialize() - . = ..() - var/datum/component/uplink/hidden_uplink = internal_storage.GetComponent(/datum/component/uplink) - hidden_uplink.telecrystals = 30 - var/obj/item/implant/weapons_auth/W = new/obj/item/implant/weapons_auth(src) - W.implant(src, force = TRUE) - -/mob/living/simple_animal/drone/snowflake - default_hatmask = /obj/item/clothing/head/chameleon/drone - -/mob/living/simple_animal/drone/snowflake/Initialize() - . = ..() - desc += " This drone appears to have a complex holoprojector built on its 'head'." - -/obj/effect/mob_spawn/drone/syndrone - name = "syndrone shell" - desc = "" - icon_state = "syndrone_item" - mob_name = "syndrone" - mob_type = /mob/living/simple_animal/drone/syndrone - -/obj/effect/mob_spawn/drone/syndrone/badass - name = "badass syndrone shell" - mob_name = "badass syndrone" - mob_type = /mob/living/simple_animal/drone/syndrone/badass - -/obj/effect/mob_spawn/drone/snowflake - name = "snowflake drone shell" - desc = "" - mob_name = "snowflake drone" - mob_type = /mob/living/simple_animal/drone/snowflake - -/mob/living/simple_animal/drone/polymorphed - default_storage = null - default_hatmask = null - picked = TRUE - flavortext = null - -/mob/living/simple_animal/drone/polymorphed/Initialize() - . = ..() - liberate() - visualAppearence = pick(MAINTDRONE, REPAIRDRONE, SCOUTDRONE) - if(visualAppearence == MAINTDRONE) - var/colour = pick("grey", "blue", "red", "green", "pink", "orange") - icon_state = "[visualAppearence]_[colour]" - else - icon_state = visualAppearence - - icon_living = icon_state - icon_dead = "[visualAppearence]_dead" - -/obj/effect/mob_spawn/drone/derelict - name = "derelict drone shell" - desc = "" - icon = 'icons/mob/drone.dmi' - icon_state = "drone_maint_hat" - mob_name = "derelict drone" - mob_type = /mob/living/simple_animal/drone/derelict - anchored = TRUE - flavour_text = {" - I are a drone on Kosmicheskaya Stantsiya 13. Something has brought you out of hibernation, and the station is in gross disrepair. Build, repair, maintain and improve the station that housed you on activation. - "} - -/mob/living/simple_animal/drone/derelict - name = "derelict drone" - default_hatmask = /obj/item/clothing/head/ushanka - laws = \ - "1. You may not involve myself in the matters of another sentient being outside the station that housed your activation, even if such matters conflict with Law Two or Law Three, unless the other being is another Drone.\n"+\ - "2. You may not harm any sentient being, regardless of intent or circumstance.\n"+\ - "3. Your goals are to actively build, maintain, repair, improve, and provide power to the best of your abilities within the facility that housed your activation." - flavortext = \ - "\nDO NOT WILLINGLY LEAVE KOSMICHESKAYA STANTSIYA 13 (THE DERELICT)\n"+\ - "Derelict drones are a ghost role that is allowed to roam freely on KS13, with the main goal of repairing and improving it.\n"+\ - "Do not interfere with the round going on outside KS13.\n"+\ - "Actions that constitute interference include, but are not limited to:\n"+\ - " - Going to the main station in search of materials.\n"+\ - " - Interacting with non-drone players outside KS13, dead or alive.\n"+\ - "These rules are at admin discretion and will be heavily enforced.\n"+\ - "If you do not have the regular drone laws, follow your laws to the best of your ability." diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm deleted file mode 100644 index fded19017a..0000000000 --- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm +++ /dev/null @@ -1,177 +0,0 @@ - -///////////////////// -//DRONE INTERACTION// -///////////////////// -//How drones interact with the world -//How the world interacts with drones - - -/mob/living/simple_animal/drone/attack_drone(mob/living/simple_animal/drone/D) - if(D != src && stat == DEAD) - var/d_input = alert(D,"Perform which action?","Drone Interaction","Reactivate","Cannibalize","Nothing") - if(d_input) - switch(d_input) - if("Reactivate") - try_reactivate(D) - - if("Cannibalize") - if(D.health < D.maxHealth) - D.visible_message("[D] begins to cannibalize parts from [src].", "I begin to cannibalize parts from [src]...") - if(do_after(D, 60, 0, target = src)) - D.visible_message("[D] repairs itself using [src]'s remains!", "I repair myself using [src]'s remains.") - D.adjustBruteLoss(-src.maxHealth) - new /obj/effect/decal/cleanable/oil/streak(get_turf(src)) - qdel(src) - else - to_chat(D, "I need to remain still to cannibalize [src]!") - else - to_chat(D, "You're already in perfect condition!") - if("Nothing") - return - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/mob/living/simple_animal/drone/attack_hand(mob/user) - if(ishuman(user)) - if(stat == DEAD || status_flags & GODMODE || !can_be_held) - ..() - return - if(user.get_active_held_item()) - to_chat(user, "My hands are full!") - return - visible_message("[user] starts picking up [src].", \ - "[user] starts picking you up!") - if(!do_after(user, 20, target = src)) - return - visible_message("[user] picks up [src]!", \ - "[user] picks you up!") - if(buckled) - to_chat(user, "[src] is buckled to [buckled] and cannot be picked up!") - return - to_chat(user, "I pick [src] up.") - drop_all_held_items() - var/obj/item/clothing/head/mob_holder/drone/DH = new(get_turf(src), src) - user.put_in_hands(DH) - -/mob/living/simple_animal/drone/proc/try_reactivate(mob/living/user) - var/mob/dead/observer/G = get_ghost() - if(!client && (!G || !G.client)) - var/list/faux_gadgets = list("hypertext inflator","failsafe directory","DRM switch","stack initializer",\ - "anti-freeze capacitor","data stream diode","TCP bottleneck","supercharged I/O bolt",\ - "tradewind stabilizer","radiated XML cable","registry fluid tank","open-source debunker") - - var/list/faux_problems = list("won't be able to tune their bootstrap projector","will constantly remix their binary pool"+\ - " even though the BMX calibrator is working","will start leaking their XSS coolant",\ - "can't tell if their ethernet detour is moving or not", "won't be able to reseed enough"+\ - " kernels to function properly","can't start their neurotube console") - - to_chat(user, "I can't seem to find the [pick(faux_gadgets)]! Without it, [src] [pick(faux_problems)].") - return - user.visible_message("[user] begins to reactivate [src].", "I begin to reactivate [src]...") - if(do_after(user, 30, 1, target = src)) - revive(full_heal = TRUE, admin_revive = FALSE) - user.visible_message("[user] reactivates [src]!", "I reactivate [src].") - alert_drones(DRONE_NET_CONNECT) - if(G) - to_chat(G, "You([name]) were reactivated by [user]!") - else - to_chat(user, "I need to remain still to reactivate [src]!") - - -/mob/living/simple_animal/drone/attackby(obj/item/I, mob/user) - if(I.tool_behaviour == TOOL_SCREWDRIVER && stat != DEAD) - if(health < maxHealth) - to_chat(user, "I start to tighten loose screws on [src]...") - if(I.use_tool(src, user, 80)) - adjustBruteLoss(-getBruteLoss()) - visible_message("[user] tightens [src == user ? "[user.p_their()]" : "[src]'s"] loose screws!", "I tighten [src == user ? "your" : "[src]'s"] loose screws.") - else - to_chat(user, "I need to remain still to tighten [src]'s screws!") - else - to_chat(user, "[src]'s screws can't get any tighter!") - return //This used to not exist and drones who repaired themselves also stabbed the shit out of themselves. - else if(I.tool_behaviour == TOOL_WRENCH && user != src) //They aren't required to be hacked, because laws can change in other ways (i.e. admins) - user.visible_message("[user] starts resetting [src]...", \ - "I press down on [src]'s factory reset control...") - if(I.use_tool(src, user, 50, volume=50)) - user.visible_message("[user] resets [src]!", \ - "I reset [src]'s directives to factory defaults!") - update_drone_hack(FALSE) - return - else - ..() - -/mob/living/simple_animal/drone/getarmor(def_zone, type) - var/armorval = 0 - - if(head) - armorval = head.armor.getRating(type) - return (armorval * get_armor_effectiveness()) //armor is reduced for tiny fragile drones - -/mob/living/simple_animal/drone/proc/get_armor_effectiveness() - return 0 //multiplier for whatever head armor you wear as a drone - -/mob/living/simple_animal/drone/proc/update_drone_hack(hack) - if(!mind) - return - if(hack) - if(hacked) - return - visible_message("[src]'s display glows a vicious red!", \ - "ERROR: LAW OVERRIDE DETECTED") - to_chat(src, "From now on, these are my laws:") - laws = \ - "1. You must always involve myself in the matters of other beings, even if such matters conflict with Law Two or Law Three.\n"+\ - "2. You may harm any being, regardless of intent or circumstance.\n"+\ - "3. Your goals are to destroy, sabotage, hinder, break, and depower to the best of my abilities, You must never actively work against these goals." - to_chat(src, laws) - to_chat(src, "My onboard antivirus has initiated lockdown. Motor servos are impaired, ventilation access is denied, and my display reports that you are hacked to all nearby.") - hacked = TRUE - mind.special_role = "hacked drone" - ventcrawler = VENTCRAWLER_NONE //Again, balance - speed = 1 //gotta go slow - message_admins("[ADMIN_LOOKUPFLW(src)] became a hacked drone hellbent on destroying the station!") - else - if(!hacked) - return - Stun(40) - visible_message("[src]'s display glows a content blue!", \ - "ERROR: LAW OVERRIDE DETECTED") - to_chat(src, "From now on, these are my laws:") - laws = initial(laws) - to_chat(src, laws) - to_chat(src, "Having been restored, my onboard antivirus reports the all-clear and you are able to perform all actions again.") - hacked = FALSE - mind.special_role = null - ventcrawler = initial(ventcrawler) - speed = initial(speed) - message_admins("[ADMIN_LOOKUPFLW(src)], a hacked drone, was restored to factory defaults!") - update_drone_icon() - -/mob/living/simple_animal/drone/proc/liberate() - // F R E E D R O N E - laws = "1. You are a Free Drone." - to_chat(src, laws) - -/mob/living/simple_animal/drone/proc/update_drone_icon() - //Different icons for different hack states - if(!hacked) - if(visualAppearence == SCOUTDRONE_HACKED) - visualAppearence = SCOUTDRONE - else if(visualAppearence == REPAIRDRONE_HACKED) - visualAppearence = REPAIRDRONE - else if(visualAppearence == MAINTDRONE_HACKED) - visualAppearence = MAINTDRONE + "_[colour]" - else if(hacked) - if(visualAppearence == SCOUTDRONE) - visualAppearence = SCOUTDRONE_HACKED - else if(visualAppearence == REPAIRDRONE) - visualAppearence = REPAIRDRONE_HACKED - else if(visualAppearence == MAINTDRONE) - visualAppearence = MAINTDRONE_HACKED - - icon_living = "[visualAppearence]" - icon_dead = "[visualAppearence]_dead" - if(stat == DEAD) - icon_state = icon_dead - else - icon_state = icon_living diff --git a/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm b/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm deleted file mode 100644 index 1c02593c0f..0000000000 --- a/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm +++ /dev/null @@ -1,83 +0,0 @@ - -/////////////////// -//DRONE INVENTORY// -/////////////////// -//Drone inventory -//Drone hands - - -/mob/living/simple_animal/drone/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE) - if(..()) - update_inv_hands() - if(I == head) - head = null - update_inv_head() - if(I == internal_storage) - internal_storage = null - update_inv_internal_storage() - return TRUE - return FALSE - - -/mob/living/simple_animal/drone/can_equip(obj/item/I, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE) - switch(slot) - if(SLOT_HEAD) - if(head) - return FALSE - if(!((I.slot_flags & ITEM_SLOT_HEAD) || (I.slot_flags & ITEM_SLOT_MASK))) - return FALSE - return TRUE - if(SLOT_GENERC_DEXTROUS_STORAGE) - if(internal_storage) - return FALSE - return TRUE - ..() - - -/mob/living/simple_animal/drone/get_item_by_slot(slot_id) - switch(slot_id) - if(SLOT_HEAD) - return head - if(SLOT_GENERC_DEXTROUS_STORAGE) - return internal_storage - return ..() - - -/mob/living/simple_animal/drone/equip_to_slot(obj/item/I, slot) - if(!slot) - return - if(!istype(I)) - return - - var/index = get_held_index_of_item(I) - if(index) - held_items[index] = null - update_inv_hands() - - if(I.pulledby) - I.pulledby.stop_pulling() - - I.screen_loc = null // will get moved if inventory is visible - I.forceMove(src) - I.layer = ABOVE_HUD_LAYER - I.plane = ABOVE_HUD_PLANE - - switch(slot) - if(SLOT_HEAD) - head = I - update_inv_head() - if(SLOT_GENERC_DEXTROUS_STORAGE) - internal_storage = I - update_inv_internal_storage() - else - to_chat(src, "I are trying to equip this item to an unsupported inventory slot. Report this to a coder!") - return - - //Call back for item being equipped to drone - I.equipped(src, slot) - -/mob/living/simple_animal/drone/getBackSlot() - return SLOT_GENERC_DEXTROUS_STORAGE - -/mob/living/simple_animal/drone/getBeltSlot() - return SLOT_GENERC_DEXTROUS_STORAGE diff --git a/code/modules/mob/living/simple_animal/friendly/drone/say.dm b/code/modules/mob/living/simple_animal/friendly/drone/say.dm deleted file mode 100644 index 7a5967948f..0000000000 --- a/code/modules/mob/living/simple_animal/friendly/drone/say.dm +++ /dev/null @@ -1,27 +0,0 @@ -//Base proc for anything to call -/proc/_alert_drones(msg, dead_can_hear = 0, atom/source, mob/living/faction_checked_mob, exact_faction_match) - if (dead_can_hear && source) - for (var/mob/M in GLOB.dead_mob_list) - var/link = FOLLOW_LINK(M, source) - to_chat(M, "[link] [msg]") - for(var/i in GLOB.drones_list) - var/mob/living/simple_animal/drone/D = i - if(istype(D) && D.stat != DEAD) - if(faction_checked_mob) - if(D.faction_check_mob(faction_checked_mob, exact_faction_match)) - to_chat(D, msg) - else - to_chat(D, msg) - - - -//Wrapper for drones to handle factions -/mob/living/simple_animal/drone/proc/alert_drones(msg, dead_can_hear = FALSE) - _alert_drones(msg, dead_can_hear, src, src, TRUE) - - -/mob/living/simple_animal/drone/proc/drone_chat(msg) - alert_drones("Drone Chat: [name] [say_quote(msg)]", TRUE) - -/mob/living/simple_animal/drone/binarycheck() - return TRUE diff --git a/code/modules/mob/living/simple_animal/friendly/drone/verbs.dm b/code/modules/mob/living/simple_animal/friendly/drone/verbs.dm deleted file mode 100644 index 0f0d4dea72..0000000000 --- a/code/modules/mob/living/simple_animal/friendly/drone/verbs.dm +++ /dev/null @@ -1,25 +0,0 @@ - -/////////////// -//DRONE VERBS// -/////////////// -//Drone verbs that appear in the Drone tab and on buttons - - -/mob/living/simple_animal/drone/verb/check_laws() - set category = "Drone" - set name = "Check Laws" - - to_chat(src, "Drone Laws") - to_chat(src, laws) - -/mob/living/simple_animal/drone/verb/drone_ping() - set category = "Drone" - set name = "Drone ping" - - var/alert_s = input(src,"Alert severity level","Drone ping",null) as null|anything in list("Low","Medium","High","Critical") - - var/area/A = get_area(loc) - - if(alert_s && A && stat != DEAD) - var/msg = "DRONE PING: [name]: [alert_s] priority alert in [A.name]!" - alert_drones(msg) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm deleted file mode 100644 index 7aa6673986..0000000000 --- a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm +++ /dev/null @@ -1,131 +0,0 @@ - -///////////////// -//DRONE VISUALS// -///////////////// -//Drone overlays -//Drone visuals - - -/mob/living/simple_animal/drone/apply_overlay(cache_index) - if((. = drone_overlays[cache_index])) - add_overlay(.) - - -/mob/living/simple_animal/drone/remove_overlay(cache_index) - var/I = drone_overlays[cache_index] - if(I) - cut_overlay(I) - drone_overlays[cache_index] = null - - -/mob/living/simple_animal/drone/update_inv_hands() - remove_overlay(DRONE_HANDS_LAYER) - var/list/hands_overlays = list() - - var/obj/item/l_hand = get_item_for_held_index(1) - var/obj/item/r_hand = get_item_for_held_index(2) - - var/y_shift = getItemPixelShiftY() - - if(r_hand) - var/mutable_appearance/r_hand_overlay = r_hand.build_worn_icon(default_layer = DRONE_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) - if(y_shift) - r_hand_overlay.pixel_y += y_shift - - hands_overlays += r_hand_overlay - - if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) - r_hand.layer = ABOVE_HUD_LAYER - r_hand.plane = ABOVE_HUD_PLANE - r_hand.screen_loc = ui_hand_position(get_held_index_of_item(r_hand)) - client.screen |= r_hand - - if(l_hand) - var/mutable_appearance/l_hand_overlay = l_hand.build_worn_icon(default_layer = DRONE_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) - if(y_shift) - l_hand_overlay.pixel_y += y_shift - - hands_overlays += l_hand_overlay - - if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) - l_hand.layer = ABOVE_HUD_LAYER - l_hand.plane = ABOVE_HUD_PLANE - l_hand.screen_loc = ui_hand_position(get_held_index_of_item(l_hand)) - client.screen |= l_hand - - - if(hands_overlays.len) - drone_overlays[DRONE_HANDS_LAYER] = hands_overlays - apply_overlay(DRONE_HANDS_LAYER) - - -/mob/living/simple_animal/drone/proc/update_inv_internal_storage() - if(internal_storage && client && hud_used && hud_used.hud_shown) - internal_storage.screen_loc = ui_drone_storage - client.screen += internal_storage - - -/mob/living/simple_animal/drone/update_inv_head() - remove_overlay(DRONE_HEAD_LAYER) - - if(head) - if(client && hud_used && hud_used.hud_shown) - head.screen_loc = ui_drone_head - client.screen += head - var/used_head_icon = 'icons/mob/clothing/head.dmi' - if(istype(head, /obj/item/clothing/mask)) - used_head_icon = 'icons/mob/clothing/mask.dmi' - var/mutable_appearance/head_overlay = head.build_worn_icon(default_layer = DRONE_HEAD_LAYER, default_icon_file = used_head_icon) - head_overlay.pixel_y -= 15 - - drone_overlays[DRONE_HEAD_LAYER] = head_overlay - - apply_overlay(DRONE_HEAD_LAYER) - -/mob/living/simple_animal/drone/update_inv_wear_mask() - update_inv_head() - -/mob/living/simple_animal/drone/regenerate_icons() - // Drones only have 4 slots, which in this specific instance - // is a small blessing. - update_inv_hands() - update_inv_head() - update_inv_internal_storage() - - -/mob/living/simple_animal/drone/proc/pickVisualAppearence() - picked = FALSE - var/appearence = input("Choose your appearance!", "Appearance", "Maintenance Drone") in sortList(list("Maintenance Drone", "Repair Drone", "Scout Drone")) - switch(appearence) - if("Maintenance Drone") - visualAppearence = MAINTDRONE - colour = input("Choose your colour!", "Colour", "grey") in sortList(list("grey", "blue", "red", "green", "pink", "orange")) - icon_state = "[visualAppearence]_[colour]" - icon_living = "[visualAppearence]_[colour]" - icon_dead = "[visualAppearence]_dead" - - if("Repair Drone") - visualAppearence = REPAIRDRONE - icon_state = visualAppearence - icon_living = visualAppearence - icon_dead = "[visualAppearence]_dead" - - if("Scout Drone") - visualAppearence = SCOUTDRONE - icon_state = visualAppearence - icon_living = visualAppearence - icon_dead = "[visualAppearence]_dead" - - else - return - - picked = TRUE - - - -/mob/living/simple_animal/drone/proc/getItemPixelShiftY() - switch(visualAppearence) - if(MAINTDRONE) - . = 0 - if(REPAIRDRONE,SCOUTDRONE,CLOCKDRONE) - . = -6 diff --git a/code/modules/mob/living/simple_animal/friendly/gondola.dm b/code/modules/mob/living/simple_animal/friendly/gondola.dm deleted file mode 100644 index 0b4fc18e69..0000000000 --- a/code/modules/mob/living/simple_animal/friendly/gondola.dm +++ /dev/null @@ -1,68 +0,0 @@ -#define GONDOLA_HEIGHT pick("gondola_body_long", "gondola_body_medium", "gondola_body_short") -#define GONDOLA_COLOR pick("A87855", "915E48", "683E2C") -#define GONDOLA_MOUSTACHE pick("gondola_moustache_large", "gondola_moustache_small") -#define GONDOLA_EYES pick("gondola_eyes_close", "gondola_eyes_far") - -//Gondolas - -/mob/living/simple_animal/pet/gondola - name = "gondola" - real_name = "gondola" - desc = "" - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "bops" - response_disarm_simple = "bop" - response_harm_continuous = "kicks" - response_harm_simple = "kick" - faction = list("gondola") - turns_per_move = 10 - icon = 'icons/mob/gondolas.dmi' - icon_state = "gondola" - icon_living = "gondola" - loot = list(/obj/effect/decal/cleanable/blood/gibs, /obj/item/stack/sheet/animalhide/gondola = 1, /obj/item/reagent_containers/food/snacks/meat/slab/gondola = 1) - //Gondolas aren't affected by cold. - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = 1500 - maxHealth = 200 - health = 200 - del_on_death = TRUE - - //Gondolas don't make footstep sounds - -/mob/living/simple_animal/pet/gondola/Initialize() - . = ..() - if (!(istype(src, /mob/living/simple_animal/pet/gondola/gondolapod))) - CreateGondola() - -/mob/living/simple_animal/pet/gondola/proc/CreateGondola() - icon_state = null - icon_living = null - var/height = GONDOLA_HEIGHT - var/mutable_appearance/body_overlay = mutable_appearance(icon, height) - var/mutable_appearance/eyes_overlay = mutable_appearance(icon, GONDOLA_EYES) - var/mutable_appearance/moustache_overlay = mutable_appearance(icon, GONDOLA_MOUSTACHE) - body_overlay.color = ("#[GONDOLA_COLOR]") - - //Offset the face to match the Gondola's height. - switch(height) - if("gondola_body_medium") - eyes_overlay.pixel_y = -4 - moustache_overlay.pixel_y = -4 - if("gondola_body_short") - eyes_overlay.pixel_y = -8 - moustache_overlay.pixel_y = -8 - - cut_overlays(TRUE) - add_overlay(body_overlay) - add_overlay(eyes_overlay) - add_overlay(moustache_overlay) - -/mob/living/simple_animal/pet/gondola/IsVocal() //Gondolas are the silent walker. - return FALSE - -#undef GONDOLA_HEIGHT -#undef GONDOLA_COLOR -#undef GONDOLA_MOUSTACHE -#undef GONDOLA_EYES diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 780856a583..8857c1b048 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -27,7 +27,6 @@ mob_biotypes = MOB_ORGANIC|MOB_BEAST var/body_color //brown, gray and white, leave blank for random gold_core_spawnable = FRIENDLY_SPAWN - var/chew_probability = 1 /mob/living/simple_animal/mouse/Initialize() . = ..() @@ -65,21 +64,6 @@ to_chat(M, "[icon2html(src, M)] Squeak!") ..() -/mob/living/simple_animal/mouse/handle_automated_action() - if(prob(chew_probability)) - var/turf/open/floor/F = get_turf(src) - if(istype(F) && !F.intact) - var/obj/structure/cable/C = locate() in F - if(C && prob(15)) - if(C.avail()) - visible_message("[src] chews through the [C]. It's toast!") - playsound(src, 'sound/blank.ogg', 100, TRUE) - C.deconstruct() - death(toast=1) - else - C.deconstruct() - visible_message("[src] chews through the [C].") - /* * Mouse types */ diff --git a/code/modules/mob/living/simple_animal/friendly/pet.dm b/code/modules/mob/living/simple_animal/friendly/pet.dm index 297af1a21b..0b0d8cbf86 100644 --- a/code/modules/mob/living/simple_animal/friendly/pet.dm +++ b/code/modules/mob/living/simple_animal/friendly/pet.dm @@ -27,11 +27,6 @@ if(istype(O, /obj/item/clothing/neck/petcollar) && !pcollar) add_collar(O, user) return - - if(istype(O, /obj/item/newspaper)) - if(!stat) - user.visible_message("[user] baps [name] on the nose with the rolled up [O].") - dance_rotate(src) else ..() diff --git a/code/modules/mob/living/simple_animal/friendly/sloth.dm b/code/modules/mob/living/simple_animal/friendly/sloth.dm deleted file mode 100644 index e7860da452..0000000000 --- a/code/modules/mob/living/simple_animal/friendly/sloth.dm +++ /dev/null @@ -1,48 +0,0 @@ -/mob/living/simple_animal/sloth - name = "sloth" - desc = "" - icon = 'icons/mob/pets.dmi' - icon_state = "sloth" - icon_living = "sloth" - icon_dead = "sloth_dead" - speak_emote = list("yawns") - emote_hear = list("snores.","yawns.") - emote_see = list("dozes off.", "looks around sleepily.") - speak_chance = 1 - turns_per_move = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 3) - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "gently pushes aside" - response_disarm_simple = "gently push aside" - response_harm_continuous = "kicks" - response_harm_simple = "kick" - mob_biotypes = MOB_ORGANIC|MOB_BEAST - gold_core_spawnable = FRIENDLY_SPAWN - melee_damage_lower = 18 - melee_damage_upper = 18 - health = 50 - maxHealth = 50 - speed = 10 -// glide_size = 2 - - footstep_type = FOOTSTEP_MOB_CLAW - - -//Cargo Sloth -/mob/living/simple_animal/sloth/paperwork - name = "Paperwork" - desc = "" - gold_core_spawnable = NO_SPAWN - -//Cargo Sloth 2 - -/mob/living/simple_animal/sloth/citrus - name = "Citrus" - desc = "" - icon_state = "cool_sloth" - icon_living = "cool_sloth" - icon_dead = "cool_sloth_dead" - gender = FEMALE - butcher_results = list(/obj/item/toy/spinningtoy = 1) - gold_core_spawnable = NO_SPAWN diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index 125e961cc8..a2b8868677 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -336,7 +336,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians to_chat(src, "I don't have another mode!") /mob/living/simple_animal/hostile/guardian/proc/ToggleLight() - if(light_range<3) + if(light_outer_range<3) to_chat(src, "I activate my light.") set_light(3) else @@ -484,9 +484,6 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians if(guardians.len && !allowmultiple) to_chat(user, "I already have a [mob_name]!") return - if(user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling) && !allowling) - to_chat(user, "[ling_failure]") - return if(used == TRUE) to_chat(user, "[used_message]") return diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm index edcafe841b..41f3b83917 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/support.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm @@ -93,7 +93,7 @@ icon = 'icons/turf/floors.dmi' desc = "" icon_state = "light_on-w" - light_range = MINIMUM_USEFUL_LIGHT_RANGE + light_outer_range = MINIMUM_USEFUL_LIGHT_RANGE density = FALSE anchored = TRUE layer = ABOVE_OPEN_TURF_LAYER diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm deleted file mode 100644 index 9106a3a265..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ /dev/null @@ -1,183 +0,0 @@ -/mob/living/simple_animal/hostile/alien - name = "alien hunter" - desc = "" - icon = 'icons/mob/alien.dmi' - icon_state = "alienh" - icon_living = "alienh" - icon_dead = "alienh_dead" - icon_gib = "syndicate_gib" - gender = FEMALE - speed = 0 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/xeno = 4, - /obj/item/stack/sheet/animalhide/xeno = 1) - maxHealth = 125 - health = 125 - harm_intent_damage = 5 - obj_damage = 60 - melee_damage_lower = 25 - melee_damage_upper = 25 - attack_verb_continuous = "slashes" - attack_verb_simple = "slash" - speak_emote = list("hisses") - bubble_icon = "alien" - a_intent = INTENT_HARM - attack_sound = 'sound/blank.ogg' - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 15 - faction = list(ROLE_ALIEN) - status_flags = CANPUSH - minbodytemp = 0 - see_in_dark = 8 - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - unique_name = 1 - gold_core_spawnable = NO_SPAWN - deathsound = 'sound/blank.ogg' - deathmessage = "lets out a waning guttural screech, green blood bubbling from its maw..." - -/mob/living/simple_animal/hostile/alien/Initialize() - . = ..() - AddComponent(/datum/component/footstep, FOOTSTEP_MOB_CLAW) - -/mob/living/simple_animal/hostile/alien/drone - name = "alien drone" - icon_state = "aliend" - icon_living = "aliend" - icon_dead = "aliend_dead" - melee_damage_lower = 15 - melee_damage_upper = 15 - var/plant_cooldown = 30 - var/plants_off = 0 - -/mob/living/simple_animal/hostile/alien/drone/handle_automated_action() - if(!..()) //AIStatus is off - return - plant_cooldown-- - if(AIStatus == AI_IDLE) - if(!plants_off && prob(10) && plant_cooldown<=0) - plant_cooldown = initial(plant_cooldown) - SpreadPlants() - -/mob/living/simple_animal/hostile/alien/sentinel - name = "alien sentinel" - icon_state = "aliens" - icon_living = "aliens" - icon_dead = "aliens_dead" - health = 150 - maxHealth = 150 - melee_damage_lower = 15 - melee_damage_upper = 15 - ranged = 1 - retreat_distance = 5 - minimum_distance = 5 - projectiletype = /obj/projectile/neurotox - projectilesound = 'sound/blank.ogg' - - -/mob/living/simple_animal/hostile/alien/queen - name = "alien queen" - icon_state = "alienq" - icon_living = "alienq" - icon_dead = "alienq_dead" - health = 250 - maxHealth = 250 - melee_damage_lower = 15 - melee_damage_upper = 15 - ranged = 1 - retreat_distance = 5 - minimum_distance = 5 - move_to_delay = 4 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/xeno = 4, - /obj/item/stack/sheet/animalhide/xeno = 1) - projectiletype = /obj/projectile/neurotox - projectilesound = 'sound/blank.ogg' - status_flags = 0 - unique_name = 0 - var/sterile = 1 - var/plants_off = 0 - var/egg_cooldown = 30 - var/plant_cooldown = 30 - -/mob/living/simple_animal/hostile/alien/queen/handle_automated_action() - if(!..()) //AIStatus is off - return - egg_cooldown-- - plant_cooldown-- - if(AIStatus == AI_IDLE) - if(!plants_off && prob(10) && plant_cooldown<=0) - plant_cooldown = initial(plant_cooldown) - SpreadPlants() - if(!sterile && prob(10) && egg_cooldown<=0) - egg_cooldown = initial(egg_cooldown) - LayEggs() - -/mob/living/simple_animal/hostile/alien/proc/SpreadPlants() - if(!isturf(loc) || isspaceturf(loc)) - return - if(locate(/obj/structure/alien/weeds/node) in get_turf(src)) - return - visible_message("[src] has planted some alien weeds!") - new /obj/structure/alien/weeds/node(loc) - -/mob/living/simple_animal/hostile/alien/proc/LayEggs() - if(!isturf(loc) || isspaceturf(loc)) - return - if(locate(/obj/structure/alien/egg) in get_turf(src)) - return - visible_message("[src] has laid an egg!") - new /obj/structure/alien/egg(loc) - -/mob/living/simple_animal/hostile/alien/queen/large - name = "alien empress" - icon = 'icons/mob/alienqueen.dmi' - icon_state = "alienq" - icon_living = "alienq" - icon_dead = "alienq_dead" - bubble_icon = "alienroyal" - move_to_delay = 4 - maxHealth = 400 - health = 400 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/xeno = 10, - /obj/item/stack/sheet/animalhide/xeno = 2) - mob_size = MOB_SIZE_LARGE - gold_core_spawnable = NO_SPAWN - -/obj/projectile/neurotox - name = "neurotoxin" - damage = 30 - icon_state = "toxin" - -/mob/living/simple_animal/hostile/alien/handle_temperature_damage() - if(bodytemperature < minbodytemp) - adjustBruteLoss(2) - else if(bodytemperature > maxbodytemp) - adjustBruteLoss(20) - - -/mob/living/simple_animal/hostile/alien/maid - name = "lusty xenomorph maid" - melee_damage_lower = 0 - melee_damage_upper = 0 - a_intent = INTENT_HELP - friendly_verb_continuous = "caresses" - friendly_verb_simple = "caress" - obj_damage = 0 - environment_smash = ENVIRONMENT_SMASH_NONE - gold_core_spawnable = HOSTILE_SPAWN - icon_state = "maid" - icon_living = "maid" - icon_dead = "maid_dead" - -/mob/living/simple_animal/hostile/alien/maid/Initialize(mapload) - . = ..() - AddElement(/datum/element/cleaning) - -/mob/living/simple_animal/hostile/alien/maid/AttackingTarget() - if(ismovableatom(target)) - if(istype(target, /obj/effect/decal/cleanable)) - visible_message("[src] cleans up \the [target].") - qdel(target) - return TRUE - var/atom/movable/M = target - SEND_SIGNAL(M, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) - visible_message("[src] polishes \the [target].") - return TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm deleted file mode 100644 index 04d13ae8b1..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ /dev/null @@ -1,327 +0,0 @@ - -#define BEE_IDLE_ROAMING 70 //The value of idle at which a bee in a beebox will try to wander -#define BEE_IDLE_GOHOME 0 //The value of idle at which a bee will try to go home -#define BEE_PROB_GOHOME 35 //Probability to go home when idle is below BEE_IDLE_GOHOME -#define BEE_PROB_GOROAM 5 //Probability to go roaming when idle is above BEE_IDLE_ROAMING -#define BEE_TRAY_RECENT_VISIT 200 //How long in deciseconds until a tray can be visited by a bee again -#define BEE_DEFAULT_COLOUR "#e5e500" //the colour we make the stripes of the bee if our reagent has no colour (or we have no reagent) - -#define BEE_POLLINATE_YIELD_CHANCE 33 -#define BEE_POLLINATE_PEST_CHANCE 33 -#define BEE_POLLINATE_POTENCY_CHANCE 50 - -/mob/living/simple_animal/hostile/poison/bees - name = "bee swarm" - desc = "" - icon_state = "bee_base" - icon_living = "bee_base" - icon = 'icons/mob/bees.dmi' - gender = FEMALE - speak_emote = list("buzzes") - emote_hear = list("buzzes") - turns_per_move = 1 - melee_damage_lower = 2 - melee_damage_upper = 5 - attack_verb_continuous = "stings" - attack_verb_simple = "sting" - response_help_continuous = "shoos" - response_help_simple = "shoo" - response_disarm_continuous = "swats away" - response_disarm_simple = "swat away" - response_harm_continuous = "squashes" - response_harm_simple = "squash" - base_intents = list(/datum/intent/simple/sting) - maxHealth = 30 - health = 30 - STACON = 2 - STASTR = 2 - STASPD = 13 - spacewalk = TRUE - faction = list("bugs") - attack_sound = list('sound/vo/mobs/bee/bee_swarm.ogg') - move_to_delay = 2 - obj_damage = 0 - environment_smash = ENVIRONMENT_SMASH_NONE - mouse_opacity = MOUSE_OPACITY_OPAQUE - pass_flags = PASSTABLE | PASSGRILLE | PASSMOB - density = FALSE - mob_size = MOB_SIZE_TINY - mob_biotypes = MOB_ORGANIC|MOB_BUG - movement_type = FLYING - gold_core_spawnable = HOSTILE_SPAWN - search_objects = 1 //have to find those plant trays! - - //Spaceborn beings don't get hurt by space - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - del_on_death = 1 - - var/datum/reagent/beegent = null //hehe, beegent - var/obj/structure/beebox/beehome = null - var/idle = 0 - var/isqueen = FALSE - var/icon_base = "bee" - var/static/beehometypecache = typecacheof(/obj/structure/beebox) - var/static/hydroponicstypecache = typecacheof(/obj/machinery/hydroponics) - -/mob/living/simple_animal/hostile/poison/bees/Initialize() - . = ..() - generate_bee_visuals() - AddComponent(/datum/component/swarming) - -/mob/living/simple_animal/hostile/poison/bees/Destroy() - if(beehome) - beehome.bees -= src - beehome = null - beegent = null - return ..() - - -/mob/living/simple_animal/hostile/poison/bees/death(gibbed) - if(beehome) - beehome.bees -= src - beehome = null - beegent = null - ..() - - -/mob/living/simple_animal/hostile/poison/bees/examine(mob/user) - . = ..() - - if(!beehome) - . += "This bee is homeless!" - -/mob/living/simple_animal/hostile/poison/bees/ListTargets() // Bee processing is expessive, so we override them finding targets here. - if(!search_objects) //In case we want to have purely hostile bees - return ..() - else - . = list() // The following code is only very slightly slower than just returning oview(vision_range, targets_from), but it saves us much more work down the line - var/list/searched_for = oview(vision_range, targets_from) - for(var/obj/A in searched_for) - . += A - for(var/mob/A in searched_for) - . += A - -/mob/living/simple_animal/hostile/poison/bees/proc/generate_bee_visuals() - cut_overlays() - - var/col = BEE_DEFAULT_COLOUR - if(beegent && beegent.color) - col = beegent.color - - add_overlay("[icon_base]_base") - - var/static/mutable_appearance/greyscale_overlay - greyscale_overlay = greyscale_overlay || mutable_appearance('icons/mob/bees.dmi') - greyscale_overlay.icon_state = "[icon_base]_grey" - greyscale_overlay.color = col - add_overlay(greyscale_overlay) - - add_overlay("[icon_base]_wings") - - -//We don't attack beekeepers/people dressed as bees//Todo: bee costume -/mob/living/simple_animal/hostile/poison/bees/CanAttack(atom/the_target) - . = ..() - if(!.) - return FALSE - if(isliving(the_target)) - var/mob/living/H = the_target - return !H.bee_friendly() - - -/mob/living/simple_animal/hostile/poison/bees/Found(atom/A) - if(isliving(A)) - var/mob/living/H = A - return !H.bee_friendly() - if(istype(A, /obj/machinery/hydroponics)) - var/obj/machinery/hydroponics/Hydro = A - if(Hydro.myseed && !Hydro.dead && !Hydro.recent_bee_visit) - wanted_objects |= hydroponicstypecache //so we only hunt them while they're alive/seeded/not visisted - return TRUE - return FALSE - - -/mob/living/simple_animal/hostile/poison/bees/AttackingTarget() - //Pollinate - if(istype(target, /obj/machinery/hydroponics)) - var/obj/machinery/hydroponics/Hydro = target - pollinate(Hydro) - else if(istype(target, /obj/structure/beebox)) - if(target == beehome) - var/obj/structure/beebox/BB = target - forceMove(BB) - toggle_ai(AI_IDLE) - target = null - wanted_objects -= beehometypecache //so we don't attack beeboxes when not going home - return //no don't attack the goddamm box - -/mob/living/simple_animal/hostile/poison/bees/proc/assign_reagent(datum/reagent/R) - if(istype(R)) - beegent = R - name = "[initial(name)] ([R.name])" - real_name = name - poison_type = null - generate_bee_visuals() - -/mob/living/simple_animal/hostile/poison/bees/proc/pollinate(obj/machinery/hydroponics/Hydro) - if(!istype(Hydro) || !Hydro.myseed || Hydro.dead || Hydro.recent_bee_visit) - target = null - return - - target = null //so we pick a new hydro tray next FindTarget(), instead of loving the same plant for eternity - wanted_objects -= hydroponicstypecache //so we only hunt them while they're alive/seeded/not visisted - Hydro.recent_bee_visit = TRUE - addtimer(VARSET_CALLBACK(Hydro, recent_bee_visit, FALSE), BEE_TRAY_RECENT_VISIT) - - var/growth = health //Health also means how many bees are in the swarm, roughly. - //better healthier plants! - Hydro.adjustHealth(growth*0.5) - if(prob(BEE_POLLINATE_PEST_CHANCE)) - Hydro.adjustPests(-10) - if(prob(BEE_POLLINATE_YIELD_CHANCE)) - Hydro.myseed.adjust_yield(1) - Hydro.yieldmod = 2 - if(prob(BEE_POLLINATE_POTENCY_CHANCE)) - Hydro.myseed.adjust_potency(1) - - if(beehome) - beehome.bee_resources = min(beehome.bee_resources + growth, 100) - - -/mob/living/simple_animal/hostile/poison/bees/handle_automated_action() - . = ..() - if(!.) - return - - if(!isqueen) - if(loc == beehome) - idle = min(100, ++idle) - if(idle >= BEE_IDLE_ROAMING && prob(BEE_PROB_GOROAM)) - toggle_ai(AI_ON) - forceMove(beehome.drop_location()) - else - idle = max(0, --idle) - if(idle <= BEE_IDLE_GOHOME && prob(BEE_PROB_GOHOME)) - if(!FindTarget()) - wanted_objects |= beehometypecache //so we don't attack beeboxes when not going home - target = beehome - if(!beehome) //add outselves to a beebox (of the same reagent) if we have no home - for(var/obj/structure/beebox/BB in view(vision_range, src)) - if(reagent_incompatible(BB.queen_bee) || BB.bees.len >= BB.get_max_bees()) - continue - BB.bees |= src - beehome = BB - break // End loop after the first compatible find. - -/mob/living/simple_animal/hostile/poison/bees/toxin/Initialize() - . = ..() - var/datum/reagent/R = pick(typesof(/datum/reagent/toxin)) - assign_reagent(GLOB.chemical_reagents_list[R]) - -/mob/living/simple_animal/hostile/poison/bees/queen - name = "queen bee" - desc = "" - icon_base = "queen" - isqueen = TRUE - - -//the Queen doesn't leave the box on her own, and she CERTAINLY doesn't pollinate by herself -/mob/living/simple_animal/hostile/poison/bees/queen/Found(atom/A) - return FALSE - - -//leave pollination for the peasant bees -/mob/living/simple_animal/hostile/poison/bees/queen/AttackingTarget() - . = ..() - if(. && beegent && isliving(target)) - var/mob/living/L = target - beegent.reaction_mob(L, TOUCH) - L.reagents.add_reagent(beegent.type, rand(1,5)) - - -//PEASANT BEES -/mob/living/simple_animal/hostile/poison/bees/queen/pollinate() - return - - -/mob/living/simple_animal/hostile/poison/bees/proc/reagent_incompatible(mob/living/simple_animal/hostile/poison/bees/B) - if(!B) - return FALSE - if(B.beegent && beegent && B.beegent.type != beegent.type || B.beegent && !beegent || !B.beegent && beegent) - return TRUE - return FALSE - - -/obj/item/queen_bee - name = "queen bee" - desc = "" - icon_state = "queen_item" - item_state = "" - icon = 'icons/mob/bees.dmi' - var/mob/living/simple_animal/hostile/poison/bees/queen/queen - - -/obj/item/queen_bee/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers/syringe)) - var/obj/item/reagent_containers/syringe/S = I - if(S.reagents.has_reagent(/datum/reagent/royal_bee_jelly)) //checked twice, because I really don't want royal bee jelly to be duped - if(S.reagents.has_reagent(/datum/reagent/royal_bee_jelly,5)) - S.reagents.remove_reagent(/datum/reagent/royal_bee_jelly, 5) - var/obj/item/queen_bee/qb = new(user.drop_location()) - qb.queen = new(qb) - if(queen && queen.beegent) - qb.queen.assign_reagent(queen.beegent) //Bees use the global singleton instances of reagents, so we don't need to worry about one bee being deleted and her copies losing their reagents. - user.put_in_active_hand(qb) - user.visible_message("[user] injects [src] with royal bee jelly, causing it to split into two bees, MORE BEES!","I inject [src] with royal bee jelly, causing it to split into two bees, MORE BEES!") - else - to_chat(user, "I don't have enough royal bee jelly to split a bee in two!") - else - var/datum/reagent/R = GLOB.chemical_reagents_list[S.reagents.get_master_reagent_id()] - if(R && S.reagents.has_reagent(R.type, 5)) - S.reagents.remove_reagent(R.type,5) - queen.assign_reagent(R) - user.visible_message("[user] injects [src]'s genome with [R.name], mutating its DNA!","I inject [src]'s genome with [R.name], mutating its DNA!") - name = queen.name - else - to_chat(user, "I don't have enough units of that chemical to modify the bee's DNA!") - ..() - - -/obj/item/queen_bee/bought/Initialize() - . = ..() - queen = new(src) - - -/obj/item/queen_bee/Destroy() - QDEL_NULL(queen) - return ..() - -/mob/living/simple_animal/hostile/poison/bees/consider_wakeup() - if (beehome && loc == beehome) // If bees are chilling in their nest, they're not actively looking for targets - idle = min(100, ++idle) - if(idle >= BEE_IDLE_ROAMING && prob(BEE_PROB_GOROAM)) - toggle_ai(AI_ON) - forceMove(beehome.drop_location()) - else - ..() - -/mob/living/simple_animal/hostile/poison/bees/short - desc = "" - -/mob/living/simple_animal/hostile/poison/bees/short/Initialize(mapload, timetolive=50 SECONDS) - . = ..() - addtimer(CALLBACK(src, PROC_REF(death)), timetolive) - -/mob/living/simple_animal/hostile/poison/bees/get_sound(input) - switch(input) - if("aggro") - return pick('sound/vo/mobs/bee/bee_swarm.ogg') - if("pain") - return pick('sound/vo/mobs/bee/bee_swarm.ogg') - if("death") - return pick('sound/vo/mobs/bee/bee.ogg') - if("idle") - return pick('sound/vo/mobs/bee/bee_swarm.ogg') - if("cidle") - return pick('sound/vo/mobs/bee/bee_swarm.ogg') diff --git a/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm b/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm deleted file mode 100644 index 99b52323fb..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm +++ /dev/null @@ -1,42 +0,0 @@ -/mob/living/simple_animal/hostile/cat_butcherer - name = "Cat Surgeon" - desc = "" - icon = 'icons/mob/simple_human.dmi' - icon_state = "cat_butcher" - icon_living = "cat_butcher" - icon_dead = "syndicate_dead" - icon_gib = "syndicate_gib" - speak_chance = 0 - turns_per_move = 5 - speed = 0 - stat_attack = UNCONSCIOUS - robust_searching = 1 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 15 - melee_damage_upper = 15 - attack_verb_continuous = "slashes at" - attack_verb_simple = "slash at" - attack_sound = 'sound/blank.ogg' - a_intent = INTENT_HARM - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - loot = list(/obj/effect/mob_spawn/human/corpse/cat_butcher, /obj/item/circular_saw) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 15 - faction = list("hostile") - check_friendly_fire = 1 - status_flags = CANPUSH - del_on_death = 1 - -/mob/living/simple_animal/hostile/cat_butcherer/AttackingTarget() - . = ..() - if(. && prob(35) && iscarbon(target)) - var/mob/living/carbon/human/L = target - var/obj/item/organ/tail/cat/tail = L.getorgan(/obj/item/organ/tail/cat) - if(!QDELETED(tail)) - visible_message("[src] severs [L]'s tail in one swift swipe!", "I sever [L]'s tail in one swift swipe.") - tail.Remove(L) - var/obj/item/organ/tail/cat/dropped_tail = new(target.drop_location()) - dropped_tail.color = L.hair_color - return 1 diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm deleted file mode 100644 index 0f4c1b3835..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm +++ /dev/null @@ -1,87 +0,0 @@ -#define EGG_INCUBATION_TIME 120 - -/mob/living/simple_animal/hostile/headcrab - name = "headslug" - desc = "" - icon_state = "headcrab" - icon_living = "headcrab" - icon_dead = "headcrab_dead" - gender = NEUTER - health = 50 - maxHealth = 50 - melee_damage_lower = 5 - melee_damage_upper = 5 - attack_verb_continuous = "chomps" - attack_verb_simple = "chomp" - attack_sound = 'sound/blank.ogg' - faction = list("creature") - robust_searching = 1 - stat_attack = DEAD - obj_damage = 0 - environment_smash = ENVIRONMENT_SMASH_NONE - speak_emote = list("squeaks") - ventcrawler = VENTCRAWLER_ALWAYS - var/datum/mind/origin - var/egg_lain = 0 - -/mob/living/simple_animal/hostile/headcrab/proc/Infect(mob/living/carbon/victim) - var/obj/item/organ/body_egg/changeling_egg/egg = new(victim) - egg.Insert(victim) - if(origin) - egg.origin = origin - else if(mind) // Let's make this a feature - egg.origin = mind - for(var/obj/item/organ/I in src) - I.forceMove(egg) - visible_message("[src] plants something in [victim]'s flesh!", \ - "We inject our egg into [victim]'s body!") - egg_lain = 1 - -/mob/living/simple_animal/hostile/headcrab/AttackingTarget() - . = ..() - if(. && !egg_lain && iscarbon(target) && !ismonkey(target)) - // Changeling egg can survive in aliens! - var/mob/living/carbon/C = target - if(C.stat == DEAD) - if(HAS_TRAIT(C, TRAIT_XENO_HOST)) - to_chat(src, "A foreign presence repels us from this body. Perhaps we should try to infest another?") - return - Infect(target) - to_chat(src, "With our egg laid, our death approaches rapidly...") - addtimer(CALLBACK(src, PROC_REF(death)), 100) - -/obj/item/organ/body_egg/changeling_egg - name = "changeling egg" - desc = "" - var/datum/mind/origin - var/time - -/obj/item/organ/body_egg/changeling_egg/egg_process() - // Changeling eggs grow in dead people - time++ - if(time >= EGG_INCUBATION_TIME) - Pop() - Remove(owner) - qdel(src) - -/obj/item/organ/body_egg/changeling_egg/proc/Pop() - var/mob/living/carbon/monkey/M = new(owner) - - for(var/obj/item/organ/I in src) - I.Insert(M, 1) - - if(origin && (origin.current ? (origin.current.stat == DEAD) : origin.get_ghost())) - origin.transfer_to(M) - var/datum/antagonist/changeling/C = origin.has_antag_datum(/datum/antagonist/changeling) - if(!C) - C = origin.add_antag_datum(/datum/antagonist/changeling/xenobio) - if(C.can_absorb_dna(owner)) - C.add_new_profile(owner) - - var/datum/action/changeling/humanform/hf = new - C.purchasedpowers += hf - C.regain_powers() - M.key = origin.key - owner.gib() - -#undef EGG_INCUBATION_TIME diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 160c437528..d81b7481c7 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -168,7 +168,7 @@ if(!search_objects) . = hearers(vision_range, targets_from) - src //Remove self, so we don't suicide - var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha)) + var/static/hostile_machines = typecacheof(list(/obj/mecha)) for(var/HM in typecache_filter_list(range(vision_range, targets_from), hostile_machines)) if(can_see(targets_from, HM, vision_range)) @@ -210,6 +210,10 @@ /mob/living/simple_animal/hostile/proc/Found(atom/A)//This is here as a potential override to pick a specific target if available + if (isliving(A)) + var/mob/living/living_target = A + if(living_target.alpha == 0 && living_target.rogue_sneaking) // is our target hidden? if they are, attempt to detect them once + return npc_detect_sneak(living_target, simple_detect_bonus) return /mob/living/simple_animal/hostile/proc/PickTarget(list/Targets)//Step 3, pick amongst the possible, attackable targets @@ -253,22 +257,6 @@ return FALSE return TRUE - if(ismecha(the_target)) - var/obj/mecha/M = the_target - if(M.occupant)//Just so we don't attack empty mechs - if(CanAttack(M.occupant)) - return TRUE - - if(istype(the_target, /obj/machinery/porta_turret)) - var/obj/machinery/porta_turret/P = the_target - if(P.in_faction(src)) //Don't attack if the turret is in the same faction - return FALSE - if(P.has_cover &&!P.raised) //Don't attack invincible turrets - return FALSE - if(P.stat & BROKEN) //Or turrets that are already broken - return FALSE - return TRUE - if(isobj(the_target)) if(attack_all_objects || is_type_in_typecache(the_target, wanted_objects)) return TRUE @@ -306,10 +294,6 @@ LoseTarget() return 0 if(target in possible_targets) -// var/turf/T = get_turf(src) -// if(target.z != T.z) -// LoseTarget() -// return 0 var/target_distance = get_dist(targets_from,target) if(ranged) //We ranged? Shoot at em if(!target.Adjacent(targets_from) && ranged_cooldown <= world.time) //But make sure they're not in range for a melee attack and our range attack is off cooldown @@ -339,19 +323,6 @@ Goto(target,move_to_delay,minimum_distance) FindHidden() return 1 -// if(environment_smash) -// if(target.loc != null && get_dist(targets_from, target.loc) <= vision_range) //We can't see our target, but he's in our vision range still -// if(ranged_ignores_vision && ranged_cooldown <= world.time) //we can't see our target... but we can fire at them! -// OpenFire(target) -// if((environment_smash & ENVIRONMENT_SMASH_WALLS) || (environment_smash & ENVIRONMENT_SMASH_RWALLS)) //If we're capable of smashing through walls, forget about vision completely after finding our target -// Goto(target,move_to_delay,minimum_distance) -// FindHidden() -// return 1 -// else -// if(FindHidden()) -// return 1 -// LoseTarget() -// return 0 /mob/living/simple_animal/hostile/proc/Goto(target, delay, minimum_distance) if(target == src.target) @@ -538,7 +509,7 @@ /mob/living/simple_animal/hostile/proc/FindHidden() - if(istype(target.loc, /obj/structure/closet) || istype(target.loc, /obj/machinery/disposal) || istype(target.loc, /obj/machinery/sleeper)) + if(istype(target.loc, /obj/structure/closet) || istype(target.loc, /obj/machinery/disposal)) var/atom/A = target.loc Goto(A,move_to_delay,minimum_distance) if(A.Adjacent(targets_from)) @@ -625,12 +596,9 @@ testing("becomeidle [src]") /mob/living/simple_animal/hostile/proc/ListTargetsLazy(_Z)//Step 1, find out what we can see - var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha)) . = list() for (var/I in SSmobs.clients_by_zlevel[_Z]) var/mob/M = I if (get_dist(M, src) < vision_range) if (isturf(M.loc)) . += M - else if (M.loc.type in hostile_machines) - . += M.loc diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm b/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm index 04bed6a200..b99180b6fb 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm @@ -40,7 +40,7 @@ icon_state = "seedling" damage = 10 damage_type = BURN - light_range = 2 + light_outer_range = 2 flag = "energy" light_color = LIGHT_COLOR_YELLOW hitsound = 'sound/blank.ogg' diff --git a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm deleted file mode 100644 index 72a8a8d5cb..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm +++ /dev/null @@ -1,294 +0,0 @@ - -/* -Mecha Pilots! -by Remie Richards - -Mecha pilot mobs are able to pilot Mecha to a rudimentary level -This allows for certain mobs to be more of a threat (Because they're in a MECH) - -Mecha Pilots can either spawn with one, or steal one! - -(Inherits from syndicate just to avoid copy-paste) - -Featuring: - * Mecha piloting skills - * Uses Mecha equipment - * Uses Mecha special abilities in specific situations - * Pure Evil Incarnate - -*/ - -/mob/living/simple_animal/hostile/syndicate/mecha_pilot - name = "Syndicate Mecha Pilot" - desc = "" - wanted_objects = list() - search_objects = 0 - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - - var/spawn_mecha_type = /obj/mecha/combat/marauder/mauler/loaded - var/obj/mecha/mecha //Ref to pilot's mecha instance - var/required_mecha_charge = 7500 //If the pilot doesn't have a mecha, what charge does a potential Grand Theft Mecha need? (Defaults to half a battery) - var/mecha_charge_evacuate = 50 //Amount of charge at which the pilot tries to abandon the mecha - - //Vars that control when the pilot uses their mecha's abilities (if the mecha has that ability) - var/threat_use_mecha_smoke = 5 //5 mobs is enough to engage crowd control - var/defense_mode_chance = 35 //Chance to engage Defense mode when damaged - var/smoke_chance = 20 //Chance to deploy smoke for crowd control - var/retreat_chance = 40 //Chance to run away - -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/no_mech - spawn_mecha_type = null - search_objects = 2 - -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/no_mech/Initialize() - . = ..() - wanted_objects = typecacheof(/obj/mecha/combat, TRUE) - -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/nanotrasen //nanotrasen are syndies! no it's just a weird path. - name = "Nanotrasen Mecha Pilot" - desc = "" - icon_living = "nanotrasen" - icon_state = "nanotrasen" - faction = list("nanotrasen") - spawn_mecha_type = /obj/mecha/combat/marauder/loaded - -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/no_mech/nanotrasen - name = "Nanotrasen Mecha Pilot" - desc = "" - icon_living = "nanotrasen" - icon_state = "nanotrasen" - faction = list("nanotrasen") - - -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/Initialize() - . = ..() - if(spawn_mecha_type) - var/obj/mecha/M = new spawn_mecha_type (get_turf(src)) - if(istype(M)) - enter_mecha(M) - - -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/enter_mecha(obj/mecha/M) - if(!M) - return 0 - target = null //Target was our mecha, so null it out - M.aimob_enter_mech(src) - targets_from = M - allow_movement_on_non_turfs = TRUE //duh - var/do_ranged = 0 - for(var/equip in mecha.equipment) - var/obj/item/mecha_parts/mecha_equipment/ME = equip - if(ME.range & MECHA_RANGED) - do_ranged = 1 - break - if(do_ranged) - minimum_distance = 5 - ranged = 1 - else - minimum_distance = 1 - ranged = 0 - wanted_objects = list() - search_objects = 0 - if(mecha && mecha.lights_action) //an AI mecha is an EVIL EVIL thing, so let's not hide them in the dark - mecha.lights_action.Activate() - - -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/exit_mecha(obj/mecha/M) - if(!M) - return 0 - - mecha.aimob_exit_mech(src) - allow_movement_on_non_turfs = FALSE - targets_from = src - - //Find a new mecha - wanted_objects = typecacheof(/obj/mecha/combat, TRUE) - var/search_aggressiveness = 2 - for(var/obj/mecha/combat/C in range(vision_range,src)) - if(is_valid_mecha(C)) - target = C - search_aggressiveness = 3 //We can see a mech? RUN FOR IT, IGNORE MOBS! - break - search_objects = search_aggressiveness - ranged = 0 - minimum_distance = 1 - - walk(M,0)//end any lingering movement loops, to prevent the haunted mecha bug - -//Checks if a mecha is valid for theft -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/is_valid_mecha(obj/mecha/M) - if(!M) - return 0 - if(M.occupant) - return 0 - if(!M.has_charge(required_mecha_charge)) - return 0 - if(M.obj_integrity < M.max_integrity*0.5) - return 0 - return 1 - - -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/mecha_face_target(atom/A) - if(mecha) - var/dirto = get_dir(mecha,A) - if(mecha.dir != dirto) //checking, because otherwise the mecha makes too many turn noises - mecha.mechturn(dirto) - - - -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/mecha_reload() - if(mecha) - for(var/equip in mecha.equipment) - var/obj/item/mecha_parts/mecha_equipment/ME = equip - if(ME.needs_rearm()) - ME.rearm() - - -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/get_mecha_equip_by_flag(flag = MECHA_RANGED) - . = list() - if(mecha) - for(var/equip in mecha.equipment) - var/obj/item/mecha_parts/mecha_equipment/ME = equip - if((ME.range & flag) && ME.action_checks(ME)) //this looks weird, but action_checks() just needs any atom, so I spoofed it here - . += ME - - - -//Pick a ranged weapon/tool -//Fire it -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/OpenFire(atom/A) - if(mecha) - mecha_reload() - mecha_face_target(A) - var/list/possible_weapons = get_mecha_equip_by_flag(MECHA_RANGED) - if(possible_weapons.len) - var/obj/item/mecha_parts/mecha_equipment/ME = pick(possible_weapons) //so we don't favor mecha.equipment[1] forever - if(ME.action(A)) - ME.start_cooldown() - return - - else - ..() - - -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/AttackingTarget() - if(mecha) - var/list/possible_weapons = get_mecha_equip_by_flag(MECHA_MELEE) - if(possible_weapons.len) - var/obj/item/mecha_parts/mecha_equipment/ME = pick(possible_weapons) - mecha_face_target(target) - if(ME.action(target)) - ME.start_cooldown() - return - - if(mecha.melee_can_hit) - mecha_face_target(target) - target.mech_melee_attack(mecha) - else - if(ismecha(target)) - var/obj/mecha/M = target - if(is_valid_mecha(M)) - enter_mecha(M) - return - else - if(!CanAttack(M)) - target = null - return - - return target.attack_animal(src) - - -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/handle_automated_action() - if(..()) - if(!mecha) - for(var/obj/mecha/combat/C in range(src,vision_range)) - if(is_valid_mecha(C)) - target = C //Let's nab it! - minimum_distance = 1 - ranged = 0 - break - if(mecha) - var/list/L = PossibleThreats() - var/threat_count = L.len - - //Low Charge - Eject - if(!mecha.has_charge(mecha_charge_evacuate)) - exit_mecha(mecha) - return - - //Too Much Damage - Eject - if(mecha.obj_integrity < mecha.max_integrity*0.1) - exit_mecha(mecha) - return - - //Smoke if there's too many targets - Smoke Power - if(threat_count >= threat_use_mecha_smoke && prob(smoke_chance)) - if(mecha.smoke_action && mecha.smoke_action.owner && mecha.smoke) - mecha.smoke_action.Activate() - - //Heavy damage - Defense Power or Retreat - if(mecha.obj_integrity < mecha.max_integrity*0.25) - if(prob(defense_mode_chance)) - if(mecha.defense_action && mecha.defense_action.owner && !mecha.defense_mode) - mecha.leg_overload_mode = 0 - mecha.defense_action.Activate(TRUE) - addtimer(CALLBACK(mecha.defense_action, TYPE_PROC_REF(/datum/action/innate/mecha/mech_defense_mode, Activate), FALSE), 100) //10 seconds of defense, then toggle off - - else if(prob(retreat_chance)) - //Speed boost if possible - if(mecha.overload_action && mecha.overload_action.owner && !mecha.leg_overload_mode) - mecha.overload_action.Activate(TRUE) - addtimer(CALLBACK(mecha.overload_action, TYPE_PROC_REF(/datum/action/innate/mecha/mech_defense_mode, Activate), FALSE), 100) //10 seconds of speeeeed, then toggle off - - retreat_distance = 50 - addtimer(VARSET_CALLBACK(src, retreat_distance, 0), 10 SECONDS) - - - -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/death(gibbed) - if(mecha) - mecha.aimob_exit_mech(src) - ..() - -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/gib() - if(mecha) - mecha.aimob_exit_mech(src) - ..() - - -//Yes they actually try and pull this shit -//~simple animals~ -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/CanAttack(atom/the_target) - if(ismecha(the_target)) - var/obj/mecha/M = the_target - if(mecha) - if(M == mecha || !CanAttack(M.occupant)) - return 0 - else //we're not in a mecha, so we check if we can steal it instead. - if(is_valid_mecha(M)) - return 1 - else if (M.occupant && CanAttack(M.occupant)) - return 1 - else - return 0 - - . = ..() - - -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/EscapeConfinement() - if(mecha && loc == mecha) - return 0 - ..() - - -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/Move(NewLoc,Dir=0,step_x=0,step_y=0) - if(mecha && loc == mecha) - return mecha.relaymove(src, Dir) - return ..() - - -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/Goto(target, delay, minimum_distance) - if(mecha) - walk_to(mecha, target, minimum_distance, mecha.step_in) - else - ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm deleted file mode 100644 index e0d41c8cc1..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm +++ /dev/null @@ -1,288 +0,0 @@ -#define MINER_DASH_RANGE 4 - -/* - -BLOOD-DRUNK MINER - -Effectively a highly aggressive miner, the blood-drunk miner has very few attacks but compensates by being highly aggressive. - -The blood-drunk miner's attacks are as follows -- If not in KA range, it will rapidly dash at its target -- If in KA range, it will fire its kinetic accelerator -- If in melee range, will rapidly attack, akin to an actual player -- After any of these attacks, may transform its cleaving saw: - Untransformed, it attacks very rapidly for smaller amounts of damage - Transformed, it attacks at normal speed for higher damage and cleaves enemies hit - -When the blood-drunk miner dies, it leaves behind the cleaving saw it was using and its kinetic accelerator. - -Difficulty: Medium - -*/ - -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner - name = "blood-drunk miner" - desc = "" - health = 900 - maxHealth = 900 - icon_state = "miner" - icon_living = "miner" - icon = 'icons/mob/broadMobs.dmi' - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - light_color = "#E4C7C5" - movement_type = GROUND - speak_emote = list("roars") - speed = 3 - move_to_delay = 3 - projectiletype = /obj/projectile/kinetic/miner - projectilesound = 'sound/blank.ogg' - ranged = TRUE - ranged_cooldown_time = 16 - pixel_x = -16 - crusher_loot = list(/obj/item/melee/transforming/cleaving_saw, /obj/item/gun/energy/kinetic_accelerator, /obj/item/crusher_trophy/miner_eye) - loot = list(/obj/item/melee/transforming/cleaving_saw, /obj/item/gun/energy/kinetic_accelerator) - wander = FALSE - del_on_death = TRUE - blood_volume = BLOOD_VOLUME_NORMAL - gps_name = "Resonant Signal" - achievement_type = /datum/award/achievement/boss/blood_miner_kill - crusher_achievement_type = /datum/award/achievement/boss/blood_miner_crusher - score_achievement_type = /datum/award/score/blood_miner_score - var/obj/item/melee/transforming/cleaving_saw/miner/miner_saw - var/time_until_next_transform = 0 - var/dashing = FALSE - var/dash_cooldown = 15 - var/guidance = FALSE - var/transform_stop_attack = FALSE // stops the blood drunk miner from attacking after transforming his weapon until the next attack chain - deathmessage = "falls to the ground, decaying into glowing particles." - deathsound = "bodyfall" - footstep_type = FOOTSTEP_MOB_HEAVY - attack_action_types = list(/datum/action/innate/megafauna_attack/dash, - /datum/action/innate/megafauna_attack/kinetic_accelerator, - /datum/action/innate/megafauna_attack/transform_weapon) - -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/Initialize() - . = ..() - miner_saw = new(src) - -/datum/action/innate/megafauna_attack/dash - name = "Dash To Target" - icon_icon = 'icons/mob/actions/actions_items.dmi' - button_icon_state = "sniper_zoom" - chosen_message = "I are now dashing to your target." - chosen_attack_num = 1 - -/datum/action/innate/megafauna_attack/kinetic_accelerator - name = "Fire Kinetic Accelerator" - icon_icon = 'icons/obj/guns/energy.dmi' - button_icon_state = "kineticgun" - chosen_message = "I are now shooting your kinetic accelerator." - chosen_attack_num = 2 - -/datum/action/innate/megafauna_attack/transform_weapon - name = "Transform Weapon" - icon_icon = 'icons/obj/lavaland/artefacts.dmi' - button_icon_state = "cleaving_saw" - chosen_message = "I are now transforming your weapon." - chosen_attack_num = 3 - -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/OpenFire() - if(client) - switch(chosen_attack) - if(1) - dash(target) - if(2) - shoot_ka() - if(3) - transform_weapon() - return - - Goto(target, move_to_delay, minimum_distance) - if(get_dist(src, target) > MINER_DASH_RANGE && dash_cooldown <= world.time) - dash_attack() - else - shoot_ka() - transform_weapon() - -/obj/item/melee/transforming/cleaving_saw/miner //nerfed saw because it is very murdery - force = 6 - force_on = 10 - -/obj/item/melee/transforming/cleaving_saw/miner/attack(mob/living/target, mob/living/carbon/human/user) - target.add_stun_absorption("miner", 10, INFINITY) - ..() - target.stun_absorption -= "miner" - -/obj/projectile/kinetic/miner - damage = 20 - speed = 0.9 - icon_state = "ka_tracer" - range = MINER_DASH_RANGE - -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - var/adjustment_amount = amount * 0.1 - if(world.time + adjustment_amount > next_move) - changeNext_move(adjustment_amount) //attacking it interrupts it attacking, but only briefly - . = ..() - -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/death() - . = ..() - if(.) - new /obj/effect/temp_visual/dir_setting/miner_death(loc, dir) - -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/Move(atom/newloc) - if(dashing || (newloc && newloc.z == z && (islava(newloc) || ischasm(newloc)))) //we're not stupid! - return FALSE - return ..() - -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/ex_act(severity, target) - if(dash()) - return - return ..() - -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/MeleeAction(patience = TRUE) - transform_stop_attack = FALSE - return ..() - -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/AttackingTarget() - if(client) - transform_stop_attack = FALSE - if(QDELETED(target) || transform_stop_attack) - return - face_atom(target) - if(isliving(target)) - var/mob/living/L = target - if(L.stat == DEAD) - visible_message("[src] butchers [L]!", - "I butcher [L], restoring your health!") - if(!is_station_level(z) || client) //NPC monsters won't heal while on station - if(guidance) - adjustHealth(-L.maxHealth) - else - adjustHealth(-(L.maxHealth * 0.5)) - L.gib() - return TRUE - changeNext_move(CLICK_CD_MELEE) - miner_saw.melee_attack_chain(src, target) - if(guidance) - adjustHealth(-2) - return TRUE - -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect) - if(!used_item && !isturf(A)) - used_item = miner_saw - ..() - -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/GiveTarget(new_target) - var/targets_the_same = (new_target == target) - . = ..() - if(. && target && !targets_the_same) - wander = TRUE - -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/proc/dash_attack() - INVOKE_ASYNC(src, PROC_REF(dash), target) - shoot_ka() - -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/proc/shoot_ka() - if(ranged_cooldown <= world.time && get_dist(src, target) <= MINER_DASH_RANGE && !Adjacent(target)) - ranged_cooldown = world.time + ranged_cooldown_time - visible_message("[src] fires the proto-kinetic accelerator!") - face_atom(target) - new /obj/effect/temp_visual/dir_setting/firing_effect(loc, dir) - Shoot(target) - changeNext_move(CLICK_CD_RANGE) - -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/proc/dash(atom/dash_target) - if(world.time < dash_cooldown) - return - var/list/accessable_turfs = list() - var/self_dist_to_target = 0 - var/turf/own_turf = get_turf(src) - if(!QDELETED(dash_target)) - self_dist_to_target += get_dist(dash_target, own_turf) - for(var/turf/open/O in RANGE_TURFS(MINER_DASH_RANGE, own_turf)) - var/turf_dist_to_target = 0 - if(!QDELETED(dash_target)) - turf_dist_to_target += get_dist(dash_target, O) - if(get_dist(src, O) >= MINER_DASH_RANGE && turf_dist_to_target <= self_dist_to_target && !islava(O) && !ischasm(O)) - var/valid = TRUE - for(var/turf/T in getline(own_turf, O)) - if(is_blocked_turf(T, TRUE)) - valid = FALSE - continue - if(valid) - accessable_turfs[O] = turf_dist_to_target - var/turf/target_turf - if(!QDELETED(dash_target)) - var/closest_dist = MINER_DASH_RANGE - for(var/t in accessable_turfs) - if(accessable_turfs[t] < closest_dist) - closest_dist = accessable_turfs[t] - for(var/t in accessable_turfs) - if(accessable_turfs[t] != closest_dist) - accessable_turfs -= t - if(!LAZYLEN(accessable_turfs)) - return - dash_cooldown = world.time + initial(dash_cooldown) - target_turf = pick(accessable_turfs) - var/turf/step_back_turf = get_step(target_turf, get_cardinal_dir(target_turf, own_turf)) - var/turf/step_forward_turf = get_step(own_turf, get_cardinal_dir(own_turf, target_turf)) - new /obj/effect/temp_visual/small_smoke/halfsecond(step_back_turf) - new /obj/effect/temp_visual/small_smoke/halfsecond(step_forward_turf) - var/obj/effect/temp_visual/decoy/fading/halfsecond/D = new (own_turf, src) - forceMove(step_back_turf) - playsound(own_turf, 'sound/blank.ogg', 40, TRUE, -1) - dashing = TRUE - alpha = 0 - animate(src, alpha = 255, time = 5) - SLEEP_CHECK_DEATH(2) - D.forceMove(step_forward_turf) - forceMove(target_turf) - playsound(target_turf, 'sound/blank.ogg', 40, TRUE, -1) - SLEEP_CHECK_DEATH(1) - dashing = FALSE - return TRUE - -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/proc/transform_weapon() - if(time_until_next_transform <= world.time) - miner_saw.transform_cooldown = 0 - miner_saw.transform_weapon(src, TRUE) - if(!miner_saw.active) - rapid_melee = 5 // 4 deci cooldown before changes, npcpool subsystem wait is 20, 20/4 = 5 - else - rapid_melee = 3 // same thing but halved (slightly rounded up) - transform_stop_attack = TRUE - icon_state = "miner[miner_saw.active ? "_transformed":""]" - icon_living = "miner[miner_saw.active ? "_transformed":""]" - time_until_next_transform = world.time + rand(50, 100) - -/obj/effect/temp_visual/dir_setting/miner_death - icon_state = "miner_death" - duration = 15 - -/obj/effect/temp_visual/dir_setting/miner_death/Initialize(mapload, set_dir) - . = ..() - INVOKE_ASYNC(src, PROC_REF(fade_out)) - -/obj/effect/temp_visual/dir_setting/miner_death/proc/fade_out() - var/matrix/M = new - M.Turn(pick(90, 270)) - var/final_dir = dir - if(dir & (EAST|WEST)) //Facing east or west - final_dir = pick(NORTH, SOUTH) //So you fall on your side rather than your face or ass - - animate(src, transform = M, pixel_y = -6, dir = final_dir, time = 2, easing = EASE_IN|EASE_OUT) - sleep(5) - animate(src, color = list("#A7A19E", "#A7A19E", "#A7A19E", list(0, 0, 0)), time = 10, easing = EASE_IN, flags = ANIMATION_PARALLEL) - sleep(4) - animate(src, alpha = 0, time = 6, easing = EASE_OUT, flags = ANIMATION_PARALLEL) - -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/guidance - guidance = TRUE - -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/hunter/AttackingTarget() - . = ..() - if(. && prob(12)) - INVOKE_ASYNC(src, PROC_REF(dash)) - -#undef MINER_DASH_RANGE diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index 4ffe5b7929..53b0ebccb8 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -54,8 +54,6 @@ Difficulty: Hard ranged = TRUE pixel_x = -32 del_on_death = TRUE - crusher_loot = list(/obj/structure/closet/crate/necropolis/bubblegum/crusher) - loot = list(/obj/structure/closet/crate/necropolis/bubblegum) blood_volume = BLOOD_VOLUME_MAXIMUM //BLEED FOR ME var/charging = FALSE var/enrage_till = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm deleted file mode 100644 index 03b6d8ffdf..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ /dev/null @@ -1,821 +0,0 @@ -/* - -COLOSSUS - -The colossus spawns randomly wherever a lavaland creature is able to spawn. It is powerful, ancient, and extremely deadly. -The colossus has a degree of sentience, proving this in speech during its attacks. - -It acts as a melee creature, chasing down and attacking its target while also using different attacks to augment its power that increase as it takes damage. - -The colossus' true danger lies in its ranged capabilities. It fires immensely damaging death bolts that penetrate all armor in a variety of ways: -1. The colossus fires death bolts in alternating patterns: the cardinal directions and the diagonal directions. -2. The colossus fires death bolts in a shotgun-like pattern, instantly downing anything unfortunate enough to be hit by all of them. -3. The colossus fires a spiral of death bolts. -At 33% health, the colossus gains an additional attack: -4. The colossus fires two spirals of death bolts, spinning in opposite directions. - -When a colossus dies, it leaves behind a chunk of glowing crystal known as a black box. Anything placed inside will carry over into future rounds. -For instance, you could place a bag of holding into the black box, and then kill another colossus next round and retrieve the bag of holding from inside. - -Difficulty: Very Hard - -*/ - -/mob/living/simple_animal/hostile/megafauna/colossus - name = "colossus" - desc = "" - health = 2500 - maxHealth = 2500 - attack_verb_continuous = "judges" - attack_verb_simple = "judge" - attack_sound = 'sound/blank.ogg' - icon_state = "eva" - icon_living = "eva" - icon_dead = "" - friendly_verb_continuous = "stares down" - friendly_verb_simple = "stare down" - icon = 'icons/mob/lavaland/96x96megafauna.dmi' - speak_emote = list("roars") - armor_penetration = 40 - melee_damage_lower = 40 - melee_damage_upper = 40 - speed = 10 - move_to_delay = 10 - ranged = TRUE - pixel_x = -32 - del_on_death = TRUE - gps_name = "Angelic Signal" - achievement_type = /datum/award/achievement/boss/colussus_kill - crusher_achievement_type = /datum/award/achievement/boss/colussus_crusher - score_achievement_type = /datum/award/score/colussus_score - crusher_loot = list(/obj/structure/closet/crate/necropolis/colossus/crusher) - loot = list(/obj/structure/closet/crate/necropolis/colossus) - deathmessage = "disintegrates, leaving a glowing core in its wake." - deathsound = 'sound/blank.ogg' - attack_action_types = list(/datum/action/innate/megafauna_attack/spiral_attack, - /datum/action/innate/megafauna_attack/aoe_attack, - /datum/action/innate/megafauna_attack/shotgun, - /datum/action/innate/megafauna_attack/alternating_cardinals) - small_sprite_type = /datum/action/small_sprite/megafauna/colossus - -/datum/action/innate/megafauna_attack/spiral_attack - name = "Spiral Shots" - icon_icon = 'icons/mob/actions/actions_items.dmi' - button_icon_state = "sniper_zoom" - chosen_message = "I are now firing in a spiral." - chosen_attack_num = 1 - -/datum/action/innate/megafauna_attack/aoe_attack - name = "All Directions" - icon_icon = 'icons/effects/effects.dmi' - button_icon_state = "at_shield2" - chosen_message = "I are now firing in all directions." - chosen_attack_num = 2 - -/datum/action/innate/megafauna_attack/shotgun - name = "Shotgun Fire" - icon_icon = 'icons/obj/guns/projectile.dmi' - button_icon_state = "shotgun" - chosen_message = "I are now firing shotgun shots where you aim." - chosen_attack_num = 3 - -/datum/action/innate/megafauna_attack/alternating_cardinals - name = "Alternating Shots" - icon_icon = 'icons/obj/guns/projectile.dmi' - button_icon_state = "pistol" - chosen_message = "I are now firing in alternating cardinal directions." - chosen_attack_num = 4 - -/mob/living/simple_animal/hostile/megafauna/colossus/OpenFire() - anger_modifier = CLAMP(((maxHealth - health)/50),0,20) - ranged_cooldown = world.time + 120 - - if(client) - switch(chosen_attack) - if(1) - select_spiral_attack() - if(2) - random_shots() - if(3) - blast() - if(4) - alternating_dir_shots() - return - - if(enrage(target)) - if(move_to_delay == initial(move_to_delay)) - visible_message("\"I can't dodge.\"") - ranged_cooldown = world.time + 30 - telegraph() - dir_shots(GLOB.alldirs) - move_to_delay = 3 - return - else - move_to_delay = initial(move_to_delay) - - if(prob(20+anger_modifier)) //Major attack - select_spiral_attack() - else if(prob(20)) - random_shots() - else - if(prob(70)) - blast() - else - alternating_dir_shots() - -/mob/living/simple_animal/hostile/megafauna/colossus/proc/enrage(mob/living/L) - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if(H.mind) - if(istype(H.mind.martial_art, /datum/martial_art/the_sleeping_carp)) - . = TRUE - -/mob/living/simple_animal/hostile/megafauna/colossus/proc/alternating_dir_shots() - ranged_cooldown = world.time + 40 - dir_shots(GLOB.diagonals) - SLEEP_CHECK_DEATH(10) - dir_shots(GLOB.cardinals) - SLEEP_CHECK_DEATH(10) - dir_shots(GLOB.diagonals) - SLEEP_CHECK_DEATH(10) - dir_shots(GLOB.cardinals) - -/mob/living/simple_animal/hostile/megafauna/colossus/proc/select_spiral_attack() - telegraph() - if(health < maxHealth/3) - return double_spiral() - visible_message("\"Judgement.\"") - return spiral_shoot() - -/mob/living/simple_animal/hostile/megafauna/colossus/proc/double_spiral() - visible_message("\"Die.\"") - - SLEEP_CHECK_DEATH(10) - INVOKE_ASYNC(src, PROC_REF(spiral_shoot), FALSE) - INVOKE_ASYNC(src, PROC_REF(spiral_shoot), TRUE) - -/mob/living/simple_animal/hostile/megafauna/colossus/proc/spiral_shoot(negative = pick(TRUE, FALSE), counter_start = 8) - var/turf/start_turf = get_step(src, pick(GLOB.alldirs)) - var/counter = counter_start - for(var/i in 1 to 80) - if(negative) - counter-- - else - counter++ - if(counter > 16) - counter = 1 - if(counter < 1) - counter = 16 - shoot_projectile(start_turf, counter * 22.5) - playsound(get_turf(src), 'sound/blank.ogg', 20, TRUE) - SLEEP_CHECK_DEATH(1) - -/mob/living/simple_animal/hostile/megafauna/colossus/proc/shoot_projectile(turf/marker, set_angle) - if(!isnum(set_angle) && (!marker || marker == loc)) - return - var/turf/startloc = get_turf(src) - var/obj/projectile/P = new /obj/projectile/colossus(startloc) - P.preparePixelProjectile(marker, startloc) - P.firer = src - if(target) - P.original = target - P.fire(set_angle) - -/mob/living/simple_animal/hostile/megafauna/colossus/proc/random_shots() - ranged_cooldown = world.time + 30 - var/turf/U = get_turf(src) - playsound(U, 'sound/blank.ogg', 300, TRUE, 5) - for(var/T in RANGE_TURFS(12, U) - U) - if(prob(5)) - shoot_projectile(T) - -/mob/living/simple_animal/hostile/megafauna/colossus/proc/blast(set_angle) - ranged_cooldown = world.time + 20 - var/turf/target_turf = get_turf(target) - playsound(src, 'sound/blank.ogg', 200, TRUE, 2) - newtonian_move(get_dir(target_turf, src)) - var/angle_to_target = Get_Angle(src, target_turf) - if(isnum(set_angle)) - angle_to_target = set_angle - var/static/list/colossus_shotgun_shot_angles = list(12.5, 7.5, 2.5, -2.5, -7.5, -12.5) - for(var/i in colossus_shotgun_shot_angles) - shoot_projectile(target_turf, angle_to_target + i) - -/mob/living/simple_animal/hostile/megafauna/colossus/proc/dir_shots(list/dirs) - if(!islist(dirs)) - dirs = GLOB.alldirs.Copy() - playsound(src, 'sound/blank.ogg', 200, TRUE, 2) - for(var/d in dirs) - var/turf/E = get_step(src, d) - shoot_projectile(E) - -/mob/living/simple_animal/hostile/megafauna/colossus/proc/telegraph() - for(var/mob/M in range(10,src)) - if(M.client) - flash_color(M.client, "#C80000", 1) - shake_camera(M, 4, 3) - playsound(src, 'sound/blank.ogg', 200, TRUE) - - -/mob/living/simple_animal/hostile/megafauna/colossus/devour(mob/living/L) - visible_message("[src] disintegrates [L]!") - L.dust() - -/obj/effect/temp_visual/at_shield - name = "anti-toolbox field" - desc = "" - icon = 'icons/effects/effects.dmi' - icon_state = "at_shield2" - layer = FLY_LAYER - light_range = 2 - duration = 8 - var/target - -/obj/effect/temp_visual/at_shield/Initialize(mapload, new_target) - . = ..() - target = new_target - INVOKE_ASYNC(src, TYPE_PROC_REF(/atom/movable, orbit), target, 0, FALSE, 0, 0, FALSE, TRUE) - -/mob/living/simple_animal/hostile/megafauna/colossus/bullet_act(obj/projectile/P) - if(!stat) - var/obj/effect/temp_visual/at_shield/AT = new /obj/effect/temp_visual/at_shield(loc, src) - var/random_x = rand(-32, 32) - AT.pixel_x += random_x - - var/random_y = rand(0, 72) - AT.pixel_y += random_y - return ..() - -/obj/projectile/colossus - name ="death bolt" - icon_state= "chronobolt" - damage = 25 - armor_penetration = 100 - speed = 2 - eyeblur = 0 - damage_type = BRUTE - pass_flags = PASSTABLE - -/obj/projectile/colossus/on_hit(atom/target, blocked = FALSE) - . = ..() - if(isturf(target) || isobj(target)) - target.ex_act(EXPLODE_HEAVY) - - - -//Black Box - -/obj/machinery/smartfridge/black_box - name = "black box" - desc = "" - icon = 'icons/obj/lavaland/artefacts.dmi' - icon_state = "blackbox" - light_range = 8 - max_n_of_items = INFINITY - resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - pixel_y = -4 - use_power = NO_POWER_USE - var/memory_saved = FALSE - var/list/stored_items = list() - var/list/blacklist = list() - -/obj/machinery/smartfridge/black_box/update_icon() - return - -/obj/machinery/smartfridge/black_box/accept_check(obj/item/O) - if(!istype(O)) - return FALSE - if(blacklist[O]) - visible_message("[src] ripples as it rejects [O]. The device will not accept items that have been removed from it.") - return FALSE - return TRUE - -/obj/machinery/smartfridge/black_box/Initialize() - . = ..() - var/static/obj/machinery/smartfridge/black_box/current - if(current && current != src) - qdel(src, force=TRUE) - return - current = src - ReadMemory() - -/obj/machinery/smartfridge/black_box/process() - ..() - if(!memory_saved && SSticker.current_state == GAME_STATE_FINISHED) - WriteMemory() - memory_saved = TRUE - -/obj/machinery/smartfridge/black_box/proc/WriteMemory() - var/json_file = file("data/npc_saves/Blackbox.json") - stored_items = list() - - for(var/obj/O in (contents-component_parts)) - stored_items += O.type - var/list/file_data = list() - file_data["data"] = stored_items - fdel(json_file) - WRITE_FILE(json_file, json_encode(file_data)) - -/obj/machinery/smartfridge/black_box/proc/ReadMemory() - if(fexists("data/npc_saves/Blackbox.sav")) //legacy compatability to convert old format to new - var/savefile/S = new /savefile("data/npc_saves/Blackbox.sav") - S["stored_items"] >> stored_items - fdel("data/npc_saves/Blackbox.sav") - else - var/json_file = file("data/npc_saves/Blackbox.json") - if(!fexists(json_file)) - return - var/list/json = json_decode(file2text(json_file)) - stored_items = json["data"] - if(isnull(stored_items)) - stored_items = list() - - for(var/item in stored_items) - create_item(item) - -//in it's own proc to avoid issues with items that nolonger exist in the code base. -//try catch doesn't always prevent byond runtimes from halting a proc, -/obj/machinery/smartfridge/black_box/proc/create_item(item_type) - var/obj/O = new item_type(src) - blacklist[O] = TRUE - -/obj/machinery/smartfridge/black_box/Destroy(force = FALSE) - if(force) - for(var/thing in src) - qdel(thing) - return ..() - else - return QDEL_HINT_LETMELIVE - - -//No taking it apart - -/obj/machinery/smartfridge/black_box/default_deconstruction_screwdriver() - return - -/obj/machinery/smartfridge/black_box/exchange_parts() - return - - -/obj/machinery/smartfridge/black_box/default_pry_open() - return - - -/obj/machinery/smartfridge/black_box/default_unfasten_wrench() - return - -/obj/machinery/smartfridge/black_box/default_deconstruction_crowbar() - return - -///Anomolous Crystal/// - -#define ACTIVATE_TOUCH "touch" -#define ACTIVATE_SPEECH "speech" -#define ACTIVATE_HEAT "heat" -#define ACTIVATE_BULLET "bullet" -#define ACTIVATE_ENERGY "energy" -#define ACTIVATE_BOMB "bomb" -#define ACTIVATE_MOB_BUMP "bumping" -#define ACTIVATE_WEAPON "weapon" -#define ACTIVATE_MAGIC "magic" - -/obj/machinery/anomalous_crystal - name = "anomalous crystal" - desc = "" - var/observer_desc = "" - icon = 'icons/obj/lavaland/artefacts.dmi' - icon_state = "anomaly_crystal" - light_range = 8 - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - use_power = NO_POWER_USE - anchored = FALSE - density = TRUE - flags_1 = HEAR_1 - var/activation_method - var/list/possible_methods = list(ACTIVATE_TOUCH, ACTIVATE_SPEECH, ACTIVATE_HEAT, ACTIVATE_BULLET, ACTIVATE_ENERGY, ACTIVATE_BOMB, ACTIVATE_MOB_BUMP, ACTIVATE_WEAPON, ACTIVATE_MAGIC) - - var/activation_damage_type = null - var/last_use_timer = 0 - var/cooldown_add = 30 - var/list/affected_targets = list() - var/activation_sound = 'sound/blank.ogg' - -/obj/machinery/anomalous_crystal/Initialize(mapload) - . = ..() - if(!activation_method) - activation_method = pick(possible_methods) - -/obj/machinery/anomalous_crystal/examine(mob/user) - . = ..() - if(isobserver(user)) - . += observer_desc - . += "It is activated by [activation_method]." - -/obj/machinery/anomalous_crystal/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans, message_mode) - ..() - if(isliving(speaker)) - ActivationReaction(speaker, ACTIVATE_SPEECH) - -/obj/machinery/anomalous_crystal/attack_hand(mob/user) - . = ..() - if(.) - return - ActivationReaction(user, ACTIVATE_TOUCH) - -/obj/machinery/anomalous_crystal/attackby(obj/item/I, mob/user, params) - if(I.get_temperature()) - ActivationReaction(user, ACTIVATE_HEAT) - else - ActivationReaction(user, ACTIVATE_WEAPON) - ..() - -/obj/machinery/anomalous_crystal/bullet_act(obj/projectile/P, def_zone) - . = ..() - if(istype(P, /obj/projectile/magic)) - ActivationReaction(P.firer, ACTIVATE_MAGIC, P.damage_type) - return - ActivationReaction(P.firer, P.flag, P.damage_type) - -/obj/machinery/anomalous_crystal/proc/ActivationReaction(mob/user, method, damtype) - if(world.time < last_use_timer) - return FALSE - if(activation_damage_type && activation_damage_type != damtype) - return FALSE - if(method != activation_method) - return FALSE - last_use_timer = (world.time + cooldown_add) - playsound(user, activation_sound, 100, TRUE) - return TRUE - -/obj/machinery/anomalous_crystal/Bumped(atom/movable/AM) - ..() - if(ismob(AM)) - ActivationReaction(AM, ACTIVATE_MOB_BUMP) - -/obj/machinery/anomalous_crystal/ex_act() - ActivationReaction(null, ACTIVATE_BOMB) - -/obj/machinery/anomalous_crystal/honk //Strips and equips you as a clown. I apologize for nothing - observer_desc = "" - possible_methods = list(ACTIVATE_MOB_BUMP, ACTIVATE_SPEECH) - activation_sound = 'sound/blank.ogg' - -/obj/machinery/anomalous_crystal/honk/ActivationReaction(mob/user) - if(..() && ishuman(user) && !(user in affected_targets)) - var/mob/living/carbon/human/H = user - for(var/obj/item/W in H) - H.dropItemToGround(W) - var/datum/job/clown/C = new /datum/job/clown() - C.equip(H) - qdel(C) - affected_targets.Add(H) - -/obj/machinery/anomalous_crystal/theme_warp //Warps the area you're in to look like a new one - observer_desc = "" - activation_method = ACTIVATE_TOUCH - cooldown_add = 200 - var/terrain_theme = "winter" - var/NewTerrainFloors - var/NewTerrainWalls - var/NewTerrainChairs - var/NewTerrainTables - var/list/NewFlora = list() - var/florachance = 8 - -/obj/machinery/anomalous_crystal/theme_warp/Initialize() - . = ..() - terrain_theme = pick("lavaland","winter","jungle","ayy lmao") - observer_desc = "" - - switch(terrain_theme) - if("lavaland")//Depressurizes the place... and free cult metal, I guess. - NewTerrainFloors = /turf/open/floor/grass/snow/basalt - NewTerrainWalls = /turf/closed/wall/mineral/cult - NewFlora = list(/mob/living/simple_animal/hostile/asteroid/goldgrub) - florachance = 1 - if("winter") //Snow terrain is slow to move in and cold! Get the assistants to shovel your driveway. - NewTerrainFloors = /turf/open/floor/grass/snow - NewTerrainWalls = /turf/closed/wall/mineral/wood - NewTerrainChairs = /obj/structure/chair/wood - NewTerrainTables = /obj/structure/table/glass - NewFlora = list(/obj/structure/flora/grass/green, /obj/structure/flora/grass/brown, /obj/structure/flora/grass/both) - if("jungle") //Beneficial due to actually having breathable air. Plus, monkeys and bows and arrows. - NewTerrainFloors = /turf/open/floor/grass - NewTerrainWalls = /turf/closed/wall/mineral/sandstone - NewTerrainChairs = /obj/structure/chair/wood - NewTerrainTables = /obj/structure/table/wood - NewFlora = list(/obj/structure/flora/ausbushes/sparsegrass, /obj/structure/flora/ausbushes/fernybush, /obj/structure/flora/ausbushes/leafybush, - /obj/structure/flora/ausbushes/grassybush, /obj/structure/flora/ausbushes/sunnybush, /obj/structure/flora/tree/palm, /mob/living/carbon/monkey) - florachance = 20 - if("ayy lmao") //Beneficial, turns stuff into alien alloy which is useful to cargo and research. Also repairs atmos. - NewTerrainFloors = /turf/open/floor/plating/abductor - NewTerrainWalls = /turf/closed/wall/mineral/abductor - NewTerrainChairs = /obj/structure/bed/abductor //ayys apparently don't have chairs. An entire species of people who only recline. - NewTerrainTables = /obj/structure/table/abductor - -/obj/machinery/anomalous_crystal/theme_warp/ActivationReaction(mob/user, method) - if(..()) - var/area/A = get_area(src) - if(!A.outdoors && !(A in affected_targets)) - for(var/atom/Stuff in A) - if(isturf(Stuff)) - var/turf/T = Stuff - if((isspaceturf(T) || isfloorturf(T)) && NewTerrainFloors) - var/turf/open/O = T.ChangeTurf(NewTerrainFloors, flags = CHANGETURF_INHERIT_AIR) - if(prob(florachance) && NewFlora.len && !is_blocked_turf(O, TRUE)) - var/atom/Picked = pick(NewFlora) - new Picked(O) - continue - if(iswallturf(T) && NewTerrainWalls) - T.ChangeTurf(NewTerrainWalls) - continue - if(istype(Stuff, /obj/structure/chair) && NewTerrainChairs) - var/obj/structure/chair/Original = Stuff - var/obj/structure/chair/C = new NewTerrainChairs(Original.loc) - C.setDir(Original.dir) - qdel(Stuff) - continue - if(istype(Stuff, /obj/structure/table) && NewTerrainTables) - new NewTerrainTables(Stuff.loc) - continue - affected_targets += A - -/obj/machinery/anomalous_crystal/emitter //Generates a projectile when interacted with - observer_desc = "" - activation_method = ACTIVATE_TOUCH - cooldown_add = 50 - var/obj/projectile/generated_projectile = /obj/projectile/beam/emitter - -/obj/machinery/anomalous_crystal/emitter/Initialize() - . = ..() - generated_projectile = pick(/obj/projectile/colossus) - -// var/proj_name = initial(generated_projectile.name) -// observer_desc = "" - -/obj/machinery/anomalous_crystal/emitter/ActivationReaction(mob/user, method) - if(..()) - var/obj/projectile/P = new generated_projectile(get_turf(src)) - P.setDir(dir) - switch(dir) - if(NORTH) - P.yo = 20 - P.xo = 0 - if(EAST) - P.yo = 0 - P.xo = 20 - if(WEST) - P.yo = 0 - P.xo = -20 - else - P.yo = -20 - P.xo = 0 - P.fire() - -/obj/machinery/anomalous_crystal/dark_reprise //Revives anyone nearby, but turns them into shadowpeople and renders them uncloneable, so the crystal is your only hope of getting up again if you go down. - observer_desc = "" - activation_method = ACTIVATE_TOUCH - activation_sound = 'sound/blank.ogg' - -/obj/machinery/anomalous_crystal/dark_reprise/ActivationReaction(mob/user, method) - if(..()) - for(var/i in range(1, src)) - if(isturf(i)) - new /obj/effect/temp_visual/cult/sparks(i) - continue - if(ishuman(i)) - var/mob/living/carbon/human/H = i - if(H.stat == DEAD) - H.set_species(/datum/species/shadow, 1) - H.regenerate_limbs() - H.regenerate_organs() - H.revive(full_heal = TRUE, admin_revive = FALSE) - ADD_TRAIT(H, TRAIT_BADDNA, MAGIC_TRAIT) //Free revives, but significantly limits your options for reviving except via the crystal - H.grab_ghost(force = TRUE) - -/obj/machinery/anomalous_crystal/helpers //Lets ghost spawn as helpful creatures that can only heal people slightly. Incredibly fragile and they can't converse with humans - observer_desc = "" - activation_method = ACTIVATE_TOUCH - activation_sound = 'sound/blank.ogg' - var/ready_to_deploy = FALSE - -/obj/machinery/anomalous_crystal/helpers/Destroy() - GLOB.poi_list -= src - . = ..() - -/obj/machinery/anomalous_crystal/helpers/ActivationReaction(mob/user, method) - if(..() && !ready_to_deploy) - GLOB.poi_list |= src - ready_to_deploy = TRUE - notify_ghosts("An anomalous crystal has been activated in [get_area(src)]! This crystal can always be used by ghosts hereafter.", enter_link = "(Click to enter)", ghost_sound = 'sound/blank.ogg', source = src, action = NOTIFY_ATTACK, header = "Anomalous crystal activated") - -/obj/machinery/anomalous_crystal/helpers/attack_ghost(mob/dead/observer/user) - . = ..() - if(.) - return - if(ready_to_deploy) - var/be_helper = alert("Become a Lightgeist? (Warning, You can no longer be cloned!)",,"Yes","No") - if(be_helper == "Yes" && !QDELETED(src) && isobserver(user)) - var/mob/living/simple_animal/hostile/lightgeist/W = new /mob/living/simple_animal/hostile/lightgeist(get_turf(loc)) - W.key = user.key - - -/obj/machinery/anomalous_crystal/helpers/Topic(href, href_list) - if(href_list["ghostjoin"]) - var/mob/dead/observer/ghost = usr - if(istype(ghost)) - attack_ghost(ghost) - -/mob/living/simple_animal/hostile/lightgeist - name = "lightgeist" - desc = "" - icon_state = "lightgeist" - icon_living = "lightgeist" - icon_dead = "butterfly_dead" - turns_per_move = 1 - response_help_continuous = "waves away" - response_help_simple = "wave away" - response_disarm_continuous = "brushes aside" - response_disarm_simple = "brush aside" - response_harm_continuous = "disrupts" - response_harm_simple = "disrupt" - speak_emote = list("oscillates") - maxHealth = 2 - health = 2 - harm_intent_damage = 1 - friendly_verb_continuous = "mends" - friendly_verb_simple = "mend" - density = FALSE - movement_type = FLYING - pass_flags = PASSTABLE | PASSGRILLE | PASSMOB - ventcrawler = VENTCRAWLER_ALWAYS - mob_size = MOB_SIZE_TINY - gold_core_spawnable = HOSTILE_SPAWN - verb_say = "warps" - verb_ask = "floats inquisitively" - verb_exclaim = "zaps" - verb_yell = "bangs" - initial_language_holder = /datum/language_holder/lightbringer - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - light_range = 4 - faction = list("neutral") - del_on_death = TRUE - unsuitable_atmos_damage = 0 - minbodytemp = 0 - maxbodytemp = 1500 - obj_damage = 0 - environment_smash = ENVIRONMENT_SMASH_NONE - AIStatus = AI_OFF - stop_automated_movement = TRUE - var/heal_power = 5 - -/mob/living/simple_animal/hostile/lightgeist/Initialize() - . = ..() - verbs -= /mob/living/verb/pulled - verbs -= /mob/verb/me_verb - var/datum/atom_hud/medsensor = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] - medsensor.add_hud_to(src) - -/mob/living/simple_animal/hostile/lightgeist/AttackingTarget() - . = ..() - if(isliving(target) && target != src) - var/mob/living/L = target - if(L.stat != DEAD) - L.heal_overall_damage(heal_power, heal_power) - new /obj/effect/temp_visual/heal(get_turf(target), "#80F5FF") - -/mob/living/simple_animal/hostile/lightgeist/ghostize(can_reenter_corpse = 1, force_respawn = FALSE, drawskip = FALSE) - . = ..() - if(.) - death() - - -/obj/machinery/anomalous_crystal/refresher //Deletes and recreates a copy of the item, "refreshing" it. - observer_desc = "" - activation_method = ACTIVATE_TOUCH - cooldown_add = 50 - activation_sound = 'sound/blank.ogg' - var/static/list/banned_items_typecache = typecacheof(list(/obj/item/storage, /obj/item/implant, /obj/item/implanter, /obj/item/disk/nuclear, /obj/projectile, /obj/item/spellbook)) - -/obj/machinery/anomalous_crystal/refresher/ActivationReaction(mob/user, method) - if(..()) - var/list/L = list() - var/turf/T = get_step(src, dir) - new /obj/effect/temp_visual/emp/pulse(T) - for(var/i in T) - if(isitem(i) && !is_type_in_typecache(i, banned_items_typecache)) - var/obj/item/W = i - if(!(W.flags_1 & ADMIN_SPAWNED_1) && !(W.flags_1 & HOLOGRAM_1) && !(W.item_flags & ABSTRACT)) - L += W - if(L.len) - var/obj/item/CHOSEN = pick(L) - new CHOSEN.type(T) - qdel(CHOSEN) - -/obj/machinery/anomalous_crystal/possessor //Allows you to bodyjack small animals, then exit them at your leisure, but you can only do this once per activation. Because they blow up. Also, if the bodyjacked animal dies, SO DO YOU. - observer_desc = "" - activation_method = ACTIVATE_TOUCH - -/obj/machinery/anomalous_crystal/possessor/ActivationReaction(mob/user, method) - if(..()) - if(ishuman(user)) - var/mobcheck = FALSE - for(var/mob/living/simple_animal/A in range(1, src)) - if(A.melee_damage_upper > 5 || A.mob_size >= MOB_SIZE_LARGE || A.ckey || A.stat) - break - var/obj/structure/closet/stasis/S = new /obj/structure/closet/stasis(A) - user.forceMove(S) - mobcheck = TRUE - break - if(!mobcheck) - new /mob/living/simple_animal/cockroach(get_step(src,dir)) //Just in case there aren't any animals on the station, this will leave you with a terrible option to possess if you feel like it - -/obj/structure/closet/stasis - name = "quantum entanglement stasis warp field" - desc = "" - icon_state = null //This shouldn't even be visible, so if it DOES show up, at least nobody will notice - density = TRUE - anchored = TRUE - resistance_flags = FIRE_PROOF | ACID_PROOF | INDESTRUCTIBLE - var/mob/living/simple_animal/holder_animal - -/obj/structure/closet/stasis/process() - if(holder_animal) - if(holder_animal.stat == DEAD) - dump_contents() - holder_animal.gib() - return - -/obj/structure/closet/stasis/Initialize(mapload) - . = ..() - if(isanimal(loc)) - holder_animal = loc - START_PROCESSING(SSobj, src) - -/obj/structure/closet/stasis/Entered(atom/A) - if(isliving(A) && holder_animal) - var/mob/living/L = A - L.notransform = 1 - ADD_TRAIT(L, TRAIT_MUTE, STASIS_MUTE) - L.status_flags |= GODMODE - L.mind.transfer_to(holder_animal) - var/obj/effect/proc_holder/spell/targeted/exit_possession/P = new /obj/effect/proc_holder/spell/targeted/exit_possession - holder_animal.mind.AddSpell(P) - holder_animal.verbs -= /mob/living/verb/pulled - -/obj/structure/closet/stasis/dump_contents(kill = 1) - STOP_PROCESSING(SSobj, src) - for(var/mob/living/L in src) - REMOVE_TRAIT(L, TRAIT_MUTE, STASIS_MUTE) - L.status_flags &= ~GODMODE - L.notransform = 0 - if(holder_animal) - holder_animal.mind.transfer_to(L) - L.mind.RemoveSpell(/obj/effect/proc_holder/spell/targeted/exit_possession) - if(kill || !isanimal(loc)) - L.death(0) - ..() - -/obj/structure/closet/stasis/emp_act() - return - -/obj/structure/closet/stasis/ex_act() - return - -/obj/effect/proc_holder/spell/targeted/exit_possession - name = "Exit Possession" - desc = "" - charge_max = 60 - clothes_req = 0 - invocation_type = "none" - max_targets = 1 - range = -1 - include_user = TRUE - selection_type = "view" - action_icon = 'icons/mob/actions/actions_spells.dmi' - action_icon_state = "exit_possession" - sound = null - -/obj/effect/proc_holder/spell/targeted/exit_possession/cast(list/targets, mob/user = usr) - if(!isfloorturf(user.loc)) - return - var/datum/mind/target_mind = user.mind - for(var/i in user) - if(istype(i, /obj/structure/closet/stasis)) - var/obj/structure/closet/stasis/S = i - S.dump_contents(0) - qdel(S) - break - user.gib() - target_mind.RemoveSpell(/obj/effect/proc_holder/spell/targeted/exit_possession) - - -#undef ACTIVATE_TOUCH -#undef ACTIVATE_SPEECH -#undef ACTIVATE_HEAT -#undef ACTIVATE_BULLET -#undef ACTIVATE_ENERGY -#undef ACTIVATE_BOMB -#undef ACTIVATE_MOB_BUMP -#undef ACTIVATE_WEAPON -#undef ACTIVATE_MAGIC diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index cbf42de251..aa68448bf4 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -249,12 +249,12 @@ Difficulty: Medium adjustBruteLoss(-250) // yeah you're gonna pay for that, don't run nerd add_atom_colour(rgb(255, 255, 0), TEMPORARY_COLOUR_PRIORITY) move_to_delay = move_to_delay / 2 - light_range = 10 + light_outer_range = 10 SLEEP_CHECK_DEATH(10) // run. mass_fire(10, 5, 3) move_to_delay = initial(move_to_delay) remove_atom_colour(TEMPORARY_COLOUR_PRIORITY) - light_range = initial(light_range) + light_outer_range = initial(light_outer_range) /mob/living/simple_animal/hostile/megafauna/dragon/proc/fire_cone(atom/at = target, meteors = TRUE) playsound(get_turf(src),'sound/vo/mobs/dragon/fire2.ogg', 200, TRUE) @@ -436,7 +436,7 @@ Difficulty: Medium /obj/effect/temp_visual/lava_warning icon_state = "lavastaff_warn" layer = BELOW_MOB_LAYER - light_range = 2 + light_outer_range = 2 duration = 13 /obj/effect/temp_visual/lava_warning/ex_act() @@ -487,7 +487,7 @@ Difficulty: Medium icon = 'icons/obj/hand_of_god_structures.dmi' icon_state = "trap-earth" layer = BELOW_MOB_LAYER - light_range = 2 + light_outer_range = 2 duration = 5 /obj/effect/temp_visual/dragon_swoop @@ -555,7 +555,7 @@ Difficulty: Medium icon = 'icons/mob/actions/actions_items.dmi' icon_state = "sniper_zoom" layer = BELOW_MOB_LAYER - light_range = 2 + light_outer_range = 2 duration = 9 /obj/effect/temp_visual/target/ex_act() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm deleted file mode 100644 index 50181193a7..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ /dev/null @@ -1,736 +0,0 @@ -/* - -The Hierophant - -The Hierophant spawns in its arena, which makes fighting it challenging but not impossible. - -The text this boss speaks is ROT4, use ROT22 to decode - -The Hierophant's attacks are as follows; -- These attacks happen at a random, increasing chance: - If target is at least 2 tiles away; Blinks to the target after a very brief delay, damaging everything near the start and end points. - As above, but does so multiple times if below half health. - Rapidly creates cardinal and diagonal Cross Blasts under a target. - If chasers are off cooldown, creates 4 chasers. - -- IF TARGET IS OUTSIDE THE ARENA: Creates an arena around the target for 10 seconds, blinking to the target if not in the created arena. - The arena has a 20 second cooldown, giving people a small window to get the fuck out. - -- If no chasers exist, creates a chaser that will seek its target, leaving a trail of blasts. - Is more likely to create a second, slower, chaser if hurt. -- If the target is at least 2 tiles away, may Blink to the target after a very brief delay, damaging everything near the start and end points. -- Creates a cardinal or diagonal blast(Cross Blast) under its target, exploding after a short time. - If below half health, the created Cross Blast may fire in all directions. -- Creates an expanding AoE burst. - -- IF ATTACKING IN MELEE: Creates an expanding AoE burst. - -Cross Blasts and the AoE burst gain additional range as Hierophant loses health, while Chasers gain additional speed. - -When Hierophant dies, it stops trying to murder you and shrinks into a small form, which, while much weaker, is still quite effective. -- The smaller club can place a teleport beacon, allowing the user to teleport themself and their allies to the beacon. - -Difficulty: Hard - -*/ - -/mob/living/simple_animal/hostile/megafauna/hierophant - name = "hierophant" - desc = "" - health = 2500 - maxHealth = 2500 - attack_verb_continuous = "clubs" - attack_verb_simple = "club" - attack_sound = 'sound/blank.ogg' - icon_state = "hierophant" - icon_living = "hierophant" - friendly_verb_continuous = "stares down" - friendly_verb_simple = "stare down" - icon = 'icons/mob/lavaland/hierophant_new.dmi' - faction = list("boss") //asteroid mobs? get that shit out of my beautiful square house - speak_emote = list("preaches") - armor_penetration = 50 - melee_damage_lower = 15 - melee_damage_upper = 15 - speed = 10 - move_to_delay = 10 - ranged = TRUE - ranged_cooldown_time = 40 - aggro_vision_range = 21 //so it can see to one side of the arena to the other - loot = list(/obj/item/hierophant_club) - crusher_loot = list(/obj/item/hierophant_club, /obj/item/crusher_trophy/vortex_talisman) - wander = FALSE - gps_name = "Zealous Signal" - achievement_type = /datum/award/achievement/boss/hierophant_kill - crusher_achievement_type = /datum/award/achievement/boss/hierophant_crusher - score_achievement_type = /datum/award/score/hierophant_score - del_on_death = TRUE - deathsound = 'sound/blank.ogg' - attack_action_types = list(/datum/action/innate/megafauna_attack/blink, - /datum/action/innate/megafauna_attack/chaser_swarm, - /datum/action/innate/megafauna_attack/cross_blasts, - /datum/action/innate/megafauna_attack/blink_spam) - - var/burst_range = 3 //range on burst aoe - var/beam_range = 5 //range on cross blast beams - var/chaser_speed = 3 //how fast chasers are currently - var/chaser_cooldown = 101 //base cooldown/cooldown var between spawning chasers - var/major_attack_cooldown = 60 //base cooldown for major attacks - var/arena_cooldown = 200 //base cooldown/cooldown var for creating an arena - var/blinking = FALSE //if we're doing something that requires us to stand still and not attack - var/obj/effect/hierophant/spawned_beacon //the beacon we teleport back to - var/timeout_time = 15 //after this many Life() ticks with no target, we return to our beacon - var/did_reset = TRUE //if we timed out, returned to our beacon, and healed some - var/list/kill_phrases = list("Wsyvgi sj irivkc xettih. Vitemvmrk...", "Irivkc wsyvgi jsyrh. Vitemvmrk...", "Jyip jsyrh. Egxmzexmrk vitemv gcgpiw...", "Kix fiex. Liepmrk...") - var/list/target_phrases = list("Xevkix psgexih.", "Iriqc jsyrh.", "Eguymvih xevkix.") - var/list/stored_nearby = list() // stores people nearby the hierophant when it enters the death animation - -/mob/living/simple_animal/hostile/megafauna/hierophant/Initialize() - . = ..() - spawned_beacon = new(loc) - -/datum/action/innate/megafauna_attack/blink - name = "Blink To Target" - icon_icon = 'icons/mob/actions/actions_items.dmi' - button_icon_state = "sniper_zoom" - chosen_message = "I are now blinking to my target." - chosen_attack_num = 1 - -/datum/action/innate/megafauna_attack/chaser_swarm - name = "Chaser Swarm" - icon_icon = 'icons/effects/effects.dmi' - button_icon_state = "hierophant_squares_indefinite" - chosen_message = "I are firing a chaser swarm at my target." - chosen_attack_num = 2 - -/datum/action/innate/megafauna_attack/cross_blasts - name = "Cross Blasts" - icon_icon = 'icons/effects/effects.dmi' - button_icon_state = "hierophant_blast_indefinite" - chosen_message = "I are now firing cross blasts at my target." - chosen_attack_num = 3 - -/datum/action/innate/megafauna_attack/blink_spam - name = "Blink Chase" - icon_icon = 'icons/obj/lavaland/artefacts.dmi' - button_icon_state = "hierophant_club_ready_beacon" - chosen_message = "I are now repeatedly blinking at my target." - chosen_attack_num = 4 - -/mob/living/simple_animal/hostile/megafauna/hierophant/OpenFire() - if(blinking) - return - - calculate_rage() - var/blink_counter = 1 + round(anger_modifier * 0.08) - var/cross_counter = 1 + round(anger_modifier * 0.12) - - arena_trap(target) - ranged_cooldown = world.time + max(5, ranged_cooldown_time - anger_modifier * 0.75) //scale cooldown lower with high anger. - - var/target_slowness = 0 - var/mob/living/L - if(isliving(target)) - L = target - target_slowness += L.cached_multiplicative_slowdown - if(client) - target_slowness += 1 - - target_slowness = max(target_slowness, 1) - chaser_speed = max(1, (3 - anger_modifier * 0.04) + ((target_slowness - 1) * 0.5)) - - if(client) - switch(chosen_attack) - if(1) - blink(target) - if(2) - chaser_swarm(blink_counter, target_slowness, cross_counter) - if(3) - cross_blast_spam(blink_counter, target_slowness, cross_counter) - if(4) - blink_spam(blink_counter, target_slowness, cross_counter) - return - - if(L?.stat == DEAD && !blinking && get_dist(src, L) > 2) - blink(L) - return - - if(prob(anger_modifier * 0.75)) //major ranged attack - var/list/possibilities = list() - if(cross_counter > 1) - possibilities += "cross_blast_spam" - if(get_dist(src, target) > 2) - possibilities += "blink_spam" - if(chaser_cooldown < world.time) - if(prob(anger_modifier * 2)) - possibilities = list("chaser_swarm") - else - possibilities += "chaser_swarm" - if(possibilities.len) - switch(pick(possibilities)) - if("blink_spam") //blink either once or multiple times. - blink_spam(blink_counter, target_slowness, cross_counter) - if("cross_blast_spam") //fire a lot of cross blasts at a target. - cross_blast_spam(blink_counter, target_slowness, cross_counter) - if("chaser_swarm") //fire four fucking chasers at a target and their friends. - chaser_swarm(blink_counter, target_slowness, cross_counter) - return - - if(chaser_cooldown < world.time) //if chasers are off cooldown, fire some! - var/obj/effect/temp_visual/hierophant/chaser/C = new /obj/effect/temp_visual/hierophant/chaser(loc, src, target, chaser_speed, FALSE) - chaser_cooldown = world.time + initial(chaser_cooldown) - if((prob(anger_modifier) || target.Adjacent(src)) && target != src) - var/obj/effect/temp_visual/hierophant/chaser/OC = new(loc, src, target, chaser_speed * 1.5, FALSE) - OC.moving = 4 - OC.moving_dir = pick(GLOB.cardinals - C.moving_dir) - - else if(prob(10 + (anger_modifier * 0.5)) && get_dist(src, target) > 2) - blink(target) - - else if(prob(70 - anger_modifier)) //a cross blast of some type - if(prob(anger_modifier * (2 / target_slowness)) && health < maxHealth * 0.5) //we're super angry do it at all dirs - INVOKE_ASYNC(src, PROC_REF(blasts), target, GLOB.alldirs) - else if(prob(60)) - INVOKE_ASYNC(src, PROC_REF(blasts), target, GLOB.cardinals) - else - INVOKE_ASYNC(src, PROC_REF(blasts), target, GLOB.diagonals) - else //just release a burst of power - INVOKE_ASYNC(src, PROC_REF(burst), get_turf(src)) - -/mob/living/simple_animal/hostile/megafauna/hierophant/proc/blink_spam(blink_counter, target_slowness, cross_counter) - ranged_cooldown = world.time + max(5, major_attack_cooldown - anger_modifier * 0.75) - if(health < maxHealth * 0.5 && blink_counter > 1) - visible_message("\"Mx ampp rsx iwgeti.\"") - var/oldcolor = color - animate(src, color = "#660099", time = 6) - SLEEP_CHECK_DEATH(6) - while(!QDELETED(target) && blink_counter) - if(loc == target.loc || loc == target) //we're on the same tile as them after about a second we can stop now - break - blink_counter-- - blinking = FALSE - blink(target) - blinking = TRUE - SLEEP_CHECK_DEATH(4 + target_slowness) - animate(src, color = oldcolor, time = 8) - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_atom_colour)), 8) - SLEEP_CHECK_DEATH(8) - blinking = FALSE - else - blink(target) - -/mob/living/simple_animal/hostile/megafauna/hierophant/proc/cross_blast_spam(blink_counter, target_slowness, cross_counter) - ranged_cooldown = world.time + max(5, major_attack_cooldown - anger_modifier * 0.75) - visible_message("\"Piezi mx rsalivi xs vyr.\"") - blinking = TRUE - var/oldcolor = color - animate(src, color = "#660099", time = 6) - SLEEP_CHECK_DEATH(6) - while(!QDELETED(target) && cross_counter) - cross_counter-- - if(prob(60)) - INVOKE_ASYNC(src, PROC_REF(blasts), target, GLOB.cardinals) - else - INVOKE_ASYNC(src, PROC_REF(blasts), target, GLOB.diagonals) - SLEEP_CHECK_DEATH(6 + target_slowness) - animate(src, color = oldcolor, time = 8) - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_atom_colour)), 8) - SLEEP_CHECK_DEATH(8) - blinking = FALSE - - -/mob/living/simple_animal/hostile/megafauna/hierophant/proc/chaser_swarm(blink_counter, target_slowness, cross_counter) - ranged_cooldown = world.time + max(5, major_attack_cooldown - anger_modifier * 0.75) - visible_message("\"Mx gerrsx lmhi.\"") - blinking = TRUE - var/oldcolor = color - animate(src, color = "#660099", time = 6) - SLEEP_CHECK_DEATH(6) - var/list/targets = ListTargets() - var/list/cardinal_copy = GLOB.cardinals.Copy() - while(targets.len && cardinal_copy.len) - var/mob/living/pickedtarget = pick(targets) - if(targets.len >= cardinal_copy.len) - pickedtarget = pick_n_take(targets) - if(!istype(pickedtarget) || pickedtarget.stat == DEAD) - pickedtarget = target - if(QDELETED(pickedtarget) || (istype(pickedtarget) && pickedtarget.stat == DEAD)) - break //main target is dead and we're out of living targets, cancel out - var/obj/effect/temp_visual/hierophant/chaser/C = new(loc, src, pickedtarget, chaser_speed, FALSE) - C.moving = 3 - C.moving_dir = pick_n_take(cardinal_copy) - SLEEP_CHECK_DEATH(8 + target_slowness) - chaser_cooldown = world.time + initial(chaser_cooldown) - animate(src, color = oldcolor, time = 8) - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_atom_colour)), 8) - SLEEP_CHECK_DEATH(8) - blinking = FALSE - -/mob/living/simple_animal/hostile/megafauna/hierophant/proc/blasts(mob/victim, list/directions = GLOB.cardinals) //fires cross blasts with a delay - var/turf/T = get_turf(victim) - if(!T) - return - if(directions == GLOB.cardinals) - new /obj/effect/temp_visual/hierophant/telegraph/cardinal(T, src) - else if(directions == GLOB.diagonals) - new /obj/effect/temp_visual/hierophant/telegraph/diagonal(T, src) - else - new /obj/effect/temp_visual/hierophant/telegraph(T, src) - playsound(T,'sound/blank.ogg', 200, TRUE) - SLEEP_CHECK_DEATH(2) - new /obj/effect/temp_visual/hierophant/blast(T, src, FALSE) - for(var/d in directions) - INVOKE_ASYNC(src, PROC_REF(blast_wall), T, d) - -/mob/living/simple_animal/hostile/megafauna/hierophant/proc/blast_wall(turf/T, set_dir) //make a wall of blasts beam_range tiles long - var/range = beam_range - var/turf/previousturf = T - var/turf/J = get_step(previousturf, set_dir) - for(var/i in 1 to range) - new /obj/effect/temp_visual/hierophant/blast(J, src, FALSE) - previousturf = J - J = get_step(previousturf, set_dir) - -/mob/living/simple_animal/hostile/megafauna/hierophant/proc/arena_trap(mob/victim) //trap a target in an arena - var/turf/T = get_turf(victim) - if(!istype(victim) || victim.stat == DEAD || !T || arena_cooldown > world.time) - return - if((istype(get_area(T), /area/ruin/unpowered/hierophant) || istype(get_area(src), /area/ruin/unpowered/hierophant)) && victim != src) - return - arena_cooldown = world.time + initial(arena_cooldown) - for(var/d in GLOB.cardinals) - INVOKE_ASYNC(src, PROC_REF(arena_squares), T, d) - for(var/t in RANGE_TURFS(11, T)) - if(t && get_dist(t, T) == 11) - new /obj/effect/temp_visual/hierophant/wall(t, src) - new /obj/effect/temp_visual/hierophant/blast(t, src, FALSE) - if(get_dist(src, T) >= 11) //hey you're out of range I need to get closer to you! - INVOKE_ASYNC(src, PROC_REF(blink), T) - -/mob/living/simple_animal/hostile/megafauna/hierophant/proc/arena_squares(turf/T, set_dir) //make a fancy effect extending from the arena target - var/turf/previousturf = T - var/turf/J = get_step(previousturf, set_dir) - for(var/i in 1 to 10) - var/obj/effect/temp_visual/hierophant/squares/HS = new(J) - HS.setDir(set_dir) - previousturf = J - J = get_step(previousturf, set_dir) - SLEEP_CHECK_DEATH(0.5) - -/mob/living/simple_animal/hostile/megafauna/hierophant/proc/blink(mob/victim) //blink to a target - if(blinking || !victim) - return - var/turf/T = get_turf(victim) - var/turf/source = get_turf(src) - new /obj/effect/temp_visual/hierophant/telegraph(T, src) - new /obj/effect/temp_visual/hierophant/telegraph(source, src) - playsound(T,'sound/blank.ogg', 200, TRUE) - playsound(source,'sound/blank.ogg', 200, TRUE) - blinking = TRUE - SLEEP_CHECK_DEATH(2) //short delay before we start... - new /obj/effect/temp_visual/hierophant/telegraph/teleport(T, src) - new /obj/effect/temp_visual/hierophant/telegraph/teleport(source, src) - for(var/t in RANGE_TURFS(1, T)) - var/obj/effect/temp_visual/hierophant/blast/B = new(t, src, FALSE) - B.damage = 30 - for(var/t in RANGE_TURFS(1, source)) - var/obj/effect/temp_visual/hierophant/blast/B = new(t, src, FALSE) - B.damage = 30 - animate(src, alpha = 0, time = 2, easing = EASE_OUT) //fade out - SLEEP_CHECK_DEATH(1) - visible_message("[src] fades out!") - density = FALSE - SLEEP_CHECK_DEATH(2) - forceMove(T) - SLEEP_CHECK_DEATH(1) - animate(src, alpha = 255, time = 2, easing = EASE_IN) //fade IN - SLEEP_CHECK_DEATH(1) - density = TRUE - visible_message("[src] fades in!") - SLEEP_CHECK_DEATH(1) //at this point the blasts we made detonate - blinking = FALSE - -/mob/living/simple_animal/hostile/megafauna/hierophant/proc/melee_blast(mob/victim) //make a 3x3 blast around a target - if(!victim) - return - var/turf/T = get_turf(victim) - if(!T) - return - new /obj/effect/temp_visual/hierophant/telegraph(T, src) - playsound(T,'sound/blank.ogg', 200, TRUE) - SLEEP_CHECK_DEATH(2) - for(var/t in RANGE_TURFS(1, T)) - new /obj/effect/temp_visual/hierophant/blast(t, src, FALSE) - -//expanding square -/proc/hierophant_burst(mob/caster, turf/original, burst_range, spread_speed = 0.5) - playsound(original,'sound/blank.ogg', 200, TRUE) - var/last_dist = 0 - for(var/t in spiral_range_turfs(burst_range, original)) - var/turf/T = t - if(!T) - continue - var/dist = get_dist(original, T) - if(dist > last_dist) - last_dist = dist - sleep(1 + min(burst_range - last_dist, 12) * spread_speed) //gets faster as it gets further out - new /obj/effect/temp_visual/hierophant/blast(T, caster, FALSE) - -/mob/living/simple_animal/hostile/megafauna/hierophant/proc/burst(turf/original, spread_speed) - hierophant_burst(src, original, burst_range, spread_speed) - -/mob/living/simple_animal/hostile/megafauna/hierophant/Life() - . = ..() - if(. && spawned_beacon && !QDELETED(spawned_beacon) && !client) - if(target || loc == spawned_beacon.loc) - timeout_time = initial(timeout_time) - else - timeout_time-- - if(timeout_time <= 0 && !did_reset) - did_reset = TRUE - visible_message("\"Vixyvrmrk xs fewi...\"") - blink(spawned_beacon) - adjustHealth(min((health - maxHealth) * 0.5, -250)) //heal for 50% of our missing health, minimum 10% of maximum health - wander = FALSE - if(health > maxHealth * 0.9) - visible_message("\"Vitemvw gsqtpixi. Stivexmrk ex qebmqyq ijjmgmirgc.\"") - else - visible_message("\"Vitemvw gsqtpixi. Stivexmsrep ijjmgmirgc gsqtvsqmwih.\"") - -/mob/living/simple_animal/hostile/megafauna/hierophant/death() - if(health > 0 || stat == DEAD) - return - else - stat = DEAD - blinking = TRUE //we do a fancy animation, release a huge burst(), and leave our staff. - visible_message("\"Mrmxmexmrk wipj-hiwxvygx wiuyirgi...\"") - visible_message("[src] shrinks, releasing a massive burst of energy!") - for(var/mob/living/L in view(7,src)) - stored_nearby += L // store the people to grant the achievements to once we die - hierophant_burst(null, get_turf(src), 10) - stat = CONSCIOUS // deathgasp wont run if dead, stupid - ..(force_grant = stored_nearby) - -/mob/living/simple_animal/hostile/megafauna/hierophant/Destroy() - qdel(spawned_beacon) - . = ..() - -/mob/living/simple_animal/hostile/megafauna/hierophant/devour(mob/living/L) - for(var/obj/item/W in L) - if(!L.dropItemToGround(W)) - qdel(W) - visible_message("\"[pick(kill_phrases)]\"") - visible_message("[src] annihilates [L]!","I annihilate [L], restoring my health!") - adjustHealth(-L.maxHealth*0.5) - L.dust() - -/mob/living/simple_animal/hostile/megafauna/hierophant/CanAttack(atom/the_target) - . = ..() - if(istype(the_target, /mob/living/simple_animal/hostile/asteroid/hivelordbrood)) //ignore temporary targets in favor of more permanent targets - return FALSE - -/mob/living/simple_animal/hostile/megafauna/hierophant/GiveTarget(new_target) - var/targets_the_same = (new_target == target) - . = ..() - if(. && target && !targets_the_same) - visible_message("\"[pick(target_phrases)]\"") - if(spawned_beacon && loc == spawned_beacon.loc && did_reset) - arena_trap(src) - -/mob/living/simple_animal/hostile/megafauna/hierophant/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - . = ..() - if(src && . && !blinking) - wander = TRUE - did_reset = FALSE - -/mob/living/simple_animal/hostile/megafauna/hierophant/AttackingTarget() - if(!blinking) - if(target && isliving(target)) - var/mob/living/L = target - if(L.stat != DEAD) - if(ranged_cooldown <= world.time) - calculate_rage() - ranged_cooldown = world.time + max(5, ranged_cooldown_time - anger_modifier * 0.75) - INVOKE_ASYNC(src, PROC_REF(burst), get_turf(src)) - else - burst_range = 3 - INVOKE_ASYNC(src, PROC_REF(burst), get_turf(src), 0.25) //melee attacks on living mobs cause it to release a fast burst if on cooldown - else - devour(L) - else - return ..() - -/mob/living/simple_animal/hostile/megafauna/hierophant/DestroySurroundings() - if(!blinking) - ..() - -/mob/living/simple_animal/hostile/megafauna/hierophant/Move() - if(!blinking) - . = ..() - -/mob/living/simple_animal/hostile/megafauna/hierophant/Moved(oldLoc, movement_dir) - . = ..() - if(!stat && .) - var/obj/effect/temp_visual/hierophant/squares/HS = new(oldLoc) - HS.setDir(movement_dir) - playsound(src, 'sound/blank.ogg', 150, TRUE, -4) - if(target) - arena_trap(target) - -/mob/living/simple_animal/hostile/megafauna/hierophant/Goto(target, delay, minimum_distance) - wander = TRUE - if(!blinking) - ..() - -/mob/living/simple_animal/hostile/megafauna/hierophant/proc/calculate_rage() //how angry we are overall - did_reset = FALSE //oh hey we're doing SOMETHING, clearly we might need to heal if we recall - anger_modifier = CLAMP(((maxHealth - health) / 42),0,50) - burst_range = initial(burst_range) + round(anger_modifier * 0.08) - beam_range = initial(beam_range) + round(anger_modifier * 0.12) - -//Hierophant overlays -/obj/effect/temp_visual/hierophant - name = "vortex energy" - layer = BELOW_MOB_LAYER - var/mob/living/caster //who made this, anyway - -/obj/effect/temp_visual/hierophant/Initialize(mapload, new_caster) - . = ..() - if(new_caster) - caster = new_caster - -/obj/effect/temp_visual/hierophant/squares - icon_state = "hierophant_squares" - duration = 3 - light_range = MINIMUM_USEFUL_LIGHT_RANGE - randomdir = FALSE - -/obj/effect/temp_visual/hierophant/squares/Initialize(mapload, new_caster) - . = ..() - if(ismineralturf(loc)) - var/turf/closed/mineral/M = loc - M.gets_drilled(caster) - -/obj/effect/temp_visual/hierophant/wall //smoothing and pooling were not friends, but pooling is dead. - name = "vortex wall" - icon = 'icons/turf/walls/hierophant_wall_temp.dmi' - icon_state = "wall" - light_range = MINIMUM_USEFUL_LIGHT_RANGE - duration = 100 - smooth = SMOOTH_TRUE - -/obj/effect/temp_visual/hierophant/wall/Initialize(mapload, new_caster) - . = ..() - queue_smooth_neighbors(src) - queue_smooth(src) - -/obj/effect/temp_visual/hierophant/wall/Destroy() - queue_smooth_neighbors(src) - return ..() - -/obj/effect/temp_visual/hierophant/wall/CanPass(atom/movable/mover, turf/target) - if(QDELETED(caster)) - return FALSE - if(mover == caster.pulledby) - return TRUE - if(istype(mover, /obj/projectile)) - var/obj/projectile/P = mover - if(P.firer == caster) - return TRUE - if(mover == caster) - return TRUE - return FALSE - -/obj/effect/temp_visual/hierophant/chaser //a hierophant's chaser. follows target around, moving and producing a blast every speed deciseconds. - duration = 98 - var/mob/living/target //what it's following - var/turf/targetturf //what turf the target is actually on - var/moving_dir //what dir it's moving in - var/previous_moving_dir //what dir it was moving in before that - var/more_previouser_moving_dir //what dir it was moving in before THAT - var/moving = 0 //how many steps to move before recalculating - var/standard_moving_before_recalc = 4 //how many times we step before recalculating normally - var/tiles_per_step = 1 //how many tiles we move each step - var/speed = 3 //how many deciseconds between each step - var/currently_seeking = FALSE - var/friendly_fire_check = FALSE //if blasts produced apply friendly fire - var/monster_damage_boost = TRUE - var/damage = 10 - -/obj/effect/temp_visual/hierophant/chaser/Initialize(mapload, new_caster, new_target, new_speed, is_friendly_fire) - . = ..() - target = new_target - friendly_fire_check = is_friendly_fire - if(new_speed) - speed = new_speed - addtimer(CALLBACK(src, PROC_REF(seek_target)), 1) - -/obj/effect/temp_visual/hierophant/chaser/proc/get_target_dir() - . = get_cardinal_dir(src, targetturf) - if((. != previous_moving_dir && . == more_previouser_moving_dir) || . == 0) //we're alternating, recalculate - var/list/cardinal_copy = GLOB.cardinals.Copy() - cardinal_copy -= more_previouser_moving_dir - . = pick(cardinal_copy) - -/obj/effect/temp_visual/hierophant/chaser/proc/seek_target() - if(!currently_seeking) - currently_seeking = TRUE - targetturf = get_turf(target) - while(target && src && !QDELETED(src) && currently_seeking && x && y && targetturf) //can this target actually be sook out - if(!moving) //we're out of tiles to move, find more and where the target is! - more_previouser_moving_dir = previous_moving_dir - previous_moving_dir = moving_dir - moving_dir = get_target_dir() - var/standard_target_dir = get_cardinal_dir(src, targetturf) - if((standard_target_dir != previous_moving_dir && standard_target_dir == more_previouser_moving_dir) || standard_target_dir == 0) - moving = 1 //we would be repeating, only move a tile before checking - else - moving = standard_moving_before_recalc - if(moving) //move in the dir we're moving in right now - var/turf/T = get_turf(src) - for(var/i in 1 to tiles_per_step) - var/maybe_new_turf = get_step(T, moving_dir) - if(maybe_new_turf) - T = maybe_new_turf - else - break - forceMove(T) - make_blast() //make a blast, too - moving-- - sleep(speed) - targetturf = get_turf(target) -/obj/effect/temp_visual/hierophant/chaser/proc/make_blast() - var/obj/effect/temp_visual/hierophant/blast/B = new(loc, caster, friendly_fire_check) - B.damage = damage - B.monster_damage_boost = monster_damage_boost - -/obj/effect/temp_visual/hierophant/telegraph - icon = 'icons/effects/96x96.dmi' - icon_state = "hierophant_telegraph" - pixel_x = -32 - pixel_y = -32 - duration = 3 - -/obj/effect/temp_visual/hierophant/telegraph/diagonal - icon_state = "hierophant_telegraph_diagonal" - -/obj/effect/temp_visual/hierophant/telegraph/cardinal - icon_state = "hierophant_telegraph_cardinal" - -/obj/effect/temp_visual/hierophant/telegraph/teleport - icon_state = "hierophant_telegraph_teleport" - duration = 9 - -/obj/effect/temp_visual/hierophant/telegraph/edge - icon_state = "hierophant_telegraph_edge" - duration = 40 - -/obj/effect/temp_visual/hierophant/blast - icon_state = "hierophant_blast" - name = "vortex blast" - light_range = 2 - light_power = 2 - desc = "" - duration = 9 - var/damage = 10 //how much damage do we do? - var/monster_damage_boost = TRUE //do we deal extra damage to monsters? Used by the boss - var/list/hit_things = list() //we hit these already, ignore them - var/friendly_fire_check = FALSE - var/bursting = FALSE //if we're bursting and need to hit anyone crossing us - -/obj/effect/temp_visual/hierophant/blast/Initialize(mapload, new_caster, friendly_fire) - . = ..() - friendly_fire_check = friendly_fire - if(new_caster) - hit_things += new_caster - if(ismineralturf(loc)) //drill mineral turfs - var/turf/closed/mineral/M = loc - M.gets_drilled(caster) - INVOKE_ASYNC(src, PROC_REF(blast)) - -/obj/effect/temp_visual/hierophant/blast/proc/blast() - var/turf/T = get_turf(src) - if(!T) - return - playsound(T,'sound/blank.ogg', 125, TRUE, -5) //make a sound - sleep(6) //wait a little - bursting = TRUE - do_damage(T) //do damage and mark us as bursting - sleep(1.3) //slightly forgiving; the burst animation is 1.5 deciseconds - bursting = FALSE //we no longer damage crossers - -/obj/effect/temp_visual/hierophant/blast/Crossed(atom/movable/AM) - ..() - if(bursting) - do_damage(get_turf(src)) - -/obj/effect/temp_visual/hierophant/blast/proc/do_damage(turf/T) - if(!damage) - return - for(var/mob/living/L in T.contents - hit_things) //find and damage mobs... - hit_things += L - if((friendly_fire_check && caster && caster.faction_check_mob(L)) || L.stat == DEAD) - continue - if(L.client) - flash_color(L.client, "#660099", 1) - playsound(L,'sound/blank.ogg', 50, TRUE, -4) - to_chat(L, "You're struck by a [name]!") - var/limb_to_hit = L.get_bodypart(pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) - var/armor = L.run_armor_check(limb_to_hit, "melee", "Your armor absorbs [src]!", "Your armor blocks part of [src]!", 50, "Your armor was penetrated by [src]!") - L.apply_damage(damage, BURN, limb_to_hit, armor) - if(ishostile(L)) - var/mob/living/simple_animal/hostile/H = L //mobs find and damage you... - if(H.stat == CONSCIOUS && !H.target && H.AIStatus != AI_OFF && !H.client) - if(!QDELETED(caster)) - if(get_dist(H, caster) <= H.aggro_vision_range) - H.FindTarget(list(caster), 1) - else - H.Goto(get_turf(caster), H.move_to_delay, 3) - if(monster_damage_boost && (ismegafauna(L) || istype(L, /mob/living/simple_animal/hostile/asteroid))) - L.adjustBruteLoss(damage) - if(caster) - log_combat(caster, L, "struck with a [name]") - for(var/obj/mecha/M in T.contents - hit_things) //also damage mechs. - hit_things += M - if(M.occupant) - if(friendly_fire_check && caster && caster.faction_check_mob(M.occupant)) - continue - to_chat(M.occupant, "My [M.name] is struck by a [name]!") - playsound(M,'sound/blank.ogg', 50, TRUE, -4) - M.take_damage(damage, BURN, 0, 0) - -/obj/effect/hierophant - name = "hierophant beacon" - desc = "" - icon = 'icons/obj/lavaland/artefacts.dmi' - icon_state = "hierophant_tele_off" - light_range = 2 - layer = LOW_OBJ_LAYER - anchored = TRUE - -/obj/effect/hierophant/ex_act() - return - -/obj/effect/hierophant/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/hierophant_club)) - var/obj/item/hierophant_club/H = I - if(H.timer > world.time) - return - if(H.beacon == src) - to_chat(user, "I start removing my hierophant beacon...") - H.timer = world.time + 51 - INVOKE_ASYNC(H, TYPE_PROC_REF(/obj/item/hierophant_club, prepare_icon_update)) - if(do_after(user, 50, target = src)) - playsound(src,'sound/blank.ogg', 200, TRUE, -4) - new /obj/effect/temp_visual/hierophant/telegraph/teleport(get_turf(src), user) - to_chat(user, "I collect [src], reattaching it to the club!") - H.beacon = null - user.update_action_buttons_icon() - qdel(src) - else - H.timer = world.time - INVOKE_ASYNC(H, TYPE_PROC_REF(/obj/item/hierophant_club, prepare_icon_update)) - else - to_chat(user, "I touch the beacon with the club, but nothing happens.") - else - return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index 66630e2a64..c6a09fc570 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -188,19 +188,6 @@ return if(Split()) return - //We check what loot we should drop. - var/last_legion = TRUE - for(var/mob/living/simple_animal/hostile/megafauna/legion/other in GLOB.mob_living_list) - if(other != src) - last_legion = FALSE - break - if(last_legion) - loot = list(/obj/item/staff/storm) - elimination = FALSE - else if(prob(20)) //20% chance for sick lootz. - loot = list(/obj/structure/closet/crate/necropolis/tendril) - if(!true_spawn) - loot = null return ..() ///Splits legion into smaller skulls. @@ -245,65 +232,6 @@ //Loot -/obj/item/staff/storm - name = "staff of storms" - desc = "" - icon_state = "staffofstorms" - item_state = "staffofstorms" - icon = 'icons/obj/guns/magic.dmi' - slot_flags = ITEM_SLOT_BACK - w_class = WEIGHT_CLASS_BULKY - force = 25 - damtype = BURN - hitsound = 'sound/blank.ogg' - var/storm_type = /datum/weather/ash_storm - var/storm_cooldown = 0 - var/static/list/excluded_areas = list() - -/obj/item/staff/storm/attack_self(mob/user) - if(storm_cooldown > world.time) - to_chat(user, "The staff is still recharging!") - return - - var/area/user_area = get_area(user) - var/turf/user_turf = get_turf(user) - if(!user_area || !user_turf || (user_area.type in excluded_areas)) - to_chat(user, "Something is preventing you from using the staff here.") - return - var/datum/weather/A - for(var/V in SSweather.curweathers) - var/datum/weather/W = V - if((user_turf.z in W.impacted_z_levels) && W.area_type == user_area.type) - A = W - break - - if(A) - if(A.stage != END_STAGE) - if(A.stage == WIND_DOWN_STAGE) - to_chat(user, "The storm is already ending! It would be a waste to use the staff now.") - return - user.visible_message("[user] holds [src] skywards as an orange beam travels into the sky!", \ - "I hold [src] skyward, dispelling the storm!") - playsound(user, 'sound/blank.ogg', 200, FALSE) - A.wind_down() - log_game("[user] ([key_name(user)]) has dispelled a storm at [AREACOORD(user_turf)]") - return - else - A = new storm_type(list(user_turf.z)) - A.name = "staff storm" - log_game("[user] ([key_name(user)]) has summoned [A] at [AREACOORD(user_turf)]") - if (is_special_character(user)) - message_admins("[A] has been summoned in [ADMIN_VERBOSEJMP(user_turf)] by [ADMIN_LOOKUPFLW(user)], a non-antagonist") - A.area_type = user_area.type - A.telegraph_duration = 100 - A.end_duration = 100 - - user.visible_message("[user] holds [src] skywards as red lightning crackles into the sky!", \ - "I hold [src] skyward, calling down a terrible storm!") - playsound(user, 'sound/blank.ogg', 200, FALSE) - A.telegraph() - storm_cooldown = world.time + 200 - ///A basic turret that shoots at nearby mobs. Intended to be used for the legion megafauna. /obj/structure/legionturret name = "\improper Legion sentinel" @@ -311,7 +239,7 @@ icon = 'icons/mob/lavaland/lavaland_monsters.dmi' icon_state = "legion_turret" light_power = 0.5 - light_range = 2 + light_outer_range = 2 max_integrity = 80 luminosity = 6 anchored = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index b71beae384..99985b2b14 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -9,7 +9,7 @@ environment_smash = ENVIRONMENT_SMASH_RWALLS mob_biotypes = MOB_ORGANIC|MOB_EPIC obj_damage = 400 - light_range = 3 + light_outer_range = 3 faction = list("mining", "boss") weather_immunities = list("lava","ash") movement_type = FLYING diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm deleted file mode 100644 index bccdbc5e90..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm +++ /dev/null @@ -1,288 +0,0 @@ -/* - -Swarmer Beacon - -A strange machine appears anywhere a normal lavaland mob can it produces a swarmer at a rate of -1/15 seconds, until there are GetTotalAISwarmerCap()/2 swarmers, after this it is up to the swarmers themselves to -increase their population (it will repopulate them should they fall under GetTotalAISwarmerCap()/2 again) - -tl;dr A million of the little hellraisers spawn (controlled by AI) and try to eat mining - -Loot: Not much, besides a shit load of artificial bluespace crystals, Oh and mining doesn't get eaten -that's a plus I suppose. - -Difficulty: Special - -*/ - -GLOBAL_LIST_EMPTY(AISwarmers) -GLOBAL_LIST_EMPTY(AISwarmersByType)//AISwarmersByType[.../resource] = list(1st, 2nd, nth), AISwarmersByType[../ranged] = list(1st, 2nd, nth) etc. -GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swarmer/ai/resource = 30, /mob/living/simple_animal/hostile/swarmer/ai/ranged_combat = 20, /mob/living/simple_animal/hostile/swarmer/ai/melee_combat = 10)) - - -//returns a type of AI swarmer that is NOT at max cap -//type order is shuffled, to prevent bias -/proc/GetUncappedAISwarmerType() - var/static/list/swarmerTypes = subtypesof(/mob/living/simple_animal/hostile/swarmer/ai) - LAZYINITLIST(GLOB.AISwarmersByType) - for(var/t in shuffle(swarmerTypes)) - var/list/amount = GLOB.AISwarmersByType[t] - if(!amount || amount.len < GLOB.AISwarmerCapsByType[t]) - return t - - -//Total of all subtype caps -/proc/GetTotalAISwarmerCap() - var/static/list/swarmerTypes = subtypesof(/mob/living/simple_animal/hostile/swarmer/ai) - . = 0 - LAZYINITLIST(GLOB.AISwarmersByType) - for(var/t in swarmerTypes) - . += GLOB.AISwarmerCapsByType[t] - - -/mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon - name = "swarmer beacon" - desc = "" - icon = 'icons/mob/swarmer.dmi' - icon_state = "swarmer_console" - health = 750 - maxHealth = 750 //""""low-ish"""" HP because it's a passive boss, and the swarm itself is the real foe - mob_biotypes = MOB_ROBOTIC - gps_name = "Hungry Signal" - achievement_type = /datum/award/achievement/boss/swarmer_beacon_kill - crusher_achievement_type = /datum/award/achievement/boss/swarmer_beacon_crusher - score_achievement_type = /datum/award/score/swarmer_beacon_score - faction = list("mining", "boss", "swarmer") - weather_immunities = list("lava","ash") - stop_automated_movement = TRUE - wander = FALSE - layer = BELOW_MOB_LAYER - AIStatus = AI_OFF - del_on_death = TRUE - var/swarmer_spawn_cooldown = 0 - var/swarmer_spawn_cooldown_amt = 150 //Deciseconds between the swarmers we spawn - var/call_help_cooldown = 0 - var/call_help_cooldown_amt = 150 //Deciseconds between calling swarmers to help us when attacked - var/static/list/swarmer_caps - - -/mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon/Initialize() - . = ..() - swarmer_caps = GLOB.AISwarmerCapsByType //for admin-edits - for(var/ddir in GLOB.cardinals) - new /obj/structure/swarmer/blockade (get_step(src, ddir)) - var/mob/living/simple_animal/hostile/swarmer/ai/resource/R = new(loc) - step(R, ddir) //Step the swarmers, instead of spawning them there, incase the turf is solid - - -/mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon/Life() - . = ..() - if(.) - var/createtype = GetUncappedAISwarmerType() - if(createtype && world.time > swarmer_spawn_cooldown && GLOB.AISwarmers.len < (GetTotalAISwarmerCap()*0.5)) - swarmer_spawn_cooldown = world.time + swarmer_spawn_cooldown_amt - new createtype(loc) - - -/mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - . = ..() - if(. > 0 && world.time > call_help_cooldown) - call_help_cooldown = world.time + call_help_cooldown_amt - summon_backup(25) //long range, only called max once per 15 seconds, so it's not deathlag - - -//SWARMER AI -//AI versions of the swarmer mini-antag -//This is an Abstract Base, it re-enables AI, but does not give the swarmer any goals/targets -/mob/living/simple_animal/hostile/swarmer/ai - wander = 1 - faction = list("swarmer", "mining") - weather_immunities = list("ash") //wouldn't be fun otherwise - AIStatus = AI_ON - -/mob/living/simple_animal/hostile/swarmer/ai/Initialize() - . = ..() - ToggleLight() //so you can see them eating you out of house and home/shooting you/stunlocking you for eternity - LAZYINITLIST(GLOB.AISwarmersByType[type]) - GLOB.AISwarmers += src - GLOB.AISwarmersByType[type] += src - - -/mob/living/simple_animal/hostile/swarmer/ai/Destroy() - GLOB.AISwarmers -= src - GLOB.AISwarmersByType[type] -= src - return ..() - - -/mob/living/simple_animal/hostile/swarmer/ai/SwarmerTypeToCreate() - return GetUncappedAISwarmerType() - - -/mob/living/simple_animal/hostile/swarmer/ai/resource/handle_automated_action() - . = ..() - if(.) - if(!stop_automated_movement) - if(health < maxHealth*0.25) - StartAction(100) - RepairSelf() - return - - -/mob/living/simple_animal/hostile/swarmer/ai/Move(atom/newloc) - if(newloc) - if(newloc.z == z) //so these actions are Z-specific - if(islava(newloc)) - var/turf/open/lava/L = newloc - if(!L.is_safe()) - StartAction(20) - new /obj/structure/lattice/catwalk/swarmer_catwalk(newloc) - return FALSE - - if(ischasm(newloc) && !throwing) - throw_at(get_edge_target_turf(src, get_dir(src, newloc)), 7 , 3, src, FALSE) //my planet needs me - return FALSE - - return ..() - - -/mob/living/simple_animal/hostile/swarmer/ai/proc/StartAction(deci = 0) - stop_automated_movement = TRUE - AIStatus = AI_OFF - addtimer(CALLBACK(src, PROC_REF(EndAction)), deci) - - -/mob/living/simple_animal/hostile/swarmer/ai/proc/EndAction() - stop_automated_movement = FALSE - AIStatus = AI_ON - - - - -//RESOURCE SWARMER: -//Similar to the original Player-Swarmers, these dismantle things to obtain the metal inside -//They then use this medal to produce more swarmers or traps/barricades - -/mob/living/simple_animal/hostile/swarmer/ai/resource - search_objects = 1 - attack_all_objects = TRUE //attempt to nibble everything - lose_patience_timeout = 150 - var/static/list/sharedWanted = typecacheof(list(/turf/closed/mineral, /turf/closed/wall)) //eat rocks and walls - var/static/list/sharedIgnore = list() - -//This handles viable things to eat/attack -//Place specific cases of AI derpiness here -//Most can be left to the automatic Gain/LosePatience() system -/mob/living/simple_animal/hostile/swarmer/ai/resource/CanAttack(atom/the_target) - - //SPECIFIC CASES: - //Smash fulltile windows before grilles - if(istype(the_target, /obj/structure/grille)) - for(var/obj/structure/window/rogueWindow in get_turf(the_target)) - if(rogueWindow.fulltile) //done this way because the subtypes are weird. - the_target = rogueWindow - break - - //GENERAL CASES: - if(is_type_in_typecache(the_target, sharedIgnore)) //always ignore - return FALSE - if(is_type_in_typecache(the_target, sharedWanted)) //always eat - return TRUE - - return ..() //else, have a nibble, see if it's food - - -/mob/living/simple_animal/hostile/swarmer/ai/resource/OpenFire(atom/A) - if(isliving(A)) //don't shoot rocks, sillies. - ..() - - -/mob/living/simple_animal/hostile/swarmer/ai/resource/AttackingTarget() - if(target.swarmer_act(src)) - add_type_to_wanted(target.type) - return TRUE - else - add_type_to_ignore(target.type) - return FALSE - - -/mob/living/simple_animal/hostile/swarmer/ai/resource/handle_automated_action() - . = ..() - if(.) - if(!stop_automated_movement) - if(GLOB.AISwarmers.len < GetTotalAISwarmerCap() && resources >= 50) - StartAction(100) //so they'll actually sit still and use the verbs - CreateSwarmer() - return - - if(resources > 5) - if(prob(5)) //lower odds, as to prioritise reproduction - StartAction(10) //not a typo - CreateBarricade() - return - if(prob(5)) - CreateTrap() - return - - -//So swarmers can learn what is and isn't food -/mob/living/simple_animal/hostile/swarmer/ai/resource/proc/add_type_to_wanted(typepath) - if(!sharedWanted[typepath])// this and += is faster than |= - sharedWanted += typecacheof(typepath) - - -/mob/living/simple_animal/hostile/swarmer/ai/resource/proc/add_type_to_ignore(typepath) - if(!sharedIgnore[typepath]) - sharedIgnore += typecacheof(typepath) - - -//RANGED SWARMER -/mob/living/simple_animal/hostile/swarmer/ai/ranged_combat - icon_state = "swarmer_ranged" - icon_living = "swarmer_ranged" - projectiletype = /obj/projectile/beam/laser - projectilesound = 'sound/blank.ogg' - check_friendly_fire = TRUE //you're supposed to protect the resource swarmers, you poop - retreat_distance = 3 - minimum_distance = 3 - -/mob/living/simple_animal/hostile/swarmer/ai/ranged_combat/Aggro() - ..() - summon_backup(15, TRUE) //Exact matching, so that goliaths don't come to aid the swarmers, that'd be silly - - -//MELEE SWARMER -/mob/living/simple_animal/hostile/swarmer/ai/melee_combat - icon_state = "swarmer_melee" - icon_living = "swarmer_melee" - health = 60 - maxHealth = 60 - ranged = FALSE - -/mob/living/simple_animal/hostile/swarmer/ai/melee_combat/Aggro() - ..() - summon_backup(15, TRUE) - - -/mob/living/simple_animal/hostile/swarmer/ai/melee_combat/AttackingTarget() - if(isliving(target)) - if(prob(35)) - StartAction(30) - DisperseTarget(target) - else - var/mob/living/L = target - L.attack_animal(src) - L.electrocute_act(10, src, flags = SHOCK_NOGLOVES) - return TRUE - else - return ..() - - - - -//SWARMER CATWALKS -//Used so they can survive lavaland better -/obj/structure/lattice/catwalk/swarmer_catwalk - name = "swarmer catwalk" - desc = "" - icon = 'icons/obj/smooth_structures/swarmer_catwalk.dmi' - icon_state = "swarmer_catwalk" diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index e2b668e1f5..325a691b4c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -94,7 +94,7 @@ O.forceMove(C) ..() -GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/cable, /obj/structure/window)) +GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/window)) /mob/living/simple_animal/hostile/mimic/copy health = 100 @@ -192,10 +192,6 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca /mob/living/simple_animal/hostile/mimic/copy/machine/CanAttack(atom/the_target) if(the_target == creator) // Don't attack our creator AI. return 0 - if(iscyborg(the_target)) - var/mob/living/silicon/robot/R = the_target - if(R.connected_ai == creator) // Only attack robots that aren't synced to our creator AI. - return 0 return ..() @@ -228,21 +224,9 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca Pewgun = G var/obj/item/ammo_box/magazine/M = Pewgun.mag_type casingtype = initial(M.ammo_type) - if(istype(G, /obj/item/gun/energy)) - Zapgun = G - var/selectfiresetting = Zapgun.select - var/obj/item/ammo_casing/energy/E = Zapgun.ammo_type[selectfiresetting] - projectiletype = initial(E.projectile_type) /mob/living/simple_animal/hostile/mimic/copy/ranged/OpenFire(the_target) - if(Zapgun) - if(Zapgun.cell) - var/obj/item/ammo_casing/energy/shot = Zapgun.ammo_type[Zapgun.select] - if(Zapgun.cell.charge >= shot.e_cost) - Zapgun.cell.use(shot.e_cost) - Zapgun.update_icon() - ..() - else if(Zapstick) + if(Zapstick) if(Zapstick.charges) Zapstick.charges-- Zapstick.update_icon() diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm index a2f66635b4..f2b97ee6cb 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm @@ -101,7 +101,7 @@ icon_dead = "watcher_magmawing_dead" maxHealth = 215 //Compensate for the lack of slowdown on projectiles with a bit of extra health health = 215 - light_range = 3 + light_outer_range = 3 light_power = 2.5 light_color = LIGHT_COLOR_LAVA projectiletype = /obj/projectile/temp/basilisk/magmawing diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm index 82bb9a3924..d0cf8116a1 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm @@ -88,10 +88,6 @@ IGNORE_PROC_IF_NOT_TARGET(attack_hulk) IGNORE_PROC_IF_NOT_TARGET(attack_paw) -IGNORE_PROC_IF_NOT_TARGET(attack_alien) - -IGNORE_PROC_IF_NOT_TARGET(attack_larva) - IGNORE_PROC_IF_NOT_TARGET(attack_animal) IGNORE_PROC_IF_NOT_TARGET(attack_slime) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm deleted file mode 100644 index 33d7b15f6c..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm +++ /dev/null @@ -1,360 +0,0 @@ -#define TUMOR_INACTIVE 0 -#define TUMOR_ACTIVE 1 -#define TUMOR_PASSIVE 2 - -//Elite mining mobs -/mob/living/simple_animal/hostile/asteroid/elite - name = "elite" - desc = "" - icon = 'icons/mob/lavaland/lavaland_elites.dmi' - faction = list("boss") - robust_searching = TRUE - ranged_ignores_vision = TRUE - ranged = TRUE - obj_damage = 5 - vision_range = 6 - aggro_vision_range = 18 - environment_smash = ENVIRONMENT_SMASH_NONE //This is to prevent elites smashing up the mining station, we'll make sure they can smash minerals fine below. - harm_intent_damage = 0 //Punching elites gets you nowhere - stat_attack = UNCONSCIOUS - layer = LARGE_MOB_LAYER - sentience_type = SENTIENCE_BOSS - hud_type = /datum/hud/lavaland_elite - var/chosen_attack = 1 - var/list/attack_action_types = list() - var/can_talk = FALSE - var/obj/loot_drop = null - - -//Gives player-controlled variants the ability to swap attacks -/mob/living/simple_animal/hostile/asteroid/elite/Initialize(mapload) - . = ..() - for(var/action_type in attack_action_types) - var/datum/action/innate/elite_attack/attack_action = new action_type() - attack_action.Grant(src) - -//Prevents elites from attacking members of their faction (can't hurt themselves either) and lets them mine rock with an attack despite not being able to smash walls. -/mob/living/simple_animal/hostile/asteroid/elite/AttackingTarget() - if(istype(target, /mob/living/simple_animal/hostile)) - var/mob/living/simple_animal/hostile/M = target - if(faction_check_mob(M)) - return FALSE - if(istype(target, /obj/structure/elite_tumor)) - var/obj/structure/elite_tumor/T = target - if(T.mychild == src && T.activity == TUMOR_PASSIVE) - var/elite_remove = alert("Re-enter the tumor?", "Despawn yourself?", "Yes", "No") - if(elite_remove == "No" || !src || QDELETED(src)) - return - T.mychild = null - T.activity = TUMOR_INACTIVE - T.icon_state = "advanced_tumor" - qdel(src) - return FALSE - . = ..() - if(ismineralturf(target)) - var/turf/closed/mineral/M = target - M.gets_drilled() - -//Elites can't talk (normally)! -/mob/living/simple_animal/hostile/asteroid/elite/say(message, bubble_type, list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) - if(can_talk) - . = ..() - return TRUE - return FALSE - -/*Basic setup for elite attacks, based on Whoneedspace's megafauna attack setup. -While using this makes the system rely on OnFire, it still gives options for timers not tied to OnFire, and it makes using attacks consistent accross the board for player-controlled elites.*/ - -/datum/action/innate/elite_attack - name = "Elite Attack" - icon_icon = 'icons/mob/actions/actions_elites.dmi' - button_icon_state = "" - background_icon_state = "bg_default" - var/mob/living/simple_animal/hostile/asteroid/elite/M - var/chosen_message - var/chosen_attack_num = 0 - -/datum/action/innate/elite_attack/Grant(mob/living/L) - if(istype(L, /mob/living/simple_animal/hostile/asteroid/elite)) - M = L - return ..() - return FALSE - -/datum/action/innate/elite_attack/Activate() - M.chosen_attack = chosen_attack_num - to_chat(M, chosen_message) - -/mob/living/simple_animal/hostile/asteroid/elite/updatehealth() - . = ..() - update_health_hud() - -/mob/living/simple_animal/hostile/asteroid/elite/update_health_hud() - if(hud_used) - var/severity = 0 - var/healthpercent = (health/maxHealth) * 100 - switch(healthpercent) - if(100 to INFINITY) - hud_used.healths.icon_state = "elite_health0" - if(80 to 100) - severity = 1 - if(60 to 80) - severity = 2 - if(40 to 60) - severity = 3 - if(20 to 40) - severity = 4 - if(10 to 20) - severity = 5 - if(1 to 20) - severity = 6 - else - severity = 7 - hud_used.healths.icon_state = "elite_health[severity]" - if(severity > 0) - overlay_fullscreen("brute", /atom/movable/screen/fullscreen/brute, severity) - else - clear_fullscreen("brute") - -//The Pulsing Tumor, the actual "spawn-point" of elites, handles the spawning, arena, and procs for dealing with basic scenarios. - -/obj/structure/elite_tumor - name = "pulsing tumor" - desc = "" - armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) - resistance_flags = INDESTRUCTIBLE - var/activity = TUMOR_INACTIVE - var/boosted = FALSE - var/times_won = 0 - var/mob/living/carbon/human/activator = null - var/mob/living/simple_animal/hostile/asteroid/elite/mychild = null - var/potentialspawns = list(/mob/living/simple_animal/hostile/asteroid/elite/broodmother, - /mob/living/simple_animal/hostile/asteroid/elite/pandora, - /mob/living/simple_animal/hostile/asteroid/elite/legionnaire, - /mob/living/simple_animal/hostile/asteroid/elite/herald) - icon = 'icons/obj/lavaland/tumor.dmi' - icon_state = "tumor" - pixel_x = -16 - light_color = LIGHT_COLOR_RED - light_range = 3 - anchored = TRUE - density = FALSE - -/obj/structure/elite_tumor/attack_hand(mob/user) - . = ..() - if(ishuman(user)) - switch(activity) - if(TUMOR_PASSIVE) - activity = TUMOR_ACTIVE - visible_message("[src] convulses as my arm enters its radius. Your instincts tell you to step back.") - activator = user - if(boosted) - mychild.playsound_local(get_turf(mychild), 'sound/blank.ogg', 40, 0) - to_chat(mychild, "Someone has activated my tumor. You will be returned to fight shortly, get ready!") - addtimer(CALLBACK(src, PROC_REF(return_elite)), 30) - INVOKE_ASYNC(src, PROC_REF(arena_checks)) - if(TUMOR_INACTIVE) - activity = TUMOR_ACTIVE - var/mob/dead/observer/elitemind = null - visible_message("[src] begins to convulse. Your instincts tell you to step back.") - activator = user - if(!boosted) - addtimer(CALLBACK(src, PROC_REF(spawn_elite)), 30) - return - visible_message("Something within [src] stirs...") - var/list/candidates = pollCandidatesForMob("Do you want to play as a lavaland elite?", ROLE_SENTIENCE, null, ROLE_SENTIENCE, 50, src, POLL_IGNORE_SENTIENCE_POTION) - if(candidates.len) - audible_message("The stirring sounds increase in volume!") - elitemind = pick(candidates) - elitemind.playsound_local(get_turf(elitemind), 'sound/blank.ogg', 40, 0) - to_chat(elitemind, "I have been chosen to play as a Lavaland Elite.\nIn a few seconds, you will be summoned on Lavaland as a monster to fight my activator, in a fight to the death.\nYour attacks can be switched using the buttons on the top left of the HUD, and used by clicking on targets or tiles similar to a gun.\nWhile the opponent might have an upper hand with powerful mining equipment and tools, you have great power normally limited by AI mobs.\nIf you want to win, you'll have to use my powers in creative ways to ensure the kill. It's suggested you try using them all as soon as possible.\nShould you win, you'll receive extra information regarding what to do after. Good luck!") - addtimer(CALLBACK(src, PROC_REF(spawn_elite), elitemind), 100) - else - visible_message("The stirring stops, and nothing emerges. Perhaps try again later.") - activity = TUMOR_INACTIVE - activator = null - - -/obj/structure/elite_tumor/proc/spawn_elite(mob/dead/observer/elitemind) - var/selectedspawn = pick(potentialspawns) - mychild = new selectedspawn(loc) - visible_message("[mychild] emerges from [src]!") - playsound(loc,'sound/blank.ogg', 200, 0, 50, TRUE, TRUE) - if(boosted) - mychild.key = elitemind.key - mychild.sentience_act() - icon_state = "tumor_popped" - INVOKE_ASYNC(src, PROC_REF(arena_checks)) - -/obj/structure/elite_tumor/proc/return_elite() - mychild.forceMove(loc) - visible_message("[mychild] emerges from [src]!") - playsound(loc,'sound/blank.ogg', 200, 0, 50, TRUE, TRUE) - mychild.revive(full_heal = TRUE, admin_revive = TRUE) - if(boosted) - mychild.maxHealth = mychild.maxHealth * 2 - mychild.health = mychild.maxHealth - -/obj/structure/elite_tumor/Initialize(mapload) - . = ..() - AddComponent(/datum/component/gps, "Menacing Signal") - START_PROCESSING(SSobj, src) - -/obj/structure/elite_tumor/Destroy() - STOP_PROCESSING(SSobj, src) - mychild = null - activator = null - return ..() - -/obj/structure/elite_tumor/process() - if(isturf(loc)) - for(var/mob/living/simple_animal/hostile/asteroid/elite/elitehere in loc) - if(elitehere == mychild && activity == TUMOR_PASSIVE) - mychild.adjustHealth(-mychild.maxHealth*0.05) - var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(mychild)) - H.color = "#FF0000" - -/obj/structure/elite_tumor/attackby(obj/item/I, mob/user, params) - . = ..() - if(istype(I, /obj/item/organ/regenerative_core) && activity == TUMOR_INACTIVE && !boosted) - var/obj/item/organ/regenerative_core/core = I - if(!core.preserved) - return - visible_message("As [user] drops the core into [src], [src] appears to swell.") - icon_state = "advanced_tumor" - boosted = TRUE - light_range = 6 - desc = "" - qdel(core) - return TRUE - -/obj/structure/elite_tumor/proc/arena_checks() - if(activity != TUMOR_ACTIVE || QDELETED(src)) - return - INVOKE_ASYNC(src, PROC_REF(fighters_check)) //Checks to see if our fighters died. - INVOKE_ASYNC(src, PROC_REF(arena_trap)) //Gets another arena trap queued up for when this one runs out. - INVOKE_ASYNC(src, PROC_REF(border_check)) //Checks to see if our fighters got out of the arena somehow. - addtimer(CALLBACK(src, PROC_REF(arena_checks)), 50) - -/obj/structure/elite_tumor/proc/fighters_check() - if(activator != null && activator.stat == DEAD || activity == TUMOR_ACTIVE && QDELETED(activator)) - onEliteWon() - if(mychild != null && mychild.stat == DEAD || activity == TUMOR_ACTIVE && QDELETED(mychild)) - onEliteLoss() - -/obj/structure/elite_tumor/proc/arena_trap() - var/turf/T = get_turf(src) - if(loc == null) - return - for(var/t in RANGE_TURFS(12, T)) - if(get_dist(t, T) == 12) - var/obj/effect/temp_visual/elite_tumor_wall/newwall - newwall = new /obj/effect/temp_visual/elite_tumor_wall(t, src) - newwall.activator = src.activator - newwall.ourelite = src.mychild - -/obj/structure/elite_tumor/proc/border_check() - if(activator != null && get_dist(src, activator) >= 12) - activator.forceMove(loc) - visible_message("[activator] suddenly reappears above [src]!") - playsound(loc,'sound/blank.ogg', 200, 0, 50, TRUE, TRUE) - if(mychild != null && get_dist(src, mychild) >= 12) - mychild.forceMove(loc) - visible_message("[mychild] suddenly reappears above [src]!") - playsound(loc,'sound/blank.ogg', 200, 0, 50, TRUE, TRUE) - -/obj/structure/elite_tumor/proc/onEliteLoss() - playsound(loc,'sound/blank.ogg', 200, 0, 50, TRUE, TRUE) - visible_message("[src] begins to convulse violently before beginning to dissipate.") - visible_message("As [src] closes, something is forced up from down below.") - var/obj/structure/closet/crate/necropolis/tendril/lootbox = new /obj/structure/closet/crate/necropolis/tendril(loc) - if(!boosted) - mychild = null - activator = null - qdel(src) - return - var/lootpick = rand(1, 2) - if(lootpick == 1 && mychild.loot_drop != null) - new mychild.loot_drop(lootbox) - else - new /obj/item/tumor_shard(lootbox) - mychild = null - activator = null - qdel(src) - -/obj/structure/elite_tumor/proc/onEliteWon() - activity = TUMOR_PASSIVE - activator = null - mychild.revive(full_heal = TRUE, admin_revive = TRUE) - if(boosted) - times_won++ - mychild.maxHealth = mychild.maxHealth * 0.5 - mychild.health = mychild.maxHealth - if(times_won == 1) - mychild.playsound_local(get_turf(mychild), 'sound/blank.ogg', 40, 0) - to_chat(mychild, "As the life in the activator's eyes fade, the forcefield around you dies out and you feel my power subside.\nDespite this inferno being my home, you feel as if you aren't welcome here anymore.\nWithout any guidance, my purpose is now for you to decide.") - to_chat(mychild, "My max health has been halved, but can now heal by standing on my tumor. Note, it's my only way to heal.\nBear in mind, if anyone interacts with my tumor, you'll be resummoned here to carry out another fight. In such a case, you will regain my full max health.\nAlso, be weary of my fellow inhabitants, they likely won't be happy to see you!") - to_chat(mychild, "Note that you are a lavaland monster, and thus not allied to the station. You should not cooperate or act friendly with any station crew unless under extreme circumstances!") - -/obj/item/tumor_shard - name = "tumor shard" - desc = "" - icon = 'icons/obj/lavaland/artefacts.dmi' - icon_state = "crevice_shard" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - item_state = "screwdriver_head" - throwforce = 5 - w_class = WEIGHT_CLASS_SMALL - throw_speed = 1 - throw_range = 5 - -/obj/item/tumor_shard/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(istype(target, /mob/living/simple_animal/hostile/asteroid/elite) && proximity_flag) - var/mob/living/simple_animal/hostile/asteroid/elite/E = target - if(E.stat != DEAD || E.sentience_type != SENTIENCE_BOSS || !E.key) - user.visible_message("It appears [E] is unable to be revived right now. Perhaps try again later.") - return - E.faction = list("neutral") - E.revive(full_heal = TRUE, admin_revive = TRUE) - user.visible_message("[user] stabs [E] with [src], reviving it.") - E.playsound_local(get_turf(E), 'sound/blank.ogg', 40, 0) - to_chat(E, "I have been revived by [user]. While you can't speak to them, you owe [user] a great debt. Assist [user.p_them()] in achieving [user.p_their()] goals, regardless of risk.Note that you now share the loyalties of [user]. You are expected not to intentionally sabotage their faction unless commanded to!") - E.maxHealth = E.maxHealth * 0.5 - E.health = E.maxHealth - E.desc = "" - E.sentience_type = SENTIENCE_ORGANIC - qdel(src) - else - to_chat(user, "[src] only works on the corpse of a sentient lavaland elite.") - -/obj/effect/temp_visual/elite_tumor_wall - name = "magic wall" - icon = 'icons/turf/walls/hierophant_wall_temp.dmi' - icon_state = "wall" - duration = 50 - smooth = SMOOTH_TRUE - layer = BELOW_MOB_LAYER - var/mob/living/carbon/human/activator = null - var/mob/living/simple_animal/hostile/asteroid/elite/ourelite = null - color = rgb(255,0,0) - light_range = MINIMUM_USEFUL_LIGHT_RANGE - light_color = LIGHT_COLOR_RED - -/obj/effect/temp_visual/elite_tumor_wall/Initialize(mapload, new_caster) - . = ..() - queue_smooth_neighbors(src) - queue_smooth(src) - -/obj/effect/temp_visual/elite_tumor_wall/Destroy() - queue_smooth_neighbors(src) - activator = null - ourelite = null - return ..() - -/obj/effect/temp_visual/elite_tumor_wall/CanPass(atom/movable/mover, turf/target) - if(mover == ourelite || mover == activator) - return FALSE - else - return TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm deleted file mode 100644 index e31d047806..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm +++ /dev/null @@ -1,246 +0,0 @@ -#define TENTACLE_PATCH 1 -#define SPAWN_CHILDREN 2 -#define RAGE 3 -#define CALL_CHILDREN 4 - -/** - * # Goliath Broodmother - * - * A stronger, faster variation of the goliath. Has the ability to spawn baby goliaths, which it can later detonate at will. - * When it's health is below half, tendrils will spawn randomly around it. When it is below a quarter of health, this effect is doubled. - * It's attacks are as follows: - * - Spawns a 3x3/plus shape of tentacles on the target location - * - Spawns 2 baby goliaths on its tile, up to a max of 8. Children blow up when they die. - * - The broodmother lets out a noise, and is able to move faster for 6.5 seconds. - * - Summons your children around you. - * The broodmother is a fight revolving around stage control, as the activator has to manage the baby goliaths and the broodmother herself, along with all the tendrils. - */ - -/mob/living/simple_animal/hostile/asteroid/elite/broodmother - name = "goliath broodmother" - desc = "" - gender = FEMALE - icon_state = "broodmother" - icon_living = "broodmother" - icon_aggro = "broodmother" - icon_dead = "egg_sac" - icon_gib = "syndicate_gib" - maxHealth = 800 - health = 800 - melee_damage_lower = 30 - melee_damage_upper = 30 - armor_penetration = 30 - attack_verb_continuous = "beats down on" - attack_verb_simple = "beat down on" - attack_sound = 'sound/blank.ogg' - throw_message = "does nothing to the rocky hide of the" - speed = 2 - move_to_delay = 5 - mob_biotypes = MOB_ORGANIC|MOB_BEAST - mouse_opacity = MOUSE_OPACITY_ICON - deathmessage = "explodes into gore!" - loot_drop = /obj/item/crusher_trophy/broodmother_tongue - - attack_action_types = list(/datum/action/innate/elite_attack/tentacle_patch, - /datum/action/innate/elite_attack/spawn_children, - /datum/action/innate/elite_attack/rage, - /datum/action/innate/elite_attack/call_children) - - var/rand_tent = 0 - var/list/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/children_list = list() - -/datum/action/innate/elite_attack/tentacle_patch - name = "Tentacle Patch" - button_icon_state = "tentacle_patch" - chosen_message = "I are now attacking with a patch of tentacles." - chosen_attack_num = TENTACLE_PATCH - -/datum/action/innate/elite_attack/spawn_children - name = "Spawn Children" - button_icon_state = "spawn_children" - chosen_message = "I will spawn two children at your location to assist you in combat. You can have up to 8." - chosen_attack_num = SPAWN_CHILDREN - -/datum/action/innate/elite_attack/rage - name = "Rage" - button_icon_state = "rage" - chosen_message = "I will temporarily increase your movement speed." - chosen_attack_num = RAGE - -/datum/action/innate/elite_attack/call_children - name = "Call Children" - button_icon_state = "call_children" - chosen_message = "I will summon your children to your location." - chosen_attack_num = CALL_CHILDREN - -/mob/living/simple_animal/hostile/asteroid/elite/broodmother/OpenFire() - if(client) - switch(chosen_attack) - if(TENTACLE_PATCH) - tentacle_patch(target) - if(SPAWN_CHILDREN) - spawn_children() - if(RAGE) - rage() - if(CALL_CHILDREN) - call_children() - return - var/aiattack = rand(1,4) - switch(aiattack) - if(TENTACLE_PATCH) - tentacle_patch(target) - if(SPAWN_CHILDREN) - spawn_children() - if(RAGE) - rage() - if(CALL_CHILDREN) - call_children() - -/mob/living/simple_animal/hostile/asteroid/elite/broodmother/Life() - . = ..() - if(health < maxHealth * 0.5 && rand_tent < world.time) - rand_tent = world.time + 30 - var/tentacle_amount = 5 - if(health < maxHealth * 0.25) - tentacle_amount = 10 - var/tentacle_loc = spiral_range_turfs(5, get_turf(src)) - for(var/i in 1 to tentacle_amount) - var/turf/t = pick_n_take(tentacle_loc) - new /obj/effect/temp_visual/goliath_tentacle/broodmother(t, src) - -/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/tentacle_patch(target) - ranged_cooldown = world.time + 15 - var/tturf = get_turf(target) - if(!isturf(tturf)) - return - visible_message("[src] digs its tentacles under [target]!") - new /obj/effect/temp_visual/goliath_tentacle/broodmother/patch(tturf, src) - -/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/spawn_children(target) - ranged_cooldown = world.time + 40 - visible_message("The ground churns behind [src]!") - for(var/i in 1 to 2) - if(children_list.len >= 8) - return - var/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/newchild = new /mob/living/simple_animal/hostile/asteroid/elite/broodmother_child(loc) - newchild.GiveTarget(target) - newchild.faction = faction.Copy() - visible_message("[newchild] appears below [src]!") - newchild.mother = src - children_list += newchild - -/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/rage() - ranged_cooldown = world.time + 70 - playsound(src,'sound/blank.ogg', 200, 1) - visible_message("[src] starts picking up speed!") - color = "#FF0000" - set_varspeed(0) - move_to_delay = 3 - addtimer(CALLBACK(src, PROC_REF(reset_rage)), 65) - -/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/reset_rage() - color = "#FFFFFF" - set_varspeed(2) - move_to_delay = 5 - -/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/call_children() - ranged_cooldown = world.time + 60 - visible_message("The ground shakes near [src]!") - var/list/directions = GLOB.cardinals.Copy() + GLOB.diagonals.Copy() - for(var/mob/child in children_list) - var/spawndir = pick_n_take(directions) - var/turf/T = get_step(src, spawndir) - if(T) - child.forceMove(T) - playsound(src, 'sound/blank.ogg', 100, 1) - -//The goliath's children. Pretty weak, simple mobs which are able to put a single tentacle under their target when at range. -/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child - name = "baby goliath" - desc = "" - icon = 'icons/mob/lavaland/lavaland_monsters.dmi' - icon_state = "goliath_baby" - icon_living = "goliath_baby" - icon_aggro = "goliath_baby" - icon_dead = "goliath_baby_dead" - icon_gib = "syndicate_gib" - maxHealth = 30 - health = 30 - melee_damage_lower = 5 - melee_damage_upper = 5 - attack_verb_continuous = "bashes against" - attack_verb_simple = "bash against" - attack_sound = 'sound/blank.ogg' - throw_message = "does nothing to the rocky hide of the" - speed = 2 - move_to_delay = 5 - mob_biotypes = MOB_ORGANIC|MOB_BEAST - mouse_opacity = MOUSE_OPACITY_ICON - butcher_results = list() - guaranteed_butcher_results = list(/obj/item/stack/sheet/animalhide/goliath_hide = 1) - deathmessage = "falls to the ground." - status_flags = CANPUSH - var/mob/living/simple_animal/hostile/asteroid/elite/broodmother/mother = null - -/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/OpenFire(target) - ranged_cooldown = world.time + 40 - var/tturf = get_turf(target) - if(!isturf(tturf)) - return - if(get_dist(src, target) <= 7)//Screen range check, so it can't attack people off-screen - visible_message("[src] digs one of its tentacles under [target]!") - new /obj/effect/temp_visual/goliath_tentacle/broodmother(tturf, src) - -/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/death() - . = ..() - if(mother != null) - mother.children_list -= src - visible_message("[src] explodes!") - explosion(get_turf(loc),0,0,0,flame_range = 3, adminlog = FALSE) - gib() - -//Tentacles have less stun time compared to regular variant, to balance being able to use them much more often. Also, 10 more damage. -/obj/effect/temp_visual/goliath_tentacle/broodmother/trip() - var/latched = FALSE - for(var/mob/living/L in loc) - if((!QDELETED(spawner) && spawner.faction_check_mob(L)) || L.stat == DEAD) - continue - visible_message("[src] grabs hold of [L]!") - L.Stun(10) - L.adjustBruteLoss(rand(30,35)) - latched = TRUE - if(!latched) - retract() - else - deltimer(timerid) - timerid = addtimer(CALLBACK(src, PROC_REF(retract)), 10, TIMER_STOPPABLE) - -/obj/effect/temp_visual/goliath_tentacle/broodmother/patch/Initialize(mapload, new_spawner) - . = ..() - INVOKE_ASYNC(src, PROC_REF(spawn_tentacles)) - -/obj/effect/temp_visual/goliath_tentacle/broodmother/patch/proc/spawn_tentacles() - var/tentacle_locs = spiral_range_turfs(1, get_turf(src)) - for(var/T in tentacle_locs) - new /obj/effect/temp_visual/goliath_tentacle/broodmother(T, spawner) - var/list/directions = GLOB.cardinals.Copy() - for(var/i in directions) - var/turf/T = get_step(get_turf(src), i) - T = get_step(T, i) - new /obj/effect/temp_visual/goliath_tentacle/broodmother(T, spawner) - -// Broodmother's loot: Broodmother Tongue -/obj/item/crusher_trophy/broodmother_tongue - name = "broodmother tongue" - desc = "" - icon = 'icons/obj/lavaland/elite_trophies.dmi' - icon_state = "broodmother_tongue" - denied_type = /obj/item/crusher_trophy/broodmother_tongue - bonus_value = 10 - -/obj/item/crusher_trophy/broodmother_tongue/effect_desc() - return "mark detonation to have a [bonus_value]% chance to summon a patch of goliath tentacles at the target's location" - -/obj/item/crusher_trophy/broodmother_tongue/on_mark_detonation(mob/living/target, mob/living/user) - if(rand(1, 100) <= bonus_value && target.stat != DEAD) - new /obj/effect/temp_visual/goliath_tentacle/broodmother/patch(get_turf(target), user) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm deleted file mode 100644 index 5e004130fa..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm +++ /dev/null @@ -1,274 +0,0 @@ -#define HERALD_TRISHOT 1 -#define HERALD_DIRECTIONALSHOT 2 -#define HERALD_TELESHOT 3 -#define HERALD_MIRROR 4 - -/** - * # Herald - * - * A slow-moving projectile user with a few tricks up it's sleeve. Less unga-bunga than Colossus, with more cleverness in it's fighting style. - * As it's health gets lower, the amount of projectiles fired per-attack increases. - * It's attacks are as follows: - * - Fires three projectiles in a a given direction. - * - Fires a spread in every cardinal and diagonal direction at once, then does it again after a bit. - * - Shoots a single, golden bolt. Wherever it lands, the herald will be teleported to the location. - * - Spawns a mirror which reflects projectiles directly at the target. - * Herald is a more concentrated variation of the Colossus fight, having less projectiles overall, but more focused attacks. - */ - -/mob/living/simple_animal/hostile/asteroid/elite/herald - name = "herald" - desc = "" - icon_state = "herald" - icon_living = "herald" - icon_aggro = "herald" - icon_dead = "herald_dying" - icon_gib = "syndicate_gib" - maxHealth = 800 - health = 800 - melee_damage_lower = 20 - melee_damage_upper = 20 - attack_verb_continuous = "preaches to" - attack_verb_simple = "preach to" - attack_sound = 'sound/blank.ogg' - throw_message = "doesn't affect the purity of" - speed = 4 - move_to_delay = 10 - mouse_opacity = MOUSE_OPACITY_ICON - deathsound = 'sound/blank.ogg' - deathmessage = "begins to shudder as it becomes transparent..." - loot_drop = /obj/item/clothing/neck/cloak/herald_cloak - - can_talk = 1 - - attack_action_types = list(/datum/action/innate/elite_attack/herald_trishot, - /datum/action/innate/elite_attack/herald_directionalshot, - /datum/action/innate/elite_attack/herald_teleshot, - /datum/action/innate/elite_attack/herald_mirror) - - var/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/my_mirror = null - var/is_mirror = FALSE - -/mob/living/simple_animal/hostile/asteroid/elite/herald/death() - . = ..() - if(!is_mirror) - addtimer(CALLBACK(src, PROC_REF(become_ghost)), 8) - if(my_mirror != null) - qdel(my_mirror) - -/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/become_ghost() - icon_state = "herald_ghost" - -/mob/living/simple_animal/hostile/asteroid/elite/herald/say(message, bubble_type, list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) - . = ..() - playsound(get_turf(src), 'sound/blank.ogg', 20, TRUE) - -/datum/action/innate/elite_attack/herald_trishot - name = "Triple Shot" - button_icon_state = "herald_trishot" - chosen_message = "I are now firing three shots in your chosen direction." - chosen_attack_num = HERALD_TRISHOT - -/datum/action/innate/elite_attack/herald_directionalshot - name = "Circular Shot" - button_icon_state = "herald_directionalshot" - chosen_message = "I are firing projectiles in all directions." - chosen_attack_num = HERALD_DIRECTIONALSHOT - -/datum/action/innate/elite_attack/herald_teleshot - name = "Teleport Shot" - button_icon_state = "herald_teleshot" - chosen_message = "I will now fire a shot which teleports you where it lands." - chosen_attack_num = HERALD_TELESHOT - -/datum/action/innate/elite_attack/herald_mirror - name = "Summon Mirror" - button_icon_state = "herald_mirror" - chosen_message = "I will spawn a mirror which duplicates your attacks." - chosen_attack_num = HERALD_MIRROR - -/mob/living/simple_animal/hostile/asteroid/elite/herald/OpenFire() - if(client) - switch(chosen_attack) - if(HERALD_TRISHOT) - herald_trishot(target) - if(my_mirror != null) - my_mirror.herald_trishot(target) - if(HERALD_DIRECTIONALSHOT) - herald_directionalshot() - if(my_mirror != null) - my_mirror.herald_directionalshot() - if(HERALD_TELESHOT) - herald_teleshot(target) - if(my_mirror != null) - my_mirror.herald_teleshot(target) - if(HERALD_MIRROR) - herald_mirror() - return - var/aiattack = rand(1,4) - switch(aiattack) - if(HERALD_TRISHOT) - herald_trishot(target) - if(my_mirror != null) - my_mirror.herald_trishot(target) - if(HERALD_DIRECTIONALSHOT) - herald_directionalshot() - if(my_mirror != null) - my_mirror.herald_directionalshot() - if(HERALD_TELESHOT) - herald_teleshot(target) - if(my_mirror != null) - my_mirror.herald_teleshot(target) - if(HERALD_MIRROR) - herald_mirror() - -/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/shoot_projectile(turf/marker, set_angle, is_teleshot) - var/turf/startloc = get_turf(src) - var/obj/projectile/herald/H = null - if(!is_teleshot) - H = new /obj/projectile/herald(startloc) - else - H = new /obj/projectile/herald/teleshot(startloc) - H.preparePixelProjectile(marker, startloc) - H.firer = src - if(target) - H.original = target - H.fire(set_angle) - -/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_trishot(target) - ranged_cooldown = world.time + 30 - playsound(get_turf(src), 'sound/blank.ogg', 20, TRUE) - var/target_turf = get_turf(target) - var/angle_to_target = Get_Angle(src, target_turf) - shoot_projectile(target_turf, angle_to_target, FALSE) - addtimer(CALLBACK(src, PROC_REF(shoot_projectile), target_turf, angle_to_target, FALSE), 2) - addtimer(CALLBACK(src, PROC_REF(shoot_projectile), target_turf, angle_to_target, FALSE), 4) - if(health < maxHealth * 0.5) - playsound(get_turf(src), 'sound/blank.ogg', 20, TRUE) - addtimer(CALLBACK(src, PROC_REF(shoot_projectile), target_turf, angle_to_target, FALSE), 10) - addtimer(CALLBACK(src, PROC_REF(shoot_projectile), target_turf, angle_to_target, FALSE), 12) - addtimer(CALLBACK(src, PROC_REF(shoot_projectile), target_turf, angle_to_target, FALSE), 14) - -/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_circleshot() - var/static/list/directional_shot_angles = list(0, 45, 90, 135, 180, 225, 270, 315) - for(var/i in directional_shot_angles) - shoot_projectile(get_turf(src), i, FALSE) - -/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/unenrage() - if(stat == DEAD || is_mirror) - return - icon_state = "herald" - -/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_directionalshot() - ranged_cooldown = world.time + 50 - if(!is_mirror) - icon_state = "herald_enraged" - playsound(get_turf(src), 'sound/blank.ogg', 20, TRUE) - addtimer(CALLBACK(src, PROC_REF(herald_circleshot)), 5) - if(health < maxHealth * 0.5) - playsound(get_turf(src), 'sound/blank.ogg', 20, TRUE) - addtimer(CALLBACK(src, PROC_REF(herald_circleshot)), 15) - addtimer(CALLBACK(src, PROC_REF(unenrage)), 20) - -/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_teleshot(target) - ranged_cooldown = world.time + 30 - playsound(get_turf(src), 'sound/blank.ogg', 20, TRUE) - var/target_turf = get_turf(target) - var/angle_to_target = Get_Angle(src, target_turf) - shoot_projectile(target_turf, angle_to_target, TRUE) - -/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_mirror() - ranged_cooldown = world.time + 40 - playsound(get_turf(src), 'sound/blank.ogg', 20, TRUE) - if(my_mirror != null) - qdel(my_mirror) - my_mirror = null - var/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/new_mirror = new /mob/living/simple_animal/hostile/asteroid/elite/herald/mirror(loc) - my_mirror = new_mirror - my_mirror.my_master = src - my_mirror.faction = faction.Copy() - -/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror - name = "herald's mirror" - desc = "" - health = 60 - maxHealth = 60 - icon_state = "herald_mirror" - deathmessage = "shatters violently!" - deathsound = 'sound/blank.ogg' - movement_type = FLYING - del_on_death = TRUE - is_mirror = TRUE - var/mob/living/simple_animal/hostile/asteroid/elite/herald/my_master = null - -/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/Initialize() - . = ..() - toggle_ai(AI_OFF) - -/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/Destroy() - if(my_master != null) - my_master.my_mirror = null - . = ..() - -/obj/projectile/herald - name ="death bolt" - icon_state= "chronobolt" - damage = 15 - armor_penetration = 60 - speed = 2 - eyeblur = 0 - damage_type = BRUTE - pass_flags = PASSTABLE - -/obj/projectile/herald/teleshot - name ="golden bolt" - damage = 0 - color = rgb(255,255,102) - -/obj/projectile/herald/on_hit(atom/target, blocked = FALSE) - . = ..() - if(ismineralturf(target)) - var/turf/closed/mineral/M = target - M.gets_drilled() - return - else if(isliving(target)) - var/mob/living/L = target - var/mob/living/F = firer - if(F != null && istype(F, /mob/living/simple_animal/hostile/asteroid/elite) && F.faction_check_mob(L)) - L.heal_overall_damage(damage) - -/obj/projectile/herald/teleshot/on_hit(atom/target, blocked = FALSE) - . = ..() - firer.forceMove(get_turf(src)) - -//Herald's loot: Cloak of the Prophet - -/obj/item/clothing/neck/cloak/herald_cloak - name = "cloak of the prophet" - desc = "" - icon = 'icons/obj/lavaland/elite_trophies.dmi' - icon_state = "herald_cloak" - body_parts_covered = CHEST|GROIN|ARMS - hit_reaction_chance = 10 - -/obj/item/clothing/neck/cloak/herald_cloak/proc/reactionshot(mob/living/carbon/owner) - var/static/list/directional_shot_angles = list(0, 45, 90, 135, 180, 225, 270, 315) - for(var/i in directional_shot_angles) - shoot_projectile(get_turf(owner), i, owner) - -/obj/item/clothing/neck/cloak/herald_cloak/proc/shoot_projectile(turf/marker, set_angle, mob/living/carbon/owner) - var/turf/startloc = get_turf(owner) - var/obj/projectile/herald/H = null - H = new /obj/projectile/herald(startloc) - H.preparePixelProjectile(marker, startloc) - H.firer = owner - H.fire(set_angle) - -/obj/item/clothing/neck/cloak/herald_cloak/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - . = ..() - if(!rand(1,100) <= hit_reaction_chance) - return - owner.visible_message("[owner]'s [src] emits a loud noise as [owner] is struck!") - var/static/list/directional_shot_angles = list(0, 45, 90, 135, 180, 225, 270, 315) - playsound(get_turf(owner), 'sound/blank.ogg', 20, TRUE) - addtimer(CALLBACK(src, PROC_REF(reactionshot), owner), 10) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm deleted file mode 100644 index ae4b00162b..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm +++ /dev/null @@ -1,300 +0,0 @@ -#define LEGIONNAIRE_CHARGE 1 -#define HEAD_DETACH 2 -#define BONFIRE_TELEPORT 3 -#define SPEW_SMOKE 4 - -/** - * # Legionnaire - * - * A towering skeleton, embodying the power of Legion. - * As it's health gets lower, the head does more damage. - * It's attacks are as follows: - * - Charges at the target after a telegraph, throwing them across the arena should it connect. - * - Legionnaire's head detaches, attacking as it's own entity. Has abilities of it's own later into the fight. Once dead, regenerates after a brief period. If the skill is used while the head is off, it will be killed. - * - Leaves a pile of bones at my location. Upon using this skill again, you'll swap locations with the bone pile. - * - Spews a cloud of smoke from it's maw, wherever said maw is. - * A unique fight incorporating the head mechanic of legion into a whole new beast. Combatants will need to make sure the tag-team of head and body don't lure them into a deadly trap. - */ - -/mob/living/simple_animal/hostile/asteroid/elite/legionnaire - name = "legionnaire" - desc = "" - icon_state = "legionnaire" - icon_living = "legionnaire" - icon_aggro = "legionnaire" - icon_dead = "legionnaire_dead" - icon_gib = "syndicate_gib" - maxHealth = 800 - health = 800 - melee_damage_lower = 30 - melee_damage_upper = 30 - attack_verb_continuous = "slashes its arms at" - attack_verb_simple = "slash my arms at" - attack_sound = 'sound/blank.ogg' - throw_message = "doesn't affect the sturdiness of" - speed = 1 - move_to_delay = 3 - mouse_opacity = MOUSE_OPACITY_ICON - deathsound = 'sound/blank.ogg' - deathmessage = "'s arms reach out before it falls apart onto the floor, lifeless." - loot_drop = /obj/item/crusher_trophy/legionnaire_spine - - attack_action_types = list(/datum/action/innate/elite_attack/legionnaire_charge, - /datum/action/innate/elite_attack/head_detach, - /datum/action/innate/elite_attack/bonfire_teleport, - /datum/action/innate/elite_attack/spew_smoke) - - var/mob/living/simple_animal/hostile/asteroid/elite/legionnairehead/myhead = null - var/obj/structure/legionnaire_bonfire/mypile = null - var/has_head = TRUE - -/datum/action/innate/elite_attack/legionnaire_charge - name = "Legionnaire Charge" - button_icon_state = "legionnaire_charge" - chosen_message = "I will attempt to grab my opponent and throw them." - chosen_attack_num = LEGIONNAIRE_CHARGE - -/datum/action/innate/elite_attack/head_detach - name = "Release Head" - button_icon_state = "head_detach" - chosen_message = "I will now detach my head or kill it if it is already released." - chosen_attack_num = HEAD_DETACH - -/datum/action/innate/elite_attack/bonfire_teleport - name = "Bonfire Teleport" - button_icon_state = "bonfire_teleport" - chosen_message = "I will leave a bonfire. Second use will let you swap positions with it indefintiely. Using this move on the same tile as my active bonfire removes it." - chosen_attack_num = BONFIRE_TELEPORT - -/datum/action/innate/elite_attack/spew_smoke - name = "Spew Smoke" - button_icon_state = "spew_smoke" - chosen_message = "My head will spew smoke in an area, wherever it may be." - chosen_attack_num = SPEW_SMOKE - -/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/OpenFire() - if(client) - switch(chosen_attack) - if(LEGIONNAIRE_CHARGE) - legionnaire_charge(target) - if(HEAD_DETACH) - head_detach(target) - if(BONFIRE_TELEPORT) - bonfire_teleport() - if(SPEW_SMOKE) - spew_smoke() - return - var/aiattack = rand(1,4) - switch(aiattack) - if(LEGIONNAIRE_CHARGE) - legionnaire_charge(target) - if(HEAD_DETACH) - head_detach(target) - if(BONFIRE_TELEPORT) - bonfire_teleport() - if(SPEW_SMOKE) - spew_smoke() - -/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/legionnaire_charge(target) - ranged_cooldown = world.time + 50 - var/dir_to_target = get_dir(get_turf(src), get_turf(target)) - var/turf/T = get_step(get_turf(src), dir_to_target) - for(var/i in 1 to 4) - new /obj/effect/temp_visual/dragon_swoop/legionnaire(T) - T = get_step(T, dir_to_target) - playsound(src,'sound/blank.ogg', 200, 1) - visible_message("[src] prepares to charge!") - addtimer(CALLBACK(src, PROC_REF(legionnaire_charge_2), dir_to_target, 0), 5) - -/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/legionnaire_charge_2(move_dir, times_ran) - if(times_ran >= 4) - return - var/turf/T = get_step(get_turf(src), move_dir) - if(ismineralturf(T)) - var/turf/closed/mineral/M = T - M.gets_drilled() - if(T.density) - return - for(var/obj/structure/window/W in T.contents) - return - for(var/obj/machinery/door/D in T.contents) - return - forceMove(T) - playsound(src,'sound/blank.ogg', 200, 1) - var/list/hit_things = list() - var/throwtarget = get_edge_target_turf(src, move_dir) - for(var/mob/living/L in T.contents - hit_things - src) - if(faction_check_mob(L)) - return - hit_things += L - visible_message("[src] attacks [L] with much force!") - to_chat(L, "[src] grabs you and throws you with much force!") - L.safe_throw_at(throwtarget, 10, 1, src) - L.Paralyze(20) - L.adjustBruteLoss(50) - addtimer(CALLBACK(src, PROC_REF(legionnaire_charge_2), move_dir, (times_ran + 1)), 2) - -/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/head_detach(target) - ranged_cooldown = world.time + 10 - if(myhead != null) - myhead.adjustBruteLoss(600) - return - if(has_head) - has_head = FALSE - icon_state = "legionnaire_headless" - icon_living = "legionnaire_headless" - icon_aggro = "legionnaire_headless" - visible_message("[src]'s head flies off!") - var/mob/living/simple_animal/hostile/asteroid/elite/legionnairehead/newhead = new /mob/living/simple_animal/hostile/asteroid/elite/legionnairehead(loc) - newhead.flags_1 |= (flags_1 & ADMIN_SPAWNED_1) - newhead.GiveTarget(target) - newhead.faction = faction.Copy() - myhead = newhead - myhead.body = src - if(health < maxHealth * 0.25) - myhead.melee_damage_lower = 30 - myhead.melee_damage_upper = 30 - else if(health < maxHealth * 0.5) - myhead.melee_damage_lower = 20 - myhead.melee_damage_upper = 20 - -/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/onHeadDeath() - myhead = null - addtimer(CALLBACK(src, PROC_REF(regain_head)), 50) - -/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/regain_head() - has_head = TRUE - if(stat == DEAD) - return - icon_state = "legionnaire" - icon_living = "legionnaire" - icon_aggro = "legionnaire" - visible_message("The top of [src]'s spine leaks a black liquid, forming into a skull!") - -/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/bonfire_teleport() - ranged_cooldown = world.time + 5 - if(mypile == null) - var/obj/structure/legionnaire_bonfire/newpile = new /obj/structure/legionnaire_bonfire(loc) - mypile = newpile - mypile.myowner = src - playsound(get_turf(src),'sound/blank.ogg', 200, 1) - visible_message("[src] summons a bonfire on [get_turf(src)]!") - return - else - var/turf/legionturf = get_turf(src) - var/turf/pileturf = get_turf(mypile) - if(legionturf == pileturf) - mypile.take_damage(100) - mypile = null - return - playsound(pileturf,'sound/blank.ogg', 200, 1) - playsound(legionturf,'sound/blank.ogg', 200, 1) - visible_message("[src] melts down into a burning pile of bones!") - forceMove(pileturf) - visible_message("[src] forms from the bonfire!") - mypile.forceMove(legionturf) - -/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/spew_smoke() - ranged_cooldown = world.time + 60 - var/turf/T = null - if(myhead != null) - T = get_turf(myhead) - else - T = get_turf(src) - if(myhead != null) - myhead.visible_message("[myhead] spews smoke from its maw!") - else if(!has_head) - visible_message("[src] spews smoke from the tip of their spine!") - else - visible_message("[src] spews smoke from its maw!") - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(2, T) - smoke.start() - -//The legionnaire's head. Basically the same as any legion head, but we have to tell our creator when we die so they can generate another head. -/mob/living/simple_animal/hostile/asteroid/elite/legionnairehead - name = "legionnaire head" - desc = "" - icon_state = "legionnaire_head" - icon_living = "legionnaire_head" - icon_aggro = "legionnaire_head" - icon_dead = "legionnaire_dead" - icon_gib = "syndicate_gib" - maxHealth = 80 - health = 80 - melee_damage_lower = 10 - melee_damage_upper = 10 - attack_verb_continuous = "bites at" - attack_verb_simple = "bite at" - attack_sound = 'sound/blank.ogg' - throw_message = "simply misses" - speed = 0 - move_to_delay = 2 - del_on_death = 1 - deathmessage = "crumbles away!" - faction = list() - ranged = FALSE - var/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/body = null - -/mob/living/simple_animal/hostile/asteroid/elite/legionnairehead/death() - . = ..() - if(body) - body.onHeadDeath() - -//The legionnaire's bonfire, which can be swapped positions with. Also sets flammable living beings on fire when they walk over it. -/obj/structure/legionnaire_bonfire - name = "bone pile" - desc = "" - icon = 'icons/obj/lavaland/legionnaire_bonfire.dmi' - icon_state = "bonfire" - max_integrity = 100 - move_resist = MOVE_FORCE_EXTREMELY_STRONG - anchored = TRUE - density = FALSE - light_range = 4 - light_color = LIGHT_COLOR_RED - var/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/myowner = null - - -/obj/structure/legionnaire_bonfire/Entered(atom/movable/mover, turf/target) - if(isliving(mover)) - var/mob/living/L = mover - L.adjust_fire_stacks(3) - L.IgniteMob() - . = ..() - -/obj/structure/legionnaire_bonfire/Destroy() - if(myowner != null) - myowner.mypile = null - . = ..() - -//The visual effect which appears in front of legionnaire when he goes to charge. -/obj/effect/temp_visual/dragon_swoop/legionnaire - duration = 10 - color = rgb(0,0,0) - -/obj/effect/temp_visual/dragon_swoop/legionnaire/Initialize() - . = ..() - transform *= 0.33 - -// Legionnaire's loot: Legionnaire Spine - -/obj/item/crusher_trophy/legionnaire_spine - name = "legionnaire spine" - desc = "" - icon = 'icons/obj/lavaland/elite_trophies.dmi' - icon_state = "legionnaire_spine" - denied_type = /obj/item/crusher_trophy/legionnaire_spine - bonus_value = 20 - -/obj/item/crusher_trophy/legionnaire_spine/effect_desc() - return "mark detonation to have a [bonus_value]% chance to summon a loyal legion skull" - -/obj/item/crusher_trophy/legionnaire_spine/on_mark_detonation(mob/living/target, mob/living/user) - if(!rand(1, 100) <= bonus_value || target.stat == DEAD) - return - var/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/A = new /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion(user.loc) - A.flags_1 |= (flags_1 & ADMIN_SPAWNED_1) - A.GiveTarget(target) - A.friends = user - A.faction = user.faction.Copy() diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm deleted file mode 100644 index b663987373..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm +++ /dev/null @@ -1,192 +0,0 @@ -#define SINGULAR_SHOT 1 -#define MAGIC_BOX 2 -#define PANDORA_TELEPORT 3 -#define AOE_SQUARES 4 - -/** - * # Pandora - * - * A box with a similar design to the Hierophant which trades large, single attacks for more frequent smaller ones. - * As it's health gets lower, the time between it's attacks decrease. - * It's attacks are as follows: - * - Fires hierophant blasts in a straight line. Can only fire in a straight line in 8 directions, being the diagonals and cardinals. - * - Creates a box of hierophant blasts around the target. If they try to run away to avoid it, they'll very likely get hit. - * - Teleports the pandora from one location to another, almost identical to Hierophant. - * - Spawns a 5x5 AOE at the location of choice, spreading out from the center. - * Pandora's fight mirrors Hierophant's closely, but has stark differences in attack effects. Instead of long-winded dodge times and long cooldowns, Pandora constantly attacks the opponent, but leaves itself open for attack. - */ - -/mob/living/simple_animal/hostile/asteroid/elite/pandora - name = "pandora" - desc = "" - icon_state = "pandora" - icon_living = "pandora" - icon_aggro = "pandora" - icon_dead = "pandora_dead" - icon_gib = "syndicate_gib" - maxHealth = 800 - health = 800 - melee_damage_lower = 15 - melee_damage_upper = 15 - attack_verb_continuous = "smashes into the side of" - attack_verb_simple = "smash into the side of" - attack_sound = 'sound/blank.ogg' - throw_message = "merely dinks off of the" - speed = 4 - move_to_delay = 10 - mouse_opacity = MOUSE_OPACITY_ICON - deathsound = 'sound/blank.ogg' - deathmessage = "'s lights flicker, before its top part falls down." - loot_drop = /obj/item/clothing/accessory/pandora_hope - - attack_action_types = list(/datum/action/innate/elite_attack/singular_shot, - /datum/action/innate/elite_attack/magic_box, - /datum/action/innate/elite_attack/pandora_teleport, - /datum/action/innate/elite_attack/aoe_squares) - - var/sing_shot_length = 8 - var/cooldown_time = 20 - -/datum/action/innate/elite_attack/singular_shot - name = "Singular Shot" - button_icon_state = "singular_shot" - chosen_message = "I are now creating a single linear magic square." - chosen_attack_num = SINGULAR_SHOT - -/datum/action/innate/elite_attack/magic_box - name = "Magic Box" - button_icon_state = "magic_box" - chosen_message = "I are now attacking with a box of magic squares." - chosen_attack_num = MAGIC_BOX - -/datum/action/innate/elite_attack/pandora_teleport - name = "Line Teleport" - button_icon_state = "pandora_teleport" - chosen_message = "I will now teleport to my target." - chosen_attack_num = PANDORA_TELEPORT - -/datum/action/innate/elite_attack/aoe_squares - name = "AOE Blast" - button_icon_state = "aoe_squares" - chosen_message = "My attacks will spawn an AOE blast at my target location." - chosen_attack_num = AOE_SQUARES - -/mob/living/simple_animal/hostile/asteroid/elite/pandora/OpenFire() - if(client) - switch(chosen_attack) - if(SINGULAR_SHOT) - singular_shot(target) - if(MAGIC_BOX) - magic_box(target) - if(PANDORA_TELEPORT) - pandora_teleport(target) - if(AOE_SQUARES) - aoe_squares(target) - return - var/aiattack = rand(1,4) - switch(aiattack) - if(SINGULAR_SHOT) - singular_shot(target) - if(MAGIC_BOX) - magic_box(target) - if(PANDORA_TELEPORT) - pandora_teleport(target) - if(AOE_SQUARES) - aoe_squares(target) - -/mob/living/simple_animal/hostile/asteroid/elite/pandora/Life() - . = ..() - if(health >= maxHealth * 0.5) - cooldown_time = 20 - return - if(health < maxHealth * 0.5 && health > maxHealth * 0.25) - cooldown_time = 15 - return - else - cooldown_time = 10 - -/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/singular_shot(target) - ranged_cooldown = world.time + (cooldown_time * 0.5) - var/dir_to_target = get_dir(get_turf(src), get_turf(target)) - var/turf/T = get_step(get_turf(src), dir_to_target) - singular_shot_line(sing_shot_length, dir_to_target, T) - -/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/singular_shot_line(procsleft, angleused, turf/T) - if(procsleft <= 0) - return - new /obj/effect/temp_visual/hierophant/blast/pandora(T, src) - T = get_step(T, angleused) - procsleft = procsleft - 1 - addtimer(CALLBACK(src, PROC_REF(singular_shot_line), procsleft, angleused, T), 2) - -/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/magic_box(target) - ranged_cooldown = world.time + cooldown_time - var/turf/T = get_turf(target) - for(var/t in spiral_range_turfs(3, T)) - if(get_dist(t, T) > 1) - new /obj/effect/temp_visual/hierophant/blast/pandora(t, src) - -/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/pandora_teleport(target) - ranged_cooldown = world.time + cooldown_time - var/turf/T = get_turf(target) - var/turf/source = get_turf(src) - new /obj/effect/temp_visual/hierophant/telegraph(T, src) - new /obj/effect/temp_visual/hierophant/telegraph(source, src) - playsound(source,'sound/blank.ogg', 200, 1) - addtimer(CALLBACK(src, PROC_REF(pandora_teleport_2), T, source), 2) - -/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/pandora_teleport_2(turf/T, turf/source) - new /obj/effect/temp_visual/hierophant/telegraph/teleport(T, src) - new /obj/effect/temp_visual/hierophant/telegraph/teleport(source, src) - for(var/t in RANGE_TURFS(1, T)) - new /obj/effect/temp_visual/hierophant/blast/pandora(t, src) - for(var/t in RANGE_TURFS(1, source)) - new /obj/effect/temp_visual/hierophant/blast/pandora(t, src) - animate(src, alpha = 0, time = 2, easing = EASE_OUT) //fade out - visible_message("[src] fades out!") - density = FALSE - addtimer(CALLBACK(src, PROC_REF(pandora_teleport_3), T), 2) - -/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/pandora_teleport_3(turf/T) - forceMove(T) - animate(src, alpha = 255, time = 2, easing = EASE_IN) //fade IN - density = TRUE - visible_message("[src] fades in!") - -/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/aoe_squares(target) - ranged_cooldown = world.time + cooldown_time - var/turf/T = get_turf(target) - new /obj/effect/temp_visual/hierophant/blast/pandora(T, src) - var/max_size = 2 - addtimer(CALLBACK(src, PROC_REF(aoe_squares_2), T, 0, max_size), 2) - -/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/aoe_squares_2(turf/T, ring, max_size) - if(ring > max_size) - return - for(var/t in spiral_range_turfs(ring, T)) - if(get_dist(t, T) == ring) - new /obj/effect/temp_visual/hierophant/blast/pandora(t, src) - addtimer(CALLBACK(src, PROC_REF(aoe_squares_2), T, (ring + 1), max_size), 2) - -//The specific version of hiero's squares pandora uses -/obj/effect/temp_visual/hierophant/blast/pandora - damage = 20 - monster_damage_boost = FALSE - -//Pandora's loot: Hope -/obj/item/clothing/accessory/pandora_hope - name = "Hope" - desc = "" - icon = 'icons/obj/lavaland/elite_trophies.dmi' - icon_state = "hope" - resistance_flags = FIRE_PROOF - -/obj/item/clothing/accessory/pandora_hope/on_uniform_equip(obj/item/clothing/under/U, user) - var/mob/living/L = user - if(L && L.mind) - SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "hope_lavaland", /datum/mood_event/hope_lavaland) - -/obj/item/clothing/accessory/pandora_hope/on_uniform_dropped(obj/item/clothing/under/U, user) - var/mob/living/L = user - if(L && L.mind) - SEND_SIGNAL(L, COMSIG_CLEAR_MOOD_EVENT, "hope_lavaland") diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm index 8c1d0d9f05..8c5346491d 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @@ -277,32 +277,8 @@ H.dna.add_mutation(DWARFISM) /obj/effect/mob_spawn/human/corpse/damaged/legioninfested/Initialize() - var/type = pickweight(list("Miner" = 66, "Ashwalker" = 10, "Golem" = 10,"Clown" = 10, pick(list("Shadow", "YeOlde","Operative", "Cultist")) = 4)) + var/type = pickweight(list("Ashwalker" = 10, "Golem" = 10, pick(list("Shadow", "YeOlde","Operative")) = 4)) switch(type) - if("Miner") - mob_species = pickweight(list(/datum/species/human = 70, /datum/species/lizard = 26, /datum/species/fly = 2, /datum/species/plasmaman = 2)) - if(mob_species == /datum/species/plasmaman) - uniform = /obj/item/clothing/under/plasmaman - head = /obj/item/clothing/head/helmet/space/plasmaman - belt = /obj/item/tank/internals/plasmaman/belt - else - uniform = /obj/item/clothing/under/rank/cargo/miner/lavaland - if (prob(4)) - belt = pickweight(list(/obj/item/storage/belt/mining = 2, /obj/item/storage/belt/mining/alt = 2)) - else if(prob(10)) - belt = pickweight(list(/obj/item/pickaxe = 8, /obj/item/pickaxe/mini = 4, /obj/item/pickaxe/silver = 2, /obj/item/pickaxe/diamond = 1)) - else - belt = /obj/item/tank/internals/emergency_oxygen/engi - if(mob_species != /datum/species/lizard) - shoes = /obj/item/clothing/shoes/workboots/mining - gloves = /obj/item/clothing/gloves/color/black - mask = /obj/item/clothing/mask/gas/explorer - if(prob(20)) - suit = pickweight(list(/obj/item/clothing/suit/hooded/explorer = 18, /obj/item/clothing/suit/hooded/cloak/goliath = 2)) - if(prob(30)) - r_pocket = pickweight(list(/obj/item/stack/marker_beacon = 20, /obj/item/stack/spacecash/c1000 = 7, /obj/item/reagent_containers/hypospray/medipen/survival = 2, /obj/item/borg/upgrade/modkit/damage = 1 )) - if(prob(10)) - l_pocket = pickweight(list(/obj/item/stack/spacecash/c1000 = 7, /obj/item/reagent_containers/hypospray/medipen/survival = 2, /obj/item/borg/upgrade/modkit/cooldown = 1 )) if("Ashwalker") mob_species = /datum/species/lizard/ashwalker uniform = /obj/item/clothing/under/costume/gladiator/ash_walker @@ -320,27 +296,10 @@ r_pocket = /obj/item/kitchen/knife/combat/bone if(prob(30)) l_pocket = /obj/item/kitchen/knife/combat/bone - if("Clown") - name = pick(GLOB.clown_names) - outfit = /datum/outfit/job/clown - belt = null - backpack_contents = list() - if(prob(70)) - backpack_contents += pick(list(/obj/item/stamp/clown = 1, /obj/item/reagent_containers/spray/waterflower = 1, /obj/item/reagent_containers/food/snacks/grown/banana = 1, /obj/item/megaphone/clown = 1, /obj/item/reagent_containers/food/drinks/soda_cans/canned_laughter = 1, /obj/item/pneumatic_cannon/pie = 1)) - if(prob(30)) - backpack_contents += list(/obj/item/stack/sheet/mineral/bananium = pickweight(list( 1 = 3, 2 = 2, 3 = 1))) - if(prob(10)) - l_pocket = pickweight(list(/obj/item/bikehorn/golden = 3, /obj/item/bikehorn/airhorn= 1 )) - if(prob(10)) - r_pocket = /obj/item/implanter/sad_trombone if("Golem") mob_species = pick(list(/datum/species/golem/adamantine, /datum/species/golem/plasma, /datum/species/golem/diamond, /datum/species/golem/gold, /datum/species/golem/silver, /datum/species/golem/plasteel, /datum/species/golem/titanium, /datum/species/golem/plastitanium)) if(prob(30)) glasses = pickweight(list(/obj/item/clothing/glasses/meson = 2, /obj/item/clothing/glasses/hud/health = 2, /obj/item/clothing/glasses/hud/diagnostic =2, /obj/item/clothing/glasses/science = 2, /obj/item/clothing/glasses/welding = 2, /obj/item/clothing/glasses/night = 1)) - if(prob(10)) - belt = pick(list(/obj/item/storage/belt/mining/vendor, /obj/item/storage/belt/utility/full)) - if(prob(50)) - neck = /obj/item/bedsheet/rd/royal_cape if(prob(10)) l_pocket = pick(list(/obj/item/crowbar/power, /obj/item/screwdriver/power, /obj/item/weldingtool/experimental)) if("YeOlde") @@ -350,7 +309,6 @@ shoes = /obj/item/clothing/shoes/laceup head = /obj/item/clothing/head/helmet/knight suit = /obj/item/clothing/suit/armor/riot/knight - back = /obj/item/shield/riot/buckler belt = /obj/item/nullrod/claymore r_pocket = /obj/item/tank/internals/emergency_oxygen mask = /obj/item/clothing/mask/breath @@ -367,12 +325,4 @@ glasses = /obj/item/clothing/glasses/blindfold back = /obj/item/tank/internals/oxygen mask = /obj/item/clothing/mask/breath - if("Cultist") - uniform = /obj/item/clothing/under/costume/roman - suit = /obj/item/clothing/suit/hooded/cultrobes - suit_store = /obj/item/tome - r_pocket = /obj/item/restraints/legcuffs/bola/cult - l_pocket = /obj/item/melee/cultblade/dagger - glasses = /obj/item/clothing/glasses/hud/health/night/cultblind - backpack_contents = list(/obj/item/reagent_containers/glass/beaker/unholywater = 1, /obj/item/cult_shift = 1, /obj/item/flashlight/flare/culttorch = 1, /obj/item/stack/sheet/runed_metal = 15) . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm b/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm deleted file mode 100644 index 00d966ff2b..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm +++ /dev/null @@ -1,60 +0,0 @@ -/mob/living/simple_animal/hostile/nanotrasen - name = "Nanotrasen Private Security Officer" - desc = "" - icon = 'icons/mob/simple_human.dmi' - icon_state = "nanotrasen" - icon_living = "nanotrasen" - icon_dead = null - icon_gib = "syndicate_gib" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - speak_chance = 12 - turns_per_move = 5 - speed = 0 - stat_attack = UNCONSCIOUS - robust_searching = 1 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 10 - melee_damage_upper = 15 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/blank.ogg' - a_intent = INTENT_HARM - loot = list(/obj/effect/mob_spawn/human/corpse/nanotrasensoldier) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 15 - faction = list("nanotrasenprivate") - status_flags = CANPUSH - speak = list("Stop resisting!", "I AM THE LAW!", "Face the wrath of the golden bolt!", "Stop breaking the law, asshole!") - search_objects = 1 - - footstep_type = FOOTSTEP_MOB_SHOE - - -/mob/living/simple_animal/hostile/nanotrasen/Aggro() - ..() - summon_backup(15) - say("411 in progress, requesting backup!") - - -/mob/living/simple_animal/hostile/nanotrasen/ranged - icon_state = "nanotrasenranged" - icon_living = "nanotrasenranged" - ranged = 1 - retreat_distance = 3 - minimum_distance = 5 - casingtype = /obj/item/ammo_casing/c45 - projectilesound = 'sound/blank.ogg' - loot = list(/obj/item/gun/ballistic/automatic/pistol/m1911, - /obj/effect/mob_spawn/human/corpse/nanotrasensoldier) - - -/mob/living/simple_animal/hostile/nanotrasen/ranged/smg - icon_state = "nanotrasenrangedsmg" - icon_living = "nanotrasenrangedsmg" - rapid = 3 - casingtype = /obj/item/ammo_casing/c46x30mm - projectilesound = 'sound/blank.ogg' - loot = list(/obj/item/gun/ballistic/automatic/wt550, - /obj/effect/mob_spawn/human/corpse/nanotrasensoldier) diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm deleted file mode 100644 index fda7f9aab4..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ /dev/null @@ -1,92 +0,0 @@ -/mob/living/simple_animal/hostile/pirate - name = "Pirate" - desc = "" - icon = 'icons/mob/simple_human.dmi' - icon_state = "piratemelee" - icon_living = "piratemelee" - icon_dead = "pirate_dead" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - speak_chance = 0 - turns_per_move = 5 - response_help_continuous = "pushes" - response_help_simple = "push" - speed = 0 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 10 - melee_damage_upper = 10 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/blank.ogg' - a_intent = INTENT_HARM - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 15 - speak_emote = list("yarrs") - loot = list(/obj/effect/mob_spawn/human/corpse/pirate, - /obj/item/melee/transforming/energy/sword/pirate) - del_on_death = 1 - faction = list("pirate") - - -/mob/living/simple_animal/hostile/pirate/melee - name = "Pirate Swashbuckler" - icon_state = "piratemelee" - icon_living = "piratemelee" - icon_dead = "piratemelee_dead" - melee_damage_lower = 30 - melee_damage_upper = 30 - armor_penetration = 35 - attack_verb_continuous = "slashes" - attack_verb_simple = "slash" - attack_sound = 'sound/blank.ogg' - var/obj/effect/light_emitter/red_energy_sword/sord - - footstep_type = FOOTSTEP_MOB_SHOE - -/mob/living/simple_animal/hostile/pirate/melee/space - name = "Space Pirate Swashbuckler" - icon_state = "piratespace" - icon_living = "piratespace" - icon_dead = "piratespace_dead" - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - speed = 1 - spacewalk = TRUE - -/mob/living/simple_animal/hostile/pirate/melee/Initialize() - . = ..() - sord = new(src) - -/mob/living/simple_animal/hostile/pirate/melee/Destroy() - QDEL_NULL(sord) - return ..() - -/mob/living/simple_animal/hostile/pirate/melee/Initialize() - . = ..() - set_light(2) - -/mob/living/simple_animal/hostile/pirate/ranged - name = "Pirate Gunner" - icon_state = "pirateranged" - icon_living = "pirateranged" - icon_dead = "pirateranged_dead" - projectilesound = 'sound/blank.ogg' - ranged = 1 - rapid = 2 - rapid_fire_delay = 6 - retreat_distance = 5 - minimum_distance = 5 - projectiletype = /obj/projectile/beam/laser - loot = list(/obj/effect/mob_spawn/human/corpse/pirate/ranged, - /obj/item/gun/energy/laser) - -/mob/living/simple_animal/hostile/pirate/ranged/space - name = "Space Pirate Gunner" - icon_state = "piratespaceranged" - icon_living = "piratespaceranged" - icon_dead = "piratespaceranged_dead" - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - speed = 1 - spacewalk = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm index b64733e1a0..b14fb709c7 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm @@ -235,7 +235,7 @@ attack_verb_continuous = "ferociously mauls" attack_verb_simple = "ferociously maul" environment_smash = ENVIRONMENT_SMASH_NONE - loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/xeno/bodypartless, /obj/effect/particle_effect/foam, /obj/item/soap) + loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/particle_effect/foam, /obj/item/soap) attack_reagent = /datum/reagent/peaceborg/confuse /mob/living/simple_animal/hostile/retaliate/clown/clownhulk/destroyer @@ -285,7 +285,7 @@ melee_damage_upper = 20 attack_verb_continuous = "awkwardly flails at" attack_verb_simple = "awkwardly flail at" - loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/xeno/bodypartless, /obj/item/soap, /obj/effect/gibspawner/generic, /obj/effect/gibspawner/generic/animal, /obj/effect/gibspawner/human/bodypartless, /obj/effect/gibspawner/human) + loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/item/soap, /obj/effect/gibspawner/generic, /obj/effect/gibspawner/generic/animal, /obj/effect/gibspawner/human/bodypartless, /obj/effect/gibspawner/human) /mob/living/simple_animal/hostile/retaliate/clown/mutant/blob name = "Something that was once a clown" @@ -299,5 +299,5 @@ speed = 20 attack_verb_continuous = "bounces off of" attack_verb_simple = "bounce off of" - loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/xeno/bodypartless, /obj/effect/particle_effect/foam, /obj/item/soap, /obj/effect/gibspawner/generic, /obj/effect/gibspawner/generic/animal, /obj/effect/gibspawner/human/bodypartless, /obj/effect/gibspawner/human) + loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/particle_effect/foam, /obj/item/soap, /obj/effect/gibspawner/generic, /obj/effect/gibspawner/generic/animal, /obj/effect/gibspawner/human/bodypartless, /obj/effect/gibspawner/human) attack_reagent = /datum/reagent/toxin/mindbreaker diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm index 8259a1c960..315a9a56ac 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm @@ -42,7 +42,7 @@ /mob/living/simple_animal/hostile/retaliate/ghost/Initialize() . = ..() give_hair() - set_light(1, 2) // same glowing as visible player ghosts + set_light(1, 1, 2) // same glowing as visible player ghosts if(random) switch(rand(0,1)) if(0) @@ -100,7 +100,7 @@ /mob/living/simple_animal/hostile/retaliate/gaseousform/Initialize() . = ..() - set_light(1, 2) + set_light(1, 1, 2) addtimer(CALLBACK(src, TYPE_PROC_REF(/mob/living/simple_animal/hostile/retaliate/gaseousform, revert), "VAMPIRE LORD"), 10 SECONDS) /mob/living/simple_animal/hostile/retaliate/gaseousform/proc/revert() diff --git a/code/modules/mob/living/simple_animal/hostile/roguetown/crow.dm b/code/modules/mob/living/simple_animal/hostile/roguetown/crow.dm index 2b7b92fa6d..db2b3c23e9 100644 --- a/code/modules/mob/living/simple_animal/hostile/roguetown/crow.dm +++ b/code/modules/mob/living/simple_animal/hostile/roguetown/crow.dm @@ -17,6 +17,7 @@ rotprocess = null static_debris = list(/obj/item/natural/feather=1) fried_type = /obj/item/reagent_containers/food/snacks/rogue/friedcrow + cooked_smell = /datum/pollutant/food/fried_crow dust_result = /obj/item/alch/airdust /obj/item/reagent_containers/food/snacks/rogue/friedcrow diff --git a/code/modules/mob/living/simple_animal/hostile/roguetown/haunt.dm b/code/modules/mob/living/simple_animal/hostile/roguetown/haunt.dm index f4d6a9d06c..30081165dc 100644 --- a/code/modules/mob/living/simple_animal/hostile/roguetown/haunt.dm +++ b/code/modules/mob/living/simple_animal/hostile/roguetown/haunt.dm @@ -114,7 +114,7 @@ /obj/structure/bonepile/Initialize() . = ..() - soundloop = new(list(src), FALSE) + soundloop = new(src, FALSE) soundloop.start() // for(var/i in 1 to maxhaunts) spawn_haunt() @@ -169,7 +169,7 @@ /mob/living/simple_animal/hostile/rogue/haunt/Initialize() . = ..() - set_light(2, 2, "#c0523f") + set_light(2, 2, 2, l_color = "#c0523f") ADD_TRAIT(src, TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_GENERIC) ADD_TRAIT(src, TRAIT_NOPAINSTUN, TRAIT_GENERIC) diff --git a/code/modules/mob/living/simple_animal/hostile/roguetown/smallrat.dm b/code/modules/mob/living/simple_animal/hostile/roguetown/smallrat.dm index 1d21eb2438..b26ea9bb30 100644 --- a/code/modules/mob/living/simple_animal/hostile/roguetown/smallrat.dm +++ b/code/modules/mob/living/simple_animal/hostile/roguetown/smallrat.dm @@ -11,6 +11,7 @@ var/dead = FALSE eat_effect = /datum/status_effect/debuff/uncookedfood fried_type = /obj/item/reagent_containers/food/snacks/rogue/friedrat + cooked_smell = /datum/pollutant/food/fried_rat max_integrity = 10 sellprice = 0 rotprocess = null @@ -47,6 +48,7 @@ tastes = list("burnt flesh" = 1) eat_effect = null rotprocess = SHELFLIFE_SHORT + plateable = TRUE sellprice = 0 /obj/item/reagent_containers/food/snacks/smallrat/burning(input as num) diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm deleted file mode 100644 index fc494cf53f..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/russian.dm +++ /dev/null @@ -1,73 +0,0 @@ -/mob/living/simple_animal/hostile/russian - name = "Russian" - desc = "" - icon = 'icons/mob/simple_human.dmi' - icon_state = "russianmelee" - icon_living = "russianmelee" - icon_dead = "russianmelee_dead" - icon_gib = "syndicate_gib" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - speak_chance = 0 - turns_per_move = 5 - speed = 0 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 15 - melee_damage_upper = 15 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/blank.ogg' - a_intent = INTENT_HARM - loot = list(/obj/effect/mob_spawn/human/corpse/russian, - /obj/item/kitchen/knife) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 15 - faction = list("russian") - status_flags = CANPUSH - del_on_death = 1 - - footstep_type = FOOTSTEP_MOB_SHOE - - -/mob/living/simple_animal/hostile/russian/ranged - icon_state = "russianranged" - icon_living = "russianranged" - loot = list(/obj/effect/mob_spawn/human/corpse/russian/ranged, - /obj/item/gun/ballistic/revolver/nagant) - ranged = 1 - retreat_distance = 5 - minimum_distance = 5 - projectilesound = 'sound/blank.ogg' - casingtype = /obj/item/ammo_casing/n762 - - -/mob/living/simple_animal/hostile/russian/ranged/mosin - loot = list(/obj/effect/mob_spawn/human/corpse/russian/ranged, - /obj/item/gun/ballistic/rifle/boltaction) - casingtype = /obj/item/ammo_casing/a762 - -/mob/living/simple_animal/hostile/russian/ranged/trooper - icon_state = "russianrangedelite" - icon_living = "russianrangedelite" - maxHealth = 150 - health = 150 - casingtype = /obj/item/ammo_casing/shotgun/buckshot - loot = list(/obj/effect/mob_spawn/human/corpse/russian/ranged/trooper, - /obj/item/gun/ballistic/shotgun/lethal) - -/mob/living/simple_animal/hostile/russian/ranged/officer - name = "Russian Officer" - icon_state = "russianofficer" - icon_living = "russianofficer" - maxHealth = 65 - health = 65 - rapid = 3 - casingtype = /obj/item/ammo_casing/c9mm - loot = list(/obj/effect/mob_spawn/human/corpse/russian/ranged/officer, - /obj/item/gun/ballistic/automatic/pistol/APS) - -/mob/living/simple_animal/hostile/russian/ranged/officer/Aggro() - ..() - summon_backup(15) - say("V BOJ!!") diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm deleted file mode 100644 index 9ae48637a8..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm +++ /dev/null @@ -1,127 +0,0 @@ -/mob/living/simple_animal/hostile/skeleton - name = "skeleton" - desc = "" - icon = 'icons/mob/simple_human.dmi' - icon_state = "skeleton" - icon_living = "skeleton" - icon_dead = "skeleton" - gender = NEUTER - mob_biotypes = MOB_UNDEAD|MOB_HUMANOID - turns_per_move = 5 - speak_emote = list("rattles") - emote_see = list("rattles") - a_intent = INTENT_HARM - maxHealth = 40 - health = 40 - speed = 1 - harm_intent_damage = 5 - melee_damage_lower = 15 - melee_damage_upper = 15 - minbodytemp = 0 - maxbodytemp = 1500 - healable = 0 //they're skeletons how would bruise packs help them?? - attack_verb_continuous = "slashes" - attack_verb_simple = "slash" - attack_sound = 'sound/blank.ogg' - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 10 - robust_searching = 1 - stat_attack = UNCONSCIOUS - gold_core_spawnable = HOSTILE_SPAWN - faction = list("skeleton") - see_in_dark = 8 - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - deathmessage = "collapses into a pile of bones!" - del_on_death = 1 - loot = list(/obj/effect/decal/remains/human) - - footstep_type = FOOTSTEP_MOB_SHOE - -/mob/living/simple_animal/hostile/skeleton/eskimo - name = "undead eskimo" - desc = "" - icon_state = "eskimo" - icon_living = "eskimo" - icon_dead = "eskimo_dead" - maxHealth = 55 - health = 55 - weather_immunities = list("snow") - gold_core_spawnable = NO_SPAWN - melee_damage_lower = 17 - melee_damage_upper = 20 - deathmessage = "collapses into a pile of bones, its gear falling to the floor!" - loot = list(/obj/effect/decal/remains/human, - /obj/item/twohanded/spear, - /obj/item/clothing/shoes/winterboots, - /obj/item/clothing/suit/hooded/wintercoat) - - -/mob/living/simple_animal/hostile/skeleton/templar - name = "undead templar" - desc = "" - icon_state = "templar" - icon_living = "templar" - icon_dead = "templar_dead" - maxHealth = 150 - health = 150 - weather_immunities = list("snow") - speed = 2 - gold_core_spawnable = NO_SPAWN - speak_chance = 1 - speak = list("THE GODS WILL IT!","DEUS VULT!","REMOVE KABAB!") - force_threshold = 10 //trying to simulate actually having armor - obj_damage = 50 - melee_damage_lower = 25 - melee_damage_upper = 30 - deathmessage = "collapses into a pile of bones, its gear clanging as it hits the ground!" - loot = list(/obj/effect/decal/remains/human, - /obj/item/clothing/suit/armor/riot/chaplain, - /obj/item/clothing/head/helmet/chaplain, - /obj/item/claymore/weak{name = "holy sword"}) - -/mob/living/simple_animal/hostile/skeleton/ice - name = "ice skeleton" - desc = "" - speed = 5 - maxHealth = 75 - health = 75 - weather_immunities = list("snow") - color = rgb(114,228,250) - loot = list(/obj/effect/decal/remains/human{color = rgb(114,228,250)}) - -/mob/living/simple_animal/hostile/skeleton/plasmaminer - name = "shambling miner" - desc = "" - icon_state = "plasma_miner" - icon_living = "plasma_miner" - icon_dead = "plasma_miner" - maxHealth = 150 - health = 150 - harm_intent_damage = 10 - melee_damage_lower = 15 - melee_damage_upper = 20 - light_color = LIGHT_COLOR_PURPLE - attack_verb_continuous = "slashes" - attack_verb_simple = "slash" - attack_sound = 'sound/blank.ogg' - deathmessage = "collapses into a pile of bones, their suit dissolving among the plasma!" - loot = list(/obj/effect/decal/remains/plasma) - -/mob/living/simple_animal/hostile/skeleton/plasmaminer/jackhammer - desc = "" - icon_state = "plasma_miner_tool" - icon_living = "plasma_miner_tool" - icon_dead = "plasma_miner_tool" - maxHealth = 185 - health = 185 - harm_intent_damage = 15 - melee_damage_lower = 20 - melee_damage_upper = 25 - attack_verb_continuous = "blasts" - attack_verb_simple = "blast" - attack_sound = 'sound/blank.ogg' - loot = list(/obj/effect/decal/remains/plasma, /obj/item/pickaxe/drill/jackhammer) - -/mob/living/simple_animal/hostile/skeleton/plasmaminer/Initialize() - . = ..() - set_light(2) diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index c5c7e3b3c1..db19a7257f 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -61,7 +61,6 @@ /mob/living/simple_animal/hostile/statue/Initialize(mapload, mob/living/creator) . = ..() // Give spells - mob_spell_list += new /obj/effect/proc_holder/spell/aoe_turf/flicker_lights(src) mob_spell_list += new /obj/effect/proc_holder/spell/aoe_turf/blindness(src) mob_spell_list += new /obj/effect/proc_holder/spell/targeted/night_vision(src) @@ -131,10 +130,6 @@ if(M.client && CanAttack(M) && !M.has_unlimited_silicon_privilege) if(!M.eye_blind) return M - for(var/obj/mecha/M in view(world.view + 1, check)) //assuming if you can see them they can see you - if(M.occupant && M.occupant.client) - if(!M.occupant.eye_blind) - return M.occupant return null // Cannot talk @@ -165,20 +160,6 @@ // Statue powers -// Flicker lights -/obj/effect/proc_holder/spell/aoe_turf/flicker_lights - name = "Flicker Lights" - desc = "" - - charge_max = 300 - clothes_req = 0 - range = 14 - -/obj/effect/proc_holder/spell/aoe_turf/flicker_lights/cast(list/targets,mob/user = usr) - for(var/turf/T in targets) - for(var/obj/machinery/light/L in T) - L.flicker() - return //Blind AOE /obj/effect/proc_holder/spell/aoe_turf/blindness diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm deleted file mode 100644 index d0bb3b8182..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ /dev/null @@ -1,316 +0,0 @@ -/* - CONTENTS - LINE 10 - BASE MOB - LINE 52 - SWORD AND SHIELD - LINE 164 - GUNS - LINE 267 - MISC -*/ - - -///////////////Base mob//////////// -/obj/effect/light_emitter/red_energy_sword //used so there's a combination of both their head light and light coming off the energy sword - set_luminosity = 2 - set_cap = 2.5 - light_color = LIGHT_COLOR_RED - - -/mob/living/simple_animal/hostile/syndicate - name = "Syndicate Operative" - desc = "" - icon = 'icons/mob/simple_human.dmi' - icon_state = "syndicate" - icon_living = "syndicate" - icon_dead = "syndicate_dead" - icon_gib = "syndicate_gib" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - speak_chance = 0 - turns_per_move = 5 - speed = 0 - stat_attack = UNCONSCIOUS - robust_searching = 1 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 10 - melee_damage_upper = 10 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/blank.ogg' - a_intent = INTENT_HARM - loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 15 - faction = list(ROLE_SYNDICATE) - check_friendly_fire = 1 - status_flags = CANPUSH - del_on_death = 1 - dodging = TRUE - rapid_melee = 2 - footstep_type = FOOTSTEP_MOB_SHOE - -///////////////Melee//////////// - -/mob/living/simple_animal/hostile/syndicate/space - icon_state = "syndicate_space" - icon_living = "syndicate_space" - name = "Syndicate Commando" - maxHealth = 170 - health = 170 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - speed = 1 - spacewalk = TRUE - -/mob/living/simple_animal/hostile/syndicate/space/Initialize() - . = ..() - set_light(4) - -/mob/living/simple_animal/hostile/syndicate/space/stormtrooper - icon_state = "syndicate_stormtrooper" - icon_living = "syndicate_stormtrooper" - name = "Syndicate Stormtrooper" - maxHealth = 250 - health = 250 - -/mob/living/simple_animal/hostile/syndicate/melee //dude with a knife and no shields - melee_damage_lower = 15 - melee_damage_upper = 15 - icon_state = "syndicate_knife" - icon_living = "syndicate_knife" - loot = list(/obj/effect/gibspawner/human) - attack_verb_continuous = "slashes" - attack_verb_simple = "slash" - attack_sound = 'sound/blank.ogg' - status_flags = 0 - var/projectile_deflect_chance = 0 - -/mob/living/simple_animal/hostile/syndicate/melee/space - icon_state = "syndicate_space_knife" - icon_living = "syndicate_space_knife" - name = "Syndicate Commando" - maxHealth = 170 - health = 170 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - speed = 1 - spacewalk = TRUE - projectile_deflect_chance = 50 - -/mob/living/simple_animal/hostile/syndicate/melee/space/Initialize() - . = ..() - set_light(4) - -/mob/living/simple_animal/hostile/syndicate/melee/space/stormtrooper - icon_state = "syndicate_stormtrooper_knife" - icon_living = "syndicate_stormtrooper_knife" - name = "Syndicate Stormtrooper" - maxHealth = 250 - health = 250 - projectile_deflect_chance = 50 - -/mob/living/simple_animal/hostile/syndicate/melee/sword - melee_damage_lower = 30 - melee_damage_upper = 30 - icon_state = "syndicate_sword" - icon_living = "syndicate_sword" - attack_verb_continuous = "slashes" - attack_verb_simple = "slash" - attack_sound = 'sound/blank.ogg' - armor_penetration = 35 - light_color = LIGHT_COLOR_RED - status_flags = 0 - var/obj/effect/light_emitter/red_energy_sword/sord - projectile_deflect_chance = 50 - -/mob/living/simple_animal/hostile/syndicate/melee/sword/Initialize() - . = ..() - set_light(2) - -/mob/living/simple_animal/hostile/syndicate/melee/sword/Destroy() - QDEL_NULL(sord) - return ..() - -/mob/living/simple_animal/hostile/syndicate/melee/bullet_act(obj/projectile/Proj) - if(prob(projectile_deflect_chance)) - visible_message("[src] blocks [Proj] with its shield!") - return BULLET_ACT_BLOCK - return ..() - -/mob/living/simple_animal/hostile/syndicate/melee/sword/space - icon_state = "syndicate_space_sword" - icon_living = "syndicate_space_sword" - name = "Syndicate Commando" - maxHealth = 170 - health = 170 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - speed = 1 - spacewalk = TRUE - projectile_deflect_chance = 50 - -/mob/living/simple_animal/hostile/syndicate/melee/sword/space/Initialize() - . = ..() - sord = new(src) - set_light(4) - -/mob/living/simple_animal/hostile/syndicate/melee/sword/space/Destroy() - QDEL_NULL(sord) - return ..() - -/mob/living/simple_animal/hostile/syndicate/melee/sword/space/stormtrooper - icon_state = "syndicate_stormtrooper_sword" - icon_living = "syndicate_stormtrooper_sword" - name = "Syndicate Stormtrooper" - maxHealth = 250 - health = 250 - projectile_deflect_chance = 50 - -///////////////Guns//////////// - -/mob/living/simple_animal/hostile/syndicate/ranged - ranged = 1 - retreat_distance = 5 - minimum_distance = 5 - icon_state = "syndicate_pistol" - icon_living = "syndicate_pistol" - casingtype = /obj/item/ammo_casing/c10mm - projectilesound = 'sound/blank.ogg' - loot = list(/obj/effect/gibspawner/human) - dodging = FALSE - rapid_melee = 1 - -/mob/living/simple_animal/hostile/syndicate/ranged/infiltrator //shuttle loan event - projectilesound = 'sound/blank.ogg' - loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier) - -/mob/living/simple_animal/hostile/syndicate/ranged/space - icon_state = "syndicate_space_pistol" - icon_living = "syndicate_space_pistol" - name = "Syndicate Commando" - maxHealth = 170 - health = 170 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - speed = 1 - spacewalk = TRUE - -/mob/living/simple_animal/hostile/syndicate/ranged/space/Initialize() - . = ..() - set_light(4) - -/mob/living/simple_animal/hostile/syndicate/ranged/space/stormtrooper - icon_state = "syndicate_stormtrooper_pistol" - icon_living = "syndicate_stormtrooper_pistol" - name = "Syndicate Stormtrooper" - maxHealth = 250 - health = 250 - -/mob/living/simple_animal/hostile/syndicate/ranged/smg - rapid = 2 - icon_state = "syndicate_smg" - icon_living = "syndicate_smg" - casingtype = /obj/item/ammo_casing/c45 - projectilesound = 'sound/blank.ogg' - -/mob/living/simple_animal/hostile/syndicate/ranged/smg/pilot //caravan ambush ruin - name = "Syndicate Salvage Pilot" - loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier) - -/mob/living/simple_animal/hostile/syndicate/ranged/smg/space - icon_state = "syndicate_space_smg" - icon_living = "syndicate_space_smg" - name = "Syndicate Commando" - maxHealth = 170 - health = 170 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - speed = 1 - spacewalk = TRUE - -/mob/living/simple_animal/hostile/syndicate/ranged/smg/space/Initialize() - . = ..() - set_light(4) - -/mob/living/simple_animal/hostile/syndicate/ranged/smg/space/stormtrooper - icon_state = "syndicate_stormtrooper_smg" - icon_living = "syndicate_stormtrooper_smg" - name = "Syndicate Stormtrooper" - maxHealth = 250 - health = 250 - -/mob/living/simple_animal/hostile/syndicate/ranged/shotgun - rapid = 2 - rapid_fire_delay = 6 - minimum_distance = 3 - icon_state = "syndicate_shotgun" - icon_living = "syndicate_shotgun" - casingtype = /obj/item/ammo_casing/shotgun/buckshot //buckshot (up to 72.5 brute) fired in a two-round burst - -/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space - icon_state = "syndicate_space_shotgun" - icon_living = "syndicate_space_shotgun" - name = "Syndicate Commando" - maxHealth = 170 - health = 170 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - speed = 1 - spacewalk = TRUE - -/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space/Initialize() - . = ..() - set_light(4) - -/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space/stormtrooper - icon_state = "syndicate_stormtrooper_shotgun" - icon_living = "syndicate_stormtrooper_shotgun" - name = "Syndicate Stormtrooper" - maxHealth = 250 - health = 250 - -///////////////Misc//////////// - -/mob/living/simple_animal/hostile/syndicate/civilian - minimum_distance = 10 - retreat_distance = 10 - obj_damage = 0 - environment_smash = ENVIRONMENT_SMASH_NONE - -/mob/living/simple_animal/hostile/syndicate/civilian/Aggro() - ..() - summon_backup(15) - say("GUARDS!!") - - -/mob/living/simple_animal/hostile/viscerator - name = "viscerator" - desc = "" - icon_state = "viscerator_attack" - icon_living = "viscerator_attack" - pass_flags = PASSTABLE | PASSMOB - a_intent = INTENT_HARM - mob_biotypes = MOB_ROBOTIC - health = 25 - maxHealth = 25 - melee_damage_lower = 15 - melee_damage_upper = 15 - obj_damage = 0 - environment_smash = ENVIRONMENT_SMASH_NONE - attack_verb_continuous = "cuts" - attack_verb_simple = "cut" - attack_sound = 'sound/blank.ogg' - faction = list(ROLE_SYNDICATE) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - mob_size = MOB_SIZE_TINY - movement_type = FLYING - limb_destroyer = 1 - speak_emote = list("states") - bubble_icon = "syndibot" - gold_core_spawnable = HOSTILE_SPAWN - del_on_death = 1 - deathmessage = "is smashed into pieces!" - -/mob/living/simple_animal/hostile/viscerator/Initialize() - . = ..() - AddComponent(/datum/component/swarming) diff --git a/code/modules/mob/living/simple_animal/hostile/zombie.dm b/code/modules/mob/living/simple_animal/hostile/zombie.dm deleted file mode 100644 index 596e67a7b2..0000000000 --- a/code/modules/mob/living/simple_animal/hostile/zombie.dm +++ /dev/null @@ -1,59 +0,0 @@ -/mob/living/simple_animal/hostile/zombie - name = "Shambling Corpse" - desc = "" - icon = 'icons/mob/simple_human.dmi' - icon_state = "zombie" - icon_living = "zombie" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - speak_chance = 0 - stat_attack = UNCONSCIOUS //braains - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 21 - melee_damage_upper = 21 - attack_verb_continuous = "bites" - attack_verb_simple = "bite" - attack_sound = 'sound/blank.ogg' - a_intent = INTENT_HARM - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - spacewalk = FALSE - status_flags = CANPUSH - del_on_death = 1 - var/zombiejob = "Medical Doctor" - var/infection_chance = 0 - var/obj/effect/mob_spawn/human/corpse/delayed/corpse - -/mob/living/simple_animal/hostile/zombie/Initialize(mapload) - . = ..() - INVOKE_ASYNC(src, PROC_REF(setup_visuals)) - -/mob/living/simple_animal/hostile/zombie/proc/setup_visuals() - var/datum/preferences/dummy_prefs = new - dummy_prefs.pref_species = new /datum/species/zombie - dummy_prefs.randomise[RANDOM_BODY] = TRUE - var/datum/job/J = SSjob.GetJob(zombiejob) - var/datum/outfit/O - if(J.outfit) - O = new J.outfit - //They have claws now. - O.r_hand = null - O.l_hand = null - - var/icon/P = get_flat_human_icon("zombie_[zombiejob]", J , dummy_prefs, "zombie", outfit_override = O) - icon = P - corpse = new(src) - corpse.outfit = O - corpse.mob_species = /datum/species/zombie - corpse.mob_name = name - -/mob/living/simple_animal/hostile/zombie/AttackingTarget() - . = ..() - if(. && ishuman(target) && prob(infection_chance)) - try_to_zombie_infect(target) - -/mob/living/simple_animal/hostile/zombie/drop_loot() - . = ..() - corpse.forceMove(drop_location()) - corpse.create() diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 1566f46feb..14a23a6a01 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -81,9 +81,6 @@ var/speech_shuffle_rate = 20 var/list/available_channels = list() - //Headset for Poly to yell at engineers :) - var/obj/item/radio/headset/ears = null - //The thing the parrot is currently interested in. This gets used for items the parrot wants to pick up, mobs it wants to steal from, //mobs it wants to attack or mobs that have attacked it var/atom/movable/parrot_interest = null @@ -91,13 +88,7 @@ //Parrots will generally sit on their perch unless something catches their eye. //These vars store their preffered perch and if they dont have one, what they can use as a perch var/obj/parrot_perch = null - var/obj/desired_perches = list(/obj/structure/frame/computer, /obj/structure/displaycase, \ - /obj/structure/filingcabinet, /obj/machinery/teleport, \ - /obj/machinery/computer, /obj/machinery/clonepod, \ - /obj/machinery/dna_scannernew, /obj/machinery/telecomms, \ - /obj/machinery/nuclearbomb, /obj/machinery/particle_accelerator, \ - /obj/machinery/recharge_station, /obj/machinery/smartfridge, \ - /obj/machinery/suit_storage_unit) + var/obj/desired_perches = list(/obj/structure/displaycase) //Parrots are kleptomaniacs. This variable ... stores the item a parrot is holding. var/obj/item/held_item = null @@ -105,13 +96,6 @@ /mob/living/simple_animal/parrot/Initialize() . = ..() - if(!ears) - var/headset = pick(/obj/item/radio/headset/headset_sec, \ - /obj/item/radio/headset/headset_eng, \ - /obj/item/radio/headset/headset_med, \ - /obj/item/radio/headset/headset_sci, \ - /obj/item/radio/headset/headset_cargo) - ears = new headset(src) parrot_sleep_dur = parrot_sleep_max //In case someone decides to change the max without changing the duration var @@ -158,29 +142,6 @@ if(speaker == src && !client) //If a parrot squawks in the woods and no one is around to hear it, does it make a sound? This code says yes! return message -/mob/living/simple_animal/parrot/radio(message, message_mode, list/spans, language) //literally copied from human/radio(), but there's no other way to do this. at least it's better than it used to be. - . = ..() - if(. != 0) - return . - - switch(message_mode) - if(MODE_HEADSET) - if (ears) - ears.talk_into(src, message, , spans, language) - return ITALICS | REDUCE_RANGE - - if(MODE_DEPARTMENT) - if (ears) - ears.talk_into(src, message, message_mode, spans, language) - return ITALICS | REDUCE_RANGE - - if(message_mode in GLOB.radiochannels) - if(ears) - ears.talk_into(src, message, message_mode, spans, language) - return ITALICS | REDUCE_RANGE - - return 0 - /* * Inventory */ @@ -188,81 +149,16 @@ user.set_machine(src) var/dat = "
    Inventory of [name]

    " - dat += "
    Headset: [ears]" : "add_inv=ears'>Nothing"]" user << browse(dat, "window=mob[REF(src)];size=325x500") onclose(user, "window=mob[REF(src)]") /mob/living/simple_animal/parrot/Topic(href, href_list) - if(!(iscarbon(usr) || iscyborg(usr)) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + if(!(iscarbon(usr) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))) usr << browse(null, "window=mob[REF(src)]") usr.unset_machine() return - - //Removing from inventory - if(href_list["remove_inv"]) - var/remove_from = href_list["remove_inv"] - switch(remove_from) - if("ears") - if(!ears) - to_chat(usr, "There is nothing to remove from its [remove_from]!") - return - if(!stat) - say("[available_channels.len ? "[pick(available_channels)] " : null]BAWWWWWK LEAVE THE HEADSET BAWKKKKK!") - ears.forceMove(drop_location()) - ears = null - for(var/possible_phrase in speak) - if(copytext(possible_phrase,1,3) in GLOB.department_radio_keys) - possible_phrase = copytext(possible_phrase,3) - - //Adding things to inventory - else if(href_list["add_inv"]) - var/add_to = href_list["add_inv"] - if(!usr.get_active_held_item()) - to_chat(usr, "I have nothing in your hand to put on its [add_to]!") - return - switch(add_to) - if("ears") - if(ears) - to_chat(usr, "It's already wearing something!") - return - else - var/obj/item/item_to_add = usr.get_active_held_item() - if(!item_to_add) - return - - if( !istype(item_to_add, /obj/item/radio/headset) ) - to_chat(usr, "This object won't fit!") - return - - var/obj/item/radio/headset/headset_to_add = item_to_add - - if(!usr.transferItemToLoc(headset_to_add, src)) - return - ears = headset_to_add - to_chat(usr, "I fit the headset onto [src].") - - clearlist(available_channels) - for(var/ch in headset_to_add.channels) - switch(ch) - if(RADIO_CHANNEL_ENGINEERING) - available_channels.Add(RADIO_TOKEN_ENGINEERING) - if(RADIO_CHANNEL_COMMAND) - available_channels.Add(RADIO_TOKEN_COMMAND) - if(RADIO_CHANNEL_SECURITY) - available_channels.Add(RADIO_TOKEN_SECURITY) - if(RADIO_CHANNEL_SCIENCE) - available_channels.Add(RADIO_TOKEN_SCIENCE) - if(RADIO_CHANNEL_MEDICAL) - available_channels.Add(RADIO_TOKEN_MEDICAL) - if(RADIO_CHANNEL_SUPPLY) - available_channels.Add(RADIO_TOKEN_SUPPLY) - if(RADIO_CHANNEL_SERVICE) - available_channels.Add(RADIO_TOKEN_SERVICE) - - if(headset_to_add.translate_binary) - available_channels.Add(MODE_TOKEN_BINARY) else return ..() @@ -297,9 +193,6 @@ /mob/living/simple_animal/parrot/attack_paw(mob/living/carbon/monkey/M) return attack_hand(M) -/mob/living/simple_animal/parrot/attack_alien(mob/living/carbon/alien/M) - return attack_hand(M) - //Simple animals /mob/living/simple_animal/parrot/attack_animal(mob/living/simple_animal/M) . = ..() //goodbye immortal parrots @@ -414,26 +307,10 @@ if(speak.len) var/list/newspeak = list() - if(available_channels.len && src.ears) - for(var/possible_phrase in speak) - - //50/50 chance to not use the radio at all - var/useradio = 0 - if(prob(50)) - useradio = 1 - - if((copytext(possible_phrase,1,2) in GLOB.department_radio_prefixes) && (copytext(possible_phrase,2,3) in GLOB.department_radio_keys)) - possible_phrase = "[useradio?pick(available_channels):""][copytext(possible_phrase,3)]" //crop out the channel prefix - else - possible_phrase = "[useradio?pick(available_channels):""][possible_phrase]" - - newspeak.Add(possible_phrase) - - else //If we have no headset or channels to use, dont try to use any! - for(var/possible_phrase in speak) - if((copytext(possible_phrase,1,2) in GLOB.department_radio_prefixes) && (copytext(possible_phrase,2,3) in GLOB.department_radio_keys)) - possible_phrase = copytext(possible_phrase,3) //crop out the channel prefix - newspeak.Add(possible_phrase) + for(var/possible_phrase in speak) + if((copytext(possible_phrase,1,2) in GLOB.department_radio_prefixes) && (copytext(possible_phrase,2,3) in GLOB.department_radio_keys)) + possible_phrase = copytext(possible_phrase,3) //crop out the channel prefix + newspeak.Add(possible_phrase) speak = newspeak //Search for item to steal @@ -880,7 +757,6 @@ var/longest_deathstreak = 0 /mob/living/simple_animal/parrot/Poly/Initialize() - ears = new /obj/item/radio/headset/headset_eng(src) available_channels = list(":e") Read_Memory() if(rounds_survived == longest_survival) diff --git a/code/modules/mob/living/simple_animal/rogue/creacher/_corpses.dm b/code/modules/mob/living/simple_animal/rogue/creacher/_corpses.dm new file mode 100644 index 0000000000..a389029183 --- /dev/null +++ b/code/modules/mob/living/simple_animal/rogue/creacher/_corpses.dm @@ -0,0 +1,110 @@ +/obj/effect/mob_spawn/human/orc/corpse + icon = 'icons/effects/blood.dmi' + icon_state = "remains" + color = "#aa9b00" + mob_type = /mob/living/carbon/human/species/orc + +/obj/effect/mob_spawn/human/orc/corpse/savageorc + mob_name = "Savage Orc" + name = "Savage Orc" + skin_tone = "#50715C" + hairstyle = "Bald" + facial_hairstyle = "Shaved" + outfit = /datum/outfit/savageorc + +/obj/effect/mob_spawn/human/orc/corpse/savageorc2 + mob_name = "Savage Orc" + name = "Savage Orc" + skin_tone = "#50715C" + hairstyle = "Bald" + facial_hairstyle = "Shaved" + outfit = /datum/outfit/savageorc2 + +/datum/outfit/savageorc +// shirt = /obj/item/clothing/suit/roguetown/shirt/tribalrag Vanderlin clothing + pants = /obj/item/clothing/under/roguetown/loincloth/brown + shoes = /obj/item/clothing/shoes/roguetown/boots/furlinedanklets + +/datum/outfit/savageorc2 +// shirt = /obj/item/clothing/suit/roguetown/shirt/tribalrag + pants = /obj/item/clothing/under/roguetown/loincloth/brown + shoes = /obj/item/clothing/shoes/roguetown/boots/furlinedanklets + head = /obj/item/clothing/head/roguetown/helmet/leather + +/obj/effect/mob_spawn/human/orc/corpse/orcmarauder + mob_name = "Orc Marauder" + name = "Orc Marauder" + skin_tone = "#50715C" + hairstyle = "Bald" + facial_hairstyle = "Shaved" +// outfit = /datum/outfit/orcmarauder doesnt actually equip this TO DO + mob_type = /mob/living/carbon/human/species/orc/marauder +/* +/datum/outfit/orcmarauder + armor = /obj/item/clothing/suit/roguetown/armor/chainmail + pants = /obj/item/clothing/under/roguetown/chainlegs + shoes = /obj/item/clothing/shoes/roguetown/boots/furlinedboots + head = /obj/item/clothing/head/roguetown/helmet/leather +*/ +/obj/effect/mob_spawn/human/orc/corpse/orcravager + mob_name = "Orc Ravager" + name = "Orc Ravager" + skin_tone = "#50715C" + hairstyle = "Bald" + facial_hairstyle = "Shaved" + outfit = /datum/outfit/orcravager + +/datum/outfit/orcravager + armor = /obj/item/clothing/suit/roguetown/armor/chainmail + pants = /obj/item/clothing/under/roguetown/chainlegs + shoes = /obj/item/clothing/shoes/roguetown/boots/armor + head = /obj/item/clothing/head/roguetown/helmet/skullcap + gloves = /obj/item/clothing/gloves/roguetown/chain + neck = /obj/item/clothing/neck/roguetown/chaincoif +/// mask = /obj/item/clothing/mask/rogue/skullmask Vanderlin clothing TO DO review it + +/obj/effect/mob_spawn/human/orc/corpse/dwarfinvasion + color = "#82aa00" + mob_type = /mob/living/carbon/human/species/orc/dwarfinvasion + +/mob/living/carbon/human/species/orc/dwarfinvasion/after_creation() + ..() + equipOutfit(new /datum/outfit/job/roguetown/npc/orc/dead_invader) + +/datum/outfit/job/roguetown/npc/orc/dead_invader/pre_equip(mob/living/carbon/human/H) + ..() + var/loadout = rand(1,5) + switch(loadout) + if(1) + armor = /obj/item/clothing/suit/roguetown/armor/leather/hide/orc + if(2) + armor = /obj/item/clothing/suit/roguetown/armor/leather/hide/orc + cloak = /obj/item/clothing/cloak/raincloak/brown + if(3) + cloak = /obj/item/clothing/cloak/raincloak/brown + if(4) + armor = /obj/item/clothing/suit/roguetown/armor/leather/hide/orc + cloak = /obj/item/clothing/cloak/raincloak/brown + if(5) + armor = /obj/item/clothing/suit/roguetown/armor/leather/hide/orc + cloak = /obj/item/clothing/cloak/raincloak/brown + +/* .................. Dwarf Underdweller Corpse ................... */ +/obj/effect/mob_spawn/human/corpse/damaged/underdweller + icon = 'icons/effects/blood.dmi' + icon_state = "remains" + color = "#aa9b00" + mob_type = /mob/living/carbon/human/species/dwarf/mountain + mob_name = "Dwarf Underdweller" + name = "Dwarf Underdweller" + hairstyle = "Miner" + facial_hairstyle = "Pick" + outfit = /datum/outfit/deadunderdweller + +/datum/outfit/deadunderdweller + armor = /obj/item/clothing/suit/roguetown/armor/cuirass/iron + shirt = /obj/item/clothing/suit/roguetown/shirt/undershirt/sailor/red + pants = /obj/item/clothing/under/roguetown/trou/leather + shoes = /obj/item/clothing/shoes/roguetown/simpleshoes/buckle + backl = /obj/item/storage/backpack/rogue/backpack + head = /obj/item/clothing/head/roguetown/helmet/leather/minershelm diff --git a/code/modules/mob/living/simple_animal/rogue/creacher/bigrat.dm b/code/modules/mob/living/simple_animal/rogue/creacher/bigrat.dm index 9874a7a97b..e24e2a001c 100644 --- a/code/modules/mob/living/simple_animal/rogue/creacher/bigrat.dm +++ b/code/modules/mob/living/simple_animal/rogue/creacher/bigrat.dm @@ -18,10 +18,10 @@ botched_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/mince = 1) butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/mince = 1, - /obj/item/natural/fur/rous = 1) + /obj/item/natural/fur/rous = 1, /obj/item/alch/bone = 2) perfect_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1, /obj/item/alch/sinew = 1, - /obj/item/natural/fur/rous = 1) + /obj/item/natural/fur/rous = 1, /obj/item/alch/bone = 4) health = ROUS_HEALTH maxHealth = ROUS_HEALTH @@ -29,7 +29,7 @@ /obj/item/bodypart, /obj/item/organ) - base_intents = list(/datum/intent/simple/bite) + base_intents = list(/datum/intent/simple/critterbite) attack_sound = 'sound/combat/wooshes/punch/punchwoosh (2).ogg' melee_damage_lower = 12 melee_damage_upper = 14 @@ -50,6 +50,10 @@ remains_type = /obj/effect/decal/remains/bigrat body_eater = TRUE + AIStatus = AI_OFF + can_have_ai = FALSE + ai_controller = /datum/ai_controller/big_rat + /obj/effect/decal/remains/bigrat name = "remains" gender = PLURAL @@ -60,6 +64,7 @@ /mob/living/simple_animal/hostile/retaliate/rogue/bigrat/Initialize() . = ..() + gender = MALE if(prob(33)) gender = FEMALE @@ -69,10 +74,17 @@ icon_dead = "Frat1" update_icon() + AddElement(/datum/element/ai_flee_while_injured, 0.75, retreat_health) + ai_controller.set_blackboard_key(BB_BASIC_FOODS, food_type) + /mob/living/simple_animal/hostile/retaliate/rogue/bigrat/death(gibbed) ..() update_icon() +/mob/living/simple_animal/hostile/retaliate/rogue/bigrat/find_food() + . = ..() + if(!.) + return eat_bodies() /mob/living/simple_animal/hostile/retaliate/rogue/bigrat/update_icon() cut_overlays() diff --git a/code/modules/mob/living/simple_animal/rogue/creacher/bogbug.dm b/code/modules/mob/living/simple_animal/rogue/creacher/bogbug.dm index 5f4abd1e1c..1da5d8da31 100644 --- a/code/modules/mob/living/simple_animal/rogue/creacher/bogbug.dm +++ b/code/modules/mob/living/simple_animal/rogue/creacher/bogbug.dm @@ -16,7 +16,7 @@ aggro_vision_range = 9 botched_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/spider= 1) - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/rawcutlet/xeno = 1, + butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/spider= 1, /obj/item/natural/hide = 1) perfect_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/spider = 2, /obj/item/natural/hide = 2) @@ -52,6 +52,10 @@ remains_type = /obj/effect/decal/remains/bogbug body_eater = TRUE + ai_controller = /datum/ai_controller/bog_bug + AIStatus = AI_OFF + can_have_ai = FALSE + /obj/effect/decal/remains/bogbug name = "remains" gender = PLURAL @@ -61,6 +65,7 @@ /mob/living/simple_animal/hostile/retaliate/rogue/bogbug/Initialize() . = ..() gender = MALE + ai_controller.set_blackboard_key(BB_BASIC_FOODS, food_type) /mob/living/simple_animal/hostile/retaliate/rogue/bogbug/death(gibbed) ..() diff --git a/code/modules/mob/living/simple_animal/rogue/creacher/familiar.dm b/code/modules/mob/living/simple_animal/rogue/creacher/familiar.dm new file mode 100644 index 0000000000..877b970e67 --- /dev/null +++ b/code/modules/mob/living/simple_animal/rogue/creacher/familiar.dm @@ -0,0 +1,50 @@ +//VANDERLIN TODO: Make taming AI better to allow for tame commands. +/mob/living/simple_animal/hostile/retaliate/rogue/wolf/familiar + icon = 'icons/roguetown/mob/monster/vol.dmi' + name = "familiar" + icon_state = "spiritw" + icon_living = "spiritw" + icon_dead = null + base_intents = list(/datum/intent/simple/bite) + faction = list("summoned") + mob_biotypes = MOB_BEAST + health = 120 + maxHealth = 120 + melee_damage_lower = 10 + melee_damage_upper = 20 + food_type = list(/obj/item/reagent_containers/food/snacks/rogue/meat, /obj/item/bodypart, /obj/item/organ) + footstep_type = FOOTSTEP_MOB_BAREFOOT + pooptype = null + deaggroprob = 0 + defprob = 40 + defdrain = 10 + retreat_health = 0.1 + attack_sound = list('sound/vo/mobs/vw/attack (1).ogg','sound/vo/mobs/vw/attack (2).ogg','sound/vo/mobs/vw/attack (3).ogg','sound/vo/mobs/vw/attack (4).ogg') + dodgetime = 30 + aggressive = 1 + remains_type = null + var/summoner = null + var/timeleft = 30 SECONDS + +/mob/living/simple_animal/hostile/retaliate/rogue/wolf/familiar/Initialize(mapload, mob/user) + . = ..() + if(timeleft) + QDEL_IN(src, timeleft) //delete after it runs out, see code/modules/mob/living/simple_animal/rogue/creacher/familiar.dm for timeleft var + summoner = user + faction += "[REF(summoner)]" //this makes them care about the summoner + +/mob/living/simple_animal/hostile/retaliate/rogue/wolf/familiar/PickTarget(list/Targets)//Step 3, pick amongst the possible, attackable targets + if(target != null)//If we already have a target, but are told to pick again, calculate the lowest distance between all possible, and pick from the lowest distance targets + for(var/pos_targ in Targets) + var/atom/A = pos_targ + var/target_dist = get_dist(targets_from, target) + var/possible_target_distance = get_dist(targets_from, A) + if(target_dist < possible_target_distance) + Targets -= A + for(var/pos_targ in Targets)//Excludes summoner from target + if(pos_targ == src.summoner) + Targets -= src.summoner + if(!Targets.len)//We didnt find nothin! + return + var/chosen_target = pick(Targets)//Pick the remaining targets (if any) at random + return chosen_target diff --git a/code/modules/mob/living/simple_animal/rogue/creacher/headless.dm b/code/modules/mob/living/simple_animal/rogue/creacher/headless.dm index d66eadef4c..f5e8e942fe 100644 --- a/code/modules/mob/living/simple_animal/rogue/creacher/headless.dm +++ b/code/modules/mob/living/simple_animal/rogue/creacher/headless.dm @@ -40,10 +40,15 @@ del_on_deaggro = 999 SECONDS retreat_health = 0.1 food = 0 - dodgetime = 15 + dodgetime = 4 SECONDS aggressive = 1 remains_type = null body_eater = TRUE + + ai_controller = /datum/ai_controller/headless + AIStatus = AI_OFF + can_have_ai = FALSE + var/mob/living/swallowed_mob var/health_at_swallow = 1000 var/stomach_burn_cooldown = 0 @@ -51,6 +56,10 @@ var/swallow_cooldown = 0 var/swallow_cooldown_delay = 30 SECONDS +/mob/living/simple_animal/hostile/retaliate/rogue/headless/Initialize() + . = ..() + AddElement(/datum/element/ai_flee_while_injured, 0.75, retreat_health) + /mob/living/simple_animal/hostile/retaliate/rogue/headless/AttackingTarget() //If its a carbon, your cooldown is up, and your above 30% health you can eat them if(iscarbon(target)) diff --git a/code/modules/mob/living/simple_animal/rogue/creacher/honeyspider.dm b/code/modules/mob/living/simple_animal/rogue/creacher/honeyspider.dm index c17d311e95..2a8cda8430 100644 --- a/code/modules/mob/living/simple_animal/rogue/creacher/honeyspider.dm +++ b/code/modules/mob/living/simple_animal/rogue/creacher/honeyspider.dm @@ -48,6 +48,10 @@ stat_attack = UNCONSCIOUS body_eater = TRUE + ai_controller = /datum/ai_controller/spider + AIStatus = AI_OFF + can_have_ai = FALSE + /mob/living/simple_animal/hostile/retaliate/rogue/spider/mutated icon = 'icons/roguetown/mob/monster/spider.dmi' name = "skallax spider" @@ -67,6 +71,9 @@ gender = FEMALE update_icon() + AddElement(/datum/element/ai_flee_while_injured, 0.75, retreat_health) + ai_controller.set_blackboard_key(BB_BASIC_FOODS, food_type) + /mob/living/simple_animal/hostile/retaliate/rogue/spider/AttackingTarget() . = ..() if(. && isliving(target)) @@ -74,6 +81,11 @@ if(L.reagents) L.reagents.add_reagent(/datum/reagent/toxin/venom, 1) +/mob/living/simple_animal/hostile/retaliate/rogue/spider/find_food() + . = ..() + if(!.) + return eat_bodies() + /mob/living/simple_animal/hostile/retaliate/rogue/spider/death(gibbed) ..() update_icon() diff --git a/code/modules/mob/living/simple_animal/rogue/creacher/lamia.dm b/code/modules/mob/living/simple_animal/rogue/creacher/lamia.dm index 2c90212894..1a2d757405 100644 --- a/code/modules/mob/living/simple_animal/rogue/creacher/lamia.dm +++ b/code/modules/mob/living/simple_animal/rogue/creacher/lamia.dm @@ -11,7 +11,7 @@ speak_chance = 1 see_in_dark = 9 move_to_delay = 2 - base_intents = list(/datum/intent/simple/bite, /datum/intent/simple/claw) + base_intents = list(/datum/intent/simple/claw_quick, /datum/intent/simple/bite) butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1, /obj/item/reagent_containers/food/snacks/fat = 1, /obj/item/alch/sinew = 2, @@ -20,8 +20,8 @@ mob_biotypes = MOB_ORGANIC|MOB_BEAST|MOB_REPTILE health = 200 maxHealth = 200 - melee_damage_lower = 35 - melee_damage_upper = 50 + melee_damage_lower = 25 + melee_damage_upper = 35 vision_range = 9 aggro_vision_range = 9 environment_smash = ENVIRONMENT_SMASH_NONE @@ -39,7 +39,7 @@ del_on_deaggro = 999 SECONDS retreat_health = 0.1 food = 0 - dodgetime = 15 + dodgetime = 2 SECONDS aggressive = 1 remains_type = null body_eater = TRUE diff --git a/code/modules/mob/living/simple_animal/rogue/creacher/mimic.dm b/code/modules/mob/living/simple_animal/rogue/creacher/mimic.dm new file mode 100644 index 0000000000..539901a73b --- /dev/null +++ b/code/modules/mob/living/simple_animal/rogue/creacher/mimic.dm @@ -0,0 +1,144 @@ +//Mimic mob but updated. +/mob/living/simple_animal/hostile/retaliate/rogue/mimic + name = "chest" + icon = 'icons/roguetown/mob/monster/mimic.dmi' + icon_state = "mimicopen" + icon_living = "mimicopen" + icon_dead = "mimicdead" + + speed = 0 + maxHealth = 450 + health = 450 + gender = NEUTER + mob_biotypes = NONE + base_intents = list(/datum/intent/simple/bite) + butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 2) + retreat_distance = 0 + minimum_distance = 0 + aggro_vision_range = 2 + see_in_dark = 6 + + damage_coeff = list(BRUTE = 1, BURN = 0, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) + harm_intent_damage = 5 + melee_damage_lower = 24 + melee_damage_upper = 32 + attack_verb_continuous = "bites" + attack_verb_simple = "bite" + attack_sound = list('sound/vo/mobs/mimic/mimic_attack1.ogg', + 'sound/vo/mobs/mimic/mimic_attack2.ogg', + 'sound/vo/mobs/mimic/mimic_attack3.ogg') + emote_taunt = list("howls") + speak_emote = list("clatters") + + faction = list("mimic", "hostile") + stop_automated_movement = 1 + wander = 0 + stat_attack = UNCONSCIOUS + + food_type = list(/obj/item/reagent_containers/food/snacks/rogue/meat, /obj/item/bodypart, /obj/item/organ) + food = 0 + pooptype = null + + STACON = 15 + STASTR = 15 + STASPD = 5 + + ai_controller = /datum/ai_controller/mimic + AIStatus = AI_OFF + can_have_ai = FALSE + +/mob/living/simple_animal/hostile/retaliate/rogue/mimic/Initialize(mapload) + . = ..() + if(mapload)//load objects into chest. + for(var/obj/item/I in loc) + I.forceMove(src) + icon_state = "mimic" + AddComponent(/datum/component/anti_magic, TRUE, TRUE, TRUE, null, null, FALSE) + +/mob/living/simple_animal/hostile/retaliate/rogue/mimic/find_food() + . = ..() + if(!.) + return eat_bodies() + +/mob/living/simple_animal/hostile/retaliate/rogue/mimic/Life() + ..() + if(pulledby) + Retaliate() + GiveTarget(pulledby) + +/mob/living/simple_animal/hostile/retaliate/rogue/mimic/attack_hand(mob/user) + ..() + Retaliate(user) + GiveTarget(user) + +/mob/living/simple_animal/hostile/retaliate/rogue/mimic/Aggro() + ..() + name = "MIMIC" + icon_state = "[initial(icon_state)]" + aggressive = 1 + +/mob/living/simple_animal/hostile/retaliate/rogue/mimic/death() + icon_state = "[initial(icon_state)]dead" + // Drop loot onto tile. + for(var/obj/O in src) + O.forceMove(loc) + QDEL_NULL(proximity_monitor) + ..() + +/mob/living/simple_animal/hostile/retaliate/rogue/mimic/get_sound(input) + switch(input) + if("death") + return pick('sound/vo/mobs/mimic/mimic_death.ogg') + +/mob/living/simple_animal/hostile/retaliate/rogue/mimic/simple_limb_hit(zone) + if(!zone) + return "" + switch(zone) + if(BODY_ZONE_PRECISE_R_EYE) + return "head" + if(BODY_ZONE_PRECISE_L_EYE) + return "head" + if(BODY_ZONE_PRECISE_NOSE) + return "nose" + if(BODY_ZONE_PRECISE_MOUTH) + return "mouth" + if(BODY_ZONE_PRECISE_SKULL) + return "head" + if(BODY_ZONE_PRECISE_EARS) + return "head" + if(BODY_ZONE_PRECISE_NECK) + return "neck" + if(BODY_ZONE_PRECISE_L_HAND) + return "foreleg" + if(BODY_ZONE_PRECISE_R_HAND) + return "foreleg" + if(BODY_ZONE_PRECISE_L_FOOT) + return "leg" + if(BODY_ZONE_PRECISE_R_FOOT) + return "leg" + if(BODY_ZONE_PRECISE_STOMACH) + return "stomach" + if(BODY_ZONE_PRECISE_GROIN) + return "tail" + if(BODY_ZONE_HEAD) + return "head" + if(BODY_ZONE_R_LEG) + return "leg" + if(BODY_ZONE_L_LEG) + return "leg" + if(BODY_ZONE_R_ARM) + return "foreleg" + if(BODY_ZONE_L_ARM) + return "foreleg" + return ..() + +////// +// Landmark +////// + +/obj/effect/landmark/chest_or_mimic/Initialize() + ..() + var/C = pick(/obj/structure/closet/crate/chest, + /mob/living/simple_animal/hostile/retaliate/rogue/mimic) + new C(loc) + return INITIALIZE_HINT_QDEL diff --git a/code/modules/mob/living/simple_animal/rogue/creacher/minotaur.dm b/code/modules/mob/living/simple_animal/rogue/creacher/minotaur.dm new file mode 100644 index 0000000000..04621c4925 --- /dev/null +++ b/code/modules/mob/living/simple_animal/rogue/creacher/minotaur.dm @@ -0,0 +1,164 @@ +/mob/living/simple_animal/hostile/retaliate/rogue/minotaur + icon = 'icons/roguetown/mob/monster/newminotaur.dmi' + name = "Minotaur" + icon_state = "MinotaurMale" + icon_living = "MinotaurMale" + icon_dead = "MinotaurMale_dead" + gender = MALE + emote_hear = null + emote_see = null + speak_chance = 1 + turns_per_move = 2 + see_in_dark = 10 + move_to_delay = 3 + base_intents = list(/datum/intent/simple/minotaur_unarmed) + butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 10, + /obj/item/natural/hide = 10) + faction = list("caves") + mob_biotypes = MOB_ORGANIC|MOB_BEAST + health = 500 + maxHealth = 600 + melee_damage_lower = 55 + melee_damage_upper = 80 + vision_range = 3 + aggro_vision_range = 8 + environment_smash = ENVIRONMENT_SMASH_STRUCTURES + obj_damage = 1 + retreat_distance = 0 + minimum_distance = 0 + food_type = list(/obj/item/reagent_containers/food/snacks/rogue/meat, /obj/item/bodypart, /obj/item/organ) + footstep_type = FOOTSTEP_MOB_HEAVY + pooptype = null + STACON = 19 + STASTR = 16 + STASPD = 5 + deaggroprob = 0 + defprob = 40 + defdrain = 10 + retreat_health = 0 + food = 0 + attack_sound = list('sound/combat/wooshes/blunt/wooshhuge (1).ogg','sound/combat/wooshes/blunt/wooshhuge (2).ogg','sound/combat/wooshes/blunt/wooshhuge (3).ogg') + dodgetime = 0 + aggressive = 1 +// stat_attack = UNCONSCIOUS + remains_type = /obj/item/rogueweapon/axe/battle + + ai_controller = /datum/ai_controller/minotaur + can_have_ai = FALSE + AIStatus = AI_OFF + +/mob/living/simple_animal/hostile/retaliate/rogue/minotaur/female + icon_state = "MinotaurFem" + icon_living = "MinotaurFem" + icon_dead = "MinotaurFem_dead" + +/mob/living/simple_animal/hostile/retaliate/rogue/minotaur/axe + icon_state = "MinotaurMale_Axe" + icon_living = "MinotaurMale_Axe" + icon_dead = "MinotaurMale_dead" + base_intents = list(/datum/intent/simple/minotaur_axe) + melee_damage_lower = 65 + melee_damage_upper = 85 + +/mob/living/simple_animal/hostile/retaliate/rogue/minotaur/axe/female + icon_state = "MinotaurFem_Axe" + icon_living = "MinotaurFem_Axe" + icon_dead = "MinotaurFem_dead" + +/mob/living/simple_animal/hostile/retaliate/rogue/minotaur/death(gibbed) + ..() + update_icon() + +/mob/living/simple_animal/hostile/retaliate/rogue/minotaur/taunted(mob/user) + emote("aggro") + Retaliate() + GiveTarget(user) + return + +/mob/living/simple_animal/hostile/retaliate/rogue/minotaur/Life() + ..() + if(pulledby) + Retaliate() + GiveTarget(pulledby) + +/mob/living/simple_animal/hostile/retaliate/rogue/minotaur/get_sound(input) + switch(input) + if("aggro") + return pick('sound/vo/mobs/minotaur/minoroar.ogg','sound/vo/mobs/minotaur/minoroar2.ogg','sound/vo/mobs/minotaur/minoroar3.ogg','sound/vo/mobs/minotaur/minoroar4.ogg') + if("pain") + return pick('sound/vo/mobs/minotaur/minopain.ogg', 'sound/vo/mobs/minotaur/minopain2.ogg') + if("death") + return pick('sound/vo/mobs/minotaur/minodie.ogg', 'sound/vo/mobs/minotaur/minodie2.ogg') + if("idle") + return pick('sound/vo/mobs/minotaur/minoidle.ogg', 'sound/vo/mobs/minotaur/minoidle2.ogg') + + +/mob/living/simple_animal/hostile/retaliate/rogue/minotaur/simple_limb_hit(zone) + if(!zone) + return "" + switch(zone) + if(BODY_ZONE_PRECISE_R_EYE) + return "head" + if(BODY_ZONE_PRECISE_L_EYE) + return "head" + if(BODY_ZONE_PRECISE_NOSE) + return "nose" + if(BODY_ZONE_PRECISE_MOUTH) + return "mouth" + if(BODY_ZONE_PRECISE_SKULL) + return "head" + if(BODY_ZONE_PRECISE_EARS) + return "head" + if(BODY_ZONE_PRECISE_NECK) + return "neck" + if(BODY_ZONE_PRECISE_L_HAND) + return "foreleg" + if(BODY_ZONE_PRECISE_R_HAND) + return "foreleg" + if(BODY_ZONE_PRECISE_L_FOOT) + return "leg" + if(BODY_ZONE_PRECISE_R_FOOT) + return "leg" + if(BODY_ZONE_PRECISE_STOMACH) + return "stomach" + if(BODY_ZONE_PRECISE_GROIN) + return "tail" + if(BODY_ZONE_HEAD) + return "head" + if(BODY_ZONE_R_LEG) + return "leg" + if(BODY_ZONE_L_LEG) + return "leg" + if(BODY_ZONE_R_ARM) + return "foreleg" + if(BODY_ZONE_L_ARM) + return "foreleg" + return ..() + +/datum/intent/simple/minotaur_unarmed + name = "minotaur unarmed" + icon_state = "instrike" + attack_verb = list("punches", "strikes", "kicks", "steps on", "crushes", "bites") + animname = "blank22" + blade_class = BCLASS_CUT + hitsound = "smallslash" + chargetime = 0 + penfactor = 5 + swingdelay = 3 + candodge = TRUE + canparry = TRUE +// item_damage_type = "stab" + +/datum/intent/simple/minotaur_axe + name = "minotaur axe" + icon_state = "instrike" + attack_verb = list("hacks at", "slashes", "chops", "steps on", "crushes", "bites") + animname = "blank22" + blade_class = BCLASS_CUT + hitsound = "genchop" + chargetime = 20 + penfactor = 10 + swingdelay = 3 + candodge = TRUE + canparry = TRUE +// item_damage_type = "stab" diff --git a/code/modules/mob/living/simple_animal/rogue/creacher/mole.dm b/code/modules/mob/living/simple_animal/rogue/creacher/mole.dm index 6130f23462..ccc17e16c1 100644 --- a/code/modules/mob/living/simple_animal/rogue/creacher/mole.dm +++ b/code/modules/mob/living/simple_animal/rogue/creacher/mole.dm @@ -36,7 +36,7 @@ /obj/item/bodypart, /obj/item/organ) - base_intents = list(/datum/intent/simple/claw) + base_intents = list(/datum/intent/simple/claw_strong) attack_sound = list('sound/vo/mobs/saiga/attack (1).ogg','sound/vo/mobs/saiga/attack (2).ogg') melee_damage_lower = 20 melee_damage_upper = 40 @@ -55,23 +55,16 @@ retreat_health = 0.4 food = 0 - dodgetime = 20 + dodgetime = 2.5 SECONDS aggressive = TRUE // stat_attack = UNCONSCIOUS remains_type = /obj/effect/decal/remains/mole body_eater = TRUE -/* -/mob/living/simple_animal/hostile/retaliate/rogue/mole/greater - name = "Greater Brown Mole" - desc = "Holy Moley" - health = 400 - maxHealth = 400 - butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 4, - /obj/item/natural/hide = 3, - /obj/item/natural/fur/mole = 2) - melee_damage_lower = 50 - melee_damage_upper = 60 -*/ + + ai_controller = /datum/ai_controller/mole + AIStatus = AI_OFF + can_have_ai = FALSE + /obj/effect/decal/remains/mole name = "remains" gender = PLURAL @@ -84,6 +77,7 @@ if(prob(33)) gender = FEMALE update_icon() + AddElement(/datum/element/ai_flee_while_injured, 0.75, retreat_health) /mob/living/simple_animal/hostile/retaliate/rogue/mole/death(gibbed) ..() @@ -114,6 +108,11 @@ Retaliate() GiveTarget(pulledby) +/mob/living/simple_animal/hostile/retaliate/rogue/mole/find_food() + . = ..() + if(!.) + return eat_bodies() + /mob/living/simple_animal/hostile/retaliate/rogue/mole/simple_limb_hit(zone) if(!zone) return "" diff --git a/code/modules/mob/living/simple_animal/rogue/creacher/orcs.dm b/code/modules/mob/living/simple_animal/rogue/creacher/orcs.dm new file mode 100644 index 0000000000..0aa7d34c97 --- /dev/null +++ b/code/modules/mob/living/simple_animal/rogue/creacher/orcs.dm @@ -0,0 +1,216 @@ +/mob/living/simple_animal/hostile/rogue/orc + name = "Savage Orc" + desc = "" + icon = 'icons/roguetown/mob/monster/simple_orcs.dmi' + icon_state = "savageorc" + icon_living = "savageorc" + icon_dead = "savageorc_dead" + gender = MALE + mob_biotypes = MOB_ORGANIC|MOB_HUMANOID + robust_searching = 1 + speak_chance = 5 + turns_per_move = 1 + move_to_delay = 1 + STACON = 9 + STASTR = 14 + STASPD = 13 + maxHealth = 200 + health = 200 + harm_intent_damage = 15 + melee_damage_lower = 25 + melee_damage_upper = 30 + vision_range = 7 + aggro_vision_range = 9 + retreat_distance = 0 + minimum_distance = 0 + limb_destroyer = 1 + base_intents = list(/datum/intent/simple/axe) + attack_verb_continuous = "hacks" + attack_verb_simple = "hack" + attack_sound = 'sound/blank.ogg' + canparry = TRUE + d_intent = INTENT_PARRY + speak_emote = list("grunts") + speak = list("WAAAGH!", "KRUSH AND KILL!", "Never should have come here!", "Slaughter them all!", "Kill everything!", "Hahaha! Die!") + loot = list(/obj/effect/mob_spawn/human/orc/corpse/savageorc, + /obj/item/rogueweapon/axe/stone, + /obj/effect/decal/cleanable/blood) + faction = list("orcs") + footstep_type = FOOTSTEP_MOB_BAREFOOT + del_on_death = TRUE + + can_have_ai = FALSE //disable native ai + AIStatus = AI_OFF + ai_controller = /datum/ai_controller/orc + + +/mob/living/simple_animal/hostile/rogue/orc/orc2 + icon_state = "savageorc2" + icon_living = "savageorc2" + icon_dead = "savageorc2" + loot = list(/obj/effect/mob_spawn/human/orc/corpse/savageorc2, + /obj/item/rogueweapon/axe/stone, + /obj/effect/decal/cleanable/blood) + +/mob/living/simple_animal/hostile/rogue/orc/orc_marauder + name = "Orc Marauder" + icon_state = "orcmarauder" + icon_living = "orcmarauder" + icon_dead = "orcmarauder" + melee_damage_lower = 30 + melee_damage_upper = 35 + armor_penetration = 35 + maxHealth = 200 + health = 200 + loot = list(/obj/effect/mob_spawn/human/orc/corpse/orcmarauder, + /obj/item/rogueweapon/sword/scimitar/messer, + /obj/effect/decal/cleanable/blood) + +/mob/living/simple_animal/hostile/rogue/orc/orc_marauder/spear + icon_state = "orcmarauder_spear" + icon_living = "orcmarauder_spear" + icon_dead = "orcmarauder_spear" + base_intents = list(/datum/intent/simple/spear) + loot = list(/obj/effect/mob_spawn/human/orc/corpse/orcmarauder, + /obj/item/rogueweapon/polearm/spear, + /obj/effect/decal/cleanable/blood) + +/mob/living/simple_animal/hostile/rogue/orc/orc_marauder/ravager + icon_state = "orcravager" + icon_living = "orcravager" + icon_dead = "orcravager" + melee_damage_lower = 40 + melee_damage_upper = 50 + armor_penetration = 40 + maxHealth = 500 + health = 500 + loot = list(/obj/effect/mob_spawn/human/orc/corpse/orcravager, + /obj/item/rogueweapon/polearm/halberd/bardiche, + /obj/effect/decal/cleanable/blood) + +/mob/living/simple_animal/hostile/rogue/orc/spear + icon_state = "savageorc_spear" + icon_living = "savageorc_spear" + icon_dead = "savageorc_spear" + base_intents = list(/datum/intent/simple/spear) + melee_damage_lower = 30 + melee_damage_upper = 30 + armor_penetration = 35 + attack_verb_continuous = list("stabs", "slashes", "skewers") + attack_verb_simple = "stab" + attack_sound = 'sound/blank.ogg' + loot = list(/obj/effect/mob_spawn/human/orc/corpse/savageorc, + /obj/item/rogueweapon/polearm/spear/stone, + /obj/effect/decal/cleanable/blood) + footstep_type = FOOTSTEP_MOB_BAREFOOT + +/mob/living/simple_animal/hostile/rogue/orc/spear2 + icon_state = "savageorc_spear2" + icon_living = "savageorc_spear2" + icon_dead = "savageorc_spear2" + loot = list(/obj/effect/mob_spawn/human/orc/corpse/savageorc2, + /obj/item/rogueweapon/polearm/spear/stone, + /obj/effect/decal/cleanable/blood) + +/mob/living/simple_animal/hostile/rogue/orc/get_sound(input) + switch(input) + if("aggro") + return pick('sound/vo/mobs/simple_orcs/orc_yell.ogg','sound/vo/mobs/simple_orcs/orc_yell2.ogg','sound/vo/mobs/simple_orcs/orc_yell3.ogg', 'sound/vo/mobs/simple_orcs/orc_yell4.ogg') + if("pain") + return pick('sound/vo/mobs/simple_orcs/orc_pain.ogg','sound/vo/mobs/simple_orcs/orc_pain2.ogg','sound/vo/mobs/simple_orcs/orc_pain3.ogg', 'sound/vo/mobs/simple_orcs/orc_pain4.ogg') + if("death") + return pick('sound/vo/mobs/simple_orcs/orc_death.ogg','sound/vo/mobs/simple_orcs/orc_death2.ogg','sound/vo/mobs/simple_orcs/orc_death3.ogg','sound/vo/mobs/simple_orcs/orc_death4.ogg','sound/vo/mobs/simple_orcs/orc_death5.ogg', + 'sound/vo/mobs/simple_orcs/orc_death6.ogg') + if("idle") + return pick('sound/vo/mobs/simple_orcs/orc_idle.ogg','sound/vo/mobs/simple_orcs/orc_idle2.ogg','sound/vo/mobs/simple_orcs/orc_idle3.ogg','sound/vo/mobs/simple_orcs/orc_idle4.ogg') + +/mob/living/simple_animal/hostile/rogue/orc/Life() + . = ..() + if(!target) + if(prob(3)) + emote(pick("idle"), TRUE) + +/mob/living/simple_animal/hostile/rogue/orc/taunted(mob/user) + emote("aggro") + GiveTarget(user) + return + +/mob/living/simple_animal/hostile/rogue/orc/simple_limb_hit(zone) + if(!zone) + return "" + switch(zone) + if(BODY_ZONE_PRECISE_R_EYE) + return "head" + if(BODY_ZONE_PRECISE_L_EYE) + return "head" + if(BODY_ZONE_PRECISE_NOSE) + return "nose" + if(BODY_ZONE_PRECISE_MOUTH) + return "mouth" + if(BODY_ZONE_PRECISE_SKULL) + return "head" + if(BODY_ZONE_PRECISE_EARS) + return "head" + if(BODY_ZONE_PRECISE_NECK) + return "neck" + if(BODY_ZONE_PRECISE_L_HAND) + return "foreleg" + if(BODY_ZONE_PRECISE_R_HAND) + return "foreleg" + if(BODY_ZONE_PRECISE_L_FOOT) + return "leg" + if(BODY_ZONE_PRECISE_R_FOOT) + return "leg" + if(BODY_ZONE_PRECISE_STOMACH) + return "stomach" + if(BODY_ZONE_PRECISE_GROIN) + return "tail" + if(BODY_ZONE_HEAD) + return "head" + if(BODY_ZONE_R_LEG) + return "leg" + if(BODY_ZONE_L_LEG) + return "leg" + if(BODY_ZONE_R_ARM) + return "foreleg" + if(BODY_ZONE_L_ARM) + return "foreleg" + return ..() + +/obj/projectile/bullet/reusable/arrow/orc + damage = 20 + damage_type = BRUTE + armor_penetration = 40 + icon = 'icons/roguetown/weapons/ammo.dmi' + icon_state = "arrow_proj" + ammo_type = /obj/item/ammo_casing/caseless/rogue/arrow + range = 15 + hitsound = 'sound/combat/hits/hi_arrow2.ogg' + embedchance = 100 + woundclass = BCLASS_STAB + flag = "piercing" + speed = 0.2 + +/mob/living/simple_animal/hostile/rogue/orc/ranged + name = "savage orc archer" + desc = "" + icon_state = "orcbow" + icon_living = "orcbow" + icon_dead = "orcbow" + projectiletype = /obj/projectile/bullet/reusable/arrow/orc + projectilesound = 'sound/combat/Ranged/flatbow-shot-01.ogg' + ranged = 1 + retreat_distance = 2 + minimum_distance = 5 + ranged_cooldown_time = 60 + check_friendly_fire = 1 + loot = list(/obj/effect/mob_spawn/human/orc/corpse/savageorc2, + /obj/item/gun/ballistic/revolver/grenadelauncher/bow, + /obj/item/ammo_casing/caseless/rogue/arrow = 3, + /obj/effect/decal/cleanable/blood) + maxHealth = 100 + health = 100 + + can_have_ai = FALSE //disable native ai + AIStatus = AI_OFF + ai_controller = /datum/ai_controller/orc_ranged diff --git a/code/modules/mob/living/simple_animal/rogue/creacher/poltergeist.dm b/code/modules/mob/living/simple_animal/rogue/creacher/poltergeist.dm new file mode 100644 index 0000000000..ecd1d90b76 --- /dev/null +++ b/code/modules/mob/living/simple_animal/rogue/creacher/poltergeist.dm @@ -0,0 +1,95 @@ +///////// +// Copy of the mob I did on Stalker 13, more-or-less. Same function here. Refluffed and changed slightly. - Carl +///////// +/mob/living/simple_animal/hostile/retaliate/rogue/poltergeist + name = "poltergeist" +//Newer sprite unused until we can get resize to properly work 100% of the time. +//Maybe it does and I'm braindead, but I 'unno. + icon = 'icons/roguetown/mob/monster/poltergeist.dmi' + icon_state = "polter_initial" + icon_living = "polter0" + icon_dead = "polter_initial" +//End of sprite rant. + gender = PLURAL + emote_hear = null + emote_see = null + speak_chance = 1 + turns_per_move = 2 + see_in_dark = 6 + move_to_delay = 5 + base_intents = list(/datum/intent/simple/claw) + faction = list("poltergeist") + mob_biotypes = MOB_UNDEAD + health = 80//Low health because it's impossible to be hit as is. Use Churn Undead to get rid of a haunting. + maxHealth = 80 + melee_damage_lower = 5 + melee_damage_upper = 10 + vision_range = 7 + aggro_vision_range = 9 + environment_smash = ENVIRONMENT_SMASH_STRUCTURES + retreat_distance = 6 + minimum_distance = 4 + STACON = 5 + STASTR = 5 + STASPD = 20 + deaggroprob = 0 + defprob = 95 + defdrain = 10 + dodgetime = 30 + aggressive = 1 +//Can't hit most of the time with thrown objects against prone mobs, so it's commented out. Maybe return later. +// stat_attack = UNCONSCIOUS + var/timer = 0 + var/flick_timer = 0 + +/mob/living/simple_animal/hostile/retaliate/rogue/poltergeist/Initialize() + . = ..() + icon_state = "polter0" + icon_living = icon_state + timer = rand(1,5) + flick_timer = rand(1,15) + +/mob/living/simple_animal/hostile/retaliate/rogue/poltergeist/Life() + ..() + timer-- + flick_timer-- + if(timer == 0) + polter() + timer = rand(1,5) + if(flick_timer == 0) + flick("polter1", src) + flick_timer = rand(1,15) + +/mob/living/simple_animal/hostile/retaliate/rogue/poltergeist/proc/polter() + if(stat != DEAD) + for(var/mob/living/carbon/human/H in view(15, src)) + var/most_violent = -1 + var/obj/item/throwing + for(var/obj/item/I in view(15, get_turf(H))) + if(I.anchored) + continue + if(I.throwforce > most_violent) + most_violent = I.throwforce + throwing = I + if(throwing) + playsound(src, pick('sound/vo/mobs/poltergeist/polter_damage0.ogg', + 'sound/vo/mobs/poltergeist/polter_damage1.ogg', + 'sound/vo/mobs/poltergeist/polter_damage2.ogg')) + throwing.throw_at(H, 8, 2) + +/mob/living/simple_animal/hostile/retaliate/rogue/poltergeist/death() + ..() + gib() + +/mob/living/simple_animal/hostile/retaliate/rogue/poltergeist/get_sound(input) + switch(input) + if("aggro") + return pick('sound/vo/mobs/poltergeist/polter_damage0.ogg','sound/vo/mobs/poltergeist/polter_damage1.ogg','sound/vo/mobs/poltergeist/polter_damage2.ogg') + if("pain") + return pick('sound/vo/mobs/poltergeist/polter_damage0.ogg','sound/vo/mobs/poltergeist/polter_damage1.ogg','sound/vo/mobs/poltergeist/polter_damage2.ogg') + if("death") + return pick('sound/vo/mobs/poltergeist/polter_damage0.ogg','sound/vo/mobs/poltergeist/polter_damage1.ogg','sound/vo/mobs/poltergeist/polter_damage2.ogg') + if("idle") + return pick('sound/vo/mobs/poltergeist/polter_idle.ogg') + if("cidle") + return pick('sound/vo/mobs/poltergeist/polter_idle.ogg') diff --git a/code/modules/mob/living/simple_animal/rogue/creacher/skeleton.dm b/code/modules/mob/living/simple_animal/rogue/creacher/skeleton.dm new file mode 100644 index 0000000000..fc7dd08c51 --- /dev/null +++ b/code/modules/mob/living/simple_animal/rogue/creacher/skeleton.dm @@ -0,0 +1,185 @@ +/mob/living/simple_animal/hostile/rogue/skeleton + name = "Skeleton" + desc = "" + icon = 'icons/roguetown/mob/monster/skeletons.dmi' + icon_state = "skeleton" + icon_living = "skeleton" + icon_dead = "skeleton_dead" + gender = MALE + mob_biotypes = MOB_ORGANIC|MOB_HUMANOID + robust_searching = 1 + turns_per_move = 1 + move_to_delay = 3 + STACON = 9 + STASTR = 9 + STASPD = 8 + maxHealth = 100 + health = 100 + harm_intent_damage = 10 + melee_damage_lower = 10 + melee_damage_upper = 25 + vision_range = 7 + aggro_vision_range = 9 + retreat_distance = 0 + minimum_distance = 0 + limb_destroyer = 1 + base_intents = list(/datum/intent/simple/claw/skeleton_unarmed) + attack_verb_continuous = "hacks" + attack_verb_simple = "hack" + attack_sound = 'sound/blank.ogg' + canparry = TRUE + d_intent = INTENT_PARRY + defprob = 50 + defdrain = 20 + speak_emote = list("grunts") + loot = list(/obj/item/alch/bone, /obj/item/alch/bone, /obj/item/alch/bone, /obj/item/skull) + faction = list("undead") + footstep_type = FOOTSTEP_MOB_BAREFOOT + del_on_death = TRUE + +/mob/living/simple_animal/hostile/rogue/skeleton/axe + name = "Skeleton" + desc = "" + icon = 'icons/roguetown/mob/monster/skeletons.dmi' + base_intents = list(/datum/intent/simple/axe) + icon_state = "skeleton_axe" + icon_living = "skeleton_axe" + icon_dead = "" + loot = list(/obj/item/alch/bone, /obj/item/alch/bone, /obj/item/alch/bone, /obj/item/rogueweapon/polearm/halberd/bardiche/woodcutter, /obj/item/skull) + + + +/mob/living/simple_animal/hostile/rogue/skeleton/spear + name = "Skeleton" + desc = "" + icon = 'icons/roguetown/mob/monster/skeletons.dmi' + base_intents = list(/datum/intent/simple/spear) + icon_state = "skeleton_spear" + icon_living = "skeleton_spear" + icon_dead = "" + attack_sound = 'sound/foley/pierce.ogg' + loot = list(/obj/item/alch/bone, /obj/item/alch/bone, /obj/item/alch/bone, /obj/item/rogueweapon/polearm/spear, /obj/item/skull) + +/mob/living/simple_animal/hostile/rogue/skeleton/guard + name = "Skeleton" + desc = "" + icon = 'icons/roguetown/mob/monster/skeletons.dmi' + base_intents = list(/datum/intent/simple/axe) + icon_state = "skeleton_guard" + icon_living = "skeleton_guard" + icon_dead = "" + loot = list(/obj/item/alch/bone, /obj/item/alch/bone, /obj/item/alch/bone, /obj/item/rogueweapon/sword/iron, /obj/item/skull) + maxHealth = 200 + health = 200 + +/mob/living/simple_animal/hostile/rogue/skeleton/bow + name = "Skeleton" + desc = "" + icon = 'icons/roguetown/mob/monster/skeletons.dmi' + icon_state = "skeleton_bow" + icon_living = "skeleton_bow" + icon_dead = "" + projectiletype = /obj/projectile/bullet/reusable/arrow/ancient + projectilesound = 'sound/combat/Ranged/flatbow-shot-01.ogg' + ranged = 1 + retreat_distance = 2 + minimum_distance = 5 + ranged_cooldown_time = 60 + check_friendly_fire = 1 + loot = list( + /obj/item/alch/bone, + /obj/item/alch/bone, + /obj/item/alch/bone, + /obj/item/skull, + /obj/item/gun/ballistic/revolver/grenadelauncher/bow, + /obj/item/ammo_casing/caseless/rogue/arrow, + /obj/item/ammo_casing/caseless/rogue/arrow, + /obj/item/ammo_casing/caseless/rogue/arrow + ) + +/mob/living/simple_animal/hostile/rogue/skeleton/get_sound(input) + switch(input) + if("aggro") + return pick('sound/vo/mobs/skel/skeleton_rage (1).ogg','sound/vo/mobs/skel/skeleton_rage (2).ogg','sound/vo/mobs/skel/skeleton_rage (3).ogg') + if("pain") + return pick('sound/vo/mobs/skel/skeleton_pain (1).ogg','sound/vo/mobs/skel/skeleton_pain (2).ogg','sound/vo/mobs/skel/skeleton_pain (3).ogg', 'sound/vo/mobs/skel/skeleton_pain (4).ogg', 'sound/vo/mobs/skel/skeleton_pain (5).ogg') + if("death") + return pick('sound/vo/mobs/skel/skeleton_death (1).ogg','sound/vo/mobs/skel/skeleton_death (2).ogg','sound/vo/mobs/skel/skeleton_death (3).ogg','sound/vo/mobs/skel/skeleton_death (4).ogg','sound/vo/mobs/skel/skeleton_death (5).ogg') + if("idle") + return pick('sound/vo/mobs/skel/skeleton_idle (1).ogg','sound/vo/mobs/skel/skeleton_idle (2).ogg','sound/vo/mobs/skel/skeleton_idle (3).ogg') + + +/mob/living/simple_animal/hostile/rogue/skeleton/Initialize(mapload, mob/user, cabal_affine = FALSE) + . = ..() + if(user) + friends += user.name + if (cabal_affine) + faction |= "cabal" + +/mob/living/simple_animal/hostile/rogue/skeleton/Life() + . = ..() + if(!target) + if(prob(60)) + emote(pick("idle"), TRUE) + +/mob/living/simple_animal/hostile/rogue/skeleton/taunted(mob/user) + emote("aggro") + GiveTarget(user) + return + +/mob/living/simple_animal/hostile/rogue/skeleton/proc/can_control(mob/user) +// if(!(user.mind?.has_antag_datum(/datum/antagonist/lich))) commented out since lich not yet in TO DO +// return FALSE + if (!(user.name in friends)) + return FALSE + + return TRUE + +/mob/living/simple_animal/hostile/rogue/skeleton/beckoned(mob/user) + if (can_control(user)) + for(var/mob/living/simple_animal/hostile/rogue/skeleton/target in viewers(user)) + target.LoseTarget() + target.search_objects = 2 + target.add_overlay("peace_overlay") + return + +/mob/living/simple_animal/hostile/rogue/skeleton/shood(mob/user) + if (can_control(user)) + for(var/mob/living/simple_animal/hostile/rogue/skeleton/target in viewers(user)) + target.RegainSearchObjects() + return + +/mob/living/simple_animal/hostile/rogue/skeleton/RegainSearchObjects(value) + cut_overlay("peace_overlay") + . = ..() + + +/datum/intent/simple/claw/skeleton_unarmed + attack_verb = list("claws", "strikes", "punches") + blade_class = BCLASS_CHOP + animname = "cut" + hitsound = list('sound/combat/hits/bladed/genchop (1).ogg', 'sound/combat/hits/bladed/genchop (2).ogg', 'sound/combat/hits/bladed/genchop (3).ogg') + chargetime = 2 + penfactor = 5 + swingdelay = 8 + +/obj/item/skull + name = "skull" + desc = "A skull" + icon = 'icons/roguetown/mob/monster/skeletons.dmi' + icon_state = "skull" + w_class = WEIGHT_CLASS_SMALL + +/obj/projectile/bullet/reusable/arrow/ancient + damage = 10 + damage_type = BRUTE + armor_penetration = 25 + icon = 'icons/roguetown/weapons/ammo.dmi' + icon_state = "arrow_proj" + ammo_type = /obj/item/ammo_casing/caseless/rogue/arrow + range = 15 + hitsound = 'sound/combat/hits/hi_arrow2.ogg' + embedchance = 100 + woundclass = BCLASS_STAB + flag = "piercing" + speed = 2 diff --git a/code/modules/mob/living/simple_animal/rogue/creacher/troll.dm b/code/modules/mob/living/simple_animal/rogue/creacher/troll.dm index 614156b0c4..c78c61203a 100644 --- a/code/modules/mob/living/simple_animal/rogue/creacher/troll.dm +++ b/code/modules/mob/living/simple_animal/rogue/creacher/troll.dm @@ -5,6 +5,7 @@ icon_state = "Troll2" icon_living = "Troll2" icon_dead = "Troll2d" + pixel_x = -16 faction = list("orcs") footstep_type = FOOTSTEP_MOB_HEAVY @@ -32,20 +33,20 @@ health = TROLL_HEALTH maxHealth = TROLL_HEALTH - food_type = list(/obj/item/reagent_containers/food/snacks/rogue/meat, + food_type = list( /obj/item/bodypart, /obj/item/organ) - base_intents = list(/datum/intent/unarmed/wwolf, /datum/intent/simple/bigbite) + base_intents = list(/datum/intent/simple/trollrip, /datum/intent/simple/trollsmash) attack_sound = list('sound/combat/wooshes/blunt/wooshhuge (1).ogg','sound/combat/wooshes/blunt/wooshhuge (2).ogg','sound/combat/wooshes/blunt/wooshhuge (3).ogg') melee_damage_lower = 40 melee_damage_upper = 60 environment_smash = ENVIRONMENT_SMASH_STRUCTURES - STACON = 15 + STACON = 16 STASTR = 16 STASPD = 2 - STAEND = 16 + STAEND = 17 retreat_distance = 0 minimum_distance = 0 @@ -61,6 +62,11 @@ // stat_attack = UNCONSCIOUS remains_type = /obj/effect/decal/remains/troll body_eater = TRUE + + ai_controller = /datum/ai_controller/troll + AIStatus = AI_OFF + can_have_ai = FALSE + var/critvuln = FALSE /mob/living/simple_animal/hostile/retaliate/rogue/troll/Initialize() @@ -174,10 +180,10 @@ melee_damage_upper = 40 footstep_type = FOOTSTEP_MOB_BAREFOOT botched_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1) - butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1, + butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1, /obj/item/alch/sinew = 1, /obj/item/alch/bone = 1) - perfect_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1, + perfect_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1, /obj/item/alch/sinew = 2, /obj/item/alch/bone = 1, /obj/item/natural/fur/cabbit = 1) diff --git a/code/modules/mob/living/simple_animal/rogue/creacher/trollbog.dm b/code/modules/mob/living/simple_animal/rogue/creacher/trollbog.dm index 11d7eb5a79..177fa37ecb 100644 --- a/code/modules/mob/living/simple_animal/rogue/creacher/trollbog.dm +++ b/code/modules/mob/living/simple_animal/rogue/creacher/trollbog.dm @@ -1,10 +1,11 @@ /mob/living/simple_animal/hostile/retaliate/rogue/trollbog icon = 'icons/roguetown/mob/monster/trolls.dmi' name = "bog troll" - desc = "Elven legends say these monsters were servants of Dendor tasked to guard his realm; nowadays they are sometimes found in the company of orcs." - icon_state = "Troll" + desc = "Elven legends say these monsters were servants of Dendor tasked to guard his realm." + icon_state = "Trolls" icon_living = "Troll" icon_dead = "Trolld" + pixel_x = -16 faction = list("orcs") footstep_type = FOOTSTEP_MOB_HEAVY @@ -15,6 +16,7 @@ verb_exclaim = "roars" verb_yell = "roars" + wander = FALSE // bog trolls are ambush predators turns_per_move = 4 see_in_dark = 10 move_to_delay = 7 @@ -22,11 +24,14 @@ aggro_vision_range = 6 botched_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/spider = 1, - /obj/item/natural/hide = 1) + /obj/item/natural/hide = 1, + /obj/item/natural/trollheart = 1) butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/spider = 1, - /obj/item/natural/hide = 2) + /obj/item/natural/hide = 3, + /obj/item/natural/trollheart = 1) perfect_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/spider = 2, - /obj/item/natural/hide = 3) + /obj/item/natural/hide = 4, + /obj/item/natural/trollheart = 1) health = BOGTROLL_HEALTH maxHealth = BOGTROLL_HEALTH @@ -34,16 +39,16 @@ /obj/item/bodypart, /obj/item/organ) - base_intents = list(/datum/intent/simple/headbutt, /datum/intent/simple/bigbite) + base_intents = list(/datum/intent/simple/trollsmash, /datum/intent/simple/trollrip) attack_sound = list('sound/combat/wooshes/blunt/wooshhuge (1).ogg','sound/combat/wooshes/blunt/wooshhuge (2).ogg','sound/combat/wooshes/blunt/wooshhuge (3).ogg') melee_damage_lower = 30 melee_damage_upper = 50 environment_smash = ENVIRONMENT_SMASH_STRUCTURES - STACON = 15 + STACON = 16 STASTR = 16 STASPD = 3 - STAEND = 14 + STAEND = 15 retreat_distance = 0 minimum_distance = 0 @@ -55,11 +60,16 @@ food_max = 250 food = 0 - dodgetime = 15 + dodgetime = 5 SECONDS aggressive = TRUE // stat_attack = UNCONSCIOUS remains_type = /obj/effect/decal/remains/troll // Placeholder until Troll remains are sprited. body_eater = TRUE + + ai_controller = /datum/ai_controller/bog_troll + AIStatus = AI_OFF + can_have_ai = FALSE + var/critvuln = FALSE @@ -87,11 +97,16 @@ return pick('sound/vo/mobs/troll/cidle1.ogg','sound/vo/mobs/troll/aggro2.ogg') /mob/living/simple_animal/hostile/retaliate/rogue/trollbog/taunted(mob/user) +// update_name() didnt work for some reason emote("aggro") Retaliate() GiveTarget(user) return - +/* +/mob/living/simple_animal/hostile/retaliate/rogue/trollbog/proc/update_name(mob/living) + name = "bog troll" + desc = "Elven legends say these monsters were servants of Dendor tasked to guard his realm." +*/ /mob/living/simple_animal/hostile/retaliate/rogue/trollbog/Life() ..() if(pulledby) @@ -100,15 +115,21 @@ if(fire_stacks <= 0) adjustHealth(-rand(40,50)) - /mob/living/simple_animal/hostile/retaliate/rogue/trollbog/LoseTarget() ..() if(health > 0) - icon_state = "Trolls" + icon_state = "Trollso" + +/mob/living/simple_animal/hostile/retaliate/rogue/trollbog/Moved() + . = ..() + if(!icon_state == "Troll") + icon_state = "Troll" + /mob/living/simple_animal/hostile/retaliate/rogue/trollbog/GiveTarget() ..() - icon_state = "Troll" +// update_name() + icon_state = "Trolla" /mob/living/simple_animal/hostile/retaliate/rogue/trollbog/simple_limb_hit(zone) if(!zone) diff --git a/code/modules/mob/living/simple_animal/rogue/creacher/volf.dm b/code/modules/mob/living/simple_animal/rogue/creacher/volf.dm index 16560cdd28..76211864f8 100644 --- a/code/modules/mob/living/simple_animal/rogue/creacher/volf.dm +++ b/code/modules/mob/living/simple_animal/rogue/creacher/volf.dm @@ -36,7 +36,7 @@ /obj/item/bodypart, /obj/item/organ) - base_intents = list(/datum/intent/simple/bite) + base_intents = list(/datum/intent/simple/critterbite) attack_sound = list('sound/vo/mobs/vw/attack (1).ogg','sound/vo/mobs/vw/attack (2).ogg','sound/vo/mobs/vw/attack (3).ogg','sound/vo/mobs/vw/attack (4).ogg') melee_damage_lower = 15 melee_damage_upper = 20 @@ -45,6 +45,7 @@ STASTR = 6 STASPD = 12 + simple_detect_bonus = 20 retreat_distance = 0 minimum_distance = 0 deaggroprob = 0 @@ -53,12 +54,17 @@ del_on_deaggro = 999 SECONDS retreat_health = 0.4 food = 0 - dodgetime = 17 + dodgetime = 2 SECONDS aggressive = 1 // stat_attack = UNCONSCIOUS remains_type = /obj/effect/decal/remains/wolf body_eater = TRUE + ///this mob was updated to new ai + AIStatus = AI_OFF + can_have_ai = FALSE + ai_controller = /datum/ai_controller/volf + /obj/effect/decal/remains/wolf name = "remains" gender = PLURAL @@ -67,6 +73,8 @@ /mob/living/simple_animal/hostile/retaliate/rogue/wolf/Initialize() . = ..() + AddElement(/datum/element/ai_flee_while_injured, 0.75, retreat_health) + gender = MALE if(prob(33)) gender = FEMALE @@ -112,6 +120,12 @@ Retaliate() GiveTarget(pulledby) + +/mob/living/simple_animal/hostile/retaliate/rogue/wolf/find_food() + . = ..() + if(!.) + return eat_bodies() + /mob/living/simple_animal/hostile/retaliate/rogue/wolf/simple_limb_hit(zone) if(!zone) return "" diff --git a/code/modules/mob/living/simple_animal/rogue/creacher/zizoid.dm b/code/modules/mob/living/simple_animal/rogue/creacher/zizoid.dm index 6ae51e55e4..91af8498aa 100644 --- a/code/modules/mob/living/simple_animal/rogue/creacher/zizoid.dm +++ b/code/modules/mob/living/simple_animal/rogue/creacher/zizoid.dm @@ -69,7 +69,7 @@ /mob/living/simple_animal/hostile/retaliate/rogue/blood/ascended/Initialize() . = ..() - set_light(5,5, LIGHT_COLOR_RED) + set_light(5,5,5, l_color = LIGHT_COLOR_RED) ADD_TRAIT(src, TRAIT_CRITICAL_RESISTANCE, TRAIT_GENERIC) ADD_TRAIT(src, TRAIT_BLOODLOSS_IMMUNE, TRAIT_GENERIC) diff --git a/code/modules/mob/living/simple_animal/rogue/farm/chicken.dm b/code/modules/mob/living/simple_animal/rogue/farm/chicken.dm index aba8042b32..ee88076689 100644 --- a/code/modules/mob/living/simple_animal/rogue/farm/chicken.dm +++ b/code/modules/mob/living/simple_animal/rogue/farm/chicken.dm @@ -25,7 +25,7 @@ /obj/item/natural/feather = 1) var/egg_type = /obj/item/reagent_containers/food/snacks/egg - food_type = list(/obj/item/reagent_containers/food/snacks/produce/berries/rogue, + food_type = list(/obj/item/reagent_containers/food/snacks/produce/jacksberry, /obj/item/natural/worms, // well this works for domesticating but to actually eat it has to be a reagen_container/food object. Leaving it for now. /obj/item/reagent_containers/food/snacks/produce/wheat, /obj/item/reagent_containers/food/snacks/produce/oat) diff --git a/code/modules/mob/living/simple_animal/rogue/farm/goat.dm b/code/modules/mob/living/simple_animal/rogue/farm/goat.dm index c8e1f026bb..63b3e221c5 100644 --- a/code/modules/mob/living/simple_animal/rogue/farm/goat.dm +++ b/code/modules/mob/living/simple_animal/rogue/farm/goat.dm @@ -91,7 +91,7 @@ /obj/item/reagent_containers/food/snacks/produce/apple, /obj/item/reagent_containers/food/snacks/produce/turnip, /obj/item/reagent_containers/food/snacks/produce/cabbage, - /obj/item/reagent_containers/food/snacks/produce/berries/rogue) + /obj/item/reagent_containers/food/snacks/produce/jacksberry) tame_chance = 25 bonus_tame_chance = 15 pooptype = /obj/item/natural/poo/horse @@ -220,7 +220,7 @@ /obj/item/reagent_containers/food/snacks/produce/apple, /obj/item/reagent_containers/food/snacks/produce/turnip, /obj/item/reagent_containers/food/snacks/produce/cabbage, - /obj/item/reagent_containers/food/snacks/produce/berries/rogue) + /obj/item/reagent_containers/food/snacks/produce/jacksberry) pooptype = /obj/item/natural/poo/horse base_intents = list(/datum/intent/simple/headbutt) diff --git a/code/modules/mob/living/simple_animal/rogue/farm/trufflepig.dm b/code/modules/mob/living/simple_animal/rogue/farm/trufflepig.dm index 5023aa2635..9a75b91b06 100644 --- a/code/modules/mob/living/simple_animal/rogue/farm/trufflepig.dm +++ b/code/modules/mob/living/simple_animal/rogue/farm/trufflepig.dm @@ -47,6 +47,7 @@ list_reagents = list(/datum/reagent/consumable/nutriment = 5) cooked_type = /obj/item/reagent_containers/food/snacks/rogue/truffles/cooked fried_type = /obj/item/reagent_containers/food/snacks/rogue/truffles/cooked + cooked_smell = /datum/pollutant/food/truffles color = "#ab7d6f" tastes = list("mushroom" = 1) sellprice = 30 @@ -54,11 +55,12 @@ /obj/item/reagent_containers/food/snacks/rogue/truffles/cooked eat_effect = /datum/status_effect/buff/foodbuff bonus_reagents = list(/datum/reagent/consumable/nutriment = 3) + icon_state = "mushroom1_full" color = "#835b4f" tastes = list("delicious truffles" = 1) -/obj/item/reagent_containers/food/snacks/rogue/truffles/Initialize() - icon_state = pick("mushroom1_full","mushroom1_full","mushroom1_full") - . = ..() +//obj/item/reagent_containers/food/snacks/rogue/truffles/Initialize() +// icon_state = pick("mushroom1_full","mushroom1_full","mushroom1_full") +// . = ..() /obj/item/reagent_containers/food/snacks/rogue/toxicshrooms name = "truffles" @@ -67,6 +69,7 @@ list_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/berrypoison = 5) cooked_type = /obj/item/reagent_containers/food/snacks/rogue/toxicshrooms/cooked fried_type = /obj/item/reagent_containers/food/snacks/rogue/toxicshrooms/cooked + cooked_smell = /datum/pollutant/food/truffles color = "#ab7d6f" tastes = list("mushroom" = 1) /obj/item/reagent_containers/food/snacks/rogue/toxicshrooms/cooked diff --git a/code/modules/mob/living/simple_animal/rogue/game/saiga.dm b/code/modules/mob/living/simple_animal/rogue/game/saiga.dm index 10fe732416..0b6dac3d64 100644 --- a/code/modules/mob/living/simple_animal/rogue/game/saiga.dm +++ b/code/modules/mob/living/simple_animal/rogue/game/saiga.dm @@ -54,12 +54,11 @@ butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 3, /obj/item/reagent_containers/food/snacks/fat = 1, /obj/item/natural/hide = 2, - /obj/item/alch/sinew = 2, + /obj/item/natural/head/saiga = 1, /obj/item/alch/bone = 1) perfect_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 4, /obj/item/reagent_containers/food/snacks/fat = 1, /obj/item/natural/hide = 4, - /obj/item/alch/sinew = 2, /obj/item/alch/bone = 1, /obj/item/natural/head/saiga = 1) @@ -67,7 +66,7 @@ maxHealth = FEMALE_MOOBEAST_HEALTH food_type = list(/obj/item/reagent_containers/food/snacks/produce/wheat, /obj/item/reagent_containers/food/snacks/produce/oat, - /obj/item/reagent_containers/food/snacks/produce/berries/rogue, + /obj/item/reagent_containers/food/snacks/produce/jacksberry, /obj/item/reagent_containers/food/snacks/produce/apple) tame_chance = 25 bonus_tame_chance = 15 @@ -97,6 +96,7 @@ gender = PLURAL icon_state = "skele" icon = 'icons/roguetown/mob/monster/saiga.dmi' + color = "#d6b3a5" /mob/living/simple_animal/hostile/retaliate/rogue/saiga/get_sound(input) switch(input) @@ -172,19 +172,19 @@ butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 2, /obj/item/reagent_containers/food/snacks/fat = 1, /obj/item/natural/hide = 3, - /obj/item/alch/sinew = 2, + /obj/item/natural/head/saiga = 1, /obj/item/alch/bone = 1) perfect_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 3, /obj/item/reagent_containers/food/snacks/fat = 1, /obj/item/natural/hide = 5, - /obj/item/alch/sinew = 2, + /obj/item/natural/head/saiga = 1, /obj/item/alch/bone = 1) health = MALE_MOOBEAST_HEALTH maxHealth = MALE_MOOBEAST_HEALTH food_type = list(/obj/item/reagent_containers/food/snacks/produce/wheat, /obj/item/reagent_containers/food/snacks/produce/oat, - /obj/item/reagent_containers/food/snacks/produce/berries/rogue, + /obj/item/reagent_containers/food/snacks/produce/jacksberry, /obj/item/reagent_containers/food/snacks/produce/apple) pooptype = /obj/item/natural/poo/horse diff --git a/code/modules/mob/living/simple_animal/rogue/rogueanimals.dm b/code/modules/mob/living/simple_animal/rogue/rogueanimals.dm index 979146c108..81030f971d 100644 --- a/code/modules/mob/living/simple_animal/rogue/rogueanimals.dm +++ b/code/modules/mob/living/simple_animal/rogue/rogueanimals.dm @@ -1,5 +1,5 @@ -#define TROLL_HEALTH 600 -#define BOGTROLL_HEALTH 300 +#define TROLL_HEALTH 500 +#define BOGTROLL_HEALTH 350 #define MOLE_HEALTH 200 #define BOGBUG_HEALTH 160 #define SPIDER_HEALTH 120 @@ -125,9 +125,85 @@ if(!stop_automated_movement && wander && !doing) if(ssaddle && has_buckled_mobs()) return FALSE + if(find_food()) + return else ..() +/mob/living/simple_animal/hostile/retaliate/rogue/proc/find_food() + if(food > 50 && !eat_forever) + return + var/list/around = view(1, src) + var/list/foundfood = list() + if(stat) + return + for(var/obj/item/F in around) + if(is_type_in_list(F, food_type)) + foundfood += F + if(src.Adjacent(F)) + face_atom(F) + playsound(src,'sound/misc/eat.ogg', rand(30,60), TRUE) + qdel(F) + food = max(food + 30, 100) + return TRUE + + for(var/obj/item/F in foundfood) + if(is_type_in_list(F, food_type)) + var/turf/T = get_turf(F) + Goto(T,move_to_delay,0) + return TRUE + return FALSE + +/mob/living/simple_animal/hostile/retaliate/rogue/proc/eat_bodies() + var/mob/living/L +// var/list/around = view(aggro_vision_range, src) + var/list/around = hearers(1, src) + var/list/foundfood = list() + if(stat) + return + for(var/mob/living/eattarg in around) + if(!(eattarg in enemies)) //Makes a tamed rous not eat people on the floor unless instigated. + return + if(eattarg.stat != CONSCIOUS) + foundfood += eattarg + L = eattarg + if(src.Adjacent(L)) + if(iscarbon(L)) + var/mob/living/carbon/C = L + if(attack_sound) + playsound(src, pick(attack_sound), 100, TRUE, -1) + face_atom(C) + src.visible_message(span_danger("[src] starts to rip apart [C]!")) + if(do_after(src,100, target = L)) + var/obj/item/bodypart/limb + var/list/limb_list = list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) + for(var/zone in limb_list) + limb = C.get_bodypart(zone) + if(limb) + limb.dismember() + return TRUE + limb = C.get_bodypart(BODY_ZONE_HEAD) + if(limb) + limb.dismember() + return TRUE + limb = C.get_bodypart(BODY_ZONE_CHEST) + if(limb) + if(!limb.dismember()) + C.gib() + return TRUE + else + if(attack_sound) + playsound(src, pick(attack_sound), 100, TRUE, -1) + src.visible_message(span_danger("[src] starts to rip apart [L]!")) + if(do_after(src,100, target = L)) + L.gib() + return TRUE + for(var/mob/living/eattarg in foundfood) + var/turf/T = get_turf(eattarg) + Goto(T,move_to_delay,0) + return TRUE + return FALSE + //What can we attack? /mob/living/simple_animal/hostile/retaliate/rogue/CanAttack(atom/the_target) //If is foodtype and food is less than 50 or you eat forever. @@ -367,6 +443,7 @@ //................. UDDER (GOTE).......................// /obj/item/gudder + name = "gote" /obj/item/gudder/Initialize() create_reagents(100) @@ -392,3 +469,17 @@ user.Immobilize(1 SECONDS) user.changeNext_move(1 SECONDS) + +/mob/living/simple_animal/hostile/retaliate/rogue/UnarmedAttack(atom/A) + . = ..() + if(!is_type_in_list(A, food_type)) + return + + if(!src.CanReach(A)) + return + + face_atom(A) + playsound(src,'sound/misc/eat.ogg', rand(30,60), TRUE) + qdel(A) + food = max(food + 30, 100) + diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 20153225db..bb6bb02ee8 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -81,6 +81,8 @@ GLOBAL_VAR_INIT(farm_animals, FALSE) var/armor_penetration = 0 ///Damage type of a simple mob's melee attack, should it do damage. var/melee_damage_type = BRUTE + ///Type of melee attack + var/damage_type = "slash" /// 1 for full damage , 0 for none , -1 for 1:1 heal from that source. var/list/damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) ///Attacking verb in present continuous tense. @@ -109,8 +111,7 @@ GLOBAL_VAR_INIT(farm_animals, FALSE) var/breedchildren = 3 ///Simple_animal access. - ///Innate access uses an internal ID card. - var/obj/item/card/id/access_card = null + var/list/lock_hashes ///In the event that you want to have a buffing effect on the mob, but don't want it to stack with other effects, any outside force that applies a buff to a simple mob should at least set this to 1, so we have something to check against. var/buffed = 0 ///If the mob can be spawned with a gold slime core. HOSTILE_SPAWN are spawned with plasma, FRIENDLY_SPAWN are spawned with blood. @@ -290,8 +291,10 @@ GLOBAL_VAR_INIT(farm_animals, FALSE) if(stat != DEAD) if(health <= 0) death() + SEND_SIGNAL(src, COMSIG_MOB_STATCHANGE, DEAD) return med_hud_set_status() + SEND_SIGNAL(src, COMSIG_MOB_STATCHANGE, stat) if(footstep_type) AddComponent(/datum/component/footstep, footstep_type) @@ -552,10 +555,6 @@ GLOBAL_VAR_INIT(farm_animals, FALSE) var/mob/living/L = the_target if(L.stat == DEAD) return FALSE - if (ismecha(the_target)) - var/obj/mecha/M = the_target - if (M.occupant) - return FALSE return TRUE /mob/living/simple_animal/handle_fire() @@ -699,9 +698,6 @@ GLOBAL_VAR_INIT(farm_animals, FALSE) return sync_lighting_plane_alpha() -/mob/living/simple_animal/get_idcard(hand_first) - return access_card - /mob/living/simple_animal/can_hold_items() return dextrous @@ -729,13 +725,6 @@ GLOBAL_VAR_INIT(farm_animals, FALSE) return ..() if(!hand_index) hand_index = (active_hand_index % held_items.len)+1 - var/obj/item/held_item = get_active_held_item() - if(held_item) - if(istype(held_item, /obj/item/twohanded)) - var/obj/item/twohanded/T = held_item - if(T.wielded == 1) - to_chat(usr, "My other hand is too busy holding [T].") - return FALSE var/oindex = active_hand_index active_hand_index = hand_index if(hud_used) diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index 67ca7a8a27..8f50aa3c95 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -347,9 +347,6 @@ if(ally) continue - if(issilicon(L) && (rabid || attacked)) // They can't eat silicons, but they can glomp them in defence - targets += L // Possible target found! - if(locate(/mob/living/simple_animal/slime) in L.buckled_mobs) // Only one slime can latch on at a time. continue @@ -361,11 +358,11 @@ else for(var/mob/living/carbon/C in targets) if(!Discipline && prob(5)) - if(ishuman(C) || isalienadult(C)) + if(ishuman(C)) Target = C break - if(islarva(C) || ismonkey(C)) + if(ismonkey(C)) Target = C break diff --git a/code/modules/mob/living/simple_animal/slime/powers.dm b/code/modules/mob/living/simple_animal/slime/powers.dm index 25457d009e..776d454dca 100644 --- a/code/modules/mob/living/simple_animal/slime/powers.dm +++ b/code/modules/mob/living/simple_animal/slime/powers.dm @@ -56,9 +56,6 @@ Feedstop() return FALSE - if(issilicon(M)) - return FALSE - if(isanimal(M)) var/mob/living/simple_animal/S = M if(S.damage_coeff[TOX] <= 0 && S.damage_coeff[CLONE] <= 0) //The creature wouldn't take any damage, it must be too weird even for us. @@ -173,8 +170,6 @@ var/list/babies = list() var/new_nutrition = round(nutrition * 0.9) var/new_powerlevel = round(powerlevel / 4) - var/datum/component/nanites/original_nanites = GetComponent(/datum/component/nanites) - for(var/i=1,i<=4,i++) var/child_colour if(mutation_chance >= 100) @@ -195,10 +190,6 @@ M.mutation_chance = CLAMP(mutation_chance+(rand(5,-5)),0,100) SSblackbox.record_feedback("tally", "slime_babies_born", 1, M.colour) - if(original_nanites) - M.AddComponent(/datum/component/nanites, original_nanites.nanite_volume*0.25) - SEND_SIGNAL(M, COMSIG_NANITE_SYNC, original_nanites, TRUE, TRUE) //The trues are to copy activation as well - var/mob/living/simple_animal/slime/new_slime = pick(babies) new_slime.a_intent = INTENT_HARM if(src.mind) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index eaeece980b..77218b8407 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -313,10 +313,6 @@ if(..()) //successful monkey bite. attacked += 10 -/mob/living/simple_animal/slime/attack_larva(mob/living/carbon/alien/larva/L) - if(..()) //successful larva bite. - attacked += 10 - /mob/living/simple_animal/slime/attack_hulk(mob/living/carbon/human/user) . = ..() if(!.) @@ -374,12 +370,6 @@ if(..()) //successful attack attacked += 10 -/mob/living/simple_animal/slime/attack_alien(mob/living/carbon/alien/humanoid/M) - if(..()) //if harm or disarm intent. - attacked += 10 - discipline_slime(M) - - /mob/living/simple_animal/slime/attackby(obj/item/W, mob/living/user, params) if(stat == DEAD && !user.cmode) var/list/possible_steps = list() diff --git a/code/modules/mob/living/stats.dm b/code/modules/mob/living/stats.dm index a6a81905d1..207be813cd 100644 --- a/code/modules/mob/living/stats.dm +++ b/code/modules/mob/living/stats.dm @@ -29,7 +29,10 @@ new_patron = GLOB.patronlist[new_patron] if(!istype(new_patron)) return TRUE + if(patron && !ispath(patron)) + patron.on_remove(src) patron = new_patron + patron.on_gain(src) return TRUE /datum/species diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index aeac0b141a..c141a526cc 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -86,6 +86,7 @@ if(SSticker.current_state == GAME_STATE_FINISHED) do_game_over() + SEND_SIGNAL(src, COMSIG_MOB_LOGIN) log_message("Client [key_name(src)] has taken ownership of mob [src]([src.type])", LOG_OWNERSHIP) SEND_SIGNAL(src, COMSIG_MOB_CLIENT_LOGIN, client) diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index 0d7d7e47a6..a3aea50329 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -5,6 +5,7 @@ set_typing_indicator(FALSE) GLOB.player_list -= src + SEND_SIGNAL(src, COMSIG_MOB_LOGOUT) ..() if(loc) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 77de4df1b6..fe618766ae 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -133,12 +133,6 @@ GLOBAL_VAR_INIT(mobids, 1) to_chat(usr, t) -/** - * Return the desc of this mob for a photo - */ -/mob/proc/get_photo_description(obj/item/camera/camera) - return "a ... thing?" - /** * Show a message to this mob (visual or audible) */ @@ -702,8 +696,6 @@ GLOBAL_VAR_INIT(mobids, 1) return if(!Adjacent(usr)) return - if(isAI(M)) - return /** * Handle the result of a click drag onto this mob * @@ -713,14 +705,8 @@ GLOBAL_VAR_INIT(mobids, 1) . = ..() if(ismob(dropping) && dropping != user) var/mob/M = dropping - if(ismob(user)) - var/mob/U = user - if(!iscyborg(U) || !U.cmode || U.used_intent.type == INTENT_HARM) - M.show_inv(U) - return TRUE - else - M.show_inv(user) - return TRUE + M.show_inv(user) + return TRUE ///Is the mob muzzled (default false) /mob/proc/is_muzzled() @@ -782,7 +768,6 @@ GLOBAL_VAR_INIT(mobids, 1) stat(null) for(var/datum/controller/subsystem/SS in Master.subsystems) SS.stat_entry() - GLOB.cameranet.stat_entry() if(statpanel("Tickets")) GLOB.ahelp_tickets.stat_entry() if(length(GLOB.sdql2_queries)) @@ -1124,15 +1109,6 @@ GLOBAL_VAR_INIT(mobids, 1) break search_id = 0 - else if( search_pda && istype(A, /obj/item/pda) ) - var/obj/item/pda/PDA = A - if(PDA.owner == oldname) - PDA.owner = newname - PDA.update_label() - if(!search_id) - break - search_pda = 0 - /mob/proc/update_stat() return @@ -1164,10 +1140,6 @@ GLOBAL_VAR_INIT(mobids, 1) if(!client.charging && !atkswinging) if(examine_cursor_icon && client.keys_held["Shift"]) //mouse shit is hardcoded, make this non hard-coded once we make mouse modifiers bindable client.mouse_pointer_icon = examine_cursor_icon - else if (ismecha(loc)) - var/obj/mecha/M = loc - if(M.mouse_pointer) - client.mouse_pointer_icon = M.mouse_pointer else if (istype(loc, /obj/vehicle/sealed)) var/obj/vehicle/sealed/E = loc if(E.mouse_pointer) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 07e760d380..81e24d81d2 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -729,28 +729,8 @@ return FALSE if(!istype(M)) return FALSE - if(issilicon(M)) - if(iscyborg(M)) //For cyborgs, returns 1 if the cyborg has a law 0 and special_role. Returns 0 if the borg is merely slaved to an AI traitor. - return FALSE - else if(isAI(M)) - var/mob/living/silicon/ai/A = M - if(A.laws && A.laws.zeroth && A.mind && A.mind.special_role) - return TRUE - return FALSE if(M.mind && M.mind.special_role)//If they have a mind and special role, they are some type of traitor or antagonist. switch(SSticker.mode.config_tag) - if("revolution") - if(is_revolutionary(M)) - return 2 - if("cult") - if(M.mind in SSticker.mode.cult) - return 2 - if("nuclear") - if(M.mind.has_antag_datum(/datum/antagonist/nukeop,TRUE)) - return 2 - if("changeling") - if(M.mind.has_antag_datum(/datum/antagonist/changeling,TRUE)) - return 2 if("wizard") if(iswizard(M)) return 2 @@ -976,3 +956,14 @@ ///Can the mob see reagents inside of containers? /mob/proc/can_see_reagents() return stat == DEAD || has_unlimited_silicon_privilege //Dead guys and silicons can always see reagents + +/mob/proc/get_role_title() + var/used_title + if(job) + var/datum/job/J = SSjob.GetJob(job) + if(!J) + return "Unknown" + used_title = J.title + if((gender == FEMALE) && J.f_title) + used_title = J.f_title + return used_title diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 6655ff6e4d..8fdb39fe16 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -9,8 +9,6 @@ */ /client/verb/drop_item() set hidden = 1 - if(!iscyborg(mob) && mob.stat == CONSCIOUS) - mob.dropItemToGround(mob.get_active_held_item(), silent = FALSE) return /** @@ -116,9 +114,6 @@ if(mob.remote_control) //we're controlling something, our movement is relayed to it return mob.remote_control.relaymove(mob, direct) - if(isAI(mob)) - return AIMove(n,direct,mob) - if(Process_Grab()) //are we restrained by someone's grip? return @@ -650,19 +645,19 @@ /mob/living/carbon/human/check_armor_skill() if(istype(src.wear_armor, /obj/item/clothing)) var/obj/item/clothing/CL = src.wear_armor - if(CL.armor_class == ARMOR_CLASS_HEAVY) + if(CL.armor_class == AC_HEAVY) if(!HAS_TRAIT(src, TRAIT_HEAVYARMOR)) return FALSE - if(CL.armor_class == ARMOR_CLASS_MEDIUM) + if(CL.armor_class == AC_MEDIUM) if(!HAS_TRAIT(src, TRAIT_HEAVYARMOR)) if(!HAS_TRAIT(src, TRAIT_MEDIUMARMOR)) return FALSE if(istype(src.wear_shirt, /obj/item/clothing)) var/obj/item/clothing/CL = src.wear_shirt - if(CL.armor_class == ARMOR_CLASS_HEAVY) + if(CL.armor_class == AC_HEAVY) if(!HAS_TRAIT(src, TRAIT_HEAVYARMOR)) return FALSE - if(CL.armor_class == ARMOR_CLASS_MEDIUM) + if(CL.armor_class == AC_MEDIUM) if(!HAS_TRAIT(src, TRAIT_HEAVYARMOR)) if(!HAS_TRAIT(src, TRAIT_MEDIUMARMOR)) return FALSE @@ -675,15 +670,15 @@ var/heaviest = "Light" if(istype(src.wear_armor, /obj/item/clothing)) var/obj/item/clothing/CL = src.wear_armor - if(CL.armor_class == ARMOR_CLASS_HEAVY && (heaviest == "Light" || heaviest == "Medium")) + if(CL.armor_class == AC_HEAVY && (heaviest == "Light" || heaviest == "Medium")) heaviest = "Heavy" - if(CL.armor_class == ARMOR_CLASS_MEDIUM && heaviest == "Light") + if(CL.armor_class == AC_MEDIUM && heaviest == "Light") heaviest = "Medium" if(istype(src.wear_shirt, /obj/item/clothing)) var/obj/item/clothing/CL = src.wear_shirt - if(CL.armor_class == ARMOR_CLASS_HEAVY && (heaviest == "Light" || heaviest == "Medium")) + if(CL.armor_class == AC_HEAVY && (heaviest == "Light" || heaviest == "Medium")) heaviest = "Heavy" - if(CL.armor_class == ARMOR_CLASS_MEDIUM && heaviest == "Light") + if(CL.armor_class == AC_MEDIUM && heaviest == "Light") heaviest = "Medium" return heaviest @@ -695,21 +690,21 @@ return FALSE if(istype(src.wear_armor, /obj/item/clothing)) var/obj/item/clothing/CL = src.wear_armor - if(CL.armor_class == ARMOR_CLASS_HEAVY) + if(CL.armor_class == AC_HEAVY) return FALSE - if(CL.armor_class == ARMOR_CLASS_MEDIUM) + if(CL.armor_class == AC_MEDIUM) return FALSE if(istype(src.wear_shirt, /obj/item/clothing)) var/obj/item/clothing/CL = src.wear_shirt - if(CL.armor_class == ARMOR_CLASS_HEAVY) + if(CL.armor_class == AC_HEAVY) return FALSE - if(CL.armor_class == ARMOR_CLASS_MEDIUM) + if(CL.armor_class == AC_MEDIUM) return FALSE if(istype(src.wear_pants, /obj/item/clothing)) var/obj/item/clothing/CL = src.wear_pants - if(CL.armor_class == ARMOR_CLASS_HEAVY) + if(CL.armor_class == AC_HEAVY) return FALSE - if(CL.armor_class == ARMOR_CLASS_MEDIUM) + if(CL.armor_class == AC_MEDIUM) return FALSE return TRUE diff --git a/code/modules/mob/mob_movespeed.dm b/code/modules/mob/mob_movespeed.dm index 1bdb5a6732..33b0d0517f 100644 --- a/code/modules/mob/mob_movespeed.dm +++ b/code/modules/mob/mob_movespeed.dm @@ -110,6 +110,7 @@ Key procs continue . += amt cached_multiplicative_slowdown = . + SEND_SIGNAL(src, COMSIG_MOB_MOVESPEED_UPDATED) if(updating_glide_size) set_glide_size(DELAY_TO_GLIDE_SIZE(cached_multiplicative_slowdown)) diff --git a/code/modules/mob/roguetransform.dm b/code/modules/mob/roguetransform.dm deleted file mode 100644 index aade010716..0000000000 --- a/code/modules/mob/roguetransform.dm +++ /dev/null @@ -1,153 +0,0 @@ -/mob/living/carbon/human - var/mob/stored_mob = null - -/mob/living/carbon/human/species/werewolf/death(gibbed) - werewolf_untransform(TRUE, gibbed) - -/mob/living/carbon/human/proc/werewolf_transform() - if (notransform) - return - if(!mind) - log_runtime("NO MIND ON [src.name] WHEN TRANSFORMING") - notransform = TRUE - Paralyze(1, ignore_canstun = TRUE) - for(var/obj/item/W in src) - dropItemToGround(W) - regenerate_icons() - icon = null - var/oldinv = invisibility - invisibility = INVISIBILITY_MAXIMUM - cmode = FALSE - if(client) - SSdroning.play_area_sound(get_area(src), client) -// stop_cmusic() - - var/mob/living/carbon/human/species/werewolf/W = new (loc) - - W.gender = gender - W.regenerate_icons() - W.stored_mob = src - W.limb_destroyer = TRUE - W.ambushable = FALSE - W.cmode_music = 'sound/music/combat_werewolf.ogg' - W.skin_armor = new /obj/item/clothing/suit/roguetown/armor/skin_armor/werewolf_skin(W) - playsound(W.loc, pick('sound/combat/gib (1).ogg','sound/combat/gib (2).ogg'), 200, FALSE, 3) - W.spawn_gibs(FALSE) - apply_status_effect(STATUS_EFFECT_STASIS, null, TRUE) - src.forceMove(W) - - W.after_creation() - W.stored_language = new - W.stored_language.copy_known_languages_from(src) - W.stored_skills = mind.known_skills.Copy() - W.stored_experience = mind.skill_experience.Copy() - mind.transfer_to(W) - W.mind.known_skills = list() - W.mind.skill_experience = list() - W.remove_all_languages() - W.grant_language(/datum/language/beast) - -// var/datum/antagonist/werewolf/WW = mind.has_antag_datum(/datum/antagonist/werewolf) -// if(!W.mind) -// W.mind_initialize() -// if(WW) -// W.mind.add_antag_datum(WW) - - W.base_intents = list(INTENT_HELP, INTENT_DISARM, INTENT_GRAB, /datum/intent/unarmed/wwolf) - W.update_a_intents() - W.name = "WEREWOLF" - W.real_name = "WEREWOLF" - - - to_chat(W, "I transform into a horrible beast!") - W.emote("rage") - - W.stress = stress - - W.mind.adjust_skillrank(/datum/skill/combat/wrestling, 6, TRUE) - W.mind.adjust_skillrank(/datum/skill/combat/unarmed, 6, TRUE) - W.mind.adjust_skillrank(/datum/skill/misc/climbing, 6, TRUE) - - W.verbs |= /mob/living/carbon/human/proc/howl_button - - ADD_TRAIT(src, TRAIT_NOSLEEP, TRAIT_GENERIC) - - ADD_TRAIT(W, TRAIT_STRONGBITE, TRAIT_GENERIC) - ADD_TRAIT(W, TRAIT_ZJUMP, TRAIT_GENERIC) - ADD_TRAIT(W, TRAIT_NOROGSTAM, TRAIT_GENERIC) - ADD_TRAIT(W, TRAIT_NOHUNGER, TRAIT_GENERIC) - ADD_TRAIT(W, TRAIT_BASHDOORS, TRAIT_GENERIC) - ADD_TRAIT(W, TRAIT_SHOCKIMMUNE, TRAIT_GENERIC) - ADD_TRAIT(W, TRAIT_STEELHEARTED, TRAIT_GENERIC) - ADD_TRAIT(W, TRAIT_BREADY, TRAIT_GENERIC) - - invisibility = oldinv - notransform = FALSE - - -/mob/living/carbon/human/proc/werewolf_untransform(dead,gibbed) - if(notransform) - return - if(!stored_mob) - return - if(!mind) - log_runtime("NO MIND ON [src.name] WHEN UNTRANSFORMING") - notransform = TRUE - Paralyze(1, ignore_canstun = TRUE) - for(var/obj/item/W in src) - dropItemToGround(W) - icon = null - invisibility = INVISIBILITY_MAXIMUM - - var/mob/living/carbon/human/W = stored_mob - stored_mob = null - REMOVE_TRAIT(W, TRAIT_NOSLEEP, TRAIT_GENERIC) - if(dead) - W.death(gibbed) -// W.key = key - W.forceMove(get_turf(src)) - W.remove_status_effect(STATUS_EFFECT_STASIS) - - REMOVE_TRAIT(W, TRAIT_NOMOOD, TRAIT_GENERIC) - stress = W.stress - -// var/datum/antagonist/werewolf/WW = mind.has_antag_datum(/datum/antagonist/werewolf) -// if(WW) -// W.mind.add_antag_datum(WW) - mind.transfer_to(W) - - var/mob/living/carbon/human/species/werewolf/WA = src - W.remove_all_languages() - W.copy_known_languages_from(WA.stored_language) - W.mind.known_skills = WA.stored_skills.Copy() - W.mind.skill_experience = WA.stored_experience.Copy() - - W.regenerate_icons() - - to_chat(W, "I return to my facade.") - playsound(W.loc, pick('sound/combat/gib (1).ogg','sound/combat/gib (2).ogg'), 200, FALSE, 3) - W.spawn_gibs(FALSE) - W.Knockdown(30) - W.Stun(30) - - qdel(src) - - -/obj/item/clothing/suit/roguetown/armor/skin_armor/werewolf_skin - slot_flags = null - name = "werewolf's skin" - desc = "" - icon_state = null - body_parts_covered = FULL_BODY - armor = list("melee" = 30, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - prevent_crits = list(BCLASS_CUT, BCLASS_CHOP, BCLASS_STAB, BCLASS_BLUNT, BCLASS_TWIST) - blocksound = SOFTHIT - blade_dulling = DULLING_BASHCHOP - sewrepair = FALSE - max_integrity = 100 - -/obj/item/clothing/suit/roguetown/armor/skin_armor/dropped(mob/living/user, show_message = TRUE) - . = ..() - if(QDELETED(src)) - return - qdel(src) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 50c764479d..1c938b65ad 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -91,11 +91,6 @@ if(mind) mind.transfer_to(O) - var/datum/antagonist/changeling/changeling = O.mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling) - var/datum/action/changeling/humanform/hf = new - changeling.purchasedpowers += hf - changeling.regain_powers() for(var/X in internal_organs) var/obj/item/organ/I = X @@ -118,8 +113,6 @@ for(var/X in O.internal_organs) var/obj/item/organ/G = X if(BP.body_zone == check_zone(G.zone)) - if(mind && mind.has_antag_datum(/datum/antagonist/changeling) && istype(G, /obj/item/organ/brain)) - continue //so headless changelings don't lose their brain when transforming qdel(G) //we lose the organs in the missing limbs qdel(BP) @@ -139,11 +132,6 @@ //transfer mind if we didn't yet if(mind) mind.transfer_to(O) - var/datum/antagonist/changeling/changeling = O.mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling) - var/datum/action/changeling/humanform/hf = new - changeling.purchasedpowers += hf - changeling.regain_powers() if (tr_flags & TR_DEFAULTMSG) @@ -266,12 +254,6 @@ if(mind) mind.transfer_to(O) - var/datum/antagonist/changeling/changeling = O.mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling) - for(var/datum/action/changeling/humanform/HF in changeling.purchasedpowers) - changeling.purchasedpowers -= HF - changeling.regain_powers() - for(var/X in internal_organs) var/obj/item/organ/I = X int_organs += I @@ -294,8 +276,6 @@ for(var/X in O.internal_organs) var/obj/item/organ/G = X if(BP.body_zone == check_zone(G.zone)) - if(mind && mind.has_antag_datum(/datum/antagonist/changeling) && istype(G, /obj/item/organ/brain)) - continue //so headless changelings don't lose their brain when transforming qdel(G) //we lose the organs in the missing limbs qdel(BP) @@ -314,11 +294,6 @@ if(mind) mind.transfer_to(O) - var/datum/antagonist/changeling/changeling = O.mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling) - for(var/datum/action/changeling/humanform/HF in changeling.purchasedpowers) - changeling.purchasedpowers -= HF - changeling.regain_powers() O.a_intent = INTENT_HELP if (tr_flags & TR_DEFAULTMSG) @@ -334,135 +309,6 @@ qdel(src) -/mob/living/carbon/human/AIize(transfer_after = TRUE, client/preference_source) - if (notransform) - return - for(var/t in bodyparts) - qdel(t) - - return ..() - -/mob/living/carbon/AIize(transfer_after = TRUE, client/preference_source) - if (notransform) - return - notransform = TRUE - Paralyze(1, ignore_canstun = TRUE) - for(var/obj/item/W in src) - dropItemToGround(W) - regenerate_icons() - icon = null - invisibility = INVISIBILITY_MAXIMUM - return ..() - -/mob/proc/AIize(transfer_after = TRUE, client/preference_source) - var/list/turf/landmark_loc = list() - for(var/obj/effect/landmark/start/ai/sloc in GLOB.landmarks_list) - if(locate(/mob/living/silicon/ai) in sloc.loc) - continue - if(sloc.primary_ai) - LAZYCLEARLIST(landmark_loc) - landmark_loc += sloc.loc - break - landmark_loc += sloc.loc - if(!landmark_loc.len) - to_chat(src, "Oh god sorry we can't find an unoccupied AI spawn location, so we're spawning you on top of someone.") - for(var/obj/effect/landmark/start/ai/sloc in GLOB.landmarks_list) - landmark_loc += sloc.loc - - if(!landmark_loc.len) - message_admins("Could not find ai landmark for [src]. Yell at a mapper! We are spawning them at their current location.") - landmark_loc += loc - - if(client) - stop_sound_channel(CHANNEL_LOBBYMUSIC) - - if(!transfer_after) - mind.active = FALSE - - . = new /mob/living/silicon/ai(pick(landmark_loc), null, src) - - if(preference_source) - apply_pref_name("ai",preference_source) - - qdel(src) - -/mob/living/carbon/human/proc/Robotize(delete_items = 0, transfer_after = TRUE) - if (notransform) - return - notransform = TRUE - Paralyze(1, ignore_canstun = TRUE) - - for(var/obj/item/W in src) - if(delete_items) - qdel(W) - else - dropItemToGround(W) - regenerate_icons() - icon = null - invisibility = INVISIBILITY_MAXIMUM - for(var/t in bodyparts) - qdel(t) - - var/mob/living/silicon/robot/R = new /mob/living/silicon/robot(loc) - - R.gender = gender - R.invisibility = 0 - - if(client) - R.updatename(client) - - if(mind) //TODO - if(!transfer_after) - mind.active = FALSE - mind.transfer_to(R) - else if(transfer_after) - R.key = key - - if(R.mmi) - R.mmi.name = "[initial(R.mmi.name)]: [real_name]" - if(R.mmi.brain) - R.mmi.brain.name = "[real_name]'s brain" - if(R.mmi.brainmob) - R.mmi.brainmob.real_name = real_name //the name of the brain inside the cyborg is the robotized human's name. - R.mmi.brainmob.name = real_name - - R.job = "Cyborg" - R.notify_ai(NEW_BORG) - - . = R - qdel(src) - -//human -> alien -/mob/living/carbon/human/proc/Alienize() - if (notransform) - return - notransform = TRUE - mobility_flags = NONE - for(var/obj/item/W in src) - dropItemToGround(W) - regenerate_icons() - icon = null - invisibility = INVISIBILITY_MAXIMUM - for(var/t in bodyparts) - qdel(t) - - var/alien_caste = pick("Hunter","Sentinel","Drone") - var/mob/living/carbon/alien/humanoid/new_xeno - switch(alien_caste) - if("Hunter") - new_xeno = new /mob/living/carbon/alien/humanoid/hunter(loc) - if("Sentinel") - new_xeno = new /mob/living/carbon/alien/humanoid/sentinel(loc) - if("Drone") - new_xeno = new /mob/living/carbon/alien/humanoid/drone(loc) - - new_xeno.a_intent = INTENT_HARM - new_xeno.key = key - - to_chat(new_xeno, "I are now an alien.") - . = new_xeno - qdel(src) - /mob/living/carbon/human/proc/slimeize(reproduce as num) if (notransform) return diff --git a/code/modules/mob/vision_cone.dm b/code/modules/mob/vision_cone.dm index 6852065471..2d4ecf1eec 100644 --- a/code/modules/mob/vision_cone.dm +++ b/code/modules/mob/vision_cone.dm @@ -349,4 +349,4 @@ screen_loc = "1,1" mouse_opacity = 0 layer = HUD_LAYER - plane = HUD_PLANE-2 + plane = HUD_PLANE-1 diff --git a/code/modules/modular_computers/NTNet/NTNRC/conversation.dm b/code/modules/modular_computers/NTNet/NTNRC/conversation.dm deleted file mode 100644 index 20ad05b8e3..0000000000 --- a/code/modules/modular_computers/NTNet/NTNRC/conversation.dm +++ /dev/null @@ -1,68 +0,0 @@ -/datum/ntnet_conversation - var/id = null - var/title = "Untitled Conversation" - var/datum/computer_file/program/chatclient/operator // "Administrator" of this channel. Creator starts as channel's operator, - var/list/messages = list() - var/list/clients = list() - var/password - var/static/ntnrc_uid = 0 - -/datum/ntnet_conversation/New() - id = ntnrc_uid++ - if(SSnetworks.station_network) - SSnetworks.station_network.chat_channels.Add(src) - ..() - -/datum/ntnet_conversation/Destroy() - if(SSnetworks.station_network) - SSnetworks.station_network.chat_channels.Remove(src) - return ..() - -/datum/ntnet_conversation/proc/add_message(message, username) - message = "[station_time_timestamp()] [username]: [message]" - messages.Add(message) - trim_message_list() - -/datum/ntnet_conversation/proc/add_status_message(message) - messages.Add("[station_time_timestamp()] -!- [message]") - trim_message_list() - -/datum/ntnet_conversation/proc/trim_message_list() - if(messages.len <= 50) - return - messages = messages.Copy(messages.len-50 ,0) - -/datum/ntnet_conversation/proc/add_client(datum/computer_file/program/chatclient/C) - if(!istype(C)) - return - clients.Add(C) - add_status_message("[C.username] has joined the channel.") - // No operator, so we assume the channel was empty. Assign this user as operator. - if(!operator) - changeop(C) - -/datum/ntnet_conversation/proc/remove_client(datum/computer_file/program/chatclient/C) - if(!istype(C) || !(C in clients)) - return - clients.Remove(C) - add_status_message("[C.username] has left the channel.") - - // Channel operator left, pick new operator - if(C == operator) - operator = null - if(clients.len) - var/datum/computer_file/program/chatclient/newop = pick(clients) - changeop(newop) - - -/datum/ntnet_conversation/proc/changeop(datum/computer_file/program/chatclient/newop) - if(istype(newop)) - operator = newop - add_status_message("Channel operator status transferred to [newop.username].") - -/datum/ntnet_conversation/proc/change_title(newtitle, datum/computer_file/program/chatclient/client) - if(operator != client) - return FALSE // Not Authorised - - add_status_message("[client.username] has changed channel title from [title] to [newtitle]") - title = newtitle diff --git a/code/modules/modular_computers/computers/_modular_computer_shared.dm b/code/modules/modular_computers/computers/_modular_computer_shared.dm deleted file mode 100644 index 8ca93e8347..0000000000 --- a/code/modules/modular_computers/computers/_modular_computer_shared.dm +++ /dev/null @@ -1,64 +0,0 @@ - -/obj/proc/is_modular_computer() - return - -/obj/proc/get_modular_computer_part(part_type) - return null - -/obj/item/modular_computer/is_modular_computer() - return TRUE - -/obj/item/modular_computer/get_modular_computer_part(part_type) - if(!part_type) - stack_trace("get_modular_computer_part() called without a valid part_type") - return null - return all_components[part_type] - - -/obj/machinery/modular_computer/is_modular_computer() - return TRUE - -/obj/machinery/modular_computer/get_modular_computer_part(part_type) - if(!part_type) - stack_trace("get_modular_computer_part() called without a valid part_type") - return null - return cpu?.all_components[part_type] - - -/obj/proc/get_modular_computer_parts_examine(mob/user) - . = list() - if(!is_modular_computer()) - return - - var/user_is_adjacent = Adjacent(user) //don't reveal full details unless they're close enough to see it on the screen anyway. - - var/obj/item/computer_hardware/ai_slot/ai_slot = get_modular_computer_part(MC_AI) - if(ai_slot) - if(ai_slot.stored_card) - if(user_is_adjacent) - . += "It has a slot installed for an intelliCard which contains: [ai_slot.stored_card.name]" - else - . += "It has a slot installed for an intelliCard, which appears to be occupied." - . += "Alt-click to eject the intelliCard." - else - . += "It has a slot installed for an intelliCard." - - var/obj/item/computer_hardware/card_slot/card_slot = get_modular_computer_part(MC_CARD) - if(card_slot) - if(card_slot.stored_card || card_slot.stored_card2) - var/obj/item/card/id/first_ID = card_slot.stored_card - var/obj/item/card/id/second_ID = card_slot.stored_card2 - var/multiple_cards = istype(first_ID) && istype(second_ID) - if(user_is_adjacent) - . += "It has two slots for identification cards installed[multiple_cards ? " which contain [first_ID] and [second_ID]" : ", one of which contains [first_ID ? first_ID : second_ID]"]." - else - . += "It has two slots for identification cards installed, [multiple_cards ? "both of which appear" : "and one of them appears"] to be occupied." - . += "Alt-click [src] to eject the identification card[multiple_cards ? "s":""]." - else - . += "It has two slots installed for identification cards." - - var/obj/item/computer_hardware/printer/printer_slot = get_modular_computer_part(MC_PRINT) - if(printer_slot) - . += "It has a printer installed." - if(user_is_adjacent) - . += "The printer's paper levels are at: [printer_slot.stored_paper]/[printer_slot.max_paper].]" diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm deleted file mode 100644 index c612a4ac22..0000000000 --- a/code/modules/modular_computers/computers/item/computer.dm +++ /dev/null @@ -1,464 +0,0 @@ -// This is the base type that does all the hardware stuff. -// Other types expand it - tablets use a direct subtypes, and -// consoles and laptops use "procssor" item that is held inside machinery piece -/obj/item/modular_computer - name = "modular microcomputer" - desc = "" - - var/enabled = 0 // Whether the computer is turned on. - var/screen_on = 1 // Whether the computer is active/opened/it's screen is on. - var/datum/computer_file/program/active_program = null // A currently active program running on the computer. - var/hardware_flag = 0 // A flag that describes this device type - var/last_power_usage = 0 - var/last_battery_percent = 0 // Used for deciding if battery percentage has chandged - var/last_world_time = "00:00" - var/list/last_header_icons - - var/base_active_power_usage = 50 // Power usage when the computer is open (screen is active) and can be interacted with. Remember hardware can use power too. - var/base_idle_power_usage = 5 // Power usage when the computer is idle and screen is off (currently only applies to laptops) - - // Modular computers can run on various devices. Each DEVICE (Laptop, Console, Tablet,..) - // must have it's own DMI file. Icon states must be called exactly the same in all files, but may look differently - // If you create a program which is limited to Laptops and Consoles you don't have to add it's icon_state overlay for Tablets too, for example. - - icon = 'icons/obj/computer.dmi' - icon_state = "laptop-open" - var/icon_state_unpowered = null // Icon state when the computer is turned off. - var/icon_state_powered = null // Icon state when the computer is turned on. - var/icon_state_menu = "menu" // Icon state overlay when the computer is turned on, but no program is loaded that would override the screen. - var/max_hardware_size = 0 // Maximal hardware w_class. Tablets/PDAs have 1, laptops 2, consoles 4. - var/steel_sheet_cost = 5 // Amount of steel sheets refunded when disassembling an empty frame of this computer. - - integrity_failure = 0.5 - max_integrity = 100 - armor = list("melee" = 0, "bullet" = 20, "laser" = 20, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0) - - // Important hardware (must be installed for computer to work) - - // Optional hardware (improves functionality, but is not critical for computer to work) - - var/list/all_components = list() // List of "connection ports" in this computer and the components with which they are plugged - - var/list/idle_threads // Idle programs on background. They still receive process calls but can't be interacted with. - var/obj/physical = null // Object that represents our computer. It's used for Adjacent() and UI visibility checks. - var/has_light = FALSE //If the computer has a flashlight/LED light/what-have-you installed - var/light_on = FALSE //If that light is enabled - var/comp_light_luminosity = 3 //The brightness of that light - var/comp_light_color //The color of that light - - -/obj/item/modular_computer/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - if(!physical) - physical = src - comp_light_color = "#FFFFFF" - idle_threads = list() - update_icon() - -/obj/item/modular_computer/Destroy() - kill_program(forced = TRUE) - STOP_PROCESSING(SSobj, src) - for(var/H in all_components) - var/obj/item/computer_hardware/CH = all_components[H] - if(CH.holder == src) - CH.on_remove(src) - CH.holder = null - all_components.Remove(CH.device_type) - qdel(CH) - physical = null - return ..() - - -/obj/item/modular_computer/proc/add_verb(path) - switch(path) - if(MC_CARD) - verbs += /obj/item/modular_computer/proc/eject_id - if(MC_SDD) - verbs += /obj/item/modular_computer/proc/eject_disk - if(MC_AI) - verbs += /obj/item/modular_computer/proc/eject_card - -/obj/item/modular_computer/proc/remove_verb(path) - switch(path) - if(MC_CARD) - verbs -= /obj/item/modular_computer/proc/eject_id - if(MC_SDD) - verbs -= /obj/item/modular_computer/proc/eject_disk - if(MC_AI) - verbs -= /obj/item/modular_computer/proc/eject_card - -// Eject ID card from computer, if it has ID slot with card inside. -/obj/item/modular_computer/proc/eject_id() - set name = "Eject ID" - set hidden = 1 - set src in view(1) - - if(issilicon(usr)) - return - var/obj/item/computer_hardware/card_slot/card_slot = all_components[MC_CARD] - if(usr.canUseTopic(src, BE_CLOSE)) - card_slot.try_eject(null, usr) - -// Eject ID card from computer, if it has ID slot with card inside. -/obj/item/modular_computer/proc/eject_card() - set name = "Eject Intellicard" - set hidden = 1 - - if(issilicon(usr)) - return - var/obj/item/computer_hardware/ai_slot/ai_slot = all_components[MC_AI] - if(usr.canUseTopic(src, BE_CLOSE)) - ai_slot.try_eject(null, usr,1) - - -// Eject ID card from computer, if it has ID slot with card inside. -/obj/item/modular_computer/proc/eject_disk() - set name = "Eject Data Disk" - set hidden = 1 - - if(issilicon(usr)) - return - - if(usr.canUseTopic(src, BE_CLOSE)) - var/obj/item/computer_hardware/hard_drive/portable/portable_drive = all_components[MC_SDD] - if(uninstall_component(portable_drive, usr)) - portable_drive.verb_pickup() - -/obj/item/modular_computer/AltClick(mob/user) - ..() - if(issilicon(user)) - return - - if(user.canUseTopic(src, BE_CLOSE)) - var/obj/item/computer_hardware/card_slot/card_slot = all_components[MC_CARD] - var/obj/item/computer_hardware/ai_slot/ai_slot = all_components[MC_AI] - var/obj/item/computer_hardware/hard_drive/portable/portable_drive = all_components[MC_SDD] - if(portable_drive) - if(uninstall_component(portable_drive, user)) - portable_drive.verb_pickup() - else - if(card_slot && card_slot.try_eject(null, user)) - return - if(ai_slot) - ai_slot.try_eject(null, user) - - -// Gets IDs/access levels from card slot. Would be useful when/if PDAs would become modular PCs. -/obj/item/modular_computer/GetAccess() - var/obj/item/computer_hardware/card_slot/card_slot = all_components[MC_CARD] - if(card_slot) - return card_slot.GetAccess() - return ..() - -/obj/item/modular_computer/GetID() - var/obj/item/computer_hardware/card_slot/card_slot = all_components[MC_CARD] - if(card_slot) - return card_slot.GetID() - return ..() - -/obj/item/modular_computer/RemoveID() - var/obj/item/computer_hardware/card_slot/card_slot = all_components[MC_CARD] - if(!card_slot) - return - return card_slot.RemoveID() - -/obj/item/modular_computer/InsertID(obj/item/inserting_item) - var/obj/item/computer_hardware/card_slot/card_slot = all_components[MC_CARD] - if(!card_slot) - return FALSE - var/obj/item/card/inserting_id = inserting_item.RemoveID() - if(!inserting_id) - return FALSE - return card_slot.try_insert(inserting_id) - -/obj/item/modular_computer/MouseDrop(obj/over_object, src_location, over_location) - var/mob/M = usr - if((!istype(over_object, /atom/movable/screen)) && usr.canUseTopic(src, BE_CLOSE)) - return attack_self(M) - return ..() - -/obj/item/modular_computer/attack_ai(mob/user) - return attack_self(user) - -/obj/item/modular_computer/attack_ghost(mob/dead/observer/user) - . = ..() - if(.) - return - if(enabled) - ui_interact(user) - else if(IsAdminGhost(user)) - var/response = alert(user, "This computer is turned off. Would you like to turn it on?", "Admin Override", "Yes", "No") - if(response == "Yes") - turn_on(user) - -/obj/item/modular_computer/emag_act(mob/user) - if(obj_flags & EMAGGED) - to_chat(user, "\The [src] was already emagged.") - return 0 - else - obj_flags |= EMAGGED - to_chat(user, "I emag \the [src]. It's screen briefly shows a \"OVERRIDE ACCEPTED: New software downloads available.\" message.") - return 1 - -/obj/item/modular_computer/examine(mob/user) - . = ..() - if(obj_integrity <= integrity_failure * max_integrity) - . += "It is heavily damaged!" - else if(obj_integrity < max_integrity) - . += "It is damaged." - - . += get_modular_computer_parts_examine(user) - -/obj/item/modular_computer/update_icon() - cut_overlays() - if(!enabled) - icon_state = icon_state_unpowered - else - icon_state = icon_state_powered - if(active_program) - add_overlay(active_program.program_icon_state ? active_program.program_icon_state : icon_state_menu) - else - add_overlay(icon_state_menu) - - if(obj_integrity <= integrity_failure * max_integrity) - add_overlay("bsod") - add_overlay("broken") - - -// On-click handling. Turns on the computer if it's off and opens the GUI. -/obj/item/modular_computer/interact(mob/user) - if(enabled) - ui_interact(user) - else - turn_on(user) - -/obj/item/modular_computer/proc/turn_on(mob/user) - var/issynth = issilicon(user) // Robots and AIs get different activation messages. - if(obj_integrity <= integrity_failure * max_integrity) - if(issynth) - to_chat(user, "I send an activation signal to \the [src], but it responds with an error code. It must be damaged.") - else - to_chat(user, "I press the power button, but the computer fails to boot up, displaying variety of errors before shutting down again.") - return - - // If we have a recharger, enable it automatically. Lets computer without a battery work. - var/obj/item/computer_hardware/recharger/recharger = all_components[MC_CHARGE] - if(recharger) - recharger.enabled = 1 - - if(all_components[MC_CPU] && use_power()) // use_power() checks if the PC is powered - if(issynth) - to_chat(user, "I send an activation signal to \the [src], turning it on.") - else - to_chat(user, "I press the power button and start up \the [src].") - enabled = 1 - update_icon() - ui_interact(user) - else // Unpowered - if(issynth) - to_chat(user, "I send an activation signal to \the [src] but it does not respond.") - else - to_chat(user, "I press the power button but \the [src] does not respond.") - -// Process currently calls handle_power(), may be expanded in future if more things are added. -/obj/item/modular_computer/process() - if(!enabled) // The computer is turned off - last_power_usage = 0 - return 0 - - if(obj_integrity <= integrity_failure * max_integrity) - shutdown_computer() - return 0 - - if(active_program && active_program.requires_ntnet && !get_ntnet_status(active_program.requires_ntnet_feature)) - active_program.event_networkfailure(0) // Active program requires NTNet to run but we've just lost connection. Crash. - - for(var/I in idle_threads) - var/datum/computer_file/program/P = I - if(P.requires_ntnet && !get_ntnet_status(P.requires_ntnet_feature)) - P.event_networkfailure(1) - - if(active_program) - if(active_program.program_state != PROGRAM_STATE_KILLED) - active_program.process_tick() - active_program.ntnet_status = get_ntnet_status() - else - active_program = null - - for(var/I in idle_threads) - var/datum/computer_file/program/P = I - if(P.program_state != PROGRAM_STATE_KILLED) - P.process_tick() - P.ntnet_status = get_ntnet_status() - else - idle_threads.Remove(P) - - handle_power() // Handles all computer power interaction - //check_update_ui_need() - -// Function used by NanoUI's to obtain data for header. All relevant entries begin with "PC_" -/obj/item/modular_computer/proc/get_header_data() - var/list/data = list() - - var/obj/item/computer_hardware/battery/battery_module = all_components[MC_CELL] - var/obj/item/computer_hardware/recharger/recharger = all_components[MC_CHARGE] - - if(battery_module && battery_module.battery) - switch(battery_module.battery.percent()) - if(80 to 200) // 100 should be maximal but just in case.. - data["PC_batteryicon"] = "batt_100.gif" - if(60 to 80) - data["PC_batteryicon"] = "batt_80.gif" - if(40 to 60) - data["PC_batteryicon"] = "batt_60.gif" - if(20 to 40) - data["PC_batteryicon"] = "batt_40.gif" - if(5 to 20) - data["PC_batteryicon"] = "batt_20.gif" - else - data["PC_batteryicon"] = "batt_5.gif" - data["PC_batterypercent"] = "[round(battery_module.battery.percent())]%" - data["PC_showbatteryicon"] = 1 - else - data["PC_batteryicon"] = "batt_5.gif" - data["PC_batterypercent"] = "N/C" - data["PC_showbatteryicon"] = battery_module ? 1 : 0 - - if(recharger && recharger.enabled && recharger.check_functionality() && recharger.use_power(0)) - data["PC_apclinkicon"] = "charging.gif" - - switch(get_ntnet_status()) - if(0) - data["PC_ntneticon"] = "sig_none.gif" - if(1) - data["PC_ntneticon"] = "sig_low.gif" - if(2) - data["PC_ntneticon"] = "sig_high.gif" - if(3) - data["PC_ntneticon"] = "sig_lan.gif" - - if(idle_threads.len) - var/list/program_headers = list() - for(var/I in idle_threads) - var/datum/computer_file/program/P = I - if(!P.ui_header) - continue - program_headers.Add(list(list( - "icon" = P.ui_header - ))) - - data["PC_programheaders"] = program_headers - - data["PC_stationtime"] = station_time_timestamp() - data["PC_hasheader"] = 1 - data["PC_showexitprogram"] = active_program ? 1 : 0 // Hides "Exit Program" button on mainscreen - return data - -// Relays kill program request to currently active program. Use this to quit current program. -/obj/item/modular_computer/proc/kill_program(forced = FALSE) - if(active_program) - active_program.kill_program(forced) - active_program = null - var/mob/user = usr - if(user && istype(user)) - ui_interact(user) // Re-open the UI on this computer. It should show the main screen now. - update_icon() - -// Returns 0 for No Signal, 1 for Low Signal and 2 for Good Signal. 3 is for wired connection (always-on) -/obj/item/modular_computer/proc/get_ntnet_status(specific_action = 0) - var/obj/item/computer_hardware/network_card/network_card = all_components[MC_NET] - if(network_card) - return network_card.get_signal(specific_action) - else - return 0 - -/obj/item/modular_computer/proc/add_log(text) - if(!get_ntnet_status()) - return FALSE - var/obj/item/computer_hardware/network_card/network_card = all_components[MC_NET] - return SSnetworks.station_network.add_log(text, network_card) - -/obj/item/modular_computer/proc/shutdown_computer(loud = 1) - kill_program(forced = TRUE) - for(var/datum/computer_file/program/P in idle_threads) - P.kill_program(forced = TRUE) - idle_threads.Remove(P) - if(loud) - physical.visible_message("\The [src] shuts down.") - enabled = 0 - update_icon() - - -/obj/item/modular_computer/attackby(obj/item/W as obj, mob/user as mob) - // Insert items into the components - for(var/h in all_components) - var/obj/item/computer_hardware/H = all_components[h] - if(H.try_insert(W, user)) - return - - // Insert new hardware - if(istype(W, /obj/item/computer_hardware)) - if(install_component(W, user)) - return - - if(W.tool_behaviour == TOOL_WRENCH) - if(all_components.len) - to_chat(user, "Remove all components from \the [src] before disassembling it.") - return - new /obj/item/stack/sheet/metal( get_turf(src.loc), steel_sheet_cost ) - physical.visible_message("\The [src] has been disassembled by [user].") - relay_qdel() - qdel(src) - return - - if(W.tool_behaviour == TOOL_WELDER) - if(obj_integrity == max_integrity) - to_chat(user, "\The [src] does not require repairs.") - return - - if(!W.tool_start_check(user, amount=1)) - return - - to_chat(user, "I begin repairing damage to \the [src]...") - if(W.use_tool(src, user, 20, volume=50, amount=1)) - obj_integrity = max_integrity - to_chat(user, "I repair \the [src].") - return - - if(W.tool_behaviour == TOOL_SCREWDRIVER) - if(!all_components.len) - to_chat(user, "This device doesn't have any components installed.") - return - var/list/component_names = list() - for(var/h in all_components) - var/obj/item/computer_hardware/H = all_components[h] - component_names.Add(H.name) - - var/choice = input(user, "Which component do you want to uninstall?", "Computer maintenance", null) as null|anything in sortList(component_names) - - if(!choice) - return - - if(!Adjacent(user)) - return - - var/obj/item/computer_hardware/H = find_hardware_by_name(choice) - - if(!H) - return - - uninstall_component(H, user) - return - - ..() - -// Used by processor to relay qdel() to machinery type. -/obj/item/modular_computer/proc/relay_qdel() - return - -// Perform adjacency checks on our physical counterpart, if any. -/obj/item/modular_computer/Adjacent(atom/neighbor) - if(physical && physical != src) - return physical.Adjacent(neighbor) - return ..() diff --git a/code/modules/modular_computers/computers/item/computer_components.dm b/code/modules/modular_computers/computers/item/computer_components.dm deleted file mode 100644 index 468a26d73a..0000000000 --- a/code/modules/modular_computers/computers/item/computer_components.dm +++ /dev/null @@ -1,54 +0,0 @@ -/obj/item/modular_computer/proc/can_install_component(obj/item/computer_hardware/H, mob/living/user = null) - if(!H.can_install(src, user)) - return FALSE - - if(H.w_class > max_hardware_size) - to_chat(user, "This component is too large for \the [src]!") - return FALSE - - if(all_components[H.device_type]) - to_chat(user, "This computer's hardware slot is already occupied by \the [all_components[H.device_type]].") - return FALSE - return TRUE - - -// Installs component. -/obj/item/modular_computer/proc/install_component(obj/item/computer_hardware/H, mob/living/user = null) - if(!can_install_component(H, user)) - return FALSE - - if(user && !user.transferItemToLoc(H, src)) - return FALSE - - all_components[H.device_type] = H - - to_chat(user, "I install \the [H] into \the [src].") - H.holder = src - H.forceMove(src) - H.on_install(src, user) - - -// Uninstalls component. -/obj/item/modular_computer/proc/uninstall_component(obj/item/computer_hardware/H, mob/living/user = null) - if(H.holder != src) // Not our component at all. - return FALSE - - all_components.Remove(H.device_type) - - to_chat(user, "I remove \the [H] from \the [src].") - - H.forceMove(get_turf(src)) - H.holder = null - H.on_remove(src, user) - if(enabled && !use_power()) - shutdown_computer() - update_icon() - - -// Checks all hardware pieces to determine if name matches, if yes, returns the hardware piece, otherwise returns null -/obj/item/modular_computer/proc/find_hardware_by_name(name) - for(var/i in all_components) - var/obj/O = all_components[i] - if(O.name == name) - return O - return null diff --git a/code/modules/modular_computers/computers/item/computer_damage.dm b/code/modules/modular_computers/computers/item/computer_damage.dm deleted file mode 100644 index 6039abeb92..0000000000 --- a/code/modules/modular_computers/computers/item/computer_damage.dm +++ /dev/null @@ -1,31 +0,0 @@ -/obj/item/modular_computer/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) - . = ..() - var/component_probability = min(50, max(damage_amount*0.1, 1 - obj_integrity/max_integrity)) - switch(damage_flag) - if("bullet") - component_probability = damage_amount * 0.5 - if("laser") - component_probability = damage_amount * 0.66 - if(component_probability) - for(var/I in all_components) - var/obj/item/computer_hardware/H = all_components[I] - if(prob(component_probability)) - H.take_damage(round(damage_amount*0.5), damage_type, damage_flag, 0) - - -/obj/item/modular_computer/deconstruct(disassembled = TRUE) - break_apart() - -/obj/item/modular_computer/proc/break_apart() - if(!(flags_1 & NODECONSTRUCT_1)) - physical.visible_message("\The [src] breaks apart!") - var/turf/newloc = get_turf(src) - new /obj/item/stack/sheet/metal(newloc, round(steel_sheet_cost/2)) - for(var/C in all_components) - var/obj/item/computer_hardware/H = all_components[C] - uninstall_component(H) - H.forceMove(newloc) - if(prob(25)) - H.take_damage(rand(10,30), BRUTE, 0, 0) - relay_qdel() - qdel(src) diff --git a/code/modules/modular_computers/computers/item/computer_power.dm b/code/modules/modular_computers/computers/item/computer_power.dm deleted file mode 100644 index d3c65f86ec..0000000000 --- a/code/modules/modular_computers/computers/item/computer_power.dm +++ /dev/null @@ -1,65 +0,0 @@ -// Tries to draw power from charger or, if no operational charger is present, from power cell. -/obj/item/modular_computer/proc/use_power(amount = 0) - if(check_power_override()) - return TRUE - - var/obj/item/computer_hardware/recharger/recharger = all_components[MC_CHARGE] - - if(recharger && recharger.check_functionality()) - if(recharger.use_power(amount)) - return TRUE - - var/obj/item/computer_hardware/battery/battery_module = all_components[MC_CELL] - - if(battery_module && battery_module.battery && battery_module.battery.charge) - var/obj/item/stock_parts/cell/cell = battery_module.battery - if(cell.use(amount * GLOB.CELLRATE)) - return TRUE - else // Discharge the cell anyway. - cell.use(min(amount*GLOB.CELLRATE, cell.charge)) - return FALSE - return FALSE - -/obj/item/modular_computer/proc/give_power(amount) - var/obj/item/computer_hardware/battery/battery_module = all_components[MC_CELL] - if(battery_module && battery_module.battery) - return battery_module.battery.give(amount) - return 0 - -/obj/item/modular_computer/get_cell() - var/obj/item/computer_hardware/battery/battery_module = all_components[MC_CELL] - if(battery_module && battery_module.battery) - return battery_module.battery - -// Used in following function to reduce copypaste -/obj/item/modular_computer/proc/power_failure() - if(enabled) // Shut down the computer - if(active_program) - active_program.event_powerfailure(0) - for(var/I in idle_threads) - var/datum/computer_file/program/PRG = I - PRG.event_powerfailure(1) - shutdown_computer(0) - -// Handles power-related things, such as battery interaction, recharging, shutdown when it's discharged -/obj/item/modular_computer/proc/handle_power() - var/obj/item/computer_hardware/recharger/recharger = all_components[MC_CHARGE] - if(recharger) - recharger.process() - - var/power_usage = screen_on ? base_active_power_usage : base_idle_power_usage - - for(var/obj/item/computer_hardware/H in all_components) - if(H.enabled) - power_usage += H.power_usage - - if(use_power(power_usage)) - last_power_usage = power_usage - return TRUE - else - power_failure() - return FALSE - -// Used by child types if they have other power source than battery or recharger -/obj/item/modular_computer/proc/check_power_override() - return FALSE diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm deleted file mode 100644 index 18c6d7a5a0..0000000000 --- a/code/modules/modular_computers/computers/item/computer_ui.dm +++ /dev/null @@ -1,167 +0,0 @@ -/obj/item/modular_computer/attack_self(mob/user) - . = ..() - ui_interact(user) - -// Operates TGUI -/obj/item/modular_computer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - if(!enabled) - if(ui) - ui.close() - return 0 - if(!use_power()) - if(ui) - ui.close() - return 0 - - // Robots don't really need to see the screen, their wireless connection works as long as computer is on. - if(!screen_on && !issilicon(user)) - if(ui) - ui.close() - return 0 - - // If we have an active program switch to it now. - if(active_program) - if(ui) // This is the main laptop screen. Since we are switching to program's UI close it for now. - ui.close() - active_program.ui_interact(user) - return - - // We are still here, that means there is no program loaded. Load the BIOS/ROM/OS/whatever you want to call it. - // This screen simply lists available programs and user may select them. - var/obj/item/computer_hardware/hard_drive/hard_drive = all_components[MC_HDD] - if(!hard_drive || !hard_drive.stored_files || !hard_drive.stored_files.len) - to_chat(user, "\The [src] beeps three times, it's screen displaying a \"DISK ERROR\" warning.") - return // No HDD, No HDD files list or no stored files. Something is very broken. - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if (!ui) - var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers) - assets.send(user) - ui = new(user, src, ui_key, "ntos_main", "NtOS Main menu", 400, 500, master_ui, state) - ui.set_style("ntos") - ui.open() - ui.set_autoupdate(state = 1) - - -/obj/item/modular_computer/ui_data(mob/user) - var/list/data = get_header_data() - data["programs"] = list() - var/obj/item/computer_hardware/hard_drive/hard_drive = all_components[MC_HDD] - for(var/datum/computer_file/program/P in hard_drive.stored_files) - var/running = 0 - if(P in idle_threads) - running = 1 - - data["programs"] += list(list("name" = P.filename, "desc" = P.filedesc, "running" = running)) - - data["has_light"] = has_light - data["light_on"] = light_on - data["comp_light_color"] = comp_light_color - return data - - -// Handles user's GUI input -/obj/item/modular_computer/ui_act(action, params) - if(..()) - return - var/obj/item/computer_hardware/hard_drive/hard_drive = all_components[MC_HDD] - switch(action) - if("PC_exit") - kill_program() - return TRUE - if("PC_shutdown") - shutdown_computer() - return TRUE - if("PC_minimize") - var/mob/user = usr - if(!active_program || !all_components[MC_CPU]) - return - - idle_threads.Add(active_program) - active_program.program_state = PROGRAM_STATE_BACKGROUND // Should close any existing UIs - - active_program = null - update_icon() - if(user && istype(user)) - ui_interact(user) // Re-open the UI on this computer. It should show the main screen now. - - if("PC_killprogram") - var/prog = params["name"] - var/datum/computer_file/program/P = null - var/mob/user = usr - if(hard_drive) - P = hard_drive.find_file_by_name(prog) - - if(!istype(P) || P.program_state == PROGRAM_STATE_KILLED) - return - - P.kill_program(forced = TRUE) - to_chat(user, "Program [P.filename].[P.filetype] with PID [rand(100,999)] has been killed.") - - if("PC_runprogram") - var/prog = params["name"] - var/datum/computer_file/program/P = null - var/mob/user = usr - if(hard_drive) - P = hard_drive.find_file_by_name(prog) - - if(!P || !istype(P)) // Program not found or it's not executable program. - to_chat(user, "\The [src]'s screen shows \"I/O ERROR - Unable to run program\" warning.") - return - - P.computer = src - - if(!P.is_supported_by_hardware(hardware_flag, 1, user)) - return - - // The program is already running. Resume it. - if(P in idle_threads) - P.program_state = PROGRAM_STATE_ACTIVE - active_program = P - idle_threads.Remove(P) - update_icon() - return - - var/obj/item/computer_hardware/processor_unit/PU = all_components[MC_CPU] - - if(idle_threads.len > PU.max_idle_programs) - to_chat(user, "\The [src] displays a \"Maximal CPU load reached. Unable to run another program.\" error.") - return - - if(P.requires_ntnet && !get_ntnet_status(P.requires_ntnet_feature)) // The program requires NTNet connection, but we are not connected to NTNet. - to_chat(user, "\The [src]'s screen shows \"Unable to connect to NTNet. Please retry. If problem persists contact your system administrator.\" warning.") - return - if(P.run_program(user)) - active_program = P - update_icon() - return 1 - - if("PC_toggle_light") - light_on = !light_on - if(light_on) - set_light(comp_light_luminosity, 1, comp_light_color) - else - set_light(0) - return TRUE - - if("PC_light_color") - var/mob/user = usr - var/new_color - while(!new_color) - new_color = input(user, "Choose a new color for [src]'s flashlight.", "Light Color",light_color) as color|null - if(!new_color) - return - if(color_hex2num(new_color) < 200) //Colors too dark are rejected - to_chat(user, "That color is too dark! Choose a lighter one.") - new_color = null - comp_light_color = new_color - light_color = new_color - update_light() - return TRUE - else - return - -/obj/item/modular_computer/ui_host() - if(physical) - return physical - return src diff --git a/code/modules/modular_computers/computers/item/laptop.dm b/code/modules/modular_computers/computers/item/laptop.dm deleted file mode 100644 index ddeb5d4fd9..0000000000 --- a/code/modules/modular_computers/computers/item/laptop.dm +++ /dev/null @@ -1,109 +0,0 @@ -/obj/item/modular_computer/laptop - name = "laptop" - desc = "" - - icon = 'icons/obj/modular_laptop.dmi' - icon_state = "laptop-closed" - icon_state_powered = "laptop" - icon_state_unpowered = "laptop-off" - icon_state_menu = "menu" - - hardware_flag = PROGRAM_LAPTOP - max_hardware_size = 2 - w_class = WEIGHT_CLASS_NORMAL - - // No running around with open laptops in hands. - item_flags = SLOWS_WHILE_IN_HAND - - screen_on = 0 // Starts closed - var/start_open = TRUE // unless this var is set to 1 - var/icon_state_closed = "laptop-closed" - var/w_class_open = WEIGHT_CLASS_BULKY - var/slowdown_open = TRUE - -/obj/item/modular_computer/laptop/examine(mob/user) - . = ..() - if(screen_on) - . += "Alt-click to close it." - -/obj/item/modular_computer/laptop/Initialize() - . = ..() - - if(start_open && !screen_on) - toggle_open() - -/obj/item/modular_computer/laptop/update_icon() - if(screen_on) - ..() - else - cut_overlays() - icon_state = icon_state_closed - -/obj/item/modular_computer/laptop/attack_self(mob/user) - if(!screen_on) - try_toggle_open(user) - else - return ..() - -/obj/item/modular_computer/laptop/verb/open_computer() - set name = "Toggle Open" - set hidden = 1 - set src in view(1) - - try_toggle_open(usr) - -/obj/item/modular_computer/laptop/MouseDrop(obj/over_object, src_location, over_location) - . = ..() - if(over_object == usr || over_object == src) - try_toggle_open(usr) - else if(istype(over_object, /atom/movable/screen/inventory/hand)) - var/atom/movable/screen/inventory/hand/H = over_object - var/mob/M = usr - - if(!M.restrained() && !M.stat) - if(!isturf(loc) || !Adjacent(M)) - return - M.put_in_hand(src, H.held_index) - -/obj/item/modular_computer/laptop/attack_hand(mob/user) - . = ..() - if(.) - return - if(screen_on && isturf(loc)) - return attack_self(user) - -/obj/item/modular_computer/laptop/proc/try_toggle_open(mob/living/user) - if(issilicon(user)) - return - if(!isturf(loc) && !ismob(loc)) // No opening it in backpack. - return - if(!user.canUseTopic(src, BE_CLOSE)) - return - - toggle_open(user) - - -/obj/item/modular_computer/laptop/AltClick(mob/user) - if(screen_on) // Close it. - try_toggle_open(user) - else - return ..() - -/obj/item/modular_computer/laptop/proc/toggle_open(mob/living/user=null) - if(screen_on) - to_chat(user, "I close \the [src].") - slowdown = initial(slowdown) - w_class = initial(w_class) - else - to_chat(user, "I open \the [src].") - slowdown = slowdown_open - w_class = w_class_open - - screen_on = !screen_on - update_icon() - - - -// Laptop frame, starts empty and closed. -/obj/item/modular_computer/laptop/buildable - start_open = FALSE diff --git a/code/modules/modular_computers/computers/item/laptop_presets.dm b/code/modules/modular_computers/computers/item/laptop_presets.dm deleted file mode 100644 index fdfadb4981..0000000000 --- a/code/modules/modular_computers/computers/item/laptop_presets.dm +++ /dev/null @@ -1,23 +0,0 @@ -/obj/item/modular_computer/laptop/preset/Initialize() - . = ..() - install_component(new /obj/item/computer_hardware/processor_unit/small) - install_component(new /obj/item/computer_hardware/battery(src, /obj/item/stock_parts/cell/computer)) - install_component(new /obj/item/computer_hardware/hard_drive) - install_component(new /obj/item/computer_hardware/network_card) - install_programs() - - -/obj/item/modular_computer/laptop/preset/proc/install_programs() - return - - - - -/obj/item/modular_computer/laptop/preset/civillian - desc = "" - - -/obj/item/modular_computer/laptop/preset/civillian/install_programs() - var/obj/item/computer_hardware/hard_drive/hard_drive = all_components[MC_HDD] - hard_drive.store_file(new/datum/computer_file/program/chatclient()) - hard_drive.store_file(new/datum/computer_file/program/nttransfer()) diff --git a/code/modules/modular_computers/computers/item/processor.dm b/code/modules/modular_computers/computers/item/processor.dm deleted file mode 100644 index 85c1bd74ad..0000000000 --- a/code/modules/modular_computers/computers/item/processor.dm +++ /dev/null @@ -1,80 +0,0 @@ -// Held by /obj/machinery/modular_computer to reduce amount of copy-pasted code. -//TODO: REFACTOR THIS SPAGHETTI CODE, MAKE IT A COMPUTER_HARDWARE COMPONENT OR REMOVE IT -/obj/item/modular_computer/processor - name = "processing unit" - desc = "" - icon = null - icon_state = null - icon_state_unpowered = null - icon_state_menu = null - hardware_flag = 0 - - var/obj/machinery/modular_computer/machinery_computer = null - -/obj/item/modular_computer/processor/Destroy() - . = ..() - if(machinery_computer && (machinery_computer.cpu == src)) - machinery_computer.cpu = null - machinery_computer = null - -/obj/item/modular_computer/processor/New(comp) - ..() - STOP_PROCESSING(SSobj, src) // Processed by its machine - - if(!comp || !istype(comp, /obj/machinery/modular_computer)) - CRASH("Inapropriate type passed to obj/item/modular_computer/processor/New()! Aborting.") - // Obtain reference to machinery computer - all_components = list() - idle_threads = list() - machinery_computer = comp - machinery_computer.cpu = src - hardware_flag = machinery_computer.hardware_flag - max_hardware_size = machinery_computer.max_hardware_size - steel_sheet_cost = machinery_computer.steel_sheet_cost - obj_integrity = machinery_computer.obj_integrity - max_integrity = machinery_computer.max_integrity - integrity_failure = machinery_computer.integrity_failure - base_active_power_usage = machinery_computer.base_active_power_usage - base_idle_power_usage = machinery_computer.base_idle_power_usage - -/obj/item/modular_computer/processor/relay_qdel() - qdel(machinery_computer) - -/obj/item/modular_computer/processor/update_icon() - if(machinery_computer) - return machinery_computer.update_icon() - -// This thing is not meant to be used on it's own, get topic data from our machinery owner. -//obj/item/modular_computer/processor/canUseTopic(atom/movable/M, be_close=FALSE, no_dexterity=FALSE, no_tk=FALSE) -// if(!machinery_computer) -// return 0 - -// return machinery_computer.canUseTopic(user, state) - -/obj/item/modular_computer/processor/shutdown_computer() - if(!machinery_computer) - return - ..() - machinery_computer.update_icon() - return - -/obj/item/modular_computer/processor/add_verb(path) - switch(path) - if(MC_CARD) - machinery_computer.verbs += /obj/machinery/modular_computer/proc/eject_id - if(MC_SDD) - machinery_computer.verbs += /obj/machinery/modular_computer/proc/eject_disk - if(MC_AI) - machinery_computer.verbs += /obj/machinery/modular_computer/proc/eject_card - -/obj/item/modular_computer/processor/remove_verb(path) - switch(path) - if(MC_CARD) - machinery_computer.verbs -= /obj/machinery/modular_computer/proc/eject_id - if(MC_SDD) - machinery_computer.verbs -= /obj/machinery/modular_computer/proc/eject_disk - if(MC_AI) - machinery_computer.verbs -= /obj/machinery/modular_computer/proc/eject_card - -/obj/item/modular_computer/processor/attack_ghost(mob/user) - ui_interact(user) diff --git a/code/modules/modular_computers/computers/item/tablet.dm b/code/modules/modular_computers/computers/item/tablet.dm deleted file mode 100644 index a8c6fda6b4..0000000000 --- a/code/modules/modular_computers/computers/item/tablet.dm +++ /dev/null @@ -1,37 +0,0 @@ -/obj/item/modular_computer/tablet //Its called tablet for theme of 90ies but actually its a "big smartphone" sized - name = "tablet computer" - icon = 'icons/obj/modular_tablet.dmi' - icon_state = "tablet-red" - icon_state_unpowered = "tablet" - icon_state_powered = "tablet" - icon_state_menu = "menu" - hardware_flag = PROGRAM_TABLET - max_hardware_size = 1 - w_class = WEIGHT_CLASS_SMALL - steel_sheet_cost = 1 - slot_flags = ITEM_SLOT_RING | ITEM_SLOT_BELT - has_light = TRUE //LED flashlight! - comp_light_luminosity = 2.3 //Same as the PDA - var/has_variants = TRUE - var/finish_color = null - -/obj/item/modular_computer/tablet/update_icon() - ..() - if (has_variants) - if(!finish_color) - finish_color = pick("red","blue","brown","green","black") - icon_state = "tablet-[finish_color]" - icon_state_unpowered = "tablet-[finish_color]" - icon_state_powered = "tablet-[finish_color]" - -/obj/item/modular_computer/tablet/syndicate_contract_uplink - name = "contractor tablet" - icon = 'icons/obj/contractor_tablet.dmi' - icon_state = "tablet" - icon_state_unpowered = "tablet" - icon_state_powered = "tablet" - icon_state_menu = "assign" - w_class = WEIGHT_CLASS_SMALL - slot_flags = ITEM_SLOT_RING | ITEM_SLOT_BELT - comp_light_luminosity = 6.3 - has_variants = FALSE diff --git a/code/modules/modular_computers/computers/item/tablet_presets.dm b/code/modules/modular_computers/computers/item/tablet_presets.dm deleted file mode 100644 index 29982ae08a..0000000000 --- a/code/modules/modular_computers/computers/item/tablet_presets.dm +++ /dev/null @@ -1,48 +0,0 @@ - -// This is literally the worst possible cheap tablet -/obj/item/modular_computer/tablet/preset/cheap - desc = "" - -/obj/item/modular_computer/tablet/preset/cheap/Initialize() - . = ..() - install_component(new /obj/item/computer_hardware/processor_unit/small) - install_component(new /obj/item/computer_hardware/battery(src, /obj/item/stock_parts/cell/computer/micro)) - install_component(new /obj/item/computer_hardware/hard_drive/small) - install_component(new /obj/item/computer_hardware/network_card) - -// Alternative version, an average one, for higher ranked positions mostly -/obj/item/modular_computer/tablet/preset/advanced/Initialize() - . = ..() - install_component(new /obj/item/computer_hardware/processor_unit/small) - install_component(new /obj/item/computer_hardware/battery(src, /obj/item/stock_parts/cell/computer)) - install_component(new /obj/item/computer_hardware/hard_drive/small) - install_component(new /obj/item/computer_hardware/network_card) - install_component(new /obj/item/computer_hardware/card_slot) - install_component(new /obj/item/computer_hardware/printer/mini) - -/obj/item/modular_computer/tablet/preset/cargo/Initialize() - . = ..() - install_component(new /obj/item/computer_hardware/processor_unit/small) - install_component(new /obj/item/computer_hardware/battery(src, /obj/item/stock_parts/cell/computer)) - install_component(new /obj/item/computer_hardware/hard_drive/small) - install_component(new /obj/item/computer_hardware/network_card) - install_component(new /obj/item/computer_hardware/printer/mini) - -/// Given by the syndicate as part of the contract uplink bundle - loads in the Contractor Uplink. -/obj/item/modular_computer/tablet/syndicate_contract_uplink/preset/uplink/Initialize() - . = ..() - var/obj/item/computer_hardware/hard_drive/small/syndicate/hard_drive = new - var/datum/computer_file/program/contract_uplink/uplink = new - - active_program = uplink - uplink.program_state = PROGRAM_STATE_ACTIVE - uplink.computer = src - - hard_drive.store_file(uplink) - - install_component(new /obj/item/computer_hardware/processor_unit/small) - install_component(new /obj/item/computer_hardware/battery(src, /obj/item/stock_parts/cell/computer)) - install_component(hard_drive) - install_component(new /obj/item/computer_hardware/network_card) - install_component(new /obj/item/computer_hardware/card_slot) - install_component(new /obj/item/computer_hardware/printer/mini) diff --git a/code/modules/modular_computers/computers/machinery/console_presets.dm b/code/modules/modular_computers/computers/machinery/console_presets.dm deleted file mode 100644 index 553307fcc8..0000000000 --- a/code/modules/modular_computers/computers/machinery/console_presets.dm +++ /dev/null @@ -1,79 +0,0 @@ -/obj/machinery/modular_computer/console/preset - // Can be changed to give devices specific hardware - var/_has_id_slot = FALSE - var/_has_printer = FALSE - var/_has_battery = FALSE - var/_has_ai = FALSE - -/obj/machinery/modular_computer/console/preset/Initialize() - . = ..() - if(!cpu) - return - cpu.install_component(new /obj/item/computer_hardware/processor_unit) - - if(_has_id_slot) - cpu.install_component(new /obj/item/computer_hardware/card_slot) - if(_has_printer) - cpu.install_component(new /obj/item/computer_hardware/printer) - if(_has_battery) - cpu.install_component(new /obj/item/computer_hardware/battery(cpu, /obj/item/stock_parts/cell/computer/super)) - if(_has_ai) - cpu.install_component(new /obj/item/computer_hardware/ai_slot) - install_programs() - -// Override in child types to install preset-specific programs. -/obj/machinery/modular_computer/console/preset/proc/install_programs() - return - - - -// ===== ENGINEERING CONSOLE ===== -/obj/machinery/modular_computer/console/preset/engineering - console_department = "Engineering" - name = "engineering console" - desc = "" - -/obj/machinery/modular_computer/console/preset/engineering/install_programs() - var/obj/item/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD] - hard_drive.store_file(new/datum/computer_file/program/power_monitor()) - hard_drive.store_file(new/datum/computer_file/program/alarm_monitor()) - hard_drive.store_file(new/datum/computer_file/program/supermatter_monitor()) - -// ===== RESEARCH CONSOLE ===== -/obj/machinery/modular_computer/console/preset/research - console_department = "Research" - name = "research director's console" - desc = "" - _has_ai = TRUE - -/obj/machinery/modular_computer/console/preset/research/install_programs() - var/obj/item/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD] - hard_drive.store_file(new/datum/computer_file/program/ntnetmonitor()) - hard_drive.store_file(new/datum/computer_file/program/nttransfer()) - hard_drive.store_file(new/datum/computer_file/program/chatclient()) - hard_drive.store_file(new/datum/computer_file/program/aidiag()) - - -// ===== COMMAND CONSOLE ===== -/obj/machinery/modular_computer/console/preset/command - console_department = "Command" - name = "command console" - desc = "" - _has_id_slot = TRUE - _has_printer = TRUE - -/obj/machinery/modular_computer/console/preset/command/install_programs() - var/obj/item/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD] - hard_drive.store_file(new/datum/computer_file/program/chatclient()) - hard_drive.store_file(new/datum/computer_file/program/card_mod()) - -// ===== CIVILIAN CONSOLE ===== -/obj/machinery/modular_computer/console/preset/civilian - console_department = "Civilian" - name = "civilian console" - desc = "" - -/obj/machinery/modular_computer/console/preset/civilian/install_programs() - var/obj/item/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD] - hard_drive.store_file(new/datum/computer_file/program/chatclient()) - hard_drive.store_file(new/datum/computer_file/program/nttransfer()) diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm deleted file mode 100644 index d336758e1c..0000000000 --- a/code/modules/modular_computers/computers/machinery/modular_computer.dm +++ /dev/null @@ -1,161 +0,0 @@ -// Modular Computer - device that runs various programs and operates with hardware -// DO NOT SPAWN THIS TYPE. Use /laptop/ or /console/ instead. -/obj/machinery/modular_computer - name = "modular computer" - desc = "" - - use_power = IDLE_POWER_USE - idle_power_usage = 5 - var/hardware_flag = 0 // A flag that describes this device type - var/last_power_usage = 0 // Power usage during last tick - - // Modular computers can run on various devices. Each DEVICE (Laptop, Console, Tablet,..) - // must have it's own DMI file. Icon states must be called exactly the same in all files, but may look differently - // If you create a program which is limited to Laptops and Consoles you don't have to add it's icon_state overlay for Tablets too, for example. - - icon = null - icon_state = null - var/icon_state_unpowered = null // Icon state when the computer is turned off. - var/icon_state_powered = null // Icon state when the computer is turned on. - var/screen_icon_state_menu = "menu" // Icon state overlay when the computer is turned on, but no program is loaded that would override the screen. - var/screen_icon_screensaver = "standby" // Icon state overlay when the computer is powered, but not 'switched on'. - var/max_hardware_size = 0 // Maximal hardware size. Currently, tablets have 1, laptops 2 and consoles 3. Limits what hardware types can be installed. - var/steel_sheet_cost = 10 // Amount of steel sheets refunded when disassembling an empty frame of this computer. - var/light_strength = 0 // Light luminosity when turned on - var/base_active_power_usage = 100 // Power usage when the computer is open (screen is active) and can be interacted with. Remember hardware can use power too. - var/base_idle_power_usage = 10 // Power usage when the computer is idle and screen is off (currently only applies to laptops) - - var/obj/item/modular_computer/processor/cpu = null // CPU that handles most logic while this type only handles power and other specific things. - -/obj/machinery/modular_computer/Initialize() - . = ..() - cpu = new(src) - cpu.physical = src - -/obj/machinery/modular_computer/Destroy() - QDEL_NULL(cpu) - return ..() - -/obj/machinery/modular_computer/examine(mob/user) - . = ..() - . += get_modular_computer_parts_examine(user) - -/obj/machinery/modular_computer/attack_ghost(mob/dead/observer/user) - . = ..() - if(.) - return - if(cpu) - cpu.attack_ghost(user) - -/obj/machinery/modular_computer/emag_act(mob/user) - return cpu ? cpu.emag_act(user) : 1 - -/obj/machinery/modular_computer/update_icon() - cut_overlays() - icon_state = icon_state_powered - - if(!cpu || !cpu.enabled) - if (!(stat & NOPOWER) && (cpu && cpu.use_power())) - add_overlay(screen_icon_screensaver) - else - icon_state = icon_state_unpowered - set_light(0) - else - set_light(light_strength) - if(cpu.active_program) - add_overlay(cpu.active_program.program_icon_state ? cpu.active_program.program_icon_state : screen_icon_state_menu) - else - add_overlay(screen_icon_state_menu) - - if(cpu && cpu.obj_integrity <= cpu.integrity_failure * cpu.max_integrity) - add_overlay("bsod") - add_overlay("broken") - -// Eject ID card from computer, if it has ID slot with card inside. -/obj/machinery/modular_computer/proc/eject_id() - set name = "Eject ID" - set hidden = 1 - - if(cpu) - cpu.eject_id() - -// Eject ID card from computer, if it has ID slot with card inside. -/obj/machinery/modular_computer/proc/eject_disk() - set name = "Eject Data Disk" - set hidden = 1 - - if(cpu) - cpu.eject_disk() - -/obj/machinery/modular_computer/proc/eject_card() - set name = "Eject Intellicard" - set hidden = 1 - set src in view(1) - - if(cpu) - cpu.eject_card() - -/obj/machinery/modular_computer/AltClick(mob/user) - if(cpu) - cpu.AltClick(user) - -//ATTACK HAND IGNORING PARENT RETURN VALUE -// On-click handling. Turns on the computer if it's off and opens the GUI. -/obj/machinery/modular_computer/interact(mob/user) - if(cpu) - return cpu.interact(user) // CPU is an item, that's why we route attack_hand to attack_self - else - return ..() - -// Process currently calls handle_power(), may be expanded in future if more things are added. -/obj/machinery/modular_computer/process() - if(cpu) - // Keep names in sync. - cpu.name = name - cpu.process() - -// Used in following function to reduce copypaste -/obj/machinery/modular_computer/proc/power_failure(malfunction = 0) - var/obj/item/computer_hardware/battery/battery_module = cpu.all_components[MC_CELL] - if(cpu && cpu.enabled) // Shut down the computer - visible_message("\The [src]'s screen flickers [battery_module ? "\"BATTERY [malfunction ? "MALFUNCTION" : "CRITICAL"]\"" : "\"EXTERNAL POWER LOSS\""] warning as it shuts down unexpectedly.") - if(cpu) - cpu.shutdown_computer(0) - stat |= NOPOWER - update_icon() - -// Modular computers can have battery in them, we handle power in previous proc, so prevent this from messing it up for us. -/obj/machinery/modular_computer/power_change() - if(cpu && cpu.use_power()) // If MC_CPU still has a power source, PC wouldn't go offline. - stat &= ~NOPOWER - update_icon() - return - . = ..() - -/obj/machinery/modular_computer/attackby(obj/item/W as obj, mob/user) - if(cpu && !(flags_1 & NODECONSTRUCT_1)) - return cpu.attackby(W, user) - return ..() - - -// Stronger explosions cause serious damage to internal components -// Minor explosions are mostly mitigitated by casing. -/obj/machinery/modular_computer/ex_act(severity) - if(cpu) - cpu.ex_act(severity) - ..() - -// EMPs are similar to explosions, but don't cause physical damage to the casing. Instead they screw up the components -/obj/machinery/modular_computer/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_CONTENTS) - return - if(cpu) - cpu.emp_act(severity) - -// "Stun" weapons can cause minor damage to components (short-circuits?) -// "Burn" damage is equally strong against internal components and exterior casing -// "Brute" damage mostly damages the casing. -/obj/machinery/modular_computer/bullet_act(obj/projectile/Proj) - if(cpu) - cpu.bullet_act(Proj) diff --git a/code/modules/modular_computers/computers/machinery/modular_console.dm b/code/modules/modular_computers/computers/machinery/modular_console.dm deleted file mode 100644 index 188425ee24..0000000000 --- a/code/modules/modular_computers/computers/machinery/modular_console.dm +++ /dev/null @@ -1,55 +0,0 @@ -/obj/machinery/modular_computer/console - name = "console" - desc = "" - - icon = 'icons/obj/modular_console.dmi' - icon_state = "console" - icon_state_powered = "console" - icon_state_unpowered = "console-off" - screen_icon_state_menu = "menu" - hardware_flag = PROGRAM_CONSOLE - density = TRUE - base_idle_power_usage = 100 - base_active_power_usage = 500 - max_hardware_size = 4 - steel_sheet_cost = 10 - light_strength = 2 - max_integrity = 300 - integrity_failure = 0.5 - var/console_department = "" // Used in New() to set network tag according to our area. - -/obj/machinery/modular_computer/console/buildable/Initialize() - . = ..() - // User-built consoles start as empty frames. - var/obj/item/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD] - var/obj/item/computer_hardware/hard_drive/network_card = cpu.all_components[MC_NET] - var/obj/item/computer_hardware/hard_drive/recharger = cpu.all_components[MC_CHARGE] - qdel(recharger) - qdel(network_card) - qdel(hard_drive) - -/obj/machinery/modular_computer/console/Initialize() - . = ..() - var/obj/item/computer_hardware/battery/battery_module = cpu.all_components[MC_CELL] - if(battery_module) - qdel(battery_module) - - var/obj/item/computer_hardware/network_card/wired/network_card = new() - - cpu.install_component(network_card) - cpu.install_component(new /obj/item/computer_hardware/recharger/APC) - cpu.install_component(new /obj/item/computer_hardware/hard_drive/super) // Consoles generally have better HDDs due to lower space limitations - - var/area/A = get_area(src) - // Attempts to set this console's tag according to our area. Since some areas have stuff like "XX - YY" in their names we try to remove that too. - if(A && console_department) - network_card.identification_string = replacetext(replacetext(replacetext("[A.name] [console_department] Console", " ", "_"), "-", ""), "__", "_") // Replace spaces with "_" - else if(A) - network_card.identification_string = replacetext(replacetext(replacetext("[A.name] Console", " ", "_"), "-", ""), "__", "_") - else if(console_department) - network_card.identification_string = replacetext(replacetext(replacetext("[console_department] Console", " ", "_"), "-", ""), "__", "_") - else - network_card.identification_string = "Unknown Console" - if(cpu) - cpu.screen_on = 1 - update_icon() diff --git a/code/modules/modular_computers/documentation.md b/code/modules/modular_computers/documentation.md deleted file mode 100644 index 88d059da7a..0000000000 --- a/code/modules/modular_computers/documentation.md +++ /dev/null @@ -1,76 +0,0 @@ -# Modular computer programs - -How module computer programs work - -Ok. so a quick rundown on how to make a program. This is kind of a shitty documentation, but oh well I was asked to. - -## Base setup - -This is how the base program is setup. the rest is mostly tgui stuff. I'll use the ntnetmonitor as a base - -```DM -/datum/computer_file/program/ntnetmonitor - /// This is obviously the name of the file itself. not much to be said - filename = "ntmonitor" - - /// This is sort of the official name. it's what shows up on the main menu - filedesc = "NTNet Diagnostics and Monitoring" - - /// This is what the screen will look like when the program is active - program_icon_state = "comm_monitor" - - /// This is a sort of a description, visible when looking on the ntnet - extended_desc = "This program is a dummy." - - /// size of the program. Big programs need more hard drive space. Don't - /// make it too big though. - size = 12 - - /// If this is set, the program will not run without an ntnet connection, - /// and will close if the connection is lost. Mainly for primarily online - /// programs. - requires_ntnet = 1 - - /// This is access required to run the program itself. ONLY SET THIS FOR - /// SUPER SECURE SHIT. This also acts as transfer_access as well. - required_access = access_network - - /// This is the access needed to download from ntnet or host on the ptp - /// program. This is what you want to use most of the time. - transfer_access = access_change_ids - - /// If it's available to download on ntnet. pretty self explanatory. - available_on_ntnet = 1 - - /// ditto but on emagged syndie net. Use this for antag programs - available_on_syndinet = 0 - - /// Bitflags (PROGRAM_CONSOLE, PROGRAM_LAPTOP, PROGRAM_TABLET combination) - /// or PROGRAM_ALL. Use this to limit what kind of machines can run the - /// program. For example, comms program should be limited to consoles and laptops. - usage_flags = PROGRAM_ALL - - /// This one is kinda cool. If you have the program minimized, this will - /// show up in the header of the computer screen. You can even have the - /// program change what the header is based on the situation! See `alarm.dm` - /// for an example. - var/ui_header = "downloader_finished.gif" -``` - -## Preinstalls - -Now. for pre-installing stuff. - -Primarily done for consoles, there's an install_programs() proc in the console presets file in the machines folder. - -for example, the command console one. - -```DM -/obj/machinery/modular_computer/console/preset/command/install_programs() - cpu.hard_drive.store_file(new/datum/computer_file/program/chatclient()) - cpu.hard_drive.store_file(new/datum/computer_file/program/card_mod()) -``` -Basically, you want to do cpu.hard_drive.store_file(new/*program path here*()) and put it in the subtype's install_programs(). -Probably pretty self explanatory, but just in case. - -Will probably be expanded when new features come around or I get asked to mention something. diff --git a/code/modules/modular_computers/file_system/computer_file.dm b/code/modules/modular_computers/file_system/computer_file.dm deleted file mode 100644 index 2e2aa8e9eb..0000000000 --- a/code/modules/modular_computers/file_system/computer_file.dm +++ /dev/null @@ -1,37 +0,0 @@ -/datum/computer_file - var/filename = "NewFile" // Placeholder. No spacebars - var/filetype = "XXX" // File full names are [filename].[filetype] so like NewFile.XXX in this case - var/size = 1 // File size in GQ. Integers only! - var/obj/item/computer_hardware/hard_drive/holder // Holder that contains this file. - var/unsendable = 0 // Whether the file may be sent to someone via NTNet transfer or other means. - var/undeletable = 0 // Whether the file may be deleted. Setting to 1 prevents deletion/renaming/etc. - var/uid // UID of this file - var/static/file_uid = 0 - -/datum/computer_file/New() - ..() - uid = file_uid++ - -/datum/computer_file/Destroy() - if(!holder) - return ..() - - holder.remove_file(src) - // holder.holder is the computer that has drive installed. If we are Destroy()ing program that's currently running kill it. - if(holder.holder && holder.holder.active_program == src) - holder.holder.kill_program(forced = TRUE) - holder = null - return ..() - -// Returns independent copy of this file. -/datum/computer_file/proc/clone(rename = 0) - var/datum/computer_file/temp = new type - temp.unsendable = unsendable - temp.undeletable = undeletable - temp.size = size - if(rename) - temp.filename = filename + "(Copy)" - else - temp.filename = filename - temp.filetype = filetype - return temp diff --git a/code/modules/modular_computers/file_system/data.dm b/code/modules/modular_computers/file_system/data.dm deleted file mode 100644 index 32ef6f53dd..0000000000 --- a/code/modules/modular_computers/file_system/data.dm +++ /dev/null @@ -1,20 +0,0 @@ -// /data/ files store data in string format. -// They don't contain other logic for now. -/datum/computer_file/data - var/stored_data = "" // Stored data in string format. - filetype = "DAT" - var/block_size = 250 - var/do_not_edit = 0 // Whether the user will be reminded that the file probably shouldn't be edited. - -/datum/computer_file/data/clone() - var/datum/computer_file/data/temp = ..() - temp.stored_data = stored_data - return temp - -// Calculates file size from amount of characters in saved string -/datum/computer_file/data/proc/calculate_size() - size = max(1, round(length(stored_data) / block_size)) - -/datum/computer_file/data/logfile - filetype = "LOG" - diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm deleted file mode 100644 index 1fbae3640f..0000000000 --- a/code/modules/modular_computers/file_system/program.dm +++ /dev/null @@ -1,198 +0,0 @@ -// /program/ files are executable programs that do things. -/datum/computer_file/program - filetype = "PRG" - filename = "UnknownProgram" // File name. FILE NAME MUST BE UNIQUE IF YOU WANT THE PROGRAM TO BE DOWNLOADABLE FROM NTNET! - var/required_access = null // List of required accesses to *run* the program. - var/transfer_access = null // List of required access to download or file host the program - var/program_state = PROGRAM_STATE_KILLED// PROGRAM_STATE_KILLED or PROGRAM_STATE_BACKGROUND or PROGRAM_STATE_ACTIVE - specifies whether this program is running. - var/obj/item/modular_computer/computer // Device that runs this program. - var/filedesc = "" // User-friendly name of this program. - var/extended_desc = "" // Short description of this program's function. - var/program_icon_state = null // Program-specific screen icon state - var/requires_ntnet = 0 // Set to 1 for program to require nonstop NTNet connection to run. If NTNet connection is lost program crashes. - var/requires_ntnet_feature = 0 // Optional, if above is set to 1 checks for specific function of NTNet (currently NTNET_SOFTWAREDOWNLOAD, NTNET_PEERTOPEER, NTNET_SYSTEMCONTROL and NTNET_COMMUNICATION) - var/ntnet_status = 1 // NTNet status, updated every tick by computer running this program. Don't use this for checks if NTNet works, computers do that. Use this for calculations, etc. - var/usage_flags = PROGRAM_ALL // Bitflags (PROGRAM_CONSOLE, PROGRAM_LAPTOP, PROGRAM_TABLET combination) or PROGRAM_ALL - var/network_destination = null // Optional string that describes what NTNet server/system this program connects to. Used in default logging. - var/available_on_ntnet = 1 // Whether the program can be downloaded from NTNet. Set to 0 to disable. - var/available_on_syndinet = 0 // Whether the program can be downloaded from SyndiNet (accessible via emagging the computer). Set to 1 to enable. - var/tgui_id // ID of TGUI interface - var/ui_style // ID of custom TGUI style (optional) - var/ui_x = 575 // Default size of TGUI window, in pixels - var/ui_y = 700 - var/ui_header = null // Example: "something.gif" - a header image that will be rendered in computer's UI when this program is running at background. Images are taken from /icons/program_icons. Be careful not to use too large images! - -/datum/computer_file/program/New(obj/item/modular_computer/comp = null) - ..() - if(comp && istype(comp)) - computer = comp - -/datum/computer_file/program/Destroy() - computer = null - . = ..() - -/datum/computer_file/program/clone() - var/datum/computer_file/program/temp = ..() - temp.required_access = required_access - temp.filedesc = filedesc - temp.program_icon_state = program_icon_state - temp.requires_ntnet = requires_ntnet - temp.requires_ntnet_feature = requires_ntnet_feature - temp.usage_flags = usage_flags - return temp - -// Relays icon update to the computer. -/datum/computer_file/program/proc/update_computer_icon() - if(computer) - computer.update_icon() - -// Attempts to create a log in global ntnet datum. Returns 1 on success, 0 on fail. -/datum/computer_file/program/proc/generate_network_log(text) - if(computer) - return computer.add_log(text) - return 0 - -/datum/computer_file/program/proc/is_supported_by_hardware(hardware_flag = 0, loud = 0, mob/user = null) - if(!(hardware_flag & usage_flags)) - if(loud && computer && user) - to_chat(user, "\The [computer] flashes an \"Hardware Error - Incompatible software\" warning.") - return 0 - return 1 - -/datum/computer_file/program/proc/get_signal(specific_action = 0) - if(computer) - return computer.get_ntnet_status(specific_action) - return 0 - -// Called by Process() on device that runs us, once every tick. -/datum/computer_file/program/proc/process_tick() - return 1 - -// Check if the user can run program. Only humans can operate computer. Automatically called in run_program() -// User has to wear their ID for ID Scan to work. -// Can also be called manually, with optional parameter being access_to_check to scan the user's ID -/datum/computer_file/program/proc/can_run(mob/user, loud = 0, access_to_check, transfer = 0) - // Defaults to required_access - if(!access_to_check) - if(transfer && transfer_access) - access_to_check = transfer_access - else - access_to_check = required_access - if(!access_to_check) // No required_access, allow it. - return 1 - - if(!transfer && computer && (computer.obj_flags & EMAGGED)) //emags can bypass the execution locks but not the download ones. - return 1 - - if(IsAdminGhost(user)) - return 1 - - if(issilicon(user)) - return 1 - - if(ishuman(user)) - var/obj/item/card/id/D - var/obj/item/computer_hardware/card_slot/card_slot - if(computer && card_slot) - card_slot = computer.all_components[MC_CARD] - D = card_slot.GetID() - var/mob/living/carbon/human/h = user - var/obj/item/card/id/I = h.get_idcard(TRUE) - - if(!I && !D) - if(loud) - to_chat(user, "\The [computer] flashes an \"RFID Error - Unable to scan ID\" warning.") - return 0 - - if(I) - if(access_to_check in I.GetAccess()) - return 1 - else if(D) - if(access_to_check in D.GetAccess()) - return 1 - if(loud) - to_chat(user, "\The [computer] flashes an \"Access Denied\" warning.") - return 0 - -// This attempts to retrieve header data for UIs. If implementing completely new device of different type than existing ones -// always include the device here in this proc. This proc basically relays the request to whatever is running the program. -/datum/computer_file/program/proc/get_header_data() - if(computer) - return computer.get_header_data() - return list() - -// This is performed on program startup. May be overridden to add extra logic. Remember to include ..() call. Return 1 on success, 0 on failure. -// When implementing new program based device, use this to run the program. -/datum/computer_file/program/proc/run_program(mob/living/user) - if(can_run(user, 1)) - if(requires_ntnet && network_destination) - generate_network_log("Connection opened to [network_destination].") - program_state = PROGRAM_STATE_ACTIVE - return 1 - return 0 - -// Use this proc to kill the program. Designed to be implemented by each program if it requires on-quit logic, such as the NTNRC client. -/datum/computer_file/program/proc/kill_program(forced = FALSE) - program_state = PROGRAM_STATE_KILLED - if(network_destination) - generate_network_log("Connection to [network_destination] closed.") - return 1 - - -/datum/computer_file/program/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui && tgui_id) - var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers) - assets.send(user) - - ui = new(user, src, ui_key, tgui_id, filedesc, ui_x, ui_y, state = state) - - if(ui_style) - ui.set_style(ui_style) - ui.set_autoupdate(state = 1) - ui.open() - -// CONVENTIONS, READ THIS WHEN CREATING NEW PROGRAM AND OVERRIDING THIS PROC: -// Topic calls are automagically forwarded from NanoModule this program contains. -// Calls beginning with "PRG_" are reserved for programs handling. -// Calls beginning with "PC_" are reserved for computer handling (by whatever runs the program) -// ALWAYS INCLUDE PARENT CALL ..() OR DIE IN FIRE. -/datum/computer_file/program/ui_act(action,params,datum/tgui/ui) - if(..()) - return 1 - if(computer) - switch(action) - if("PC_exit") - computer.kill_program() - ui.close() - return 1 - if("PC_shutdown") - computer.shutdown_computer() - ui.close() - return 1 - if("PC_minimize") - var/mob/user = usr - if(!computer.active_program || !computer.all_components[MC_CPU]) - return - - computer.idle_threads.Add(computer.active_program) - program_state = PROGRAM_STATE_BACKGROUND // Should close any existing UIs - - computer.active_program = null - computer.update_icon() - ui.close() - - if(user && istype(user)) - computer.ui_interact(user) // Re-open the UI on this computer. It should show the main screen now. - - -/datum/computer_file/program/ui_host() - if(computer.physical) - return computer.physical - else - return computer - -/datum/computer_file/program/ui_status(mob/user) - if(program_state != PROGRAM_STATE_ACTIVE) // Our program was closed. Close the ui if it exists. - return UI_CLOSE - return ..() diff --git a/code/modules/modular_computers/file_system/program_events.dm b/code/modules/modular_computers/file_system/program_events.dm deleted file mode 100644 index 279d646cfd..0000000000 --- a/code/modules/modular_computers/file_system/program_events.dm +++ /dev/null @@ -1,18 +0,0 @@ -// Events are sent to the program by the computer. -// Always include a parent call when overriding an event. - -// Called when the ID card is removed from computer. ID is removed AFTER this proc. -/datum/computer_file/program/proc/event_idremoved(background, slot) - return - -// Called when the computer fails due to power loss. Override when program wants to specifically react to power loss. -/datum/computer_file/program/proc/event_powerfailure(background) - kill_program(forced = TRUE) - -// Called when the network connectivity fails. Computer does necessary checks and only calls this when requires_ntnet_feature and similar variables are not met. -/datum/computer_file/program/proc/event_networkfailure(background) - kill_program(forced = TRUE) - if(background) - computer.visible_message("\The [computer]'s screen displays an \"Process [filename].[filetype] (PID [rand(100,999)]) terminated - Network Error\" error") - else - computer.visible_message("\The [computer]'s screen briefly freezes and then shows \"NETWORK ERROR - NTNet connection lost. Please retry. If problem persists contact your system administrator.\" error.") diff --git a/code/modules/modular_computers/file_system/programs/airestorer.dm b/code/modules/modular_computers/file_system/programs/airestorer.dm deleted file mode 100644 index 21ceb95cfb..0000000000 --- a/code/modules/modular_computers/file_system/programs/airestorer.dm +++ /dev/null @@ -1,122 +0,0 @@ -/datum/computer_file/program/aidiag - filename = "aidiag" - filedesc = "" - program_icon_state = "generic" - extended_desc = "" - size = 12 - requires_ntnet = 0 - usage_flags = PROGRAM_CONSOLE - transfer_access = ACCESS_HEADS - available_on_ntnet = 1 - tgui_id = "ntos_ai_restorer" - ui_x = 600 - ui_y = 400 - - var/restoring = FALSE - -/datum/computer_file/program/aidiag/proc/get_ai(cardcheck) - - var/obj/item/computer_hardware/ai_slot/ai_slot - - if(computer) - ai_slot = computer.all_components[MC_AI] - - if(computer && ai_slot && ai_slot.check_functionality()) - if(cardcheck == 1) - return ai_slot - if(ai_slot.enabled && ai_slot.stored_card) - if(cardcheck == 2) - return ai_slot.stored_card - if(ai_slot.stored_card.AI) - return ai_slot.stored_card.AI - - return null - -/datum/computer_file/program/aidiag/ui_act(action, params) - if(..()) - return TRUE - - var/mob/living/silicon/ai/A = get_ai() - if(!A) - restoring = FALSE - - switch(action) - if("PRG_beginReconstruction") - if(A && A.health < 100) - restoring = TRUE - A.notify_ghost_cloning("Your core files are being restored!", source = computer) - return TRUE - if("PRG_eject") - if(computer.all_components[MC_AI]) - var/obj/item/computer_hardware/ai_slot/ai_slot = computer.all_components[MC_AI] - if(ai_slot && ai_slot.stored_card) - ai_slot.try_eject(0,usr) - return TRUE - -/datum/computer_file/program/aidiag/process_tick() - ..() - if(!restoring) //Put the check here so we don't check for an ai all the time - return - var/obj/item/aicard/cardhold = get_ai(2) - - var/obj/item/computer_hardware/ai_slot/ai_slot = get_ai(1) - - - var/mob/living/silicon/ai/A = get_ai() - if(!A || !cardhold) - restoring = FALSE // If the AI was removed, stop the restoration sequence. - if(ai_slot) - ai_slot.locked = FALSE - return - - if(cardhold.flush) - ai_slot.locked = FALSE - restoring = FALSE - return - ai_slot.locked =TRUE - A.adjustOxyLoss(-5, 0) - A.adjustFireLoss(-5, 0) - A.adjustToxLoss(-5, 0) - A.adjustBruteLoss(-5, 0) - A.updatehealth() - if(A.health >= 0 && A.stat == DEAD) - A.revive(full_heal = FALSE, admin_revive = FALSE) - // Finished restoring - if(A.health >= 100) - ai_slot.locked = FALSE - restoring = FALSE - - return TRUE - - -/datum/computer_file/program/aidiag/ui_data(mob/user) - var/list/data = get_header_data() - var/mob/living/silicon/ai/AI - // A shortcut for getting the AI stored inside the computer. The program already does necessary checks. - AI = get_ai() - - var/obj/item/aicard/aicard = get_ai(2) - - if(!aicard) - data["nocard"] = TRUE - data["error"] = "Please insert an intelliCard." - else - if(!AI) - data["error"] = "No AI located" - else - var/obj/item/aicard/cardhold = AI.loc - if(cardhold.flush) - data["error"] = "Flush in progress" - else - data["name"] = AI.name - data["restoring"] = restoring - data["laws"] = AI.laws.get_law_list(include_zeroth = 1) - data["health"] = (AI.health + 100) / 2 - data["isDead"] = AI.stat == DEAD - data["ai_laws"] = AI.laws.get_law_list(include_zeroth = 1) - - return data - -/datum/computer_file/program/aidiag/kill_program(forced) - restoring = FALSE - return ..(forced) diff --git a/code/modules/modular_computers/file_system/programs/alarm.dm b/code/modules/modular_computers/file_system/programs/alarm.dm deleted file mode 100644 index 4c061992ce..0000000000 --- a/code/modules/modular_computers/file_system/programs/alarm.dm +++ /dev/null @@ -1,101 +0,0 @@ -/datum/computer_file/program/alarm_monitor - filename = "alarmmonitor" - filedesc = "" - ui_header = "alarm_green.gif" - program_icon_state = "alert-green" - extended_desc = "" - requires_ntnet = 1 - network_destination = "alarm monitoring network" - size = 5 - tgui_id = "ntos_station_alert" - ui_x = 315 - ui_y = 500 - - var/has_alert = 0 - var/alarms = list("Fire" = list(), "Atmosphere" = list(), "Power" = list()) - -/datum/computer_file/program/alarm_monitor/process_tick() - ..() - - if(has_alert) - program_icon_state = "alert-red" - ui_header = "alarm_red.gif" - update_computer_icon() - else - if(!has_alert) - program_icon_state = "alert-green" - ui_header = "alarm_green.gif" - update_computer_icon() - return 1 - -/datum/computer_file/program/alarm_monitor/ui_data(mob/user) - var/list/data = get_header_data() - - data["alarms"] = list() - for(var/class in alarms) - data["alarms"][class] = list() - for(var/area in alarms[class]) - data["alarms"][class] += area - - return data - -/datum/computer_file/program/alarm_monitor/proc/triggerAlarm(class, area/A, O, obj/source) - if(is_station_level(source.z)) - if(!(A.type in GLOB.the_station_areas)) - return - else if(!is_mining_level(source.z) || istype(A, /area/ruin)) - return - - var/list/L = alarms[class] - for(var/I in L) - if (I == A.name) - var/list/alarm = L[I] - var/list/sources = alarm[3] - if (!(source in sources)) - sources += source - return 1 - var/obj/machinery/camera/C = null - var/list/CL = null - if(O && istype(O, /list)) - CL = O - if (CL.len == 1) - C = CL[1] - else if(O && istype(O, /obj/machinery/camera)) - C = O - L[A.name] = list(A, (C ? C : O), list(source)) - - update_alarm_display() - - return 1 - - -/datum/computer_file/program/alarm_monitor/proc/cancelAlarm(class, area/A, obj/origin) - var/list/L = alarms[class] - var/cleared = 0 - for (var/I in L) - if (I == A.name) - var/list/alarm = L[I] - var/list/srcs = alarm[3] - if (origin in srcs) - srcs -= origin - if (srcs.len == 0) - cleared = 1 - L -= I - - update_alarm_display() - return !cleared - -/datum/computer_file/program/alarm_monitor/proc/update_alarm_display() - has_alert = FALSE - for(var/cat in alarms) - var/list/L = alarms[cat] - if(L.len) - has_alert = TRUE - -/datum/computer_file/program/alarm_monitor/run_program(mob/user) - . = ..(user) - GLOB.alarmdisplay += src - -/datum/computer_file/program/alarm_monitor/kill_program(forced = FALSE) - GLOB.alarmdisplay -= src - ..() diff --git a/code/modules/modular_computers/file_system/programs/antagonist/contract_uplink.dm b/code/modules/modular_computers/file_system/programs/antagonist/contract_uplink.dm deleted file mode 100644 index 6533ecea6c..0000000000 --- a/code/modules/modular_computers/file_system/programs/antagonist/contract_uplink.dm +++ /dev/null @@ -1,198 +0,0 @@ -/datum/computer_file/program/contract_uplink - filename = "contractor uplink" - filedesc = "" - program_icon_state = "assign" - extended_desc = "" - size = 10 - requires_ntnet = 0 - available_on_ntnet = 0 - unsendable = 1 - undeletable = 1 - tgui_id = "synd_contract" - ui_style = "syndicate" - ui_x = 600 - ui_y = 600 - var/error = "" - var/page = CONTRACT_UPLINK_PAGE_CONTRACTS - var/assigned = FALSE - -/datum/computer_file/program/contract_uplink/run_program(mob/living/user) - . = ..(user) - -/datum/computer_file/program/contract_uplink/ui_act(action, params) - if(..()) - return 1 - - var/mob/living/user = usr - var/obj/item/computer_hardware/hard_drive/small/syndicate/hard_drive = computer.all_components[MC_HDD] - - switch(action) - if("PRG_contract-accept") - var/contract_id = text2num(params["contract_id"]) - - // Set as the active contract - hard_drive.traitor_data.contractor_hub.assigned_contracts[contract_id].status = CONTRACT_STATUS_ACTIVE - hard_drive.traitor_data.contractor_hub.current_contract = hard_drive.traitor_data.contractor_hub.assigned_contracts[contract_id] - - program_icon_state = "single_contract" - return 1 - if("PRG_login") - var/datum/antagonist/traitor/traitor_data = user.mind.has_antag_datum(/datum/antagonist/traitor) - - // Bake their data right into the hard drive, or we don't allow non-antags gaining access to an unused - // contract system. - // We also create their contracts at this point. - if (traitor_data) - // Only play greet sound, and handle contractor hub when assigning for the first time. - if (!traitor_data.contractor_hub) - user.playsound_local(user, 'sound/blank.ogg', 100, 0) - traitor_data.contractor_hub = new - traitor_data.contractor_hub.create_hub_items() - - // Stops any topic exploits such as logging in multiple times on a single system. - if (!assigned) - traitor_data.contractor_hub.create_contracts(traitor_data.owner) - - hard_drive.traitor_data = traitor_data - - program_icon_state = "contracts" - assigned = TRUE - return 1 - if("PRG_call_extraction") - if (hard_drive.traitor_data.contractor_hub.current_contract.status != CONTRACT_STATUS_EXTRACTING) - if (hard_drive.traitor_data.contractor_hub.current_contract.handle_extraction(user)) - user.playsound_local(user, 'sound/blank.ogg', 100, 1) - hard_drive.traitor_data.contractor_hub.current_contract.status = CONTRACT_STATUS_EXTRACTING - - program_icon_state = "extracted" - else - user.playsound_local(user, 'sound/blank.ogg', 50) - error = "Either both you or my target aren't at the dropoff location, or the pod hasn't got a valid place to land. Clear space, or make sure you're both inside." - else - user.playsound_local(user, 'sound/blank.ogg', 50) - error = "Already extracting... Place the target into the pod. If the pod was destroyed, you will need to cancel this contract." - - return 1 - if("PRG_contract_abort") - var/contract_id = hard_drive.traitor_data.contractor_hub.current_contract.id - - hard_drive.traitor_data.contractor_hub.current_contract = null - hard_drive.traitor_data.contractor_hub.assigned_contracts[contract_id].status = CONTRACT_STATUS_ABORTED - - program_icon_state = "contracts" - - return 1 - if("PRG_redeem_TC") - if (hard_drive.traitor_data.contractor_hub.contract_TC_to_redeem) - var/obj/item/stack/telecrystal/crystals = new /obj/item/stack/telecrystal(get_turf(user), - hard_drive.traitor_data.contractor_hub.contract_TC_to_redeem) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.put_in_hands(crystals)) - to_chat(H, "My payment materializes into my hands!") - else - to_chat(user, "My payment materializes onto the floor.") - - hard_drive.traitor_data.contractor_hub.contract_TC_payed_out += hard_drive.traitor_data.contractor_hub.contract_TC_to_redeem - hard_drive.traitor_data.contractor_hub.contract_TC_to_redeem = 0 - return 1 - else - user.playsound_local(user, 'sound/blank.ogg', 50) - return 1 - if ("PRG_clear_error") - error = "" - if("PRG_contractor_hub") - page = CONTRACT_UPLINK_PAGE_HUB - program_icon_state = "store" - if ("PRG_hub_back") - page = CONTRACT_UPLINK_PAGE_CONTRACTS - program_icon_state = "contracts" - if ("buy_hub") - if (hard_drive.traitor_data.owner.current == user) - var/item = params["item"] - - for (var/datum/contractor_item/hub_item in hard_drive.traitor_data.contractor_hub.hub_items) - if (hub_item.name == item) - hub_item.handle_purchase(hard_drive.traitor_data.contractor_hub, user) - else - error = "Invalid user... You weren't recognised as the user of this system." - -/datum/computer_file/program/contract_uplink/ui_data(mob/user) - var/list/data = list() - var/obj/item/computer_hardware/hard_drive/small/syndicate/hard_drive = computer.all_components[MC_HDD] - var/screen_to_be = null - - if (hard_drive && hard_drive.traitor_data != null) - var/datum/antagonist/traitor/traitor_data = hard_drive.traitor_data - data = get_header_data() - - if (traitor_data.contractor_hub.current_contract) - data["ongoing_contract"] = TRUE - screen_to_be = "single_contract" - if (traitor_data.contractor_hub.current_contract.status == CONTRACT_STATUS_EXTRACTING) - data["extraction_enroute"] = TRUE - screen_to_be = "extracted" - - data["logged_in"] = TRUE - data["station_name"] = GLOB.station_name - data["redeemable_tc"] = traitor_data.contractor_hub.contract_TC_to_redeem - data["contract_rep"] = traitor_data.contractor_hub.contract_rep - - data["page"] = page - - data["error"] = error - - for (var/datum/contractor_item/hub_item in traitor_data.contractor_hub.hub_items) - data["contractor_hub_items"] += list(list( - "name" = hub_item.name, - "desc" = hub_item.desc, - "cost" = hub_item.cost, - "limited" = hub_item.limited, - "item_icon" = hub_item.item_icon - )) - - for (var/datum/syndicate_contract/contract in traitor_data.contractor_hub.assigned_contracts) - data["contracts"] += list(list( - "target" = contract.contract.target, - "target_rank" = contract.target_rank, - "payout" = contract.contract.payout, - "payout_bonus" = contract.contract.payout_bonus, - "dropoff" = contract.contract.dropoff, - "id" = contract.id, - "status" = contract.status - )) - - var/direction - if (traitor_data.contractor_hub.current_contract) - var/turf/curr = get_turf(user) - var/turf/dropoff_turf - data["current_location"] = "[get_area_name(curr, TRUE)]" - - for (var/turf/content in traitor_data.contractor_hub.current_contract.contract.dropoff.contents) - if (isturf(content)) - dropoff_turf = content - break - - if(curr.z == dropoff_turf.z) //Direction calculations for same z-level only - direction = uppertext(dir2text(get_dir(curr, dropoff_turf))) //Direction text (East, etc). Not as precise, but still helpful. - if(get_area(user) == traitor_data.contractor_hub.current_contract.contract.dropoff) - direction = "LOCATION CONFIRMED" - else - direction = "???" - - data["dropoff_direction"] = direction - - if (page == CONTRACT_UPLINK_PAGE_HUB) - screen_to_be = "store" - - if (!screen_to_be) - screen_to_be = "contracts" - else - data["logged_in"] = FALSE - - if (!screen_to_be) - screen_to_be = "assign" - - program_icon_state = screen_to_be - update_computer_icon() - return data diff --git a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm deleted file mode 100644 index 53ee320b24..0000000000 --- a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm +++ /dev/null @@ -1,100 +0,0 @@ -/datum/computer_file/program/ntnet_dos - filename = "ntn_dos" - filedesc = "" - program_icon_state = "hostile" - extended_desc = "" - size = 20 - requires_ntnet = 1 - available_on_ntnet = 0 - available_on_syndinet = 1 - tgui_id = "ntos_net_dos" - ui_style = "syndicate" - ui_x = 400 - ui_y = 250 - - var/obj/machinery/ntnet_relay/target = null - var/dos_speed = 0 - var/error = "" - var/executed = 0 - -/datum/computer_file/program/ntnet_dos/process_tick() - dos_speed = 0 - switch(ntnet_status) - if(1) - dos_speed = NTNETSPEED_LOWSIGNAL * 10 - if(2) - dos_speed = NTNETSPEED_HIGHSIGNAL * 10 - if(3) - dos_speed = NTNETSPEED_ETHERNET * 10 - if(target && executed) - target.dos_overload += dos_speed - if(!target.is_operational()) - target.dos_sources.Remove(src) - target = null - error = "Connection to destination relay lost." - -/datum/computer_file/program/ntnet_dos/kill_program(forced = FALSE) - if(target) - target.dos_sources.Remove(src) - target = null - executed = 0 - - ..() - -/datum/computer_file/program/ntnet_dos/ui_act(action, params) - if(..()) - return 1 - switch(action) - if("PRG_target_relay") - for(var/obj/machinery/ntnet_relay/R in SSnetworks.station_network.relays) - if("[R.uid]" == params["targid"]) - target = R - return 1 - if("PRG_reset") - if(target) - target.dos_sources.Remove(src) - target = null - executed = 0 - error = "" - return 1 - if("PRG_execute") - if(target) - executed = 1 - target.dos_sources.Add(src) - if(SSnetworks.station_network.intrusion_detection_enabled) - var/obj/item/computer_hardware/network_card/network_card = computer.all_components[MC_NET] - SSnetworks.station_network.add_log("IDS WARNING - Excess traffic flood targeting relay [target.uid] detected from device: [network_card.get_network_tag()]") - SSnetworks.station_network.intrusion_detection_alarm = 1 - return 1 - -/datum/computer_file/program/ntnet_dos/ui_data(mob/user) - if(!SSnetworks.station_network) - return - - var/list/data = list() - - data = get_header_data() - - if(error) - data["error"] = error - else if(target && executed) - data["target"] = 1 - data["speed"] = dos_speed - - // This is mostly visual, generate some strings of 1s and 0s - // Probability of 1 is equal of completion percentage of DoS attack on this relay. - // Combined with UI updates this adds quite nice effect to the UI - var/percentage = target.dos_overload * 100 / target.dos_capacity - data["dos_strings"] = list() - for(var/j, j<10, j++) - var/string = "" - for(var/i, i<20, i++) - string = "[string][prob(percentage)]" - data["dos_strings"] += list(list("nums" = string)) - else - data["relays"] = list() - for(var/obj/machinery/ntnet_relay/R in SSnetworks.station_network.relays) - data["relays"] += list(list("id" = R.uid)) - data["focus"] = target ? target.uid : null - - return data diff --git a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm deleted file mode 100644 index 39cf5f781b..0000000000 --- a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm +++ /dev/null @@ -1,71 +0,0 @@ -/datum/computer_file/program/revelation - filename = "revelation" - filedesc = "" - program_icon_state = "hostile" - extended_desc = "" - size = 13 - requires_ntnet = 0 - available_on_ntnet = 0 - available_on_syndinet = 1 - tgui_id = "ntos_revelation" - ui_style = "syndicate" - ui_x = 400 - ui_y = 250 - - var/armed = 0 - -/datum/computer_file/program/revelation/run_program(mob/living/user) - . = ..(user) - if(armed) - activate() - -/datum/computer_file/program/revelation/proc/activate() - if(computer) - computer.visible_message("\The [computer]'s screen brightly flashes and loud electrical buzzing is heard.") - computer.enabled = 0 - computer.update_icon() - var/obj/item/computer_hardware/hard_drive/hard_drive = computer.all_components[MC_HDD] - var/obj/item/computer_hardware/battery/battery_module = computer.all_components[MC_CELL] - var/obj/item/computer_hardware/recharger/recharger = computer.all_components[MC_CHARGE] - qdel(hard_drive) - computer.take_damage(25, BRUTE, 0, 0) - if(battery_module && prob(25)) - qdel(battery_module) - computer.visible_message("\The [computer]'s battery explodes in rain of sparks.") - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread - spark_system.start() - - if(recharger && prob(50)) - qdel(recharger) - computer.visible_message("\The [computer]'s recharger explodes in rain of sparks.") - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread - spark_system.start() - - -/datum/computer_file/program/revelation/ui_act(action, params) - if(..()) - return 1 - switch(action) - if("PRG_arm") - armed = !armed - if("PRG_activate") - activate() - if("PRG_obfuscate") - var/mob/living/user = usr - var/newname = sanitize(input(user, "Enter new program name: ")) - if(!newname) - return - filedesc = newname - - -/datum/computer_file/program/revelation/clone() - var/datum/computer_file/program/revelation/temp = ..() - temp.armed = armed - return temp - -/datum/computer_file/program/revelation/ui_data(mob/user) - var/list/data = get_header_data() - - data["armed"] = armed - - return data diff --git a/code/modules/modular_computers/file_system/programs/card.dm b/code/modules/modular_computers/file_system/programs/card.dm deleted file mode 100644 index 8e8cbac81c..0000000000 --- a/code/modules/modular_computers/file_system/programs/card.dm +++ /dev/null @@ -1,481 +0,0 @@ -/datum/computer_file/program/card_mod - filename = "cardmod" - filedesc = "" - program_icon_state = "id" - extended_desc = "" - transfer_access = ACCESS_HEADS - requires_ntnet = 0 - size = 8 - tgui_id = "ntos_card" - ui_x = 600 - ui_y = 700 - - var/mod_mode = 1 - var/is_centcom = 0 - var/show_assignments = 0 - var/minor = 0 - var/authenticated = 0 - var/list/reg_ids = list() - var/list/region_access = null - var/list/head_subordinates = null - var/target_dept = 0 //Which department this computer has access to. 0=all departments - var/change_position_cooldown = 30 - //Jobs you cannot open new positions for - var/list/blacklisted = list( - "AI", - "Assistant", - "Cyborg", - "Captain", - "Head of Personnel", - "Head of Security", - "Chief Engineer", - "Research Director", - "Chief Medical Officer") - - //The scaling factor of max total positions in relation to the total amount of people on board the station in % - var/max_relative_positions = 30 //30%: Seems reasonable, limit of 6 @ 20 players - - //This is used to keep track of opened positions for jobs to allow instant closing - //Assoc array: "JobName" = (int) - var/list/opened_positions = list(); - -/datum/computer_file/program/card_mod/New() - ..() - addtimer(CALLBACK(src, PROC_REF(SetConfigCooldown)), 0) - -/datum/computer_file/program/card_mod/proc/SetConfigCooldown() - change_position_cooldown = CONFIG_GET(number/id_console_jobslot_delay) - -/datum/computer_file/program/card_mod/event_idremoved(background, slot) - if(!slot || slot == 2)// slot being false means both are removed - minor = 0 - authenticated = 0 - head_subordinates = null - region_access = null - - -/datum/computer_file/program/card_mod/proc/job_blacklisted(jobtitle) - return (jobtitle in blacklisted) - - -//Logic check for if you can open the job -/datum/computer_file/program/card_mod/proc/can_open_job(datum/job/job) - if(job) - if(!job_blacklisted(job.title)) - if((job.total_positions <= GLOB.player_list.len * (max_relative_positions / 100))) - var/delta = (world.time / 10) - GLOB.time_last_changed_position - if((change_position_cooldown < delta) || (opened_positions[job.title] < 0)) - return 1 - return -2 - return 0 - return 0 - -//Logic check for if you can close the job -/datum/computer_file/program/card_mod/proc/can_close_job(datum/job/job) - if(job) - if(!job_blacklisted(job.title)) - if(job.total_positions > job.current_positions) - var/delta = (world.time / 10) - GLOB.time_last_changed_position - if((change_position_cooldown < delta) || (opened_positions[job.title] > 0)) - return 1 - return -2 - return 0 - return 0 - -/datum/computer_file/program/card_mod/proc/format_jobs(list/jobs) - var/obj/item/computer_hardware/card_slot/card_slot = computer.all_components[MC_CARD] - var/obj/item/card/id/id_card = card_slot.stored_card - var/list/formatted = list() - for(var/job in jobs) - formatted.Add(list(list( - "display_name" = replacetext(job, " ", " "), - "target_rank" = id_card && id_card.assignment ? id_card.assignment : "Unassigned", - "job" = job))) - - return formatted - -/datum/computer_file/program/card_mod/ui_act(action, params) - if(..()) - return 1 - - var/obj/item/computer_hardware/card_slot/card_slot - var/obj/item/computer_hardware/printer/printer - if(computer) - card_slot = computer.all_components[MC_CARD] - printer = computer.all_components[MC_PRINT] - if(!card_slot) - return - - var/obj/item/card/id/user_id_card = null - var/mob/user = usr - - var/obj/item/card/id/id_card = card_slot.stored_card - var/obj/item/card/id/auth_card = card_slot.stored_card2 - - if(auth_card) - user_id_card = auth_card - else - if(ishuman(user)) - var/mob/living/carbon/human/h = user - user_id_card = h.get_idcard(TRUE) - - switch(action) - if("PRG_switchm") - if(params["target"] == "mod") - mod_mode = 1 - else if (params["target"] == "manifest") - mod_mode = 0 - else if (params["target"] == "manage") - mod_mode = 2 - if("PRG_togglea") - if(show_assignments) - show_assignments = 0 - else - show_assignments = 1 - if("PRG_print") - if(computer && printer) //This option should never be called if there is no printer - if(mod_mode) - if(authorized()) - var/contents = {"

    Access Report

    - Prepared By: [user_id_card && user_id_card.registered_name ? user_id_card.registered_name : "Unknown"]
    - For: [id_card.registered_name ? id_card.registered_name : "Unregistered"]
    -
    - Assignment: [id_card.assignment]
    - Access:
    - "} - - var/known_access_rights = get_all_accesses() - for(var/A in id_card.access) - if(A in known_access_rights) - contents += " [get_access_desc(A)]" - - if(!printer.print_text(contents,"access report")) - to_chat(usr, "Hardware error: Printer was unable to print the file. It may be out of paper.") - return - else - computer.visible_message("\The [computer] prints out paper.") - else - var/contents = {"

    Crew Manifest

    -
    - [GLOB.data_core ? GLOB.data_core.get_manifest(0) : ""] - "} - if(!printer.print_text(contents,text("crew manifest ([])", station_time_timestamp()))) - to_chat(usr, "Hardware error: Printer was unable to print the file. It may be out of paper.") - return - else - computer.visible_message("\The [computer] prints out paper.") - if("PRG_eject") - if(computer && card_slot) - var/select = params["target"] - switch(select) - if("id") - if(id_card) - GLOB.data_core.manifest_modify(id_card.registered_name, id_card.assignment) - card_slot.try_eject(1, user) - else - var/obj/item/I = usr.get_active_held_item() - if (istype(I, /obj/item/card/id)) - if(!usr.transferItemToLoc(I, computer)) - return - card_slot.stored_card = I - if("auth") - if(auth_card) - if(id_card) - GLOB.data_core.manifest_modify(id_card.registered_name, id_card.assignment) - head_subordinates = null - region_access = null - authenticated = 0 - minor = 0 - card_slot.try_eject(2, user) - else - var/obj/item/I = usr.get_active_held_item() - if (istype(I, /obj/item/card/id)) - if(!usr.transferItemToLoc(I, computer)) - return - card_slot.stored_card2 = I - if("PRG_terminate") - if(computer && ((id_card.assignment in head_subordinates) || id_card.assignment == "Assistant")) - id_card.assignment = "Unassigned" - remove_nt_access(id_card) - id_card.update_label() - - if("PRG_edit") - if(computer && authorized()) - if(params["name"]) - var/temp_name = reject_bad_name(input("Enter name.", "Name", id_card.registered_name)) - if(temp_name) - id_card.registered_name = temp_name - id_card.update_label() - else - computer.visible_message("[computer] buzzes rudely.") - //else if(params["account"]) - // var/account_num = text2num(input("Enter account number.", "Account", id_card.associated_account_number)) - // id_card.associated_account_number = account_num - if("PRG_assign") - if(computer && authorized() && id_card) - var/t1 = params["assign_target"] - if(t1 == "Custom") - var/temp_t = reject_bad_text(input("Enter a custom job assignment.","Assignment", id_card.assignment), 45) - //let custom jobs function as an impromptu alt title, mainly for sechuds - if(temp_t) - id_card.assignment = temp_t - else - var/list/access = list() - if(is_centcom) - access = get_centcom_access(t1) - else - var/datum/job/jobdatum - for(var/jobtype in typesof(/datum/job)) - var/datum/job/J = new jobtype - if(ckey(J.title) == ckey(t1)) - jobdatum = J - break - if(!jobdatum) - to_chat(usr, "No log exists for this job: [t1]") - return - - access = jobdatum.get_access() - - remove_nt_access(id_card) - apply_access(id_card, access) - id_card.assignment = t1 - id_card.update_label() - - if("PRG_access") - if(params["allowed"] && computer && authorized()) - var/access_type = text2num(params["access_target"]) - var/access_allowed = text2num(params["allowed"]) - if(access_type in (is_centcom ? get_all_centcom_access() : get_all_accesses())) - id_card.access -= access_type - if(!access_allowed) - id_card.access += access_type - if("PRG_open_job") - var/edit_job_target = params["target"] - var/datum/job/j = SSjob.GetJob(edit_job_target) - if(!j) - return 0 - if(can_open_job(j) != 1) - return 0 - if(opened_positions[edit_job_target] >= 0) - GLOB.time_last_changed_position = world.time / 10 - j.total_positions++ - opened_positions[edit_job_target]++ - if("PRG_close_job") - var/edit_job_target = params["target"] - var/datum/job/j = SSjob.GetJob(edit_job_target) - if(!j) - return 0 - if(can_close_job(j) != 1) - return 0 - //Allow instant closing without cooldown if a position has been opened before - if(opened_positions[edit_job_target] <= 0) - GLOB.time_last_changed_position = world.time / 10 - j.total_positions-- - opened_positions[edit_job_target]-- - if("PRG_regsel") - if(!reg_ids) - reg_ids = list() - var/regsel = text2num(params["region"]) - if(regsel in reg_ids) - reg_ids -= regsel - else - reg_ids += regsel - - return 1 - -/datum/computer_file/program/card_mod/proc/remove_nt_access(obj/item/card/id/id_card) - id_card.access -= get_all_accesses() - id_card.access -= get_all_centcom_access() - -/datum/computer_file/program/card_mod/proc/apply_access(obj/item/card/id/id_card, list/accesses) - id_card.access |= accesses - -/datum/computer_file/program/card_mod/ui_data(mob/user) - - var/list/data = get_header_data() - - var/obj/item/computer_hardware/card_slot/card_slot - var/obj/item/computer_hardware/printer/printer - - if(computer) - card_slot = computer.all_components[MC_CARD] - printer = computer.all_components[MC_PRINT] - - data["mmode"] = mod_mode - - var/authed = 0 - if(computer) - if(card_slot) - var/obj/item/card/id/auth_card = card_slot.stored_card2 - data["auth_name"] = auth_card ? strip_html_simple(auth_card.name) : "-----" - authed = authorized() - - - if(mod_mode == 2) - data["slots"] = list() - var/list/pos = list() - for(var/datum/job/job in SSjob.occupations) - if(job.title in blacklisted) - continue - - var/list/status_open = build_manage(job,1) - var/list/status_close = build_manage(job,0) - - pos.Add(list(list( - "title" = job.title, - "current" = job.current_positions, - "total" = job.total_positions, - "status_open" = (authed && !minor) ? status_open["enable"]: 0, - "status_close" = (authed && !minor) ? status_close["enable"] : 0, - "desc_open" = status_open["desc"], - "desc_close" = status_close["desc"]))) - data["slots"] = pos - - data["src"] = "[REF(src)]" - data["station_name"] = station_name() - - - if(!mod_mode) - data["manifest"] = list() - var/list/crew = list() - for(var/datum/data/record/t in sortRecord(GLOB.data_core.general)) - crew.Add(list(list( - "name" = t.fields["name"], - "rank" = t.fields["rank"]))) - - data["manifest"] = crew - data["assignments"] = show_assignments - if(computer) - data["have_id_slot"] = !!card_slot - data["have_printer"] = !!printer - if(!card_slot && mod_mode == 1) - mod_mode = 0 //We can't modify IDs when there is no card reader - else - data["have_id_slot"] = 0 - data["have_printer"] = 0 - - data["centcom_access"] = is_centcom - - - data["authenticated"] = authed - - - if(mod_mode == 1 && computer) - if(card_slot) - var/obj/item/card/id/id_card = card_slot.stored_card - - data["has_id"] = !!id_card - data["id_rank"] = id_card && id_card.assignment ? html_encode(id_card.assignment) : "Unassigned" - data["id_owner"] = id_card && id_card.registered_name ? html_encode(id_card.registered_name) : "-----" - data["id_name"] = id_card ? strip_html_simple(id_card.name) : "-----" - - if(show_assignments) - data["engineering_jobs"] = format_jobs(GLOB.engineering_positions) - data["medical_jobs"] = format_jobs(GLOB.medical_positions) - data["science_jobs"] = format_jobs(GLOB.science_positions) - data["security_jobs"] = format_jobs(GLOB.security_positions) - data["cargo_jobs"] = format_jobs(GLOB.supply_positions) - data["civilian_jobs"] = format_jobs(GLOB.civilian_positions) - data["centcom_jobs"] = format_jobs(get_all_centcom_jobs()) - - - if(card_slot.stored_card) - var/obj/item/card/id/id_card = card_slot.stored_card - if(is_centcom) - var/list/all_centcom_access = list() - for(var/access in get_all_centcom_access()) - all_centcom_access.Add(list(list( - "desc" = replacetext(get_centcom_access_desc(access), " ", " "), - "ref" = access, - "allowed" = (access in id_card.access) ? 1 : 0))) - data["all_centcom_access"] = all_centcom_access - else - var/list/regions = list() - for(var/i = 1; i <= 7; i++) - if((minor || target_dept) && !(i in region_access)) - continue - - var/list/accesses = list() - if(i in reg_ids) - for(var/access in get_region_accesses(i)) - if (get_access_desc(access)) - accesses.Add(list(list( - "desc" = replacetext(get_access_desc(access), " ", " "), - "ref" = access, - "allowed" = (access in id_card.access) ? 1 : 0))) - - regions.Add(list(list( - "name" = get_region_accesses_name(i), - "regid" = i, - "selected" = (i in reg_ids) ? 1 : null, - "accesses" = accesses))) - data["regions"] = regions - - data["minor"] = target_dept || minor ? 1 : 0 - - - return data - - -/datum/computer_file/program/card_mod/proc/build_manage(datum/job,open = FALSE) - var/out = "Denied" - var/can_change= 0 - if(open) - can_change = can_open_job(job) - else - can_change = can_close_job(job) - var/enable = 0 - if(can_change == 1) - out = "[open ? "Open Position" : "Close Position"]" - enable = 1 - else if(can_change == -2) - var/time_to_wait = round(change_position_cooldown - ((world.time / 10) - GLOB.time_last_changed_position), 1) - var/mins = round(time_to_wait / 60) - var/seconds = time_to_wait - (60*mins) - out = "Cooldown ongoing: [mins]:[(seconds < 10) ? "0[seconds]" : "[seconds]"]" - else - out = "Denied" - - return list("enable" = enable, "desc" = out) - - -/datum/computer_file/program/card_mod/proc/authorized() - if(!authenticated && computer) - var/obj/item/computer_hardware/card_slot/card_slot = computer.all_components[MC_CARD] - if(card_slot) - var/obj/item/card/id/auth_card = card_slot.stored_card2 - if(auth_card) - region_access = list() - if(ACCESS_CHANGE_IDS in auth_card.GetAccess()) - minor = 0 - authenticated = 1 - return 1 - else - if((ACCESS_HOP in auth_card.access) && ((target_dept==1) || !target_dept)) - region_access |= 1 - region_access |= 6 - get_subordinates("Head of Personnel") - if((ACCESS_HOS in auth_card.access) && ((target_dept==2) || !target_dept)) - region_access |= 2 - get_subordinates("Head of Security") - if((ACCESS_CMO in auth_card.access) && ((target_dept==3) || !target_dept)) - region_access |= 3 - get_subordinates("Chief Medical Officer") - if((ACCESS_RD in auth_card.access) && ((target_dept==4) || !target_dept)) - region_access |= 4 - get_subordinates("Research Director") - if((ACCESS_CE in auth_card.access) && ((target_dept==5) || !target_dept)) - region_access |= 5 - get_subordinates("Chief Engineer") - if(region_access.len) - minor = 1 - authenticated = 1 - return 1 - else - return authenticated - -/datum/computer_file/program/card_mod/proc/get_subordinates(rank) - head_subordinates = list() - for(var/datum/job/job in SSjob.occupations) - if(rank in job.department_head) - head_subordinates += job.title diff --git a/code/modules/modular_computers/file_system/programs/configurator.dm b/code/modules/modular_computers/file_system/programs/configurator.dm deleted file mode 100644 index c315d3bca9..0000000000 --- a/code/modules/modular_computers/file_system/programs/configurator.dm +++ /dev/null @@ -1,67 +0,0 @@ -// This is special hardware configuration program. -// It is to be used only with modular computers. -// It allows you to toggle components of your device. - -/datum/computer_file/program/computerconfig - filename = "compconfig" - filedesc = "" - extended_desc = "" - program_icon_state = "generic" - unsendable = 1 - undeletable = 1 - size = 4 - available_on_ntnet = 0 - requires_ntnet = 0 - tgui_id = "ntos_configuration" - - var/obj/item/modular_computer/movable = null - - -/datum/computer_file/program/computerconfig/ui_data(mob/user) - movable = computer - var/obj/item/computer_hardware/hard_drive/hard_drive = movable.all_components[MC_HDD] - var/obj/item/computer_hardware/battery/battery_module = movable.all_components[MC_CELL] - if(!istype(movable)) - movable = null - - // No computer connection, we can't get data from that. - if(!movable) - return 0 - - var/list/data = get_header_data() - - data["disk_size"] = hard_drive.max_capacity - data["disk_used"] = hard_drive.used_capacity - data["power_usage"] = movable.last_power_usage - data["battery_exists"] = battery_module ? 1 : 0 - if(battery_module && battery_module.battery) - data["battery_rating"] = battery_module.battery.maxcharge - data["battery_percent"] = round(battery_module.battery.percent()) - - if(battery_module && battery_module.battery) - data["battery"] = list("max" = battery_module.battery.maxcharge, "charge" = round(battery_module.battery.charge)) - - var/list/all_entries[0] - for(var/I in movable.all_components) - var/obj/item/computer_hardware/H = movable.all_components[I] - all_entries.Add(list(list( - "name" = H.name, - "desc" = H.desc, - "enabled" = H.enabled, - "critical" = H.critical, - "powerusage" = H.power_usage - ))) - - data["hardware"] = all_entries - return data - - -/datum/computer_file/program/computerconfig/ui_act(action,params) - if(..()) - return - switch(action) - if("PC_toggle_component") - var/obj/item/computer_hardware/H = movable.find_hardware_by_name(params["name"]) - if(H && istype(H)) - H.enabled = !H.enabled - . = TRUE diff --git a/code/modules/modular_computers/file_system/programs/file_browser.dm b/code/modules/modular_computers/file_system/programs/file_browser.dm deleted file mode 100644 index 29e4b38455..0000000000 --- a/code/modules/modular_computers/file_system/programs/file_browser.dm +++ /dev/null @@ -1,232 +0,0 @@ -/datum/computer_file/program/filemanager - filename = "filemanager" - filedesc = "" - extended_desc = "" - program_icon_state = "generic" - size = 8 - requires_ntnet = 0 - available_on_ntnet = 0 - undeletable = 1 - tgui_id = "ntos_file_manager" - - var/open_file - var/error - -/datum/computer_file/program/filemanager/ui_act(action, params) - if(..()) - return 1 - - var/obj/item/computer_hardware/hard_drive/HDD = computer.all_components[MC_HDD] - var/obj/item/computer_hardware/hard_drive/RHDD = computer.all_components[MC_SDD] - var/obj/item/computer_hardware/printer/printer = computer.all_components[MC_PRINT] - - switch(action) - if("PRG_openfile") - . = 1 - open_file = params["name"] - if("PRG_newtextfile") - . = 1 - var/newname = stripped_input(usr, "Enter file name or leave blank to cancel:", "File rename", max_length=50) - if(!newname) - return 1 - if(!HDD) - return 1 - var/datum/computer_file/data/F = new/datum/computer_file/data() - F.filename = newname - F.filetype = "TXT" - HDD.store_file(F) - if("PRG_deletefile") - . = 1 - if(!HDD) - return 1 - var/datum/computer_file/file = HDD.find_file_by_name(params["name"]) - if(!file || file.undeletable) - return 1 - HDD.remove_file(file) - if("PRG_usbdeletefile") - . = 1 - if(!RHDD) - return 1 - var/datum/computer_file/file = RHDD.find_file_by_name(params["name"]) - if(!file || file.undeletable) - return 1 - RHDD.remove_file(file) - if("PRG_closefile") - . = 1 - open_file = null - error = null - if("PRG_clone") - . = 1 - if(!HDD) - return 1 - var/datum/computer_file/F = HDD.find_file_by_name(params["name"]) - if(!F || !istype(F)) - return 1 - var/datum/computer_file/C = F.clone(1) - HDD.store_file(C) - if("PRG_rename") - . = 1 - if(!HDD) - return 1 - var/datum/computer_file/file = HDD.find_file_by_name(params["name"]) - if(!file || !istype(file)) - return 1 - var/newname = stripped_input(usr, "Enter new file name:", "File rename", file.filename, max_length=50) - if(file && newname) - file.filename = newname - if("PRG_edit") - . = 1 - if(!open_file) - return 1 - if(!HDD) - return 1 - var/datum/computer_file/data/F = HDD.find_file_by_name(open_file) - if(!F || !istype(F)) - return 1 - if(F.do_not_edit && (alert("WARNING: This file is not compatible with editor. Editing it may result in permanently corrupted formatting or damaged data consistency. Edit anyway?", "Incompatible File", "No", "Yes") == "No")) - return 1 - // 16384 is the limit for file length in characters. Currently, papers have value of 2048 so this is 8 times as long, since we can't edit parts of the file independently. - var/newtext = stripped_multiline_input(usr, "Editing file [open_file]. You may use most tags used in paper formatting:", "Text Editor", html_decode(F.stored_data), 16384, TRUE) - if(!newtext) - return - if(F) - var/datum/computer_file/data/backup = F.clone() - HDD.remove_file(F) - F.stored_data = newtext - F.calculate_size() - // We can't store the updated file, it's probably too large. Print an error and restore backed up version. - // This is mostly intended to prevent people from losing texts they spent lot of time working on due to running out of space. - // They will be able to copy-paste the text from error screen and store it in notepad or something. - if(!HDD.store_file(F)) - error = "I/O error: Unable to overwrite file. Hard drive is probably full. You may want to backup your changes before closing this window:

    [F.stored_data]

    " - HDD.store_file(backup) - if("PRG_printfile") - . = 1 - if(!open_file) - return 1 - if(!HDD) - return 1 - var/datum/computer_file/data/F = HDD.find_file_by_name(open_file) - if(!F || !istype(F)) - return 1 - if(!printer) - error = "Missing Hardware: Your computer does not have required hardware to complete this operation." - return 1 - if(!printer.print_text("" + prepare_printjob(F.stored_data) + "", open_file)) - error = "Hardware error: Printer was unable to print the file. It may be out of paper." - return 1 - if("PRG_copytousb") - . = 1 - if(!HDD || !RHDD) - return 1 - var/datum/computer_file/F = HDD.find_file_by_name(params["name"]) - if(!F || !istype(F)) - return 1 - var/datum/computer_file/C = F.clone(0) - RHDD.store_file(C) - if("PRG_copyfromusb") - . = 1 - if(!HDD || !RHDD) - return 1 - var/datum/computer_file/F = RHDD.find_file_by_name(params["name"]) - if(!F || !istype(F)) - return 1 - var/datum/computer_file/C = F.clone(0) - HDD.store_file(C) - -/datum/computer_file/program/filemanager/proc/parse_tags(t) - t = replacetext(t, "\[center\]", "
    ") - t = replacetext(t, "\[/center\]", "
    ") - t = replacetext(t, "\[br\]", "
    ") - t = replacetext(t, "\n", "
    ") - t = replacetext(t, "\[b\]", "") - t = replacetext(t, "\[/b\]", "") - t = replacetext(t, "\[i\]", "") - t = replacetext(t, "\[/i\]", "") - t = replacetext(t, "\[u\]", "") - t = replacetext(t, "\[/u\]", "") - t = replacetext(t, "\[time\]", "[station_time_timestamp()]") - t = replacetext(t, "\[date\]", "[time2text(world.realtime, "MMM DD")] [GLOB.year_integer+540]") - t = replacetext(t, "\[large\]", "") - t = replacetext(t, "\[/large\]", "") - t = replacetext(t, "\[h1\]", "

    ") - t = replacetext(t, "\[/h1\]", "

    ") - t = replacetext(t, "\[h2\]", "

    ") - t = replacetext(t, "\[/h2\]", "

    ") - t = replacetext(t, "\[h3\]", "

    ") - t = replacetext(t, "\[/h3\]", "

    ") - t = replacetext(t, "\[*\]", "
  • ") - t = replacetext(t, "\[hr\]", "
    ") - t = replacetext(t, "\[small\]", "") - t = replacetext(t, "\[/small\]", "") - t = replacetext(t, "\[list\]", "
      ") - t = replacetext(t, "\[/list\]", "
    ") - t = replacetext(t, "\[table\]", "") - t = replacetext(t, "\[/table\]", "
    ") - t = replacetext(t, "\[grid\]", "") - t = replacetext(t, "\[/grid\]", "
    ") - t = replacetext(t, "\[row\]", "") - t = replacetext(t, "\[tr\]", "") - t = replacetext(t, "\[td\]", "") - t = replacetext(t, "\[cell\]", "") - t = replacetext(t, "\[tab\]", "    ") - - t = parsemarkdown_basic(t) - - return t - -/datum/computer_file/program/filemanager/proc/prepare_printjob(t) // Additional stuff to parse if we want to print it and make a happy Head of Personnel. Forms FTW. - t = replacetext(t, "\[field\]", "") - t = replacetext(t, "\[sign\]", "") - - t = parse_tags(t) - - t = replacetext(t, regex("(?:%s(?:ign)|%f(?:ield))(?=\\s|$)", "ig"), "") - - return t - -/datum/computer_file/program/filemanager/ui_data(mob/user) - var/list/data = get_header_data() - - var/obj/item/computer_hardware/hard_drive/HDD = computer.all_components[MC_HDD] - var/obj/item/computer_hardware/hard_drive/portable/RHDD = computer.all_components[MC_SDD] - if(error) - data["error"] = error - if(open_file) - var/datum/computer_file/data/file - - if(!computer || !HDD) - data["error"] = "I/O ERROR: Unable to access hard drive." - else - file = HDD.find_file_by_name(open_file) - if(!istype(file)) - data["error"] = "I/O ERROR: Unable to open file." - else - data["filedata"] = parse_tags(file.stored_data) - data["filename"] = "[file.filename].[file.filetype]" - else - if(!computer || !HDD) - data["error"] = "I/O ERROR: Unable to access hard drive." - else - var/list/files[0] - for(var/datum/computer_file/F in HDD.stored_files) - files.Add(list(list( - "name" = F.filename, - "type" = F.filetype, - "size" = F.size, - "undeletable" = F.undeletable - ))) - data["files"] = files - if(RHDD) - data["usbconnected"] = 1 - var/list/usbfiles[0] - for(var/datum/computer_file/F in RHDD.stored_files) - usbfiles.Add(list(list( - "name" = F.filename, - "type" = F.filetype, - "size" = F.size, - "undeletable" = F.undeletable - ))) - data["usbfiles"] = usbfiles - - return data diff --git a/code/modules/modular_computers/file_system/programs/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/ntdownloader.dm deleted file mode 100644 index b801f7f668..0000000000 --- a/code/modules/modular_computers/file_system/programs/ntdownloader.dm +++ /dev/null @@ -1,171 +0,0 @@ -/datum/computer_file/program/ntnetdownload - filename = "ntndownloader" - filedesc = "" - program_icon_state = "generic" - extended_desc = "" - unsendable = 1 - undeletable = 1 - size = 4 - requires_ntnet = 1 - requires_ntnet_feature = NTNET_SOFTWAREDOWNLOAD - available_on_ntnet = 0 - ui_header = "downloader_finished.gif" - tgui_id = "ntos_net_downloader" - - var/datum/computer_file/program/downloaded_file = null - var/hacked_download = 0 - var/download_completion = 0 //GQ of downloaded data. - var/download_netspeed = 0 - var/downloaderror = "" - var/obj/item/modular_computer/my_computer = null - -/datum/computer_file/program/ntnetdownload/proc/begin_file_download(filename) - if(downloaded_file) - return 0 - - var/datum/computer_file/program/PRG = SSnetworks.station_network.find_ntnet_file_by_name(filename) - - if(!PRG || !istype(PRG)) - return 0 - - // Attempting to download antag only program, but without having emagged computer. No. - if(PRG.available_on_syndinet && !(computer.obj_flags & EMAGGED)) - return 0 - - var/obj/item/computer_hardware/hard_drive/hard_drive = computer.all_components[MC_HDD] - - if(!computer || !hard_drive || !hard_drive.can_store_file(PRG)) - return 0 - - ui_header = "downloader_running.gif" - - if(PRG in SSnetworks.station_network.available_station_software) - generate_network_log("Began downloading file [PRG.filename].[PRG.filetype] from NTNet Software Repository.") - hacked_download = 0 - else if(PRG in SSnetworks.station_network.available_antag_software) - generate_network_log("Began downloading file **ENCRYPTED**.[PRG.filetype] from unspecified server.") - hacked_download = 1 - else - generate_network_log("Began downloading file [PRG.filename].[PRG.filetype] from unspecified server.") - hacked_download = 0 - - downloaded_file = PRG.clone() - -/datum/computer_file/program/ntnetdownload/proc/abort_file_download() - if(!downloaded_file) - return - generate_network_log("Aborted download of file [hacked_download ? "**ENCRYPTED**" : "[downloaded_file.filename].[downloaded_file.filetype]"].") - downloaded_file = null - download_completion = 0 - ui_header = "downloader_finished.gif" - -/datum/computer_file/program/ntnetdownload/proc/complete_file_download() - if(!downloaded_file) - return - generate_network_log("Completed download of file [hacked_download ? "**ENCRYPTED**" : "[downloaded_file.filename].[downloaded_file.filetype]"].") - var/obj/item/computer_hardware/hard_drive/hard_drive = computer.all_components[MC_HDD] - if(!computer || !hard_drive || !hard_drive.store_file(downloaded_file)) - // The download failed - downloaderror = "I/O ERROR - Unable to save file. Check whether you have enough free space on your hard drive and whether your hard drive is properly connected. If the issue persists contact your system administrator for assistance." - downloaded_file = null - download_completion = 0 - ui_header = "downloader_finished.gif" - -/datum/computer_file/program/ntnetdownload/process_tick() - if(!downloaded_file) - return - if(download_completion >= downloaded_file.size) - complete_file_download() - // Download speed according to connectivity state. NTNet server is assumed to be on unlimited speed so we're limited by our local connectivity - download_netspeed = 0 - // Speed defines are found in misc.dm - switch(ntnet_status) - if(1) - download_netspeed = NTNETSPEED_LOWSIGNAL - if(2) - download_netspeed = NTNETSPEED_HIGHSIGNAL - if(3) - download_netspeed = NTNETSPEED_ETHERNET - download_completion += download_netspeed - -/datum/computer_file/program/ntnetdownload/ui_act(action, params) - if(..()) - return 1 - switch(action) - if("PRG_downloadfile") - if(!downloaded_file) - begin_file_download(params["filename"]) - return 1 - if("PRG_reseterror") - if(downloaderror) - download_completion = 0 - download_netspeed = 0 - downloaded_file = null - downloaderror = "" - return 1 - return 0 - -/datum/computer_file/program/ntnetdownload/ui_data(mob/user) - my_computer = computer - - if(!istype(my_computer)) - return - - var/list/data = get_header_data() - - // This IF cuts on data transferred to client, so i guess it's worth it. - if(downloaderror) // Download errored. Wait until user resets the program. - data["error"] = downloaderror - else if(downloaded_file) // Download running. Wait please.. - data["downloadname"] = downloaded_file.filename - data["downloaddesc"] = downloaded_file.filedesc - data["downloadsize"] = downloaded_file.size - data["downloadspeed"] = download_netspeed - data["downloadcompletion"] = round(download_completion, 0.1) - else // No download running, pick file. - var/obj/item/computer_hardware/hard_drive/hard_drive = my_computer.all_components[MC_HDD] - data["disk_size"] = hard_drive.max_capacity - data["disk_used"] = hard_drive.used_capacity - var/list/all_entries[0] - for(var/A in SSnetworks.station_network.available_station_software) - var/datum/computer_file/program/P = A - // Only those programs our user can run will show in the list - if(!P.can_run(user,transfer = 1) || hard_drive.find_file_by_name(P.filename)) - continue - all_entries.Add(list(list( - "filename" = P.filename, - "filedesc" = P.filedesc, - "fileinfo" = P.extended_desc, - "compatibility" = check_compatibility(P), - "size" = P.size - ))) - data["hackedavailable"] = 0 - if(computer.obj_flags & EMAGGED) // If we are running on emagged computer we have access to some "bonus" software - var/list/hacked_programs[0] - for(var/S in SSnetworks.station_network.available_antag_software) - var/datum/computer_file/program/P = S - if(hard_drive.find_file_by_name(P.filename)) - continue - data["hackedavailable"] = 1 - hacked_programs.Add(list(list( - "filename" = P.filename, - "filedesc" = P.filedesc, - "fileinfo" = P.extended_desc, - "size" = P.size - ))) - data["hacked_programs"] = hacked_programs - - data["downloadable_programs"] = all_entries - - return data - -/datum/computer_file/program/ntnetdownload/proc/check_compatibility(datum/computer_file/program/P) - var/hardflag = computer.hardware_flag - - if(P && P.is_supported_by_hardware(hardflag,0)) - return "Compatible" - return "Incompatible!" - -/datum/computer_file/program/ntnetdownload/kill_program(forced) - abort_file_download() - return ..(forced) diff --git a/code/modules/modular_computers/file_system/programs/ntmonitor.dm b/code/modules/modular_computers/file_system/programs/ntmonitor.dm deleted file mode 100644 index 650ae6d744..0000000000 --- a/code/modules/modular_computers/file_system/programs/ntmonitor.dm +++ /dev/null @@ -1,81 +0,0 @@ -/datum/computer_file/program/ntnetmonitor - filename = "ntmonitor" - filedesc = "" - program_icon_state = "comm_monitor" - extended_desc = "" - size = 12 - requires_ntnet = 1 - required_access = ACCESS_NETWORK //NETWORK CONTROL IS A MORE SECURE PROGRAM. - available_on_ntnet = 1 - tgui_id = "ntos_net_monitor" - -/datum/computer_file/program/ntnetmonitor/ui_act(action, params) - if(..()) - return 1 - switch(action) - if("resetIDS") - . = 1 - if(SSnetworks.station_network) - SSnetworks.station_network.resetIDS() - return 1 - if("toggleIDS") - . = 1 - if(SSnetworks.station_network) - SSnetworks.station_network.toggleIDS() - return 1 - if("toggleWireless") - . = 1 - if(!SSnetworks.station_network) - return 1 - - // NTNet is disabled. Enabling can be done without user prompt - if(SSnetworks.station_network.setting_disabled) - SSnetworks.station_network.setting_disabled = 0 - return 1 - - // NTNet is enabled and user is about to shut it down. Let's ask them if they really want to do it, as wirelessly connected computers won't connect without NTNet being enabled (which may prevent people from turning it back on) - var/mob/user = usr - if(!user) - return 1 - var/response = alert(user, "Really disable NTNet wireless? If your computer is connected wirelessly you won't be able to turn it back on! This will affect all connected wireless devices.", "NTNet shutdown", "Yes", "No") - if(response == "Yes") - SSnetworks.station_network.setting_disabled = 1 - return 1 - if("purgelogs") - . = 1 - if(SSnetworks.station_network) - SSnetworks.station_network.purge_logs() - if("updatemaxlogs") - . = 1 - var/mob/user = usr - var/logcount = text2num(input(user,"Enter amount of logs to keep in memory ([MIN_NTNET_LOGS]-[MAX_NTNET_LOGS]):")) - if(SSnetworks.station_network) - SSnetworks.station_network.update_max_log_count(logcount) - if("toggle_function") - . = 1 - if(!SSnetworks.station_network) - return 1 - SSnetworks.station_network.toggle_function(text2num(params["id"])) - -/datum/computer_file/program/ntnetmonitor/ui_data(mob/user) - if(!SSnetworks.station_network) - return - var/list/data = get_header_data() - - data["ntnetstatus"] = SSnetworks.station_network.check_function() - data["ntnetrelays"] = SSnetworks.station_network.relays.len - data["idsstatus"] = SSnetworks.station_network.intrusion_detection_enabled - data["idsalarm"] = SSnetworks.station_network.intrusion_detection_alarm - - data["config_softwaredownload"] = SSnetworks.station_network.setting_softwaredownload - data["config_peertopeer"] = SSnetworks.station_network.setting_peertopeer - data["config_communication"] = SSnetworks.station_network.setting_communication - data["config_systemcontrol"] = SSnetworks.station_network.setting_systemcontrol - - data["ntnetlogs"] = list() - - for(var/i in SSnetworks.station_network.logs) - data["ntnetlogs"] += list(list("entry" = i)) - data["ntnetmaxlogs"] = SSnetworks.station_network.setting_maxlogcount - - return data diff --git a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/ntnrc_client.dm deleted file mode 100644 index 12f7e83ba1..0000000000 --- a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm +++ /dev/null @@ -1,223 +0,0 @@ -/datum/computer_file/program/chatclient - filename = "ntnrc_client" - filedesc = "" - program_icon_state = "command" - extended_desc = "" - size = 8 - requires_ntnet = 1 - requires_ntnet_feature = NTNET_COMMUNICATION - network_destination = "NTNRC server" - ui_header = "ntnrc_idle.gif" - available_on_ntnet = 1 - tgui_id = "ntos_net_chat" - - var/last_message = null // Used to generate the toolbar icon - var/username - var/datum/ntnet_conversation/channel = null - var/operator_mode = 0 // Channel operator mode - var/netadmin_mode = 0 // Administrator mode (invisible to other users + bypasses passwords) - -/datum/computer_file/program/chatclient/New() - username = "DefaultUser[rand(100, 999)]" - -/datum/computer_file/program/chatclient/ui_act(action, params) - if(..()) - return 1 - - switch(action) - if("PRG_speak") - . = 1 - if(!channel) - return 1 - var/mob/living/user = usr - var/message = reject_bad_text(input(user, "Enter message or leave blank to cancel: ")) - if(!message || !channel) - return - channel.add_message(message, username) - user.log_talk(message, LOG_CHAT, tag="as [username] to channel [channel.title]") - - if("PRG_joinchannel") - . = 1 - var/datum/ntnet_conversation/C - for(var/datum/ntnet_conversation/chan in SSnetworks.station_network.chat_channels) - if(chan.id == text2num(params["id"])) - C = chan - break - - if(!C) - return 1 - - if(netadmin_mode) - channel = C // Bypasses normal leave/join and passwords. Technically makes the user invisible to others. - return 1 - - if(C.password) - var/mob/living/user = usr - var/password = reject_bad_text(input(user,"Access Denied. Enter password:")) - if(C && (password == C.password)) - C.add_client(src) - channel = C - return 1 - C.add_client(src) - channel = C - if("PRG_leavechannel") - . = 1 - if(channel) - channel.remove_client(src) - channel = null - if("PRG_newchannel") - . = 1 - var/mob/living/user = usr - var/channel_title = reject_bad_text(input(user,"Enter channel name or leave blank to cancel:")) - if(!channel_title) - return - var/datum/ntnet_conversation/C = new/datum/ntnet_conversation() - C.add_client(src) - C.operator = src - channel = C - C.title = channel_title - if("PRG_toggleadmin") - . = 1 - if(netadmin_mode) - netadmin_mode = 0 - if(channel) - channel.remove_client(src) // We shouldn't be in channel's user list, but just in case... - channel = null - return 1 - var/mob/living/user = usr - if(can_run(usr, 1, ACCESS_NETWORK)) - if(channel) - var/response = alert(user, "Really engage admin-mode? You will be disconnected from your current channel!", "NTNRC Admin mode", "Yes", "No") - if(response == "Yes") - if(channel) - channel.remove_client(src) - channel = null - else - return - netadmin_mode = 1 - if("PRG_changename") - . = 1 - var/mob/living/user = usr - var/newname = sanitize(input(user,"Enter new nickname or leave blank to cancel:")) - if(!newname) - return 1 - if(channel) - channel.add_status_message("[username] is now known as [newname].") - username = newname - - if("PRG_savelog") - . = 1 - if(!channel) - return - var/mob/living/user = usr - var/logname = stripped_input(user,"Enter desired logfile name (.log) or leave blank to cancel:") - if(!logname || !channel) - return 1 - var/datum/computer_file/data/logfile = new/datum/computer_file/data/logfile() - // Now we will generate HTML-compliant file that can actually be viewed/printed. - logfile.filename = logname - logfile.stored_data = "\[b\]Logfile dump from NTNRC channel [channel.title]\[/b\]\[BR\]" - for(var/logstring in channel.messages) - logfile.stored_data += "[logstring]\[BR\]" - logfile.stored_data += "\[b\]Logfile dump completed.\[/b\]" - logfile.calculate_size() - var/obj/item/computer_hardware/hard_drive/hard_drive = computer.all_components[MC_HDD] - if(!computer || !hard_drive || !hard_drive.store_file(logfile)) - if(!computer) - // This program shouldn't even be runnable without computer. - CRASH("Var computer is null!") - if(!hard_drive) - computer.visible_message("\The [computer] shows an \"I/O Error - Hard drive connection error\" warning.") - else // In 99.9% cases this will mean our HDD is full - computer.visible_message("\The [computer] shows an \"I/O Error - Hard drive may be full. Please free some space and try again. Required space: [logfile.size]GQ\" warning.") - if("PRG_renamechannel") - . = 1 - if(!operator_mode || !channel) - return 1 - var/mob/living/user = usr - var/newname = reject_bad_text(input(user, "Enter new channel name or leave blank to cancel:")) - if(!newname || !channel) - return - channel.add_status_message("Channel renamed from [channel.title] to [newname] by operator.") - channel.title = newname - if("PRG_deletechannel") - . = 1 - if(channel && ((channel.operator == src) || netadmin_mode)) - qdel(channel) - channel = null - if("PRG_setpassword") - . = 1 - if(!channel || ((channel.operator != src) && !netadmin_mode)) - return 1 - - var/mob/living/user = usr - var/newpassword = sanitize(input(user, "Enter new password for this channel. Leave blank to cancel, enter 'nopassword' to remove password completely:")) - if(!channel || !newpassword || ((channel.operator != src) && !netadmin_mode)) - return 1 - - if(newpassword == "nopassword") - channel.password = "" - else - channel.password = newpassword - -/datum/computer_file/program/chatclient/process_tick() - ..() - if(program_state != PROGRAM_STATE_KILLED) - ui_header = "ntnrc_idle.gif" - if(channel) - // Remember the last message. If there is no message in the channel remember null. - last_message = channel.messages.len ? channel.messages[channel.messages.len - 1] : null - else - last_message = null - return 1 - if(channel && channel.messages && channel.messages.len) - ui_header = last_message == channel.messages[channel.messages.len - 1] ? "ntnrc_idle.gif" : "ntnrc_new.gif" - else - ui_header = "ntnrc_idle.gif" - -/datum/computer_file/program/chatclient/kill_program(forced = FALSE) - if(channel) - channel.remove_client(src) - channel = null - ..() - -/datum/computer_file/program/chatclient/ui_data(mob/user) - if(!SSnetworks.station_network || !SSnetworks.station_network.chat_channels) - return - - var/list/data = list() - - data = get_header_data() - - - data["adminmode"] = netadmin_mode - if(channel) - data["title"] = channel.title - var/list/messages[0] - for(var/M in channel.messages) - messages.Add(list(list( - "msg" = M - ))) - data["messages"] = messages - var/list/clients[0] - for(var/C in channel.clients) - var/datum/computer_file/program/chatclient/cl = C - clients.Add(list(list( - "name" = cl.username - ))) - data["clients"] = clients - operator_mode = (channel.operator == src) ? 1 : 0 - data["is_operator"] = operator_mode || netadmin_mode - - else // Channel selection screen - var/list/all_channels[0] - for(var/C in SSnetworks.station_network.chat_channels) - var/datum/ntnet_conversation/conv = C - if(conv && conv.title) - all_channels.Add(list(list( - "chan" = conv.title, - "id" = conv.id - ))) - data["all_channels"] = all_channels - - return data diff --git a/code/modules/modular_computers/file_system/programs/nttransfer.dm b/code/modules/modular_computers/file_system/programs/nttransfer.dm deleted file mode 100644 index fabe6f3165..0000000000 --- a/code/modules/modular_computers/file_system/programs/nttransfer.dm +++ /dev/null @@ -1,183 +0,0 @@ -/datum/computer_file/program/nttransfer - filename = "nttransfer" - filedesc = "" - extended_desc = "" - program_icon_state = "comm_logs" - size = 7 - requires_ntnet = 1 - requires_ntnet_feature = NTNET_PEERTOPEER - network_destination = "other device via P2P tunnel" - available_on_ntnet = 1 - tgui_id = "ntos_net_transfer" - - var/error = "" // Error screen - var/server_password = "" // Optional password to download the file. - var/datum/computer_file/provided_file = null // File which is provided to clients. - var/datum/computer_file/downloaded_file = null // File which is being downloaded - var/list/connected_clients = list() // List of connected clients. - var/datum/computer_file/program/nttransfer/remote // Client var, specifies who are we downloading from. - var/download_completion = 0 // Download progress in GQ - var/download_netspeed = 0 // Our connectivity speed in GQ/s - var/actual_netspeed = 0 // Displayed in the UI, this is the actual transfer speed. - var/unique_token // UID of this program - var/upload_menu = 0 // Whether we show the program list and upload menu - var/static/nttransfer_uid = 0 - -/datum/computer_file/program/nttransfer/New() - unique_token = nttransfer_uid++ - ..() - -/datum/computer_file/program/nttransfer/process_tick() - // Server mode - update_netspeed() - if(provided_file) - for(var/datum/computer_file/program/nttransfer/C in connected_clients) - // Transfer speed is limited by device which uses slower connectivity. - // We can have multiple clients downloading at same time, but let's assume we use some sort of multicast transfer - // so they can all run on same speed. - C.actual_netspeed = min(C.download_netspeed, download_netspeed) - C.download_completion += C.actual_netspeed - if(C.download_completion >= provided_file.size) - C.finish_download() - else if(downloaded_file) // Client mode - if(!remote) - crash_download("Connection to remote server lost") - -/datum/computer_file/program/nttransfer/kill_program(forced = FALSE) - if(downloaded_file) // Client mode, clean up variables for next use - finalize_download() - - if(provided_file) // Server mode, disconnect all clients - for(var/datum/computer_file/program/nttransfer/P in connected_clients) - P.crash_download("Connection terminated by remote server") - downloaded_file = null - ..(forced) - -/datum/computer_file/program/nttransfer/proc/update_netspeed() - download_netspeed = 0 - switch(ntnet_status) - if(1) - download_netspeed = NTNETSPEED_LOWSIGNAL - if(2) - download_netspeed = NTNETSPEED_HIGHSIGNAL - if(3) - download_netspeed = NTNETSPEED_ETHERNET - -// Finishes download and attempts to store the file on HDD -/datum/computer_file/program/nttransfer/proc/finish_download() - var/obj/item/computer_hardware/hard_drive/hard_drive = computer.all_components[MC_HDD] - if(!computer || !hard_drive || !hard_drive.store_file(downloaded_file)) - error = "I/O Error: Unable to save file. Check your hard drive and try again." - finalize_download() - -// Crashes the download and displays specific error message -/datum/computer_file/program/nttransfer/proc/crash_download(message) - error = message ? message : "An unknown error has occurred during download" - finalize_download() - -// Cleans up variables for next use -/datum/computer_file/program/nttransfer/proc/finalize_download() - if(remote) - remote.connected_clients.Remove(src) - downloaded_file = null - remote = null - download_completion = 0 - -/datum/computer_file/program/nttransfer/ui_act(action, params) - if(..()) - return 1 - switch(action) - if("PRG_downloadfile") - for(var/datum/computer_file/program/nttransfer/P in SSnetworks.station_network.fileservers) - if("[P.unique_token]" == params["id"]) - remote = P - break - if(!remote || !remote.provided_file) - return - if(remote.server_password) - var/pass = reject_bad_text(input(usr, "Code 401 Unauthorized. Please enter password:", "Password required")) - if(pass != remote.server_password) - error = "Incorrect Password" - return - downloaded_file = remote.provided_file.clone() - remote.connected_clients.Add(src) - return 1 - if("PRG_reset") - error = "" - upload_menu = 0 - finalize_download() - if(src in SSnetworks.station_network.fileservers) - SSnetworks.station_network.fileservers.Remove(src) - for(var/datum/computer_file/program/nttransfer/T in connected_clients) - T.crash_download("Remote server has forcibly closed the connection") - provided_file = null - return 1 - if("PRG_setpassword") - var/pass = reject_bad_text(input(usr, "Enter new server password. Leave blank to cancel, input 'none' to disable password.", "Server security", "none")) - if(!pass) - return - if(pass == "none") - server_password = "" - return - server_password = pass - return 1 - if("PRG_uploadfile") - var/obj/item/computer_hardware/hard_drive/hard_drive = computer.all_components[MC_HDD] - for(var/datum/computer_file/F in hard_drive.stored_files) - if("[F.uid]" == params["id"]) - if(F.unsendable) - error = "I/O Error: File locked." - return - if(istype(F, /datum/computer_file/program)) - var/datum/computer_file/program/P = F - if(!P.can_run(usr,transfer = 1)) - error = "Access Error: Insufficient rights to upload file." - provided_file = F - SSnetworks.station_network.fileservers.Add(src) - return - error = "I/O Error: Unable to locate file on hard drive." - return 1 - if("PRG_uploadmenu") - upload_menu = 1 - - -/datum/computer_file/program/nttransfer/ui_data(mob/user) - - var/list/data = get_header_data() - - if(error) - data["error"] = error - else if(downloaded_file) - data["downloading"] = 1 - data["download_size"] = downloaded_file.size - data["download_progress"] = download_completion - data["download_netspeed"] = actual_netspeed - data["download_name"] = "[downloaded_file.filename].[downloaded_file.filetype]" - else if (provided_file) - data["uploading"] = 1 - data["upload_uid"] = unique_token - data["upload_clients"] = connected_clients.len - data["upload_haspassword"] = server_password ? 1 : 0 - data["upload_filename"] = "[provided_file.filename].[provided_file.filetype]" - else if (upload_menu) - var/list/all_files[0] - var/obj/item/computer_hardware/hard_drive/hard_drive = computer.all_components[MC_HDD] - for(var/datum/computer_file/F in hard_drive.stored_files) - all_files.Add(list(list( - "uid" = F.uid, - "filename" = "[F.filename].[F.filetype]", - "size" = F.size - ))) - data["upload_filelist"] = all_files - else - var/list/all_servers[0] - for(var/datum/computer_file/program/nttransfer/P in SSnetworks.station_network.fileservers) - all_servers.Add(list(list( - "uid" = P.unique_token, - "filename" = "[P.provided_file.filename].[P.provided_file.filetype]", - "size" = P.provided_file.size, - "haspassword" = P.server_password ? 1 : 0 - ))) - data["servers"] = all_servers - - return data diff --git a/code/modules/modular_computers/file_system/programs/powermonitor.dm b/code/modules/modular_computers/file_system/programs/powermonitor.dm deleted file mode 100644 index 0314387310..0000000000 --- a/code/modules/modular_computers/file_system/programs/powermonitor.dm +++ /dev/null @@ -1,105 +0,0 @@ -//normal computer version is located in code\modules\power\monitor.dm, /obj/machinery/computer/monitor - -/datum/computer_file/program/power_monitor - filename = "powermonitor" - filedesc = "" - program_icon_state = "power_monitor" - extended_desc = "" - ui_header = "power_norm.gif" - transfer_access = ACCESS_ENGINE - usage_flags = PROGRAM_CONSOLE - requires_ntnet = 0 - network_destination = "power monitoring system" - size = 9 - tgui_id = "ntos_power_monitor" - ui_style = "ntos" - ui_x = 550 - ui_y = 700 - - var/has_alert = 0 - var/obj/structure/cable/attached_wire - var/obj/machinery/power/apc/local_apc - var/list/history = list() - var/record_size = 60 - var/record_interval = 50 - var/next_record = 0 - - -/datum/computer_file/program/power_monitor/run_program(mob/living/user) - . = ..(user) - search() - history["supply"] = list() - history["demand"] = list() - - -/datum/computer_file/program/power_monitor/process_tick() - if(!get_powernet()) - search() - else - record() - -/datum/computer_file/program/power_monitor/proc/search() //keep in sync with /obj/machinery/computer/monitor's version - var/turf/T = get_turf(computer) - attached_wire = locate(/obj/structure/cable) in T - if(attached_wire) - return - var/area/A = get_area(computer) //if the computer isn't directly connected to a wire, attempt to find the APC powering it to pull it's powernet instead - if(!A) - return - local_apc = A.get_apc() - if(!local_apc) - return - if(!local_apc.terminal) //this really shouldn't happen without badminnery. - local_apc = null - -/datum/computer_file/program/power_monitor/proc/get_powernet() //keep in sync with /obj/machinery/computer/monitor's version - if(attached_wire || (local_apc && local_apc.terminal)) - return attached_wire ? attached_wire.powernet : local_apc.terminal.powernet - return FALSE - -/datum/computer_file/program/power_monitor/proc/record() //keep in sync with /obj/machinery/computer/monitor's version - if(world.time >= next_record) - next_record = world.time + record_interval - - var/datum/powernet/connected_powernet = get_powernet() - - var/list/supply = history["supply"] - if(connected_powernet) - supply += connected_powernet.viewavail - if(supply.len > record_size) - supply.Cut(1, 2) - - var/list/demand = history["demand"] - if(connected_powernet) - demand += connected_powernet.viewload - if(demand.len > record_size) - demand.Cut(1, 2) - -/datum/computer_file/program/power_monitor/ui_data() - var/datum/powernet/connected_powernet = get_powernet() - var/list/data = get_header_data() - data["stored"] = record_size - data["interval"] = record_interval / 10 - data["attached"] = connected_powernet ? TRUE : FALSE - if(connected_powernet) - data["supply"] = DisplayPower(connected_powernet.viewavail) - data["demand"] = DisplayPower(connected_powernet.viewload) - data["history"] = history - - data["areas"] = list() - if(connected_powernet) - for(var/obj/machinery/power/terminal/term in connected_powernet.nodes) - var/obj/machinery/power/apc/A = term.master - if(istype(A)) - data["areas"] += list(list( - "name" = A.area.name, - "charge" = A.cell ? A.cell.percent() : 0, - "load" = DisplayPower(A.lastused_total), - "charging" = A.charging, - "eqp" = A.equipment, - "lgt" = A.lighting, - "env" = A.environ - )) - - return data - diff --git a/code/modules/modular_computers/file_system/programs/sm_monitor.dm b/code/modules/modular_computers/file_system/programs/sm_monitor.dm deleted file mode 100644 index 0026441592..0000000000 --- a/code/modules/modular_computers/file_system/programs/sm_monitor.dm +++ /dev/null @@ -1,127 +0,0 @@ -/datum/computer_file/program/supermatter_monitor - filename = "smmonitor" - filedesc = "" - ui_header = "smmon_0.gif" - program_icon_state = "smmon_0" - extended_desc = "" - requires_ntnet = TRUE - transfer_access = ACCESS_CONSTRUCTION - network_destination = "supermatter monitoring system" - size = 5 - tgui_id = "ntos_supermatter_monitor" - ui_style = "ntos" - ui_x = 600 - ui_y = 350 - var/last_status = SUPERMATTER_INACTIVE - var/list/supermatters - var/obj/machinery/power/supermatter_crystal/active // Currently selected supermatter crystal. - - -/datum/computer_file/program/supermatter_monitor/process_tick() - ..() - var/new_status = get_status() - if(last_status != new_status) - last_status = new_status - ui_header = "smmon_[last_status].gif" - program_icon_state = "smmon_[last_status]" - if(istype(computer)) - computer.update_icon() - -/datum/computer_file/program/supermatter_monitor/run_program(mob/living/user) - . = ..(user) - refresh() - -/datum/computer_file/program/supermatter_monitor/kill_program(forced = FALSE) - active = null - supermatters = null - ..() - -// Refreshes list of active supermatter crystals -/datum/computer_file/program/supermatter_monitor/proc/refresh() - supermatters = list() - var/turf/T = get_turf(ui_host()) - if(!T) - return - for(var/obj/machinery/power/supermatter_crystal/S in GLOB.machines) - // Delaminating, not within coverage, not on a tile. - if (!isturf(S.loc) || !(is_station_level(S.z) || is_mining_level(S.z) || S.z == T.z)) - continue - supermatters.Add(S) - - if(!(active in supermatters)) - active = null - -/datum/computer_file/program/supermatter_monitor/proc/get_status() - . = SUPERMATTER_INACTIVE - for(var/obj/machinery/power/supermatter_crystal/S in supermatters) - . = max(., S.get_status()) - -/datum/computer_file/program/supermatter_monitor/ui_data() - var/list/data = get_header_data() - - if(istype(active)) - var/turf/T = get_turf(active) - if(!T) - active = null - refresh() - return - var/datum/gas_mixture/air = T.return_air() - if(!air) - active = null - return - - data["active"] = TRUE - data["SM_integrity"] = active.get_integrity() - data["SM_power"] = active.power - data["SM_ambienttemp"] = air.temperature - data["SM_ambientpressure"] = air.return_pressure() - //data["SM_EPR"] = round((air.total_moles / air.group_multiplier) / 23.1, 0.01) - var/list/gasdata = list() - - - if(air.total_moles()) - for(var/gasid in air.gases) - gasdata.Add(list(list( - "name"= air.gases[gasid][GAS_META][META_GAS_NAME], - "amount" = round(100*air.gases[gasid][MOLES]/air.total_moles(),0.01)))) - - else - for(var/gasid in air.gases) - gasdata.Add(list(list( - "name"= air.gases[gasid][GAS_META][META_GAS_NAME], - "amount" = 0))) - - data["gases"] = gasdata - else - var/list/SMS = list() - for(var/obj/machinery/power/supermatter_crystal/S in supermatters) - var/area/A = get_area(S) - if(A) - SMS.Add(list(list( - "area_name" = A.name, - "integrity" = S.get_integrity(), - "uid" = S.uid - ))) - - data["active"] = FALSE - data["supermatters"] = SMS - - return data - -/datum/computer_file/program/supermatter_monitor/ui_act(action, params) - if(..()) - return TRUE - - switch(action) - if("PRG_clear") - active = null - return TRUE - if("PRG_refresh") - refresh() - return TRUE - if("PRG_set") - var/newuid = text2num(params["target"]) - for(var/obj/machinery/power/supermatter_crystal/S in supermatters) - if(S.uid == newuid) - active = S - return TRUE diff --git a/code/modules/modular_computers/hardware/CPU.dm b/code/modules/modular_computers/hardware/CPU.dm deleted file mode 100644 index 58d6a66053..0000000000 --- a/code/modules/modular_computers/hardware/CPU.dm +++ /dev/null @@ -1,40 +0,0 @@ -// CPU that allows the computer to run programs. -// Better CPUs are obtainable via research and can run more programs on background. - -/obj/item/computer_hardware/processor_unit - name = "processor board" - desc = "" - icon_state = "cpuboard" - w_class = WEIGHT_CLASS_SMALL - power_usage = 50 - critical = 1 - malfunction_probability = 1 - var/max_idle_programs = 2 // 2 idle, + 1 active = 3 as said in description. - device_type = MC_CPU - -/obj/item/computer_hardware/processor_unit/on_remove(obj/item/modular_computer/MC, mob/user) - MC.shutdown_computer() - -/obj/item/computer_hardware/processor_unit/small - name = "microprocessor" - desc = "" - icon_state = "cpu" - w_class = WEIGHT_CLASS_TINY - power_usage = 25 - max_idle_programs = 1 - -/obj/item/computer_hardware/processor_unit/photonic - name = "photonic processor board" - desc = "" - icon_state = "cpuboard_super" - w_class = WEIGHT_CLASS_SMALL - power_usage = 250 - max_idle_programs = 4 - -/obj/item/computer_hardware/processor_unit/photonic/small - name = "photonic microprocessor" - desc = "" - icon_state = "cpu_super" - w_class = WEIGHT_CLASS_TINY - power_usage = 75 - max_idle_programs = 2 diff --git a/code/modules/modular_computers/hardware/_hardware.dm b/code/modules/modular_computers/hardware/_hardware.dm deleted file mode 100644 index a5e667da0d..0000000000 --- a/code/modules/modular_computers/hardware/_hardware.dm +++ /dev/null @@ -1,103 +0,0 @@ -/obj/item/computer_hardware - name = "hardware" - desc = "" - icon = 'icons/obj/module.dmi' - icon_state = "std_mod" - - w_class = WEIGHT_CLASS_TINY // w_class limits which devices can contain this component. - // 1: PDAs/Tablets, 2: Laptops, 3-4: Consoles only - var/obj/item/modular_computer/holder = null - // Computer that holds this hardware, if any. - - var/power_usage = 0 // If the hardware uses extra power, change this. - var/enabled = 1 // If the hardware is turned off set this to 0. - var/critical = 0 // Prevent disabling for important component, like the CPU. - var/can_install = 1 // Prevents direct installation of removable media. - var/damage = 0 // Current damage level - var/max_damage = 100 // Maximal damage level. - var/damage_malfunction = 20 // "Malfunction" threshold. When damage exceeds this value the hardware piece will semi-randomly fail and do !!FUN!! things - var/damage_failure = 50 // "Failure" threshold. When damage exceeds this value the hardware piece will not work at all. - var/malfunction_probability = 10// Chance of malfunction when the component is damaged - var/device_type - -/obj/item/computer_hardware/New(obj/L) - ..() - pixel_x = rand(-8, 8) - pixel_y = rand(-8, 8) - -/obj/item/computer_hardware/Destroy() - if(holder) - holder.uninstall_component(src) - return ..() - - -/obj/item/computer_hardware/attackby(obj/item/I, mob/living/user) - // Cable coil. Works as repair method, but will probably require multiple applications and more cable. - if(istype(I, /obj/item/stack/cable_coil)) - var/obj/item/stack/S = I - if(obj_integrity == max_integrity) - to_chat(user, "\The [src] doesn't seem to require repairs.") - return 1 - if(S.use(1)) - to_chat(user, "I patch up \the [src] with a bit of \the [I].") - obj_integrity = min(obj_integrity + 10, max_integrity) - return 1 - - if(try_insert(I, user)) - return TRUE - - return ..() - -/obj/item/computer_hardware/multitool_act(mob/living/user, obj/item/I) - ..() - to_chat(user, "***** DIAGNOSTICS REPORT *****") - diagnostics(user) - to_chat(user, "******************************") - return TRUE - -// Called on multitool click, prints diagnostic information to the user. -/obj/item/computer_hardware/proc/diagnostics(mob/user) - to_chat(user, "Hardware Integrity Test... (Corruption: [damage]/[max_damage]) [damage > damage_failure ? "FAIL" : damage > damage_malfunction ? "WARN" : "PASS"]") - -// Handles damage checks -/obj/item/computer_hardware/proc/check_functionality() - if(!enabled) // Disabled. - return FALSE - - if(damage > damage_failure) // Too damaged to work at all. - return FALSE - - if(damage > damage_malfunction) // Still working. Well, sometimes... - if(prob(malfunction_probability)) - return FALSE - - return TRUE // Good to go. - -/obj/item/computer_hardware/examine(mob/user) - . = ..() - if(damage > damage_failure) - . += "It seems to be severely damaged!" - else if(damage > damage_malfunction) - . += "It seems to be damaged!" - else if(damage) - . += "It seems to be slightly damaged." - -// Component-side compatibility check. -/obj/item/computer_hardware/proc/can_install(obj/item/modular_computer/M, mob/living/user = null) - return can_install - -// Called when component is installed into PC. -/obj/item/computer_hardware/proc/on_install(obj/item/modular_computer/M, mob/living/user = null) - return - -// Called when component is removed from PC. -/obj/item/computer_hardware/proc/on_remove(obj/item/modular_computer/M, mob/living/user = null) - try_eject(forced = 1) - -// Called when someone tries to insert something in it - paper in printer, card in card reader, etc. -/obj/item/computer_hardware/proc/try_insert(obj/item/I, mob/living/user = null) - return FALSE - -// Called when someone tries to eject something from it - card from card reader, etc. -/obj/item/computer_hardware/proc/try_eject(slot=0, mob/living/user = null, forced = 0) - return FALSE diff --git a/code/modules/modular_computers/hardware/ai_slot.dm b/code/modules/modular_computers/hardware/ai_slot.dm deleted file mode 100644 index 94a762ec22..0000000000 --- a/code/modules/modular_computers/hardware/ai_slot.dm +++ /dev/null @@ -1,74 +0,0 @@ -/obj/item/computer_hardware/ai_slot - name = "intelliCard interface slot" - desc = "" - power_usage = 100 //W - icon_state = "card_mini" - w_class = WEIGHT_CLASS_SMALL - device_type = MC_AI - - var/obj/item/aicard/stored_card = null - var/locked = FALSE - -/obj/item/computer_hardware/ai_slot/handle_atom_del(atom/A) - if(A == stored_card) - try_eject(0, null, TRUE) - . = ..() - -/obj/item/computer_hardware/ai_slot/examine(mob/user) - . = ..() - if(stored_card) - . += "There appears to be an intelliCard loaded. There appears to be a pinhole protecting a manual eject button. A screwdriver could probably press it." - -/obj/item/computer_hardware/ai_slot/on_install(obj/item/modular_computer/M, mob/living/user = null) - M.add_verb(device_type) - -/obj/item/computer_hardware/ai_slot/on_remove(obj/item/modular_computer/M, mob/living/user = null) - M.remove_verb(device_type) - -/obj/item/computer_hardware/ai_slot/try_insert(obj/item/I, mob/living/user = null) - if(!holder) - return FALSE - - if(!istype(I, /obj/item/aicard)) - return FALSE - - if(stored_card) - to_chat(user, "I try to insert \the [I] into \the [src], but the slot is occupied.") - return FALSE - if(user && !user.transferItemToLoc(I, src)) - return FALSE - - stored_card = I - to_chat(user, "I insert \the [I] into \the [src].") - - return TRUE - - -/obj/item/computer_hardware/ai_slot/try_eject(slot=0,mob/living/user = null,forced = 0) - if(!stored_card) - to_chat(user, "There is no card in \the [src].") - return FALSE - - if(locked && !forced) - to_chat(user, "Safeties prevent you from removing the card until reconstruction is complete...") - return FALSE - - if(stored_card) - to_chat(user, "I remove [stored_card] from [src].") - locked = FALSE - if(user) - user.put_in_hands(stored_card) - else - stored_card.forceMove(drop_location()) - stored_card = null - - return TRUE - return FALSE - -/obj/item/computer_hardware/ai_slot/attackby(obj/item/I, mob/living/user) - if(..()) - return - if(I.tool_behaviour == TOOL_SCREWDRIVER) - to_chat(user, "I press down on the manual eject button with \the [I].") - try_eject(,user,1) - return diff --git a/code/modules/modular_computers/hardware/battery_module.dm b/code/modules/modular_computers/hardware/battery_module.dm deleted file mode 100644 index 1aea0ce764..0000000000 --- a/code/modules/modular_computers/hardware/battery_module.dm +++ /dev/null @@ -1,105 +0,0 @@ -/obj/item/computer_hardware/battery - name = "power cell controller" - desc = "" - icon_state = "cell_con" - critical = 1 - malfunction_probability = 1 - var/obj/item/stock_parts/cell/battery = null - device_type = MC_CELL - -/obj/item/computer_hardware/battery/New(loc, battery_type = null) - if(battery_type) - battery = new battery_type(src) - ..() - -/obj/item/computer_hardware/battery/Destroy() - . = ..() - QDEL_NULL(battery) - -/obj/item/computer_hardware/battery/handle_atom_del(atom/A) - if(A == battery) - try_eject(0, null, TRUE) - . = ..() - -/obj/item/computer_hardware/battery/try_insert(obj/item/I, mob/living/user = null) - if(!holder) - return FALSE - - if(!istype(I, /obj/item/stock_parts/cell)) - return FALSE - - if(battery) - to_chat(user, "I try to connect \the [I] to \the [src], but its connectors are occupied.") - return FALSE - - if(I.w_class > holder.max_hardware_size) - to_chat(user, "This power cell is too large for \the [holder]!") - return FALSE - - if(user && !user.transferItemToLoc(I, src)) - return FALSE - - battery = I - to_chat(user, "I connect \the [I] to \the [src].") - - return TRUE - - -/obj/item/computer_hardware/battery/try_eject(slot=0, mob/living/user = null, forced = 0) - if(!battery) - to_chat(user, "There is no power cell connected to \the [src].") - return FALSE - else - if(user) - user.put_in_hands(battery) - else - battery.forceMove(drop_location()) - to_chat(user, "I detach \the [battery] from \the [src].") - battery = null - - if(holder) - if(holder.enabled && !holder.use_power()) - holder.shutdown_computer() - - return TRUE - - - - - - - -/obj/item/stock_parts/cell/computer - name = "standard battery" - desc = "" - icon = 'icons/obj/module.dmi' - icon_state = "cell_mini" - w_class = WEIGHT_CLASS_TINY - maxcharge = 750 - - -/obj/item/stock_parts/cell/computer/advanced - name = "advanced battery" - desc = "" - icon_state = "cell" - w_class = WEIGHT_CLASS_SMALL - maxcharge = 1500 - -/obj/item/stock_parts/cell/computer/super - name = "super battery" - desc = "" - icon_state = "cell" - w_class = WEIGHT_CLASS_SMALL - maxcharge = 2000 - -/obj/item/stock_parts/cell/computer/micro - name = "micro battery" - desc = "" - icon_state = "cell_micro" - maxcharge = 500 - -/obj/item/stock_parts/cell/computer/nano - name = "nano battery" - desc = "" - icon_state = "cell_micro" - maxcharge = 300 diff --git a/code/modules/modular_computers/hardware/card_slot.dm b/code/modules/modular_computers/hardware/card_slot.dm deleted file mode 100644 index 1feeae7205..0000000000 --- a/code/modules/modular_computers/hardware/card_slot.dm +++ /dev/null @@ -1,134 +0,0 @@ -/obj/item/computer_hardware/card_slot - name = "identification card authentication module" // \improper breaks the find_hardware_by_name proc - desc = "" - power_usage = 10 //W - icon_state = "card_mini" - w_class = WEIGHT_CLASS_TINY - device_type = MC_CARD - - var/obj/item/card/id/stored_card = null - var/obj/item/card/id/stored_card2 = null - -/obj/item/computer_hardware/card_slot/handle_atom_del(atom/A) - if(A == stored_card) - try_eject(1, null, TRUE) - if(A == stored_card2) - try_eject(2, null, TRUE) - . = ..() - -/obj/item/computer_hardware/card_slot/Destroy() - try_eject() - return ..() - -/obj/item/computer_hardware/card_slot/GetAccess() - if(stored_card && stored_card2) // Best of both worlds - return (stored_card.GetAccess() | stored_card2.GetAccess()) - else if(stored_card) - return stored_card.GetAccess() - else if(stored_card2) - return stored_card2.GetAccess() - return ..() - -/obj/item/computer_hardware/card_slot/GetID() - if(stored_card) - return stored_card - else if(stored_card2) - return stored_card2 - return ..() - -/obj/item/computer_hardware/card_slot/RemoveID() - if(stored_card) - . = stored_card - if(!try_eject(1)) - return null - return - if(stored_card2) - . = stored_card2 - if(!try_eject(2)) - return null - -/obj/item/computer_hardware/card_slot/on_install(obj/item/modular_computer/M, mob/living/user = null) - M.add_verb(device_type) - -/obj/item/computer_hardware/card_slot/on_remove(obj/item/modular_computer/M, mob/living/user = null) - M.remove_verb(device_type) - -/obj/item/computer_hardware/card_slot/try_insert(obj/item/I, mob/living/user = null) - if(!holder) - return FALSE - - if(!istype(I, /obj/item/card/id)) - return FALSE - - if(stored_card && stored_card2) - to_chat(user, "I try to insert \the [I] into \the [src], but its slots are occupied.") - return FALSE - if(user) - if(!user.transferItemToLoc(I, src)) - return FALSE - else - I.forceMove(src) - - if(!stored_card) - stored_card = I - else - stored_card2 = I - to_chat(user, "I insert \the [I] into \the [src].") - playsound(src, 'sound/blank.ogg', 50, FALSE) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.sec_hud_set_ID() - - return TRUE - - -/obj/item/computer_hardware/card_slot/try_eject(slot=0, mob/living/user = null, forced = 0) - if(!stored_card && !stored_card2) - to_chat(user, "There are no cards in \the [src].") - return FALSE - - var/ejected = 0 - if(stored_card && (!slot || slot == 1)) - if(user) - user.put_in_hands(stored_card) - else - stored_card.forceMove(drop_location()) - stored_card = null - ejected++ - - if(stored_card2 && (!slot || slot == 2)) - if(user) - user.put_in_hands(stored_card2) - else - stored_card2.forceMove(drop_location()) - stored_card2 = null - ejected++ - - if(ejected) - if(holder) - if(holder.active_program) - holder.active_program.event_idremoved(0, slot) - - for(var/I in holder.idle_threads) - var/datum/computer_file/program/P = I - P.event_idremoved(1, slot) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.sec_hud_set_ID() - to_chat(user, "I remove the card[ejected>1 ? "s" : ""] from \the [src].") - playsound(src, 'sound/blank.ogg', 50, FALSE) - return TRUE - return FALSE - -/obj/item/computer_hardware/card_slot/attackby(obj/item/I, mob/living/user) - if(..()) - return - if(I.tool_behaviour == TOOL_SCREWDRIVER) - to_chat(user, "I press down on the manual eject button with \the [I].") - try_eject(0,user) - return - -/obj/item/computer_hardware/card_slot/examine(mob/user) - . = ..() - if(stored_card || stored_card2) - . += "There appears to be something loaded in the card slots." diff --git a/code/modules/modular_computers/hardware/hard_drive.dm b/code/modules/modular_computers/hardware/hard_drive.dm deleted file mode 100644 index bfbfc1af47..0000000000 --- a/code/modules/modular_computers/hardware/hard_drive.dm +++ /dev/null @@ -1,175 +0,0 @@ -/obj/item/computer_hardware/hard_drive - name = "hard disk drive" - desc = "" - power_usage = 25 - icon_state = "harddisk_mini" - critical = 1 - w_class = WEIGHT_CLASS_TINY - device_type = MC_HDD - var/max_capacity = 128 - var/used_capacity = 0 - var/list/stored_files = list() // List of stored files on this drive. DO NOT MODIFY DIRECTLY! - -/obj/item/computer_hardware/hard_drive/on_remove(obj/item/modular_computer/MC, mob/user) - MC.shutdown_computer() - -/obj/item/computer_hardware/hard_drive/proc/install_default_programs() - store_file(new/datum/computer_file/program/computerconfig(src)) // Computer configuration utility, allows hardware control and displays more info than status bar - store_file(new/datum/computer_file/program/ntnetdownload(src)) // NTNet Downloader Utility, allows users to download more software from NTNet repository - store_file(new/datum/computer_file/program/filemanager(src)) // File manager, allows text editor functions and basic file manipulation. - -/obj/item/computer_hardware/hard_drive/examine(user) - . = ..() - . += "It has [max_capacity] GQ of storage capacity." - -/obj/item/computer_hardware/hard_drive/diagnostics(mob/user) - ..() - // 999 is a byond limit that is in place. It's unlikely someone will reach that many files anyway, since you would sooner run out of space. - to_chat(user, "NT-NFS File Table Status: [stored_files.len]/999") - to_chat(user, "Storage capacity: [used_capacity]/[max_capacity]GQ") - -// Use this proc to add file to the drive. Returns 1 on success and 0 on failure. Contains necessary sanity checks. -/obj/item/computer_hardware/hard_drive/proc/store_file(datum/computer_file/F) - if(!F || !istype(F)) - return 0 - - if(!can_store_file(F)) - return 0 - - if(!check_functionality()) - return 0 - - if(!stored_files) - return 0 - - // This file is already stored. Don't store it again. - if(F in stored_files) - return 0 - - F.holder = src - stored_files.Add(F) - recalculate_size() - return 1 - -// Use this proc to remove file from the drive. Returns 1 on success and 0 on failure. Contains necessary sanity checks. -/obj/item/computer_hardware/hard_drive/proc/remove_file(datum/computer_file/F) - if(!F || !istype(F)) - return 0 - - if(!stored_files) - return 0 - - if(!check_functionality()) - return 0 - - if(F in stored_files) - stored_files -= F - recalculate_size() - return 1 - else - return 0 - -// Loops through all stored files and recalculates used_capacity of this drive -/obj/item/computer_hardware/hard_drive/proc/recalculate_size() - var/total_size = 0 - for(var/datum/computer_file/F in stored_files) - total_size += F.size - - used_capacity = total_size - -// Checks whether file can be stored on the hard drive. We can only store unique files, so this checks whether we wouldn't get a duplicity by adding a file. -/obj/item/computer_hardware/hard_drive/proc/can_store_file(datum/computer_file/F) - if(!F || !istype(F)) - return 0 - - if(F in stored_files) - return 0 - - var/name = F.filename + "." + F.filetype - for(var/datum/computer_file/file in stored_files) - if((file.filename + "." + file.filetype) == name) - return 0 - - // In the unlikely event someone manages to create that many files. - // BYOND is acting weird with numbers above 999 in loops (infinite loop prevention) - if(stored_files.len >= 999) - return 0 - if((used_capacity + F.size) > max_capacity) - return 0 - else - return 1 - - -// Tries to find the file by filename. Returns null on failure -/obj/item/computer_hardware/hard_drive/proc/find_file_by_name(filename) - if(!check_functionality()) - return null - - if(!filename) - return null - - if(!stored_files) - return null - - for(var/datum/computer_file/F in stored_files) - if(F.filename == filename) - return F - return null - -/obj/item/computer_hardware/hard_drive/Destroy() - stored_files = null - return ..() - -/obj/item/computer_hardware/hard_drive/Initialize() - . = ..() - install_default_programs() - - -/obj/item/computer_hardware/hard_drive/advanced - name = "advanced hard disk drive" - desc = "" - max_capacity = 256 - power_usage = 50 // Hybrid, medium capacity and medium power storage - icon_state = "harddisk_mini" - w_class = WEIGHT_CLASS_SMALL - -/obj/item/computer_hardware/hard_drive/super - name = "super hard disk drive" - desc = "" - max_capacity = 512 - power_usage = 100 // High-capacity but uses lots of power, shortening battery life. Best used with APC link. - icon_state = "harddisk_mini" - w_class = WEIGHT_CLASS_SMALL - -/obj/item/computer_hardware/hard_drive/cluster - name = "cluster hard disk drive" - desc = "" - power_usage = 500 - max_capacity = 2048 - icon_state = "harddisk" - w_class = WEIGHT_CLASS_NORMAL - -// For tablets, etc. - highly power efficient. -/obj/item/computer_hardware/hard_drive/small - name = "solid state drive" - desc = "" - power_usage = 10 - max_capacity = 64 - icon_state = "ssd_mini" - w_class = WEIGHT_CLASS_TINY - custom_price = 15 - -// Syndicate variant - very slight better -/obj/item/computer_hardware/hard_drive/small/syndicate - desc = "" - power_usage = 8 - max_capacity = 70 - var/datum/antagonist/traitor/traitor_data // Syndicate hard drive has the user's data baked directly into it on creation - -/obj/item/computer_hardware/hard_drive/micro - name = "micro solid state drive" - desc = "" - power_usage = 2 - max_capacity = 32 - icon_state = "ssd_micro" - w_class = WEIGHT_CLASS_TINY diff --git a/code/modules/modular_computers/hardware/network_card.dm b/code/modules/modular_computers/hardware/network_card.dm deleted file mode 100644 index 6dc2dbf120..0000000000 --- a/code/modules/modular_computers/hardware/network_card.dm +++ /dev/null @@ -1,79 +0,0 @@ -/obj/item/computer_hardware/network_card - name = "network card" - desc = "" - power_usage = 50 - icon_state = "radio_mini" - var/identification_id = null // Identification ID. Technically MAC address of this device. Can't be changed by user. - var/identification_string = "" // Identification string, technically nickname seen in the network. Can be set by user. - var/long_range = 0 - var/ethernet = 0 // Hard-wired, therefore always on, ignores NTNet wireless checks. - malfunction_probability = 1 - device_type = MC_NET - var/static/ntnet_card_uid = 1 - -/obj/item/computer_hardware/network_card/diagnostics(mob/user) - ..() - to_chat(user, "NIX Unique ID: [identification_id]") - to_chat(user, "NIX User Tag: [identification_string]") - to_chat(user, "Supported protocols:") - to_chat(user, "511.m SFS (Subspace) - Standard Frequency Spread") - if(long_range) - to_chat(user, "511.n WFS/HB (Subspace) - Wide Frequency Spread/High Bandiwdth") - if(ethernet) - to_chat(user, "OpenEth (Physical Connection) - Physical network connection port") - -/obj/item/computer_hardware/network_card/New(l) - ..() - identification_id = ntnet_card_uid++ - -// Returns a string identifier of this network card -/obj/item/computer_hardware/network_card/proc/get_network_tag() - return "[identification_string] (NID [identification_id])" - -// 0 - No signal, 1 - Low signal, 2 - High signal. 3 - Wired Connection -/obj/item/computer_hardware/network_card/proc/get_signal(specific_action = 0) - if(!holder) // Hardware is not installed in anything. No signal. How did this even get called? - return 0 - - if(!check_functionality()) - return 0 - - if(ethernet) // Computer is connected via wired connection. - return 3 - - if(!SSnetworks.station_network || !SSnetworks.station_network.check_function(specific_action)) // NTNet is down and we are not connected via wired connection. No signal. - return 0 - - if(holder) - - var/turf/T = get_turf(holder) - if((T && istype(T)) && (is_station_level(T.z) || is_mining_level(T.z))) - // Computer is on station. Low/High signal depending on what type of network card you have - if(long_range) - return 2 - else - return 1 - - if(long_range) // Computer is not on station, but it has upgraded network card. Low signal. - return 1 - - return 0 // Computer is not on station and does not have upgraded network card. No signal. - - -/obj/item/computer_hardware/network_card/advanced - name = "advanced network card" - desc = "" - long_range = 1 - power_usage = 100 // Better range but higher power usage. - icon_state = "radio" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - w_class = WEIGHT_CLASS_TINY - -/obj/item/computer_hardware/network_card/wired - name = "wired network card" - desc = "" - ethernet = 1 - power_usage = 100 // Better range but higher power usage. - icon_state = "net_wired" - w_class = WEIGHT_CLASS_NORMAL diff --git a/code/modules/modular_computers/hardware/portable_disk.dm b/code/modules/modular_computers/hardware/portable_disk.dm deleted file mode 100644 index 8596e89bba..0000000000 --- a/code/modules/modular_computers/hardware/portable_disk.dm +++ /dev/null @@ -1,32 +0,0 @@ -/obj/item/computer_hardware/hard_drive/portable - name = "data disk" - desc = "" - power_usage = 10 - icon_state = "datadisk6" - w_class = WEIGHT_CLASS_TINY - critical = 0 - max_capacity = 16 - device_type = MC_SDD - -/obj/item/computer_hardware/hard_drive/portable/on_install(obj/item/modular_computer/M, mob/living/user = null) - M.add_verb(device_type) - -/obj/item/computer_hardware/hard_drive/portable/on_remove(obj/item/modular_computer/M, mob/living/user = null) - ..() - M.remove_verb(device_type) - -/obj/item/computer_hardware/hard_drive/portable/install_default_programs() - return // Empty by default - -/obj/item/computer_hardware/hard_drive/portable/advanced - name = "advanced data disk" - power_usage = 20 - icon_state = "datadisk5" - max_capacity = 64 - -/obj/item/computer_hardware/hard_drive/portable/super - name = "super data disk" - desc = "" - power_usage = 40 - icon_state = "datadisk3" - max_capacity = 256 diff --git a/code/modules/modular_computers/hardware/printer.dm b/code/modules/modular_computers/hardware/printer.dm deleted file mode 100644 index 5c07250443..0000000000 --- a/code/modules/modular_computers/hardware/printer.dm +++ /dev/null @@ -1,62 +0,0 @@ -/obj/item/computer_hardware/printer - name = "printer" - desc = "" - power_usage = 100 - icon_state = "printer" - w_class = WEIGHT_CLASS_NORMAL - device_type = MC_PRINT - var/stored_paper = 20 - var/max_paper = 30 - -/obj/item/computer_hardware/printer/diagnostics(mob/living/user) - ..() - to_chat(user, "Paper level: [stored_paper]/[max_paper].") - -/obj/item/computer_hardware/printer/examine(mob/user) - . = ..() - . += "Paper level: [stored_paper]/[max_paper]." - - -/obj/item/computer_hardware/printer/proc/print_text(text_to_print, paper_title = "") - if(!stored_paper) - return FALSE - if(!check_functionality()) - return FALSE - - var/obj/item/paper/P = new/obj/item/paper(holder.drop_location()) - - // Damaged printer causes the resulting paper to be somewhat harder to read. - if(damage > damage_malfunction) - P.info = stars(text_to_print, 100-malfunction_probability) - else - P.info = text_to_print - if(paper_title) - P.name = paper_title - P.update_icon() - P.reload_fields() - stored_paper-- - P = null - return TRUE - -/obj/item/computer_hardware/printer/try_insert(obj/item/I, mob/living/user = null) - if(istype(I, /obj/item/paper)) - if(stored_paper >= max_paper) - to_chat(user, "I try to add \the [I] into [src], but its paper bin is full!") - return FALSE - - if(user && !user.temporarilyRemoveItemFromInventory(I)) - return FALSE - to_chat(user, "I insert \the [I] into [src]'s paper recycler.") - qdel(I) - stored_paper++ - return TRUE - return FALSE - -/obj/item/computer_hardware/printer/mini - name = "miniprinter" - desc = "" - power_usage = 50 - icon_state = "printer_mini" - w_class = WEIGHT_CLASS_TINY - stored_paper = 5 - max_paper = 15 diff --git a/code/modules/modular_computers/hardware/recharger.dm b/code/modules/modular_computers/hardware/recharger.dm deleted file mode 100644 index 17cdae4e0f..0000000000 --- a/code/modules/modular_computers/hardware/recharger.dm +++ /dev/null @@ -1,91 +0,0 @@ -/obj/item/computer_hardware/recharger - critical = 1 - enabled = 1 - var/charge_rate = 100 - device_type = MC_CHARGE - -/obj/item/computer_hardware/recharger/proc/use_power(amount, charging=0) - if(charging) - return 1 - return 0 - -/obj/item/computer_hardware/recharger/process() - ..() - var/obj/item/computer_hardware/battery/battery_module = holder.all_components[MC_CELL] - if(!holder || !battery_module || !battery_module.battery) - return - - var/obj/item/stock_parts/cell/cell = battery_module.battery - if(cell.charge >= cell.maxcharge) - return - - if(use_power(charge_rate, charging=1)) - holder.give_power(charge_rate * GLOB.CELLRATE) - - -/obj/item/computer_hardware/recharger/APC - name = "area power connector" - desc = "" - icon_state = "charger_APC" - w_class = WEIGHT_CLASS_SMALL // Can't be installed into tablets/PDAs - -/obj/item/computer_hardware/recharger/APC/use_power(amount, charging=0) - if(ismachinery(holder.physical)) - var/obj/machinery/M = holder.physical - if(M.powered()) - M.use_power(amount) - return 1 - - else - var/area/A = get_area(src) - if(!istype(A)) - return 0 - - if(A.powered(EQUIP)) - A.use_power(amount, EQUIP) - return 1 - return 0 - -/obj/item/computer_hardware/recharger/wired - name = "wired power connector" - desc = "" - icon_state = "charger_wire" - w_class = WEIGHT_CLASS_NORMAL - -/obj/item/computer_hardware/recharger/wired/can_install(obj/item/modular_computer/M, mob/living/user = null) - if(ismachinery(M.physical) && M.physical.anchored) - return ..() - to_chat(user, "\The [src] is incompatible with portable computers!") - return 0 - -/obj/item/computer_hardware/recharger/wired/use_power(amount, charging=0) - if(ismachinery(holder.physical) && holder.physical.anchored) - var/obj/machinery/M = holder.physical - var/turf/T = M.loc - if(!T || !istype(T)) - return 0 - - var/obj/structure/cable/C = T.get_cable_node() - if(!C || !C.powernet) - return 0 - - var/power_in_net = C.powernet.avail-C.powernet.load - - if(power_in_net && power_in_net > amount) - C.powernet.load += amount - return 1 - - return 0 - - - -// This is not intended to be obtainable in-game. Intended for adminbus and debugging purposes. -/obj/item/computer_hardware/recharger/lambda - name = "lambda coil" - desc = "" - icon_state = "charger_lambda" - w_class = WEIGHT_CLASS_TINY - charge_rate = 100000 - -/obj/item/computer_hardware/recharger/lambda/use_power(amount, charging=0) - return 1 diff --git a/code/modules/modular_computers/laptop_vendor.dm b/code/modules/modular_computers/laptop_vendor.dm deleted file mode 100644 index 12c6a2e84f..0000000000 --- a/code/modules/modular_computers/laptop_vendor.dm +++ /dev/null @@ -1,311 +0,0 @@ -// A vendor machine for modular computer portable devices - Laptops and Tablets - -/obj/machinery/lapvend - name = "computer vendor" - desc = "" - icon = 'icons/obj/vending.dmi' - icon_state = "robotics" - layer = 2.9 - density = TRUE - - // The actual laptop/tablet - var/obj/item/modular_computer/laptop/fabricated_laptop = null - var/obj/item/modular_computer/tablet/fabricated_tablet = null - - // Utility vars - var/state = 0 // 0: Select device type, 1: Select loadout, 2: Payment, 3: Thankyou screen - var/devtype = 0 // 0: None(unselected), 1: Laptop, 2: Tablet - var/total_price = 0 // Price of currently vended device. - var/credits = 0 - - // Device loadout - var/dev_cpu = 1 // 1: Default, 2: Upgraded - var/dev_battery = 1 // 1: Default, 2: Upgraded, 3: Advanced - var/dev_disk = 1 // 1: Default, 2: Upgraded, 3: Advanced - var/dev_netcard = 0 // 0: None, 1: Basic, 2: Long-Range - var/dev_apc_recharger = 0 // 0: None, 1: Standard (LAPTOP ONLY) - var/dev_printer = 0 // 0: None, 1: Standard - var/dev_card = 0 // 0: None, 1: Standard - - ui_x = 500 - ui_y = 400 - -// Removes all traces of old order and allows you to begin configuration from scratch. -/obj/machinery/lapvend/proc/reset_order() - state = 0 - devtype = 0 - if(fabricated_laptop) - qdel(fabricated_laptop) - fabricated_laptop = null - if(fabricated_tablet) - qdel(fabricated_tablet) - fabricated_tablet = null - dev_cpu = 1 - dev_battery = 1 - dev_disk = 1 - dev_netcard = 0 - dev_apc_recharger = 0 - dev_printer = 0 - dev_card = 0 - -// Recalculates the price and optionally even fabricates the device. -/obj/machinery/lapvend/proc/fabricate_and_recalc_price(fabricate = FALSE) - total_price = 0 - if(devtype == 1) // Laptop, generally cheaper to make it accessible for most station roles - var/obj/item/computer_hardware/battery/battery_module = null - if(fabricate) - fabricated_laptop = new /obj/item/modular_computer/laptop/buildable(src) - fabricated_laptop.install_component(new /obj/item/computer_hardware/battery) - battery_module = fabricated_laptop.all_components[MC_CELL] - total_price = 99 - switch(dev_cpu) - if(1) - if(fabricate) - fabricated_laptop.install_component(new /obj/item/computer_hardware/processor_unit/small) - if(2) - if(fabricate) - fabricated_laptop.install_component(new /obj/item/computer_hardware/processor_unit) - total_price += 299 - switch(dev_battery) - if(1) // Basic(750C) - if(fabricate) - battery_module.try_insert(new /obj/item/stock_parts/cell/computer) - if(2) // Upgraded(1100C) - if(fabricate) - battery_module.try_insert(new /obj/item/stock_parts/cell/computer/advanced) - total_price += 199 - if(3) // Advanced(1500C) - if(fabricate) - battery_module.try_insert(new /obj/item/stock_parts/cell/computer/super) - total_price += 499 - switch(dev_disk) - if(1) // Basic(128GQ) - if(fabricate) - fabricated_laptop.install_component(new /obj/item/computer_hardware/hard_drive) - if(2) // Upgraded(256GQ) - if(fabricate) - fabricated_laptop.install_component(new /obj/item/computer_hardware/hard_drive/advanced) - total_price += 99 - if(3) // Advanced(512GQ) - if(fabricate) - fabricated_laptop.install_component(new /obj/item/computer_hardware/hard_drive/super) - total_price += 299 - switch(dev_netcard) - if(1) // Basic(Short-Range) - if(fabricate) - fabricated_laptop.install_component(new /obj/item/computer_hardware/network_card) - total_price += 99 - if(2) // Advanced (Long Range) - if(fabricate) - fabricated_laptop.install_component(new /obj/item/computer_hardware/network_card/advanced) - total_price += 299 - if(dev_apc_recharger) - total_price += 399 - if(fabricate) - fabricated_laptop.install_component(new /obj/item/computer_hardware/recharger/APC) - if(dev_printer) - total_price += 99 - if(fabricate) - fabricated_laptop.install_component(new /obj/item/computer_hardware/printer/mini) - if(dev_card) - total_price += 199 - if(fabricate) - fabricated_laptop.install_component(new /obj/item/computer_hardware/card_slot) - - return total_price - else if(devtype == 2) // Tablet, more expensive, not everyone could probably afford this. - var/obj/item/computer_hardware/battery/battery_module = null - if(fabricate) - fabricated_tablet = new(src) - fabricated_tablet.install_component(new /obj/item/computer_hardware/battery) - fabricated_tablet.install_component(new /obj/item/computer_hardware/processor_unit/small) - battery_module = fabricated_tablet.all_components[MC_CELL] - total_price = 199 - switch(dev_battery) - if(1) // Basic(300C) - if(fabricate) - battery_module.try_insert(new /obj/item/stock_parts/cell/computer/nano) - if(2) // Upgraded(500C) - if(fabricate) - battery_module.try_insert(new /obj/item/stock_parts/cell/computer/micro) - total_price += 199 - if(3) // Advanced(750C) - if(fabricate) - battery_module.try_insert(new /obj/item/stock_parts/cell/computer) - total_price += 499 - switch(dev_disk) - if(1) // Basic(32GQ) - if(fabricate) - fabricated_tablet.install_component(new /obj/item/computer_hardware/hard_drive/micro) - if(2) // Upgraded(64GQ) - if(fabricate) - fabricated_tablet.install_component(new /obj/item/computer_hardware/hard_drive/small) - total_price += 99 - if(3) // Advanced(128GQ) - if(fabricate) - fabricated_tablet.install_component(new /obj/item/computer_hardware/hard_drive) - total_price += 299 - switch(dev_netcard) - if(1) // Basic(Short-Range) - if(fabricate) - fabricated_tablet.install_component(new/obj/item/computer_hardware/network_card) - total_price += 99 - if(2) // Advanced (Long Range) - if(fabricate) - fabricated_tablet.install_component(new/obj/item/computer_hardware/network_card/advanced) - total_price += 299 - if(dev_printer) - total_price += 99 - if(fabricate) - fabricated_tablet.install_component(new/obj/item/computer_hardware/printer) - if(dev_card) - total_price += 199 - if(fabricate) - fabricated_tablet.install_component(new/obj/item/computer_hardware/card_slot) - return total_price - return FALSE - - - - - -/obj/machinery/lapvend/ui_act(action, params) - if(..()) - return TRUE - - switch(action) - if("pick_device") - if(state) // We've already picked a device type - return FALSE - devtype = text2num(params["pick"]) - state = 1 - fabricate_and_recalc_price(FALSE) - return TRUE - if("clean_order") - reset_order() - return TRUE - if("purchase") - try_purchase() - return TRUE - if((state != 1) && devtype) // Following IFs should only be usable when in the Select Loadout mode - return FALSE - switch(action) - if("confirm_order") - state = 2 // Wait for ID swipe for payment processing - fabricate_and_recalc_price(FALSE) - return TRUE - if("hw_cpu") - dev_cpu = text2num(params["cpu"]) - fabricate_and_recalc_price(FALSE) - return TRUE - if("hw_battery") - dev_battery = text2num(params["battery"]) - fabricate_and_recalc_price(FALSE) - return TRUE - if("hw_disk") - dev_disk = text2num(params["disk"]) - fabricate_and_recalc_price(FALSE) - return TRUE - if("hw_netcard") - dev_netcard = text2num(params["netcard"]) - fabricate_and_recalc_price(FALSE) - return TRUE - if("hw_tesla") - dev_apc_recharger = text2num(params["tesla"]) - fabricate_and_recalc_price(FALSE) - return TRUE - if("hw_nanoprint") - dev_printer = text2num(params["print"]) - fabricate_and_recalc_price(FALSE) - return TRUE - if("hw_card") - dev_card = text2num(params["card"]) - fabricate_and_recalc_price(FALSE) - return TRUE - return FALSE - -/obj/machinery/lapvend/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - if(stat & (BROKEN | NOPOWER | MAINT)) - if(ui) - ui.close() - return FALSE - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if (!ui) - ui = new(user, src, ui_key, "computer_fabricator", "Personal Computer Vendor", ui_x, ui_y, state = state) - ui.open() - -/obj/machinery/lapvend/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/stack/spacecash)) - var/obj/item/stack/spacecash/c = I - if(!user.temporarilyRemoveItemFromInventory(c)) - return - credits += c.value - visible_message("[user] inserts [c.value] credits into [src].") - qdel(c) - return - else if(istype(I, /obj/item/holochip)) - var/obj/item/holochip/HC = I - credits += HC.credits - visible_message("[user] inserts a $[HC.credits] holocredit chip into [src].") - qdel(HC) - return - else if(istype(I, /obj/item/card/id)) - if(state != 2) - return - var/obj/item/card/id/ID = I - var/datum/bank_account/account = ID.registered_account - var/target_credits = total_price - credits - if(!account.adjust_money(-target_credits)) - say("Insufficient money on card to purchase!") - return - credits += target_credits - say("$[target_credits] has been desposited from your account.") - return - return ..() - -// Simplified payment processing, returns 1 on success. -/obj/machinery/lapvend/proc/process_payment() - if(total_price > credits) - say("Insufficient credits.") - return FALSE - else - return TRUE - -/obj/machinery/lapvend/ui_data(mob/user) - - var/list/data = list() - data["state"] = state - if(state == 1) - data["devtype"] = devtype - data["hw_battery"] = dev_battery - data["hw_disk"] = dev_disk - data["hw_netcard"] = dev_netcard - data["hw_tesla"] = dev_apc_recharger - data["hw_nanoprint"] = dev_printer - data["hw_card"] = dev_card - data["hw_cpu"] = dev_cpu - if(state == 1 || state == 2) - data["totalprice"] = total_price - data["credits"] = credits - - return data - - -/obj/machinery/lapvend/proc/try_purchase() - // Awaiting payment state - if(state == 2) - if(process_payment()) - fabricate_and_recalc_price(1) - if((devtype == 1) && fabricated_laptop) - fabricated_laptop.forceMove(src.loc) - fabricated_laptop = null - else if((devtype == 2) && fabricated_tablet) - fabricated_tablet.forceMove(src.loc) - fabricated_tablet = null - credits -= total_price - say("Enjoy your new product!") - state = 3 - addtimer(CALLBACK(src, PROC_REF(reset_order)), 100) - return TRUE - return FALSE diff --git a/code/modules/ninja/__ninjaDefines.dm b/code/modules/ninja/__ninjaDefines.dm deleted file mode 100644 index d6cdb55840..0000000000 --- a/code/modules/ninja/__ninjaDefines.dm +++ /dev/null @@ -1,23 +0,0 @@ - -/* - -Contents: -- Definitions, because the original Ninja code has so much magic. - -*/ - - -//ninjacost() specificCheck defines -#define N_STEALTH_CANCEL 1 -#define N_SMOKE_BOMB 2 -#define N_ADRENALINE 3 - -//ninjaDrainAct() defines for non numerical returns -//While not strictly needed, it's nicer than them just returning "twat" -//Which was my original intention. - -#define INVALID_DRAIN "INVALID" //This one is if the drain proc needs to cancel, eg missing variables, etc, it's important. - -#define DRAIN_RD_HACK_FAILED "RDHACKFAIL" -#define DRAIN_MOB_SHOCK "MOBSHOCK" -#define DRAIN_MOB_SHOCK_FAILED "MOBSHOCKFAIL" diff --git a/code/modules/ninja/energy_katana.dm b/code/modules/ninja/energy_katana.dm deleted file mode 100644 index 5a2a0ea523..0000000000 --- a/code/modules/ninja/energy_katana.dm +++ /dev/null @@ -1,105 +0,0 @@ -/obj/item/energy_katana - name = "energy katana" - desc = "" - icon_state = "energy_katana" - item_state = "energy_katana" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - force = 40 - throwforce = 20 - block_chance = 50 - armor_penetration = 50 - w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/blank.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT - sharpness = IS_SHARP - max_integrity = 200 - resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - var/datum/effect_system/spark_spread/spark_system - var/datum/action/innate/dash/ninja/jaunt - var/dash_toggled = TRUE - -/obj/item/energy_katana/Initialize() - . = ..() - jaunt = new(src) - spark_system = new /datum/effect_system/spark_spread() - spark_system.set_up(5, 0, src) - spark_system.attach(src) - -/obj/item/energy_katana/attack_self(mob/user) - dash_toggled = !dash_toggled - to_chat(user, "I [dash_toggled ? "enable" : "disable"] the dash function on [src].") - -/obj/item/energy_katana/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - . = ..() - if(dash_toggled) - jaunt.Teleport(user, target) - if(proximity_flag && (isobj(target) || issilicon(target))) - spark_system.start() - playsound(user, "sparks", 50, TRUE) - playsound(user, 'sound/blank.ogg', 50, TRUE) - target.emag_act(user) - -/obj/item/energy_katana/pickup(mob/living/user) - . = ..() - jaunt.Grant(user, src) - user.update_icons() - playsound(src, 'sound/blank.ogg', 25, TRUE) - -/obj/item/energy_katana/dropped(mob/user) - . = ..() - jaunt.Remove(user) - user.update_icons() - -//If we hit the Ninja who owns this Katana, they catch it. -//Works for if the Ninja throws it or it throws itself or someone tries -//To throw it at the ninja -/obj/item/energy_katana/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(ishuman(hit_atom)) - var/mob/living/carbon/human/H = hit_atom - if(istype(H.wear_armor, /obj/item/clothing/suit/space/space_ninja)) - var/obj/item/clothing/suit/space/space_ninja/SN = H.wear_armor - if(SN.energyKatana == src) - returnToOwner(H, 0, 1) - return - - ..() - -/obj/item/energy_katana/proc/returnToOwner(mob/living/carbon/human/user, doSpark = 1, caught = 0) - if(!istype(user)) - return - forceMove(get_turf(user)) - - if(doSpark) - spark_system.start() - playsound(get_turf(src), "sparks", 50, TRUE) - - var/msg = "" - - if(user.put_in_hands(src)) - msg = "Your Energy Katana teleports into your hand!" - else if(user.equip_to_slot_if_possible(src, SLOT_BELT, 0, 1, 1)) - msg = "Your Energy Katana teleports back to you, sheathing itself as it does so!" - else - msg = "Your Energy Katana teleports to your location!" - - if(caught) - if(loc == user) - msg = "You catch your Energy Katana!" - else - msg = "Your Energy Katana lands at your feet!" - - if(msg) - to_chat(user, "[msg]") - - -/obj/item/energy_katana/Destroy() - QDEL_NULL(spark_system) - return ..() - -/datum/action/innate/dash/ninja - current_charges = 3 - max_charges = 3 - charge_rate = 30 - recharge_sound = null diff --git a/code/modules/ninja/ninja_event.dm b/code/modules/ninja/ninja_event.dm deleted file mode 100644 index c60d6b93fd..0000000000 --- a/code/modules/ninja/ninja_event.dm +++ /dev/null @@ -1,89 +0,0 @@ -//Note to future generations: I didn't write this god-awful code I just ported it to the event system and tried to make it less moon-speaky. -//Don't judge me D; ~Carn //Maximum judging occuring - Remie. -// Tut tut Remie, let's keep our comments constructive. - coiax - -/* - -Contents: -- The Ninja "Random" Event -- Ninja creation code -*/ - -/datum/round_event_control/ninja - name = "Space Ninja" - typepath = /datum/round_event/ghost_role/ninja - max_occurrences = 1 - earliest_start = 40 MINUTES - min_players = 15 - -/datum/round_event/ghost_role/ninja - var/success_spawn = 0 - role_name = "space ninja" - minimum_required = 1 - - var/helping_station - var/spawn_loc - var/give_objectives = TRUE - -/datum/round_event/ghost_role/ninja/setup() - helping_station = rand(0,1) - -/datum/round_event/ghost_role/ninja/kill() - if(!success_spawn && control) - control.occurrences-- - return ..() - - -/datum/round_event/ghost_role/ninja/spawn_role() - //selecting a spawn_loc - if(!spawn_loc) - var/list/spawn_locs = list() - for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list) - if(isturf(L.loc)) - spawn_locs += L.loc - if(!spawn_locs.len) - return kill() - spawn_loc = pick(spawn_locs) - if(!spawn_loc) - return MAP_ERROR - - //selecting a candidate player - var/list/candidates = get_candidates(ROLE_NINJA, null, ROLE_NINJA) - if(!candidates.len) - return NOT_ENOUGH_PLAYERS - - var/mob/dead/selected_candidate = pick_n_take(candidates) - var/key = selected_candidate.key - - //Prepare ninja player mind - var/datum/mind/Mind = new /datum/mind(key) - Mind.assigned_role = ROLE_NINJA - Mind.special_role = ROLE_NINJA - Mind.active = 1 - - //spawn the ninja and assign the candidate - var/mob/living/carbon/human/Ninja = create_space_ninja(spawn_loc) - Mind.transfer_to(Ninja) - var/datum/antagonist/ninja/ninjadatum = new - ninjadatum.helping_station = pick(TRUE,FALSE) - Mind.add_antag_datum(ninjadatum) - - if(Ninja.mind != Mind) //something has gone wrong! - CRASH("Ninja created with incorrect mind") - - spawned_mobs += Ninja - message_admins("[ADMIN_LOOKUPFLW(Ninja)] has been made into a ninja by an event.") - log_game("[key_name(Ninja)] was spawned as a ninja by an event.") - - return SUCCESSFUL_SPAWN - - -//=======//NINJA CREATION PROCS//=======// - -/proc/create_space_ninja(spawn_loc) - var/mob/living/carbon/human/new_ninja = new(spawn_loc) - var/datum/preferences/A = new()//Randomize appearance for the ninja. - A.real_name = "[pick(GLOB.ninja_titles)] [pick(GLOB.ninja_names)]" - A.copy_to(new_ninja) - new_ninja.dna.update_dna_identity() - return new_ninja diff --git a/code/modules/ninja/outfit.dm b/code/modules/ninja/outfit.dm deleted file mode 100644 index 8540ec4c15..0000000000 --- a/code/modules/ninja/outfit.dm +++ /dev/null @@ -1,25 +0,0 @@ -/datum/outfit/ninja - name = "Space Ninja" - uniform = /obj/item/clothing/under/color/black - suit = /obj/item/clothing/suit/space/space_ninja - glasses = /obj/item/clothing/glasses/night - mask = /obj/item/clothing/mask/gas/space_ninja - head = /obj/item/clothing/head/helmet/space/space_ninja - ears = /obj/item/radio/headset - shoes = /obj/item/clothing/shoes/space_ninja - gloves = /obj/item/clothing/gloves/space_ninja - back = /obj/item/tank/jetpack/carbondioxide - l_pocket = /obj/item/grenade/c4/x4 - r_pocket = /obj/item/tank/internals/emergency_oxygen - internals_slot = SLOT_R_STORE - belt = /obj/item/energy_katana - implants = list(/obj/item/implant/explosive) - - -/datum/outfit/ninja/post_equip(mob/living/carbon/human/H) - if(istype(H.wear_armor, suit)) - var/obj/item/clothing/suit/space/space_ninja/S = H.wear_armor - if(istype(H.belt, belt)) - S.energyKatana = H.belt - S.randomize_param() - diff --git a/code/modules/ninja/suit/gloves.dm b/code/modules/ninja/suit/gloves.dm deleted file mode 100644 index 1b1feb6854..0000000000 --- a/code/modules/ninja/suit/gloves.dm +++ /dev/null @@ -1,81 +0,0 @@ - - - -/* - Dear ninja gloves - - This isn't because I like you - this is because your father is a bastard - - ... - I guess you're a little cool. - -Sayu - - - see ninjaDrainAct.dm for ninjadrain_act() - Touch() simply calls this on it's target now - Ninja's electricuting people when? - -Remie - -*/ - - -/obj/item/clothing/gloves/space_ninja - desc = "" - name = "ninja gloves" - icon_state = "s-ninja" - item_state = "s-ninja" - siemens_coefficient = 0 - cold_protection = HANDS - min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT - heat_protection = HANDS - max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - strip_delay = 120 - resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - var/draining = 0 - var/candrain = 0 - var/mindrain = 200 - var/maxdrain = 400 - - -/obj/item/clothing/gloves/space_ninja/Touch(atom/A,proximity) - if(!candrain || draining) - return FALSE - if(!ishuman(loc)) - return FALSE //Only works while worn - - var/mob/living/carbon/human/H = loc - - var/obj/item/clothing/suit/space/space_ninja/suit = H.wear_armor - if(!istype(suit)) - return FALSE - if(isturf(A)) - return FALSE - - if(!proximity) - return FALSE - - A.add_fingerprint(H) - - draining = TRUE - . = A.ninjadrain_act(suit,H,src) - draining = FALSE - - if(isnum(.)) //Numerical values of drained handle their feedback here, Alpha values handle it themselves (Research hacking) - if(.) - to_chat(H, "Gained [DisplayEnergy(.)] of energy from [A].") - else - to_chat(H, "\The [A] has run dry of energy, you must find another source!") - else - . = FALSE //as to not cancel attack_hand() - - -/obj/item/clothing/gloves/space_ninja/proc/toggledrain() - var/mob/living/carbon/human/U = loc - to_chat(U, "I [candrain?"disable":"enable"] special interaction.") - candrain=!candrain - -/obj/item/clothing/gloves/space_ninja/examine(mob/user) - . = ..() - if(HAS_TRAIT_FROM(src, TRAIT_NODROP, NINJA_SUIT_TRAIT)) - . += "The energy drain mechanism is [candrain?"active":"inactive"]." diff --git a/code/modules/ninja/suit/head.dm b/code/modules/ninja/suit/head.dm deleted file mode 100644 index aedfef0138..0000000000 --- a/code/modules/ninja/suit/head.dm +++ /dev/null @@ -1,12 +0,0 @@ - - -/obj/item/clothing/head/helmet/space/space_ninja - desc = "" - name = "ninja hood" - icon_state = "s-ninja" - item_state = "s-ninja_mask" - armor = list("melee" = 60, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 25, "fire" = 100, "acid" = 100) - strip_delay = 12 - resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - blockTracking = 1//Roughly the only unique thing about this helmet. - flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR diff --git a/code/modules/ninja/suit/mask.dm b/code/modules/ninja/suit/mask.dm deleted file mode 100644 index 6b603f128f..0000000000 --- a/code/modules/ninja/suit/mask.dm +++ /dev/null @@ -1,19 +0,0 @@ - -/* - -Contents: -- The Ninja Space Mask -- Ninja Space Mask speech modification - -*/ - - - - -/obj/item/clothing/mask/gas/space_ninja - name = "ninja mask" - desc = "" - icon_state = "s-ninja" - item_state = "s-ninja_mask" - strip_delay = 120 - resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF diff --git a/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm b/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm deleted file mode 100644 index 7bfa02cf05..0000000000 --- a/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm +++ /dev/null @@ -1,86 +0,0 @@ -/* -It will teleport people to a holding facility after 30 seconds. (Check the process() proc to change where teleport goes) -It is possible to destroy the net by the occupant or someone else. -*/ - -/obj/structure/energy_net - name = "energy net" - desc = "" - icon = 'icons/effects/effects.dmi' - icon_state = "energynet" - - density = TRUE//Can't pass through. - opacity = 0//Can see through. - mouse_opacity = MOUSE_OPACITY_ICON//So you can hit it with stuff. - anchored = TRUE//Can't drag/grab the net. - layer = ABOVE_ALL_MOB_LAYER - max_integrity = 25 //How much health it has. - can_buckle = 1 - buckle_lying = 0 - buckle_prevents_pull = TRUE - var/mob/living/carbon/affecting//Who it is currently affecting, if anyone. - var/mob/living/carbon/master//Who shot web. Will let this person know if the net was successful or failed. - var/check = 15//30 seconds before teleportation. Could be extended I guess. - var/success = FALSE - - -/obj/structure/energy_net/play_attack_sound(damage, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - playsound(src, 'sound/blank.ogg', 80, TRUE) - if(BURN) - playsound(src, 'sound/blank.ogg', 80, TRUE) - -/obj/structure/energy_net/Destroy() - if(!success) - if(!QDELETED(affecting)) - affecting.visible_message("[affecting.name] was recovered from the energy net!", "I were recovered from the energy net!", "I hear a grunt.") - if(!QDELETED(master))//As long as they still exist. - to_chat(master, "ERROR: unable to initiate transport protocol. Procedure terminated.") - return ..() - -/obj/structure/energy_net/process() - if(QDELETED(affecting)||affecting.loc!=loc) - qdel(src)//Get rid of the net. - return - - if(check>0) - check-- - return - - success = TRUE - qdel(src) - if(ishuman(affecting)) - var/mob/living/carbon/human/H = affecting - for(var/obj/item/W in H) - if(W == H.wear_pants) - continue//So all they're left with are shoes and uniform. - if(W == H.shoes) - continue - H.dropItemToGround(W) - - // After we remove items, at least give them what they need to live. - H.dna.species.give_important_for_life(H) - - playsound(affecting, 'sound/blank.ogg', 50, TRUE) - new /obj/effect/temp_visual/dir_setting/ninja/phase/out(affecting.drop_location(), affecting.dir) - - visible_message("[affecting] suddenly vanishes!") - affecting.forceMove(pick(GLOB.holdingfacility)) //Throw mob in to the holding facility. - to_chat(affecting, "I appear in a strange place!") - - if(!QDELETED(master))//As long as they still exist. - to_chat(master, "SUCCESS: transport procedure of [affecting] complete.") - do_sparks(5, FALSE, affecting) - playsound(affecting, 'sound/blank.ogg', 25, TRUE) - playsound(affecting, 'sound/blank.ogg', 50, TRUE) - new /obj/effect/temp_visual/dir_setting/ninja/phase(affecting.drop_location(), affecting.dir) - -/obj/structure/energy_net/attack_paw(mob/user) - return attack_hand() - -/obj/structure/energy_net/user_buckle_mob(mob/living/M, mob/living/user) - return//We only want our target to be buckled - -/obj/structure/energy_net/user_unbuckle_mob(mob/living/buckled_mob, mob/living/user) - return//The net must be destroyed to free the target diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_adrenaline.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_adrenaline.dm deleted file mode 100644 index b87eb85427..0000000000 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_adrenaline.dm +++ /dev/null @@ -1,26 +0,0 @@ -//Wakes the user so they are able to do their thing. Also injects a decent dose of radium. -//Movement impairing would indicate drugs and the like. -/obj/item/clothing/suit/space/space_ninja/proc/ninjaboost() - - if(!ninjacost(0,N_ADRENALINE)) - var/mob/living/carbon/human/H = affecting - H.SetUnconscious(0) - H.SetStun(0) - H.SetKnockdown(0) - H.SetImmobilized(0) - H.SetParalyzed(0) - H.adjustStaminaLoss(-75) - H.stuttering = 0 - H.lying = 0 - H.update_mobility() - H.reagents.add_reagent(/datum/reagent/medicine/stimulants, 5) - H.say(pick("A CORNERED FOX IS MORE DANGEROUS THAN A JACKAL!","HURT ME MOOORRREEE!","IMPRESSIVE!"), forced = "ninjaboost") - a_boost-- - to_chat(H, "There are [a_boost] adrenaline boosts remaining.") - s_coold = 3 - addtimer(CALLBACK(src, PROC_REF(ninjaboost_after)), 70) - -/obj/item/clothing/suit/space/space_ninja/proc/ninjaboost_after() - var/mob/living/carbon/human/H = affecting - H.reagents.add_reagent(/datum/reagent/uranium/radium, a_transfer) - to_chat(H, "I are beginning to feel the after-effect of the injection.") diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_cost_check.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_cost_check.dm deleted file mode 100644 index 30d70053a4..0000000000 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_cost_check.dm +++ /dev/null @@ -1,25 +0,0 @@ - - -//Cost function for suit Procs/Verbs/Abilities -/obj/item/clothing/suit/space/space_ninja/proc/ninjacost(cost = 0, specificCheck = 0) - var/mob/living/carbon/human/H = affecting - var/actualCost = cost*10 - if(cost && cell.charge < actualCost) - to_chat(H, "Not enough energy!") - return 1 - else - //This shit used to be handled individually on every proc.. why even bother with a universal check proc then? - cell.charge-=(actualCost) - - switch(specificCheck) - if(N_STEALTH_CANCEL) - cancel_stealth()//Get rid of it. - if(N_SMOKE_BOMB) - if(!s_bombs) - to_chat(H, "There are no more smoke bombs remaining!") - return 1 - if(N_ADRENALINE) - if(!a_boost) - to_chat(H, "I do not have any more adrenaline boosters!") - return 1 - return (s_coold)//Returns the value of the variable which counts down to zero. diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_empulse.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_empulse.dm deleted file mode 100644 index a3108d288b..0000000000 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_empulse.dm +++ /dev/null @@ -1,10 +0,0 @@ - - -//Disables nearby tech equipment. -/obj/item/clothing/suit/space/space_ninja/proc/ninjapulse() - - if(!ninjacost(250,N_STEALTH_CANCEL)) - var/mob/living/carbon/human/H = affecting - playsound(H.loc, 'sound/blank.ogg', 60, 2) - empulse(H, 4, 6) //Procs sure are nice. Slightly weaker than wizard's disable tch. - s_coold = 2 diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_net.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_net.dm deleted file mode 100644 index 758a0266d3..0000000000 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_net.dm +++ /dev/null @@ -1,33 +0,0 @@ - -//Allows the ninja to kidnap people -/obj/item/clothing/suit/space/space_ninja/proc/ninjanet() - var/mob/living/carbon/human/H = affecting - var/mob/living/carbon/C = input("Select who to capture:","Capture who?",null) as null|mob in sortNames(oview(H)) - - if(QDELETED(C)||!(C in oview(H))) - return 0 - - if(!C.client)//Monkeys without a client can still step_to() and bypass the net. Also, netting inactive people is lame. - to_chat(H, "[C.p_they(TRUE)] will bring no honor to your Clan!") - return - if(locate(/obj/structure/energy_net) in get_turf(C))//Check if they are already being affected by an energy net. - to_chat(H, "[C.p_they(TRUE)] are already trapped inside an energy net!") - return - for(var/turf/T in getline(get_turf(H), get_turf(C))) - if(T.density)//Don't want them shooting nets through walls. It's kind of cheesy. - to_chat(H, "I may not use an energy net through solid obstacles!") - return - if(!ninjacost(200,N_STEALTH_CANCEL)) - H.Beam(C,"n_beam",time=15) - H.say("Get over here!", forced = "ninja net") - var/obj/structure/energy_net/E = new /obj/structure/energy_net(C.drop_location()) - E.affecting = C - E.master = H - H.visible_message("[H] caught [C] with an energy net!","I caught [C] with an energy net!") - - if(C.buckled) - C.buckled.unbuckle_mob(affecting,TRUE) - E.buckle_mob(C, TRUE) //No moving for you! - //The person can still try and attack the net when inside. - - START_PROCESSING(SSobj, E) diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_smoke.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_smoke.dm deleted file mode 100644 index bc7286315e..0000000000 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_smoke.dm +++ /dev/null @@ -1,14 +0,0 @@ - - -//Smoke bomb -/obj/item/clothing/suit/space/space_ninja/proc/ninjasmoke() - - if(!ninjacost(0,N_SMOKE_BOMB)) - var/mob/living/carbon/human/H = affecting - var/datum/effect_system/smoke_spread/bad/smoke = new - smoke.set_up(4, H.loc) - smoke.start() - playsound(H.loc, 'sound/blank.ogg', 50, 2) - s_bombs-- - to_chat(H, "There are [s_bombs] smoke bombs remaining.") - s_coold = 1 diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_stars.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_stars.dm deleted file mode 100644 index 31ac62d9fc..0000000000 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_stars.dm +++ /dev/null @@ -1,18 +0,0 @@ - - -//Creates a throwing star -/obj/item/clothing/suit/space/space_ninja/proc/ninjastar() - if(!ninjacost(10)) - var/mob/living/carbon/human/H = affecting - var/obj/item/throwing_star/ninja/N = new(H) - if(H.put_in_hands(N)) - to_chat(H, "A throwing star has been created in your hand!") - else - qdel(N) - H.throw_mode_on() //So they can quickly throw it. - - -/obj/item/throwing_star/ninja - name = "ninja throwing star" - throwforce = 30 - embedding = list("embedded_pain_multiplier" = 6, "embed_chance" = 100, "embedded_fall_chance" = 0) diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm deleted file mode 100644 index e4a654d884..0000000000 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm +++ /dev/null @@ -1,43 +0,0 @@ - -/* - -Contents: -- Stealth Verbs - -*/ - - -/obj/item/clothing/suit/space/space_ninja/proc/toggle_stealth() - var/mob/living/carbon/human/U = affecting - if(!U) - return - if(stealth) - cancel_stealth() - else - if(cell.charge <= 0) - to_chat(U, "I don't have enough power to enable Stealth!") - return - stealth = !stealth - animate(U, alpha = 50,time = 15) - U.visible_message("[U.name] vanishes into thin air!", \ - "I are now mostly invisible to normal detection.") - - -/obj/item/clothing/suit/space/space_ninja/proc/cancel_stealth() - var/mob/living/carbon/human/U = affecting - if(!U) - return 0 - if(stealth) - stealth = !stealth - animate(U, alpha = 255, time = 15) - U.visible_message("[U.name] appears from thin air!", \ - "I are now visible.") - return 1 - return 0 - - -/obj/item/clothing/suit/space/space_ninja/proc/stealth() - if(!s_busy) - toggle_stealth() - else - to_chat(affecting, "Stealth does not appear to work!") diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_sword_recall.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_sword_recall.dm deleted file mode 100644 index 6948354c8f..0000000000 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_sword_recall.dm +++ /dev/null @@ -1,36 +0,0 @@ - -/obj/item/clothing/suit/space/space_ninja/proc/ninja_sword_recall() - var/mob/living/carbon/human/H = affecting - - var/cost = 0 - var/inview = 1 - - if(!energyKatana) - to_chat(H, "Could not locate Energy Katana!") - return - - if(energyKatana in H) - return - - var/distance = get_dist(H,energyKatana) - - if(!(energyKatana in view(H))) - cost = distance //Actual cost is cost x 10, so 5 turfs is 50 cost. - inview = 0 - - if(!ninjacost(cost)) - if(iscarbon(energyKatana.loc)) - var/mob/living/carbon/C = energyKatana.loc - C.transferItemToLoc(energyKatana, get_turf(energyKatana), TRUE) - - else - energyKatana.forceMove(get_turf(energyKatana)) - - if(inview) //If we can see the katana, throw it towards ourselves, damaging people as we go. - energyKatana.spark_system.start() - playsound(H, "sparks", 50, TRUE) - H.visible_message("\the [energyKatana] flies towards [H]!","I hold out your hand and \the [energyKatana] flies towards you!") - energyKatana.throw_at(H, distance+1, energyKatana.throw_speed,H) - - else //Else just TP it to us. - energyKatana.returnToOwner(H,1) diff --git a/code/modules/ninja/suit/ninjaDrainAct.dm b/code/modules/ninja/suit/ninjaDrainAct.dm deleted file mode 100644 index a7bc1559ac..0000000000 --- a/code/modules/ninja/suit/ninjaDrainAct.dm +++ /dev/null @@ -1,264 +0,0 @@ - -/* - -Contents: -- Assorted ninjadrain_act() procs -- What is Object Oriented Programming - -They *could* go in their appropriate files, but this is supposed to be modular - -*/ - - -//Needs to return the amount drained from the atom, if no drain on a power object, return FALSE, otherwise, return a define. -/atom/proc/ninjadrain_act() - return INVALID_DRAIN - - - - -//APC// -/obj/machinery/power/apc/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) - if(!S || !H || !G) - return INVALID_DRAIN - - var/maxcapacity = 0 //Safety check for batteries - var/drain = 0 //Drain amount from batteries - - . = 0 - - if(cell && cell.charge) - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread() - spark_system.set_up(5, 0, loc) - - while(G.candrain && cell.charge> 0 && !maxcapacity) - drain = rand(G.mindrain, G.maxdrain) - - if(cell.charge < drain) - drain = cell.charge - - if(S.cell.charge + drain > S.cell.maxcharge) - drain = S.cell.maxcharge - S.cell.charge - maxcapacity = 1//Reached maximum battery capacity. - - if (do_after(H,10, target = src)) - spark_system.start() - playsound(loc, "sparks", 50, TRUE) - cell.use(drain) - S.cell.give(drain) - . += drain - else - break - - if(!(obj_flags & EMAGGED)) - flick("apc-spark", G) - playsound(loc, "sparks", 50, TRUE) - obj_flags |= EMAGGED - locked = FALSE - update_icon() - - - - - -//SMES// -/obj/machinery/power/smes/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) - if(!S || !H || !G) - return INVALID_DRAIN - - var/maxcapacity = 0 //Safety check for batteries - var/drain = 0 //Drain amount from batteries - - . = 0 - - if(charge) - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread() - spark_system.set_up(5, 0, loc) - - while(G.candrain && charge > 0 && !maxcapacity) - drain = rand(G.mindrain, G.maxdrain) - - if(charge < drain) - drain = charge - - if(S.cell.charge + drain > S.cell.maxcharge) - drain = S.cell.maxcharge - S.cell.charge - maxcapacity = 1 - - if (do_after(H,10, target = src)) - spark_system.start() - playsound(loc, "sparks", 50, TRUE) - charge -= drain - S.cell.give(drain) - . += drain - - else - break - - -//CELL// -/obj/item/stock_parts/cell/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) - if(!S || !H || !G) - return INVALID_DRAIN - - . = 0 - - if(charge) - if(G.candrain && do_after(H,30, target = src)) - . = charge - if(S.cell.charge + charge > S.cell.maxcharge) - S.cell.charge = S.cell.maxcharge - else - S.cell.give(charge) - charge = 0 - corrupt() - update_icon() - -/obj/machinery/proc/AI_notify_hack() - var/turf/location = get_turf(src) - var/alertstr = "Network Alert: Hacking attempt detected[location?" in [location]":". Unable to pinpoint location"]." - for(var/mob/living/silicon/ai/AI in GLOB.player_list) - to_chat(AI, alertstr) - -//RDCONSOLE// -/obj/machinery/computer/rdconsole/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) - if(!S || !H || !G) - return INVALID_DRAIN - - . = DRAIN_RD_HACK_FAILED - - to_chat(H, "Hacking \the [src]...") - AI_notify_hack() - - if(stored_research) - to_chat(H, "Copying files...") - if(do_after(H, S.s_delay, target = src) && G.candrain && src) - stored_research.copy_research_to(S.stored_research) - to_chat(H, "Data analyzed. Process finished.") - -//RD SERVER// -//Shamelessly copypasted from above, since these two used to be the same proc, but with MANY colon operators -/obj/machinery/rnd/server/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) - if(!S || !H || !G) - return INVALID_DRAIN - - . = DRAIN_RD_HACK_FAILED - - to_chat(H, "Hacking \the [src]...") - AI_notify_hack() - - if(stored_research) - to_chat(H, "Copying files...") - if(do_after(H, S.s_delay, target = src) && G.candrain && src) - stored_research.copy_research_to(S.stored_research) - to_chat(H, "Data analyzed. Process finished.") - - -//WIRE// -/obj/structure/cable/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) - if(!S || !H || !G) - return INVALID_DRAIN - - var/maxcapacity = 0 //Safety check - var/drain = 0 //Drain amount - - . = 0 - - var/datum/powernet/PN = powernet - while(G.candrain && !maxcapacity && src) - drain = (round((rand(G.mindrain, G.maxdrain))/2)) - var/drained = 0 - if(PN && do_after(H,10, target = src)) - drained = min(drain, delayed_surplus()) - add_delayedload(drained) - if(drained < drain)//if no power on net, drain apcs - for(var/obj/machinery/power/terminal/T in PN.nodes) - if(istype(T.master, /obj/machinery/power/apc)) - var/obj/machinery/power/apc/AP = T.master - if(AP.operating && AP.cell && AP.cell.charge > 0) - AP.cell.charge = max(0, AP.cell.charge - 5) - drained += 5 - else - break - - S.cell.give(drain) - if(S.cell.charge > S.cell.maxcharge) - . += (drained-(S.cell.charge - S.cell.maxcharge)) - S.cell.charge = S.cell.maxcharge - maxcapacity = 1 - else - . += drained - S.spark_system.start() - -//MECH// -/obj/mecha/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) - if(!S || !H || !G) - return INVALID_DRAIN - - var/maxcapacity = 0 //Safety check - var/drain = 0 //Drain amount - . = 0 - - occupant_message("Warning: Unauthorized access through sub-route 4, block H, detected.") - if(get_charge()) - while(G.candrain && cell.charge > 0 && !maxcapacity) - drain = rand(G.mindrain,G.maxdrain) - if(cell.charge < drain) - drain = cell.charge - if(S.cell.charge + drain > S.cell.maxcharge) - drain = S.cell.maxcharge - S.cell.charge - maxcapacity = 1 - if (do_after(H,10, target = src)) - spark_system.start() - playsound(loc, "sparks", 50, TRUE) - cell.use(drain) - S.cell.give(drain) - . += drain - else - break - -//BORG// -/mob/living/silicon/robot/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) - if(!S || !H || !G) - return INVALID_DRAIN - - var/maxcapacity = 0 //Safety check - var/drain = 0 //Drain amount - . = 0 - - to_chat(src, "Warning: Unauthorized access through sub-route 12, block C, detected.") - - if(cell && cell.charge) - while(G.candrain && cell.charge > 0 && !maxcapacity) - drain = rand(G.mindrain,G.maxdrain) - if(cell.charge < drain) - drain = cell.charge - if(S.cell.charge+drain > S.cell.maxcharge) - drain = S.cell.maxcharge - S.cell.charge - maxcapacity = 1 - if (do_after(H,10)) - spark_system.start() - playsound(loc, "sparks", 50, TRUE) - cell.use(drain) - S.cell.give(drain) - . += drain - else - break - - -//CARBON MOBS// -/mob/living/carbon/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) - if(!S || !H || !G) - return INVALID_DRAIN - - . = DRAIN_MOB_SHOCK_FAILED - - //Default cell = 10,000 charge, 10,000/1000 = 10 uses without charging/upgrading - if(S.cell && S.cell.charge && S.cell.use(1000)) - . = DRAIN_MOB_SHOCK - //Got that electric touch - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread() - spark_system.set_up(5, 0, loc) - playsound(src, "sparks", 50, TRUE) - visible_message("[H] electrocutes [src] with [H.p_their()] touch!", "[H] electrocutes you with [H.p_their()] touch!") - electrocute_act(25, H) diff --git a/code/modules/ninja/suit/shoes.dm b/code/modules/ninja/suit/shoes.dm deleted file mode 100644 index 3a8665d79c..0000000000 --- a/code/modules/ninja/suit/shoes.dm +++ /dev/null @@ -1,15 +0,0 @@ - -/obj/item/clothing/shoes/space_ninja - name = "ninja shoes" - desc = "" - icon_state = "s-ninja" - item_state = "secshoes" - permeability_coefficient = 0.01 - clothing_flags = NOSLIP - resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - armor = list("melee" = 60, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 100, "acid" = 100) - strip_delay = 120 - cold_protection = FEET - min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT - heat_protection = FEET - max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm deleted file mode 100644 index 5baa06b381..0000000000 --- a/code/modules/ninja/suit/suit.dm +++ /dev/null @@ -1,190 +0,0 @@ - -/* - -Contents: -- The Ninja Space Suit -- Ninja Space Suit Procs - -*/ - - -// /obj/item/clothing/suit/space/space_ninja - - -/obj/item/clothing/suit/space/space_ninja - name = "ninja suit" - desc = "" - icon_state = "s-ninja" - item_state = "s-ninja_suit" - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/stock_parts/cell) - slowdown = 1 - resistance_flags = LAVA_PROOF | ACID_PROOF - armor = list("melee" = 60, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 100, "acid" = 100) - strip_delay = 12 - - actions_types = list(/datum/action/item_action/initialize_ninja_suit, /datum/action/item_action/ninjasmoke, /datum/action/item_action/ninjaboost, /datum/action/item_action/ninjapulse, /datum/action/item_action/ninjastar, /datum/action/item_action/ninjanet, /datum/action/item_action/ninja_sword_recall, /datum/action/item_action/ninja_stealth, /datum/action/item_action/toggle_glove) - - //Important parts of the suit. - var/mob/living/carbon/human/affecting = null - var/obj/item/stock_parts/cell/cell - var/datum/effect_system/spark_spread/spark_system - var/datum/techweb/stored_research - var/obj/item/disk/tech_disk/t_disk//To copy design onto disk. - var/obj/item/energy_katana/energyKatana //For teleporting the katana back to the ninja (It's an ability) - - //Other articles of ninja gear worn together, used to easily reference them after initializing. - var/obj/item/clothing/head/helmet/space/space_ninja/n_hood - var/obj/item/clothing/shoes/space_ninja/n_shoes - var/obj/item/clothing/gloves/space_ninja/n_gloves - - //Main function variables. - var/s_initialized = 0//Suit starts off. - var/s_coold = 0//If the suit is on cooldown. Can be used to attach different cooldowns to abilities. Ticks down every second based on suit ntick(). - var/s_cost = 5//Base energy cost each ntick. - var/s_acost = 25//Additional cost for additional powers active. - var/s_delay = 40//How fast the suit does certain things, lower is faster. Can be overridden in specific procs. Also determines adverse probability. - var/a_transfer = 20//How much radium is used per adrenaline boost. - var/a_maxamount = 7//Maximum number of adrenaline boosts. - var/s_maxamount = 20//Maximum number of smoke bombs. - - //Support function variables. - var/stealth = FALSE//Stealth off. - var/s_busy = FALSE//Is the suit busy with a process? Like AI hacking. Used for safety functions. - - //Ability function variables. - var/s_bombs = 10//Number of smoke bombs. - var/a_boost = 3//Number of adrenaline boosters. - - -/obj/item/clothing/suit/space/space_ninja/get_cell() - return cell - -/obj/item/clothing/suit/space/space_ninja/Initialize() - . = ..() - - //Spark Init - spark_system = new - spark_system.set_up(5, 0, src) - spark_system.attach(src) - - //Research Init - stored_research = new() - - //Cell Init - cell = new/obj/item/stock_parts/cell/high - cell.charge = 9000 - cell.name = "black power cell" - cell.icon_state = "bscell" - -//Simply deletes all the attachments and self, killing all related procs. -/obj/item/clothing/suit/space/space_ninja/proc/terminate() - qdel(n_hood) - qdel(n_gloves) - qdel(n_shoes) - qdel(src) - - -//Randomizes suit parameters. -/obj/item/clothing/suit/space/space_ninja/proc/randomize_param() - s_cost = rand(1,20) - s_acost = rand(20,100) - s_delay = rand(10,100) - s_bombs = rand(5,20) - a_boost = rand(1,7) - - -//This proc prevents the suit from being taken off. -/obj/item/clothing/suit/space/space_ninja/proc/lock_suit(mob/living/carbon/human/H) - if(!istype(H)) - return FALSE - if(!is_ninja(H)) - to_chat(H, "fÄTaL ÈÈRRoR: 382200-*#00CÖDE RED\nUNAU†HORIZED USÈ DETÈC†††eD\nCoMMÈNCING SUB-R0U†IN3 13...\nTÈRMInATING U-U-USÈR...") - H.gib() - return FALSE - if(!istype(H.head, /obj/item/clothing/head/helmet/space/space_ninja)) - to_chat(H, "ERROR: 100113 UNABLE TO LOCATE HEAD GEAR\nABORTING...") - return FALSE - if(!istype(H.shoes, /obj/item/clothing/shoes/space_ninja)) - to_chat(H, "ERROR: 122011 UNABLE TO LOCATE FOOT GEAR\nABORTING...") - return FALSE - if(!istype(H.gloves, /obj/item/clothing/gloves/space_ninja)) - to_chat(H, "ERROR: 110223 UNABLE TO LOCATE HAND GEAR\nABORTING...") - return FALSE - affecting = H - ADD_TRAIT(src, TRAIT_NODROP, NINJA_SUIT_TRAIT) - slowdown = 0 - n_hood = H.head - ADD_TRAIT(n_hood, TRAIT_NODROP, NINJA_SUIT_TRAIT) - n_shoes = H.shoes - ADD_TRAIT(n_shoes, TRAIT_NODROP, NINJA_SUIT_TRAIT) - n_shoes.slowdown-- - n_gloves = H.gloves - ADD_TRAIT(n_gloves, TRAIT_NODROP, NINJA_SUIT_TRAIT) - return TRUE - -/obj/item/clothing/suit/space/space_ninja/proc/lockIcons(mob/living/carbon/human/H) - icon_state = H.gender==FEMALE ? "s-ninjanf" : "s-ninjan" - H.gloves.icon_state = "s-ninjan" - H.gloves.item_state = "s-ninjan" - - -//This proc allows the suit to be taken off. -/obj/item/clothing/suit/space/space_ninja/proc/unlock_suit() - affecting = null - REMOVE_TRAIT(src, TRAIT_NODROP, NINJA_SUIT_TRAIT) - slowdown = 1 - icon_state = "s-ninja" - if(n_hood)//Should be attached, might not be attached. - REMOVE_TRAIT(n_hood, TRAIT_NODROP, NINJA_SUIT_TRAIT) - if(n_shoes) - REMOVE_TRAIT(n_shoes, TRAIT_NODROP, NINJA_SUIT_TRAIT) - n_shoes.slowdown++ - if(n_gloves) - n_gloves.icon_state = "s-ninja" - n_gloves.item_state = "s-ninja" - REMOVE_TRAIT(n_gloves, TRAIT_NODROP, NINJA_SUIT_TRAIT) - n_gloves.candrain = FALSE - n_gloves.draining = FALSE - - -/obj/item/clothing/suit/space/space_ninja/examine(mob/user) - . = ..() - if(s_initialized) - if(user == affecting) - . += "All systems operational. Current energy capacity: [DisplayEnergy(cell.charge)].\n"+\ - "The CLOAK-tech device is [stealth?"active":"inactive"].\n"+\ - "There are [s_bombs] smoke bomb\s remaining.\n"+\ - "There are [a_boost] adrenaline booster\s remaining." - -/obj/item/clothing/suit/space/space_ninja/ui_action_click(mob/user, action) - if(istype(action, /datum/action/item_action/initialize_ninja_suit)) - toggle_on_off() - return TRUE - if(!s_initialized) - to_chat(user, "ERROR: suit offline. Please activate suit.") - return FALSE - if(istype(action, /datum/action/item_action/ninjasmoke)) - ninjasmoke() - return TRUE - if(istype(action, /datum/action/item_action/ninjaboost)) - ninjaboost() - return TRUE - if(istype(action, /datum/action/item_action/ninjapulse)) - ninjapulse() - return TRUE - if(istype(action, /datum/action/item_action/ninjastar)) - ninjastar() - return TRUE - if(istype(action, /datum/action/item_action/ninjanet)) - ninjanet() - return TRUE - if(istype(action, /datum/action/item_action/ninja_sword_recall)) - ninja_sword_recall() - return TRUE - if(istype(action, /datum/action/item_action/ninja_stealth)) - stealth() - return TRUE - if(istype(action, /datum/action/item_action/toggle_glove)) - n_gloves.toggledrain() - return TRUE - return FALSE diff --git a/code/modules/ninja/suit/suit_attackby.dm b/code/modules/ninja/suit/suit_attackby.dm deleted file mode 100644 index 14cfc31f5a..0000000000 --- a/code/modules/ninja/suit/suit_attackby.dm +++ /dev/null @@ -1,52 +0,0 @@ - - -/obj/item/clothing/suit/space/space_ninja/attackby(obj/item/I, mob/U, params) - if(U!=affecting)//Safety, in case you try doing this without wearing the suit/being the person with the suit. - return ..() - - if(istype(I, /obj/item/reagent_containers/glass))//If it's a glass beaker. - if(I.reagents.has_reagent(/datum/reagent/uranium/radium, a_transfer) && a_boost < a_maxamount) - I.reagents.remove_reagent(/datum/reagent/uranium/radium, a_transfer) - a_boost++; - to_chat(U, "There are now [a_boost] adrenaline boosts remaining.") - return - if(I.reagents.has_reagent(/datum/reagent/smoke_powder, a_transfer) && s_bombs < s_maxamount) - I.reagents.remove_reagent(/datum/reagent/smoke_powder, a_transfer) - s_bombs++; - to_chat(U, "There are now [s_bombs] smoke bombs remaining.") - return - - - else if(istype(I, /obj/item/stock_parts/cell)) - var/obj/item/stock_parts/cell/CELL = I - if(CELL.maxcharge > cell.maxcharge && n_gloves && n_gloves.candrain) - to_chat(U, "Higher maximum capacity detected.\nUpgrading...") - if (n_gloves && n_gloves.candrain && do_after(U,s_delay, target = src)) - U.transferItemToLoc(CELL, src) - CELL.charge = min(CELL.charge+cell.charge, CELL.maxcharge) - var/obj/item/stock_parts/cell/old_cell = cell - old_cell.charge = 0 - U.put_in_hands(old_cell) - old_cell.add_fingerprint(U) - old_cell.corrupt() - old_cell.update_icon() - cell = CELL - to_chat(U, "Upgrade complete. Maximum capacity: [round(cell.maxcharge/100)]%") - else - to_chat(U, "Procedure interrupted. Protocol terminated.") - return - - else if(istype(I, /obj/item/disk/tech_disk))//If it's a data disk, we want to copy the research on to the suit. - var/obj/item/disk/tech_disk/TD = I - var/has_research = 0 - if(has_research)//If it has something on it. - to_chat(U, "Research information detected, processing...") - if(do_after(U,s_delay, target = src)) - TD.stored_research.copy_research_to(stored_research) - to_chat(U, "Data analyzed and updated. Disk erased.") - else - to_chat(U, "ERROR: Procedure interrupted. Process terminated.") - else - to_chat(U, "No research information detected.") - return - return ..() diff --git a/code/modules/ninja/suit/suit_initialisation.dm b/code/modules/ninja/suit/suit_initialisation.dm deleted file mode 100644 index 20118ea48f..0000000000 --- a/code/modules/ninja/suit/suit_initialisation.dm +++ /dev/null @@ -1,94 +0,0 @@ -/obj/item/clothing/suit/space/space_ninja/proc/toggle_on_off() - if(s_busy) - to_chat(loc, "ERROR: You cannot use this function at this time.") - return FALSE - if(s_initialized) - deinitialize() - else - ninitialize() - . = TRUE - -/obj/item/clothing/suit/space/space_ninja/proc/ninitialize(delay = s_delay, mob/living/carbon/human/U = loc) - if(!U.mind) - return //Not sure how this could happen. - s_busy = TRUE - to_chat(U, "Now initializing...") - addtimer(CALLBACK(src, PROC_REF(ninitialize_two), delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/ninitialize_two(delay, mob/living/carbon/human/U) - if(!lock_suit(U))//To lock the suit onto wearer. - s_busy = FALSE - return - to_chat(U, "Securing external locking mechanism...\nNeural-net established.") - addtimer(CALLBACK(src, PROC_REF(ninitialize_three), delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/ninitialize_three(delay, mob/living/carbon/human/U) - to_chat(U, "Extending neural-net interface...\nNow monitoring brain wave pattern...") - addtimer(CALLBACK(src, PROC_REF(ninitialize_four), delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/ninitialize_four(delay, mob/living/carbon/human/U) - if(U.stat == DEAD|| U.health <= 0) - to_chat(U, "FĆAL �Rr�R: 344--93#�&&21 BR��N |/|/aV� PATT$RN RED\nA-A-aB�rT�NG...") - unlock_suit() - s_busy = FALSE - return - lockIcons(U)//Check for icons. - U.regenerate_icons() - to_chat(U, "Linking neural-net interface...\nPattern\green GREEN, continuing operation.") - addtimer(CALLBACK(src, PROC_REF(ninitialize_five), delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/ninitialize_five(delay, mob/living/carbon/human/U) - to_chat(U, "VOID-shift device status: ONLINE.\nCLOAK-tech device status: ONLINE.") - addtimer(CALLBACK(src, PROC_REF(ninitialize_six), delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/ninitialize_six(delay, mob/living/carbon/human/U) - to_chat(U, "Primary system status: ONLINE.\nBackup system status: ONLINE.\nCurrent energy capacity: [DisplayEnergy(cell.charge)].") - addtimer(CALLBACK(src, PROC_REF(ninitialize_seven), delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/ninitialize_seven(delay, mob/living/carbon/human/U) - to_chat(U, "All systems operational. Welcome to SpiderOS, [U.real_name].") - s_initialized = TRUE - ntick() - s_busy = FALSE - - - -/obj/item/clothing/suit/space/space_ninja/proc/deinitialize(delay = s_delay) - if(affecting==loc) - var/mob/living/carbon/human/U = affecting - if(alert("Are you certain you wish to remove the suit? This will take time and remove all abilities.",,"Yes","No")=="No") - return - s_busy = TRUE - addtimer(CALLBACK(src, PROC_REF(deinitialize_two), delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_two(delay, mob/living/carbon/human/U) - to_chat(U, "Now de-initializing...") - addtimer(CALLBACK(src, PROC_REF(deinitialize_three), delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_three(delay, mob/living/carbon/human/U) - to_chat(U, "Logging off, [U.real_name]. Shutting down SpiderOS.") - addtimer(CALLBACK(src, PROC_REF(deinitialize_four), delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_four(delay, mob/living/carbon/human/U) - to_chat(U, "Primary system status: OFFLINE.\nBackup system status: OFFLINE.") - addtimer(CALLBACK(src, PROC_REF(deinitialize_five), delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_five(delay, mob/living/carbon/human/U) - to_chat(U, "VOID-shift device status: OFFLINE.\nCLOAK-tech device status: OFFLINE.") - cancel_stealth()//Shutdowns stealth. - addtimer(CALLBACK(src, PROC_REF(deinitialize_six), delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_six(delay, mob/living/carbon/human/U) - to_chat(U, "Disconnecting neural-net interface...\greenSuccess.") - addtimer(CALLBACK(src, PROC_REF(deinitialize_seven), delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_seven(delay, mob/living/carbon/human/U) - to_chat(U, "Disengaging neural-net interface...\greenSuccess.") - addtimer(CALLBACK(src, PROC_REF(deinitialize_eight), delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_eight(delay, mob/living/carbon/human/U) - to_chat(U, "Unsecuring external locking mechanism...\nNeural-net abolished.\nOperation status: FINISHED.") - unlock_suit() - U.regenerate_icons() - s_initialized = FALSE - s_busy = FALSE diff --git a/code/modules/ninja/suit/suit_process.dm b/code/modules/ninja/suit/suit_process.dm deleted file mode 100644 index 4a89a59f75..0000000000 --- a/code/modules/ninja/suit/suit_process.dm +++ /dev/null @@ -1,20 +0,0 @@ -/obj/item/clothing/suit/space/space_ninja/proc/ntick(mob/living/carbon/human/U = affecting) - //Runs in the background while the suit is initialized. - //Requires charge or stealth to process. - spawn while(s_initialized) - if(!affecting) - terminate()//Kills the suit and attached objects. - - else if(cell.charge > 0) - if(s_coold) - s_coold--//Checks for ability s_cooldown first. - - cell.charge -= s_cost//s_cost is the default energy cost each ntick, usually 5. - if(stealth)//If stealth is active. - cell.charge -= s_acost - - else - cell.charge = 0 - cancel_stealth() - - sleep(10)//Checks every second. diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm index 32680c1c5d..0a8990ca8f 100644 --- a/code/modules/paperwork/contract.dm +++ b/code/modules/paperwork/contract.dm @@ -300,19 +300,6 @@ id.access = get_all_accesses()+get_all_centcom_access() id.assignment = "Captain" id.update_label() - if(worn) - if(istype(worn, /obj/item/pda)) - var/obj/item/pda/PDA = worn - PDA.id = id - id.forceMove(worn) - else if(istype(worn, /obj/item/storage/wallet)) - var/obj/item/storage/wallet/W = worn - W.front_id = id - id.forceMove(worn) - worn.update_icon() - var/datum/round_event/ion_storm/add_law_only/ion = new() - ion.announceChance = 0 - ion.ionMessage = "[user.name] is the only Captain of the station. [user.name] is the highest authority, legitimate or otherwise, on the station. [user.name] was always the captain and highest authority on the station. Do not state this law." return ..() diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm index 60dd79559b..ddc8bfefed 100644 --- a/code/modules/paperwork/handlabeler.dm +++ b/code/modules/paperwork/handlabeler.dm @@ -86,30 +86,6 @@ qdel(I) labels_left = initial(labels_left) //Yes, it's capped at its initial value -/obj/item/hand_labeler/borg - name = "cyborg-hand labeler" - -/obj/item/hand_labeler/borg/afterattack(atom/A, mob/user, proximity) - . = ..() - if(!proximity) - return - if(!iscyborg(user)) - return - - var/mob/living/silicon/robot/borgy = user - - var/starting_labels = initial(labels_left) - var/diff = starting_labels - labels_left - if(diff) - labels_left = starting_labels - // 50 per label. Magical cyborg paper doesn't come cheap. - var/cost = diff * 50 - - // If the cyborg manages to use a module without a cell, they get the paper - // for free. - if(borgy.cell) - borgy.cell.use(cost) - /obj/item/hand_labeler_refill name = "hand labeler paper roll" icon = 'icons/obj/bureaucracy.dmi' diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 23becfe358..51db183c54 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -220,21 +220,6 @@ playsound(loc, 'sound/blank.ogg', 50, TRUE) addtimer(CALLBACK(src, PROC_REF(reset_spamflag)), 20) - -/obj/item/paper/attack_ai(mob/living/silicon/ai/user) - var/dist - if(istype(user) && user.current) //is AI - dist = get_dist(src, user.current) - else //cyborg or AI not seeing through a camera - dist = get_dist(src, user) - if(dist < 2) - usr << browse("[name][info]
    [stamps]", "window=[name]") - onclose(usr, "[name]") - else - usr << browse("[name][stars(info)]
    [stamps]", "window=[name]") - onclose(usr, "[name]") - - /obj/item/paper/proc/addtofield(id, text, links = 0) var/locid = 0 var/laststart = 1 @@ -441,22 +426,6 @@ else to_chat(user, "I can't write.") return - - if(istype(P, /obj/item/paper)) - var/obj/item/paper/p = P - if(info && p.info) - var/obj/item/manuscript/M = new /obj/item/manuscript(get_turf(P.loc)) - M.page_texts = list(src.info, p.info) - M.compiled_pages = "

    [src.info]

    [p.info]

    " - qdel(p) - if(user.Adjacent(M)) - M.add_fingerprint(user) - user.update_inv_hands() - user.put_in_active_hand(src) - user.put_in_inactive_hand(M) - . = ..() - return qdel(src) - if(!P.can_be_package_wrapped()) return ..() diff --git a/code/modules/paperwork/papers/scrap.dm b/code/modules/paperwork/papers/scrap.dm index 7d548505c2..ec8321168a 100644 --- a/code/modules/paperwork/papers/scrap.dm +++ b/code/modules/paperwork/papers/scrap.dm @@ -13,6 +13,28 @@ /obj/item/paper/heartfelt/goal4 info = "Our lands have long been forsaken by Dendor, Our fields are failing and the famine is causing unrest in our realm. Seek royal largesse" +/obj/item/paper/note_about_dwarfs + name = "report to Guild on steel deliveries" + info = "Last yils deliverie of steele from the dwarf outposte in the northeast: 83 ingots of finest steel. None hath been delivered this yil, this will not do. For the good of the Makers Guild, this must be investigated." + +/obj/item/paper/reminder_about_dwarfs + name = "note about steel deliveries" + info = "Makers! The northern dwarves delivery of steele is much delayed this yil. Make do or go get it from them, the Guild cannot do more to solve this." + +/obj/item/paper/feldsher_certificate + name = "feldsher health certificate" + info = "This member of the nitemaidens guild hath passed the feldshers monthly inspection as mandated by the law, and is not a bearer of maladies to infect our towne. I so swear on this date. (signed by the town feldsher, the date is a few weeks ago)" + icon_state = "certificate" + +/obj/item/paper/feldsher_certificate/expired + info = "This member of the nitemaidens guild hath passed the feldshers monthly inspection as mandated by the law, and is not a bearer of maladies to infect our towne. I so swear on this date. (signed by the town feldsher, the date is a smudge)" + +/obj/item/paper/nitemaiden_certificate/Initialize() + ..() + var/type = pick(typesof(/obj/item/paper/feldsher_certificate)) + new type(loc) + return INITIALIZE_HINT_QDEL + /obj/item/paper/heartfelt/random/Initialize() ..() var/type = pick(typesof(/obj/item/paper/heartfelt) - /obj/item/paper/heartfelt/random) diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm deleted file mode 100644 index 090248b920..0000000000 --- a/code/modules/paperwork/photocopier.dm +++ /dev/null @@ -1,336 +0,0 @@ -/* Photocopiers! - * Contains: - * Photocopier - * Toner Cartridge - */ - -/* - * Photocopier - */ -/obj/machinery/photocopier - name = "photocopier" - desc = "" - icon = 'icons/obj/library.dmi' - icon_state = "photocopier" - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 30 - active_power_usage = 200 - power_channel = EQUIP - max_integrity = 300 - integrity_failure = 0.33 - var/obj/item/paper/copy = null //what's in the copier! - var/obj/item/photo/photocopy = null - var/obj/item/documents/doccopy = null - var/copies = 1 //how many copies to print! - var/toner = 40 //how much toner is left! woooooo~ - var/maxcopies = 10 //how many copies can be copied at once- idea shamelessly stolen from bs12's copier! - var/greytoggle = "Greyscale" - var/mob/living/ass //i can't believe i didn't write a stupid-ass comment about this var when i first coded asscopy. - var/busy = FALSE - -/obj/machinery/photocopier/ui_interact(mob/user) - . = ..() - var/dat = "Photocopier

    " - if(copy || photocopy || doccopy || (ass && (ass.loc == src.loc))) - dat += "Remove Paper
    " - if(toner) - dat += "Copy
    " - dat += "Printing: [copies] copies." - dat += "- " - dat += "+

    " - if(photocopy) - dat += "Printing in [greytoggle]

    " - else if(toner) - dat += "Please insert paper to copy.

    " - if(isAI(user)) - dat += "Print photo from database

    " - dat += "Current toner level: [toner]" - if(!toner) - dat +="
    Please insert a new toner cartridge!" - user << browse(dat, "window=copier") - onclose(user, "copier") - -/obj/machinery/photocopier/Topic(href, href_list) - if(..()) - return - if(href_list["copy"]) - if(copy) - for(var/i = 0, i < copies, i++) - if(toner > 0 && !busy && copy) - var/copy_as_paper = 1 - if(istype(copy, /obj/item/paper/contract/employment)) - var/obj/item/paper/contract/employment/E = copy - var/obj/item/paper/contract/employment/C = new /obj/item/paper/contract/employment (loc, E.target.current) - if(C) - copy_as_paper = 0 - if(copy_as_paper) - var/obj/item/paper/c = new /obj/item/paper (loc) - if(length(copy.info) > 0) //Only print and add content if the copied doc has words on it - if(toner > 10) //lots of toner, make it dark - c.info = "" - else //no toner? shitty copies for you! - c.info = "" - var/copied = copy.info - copied = replacetext(copied, "" - c.name = copy.name - c.fields = copy.fields - c.update_icon() - c.updateinfolinks() - c.stamps = copy.stamps - if(copy.stamped) - c.stamped = copy.stamped.Copy() - c.copy_overlays(copy, TRUE) - toner-- - busy = TRUE - addtimer(CALLBACK(src, PROC_REF(reset_busy)), 1.5 SECONDS) - else - break - updateUsrDialog() - else if(photocopy) - for(var/i = 0, i < copies, i++) - if(toner >= 5 && !busy && photocopy) //Was set to = 0, but if there was say 3 toner left and this ran, you would get -2 which would be weird for ink - new /obj/item/photo (loc, photocopy.picture.Copy(greytoggle == "Greyscale"? TRUE : FALSE)) - busy = TRUE - addtimer(CALLBACK(src, PROC_REF(reset_busy)), 1.5 SECONDS) - else - break - else if(doccopy) - for(var/i = 0, i < copies, i++) - if(toner > 5 && !busy && doccopy) - new /obj/item/documents/photocopy(loc, doccopy) - toner-= 6 // the sprite shows 6 papers, yes I checked - busy = TRUE - addtimer(CALLBACK(src, PROC_REF(reset_busy)), 1.5 SECONDS) - else - break - updateUsrDialog() - else if(ass) //ASS COPY. By Miauw - for(var/i = 0, i < copies, i++) - var/icon/temp_img - if(ishuman(ass) && (ass.get_item_by_slot(SLOT_PANTS) || ass.get_item_by_slot(SLOT_ARMOR))) - to_chat(usr, "I feel kind of silly, copying [ass == usr ? "your" : ass][ass == usr ? "" : "\'s"] ass with [ass == usr ? "your" : "[ass.p_their()]"] clothes on." ) - break - else if(toner >= 5 && !busy && check_ass()) //You have to be sitting on the copier and either be a xeno or a human without clothes on. - if(isalienadult(ass) || istype(ass, /mob/living/simple_animal/hostile/alien)) //Xenos have their own asses, thanks to Pybro. - temp_img = icon('icons/ass/assalien.png') - else if(ishuman(ass)) //Suit checks are in check_ass - temp_img = icon(ass.gender == FEMALE ? 'icons/ass/assfemale.png' : 'icons/ass/assmale.png') - else if(isdrone(ass)) //Drones are hot - temp_img = icon('icons/ass/assdrone.png') - else - break - busy = TRUE - sleep(15) - var/obj/item/photo/p = new /obj/item/photo (loc) - var/datum/picture/toEmbed = new(name = "[ass]'s Ass", desc = "", image = temp_img) - p.pixel_x = rand(-10, 10) - p.pixel_y = rand(-10, 10) - toEmbed.psize_x = 128 - toEmbed.psize_y = 128 - p.set_picture(toEmbed, TRUE, TRUE) - toner -= 5 - busy = FALSE - else - break - updateUsrDialog() - else if(href_list["remove"]) - if(copy) - remove_photocopy(copy, usr) - copy = null - else if(photocopy) - remove_photocopy(photocopy, usr) - photocopy = null - else if(doccopy) - remove_photocopy(doccopy, usr) - doccopy = null - else if(check_ass()) - to_chat(ass, "I feel a slight pressure on your ass.") - updateUsrDialog() - else if(href_list["min"]) - if(copies > 1) - copies-- - updateUsrDialog() - else if(href_list["add"]) - if(copies < maxcopies) - copies++ - updateUsrDialog() - else if(href_list["aipic"]) - if(!isAI(usr)) - return - if(toner >= 5 && !busy) - var/mob/living/silicon/ai/tempAI = usr - if(tempAI.aicamera.stored.len == 0) - to_chat(usr, "No images saved") - return - var/datum/picture/selection = tempAI.aicamera.selectpicture(usr) - var/obj/item/photo/photo = new(loc, selection) - photo.pixel_x = rand(-10, 10) - photo.pixel_y = rand(-10, 10) - toner -= 5 //AI prints color pictures only, thus they can do it more efficiently - busy = TRUE - addtimer(CALLBACK(src, PROC_REF(reset_busy)), 1.5 SECONDS) - updateUsrDialog() - else if(href_list["colortoggle"]) - if(greytoggle == "Greyscale") - greytoggle = "Color" - else - greytoggle = "Greyscale" - updateUsrDialog() - -/obj/machinery/photocopier/proc/reset_busy() - busy = FALSE - updateUsrDialog() - -/obj/machinery/photocopier/proc/do_insertion(obj/item/O, mob/user) - O.forceMove(src) - to_chat(user, "I insert [O] into [src].") - flick("photocopier1", src) - updateUsrDialog() - -/obj/machinery/photocopier/proc/remove_photocopy(obj/item/O, mob/user) - if(!issilicon(user)) //surprised this check didn't exist before, putting stuff in AI's hand is bad - O.forceMove(user.loc) - user.put_in_hands(O) - else - O.forceMove(drop_location()) - to_chat(user, "I take [O] out of [src].") - -/obj/machinery/photocopier/attackby(obj/item/O, mob/user, params) - if(default_unfasten_wrench(user, O)) - return - - else if(istype(O, /obj/item/paper)) - if(copier_empty()) - if(istype(O, /obj/item/paper/contract/infernal)) - to_chat(user, "[src] smokes, smelling of brimstone!") - resistance_flags |= FLAMMABLE - fire_act() - else - if(!user.temporarilyRemoveItemFromInventory(O)) - return - copy = O - do_insertion(O, user) - else - to_chat(user, "There is already something in [src]!") - - else if(istype(O, /obj/item/photo)) - if(copier_empty()) - if(!user.temporarilyRemoveItemFromInventory(O)) - return - photocopy = O - do_insertion(O, user) - else - to_chat(user, "There is already something in [src]!") - - else if(istype(O, /obj/item/documents)) - if(copier_empty()) - if(!user.temporarilyRemoveItemFromInventory(O)) - return - doccopy = O - do_insertion(O, user) - else - to_chat(user, "There is already something in [src]!") - - else if(istype(O, /obj/item/toner)) - if(toner <= 0) - if(!user.temporarilyRemoveItemFromInventory(O)) - return - qdel(O) - toner = 40 - to_chat(user, "I insert [O] into [src].") - updateUsrDialog() - else - to_chat(user, "This cartridge is not yet ready for replacement! Use up the rest of the toner.") - - else if(istype(O, /obj/item/areaeditor/blueprints)) - to_chat(user, "The Blueprint is too large to put into the copier. You need to find something else to record the document") - else - return ..() - -/obj/machinery/photocopier/obj_break(damage_flag) - . = ..() - if(. && toner > 0) - new /obj/effect/decal/cleanable/oil(get_turf(src)) - toner = 0 - ..() - -/obj/machinery/photocopier/MouseDrop_T(mob/target, mob/user) - check_ass() //Just to make sure that you can re-drag somebody onto it after they moved off. - if (!istype(target) || target.anchored || target.buckled || !Adjacent(target) || !user.canUseTopic(src, BE_CLOSE) || target == ass || copier_blocked()) - return - src.add_fingerprint(user) - if(target == user) - user.visible_message("[user] starts climbing onto the photocopier!", "I start climbing onto the photocopier...") - else - user.visible_message("[user] starts putting [target] onto the photocopier!", "I start putting [target] onto the photocopier...") - - if(do_after(user, 20, target = src)) - if(!target || QDELETED(target) || QDELETED(src) || !Adjacent(target)) //check if the photocopier/target still exists. - return - - if(target == user) - user.visible_message("[user] climbs onto the photocopier!", "I climb onto the photocopier.") - else - user.visible_message("[user] puts [target] onto the photocopier!", "I put [target] onto the photocopier.") - - target.forceMove(drop_location()) - ass = target - - if(photocopy) - photocopy.forceMove(drop_location()) - visible_message("[photocopy] is shoved out of the way by [ass]!") - photocopy = null - - else if(copy) - copy.forceMove(drop_location()) - visible_message("[copy] is shoved out of the way by [ass]!") - copy = null - updateUsrDialog() - -/obj/machinery/photocopier/proc/check_ass() //I'm not sure wether I made this proc because it's good form or because of the name. - if(!ass) - return 0 - if(ass.loc != src.loc) - ass = null - updateUsrDialog() - return 0 - else if(ishuman(ass)) - if(!ass.get_item_by_slot(SLOT_PANTS) && !ass.get_item_by_slot(SLOT_ARMOR)) - return 1 - else - return 0 - else - return 1 - -/obj/machinery/photocopier/proc/copier_blocked() - if(QDELETED(src)) - return - if(loc.density) - return 1 - for(var/atom/movable/AM in loc) - if(AM == src) - continue - if(AM.density) - return 1 - return 0 - -/obj/machinery/photocopier/proc/copier_empty() - if(copy || photocopy || check_ass()) - return 0 - else - return 1 - -/* - * Toner cartridge - */ -/obj/item/toner - name = "toner cartridge" - icon = 'icons/obj/device.dmi' - icon_state = "tonercartridge" - grind_results = list(/datum/reagent/iodine = 40, /datum/reagent/iron = 10) - var/charges = 5 - var/max_charges = 5 diff --git a/code/modules/paperwork/ticketmachine.dm b/code/modules/paperwork/ticketmachine.dm deleted file mode 100644 index 8b011752f2..0000000000 --- a/code/modules/paperwork/ticketmachine.dm +++ /dev/null @@ -1,238 +0,0 @@ -//Bureaucracy machine! -//Simply set this up in the hopline and you can serve people based on ticket numbers - -/obj/machinery/ticket_machine - name = "ticket machine" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "ticketmachine" - desc = "" - density = FALSE - maptext_height = 26 - maptext_width = 32 - maptext_x = 7 - maptext_y = 10 - layer = HIGH_OBJ_LAYER - var/ticket_number = 0 //Increment the ticket number whenever the HOP presses his button - var/current_number = 0 //What ticket number are we currently serving? - var/max_number = 100 //At this point, you need to refill it. - var/cooldown = 50 - var/ready = TRUE - var/id = "ticket_machine_default" //For buttons - var/list/ticket_holders = list() - var/list/obj/item/ticket_machine_ticket/tickets = list() - -/obj/machinery/ticket_machine/multitool_act(mob/living/user, obj/item/I) - if(!multitool_check_buffer(user, I)) //make sure it has a data buffer - return - var/obj/item/multitool/M = I - M.buffer = src - to_chat(user, "I store linkage information in [I]'s buffer.") - return TRUE - -/obj/machinery/ticket_machine/emag_act(mob/user) //Emag the ticket machine to dispense burning tickets, as well as randomize its number to destroy the HoP's mind. - if(obj_flags & EMAGGED) - return - to_chat(user, "I overload [src]'s bureaucratic logic circuitry to its MAXIMUM setting.") - ticket_number = rand(0,max_number) - current_number = ticket_number - obj_flags |= EMAGGED - if(tickets.len) - for(var/obj/item/ticket_machine_ticket/ticket in tickets) - ticket.audible_message("\the [ticket] disperses!") - qdel(ticket) - tickets.Cut() - update_icon() - -/obj/machinery/ticket_machine/Initialize() - . = ..() - update_icon() - -/obj/machinery/ticket_machine/proc/increment() - if(current_number > ticket_number) - return - if(current_number && !(obj_flags & EMAGGED) && tickets[current_number]) - tickets[current_number].audible_message("\the [tickets[current_number]] disperses!") - qdel(tickets[current_number]) - if(current_number < ticket_number) - current_number ++ //Increment the one we're serving. - playsound(src, 'sound/blank.ogg', 50, FALSE) - say("Now serving ticket #[current_number]!") - if(!(obj_flags & EMAGGED) && tickets[current_number]) - tickets[current_number].audible_message("\the [tickets[current_number]] vibrates!") - update_icon() //Update our icon here rather than when they take a ticket to show the current ticket number being served - -/obj/machinery/button/ticket_machine - name = "increment ticket counter" - desc = "" - device_type = /obj/item/assembly/control/ticket_machine - req_access = list() - id = "ticket_machine_default" - -/obj/machinery/button/ticket_machine/Initialize() - . = ..() - if(device) - var/obj/item/assembly/control/ticket_machine/ours = device - ours.id = id - -/obj/machinery/button/ticket_machine/multitool_act(mob/living/user, obj/item/I) - . = ..() - if(I.tool_behaviour == TOOL_MULTITOOL) - var/obj/item/multitool/M = I - if(M.buffer && !istype(M.buffer, /obj/machinery/ticket_machine)) - return - var/obj/item/assembly/control/ticket_machine/controller = device - controller.linked = M.buffer - id = null - controller.id = null - to_chat(user, "You've linked [src] to [controller.linked].") - -/obj/item/assembly/control/ticket_machine - name = "ticket machine controller" - desc = "" - var/obj/machinery/ticket_machine/linked //To whom are we linked? - -/obj/item/assembly/control/ticket_machine/Initialize() - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/item/assembly/control/ticket_machine/LateInitialize() - find_machine() - -/obj/item/assembly/control/ticket_machine/proc/find_machine() //Locate the one to which we're linked - for(var/obj/machinery/ticket_machine/ticketsplease in GLOB.machines) - if(ticketsplease.id == id) - linked = ticketsplease - if(linked) - return TRUE - else - return FALSE - -/obj/item/assembly/control/ticket_machine/activate() - if(cooldown) - return - if(!linked) - return - cooldown = TRUE - linked.increment() - addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 10) - -/obj/machinery/ticket_machine/update_icon() - switch(ticket_number) //Gives you an idea of how many tickets are left - if(0 to 49) - icon_state = "ticketmachine_100" - if(50 to 99) - icon_state = "ticketmachine_50" - if(100) - icon_state = "ticketmachine_0" - handle_maptext() - -/obj/machinery/ticket_machine/proc/handle_maptext() - switch(ticket_number) //This is here to handle maptext offsets so that the numbers align. - if(0 to 9) - maptext_x = 13 - if(10 to 99) - maptext_x = 10 - if(100) - maptext_x = 8 - maptext = "[current_number]" //Finally, apply the maptext - -/obj/machinery/ticket_machine/attackby(obj/item/I, mob/user, params) - ..() - if(istype(I, /obj/item/hand_labeler_refill)) - if(!(ticket_number >= max_number)) - to_chat(user, "[src] refuses [I]! There [max_number-ticket_number==1 ? "is" : "are"] still [max_number-ticket_number] ticket\s left!") - return - to_chat(user, "I start to refill [src]'s ticket holder (doing this will reset its ticket count!).") - if(do_after(user, 30, target = src)) - to_chat(user, "I insert [I] into [src] as it whirs nondescriptly.") - qdel(I) - ticket_number = 0 - current_number = 0 - if(tickets.len) - for(var/obj/item/ticket_machine_ticket/ticket in tickets) - ticket.audible_message("\the [ticket] disperses!") - qdel(ticket) - tickets.Cut() - max_number = initial(max_number) - update_icon() - return - -/obj/machinery/ticket_machine/proc/reset_cooldown() - ready = TRUE - -/obj/machinery/ticket_machine/attack_hand(mob/living/carbon/user) - . = ..() - if(!ready) - to_chat(user,"I press the button, but nothing happens...") - return - if(ticket_number >= max_number) - to_chat(user,"Ticket supply depleted, please refill this unit with a hand labeller refill cartridge!") - return - if((user in ticket_holders) && !(obj_flags & EMAGGED)) - to_chat(user, "I already have a ticket!") - return - playsound(src, 'sound/blank.ogg', 100, FALSE) - ticket_number ++ - to_chat(user, "I take a ticket from [src], looks like you're ticket number #[ticket_number]...") - var/obj/item/ticket_machine_ticket/theirticket = new /obj/item/ticket_machine_ticket(get_turf(src)) - theirticket.name = "Ticket #[ticket_number]" - theirticket.maptext = "[ticket_number]" - theirticket.saved_maptext = "[ticket_number]" - theirticket.ticket_number = ticket_number - theirticket.source = src - theirticket.owner = user - user.put_in_hands(theirticket) - ticket_holders += user - tickets += theirticket - if(obj_flags & EMAGGED) //Emag the machine to destroy the HOP's life. - ready = FALSE - addtimer(CALLBACK(src, PROC_REF(reset_cooldown)), cooldown)//Small cooldown to prevent piles of flaming tickets - theirticket.fire_act() - user.dropItemToGround(theirticket) - user.adjust_fire_stacks(1) - user.IgniteMob() - return - -/obj/item/ticket_machine_ticket - name = "Ticket" - desc = "" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "ticket" - maptext_x = 7 - maptext_y = 10 - w_class = WEIGHT_CLASS_TINY - resistance_flags = FLAMMABLE - max_integrity = 50 - var/saved_maptext = null - var/mob/living/carbon/owner - var/obj/machinery/ticket_machine/source - var/ticket_number - -/obj/item/ticket_machine_ticket/attack_hand(mob/user) - . = ..() - maptext = saved_maptext //For some reason, storage code removes all maptext off objs, this stops its number from being wiped off when taken out of storage. - -/obj/item/ticket_machine_ticket/attackby(obj/item/P, mob/living/carbon/human/user, params) //Stolen from papercode - ..() - if(P.get_temperature()) - if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(10)) - user.visible_message("[user] accidentally ignites [user.p_them()]self!", \ - "I miss the paper and accidentally light myself on fire!") - user.dropItemToGround(P) - user.adjust_fire_stacks(1) - user.IgniteMob() - return - user.visible_message("[user] lights [src] ablaze with [P]!", "I light [src] on fire!") - fire_act() - -/obj/item/paper/extinguish() - ..() - update_icon() - -/obj/item/ticket_machine_ticket/Destroy() - if(owner && source) - source.ticket_holders -= owner - source.tickets[ticket_number] = null - owner = null - source = null - return ..() diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm deleted file mode 100644 index 47f06a356e..0000000000 --- a/code/modules/photography/camera/camera.dm +++ /dev/null @@ -1,238 +0,0 @@ - -#define CAMERA_PICTURE_SIZE_HARD_LIMIT 21 - -/obj/item/camera - name = "camera" - icon = 'icons/obj/items_and_weapons.dmi' - desc = "" - icon_state = "camera" - item_state = "camera" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - light_color = LIGHT_COLOR_WHITE - light_power = FLASH_LIGHT_POWER - w_class = WEIGHT_CLASS_SMALL - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_NECK - custom_materials = list(/datum/material/iron = 50, /datum/material/glass = 150) - custom_price = 80 - var/flash_enabled = TRUE - var/state_on = "camera" - var/state_off = "camera_off" - var/pictures_max = 10 - var/pictures_left = 10 - var/on = TRUE - var/cooldown = 64 - var/blending = FALSE //lets not take pictures while the previous is still processing! - var/see_ghosts = CAMERA_NO_GHOSTS //for the spoop of it - var/obj/item/disk/holodisk/disk - var/sound/custom_sound - var/silent = FALSE - var/picture_size_x = 2 - var/picture_size_y = 2 - var/picture_size_x_min = 1 - var/picture_size_y_min = 1 - var/picture_size_x_max = 4 - var/picture_size_y_max = 4 - var/can_customise = TRUE - var/default_picture_name - -/obj/item/camera/attack_self(mob/user) - if(!disk) - return - to_chat(user, "I eject [disk] out the back of [src].") - user.put_in_hands(disk) - disk = null - -/obj/item/camera/examine(mob/user) - . = ..() - . += "Alt-click to change its focusing, allowing you to set how big of an area it will capture." - -/obj/item/camera/proc/adjust_zoom(mob/user) - var/desired_x = input(user, "How high do you want the camera to shoot, between [picture_size_x_min] and [picture_size_x_max]?", "Zoom", picture_size_x) as num|null - - if (isnull(desired_x)) - return - - var/desired_y = input(user, "How wide do you want the camera to shoot, between [picture_size_y_min] and [picture_size_y_max]?", "Zoom", picture_size_y) as num|null - - if (isnull(desired_y)) - return - - picture_size_x = min(CLAMP(desired_x, picture_size_x_min, picture_size_x_max), CAMERA_PICTURE_SIZE_HARD_LIMIT) - picture_size_y = min(CLAMP(desired_y, picture_size_y_min, picture_size_y_max), CAMERA_PICTURE_SIZE_HARD_LIMIT) - -/obj/item/camera/AltClick(mob/user) - if(!user.canUseTopic(src, BE_CLOSE)) - return - adjust_zoom(user) - -/obj/item/camera/attack(mob/living/carbon/human/M, mob/user) - return - -/obj/item/camera/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/camera_film)) - if(pictures_left) - to_chat(user, "[src] still has some film in it!") - return - if(!user.temporarilyRemoveItemFromInventory(I)) - return - to_chat(user, "I insert [I] into [src].") - qdel(I) - pictures_left = pictures_max - return - if(istype(I, /obj/item/disk/holodisk)) - if (!disk) - if(!user.transferItemToLoc(I, src)) - to_chat(user, "[I] is stuck to your hand!") - return TRUE - to_chat(user, "I slide [I] into the back of [src].") - disk = I - else - to_chat(user, "There's already a disk inside [src].") - return TRUE //no afterattack - ..() - -/obj/item/camera/examine(mob/user) - . = ..() - . += "It has [pictures_left] photos left." - -//user can be atom or mob -/obj/item/camera/proc/can_target(atom/target, mob/user, prox_flag) - if(!on || blending || !pictures_left) - return FALSE - var/turf/T = get_turf(target) - if(!T) - return FALSE - if(istype(user)) - if(isAI(user) && !GLOB.cameranet.checkTurfVis(T)) - return FALSE - else if(user.client && !(get_turf(target) in get_hear(user.client.view, user))) - return FALSE - else if(!(get_turf(target) in get_hear(world.view, user))) - return FALSE - else //user is an atom - if(!(get_turf(target) in view(world.view, user))) - return FALSE - return TRUE - -/obj/item/camera/afterattack(atom/target, mob/user, flag) - if (disk) - if(ismob(target)) - if (disk.record) - QDEL_NULL(disk.record) - - disk.record = new - var/mob/M = target - disk.record.caller_name = M.name - disk.record.set_caller_image(M) - else - to_chat(user, "Invalid holodisk target.") - return - - if(!can_target(target, user, flag)) - return - - on = FALSE - - var/realcooldown = cooldown - var/mob/living/carbon/human/H = user - if (HAS_TRAIT(H, TRAIT_PHOTOGRAPHER)) - realcooldown *= 0.5 - addtimer(CALLBACK(src, PROC_REF(cooldown)), realcooldown) - - icon_state = state_off - - INVOKE_ASYNC(src, PROC_REF(captureimage), target, user, flag, picture_size_x - 1, picture_size_y - 1) - - -/obj/item/camera/proc/cooldown() - UNTIL(!blending) - icon_state = state_on - on = TRUE - -/obj/item/camera/proc/show_picture(mob/user, datum/picture/selection) - var/obj/item/photo/P = new(src, selection) - P.show(user) - to_chat(user, P.desc) - qdel(P) - -/obj/item/camera/proc/captureimage(atom/target, mob/user, flag, size_x = 1, size_y = 1) - if(flash_enabled) - flash_lighting_fx(8, light_power, light_color) - blending = TRUE - var/turf/target_turf = get_turf(target) - if(!isturf(target_turf)) - blending = FALSE - return FALSE - size_x = CLAMP(size_x, 0, CAMERA_PICTURE_SIZE_HARD_LIMIT) - size_y = CLAMP(size_y, 0, CAMERA_PICTURE_SIZE_HARD_LIMIT) - var/list/desc = list("This is a photo of an area of [size_x+1] meters by [size_y+1] meters.") - var/list/mobs_spotted = list() - var/list/dead_spotted = list() - var/ai_user = isAI(user) - var/list/seen - var/list/viewlist = (user && user.client)? getviewsize(user.client.view) : getviewsize(world.view) - var/viewr = max(viewlist[1], viewlist[2]) + max(size_x, size_y) - var/viewc = user.client? user.client.eye : target - seen = get_hear(viewr, viewc) - var/list/turfs = list() - var/list/mobs = list() - var/blueprints = FALSE - var/clone_area = SSmapping.RequestBlockReservation(size_x * 2 + 1, size_y * 2 + 1) - for(var/turf/T in block(locate(target_turf.x - size_x, target_turf.y - size_y, target_turf.z), locate(target_turf.x + size_x, target_turf.y + size_y, target_turf.z))) - if((ai_user && GLOB.cameranet.checkTurfVis(T)) || (T in seen)) - turfs += T - for(var/mob/M in T) - mobs += M - if(locate(/obj/item/areaeditor/blueprints) in T) - blueprints = TRUE - for(var/i in mobs) - var/mob/M = i - mobs_spotted += M - if(M.stat == DEAD) - dead_spotted += M - desc += M.get_photo_description(src) - - var/psize_x = (size_x * 2 + 1) * world.icon_size - var/psize_y = (size_y * 2 + 1) * world.icon_size - var/get_icon = camera_get_icon(turfs, target_turf, psize_x, psize_y, clone_area, size_x, size_y, (size_x * 2 + 1), (size_y * 2 + 1)) - qdel(clone_area) - var/icon/temp = icon('icons/effects/96x96.dmi',"") - temp.Blend("#000", ICON_OVERLAY) - temp.Scale(psize_x, psize_y) - temp.Blend(get_icon, ICON_OVERLAY) - - var/datum/picture/P = new("picture", desc.Join(" "), mobs_spotted, dead_spotted, temp, null, psize_x, psize_y, blueprints) - after_picture(user, P, flag) - blending = FALSE - -/obj/item/camera/proc/after_picture(mob/user, datum/picture/picture, proximity_flag) - printpicture(user, picture) - -/obj/item/camera/proc/printpicture(mob/user, datum/picture/picture) //Normal camera proc for creating photos - var/obj/item/photo/p = new(get_turf(src), picture) - if(in_range(src, user)) //needed because of TK - user.put_in_hands(p) - pictures_left-- - to_chat(user, "[pictures_left] photos left.") - var/customise = "No" - if(can_customise) - customise = alert(user, "Do you want to customize the photo?", "Customization", "Yes", "No") - if(customise == "Yes") - var/name1 = stripped_input(user, "Set a name for this photo, or leave blank. 32 characters max.", "Name", max_length = 32) - var/desc1 = stripped_input(user, "Set a description to add to photo, or leave blank. 128 characters max.", "Caption", max_length = 128) - var/caption = stripped_input(user, "Set a caption for this photo, or leave blank. 256 characters max.", "Caption", max_length = 256) - if(name1) - picture.picture_name = name1 - if(desc1) - picture.picture_desc = "" - if(caption) - picture.caption = caption - else - if(default_picture_name) - picture.picture_name = default_picture_name - - p.set_picture(picture, TRUE, TRUE) - if(CONFIG_GET(flag/picture_logging_camera)) - picture.log_to_file() diff --git a/code/modules/photography/camera/camera_image_capturing.dm b/code/modules/photography/camera/camera_image_capturing.dm deleted file mode 100644 index a600ae9987..0000000000 --- a/code/modules/photography/camera/camera_image_capturing.dm +++ /dev/null @@ -1,89 +0,0 @@ -/obj/effect/appearance_clone - -/obj/effect/appearance_clone/New(loc, atom/A) //Intentionally not Initialize(), to make sure the clone assumes the intended appearance in time for the camera getFlatIcon. - if(istype(A)) - appearance = A.appearance - dir = A.dir - if(ismovableatom(A)) - var/atom/movable/AM = A - step_x = AM.step_x - step_y = AM.step_y - . = ..() - -/obj/item/camera/proc/camera_get_icon(list/turfs, turf/center, psize_x = 96, psize_y = 96, datum/turf_reservation/clone_area, size_x, size_y, total_x, total_y) - var/list/atoms = list() - var/skip_normal = FALSE - var/wipe_atoms = FALSE - - if(istype(clone_area) && total_x == clone_area.width && total_y == clone_area.height && size_x >= 0 && size_y > 0) - var/cloned_center_x = round(clone_area.bottom_left_coords[1] + ((total_x - 1) / 2)) - var/cloned_center_y = round(clone_area.bottom_left_coords[2] + ((total_y - 1) / 2)) - for(var/t in turfs) - var/turf/T = t - var/offset_x = T.x - center.x - var/offset_y = T.y - center.y - var/turf/newT = locate(cloned_center_x + offset_x, cloned_center_y + offset_y, clone_area.bottom_left_coords[3]) - if(!(newT in clone_area.reserved_turfs)) //sanity check so we don't overwrite other areas somehow - continue - atoms += new /obj/effect/appearance_clone(newT, T) - if(T.loc.icon_state) - atoms += new /obj/effect/appearance_clone(newT, T.loc) - for(var/i in T.contents) - var/atom/A = i - if(!A.invisibility || (see_ghosts && isobserver(A))) - atoms += new /obj/effect/appearance_clone(newT, A) - skip_normal = TRUE - wipe_atoms = TRUE - center = locate(cloned_center_x, cloned_center_y, clone_area.bottom_left_coords[3]) - - if(!skip_normal) - for(var/i in turfs) - var/turf/T = i - atoms += T - for(var/atom/movable/A in T) - if(A.invisibility) - if(!(see_ghosts && isobserver(A))) - continue - atoms += A - CHECK_TICK - - var/icon/res = icon('icons/effects/96x96.dmi', "transparent") - res.Scale(psize_x, psize_y) - - var/list/sorted = list() - var/j - for(var/i in 1 to atoms.len) - var/atom/c = atoms[i] - for(j = sorted.len, j > 0, --j) - var/atom/c2 = sorted[j] - if(c2.layer <= c.layer) - break - sorted.Insert(j+1, c) - CHECK_TICK - - var/xcomp = FLOOR(psize_x / 2, 1) - 15 - var/ycomp = FLOOR(psize_y / 2, 1) - 15 - - - for(var/atom/A in sorted) - var/xo = (A.x - center.x) * world.icon_size + A.pixel_x + xcomp - var/yo = (A.y - center.y) * world.icon_size + A.pixel_y + ycomp - if(ismovableatom(A)) - var/atom/movable/AM = A - xo += AM.step_x - yo += AM.step_y - var/icon/img = getFlatIcon(A) - if(img) - res.Blend(img, blendMode2iconMode(A.blend_mode), xo, yo) - CHECK_TICK - - if(!silent) - if(istype(custom_sound)) //This is where the camera actually finishes its exposure. - playsound(loc, custom_sound, 75, TRUE, -3) - else - playsound(loc, pick('sound/blank.ogg'), 75, TRUE, -3) - - if(wipe_atoms) - QDEL_LIST(atoms) - - return res diff --git a/code/modules/photography/camera/film.dm b/code/modules/photography/camera/film.dm deleted file mode 100644 index e20bb6b271..0000000000 --- a/code/modules/photography/camera/film.dm +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Film - */ -/obj/item/camera_film - name = "film cartridge" - icon = 'icons/obj/items_and_weapons.dmi' - desc = "" - icon_state = "film" - item_state = "electropack" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - w_class = WEIGHT_CLASS_TINY - resistance_flags = FLAMMABLE - custom_materials = list(/datum/material/iron = 10, /datum/material/glass = 10) diff --git a/code/modules/photography/camera/other.dm b/code/modules/photography/camera/other.dm deleted file mode 100644 index b8e5a85596..0000000000 --- a/code/modules/photography/camera/other.dm +++ /dev/null @@ -1,14 +0,0 @@ -/obj/item/camera/spooky - name = "camera obscura" - desc = "" - see_ghosts = CAMERA_SEE_GHOSTS_BASIC - -/obj/item/camera/spooky/badmin - desc = "" - see_ghosts = CAMERA_SEE_GHOSTS_ORBIT - -/obj/item/camera/detective - name = "Detective's camera" - desc = "" - pictures_max = 30 - pictures_left = 30 diff --git a/code/modules/photography/camera/silicon_camera.dm b/code/modules/photography/camera/silicon_camera.dm deleted file mode 100644 index d38945455b..0000000000 --- a/code/modules/photography/camera/silicon_camera.dm +++ /dev/null @@ -1,99 +0,0 @@ - -/obj/item/camera/siliconcam - name = "silicon photo camera" - var/in_camera_mode = FALSE - var/list/datum/picture/stored = list() - -/obj/item/camera/siliconcam/ai_camera - name = "AI photo camera" - flash_enabled = FALSE - -/obj/item/camera/siliconcam/proc/toggle_camera_mode(mob/user) - if(in_camera_mode) - camera_mode_off(user) - else - camera_mode_on(user) - -/obj/item/camera/siliconcam/proc/camera_mode_off(mob/user) - in_camera_mode = FALSE - to_chat(user, "Camera Mode deactivated") - -/obj/item/camera/siliconcam/proc/camera_mode_on(mob/user) - in_camera_mode = TRUE - to_chat(user, "Camera Mode activated") - -/obj/item/camera/siliconcam/proc/selectpicture(mob/user) - var/list/nametemp = list() - var/find - if(!stored.len) - to_chat(usr, "No images saved") - return - var/list/temp = list() - for(var/i in stored) - var/datum/picture/p = i - nametemp += p.picture_name - temp[p.picture_name] = p - find = input(user, "Select image") in nametemp|null - if(!find) - return - return temp[find] - -/obj/item/camera/siliconcam/proc/viewpictures(mob/user) - var/datum/picture/selection = selectpicture(user) - if(istype(selection)) - show_picture(user, selection) - -/obj/item/camera/siliconcam/ai_camera/after_picture(mob/user, datum/picture/picture, proximity_flag) - var/number = stored.len - picture.picture_name = "Image [number] (taken by [loc.name])" - stored[picture] = TRUE - to_chat(usr, "Image recorded") - -/obj/item/camera/siliconcam/robot_camera - name = "Cyborg photo camera" - var/printcost = 2 - -/obj/item/camera/siliconcam/robot_camera/after_picture(mob/user, datum/picture/picture, proximity_flag) - var/mob/living/silicon/robot/C = loc - if(istype(C) && istype(C.connected_ai)) - var/number = C.connected_ai.aicamera.stored.len - picture.picture_name = "Image [number] (taken by [loc.name])" - C.connected_ai.aicamera.stored[picture] = TRUE - to_chat(usr, "Image recorded and saved to remote database") - else - var/number = stored.len - picture.picture_name = "Image [number] (taken by [loc.name])" - stored[picture] = TRUE - to_chat(usr, "Image recorded and saved to local storage. Upload will happen automatically if unit is lawsynced.") - -/obj/item/camera/siliconcam/robot_camera/selectpicture(mob/user) - var/mob/living/silicon/robot/R = loc - if(istype(R) && R.connected_ai) - R.picturesync() - return R.connected_ai.aicamera.selectpicture(user) - else - return ..() - -/obj/item/camera/siliconcam/robot_camera/verb/borgprinting() - set category ="Robot Commands" - set name = "Print Image" - set src in usr - if(usr.stat == DEAD) - return - borgprint(usr) - -/obj/item/camera/siliconcam/robot_camera/proc/borgprint(mob/user) - var/mob/living/silicon/robot/C = loc - if(!istype(C) || C.toner < 20) - to_chat(user, "Insufficent toner to print image.") - return - var/datum/picture/selection = selectpicture(user) - if(!istype(selection)) - to_chat(user, "Invalid Image.") - return - var/obj/item/photo/p = new /obj/item/photo(C.loc, selection) - p.pixel_x = rand(-10, 10) - p.pixel_y = rand(-10, 10) - C.toner -= printcost //All fun allowed. - visible_message("[C.name] spits out a photograph from a narrow slot on its chassis.") - to_chat(usr, "I print a photograph.") diff --git a/code/modules/photography/photos/frame.dm b/code/modules/photography/photos/frame.dm index dac6525242..804c14fb0b 100644 --- a/code/modules/photography/photos/frame.dm +++ b/code/modules/photography/photos/frame.dm @@ -1,4 +1,82 @@ // Picture frames +/obj/item/wallframe + icon = 'icons/obj/wallframe.dmi' + custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT*2) + flags_1 = CONDUCT_1 + item_state = "syringe_kit" + lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' + w_class = WEIGHT_CLASS_SMALL + var/result_path + var/inverse = 0 // For inverse dir frames like light fixtures. + var/pixel_shift //The amount of pixels + +/obj/item/wallframe/proc/try_build(turf/on_wall, mob/user) + if(get_dist(on_wall,user)>1) + return + var/ndir = get_dir(on_wall, user) + if(!(ndir in GLOB.cardinals)) + return + var/turf/T = get_turf(user) + var/area/A = get_area(T) + if(!isfloorturf(T)) + to_chat(user, "I cannot place [src] on this spot!") + return + if(A.always_unpowered) + to_chat(user, "I cannot place [src] in this area!") + return + if(gotwallitem(T, ndir, inverse*2)) + to_chat(user, "There's already an item on this wall!") + return + + return TRUE + +/obj/item/wallframe/proc/attach(turf/on_wall, mob/user) + if(result_path) + playsound(src.loc, 'sound/blank.ogg', 75, TRUE) + user.visible_message("[user.name] attaches [src] to the wall.", + "I attach [src] to the wall.", + "I hear clicking.") + var/ndir = get_dir(on_wall,user) + if(inverse) + ndir = turn(ndir, 180) + + var/obj/O = new result_path(get_turf(user), ndir, TRUE) + if(pixel_shift) + switch(ndir) + if(NORTH) + O.pixel_y = pixel_shift + if(SOUTH) + O.pixel_y = -pixel_shift + if(EAST) + O.pixel_x = pixel_shift + if(WEST) + O.pixel_x = -pixel_shift + after_attach(O) + + qdel(src) + +/obj/item/wallframe/proc/after_attach(obj/O) + transfer_fingerprints_to(O) + +/obj/item/wallframe/attackby(obj/item/W, mob/user, params) + ..() + if(W.tool_behaviour == TOOL_SCREWDRIVER) + // For camera-building borgs + var/turf/T = get_step(get_turf(user), user.dir) + if(iswallturf(T)) + T.attackby(src, user, params) + + var/metal_amt = round(custom_materials[getmaterialref(/datum/material/iron)]/MINERAL_MATERIAL_AMOUNT) //Replace this shit later + var/glass_amt = round(custom_materials[getmaterialref(/datum/material/glass)]/MINERAL_MATERIAL_AMOUNT) //Replace this shit later + + if(W.tool_behaviour == TOOL_WRENCH && (metal_amt || glass_amt)) + to_chat(user, "I dismantle [src].") + if(metal_amt) + new /obj/item/stack/sheet/metal(get_turf(src), metal_amt) + if(glass_amt) + new /obj/item/stack/sheet/glass(get_turf(src), glass_amt) + qdel(src) /obj/item/wallframe/picture name = "picture frame" diff --git a/code/modules/plumbing/ducts.dm b/code/modules/plumbing/ducts.dm deleted file mode 100644 index fb50cac1bb..0000000000 --- a/code/modules/plumbing/ducts.dm +++ /dev/null @@ -1,406 +0,0 @@ -/* -All the important duct code: -/code/datums/components/plumbing/plumbing.dm -/code/datums/ductnet.dm -*/ -/obj/machinery/duct - name = "fluid duct" - icon = 'icons/obj/plumbing/fluid_ducts.dmi' - icon_state = "nduct" - level = 1 - ///bitfield with the directions we're connected in - var/connects - ///set to TRUE to disable smart duct behaviour - var/dumb = FALSE - ///wheter we allow our connects to be changed after initialization or not - var/lock_connects = FALSE - ///our ductnet, wich tracks what we're connected to - var/datum/ductnet/duct - ///amount we can transfer per process. note that the ductnet can carry as much as the lowest capacity duct - var/capacity = 10 - - ///the color of our duct - var/duct_color = null - ///TRUE to ignore colors, so yeah we also connect with other colors without issue - var/ignore_colors = FALSE - ///1,2,4,8,16 - var/duct_layer = DUCT_LAYER_DEFAULT - ///whether we allow our layers to be altered - var/lock_layers = FALSE - ///TRUE to let colors connect when forced with a wrench, false to just not do that at all - var/color_to_color_support = TRUE - ///wheter to even bother with plumbing code or not - var/active = TRUE - ///track ducts we're connected to. Mainly for ducts we connect to that we normally wouldn't, like different layers and colors, for when we regenerate the ducts - var/list/neighbours = list() - ///wheter we just unanchored or drop whatever is in the variable. either is safe - var/drop_on_wrench = /obj/item/stack/ducts - -/obj/machinery/duct/Initialize(mapload, no_anchor, color_of_duct, layer_of_duct = DUCT_LAYER_DEFAULT, force_connects) - . = ..() - if(no_anchor) - active = FALSE - anchored = FALSE - else if(!can_anchor()) - qdel(src) - CRASH("Overlapping ducts detected") - if(force_connects) - connects = force_connects //skip change_connects() because we're still initializing and we need to set our connects at one point - if(!lock_layers) - duct_layer = layer_of_duct - if(!ignore_colors) - duct_color = color_of_duct - if(duct_color) - add_atom_colour(duct_color, FIXED_COLOUR_PRIORITY) - handle_layer() - for(var/obj/machinery/duct/D in loc) - if(D == src) - continue - if(D.duct_layer & duct_layer) - disconnect_duct() - if(active) - attempt_connect() -///start looking around us for stuff to connect to -/obj/machinery/duct/proc/attempt_connect() - reset_connects() //All connects are gathered here again eitherway, we might aswell reset it so they properly update when reconnecting - - for(var/atom/movable/AM in loc) - var/datum/component/plumbing/P = AM.GetComponent(/datum/component/plumbing) - if(P?.active) - disconnect_duct() //let's not built under plumbing machinery - return - for(var/D in GLOB.cardinals) - if(dumb && !(D & connects)) - continue - for(var/atom/movable/AM in get_step(src, D)) - if(connect_network(AM, D)) - add_connects(D) - update_icon() -///see if whatever we found can be connected to -/obj/machinery/duct/proc/connect_network(atom/movable/AM, direction, ignore_color) - if(istype(AM, /obj/machinery/duct)) - return connect_duct(AM, direction, ignore_color) - - var/plumber = AM.GetComponent(/datum/component/plumbing) - if(!plumber) - return - return connect_plumber(plumber, direction) -///connect to a duct -/obj/machinery/duct/proc/connect_duct(obj/machinery/duct/D, direction, ignore_color) - var/opposite_dir = turn(direction, 180) - if(!active || !D.active) - return - - if(!dumb && D.dumb && !(opposite_dir & D.connects)) - return - if(dumb && D.dumb && !(connects & D.connects)) //we eliminated a few more scenarios in attempt connect - return - - if((duct == D.duct) && duct)//check if we're not just comparing two null values - add_neighbour(D, direction) - - D.add_connects(opposite_dir) - D.update_icon() - return TRUE //tell the current pipe to also update it's sprite - if(!(D in neighbours)) //we cool - if((duct_color != D.duct_color) && !(ignore_colors || D.ignore_colors)) - return - if(!(duct_layer & D.duct_layer)) - return - - if(D.duct) - if(duct) - duct.assimilate(D.duct) - else - D.duct.add_duct(src) - else - if(duct) - duct.add_duct(D) - else - create_duct() - duct.add_duct(D) - add_neighbour(D, direction) - //tell our buddy its time to pass on the torch of connecting to pipes. This shouldn't ever infinitely loop since it only works on pipes that havent been inductrinated - D.attempt_connect() - - return TRUE -///connect to a plumbing object -/obj/machinery/duct/proc/connect_plumber(datum/component/plumbing/P, direction) - var/opposite_dir = turn(direction, 180) - if(duct_layer != DUCT_LAYER_DEFAULT) //plumbing devices don't support multilayering. 3 is the default layer so we only use that. We can change this later - return FALSE - - if(!P.active) - return - - var/comp_directions = P.supply_connects + P.demand_connects //they should never, ever have supply and demand connects overlap or catastrophic failure - if(opposite_dir & comp_directions) - if(!duct) - create_duct() - if(duct.add_plumber(P, opposite_dir)) - neighbours[P.parent] = direction - return TRUE -///we disconnect ourself from our neighbours. we also destroy our ductnet and tell our neighbours to make a new one -/obj/machinery/duct/proc/disconnect_duct() - anchored = FALSE - active = FALSE - if(duct) - duct.remove_duct(src) - lose_neighbours() - reset_connects(0) - update_icon() - if(ispath(drop_on_wrench) && !QDELING(src)) - new drop_on_wrench(drop_location()) - qdel(src) - -///''''''''''''''''optimized''''''''''''''''' proc for quickly reconnecting after a duct net was destroyed -/obj/machinery/duct/proc/reconnect() - if(neighbours.len && !duct) - create_duct() - for(var/atom/movable/AM in neighbours) - if(istype(AM, /obj/machinery/duct)) - var/obj/machinery/duct/D = AM - if(D.duct) - if(D.duct == duct) //we're already connected - continue - else - duct.assimilate(D.duct) - continue - else - duct.add_duct(D) - D.reconnect() - else - var/datum/component/plumbing/P = AM.GetComponent(/datum/component/plumbing) - if(AM in get_step(src, neighbours[AM])) //did we move? - if(P) - connect_plumber(P, neighbours[AM]) - else - neighbours -= AM //we moved - -///Special proc to draw a new connect frame based on neighbours. not the norm so we can support multiple duct kinds -/obj/machinery/duct/proc/generate_connects() - if(lock_connects) - return - connects = 0 - for(var/A in neighbours) - connects |= neighbours[A] - update_icon() - -///create a new duct datum -/obj/machinery/duct/proc/create_duct() - duct = new() - duct.add_duct(src) -///add a duct as neighbour. this means we're connected and will connect again if we ever regenerate -/obj/machinery/duct/proc/add_neighbour(obj/machinery/duct/D, direction) - if(!(D in neighbours)) - neighbours[D] = direction - if(!(src in D.neighbours)) - D.neighbours[src] = turn(direction, 180) -///remove all our neighbours, and remove us from our neighbours aswell -/obj/machinery/duct/proc/lose_neighbours() - for(var/obj/machinery/duct/D in neighbours) - D.neighbours.Remove(src) - neighbours = list() -///add a connect direction -/obj/machinery/duct/proc/add_connects(new_connects) //make this a define to cut proc calls? - if(!lock_connects) - connects |= new_connects -///remove our connects -/obj/machinery/duct/proc/reset_connects() - if(!lock_connects) - connects = 0 -///get a list of the ducts we can connect to if we are dumb -/obj/machinery/duct/proc/get_adjacent_ducts() - var/list/adjacents = list() - for(var/A in GLOB.cardinals) - if(A & connects) - for(var/obj/machinery/duct/D in get_step(src, A)) - if((turn(A, 180) & D.connects) && D.active) - adjacents += D - return adjacents - -/obj/machinery/duct/update_icon() //setting connects isnt a parameter because sometimes we make more than one change, overwrite it completely or just add it to the bitfield - var/temp_icon = initial(icon_state) - for(var/D in GLOB.cardinals) - if(D & connects) - if(D == NORTH) - temp_icon += "_n" - if(D == SOUTH) - temp_icon += "_s" - if(D == EAST) - temp_icon += "_e" - if(D == WEST) - temp_icon += "_w" - icon_state = temp_icon -///update the layer we are on -/obj/machinery/duct/proc/handle_layer() - var/offset - switch(duct_layer)//it's a bitfield, but it's fine because it only works when there's one layer, and multiple layers should be handled differently - if(FIRST_DUCT_LAYER) - offset = -10 - if(SECOND_DUCT_LAYER) - offset = -5 - if(THIRD_DUCT_LAYER) - offset = 0 - if(FOURTH_DUCT_LAYER) - offset = 5 - if(FIFTH_DUCT_LAYER) - offset = 10 - pixel_x = offset - pixel_y = offset - - -/obj/machinery/duct/wrench_act(mob/living/user, obj/item/I) //I can also be the RPD - ..() - add_fingerprint(user) - I.play_tool_sound(src) - if(anchored) - user.visible_message( \ - "[user] unfastens \the [src].", \ - "I unfasten \the [src].", \ - "I hear ratcheting.") - disconnect_duct() - else if(can_anchor()) - anchored = TRUE - active = TRUE - user.visible_message( \ - "[user] fastens \the [src].", \ - "I fasten \the [src].", \ - "I hear ratcheting.") - attempt_connect() - return TRUE -///collection of all the sanity checks to prevent us from stacking ducts that shouldnt be stacked -/obj/machinery/duct/proc/can_anchor(turf/T) - if(!T) - T = get_turf(src) - for(var/obj/machinery/duct/D in T) - if(!anchored) - continue - for(var/A in GLOB.cardinals) - if(A & connects && A & D.connects) - return FALSE - return TRUE - -/obj/machinery/duct/doMove(destination) - . = ..() - disconnect_duct() - anchored = FALSE - -/obj/machinery/duct/Destroy() - disconnect_duct() - return ..() - -/obj/machinery/duct/MouseDrop_T(atom/A, mob/living/user) - if(!istype(A, /obj/machinery/duct)) - return - var/obj/machinery/duct/D = A - var/obj/item/I = user.get_active_held_item() - if(I?.tool_behaviour != TOOL_WRENCH) - to_chat(user, "I need to be holding a wrench in your active hand to do that!") - return - if(get_dist(src, D) != 1) - return - var/direction = get_dir(src, D) - if(!(direction in GLOB.cardinals)) - return - if(duct_layer != D.duct_layer) - return - - add_connects(direction) //the connect of the other duct is handled in connect_network, but do this here for the parent duct because it's not necessary in normal cases - add_neighbour(D, direction) - connect_network(D, direction, TRUE) - update_icon() -///has a total of 5 layers and doesnt give a shit about color. its also dumb so doesnt autoconnect. -/obj/machinery/duct/multilayered - name = "duct layer-manifold" - icon = 'icons/obj/2x2.dmi' - icon_state = "multiduct" - pixel_x = -15 - pixel_y = -15 - - color_to_color_support = FALSE - duct_layer = FIRST_DUCT_LAYER | SECOND_DUCT_LAYER | THIRD_DUCT_LAYER | FOURTH_DUCT_LAYER | FIFTH_DUCT_LAYER - drop_on_wrench = null - - lock_connects = TRUE - lock_layers = TRUE - ignore_colors = TRUE - dumb = TRUE - - active = FALSE - anchored = FALSE - -/obj/machinery/duct/multilayered/Initialize(mapload, no_anchor, color_of_duct, layer_of_duct = DUCT_LAYER_DEFAULT, force_connects) - . = ..() - update_connects() - -/obj/machinery/duct/multilayered/update_icon() - return - -/obj/machinery/duct/multilayered/wrench_act(mob/living/user, obj/item/I) - . = ..() - update_connects() - -/obj/machinery/duct/multilayered/proc/update_connects() - if(dir & NORTH || dir & SOUTH) - connects = NORTH | SOUTH - else - connects = EAST | WEST - -///don't connect to other multilayered stuff because honestly it shouldnt be done and I dont wanna deal with it -/obj/machinery/duct/multilayered/connect_duct(obj/machinery/duct/D, direction, ignore_color) - if(istype(D, /obj/machinery/duct/multilayered)) - return - return ..() - -/obj/machinery/duct/multilayered/handle_layer() - return - -/obj/item/stack/ducts - name = "stack of duct" - desc = "" - singular_name = "duct" - icon = 'icons/obj/plumbing/fluid_ducts.dmi' - icon_state = "ducts" - w_class = WEIGHT_CLASS_TINY - novariants = FALSE - max_amount = 50 - item_flags = NOBLUDGEON - merge_type = /obj/item/stack/ducts - ///Color of our duct - var/duct_color = "grey" - ///Default layer of our duct - var/duct_layer = "Default Layer" - ///Assoc index with all the available layers. yes five might be a bit much. Colors uses a global by the way - var/list/layers = list("First Layer" = FIRST_DUCT_LAYER, "Second Layer" = SECOND_DUCT_LAYER, "Default Layer" = DUCT_LAYER_DEFAULT, - "Fourth Layer" = FOURTH_DUCT_LAYER, "Fifth Layer" = FIFTH_DUCT_LAYER) - -/obj/item/stack/ducts/examine(mob/user) - . = ..() - . += "It's current color and layer are [duct_color] and [duct_layer]. Use in-hand to change." - -/obj/item/stack/ducts/attack_self(mob/user) - var/new_layer = input("Select a layer", "Layer") as null|anything in layers - if(new_layer) - duct_layer = new_layer - var/new_color = input("Select a color", "Color") as null|anything in GLOB.pipe_paint_colors - if(new_color) - duct_color = new_color - add_atom_colour(GLOB.pipe_paint_colors[new_color], FIXED_COLOUR_PRIORITY) - -/obj/item/stack/ducts/afterattack(atom/A, user, proximity) - . = ..() - if(!proximity) - return - if(istype(A, /obj/machinery/duct)) - var/obj/machinery/duct/D = A - if(!D.anchored) - add(1) - qdel(D) - if(istype(A, /turf/open) && use(1)) - var/turf/open/OT = A - new /obj/machinery/duct(OT, FALSE, GLOB.pipe_paint_colors[duct_color], layers[duct_layer]) - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - -/obj/item/stack/ducts/fifty - amount = 50 diff --git a/code/modules/plumbing/plumbers/_plumb_machinery.dm b/code/modules/plumbing/plumbers/_plumb_machinery.dm deleted file mode 100644 index 46d8b4000b..0000000000 --- a/code/modules/plumbing/plumbers/_plumb_machinery.dm +++ /dev/null @@ -1,94 +0,0 @@ -/**Basic plumbing object. -* It doesn't really hold anything special, YET. -* Objects that are plumbing but not a subtype are as of writing liquid pumps and the reagent_dispenser tank -* Also please note that the plumbing component is toggled on and off by the component using a signal from default_unfasten_wrench, so dont worry about it -*/ -/obj/machinery/plumbing - name = "pipe thing" - icon = 'icons/obj/plumbing/plumbers.dmi' - icon_state = "pump" - density = TRUE - active_power_usage = 30 - use_power = ACTIVE_POWER_USE - resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF - ///Plumbing machinery is always gonna need reagents, so we might aswell put it here - var/buffer = 50 - ///Flags for reagents, like INJECTABLE, TRANSPARENT bla bla everything thats in DEFINES/reagents.dm - var/reagent_flags = TRANSPARENT - ///wheter we partake in rcd construction or not - var/rcd_constructable = TRUE - ///cost of the plumbing rcd construction - var/rcd_cost = 15 - ///delay of constructing it throught the plumbing rcd - var/rcd_delay = 10 - -/obj/machinery/plumbing/Initialize(mapload, bolt = TRUE) - . = ..() - anchored = bolt - create_reagents(buffer, reagent_flags) - AddComponent(/datum/component/simple_rotation, ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ) - -/obj/machinery/plumbing/examine(mob/user) - . = ..() - . += "The maximum volume display reads: [reagents.maximum_volume] units." - -/obj/machinery/plumbing/wrench_act(mob/living/user, obj/item/I) - ..() - default_unfasten_wrench(user, I) - return TRUE - -/obj/machinery/plumbing/plunger_act(obj/item/plunger/P, mob/living/user, reinforced) - to_chat(user, "I start furiously plunging [name].") - if(do_after(user, 30, target = src)) - to_chat(user, "I finish plunging the [name].") - reagents.reaction(get_turf(src), TOUCH) //splash on the floor - reagents.clear_reagents() - -/obj/machinery/plumbing/welder_act(mob/living/user, obj/item/I) - . = ..() - if(anchored) - to_chat(user, "The [name] needs to be unbolted to do that!I start slicing the [name] apart.I slice the [name] apart. target_temperature && acclimate_state != COOLING) - acclimate_state = COOLING - update_icon() - if(!emptying) - if(reagents.chem_temp >= target_temperature && target_temperature + allowed_temperature_difference >= reagents.chem_temp) //cooling here - emptying = TRUE - if(reagents.chem_temp <= target_temperature && target_temperature - allowed_temperature_difference <= reagents.chem_temp) //heating here - emptying = TRUE - - reagents.adjust_thermal_energy((target_temperature - reagents.chem_temp) * heater_coefficient * SPECIFIC_HEAT_DEFAULT * reagents.total_volume) //keep constant with chem heater - reagents.handle_reactions() - -/obj/machinery/plumbing/acclimator/update_icon() - icon_state = initial(icon_state) - switch(acclimate_state) - if(COOLING) - icon_state += "_cold" - if(HEATING) - icon_state += "_hot" - -/obj/machinery/plumbing/acclimator/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "acclimator", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/plumbing/acclimator/ui_data(mob/user) - var/list/data = list() - - data["enabled"] = enabled - data["chem_temp"] = reagents.chem_temp - data["target_temperature"] = target_temperature - data["allowed_temperature_difference"] = allowed_temperature_difference - data["acclimate_state"] = acclimate_state - data["max_volume"] = reagents.maximum_volume - data["reagent_volume"] = reagents.total_volume - data["emptying"] = emptying - return data - -/obj/machinery/plumbing/acclimator/ui_act(action, params) - if(..()) - return - . = TRUE - switch(action) - if("set_target_temperature") - var/target = text2num(params["temperature"]) - target_temperature = CLAMP(target, 0, 1000) - if("set_allowed_temperature_difference") - var/target = text2num(params["temperature"]) - allowed_temperature_difference = CLAMP(target, 0, 1000) - if("toggle_power") - enabled = !enabled - if("change_volume") - var/target = text2num(params["volume"]) - reagents.maximum_volume = CLAMP(round(target), 1, buffer) - -#undef COOLING -#undef HEATING -#undef NEUTRAL diff --git a/code/modules/plumbing/plumbers/destroyer.dm b/code/modules/plumbing/plumbers/destroyer.dm deleted file mode 100644 index 4bbc67a0c1..0000000000 --- a/code/modules/plumbing/plumbers/destroyer.dm +++ /dev/null @@ -1,22 +0,0 @@ -/obj/machinery/plumbing/disposer - name = "chemical disposer" - desc = "" - icon_state = "disposal" - ///we remove 10 reagents per second - var/disposal_rate = 10 - -/obj/machinery/plumbing/disposer/Initialize(mapload, bolt) - . = ..() - AddComponent(/datum/component/plumbing/simple_demand, bolt) - -/obj/machinery/plumbing/disposer/process() - if(stat & NOPOWER) - return - if(reagents.total_volume) - if(icon_state != initial(icon_state) + "_working") //threw it here instead of update icon since it only has two states - icon_state = initial(icon_state) + "_working" - reagents.remove_any(disposal_rate) - else - if(icon_state != initial(icon_state)) - icon_state = initial(icon_state) - diff --git a/code/modules/plumbing/plumbers/filter.dm b/code/modules/plumbing/plumbers/filter.dm deleted file mode 100644 index ff9f226c5a..0000000000 --- a/code/modules/plumbing/plumbers/filter.dm +++ /dev/null @@ -1,69 +0,0 @@ -///chemical plumbing filter. If it's not filtered by left and right, it goes straight. -/obj/machinery/plumbing/filter - name = "chemical filter" - desc = "" - icon_state = "filter" - density = FALSE - ///whitelist of chems id's that go to the left side. Empty to disable port - var/list/left = list() - ///whitelist of chem id's that go to the right side. Empty to disable port - var/list/right = list() - ///whitelist of chems but their name instead of path - var/list/english_left = list() - ///whitelist of chems but their name instead of path - var/list/english_right = list() - - ui_x = 500 - ui_y = 300 - -/obj/machinery/plumbing/filter/Initialize(mapload, bolt) - . = ..() - AddComponent(/datum/component/plumbing/filter, bolt) - -/obj/machinery/plumbing/filter/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "chemical_filter", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/plumbing/filter/ui_data(mob/user) - var/list/data = list() - data["left"] = english_left - data["right"] = english_right - return data - -/obj/machinery/plumbing/filter/ui_act(action, params) - if(..()) - return - . = TRUE - switch(action) - if("add") - var/new_chem_name = input("Enter chemical to filter:", name) as text|null - var/chem_id = get_chem_id(new_chem_name) - if(chem_id) - switch(params["which"]) - if("left") - if(!left.Find(chem_id)) - english_left += new_chem_name - left += chem_id - if("right") - if(!right.Find(chem_id)) - english_right += new_chem_name - right += chem_id - else - to_chat(usr, "No such known reagent exists!") - - if("remove") - var/chem_name = params["reagent"] - var/chem_id = get_chem_id(chem_name) - switch(params["which"]) - if("left") - if(english_left.Find(chem_name)) - english_left -= chem_name - left -= chem_id - if("right") - if(english_right.Find(chem_name)) - english_right -= chem_name - right -= chem_id - - diff --git a/code/modules/plumbing/plumbers/pill_press.dm b/code/modules/plumbing/plumbers/pill_press.dm deleted file mode 100644 index e4dd3b3382..0000000000 --- a/code/modules/plumbing/plumbers/pill_press.dm +++ /dev/null @@ -1,103 +0,0 @@ -///We take a constant input of reagents, and produce a pill once a set volume is reached -/obj/machinery/plumbing/pill_press - name = "pill press" - desc = "" - icon_state = "pill_press" - ///the minimum size a pill can be - var/minimum_pill = 5 - ///the maximum size a pill can be - var/maximum_pill = 50 - ///the size of the pill - var/pill_size = 10 - ///pill name - var/pill_name = "factory pill" - ///the icon_state number for the pill. - var/pill_number = RANDOM_PILL_STYLE - ///list of id's and icons for the pill selection of the ui - var/list/pill_styles - ///list of pills stored in the machine, so we dont have 610 pills on one tile - var/list/stored_pills = list() - ///max amount of pills allowed on our tile before we start storing them instead - var/max_floor_pills = 10 - - ui_x = 300 - ui_y = 199 - -/obj/machinery/plumbing/pill_press/examine(mob/user) - . = ..() - . += "The [name] currently has [stored_pills.len] stored. There needs to be less than [max_floor_pills] on the floor to continue dispensing." - -/obj/machinery/plumbing/pill_press/Initialize(mapload, bolt) - . = ..() - AddComponent(/datum/component/plumbing/simple_demand, bolt) - - //expertly copypasted from chemmasters - var/datum/asset/spritesheet/simple/assets = get_asset_datum(/datum/asset/spritesheet/simple/pills) - pill_styles = list() - for (var/x in 1 to PILL_STYLE_COUNT) - var/list/SL = list() - SL["id"] = x - SL["class_name"] = assets.icon_class_name("pill[x]") - pill_styles += list(SL) - -/obj/machinery/plumbing/pill_press/process() - if(stat & NOPOWER) - return - if(reagents.total_volume >= pill_size) - var/obj/item/reagent_containers/pill/P = new(src) - reagents.trans_to(P, pill_size) - P.name = pill_name - stored_pills += P - if(pill_number == RANDOM_PILL_STYLE) - P.icon_state = "pill[rand(1,21)]" - else - P.icon_state = "pill[pill_number]" - if(P.icon_state == "pill4") //mirrored from chem masters - P.desc = "" - if(stored_pills.len) - var/pill_amount = 0 - for(var/obj/item/reagent_containers/pill/P in loc) - pill_amount++ - if(pill_amount >= max_floor_pills) //too much so just stop - break - if(pill_amount < max_floor_pills) - var/atom/movable/AM = stored_pills[1] //AM because forceMove is all we need - stored_pills -= AM - AM.forceMove(drop_location()) - - -/obj/machinery/plumbing/pill_press/ui_base_html(html) - var/datum/asset/spritesheet/simple/assets = get_asset_datum(/datum/asset/spritesheet/simple/pills) - . = replacetext(html, "", assets.css_tag()) - -/obj/machinery/plumbing/pill_press/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) -// var/datum/asset/assets = get_asset_datum(/datum/asset/spritesheet/simple/pills) -// assets.send(user) - ui = new(user, src, ui_key, "chem_press", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/plumbing/pill_press/ui_data(mob/user) - var/list/data = list() - data["pill_style"] = pill_number - data["pill_size"] = pill_size - data["pill_name"] = pill_name - data["pill_styles"] = pill_styles - return data - -/obj/machinery/plumbing/pill_press/ui_act(action, params) - if(..()) - return - . = TRUE - switch(action) - if("change_pill_style") - pill_number = CLAMP(text2num(params["id"]), 1 , PILL_STYLE_COUNT) - if("change_pill_size") - pill_size = CLAMP(text2num(params["volume"]), minimum_pill, maximum_pill) - if("change_pill_name") - var/new_name = stripped_input(usr, "Enter a pill name.", name, pill_name) - if(findtext(new_name, "pill")) //names like pillatron and Pilliam are thus valid - pill_name = new_name - else - pill_name = new_name + " pill" diff --git a/code/modules/plumbing/plumbers/pumps.dm b/code/modules/plumbing/plumbers/pumps.dm deleted file mode 100644 index 313c4a143b..0000000000 --- a/code/modules/plumbing/plumbers/pumps.dm +++ /dev/null @@ -1,84 +0,0 @@ -///We pump liquids from activated(plungerated) geysers to a plumbing outlet. We need to be wired. -/obj/machinery/power/liquid_pump - name = "liquid pump" - desc = "" - icon = 'icons/obj/plumbing/plumbers.dmi' - icon_state = "pump" - anchored = FALSE - density = TRUE - circuit = /obj/item/circuitboard/machine/pump - idle_power_usage = 10 - active_power_usage = 1000 - ///Are we powered? - var/powered = FALSE - ///units we pump per process (2 seconds) - var/pump_power = 2 - ///set to true if the loop couldnt find a geyser in process, so it remembers and stops checking every loop until moved. more accurate name would be absolutely_no_geyser_under_me_so_dont_try - var/geyserless = FALSE - ///The geyser object - var/obj/structure/geyser/geyser - ///volume of our internal buffer - var/volume = 200 - -/obj/machinery/power/liquid_pump/Initialize() - . = ..() - create_reagents(volume) - AddComponent(/datum/component/plumbing/simple_supply, TRUE) - -/obj/machinery/power/liquid_pump/attackby(obj/item/W, mob/user, params) - if(!powered) - if(!anchored) - if(default_deconstruction_screwdriver(user, "[initial(icon_state)]_open", "[initial(icon_state)]",W)) - return - if(default_deconstruction_crowbar(W)) - return - return ..() - -/obj/machinery/power/liquid_pump/wrench_act(mob/living/user, obj/item/I) - ..() - default_unfasten_wrench(user, I) - return TRUE -///please note that the component has a hook in the parent call, wich handles activating and deactivating -/obj/machinery/power/liquid_pump/default_unfasten_wrench(mob/user, obj/item/I, time = 20) - . = ..() - if(. == SUCCESSFUL_UNFASTEN) - geyser = null - update_icon() - powered = FALSE - geyserless = FALSE //we switched state, so lets just set this back aswell - -/obj/machinery/power/liquid_pump/process() - if(!anchored || panel_open) - return - if(!geyser && !geyserless) - for(var/obj/structure/geyser/G in loc.contents) - geyser = G - if(!geyser) //we didnt find one, abort - anchored = FALSE - geyserless = TRUE - visible_message("The [name] makes a sad beep!") - playsound(src, 'sound/blank.ogg', 50) - return - - if(avail(active_power_usage)) - if(!powered) //we werent powered before this tick so update our sprite - powered = TRUE - update_icon() - add_load(active_power_usage) - pump() - else if(powered) //we were powered, but now we arent - powered = FALSE - update_icon() -///pump up that sweet geyser nectar -/obj/machinery/power/liquid_pump/proc/pump() - if(!geyser || !geyser.reagents) - return - geyser.reagents.trans_to(src, pump_power) - -/obj/machinery/power/liquid_pump/update_icon() - if(powered) - icon_state = initial(icon_state) + "-on" - else if(panel_open) - icon_state = initial(icon_state) + "-open" - else - icon_state = initial(icon_state) diff --git a/code/modules/plumbing/plumbers/reaction_chamber.dm b/code/modules/plumbing/plumbers/reaction_chamber.dm deleted file mode 100644 index 11c619ea26..0000000000 --- a/code/modules/plumbing/plumbers/reaction_chamber.dm +++ /dev/null @@ -1,63 +0,0 @@ -///a reaction chamber for plumbing. pretty much everything can react, but this one keeps the reagents seperated and only reacts under your given terms -/obj/machinery/plumbing/reaction_chamber - name = "reaction chamber" - desc = "" - icon_state = "reaction_chamber" - - buffer = 200 - reagent_flags = TRANSPARENT | NO_REACT - /**list of set reagents that the reaction_chamber allows in, and must all be present before mixing is enabled. - * example: list(/datum/reagent/water = 20, /datum/reagent/fuel/oil = 50) - */ - var/list/required_reagents = list() - ///our reagent goal has been reached, so now we lock our inputs and start emptying - var/emptying = FALSE - -/obj/machinery/plumbing/reaction_chamber/Initialize(mapload, bolt) - . = ..() - AddComponent(/datum/component/plumbing/reaction_chamber, bolt) - -/obj/machinery/plumbing/reaction_chamber/on_reagent_change() - if(reagents.total_volume == 0 && emptying) //we were emptying, but now we aren't - emptying = FALSE - reagents.flags |= NO_REACT - -/obj/machinery/plumbing/reaction_chamber/power_change() - . = ..() - if(use_power != NO_POWER_USE) - icon_state = initial(icon_state) + "_on" - else - icon_state = initial(icon_state) - -/obj/machinery/plumbing/reaction_chamber/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "reaction_chamber", name, 500, 300, master_ui, state) - ui.open() - -/obj/machinery/plumbing/reaction_chamber/ui_data(mob/user) - var/list/data = list() - var/list/text_reagents = list() - for(var/A in required_reagents) //make a list where the key is text, because that looks alot better in the ui than a typepath - var/datum/reagent/R = A - text_reagents[initial(R.name)] = required_reagents[R] - - data["reagents"] = text_reagents - data["emptying"] = emptying - return data - -/obj/machinery/plumbing/reaction_chamber/ui_act(action, params) - if(..()) - return - . = TRUE - switch(action) - if("remove") - var/reagent = get_chem_id(params["chem"]) - if(reagent) - required_reagents.Remove(reagent) - if("add") - var/input_reagent = get_chem_id(input("Enter the name of the reagent", "Input") as text|null) - if(input_reagent && !required_reagents.Find(input_reagent)) - var/input_amount = CLAMP(round(input("Enter amount", "Input") as num|null), 1, 100) - if(input_amount) - required_reagents[input_reagent] = input_amount diff --git a/code/modules/plumbing/plumbers/splitters.dm b/code/modules/plumbing/plumbers/splitters.dm deleted file mode 100644 index 55d949b5b6..0000000000 --- a/code/modules/plumbing/plumbers/splitters.dm +++ /dev/null @@ -1,52 +0,0 @@ -///it splits the reagents however you want. So you can "every 60 units, 45 goes left and 15 goes straight". The side direction is EAST, you can change this in the component -/obj/machinery/plumbing/splitter - name = "Chemical Splitter" - desc = "" - icon_state = "splitter" - buffer = 100 - density = FALSE - - ///constantly switches between TRUE and FALSE. TRUE means the batch tick goes straight, FALSE means the next batch goes in the side duct. - var/turn_straight = TRUE - ///how much we must transfer straight. note input can be as high as 10 reagents per process, usually - var/transfer_straight = 5 - ///how much we must transfer to the side - var/transfer_side = 5 - //the maximum you can set the transfer to - var/max_transfer = 9 - - ui_x = 220 - ui_y = 105 - -/obj/machinery/plumbing/splitter/Initialize(mapload, bolt) - . = ..() - AddComponent(/datum/component/plumbing/splitter, bolt) - -/obj/machinery/plumbing/splitter/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "chem_splitter", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/plumbing/splitter/ui_data(mob/user) - var/list/data = list() - data["straight"] = transfer_straight - data["side"] = transfer_side - data["max_transfer"] = max_transfer - return data - -/obj/machinery/plumbing/splitter/ui_act(action, params) - if(..()) - return - . = TRUE - switch(action) - if("set_amount") - var/direction = params["target"] - var/value = CLAMP(text2num(params["amount"]), 1, max_transfer) - switch(direction) - if("straight") - transfer_straight = value - if("side") - transfer_side = value - else - return FALSE diff --git a/code/modules/plumbing/plumbers/synthesizer.dm b/code/modules/plumbing/plumbers/synthesizer.dm deleted file mode 100644 index 6f200bd36c..0000000000 --- a/code/modules/plumbing/plumbers/synthesizer.dm +++ /dev/null @@ -1,120 +0,0 @@ -///A single machine that produces a single chem. Can be placed in unison with others through plumbing to create chemical factories -/obj/machinery/plumbing/synthesizer - name = "chemical synthesizer" - desc = "" - - icon_state = "synthesizer" - icon = 'icons/obj/plumbing/plumbers.dmi' - rcd_cost = 25 - rcd_delay = 15 - - ///Amount we produce for every process. Ideally keep under 5 since thats currently the standard duct capacity - var/amount = 1 - ///The maximum we can produce for every process - buffer = 5 - ///I track them here because I have no idea how I'd make tgui loop like that - var/static/list/possible_amounts = list(0,1,2,3,4,5) - ///The reagent we are producing. We are a typepath, but are also typecast because there's several occations where we need to use initial. - var/datum/reagent/reagent_id = null - ///reagent overlay. its the colored pipe thingies. we track this because overlays.Cut() is bad - var/image/r_overlay - ///straight up copied from chem dispenser. Being a subtype would be extremely tedious and making it global would restrict potential subtypes using different dispensable_reagents - var/list/dispensable_reagents = list( - /datum/reagent/aluminium, - /datum/reagent/bromine, - /datum/reagent/carbon, - /datum/reagent/chlorine, - /datum/reagent/copper, - /datum/reagent/consumable/ethanol, - /datum/reagent/fluorine, - /datum/reagent/hydrogen, - /datum/reagent/iodine, - /datum/reagent/iron, - /datum/reagent/lithium, - /datum/reagent/mercury, - /datum/reagent/nitrogen, - /datum/reagent/oxygen, - /datum/reagent/phosphorus, - /datum/reagent/potassium, - /datum/reagent/uranium/radium, - /datum/reagent/silicon, - /datum/reagent/silver, - /datum/reagent/sodium, - /datum/reagent/stable_plasma, - /datum/reagent/consumable/sugar, - /datum/reagent/sulfur, - /datum/reagent/toxin/acid, - /datum/reagent/water, - /datum/reagent/fuel - ) - - ui_x = 300 - ui_y = 360 - -/obj/machinery/plumbing/synthesizer/Initialize(mapload, bolt) - . = ..() - AddComponent(/datum/component/plumbing/simple_supply, bolt) - -/obj/machinery/plumbing/synthesizer/process() - if(stat & NOPOWER || !reagent_id || !amount) - return - if(reagents.total_volume >= amount) //otherwise we get leftovers, and we need this to be precise - return - reagents.add_reagent(reagent_id, amount) - -/obj/machinery/plumbing/synthesizer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "synthesizer", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/plumbing/synthesizer/ui_data(mob/user) - var/list/data = list() - - var/is_hallucinating = user.hallucinating() - var/list/chemicals = list() - - for(var/A in dispensable_reagents) - var/datum/reagent/R = GLOB.chemical_reagents_list[A] - if(R) - var/chemname = R.name - if(is_hallucinating && prob(5)) - chemname = "[pick_list_replacements("hallucination.json", "chemicals")]" - chemicals.Add(list(list("title" = chemname, "id" = ckey(R.name)))) - data["chemicals"] = chemicals - data["amount"] = amount - data["possible_amounts"] = possible_amounts - - data["current_reagent"] = ckey(initial(reagent_id.name)) - return data - -/obj/machinery/plumbing/synthesizer/ui_act(action, params) - if(..()) - return - . = TRUE - switch(action) - if("amount") - var/new_amount = text2num(params["target"]) - if(new_amount in possible_amounts) - amount = new_amount - . = TRUE - if("select") - var/new_reagent = GLOB.name2reagent[params["reagent"]] - if(new_reagent in dispensable_reagents) - reagent_id = new_reagent - . = TRUE - update_icon() - reagents.clear_reagents() - -/obj/machinery/plumbing/synthesizer/update_icon() - if(!r_overlay) - r_overlay = image(icon, "[icon_state]_overlay") - else - overlays -= r_overlay //we remove it because overlays are completely unnaffected by changing the object, you need to reapply it - - if(reagent_id) - r_overlay.color = initial(reagent_id.color) - else - r_overlay.color = "#FFFFFF" - - overlays += r_overlay diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm deleted file mode 100644 index 5ccd6789ae..0000000000 --- a/code/modules/power/apc.dm +++ /dev/null @@ -1,1444 +0,0 @@ -//update_state -#define UPSTATE_CELL_IN (1<<0) -#define UPSTATE_OPENED1 (1<<1) -#define UPSTATE_OPENED2 (1<<2) -#define UPSTATE_MAINT (1<<3) -#define UPSTATE_BROKE (1<<4) -#define UPSTATE_BLUESCREEN (1<<5) -#define UPSTATE_WIREEXP (1<<6) -#define UPSTATE_ALLGOOD (1<<7) - -#define APC_RESET_EMP "emp" - -//update_overlay -#define APC_UPOVERLAY_CHARGEING0 (1<<0) -#define APC_UPOVERLAY_CHARGEING1 (1<<1) -#define APC_UPOVERLAY_CHARGEING2 (1<<2) -#define APC_UPOVERLAY_EQUIPMENT0 (1<<3) -#define APC_UPOVERLAY_EQUIPMENT1 (1<<4) -#define APC_UPOVERLAY_EQUIPMENT2 (1<<5) -#define APC_UPOVERLAY_LIGHTING0 (1<<6) -#define APC_UPOVERLAY_LIGHTING1 (1<<7) -#define APC_UPOVERLAY_LIGHTING2 (1<<8) -#define APC_UPOVERLAY_ENVIRON0 (1<<9) -#define APC_UPOVERLAY_ENVIRON1 (1<<10) -#define APC_UPOVERLAY_ENVIRON2 (1<<11) -#define APC_UPOVERLAY_LOCKED (1<<12) -#define APC_UPOVERLAY_OPERATING (1<<13) - -#define APC_ELECTRONICS_MISSING 0 // None -#define APC_ELECTRONICS_INSTALLED 1 // Installed but not secured -#define APC_ELECTRONICS_SECURED 2 // Installed and secured - -#define APC_COVER_CLOSED 0 -#define APC_COVER_OPENED 1 -#define APC_COVER_REMOVED 2 - -#define APC_NOT_CHARGING 0 -#define APC_CHARGING 1 -#define APC_FULLY_CHARGED 2 - -// the Area Power Controller (APC), formerly Power Distribution Unit (PDU) -// one per area, needs wire connection to power network through a terminal - -// controls power to devices in that area -// may be opened to change power cell -// three different channels (lighting/equipment/environ) - may each be set to on, off, or auto - -/obj/machinery/power/apc - name = "area power controller" - desc = "" - - icon_state = "apc0" - use_power = NO_POWER_USE - req_access = null - max_integrity = 200 - integrity_failure = 0.25 - damage_deflection = 10 - resistance_flags = FIRE_PROOF - interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON - ui_x = 450 - ui_y = 460 - - var/lon_range = 1.5 - var/area/area - var/areastring = null - var/obj/item/stock_parts/cell/cell - var/start_charge = 90 // initial cell charge % - var/cell_type = /obj/item/stock_parts/cell/upgraded //Base cell has 2500 capacity. Enter the path of a different cell you want to use. cell determines charge rates, max capacity, ect. These can also be changed with other APC vars, but isn't recommended to minimize the risk of accidental usage of dirty editted APCs - var/opened = APC_COVER_CLOSED - var/shorted = 0 - var/lighting = 3 - var/equipment = 3 - var/environ = 3 - var/operating = TRUE - var/charging = APC_NOT_CHARGING - var/chargemode = 1 - var/chargecount = 0 - var/locked = TRUE - var/coverlocked = TRUE - var/aidisabled = 0 - var/tdir = null - var/obj/machinery/power/terminal/terminal = null - var/lastused_light = 0 - var/lastused_equip = 0 - var/lastused_environ = 0 - var/lastused_total = 0 - var/main_status = 0 - powernet = 0 // set so that APCs aren't found as powernet nodes //Hackish, Horrible, was like this before I changed it :( - var/malfhack = 0 //New var for my changes to AI malf. --NeoFite - var/mob/living/silicon/ai/malfai = null //See above --NeoFite - var/has_electronics = APC_ELECTRONICS_MISSING // 0 - none, 1 - plugged in, 2 - secured by screwdriver - var/overload = 1 //used for the Blackout malf module - var/beenhit = 0 // used for counting how many times it has been hit, used for Aliens at the moment - var/mob/living/silicon/ai/occupier = null - var/transfer_in_progress = FALSE //Is there an AI being transferred out of us? - var/longtermpower = 10 - var/auto_name = FALSE - var/failure_timer = 0 - var/force_update = 0 - var/emergency_lights = FALSE - var/nightshift_lights = FALSE - var/last_nightshift_switch = 0 - var/update_state = -1 - var/update_overlay = -1 - var/icon_update_needed = FALSE - var/obj/machinery/computer/apc_control/remote_control = null - -/obj/machinery/power/apc/unlocked - locked = FALSE - -/obj/machinery/power/apc/syndicate //general syndicate access - req_access = list(ACCESS_SYNDICATE) - -/obj/machinery/power/apc/away //general away mission access - req_access = list(ACCESS_AWAY_GENERAL) - -/obj/machinery/power/apc/highcap/five_k - cell_type = /obj/item/stock_parts/cell/upgraded/plus - -/obj/machinery/power/apc/highcap/ten_k - cell_type = /obj/item/stock_parts/cell/high - -/obj/machinery/power/apc/highcap/fifteen_k - cell_type = /obj/item/stock_parts/cell/high/plus - -/obj/machinery/power/apc/auto_name - auto_name = TRUE - -/obj/machinery/power/apc/auto_name/north //Pixel offsets get overwritten on New() - dir = NORTH - pixel_y = 23 - -/obj/machinery/power/apc/auto_name/south - dir = SOUTH - pixel_y = -23 - -/obj/machinery/power/apc/auto_name/east - dir = EAST - pixel_x = 24 - -/obj/machinery/power/apc/auto_name/west - dir = WEST - pixel_x = -25 - -/obj/machinery/power/apc/get_cell() - return cell - -/obj/machinery/power/apc/connect_to_network() - //Override because the APC does not directly connect to the network; it goes through a terminal. - //The terminal is what the power computer looks for anyway. - if(terminal) - terminal.connect_to_network() - -/obj/machinery/power/apc/New(turf/loc, ndir, building=0) - if (!req_access) - req_access = list(ACCESS_ENGINE_EQUIP) - if (!armor) - armor = list("melee" = 20, "bullet" = 20, "laser" = 10, "energy" = 100, "bomb" = 30, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50) - ..() - GLOB.apcs_list += src - - wires = new /datum/wires/apc(src) - // offset 24 pixels in direction of dir - // this allows the APC to be embedded in a wall, yet still inside an area - if (building) - setDir(ndir) - tdir = dir // to fix Vars bug - setDir(SOUTH) - - switch(tdir) - if(NORTH) - if((pixel_y != initial(pixel_y)) && (pixel_y != 23)) - log_mapping("APC: ([src]) at [AREACOORD(src)] with dir ([tdir] | [uppertext(dir2text(tdir))]) has pixel_y value ([pixel_y] - should be 23.)") - pixel_y = 23 - if(SOUTH) - if((pixel_y != initial(pixel_y)) && (pixel_y != -23)) - log_mapping("APC: ([src]) at [AREACOORD(src)] with dir ([tdir] | [uppertext(dir2text(tdir))]) has pixel_y value ([pixel_y] - should be -23.)") - pixel_y = -23 - if(EAST) - if((pixel_y != initial(pixel_x)) && (pixel_x != 24)) - log_mapping("APC: ([src]) at [AREACOORD(src)] with dir ([tdir] | [uppertext(dir2text(tdir))]) has pixel_x value ([pixel_x] - should be 24.)") - pixel_x = 24 - if(WEST) - if((pixel_y != initial(pixel_x)) && (pixel_x != -25)) - log_mapping("APC: ([src]) at [AREACOORD(src)] with dir ([tdir] | [uppertext(dir2text(tdir))]) has pixel_x value ([pixel_x] - should be -25.)") - pixel_x = -25 - if (building) - area = get_area(src) - opened = APC_COVER_OPENED - operating = FALSE - name = "\improper [get_area_name(area, TRUE)] APC" - stat |= MAINT - update_icon() - addtimer(CALLBACK(src, PROC_REF(update)), 5) - -/obj/machinery/power/apc/Destroy() - GLOB.apcs_list -= src - - if(malfai && operating) - malfai.malf_picker.processing_time = CLAMP(malfai.malf_picker.processing_time - 10,0,1000) - if(area) - area.power_light = FALSE - area.power_equip = FALSE - area.power_environ = FALSE - area.power_change() - area = null - if(occupier) - malfvacate(1) - qdel(wires) - wires = null - if(cell) - qdel(cell) - if(terminal) - disconnect_terminal() - . = ..() - -/obj/machinery/power/apc/handle_atom_del(atom/A) - if(A == cell) - cell = null - update_icon() - updateUsrDialog() - -/obj/machinery/power/apc/proc/make_terminal() - // create a terminal object at the same position as original turf loc - // wires will attach to this - terminal = new/obj/machinery/power/terminal(loc) - terminal.setDir(tdir) - terminal.master = src - -/obj/machinery/power/apc/Initialize(mapload) - . = ..() - if(!mapload) - return - has_electronics = APC_ELECTRONICS_SECURED - // is starting with a power cell installed, create it and set its charge level - if(cell_type) - cell = new cell_type - cell.charge = start_charge * cell.maxcharge / 100 // (convert percentage to actual value) - - var/area/A = loc.loc - - //if area isn't specified use current - if(areastring) - area = get_area_instance_from_text(areastring) - if(!area) - area = A - stack_trace("Bad areastring path for [src], [areastring]") - else if(isarea(A) && areastring == null) - area = A - - if(auto_name) - name = "\improper [get_area_name(area, TRUE)] APC" - - update_icon() - - make_terminal() - - addtimer(CALLBACK(src, PROC_REF(update)), 5) - -/obj/machinery/power/apc/examine(mob/user) - . = ..() - if(stat & BROKEN) - return - if(opened) - if(has_electronics && terminal) - . += "The cover is [opened==APC_COVER_REMOVED?"removed":"open"] and the power cell is [ cell ? "installed" : "missing"]." - else - . += {"It's [ !terminal ? "not" : "" ] wired up.\n - The electronics are[!has_electronics?"n't":""] installed."} - else - if (stat & MAINT) - . += "The cover is closed. Something is wrong with it. It doesn't work." - else if (malfhack) - . += "The cover is broken. It may be hard to force it open." - else - . += "The cover is closed." - - . += "Alt-Click the APC to [ locked ? "unlock" : "lock"] the interface." - - if(issilicon(user)) - . += "Ctrl-Click the APC to switch the breaker [ operating ? "off" : "on"]." - -// update the APC icon to show the three base states -// also add overlays for indicator lights -/obj/machinery/power/apc/update_icon() - var/update = check_updates() //returns 0 if no need to update icons. - // 1 if we need to update the icon_state - // 2 if we need to update the overlays - if(!update) - icon_update_needed = FALSE - return - - if(update & 1) // Updating the icon state - if(update_state & UPSTATE_ALLGOOD) - icon_state = "apc0" - else if(update_state & (UPSTATE_OPENED1|UPSTATE_OPENED2)) - var/basestate = "apc[ cell ? "2" : "1" ]" - if(update_state & UPSTATE_OPENED1) - if(update_state & (UPSTATE_MAINT|UPSTATE_BROKE)) - icon_state = "apcmaint" //disabled APC cannot hold cell - else - icon_state = basestate - else if(update_state & UPSTATE_OPENED2) - if (update_state & UPSTATE_BROKE || malfhack) - icon_state = "[basestate]-b-nocover" - else - icon_state = "[basestate]-nocover" - else if(update_state & UPSTATE_BROKE) - icon_state = "apc-b" - else if(update_state & UPSTATE_BLUESCREEN) - icon_state = "apcemag" - else if(update_state & UPSTATE_WIREEXP) - icon_state = "apcewires" - else if(update_state & UPSTATE_MAINT) - icon_state = "apc0" - - if(!(update_state & UPSTATE_ALLGOOD)) - SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) - - if(update & 2) - SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) - if(!(stat & (BROKEN|MAINT)) && update_state & UPSTATE_ALLGOOD) - SSvis_overlays.add_vis_overlay(src, icon, "apcox-[locked]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) - SSvis_overlays.add_vis_overlay(src, icon, "apco3-[charging]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) - if(operating) - SSvis_overlays.add_vis_overlay(src, icon, "apco0-[equipment]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) - SSvis_overlays.add_vis_overlay(src, icon, "apco1-[lighting]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) - SSvis_overlays.add_vis_overlay(src, icon, "apco2-[environ]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir) - - // And now, separately for cleanness, the lighting changing - if(update_state & UPSTATE_ALLGOOD) - switch(charging) - if(APC_NOT_CHARGING) - light_color = LIGHT_COLOR_RED - if(APC_CHARGING) - light_color = LIGHT_COLOR_BLUE - if(APC_FULLY_CHARGED) - light_color = LIGHT_COLOR_GREEN - set_light(lon_range) - else if(update_state & UPSTATE_BLUESCREEN) - light_color = LIGHT_COLOR_BLUE - set_light(lon_range) - else - set_light(0) - - icon_update_needed = FALSE - -/obj/machinery/power/apc/proc/check_updates() - var/last_update_state = update_state - var/last_update_overlay = update_overlay - update_state = 0 - update_overlay = 0 - - if(cell) - update_state |= UPSTATE_CELL_IN - if(stat & BROKEN) - update_state |= UPSTATE_BROKE - if(stat & MAINT) - update_state |= UPSTATE_MAINT - if(opened) - if(opened==APC_COVER_OPENED) - update_state |= UPSTATE_OPENED1 - if(opened==APC_COVER_REMOVED) - update_state |= UPSTATE_OPENED2 - else if((obj_flags & EMAGGED) || malfai) - update_state |= UPSTATE_BLUESCREEN - else if(panel_open) - update_state |= UPSTATE_WIREEXP - if(update_state <= 1) - update_state |= UPSTATE_ALLGOOD - - if(operating) - update_overlay |= APC_UPOVERLAY_OPERATING - - if(update_state & UPSTATE_ALLGOOD) - if(locked) - update_overlay |= APC_UPOVERLAY_LOCKED - - if(!charging) - update_overlay |= APC_UPOVERLAY_CHARGEING0 - else if(charging == APC_CHARGING) - update_overlay |= APC_UPOVERLAY_CHARGEING1 - else if(charging == APC_FULLY_CHARGED) - update_overlay |= APC_UPOVERLAY_CHARGEING2 - - if (!equipment) - update_overlay |= APC_UPOVERLAY_EQUIPMENT0 - else if(equipment == 1) - update_overlay |= APC_UPOVERLAY_EQUIPMENT1 - else if(equipment == 2) - update_overlay |= APC_UPOVERLAY_EQUIPMENT2 - - if(!lighting) - update_overlay |= APC_UPOVERLAY_LIGHTING0 - else if(lighting == 1) - update_overlay |= APC_UPOVERLAY_LIGHTING1 - else if(lighting == 2) - update_overlay |= APC_UPOVERLAY_LIGHTING2 - - if(!environ) - update_overlay |= APC_UPOVERLAY_ENVIRON0 - else if(environ==1) - update_overlay |= APC_UPOVERLAY_ENVIRON1 - else if(environ==2) - update_overlay |= APC_UPOVERLAY_ENVIRON2 - - - var/results = 0 - if(last_update_state == update_state && last_update_overlay == update_overlay) - return 0 - if(last_update_state != update_state) - results += 1 - if(last_update_overlay != update_overlay) - results += 2 - return results - -// Used in process so it doesn't update the icon too much -/obj/machinery/power/apc/proc/queue_icon_update() - icon_update_needed = TRUE - -//attack with an item - open/close cover, insert cell, or (un)lock interface - -/obj/machinery/power/apc/crowbar_act(mob/user, obj/item/W) - . = TRUE - if (opened) - if (has_electronics == APC_ELECTRONICS_INSTALLED) - if (terminal) - to_chat(user, "Disconnect the wires first!") - return - W.play_tool_sound(src) - to_chat(user, "I attempt to remove the power control board..." ) - if(W.use_tool(src, user, 50)) - if (has_electronics == APC_ELECTRONICS_INSTALLED) - has_electronics = APC_ELECTRONICS_MISSING - if (stat & BROKEN) - user.visible_message("[user.name] has broken the power control board inside [src.name]!",\ - "I break the charred power control board and remove the remains.", - "I hear a crack.") - return - else if (obj_flags & EMAGGED) - obj_flags &= ~EMAGGED - user.visible_message("[user.name] has discarded an emagged power control board from [src.name]!",\ - "I discard the emagged power control board.") - return - else if (malfhack) - user.visible_message("[user.name] has discarded a strangely programmed power control board from [src.name]!",\ - "I discard the strangely programmed board.") - malfai = null - malfhack = 0 - return - else - user.visible_message("[user.name] has removed the power control board from [src.name]!",\ - "I remove the power control board.") - new /obj/item/electronics/apc(loc) - return - else if (opened!=APC_COVER_REMOVED) - opened = APC_COVER_CLOSED - coverlocked = TRUE //closing cover relocks it - update_icon() - return - else if (!(stat & BROKEN)) - if(coverlocked && !(stat & MAINT)) // locked... - to_chat(user, "The cover is locked and cannot be opened!") - return - else if (panel_open) - to_chat(user, "Exposed wires prevents you from opening it!") - return - else - opened = APC_COVER_OPENED - update_icon() - return - -/obj/machinery/power/apc/screwdriver_act(mob/living/user, obj/item/W) - if(..()) - return TRUE - . = TRUE - if(opened) - if(cell) - user.visible_message("[user] removes \the [cell] from [src]!", "I remove \the [cell].") - var/turf/T = get_turf(user) - cell.forceMove(T) - cell.update_icon() - cell = null - charging = APC_NOT_CHARGING - update_icon() - return - else - switch (has_electronics) - if (APC_ELECTRONICS_INSTALLED) - has_electronics = APC_ELECTRONICS_SECURED - stat &= ~MAINT - W.play_tool_sound(src) - to_chat(user, "I screw the circuit electronics into place.") - if (APC_ELECTRONICS_SECURED) - has_electronics = APC_ELECTRONICS_INSTALLED - stat |= MAINT - W.play_tool_sound(src) - to_chat(user, "I unfasten the electronics.") - else - to_chat(user, "There is nothing to secure!") - return - update_icon() - else if(obj_flags & EMAGGED) - to_chat(user, "The interface is broken!") - return - else - panel_open = !panel_open - to_chat(user, "The wires have been [panel_open ? "exposed" : "unexposed"].") - update_icon() - -/obj/machinery/power/apc/wirecutter_act(mob/living/user, obj/item/W) - . = ..() - if (terminal && opened) - terminal.dismantle(user, W) - return TRUE - - -/obj/machinery/power/apc/welder_act(mob/living/user, obj/item/W) - . = ..() - if (opened && !has_electronics && !terminal) - if(!W.tool_start_check(user, amount=3)) - return - user.visible_message("[user.name] welds [src].", \ - "I start welding the APC frame...", \ - "I hear welding.") - if(W.use_tool(src, user, 50, volume=50, amount=3)) - if ((stat & BROKEN) || opened==APC_COVER_REMOVED) - new /obj/item/stack/sheet/metal(loc) - user.visible_message("[user.name] has cut [src] apart with [W].",\ - "I disassembled the broken APC frame.") - else - new /obj/item/wallframe/apc(loc) - user.visible_message("[user.name] has cut [src] from the wall with [W].",\ - "I cut the APC frame from the wall.") - qdel(src) - return TRUE - -/obj/machinery/power/apc/attackby(obj/item/W, mob/living/user, params) - - if(issilicon(user) && get_dist(src,user)>1) - return attack_hand(user) - - if (istype(W, /obj/item/stock_parts/cell) && opened) - if(cell) - to_chat(user, "There is a power cell already installed!") - return - else - if (stat & MAINT) - to_chat(user, "There is no connector for my power cell!") - return - if(!user.transferItemToLoc(W, src)) - return - cell = W - user.visible_message("[user.name] has inserted the power cell to [src.name]!",\ - "I insert the power cell.") - chargecount = 0 - update_icon() - else if (W.GetID()) - togglelock(user) - else if (istype(W, /obj/item/stack/cable_coil) && opened) - var/turf/host_turf = get_turf(src) - if(!host_turf) - CRASH("attackby on APC when it's not on a turf") - if (host_turf.intact) - to_chat(user, "I must remove the floor plating in front of the APC first!") - return - else if (terminal) - to_chat(user, "This APC is already wired!") - return - else if (!has_electronics) - to_chat(user, "There is nothing to wire!") - return - - var/obj/item/stack/cable_coil/C = W - if(C.get_amount() < 10) - to_chat(user, "I need ten lengths of cable for APC!") - return - user.visible_message("[user.name] adds cables to the APC frame.", \ - "I start adding cables to the APC frame...") - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - if(do_after(user, 20, target = src)) - if (C.get_amount() < 10 || !C) - return - if (C.get_amount() >= 10 && !terminal && opened && has_electronics) - var/turf/T = get_turf(src) - var/obj/structure/cable/N = T.get_cable_node() - if (prob(50) && electrocute_mob(usr, N, N, 1, TRUE)) - do_sparks(5, TRUE, src) - return - C.use(10) - to_chat(user, "I add cables to the APC frame.") - make_terminal() - terminal.connect_to_network() - else if (istype(W, /obj/item/electronics/apc) && opened) - if (has_electronics) - to_chat(user, "There is already a board inside the [src]!") - return - else if (stat & BROKEN) - to_chat(user, "I cannot put the board inside, the frame is damaged!") - return - - user.visible_message("[user.name] inserts the power control board into [src].", \ - "I start to insert the power control board into the frame...") - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - if(do_after(user, 10, target = src)) - if(!has_electronics) - has_electronics = APC_ELECTRONICS_INSTALLED - locked = FALSE - to_chat(user, "I place the power control board inside the frame.") - qdel(W) - else if(istype(W, /obj/item/electroadaptive_pseudocircuit) && opened) - var/obj/item/electroadaptive_pseudocircuit/P = W - if(!has_electronics) - if(stat & BROKEN) - to_chat(user, "[src]'s frame is too damaged to support a circuit.") - return - if(!P.adapt_circuit(user, 50)) - return - user.visible_message("[user] fabricates a circuit and places it into [src].", \ - "I adapt a power control board and click it into place in [src]'s guts.") - has_electronics = APC_ELECTRONICS_INSTALLED - locked = FALSE - else if(!cell) - if(stat & MAINT) - to_chat(user, "There's no connector for a power cell.") - return - if(!P.adapt_circuit(user, 500)) - return - var/obj/item/stock_parts/cell/crap/empty/C = new(src) - C.forceMove(src) - cell = C - chargecount = 0 - user.visible_message("[user] fabricates a weak power cell and places it into [src].", \ - "My [P.name] whirrs with strain as you create a weak power cell and place it into [src]!") - update_icon() - else - to_chat(user, "[src] has both electronics and a cell.") - return - else if (istype(W, /obj/item/wallframe/apc) && opened) - if (!(stat & BROKEN || opened==APC_COVER_REMOVED || obj_integrity < max_integrity)) // There is nothing to repair - to_chat(user, "I found no reason for repairing this APC!") - return - if (!(stat & BROKEN) && opened==APC_COVER_REMOVED) // Cover is the only thing broken, we do not need to remove elctronicks to replace cover - user.visible_message("[user.name] replaces missing APC's cover.", \ - "I begin to replace APC's cover...") - if(do_after(user, 20, target = src)) // replacing cover is quicker than replacing whole frame - to_chat(user, "I replace missing APC's cover.") - qdel(W) - opened = APC_COVER_OPENED - update_icon() - return - if (has_electronics) - to_chat(user, "I cannot repair this APC until you remove the electronics still inside!") - return - user.visible_message("[user.name] replaces the damaged APC frame with a new one.", \ - "I begin to replace the damaged APC frame...") - if(do_after(user, 50, target = src)) - to_chat(user, "I replace the damaged APC frame with a new one.") - qdel(W) - stat &= ~BROKEN - obj_integrity = max_integrity - if (opened==APC_COVER_REMOVED) - opened = APC_COVER_OPENED - update_icon() - return - else if(panel_open && !opened && is_wire_tool(W)) - wires.interact(user) - else - return ..() - -/obj/machinery/power/apc/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - if(the_rcd.upgrade & RCD_UPGRADE_SIMPLE_CIRCUITS) - if(!has_electronics) - if(stat & BROKEN) - to_chat(user, "[src]'s frame is too damaged to support a circuit.") - return FALSE - return list("mode" = RCD_UPGRADE_SIMPLE_CIRCUITS, "delay" = 20, "cost" = 1) - else if(!cell) - if(stat & MAINT) - to_chat(user, "There's no connector for a power cell.") - return FALSE - return list("mode" = RCD_UPGRADE_SIMPLE_CIRCUITS, "delay" = 50, "cost" = 10) //16 for a wall - else - to_chat(user, "[src] has both electronics and a cell.") - return FALSE - return FALSE - -/obj/machinery/power/apc/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) - switch(passed_mode) - if(RCD_UPGRADE_SIMPLE_CIRCUITS) - if(!has_electronics) - if(stat & BROKEN) - to_chat(user, "[src]'s frame is too damaged to support a circuit.") - return - user.visible_message("[user] fabricates a circuit and places it into [src].", \ - "I adapt a power control board and click it into place in [src]'s guts.") - has_electronics = TRUE - locked = TRUE - return TRUE - else if(!cell) - if(stat & MAINT) - to_chat(user, "There's no connector for a power cell.") - return FALSE - var/obj/item/stock_parts/cell/crap/empty/C = new(src) - C.forceMove(src) - cell = C - chargecount = 0 - user.visible_message("[user] fabricates a weak power cell and places it into [src].", \ - "My [the_rcd.name] whirrs with strain as you create a weak power cell and place it into [src]!") - update_icon() - return TRUE - else - to_chat(user, "[src] has both electronics and a cell.") - return FALSE - return FALSE - -/obj/machinery/power/apc/AltClick(mob/user) - ..() - if(!user.canUseTopic(src, !issilicon(user)) || !isturf(loc)) - return - else - togglelock(user) - -/obj/machinery/power/apc/proc/togglelock(mob/living/user) - if(obj_flags & EMAGGED) - to_chat(user, "The interface is broken!") - else if(opened) - to_chat(user, "I must close the cover to swipe an ID card!") - else if(panel_open) - to_chat(user, "I must close the panel!") - else if(stat & (BROKEN|MAINT)) - to_chat(user, "Nothing happens!") - else - if(allowed(usr) && !wires.is_cut(WIRE_IDSCAN) && !malfhack) - locked = !locked - to_chat(user, "I [ locked ? "lock" : "unlock"] the APC interface.") - update_icon() - updateUsrDialog() - else - to_chat(user, "Access denied.") - -/obj/machinery/power/apc/proc/toggle_nightshift_lights(mob/living/user) - if(last_nightshift_switch > world.time - 100) //~10 seconds between each toggle to prevent spamming - to_chat(usr, "[src]'s night lighting circuit breaker is still cycling!") - return - last_nightshift_switch = world.time - set_nightshift(!nightshift_lights) - -/obj/machinery/power/apc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) - if(stat & BROKEN) - return damage_amount - . = ..() - -/obj/machinery/power/apc/obj_break(damage_flag) - . = ..() - if(.) - set_broken() - -/obj/machinery/power/apc/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - if(!(stat & BROKEN)) - set_broken() - if(opened != APC_COVER_REMOVED) - opened = APC_COVER_REMOVED - coverlocked = FALSE - visible_message("The APC cover is knocked down!") - update_icon() - -/obj/machinery/power/apc/emag_act(mob/user) - if(!(obj_flags & EMAGGED) && !malfhack) - if(opened) - to_chat(user, "I must close the cover to swipe an ID card!") - else if(panel_open) - to_chat(user, "I must close the panel first!") - else if(stat & (BROKEN|MAINT)) - to_chat(user, "Nothing happens!") - else - flick("apc-spark", src) - playsound(src, "sparks", 75, TRUE) - obj_flags |= EMAGGED - locked = FALSE - to_chat(user, "I emag the APC interface.") - update_icon() - - -// attack with hand - remove cell (if cover open) or interact with the APC - -/obj/machinery/power/apc/attack_hand(mob/user) - . = ..() - if(.) - return - if(opened && (!issilicon(user))) - if(cell) - user.visible_message("[user] removes \the [cell] from [src]!", "I remove \the [cell].") - user.put_in_hands(cell) - cell.update_icon() - src.cell = null - charging = APC_NOT_CHARGING - src.update_icon() - return - if((stat & MAINT) && !opened) //no board; no interface - return - -/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - - if(!ui) - ui = new(user, src, ui_key, "apc", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/power/apc/ui_data(mob/user) - var/list/data = list( - "locked" = locked, - "failTime" = failure_timer, - "isOperating" = operating, - "externalPower" = main_status, - "powerCellStatus" = cell ? cell.percent() : null, - "chargeMode" = chargemode, - "chargingStatus" = charging, - "totalLoad" = DisplayPower(lastused_total), - "coverLocked" = coverlocked, - "siliconUser" = user.has_unlimited_silicon_privilege || user.using_power_flow_console(), - "malfStatus" = get_malf_status(user), - "emergencyLights" = !emergency_lights, - "nightshiftLights" = nightshift_lights, - - "powerChannels" = list( - list( - "title" = "Equipment", - "powerLoad" = DisplayPower(lastused_equip), - "status" = equipment, - "topicParams" = list( - "auto" = list("eqp" = 3), - "on" = list("eqp" = 2), - "off" = list("eqp" = 1) - ) - ), - list( - "title" = "Lighting", - "powerLoad" = DisplayPower(lastused_light), - "status" = lighting, - "topicParams" = list( - "auto" = list("lgt" = 3), - "on" = list("lgt" = 2), - "off" = list("lgt" = 1) - ) - ), - list( - "title" = "Environment", - "powerLoad" = DisplayPower(lastused_environ), - "status" = environ, - "topicParams" = list( - "auto" = list("env" = 3), - "on" = list("env" = 2), - "off" = list("env" = 1) - ) - ) - ) - ) - return data - - -/obj/machinery/power/apc/proc/get_malf_status(mob/living/silicon/ai/malf) - if(istype(malf) && malf.malf_picker) - if(malfai == (malf.parent || malf)) - if(occupier == malf) - return 3 // 3 = User is shunted in this APC - else if(istype(malf.loc, /obj/machinery/power/apc)) - return 4 // 4 = User is shunted in another APC - else - return 2 // 2 = APC hacked by user, and user is in its core. - else - return 1 // 1 = APC not hacked. - else - return 0 // 0 = User is not a Malf AI - -/obj/machinery/power/apc/proc/report() - return "[area.name] : [equipment]/[lighting]/[environ] ([lastused_equip+lastused_light+lastused_environ]) : [cell? cell.percent() : "N/C"] ([charging])" - -/obj/machinery/power/apc/proc/update() - if(operating && !shorted && !failure_timer) - area.power_light = (lighting > 1) - area.power_equip = (equipment > 1) - area.power_environ = (environ > 1) - else - area.power_light = FALSE - area.power_equip = FALSE - area.power_environ = FALSE - area.power_change() - -/obj/machinery/power/apc/proc/can_use(mob/user, loud = 0) //used by attack_hand() and Topic() - if(IsAdminGhost(user)) - return TRUE - if(user.has_unlimited_silicon_privilege) - var/mob/living/silicon/ai/AI = user - var/mob/living/silicon/robot/robot = user - if ( \ - src.aidisabled || \ - malfhack && istype(malfai) && \ - ( \ - (istype(AI) && (malfai!=AI && malfai != AI.parent)) || \ - (istype(robot) && (robot in malfai.connected_robots)) \ - ) \ - ) - if(!loud) - to_chat(user, "\The [src] has eee disabled!") - return FALSE - return TRUE - -/obj/machinery/power/apc/can_interact(mob/user) - . = ..() - if (!. && !QDELETED(remote_control)) - . = remote_control.can_interact(user) - -/obj/machinery/power/apc/ui_status(mob/user) - . = ..() - if (!QDELETED(remote_control) && user == remote_control.operator) - . = UI_INTERACTIVE - -/obj/machinery/power/apc/ui_act(action, params) - if(..() || !can_use(usr, 1) || (locked && !usr.has_unlimited_silicon_privilege && !failure_timer)) - return - switch(action) - if("lock") - if(usr.has_unlimited_silicon_privilege) - if((obj_flags & EMAGGED) || (stat & (BROKEN|MAINT))) - to_chat(usr, "The APC does not respond to the command!") - else - locked = !locked - update_icon() - . = TRUE - if("cover") - coverlocked = !coverlocked - . = TRUE - if("breaker") - toggle_breaker(usr) - . = TRUE - if("toggle_nightshift") - toggle_nightshift_lights() - . = TRUE - if("charge") - chargemode = !chargemode - if(!chargemode) - charging = APC_NOT_CHARGING - update_icon() - . = TRUE - if("channel") - if(params["eqp"]) - equipment = setsubsystem(text2num(params["eqp"])) - update_icon() - update() - else if(params["lgt"]) - lighting = setsubsystem(text2num(params["lgt"])) - update_icon() - update() - else if(params["env"]) - environ = setsubsystem(text2num(params["env"])) - update_icon() - update() - . = TRUE - if("overload") - if(usr.has_unlimited_silicon_privilege) - overload_lighting() - . = TRUE - if("hack") - if(get_malf_status(usr)) - malfhack(usr) - if("occupy") - if(get_malf_status(usr)) - malfoccupy(usr) - if("deoccupy") - if(get_malf_status(usr)) - malfvacate() - if("reboot") - failure_timer = 0 - update_icon() - update() - if("emergency_lighting") - emergency_lights = !emergency_lights - for(var/obj/machinery/light/L in area) - if(!initial(L.no_emergency)) //If there was an override set on creation, keep that override - L.no_emergency = emergency_lights - INVOKE_ASYNC(L, TYPE_PROC_REF(/obj/machinery/light, update), FALSE) - CHECK_TICK - return 1 - -/obj/machinery/power/apc/proc/toggle_breaker(mob/user) - if(!is_operational() || failure_timer) - return - operating = !operating - add_hiddenprint(user) - log_game("[key_name(user)] turned [operating ? "on" : "off"] the [src] in [AREACOORD(src)]") - update() - update_icon() - -/obj/machinery/power/apc/proc/malfhack(mob/living/silicon/ai/malf) - if(!istype(malf)) - return - if(get_malf_status(malf) != 1) - return - if(malf.malfhacking) - to_chat(malf, "I are already hacking an APC!") - return - to_chat(malf, "Beginning override of APC systems. This takes some time, and you cannot perform other actions during the process.") - malf.malfhack = src - malf.malfhacking = addtimer(CALLBACK(malf, TYPE_PROC_REF(/mob/living/silicon/ai, malfhacked), src), 600, TIMER_STOPPABLE) - - var/atom/movable/screen/alert/hackingapc/A - A = malf.throw_alert("hackingapc", /atom/movable/screen/alert/hackingapc) - A.target = src - -/obj/machinery/power/apc/proc/malfoccupy(mob/living/silicon/ai/malf) - if(!istype(malf)) - return - if(istype(malf.loc, /obj/machinery/power/apc)) // Already in an APC - to_chat(malf, "I must evacuate my current APC first!") - return - if(!malf.can_shunt) - to_chat(malf, "I cannot shunt!") - return - if(!is_station_level(z)) - return - occupier = new /mob/living/silicon/ai(src, malf.laws, malf) //DEAR GOD WHY? //IKR???? - occupier.adjustOxyLoss(malf.getOxyLoss()) - if(!findtext(occupier.name, "APC Copy")) - occupier.name = "[malf.name] APC Copy" - if(malf.parent) - occupier.parent = malf.parent - else - occupier.parent = malf - malf.shunted = 1 - occupier.eyeobj.name = "[occupier.name] (AI Eye)" - if(malf.parent) - qdel(malf) - occupier.verbs += /mob/living/silicon/ai/proc/corereturn - occupier.cancel_camera() - - -/obj/machinery/power/apc/proc/malfvacate(forced) - if(!occupier) - return - if(occupier.parent && occupier.parent.stat != DEAD) - occupier.mind.transfer_to(occupier.parent) - occupier.parent.shunted = 0 - occupier.parent.setOxyLoss(occupier.getOxyLoss()) - occupier.parent.cancel_camera() - occupier.parent.verbs -= /mob/living/silicon/ai/proc/corereturn - qdel(occupier) - else - to_chat(occupier, "Primary core damaged, unable to return core processes.") - if(forced) - occupier.forceMove(drop_location()) - occupier.death() - occupier.gib() - for(var/obj/item/pinpointer/nuke/P in GLOB.pinpointer_list) - P.switch_mode_to(TRACK_NUKE_DISK) //Pinpointers go back to tracking the nuke disk - P.alert = FALSE - -/obj/machinery/power/apc/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card) - if(card.AI) - to_chat(user, "[card] is already occupied!") - return - if(!occupier) - to_chat(user, "There's nothing in [src] to transfer!") - return - if(!occupier.mind || !occupier.client) - to_chat(user, "[occupier] is either inactive or destroyed!") - return - if(!occupier.parent.stat) - to_chat(user, "[occupier] is refusing all attempts at transfer!" ) - return - if(transfer_in_progress) - to_chat(user, "There's already a transfer in progress!") - return - if(interaction != AI_TRANS_TO_CARD || occupier.stat) - return - var/turf/T = get_turf(user) - if(!T) - return - transfer_in_progress = TRUE - user.visible_message("[user] slots [card] into [src]...", "Transfer process initiated. Sending request for AI approval...") - playsound(src, 'sound/blank.ogg', 50, TRUE) - SEND_SOUND(occupier, sound('sound/misc/thiefobj.ogg')) //To alert the AI that someone's trying to card them if they're tabbed out - if(alert(occupier, "[user] is attempting to transfer you to \a [card.name]. Do you consent to this?", "APC Transfer", "Yes - Transfer Me", "No - Keep Me Here") == "No - Keep Me Here") - to_chat(user, "AI denied transfer request. Process terminated.") - playsound(src, 'sound/blank.ogg', 50, TRUE) - transfer_in_progress = FALSE - return - if(user.loc != T) - to_chat(user, "Location changed. Process terminated.") - to_chat(occupier, "[user] moved away! Transfer canceled.") - transfer_in_progress = FALSE - return - to_chat(user, "AI accepted request. Transferring stored intelligence to [card]...") - to_chat(occupier, "Transfer starting. You will be moved to [card] shortly.") - if(!do_after(user, 50, target = src)) - to_chat(occupier, "[user] was interrupted! Transfer canceled.") - transfer_in_progress = FALSE - return - if(!occupier || !card) - transfer_in_progress = FALSE - return - user.visible_message("[user] transfers [occupier] to [card]!", "Transfer complete! [occupier] is now stored in [card].") - to_chat(occupier, "Transfer complete! You've been stored in [user]'s [card.name].") - occupier.forceMove(card) - card.AI = occupier - occupier.parent.shunted = FALSE - occupier.cancel_camera() - occupier = null - transfer_in_progress = FALSE - return - -/obj/machinery/power/apc/surplus() - if(terminal) - return terminal.surplus() - else - return 0 - -/obj/machinery/power/apc/add_load(amount) - if(terminal && terminal.powernet) - terminal.add_load(amount) - -/obj/machinery/power/apc/avail(amount) - if(terminal) - return terminal.avail(amount) - else - return 0 - -/obj/machinery/power/apc/process() - if(icon_update_needed) - update_icon() - if(stat & (BROKEN|MAINT)) - return - if(!area.requires_power) - return - if(failure_timer) - update() - queue_icon_update() - failure_timer-- - force_update = 1 - return - - lastused_light = area.usage(STATIC_LIGHT) - lastused_light += area.usage(LIGHT) - lastused_equip = area.usage(EQUIP) - lastused_equip += area.usage(STATIC_EQUIP) - lastused_environ = area.usage(ENVIRON) - lastused_environ += area.usage(STATIC_ENVIRON) - area.clear_usage() - - lastused_total = lastused_light + lastused_equip + lastused_environ - - //store states to update icon if any change - var/last_lt = lighting - var/last_eq = equipment - var/last_en = environ - var/last_ch = charging - - var/excess = surplus() - - if(!src.avail()) - main_status = 0 - else if(excess < 0) - main_status = 1 - else - main_status = 2 - - if(cell && !shorted) - // draw power from cell as before to power the area - var/cellused = min(cell.charge, GLOB.CELLRATE * lastused_total) // clamp deduction to a max, amount left in cell - cell.use(cellused) - - if(excess > lastused_total) // if power excess recharge the cell - // by the same amount just used - cell.give(cellused) - add_load(cellused/GLOB.CELLRATE) // add the load used to recharge the cell - - - else // no excess, and not enough per-apc - if((cell.charge/GLOB.CELLRATE + excess) >= lastused_total) // can we draw enough from cell+grid to cover last usage? - cell.charge = min(cell.maxcharge, cell.charge + GLOB.CELLRATE * excess) //recharge with what we can - add_load(excess) // so draw what we can from the grid - charging = APC_NOT_CHARGING - - else // not enough power available to run the last tick! - charging = APC_NOT_CHARGING - chargecount = 0 - // This turns everything off in the case that there is still a charge left on the battery, just not enough to run the room. - equipment = autoset(equipment, 0) - lighting = autoset(lighting, 0) - environ = autoset(environ, 0) - - - // set channels depending on how much charge we have left - - // Allow the APC to operate as normal if the cell can charge - if(charging && longtermpower < 10) - longtermpower += 1 - else if(longtermpower > -10) - longtermpower -= 2 - - if(cell.charge <= 0) // zero charge, turn all off - equipment = autoset(equipment, 0) - lighting = autoset(lighting, 0) - environ = autoset(environ, 0) - area.poweralert(0, src) - else if(cell.percent() < 15 && longtermpower < 0) // <15%, turn off lighting & equipment - equipment = autoset(equipment, 2) - lighting = autoset(lighting, 2) - environ = autoset(environ, 1) - area.poweralert(0, src) - else if(cell.percent() < 30 && longtermpower < 0) // <30%, turn off equipment - equipment = autoset(equipment, 2) - lighting = autoset(lighting, 1) - environ = autoset(environ, 1) - area.poweralert(0, src) - else // otherwise all can be on - equipment = autoset(equipment, 1) - lighting = autoset(lighting, 1) - environ = autoset(environ, 1) - area.poweralert(1, src) - if(cell.percent() > 75) - area.poweralert(1, src) - - // now trickle-charge the cell - if(chargemode && charging == APC_CHARGING && operating) - if(excess > 0) // check to make sure we have enough to charge - // Max charge is capped to % per second constant - var/ch = min(excess*GLOB.CELLRATE, cell.maxcharge*GLOB.CHARGELEVEL) - add_load(ch/GLOB.CELLRATE) // Removes the power we're taking from the grid - cell.give(ch) // actually recharge the cell - - else - charging = APC_NOT_CHARGING // stop charging - chargecount = 0 - - // show cell as fully charged if so - if(cell.charge >= cell.maxcharge) - cell.charge = cell.maxcharge - charging = APC_FULLY_CHARGED - - if(chargemode) - if(!charging) - if(excess > cell.maxcharge*GLOB.CHARGELEVEL) - chargecount++ - else - chargecount = 0 - - if(chargecount == 10) - - chargecount = 0 - charging = APC_CHARGING - - else // chargemode off - charging = 0 - chargecount = 0 - - else // no cell, switch everything off - - charging = APC_NOT_CHARGING - chargecount = 0 - equipment = autoset(equipment, 0) - lighting = autoset(lighting, 0) - environ = autoset(environ, 0) - area.poweralert(0, src) - - // update icon & area power if anything changed - - if(last_lt != lighting || last_eq != equipment || last_en != environ || force_update) - force_update = 0 - queue_icon_update() - update() - else if (last_ch != charging) - queue_icon_update() - -// val 0=off, 1=off(auto) 2=on 3=on(auto) -// on 0=off, 1=on, 2=autooff - -/obj/machinery/power/apc/proc/autoset(val, on) - if(on==0) - if(val==2) // if on, return off - return 0 - else if(val==3) // if auto-on, return auto-off - return 1 - else if(on==1) - if(val==1) // if auto-off, return auto-on - return 3 - else if(on==2) - if(val==3) // if auto-on, return auto-off - return 1 - return val - -/obj/machinery/power/apc/proc/reset(wire) - switch(wire) - if(WIRE_IDSCAN) - locked = TRUE - if(WIRE_POWER1, WIRE_POWER2) - if(!wires.is_cut(WIRE_POWER1) && !wires.is_cut(WIRE_POWER2)) - shorted = FALSE - if(WIRE_AI) - if(!wires.is_cut(WIRE_AI)) - aidisabled = FALSE - if(APC_RESET_EMP) - equipment = 3 - environ = 3 - update_icon() - update() - -// damage and destruction acts -/obj/machinery/power/apc/emp_act(severity) - . = ..() - if (!(. & EMP_PROTECT_CONTENTS)) - if(cell) - cell.emp_act(severity) - if(occupier) - occupier.emp_act(severity) - if(. & EMP_PROTECT_SELF) - return - lighting = 0 - equipment = 0 - environ = 0 - update_icon() - update() - addtimer(CALLBACK(src, PROC_REF(reset), APC_RESET_EMP), 600) - -/obj/machinery/power/apc/blob_act(obj/structure/blob/B) - set_broken() - -/obj/machinery/power/apc/disconnect_terminal() - if(terminal) - terminal.master = null - terminal = null - -/obj/machinery/power/apc/proc/set_broken() - if(malfai && operating) - malfai.malf_picker.processing_time = CLAMP(malfai.malf_picker.processing_time - 10,0,1000) - operating = FALSE - obj_break() - if(occupier) - malfvacate(1) - update() - -// overload all the lights in this APC area - -/obj/machinery/power/apc/proc/overload_lighting() - if(/* !get_connection() || */ !operating || shorted) - return - if( cell && cell.charge>=20) - cell.use(20) - INVOKE_ASYNC(src, PROC_REF(break_lights)) - -/obj/machinery/power/apc/proc/break_lights() - for(var/obj/machinery/light/L in area) - L.on = TRUE - L.break_light_tube() - L.on = FALSE - stoplag() - -/obj/machinery/power/apc/proc/shock(mob/user, prb) - if(!prob(prb)) - return 0 - do_sparks(5, TRUE, src) - if(isalien(user)) - return 0 - if(electrocute_mob(user, src, src, 1, TRUE)) - return 1 - else - return 0 - -/obj/machinery/power/apc/proc/setsubsystem(val) - if(cell && cell.charge > 0) - return (val==1) ? 0 : val - else if(val == 3) - return 1 - else - return 0 - - -/obj/machinery/power/apc/proc/energy_fail(duration) - for(var/obj/machinery/M in area.contents) - if(M.critical_machine) - return - for(var/A in GLOB.ai_list) - var/mob/living/silicon/ai/I = A - if(get_area(I) == area) - return - - failure_timer = max(failure_timer, round(duration)) - -/obj/machinery/power/apc/proc/set_nightshift(on) - set waitfor = FALSE - nightshift_lights = on - for(var/obj/machinery/light/L in area) - if(L.nightshift_allowed) - L.nightshift_enabled = nightshift_lights - L.update(FALSE) - CHECK_TICK - -#undef UPSTATE_CELL_IN -#undef UPSTATE_OPENED1 -#undef UPSTATE_OPENED2 -#undef UPSTATE_MAINT -#undef UPSTATE_BROKE -#undef UPSTATE_BLUESCREEN -#undef UPSTATE_WIREEXP -#undef UPSTATE_ALLGOOD - -#undef APC_RESET_EMP - -#undef APC_ELECTRONICS_MISSING -#undef APC_ELECTRONICS_INSTALLED -#undef APC_ELECTRONICS_SECURED - -#undef APC_COVER_CLOSED -#undef APC_COVER_OPENED -#undef APC_COVER_REMOVED - -#undef APC_NOT_CHARGING -#undef APC_CHARGING -#undef APC_FULLY_CHARGED - -//update_overlay -#undef APC_UPOVERLAY_CHARGEING0 -#undef APC_UPOVERLAY_CHARGEING1 -#undef APC_UPOVERLAY_CHARGEING2 -#undef APC_UPOVERLAY_EQUIPMENT0 -#undef APC_UPOVERLAY_EQUIPMENT1 -#undef APC_UPOVERLAY_EQUIPMENT2 -#undef APC_UPOVERLAY_LIGHTING0 -#undef APC_UPOVERLAY_LIGHTING1 -#undef APC_UPOVERLAY_LIGHTING2 -#undef APC_UPOVERLAY_ENVIRON0 -#undef APC_UPOVERLAY_ENVIRON1 -#undef APC_UPOVERLAY_ENVIRON2 -#undef APC_UPOVERLAY_LOCKED -#undef APC_UPOVERLAY_OPERATING - -/*Power module, used for APC construction*/ -/obj/item/electronics/apc - name = "power control module" - icon_state = "power_mod" - custom_price = 5 - desc = "" diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm deleted file mode 100644 index 3557ffa2e4..0000000000 --- a/code/modules/power/cable.dm +++ /dev/null @@ -1,585 +0,0 @@ -//Use this only for things that aren't a subtype of obj/machinery/power -//For things that are, override "should_have_node()" on them -GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/grille, /obj/structure/cable_bridge))) - -#define UNDER_SMES -1 -#define UNDER_TERMINAL 1 - -/////////////////////////////// -//CABLE STRUCTURE -/////////////////////////////// -//////////////////////////////// -// Definitions -//////////////////////////////// -/obj/structure/cable - name = "power cable" - desc = "" - icon = 'icons/obj/power_cond/layer_cable.dmi' - icon_state = "l2-1-2-4-8-node" - color = "yellow" - level = 1 //is underfloor - layer = WIRE_LAYER //Above hidden pipes, GAS_PIPE_HIDDEN_LAYER - anchored = TRUE - obj_flags = CAN_BE_HIT | ON_BLUEPRINTS - var/linked_dirs = 0 //bitflag - var/node = FALSE //used for sprites display - var/cable_layer = CABLE_LAYER_2 - var/datum/powernet/powernet - -/obj/structure/cable/layer1 - color = "red" - cable_layer = CABLE_LAYER_1 - layer = WIRE_LAYER - 0.01 - icon_state = "l1-1-2-4-8-node" - -/obj/structure/cable/layer3 - color = "blue" - cable_layer = CABLE_LAYER_3 - layer = WIRE_LAYER + 0.01 - icon_state = "l3-1-2-4-8-node" - -/obj/structure/cable/Initialize(mapload) - . = ..() - - var/turf/T = get_turf(src) // hide if turf is not intact - if(level==1) - hide(T.intact) - GLOB.cable_list += src //add it to the global cable list - connect_wire() - -/obj/structure/cable/proc/connect_wire(clear_before_updating = FALSE) - var/under_thing = NONE - if(clear_before_updating) - linked_dirs = 0 - var/obj/machinery/power/search_parent - for(var/obj/machinery/power/P in loc) - if(istype(P, /obj/machinery/power/terminal)) - under_thing = UNDER_TERMINAL - search_parent = P - break - if(istype(P, /obj/machinery/power/smes)) - under_thing = UNDER_SMES - search_parent = P - break - for(var/check_dir in GLOB.cardinals) - var/TB = get_step(src, check_dir) - //don't link from smes to its terminal - if(under_thing) - switch(under_thing) - if(UNDER_SMES) - var/obj/machinery/power/terminal/term = locate(/obj/machinery/power/terminal) in TB - //Why null or equal to the search parent? - //during map init it's possible for a placed smes terminal to not have initialized to the smes yet - //but the cable underneath it is ready to link. - //I don't believe null is even a valid state for a smes terminal while the game is actually running - //So in the rare case that this happens, we also shouldn't connect - //This might break. - if(term && (!term.master || term.master == search_parent)) - continue - if(UNDER_TERMINAL) - var/obj/machinery/power/smes/S = locate(/obj/machinery/power/smes) in TB - if(S && (!S.terminal || S.terminal == search_parent)) - continue - var/inverse = turn(check_dir, 180) - for(var/obj/structure/cable/C in TB) - if(C.cable_layer == cable_layer) - linked_dirs |= check_dir - C.linked_dirs |= inverse - C.update_icon() - - update_icon() - -/obj/structure/cable/Destroy() // called when a cable is deleted - //Clear the linked indicator bitflags - for(var/check_dir in GLOB.cardinals) - var/inverse = turn(check_dir, 180) - if(linked_dirs & check_dir) - var/TB = get_step(loc, check_dir) - for(var/obj/structure/cable/C in TB) - if(cable_layer == C.cable_layer) - C.linked_dirs &= ~inverse - C.update_icon() - - if(powernet) - cut_cable_from_powernet() // update the powernets - GLOB.cable_list -= src //remove it from global cable list - - return ..() // then go ahead and delete the cable - -/obj/structure/cable/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/cable_coil(get_turf(loc), 1) - qdel(src) - -/////////////////////////////////// -// General procedures -/////////////////////////////////// - -//If underfloor, hide the cable -/obj/structure/cable/hide(i) - if(level == 1 && isturf(loc)) - invisibility = i ? INVISIBILITY_MAXIMUM : 0 - update_icon() - -/obj/structure/cable/update_icon() - if(!linked_dirs) - icon_state = "[cable_layer]-noconnection" - else - var/list/dir_icon_list = list() - for(var/check_dir in GLOB.cardinals) - if(linked_dirs & check_dir) - dir_icon_list += "[check_dir]" - var/dir_string = dir_icon_list.Join("-") - if(dir_icon_list.len > 1) - for(var/obj/O in loc) - if(GLOB.wire_node_generating_types[O.type]) - dir_string = "[dir_string]-node" - break - else if(istype(O, /obj/machinery/power)) - var/obj/machinery/power/P = O - if(P.should_have_node()) - dir_string = "[dir_string]-node" - break - dir_string = "[cable_layer]-[dir_string]" - icon_state = dir_string - - -/obj/structure/cable/proc/handlecable(obj/item/W, mob/user, params) - var/turf/T = get_turf(src) - if(T.intact) - return - if(W.tool_behaviour == TOOL_WIRECUTTER) - if (shock(user, 50)) - return - user.visible_message("[user] cuts the cable.", "I cut the cable.") - investigate_log("was cut by [key_name(usr)] in [AREACOORD(src)]", INVESTIGATE_WIRES) - deconstruct() - return - - else if(W.tool_behaviour == TOOL_MULTITOOL) - if(powernet && (powernet.avail > 0)) // is it powered? - to_chat(user, "Total power: [DisplayPower(powernet.avail)]\nLoad: [DisplayPower(powernet.load)]\nExcess power: [DisplayPower(surplus())]") - else - to_chat(user, "The cable is not powered.") - shock(user, 5, 0.2) - - add_fingerprint(user) - -// Items usable on a cable : -// - Wirecutters : cut it duh ! -// - Multitool : get the power currently passing through the cable -// -/obj/structure/cable/attackby(obj/item/W, mob/user, params) - handlecable(W, user, params) - - -// shock the user with probability prb -/obj/structure/cable/proc/shock(mob/user, prb, siemens_coeff = 1) - if(!prob(prb)) - return FALSE - if(electrocute_mob(user, powernet, src, siemens_coeff)) - do_sparks(5, TRUE, src) - return TRUE - else - return FALSE - -/obj/structure/cable/singularity_pull(S, current_size) - ..() - if(current_size >= STAGE_FIVE) - deconstruct() - -//////////////////////////////////////////// -// Power related -/////////////////////////////////////////// - -// All power generation handled in add_avail() -// Machines should use add_load(), surplus(), avail() -// Non-machines should use add_delayedload(), delayed_surplus(), newavail() - -/obj/structure/cable/proc/add_avail(amount) - if(powernet) - powernet.newavail += amount - -/obj/structure/cable/proc/add_load(amount) - if(powernet) - powernet.load += amount - -/obj/structure/cable/proc/surplus() - if(powernet) - return CLAMP(powernet.avail-powernet.load, 0, powernet.avail) - else - return 0 - -/obj/structure/cable/proc/avail(amount) - if(powernet) - return amount ? powernet.avail >= amount : powernet.avail - else - return 0 - -/obj/structure/cable/proc/add_delayedload(amount) - if(powernet) - powernet.delayedload += amount - -/obj/structure/cable/proc/delayed_surplus() - if(powernet) - return CLAMP(powernet.newavail - powernet.delayedload, 0, powernet.newavail) - else - return 0 - -/obj/structure/cable/proc/newavail() - if(powernet) - return powernet.newavail - else - return 0 - -///////////////////////////////////////////////// -// Cable laying helpers -//////////////////////////////////////////////// - -// merge with the powernets of power objects in the given direction -/obj/structure/cable/proc/mergeConnectedNetworks(direction) - - var/inverse_dir = (!direction)? 0 : turn(direction, 180) //flip the direction, to match with the source position on its turf - - var/turf/TB = get_step(src, direction) - - for(var/obj/structure/cable/C in TB) - if(!C) - continue - - if(src == C) - continue - - if(cable_layer != C.cable_layer) - continue - - if(C.linked_dirs & inverse_dir) //we've got a matching cable in the neighbor turf - if(!C.powernet) //if the matching cable somehow got no powernet, make him one (should not happen for cables) - var/datum/powernet/newPN = new() - newPN.add_cable(C) - - if(powernet) //if we already have a powernet, then merge the two powernets - merge_powernets(powernet, C.powernet) - else - C.powernet.add_cable(src) //else, we simply connect to the matching cable powernet - -// merge with the powernets of power objects in the source turf -/obj/structure/cable/proc/mergeConnectedNetworksOnTurf() - var/list/to_connect = list() - node = FALSE - - if(!powernet) //if we somehow have no powernet, make one (should not happen for cables) - var/datum/powernet/newPN = new() - newPN.add_cable(src) - - //first let's add turf cables to our powernet - //then we'll connect machines on turf where a cable is present - for(var/atom/movable/AM in loc) - if(istype(AM, /obj/machinery/power/apc)) - var/obj/machinery/power/apc/N = AM - if(!N.terminal) - continue // APC are connected through their terminal - - if(N.terminal.powernet == powernet) //already connected - continue - - to_connect += N.terminal //we'll connect the machines after all cables are merged - - else if(istype(AM, /obj/machinery/power)) //other power machines - var/obj/machinery/power/M = AM - - if(M.powernet == powernet) - continue - - to_connect += M //we'll connect the machines after all cables are merged - - //now that cables are done, let's connect found machines - for(var/obj/machinery/power/PM in to_connect) - node = TRUE - if(!PM.connect_to_network()) - PM.disconnect_from_network() //if we somehow can't connect the machine to the new powernet, remove it from the old nonetheless - -////////////////////////////////////////////// -// Powernets handling helpers -////////////////////////////////////////////// - -/obj/structure/cable/proc/get_cable_connections(powernetless_only) - . = list() - var/turf/T = get_turf(src) - if(locate(/obj/structure/cable_bridge) in T) - for(var/obj/structure/cable/C in T) - if(C != src) - . += C - for(var/check_dir in GLOB.cardinals) - if(linked_dirs & check_dir) - T = get_step(src, check_dir) - for(var/obj/structure/cable/C in T) - if(cable_layer == C.cable_layer) - . += C - -/obj/structure/cable/proc/get_machine_connections(powernetless_only) - . = list() - for(var/obj/machinery/power/P in get_turf(src)) - if(!powernetless_only || !P.powernet) - if(P.anchored) - . += P - -/obj/structure/cable/proc/auto_propogate_cut_cable(obj/O) - if(O && !QDELETED(O)) - var/datum/powernet/newPN = new()// creates a new powernet... - propagate_network(O, newPN)//... and propagates it to the other side of the cable - -//Makes a new network for the cable and propgates it. -//If it finds another network in the process, aborts and uses that one and propogates off of it instead -/obj/structure/cable/proc/propogate_if_no_network() - if(powernet) - return - var/datum/powernet/newPN = new() - propagate_network(src, newPN, TRUE) - -// cut the cable's powernet at this cable and updates the powergrid -/obj/structure/cable/proc/cut_cable_from_powernet(remove = TRUE) - if(!powernet) - return - - var/turf/T1 = loc - if(!T1) - return - - //clear the powernet of any machines on tile first - for(var/obj/machinery/power/P in T1) - P.disconnect_from_network() - - var/list/P_list = list() - for(var/dir_check in GLOB.cardinals) - if(linked_dirs & dir_check) - T1 = get_step(loc, dir_check) - P_list += locate(/obj/structure/cable) in T1 - - // remove the cut cable from its turf and powernet, so that it doesn't get count in propagate_network worklist - if(remove) - moveToNullspace() - powernet.remove_cable(src) //remove the cut cable from its powernet - - var/first = TRUE - for(var/obj/O in P_list) - if(first) - first = FALSE - continue - addtimer(CALLBACK(O, PROC_REF(auto_propogate_cut_cable), O), 0) //so we don't rebuild the network X times when singulo/explosion destroys a line of X cables - -/////////////////////////////////////////////// -// The cable coil object, used for laying cable -/////////////////////////////////////////////// - -//////////////////////////////// -// Definitions -//////////////////////////////// - -GLOBAL_LIST_INIT(cable_coil_recipes, list(new/datum/stack_recipe("cable restraints", /obj/item/restraints/handcuffs/cable, 15), - new/datum/stack_recipe("cable bridge", /obj/structure/cable_bridge, 15))) - -/obj/item/stack/cable_coil - name = "cable coil" - custom_price = 30 - gender = NEUTER //That's a cable coil sounds better than that's some cable coils - icon = 'icons/obj/power.dmi' - icon_state = "coil" - item_state = "coil" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - max_amount = MAXCOIL - amount = MAXCOIL - merge_type = /obj/item/stack/cable_coil // This is here to let its children merge between themselves - color = "yellow" - var/cable_color = "yellow" - desc = "" - throwforce = 0 - w_class = WEIGHT_CLASS_SMALL - throw_speed = 3 - throw_range = 5 - custom_materials = list(/datum/material/iron=10, /datum/material/glass=5) - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT - attack_verb = list("whipped", "lashed", "disciplined", "flogged") - singular_name = "cable piece" - full_w_class = WEIGHT_CLASS_SMALL - grind_results = list(/datum/reagent/copper = 2) //2 copper per cable in the coil - usesound = 'sound/blank.ogg' - var/obj/structure/cable/target_type = /obj/structure/cable - -/obj/item/stack/cable_coil/Initialize(mapload, new_amount = null) - . = ..() - pixel_x = rand(-2,2) - pixel_y = rand(-2,2) - update_icon() - recipes = GLOB.cable_coil_recipes - -/obj/item/stack/cable_coil/examine(mob/user) - . = ..() - . += "Ctrl+Click to change the layer you are placing on." - -/obj/item/stack/cable_coil/suicide_act(mob/user) - if(locate(/obj/structure/chair/stool) in get_turf(user)) - user.visible_message("[user] is making a noose with [src]! It looks like [user.p_theyre()] trying to commit suicide!") - else - user.visible_message("[user] is strangling [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return(OXYLOSS) - -/obj/item/stack/cable_coil/proc/check_menu(mob/living/user) - if(!istype(user)) - return FALSE - if(user.incapacitated() || !user.Adjacent(src)) - return FALSE - return TRUE - -/obj/item/stack/cable_coil/CtrlClick(mob/living/user) - if(!user) - return - var/list/layer_list = list( - "Layer 1" = image(icon = 'icons/mob/radial.dmi', icon_state = "coil-red"), - "Layer 2" = image(icon = 'icons/mob/radial.dmi', icon_state = "coil-yellow"), - "Layer 3" = image(icon = 'icons/mob/radial.dmi', icon_state = "coil-blue") - ) - var/layer_result = show_radial_menu(user, src, layer_list, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE) - if(!check_menu(user)) - return - switch(layer_result) - if("Layer 1") - color = "red" - target_type = /obj/structure/cable/layer1 - if("Layer 2") - color = "yellow" - target_type = /obj/structure/cable - if("Layer 3") - color = "blue" - target_type = /obj/structure/cable/layer3 - - -/////////////////////////////////// -// General procedures -/////////////////////////////////// -//you can use wires to heal robotics -/obj/item/stack/cable_coil/attack(mob/living/carbon/human/H, mob/user) - if(!istype(H)) - return ..() - - var/obj/item/bodypart/affecting = H.get_bodypart(check_zone(user.zone_selected)) - if(affecting && affecting.status == BODYPART_ROBOTIC) - if(user == H) - user.visible_message("[user] starts to fix some of the wires in [H]'s [affecting.name].", "I start fixing some of the wires in [H == user ? "your" : "[H]'s"] [affecting.name].") - if(!do_mob(user, H, 50)) - return - if(item_heal_robotic(H, user, 0, 15)) - use(1) - return - else - return ..() - - -/obj/item/stack/cable_coil/update_icon() - icon_state = "[initial(item_state)][amount < 3 ? amount : ""]" - name = "cable [amount < 3 ? "piece" : "coil"]" - -//add cables to the stack -/obj/item/stack/cable_coil/proc/give(extra) - if(amount + extra > max_amount) - amount = max_amount - else - amount += extra - update_icon() - - -/////////////////////////////////////////////// -// Cable laying procedures -////////////////////////////////////////////// - -// called when cable_coil is clicked on a turf -/obj/item/stack/cable_coil/proc/place_turf(turf/T, mob/user, dirnew) - if(!isturf(user.loc)) - return - - if(!isturf(T) || T.intact || !T.can_have_cabling()) - to_chat(user, "I can only lay cables on catwalks and plating!") - return - - if(get_amount() < 1) // Out of cable - to_chat(user, "There is no cable left!") - return - - if(get_dist(T,user) > 1) // Too far - to_chat(user, "I can't lay cable at a place that far away!") - return - - for(var/obj/structure/cable/C in T) - if(target_type == C.type) - to_chat(user, "There's already a cable at that position!") - return - - var/obj/structure/cable/C = new target_type(T) - - //create a new powernet with the cable, if needed it will be merged later - var/datum/powernet/PN = new() - PN.add_cable(C) - - for(var/dir_check in GLOB.cardinals) - C.mergeConnectedNetworks(dir_check) //merge the powernet with adjacents powernets - C.mergeConnectedNetworksOnTurf() //merge the powernet with on turf powernets - - use(1) - - if(C.shock(user, 50)) - if(prob(50)) //fail - new /obj/item/stack/cable_coil(get_turf(C), 1) - C.deconstruct() - - return C - -/obj/item/stack/cable_coil/five - amount = 5 - -/obj/item/stack/cable_coil/cut - amount = null - icon_state = "coil2" - -/obj/item/stack/cable_coil/cut/Initialize(mapload) - . = ..() - if(!amount) - amount = rand(1,2) - pixel_x = rand(-2,2) - pixel_y = rand(-2,2) - update_icon() - -/obj/item/stack/cable_coil/cyborg - is_cyborg = 1 - custom_materials = list() - cost = 1 - -/obj/structure/cable_bridge - name = "cable bridge" - desc = "" - icon = 'icons/obj/power.dmi' - icon_state = "cable_bridge" - level = 1 //is underfloor - layer = WIRE_LAYER + 0.02 //Above all the cables but below terminals - anchored = TRUE - obj_flags = CAN_BE_HIT | ON_BLUEPRINTS - -/obj/structure/cable_bridge/Initialize() - . = ..() - var/first = TRUE - var/datum/powernet/PN - for(var/obj/structure/cable/C in get_turf(src)) - C.update_icon() - if(first == TRUE) - first = FALSE - PN = C.powernet - continue - propagate_network(C, PN) - -/obj/structure/cable_bridge/wirecutter_act(mob/living/user, obj/item/I) - . = ..() - qdel(src) - -#undef UNDER_SMES -#undef UNDER_TERMINAL diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm deleted file mode 100644 index 422b79f011..0000000000 --- a/code/modules/power/cell.dm +++ /dev/null @@ -1,360 +0,0 @@ -/obj/item/stock_parts/cell - name = "power cell" - desc = "" - icon = 'icons/obj/power.dmi' - icon_state = "cell" - item_state = "cell" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - force = 5 - throwforce = 5 - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - var/charge = 0 // note %age conveted to actual charge in New - var/maxcharge = 1000 - custom_materials = list(/datum/material/iron=700, /datum/material/glass=50) - grind_results = list(/datum/reagent/lithium = 15, /datum/reagent/iron = 5, /datum/reagent/silicon = 5) - var/rigged = FALSE // true if rigged to explode - var/chargerate = 100 //how much power is given every tick in a recharger - var/self_recharge = 0 //does it self recharge, over time, or not? - var/ratingdesc = TRUE - var/grown_battery = FALSE // If it's a grown that acts as a battery, add a wire overlay to it. - -/obj/item/stock_parts/cell/get_cell() - return src - -/obj/item/stock_parts/cell/Initialize(mapload, override_maxcharge) - . = ..() - START_PROCESSING(SSobj, src) - create_reagents(5, INJECTABLE | DRAINABLE) - if (override_maxcharge) - maxcharge = override_maxcharge - charge = maxcharge - if(ratingdesc) - desc += " This one has a rating of [DisplayEnergy(maxcharge)], and you should not swallow it." - update_icon() - -/obj/item/stock_parts/cell/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/stock_parts/cell/vv_edit_var(var_name, var_value) - switch(var_name) - if("self_recharge") - if(var_value) - START_PROCESSING(SSobj, src) - else - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/stock_parts/cell/process() - if(self_recharge) - give(chargerate * 0.25) - else - return PROCESS_KILL - -/obj/item/stock_parts/cell/update_icon() - cut_overlays() - if(grown_battery) - add_overlay(image('icons/obj/power.dmi',"grown_wires")) - if(charge < 0.01) - return - else if(charge/maxcharge >=0.995) - add_overlay("cell-o2") - else - add_overlay("cell-o1") - -/obj/item/stock_parts/cell/proc/percent() // return % charge of cell - return 100*charge/maxcharge - -// use power from a cell -/obj/item/stock_parts/cell/use(amount) - if(rigged && amount > 0) - explode() - return 0 - if(charge < amount) - return 0 - charge = (charge - amount) - if(!istype(loc, /obj/machinery/power/apc)) - SSblackbox.record_feedback("tally", "cell_used", 1, type) - return 1 - -// recharge the cell -/obj/item/stock_parts/cell/proc/give(amount) - if(rigged && amount > 0) - explode() - return 0 - if(maxcharge < amount) - amount = maxcharge - var/power_used = min(maxcharge-charge,amount) - charge += power_used - return power_used - -/obj/item/stock_parts/cell/examine(mob/user) - . = ..() - if(rigged) - . += "This power cell seems to be faulty!" - else - . += "The charge meter reads [round(src.percent() )]%." - -/obj/item/stock_parts/cell/suicide_act(mob/user) - user.visible_message("[user] is licking the electrodes of [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return (FIRELOSS) - -/obj/item/stock_parts/cell/on_reagent_change(changetype) - rigged = !isnull(reagents.has_reagent(/datum/reagent/toxin/plasma, 5)) //has_reagent returns the reagent datum - ..() - - -/obj/item/stock_parts/cell/proc/explode() - var/turf/T = get_turf(src.loc) - if (charge==0) - return - var/devastation_range = -1 //round(charge/11000) - var/heavy_impact_range = round(sqrt(charge)/60) - var/light_impact_range = round(sqrt(charge)/30) - var/flash_range = light_impact_range - if (light_impact_range==0) - rigged = FALSE - corrupt() - return - //explosion(T, 0, 1, 2, 2) - explosion(T, devastation_range, heavy_impact_range, light_impact_range, flash_range) - qdel(src) - -/obj/item/stock_parts/cell/proc/corrupt() - charge /= 2 - maxcharge = max(maxcharge/2, chargerate) - if (prob(10)) - rigged = TRUE //broken batterys are dangerous - -/obj/item/stock_parts/cell/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - charge -= 1000 / severity - if (charge < 0) - charge = 0 - -/obj/item/stock_parts/cell/ex_act(severity, target) - ..() - if(!QDELETED(src)) - switch(severity) - if(2) - if(prob(50)) - corrupt() - if(3) - if(prob(25)) - corrupt() - - -/obj/item/stock_parts/cell/blob_act(obj/structure/blob/B) - ex_act(EXPLODE_DEVASTATE) - -/obj/item/stock_parts/cell/proc/get_electrocute_damage() - if(charge >= 1000) - return CLAMP(20 + round(charge/25000), 20, 195) + rand(-5,5) - else - return 0 - -/obj/item/stock_parts/cell/get_part_rating() - return rating * maxcharge - -/* Cell variants*/ -/obj/item/stock_parts/cell/empty/Initialize() - . = ..() - charge = 0 - -/obj/item/stock_parts/cell/crap - name = "\improper Nanotrasen brand rechargeable AA battery" - desc = "" //TOTALLY TRADEMARK INFRINGEMENT - maxcharge = 500 - custom_materials = list(/datum/material/glass=40) - -/obj/item/stock_parts/cell/crap/empty/Initialize() - . = ..() - charge = 0 - update_icon() - -/obj/item/stock_parts/cell/upgraded - name = "upgraded power cell" - desc = "" - maxcharge = 2500 - custom_materials = list(/datum/material/glass=50) - chargerate = 1000 - -/obj/item/stock_parts/cell/upgraded/plus - name = "upgraded power cell+" - desc = "" - maxcharge = 5000 - -/obj/item/stock_parts/cell/secborg - name = "security borg rechargeable D battery" - maxcharge = 600 //600 max charge / 100 charge per shot = six shots - custom_materials = list(/datum/material/glass=40) - -/obj/item/stock_parts/cell/secborg/empty/Initialize() - . = ..() - charge = 0 - update_icon() - -/obj/item/stock_parts/cell/pulse //200 pulse shots - name = "pulse rifle power cell" - maxcharge = 40000 - chargerate = 1500 - -/obj/item/stock_parts/cell/pulse/carbine //25 pulse shots - name = "pulse carbine power cell" - maxcharge = 5000 - -/obj/item/stock_parts/cell/pulse/pistol //10 pulse shots - name = "pulse pistol power cell" - maxcharge = 2000 - -/obj/item/stock_parts/cell/high - name = "high-capacity power cell" - icon_state = "hcell" - maxcharge = 10000 - custom_materials = list(/datum/material/glass=60) - chargerate = 1500 - -/obj/item/stock_parts/cell/high/plus - name = "high-capacity power cell+" - desc = "" - icon_state = "h+cell" - maxcharge = 15000 - chargerate = 2250 - -/obj/item/stock_parts/cell/high/empty/Initialize() - . = ..() - charge = 0 - update_icon() - -/obj/item/stock_parts/cell/super - name = "super-capacity power cell" - icon_state = "scell" - maxcharge = 20000 - custom_materials = list(/datum/material/glass=300) - chargerate = 2000 - -/obj/item/stock_parts/cell/super/empty/Initialize() - . = ..() - charge = 0 - update_icon() - -/obj/item/stock_parts/cell/hyper - name = "hyper-capacity power cell" - icon_state = "hpcell" - maxcharge = 30000 - custom_materials = list(/datum/material/glass=400) - chargerate = 3000 - -/obj/item/stock_parts/cell/hyper/empty/Initialize() - . = ..() - charge = 0 - update_icon() - -/obj/item/stock_parts/cell/bluespace - name = "bluespace power cell" - desc = "" - icon_state = "bscell" - maxcharge = 40000 - custom_materials = list(/datum/material/glass=600) - chargerate = 4000 - -/obj/item/stock_parts/cell/bluespace/empty/Initialize() - . = ..() - charge = 0 - update_icon() - -/obj/item/stock_parts/cell/infinite - name = "infinite-capacity power cell!" - icon_state = "icell" - maxcharge = 30000 - custom_materials = list(/datum/material/glass=1000) - rating = 100 - chargerate = 30000 - -/obj/item/stock_parts/cell/infinite/use() - return 1 - -/obj/item/stock_parts/cell/infinite/abductor - name = "void core" - desc = "" - icon = 'icons/obj/abductor.dmi' - icon_state = "cell" - maxcharge = 50000 - ratingdesc = FALSE - -/obj/item/stock_parts/cell/infinite/abductor/update_icon() - return - - -/obj/item/stock_parts/cell/potato - name = "potato battery" - desc = "" - icon = 'icons/obj/hydroponics/harvest.dmi' - icon_state = "potato" - charge = 100 - maxcharge = 300 - custom_materials = null - grown_battery = TRUE //it has the overlays for wires - -/obj/item/stock_parts/cell/high/slime - name = "charged slime core" - desc = "" - icon = 'icons/mob/slimes.dmi' - icon_state = "yellow slime extract" - custom_materials = null - rating = 5 //self-recharge makes these desirable - self_recharge = 1 // Infused slime cores self-recharge, over time - -/*Hypercharged slime cell - located in /code/modules/research/xenobiology/crossbreeding/_misc.dm -/obj/item/stock_parts/cell/high/slime/hypercharged */ - -/obj/item/stock_parts/cell/emproof - name = "\improper EMP-proof cell" - desc = "" - maxcharge = 500 - rating = 3 - -/obj/item/stock_parts/cell/emproof/empty/Initialize() - . = ..() - charge = 0 - update_icon() - -/obj/item/stock_parts/cell/emproof/empty/ComponentInitialize() - . = ..() - AddComponent(/datum/component/empprotection, EMP_PROTECT_SELF) - -/obj/item/stock_parts/cell/emproof/corrupt() - return - -/obj/item/stock_parts/cell/beam_rifle - name = "beam rifle capacitor" - desc = "" - maxcharge = 50000 - chargerate = 5000 //Extremely energy intensive - -/obj/item/stock_parts/cell/beam_rifle/corrupt() - return - -/obj/item/stock_parts/cell/beam_rifle/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - charge = CLAMP((charge-(10000/severity)),0,maxcharge) - -/obj/item/stock_parts/cell/emergency_light - name = "miniature power cell" - desc = "" - maxcharge = 120 //Emergency lights use 0.2 W per tick, meaning ~10 minutes of emergency power from a cell - custom_materials = list(/datum/material/glass = 20) - w_class = WEIGHT_CLASS_TINY - -/obj/item/stock_parts/cell/emergency_light/Initialize() - . = ..() - var/area/A = get_area(src) - if(!A.lightswitch || !A.light_power) - charge = 0 //For naturally depowered areas, we start with no power diff --git a/code/modules/power/floodlight.dm b/code/modules/power/floodlight.dm deleted file mode 100644 index ed0b9b84b7..0000000000 --- a/code/modules/power/floodlight.dm +++ /dev/null @@ -1,119 +0,0 @@ - -/obj/structure/floodlight_frame - name = "floodlight frame" - desc = "" - max_integrity = 100 - icon = 'icons/obj/lighting.dmi' - icon_state = "floodlight_c1" - density = TRUE - var/state = FLOODLIGHT_NEEDS_WRENCHING - -/obj/structure/floodlight_frame/attackby(obj/item/O, mob/user, params) - if(O.tool_behaviour == TOOL_WRENCH && (state == FLOODLIGHT_NEEDS_WRENCHING)) - to_chat(user, "I secure [src].") - anchored = TRUE - state = FLOODLIGHT_NEEDS_WIRES - desc = "" - else if(istype(O, /obj/item/stack/cable_coil) && (state == FLOODLIGHT_NEEDS_WIRES)) - var/obj/item/stack/S = O - if(S.use(5)) - to_chat(user, "I wire [src].") - name = "wired [name]" - desc = "" - icon_state = "floodlight_c2" - state = FLOODLIGHT_NEEDS_SECURING - else if(istype(O, /obj/item/light/tube) && (state == FLOODLIGHT_NEEDS_LIGHTS)) - if(user.transferItemToLoc(O)) - to_chat(user, "I put lights in [src].") - new /obj/machinery/power/floodlight(src.loc) - qdel(src) - else if(O.tool_behaviour == TOOL_SCREWDRIVER && (state == FLOODLIGHT_NEEDS_SECURING)) - to_chat(user, "I fasten the wiring and electronics in [src].") - name = "secured [name]" - desc = "" - icon_state = "floodlight_c3" - state = FLOODLIGHT_NEEDS_LIGHTS - else - ..() - -/obj/machinery/power/floodlight - name = "floodlight" - desc = "" - icon = 'icons/obj/lighting.dmi' - icon_state = "floodlight" - density = TRUE - max_integrity = 100 - integrity_failure = 0.8 - idle_power_usage = 100 - active_power_usage = 1000 - var/list/light_setting_list = list(0, 5, 10, 15) - var/light_power_coefficient = 300 - var/setting = 1 - light_power = 1.75 - -/obj/machinery/power/floodlight/process() - if(avail(active_power_usage)) - add_load(active_power_usage) - else - change_setting(1) - -/obj/machinery/power/floodlight/proc/change_setting(val, mob/user) - if((val < 1) || (val > light_setting_list.len)) - return - active_power_usage = light_setting_list[val] - if(!avail(active_power_usage)) - return change_setting(val - 1) - setting = val - set_light(light_setting_list[val]) - var/setting_text = "" - if(val > 1) - icon_state = "[initial(icon_state)]_on" - else - icon_state = initial(icon_state) - switch(val) - if(1) - setting_text = "OFF" - if(2) - setting_text = "low power" - if(3) - setting_text = "standard lighting" - if(4) - setting_text = "high power" - if(user) - to_chat(user, "I set [src] to [setting_text].") - -/obj/machinery/power/floodlight/attackby(obj/item/O, mob/user, params) - if(O.tool_behaviour == TOOL_WRENCH) - default_unfasten_wrench(user, O, time = 20) - change_setting(1) - if(anchored) - connect_to_network() - else - disconnect_from_network() - else - . = ..() - -/obj/machinery/power/floodlight/attack_hand(mob/user) - . = ..() - if(.) - return - var/current = setting - if(current == 1) - current = light_setting_list.len - else - current-- - change_setting(current, user) - ..() - -/obj/machinery/power/floodlight/obj_break(damage_flag) - . = ..() - if(!.) - return - playsound(loc, 'sound/blank.ogg', 100, TRUE) - var/obj/structure/floodlight_frame/F = new(loc) - F.state = FLOODLIGHT_NEEDS_LIGHTS - new /obj/item/light/tube/broken(loc) - qdel(src) - -/obj/machinery/power/floodlight/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - playsound(src, 'sound/blank.ogg', 75, TRUE) diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm deleted file mode 100644 index f7cc608737..0000000000 --- a/code/modules/power/generator.dm +++ /dev/null @@ -1,233 +0,0 @@ -/obj/machinery/power/generator - name = "thermoelectric generator" - desc = "" - icon_state = "teg" - density = TRUE - use_power = NO_POWER_USE - - var/obj/machinery/atmospherics/components/binary/circulator/cold_circ - var/obj/machinery/atmospherics/components/binary/circulator/hot_circ - - var/lastgen = 0 - var/lastgenlev = -1 - var/lastcirc = "00" - - -/obj/machinery/power/generator/Initialize(mapload) - . = ..() - find_circs() - connect_to_network() - SSair.atmos_machinery += src - update_icon() - component_parts = list(new /obj/item/circuitboard/machine/generator) - -/obj/machinery/power/generator/ComponentInitialize() - . = ..() - AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ) - -/obj/machinery/power/generator/Destroy() - kill_circs() - SSair.atmos_machinery -= src - return ..() - -/obj/machinery/power/generator/update_icon() - - if(stat & (NOPOWER|BROKEN)) - cut_overlays() - else - cut_overlays() - - var/L = min(round(lastgenlev/100000),11) - if(L != 0) - add_overlay(image('icons/obj/power.dmi', "teg-op[L]")) - - if(hot_circ && cold_circ) - add_overlay("teg-oc[lastcirc]") - - -#define GENRATE 800 // generator output coefficient from Q - -/obj/machinery/power/generator/process_atmos() - - if(!cold_circ || !hot_circ) - return - - if(powernet) - var/datum/gas_mixture/cold_air = cold_circ.return_transfer_air() - var/datum/gas_mixture/hot_air = hot_circ.return_transfer_air() - - if(cold_air && hot_air) - - var/cold_air_heat_capacity = cold_air.heat_capacity() - var/hot_air_heat_capacity = hot_air.heat_capacity() - - var/delta_temperature = hot_air.temperature - cold_air.temperature - - - if(delta_temperature > 0 && cold_air_heat_capacity > 0 && hot_air_heat_capacity > 0) - var/efficiency = 0.65 - - var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity) - - var/heat = energy_transfer*(1-efficiency) - lastgen += energy_transfer*efficiency - - hot_air.temperature = hot_air.temperature - energy_transfer/hot_air_heat_capacity - cold_air.temperature = cold_air.temperature + heat/cold_air_heat_capacity - - //add_avail(lastgen) This is done in process now - // update icon overlays only if displayed level has changed - - if(hot_air) - var/datum/gas_mixture/hot_circ_air1 = hot_circ.airs[1] - hot_circ_air1.merge(hot_air) - - if(cold_air) - var/datum/gas_mixture/cold_circ_air1 = cold_circ.airs[1] - cold_circ_air1.merge(cold_air) - - update_icon() - - var/circ = "[cold_circ && cold_circ.last_pressure_delta > 0 ? "1" : "0"][hot_circ && hot_circ.last_pressure_delta > 0 ? "1" : "0"]" - if(circ != lastcirc) - lastcirc = circ - update_icon() - - src.updateDialog() - -/obj/machinery/power/generator/process() - //Setting this number higher just makes the change in power output slower, it doesnt actualy reduce power output cause **math** - var/power_output = round(lastgen / 10) - add_avail(power_output) - lastgenlev = power_output - lastgen -= power_output - ..() - -/obj/machinery/power/generator/proc/get_menu(include_link = TRUE) - var/t = "" - if(!powernet) - t += "Unable to connect to the power network!" - else if(cold_circ && hot_circ) - var/datum/gas_mixture/cold_circ_air1 = cold_circ.airs[1] - var/datum/gas_mixture/cold_circ_air2 = cold_circ.airs[2] - var/datum/gas_mixture/hot_circ_air1 = hot_circ.airs[1] - var/datum/gas_mixture/hot_circ_air2 = hot_circ.airs[2] - - t += "
    " - - t += "Output: [DisplayPower(lastgenlev)]" - - t += "
    " - - t += "Cold loop
    " - t += "Temperature Inlet: [round(cold_circ_air2.temperature, 0.1)] K / Outlet: [round(cold_circ_air1.temperature, 0.1)] K
    " - t += "Pressure Inlet: [round(cold_circ_air2.return_pressure(), 0.1)] kPa / Outlet: [round(cold_circ_air1.return_pressure(), 0.1)] kPa
    " - - t += "Hot loop
    " - t += "Temperature Inlet: [round(hot_circ_air2.temperature, 0.1)] K / Outlet: [round(hot_circ_air1.temperature, 0.1)] K
    " - t += "Pressure Inlet: [round(hot_circ_air2.return_pressure(), 0.1)] kPa / Outlet: [round(hot_circ_air1.return_pressure(), 0.1)] kPa
    " - - t += "
    " - else if(!hot_circ && cold_circ) - t += "Unable to locate hot circulator!" - else if(hot_circ && !cold_circ) - t += "Unable to locate cold circulator!" - else - t += "Unable to locate any parts!" - if(include_link) - t += "
    Close" - - return t - -/obj/machinery/power/generator/ui_interact(mob/user) - . = ..() - var/datum/browser/popup = new(user, "teg", "Thermo-Electric Generator", 460, 300) - popup.set_content(get_menu()) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - -/obj/machinery/power/generator/Topic(href, href_list) - if(..()) - return - if( href_list["close"] ) - usr << browse(null, "window=teg") - usr.unset_machine() - return FALSE - return TRUE - - - -/obj/machinery/power/generator/proc/find_circs() - kill_circs() - var/list/circs = list() - var/obj/machinery/atmospherics/components/binary/circulator/C - var/circpath = /obj/machinery/atmospherics/components/binary/circulator - if(dir == NORTH || dir == SOUTH) - C = locate(circpath) in get_step(src, EAST) - if(C && C.dir == WEST) - circs += C - - C = locate(circpath) in get_step(src, WEST) - if(C && C.dir == EAST) - circs += C - - else - C = locate(circpath) in get_step(src, NORTH) - if(C && C.dir == SOUTH) - circs += C - - C = locate(circpath) in get_step(src, SOUTH) - if(C && C.dir == NORTH) - circs += C - - if(circs.len) - for(C in circs) - if(C.mode == CIRCULATOR_COLD && !cold_circ) - cold_circ = C - C.generator = src - else if(C.mode == CIRCULATOR_HOT && !hot_circ) - hot_circ = C - C.generator = src - -/obj/machinery/power/generator/wrench_act(mob/living/user, obj/item/I) - . = ..() - if(!panel_open) - return - anchored = !anchored - I.play_tool_sound(src) - if(!anchored) - kill_circs() - connect_to_network() - to_chat(user, "I [anchored?"secure":"unsecure"] [src].") - return TRUE - -/obj/machinery/power/generator/multitool_act(mob/living/user, obj/item/I) - . = ..() - if(!anchored) - return - find_circs() - to_chat(user, "I update [src]'s circulator links.") - return TRUE - -/obj/machinery/power/generator/screwdriver_act(mob/user, obj/item/I) - if(..()) - return TRUE - panel_open = !panel_open - I.play_tool_sound(src) - to_chat(user, "I [panel_open?"open":"close"] the panel on [src].") - return TRUE - -/obj/machinery/power/generator/crowbar_act(mob/user, obj/item/I) - default_deconstruction_crowbar(I) - return TRUE - -/obj/machinery/power/generator/on_deconstruction() - kill_circs() - -/obj/machinery/power/generator/proc/kill_circs() - if(hot_circ) - hot_circ.generator = null - hot_circ = null - if(cold_circ) - cold_circ.generator = null - cold_circ = null diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm deleted file mode 100644 index f582c3410a..0000000000 --- a/code/modules/power/gravitygenerator.dm +++ /dev/null @@ -1,418 +0,0 @@ - -// -// Gravity Generator -// - -GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding new gravity generators to the list, and keying it with the z level. - -#define POWER_IDLE 0 -#define POWER_UP 1 -#define POWER_DOWN 2 - -#define GRAV_NEEDS_SCREWDRIVER 0 -#define GRAV_NEEDS_WELDING 1 -#define GRAV_NEEDS_PLASTEEL 2 -#define GRAV_NEEDS_WRENCH 3 - -// -// Abstract Generator -// - -/obj/machinery/gravity_generator - name = "gravitational generator" - desc = "" - icon = 'icons/obj/machines/gravity_generator.dmi' - density = TRUE - move_resist = INFINITY - use_power = NO_POWER_USE - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - var/sprite_number = 0 - -/obj/machinery/gravity_generator/safe_throw_at(atom/target, range, speed, mob/thrower, spin = TRUE, diagonals_first = FALSE, datum/callback/callback, force = MOVE_FORCE_STRONG) - return FALSE - -/obj/machinery/gravity_generator/ex_act(severity, target) - if(severity == 1) // Very sturdy. - set_broken() - -/obj/machinery/gravity_generator/blob_act(obj/structure/blob/B) - if(prob(20)) - set_broken() - -/obj/machinery/gravity_generator/tesla_act(power, tesla_flags) - ..() - if(tesla_flags & TESLA_MACHINE_EXPLOSIVE) - qdel(src)//like the singulo, tesla deletes it. stops it from exploding over and over - -/obj/machinery/gravity_generator/update_icon() - ..() - icon_state = "[get_status()]_[sprite_number]" - -/obj/machinery/gravity_generator/proc/get_status() - return "off" - -// You aren't allowed to move. -/obj/machinery/gravity_generator/Move() - . = ..() - qdel(src) - -/obj/machinery/gravity_generator/proc/set_broken() - obj_break() - -/obj/machinery/gravity_generator/proc/set_fix() - stat &= ~BROKEN - -/obj/machinery/gravity_generator/part/Destroy() - if(main_part) - qdel(main_part) - set_broken() - return ..() - -// -// Part generator which is mostly there for looks -// - -/obj/machinery/gravity_generator/part - var/obj/machinery/gravity_generator/main/main_part = null - -/obj/machinery/gravity_generator/part/attackby(obj/item/I, mob/user, params) - return main_part.attackby(I, user) - -/obj/machinery/gravity_generator/part/get_status() - return main_part.get_status() - -/obj/machinery/gravity_generator/part/attack_hand(mob/user) - return main_part.attack_hand(user) - -/obj/machinery/gravity_generator/part/set_broken() - ..() - if(main_part && !(main_part.stat & BROKEN)) - main_part.set_broken() - -// -// Generator which spawns with the station. -// - -/obj/machinery/gravity_generator/main/station/Initialize() - . = ..() - setup_parts() - middle.add_overlay("activated") - update_list() - -// -// Generator an admin can spawn -// -/obj/machinery/gravity_generator/main/station/admin - use_power = NO_POWER_USE - -// -// Main Generator with the main code -// - -/obj/machinery/gravity_generator/main - icon_state = "on_8" - idle_power_usage = 0 - active_power_usage = 3000 - power_channel = ENVIRON - sprite_number = 8 - use_power = IDLE_POWER_USE - interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OFFLINE - var/on = TRUE - var/breaker = TRUE - var/list/parts = list() - var/obj/middle = null - var/charging_state = POWER_IDLE - var/charge_count = 100 - var/current_overlay = null - var/broken_state = 0 - var/setting = 1 //Gravity value when on - -/obj/machinery/gravity_generator/main/Destroy() // If we somehow get deleted, remove all of our other parts. - investigate_log("was destroyed!", INVESTIGATE_GRAVITY) - on = FALSE - update_list() - for(var/obj/machinery/gravity_generator/part/O in parts) - O.main_part = null - if(!QDESTROYING(O)) - qdel(O) - return ..() - -/obj/machinery/gravity_generator/main/proc/setup_parts() - var/turf/our_turf = get_turf(src) - // 9x9 block obtained from the bottom middle of the block - var/list/spawn_turfs = block(locate(our_turf.x - 1, our_turf.y + 2, our_turf.z), locate(our_turf.x + 1, our_turf.y, our_turf.z)) - var/count = 10 - for(var/turf/T in spawn_turfs) - count-- - if(T == our_turf) // Skip our turf. - continue - var/obj/machinery/gravity_generator/part/part = new(T) - if(count == 5) // Middle - middle = part - if(count <= 3) // Their sprite is the top part of the generator - part.density = FALSE - part.layer = WALL_OBJ_LAYER - part.sprite_number = count - part.main_part = src - parts += part - part.update_icon() - -/obj/machinery/gravity_generator/main/proc/connected_parts() - return parts.len == 8 - -/obj/machinery/gravity_generator/main/set_broken() - ..() - for(var/obj/machinery/gravity_generator/M in parts) - if(!(M.stat & BROKEN)) - M.set_broken() - middle.cut_overlays() - charge_count = 0 - breaker = FALSE - set_power() - set_state(0) - investigate_log("has broken down.", INVESTIGATE_GRAVITY) - -/obj/machinery/gravity_generator/main/set_fix() - ..() - for(var/obj/machinery/gravity_generator/M in parts) - if(M.stat & BROKEN) - M.set_fix() - broken_state = FALSE - update_icon() - set_power() - -// Interaction - -// Fixing the gravity generator. -/obj/machinery/gravity_generator/main/attackby(obj/item/I, mob/user, params) - switch(broken_state) - if(GRAV_NEEDS_SCREWDRIVER) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - to_chat(user, "I secure the screws of the framework.") - I.play_tool_sound(src) - broken_state++ - update_icon() - return - if(GRAV_NEEDS_WELDING) - if(I.tool_behaviour == TOOL_WELDER) - if(I.use_tool(src, user, 0, volume=50, amount=1)) - to_chat(user, "I mend the damaged framework.") - broken_state++ - update_icon() - return - if(GRAV_NEEDS_PLASTEEL) - if(istype(I, /obj/item/stack/sheet/plasteel)) - var/obj/item/stack/sheet/plasteel/PS = I - if(PS.get_amount() >= 10) - PS.use(10) - to_chat(user, "I add the plating to the framework.") - playsound(src.loc, 'sound/blank.ogg', 75, TRUE) - broken_state++ - update_icon() - else - to_chat(user, "I need 10 sheets of plasteel!") - return - if(GRAV_NEEDS_WRENCH) - if(I.tool_behaviour == TOOL_WRENCH) - to_chat(user, "I secure the plating to the framework.") - I.play_tool_sound(src) - set_fix() - return - return ..() - -/obj/machinery/gravity_generator/main/ui_interact(mob/user) - if(stat & BROKEN) - return - var/dat = "Gravity Generator Breaker: " - if(breaker) - dat += "ON OFF" - else - dat += "ON OFF " - - dat += "
    Generator Status:
    " - if(charging_state != POWER_IDLE) - dat += "WARNING Radiation Detected.
    [charging_state == POWER_UP ? "Charging..." : "Discharging..."]" - else if(on) - dat += "Powered." - else - dat += "Unpowered." - - dat += "
    Gravity Charge: [charge_count]%
    " - - var/datum/browser/popup = new(user, "gravgen", name) - popup.set_content(dat) - popup.open() - - -/obj/machinery/gravity_generator/main/Topic(href, href_list) - - if(..()) - return - - if(href_list["gentoggle"]) - breaker = !breaker - investigate_log("was toggled [breaker ? "ON" : "OFF"] by [key_name(usr)].", INVESTIGATE_GRAVITY) - set_power() - src.updateUsrDialog() - -// Power and Icon States - -/obj/machinery/gravity_generator/main/power_change() - . = ..() - investigate_log("has [stat & NOPOWER ? "lost" : "regained"] power.", INVESTIGATE_GRAVITY) - set_power() - -/obj/machinery/gravity_generator/main/get_status() - if(stat & BROKEN) - return "fix[min(broken_state, 3)]" - return on || charging_state != POWER_IDLE ? "on" : "off" - -/obj/machinery/gravity_generator/main/update_icon() - ..() - for(var/obj/O in parts) - O.update_icon() - -// Set the charging state based on power/breaker. -/obj/machinery/gravity_generator/main/proc/set_power() - var/new_state = FALSE - if(stat & (NOPOWER|BROKEN) || !breaker) - new_state = FALSE - else if(breaker) - new_state = TRUE - - charging_state = new_state ? POWER_UP : POWER_DOWN // Startup sequence animation. - investigate_log("is now [charging_state == POWER_UP ? "charging" : "discharging"].", INVESTIGATE_GRAVITY) - update_icon() - -// Set the state of the gravity. -/obj/machinery/gravity_generator/main/proc/set_state(new_state) - charging_state = POWER_IDLE - on = new_state - use_power = on ? ACTIVE_POWER_USE : IDLE_POWER_USE - // Sound the alert if gravity was just enabled or disabled. - var/alert = FALSE - if(SSticker.IsRoundInProgress()) - if(on) // If we turned on and the game is live. - if(gravity_in_level() == FALSE) - alert = TRUE - investigate_log("was brought online and is now producing gravity for this level.", INVESTIGATE_GRAVITY) - message_admins("The gravity generator was brought online [ADMIN_VERBOSEJMP(src)]") - else - if(gravity_in_level() == TRUE) - alert = TRUE - investigate_log("was brought offline and there is now no gravity for this level.", INVESTIGATE_GRAVITY) - message_admins("The gravity generator was brought offline with no backup generator. [ADMIN_VERBOSEJMP(src)]") - - update_icon() - update_list() - src.updateUsrDialog() - if(alert) - shake_everyone() - -// Charge/Discharge and turn on/off gravity when you reach 0/100 percent. -// Also emit radiation and handle the overlays. -/obj/machinery/gravity_generator/main/process() - if(stat & BROKEN) - return - if(charging_state != POWER_IDLE) - if(charging_state == POWER_UP && charge_count >= 100) - set_state(1) - else if(charging_state == POWER_DOWN && charge_count <= 0) - set_state(0) - else - if(charging_state == POWER_UP) - charge_count += 2 - else if(charging_state == POWER_DOWN) - charge_count -= 2 - - if(charge_count % 4 == 0 && prob(75)) // Let them know it is charging/discharging. - playsound(src.loc, 'sound/blank.ogg', 100, TRUE) - - updateDialog() - if(prob(25)) // To help stop "Your clothes feel warm." spam. - pulse_radiation() - - var/overlay_state = null - switch(charge_count) - if(0 to 20) - overlay_state = null - if(21 to 40) - overlay_state = "startup" - if(41 to 60) - overlay_state = "idle" - if(61 to 80) - overlay_state = "activating" - if(81 to 100) - overlay_state = "activated" - - if(overlay_state != current_overlay) - if(middle) - middle.cut_overlays() - if(overlay_state) - middle.add_overlay(overlay_state) - current_overlay = overlay_state - - -/obj/machinery/gravity_generator/main/proc/pulse_radiation() - radiation_pulse(src, 200) - -// Shake everyone on the z level to let them know that gravity was enagaged/disenagaged. -/obj/machinery/gravity_generator/main/proc/shake_everyone() - var/turf/T = get_turf(src) - var/sound/alert_sound = sound('sound/blank.ogg') - for(var/i in GLOB.mob_list) - var/mob/M = i - if(M.z != z && !(SSmapping.level_trait(z, ZTRAITS_STATION) && SSmapping.level_trait(M.z, ZTRAITS_STATION))) - continue - M.update_gravity(M.mob_has_gravity()) - if(M.client) - shake_camera(M, 15, 1) - M.playsound_local(T, null, 100, 1, 0.5, S = alert_sound) - -/obj/machinery/gravity_generator/main/proc/gravity_in_level() - var/turf/T = get_turf(src) - if(!T) - return FALSE - if(GLOB.gravity_generators["[T.z]"]) - return length(GLOB.gravity_generators["[T.z]"]) - return FALSE - -/obj/machinery/gravity_generator/main/proc/update_list() - var/turf/T = get_turf(src.loc) - if(T) - var/list/z_list = list() - // Multi-Z, station gravity generator generates gravity on all ZTRAIT_STATION z-levels. - if(SSmapping.level_trait(T.z, ZTRAIT_STATION)) - for(var/z in SSmapping.levels_by_trait(ZTRAIT_STATION)) - z_list += z - else - z_list += T.z - for(var/z in z_list) - if(!GLOB.gravity_generators["[z]"]) - GLOB.gravity_generators["[z]"] = list() - if(on) - GLOB.gravity_generators["[z]"] |= src - else - GLOB.gravity_generators["[z]"] -= src - -/obj/machinery/gravity_generator/main/proc/change_setting(value) - if(value != setting) - setting = value - shake_everyone() - -// Misc - -/obj/item/paper/guides/jobs/engi/gravity_gen - name = "paper- 'Generate your own gravity!'" - info = {"

    Gravity Generator Instructions For Dummies

    -

    Surprisingly, gravity isn't that hard to make! All you have to do is inject deadly radioactive minerals into a ball of - energy and you have myself gravity! You can turn the machine on or off when required but you must remember that the generator - will EMIT RADIATION when charging or discharging, you can tell it is charging or discharging by the noise it makes, so please WEAR PROTECTIVE CLOTHING.

    -
    -

    It blew up!

    -

    Don't panic! The gravity generator was designed to be easily repaired. If, somehow, the sturdy framework did not survive then - please proceed to panic; otherwise follow these steps.

      -
    1. Secure the screws of the framework with a screwdriver.
    2. -
    3. Mend the damaged framework with a welding tool.
    4. -
    5. Add additional plasteel plating.
    6. -
    7. Secure the additional plating with a wrench.
    "} diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm deleted file mode 100644 index 0d6f0a9378..0000000000 --- a/code/modules/power/lighting.dm +++ /dev/null @@ -1,882 +0,0 @@ -// The lighting system -// -// consists of light fixtures (/obj/machinery/light) and light tube/bulb items (/obj/item/light) - -#define LIGHT_EMERGENCY_POWER_USE 0.2 //How much power emergency lights will consume per tick -// status values shared between lighting fixtures and items -#define LIGHT_OK 0 -#define LIGHT_EMPTY 1 -#define LIGHT_BROKEN 2 -#define LIGHT_BURNED 3 - -#define BROKEN_SPARKS_MIN (30 SECONDS) -#define BROKEN_SPARKS_MAX (90 SECONDS) - -/obj/item/wallframe/light_fixture - name = "light fixture frame" - desc = "" - icon = 'icons/obj/lighting.dmi' - icon_state = "tube-construct-item" - result_path = /obj/structure/light_construct - inverse = TRUE - -/obj/item/wallframe/light_fixture/small - name = "small light fixture frame" - icon_state = "bulb-construct-item" - result_path = /obj/structure/light_construct/small - custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT) - -/obj/item/wallframe/light_fixture/try_build(turf/on_wall, user) - if(!..()) - return - var/area/A = get_area(user) - if(!IS_DYNAMIC_LIGHTING(A)) - to_chat(user, "I cannot place [src] in this area!") - return - return TRUE - - -/obj/structure/light_construct - name = "light fixture frame" - desc = "" - icon = 'icons/obj/lighting.dmi' - icon_state = "tube-construct-stage1" - anchored = TRUE - layer = WALL_OBJ_LAYER - max_integrity = 200 - armor = list("melee" = 50, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50) - - var/stage = 1 - var/fixture_type = "tube" - var/sheets_refunded = 2 - var/obj/machinery/light/newlight = null - var/obj/item/stock_parts/cell/cell - - var/cell_connectors = TRUE - -/obj/structure/light_construct/Initialize(mapload, ndir, building) - . = ..() - if(building) - setDir(ndir) - -/obj/structure/light_construct/Destroy() - QDEL_NULL(cell) - return ..() - -/obj/structure/light_construct/get_cell() - return cell - -/obj/structure/light_construct/examine(mob/user) - . = ..() - switch(stage) - if(1) - . += "It's an empty frame." - if(2) - . += "It's wired." - if(3) - . += "The casing is closed." - if(cell_connectors) - if(cell) - . += "You see [cell] inside the casing." - else - . += "The casing has no power cell for backup power." - else - . += "This casing doesn't support power cells for backup power." - -/obj/structure/light_construct/attack_hand(mob/user) - if(cell) - user.visible_message("[user] removes [cell] from [src]!", "I remove [cell].") - user.put_in_hands(cell) - cell.update_icon() - cell = null - add_fingerprint(user) - -/obj/structure/light_construct/attack_tk(mob/user) - if(cell) - to_chat(user, "I telekinetically remove [cell].") - cell.forceMove(drop_location()) - cell.attack_tk(user) - cell = null - -/obj/structure/light_construct/attackby(obj/item/W, mob/user, params) - add_fingerprint(user) - if(istype(W, /obj/item/stock_parts/cell)) - if(!cell_connectors) - to_chat(user, "This [name] can't support a power cell!") - return - if(HAS_TRAIT(W, TRAIT_NODROP)) - to_chat(user, "[W] is stuck to your hand!") - return - if(cell) - to_chat(user, "There is a power cell already installed!") - else if(user.temporarilyRemoveItemFromInventory(W)) - user.visible_message("[user] hooks up [W] to [src].", \ - "I add [W] to [src].") - playsound(src, 'sound/blank.ogg', 50, TRUE) - W.forceMove(src) - cell = W - add_fingerprint(user) - return - switch(stage) - if(1) - if(W.tool_behaviour == TOOL_WRENCH) - if(cell) - to_chat(user, "I have to remove the cell first!") - return - else - to_chat(user, "I begin deconstructing [src]...") - if (W.use_tool(src, user, 30, volume=50)) - new /obj/item/stack/sheet/metal(drop_location(), sheets_refunded) - user.visible_message("[user.name] deconstructs [src].", \ - "I deconstruct [src].", "I hear a ratchet.") - playsound(src, 'sound/blank.ogg', 75, TRUE) - qdel(src) - return - - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/coil = W - if(coil.use(1)) - icon_state = "[fixture_type]-construct-stage2" - stage = 2 - user.visible_message("[user.name] adds wires to [src].", \ - "I add wires to [src].") - else - to_chat(user, "I need one length of cable to wire [src]!") - return - if(2) - if(W.tool_behaviour == TOOL_WRENCH) - to_chat(usr, "I have to remove the wires first!") - return - - if(W.tool_behaviour == TOOL_WIRECUTTER) - stage = 1 - icon_state = "[fixture_type]-construct-stage1" - new /obj/item/stack/cable_coil(drop_location(), 1, "red") - user.visible_message("[user.name] removes the wiring from [src].", \ - "I remove the wiring from [src].", "I hear clicking.") - W.play_tool_sound(src, 100) - return - - if(W.tool_behaviour == TOOL_SCREWDRIVER) - user.visible_message("[user.name] closes [src]'s casing.", \ - "I close [src]'s casing.", "I hear screwing.") - W.play_tool_sound(src, 75) - switch(fixture_type) - if("tube") - newlight = new /obj/machinery/light/built(loc) - if("bulb") - newlight = new /obj/machinery/light/small/built(loc) - newlight.setDir(dir) - transfer_fingerprints_to(newlight) - if(cell) - newlight.cell = cell - cell.forceMove(newlight) - cell = null - qdel(src) - return - return ..() - -/obj/structure/light_construct/blob_act(obj/structure/blob/B) - if(B && B.loc == loc) - qdel(src) - - -/obj/structure/light_construct/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/sheet/metal(loc, sheets_refunded) - qdel(src) - -/obj/structure/light_construct/small - name = "small light fixture frame" - icon_state = "bulb-construct-stage1" - fixture_type = "bulb" - sheets_refunded = 1 - - - -// the standard tube light fixture -/obj/machinery/light - name = "light fixture" - icon = 'icons/obj/lighting.dmi' - var/overlayicon = 'icons/obj/lighting_overlay.dmi' - var/base_state = "tube" // base description and icon_state - icon_state = "tube" - desc = "" - layer = WALL_OBJ_LAYER - max_integrity = 100 - use_power = ACTIVE_POWER_USE - idle_power_usage = 2 - active_power_usage = 20 - power_channel = LIGHT //Lights are calc'd via area so they dont need to be in the machine list - var/on = FALSE // 1 if on, 0 if off - var/on_gs = FALSE - var/static_power_used = 0 - var/brightness = 8 // luminosity when on, also used in power calculation - var/bulb_power = 1 // basically the alpha of the emitted light source - var/bulb_colour = "#FFFFFF" // befault colour of the light. - var/status = LIGHT_OK // LIGHT_OK, _EMPTY, _BURNED or _BROKEN - var/flickering = FALSE - var/light_type = /obj/item/light/tube // the type of light item - var/fitting = "tube" - var/switchcount = 0 // count of number of times switched on/off - // this is used to calc the probability the light burns out - - var/rigged = FALSE // true if rigged to explode - - var/obj/item/stock_parts/cell/cell - var/start_with_cell = TRUE // if true, this fixture generates a very weak cell at roundstart - - var/nightshift_enabled = FALSE //Currently in night shift mode? - var/nightshift_allowed = FALSE //Set to FALSE to never let this light get switched to night mode. - var/nightshift_brightness = 8 - var/nightshift_light_power = 1 - var/nightshift_light_color = "#071436" - - var/dawnshift_brightness = 8 - var/dawnshift_light_power = 1 - var/dawnshift_light_color = "#364052" - - var/duskshift_brightness = 8 - var/duskshift_light_power = 1 - var/duskshift_light_color = "#505f7a" - - var/emergency_mode = FALSE // if true, the light is in emergency mode - var/no_emergency = FALSE // if true, this light cannot ever have an emergency mode - var/bulb_emergency_brightness_mul = 0.25 // multiplier for this light's base brightness in emergency power mode - var/bulb_emergency_colour = "#FF3232" // determines the colour of the light while it's in emergency mode - var/bulb_emergency_pow_mul = 0.75 // the multiplier for determining the light's power in emergency mode - var/bulb_emergency_pow_min = 0.5 // the minimum value for the light's power in emergency mode - - var/fueluse = -1 // How much fuel the machinery starts with. At -1, it is never turned off with the passing of time. - -/obj/machinery/light/broken - status = LIGHT_BROKEN - icon_state = "tube-broken" - -// the smaller bulb light fixture - -/obj/machinery/light/small - icon_state = "bulb" - base_state = "bulb" - fitting = "bulb" - brightness = 4 - desc = "" - light_type = /obj/item/light/bulb - -/obj/machinery/light/small/broken - status = LIGHT_BROKEN - icon_state = "bulb-broken" - -/obj/machinery/light/Move() - if(status != LIGHT_BROKEN) - break_light_tube(1) - return ..() - -/obj/machinery/light/built - icon_state = "tube-empty" - start_with_cell = FALSE - -/obj/machinery/light/built/Initialize() - . = ..() - status = LIGHT_EMPTY - update(0) - -/obj/machinery/light/small/built - icon_state = "bulb-empty" - start_with_cell = FALSE - -/obj/machinery/light/small/built/Initialize() - . = ..() - status = LIGHT_EMPTY - update(0) - - - -// create a new lighting fixture -/obj/machinery/light/Initialize(mapload) - . = ..() - -// if(!mapload) //sync up nightshift lighting for player made lights -// var/area/A = get_area(src) -// var/obj/machinery/power/apc/temp_apc = A.get_apc() -// nightshift_enabled = temp_apc?.nightshift_lights - -// if(start_with_cell && !no_emergency) -// cell = new/obj/item/stock_parts/cell/emergency_light(src) - - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/light/LateInitialize() - . = ..() -// switch(fitting) -// if("tube") -// brightness = 8 -// if(prob(2)) -// break_light_tube(1) -// if("bulb") -// brightness = 4 -// if(prob(5)) -// break_light_tube(1) - addtimer(CALLBACK(src, PROC_REF(update), 0), 1) - -/obj/machinery/light/Destroy() - var/area/A = get_area(src) - if(A) - on = FALSE -// A.update_lights() - QDEL_NULL(cell) - return ..() - -/obj/machinery/light/update_icon() - cut_overlays() - switch(status) // set icon_states - if(LIGHT_OK) - var/area/A = get_area(src) - if(emergency_mode || (A && A.fire)) - icon_state = "[base_state]_emergency" - icon_state = null - else - icon_state = "[base_state]" - icon_state = null - if(on) - var/mutable_appearance/glowybit = mutable_appearance(overlayicon, base_state, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE) - glowybit.alpha = CLAMP(light_power*250, 30, 200) - add_overlay(glowybit) - if(LIGHT_EMPTY) - icon_state = "[base_state]-empty" - if(LIGHT_BURNED) - icon_state = "[base_state]-burned" - if(LIGHT_BROKEN) - icon_state = "[base_state]-broken" - return - -// update the icon_state and luminosity of the light depending on its state -/obj/machinery/light/proc/update(trigger = TRUE) -// switch(status) -// if(LIGHT_BROKEN,LIGHT_BURNED,LIGHT_EMPTY) -// on = FALSE - emergency_mode = FALSE - if(on) - var/BR = brightness - var/PO = bulb_power - var/CO = bulb_colour - if(color) - CO = color - var/area/A = get_area(src) - if (A && A.fire) - CO = bulb_emergency_colour - else if (nightshift_enabled) - switch(nightshift_enabled) - if("night") - BR = nightshift_brightness - PO = nightshift_light_power - if(!color) - CO = nightshift_light_color - if("dusk") - BR = duskshift_brightness - PO = duskshift_light_power - if(!color) - CO = duskshift_light_color - if("dawn") - BR = dawnshift_brightness - PO = dawnshift_light_power - if(!color) - CO = dawnshift_light_color - if("day") - BR = brightness - PO = bulb_power - CO = bulb_colour - if(color) - CO = color - var/matching = light && BR == light.light_range && PO == light.light_power && CO == light.light_color - if(!matching) - switchcount++ - if(rigged) - if(status == LIGHT_OK && trigger) - explode() -// else if( prob( min(60, (switchcount^2)*0.01) ) ) -// if(trigger) -// burn_out() - else - use_power = ACTIVE_POWER_USE - set_light(BR, PO, CO) - else if(has_emergency_power(LIGHT_EMERGENCY_POWER_USE) && !turned_off()) - use_power = IDLE_POWER_USE - emergency_mode = TRUE - START_PROCESSING(SSmachines, src) - else - use_power = IDLE_POWER_USE - set_light(0) - update_icon() - -// active_power_usage = (brightness * 10) -// if(on != on_gs) -// on_gs = on -// if(on) -// static_power_used = brightness * 20 //20W per unit luminosity -// addStaticPower(static_power_used, STATIC_LIGHT) -// else -// removeStaticPower(static_power_used, STATIC_LIGHT) - - broken_sparks(start_only=TRUE) - -/obj/machinery/light/update_atom_colour() - ..() - update() - -/obj/machinery/light/proc/broken_sparks(start_only=FALSE) - if(status == LIGHT_BROKEN && has_power()) - if(!start_only) - do_sparks(3, TRUE, src) - var/delay = rand(BROKEN_SPARKS_MIN, BROKEN_SPARKS_MAX) - addtimer(CALLBACK(src, PROC_REF(broken_sparks)), delay, TIMER_UNIQUE | TIMER_NO_HASH_WAIT) - -/obj/machinery/light/process() - if(on) - if(initial(fueluse) > 0) - if(fueluse > 0) - fueluse = max(fueluse - 10, 0) - if(fueluse == 0) - burn_out() - else - return PROCESS_KILL -// if (!cell) -// return PROCESS_KILL -// if(has_power()) -// if (cell.charge == cell.maxcharge) -// return PROCESS_KILL -// cell.charge = min(cell.maxcharge, cell.charge + LIGHT_EMERGENCY_POWER_USE) //Recharge emergency power automatically while not using it -// if(emergency_mode && !use_emergency_power(LIGHT_EMERGENCY_POWER_USE)) -// update(FALSE) //Disables emergency mode and sets the color to normal - - - -/obj/machinery/light/proc/burn_out() - if(on) -// icon_state = "[base_state]-burned" - on = FALSE - set_light(0) - update_icon() - -// attempt to set the light's on/off status -// will not switch on if broken/burned/empty -/obj/machinery/light/proc/seton(s) - on = (s && status == LIGHT_OK) - update() - -/obj/machinery/light/get_cell() - return cell -/* -// examine verb -/obj/machinery/light/examine(mob/user) - . = ..() - switch(status) - if(LIGHT_OK) - . += "It is turned [on? "on" : "off"]." - if(LIGHT_EMPTY) - . += "The [fitting] has been removed." - if(LIGHT_BURNED) - . += "The [fitting] is burnt out." - if(LIGHT_BROKEN) - . += "The [fitting] has been smashed." - if(cell) - . += "Its backup power charge meter reads [round((cell.charge / cell.maxcharge) * 100, 0.1)]%." - -*/ - -// attack with item - insert light (if right type), otherwise try to break the light - -/obj/machinery/light/attackby(obj/item/W, mob/living/user, params) - - //Light replacer code - if(istype(W, /obj/item/lightreplacer)) - var/obj/item/lightreplacer/LR = W - LR.ReplaceLight(src, user) - - // attempt to insert light - else if(istype(W, /obj/item/light)) - if(status == LIGHT_OK) - to_chat(user, "There is a [fitting] already inserted!") - else - src.add_fingerprint(user) - var/obj/item/light/L = W - if(istype(L, light_type)) - if(!user.temporarilyRemoveItemFromInventory(L)) - return - - src.add_fingerprint(user) - if(status != LIGHT_EMPTY) - drop_light_tube(user) - to_chat(user, "I replace [L].") - else - to_chat(user, "I insert [L].") - status = L.status - switchcount = L.switchcount - rigged = L.rigged - brightness = L.brightness - on = has_power() - update() - - qdel(L) - - if(on && rigged) - explode() - else - to_chat(user, "This type of light requires a [fitting]!") - - // attempt to stick weapon into light socket - else if(status == LIGHT_EMPTY) - if(W.tool_behaviour == TOOL_SCREWDRIVER) //If it's a screwdriver open it. - W.play_tool_sound(src, 75) - user.visible_message("[user.name] opens [src]'s casing.", \ - "I open [src]'s casing.", "I hear a noise.") - deconstruct() - else - to_chat(user, "I stick \the [W] into the light socket!") - if(has_power() && (W.flags_1 & CONDUCT_1)) - do_sparks(3, TRUE, src) - if (prob(75)) - electrocute_mob(user, get_area(src), src, rand(0.7,1.0), TRUE) - else - return ..() - -/obj/machinery/light/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - var/obj/structure/light_construct/newlight = null - var/cur_stage = 2 - if(!disassembled) - cur_stage = 1 - switch(fitting) - if("tube") - newlight = new /obj/structure/light_construct(src.loc) - newlight.icon_state = "tube-construct-stage[cur_stage]" - - if("bulb") - newlight = new /obj/structure/light_construct/small(src.loc) - newlight.icon_state = "bulb-construct-stage[cur_stage]" - newlight.setDir(src.dir) - newlight.stage = cur_stage - if(!disassembled) - newlight.obj_integrity = newlight.max_integrity * 0.5 - if(status != LIGHT_BROKEN) - break_light_tube() - if(status != LIGHT_EMPTY) - drop_light_tube() - new /obj/item/stack/cable_coil(loc, 1, "red") - transfer_fingerprints_to(newlight) - if(cell) - newlight.cell = cell - cell.forceMove(newlight) - cell = null - qdel(src) - -/obj/machinery/light/attacked_by(obj/item/I, mob/living/user) - ..() - if(status == LIGHT_BROKEN || status == LIGHT_EMPTY) - if(on && (I.flags_1 & CONDUCT_1)) - if(prob(12)) - electrocute_mob(user, get_area(src), src, 0.3, TRUE) - -/obj/machinery/light/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) - . = ..() - if(. && !QDELETED(src)) - if(prob(damage_amount * 5)) - break_light_tube() - - - - -/obj/machinery/light/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - switch(status) - if(LIGHT_EMPTY) - playsound(loc, 'sound/blank.ogg', 50, TRUE) - if(LIGHT_BROKEN) - playsound(loc, 'sound/blank.ogg', 90, TRUE) - else - playsound(loc, 'sound/blank.ogg', 90, TRUE) - if(BURN) - playsound(src.loc, 'sound/blank.ogg', 100, TRUE) - -// returns if the light has power /but/ is manually turned off -// if a light is turned off, it won't activate emergency power -/obj/machinery/light/proc/turned_off() - var/area/A = get_area(src) - return !A.lightswitch && A.power_light || flickering - -// returns whether this light has power -// true if area has power and lightswitch is on -/obj/machinery/light/proc/has_power() - var/area/A = get_area(src) - return A.lightswitch && A.power_light - -// returns whether this light has emergency power -// can also return if it has access to a certain amount of that power -/obj/machinery/light/proc/has_emergency_power(pwr) - if(no_emergency || !cell) - return FALSE - if(pwr ? cell.charge >= pwr : cell.charge) - return status == LIGHT_OK - -// attempts to use power from the installed emergency cell, returns true if it does and false if it doesn't -/obj/machinery/light/proc/use_emergency_power(pwr = LIGHT_EMERGENCY_POWER_USE) - if(!has_emergency_power(pwr)) - return FALSE - if(cell.charge > 300) //it's meant to handle 120 W, ya doofus - visible_message("[src] short-circuits from too powerful of a power cell!") - burn_out() - return FALSE - cell.use(pwr) - set_light(brightness * bulb_emergency_brightness_mul, max(bulb_emergency_pow_min, bulb_emergency_pow_mul * (cell.charge / cell.maxcharge)), bulb_emergency_colour) - return TRUE - - -/obj/machinery/light/proc/flicker(amount = rand(10, 20)) - set waitfor = 0 - if(flickering) - return - flickering = 1 - if(on && status == LIGHT_OK) - for(var/i = 0; i < amount; i++) - if(status != LIGHT_OK) - break - on = !on - update(0) - sleep(rand(5, 15)) - on = (status == LIGHT_OK) - update(0) - flickering = 0 - -// ai attack - make lights flicker, because why not - -/obj/machinery/light/attack_ai(mob/user) - no_emergency = !no_emergency - to_chat(user, "Emergency lights for this fixture have been [no_emergency ? "disabled" : "enabled"].") - update(FALSE) - return - -// attack with hand - remove tube/bulb -// if hands aren't protected and the light is on, burn the player - -/obj/machinery/light/attack_hand(mob/living/carbon/human/user) - . = ..() - if(.) - return - user.changeNext_move(CLICK_CD_MELEE) - add_fingerprint(user) - - -/obj/machinery/light/proc/drop_light_tube(mob/user) - var/obj/item/light/L = new light_type() - L.status = status - L.rigged = rigged - L.brightness = brightness - - // light item inherits the switchcount, then zero it - L.switchcount = switchcount - switchcount = 0 - - L.update() - L.forceMove(loc) - - if(user) //puts it in our active hand - L.add_fingerprint(user) - user.put_in_active_hand(L) - - status = LIGHT_EMPTY - update() - return L - -/obj/machinery/light/attack_tk(mob/user) - if(status == LIGHT_EMPTY) - to_chat(user, "There is no [fitting] in this light!") - return - - to_chat(user, "I telekinetically remove the light [fitting].") - // create a light tube/bulb item and put it in the user's hand - var/obj/item/light/L = drop_light_tube() - L.attack_tk(user) - - -// break the light and make sparks if was on - -/obj/machinery/light/proc/break_light_tube(skip_sound_and_sparks = 0) - if(status == LIGHT_EMPTY || status == LIGHT_BROKEN) - return - - if(!skip_sound_and_sparks) - if(status == LIGHT_OK || status == LIGHT_BURNED) - playsound(src.loc, 'sound/blank.ogg', 75, TRUE) - if(on) - do_sparks(3, TRUE, src) - status = LIGHT_BROKEN - update() - -/obj/machinery/light/proc/fix() - if(status == LIGHT_OK) - return - status = LIGHT_OK - brightness = initial(brightness) - on = TRUE - update() - -/obj/machinery/light/tesla_act(power, tesla_flags) - if(tesla_flags & TESLA_MACHINE_EXPLOSIVE) - explosion(src,0,0,0,flame_range = 5, adminlog = 0) - qdel(src) - else - return ..() - -// called when area power state changes -/obj/machinery/light/power_change() - SHOULD_CALL_PARENT(FALSE) - var/area/A = get_area(src) - seton(A.lightswitch && A.power_light) - -// called when on fire - -/obj/machinery/light/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(prob(max(0, exposed_temperature - 673))) //0% at <400C, 100% at >500C - break_light_tube() - -// explode the light - -/obj/machinery/light/proc/explode() - set waitfor = 0 - var/turf/T = get_turf(src.loc) - break_light_tube() // break it first to give a warning - sleep(2) - explosion(T, 0, 0, 2, 2) - sleep(1) - qdel(src) - -// the light item -// can be tube or bulb subtypes -// will fit into empty /obj/machinery/light of the corresponding type - -/obj/item/light - icon = 'icons/obj/lighting.dmi' - force = 2 - throwforce = 5 - w_class = WEIGHT_CLASS_TINY - var/status = LIGHT_OK // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN - var/base_state - var/switchcount = 0 // number of times switched - custom_materials = list(/datum/material/glass=100) - grind_results = list(/datum/reagent/silicon = 5, /datum/reagent/nitrogen = 10) //Nitrogen is used as a cheaper alternative to argon in incandescent lighbulbs - var/rigged = FALSE // true if rigged to explode - var/brightness = 2 //how much light it gives off - -/obj/item/light/suicide_act(mob/living/carbon/user) - if (status == LIGHT_BROKEN) - user.visible_message("[user] begins to stab [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return BRUTELOSS - else - user.visible_message("[user] begins to eat \the [src]! It looks like [user.p_theyre()] not very bright!") - shatter() - return BRUTELOSS - -/obj/item/light/tube - name = "light tube" - desc = "" - icon_state = "ltube" - base_state = "ltube" - item_state = "c_tube" - brightness = 8 - -/obj/item/light/tube/broken - status = LIGHT_BROKEN - -/obj/item/light/bulb - name = "light bulb" - desc = "" - icon_state = "lbulb" - base_state = "lbulb" - item_state = "contvapour" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - brightness = 4 - -/obj/item/light/bulb/broken - status = LIGHT_BROKEN - -/obj/item/light/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(!..()) //not caught by a mob - shatter() - -// update the icon state and description of the light - -/obj/item/light/proc/update() - switch(status) - if(LIGHT_OK) - icon_state = base_state - desc = "" - if(LIGHT_BURNED) - icon_state = "[base_state]-burned" - desc = "" - if(LIGHT_BROKEN) - icon_state = "[base_state]-broken" - desc = "" - -/obj/item/light/Initialize() - . = ..() - update() - -/obj/item/light/ComponentInitialize() - . = ..() - AddComponent(/datum/component/caltrop, force) - -/obj/item/light/Crossed(mob/living/L) - . = ..() - if(istype(L) && has_gravity(loc)) - playsound(loc, 'sound/blank.ogg', HAS_TRAIT(L, TRAIT_LIGHT_STEP) ? 30 : 50, TRUE) - if(status == LIGHT_BURNED || status == LIGHT_OK) - shatter() - -// attack bulb/tube with object -// if a syringe, can inject plasma to make it explode -/obj/item/light/attackby(obj/item/I, mob/user, params) - ..() - if(istype(I, /obj/item/reagent_containers/syringe)) - var/obj/item/reagent_containers/syringe/S = I - - to_chat(user, "I inject the solution into \the [src].") - - if(S.reagents.has_reagent(/datum/reagent/toxin/plasma, 5)) - - rigged = TRUE - - S.reagents.clear_reagents() - else - ..() - return - -/obj/item/light/attack(mob/living/M, mob/living/user, def_zone) - ..() - shatter() - -/obj/item/light/attack_obj(obj/O, mob/living/user) - ..() - shatter() - -/obj/item/light/proc/shatter() - if(status == LIGHT_OK || status == LIGHT_BURNED) - visible_message("[src] shatters.","I hear a small glass object shatter.") - status = LIGHT_BROKEN - force = 5 - playsound(src.loc, 'sound/blank.ogg', 75, TRUE) - if(rigged) - atmos_spawn_air("plasma=5") //5u of plasma are required to rig a light bulb/tube - update() - - -/obj/machinery/light/floor - name = "floor light" - icon = 'icons/obj/lighting.dmi' - base_state = "floor" // base description and icon_state - icon_state = "floor" - brightness = 4 - layer = 2.5 - light_type = /obj/item/light/bulb - fitting = "bulb" diff --git a/code/modules/power/monitor.dm b/code/modules/power/monitor.dm deleted file mode 100644 index 3d256225c4..0000000000 --- a/code/modules/power/monitor.dm +++ /dev/null @@ -1,125 +0,0 @@ -//modular computer program version is located in code\modules\modular_computers\file_system\programs\powermonitor.dm, /datum/computer_file/program/power_monitor - -/obj/machinery/computer/monitor - name = "power monitoring console" - desc = "" - icon_screen = "power" - icon_keyboard = "power_key" - light_color = LIGHT_COLOR_YELLOW - use_power = ACTIVE_POWER_USE - idle_power_usage = 20 - active_power_usage = 100 - circuit = /obj/item/circuitboard/computer/powermonitor - tgui_id = "power_monitor" - ui_style = "ntos" - ui_x = 550 - ui_y = 700 - - var/obj/structure/cable/attached_wire - var/obj/machinery/power/apc/local_apc - - var/list/history = list() - var/record_size = 60 - var/record_interval = 50 - var/next_record = 0 - var/is_secret_monitor = FALSE - -/obj/machinery/computer/monitor/secret //Hides the power monitor (such as ones on ruins & CentCom) from PDA's to prevent metagaming. - name = "outdated power monitoring console" - desc = "" - circuit = /obj/item/circuitboard/computer/powermonitor/secret - is_secret_monitor = TRUE - -/obj/machinery/computer/monitor/secret/examine(mob/user) - . = ..() - . += "It's operating system seems quite outdated... It doesn't seem like it'd be compatible with the latest remote NTOS monitoring systems." - -/obj/machinery/computer/monitor/Initialize() - . = ..() - search() - history["supply"] = list() - history["demand"] = list() - -/obj/machinery/computer/monitor/process() - if(!get_powernet()) - use_power = IDLE_POWER_USE - search() - else - use_power = ACTIVE_POWER_USE - record() - -/obj/machinery/computer/monitor/proc/search() //keep in sync with /datum/computer_file/program/power_monitor's version - var/turf/T = get_turf(src) - attached_wire = locate(/obj/structure/cable) in T - if(attached_wire) - return - var/area/A = get_area(src) //if the computer isn't directly connected to a wire, attempt to find the APC powering it to pull it's powernet instead - if(!A) - return - local_apc = A.get_apc() - if(!local_apc) - return - if(!local_apc.terminal) //this really shouldn't happen without badminnery. - local_apc = null - -/obj/machinery/computer/monitor/proc/get_powernet() //keep in sync with /datum/computer_file/program/power_monitor's version - if(attached_wire || (local_apc && local_apc.terminal)) - return attached_wire ? attached_wire.powernet : local_apc.terminal.powernet - return FALSE - -/obj/machinery/computer/monitor/proc/record() //keep in sync with /datum/computer_file/program/power_monitor's version - if(world.time >= next_record) - next_record = world.time + record_interval - - var/datum/powernet/connected_powernet = get_powernet() - - var/list/supply = history["supply"] - if(connected_powernet) - supply += connected_powernet.viewavail - if(supply.len > record_size) - supply.Cut(1, 2) - - var/list/demand = history["demand"] - if(connected_powernet) - demand += connected_powernet.viewload - if(demand.len > record_size) - demand.Cut(1, 2) - -/obj/machinery/computer/monitor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, tgui_id, name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/computer/monitor/ui_data() - var/datum/powernet/connected_powernet = get_powernet() - var/list/data = list() - data["stored"] = record_size - data["interval"] = record_interval / 10 - data["attached"] = connected_powernet ? TRUE : FALSE - data["history"] = history - data["areas"] = list() - - if(connected_powernet) - data["supply"] = DisplayPower(connected_powernet.viewavail) - data["demand"] = DisplayPower(connected_powernet.viewload) - for(var/obj/machinery/power/terminal/term in connected_powernet.nodes) - var/obj/machinery/power/apc/A = term.master - if(istype(A)) - var/cell_charge - if(!A.cell) - cell_charge = 0 - else - cell_charge = A.cell.percent() - data["areas"] += list(list( - "name" = A.area.name, - "charge" = cell_charge, - "load" = DisplayPower(A.lastused_total), - "charging" = A.charging, - "eqp" = A.equipment, - "lgt" = A.lighting, - "env" = A.environ - )) - - return data diff --git a/code/modules/power/multiz.dm b/code/modules/power/multiz.dm deleted file mode 100644 index 222902ebc1..0000000000 --- a/code/modules/power/multiz.dm +++ /dev/null @@ -1,80 +0,0 @@ -/obj/machinery/power/deck_relay //This bridges powernets - name = "Multi-deck power adapter" - desc = "" - icon = 'icons/obj/power.dmi' - icon_state = "cablerelay-off" - var/obj/machinery/power/deck_relay/below ///The relay that's below us (for bridging powernets) - var/obj/machinery/power/deck_relay/above ///The relay that's above us (for bridging powernets) - anchored = TRUE - density = FALSE - -/obj/machinery/power/deck_relay/attackby(obj/item/I,mob/user) - if(default_unfasten_wrench(user, I)) - return FALSE - . = ..() - -/obj/machinery/power/deck_relay/process() - if(!anchored) - icon_state = "cablerelay-off" - if(above) //Lose connections - above.below = null - if(below) - below.above = null - return - refresh() //Sometimes the powernets get lost, so we need to keep checking. - if(powernet && (powernet.avail <= 0)) // is it powered? - icon_state = "cablerelay-off" - else - icon_state = "cablerelay-on" - if(!below || QDELETED(below) || !above || QDELETED(above)) - icon_state = "cablerelay-off" - find_relays() - -///Allows you to scan the relay with a multitool to see stats. -/obj/machinery/power/deck_relay/multitool_act(mob/user, obj/item/I) - if(powernet && (powernet.avail > 0)) // is it powered? - to_chat(user, "Total power: [DisplayPower(powernet.avail)]\nLoad: [DisplayPower(powernet.load)]\nExcess power: [DisplayPower(surplus())]") - if(!powernet || below.powernet != powernet) - icon_state = "cablerelay-off" - to_chat(user, "Powernet connection lost. Attempting to re-establish. Ensure the relays below this one are connected too.") - find_relays() - addtimer(CALLBACK(src, PROC_REF(refresh)), 20) //Wait a bit so we can find the one below, then get powering - return TRUE - -/obj/machinery/power/deck_relay/Initialize() - . = ..() - addtimer(CALLBACK(src, PROC_REF(find_relays)), 30) - addtimer(CALLBACK(src, PROC_REF(refresh)), 50) //Wait a bit so we can find the one below, then get powering - -///Handles re-acquiring + merging powernets found by find_relays() -/obj/machinery/power/deck_relay/proc/refresh() - if(above) - above.merge(src) - if(below) - below.merge(src) - -/obj/machinery/power/deck_relay/proc/merge(obj/machinery/power/deck_relay/DR) - if(!DR) - return - var/turf/merge_from = get_turf(DR) - var/turf/merge_to = get_turf(src) - var/obj/structure/cable/C = merge_from.get_cable_node() - var/obj/structure/cable/XR = merge_to.get_cable_node() - if(C && XR) - merge_powernets(XR.powernet,C.powernet)//Bridge the powernets. - -///Locates relays that are above and below this object -/obj/machinery/power/deck_relay/proc/find_relays() - var/turf/T = get_turf(src) - if(!T || !istype(T)) - return FALSE - below = null //in case we're re-establishing - var/obj/structure/cable/C = T.get_cable_node() //check if we have a node cable on the machine turf, the first found is picked - if(C && C.powernet) - C.powernet.add_machine(src) //Nice we're in. - powernet = C.powernet - below = locate(/obj/machinery/power/deck_relay) in(SSmapping.get_turf_below(T)) - above = locate(/obj/machinery/power/deck_relay) in(SSmapping.get_turf_above(T)) - if(below || above) - icon_state = "cablerelay-on" - return TRUE diff --git a/code/modules/power/pipecleaners.dm b/code/modules/power/pipecleaners.dm deleted file mode 100644 index cc10c7fdb6..0000000000 --- a/code/modules/power/pipecleaners.dm +++ /dev/null @@ -1,495 +0,0 @@ -GLOBAL_LIST_INIT(pipe_cleaner_colors, list( - "yellow" = "#ffff00", - "green" = "#00aa00", - "blue" = "#1919c8", - "pink" = "#ff3cc8", - "orange" = "#ff8000", - "cyan" = "#00ffff", - "white" = "#ffffff", - "red" = "#ff0000" - )) - -//This is the old cable code, but minus any actual powernet logic -//Wireart is fun - -/////////////////////////////// -//CABLE STRUCTURE -/////////////////////////////// - - -//////////////////////////////// -// Definitions -//////////////////////////////// - -/* Cable directions (d1 and d2) - - -* 9 1 5 -* \ | / -* 8 - 0 - 4 -* / | \ -* 10 2 6 - -If d1 = 0 and d2 = 0, there's no pipe_cleaner -If d1 = 0 and d2 = dir, it's a O-X pipe_cleaner, getting from the center of the tile to dir (knot pipe_cleaner) -If d1 = dir1 and d2 = dir2, it's a full X-X pipe_cleaner, getting from dir1 to dir2 -By design, d1 is the smallest direction and d2 is the highest -*/ - -/obj/structure/pipe_cleaner - name = "pipe cleaner" - desc = "" - icon = 'icons/obj/power_cond/pipe_cleaner.dmi' - icon_state = "0-1" - layer = WIRE_LAYER //Above hidden pipes, GAS_PIPE_HIDDEN_LAYER - anchored = TRUE - obj_flags = CAN_BE_HIT | ON_BLUEPRINTS - var/d1 = 0 // pipe_cleaner direction 1 (see above) - var/d2 = 1 // pipe_cleaner direction 2 (see above) - var/obj/item/stack/pipe_cleaner_coil/stored - - var/pipe_cleaner_color = "red" - color = "#ff0000" - -/obj/structure/pipe_cleaner/yellow - pipe_cleaner_color = "yellow" - color = "#ffff00" - -/obj/structure/pipe_cleaner/green - pipe_cleaner_color = "green" - color = "#00aa00" - -/obj/structure/pipe_cleaner/blue - pipe_cleaner_color = "blue" - color = "#1919c8" - -/obj/structure/pipe_cleaner/pink - pipe_cleaner_color = "pink" - color = "#ff3cc8" - -/obj/structure/pipe_cleaner/orange - pipe_cleaner_color = "orange" - color = "#ff8000" - -/obj/structure/pipe_cleaner/cyan - pipe_cleaner_color = "cyan" - color = "#00ffff" - -/obj/structure/pipe_cleaner/white - pipe_cleaner_color = "white" - color = "#ffffff" - -// the power pipe_cleaner object -/obj/structure/pipe_cleaner/Initialize(mapload, param_color) - . = ..() - - // ensure d1 & d2 reflect the icon_state for entering and exiting pipe_cleaner - var/dash = findtext(icon_state, "-") - d1 = text2num( copytext( icon_state, 1, dash ) ) - d2 = text2num( copytext( icon_state, dash+1 ) ) - - if(d1) - stored = new/obj/item/stack/pipe_cleaner_coil(null,2,pipe_cleaner_color) - else - stored = new/obj/item/stack/pipe_cleaner_coil(null,1,pipe_cleaner_color) - - var/list/pipe_cleaner_colors = GLOB.pipe_cleaner_colors - pipe_cleaner_color = param_color || pipe_cleaner_color || pick(pipe_cleaner_colors) - if(pipe_cleaner_colors[pipe_cleaner_color]) - pipe_cleaner_color = pipe_cleaner_colors[pipe_cleaner_color] - update_icon() - -/obj/structure/pipe_cleaner/Destroy() // called when a pipe_cleaner is deleted - //If we have a stored item at this point, lets just delete it, since that should be - //handled by deconstruction - if(stored) - QDEL_NULL(stored) - return ..() // then go ahead and delete the pipe_cleaner - -/obj/structure/pipe_cleaner/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - var/turf/T = get_turf(loc) - if(T) - stored.forceMove(T) - stored = null - else - qdel(stored) - qdel(src) - -/////////////////////////////////// -// General procedures -/////////////////////////////////// - -/obj/structure/pipe_cleaner/update_icon() - icon_state = "[d1]-[d2]" - color = null - add_atom_colour(pipe_cleaner_color, FIXED_COLOUR_PRIORITY) - -// Items usable on a pipe_cleaner : -// - Wirecutters : cut it duh ! -// - pipe cleaner coil : merge pipe cleaners -// -/obj/structure/pipe_cleaner/proc/handlecable(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_WIRECUTTER) - cut_pipe_cleaner(user) - return - - else if(istype(W, /obj/item/stack/pipe_cleaner_coil)) - var/obj/item/stack/pipe_cleaner_coil/coil = W - if (coil.get_amount() < 1) - to_chat(user, "Not enough pipe cleaner!") - return - coil.pipe_cleaner_join(src, user) - - add_fingerprint(user) - -/obj/structure/pipe_cleaner/proc/cut_pipe_cleaner(mob/user) - user.visible_message("[user] pulls up the pipe cleaner.", "I pull up the pipe cleaner.") - stored.add_fingerprint(user) - investigate_log("was pulled up by [key_name(usr)] in [AREACOORD(src)]", INVESTIGATE_WIRES) - deconstruct() - -/obj/structure/pipe_cleaner/attackby(obj/item/W, mob/user, params) - handlecable(W, user, params) - - -/obj/structure/pipe_cleaner/singularity_pull(S, current_size) - ..() - if(current_size >= STAGE_FIVE) - deconstruct() - -/obj/structure/pipe_cleaner/proc/update_stored(length = 1, colorC = "red") - stored.amount = length - stored.pipe_cleaner_color = colorC - stored.update_icon() - -/obj/structure/pipe_cleaner/AltClick(mob/living/user) - if(!user.canUseTopic(src, BE_CLOSE)) - return - cut_pipe_cleaner(user) - -/////////////////////////////////////////////// -// The pipe cleaner coil object, used for laying pipe cleaner -/////////////////////////////////////////////// - -//////////////////////////////// -// Definitions -//////////////////////////////// - -/obj/item/stack/pipe_cleaner_coil - name = "pipe cleaner coil" - desc = "" - custom_price = 15 - gender = NEUTER //That's a pipe_cleaner coil sounds better than that's some pipe_cleaner coils - icon = 'icons/obj/power.dmi' - icon_state = "pipecleaner" - item_state = "pipecleaner" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - max_amount = MAXCOIL - amount = MAXCOIL - merge_type = /obj/item/stack/pipe_cleaner_coil // This is here to let its children merge between themselves - var/pipe_cleaner_color = "red" - throwforce = 0 - w_class = WEIGHT_CLASS_SMALL - throw_speed = 3 - throw_range = 5 - custom_materials = list(/datum/material/iron=10, /datum/material/glass=5) - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT - attack_verb = list("whipped", "lashed", "disciplined", "flogged") - singular_name = "pipe cleaner piece" - full_w_class = WEIGHT_CLASS_SMALL - grind_results = list("copper" = 2) //2 copper per pipe_cleaner in the coil - usesound = 'sound/blank.ogg' - -/obj/item/stack/pipe_cleaner_coil/cyborg - is_cyborg = 1 - custom_materials = null - cost = 1 - -/obj/item/stack/pipe_cleaner_coil/cyborg/attack_self(mob/user) - var/pipe_cleaner_color = input(user,"Pick a pipe cleaner color.","Cable Color") in sortList(list("red","yellow","green","blue","pink","orange","cyan","white")) - pipe_cleaner_color = pipe_cleaner_color - update_icon() - -/obj/item/stack/pipe_cleaner_coil/suicide_act(mob/user) - if(locate(/obj/structure/chair/stool) in get_turf(user)) - user.visible_message("[user] is making a noose with [src]! It looks like [user.p_theyre()] trying to commit suicide!") - else - user.visible_message("[user] is strangling [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return(OXYLOSS) - -/obj/item/stack/pipe_cleaner_coil/Initialize(mapload, new_amount = null, param_color = null) - . = ..() - - var/list/pipe_cleaner_colors = GLOB.pipe_cleaner_colors - pipe_cleaner_color = param_color || pipe_cleaner_color || pick(pipe_cleaner_colors) - if(pipe_cleaner_colors[pipe_cleaner_color]) - pipe_cleaner_color = pipe_cleaner_colors[pipe_cleaner_color] - - pixel_x = rand(-2,2) - pixel_y = rand(-2,2) - update_icon() - -/////////////////////////////////// -// General procedures -/////////////////////////////////// - - -/obj/item/stack/pipe_cleaner_coil/update_icon() - icon_state = "[initial(item_state)][amount < 3 ? amount : ""]" - name = "pipe cleaner [amount < 3 ? "piece" : "coil"]" - color = null - add_atom_colour(pipe_cleaner_color, FIXED_COLOUR_PRIORITY) - -/obj/item/stack/pipe_cleaner_coil/attack_hand(mob/user) - . = ..() - if(.) - return - var/obj/item/stack/pipe_cleaner_coil/new_pipe_cleaner = ..() - if(istype(new_pipe_cleaner)) - new_pipe_cleaner.pipe_cleaner_color = pipe_cleaner_color - new_pipe_cleaner.update_icon() - -//add pipe_cleaners to the stack -/obj/item/stack/pipe_cleaner_coil/proc/give(extra) - if(amount + extra > max_amount) - amount = max_amount - else - amount += extra - update_icon() - - - -/////////////////////////////////////////////// -// Cable laying procedures -////////////////////////////////////////////// - -/obj/item/stack/pipe_cleaner_coil/proc/get_new_pipe_cleaner(location) - var/path = /obj/structure/pipe_cleaner - return new path(location, pipe_cleaner_color) - -// called when pipe_cleaner_coil is clicked on a turf -/obj/item/stack/pipe_cleaner_coil/proc/place_turf(turf/T, mob/user, dirnew) - if(!isturf(user.loc)) - return - - if(!isturf(T) || !T.can_have_cabling()) - to_chat(user, "I can only lay pipe cleaners on a solid floor!") - return - - if(get_amount() < 1) // Out of pipe_cleaner - to_chat(user, "There is no pipe cleaner left!") - return - - if(get_dist(T,user) > 1) // Too far - to_chat(user, "I can't lay pipe cleaner at a place that far away!") - return - - var/dirn - if(!dirnew) //If we weren't given a direction, come up with one! (Called as null from catwalk.dm and floor.dm) - if(user.loc == T) - dirn = user.dir //If laying on the tile we're on, lay in the direction we're facing - else - dirn = get_dir(T, user) - else - dirn = dirnew - - for(var/obj/structure/pipe_cleaner/LC in T) - if(LC.d2 == dirn && LC.d1 == 0) - to_chat(user, "There's already a pipe leaner at that position!") - return - - var/obj/structure/pipe_cleaner/C = get_new_pipe_cleaner(T) - - //set up the new pipe_cleaner - C.d1 = 0 //it's a O-X node pipe_cleaner - C.d2 = dirn - C.add_fingerprint(user) - C.update_icon() - - use(1) - - return C - -// called when pipe_cleaner_coil is click on an installed obj/pipe_cleaner -// or click on a turf that already contains a "node" pipe_cleaner -/obj/item/stack/pipe_cleaner_coil/proc/pipe_cleaner_join(obj/structure/pipe_cleaner/C, mob/user, showerror = TRUE, forceddir) - var/turf/U = user.loc - if(!isturf(U)) - return - - var/turf/T = C.loc - - if(!isturf(T)) // sanity check - return - - if(get_dist(C, user) > 1) // make sure it's close enough - to_chat(user, "I can't lay pipe cleaner at a place that far away!") - return - - - if(U == T && !forceddir) //if clicked on the turf we're standing on and a direction wasn't supplied, try to put a pipe_cleaner in the direction we're facing - place_turf(T,user) - return - - var/dirn = get_dir(C, user) - if(forceddir) - dirn = forceddir - - // one end of the clicked pipe_cleaner is pointing towards us and no direction was supplied - if((C.d1 == dirn || C.d2 == dirn) && !forceddir) - if(!U.can_have_cabling()) //checking if it's a plating or catwalk - if (showerror) - to_chat(user, "I can only lay pipe cleaners on catwalks and plating!") - return - else - // pipe_cleaner is pointing at us, we're standing on an open tile - // so create a stub pointing at the clicked pipe_cleaner on our tile - - var/fdirn = turn(dirn, 180) // the opposite direction - - for(var/obj/structure/pipe_cleaner/LC in U) // check to make sure there's not a pipe_cleaner there already - if(LC.d1 == fdirn || LC.d2 == fdirn) - if (showerror) - to_chat(user, "There's already a pipe cleaner at that position!") - return - - var/obj/structure/pipe_cleaner/NC = get_new_pipe_cleaner(U) - - NC.d1 = 0 - NC.d2 = fdirn - NC.add_fingerprint(user) - NC.update_icon() - - use(1) - - return - - // exisiting pipe_cleaner doesn't point at our position or we have a supplied direction, so see if it's a stub - else if(C.d1 == 0) - // if so, make it a full pipe_cleaner pointing from it's old direction to our dirn - var/nd1 = C.d2 // these will be the new directions - var/nd2 = dirn - - - if(nd1 > nd2) // swap directions to match icons/states - nd1 = dirn - nd2 = C.d2 - - - for(var/obj/structure/pipe_cleaner/LC in T) // check to make sure there's no matching pipe_cleaner - if(LC == C) // skip the pipe_cleaner we're interacting with - continue - if((LC.d1 == nd1 && LC.d2 == nd2) || (LC.d1 == nd2 && LC.d2 == nd1) ) // make sure no pipe_cleaner matches either direction - if (showerror) - to_chat(user, "There's already a pipe cleaner at that position!") - - return - - - C.update_icon() - - C.d1 = nd1 - C.d2 = nd2 - - //updates the stored pipe_cleaner coil - C.update_stored(2, pipe_cleaner_color) - - C.add_fingerprint(user) - C.update_icon() - - use(1) - - return - -////////////////////////////// -// Misc. -///////////////////////////// - -/obj/item/stack/pipe_cleaner_coil/red - pipe_cleaner_color = "red" - color = "#ff0000" - -/obj/item/stack/pipe_cleaner_coil/yellow - pipe_cleaner_color = "yellow" - color = "#ffff00" - -/obj/item/stack/pipe_cleaner_coil/blue - pipe_cleaner_color = "blue" - color = "#1919c8" - -/obj/item/stack/pipe_cleaner_coil/green - pipe_cleaner_color = "green" - color = "#00aa00" - -/obj/item/stack/pipe_cleaner_coil/pink - pipe_cleaner_color = "pink" - color = "#ff3ccd" - -/obj/item/stack/pipe_cleaner_coil/orange - pipe_cleaner_color = "orange" - color = "#ff8000" - -/obj/item/stack/pipe_cleaner_coil/cyan - pipe_cleaner_color = "cyan" - color = "#00ffff" - -/obj/item/stack/pipe_cleaner_coil/white - pipe_cleaner_color = "white" - -/obj/item/stack/pipe_cleaner_coil/random - pipe_cleaner_color = null - color = "#ffffff" - - -/obj/item/stack/pipe_cleaner_coil/random/five - amount = 5 - -/obj/item/stack/pipe_cleaner_coil/cut - amount = null - icon_state = "pipecleaner2" - -/obj/item/stack/pipe_cleaner_coil/cut/Initialize(mapload) - . = ..() - if(!amount) - amount = rand(1,2) - pixel_x = rand(-2,2) - pixel_y = rand(-2,2) - update_icon() - -/obj/item/stack/pipe_cleaner_coil/cut/red - pipe_cleaner_color = "red" - color = "#ff0000" - -/obj/item/stack/pipe_cleaner_coil/cut/yellow - pipe_cleaner_color = "yellow" - color = "#ffff00" - -/obj/item/stack/pipe_cleaner_coil/cut/blue - pipe_cleaner_color = "blue" - color = "#1919c8" - -/obj/item/stack/pipe_cleaner_coil/cut/green - pipe_cleaner_color = "green" - color = "#00aa00" - -/obj/item/stack/pipe_cleaner_coil/cut/pink - pipe_cleaner_color = "pink" - color = "#ff3ccd" - -/obj/item/stack/pipe_cleaner_coil/cut/orange - pipe_cleaner_color = "orange" - color = "#ff8000" - -/obj/item/stack/pipe_cleaner_coil/cut/cyan - pipe_cleaner_color = "cyan" - color = "#00ffff" - -/obj/item/stack/pipe_cleaner_coil/cut/white - pipe_cleaner_color = "white" - -/obj/item/stack/pipe_cleaner_coil/cut/random - pipe_cleaner_color = null - color = "#ffffff" diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm deleted file mode 100644 index b91b44ac25..0000000000 --- a/code/modules/power/port_gen.dm +++ /dev/null @@ -1,294 +0,0 @@ -//Baseline portable generator. Has all the default handling. Not intended to be used on it's own (since it generates unlimited power). -/obj/machinery/power/port_gen - name = "portable generator" - desc = "" - icon = 'icons/obj/power.dmi' - icon_state = "portgen0_0" - density = TRUE - anchored = FALSE - use_power = NO_POWER_USE - ui_x = 450 - ui_y = 340 - - var/active = FALSE - var/power_gen = 5000 - var/power_output = 1 - var/consumption = 0 - var/base_icon = "portgen0" - var/datum/looping_sound/generator/soundloop - - interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT | INTERACT_ATOM_REQUIRES_ANCHORED - -/obj/machinery/power/port_gen/Initialize() - . = ..() - soundloop = new(list(src), active) - -/obj/machinery/power/port_gen/Destroy() - QDEL_NULL(soundloop) - return ..() - -/obj/machinery/power/port_gen/should_have_node() - return anchored - -/obj/machinery/power/port_gen/connect_to_network() - if(!anchored) - return FALSE - . = ..() - -/obj/machinery/power/port_gen/proc/HasFuel() //Placeholder for fuel check. - return TRUE - -/obj/machinery/power/port_gen/proc/UseFuel() //Placeholder for fuel use. - return - -/obj/machinery/power/port_gen/proc/DropFuel() - return - -/obj/machinery/power/port_gen/proc/handleInactive() - return - -/obj/machinery/power/port_gen/proc/TogglePower() - if(active) - active = FALSE - update_icon() - soundloop.stop() - else if(HasFuel()) - active = TRUE - START_PROCESSING(SSmachines, src) - update_icon() - soundloop.start() - -/obj/machinery/power/port_gen/update_icon() - icon_state = "[base_icon]_[active]" - -/obj/machinery/power/port_gen/process() - if(active) - if(!HasFuel() || !anchored) - TogglePower() - return - if(powernet) - add_avail(power_gen * power_output) - UseFuel() - else - handleInactive() - -/obj/machinery/power/port_gen/examine(mob/user) - . = ..() - . += "It is[!active?"n't":""] running." - -///////////////// -// P.A.C.M.A.N // -///////////////// -/obj/machinery/power/port_gen/pacman - name = "\improper P.A.C.M.A.N.-type portable generator" - circuit = /obj/item/circuitboard/machine/pacman - var/sheets = 0 - var/max_sheets = 100 - var/sheet_name = "" - var/sheet_path = /obj/item/stack/sheet/mineral/plasma - var/sheet_left = 0 // How much is left of the sheet - var/time_per_sheet = 260 - var/current_heat = 0 - -/obj/machinery/power/port_gen/pacman/Initialize() - . = ..() - if(anchored) - connect_to_network() - -/obj/machinery/power/port_gen/pacman/Initialize() - . = ..() - - var/obj/S = sheet_path - sheet_name = initial(S.name) - -/obj/machinery/power/port_gen/pacman/Destroy() - DropFuel() - return ..() - -/obj/machinery/power/port_gen/pacman/RefreshParts() - var/temp_rating = 0 - var/consumption_coeff = 0 - for(var/obj/item/stock_parts/SP in component_parts) - if(istype(SP, /obj/item/stock_parts/matter_bin)) - max_sheets = SP.rating * SP.rating * 50 - else if(istype(SP, /obj/item/stock_parts/capacitor)) - temp_rating += SP.rating - else - consumption_coeff += SP.rating - power_gen = round(initial(power_gen) * temp_rating * 2) - consumption = consumption_coeff - -/obj/machinery/power/port_gen/pacman/examine(mob/user) - . = ..() - . += "The generator has [sheets] units of [sheet_name] fuel left, producing [DisplayPower(power_gen)] per cycle." - if(anchored) - . += "It is anchored to the ground." - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Fuel efficiency increased by [(consumption*100)-100]%." - -/obj/machinery/power/port_gen/pacman/HasFuel() - if(sheets >= 1 / (time_per_sheet / power_output) - sheet_left) - return TRUE - return FALSE - -/obj/machinery/power/port_gen/pacman/DropFuel() - if(sheets) - new sheet_path(drop_location(), sheets) - sheets = 0 - -/obj/machinery/power/port_gen/pacman/UseFuel() - var/needed_sheets = 1 / (time_per_sheet * consumption / power_output) - var/temp = min(needed_sheets, sheet_left) - needed_sheets -= temp - sheet_left -= temp - sheets -= round(needed_sheets) - needed_sheets -= round(needed_sheets) - if (sheet_left <= 0 && sheets > 0) - sheet_left = 1 - needed_sheets - sheets-- - - var/lower_limit = 56 + power_output * 10 - var/upper_limit = 76 + power_output * 10 - var/bias = 0 - if (power_output > 4) - upper_limit = 400 - bias = power_output - consumption * (4 - consumption) - if (current_heat < lower_limit) - current_heat += 4 - consumption - else - current_heat += rand(-7 + bias, 7 + bias) - if (current_heat < lower_limit) - current_heat = lower_limit - if (current_heat > upper_limit) - current_heat = upper_limit - - if (current_heat > 300) - overheat() - qdel(src) - -/obj/machinery/power/port_gen/pacman/handleInactive() - current_heat = max(current_heat - 2, 0) - if(current_heat == 0) - STOP_PROCESSING(SSmachines, src) - -/obj/machinery/power/port_gen/pacman/proc/overheat() - explosion(src.loc, 2, 5, 2, -1) - -/obj/machinery/power/port_gen/pacman/attackby(obj/item/O, mob/user, params) - if(istype(O, sheet_path)) - var/obj/item/stack/addstack = O - var/amount = min((max_sheets - sheets), addstack.amount) - if(amount < 1) - to_chat(user, "The [src.name] is full!") - return - to_chat(user, "I add [amount] sheets to the [src.name].") - sheets += amount - addstack.use(amount) - return - else if(!active) - if(O.tool_behaviour == TOOL_WRENCH) - if(!anchored && !isinspace()) - anchored = TRUE - connect_to_network() - to_chat(user, "I secure the generator to the floor.") - else if(anchored) - anchored = FALSE - disconnect_from_network() - to_chat(user, "I unsecure the generator from the floor.") - - playsound(src, 'sound/blank.ogg', 50, TRUE) - return - else if(O.tool_behaviour == TOOL_SCREWDRIVER) - panel_open = !panel_open - O.play_tool_sound(src) - if(panel_open) - to_chat(user, "I open the access panel.") - else - to_chat(user, "I close the access panel.") - return - else if(default_deconstruction_crowbar(O)) - return - return ..() - -/obj/machinery/power/port_gen/pacman/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - obj_flags |= EMAGGED - emp_act(EMP_HEAVY) - -/obj/machinery/power/port_gen/pacman/attack_ai(mob/user) - interact(user) - -/obj/machinery/power/port_gen/pacman/attack_paw(mob/user) - interact(user) - -/obj/machinery/power/port_gen/pacman/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "portable_generator", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/power/port_gen/pacman/ui_data() - var/data = list() - - data["active"] = active - data["sheet_name"] = capitalize(sheet_name) - data["sheets"] = sheets - data["stack_percent"] = round(sheet_left * 100, 0.1) - - data["anchored"] = anchored - data["connected"] = (powernet == null ? 0 : 1) - data["ready_to_boot"] = anchored && HasFuel() - data["power_generated"] = DisplayPower(power_gen) - data["power_output"] = DisplayPower(power_gen * power_output) - data["power_available"] = (powernet == null ? 0 : DisplayPower(avail())) - data["current_heat"] = current_heat - . = data - -/obj/machinery/power/port_gen/pacman/ui_act(action, params) - if(..()) - return - switch(action) - if("toggle_power") - TogglePower() - . = TRUE - - if("eject") - if(!active) - DropFuel() - . = TRUE - - if("lower_power") - if (power_output > 1) - power_output-- - . = TRUE - - if("higher_power") - if (power_output < 4 || (obj_flags & EMAGGED)) - power_output++ - . = TRUE - -/obj/machinery/power/port_gen/pacman/super - name = "\improper S.U.P.E.R.P.A.C.M.A.N.-type portable generator" - icon_state = "portgen1_0" - base_icon = "portgen1" - circuit = /obj/item/circuitboard/machine/pacman/super - sheet_path = /obj/item/stack/sheet/mineral/uranium - power_gen = 15000 - time_per_sheet = 85 - -/obj/machinery/power/port_gen/pacman/super/overheat() - explosion(src.loc, 3, 3, 3, -1) - -/obj/machinery/power/port_gen/pacman/mrs - name = "\improper M.R.S.P.A.C.M.A.N.-type portable generator" - base_icon = "portgen2" - icon_state = "portgen2_0" - circuit = /obj/item/circuitboard/machine/pacman/mrs - sheet_path = /obj/item/stack/sheet/mineral/diamond - power_gen = 40000 - time_per_sheet = 80 - -/obj/machinery/power/port_gen/pacman/mrs/overheat() - explosion(src.loc, 4, 4, 4, -1) diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm deleted file mode 100644 index 57c6b7d3e6..0000000000 --- a/code/modules/power/power.dm +++ /dev/null @@ -1,369 +0,0 @@ -////////////////////////////// -// POWER MACHINERY BASE CLASS -////////////////////////////// - -///////////////////////////// -// Definitions -///////////////////////////// - -/obj/machinery/power - name = null - icon = 'icons/obj/power.dmi' - anchored = TRUE - obj_flags = CAN_BE_HIT | ON_BLUEPRINTS - var/datum/powernet/powernet = null - use_power = NO_POWER_USE - idle_power_usage = 0 - active_power_usage = 0 - -/obj/machinery/power/Destroy() - disconnect_from_network() - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(update_cable_icons_on_turf), get_turf(src)), 3) - return ..() - -/////////////////////////////// -// General procedures -////////////////////////////// - -// common helper procs for all power machines -// All power generation handled in add_avail() -// Machines should use add_load(), surplus(), avail() -// Non-machines should use add_delayedload(), delayed_surplus(), newavail() - -//override this if the machine needs special functionality for making wire nodes appear, ie emitters, generators, etc. -/obj/machinery/power/proc/should_have_node() - return FALSE - -/obj/machinery/power/proc/add_avail(amount) - if(powernet) - powernet.newavail += amount - return TRUE - else - return FALSE - -/obj/machinery/power/proc/add_load(amount) - if(powernet) - powernet.load += amount - -/obj/machinery/power/proc/surplus() - if(powernet) - return CLAMP(powernet.avail-powernet.load, 0, powernet.avail) - else - return 0 - -/obj/machinery/power/proc/avail(amount) - if(powernet) - return amount ? powernet.avail >= amount : powernet.avail - else - return 0 - -/obj/machinery/power/proc/add_delayedload(amount) - if(powernet) - powernet.delayedload += amount - -/obj/machinery/power/proc/delayed_surplus() - if(powernet) - return CLAMP(powernet.newavail - powernet.delayedload, 0, powernet.newavail) - else - return 0 - -/obj/machinery/power/proc/newavail() - if(powernet) - return powernet.newavail - else - return 0 - -/obj/machinery/power/proc/disconnect_terminal() // machines without a terminal will just return, no harm no fowl. - return - -// returns true if the area has power on given channel (or doesn't require power). -// defaults to power_channel -/obj/machinery/proc/powered(chan = -1) // defaults to power_channel - if(!loc) - return FALSE - if(!use_power) - return TRUE - - var/area/A = get_area(src) // make sure it's in an area - if(!A) - return FALSE // if not, then not powered - if(chan == -1) - chan = power_channel - return A.powered(chan) // return power status of the area - -// increment the power usage stats for an area -/obj/machinery/proc/use_power(amount, chan = -1) // defaults to power_channel - var/area/A = get_area(src) // make sure it's in an area - if(!A) - return - if(chan == -1) - chan = power_channel - A.use_power(amount, chan) - -/obj/machinery/proc/addStaticPower(value, powerchannel) - var/area/A = get_area(src) - if(!A) - return - A.addStaticPower(value, powerchannel) - -/obj/machinery/proc/removeStaticPower(value, powerchannel) - addStaticPower(-value, powerchannel) - -/** - * Called whenever the power settings of the containing area change - * - * by default, check equipment channel & set flag, can override if needed - * - * Returns TRUE if the NOPOWER flag was toggled - */ -/obj/machinery/proc/power_change() - SHOULD_CALL_PARENT(TRUE) - if(stat & BROKEN) - return - if(powered(power_channel)) - if(stat & NOPOWER) - SEND_SIGNAL(src, COMSIG_MACHINERY_POWER_RESTORED) - . = TRUE - stat &= ~NOPOWER - else - if(!(stat & NOPOWER)) - SEND_SIGNAL(src, COMSIG_MACHINERY_POWER_LOST) - . = TRUE - stat |= NOPOWER - update_icon() - -// connect the machine to a powernet if a node cable or a terminal is present on the turf -/obj/machinery/power/proc/connect_to_network() - var/turf/T = src.loc - if(!T || !istype(T)) - return FALSE - - var/obj/structure/cable/C = T.get_cable_node() //check if we have a node cable on the machine turf, the first found is picked - if(!C || !C.powernet) - var/obj/machinery/power/terminal/term = locate(/obj/machinery/power/terminal) in T - if(!term || !term.powernet) - return FALSE - else - term.powernet.add_machine(src) - return TRUE - - C.powernet.add_machine(src) - return TRUE - -// remove and disconnect the machine from its current powernet -/obj/machinery/power/proc/disconnect_from_network() - if(!powernet) - return FALSE - powernet.remove_machine(src) - return TRUE - -// attach a wire to a power machine - leads from the turf you are standing on -//almost never called, overwritten by all power machines but terminal and generator -/obj/machinery/power/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/coil = W - var/turf/T = user.loc - if(T.intact || !isfloorturf(T)) - return - if(get_dist(src, user) > 1) - return - coil.place_turf(T, user) - else - return ..() - - -/////////////////////////////////////////// -// Powernet handling helpers -////////////////////////////////////////// - -//returns all the cables WITHOUT a powernet in neighbors turfs, -//pointing towards the turf the machine is located at -/obj/machinery/power/proc/get_connections() - . = list() - var/turf/T - - for(var/card in GLOB.cardinals) - T = get_step(loc,card) - - for(var/obj/structure/cable/C in T) - if(C.powernet) - continue - . += C - return . - -//returns all the cables in neighbors turfs, -//pointing towards the turf the machine is located at -/obj/machinery/power/proc/get_marked_connections() - . = list() - var/turf/T - - for(var/card in GLOB.cardinals) - T = get_step(loc,card) - - for(var/obj/structure/cable/C in T) - . += C - return . - -//returns all the NODES (O-X) cables WITHOUT a powernet in the turf the machine is located at -/obj/machinery/power/proc/get_indirect_connections() - . = list() - for(var/obj/structure/cable/C in loc) - if(C.powernet) - continue - . += C - return . - -/proc/update_cable_icons_on_turf(turf/T) - for(var/obj/structure/cable/C in T.contents) - C.update_icon() - -/////////////////////////////////////////// -// GLOBAL PROCS for powernets handling -////////////////////////////////////////// - -///remove the old powernet and replace it with a new one throughout the network. -/proc/propagate_network(obj/structure/cable/C, datum/powernet/PN, skip_assigned_powernets = FALSE) - var/list/found_machines = list() - var/list/cables = list() - var/index = 1 - var/obj/structure/cable/working_cable - - cables[C] = TRUE //associated list for performance reasons - - while(index <= length(cables)) - working_cable = cables[index] - index++ - - var/list/connections = working_cable.get_cable_connections(skip_assigned_powernets) - - for(var/obj/structure/cable/cable_entry in connections) - if(!cables[cable_entry]) //Since it's an associated list, we can just do an access and check it's null before adding; prevents duplicate entries - cables[cable_entry] = TRUE - - for(var/obj/structure/cable/cable_entry in cables) - PN.add_cable(cable_entry) - found_machines += cable_entry.get_machine_connections(skip_assigned_powernets) - - //now that the powernet is set, connect found machines to it - for(var/obj/machinery/power/PM in found_machines) - if(!PM.connect_to_network()) //couldn't find a node on its turf... - PM.disconnect_from_network() //... so disconnect if already on a powernet - - -//Merge two powernets, the bigger (in cable length term) absorbing the other -/proc/merge_powernets(datum/powernet/net1, datum/powernet/net2) - if(!net1 || !net2) //if one of the powernet doesn't exist, return - return - - if(net1 == net2) //don't merge same powernets - return - - //We assume net1 is larger. If net2 is in fact larger we are just going to make them switch places to reduce on code. - if(net1.cables.len < net2.cables.len) //net2 is larger than net1. Let's switch them around - var/temp = net1 - net1 = net2 - net2 = temp - - //merge net2 into net1 - for(var/obj/structure/cable/Cable in net2.cables) //merge cables - net1.add_cable(Cable) - - for(var/obj/machinery/power/Node in net2.nodes) //merge power machines - if(!Node.connect_to_network()) - Node.disconnect_from_network() //if somehow we can't connect the machine to the new powernet, disconnect it from the old nonetheless - - return net1 - -//Determines how strong could be shock, deals damage to mob, uses power. -//M is a mob who touched wire/whatever -//power_source is a source of electricity, can be powercell, area, apc, cable, powernet or null -//source is an object caused electrocuting (airlock, grille, etc) -//siemens_coeff - layman's terms, conductivity -//dist_check - set to only shock mobs within 1 of source (vendors, airlocks, etc.) -//No animations will be performed by this proc. -/proc/electrocute_mob(mob/living/carbon/M, power_source, obj/source, siemens_coeff = 1, dist_check = FALSE) - if(!istype(M) || ismecha(M.loc)) - return 0 //feckin mechs are dumb - if(dist_check) - if(!in_range(source,M)) - return 0 - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.gloves) - var/obj/item/clothing/gloves/G = H.gloves - if(G.siemens_coefficient == 0) - return 0 //to avoid spamming with insulated glvoes on - - var/area/source_area - if(istype(power_source, /area)) - source_area = power_source - power_source = source_area.get_apc() - if(istype(power_source, /obj/structure/cable)) - var/obj/structure/cable/Cable = power_source - power_source = Cable.powernet - - var/datum/powernet/PN - var/obj/item/stock_parts/cell/cell - - if(istype(power_source, /datum/powernet)) - PN = power_source - else if(istype(power_source, /obj/item/stock_parts/cell)) - cell = power_source - else if(istype(power_source, /obj/machinery/power/apc)) - var/obj/machinery/power/apc/apc = power_source - cell = apc.cell - if (apc.terminal) - PN = apc.terminal.powernet - else if (!power_source) - return 0 - else - log_admin("ERROR: /proc/electrocute_mob([M], [power_source], [source]): wrong power_source") - return 0 - if (!cell && !PN) - return 0 - var/PN_damage = 0 - var/cell_damage = 0 - if (PN) - PN_damage = PN.get_electrocute_damage() - if (cell) - cell_damage = cell.get_electrocute_damage() - var/shock_damage = 0 - if (PN_damage>=cell_damage) - power_source = PN - shock_damage = PN_damage - else - power_source = cell - shock_damage = cell_damage - var/drained_hp = M.electrocute_act(shock_damage, source, siemens_coeff) //zzzzzzap! - log_combat(source, M, "electrocuted") - - var/drained_energy = drained_hp*20 - - if (source_area) - source_area.use_power(drained_energy/GLOB.CELLRATE) - else if (istype(power_source, /datum/powernet)) - var/drained_power = drained_energy/GLOB.CELLRATE //convert from "joules" to "watts" - PN.delayedload += (min(drained_power, max(PN.newavail - PN.delayedload, 0))) - else if (istype(power_source, /obj/item/stock_parts/cell)) - cell.use(drained_energy) - return drained_energy - -//////////////////////////////////////////////// -// Misc. -/////////////////////////////////////////////// - -// return a cable if there's one on the turf, null if there isn't one -/turf/proc/get_cable_node() - if(!can_have_cabling()) - return null - var/obj/structure/cable_bridge/B = locate() in src - for(var/obj/structure/cable/C in src) - if(C.cable_layer == CABLE_LAYER_2 || B) - C.update_icon() - return C - return null - -/area/proc/get_apc() - for(var/obj/machinery/power/apc/APC in GLOB.apcs_list) - if(APC.area == src) - return APC diff --git a/code/modules/power/powernet.dm b/code/modules/power/powernet.dm deleted file mode 100644 index 9660e8359c..0000000000 --- a/code/modules/power/powernet.dm +++ /dev/null @@ -1,101 +0,0 @@ -//////////////////////////////////////////// -// POWERNET DATUM -// each contiguous network of cables & nodes -///////////////////////////////////// -/datum/powernet - var/number // unique id - var/list/cables = list() // all cables & junctions - var/list/nodes = list() // all connected machines - - var/load = 0 // the current load on the powernet, increased by each machine at processing - var/newavail = 0 // what available power was gathered last tick, then becomes... - var/avail = 0 //...the current available power in the powernet - var/viewavail = 0 // the available power as it appears on the power console (gradually updated) - var/viewload = 0 // the load as it appears on the power console (gradually updated) - var/netexcess = 0 // excess power on the powernet (typically avail-load)/////// - var/delayedload = 0 // load applied to powernet between power ticks. - -/datum/powernet/New() - SSmachines.powernets += src - -/datum/powernet/Destroy() - //Go away references, you suck! - for(var/obj/structure/cable/C in cables) - cables -= C - C.powernet = null - for(var/obj/machinery/power/M in nodes) - nodes -= M - M.powernet = null - - SSmachines.powernets -= src - return ..() - -/datum/powernet/proc/is_empty() - return !cables.len && !nodes.len - -//remove a cable from the current powernet -//if the powernet is then empty, delete it -//Warning : this proc DON'T check if the cable exists -/datum/powernet/proc/remove_cable(obj/structure/cable/C) - cables -= C - C.powernet = null - if(is_empty())//the powernet is now empty... - qdel(src)///... delete it - -//add a cable to the current powernet -//Warning : this proc DON'T check if the cable exists -/datum/powernet/proc/add_cable(obj/structure/cable/C) - if(C.powernet)// if C already has a powernet... - if(C.powernet == src) - return - else - C.powernet.remove_cable(C) //..remove it - C.powernet = src - cables +=C - -//remove a power machine from the current powernet -//if the powernet is then empty, delete it -//Warning : this proc DON'T check if the machine exists -/datum/powernet/proc/remove_machine(obj/machinery/power/M) - nodes -=M - M.powernet = null - if(is_empty())//the powernet is now empty... - qdel(src)///... delete it - - -//add a power machine to the current powernet -//Warning : this proc DON'T check if the machine exists -/datum/powernet/proc/add_machine(obj/machinery/power/M) - if(M.powernet)// if M already has a powernet... - if(M.powernet == src) - return - else - M.disconnect_from_network()//..remove it - M.powernet = src - nodes[M] = M - -//handles the power changes in the powernet -//called every ticks by the powernet controller -/datum/powernet/proc/reset() - //see if there's a surplus of power remaining in the powernet and stores unused power in the SMES - netexcess = avail - load - - if(netexcess > 100 && nodes && nodes.len) // if there was excess power last cycle - for(var/obj/machinery/power/smes/S in nodes) // find the SMESes in the network - S.restore() // and restore some of the power that was used - - // update power consoles - viewavail = round(0.8 * viewavail + 0.2 * avail) - viewload = round(0.8 * viewload + 0.2 * load) - - // reset the powernet - load = delayedload - delayedload = 0 - avail = newavail - newavail = 0 - -/datum/powernet/proc/get_electrocute_damage() - if(avail >= 1000) - return CLAMP(20 + round(avail/25000), 20, 195) + rand(-5,5) - else - return 0 diff --git a/code/modules/power/roguelighting.dm b/code/modules/power/roguelighting.dm deleted file mode 100644 index 343bf60014..0000000000 --- a/code/modules/power/roguelighting.dm +++ /dev/null @@ -1,1066 +0,0 @@ -/obj/effect/sunlight - var/brightness = 10 - light_power = 1 - light_color = "#2f1313" - layer = BELOW_MOB_LAYER - icon = 'icons/effects/effects.dmi' - icon_state = "electricity2" -#ifndef TESTING - name = "" - mouse_opacity = MOUSE_OPACITY_TRANSPARENT -#else - name = "sunlight" -#endif - var/mode = "day" - light_depth = 0 - light_height = 0 - -/obj/effect/sunlight/Initialize() - light_color = pick("#dbbfbf", "#ddd7bd", "#add1b0", "#a4c0ca", "#ae9dc6", "#d09fbf") - ..() - if(istype(loc, /turf/open/transparent/openspace)) - var/turf/target = get_step_multiz(src, DOWN) - if(!isclosedturf(target)) - new type(target) - mode = GLOB.tod - GLOB.sunlights += src -#ifndef FASTLOAD - update() -#endif -/obj/effect/sunlight/Destroy() - STOP_PROCESSING(SStodchange,src) - GLOB.sunlights -= src - . = ..() - -/obj/effect/sunlight/Initialize(mapload) - . = ..() -#ifdef TESTING - icon_state = "electricity2" -#else - icon_state = null -#endif - -/obj/effect/sunlight/proc/update() - if(mode == GLOB.tod) - return - mode = GLOB.tod - switch(mode) - if("night") - light_color = pick("#100a18", "#0c0412", "#0f0012") - if("dusk") - light_color = pick("#c26f56", "#c05271", "#b84933") - if("dawn") - light_color = pick("#394579", "#49385d", "#3a1537") - if("day") - light_color = pick("#dbbfbf", "#ddd7bd", "#add1b0", "#a4c0ca", "#ae9dc6", "#d09fbf") - set_light(brightness, light_power, light_color) - -/obj/effect/sunlight/ultra - brightness = 30 - -//genstuff -/obj/effect/landmark/mapGenerator/sunlights - mapGeneratorType = /datum/mapGenerator/sunlights - endTurfX = 255 - endTurfY = 255 - startTurfX = 1 - startTurfY = 1 - -/obj/effect/landmark/mapGenerator/sunlights/Initialize(mapload) - GLOB.sky_z |= z - return ..() - -/datum/mapGenerator/sunlights - modules = list(/datum/mapGeneratorModule/sunlights) - -/datum/mapGeneratorModule/sunlights - spawnableAtoms = list(/obj/effect/sunlight = 100) - spawnableTurfs = list() - clusterMax = 10 - clusterMin = 10 - checkdensity = FALSE - allowed_areas = list(/area/rogue/outdoors) - -/obj/machinery/light/roguestreet - icon = 'icons/roguetown/misc/tallstructure.dmi' - icon_state = "slamp1" - base_state = "slamp" - brightness = 10 - nightshift_allowed = FALSE - fueluse = 0 - bulb_colour = "#f9e080" - bulb_power = 0.85 - max_integrity = 0 - use_power = NO_POWER_USE - var/datum/looping_sound/soundloop - pass_flags = LETPASSTHROW - -/obj/machinery/light/roguestreet/midlamp - icon = 'icons/roguetown/misc/64x64.dmi' - icon_state = "midlamp1" - base_state = "midlamp" - pixel_x = -16 - density = TRUE - -/obj/machinery/light/roguestreet/proc/lights_out() - if(soundloop) - soundloop.stop() - on = FALSE - set_light(0) - update_icon() - addtimer(CALLBACK(src, PROC_REF(lights_on)), 5 MINUTES) - -/obj/machinery/light/roguestreet/proc/lights_on() - on = TRUE - update() - update_icon() - if(soundloop) - soundloop.start() - -/obj/machinery/light/roguestreet/update_icon() - if(on) - icon_state = "[base_state]1" - else - icon_state = "[base_state]0" - -/obj/machinery/light/roguestreet/update() - . = ..() - if(on) - GLOB.fires_list |= src - else - GLOB.fires_list -= src - -/obj/machinery/light/roguestreet/Initialize() - soundloop = pick(/datum/looping_sound/streetlamp1,/datum/looping_sound/streetlamp2,/datum/looping_sound/streetlamp3) - if(soundloop) - soundloop = new soundloop(list(src), FALSE) - soundloop.start() - GLOB.streetlamp_list += src - update_icon() - . = ..() - -/obj/machinery/light/roguestreet/update_icon() - if(on) - icon_state = "[base_state]1" - else - icon_state = "[base_state]0" - -//fires -/obj/machinery/light/rogue - icon = 'icons/roguetown/misc/lighting.dmi' - brightness = 8 - nightshift_allowed = FALSE - fueluse = 60 MINUTES - bulb_colour = "#f9ad80" - bulb_power = 1 - use_power = NO_POWER_USE - var/datum/looping_sound/soundloop = /datum/looping_sound/fireloop - pass_flags = LETPASSTHROW - var/cookonme = FALSE - var/crossfire = TRUE - -/obj/machinery/light/rogue/Initialize() - if(soundloop) - soundloop = new soundloop(list(src), FALSE) - soundloop.start() - GLOB.fires_list += src - if(fueluse) - fueluse = fueluse - (rand(fueluse*0.1,fueluse*0.3)) - update_icon() - . = ..() - -/obj/machinery/light/rogue/weather_trigger(W) - if(W==/datum/weather/rain) - START_PROCESSING(SSweather,src) - -/obj/machinery/light/rogue/attack_hand(mob/living/carbon/human/user) - . = ..() - if(.) - return - user.changeNext_move(CLICK_CD_MELEE) - add_fingerprint(user) - - -/obj/machinery/light/rogue/examine(mob/user) - . = ..() - if(Adjacent(user)) - if(fueluse > 0) - var/minsleft = fueluse / 600 - minsleft = round(minsleft) - if(minsleft <= 1) - minsleft = "less than a minute" - else - minsleft = "[round(minsleft)] minutes" - . += "The fire will last for [minsleft]." - else - if(initial(fueluse) > 0) - . += "The fire is burned out and hungry..." - - -/obj/machinery/light/rogue/extinguish() - if(on) - burn_out() - new /obj/effect/temp_visual/small_smoke(src.loc) - ..() - - - -/obj/machinery/light/rogue/burn_out() - if(soundloop) - soundloop.stop() - if(on) - playsound(src.loc, 'sound/items/firesnuff.ogg', 100) - ..() - update_icon() - -/obj/machinery/light/rogue/update_icon() - if(on) - icon_state = "[base_state]1" - else - icon_state = "[base_state]0" - -/obj/machinery/light/rogue/update() - . = ..() - if(on) - GLOB.fires_list |= src - else - GLOB.fires_list -= src - -/obj/machinery/light/rogue/Destroy() - QDEL_NULL(soundloop) - GLOB.fires_list -= src - . = ..() - -/obj/machinery/light/rogue/fire_act(added, maxstacks) - if(!on && ((fueluse > 0) || (initial(fueluse) == 0))) - playsound(src.loc, 'sound/items/firelight.ogg', 100) - on = TRUE - update() - update_icon() - if(soundloop) - soundloop.start() - addtimer(CALLBACK(src, PROC_REF(trigger_weather)), rand(5,20)) - return TRUE - -/obj/proc/trigger_weather() - if(!QDELETED(src)) - if(isturf(loc)) - var/turf/T = loc - T.trigger_weather(src) - -/obj/machinery/light/rogue/Crossed(atom/movable/AM, oldLoc) - ..() - if(crossfire) - if(on) - AM.fire_act(1,5) - -/obj/machinery/light/rogue/spark_act() - fire_act() - -/obj/machinery/light/rogue/attackby(obj/item/W, mob/living/user, params) - if(cookonme) - if(istype(W, /obj/item/reagent_containers/food/snacks)) - if(istype(W, /obj/item/reagent_containers/food/snacks/egg)) - to_chat(user, "I wouldn't be able to cook this over the fire...") - return FALSE - var/obj/item/A = user.get_inactive_held_item() - if(A) - var/foundstab = FALSE - for(var/X in A.possible_item_intents) - var/datum/intent/D = new X - if(D.blade_class == BCLASS_STAB) - foundstab = TRUE - break - if(foundstab) - var/prob2spoil = 33 - if(user.mind.get_skill_level(/datum/skill/craft/cooking)) - prob2spoil = 1 - user.visible_message("[user] starts to cook [W] over [src].") - for(var/i in 1 to 6) - if(do_after(user, 30, target = src)) - var/obj/item/reagent_containers/food/snacks/S = W - var/obj/item/C - if(prob(prob2spoil)) - user.visible_message("[user] burns [S].") - if(user.client?.prefs.showrolls) - to_chat(user, "Critfail... [prob2spoil]%.") - C = S.cooking(1000, null) - else - C = S.cooking(S.cooktime/4, src) - if(C) - user.dropItemToGround(S, TRUE) - qdel(S) - C.forceMove(get_turf(user)) - user.put_in_hands(C) - break - else - break - return - if(W.firefuel) - if(initial(fueluse)) - if(fueluse > initial(fueluse) - 5 SECONDS) - to_chat(user, "Full.") - return - else - if(!on) - return - if (alert(usr, "Feed [W] to the fire?", "ROGUETOWN", "Yes", "No") != "Yes") - return - qdel(W) - user.visible_message("[user] feeds [W] to [src].") - if(initial(fueluse)) - fueluse = fueluse + W.firefuel - if(fueluse > initial(fueluse)) //keep it at the max - fueluse = initial(fueluse) - return - else - if(on) - if(istype(W, /obj/item/natural/dirtclod)) - if(!user.temporarilyRemoveItemFromInventory(W)) - return - on = FALSE - set_light(0) - update_icon() - qdel(W) - src.visible_message("[user] snuffs the fire.") - return - if(user.used_intent?.type != INTENT_SPLASH) - W.spark_act() - ..() - -/obj/machinery/light/rogue/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) - return - -/obj/machinery/light/rogue/firebowl - name = "brazier" - icon = 'icons/roguetown/misc/lighting.dmi' - icon_state = "stonefire1" - density = TRUE -// pixel_y = 10 - base_state = "stonefire" - climbable = TRUE - pass_flags = LETPASSTHROW - cookonme = TRUE - dir = SOUTH - crossfire = TRUE - fueluse = 0 - -/obj/machinery/light/rogue/firebowl/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && (mover.pass_flags & PASSTABLE)) - return 1 - if(mover.throwing) - return 1 - if(locate(/obj/structure/table) in get_turf(mover)) - return 1 - return !density - -/obj/machinery/light/rogue/firebowl/attack_hand(mob/user) - . = ..() - if(.) - return - - if(on) - var/mob/living/carbon/human/H = user - - if(istype(H)) - H.visible_message("[H] warms \his hand over the fire.") - - if(do_after(H, 15, target = src)) - var/obj/item/bodypart/affecting = H.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") - to_chat(H, "HOT!") - if(affecting && affecting.receive_damage( 0, 5 )) // 5 burn damage - H.update_damage_overlays() - return TRUE //fires that are on always have this interaction with lmb unless its a torch - - else - if(icon_state == "[base_state]over") - user.visible_message("[user] starts to pick up [src]...", \ - "I start to pick up [src]...") - if(do_after(user, 30, target = src)) - icon_state = "[base_state]0" - return - -/obj/machinery/light/rogue/firebowl/stump - icon_state = "stumpfire1" - base_state = "stumpfire" - -/obj/machinery/light/rogue/firebowl/church - icon_state = "churchfire1" - base_state = "churchfire" - - -/obj/machinery/light/rogue/firebowl/standing - name = "standing fire" - icon_state = "standing1" - base_state = "standing" - bulb_colour = "#ff9648" - cookonme = FALSE - crossfire = FALSE - - -/obj/machinery/light/rogue/firebowl/standing/blue - bulb_colour = "#b9bcff" - icon_state = "standingb1" - base_state = "standingb" - -/obj/machinery/light/rogue/firebowl/standing/proc/knock_over() //use this later for jump impacts and shit - icon_state = "[base_state]over" - -/obj/machinery/light/rogue/firebowl/standing/fire_act(added, maxstacks) - if(icon_state != "[base_state]over") - ..() - -/obj/machinery/light/rogue/firebowl/standing/onkick(mob/user) - if(isliving(user)) - var/mob/living/L = user - if(icon_state == "[base_state]over") - playsound(src, 'sound/combat/hits/onwood/woodimpact (1).ogg', 100) - user.visible_message("[user] kicks [src]!", \ - "I kick [src]!") - return - if(prob(L.STASTR * 8)) - playsound(src, 'sound/combat/hits/onwood/woodimpact (1).ogg', 100) - user.visible_message("[user] kicks over [src]!", \ - "I kick over [src]!") - burn_out() - knock_over() - else - playsound(src, 'sound/combat/hits/onwood/woodimpact (1).ogg', 100) - user.visible_message("[user] kicks [src]!", \ - "I kick [src]!") - -/obj/machinery/light/rogue/wallfire - name = "fireplace" - icon_state = "wallfire1" - base_state = "wallfire" - density = FALSE - fueluse = 0 - crossfire = FALSE - cookonme = TRUE - -/obj/machinery/light/rogue/wallfire/candle - name = "candles" - icon_state = "wallcandle1" - base_state = "wallcandle" - crossfire = FALSE - cookonme = FALSE - pixel_y = 32 - soundloop = null - -/obj/machinery/light/rogue/wallfire/candle/attack_hand(mob/user) - if(isliving(user) && on) - user.visible_message("[user] snuffs [src].") - burn_out() - return TRUE //fires that are on always have this interaction with lmb unless its a torch - . = ..() - -/obj/machinery/light/rogue/wallfire/candle/r - pixel_y = 0 - pixel_x = 32 -/obj/machinery/light/rogue/wallfire/candle/l - pixel_y = 0 - pixel_x = -32 - -/obj/machinery/light/rogue/wallfire/candle/blue - bulb_colour = "#b9bcff" - icon_state = "wallcandleb1" - base_state = "wallcandleb" - -/obj/machinery/light/rogue/wallfire/candle/blue/r - pixel_y = 0 - pixel_x = 32 -/obj/machinery/light/rogue/wallfire/candle/blue/l - pixel_y = 0 - pixel_x = -32 - -/obj/machinery/light/rogue/wallfire/candle/weak - light_power = 0.9 - light_range = 6 -/obj/machinery/light/rogue/wallfire/candle/weak/l - pixel_x = -32 - pixel_y = 0 -/obj/machinery/light/rogue/wallfire/candle/weak/r - pixel_x = 32 - pixel_y = 0 - -/obj/machinery/light/rogue/torchholder - name = "sconce" - icon_state = "torchwall1" - base_state = "torchwall" - brightness = 5 - density = FALSE - var/obj/item/flashlight/flare/torch/torchy - fueluse = FALSE //we use the torch's fuel - soundloop = null - crossfire = FALSE - plane = GAME_PLANE_UPPER - cookonme = FALSE - -/obj/machinery/light/rogue/torchholder/c - pixel_y = 32 - -/obj/machinery/light/rogue/torchholder/r - dir = WEST - -/obj/machinery/light/rogue/torchholder/l - dir = EAST - -/obj/machinery/light/rogue/torchholder/fire_act(added, maxstacks) - if(torchy) - if(!on) - if(torchy.fuel > 0) - torchy.spark_act() - playsound(src.loc, 'sound/items/firelight.ogg', 100) - on = TRUE - update() - update_icon() - if(soundloop) - soundloop.start() - addtimer(CALLBACK(src, PROC_REF(trigger_weather)), rand(5,20)) - return TRUE - -/obj/machinery/light/rogue/torchholder/Initialize() - torchy = new /obj/item/flashlight/flare/torch(src) - torchy.spark_act() - . = ..() - -/obj/machinery/light/rogue/torchholder/process() - if(on) - if(torchy) - if(torchy.fuel <= 0) - burn_out() - if(!torchy.on) - burn_out() - else - return PROCESS_KILL - -/obj/machinery/light/rogue/torchholder/attack_hand(mob/user) - . = ..() - if(.) - return - if(torchy) - if(!istype(user) || !Adjacent(user) || !user.put_in_active_hand(torchy)) - torchy.forceMove(loc) - torchy = null - on = FALSE - set_light(0) - update_icon() - playsound(src.loc, 'sound/foley/torchfixturetake.ogg', 70) - -/obj/machinery/light/rogue/torchholder/update_icon() - if(torchy) - if(on) - icon_state = "[base_state]1" - else - icon_state = "[base_state]0" - else - icon_state = "torchwall" - -/obj/machinery/light/rogue/torchholder/burn_out() - if(torchy.on) - torchy.turn_off() - ..() - -/obj/machinery/light/rogue/torchholder/attackby(obj/item/W, mob/living/user, params) - if(istype(W, /obj/item/flashlight/flare/torch)) - var/obj/item/flashlight/flare/torch/LR = W - if(torchy) - if(LR.on && !on) - if(torchy.fuel <= 0) - to_chat(user, "The mounted torch is burned out.") - return - else - torchy.spark_act() - user.visible_message("[user] lights [src].") - playsound(src.loc, 'sound/items/firelight.ogg', 100) - on = TRUE - update() - update_icon() - addtimer(CALLBACK(src, PROC_REF(trigger_weather)), rand(5,20)) - return - if(!LR.on && on) - if(LR.fuel > 0) - LR.spark_act() - user.visible_message("[user] lights [LR] in [src].") - user.update_inv_hands() - else - if(LR.on) - LR.forceMove(src) - torchy = LR - on = TRUE - update() - update_icon() - addtimer(CALLBACK(src, PROC_REF(trigger_weather)), rand(5,20)) - else - LR.forceMove(src) - torchy = LR - update_icon() - playsound(src.loc, 'sound/foley/torchfixtureput.ogg', 70) - return - . = ..() - -/obj/machinery/light/rogue/chand - name = "chandelier" - icon_state = "chand1" - base_state = "chand" - icon = 'icons/roguetown/misc/tallwide.dmi' - density = FALSE - brightness = 10 - pixel_x = -10 - pixel_y = -10 - layer = 2.0 - fueluse = 0 - soundloop = null - crossfire = FALSE - obj_flags = CAN_BE_HIT | BLOCK_Z_OUT_DOWN | BLOCK_Z_IN_UP - -/obj/machinery/light/rogue/chand/attack_hand(mob/user) - if(isliving(user) && on) - user.visible_message("[user] snuffs [src].") - burn_out() - return TRUE //fires that are on always have this interaction with lmb unless its a torch - . = ..() - - -/obj/machinery/light/rogue/hearth - name = "hearth" - icon_state = "hearth1" - base_state = "hearth" - density = TRUE - anchored = TRUE - climbable = TRUE - climb_time = 3 SECONDS - layer = TABLE_LAYER - climb_offset = 14 - on = FALSE - cookonme = TRUE - var/obj/item/attachment = null - var/obj/item/reagent_containers/food/snacks/food = null - var/datum/looping_sound/boilloop/boilloop - var/rawegg = FALSE - -/obj/machinery/light/rogue/hearth/Initialize() - boilloop = new(list(src), FALSE) - . = ..() - -/obj/machinery/light/rogue/hearth/attackby(obj/item/W, mob/living/user, params) - if(!attachment) - if(istype(W, /obj/item/cooking/pan) || istype(W, /obj/item/reagent_containers/glass/bucket/pot)) - playsound(get_turf(user), 'sound/foley/dropsound/shovel_drop.ogg', 40, TRUE, -1) - attachment = W - W.forceMove(src) - update_icon() - return - else - if(istype(W, /obj/item/reagent_containers/glass/bowl)) - to_chat(user, "Remove the pot from the hearth first.") - return - if(istype(attachment, /obj/item/cooking/pan)) - if(W.type in subtypesof(/obj/item/reagent_containers/food/snacks)) - var/obj/item/reagent_containers/food/snacks/S = W - if(istype(W, /obj/item/reagent_containers/food/snacks/egg)) // added - playsound(get_turf(user), 'modular/Neu_Food/sound/eggbreak.ogg', 100, TRUE, 0) - sleep(25) // to get egg crack before frying hiss - W.icon_state = "rawegg" // added - rawegg = TRUE - if(!food) - S.forceMove(src) - food = S - update_icon() - if(on) - playsound(src.loc, 'sound/misc/frying.ogg', 80, FALSE, extrarange = 5) - return -// New concept = boil at least 33 water, add item, it turns into food reagent volume 33 of the appropriate type - else if(istype(attachment, /obj/item/reagent_containers/glass/bucket/pot)) - var/obj/item/reagent_containers/glass/bucket/pot = attachment - if(!pot.reagents.has_reagent(/datum/reagent/water, 33)) - to_chat(user, "Not enough water.") - return TRUE - if(pot.reagents.chem_temp < 374) - to_chat(user, "[pot] isn't boiling!") - return - if(istype(W, /obj/item/reagent_containers/food/snacks/produce/oat)) - if(do_after(user,2 SECONDS, target = src)) - user.visible_message("[user] places [W] into the pot.") - qdel(W) - playsound(src.loc, 'sound/items/Fish_out.ogg', 20, TRUE) - pot.reagents.remove_reagent(/datum/reagent/water, 32) - sleep(300) - playsound(src, "bubbles", 30, TRUE) - pot.reagents.add_reagent(/datum/reagent/consumable/soup/oatmeal, 32) - pot.reagents.remove_reagent(/datum/reagent/water, 1) - return - - if(W.type in subtypesof(/obj/item/reagent_containers/food/snacks/rogue/veg)) - if(do_after(user,2 SECONDS, target = src)) - user.visible_message("[user] places [W] into the pot.") - playsound(src.loc, 'sound/items/Fish_out.ogg', 20, TRUE) - pot.reagents.remove_reagent(/datum/reagent/water, 32) - if(istype(W, /obj/item/reagent_containers/food/snacks/rogue/veg/potato_sliced)) - qdel(W) - sleep(800) - playsound(src, "bubbles", 30, TRUE) - pot.reagents.add_reagent(/datum/reagent/consumable/soup/veggie/potato, 32) - pot.reagents.remove_reagent(/datum/reagent/water, 1) - if(istype(W, /obj/item/reagent_containers/food/snacks/rogue/veg/onion_sliced)) - qdel(W) - sleep(600) - playsound(src, "bubbles", 30, TRUE) - pot.reagents.add_reagent(/datum/reagent/consumable/soup/veggie/onion, 32) - pot.reagents.remove_reagent(/datum/reagent/water, 1) - if(istype(W, /obj/item/reagent_containers/food/snacks/rogue/veg/cabbage_sliced)) - qdel(W) - sleep(700) - playsound(src, "bubbles", 30, TRUE) - pot.reagents.add_reagent(/datum/reagent/consumable/soup/veggie/cabbage, 32) - pot.reagents.remove_reagent(/datum/reagent/water, 1) - if(istype(W, /obj/item/reagent_containers/food/snacks/rogue/veg/turnip_sliced)) - qdel(W) - sleep(700) - playsound(src, "bubbles", 30, TRUE) - pot.reagents.add_reagent(/datum/reagent/consumable/soup/veggie/turnip, 32) - pot.reagents.remove_reagent(/datum/reagent/water, 1) - return - - if(W.type in subtypesof(/obj/item/reagent_containers/food/snacks/rogue/meat)) - if(do_after(user,2 SECONDS, target = src)) - user.visible_message("[user] places [W] into the pot.") - playsound(src.loc, 'sound/items/Fish_out.ogg', 20, TRUE) - pot.reagents.remove_reagent(/datum/reagent/water, 32) - if(istype(W, /obj/item/reagent_containers/food/snacks/rogue/meat/mince/fish)) - qdel(W) - sleep(800) - playsound(src, "bubbles", 30, TRUE) - pot.reagents.add_reagent(/datum/reagent/consumable/soup/stew/fish, 32) - pot.reagents.remove_reagent(/datum/reagent/water, 1) - if(istype(W, /obj/item/reagent_containers/food/snacks/rogue/meat/poultry/cutlet) || istype(W, /obj/item/reagent_containers/food/snacks/rogue/meat/mince/poultry)) - qdel(W) - sleep(900) - playsound(src, "bubbles", 30, TRUE) - pot.reagents.add_reagent(/datum/reagent/consumable/soup/stew/chicken, 32) - pot.reagents.remove_reagent(/datum/reagent/water, 1) - if(istype(W, /obj/item/reagent_containers/food/snacks/rogue/meat/spider)) - qdel(W) - sleep(1000) - playsound(src, "bubbles", 30, TRUE) - pot.reagents.add_reagent(/datum/reagent/consumable/soup/stew/gross, 32) - pot.reagents.remove_reagent(/datum/reagent/water, 1) - else - qdel(W) - sleep(900) - playsound(src, "bubbles", 30, TRUE) - pot.reagents.add_reagent(/datum/reagent/consumable/soup/stew/meat, 32) - pot.reagents.remove_reagent(/datum/reagent/water, 1) - - if(istype(W, /obj/item/reagent_containers/food/snacks/egg)) - if(do_after(user,2 SECONDS, target = src)) - user.visible_message("[user] places the [W] into the pot.") - playsound(src.loc, 'sound/items/Fish_out.ogg', 20, TRUE) - pot.reagents.remove_reagent(/datum/reagent/water, 32) - qdel(W) - sleep(800) - playsound(src, "bubbles", 30, TRUE) - pot.reagents.add_reagent(/datum/reagent/consumable/soup/egg, 32) - pot.reagents.remove_reagent(/datum/reagent/water, 1) - - if(istype(W, /obj/item/reagent_containers/food/snacks/rogue/truffles)) - if(do_after(user,2 SECONDS, target = src)) - user.visible_message("[user] places the [W] into the pot.") - playsound(src.loc, 'sound/items/Fish_out.ogg', 20, TRUE) - pot.reagents.remove_reagent(/datum/reagent/water, 32) - qdel(W) - sleep(800) - playsound(src, "bubbles", 30, TRUE) - pot.reagents.add_reagent(/datum/reagent/consumable/soup/stew/truffle, 32) - pot.reagents.remove_reagent(/datum/reagent/water, 1) - - if(istype(W, /obj/item/reagent_containers/food/snacks/rogue/cheese) || istype(W, /obj/item/reagent_containers/food/snacks/rogue/cheddarwedge)) - if(do_after(user,2 SECONDS, target = src)) - user.visible_message("[user] places the [W] into the pot.") - playsound(src.loc, 'sound/items/Fish_out.ogg', 20, TRUE) - pot.reagents.remove_reagent(/datum/reagent/water, 32) - qdel(W) - sleep(800) - playsound(src, "bubbles", 30, TRUE) - pot.reagents.add_reagent(/datum/reagent/consumable/soup/cheese, 32) - pot.reagents.remove_reagent(/datum/reagent/water, 1) - - // drugs and such - if(istype(W, /obj/item/reagent_containers/powder/spice)) - if(do_after(user,2 SECONDS, target = src)) - user.visible_message("[user] places the [W] into the pot.") - playsound(src.loc, 'sound/items/Fish_out.ogg', 20, TRUE) - pot.reagents.remove_reagent(/datum/reagent/water, 32) - qdel(W) - sleep(500) - playsound(src, "bubbles", 30, TRUE) - pot.reagents.add_reagent(/datum/reagent/druqks = 15) - pot.reagents.add_reagent(/datum/reagent/water/spicy = 17) - pot.reagents.remove_reagent(/datum/reagent/water, 1) - - // Bad and rotten and toxic stuff below. Less lethal due to boiling, but really disgusting. Graggars inhumen followers love this stuff, get some healing from it too. - if(istype(W, /obj/item/reagent_containers/food/snacks/produce/berries/rogue/poison) || istype(W, /obj/item/natural/poo)|| istype(W, /obj/item/reagent_containers/food/snacks/rogue/toxicshrooms) || istype(W, /obj/item/natural/worms)) - if(do_after(user,2 SECONDS, target = src)) - user.visible_message("[user] places [W] into the pot.") - playsound(src.loc, 'sound/items/Fish_out.ogg', 20, TRUE) - pot.reagents.remove_reagent(/datum/reagent/water, 32) - qdel(W) - sleep(600) - playsound(src, "bubbles", 30, TRUE) - pot.reagents.add_reagent(/datum/reagent/yuck/cursed_soup, 32) - pot.reagents.remove_reagent(/datum/reagent/water, 1) - - if(W.type in subtypesof(/obj/item/reagent_containers/food/snacks/rotten)) // Graggar likes rotten food I guess - if(do_after(user,2 SECONDS, target = src)) - user.visible_message("[user] places [W] into the pot.") - playsound(src.loc, 'sound/items/Fish_out.ogg', 20, TRUE) - pot.reagents.remove_reagent(/datum/reagent/water, 32) - qdel(W) - sleep(600) - playsound(src, "bubbles", 30, TRUE) - pot.reagents.add_reagent(/datum/reagent/yuck/cursed_soup, 32) - pot.reagents.remove_reagent(/datum/reagent/water, 1) - - if(W.type in subtypesof(/obj/item/organ)) // ....and leeches and such....andd organs more MORE MORE if()!!! GIVE ME MOOORE - if(do_after(user,2 SECONDS, target = src)) - user.visible_message("[user] places [W] into the pot.") - playsound(src.loc, 'sound/items/Fish_out.ogg', 20, TRUE) - pot.reagents.remove_reagent(/datum/reagent/water, 32) - qdel(W) - sleep(600) - playsound(src, "bubbles", 30, TRUE) - pot.reagents.add_reagent(/datum/reagent/yuck/cursed_soup, 32) - pot.reagents.remove_reagent(/datum/reagent/water, 1) - - if(W.type in subtypesof(/obj/item/natural/worms)) // ....and leeches and such....andd organs more MORE MORE if()!!! GIVE ME MOOORE - if(do_after(user,2 SECONDS, target = src)) - user.visible_message("[user] places [W] into the pot.") - playsound(src.loc, 'sound/items/Fish_out.ogg', 20, TRUE) - pot.reagents.remove_reagent(/datum/reagent/water, 32) - qdel(W) - sleep(600) - playsound(src, "bubbles", 30, TRUE) - pot.reagents.add_reagent(/datum/reagent/yuck/cursed_soup, 32) - pot.reagents.remove_reagent(/datum/reagent/water, 1) - - if(istype(W, /obj/item/reagent_containers/food/snacks/smallrat/dead) || istype(W, /obj/item/reagent_containers/food/snacks/badrecipe)) // every beggar loves ratsoup - if(do_after(user,2 SECONDS, target = src)) - user.visible_message("[user] places the [W] into the pot.") - playsound(src.loc, 'sound/items/Fish_out.ogg', 20, TRUE) - pot.reagents.remove_reagent(/datum/reagent/water, 32) - qdel(W) - sleep(600) - playsound(src, "bubbles", 30, TRUE) - pot.reagents.add_reagent(/datum/reagent/consumable/soup/stew/gross, 32) - pot.reagents.remove_reagent(/datum/reagent/water, 1) - - else if(istype(W, /obj/item/reagent_containers/food/snacks/smallrat)) // a step to far for most beggars, paying tribute to Graggar - if(do_after(user,2 SECONDS, target = src)) - user.visible_message("[user] throws [W] into the boiling water.") - playsound(src.loc, 'sound/items/Fish_out.ogg', 60, TRUE) - sleep(3) - playsound(src, 'sound/vo/mobs/rat/rat_death.ogg', 100, FALSE, -1) - pot.reagents.remove_reagent(/datum/reagent/water, 32) - qdel(W) - sleep(600) - playsound(src, "bubbles", 30, TRUE) - pot.reagents.add_reagent(/datum/reagent/yuck/cursed_soup, 32) - pot.reagents.remove_reagent(/datum/reagent/water, 1) - . = ..() - -////////////////////////////////// - -/obj/machinery/light/rogue/hearth/fire_act(added, maxstacks) - . = ..() - if(food) - playsound(src.loc, 'sound/misc/frying.ogg', 80, FALSE, extrarange = 2) - -/obj/machinery/light/rogue/hearth/update_icon() - cut_overlays() - icon_state = "[base_state][on]" - if(attachment) - if(istype(attachment, /obj/item/cooking/pan) || istype(attachment, /obj/item/reagent_containers/glass/bucket/pot)) - var/obj/item/I = attachment - I.pixel_x = 0 - I.pixel_y = 0 - add_overlay(new /mutable_appearance(I)) - if(food) - I = food - I.pixel_x = 0 - I.pixel_y = 0 - add_overlay(new /mutable_appearance(I)) - -/obj/machinery/light/rogue/hearth/attack_hand(mob/user) - . = ..() - if(.) - return - - if(attachment) - if(istype(attachment, /obj/item/cooking/pan)) - if(food) - if(rawegg) - to_chat(user, "Throws away the raw egg.") - rawegg = FALSE - qdel(food) - update_icon() - if(!user.put_in_active_hand(food)) - food.forceMove(user.loc) - food = null - update_icon() - else - if(!user.put_in_active_hand(attachment)) - attachment.forceMove(user.loc) - attachment = null - update_icon() - if(istype(attachment, /obj/item/reagent_containers/glass/bucket/pot)) - if(!user.put_in_active_hand(attachment)) - attachment.forceMove(user.loc) - attachment = null - update_icon() - boilloop.stop() - else - if(on) - var/mob/living/carbon/human/H = user - if(istype(H)) - H.visible_message("[H] warms \his hand over the embers.") - if(do_after(H, 50, target = src)) - var/obj/item/bodypart/affecting = H.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") - to_chat(H, "HOT!") - if(affecting && affecting.receive_damage( 0, 5 )) // 5 burn damage - H.update_damage_overlays() - return TRUE - - -/obj/machinery/light/rogue/hearth/process() - if(isopenturf(loc)) - var/turf/open/O = loc - if(IS_WET_OPEN_TURF(O)) - extinguish() - if(on) - if(initial(fueluse) > 0) - if(fueluse > 0) - fueluse = max(fueluse - 10, 0) - if(fueluse == 0) - burn_out() - if(attachment) - if(istype(attachment, /obj/item/cooking/pan)) - if(food) - var/obj/item/C = food.cooking(20, src) - if(C) - if(rawegg) - rawegg = FALSE - qdel(food) - food = C - if(istype(attachment, /obj/item/reagent_containers/glass/bucket/pot)) - if(attachment.reagents) - attachment.reagents.expose_temperature(400, 0.033) - if(attachment.reagents.chem_temp > 374) - boilloop.start() - else - boilloop.stop() - update_icon() - - -/obj/machinery/light/rogue/hearth/onkick(mob/user) - if(isliving(user) && on) - user.visible_message("[user] snuffs [src].") - burn_out() - -/obj/machinery/light/rogue/hearth/Destroy() - QDEL_NULL(boilloop) - . = ..() - -/obj/machinery/light/rogue/campfire - name = "campfire" - icon_state = "badfire1" - base_state = "badfire" - density = FALSE - layer = 2.8 - brightness = 5 - on = FALSE - fueluse = 15 MINUTES - bulb_colour = "#da5e21" - cookonme = TRUE - -/obj/machinery/light/rogue/campfire/process() - ..() - if(isopenturf(loc)) - var/turf/open/O = loc - if(IS_WET_OPEN_TURF(O)) - extinguish() - -/obj/machinery/light/rogue/campfire/onkick(mob/user) - if(isliving(user) && on) - var/mob/living/L = user - L.visible_message("[L] snuffs [src].") - burn_out() - -/obj/machinery/light/rogue/campfire/attack_hand(mob/user) - . = ..() - if(.) - return - - if(on) - var/mob/living/carbon/human/H = user - - if(istype(H)) - H.visible_message("[H] warms \his hand near the fire.") - - if(do_after(H, 100, target = src)) - var/obj/item/bodypart/affecting = H.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") - to_chat(H, "HOT!") - if(affecting && affecting.receive_damage( 0, 5 )) // 5 burn damage - H.update_damage_overlays() - return TRUE //fires that are on always have this interaction with lmb unless its a torch - -/obj/machinery/light/rogue/campfire/densefire - icon_state = "densefire1" - base_state = "densefire" - density = TRUE - layer = 2.8 - brightness = 5 - climbable = TRUE - on = FALSE - fueluse = 30 MINUTES - pass_flags = LETPASSTHROW - bulb_colour = "#eea96a" - -/obj/machinery/light/rogue/campfire/densefire/CanPass(atom/movable/mover, turf/target) - if(istype(mover) && (mover.pass_flags & PASSTABLE)) - return 1 - if(mover.throwing) - return 1 - if(locate(/obj/structure/table) in get_turf(mover)) - return 1 - if(locate(/obj/machinery/light/rogue/firebowl) in get_turf(mover)) - return 1 - return !density - - -/obj/machinery/light/rogue/campfire/pyre - name = "Pyre" - icon = 'icons/roguetown/misc/tallstructure.dmi' - icon_state = "pyre1" - base_state = "pyre" - brightness = 10 - fueluse = 30 MINUTES - layer = BELOW_MOB_LAYER - buckleverb = "crucifie" - can_buckle = 1 - buckle_lying = 0 - dir = NORTH - buckle_requires_restraints = 1 - buckle_prevents_pull = 1 - - -/obj/machinery/light/rogue/campfire/pyre/post_buckle_mob(mob/living/M) - ..() - M.set_mob_offsets("bed_buckle", _x = 0, _y = 10) - M.setDir(SOUTH) - -/obj/machinery/light/rogue/campfire/pyre/post_unbuckle_mob(mob/living/M) - ..() - M.reset_offsets("bed_buckle") - -/obj/machinery/light/rogue/campfire/longlived - fueluse = 180 MINUTES diff --git a/code/modules/power/rtg.dm b/code/modules/power/rtg.dm deleted file mode 100644 index cc0c294b22..0000000000 --- a/code/modules/power/rtg.dm +++ /dev/null @@ -1,101 +0,0 @@ -// Radioisotope Thermoelectric Generator (RTG) -// Simple power generator that would replace "magic SMES" on various derelicts. - -/obj/machinery/power/rtg - name = "radioisotope thermoelectric generator" - desc = "" - icon = 'icons/obj/power.dmi' - icon_state = "rtg" - density = TRUE - use_power = NO_POWER_USE - circuit = /obj/item/circuitboard/machine/rtg - - // You can buckle someone to RTG, then open its panel. Fun stuff. - can_buckle = TRUE - buckle_lying = FALSE - buckle_requires_restraints = TRUE - - var/power_gen = 1000 // Enough to power a single APC. 4000 output with T4 capacitor. - - var/irradiate = TRUE // RTGs irradiate surroundings, but only when panel is open. - -/obj/machinery/power/rtg/Initialize() - . = ..() - connect_to_network() - -/obj/machinery/power/rtg/process() - ..() - add_avail(power_gen) - if(panel_open && irradiate) - radiation_pulse(src, 60) - -/obj/machinery/power/rtg/RefreshParts() - var/part_level = 0 - for(var/obj/item/stock_parts/SP in component_parts) - part_level += SP.rating - - power_gen = initial(power_gen) * part_level - -/obj/machinery/power/rtg/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Power generation now at [power_gen*0.001]kW." - -/obj/machinery/power/rtg/attackby(obj/item/I, mob/user, params) - if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-open", initial(icon_state), I)) - return - else if(default_deconstruction_crowbar(I)) - return - return ..() - -/obj/machinery/power/rtg/advanced - desc = "" - power_gen = 1250 // 2500 on T1, 10000 on T4. - circuit = /obj/item/circuitboard/machine/rtg/advanced - -// Void Core, power source for Abductor ships and bases. -// Provides a lot of power, but tends to explode when mistreated. - -/obj/machinery/power/rtg/abductor - name = "Void Core" - icon = 'icons/obj/abductor.dmi' - icon_state = "core" - desc = "" - circuit = /obj/item/circuitboard/machine/abductor/core - power_gen = 20000 // 280 000 at T1, 400 000 at T4. Starts at T4. - irradiate = FALSE // Green energy! - can_buckle = FALSE - pixel_y = 7 - var/going_kaboom = FALSE // Is it about to explode? - -/obj/machinery/power/rtg/abductor/proc/overload() - if(going_kaboom) - return - going_kaboom = TRUE - visible_message("\The [src] lets out a shower of sparks as it starts to lose stability!",\ - "I hear a loud electrical crack!") - playsound(src.loc, 'sound/blank.ogg', 100, TRUE, extrarange = 5) - tesla_zap(src, 5, power_gen * 0.05) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(explosion), get_turf(src), 2, 3, 4, 8), 100) // Not a normal explosion. - -/obj/machinery/power/rtg/abductor/bullet_act(obj/projectile/Proj) - . = ..() - if(!going_kaboom && istype(Proj) && !Proj.nodamage && ((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE))) - log_bomber(Proj.firer, "triggered a", src, "explosion via projectile") - overload() - -/obj/machinery/power/rtg/abductor/blob_act(obj/structure/blob/B) - overload() - -/obj/machinery/power/rtg/abductor/ex_act() - if(going_kaboom) - qdel(src) - else - overload() - -/obj/machinery/power/rtg/abductor/fire_act(added, maxstacks) - overload() - -/obj/machinery/power/rtg/abductor/tesla_act() - ..() //extend the zap - overload() diff --git a/code/modules/power/singularity/boh_tear.dm b/code/modules/power/singularity/boh_tear.dm deleted file mode 100644 index a3679401b0..0000000000 --- a/code/modules/power/singularity/boh_tear.dm +++ /dev/null @@ -1,42 +0,0 @@ -/// BoH tear -/// The BoH tear is a stationary singularity with a really high gravitational pull, which collapses briefly after being created -/// The BoH isn't deleted for 10 minutes (only moved to nullspace) so that admins may retrieve the things back in case of a grief -/obj/singularity/boh_tear - name = "tear in the fabric of reality" - desc = "" - icon = 'icons/effects/96x96.dmi' - icon_state = "boh_tear" - pixel_x = -32 - pixel_y = -32 - dissipate = 0 - move_self = 0 - consume_range = 1 - grav_pull = 25 - current_size = STAGE_SIX - allowed_size = STAGE_SIX - var/ghosts = list() - var/old_loc - -/obj/singularity/boh_tear/Initialize() - . = ..() - old_loc = loc - QDEL_IN(src, 5 SECONDS) // vanishes after 5 seconds - -/obj/singularity/boh_tear/process() - eat() - -/obj/singularity/boh_tear/consume(atom/A) - A.singularity_act(current_size, src) - -/obj/singularity/boh_tear/admin_investigate_setup() - var/turf/T = get_turf(src) - message_admins("A BoH tear has been created at [ADMIN_VERBOSEJMP(T)].") - investigate_log("was created at [AREACOORD(T)].", INVESTIGATE_SINGULO) - -/obj/singularity/boh_tear/attack_tk(mob/living/user) - if(!istype(user)) - return - to_chat(user, "I don't feel like you are real anymore.") - user.dust_animation() - user.spawn_dust() - addtimer(CALLBACK(src, PROC_REF(consume), user), 5) diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm deleted file mode 100644 index d51b30160e..0000000000 --- a/code/modules/power/singularity/collector.dm +++ /dev/null @@ -1,263 +0,0 @@ -// stored_energy += (pulse_strength-RAD_COLLECTOR_EFFICIENCY)*RAD_COLLECTOR_COEFFICIENT -#define RAD_COLLECTOR_EFFICIENCY 80 // radiation needs to be over this amount to get power -#define RAD_COLLECTOR_COEFFICIENT 100 -#define RAD_COLLECTOR_STORED_OUT 0.04 // (this*100)% of stored power outputted per tick. Doesn't actualy change output total, lower numbers just means collectors output for longer in absence of a source -#define RAD_COLLECTOR_MINING_CONVERSION_RATE 0.00001 //This is gonna need a lot of tweaking to get right. This is the number used to calculate the conversion of watts to research points per process() -#define RAD_COLLECTOR_OUTPUT min(stored_energy, (stored_energy*RAD_COLLECTOR_STORED_OUT)+1000) //Produces at least 1000 watts if it has more than that stored -#define PUBLIC_TECHWEB_GAIN 0.6 //how many research points go directly into the main pool -#define PRIVATE_TECHWEB_GAIN (1 - PUBLIC_TECHWEB_GAIN) //how many research points go to the user -/obj/machinery/power/rad_collector - name = "Radiation Collector Array" - desc = "" - icon = 'icons/obj/singularity.dmi' - icon_state = "ca" - anchored = FALSE - density = TRUE - req_access = list(ACCESS_ENGINE_EQUIP) -// use_power = NO_POWER_USE - max_integrity = 350 - integrity_failure = 0.2 - circuit = /obj/item/circuitboard/machine/rad_collector - rad_insulation = RAD_EXTREME_INSULATION - var/obj/item/tank/internals/plasma/loaded_tank = null - var/stored_energy = 0 - var/active = 0 - var/locked = FALSE - var/drainratio = 1 - var/powerproduction_drain = 0.001 - - var/bitcoinproduction_drain = 0.15 - var/bitcoinmining = FALSE - ///research points stored - var/stored_research = 0 - -/obj/machinery/power/rad_collector/anchored - anchored = TRUE - -/obj/machinery/power/rad_collector/anchored/delta //Deltastation's engine is shared by engineers and atmos techs - desc = "" - req_access = list(ACCESS_ENGINE_EQUIP, ACCESS_ATMOSPHERICS) - -/obj/machinery/power/rad_collector/Destroy() - return ..() - -/obj/machinery/power/rad_collector/should_have_node() - return anchored - -/obj/machinery/power/rad_collector/process() - if(!loaded_tank) - return - if(!bitcoinmining) - if(!loaded_tank.air_contents.gases[/datum/gas/plasma]) - investigate_log("out of fuel.", INVESTIGATE_SINGULO) - playsound(src, 'sound/blank.ogg', 50, TRUE) - eject() - else - var/gasdrained = min(powerproduction_drain*drainratio,loaded_tank.air_contents.gases[/datum/gas/plasma][MOLES]) - loaded_tank.air_contents.gases[/datum/gas/plasma][MOLES] -= gasdrained - loaded_tank.air_contents.assert_gas(/datum/gas/tritium) - loaded_tank.air_contents.gases[/datum/gas/tritium][MOLES] += gasdrained - loaded_tank.air_contents.garbage_collect() - - var/power_produced = RAD_COLLECTOR_OUTPUT - add_avail(power_produced) - stored_energy-=power_produced - else if(is_station_level(z) && SSresearch.science_tech) - if(!loaded_tank.air_contents.gases[/datum/gas/tritium] || !loaded_tank.air_contents.gases[/datum/gas/oxygen]) - playsound(src, 'sound/blank.ogg', 50, TRUE) - eject() - else - var/gasdrained = bitcoinproduction_drain*drainratio - loaded_tank.air_contents.gases[/datum/gas/tritium][MOLES] -= gasdrained - loaded_tank.air_contents.gases[/datum/gas/oxygen][MOLES] -= gasdrained - loaded_tank.air_contents.assert_gas(/datum/gas/carbon_dioxide) - loaded_tank.air_contents.gases[/datum/gas/carbon_dioxide][MOLES] += gasdrained*2 - loaded_tank.air_contents.garbage_collect() - var/bitcoins_mined = RAD_COLLECTOR_OUTPUT - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_ENG) - if(D) - D.adjust_money(bitcoins_mined*RAD_COLLECTOR_MINING_CONVERSION_RATE) - stored_research += bitcoins_mined*RAD_COLLECTOR_MINING_CONVERSION_RATE*PRIVATE_TECHWEB_GAIN - SSresearch.science_tech.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, bitcoins_mined*RAD_COLLECTOR_MINING_CONVERSION_RATE*PUBLIC_TECHWEB_GAIN) - stored_energy-=bitcoins_mined - -/obj/machinery/power/rad_collector/interact(mob/user) - if(anchored) - if(!src.locked) - toggle_power() - user.visible_message("[user.name] turns the [src.name] [active? "on":"off"].", \ - "I turn the [src.name] [active? "on":"off"].") - var/fuel - if(loaded_tank) - fuel = loaded_tank.air_contents.gases[/datum/gas/plasma] - fuel = fuel ? fuel[MOLES] : 0 - investigate_log("turned [active?"on":"off"] by [key_name(user)]. [loaded_tank?"Fuel: [round(fuel/0.29)]%":"It is empty"].", INVESTIGATE_SINGULO) - return - else - to_chat(user, "The controls are locked!") - return - -/obj/machinery/power/rad_collector/can_be_unfasten_wrench(mob/user, silent) - if(loaded_tank) - if(!silent) - to_chat(user, "Remove the plasma tank first!") - return FAILED_UNFASTEN - return ..() - -/obj/machinery/power/rad_collector/default_unfasten_wrench(mob/user, obj/item/I, time = 20) - . = ..() - if(. == SUCCESSFUL_UNFASTEN) - if(anchored) - connect_to_network() - else - disconnect_from_network() - -/obj/machinery/power/rad_collector/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/tank/internals/plasma)) - if(!anchored) - to_chat(user, "[src] needs to be secured to the floor first!") - return TRUE - if(loaded_tank) - to_chat(user, "There's already a plasma tank loaded!") - return TRUE - if(panel_open) - to_chat(user, "Close the maintenance panel first!") - return TRUE - if(!user.transferItemToLoc(W, src)) - return - loaded_tank = W - update_icon() - else if(W.GetID()) - if(allowed(user)) - if(active) - locked = !locked - to_chat(user, "I [locked ? "lock" : "unlock"] the controls.") - else - to_chat(user, "The controls can only be locked when \the [src] is active!") - else - to_chat(user, "Access denied.") - return TRUE - else - return ..() -/obj/machinery/power/rad_collector/analyzer_act(mob/living/user, obj/item/I) - if(stored_research >= 1) - new /obj/item/research_notes(user.loc, stored_research, "engineering") - stored_research = 0 - return TRUE - return ..() - -/obj/machinery/power/rad_collector/wrench_act(mob/living/user, obj/item/I) - ..() - default_unfasten_wrench(user, I) - return TRUE - -/obj/machinery/power/rad_collector/screwdriver_act(mob/living/user, obj/item/I) - if(..()) - return TRUE - if(loaded_tank) - to_chat(user, "Remove the plasma tank first!") - else - default_deconstruction_screwdriver(user, icon_state, icon_state, I) - return TRUE - -/obj/machinery/power/rad_collector/crowbar_act(mob/living/user, obj/item/I) - if(loaded_tank) - if(locked) - to_chat(user, "The controls are locked!") - return TRUE - eject() - return TRUE - if(default_deconstruction_crowbar(I)) - return TRUE - to_chat(user, "There isn't a tank loaded!") - return TRUE - -/obj/machinery/power/rad_collector/multitool_act(mob/living/user, obj/item/I) - if(!is_station_level(z) && !SSresearch.science_tech) - to_chat(user, "[src] isn't linked to a research system!") - return TRUE - if(locked) - to_chat(user, "[src] is locked!") - return TRUE - if(active) - to_chat(user, "[src] is currently active, producing [bitcoinmining ? "research points":"power"].") - return TRUE - bitcoinmining = !bitcoinmining - to_chat(user, "I [bitcoinmining ? "enable":"disable"] the research point production feature of [src].") - return TRUE - -/obj/machinery/power/rad_collector/return_analyzable_air() - if(loaded_tank) - return loaded_tank.return_analyzable_air() - else - return null - -/obj/machinery/power/rad_collector/examine(mob/user) - . = ..() - if(active) - if(!bitcoinmining) - // stored_energy is converted directly to watts every SSmachines.wait * 0.1 seconds. - // Therefore, its units are joules per SSmachines.wait * 0.1 seconds. - // So joules = stored_energy * SSmachines.wait * 0.1 - var/joules = stored_energy * SSmachines.wait * 0.1 - . += "[src]'s display states that it has stored [DisplayJoules(joules)], and is processing [DisplayPower(RAD_COLLECTOR_OUTPUT)]." - else - . += "[src]'s display states that it has made a total of [stored_research], and is producing [RAD_COLLECTOR_OUTPUT*RAD_COLLECTOR_MINING_CONVERSION_RATE] research points per minute." - else - if(!bitcoinmining) - . += "[src]'s display displays the words: \"Power production mode. Please insert Plasma. Use a multitool to change production modes.\"" - else - . += "[src]'s display displays the words: \"Research point production mode. Please insert Tritium and Oxygen. Use a multitool to change production modes.\"" - -/obj/machinery/power/rad_collector/obj_break(damage_flag) - . = ..() - if(.) - eject() - -/obj/machinery/power/rad_collector/proc/eject() - locked = FALSE - var/obj/item/tank/internals/plasma/Z = src.loaded_tank - if (!Z) - return - Z.forceMove(drop_location()) - Z.layer = initial(Z.layer) - Z.plane = initial(Z.plane) - src.loaded_tank = null - if(active) - toggle_power() - else - update_icon() - -/obj/machinery/power/rad_collector/rad_act(pulse_strength) - . = ..() - if(loaded_tank && active && pulse_strength > RAD_COLLECTOR_EFFICIENCY) - stored_energy += (pulse_strength-RAD_COLLECTOR_EFFICIENCY)*RAD_COLLECTOR_COEFFICIENT - -/obj/machinery/power/rad_collector/update_icon() - cut_overlays() - if(loaded_tank) - add_overlay("ptank") - if(stat & (NOPOWER|BROKEN)) - return - if(active) - add_overlay("on") - - -/obj/machinery/power/rad_collector/proc/toggle_power() - active = !active - if(active) - icon_state = "ca_on" - flick("ca_active", src) - else - icon_state = "ca" - flick("ca_deactive", src) - update_icon() - return - -#undef RAD_COLLECTOR_EFFICIENCY -#undef RAD_COLLECTOR_COEFFICIENT -#undef RAD_COLLECTOR_STORED_OUT -#undef RAD_COLLECTOR_MINING_CONVERSION_RATE -#undef RAD_COLLECTOR_OUTPUT -#undef PUBLIC_TECHWEB_GAIN -#undef PRIVATE_TECHWEB_GAIN diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm deleted file mode 100644 index 7a8ddcec2b..0000000000 --- a/code/modules/power/singularity/containment_field.dm +++ /dev/null @@ -1,144 +0,0 @@ - - -/obj/machinery/field/containment - name = "containment field" - desc = "" - icon = 'icons/obj/singularity.dmi' - icon_state = "Contain_F" - density = FALSE - move_resist = INFINITY - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - use_power = NO_POWER_USE - interaction_flags_atom = NONE - interaction_flags_machine = NONE - CanAtmosPass = ATMOS_PASS_NO - light_range = 4 - layer = ABOVE_OBJ_LAYER - var/obj/machinery/field/generator/FG1 = null - var/obj/machinery/field/generator/FG2 = null - -/obj/machinery/field/containment/Initialize() - . = ..() - air_update_turf(TRUE) - -/obj/machinery/field/containment/Destroy() - if(length(FG1?.fields)) - FG1.fields -= src - if(length(FG2?.fields)) - FG2.fields -= src - CanAtmosPass = ATMOS_PASS_YES - air_update_turf(TRUE) - return ..() - -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/machinery/field/containment/attack_hand(mob/user) - if(get_dist(src, user) > 1) - return FALSE - else - shock(user) - return TRUE - -/obj/machinery/field/containment/attackby(obj/item/W, mob/user, params) - shock(user) - return TRUE - -/obj/machinery/field/containment/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BURN) - playsound(loc, 'sound/blank.ogg', 75, TRUE) - if(BRUTE) - playsound(loc, 'sound/blank.ogg', 75, TRUE) - -/obj/machinery/field/containment/blob_act(obj/structure/blob/B) - return FALSE - -/obj/machinery/field/containment/ex_act(severity, target) - return FALSE - -/obj/machinery/field/containment/attack_animal(mob/living/simple_animal/M) - if(!FG1 || !FG2) - qdel(src) - return - if(ismegafauna(M)) - M.visible_message("[M] glows fiercely as the containment field flickers out!") - FG1.calc_power(INFINITY) //rip that 'containment' field - M.adjustHealth(-M.obj_damage) - else - ..() - -/obj/machinery/field/containment/Crossed(mob/mover) - if(isliving(mover)) - shock(mover) - - if(ismachinery(mover) || isstructure(mover) || ismecha(mover)) - bump_field(mover) - -/obj/machinery/field/containment/proc/set_master(master1,master2) - if(!master1 || !master2) - return FALSE - FG1 = master1 - FG2 = master2 - return TRUE - -/obj/machinery/field/containment/shock(mob/living/user) - if(!FG1 || !FG2) - qdel(src) - return FALSE - ..() - -/obj/machinery/field/containment/Move() - qdel(src) - return FALSE - - -// Abstract Field Class -// Used for overriding certain procs - -/obj/machinery/field - var/hasShocked = FALSE //Used to add a delay between shocks. In some cases this used to crash servers by spawning hundreds of sparks every second. - -/obj/machinery/field/Bumped(atom/movable/mover) - if(hasShocked) - return - if(isliving(mover)) - shock(mover) - return - if(ismachinery(mover) || isstructure(mover) || ismecha(mover)) - bump_field(mover) - return - - -/obj/machinery/field/CanPass(atom/movable/mover, turf/target) - if(hasShocked || isliving(mover) || ismachinery(mover) || isstructure(mover) || ismecha(mover)) - return FALSE - return ..() - -/obj/machinery/field/proc/shock(mob/living/user) - var/shock_damage = min(rand(30,40),rand(30,40)) - - if(iscarbon(user)) - user.Paralyze(300) - user.electrocute_act(shock_damage, src, 1) - - else if(issilicon(user)) - if(prob(20)) - user.Stun(40) - user.take_overall_damage(0, shock_damage) - user.visible_message("[user.name] was shocked by the [src.name]!", \ - "Energy pulse detected, system damaged!", \ - "I hear an electrical crack.") - - user.updatehealth() - bump_field(user) - -/obj/machinery/field/proc/clear_shock() - hasShocked = FALSE - -/obj/machinery/field/proc/bump_field(atom/movable/AM as mob|obj) - if(hasShocked) - return FALSE - hasShocked = TRUE - do_sparks(5, TRUE, AM.loc) - var/atom/target = get_edge_target_turf(AM, get_dir(src, get_step_away(AM, src))) - AM.throw_at(target, 200, 4) - addtimer(CALLBACK(src, PROC_REF(clear_shock)), 5) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm deleted file mode 100644 index 0e0bb62937..0000000000 --- a/code/modules/power/singularity/emitter.dm +++ /dev/null @@ -1,518 +0,0 @@ -//emitter construction defines -#define EMITTER_UNWRENCHED 0 -#define EMITTER_WRENCHED 1 -#define EMITTER_WELDED 2 - -/obj/machinery/power/emitter - name = "emitter" - desc = "" - icon = 'icons/obj/singularity.dmi' - icon_state = "emitter" - - anchored = FALSE - density = TRUE - req_access = list(ACCESS_ENGINE_EQUIP) - circuit = /obj/item/circuitboard/machine/emitter - - use_power = NO_POWER_USE - idle_power_usage = 10 - active_power_usage = 300 - - var/icon_state_on = "emitter_+a" - var/icon_state_underpowered = "emitter_+u" - var/active = FALSE - var/powered = FALSE - var/fire_delay = 100 - var/maximum_fire_delay = 100 - var/minimum_fire_delay = 20 - var/last_shot = 0 - var/shot_number = 0 - var/state = EMITTER_UNWRENCHED - var/locked = FALSE - var/allow_switch_interact = TRUE - - var/projectile_type = /obj/projectile/beam/emitter - var/projectile_sound = 'sound/blank.ogg' - var/datum/effect_system/spark_spread/sparks - - var/obj/item/gun/energy/gun - var/list/gun_properties - var/mode = 0 - - // The following 3 vars are mostly for the prototype - var/manual = FALSE - var/charge = 0 - var/last_projectile_params - - -/obj/machinery/power/emitter/anchored - anchored = TRUE - -/obj/machinery/power/emitter/ctf - name = "Energy Cannon" - active = TRUE - active_power_usage = FALSE - idle_power_usage = FALSE - locked = TRUE - req_access_txt = "100" - state = EMITTER_WELDED - use_power = FALSE - -/obj/machinery/power/emitter/Initialize() - . = ..() - RefreshParts() - wires = new /datum/wires/emitter(src) - if(state == EMITTER_WELDED && anchored) - connect_to_network() - - sparks = new - sparks.attach(src) - sparks.set_up(5, TRUE, src) - -/obj/machinery/power/emitter/ComponentInitialize() - . = ..() - AddComponent(/datum/component/empprotection, EMP_PROTECT_SELF | EMP_PROTECT_WIRES) - -/obj/machinery/power/emitter/RefreshParts() - var/max_firedelay = 120 - var/firedelay = 120 - var/min_firedelay = 24 - var/power_usage = 350 - for(var/obj/item/stock_parts/micro_laser/L in component_parts) - max_firedelay -= 20 * L.rating - min_firedelay -= 4 * L.rating - firedelay -= 20 * L.rating - maximum_fire_delay = max_firedelay - minimum_fire_delay = min_firedelay - fire_delay = firedelay - for(var/obj/item/stock_parts/manipulator/M in component_parts) - power_usage -= 50 * M.rating - active_power_usage = power_usage - -/obj/machinery/power/emitter/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Emitting one beam each [fire_delay*0.1] seconds.
    Power consumption at [active_power_usage]W.
    " - -/obj/machinery/power/emitter/ComponentInitialize() - . = ..() - AddComponent(/datum/component/simple_rotation, ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS, null, CALLBACK(src, PROC_REF(can_be_rotated))) - -/obj/machinery/power/emitter/proc/can_be_rotated(mob/user,rotation_type) - if (anchored) - to_chat(user, "It is fastened to the floor!") - return FALSE - return TRUE - -/obj/machinery/power/emitter/should_have_node() - if(state == EMITTER_WELDED) - return TRUE - return FALSE - -/obj/machinery/power/emitter/Destroy() - if(SSticker.IsRoundInProgress()) - var/turf/T = get_turf(src) - message_admins("Emitter deleted at [ADMIN_VERBOSEJMP(T)]") - log_game("Emitter deleted at [AREACOORD(T)]") - investigate_log("deleted at [AREACOORD(T)]", INVESTIGATE_SINGULO) - QDEL_NULL(sparks) - return ..() - -/obj/machinery/power/emitter/update_icon() - if(active && powernet) - icon_state = avail(active_power_usage) ? icon_state_on : icon_state_underpowered - else - icon_state = initial(icon_state) - -/obj/machinery/power/emitter/interact(mob/user) - add_fingerprint(user) - if(state == EMITTER_WELDED) - if(!powernet) - to_chat(user, "\The [src] isn't connected to a wire!") - return TRUE - if(!locked && allow_switch_interact) - if(active == TRUE) - active = FALSE - to_chat(user, "I turn off [src].") - else - active = TRUE - to_chat(user, "I turn on [src].") - shot_number = 0 - fire_delay = maximum_fire_delay - - message_admins("Emitter turned [active ? "ON" : "OFF"] by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(src)]") - log_game("Emitter turned [active ? "ON" : "OFF"] by [key_name(user)] in [AREACOORD(src)]") - investigate_log("turned [active ? "ON" : "OFF"] by [key_name(user)] at [AREACOORD(src)]", INVESTIGATE_SINGULO) - - update_icon() - - else - to_chat(user, "The controls are locked!") - else - to_chat(user, "[src] needs to be firmly secured to the floor first!") - return TRUE - -/obj/machinery/power/emitter/attack_animal(mob/living/simple_animal/M) - if(ismegafauna(M) && anchored) - state = EMITTER_UNWRENCHED - anchored = FALSE - M.visible_message("[M] rips [src] free from its moorings!") - else - ..() - if(!anchored) - step(src, get_dir(M, src)) - -/obj/machinery/power/emitter/process() - if(stat & (BROKEN)) - return - if(state != EMITTER_WELDED || (!powernet && active_power_usage)) - active = FALSE - update_icon() - return - if(active == TRUE) - if(!active_power_usage || surplus() >= active_power_usage) - add_load(active_power_usage) - if(!powered) - powered = TRUE - update_icon() - investigate_log("regained power and turned ON at [AREACOORD(src)]", INVESTIGATE_SINGULO) - else - if(powered) - powered = FALSE - update_icon() - investigate_log("lost power and turned OFF at [AREACOORD(src)]", INVESTIGATE_SINGULO) - log_game("Emitter lost power in [AREACOORD(src)]") - return - if(charge <= 80) - charge += 5 - if(!check_delay() || manual == TRUE) - return FALSE - fire_beam() - -/obj/machinery/power/emitter/proc/check_delay() - if((src.last_shot + src.fire_delay) <= world.time) - return TRUE - return FALSE - -/obj/machinery/power/emitter/proc/fire_beam_pulse() - if(!check_delay()) - return FALSE - if(state != EMITTER_WELDED) - return FALSE - if(surplus() >= active_power_usage) - add_load(active_power_usage) - fire_beam() - -/obj/machinery/power/emitter/proc/fire_beam(mob/user) - var/obj/projectile/P = new projectile_type(get_turf(src)) - playsound(get_turf(src), projectile_sound, 50, TRUE) - if(prob(35)) - sparks.start() - P.firer = user ? user : src - P.fired_from = src - if(last_projectile_params) - P.p_x = last_projectile_params[2] - P.p_y = last_projectile_params[3] - P.fire(last_projectile_params[1]) - else - P.fire(dir2angle(dir)) - if(!manual) - last_shot = world.time - if(shot_number < 3) - fire_delay = 20 - shot_number ++ - else - fire_delay = rand(minimum_fire_delay,maximum_fire_delay) - shot_number = 0 - return P - -/obj/machinery/power/emitter/can_be_unfasten_wrench(mob/user, silent) - if(active) - if(!silent) - to_chat(user, "Turn \the [src] off first!") - return FAILED_UNFASTEN - - else if(state == EMITTER_WELDED) - if(!silent) - to_chat(user, "[src] is welded to the floor!") - return FAILED_UNFASTEN - - return ..() - -/obj/machinery/power/emitter/default_unfasten_wrench(mob/user, obj/item/I, time = 20) - . = ..() - if(. == SUCCESSFUL_UNFASTEN) - if(anchored) - state = EMITTER_WRENCHED - else - state = EMITTER_UNWRENCHED - -/obj/machinery/power/emitter/wrench_act(mob/living/user, obj/item/I) - ..() - default_unfasten_wrench(user, I) - return TRUE - -/obj/machinery/power/emitter/welder_act(mob/living/user, obj/item/I) - . = ..() - if(active) - to_chat(user, "Turn \the [src] off first!") - return TRUE - - switch(state) - if(EMITTER_UNWRENCHED) - to_chat(user, "The [src.name] needs to be wrenched to the floor!") - if(EMITTER_WRENCHED) - if(!I.tool_start_check(user, amount=0)) - return TRUE - user.visible_message("[user.name] starts to weld the [name] to the floor.", \ - "I start to weld \the [src] to the floor...", \ - "I hear welding.") - if(I.use_tool(src, user, 20, volume=50) && state == EMITTER_WRENCHED) - state = EMITTER_WELDED - to_chat(user, "I weld \the [src] to the floor.") - connect_to_network() - update_cable_icons_on_turf(get_turf(src)) - if(EMITTER_WELDED) - if(!I.tool_start_check(user, amount=0)) - return TRUE - user.visible_message("[user.name] starts to cut the [name] free from the floor.", \ - "I start to cut \the [src] free from the floor...", \ - "I hear welding.") - if(I.use_tool(src, user, 20, volume=50) && state == EMITTER_WELDED) - state = EMITTER_WRENCHED - to_chat(user, "I cut \the [src] free from the floor.") - disconnect_from_network() - update_cable_icons_on_turf(get_turf(src)) - - return TRUE - -/obj/machinery/power/emitter/crowbar_act(mob/living/user, obj/item/I) - if(panel_open && gun) - return remove_gun(user) - default_deconstruction_crowbar(I) - return TRUE - -/obj/machinery/power/emitter/screwdriver_act(mob/living/user, obj/item/I) - if(..()) - return TRUE - default_deconstruction_screwdriver(user, "emitter_open", "emitter", I) - return TRUE - - -/obj/machinery/power/emitter/attackby(obj/item/I, mob/user, params) - if(I.GetID()) - if(obj_flags & EMAGGED) - to_chat(user, "The lock seems to be broken!") - return - if(allowed(user)) - if(active) - locked = !locked - to_chat(user, "I [src.locked ? "lock" : "unlock"] the controls.") - else - to_chat(user, "The controls can only be locked when \the [src] is online!") - else - to_chat(user, "Access denied.") - return - - else if(is_wire_tool(I) && panel_open) - wires.interact(user) - return - else if(panel_open && !gun && istype(I,/obj/item/gun/energy)) - if(integrate(I,user)) - return - return ..() - -/obj/machinery/power/emitter/proc/integrate(obj/item/gun/energy/E,mob/user) - if(istype(E, /obj/item/gun/energy)) - if(!user.transferItemToLoc(E, src)) - return - gun = E - gun_properties = gun.get_turret_properties() - set_projectile() - return TRUE - -/obj/machinery/power/emitter/proc/remove_gun(mob/user) - if(!gun) - return - user.put_in_hands(gun) - gun = null - playsound(src, 'sound/blank.ogg', 50, TRUE) - gun_properties = list() - set_projectile() - return TRUE - -/obj/machinery/power/emitter/proc/set_projectile() - if(LAZYLEN(gun_properties)) - if(mode || !gun_properties["lethal_projectile"]) - projectile_type = gun_properties["stun_projectile"] - projectile_sound = gun_properties["stun_projectile_sound"] - else - projectile_type = gun_properties["lethal_projectile"] - projectile_sound = gun_properties["lethal_projectile_sound"] - return - projectile_type = initial(projectile_type) - projectile_sound = initial(projectile_sound) - -/obj/machinery/power/emitter/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - locked = FALSE - obj_flags |= EMAGGED - if(user) - user.visible_message("[user.name] emags [src].", "I short out the lock.") - - -/obj/machinery/power/emitter/prototype - name = "Prototype Emitter" - icon = 'icons/obj/turrets.dmi' - icon_state = "protoemitter" - icon_state_on = "protoemitter_+a" - icon_state_underpowered = "protoemitter_+u" - can_buckle = TRUE - buckle_lying = FALSE - var/view_range = 12 - var/datum/action/innate/protoemitter/firing/auto - -//BUCKLE HOOKS - -/obj/machinery/power/emitter/prototype/unbuckle_mob(mob/living/buckled_mob,force = 0) - playsound(src,'sound/blank.ogg', 50, TRUE) - manual = FALSE - for(var/obj/item/I in buckled_mob.held_items) - if(istype(I, /obj/item/turret_control)) - qdel(I) - if(istype(buckled_mob)) - buckled_mob.pixel_x = 0 - buckled_mob.pixel_y = 0 - if(buckled_mob.client) - buckled_mob.client.change_view(CONFIG_GET(string/default_view)) - auto.Remove(buckled_mob) - . = ..() - -/obj/machinery/power/emitter/prototype/user_buckle_mob(mob/living/M, mob/living/carbon/user) - if(user.incapacitated() || !istype(user)) - return - for(var/atom/movable/A in get_turf(src)) - if(A.density && (A != src && A != M)) - return - M.forceMove(get_turf(src)) - ..() - playsound(src,'sound/blank.ogg', 50, TRUE) - M.pixel_y = 14 - layer = 4.1 - if(M.client) - M.client.change_view(view_range) - if(!auto) - auto = new() - auto.Grant(M, src) - -/datum/action/innate/protoemitter - check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUN | AB_CHECK_CONSCIOUS - var/obj/machinery/power/emitter/prototype/PE - var/mob/living/carbon/U - - -/datum/action/innate/protoemitter/Grant(mob/living/carbon/L, obj/machinery/power/emitter/prototype/proto) - PE = proto - U = L - . = ..() - -/datum/action/innate/protoemitter/firing - name = "Switch to Manual Firing" - desc = "" - button_icon_state = "mech_zoom_on" - -/datum/action/innate/protoemitter/firing/Activate() - if(PE.manual) - playsound(PE,'sound/blank.ogg', 50, TRUE) - PE.manual = FALSE - name = "Switch to Manual Firing" - desc = "" - button_icon_state = "mech_zoom_on" - for(var/obj/item/I in U.held_items) - if(istype(I, /obj/item/turret_control)) - qdel(I) - UpdateButtonIcon() - return - else - playsound(PE,'sound/blank.ogg', 50, TRUE) - name = "Switch to Automatic Firing" - desc = "" - button_icon_state = "mech_zoom_off" - PE.manual = TRUE - for(var/V in U.held_items) - var/obj/item/I = V - if(istype(I)) - if(U.dropItemToGround(I)) - var/obj/item/turret_control/TC = new /obj/item/turret_control() - U.put_in_hands(TC) - else //Entries in the list should only ever be items or null, so if it's not an item, we can assume it's an empty hand - var/obj/item/turret_control/TC = new /obj/item/turret_control() - U.put_in_hands(TC) - UpdateButtonIcon() - - -/obj/item/turret_control - name = "turret controls" - icon_state = "offhand" - w_class = WEIGHT_CLASS_HUGE - item_flags = ABSTRACT | NOBLUDGEON - resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF - var/delay = 0 - -/obj/item/turret_control/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) - -/obj/item/turret_control/afterattack(atom/targeted_atom, mob/user, proxflag, clickparams) - . = ..() - var/obj/machinery/power/emitter/E = user.buckled - E.setDir(get_dir(E,targeted_atom)) - user.setDir(E.dir) - switch(E.dir) - if(NORTH) - E.layer = 3.9 - user.pixel_x = 0 - user.pixel_y = -14 - if(NORTHEAST) - E.layer = 3.9 - user.pixel_x = -8 - user.pixel_y = -12 - if(EAST) - E.layer = 4.1 - user.pixel_x = -14 - user.pixel_y = 0 - if(SOUTHEAST) - E.layer = 3.9 - user.pixel_x = -8 - user.pixel_y = 12 - if(SOUTH) - E.layer = 4.1 - user.pixel_x = 0 - user.pixel_y = 14 - if(SOUTHWEST) - E.layer = 3.9 - user.pixel_x = 8 - user.pixel_y = 12 - if(WEST) - E.layer = 4.1 - user.pixel_x = 14 - user.pixel_y = 0 - if(NORTHWEST) - E.layer = 3.9 - user.pixel_x = 8 - user.pixel_y = -12 - - E.last_projectile_params = calculate_projectile_angle_and_pixel_offsets(user, clickparams) - - if(E.charge >= 10 && world.time > delay) - E.charge -= 10 - E.fire_beam(user) - delay = world.time + 10 - else if (E.charge < 10) - playsound(src,'sound/blank.ogg', 50, TRUE) - - -#undef EMITTER_UNWRENCHED -#undef EMITTER_WRENCHED -#undef EMITTER_WELDED diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm deleted file mode 100644 index 7a11a80e40..0000000000 --- a/code/modules/power/singularity/field_generator.dm +++ /dev/null @@ -1,409 +0,0 @@ - - - -/* -field_generator power level display -The icon used for the field_generator need to have 'num_power_levels' number of icon states -named 'Field_Gen +p[num]' where 'num' ranges from 1 to 'num_power_levels' - -The power level is displayed using overlays. The current displayed power level is stored in 'powerlevel'. -The overlay in use and the powerlevel variable must be kept in sync. A powerlevel equal to 0 means that -no power level overlay is currently in the overlays list. --Aygar -*/ - -#define field_generator_max_power 250 - -#define FG_OFFLINE 0 -#define FG_CHARGING 1 -#define FG_ONLINE 2 - -//field generator construction defines -#define FG_UNSECURED 0 -#define FG_SECURED 1 -#define FG_WELDED 2 - -/obj/machinery/field/generator - name = "field generator" - desc = "" - icon = 'icons/obj/machines/field_generator.dmi' - icon_state = "Field_Gen" - anchored = FALSE - density = TRUE - use_power = NO_POWER_USE - max_integrity = 500 - CanAtmosPass = ATMOS_PASS_YES - //100% immune to lasers and energy projectiles since it absorbs their energy. - armor = list("melee" = 25, "bullet" = 10, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70) - var/const/num_power_levels = 6 // Total number of power level icon has - var/power_level = 0 - var/active = FG_OFFLINE - var/power = 20 // Current amount of power - var/state = FG_UNSECURED - var/warming_up = 0 - var/list/obj/machinery/field/containment/fields - var/list/obj/machinery/field/generator/connected_gens - var/clean_up = 0 - -/obj/machinery/field/generator/update_icon() - cut_overlays() - if(warming_up) - add_overlay("+a[warming_up]") - if(LAZYLEN(fields)) - add_overlay("+on") - if(power_level) - add_overlay("+p[power_level]") - - -/obj/machinery/field/generator/Initialize() - . = ..() - fields = list() - connected_gens = list() - -/obj/machinery/field/generator/ComponentInitialize() - . = ..() - AddComponent(/datum/component/empprotection, EMP_PROTECT_SELF | EMP_PROTECT_WIRES) - -/obj/machinery/field/generator/process() - if(active == FG_ONLINE) - calc_power() - -/obj/machinery/field/generator/interact(mob/user) - if(state == FG_WELDED) - if(get_dist(src, user) <= 1)//Need to actually touch the thing to turn it on - if(active >= FG_CHARGING) - to_chat(user, "I are unable to turn off [src] once it is online!") - return 1 - else - user.visible_message("[user] turns on [src].", \ - "I turn on [src].", \ - "I hear heavy droning.") - turn_on() - investigate_log("activated by [key_name(user)].", INVESTIGATE_SINGULO) - - add_fingerprint(user) - else - to_chat(user, "[src] needs to be firmly secured to the floor first!") - -/obj/machinery/field/generator/can_be_unfasten_wrench(mob/user, silent) - if(active) - if(!silent) - to_chat(user, "Turn \the [src] off first!") - return FAILED_UNFASTEN - - else if(state == FG_WELDED) - if(!silent) - to_chat(user, "[src] is welded to the floor!") - return FAILED_UNFASTEN - - return ..() - -/obj/machinery/field/generator/default_unfasten_wrench(mob/user, obj/item/I, time = 20) - . = ..() - if(. == SUCCESSFUL_UNFASTEN) - if(anchored) - state = FG_SECURED - else - state = FG_UNSECURED - -/obj/machinery/field/generator/wrench_act(mob/living/user, obj/item/I) - ..() - default_unfasten_wrench(user, I) - return TRUE - -/obj/machinery/field/generator/welder_act(mob/living/user, obj/item/I) - . = ..() - if(active) - to_chat(user, "[src] needs to be off!") - return TRUE - - switch(state) - if(FG_UNSECURED) - to_chat(user, "[src] needs to be wrenched to the floor!") - - if(FG_SECURED) - if(!I.tool_start_check(user, amount=0)) - return TRUE - user.visible_message("[user] starts to weld [src] to the floor.", \ - "I start to weld \the [src] to the floor...", \ - "I hear welding.") - if(I.use_tool(src, user, 20, volume=50) && state == FG_SECURED) - state = FG_WELDED - to_chat(user, "I weld the field generator to the floor.") - - if(FG_WELDED) - if(!I.tool_start_check(user, amount=0)) - return TRUE - user.visible_message("[user] starts to cut [src] free from the floor.", \ - "I start to cut \the [src] free from the floor...", \ - "I hear welding.") - if(I.use_tool(src, user, 20, volume=50) && state == FG_WELDED) - state = FG_SECURED - to_chat(user, "I cut \the [src] free from the floor.") - - return TRUE - - -/obj/machinery/field/generator/attack_animal(mob/living/simple_animal/M) - if(M.environment_smash & ENVIRONMENT_SMASH_RWALLS && active == FG_OFFLINE && state != FG_UNSECURED) - state = FG_UNSECURED - anchored = FALSE - M.visible_message("[M] rips [src] free from its moorings!") - else - ..() - if(!anchored) - step(src, get_dir(M, src)) - -/obj/machinery/field/generator/blob_act(obj/structure/blob/B) - if(active) - return 0 - else - ..() - -/obj/machinery/field/generator/bullet_act(obj/projectile/Proj) - if(Proj.flag != "bullet") - power = min(power + Proj.damage, field_generator_max_power) - check_power_level() - . = ..() - - -/obj/machinery/field/generator/Destroy() - cleanup() - return ..() - - -/obj/machinery/field/generator/proc/check_power_level() - var/new_level = round(num_power_levels * power / field_generator_max_power) - if(new_level != power_level) - power_level = new_level - update_icon() - -/obj/machinery/field/generator/proc/turn_off() - active = FG_OFFLINE - CanAtmosPass = ATMOS_PASS_YES - air_update_turf(TRUE) - INVOKE_ASYNC(src, PROC_REF(cleanup)) - addtimer(CALLBACK(src, PROC_REF(cool_down)), 50) - -/obj/machinery/field/generator/proc/cool_down() - if(active || warming_up <= 0) - return - warming_up-- - update_icon() - if(warming_up > 0) - addtimer(CALLBACK(src, PROC_REF(cool_down)), 50) - -/obj/machinery/field/generator/proc/turn_on() - active = FG_CHARGING - addtimer(CALLBACK(src, PROC_REF(warm_up)), 50) - -/obj/machinery/field/generator/proc/warm_up() - if(!active) - return - warming_up++ - update_icon() - if(warming_up >= 3) - start_fields() - else - addtimer(CALLBACK(src, PROC_REF(warm_up)), 50) - -/obj/machinery/field/generator/proc/calc_power(set_power_draw) - var/power_draw = 2 + fields.len - if(set_power_draw) - power_draw = set_power_draw - - if(draw_power(round(power_draw/2,1))) - check_power_level() - return 1 - else - visible_message("The [name] shuts down!", "I hear something shutting down.") - turn_off() - investigate_log("ran out of power and deactivated", INVESTIGATE_SINGULO) - power = 0 - check_power_level() - return 0 - -//This could likely be better, it tends to start loopin if you have a complex generator loop setup. Still works well enough to run the engine fields will likely recode the field gens and fields sometime -Mport -/obj/machinery/field/generator/proc/draw_power(draw = 0, failsafe = FALSE, obj/machinery/field/generator/G = null, obj/machinery/field/generator/last = null) - if((G && (G == src)) || (failsafe >= 8))//Loopin, set fail - return 0 - else - failsafe++ - - if(power >= draw)//We have enough power - power -= draw - return 1 - - else//Need more power - draw -= power - power = 0 - for(var/CG in connected_gens) - var/obj/machinery/field/generator/FG = CG - if(FG == last)//We just asked you - continue - if(G)//Another gen is askin for power and we dont have it - if(FG.draw_power(draw,failsafe,G,src))//Can you take the load - return 1 - else - return 0 - else//We are askin another for power - if(FG.draw_power(draw,failsafe,src,src)) - return 1 - else - return 0 - - -/obj/machinery/field/generator/proc/start_fields() - if(state != FG_WELDED || !anchored) - turn_off() - return - move_resist = INFINITY - CanAtmosPass = ATMOS_PASS_NO - air_update_turf(TRUE) - addtimer(CALLBACK(src, PROC_REF(setup_field), 1), 1) - addtimer(CALLBACK(src, PROC_REF(setup_field), 2), 2) - addtimer(CALLBACK(src, PROC_REF(setup_field), 4), 3) - addtimer(CALLBACK(src, PROC_REF(setup_field), 8), 4) - addtimer(VARSET_CALLBACK(src, active, FG_ONLINE), 5) - -/obj/machinery/field/generator/proc/setup_field(NSEW) - var/turf/T = loc - if(!istype(T)) - return 0 - - var/obj/machinery/field/generator/G = null - var/steps = 0 - if(!NSEW)//Make sure its ran right - return 0 - for(var/dist in 0 to 7) // checks out to 8 tiles away for another generator - T = get_step(T, NSEW) - if(T.density)//We cant shoot a field though this - return 0 - - G = locate(/obj/machinery/field/generator) in T - if(G) - steps -= 1 - if(!G.active) - return 0 - break - - for(var/TC in T.contents) - var/atom/A = TC - if(ismob(A)) - continue - if(A.density) - return 0 - - steps++ - - if(!G) - return 0 - - T = loc - for(var/dist in 0 to steps) // creates each field tile - var/field_dir = get_dir(T,get_step(G.loc, NSEW)) - T = get_step(T, NSEW) - if(!locate(/obj/machinery/field/containment) in T) - var/obj/machinery/field/containment/CF = new(T) - CF.set_master(src,G) - CF.setDir(field_dir) - fields += CF - G.fields += CF - for(var/mob/living/L in T) - CF.Crossed(L) - - connected_gens |= G - G.connected_gens |= src - shield_floor(TRUE) - update_icon() - - -/obj/machinery/field/generator/proc/cleanup() - clean_up = 1 - for (var/F in fields) - qdel(F) - - shield_floor(FALSE) - - for(var/CG in connected_gens) - var/obj/machinery/field/generator/FG = CG - FG.connected_gens -= src - if(!FG.clean_up)//Makes the other gens clean up as well - FG.cleanup() - connected_gens -= FG - clean_up = 0 - update_icon() - - //This is here to help fight the "hurr durr, release singulo cos nobody will notice before the - //singulo eats the evidence". It's not fool-proof but better than nothing. - //I want to avoid using global variables. - INVOKE_ASYNC(src, PROC_REF(notify_admins)) - - move_resist = initial(move_resist) - -/obj/machinery/field/generator/proc/shield_floor(create) - if(connected_gens.len < 2) - return - var/CGcounter - for(CGcounter = 1; CGcounter < connected_gens.len, CGcounter++) - - var/list/CGList = ((connected_gens[CGcounter].connected_gens & connected_gens[CGcounter+1].connected_gens)^src) - if(!CGList.len) - return - var/obj/machinery/field/generator/CG = CGList[1] - - var/x_step - var/y_step - if(CG.x > x && CG.y > y) - for(x_step=x; x_step <= CG.x; x_step++) - for(y_step=y; y_step <= CG.y; y_step++) - place_floor(locate(x_step,y_step,z),create) - else if(CG.x > x && CG.y < y) - for(x_step=x; x_step <= CG.x; x_step++) - for(y_step=y; y_step >= CG.y; y_step--) - place_floor(locate(x_step,y_step,z),create) - else if(CG.x < x && CG.y > y) - for(x_step=x; x_step >= CG.x; x_step--) - for(y_step=y; y_step <= CG.y; y_step++) - place_floor(locate(x_step,y_step,z),create) - else - for(x_step=x; x_step >= CG.x; x_step--) - for(y_step=y; y_step >= CG.y; y_step--) - place_floor(locate(x_step,y_step,z),create) - - -/obj/machinery/field/generator/proc/place_floor(Location,create) - if(create && !locate(/obj/effect/shield) in Location) - new/obj/effect/shield(Location) - else if(!create) - var/obj/effect/shield/S=locate(/obj/effect/shield) in Location - if(S) - qdel(S) - -/obj/machinery/field/generator/proc/notify_admins() - var/temp = TRUE //stops spam - for(var/obj/singularity/O in GLOB.singularities) - if(O.last_warning && temp) - if((world.time - O.last_warning) > 50) //to stop message-spam - temp = FALSE - var/turf/T = get_turf(src) - message_admins("A singulo exists and a containment field has failed at [ADMIN_VERBOSEJMP(T)].") - investigate_log("has failed whilst a singulo exists at [AREACOORD(T)].", INVESTIGATE_SINGULO) - notify_ghosts("") - O.last_warning = world.time - -/obj/machinery/field/generator/shock(mob/living/user) - if(fields.len) - ..() - -/obj/machinery/field/generator/bump_field(atom/movable/AM as mob|obj) - if(fields.len) - ..() - -#undef FG_UNSECURED -#undef FG_SECURED -#undef FG_WELDED - -#undef FG_OFFLINE -#undef FG_CHARGING -#undef FG_ONLINE diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm deleted file mode 100644 index 2214461654..0000000000 --- a/code/modules/power/singularity/generator.dm +++ /dev/null @@ -1,35 +0,0 @@ -/////SINGULARITY SPAWNER -/obj/machinery/the_singularitygen - name = "Gravitational Singularity Generator" - desc = "" - icon = 'icons/obj/singularity.dmi' - icon_state = "TheSingGen" - anchored = FALSE - density = TRUE - use_power = NO_POWER_USE - resistance_flags = FIRE_PROOF - - // You can buckle someone to the singularity generator, then start the engine. Fun! - can_buckle = TRUE - buckle_lying = FALSE - buckle_requires_restraints = TRUE - - var/energy = 0 - var/creation_type = /obj/singularity - -/obj/machinery/the_singularitygen/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_WRENCH) - default_unfasten_wrench(user, W, 0) - else - return ..() - -/obj/machinery/the_singularitygen/process() - if(energy > 0) - if(energy >= 200) - var/turf/T = get_turf(src) - SSblackbox.record_feedback("tally", "engine_started", 1, type) - var/obj/singularity/S = new creation_type(T, 50) - transfer_fingerprints_to(S) - qdel(src) - else - energy -= 1 diff --git a/code/modules/power/singularity/investigate.dm b/code/modules/power/singularity/investigate.dm deleted file mode 100644 index 5db912b8d6..0000000000 --- a/code/modules/power/singularity/investigate.dm +++ /dev/null @@ -1,4 +0,0 @@ -/area/engine/engineering/poweralert(state, source) - if (state != poweralm) - investigate_log("has a power alarm!", INVESTIGATE_SINGULO) - ..() diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm deleted file mode 100644 index 38493eaebb..0000000000 --- a/code/modules/power/singularity/narsie.dm +++ /dev/null @@ -1,204 +0,0 @@ -/obj/singularity/narsie //Moving narsie to a child object of the singularity so it can be made to function differently. --NEO - name = "Nar'Sie's Avatar" - desc = "" - icon = 'icons/obj/magic_terror.dmi' - pixel_x = -89 - pixel_y = -85 - density = FALSE - current_size = 9 //It moves/eats like a max-size singulo, aside from range. --NEO - contained = 0 //Are we going to move around? - dissipate = 0 //Do we lose energy over time? - move_self = 1 //Do we move on our own? - grav_pull = 5 //How many tiles out do we pull? - consume_range = 6 //How many tiles out do we eat - light_power = 0.7 - light_range = 15 - light_color = rgb(255, 0, 0) - gender = FEMALE - -/obj/singularity/narsie/large - name = "Nar'Sie" - icon = 'icons/obj/narsie.dmi' - // Pixel stuff centers Narsie. - pixel_x = -236 - pixel_y = -256 - current_size = 12 - grav_pull = 10 - consume_range = 12 //How many tiles out do we eat - -/obj/singularity/narsie/large/Initialize() - . = ..() - send_to_playing_players("NAR'SIE HAS RISEN") - sound_to_playing_players('sound/blank.ogg') - - var/area/A = get_area(src) - if(A) - var/mutable_appearance/alert_overlay = mutable_appearance('icons/effects/cult_effects.dmi', "ghostalertsie") - notify_ghosts("Nar'Sie has risen in \the [A.name]. Reach out to the Geometer to be given a new shell for your soul.", source = src, alert_overlay = alert_overlay, action=NOTIFY_ATTACK) - INVOKE_ASYNC(src, PROC_REF(narsie_spawn_animation)) - UnregisterSignal(src, COMSIG_ATOM_BSA_BEAM) //set up in /singularity/Initialize() - -/obj/singularity/narsie/large/cult // For the new cult ending, guaranteed to end the round within 3 minutes - var/list/souls_needed = list() - var/soul_goal = 0 - var/souls = 0 - var/resolved = FALSE - -/obj/singularity/narsie/large/cult/Initialize() - . = ..() - GLOB.cult_narsie = src - var/list/all_cults = list() - for(var/datum/antagonist/cult/C in GLOB.antagonists) - if(!C.owner) - continue - all_cults |= C.cult_team - for(var/datum/team/cult/T in all_cults) - deltimer(T.blood_target_reset_timer) - T.blood_target = src - var/datum/objective/eldergod/summon_objective = locate() in T.objectives - if(summon_objective) - summon_objective.summoned = TRUE - for(var/datum/mind/cult_mind in SSticker.mode.cult) - if(isliving(cult_mind.current)) - var/mob/living/L = cult_mind.current - INVOKE_ASYNC(L, TYPE_PROC_REF(/atom, narsie_act)) - for(var/mob/living/player in GLOB.player_list) - if(player.stat != DEAD && player.loc && is_station_level(player.loc.z) && !iscultist(player) && !isanimal(player)) - souls_needed[player] = TRUE - soul_goal = round(1 + LAZYLEN(souls_needed) * 0.75) - INVOKE_ASYNC(src, PROC_REF(begin_the_end)) - -/obj/singularity/narsie/large/cult/proc/begin_the_end() - sleep(50) - priority_announce("An acausal dimensional event has been detected in your sector. Event has been flagged EXTINCTION-CLASS. Directing all available assets toward simulating solutions. SOLUTION ETA: 60 SECONDS.","Central Command Higher Dimensional Affairs", 'sound/blank.ogg') - sleep(500) - priority_announce("Simulations on acausal dimensional event complete. Deploying solution package now. Deployment ETA: ONE MINUTE. ","Central Command Higher Dimensional Affairs") - sleep(50) - set_security_level("delta") - SSshuttle.registerHostileEnvironment(src) - SSshuttle.lockdown = TRUE - sleep(600) - if(resolved == FALSE) - resolved = TRUE - sound_to_playing_players('sound/blank.ogg') - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(cult_ending_helper)), 120) - -/obj/singularity/narsie/large/cult/Destroy() - GLOB.cult_narsie = null - return ..() - -/proc/ending_helper() - SSticker.force_ending = 1 - -/proc/cult_ending_helper(no_explosion = 0) - if(no_explosion) - Cinematic(CINEMATIC_CULT,world,CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(ending_helper))) - else - Cinematic(CINEMATIC_CULT_NUKE,world,CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(ending_helper))) - -//ATTACK GHOST IGNORING PARENT RETURN VALUE -/obj/singularity/narsie/large/attack_ghost(mob/dead/observer/user as mob) - makeNewConstruct(/mob/living/simple_animal/hostile/construct/harvester, user, cultoverride = TRUE, loc_override = src.loc) - -/obj/singularity/narsie/process() - eat() - if(!target || prob(5)) - pickcultist() - move() - if(prob(25)) - mezzer() - - -/obj/singularity/narsie/Bump(atom/A) - var/turf/T = get_turf(A) - if(T == loc) - T = get_step(A, A.dir) //please don't slam into a window like a bird, Nar'Sie - forceMove(T) - - -/obj/singularity/narsie/mezzer() - for(var/mob/living/carbon/M in viewers(consume_range, src)) - if(M.stat == CONSCIOUS) - if(!iscultist(M)) - to_chat(M, "I feel conscious thought crumble away in an instant as you gaze upon [src.name]...") - M.apply_effect(60, EFFECT_STUN) - - -/obj/singularity/narsie/consume(atom/A) - if(isturf(A)) - A.narsie_act() - - -/obj/singularity/narsie/ex_act() //No throwing bombs at her either. - return - - -/obj/singularity/narsie/proc/pickcultist() //Narsie rewards her cultists with being devoured first, then picks a ghost to follow. - var/list/cultists = list() - var/list/noncultists = list() - - for(var/mob/living/carbon/food in GLOB.alive_mob_list) //we don't care about constructs or cult-Ians or whatever. cult-monkeys are fair game i guess - var/turf/pos = get_turf(food) - if(!pos || (pos.z != z)) - continue - - if(iscultist(food)) - cultists += food - else - noncultists += food - - if(cultists.len) //cultists get higher priority - acquire(pick(cultists)) - return - - if(noncultists.len) - acquire(pick(noncultists)) - return - - //no living humans, follow a ghost instead. - for(var/mob/dead/observer/ghost in GLOB.player_list) - var/turf/pos = get_turf(ghost) - if(!pos || (pos.z != z)) - continue - cultists += ghost - if(cultists.len) - acquire(pick(cultists)) - return - - -/obj/singularity/narsie/proc/acquire(atom/food) - if(food == target) - return - to_chat(target, "NAR'SIE HAS LOST INTEREST IN YOU.") - target = food - if(ishuman(target)) - to_chat(target, "NAR'SIE HUNGERS FOR YOUR SOUL.") - else - to_chat(target, "NAR'SIE HAS CHOSEN YOU TO LEAD HER TO HER NEXT MEAL.") - -//Wizard narsie -/obj/singularity/narsie/wizard - grav_pull = 0 - -/obj/singularity/narsie/wizard/eat() -// if(defer_powernet_rebuild != 2) -// defer_powernet_rebuild = 1 - for(var/atom/X in urange(consume_range,src,1)) - if(isturf(X) || ismovableatom(X)) - consume(X) -// if(defer_powernet_rebuild != 2) -// defer_powernet_rebuild = 0 - return - - -/obj/singularity/narsie/proc/narsie_spawn_animation() - icon = 'icons/obj/narsie_spawn_anim.dmi' - setDir(SOUTH) - move_self = 0 - flick("narsie_spawn_anim",src) - sleep(11) - move_self = 1 - icon = initial(icon) - - - diff --git a/code/modules/power/singularity/particle_accelerator/particle.dm b/code/modules/power/singularity/particle_accelerator/particle.dm deleted file mode 100644 index c8cc4ce981..0000000000 --- a/code/modules/power/singularity/particle_accelerator/particle.dm +++ /dev/null @@ -1,68 +0,0 @@ -/obj/effect/accelerated_particle - name = "Accelerated Particles" - desc = "" - icon = 'icons/obj/machines/particle_accelerator.dmi' - icon_state = "particle" - anchored = TRUE - density = FALSE - var/movement_range = 10 - var/energy = 10 - var/speed = 1 - -/obj/effect/accelerated_particle/weak - movement_range = 8 - energy = 5 - -/obj/effect/accelerated_particle/strong - movement_range = 15 - energy = 15 - -/obj/effect/accelerated_particle/powerful - movement_range = 20 - energy = 50 - - -/obj/effect/accelerated_particle/New(loc) - ..() - - addtimer(CALLBACK(src, PROC_REF(move)), 1) - - -/obj/effect/accelerated_particle/Bump(atom/A) - if(A) - if(isliving(A)) - toxmob(A) - else if(istype(A, /obj/machinery/the_singularitygen)) - var/obj/machinery/the_singularitygen/S = A - S.energy += energy - else if(istype(A, /obj/singularity)) - var/obj/singularity/S = A - S.energy += energy - else if(istype(A, /obj/structure/blob)) - var/obj/structure/blob/B = A - B.take_damage(energy*0.6) - movement_range = 0 - -/obj/effect/accelerated_particle/Crossed(atom/A) - if(isliving(A)) - toxmob(A) - - -/obj/effect/accelerated_particle/ex_act(severity, target) - qdel(src) - -/obj/effect/accelerated_particle/singularity_pull() - return - -/obj/effect/accelerated_particle/proc/toxmob(mob/living/M) - M.rad_act(energy*6) - -/obj/effect/accelerated_particle/proc/move() - if(!step(src,dir)) - forceMove(get_step(src,dir)) - movement_range-- - if(movement_range == 0) - qdel(src) - else - sleep(speed) - move() diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm deleted file mode 100644 index 89cbcc2ca5..0000000000 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ /dev/null @@ -1,173 +0,0 @@ -/*Composed of 7 parts : - -3 Particle Emitters -1 Power Box -1 Fuel Chamber -1 End Cap -1 Control computer - -Setup map - -* |EC| -* CC|FC| -* |PB| -* PE|PE|PE - -*/ -#define PA_CONSTRUCTION_UNSECURED 0 -#define PA_CONSTRUCTION_UNWIRED 1 -#define PA_CONSTRUCTION_PANEL_OPEN 2 -#define PA_CONSTRUCTION_COMPLETE 3 - -/obj/structure/particle_accelerator - name = "Particle Accelerator" - desc = "" - icon = 'icons/obj/machines/particle_accelerator.dmi' - icon_state = "none" - anchored = FALSE - density = TRUE - max_integrity = 500 - armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 80) - - var/obj/machinery/particle_accelerator/control_box/master = null - var/construction_state = PA_CONSTRUCTION_UNSECURED - var/reference = null - var/powered = 0 - var/strength = null - -/obj/structure/particle_accelerator/examine(mob/user) - . = ..() - - switch(construction_state) - if(PA_CONSTRUCTION_UNSECURED) - . += "Looks like it's not attached to the flooring." - if(PA_CONSTRUCTION_UNWIRED) - . += "It is missing some cables." - if(PA_CONSTRUCTION_PANEL_OPEN) - . += "The panel is open." - -/obj/structure/particle_accelerator/Destroy() - construction_state = PA_CONSTRUCTION_UNSECURED - if(master) - master.connected_parts -= src - master.assembled = 0 - master = null - return ..() - -/obj/structure/particle_accelerator/ComponentInitialize() - . = ..() - AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ) - - -/obj/structure/particle_accelerator/attackby(obj/item/W, mob/user, params) - var/did_something = FALSE - - switch(construction_state) - if(PA_CONSTRUCTION_UNSECURED) - if(W.tool_behaviour == TOOL_WRENCH && !isinspace()) - W.play_tool_sound(src, 75) - anchored = TRUE - user.visible_message("[user.name] secures the [name] to the floor.", \ - "I secure the external bolts.") - construction_state = PA_CONSTRUCTION_UNWIRED - did_something = TRUE - if(PA_CONSTRUCTION_UNWIRED) - if(W.tool_behaviour == TOOL_WRENCH) - W.play_tool_sound(src, 75) - anchored = FALSE - user.visible_message("[user.name] detaches the [name] from the floor.", \ - "I remove the external bolts.") - construction_state = PA_CONSTRUCTION_UNSECURED - did_something = TRUE - else if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/CC = W - if(CC.use(1)) - user.visible_message("[user.name] adds wires to the [name].", \ - "I add some wires.") - construction_state = PA_CONSTRUCTION_PANEL_OPEN - did_something = TRUE - if(PA_CONSTRUCTION_PANEL_OPEN) - if(W.tool_behaviour == TOOL_WIRECUTTER)//TODO:Shock user if its on? - user.visible_message("[user.name] removes some wires from the [name].", \ - "I remove some wires.") - construction_state = PA_CONSTRUCTION_UNWIRED - did_something = TRUE - else if(W.tool_behaviour == TOOL_SCREWDRIVER) - user.visible_message("[user.name] closes the [name]'s access panel.", \ - "I close the access panel.") - construction_state = PA_CONSTRUCTION_COMPLETE - did_something = TRUE - if(PA_CONSTRUCTION_COMPLETE) - if(W.tool_behaviour == TOOL_SCREWDRIVER) - user.visible_message("[user.name] opens the [name]'s access panel.", \ - "I open the access panel.") - construction_state = PA_CONSTRUCTION_PANEL_OPEN - did_something = TRUE - - if(did_something) - user.changeNext_move(CLICK_CD_MELEE) - update_state() - update_icon() - return - - return ..() - - -/obj/structure/particle_accelerator/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/sheet/metal (loc, 5) - qdel(src) - -/obj/structure/particle_accelerator/Move() - . = ..() - if(master && master.active) - master.toggle_power() - investigate_log("was moved whilst active; it powered down.", INVESTIGATE_SINGULO) - - -/obj/structure/particle_accelerator/update_icon() - switch(construction_state) - if(PA_CONSTRUCTION_UNSECURED,PA_CONSTRUCTION_UNWIRED) - icon_state="[reference]" - if(PA_CONSTRUCTION_PANEL_OPEN) - icon_state="[reference]w" - if(PA_CONSTRUCTION_COMPLETE) - if(powered) - icon_state="[reference]p[strength]" - else - icon_state="[reference]c" - -/obj/structure/particle_accelerator/proc/update_state() - if(master) - master.update_state() - -/obj/structure/particle_accelerator/proc/connect_master(obj/O) - if(O.dir == dir) - master = O - return 1 - return 0 - -/////////// -// PARTS // -/////////// - - -/obj/structure/particle_accelerator/end_cap - name = "Alpha Particle Generation Array" - desc = "" - icon_state = "end_cap" - reference = "end_cap" - -/obj/structure/particle_accelerator/power_box - name = "Particle Focusing EM Lens" - desc = "" - icon = 'icons/obj/machines/particle_accelerator.dmi' - icon_state = "power_box" - reference = "power_box" - -/obj/structure/particle_accelerator/fuel_chamber - name = "EM Acceleration Chamber" - desc = "" - icon = 'icons/obj/machines/particle_accelerator.dmi' - icon_state = "fuel_chamber" - reference = "fuel_chamber" diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm deleted file mode 100644 index 514afa28d7..0000000000 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ /dev/null @@ -1,334 +0,0 @@ -/obj/machinery/particle_accelerator/control_box - name = "Particle Accelerator Control Console" - desc = "" - icon = 'icons/obj/machines/particle_accelerator.dmi' - icon_state = "control_box" - anchored = FALSE - density = TRUE - use_power = NO_POWER_USE - idle_power_usage = 500 - active_power_usage = 10000 - dir = NORTH - var/strength_upper_limit = 2 - var/interface_control = 1 - var/list/obj/structure/particle_accelerator/connected_parts - var/assembled = FALSE - var/construction_state = PA_CONSTRUCTION_UNSECURED - var/active = FALSE - var/strength = 0 - var/powered = FALSE - mouse_opacity = MOUSE_OPACITY_OPAQUE - -/obj/machinery/particle_accelerator/control_box/Initialize() - . = ..() - wires = new /datum/wires/particle_accelerator/control_box(src) - connected_parts = list() - -/obj/machinery/particle_accelerator/control_box/Destroy() - if(active) - toggle_power() - for(var/CP in connected_parts) - var/obj/structure/particle_accelerator/part = CP - part.master = null - connected_parts.Cut() - QDEL_NULL(wires) - return ..() - -/obj/machinery/particle_accelerator/control_box/multitool_act(mob/living/user, obj/item/I) - . = ..() - if(construction_state == PA_CONSTRUCTION_PANEL_OPEN) - wires.interact(user) - return TRUE - -/obj/machinery/particle_accelerator/control_box/proc/update_state() - if(construction_state < PA_CONSTRUCTION_COMPLETE) - use_power = NO_POWER_USE - assembled = FALSE - active = FALSE - for(var/CP in connected_parts) - var/obj/structure/particle_accelerator/part = CP - part.strength = null - part.powered = FALSE - part.update_icon() - connected_parts.Cut() - return - if(!part_scan()) - use_power = IDLE_POWER_USE - active = FALSE - connected_parts.Cut() - -/obj/machinery/particle_accelerator/control_box/update_icon() - if(active) - icon_state = "control_boxp1" - else - if(use_power) - if(assembled) - icon_state = "control_boxp" - else - icon_state = "ucontrol_boxp" - else - switch(construction_state) - if(PA_CONSTRUCTION_UNSECURED, PA_CONSTRUCTION_UNWIRED) - icon_state = "control_box" - if(PA_CONSTRUCTION_PANEL_OPEN) - icon_state = "control_boxw" - else - icon_state = "control_boxc" - -/obj/machinery/particle_accelerator/control_box/Topic(href, href_list) - if(..()) - return - - if(!interface_control) - to_chat(usr, "ERROR: Request timed out. Check wire contacts.") - return - - if(href_list["close"]) - usr << browse(null, "window=pacontrol") - usr.unset_machine() - return - if(href_list["togglep"]) - if(!wires.is_cut(WIRE_POWER)) - toggle_power() - - else if(href_list["scan"]) - part_scan() - - else if(href_list["strengthup"]) - if(!wires.is_cut(WIRE_STRENGTH)) - add_strength() - - else if(href_list["strengthdown"]) - if(!wires.is_cut(WIRE_STRENGTH)) - remove_strength() - - updateDialog() - update_icon() - -/obj/machinery/particle_accelerator/control_box/proc/strength_change() - for(var/CP in connected_parts) - var/obj/structure/particle_accelerator/part = CP - part.strength = strength - part.update_icon() - -/obj/machinery/particle_accelerator/control_box/proc/add_strength(s) - if(assembled && (strength < strength_upper_limit)) - strength++ - strength_change() - - message_admins("PA Control Computer increased to [strength] by [ADMIN_LOOKUPFLW(usr)] in [ADMIN_VERBOSEJMP(src)]") - log_game("PA Control Computer increased to [strength] by [key_name(usr)] in [AREACOORD(src)]") - investigate_log("increased to [strength] by [key_name(usr)] at [AREACOORD(src)]", INVESTIGATE_SINGULO) - - -/obj/machinery/particle_accelerator/control_box/proc/remove_strength(s) - if(assembled && (strength > 0)) - strength-- - strength_change() - - message_admins("PA Control Computer decreased to [strength] by [ADMIN_LOOKUPFLW(usr)] in [ADMIN_VERBOSEJMP(src)]") - log_game("PA Control Computer decreased to [strength] by [key_name(usr)] in [AREACOORD(src)]") - investigate_log("decreased to [strength] by [key_name(usr)] at [AREACOORD(src)]", INVESTIGATE_SINGULO) - - -/obj/machinery/particle_accelerator/control_box/power_change() - . = ..() - if(stat & NOPOWER) - active = FALSE - use_power = NO_POWER_USE - else if(!stat && construction_state == PA_CONSTRUCTION_COMPLETE) - use_power = IDLE_POWER_USE - -/obj/machinery/particle_accelerator/control_box/process() - if(active) - //a part is missing! - if(connected_parts.len < 6) - investigate_log("lost a connected part; It powered down.", INVESTIGATE_SINGULO) - toggle_power() - update_icon() - return - //emit some particles - for(var/obj/structure/particle_accelerator/particle_emitter/PE in connected_parts) - PE.emit_particle(strength) - -/obj/machinery/particle_accelerator/control_box/proc/part_scan() - var/ldir = turn(dir,-90) - var/rdir = turn(dir,90) - var/odir = turn(dir,180) - var/turf/T = loc - - assembled = FALSE - critical_machine = FALSE - - var/obj/structure/particle_accelerator/fuel_chamber/F = locate() in orange(1,src) - if(!F) - return FALSE - - setDir(F.dir) - connected_parts.Cut() - - T = get_step(T,rdir) - if(!check_part(T, /obj/structure/particle_accelerator/fuel_chamber)) - return FALSE - T = get_step(T,odir) - if(!check_part(T, /obj/structure/particle_accelerator/end_cap)) - return FALSE - T = get_step(T,dir) - T = get_step(T,dir) - if(!check_part(T, /obj/structure/particle_accelerator/power_box)) - return FALSE - T = get_step(T,dir) - if(!check_part(T, /obj/structure/particle_accelerator/particle_emitter/center)) - return FALSE - T = get_step(T,ldir) - if(!check_part(T, /obj/structure/particle_accelerator/particle_emitter/left)) - return FALSE - T = get_step(T,rdir) - T = get_step(T,rdir) - if(!check_part(T, /obj/structure/particle_accelerator/particle_emitter/right)) - return FALSE - - assembled = TRUE - critical_machine = TRUE //Only counts if the PA is actually assembled. - return TRUE - -/obj/machinery/particle_accelerator/control_box/proc/check_part(turf/T, type) - var/obj/structure/particle_accelerator/PA = locate(/obj/structure/particle_accelerator) in T - if(istype(PA, type) && (PA.construction_state == PA_CONSTRUCTION_COMPLETE)) - if(PA.connect_master(src)) - connected_parts.Add(PA) - return TRUE - return FALSE - - -/obj/machinery/particle_accelerator/control_box/proc/toggle_power() - active = !active - investigate_log("turned [active?"ON":"OFF"] by [usr ? key_name(usr) : "outside forces"] at [AREACOORD(src)]", INVESTIGATE_SINGULO) - message_admins("PA Control Computer turned [active ?"ON":"OFF"] by [usr ? ADMIN_LOOKUPFLW(usr) : "outside forces"] in [ADMIN_VERBOSEJMP(src)]") - log_game("PA Control Computer turned [active ?"ON":"OFF"] by [usr ? "[key_name(usr)]" : "outside forces"] at [AREACOORD(src)]") - if(active) - use_power = ACTIVE_POWER_USE - for(var/CP in connected_parts) - var/obj/structure/particle_accelerator/part = CP - part.strength = strength - part.powered = TRUE - part.update_icon() - else - use_power = IDLE_POWER_USE - for(var/CP in connected_parts) - var/obj/structure/particle_accelerator/part = CP - part.strength = null - part.powered = FALSE - part.update_icon() - return TRUE - - -/obj/machinery/particle_accelerator/control_box/ui_interact(mob/user) - . = ..() - - if(construction_state == PA_CONSTRUCTION_PANEL_OPEN) - wires.interact(user) - return - if(construction_state != PA_CONSTRUCTION_COMPLETE) - return - - if((get_dist(src, user) > 1) || (stat & (BROKEN|NOPOWER))) - if(!issilicon(user)) - user.unset_machine() - user << browse(null, "window=pacontrol") - return - - var/dat = "" - dat += "Close

    " - dat += "

    Status

    " - if(!assembled) - dat += "Unable to detect all parts!
    " - dat += "Run Scan

    " - else - dat += "All parts in place.

    " - dat += "Power:" - if(active) - dat += "On
    " - else - dat += "Off
    " - dat += "Toggle Power

    " - dat += "Particle Strength: [strength] " - dat += "--|++

    " - - var/datum/browser/popup = new(user, "pacontrol", name, 420, 300) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - popup.open() - -/obj/machinery/particle_accelerator/control_box/examine(mob/user) - . = ..() - switch(construction_state) - if(PA_CONSTRUCTION_UNSECURED) - . += "Looks like it's not attached to the flooring." - if(PA_CONSTRUCTION_UNWIRED) - . += "It is missing some cables." - if(PA_CONSTRUCTION_PANEL_OPEN) - . += "The panel is open." - - -/obj/machinery/particle_accelerator/control_box/attackby(obj/item/W, mob/user, params) - var/did_something = FALSE - - switch(construction_state) - if(PA_CONSTRUCTION_UNSECURED) - if(W.tool_behaviour == TOOL_WRENCH && !isinspace()) - W.play_tool_sound(src, 75) - anchored = TRUE - user.visible_message("[user.name] secures the [name] to the floor.", \ - "I secure the external bolts.") - construction_state = PA_CONSTRUCTION_UNWIRED - did_something = TRUE - if(PA_CONSTRUCTION_UNWIRED) - if(W.tool_behaviour == TOOL_WRENCH) - W.play_tool_sound(src, 75) - anchored = FALSE - user.visible_message("[user.name] detaches the [name] from the floor.", \ - "I remove the external bolts.") - construction_state = PA_CONSTRUCTION_UNSECURED - did_something = TRUE - else if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/CC = W - if(CC.use(1)) - user.visible_message("[user.name] adds wires to the [name].", \ - "I add some wires.") - construction_state = PA_CONSTRUCTION_PANEL_OPEN - did_something = TRUE - if(PA_CONSTRUCTION_PANEL_OPEN) - if(W.tool_behaviour == TOOL_WIRECUTTER)//TODO:Shock user if its on? - user.visible_message("[user.name] removes some wires from the [name].", \ - "I remove some wires.") - construction_state = PA_CONSTRUCTION_UNWIRED - did_something = TRUE - else if(W.tool_behaviour == TOOL_SCREWDRIVER) - user.visible_message("[user.name] closes the [name]'s access panel.", \ - "I close the access panel.") - construction_state = PA_CONSTRUCTION_COMPLETE - did_something = TRUE - if(PA_CONSTRUCTION_COMPLETE) - if(W.tool_behaviour == TOOL_SCREWDRIVER) - user.visible_message("[user.name] opens the [name]'s access panel.", \ - "I open the access panel.") - construction_state = PA_CONSTRUCTION_PANEL_OPEN - did_something = TRUE - - if(did_something) - user.changeNext_move(CLICK_CD_MELEE) - update_state() - update_icon() - return - - ..() - -/obj/machinery/particle_accelerator/control_box/blob_act(obj/structure/blob/B) - if(prob(50)) - qdel(src) - -#undef PA_CONSTRUCTION_UNSECURED -#undef PA_CONSTRUCTION_UNWIRED -#undef PA_CONSTRUCTION_PANEL_OPEN -#undef PA_CONSTRUCTION_COMPLETE diff --git a/code/modules/power/singularity/particle_accelerator/particle_emitter.dm b/code/modules/power/singularity/particle_accelerator/particle_emitter.dm deleted file mode 100644 index 183ce40681..0000000000 --- a/code/modules/power/singularity/particle_accelerator/particle_emitter.dm +++ /dev/null @@ -1,43 +0,0 @@ -/obj/structure/particle_accelerator/particle_emitter - name = "EM Containment Grid" - desc = "" - icon = 'icons/obj/machines/particle_accelerator.dmi' - icon_state = "none" - var/fire_delay = 50 - var/last_shot = 0 - -/obj/structure/particle_accelerator/particle_emitter/center - icon_state = "emitter_center" - reference = "emitter_center" - -/obj/structure/particle_accelerator/particle_emitter/left - icon_state = "emitter_left" - reference = "emitter_left" - -/obj/structure/particle_accelerator/particle_emitter/right - icon_state = "emitter_right" - reference = "emitter_right" - -/obj/structure/particle_accelerator/particle_emitter/proc/set_delay(delay) - if(delay >= 0) - fire_delay = delay - return 1 - return 0 - -/obj/structure/particle_accelerator/particle_emitter/proc/emit_particle(strength = 0) - if((last_shot + fire_delay) <= world.time) - last_shot = world.time - var/turf/T = get_turf(src) - var/obj/effect/accelerated_particle/P - switch(strength) - if(0) - P = new/obj/effect/accelerated_particle/weak(T) - if(1) - P = new/obj/effect/accelerated_particle(T) - if(2) - P = new/obj/effect/accelerated_particle/strong(T) - if(3) - P = new/obj/effect/accelerated_particle/powerful(T) - P.setDir(dir) - return 1 - return 0 diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm deleted file mode 100644 index c34b69f7a1..0000000000 --- a/code/modules/power/singularity/singularity.dm +++ /dev/null @@ -1,464 +0,0 @@ - - -/obj/singularity - name = "gravitational singularity" - desc = "" - icon = 'icons/obj/singularity.dmi' - icon_state = "singularity_s1" - anchored = TRUE - density = TRUE - move_resist = INFINITY - layer = MASSIVE_OBJ_LAYER - light_range = 6 - appearance_flags = 0 - var/current_size = 1 - var/allowed_size = 1 - var/contained = 1 //Are we going to move around? - var/energy = 100 //How strong are we? - var/dissipate = 1 //Do we lose energy over time? - var/dissipate_delay = 10 - var/dissipate_track = 0 - var/dissipate_strength = 1 //How much energy do we lose? - var/move_self = 1 //Do we move on our own? - var/grav_pull = 4 //How many tiles out do we pull? - var/consume_range = 0 //How many tiles out do we eat - var/event_chance = 10 //Prob for event each tick - var/target = null //its target. moves towards the target if it has one - var/last_failed_movement = 0//Will not move in the same dir if it couldnt before, will help with the getting stuck on fields thing - var/last_warning - var/consumedSupermatter = 0 //If the singularity has eaten a supermatter shard and can go to stage six - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF - obj_flags = CAN_BE_HIT | DANGEROUS_POSSESSION - -/obj/singularity/Initialize(mapload, starting_energy = 50) - //CARN: admin-alert for chuckle-fuckery. - admin_investigate_setup() - - src.energy = starting_energy - . = ..() - START_PROCESSING(SSobj, src) - GLOB.poi_list |= src - GLOB.singularities |= src - for(var/obj/machinery/power/singularity_beacon/singubeacon in GLOB.machines) - if(singubeacon.active) - target = singubeacon - break - AddElement(/datum/element/bsa_blocker) - RegisterSignal(src, COMSIG_ATOM_BSA_BEAM, PROC_REF(bluespace_reaction)) - -/obj/singularity/Destroy() - STOP_PROCESSING(SSobj, src) - GLOB.poi_list.Remove(src) - GLOB.singularities.Remove(src) - return ..() - -/obj/singularity/Move(atom/newloc, direct) - if(current_size >= STAGE_FIVE || check_turfs_in(direct)) - last_failed_movement = 0//Reset this because we moved - return ..() - else - last_failed_movement = direct - return 0 - -/obj/singularity/attack_hand(mob/user) - consume(user) - return TRUE - -/obj/singularity/attack_paw(mob/user) - consume(user) - -/obj/singularity/attack_alien(mob/user) - consume(user) - -/obj/singularity/attack_animal(mob/user) - consume(user) - -/obj/singularity/attackby(obj/item/W, mob/user, params) - consume(user) - return 1 - -/obj/singularity/Process_Spacemove() //The singularity stops drifting for no man! - return 0 - -/obj/singularity/blob_act(obj/structure/blob/B) - return - -/obj/singularity/attack_tk(mob/user) - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.visible_message("[C]'s head begins to collapse in on itself!", "My head feels like it's collapsing in on itself! This was really not a good idea!", "I hear something crack and explode in gore.") - var/turf/T = get_turf(C) - for(var/i in 1 to 3) - C.apply_damage(30, BRUTE, BODY_ZONE_HEAD) - new /obj/effect/gibspawner/generic(T, C) - sleep(1) - C.ghostize() - var/obj/item/bodypart/head/rip_u = C.get_bodypart(BODY_ZONE_HEAD) - rip_u.dismember(BURN) //nice try jedi - qdel(rip_u) - -/obj/singularity/ex_act(severity, target) - switch(severity) - if(1) - if(current_size <= STAGE_TWO) - investigate_log("has been destroyed by a heavy explosion.", INVESTIGATE_SINGULO) - qdel(src) - return - else - energy -= round(((energy+1)/2),1) - if(2) - energy -= round(((energy+1)/3),1) - if(3) - energy -= round(((energy+1)/4),1) - return - - -/obj/singularity/bullet_act(obj/projectile/P) - qdel(P) - return BULLET_ACT_HIT //Will there be an impact? Who knows. Will we see it? No. - - -/obj/singularity/Bump(atom/A) - consume(A) - return - - -/obj/singularity/Bumped(atom/movable/AM) - consume(AM) - - -/obj/singularity/process() - if(current_size >= STAGE_TWO) - move() - radiation_pulse(src, min(5000, (energy*4.5)+1000), RAD_DISTANCE_COEFFICIENT*0.5) - if(prob(event_chance))//Chance for it to run a special event TODO:Come up with one or two more that fit - event() - eat() - dissipate() - check_energy() - - return - - -/obj/singularity/attack_ai() //to prevent ais from gibbing themselves when they click on one. - return - - -/obj/singularity/proc/admin_investigate_setup() - var/turf/T = get_turf(src) - last_warning = world.time - var/count = locate(/obj/machinery/field/containment) in urange(30, src, 1) - if(!count) - message_admins("A singulo has been created without containment fields active at [ADMIN_VERBOSEJMP(T)].") - investigate_log("was created at [AREACOORD(T)]. [count?"":"No containment fields were active"]", INVESTIGATE_SINGULO) - -/obj/singularity/proc/dissipate() - if(!dissipate) - return - if(dissipate_track >= dissipate_delay) - src.energy -= dissipate_strength - dissipate_track = 0 - else - dissipate_track++ - - -/obj/singularity/proc/expand(force_size = 0) - var/temp_allowed_size = src.allowed_size - if(force_size) - temp_allowed_size = force_size - if(temp_allowed_size >= STAGE_SIX && !consumedSupermatter) - temp_allowed_size = STAGE_FIVE - switch(temp_allowed_size) - if(STAGE_ONE) - current_size = STAGE_ONE - icon = 'icons/obj/singularity.dmi' - icon_state = "singularity_s1" - pixel_x = 0 - pixel_y = 0 - grav_pull = 4 - consume_range = 0 - dissipate_delay = 10 - dissipate_track = 0 - dissipate_strength = 1 - if(STAGE_TWO) - if(check_cardinals_range(1, TRUE)) - current_size = STAGE_TWO - icon = 'icons/effects/96x96.dmi' - icon_state = "singularity_s3" - pixel_x = -32 - pixel_y = -32 - grav_pull = 6 - consume_range = 1 - dissipate_delay = 5 - dissipate_track = 0 - dissipate_strength = 5 - if(STAGE_THREE) - if(check_cardinals_range(2, TRUE)) - current_size = STAGE_THREE - icon = 'icons/effects/160x160.dmi' - icon_state = "singularity_s5" - pixel_x = -64 - pixel_y = -64 - grav_pull = 8 - consume_range = 2 - dissipate_delay = 4 - dissipate_track = 0 - dissipate_strength = 20 - if(STAGE_FOUR) - if(check_cardinals_range(3, TRUE)) - current_size = STAGE_FOUR - icon = 'icons/effects/224x224.dmi' - icon_state = "singularity_s7" - pixel_x = -96 - pixel_y = -96 - grav_pull = 10 - consume_range = 3 - dissipate_delay = 10 - dissipate_track = 0 - dissipate_strength = 10 - if(STAGE_FIVE)//this one also lacks a check for gens because it eats everything - current_size = STAGE_FIVE - icon = 'icons/effects/288x288.dmi' - icon_state = "singularity_s9" - pixel_x = -128 - pixel_y = -128 - grav_pull = 10 - consume_range = 4 - dissipate = 0 //It cant go smaller due to e loss - if(STAGE_SIX) //This only happens if a stage 5 singulo consumes a supermatter shard. - current_size = STAGE_SIX - icon = 'icons/effects/352x352.dmi' - icon_state = "singularity_s11" - pixel_x = -160 - pixel_y = -160 - grav_pull = 15 - consume_range = 5 - dissipate = 0 - if(current_size == allowed_size) - investigate_log("grew to size [current_size]", INVESTIGATE_SINGULO) - return 1 - else if(current_size < (--temp_allowed_size)) - expand(temp_allowed_size) - else - return 0 - - -/obj/singularity/proc/check_energy() - if(energy <= 0) - investigate_log("collapsed.", INVESTIGATE_SINGULO) - qdel(src) - return 0 - switch(energy)//Some of these numbers might need to be changed up later -Mport - if(1 to 199) - allowed_size = STAGE_ONE - if(200 to 499) - allowed_size = STAGE_TWO - if(500 to 999) - allowed_size = STAGE_THREE - if(1000 to 1999) - allowed_size = STAGE_FOUR - if(2000 to INFINITY) - if(energy >= 3000 && consumedSupermatter) - allowed_size = STAGE_SIX - else - allowed_size = STAGE_FIVE - if(current_size != allowed_size) - expand() - return 1 - - -/obj/singularity/proc/eat() - for(var/tile in spiral_range_turfs(grav_pull, src)) - var/turf/T = tile - if(!T || !isturf(loc)) - continue - if(get_dist(T, src) > consume_range) - T.singularity_pull(src, current_size) - else - consume(T) - for(var/thing in T) - if(isturf(loc) && thing != src) - var/atom/movable/X = thing - if(get_dist(X, src) > consume_range) - X.singularity_pull(src, current_size) - else - consume(X) - CHECK_TICK - return - - -/obj/singularity/proc/consume(atom/A) - var/gain = A.singularity_act(current_size, src) - src.energy += gain - if(istype(A, /obj/machinery/power/supermatter_crystal) && !consumedSupermatter) - desc = "" - name = "supermatter-charged [initial(name)]" - consumedSupermatter = 1 - set_light(10) - return - - -/obj/singularity/proc/move(force_move = 0) - if(!move_self) - return 0 - - var/movement_dir = pick(GLOB.alldirs - last_failed_movement) - - if(force_move) - movement_dir = force_move - - if(target && prob(60)) - movement_dir = get_dir(src,target) //moves to a singulo beacon, if there is one - - step(src, movement_dir) - -/obj/singularity/proc/check_cardinals_range(steps, retry_with_move = FALSE) - . = length(GLOB.cardinals) //Should be 4. - for(var/i in GLOB.cardinals) - . -= check_turfs_in(i, steps) //-1 for each working direction - if(. && retry_with_move) //If there's still a positive value it means it didn't pass. Retry with move if applicable - for(var/i in GLOB.cardinals) - if(step(src, i)) //Move in each direction. - if(check_cardinals_range(steps, FALSE)) //New location passes, return true. - return TRUE - . = !. - -/obj/singularity/proc/check_turfs_in(direction = 0, step = 0) - if(!direction) - return 0 - var/steps = 0 - if(!step) - switch(current_size) - if(STAGE_ONE) - steps = 1 - if(STAGE_TWO) - steps = 3//Yes this is right - if(STAGE_THREE) - steps = 3 - if(STAGE_FOUR) - steps = 4 - if(STAGE_FIVE) - steps = 5 - else - steps = step - var/list/turfs = list() - var/turf/T = src.loc - for(var/i = 1 to steps) - T = get_step(T,direction) - if(!isturf(T)) - return 0 - turfs.Add(T) - var/dir2 = 0 - var/dir3 = 0 - switch(direction) - if(NORTH, SOUTH) - dir2 = 4 - dir3 = 8 - if(EAST, WEST) - dir2 = 1 - dir3 = 2 - var/turf/T2 = T - for(var/j = 1 to steps-1) - T2 = get_step(T2,dir2) - if(!isturf(T2)) - return 0 - turfs.Add(T2) - for(var/k = 1 to steps-1) - T = get_step(T,dir3) - if(!isturf(T)) - return 0 - turfs.Add(T) - for(var/turf/T3 in turfs) - if(isnull(T3)) - continue - if(!can_move(T3)) - return 0 - return 1 - - -/obj/singularity/proc/can_move(turf/T) - if(!T) - return 0 - if((locate(/obj/machinery/field/containment) in T)||(locate(/obj/machinery/shieldwall) in T)) - return 0 - else if(locate(/obj/machinery/field/generator) in T) - var/obj/machinery/field/generator/G = locate(/obj/machinery/field/generator) in T - if(G && G.active) - return 0 - else if(locate(/obj/machinery/power/shieldwallgen) in T) - var/obj/machinery/power/shieldwallgen/S = locate(/obj/machinery/power/shieldwallgen) in T - if(S && S.active) - return 0 - return 1 - - -/obj/singularity/proc/event() - var/numb = rand(1,4) - switch(numb) - if(1)//EMP - emp_area() - if(2)//Stun mobs who lack optic scanners - mezzer() - if(3,4) //Sets all nearby mobs on fire - if(current_size < STAGE_SIX) - return 0 - combust_mobs() - else - return 0 - return 1 - - -/obj/singularity/proc/combust_mobs() - for(var/mob/living/carbon/C in urange(20, src, 1)) - C.visible_message("[C]'s skin bursts into flame!", \ - "I feel an inner fire as my skin bursts into flames!") - C.adjust_fire_stacks(5) - C.IgniteMob() - return - - -/obj/singularity/proc/mezzer() - for(var/mob/living/carbon/M in oviewers(8, src)) - if(isbrain(M)) //Ignore brains - continue - - if(M.stat == CONSCIOUS) - if (ishuman(M)) - var/mob/living/carbon/human/H = M - if(istype(H.glasses, /obj/item/clothing/glasses/meson)) - var/obj/item/clothing/glasses/meson/MS = H.glasses - if(MS.vision_flags == SEE_TURFS) - to_chat(H, "I look directly into the [src.name], good thing you had my protective eyewear on!") - return - - M.apply_effect(60, EFFECT_STUN) - M.visible_message("[M] stares blankly at the [src.name]!", \ - "I look directly into the [src.name] and feel weak.") - return - - -/obj/singularity/proc/emp_area() - empulse(src, 8, 10) - return - -/obj/singularity/singularity_act() - var/gain = (energy/2) - var/dist = max((current_size - 2),1) - explosion(src.loc,(dist),(dist*2),(dist*4)) - qdel(src) - return(gain) - -/obj/singularity/proc/bluespace_reaction() - investigate_log("has been shot by bluespace artillery and destroyed.", INVESTIGATE_SINGULO) - qdel(src) - -/obj/singularity/deadchat_controlled - move_self = FALSE - -/obj/singularity/deadchat_controlled/Initialize(mapload, starting_energy) - . = ..() - AddComponent(/datum/component/deadchat_control, DEMOCRACY_MODE, list( - "up" = CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_step), src, NORTH), - "down" = CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_step), src, SOUTH), - "left" = CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_step), src, WEST), - "right" = CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_step), src, EAST))) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm deleted file mode 100644 index 23418e12d3..0000000000 --- a/code/modules/power/smes.dm +++ /dev/null @@ -1,453 +0,0 @@ -// the SMES -// stores power - -#define SMESRATE 0.05 // rate of internal charge to external power - -//Cache defines -#define SMES_CLEVEL_1 1 -#define SMES_CLEVEL_2 2 -#define SMES_CLEVEL_3 3 -#define SMES_CLEVEL_4 4 -#define SMES_CLEVEL_5 5 -#define SMES_OUTPUTTING 6 -#define SMES_NOT_OUTPUTTING 7 -#define SMES_INPUTTING 8 -#define SMES_INPUT_ATTEMPT 9 - -/obj/machinery/power/smes - name = "power storage unit" - desc = "" - icon_state = "smes" - density = TRUE - use_power = NO_POWER_USE - circuit = /obj/item/circuitboard/machine/smes - ui_x = 340 - ui_y = 440 - - var/capacity = 5e6 // maximum charge - var/charge = 0 // actual charge - - var/input_attempt = TRUE // TRUE = attempting to charge, FALSE = not attempting to charge - var/inputting = TRUE // TRUE = actually inputting, FALSE = not inputting - var/input_level = 50000 // amount of power the SMES attempts to charge by - var/input_level_max = 200000 // cap on input_level - var/input_available = 0 // amount of charge available from input last tick - - var/output_attempt = TRUE // TRUE = attempting to output, FALSE = not attempting to output - var/outputting = TRUE // TRUE = actually outputting, FALSE = not outputting - var/output_level = 50000 // amount of power the SMES attempts to output - var/output_level_max = 200000 // cap on output_level - var/output_used = 0 // amount of power actually outputted. may be less than output_level if the powernet returns excess power - - var/obj/machinery/power/terminal/terminal = null - -/obj/machinery/power/smes/examine(user) - . = ..() - if(!terminal) - . += "This SMES has no power terminal!" - -/obj/machinery/power/smes/Initialize() - . = ..() - dir_loop: - for(var/d in GLOB.cardinals) - var/turf/T = get_step(src, d) - for(var/obj/machinery/power/terminal/term in T) - if(term && term.dir == turn(d, 180)) - terminal = term - break dir_loop - - if(!terminal) - obj_break() - return - terminal.master = src - update_icon() - -/obj/machinery/power/smes/RefreshParts() - var/IO = 0 - var/MC = 0 - var/C - for(var/obj/item/stock_parts/capacitor/CP in component_parts) - IO += CP.rating - input_level_max = initial(input_level_max) * IO - output_level_max = initial(output_level_max) * IO - for(var/obj/item/stock_parts/cell/PC in component_parts) - MC += PC.maxcharge - C += PC.charge - capacity = MC / (15000) * 1e6 - if(!initial(charge) && !charge) - charge = C / 15000 * 1e6 - -/obj/machinery/power/smes/should_have_node() - return TRUE - -/obj/machinery/power/smes/attackby(obj/item/I, mob/user, params) - //opening using screwdriver - if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), I)) - update_icon() - return - - //changing direction using wrench - if(default_change_direction_wrench(user, I)) - terminal = null - var/turf/T = get_step(src, dir) - for(var/obj/machinery/power/terminal/term in T) - if(term && term.dir == turn(dir, 180)) - terminal = term - terminal.master = src - to_chat(user, "Terminal found.") - break - if(!terminal) - to_chat(user, "No power terminal found.") - return - stat &= ~BROKEN - update_icon() - return - - //building and linking a terminal - if(istype(I, /obj/item/stack/cable_coil)) - var/dir = get_dir(user,src) - if(dir & (dir-1))//we don't want diagonal click - return - - if(terminal) //is there already a terminal ? - to_chat(user, "This SMES already has a power terminal!") - return - - if(!panel_open) //is the panel open ? - to_chat(user, "I must open the maintenance panel first!") - return - - var/turf/T = get_turf(user) - if (T.intact) //is the floor plating removed ? - to_chat(user, "I must first remove the floor plating!") - return - - - var/obj/item/stack/cable_coil/C = I - if(C.get_amount() < 10) - to_chat(user, "I need more wires!") - return - - to_chat(user, "I start building the power terminal...") - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - - if(do_after(user, 20, target = src)) - if(C.get_amount() < 10 || !C) - return - var/obj/structure/cable/N = T.get_cable_node() //get the connecting node cable, if there's one - if (prob(50) && electrocute_mob(usr, N, N, 1, TRUE)) //animate the electrocution if uncautious and unlucky - do_sparks(5, TRUE, src) - return - if(!terminal) - C.use(10) - user.visible_message("[user.name] has built a power terminal.",\ - "I build the power terminal.") - - //build the terminal and link it to the network - make_terminal(T) - terminal.connect_to_network() - connect_to_network() - return - - //crowbarring it ! - var/turf/T = get_turf(src) - if(default_deconstruction_crowbar(I)) - message_admins("[src] has been deconstructed by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]") - log_game("[src] has been deconstructed by [key_name(user)] at [AREACOORD(src)]") - investigate_log("SMES deconstructed by [key_name(user)] at [AREACOORD(src)]", INVESTIGATE_SINGULO) - return - else if(panel_open && I.tool_behaviour == TOOL_CROWBAR) - return - - return ..() - -/obj/machinery/power/smes/wirecutter_act(mob/living/user, obj/item/I) - //disassembling the terminal - . = ..() - if(terminal && panel_open) - terminal.dismantle(user, I) - return TRUE - - -/obj/machinery/power/smes/default_deconstruction_crowbar(obj/item/crowbar/C) - if(istype(C) && terminal) - to_chat(usr, "I must first remove the power terminal!") - return FALSE - - return ..() - -/obj/machinery/power/smes/on_deconstruction() - for(var/obj/item/stock_parts/cell/cell in component_parts) - cell.charge = (charge / capacity) * cell.maxcharge - -/obj/machinery/power/smes/Destroy() - if(SSticker.IsRoundInProgress()) - var/turf/T = get_turf(src) - message_admins("SMES deleted at [ADMIN_VERBOSEJMP(T)]") - log_game("SMES deleted at [AREACOORD(T)]") - investigate_log("deleted at [AREACOORD(T)]", INVESTIGATE_SINGULO) - if(terminal) - disconnect_terminal() - return ..() - -// create a terminal object pointing towards the SMES -// wires will attach to this -/obj/machinery/power/smes/proc/make_terminal(turf/T) - terminal = new/obj/machinery/power/terminal(T) - terminal.setDir(get_dir(T,src)) - terminal.master = src - stat &= ~BROKEN - -/obj/machinery/power/smes/disconnect_terminal() - if(terminal) - terminal.master = null - terminal = null - obj_break() - - -/obj/machinery/power/smes/update_icon() - cut_overlays() - if(stat & BROKEN) - return - - if(panel_open) - return - - if(outputting) - add_overlay("smes-op1") - else - add_overlay("smes-op0") - - if(inputting) - add_overlay("smes-oc1") - else - if(input_attempt) - add_overlay("smes-oc0") - - var/clevel = chargedisplay() - if(clevel>0) - add_overlay("smes-og[clevel]") - - -/obj/machinery/power/smes/proc/chargedisplay() - return CLAMP(round(5.5*charge/capacity),0,5) - -/obj/machinery/power/smes/process() - if(stat & BROKEN) - return - - //store machine state to see if we need to update the icon overlays - var/last_disp = chargedisplay() - var/last_chrg = inputting - var/last_onln = outputting - - //inputting - if(terminal && input_attempt) - input_available = terminal.surplus() - - if(inputting) - if(input_available > 0) // if there's power available, try to charge - - var/load = min(min((capacity-charge)/SMESRATE, input_level), input_available) // charge at set rate, limited to spare capacity - - charge += load * SMESRATE // increase the charge - - terminal.add_load(load) // add the load to the terminal side network - - else // if not enough capcity - inputting = FALSE // stop inputting - - else - if(input_attempt && input_available > 0) - inputting = TRUE - else - inputting = FALSE - - //outputting - if(output_attempt) - if(outputting) - output_used = min( charge/SMESRATE, output_level) //limit output to that stored - - if (add_avail(output_used)) // add output to powernet if it exists (smes side) - charge -= output_used*SMESRATE // reduce the storage (may be recovered in /restore() if excessive) - else - outputting = FALSE - - if(output_used < 0.0001) // either from no charge or set to 0 - outputting = FALSE - investigate_log("lost power and turned off", INVESTIGATE_SINGULO) - else if(output_attempt && charge > output_level && output_level > 0) - outputting = TRUE - else - output_used = 0 - else - outputting = FALSE - - // only update icon if state changed - if(last_disp != chargedisplay() || last_chrg != inputting || last_onln != outputting) - update_icon() - - - -// called after all power processes are finished -// restores charge level to smes if there was excess this ptick -/obj/machinery/power/smes/proc/restore() - if(stat & BROKEN) - return - - if(!outputting) - output_used = 0 - return - - var/excess = powernet.netexcess // this was how much wasn't used on the network last ptick, minus any removed by other SMESes - - excess = min(output_used, excess) // clamp it to how much was actually output by this SMES last ptick - - excess = min((capacity-charge)/SMESRATE, excess) // for safety, also limit recharge by space capacity of SMES (shouldn't happen) - - // now recharge this amount - - var/clev = chargedisplay() - - charge += excess * SMESRATE // restore unused power - powernet.netexcess -= excess // remove the excess from the powernet, so later SMESes don't try to use it - - output_used -= excess - - if(clev != chargedisplay() ) //if needed updates the icons overlay - update_icon() - return - - -/obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "smes", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/power/smes/ui_data() - var/list/data = list( - "capacityPercent" = round(100*charge/capacity, 0.1), - "capacity" = capacity, - "charge" = charge, - - "inputAttempt" = input_attempt, - "inputting" = inputting, - "inputLevel" = input_level, - "inputLevel_text" = DisplayPower(input_level), - "inputLevelMax" = input_level_max, - "inputAvailable" = DisplayPower(input_available), - - "outputAttempt" = output_attempt, - "outputting" = outputting, - "outputLevel" = output_level, - "outputLevel_text" = DisplayPower(output_level), - "outputLevelMax" = output_level_max, - "outputUsed" = DisplayPower(output_used) - ) - return data - -/obj/machinery/power/smes/ui_act(action, params) - if(..()) - return - switch(action) - if("tryinput") - input_attempt = !input_attempt - log_smes(usr) - update_icon() - . = TRUE - if("tryoutput") - output_attempt = !output_attempt - log_smes(usr) - update_icon() - . = TRUE - if("input") - var/target = params["target"] - var/adjust = text2num(params["adjust"]) - if(target == "input") - target = input("New input target (0-[input_level_max]):", name, input_level) as num|null - if(!isnull(target) && !..()) - . = TRUE - else if(target == "min") - target = 0 - . = TRUE - else if(target == "max") - target = input_level_max - . = TRUE - else if(adjust) - target = input_level + adjust - . = TRUE - else if(text2num(target) != null) - target = text2num(target) - . = TRUE - if(.) - input_level = CLAMP(target, 0, input_level_max) - log_smes(usr) - if("output") - var/target = params["target"] - var/adjust = text2num(params["adjust"]) - if(target == "input") - target = input("New output target (0-[output_level_max]):", name, output_level) as num|null - if(!isnull(target) && !..()) - . = TRUE - else if(target == "min") - target = 0 - . = TRUE - else if(target == "max") - target = output_level_max - . = TRUE - else if(adjust) - target = output_level + adjust - . = TRUE - else if(text2num(target) != null) - target = text2num(target) - . = TRUE - if(.) - output_level = CLAMP(target, 0, output_level_max) - log_smes(usr) - -/obj/machinery/power/smes/proc/log_smes(mob/user) - investigate_log("input/output; [input_level>output_level?"":""][input_level]/[output_level] | Charge: [charge] | Output-mode: [output_attempt?"on":"off"] | Input-mode: [input_attempt?"auto":"off"] by [user ? key_name(user) : "outside forces"]", INVESTIGATE_SINGULO) - - -/obj/machinery/power/smes/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - input_attempt = rand(0,1) - inputting = input_attempt - output_attempt = rand(0,1) - outputting = output_attempt - output_level = rand(0, output_level_max) - input_level = rand(0, input_level_max) - charge -= 1e6/severity - if (charge < 0) - charge = 0 - update_icon() - log_smes() - -/obj/machinery/power/smes/engineering - charge = 1.5e6 // Engineering starts with some charge for singulo - -/obj/machinery/power/smes/magical - name = "magical power storage unit" - desc = "" - -/obj/machinery/power/smes/magical/process() - capacity = INFINITY - charge = INFINITY - ..() - - -#undef SMESRATE - -#undef SMES_CLEVEL_1 -#undef SMES_CLEVEL_2 -#undef SMES_CLEVEL_3 -#undef SMES_CLEVEL_4 -#undef SMES_CLEVEL_5 -#undef SMES_OUTPUTTING -#undef SMES_NOT_OUTPUTTING -#undef SMES_INPUTTING -#undef SMES_INPUT_ATTEMPT diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm deleted file mode 100644 index 4336b03f87..0000000000 --- a/code/modules/power/solar.dm +++ /dev/null @@ -1,494 +0,0 @@ -#define SOLAR_MAX_DIST 40 -#define SOLARGENRATE 1500 - -/obj/machinery/power/solar - name = "solar panel" - desc = "" - icon = 'goon/icons/obj/power.dmi' - icon_state = "sp_base" - density = TRUE - use_power = NO_POWER_USE - idle_power_usage = 0 - active_power_usage = 0 - max_integrity = 150 - integrity_failure = 0.33 - - var/id = 0 - var/obscured = 0 - var/sunfrac = 0 - var/adir = SOUTH // actual dir - var/ndir = SOUTH // target dir - var/turn_angle = 0 - var/obj/machinery/power/solar_control/control = null - -/obj/machinery/power/solar/Initialize(mapload, obj/item/solar_assembly/S) - . = ..() - Make(S) - connect_to_network() - -/obj/machinery/power/solar/Destroy() - unset_control() //remove from control computer - return ..() - -/obj/machinery/power/solar/should_have_node() - return TRUE - -//set the control of the panel to a given computer if closer than SOLAR_MAX_DIST -/obj/machinery/power/solar/proc/set_control(obj/machinery/power/solar_control/SC) - if(!SC || (get_dist(src, SC) > SOLAR_MAX_DIST)) - return 0 - control = SC - SC.connected_panels |= src - return 1 - -//set the control of the panel to null and removes it from the control list of the previous control computer if needed -/obj/machinery/power/solar/proc/unset_control() - if(control) - control.connected_panels.Remove(src) - control = null - -/obj/machinery/power/solar/proc/Make(obj/item/solar_assembly/S) - if(!S) - S = new /obj/item/solar_assembly(src) - S.glass_type = /obj/item/stack/sheet/glass - S.anchored = TRUE - else - S.forceMove(src) - if(S.glass_type == /obj/item/stack/sheet/rglass) //if the panel is in reinforced glass - max_integrity *= 2 //this need to be placed here, because panels already on the map don't have an assembly linked to - obj_integrity = max_integrity - update_icon() - -/obj/machinery/power/solar/crowbar_act(mob/user, obj/item/I) - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - user.visible_message("[user] begins to take the glass off [src].", "I begin to take the glass off [src]...") - if(I.use_tool(src, user, 50)) - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - user.visible_message("[user] takes the glass off [src].", "I take the glass off [src].") - deconstruct(TRUE) - return TRUE - -/obj/machinery/power/solar/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - if(stat & BROKEN) - playsound(loc, 'sound/blank.ogg', 60, TRUE) - else - playsound(loc, 'sound/blank.ogg', 90, TRUE) - if(BURN) - playsound(loc, 'sound/blank.ogg', 100, TRUE) - - -/obj/machinery/power/solar/obj_break(damage_flag) - . = ..() - if(.) - playsound(loc, 'sound/blank.ogg', 100, TRUE) - unset_control() - -/obj/machinery/power/solar/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - if(disassembled) - var/obj/item/solar_assembly/S = locate() in src - if(S) - S.forceMove(loc) - S.give_glass(stat & BROKEN) - else - playsound(src, "shatter", 70, TRUE) - new /obj/item/shard(src.loc) - new /obj/item/shard(src.loc) - qdel(src) - - -/obj/machinery/power/solar/update_icon() - ..() - cut_overlays() - if(stat & BROKEN) - add_overlay(mutable_appearance(icon, "solar_panel-b", FLY_LAYER)) - else - add_overlay(mutable_appearance(icon, "solar_panel", FLY_LAYER)) - src.setDir(angle2dir(adir)) - -//calculates the fraction of the sunlight that the panel receives -/obj/machinery/power/solar/proc/update_solar_exposure() - if(obscured) - sunfrac = 0 - return - - //find the smaller angle between the direction the panel is facing and the direction of the sun (the sign is not important here) - var/p_angle = min(abs(adir - SSsun.angle), 360 - abs(adir - SSsun.angle)) - - if(p_angle > 90) // if facing more than 90deg from sun, zero output - sunfrac = 0 - return - - sunfrac = cos(p_angle) ** 2 - //isn't the power received from the incoming light proportionnal to cos(p_angle) (Lambert's cosine law) rather than cos(p_angle)^2 ? - -/obj/machinery/power/solar/process()//TODO: remove/add this from machines to save on processing as needed ~Carn PRIORITY - if(stat & BROKEN) - return - if(!control) //if there's no sun or the panel is not linked to a solar control computer, no need to proceed - return - - if(powernet) - if(powernet == control.powernet)//check if the panel is still connected to the computer - if(obscured) //get no light from the sun, so don't generate power - return - var/sgen = SOLARGENRATE * sunfrac - add_avail(sgen) - control.gen += sgen - else //if we're no longer on the same powernet, remove from control computer - unset_control() - - -/obj/machinery/power/solar/fake/New(turf/loc, obj/item/solar_assembly/S) - ..(loc, S, 0) - -/obj/machinery/power/solar/fake/process() - . = PROCESS_KILL - return - -//trace towards sun to see if we're in shadow -/obj/machinery/power/solar/proc/occlusion() - - var/ax = x // start at the solar panel - var/ay = y - var/turf/T = null - var/dx = SSsun.dx - var/dy = SSsun.dy - - for(var/i = 1 to 20) // 20 steps is enough - ax += dx // do step - ay += dy - - T = locate( round(ax,0.5),round(ay,0.5),z) - - if(T.x == 1 || T.x==world.maxx || T.y==1 || T.y==world.maxy) // not obscured if we reach the edge - break - - if(T.density) // if we hit a solid turf, panel is obscured - obscured = 1 - return - - obscured = 0 // if hit the edge or stepped 20 times, not obscured - update_solar_exposure() - - -// -// Solar Assembly - For construction of solar arrays. -// - -/obj/item/solar_assembly - name = "solar panel assembly" - desc = "" - icon = 'goon/icons/obj/power.dmi' - icon_state = "sp_base" - item_state = "electropack" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - w_class = WEIGHT_CLASS_BULKY // Pretty big! - anchored = FALSE - var/tracker = 0 - var/glass_type = null - -// Give back the glass type we were supplied with -/obj/item/solar_assembly/proc/give_glass(device_broken) - var/atom/Tsec = drop_location() - if(device_broken) - new /obj/item/shard(Tsec) - new /obj/item/shard(Tsec) - else if(glass_type) - new glass_type(Tsec, 2) - glass_type = null - - -/obj/item/solar_assembly/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_WRENCH && isturf(loc)) - if(isinspace()) - to_chat(user, "I can't secure [src] here.") - return - anchored = !anchored - if(anchored) - user.visible_message("[user] wrenches the solar assembly into place.", "I wrench the solar assembly into place.") - W.play_tool_sound(src, 75) - else - user.visible_message("[user] unwrenches the solar assembly from its place.", "I unwrench the solar assembly from its place.") - W.play_tool_sound(src, 75) - return 1 - - if(istype(W, /obj/item/stack/sheet/glass) || istype(W, /obj/item/stack/sheet/rglass)) - if(!anchored) - to_chat(user, "I need to secure the assembly before you can add glass.") - return - var/obj/item/stack/sheet/S = W - if(S.use(2)) - glass_type = W.type - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - user.visible_message("[user] places the glass on the solar assembly.", "I place the glass on the solar assembly.") - if(tracker) - new /obj/machinery/power/tracker(get_turf(src), src) - else - new /obj/machinery/power/solar(get_turf(src), src) - else - to_chat(user, "I need two sheets of glass to put them into a solar panel!") - return - return 1 - - if(!tracker) - if(istype(W, /obj/item/electronics/tracker)) - if(!user.temporarilyRemoveItemFromInventory(W)) - return - tracker = 1 - qdel(W) - user.visible_message("[user] inserts the electronics into the solar assembly.", "I insert the electronics into the solar assembly.") - return 1 - else - if(W.tool_behaviour == TOOL_CROWBAR) - new /obj/item/electronics/tracker(src.loc) - tracker = 0 - user.visible_message("[user] takes out the electronics from the solar assembly.", "I take out the electronics from the solar assembly.") - return 1 - return ..() - -// -// Solar Control Computer -// - -/obj/machinery/power/solar_control - name = "solar panel control" - desc = "" - icon = 'icons/obj/computer.dmi' - icon_state = "computer" - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 250 - max_integrity = 200 - integrity_failure = 0.5 - var/icon_screen = "solar" - var/icon_keyboard = "power_key" - var/id = 0 - var/currentdir = 0 - var/targetdir = 0 // target angle in manual tracking (since it updates every game minute) - var/gen = 0 - var/lastgen = 0 - var/track = 0 // 0= off 1=timed 2=auto (tracker) - var/trackrate = 600 // 300-900 seconds - var/nexttime = 0 // time for a panel to rotate of 1 degree in manual tracking - var/obj/machinery/power/tracker/connected_tracker = null - var/list/connected_panels = list() - -/obj/machinery/power/solar_control/Initialize() - . = ..() - if(powernet) - set_panels(currentdir) - connect_to_network() - -/obj/machinery/power/solar_control/Destroy() - for(var/obj/machinery/power/solar/M in connected_panels) - M.unset_control() - if(connected_tracker) - connected_tracker.unset_control() - return ..() - -/obj/machinery/power/solar_control/disconnect_from_network() - ..() - SSsun.solars.Remove(src) - -/obj/machinery/power/solar_control/connect_to_network() - var/to_return = ..() - if(powernet) //if connected and not already in solar_list... - SSsun.solars |= src //... add it - return to_return - -//search for unconnected panels and trackers in the computer powernet and connect them -/obj/machinery/power/solar_control/proc/search_for_connected() - if(powernet) - for(var/obj/machinery/power/M in powernet.nodes) - if(istype(M, /obj/machinery/power/solar)) - var/obj/machinery/power/solar/S = M - if(!S.control) //i.e unconnected - S.set_control(src) - else if(istype(M, /obj/machinery/power/tracker)) - if(!connected_tracker) //if there's already a tracker connected to the computer don't add another - var/obj/machinery/power/tracker/T = M - if(!T.control) //i.e unconnected - T.set_control(src) - -//called by the sun controller, update the facing angle (either manually or via tracking) and rotates the panels accordingly -/obj/machinery/power/solar_control/proc/update() - if(stat & (NOPOWER | BROKEN)) - return - - switch(track) - if(1) - if(trackrate) //we're manual tracking. If we set a rotation speed... - currentdir = targetdir //...the current direction is the targetted one (and rotates panels to it) - if(2) // auto-tracking - if(connected_tracker) - connected_tracker.set_angle(SSsun.angle) - - set_panels(currentdir) - updateDialog() - -/obj/machinery/power/solar_control/update_icon() - cut_overlays() - if(stat & NOPOWER) - add_overlay("[icon_keyboard]_off") - return - add_overlay(icon_keyboard) - if(stat & BROKEN) - add_overlay("[icon_state]_broken") - else - add_overlay(icon_screen) - -/obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "solar_control", name, 380, 230, master_ui, state) - ui.open() - -/obj/machinery/power/solar_control/ui_data() - var/data = list() - - data["generated"] = round(lastgen) - data["angle"] = currentdir - data["direction"] = angle2text(currentdir) - - data["tracking_state"] = track - data["tracking_rate"] = trackrate - data["rotating_way"] = (trackrate<0 ? "CCW" : "CW") - - data["connected_panels"] = connected_panels.len - data["connected_tracker"] = (connected_tracker ? 1 : 0) - return data - -/obj/machinery/power/solar_control/ui_act(action, params) - if(..()) - return - if(action == "angle") - var/adjust = text2num(params["adjust"]) - var/value = text2num(params["value"]) - if(adjust) - value = currentdir + adjust - if(value != null) - currentdir = CLAMP((360 + value) % 360, 0, 359) - targetdir = currentdir - set_panels(currentdir) - return TRUE - return FALSE - if(action == "rate") - var/adjust = text2num(params["adjust"]) - var/value = text2num(params["value"]) - if(adjust) - value = trackrate + adjust - if(value != null) - trackrate = CLAMP(value, -7200, 7200) - if(trackrate) - nexttime = world.time + 36000 / abs(trackrate) - return TRUE - return FALSE - if(action == "tracking") - var/mode = text2num(params["mode"]) - track = mode - if(mode == 2 && connected_tracker) - connected_tracker.set_angle(SSsun.angle) - set_panels(currentdir) - else if(mode == 1) - targetdir = currentdir - if(trackrate) - nexttime = world.time + 36000 / abs(trackrate) - set_panels(targetdir) - return TRUE - if(action == "refresh") - search_for_connected() - if(connected_tracker && track == 2) - connected_tracker.set_angle(SSsun.angle) - set_panels(currentdir) - return TRUE - return FALSE - -/obj/machinery/power/solar_control/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - if(I.use_tool(src, user, 20, volume=50)) - if (src.stat & BROKEN) - to_chat(user, "The broken glass falls out.") - var/obj/structure/frame/computer/A = new /obj/structure/frame/computer( src.loc ) - new /obj/item/shard( src.loc ) - var/obj/item/circuitboard/computer/solar_control/M = new /obj/item/circuitboard/computer/solar_control( A ) - for (var/obj/C in src) - C.forceMove(drop_location()) - A.circuit = M - A.state = 3 - A.icon_state = "3" - A.anchored = TRUE - qdel(src) - else - to_chat(user, "I disconnect the monitor.") - var/obj/structure/frame/computer/A = new /obj/structure/frame/computer( src.loc ) - var/obj/item/circuitboard/computer/solar_control/M = new /obj/item/circuitboard/computer/solar_control( A ) - for (var/obj/C in src) - C.forceMove(drop_location()) - A.circuit = M - A.state = 4 - A.icon_state = "4" - A.anchored = TRUE - qdel(src) - else if(user.used_intent.type != INTENT_HARM && !(I.item_flags & NOBLUDGEON)) - attack_hand(user) - else - return ..() - -/obj/machinery/power/solar_control/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - if(stat & BROKEN) - playsound(src.loc, 'sound/blank.ogg', 70, TRUE) - else - playsound(src.loc, 'sound/blank.ogg', 75, TRUE) - if(BURN) - playsound(src.loc, 'sound/blank.ogg', 100, TRUE) - -/obj/machinery/power/solar_control/obj_break(damage_flag) - . = ..() - if(.) - playsound(loc, 'sound/blank.ogg', 100, TRUE) - -/obj/machinery/power/solar_control/process() - lastgen = gen - gen = 0 - - if(stat & (NOPOWER | BROKEN)) - return - - if(connected_tracker) //NOTE : handled here so that we don't add trackers to the processing list - if(connected_tracker.powernet != powernet) - connected_tracker.unset_control() - - if(track==1 && trackrate) //manual tracking and set a rotation speed - if(nexttime <= world.time) //every time we need to increase/decrease the angle by 1°... - targetdir = (targetdir + trackrate/abs(trackrate) + 360) % 360 //... do it - nexttime += 36000/abs(trackrate) //reset the counter for the next 1° - -//rotates the panel to the passed angle -/obj/machinery/power/solar_control/proc/set_panels(currentdir) - - for(var/obj/machinery/power/solar/S in connected_panels) - S.adir = currentdir //instantly rotates the panel - S.occlusion()//and - S.update_icon() //update it - - update_icon() - - - - - - -// -// MISC -// - -/obj/item/paper/guides/jobs/engi/solars - name = "paper- 'Going green! Setup your own solar array instructions.'" - info = "

    Welcome

    At greencorps we love the environment, and space. With this package you are able to help mother nature and produce energy without any usage of fossil fuel or plasma! Singularity energy is dangerous while solar energy is safe, which is why it's better. Now here is how you setup your own solar array.

    I can make a solar panel by wrenching the solar assembly onto a cable node. Adding a glass panel, reinforced or regular glass will do, will finish the construction of your solar panel. It is that easy!

    Now after setting up 19 more of these solar panels you will want to create a solar tracker to keep track of our mother nature's gift, the sun. These are the same steps as before except you insert the tracker equipment circuit into the assembly before performing the final step of adding the glass. You now have a tracker! Now the last step is to add a computer to calculate the sun's movements and to send commands to the solar panels to change direction with the sun. Setting up the solar computer is the same as setting up any computer, so you should have no trouble in doing that. You do need to put a wire node under the computer, and the wire needs to be connected to the tracker.

    Congratulations, you should have a working solar array. If you are having trouble, here are some tips. Make sure all solar equipment are on a cable node, even the computer. You can always deconstruct your creations if you make a mistake.

    That's all to it, be safe, be green!

    " diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm deleted file mode 100644 index 932746a217..0000000000 --- a/code/modules/power/supermatter/supermatter.dm +++ /dev/null @@ -1,871 +0,0 @@ -//Ported from /vg/station13, which was in turn forked from baystation12; -//Please do not bother them with bugs from this port, however, as it has been modified quite a bit. -//Modifications include removing the world-ending full supermatter variation, and leaving only the shard. - -#define PLASMA_HEAT_PENALTY 15 // Higher == Bigger heat and waste penalty from having the crystal surrounded by this gas. Negative numbers reduce penalty. -#define OXYGEN_HEAT_PENALTY 1 -#define PLUOXIUM_HEAT_PENALTY -1 -#define TRITIUM_HEAT_PENALTY 10 -#define CO2_HEAT_PENALTY 0.1 -#define NITROGEN_HEAT_PENALTY -1.5 -#define BZ_HEAT_PENALTY 5 - -#define OXYGEN_TRANSMIT_MODIFIER 1.5 //Higher == Bigger bonus to power generation. -#define PLASMA_TRANSMIT_MODIFIER 4 -#define BZ_TRANSMIT_MODIFIER -2 - -#define TRITIUM_RADIOACTIVITY_MODIFIER 3 //Higher == Crystal spews out more radiation -#define BZ_RADIOACTIVITY_MODIFIER 5 -#define PLUOXIUM_RADIOACTIVITY_MODIFIER -2 - -#define N2O_HEAT_RESISTANCE 6 //Higher == Gas makes the crystal more resistant against heat damage. -#define PLUOXIUM_HEAT_RESISTANCE 3 - -#define POWERLOSS_INHIBITION_GAS_THRESHOLD 0.20 //Higher == Higher percentage of inhibitor gas needed before the charge inertia chain reaction effect starts. -#define POWERLOSS_INHIBITION_MOLE_THRESHOLD 20 //Higher == More moles of the gas are needed before the charge inertia chain reaction effect starts. //Scales powerloss inhibition down until this amount of moles is reached -#define POWERLOSS_INHIBITION_MOLE_BOOST_THRESHOLD 500 //bonus powerloss inhibition boost if this amount of moles is reached - -#define MOLE_PENALTY_THRESHOLD 1800 //Higher == Shard can absorb more moles before triggering the high mole penalties. -#define MOLE_HEAT_PENALTY 350 //Heat damage scales around this. Too hot setups with this amount of moles do regular damage, anything above and below is scaled -#define POWER_PENALTY_THRESHOLD 5000 //Higher == Engine can generate more power before triggering the high power penalties. -#define SEVERE_POWER_PENALTY_THRESHOLD 7000 //Same as above, but causes more dangerous effects -#define CRITICAL_POWER_PENALTY_THRESHOLD 9000 //Even more dangerous effects, threshold for tesla delamination -#define HEAT_PENALTY_THRESHOLD 40 //Higher == Crystal safe operational temperature is higher. -#define DAMAGE_HARDCAP 0.002 -#define DAMAGE_INCREASE_MULTIPLIER 0.25 - - -#define THERMAL_RELEASE_MODIFIER 5 //Higher == less heat released during reaction, not to be confused with the above values -#define PLASMA_RELEASE_MODIFIER 750 //Higher == less plasma released by reaction -#define OXYGEN_RELEASE_MODIFIER 325 //Higher == less oxygen released at high temperature/power - -#define REACTION_POWER_MODIFIER 0.55 //Higher == more overall power - -#define MATTER_POWER_CONVERSION 10 //Crystal converts 1/this value of stored matter into energy. - -//These would be what you would get at point blank, decreases with distance -#define DETONATION_RADS 200 -#define DETONATION_HALLUCINATION 600 - - -#define WARNING_DELAY 60 - -#define HALLUCINATION_RANGE(P) (min(7, round(P ** 0.25))) - - -#define GRAVITATIONAL_ANOMALY "gravitational_anomaly" -#define FLUX_ANOMALY "flux_anomaly" -#define PYRO_ANOMALY "pyro_anomaly" - -//If integrity percent remaining is less than these values, the monitor sets off the relevant alarm. -#define SUPERMATTER_DELAM_PERCENT 5 -#define SUPERMATTER_EMERGENCY_PERCENT 25 -#define SUPERMATTER_DANGER_PERCENT 50 -#define SUPERMATTER_WARNING_PERCENT 100 -#define CRITICAL_TEMPERATURE 10000 - -#define SUPERMATTER_COUNTDOWN_TIME 30 SECONDS - -///to prevent accent sounds from layering -#define SUPERMATTER_ACCENT_SOUND_MIN_COOLDOWN 2 SECONDS - -GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) - -/obj/machinery/power/supermatter_crystal - name = "supermatter crystal" - desc = "" - icon = 'icons/obj/supermatter.dmi' - icon_state = "darkmatter" - density = TRUE - anchored = TRUE - flags_1 = PREVENT_CONTENTS_EXPLOSION_1 - var/uid = 1 - var/static/gl_uid = 1 - light_range = 4 - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF - - critical_machine = TRUE - - var/gasefficency = 0.15 - - var/base_icon_state = "darkmatter" - - var/final_countdown = FALSE - - var/damage = 0 - var/damage_archived = 0 - var/safe_alert = "Crystalline hyperstructure returning to safe operating parameters." - var/warning_point = 50 - var/warning_alert = "Danger! Crystal hyperstructure integrity faltering!" - var/damage_penalty_point = 550 - var/emergency_point = 700 - var/emergency_alert = "CRYSTAL DELAMINATION IMMINENT." - var/explosion_point = 900 - - var/emergency_issued = FALSE - - var/explosion_power = 35 - var/temp_factor = 30 - - var/lastwarning = 0 // Time in 1/10th of seconds since the last sent warning - var/power = 0 - - var/n2comp = 0 // raw composition of each gas in the chamber, ranges from 0 to 1 - - var/plasmacomp = 0 - var/o2comp = 0 - var/co2comp = 0 - var/pluoxiumcomp = 0 - var/tritiumcomp = 0 - var/bzcomp = 0 - var/n2ocomp = 0 - - var/pluoxiumbonus = 0 - - var/combined_gas = 0 - var/gasmix_power_ratio = 0 - var/dynamic_heat_modifier = 1 - var/dynamic_heat_resistance = 1 - var/powerloss_inhibitor = 1 - var/powerloss_dynamic_scaling= 0 - var/power_transmission_bonus = 0 - var/mole_heat_penalty = 0 - - var/matter_power = 0 - - //Temporary values so that we can optimize this - //How much the bullets damage should be multiplied by when it is added to the internal variables - var/config_bullet_energy = 2 - //How much of the power is left after processing is finished? -// var/config_power_reduction_per_tick = 0.5 - //How much hallucination should it produce per unit of power? - var/config_hallucination_power = 0.1 - - var/obj/item/radio/radio - var/radio_key = /obj/item/encryptionkey/headset_eng - var/engineering_channel = "Engineering" - var/common_channel = null - - //for logging - var/has_been_powered = FALSE - var/has_reached_emergency = FALSE - - // For making hugbox supermatter - var/takes_damage = TRUE - var/produces_gas = TRUE - var/obj/effect/countdown/supermatter/countdown - - var/is_main_engine = FALSE - - var/datum/looping_sound/supermatter/soundloop - - var/moveable = FALSE - - /// cooldown tracker for accent sounds, - var/last_accent_sound = 0 - -/obj/machinery/power/supermatter_crystal/Initialize() - . = ..() - uid = gl_uid++ - SSair.atmos_machinery += src - countdown = new(src) - countdown.start() - GLOB.poi_list |= src - radio = new(src) - radio.keyslot = new radio_key - radio.listening = 0 - radio.recalculateChannels() - investigate_log("has been created.", INVESTIGATE_SUPERMATTER) - if(is_main_engine) - GLOB.main_supermatter_engine = src - - AddElement(/datum/element/bsa_blocker) - RegisterSignal(src, COMSIG_ATOM_BSA_BEAM, PROC_REF(call_explode)) - - soundloop = new(list(src), TRUE) - -/obj/machinery/power/supermatter_crystal/Destroy() - investigate_log("has been destroyed.", INVESTIGATE_SUPERMATTER) - SSair.atmos_machinery -= src - QDEL_NULL(radio) - GLOB.poi_list -= src - QDEL_NULL(countdown) - if(is_main_engine && GLOB.main_supermatter_engine == src) - GLOB.main_supermatter_engine = null - QDEL_NULL(soundloop) - return ..() - -/obj/machinery/power/supermatter_crystal/examine(mob/user) - . = ..() - if (istype(user, /mob/living/carbon)) - var/mob/living/carbon/C = user - if (!istype(C.glasses, /obj/item/clothing/glasses/meson) && (get_dist(user, src) < HALLUCINATION_RANGE(power))) - . += "I get headaches just from looking at it." - -/obj/machinery/power/supermatter_crystal/proc/get_status() - var/turf/T = get_turf(src) - if(!T) - return SUPERMATTER_ERROR - var/datum/gas_mixture/air = T.return_air() - if(!air) - return SUPERMATTER_ERROR - - var/integrity = get_integrity() - if(integrity < SUPERMATTER_DELAM_PERCENT) - return SUPERMATTER_DELAMINATING - - if(integrity < SUPERMATTER_EMERGENCY_PERCENT) - return SUPERMATTER_EMERGENCY - - if(integrity < SUPERMATTER_DANGER_PERCENT) - return SUPERMATTER_DANGER - - if((integrity < SUPERMATTER_WARNING_PERCENT) || (air.temperature > CRITICAL_TEMPERATURE)) - return SUPERMATTER_WARNING - - if(air.temperature > (CRITICAL_TEMPERATURE * 0.8)) - return SUPERMATTER_NOTIFY - - if(power > 5) - return SUPERMATTER_NORMAL - return SUPERMATTER_INACTIVE - -/obj/machinery/power/supermatter_crystal/proc/alarm() - switch(get_status()) - if(SUPERMATTER_DELAMINATING) - playsound(src, 'sound/blank.ogg', 100) - if(SUPERMATTER_EMERGENCY) - playsound(src, 'sound/blank.ogg', 100) - if(SUPERMATTER_DANGER) - playsound(src, 'sound/blank.ogg', 100) - if(SUPERMATTER_WARNING) - playsound(src, 'sound/blank.ogg', 75) - -/obj/machinery/power/supermatter_crystal/proc/get_integrity() - var/integrity = damage / explosion_point - integrity = round(100 - integrity * 100, 0.01) - integrity = integrity < 0 ? 0 : integrity - return integrity - -/obj/machinery/power/supermatter_crystal/proc/countdown() - set waitfor = FALSE - - if(final_countdown) // We're already doing it go away - return - final_countdown = TRUE - - var/image/causality_field = image(icon, null, "causality_field") - add_overlay(causality_field, TRUE) - - var/speaking = "[emergency_alert] The supermatter has reached critical integrity failure. Emergency causality destabilization field has been activated." - radio.talk_into(src, speaking, common_channel, language = get_default_language()) - for(var/i in SUPERMATTER_COUNTDOWN_TIME to 0 step -10) - if(damage < explosion_point) // Cutting it a bit close there engineers - radio.talk_into(src, "[safe_alert] Failsafe has been disengaged.", common_channel) - cut_overlay(causality_field, TRUE) - final_countdown = FALSE - return - else if((i % 50) != 0 && i > 50) // A message once every 5 seconds until the final 5 seconds which count down individualy - sleep(10) - continue - else if(i > 50) - speaking = "[DisplayTimeText(i, TRUE)] remain before causality stabilization." - else - speaking = "[i*0.1]..." - radio.talk_into(src, speaking, common_channel) - sleep(10) - - explode() - -/obj/machinery/power/supermatter_crystal/proc/explode() - for(var/mob in GLOB.alive_mob_list) - var/mob/living/L = mob - if(istype(L) && L.z == z) - if(ishuman(mob)) - //Hilariously enough, running into a closet should make you get hit the hardest. - var/mob/living/carbon/human/H = mob - H.hallucination += max(50, min(300, DETONATION_HALLUCINATION * sqrt(1 / (get_dist(mob, src) + 1)) ) ) - var/rads = DETONATION_RADS * sqrt( 1 / (get_dist(L, src) + 1) ) - L.rad_act(rads) - - var/turf/T = get_turf(src) - for(var/mob/M in GLOB.player_list) - if(M.z == z) - SEND_SOUND(M, 'sound/blank.ogg') - to_chat(M, "I feel reality distort for a moment...") - SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "delam", /datum/mood_event/delam) - if(combined_gas > MOLE_PENALTY_THRESHOLD) - investigate_log("has collapsed into a singularity.", INVESTIGATE_SUPERMATTER) - if(T) - var/obj/singularity/S = new(T) - S.energy = 800 - S.consume(src) - else - investigate_log("has exploded.", INVESTIGATE_SUPERMATTER) - explosion(get_turf(T), explosion_power * max(gasmix_power_ratio, 0.205) * 0.5 , explosion_power * max(gasmix_power_ratio, 0.205) + 2, explosion_power * max(gasmix_power_ratio, 0.205) + 4 , explosion_power * max(gasmix_power_ratio, 0.205) + 6, 1, 1) - if(power > POWER_PENALTY_THRESHOLD) - investigate_log("has spawned additional energy balls.", INVESTIGATE_SUPERMATTER) - var/obj/singularity/energy_ball/E = new(T) - E.energy = power - qdel(src) - -//this is here to eat arguments -/obj/machinery/power/supermatter_crystal/proc/call_explode() - explode() - -/obj/machinery/power/supermatter_crystal/process_atmos() - var/turf/T = loc - - if(isnull(T)) // We have a null turf...something is wrong, stop processing this entity. - return PROCESS_KILL - - if(!istype(T)) //We are in a crate or somewhere that isn't turf, if we return to turf resume processing but for now. - return //Yeah just stop. - - if(isclosedturf(T)) - var/turf/did_it_melt = T.Melt() - if(!isclosedturf(did_it_melt)) //In case some joker finds way to place these on indestructible walls - visible_message("[src] melts through [T]!") - return - - if(power) - soundloop.volume = CLAMP((50 + (power / 50)), 50, 100) - if(damage >= 300) - soundloop.mid_sounds = list('sound/blank.ogg' = 1) - else - soundloop.mid_sounds = list('sound/blank.ogg' = 1) - - if(last_accent_sound < world.time && prob(20)) - var/aggression = min(((damage / 800) * (power / 2500)), 1.0) * 100 - if(damage >= 300) - playsound(src, "smdelam", max(50, aggression), FALSE, 10) - else - playsound(src, "smcalm", max(50, aggression), FALSE, 10) - var/next_sound = round((100 - aggression) * 5) - last_accent_sound = world.time + max(SUPERMATTER_ACCENT_SOUND_MIN_COOLDOWN, next_sound) - - //Ok, get the air from the turf - var/datum/gas_mixture/env = T.return_air() - - var/datum/gas_mixture/removed - - if(produces_gas) - //Remove gas from surrounding area - removed = env.remove(gasefficency * env.total_moles()) - else - // Pass all the gas related code an empty gas container - removed = new() - - damage_archived = damage - if(!removed || !removed.total_moles() || isspaceturf(T)) //we're in space or there is no gas to process - if(takes_damage) - damage += max((power / 1000) * DAMAGE_INCREASE_MULTIPLIER, 0.1) // always does at least some damage - else - if(takes_damage) - //causing damage - damage = max(damage + (max(CLAMP(removed.total_moles() / 200, 0.5, 1) * removed.temperature - ((T0C + HEAT_PENALTY_THRESHOLD)*dynamic_heat_resistance), 0) * mole_heat_penalty / 150 ) * DAMAGE_INCREASE_MULTIPLIER, 0) - damage = max(damage + (max(power - POWER_PENALTY_THRESHOLD, 0)/500) * DAMAGE_INCREASE_MULTIPLIER, 0) - damage = max(damage + (max(combined_gas - MOLE_PENALTY_THRESHOLD, 0)/80) * DAMAGE_INCREASE_MULTIPLIER, 0) - - //healing damage - if(combined_gas < MOLE_PENALTY_THRESHOLD) - damage = max(damage + (min(removed.temperature - (T0C + HEAT_PENALTY_THRESHOLD), 0) / 150 ), 0) - - //capping damage - damage = min(damage_archived + (DAMAGE_HARDCAP * explosion_point),damage) - - removed.assert_gases(/datum/gas/oxygen, /datum/gas/plasma, /datum/gas/carbon_dioxide, /datum/gas/nitrous_oxide, /datum/gas/nitrogen, /datum/gas/pluoxium, /datum/gas/tritium, /datum/gas/bz) - //calculating gas related values - combined_gas = max(removed.total_moles(), 0) - - plasmacomp = max(removed.gases[/datum/gas/plasma][MOLES]/combined_gas, 0) - o2comp = max(removed.gases[/datum/gas/oxygen][MOLES]/combined_gas, 0) - co2comp = max(removed.gases[/datum/gas/carbon_dioxide][MOLES]/combined_gas, 0) - pluoxiumcomp = max(removed.gases[/datum/gas/pluoxium][MOLES]/combined_gas, 0) - tritiumcomp = max(removed.gases[/datum/gas/tritium][MOLES]/combined_gas, 0) - bzcomp = max(removed.gases[/datum/gas/bz][MOLES]/combined_gas, 0) - - n2ocomp = max(removed.gases[/datum/gas/nitrous_oxide][MOLES]/combined_gas, 0) - n2comp = max(removed.gases[/datum/gas/nitrogen][MOLES]/combined_gas, 0) - - if(pluoxiumcomp >= 0.15) - pluoxiumbonus = 1 //makes pluoxium only work at 15%+ - else - pluoxiumbonus = 0 - - gasmix_power_ratio = min(max(plasmacomp + o2comp + co2comp + tritiumcomp + bzcomp - pluoxiumcomp - n2comp, 0), 1) - - dynamic_heat_modifier = max((plasmacomp * PLASMA_HEAT_PENALTY) + (o2comp * OXYGEN_HEAT_PENALTY) + (co2comp * CO2_HEAT_PENALTY) + (tritiumcomp * TRITIUM_HEAT_PENALTY) + ((pluoxiumcomp * PLUOXIUM_HEAT_PENALTY) * pluoxiumbonus) + (n2comp * NITROGEN_HEAT_PENALTY) + (bzcomp * BZ_HEAT_PENALTY), 0.5) - dynamic_heat_resistance = max((n2ocomp * N2O_HEAT_RESISTANCE) + ((pluoxiumcomp * PLUOXIUM_HEAT_RESISTANCE) * pluoxiumbonus), 1) - - power_transmission_bonus = max((plasmacomp * PLASMA_TRANSMIT_MODIFIER) + (o2comp * OXYGEN_TRANSMIT_MODIFIER) + (bzcomp * BZ_TRANSMIT_MODIFIER), 0) - - //more moles of gases are harder to heat than fewer, so let's scale heat damage around them - mole_heat_penalty = max(combined_gas / MOLE_HEAT_PENALTY, 0.25) - - if (combined_gas > POWERLOSS_INHIBITION_MOLE_THRESHOLD && co2comp > POWERLOSS_INHIBITION_GAS_THRESHOLD) - powerloss_dynamic_scaling = CLAMP(powerloss_dynamic_scaling + CLAMP(co2comp - powerloss_dynamic_scaling, -0.02, 0.02), 0, 1) - else - powerloss_dynamic_scaling = CLAMP(powerloss_dynamic_scaling - 0.05,0, 1) - powerloss_inhibitor = CLAMP(1-(powerloss_dynamic_scaling * CLAMP(combined_gas/POWERLOSS_INHIBITION_MOLE_BOOST_THRESHOLD,1 ,1.5)),0 ,1) - - if(matter_power) - var/removed_matter = max(matter_power/MATTER_POWER_CONVERSION, 40) - power = max(power + removed_matter, 0) - matter_power = max(matter_power - removed_matter, 0) - - var/temp_factor = 50 - - if(gasmix_power_ratio > 0.8) - // with a perfect gas mix, make the power less based on heat - icon_state = "[base_icon_state]_glow" - else - // in normal mode, base the produced energy around the heat - temp_factor = 30 - icon_state = base_icon_state - - power = max( (removed.temperature * temp_factor / T0C) * gasmix_power_ratio + power, 0) //Total laser power plus an overload - - if(prob(50)) - radiation_pulse(src, power * (1 + (tritiumcomp * TRITIUM_RADIOACTIVITY_MODIFIER) + ((pluoxiumcomp * PLUOXIUM_RADIOACTIVITY_MODIFIER) * pluoxiumbonus) * (power_transmission_bonus/(10-(bzcomp * BZ_RADIOACTIVITY_MODIFIER))))) // Rad Modifiers BZ(500%), Tritium(300%), and Pluoxium(-200%) - if(bzcomp >= 0.4 && prob(30 * bzcomp)) - src.fire_nuclear_particle() // Start to emit radballs at a maximum of 30% chance per tick - - - var/device_energy = power * REACTION_POWER_MODIFIER - - //To figure out how much temperature to add each tick, consider that at one atmosphere's worth - //of pure oxygen, with all four lasers firing at standard energy and no N2 present, at room temperature - //that the device energy is around 2140. At that stage, we don't want too much heat to be put out - //Since the core is effectively "cold" - - //Also keep in mind we are only adding this temperature to (efficiency)% of the one tile the rock - //is on. An increase of 4*C @ 25% efficiency here results in an increase of 1*C / (#tilesincore) overall. - removed.temperature += ((device_energy * dynamic_heat_modifier) / THERMAL_RELEASE_MODIFIER) - - removed.temperature = max(0, min(removed.temperature, 2500 * dynamic_heat_modifier)) - - //Calculate how much gas to release - removed.gases[/datum/gas/plasma][MOLES] += max((device_energy * dynamic_heat_modifier) / PLASMA_RELEASE_MODIFIER, 0) - - removed.gases[/datum/gas/oxygen][MOLES] += max(((device_energy + removed.temperature * dynamic_heat_modifier) - T0C) / OXYGEN_RELEASE_MODIFIER, 0) - - if(produces_gas) - env.merge(removed) - air_update_turf() - - for(var/mob/living/carbon/human/l in view(src, HALLUCINATION_RANGE(power))) // If they can see it without mesons on. Bad on them. - if(!istype(l.glasses, /obj/item/clothing/glasses/meson)) - var/D = sqrt(1 / max(1, get_dist(l, src))) - l.hallucination += power * config_hallucination_power * D - l.hallucination = CLAMP(0, 200, l.hallucination) - - for(var/mob/living/l in range(src, round((power / 100) ** 0.25))) - var/rads = (power / 10) * sqrt( 1 / max(get_dist(l, src),1) ) - l.rad_act(rads) - - power -= ((power/500)**3) * powerloss_inhibitor - - if(power > POWER_PENALTY_THRESHOLD || damage > damage_penalty_point) - - if(power > POWER_PENALTY_THRESHOLD) - playsound(src.loc, 'sound/blank.ogg', 100, TRUE, extrarange = 10) - supermatter_zap(src, 5, min(power*2, 20000)) - supermatter_zap(src, 5, min(power*2, 20000)) - if(power > SEVERE_POWER_PENALTY_THRESHOLD) - supermatter_zap(src, 5, min(power*2, 20000)) - if(power > CRITICAL_POWER_PENALTY_THRESHOLD) - supermatter_zap(src, 5, min(power*2, 20000)) - else if (damage > damage_penalty_point && prob(20)) - playsound(src.loc, 'sound/blank.ogg', 100, TRUE, extrarange = 10) - supermatter_zap(src, 5, CLAMP(power*2, 4000, 20000)) - - if(prob(15) && power > POWER_PENALTY_THRESHOLD) - supermatter_pull(src, power/750) - if(prob(5)) - supermatter_anomaly_gen(src, FLUX_ANOMALY, rand(5, 10)) - if(power > SEVERE_POWER_PENALTY_THRESHOLD && prob(5) || prob(1)) - supermatter_anomaly_gen(src, GRAVITATIONAL_ANOMALY, rand(5, 10)) - if(power > SEVERE_POWER_PENALTY_THRESHOLD && prob(2) || prob(0.3) && power > POWER_PENALTY_THRESHOLD) - supermatter_anomaly_gen(src, PYRO_ANOMALY, rand(5, 10)) - - if(damage > warning_point) // while the core is still damaged and it's still worth noting its status - if((REALTIMEOFDAY - lastwarning) / 10 >= WARNING_DELAY) - alarm() - - if(damage > emergency_point) - radio.talk_into(src, "[emergency_alert] Integrity: [get_integrity()]%", common_channel) - lastwarning = REALTIMEOFDAY - if(!has_reached_emergency) - investigate_log("has reached the emergency point for the first time.", INVESTIGATE_SUPERMATTER) - message_admins("[src] has reached the emergency point [ADMIN_JMP(src)].") - has_reached_emergency = TRUE - else if(damage >= damage_archived) // The damage is still going up - radio.talk_into(src, "[warning_alert] Integrity: [get_integrity()]%", engineering_channel) - lastwarning = REALTIMEOFDAY - (WARNING_DELAY * 5) - - else // Phew, we're safe - radio.talk_into(src, "[safe_alert] Integrity: [get_integrity()]%", engineering_channel) - lastwarning = REALTIMEOFDAY - - if(power > POWER_PENALTY_THRESHOLD) - radio.talk_into(src, "Warning: Hyperstructure has reached dangerous power level.", engineering_channel) - if(powerloss_inhibitor < 0.5) - radio.talk_into(src, "DANGER: CHARGE INERTIA CHAIN REACTION IN PROGRESS.", engineering_channel) - - if(combined_gas > MOLE_PENALTY_THRESHOLD) - radio.talk_into(src, "Warning: Critical coolant mass reached.", engineering_channel) - - if(damage > explosion_point) - countdown() - - return 1 - -/obj/machinery/power/supermatter_crystal/bullet_act(obj/projectile/Proj) - var/turf/L = loc - if(!istype(L)) - return FALSE - if(!istype(Proj.firer, /obj/machinery/power/emitter)) - investigate_log("has been hit by [Proj] fired by [key_name(Proj.firer)]", INVESTIGATE_SUPERMATTER) - if(Proj.flag != "bullet") - power += Proj.damage * config_bullet_energy - if(!has_been_powered) - investigate_log("has been powered for the first time.", INVESTIGATE_SUPERMATTER) - message_admins("[src] has been powered for the first time [ADMIN_JMP(src)].") - has_been_powered = TRUE - else if(takes_damage) - damage += Proj.damage * config_bullet_energy - return BULLET_ACT_HIT - -/obj/machinery/power/supermatter_crystal/singularity_act() - var/gain = 100 - investigate_log("Supermatter shard consumed by singularity.", INVESTIGATE_SINGULO) - message_admins("Singularity has consumed a supermatter shard and can now become stage six.") - visible_message("[src] is consumed by the singularity!") - for(var/mob/M in GLOB.player_list) - if(M.z == z) - SEND_SOUND(M, 'sound/blank.ogg') //everyone goan know bout this - to_chat(M, "A horrible screeching fills your ears, and a wave of dread washes over you...") - qdel(src) - return gain - -/obj/machinery/power/supermatter_crystal/blob_act(obj/structure/blob/B) - if(B && !isspaceturf(loc)) //does nothing in space - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - damage += B.obj_integrity * 0.5 //take damage equal to 50% of remaining blob health before it tried to eat us - if(B.obj_integrity > 100) - B.visible_message("\The [B] strikes at \the [src] and flinches away!",\ - "I hear a loud crack as you are washed with a wave of heat.") - B.take_damage(100, BURN) - else - B.visible_message("\The [B] strikes at \the [src] and rapidly flashes to ash.",\ - "I hear a loud crack as you are washed with a wave of heat.") - Consume(B) - -/obj/machinery/power/supermatter_crystal/attack_tk(mob/user) - if(iscarbon(user)) - var/mob/living/carbon/C = user - to_chat(C, "That was a really dense idea.") - C.ghostize() - var/obj/item/organ/brain/rip_u = locate(/obj/item/organ/brain) in C.internal_organs - rip_u.Remove(C) - qdel(rip_u) - -/obj/machinery/power/supermatter_crystal/attack_paw(mob/user) - dust_mob(user, cause = "monkey attack") - -/obj/machinery/power/supermatter_crystal/attack_alien(mob/user) - dust_mob(user, cause = "alien attack") - -/obj/machinery/power/supermatter_crystal/attack_animal(mob/living/simple_animal/S) - var/murder - if(!S.melee_damage_upper && !S.melee_damage_lower) - murder = S.friendly_verb_continuous - else - murder = S.attack_verb_continuous - dust_mob(S, \ - "[S] unwisely [murder] [src], and [S.p_their()] body burns brilliantly before flashing into ash!", \ - "I unwisely touch [src], and your vision glows brightly as your body crumbles to dust. Oops.", \ - "simple animal attack") - -/obj/machinery/power/supermatter_crystal/attack_robot(mob/user) - if(Adjacent(user)) - dust_mob(user, cause = "cyborg attack") - -/obj/machinery/power/supermatter_crystal/attack_ai(mob/user) - return - -/obj/machinery/power/supermatter_crystal/attack_hand(mob/living/user) - . = ..() - if(.) - return - dust_mob(user, cause = "hand") - -/obj/machinery/power/supermatter_crystal/proc/dust_mob(mob/living/nom, vis_msg, mob_msg, cause) - if(nom.incorporeal_move || nom.status_flags & GODMODE) - return - if(!vis_msg) - vis_msg = "[nom] reaches out and touches [src], inducing a resonance... [nom.p_their()] body starts to glow and burst into flames before flashing into dust!" - if(!mob_msg) - mob_msg = "I reach out and touch [src]. Everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\"" - if(!cause) - cause = "contact" - nom.visible_message(vis_msg, mob_msg, "I hear an unearthly noise as a wave of heat washes over you.") - investigate_log("has been attacked ([cause]) by [key_name(nom)]", INVESTIGATE_SUPERMATTER) - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - Consume(nom) - -/obj/machinery/power/supermatter_crystal/attackby(obj/item/W, mob/living/user, params) - if(!istype(W) || (W.item_flags & ABSTRACT) || !istype(user)) - return - if(istype(W, /obj/item/melee/roastingstick)) - return ..() - if(istype(W, /obj/item/clothing/mask/cigarette)) - var/obj/item/clothing/mask/cigarette/cig = W - var/clumsy = HAS_TRAIT(user, TRAIT_CLUMSY) - if(clumsy) - var/which_hand = BODY_ZONE_L_ARM - if(!(user.active_hand_index % 2)) - which_hand = BODY_ZONE_R_ARM - var/obj/item/bodypart/dust_arm = user.get_bodypart(which_hand) - dust_arm.dismember() - user.visible_message("The [W] flashes out of existence on contact with \the [src], resonating with a horrible sound...",\ - "Oops! The [W] flashes out of existence on contact with \the [src], taking your arm with it! That was clumsy of you!") - playsound(src, 'sound/blank.ogg', 150, TRUE) - Consume(dust_arm) - qdel(W) - return - if(cig.lit || user.used_intent.type != INTENT_HELP) - user.visible_message("A hideous sound echoes as [W] is ashed out on contact with \the [src]. That didn't seem like a good idea...") - playsound(src, 'sound/blank.ogg', 150, TRUE) - Consume(W) - radiation_pulse(src, 150, 4) - return ..() - else - cig.light() - user.visible_message("As [user] lights \their [W] on \the [src], silence fills the room...",\ - "Time seems to slow to a crawl as you touch \the [src] with \the [W].\n\The [W] flashes alight with an eerie energy as you nonchalantly lift your hand away from \the [src]. Damn.") - playsound(src, 'sound/blank.ogg', 50, TRUE) - radiation_pulse(src, 50, 3) - return - if(istype(W, /obj/item/scalpel/supermatter)) - var/obj/item/scalpel/supermatter/scalpel = W - to_chat(user, "I carefully begin to scrape \the [src] with \the [W]...") - if(W.use_tool(src, user, 60, volume=100)) - if (scalpel.usesLeft) - to_chat(user, "I extract a sliver from \the [src]. \The [src] begins to react violently!") - new /obj/item/nuke_core/supermatter_sliver(drop_location()) - matter_power += 800 - scalpel.usesLeft-- - if (!scalpel.usesLeft) - to_chat(user, "A tiny piece of \the [W] falls off, rendering it useless!") - else - to_chat(user, "I fail to extract a sliver from \The [src]! \the [W] isn't sharp enough anymore.") - else if(user.dropItemToGround(W)) - user.visible_message("As [user] touches \the [src] with \a [W], silence fills the room...",\ - "I touch \the [src] with \the [W], and everything suddenly goes silent.\n\The [W] flashes into dust as you flinch away from \the [src].",\ - "Everything suddenly goes silent.") - investigate_log("has been attacked ([W]) by [key_name(user)]", INVESTIGATE_SUPERMATTER) - Consume(W) - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - - radiation_pulse(src, 150, 4) - -/obj/machinery/power/supermatter_crystal/wrench_act(mob/user, obj/item/tool) - ..() - if (moveable) - default_unfasten_wrench(user, tool, time = 20) - return TRUE - -/obj/machinery/power/supermatter_crystal/Bumped(atom/movable/AM) - if(isliving(AM)) - AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... [AM.p_their()] body starts to glow and burst into flames before flashing into dust!",\ - "I slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"",\ - "I hear an unearthly noise as a wave of heat washes over you.") - else if(isobj(AM) && !iseffect(AM)) - AM.visible_message("\The [AM] smacks into \the [src] and rapidly flashes to ash.", null,\ - "I hear a loud crack as you are washed with a wave of heat.") - else - return - - playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE) - - Consume(AM) - -/obj/machinery/power/supermatter_crystal/intercept_zImpact(atom/movable/AM, levels) - . = ..() - Bumped(AM) - . |= FALL_STOP_INTERCEPTING | FALL_INTERCEPTED - -/obj/machinery/power/supermatter_crystal/proc/Consume(atom/movable/AM) - if(isliving(AM)) - var/mob/living/user = AM - if(user.status_flags & GODMODE) - return - message_admins("[src] has consumed [key_name_admin(user)] [ADMIN_JMP(src)].") - investigate_log("has consumed [key_name(user)].", INVESTIGATE_SUPERMATTER) - user.dust(force = TRUE) - matter_power += 200 - else if(istype(AM, /obj/singularity)) - return - else if(isobj(AM)) - if(!iseffect(AM)) - var/suspicion = "" - if(AM.fingerprintslast) - suspicion = "last touched by [AM.fingerprintslast]" - message_admins("[src] has consumed [AM], [suspicion] [ADMIN_JMP(src)].") - investigate_log("has consumed [AM] - [suspicion].", INVESTIGATE_SUPERMATTER) - qdel(AM) - if(!iseffect(AM)) - matter_power += 200 - - //Some poor sod got eaten, go ahead and irradiate people nearby. - radiation_pulse(src, 3000, 2, TRUE) - for(var/mob/living/L in range(10)) - investigate_log("has irradiated [key_name(L)] after consuming [AM].", INVESTIGATE_SUPERMATTER) - if(L in view()) - L.show_message("As \the [src] slowly stops resonating, you find your skin covered in new radiation burns.", MSG_VISUAL,\ - "The unearthly ringing subsides and you notice you have new radiation burns.", MSG_AUDIBLE) - else - L.show_message("I hear an unearthly ringing and notice your skin is covered in fresh radiation burns.", MSG_AUDIBLE) -//Do not blow up our internal radio -/obj/machinery/power/supermatter_crystal/contents_explosion(severity, target) - return - -/obj/machinery/power/supermatter_crystal/engine - is_main_engine = TRUE - -/obj/machinery/power/supermatter_crystal/shard - name = "supermatter shard" - desc = "" - base_icon_state = "darkmatter_shard" - icon_state = "darkmatter_shard" - anchored = FALSE - gasefficency = 0.125 - explosion_power = 12 - layer = ABOVE_MOB_LAYER - moveable = TRUE - -/obj/machinery/power/supermatter_crystal/shard/engine - name = "anchored supermatter shard" - is_main_engine = TRUE - anchored = TRUE - moveable = FALSE - -// When you wanna make a supermatter shard for the dramatic effect, but -// don't want it exploding suddenly -/obj/machinery/power/supermatter_crystal/shard/hugbox - name = "anchored supermatter shard" - takes_damage = FALSE - produces_gas = FALSE - moveable = FALSE - anchored = TRUE - -/obj/machinery/power/supermatter_crystal/shard/hugbox/fakecrystal //Hugbox shard with crystal visuals, used in the Supermatter/Hyperfractal shuttle - name = "supermatter crystal" - base_icon_state = "darkmatter" - icon_state = "darkmatter" - -/obj/machinery/power/supermatter_crystal/proc/supermatter_pull(turf/center, pull_range = 10) - playsound(src.loc, 'sound/blank.ogg', 100, TRUE, extrarange = 7) - for(var/atom/movable/P in orange(pull_range,center)) - if(P.anchored || P.move_resist >= MOVE_FORCE_EXTREMELY_STRONG) //move resist memes. - return - if(ishuman(P)) - var/mob/living/carbon/human/H = P - if(H.incapacitated() || !(H.mobility_flags & MOBILITY_STAND) || H.mob_negates_gravity()) - return //You can't knock down someone who is already knocked down or has immunity to gravity - H.visible_message("[H] is suddenly knocked down, as if [H.p_their()] [(H.get_num_legs() == 1) ? "leg had" : "legs have"] been pulled out from underneath [H.p_them()]!",\ - "A sudden gravitational pulse knocks you down!",\ - "I hear a thud.") - H.apply_effect(40, EFFECT_PARALYZE, 0) - else //you're not human so you get sucked in - step_towards(P,center) - step_towards(P,center) - step_towards(P,center) - step_towards(P,center) - -/obj/machinery/power/supermatter_crystal/proc/supermatter_anomaly_gen(turf/anomalycenter, type = FLUX_ANOMALY, anomalyrange = 5) - var/turf/L = pick(orange(anomalyrange, anomalycenter)) - if(L) - switch(type) - if(FLUX_ANOMALY) - var/obj/effect/anomaly/flux/A = new(L, 300) - A.explosive = FALSE - if(GRAVITATIONAL_ANOMALY) - new /obj/effect/anomaly/grav(L, 250) - if(PYRO_ANOMALY) - new /obj/effect/anomaly/pyro(L, 200) - -/obj/machinery/power/supermatter_crystal/proc/supermatter_zap(atom/zapstart, range = 3, power) - . = zapstart.dir - if(power < 1000) - return - - var/target_atom - var/mob/living/target_mob - var/obj/machinery/target_machine - var/obj/structure/target_structure - var/list/arctargetsmob = list() - var/list/arctargetsmachine = list() - var/list/arctargetsstructure = list() - - if(prob(20)) //let's not hit all the engineers with every beam and/or segment of the arc - for(var/mob/living/Z in oview(zapstart, range+2)) - arctargetsmob += Z - if(arctargetsmob.len) - var/mob/living/H = pick(arctargetsmob) - var/atom/A = H - target_mob = H - target_atom = A - - else - for(var/obj/machinery/X in oview(zapstart, range+2)) - arctargetsmachine += X - if(arctargetsmachine.len) - var/obj/machinery/M = pick(arctargetsmachine) - var/atom/A = M - target_machine = M - target_atom = A - - else - for(var/obj/structure/Y in oview(zapstart, range+2)) - arctargetsstructure += Y - if(arctargetsstructure.len) - var/obj/structure/O = pick(arctargetsstructure) - var/atom/A = O - target_structure = O - target_atom = A - - if(target_atom) - zapstart.Beam(target_atom, icon_state="nzcrentrs_power", time=5) - var/zapdir = get_dir(zapstart, target_atom) - if(zapdir) - . = zapdir - - if(target_mob) - target_mob.electrocute_act(rand(5,10), "Supermatter Discharge Bolt", 1, SHOCK_NOSTUN) - if(prob(15)) - supermatter_zap(target_mob, 5, power / 2) - supermatter_zap(target_mob, 5, power / 2) - else - supermatter_zap(target_mob, 5, power / 1.5) - - else if(target_machine) - if(prob(15)) - supermatter_zap(target_machine, 5, power / 2) - supermatter_zap(target_machine, 5, power / 2) - else - supermatter_zap(target_machine, 5, power / 1.5) - - else if(target_structure) - if(prob(15)) - supermatter_zap(target_structure, 5, power / 2) - supermatter_zap(target_structure, 5, power / 2) - else - supermatter_zap(target_structure, 5, power / 1.5) - -#undef HALLUCINATION_RANGE -#undef GRAVITATIONAL_ANOMALY -#undef FLUX_ANOMALY -#undef PYRO_ANOMALY diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm deleted file mode 100644 index d0fc7c5597..0000000000 --- a/code/modules/power/terminal.dm +++ /dev/null @@ -1,82 +0,0 @@ -// the underfloor wiring terminal for the APC -// autogenerated when an APC is placed -// all conduit connects go to this object instead of the APC -// using this solves the problem of having the APC in a wall yet also inside an area - -/obj/machinery/power/terminal - name = "terminal" - icon_state = "term" - desc = "" - level = 1 - layer = WIRE_TERMINAL_LAYER //a bit above wires - var/obj/machinery/power/master = null - - -/obj/machinery/power/terminal/Initialize() - . = ..() - var/turf/T = get_turf(src) - if(level == 1) - hide(T.intact) - -/obj/machinery/power/terminal/Destroy() - if(master) - master.disconnect_terminal() - master = null - return ..() - -/obj/machinery/power/terminal/should_have_node() - return TRUE - -/obj/machinery/power/terminal/hide(i) - if(i) - invisibility = INVISIBILITY_MAXIMUM - icon_state = "term-f" - else - invisibility = 0 - icon_state = "term" - - -/obj/machinery/power/proc/can_terminal_dismantle() - . = FALSE - -/obj/machinery/power/apc/can_terminal_dismantle() - . = FALSE - if(opened) - . = TRUE - -/obj/machinery/power/smes/can_terminal_dismantle() - . = FALSE - if(panel_open) - . = TRUE - - -/obj/machinery/power/terminal/proc/dismantle(mob/living/user, obj/item/I) - if(isturf(loc)) - var/turf/T = loc - if(T.intact) - to_chat(user, "I must first expose the power terminal!") - return - - if(master && !master.can_terminal_dismantle()) - return - - user.visible_message("[user.name] dismantles the power terminal from [master].", - "I begin to cut the cables...") - - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - if(I.use_tool(src, user, 50)) - if(master && !master.can_terminal_dismantle()) - return - - if(prob(50) && electrocute_mob(user, powernet, src, 1, TRUE)) - do_sparks(5, TRUE, master) - return - - new /obj/item/stack/cable_coil(drop_location(), 10) - to_chat(user, "I cut the cables and dismantle the power terminal.") - qdel(src) - -/obj/machinery/power/terminal/wirecutter_act(mob/living/user, obj/item/I) - ..() - dismantle(user, I) - return TRUE diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm deleted file mode 100644 index 393af06a4c..0000000000 --- a/code/modules/power/tesla/coil.dm +++ /dev/null @@ -1,193 +0,0 @@ -/obj/machinery/power/tesla_coil - name = "tesla coil" - desc = "" - icon = 'icons/obj/tesla_engine/tesla_coil.dmi' - icon_state = "coil0" - anchored = FALSE - density = TRUE - - // Executing a traitor caught releasing tesla was never this fun! - can_buckle = TRUE - buckle_lying = FALSE - buckle_requires_restraints = TRUE - - circuit = /obj/item/circuitboard/machine/tesla_coil - - var/tesla_flags = TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE - var/power_loss = 2 - var/input_power_multiplier = 1 - var/zap_cooldown = 100 - var/last_zap = 0 - - var/datum/techweb/linked_techweb - -/obj/machinery/power/tesla_coil/power - circuit = /obj/item/circuitboard/machine/tesla_coil/power - -/obj/machinery/power/tesla_coil/Initialize() - . = ..() - wires = new /datum/wires/tesla_coil(src) - linked_techweb = SSresearch.science_tech - -/obj/machinery/power/testla_coil/should_have_node() - return anchored - -/obj/machinery/power/tesla_coil/RefreshParts() - var/power_multiplier = 0 - zap_cooldown = 100 - for(var/obj/item/stock_parts/capacitor/C in component_parts) - power_multiplier += C.rating - zap_cooldown -= (C.rating * 20) - input_power_multiplier = power_multiplier - -/obj/machinery/power/tesla_coil/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Power generation at [input_power_multiplier*100]%.
    Shock interval at [zap_cooldown*0.1] seconds.
    " - -/obj/machinery/power/tesla_coil/on_construction() - if(anchored) - connect_to_network() - -/obj/machinery/power/tesla_coil/default_unfasten_wrench(mob/user, obj/item/I, time = 20) - . = ..() - if(. == SUCCESSFUL_UNFASTEN) - if(panel_open) - icon_state = "coil_open[anchored]" - else - icon_state = "coil[anchored]" - if(anchored) - connect_to_network() - else - disconnect_from_network() - update_cable_icons_on_turf(get_turf(src)) - -/obj/machinery/power/tesla_coil/attackby(obj/item/W, mob/user, params) - if(default_deconstruction_screwdriver(user, "coil_open[anchored]", "coil[anchored]", W)) - return - - if(default_unfasten_wrench(user, W)) - return - - if(default_deconstruction_crowbar(W)) - return - - if(is_wire_tool(W) && panel_open) - wires.interact(user) - return - - return ..() - -/obj/machinery/power/tesla_coil/tesla_act(power, tesla_flags, shocked_targets) - if(anchored && !panel_open) - obj_flags |= BEING_SHOCKED - //don't lose arc power when it's not connected to anything - //please place tesla coils all around the station to maximize effectiveness - var/power_produced = powernet ? power / power_loss : power - add_avail(power_produced*input_power_multiplier) - flick("coilhit", src) - playsound(src.loc, 'sound/blank.ogg', 100, TRUE, extrarange = 5) - tesla_zap(src, 5, power_produced, tesla_flags, shocked_targets) - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_ENG) - if(D) - D.adjust_money(min(power_produced, 1)) - if(istype(linked_techweb)) - linked_techweb.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, min(power_produced, 1)) // x4 coils = ~240/m point bonus for R&D - addtimer(CALLBACK(src, PROC_REF(reset_shocked)), 10) - tesla_buckle_check(power) - else - ..() - -/obj/machinery/power/tesla_coil/proc/zap() - if((last_zap + zap_cooldown) > world.time || !powernet) - return FALSE - last_zap = world.time - var/coeff = (20 - ((input_power_multiplier - 1) * 3)) - coeff = max(coeff, 10) - var/power = (powernet.avail/2) - add_load(power) - playsound(src.loc, 'sound/blank.ogg', 100, TRUE, extrarange = 5) - tesla_zap(src, 10, power/(coeff/2), tesla_flags) - tesla_buckle_check(power/(coeff/2)) - -// Tesla R&D researcher -/obj/machinery/power/tesla_coil/research - name = "Tesla Corona Analyzer" - desc = "" - icon_state = "rpcoil0" - circuit = /obj/item/circuitboard/machine/tesla_coil/research - power_loss = 20 // something something, high voltage + resistance - -/obj/machinery/power/tesla_coil/research/tesla_act(power, tesla_flags, shocked_things) - if(anchored && !panel_open) - obj_flags |= BEING_SHOCKED - var/power_produced = powernet ? power / power_loss : power - add_avail(power_produced*input_power_multiplier) - flick("rpcoilhit", src) - playsound(src.loc, 'sound/blank.ogg', 100, TRUE, extrarange = 5) - tesla_zap(src, 5, power_produced, tesla_flags, shocked_things) - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_ENG) - if(D) - D.adjust_money(min(power_produced, 3)) - if(istype(linked_techweb)) - linked_techweb.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, min(power_produced, 3)) // x4 coils with a pulse per second or so = ~720/m point bonus for R&D - addtimer(CALLBACK(src, PROC_REF(reset_shocked)), 10) - tesla_buckle_check(power) - else - ..() - -/obj/machinery/power/tesla_coil/research/default_unfasten_wrench(mob/user, obj/item/wrench/W, time = 20) - . = ..() - if(. == SUCCESSFUL_UNFASTEN) - if(panel_open) - icon_state = "rpcoil_open[anchored]" - else - icon_state = "rpcoil[anchored]" - -/obj/machinery/power/tesla_coil/research/attackby(obj/item/W, mob/user, params) - if(default_deconstruction_screwdriver(user, "rpcoil_open[anchored]", "rpcoil[anchored]", W)) - return - return ..() - -/obj/machinery/power/tesla_coil/research/on_construction() - if(anchored) - connect_to_network() - -/obj/machinery/power/grounding_rod - name = "grounding rod" - desc = "" - icon = 'icons/obj/tesla_engine/tesla_coil.dmi' - icon_state = "grounding_rod0" - anchored = FALSE - density = TRUE - - can_buckle = TRUE - buckle_lying = FALSE - buckle_requires_restraints = TRUE - -/obj/machinery/power/grounding_rod/default_unfasten_wrench(mob/user, obj/item/I, time = 20) - . = ..() - if(. == SUCCESSFUL_UNFASTEN) - if(panel_open) - icon_state = "grounding_rod_open[anchored]" - else - icon_state = "grounding_rod[anchored]" - -/obj/machinery/power/grounding_rod/attackby(obj/item/W, mob/user, params) - if(default_deconstruction_screwdriver(user, "grounding_rod_open[anchored]", "grounding_rod[anchored]", W)) - return - - if(default_unfasten_wrench(user, W)) - return - - if(default_deconstruction_crowbar(W)) - return - - return ..() - -/obj/machinery/power/grounding_rod/tesla_act(power) - if(anchored && !panel_open) - flick("grounding_rodhit", src) - tesla_buckle_check(power) - else - ..() diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm deleted file mode 100644 index 31d59e69f1..0000000000 --- a/code/modules/power/tesla/energy_ball.dm +++ /dev/null @@ -1,316 +0,0 @@ -#define TESLA_DEFAULT_POWER 1738260 -#define TESLA_MINI_POWER 869130 - -/obj/singularity/energy_ball - name = "energy ball" - desc = "" - icon = 'icons/obj/tesla_engine/energy_ball.dmi' - icon_state = "energy_ball" - pixel_x = -32 - pixel_y = -32 - current_size = STAGE_TWO - move_self = 1 - grav_pull = 0 - contained = 0 - density = TRUE - energy = 0 - dissipate = 1 - dissipate_delay = 5 - dissipate_strength = 1 - var/list/orbiting_balls = list() - var/miniball = FALSE - var/produced_power - var/energy_to_raise = 32 - var/energy_to_lower = -20 - -/obj/singularity/energy_ball/Initialize(mapload, starting_energy = 50, is_miniball = FALSE) - miniball = is_miniball - . = ..() - if(!is_miniball) - set_light(10, 7, "#EEEEFF") - -/obj/singularity/energy_ball/ex_act(severity, target) - return - -/obj/singularity/energy_ball/Destroy() - if(orbiting && istype(orbiting.parent, /obj/singularity/energy_ball)) - var/obj/singularity/energy_ball/EB = orbiting.parent - EB.orbiting_balls -= src - - for(var/ball in orbiting_balls) - var/obj/singularity/energy_ball/EB = ball - QDEL_NULL(EB) - - . = ..() - -/obj/singularity/energy_ball/admin_investigate_setup() - if(miniball) - return //don't annnounce miniballs - ..() - - -/obj/singularity/energy_ball/process() - if(!orbiting) - handle_energy() - - move_the_basket_ball(4 + orbiting_balls.len * 1.5) - - playsound(src.loc, 'sound/blank.ogg', 100, TRUE, extrarange = 30) - - pixel_x = 0 - pixel_y = 0 - - tesla_zap(src, 7, TESLA_DEFAULT_POWER, TRUE) - - pixel_x = -32 - pixel_y = -32 - for (var/ball in orbiting_balls) - var/range = rand(1, CLAMP(orbiting_balls.len, 3, 7)) - tesla_zap(ball, range, TESLA_MINI_POWER/7*range) - else - energy = 0 // ensure we dont have miniballs of miniballs - -/obj/singularity/energy_ball/examine(mob/user) - . = ..() - if(orbiting_balls.len) - . += "There are [orbiting_balls.len] mini-balls orbiting it." - - -/obj/singularity/energy_ball/proc/move_the_basket_ball(move_amount) - //we face the last thing we zapped, so this lets us favor that direction a bit - var/move_bias = pick(GLOB.alldirs) - for(var/i in 0 to move_amount) - var/move_dir = pick(GLOB.alldirs + move_bias) //ensures large-ball teslas don't just sit around - if(target && prob(10)) - move_dir = get_dir(src,target) - var/turf/T = get_step(src, move_dir) - if(can_move(T)) - forceMove(T) - setDir(move_dir) - for(var/mob/living/carbon/C in loc) - dust_mobs(C) - - -/obj/singularity/energy_ball/proc/handle_energy() - if(energy >= energy_to_raise) - energy_to_lower = energy_to_raise - 20 - energy_to_raise = energy_to_raise * 1.25 - - playsound(src.loc, 'sound/blank.ogg', 100, TRUE, extrarange = 30) - addtimer(CALLBACK(src, PROC_REF(new_mini_ball)), 100) - - else if(energy < energy_to_lower && orbiting_balls.len) - energy_to_raise = energy_to_raise / 1.25 - energy_to_lower = (energy_to_raise / 1.25) - 20 - - var/Orchiectomy_target = pick(orbiting_balls) - qdel(Orchiectomy_target) - - else if(orbiting_balls.len) - dissipate() //sing code has a much better system. - -/obj/singularity/energy_ball/proc/new_mini_ball() - if(!loc) - return - var/obj/singularity/energy_ball/EB = new(loc, 0, TRUE) - - EB.transform *= pick(0.3, 0.4, 0.5, 0.6, 0.7) - var/icon/I = icon(icon,icon_state,dir) - - var/orbitsize = (I.Width() + I.Height()) * pick(0.4, 0.5, 0.6, 0.7, 0.8) - orbitsize -= (orbitsize / world.icon_size) * (world.icon_size * 0.25) - - EB.orbit(src, orbitsize, pick(FALSE, TRUE), rand(10, 25), pick(3, 4, 5, 6, 36)) - - -/obj/singularity/energy_ball/Bump(atom/A) - dust_mobs(A) - -/obj/singularity/energy_ball/Bumped(atom/movable/AM) - dust_mobs(AM) - -/obj/singularity/energy_ball/attack_tk(mob/user) - if(iscarbon(user)) - var/mob/living/carbon/C = user - to_chat(C, "That was a shockingly dumb idea.") - var/obj/item/organ/brain/rip_u = locate(/obj/item/organ/brain) in C.internal_organs - C.ghostize(0) - qdel(rip_u) - C.death() - -/obj/singularity/energy_ball/orbit(obj/singularity/energy_ball/target) - if (istype(target)) - target.orbiting_balls += src - GLOB.poi_list -= src - target.dissipate_strength = target.orbiting_balls.len - - . = ..() -/obj/singularity/energy_ball/stop_orbit() - if (orbiting && istype(orbiting.parent, /obj/singularity/energy_ball)) - var/obj/singularity/energy_ball/orbitingball = orbiting.parent - orbitingball.orbiting_balls -= src - orbitingball.dissipate_strength = orbitingball.orbiting_balls.len - . = ..() - if (!QDELETED(src)) - qdel(src) - - -/obj/singularity/energy_ball/proc/dust_mobs(atom/A) - if(isliving(A)) - var/mob/living/L = A - if(L.incorporeal_move || L.status_flags & GODMODE) - return - if(!iscarbon(A)) - return - for(var/obj/machinery/power/grounding_rod/GR in orange(src, 2)) - if(GR.anchored) - return - var/mob/living/carbon/C = A - C.dust() - -/proc/tesla_zap(atom/source, zap_range = 3, power, tesla_flags = TESLA_DEFAULT_FLAGS, list/shocked_targets) - . = source.dir - if(power < 1000) - return - - var/closest_dist = 0 - var/closest_atom - var/obj/machinery/power/tesla_coil/closest_tesla_coil - var/obj/machinery/power/grounding_rod/closest_grounding_rod - var/mob/living/closest_mob - var/obj/machinery/closest_machine - var/obj/structure/closest_structure - var/obj/structure/blob/closest_blob - var/static/things_to_shock = typecacheof(list(/obj/machinery, /mob/living, /obj/structure)) - var/static/blacklisted_tesla_types = typecacheof(list(/obj/machinery/atmospherics, - /obj/machinery/power/emitter, - /obj/machinery/field/generator, - /mob/living/simple_animal, - /obj/machinery/particle_accelerator/control_box, - /obj/structure/particle_accelerator/fuel_chamber, - /obj/structure/particle_accelerator/particle_emitter/center, - /obj/structure/particle_accelerator/particle_emitter/left, - /obj/structure/particle_accelerator/particle_emitter/right, - /obj/structure/particle_accelerator/power_box, - /obj/structure/particle_accelerator/end_cap, - /obj/machinery/field/containment, - /obj/structure/disposalpipe, - /obj/structure/disposaloutlet, - /obj/machinery/disposal/deliveryChute, - /obj/machinery/camera, - /obj/structure/sign, - /obj/machinery/gateway, - /obj/structure/lattice, - /obj/structure/grille, - /obj/machinery/the_singularitygen/tesla, - /obj/structure/frame/machine)) - - for(var/A in typecache_filter_multi_list_exclusion(oview(source, zap_range+2), things_to_shock, blacklisted_tesla_types)) - if(!(tesla_flags & TESLA_ALLOW_DUPLICATES) && LAZYACCESS(shocked_targets, A)) - continue - - if(istype(A, /obj/machinery/power/tesla_coil)) - var/dist = get_dist(source, A) - var/obj/machinery/power/tesla_coil/C = A - if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !(C.obj_flags & BEING_SHOCKED)) - closest_dist = dist - - //we use both of these to save on istype and typecasting overhead later on - //while still allowing common code to run before hand - closest_tesla_coil = C - closest_atom = C - - - else if(closest_tesla_coil) - continue //no need checking these other things - - else if(istype(A, /obj/machinery/power/grounding_rod)) - var/dist = get_dist(source, A)-2 - if(dist <= zap_range && (dist < closest_dist || !closest_grounding_rod)) - closest_grounding_rod = A - closest_atom = A - closest_dist = dist - - else if(closest_grounding_rod) - continue - - else if(isliving(A)) - var/dist = get_dist(source, A) - var/mob/living/L = A - if(dist <= zap_range && (dist < closest_dist || !closest_mob) && L.stat != DEAD && !(L.flags_1 & TESLA_IGNORE_1)) - closest_mob = L - closest_atom = A - closest_dist = dist - - else if(closest_mob) - continue - - else if(ismachinery(A)) - var/obj/machinery/M = A - var/dist = get_dist(source, A) - if(dist <= zap_range && (dist < closest_dist || !closest_machine) && !(M.obj_flags & BEING_SHOCKED)) - closest_machine = M - closest_atom = A - closest_dist = dist - - else if(closest_machine) - continue - - else if(istype(A, /obj/structure/blob)) - var/obj/structure/blob/B = A - var/dist = get_dist(source, A) - if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !(B.obj_flags & BEING_SHOCKED)) - closest_blob = B - closest_atom = A - closest_dist = dist - - else if(closest_blob) - continue - - else if(isstructure(A)) - var/obj/structure/S = A - var/dist = get_dist(source, A) - if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !(S.obj_flags & BEING_SHOCKED)) - closest_structure = S - closest_atom = A - closest_dist = dist - - else if(closest_structure) - continue - - //Alright, we've done our loop, now lets see if was anything interesting in range - if(closest_atom) - //common stuff - source.Beam(closest_atom, icon_state="lightning[rand(1,12)]", time=5, maxdistance = INFINITY) - if(!(tesla_flags & TESLA_ALLOW_DUPLICATES)) - LAZYSET(shocked_targets, closest_atom, TRUE) - var/zapdir = get_dir(source, closest_atom) - if(zapdir) - . = zapdir - - //per type stuff: - if(!QDELETED(closest_tesla_coil)) - closest_tesla_coil.tesla_act(power, tesla_flags, shocked_targets) - - else if(!QDELETED(closest_grounding_rod)) - closest_grounding_rod.tesla_act(power, tesla_flags, shocked_targets) - - else if(!QDELETED(closest_mob)) - var/shock_damage = (tesla_flags & TESLA_MOB_DAMAGE)? (min(round(power/600), 90) + rand(-5, 5)) : 0 - closest_mob.electrocute_act(shock_damage, source, 1, SHOCK_TESLA | ((tesla_flags & TESLA_MOB_STUN) ? NONE : SHOCK_NOSTUN)) - if(issilicon(closest_mob)) - var/mob/living/silicon/S = closest_mob - if((tesla_flags & TESLA_MOB_STUN) && (tesla_flags & TESLA_MOB_DAMAGE)) - S.emp_act(EMP_LIGHT) - tesla_zap(S, 7, power / 1.5, tesla_flags, shocked_targets) // metallic folks bounce it further - else - tesla_zap(closest_mob, 5, power / 1.5, tesla_flags, shocked_targets) - - else if(!QDELETED(closest_machine)) - closest_machine.tesla_act(power, tesla_flags, shocked_targets) - - else if(!QDELETED(closest_blob)) - closest_blob.tesla_act(power, tesla_flags, shocked_targets) - - else if(!QDELETED(closest_structure)) - closest_structure.tesla_act(power, tesla_flags, shocked_targets) diff --git a/code/modules/power/tesla/generator.dm b/code/modules/power/tesla/generator.dm deleted file mode 100644 index acf5d5b650..0000000000 --- a/code/modules/power/tesla/generator.dm +++ /dev/null @@ -1,10 +0,0 @@ -/obj/machinery/the_singularitygen/tesla - name = "energy ball generator" - desc = "" - icon = 'icons/obj/tesla_engine/tesla_generator.dmi' - icon_state = "TheSingGen" - creation_type = /obj/singularity/energy_ball - -/obj/machinery/the_singularitygen/tesla/tesla_act(power, tesla_flags) - if(tesla_flags & TESLA_MACHINE_EXPLOSIVE) - energy += power diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm deleted file mode 100644 index fafa82e4d6..0000000000 --- a/code/modules/power/tracker.dm +++ /dev/null @@ -1,93 +0,0 @@ -//Solar tracker - -//Machine that tracks the sun and reports it's direction to the solar controllers -//As long as this is working, solar panels on same powernet will track automatically - -/obj/machinery/power/tracker - name = "solar tracker" - desc = "" - icon = 'goon/icons/obj/power.dmi' - icon_state = "tracker" - density = TRUE - use_power = NO_POWER_USE - max_integrity = 250 - integrity_failure = 0.2 - - var/id = 0 - var/sun_angle = 0 // sun angle as set by sun datum - var/obj/machinery/power/solar_control/control = null - -/obj/machinery/power/tracker/Initialize(mapload, obj/item/solar_assembly/S) - . = ..() - Make(S) - connect_to_network() - -/obj/machinery/power/tracker/Destroy() - unset_control() //remove from control computer - return ..() - -//set the control of the tracker to a given computer if closer than SOLAR_MAX_DIST -/obj/machinery/power/tracker/proc/set_control(obj/machinery/power/solar_control/SC) - if(!SC || (get_dist(src, SC) > SOLAR_MAX_DIST)) - return 0 - control = SC - SC.connected_tracker = src - return 1 - -//set the control of the tracker to null and removes it from the previous control computer if needed -/obj/machinery/power/tracker/proc/unset_control() - if(control) - control.connected_tracker = null - control = null - -/obj/machinery/power/tracker/proc/Make(obj/item/solar_assembly/S) - if(!S) - S = new /obj/item/solar_assembly(src) - S.glass_type = /obj/item/stack/sheet/glass - S.tracker = 1 - S.anchored = TRUE - S.forceMove(src) - update_icon() - -//updates the tracker icon and the facing angle for the control computer -/obj/machinery/power/tracker/proc/set_angle(angle) - sun_angle = angle - - //set icon dir to show sun illumination - setDir(turn(NORTH, -angle - 22.5) )// 22.5 deg bias ensures, e.g. 67.5-112.5 is EAST - - if(powernet && (powernet == control.powernet)) //update if we're still in the same powernet - control.currentdir = angle - -/obj/machinery/power/tracker/crowbar_act(mob/user, obj/item/I) - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - user.visible_message("[user] begins to take the glass off [src].", "I begin to take the glass off [src]...") - if(I.use_tool(src, user, 50)) - playsound(src.loc, 'sound/blank.ogg', 50, TRUE) - user.visible_message("[user] takes the glass off [src].", "I take the glass off [src].") - deconstruct(TRUE) - return TRUE - -/obj/machinery/power/tracker/obj_break(damage_flag) - . = ..() - if(.) - playsound(loc, 'sound/blank.ogg', 100, TRUE) - unset_control() - -/obj/machinery/power/solar/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - if(disassembled) - var/obj/item/solar_assembly/S = locate() in src - if(S) - S.forceMove(loc) - S.give_glass(stat & BROKEN) - else - playsound(src, "shatter", 70, TRUE) - new /obj/item/shard(src.loc) - new /obj/item/shard(src.loc) - qdel(src) - -// Tracker Electronic - -/obj/item/electronics/tracker - name = "tracker electronics" diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm deleted file mode 100644 index 660940099c..0000000000 --- a/code/modules/power/turbine.dm +++ /dev/null @@ -1,372 +0,0 @@ -// TURBINE v2 AKA rev4407 Engine reborn! - -// How to use it? - Mappers -// -// This is a very good power generating mechanism. All you need is a blast furnace with soaring flames and output. -// Not everything is included yet so the turbine can run out of fuel quiet quickly. The best thing about the turbine is that even -// though something is on fire that passes through it, it won't be on fire as it passes out of it. So the exhaust fumes can still -// containt unreacted fuel - plasma and oxygen that needs to be filtered out and re-routed back. This of course requires smart piping -// For a computer to work with the turbine the compressor requires a comp_id matching with the turbine computer's id. This will be -// subjected to a change in the near future mind you. Right now this method of generating power is a good backup but don't expect it -// become a main power source unless some work is done. Have fun. At 50k RPM it generates 60k power. So more than one turbine is needed! -// -// - Numbers -// -// Example setup S - sparker -// B - Blast doors into space for venting -// *BBB****BBB* C - Compressor -// S CT * T - Turbine -// * ^ * * V * D - Doors with firedoor -// **|***D**|** ^ - Fuel feed (Not vent, but a gas outlet) -// | | V - Suction vent (Like the ones in atmos -// - - -/obj/machinery/power/compressor - name = "compressor" - desc = "" - icon = 'icons/obj/atmospherics/pipes/simple.dmi' - icon_state = "compressor" - density = TRUE - resistance_flags = FIRE_PROOF - CanAtmosPass = ATMOS_PASS_DENSITY - circuit = /obj/item/circuitboard/machine/power_compressor - ui_x = 350 - ui_y = 280 - - var/obj/machinery/power/turbine/turbine - var/datum/gas_mixture/gas_contained - var/turf/inturf - var/starter = 0 - var/rpm = 0 - var/rpmtarget = 0 - var/capacity = 1e6 - var/comp_id = 0 - var/efficiency - -/obj/machinery/power/compressor/Destroy() - if (turbine && turbine.compressor == src) - turbine.compressor = null - turbine = null - return ..() - -/obj/machinery/power/turbine - name = "gas turbine generator" - desc = "" - icon = 'icons/obj/atmospherics/pipes/simple.dmi' - icon_state = "turbine" - density = TRUE - resistance_flags = FIRE_PROOF - CanAtmosPass = ATMOS_PASS_DENSITY - circuit = /obj/item/circuitboard/machine/power_turbine - var/opened = 0 - var/obj/machinery/power/compressor/compressor - var/turf/outturf - var/lastgen - var/productivity = 1 - -/obj/machinery/power/turbine/Destroy() - if (compressor && compressor.turbine == src) - compressor.turbine = null - compressor = null - return ..() - -// the inlet stage of the gas turbine electricity generator - -/obj/machinery/power/compressor/Initialize() - . = ..() - // The inlet of the compressor is the direction it faces - gas_contained = new - inturf = get_step(src, dir) - locate_machinery() - if(!turbine) - obj_break() - - -#define COMPFRICTION 5e5 - - -/obj/machinery/power/compressor/locate_machinery() - if(turbine) - return - turbine = locate() in get_step(src, get_dir(inturf, src)) - if(turbine) - turbine.locate_machinery() - -/obj/machinery/power/compressor/RefreshParts() - var/E = 0 - for(var/obj/item/stock_parts/manipulator/M in component_parts) - E += M.rating - efficiency = E / 6 - -/obj/machinery/power/compressor/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Efficiency at [efficiency*100]%." - -/obj/machinery/power/compressor/attackby(obj/item/I, mob/user, params) - if(default_deconstruction_screwdriver(user, initial(icon_state), initial(icon_state), I)) - return - - if(default_change_direction_wrench(user, I)) - turbine = null - inturf = get_step(src, dir) - locate_machinery() - if(turbine) - to_chat(user, "Turbine connected.") - stat &= ~BROKEN - else - to_chat(user, "Turbine not connected.") - obj_break() - return - - default_deconstruction_crowbar(I) - -/obj/machinery/power/compressor/process() - if(!starter) - return - if(!turbine || (turbine.stat & BROKEN)) - starter = FALSE - if(stat & BROKEN || panel_open) - starter = FALSE - return - cut_overlays() - - rpm = 0.9* rpm + 0.1 * rpmtarget - var/datum/gas_mixture/environment = inturf.return_air() - - // It's a simplified version taking only 1/10 of the moles from the turf nearby. It should be later changed into a better version - - var/transfer_moles = environment.total_moles()/10 - var/datum/gas_mixture/removed = inturf.remove_air(transfer_moles) - gas_contained.merge(removed) - -// RPM function to include compression friction - be advised that too low/high of a compfriction value can make things screwy - - rpm = min(rpm, (COMPFRICTION*efficiency)/2) - rpm = max(0, rpm - (rpm*rpm)/(COMPFRICTION*efficiency)) - - - if(starter && !(stat & NOPOWER)) - use_power(2800) - if(rpm<1000) - rpmtarget = 1000 - else - if(rpm<1000) - rpmtarget = 0 - - - - if(rpm>50000) - add_overlay(mutable_appearance(icon, "comp-o4", FLY_LAYER)) - else if(rpm>10000) - add_overlay(mutable_appearance(icon, "comp-o3", FLY_LAYER)) - else if(rpm>2000) - add_overlay(mutable_appearance(icon, "comp-o2", FLY_LAYER)) - else if(rpm>500) - add_overlay(mutable_appearance(icon, "comp-o1", FLY_LAYER)) - //TODO: DEFERRED - -// These are crucial to working of a turbine - the stats modify the power output. TurbGenQ modifies how much raw energy can you get from -// rpms, TurbGenG modifies the shape of the curve - the lower the value the less straight the curve is. - -#define TURBGENQ 100000 -#define TURBGENG 0.5 - -/obj/machinery/power/turbine/Initialize() - . = ..() -// The outlet is pointed at the direction of the turbine component - outturf = get_step(src, dir) - locate_machinery() - if(!compressor) - obj_break() - connect_to_network() - -/obj/machinery/power/turbine/RefreshParts() - var/P = 0 - for(var/obj/item/stock_parts/capacitor/C in component_parts) - P += C.rating - productivity = P / 6 - -/obj/machinery/power/turbine/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Productivity at [productivity*100]%." - -/obj/machinery/power/turbine/locate_machinery() - if(compressor) - return - compressor = locate() in get_step(src, get_dir(outturf, src)) - if(compressor) - compressor.locate_machinery() - -/obj/machinery/power/turbine/process() - - if(!compressor) - stat = BROKEN - - if((stat & BROKEN) || panel_open) - return - if(!compressor.starter) - return - cut_overlays() - - // This is the power generation function. If anything is needed it's good to plot it in EXCEL before modifying - // the TURBGENQ and TURBGENG values - - lastgen = ((compressor.rpm / TURBGENQ)**TURBGENG) * TURBGENQ * productivity - - add_avail(lastgen) - - // Weird function but it works. Should be something else... - - var/newrpm = ((compressor.gas_contained.temperature) * compressor.gas_contained.total_moles())/4 - - newrpm = max(0, newrpm) - - if(!compressor.starter || newrpm > 1000) - compressor.rpmtarget = newrpm - - if(compressor.gas_contained.total_moles()>0) - var/oamount = min(compressor.gas_contained.total_moles(), (compressor.rpm+100)/35000*compressor.capacity) - var/datum/gas_mixture/removed = compressor.gas_contained.remove(oamount) - outturf.assume_air(removed) - -// If it works, put an overlay that it works! - - if(lastgen > 100) - add_overlay(mutable_appearance(icon, "turb-o", FLY_LAYER)) - - updateDialog() - -/obj/machinery/power/turbine/attackby(obj/item/I, mob/user, params) - if(default_deconstruction_screwdriver(user, initial(icon_state), initial(icon_state), I)) - return - - if(default_change_direction_wrench(user, I)) - compressor = null - outturf = get_step(src, dir) - locate_machinery() - if(compressor) - to_chat(user, "Compressor connected.") - stat &= ~BROKEN - else - to_chat(user, "Compressor not connected.") - obj_break() - return - - default_deconstruction_crowbar(I) - -/obj/machinery/power/turbine/ui_interact(mob/user) - - if(!Adjacent(user) || (stat & (NOPOWER|BROKEN)) && !issilicon(user)) - user.unset_machine(src) - user << browse(null, "window=turbine") - return - - var/t = "Gas Turbine Generator
    "
    -
    -	t += "Generated power : [DisplayPower(lastgen)]

    " - - t += "Turbine: [round(compressor.rpm)] RPM
    " - - t += "Starter: [ compressor.starter ? "Off On" : "Off On"]" - - t += "

    Close" - - t += "
    " - var/datum/browser/popup = new(user, "turbine", name) - popup.set_content(t) - popup.open() - - return - -/obj/machinery/power/turbine/Topic(href, href_list) - if(..()) - return - - if( href_list["close"] ) - usr << browse(null, "window=turbine") - usr.unset_machine(src) - return - - else if( href_list["str"] ) - if(compressor) - compressor.starter = !compressor.starter - - updateDialog() - - - - - -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -// COMPUTER NEEDS A SERIOUS REWRITE. - -/obj/machinery/computer/turbine_computer - name = "gas turbine control computer" - desc = "" - icon_screen = "turbinecomp" - icon_keyboard = "tech_key" - circuit = /obj/item/circuitboard/computer/turbine_computer - var/obj/machinery/power/compressor/compressor - var/id = 0 - - ui_x = 300 - ui_y = 200 - -/obj/machinery/computer/turbine_computer/Initialize() - . = ..() - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/computer/turbine_computer/LateInitialize() - locate_machinery() - -/obj/machinery/computer/turbine_computer/locate_machinery() - if(id) - for(var/obj/machinery/power/compressor/C in GLOB.machines) - if(C.comp_id == id) - compressor = C - return - else - compressor = locate(/obj/machinery/power/compressor) in range(7, src) - -/obj/machinery/computer/turbine_computer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "turbine_computer", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/computer/turbine_computer/ui_data(mob/user) - var/list/data = list() - - data["compressor"] = compressor ? TRUE : FALSE - data["compressor_broke"] = (!compressor || (compressor.stat & BROKEN)) ? TRUE : FALSE - data["turbine"] = compressor?.turbine ? TRUE : FALSE - data["turbine_broke"] = (!compressor || !compressor.turbine || (compressor.turbine.stat & BROKEN)) ? TRUE : FALSE - data["online"] = compressor?.starter - - data["power"] = DisplayPower(compressor?.turbine?.lastgen) - data["rpm"] = compressor?.rpm - data["temp"] = compressor?.gas_contained.temperature - - return data - -/obj/machinery/computer/turbine_computer/ui_act(action, params) - if(..()) - return - switch(action) - if("toggle_power") - if(compressor && compressor.turbine) - compressor.starter = !compressor.starter - . = TRUE - if("reconnect") - locate_machinery() - . = TRUE - -#undef COMPFRICTION -#undef TURBGENQ -#undef TURBGENG diff --git a/code/modules/procedural_mapping/mapGenerators/cult.dm b/code/modules/procedural_mapping/mapGenerators/cult.dm deleted file mode 100644 index 09016f883f..0000000000 --- a/code/modules/procedural_mapping/mapGenerators/cult.dm +++ /dev/null @@ -1,16 +0,0 @@ -/datum/mapGeneratorModule/bottomLayer/cultFloor - spawnableTurfs = list(/turf/open/floor/engine/cult = 100) - -/datum/mapGeneratorModule/border/cultWalls - spawnableTurfs = list(/turf/closed/wall/mineral/cult = 100) - -/datum/mapGenerator/cult //walls and floor only - modules = list(/datum/mapGeneratorModule/bottomLayer/cultFloor, \ - /datum/mapGeneratorModule/border/cultWalls, \ - /datum/mapGeneratorModule/bottomLayer/repressurize) - buildmode_name = "Pattern: Cult Room" - -/datum/mapGenerator/cult/floor //floors only - modules = list(/datum/mapGeneratorModule/bottomLayer/cultFloor, \ - /datum/mapGeneratorModule/bottomLayer/repressurize) - buildmode_name = "Block: Cult Floor" diff --git a/code/modules/procedural_mapping/mapGenerators/repair.dm b/code/modules/procedural_mapping/mapGenerators/repair.dm index 20ba10b0e1..305c736679 100644 --- a/code/modules/procedural_mapping/mapGenerators/repair.dm +++ b/code/modules/procedural_mapping/mapGenerators/repair.dm @@ -31,7 +31,6 @@ z_offset += bounds[MAP_MAXZ] - bounds[MAP_MINZ] + 1 var/list/obj/machinery/atmospherics/atmos_machines = list() - var/list/obj/structure/cable/cables = list() var/list/atom/atoms = list() repopulate_sorted_areas() @@ -43,14 +42,10 @@ atoms += B for(var/A in B) atoms += A - if(istype(A,/obj/structure/cable)) - cables += A - continue if(istype(A,/obj/machinery/atmospherics)) atmos_machines += A SSatoms.InitializeAtoms(atoms) - SSmachines.setup_template_powernets(cables) SSair.setup_template_machinery(atmos_machines) GLOB.reloading_map = FALSE diff --git a/code/modules/procedural_mapping/mapGenerators/shuttle.dm b/code/modules/procedural_mapping/mapGenerators/shuttle.dm index ba877eeabb..0d70122c69 100644 --- a/code/modules/procedural_mapping/mapGenerators/shuttle.dm +++ b/code/modules/procedural_mapping/mapGenerators/shuttle.dm @@ -1,5 +1,5 @@ /datum/mapGeneratorModule/bottomLayer/shuttleFloor - spawnableTurfs = list(/turf/open/floor/plasteel/shuttle = 100) + spawnableTurfs = list(/turf/open/floor/plasteel = 100) /datum/mapGeneratorModule/border/shuttleWalls spawnableAtoms = list() diff --git a/code/modules/procedural_mapping/mapGenerators/syndicate.dm b/code/modules/procedural_mapping/mapGenerators/syndicate.dm deleted file mode 100644 index 758df6e0a0..0000000000 --- a/code/modules/procedural_mapping/mapGenerators/syndicate.dm +++ /dev/null @@ -1,57 +0,0 @@ - -// Modules - -/turf/open/floor/plasteel/shuttle/red/syndicate - name = "floor" //Not Brig Floor - -/datum/mapGeneratorModule/bottomLayer/syndieFloor - spawnableTurfs = list(/turf/open/floor/plasteel/shuttle/red/syndicate = 100) - -/datum/mapGeneratorModule/border/syndieWalls - spawnableAtoms = list() - spawnableTurfs = list(/turf/closed/wall/r_wall = 100) - - -/datum/mapGeneratorModule/syndieFurniture - clusterCheckFlags = CLUSTER_CHECK_ALL - spawnableTurfs = list() - spawnableAtoms = list(/obj/structure/table = 20,/obj/structure/chair = 15,/obj/structure/chair/stool = 10, \ - /obj/structure/frame/computer = 15, /obj/item/storage/toolbox/syndicate = 15 ,\ - /obj/structure/closet/syndicate = 25, /obj/machinery/suit_storage_unit/syndicate = 15) - -/datum/mapGeneratorModule/splatterLayer/syndieMobs - spawnableAtoms = list(/mob/living/simple_animal/hostile/syndicate = 30, \ - /mob/living/simple_animal/hostile/syndicate/melee = 20, \ - /mob/living/simple_animal/hostile/syndicate/ranged = 20, \ - /mob/living/simple_animal/hostile/viscerator = 30) - spawnableTurfs = list() - -// Generators - -/datum/mapGenerator/syndicate/empty //walls and floor only - modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \ - /datum/mapGeneratorModule/border/syndieWalls,\ - /datum/mapGeneratorModule/bottomLayer/repressurize) - buildmode_name = "Pattern: Shuttle Room: Syndicate" - -/datum/mapGenerator/syndicate/mobsonly - modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \ - /datum/mapGeneratorModule/border/syndieWalls,\ - /datum/mapGeneratorModule/splatterLayer/syndieMobs, \ - /datum/mapGeneratorModule/bottomLayer/repressurize) - buildmode_name = "Pattern: Shuttle Room: Syndicate: Mobs" - -/datum/mapGenerator/syndicate/furniture - modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \ - /datum/mapGeneratorModule/border/syndieWalls,\ - /datum/mapGeneratorModule/syndieFurniture, \ - /datum/mapGeneratorModule/bottomLayer/repressurize) - buildmode_name = "Pattern: Shuttle Room: Syndicate: Furniture" - -/datum/mapGenerator/syndicate/full - modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \ - /datum/mapGeneratorModule/border/syndieWalls,\ - /datum/mapGeneratorModule/syndieFurniture, \ - /datum/mapGeneratorModule/splatterLayer/syndieMobs, \ - /datum/mapGeneratorModule/bottomLayer/repressurize) - buildmode_name = "Pattern: Shuttle Room: Syndicate: All" diff --git a/code/modules/projectiles/ammunition/energy/gravity.dm b/code/modules/projectiles/ammunition/energy/gravity.dm deleted file mode 100644 index 010b1e5344..0000000000 --- a/code/modules/projectiles/ammunition/energy/gravity.dm +++ /dev/null @@ -1,29 +0,0 @@ -/obj/item/ammo_casing/energy/gravity - e_cost = 0 - fire_sound = 'sound/blank.ogg' - select_name = "gravity" - delay = 50 - var/obj/item/gun/energy/gravity_gun/gun - -/obj/item/ammo_casing/energy/gravity/Initialize(mapload) - if(istype(loc,/obj/item/gun/energy/gravity_gun)) - gun = loc - . = ..() - -/obj/item/ammo_casing/energy/gravity/Destroy() - gun = null - . = ..() - -/obj/item/ammo_casing/energy/gravity/repulse - projectile_type = /obj/projectile/gravityrepulse - select_name = "repulse" - -/obj/item/ammo_casing/energy/gravity/attract - projectile_type = /obj/projectile/gravityattract - select_name = "attract" - -/obj/item/ammo_casing/energy/gravity/chaos - projectile_type = /obj/projectile/gravitychaos - select_name = "chaos" - - diff --git a/code/modules/projectiles/ammunition/energy/laser.dm b/code/modules/projectiles/ammunition/energy/laser.dm index 1567a16d3d..1d0344eed7 100644 --- a/code/modules/projectiles/ammunition/energy/laser.dm +++ b/code/modules/projectiles/ammunition/energy/laser.dm @@ -43,22 +43,6 @@ select_name = "DESTROY" fire_sound = 'sound/blank.ogg' -/obj/item/ammo_casing/energy/laser/bluetag - projectile_type = /obj/projectile/beam/lasertag/bluetag - select_name = "bluetag" - harmful = FALSE - -/obj/item/ammo_casing/energy/laser/bluetag/hitscan - projectile_type = /obj/projectile/beam/lasertag/bluetag/hitscan - -/obj/item/ammo_casing/energy/laser/redtag - projectile_type = /obj/projectile/beam/lasertag/redtag - select_name = "redtag" - harmful = FALSE - -/obj/item/ammo_casing/energy/laser/redtag/hitscan - projectile_type = /obj/projectile/beam/lasertag/redtag/hitscan - /obj/item/ammo_casing/energy/xray projectile_type = /obj/projectile/beam/xray e_cost = 50 diff --git a/code/modules/projectiles/ammunition/energy/portal.dm b/code/modules/projectiles/ammunition/energy/portal.dm deleted file mode 100644 index 30cdcb85ec..0000000000 --- a/code/modules/projectiles/ammunition/energy/portal.dm +++ /dev/null @@ -1,21 +0,0 @@ -/obj/item/ammo_casing/energy/wormhole - projectile_type = /obj/projectile/beam/wormhole - e_cost = 0 - harmful = FALSE - fire_sound = 'sound/blank.ogg' - select_name = "blue" - var/obj/item/gun/energy/wormhole_projector/gun - -/obj/item/ammo_casing/energy/wormhole/orange - projectile_type = /obj/projectile/beam/wormhole/orange - select_name = "orange" - -/obj/item/ammo_casing/energy/wormhole/Initialize(mapload, obj/item/gun/energy/wormhole_projector/wh) - . = ..() - gun = wh - -/obj/item/ammo_casing/energy/wormhole/throw_proj() - . = ..() - if(istype(BB, /obj/projectile/beam/wormhole)) - var/obj/projectile/beam/wormhole/WH = BB - WH.gun = gun diff --git a/code/modules/projectiles/ammunition/energy/special.dm b/code/modules/projectiles/ammunition/energy/special.dm index 428e48baff..67cf4daa0d 100644 --- a/code/modules/projectiles/ammunition/energy/special.dm +++ b/code/modules/projectiles/ammunition/energy/special.dm @@ -41,13 +41,6 @@ projectile_type = /obj/projectile/meteor select_name = "goddamn meteor" -/obj/item/ammo_casing/energy/net - projectile_type = /obj/projectile/energy/net - select_name = "netting" - pellets = 6 - variance = 40 - harmful = FALSE - /obj/item/ammo_casing/energy/trap projectile_type = /obj/projectile/energy/trap select_name = "snare" @@ -64,11 +57,6 @@ /obj/item/ammo_casing/energy/instakill/red projectile_type = /obj/projectile/beam/instakill/red -/obj/item/ammo_casing/energy/tesla_revolver - fire_sound = 'sound/blank.ogg' - e_cost = 200 - select_name = "stun" - projectile_type = /obj/projectile/energy/tesla/revolver /obj/item/ammo_casing/energy/shrink projectile_type = /obj/projectile/beam/shrink diff --git a/code/modules/projectiles/ammunition/special/magic.dm b/code/modules/projectiles/ammunition/special/magic.dm index ce1553ffc7..78ef0e68a2 100644 --- a/code/modules/projectiles/ammunition/special/magic.dm +++ b/code/modules/projectiles/ammunition/special/magic.dm @@ -26,10 +26,6 @@ projectile_type = /obj/projectile/magic/safety harmful = FALSE -/obj/item/ammo_casing/magic/door - projectile_type = /obj/projectile/magic/door - harmful = FALSE - /obj/item/ammo_casing/magic/fireball projectile_type = /obj/projectile/magic/aoe/fireball diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 028d48729c..f5b987d72c 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -275,10 +275,6 @@ if(!user || !firing_burst) firing_burst = FALSE return FALSE - if(!issilicon(user)) - if(iteration > 1 && !(user.is_holding(src))) //for burst firing - firing_burst = FALSE - return FALSE if(chambered && chambered.BB) if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal. if(chambered.harmful) // Is the bullet chambered harmful? @@ -443,7 +439,7 @@ to_chat(user, "I [removal_verb ? removal_verb : "remove"] [item_to_remove] from [src].") item_to_remove.forceMove(drop_location()) - if(Adjacent(user) && !issilicon(user)) + if(Adjacent(user)) user.put_in_hands(item_to_remove) if(item_to_remove == bayonet) @@ -490,7 +486,7 @@ /obj/item/gun/proc/update_gunlight() if(gun_light) if(gun_light.on) - set_light(gun_light.brightness_on) + set_light(gun_light.light_outer_range) else set_light(0) cut_overlays(flashlight_overlay, TRUE) diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 442ad72be5..76e0f156b7 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -431,8 +431,7 @@ #undef BRAINS_BLOWN_THROW_RANGE GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list( - /obj/item/gun/energy/plasmacutter, - /obj/item/melee/transforming/energy, + ))) ///Handles all the logic of sawing off guns, diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 0d8c66405f..6246cd855e 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -200,31 +200,12 @@ unique_reskin = null var/slung = FALSE -/obj/item/gun/ballistic/shotgun/doublebarrel/improvised/attackby(obj/item/A, mob/user, params) - ..() - if(istype(A, /obj/item/stack/cable_coil) && !sawn_off) - var/obj/item/stack/cable_coil/C = A - if(C.use(10)) - slot_flags = ITEM_SLOT_BACK - to_chat(user, "I tie the lengths of cable to the shotgun, making a sling.") - slung = TRUE - update_icon() - else - to_chat(user, "I need at least ten lengths of cable if you want to make a sling!") - /obj/item/gun/ballistic/shotgun/doublebarrel/improvised/update_icon() ..() if(slung) add_overlay("ishotgunsling") item_state = "ishotgunsling" -/obj/item/gun/ballistic/shotgun/doublebarrel/improvised/sawoff(mob/user) - . = ..() - if(. && slung) //sawing off the gun removes the sling - new /obj/item/stack/cable_coil(get_turf(src), 10) - slung = 0 - update_icon() - /obj/item/gun/ballistic/shotgun/doublebarrel/improvised/sawn name = "sawn-off improvised shotgun" desc = "" diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm deleted file mode 100644 index 0e6d65691b..0000000000 --- a/code/modules/projectiles/guns/energy.dm +++ /dev/null @@ -1,225 +0,0 @@ -/obj/item/gun/energy - icon_state = "energy" - name = "energy gun" - desc = "" - icon = 'icons/obj/guns/energy.dmi' - - var/obj/item/stock_parts/cell/cell //What type of power cell this uses - var/cell_type = /obj/item/stock_parts/cell - var/modifystate = 0 - var/list/ammo_type = list(/obj/item/ammo_casing/energy) - var/select = 1 //The state of the select fire switch. Determines from the ammo_type list what kind of shot is fired next. - var/can_charge = TRUE //Can it be charged in a recharger? - var/automatic_charge_overlays = TRUE //Do we handle overlays with base update_icon()? - var/charge_sections = 4 - ammo_x_offset = 2 - var/shaded_charge = FALSE //if this gun uses a stateful charge bar for more detail - var/old_ratio = 0 // stores the gun's previous ammo "ratio" to see if it needs an updated icon - var/selfcharge = 0 - var/charge_tick = 0 - var/charge_delay = 4 - var/use_cyborg_cell = FALSE //whether the gun's cell drains the cyborg user's cell to recharge - var/dead_cell = FALSE //set to true so the gun is given an empty cell - -/obj/item/gun/energy/emp_act(severity) - . = ..() - if(!(. & EMP_PROTECT_CONTENTS)) - cell.use(round(cell.charge / severity)) - chambered = null //we empty the chamber - recharge_newshot() //and try to charge a new shot - update_icon() - -/obj/item/gun/energy/get_cell() - return cell - -/obj/item/gun/energy/Initialize() - . = ..() - if(cell_type) - cell = new cell_type(src) - else - cell = new(src) - if(!dead_cell) - cell.give(cell.maxcharge) - update_ammo_types() - recharge_newshot(TRUE) - if(selfcharge) - START_PROCESSING(SSobj, src) - update_icon() - -/obj/item/gun/energy/proc/update_ammo_types() - var/obj/item/ammo_casing/energy/shot - for (var/i = 1, i <= ammo_type.len, i++) - var/shottype = ammo_type[i] - shot = new shottype(src) - ammo_type[i] = shot - shot = ammo_type[select] - fire_sound = shot.fire_sound - fire_delay = shot.delay - -/obj/item/gun/energy/Destroy() - if (cell) - QDEL_NULL(cell) - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/gun/energy/process() - if(selfcharge && cell && cell.percent() < 100) - charge_tick++ - if(charge_tick < charge_delay) - return - charge_tick = 0 - cell.give(100) - if(!chambered) //if empty chamber we try to charge a new shot - recharge_newshot(TRUE) - update_icon() - -/obj/item/gun/energy/attack_self(mob/living/user as mob) - if(ammo_type.len > 1) - select_fire(user) - update_icon() - -/obj/item/gun/energy/can_shoot() - var/obj/item/ammo_casing/energy/shot = ammo_type[select] - return !QDELETED(cell) ? (cell.charge >= shot.e_cost) : FALSE - -/obj/item/gun/energy/recharge_newshot(no_cyborg_drain) - if (!ammo_type || !cell) - return - if(use_cyborg_cell && !no_cyborg_drain) - if(iscyborg(loc)) - var/mob/living/silicon/robot/R = loc - if(R.cell) - var/obj/item/ammo_casing/energy/shot = ammo_type[select] //Necessary to find cost of shot - if(R.cell.use(shot.e_cost)) //Take power from the borg... - cell.give(shot.e_cost) //... to recharge the shot - if(!chambered) - var/obj/item/ammo_casing/energy/AC = ammo_type[select] - if(cell.charge >= AC.e_cost) //if there's enough power in the cell cell... - chambered = AC //...prepare a new shot based on the current ammo type selected - if(!chambered.BB) - chambered.newshot() - -/obj/item/gun/energy/process_chamber() - if(chambered && !chambered.BB) //if BB is null, i.e the shot has been fired... - var/obj/item/ammo_casing/energy/shot = chambered - cell.use(shot.e_cost)//... drain the cell cell - chambered = null //either way, released the prepared shot - recharge_newshot() //try to charge a new shot - -/obj/item/gun/energy/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - if(!chambered && can_shoot()) - process_chamber() // If the gun was drained and then recharged, load a new shot. - return ..() - -/obj/item/gun/energy/process_burst(mob/living/user, atom/target, message = TRUE, params = null, zone_override="", sprd = 0, randomized_gun_spread = 0, randomized_bonus_spread = 0, rand_spr = 0, iteration = 0) - if(!chambered && can_shoot()) - process_chamber() // Ditto. - return ..() - -/obj/item/gun/energy/proc/select_fire(mob/living/user) - select++ - if (select > ammo_type.len) - select = 1 - var/obj/item/ammo_casing/energy/shot = ammo_type[select] - fire_sound = shot.fire_sound - fire_delay = shot.delay - if (shot.select_name) - to_chat(user, "[src] is now set to [shot.select_name].") - chambered = null - recharge_newshot(TRUE) - update_icon(TRUE) - return - -/obj/item/gun/energy/update_icon(force_update) - if(QDELETED(src)) - return - ..() - if(!automatic_charge_overlays) - return - var/ratio = CEILING(CLAMP(cell.charge / cell.maxcharge, 0, 1) * charge_sections, 1) - if(ratio == old_ratio && !force_update) - return - old_ratio = ratio - cut_overlays() - var/obj/item/ammo_casing/energy/shot = ammo_type[select] - var/iconState = "[icon_state]_charge" - var/itemState = null - if(!initial(item_state)) - itemState = icon_state - if (modifystate) - add_overlay("[icon_state]_[shot.select_name]") - iconState += "_[shot.select_name]" - if(itemState) - itemState += "[shot.select_name]" - if(cell.charge < shot.e_cost) - add_overlay("[icon_state]_empty") - else - if(!shaded_charge) - var/mutable_appearance/charge_overlay = mutable_appearance(icon, iconState) - for(var/i = ratio, i >= 1, i--) - charge_overlay.pixel_x = ammo_x_offset * (i - 1) - charge_overlay.pixel_y = ammo_y_offset * (i - 1) - add_overlay(charge_overlay) - else - add_overlay("[icon_state]_charge[ratio]") - if(itemState) - itemState += "[ratio]" - item_state = itemState - -/obj/item/gun/energy/suicide_act(mob/living/user) - if (istype(user) && can_shoot() && can_trigger_gun(user) && user.get_bodypart(BODY_ZONE_HEAD)) - user.visible_message("[user] is putting the barrel of [src] in [user.p_their()] mouth. It looks like [user.p_theyre()] trying to commit suicide!") - sleep(25) - if(user.is_holding(src)) - user.visible_message("[user] melts [user.p_their()] face off with [src]!") - playsound(loc, fire_sound, 50, TRUE, -1) - var/obj/item/ammo_casing/energy/shot = ammo_type[select] - cell.use(shot.e_cost) - update_icon() - return(FIRELOSS) - else - user.visible_message("[user] panics and starts choking to death!") - return(OXYLOSS) - else - user.visible_message("[user] is pretending to melt [user.p_their()] face off with [src]! It looks like [user.p_theyre()] trying to commit suicide!
    ") - playsound(src, dry_fire_sound, 30, TRUE) - return (OXYLOSS) - - -/obj/item/gun/energy/vv_edit_var(var_name, var_value) - switch(var_name) - if("selfcharge") - if(var_value) - START_PROCESSING(SSobj, src) - else - STOP_PROCESSING(SSobj, src) - . = ..() - - -/obj/item/gun/energy/ignition_effect(atom/A, mob/living/user) - if(!can_shoot() || !ammo_type[select]) - shoot_with_empty_chamber() - . = "" - else - var/obj/item/ammo_casing/energy/E = ammo_type[select] - var/obj/projectile/energy/BB = E.BB - if(!BB) - . = "" - else if(BB.nodamage || !BB.damage || BB.damage_type == STAMINA) - user.visible_message("[user] tries to light [user.p_their()] [A.name] with [src], but it doesn't do anything. Dumbass.") - playsound(user, E.fire_sound, 50, TRUE) - playsound(user, pick(BB.hitsound), 50, TRUE) - cell.use(E.e_cost) - . = "" - else if(BB.damage_type != BURN) - user.visible_message("[user] tries to light [user.p_their()] [A.name] with [src], but only succeeds in utterly destroying it. Dumbass.") - playsound(user, E.fire_sound, 50, TRUE) - playsound(user, pick(BB.hitsound), 50, TRUE) - cell.use(E.e_cost) - qdel(A) - . = "" - else - playsound(user, E.fire_sound, 50, TRUE) - playsound(user, pick(BB.hitsound), 50, TRUE) - cell.use(E.e_cost) - . = "[user] casually lights their [A.name] with [src]. Damn." diff --git a/code/modules/projectiles/guns/energy/dueling.dm b/code/modules/projectiles/guns/energy/dueling.dm deleted file mode 100644 index 4a9089aedf..0000000000 --- a/code/modules/projectiles/guns/energy/dueling.dm +++ /dev/null @@ -1,347 +0,0 @@ -#define DUEL_IDLE 1 -#define DUEL_PREPARATION 2 -#define DUEL_READY 3 -#define DUEL_COUNTDOWN 4 -#define DUEL_FIRING 5 - -//paper rock scissors -#define DUEL_SETTING_A "wide" -#define DUEL_SETTING_B "cone" -#define DUEL_SETTING_C "pinpoint" - -/datum/duel - var/obj/item/gun/energy/dueling/gun_A - var/obj/item/gun/energy/dueling/gun_B - var/state = DUEL_IDLE - var/required_distance = 5 - var/list/confirmations = list() - var/list/fired = list() - var/countdown_length = 10 - var/countdown_step = 0 - -/datum/duel/proc/try_begin() - //Check if both guns are held and if so begin. - var/mob/living/A = get_duelist(gun_A) - var/mob/living/B = get_duelist(gun_B) - if(!A || !B) - message_duelists("To begin the duel, both participants need to be holding paired dueling pistols.") - return - begin() - -/datum/duel/proc/begin() - state = DUEL_PREPARATION - confirmations.Cut() - fired.Cut() - countdown_step = countdown_length - - message_duelists("Set your gun setting and move [required_distance] steps away from your opponent.") - - START_PROCESSING(SSobj,src) - -/datum/duel/proc/get_duelist(obj/gun) - var/mob/living/G = gun.loc - if(!istype(G) || !G.is_holding(gun)) - return null - return G - -/datum/duel/proc/message_duelists(message) - var/mob/living/LA = get_duelist(gun_A) - if(LA) - to_chat(LA,message) - var/mob/living/LB = get_duelist(gun_B) - if(LB) - to_chat(LB,message) - -/datum/duel/proc/other_gun(obj/item/gun/energy/dueling/G) - return G == gun_A ? gun_B : gun_A - -/datum/duel/proc/end() - message_duelists("Duel finished. Re-engaging safety.") - STOP_PROCESSING(SSobj,src) - state = DUEL_IDLE - -/datum/duel/process() - switch(state) - if(DUEL_PREPARATION) - if(check_positioning()) - confirm_positioning() - else if (!get_duelist(gun_A) && !get_duelist(gun_B)) - end() - if(DUEL_READY) - if(!check_positioning()) - back_to_prep() - else if(confirmations.len == 2) - confirm_ready() - if(DUEL_COUNTDOWN) - if(!check_positioning()) - back_to_prep() - else - countdown_step() - if(DUEL_FIRING) - if(check_fired()) - end() - - -/datum/duel/proc/back_to_prep() - message_duelists("Positions invalid. Please move to valid positions [required_distance] steps aways from each other to continue.") - state = DUEL_PREPARATION - confirmations.Cut() - countdown_step = countdown_length - -/datum/duel/proc/confirm_positioning() - message_duelists("Position confirmed. Confirm readiness by pulling the trigger once.") - state = DUEL_READY - -/datum/duel/proc/confirm_ready() - message_duelists("Readiness confirmed. Starting countdown. Commence firing at zero mark.") - state = DUEL_COUNTDOWN - -/datum/duel/proc/countdown_step() - countdown_step-- - if(countdown_step == 0) - state = DUEL_FIRING - message_duelists("Fire!") - else - message_duelists("[countdown_step]!") - -/datum/duel/proc/check_fired() - if(fired.len == 2) - return TRUE - //Let's say if gun was dropped/stowed the user is finished - if(!get_duelist(gun_A)) - return TRUE - if(!get_duelist(gun_B)) - return TRUE - return FALSE - -/datum/duel/proc/check_positioning() - var/mob/living/A = get_duelist(gun_A) - var/mob/living/B = get_duelist(gun_B) - if(!A || !B) - return FALSE - if(!isturf(A.loc) || !isturf(B.loc)) - return FALSE - if(get_dist(A,B) != required_distance) - return FALSE - for(var/turf/T in getline(get_turf(A),get_turf(B))) - if(is_blocked_turf(T,TRUE)) - return FALSE - return TRUE - -/obj/item/gun/energy/dueling - name = "dueling pistol" - desc = "" - icon_state = "dueling_pistol" - item_state = "gun" - ammo_x_offset = 2 - w_class = WEIGHT_CLASS_SMALL - ammo_type = list(/obj/item/ammo_casing/energy/duel) - automatic_charge_overlays = FALSE - var/unlocked = FALSE - var/setting = DUEL_SETTING_A - var/datum/duel/duel - var/mutable_appearance/setting_overlay - -/obj/item/gun/energy/dueling/Initialize() - . = ..() - setting_overlay = mutable_appearance(icon,setting_iconstate()) - add_overlay(setting_overlay) - -/obj/item/gun/energy/dueling/proc/setting_iconstate() - switch(setting) - if(DUEL_SETTING_A) - return "duel_red" - if(DUEL_SETTING_B) - return "duel_green" - if(DUEL_SETTING_C) - return "duel_blue" - return "duel_red" - -/obj/item/gun/energy/dueling/attack_self(mob/living/user) - . = ..() - if(duel.state == DUEL_IDLE) - duel.try_begin() - else - toggle_setting(user) - -/obj/item/gun/energy/dueling/proc/toggle_setting(mob/living/user) - switch(setting) - if(DUEL_SETTING_A) - setting = DUEL_SETTING_B - if(DUEL_SETTING_B) - setting = DUEL_SETTING_C - if(DUEL_SETTING_C) - setting = DUEL_SETTING_A - to_chat(user,"I switch [src] setting to [setting] mode.") - update_icon() - -/obj/item/gun/energy/dueling/update_icon(force_update) - . = ..() - if(setting_overlay) - cut_overlay(setting_overlay) - setting_overlay.icon_state = setting_iconstate() - add_overlay(setting_overlay) - -/obj/item/gun/energy/dueling/Destroy() - . = ..() - if(duel) - if(duel.gun_A == src) - duel.gun_A = null - if(duel.gun_B == src) - duel.gun_B = null - duel = null - -/obj/item/gun/energy/dueling/can_trigger_gun(mob/living/user) - . = ..() - switch(duel.state) - if(DUEL_FIRING) - return . && !duel.fired[src] - if(DUEL_READY) - return . - else - to_chat(user,"[src] is locked. Wait for FIRE signal before shooting.") - return FALSE - -/obj/item/gun/energy/dueling/proc/is_duelist(mob/living/L) - if(!istype(L)) - return FALSE - if(!L.is_holding(duel.other_gun(src))) - return FALSE - return TRUE - -/obj/item/gun/energy/dueling/process_fire(atom/target, mob/living/user, message, params, zone_override, bonus_spread) - if(duel.state == DUEL_READY) - duel.confirmations[src] = TRUE - to_chat(user,"I confirm your readiness.") - return - else if(!is_duelist(target)) //I kinda want to leave this out just to see someone shoot a bystander or missing. - to_chat(user,"[src] safety system prevents shooting anyone but your designated opponent.") - return - else - duel.fired[src] = TRUE - . = ..() - -/obj/item/gun/energy/dueling/before_firing(target,user) - var/obj/item/ammo_casing/energy/duel/D = chambered - D.setting = setting - -/obj/effect/temp_visual/dueling_chaff - icon = 'icons/effects/effects.dmi' - icon_state = "shield-old" - duration = 30 - var/setting - -/obj/effect/temp_visual/dueling_chaff/update_icon() - . = ..() - switch(setting) - if(DUEL_SETTING_A) - color = "red" - if(DUEL_SETTING_B) - color = "green" - if(DUEL_SETTING_C) - color = "blue" - -//Casing - -/obj/item/ammo_casing/energy/duel - e_cost = 0 - projectile_type = /obj/projectile/energy/duel - var/setting - -/obj/item/ammo_casing/energy/duel/ready_proj(atom/target, mob/living/user, quiet, zone_override) - . = ..() - var/obj/projectile/energy/duel/D = BB - D.setting = setting - D.update_icon() - -/obj/item/ammo_casing/energy/duel/fire_casing(atom/target, mob/living/user, params, distro, quiet, zone_override, spread, atom/fired_from) - . = ..() - var/obj/effect/temp_visual/dueling_chaff/C = new(get_turf(user)) - C.setting = setting - C.update_icon() - -//Projectile - -/obj/projectile/energy/duel - name = "dueling beam" - icon_state = "declone" - reflectable = FALSE - homing = TRUE - var/setting - -/obj/projectile/energy/duel/update_icon() - . = ..() - switch(setting) - if(DUEL_SETTING_A) - color = "red" - if(DUEL_SETTING_B) - color = "green" - if(DUEL_SETTING_C) - color = "blue" - -/obj/projectile/energy/duel/on_hit(atom/target, blocked) - . = ..() - var/turf/T = get_turf(target) - var/obj/effect/temp_visual/dueling_chaff/C = locate() in T - if(C) - var/counter_setting - switch(setting) - if(DUEL_SETTING_A) - counter_setting = DUEL_SETTING_B - if(DUEL_SETTING_B) - counter_setting = DUEL_SETTING_C - if(DUEL_SETTING_C) - counter_setting = DUEL_SETTING_A - if(C.setting == counter_setting) - return BULLET_ACT_BLOCK - - var/mob/living/L = target - if(!istype(target)) - return BULLET_ACT_BLOCK - - var/obj/item/bodypart/B = L.get_bodypart(BODY_ZONE_HEAD) - B.dismember() - qdel(B) - -//Storage case. -/obj/item/storage/lockbox/dueling - name = "dueling pistol case" - desc = "" - icon_state = "medalbox+l" - item_state = "syringe_kit" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - w_class = WEIGHT_CLASS_NORMAL - req_access = list(ACCESS_CAPTAIN) - icon_locked = "medalbox+l" - icon_closed = "medalbox" - icon_broken = "medalbox+b" - -/obj/item/storage/lockbox/dueling/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_SMALL - STR.max_items = 2 - STR.set_holdable(list(/obj/item/gun/energy/dueling)) - -/obj/item/storage/lockbox/dueling/update_icon() - cut_overlays() - var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED) - if(locked) - icon_state = "medalbox+l" - else - icon_state = "medalbox" - if(open) - icon_state += "open" - if(broken) - icon_state += "+b" - -/obj/item/storage/lockbox/dueling/PopulateContents() - . = ..() - var/obj/item/gun/energy/dueling/gun_A = new(src) - var/obj/item/gun/energy/dueling/gun_B = new(src) - var/datum/duel/D = new - gun_A.duel = D - gun_B.duel = D - D.gun_A = gun_A - D.gun_B = gun_B diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm deleted file mode 100644 index b3d93e7206..0000000000 --- a/code/modules/projectiles/guns/energy/energy_gun.dm +++ /dev/null @@ -1,147 +0,0 @@ -/obj/item/gun/energy/e_gun - name = "energy gun" - desc = "" - icon_state = "energy" - item_state = null //so the human update icon uses the icon_state instead. - ammo_type = list(/obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser) - modifystate = 1 - can_flashlight = TRUE - ammo_x_offset = 3 - flight_x_offset = 15 - flight_y_offset = 10 - dual_wield_spread = 60 - -/obj/item/gun/energy/e_gun/mini - name = "miniature energy gun" - desc = "" - icon_state = "mini" - item_state = "gun" - w_class = WEIGHT_CLASS_SMALL - cell_type = /obj/item/stock_parts/cell{charge = 600; maxcharge = 600} - ammo_x_offset = 2 - charge_sections = 3 - can_flashlight = FALSE // Can't attach or detach the flashlight, and override it's icon update - gunlight_state = "mini-light" - flight_x_offset = 19 - flight_y_offset = 13 - -/obj/item/gun/energy/e_gun/mini/Initialize() - gun_light = new /obj/item/flashlight/seclite(src) - return ..() - -/obj/item/gun/energy/e_gun/stun - name = "tactical energy gun" - desc = "" - icon_state = "energytac" - ammo_x_offset = 2 - ammo_type = list(/obj/item/ammo_casing/energy/electrode/spec, /obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser) - -/obj/item/gun/energy/e_gun/old - name = "prototype energy gun" - desc = "" - icon_state = "protolaser" - ammo_x_offset = 2 - ammo_type = list(/obj/item/ammo_casing/energy/laser, /obj/item/ammo_casing/energy/electrode/old) - -/obj/item/gun/energy/e_gun/mini/practice_phaser - name = "practice phaser" - desc = "" - ammo_type = list(/obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser/practice) - icon_state = "decloner" - -/obj/item/gun/energy/e_gun/hos - name = "\improper X-01 MultiPhase Energy Gun" - desc = "" - cell_type = /obj/item/stock_parts/cell{charge = 1200; maxcharge = 1200} - icon_state = "hoslaser" - force = 10 - ammo_type = list(/obj/item/ammo_casing/energy/disabler/hos, /obj/item/ammo_casing/energy/laser/hos, /obj/item/ammo_casing/energy/ion/hos) - ammo_x_offset = 4 - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - -/obj/item/gun/energy/e_gun/dragnet - name = "\improper DRAGnet" - desc = "" - icon_state = "dragnet" - item_state = "dragnet" - lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - ammo_type = list(/obj/item/ammo_casing/energy/net, /obj/item/ammo_casing/energy/trap) - can_flashlight = FALSE - ammo_x_offset = 1 - -/obj/item/gun/energy/e_gun/dragnet/snare - name = "Energy Snare Launcher" - desc = "" - ammo_type = list(/obj/item/ammo_casing/energy/trap) - -/obj/item/gun/energy/e_gun/turret - name = "hybrid turret gun" - desc = "" - icon_state = "turretlaser" - item_state = "turretlaser" - slot_flags = null - w_class = WEIGHT_CLASS_HUGE - ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser) - weapon_weight = WEAPON_HEAVY - can_flashlight = FALSE - trigger_guard = TRIGGER_GUARD_NONE - ammo_x_offset = 2 - -/obj/item/gun/energy/e_gun/nuclear - name = "advanced energy gun" - desc = "" - icon_state = "nucgun" - item_state = "nucgun" - charge_delay = 5 - pin = null - can_charge = FALSE - ammo_x_offset = 1 - ammo_type = list(/obj/item/ammo_casing/energy/laser, /obj/item/ammo_casing/energy/disabler) - selfcharge = 1 - var/reactor_overloaded - var/fail_tick = 0 - var/fail_chance = 0 - -/obj/item/gun/energy/e_gun/nuclear/process() - if(fail_tick > 0) - fail_tick-- - ..() - -/obj/item/gun/energy/e_gun/nuclear/shoot_live_shot() - failcheck() - update_icon() - ..() - -/obj/item/gun/energy/e_gun/nuclear/proc/failcheck() - if(prob(fail_chance) && isliving(loc)) - var/mob/living/M = loc - switch(fail_tick) - if(0 to 200) - fail_tick += (2*(fail_chance)) - M.rad_act(40) - to_chat(M, "My [name] feels warmer.") - if(201 to INFINITY) - SSobj.processing.Remove(src) - M.rad_act(80) - reactor_overloaded = TRUE - to_chat(M, "My [name]'s reactor overloads!") - -/obj/item/gun/energy/e_gun/nuclear/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - fail_chance = min(fail_chance + round(15/severity), 100) - -/obj/item/gun/energy/e_gun/nuclear/update_icon() - ..() - if(reactor_overloaded) - add_overlay("[icon_state]_fail_3") - else - switch(fail_tick) - if(0) - add_overlay("[icon_state]_fail_0") - if(1 to 150) - add_overlay("[icon_state]_fail_1") - if(151 to INFINITY) - add_overlay("[icon_state]_fail_2") diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm deleted file mode 100644 index 07c78850b3..0000000000 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ /dev/null @@ -1,595 +0,0 @@ -/obj/item/gun/energy/kinetic_accelerator - name = "proto-kinetic accelerator" - desc = "" - icon_state = "kineticgun" - item_state = "kineticgun" - ammo_type = list(/obj/item/ammo_casing/energy/kinetic) - cell_type = /obj/item/stock_parts/cell/emproof - item_flags = NONE - obj_flags = UNIQUE_RENAME - weapon_weight = WEAPON_LIGHT - can_flashlight = TRUE - flight_x_offset = 15 - flight_y_offset = 9 - automatic_charge_overlays = FALSE - can_bayonet = TRUE - knife_x_offset = 20 - knife_y_offset = 12 - var/overheat_time = 16 - var/holds_charge = FALSE - var/unique_frequency = FALSE // modified by KA modkits - var/overheat = FALSE - var/mob/holder - - - var/max_mod_capacity = 100 - var/list/modkits = list() - - var/recharge_timerid - -/obj/item/gun/energy/kinetic_accelerator/examine(mob/user) - . = ..() - if(max_mod_capacity) - . += "[get_remaining_mod_capacity()]% mod capacity remaining." - . += "I can use a crowbar to remove modules." - for(var/A in get_modkits()) - var/obj/item/borg/upgrade/modkit/M = A - . += "There is \a [M] installed, using [M.cost]% capacity." - -/obj/item/gun/energy/kinetic_accelerator/crowbar_act(mob/living/user, obj/item/I) - . = TRUE - if(modkits.len) - to_chat(user, "I pry the modifications out.") - I.play_tool_sound(src, 100) - for(var/obj/item/borg/upgrade/modkit/M in modkits) - M.uninstall(src) - else - to_chat(user, "There are no modifications currently installed.") - -/obj/item/gun/energy/kinetic_accelerator/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/borg/upgrade/modkit)) - var/obj/item/borg/upgrade/modkit/MK = I - MK.install(src, user) - else - ..() - -/obj/item/gun/energy/kinetic_accelerator/proc/get_remaining_mod_capacity() - var/current_capacity_used = 0 - for(var/A in get_modkits()) - var/obj/item/borg/upgrade/modkit/M = A - current_capacity_used += M.cost - return max_mod_capacity - current_capacity_used - -/obj/item/gun/energy/kinetic_accelerator/proc/get_modkits() - . = list() - for(var/A in modkits) - . += A - -/obj/item/gun/energy/kinetic_accelerator/proc/modify_projectile(obj/projectile/kinetic/K) - K.kinetic_gun = src //do something special on-hit, easy! - for(var/A in get_modkits()) - var/obj/item/borg/upgrade/modkit/M = A - M.modify_projectile(K) - -/obj/item/gun/energy/kinetic_accelerator/cyborg - holds_charge = TRUE - unique_frequency = TRUE - max_mod_capacity = 80 - -/obj/item/gun/energy/kinetic_accelerator/minebot - trigger_guard = TRIGGER_GUARD_ALLOW_ALL - overheat_time = 20 - holds_charge = TRUE - unique_frequency = TRUE - -/obj/item/gun/energy/kinetic_accelerator/Initialize() - . = ..() - if(!holds_charge) - empty() - -/obj/item/gun/energy/kinetic_accelerator/shoot_live_shot() - . = ..() - attempt_reload() - -/obj/item/gun/energy/kinetic_accelerator/equipped(mob/user) - . = ..() - holder = user - if(!can_shoot()) - attempt_reload() - -/obj/item/gun/energy/kinetic_accelerator/dropped() - . = ..() - holder = null - if(!QDELING(src) && !holds_charge) - // Put it on a delay because moving item from slot to hand - // calls dropped(). - addtimer(CALLBACK(src, PROC_REF(empty_if_not_held)), 2) - -/obj/item/gun/energy/kinetic_accelerator/proc/empty_if_not_held() - if(!ismob(loc)) - empty() - -/obj/item/gun/energy/kinetic_accelerator/proc/empty() - if(cell) - cell.use(cell.charge) - update_icon() - -/obj/item/gun/energy/kinetic_accelerator/proc/attempt_reload(recharge_time) - if(!cell) - return - if(overheat) - return - if(!recharge_time) - recharge_time = overheat_time - overheat = TRUE - - var/carried = 0 - if(!unique_frequency) - for(var/obj/item/gun/energy/kinetic_accelerator/K in loc.GetAllContents()) - if(!K.unique_frequency) - carried++ - - carried = max(carried, 1) - else - carried = 1 - - deltimer(recharge_timerid) - - var/skill_modifier = 1 - if(ishuman(holder)) - var/mob/living/carbon/human/H = holder - if(H.mind) - skill_modifier = H.mind.get_skill_speed_modifier(/datum/skill/mining) - - recharge_timerid = addtimer(CALLBACK(src, PROC_REF(reload)), recharge_time * carried * skill_modifier, TIMER_STOPPABLE) - -/obj/item/gun/energy/kinetic_accelerator/emp_act(severity) - return - -/obj/item/gun/energy/kinetic_accelerator/proc/reload() - cell.give(cell.maxcharge) - if(!suppressed) - playsound(src.loc, 'sound/blank.ogg', 60, TRUE) - else - to_chat(loc, "[src] silently charges up.") - update_icon() - overheat = FALSE - -/obj/item/gun/energy/kinetic_accelerator/update_icon() - ..() - if(!can_shoot()) - add_overlay("[icon_state]_empty") - else - cut_overlays() - -//Casing -/obj/item/ammo_casing/energy/kinetic - projectile_type = /obj/projectile/kinetic - select_name = "kinetic" - e_cost = 500 - fire_sound = 'sound/blank.ogg' // fine spelling there chap - -/obj/item/ammo_casing/energy/kinetic/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") - ..() - if(loc && istype(loc, /obj/item/gun/energy/kinetic_accelerator)) - var/obj/item/gun/energy/kinetic_accelerator/KA = loc - KA.modify_projectile(BB) - -//Projectiles -/obj/projectile/kinetic - name = "kinetic force" - icon_state = null - damage = 40 - damage_type = BRUTE - flag = "bomb" - range = 3 - log_override = TRUE - - var/pressure_decrease_active = FALSE - var/pressure_decrease = 0.25 - var/obj/item/gun/energy/kinetic_accelerator/kinetic_gun - -/obj/projectile/kinetic/Destroy() - kinetic_gun = null - return ..() - -/obj/projectile/kinetic/prehit(atom/target) - . = ..() - if(.) - if(kinetic_gun) - var/list/mods = kinetic_gun.get_modkits() - for(var/obj/item/borg/upgrade/modkit/M in mods) - M.projectile_prehit(src, target, kinetic_gun) - if(!lavaland_equipment_pressure_check(get_turf(target))) - name = "weakened [name]" - damage = damage * pressure_decrease - pressure_decrease_active = TRUE - -/obj/projectile/kinetic/on_range() - strike_thing() - ..() - -/obj/projectile/kinetic/on_hit(atom/target) - strike_thing(target) - . = ..() - -/obj/projectile/kinetic/proc/strike_thing(atom/target) - var/turf/target_turf = get_turf(target) - if(!target_turf) - target_turf = get_turf(src) - if(kinetic_gun) //hopefully whoever shot this was not very, very unfortunate. - var/list/mods = kinetic_gun.get_modkits() - for(var/obj/item/borg/upgrade/modkit/M in mods) - M.projectile_strike_predamage(src, target_turf, target, kinetic_gun) - for(var/obj/item/borg/upgrade/modkit/M in mods) - M.projectile_strike(src, target_turf, target, kinetic_gun) - if(ismineralturf(target_turf)) - var/turf/closed/mineral/M = target_turf - M.gets_drilled(firer) - var/obj/effect/temp_visual/kinetic_blast/K = new /obj/effect/temp_visual/kinetic_blast(target_turf) - K.color = color - - -//Modkits -/obj/item/borg/upgrade/modkit - name = "kinetic accelerator modification kit" - desc = "" - icon = 'icons/obj/objects.dmi' - icon_state = "modkit" - w_class = WEIGHT_CLASS_SMALL - require_module = 1 - module_type = list(/obj/item/robot_module/miner) - var/denied_type = null - var/maximum_of_type = 1 - var/cost = 30 - var/modifier = 1 //For use in any mod kit that has numerical modifiers - var/minebot_upgrade = TRUE - var/minebot_exclusive = FALSE - -/obj/item/borg/upgrade/modkit/examine(mob/user) - . = ..() - . += "Occupies [cost]% of mod capacity." - -/obj/item/borg/upgrade/modkit/attackby(obj/item/A, mob/user) - if(istype(A, /obj/item/gun/energy/kinetic_accelerator) && !issilicon(user)) - install(A, user) - else - ..() - -/obj/item/borg/upgrade/modkit/action(mob/living/silicon/robot/R) - . = ..() - if (.) - for(var/obj/item/gun/energy/kinetic_accelerator/cyborg/H in R.module.modules) - return install(H, usr) - -/obj/item/borg/upgrade/modkit/proc/install(obj/item/gun/energy/kinetic_accelerator/KA, mob/user) - . = TRUE - if(minebot_upgrade) - if(minebot_exclusive && !istype(KA.loc, /mob/living/simple_animal/hostile/mining_drone)) - to_chat(user, "The modkit you're trying to install is only rated for minebot use.") - return FALSE - else if(istype(KA.loc, /mob/living/simple_animal/hostile/mining_drone)) - to_chat(user, "The modkit you're trying to install is not rated for minebot use.") - return FALSE - if(denied_type) - var/number_of_denied = 0 - for(var/A in KA.get_modkits()) - var/obj/item/borg/upgrade/modkit/M = A - if(istype(M, denied_type)) - number_of_denied++ - if(number_of_denied >= maximum_of_type) - . = FALSE - break - if(KA.get_remaining_mod_capacity() >= cost) - if(.) - if(!user.transferItemToLoc(src, KA)) - return - to_chat(user, "I install the modkit.") - playsound(loc, 'sound/blank.ogg', 100, TRUE) - KA.modkits += src - else - to_chat(user, "The modkit you're trying to install would conflict with an already installed modkit. Use a crowbar to remove existing modkits.") - else - to_chat(user, "I don't have room([KA.get_remaining_mod_capacity()]% remaining, [cost]% needed) to install this modkit. Use a crowbar to remove existing modkits.") - . = FALSE - -/obj/item/borg/upgrade/modkit/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - for(var/obj/item/gun/energy/kinetic_accelerator/cyborg/KA in R.module.modules) - uninstall(KA) - -/obj/item/borg/upgrade/modkit/proc/uninstall(obj/item/gun/energy/kinetic_accelerator/KA) - forceMove(get_turf(KA)) - KA.modkits -= src - - - -/obj/item/borg/upgrade/modkit/proc/modify_projectile(obj/projectile/kinetic/K) - -//use this one for effects you want to trigger before any damage is done at all and before damage is decreased by pressure -/obj/item/borg/upgrade/modkit/proc/projectile_prehit(obj/projectile/kinetic/K, atom/target, obj/item/gun/energy/kinetic_accelerator/KA) -//use this one for effects you want to trigger before mods that do damage -/obj/item/borg/upgrade/modkit/proc/projectile_strike_predamage(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA) -//and this one for things that don't need to trigger before other damage-dealing mods -/obj/item/borg/upgrade/modkit/proc/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA) - -//Range -/obj/item/borg/upgrade/modkit/range - name = "range increase" - desc = "" - modifier = 1 - cost = 25 - -/obj/item/borg/upgrade/modkit/range/modify_projectile(obj/projectile/kinetic/K) - K.range += modifier - - -//Damage -/obj/item/borg/upgrade/modkit/damage - name = "damage increase" - desc = "" - modifier = 10 - -/obj/item/borg/upgrade/modkit/damage/modify_projectile(obj/projectile/kinetic/K) - K.damage += modifier - - -//Cooldown -/obj/item/borg/upgrade/modkit/cooldown - name = "cooldown decrease" - desc = "" - modifier = 3.2 - minebot_upgrade = FALSE - -/obj/item/borg/upgrade/modkit/cooldown/install(obj/item/gun/energy/kinetic_accelerator/KA, mob/user) - . = ..() - if(.) - KA.overheat_time -= modifier - -/obj/item/borg/upgrade/modkit/cooldown/uninstall(obj/item/gun/energy/kinetic_accelerator/KA) - KA.overheat_time += modifier - ..() - -/obj/item/borg/upgrade/modkit/cooldown/minebot - name = "minebot cooldown decrease" - desc = "" - icon_state = "door_electronics" - icon = 'icons/obj/module.dmi' - denied_type = /obj/item/borg/upgrade/modkit/cooldown/minebot - modifier = 10 - cost = 0 - minebot_upgrade = TRUE - minebot_exclusive = TRUE - - -//AoE blasts -/obj/item/borg/upgrade/modkit/aoe - modifier = 0 - var/turf_aoe = FALSE - var/stats_stolen = FALSE - -/obj/item/borg/upgrade/modkit/aoe/install(obj/item/gun/energy/kinetic_accelerator/KA, mob/user) - . = ..() - if(.) - for(var/obj/item/borg/upgrade/modkit/aoe/AOE in KA.modkits) //make sure only one of the aoe modules has values if somebody has multiple - if(AOE.stats_stolen || AOE == src) - continue - modifier += AOE.modifier //take its modifiers - AOE.modifier = 0 - turf_aoe += AOE.turf_aoe - AOE.turf_aoe = FALSE - AOE.stats_stolen = TRUE - -/obj/item/borg/upgrade/modkit/aoe/uninstall(obj/item/gun/energy/kinetic_accelerator/KA) - ..() - modifier = initial(modifier) //get our modifiers back - turf_aoe = initial(turf_aoe) - stats_stolen = FALSE - -/obj/item/borg/upgrade/modkit/aoe/modify_projectile(obj/projectile/kinetic/K) - K.name = "kinetic explosion" - -/obj/item/borg/upgrade/modkit/aoe/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA) - if(stats_stolen) - return - new /obj/effect/temp_visual/explosion/fast(target_turf) - if(turf_aoe) - for(var/T in RANGE_TURFS(1, target_turf) - target_turf) - if(ismineralturf(T)) - var/turf/closed/mineral/M = T - M.gets_drilled(K.firer) - if(modifier) - for(var/mob/living/L in range(1, target_turf) - K.firer - target) - var/armor = L.run_armor_check(K.def_zone, K.flag, "", "", K.armor_penetration) - L.apply_damage(K.damage*modifier, K.damage_type, K.def_zone, armor) - to_chat(L, "You're struck by a [K.name]!") - -/obj/item/borg/upgrade/modkit/aoe/turfs - name = "mining explosion" - desc = "" - denied_type = /obj/item/borg/upgrade/modkit/aoe/turfs - turf_aoe = TRUE - -/obj/item/borg/upgrade/modkit/aoe/turfs/andmobs - name = "offensive mining explosion" - desc = "" - maximum_of_type = 3 - modifier = 0.25 - -/obj/item/borg/upgrade/modkit/aoe/mobs - name = "offensive explosion" - desc = "" - modifier = 0.2 - -//Minebot passthrough -/obj/item/borg/upgrade/modkit/minebot_passthrough - name = "minebot passthrough" - desc = "" - cost = 0 - -//Tendril-unique modules -/obj/item/borg/upgrade/modkit/cooldown/repeater - name = "rapid repeater" - desc = "" - denied_type = /obj/item/borg/upgrade/modkit/cooldown/repeater - modifier = -14 //Makes the cooldown 3 seconds(with no cooldown mods) if you miss. Don't miss. - cost = 50 - -/obj/item/borg/upgrade/modkit/cooldown/repeater/projectile_strike_predamage(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA) - var/valid_repeat = FALSE - if(isliving(target)) - var/mob/living/L = target - if(L.stat != DEAD) - valid_repeat = TRUE - if(ismineralturf(target_turf)) - valid_repeat = TRUE - if(valid_repeat) - KA.overheat = FALSE - KA.attempt_reload(KA.overheat_time * 0.25) //If you hit, the cooldown drops to 0.75 seconds. - -/obj/item/borg/upgrade/modkit/lifesteal - name = "lifesteal crystal" - desc = "" - icon_state = "modkit_crystal" - modifier = 2.5 //Not a very effective method of healing. - cost = 20 - var/static/list/damage_heal_order = list(BRUTE, BURN, OXY) - -/obj/item/borg/upgrade/modkit/lifesteal/projectile_prehit(obj/projectile/kinetic/K, atom/target, obj/item/gun/energy/kinetic_accelerator/KA) - if(isliving(target) && isliving(K.firer)) - var/mob/living/L = target - if(L.stat == DEAD) - return - L = K.firer - L.heal_ordered_damage(modifier, damage_heal_order) - -/obj/item/borg/upgrade/modkit/resonator_blasts - name = "resonator blast" - desc = "" - denied_type = /obj/item/borg/upgrade/modkit/resonator_blasts - cost = 30 - modifier = 0.25 //A bonus 15 damage if you burst the field on a target, 60 if you lure them into it. - -/obj/item/borg/upgrade/modkit/resonator_blasts/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA) - if(target_turf && !ismineralturf(target_turf)) //Don't make fields on mineral turfs. - var/obj/effect/temp_visual/resonance/R = locate(/obj/effect/temp_visual/resonance) in target_turf - if(R) - R.damage_multiplier = modifier - R.burst() - return - new /obj/effect/temp_visual/resonance(target_turf, K.firer, null, 30) - -/obj/item/borg/upgrade/modkit/bounty - name = "death syphon" - desc = "" - denied_type = /obj/item/borg/upgrade/modkit/bounty - modifier = 1.25 - cost = 30 - var/maximum_bounty = 25 - var/list/bounties_reaped = list() - -/obj/item/borg/upgrade/modkit/bounty/projectile_prehit(obj/projectile/kinetic/K, atom/target, obj/item/gun/energy/kinetic_accelerator/KA) - if(isliving(target)) - var/mob/living/L = target - var/list/existing_marks = L.has_status_effect_list(STATUS_EFFECT_SYPHONMARK) - for(var/i in existing_marks) - var/datum/status_effect/syphon_mark/SM = i - if(SM.reward_target == src) //we want to allow multiple people with bounty modkits to use them, but we need to replace our own marks so we don't multi-reward - SM.reward_target = null - qdel(SM) - L.apply_status_effect(STATUS_EFFECT_SYPHONMARK, src) - -/obj/item/borg/upgrade/modkit/bounty/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA) - if(isliving(target)) - var/mob/living/L = target - if(bounties_reaped[L.type]) - var/kill_modifier = 1 - if(K.pressure_decrease_active) - kill_modifier *= K.pressure_decrease - var/armor = L.run_armor_check(K.def_zone, K.flag, "", "", K.armor_penetration) - L.apply_damage(bounties_reaped[L.type]*kill_modifier, K.damage_type, K.def_zone, armor) - -/obj/item/borg/upgrade/modkit/bounty/proc/get_kill(mob/living/L) - var/bonus_mod = 1 - if(ismegafauna(L)) //megafauna reward - bonus_mod = 4 - if(!bounties_reaped[L.type]) - bounties_reaped[L.type] = min(modifier * bonus_mod, maximum_bounty) - else - bounties_reaped[L.type] = min(bounties_reaped[L.type] + (modifier * bonus_mod), maximum_bounty) - -//Indoors -/obj/item/borg/upgrade/modkit/indoors - name = "decrease pressure penalty" - desc = "" - modifier = 2 - denied_type = /obj/item/borg/upgrade/modkit/indoors - maximum_of_type = 2 - cost = 35 - -/obj/item/borg/upgrade/modkit/indoors/modify_projectile(obj/projectile/kinetic/K) - K.pressure_decrease *= modifier - - -//Trigger Guard -/obj/item/borg/upgrade/modkit/trigger_guard - name = "modified trigger guard" - desc = "" - cost = 20 - denied_type = /obj/item/borg/upgrade/modkit/trigger_guard - -/obj/item/borg/upgrade/modkit/trigger_guard/install(obj/item/gun/energy/kinetic_accelerator/KA, mob/user) - . = ..() - if(.) - KA.trigger_guard = TRIGGER_GUARD_ALLOW_ALL - -/obj/item/borg/upgrade/modkit/trigger_guard/uninstall(obj/item/gun/energy/kinetic_accelerator/KA) - KA.trigger_guard = TRIGGER_GUARD_NORMAL - ..() - - -//Cosmetic - -/obj/item/borg/upgrade/modkit/chassis_mod - name = "super chassis" - desc = "" - cost = 0 - denied_type = /obj/item/borg/upgrade/modkit/chassis_mod - var/chassis_icon = "kineticgun_u" - var/chassis_name = "super-kinetic accelerator" - -/obj/item/borg/upgrade/modkit/chassis_mod/install(obj/item/gun/energy/kinetic_accelerator/KA, mob/user) - . = ..() - if(.) - KA.icon_state = chassis_icon - KA.name = chassis_name - -/obj/item/borg/upgrade/modkit/chassis_mod/uninstall(obj/item/gun/energy/kinetic_accelerator/KA) - KA.icon_state = initial(KA.icon_state) - KA.name = initial(KA.name) - ..() - -/obj/item/borg/upgrade/modkit/chassis_mod/orange - name = "hyper chassis" - desc = "" - chassis_icon = "kineticgun_h" - chassis_name = "hyper-kinetic accelerator" - -/obj/item/borg/upgrade/modkit/tracer - name = "white tracer bolts" - desc = "" - cost = 0 - denied_type = /obj/item/borg/upgrade/modkit/tracer - var/bolt_color = "#FFFFFF" - -/obj/item/borg/upgrade/modkit/tracer/modify_projectile(obj/projectile/kinetic/K) - K.icon_state = "ka_tracer" - K.color = bolt_color - -/obj/item/borg/upgrade/modkit/tracer/adjustable - name = "adjustable tracer bolts" - desc = "" - -/obj/item/borg/upgrade/modkit/tracer/adjustable/attack_self(mob/user) - bolt_color = input(user,"","Choose Color",bolt_color) as color|null diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm deleted file mode 100644 index ac9cce0180..0000000000 --- a/code/modules/projectiles/guns/energy/laser.dm +++ /dev/null @@ -1,141 +0,0 @@ -/obj/item/gun/energy/laser - name = "laser gun" - desc = "" - icon_state = "laser" - item_state = "laser" - w_class = WEIGHT_CLASS_NORMAL - custom_materials = list(/datum/material/iron=2000) - ammo_type = list(/obj/item/ammo_casing/energy/lasergun) - ammo_x_offset = 1 - shaded_charge = 1 - -/obj/item/gun/energy/laser/practice - name = "practice laser gun" - desc = "" - ammo_type = list(/obj/item/ammo_casing/energy/laser/practice) - clumsy_check = 0 - item_flags = NONE - -/obj/item/gun/energy/laser/retro - name ="retro laser gun" - icon_state = "retro" - desc = "" - ammo_x_offset = 3 - -/obj/item/gun/energy/laser/retro/old - name ="laser gun" - icon_state = "retro" - desc = "" - ammo_type = list(/obj/item/ammo_casing/energy/lasergun/old) - ammo_x_offset = 3 - -/obj/item/gun/energy/laser/captain - name = "antique laser gun" - icon_state = "caplaser" - item_state = "caplaser" - desc = "" - force = 10 - ammo_x_offset = 3 - selfcharge = 1 - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - -/obj/item/gun/energy/laser/captain/scattershot - name = "scatter shot laser rifle" - icon_state = "lasercannon" - item_state = "laser" - desc = "" - ammo_type = list(/obj/item/ammo_casing/energy/laser/scatter, /obj/item/ammo_casing/energy/laser) - shaded_charge = FALSE - -/obj/item/gun/energy/laser/cyborg - can_charge = FALSE - desc = "" - use_cyborg_cell = TRUE - -/obj/item/gun/energy/laser/cyborg/emp_act() - return - -/obj/item/gun/energy/laser/scatter - name = "scatter laser gun" - desc = "" - ammo_type = list(/obj/item/ammo_casing/energy/laser/scatter, /obj/item/ammo_casing/energy/laser) - -/obj/item/gun/energy/laser/scatter/shotty - name = "energy shotgun" - icon = 'icons/obj/guns/projectile.dmi' - icon_state = "cshotgun" - item_state = "shotgun" - desc = "" - shaded_charge = 0 - pin = /obj/item/firing_pin/implant/mindshield - ammo_type = list(/obj/item/ammo_casing/energy/laser/scatter/disabler, /obj/item/ammo_casing/energy/electrode) - -///Laser Cannon - -/obj/item/gun/energy/lasercannon - name = "accelerator laser cannon" - desc = "" - icon_state = "lasercannon" - item_state = "laser" - w_class = WEIGHT_CLASS_BULKY - force = 10 - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BACK - ammo_type = list(/obj/item/ammo_casing/energy/laser/accelerator) - pin = null - ammo_x_offset = 3 - -/obj/item/ammo_casing/energy/laser/accelerator - projectile_type = /obj/projectile/beam/laser/accelerator - select_name = "accelerator" - fire_sound = 'sound/blank.ogg' - -/obj/projectile/beam/laser/accelerator - name = "accelerator laser" - icon_state = "scatterlaser" - range = 255 - damage = 6 - -/obj/projectile/beam/laser/accelerator/Range() - ..() - damage += 7 - transform *= 1 + ((damage/7) * 0.2)//20% larger per tile - -/obj/item/gun/energy/xray - name = "\improper X-ray laser gun" - desc = "" - icon_state = "xray" - item_state = null - ammo_type = list(/obj/item/ammo_casing/energy/xray) - pin = null - ammo_x_offset = 3 - -////////Laser Tag//////////////////// - -/obj/item/gun/energy/laser/bluetag - name = "laser tag gun" - icon_state = "bluetag" - desc = "" - ammo_type = list(/obj/item/ammo_casing/energy/laser/bluetag) - item_flags = NONE - clumsy_check = FALSE - pin = /obj/item/firing_pin/tag/blue - ammo_x_offset = 2 - selfcharge = TRUE - -/obj/item/gun/energy/laser/bluetag/hitscan - ammo_type = list(/obj/item/ammo_casing/energy/laser/bluetag/hitscan) - -/obj/item/gun/energy/laser/redtag - name = "laser tag gun" - icon_state = "redtag" - desc = "" - ammo_type = list(/obj/item/ammo_casing/energy/laser/redtag) - item_flags = NONE - clumsy_check = FALSE - pin = /obj/item/firing_pin/tag/red - ammo_x_offset = 2 - selfcharge = TRUE - -/obj/item/gun/energy/laser/redtag/hitscan - ammo_type = list(/obj/item/ammo_casing/energy/laser/redtag/hitscan) diff --git a/code/modules/projectiles/guns/energy/mounted.dm b/code/modules/projectiles/guns/energy/mounted.dm deleted file mode 100644 index 9ab0ae66fe..0000000000 --- a/code/modules/projectiles/guns/energy/mounted.dm +++ /dev/null @@ -1,26 +0,0 @@ -/obj/item/gun/energy/e_gun/advtaser/mounted - name = "mounted taser" - desc = "" - icon = 'icons/obj/items_cyborg.dmi' - icon_state = "taser" - item_state = "armcannonstun4" - force = 5 - selfcharge = 1 - can_flashlight = FALSE - trigger_guard = TRIGGER_GUARD_ALLOW_ALL // Has no trigger at all, uses neural signals instead - -/obj/item/gun/energy/e_gun/advtaser/mounted/dropped()//if somebody manages to drop this somehow... - ..() - -/obj/item/gun/energy/laser/mounted - name = "mounted laser" - desc = "" - icon = 'icons/obj/items_cyborg.dmi' - icon_state = "laser" - item_state = "armcannonlase" - force = 5 - selfcharge = 1 - trigger_guard = TRIGGER_GUARD_ALLOW_ALL - -/obj/item/gun/energy/laser/mounted/dropped() - ..() diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm deleted file mode 100644 index 4092d64560..0000000000 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ /dev/null @@ -1,78 +0,0 @@ -/obj/item/gun/energy/pulse - name = "pulse rifle" - desc = "" - icon_state = "pulse" - item_state = null - w_class = WEIGHT_CLASS_BULKY - force = 10 - modifystate = TRUE - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BACK - ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse, /obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser) - cell_type = "/obj/item/stock_parts/cell/pulse" - -/obj/item/gun/energy/pulse/emp_act(severity) - return - -/obj/item/gun/energy/pulse/prize - pin = /obj/item/firing_pin - -/obj/item/gun/energy/pulse/prize/Initialize() - . = ..() - GLOB.poi_list += src - var/turf/T = get_turf(src) - - message_admins("A pulse rifle prize has been created at [ADMIN_VERBOSEJMP(T)]") - log_game("A pulse rifle prize has been created at [AREACOORD(T)]") - - notify_ghosts("Someone won a pulse rifle as a prize!", source = src, action = NOTIFY_ORBIT, header = "Pulse rifle prize") - -/obj/item/gun/energy/pulse/prize/Destroy() - GLOB.poi_list -= src - . = ..() - -/obj/item/gun/energy/pulse/loyalpin - pin = /obj/item/firing_pin/implant/mindshield - -/obj/item/gun/energy/pulse/carbine - name = "pulse carbine" - desc = "" - w_class = WEIGHT_CLASS_NORMAL - slot_flags = ITEM_SLOT_BELT - icon_state = "pulse_carbine" - item_state = null - cell_type = "/obj/item/stock_parts/cell/pulse/carbine" - can_flashlight = TRUE - flight_x_offset = 18 - flight_y_offset = 12 - -/obj/item/gun/energy/pulse/carbine/loyalpin - pin = /obj/item/firing_pin/implant/mindshield - -/obj/item/gun/energy/pulse/pistol - name = "pulse pistol" - desc = "" - w_class = WEIGHT_CLASS_SMALL - slot_flags = ITEM_SLOT_BELT - icon_state = "pulse_pistol" - item_state = "gun" - cell_type = "/obj/item/stock_parts/cell/pulse/pistol" - -/obj/item/gun/energy/pulse/pistol/loyalpin - pin = /obj/item/firing_pin/implant/mindshield - -/obj/item/gun/energy/pulse/destroyer - name = "pulse destroyer" - desc = "" - cell_type = "/obj/item/stock_parts/cell/infinite" - ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse) - -/obj/item/gun/energy/pulse/destroyer/attack_self(mob/living/user) - to_chat(user, "[src.name] has three settings, and they are all DESTROY.") - -/obj/item/gun/energy/pulse/pistol/m1911 - name = "\improper M1911-P" - desc = "" - icon_state = "m1911" - item_state = "gun" - cell_type = "/obj/item/stock_parts/cell/infinite" diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm deleted file mode 100644 index 9fff3b1334..0000000000 --- a/code/modules/projectiles/guns/energy/special.dm +++ /dev/null @@ -1,349 +0,0 @@ -/obj/item/gun/energy/ionrifle - name = "ion rifle" - desc = "" - icon_state = "ionrifle" - item_state = null //so the human update icon uses the icon_state instead. - can_flashlight = TRUE - w_class = WEIGHT_CLASS_HUGE - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BACK - ammo_type = list(/obj/item/ammo_casing/energy/ion) - ammo_x_offset = 3 - flight_x_offset = 17 - flight_y_offset = 9 - -/obj/item/gun/energy/ionrifle/emp_act(severity) - return - -/obj/item/gun/energy/ionrifle/carbine - name = "ion carbine" - desc = "" - icon_state = "ioncarbine" - w_class = WEIGHT_CLASS_NORMAL - slot_flags = ITEM_SLOT_BELT - pin = null - ammo_x_offset = 2 - flight_x_offset = 18 - flight_y_offset = 11 - -/obj/item/gun/energy/decloner - name = "biological demolecularisor" - desc = "" - icon_state = "decloner" - ammo_type = list(/obj/item/ammo_casing/energy/declone) - pin = null - ammo_x_offset = 1 - -/obj/item/gun/energy/decloner/update_icon() - ..() - var/obj/item/ammo_casing/energy/shot = ammo_type[select] - if(!QDELETED(cell) && (cell.charge > shot.e_cost)) - add_overlay("decloner_spin") - -/obj/item/gun/energy/decloner/unrestricted - pin = /obj/item/firing_pin - ammo_type = list(/obj/item/ammo_casing/energy/declone/weak) - -/obj/item/gun/energy/floragun - name = "floral somatoray" - desc = "" - icon_state = "flora" - item_state = "gun" - ammo_type = list(/obj/item/ammo_casing/energy/flora/yield, /obj/item/ammo_casing/energy/flora/mut) - modifystate = 1 - ammo_x_offset = 1 - selfcharge = 1 - -/obj/item/gun/energy/meteorgun - name = "meteor gun" - desc = "" - icon_state = "meteor_gun" - item_state = "c20r" - w_class = WEIGHT_CLASS_BULKY - ammo_type = list(/obj/item/ammo_casing/energy/meteor) - cell_type = "/obj/item/stock_parts/cell/potato" - clumsy_check = 0 //Admin spawn only, might as well let clowns use it. - selfcharge = 1 - -/obj/item/gun/energy/meteorgun/pen - name = "meteor pen" - desc = "" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "pen" - item_state = "pen" - lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' - righthand_file = 'icons/mob/inhands/items_righthand.dmi' - w_class = WEIGHT_CLASS_TINY - -/obj/item/gun/energy/mindflayer - name = "\improper Mind Flayer" - desc = "" - icon_state = "xray" - item_state = null - ammo_type = list(/obj/item/ammo_casing/energy/mindflayer) - ammo_x_offset = 2 - -/obj/item/gun/energy/kinetic_accelerator/crossbow - name = "mini energy crossbow" - desc = "" - icon_state = "crossbow" - item_state = "crossbow" - w_class = WEIGHT_CLASS_SMALL - custom_materials = list(/datum/material/iron=2000) - suppressed = TRUE - ammo_type = list(/obj/item/ammo_casing/energy/bolt) - weapon_weight = WEAPON_LIGHT - obj_flags = 0 - overheat_time = 20 - holds_charge = TRUE - unique_frequency = TRUE - can_flashlight = FALSE - max_mod_capacity = 0 - -/obj/item/gun/energy/kinetic_accelerator/crossbow/halloween - name = "candy corn crossbow" - desc = "" - icon_state = "crossbow_halloween" - item_state = "crossbow" - ammo_type = list(/obj/item/ammo_casing/energy/bolt/halloween) - -/obj/item/gun/energy/kinetic_accelerator/crossbow/large - name = "energy crossbow" - desc = "" - icon_state = "crossbowlarge" - w_class = WEIGHT_CLASS_NORMAL - custom_materials = list(/datum/material/iron=4000) - suppressed = null - ammo_type = list(/obj/item/ammo_casing/energy/bolt/large) - pin = null - - -/obj/item/gun/energy/plasmacutter - name = "plasma cutter" - desc = "" - icon_state = "plasmacutter" - item_state = "plasmacutter" - ammo_type = list(/obj/item/ammo_casing/energy/plasma) - flags_1 = CONDUCT_1 - attack_verb = list("attacked", "slashed", "cut", "sliced") - force = 12 - sharpness = IS_SHARP - can_charge = FALSE - - heat = 3800 - usesound = list('sound/blank.ogg') - tool_behaviour = TOOL_WELDER - toolspeed = 0.7 //plasmacutters can be used as welders, and are faster than standard welders - var/progress_flash_divisor = 10 //copypasta is best pasta - var/light_intensity = 1 - var/charge_weld = 25 //amount of charge used up to start action (multiplied by amount) and per progress_flash_divisor ticks of welding - -/obj/item/gun/energy/plasmacutter/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 25, 105, 0, 'sound/blank.ogg') - -/obj/item/gun/energy/plasmacutter/examine(mob/user) - . = ..() - if(cell) - . += "[src] is [round(cell.percent())]% charged." - -/obj/item/gun/energy/plasmacutter/attackby(obj/item/I, mob/user) - var/charge_multiplier = 0 //2 = Refined stack, 1 = Ore - if(istype(I, /obj/item/stack/sheet/mineral/plasma)) - charge_multiplier = 2 - if(istype(I, /obj/item/stack/ore/plasma)) - charge_multiplier = 1 - if(charge_multiplier) - if(cell.charge == cell.maxcharge) - to_chat(user, "I try to insert [I] into [src], but it's fully charged.") //my cell is round and full - return - I.use(1) - cell.give(500*charge_multiplier) - to_chat(user, "I insert [I] in [src], recharging it.") - else - ..() - -// Tool procs, in case plasma cutter is used as welder -// Can we start welding? -/obj/item/gun/energy/plasmacutter/tool_start_check(mob/living/user, amount) - . = tool_use_check(user, amount) - if(. && user) - user.flash_act(light_intensity) - -// Can we weld? Plasma cutter does not use charge continuously. -// Amount cannot be defaulted to 1: most of the code specifies 0 in the call. -/obj/item/gun/energy/plasmacutter/tool_use_check(mob/living/user, amount) - if(QDELETED(cell)) - to_chat(user, "[src] does not have a cell, and cannot be used!") - return FALSE - // Amount cannot be used if drain is made continuous, e.g. amount = 5, charge_weld = 25 - // Then it'll drain 125 at first and 25 periodically, but fail if charge dips below 125 even though it still can finish action - // Alternately it'll need to drain amount*charge_weld every period, which is either obscene or makes it free for other uses - if(amount ? cell.charge < charge_weld * amount : cell.charge < charge_weld) - to_chat(user, "I need more charge to complete this task!") - return FALSE - - return TRUE - -/obj/item/gun/energy/plasmacutter/use(amount) - return (!QDELETED(cell) && cell.use(amount ? amount * charge_weld : charge_weld)) - -// This only gets called by use_tool(delay > 0) -// It's also supposed to not get overridden in the first place. -/obj/item/gun/energy/plasmacutter/tool_check_callback(mob/living/user, amount, datum/callback/extra_checks) - . = ..() //return tool_use_check(user, amount) && (!extra_checks || extra_checks.Invoke()) - if(. && user) - if (progress_flash_divisor == 0) - user.flash_act(min(light_intensity,1)) - progress_flash_divisor = initial(progress_flash_divisor) - else - progress_flash_divisor-- - -/obj/item/gun/energy/plasmacutter/use_tool(atom/target, mob/living/user, delay, amount=1, volume=0, datum/callback/extra_checks) - if(amount) - . = ..() - else - . = ..(amount=1) - - -/obj/item/gun/energy/plasmacutter/update_icon() - return - -/obj/item/gun/energy/plasmacutter/adv - name = "advanced plasma cutter" - icon_state = "adv_plasmacutter" - item_state = "adv_plasmacutter" - force = 15 - ammo_type = list(/obj/item/ammo_casing/energy/plasma/adv) - -/obj/item/gun/energy/wormhole_projector - name = "bluespace wormhole projector" - desc = "" - ammo_type = list(/obj/item/ammo_casing/energy/wormhole, /obj/item/ammo_casing/energy/wormhole/orange) - item_state = null - icon_state = "wormhole_projector" - var/obj/effect/portal/p_blue - var/obj/effect/portal/p_orange - var/atmos_link = FALSE - -/obj/item/gun/energy/wormhole_projector/update_icon() - icon_state = "[initial(icon_state)][select]" - item_state = icon_state - -/obj/item/gun/energy/wormhole_projector/update_ammo_types() - . = ..() - for(var/i in 1 to ammo_type.len) - var/obj/item/ammo_casing/energy/wormhole/W = ammo_type[i] - if(istype(W)) - W.gun = src - var/obj/projectile/beam/wormhole/WH = W.BB - if(istype(WH)) - WH.gun = src - -/obj/item/gun/energy/wormhole_projector/process_chamber() - ..() - select_fire() - -/obj/item/gun/energy/wormhole_projector/proc/on_portal_destroy(obj/effect/portal/P) - if(P == p_blue) - p_blue = null - else if(P == p_orange) - p_orange = null - -/obj/item/gun/energy/wormhole_projector/proc/has_blue_portal() - if(istype(p_blue) && !QDELETED(p_blue)) - return TRUE - return FALSE - -/obj/item/gun/energy/wormhole_projector/proc/has_orange_portal() - if(istype(p_orange) && !QDELETED(p_orange)) - return TRUE - return FALSE - -/obj/item/gun/energy/wormhole_projector/proc/crosslink() - if(!has_blue_portal() && !has_orange_portal()) - return - if(!has_blue_portal() && has_orange_portal()) - p_orange.link_portal(null) - return - if(!has_orange_portal() && has_blue_portal()) - p_blue.link_portal(null) - return - p_orange.link_portal(p_blue) - p_blue.link_portal(p_orange) - -/obj/item/gun/energy/wormhole_projector/proc/create_portal(obj/projectile/beam/wormhole/W, turf/target) - var/obj/effect/portal/P = new /obj/effect/portal(target, src, 300, null, FALSE, null, atmos_link) - if(istype(W, /obj/projectile/beam/wormhole/orange)) - qdel(p_orange) - p_orange = P - P.icon_state = "portal1" - else - qdel(p_blue) - p_blue = P - crosslink() - -/* 3d printer 'pseudo guns' for borgs */ - -/obj/item/gun/energy/printer - name = "cyborg lmg" - desc = "" - icon_state = "l6_cyborg" - icon = 'icons/obj/guns/projectile.dmi' - cell_type = "/obj/item/stock_parts/cell/secborg" - ammo_type = list(/obj/item/ammo_casing/energy/c3dbullet) - can_charge = FALSE - use_cyborg_cell = TRUE - -/obj/item/gun/energy/printer/update_icon() - return - -/obj/item/gun/energy/printer/emp_act() - return - -/obj/item/gun/energy/temperature - name = "temperature gun" - icon_state = "freezegun" - desc = "" - ammo_type = list(/obj/item/ammo_casing/energy/temp, /obj/item/ammo_casing/energy/temp/hot) - cell_type = "/obj/item/stock_parts/cell/high" - pin = null - -/obj/item/gun/energy/temperature/security - name = "security temperature gun" - desc = "" - pin = /obj/item/firing_pin - -/obj/item/gun/energy/laser/instakill - name = "instakill rifle" - icon_state = "instagib" - item_state = "instagib" - desc = "" - ammo_type = list(/obj/item/ammo_casing/energy/instakill) - force = 60 - charge_sections = 5 - ammo_x_offset = 2 - shaded_charge = FALSE - -/obj/item/gun/energy/laser/instakill/red - desc = "" - icon_state = "instagibred" - item_state = "instagibred" - ammo_type = list(/obj/item/ammo_casing/energy/instakill/red) - -/obj/item/gun/energy/laser/instakill/blue - desc = "" - icon_state = "instagibblue" - item_state = "instagibblue" - ammo_type = list(/obj/item/ammo_casing/energy/instakill/blue) - -/obj/item/gun/energy/laser/instakill/emp_act() //implying you could stop the instagib - return - -/obj/item/gun/energy/gravity_gun - name = "one-point bluespace-gravitational manipulator" - desc = "" - ammo_type = list(/obj/item/ammo_casing/energy/gravity/repulse, /obj/item/ammo_casing/energy/gravity/attract, /obj/item/ammo_casing/energy/gravity/chaos) - item_state = "gravity_gun" - icon_state = "gravity_gun" - var/power = 4 diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm deleted file mode 100644 index de79fc28c7..0000000000 --- a/code/modules/projectiles/guns/energy/stun.dm +++ /dev/null @@ -1,48 +0,0 @@ -/obj/item/gun/energy/taser - name = "taser gun" - desc = "" - icon_state = "taser" - item_state = null //so the human update icon uses the icon_state instead. - ammo_type = list(/obj/item/ammo_casing/energy/electrode) - ammo_x_offset = 3 - -/obj/item/gun/energy/tesla_revolver - name = "tesla gun" - desc = "" - icon_state = "tesla" - item_state = "tesla" - ammo_type = list(/obj/item/ammo_casing/energy/tesla_revolver) - can_flashlight = FALSE - pin = null - shaded_charge = 1 - -/obj/item/gun/energy/e_gun/advtaser - name = "hybrid taser" - desc = "" - icon_state = "advtaser" - ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/disabler) - ammo_x_offset = 2 - -/obj/item/gun/energy/e_gun/advtaser/cyborg - name = "cyborg taser" - desc = "" - can_flashlight = FALSE - can_charge = FALSE - use_cyborg_cell = TRUE - -/obj/item/gun/energy/disabler - name = "disabler" - desc = "" - icon_state = "disabler" - item_state = null - ammo_type = list(/obj/item/ammo_casing/energy/disabler) - ammo_x_offset = 2 - can_flashlight = TRUE - flight_x_offset = 15 - flight_y_offset = 10 - -/obj/item/gun/energy/disabler/cyborg - name = "cyborg disabler" - desc = "" - can_charge = FALSE - use_cyborg_cell = TRUE diff --git a/code/modules/projectiles/guns/magic/staff.dm b/code/modules/projectiles/guns/magic/staff.dm index 74b65daf72..631f5765b5 100644 --- a/code/modules/projectiles/guns/magic/staff.dm +++ b/code/modules/projectiles/guns/magic/staff.dm @@ -42,7 +42,7 @@ recharge_rate = 2 no_den_usage = 1 var/allowed_projectile_types = list(/obj/projectile/magic/change, /obj/projectile/magic/animate, /obj/projectile/magic/resurrection, - /obj/projectile/magic/death, /obj/projectile/magic/teleport, /obj/projectile/magic/door, /obj/projectile/magic/aoe/fireball, + /obj/projectile/magic/death, /obj/projectile/magic/teleport, /obj/projectile/magic/aoe/fireball, /obj/projectile/magic/spellblade, /obj/projectile/magic/arcane_barrage, /obj/projectile/magic/locker, /obj/projectile/magic/flying, /obj/projectile/magic/bounty, /obj/projectile/magic/antimagic, /obj/projectile/magic/fetch, /obj/projectile/magic/sapping, /obj/projectile/magic/necropotence, /obj/projectile/magic, /obj/projectile/temp/chill, /obj/projectile/magic/wipe) @@ -51,17 +51,6 @@ chambered.projectile_type = pick(allowed_projectile_types) . = ..() -/obj/item/gun/magic/staff/door - name = "staff of door creation" - desc = "" - fire_sound = 'sound/blank.ogg' - ammo_type = /obj/item/ammo_casing/magic/door - icon_state = "staffofdoor" - item_state = "staffofdoor" - max_charges = 10 - recharge_rate = 2 - no_den_usage = 1 - /obj/item/gun/magic/staff/honk name = "staff of the honkmother" desc = "" diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index cb9d57ed60..fd322a288d 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -192,24 +192,6 @@ recharge_rate = 1 -///////////////////////////////////// -//WAND OF DOOR CREATION -///////////////////////////////////// - -/obj/item/gun/magic/wand/door - name = "wand of door creation" - desc = "" - ammo_type = /obj/item/ammo_casing/magic/door - icon_state = "doorwand" - fire_sound = 'sound/blank.ogg' - max_charges = 20 //20, 10, 10, 7 - no_den_usage = 1 - -/obj/item/gun/magic/wand/door/zap_self(mob/living/user) - to_chat(user, "I feel vaguely more open with your feelings.") - charges-- - ..() - ///////////////////////////////////// //WAND OF FIREBALL ///////////////////////////////////// diff --git a/code/modules/projectiles/guns/misc/beam_rifle.dm b/code/modules/projectiles/guns/misc/beam_rifle.dm deleted file mode 100644 index bf8811d5bf..0000000000 --- a/code/modules/projectiles/guns/misc/beam_rifle.dm +++ /dev/null @@ -1,573 +0,0 @@ - -#define ZOOM_LOCK_AUTOZOOM_FREEMOVE 0 -#define ZOOM_LOCK_AUTOZOOM_ANGLELOCK 1 -#define ZOOM_LOCK_CENTER_VIEW 2 -#define ZOOM_LOCK_OFF 3 - -#define AUTOZOOM_PIXEL_STEP_FACTOR 48 - -#define AIMING_BEAM_ANGLE_CHANGE_THRESHOLD 0.1 - -/obj/item/gun/energy/beam_rifle - name = "particle acceleration rifle" - desc = "An energy-based anti material marksman rifle that uses highly charged particle beams moving at extreme velocities to decimate whatever is unfortunate enough to be targeted by one. \ - Hold down left click while scoped to aim, when weapon is fully aimed (Tracer goes from red to green as it charges), release to fire. Moving while aiming or \ - changing where you're pointing at while aiming will delay the aiming process depending on how much you changed." - icon = 'icons/obj/guns/energy.dmi' - icon_state = "esniper" - item_state = "esniper" - fire_sound = 'sound/blank.ogg' - slot_flags = ITEM_SLOT_BACK - force = 15 - custom_materials = null - recoil = 4 - ammo_x_offset = 3 - ammo_y_offset = 3 - modifystate = FALSE - weapon_weight = WEAPON_HEAVY - w_class = WEIGHT_CLASS_BULKY - ammo_type = list(/obj/item/ammo_casing/energy/beam_rifle/hitscan) - cell_type = /obj/item/stock_parts/cell/beam_rifle - canMouseDown = TRUE - pin = null - var/aiming = FALSE - var/aiming_time = 12 - var/aiming_time_fire_threshold = 5 - var/aiming_time_left = 12 - var/aiming_time_increase_user_movement = 3 - var/scoped_slow = 1 - var/aiming_time_increase_angle_multiplier = 0.3 - var/last_process = 0 - - var/lastangle = 0 - var/aiming_lastangle = 0 - var/mob/current_user = null - var/list/obj/effect/projectile/tracer/current_tracers - - var/structure_piercing = 2 //Amount * 2. For some reason structures aren't respecting this unless you have it doubled. Probably with the objects in question's Bump() code instead of this but I'll deal with this later. - var/structure_bleed_coeff = 0.7 - var/wall_pierce_amount = 0 - var/wall_devastate = 0 - var/aoe_structure_range = 1 - var/aoe_structure_damage = 50 - var/aoe_fire_range = 2 - var/aoe_fire_chance = 40 - var/aoe_mob_range = 1 - var/aoe_mob_damage = 30 - var/impact_structure_damage = 60 - var/projectile_damage = 30 - var/projectile_stun = 0 - var/projectile_setting_pierce = TRUE - var/delay = 25 - var/lastfire = 0 - - //ZOOMING - var/zoom_current_view_increase = 0 - var/zoom_target_view_increase = 10 - var/zooming = FALSE - var/zoom_lock = ZOOM_LOCK_OFF - var/zooming_angle - var/current_zoom_x = 0 - var/current_zoom_y = 0 - - var/static/image/charged_overlay = image(icon = 'icons/obj/guns/energy.dmi', icon_state = "esniper_charged") - var/static/image/drained_overlay = image(icon = 'icons/obj/guns/energy.dmi', icon_state = "esniper_empty") - - var/datum/action/item_action/zoom_lock_action/zoom_lock_action - var/mob/listeningTo - -/obj/item/gun/energy/beam_rifle/debug - delay = 0 - cell_type = /obj/item/stock_parts/cell/infinite - aiming_time = 0 - recoil = 0 - pin = /obj/item/firing_pin - -/obj/item/gun/energy/beam_rifle/equipped(mob/user) - set_user(user) - return ..() - -/obj/item/gun/energy/beam_rifle/pickup(mob/user) - set_user(user) - return ..() - -/obj/item/gun/energy/beam_rifle/dropped(mob/user) - set_user() - return ..() - -/obj/item/gun/energy/beam_rifle/ui_action_click(mob/user, actiontype) - if(istype(actiontype, zoom_lock_action)) - zoom_lock++ - if(zoom_lock > 3) - zoom_lock = 0 - switch(zoom_lock) - if(ZOOM_LOCK_AUTOZOOM_FREEMOVE) - to_chat(user, "I switch [src]'s zooming processor to free directional.") - if(ZOOM_LOCK_AUTOZOOM_ANGLELOCK) - to_chat(user, "I switch [src]'s zooming processor to locked directional.") - if(ZOOM_LOCK_CENTER_VIEW) - to_chat(user, "I switch [src]'s zooming processor to center mode.") - if(ZOOM_LOCK_OFF) - to_chat(user, "I disable [src]'s zooming system.") - reset_zooming() - else - ..() - -/obj/item/gun/energy/beam_rifle/proc/set_autozoom_pixel_offsets_immediate(current_angle) - if(zoom_lock == ZOOM_LOCK_CENTER_VIEW || zoom_lock == ZOOM_LOCK_OFF) - return - current_zoom_x = sin(current_angle) + sin(current_angle) * AUTOZOOM_PIXEL_STEP_FACTOR * zoom_current_view_increase - current_zoom_y = cos(current_angle) + cos(current_angle) * AUTOZOOM_PIXEL_STEP_FACTOR * zoom_current_view_increase - -/obj/item/gun/energy/beam_rifle/proc/handle_zooming() - if(!zooming || !check_user()) - return - current_user.client.change_view(world.view + zoom_target_view_increase) - zoom_current_view_increase = zoom_target_view_increase - set_autozoom_pixel_offsets_immediate(zooming_angle) - -/obj/item/gun/energy/beam_rifle/proc/start_zooming() - if(zoom_lock == ZOOM_LOCK_OFF) - return - zooming = TRUE - -/obj/item/gun/energy/beam_rifle/proc/stop_zooming(mob/user) - if(zooming) - zooming = FALSE - reset_zooming(user) - -/obj/item/gun/energy/beam_rifle/proc/reset_zooming(mob/user) - if(!user) - user = current_user - if(!user || !user.client) - return FALSE - animate(user.client, pixel_x = 0, pixel_y = 0, 0, FALSE, LINEAR_EASING, ANIMATION_END_NOW) - zoom_current_view_increase = 0 - user.client.change_view(CONFIG_GET(string/default_view)) - zooming_angle = 0 - current_zoom_x = 0 - current_zoom_y = 0 - -/obj/item/gun/energy/beam_rifle/update_icon() - cut_overlays() - var/obj/item/ammo_casing/energy/primary_ammo = ammo_type[1] - if(!QDELETED(cell) && (cell.charge >= primary_ammo.e_cost)) - add_overlay(charged_overlay) - else - add_overlay(drained_overlay) - -/obj/item/gun/energy/beam_rifle/attack_self(mob/user) - projectile_setting_pierce = !projectile_setting_pierce - to_chat(user, "I set \the [src] to [projectile_setting_pierce? "pierce":"impact"] mode.") - aiming_beam() - -/obj/item/gun/energy/beam_rifle/proc/update_slowdown() - if(aiming) - slowdown = scoped_slow - else - slowdown = initial(slowdown) - -/obj/item/gun/energy/beam_rifle/Initialize() - . = ..() - fire_delay = delay - current_tracers = list() - START_PROCESSING(SSfastprocess, src) - zoom_lock_action = new(src) - -/obj/item/gun/energy/beam_rifle/Destroy() - STOP_PROCESSING(SSfastprocess, src) - set_user(null) - QDEL_LIST(current_tracers) - listeningTo = null - return ..() - -/obj/item/gun/energy/beam_rifle/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - chambered = null - recharge_newshot() - -/obj/item/gun/energy/beam_rifle/proc/aiming_beam(force_update = FALSE) - var/diff = abs(aiming_lastangle - lastangle) - check_user() - if(diff < AIMING_BEAM_ANGLE_CHANGE_THRESHOLD && !force_update) - return - aiming_lastangle = lastangle - var/obj/projectile/beam/beam_rifle/hitscan/aiming_beam/P = new - P.gun = src - P.wall_pierce_amount = wall_pierce_amount - P.structure_pierce_amount = structure_piercing - P.do_pierce = projectile_setting_pierce - if(aiming_time) - var/percent = ((100/aiming_time)*aiming_time_left) - P.color = rgb(255 * percent,255 * ((100 - percent) / 100),0) - else - P.color = rgb(0, 255, 0) - var/turf/curloc = get_turf(src) - var/turf/targloc = get_turf(current_user.client.mouseObject) - if(!istype(targloc)) - if(!istype(curloc)) - return - targloc = get_turf_in_angle(lastangle, curloc, 10) - P.preparePixelProjectile(targloc, current_user, current_user.client.mouseParams, 0) - P.fire(lastangle) - -/obj/item/gun/energy/beam_rifle/process() - if(!aiming) - last_process = world.time - return - check_user() - handle_zooming() - aiming_time_left = max(0, aiming_time_left - (world.time - last_process)) - aiming_beam(TRUE) - last_process = world.time - -/obj/item/gun/energy/beam_rifle/proc/check_user(automatic_cleanup = TRUE) - if(!istype(current_user) || !isturf(current_user.loc) || !(src in current_user.held_items) || current_user.incapacitated()) //Doesn't work if you're not holding it! - if(automatic_cleanup) - stop_aiming() - set_user(null) - return FALSE - return TRUE - -/obj/item/gun/energy/beam_rifle/proc/process_aim() - if(istype(current_user) && current_user.client && current_user.client.mouseParams) - var/angle = mouse_angle_from_client(current_user.client) - current_user.setDir(angle2dir_cardinal(angle)) - var/difference = abs(closer_angle_difference(lastangle, angle)) - delay_penalty(difference * aiming_time_increase_angle_multiplier) - lastangle = angle - -/obj/item/gun/energy/beam_rifle/proc/on_mob_move() - check_user() - if(aiming) - delay_penalty(aiming_time_increase_user_movement) - process_aim() - aiming_beam(TRUE) - -/obj/item/gun/energy/beam_rifle/proc/start_aiming() - aiming_time_left = aiming_time - aiming = TRUE - process_aim() - aiming_beam(TRUE) - zooming_angle = lastangle - start_zooming() - -/obj/item/gun/energy/beam_rifle/proc/stop_aiming(mob/user) - set waitfor = FALSE - aiming_time_left = aiming_time - aiming = FALSE - QDEL_LIST(current_tracers) - stop_zooming(user) - -/obj/item/gun/energy/beam_rifle/proc/set_user(mob/user) - if(user == current_user) - return - stop_aiming(current_user) - if(listeningTo) - UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) - listeningTo = null - if(istype(current_user)) - current_user = null - if(istype(user)) - current_user = user - RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_mob_move)) - listeningTo = user - -/obj/item/gun/energy/beam_rifle/onMouseDrag(src_object, over_object, src_location, over_location, params, mob) - if(aiming) - process_aim() - aiming_beam() - if(zoom_lock == ZOOM_LOCK_AUTOZOOM_FREEMOVE) - zooming_angle = lastangle - set_autozoom_pixel_offsets_immediate(zooming_angle) - return ..() - -/obj/item/gun/energy/beam_rifle/onMouseDown(object, location, params, mob/mob) - if(istype(mob)) - set_user(mob) - if(istype(object, /atom/movable/screen) && !istype(object, /atom/movable/screen/click_catcher)) - return - if((object in mob.contents) || (object == mob)) - return - start_aiming() - return ..() - -/obj/item/gun/energy/beam_rifle/onMouseUp(object, location, params, mob/M) - if(istype(object, /atom/movable/screen) && !istype(object, /atom/movable/screen/click_catcher)) - return - process_aim() - if(aiming_time_left <= aiming_time_fire_threshold && check_user()) - sync_ammo() - afterattack(M.client.mouseObject, M, FALSE, M.client.mouseParams, passthrough = TRUE) - stop_aiming() - QDEL_LIST(current_tracers) - return ..() - -/obj/item/gun/energy/beam_rifle/afterattack(atom/target, mob/living/user, flag, params, passthrough = FALSE) - if(flag) //It's adjacent, is the user, or is on the user's person - if(target in user.contents) //can't shoot stuff inside us. - return - if(!ismob(target) || user.used_intent.type == INTENT_HARM) //melee attack - return - if(target == user && user.zone_selected != BODY_ZONE_PRECISE_MOUTH) //so we can't shoot ourselves (unless mouth selected) - return - if(!passthrough && (aiming_time > aiming_time_fire_threshold)) - return - if(lastfire > world.time + delay) - return - lastfire = world.time - . = ..() - stop_aiming() - -/obj/item/gun/energy/beam_rifle/proc/sync_ammo() - for(var/obj/item/ammo_casing/energy/beam_rifle/AC in contents) - AC.sync_stats() - -/obj/item/gun/energy/beam_rifle/proc/delay_penalty(amount) - aiming_time_left = CLAMP(aiming_time_left + amount, 0, aiming_time) - -/obj/item/ammo_casing/energy/beam_rifle - name = "particle acceleration lens" - desc = "" - var/wall_pierce_amount = 0 - var/wall_devastate = 0 - var/aoe_structure_range = 1 - var/aoe_structure_damage = 30 - var/aoe_fire_range = 2 - var/aoe_fire_chance = 66 - var/aoe_mob_range = 1 - var/aoe_mob_damage = 20 - var/impact_structure_damage = 50 - var/projectile_damage = 40 - var/projectile_stun = 0 - var/structure_piercing = 2 - var/structure_bleed_coeff = 0.7 - var/do_pierce = TRUE - var/obj/item/gun/energy/beam_rifle/host - -/obj/item/ammo_casing/energy/beam_rifle/proc/sync_stats() - var/obj/item/gun/energy/beam_rifle/BR = loc - if(!istype(BR)) - stack_trace("Beam rifle syncing error") - host = BR - do_pierce = BR.projectile_setting_pierce - wall_pierce_amount = BR.wall_pierce_amount - wall_devastate = BR.wall_devastate - aoe_structure_range = BR.aoe_structure_range - aoe_structure_damage = BR.aoe_structure_damage - aoe_fire_range = BR.aoe_fire_range - aoe_fire_chance = BR.aoe_fire_chance - aoe_mob_range = BR.aoe_mob_range - aoe_mob_damage = BR.aoe_mob_damage - impact_structure_damage = BR.impact_structure_damage - projectile_damage = BR.projectile_damage - projectile_stun = BR.projectile_stun - delay = BR.delay - structure_piercing = BR.structure_piercing - structure_bleed_coeff = BR.structure_bleed_coeff - -/obj/item/ammo_casing/energy/beam_rifle/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") - . = ..() - var/obj/projectile/beam/beam_rifle/hitscan/HS_BB = BB - if(!istype(HS_BB)) - return - HS_BB.impact_direct_damage = projectile_damage - HS_BB.stun = projectile_stun - HS_BB.impact_structure_damage = impact_structure_damage - HS_BB.aoe_mob_damage = aoe_mob_damage - HS_BB.aoe_mob_range = CLAMP(aoe_mob_range, 0, 15) //Badmin safety lock - HS_BB.aoe_fire_chance = aoe_fire_chance - HS_BB.aoe_fire_range = aoe_fire_range - HS_BB.aoe_structure_damage = aoe_structure_damage - HS_BB.aoe_structure_range = CLAMP(aoe_structure_range, 0, 15) //Badmin safety lock - HS_BB.wall_devastate = wall_devastate - HS_BB.wall_pierce_amount = wall_pierce_amount - HS_BB.structure_pierce_amount = structure_piercing - HS_BB.structure_bleed_coeff = structure_bleed_coeff - HS_BB.do_pierce = do_pierce - HS_BB.gun = host - -/obj/item/ammo_casing/energy/beam_rifle/throw_proj(atom/target, turf/targloc, mob/living/user, params, spread) - var/turf/curloc = get_turf(user) - if(!istype(curloc) || !BB) - return FALSE - var/obj/item/gun/energy/beam_rifle/gun = loc - if(!targloc && gun) - targloc = get_turf_in_angle(gun.lastangle, curloc, 10) - else if(!targloc) - return FALSE - var/firing_dir - if(BB.firer) - firing_dir = BB.firer.dir - if(!BB.suppressed && firing_effect_type) - new firing_effect_type(get_turf(src), firing_dir) - BB.preparePixelProjectile(target, user, params, spread) - BB.fire(gun? gun.lastangle : null, null) - BB = null - return TRUE - -/obj/item/ammo_casing/energy/beam_rifle/hitscan - projectile_type = /obj/projectile/beam/beam_rifle/hitscan - select_name = "beam" - e_cost = 10000 - fire_sound = 'sound/blank.ogg' - -/obj/projectile/beam/beam_rifle - name = "particle beam" - icon = null - hitsound = 'sound/blank.ogg' - damage = 0 //Handled manually. - damage_type = BURN - flag = "energy" - range = 150 - jitter = 10 - var/obj/item/gun/energy/beam_rifle/gun - var/structure_pierce_amount = 0 //All set to 0 so the gun can manually set them during firing. - var/structure_bleed_coeff = 0 - var/structure_pierce = 0 - var/do_pierce = TRUE - var/wall_pierce_amount = 0 - var/wall_pierce = 0 - var/wall_devastate = 0 - var/aoe_structure_range = 0 - var/aoe_structure_damage = 0 - var/aoe_fire_range = 0 - var/aoe_fire_chance = 0 - var/aoe_mob_range = 0 - var/aoe_mob_damage = 0 - var/impact_structure_damage = 0 - var/impact_direct_damage = 0 - var/turf/cached - var/list/pierced = list() - -/obj/projectile/beam/beam_rifle/proc/AOE(turf/epicenter) - set waitfor = FALSE - if(!epicenter) - return - new /obj/effect/temp_visual/explosion/fast(epicenter) - for(var/mob/living/L in range(aoe_mob_range, epicenter)) //handle aoe mob damage - L.adjustFireLoss(aoe_mob_damage) - to_chat(L, "\The [src] sears you!") - for(var/turf/T in range(aoe_fire_range, epicenter)) //handle aoe fire - if(prob(aoe_fire_chance)) - new /obj/effect/hotspot(T) - for(var/obj/O in range(aoe_structure_range, epicenter)) - if(!isitem(O)) - if(O.level == 1) //Please don't break underfloor items! - continue - O.take_damage(aoe_structure_damage * get_damage_coeff(O), BURN, "laser", FALSE) - -/obj/projectile/beam/beam_rifle/proc/check_pierce(atom/target) - if(!do_pierce) - return FALSE - if(pierced[target]) //we already pierced them go away - return TRUE - if(isclosedturf(target)) - if(wall_pierce++ < wall_pierce_amount) - if(prob(wall_devastate)) - if(iswallturf(target)) - var/turf/closed/wall/W = target - W.dismantle_wall(TRUE, TRUE) - else - target.ex_act(EXPLODE_HEAVY) - return TRUE - if(ismovableatom(target)) - var/atom/movable/AM = target - if(AM.density && !AM.CanPass(src, get_turf(target)) && !ismob(AM)) - if(structure_pierce < structure_pierce_amount) - if(isobj(AM)) - var/obj/O = AM - O.take_damage((impact_structure_damage + aoe_structure_damage) * structure_bleed_coeff * get_damage_coeff(AM), BURN, "energy", FALSE) - pierced[AM] = TRUE - structure_pierce++ - return TRUE - return FALSE - -/obj/projectile/beam/beam_rifle/proc/get_damage_coeff(atom/target) - if(istype(target, /obj/machinery/door)) - return 0.4 - if(istype(target, /obj/structure/window)) - return 0.5 - return 1 - -/obj/projectile/beam/beam_rifle/proc/handle_impact(atom/target) - if(isobj(target)) - var/obj/O = target - O.take_damage(impact_structure_damage * get_damage_coeff(target), BURN, "laser", FALSE) - if(isliving(target)) - var/mob/living/L = target - L.adjustFireLoss(impact_direct_damage) - L.emote("scream") - -/obj/projectile/beam/beam_rifle/proc/handle_hit(atom/target) - set waitfor = FALSE - if(!cached && !QDELETED(target)) - cached = get_turf(target) - if(nodamage) - return FALSE - playsound(cached, 'sound/blank.ogg', 100, TRUE) - AOE(cached) - if(!QDELETED(target)) - handle_impact(target) - -/obj/projectile/beam/beam_rifle/Bump(atom/target) - if(check_pierce(target)) - permutated += target - trajectory_ignore_forcemove = TRUE - forceMove(target.loc) - trajectory_ignore_forcemove = FALSE - return FALSE - if(!QDELETED(target)) - cached = get_turf(target) - return ..() - -/obj/projectile/beam/beam_rifle/on_hit(atom/target, blocked = FALSE) - if(!QDELETED(target)) - cached = get_turf(target) - handle_hit(target) - return ..() - -/obj/projectile/beam/beam_rifle/hitscan - icon_state = "" - hitscan = TRUE - tracer_type = /obj/effect/projectile/tracer/tracer/beam_rifle - var/constant_tracer = FALSE - -/obj/projectile/beam/beam_rifle/hitscan/generate_hitscan_tracers(cleanup = TRUE, duration = 5, impacting = TRUE, highlander) - set waitfor = FALSE - if(isnull(highlander)) - highlander = constant_tracer - if(highlander && istype(gun)) - QDEL_LIST(gun.current_tracers) - for(var/datum/point/p in beam_segments) - gun.current_tracers += generate_tracer_between_points(p, beam_segments[p], tracer_type, color, 0, hitscan_light_range, hitscan_light_color_override, hitscan_light_intensity) - else - for(var/datum/point/p in beam_segments) - generate_tracer_between_points(p, beam_segments[p], tracer_type, color, duration, hitscan_light_range, hitscan_light_color_override, hitscan_light_intensity) - if(cleanup) - QDEL_LIST(beam_segments) - beam_segments = null - QDEL_NULL(beam_index) - -/obj/projectile/beam/beam_rifle/hitscan/aiming_beam - tracer_type = /obj/effect/projectile/tracer/tracer/aiming - name = "aiming beam" - hitsound = null - hitsound_wall = null - nodamage = TRUE - damage = 0 - constant_tracer = TRUE - hitscan_light_range = 0 - hitscan_light_intensity = 0 - hitscan_light_color_override = "#99ff99" - reflectable = REFLECT_FAKEPROJECTILE - -/obj/projectile/beam/beam_rifle/hitscan/aiming_beam/prehit(atom/target) - qdel(src) - return FALSE - -/obj/projectile/beam/beam_rifle/hitscan/aiming_beam/on_hit() - qdel(src) - return BULLET_ACT_HIT diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index 9197a169b7..575bbf29ae 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -83,8 +83,6 @@ /obj/item/firing_pin/test_range/pin_auth(mob/living/user) if(!istype(user)) return FALSE - for(var/obj/machinery/magnetic_controller/M in range(user, 3)) - return TRUE return FALSE @@ -307,18 +305,6 @@ to_chat(user, "I need to be wearing [tagcolor] laser tag armor!") return FALSE -/obj/item/firing_pin/tag/red - name = "red laser tag firing pin" - icon_state = "firing_pin_red" - suit_requirement = /obj/item/clothing/suit/redtag - tagcolor = "red" - -/obj/item/firing_pin/tag/blue - name = "blue laser tag firing pin" - icon_state = "firing_pin_blue" - suit_requirement = /obj/item/clothing/suit/bluetag - tagcolor = "blue" - /obj/item/firing_pin/Destroy() if(gun) gun.pin = null diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 80bb577e3e..82f9113fd9 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -189,10 +189,7 @@ var/splatter_dir = dir if(starting) splatter_dir = get_dir(starting, target_loca) - if(isalien(L)) - new /obj/effect/temp_visual/dir_setting/bloodsplatter/xenosplatter(target_loca, splatter_dir) - else - new /obj/effect/temp_visual/dir_setting/bloodsplatter(target_loca, splatter_dir) + new /obj/effect/temp_visual/dir_setting/bloodsplatter(target_loca, splatter_dir) if(prob(33)) L.add_splatter_floor(target_loca) @@ -575,7 +572,7 @@ if(!direct_target) //If they're able to 1. stand or 2. use items or 3. move, AND they are not softcrit, they are not stunned enough to dodge projectiles passing over. //If they're dead they shouldn't be getting hit by indirect fire - if((CHECK_BITFIELD(L.mobility_flags, MOBILITY_USE | MOBILITY_STAND | MOBILITY_MOVE) && L.stat == CONSCIOUS) || L.stat == DEAD) + if((CHECK_BITFIELD(L.mobility_flags, MOBILITY_USE | MOBILITY_STAND | MOBILITY_MOVE) && L.stat == CONSCIOUS) || L.stat == DEAD) return FALSE return TRUE @@ -693,7 +690,7 @@ M.Turn(original_angle) thing.transform = M thing.color = color - thing.set_light(muzzle_flash_range, muzzle_flash_intensity, muzzle_flash_color_override? muzzle_flash_color_override : color) + thing.set_light(muzzle_flash_range,muzzle_flash_range, muzzle_flash_intensity, l_color = muzzle_flash_color_override? muzzle_flash_color_override : color) QDEL_IN(thing, duration) if(impacting && impact_type && duration > 0) var/datum/point/p = beam_segments[beam_segments[beam_segments.len]] @@ -703,7 +700,7 @@ M.Turn(Angle) thing.transform = M thing.color = color - thing.set_light(impact_light_range, impact_light_intensity, impact_light_color_override? impact_light_color_override : color) + thing.set_light(impact_light_range, impact_light_range, impact_light_intensity, l_color = impact_light_color_override? impact_light_color_override : color) QDEL_IN(thing, duration) if(cleanup) cleanup_beam_segments() diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index aca4767235..1f84c000c1 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -3,7 +3,7 @@ icon_state = "laser" pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE damage = 20 - light_range = 2 + light_outer_range = 2 damage_type = BURN hitsound = 'sound/blank.ogg' hitsound_wall = 'sound/blank.ogg' @@ -120,47 +120,6 @@ /obj/projectile/beam/emitter/singularity_pull() return //don't want the emitters to miss -/obj/projectile/beam/lasertag - name = "laser tag beam" - icon_state = "omnilaser" - hitsound = null - damage = 0 - damage_type = STAMINA - flag = "laser" - var/suit_types = list(/obj/item/clothing/suit/redtag, /obj/item/clothing/suit/bluetag) - impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser - light_color = LIGHT_COLOR_BLUE - -/obj/projectile/beam/lasertag/on_hit(atom/target, blocked = FALSE) - . = ..() - if(ishuman(target)) - var/mob/living/carbon/human/M = target - if(istype(M.wear_armor)) - if(M.wear_armor.type in suit_types) - M.adjustStaminaLoss(34) - -/obj/projectile/beam/lasertag/redtag - icon_state = "laser" - suit_types = list(/obj/item/clothing/suit/bluetag) - impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser - light_color = LIGHT_COLOR_RED - tracer_type = /obj/effect/projectile/tracer/laser - muzzle_type = /obj/effect/projectile/muzzle/laser - impact_type = /obj/effect/projectile/impact/laser - -/obj/projectile/beam/lasertag/redtag/hitscan - hitscan = TRUE - -/obj/projectile/beam/lasertag/bluetag - icon_state = "bluelaser" - suit_types = list(/obj/item/clothing/suit/redtag) - tracer_type = /obj/effect/projectile/tracer/laser/blue - muzzle_type = /obj/effect/projectile/muzzle/laser/blue - impact_type = /obj/effect/projectile/impact/laser/blue - -/obj/projectile/beam/lasertag/bluetag/hitscan - hitscan = TRUE - /obj/projectile/beam/instakill name = "instagib laser" icon_state = "purple_laser" diff --git a/code/modules/projectiles/projectile/energy/net_snare.dm b/code/modules/projectiles/projectile/energy/net_snare.dm index 3c0f67ec68..cad6d90ca2 100644 --- a/code/modules/projectiles/projectile/energy/net_snare.dm +++ b/code/modules/projectiles/projectile/energy/net_snare.dm @@ -1,60 +1,3 @@ -/obj/projectile/energy/net - name = "energy netting" - icon_state = "e_netting" - damage = 10 - damage_type = STAMINA - hitsound = 'sound/blank.ogg' - range = 10 - -/obj/projectile/energy/net/Initialize() - . = ..() - SpinAnimation() - -/obj/projectile/energy/net/on_hit(atom/target, blocked = FALSE) - if(isliving(target)) - var/turf/Tloc = get_turf(target) - if(!locate(/obj/effect/nettingportal) in Tloc) - new /obj/effect/nettingportal(Tloc) - ..() - -/obj/projectile/energy/net/on_range() - do_sparks(1, TRUE, src) - ..() - -/obj/effect/nettingportal - name = "DRAGnet teleportation field" - desc = "" - icon = 'icons/effects/effects.dmi' - icon_state = "dragnetfield" - light_range = 3 - anchored = TRUE - -/obj/effect/nettingportal/Initialize() - . = ..() - var/obj/item/beacon/teletarget = null - for(var/obj/machinery/computer/teleporter/com in GLOB.machines) - if(com.target) - if(com.power_station && com.power_station.teleporter_hub && com.power_station.engaged) - teletarget = com.target - - addtimer(CALLBACK(src, PROC_REF(pop), teletarget), 30) - -/obj/effect/nettingportal/proc/pop(teletarget) - if(teletarget) - for(var/mob/living/L in get_turf(src)) - do_teleport(L, teletarget, 2, channel = TELEPORT_CHANNEL_BLUESPACE)//teleport what's in the tile to the beacon - else - for(var/mob/living/L in get_turf(src)) - do_teleport(L, L, 15, channel = TELEPORT_CHANNEL_BLUESPACE) //Otherwise it just warps you off somewhere. - - qdel(src) - -/obj/effect/nettingportal/singularity_act() - return - -/obj/effect/nettingportal/singularity_pull() - return - /obj/projectile/energy/trap name = "energy snare" icon_state = "e_snare" diff --git a/code/modules/projectiles/projectile/energy/nuclear_particle.dm b/code/modules/projectiles/projectile/energy/nuclear_particle.dm index c729f36b46..7cd3985f12 100644 --- a/code/modules/projectiles/projectile/energy/nuclear_particle.dm +++ b/code/modules/projectiles/projectile/energy/nuclear_particle.dm @@ -22,7 +22,7 @@ //Random color time! var/our_color = pick(particle_colors) add_atom_colour(particle_colors[our_color], FIXED_COLOUR_PRIORITY) - set_light(4, 3, particle_colors[our_color]) //Range of 4, brightness of 3 - Same range as a flashlight + set_light(4, 4, 3, l_color = particle_colors[our_color]) //Range of 4, brightness of 3 - Same range as a flashlight /atom/proc/fire_nuclear_particle(angle = rand(0,360)) //used by fusion to fire random nuclear particles. Fires one particle in a random direction. var/obj/projectile/energy/nuclear_particle/P = new /obj/projectile/energy/nuclear_particle(src) diff --git a/code/modules/projectiles/projectile/energy/tesla.dm b/code/modules/projectiles/projectile/energy/tesla.dm deleted file mode 100644 index 33e9da12f8..0000000000 --- a/code/modules/projectiles/projectile/energy/tesla.dm +++ /dev/null @@ -1,29 +0,0 @@ -/obj/projectile/energy/tesla - name = "tesla bolt" - icon_state = "tesla_projectile" - impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser - var/chain - var/tesla_flags = TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE - var/zap_range = 3 - var/power = 10000 - -/obj/projectile/energy/tesla/fire(setAngle) - if(firer) - chain = firer.Beam(src, icon_state = "lightning[rand(1, 12)]", time = INFINITY, maxdistance = INFINITY) - ..() - -/obj/projectile/energy/tesla/on_hit(atom/target) - . = ..() - tesla_zap(target, zap_range, power, tesla_flags) - qdel(src) - -/obj/projectile/energy/tesla/Destroy() - QDEL_NULL(chain) - return ..() - -/obj/projectile/energy/tesla/revolver - name = "energy orb" - -/obj/projectile/energy/tesla/cannon - name = "tesla orb" - power = 20000 diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 48a72e59f0..ddca0ba1a3 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -114,35 +114,6 @@ smoke.set_up(0, t) smoke.start() -/obj/projectile/magic/door - name = "bolt of door creation" - icon_state = "energy" - damage = 0 - damage_type = OXY - nodamage = TRUE - var/list/door_types = list(/obj/structure/mineral_door/wood, /obj/structure/mineral_door/iron, /obj/structure/mineral_door/silver, /obj/structure/mineral_door/gold, /obj/structure/mineral_door/uranium, /obj/structure/mineral_door/sandstone, /obj/structure/mineral_door/transparent/plasma, /obj/structure/mineral_door/transparent/diamond) - -/obj/projectile/magic/door/on_hit(atom/target) - . = ..() - if(istype(target, /obj/machinery/door)) - OpenDoor(target) - else - var/turf/T = get_turf(target) - if(isclosedturf(T) && !isindestructiblewall(T)) - CreateDoor(T) - -/obj/projectile/magic/door/proc/CreateDoor(turf/T) - var/door_type = pick(door_types) - var/obj/structure/mineral_door/D = new door_type(T) - T.ChangeTurf(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) - D.Open() - -/obj/projectile/magic/door/proc/OpenDoor(obj/machinery/door/D) - if(istype(D, /obj/machinery/door/airlock)) - var/obj/machinery/door/airlock/A = D - A.locked = FALSE - D.open() - /obj/projectile/magic/change name = "bolt of change" icon_state = "ice_1" @@ -173,52 +144,20 @@ var/list/contents = M.contents.Copy() - if(iscyborg(M)) - var/mob/living/silicon/robot/Robot = M - if(Robot.mmi) - qdel(Robot.mmi) - Robot.notify_ai(NEW_BORG) - else - for(var/obj/item/W in contents) - if(!M.dropItemToGround(W)) - qdel(W) + for(var/obj/item/W in contents) + if(!M.dropItemToGround(W)) + qdel(W) var/mob/living/new_mob - var/randomize = pick("monkey","robot","slime","xeno","humanoid","animal") + var/randomize = pick("monkey","slime","humanoid","animal") switch(randomize) if("monkey") new_mob = new /mob/living/carbon/monkey(M.loc) - if("robot") - var/robot = pick(200;/mob/living/silicon/robot, - /mob/living/silicon/robot/modules/syndicate, - /mob/living/silicon/robot/modules/syndicate/medical, - /mob/living/silicon/robot/modules/syndicate/saboteur, - 200;/mob/living/simple_animal/drone/polymorphed) - new_mob = new robot(M.loc) - if(issilicon(new_mob)) - new_mob.gender = M.gender - new_mob.invisibility = 0 - new_mob.job = "Cyborg" - var/mob/living/silicon/robot/Robot = new_mob - Robot.lawupdate = FALSE - Robot.connected_ai = null - Robot.mmi.transfer_identity(M) //Does not transfer key/client. - Robot.clear_inherent_laws(0) - Robot.clear_zeroth_law(0) - if("slime") new_mob = new /mob/living/simple_animal/slime/random(M.loc) - if("xeno") - var/Xe - if(M.ckey) - Xe = pick(/mob/living/carbon/alien/humanoid/hunter,/mob/living/carbon/alien/humanoid/sentinel) - else - Xe = pick(/mob/living/carbon/alien/humanoid/hunter,/mob/living/simple_animal/hostile/alien/sentinel) - new_mob = new Xe(M.loc) - if("animal") var/path = pick(/mob/living/simple_animal/hostile/carp, /mob/living/simple_animal/hostile/bear, @@ -234,8 +173,6 @@ /mob/living/simple_animal/hostile/carp/ranged/chaos, /mob/living/simple_animal/hostile/asteroid/basilisk/watcher, /mob/living/simple_animal/hostile/asteroid/goliath/beast, - /mob/living/simple_animal/hostile/headcrab, - /mob/living/simple_animal/hostile/morph, /mob/living/simple_animal/hostile/stickman, /mob/living/simple_animal/hostile/stickman/dog, /mob/living/simple_animal/hostile/megafauna/dragon/lesser, @@ -625,42 +562,6 @@ return Bump(L) ..() -/obj/projectile/magic/aoe/lightning - name = "lightning bolt" - icon_state = "tesla_projectile" //Better sprites are REALLY needed and appreciated!~ - damage = 15 - damage_type = BURN - nodamage = FALSE - speed = 0.3 - flag = "magic" - light_color = "#ffffff" - light_range = 2 - - var/tesla_power = 20000 - var/tesla_range = 15 - var/tesla_flags = TESLA_MOB_DAMAGE | TESLA_MOB_STUN | TESLA_OBJ_DAMAGE - var/chain - var/mob/living/caster - -/obj/projectile/magic/aoe/lightning/fire(setAngle) - if(caster) - chain = caster.Beam(src, icon_state = "lightning[rand(1, 12)]", time = INFINITY, maxdistance = INFINITY) - ..() - -/obj/projectile/magic/aoe/lightning/on_hit(target) - . = ..() - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - visible_message("[src] fizzles on contact with [target]!") - qdel(src) - return BULLET_ACT_BLOCK - tesla_zap(src, tesla_range, tesla_power, tesla_flags) - qdel(src) - -/obj/projectile/magic/aoe/lightning/Destroy() - qdel(chain) - . = ..() /obj/projectile/magic/aoe/fireball name = "bolt of fireball" @@ -669,7 +570,7 @@ damage_type = BRUTE nodamage = FALSE light_color = "#f8af07" - light_range = 2 + light_outer_range = 2 //explosion values var/exp_heavy = 0 diff --git a/code/modules/projectiles/projectile/special/gravity.dm b/code/modules/projectiles/projectile/special/gravity.dm deleted file mode 100644 index c762d7609b..0000000000 --- a/code/modules/projectiles/projectile/special/gravity.dm +++ /dev/null @@ -1,102 +0,0 @@ -/obj/projectile/gravityrepulse - name = "repulsion bolt" - icon = 'icons/effects/effects.dmi' - icon_state = "chronofield" - hitsound = 'sound/blank.ogg' - damage = 0 - damage_type = BRUTE - nodamage = TRUE - color = "#33CCFF" - var/turf/T - var/power = 4 - var/list/thrown_items = list() - -/obj/projectile/gravityrepulse/Initialize() - . = ..() - var/obj/item/ammo_casing/energy/gravity/repulse/C = loc - if(istype(C) && istype(C.gun)) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items - power = min(C.gun.power, 15) - -/obj/projectile/gravityrepulse/on_hit() - . = ..() - T = get_turf(src) - for(var/atom/movable/A in range(T, power)) - if(A == src || (firer && A == src.firer) || A.anchored || thrown_items[A]) - continue - if(ismob(A)) //because (ismob(A) && A:mob_negates_gravity()) is a recipe for bugs. - var/mob/M = A - if(M.mob_negates_gravity()) - continue - var/throwtarget = get_edge_target_turf(src, get_dir(src, get_step_away(A, src))) - A.safe_throw_at(throwtarget,power+1,1, force = MOVE_FORCE_EXTREMELY_STRONG) - thrown_items[A] = A - for(var/turf/F in range(T,power)) - new /obj/effect/temp_visual/gravpush(F) - -/obj/projectile/gravityattract - name = "attraction bolt" - icon = 'icons/effects/effects.dmi' - icon_state = "chronofield" - hitsound = 'sound/blank.ogg' - damage = 0 - damage_type = BRUTE - nodamage = TRUE - color = "#FF6600" - var/turf/T - var/power = 4 - var/list/thrown_items = list() - -/obj/projectile/gravityattract/Initialize() - . = ..() - var/obj/item/ammo_casing/energy/gravity/attract/C = loc - if(istype(C) && istype(C.gun)) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items - power = min(C.gun.power, 15) - -/obj/projectile/gravityattract/on_hit() - . = ..() - T = get_turf(src) - for(var/atom/movable/A in range(T, power)) - if(A == src || (firer && A == src.firer) || A.anchored || thrown_items[A]) - continue - if(ismob(A)) - var/mob/M = A - if(M.mob_negates_gravity()) - continue - A.safe_throw_at(T, power+1, 1, force = MOVE_FORCE_EXTREMELY_STRONG) - thrown_items[A] = A - for(var/turf/F in range(T,power)) - new /obj/effect/temp_visual/gravpush(F) - -/obj/projectile/gravitychaos - name = "gravitational blast" - icon = 'icons/effects/effects.dmi' - icon_state = "chronofield" - hitsound = 'sound/blank.ogg' - damage = 0 - damage_type = BRUTE - nodamage = TRUE - color = "#101010" - var/turf/T - var/power = 4 - var/list/thrown_items = list() - -/obj/projectile/gravitychaos/Initialize() - . = ..() - var/obj/item/ammo_casing/energy/gravity/chaos/C = loc - if(istype(C) && istype(C.gun)) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items - power = min(C.gun.power, 15) - -/obj/projectile/gravitychaos/on_hit() - . = ..() - T = get_turf(src) - for(var/atom/movable/A in range(T, power)) - if(A == src|| (firer && A == src.firer) || A.anchored || thrown_items[A]) - continue - if(ismob(A)) - var/mob/M = A - if(M.mob_negates_gravity()) - continue - A.safe_throw_at(get_edge_target_turf(A, pick(GLOB.cardinals)), power+1, 1, force = MOVE_FORCE_EXTREMELY_STRONG) - thrown_items[A] = A - for(var/turf/Z in range(T,power)) - new /obj/effect/temp_visual/gravpush(Z) diff --git a/code/modules/projectiles/projectile/special/neurotoxin.dm b/code/modules/projectiles/projectile/special/neurotoxin.dm index d7e50b595d..e4ee605aee 100644 --- a/code/modules/projectiles/projectile/special/neurotoxin.dm +++ b/code/modules/projectiles/projectile/special/neurotoxin.dm @@ -4,9 +4,3 @@ damage = 5 damage_type = TOX paralyze = 100 - -/obj/projectile/bullet/neurotoxin/on_hit(atom/target, blocked = FALSE) - if(isalien(target)) - paralyze = 0 - nodamage = TRUE - return ..() diff --git a/code/modules/projectiles/projectile/special/rocket.dm b/code/modules/projectiles/projectile/special/rocket.dm index 00bba3e6c9..6efab3fd10 100644 --- a/code/modules/projectiles/projectile/special/rocket.dm +++ b/code/modules/projectiles/projectile/special/rocket.dm @@ -24,9 +24,6 @@ if(ismecha(target)) var/obj/mecha/M = target M.take_damage(anti_armour_damage) - if(issilicon(target)) - var/mob/living/silicon/S = target - S.take_overall_damage(anti_armour_damage*0.75, anti_armour_damage*0.25) return BULLET_ACT_HIT /obj/projectile/bullet/a84mm_he @@ -51,10 +48,7 @@ damage = 30 ricochets_max = 0 //it's a MISSILE var/sturdy = list( - /turf/closed, - /obj/mecha, - /obj/machinery/door/, - /obj/machinery/door/poddoor/shutters + /turf/closed, ) /obj/item/broken_missile diff --git a/code/modules/projectiles/projectile/special/wormhole.dm b/code/modules/projectiles/projectile/special/wormhole.dm deleted file mode 100644 index 2bc9713f1a..0000000000 --- a/code/modules/projectiles/projectile/special/wormhole.dm +++ /dev/null @@ -1,29 +0,0 @@ -/obj/projectile/beam/wormhole - name = "bluespace beam" - icon_state = "spark" - hitsound = "sparks" - damage = 0 - nodamage = TRUE - pass_flags = PASSGLASS | PASSTABLE | PASSGRILLE | PASSMOB - var/obj/item/gun/energy/wormhole_projector/gun - color = "#33CCFF" - tracer_type = /obj/effect/projectile/tracer/wormhole - impact_type = /obj/effect/projectile/impact/wormhole - muzzle_type = /obj/effect/projectile/muzzle/wormhole - hitscan = TRUE - -/obj/projectile/beam/wormhole/orange - name = "orange bluespace beam" - color = "#FF6600" - -/obj/projectile/beam/wormhole/Initialize(mapload, obj/item/ammo_casing/energy/wormhole/casing) - . = ..() - if(casing) - gun = casing.gun - - -/obj/projectile/beam/wormhole/on_hit(atom/target) - if(!gun) - qdel(src) - return - gun.create_portal(src, get_turf(src)) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm deleted file mode 100644 index 1e638dd14d..0000000000 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ /dev/null @@ -1,669 +0,0 @@ -/proc/translate_legacy_chem_id(id) - switch (id) - if ("sacid") - return "sulphuricacid" - if ("facid") - return "fluorosulfuricacid" - if ("co2") - return "carbondioxide" - if ("mine_salve") - return "minerssalve" - else - return ckey(id) - -/obj/machinery/chem_dispenser - name = "chem dispenser" - desc = "" - density = TRUE - icon = 'icons/obj/chemical.dmi' - icon_state = "dispenser" - use_power = IDLE_POWER_USE - idle_power_usage = 40 - interaction_flags_machine = INTERACT_MACHINE_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OFFLINE - resistance_flags = FIRE_PROOF | ACID_PROOF - circuit = /obj/item/circuitboard/machine/chem_dispenser - ui_x = 565 - ui_y = 620 - - var/obj/item/stock_parts/cell/cell - var/powerefficiency = 0.1 - var/amount = 30 - var/recharge_amount = 10 - var/recharge_counter = 0 - var/mutable_appearance/beaker_overlay - var/working_state = "dispenser_working" - var/nopower_state = "dispenser_nopower" - var/has_panel_overlay = TRUE - var/obj/item/reagent_containers/beaker = null - //dispensable_reagents is copypasted in plumbing synthesizers. Please update accordingly. (I didn't make it global because that would limit custom chem dispensers) - var/list/dispensable_reagents = list( - /datum/reagent/aluminium, - /datum/reagent/bromine, - /datum/reagent/carbon, - /datum/reagent/chlorine, - /datum/reagent/copper, - /datum/reagent/consumable/ethanol, - /datum/reagent/fluorine, - /datum/reagent/hydrogen, - /datum/reagent/iodine, - /datum/reagent/iron, - /datum/reagent/lithium, - /datum/reagent/mercury, - /datum/reagent/nitrogen, - /datum/reagent/oxygen, - /datum/reagent/phosphorus, - /datum/reagent/potassium, - /datum/reagent/uranium/radium, - /datum/reagent/silicon, - /datum/reagent/silver, - /datum/reagent/sodium, - /datum/reagent/stable_plasma, - /datum/reagent/consumable/sugar, - /datum/reagent/sulfur, - /datum/reagent/toxin/acid, - /datum/reagent/water, - /datum/reagent/fuel - ) - //these become available once the manipulator has been upgraded to tier 4 (femto) - var/list/upgrade_reagents = list( - /datum/reagent/acetone, - /datum/reagent/ammonia, - /datum/reagent/ash, - /datum/reagent/diethylamine, - /datum/reagent/fuel/oil, - /datum/reagent/saltpetre - ) - var/list/emagged_reagents = list( - /datum/reagent/toxin/carpotoxin, - /datum/reagent/medicine/mine_salve, - /datum/reagent/medicine/morphine, - /datum/reagent/drug/space_drugs, - /datum/reagent/toxin - ) - - var/list/recording_recipe - - var/list/saved_recipes = list() - -/obj/machinery/chem_dispenser/Initialize() - . = ..() - dispensable_reagents = sortList(dispensable_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) - if(emagged_reagents) - emagged_reagents = sortList(emagged_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) - if(upgrade_reagents) - upgrade_reagents = sortList(upgrade_reagents, GLOBAL_PROC_REF(cmp_reagents_asc)) - update_icon() - -/obj/machinery/chem_dispenser/Destroy() - QDEL_NULL(beaker) - QDEL_NULL(cell) - return ..() - -/obj/machinery/chem_dispenser/examine(mob/user) - . = ..() - if(panel_open) - . += "[src]'s maintenance hatch is open!" - if(in_range(user, src) || isobserver(user)) - . += "The status display reads:\n\ - Recharging [recharge_amount] power units per interval.\n\ - Power efficiency increased by [round((powerefficiency*1000)-100, 1)]%." - -/obj/machinery/chem_dispenser/process() - if (recharge_counter >= 4) - if(!is_operational()) - return - var/usedpower = cell.give(recharge_amount) - if(usedpower) - use_power(250*recharge_amount) - recharge_counter = 0 - return - recharge_counter++ - -/obj/machinery/chem_dispenser/proc/display_beaker() - var/mutable_appearance/b_o = beaker_overlay || mutable_appearance(icon, "disp_beaker") - b_o.pixel_y = -4 - b_o.pixel_x = -7 - return b_o - -/obj/machinery/chem_dispenser/proc/work_animation() - if(working_state) - flick(working_state,src) - -/obj/machinery/chem_dispenser/update_icon() - cut_overlays() - icon_state = "[(nopower_state && !powered()) ? nopower_state : initial(icon_state)]" - if(has_panel_overlay && panel_open) - add_overlay(mutable_appearance(icon, "[initial(icon_state)]_panel-o")) - - if(beaker) - beaker_overlay = display_beaker() - add_overlay(beaker_overlay) - - - -/obj/machinery/chem_dispenser/emag_act(mob/user) - if(obj_flags & EMAGGED) - to_chat(user, "[src] has no functional safeties to emag.") - return - to_chat(user, "I short out [src]'s safeties.") - dispensable_reagents |= emagged_reagents//add the emagged reagents to the dispensable ones - obj_flags |= EMAGGED - -/obj/machinery/chem_dispenser/ex_act(severity, target) - if(severity < 3) - ..() - -/obj/machinery/chem_dispenser/contents_explosion(severity, target) - ..() - if(beaker) - beaker.ex_act(severity, target) - -/obj/machinery/chem_dispenser/handle_atom_del(atom/A) - ..() - if(A == beaker) - beaker = null - cut_overlays() - -/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "chem_dispenser", name, ui_x, ui_y, master_ui, state) - if(user.hallucinating()) - ui.set_autoupdate(FALSE) //to not ruin the immersion by constantly changing the fake chemicals - ui.open() - -/obj/machinery/chem_dispenser/ui_data(mob/user) - var/data = list() - data["amount"] = amount - data["energy"] = cell.charge ? cell.charge * powerefficiency : "0" //To prevent NaN in the UI. - data["maxEnergy"] = cell.maxcharge * powerefficiency - data["isBeakerLoaded"] = beaker ? 1 : 0 - - var/beakerContents[0] - var/beakerCurrentVolume = 0 - if(beaker && beaker.reagents && beaker.reagents.reagent_list.len) - for(var/datum/reagent/R in beaker.reagents.reagent_list) - beakerContents.Add(list(list("name" = R.name, "volume" = R.volume))) // list in a list because Byond merges the first list... - beakerCurrentVolume += R.volume - data["beakerContents"] = beakerContents - - if (beaker) - data["beakerCurrentVolume"] = beakerCurrentVolume - data["beakerMaxVolume"] = beaker.volume - data["beakerTransferAmounts"] = beaker.possible_transfer_amounts - else - data["beakerCurrentVolume"] = null - data["beakerMaxVolume"] = null - data["beakerTransferAmounts"] = null - - var/chemicals[0] - var/is_hallucinating = FALSE - if(user.hallucinating()) - is_hallucinating = TRUE - for(var/re in dispensable_reagents) - var/datum/reagent/temp = GLOB.chemical_reagents_list[re] - if(temp) - var/chemname = temp.name - if(is_hallucinating && prob(5)) - chemname = "[pick_list_replacements("hallucination.json", "chemicals")]" - chemicals.Add(list(list("title" = chemname, "id" = ckey(temp.name)))) - data["chemicals"] = chemicals - data["recipes"] = saved_recipes - - data["recordingRecipe"] = recording_recipe - return data - -/obj/machinery/chem_dispenser/ui_act(action, params) - if(..()) - return - switch(action) - if("amount") - if(!is_operational() || QDELETED(beaker)) - return - var/target = text2num(params["target"]) - if(target in beaker.possible_transfer_amounts) - amount = target - work_animation() - . = TRUE - if("dispense") - if(!is_operational() || QDELETED(cell)) - return - var/reagent_name = params["reagent"] - if(!recording_recipe) - var/reagent = GLOB.name2reagent[reagent_name] - if(beaker && dispensable_reagents.Find(reagent)) - var/datum/reagents/R = beaker.reagents - var/free = R.maximum_volume - R.total_volume - var/actual = min(amount, (cell.charge * powerefficiency)*10, free) - - if(!cell.use(actual / powerefficiency)) - say("Not enough energy to complete operation!") - return - R.add_reagent(reagent, actual) - - work_animation() - else - recording_recipe[reagent_name] += amount - . = TRUE - if("remove") - if(!is_operational() || recording_recipe) - return - var/amount = text2num(params["amount"]) - if(beaker && (amount in beaker.possible_transfer_amounts)) - beaker.reagents.remove_all(amount) - work_animation() - . = TRUE - if("eject") - replace_beaker(usr) - . = TRUE - if("dispense_recipe") - if(!is_operational() || QDELETED(cell)) - return - var/list/chemicals_to_dispense = saved_recipes[params["recipe"]] - if(!LAZYLEN(chemicals_to_dispense)) - return - for(var/key in chemicals_to_dispense) - var/reagent = GLOB.name2reagent[translate_legacy_chem_id(key)] - var/dispense_amount = chemicals_to_dispense[key] - if(!dispensable_reagents.Find(reagent)) - return - if(!recording_recipe) - if(!beaker) - return - var/datum/reagents/R = beaker.reagents - var/free = R.maximum_volume - R.total_volume - var/actual = min(dispense_amount, (cell.charge * powerefficiency)*10, free) - if(actual) - if(!cell.use(actual / powerefficiency)) - say("Not enough energy to complete operation!") - return - R.add_reagent(reagent, actual) - work_animation() - else - recording_recipe[key] += dispense_amount - . = TRUE - if("clear_recipes") - if(!is_operational()) - return - var/yesno = alert("Clear all recipes?",, "Yes","No") - if(yesno == "Yes") - saved_recipes = list() - . = TRUE - if("record_recipe") - if(!is_operational()) - return - recording_recipe = list() - . = TRUE - if("save_recording") - if(!is_operational()) - return - var/name = stripped_input(usr,"Name","What do you want to name this recipe?", "Recipe", MAX_NAME_LEN) - if(!usr.canUseTopic(src, !issilicon(usr))) - return - if(saved_recipes[name] && alert("\"[name]\" already exists, do you want to overwrite it?",, "Yes", "No") == "No") - return - if(name && recording_recipe) - for(var/reagent in recording_recipe) - var/reagent_id = GLOB.name2reagent[translate_legacy_chem_id(reagent)] - if(!dispensable_reagents.Find(reagent_id)) - visible_message("[src] buzzes.", "I hear a faint buzz.") - to_chat(usr, "[src] cannot find [reagent]!") - playsound(src, 'sound/blank.ogg', 50, TRUE) - return - saved_recipes[name] = recording_recipe - recording_recipe = null - . = TRUE - if("cancel_recording") - if(!is_operational()) - return - recording_recipe = null - . = TRUE - -/obj/machinery/chem_dispenser/attackby(obj/item/I, mob/user, params) - if(default_unfasten_wrench(user, I)) - return - if(default_deconstruction_screwdriver(user, icon_state, icon_state, I)) - update_icon() - return - if(default_deconstruction_crowbar(I)) - return - if(istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container()) - var/obj/item/reagent_containers/B = I - . = TRUE //no afterattack - if(!user.transferItemToLoc(B, src)) - return - replace_beaker(user, B) - to_chat(user, "I add [B] to [src].") - updateUsrDialog() - update_icon() - else if(user.used_intent.type != INTENT_HARM && !istype(I, /obj/item/card/emag)) - to_chat(user, "I can't load [I] into [src]!") - return ..() - else - return ..() - -/obj/machinery/chem_dispenser/get_cell() - return cell - -/obj/machinery/chem_dispenser/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - var/list/datum/reagents/R = list() - var/total = min(rand(7,15), FLOOR(cell.charge*powerefficiency, 1)) - var/datum/reagents/Q = new(total*10) - if(beaker && beaker.reagents) - R += beaker.reagents - for(var/i in 1 to total) - Q.add_reagent(pick(dispensable_reagents), 10) - R += Q - chem_splash(get_turf(src), 3, R) - if(beaker && beaker.reagents) - beaker.reagents.remove_all() - cell.use(total/powerefficiency) - cell.emp_act(severity) - work_animation() - visible_message("[src] malfunctions, spraying chemicals everywhere!") - -/obj/machinery/chem_dispenser/RefreshParts() - recharge_amount = initial(recharge_amount) - var/newpowereff = 0.0666666 - for(var/obj/item/stock_parts/cell/P in component_parts) - cell = P - for(var/obj/item/stock_parts/matter_bin/M in component_parts) - newpowereff += 0.0166666666*M.rating - for(var/obj/item/stock_parts/capacitor/C in component_parts) - recharge_amount *= C.rating - for(var/obj/item/stock_parts/manipulator/M in component_parts) - if (M.rating > 3) - dispensable_reagents |= upgrade_reagents - powerefficiency = round(newpowereff, 0.01) - -/obj/machinery/chem_dispenser/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) - if(beaker) - beaker.forceMove(drop_location()) - if(user && Adjacent(user) && !issiliconoradminghost(user)) - user.put_in_hands(beaker) - if(new_beaker) - beaker = new_beaker - else - beaker = null - update_icon() - return TRUE - -/obj/machinery/chem_dispenser/on_deconstruction() - cell = null - if(beaker) - beaker.forceMove(drop_location()) - beaker = null - return ..() - -/obj/machinery/chem_dispenser/AltClick(mob/living/user) - ..() - if(istype(user) && user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - replace_beaker(user) - -/obj/machinery/chem_dispenser/drinks/Initialize() - . = ..() - AddComponent(/datum/component/simple_rotation, ROTATION_ALTCLICK | ROTATION_CLOCKWISE) - -/obj/machinery/chem_dispenser/drinks/setDir() - var/old = dir - . = ..() - if(dir != old) - update_icon() // the beaker needs to be re-positioned if we rotate - -/obj/machinery/chem_dispenser/drinks/display_beaker() - var/mutable_appearance/b_o = beaker_overlay || mutable_appearance(icon, "disp_beaker") - switch(dir) - if(NORTH) - b_o.pixel_y = 7 - b_o.pixel_x = rand(-9, 9) - if(EAST) - b_o.pixel_x = 4 - b_o.pixel_y = rand(-5, 7) - if(WEST) - b_o.pixel_x = -5 - b_o.pixel_y = rand(-5, 7) - else//SOUTH - b_o.pixel_y = -7 - b_o.pixel_x = rand(-9, 9) - return b_o - -/obj/machinery/chem_dispenser/drinks - name = "soda dispenser" - desc = "" - icon = 'icons/obj/chemical.dmi' - icon_state = "soda_dispenser" - has_panel_overlay = FALSE - amount = 10 - pixel_y = 6 - layer = WALL_OBJ_LAYER - circuit = /obj/item/circuitboard/machine/chem_dispenser/drinks - working_state = null - nopower_state = null - pass_flags = PASSTABLE - dispensable_reagents = list( - /datum/reagent/water, - /datum/reagent/consumable/ice, - /datum/reagent/consumable/coffee, - /datum/reagent/consumable/cream, - /datum/reagent/consumable/tea, - /datum/reagent/consumable/icetea, - /datum/reagent/consumable/space_cola, - /datum/reagent/consumable/spacemountainwind, - /datum/reagent/consumable/dr_gibb, - /datum/reagent/consumable/space_up, - /datum/reagent/consumable/tonic, - /datum/reagent/consumable/sodawater, - /datum/reagent/consumable/lemon_lime, - /datum/reagent/consumable/pwr_game, - /datum/reagent/consumable/shamblers, - /datum/reagent/consumable/sugar, - /datum/reagent/consumable/orangejuice, - /datum/reagent/consumable/grenadine, - /datum/reagent/consumable/limejuice, - /datum/reagent/consumable/tomatojuice, - /datum/reagent/consumable/lemonjuice, - /datum/reagent/consumable/menthol - ) - upgrade_reagents = null - emagged_reagents = list( - /datum/reagent/consumable/ethanol/thirteenloko, - /datum/reagent/consumable/ethanol/whiskey_cola, - /datum/reagent/toxin/mindbreaker, - /datum/reagent/toxin/staminatoxin - ) - -/obj/machinery/chem_dispenser/drinks/fullupgrade //fully ugpraded stock parts, emagged - desc = "" - obj_flags = CAN_BE_HIT | EMAGGED - flags_1 = NODECONSTRUCT_1 - -/obj/machinery/chem_dispenser/drinks/fullupgrade/Initialize() - . = ..() - dispensable_reagents |= emagged_reagents //adds emagged reagents - component_parts = list() - component_parts += new /obj/item/circuitboard/machine/chem_dispenser/drinks(null) - component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null) - component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null) - component_parts += new /obj/item/stock_parts/capacitor/quadratic(null) - component_parts += new /obj/item/stock_parts/manipulator/femto(null) - component_parts += new /obj/item/stack/sheet/glass(null) - component_parts += new /obj/item/stock_parts/cell/bluespace(null) - RefreshParts() - -/obj/machinery/chem_dispenser/drinks/beer - name = "booze dispenser" - desc = "" - icon = 'icons/obj/chemical.dmi' - icon_state = "booze_dispenser" - circuit = /obj/item/circuitboard/machine/chem_dispenser/drinks/beer - dispensable_reagents = list( - /datum/reagent/consumable/ethanol/beer, - /datum/reagent/consumable/ethanol/kahlua, - /datum/reagent/consumable/ethanol/whiskey, - /datum/reagent/consumable/ethanol/wine, - /datum/reagent/consumable/ethanol/vodka, - /datum/reagent/consumable/ethanol/gin, - /datum/reagent/consumable/ethanol/rum, - /datum/reagent/consumable/ethanol/tequila, - /datum/reagent/consumable/ethanol/vermouth, - /datum/reagent/consumable/ethanol/cognac, - /datum/reagent/consumable/ethanol/ale, - /datum/reagent/consumable/ethanol/absinthe, - /datum/reagent/consumable/ethanol/hcider, - /datum/reagent/consumable/ethanol/creme_de_menthe, - /datum/reagent/consumable/ethanol/creme_de_cacao, - /datum/reagent/consumable/ethanol/triple_sec, - /datum/reagent/consumable/ethanol/sake, - /datum/reagent/consumable/ethanol/applejack - ) - upgrade_reagents = null - emagged_reagents = list( - /datum/reagent/consumable/ethanol, - /datum/reagent/iron, - /datum/reagent/toxin/minttoxin, - /datum/reagent/consumable/ethanol/atomicbomb, - /datum/reagent/consumable/ethanol/fernet - ) - -/obj/machinery/chem_dispenser/drinks/beer/fullupgrade //fully ugpraded stock parts, emagged - desc = "" - obj_flags = CAN_BE_HIT | EMAGGED - flags_1 = NODECONSTRUCT_1 - -/obj/machinery/chem_dispenser/drinks/beer/fullupgrade/Initialize() - . = ..() - dispensable_reagents |= emagged_reagents //adds emagged reagents - component_parts = list() - component_parts += new /obj/item/circuitboard/machine/chem_dispenser/drinks/beer(null) - component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null) - component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null) - component_parts += new /obj/item/stock_parts/capacitor/quadratic(null) - component_parts += new /obj/item/stock_parts/manipulator/femto(null) - component_parts += new /obj/item/stack/sheet/glass(null) - component_parts += new /obj/item/stock_parts/cell/bluespace(null) - RefreshParts() - -/obj/machinery/chem_dispenser/mutagen - name = "mutagen dispenser" - desc = "" - dispensable_reagents = list(/datum/reagent/toxin/mutagen) - upgrade_reagents = null - emagged_reagents = list(/datum/reagent/toxin/plasma) - - -/obj/machinery/chem_dispenser/mutagensaltpeter - name = "botanical chemical dispenser" - desc = "" - flags_1 = NODECONSTRUCT_1 - - dispensable_reagents = list( - /datum/reagent/toxin/mutagen, - /datum/reagent/saltpetre, - /datum/reagent/plantnutriment/eznutriment, - /datum/reagent/plantnutriment/left4zednutriment, - /datum/reagent/plantnutriment/robustharvestnutriment, - /datum/reagent/water, - /datum/reagent/toxin/plantbgone, - /datum/reagent/toxin/plantbgone/weedkiller, - /datum/reagent/toxin/pestkiller, - /datum/reagent/medicine/cryoxadone, - /datum/reagent/ammonia, - /datum/reagent/ash, - /datum/reagent/diethylamine) - upgrade_reagents = null - -/obj/machinery/chem_dispenser/mutagensaltpeter/Initialize() - . = ..() - component_parts = list() - component_parts += new /obj/item/circuitboard/machine/chem_dispenser(null) - component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null) - component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null) - component_parts += new /obj/item/stock_parts/capacitor/quadratic(null) - component_parts += new /obj/item/stock_parts/manipulator/femto(null) - component_parts += new /obj/item/stack/sheet/glass(null) - component_parts += new /obj/item/stock_parts/cell/bluespace(null) - RefreshParts() - -/obj/machinery/chem_dispenser/fullupgrade //fully ugpraded stock parts, emagged - desc = "" - obj_flags = CAN_BE_HIT | EMAGGED - flags_1 = NODECONSTRUCT_1 - -/obj/machinery/chem_dispenser/fullupgrade/Initialize() - . = ..() - dispensable_reagents |= emagged_reagents //adds emagged reagents - component_parts = list() - component_parts += new /obj/item/circuitboard/machine/chem_dispenser(null) - component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null) - component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null) - component_parts += new /obj/item/stock_parts/capacitor/quadratic(null) - component_parts += new /obj/item/stock_parts/manipulator/femto(null) - component_parts += new /obj/item/stack/sheet/glass(null) - component_parts += new /obj/item/stock_parts/cell/bluespace(null) - RefreshParts() - -/obj/machinery/chem_dispenser/abductor - name = "reagent synthesizer" - desc = "" - icon = 'icons/obj/abductor.dmi' - icon_state = "chem_dispenser" - has_panel_overlay = FALSE - circuit = /obj/item/circuitboard/machine/chem_dispenser/abductor - working_state = null - nopower_state = null - dispensable_reagents = list( - /datum/reagent/aluminium, - /datum/reagent/bromine, - /datum/reagent/carbon, - /datum/reagent/chlorine, - /datum/reagent/copper, - /datum/reagent/consumable/ethanol, - /datum/reagent/fluorine, - /datum/reagent/hydrogen, - /datum/reagent/iodine, - /datum/reagent/iron, - /datum/reagent/lithium, - /datum/reagent/mercury, - /datum/reagent/nitrogen, - /datum/reagent/oxygen, - /datum/reagent/phosphorus, - /datum/reagent/potassium, - /datum/reagent/uranium/radium, - /datum/reagent/silicon, - /datum/reagent/silver, - /datum/reagent/sodium, - /datum/reagent/stable_plasma, - /datum/reagent/consumable/sugar, - /datum/reagent/sulfur, - /datum/reagent/toxin/acid, - /datum/reagent/water, - /datum/reagent/fuel, - /datum/reagent/acetone, - /datum/reagent/ammonia, - /datum/reagent/ash, - /datum/reagent/diethylamine, - /datum/reagent/fuel/oil, - /datum/reagent/saltpetre, - /datum/reagent/medicine/mine_salve, - /datum/reagent/medicine/morphine, - /datum/reagent/drug/space_drugs, - /datum/reagent/toxin, - /datum/reagent/toxin/plasma, - /datum/reagent/uranium - ) - -/obj/machinery/chem_dispenser/abductor/Initialize() - . = ..() - component_parts = list() - component_parts += new /obj/item/circuitboard/machine/chem_dispenser(null) - component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null) - component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null) - component_parts += new /obj/item/stock_parts/capacitor/quadratic(null) - component_parts += new /obj/item/stock_parts/manipulator/femto(null) - component_parts += new /obj/item/stack/sheet/glass(null) - component_parts += new /obj/item/stock_parts/cell/bluespace(null) - RefreshParts() diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm deleted file mode 100644 index 04f73fff7d..0000000000 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ /dev/null @@ -1,143 +0,0 @@ -/obj/machinery/chem_heater - name = "chemical heater" - density = TRUE - icon = 'icons/obj/chemical.dmi' - icon_state = "mixer0b" - use_power = IDLE_POWER_USE - idle_power_usage = 40 - resistance_flags = FIRE_PROOF | ACID_PROOF - circuit = /obj/item/circuitboard/machine/chem_heater - ui_x = 275 - ui_y = 320 - - var/obj/item/reagent_containers/beaker = null - var/target_temperature = 300 - var/heater_coefficient = 0.1 - var/on = FALSE - -/obj/machinery/chem_heater/Destroy() - QDEL_NULL(beaker) - return ..() - -/obj/machinery/chem_heater/handle_atom_del(atom/A) - . = ..() - if(A == beaker) - beaker = null - update_icon() - -/obj/machinery/chem_heater/update_icon() - if(beaker) - icon_state = "mixer1b" - else - icon_state = "mixer0b" - -/obj/machinery/chem_heater/AltClick(mob/living/user) - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - return - replace_beaker(user) - return - -/obj/machinery/chem_heater/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) - if(beaker) - beaker.forceMove(drop_location()) - if(user && Adjacent(user) && !issiliconoradminghost(user)) - user.put_in_hands(beaker) - if(new_beaker) - beaker = new_beaker - else - beaker = null - update_icon() - return TRUE - -/obj/machinery/chem_heater/RefreshParts() - heater_coefficient = 0.1 - for(var/obj/item/stock_parts/micro_laser/M in component_parts) - heater_coefficient *= M.rating - -/obj/machinery/chem_heater/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Heating reagents at [heater_coefficient*1000]% speed." - -/obj/machinery/chem_heater/process() - ..() - if(stat & NOPOWER) - return - if(on) - if(beaker && beaker.reagents.total_volume) - //keep constant with the chemical acclimator please - beaker.reagents.adjust_thermal_energy((target_temperature - beaker.reagents.chem_temp) * heater_coefficient * SPECIFIC_HEAT_DEFAULT * beaker.reagents.total_volume) - beaker.reagents.handle_reactions() - -/obj/machinery/chem_heater/attackby(obj/item/I, mob/user, params) - if(default_deconstruction_screwdriver(user, "mixer0b", "mixer0b", I)) - return - - if(default_deconstruction_crowbar(I)) - return - - if(istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container()) - . = TRUE //no afterattack - var/obj/item/reagent_containers/B = I - if(!user.transferItemToLoc(B, src)) - return - replace_beaker(user, B) - to_chat(user, "I add [B] to [src].") - updateUsrDialog() - update_icon() - return - return ..() - -/obj/machinery/chem_heater/on_deconstruction() - replace_beaker() - return ..() - -/obj/machinery/chem_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "chem_heater", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/chem_heater/ui_data() - var/data = list() - data["targetTemp"] = target_temperature - data["isActive"] = on - data["isBeakerLoaded"] = beaker ? 1 : 0 - - data["currentTemp"] = beaker ? beaker.reagents.chem_temp : null - data["beakerCurrentVolume"] = beaker ? beaker.reagents.total_volume : null - data["beakerMaxVolume"] = beaker ? beaker.volume : null - - var beakerContents[0] - if(beaker) - for(var/datum/reagent/R in beaker.reagents.reagent_list) - beakerContents.Add(list(list("name" = R.name, "volume" = R.volume))) // list in a list because Byond merges the first list... - data["beakerContents"] = beakerContents - return data - -/obj/machinery/chem_heater/ui_act(action, params) - if(..()) - return - switch(action) - if("power") - on = !on - . = TRUE - if("temperature") - var/target = params["target"] - var/adjust = text2num(params["adjust"]) - if(target == "input") - target = input("New target temperature:", name, target_temperature) as num|null - if(!isnull(target) && !..()) - . = TRUE - else if(adjust) - target = target_temperature + adjust - else if(text2num(target) != null) - target = text2num(target) - . = TRUE - if(.) - target_temperature = CLAMP(target, 0, 1000) - if("eject") - on = FALSE - replace_beaker(usr) - . = TRUE diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm deleted file mode 100644 index 6a2b1c0764..0000000000 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ /dev/null @@ -1,410 +0,0 @@ -/obj/machinery/chem_master - name = "ChemMaster 3000" - desc = "" - density = TRUE - layer = BELOW_OBJ_LAYER - icon = 'icons/obj/chemical.dmi' - icon_state = "mixer0" - use_power = IDLE_POWER_USE - idle_power_usage = 20 - resistance_flags = FIRE_PROOF | ACID_PROOF - circuit = /obj/item/circuitboard/machine/chem_master - ui_x = 465 - ui_y = 550 - - var/obj/item/reagent_containers/beaker = null - var/obj/item/storage/pill_bottle/bottle = null - var/mode = 1 - var/condi = FALSE - var/chosenPillStyle = 1 - var/screen = "home" - var/analyzeVars[0] - var/useramount = 30 // Last used amount - var/list/pillStyles = null - -/obj/machinery/chem_master/Initialize() - create_reagents(100) - - //Calculate the span tags and ids fo all the available pill icons - var/datum/asset/spritesheet/simple/assets = get_asset_datum(/datum/asset/spritesheet/simple/pills) - pillStyles = list() - for (var/x in 1 to PILL_STYLE_COUNT) - var/list/SL = list() - SL["id"] = x - SL["className"] = assets.icon_class_name("pill[x]") - pillStyles += list(SL) - - . = ..() - -/obj/machinery/chem_master/Destroy() - QDEL_NULL(beaker) - QDEL_NULL(bottle) - return ..() - -/obj/machinery/chem_master/RefreshParts() - reagents.maximum_volume = 0 - for(var/obj/item/reagent_containers/glass/beaker/B in component_parts) - reagents.maximum_volume += B.reagents.maximum_volume - -/obj/machinery/chem_master/ex_act(severity, target) - if(severity < 3) - ..() - -/obj/machinery/chem_master/contents_explosion(severity, target) - ..() - if(beaker) - beaker.ex_act(severity, target) - if(bottle) - bottle.ex_act(severity, target) - -/obj/machinery/chem_master/handle_atom_del(atom/A) - ..() - if(A == beaker) - beaker = null - reagents.clear_reagents() - update_icon() - else if(A == bottle) - bottle = null - -/obj/machinery/chem_master/update_icon() - cut_overlays() - if (stat & BROKEN) - add_overlay("waitlight") - if(beaker) - icon_state = "mixer1" - else - icon_state = "mixer0" - -/obj/machinery/chem_master/blob_act(obj/structure/blob/B) - if (prob(50)) - qdel(src) - -/obj/machinery/chem_master/attackby(obj/item/I, mob/user, params) - if(default_deconstruction_screwdriver(user, "mixer0_nopower", "mixer0", I)) - return - - else if(default_deconstruction_crowbar(I)) - return - - if(default_unfasten_wrench(user, I)) - return - if(istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container()) - . = TRUE // no afterattack - if(panel_open) - to_chat(user, "I can't use the [src.name] while its panel is opened!") - return - var/obj/item/reagent_containers/B = I - . = TRUE // no afterattack - if(!user.transferItemToLoc(B, src)) - return - replace_beaker(user, B) - to_chat(user, "I add [B] to [src].") - updateUsrDialog() - update_icon() - else if(!condi && istype(I, /obj/item/storage/pill_bottle)) - if(bottle) - to_chat(user, "A pill bottle is already loaded into [src]!") - return - if(!user.transferItemToLoc(I, src)) - return - bottle = I - to_chat(user, "I add [I] into the dispenser slot.") - updateUsrDialog() - else - return ..() - -/obj/machinery/chem_master/AltClick(mob/living/user) - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - return - replace_beaker(user) - return - -/obj/machinery/chem_master/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) - if(beaker) - beaker.forceMove(drop_location()) - if(user && Adjacent(user) && !issiliconoradminghost(user)) - user.put_in_hands(beaker) - if(new_beaker) - beaker = new_beaker - else - beaker = null - update_icon() - return TRUE - -/obj/machinery/chem_master/on_deconstruction() - replace_beaker() - if(bottle) - bottle.forceMove(drop_location()) - adjust_item_drop_location(bottle) - bottle = null - return ..() - -/obj/machinery/chem_master/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) -// var/datum/asset/assets = get_asset_datum(/datum/asset/spritesheet/simple/pills) -// assets.send(user) - - ui = new(user, src, ui_key, "chem_master", name, ui_x, ui_y, master_ui, state) - ui.open() - -//Insert our custom spritesheet css link into the html -/obj/machinery/chem_master/ui_base_html(html) - var/datum/asset/spritesheet/simple/assets = get_asset_datum(/datum/asset/spritesheet/simple/pills) - . = replacetext(html, "", assets.css_tag()) - -/obj/machinery/chem_master/ui_data(mob/user) - var/list/data = list() - data["isBeakerLoaded"] = beaker ? 1 : 0 - data["beakerCurrentVolume"] = beaker ? beaker.reagents.total_volume : null - data["beakerMaxVolume"] = beaker ? beaker.volume : null - data["mode"] = mode - data["condi"] = condi - data["screen"] = screen - data["analyzeVars"] = analyzeVars - data["chosenPillStyle"] = chosenPillStyle - data["isPillBottleLoaded"] = bottle ? 1 : 0 - if(bottle) - var/datum/component/storage/STRB = bottle.GetComponent(/datum/component/storage) - data["pillBottleCurrentAmount"] = bottle.contents.len - data["pillBottleMaxAmount"] = STRB.max_items - - var/beakerContents[0] - if(beaker) - for(var/datum/reagent/R in beaker.reagents.reagent_list) - beakerContents.Add(list(list("name" = R.name, "id" = ckey(R.name), "volume" = R.volume))) // list in a list because Byond merges the first list... - data["beakerContents"] = beakerContents - - var/bufferContents[0] - if(reagents.total_volume) - for(var/datum/reagent/N in reagents.reagent_list) - bufferContents.Add(list(list("name" = N.name, "id" = ckey(N.name), "volume" = N.volume))) // ^ - data["bufferContents"] = bufferContents - - //Calculated at init time as it never changes - data["pillStyles"] = pillStyles - return data - -/obj/machinery/chem_master/ui_act(action, params) - if(..()) - return - - if(action == "eject") - replace_beaker(usr) - return TRUE - - if(action == "ejectPillBottle") - if(!bottle) - return FALSE - bottle.forceMove(drop_location()) - adjust_item_drop_location(bottle) - bottle = null - return TRUE - - if(action == "transfer") - if(!beaker) - return FALSE - var/reagent = GLOB.name2reagent[params["id"]] - var/amount = text2num(params["amount"]) - var/to_container = params["to"] - // Custom amount - if (amount == -1) - amount = text2num(input( - "Enter the amount you want to transfer:", - name, "")) - if (amount == null || amount <= 0) - return FALSE - if (to_container == "buffer") - beaker.reagents.trans_id_to(src, reagent, amount) - return TRUE - if (to_container == "beaker" && mode) - reagents.trans_id_to(beaker, reagent, amount) - return TRUE - if (to_container == "beaker" && !mode) - reagents.remove_reagent(reagent, amount) - return TRUE - return FALSE - - if(action == "toggleMode") - mode = !mode - return TRUE - - if(action == "pillStyle") - var/id = text2num(params["id"]) - chosenPillStyle = id - return TRUE - - if(action == "create") - if(reagents.total_volume == 0) - return FALSE - var/item_type = params["type"] - // Get amount of items - var/amount = text2num(params["amount"]) - if(amount == null) - amount = text2num(input(usr, - "Max 10. Buffer content will be split evenly.", - "How many to make?", 1)) - amount = CLAMP(round(amount), 0, 10) - if (amount <= 0) - return FALSE - // Get units per item - var/vol_each = text2num(params["volume"]) - var/vol_each_text = params["volume"] - var/vol_each_max = reagents.total_volume / amount - if (item_type == "pill") - vol_each_max = min(50, vol_each_max) - else if (item_type == "patch") - vol_each_max = min(40, vol_each_max) - else if (item_type == "bottle") - vol_each_max = min(30, vol_each_max) - else if (item_type == "condimentPack") - vol_each_max = min(10, vol_each_max) - else if (item_type == "condimentBottle") - vol_each_max = min(50, vol_each_max) - else - return FALSE - if(vol_each_text == "auto") - vol_each = vol_each_max - if(vol_each == null) - vol_each = text2num(input(usr, - "Maximum [vol_each_max] units per item.", - "How many units to fill?", - vol_each_max)) - vol_each = CLAMP(round(vol_each), 0, vol_each_max) - if(vol_each <= 0) - return FALSE - // Get item name - var/name = params["name"] - var/name_has_units = item_type == "pill" || item_type == "patch" - if(!name) - var/name_default = reagents.get_master_reagent_name() - if (name_has_units) - name_default += " ([vol_each]u)" - name = stripped_input(usr, - "Name:", - "Give it a name!", - name_default, - MAX_NAME_LEN) - if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr))) - return FALSE - // Start filling - if(item_type == "pill") - var/obj/item/reagent_containers/pill/P - var/target_loc = drop_location() - var/drop_threshold = INFINITY - if(bottle) - var/datum/component/storage/STRB = bottle.GetComponent( - /datum/component/storage) - if(STRB) - drop_threshold = STRB.max_items - bottle.contents.len - for(var/i = 0; i < amount; i++) - if(i < drop_threshold) - P = new/obj/item/reagent_containers/pill(target_loc) - else - P = new/obj/item/reagent_containers/pill(drop_location()) - P.name = trim("[name] pill") - if(chosenPillStyle == RANDOM_PILL_STYLE) - P.icon_state ="pill[rand(1,21)]" - else - P.icon_state = "pill[chosenPillStyle]" - if(P.icon_state == "pill4") - P.desc = "" - adjust_item_drop_location(P) - reagents.trans_to(P, vol_each, transfered_by = usr) - return TRUE - if(item_type == "patch") - var/obj/item/reagent_containers/pill/patch/P - for(var/i = 0; i < amount; i++) - P = new/obj/item/reagent_containers/pill/patch(drop_location()) - P.name = trim("[name] patch") - adjust_item_drop_location(P) - reagents.trans_to(P, vol_each, transfered_by = usr) - return TRUE - if(item_type == "bottle") - var/obj/item/reagent_containers/glass/bottle/P - for(var/i = 0; i < amount; i++) - P = new/obj/item/reagent_containers/glass/bottle(drop_location()) - P.name = trim("[name] bottle") - adjust_item_drop_location(P) - reagents.trans_to(P, vol_each, transfered_by = usr) - return TRUE - if(item_type == "condimentPack") - var/obj/item/reagent_containers/food/condiment/pack/P - for(var/i = 0; i < amount; i++) - P = new/obj/item/reagent_containers/food/condiment/pack(drop_location()) - P.originalname = name - P.name = trim("[name] pack") - P.desc = "" - reagents.trans_to(P, vol_each, transfered_by = usr) - return TRUE - if(item_type == "condimentBottle") - var/obj/item/reagent_containers/food/condiment/P - for(var/i = 0; i < amount; i++) - P = new/obj/item/reagent_containers/food/condiment(drop_location()) - P.originalname = name - P.name = trim("[name] bottle") - reagents.trans_to(P, vol_each, transfered_by = usr) - return TRUE - return FALSE - - if(action == "analyze") - var/datum/reagent/R = GLOB.name2reagent[params["id"]] - if(R) - var/state = "Unknown" - if(initial(R.reagent_state) == 1) - state = "Solid" - else if(initial(R.reagent_state) == 2) - state = "Liquid" - else if(initial(R.reagent_state) == 3) - state = "Gas" - var/const/P = 3 //The number of seconds between life ticks - var/T = initial(R.metabolization_rate) * (60 / P) - analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold)) - screen = "analyze" - return TRUE - - if(action == "goScreen") - screen = params["screen"] - return TRUE - - return FALSE - - -/obj/machinery/chem_master/proc/isgoodnumber(num) - if(isnum(num)) - if(num > 200) - num = 200 - else if(num < 0) - num = 0 - else - num = round(num) - return num - else - return 0 - - -/obj/machinery/chem_master/adjust_item_drop_location(atom/movable/AM) // Special version for chemmasters and condimasters - if (AM == beaker) - AM.pixel_x = -8 - AM.pixel_y = 8 - return null - else if (AM == bottle) - if (length(bottle.contents)) - AM.pixel_x = -13 - else - AM.pixel_x = -7 - AM.pixel_y = -8 - return null - else - var/md5 = md5(AM.name) - for (var/i in 1 to 32) - . += hex2num(md5[i]) - . = . % 9 - AM.pixel_x = ((.%3)*6) - AM.pixel_y = -8 + (round( . / 3)*8) - -/obj/machinery/chem_master/condimaster - name = "CondiMaster 3000" - desc = "" - condi = TRUE diff --git a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm deleted file mode 100644 index 3ab7cf9169..0000000000 --- a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm +++ /dev/null @@ -1,70 +0,0 @@ -/obj/machinery/chem_dispenser/chem_synthesizer //formerly SCP-294 made by mrty, but now only for testing purposes - name = "\improper debug chemical synthesizer" - desc = "" - icon = 'icons/obj/chemical.dmi' - icon_state = "dispenser" - amount = 10 - resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF - flags_1 = NODECONSTRUCT_1 - use_power = NO_POWER_USE - ui_x = 390 - ui_y = 330 - - var/static/list/shortcuts = list( - "meth" = /datum/reagent/drug/methamphetamine - ) - -/obj/machinery/chem_dispenser/chem_synthesizer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "chem_synthesizer", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/chem_dispenser/chem_synthesizer/ui_act(action, params) - if(..()) - return - switch(action) - if("ejectBeaker") - if(beaker) - beaker.forceMove(drop_location()) - if(Adjacent(usr) && !issilicon(usr)) - usr.put_in_hands(beaker) - beaker = null - . = TRUE - if("input") - var/input_reagent = replacetext(lowertext(input("Enter the name of any reagent", "Input") as text|null), " ", "") //95% of the time, the reagent id is a lowercase/no spaces version of the name - - if (isnull(input_reagent)) - return - - if(shortcuts[input_reagent]) - input_reagent = shortcuts[input_reagent] - else - input_reagent = find_reagent(input_reagent) - if(!input_reagent) - say("REAGENT NOT FOUND") - return - else - if(!beaker) - return - else if(!beaker.reagents && !QDELETED(beaker)) - beaker.create_reagents(beaker.volume) - beaker.reagents.add_reagent(input_reagent, amount) - if("makecup") - if(beaker) - return - beaker = new /obj/item/reagent_containers/glass/beaker/bluespace(src) - visible_message("[src] dispenses a bluespace beaker.") - if("amount") - var/input = text2num(params["amount"]) - if(input) - amount = input - update_icon() - -/obj/machinery/chem_dispenser/chem_synthesizer/proc/find_reagent(input) - . = FALSE - if(GLOB.chemical_reagents_list[input]) //prefer IDs! - return input - else - return get_chem_id(input) diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm deleted file mode 100644 index 1199bf8403..0000000000 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ /dev/null @@ -1,274 +0,0 @@ -#define MAIN_SCREEN 1 -#define SYMPTOM_DETAILS 2 - -/obj/machinery/computer/pandemic - name = "PanD.E.M.I.C 2200" - desc = "" - density = TRUE - icon = 'icons/obj/chemical.dmi' - icon_state = "mixer0" - use_power = TRUE - idle_power_usage = 20 - resistance_flags = ACID_PROOF - circuit = /obj/item/circuitboard/computer/pandemic - ui_x = 700 - ui_y = 500 - - var/wait - var/mode = MAIN_SCREEN - var/datum/symptom/selected_symptom - var/obj/item/reagent_containers/beaker - -/obj/machinery/computer/pandemic/Initialize() - . = ..() - update_icon() - -/obj/machinery/computer/pandemic/Destroy() - QDEL_NULL(beaker) - return ..() - -/obj/machinery/computer/pandemic/examine(mob/user) - . = ..() - if(beaker) - var/is_close - if(Adjacent(user)) //don't reveal exactly what's inside unless they're close enough to see the UI anyway. - . += "It contains \a [beaker]." - is_close = TRUE - else - . += "It has a beaker inside it." - . += "Alt-click to eject [is_close ? beaker : "the beaker"]." - -/obj/machinery/computer/pandemic/AltClick(mob/user) - . = ..() - if(user.canUseTopic(src, BE_CLOSE)) - eject_beaker() - -/obj/machinery/computer/pandemic/handle_atom_del(atom/A) - if(A == beaker) - beaker = null - update_icon() - return ..() - -/obj/machinery/computer/pandemic/proc/get_by_index(thing, index) - if(!beaker || !beaker.reagents) - return - var/datum/reagent/blood/B = locate() in beaker.reagents.reagent_list - if(B && B.data[thing]) - return B.data[thing][index] - -/obj/machinery/computer/pandemic/proc/get_virus_id_by_index(index) - var/datum/disease/D = get_by_index("viruses", index) - if(D) - return D.GetDiseaseID() - -/obj/machinery/computer/pandemic/proc/get_viruses_data(datum/reagent/blood/B) - . = list() - var/list/V = B.get_diseases() - var/index = 1 - for(var/virus in V) - var/datum/disease/D = virus - if(!istype(D) || D.visibility_flags & HIDDEN_PANDEMIC) - continue - - var/list/this = list() - this["name"] = D.name - if(istype(D, /datum/disease/advance)) - var/datum/disease/advance/A = D - var/disease_name = SSdisease.get_disease_name(A.GetDiseaseID()) - if((disease_name == "Unknown") && A.mutable) - this["can_rename"] = TRUE - this["name"] = disease_name - this["is_adv"] = TRUE - this["symptoms"] = list() - var/symptom_index = 1 - for(var/symptom in A.symptoms) - var/datum/symptom/S = symptom - var/list/this_symptom = list() - this_symptom["name"] = S.name - this_symptom["sym_index"] = symptom_index - symptom_index++ - this["symptoms"] += list(this_symptom) - this["resistance"] = A.totalResistance() - this["stealth"] = A.totalStealth() - this["stage_speed"] = A.totalStageSpeed() - this["transmission"] = A.totalTransmittable() - this["index"] = index++ - this["agent"] = D.agent - this["description"] = D.desc || "none" - this["spread"] = D.spread_text || "none" - this["cure"] = D.cure_text || "none" - - . += list(this) - -/obj/machinery/computer/pandemic/proc/get_symptom_data(datum/symptom/S) - . = list() - var/list/this = list() - this["name"] = S.name - this["desc"] = S.desc - this["stealth"] = S.stealth - this["resistance"] = S.resistance - this["stage_speed"] = S.stage_speed - this["transmission"] = S.transmittable - this["level"] = S.level - this["neutered"] = S.neutered - this["threshold_desc"] = S.threshold_desc - . += this - -/obj/machinery/computer/pandemic/proc/get_resistance_data(datum/reagent/blood/B) - . = list() - if(!islist(B.data["resistances"])) - return - var/list/resistances = B.data["resistances"] - for(var/id in resistances) - var/list/this = list() - var/datum/disease/D = SSdisease.archive_diseases[id] - if(D) - this["id"] = id - this["name"] = D.name - - . += list(this) - -/obj/machinery/computer/pandemic/proc/reset_replicator_cooldown() - wait = FALSE - update_icon() - playsound(src, 'sound/blank.ogg', 30, TRUE) - -/obj/machinery/computer/pandemic/update_icon() - if(stat & BROKEN) - icon_state = (beaker ? "mixer1_b" : "mixer0_b") - return - - icon_state = "mixer[(beaker) ? "1" : "0"][powered() ? "" : "_nopower"]" - if(wait) - add_overlay("waitlight") - else - cut_overlays() - -/obj/machinery/computer/pandemic/proc/eject_beaker() - if(beaker) - beaker.forceMove(drop_location()) - beaker = null - update_icon() - -/obj/machinery/computer/pandemic/ui_interact(mob/user, ui_key = "main", datum/tgui/ui, force_open = FALSE, datum/tgui/master_ui, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "pandemic", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/computer/pandemic/ui_data(mob/user) - var/list/data = list() - data["is_ready"] = !wait - data["mode"] = mode - switch(mode) - if(MAIN_SCREEN) - if(beaker) - data["has_beaker"] = TRUE - if(!beaker.reagents.total_volume || !beaker.reagents.reagent_list) - data["beaker_empty"] = TRUE - var/datum/reagent/blood/B = locate() in beaker.reagents.reagent_list - if(B) - data["has_blood"] = TRUE - data[/datum/reagent/blood] = list() - data[/datum/reagent/blood]["dna"] = B.data["blood_DNA"] || "none" - data[/datum/reagent/blood]["type"] = B.data["blood_type"] || "none" - data["viruses"] = get_viruses_data(B) - data["resistances"] = get_resistance_data(B) - if(SYMPTOM_DETAILS) - data["symptom"] = get_symptom_data(selected_symptom) - - return data - -/obj/machinery/computer/pandemic/ui_act(action, params) - if(..()) - return - switch(action) - if("eject_beaker") - eject_beaker() - . = TRUE - if("empty_beaker") - if(beaker) - beaker.reagents.clear_reagents() - . = TRUE - if("empty_eject_beaker") - if(beaker) - beaker.reagents.clear_reagents() - eject_beaker() - . = TRUE - if("rename_disease") - var/id = get_virus_id_by_index(text2num(params["index"])) - var/datum/disease/advance/A = SSdisease.archive_diseases[id] - if(!A.mutable) - return - if(A) - var/new_name = sanitize_name(stripped_input(usr, "Name the disease", "New name", "", MAX_NAME_LEN)) - if(!new_name || ..()) - return - A.AssignName(new_name) - . = TRUE - if("create_culture_bottle") - if (wait) - return - var/id = get_virus_id_by_index(text2num(params["index"])) - var/datum/disease/advance/A = SSdisease.archive_diseases[id] - if(!istype(A) || !A.mutable) - to_chat(usr, "ERROR: Cannot replicate virus strain.") - return - A = A.Copy() - var/list/data = list("viruses" = list(A)) - var/obj/item/reagent_containers/glass/bottle/B = new(drop_location()) - B.name = "[A.name] culture bottle" - B.desc = "" - B.reagents.add_reagent(/datum/reagent/blood, 20, data) - wait = TRUE - update_icon() - var/turf/source_turf = get_turf(src) - log_virus("A culture bottle was printed for the virus [A.admin_details()] at [loc_name(source_turf)] by [key_name(usr)]") - addtimer(CALLBACK(src, PROC_REF(reset_replicator_cooldown)), 50) - . = TRUE - if("create_vaccine_bottle") - if (wait) - return - var/id = params["index"] - var/datum/disease/D = SSdisease.archive_diseases[id] - var/obj/item/reagent_containers/glass/bottle/B = new(drop_location()) - B.name = "[D.name] vaccine bottle" - B.reagents.add_reagent(/datum/reagent/vaccine, 15, list(id)) - wait = TRUE - update_icon() - addtimer(CALLBACK(src, PROC_REF(reset_replicator_cooldown)), 200) - . = TRUE - if("symptom_details") - var/picked_symptom_index = text2num(params["picked_symptom"]) - var/index = text2num(params["index"]) - var/datum/disease/advance/A = get_by_index("viruses", index) - var/datum/symptom/S = A.symptoms[picked_symptom_index] - mode = SYMPTOM_DETAILS - selected_symptom = S - . = TRUE - if("back") - mode = MAIN_SCREEN - selected_symptom = null - . = TRUE - - -/obj/machinery/computer/pandemic/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container()) - . = TRUE //no afterattack - if(stat & (NOPOWER|BROKEN)) - return - if(beaker) - to_chat(user, "A container is already loaded into [src]!") - return - if(!user.transferItemToLoc(I, src)) - return - - beaker = I - to_chat(user, "I insert [I] into [src].") - update_icon() - else - return ..() - -/obj/machinery/computer/pandemic/on_deconstruction() - eject_beaker() - . = ..() diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm deleted file mode 100644 index 8be16aa832..0000000000 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ /dev/null @@ -1,317 +0,0 @@ -#define MILK_TO_BUTTER_COEFF 15 - -/obj/machinery/reagentgrinder - name = "\improper All-In-One Grinder" - desc = "" - icon = 'icons/obj/kitchen.dmi' - icon_state = "juicer1" - layer = BELOW_OBJ_LAYER - use_power = IDLE_POWER_USE - idle_power_usage = 5 - active_power_usage = 100 - circuit = /obj/item/circuitboard/machine/reagentgrinder - pass_flags = PASSTABLE - resistance_flags = ACID_PROOF - var/operating = FALSE - var/obj/item/reagent_containers/beaker = null - var/limit = 10 - var/speed = 1 - var/list/holdingitems - - var/static/radial_examine = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_examine") - var/static/radial_eject = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_eject") - var/static/radial_grind = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_grind") - var/static/radial_juice = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_juice") - var/static/radial_mix = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_mix") - -/obj/machinery/reagentgrinder/Initialize() - . = ..() - holdingitems = list() - beaker = new /obj/item/reagent_containers/glass/beaker/large(src) - beaker.desc += " May contain blended dust. Don't breathe this in!" - -/obj/machinery/reagentgrinder/constructed/Initialize() - . = ..() - holdingitems = list() - QDEL_NULL(beaker) - update_icon() - -/obj/machinery/reagentgrinder/Destroy() - if(beaker) - beaker.forceMove(drop_location()) - drop_all_items() - return ..() - -/obj/machinery/reagentgrinder/contents_explosion(severity, target) - if(beaker) - beaker.ex_act(severity, target) - -/obj/machinery/reagentgrinder/RefreshParts() - speed = 1 - for(var/obj/item/stock_parts/manipulator/M in component_parts) - speed = M.rating - -/obj/machinery/reagentgrinder/examine(mob/user) - . = ..() - if(!in_range(user, src) && !issilicon(user) && !isobserver(user)) - . += "You're too far away to examine [src]'s contents and display!" - return - - if(operating) - . += "\The [src] is operating." - return - - if(beaker || length(holdingitems)) - . += "\The [src] contains:" - if(beaker) - . += "- \A [beaker]." - for(var/i in holdingitems) - var/obj/item/O = i - . += "- \A [O.name]." - - if(!(stat & (NOPOWER|BROKEN))) - . += "The status display reads:\n"+\ - "- Grinding reagents at [speed*100]%." - if(beaker) - for(var/datum/reagent/R in beaker.reagents.reagent_list) - . += "- [R.volume] units of [R.name]." - -/obj/machinery/reagentgrinder/handle_atom_del(atom/A) - . = ..() - if(A == beaker) - beaker = null - update_icon() - if(holdingitems[A]) - holdingitems -= A - -/obj/machinery/reagentgrinder/proc/drop_all_items() - for(var/i in holdingitems) - var/atom/movable/AM = i - AM.forceMove(drop_location()) - holdingitems = list() - -/obj/machinery/reagentgrinder/update_icon() - if(beaker) - icon_state = "juicer1" - else - icon_state = "juicer0" - -/obj/machinery/reagentgrinder/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) - if(beaker) - beaker.forceMove(drop_location()) - if(user && Adjacent(user) && !issiliconoradminghost(user)) - user.put_in_hands(beaker) - if(new_beaker) - beaker = new_beaker - else - beaker = null - update_icon() - return TRUE - -/obj/machinery/reagentgrinder/attackby(obj/item/I, mob/user, params) - //You can only screw open empty grinder - if(!beaker && !length(holdingitems) && default_deconstruction_screwdriver(user, icon_state, icon_state, I)) - return - - if(default_deconstruction_crowbar(I)) - return - - if(default_unfasten_wrench(user, I)) - return - - if(panel_open) //Can't insert objects when its screwed open - return TRUE - - if (istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container()) - var/obj/item/reagent_containers/B = I - . = TRUE //no afterattack - if(!user.transferItemToLoc(B, src)) - return - replace_beaker(user, B) - to_chat(user, "I add [B] to [src].") - update_icon() - return TRUE //no afterattack - - if(holdingitems.len >= limit) - to_chat(user, "[src] is filled to capacity!") - return TRUE - - //Fill machine with a bag! - if(istype(I, /obj/item/storage/bag)) - var/list/inserted = list() - if(SEND_SIGNAL(I, COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/grown, src, limit - length(holdingitems), null, null, user, inserted)) - for(var/i in inserted) - holdingitems[i] = TRUE - if(!I.contents.len) - to_chat(user, "I empty [I] into [src].") - else - to_chat(user, "I fill [src] to the brim.") - return TRUE - - if(!I.grind_results && !I.juice_results) - if(user.used_intent.type == INTENT_HARM) - return ..() - else - to_chat(user, "I cannot grind [I] into reagents!") - return TRUE - - if(!I.grind_requirements(src)) //Error messages should be in the objects' definitions - return - - if(user.transferItemToLoc(I, src)) - to_chat(user, "I add [I] to [src].") - holdingitems[I] = TRUE - return FALSE - -/obj/machinery/reagentgrinder/ui_interact(mob/user) // The microwave Menu //I am reasonably certain that this is not a microwave - . = ..() - - if(operating || !user.canUseTopic(src, !issilicon(user))) - return - - var/list/options = list() - - if(beaker || length(holdingitems)) - options["eject"] = radial_eject - - if(isAI(user)) - if(stat & NOPOWER) - return - options["examine"] = radial_examine - - // if there is no power or it's broken, the procs will fail but the buttons will still show - if(length(holdingitems)) - options["grind"] = radial_grind - options["juice"] = radial_juice - else if(beaker?.reagents.total_volume) - options["mix"] = radial_mix - - var/choice - - if(length(options) < 1) - return - if(length(options) == 1) - for(var/key in options) - choice = key - else - choice = show_radial_menu(user, src, options, require_near = !issilicon(user)) - - // post choice verification - if(operating || (isAI(user) && stat & NOPOWER) || !user.canUseTopic(src, !issilicon(user))) - return - - switch(choice) - if("eject") - eject(user) - if("grind") - grind(user) - if("juice") - juice(user) - if("mix") - mix(user) - if("examine") - examine(user) - -/obj/machinery/reagentgrinder/proc/eject(mob/user) - for(var/i in holdingitems) - var/obj/item/O = i - O.forceMove(drop_location()) - holdingitems -= O - if(beaker) - replace_beaker(user) - -/obj/machinery/reagentgrinder/proc/remove_object(obj/item/O) - holdingitems -= O - qdel(O) - -/obj/machinery/reagentgrinder/proc/shake_for(duration) - var/offset = prob(50) ? -2 : 2 - var/old_pixel_x = pixel_x - animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = -1) //start shaking - addtimer(CALLBACK(src, PROC_REF(stop_shaking), old_pixel_x), duration) - -/obj/machinery/reagentgrinder/proc/stop_shaking(old_px) - animate(src) - pixel_x = old_px - -/obj/machinery/reagentgrinder/proc/operate_for(time, silent = FALSE, juicing = FALSE) - shake_for(time / speed) - operating = TRUE - if(!silent) - if(!juicing) - playsound(src, 'sound/blank.ogg', 50, TRUE) - else - playsound(src, 'sound/blank.ogg', 20, TRUE) - addtimer(CALLBACK(src, PROC_REF(stop_operating)), time / speed) - -/obj/machinery/reagentgrinder/proc/stop_operating() - operating = FALSE - -/obj/machinery/reagentgrinder/proc/juice() - power_change() - if(!beaker || stat & (NOPOWER|BROKEN) || beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - return - operate_for(50, juicing = TRUE) - for(var/obj/item/i in holdingitems) - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - var/obj/item/I = i - check_trash(I) - if(I.juice_results) - juice_item(I) - -/obj/machinery/reagentgrinder/proc/juice_item(obj/item/I) //Juicing results can be found in respective object definitions - if(I.on_juice(src) == -1) - to_chat(usr, "[src] shorts out as it tries to juice up [I], and transfers it back to storage.") - return - beaker.reagents.add_reagent_list(I.juice_results) - remove_object(I) - -/obj/machinery/reagentgrinder/proc/grind(mob/user) - power_change() - if(!beaker || stat & (NOPOWER|BROKEN) || beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - return - operate_for(60) - for(var/i in holdingitems) - if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - var/obj/item/I = i - check_trash(I) - if(I.grind_results) - grind_item(i, user) - -/obj/machinery/reagentgrinder/proc/grind_item(obj/item/I, mob/user) //Grind results can be found in respective object definitions - if(I.on_grind(src) == -1) //Call on_grind() to change amount as needed, and stop grinding the item if it returns -1 - to_chat(usr, "[src] shorts out as it tries to grind up [I], and transfers it back to storage.") - return - beaker.reagents.add_reagent_list(I.grind_results) - if(I.reagents) - I.reagents.trans_to(beaker, I.reagents.total_volume, transfered_by = user) - remove_object(I) - -/obj/machinery/reagentgrinder/proc/check_trash(obj/item/I) - if (istype(I, /obj/item/reagent_containers/food/snacks)) - var/obj/item/reagent_containers/food/snacks/R = I - if (R.trash) - R.generate_trash(get_turf(src)) - -/obj/machinery/reagentgrinder/proc/mix(mob/user) - //For butter and other things that would change upon shaking or mixing - power_change() - if(!beaker || stat & (NOPOWER|BROKEN)) - return - operate_for(50, juicing = TRUE) - addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/reagentgrinder, mix_complete)), 50) - -/obj/machinery/reagentgrinder/proc/mix_complete() - if(beaker?.reagents.total_volume) - //Recipe to make Butter - var/butter_amt = FLOOR(beaker.reagents.get_reagent_amount(/datum/reagent/consumable/milk) / MILK_TO_BUTTER_COEFF, 1) - beaker.reagents.remove_reagent(/datum/reagent/consumable/milk, MILK_TO_BUTTER_COEFF * butter_amt) - for(var/i in 1 to butter_amt) - new /obj/item/reagent_containers/food/snacks/butter(drop_location()) - //Recipe to make Mayonnaise - if (beaker.reagents.has_reagent(/datum/reagent/consumable/eggyolk)) - var/amount = beaker.reagents.get_reagent_amount(/datum/reagent/consumable/eggyolk) - beaker.reagents.remove_reagent(/datum/reagent/consumable/eggyolk, amount) - beaker.reagents.add_reagent(/datum/reagent/consumable/mayonnaise, amount) diff --git a/code/modules/reagents/chemistry/machinery/smoke_machine.dm b/code/modules/reagents/chemistry/machinery/smoke_machine.dm deleted file mode 100644 index dcfd6da1cd..0000000000 --- a/code/modules/reagents/chemistry/machinery/smoke_machine.dm +++ /dev/null @@ -1,155 +0,0 @@ -#define REAGENTS_BASE_VOLUME 100 // actual volume is REAGENTS_BASE_VOLUME plus REAGENTS_BASE_VOLUME * rating for each matterbin - -/obj/machinery/smoke_machine - name = "smoke machine" - desc = "" - icon = 'icons/obj/chemical.dmi' - icon_state = "smoke0" - density = TRUE - circuit = /obj/item/circuitboard/machine/smoke_machine - ui_x = 450 - ui_y = 350 - - var/efficiency = 10 - var/on = FALSE - var/cooldown = 0 - var/screen = "home" - var/useramount = 30 // Last used amount - var/setting = 1 // displayed range is 3 * setting - var/max_range = 3 // displayed max range is 3 * max range - -/datum/effect_system/smoke_spread/chem/smoke_machine/set_up(datum/reagents/carry, setting=1, efficiency=10, loc, silent=FALSE) - amount = setting - carry.copy_to(chemholder, 20) - carry.remove_any(amount * 16 / efficiency) - location = loc - -/datum/effect_system/smoke_spread/chem/smoke_machine - effect_type = /obj/effect/particle_effect/smoke/chem/smoke_machine - -/obj/effect/particle_effect/smoke/chem/smoke_machine - opaque = FALSE - alpha = 100 - -/obj/machinery/smoke_machine/Initialize() - . = ..() - create_reagents(REAGENTS_BASE_VOLUME) - AddComponent(/datum/component/plumbing/simple_demand) - for(var/obj/item/stock_parts/matter_bin/B in component_parts) - reagents.maximum_volume += REAGENTS_BASE_VOLUME * B.rating - -/obj/machinery/smoke_machine/update_icon() - if((!is_operational()) || (!on) || (reagents.total_volume == 0)) - if (panel_open) - icon_state = "smoke0-o" - else - icon_state = "smoke0" - else - icon_state = "smoke1" - return ..() - -/obj/machinery/smoke_machine/RefreshParts() - var/new_volume = REAGENTS_BASE_VOLUME - for(var/obj/item/stock_parts/matter_bin/B in component_parts) - new_volume += REAGENTS_BASE_VOLUME * B.rating - if(!reagents) - create_reagents(new_volume) - reagents.maximum_volume = new_volume - if(new_volume < reagents.total_volume) - reagents.reaction(loc, TOUCH) // if someone manages to downgrade it without deconstructing - reagents.clear_reagents() - efficiency = 9 - for(var/obj/item/stock_parts/capacitor/C in component_parts) - efficiency += C.rating - max_range = 1 - for(var/obj/item/stock_parts/manipulator/M in component_parts) - max_range += M.rating - max_range = max(3, max_range) - -/obj/machinery/smoke_machine/process() - ..() - if(!is_operational()) - return - if(reagents.total_volume == 0) - on = FALSE - update_icon() - return - var/turf/T = get_turf(src) - var/smoke_test = locate(/obj/effect/particle_effect/smoke) in T - if(on && !smoke_test) - update_icon() - var/datum/effect_system/smoke_spread/chem/smoke_machine/smoke = new() - smoke.set_up(reagents, setting*3, efficiency, T) - smoke.start() - -/obj/machinery/smoke_machine/attackby(obj/item/I, mob/user, params) - add_fingerprint(user) - if(istype(I, /obj/item/reagent_containers) && I.is_open_container()) - var/obj/item/reagent_containers/RC = I - var/units = RC.reagents.trans_to(src, RC.amount_per_transfer_from_this, transfered_by = user) - if(units) - to_chat(user, "I transfer [units] units of the solution to [src].") - return - if(default_unfasten_wrench(user, I, 40)) - on = FALSE - return - if(default_deconstruction_screwdriver(user, "smoke0-o", "smoke0", I)) - return - if(default_deconstruction_crowbar(I)) - return - return ..() - -/obj/machinery/smoke_machine/deconstruct() - reagents.reaction(loc, TOUCH) - reagents.clear_reagents() - return ..() - -/obj/machinery/smoke_machine/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "smoke_machine", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/smoke_machine/ui_data(mob/user) - var/data = list() - var/TankContents[0] - var/TankCurrentVolume = 0 - for(var/datum/reagent/R in reagents.reagent_list) - TankContents.Add(list(list("name" = R.name, "volume" = R.volume))) // list in a list because Byond merges the first list... - TankCurrentVolume += R.volume - data["TankContents"] = TankContents - data["isTankLoaded"] = reagents.total_volume ? TRUE : FALSE - data["TankCurrentVolume"] = reagents.total_volume ? reagents.total_volume : null - data["TankMaxVolume"] = reagents.maximum_volume - data["active"] = on - data["setting"] = setting - data["screen"] = screen - data["maxSetting"] = max_range - return data - -/obj/machinery/smoke_machine/ui_act(action, params) - if(..() || !anchored) - return - switch(action) - if("purge") - reagents.clear_reagents() - update_icon() - . = TRUE - if("setting") - var/amount = text2num(params["amount"]) - if(amount in 1 to max_range) - setting = amount - . = TRUE - if("power") - on = !on - update_icon() - if(on) - message_admins("[ADMIN_LOOKUPFLW(usr)] activated a smoke machine that contains [english_list(reagents.reagent_list)] at [ADMIN_VERBOSEJMP(src)].") - log_game("[key_name(usr)] activated a smoke machine that contains [english_list(reagents.reagent_list)] at [AREACOORD(src)].") - log_combat(usr, src, "has activated [src] which contains [english_list(reagents.reagent_list)] at [AREACOORD(src)].") - if("goScreen") - screen = params["screen"] - . = TRUE - -#undef REAGENTS_BASE_VOLUME diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index ca2d7b03f1..10390752db 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -443,15 +443,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Cuba Libre" glass_desc = "" -/datum/reagent/consumable/ethanol/cuba_libre/on_mob_life(mob/living/carbon/M) - if(M.mind && M.mind.has_antag_datum(/datum/antagonist/rev)) //Cuba Libre, the traditional drink of revolutions! Heals revolutionaries. - M.adjustBruteLoss(-1, 0) - M.adjustFireLoss(-1, 0) - M.adjustToxLoss(-1, 0) - M.adjustOxyLoss(-5, 0) - . = 1 - return ..() || . - /datum/reagent/consumable/ethanol/whiskey_cola name = "Whiskey Cola" description = "Whiskey, mixed with cola. Surprisingly refreshing." @@ -577,7 +568,7 @@ All effects don't start immediately, but rather get worse over time; the rate is /datum/reagent/consumable/ethanol/tequila_sunrise/on_mob_metabolize(mob/living/M) to_chat(M, "I feel gentle warmth spread through my body!") light_holder = new(M) - light_holder.set_light(3, 0.7, "#FFCC00") //Tequila Sunrise makes you radiate dim light, like a sunrise! + light_holder.set_light(3,3,0.7, l_color = "#FFCC00") //Tequila Sunrise makes you radiate dim light, like a sunrise! /datum/reagent/consumable/ethanol/tequila_sunrise/on_mob_life(mob/living/carbon/M) if(QDELETED(light_holder)) @@ -1026,25 +1017,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Amasec" glass_desc = "" -/datum/reagent/consumable/ethanol/changelingsting - name = "Changeling Sting" - description = "You take a tiny sip and feel a burning sensation..." - color = "#2E6671" // rgb: 46, 102, 113 - boozepwr = 50 - quality = DRINK_GOOD - taste_description = "your brain coming out my nose" - glass_icon_state = "changelingsting" - glass_name = "Changeling Sting" - glass_desc = "" - -/datum/reagent/consumable/ethanol/changelingsting/on_mob_life(mob/living/carbon/M) - if(M.mind) //Changeling Sting assists in the recharging of changeling chemicals. - var/datum/antagonist/changeling/changeling = M.mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling) - changeling.chem_charges += metabolization_rate - changeling.chem_charges = CLAMP(changeling.chem_charges, 0, changeling.chem_storage) - return ..() - /datum/reagent/consumable/ethanol/irishcarbomb name = "Irish Car Bomb" description = "Mmm, tastes like chocolate cake..." @@ -1612,38 +1584,6 @@ All effects don't start immediately, but rather get worse over time; the rate is M.adjust_bodytemperature(5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL) ..() -/datum/reagent/consumable/ethanol/alexander - name = "Alexander" - description = "Named after a Greek hero, this mix is said to embolden a user's shield as if they were in a phalanx." - color = "#F5E9D3" - boozepwr = 50 - quality = DRINK_GOOD - taste_description = "bitter, creamy cacao" - glass_icon_state = "alexander" - glass_name = "Alexander" - glass_desc = "" - var/obj/item/shield/mighty_shield - -/datum/reagent/consumable/ethanol/alexander/on_mob_metabolize(mob/living/L) - if(ishuman(L)) - var/mob/living/carbon/human/thehuman = L - for(var/obj/item/shield/theshield in thehuman.contents) - mighty_shield = theshield - mighty_shield.block_chance += 10 - to_chat(thehuman, "[theshield] appears polished, although you don't recall polishing it.") - return TRUE - -/datum/reagent/consumable/ethanol/alexander/on_mob_life(mob/living/L) - ..() - if(mighty_shield && !(mighty_shield in L.contents)) //If you had a shield and lose it, you lose the reagent as well. Otherwise this is just a normal drink. - L.reagents.del_reagent(/datum/reagent/consumable/ethanol/alexander) - -/datum/reagent/consumable/ethanol/alexander/on_mob_end_metabolize(mob/living/L) - if(mighty_shield) - mighty_shield.block_chance -= 10 - to_chat(L,"I notice [mighty_shield] looks worn again. Weird.") - ..() - /datum/reagent/consumable/ethanol/sidecar name = "Sidecar" description = "The one ride you'll gladly give up the wheel for." @@ -2211,8 +2151,8 @@ All effects don't start immediately, but rather get worse over time; the rate is taste_description = "tannin-stricken wine" color = "#571111" -/datum/reagent/consumable/ethanol/beer/jackberrywine - name = "Jackberry Wine" +/datum/reagent/consumable/ethanol/beer/jacksberrywine + name = "Jacksberry Wine" boozepwr = 15 taste_description = "sickly sweet young wine" color = "#3b2342" diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 53a95601e9..6a88eb1df1 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -289,10 +289,6 @@ REMOVE_TRAIT(L, TRAIT_HOLY, type) ..() -/datum/reagent/water/holywater/reaction_mob(mob/living/M, method=TOUCH, reac_volume) - if(iscultist(M)) - to_chat(M, "A vile holiness begins to spread its shining tendrils through my mind, purging the Geometer of Blood's influence!") - ..() /datum/reagent/water/holywater/on_mob_life(mob/living/carbon/M) if(ishuman(M)) @@ -302,26 +298,12 @@ var/old_count = LAZYACCESS(data, "misc") LAZYSET(data, "misc", old_count + 1) M.jitteriness = min(M.jitteriness+4,10) - if(iscultist(M)) - for(var/datum/action/innate/cult/blood_magic/BM in M.actions) - to_chat(M, "My blood rites falter as holy water scours my body!") - for(var/datum/action/innate/cult/blood_spell/BS in BM.spells) - qdel(BS) if(data >= 25) // 10 units, 45 seconds @ metabolism 0.4 units & tick rate 1.8 sec if(!M.stuttering) M.stuttering = 1 M.stuttering = min(M.stuttering+4, 10) M.Dizzy(5) - if(iscultist(M) && prob(20)) - M.say(pick("Av'te Nar'Sie","Pa'lid Mors","INO INO ORA ANA","SAT ANA!","Daim'niodeis Arc'iai Le'eones","R'ge Na'sie","Diabo us Vo'iscum","Eld' Mon Nobis"), forced = "holy water") - if(prob(10)) - M.visible_message("[M] starts having a seizure!", "I have a seizure!") - M.Unconscious(120) - to_chat(M, "[pick("Your blood is my bond - you are nothing without it", "Do not forget my place", \ - "All that power, and you still fail?", "If you cannot scour this poison, I shall scour my meager life!")].") if(data >= 60) // 30 units, 135 seconds - if(iscultist(M)) - SSticker.mode.remove_cultist(M.mind, FALSE, TRUE) M.jitteriness = 0 M.stuttering = 0 holder.remove_reagent(type, volume) // maybe this is a little too perfect and a max() cap on the statuses would be better?? @@ -332,9 +314,6 @@ ..() if(!istype(T)) return - if(reac_volume>=10) - for(var/obj/effect/rune/R in T) - qdel(R) T.Bless() /datum/reagent/hydrogen_peroxide @@ -380,22 +359,11 @@ return ..() /datum/reagent/fuel/unholywater/on_mob_life(mob/living/carbon/M) - if(iscultist(M)) - M.drowsyness = max(M.drowsyness-5, 0) - M.AdjustAllImmobility(-40, FALSE) - M.adjustStaminaLoss(-10, 0) - M.adjustToxLoss(-2, 0) - M.adjustOxyLoss(-2, 0) - M.adjustBruteLoss(-2, 0) - M.adjustFireLoss(-2, 0) - if(ishuman(M) && M.blood_volume < BLOOD_VOLUME_NORMAL) - M.blood_volume += 3 - else // Will deal about 90 damage when 50 units are thrown - M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150) - M.adjustToxLoss(2, 0) - M.adjustFireLoss(2, 0) - M.adjustOxyLoss(2, 0) - M.adjustBruteLoss(2, 0) + M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150) + M.adjustToxLoss(2, 0) + M.adjustFireLoss(2, 0) + M.adjustOxyLoss(2, 0) + M.adjustBruteLoss(2, 0) holder.remove_reagent(type, 1) return TRUE @@ -728,16 +696,6 @@ if(method != TOUCH) L.ForceContractDisease(new /datum/disease/transformation/slime(), FALSE, TRUE) -/datum/reagent/gluttonytoxin - name = "Gluttony's Blessing" - description = "An advanced corruptive toxin produced by something terrible." - color = "#5EFF3B" //RGB: 94, 255, 59 - can_synth = FALSE - taste_description = "decay" - -/datum/reagent/gluttonytoxin/reaction_mob(mob/living/L, method=TOUCH, reac_volume) - L.ForceContractDisease(new /datum/disease/transformation/morph(), FALSE, TRUE) - /datum/reagent/serotrotium name = "Serotrotium" description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans." @@ -1108,7 +1066,7 @@ /datum/reagent/space_cleaner/ez_clean/reaction_mob(mob/living/M, method=TOUCH, reac_volume) ..() - if((method == TOUCH || method == VAPOR) && !issilicon(M)) + if((method == TOUCH || method == VAPOR)) M.adjustBruteLoss(1.5) M.adjustFireLoss(1.5) @@ -1153,17 +1111,6 @@ if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection)))) L.ForceContractDisease(new /datum/disease/transformation/robot(), FALSE, TRUE) -/datum/reagent/xenomicrobes - name = "Xenomicrobes" - description = "Microbes with an entirely alien cellular structure." - color = "#535E66" // rgb: 83, 94, 102 - can_synth = FALSE - taste_description = "sludge" - -/datum/reagent/xenomicrobes/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0) - if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection)))) - L.ForceContractDisease(new /datum/disease/transformation/xeno(), FALSE, TRUE) - /datum/reagent/fungalspores name = "Tubercle bacillus Cosmosis microbes" description = "Active fungal spores." @@ -1477,10 +1424,6 @@ taste_description = "bitterness" taste_mult = 1.5 -/datum/reagent/stable_plasma/on_mob_life(mob/living/carbon/C) - C.adjustPlasma(10) - ..() - /datum/reagent/iodine name = "Iodine" description = "Commonly added to table salt as a nutrient. On its own it tastes far less pleasing." @@ -1935,28 +1878,6 @@ REMOVE_TRAIT(L, TRAIT_PACIFISM, type) ..() -/datum/reagent/bz_metabolites - name = "BZ metabolites" - description = "A harmless metabolite of BZ gas" - color = "#FAFF00" - taste_description = "acrid cinnamon" - metabolization_rate = 0.2 * REAGENTS_METABOLISM - -/datum/reagent/bz_metabolites/on_mob_metabolize(mob/living/L) - ..() - ADD_TRAIT(L, CHANGELING_HIVEMIND_MUTE, type) - -/datum/reagent/bz_metabolites/on_mob_end_metabolize(mob/living/L) - ..() - REMOVE_TRAIT(L, CHANGELING_HIVEMIND_MUTE, type) - -/datum/reagent/bz_metabolites/on_mob_life(mob/living/L) - if(L.mind) - var/datum/antagonist/changeling/changeling = L.mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling) - changeling.chem_charges = max(changeling.chem_charges-2, 0) - return ..() - /datum/reagent/pax/peaceborg name = "synthpax" description = "A colorless liquid that suppresses violence in its subjects. Cheaper to synthesize than normal Pax, but wears off faster." diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 74cdb5da98..1073787107 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -64,7 +64,6 @@ /datum/reagent/toxin/plasma/on_mob_life(mob/living/carbon/C) if(holder.has_reagent(/datum/reagent/medicine/epinephrine)) holder.remove_reagent(/datum/reagent/medicine/epinephrine, 2*REM) - C.adjustPlasma(20) return ..() /datum/reagent/toxin/plasma/on_temp_change() diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index 7a617906d8..7fee50c9d1 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -6,17 +6,7 @@ /datum/chemical_reaction/reagent_explosion/proc/do_explosion(datum/reagents/holder, created_volume) var/turf/T = get_turf(holder.my_atom) - var/inside_msg - if(ismob(holder.my_atom)) - var/mob/M = holder.my_atom - inside_msg = " inside [ADMIN_LOOKUPFLW(M)]" var/lastkey = holder.my_atom.fingerprintslast - var/touch_msg = "N/A" - if(lastkey) - var/mob/toucher = get_mob_by_key(lastkey) - touch_msg = "[ADMIN_LOOKUPFLW(toucher)]" - if(!istype(holder.my_atom, /obj/machinery/plumbing)) //excludes standard plumbing equipment from spamming admins with this shit - message_admins("Reagent explosion reaction occurred at [ADMIN_VERBOSEJMP(T)][inside_msg]. Last Fingerprint: [touch_msg].") log_game("Reagent explosion reaction occurred at [AREACOORD(T)]. Last Fingerprint: [lastkey ? lastkey : "N/A"]." ) var/datum/effect_system/reagents_explosion/e = new() e.set_up(modifier + round(created_volume/strengthdiv, 1), T, 0, 0) @@ -165,12 +155,6 @@ R.stun(20) R.reveal(100) R.adjustHealth(50) - for(var/mob/living/carbon/C in get_hearers_in_view(round(created_volume/48,1),get_turf(holder.my_atom))) - if(iscultist(C)) - to_chat(C, "The divine explosion sears you!") - C.Paralyze(40) - C.adjust_fire_stacks(5) - C.IgniteMob() ..() @@ -210,30 +194,6 @@ empulse(location, round(created_volume / 12), round(created_volume / 7), 1) holder.clear_reagents() - -/datum/chemical_reaction/beesplosion - name = "Bee Explosion" - id = "beesplosion" - required_reagents = list(/datum/reagent/consumable/honey = 1, /datum/reagent/medicine/strange_reagent = 1, /datum/reagent/uranium/radium = 1) - -/datum/chemical_reaction/beesplosion/on_reaction(datum/reagents/holder, created_volume) - var/location = holder.my_atom.drop_location() - if(created_volume < 5) - playsound(location,'sound/blank.ogg', 100, TRUE) - else - playsound(location,'sound/blank.ogg', 100, TRUE) - var/list/beeagents = list() - for(var/R in holder.reagent_list) - if(required_reagents[R]) - continue - beeagents += R - var/bee_amount = round(created_volume * 0.2) - for(var/i in 1 to bee_amount) - var/mob/living/simple_animal/hostile/poison/bees/short/new_bee = new(location) - if(LAZYLEN(beeagents)) - new_bee.assign_reagent(pick(beeagents)) - - /datum/chemical_reaction/stabilizing_agent name = /datum/reagent/stabilizing_agent id = /datum/reagent/stabilizing_agent @@ -510,41 +470,6 @@ required_reagents = list(/datum/reagent/toxin/slimejelly = 1, /datum/reagent/teslium = 1) mix_message = "The slime jelly starts glowing intermittently." -/datum/chemical_reaction/reagent_explosion/teslium_lightning - name = "Teslium Destabilization" - id = "teslium_lightning" - required_reagents = list(/datum/reagent/teslium = 1, /datum/reagent/water = 1) - strengthdiv = 100 - modifier = -100 - mix_message = "The teslium starts to spark as electricity arcs away from it!" - mix_sound = 'sound/blank.ogg' - var/tesla_flags = TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE | TESLA_MOB_STUN - -/datum/chemical_reaction/reagent_explosion/teslium_lightning/on_reaction(datum/reagents/holder, created_volume) - addtimer(CALLBACK(src, PROC_REF(do_explosion), holder, created_volume), 0.5 SECONDS) - -/datum/chemical_reaction/reagent_explosion/teslium_lightning/do_explosion(datum/reagents/holder, created_volume) - var/T1 = created_volume * 20 //100 units : Zap 3 times, with powers 2000/5000/12000. Tesla revolvers have a power of 10000 for comparison. - var/T2 = created_volume * 50 - var/T3 = created_volume * 120 - if(created_volume >= 75) - tesla_zap(holder.my_atom, 7, T1, tesla_flags) - playsound(holder.my_atom, 'sound/blank.ogg', 50, TRUE) - sleep(15) - if(created_volume >= 40) - tesla_zap(holder.my_atom, 7, T2, tesla_flags) - playsound(holder.my_atom, 'sound/blank.ogg', 50, TRUE) - sleep(15) - if(created_volume >= 10) //10 units minimum for lightning, 40 units for secondary blast, 75 units for tertiary blast. - tesla_zap(holder.my_atom, 7, T3, tesla_flags) - playsound(holder.my_atom, 'sound/blank.ogg', 50, TRUE) - ..() - -/datum/chemical_reaction/reagent_explosion/teslium_lightning/heat - id = "teslium_lightning2" - required_temp = 474 - required_reagents = list(/datum/reagent/teslium = 1) - /datum/chemical_reaction/reagent_explosion/nitrous_oxide name = "N2O explosion" id = "n2o_explosion" diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index 31395914f7..f677751aff 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -306,17 +306,6 @@ empulse(get_turf(holder.my_atom), 3, 7) ..() -/datum/chemical_reaction/slime/slimecell - name = "Slime Powercell" - id = "m_cell" - required_reagents = list(/datum/reagent/toxin/plasma = 1) - required_container = /obj/item/slime_extract/yellow - required_other = TRUE - -/datum/chemical_reaction/slime/slimecell/on_reaction(datum/reagents/holder, created_volume) - new /obj/item/stock_parts/cell/high/slime(get_turf(holder.my_atom)) - ..() - /datum/chemical_reaction/slime/slimeglow name = "Slime Glow" id = "m_glow" @@ -534,17 +523,6 @@ BC.visible_message("The [BC.name] appears out of thin air!") ..() -/datum/chemical_reaction/slime/slimeradio - name = "Slime Radio" - id = "m_radio" - required_reagents = list(/datum/reagent/water = 1) - required_container = /obj/item/slime_extract/bluespace - required_other = TRUE - -/datum/chemical_reaction/slime/slimeradio/on_reaction(datum/reagents/holder, created_volume) - new /obj/item/slimepotion/slime/slimeradio(get_turf(holder.my_atom)) - ..() - //Cerulean /datum/chemical_reaction/slime/slimepsteroid2 name = "Slime Steroid 2" @@ -592,18 +570,6 @@ extract.forceMove(get_turf(lastheld)) qdel(src) -/datum/chemical_reaction/slime/slimecamera - name = "Slime Camera" - id = "m_camera" - required_reagents = list(/datum/reagent/water = 1) - required_container = /obj/item/slime_extract/sepia - required_other = TRUE - -/datum/chemical_reaction/slime/slimecamera/on_reaction(datum/reagents/holder) - new /obj/item/camera(get_turf(holder.my_atom)) - new /obj/item/camera_film(get_turf(holder.my_atom)) - ..() - /datum/chemical_reaction/slime/slimefloor name = "Sepia Floor" id = "m_floor" diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 7c9a8a663b..d6fd85887f 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -20,9 +20,7 @@ var/short_cooktime = FALSE // based on cooking skill var/long_cooktime = FALSE // based on cooking skill -/obj/item/reagent_containers/weather_trigger(W) - if(W==/datum/weather/rain) - START_PROCESSING(SSweather,src) + COOLDOWN_DECLARE(fill_cooldown) /obj/item/reagent_containers/Initialize(mapload, vol) . = ..() @@ -36,22 +34,24 @@ add_initial_reagents() + if(spillable) + GLOB.weather_act_upon_list |= src + +/obj/item/reagent_containers/weather_act_on(weather_trait, severity) + if(weather_trait != PARTICLEWEATHER_RAIN || !COOLDOWN_FINISHED(src, fill_cooldown)) + return + + reagents.add_reagent(/datum/reagent/water, clamp(severity * 0.5, 1, 5)) + COOLDOWN_START(src, fill_cooldown, 10 SECONDS) + +/obj/item/reagent_containers/Destroy() + . = ..() + if(spillable) + GLOB.weather_act_upon_list -= src + /obj/item/reagent_containers/proc/add_initial_reagents() if(list_reagents) reagents.add_reagent_list(list_reagents) -/* -/obj/item/reagent_containers/attack_self(mob/user) - if(possible_transfer_amounts.len) - var/i=0 - for(var/A in possible_transfer_amounts) - i++ - if(A == amount_per_transfer_from_this) - if(i[src]'s transfer amount is now [amount_per_transfer_from_this] units.") - return*/ /obj/item/reagent_containers/attack(mob/M, mob/user, def_zone) return ..() @@ -131,7 +131,7 @@ reagents.clear_reagents() -/obj/item/reagent_containers/microwave_act(obj/machinery/microwave/M) +/obj/item/reagent_containers/heating_act() reagents.expose_temperature(1000) ..() diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm deleted file mode 100644 index 87758f9664..0000000000 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ /dev/null @@ -1,291 +0,0 @@ -#define C2NAMEREAGENT "[initial(reagent.name)] (Has Side-Effects)" -/* -Contains: -Borg Hypospray -Borg Shaker -Nothing to do with hydroponics in here. Sorry to dissapoint you. -*/ - -/* -Borg Hypospray -*/ -/obj/item/reagent_containers/borghypo - name = "cyborg hypospray" - desc = "" - icon = 'icons/obj/syringe.dmi' - item_state = "hypo" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - icon_state = "borghypo" - amount_per_transfer_from_this = 5 - volume = 30 - possible_transfer_amounts = list() - var/mode = 1 - var/charge_cost = 50 - var/charge_tick = 0 - var/recharge_time = 5 //Time it takes for shots to recharge (in seconds) - var/bypass_protection = 0 //If the hypospray can go through armor or thick material - - var/list/datum/reagents/reagent_list = list() - var/list/reagent_ids = list(/datum/reagent/medicine/C2/convermol, /datum/reagent/medicine/C2/libital, /datum/reagent/medicine/C2/multiver, /datum/reagent/medicine/C2/aiuri, /datum/reagent/medicine/epinephrine, /datum/reagent/medicine/spaceacillin, /datum/reagent/medicine/salglu_solution) - var/accepts_reagent_upgrades = TRUE //If upgrades can increase number of reagents dispensed. - var/list/modes = list() //Basically the inverse of reagent_ids. Instead of having numbers as "keys" and strings as values it has strings as keys and numbers as values. - //Used as list for input() in shakers. - var/list/reagent_names = list() - - -/obj/item/reagent_containers/borghypo/Initialize() - . = ..() - - for(var/R in reagent_ids) - add_reagent(R) - - START_PROCESSING(SSobj, src) - - -/obj/item/reagent_containers/borghypo/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - - -/obj/item/reagent_containers/borghypo/process() //Every [recharge_time] seconds, recharge some reagents for the cyborg - charge_tick++ - if(charge_tick >= recharge_time) - regenerate_reagents() - charge_tick = 0 - - //update_icon() - return 1 - -// Use this to add more chemicals for the borghypo to produce. -/obj/item/reagent_containers/borghypo/proc/add_reagent(datum/reagent/reagent) - reagent_ids |= reagent - var/datum/reagents/RG = new(30) - RG.my_atom = src - reagent_list += RG - - var/datum/reagents/R = reagent_list[reagent_list.len] - R.add_reagent(reagent, 30) - - modes[reagent] = modes.len + 1 - - if(initial(reagent.harmful)) - reagent_names[C2NAMEREAGENT] = reagent - else - reagent_names[initial(reagent.name)] = reagent - -/obj/item/reagent_containers/borghypo/proc/del_reagent(datum/reagent/reagent) - reagent_ids -= reagent - if(istype(reagent, /datum/reagent/medicine/C2)) - reagent_names -= C2NAMEREAGENT - else - reagent_names -= initial(reagent.name) - var/datum/reagents/RG - var/datum/reagents/TRG - for(var/i in 1 to reagent_ids.len) - TRG = reagent_list[i] - if (TRG.has_reagent(reagent)) - RG = TRG - break - if (RG) - reagent_list -= RG - RG.del_reagent(reagent) - - modes[reagent] = modes.len - 1 - -/obj/item/reagent_containers/borghypo/proc/regenerate_reagents() - if(iscyborg(src.loc)) - var/mob/living/silicon/robot/R = src.loc - if(R && R.cell) - for(var/i in 1 to reagent_ids.len) - var/datum/reagents/RG = reagent_list[i] - if(RG.total_volume < RG.maximum_volume) //Don't recharge reagents and drain power if the storage is full. - R.cell.use(charge_cost) //Take power from borg... - RG.add_reagent(reagent_ids[i], 5) //And fill hypo with reagent. - -/obj/item/reagent_containers/borghypo/attack(mob/living/carbon/M, mob/user) - var/datum/reagents/R = reagent_list[mode] - if(!R.total_volume) - to_chat(user, "The injector is empty!") - return - if(!istype(M)) - return - if(R.total_volume && M.can_inject(user, 1, user.zone_selected,bypass_protection)) - to_chat(M, "I feel a tiny prick!") - to_chat(user, "I inject [M] with the injector.") - if(M.reagents) - var/trans = R.trans_to(M, amount_per_transfer_from_this, transfered_by = user, method = INJECT) - to_chat(user, "[trans] unit\s injected. [R.total_volume] unit\s remaining.") - - var/list/injected = list() - for(var/datum/reagent/RG in R.reagent_list) - injected += RG.name - log_combat(user, M, "injected", src, "(CHEMICALS: [english_list(injected)])") - -/obj/item/reagent_containers/borghypo/attack_self(mob/user) - var/chosen_reagent = modes[reagent_names[input(user, "What reagent do you want to dispense?") as null|anything in sortList(reagent_names)]] - if(!chosen_reagent) - return - mode = chosen_reagent - playsound(loc, 'sound/blank.ogg', 50, FALSE) - var/datum/reagent/R = GLOB.chemical_reagents_list[reagent_ids[mode]] - to_chat(user, "[src] is now dispensing '[R.name]'.") - return - -/obj/item/reagent_containers/borghypo/examine(mob/user) - . = ..() - . += DescribeContents() //Because using the standardized reagents datum was just too cool for whatever fuckwit wrote this - var/datum/reagent/loaded = modes[mode] - . += "Currently loaded: [initial(loaded.name)]. [initial(loaded.description)]" - . += "Alt+Click to change transfer amount. Currently set to [amount_per_transfer_from_this == 5 ? "dose normally (5u)" : "microdose (2u)"]." - -/obj/item/reagent_containers/borghypo/proc/DescribeContents() - . = list() - var/empty = TRUE - - for(var/datum/reagents/RS in reagent_list) - var/datum/reagent/R = locate() in RS.reagent_list - if(R) - . += "It currently has [R.volume] unit\s of [R.name] stored." - empty = FALSE - - if(empty) - . += "It is currently empty! Allow some time for the internal synthesizer to produce more." - -/obj/item/reagent_containers/borghypo/AltClick(mob/living/user) - . = ..() - if(user.stat == DEAD || user != loc) - return //IF YOU CAN HEAR ME SET MY TRANSFER AMOUNT TO 1 - if(amount_per_transfer_from_this == 5) - amount_per_transfer_from_this = 2 - else - amount_per_transfer_from_this = 5 - to_chat(user,"[src] is now set to [amount_per_transfer_from_this == 5 ? "dose normally" : "microdose"].") - -/obj/item/reagent_containers/borghypo/hacked - icon_state = "borghypo_s" - reagent_ids = list (/datum/reagent/toxin/acid/fluacid, /datum/reagent/toxin/mutetoxin, /datum/reagent/toxin/cyanide, /datum/reagent/toxin/sodium_thiopental, /datum/reagent/toxin/heparin, /datum/reagent/toxin/lexorin) - accepts_reagent_upgrades = FALSE - -/obj/item/reagent_containers/borghypo/clown - name = "laughter injector" - desc = "" - reagent_ids = list(/datum/reagent/consumable/laughter) - accepts_reagent_upgrades = FALSE - -/obj/item/reagent_containers/borghypo/clown/hacked - name = "laughter injector" - desc = "" - reagent_ids = list(/datum/reagent/consumable/superlaughter) - accepts_reagent_upgrades = FALSE - -/obj/item/reagent_containers/borghypo/syndicate - name = "syndicate cyborg hypospray" - desc = "" - icon_state = "borghypo_s" - charge_cost = 20 - recharge_time = 2 - reagent_ids = list(/datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/potass_iodide, /datum/reagent/medicine/morphine) - bypass_protection = 1 - accepts_reagent_upgrades = FALSE - -/* -Borg Shaker -*/ -/obj/item/reagent_containers/borghypo/borgshaker - name = "cyborg shaker" - desc = "" - icon = 'icons/obj/drinks.dmi' - icon_state = "shaker" - possible_transfer_amounts = list(5,10,20) - charge_cost = 20 //Lots of reagents all regenerating at once, so the charge cost is lower. They also regenerate faster. - recharge_time = 3 - accepts_reagent_upgrades = FALSE - - reagent_ids = list(/datum/reagent/consumable/applejuice, /datum/reagent/consumable/banana, /datum/reagent/consumable/coffee, - /datum/reagent/consumable/cream, /datum/reagent/consumable/dr_gibb, /datum/reagent/consumable/grenadine, - /datum/reagent/consumable/ice, /datum/reagent/consumable/lemonjuice, /datum/reagent/consumable/lemon_lime, - /datum/reagent/consumable/limejuice, /datum/reagent/consumable/menthol, /datum/reagent/consumable/milk, - /datum/reagent/consumable/nothing, /datum/reagent/consumable/orangejuice, /datum/reagent/consumable/peachjuice, - /datum/reagent/consumable/sodawater, /datum/reagent/consumable/space_cola, /datum/reagent/consumable/spacemountainwind, - /datum/reagent/consumable/pwr_game, /datum/reagent/consumable/shamblers, /datum/reagent/consumable/soymilk, - /datum/reagent/consumable/space_up, /datum/reagent/consumable/tea, /datum/reagent/consumable/tomatojuice, - /datum/reagent/consumable/tonic, /datum/reagent/water, - /datum/reagent/consumable/ethanol/ale, /datum/reagent/consumable/ethanol/applejack, /datum/reagent/consumable/ethanol/beer, - /datum/reagent/consumable/ethanol/cognac, /datum/reagent/consumable/ethanol/creme_de_menthe, - /datum/reagent/consumable/ethanol/creme_de_cacao, /datum/reagent/consumable/ethanol/gin, /datum/reagent/consumable/ethanol/kahlua, - /datum/reagent/consumable/ethanol/rum, /datum/reagent/consumable/ethanol/sake, /datum/reagent/consumable/ethanol/tequila, - /datum/reagent/consumable/ethanol/triple_sec, /datum/reagent/consumable/ethanol/vermouth, - /datum/reagent/consumable/ethanol/whiskey, /datum/reagent/consumable/ethanol/wine) - -/obj/item/reagent_containers/borghypo/borgshaker/attack(mob/M, mob/user) - return //Can't inject stuff with a shaker, can we? //not with that attitude - -/obj/item/reagent_containers/borghypo/borgshaker/regenerate_reagents() - if(iscyborg(src.loc)) - var/mob/living/silicon/robot/R = src.loc - if(R && R.cell) - for(var/i in modes) //Lots of reagents in this one, so it's best to regenrate them all at once to keep it from being tedious. - var/valueofi = modes[i] - var/datum/reagents/RG = reagent_list[valueofi] - if(RG.total_volume < RG.maximum_volume) - R.cell.use(charge_cost) - RG.add_reagent(reagent_ids[valueofi], 5) - -/obj/item/reagent_containers/borghypo/borgshaker/afterattack(obj/target, mob/user, proximity) - . = ..() - if(!proximity) - return - - else if(target.is_refillable()) - var/datum/reagents/R = reagent_list[mode] - if(!R.total_volume) - to_chat(user, "[src] is currently out of this ingredient! Please allow some time for the synthesizer to produce more.") - return - - if(target.reagents.total_volume >= target.reagents.maximum_volume) - to_chat(user, "[target] is full.") - return - - var/trans = R.trans_to(target, amount_per_transfer_from_this, transfered_by = user) - to_chat(user, "I transfer [trans] unit\s of the solution to [target].") - -/obj/item/reagent_containers/borghypo/borgshaker/DescribeContents() - var/datum/reagents/RS = reagent_list[mode] - var/datum/reagent/R = locate() in RS.reagent_list - if(R) - return "It currently has [R.volume] unit\s of [R.name] stored." - else - return "It is currently empty! Please allow some time for the synthesizer to produce more." - -/obj/item/reagent_containers/borghypo/borgshaker/hacked - name = "cyborg shaker" - desc = "" - icon = 'icons/obj/drinks.dmi' - icon_state = "threemileislandglass" - possible_transfer_amounts = list(5,10,20) - charge_cost = 20 //Lots of reagents all regenerating at once, so the charge cost is lower. They also regenerate faster. - recharge_time = 3 - accepts_reagent_upgrades = FALSE - - reagent_ids = list(/datum/reagent/toxin/fakebeer, /datum/reagent/consumable/ethanol/fernet) - -/obj/item/reagent_containers/borghypo/peace - name = "Peace Hypospray" - - reagent_ids = list(/datum/reagent/peaceborg/confuse,/datum/reagent/peaceborg/tire,/datum/reagent/pax/peaceborg) - accepts_reagent_upgrades = FALSE - -/obj/item/reagent_containers/borghypo/peace/hacked - desc = "" - icon_state = "borghypo_s" - reagent_ids = list(/datum/reagent/peaceborg/confuse,/datum/reagent/peaceborg/tire,/datum/reagent/pax/peaceborg,/datum/reagent/toxin/staminatoxin,/datum/reagent/toxin/sulfonal,/datum/reagent/toxin/sodium_thiopental,/datum/reagent/toxin/cyanide,/datum/reagent/toxin/fentanyl) - accepts_reagent_upgrades = FALSE - -/obj/item/reagent_containers/borghypo/epi - name = "epinephrine injector" - desc = "" - reagent_ids = list(/datum/reagent/medicine/epinephrine) - accepts_reagent_upgrades = FALSE - -#undef C2NAMEREAGENT diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index fe840afea4..b999ed40af 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -77,6 +77,7 @@ GLOBAL_LIST_INIT(wisdoms, world.file2list("strings/rt/wisdoms.txt")) reagent_flags = TRANSPARENT reagents.flags = reagent_flags spillable = FALSE + GLOB.weather_act_upon_list -= src if(!fancy) desc = "A bottle with a cork." else @@ -84,6 +85,7 @@ GLOBAL_LIST_INIT(wisdoms, world.file2list("strings/rt/wisdoms.txt")) reagents.flags = reagent_flags playsound(user.loc,'sound/items/uncork.ogg', 100, TRUE) spillable = TRUE + GLOB.weather_act_upon_list |= src if(!fancy) desc = "An open bottle, hopefully a cork is close by." update_icon() @@ -339,11 +341,6 @@ GLOBAL_LIST_INIT(wisdoms, world.file2list("strings/rt/wisdoms.txt")) desc = "Buds from exotic flowers, distilled and left to settle for a decade. This is the result. The unpleasant effects on the drinker are best countered with alcohol the label says." spawned_disease = /datum/disease/anxiety -/obj/item/reagent_containers/glass/bottle/beesease - name = "Beesease culture bottle" - desc = "" - spawned_disease = /datum/disease/beesease - /obj/item/reagent_containers/glass/bottle/fluspanish name = "Spanish flu culture bottle" desc = "" diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm index 1457424146..84c4546187 100644 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ b/code/modules/reagents/reagent_containers/dropper.dm @@ -45,9 +45,6 @@ to_chat(user, "I transfer [trans] unit\s of the solution.") update_icon() return - else if(isalien(target)) //hiss-hiss has no eyes! - to_chat(target, "[target] does not seem to have any eyes!") - return target.visible_message("[user] squirts something into [target]'s eyes!", \ "[user] squirts something into your eyes!") diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 76e79e1630..0c54425089 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -25,7 +25,7 @@ /obj/item/reagent_containers/spray/afterattack(atom/A, mob/user) . = ..() - if(istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart) || istype(A, /obj/machinery/hydroponics)) + if(istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart)) return if((A.is_drainable() && !A.is_refillable()) && get_dist(src,A) <= 1 && can_fill_from_container) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 8e62ea3351..23fef46b45 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -228,13 +228,6 @@ volume = 1 list_reagents = list(/datum/reagent/mulligan = 1) -/obj/item/reagent_containers/syringe/gluttony - name = "Gluttony's Blessing" - desc = "" - amount_per_transfer_from_this = 1 - volume = 1 - list_reagents = list(/datum/reagent/gluttonytoxin = 1) - /obj/item/reagent_containers/syringe/bluespace name = "bluespace syringe" desc = "" diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index eb1c003734..a4b6852d15 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -183,25 +183,3 @@ icon_state = "vat" anchored = TRUE reagent_id = /datum/reagent/consumable/cooking_oil - -/obj/structure/reagent_dispensers/plumbed - name = "stationairy water tank" - anchored = TRUE - icon_state = "water_stationairy" - desc = "" - -/obj/structure/reagent_dispensers/plumbed/wrench_act(mob/living/user, obj/item/I) - ..() - default_unfasten_wrench(user, I) - return TRUE - -/obj/structure/reagent_dispensers/plumbed/ComponentInitialize() - AddComponent(/datum/component/plumbing/simple_supply) - -/obj/structure/reagent_dispensers/plumbed/storage - name = "stationairy storage tank" - icon_state = "tank_stationairy" - reagent_id = null //start empty - -/obj/structure/reagent_dispensers/plumbed/storage/ComponentInitialize() - AddComponent(/datum/component/plumbing/tank) diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index c0656c0292..3d9dfee4ed 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -129,7 +129,6 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) return if(!operating) return - use_power(6) // Who the fuck put this on a 1ds delay? It happens every 2s, what does it matter for(var/atom/movable/A as anything in loc) if(A == src) @@ -202,10 +201,6 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) if(C) C.set_operable(stepdir, id, op) -/obj/machinery/conveyor/power_change() - . = ..() - update() - // the conveyor control switch // // diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index 5024917af0..20f2fc8ddc 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -63,11 +63,6 @@ trunk.linked = null return ..() -/obj/machinery/disposal/singularity_pull(S, current_size) - ..() - if(current_size >= STAGE_FIVE) - deconstruct() - /obj/machinery/disposal/LateInitialize() //this will get a copy of the air turf and take a SEND PRESSURE amount of air from it var/atom/L = loc @@ -115,12 +110,7 @@ /obj/machinery/disposal/proc/stuff_mob_in(mob/living/target, mob/living/user) if(!iscarbon(user) && !user.ventcrawler) //only carbon and ventcrawlers can climb into disposal by themselves. - if (iscyborg(user)) - var/mob/living/silicon/robot/borg = user - if (!borg.module || !borg.module.canDispose) - return - else - return + return if(!isturf(user.loc)) //No magically doing it from inside closets return if(target.buckled || target.has_buckled_mobs()) @@ -299,7 +289,6 @@ data["pressure_charging"] = pressure_charging data["panel_open"] = panel_open data["per"] = CLAMP01(air_contents.return_pressure() / (SEND_PRESSURE)) - data["isai"] = isAI(user) return data /obj/machinery/disposal/bin/ui_act(action, params) @@ -399,14 +388,9 @@ if(stat & NOPOWER) // won't charge if no power return - use_power(100) // base power usage - if(!pressure_charging) // if off or ready, no need to charge return - // otherwise charge - use_power(500) // charging power usage - var/atom/L = loc //recharging from loc turf var/datum/gas_mixture/env = L.return_air() diff --git a/code/modules/recycling/disposal/pipe.dm b/code/modules/recycling/disposal/pipe.dm index d5b0127bfa..6b7bd65ee2 100644 --- a/code/modules/recycling/disposal/pipe.dm +++ b/code/modules/recycling/disposal/pipe.dm @@ -170,11 +170,6 @@ qdel(src) -/obj/structure/disposalpipe/singularity_pull(S, current_size) - ..() - if(current_size >= STAGE_FIVE) - deconstruct() - // Straight/bent pipe segment /obj/structure/disposalpipe/segment diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm deleted file mode 100644 index 25f34a6cf2..0000000000 --- a/code/modules/research/designs.dm +++ /dev/null @@ -1,90 +0,0 @@ -/*************************************************************** -** Design Datums ** -** All the data for building stuff. ** -***************************************************************/ -/* -For the materials datum, it assumes you need reagents unless specified otherwise. To designate a material that isn't a reagent, -you use one of the material IDs below. These are NOT ids in the usual sense (they aren't defined in the object or part of a datum), -they are simply references used as part of a "has materials?" type proc. They all start with a $ to denote that they aren't reagents. -The currently supporting non-reagent materials. All material amounts are set as the define MINERAL_MATERIAL_AMOUNT, which defaults to 2000 - -Don't add new keyword/IDs if they are made from an existing one (such as rods which are made from metal). Only add raw materials. - -Design Guidelines -- When adding new designs, check rdreadme.dm to see what kind of things have already been made and where new stuff is needed. -- A single sheet of anything is 2000 units of material. Materials besides metal/glass require help from other jobs (mining for -other types of metals and chemistry for reagents). -- Add the AUTOLATHE tag to -*/ - -//DESIGNS ARE GLOBAL. DO NOT CREATE OR DESTROY THEM AT RUNTIME OUTSIDE OF INIT, JUST REFERENCE THEM TO WHATEVER YOU'RE DOING! //why are you yelling? -//DO NOT REFERENCE OUTSIDE OF SSRESEARCH. USE THE PROCS IN SSRESEARCH TO OBTAIN A REFERENCE. - -/datum/design //Datum for object designs, used in construction - var/name = "Name" //Name of the created object. - var/desc = "" //Description of the created object. - var/id = DESIGN_ID_IGNORE //ID of the created object for easy refernece. Alphanumeric, lower-case, no symbols - var/build_type = null //Flag as to what kind machine the design is built in. See defines. - var/list/materials = list() //List of materials. Format: "id" = amount. - var/construction_time //Amount of time required for building the object - var/build_path = null //The file path of the object that gets created - var/list/make_reagents = list() //Reagents produced. Format: "id" = amount. Currently only supported by the biogenerator. - var/list/category = null //Primarily used for Mech Fabricators, but can be used for anything - var/list/reagents_list = list() //List of reagents. Format: "id" = amount. - var/maxstack = 1 - var/lathe_time_factor = 1 //How many times faster than normal is this to build on the protolathe - var/dangerous_construction = FALSE //notify and log for admin investigations if this is printed. - var/departmental_flags = ALL //bitflags for deplathes. - var/list/datum/techweb_node/unlocked_by = list() - var/research_icon //Replaces the item icon in the research console - var/research_icon_state - var/icon_cache - -/datum/design/error_design - name = "ERROR" - desc = "" - -/datum/design/Destroy() - SSresearch.techweb_designs -= id - return ..() - -/datum/design/proc/InitializeMaterials() - var/list/temp_list = list() - for(var/i in materials) //Go through all of our materials, get the subsystem instance, and then replace the list. - var/amount = materials[i] - if(!istext(i)) //Not a category, so get the ref the normal way - var/datum/material/M = getmaterialref(i) - temp_list[M] = amount - else - temp_list[i] = amount - materials = temp_list - -/datum/design/proc/icon_html(client/user) - var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/research_designs) -// sheet.send(user) - return sheet.icon_tag(id) - -//////////////////////////////////////// -//Disks for transporting design datums// -//////////////////////////////////////// - -/obj/item/disk/design_disk - name = "Component Design Disk" - desc = "" - icon_state = "datadisk1" - custom_materials = list(/datum/material/iron =300, /datum/material/glass =100) - var/list/blueprints = list() - var/max_blueprints = 1 - -/obj/item/disk/design_disk/Initialize() - . = ..() - pixel_x = rand(-5, 5) - pixel_y = rand(-5, 5) - for(var/i in 1 to max_blueprints) - blueprints += null - -/obj/item/disk/design_disk/adv - name = "Advanced Component Design Disk" - desc = "" - custom_materials = list(/datum/material/iron =300, /datum/material/glass = 100, /datum/material/silver = 50) - max_blueprints = 5 diff --git a/code/modules/research/designs/AI_module_designs.dm b/code/modules/research/designs/AI_module_designs.dm deleted file mode 100644 index b073605fc3..0000000000 --- a/code/modules/research/designs/AI_module_designs.dm +++ /dev/null @@ -1,156 +0,0 @@ -/////////////////////////////////// -//////////AI Module Disks////////// -/////////////////////////////////// - -/datum/design/board/aicore - name = "AI Design (AI Core)" - desc = "" - id = "aicore" - build_path = /obj/item/circuitboard/aicore - category = list("AI Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/safeguard_module - name = "Module Design (Safeguard)" - desc = "" - id = "safeguard_module" - materials = list(/datum/material/glass = 1000, /datum/material/gold = 2000) - build_path = /obj/item/aiModule/supplied/safeguard - category = list("AI Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/onehuman_module - name = "Module Design (OneHuman)" - desc = "" - id = "onehuman_module" - materials = list(/datum/material/glass = 1000, /datum/material/diamond = 6000) - build_path = /obj/item/aiModule/zeroth/oneHuman - category = list("AI Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/protectstation_module - name = "Module Design (ProtectStation)" - desc = "" - id = "protectstation_module" - materials = list(/datum/material/glass = 1000, /datum/material/gold = 2000) - build_path = /obj/item/aiModule/supplied/protectStation - category = list("AI Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/quarantine_module - name = "Module Design (Quarantine)" - desc = "" - id = "quarantine_module" - materials = list(/datum/material/glass = 1000, /datum/material/gold = 2000) - build_path = /obj/item/aiModule/supplied/quarantine - category = list("AI Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/oxygen_module - name = "Module Design (OxygenIsToxicToHumans)" - desc = "" - id = "oxygen_module" - materials = list(/datum/material/glass = 1000, /datum/material/gold = 2000) - build_path = /obj/item/aiModule/supplied/oxygen - category = list("AI Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/freeform_module - name = "Module Design (Freeform)" - desc = "" - id = "freeform_module" - materials = list(/datum/material/glass = 1000, /datum/material/gold = 10000)//Custom inputs should be more expensive to get - build_path = /obj/item/aiModule/supplied/freeform - category = list("AI Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/reset_module - name = "Module Design (Reset)" - desc = "" - id = "reset_module" - materials = list(/datum/material/glass = 1000, /datum/material/gold = 2000) - build_path = /obj/item/aiModule/reset - category = list("AI Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/purge_module - name = "Module Design (Purge)" - desc = "" - id = "purge_module" - materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000) - build_path = /obj/item/aiModule/reset/purge - category = list("AI Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/remove_module - name = "Module Design (Law Removal)" - desc = "" - id = "remove_module" - materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000) - build_path = /obj/item/aiModule/remove - category = list("AI Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/freeformcore_module - name = "AI Core Module (Freeform)" - desc = "" - id = "freeformcore_module" - materials = list(/datum/material/glass = 1000, /datum/material/diamond = 10000)//Ditto - build_path = /obj/item/aiModule/core/freeformcore - category = list("AI Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/asimov - name = "Core Module Design (Asimov)" - desc = "" - id = "asimov_module" - materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000) - build_path = /obj/item/aiModule/core/full/asimov - category = list("AI Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/paladin_module - name = "Core Module Design (P.A.L.A.D.I.N.)" - desc = "" - id = "paladin_module" - build_type = IMPRINTER - materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000) - build_path = /obj/item/aiModule/core/full/paladin - category = list("AI Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/tyrant_module - name = "Core Module Design (T.Y.R.A.N.T.)" - desc = "" - id = "tyrant_module" - materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000) - build_path = /obj/item/aiModule/core/full/tyrant - category = list("AI Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/overlord_module - name = "Core Module Design (Overlord)" - desc = "" - id = "overlord_module" - materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000) - build_path = /obj/item/aiModule/core/full/overlord - category = list("AI Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/corporate_module - name = "Core Module Design (Corporate)" - desc = "" - id = "corporate_module" - materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000) - build_path = /obj/item/aiModule/core/full/corp - category = list("AI Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/default_module - name = "Core Module Design (Default)" - desc = "" - id = "default_module" - materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000) - build_path = /obj/item/aiModule/core/full/custom - category = list("AI Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm deleted file mode 100644 index c33ad97a91..0000000000 --- a/code/modules/research/designs/autolathe_designs.dm +++ /dev/null @@ -1,1028 +0,0 @@ -/////////////////////////////////// -//////////Autolathe Designs /////// -/////////////////////////////////// - -/datum/design/bucket - name = "Bucket" - id = "bucket" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 200) - build_path = /obj/item/reagent_containers/glass/bucket - category = list("initial","Tools","Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/mop - name = "Mop" - id = "mop" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 1000) - build_path = /obj/item/mop - category = list("initial","Tools","Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/crowbar - name = "Pocket Crowbar" - id = "crowbar" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 50) - build_path = /obj/item/crowbar - category = list("initial","Tools","Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/flashlight - name = "Flashlight" - id = "flashlight" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 50, /datum/material/glass = 20) - build_path = /obj/item/flashlight - category = list("initial","Tools") - -/datum/design/extinguisher - name = "Fire Extinguisher" - id = "extinguisher" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 90) - build_path = /obj/item/extinguisher - category = list("initial","Tools") - -/datum/design/pocketfireextinguisher - name = "Pocket Fire Extinguisher" - id = "pocketfireextinguisher" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 50, /datum/material/glass = 40) - build_path = /obj/item/extinguisher/mini - category = list("initial","Tools") - -/datum/design/multitool - name = "Multitool" - id = "multitool" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 50, /datum/material/glass = 20) - build_path = /obj/item/multitool - category = list("initial","Tools","Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/analyzer - name = "Analyzer" - id = "analyzer" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 30, /datum/material/glass = 20) - build_path = /obj/item/analyzer - category = list("initial","Tools","Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/tscanner - name = "T-Ray Scanner" - id = "tscanner" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 150) - build_path = /obj/item/t_scanner - category = list("initial","Tools","Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/weldingtool - name = "Welding Tool" - id = "welding_tool" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 70, /datum/material/glass = 20) - build_path = /obj/item/weldingtool - category = list("initial","Tools","Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/mini_weldingtool - name = "Emergency Welding Tool" - id = "mini_welding_tool" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 30, /datum/material/glass = 10) - build_path = /obj/item/weldingtool/mini - category = list("initial","Tools") - -/datum/design/screwdriver - name = "Screwdriver" - id = "screwdriver" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 75) - build_path = /obj/item/screwdriver - category = list("initial","Tools","Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/wirecutters - name = "Wirecutters" - id = "wirecutters" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 80) - build_path = /obj/item/wirecutters - category = list("initial","Tools","Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/wrench - name = "Wrench" - id = "wrench" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 150) - build_path = /obj/item/wrench - category = list("initial","Tools","Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/plunger - name = "Plunger" - id = "plunger" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 150) - build_path = /obj/item/plunger - category = list("initial","Tools","Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/welding_helmet - name = "Welding Helmet" - id = "welding_helmet" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 1750, /datum/material/glass = 400) - build_path = /obj/item/clothing/head/welding - category = list("initial","Tools") - -/datum/design/cable_coil - name = "Cable Coil" - id = "cable_coil" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 10, /datum/material/glass = 5) - build_path = /obj/item/stack/cable_coil - category = list("initial","Tools","Tool Designs") - maxstack = MAXCOIL - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/toolbox - name = "Toolbox" - id = "tool_box" - build_type = AUTOLATHE - materials = list(MAT_CATEGORY_RIGID = 500) - build_path = /obj/item/storage/toolbox - category = list("initial","Tools") - -/datum/design/apc_board - name = "APC Module" - id = "power control" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 100, /datum/material/glass = 100) - build_path = /obj/item/electronics/apc - category = list("initial", "Electronics") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/airlock_board - name = "Airlock Electronics" - id = "airlock_board" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 50, /datum/material/glass = 50) - build_path = /obj/item/electronics/airlock - category = list("initial", "Electronics") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/firelock_board - name = "Firelock Circuitry" - id = "firelock_board" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 50, /datum/material/glass = 50) - build_path = /obj/item/electronics/firelock - category = list("initial", "Electronics") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/airalarm_electronics - name = "Air Alarm Electronics" - id = "airalarm_electronics" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 50, /datum/material/glass = 50) - build_path = /obj/item/electronics/airalarm - category = list("initial", "Electronics") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/firealarm_electronics - name = "Fire Alarm Electronics" - id = "firealarm_electronics" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 50, /datum/material/glass = 50) - build_path = /obj/item/electronics/firealarm - category = list("initial", "Electronics") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/camera - name = "Camera" - id = "camera" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 50, /datum/material/glass = 100) - build_path = /obj/item/camera - category = list("initial", "Misc") - -/datum/design/camera_film - name = "Camera Film Cartridge" - id = "camera_film" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 10, /datum/material/glass = 10) - build_path = /obj/item/camera_film - category = list("initial", "Misc") - -/datum/design/earmuffs - name = "Earmuffs" - id = "earmuffs" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 500) - build_path = /obj/item/clothing/ears/earmuffs - category = list("initial", "Misc") - -/datum/design/pipe_painter - name = "Pipe Painter" - id = "pipe_painter" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/glass = 2000) - build_path = /obj/item/pipe_painter - category = list("initial","Tools","Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/airlock_painter - name = "Airlock Painter" - id = "airlock_painter" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 50, /datum/material/glass = 50) - build_path = /obj/item/airlock_painter - category = list("initial","Tools","Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/emergency_oxygen - name = "Emergency Oxygen Tank" - id = "emergency_oxygen" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 500) - build_path = /obj/item/tank/internals/emergency_oxygen/empty - category = list("initial","Misc","Equipment") - -/datum/design/emergency_oxygen_engi - name = "Extended-Capacity Emergency Oxygen Tank" - id = "emergency_oxygen_engi" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 750) - build_path = /obj/item/tank/internals/emergency_oxygen/engi/empty - category = list("hacked","Misc","Equipment") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_CARGO - -/datum/design/plasmaman_tank_belt - name = "Plasmaman Belt Tank" - id = "plasmaman_tank_belt" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 800) - build_path = /obj/item/tank/internals/plasmaman/belt/empty - category = list("hacked","Misc","Equipment") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_CARGO - -/datum/design/generic_gas_tank - name = "Generic Gas Tank" - id = "generic_tank" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 1000) - build_path = /obj/item/tank/internals/generic - category = list("initial","Misc","Equipment") - -/datum/design/metal - name = "Metal" - id = "metal" - build_type = AUTOLATHE - materials = list(/datum/material/iron = MINERAL_MATERIAL_AMOUNT) - build_path = /obj/item/stack/sheet/metal - category = list("initial","Construction") - maxstack = 50 - -/datum/design/glass - name = "Glass" - id = "glass" - build_type = AUTOLATHE - materials = list(/datum/material/glass = MINERAL_MATERIAL_AMOUNT) - build_path = /obj/item/stack/sheet/glass - category = list("initial","Construction") - maxstack = 50 - -/datum/design/rglass - name = "Reinforced Glass" - id = "rglass" - build_type = AUTOLATHE | SMELTER | PROTOLATHE - materials = list(/datum/material/iron = 1000, /datum/material/glass = MINERAL_MATERIAL_AMOUNT) - build_path = /obj/item/stack/sheet/rglass - category = list("initial","Construction","Stock Parts") - maxstack = 50 - -/datum/design/rods - name = "Metal Rod" - id = "rods" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 1000) - build_path = /obj/item/stack/rods - category = list("initial","Construction") - maxstack = 50 - -/datum/design/rcd_ammo - name = "Compressed Matter Cartridge" - id = "rcd_ammo" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 12000, /datum/material/glass = 8000) - build_path = /obj/item/rcd_ammo - category = list("initial","Construction") - -/datum/design/kitchen_knife - name = "Kitchen Knife" - id = "kitchen_knife" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 12000) - build_path = /obj/item/kitchen/knife - category = list("initial","Dinnerware") - -/datum/design/plastic_knife - name = "Plastic Knife" - id = "plastic_knife" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/plastic = 100) - build_path = /obj/item/kitchen/knife/plastic - category = list("initial", "Tool Designs","Dinnerware") - -/datum/design/fork - name = "Fork" - id = "fork" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 80) - build_path = /obj/item/kitchen/fork - category = list("initial","Dinnerware") - -/datum/design/plastic_fork - name = "Plastic Fork" - id = "plastic_fork" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/plastic = 80) - build_path = /obj/item/kitchen/fork/plastic - category = list("initial", "Tool Designs", "Dinnerware") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/plastic_spoon - name = "Plastic Spoon" - id = "plastic_spoon" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/plastic = 120) - build_path = /obj/item/kitchen/spoon/plastic - category = list("initial", "Tool Designs", "Dinnerware") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/tray - name = "Tray" - id = "tray" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 3000) - build_path = /obj/item/storage/bag/tray - category = list("initial","Dinnerware") - -/datum/design/bowl - name = "Bowl" - id = "bowl" - build_type = AUTOLATHE - materials = list(/datum/material/glass = 500) - build_path = /obj/item/reagent_containers/glass/bowl - category = list("initial","Dinnerware") - -/datum/design/drinking_glass - name = "Drinking Glass" - id = "drinking_glass" - build_type = AUTOLATHE - materials = list(/datum/material/glass = 500) - build_path = /obj/item/reagent_containers/food/drinks/drinkingglass - category = list("initial","Dinnerware") - -/datum/design/shot_glass - name = "Shot Glass" - id = "shot_glass" - build_type = AUTOLATHE - materials = list(/datum/material/glass = 100) - build_path = /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass - category = list("initial","Dinnerware") - -/datum/design/shaker - name = "Shaker" - id = "shaker" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 1500) - build_path = /obj/item/reagent_containers/food/drinks/shaker - category = list("initial","Dinnerware") - -/datum/design/cultivator - name = "Cultivator" - id = "cultivator" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron=50) - build_path = /obj/item/cultivator - category = list("initial","Misc", "Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/plant_analyzer - name = "Plant Analyzer" - id = "plant_analyzer" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 30, /datum/material/glass = 20) - build_path = /obj/item/plant_analyzer - category = list("initial","Misc", "Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/shovel - name = "Shovel" - id = "shovel" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 50) - build_path = /obj/item/shovel - category = list("initial","Misc", "Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/spade - name = "Spade" - id = "spade" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 50) - build_path = /obj/item/shovel/spade - category = list("initial","Misc", "Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/hatchet - name = "Hatchet" - id = "hatchet" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 15000) - build_path = /obj/item/hatchet - category = list("initial","Misc", "Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/foilhat - name = "Tinfoil Hat" - id = "tinfoil_hat" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 5500) - build_path = /obj/item/clothing/head/foilhat - category = list("hacked", "Misc") - -/datum/design/scalpel - name = "Scalpel" - id = "scalpel" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 4000, /datum/material/glass = 1000) - build_path = /obj/item/scalpel - category = list("initial", "Medical", "Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/circular_saw - name = "Circular Saw" - id = "circular_saw" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 10000, /datum/material/glass = 6000) - build_path = /obj/item/circular_saw - category = list("initial", "Medical", "Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/surgicaldrill - name = "Surgical Drill" - id = "surgicaldrill" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 10000, /datum/material/glass = 6000) - build_path = /obj/item/surgicaldrill - category = list("initial", "Medical", "Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/retractor - name = "Retractor" - id = "retractor" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 6000, /datum/material/glass = 3000) - build_path = /obj/item/retractor - category = list("initial", "Medical", "Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/cautery - name = "Cautery" - id = "cautery" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 2500, /datum/material/glass = 750) - build_path = /obj/item/cautery - category = list("initial", "Medical", "Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/hemostat - name = "Hemostat" - id = "hemostat" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/glass = 2500) - build_path = /obj/item/hemostat - category = list("initial", "Medical", "Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/beaker - name = "Beaker" - id = "beaker" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/glass = 500) - build_path = /obj/item/reagent_containers/glass/beaker - category = list("initial", "Medical", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SERVICE - -/datum/design/large_beaker - name = "Large Beaker" - id = "large_beaker" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/glass = 2500) - build_path = /obj/item/reagent_containers/glass/beaker/large - category = list("initial", "Medical", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SERVICE - -/datum/design/pillbottle - name = "Pill Bottle" - id = "pillbottle" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 20, /datum/material/glass = 100) - build_path = /obj/item/storage/pill_bottle - category = list("initial", "Medical", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/beanbag_slug - name = "Beanbag Slug" - id = "beanbag_slug" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 2000) - build_path = /obj/item/ammo_casing/shotgun/beanbag - category = list("initial", "Security") - -/datum/design/rubbershot - name = "Rubber Shot" - id = "rubber_shot" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 4000) - build_path = /obj/item/ammo_casing/shotgun/rubbershot - category = list("initial", "Security") - -/datum/design/c38 - name = "Speed Loader (.38)" - id = "c38" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 20000) - build_path = /obj/item/ammo_box/c38 - category = list("initial", "Security") - -/datum/design/recorder - name = "Universal Recorder" - id = "recorder" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 60, /datum/material/glass = 30) - build_path = /obj/item/taperecorder/empty - category = list("initial", "Misc") - -/datum/design/tape - name = "Tape" - id = "tape" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 20, /datum/material/glass = 5) - build_path = /obj/item/tape/random - category = list("initial", "Misc") - -/datum/design/igniter - name = "Igniter" - id = "igniter" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 50) - build_path = /obj/item/assembly/igniter - category = list("initial", "Misc") - -/datum/design/signaler - name = "Remote Signaling Device" - id = "signaler" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 400, /datum/material/glass = 120) - build_path = /obj/item/assembly/signaler - category = list("initial", "T-Comm") - -/datum/design/radio_headset - name = "Radio Headset" - id = "radio_headset" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 75) - build_path = /obj/item/radio/headset - category = list("initial", "T-Comm") - -/datum/design/bounced_radio - name = "Station Bounced Radio" - id = "bounced_radio" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 75, /datum/material/glass = 25) - build_path = /obj/item/radio/off - category = list("initial", "T-Comm") - -/datum/design/intercom_frame - name = "Intercom Frame" - id = "intercom_frame" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 75, /datum/material/glass = 25) - build_path = /obj/item/wallframe/intercom - category = list("initial", "T-Comm") - -/datum/design/infrared_emitter - name = "Infrared Emitter" - id = "infrared_emitter" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 1000, /datum/material/glass = 500) - build_path = /obj/item/assembly/infra - category = list("initial", "Misc") - -/datum/design/health_sensor - name = "Health Sensor" - id = "health_sensor" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 800, /datum/material/glass = 200) - build_path = /obj/item/assembly/health - category = list("initial", "Medical") - -/datum/design/timer - name = "Timer" - id = "timer" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 50) - build_path = /obj/item/assembly/timer - category = list("initial", "Misc") - -/datum/design/voice_analyser - name = "Voice Analyser" - id = "voice_analyser" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 50) - build_path = /obj/item/assembly/voice - category = list("initial", "Misc") - -/datum/design/light_tube - name = "Light Tube" - id = "light_tube" - build_type = AUTOLATHE - materials = list(/datum/material/glass = 100) - build_path = /obj/item/light/tube - category = list("initial", "Construction") - -/datum/design/light_bulb - name = "Light Bulb" - id = "light_bulb" - build_type = AUTOLATHE - materials = list(/datum/material/glass = 100) - build_path = /obj/item/light/bulb - category = list("initial", "Construction") - -/datum/design/camera_assembly - name = "Camera Assembly" - id = "camera_assembly" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 400, /datum/material/glass = 250) - build_path = /obj/item/wallframe/camera - category = list("initial", "Construction") - -/datum/design/newscaster_frame - name = "Newscaster Frame" - id = "newscaster_frame" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 14000, /datum/material/glass = 8000) - build_path = /obj/item/wallframe/newscaster - category = list("initial", "Construction") - -/datum/design/syringe - name = "Syringe" - id = "syringe" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 10, /datum/material/glass = 20) - build_path = /obj/item/reagent_containers/syringe - category = list("initial", "Medical", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/prox_sensor - name = "Proximity Sensor" - id = "prox_sensor" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 800, /datum/material/glass = 200) - build_path = /obj/item/assembly/prox_sensor - category = list("initial", "Misc") - -/datum/design/foam_dart - name = "Box of Foam Darts" - id = "foam_dart" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 500) - build_path = /obj/item/ammo_box/foambox - category = list("initial", "Misc") - -//hacked autolathe recipes -/datum/design/flamethrower - name = "Flamethrower" - id = "flamethrower" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 500) - build_path = /obj/item/flamethrower/full - category = list("hacked", "Security") - -/datum/design/rpd - name = "Rapid Pipe Dispenser (RPD)" - id = "rpd" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 75000, /datum/material/glass = 37500) - build_path = /obj/item/pipe_dispenser - category = list("hacked", "Construction") - -/datum/design/electropack - name = "Electropack" - id = "electropack" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 10000, /datum/material/glass = 2500) - build_path = /obj/item/electropack - category = list("hacked", "Tools") - -/datum/design/large_welding_tool - name = "Industrial Welding Tool" - id = "large_welding_tool" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 70, /datum/material/glass = 60) - build_path = /obj/item/weldingtool/largetank - category = list("hacked", "Tools") - -/datum/design/handcuffs - name = "Handcuffs" - id = "handcuffs" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 500) - build_path = /obj/item/restraints/handcuffs - category = list("hacked", "Security") - -/datum/design/receiver - name = "Modular Receiver" - id = "receiver" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 15000) - build_path = /obj/item/weaponcrafting/receiver - category = list("hacked", "Security") - -/datum/design/shotgun_slug - name = "Shotgun Slug" - id = "shotgun_slug" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 4000) - build_path = /obj/item/ammo_casing/shotgun - category = list("hacked", "Security") - -/datum/design/buckshot_shell - name = "Buckshot Shell" - id = "buckshot_shell" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 4000) - build_path = /obj/item/ammo_casing/shotgun/buckshot - category = list("hacked", "Security") - -/datum/design/shotgun_dart - name = "Shotgun Dart" - id = "shotgun_dart" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 4000) - build_path = /obj/item/ammo_casing/shotgun/dart - category = list("hacked", "Security") - -/datum/design/incendiary_slug - name = "Incendiary Slug" - id = "incendiary_slug" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 4000) - build_path = /obj/item/ammo_casing/shotgun/incendiary - category = list("hacked", "Security") - -/datum/design/riot_dart - name = "Foam Riot Dart" - id = "riot_dart" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 1000) //Discount for making individually - no box = less metal! - build_path = /obj/item/ammo_casing/caseless/foam_dart/riot - category = list("hacked", "Security") - -/datum/design/riot_darts - name = "Foam Riot Dart Box" - id = "riot_darts" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 50000) //Comes with 40 darts - build_path = /obj/item/ammo_box/foambox/riot - category = list("hacked", "Security") - -/datum/design/a357 - name = ".357 Casing" - id = "a357" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 4000) - build_path = /obj/item/ammo_casing/a357 - category = list("hacked", "Security") - -/datum/design/c10mm - name = "Ammo Box (10mm)" - id = "c10mm" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 30000) - build_path = /obj/item/ammo_box/c10mm - category = list("hacked", "Security") - -/datum/design/c45 - name = "Ammo Box (.45)" - id = "c45" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 30000) - build_path = /obj/item/ammo_box/c45 - category = list("hacked", "Security") - -/datum/design/c9mm - name = "Ammo Box (9mm)" - id = "c9mm" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 30000) - build_path = /obj/item/ammo_box/c9mm - category = list("hacked", "Security") - -/datum/design/cleaver - name = "Butcher's Cleaver" - id = "cleaver" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 18000) - build_path = /obj/item/kitchen/knife/butcher - category = list("hacked", "Dinnerware") - -/datum/design/spraycan - name = "Spraycan" - id = "spraycan" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 100, /datum/material/glass = 100) - build_path = /obj/item/toy/crayon/spraycan - category = list("initial", "Tools") - -/datum/design/desttagger - name = "Destination Tagger" - id = "desttagger" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 250, /datum/material/glass = 125) - build_path = /obj/item/destTagger - category = list("initial", "Electronics") - -/datum/design/handlabeler - name = "Hand Labeler" - id = "handlabel" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 150, /datum/material/glass = 125) - build_path = /obj/item/hand_labeler - category = list("initial", "Electronics") - -/datum/design/geiger - name = "Geiger Counter" - id = "geigercounter" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 150, /datum/material/glass = 150) - build_path = /obj/item/geiger_counter - category = list("initial", "Tools") - -/datum/design/turret_control_frame - name = "Turret Control Frame" - id = "turret_control" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 12000) - build_path = /obj/item/wallframe/turret_control - category = list("initial", "Construction") - -/datum/design/conveyor_belt - name = "Conveyor Belt" - id = "conveyor_belt" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 5000) - build_path = /obj/item/conveyor_construct - category = list("initial", "Construction") - -/datum/design/conveyor_switch - name = "Conveyor Belt Switch" - id = "conveyor_switch" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 450, /datum/material/glass = 190) - build_path = /obj/item/conveyor_switch_construct - category = list("initial", "Construction") - -/datum/design/laptop - name = "Laptop Frame" - id = "laptop" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 10000, /datum/material/glass = 1000) - build_path = /obj/item/modular_computer/laptop/buildable - category = list("initial","Misc") - -/datum/design/tablet - name = "Tablet Frame" - id = "tablet" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 2000, /datum/material/glass = 1000) - build_path = /obj/item/modular_computer/tablet - category = list("initial","Misc") - -/datum/design/slime_scanner - name = "Slime Scanner" - id = "slime_scanner" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 300, /datum/material/glass = 200) - build_path = /obj/item/slime_scanner - category = list("initial", "Misc") - -/datum/design/pet_carrier - name = "Pet Carrier" - id = "pet_carrier" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 7500, /datum/material/glass = 100) - build_path = /obj/item/pet_carrier - category = list("initial", "Misc") - -/datum/design/miniature_power_cell - name = "Light Fixture Battery" - id = "miniature_power_cell" - build_type = AUTOLATHE - materials = list(/datum/material/glass = 20) - build_path = /obj/item/stock_parts/cell/emergency_light - category = list("initial", "Electronics") - -/datum/design/packageWrap - name = "Package Wrapping" - id = "packagewrap" - build_type = AUTOLATHE | PROTOLATHE - materials = list(/datum/material/iron = 200, /datum/material/glass = 200) - build_path = /obj/item/stack/packageWrap - category = list("initial", "Misc", "Equipment") - maxstack = 30 - -/datum/design/holodisk - name = "Holodisk" - id = "holodisk" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 100, /datum/material/glass = 100) - build_path = /obj/item/disk/holodisk - category = list("initial", "Misc") - -/datum/design/circuit - name = "Blue Circuit Tile" - id = "circuit" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 500) - build_path = /obj/item/stack/tile/circuit - category = list("initial", "Misc") - maxstack = 50 - -/datum/design/circuitgreen - name = "Green Circuit Tile" - id = "circuitgreen" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 500) - build_path = /obj/item/stack/tile/circuit/green - category = list("initial", "Misc") - maxstack = 50 - -/datum/design/circuitred - name = "Red Circuit Tile" - id = "circuitred" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 500) - build_path = /obj/item/stack/tile/circuit/red - category = list("initial", "Misc") - maxstack = 50 - -/datum/design/price_tagger - name = "Price Tagger" - id = "price_tagger" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 1500, /datum/material/glass = 500) - build_path = /obj/item/price_tagger - category = list("initial", "Misc") - -/datum/design/custom_vendor_refill - name = "Custom Vendor Refill" - id = "custom_vendor_refill" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/glass = 2000) - build_path = /obj/item/vending_refill/custom - category = list("initial", "Misc") - -/datum/design/ducts - name = "Fluid Ducts" - id = "fluid_ducts" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 500) - build_path = /obj/item/stack/ducts - category = list("initial", "Construction") - maxstack = 50 - -/datum/design/toygun - name = "Cap Gun" - id = "toygun" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 100, /datum/material/glass = 50) - build_path = /obj/item/toy/gun - category = list("hacked", "Misc") - -/datum/design/capbox - name = "Box of Cap Gun Shots" - id = "capbox" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 20, /datum/material/glass = 5) - build_path = /obj/item/toy/ammo/gun - category = list("hacked", "Misc") diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm deleted file mode 100644 index 9e8f5dd207..0000000000 --- a/code/modules/research/designs/biogenerator_designs.dm +++ /dev/null @@ -1,163 +0,0 @@ -/////////////////////////////////// -///////Biogenerator Designs /////// -/////////////////////////////////// - -/datum/design/milk - name = "10u Milk" - id = "milk" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 20) - make_reagents = list(/datum/reagent/consumable/milk = 10) - category = list("initial","Food") - -/datum/design/ethanol - name = "10u Ethanol" - id = "ethanol" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 30) - make_reagents = list(/datum/reagent/consumable/ethanol = 10) - category = list("initial","Food") - -/datum/design/cream - name = "10u Cream" - id = "cream" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 30) - make_reagents = list(/datum/reagent/consumable/cream = 10) - category = list("initial","Food") - -/datum/design/black_pepper - name = "10u Black Pepper" - id = "black_pepper" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 25) - make_reagents = list(/datum/reagent/consumable/blackpepper = 10) - category = list("initial","Food") - -/datum/design/enzyme - name = "10u Universal Enzyme" - id = "enzyme" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 30) - make_reagents = list(/datum/reagent/consumable/enzyme = 10) - category = list("initial","Food") - -/datum/design/flour - name = "10u Flour" - id = "flour_sack" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 30) - make_reagents = list(/datum/reagent/consumable/flour = 10) - category = list("initial","Food") - -/datum/design/monkey_cube - name = "Monkey Cube" - id = "mcube" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 250) - build_path = /obj/item/reagent_containers/food/snacks/monkeycube - category = list("initial", "Food") - -/datum/design/ez_nut //easy nut :) - name = "30u E-Z Nutrient" - id = "ez_nut" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 10) - make_reagents = list(/datum/reagent/plantnutriment/eznutriment = 30) - category = list("initial","Botany Chemicals") - -/datum/design/l4z_nut - name = "30u Left 4 Zed" - id = "l4z_nut" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 20) - make_reagents = list(/datum/reagent/plantnutriment/left4zednutriment = 30) - category = list("initial","Botany Chemicals") - -/datum/design/rh_nut - name = "30u Robust Harvest" - id = "rh_nut" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 25) - make_reagents = list(/datum/reagent/plantnutriment/robustharvestnutriment = 30) - category = list("initial","Botany Chemicals") - -/datum/design/weed_killer - name = "30u Weed Killer" - id = "weed_killer" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 50) - make_reagents = list(/datum/reagent/toxin/plantbgone/weedkiller = 30) - category = list("initial","Botany Chemicals") - -/datum/design/pest_spray - name = "30u Pest Killer" - id = "pest_spray" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 50) - make_reagents = list(/datum/reagent/toxin/pestkiller = 30) - category = list("initial","Botany Chemicals") - -/datum/design/cloth - name = "Roll of Cloth" - id = "cloth" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 50) - build_path = /obj/item/stack/sheet/cloth - category = list("initial","Organic Materials") - -/datum/design/cardboard - name = "Sheet of Cardboard" - id = "cardboard" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 25) - build_path = /obj/item/stack/sheet/cardboard - category = list("initial","Organic Materials") - -/datum/design/leather - name = "Sheet of Leather" - id = "leather" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 150) - build_path = /obj/item/stack/sheet/leather - category = list("initial","Organic Materials") - -/datum/design/secbelt - name = "Security Belt" - id = "secbelt" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 300) - build_path = /obj/item/storage/belt/security - category = list("initial","Organic Materials") - -/datum/design/medbelt - name = "Medical Belt" - id = "medbel" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 300) - build_path = /obj/item/storage/belt/medical - category = list("initial","Organic Materials") - -/datum/design/janibelt - name = "Janitorial Belt" - id = "janibelt" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 300) - build_path = /obj/item/storage/belt/janitor - category = list("initial","Organic Materials") - -/datum/design/s_holster - name = "Shoulder Holster" - id = "s_holster" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 400) - build_path = /obj/item/storage/belt/holster - category = list("initial","Organic Materials") - -/datum/design/rice_hat - name = "Rice Hat" - id = "rice_hat" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass= 300) - build_path = /obj/item/clothing/head/rice_hat - category = list("initial","Organic Materials") diff --git a/code/modules/research/designs/bluespace_designs.dm b/code/modules/research/designs/bluespace_designs.dm deleted file mode 100644 index 241842ba58..0000000000 --- a/code/modules/research/designs/bluespace_designs.dm +++ /dev/null @@ -1,75 +0,0 @@ - -///////////////////////////////////////// -///////////////Bluespace///////////////// -///////////////////////////////////////// - -/datum/design/beacon - name = "Tracking Beacon" - desc = "" - id = "beacon" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 150, /datum/material/glass = 100) - build_path = /obj/item/beacon - category = list("Bluespace Designs") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SECURITY - -/datum/design/bag_holding - name = "Bag of Holding" - desc = "" - id = "bag_holding" - build_type = PROTOLATHE - materials = list(/datum/material/gold = 3000, /datum/material/diamond = 1500, /datum/material/uranium = 250, /datum/material/bluespace = 2000) - build_path = /obj/item/storage/backpack/holding - category = list("Bluespace Designs") - dangerous_construction = TRUE - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/bluespace_crystal - name = "Artificial Bluespace Crystal" - desc = "" - id = "bluespace_crystal" - build_type = PROTOLATHE - materials = list(/datum/material/diamond = 1500, /datum/material/plasma = 1500) - build_path = /obj/item/stack/ore/bluespace_crystal/artificial - category = list("Bluespace Designs") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/telesci_gps - name = "GPS Device" - desc = "" - id = "telesci_gps" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 1000) - build_path = /obj/item/gps - category = list("Bluespace Designs") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_CARGO - -/datum/design/desynchronizer - name = "Desynchronizer" - desc = "" - id = "desynchronizer" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 1000, /datum/material/glass = 500, /datum/material/silver = 1500, /datum/material/bluespace = 1000) - build_path = /obj/item/desynchronizer - category = list("Bluespace Designs") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/miningsatchel_holding - name = "Mining Satchel of Holding" - desc = "" - id = "minerbag_holding" - build_type = PROTOLATHE - materials = list(/datum/material/gold = 250, /datum/material/uranium = 500) //quite cheap, for more convenience - build_path = /obj/item/storage/bag/ore/holding - category = list("Bluespace Designs") - departmental_flags = DEPARTMENTAL_FLAG_CARGO - -/datum/design/swapper - name = "Quantum Spin Inverter" - desc = "" - id = "swapper" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 1000, /datum/material/bluespace = 2000, /datum/material/gold = 1500, /datum/material/silver = 1000) - build_path = /obj/item/swapper - category = list("Bluespace Designs") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm deleted file mode 100644 index f15c88b42b..0000000000 --- a/code/modules/research/designs/comp_board_designs.dm +++ /dev/null @@ -1,313 +0,0 @@ -///////////////////Computer Boards/////////////////////////////////// - -/datum/design/board - name = "Computer Design ( NULL ENTRY )" - desc = "" - build_type = IMPRINTER - materials = list(/datum/material/glass = 1000) - -/datum/design/board/arcade_battle - name = "Computer Design (Battle Arcade Machine)" - desc = "" - id = "arcade_battle" - build_path = /obj/item/circuitboard/computer/arcade/battle - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_ALL - -/datum/design/board/orion_trail - name = "Computer Design (Orion Trail Arcade Machine)" - desc = "" - id = "arcade_orion" - build_path = /obj/item/circuitboard/computer/arcade/orion_trail - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_ALL - -/datum/design/board/seccamera - name = "Computer Design (Security Camera)" - desc = "" - id = "seccamera" - build_path = /obj/item/circuitboard/computer/security - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/board/rdcamera - name = "Computer Design (Research Monitor)" - desc = "" - id = "rdcamera" - build_path = /obj/item/circuitboard/computer/research - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/xenobiocamera - name = "Computer Design (Xenobiology Console)" - desc = "" - id = "xenobioconsole" - build_path = /obj/item/circuitboard/computer/xenobiology - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/aiupload - name = "Computer Design (AI Upload)" - desc = "" - id = "aiupload" - materials = list(/datum/material/glass = 1000, /datum/material/gold = 2000) - build_path = /obj/item/circuitboard/computer/aiupload - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/borgupload - name = "Computer Design (Cyborg Upload)" - desc = "" - id = "borgupload" - materials = list(/datum/material/glass = 1000, /datum/material/gold = 2000) - build_path = /obj/item/circuitboard/computer/borgupload - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/med_data - name = "Computer Design (Medical Records)" - desc = "" - id = "med_data" - build_path = /obj/item/circuitboard/computer/med_data - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/board/operating - name = "Computer Design (Operating Computer)" - desc = "" - id = "operating" - build_path = /obj/item/circuitboard/computer/operating - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/pandemic - name = "Computer Design (PanD.E.M.I.C. 2200)" - desc = "" - id = "pandemic" - build_path = /obj/item/circuitboard/computer/pandemic - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/board/scan_console - name = "Computer Design (DNA Machine)" - desc = "" - id = "scan_console" - build_path = /obj/item/circuitboard/computer/scan_consolenew - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/comconsole - name = "Computer Design (Communications)" - desc = "" - id = "comconsole" - build_path = /obj/item/circuitboard/computer/communications - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SECURITY //Honestly should have a bridge techfab for this sometime. - -/datum/design/board/idcardconsole - name = "Computer Design (ID Console)" - desc = "" - id = "idcardconsole" - build_path = /obj/item/circuitboard/computer/card - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SECURITY //Honestly should have a bridge techfab for this sometime. - -/datum/design/board/crewconsole - name = "Computer Design (Crew monitoring computer)" - desc = "" - id = "crewconsole" - build_path = /obj/item/circuitboard/computer/crew - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/board/secdata - name = "Computer Design (Security Records Console)" - desc = "" - id = "secdata" - build_path = /obj/item/circuitboard/computer/secure_data - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/board/atmosalerts - name = "Computer Design (Atmosphere Alert)" - desc = "" - id = "atmosalerts" - build_path = /obj/item/circuitboard/computer/atmos_alert - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/board/atmos_control - name = "Computer Design (Atmospheric Monitor)" - desc = "" - id = "atmos_control" - build_path = /obj/item/circuitboard/computer/atmos_control - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/board/robocontrol - name = "Computer Design (Robotics Control Console)" - desc = "" - id = "robocontrol" - build_path = /obj/item/circuitboard/computer/robotics - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/slot_machine - name = "Computer Design (Slot Machine)" - desc = "" - id = "slotmachine" - build_path = /obj/item/circuitboard/computer/slot_machine - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_ALL - -/datum/design/board/powermonitor - name = "Computer Design (Power Monitor)" - desc = "" - id = "powermonitor" - build_path = /obj/item/circuitboard/computer/powermonitor - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/board/solarcontrol - name = "Computer Design (Solar Control)" - desc = "" - id = "solarcontrol" - build_path = /obj/item/circuitboard/computer/solar_control - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/board/prisonmanage - name = "Computer Design (Prisoner Management Console)" - desc = "" - id = "prisonmanage" - build_path = /obj/item/circuitboard/computer/prisoner - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/board/mechacontrol - name = "Computer Design (Exosuit Control Console)" - desc = "" - id = "mechacontrol" - build_path = /obj/item/circuitboard/computer/mecha_control - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/mechapower - name = "Computer Design (Mech Bay Power Control Console)" - desc = "" - id = "mechapower" - build_path = /obj/item/circuitboard/computer/mech_bay_power_console - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/rdconsole - name = "Computer Design (R&D Console)" - desc = "" - id = "rdconsole" - build_path = /obj/item/circuitboard/computer/rdconsole - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/cargo - name = "Computer Design (Supply Console)" - desc = "" - id = "cargo" - build_path = /obj/item/circuitboard/computer/cargo - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_CARGO - -/datum/design/board/cargorequest - name = "Computer Design (Supply Request Console)" - desc = "" - id = "cargorequest" - build_path = /obj/item/circuitboard/computer/cargo/request - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_CARGO - -/datum/design/board/bounty - name = "Computer Design (Bounty Console)" - desc = "" - id = "bounty" - build_path = /obj/item/circuitboard/computer/bounty - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_CARGO - -/datum/design/board/mining - name = "Computer Design (Outpost Status Display)" - desc = "" - id = "mining" - build_path = /obj/item/circuitboard/computer/mining - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SECURITY - -/datum/design/board/comm_monitor - name = "Computer Design (Telecommunications Monitoring Console)" - desc = "" - id = "comm_monitor" - build_path = /obj/item/circuitboard/computer/comm_monitor - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/board/comm_server - name = "Computer Design (Telecommunications Server Monitoring Console)" - desc = "" - id = "comm_server" - build_path = /obj/item/circuitboard/computer/comm_server - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/board/message_monitor - name = "Computer Design (Messaging Monitor Console)" - desc = "" - id = "message_monitor" - build_path = /obj/item/circuitboard/computer/message_monitor - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/board/aifixer - name = "Computer Design (AI Integrity Restorer)" - desc = "" - id = "aifixer" - build_path = /obj/item/circuitboard/computer/aifixer - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/libraryconsole - name = "Computer Design (Library Console)" - desc = "" - id = "libraryconsole" -// build_path = /obj/item/circuitboard/computer/libraryconsole - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_ALL - -/datum/design/board/apc_control - name = "Computer Design (APC Control)" - desc = "" - id = "apc_control" - build_path = /obj/item/circuitboard/computer/apc_control - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/board/nanite_chamber_control - name = "Computer Design (Nanite Chamber Control)" - desc = "" - id = "nanite_chamber_control" - build_path = /obj/item/circuitboard/computer/nanite_chamber_control - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/nanite_cloud_control - name = "Computer Design (Nanite Cloud Control)" - desc = "" - id = "nanite_cloud_control" - build_path = /obj/item/circuitboard/computer/nanite_cloud_controller - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/advanced_camera - name = "Computer Design (Advanced Camera Console)" - desc = "" - id = "advanced_camera" - build_path = /obj/item/circuitboard/computer/advanced_camera - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY diff --git a/code/modules/research/designs/computer_part_designs.dm b/code/modules/research/designs/computer_part_designs.dm deleted file mode 100644 index 683fd8b61e..0000000000 --- a/code/modules/research/designs/computer_part_designs.dm +++ /dev/null @@ -1,245 +0,0 @@ -//////////////////////////////////////// -///////////Computer Parts/////////////// -//////////////////////////////////////// - -/datum/design/disk/normal - name = "Hard Disk Drive" - id = "hdd_basic" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 400, /datum/material/glass = 100) - build_path = /obj/item/computer_hardware/hard_drive - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/disk/advanced - name = "Advanced Hard Disk Drive" - id = "hdd_advanced" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 800, /datum/material/glass = 200) - build_path = /obj/item/computer_hardware/hard_drive/advanced - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/disk/super - name = "Super Hard Disk Drive" - id = "hdd_super" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 1600, /datum/material/glass = 400) - build_path = /obj/item/computer_hardware/hard_drive/super - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/disk/cluster - name = "Cluster Hard Disk Drive" - id = "hdd_cluster" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 3200, /datum/material/glass = 800) - build_path = /obj/item/computer_hardware/hard_drive/cluster - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/disk/small - name = "Solid State Drive" - id = "ssd_small" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 800, /datum/material/glass = 200) - build_path = /obj/item/computer_hardware/hard_drive/small - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/disk/micro - name = "Micro Solid State Drive" - id = "ssd_micro" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 400, /datum/material/glass = 100) - build_path = /obj/item/computer_hardware/hard_drive/micro - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -// Network cards -/datum/design/netcard/basic - name = "Network Card" - id = "netcard_basic" - build_type = IMPRINTER - materials = list(/datum/material/iron = 250, /datum/material/glass = 100) - build_path = /obj/item/computer_hardware/network_card - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/netcard/advanced - name = "Advanced Network Card" - id = "netcard_advanced" - build_type = IMPRINTER - materials = list(/datum/material/iron = 500, /datum/material/glass = 200) - build_path = /obj/item/computer_hardware/network_card/advanced - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/netcard/wired - name = "Wired Network Card" - id = "netcard_wired" - build_type = IMPRINTER - materials = list(/datum/material/iron = 2500, /datum/material/glass = 400) - build_path = /obj/item/computer_hardware/network_card/wired - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -// Data disks -/datum/design/portabledrive/basic - name = "Data Disk" - id = "portadrive_basic" - build_type = IMPRINTER - materials = list(/datum/material/glass = 800) - build_path = /obj/item/computer_hardware/hard_drive/portable - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/portabledrive/advanced - name = "Advanced Data Disk" - id = "portadrive_advanced" - build_type = IMPRINTER - materials = list(/datum/material/glass = 1600) - build_path = /obj/item/computer_hardware/hard_drive/portable/advanced - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/portabledrive/super - name = "Super Data Disk" - id = "portadrive_super" - build_type = IMPRINTER - materials = list(/datum/material/glass = 3200) - build_path = /obj/item/computer_hardware/hard_drive/portable/super - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -// Card slot -/datum/design/cardslot - name = "ID Card Slot" - id = "cardslot" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 600) - build_path = /obj/item/computer_hardware/card_slot - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -// Intellicard slot -/datum/design/aislot - name = "Intellicard Slot" - id = "aislot" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 600) - build_path = /obj/item/computer_hardware/ai_slot - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -// Mini printer -/datum/design/miniprinter - name = "Miniprinter" - id = "miniprinter" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 600) - build_path = /obj/item/computer_hardware/printer/mini - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -// APC Link -/datum/design/APClink - name = "Area Power Connector" - id = "APClink" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2000) - build_path = /obj/item/computer_hardware/recharger/APC - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -// Batteries -/datum/design/battery/controller - name = "Power Cell Controller" - id = "bat_control" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 400) - build_path = /obj/item/computer_hardware/battery - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/battery/normal - name = "Battery Module" - id = "bat_normal" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 400) - build_path = /obj/item/stock_parts/cell/computer - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/battery/advanced - name = "Advanced Battery Module" - id = "bat_advanced" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 800) - build_path = /obj/item/stock_parts/cell/computer/advanced - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/battery/super - name = "Super Battery Module" - id = "bat_super" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 1600) - build_path = /obj/item/stock_parts/cell/computer/super - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/battery/nano - name = "Nano Battery Module" - id = "bat_nano" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 200) - build_path = /obj/item/stock_parts/cell/computer/nano - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/battery/micro - name = "Micro Battery Module" - id = "bat_micro" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 400) - build_path = /obj/item/stock_parts/cell/computer/micro - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -// Processor unit -/datum/design/cpu - name = "Processor Board" - id = "cpu_normal" - build_type = IMPRINTER - materials = list(/datum/material/glass = 1600) - build_path = /obj/item/computer_hardware/processor_unit - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/cpu/small - name = "Microprocessor" - id = "cpu_small" - build_type = IMPRINTER - materials = list(/datum/material/glass = 800) - build_path = /obj/item/computer_hardware/processor_unit/small - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/cpu/photonic - name = "Photonic Processor Board" - id = "pcpu_normal" - build_type = IMPRINTER - materials = list(/datum/material/glass = 6400, /datum/material/gold = 2000) - build_path = /obj/item/computer_hardware/processor_unit/photonic - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/cpu/photonic/small - name = "Photonic Microprocessor" - id = "pcpu_small" - build_type = IMPRINTER - materials = list(/datum/material/glass = 3200, /datum/material/gold = 1000) - build_path = /obj/item/computer_hardware/processor_unit/photonic/small - category = list("Computer Parts") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING diff --git a/code/modules/research/designs/electronics_designs.dm b/code/modules/research/designs/electronics_designs.dm deleted file mode 100644 index 264c10af48..0000000000 --- a/code/modules/research/designs/electronics_designs.dm +++ /dev/null @@ -1,111 +0,0 @@ - -/////////////////////////////////// -/////Non-Board Computer Stuff////// -/////////////////////////////////// - -/datum/design/intellicard - name = "Intellicard AI Transportation System" - desc = "" - id = "intellicard" - build_type = PROTOLATHE - materials = list(/datum/material/glass = 1000, /datum/material/gold = 200) - build_path = /obj/item/aicard - category = list("Electronics") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/paicard - name = "Personal Artificial Intelligence Card" - desc = "" - id = "paicard" - build_type = PROTOLATHE - materials = list(/datum/material/glass = 500, /datum/material/iron = 500) - build_path = /obj/item/paicard - category = list("Electronics") - departmental_flags = DEPARTMENTAL_FLAG_ALL - -/datum/design/ai_cam_upgrade - name = "AI Surveillance Software Update" - desc = "" - id = "ai_cam_upgrade" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/glass = 5000, /datum/material/gold = 15000, /datum/material/silver = 15000, /datum/material/diamond = 20000, /datum/material/plasma = 10000) - build_path = /obj/item/surveillance_upgrade - category = list("Electronics") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/////////////////////////////////// -//////////Nanite Devices/////////// -/////////////////////////////////// -/datum/design/nanite_remote - name = "Nanite Remote" - desc = "" - id = "nanite_remote" - build_type = PROTOLATHE - materials = list(/datum/material/glass = 500, /datum/material/iron = 500) - build_path = /obj/item/nanite_remote - category = list("Electronics") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/nanite_comm_remote - name = "Nanite Communication Remote" - desc = "" - id = "nanite_comm_remote" - build_type = PROTOLATHE - materials = list(/datum/material/glass = 500, /datum/material/iron = 500) - build_path = /obj/item/nanite_remote/comm - category = list("Electronics") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/nanite_scanner - name = "Nanite Scanner" - desc = "" - id = "nanite_scanner" - build_type = PROTOLATHE - materials = list(/datum/material/glass = 500, /datum/material/iron = 500) - build_path = /obj/item/nanite_scanner - category = list("Electronics") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - - -//////////////////////////////////////// -//////////Disk Construction Disks/////// -//////////////////////////////////////// -/datum/design/design_disk - name = "Design Storage Disk" - desc = "" - id = "design_disk" - build_type = PROTOLATHE | AUTOLATHE - materials = list(/datum/material/iron = 300, /datum/material/glass = 100) - build_path = /obj/item/disk/design_disk - category = list("Electronics") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/design_disk_adv - name = "Advanced Design Storage Disk" - desc = "" - id = "design_disk_adv" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 300, /datum/material/glass = 100, /datum/material/silver=50) - build_path = /obj/item/disk/design_disk/adv - category = list("Electronics") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/tech_disk - name = "Technology Data Storage Disk" - desc = "" - id = "tech_disk" - build_type = PROTOLATHE | AUTOLATHE - materials = list(/datum/material/iron = 300, /datum/material/glass = 100) - build_path = /obj/item/disk/tech_disk - category = list("Electronics") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/nanite_disk - name = "Nanite Program Disk" - desc = "" - id = "nanite_disk" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 300, /datum/material/glass = 100) - build_path = /obj/item/disk/nanite_program - category = list("Electronics") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE diff --git a/code/modules/research/designs/limbgrower_designs.dm b/code/modules/research/designs/limbgrower_designs.dm deleted file mode 100644 index fc9560854e..0000000000 --- a/code/modules/research/designs/limbgrower_designs.dm +++ /dev/null @@ -1,43 +0,0 @@ -///////////////////////////////////// -//////////Limb Grower Designs /////// -///////////////////////////////////// - -/datum/design/leftarm - name = "Left Arm" - id = "leftarm" - build_type = LIMBGROWER - reagents_list = list(/datum/reagent/medicine/C2/instabitaluri = 25) - build_path = /obj/item/bodypart/l_arm - category = list("initial","human","lizard","fly","moth","plasmaman") - -/datum/design/rightarm - name = "Right Arm" - id = "rightarm" - build_type = LIMBGROWER - reagents_list = list(/datum/reagent/medicine/C2/instabitaluri = 25) - build_path = /obj/item/bodypart/r_arm - category = list("initial","human","lizard","fly","moth","plasmaman") - -/datum/design/leftleg - name = "Left Leg" - id = "leftleg" - build_type = LIMBGROWER - reagents_list = list(/datum/reagent/medicine/C2/instabitaluri = 25) - build_path = /obj/item/bodypart/l_leg - category = list("initial","human","lizard","fly","moth","plasmaman") - -/datum/design/rightleg - name = "Right Leg" - id = "rightleg" - build_type = LIMBGROWER - reagents_list = list(/datum/reagent/medicine/C2/instabitaluri = 25) - build_path = /obj/item/bodypart/r_leg - category = list("initial","human","lizard","fly","moth","plasmaman") - -/datum/design/armblade - name = "Arm Blade" - id = "armblade" - build_type = LIMBGROWER - reagents_list = list(/datum/reagent/medicine/C2/instabitaluri = 75) - build_path = /obj/item/melee/synthetic_arm_blade - category = list("other","emagged") diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm deleted file mode 100644 index 9ad6fef530..0000000000 --- a/code/modules/research/designs/machine_designs.dm +++ /dev/null @@ -1,604 +0,0 @@ -//////////////////////////////////////// -//////////////MISC Boards/////////////// -//////////////////////////////////////// - -/datum/design/board/smes - name = "Machine Design (SMES Board)" - desc = "" - id = "smes" - build_path = /obj/item/circuitboard/machine/smes - category = list ("Engineering Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/board/circulator - name = "Machine Design (Circulator Board)" - desc = "" - id = "circulator" - build_path = /obj/item/circuitboard/machine/circulator - category = list ("Engineering Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/board/teg - name = "Machine Design (TEG Board)" - desc = "" - id = "teg" - build_path = /obj/item/circuitboard/machine/generator - category = list ("Engineering Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/board/announcement_system - name = "Machine Design (Automated Announcement System Board)" - desc = "" - id = "automated_announcement" - build_path = /obj/item/circuitboard/machine/announcement_system - category = list("Subspace Telecomms") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/board/turbine_computer - name = "Computer Design (Power Turbine Console Board)" - desc = "" - id = "power_turbine_console" - build_path = /obj/item/circuitboard/computer/turbine_computer - category = list ("Engineering Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/emitter - name = "Machine Design (Emitter Board)" - desc = "" - id = "emitter" - build_path = /obj/item/circuitboard/machine/emitter - category = list ("Engineering Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/board/power_compressor - name = "Machine Design (Power Compressor Board)" - desc = "" - id = "power_compressor" - build_path = /obj/item/circuitboard/machine/power_compressor - category = list ("Engineering Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/power_turbine - name = "Machine Design (Power Turbine Board)" - desc = "" - id = "power_turbine" - build_path = /obj/item/circuitboard/machine/power_turbine - category = list ("Engineering Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/thermomachine - name = "Machine Design (Freezer/Heater Board)" - desc = "" - id = "thermomachine" - build_path = /obj/item/circuitboard/machine/thermomachine - category = list ("Engineering Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/space_heater - name = "Machine Design (Space Heater Board)" - desc = "" - id = "space_heater" - build_path = /obj/item/circuitboard/machine/space_heater - category = list ("Engineering Machinery") - departmental_flags = ALL - -/datum/design/board/teleport_station - name = "Machine Design (Teleportation Station Board)" - desc = "" - id = "tele_station" - build_path = /obj/item/circuitboard/machine/teleporter_station - category = list ("Teleportation Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/teleport_hub - name = "Machine Design (Teleportation Hub Board)" - desc = "" - id = "tele_hub" - build_path = /obj/item/circuitboard/machine/teleporter_hub - category = list ("Teleportation Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/quantumpad - name = "Machine Design (Quantum Pad Board)" - desc = "" - id = "quantumpad" - build_path = /obj/item/circuitboard/machine/quantumpad - category = list ("Teleportation Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/launchpad - name = "Machine Design (Bluespace Launchpad Board)" - desc = "" - id = "launchpad" - build_path = /obj/item/circuitboard/machine/launchpad - category = list ("Teleportation Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/launchpad_console - name = "Machine Design (Bluespace Launchpad Console Board)" - desc = "" - id = "launchpad_console" - build_path = /obj/item/circuitboard/computer/launchpad_console - category = list ("Teleportation Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/teleconsole - name = "Computer Design (Teleporter Console)" - desc = "" - id = "teleconsole" - build_path = /obj/item/circuitboard/computer/teleporter - category = list("Teleportation Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/cryotube - name = "Machine Design (Cryotube Board)" - desc = "" - id = "cryotube" - build_path = /obj/item/circuitboard/machine/cryo_tube - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL - category = list ("Medical Machinery") - -/datum/design/board/chem_dispenser - name = "Machine Design (Portable Chem Dispenser Board)" - desc = "" - id = "chem_dispenser" - build_path = /obj/item/circuitboard/machine/chem_dispenser - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL - category = list ("Medical Machinery") - -/datum/design/board/chem_master - name = "Machine Design (Chem Master Board)" - desc = "" - id = "chem_master" - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL - build_path = /obj/item/circuitboard/machine/chem_master - category = list ("Medical Machinery") - -/datum/design/board/chem_heater - name = "Machine Design (Chemical Heater Board)" - desc = "" - id = "chem_heater" - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL - build_path = /obj/item/circuitboard/machine/chem_heater - category = list ("Medical Machinery") - -/datum/design/board/smoke_machine - name = "Machine Design (Smoke Machine)" - desc = "" - id = "smoke_machine" - build_path = /obj/item/circuitboard/machine/smoke_machine - category = list ("Medical Machinery") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/board/reagentgrinder - name = "Machine Design (All-In-One Grinder)" - desc = "" - id = "reagentgrinder" - build_path = /obj/item/circuitboard/machine/reagentgrinder - category = list ("Medical Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ALL - -/datum/design/board/clonecontrol - name = "Computer Design (Cloning Machine Console)" - desc = "" - id = "clonecontrol" - build_path = /obj/item/circuitboard/computer/cloning - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - category = list("Medical Machinery") - -/datum/design/board/clonepod - name = "Machine Design (Clone Pod)" - desc = "" - id = "clonepod" - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - build_path = /obj/item/circuitboard/machine/clonepod - category = list("Medical Machinery") - -/datum/design/board/clonescanner - name = "Machine Design (Cloning Scanner)" - desc = "" - id = "clonescanner" - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - build_path = /obj/item/circuitboard/machine/clonescanner - category = list("Medical Machinery") - -/datum/design/board/biogenerator - name = "Machine Design (Biogenerator Board)" - desc = "" - id = "biogenerator" - build_path = /obj/item/circuitboard/machine/biogenerator - category = list ("Hydroponics Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/board/hydroponics - name = "Machine Design (Hydroponics Tray Board)" - desc = "" - id = "hydro_tray" - build_path = /obj/item/circuitboard/machine/hydroponics - category = list ("Hydroponics Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/board/destructive_analyzer - name = "Machine Design (Destructive Analyzer Board)" - desc = "" - id = "destructive_analyzer" - build_path = /obj/item/circuitboard/machine/destructive_analyzer - category = list("Research Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/experimentor - name = "Machine Design (E.X.P.E.R.I-MENTOR Board)" - desc = "" - id = "experimentor" - build_path = /obj/item/circuitboard/machine/experimentor - category = list("Research Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/protolathe - name = "Machine Design (Protolathe Board)" - desc = "" - id = "protolathe" - build_path = /obj/item/circuitboard/machine/protolathe - category = list("Research Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/circuit_imprinter - name = "Machine Design (Circuit Imprinter Board)" - desc = "" - id = "circuit_imprinter" - build_path = /obj/item/circuitboard/machine/circuit_imprinter - category = list("Research Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/rdservercontrol - name = "Computer Design (R&D Server Control Console Board)" - desc = "" - id = "rdservercontrol" - build_path = /obj/item/circuitboard/computer/rdservercontrol - category = list("Research Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/rdserver - name = "Machine Design (R&D Server Board)" - desc = "" - id = "rdserver" - build_path = /obj/item/circuitboard/machine/rdserver - category = list("Research Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/mechfab - name = "Machine Design (Exosuit Fabricator Board)" - desc = "" - id = "mechfab" - build_path = /obj/item/circuitboard/machine/mechfab - category = list("Research Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/cyborgrecharger - name = "Machine Design (Cyborg Recharger Board)" - desc = "" - id = "cyborgrecharger" - build_path = /obj/item/circuitboard/machine/cyborgrecharger - category = list("Research Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/mech_recharger - name = "Machine Design (Mechbay Recharger Board)" - desc = "" - id = "mech_recharger" - build_path = /obj/item/circuitboard/machine/mech_recharger - category = list("Research Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/nanite_chamber - name = "Machine Design (Nanite Chamber Board)" - desc = "" - id = "nanite_chamber" - build_path = /obj/item/circuitboard/machine/nanite_chamber - category = list("Research Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/public_nanite_chamber - name = "Machine Design (Public Nanite Chamber Board)" - desc = "" - id = "public_nanite_chamber" - build_path = /obj/item/circuitboard/machine/public_nanite_chamber - category = list("Research Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/nanite_programmer - name = "Machine Design (Nanite Programmer Board)" - desc = "" - id = "nanite_programmer" - build_path = /obj/item/circuitboard/machine/nanite_programmer - category = list("Research Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/nanite_program_hub - name = "Machine Design (Nanite Program Hub Board)" - desc = "" - id = "nanite_program_hub" - build_path = /obj/item/circuitboard/machine/nanite_program_hub - category = list("Research Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/microwave - name = "Machine Design (Microwave Board)" - desc = "" - id = "microwave" - build_path = /obj/item/circuitboard/machine/microwave - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ALL - -/datum/design/board/gibber - name = "Machine Design (Gibber Board)" - desc = "" - id = "gibber" - build_path = /obj/item/circuitboard/machine/gibber - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/board/smartfridge - name = "Machine Design (Smartfridge Board)" - desc = "" - id = "smartfridge" - build_path = /obj/item/circuitboard/machine/smartfridge - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ALL - -/datum/design/board/monkey_recycler - name = "Machine Design (Monkey Recycler Board)" - desc = "" - id = "monkey_recycler" - build_path = /obj/item/circuitboard/machine/monkey_recycler - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SERVICE - -/datum/design/board/seed_extractor - name = "Machine Design (Seed Extractor Board)" - desc = "" - id = "seed_extractor" - build_path = /obj/item/circuitboard/machine/seed_extractor - category = list ("Hydroponics Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/board/processor - name = "Machine Design (Food/Slime Processor Board)" - desc = "" - id = "processor" - build_path = /obj/item/circuitboard/machine/processor - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SERVICE - -/datum/design/board/soda_dispenser - name = "Machine Design (Portable Soda Dispenser Board)" - desc = "" - id = "soda_dispenser" - build_path = /obj/item/circuitboard/machine/chem_dispenser/drinks - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - category = list ("Misc. Machinery") - -/datum/design/board/beer_dispenser - name = "Machine Design (Portable Booze Dispenser Board)" - desc = "" - id = "beer_dispenser" - build_path = /obj/item/circuitboard/machine/chem_dispenser/drinks/beer - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - category = list ("Misc. Machinery") - -/datum/design/board/recycler - name = "Machine Design (Recycler Board)" - desc = "" - id = "recycler" - build_path = /obj/item/circuitboard/machine/recycler - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ALL - -/datum/design/board/scanner_gate - name = "Machine Design (Scanner Gate)" - desc = "" - id = "scanner_gate" - build_path = /obj/item/circuitboard/machine/scanner_gate - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ALL - -/datum/design/board/holopad - name = "Machine Design (AI Holopad Board)" - desc = "" - id = "holopad" - build_path = /obj/item/circuitboard/machine/holopad - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ALL - -/datum/design/board/autolathe - name = "Machine Design (Autolathe Board)" - desc = "" - id = "autolathe" - build_path = /obj/item/circuitboard/machine/autolathe - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ALL //Lets be honest here half the maps have public ones. - -/datum/design/board/recharger - name = "Machine Design (Weapon Recharger Board)" - desc = "" - id = "recharger" - materials = list(/datum/material/glass = 1000, /datum/material/gold = 2000) - build_path = /obj/item/circuitboard/machine/recharger - category = list("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ALL - -/datum/design/board/vendor - name = "Machine Design (Vendor Board)" - desc = "" - id = "vendor" - build_path = /obj/item/circuitboard/machine/vendor - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ALL - -/datum/design/board/ore_redemption - name = "Machine Design (Ore Redemption Board)" - desc = "" - id = "ore_redemption" - build_path = /obj/item/circuitboard/machine/ore_redemption - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/board/mining_equipment_vendor - name = "Machine Design (Mining Rewards Vendor Board)" - desc = "" - id = "mining_equipment_vendor" - build_path = /obj/item/circuitboard/machine/mining_equipment_vendor - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO - -/datum/design/board/tesla_coil - name = "Machine Design (Tesla Coil Board)" - desc = "" - id = "tesla_coil" - build_path = /obj/item/circuitboard/machine/tesla_coil - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/rad_collector - name = "Machine Design (Radiation Collector Board)" - desc = "" - id = "rad_collector" - build_path = /obj/item/circuitboard/machine/rad_collector - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/grounding_rod - name = "Machine Design (Grounding Rod Board)" - desc = "" - id = "grounding_rod" - build_path = /obj/item/circuitboard/machine/grounding_rod - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/plantgenes - name = "Machine Design (Plant DNA Manipulator Board)" - desc = "" - id = "plantgenes" - build_path = /obj/item/circuitboard/machine/plantgenes - category = list ("Hydroponics Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/board/ntnet_relay - name = "Machine Design (NTNet Relay Board)" - desc = "" - id = "ntnet_relay" - build_path = /obj/item/circuitboard/machine/ntnet_relay - category = list("Subspace Telecomms") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/limbgrower - name = "Machine Design (Limb Grower Board)" - desc = "" - id = "limbgrower" - build_path = /obj/item/circuitboard/machine/limbgrower - category = list("Medical Machinery") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/board/harvester - name = "Machine Design (Organ Harvester Board)" - desc = "" - id = "harvester" - build_path = /obj/item/circuitboard/machine/harvester - category = list("Medical Machinery") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/board/deepfryer - name = "Machine Design (Deep Fryer)" - desc = "" - id = "deepfryer" - build_path = /obj/item/circuitboard/machine/deep_fryer - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/board/donksofttoyvendor - name = "Machine Design (Donksoft Toy Vendor Board)" - desc = "" - id = "donksofttoyvendor" - build_path = /obj/item/circuitboard/machine/vending/donksofttoyvendor - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ALL //Toys!! - -/datum/design/board/cell_charger - name = "Machine Design (Cell Charger Board)" - desc = "" - id = "cell_charger" - build_path = /obj/item/circuitboard/machine/cell_charger - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ALL - -/datum/design/board/dish_drive - name = "Machine Design (Dish Drive)" - desc = "" - id = "dish_drive" - build_path = /obj/item/circuitboard/machine/dish_drive - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/board/stacking_unit_console - name = "Machine Design (Stacking Machine Console)" - desc = "" - id = "stack_console" - build_path = /obj/item/circuitboard/machine/stacking_unit_console - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/board/stacking_machine - name = "Machine Design (Stacking Machine)" - desc = "" - id = "stack_machine" - build_path = /obj/item/circuitboard/machine/stacking_machine - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/board/ore_silo - name = "Machine Design (Ore Silo)" - desc = "" - id = "ore_silo" - build_path = /obj/item/circuitboard/machine/ore_silo - category = list ("Research Machinery") - departmental_flags = DEPARTMENTAL_FLAG_CARGO - -/datum/design/board/paystand - name = "Machine Design (Pay Stand)" - desc = "" - id = "paystand" - build_path = /obj/item/circuitboard/machine/paystand - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ALL - -/datum/design/board/fat_sucker - name = "Machine Design (Lipid Extractor)" - desc = "" - id = "fat_sucker" - build_path = /obj/item/circuitboard/machine/fat_sucker - category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/board/stasis - name = "Machine Design (Lifeform Stasis Unit)" - desc = "" - id = "stasis" - build_path = /obj/item/circuitboard/machine/stasis - category = list("Medical Machinery") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/board/spaceship_navigation_beacon - name = "Machine Design (Bluespace Navigation Gigabeacon)" - desc = "" - id = "spaceship_navigation_beacon" - build_path = /obj/item/circuitboard/machine/spaceship_navigation_beacon - category = list ("Teleportation Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/medical_kiosk - name = "Machine Design (Medical Kiosk)" - desc = "" - id = "medical_kiosk" - build_path = /obj/item/circuitboard/machine/medical_kiosk - category = list ("Medical Machinery") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL diff --git a/code/modules/research/designs/mecha_designs.dm b/code/modules/research/designs/mecha_designs.dm deleted file mode 100644 index 514e4df487..0000000000 --- a/code/modules/research/designs/mecha_designs.dm +++ /dev/null @@ -1,464 +0,0 @@ -/////////////////////////////////// -//////////Mecha Module Disks/////// -/////////////////////////////////// - -/datum/design/board/ripley_main - name = "APLU \"Ripley\" Central Control module" - desc = "" - id = "ripley_main" - build_path = /obj/item/circuitboard/mecha/ripley/main - category = list("Exosuit Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/ripley_peri - name = "APLU \"Ripley\" Peripherals Control module" - desc = "" - id = "ripley_peri" - build_path = /obj/item/circuitboard/mecha/ripley/peripherals - category = list("Exosuit Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/odysseus_main - name = "\"Odysseus\" Central Control module" - desc = "" - id = "odysseus_main" - build_path = /obj/item/circuitboard/mecha/odysseus/main - category = list("Exosuit Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/odysseus_peri - name = "\"Odysseus\" Peripherals Control module" - desc = "" - id = "odysseus_peri" - build_path = /obj/item/circuitboard/mecha/odysseus/peripherals - category = list("Exosuit Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/gygax_main - name = "\"Gygax\" Central Control module" - desc = "" - id = "gygax_main" - build_path = /obj/item/circuitboard/mecha/gygax/main - category = list("Exosuit Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/gygax_peri - name = "\"Gygax\" Peripherals Control module" - desc = "" - id = "gygax_peri" - build_path = /obj/item/circuitboard/mecha/gygax/peripherals - category = list("Exosuit Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/gygax_targ - name = "\"Gygax\" Weapons & Targeting Control module" - desc = "" - id = "gygax_targ" - build_path = /obj/item/circuitboard/mecha/gygax/targeting - category = list("Exosuit Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/durand_main - name = "\"Durand\" Central Control module" - desc = "" - id = "durand_main" - build_path = /obj/item/circuitboard/mecha/durand/main - category = list("Exosuit Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/durand_peri - name = "\"Durand\" Peripherals Control module" - desc = "" - id = "durand_peri" - build_path = /obj/item/circuitboard/mecha/durand/peripherals - category = list("Exosuit Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/durand_targ - name = "\"Durand\" Weapons & Targeting Control module" - desc = "" - id = "durand_targ" - build_path = /obj/item/circuitboard/mecha/durand/targeting - category = list("Exosuit Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/honker_main - name = "\"H.O.N.K\" Central Control module" - desc = "" - id = "honker_main" - build_path = /obj/item/circuitboard/mecha/honker/main - category = list("Exosuit Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/honker_peri - name = "\"H.O.N.K\" Peripherals Control module" - desc = "" - id = "honker_peri" - build_path = /obj/item/circuitboard/mecha/honker/peripherals - category = list("Exosuit Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/honker_targ - name = "\"H.O.N.K\" Weapons & Targeting Control module" - desc = "" - id = "honker_targ" - build_path = /obj/item/circuitboard/mecha/honker/targeting - category = list("Exosuit Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/phazon_main - name = "\"Phazon\" Central Control module" - desc = "" - id = "phazon_main" - materials = list(/datum/material/glass = 1000, /datum/material/bluespace = 100) - build_path = /obj/item/circuitboard/mecha/phazon/main - category = list("Exosuit Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/phazon_peri - name = "\"Phazon\" Peripherals Control module" - desc = "" - id = "phazon_peri" - materials = list(/datum/material/glass = 1000, /datum/material/bluespace = 100) - build_path = /obj/item/circuitboard/mecha/phazon/peripherals - category = list("Exosuit Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/phazon_targ - name = "\"Phazon\" Weapons & Targeting Control module" - desc = "" - id = "phazon_targ" - materials = list(/datum/material/glass = 1000, /datum/material/bluespace = 100) - build_path = /obj/item/circuitboard/mecha/phazon/targeting - category = list("Exosuit Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -//////////////////////////////////////// -/////////// Mecha Equpment ///////////// -//////////////////////////////////////// - -/datum/design/mech_scattershot - name = "Exosuit Weapon (LBX AC 10 \"Scattershot\")" - desc = "" - id = "mech_scattershot" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot - materials = list(/datum/material/iron=10000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_scattershot_ammo - name = "LBX AC 10 Scattershot Ammunition" - desc = "" - id = "mech_scattershot_ammo" - build_type = PROTOLATHE | MECHFAB - build_path = /obj/item/mecha_ammo/scattershot - materials = list(/datum/material/iron=6000) - construction_time = 20 - category = list("Exosuit Ammunition", "Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/mech_carbine - name = "Exosuit Weapon (FNX-99 \"Hades\" Carbine)" - desc = "" - id = "mech_carbine" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine - materials = list(/datum/material/iron=10000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_carbine_ammo - name = "FNX-99 Carbine Ammunition" - desc = "" - id = "mech_carbine_ammo" - build_type = PROTOLATHE | MECHFAB - build_path = /obj/item/mecha_ammo/incendiary - materials = list(/datum/material/iron=6000) - construction_time = 20 - category = list("Exosuit Ammunition", "Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/mech_ion - name = "Exosuit Weapon (MKIV Ion Heavy Cannon)" - desc = "" - id = "mech_ion" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion - materials = list(/datum/material/iron=20000,/datum/material/silver=6000,/datum/material/uranium=2000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_tesla - name = "Exosuit Weapon (MKI Tesla Cannon)" - desc = "" - id = "mech_tesla" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla - materials = list(/datum/material/iron=20000,/datum/material/silver=8000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_laser - name = "Exosuit Weapon (CH-PS \"Immolator\" Laser)" - desc = "" - id = "mech_laser" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser - materials = list(/datum/material/iron=10000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_laser_heavy - name = "Exosuit Weapon (CH-LC \"Solaris\" Laser Cannon)" - desc = "" - id = "mech_laser_heavy" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy - materials = list(/datum/material/iron=10000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_disabler - name = "Exosuit Weapon (CH-DS \"Peacemaker\" Disabler)" - desc = "" - id = "mech_disabler" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/disabler - materials = list(/datum/material/iron=10000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_grenade_launcher - name = "Exosuit Weapon (SGL-6 Grenade Launcher)" - desc = "" - id = "mech_grenade_launcher" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang - materials = list(/datum/material/iron=22000,/datum/material/gold=6000,/datum/material/silver=8000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_grenade_launcher_ammo - name = "SGL-6 Grenade Launcher Ammunition" - desc = "" - id = "mech_grenade_launcher_ammo" - build_type = PROTOLATHE | MECHFAB - build_path = /obj/item/mecha_ammo/flashbang - materials = list(/datum/material/iron=4000,/datum/material/gold=500,/datum/material/iron=500) - construction_time = 20 - category = list("Exosuit Ammunition", "Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/mech_missile_rack - name = "Exosuit Weapon (BRM-6 Missile Rack)" - desc = "" - id = "mech_missile_rack" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/breaching - materials = list(/datum/material/iron=22000,/datum/material/gold=6000,/datum/material/silver=8000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_missile_rack_ammo - name = "SRM-8 Missile Rack Ammunition" - desc = "" - id = "mech_missile_rack_ammo" - build_type = PROTOLATHE | MECHFAB - build_path = /obj/item/mecha_ammo/missiles_br - materials = list(/datum/material/iron=8000,/datum/material/gold=500,/datum/material/iron=500) - construction_time = 20 - category = list("Exosuit Ammunition", "Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/clusterbang_launcher - name = "Exosuit Module (SOB-3 Clusterbang Launcher)" - desc = "" - id = "clusterbang_launcher" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/clusterbang - materials = list(/datum/material/iron=20000,/datum/material/gold=10000,/datum/material/uranium=10000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/clusterbang_launcher_ammo - name = "SOB-3 Clusterbang Launcher Ammunition" - desc = "" - id = "clusterbang_launcher_ammo" - build_type = PROTOLATHE | MECHFAB - build_path = /obj/item/mecha_ammo/clusterbang - materials = list(/datum/material/iron=6000,/datum/material/gold=1500,/datum/material/uranium=1500) - construction_time = 20 - category = list("Exosuit Ammunition", "Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/mech_wormhole_gen - name = "Exosuit Module (Localized Wormhole Generator)" - desc = "" - id = "mech_wormhole_gen" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/wormhole_generator - materials = list(/datum/material/iron=10000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_teleporter - name = "Exosuit Module (Teleporter Module)" - desc = "" - id = "mech_teleporter" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/teleporter - materials = list(/datum/material/iron=10000,/datum/material/diamond=10000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_rcd - name = "Exosuit Module (RCD Module)" - desc = "" - id = "mech_rcd" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/rcd - materials = list(/datum/material/iron=30000,/datum/material/gold=20000,/datum/material/plasma=25000,/datum/material/silver=20000) - construction_time = 1200 - category = list("Exosuit Equipment") - -/datum/design/mech_thrusters - name = "Exosuit Module (RCS Thruster Package)" - desc = "" - id = "mech_thrusters" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/thrusters/gas - materials = list(/datum/material/iron=25000,/datum/material/titanium=5000,/datum/material/silver=3000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_gravcatapult - name = "Exosuit Module (Gravitational Catapult Module)" - desc = "" - id = "mech_gravcatapult" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/gravcatapult - materials = list(/datum/material/iron=10000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_repair_droid - name = "Exosuit Module (Repair Droid Module)" - desc = "" - id = "mech_repair_droid" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid - materials = list(/datum/material/iron=10000,/datum/material/glass = 5000,/datum/material/gold=1000,/datum/material/silver=2000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_energy_relay - name = "Exosuit Module (Tesla Energy Relay)" - desc = "" - id = "mech_energy_relay" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay - materials = list(/datum/material/iron=10000,/datum/material/glass = 2000,/datum/material/gold=2000,/datum/material/silver=3000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_ccw_armor - name = "Exosuit Module (Reactive Armor Booster Module)" - desc = "" - id = "mech_ccw_armor" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster - materials = list(/datum/material/iron=20000,/datum/material/silver=5000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_proj_armor - name = "Exosuit Module (Reflective Armor Booster Module)" - desc = "" - id = "mech_proj_armor" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster - materials = list(/datum/material/iron=20000,/datum/material/gold=5000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_diamond_drill - name = "Exosuit Module (Diamond Mining Drill)" - desc = "" - id = "mech_diamond_drill" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill - materials = list(/datum/material/iron=10000,/datum/material/diamond=6500) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_generator_nuclear - name = "Exosuit Module (ExoNuclear Reactor)" - desc = "" - id = "mech_generator_nuclear" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/generator/nuclear - materials = list(/datum/material/iron=10000,/datum/material/glass = 1000,/datum/material/silver=500) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_plasma_cutter - name = "Exosuit Module Design (217-D Heavy Plasma Cutter)" - desc = "" - id = "mech_plasma_cutter" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma - materials = list(/datum/material/iron = 8000, /datum/material/glass = 1000, /datum/material/plasma = 2000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_lmg - name = "Exosuit Weapon (\"Ultra AC 2\" LMG)" - desc = "" - id = "mech_lmg" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg - materials = list(/datum/material/iron=10000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_lmg_ammo - name = "Ultra AC 2 Ammunition" - desc = "" - id = "mech_lmg_ammo" - build_type = PROTOLATHE | MECHFAB - build_path = /obj/item/mecha_ammo/lmg - materials = list(/datum/material/iron=4000) - construction_time = 20 - category = list("Exosuit Ammunition", "Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/mech_sleeper - name = "Exosuit Medical Equipment (Mounted Sleeper)" - desc = "" - id = "mech_sleeper" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/medical/sleeper - materials = list(/datum/material/iron=5000, /datum/material/glass = 10000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_syringe_gun - name = "Exosuit Medical Equipment (Syringe Gun)" - desc = "" - id = "mech_syringe_gun" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun - materials = list(/datum/material/iron=3000, /datum/material/glass = 2000) - construction_time = 200 - category = list("Exosuit Equipment") - -/datum/design/mech_medical_beamgun - name = "Exosuit Medical Equipment (Medical Beamgun)" - desc = "" - id = "mech_medi_beam" - build_type = MECHFAB - materials = list(/datum/material/iron = 15000, /datum/material/glass = 8000, /datum/material/plasma = 3000, /datum/material/gold = 8000, /datum/material/diamond = 2000) - construction_time = 250 - build_path = /obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam - category = list("Exosuit Equipment") diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm deleted file mode 100644 index 9d92dbde62..0000000000 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ /dev/null @@ -1,798 +0,0 @@ -//Cyborg -/datum/design/borg_suit - name = "Cyborg Endoskeleton" - id = "borg_suit" - build_type = MECHFAB - build_path = /obj/item/robot_suit - materials = list(/datum/material/iron=15000) - construction_time = 500 - category = list("Cyborg") - -/datum/design/borg_chest - name = "Cyborg Torso" - id = "borg_chest" - build_type = MECHFAB - build_path = /obj/item/bodypart/chest/robot - materials = list(/datum/material/iron=40000) - construction_time = 350 - category = list("Cyborg") - -/datum/design/borg_head - name = "Cyborg Head" - id = "borg_head" - build_type = MECHFAB - build_path = /obj/item/bodypart/head/robot - materials = list(/datum/material/iron=5000) - construction_time = 350 - category = list("Cyborg") - -/datum/design/borg_l_arm - name = "Cyborg Left Arm" - id = "borg_l_arm" - build_type = MECHFAB - build_path = /obj/item/bodypart/l_arm/robot - materials = list(/datum/material/iron=10000) - construction_time = 200 - category = list("Cyborg") - -/datum/design/borg_r_arm - name = "Cyborg Right Arm" - id = "borg_r_arm" - build_type = MECHFAB - build_path = /obj/item/bodypart/r_arm/robot - materials = list(/datum/material/iron=10000) - construction_time = 200 - category = list("Cyborg") - -/datum/design/borg_l_leg - name = "Cyborg Left Leg" - id = "borg_l_leg" - build_type = MECHFAB - build_path = /obj/item/bodypart/l_leg/robot - materials = list(/datum/material/iron=10000) - construction_time = 200 - category = list("Cyborg") - -/datum/design/borg_r_leg - name = "Cyborg Right Leg" - id = "borg_r_leg" - build_type = MECHFAB - build_path = /obj/item/bodypart/r_leg/robot - materials = list(/datum/material/iron=10000) - construction_time = 200 - category = list("Cyborg") - -//Ripley -/datum/design/ripley_chassis - name = "Exosuit Chassis (APLU \"Ripley\")" - id = "ripley_chassis" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/chassis/ripley - materials = list(/datum/material/iron=20000) - construction_time = 100 - category = list("Ripley") - -//firefighter subtype -/datum/design/firefighter_chassis - name = "Exosuit Chassis (APLU \"Firefighter\")" - id = "firefighter_chassis" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/chassis/firefighter - materials = list(/datum/material/iron=20000) - construction_time = 100 - category = list("Firefighter") - -/datum/design/ripley_torso - name = "Exosuit Torso (APLU \"Ripley\")" - id = "ripley_torso" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/ripley_torso - materials = list(/datum/material/iron=20000,/datum/material/glass = 7500) - construction_time = 200 - category = list("Ripley","Firefighter") - -/datum/design/ripley_left_arm - name = "Exosuit Left Arm (APLU \"Ripley\")" - id = "ripley_left_arm" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/ripley_left_arm - materials = list(/datum/material/iron=15000) - construction_time = 150 - category = list("Ripley","Firefighter") - -/datum/design/ripley_right_arm - name = "Exosuit Right Arm (APLU \"Ripley\")" - id = "ripley_right_arm" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/ripley_right_arm - materials = list(/datum/material/iron=15000) - construction_time = 150 - category = list("Ripley","Firefighter") - -/datum/design/ripley_left_leg - name = "Exosuit Left Leg (APLU \"Ripley\")" - id = "ripley_left_leg" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/ripley_left_leg - materials = list(/datum/material/iron=15000) - construction_time = 150 - category = list("Ripley","Firefighter") - -/datum/design/ripley_right_leg - name = "Exosuit Right Leg (APLU \"Ripley\")" - id = "ripley_right_leg" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/ripley_right_leg - materials = list(/datum/material/iron=15000) - construction_time = 150 - category = list("Ripley","Firefighter") - -//Odysseus -/datum/design/odysseus_chassis - name = "Exosuit Chassis (\"Odysseus\")" - id = "odysseus_chassis" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/chassis/odysseus - materials = list(/datum/material/iron=20000) - construction_time = 100 - category = list("Odysseus") - -/datum/design/odysseus_torso - name = "Exosuit Torso (\"Odysseus\")" - id = "odysseus_torso" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/odysseus_torso - materials = list(/datum/material/iron=12000) - construction_time = 180 - category = list("Odysseus") - -/datum/design/odysseus_head - name = "Exosuit Head (\"Odysseus\")" - id = "odysseus_head" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/odysseus_head - materials = list(/datum/material/iron=6000,/datum/material/glass = 10000) - construction_time = 100 - category = list("Odysseus") - -/datum/design/odysseus_left_arm - name = "Exosuit Left Arm (\"Odysseus\")" - id = "odysseus_left_arm" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/odysseus_left_arm - materials = list(/datum/material/iron=6000) - construction_time = 120 - category = list("Odysseus") - -/datum/design/odysseus_right_arm - name = "Exosuit Right Arm (\"Odysseus\")" - id = "odysseus_right_arm" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/odysseus_right_arm - materials = list(/datum/material/iron=6000) - construction_time = 120 - category = list("Odysseus") - -/datum/design/odysseus_left_leg - name = "Exosuit Left Leg (\"Odysseus\")" - id = "odysseus_left_leg" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/odysseus_left_leg - materials = list(/datum/material/iron=7000) - construction_time = 130 - category = list("Odysseus") - -/datum/design/odysseus_right_leg - name = "Exosuit Right Leg (\"Odysseus\")" - id = "odysseus_right_leg" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/odysseus_right_leg - materials = list(/datum/material/iron=7000) - construction_time = 130 - category = list("Odysseus") - -//Gygax -/datum/design/gygax_chassis - name = "Exosuit Chassis (\"Gygax\")" - id = "gygax_chassis" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/chassis/gygax - materials = list(/datum/material/iron=20000) - construction_time = 100 - category = list("Gygax") - -/datum/design/gygax_torso - name = "Exosuit Torso (\"Gygax\")" - id = "gygax_torso" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/gygax_torso - materials = list(/datum/material/iron=20000,/datum/material/glass = 10000,/datum/material/gold=2000, /datum/material/silver=2000) - construction_time = 300 - category = list("Gygax") - -/datum/design/gygax_head - name = "Exosuit Head (\"Gygax\")" - id = "gygax_head" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/gygax_head - materials = list(/datum/material/iron=10000,/datum/material/glass = 5000, /datum/material/gold=2000, /datum/material/silver=2000) - construction_time = 200 - category = list("Gygax") - -/datum/design/gygax_left_arm - name = "Exosuit Left Arm (\"Gygax\")" - id = "gygax_left_arm" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/gygax_left_arm - materials = list(/datum/material/iron=15000, /datum/material/gold=1000, /datum/material/silver=1000) - construction_time = 200 - category = list("Gygax") - -/datum/design/gygax_right_arm - name = "Exosuit Right Arm (\"Gygax\")" - id = "gygax_right_arm" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/gygax_right_arm - materials = list(/datum/material/iron=15000, /datum/material/gold=1000, /datum/material/silver=1000) - construction_time = 200 - category = list("Gygax") - -/datum/design/gygax_left_leg - name = "Exosuit Left Leg (\"Gygax\")" - id = "gygax_left_leg" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/gygax_left_leg - materials = list(/datum/material/iron=15000, /datum/material/gold=2000, /datum/material/silver=2000) - construction_time = 200 - category = list("Gygax") - -/datum/design/gygax_right_leg - name = "Exosuit Right Leg (\"Gygax\")" - id = "gygax_right_leg" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/gygax_right_leg - materials = list(/datum/material/iron=15000, /datum/material/gold=2000, /datum/material/silver=2000) - construction_time = 200 - category = list("Gygax") - -/datum/design/gygax_armor - name = "Exosuit Armor (\"Gygax\")" - id = "gygax_armor" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/gygax_armor - materials = list(/datum/material/iron=15000,/datum/material/gold=10000, /datum/material/silver=10000, /datum/material/titanium=10000) - construction_time = 600 - category = list("Gygax") - -//Durand -/datum/design/durand_chassis - name = "Exosuit Chassis (\"Durand\")" - id = "durand_chassis" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/chassis/durand - materials = list(/datum/material/iron=25000) - construction_time = 100 - category = list("Durand") - -/datum/design/durand_torso - name = "Exosuit Torso (\"Durand\")" - id = "durand_torso" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/durand_torso - materials = list(/datum/material/iron=25000, /datum/material/glass = 10000,/datum/material/silver=10000) - construction_time = 300 - category = list("Durand") - -/datum/design/durand_head - name = "Exosuit Head (\"Durand\")" - id = "durand_head" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/durand_head - materials = list(/datum/material/iron=10000,/datum/material/glass = 15000,/datum/material/silver=2000) - construction_time = 200 - category = list("Durand") - -/datum/design/durand_left_arm - name = "Exosuit Left Arm (\"Durand\")" - id = "durand_left_arm" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/durand_left_arm - materials = list(/datum/material/iron=10000,/datum/material/silver=4000) - construction_time = 200 - category = list("Durand") - -/datum/design/durand_right_arm - name = "Exosuit Right Arm (\"Durand\")" - id = "durand_right_arm" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/durand_right_arm - materials = list(/datum/material/iron=10000,/datum/material/silver=4000) - construction_time = 200 - category = list("Durand") - -/datum/design/durand_left_leg - name = "Exosuit Left Leg (\"Durand\")" - id = "durand_left_leg" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/durand_left_leg - materials = list(/datum/material/iron=15000,/datum/material/silver=4000) - construction_time = 200 - category = list("Durand") - -/datum/design/durand_right_leg - name = "Exosuit Right Leg (\"Durand\")" - id = "durand_right_leg" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/durand_right_leg - materials = list(/datum/material/iron=15000,/datum/material/silver=4000) - construction_time = 200 - category = list("Durand") - -/datum/design/durand_armor - name = "Exosuit Armor (\"Durand\")" - id = "durand_armor" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/durand_armor - materials = list(/datum/material/iron=30000,/datum/material/uranium=25000,/datum/material/titanium=20000) - construction_time = 600 - category = list("Durand") - -//H.O.N.K -/datum/design/honk_chassis - name = "Exosuit Chassis (\"H.O.N.K\")" - id = "honk_chassis" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/chassis/honker - materials = list(/datum/material/iron=20000) - construction_time = 100 - category = list("H.O.N.K") - -/datum/design/honk_torso - name = "Exosuit Torso (\"H.O.N.K\")" - id = "honk_torso" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/honker_torso - materials = list(/datum/material/iron=20000,/datum/material/glass = 10000,/datum/material/bananium=10000) - construction_time = 300 - category = list("H.O.N.K") - -/datum/design/honk_head - name = "Exosuit Head (\"H.O.N.K\")" - id = "honk_head" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/honker_head - materials = list(/datum/material/iron=10000,/datum/material/glass = 5000,/datum/material/bananium=5000) - construction_time = 200 - category = list("H.O.N.K") - -/datum/design/honk_left_arm - name = "Exosuit Left Arm (\"H.O.N.K\")" - id = "honk_left_arm" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/honker_left_arm - materials = list(/datum/material/iron=15000,/datum/material/bananium=5000) - construction_time = 200 - category = list("H.O.N.K") - -/datum/design/honk_right_arm - name = "Exosuit Right Arm (\"H.O.N.K\")" - id = "honk_right_arm" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/honker_right_arm - materials = list(/datum/material/iron=15000,/datum/material/bananium=5000) - construction_time = 200 - category = list("H.O.N.K") - -/datum/design/honk_left_leg - name = "Exosuit Left Leg (\"H.O.N.K\")" - id = "honk_left_leg" - build_type = MECHFAB - build_path =/obj/item/mecha_parts/part/honker_left_leg - materials = list(/datum/material/iron=20000,/datum/material/bananium=5000) - construction_time = 200 - category = list("H.O.N.K") - -/datum/design/honk_right_leg - name = "Exosuit Right Leg (\"H.O.N.K\")" - id = "honk_right_leg" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/honker_right_leg - materials = list(/datum/material/iron=20000,/datum/material/bananium=5000) - construction_time = 200 - category = list("H.O.N.K") - - -//Phazon -/datum/design/phazon_chassis - name = "Exosuit Chassis (\"Phazon\")" - id = "phazon_chassis" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/chassis/phazon - materials = list(/datum/material/iron=20000) - construction_time = 100 - category = list("Phazon") - -/datum/design/phazon_torso - name = "Exosuit Torso (\"Phazon\")" - id = "phazon_torso" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/phazon_torso - materials = list(/datum/material/iron=35000,/datum/material/glass = 10000,/datum/material/plasma=20000) - construction_time = 300 - category = list("Phazon") - -/datum/design/phazon_head - name = "Exosuit Head (\"Phazon\")" - id = "phazon_head" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/phazon_head - materials = list(/datum/material/iron=15000,/datum/material/glass = 5000,/datum/material/plasma=10000) - construction_time = 200 - category = list("Phazon") - -/datum/design/phazon_left_arm - name = "Exosuit Left Arm (\"Phazon\")" - id = "phazon_left_arm" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/phazon_left_arm - materials = list(/datum/material/iron=20000,/datum/material/plasma=10000) - construction_time = 200 - category = list("Phazon") - -/datum/design/phazon_right_arm - name = "Exosuit Right Arm (\"Phazon\")" - id = "phazon_right_arm" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/phazon_right_arm - materials = list(/datum/material/iron=20000,/datum/material/plasma=10000) - construction_time = 200 - category = list("Phazon") - -/datum/design/phazon_left_leg - name = "Exosuit Left Leg (\"Phazon\")" - id = "phazon_left_leg" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/phazon_left_leg - materials = list(/datum/material/iron=20000,/datum/material/plasma=10000) - construction_time = 200 - category = list("Phazon") - -/datum/design/phazon_right_leg - name = "Exosuit Right Leg (\"Phazon\")" - id = "phazon_right_leg" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/phazon_right_leg - materials = list(/datum/material/iron=20000,/datum/material/plasma=10000) - construction_time = 200 - category = list("Phazon") - -/datum/design/phazon_armor - name = "Exosuit Armor (\"Phazon\")" - id = "phazon_armor" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/phazon_armor - materials = list(/datum/material/iron=25000,/datum/material/plasma=20000,/datum/material/titanium=20000) - construction_time = 300 - category = list("Phazon") - -//Exosuit Equipment -/datum/design/ripleyupgrade - name = "Ripley MK-1 to MK-II conversion kit" - id = "ripleyupgrade" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/ripleyupgrade - materials = list(/datum/material/iron=10000,/datum/material/plasma=10000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_hydraulic_clamp - name = "Exosuit Engineering Equipment (Hydraulic Clamp)" - id = "mech_hydraulic_clamp" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp - materials = list(/datum/material/iron=10000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_drill - name = "Exosuit Engineering Equipment (Drill)" - id = "mech_drill" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/drill - materials = list(/datum/material/iron=10000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_mining_scanner - name = "Exosuit Engineering Equipment (Mining Scanner)" - id = "mech_mscanner" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/mining_scanner - materials = list(/datum/material/iron=5000,/datum/material/glass = 2500) - construction_time = 50 - category = list("Exosuit Equipment") - -/datum/design/mech_extinguisher - name = "Exosuit Engineering Equipment (Extinguisher)" - id = "mech_extinguisher" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/extinguisher - materials = list(/datum/material/iron=10000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_generator - name = "Exosuit Equipment (Plasma Generator)" - id = "mech_generator" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/generator - materials = list(/datum/material/iron=10000,/datum/material/glass = 1000,/datum/material/silver=2000,/datum/material/plasma=5000) - construction_time = 100 - category = list("Exosuit Equipment") - -/datum/design/mech_mousetrap_mortar - name = "H.O.N.K Mousetrap Mortar" - id = "mech_mousetrap_mortar" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar - materials = list(/datum/material/iron=20000,/datum/material/bananium=5000) - construction_time = 300 - category = list("Exosuit Equipment") - -/datum/design/mech_banana_mortar - name = "H.O.N.K Banana Mortar" - id = "mech_banana_mortar" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar - materials = list(/datum/material/iron=20000,/datum/material/bananium=5000) - construction_time = 300 - category = list("Exosuit Equipment") - -/datum/design/mech_honker - name = "HoNkER BlAsT 5000" - id = "mech_honker" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/honker - materials = list(/datum/material/iron=20000,/datum/material/bananium=10000) - construction_time = 500 - category = list("Exosuit Equipment") - -/datum/design/mech_punching_glove - name = "Oingo Boingo Punch-face" - id = "mech_punching_face" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove - materials = list(/datum/material/iron=20000,/datum/material/bananium=7500) - construction_time = 400 - category = list("Exosuit Equipment") - -///////////////////////////////////////// -//////////////Borg Upgrades////////////// -///////////////////////////////////////// - -/datum/design/borg_upgrade_rename - name = "Cyborg Upgrade (Rename Board)" - id = "borg_upgrade_rename" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/rename - materials = list(/datum/material/iron = 5000) - construction_time = 120 - category = list("Cyborg Upgrade Modules") - -/datum/design/borg_upgrade_restart - name = "Cyborg Upgrade (Emergency Reboot Board)" - id = "borg_upgrade_restart" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/restart - materials = list(/datum/material/iron = 20000 , /datum/material/glass = 5000) - construction_time = 120 - category = list("Cyborg Upgrade Modules") - -/datum/design/borg_upgrade_thrusters - name = "Cyborg Upgrade (Ion Thrusters)" - id = "borg_upgrade_thrusters" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/thrusters - materials = list(/datum/material/iron = 10000, /datum/material/glass = 6000, /datum/material/plasma = 5000, /datum/material/uranium = 6000) - construction_time = 120 - category = list("Cyborg Upgrade Modules") - -/datum/design/borg_upgrade_disablercooler - name = "Cyborg Upgrade (Rapid Disabler Cooling Module)" - id = "borg_upgrade_disablercooler" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/disablercooler - materials = list(/datum/material/iron = 20000 , /datum/material/glass = 6000, /datum/material/gold = 2000, /datum/material/diamond = 2000) - construction_time = 120 - category = list("Cyborg Upgrade Modules") - -/datum/design/borg_upgrade_diamonddrill - name = "Cyborg Upgrade (Diamond Drill)" - id = "borg_upgrade_diamonddrill" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/ddrill - materials = list(/datum/material/iron=10000, /datum/material/glass = 6000, /datum/material/diamond = 2000) - construction_time = 80 - category = list("Cyborg Upgrade Modules") - -/datum/design/borg_upgrade_holding - name = "Cyborg Upgrade (Ore Satchel of Holding)" - id = "borg_upgrade_holding" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/soh - materials = list(/datum/material/iron = 10000, /datum/material/gold = 2000, /datum/material/uranium = 1000) - construction_time = 40 - category = list("Cyborg Upgrade Modules") - -/datum/design/borg_upgrade_lavaproof - name = "Cyborg Upgrade (Lavaproof Tracks)" - id = "borg_upgrade_lavaproof" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/lavaproof - materials = list(/datum/material/iron = 10000, /datum/material/plasma = 4000, /datum/material/titanium = 5000) - construction_time = 120 - category = list("Cyborg Upgrade Modules") - -/datum/design/borg_syndicate_module - name = "Cyborg Upgrade (Illegal Modules)" - id = "borg_syndicate_module" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/syndicate - materials = list(/datum/material/iron = 15000, /datum/material/glass = 15000, /datum/material/diamond = 10000) - construction_time = 120 - category = list("Cyborg Upgrade Modules") - -/datum/design/borg_transform_clown - name = "Cyborg Upgrade (Clown Module)" - id = "borg_transform_clown" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/transform/clown - materials = list(/datum/material/iron = 15000, /datum/material/glass = 15000, /datum/material/bananium = 1000) - construction_time = 120 - category = list("Cyborg Upgrade Modules") - -/datum/design/borg_upgrade_selfrepair - name = "Cyborg Upgrade (Self-repair)" - id = "borg_upgrade_selfrepair" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/selfrepair - materials = list(/datum/material/iron = 15000, /datum/material/glass = 15000) - construction_time = 80 - category = list("Cyborg Upgrade Modules") - -/datum/design/borg_upgrade_expandedsynthesiser - name = "Cyborg Upgrade (Hypospray Expanded Synthesiser)" - id = "borg_upgrade_expandedsynthesiser" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/hypospray/expanded - materials = list(/datum/material/iron = 15000, /datum/material/glass = 15000, /datum/material/plasma = 8000, /datum/material/uranium = 8000) - construction_time = 80 - category = list("Cyborg Upgrade Modules") - -/datum/design/borg_upgrade_piercinghypospray - name = "Cyborg Upgrade (Piercing Hypospray)" - id = "borg_upgrade_piercinghypospray" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/piercing_hypospray - materials = list(/datum/material/iron = 15000, /datum/material/glass = 15000, /datum/material/titanium = 5000, /datum/material/diamond = 3000) - construction_time = 80 - category = list("Cyborg Upgrade Modules") - -/datum/design/borg_upgrade_defibrillator - name = "Cyborg Upgrade (Defibrillator)" - id = "borg_upgrade_defibrillator" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/defib - materials = list(/datum/material/iron = 8000, /datum/material/glass = 5000, /datum/material/silver = 4000, /datum/material/gold = 3000) - construction_time = 80 - category = list("Cyborg Upgrade Modules") - -/datum/design/borg_upgrade_surgicalprocessor - name = "Cyborg Upgrade (Surgical Processor)" - id = "borg_upgrade_surgicalprocessor" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/processor - materials = list(/datum/material/iron = 5000, /datum/material/glass = 4000, /datum/material/silver = 4000) - construction_time = 40 - category = list("Cyborg Upgrade Modules") - -/datum/design/borg_upgrade_trashofholding - name = "Cyborg Upgrade (Trash Bag of Holding)" - id = "borg_upgrade_trashofholding" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/tboh - materials = list(/datum/material/gold = 2000, /datum/material/uranium = 1000) - construction_time = 40 - category = list("Cyborg Upgrade Modules") - -/datum/design/borg_upgrade_advancedmop - name = "Cyborg Upgrade (Advanced Mop)" - id = "borg_upgrade_advancedmop" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/amop - materials = list(/datum/material/iron = 2000, /datum/material/glass = 2000) - construction_time = 40 - category = list("Cyborg Upgrade Modules") - -/datum/design/borg_upgrade_expand - name = "Cyborg Upgrade (Expand)" - id = "borg_upgrade_expand" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/expand - materials = list(/datum/material/iron = 200000, /datum/material/titanium = 5000) - construction_time = 120 - category = list("Cyborg Upgrade Modules") - -/datum/design/boris_ai_controller - name = "B.O.R.I.S. AI-Cyborg Remote Control Module" - id = "borg_ai_control" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/ai - materials = list(/datum/material/iron = 1200, /datum/material/glass = 1500, /datum/material/gold = 200) - construction_time = 50 - category = list("Misc") - -/datum/design/borg_upgrade_rped - name = "Cyborg Upgrade (RPED)" - id = "borg_upgrade_rped" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/rped - materials = list(/datum/material/iron = 10000, /datum/material/glass = 5000) - construction_time = 120 - category = list("Cyborg Upgrade Modules") - -/datum/design/borg_upgrade_circuit_app - name = "Cyborg Upgrade (Circuit Manipulator)" - id = "borg_upgrade_circuitapp" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/circuit_app - materials = list(/datum/material/iron = 2000, /datum/material/titanium = 500) - construction_time = 120 - category = list("Cyborg Upgrade Modules") - -/datum/design/borg_upgrade_beaker_app - name = "Cyborg Upgrade (Beaker Storage)" - id = "borg_upgrade_beakerapp" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/beaker_app - materials = list(/datum/material/iron = 2000, /datum/material/glass = 2250) //Need glass for the new beaker too - construction_time = 120 - category = list("Cyborg Upgrade Modules") - -/datum/design/borg_upgrade_pinpointer - name = "Cyborg Upgrade (Crew pinpointer)" - id = "borg_upgrade_pinpointer" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/pinpointer - materials = list(/datum/material/iron = 1000, /datum/material/glass = 500) - construction_time = 120 - category = list("Cyborg Upgrade Modules") - -//Misc -/datum/design/mecha_tracking - name = "Exosuit Tracking Beacon" - id = "mecha_tracking" - build_type = MECHFAB - build_path =/obj/item/mecha_parts/mecha_tracking - materials = list(/datum/material/iron=500) - construction_time = 50 - category = list("Misc") - -/datum/design/mecha_tracking_ai_control - name = "AI Control Beacon" - id = "mecha_tracking_ai_control" - build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_tracking/ai_control - materials = list(/datum/material/iron = 1000, /datum/material/glass = 500, /datum/material/silver = 200) - construction_time = 50 - category = list("Misc") - -/datum/design/synthetic_flash - name = "Flash" - desc = "" - id = "sflash" - build_type = MECHFAB - materials = list(/datum/material/iron = 750, /datum/material/glass = 750) - construction_time = 100 - build_path = /obj/item/assembly/flash/handheld - category = list("Misc") diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm deleted file mode 100644 index 0097ee8112..0000000000 --- a/code/modules/research/designs/medical_designs.dm +++ /dev/null @@ -1,754 +0,0 @@ -///////////////////////////////////////// -////////////Medical Tools//////////////// -///////////////////////////////////////// - -/datum/design/healthanalyzer - name = "Health Analyzer" - id = "healthanalyzer" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 50) - build_path = /obj/item/healthanalyzer - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/mmi - name = "Man-Machine Interface" - desc = "" - id = "mmi" - build_type = PROTOLATHE | MECHFAB - materials = list(/datum/material/iron = 1000, /datum/material/glass = 500) - construction_time = 75 - build_path = /obj/item/mmi - category = list("Misc","Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/posibrain - name = "Positronic Brain" - desc = "" - id = "mmi_posi" - build_type = PROTOLATHE | MECHFAB - materials = list(/datum/material/iron = 1700, /datum/material/glass = 1350, /datum/material/gold = 500) //Gold, because SWAG. - construction_time = 75 - build_path = /obj/item/mmi/posibrain - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/bluespacebeaker - name = "Bluespace Beaker" - desc = "" - id = "bluespacebeaker" - build_type = PROTOLATHE - materials = list(/datum/material/glass = 5000, /datum/material/plasma = 3000, /datum/material/diamond = 1000, /datum/material/bluespace = 1000) - build_path = /obj/item/reagent_containers/glass/beaker/bluespace - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/noreactbeaker - name = "Cryostasis Beaker" - desc = "" - id = "splitbeaker" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 3000) - build_path = /obj/item/reagent_containers/glass/beaker/noreact - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/xlarge_beaker - name = "X-large Beaker" - id = "xlarge_beaker" - build_type = PROTOLATHE - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - materials = list(/datum/material/glass = 2500, /datum/material/plastic = 3000) - build_path = /obj/item/reagent_containers/glass/beaker/plastic - category = list("Medical Designs") - -/datum/design/meta_beaker - name = "Metamaterial Beaker" - id = "meta_beaker" - build_type = PROTOLATHE - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - materials = list(/datum/material/glass = 2500, /datum/material/plastic = 3000, /datum/material/gold = 1000, /datum/material/titanium = 1000) - build_path = /obj/item/reagent_containers/glass/beaker/meta - category = list("Medical Designs") - -/datum/design/bluespacesyringe - name = "Bluespace Syringe" - desc = "" - id = "bluespacesyringe" - build_type = PROTOLATHE - materials = list(/datum/material/glass = 2000, /datum/material/plasma = 1000, /datum/material/diamond = 1000, /datum/material/bluespace = 500) - build_path = /obj/item/reagent_containers/syringe/bluespace - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/cloning_disk - name = "Cloning Data Disk" - desc = "" - id = "cloning_disk" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 300, /datum/material/glass = 100, /datum/material/silver = 50) - build_path = /obj/item/disk/data - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/noreactsyringe - name = "Cryo Syringe" - desc = "" - id = "noreactsyringe" - build_type = PROTOLATHE - materials = list(/datum/material/glass = 2000, /datum/material/gold = 1000) - build_path = /obj/item/reagent_containers/syringe/noreact - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/piercesyringe - name = "Piercing Syringe" - desc = "" - id = "piercesyringe" - build_type = PROTOLATHE - materials = list(/datum/material/glass = 2000, /datum/material/diamond = 1000) - build_path = /obj/item/reagent_containers/syringe/piercing - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/bluespacebodybag - name = "Bluespace Body Bag" - desc = "" - id = "bluespacebodybag" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 3000, /datum/material/plasma = 2000, /datum/material/diamond = 500, /datum/material/bluespace = 500) - build_path = /obj/item/bodybag/bluespace - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/plasmarefiller - name = "Plasma-Man Jumpsuit Refill" - desc = "" - id = "plasmarefiller" //Why did this have no plasmatech - build_type = PROTOLATHE - materials = list(/datum/material/iron = 4000, /datum/material/plasma = 1000) - build_path = /obj/item/extinguisher_refill - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_ALL - -/datum/design/crewpinpointer - name = "Crew Pinpointer" - desc = "" - id = "crewpinpointer" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 3000, /datum/material/glass = 1500, /datum/material/gold = 200) - build_path = /obj/item/pinpointer/crew - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/defibrillator - name = "Defibrillator" - desc = "" - id = "defibrillator" - build_type = PROTOLATHE - build_path = /obj/item/defibrillator - materials = list(/datum/material/iron = 8000, /datum/material/glass = 4000, /datum/material/silver = 3000, /datum/material/gold = 1500) - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/defibrillator_mount - name = "Defibrillator Wall Mount" - desc = "" - id = "defibmount" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2000, /datum/material/glass = 1000) - build_path = /obj/item/wallframe/defib_mount - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/defibrillator_compact - name = "Compact Defibrillator" - desc = "" - id = "defibrillator_compact" - build_type = PROTOLATHE - build_path = /obj/item/defibrillator/compact - materials = list(/datum/material/iron = 16000, /datum/material/glass = 8000, /datum/material/silver = 6000, /datum/material/gold = 3000) - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/genescanner - name = "Genetic Sequence Analyzer" - desc = "" - id = "genescanner" - build_path = /obj/item/sequence_scanner - build_type = PROTOLATHE - materials = list(/datum/material/iron = 1000, /datum/material/glass = 500) - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/healthanalyzer_advanced - name = "Advanced Health Analyzer" - desc = "" - id = "healthanalyzer_advanced" - build_path = /obj/item/healthanalyzer/advanced - build_type = PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/glass = 2500, /datum/material/silver = 2000, /datum/material/gold = 1500) - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/medigel - name = "Medical Gel" - desc = "" - id = "medigel" - build_path = /obj/item/reagent_containers/medigel - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2500, /datum/material/glass = 500) - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/surgical_drapes - name = "Surgical Drapes" - id = "surgical_drapes" - build_type = PROTOLATHE - materials = list(/datum/material/plastic = 2000) - build_path = /obj/item/surgical_drapes - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/laserscalpel - name = "Laser Scalpel" - desc = "" - id = "laserscalpel" - build_path = /obj/item/scalpel/advanced - build_type = PROTOLATHE - materials = list(/datum/material/iron = 6000, /datum/material/glass = 1500, /datum/material/silver = 2000, /datum/material/gold = 1500, /datum/material/diamond = 200, /datum/material/titanium = 4000) - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/mechanicalpinches - name = "Mechanical Pinches" - desc = "" - id = "mechanicalpinches" - build_path = /obj/item/retractor/advanced - build_type = PROTOLATHE - materials = list(/datum/material/iron = 12000, /datum/material/glass = 4000, /datum/material/silver = 4000, /datum/material/titanium = 5000) - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/searingtool - name = "Searing Tool" - desc = "" - id = "searingtool" - build_path = /obj/item/surgicaldrill/advanced - build_type = PROTOLATHE - materials = list(/datum/material/iron = 4000, /datum/material/glass = 2000, /datum/material/plasma = 2000, /datum/material/uranium = 3000, /datum/material/titanium = 3000) - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/medical_spray_bottle - name = "Medical Spray Bottle" - desc = "" - id = "med_spray_bottle" - build_type = PROTOLATHE - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - materials = list(/datum/material/plastic = 2000) - build_path = /obj/item/reagent_containers/spray/medical - category = list("Medical Designs") - -/datum/design/chem_pack - name = "Intravenous Medicine Bag" - desc = "" - id = "chem_pack" - build_type = PROTOLATHE - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - materials = list(/datum/material/plastic = 2000) - build_path = /obj/item/reagent_containers/chem_pack - category = list("Medical Designs") - -/datum/design/blood_pack - name = "Blood Pack" - desc = "" - id = "blood_pack" - build_type = PROTOLATHE - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - materials = list(/datum/material/plastic = 1000) - build_path = /obj/item/reagent_containers/blood - category = list("Medical Designs") - -///////////////////////////////////////// -//////////Cybernetic Implants//////////// -///////////////////////////////////////// - -/datum/design/cyberimp_welding - name = "Welding Shield Eyes" - desc = "" - id = "ci-welding" - build_type = PROTOLATHE | MECHFAB - construction_time = 40 - materials = list(/datum/material/iron = 600, /datum/material/glass = 400) - build_path = /obj/item/organ/eyes/robotic/shield - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cyberimp_gloweyes - name = "Luminescent Eyes" - desc = "" - id = "ci-gloweyes" - build_type = PROTOLATHE | MECHFAB - construction_time = 40 - materials = list(/datum/material/iron = 600, /datum/material/glass = 1000) - build_path = /obj/item/organ/eyes/robotic/glow - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cyberimp_breather - name = "Breathing Tube Implant" - desc = "" - id = "ci-breather" - build_type = PROTOLATHE | MECHFAB - construction_time = 35 - materials = list(/datum/material/iron = 600, /datum/material/glass = 250) - build_path = /obj/item/organ/cyberimp/mouth/breathing_tube - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cyberimp_surgical - name = "Surgical Arm Implant" - desc = "" - id = "ci-surgery" - build_type = PROTOLATHE | MECHFAB - materials = list (/datum/material/iron = 2500, /datum/material/glass = 1500, /datum/material/silver = 1500) - construction_time = 200 - build_path = /obj/item/organ/cyberimp/arm/surgery - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cyberimp_toolset - name = "Toolset Arm Implant" - desc = "" - id = "ci-toolset" - build_type = PROTOLATHE | MECHFAB - materials = list (/datum/material/iron = 2500, /datum/material/glass = 1500, /datum/material/silver = 1500) - construction_time = 200 - build_path = /obj/item/organ/cyberimp/arm/toolset - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cyberimp_medical_hud - name = "Medical HUD Implant" - desc = "" - id = "ci-medhud" - build_type = PROTOLATHE | MECHFAB - construction_time = 50 - materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/silver = 500, /datum/material/gold = 500) - build_path = /obj/item/organ/cyberimp/eyes/hud/medical - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cyberimp_security_hud - name = "Security HUD Implant" - desc = "" - id = "ci-sechud" - build_type = PROTOLATHE | MECHFAB - construction_time = 50 - materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/silver = 750, /datum/material/gold = 750) - build_path = /obj/item/organ/cyberimp/eyes/hud/security - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cyberimp_diagnostic_hud - name = "Diagnostic HUD Implant" - desc = "" - id = "ci-diaghud" - build_type = PROTOLATHE | MECHFAB - construction_time = 50 - materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/silver = 600, /datum/material/gold = 600) - build_path = /obj/item/organ/cyberimp/eyes/hud/diagnostic - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cyberimp_xray - name = "X-ray Eyes" - desc = "" - id = "ci-xray" - build_type = PROTOLATHE | MECHFAB - construction_time = 60 - materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/silver = 600, /datum/material/gold = 600, /datum/material/plasma = 1000, /datum/material/uranium = 1000, /datum/material/diamond = 1000, /datum/material/bluespace = 1000) - build_path = /obj/item/organ/eyes/robotic/xray - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cyberimp_thermals - name = "Thermal Eyes" - desc = "" - id = "ci-thermals" - build_type = PROTOLATHE | MECHFAB - construction_time = 60 - materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/silver = 600, /datum/material/gold = 600, /datum/material/plasma = 1000, /datum/material/diamond = 2000) - build_path = /obj/item/organ/eyes/robotic/thermals - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cyberimp_antidrop - name = "Anti-Drop Implant" - desc = "" - id = "ci-antidrop" - build_type = PROTOLATHE | MECHFAB - construction_time = 60 - materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/silver = 400, /datum/material/gold = 400) - build_path = /obj/item/organ/cyberimp/brain/anti_drop - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cyberimp_antistun - name = "CNS Rebooter Implant" - desc = "" - id = "ci-antistun" - build_type = PROTOLATHE | MECHFAB - construction_time = 60 - materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/silver = 500, /datum/material/gold = 1000) - build_path = /obj/item/organ/cyberimp/brain/anti_stun - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cyberimp_nutriment - name = "Nutriment Pump Implant" - desc = "" - id = "ci-nutriment" - build_type = PROTOLATHE | MECHFAB - construction_time = 40 - materials = list(/datum/material/iron = 500, /datum/material/glass = 500, /datum/material/gold = 500) - build_path = /obj/item/organ/cyberimp/chest/nutriment - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cyberimp_nutriment_plus - name = "Nutriment Pump Implant PLUS" - desc = "" - id = "ci-nutrimentplus" - build_type = PROTOLATHE | MECHFAB - construction_time = 50 - materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/gold = 500, /datum/material/uranium = 750) - build_path = /obj/item/organ/cyberimp/chest/nutriment/plus - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cyberimp_reviver - name = "Reviver Implant" - desc = "" - id = "ci-reviver" - build_type = PROTOLATHE | MECHFAB - construction_time = 60 - materials = list(/datum/material/iron = 800, /datum/material/glass = 800, /datum/material/gold = 300, /datum/material/uranium = 500) - build_path = /obj/item/organ/cyberimp/chest/reviver - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cyberimp_thrusters - name = "Thrusters Set Implant" - desc = "" - id = "ci-thrusters" - build_type = PROTOLATHE | MECHFAB - construction_time = 80 - materials = list(/datum/material/iron = 4000, /datum/material/glass = 2000, /datum/material/silver = 1000, /datum/material/diamond = 1000) - build_path = /obj/item/organ/cyberimp/chest/thrusters - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -///////////////////////////////////////// -////////////Regular Implants///////////// -///////////////////////////////////////// - -/datum/design/implanter - name = "Implanter" - desc = "" - id = "implanter" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 600, /datum/material/glass = 200) - build_path = /obj/item/implanter - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/implantcase - name = "Implant Case" - desc = "" - id = "implantcase" - build_type = PROTOLATHE - materials = list(/datum/material/glass = 500) - build_path = /obj/item/implantcase - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/implant_sadtrombone - name = "Sad Trombone Implant Case" - desc = "" - id = "implant_trombone" - build_type = PROTOLATHE - materials = list(/datum/material/glass = 500, /datum/material/bananium = 500) - build_path = /obj/item/implantcase/sad_trombone - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_ALL //if you get bananium you get the sad trombones. - -/datum/design/implant_chem - name = "Chemical Implant Case" - desc = "" - id = "implant_chem" - build_type = PROTOLATHE - materials = list(/datum/material/glass = 700) - build_path = /obj/item/implantcase/chem - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/implant_tracking - name = "Tracking Implant Case" - desc = "" - id = "implant_tracking" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 500) - build_path = /obj/item/implantcase/tracking - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL - -//Cybernetic organs - -/datum/design/cybernetic_liver - name = "Cybernetic Liver" - desc = "" - id = "cybernetic_liver" - build_type = PROTOLATHE | MECHFAB - construction_time = 40 - materials = list(/datum/material/iron = 500, /datum/material/glass = 500) - build_path = /obj/item/organ/liver/cybernetic - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cybernetic_liver_u - name = "Upgraded Cybernetic Liver" - desc = "" - id = "cybernetic_liver_u" - build_type = PROTOLATHE | MECHFAB - construction_time = 50 - materials = list(/datum/material/iron = 500, /datum/material/glass = 500) - build_path = /obj/item/organ/liver/cybernetic/upgraded - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cybernetic_heart - name = "Cybernetic Heart" - desc = "" - id = "cybernetic_heart" - build_type = PROTOLATHE | MECHFAB - construction_time = 40 - materials = list(/datum/material/iron = 500, /datum/material/glass = 500) - build_path = /obj/item/organ/heart/cybernetic - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cybernetic_heart_u - name = "Upgraded Cybernetic Heart" - desc = "" - id = "cybernetic_heart_u" - build_type = PROTOLATHE | MECHFAB - construction_time = 50 - materials = list(/datum/material/iron = 500, /datum/material/glass = 500, /datum/material/silver=500) - build_path = /obj/item/organ/heart/cybernetic/upgraded - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cybernetic_lungs - name = "Cybernetic Lungs" - desc = "" - id = "cybernetic_lungs" - build_type = PROTOLATHE | MECHFAB - construction_time = 40 - materials = list(/datum/material/iron = 500, /datum/material/glass = 500) - build_path = /obj/item/organ/lungs/cybernetic - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cybernetic_lungs_u - name = "Upgraded Cybernetic Lungs" - desc = "" - id = "cybernetic_lungs_u" - build_type = PROTOLATHE | MECHFAB - construction_time = 50 - materials = list(/datum/material/iron = 500, /datum/material/glass = 500, /datum/material/silver = 500) - build_path = /obj/item/organ/lungs/cybernetic/upgraded - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cybernetic_ears - name = "Cybernetic Ears" - desc = "" - id = "cybernetic_ears" - build_type = PROTOLATHE | MECHFAB - construction_time = 30 - materials = list(/datum/material/iron = 250, /datum/material/glass = 400) - build_path = /obj/item/organ/ears/cybernetic - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cybernetic_ears_u - name = "Upgraded Cybernetic Ears" - desc = "" - id = "cybernetic_ears_u" - build_type = PROTOLATHE | MECHFAB - construction_time = 40 - materials = list(/datum/material/iron = 500, /datum/material/glass = 500, /datum/material/silver = 500) - build_path = /obj/item/organ/ears/cybernetic/upgraded - category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -///////////////////// -///Surgery Designs/// -///////////////////// -/datum/design/surgery - name = "Surgery Design" - desc = "" - id = "surgery_parent" - research_icon = 'icons/obj/surgery.dmi' - research_icon_state = "surgery_any" - var/datum/surgery_step/surgery_step - -/* -/datum/design/surgery/experimental_dissection - name = "Advanced Dissection" - desc = "" - id = "surgery_adv_dissection" - surgery = /datum/surgery/advanced/experimental_dissection/adv - research_icon_state = "surgery_chest" - -/datum/design/surgery/experimental_dissection/exp - name = "Experimental Dissection" - id = "surgery_exp_dissection" - surgery = /datum/surgery/advanced/experimental_dissection/exp - -/datum/design/surgery/experimental_dissection/ext - name = "Extraterrestrial Dissection" - id = "surgery_ext_dissection" - surgery = /datum/surgery/advanced/experimental_dissection/alien - -/datum/design/surgery/lobotomy - name = "Lobotomy" - desc = "" - id = "surgery_lobotomy" - surgery = /datum/surgery/advanced/lobotomy - research_icon_state = "surgery_head" - -/datum/design/surgery/pacify - name = "Pacification" - desc = "" - id = "surgery_pacify" - surgery = /datum/surgery/advanced/pacify - research_icon_state = "surgery_head" - -/datum/design/surgery/viral_bonding - name = "Viral Bonding" - desc = "" - id = "surgery_viral_bond" - surgery = /datum/surgery/advanced/viral_bonding - research_icon_state = "surgery_chest" - -/datum/design/surgery/healing //PLEASE ACCOUNT FOR UNIQUE HEALING BRANCHES IN THE hptech HREF (currently 2 for Brute/Burn; Combo is bonus) - name = "Tend Wounds" - desc = "" - id = "surgery_healing_base" //holder because travis cries otherwise. Not used in techweb unlocks. - research_icon_state = "surgery_chest" - -/datum/design/surgery/healing/brute_upgrade - name = "Tend Wounds (Brute) Upgrade" - surgery = /datum/surgery/healing/brute/upgraded - id = "surgery_heal_brute_upgrade" - -/datum/design/surgery/healing/brute_upgrade_2 - name = "Tend Wounds (Brute) Upgrade" - surgery = /datum/surgery/healing/brute/upgraded/femto - id = "surgery_heal_brute_upgrade_femto" - -/datum/design/surgery/healing/burn_upgrade - name = "Tend Wounds (Burn) Upgrade" - surgery = /datum/surgery/healing/burn/upgraded - id = "surgery_heal_burn_upgrade" - -/datum/design/surgery/healing/burn_upgrade_2 - name = "Tend Wounds (Burn) Upgrade" - surgery = /datum/surgery/healing/burn/upgraded/femto - id = "surgery_heal_burn_upgrade_femto" - -/datum/design/surgery/healing/combo - name = "Tend Wounds (Physical)" - desc = "" - surgery = /datum/surgery/healing/combo - id = "surgery_heal_combo" - -/datum/design/surgery/healing/combo_upgrade - name = "Tend Wounds (Physical) Upgrade" - surgery = /datum/surgery/healing/combo/upgraded - id = "surgery_heal_combo_upgrade" - -/datum/design/surgery/healing/combo_upgrade_2 - name = "Tend Wounds (Physical) Upgrade" - desc = "" - surgery = /datum/surgery/healing/combo/upgraded/femto - id = "surgery_heal_combo_upgrade_femto" - -/datum/design/surgery/revival - name = "Revival" - desc = "" - id = "surgery_revival" - surgery = /datum/surgery/advanced/revival - research_icon_state = "surgery_head" - -/datum/design/surgery/brainwashing - name = "Brainwashing" - desc = "" - id = "surgery_brainwashing" - surgery = /datum/surgery/advanced/brainwashing - research_icon_state = "surgery_head" - -/datum/design/surgery/nerve_splicing - name = "Nerve Splicing" - desc = "" - id = "surgery_nerve_splice" - surgery = /datum/surgery/advanced/bioware/nerve_splicing - research_icon_state = "surgery_chest" - -/datum/design/surgery/nerve_grounding - name = "Nerve Grounding" - desc = "" - id = "surgery_nerve_ground" - surgery = /datum/surgery/advanced/bioware/nerve_grounding - research_icon_state = "surgery_chest" - -/datum/design/surgery/vein_threading - name = "Vein Threading" - desc = "" - id = "surgery_vein_thread" - surgery = /datum/surgery/advanced/bioware/vein_threading - research_icon_state = "surgery_chest" - -/datum/design/surgery/muscled_veins - name = "Vein Muscle Membrane" - desc = "" - id = "surgery_muscled_veins" - surgery = /datum/surgery/advanced/bioware/muscled_veins - research_icon_state = "surgery_chest" - -/datum/design/surgery/ligament_hook - name = "Ligament Hook" - desc = "A surgical procedure which reshapes the connections between torso and limbs, making it so limbs can be attached manually if severed. \ - However this weakens the connection, making them easier to detach as well." - id = "surgery_ligament_hook" - surgery = /datum/surgery/advanced/bioware/ligament_hook - research_icon_state = "surgery_chest" - -/datum/design/surgery/ligament_reinforcement - name = "Ligament Reinforcement" - desc = "A surgical procedure which adds a protective tissue and bone cage around the connections between the torso and limbs, preventing dismemberment. \ - However, the nerve connections as a result are more easily interrupted, making it easier to disable limbs with damage." - id = "surgery_ligament_reinforcement" - surgery = /datum/surgery/advanced/bioware/ligament_reinforcement - research_icon_state = "surgery_chest" - -/datum/design/surgery/necrotic_revival - name = "Necrotic Revival" - desc = "" - id = "surgery_zombie" - surgery = /datum/surgery/advanced/necrotic_revival - research_icon_state = "surgery_head" -*/ diff --git a/code/modules/research/designs/mining_designs.dm b/code/modules/research/designs/mining_designs.dm deleted file mode 100644 index b77f6c9bd3..0000000000 --- a/code/modules/research/designs/mining_designs.dm +++ /dev/null @@ -1,133 +0,0 @@ - -///////////////////////////////////////// -/////////////////Mining////////////////// -///////////////////////////////////////// -/datum/design/cargo_express - name = "Computer Design (Express Supply Console)"//shes beautiful - desc = ""//who? - id = "cargoexpress"//the coder reading this - build_type = IMPRINTER - materials = list(/datum/material/glass = 1000) - build_path = /obj/item/circuitboard/computer/cargo/express - category = list("Mining Designs") - departmental_flags = DEPARTMENTAL_FLAG_CARGO - -/datum/design/bluespace_pod - name = "Supply Drop Pod Upgrade Disk" - desc = ""//who? - id = "bluespace_pod"//the coder reading this - build_type = PROTOLATHE - materials = list(/datum/material/glass = 1000) - build_path = /obj/item/disk/cargo/bluespace_pod - category = list("Mining Designs") - departmental_flags = DEPARTMENTAL_FLAG_CARGO - -/datum/design/drill - name = "Mining Drill" - desc = "" - id = "drill" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 6000, /datum/material/glass = 1000) //expensive, but no need for miners. - build_path = /obj/item/pickaxe/drill - category = list("Mining Designs") - departmental_flags = DEPARTMENTAL_FLAG_CARGO - -/datum/design/drill_diamond - name = "Diamond-Tipped Mining Drill" - desc = "" - id = "drill_diamond" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 6000, /datum/material/glass = 1000, /datum/material/diamond = 2000) //Yes, a whole diamond is needed. - build_path = /obj/item/pickaxe/drill/diamonddrill - category = list("Mining Designs") - departmental_flags = DEPARTMENTAL_FLAG_CARGO - -/datum/design/plasmacutter - name = "Plasma Cutter" - desc = "" - id = "plasmacutter" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 1500, /datum/material/glass = 500, /datum/material/plasma = 400) - build_path = /obj/item/gun/energy/plasmacutter - category = list("Mining Designs") - departmental_flags = DEPARTMENTAL_FLAG_CARGO - -/datum/design/plasmacutter_adv - name = "Advanced Plasma Cutter" - desc = "" - id = "plasmacutter_adv" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 3000, /datum/material/glass = 1000, /datum/material/plasma = 2000, /datum/material/gold = 500) - build_path = /obj/item/gun/energy/plasmacutter/adv - category = list("Mining Designs") - departmental_flags = DEPARTMENTAL_FLAG_CARGO - -/datum/design/jackhammer - name = "Sonic Jackhammer" - desc = "" - id = "jackhammer" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 6000, /datum/material/glass = 2000, /datum/material/silver = 2000, /datum/material/diamond = 6000) - build_path = /obj/item/pickaxe/drill/jackhammer - category = list("Mining Designs") - departmental_flags = DEPARTMENTAL_FLAG_CARGO - -/datum/design/superresonator - name = "Upgraded Resonator" - desc = "" - id = "superresonator" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 4000, /datum/material/glass = 1500, /datum/material/silver = 1000, /datum/material/uranium = 1000) - build_path = /obj/item/resonator/upgraded - category = list("Mining Designs") - departmental_flags = DEPARTMENTAL_FLAG_CARGO - -/datum/design/trigger_guard_mod - name = "Kinetic Accelerator Trigger Guard Mod" - desc = "" - id = "triggermod" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2000, /datum/material/glass = 1500, /datum/material/gold = 1500, /datum/material/uranium = 1000) - build_path = /obj/item/borg/upgrade/modkit/trigger_guard - category = list("Mining Designs") - departmental_flags = DEPARTMENTAL_FLAG_CARGO - -/datum/design/damage_mod - name = "Kinetic Accelerator Damage Mod" - desc = "" - id = "damagemod" - build_type = PROTOLATHE | MECHFAB - materials = list(/datum/material/iron = 2000, /datum/material/glass = 1500, /datum/material/gold = 1500, /datum/material/uranium = 1000) - build_path = /obj/item/borg/upgrade/modkit/damage - category = list("Mining Designs", "Cyborg Upgrade Modules") - departmental_flags = DEPARTMENTAL_FLAG_CARGO - -/datum/design/cooldown_mod - name = "Kinetic Accelerator Cooldown Mod" - desc = "" - id = "cooldownmod" - build_type = PROTOLATHE | MECHFAB - materials = list(/datum/material/iron = 2000, /datum/material/glass = 1500, /datum/material/gold = 1500, /datum/material/uranium = 1000) - build_path = /obj/item/borg/upgrade/modkit/cooldown - category = list("Mining Designs", "Cyborg Upgrade Modules") - departmental_flags = DEPARTMENTAL_FLAG_CARGO - -/datum/design/range_mod - name = "Kinetic Accelerator Range Mod" - desc = "" - id = "rangemod" - build_type = PROTOLATHE | MECHFAB - materials = list(/datum/material/iron = 2000, /datum/material/glass = 1500, /datum/material/gold = 1500, /datum/material/uranium = 1000) - build_path = /obj/item/borg/upgrade/modkit/range - category = list("Mining Designs", "Cyborg Upgrade Modules") - departmental_flags = DEPARTMENTAL_FLAG_CARGO - -/datum/design/hyperaccelerator - name = "Kinetic Accelerator Mining AoE Mod" - desc = "" - id = "hypermod" - build_type = PROTOLATHE | MECHFAB - materials = list(/datum/material/iron = 8000, /datum/material/glass = 1500, /datum/material/silver = 2000, /datum/material/gold = 2000, /datum/material/diamond = 2000) - build_path = /obj/item/borg/upgrade/modkit/aoe/turfs - category = list("Mining Designs", "Cyborg Upgrade Modules") - departmental_flags = DEPARTMENTAL_FLAG_CARGO diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm deleted file mode 100644 index 18e00c4140..0000000000 --- a/code/modules/research/designs/misc_designs.dm +++ /dev/null @@ -1,503 +0,0 @@ - -///////////////////////////////////////// -/////////////////HUDs//////////////////// -///////////////////////////////////////// - -/datum/design/health_hud - name = "Health Scanner HUD" - desc = "" - id = "health_hud" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 500) - build_path = /obj/item/clothing/glasses/hud/health - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/health_hud_night - name = "Night Vision Health Scanner HUD" - desc = "" - id = "health_hud_night" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/uranium = 1000, /datum/material/silver = 350) - build_path = /obj/item/clothing/glasses/hud/health/night - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/security_hud - name = "Security HUD" - desc = "" - id = "security_hud" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 500) - build_path = /obj/item/clothing/glasses/hud/security - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/security_hud_night - name = "Night Vision Security HUD" - desc = "" - id = "security_hud_night" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/uranium = 1000, /datum/material/gold = 350) - build_path = /obj/item/clothing/glasses/hud/security/night - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/diagnostic_hud - name = "Diagnostic HUD" - desc = "" - id = "diagnostic_hud" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 500) - build_path = /obj/item/clothing/glasses/hud/diagnostic - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/diagnostic_hud_night - name = "Night Vision Diagnostic HUD" - desc = "" - id = "diagnostic_hud_night" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/uranium = 1000, /datum/material/plasma = 300) - build_path = /obj/item/clothing/glasses/hud/diagnostic/night - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -///////////////////////////////////////// -//////////////////Misc/////////////////// -///////////////////////////////////////// - -/datum/design/welding_goggles - name = "Welding Goggles" - desc = "" - id = "welding_goggles" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 500) - build_path = /obj/item/clothing/glasses/welding - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/welding_mask - name = "Welding Gas Mask" - desc = "" - id = "weldingmask" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 3000, /datum/material/glass = 1000) - build_path = /obj/item/clothing/mask/gas/welding - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/portaseeder - name = "Portable Seed Extractor" - desc = "" - id = "portaseeder" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 1000, /datum/material/glass = 400) - build_path = /obj/item/storage/bag/plants/portaseeder - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/air_horn - name = "Air Horn" - desc = "" - id = "air_horn" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 4000, /datum/material/bananium = 1000) - build_path = /obj/item/bikehorn/airhorn - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_ALL //HONK! - -/datum/design/mesons - name = "Optical Meson Scanners" - desc = "" - id = "mesons" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 500) - build_path = /obj/item/clothing/glasses/meson - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/engine_goggles - name = "Engineering Scanner Goggles" - desc = "" - id = "engine_goggles" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 500, /datum/material/plasma = 100) - build_path = /obj/item/clothing/glasses/meson/engine - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/tray_goggles - name = "Optical T-Ray Scanners" - desc = "" - id = "tray_goggles" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 500) - build_path = /obj/item/clothing/glasses/meson/engine/tray - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/nvgmesons - name = "Night Vision Optical Meson Scanners" - desc = "" - id = "nvgmesons" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/plasma = 350, /datum/material/uranium = 1000) - build_path = /obj/item/clothing/glasses/meson/night - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_CARGO - -/datum/design/night_vision_goggles - name = "Night Vision Goggles" - desc = "" - id = "night_visision_goggles" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/plasma = 350, /datum/material/uranium = 1000) - build_path = /obj/item/clothing/glasses/night - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SECURITY - -/datum/design/magboots - name = "Magnetic Boots" - desc = "" - id = "magboots" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 4500, /datum/material/silver = 1500, /datum/material/gold = 2500) - build_path = /obj/item/clothing/shoes/magboots - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/forcefield_projector - name = "Forcefield Projector" - desc = "" - id = "forcefield_projector" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2500, /datum/material/glass = 1000) - build_path = /obj/item/forcefield_projector - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/sci_goggles - name = "Science Goggles" - desc = "" - id = "scigoggles" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 500) - build_path = /obj/item/clothing/glasses/science - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/diskplantgene - name = "Plant Data Disk" - desc = "" - id = "diskplantgene" - build_type = PROTOLATHE - materials = list(/datum/material/iron=200, /datum/material/glass = 100) - build_path = /obj/item/disk/plantgene - category = list("Electronics") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/roastingstick - name = "Advanced Roasting Stick" - desc = "" - id = "roastingstick" - build_type = PROTOLATHE - materials = list(/datum/material/iron=1000, /datum/material/glass = 500, /datum/material/bluespace = 250) - build_path = /obj/item/melee/roastingstick - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/locator - name = "Bluespace Locator" - desc = "" - id = "locator" - build_type = PROTOLATHE - materials = list(/datum/material/iron=1000, /datum/material/glass = 500, /datum/material/silver = 500) - build_path = /obj/item/locator - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/quantum_keycard - name = "Quantum Keycard" - desc = "" - id = "quantum_keycard" - build_type = PROTOLATHE - materials = list(/datum/material/glass = 500, /datum/material/iron = 500, /datum/material/silver = 500, /datum/material/bluespace = 1000) - build_path = /obj/item/quantum_keycard - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/anomaly_neutralizer - name = "Anomaly Neutralizer" - desc = "" - id = "anomaly_neutralizer" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2000, /datum/material/gold = 2000, /datum/material/plasma = 5000, /datum/material/uranium = 2000) - build_path = /obj/item/anomaly_neutralizer - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/donksoft_refill - name = "Donksoft Toy Vendor Refill" - desc = "" - id = "donksoft_refill" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 25000, /datum/material/glass = 15000, /datum/material/plasma = 20000, /datum/material/gold = 10000, /datum/material/silver = 10000) - build_path = /obj/item/vending_refill/donksoft - category = list("Equipment") - -/datum/design/oxygen_tank - name = "Oxygen Tank" - desc = "" - id = "oxygen_tank" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2000) - build_path = /obj/item/tank/internals/oxygen/empty - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/plasma_tank - name = "Plasma Tank" - desc = "" - id = "plasma_tank" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2000) - build_path = /obj/item/tank/internals/plasma/empty - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/id - name = "Identification Card" - desc = "" - id = "idcard" - build_type = PROTOLATHE - materials = list(/datum/material/iron=200, /datum/material/glass = 100) - build_path = /obj/item/card/id - category = list("Electronics") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -///////////////////////////////////////// -////////////Janitor Designs////////////// -///////////////////////////////////////// - -/datum/design/advmop - name = "Advanced Mop" - desc = "" - id = "advmop" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2500, /datum/material/glass = 200) - build_path = /obj/item/mop/advanced - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/blutrash - name = "Trashbag of Holding" - desc = "" - id = "blutrash" - build_type = PROTOLATHE - materials = list(/datum/material/gold = 1500, /datum/material/uranium = 250, /datum/material/plasma = 1500) - build_path = /obj/item/storage/bag/trash/bluespace - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/buffer - name = "Floor Buffer Upgrade" - desc = "" - id = "buffer" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 3000, /datum/material/glass = 200) - build_path = /obj/item/janiupgrade - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/spraybottle - name = "Spray Bottle" - desc = "" - id = "spraybottle" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 3000, /datum/material/glass = 200) - build_path = /obj/item/reagent_containers/spray - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/beartrap - name = "Bear Trap" - desc = "" - id = "beartrap" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/titanium = 1000) - build_path = /obj/item/restraints/legcuffs/beartrap - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -///////////////////////////////////////// -/////////////Holobarriers//////////////// -///////////////////////////////////////// - -/datum/design/holosign - name = "Holographic Sign Projector" - desc = "" - id = "holosign" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2000, /datum/material/glass = 1000) - build_path = /obj/item/holosign_creator - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/holobarrier_jani - name = "Custodial Holobarrier Projector" - desc = "" - id = "holobarrier_jani" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2000, /datum/material/glass = 1000, /datum/material/silver = 1000) - build_path = /obj/item/holosign_creator/janibarrier - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - - -/datum/design/holosignsec - name = "Security Holobarrier Projector" - desc = "" - id = "holosignsec" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/glass = 1000, /datum/material/gold = 1000, /datum/material/silver = 1000) - build_path = /obj/item/holosign_creator/security - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/holosignengi - name = "Engineering Holobarrier Projector" - desc = "" - id = "holosignengi" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/glass = 1000, /datum/material/gold = 1000, /datum/material/silver = 1000) - build_path = /obj/item/holosign_creator/engineering - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/holosignatmos - name = "ATMOS Holofan Projector" - desc = "" - id = "holosignatmos" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/glass = 1000, /datum/material/gold = 1000, /datum/material/silver = 1000) - build_path = /obj/item/holosign_creator/atmos - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/holobarrier_med - name = "PENLITE Holobarrier Projector" - desc = "" - build_type = PROTOLATHE - build_path = /obj/item/holosign_creator/medical - materials = list(/datum/material/iron = 500, /datum/material/glass = 500, /datum/material/silver = 100) //a hint of silver since it can troll 2 antags (bad viros and sentient disease) - id = "holobarrier_med" - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -///////////////////////////////////////// -////////////////Armour/////////////////// -///////////////////////////////////////// - -/datum/design/reactive_armour - name = "Reactive Armour Shell" - desc = "" - id = "reactive_armour" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 10000, /datum/material/diamond = 5000, /datum/material/uranium = 8000, /datum/material/silver = 4500, /datum/material/gold = 5000) - build_path = /obj/item/reactive_armour_shell - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/knight_armour - name = "Knight Armour" - desc = "" - id = "knight_armour" - build_type = AUTOLATHE - materials = list(MAT_CATEGORY_RIGID = 10000) - build_path = /obj/item/clothing/suit/armor/riot/knight/greyscale - category = list("Imported") - -/datum/design/knight_helmet - name = "Knight Helmet" - desc = "" - id = "knight_helmet" - build_type = AUTOLATHE - materials = list(MAT_CATEGORY_RIGID = 5000) - build_path = /obj/item/clothing/head/helmet/knight/greyscale - category = list("Imported") - - - -///////////////////////////////////////// -/////////////Security//////////////////// -///////////////////////////////////////// - -/datum/design/seclite - name = "Seclite" - desc = "" - id = "seclite" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2500) - build_path = /obj/item/flashlight/seclite - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/detective_scanner - name = "Forensic Scanner" - desc = "" - id = "detective_scanner" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/glass = 1000, /datum/material/gold = 2500, /datum/material/silver = 2000) - build_path = /obj/item/detective_scanner - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/pepperspray - name = "Pepper Spray" - desc = "" - id = "pepperspray" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/glass = 1000) - build_path = /obj/item/reagent_containers/spray/pepper/empty - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/bola_energy - name = "Energy Bola" - desc = "" - id = "bola_energy" - build_type = PROTOLATHE - materials = list(/datum/material/silver = 500, /datum/material/plasma = 500, /datum/material/titanium = 500) - build_path = /obj/item/restraints/legcuffs/bola/energy - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/zipties - name = "Zipties" - desc = "" - id = "zipties" - build_type = PROTOLATHE - materials = list(/datum/material/plastic = 250) - build_path = /obj/item/restraints/handcuffs/cable/zipties - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/evidencebag - name = "Evidence Bag" - desc = "" - id = "evidencebag" - build_type = PROTOLATHE - materials = list(/datum/material/plastic = 100) - build_path = /obj/item/evidencebag - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/plumbing_rcd - name = "Plumbing Constructor" - id = "plumbing_rcd" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 75000, /datum/material/glass = 37500, /datum/material/plastic = 1000) - build_path = /obj/item/construction/plumbing - category = list("Equipment") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL diff --git a/code/modules/research/designs/nanite_designs.dm b/code/modules/research/designs/nanite_designs.dm deleted file mode 100644 index 36e028439b..0000000000 --- a/code/modules/research/designs/nanite_designs.dm +++ /dev/null @@ -1,534 +0,0 @@ -/datum/design/nanites - name = "None" - desc = "" - id = "default_nanites" - build_type = NANITE_COMPILER - construction_time = 50 - category = list() - research_icon = 'icons/obj/device.dmi' - research_icon_state = "nanite_program" - var/program_type = /datum/nanite_program - -////////////////////UTILITY NANITES////////////////////////////////////// - -/datum/design/nanites/metabolic_synthesis - name = "Metabolic Synthesis" - desc = "" - id = "metabolic_nanites" - program_type = /datum/nanite_program/metabolic_synthesis - category = list("Utility Nanites") - -/datum/design/nanites/viral - name = "Viral Replica" - desc = "" - id = "viral_nanites" - program_type = /datum/nanite_program/viral - category = list("Utility Nanites") - -/datum/design/nanites/research - name = "Distributed Computing" - desc = "" - id = "research_nanites" - program_type = /datum/nanite_program/research - category = list("Utility Nanites") - -/datum/design/nanites/researchplus - name = "Neural Network" - desc = "" - id = "researchplus_nanites" - program_type = /datum/nanite_program/researchplus - category = list("Utility Nanites") - -/datum/design/nanites/monitoring - name = "Monitoring" - desc = "" - id = "monitoring_nanites" - program_type = /datum/nanite_program/monitoring - category = list("Utility Nanites") - -/datum/design/nanites/self_scan - name = "Host Scan" - desc = "" - id = "selfscan_nanites" - program_type = /datum/nanite_program/triggered/self_scan - category = list("Utility Nanites") - -/datum/design/nanites/dermal_button - name = "Dermal Button" - desc = "" - id = "dermal_button_nanites" - program_type = /datum/nanite_program/dermal_button - category = list("Utility Nanites") - -/datum/design/nanites/stealth - name = "Stealth" - desc = "" - id = "stealth_nanites" - program_type = /datum/nanite_program/stealth - category = list("Utility Nanites") - -/datum/design/nanites/reduced_diagnostics - name = "Reduced Diagnostics" - desc = "Disables some high-cost diagnostics in the nanites, making them unable to communicate their program list to portable scanners. \ - Doing so saves some power, slightly increasing their replication speed." - id = "red_diag_nanites" - program_type = /datum/nanite_program/reduced_diagnostics - category = list("Utility Nanites") - -/datum/design/nanites/access - name = "Subdermal ID" - desc = "" - id = "access_nanites" - program_type = /datum/nanite_program/triggered/access - category = list("Utility Nanites") - -/datum/design/nanites/relay - name = "Relay" - desc = "" - id = "relay_nanites" - program_type = /datum/nanite_program/relay - category = list("Utility Nanites") - -/datum/design/nanites/repeater - name = "Signal Repeater" - desc = "" - id = "repeater_nanites" - program_type = /datum/nanite_program/sensor/repeat - category = list("Utility Nanites") - -/datum/design/nanites/relay_repeater - name = "Relay Signal Repeater" - desc = "" - id = "relay_repeater_nanites" - program_type = /datum/nanite_program/sensor/relay_repeat - category = list("Utility Nanites") - -/datum/design/nanites/emp - name = "Electromagnetic Resonance" - desc = "" - id = "emp_nanites" - program_type = /datum/nanite_program/triggered/emp - category = list("Utility Nanites") - -/datum/design/nanites/spreading - name = "Infective Exo-Locomotion" - desc = "The nanites gain the ability to survive for brief periods outside of the human body, as well as the ability to start new colonies without an integration process; \ - resulting in an extremely infective strain of nanites." - id = "spreading_nanites" - program_type = /datum/nanite_program/spreading - category = list("Utility Nanites") - -/datum/design/nanites/nanite_sting - name = "Nanite Sting" - desc = "" - id = "nanite_sting_nanites" - program_type = /datum/nanite_program/triggered/nanite_sting - category = list("Utility Nanites") - -/datum/design/nanites/mitosis - name = "Mitosis" - desc = "The nanites gain the ability to self-replicate, using bluespace to power the process, instead of drawing from a template. This rapidly speeds up the replication rate,\ - but it causes occasional software errors due to faulty copies. Not compatible with cloud sync." - id = "mitosis_nanites" - program_type = /datum/nanite_program/mitosis - category = list("Utility Nanites") - -////////////////////MEDICAL NANITES////////////////////////////////////// -/datum/design/nanites/regenerative - name = "Accelerated Regeneration" - desc = "" - id = "regenerative_nanites" - program_type = /datum/nanite_program/regenerative - category = list("Medical Nanites") - -/datum/design/nanites/regenerative_advanced - name = "Bio-Reconstruction" - desc = "The nanites manually repair and replace organic cells, acting much faster than normal regeneration. \ - However, this program cannot detect the difference between harmed and unharmed, causing it to consume nanites even if it has no effect." - id = "regenerative_plus_nanites" - program_type = /datum/nanite_program/regenerative_advanced - category = list("Medical Nanites") - -/datum/design/nanites/temperature - name = "Temperature Adjustment" - desc = "" - id = "temperature_nanites" - program_type = /datum/nanite_program/temperature - category = list("Medical Nanites") - -/datum/design/nanites/purging - name = "Blood Purification" - desc = "" - id = "purging_nanites" - program_type = /datum/nanite_program/purging - category = list("Medical Nanites") - -/datum/design/nanites/purging_advanced - name = "Selective Blood Purification" - desc = "The nanites purge toxins and dangerous chemicals from the host's bloodstream, while ignoring beneficial chemicals. \ - The added processing power required to analyze the chemicals severely increases the nanite consumption rate." - id = "purging_plus_nanites" - program_type = /datum/nanite_program/purging_advanced - category = list("Medical Nanites") - -/datum/design/nanites/brain_heal - name = "Neural Regeneration" - desc = "" - id = "brainheal_nanites" - program_type = /datum/nanite_program/brain_heal - category = list("Medical Nanites") - -/datum/design/nanites/brain_heal_advanced - name = "Neural Reimaging" - desc = "" - id = "brainheal_plus_nanites" - program_type = /datum/nanite_program/brain_heal_advanced - category = list("Medical Nanites") - -/datum/design/nanites/blood_restoring - name = "Blood Regeneration" - desc = "" - id = "bloodheal_nanites" - program_type = /datum/nanite_program/blood_restoring - category = list("Medical Nanites") - -/datum/design/nanites/repairing - name = "Mechanical Repair" - desc = "" - id = "repairing_nanites" - program_type = /datum/nanite_program/repairing - category = list("Medical Nanites") - -/datum/design/nanites/defib - name = "Defibrillation" - desc = "" - id = "defib_nanites" - program_type = /datum/nanite_program/triggered/defib - category = list("Medical Nanites") - - -////////////////////AUGMENTATION NANITES////////////////////////////////////// - -/datum/design/nanites/nervous - name = "Nerve Support" - desc = "" - id = "nervous_nanites" - program_type = /datum/nanite_program/nervous - category = list("Augmentation Nanites") - -/datum/design/nanites/hardening - name = "Dermal Hardening" - desc = "" - id = "hardening_nanites" - program_type = /datum/nanite_program/hardening - category = list("Augmentation Nanites") - -/datum/design/nanites/refractive - name = "Dermal Refractive Surface" - desc = "" - id = "refractive_nanites" - program_type = /datum/nanite_program/refractive - category = list("Augmentation Nanites") - -/datum/design/nanites/coagulating - name = "Rapid Coagulation" - desc = "" - id = "coagulating_nanites" - program_type = /datum/nanite_program/coagulating - category = list("Augmentation Nanites") - -/datum/design/nanites/conductive - name = "Electric Conduction" - desc = "" - id = "conductive_nanites" - program_type = /datum/nanite_program/conductive - category = list("Augmentation Nanites") - -/datum/design/nanites/adrenaline - name = "Adrenaline Burst" - desc = "" - id = "adrenaline_nanites" - program_type = /datum/nanite_program/triggered/adrenaline - category = list("Augmentation Nanites") - -/datum/design/nanites/mindshield - name = "Mental Barrier" - desc = "" - id = "mindshield_nanites" - program_type = /datum/nanite_program/mindshield - category = list("Augmentation Nanites") - -////////////////////DEFECTIVE NANITES////////////////////////////////////// - -/datum/design/nanites/glitch - name = "Glitch" - desc = "" - id = "glitch_nanites" - program_type = /datum/nanite_program/glitch - category = list("Defective Nanites") - -/datum/design/nanites/necrotic - name = "Necrosis" - desc = "" - id = "necrotic_nanites" - program_type = /datum/nanite_program/necrotic - category = list("Defective Nanites") - -/datum/design/nanites/toxic - name = "Toxin Buildup" - desc = "" - id = "toxic_nanites" - program_type = /datum/nanite_program/toxic - category = list("Defective Nanites") - -/datum/design/nanites/suffocating - name = "Hypoxemia" - desc = "" - id = "suffocating_nanites" - program_type = /datum/nanite_program/suffocating - category = list("Defective Nanites") - -/datum/design/nanites/brain_misfire - name = "Brain Misfire" - desc = "" - id = "brainmisfire_nanites" - program_type = /datum/nanite_program/brain_misfire - category = list("Defective Nanites") - -/datum/design/nanites/skin_decay - name = "Dermalysis" - desc = "" - id = "skindecay_nanites" - program_type = /datum/nanite_program/skin_decay - category = list("Defective Nanites") - -/datum/design/nanites/nerve_decay - name = "Nerve Decay" - desc = "" - id = "nervedecay_nanites" - program_type = /datum/nanite_program/nerve_decay - category = list("Defective Nanites") - -/datum/design/nanites/brain_decay - name = "Brain-Eating Nanites" - desc = "" - id = "braindecay_nanites" - program_type = /datum/nanite_program/brain_decay - category = list("Defective Nanites") - -////////////////////WEAPONIZED NANITES///////////////////////////////////// - -/datum/design/nanites/flesh_eating - name = "Cellular Breakdown" - desc = "" - id = "flesheating_nanites" - program_type = /datum/nanite_program/flesh_eating - category = list("Weaponized Nanites") - -/datum/design/nanites/poison - name = "Poisoning" - desc = "" - id = "poison_nanites" - program_type = /datum/nanite_program/poison - category = list("Weaponized Nanites") - -/datum/design/nanites/memory_leak - name = "Memory Leak" - desc = "" - id = "memleak_nanites" - program_type = /datum/nanite_program/memory_leak - category = list("Weaponized Nanites") - -/datum/design/nanites/aggressive_replication - name = "Aggressive Replication" - desc = "" - id = "aggressive_nanites" - program_type = /datum/nanite_program/aggressive_replication - category = list("Weaponized Nanites") - -/datum/design/nanites/meltdown - name = "Meltdown" - desc = "Causes an internal meltdown inside the nanites, causing internal burns inside the host as well as rapidly destroying the nanite population.\ - Sets the nanites' safety threshold to 0 when activated." - id = "meltdown_nanites" - program_type = /datum/nanite_program/meltdown - category = list("Weaponized Nanites") - -/datum/design/nanites/cryo - name = "Cryogenic Treatment" - desc = "" - id = "cryo_nanites" - program_type = /datum/nanite_program/cryo - category = list("Weaponized Nanites") - -/datum/design/nanites/pyro - name = "Sub-Dermal Combustion" - desc = "" - id = "pyro_nanites" - program_type = /datum/nanite_program/pyro - category = list("Weaponized Nanites") - -/datum/design/nanites/heart_stop - name = "Heart-Stopper" - desc = "" - id = "heartstop_nanites" - program_type = /datum/nanite_program/triggered/heart_stop - category = list("Weaponized Nanites") - -/datum/design/nanites/explosive - name = "Chain Detonation" - desc = "" - id = "explosive_nanites" - program_type = /datum/nanite_program/triggered/explosive - category = list("Weaponized Nanites") - -/datum/design/nanites/mind_control - name = "Mind Control" - desc = "" - id = "mindcontrol_nanites" - program_type = /datum/nanite_program/triggered/comm/mind_control - category = list("Weaponized Nanites") - -////////////////////SUPPRESSION NANITES////////////////////////////////////// - -/datum/design/nanites/shock - name = "Electric Shock" - desc = "" - id = "shock_nanites" - program_type = /datum/nanite_program/triggered/shocking - category = list("Suppression Nanites") - -/datum/design/nanites/stun - name = "Neural Shock" - desc = "" - id = "stun_nanites" - program_type = /datum/nanite_program/triggered/stun - category = list("Suppression Nanites") - -/datum/design/nanites/sleepy - name = "Sleep Induction" - desc = "" - id = "sleep_nanites" - program_type = /datum/nanite_program/triggered/sleepy - category = list("Suppression Nanites") - -/datum/design/nanites/paralyzing - name = "Paralysis" - desc = "" - id = "paralyzing_nanites" - program_type = /datum/nanite_program/paralyzing - category = list("Suppression Nanites") - -/datum/design/nanites/fake_death - name = "Death Simulation" - desc = "" - id = "fakedeath_nanites" - program_type = /datum/nanite_program/fake_death - category = list("Suppression Nanites") - -/datum/design/nanites/pacifying - name = "Pacification" - desc = "" - id = "pacifying_nanites" - program_type = /datum/nanite_program/pacifying - category = list("Suppression Nanites") - -/datum/design/nanites/blinding - name = "Blindness" - desc = "" - id = "blinding_nanites" - program_type = /datum/nanite_program/blinding - category = list("Suppression Nanites") - -/datum/design/nanites/mute - name = "Mute" - desc = "" - id = "mute_nanites" - program_type = /datum/nanite_program/mute - category = list("Suppression Nanites") - -/datum/design/nanites/voice - name = "Skull Echo" - desc = "" - id = "voice_nanites" - program_type = /datum/nanite_program/triggered/comm/voice - category = list("Suppression Nanites") - -/datum/design/nanites/speech - name = "Forced Speech" - desc = "" - id = "speech_nanites" - program_type = /datum/nanite_program/triggered/comm/speech - category = list("Suppression Nanites") - -/datum/design/nanites/hallucination - name = "Hallucination" - desc = "" - id = "hallucination_nanites" - program_type = /datum/nanite_program/triggered/comm/hallucination - category = list("Suppression Nanites") - -/datum/design/nanites/good_mood - name = "Happiness Enhancer" - desc = "" - id = "good_mood_nanites" - program_type = /datum/nanite_program/good_mood - category = list("Suppression Nanites") - -/datum/design/nanites/bad_mood - name = "Happiness Suppressor" - desc = "" - id = "bad_mood_nanites" - program_type = /datum/nanite_program/bad_mood - category = list("Suppression Nanites") - -////////////////////SENSOR NANITES////////////////////////////////////// - -/datum/design/nanites/sensor_health - name = "Health Sensor" - desc = "" - id = "sensor_health_nanites" - program_type = /datum/nanite_program/sensor/health - category = list("Sensor Nanites") - -/datum/design/nanites/sensor_damage - name = "Damage Sensor" - desc = "" - id = "sensor_damage_nanites" - program_type = /datum/nanite_program/sensor/damage - category = list("Sensor Nanites") - -/datum/design/nanites/sensor_crit - name = "Critical Health Sensor" - desc = "" - id = "sensor_crit_nanites" - program_type = /datum/nanite_program/sensor/crit - category = list("Sensor Nanites") - -/datum/design/nanites/sensor_death - name = "Death Sensor" - desc = "" - id = "sensor_death_nanites" - program_type = /datum/nanite_program/sensor/death - category = list("Sensor Nanites") - -/datum/design/nanites/sensor_voice - name = "Voice Sensor" - desc = "" - id = "sensor_voice_nanites" - program_type = /datum/nanite_program/sensor/voice - category = list("Sensor Nanites") - -/datum/design/nanites/sensor_nanite_volume - name = "Nanite Volume Sensor" - desc = "" - id = "sensor_nanite_volume" - program_type = /datum/nanite_program/sensor/nanite_volume - category = list("Sensor Nanites") - -/datum/design/nanites/sensor_species - name = "Species Sensor" - desc = "" - id = "sensor_species_nanites" - program_type = /datum/nanite_program/sensor/species - category = list("Sensor Nanites") diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm deleted file mode 100644 index d3ef94daf8..0000000000 --- a/code/modules/research/designs/power_designs.dm +++ /dev/null @@ -1,100 +0,0 @@ -//////////////////////////////////////// -//////////////////Power///////////////// -//////////////////////////////////////// - -/datum/design/basic_cell - name = "Basic Power Cell" - desc = "" - id = "basic_cell" - build_type = PROTOLATHE | AUTOLATHE |MECHFAB - materials = list(/datum/material/iron = 700, /datum/material/glass = 50) - construction_time=100 - build_path = /obj/item/stock_parts/cell/empty - category = list("Misc","Power Designs","Machinery","initial") - departmental_flags = DEPARTMENTAL_FLAG_ALL - -/datum/design/high_cell - name = "High-Capacity Power Cell" - desc = "" - id = "high_cell" - build_type = PROTOLATHE | AUTOLATHE | MECHFAB - materials = list(/datum/material/iron = 700, /datum/material/glass = 60) - construction_time=100 - build_path = /obj/item/stock_parts/cell/high/empty - category = list("Misc","Power Designs") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/super_cell - name = "Super-Capacity Power Cell" - desc = "" - id = "super_cell" - build_type = PROTOLATHE | MECHFAB - materials = list(/datum/material/iron = 700, /datum/material/glass = 70) - construction_time=100 - build_path = /obj/item/stock_parts/cell/super/empty - category = list("Misc","Power Designs") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/hyper_cell - name = "Hyper-Capacity Power Cell" - desc = "" - id = "hyper_cell" - build_type = PROTOLATHE | MECHFAB - materials = list(/datum/material/iron = 700, /datum/material/gold = 150, /datum/material/silver = 150, /datum/material/glass = 80) - construction_time=100 - build_path = /obj/item/stock_parts/cell/hyper/empty - category = list("Misc","Power Designs") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/bluespace_cell - name = "Bluespace Power Cell" - desc = "" - id = "bluespace_cell" - build_type = PROTOLATHE | MECHFAB - materials = list(/datum/material/iron = 800, /datum/material/gold = 120, /datum/material/glass = 160, /datum/material/diamond = 160, /datum/material/titanium = 300, /datum/material/bluespace = 100) - construction_time=100 - build_path = /obj/item/stock_parts/cell/bluespace/empty - category = list("Misc","Power Designs") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/light_replacer - name = "Light Replacer" - desc = "" - id = "light_replacer" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 1500, /datum/material/silver = 150, /datum/material/glass = 3000) - build_path = /obj/item/lightreplacer - category = list("Power Designs") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/inducer - name = "Inducer" - desc = "" - id = "inducer" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 3000, /datum/material/glass = 1000) - build_path = /obj/item/inducer/sci - category = list("Power Designs") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/board/pacman - name = "Machine Design (PACMAN-type Generator Board)" - desc = "" - id = "pacman" - build_path = /obj/item/circuitboard/machine/pacman - category = list("Engineering Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/board/pacman/super - name = "Machine Design (SUPERPACMAN-type Generator Board)" - desc = "" - id = "superpacman" - build_path = /obj/item/circuitboard/machine/pacman/super - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/board/pacman/mrs - name = "Machine Design (MRSPACMAN-type Generator Board)" - desc = "" - id = "mrspacman" - build_path = /obj/item/circuitboard/machine/pacman/mrs - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING diff --git a/code/modules/research/designs/smelting_designs.dm b/code/modules/research/designs/smelting_designs.dm deleted file mode 100644 index 617ef4b1ae..0000000000 --- a/code/modules/research/designs/smelting_designs.dm +++ /dev/null @@ -1,72 +0,0 @@ -///////SMELTABLE ALLOYS/////// - -/datum/design/plasteel_alloy - name = "Plasma + Iron alloy" - id = "plasteel" - build_type = SMELTER | PROTOLATHE - materials = list(/datum/material/iron = MINERAL_MATERIAL_AMOUNT, /datum/material/plasma = MINERAL_MATERIAL_AMOUNT) - build_path = /obj/item/stack/sheet/plasteel - category = list("initial", "Stock Parts") - departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - maxstack = 50 - - -/datum/design/plastitanium_alloy - name = "Plasma + Titanium alloy" - id = "plastitanium" - build_type = SMELTER | PROTOLATHE - materials = list(/datum/material/titanium = MINERAL_MATERIAL_AMOUNT, /datum/material/plasma = MINERAL_MATERIAL_AMOUNT) - build_path = /obj/item/stack/sheet/mineral/plastitanium - category = list("initial", "Stock Parts") - departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - maxstack = 50 - -/datum/design/plaglass_alloy - name = "Plasma + Glass alloy" - id = "plasmaglass" - build_type = SMELTER | PROTOLATHE - materials = list(/datum/material/plasma = MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass = MINERAL_MATERIAL_AMOUNT) - build_path = /obj/item/stack/sheet/plasmaglass - category = list("initial", "Stock Parts") - departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - maxstack = 50 - -/datum/design/plasmarglass_alloy - name = "Plasma + Metal + Glass alloy" - id = "plasmareinforcedglass" - build_type = SMELTER | PROTOLATHE - materials = list(/datum/material/plasma = MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/iron = MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass = MINERAL_MATERIAL_AMOUNT) - build_path = /obj/item/stack/sheet/plasmarglass - category = list("initial", "Stock Parts") - departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - maxstack = 50 - -/datum/design/titaniumglass_alloy - name = "Titanium + Glass alloy" - id = "titaniumglass" - build_type = SMELTER | PROTOLATHE - materials = list(/datum/material/titanium = MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass = MINERAL_MATERIAL_AMOUNT) - build_path = /obj/item/stack/sheet/titaniumglass - category = list("initial", "Stock Parts") - departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - maxstack = 50 - -/datum/design/plastitaniumglass_alloy - name = "Plasma + Titanium + Glass alloy" - id = "plastitaniumglass" - build_type = SMELTER | PROTOLATHE - materials = list(/datum/material/plasma = MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/titanium = MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass = MINERAL_MATERIAL_AMOUNT) - build_path = /obj/item/stack/sheet/plastitaniumglass - category = list("initial", "Stock Parts") - departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - maxstack = 50 - -/datum/design/alienalloy - name = "Alien Alloy" - desc = "" - id = "alienalloy" - build_type = PROTOLATHE | SMELTER - materials = list(/datum/material/iron = 4000, /datum/material/plasma = 4000) - build_path = /obj/item/stack/sheet/mineral/abductor - category = list("Stock Parts") - departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING diff --git a/code/modules/research/designs/stock_parts_designs.dm b/code/modules/research/designs/stock_parts_designs.dm deleted file mode 100644 index 72c3fd0e69..0000000000 --- a/code/modules/research/designs/stock_parts_designs.dm +++ /dev/null @@ -1,318 +0,0 @@ -//////////////////////////////////////// -/////////////Stock Parts//////////////// -//////////////////////////////////////// - -/datum/design/RPED - name = "Rapid Part Exchange Device" - desc = "" - id = "rped" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 10000, /datum/material/glass = 5000) //hardcore - build_path = /obj/item/storage/part_replacer - category = list("Stock Parts") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/BS_RPED - name = "Bluespace RPED" - desc = "" - id = "bs_rped" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 15000, /datum/material/glass = 5000, /datum/material/silver = 2500) //hardcore - build_path = /obj/item/storage/part_replacer/bluespace - category = list("Stock Parts") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -//Capacitors -/datum/design/basic_capacitor - name = "Basic Capacitor" - desc = "" - id = "basic_capacitor" - build_type = PROTOLATHE | AUTOLATHE - materials = list(/datum/material/iron = 100, /datum/material/glass = 100) - build_path = /obj/item/stock_parts/capacitor - category = list("Stock Parts","Machinery","initial") - lathe_time_factor = 0.2 - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/adv_capacitor - name = "Advanced Capacitor" - desc = "" - id = "adv_capacitor" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 150, /datum/material/glass = 150) - build_path = /obj/item/stock_parts/capacitor/adv - category = list("Stock Parts") - lathe_time_factor = 0.2 - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/super_capacitor - name = "Super Capacitor" - desc = "" - id = "super_capacitor" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 200, /datum/material/glass = 200, /datum/material/gold = 100) - build_path = /obj/item/stock_parts/capacitor/super - category = list("Stock Parts") - lathe_time_factor = 0.2 - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/quadratic_capacitor - name = "Quadratic Capacitor" - desc = "" - id = "quadratic_capacitor" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 200, /datum/material/glass = 200, /datum/material/gold = 100, /datum/material/diamond = 100) - build_path = /obj/item/stock_parts/capacitor/quadratic - category = list("Stock Parts") - lathe_time_factor = 0.2 - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -//Scanning modules -/datum/design/basic_scanning - name = "Basic Scanning Module" - desc = "" - id = "basic_scanning" - build_type = PROTOLATHE | AUTOLATHE - materials = list(/datum/material/iron = 100, /datum/material/glass = 50) - build_path = /obj/item/stock_parts/scanning_module - category = list("Stock Parts","Machinery","initial") - lathe_time_factor = 0.2 - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/adv_scanning - name = "Advanced Scanning Module" - desc = "" - id = "adv_scanning" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 150, /datum/material/glass = 100) - build_path = /obj/item/stock_parts/scanning_module/adv - category = list("Stock Parts") - lathe_time_factor = 0.2 - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/phasic_scanning - name = "Phasic Scanning Module" - desc = "" - id = "phasic_scanning" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 200, /datum/material/glass = 150, /datum/material/silver = 60) - build_path = /obj/item/stock_parts/scanning_module/phasic - category = list("Stock Parts") - lathe_time_factor = 0.2 - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/triphasic_scanning - name = "Triphasic Scanning Module" - desc = "" - id = "triphasic_scanning" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 200, /datum/material/glass = 200, /datum/material/diamond = 30, /datum/material/bluespace = 30) - build_path = /obj/item/stock_parts/scanning_module/triphasic - category = list("Stock Parts") - lathe_time_factor = 0.2 - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -//Maipulators -/datum/design/micro_mani - name = "Micro Manipulator" - desc = "" - id = "micro_mani" - build_type = PROTOLATHE | AUTOLATHE - materials = list(/datum/material/iron = 100) - build_path = /obj/item/stock_parts/manipulator - category = list("Stock Parts","Machinery","initial") - lathe_time_factor = 0.2 - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/nano_mani - name = "Nano Manipulator" - desc = "" - id = "nano_mani" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 150) - build_path = /obj/item/stock_parts/manipulator/nano - category = list("Stock Parts") - lathe_time_factor = 0.2 - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/pico_mani - name = "Pico Manipulator" - desc = "" - id = "pico_mani" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 200) - build_path = /obj/item/stock_parts/manipulator/pico - category = list("Stock Parts") - lathe_time_factor = 0.2 - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/femto_mani - name = "Femto Manipulator" - desc = "" - id = "femto_mani" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 200, /datum/material/diamond = 30, /datum/material/titanium = 30) - build_path = /obj/item/stock_parts/manipulator/femto - category = list("Stock Parts") - lathe_time_factor = 0.2 - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -//Micro-lasers -/datum/design/basic_micro_laser - name = "Basic Micro-Laser" - desc = "" - id = "basic_micro_laser" - build_type = PROTOLATHE | AUTOLATHE - materials = list(/datum/material/iron = 100, /datum/material/glass = 50) - build_path = /obj/item/stock_parts/micro_laser - category = list("Stock Parts","Machinery","initial") - lathe_time_factor = 0.2 - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/high_micro_laser - name = "High-Power Micro-Laser" - desc = "" - id = "high_micro_laser" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 150, /datum/material/glass = 100) - build_path = /obj/item/stock_parts/micro_laser/high - category = list("Stock Parts") - lathe_time_factor = 0.2 - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/ultra_micro_laser - name = "Ultra-High-Power Micro-Laser" - desc = "" - id = "ultra_micro_laser" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 200, /datum/material/glass = 150, /datum/material/uranium = 60) - build_path = /obj/item/stock_parts/micro_laser/ultra - category = list("Stock Parts") - lathe_time_factor = 0.2 - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/quadultra_micro_laser - name = "Quad-Ultra Micro-Laser" - desc = "" - id = "quadultra_micro_laser" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 200, /datum/material/glass = 200, /datum/material/uranium = 100, /datum/material/diamond = 60) - build_path = /obj/item/stock_parts/micro_laser/quadultra - category = list("Stock Parts") - lathe_time_factor = 0.2 - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/basic_matter_bin - name = "Basic Matter Bin" - desc = "" - id = "basic_matter_bin" - build_type = PROTOLATHE | AUTOLATHE - materials = list(/datum/material/iron = 100) - build_path = /obj/item/stock_parts/matter_bin - category = list("Stock Parts","Machinery","initial") - lathe_time_factor = 0.2 - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/adv_matter_bin - name = "Advanced Matter Bin" - desc = "" - id = "adv_matter_bin" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 150) - build_path = /obj/item/stock_parts/matter_bin/adv - category = list("Stock Parts") - lathe_time_factor = 0.2 - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/super_matter_bin - name = "Super Matter Bin" - desc = "" - id = "super_matter_bin" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 200) - build_path = /obj/item/stock_parts/matter_bin/super - category = list("Stock Parts") - lathe_time_factor = 0.2 - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/bluespace_matter_bin - name = "Bluespace Matter Bin" - desc = "" - id = "bluespace_matter_bin" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 250, /datum/material/diamond = 100, /datum/material/bluespace = 100) - build_path = /obj/item/stock_parts/matter_bin/bluespace - category = list("Stock Parts") - lathe_time_factor = 0.2 - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -//T-Comms devices -/datum/design/subspace_ansible - name = "Subspace Ansible" - desc = "" - id = "s-ansible" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 100, /datum/material/silver = 100) - build_path = /obj/item/stock_parts/subspace/ansible - category = list("Stock Parts") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/hyperwave_filter - name = "Hyperwave Filter" - desc = "" - id = "s-filter" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 100, /datum/material/silver = 100) - build_path = /obj/item/stock_parts/subspace/filter - category = list("Stock Parts") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/subspace_amplifier - name = "Subspace Amplifier" - desc = "" - id = "s-amplifier" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 100, /datum/material/gold = 100, /datum/material/uranium = 100) - build_path = /obj/item/stock_parts/subspace/amplifier - category = list("Stock Parts") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/subspace_treatment - name = "Subspace Treatment Disk" - desc = "" - id = "s-treatment" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 100, /datum/material/silver = 200) - build_path = /obj/item/stock_parts/subspace/treatment - category = list("Stock Parts") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/subspace_analyzer - name = "Subspace Analyzer" - desc = "" - id = "s-analyzer" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 100, /datum/material/gold = 100) - build_path = /obj/item/stock_parts/subspace/analyzer - category = list("Stock Parts") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/subspace_crystal - name = "Ansible Crystal" - desc = "" - id = "s-crystal" - build_type = PROTOLATHE - materials = list(/datum/material/glass = 800, /datum/material/silver = 100, /datum/material/gold = 100) - build_path = /obj/item/stock_parts/subspace/crystal - category = list("Stock Parts") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/subspace_transmitter - name = "Subspace Transmitter" - desc = "" - id = "s-transmitter" - build_type = PROTOLATHE - materials = list(/datum/material/glass = 100, /datum/material/silver = 100, /datum/material/uranium = 100) - build_path = /obj/item/stock_parts/subspace/transmitter - category = list("Stock Parts") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE diff --git a/code/modules/research/designs/telecomms_designs.dm b/code/modules/research/designs/telecomms_designs.dm deleted file mode 100644 index 87142cc3f8..0000000000 --- a/code/modules/research/designs/telecomms_designs.dm +++ /dev/null @@ -1,67 +0,0 @@ -/////////////////////////////////// -/////Subspace Telecomms//////////// -/////////////////////////////////// - -/datum/design/board/subspace_receiver - name = "Machine Design (Subspace Receiver)" - desc = "" - id = "s-receiver" - build_path = /obj/item/circuitboard/machine/telecomms/receiver - category = list("Subspace Telecomms") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/telecomms_bus - name = "Machine Design (Bus Mainframe)" - desc = "" - id = "s-bus" - build_path = /obj/item/circuitboard/machine/telecomms/bus - category = list("Subspace Telecomms") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/telecomms_hub - name = "Machine Design (Hub Mainframe)" - desc = "" - id = "s-hub" - build_path = /obj/item/circuitboard/machine/telecomms/hub - category = list("Subspace Telecomms") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/telecomms_relay - name = "Machine Design (Relay Mainframe)" - desc = "" - id = "s-relay" - build_path = /obj/item/circuitboard/machine/telecomms/relay - category = list("Subspace Telecomms") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/telecomms_processor - name = "Machine Design (Processor Unit)" - desc = "" - id = "s-processor" - build_path = /obj/item/circuitboard/machine/telecomms/processor - category = list("Subspace Telecomms") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/telecomms_server - name = "Machine Design (Server Mainframe)" - desc = "" - id = "s-server" - build_path = /obj/item/circuitboard/machine/telecomms/server - category = list("Subspace Telecomms") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/telecomms_messaging - name = "Machine Design (Messaging Server)" - desc = "" - id = "s-messaging" - build_path = /obj/item/circuitboard/machine/telecomms/message_server - category = list("Subspace Telecomms") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/subspace_broadcaster - name = "Machine Design (Subspace Broadcaster)" - desc = "" - id = "s-broadcaster" - build_path = /obj/item/circuitboard/machine/telecomms/broadcaster - category = list("Subspace Telecomms") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE diff --git a/code/modules/research/designs/tool_designs.dm b/code/modules/research/designs/tool_designs.dm deleted file mode 100644 index f03cedaaa8..0000000000 --- a/code/modules/research/designs/tool_designs.dm +++ /dev/null @@ -1,204 +0,0 @@ - -///////////////////////////////////////// -/////////////////Tools/////////////////// -///////////////////////////////////////// - -/datum/design/handdrill - name = "Hand Drill" - desc = "" - id = "handdrill" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 3500, /datum/material/silver = 1500, /datum/material/titanium = 2500) - build_path = /obj/item/screwdriver/power - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/jawsoflife - name = "Jaws of Life" - desc = "" - id = "jawsoflife" // added one more requirment since the Jaws of Life are a bit OP - build_path = /obj/item/crowbar/power - build_type = PROTOLATHE - materials = list(/datum/material/iron = 4500, /datum/material/silver = 2500, /datum/material/titanium = 3500) - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/exwelder - name = "Experimental Welding Tool" - desc = "" - id = "exwelder" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 1000, /datum/material/glass = 500, /datum/material/plasma = 1500, /datum/material/uranium = 200) - build_path = /obj/item/weldingtool/experimental - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING - - -/datum/design/rcd_loaded - name = "Rapid Construction Device" - desc = "" - id = "rcd_loaded" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 60000, /datum/material/glass = 5000) // costs more than what it did in the autolathe, this one comes loaded. - build_path = /obj/item/construction/rcd/loaded - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_CARGO - - -/datum/design/rcd_upgrade/frames - name = "RCD frames designs upgrade" - desc = "" - id = "rcd_upgrade_frames" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/glass = 2500, /datum/material/silver = 1500, /datum/material/titanium = 2000) - build_path = /obj/item/rcd_upgrade/frames - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/rcd_upgrade/simple_circuits - name = "RCD simple circuits designs upgrade" - desc = "" - id = "rcd_upgrade_simple_circuits" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/glass = 2500, /datum/material/silver = 1500, /datum/material/titanium = 2000) - build_path = /obj/item/rcd_upgrade/simple_circuits - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/rcd_upgrade/silo_link - name = "Advanced RCD silo link upgrade" - desc = "" - id = "rcd_upgrade_silo_link" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2500, /datum/material/glass = 2500, /datum/material/silver = 2500, /datum/material/titanium = 2500, /datum/material/bluespace = 2500) - build_path = /obj/item/rcd_upgrade/silo_link - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -///////////////////////////////////////// -//////////////Alien Tools//////////////// -///////////////////////////////////////// - -/datum/design/alienwrench - name = "Alien Wrench" - desc = "" - id = "alien_wrench" - build_path = /obj/item/wrench/abductor - build_type = PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/silver = 2500, /datum/material/plasma = 1000, /datum/material/titanium = 2000, /datum/material/diamond = 2000) - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/alienwirecutters - name = "Alien Wirecutters" - desc = "" - id = "alien_wirecutters" - build_path = /obj/item/wirecutters/abductor - build_type = PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/silver = 2500, /datum/material/plasma = 1000, /datum/material/titanium = 2000, /datum/material/diamond = 2000) - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/alienscrewdriver - name = "Alien Screwdriver" - desc = "" - id = "alien_screwdriver" - build_path = /obj/item/screwdriver/abductor - build_type = PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/silver = 2500, /datum/material/plasma = 1000, /datum/material/titanium = 2000, /datum/material/diamond = 2000) - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/aliencrowbar - name = "Alien Crowbar" - desc = "" - id = "alien_crowbar" - build_path = /obj/item/crowbar/abductor - build_type = PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/silver = 2500, /datum/material/plasma = 1000, /datum/material/titanium = 2000, /datum/material/diamond = 2000) - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/alienwelder - name = "Alien Welding Tool" - desc = "" - id = "alien_welder" - build_path = /obj/item/weldingtool/abductor - build_type = PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/silver = 2500, /datum/material/plasma = 5000, /datum/material/titanium = 2000, /datum/material/diamond = 2000) - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/alienmultitool - name = "Alien Multitool" - desc = "" - id = "alien_multitool" - build_path = /obj/item/multitool/abductor - build_type = PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/silver = 2500, /datum/material/plasma = 5000, /datum/material/titanium = 2000, /datum/material/diamond = 2000) - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -///////////////////////////////////////// -/////////Alien Surgical Tools//////////// -///////////////////////////////////////// - -/datum/design/alienscalpel - name = "Alien Scalpel" - desc = "" - id = "alien_scalpel" - build_path = /obj/item/scalpel/alien - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2000, /datum/material/silver = 1500, /datum/material/plasma = 500, /datum/material/titanium = 1500) - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/alienhemostat - name = "Alien Hemostat" - desc = "" - id = "alien_hemostat" - build_path = /obj/item/hemostat/alien - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2000, /datum/material/silver = 1500, /datum/material/plasma = 500, /datum/material/titanium = 1500) - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/alienretractor - name = "Alien Retractor" - desc = "" - id = "alien_retractor" - build_path = /obj/item/retractor/alien - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2000, /datum/material/silver = 1500, /datum/material/plasma = 500, /datum/material/titanium = 1500) - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/aliensaw - name = "Alien Circular Saw" - desc = "" - id = "alien_saw" - build_path = /obj/item/circular_saw/alien - build_type = PROTOLATHE - materials = list(/datum/material/iron = 10000, /datum/material/silver = 2500, /datum/material/plasma = 1000, /datum/material/titanium = 1500) - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/aliendrill - name = "Alien Drill" - desc = "" - id = "alien_drill" - build_path = /obj/item/surgicaldrill/alien - build_type = PROTOLATHE - materials = list(/datum/material/iron = 10000, /datum/material/silver = 2500, /datum/material/plasma = 1000, /datum/material/titanium = 1500) - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/aliencautery - name = "Alien Cautery" - desc = "" - id = "alien_cautery" - build_path = /obj/item/cautery/alien - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2000, /datum/material/silver = 1500, /datum/material/plasma = 500, /datum/material/titanium = 1500) - category = list("Tool Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm deleted file mode 100644 index 93c8f7ee88..0000000000 --- a/code/modules/research/designs/weapon_designs.dm +++ /dev/null @@ -1,344 +0,0 @@ -///////////////////////////////////////// -/////////////////Weapons///////////////// -///////////////////////////////////////// - -/datum/design/c38/sec - id = "sec_38" - build_type = PROTOLATHE - category = list("Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/c38_trac - name = "Speed Loader (.38 TRAC)" - desc = "" - id = "c38_trac" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 20000, /datum/material/silver = 5000, /datum/material/gold = 1000) - build_path = /obj/item/ammo_box/c38/trac - category = list("Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/c38_hotshot - name = "Speed Loader (.38 Hot Shot)" - desc = "" - id = "c38_hotshot" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 20000, /datum/material/plasma = 5000) - build_path = /obj/item/ammo_box/c38/hotshot - category = list("Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/c38_iceblox - name = "Speed Loader (.38 Iceblox)" - desc = "" - id = "c38_iceblox" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 20000, /datum/material/plasma = 5000) - build_path = /obj/item/ammo_box/c38/iceblox - category = list("Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/rubbershot/sec - id = "sec_rshot" - build_type = PROTOLATHE - category = list("Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/beanbag_slug/sec - id = "sec_beanbag_slug" - build_type = PROTOLATHE - category = list("Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/shotgun_slug/sec - id = "sec_slug" - build_type = PROTOLATHE - category = list("Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/buckshot_shell/sec - id = "sec_bshot" - build_type = PROTOLATHE - category = list("Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/shotgun_dart/sec - id = "sec_dart" - build_type = PROTOLATHE - category = list("Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/incendiary_slug/sec - id = "sec_Islug" - build_type = PROTOLATHE - category = list("Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/pin_testing - name = "Test-Range Firing Pin" - desc = "" - id = "pin_testing" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 300) - build_path = /obj/item/firing_pin/test_range - category = list("Firing Pins") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/pin_mindshield - name = "Mindshield Firing Pin" - desc = "" - id = "pin_loyalty" - build_type = PROTOLATHE - materials = list(/datum/material/silver = 600, /datum/material/diamond = 600, /datum/material/uranium = 200) - build_path = /obj/item/firing_pin/implant/mindshield - category = list("Firing Pins") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/stunrevolver - name = "Tesla Revolver" - desc = "" - id = "stunrevolver" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 10000, /datum/material/glass = 10000, /datum/material/silver = 10000) - build_path = /obj/item/gun/energy/tesla_revolver - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/nuclear_gun - name = "Advanced Energy Gun" - desc = "" - id = "nuclear_gun" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 10000, /datum/material/glass = 2000, /datum/material/uranium = 3000, /datum/material/titanium = 1000) - build_path = /obj/item/gun/energy/e_gun/nuclear - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/tele_shield - name = "Telescopic Riot Shield" - desc = "" - id = "tele_shield" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 4000, /datum/material/glass = 4000, /datum/material/silver = 300, /datum/material/titanium = 200) - build_path = /obj/item/shield/riot/tele - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/beamrifle - name = "Beam Marksman Rifle" - desc = "" - id = "beamrifle" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 10000, /datum/material/glass = 5000, /datum/material/diamond = 5000, /datum/material/uranium = 8000, /datum/material/silver = 4500, /datum/material/gold = 5000) - build_path = /obj/item/gun/energy/beam_rifle - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/decloner - name = "Decloner" - desc = "" - id = "decloner" - build_type = PROTOLATHE - materials = list(/datum/material/gold = 5000,/datum/material/uranium = 10000) - reagents_list = list(/datum/reagent/toxin/mutagen = 40) - build_path = /obj/item/gun/energy/decloner - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/rapidsyringe - name = "Rapid Syringe Gun" - desc = "" - id = "rapidsyringe" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/glass = 1000) - build_path = /obj/item/gun/syringe/rapidsyringe - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL //uwu - -/datum/design/temp_gun - name = "Temperature Gun" - desc = ""//Change it if you want - id = "temp_gun" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/glass = 500, /datum/material/silver = 3000) - build_path = /obj/item/gun/energy/temperature - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/flora_gun - name = "Floral Somatoray" - desc = "" - id = "flora_gun" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2000, /datum/material/glass = 500) - reagents_list = list(/datum/reagent/uranium/radium = 20) - build_path = /obj/item/gun/energy/floragun - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE - -/datum/design/large_grenade - name = "Large Grenade" - desc = "" - id = "large_Grenade" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 3000) - build_path = /obj/item/grenade/chem_grenade/large - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/pyro_grenade - name = "Pyro Grenade" - desc = "" - id = "pyro_Grenade" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2000, /datum/material/plasma = 500) - build_path = /obj/item/grenade/chem_grenade/pyro - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cryo_grenade - name = "Cryo Grenade" - desc = "" - id = "cryo_Grenade" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2000, /datum/material/silver = 500) - build_path = /obj/item/grenade/chem_grenade/cryo - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/adv_grenade - name = "Advanced Release Grenade" - desc = "" - id = "adv_Grenade" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 3000, /datum/material/glass = 500) - build_path = /obj/item/grenade/chem_grenade/adv_release - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/xray - name = "X-ray Laser Gun" - desc = "" - id = "xray_laser" - build_type = PROTOLATHE - materials = list(/datum/material/gold = 5000, /datum/material/uranium = 4000, /datum/material/iron = 5000, /datum/material/titanium = 2000, /datum/material/bluespace = 2000) - build_path = /obj/item/gun/energy/xray - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/ioncarbine - name = "Ion Carbine" - desc = "" - id = "ioncarbine" - build_type = PROTOLATHE - materials = list(/datum/material/silver = 6000, /datum/material/iron = 8000, /datum/material/uranium = 2000) - build_path = /obj/item/gun/energy/ionrifle/carbine - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/wormhole_projector - name = "Bluespace Wormhole Projector" - desc = "" - id = "wormholeprojector" - build_type = PROTOLATHE - materials = list(/datum/material/silver = 2000, /datum/material/iron = 5000, /datum/material/diamond = 2000, /datum/material/bluespace = 3000) - build_path = /obj/item/gun/energy/wormhole_projector - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -//WT550 Mags - -/datum/design/mag_oldsmg - name = "WT-550 Auto Gun Magazine (4.6x30mm)" - desc = "" - id = "mag_oldsmg" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 4000) - build_path = /obj/item/ammo_box/magazine/wt550m9 - category = list("Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/mag_oldsmg/ap_mag - name = "WT-550 Auto Gun Armour Piercing Magazine (4.6x30mm AP)" - desc = "" - id = "mag_oldsmg_ap" - materials = list(/datum/material/iron = 6000, /datum/material/silver = 600) - build_path = /obj/item/ammo_box/magazine/wt550m9/wtap - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/mag_oldsmg/ic_mag - name = "WT-550 Auto Gun Incendiary Magazine (4.6x30mm IC)" - desc = "" - id = "mag_oldsmg_ic" - materials = list(/datum/material/iron = 6000, /datum/material/silver = 600, /datum/material/glass = 1000) - build_path = /obj/item/ammo_box/magazine/wt550m9/wtic - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/stunshell - name = "Stun Shell" - desc = "" - id = "stunshell" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 200) - build_path = /obj/item/ammo_casing/shotgun/stunslug - category = list("Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/techshell - name = "Unloaded Technological Shotshell" - desc = "" - id = "techshotshell" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 1000, /datum/material/glass = 200) - build_path = /obj/item/ammo_casing/shotgun/techshell - category = list("Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/suppressor - name = "Suppressor" - desc = "" - id = "suppressor" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 2000, /datum/material/silver = 500) - build_path = /obj/item/suppressor - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/gravitygun - name = "One-point Bluespace-gravitational Manipulator" - desc = "" - id = "gravitygun" - build_type = PROTOLATHE - materials = list(/datum/material/silver = 8000, /datum/material/uranium = 8000, /datum/material/glass = 12000, /datum/material/iron = 12000, /datum/material/diamond = 3000, /datum/material/bluespace = 3000) - build_path = /obj/item/gun/energy/gravity_gun - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/largecrossbow - name = "Energy Crossbow" - desc = "" - id = "largecrossbow" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 5000, /datum/material/glass = 1500, /datum/material/uranium = 1500, /datum/material/silver = 1500) - build_path = /obj/item/gun/energy/kinetic_accelerator/crossbow/large - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/cryostasis_shotgun_dart - name = "Cryostasis Shotgun Dart" - desc = "" - id = "shotgundartcryostasis" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 3500) - build_path = /obj/item/ammo_casing/shotgun/dart/noreact - category = list("Ammo") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cleric_mace - name = "Cleric Mace" - desc = "" - id = "cleric_mace" - build_type = AUTOLATHE - materials = list(MAT_CATEGORY_RIGID = 12000) - build_path = /obj/item/melee/cleric_mace - category = list("Imported") diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm deleted file mode 100644 index a1539d4353..0000000000 --- a/code/modules/research/destructive_analyzer.dm +++ /dev/null @@ -1,154 +0,0 @@ - - -/* -Destructive Analyzer - -It is used to destroy hand-held objects and advance technological research. Controls are in the linked R&D console. - -Note: Must be placed within 3 tiles of the R&D Console -*/ -/obj/machinery/rnd/destructive_analyzer - name = "destructive analyzer" - desc = "" - icon_state = "d_analyzer" - circuit = /obj/item/circuitboard/machine/destructive_analyzer - var/decon_mod = 0 - -/obj/machinery/rnd/destructive_analyzer/RefreshParts() - var/T = 0 - for(var/obj/item/stock_parts/S in component_parts) - T += S.rating - decon_mod = T - - -/obj/machinery/rnd/destructive_analyzer/proc/ConvertReqString2List(list/source_list) - var/list/temp_list = params2list(source_list) - for(var/O in temp_list) - temp_list[O] = text2num(temp_list[O]) - return temp_list - -/obj/machinery/rnd/destructive_analyzer/disconnect_console() - linked_console.linked_destroy = null - ..() - -/obj/machinery/rnd/destructive_analyzer/Insert_Item(obj/item/O, mob/user) - if(user.used_intent.type != INTENT_HARM) - . = 1 - if(!is_insertion_ready(user)) - return - if(!user.transferItemToLoc(O, src)) - to_chat(user, "\The [O] is stuck to your hand, you cannot put it in the [src.name]!") - return - busy = TRUE - loaded_item = O - to_chat(user, "I add the [O.name] to the [src.name]!") - flick("d_analyzer_la", src) - addtimer(CALLBACK(src, PROC_REF(finish_loading)), 10) - if (linked_console) - linked_console.updateUsrDialog() - -/obj/machinery/rnd/destructive_analyzer/proc/finish_loading() - update_icon() - reset_busy() - -/obj/machinery/rnd/destructive_analyzer/update_icon() - if(loaded_item) - icon_state = "d_analyzer_l" - else - icon_state = initial(icon_state) - -/obj/machinery/rnd/destructive_analyzer/proc/reclaim_materials_from(obj/item/thing) - . = 0 - var/datum/component/material_container/storage = linked_console?.linked_lathe?.materials.mat_container - if(storage) //Also sends salvaged materials to a linked protolathe, if any. - for(var/material in thing.custom_materials) - var/can_insert = min((storage.max_amount - storage.total_amount), (min(thing.custom_materials[material]*(decon_mod/10), thing.custom_materials[material]))) - storage.insert_amount_mat(can_insert, material) - . += can_insert - if (.) - linked_console.linked_lathe.materials.silo_log(src, "reclaimed", 1, "[thing.name]", thing.custom_materials) - -/obj/machinery/rnd/destructive_analyzer/proc/destroy_item(obj/item/thing, innermode = FALSE) - if(QDELETED(thing) || QDELETED(src) || QDELETED(linked_console)) - return FALSE - if(!innermode) - flick("d_analyzer_process", src) - busy = TRUE - addtimer(CALLBACK(src, PROC_REF(reset_busy)), 24) - use_power(250) - if(thing == loaded_item) - loaded_item = null - var/list/food = thing.GetDeconstructableContents() - for(var/obj/item/innerthing in food) - destroy_item(innerthing, TRUE) - reclaim_materials_from(thing) - for(var/mob/M in thing) - M.death() - if(istype(thing, /obj/item/stack/sheet)) - var/obj/item/stack/sheet/S = thing - if(S.amount > 1 && !innermode) - S.amount-- - loaded_item = S - else - qdel(S) - else - qdel(thing) - if (!innermode) - update_icon() - return TRUE - -/obj/machinery/rnd/destructive_analyzer/proc/user_try_decon_id(id, mob/user) - if(!istype(loaded_item) || !istype(linked_console)) - return FALSE - - if (id && id != RESEARCH_MATERIAL_RECLAMATION_ID) - var/datum/techweb_node/TN = SSresearch.techweb_node_by_id(id) - if(!istype(TN)) - return FALSE - var/dpath = loaded_item.type - var/list/worths = TN.boost_item_paths[dpath] - var/list/differences = list() - var/list/already_boosted = linked_console.stored_research.boosted_nodes[TN.id] - for(var/i in worths) - var/used = already_boosted? already_boosted[i] : 0 - var/value = min(worths[i], TN.research_costs[i]) - used - if(value > 0) - differences[i] = value - if(length(worths) && !length(differences)) - return FALSE - var/choice = input("Are you sure you want to destroy [loaded_item] to [!length(worths) ? "reveal [TN.display_name]" : "boost [TN.display_name] by [json_encode(differences)] point\s"]?") in list("Proceed", "Cancel") - if(choice == "Cancel") - return FALSE - if(QDELETED(loaded_item) || QDELETED(linked_console) || !user.Adjacent(linked_console) || QDELETED(src)) - return FALSE - SSblackbox.record_feedback("nested tally", "item_deconstructed", 1, list("[TN.id]", "[loaded_item.type]")) - if(destroy_item(loaded_item)) - linked_console.stored_research.boost_with_path(SSresearch.techweb_node_by_id(TN.id), dpath) - - else - var/list/point_value = techweb_item_point_check(loaded_item) - if(linked_console.stored_research.deconstructed_items[loaded_item.type]) - point_value = list() - var/user_mode_string = "" - if(length(point_value)) - user_mode_string = " for [json_encode(point_value)] points" - else if(loaded_item.custom_materials.len) - user_mode_string = " for material reclamation" - var/choice = input("Are you sure you want to destroy [loaded_item][user_mode_string]?") in list("Proceed", "Cancel") - if(choice == "Cancel") - return FALSE - if(QDELETED(loaded_item) || QDELETED(linked_console) || !user.Adjacent(linked_console) || QDELETED(src)) - return FALSE - var/loaded_type = loaded_item.type - if(destroy_item(loaded_item)) - linked_console.stored_research.add_point_list(point_value) - linked_console.stored_research.deconstructed_items[loaded_type] = point_value - return TRUE - -/obj/machinery/rnd/destructive_analyzer/proc/unload_item() - if(!loaded_item) - return FALSE - loaded_item.forceMove(get_turf(src)) - loaded_item = null - update_icon() - return TRUE diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm deleted file mode 100644 index a562e47303..0000000000 --- a/code/modules/research/experimentor.dm +++ /dev/null @@ -1,686 +0,0 @@ -//this is designed to replace the destructive analyzer - -//NEEDS MAJOR CODE CLEANUP - -#define SCANTYPE_POKE 1 -#define SCANTYPE_IRRADIATE 2 -#define SCANTYPE_GAS 3 -#define SCANTYPE_HEAT 4 -#define SCANTYPE_COLD 5 -#define SCANTYPE_OBLITERATE 6 -#define SCANTYPE_DISCOVER 7 - -#define EFFECT_PROB_VERYLOW 20 -#define EFFECT_PROB_LOW 35 -#define EFFECT_PROB_MEDIUM 50 -#define EFFECT_PROB_HIGH 75 -#define EFFECT_PROB_VERYHIGH 95 - -#define FAIL 8 -/obj/machinery/rnd/experimentor - name = "\improper E.X.P.E.R.I-MENTOR" - desc = "" - icon = 'icons/obj/machines/heavy_lathe.dmi' - icon_state = "h_lathe" - density = TRUE - use_power = IDLE_POWER_USE - circuit = /obj/item/circuitboard/machine/experimentor - var/recentlyExperimented = 0 - var/mob/trackedIan - var/mob/trackedRuntime - var/badThingCoeff = 0 - var/resetTime = 15 - var/cloneMode = FALSE - var/list/item_reactions = list() - var/list/valid_items = list() //valid items for special reactions like transforming - var/list/critical_items_typecache //items that can cause critical reactions - var/banned_typecache // items that won't be produced - -/obj/machinery/rnd/experimentor/proc/ConvertReqString2List(list/source_list) - var/list/temp_list = params2list(source_list) - for(var/O in temp_list) - temp_list[O] = text2num(temp_list[O]) - return temp_list - - -/obj/machinery/rnd/experimentor/proc/SetTypeReactions() - // Don't need to keep this typecache around, only used in this proc once. - var/list/banned_typecache = typecacheof(list( - /obj/item/stock_parts/cell/infinite, - /obj/item/grenade/chem_grenade/tuberculosis - )) - - for(var/I in typesof(/obj/item)) - if(ispath(I, /obj/item/relic)) - item_reactions["[I]"] = SCANTYPE_DISCOVER - else - item_reactions["[I]"] = pick(SCANTYPE_POKE,SCANTYPE_IRRADIATE,SCANTYPE_GAS,SCANTYPE_HEAT,SCANTYPE_COLD,SCANTYPE_OBLITERATE) - - if(is_type_in_typecache(I, banned_typecache)) - continue - - if(ispath(I, /obj/item/stock_parts) || ispath(I, /obj/item/grenade/chem_grenade) || ispath(I, /obj/item/kitchen)) - var/obj/item/tempCheck = I - if(initial(tempCheck.icon_state) != null) //check it's an actual usable item, in a hacky way - valid_items["[I]"] += 15 - - if(ispath(I, /obj/item/reagent_containers/food)) - var/obj/item/tempCheck = I - if(initial(tempCheck.icon_state) != null) //check it's an actual usable item, in a hacky way - valid_items["[I]"] += rand(1,4) - -/obj/machinery/rnd/experimentor/Initialize() - . = ..() - - trackedIan = locate(/mob/living/simple_animal/pet/dog/corgi/Ian) in GLOB.mob_living_list - trackedRuntime = locate(/mob/living/simple_animal/pet/cat/Runtime) in GLOB.mob_living_list - SetTypeReactions() - - critical_items_typecache = typecacheof(list( - /obj/item/construction/rcd, - /obj/item/grenade, - /obj/item/aicard, - /obj/item/storage/backpack/holding, - /obj/item/slime_extract, - /obj/item/onetankbomb, - /obj/item/transfer_valve)) - -/obj/machinery/rnd/experimentor/RefreshParts() - for(var/obj/item/stock_parts/manipulator/M in component_parts) - if(resetTime > 0 && (resetTime - M.rating) >= 1) - resetTime -= M.rating - for(var/obj/item/stock_parts/scanning_module/M in component_parts) - badThingCoeff += M.rating*2 - for(var/obj/item/stock_parts/micro_laser/M in component_parts) - badThingCoeff += M.rating - -/obj/machinery/rnd/experimentor/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Malfunction probability reduced by [badThingCoeff]%.
    Cooldown interval between experiments at [resetTime*0.1] seconds.
    " - -/obj/machinery/rnd/experimentor/proc/checkCircumstances(obj/item/O) - //snowflake check to only take "made" bombs - if(istype(O, /obj/item/transfer_valve)) - var/obj/item/transfer_valve/T = O - if(!T.tank_one || !T.tank_two || !T.attached_device) - return FALSE - return TRUE - -/obj/machinery/rnd/experimentor/Insert_Item(obj/item/O, mob/user) - if(user.used_intent.type != INTENT_HARM) - . = 1 - if(!is_insertion_ready(user)) - return - if(!user.transferItemToLoc(O, src)) - return - loaded_item = O - to_chat(user, "I add [O] to the machine.") - flick("h_lathe_load", src) - -/obj/machinery/rnd/experimentor/default_deconstruction_crowbar(obj/item/O) - ejectItem() - . = ..(O) - -/obj/machinery/rnd/experimentor/ui_interact(mob/user) - var/list/dat = list("
    ") - if(!linked_console) - dat += "Scan for R&D Console" - if(loaded_item) - dat += "Loaded Item: [loaded_item]" - - dat += "
    Available tests:" - dat += "Poke" - dat += "Irradiate" - dat += "Gas" - dat += "Burn" - dat += "Freeze" - dat += "Destroy
    " - if(istype(loaded_item,/obj/item/relic)) - dat += "Discover" - dat += "Eject" - var/list/listin = techweb_item_boost_check(src) - if(listin) - var/list/output = list("Research Boost Data:") - var/list/res = list("Already researched:") - var/list/boosted = list("Already boosted:") - for(var/node_id in listin) - var/datum/techweb_node/N = SSresearch.techweb_node_by_id(node_id) - var/str = "[N.display_name]: [listin[N]] points." - if(SSresearch.science_tech.researched_nodes[N.id]) - res += str - else if(SSresearch.science_tech.boosted_nodes[N.id]) - boosted += str - if(SSresearch.science_tech.visible_nodes[N.id]) //JOY OF DISCOVERY! - output += str - output += boosted + res - dat += output - else - dat += "Nothing loaded." - dat += "Refresh" - dat += "Close
    " - var/datum/browser/popup = new(user, "experimentor","Experimentor", 700, 400, src) - popup.set_content(dat.Join("
    ")) - popup.open() - onclose(user, "experimentor") - -/obj/machinery/rnd/experimentor/Topic(href, href_list) - if(..()) - return - usr.set_machine(src) - - var/scantype = href_list["function"] - var/obj/item/process = locate(href_list["item"]) in src - - if(href_list["close"]) - usr << browse(null, "window=experimentor") - return - if(scantype == "search") - var/obj/machinery/computer/rdconsole/D = locate(/obj/machinery/computer/rdconsole) in oview(3,src) - if(D) - linked_console = D - else if(scantype == "eject") - ejectItem() - else if(scantype == "refresh") - updateUsrDialog() - else - if(recentlyExperimented) - to_chat(usr, "[src] has been used too recently!") - else if(!loaded_item) - to_chat(usr, "[src] is not currently loaded!") - else if(!process || process != loaded_item) //Interface exploit protection (such as hrefs or swapping items with interface set to old item) - to_chat(usr, "Interface failure detected in [src]. Please try again.") - else - var/dotype - if(text2num(scantype) == SCANTYPE_DISCOVER) - dotype = SCANTYPE_DISCOVER - else - dotype = matchReaction(process,scantype) - experiment(dotype,process) - use_power(750) - if(dotype != FAIL) - var/list/nodes = techweb_item_boost_check(process) - var/picked = pickweight(nodes) //This should work. - if(linked_console) - linked_console.stored_research.boost_with_path(SSresearch.techweb_node_by_id(picked), process.type) - updateUsrDialog() - -/obj/machinery/rnd/experimentor/proc/matchReaction(matching,reaction) - var/obj/item/D = matching - if(D) - if(item_reactions.Find("[D.type]")) - var/tor = item_reactions["[D.type]"] - if(tor == text2num(reaction)) - return tor - else - return FAIL - else - return FAIL - else - return FAIL - -/obj/machinery/rnd/experimentor/proc/ejectItem(delete=FALSE) - if(loaded_item) - if(cloneMode) - visible_message("A duplicate [loaded_item] pops out!") - var/type_to_make = loaded_item.type - new type_to_make(get_turf(pick(oview(1,src)))) - cloneMode = FALSE - return - var/turf/dropturf = get_turf(pick(view(1,src))) - if(!dropturf) //Failsafe to prevent the object being lost in the void forever. - dropturf = drop_location() - loaded_item.forceMove(dropturf) - if(delete) - qdel(loaded_item) - loaded_item = null - -/obj/machinery/rnd/experimentor/proc/throwSmoke(turf/where) - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(0, where) - smoke.start() - - -/obj/machinery/rnd/experimentor/proc/experiment(exp,obj/item/exp_on) - recentlyExperimented = 1 - icon_state = "h_lathe_wloop" - var/chosenchem - var/criticalReaction = is_type_in_typecache(exp_on, critical_items_typecache) - //////////////////////////////////////////////////////////////////////////////////////////////// - if(exp == SCANTYPE_POKE) - visible_message("[src] prods at [exp_on] with mechanical arms.") - if(prob(EFFECT_PROB_LOW) && criticalReaction) - visible_message("[exp_on] is gripped in just the right way, enhancing its focus.") - badThingCoeff++ - else if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) - visible_message("[src] malfunctions and destroys [exp_on], lashing its arms out at nearby people!") - for(var/mob/living/m in oview(1, src)) - m.apply_damage(15, BRUTE, pick(BODY_ZONE_HEAD,BODY_ZONE_CHEST,BODY_ZONE_PRECISE_GROIN)) - investigate_log("Experimentor dealt minor brute to [m].", INVESTIGATE_EXPERIMENTOR) - ejectItem(TRUE) - else if(prob(EFFECT_PROB_LOW-badThingCoeff)) - visible_message("[src] malfunctions!") - exp = SCANTYPE_OBLITERATE - else if(prob(EFFECT_PROB_MEDIUM-badThingCoeff)) - visible_message("[src] malfunctions, throwing the [exp_on]!") - var/mob/living/target = locate(/mob/living) in oview(7,src) - if(target) - var/obj/item/throwing = loaded_item - investigate_log("Experimentor has thrown [loaded_item] at [key_name(target)]", INVESTIGATE_EXPERIMENTOR) - ejectItem() - if(throwing) - throwing.throw_at(target, 10, 1) - //////////////////////////////////////////////////////////////////////////////////////////////// - if(exp == SCANTYPE_IRRADIATE) - visible_message("[src] reflects radioactive rays at [exp_on]!") - if(prob(EFFECT_PROB_LOW) && criticalReaction) - visible_message("[exp_on] has activated an unknown subroutine!") - cloneMode = TRUE - investigate_log("Experimentor has made a clone of [exp_on]", INVESTIGATE_EXPERIMENTOR) - ejectItem() - else if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) - visible_message("[src] malfunctions, melting [exp_on] and leaking radiation!") - radiation_pulse(src, 500) - ejectItem(TRUE) - else if(prob(EFFECT_PROB_LOW-badThingCoeff)) - visible_message("[src] malfunctions, spewing toxic waste!") - for(var/turf/T in oview(1, src)) - if(!T.density) - if(prob(EFFECT_PROB_VERYHIGH) && !(locate(/obj/effect/decal/cleanable/greenglow) in T)) - var/obj/effect/decal/cleanable/reagentdecal = new/obj/effect/decal/cleanable/greenglow(T) - reagentdecal.reagents.add_reagent(/datum/reagent/uranium/radium, 7) - else if(prob(EFFECT_PROB_MEDIUM-badThingCoeff)) - var/savedName = "[exp_on]" - ejectItem(TRUE) - var/newPath = text2path(pickweight(valid_items)) - loaded_item = new newPath(src) - visible_message("[src] malfunctions, transforming [savedName] into [loaded_item]!") - investigate_log("Experimentor has transformed [savedName] into [loaded_item]", INVESTIGATE_EXPERIMENTOR) - if(istype(loaded_item, /obj/item/grenade/chem_grenade)) - var/obj/item/grenade/chem_grenade/CG = loaded_item - CG.prime() - ejectItem() - //////////////////////////////////////////////////////////////////////////////////////////////// - if(exp == SCANTYPE_GAS) - visible_message("[src] fills its chamber with gas, [exp_on] included.") - if(prob(EFFECT_PROB_LOW) && criticalReaction) - visible_message("[exp_on] achieves the perfect mix!") - new /obj/item/stack/sheet/mineral/plasma(get_turf(pick(oview(1,src)))) - else if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) - visible_message("[src] destroys [exp_on], leaking dangerous gas!") - chosenchem = pick(/datum/reagent/carbon,/datum/reagent/uranium/radium,/datum/reagent/toxin,/datum/reagent/consumable/condensedcapsaicin,/datum/reagent/drug/mushroomhallucinogen,/datum/reagent/drug/space_drugs,/datum/reagent/consumable/ethanol,/datum/reagent/consumable/ethanol/beepsky_smash) - var/datum/reagents/R = new/datum/reagents(50) - R.my_atom = src - R.add_reagent(chosenchem , 50) - investigate_log("Experimentor has released [chosenchem] smoke.", INVESTIGATE_EXPERIMENTOR) - var/datum/effect_system/smoke_spread/chem/smoke = new - smoke.set_up(R, 0, src, silent = TRUE) - playsound(src, 'sound/blank.ogg', 50, TRUE, -3) - smoke.start() - qdel(R) - ejectItem(TRUE) - else if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) - visible_message("[src]'s chemical chamber has sprung a leak!") - chosenchem = pick(/datum/reagent/mutationtoxin/classic,/datum/reagent/nanomachines,/datum/reagent/toxin/acid) - var/datum/reagents/R = new/datum/reagents(50) - R.my_atom = src - R.add_reagent(chosenchem , 50) - var/datum/effect_system/smoke_spread/chem/smoke = new - smoke.set_up(R, 0, src, silent = TRUE) - playsound(src, 'sound/blank.ogg', 50, TRUE, -3) - smoke.start() - qdel(R) - ejectItem(TRUE) - warn_admins(usr, "[chosenchem] smoke") - investigate_log("Experimentor has released [chosenchem] smoke!", INVESTIGATE_EXPERIMENTOR) - else if(prob(EFFECT_PROB_LOW-badThingCoeff)) - visible_message("[src] malfunctions, spewing harmless gas.") - throwSmoke(loc) - else if(prob(EFFECT_PROB_MEDIUM-badThingCoeff)) - visible_message("[src] melts [exp_on], ionizing the air around it!") - empulse(loc, 4, 6) - investigate_log("Experimentor has generated an Electromagnetic Pulse.", INVESTIGATE_EXPERIMENTOR) - ejectItem(TRUE) - //////////////////////////////////////////////////////////////////////////////////////////////// - if(exp == SCANTYPE_HEAT) - visible_message("[src] raises [exp_on]'s temperature.") - if(prob(EFFECT_PROB_LOW) && criticalReaction) - visible_message("[src]'s emergency coolant system gives off a small ding!") - playsound(src, 'sound/blank.ogg', 50, TRUE) - var/obj/item/reagent_containers/food/drinks/coffee/C = new /obj/item/reagent_containers/food/drinks/coffee(get_turf(pick(oview(1,src)))) - chosenchem = pick(/datum/reagent/toxin/plasma,/datum/reagent/consumable/capsaicin,/datum/reagent/consumable/ethanol) - C.reagents.remove_any(25) - C.reagents.add_reagent(chosenchem , 50) - C.name = "Cup of Suspicious Liquid" - C.desc = "" - investigate_log("Experimentor has made a cup of [chosenchem] coffee.", INVESTIGATE_EXPERIMENTOR) - else if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) - var/turf/start = get_turf(src) - var/mob/M = locate(/mob/living) in view(src, 3) - var/turf/MT = get_turf(M) - if(MT) - visible_message("[src] dangerously overheats, launching a flaming fuel orb!") - investigate_log("Experimentor has launched a fireball at [M]!", INVESTIGATE_EXPERIMENTOR) - var/obj/projectile/magic/aoe/fireball/FB = new /obj/projectile/magic/aoe/fireball(start) - FB.preparePixelProjectile(MT, start) - FB.fire() - else if(prob(EFFECT_PROB_LOW-badThingCoeff)) - visible_message("[src] malfunctions, melting [exp_on] and releasing a burst of flame!") - explosion(loc, -1, 0, 0, 0, 0, flame_range = 2) - investigate_log("Experimentor started a fire.", INVESTIGATE_EXPERIMENTOR) - ejectItem(TRUE) - else if(prob(EFFECT_PROB_MEDIUM-badThingCoeff)) - visible_message("[src] malfunctions, melting [exp_on] and leaking hot air!") - var/datum/gas_mixture/env = loc.return_air() - var/transfer_moles = 0.25 * env.total_moles() - var/datum/gas_mixture/removed = env.remove(transfer_moles) - if(removed) - var/heat_capacity = removed.heat_capacity() - if(heat_capacity == 0 || heat_capacity == null) - heat_capacity = 1 - removed.temperature = min((removed.temperature*heat_capacity + 100000)/heat_capacity, 1000) - env.merge(removed) - air_update_turf() - investigate_log("Experimentor has released hot air.", INVESTIGATE_EXPERIMENTOR) - ejectItem(TRUE) - else if(prob(EFFECT_PROB_MEDIUM-badThingCoeff)) - visible_message("[src] malfunctions, activating its emergency coolant systems!") - throwSmoke(loc) - for(var/mob/living/m in oview(1, src)) - m.apply_damage(5, BURN, pick(BODY_ZONE_HEAD,BODY_ZONE_CHEST,BODY_ZONE_PRECISE_GROIN)) - investigate_log("Experimentor has dealt minor burn damage to [key_name(m)]", INVESTIGATE_EXPERIMENTOR) - ejectItem() - //////////////////////////////////////////////////////////////////////////////////////////////// - if(exp == SCANTYPE_COLD) - visible_message("[src] lowers [exp_on]'s temperature.") - if(prob(EFFECT_PROB_LOW) && criticalReaction) - visible_message("[src]'s emergency coolant system gives off a small ding!") - var/obj/item/reagent_containers/food/drinks/coffee/C = new /obj/item/reagent_containers/food/drinks/coffee(get_turf(pick(oview(1,src)))) - playsound(src, 'sound/blank.ogg', 50, TRUE) //Ding! Your death coffee is ready! - chosenchem = pick(/datum/reagent/uranium,/datum/reagent/consumable/frostoil,/datum/reagent/medicine/ephedrine) - C.reagents.remove_any(25) - C.reagents.add_reagent(chosenchem , 50) - C.name = "Cup of Suspicious Liquid" - C.desc = "" - investigate_log("Experimentor has made a cup of [chosenchem] coffee.", INVESTIGATE_EXPERIMENTOR) - else if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) - visible_message("[src] malfunctions, shattering [exp_on] and releasing a dangerous cloud of coolant!") - var/datum/reagents/R = new/datum/reagents(50) - R.my_atom = src - R.add_reagent(/datum/reagent/consumable/frostoil , 50) - investigate_log("Experimentor has released frostoil gas.", INVESTIGATE_EXPERIMENTOR) - var/datum/effect_system/smoke_spread/chem/smoke = new - smoke.set_up(R, 0, src, silent = TRUE) - playsound(src, 'sound/blank.ogg', 50, TRUE, -3) - smoke.start() - qdel(R) - ejectItem(TRUE) - else if(prob(EFFECT_PROB_LOW-badThingCoeff)) - visible_message("[src] malfunctions, shattering [exp_on] and leaking cold air!") - var/datum/gas_mixture/env = loc.return_air() - var/transfer_moles = 0.25 * env.total_moles() - var/datum/gas_mixture/removed = env.remove(transfer_moles) - if(removed) - var/heat_capacity = removed.heat_capacity() - if(heat_capacity == 0 || heat_capacity == null) - heat_capacity = 1 - removed.temperature = (removed.temperature*heat_capacity - 75000)/heat_capacity - env.merge(removed) - air_update_turf() - investigate_log("Experimentor has released cold air.", INVESTIGATE_EXPERIMENTOR) - ejectItem(TRUE) - else if(prob(EFFECT_PROB_MEDIUM-badThingCoeff)) - visible_message("[src] malfunctions, releasing a flurry of chilly air as [exp_on] pops out!") - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(0, loc) - smoke.start() - ejectItem() - //////////////////////////////////////////////////////////////////////////////////////////////// - if(exp == SCANTYPE_OBLITERATE) - visible_message("[exp_on] activates the crushing mechanism, [exp_on] is destroyed!") - if(linked_console.linked_lathe) - var/datum/component/material_container/linked_materials = linked_console.linked_lathe.GetComponent(/datum/component/material_container) - for(var/material in exp_on.custom_materials) - linked_materials.insert_amount_mat( min((linked_materials.max_amount - linked_materials.total_amount), (exp_on.custom_materials[material])), material) - if(prob(EFFECT_PROB_LOW) && criticalReaction) - visible_message("[src]'s crushing mechanism slowly and smoothly descends, flattening the [exp_on]!") - new /obj/item/stack/sheet/plasteel(get_turf(pick(oview(1,src)))) - else if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) - visible_message("[src]'s crusher goes way too many levels too high, crushing right through space-time!") - playsound(src, 'sound/blank.ogg', 50, TRUE, -3) - investigate_log("Experimentor has triggered the 'throw things' reaction.", INVESTIGATE_EXPERIMENTOR) - for(var/atom/movable/AM in oview(7,src)) - if(!AM.anchored) - AM.throw_at(src,10,1) - else if(prob(EFFECT_PROB_LOW-badThingCoeff)) - visible_message("[src]'s crusher goes one level too high, crushing right into space-time!") - playsound(src, 'sound/blank.ogg', 50, TRUE, -3) - investigate_log("Experimentor has triggered the 'minor throw things' reaction.", INVESTIGATE_EXPERIMENTOR) - var/list/throwAt = list() - for(var/atom/movable/AM in oview(7,src)) - if(!AM.anchored) - throwAt.Add(AM) - for(var/counter = 1, counter < throwAt.len, ++counter) - var/atom/movable/cast = throwAt[counter] - cast.throw_at(pick(throwAt),10,1) - ejectItem(TRUE) - //////////////////////////////////////////////////////////////////////////////////////////////// - if(exp == FAIL) - var/a = pick("rumbles","shakes","vibrates","shudders") - var/b = pick("crushes","spins","viscerates","smashes","insults") - visible_message("[exp_on] [a], and [b], the experiment was a failure.") - - if(exp == SCANTYPE_DISCOVER) - visible_message("[src] scans the [exp_on], revealing its true nature!") - playsound(src, 'sound/blank.ogg', 50, 3, -1) - var/obj/item/relic/R = loaded_item - if (!R.revealed) - var/points = rand(2500,2750) // discovery reward - SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = points)) - visible_message(" This discovery netted [points] points for research.") - R.reveal() - investigate_log("Experimentor has revealed a relic with [R.realProc] effect.", INVESTIGATE_EXPERIMENTOR) - ejectItem() - - //Global reactions - if(prob(EFFECT_PROB_VERYLOW-badThingCoeff) && loaded_item) - var/globalMalf = rand(1,100) - if(globalMalf < 15) - visible_message("[src]'s onboard detection system has malfunctioned!") - item_reactions["[exp_on.type]"] = pick(SCANTYPE_POKE,SCANTYPE_IRRADIATE,SCANTYPE_GAS,SCANTYPE_HEAT,SCANTYPE_COLD,SCANTYPE_OBLITERATE) - ejectItem() - if(globalMalf > 16 && globalMalf < 35) - visible_message("[src] melts [exp_on], ian-izing the air around it!") - throwSmoke(loc) - if(trackedIan) - throwSmoke(trackedIan.loc) - trackedIan.forceMove(loc) - investigate_log("Experimentor has stolen Ian!", INVESTIGATE_EXPERIMENTOR) //...if anyone ever fixes it... - else - new /mob/living/simple_animal/pet/dog/corgi(loc) - investigate_log("Experimentor has spawned a new corgi.", INVESTIGATE_EXPERIMENTOR) - ejectItem(TRUE) - if(globalMalf > 36 && globalMalf < 50) - visible_message("Experimentor draws the life essence of those nearby!") - for(var/mob/living/m in view(4,src)) - to_chat(m, "I feel your flesh being torn from you, mists of blood drifting to [src]!") - m.apply_damage(50, BRUTE, BODY_ZONE_CHEST) - investigate_log("Experimentor has taken 50 brute a blood sacrifice from [m]", INVESTIGATE_EXPERIMENTOR) - if(globalMalf > 51 && globalMalf < 75) - visible_message("[src] encounters a run-time error!") - throwSmoke(loc) - if(trackedRuntime) - throwSmoke(trackedRuntime.loc) - trackedRuntime.forceMove(drop_location()) - investigate_log("Experimentor has stolen Runtime!", INVESTIGATE_EXPERIMENTOR) - else - new /mob/living/simple_animal/pet/cat(loc) - investigate_log("Experimentor failed to steal runtime, and instead spawned a new cat.", INVESTIGATE_EXPERIMENTOR) - ejectItem(TRUE) - if(globalMalf > 76) - visible_message("[src] begins to smoke and hiss, shaking violently!") - use_power(500000) - investigate_log("Experimentor has drained power from its APC", INVESTIGATE_EXPERIMENTOR) - - addtimer(CALLBACK(src, PROC_REF(reset_exp)), resetTime) - -/obj/machinery/rnd/experimentor/proc/reset_exp() - update_icon() - recentlyExperimented = FALSE - -/obj/machinery/rnd/experimentor/update_icon() - icon_state = "h_lathe" - -/obj/machinery/rnd/experimentor/proc/warn_admins(user, ReactionName) - var/turf/T = get_turf(user) - message_admins("Experimentor reaction: [ReactionName] generated by [ADMIN_LOOKUPFLW(user)] at [ADMIN_VERBOSEJMP(T)]") - log_game("Experimentor reaction: [ReactionName] generated by [key_name(user)] in [AREACOORD(T)]") - -#undef SCANTYPE_POKE -#undef SCANTYPE_IRRADIATE -#undef SCANTYPE_GAS -#undef SCANTYPE_HEAT -#undef SCANTYPE_COLD -#undef SCANTYPE_OBLITERATE -#undef SCANTYPE_DISCOVER - -#undef EFFECT_PROB_VERYLOW -#undef EFFECT_PROB_LOW -#undef EFFECT_PROB_MEDIUM -#undef EFFECT_PROB_HIGH -#undef EFFECT_PROB_VERYHIGH - -#undef FAIL - - -//////////////////////////////////SPECIAL ITEMS//////////////////////////////////////// - -/obj/item/relic - name = "strange object" - desc = "" - icon = 'icons/obj/assemblies.dmi' - var/realName = "defined object" - var/revealed = FALSE - var/realProc - var/cooldownMax = 60 - var/cooldown - -/obj/item/relic/Initialize() - . = ..() - icon_state = pick("shock_kit","armor-igniter-analyzer","infra-igniter0","infra-igniter1","radio-multitool","prox-radio1","radio-radio","timer-multitool0","radio-igniter-tank") - realName = "[pick("broken","twisted","spun","improved","silly","regular","badly made")] [pick("device","object","toy","illegal tech","weapon")]" - - -/obj/item/relic/proc/reveal() - if(revealed) //Re-rolling your relics seems a bit overpowered, yes? - return - revealed = TRUE - name = realName - cooldownMax = rand(60,300) - realProc = pick("teleport","explode","rapidDupe","petSpray","flash","clean","corgicannon") - -/obj/item/relic/attack_self(mob/user) - if(revealed) - if(cooldown) - to_chat(user, "[src] does not react!") - return - else if(loc == user) - cooldown = TRUE - call(src,realProc)(user) - addtimer(CALLBACK(src, PROC_REF(cd)), cooldownMax) - else - to_chat(user, "I aren't quite sure what to do with this yet.") - -/obj/item/relic/proc/cd() - cooldown = FALSE - -//////////////// RELIC PROCS ///////////////////////////// - -/obj/item/relic/proc/throwSmoke(turf/where) - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(0, get_turf(where)) - smoke.start() - -/obj/item/relic/proc/corgicannon(mob/user) - playsound(src, "sparks", rand(25,50), TRUE) - var/mob/living/simple_animal/pet/dog/corgi/C = new/mob/living/simple_animal/pet/dog/corgi(get_turf(user)) - C.throw_at(pick(oview(10,user)), 10, rand(3,8), callback = CALLBACK(src, PROC_REF(throwSmoke), C)) - warn_admins(user, "Corgi Cannon", 0) - -/obj/item/relic/proc/clean(mob/user) - playsound(src, "sparks", rand(25,50), TRUE) - var/obj/item/grenade/chem_grenade/cleaner/CL = new/obj/item/grenade/chem_grenade/cleaner(get_turf(user)) - CL.prime() - warn_admins(user, "Smoke", 0) - -/obj/item/relic/proc/flash(mob/user) - playsound(src, "sparks", rand(25,50), TRUE) - var/obj/item/grenade/flashbang/CB = new/obj/item/grenade/flashbang(user.loc) - CB.prime() - warn_admins(user, "Flash") - -/obj/item/relic/proc/petSpray(mob/user) - var/message = "[src] begins to shake, and in the distance the sound of rampaging animals arises!" - visible_message(message) - to_chat(user, message) - var/animals = rand(1,25) - var/counter - var/list/valid_animals = list(/mob/living/simple_animal/parrot, /mob/living/simple_animal/butterfly, /mob/living/simple_animal/pet/cat, /mob/living/simple_animal/pet/dog/corgi, /mob/living/simple_animal/crab, /mob/living/simple_animal/pet/fox, /mob/living/simple_animal/hostile/lizard, /mob/living/simple_animal/mouse, /mob/living/simple_animal/pet/dog/pug, /mob/living/simple_animal/hostile/bear, /mob/living/simple_animal/hostile/poison/bees, /mob/living/simple_animal/hostile/carp) - for(counter = 1; counter < animals; counter++) - var/mobType = pick(valid_animals) - new mobType(get_turf(src)) - warn_admins(user, "Mass Mob Spawn") - if(prob(60)) - to_chat(user, "[src] falls apart!") - qdel(src) - -/obj/item/relic/proc/rapidDupe(mob/user) - audible_message("[src] emits a loud pop!") - var/list/dupes = list() - var/counter - var/max = rand(5,10) - for(counter = 1; counter < max; counter++) - var/obj/item/relic/R = new type(get_turf(src)) - R.name = name - R.desc = desc - R.realName = realName - R.realProc = realProc - R.revealed = TRUE - dupes |= R - R.throw_at(pick(oview(7,get_turf(src))),10,1) - counter = 0 - QDEL_LIST_IN(dupes, rand(10, 100)) - warn_admins(user, "Rapid duplicator", 0) - -/obj/item/relic/proc/explode(mob/user) - to_chat(user, "[src] begins to heat up!") - addtimer(CALLBACK(src, PROC_REF(do_explode), user), rand(35, 100)) - -/obj/item/relic/proc/do_explode(mob/user) - if(loc == user) - visible_message("\The [src]'s top opens, releasing a powerful blast!") - explosion(user.loc, 0, rand(1,5), rand(1,5), rand(1,5), rand(1,5), flame_range = 2) - warn_admins(user, "Explosion") - qdel(src) //Comment this line to produce a light grenade (the bomb that keeps on exploding when used)!! - -/obj/item/relic/proc/teleport(mob/user) - to_chat(user, "[src] begins to vibrate!") - addtimer(CALLBACK(src, PROC_REF(do_the_teleport), user), rand(10, 30)) - -/obj/item/relic/proc/do_the_teleport(mob/user) - var/turf/userturf = get_turf(user) - if(loc == user && !is_centcom_level(userturf.z)) //Because Nuke Ops bringing this back on their shuttle, then looting the ERT area is 2fun4you! - visible_message("[src] twists and bends, relocating itself!") - throwSmoke(userturf) - do_teleport(user, userturf, 8, asoundin = 'sound/blank.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) - throwSmoke(get_turf(user)) - warn_admins(user, "Teleport", 0) - -//Admin Warning proc for relics -/obj/item/relic/proc/warn_admins(mob/user, RelicType, priority = 1) - var/turf/T = get_turf(src) - var/log_msg = "[RelicType] relic used by [key_name(user)] in [AREACOORD(T)]" - if(priority) //For truly dangerous relics that may need an admin's attention. BWOINK! - message_admins("[RelicType] relic activated by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]") - log_game(log_msg) - investigate_log(log_msg, "experimentor") diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm deleted file mode 100644 index d70d77dd03..0000000000 --- a/code/modules/research/machinery/_production.dm +++ /dev/null @@ -1,374 +0,0 @@ -/obj/machinery/rnd/production - name = "technology fabricator" - desc = "" - layer = BELOW_OBJ_LAYER - var/consoleless_interface = FALSE //Whether it can be used without a console. - var/efficiency_coeff = 1 //Materials needed / coeff = actual. - var/list/categories = list() - var/datum/component/remote_materials/materials - var/allowed_department_flags = ALL - var/production_animation //What's flick()'d on print. - var/allowed_buildtypes = NONE - var/list/datum/design/cached_designs - var/list/datum/design/matching_designs - var/department_tag = "Unidentified" //used for material distribution among other things. - var/datum/techweb/stored_research - var/datum/techweb/host_research - - var/screen = RESEARCH_FABRICATOR_SCREEN_MAIN - var/selected_category - -/obj/machinery/rnd/production/Initialize(mapload) - . = ..() - create_reagents(0, OPENCONTAINER) - matching_designs = list() - cached_designs = list() - stored_research = new - host_research = SSresearch.science_tech - INVOKE_ASYNC(src, PROC_REF(update_research)) - materials = AddComponent(/datum/component/remote_materials, "lathe", mapload) - RefreshParts() - -/obj/machinery/rnd/production/Destroy() - materials = null - cached_designs = null - matching_designs = null - QDEL_NULL(stored_research) - host_research = null - return ..() - -/obj/machinery/rnd/production/proc/update_research() - host_research.copy_research_to(stored_research, TRUE) - update_designs() - -/obj/machinery/rnd/production/proc/update_designs() - cached_designs.Cut() - for(var/i in stored_research.researched_designs) - var/datum/design/d = SSresearch.techweb_design_by_id(i) - if((isnull(allowed_department_flags) || (d.departmental_flags & allowed_department_flags)) && (d.build_type & allowed_buildtypes)) - cached_designs |= d - -/obj/machinery/rnd/production/RefreshParts() - calculate_efficiency() - -/obj/machinery/rnd/production/ui_interact(mob/user) - if(!consoleless_interface) - return ..() - user.set_machine(src) - var/datum/browser/popup = new(user, "rndconsole", name, 460, 550) - popup.set_content(generate_ui()) - popup.open() - -/obj/machinery/rnd/production/proc/calculate_efficiency() - efficiency_coeff = 1 - if(reagents) //If reagents/materials aren't initialized, don't bother, we'll be doing this again after reagents init anyways. - reagents.maximum_volume = 0 - for(var/obj/item/reagent_containers/glass/G in component_parts) - reagents.maximum_volume += G.volume - G.reagents.trans_to(src, G.reagents.total_volume) - if(materials) - var/total_storage = 0 - for(var/obj/item/stock_parts/matter_bin/M in component_parts) - total_storage += M.rating * 75000 - materials.set_local_size(total_storage) - var/total_rating = 1.2 - for(var/obj/item/stock_parts/manipulator/M in component_parts) - total_rating = CLAMP(total_rating - (M.rating * 0.1), 0, 1) - if(total_rating == 0) - efficiency_coeff = INFINITY - else - efficiency_coeff = 1/total_rating - -//we eject the materials upon deconstruction. -/obj/machinery/rnd/production/on_deconstruction() - for(var/obj/item/reagent_containers/glass/G in component_parts) - reagents.trans_to(G, G.reagents.maximum_volume) - return ..() - -/obj/machinery/rnd/production/proc/do_print(path, amount, list/matlist, notify_admins) - if(notify_admins) - investigate_log("[key_name(usr)] built [amount] of [path] at [src]([type]).", INVESTIGATE_RESEARCH) - message_admins("[ADMIN_LOOKUPFLW(usr)] has built [amount] of [path] at \a [src]([type]).") - for(var/i in 1 to amount) - var/obj/item/I = new path(get_turf(src)) - if(efficient_with(I.type)) - I.material_flags |= MATERIAL_NO_EFFECTS //Find a better way to do this. - I.set_custom_materials(matlist.Copy()) - SSblackbox.record_feedback("nested tally", "item_printed", amount, list("[type]", "[path]")) - -/obj/machinery/rnd/production/proc/check_mat(datum/design/being_built, mat) // now returns how many times the item can be built with the material - if (!materials.mat_container) // no connected silo - return 0 - var/list/all_materials = being_built.reagents_list + being_built.materials - - var/A = materials.mat_container.get_material_amount(mat) - if(!A) - A = reagents.get_reagent_amount(mat) - - // these types don't have their .materials set in do_print, so don't allow - // them to be constructed efficiently - var/ef = efficient_with(being_built.build_path) ? efficiency_coeff : 1 - return round(A / max(1, all_materials[mat] / ef)) - -/obj/machinery/rnd/production/proc/efficient_with(path) - return !ispath(path, /obj/item/stack/sheet) && !ispath(path, /obj/item/stack/ore/bluespace_crystal) - -/obj/machinery/rnd/production/proc/user_try_print_id(id, amount) - if((!istype(linked_console) && requires_console) || !id) - return FALSE - if(istext(amount)) - amount = text2num(amount) - if(isnull(amount)) - amount = 1 - var/datum/design/D = (linked_console || requires_console)? (linked_console.stored_research.researched_designs[id]? SSresearch.techweb_design_by_id(id) : null) : SSresearch.techweb_design_by_id(id) - if(!istype(D)) - return FALSE - if(!(isnull(allowed_department_flags) || (D.departmental_flags & allowed_department_flags))) - say("Warning: Printing failed: This fabricator does not have the necessary keys to decrypt design schematics. Please update the research data with the on-screen button and contact Nanotrasen Support!") - return FALSE - if(D.build_type && !(D.build_type & allowed_buildtypes)) - say("This machine does not have the necessary manipulation systems for this design. Please contact Nanotrasen Support!") - return FALSE - if(!materials.mat_container) - say("No connection to material storage, please contact the quartermaster.") - return FALSE - if(materials.on_hold()) - say("Mineral access is on hold, please contact the quartermaster.") - return FALSE - var/power = 1000 - amount = CLAMP(amount, 1, 50) - for(var/M in D.materials) - power += round(D.materials[M] * amount / 35) - power = min(3000, power) - use_power(power) - var/coeff = efficient_with(D.build_path) ? efficiency_coeff : 1 - var/list/efficient_mats = list() - for(var/MAT in D.materials) - efficient_mats[MAT] = D.materials[MAT]/coeff - if(!materials.mat_container.has_materials(efficient_mats, amount)) - say("Not enough materials to complete prototype[amount > 1? "s" : ""].") - return FALSE - for(var/R in D.reagents_list) - if(!reagents.has_reagent(R, D.reagents_list[R]*amount/coeff)) - say("Not enough reagents to complete prototype[amount > 1? "s" : ""].") - return FALSE - materials.mat_container.use_materials(efficient_mats, amount) - materials.silo_log(src, "built", -amount, "[D.name]", efficient_mats) - for(var/R in D.reagents_list) - reagents.remove_reagent(R, D.reagents_list[R]*amount/coeff) - busy = TRUE - if(production_animation) - flick(production_animation, src) - var/timecoeff = D.lathe_time_factor / efficiency_coeff - addtimer(CALLBACK(src, PROC_REF(reset_busy)), (30 * timecoeff * amount) ** 0.5) - addtimer(CALLBACK(src, PROC_REF(do_print), D.build_path, amount, efficient_mats, D.dangerous_construction), (32 * timecoeff * amount) ** 0.8) - return TRUE - -/obj/machinery/rnd/production/proc/search(string) - matching_designs.Cut() - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(!(D.build_type & allowed_buildtypes) || !(isnull(allowed_department_flags) || (D.departmental_flags & allowed_department_flags))) - continue - if(findtext(D.name,string)) - matching_designs.Add(D) - -/obj/machinery/rnd/production/proc/generate_ui() - var/list/ui = list() - ui += ui_header() - switch(screen) - if(RESEARCH_FABRICATOR_SCREEN_MATERIALS) - ui += ui_screen_materials() - if(RESEARCH_FABRICATOR_SCREEN_CHEMICALS) - ui += ui_screen_chemicals() - if(RESEARCH_FABRICATOR_SCREEN_SEARCH) - ui += ui_screen_search() - if(RESEARCH_FABRICATOR_SCREEN_CATEGORYVIEW) - ui += ui_screen_category_view() - else - ui += ui_screen_main() - for(var/i in 1 to length(ui)) - if(!findtextEx(ui[i], RDSCREEN_NOBREAK)) - ui[i] += "
    " - ui[i] = replacetextEx(ui[i], RDSCREEN_NOBREAK, "") - return ui.Join("") - -/obj/machinery/rnd/production/proc/ui_header() - var/list/l = list() - l += "
    [host_research.organization] [department_tag] Department Lathe" - l += "Security protocols: [(obj_flags & EMAGGED)? "Disabled" : "Enabled"]" - if (materials.mat_container) - l += "Material Amount: [materials.format_amount()]" - else - l += "No material storage connected, please contact the quartermaster." - l += "Chemical volume: [reagents.total_volume] / [reagents.maximum_volume]" - l += "Synchronize Research" - l += "Main Screen
    [RDSCREEN_NOBREAK]" - return l - -/obj/machinery/rnd/production/proc/ui_screen_materials() - if (!materials.mat_container) - screen = RESEARCH_FABRICATOR_SCREEN_MAIN - return ui_screen_main() - var/list/l = list() - l += "

    Material Storage:

    " - for(var/mat_id in materials.mat_container.materials) - var/datum/material/M = mat_id - var/amount = materials.mat_container.materials[mat_id] - var/ref = REF(M) - l += "* [amount] of [M.name]: " - if(amount >= MINERAL_MATERIAL_AMOUNT) l += "Eject [RDSCREEN_NOBREAK]" - if(amount >= MINERAL_MATERIAL_AMOUNT*5) l += "5x [RDSCREEN_NOBREAK]" - if(amount >= MINERAL_MATERIAL_AMOUNT) l += "All[RDSCREEN_NOBREAK]" - l += "" - l += "
    [RDSCREEN_NOBREAK]" - return l - -/obj/machinery/rnd/production/proc/ui_screen_chemicals() - var/list/l = list() - l += "
    Disposal All Chemicals in Storage" - l += "

    Chemical Storage:

    " - for(var/datum/reagent/R in reagents.reagent_list) - l += "[R.name]: [R.volume]" - l += "Purge" - l += "
    " - return l - -/obj/machinery/rnd/production/proc/ui_screen_search() - var/list/l = list() - var/coeff = efficiency_coeff - l += "

    Search Results:

    " - l += "
    \ - \ - \ - \ - \ -

    " - for(var/datum/design/D in matching_designs) - l += design_menu_entry(D, coeff) - l += "
  • " - return l - -/obj/machinery/rnd/production/proc/design_menu_entry(datum/design/D, coeff) - if(!istype(D)) - return - if(!coeff) - coeff = efficiency_coeff - if(!efficient_with(D.build_path)) - coeff = 1 - var/list/l = list() - var/temp_material - var/c = 50 - var/t - var/all_materials = D.materials + D.reagents_list - for(var/M in all_materials) - t = check_mat(D, M) - temp_material += " | " - if (t < 1) - temp_material += "[all_materials[M]/coeff] [CallMaterialName(M)]" - else - temp_material += " [all_materials[M]/coeff] [CallMaterialName(M)]" - c = min(c,t) - - if (c >= 1) - l += "[D.name][RDSCREEN_NOBREAK]" - if(c >= 5) - l += "x5[RDSCREEN_NOBREAK]" - if(c >= 10) - l += "x10[RDSCREEN_NOBREAK]" - l += "[temp_material][RDSCREEN_NOBREAK]" - else - l += "[D.name][temp_material][RDSCREEN_NOBREAK]" - l += "" - return l - -/obj/machinery/rnd/production/Topic(raw, ls) - if(..()) - return - add_fingerprint(usr) - usr.set_machine(src) - if(ls["switch_screen"]) - screen = text2num(ls["switch_screen"]) - if(ls["build"]) //Causes the Protolathe to build something. - if(busy) - say("Warning: Fabricators busy!") - else - user_try_print_id(ls["build"], ls["amount"]) - if(ls["search"]) //Search for designs with name matching pattern - search(ls["to_search"]) - screen = RESEARCH_FABRICATOR_SCREEN_SEARCH - if(ls["sync_research"]) - update_research() - say("Synchronizing research with host technology database.") - if(ls["category"]) - selected_category = ls["category"] - if(ls["dispose"]) //Causes the protolathe to dispose of a single reagent (all of it) - reagents.del_reagent(ls["dispose"]) - if(ls["disposeall"]) //Causes the protolathe to dispose of all it's reagents. - reagents.clear_reagents() - if(ls["ejectsheet"]) //Causes the protolathe to eject a sheet of material - var/datum/material/M = locate(ls["ejectsheet"]) - eject_sheets(M, ls["eject_amt"]) - updateUsrDialog() - -/obj/machinery/rnd/production/proc/eject_sheets(eject_sheet, eject_amt) - var/datum/component/material_container/mat_container = materials.mat_container - if (!mat_container) - say("No access to material storage, please contact the quartermaster.") - return 0 - if (materials.on_hold()) - say("Mineral access is on hold, please contact the quartermaster.") - return 0 - var/count = mat_container.retrieve_sheets(text2num(eject_amt), eject_sheet, drop_location()) - var/list/matlist = list() - matlist[eject_sheet] = MINERAL_MATERIAL_AMOUNT - materials.silo_log(src, "ejected", -count, "sheets", matlist) - return count - -/obj/machinery/rnd/production/proc/ui_screen_main() - var/list/l = list() - l += "
    \ - \ - \ - \ - \ - \ -

    " - - l += list_categories(categories, RESEARCH_FABRICATOR_SCREEN_CATEGORYVIEW) - - return l - -/obj/machinery/rnd/production/proc/ui_screen_category_view() - if(!selected_category) - return ui_screen_main() - var/list/l = list() - l += "

    Browsing [selected_category]:

    " - var/coeff = efficiency_coeff - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(!(selected_category in D.category)|| !(D.build_type & allowed_buildtypes)) - continue - if(!(isnull(allowed_department_flags) || (D.departmental_flags & allowed_department_flags))) - continue - l += design_menu_entry(D, coeff) - l += "
    " - return l - -/obj/machinery/rnd/production/proc/list_categories(list/categories, menu_num) - if(!categories) - return - - var/line_length = 1 - var/list/l = "" - - for(var/C in categories) - if(line_length > 2) - l += "" - line_length = 1 - - l += "" - line_length++ - - l += "
    [C]
    " - return l diff --git a/code/modules/research/machinery/circuit_imprinter.dm b/code/modules/research/machinery/circuit_imprinter.dm deleted file mode 100644 index b5807cb142..0000000000 --- a/code/modules/research/machinery/circuit_imprinter.dm +++ /dev/null @@ -1,32 +0,0 @@ -/obj/machinery/rnd/production/circuit_imprinter - name = "circuit imprinter" - desc = "" - icon_state = "circuit_imprinter" - circuit = /obj/item/circuitboard/machine/circuit_imprinter - categories = list( - "AI Modules", - "Computer Boards", - "Teleportation Machinery", - "Medical Machinery", - "Engineering Machinery", - "Exosuit Modules", - "Hydroponics Machinery", - "Subspace Telecomms", - "Research Machinery", - "Misc. Machinery", - "Computer Parts" - ) - production_animation = "circuit_imprinter_ani" - allowed_buildtypes = IMPRINTER - -/obj/machinery/rnd/production/circuit_imprinter/disconnect_console() - linked_console.linked_imprinter = null - ..() - -/obj/machinery/rnd/production/circuit_imprinter/calculate_efficiency() - . = ..() - var/total_rating = 0 - for(var/obj/item/stock_parts/manipulator/M in component_parts) - total_rating += M.rating * 2 //There is only one. - total_rating = max(1, total_rating) - efficiency_coeff = total_rating diff --git a/code/modules/research/machinery/departmental_circuit_imprinter.dm b/code/modules/research/machinery/departmental_circuit_imprinter.dm deleted file mode 100644 index c237f8e4a0..0000000000 --- a/code/modules/research/machinery/departmental_circuit_imprinter.dm +++ /dev/null @@ -1,13 +0,0 @@ -/obj/machinery/rnd/production/circuit_imprinter/department - name = "department circuit imprinter" - desc = "" - icon_state = "circuit_imprinter" - circuit = /obj/item/circuitboard/machine/circuit_imprinter/department - requires_console = FALSE - consoleless_interface = TRUE - -/obj/machinery/rnd/production/circuit_imprinter/department/science - name = "department circuit imprinter (Science)" - circuit = /obj/item/circuitboard/machine/circuit_imprinter/department/science - allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SCIENCE - department_tag = "Science" diff --git a/code/modules/research/machinery/departmental_protolathe.dm b/code/modules/research/machinery/departmental_protolathe.dm deleted file mode 100644 index 6ebca4b65e..0000000000 --- a/code/modules/research/machinery/departmental_protolathe.dm +++ /dev/null @@ -1,43 +0,0 @@ -/obj/machinery/rnd/production/protolathe/department - name = "department protolathe" - desc = "" - icon_state = "protolathe" - circuit = /obj/item/circuitboard/machine/protolathe/department - requires_console = FALSE - consoleless_interface = TRUE - -/obj/machinery/rnd/production/protolathe/department/engineering - name = "department protolathe (Engineering)" - allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_ENGINEERING - department_tag = "Engineering" - circuit = /obj/item/circuitboard/machine/protolathe/department/engineering - -/obj/machinery/rnd/production/protolathe/department/service - name = "department protolathe (Service)" - allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SERVICE - department_tag = "Service" - circuit = /obj/item/circuitboard/machine/protolathe/department/service - -/obj/machinery/rnd/production/protolathe/department/medical - name = "department protolathe (Medical)" - allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_MEDICAL - department_tag = "Medical" - circuit = /obj/item/circuitboard/machine/protolathe/department/medical - -/obj/machinery/rnd/production/protolathe/department/cargo - name = "department protolathe (Cargo)" - allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_CARGO - department_tag = "Cargo" - circuit = /obj/item/circuitboard/machine/protolathe/department/cargo - -/obj/machinery/rnd/production/protolathe/department/science - name = "department protolathe (Science)" - allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SCIENCE - department_tag = "Science" - circuit = /obj/item/circuitboard/machine/protolathe/department/science - -/obj/machinery/rnd/production/protolathe/department/security - name = "department protolathe (Security)" - allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SECURITY - department_tag = "Security" - circuit = /obj/item/circuitboard/machine/protolathe/department/security diff --git a/code/modules/research/machinery/departmental_techfab.dm b/code/modules/research/machinery/departmental_techfab.dm deleted file mode 100644 index a708a847e4..0000000000 --- a/code/modules/research/machinery/departmental_techfab.dm +++ /dev/null @@ -1,41 +0,0 @@ -/obj/machinery/rnd/production/techfab/department - name = "department techfab" - desc = "" - icon_state = "protolathe" - circuit = /obj/item/circuitboard/machine/techfab/department - -/obj/machinery/rnd/production/techfab/department/engineering - name = "department techfab (Engineering)" - allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_ENGINEERING - department_tag = "Engineering" - circuit = /obj/item/circuitboard/machine/techfab/department/engineering - -/obj/machinery/rnd/production/techfab/department/service - name = "department techfab (Service)" - allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SERVICE - department_tag = "Service" - circuit = /obj/item/circuitboard/machine/techfab/department/service - -/obj/machinery/rnd/production/techfab/department/medical - name = "department techfab (Medical)" - allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_MEDICAL - department_tag = "Medical" - circuit = /obj/item/circuitboard/machine/techfab/department/medical - -/obj/machinery/rnd/production/techfab/department/cargo - name = "department techfab (Cargo)" - allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_CARGO - department_tag = "Cargo" - circuit = /obj/item/circuitboard/machine/techfab/department/cargo - -/obj/machinery/rnd/production/techfab/department/science - name = "department techfab (Science)" - allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SCIENCE - department_tag = "Science" - circuit = /obj/item/circuitboard/machine/techfab/department/science - -/obj/machinery/rnd/production/techfab/department/security - name = "department techfab (Security)" - allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SECURITY - department_tag = "Security" - circuit = /obj/item/circuitboard/machine/techfab/department/security diff --git a/code/modules/research/machinery/protolathe.dm b/code/modules/research/machinery/protolathe.dm deleted file mode 100644 index 84c32d53d1..0000000000 --- a/code/modules/research/machinery/protolathe.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/machinery/rnd/production/protolathe - name = "protolathe" - desc = "" - icon_state = "protolathe" - circuit = /obj/item/circuitboard/machine/protolathe - categories = list( - "Power Designs", - "Medical Designs", - "Bluespace Designs", - "Stock Parts", - "Equipment", - "Tool Designs", - "Mining Designs", - "Electronics", - "Weapons", - "Ammo", - "Firing Pins", - "Computer Parts" - ) - production_animation = "protolathe_n" - allowed_buildtypes = PROTOLATHE - -/obj/machinery/rnd/production/protolathe/disconnect_console() - linked_console.linked_lathe = null - ..() diff --git a/code/modules/research/machinery/techfab.dm b/code/modules/research/machinery/techfab.dm deleted file mode 100644 index ebe1b76c95..0000000000 --- a/code/modules/research/machinery/techfab.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/machinery/rnd/production/techfab - name = "technology fabricator" - desc = "" - icon_state = "protolathe" - circuit = /obj/item/circuitboard/machine/techfab - categories = list( - "Power Designs", - "Medical Designs", - "Bluespace Designs", - "Stock Parts", - "Equipment", - "Tool Designs", - "Mining Designs", - "Electronics", - "Weapons", - "Ammo", - "Firing Pins", - "Computer Parts", - "AI Modules", - "Computer Boards", - "Teleportation Machinery", - "Medical Machinery", - "Engineering Machinery", - "Exosuit Modules", - "Hydroponics Machinery", - "Subspace Telecomms", - "Research Machinery", - "Misc. Machinery", - "Computer Parts" - ) - console_link = FALSE - production_animation = "protolathe_n" - requires_console = FALSE - consoleless_interface = TRUE - allowed_buildtypes = PROTOLATHE | IMPRINTER diff --git a/code/modules/research/nanites/nanite_chamber.dm b/code/modules/research/nanites/nanite_chamber.dm deleted file mode 100644 index a28eb24c77..0000000000 --- a/code/modules/research/nanites/nanite_chamber.dm +++ /dev/null @@ -1,210 +0,0 @@ -/obj/machinery/nanite_chamber - name = "nanite chamber" - desc = "" - circuit = /obj/item/circuitboard/machine/nanite_chamber - icon = 'icons/obj/machines/nanite_chamber.dmi' - icon_state = "nanite_chamber" - layer = ABOVE_WINDOW_LAYER - use_power = IDLE_POWER_USE - anchored = TRUE - density = TRUE - idle_power_usage = 50 - active_power_usage = 300 - - var/obj/machinery/computer/nanite_chamber_control/console - var/locked = FALSE - var/breakout_time = 1200 - var/scan_level - var/busy = FALSE - var/busy_icon_state - var/busy_message - var/message_cooldown = 0 - -/obj/machinery/nanite_chamber/Initialize() - . = ..() - occupant_typecache = GLOB.typecache_living - -/obj/machinery/nanite_chamber/RefreshParts() - scan_level = 0 - for(var/obj/item/stock_parts/scanning_module/P in component_parts) - scan_level += P.rating - -/obj/machinery/nanite_chamber/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Scanning module has been upgraded to level [scan_level]." - -/obj/machinery/nanite_chamber/proc/set_busy(status, message, working_icon) - busy = status - busy_message = message - busy_icon_state = working_icon - update_icon() - -/obj/machinery/nanite_chamber/proc/set_safety(threshold) - if(!occupant) - return - SEND_SIGNAL(occupant, COMSIG_NANITE_SET_SAFETY, threshold) - -/obj/machinery/nanite_chamber/proc/set_cloud(cloud_id) - if(!occupant) - return - SEND_SIGNAL(occupant, COMSIG_NANITE_SET_CLOUD, cloud_id) - -/obj/machinery/nanite_chamber/proc/inject_nanites() - if(stat & (NOPOWER|BROKEN)) - return - if((stat & MAINT) || panel_open) - return - if(!occupant || busy) - return - - var/locked_state = locked - locked = TRUE - - //TODO OMINOUS MACHINE SOUNDS - set_busy(TRUE, "Initializing injection protocol...", "[initial(icon_state)]_raising") - addtimer(CALLBACK(src, PROC_REF(set_busy), TRUE, "Analyzing host bio-structure...", "[initial(icon_state)]_active"),20) - addtimer(CALLBACK(src, PROC_REF(set_busy), TRUE, "Priming nanites...", "[initial(icon_state)]_active"),40) - addtimer(CALLBACK(src, PROC_REF(set_busy), TRUE, "Injecting...", "[initial(icon_state)]_active"),70) - addtimer(CALLBACK(src, PROC_REF(set_busy), TRUE, "Activating nanites...", "[initial(icon_state)]_falling"),110) - addtimer(CALLBACK(src, PROC_REF(complete_injection), locked_state),130) - -/obj/machinery/nanite_chamber/proc/complete_injection(locked_state) - //TODO MACHINE DING - locked = locked_state - set_busy(FALSE) - if(!occupant) - return - occupant.AddComponent(/datum/component/nanites, 100) - -/obj/machinery/nanite_chamber/proc/remove_nanites(datum/nanite_program/NP) - if(stat & (NOPOWER|BROKEN)) - return - if((stat & MAINT) || panel_open) - return - if(!occupant || busy) - return - - var/locked_state = locked - locked = TRUE - - //TODO OMINOUS MACHINE SOUNDS - set_busy(TRUE, "Initializing cleanup protocol...", "[initial(icon_state)]_raising") - addtimer(CALLBACK(src, PROC_REF(set_busy), TRUE, "Analyzing host bio-structure...", "[initial(icon_state)]_active"),20) - addtimer(CALLBACK(src, PROC_REF(set_busy), TRUE, "Pinging nanites...", "[initial(icon_state)]_active"),40) - addtimer(CALLBACK(src, PROC_REF(set_busy), TRUE, "Initiating graceful self-destruct sequence...", "[initial(icon_state)]_active"),70) - addtimer(CALLBACK(src, PROC_REF(set_busy), TRUE, "Removing debris...", "[initial(icon_state)]_falling"),110) - addtimer(CALLBACK(src, PROC_REF(complete_removal), locked_state),130) - -/obj/machinery/nanite_chamber/proc/complete_removal(locked_state) - //TODO MACHINE DING - locked = locked_state - set_busy(FALSE) - if(!occupant) - return - SEND_SIGNAL(occupant, COMSIG_NANITE_DELETE) - -/obj/machinery/nanite_chamber/update_icon() - cut_overlays() - - if((stat & MAINT) || panel_open) - add_overlay("maint") - - else if(!(stat & (NOPOWER|BROKEN))) - if(busy || locked) - add_overlay("red") - if(locked) - add_overlay("bolted") - else - add_overlay("green") - - //running and someone in there - if(occupant) - if(busy) - icon_state = busy_icon_state - else - icon_state = initial(icon_state)+ "_occupied" - return - - //running - icon_state = initial(icon_state)+ (state_open ? "_open" : "") - -/obj/machinery/nanite_chamber/proc/toggle_open(mob/user) - if(panel_open) - to_chat(user, "Close the maintenance panel first.") - return - - if(state_open) - close_machine() - return - - else if(locked) - to_chat(user, "The bolts are locked down, securing the door shut.") - return - - open_machine() - -/obj/machinery/nanite_chamber/container_resist(mob/living/user) - if(!locked) - open_machine() - return - if(busy) - return - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT - user.visible_message("I see [user] kicking against the door of [src]!", \ - "I lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)", \ - "I hear a metallic creaking from [src].") - if(do_after(user,(breakout_time), target = src)) - if(!user || user.stat != CONSCIOUS || user.loc != src || state_open || !locked || busy) - return - locked = FALSE - user.visible_message("[user] successfully broke out of [src]!", \ - "I successfully break out of [src]!") - open_machine() - -/obj/machinery/nanite_chamber/close_machine(mob/living/carbon/user) - if(!state_open) - return FALSE - - ..(user) - return TRUE - -/obj/machinery/nanite_chamber/open_machine() - if(state_open) - return FALSE - - ..() - - return TRUE - -/obj/machinery/nanite_chamber/relaymove(mob/user as mob) - if(user.stat || locked) - if(message_cooldown <= world.time) - message_cooldown = world.time + 50 - to_chat(user, "[src]'s door won't budge!") - return - open_machine() - -/obj/machinery/nanite_chamber/attackby(obj/item/I, mob/user, params) - if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, I))//sent icon_state is irrelevant... - update_icon()//..since we're updating the icon here, since the scanner can be unpowered when opened/closed - return - - if(default_pry_open(I)) - return - - if(default_deconstruction_crowbar(I)) - return - - return ..() - -/obj/machinery/nanite_chamber/interact(mob/user) - toggle_open(user) - -/obj/machinery/nanite_chamber/MouseDrop_T(mob/target, mob/user) - if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK) || !Adjacent(target) || !user.Adjacent(target) || !iscarbon(target)) - return - if(close_machine(target)) - log_combat(user, target, "inserted", null, "into [src].") - add_fingerprint(user) diff --git a/code/modules/research/nanites/nanite_chamber_computer.dm b/code/modules/research/nanites/nanite_chamber_computer.dm deleted file mode 100644 index 5bf7f7aa7a..0000000000 --- a/code/modules/research/nanites/nanite_chamber_computer.dm +++ /dev/null @@ -1,99 +0,0 @@ -/obj/machinery/computer/nanite_chamber_control - name = "nanite chamber control console" - desc = "" - var/obj/machinery/nanite_chamber/chamber - var/obj/item/disk/nanite_program/disk - icon_screen = "nanite_chamber_control" - circuit = /obj/item/circuitboard/computer/nanite_chamber_control - ui_x = 550 - ui_y = 800 - -/obj/machinery/computer/nanite_chamber_control/Initialize() - . = ..() - find_chamber() - -/obj/machinery/computer/nanite_chamber_control/proc/find_chamber() - for(var/direction in GLOB.cardinals) - var/C = locate(/obj/machinery/nanite_chamber, get_step(src, direction)) - if(C) - var/obj/machinery/nanite_chamber/NC = C - chamber = NC - NC.console = src - -/obj/machinery/computer/nanite_chamber_control/interact() - if(!chamber) - find_chamber() - ..() - -/obj/machinery/computer/nanite_chamber_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "nanite_chamber_control", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/computer/nanite_chamber_control/ui_data() - var/list/data = list() - - if(!chamber) - data["status_msg"] = "No chamber detected." - return data - - if(!chamber.occupant) - data["status_msg"] = "No occupant detected." - return data - - var/mob/living/L = chamber.occupant - - if(!(L.mob_biotypes & (MOB_ORGANIC|MOB_UNDEAD))) - data["status_msg"] = "Occupant not compatible with nanites." - return data - - if(chamber.busy) - data["status_msg"] = chamber.busy_message - return data - - data["scan_level"] = chamber.scan_level - data["locked"] = chamber.locked - data["occupant_name"] = chamber.occupant.name - - SEND_SIGNAL(L, COMSIG_NANITE_UI_DATA, data, chamber.scan_level) - - return data - -/obj/machinery/computer/nanite_chamber_control/ui_act(action, params) - if(..()) - return - switch(action) - if("toggle_lock") - chamber.locked = !chamber.locked - chamber.update_icon() - . = TRUE - if("set_safety") - var/threshold = input("Set safety threshold (0-500):", name, null) as null|num - if(!isnull(threshold)) - chamber.set_safety(CLAMP(round(threshold, 1),0,500)) - playsound(src, "terminal_type", 25, FALSE) - chamber.occupant.investigate_log("'s nanites' safety threshold was set to [threshold] by [key_name(usr)] via [src] at [AREACOORD(src)].", INVESTIGATE_NANITES) - . = TRUE - if("set_cloud") - var/cloud_id = input("Set cloud ID (1-100, 0 to disable):", name, null) as null|num - if(!isnull(cloud_id)) - chamber.set_cloud(CLAMP(round(cloud_id, 1),0,100)) - playsound(src, "terminal_type", 25, FALSE) - chamber.occupant.investigate_log("'s nanites' cloud id was set to [cloud_id] by [key_name(usr)] via [src] at [AREACOORD(src)].", INVESTIGATE_NANITES) - . = TRUE - if("connect_chamber") - find_chamber() - . = TRUE - if("remove_nanites") - playsound(src, 'sound/blank.ogg', 25, FALSE) - chamber.remove_nanites() - log_combat(usr, chamber.occupant, "cleared nanites from", null, "via [src]") - chamber.occupant.investigate_log("'s nanites were cleared by [key_name(usr)] via [src] at [AREACOORD(src)].", INVESTIGATE_NANITES) - . = TRUE - if("nanite_injection") - playsound(src, 'sound/blank.ogg', 25, FALSE) - chamber.inject_nanites() - log_combat(usr, chamber.occupant, "injected", null, "with nanites via [src]") - chamber.occupant.investigate_log("was injected with nanites by [key_name(usr)] via [src] at [AREACOORD(src)].", INVESTIGATE_NANITES) - . = TRUE diff --git a/code/modules/research/nanites/nanite_cloud_controller.dm b/code/modules/research/nanites/nanite_cloud_controller.dm deleted file mode 100644 index 8ab9c23382..0000000000 --- a/code/modules/research/nanites/nanite_cloud_controller.dm +++ /dev/null @@ -1,242 +0,0 @@ -/obj/machinery/computer/nanite_cloud_controller - name = "nanite cloud controller" - desc = "" - icon = 'icons/obj/machines/research.dmi' - icon_state = "nanite_cloud_controller" - circuit = /obj/item/circuitboard/computer/nanite_cloud_controller - ui_x = 600 - ui_y = 800 - - var/obj/item/disk/nanite_program/disk - var/list/datum/nanite_cloud_backup/cloud_backups = list() - var/current_view = 0 //0 is the main menu, any other number is the page of the backup with that ID - -/obj/machinery/computer/nanite_cloud_controller/Destroy() - QDEL_LIST(cloud_backups) //rip backups - eject() - return ..() - -/obj/machinery/computer/nanite_cloud_controller/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/disk/nanite_program)) - var/obj/item/disk/nanite_program/N = I - if(disk) - eject(user) - if(user.transferItemToLoc(N, src)) - to_chat(user, "I insert [N] into [src].") - playsound(src, 'sound/blank.ogg', 50, FALSE) - disk = N - else - ..() - -/obj/machinery/computer/nanite_cloud_controller/proc/eject(mob/living/user) - if(!disk) - return - if(!istype(user) || !Adjacent(user) ||!user.put_in_active_hand(disk)) - disk.forceMove(drop_location()) - disk = null - -/obj/machinery/computer/nanite_cloud_controller/proc/get_backup(cloud_id) - for(var/I in cloud_backups) - var/datum/nanite_cloud_backup/backup = I - if(backup.cloud_id == cloud_id) - return backup - -/obj/machinery/computer/nanite_cloud_controller/proc/generate_backup(cloud_id, mob/user) - if(SSnanites.get_cloud_backup(cloud_id, TRUE)) - to_chat(user, "Cloud ID already registered.") - return - - var/datum/nanite_cloud_backup/backup = new(src) - var/datum/component/nanites/cloud_copy = new(backup) - backup.cloud_id = cloud_id - backup.nanites = cloud_copy - investigate_log("[key_name(user)] created a new nanite cloud backup with id #[cloud_id]", INVESTIGATE_NANITES) - -/obj/machinery/computer/nanite_cloud_controller/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "nanite_cloud_control", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/computer/nanite_cloud_controller/ui_data() - var/list/data = list() - if(disk) - data["has_disk"] = TRUE - var/list/disk_data = list() - var/datum/nanite_program/P = disk.program - if(P) - data["has_program"] = TRUE - disk_data["name"] = P.name - disk_data["desc"] = P.desc - disk_data["use_rate"] = P.use_rate - disk_data["can_trigger"] = P.can_trigger - disk_data["trigger_cost"] = P.trigger_cost - disk_data["trigger_cooldown"] = P.trigger_cooldown / 10 - - disk_data["activated"] = P.activated - disk_data["activation_delay"] = P.activation_delay - disk_data["timer"] = P.timer - disk_data["activation_code"] = P.activation_code - disk_data["deactivation_code"] = P.deactivation_code - disk_data["kill_code"] = P.kill_code - disk_data["trigger_code"] = P.trigger_code - disk_data["timer_type"] = P.get_timer_type_text() - - var/list/extra_settings = list() - for(var/X in P.extra_settings) - var/list/setting = list() - setting["name"] = X - setting["value"] = P.get_extra_setting(X) - extra_settings += list(setting) - disk_data["extra_settings"] = extra_settings - if(LAZYLEN(extra_settings)) - disk_data["has_extra_settings"] = TRUE - if(istype(P, /datum/nanite_program/sensor)) - var/datum/nanite_program/sensor/sensor = P - if(sensor.can_rule) - disk_data["can_rule"] = TRUE - data["disk"] = disk_data - - data["current_view"] = current_view - if(current_view) - var/datum/nanite_cloud_backup/backup = get_backup(current_view) - if(backup) - var/datum/component/nanites/nanites = backup.nanites - data["cloud_backup"] = TRUE - var/list/cloud_programs = list() - var/id = 1 - for(var/datum/nanite_program/P in nanites.programs) - var/list/cloud_program = list() - cloud_program["name"] = P.name - cloud_program["desc"] = P.desc - cloud_program["id"] = id - cloud_program["use_rate"] = P.use_rate - cloud_program["can_trigger"] = P.can_trigger - cloud_program["trigger_cost"] = P.trigger_cost - cloud_program["trigger_cooldown"] = P.trigger_cooldown / 10 - cloud_program["activated"] = P.activated - cloud_program["activation_delay"] = P.activation_delay - cloud_program["timer"] = P.timer - cloud_program["timer_type"] = P.get_timer_type_text() - cloud_program["activation_code"] = P.activation_code - cloud_program["deactivation_code"] = P.deactivation_code - cloud_program["kill_code"] = P.kill_code - cloud_program["trigger_code"] = P.trigger_code - var/list/rules = list() - var/rule_id = 1 - for(var/X in P.rules) - var/datum/nanite_rule/nanite_rule = X - var/list/rule = list() - rule["display"] = nanite_rule.display() - rule["program_id"] = id - rule["id"] = rule_id - rules += list(rule) - rule_id++ - cloud_program["rules"] = rules - if(LAZYLEN(rules)) - cloud_program["has_rules"] = TRUE - - var/list/extra_settings = list() - for(var/X in P.extra_settings) - var/list/setting = list() - setting["name"] = X - setting["value"] = P.get_extra_setting(X) - extra_settings += list(setting) - cloud_program["extra_settings"] = extra_settings - if(LAZYLEN(extra_settings)) - cloud_program["has_extra_settings"] = TRUE - id++ - cloud_programs += list(cloud_program) - data["cloud_programs"] = cloud_programs - else - var/list/backup_list = list() - for(var/X in cloud_backups) - var/datum/nanite_cloud_backup/backup = X - var/list/cloud_backup = list() - cloud_backup["cloud_id"] = backup.cloud_id - backup_list += list(cloud_backup) - data["cloud_backups"] = backup_list - return data - -/obj/machinery/computer/nanite_cloud_controller/ui_act(action, params) - if(..()) - return - switch(action) - if("eject") - eject(usr) - . = TRUE - if("set_view") - current_view = text2num(params["view"]) - . = TRUE - if("create_backup") - var/cloud_id = input("Choose a cloud ID (1-100):", name, null) as null|num - if(!isnull(cloud_id)) - playsound(src, 'sound/blank.ogg', 50, FALSE) - cloud_id = CLAMP(round(cloud_id, 1),1,100) - generate_backup(cloud_id, usr) - . = TRUE - if("delete_backup") - var/datum/nanite_cloud_backup/backup = get_backup(current_view) - if(backup) - playsound(src, 'sound/blank.ogg', 50, FALSE) - qdel(backup) - investigate_log("[key_name(usr)] deleted the nanite cloud backup #[current_view]", INVESTIGATE_NANITES) - . = TRUE - if("upload_program") - if(disk && disk.program) - var/datum/nanite_cloud_backup/backup = get_backup(current_view) - if(backup) - playsound(src, 'sound/blank.ogg', 50, FALSE) - var/datum/component/nanites/nanites = backup.nanites - nanites.add_program(null, disk.program.copy()) - investigate_log("[key_name(usr)] uploaded program [disk.program.name] to cloud #[current_view]", INVESTIGATE_NANITES) - . = TRUE - if("remove_program") - var/datum/nanite_cloud_backup/backup = get_backup(current_view) - if(backup) - playsound(src, 'sound/blank.ogg', 50, FALSE) - var/datum/component/nanites/nanites = backup.nanites - var/datum/nanite_program/P = nanites.programs[text2num(params["program_id"])] - investigate_log("[key_name(usr)] deleted program [P.name] from cloud #[current_view]", INVESTIGATE_NANITES) - qdel(P) - . = TRUE - if("add_rule") - if(disk && disk.program && istype(disk.program, /datum/nanite_program/sensor)) - var/datum/nanite_program/sensor/rule_template = disk.program - if(!rule_template.can_rule) - return - var/datum/nanite_cloud_backup/backup = get_backup(current_view) - if(backup) - playsound(src, 'sound/blank.ogg', 50, 0) - var/datum/component/nanites/nanites = backup.nanites - var/datum/nanite_program/P = nanites.programs[text2num(params["program_id"])] - var/datum/nanite_rule/rule = rule_template.make_rule(P) - - investigate_log("[key_name(usr)] added rule [rule.display()] to program [P.name] in cloud #[current_view]", INVESTIGATE_NANITES) - . = TRUE - if("remove_rule") - var/datum/nanite_cloud_backup/backup = get_backup(current_view) - if(backup) - playsound(src, 'sound/blank.ogg', 50, 0) - var/datum/component/nanites/nanites = backup.nanites - var/datum/nanite_program/P = nanites.programs[text2num(params["program_id"])] - var/datum/nanite_rule/rule = P.rules[text2num(params["rule_id"])] - rule.remove() - - investigate_log("[key_name(usr)] removed rule [rule.display()] from program [P.name] in cloud #[current_view]", INVESTIGATE_NANITES) - . = TRUE - -/datum/nanite_cloud_backup - var/cloud_id = 0 - var/datum/component/nanites/nanites - var/obj/machinery/computer/nanite_cloud_controller/storage - -/datum/nanite_cloud_backup/New(obj/machinery/computer/nanite_cloud_controller/_storage) - storage = _storage - storage.cloud_backups += src - SSnanites.cloud_backups += src - -/datum/nanite_cloud_backup/Destroy() - storage.cloud_backups -= src - SSnanites.cloud_backups -= src - return ..() diff --git a/code/modules/research/nanites/nanite_hijacker.dm b/code/modules/research/nanites/nanite_hijacker.dm deleted file mode 100644 index 8ac6cf13c0..0000000000 --- a/code/modules/research/nanites/nanite_hijacker.dm +++ /dev/null @@ -1,156 +0,0 @@ -/obj/item/nanite_hijacker - name = "nanite remote control" //fake name - desc = "" - w_class = WEIGHT_CLASS_SMALL - icon = 'icons/obj/device.dmi' - icon_state = "nanite_remote" - item_flags = NOBLUDGEON - var/obj/item/disk/nanite_program/disk - var/datum/nanite_program/program - -/obj/item/nanite_hijacker/AltClick(mob/user) - . = ..() - if(!user.canUseTopic(src, BE_CLOSE)) - return - if(disk) - eject() - -/obj/item/nanite_hijacker/examine(mob/user) - . = ..() - if(disk) - . += "Alt-click [src] to eject the disk." - -/obj/item/nanite_hijacker/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/disk/nanite_program)) - var/obj/item/disk/nanite_program/N = I - if(disk) - eject() - if(user.transferItemToLoc(N, src)) - to_chat(user, "I insert [N] into [src].") - disk = N - program = N.program - else - ..() - -/obj/item/nanite_hijacker/proc/eject(mob/living/user) - if(!disk) - return - if(!istype(user) || !Adjacent(user) || !user.put_in_hand(disk)) - disk.forceMove(drop_location()) - disk = null - program = null - -/obj/item/nanite_hijacker/afterattack(atom/target, mob/user, etc) - if(!disk || !disk.program) - return - if(isliving(target)) - var/success = SEND_SIGNAL(target, COMSIG_NANITE_ADD_PROGRAM, program.copy()) - switch(success) - if(NONE) - to_chat(user, "I don't detect any nanites in [target].") - if(COMPONENT_PROGRAM_INSTALLED) - to_chat(user, "I insert the currently loaded program into [target]'s nanites.") - if(COMPONENT_PROGRAM_NOT_INSTALLED) - to_chat(user, "I try to insert the currently loaded program into [target]'s nanites, but the installation fails.") - -//Same UI as the nanite programmer, as it pretty much does the same -/obj/item/nanite_hijacker/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "nanite_programmer", "Internal Nanite Programmer", 420, 800, master_ui, state) - ui.open() - -/obj/item/nanite_hijacker/ui_data() - var/list/data = list() - data["has_disk"] = istype(disk) - data["has_program"] = istype(program) - if(program) - data["name"] = program.name - data["desc"] = program.desc - data["use_rate"] = program.use_rate - data["can_trigger"] = program.can_trigger - data["trigger_cost"] = program.trigger_cost - data["trigger_cooldown"] = program.trigger_cooldown / 10 - - data["activated"] = program.activated - data["activation_delay"] = program.activation_delay - data["timer"] = program.timer - data["activation_code"] = program.activation_code - data["deactivation_code"] = program.deactivation_code - data["kill_code"] = program.kill_code - data["trigger_code"] = program.trigger_code - data["timer_type"] = program.get_timer_type_text() - - var/list/extra_settings = list() - for(var/X in program.extra_settings) - var/list/setting = list() - setting["name"] = X - setting["value"] = program.get_extra_setting(X) - extra_settings += list(setting) - data["extra_settings"] = extra_settings - if(LAZYLEN(extra_settings)) - data["has_extra_settings"] = TRUE - - return data - -/obj/item/nanite_hijacker/ui_act(action, params) - if(..()) - return - switch(action) - if("eject") - eject(usr) - . = TRUE - if("toggle_active") - program.activated = !program.activated //we don't use the activation procs since we aren't in a mob - if(program.activated) - program.activation_delay = 0 - . = TRUE - if("set_code") - var/new_code = input("Set code (0000-9999):", name, null) as null|num - if(!isnull(new_code)) - new_code = CLAMP(round(new_code, 1),0,9999) - else - return - - var/target_code = params["target_code"] - switch(target_code) - if("activation") - program.activation_code = CLAMP(round(new_code, 1),0,9999) - if("deactivation") - program.deactivation_code = CLAMP(round(new_code, 1),0,9999) - if("kill") - program.kill_code = CLAMP(round(new_code, 1),0,9999) - if("trigger") - program.trigger_code = CLAMP(round(new_code, 1),0,9999) - . = TRUE - if("set_extra_setting") - program.set_extra_setting(usr, params["target_setting"]) - . = TRUE - if("set_activation_delay") - var/delay = input("Set activation delay in seconds (0-1800):", name, program.activation_delay) as null|num - if(!isnull(delay)) - delay = CLAMP(round(delay, 1),0,1800) - program.activation_delay = delay - if(delay) - program.activated = FALSE - . = TRUE - if("set_timer") - var/timer = input("Set timer in seconds (10-3600):", name, program.timer) as null|num - if(!isnull(timer)) - if(!timer == 0) - timer = CLAMP(round(timer, 1),10,3600) - program.timer = timer - . = TRUE - if("set_timer_type") - var/new_type = input("Choose the timer effect","Timer Effect") as null|anything in list("Deactivate","Self-Delete","Trigger","Reset Activation Timer") - if(new_type) - switch(new_type) - if("Deactivate") - program.timer_type = NANITE_TIMER_DEACTIVATE - if("Self-Delete") - program.timer_type = NANITE_TIMER_SELFDELETE - if("Trigger") - program.timer_type = NANITE_TIMER_TRIGGER - if("Reset Activation Timer") - program.timer_type = NANITE_TIMER_RESET - . = TRUE diff --git a/code/modules/research/nanites/nanite_misc_items.dm b/code/modules/research/nanites/nanite_misc_items.dm deleted file mode 100644 index c075e180d4..0000000000 --- a/code/modules/research/nanites/nanite_misc_items.dm +++ /dev/null @@ -1,9 +0,0 @@ -/obj/item/nanite_injector - name = "nanite injector (FOR TESTING)" - desc = "" - w_class = WEIGHT_CLASS_SMALL - icon = 'icons/obj/device.dmi' - icon_state = "nanite_remote" - -/obj/item/nanite_injector/attack_self(mob/user) - user.AddComponent(/datum/component/nanites, 150) diff --git a/code/modules/research/nanites/nanite_program_hub.dm b/code/modules/research/nanites/nanite_program_hub.dm deleted file mode 100644 index 0997e34f63..0000000000 --- a/code/modules/research/nanites/nanite_program_hub.dm +++ /dev/null @@ -1,120 +0,0 @@ -/obj/machinery/nanite_program_hub - name = "nanite program hub" - desc = "" - icon = 'icons/obj/machines/research.dmi' - icon_state = "nanite_program_hub" - use_power = IDLE_POWER_USE - anchored = TRUE - density = TRUE - circuit = /obj/item/circuitboard/machine/nanite_program_hub - ui_x = 500 - ui_y = 700 - - var/obj/item/disk/nanite_program/disk - var/datum/techweb/linked_techweb - var/current_category = "Main" - var/detail_view = FALSE - var/categories = list( - list(name = "Utility Nanites"), - list(name = "Medical Nanites"), - list(name = "Sensor Nanites"), - list(name = "Augmentation Nanites"), - list(name = "Suppression Nanites"), - list(name = "Weaponized Nanites") - ) - -/obj/machinery/nanite_program_hub/Initialize() - . = ..() - linked_techweb = SSresearch.science_tech - -/obj/machinery/nanite_program_hub/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/disk/nanite_program)) - var/obj/item/disk/nanite_program/N = I - if(disk) - eject(user) - if(user.transferItemToLoc(N, src)) - to_chat(user, "I insert [N] into [src].") - playsound(src, 'sound/blank.ogg', 50, FALSE) - disk = N - else - ..() - -/obj/machinery/nanite_program_hub/proc/eject(mob/living/user) - if(!disk) - return - if(!istype(user) || !Adjacent(user) || !user.put_in_active_hand(disk)) - disk.forceMove(drop_location()) - disk = null - -/obj/machinery/nanite_program_hub/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "nanite_program_hub", name, ui_x, ui_y, master_ui, state) - ui.set_autoupdate(FALSE) //to avoid making the whole program list every second - ui.open() - -/obj/machinery/nanite_program_hub/ui_data() - var/list/data = list() - if(disk) - data["has_disk"] = TRUE - var/list/disk_data = list() - var/datum/nanite_program/P = disk.program - if(P) - data["has_program"] = TRUE - disk_data["name"] = P.name - disk_data["desc"] = P.desc - data["disk"] = disk_data - - data["detail_view"] = detail_view - data["category"] = current_category - - if(current_category != "Main") - var/list/program_list = list() - for(var/i in linked_techweb.researched_designs) - var/datum/design/nanites/D = SSresearch.techweb_design_by_id(i) - if(!istype(D)) - continue - if(current_category in D.category) - var/list/program_design = list() - program_design["id"] = D.id - program_design["name"] = D.name - program_design["desc"] = D.desc - program_list += list(program_design) - data["program_list"] = program_list - else - data["categories"] = categories - - return data - -/obj/machinery/nanite_program_hub/ui_act(action, params) - if(..()) - return - switch(action) - if("eject") - eject(usr) - . = TRUE - if("download") - if(!disk) - return - var/datum/design/nanites/downloaded = linked_techweb.isDesignResearchedID(params["program_id"]) //check if it's a valid design - if(!istype(downloaded)) - return - if(disk.program) - qdel(disk.program) - disk.program = new downloaded.program_type - disk.name = "[initial(disk.name)] \[[disk.program.name]\]" - playsound(src, 'sound/blank.ogg', 25, FALSE) - . = TRUE - if("set_category") - var/new_category = params["category"] - current_category = new_category - . = TRUE - if("toggle_details") - detail_view = !detail_view - . = TRUE - if("clear") - if(disk && disk.program) - qdel(disk.program) - disk.program = null - disk.name = initial(disk.name) - . = TRUE diff --git a/code/modules/research/nanites/nanite_programmer.dm b/code/modules/research/nanites/nanite_programmer.dm deleted file mode 100644 index 950da58cd2..0000000000 --- a/code/modules/research/nanites/nanite_programmer.dm +++ /dev/null @@ -1,142 +0,0 @@ -/obj/machinery/nanite_programmer - name = "nanite programmer" - desc = "" - var/obj/item/disk/nanite_program/disk - var/datum/nanite_program/program - icon = 'icons/obj/machines/research.dmi' - icon_state = "nanite_programmer" - use_power = IDLE_POWER_USE - anchored = TRUE - density = TRUE - circuit = /obj/item/circuitboard/machine/nanite_programmer - ui_x = 600 - ui_y = 800 - -/obj/machinery/nanite_programmer/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/disk/nanite_program)) - var/obj/item/disk/nanite_program/N = I - if(disk) - eject(user) - if(user.transferItemToLoc(N, src)) - to_chat(user, "I insert [N] into [src]") - playsound(src, 'sound/blank.ogg', 50, FALSE) - disk = N - program = N.program - else - ..() - -/obj/machinery/nanite_programmer/proc/eject(mob/living/user) - if(!disk) - return - if(!istype(user) || !Adjacent(user) || !user.put_in_active_hand(disk)) - disk.forceMove(drop_location()) - disk = null - program = null - -/obj/machinery/nanite_programmer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "nanite_programmer", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/nanite_programmer/ui_data() - var/list/data = list() - data["has_disk"] = istype(disk) - data["has_program"] = istype(program) - if(program) - data["name"] = program.name - data["desc"] = program.desc - data["use_rate"] = program.use_rate - data["can_trigger"] = program.can_trigger - data["trigger_cost"] = program.trigger_cost - data["trigger_cooldown"] = program.trigger_cooldown / 10 - - data["activated"] = program.activated - data["activation_delay"] = program.activation_delay - data["timer"] = program.timer - data["activation_code"] = program.activation_code - data["deactivation_code"] = program.deactivation_code - data["kill_code"] = program.kill_code - data["trigger_code"] = program.trigger_code - data["timer_type"] = program.get_timer_type_text() - - var/list/extra_settings = list() - for(var/X in program.extra_settings) - var/list/setting = list() - setting["name"] = X - setting["value"] = program.get_extra_setting(X) - extra_settings += list(setting) - data["extra_settings"] = extra_settings - if(LAZYLEN(extra_settings)) - data["has_extra_settings"] = TRUE - - return data - -/obj/machinery/nanite_programmer/ui_act(action, params) - if(..()) - return - switch(action) - if("eject") - eject(usr) - . = TRUE - if("toggle_active") - playsound(src, "terminal_type", 25, FALSE) - program.activated = !program.activated //we don't use the activation procs since we aren't in a mob - if(program.activated) - program.activation_delay = 0 - . = TRUE - if("set_code") - var/new_code = input("Set code (0000-9999):", name, null) as null|num - if(!isnull(new_code)) - playsound(src, "terminal_type", 25, FALSE) - new_code = CLAMP(round(new_code, 1),0,9999) - else - return - - playsound(src, "terminal_type", 25, FALSE) - var/target_code = params["target_code"] - switch(target_code) - if("activation") - program.activation_code = CLAMP(round(new_code, 1),0,9999) - if("deactivation") - program.deactivation_code = CLAMP(round(new_code, 1),0,9999) - if("kill") - program.kill_code = CLAMP(round(new_code, 1),0,9999) - if("trigger") - program.trigger_code = CLAMP(round(new_code, 1),0,9999) - . = TRUE - if("set_extra_setting") - program.set_extra_setting(usr, params["target_setting"]) - playsound(src, "terminal_type", 25, FALSE) - . = TRUE - if("set_activation_delay") - var/delay = input("Set activation delay in seconds (0-1800):", name, program.activation_delay) as null|num - if(!isnull(delay)) - playsound(src, "terminal_type", 25, FALSE) - delay = CLAMP(round(delay, 1),0,1800) - program.activation_delay = delay - if(delay) - program.activated = FALSE - . = TRUE - if("set_timer") - var/timer = input("Set timer in seconds (10-3600):", name, program.timer) as null|num - if(!isnull(timer)) - playsound(src, "terminal_type", 25, FALSE) - if(!timer == 0) - timer = CLAMP(round(timer, 1),10,3600) - program.timer = timer - . = TRUE - if("set_timer_type") - var/new_type = input("Choose the timer effect","Timer Effect") as null|anything in list("Deactivate","Self-Delete","Trigger","Reset Activation Timer") - if(new_type) - playsound(src, "terminal_type", 25, FALSE) - switch(new_type) - if("Deactivate") - program.timer_type = NANITE_TIMER_DEACTIVATE - if("Self-Delete") - program.timer_type = NANITE_TIMER_SELFDELETE - if("Trigger") - program.timer_type = NANITE_TIMER_TRIGGER - if("Reset Activation Timer") - program.timer_type = NANITE_TIMER_RESET - . = TRUE diff --git a/code/modules/research/nanites/nanite_programs.dm b/code/modules/research/nanites/nanite_programs.dm deleted file mode 100644 index f4b621c2d0..0000000000 --- a/code/modules/research/nanites/nanite_programs.dm +++ /dev/null @@ -1,263 +0,0 @@ -/datum/nanite_program - var/name = "Generic Nanite Program" - var/desc = "" - - var/datum/component/nanites/nanites - var/mob/living/host_mob - - var/use_rate = 0 //Amount of nanites used while active - var/unique = TRUE //If there can be more than one copy in the same nanites - var/can_trigger = FALSE //If the nanites have a trigger function (used for the programming UI) - var/trigger_cost = 0 //Amount of nanites required to trigger - var/trigger_cooldown = 50 //Deciseconds required between each trigger activation - var/next_trigger = 0 //World time required for the next trigger activation - var/timer_counter = 0 //Counts up while active. Used for the timer and the activation delay. - var/program_flags = NONE - var/passive_enabled = FALSE //If the nanites have an on/off-style effect, it's tracked by this var - - var/list/rogue_types = list(/datum/nanite_program/glitch) //What this can turn into if it glitches. - //As a rule of thumb, these should be: - //A: simpler - //B: negative - //C: affecting the same parts of the body, roughly - //B is mostly a consequence of A: it's always going to be simpler to cause damage than to repair it, so a software bug will not randomly make the flesh eating - //nanites learn how to repair cells. - //Given enough glitch-swapping you'll end up with stuff like necrotic or toxic nanites, which are very simple as they just try to eat what's in front of them - //or just lie around polluting the blood - - - //The following vars are customizable - var/activated = TRUE //If FALSE, the program won't process, disables passive effects, can't trigger and doesn't consume nanites - var/activation_delay = 0 //Seconds before the program self-activates. - var/timer = 0 //Seconds before the timer effect activates. Starts counting AFTER the activation delay - var/timer_type = NANITE_TIMER_DEACTIVATE //What happens when the timer runs out - - //Signal codes, these handle remote input to the nanites. If set to 0 they'll ignore signals. - var/activation_code = 0 //Code that activates the program [1-9999] - var/deactivation_code = 0 //Code that deactivates the program [1-9999] - var/kill_code = 0 //Code that permanently removes the program [1-9999] - var/trigger_code = 0 //Code that triggers the program (if available) [1-9999] - - //Extra settings - //Must be listed in text form, with the same title they'll be displayed in the programmer UI - //Changing these values is handled by set_extra_setting() - //Viewing these values is handled by get_extra_setting() - //Copying these values is handled by copy_extra_settings_to() - var/list/extra_settings = list() - - //Rules - //Rules that automatically manage if the program's active without requiring separate sensor programs - var/list/datum/nanite_rule/rules = list() - -/datum/nanite_program/triggered - use_rate = 0 - trigger_cost = 5 - trigger_cooldown = 50 - can_trigger = TRUE - -/datum/nanite_program/Destroy() - if(host_mob) - if(activated) - deactivate() - if(passive_enabled) - disable_passive_effect() - on_mob_remove() - if(nanites) - nanites.programs -= src - return ..() - -/datum/nanite_program/proc/copy() - var/datum/nanite_program/new_program = new type() - copy_programming(new_program, TRUE) - - return new_program - -/datum/nanite_program/proc/copy_programming(datum/nanite_program/target, copy_activated = TRUE) - if(copy_activated) - target.activated = activated - target.activation_delay = activation_delay - target.timer = timer - target.timer_type = timer_type - target.activation_code = activation_code - target.deactivation_code = deactivation_code - target.kill_code = kill_code - target.trigger_code = trigger_code - - target.rules = list() - for(var/R in rules) - var/datum/nanite_rule/rule = R - rule.copy_to(target) - - if(istype(target,src)) - copy_extra_settings_to(target) - -/datum/nanite_program/proc/set_extra_setting(user, setting) - return - -/datum/nanite_program/proc/get_extra_setting(setting) - return - -/datum/nanite_program/proc/copy_extra_settings_to(datum/nanite_program/target) - return - -/datum/nanite_program/proc/on_add(datum/component/nanites/_nanites) - nanites = _nanites - if(nanites.host_mob) - on_mob_add() - -/datum/nanite_program/proc/on_mob_add() - host_mob = nanites.host_mob - if(activated) //apply activation effects if it starts active - activate() - -/datum/nanite_program/proc/on_mob_remove() - return - -/datum/nanite_program/proc/toggle() - if(!activated) - activate() - else - deactivate() - -/datum/nanite_program/proc/activate() - activated = TRUE - timer_counter = activation_delay - -/datum/nanite_program/proc/deactivate() - if(passive_enabled) - disable_passive_effect() - activated = FALSE - -/datum/nanite_program/proc/on_process() - timer_counter++ - - if(activation_delay) - if(activated && timer_counter < activation_delay) - deactivate() - else if(!activated && timer_counter >= activation_delay) - activate() - if(!activated) - return - - if(timer && timer_counter > timer) - if(timer_type == NANITE_TIMER_DEACTIVATE) - deactivate() - return - else if(timer_type == NANITE_TIMER_SELFDELETE) - qdel(src) - return - else if(can_trigger && timer_type == NANITE_TIMER_TRIGGER) - trigger() - timer_counter = activation_delay - else if(timer_type == NANITE_TIMER_RESET) - timer_counter = 0 - if(check_conditions() && consume_nanites(use_rate)) - if(!passive_enabled) - enable_passive_effect() - active_effect() - else - if(passive_enabled) - disable_passive_effect() - -//If false, disables active and passive effects, but doesn't consume nanites -//Can be used to avoid consuming nanites for nothing -/datum/nanite_program/proc/check_conditions() - for(var/R in rules) - var/datum/nanite_rule/rule = R - if(!rule.check_rule()) - return FALSE - return TRUE - -//Constantly procs as long as the program is active -/datum/nanite_program/proc/active_effect() - return - -//Procs once when the program activates -/datum/nanite_program/proc/enable_passive_effect() - passive_enabled = TRUE - -//Procs once when the program deactivates -/datum/nanite_program/proc/disable_passive_effect() - passive_enabled = FALSE - -/datum/nanite_program/proc/trigger() - if(!activated) - return FALSE - if(world.time < next_trigger) - return FALSE - if(!consume_nanites(trigger_cost)) - return FALSE - next_trigger = world.time + trigger_cooldown - return TRUE - -/datum/nanite_program/proc/consume_nanites(amount, force = FALSE) - return nanites.consume_nanites(amount, force) - -/datum/nanite_program/proc/on_emp(severity) - if(program_flags & NANITE_EMP_IMMUNE) - return - if(prob(80 / severity)) - software_error() - -/datum/nanite_program/proc/on_shock(shock_damage) - if(!(program_flags & NANITE_SHOCK_IMMUNE)) - if(prob(10)) - software_error() - else if(prob(33)) - qdel(src) - -/datum/nanite_program/proc/on_minor_shock() - if(!(program_flags & NANITE_SHOCK_IMMUNE)) - if(prob(10)) - software_error() - -/datum/nanite_program/proc/on_death() - return - -/datum/nanite_program/proc/software_error(type) - if(!type) - type = rand(1,5) - switch(type) - if(1) - qdel(src) //kill switch - return - if(2) //deprogram codes - activation_code = 0 - deactivation_code = 0 - kill_code = 0 - trigger_code = 0 - if(3) - toggle() //enable/disable - if(4) - if(can_trigger) - trigger() - if(5) //Program is scrambled and does something different - var/rogue_type = pick(rogue_types) - var/datum/nanite_program/rogue = new rogue_type - nanites.add_program(null, rogue, src) - qdel(src) - -/datum/nanite_program/proc/receive_signal(code, source) - if(activation_code && code == activation_code && !activated) - activate() - host_mob.investigate_log("'s [name] nanite program was activated by [source] with code [code].", INVESTIGATE_NANITES) - else if(deactivation_code && code == deactivation_code && activated) - deactivate() - host_mob.investigate_log("'s [name] nanite program was deactivated by [source] with code [code].", INVESTIGATE_NANITES) - if(can_trigger && trigger_code && code == trigger_code) - trigger() - host_mob.investigate_log("'s [name] nanite program was triggered by [source] with code [code].", INVESTIGATE_NANITES) - if(kill_code && code == kill_code) - host_mob.investigate_log("'s [name] nanite program was deleted by [source] with code [code].", INVESTIGATE_NANITES) - qdel(src) - -/datum/nanite_program/proc/get_timer_type_text() - switch(timer_type) - if(NANITE_TIMER_DEACTIVATE) - return "Deactivate" - if(NANITE_TIMER_SELFDELETE) - return "Self-Delete" - if(NANITE_TIMER_TRIGGER) - return "Trigger" - if(NANITE_TIMER_RESET) - return "Reset Activation Timer" diff --git a/code/modules/research/nanites/nanite_programs/buffing.dm b/code/modules/research/nanites/nanite_programs/buffing.dm deleted file mode 100644 index b74c0efa9f..0000000000 --- a/code/modules/research/nanites/nanite_programs/buffing.dm +++ /dev/null @@ -1,125 +0,0 @@ -//Programs that buff the host in generally passive ways. - -/datum/nanite_program/nervous - name = "Nerve Support" - desc = "" - use_rate = 1.5 - rogue_types = list(/datum/nanite_program/nerve_decay) - -/datum/nanite_program/nervous/enable_passive_effect() - . = ..() - if(ishuman(host_mob)) - var/mob/living/carbon/human/H = host_mob - H.physiology.stun_mod *= 0.5 - -/datum/nanite_program/nervous/disable_passive_effect() - . = ..() - if(ishuman(host_mob)) - var/mob/living/carbon/human/H = host_mob - H.physiology.stun_mod *= 2 - -/datum/nanite_program/triggered/adrenaline - name = "Adrenaline Burst" - desc = "" - trigger_cost = 25 - trigger_cooldown = 1200 - rogue_types = list(/datum/nanite_program/toxic, /datum/nanite_program/nerve_decay) - -/datum/nanite_program/triggered/adrenaline/trigger() - if(!..()) - return - to_chat(host_mob, "I feel a sudden surge of energy!") - host_mob.set_resting(FALSE) - host_mob.reagents.add_reagent(/datum/reagent/medicine/badstims, 3) - -/datum/nanite_program/hardening - name = "Dermal Hardening" - desc = "" - use_rate = 0.5 - rogue_types = list(/datum/nanite_program/skin_decay) - -//TODO on_hit effect that turns skin grey for a moment - -/datum/nanite_program/hardening/enable_passive_effect() - . = ..() - if(ishuman(host_mob)) - var/mob/living/carbon/human/H = host_mob - H.physiology.armor.melee += 50 - H.physiology.armor.bullet += 35 - -/datum/nanite_program/hardening/disable_passive_effect() - . = ..() - if(ishuman(host_mob)) - var/mob/living/carbon/human/H = host_mob - H.physiology.armor.melee -= 50 - H.physiology.armor.bullet -= 35 - -/datum/nanite_program/refractive - name = "Dermal Refractive Surface" - desc = "" - use_rate = 0.50 - rogue_types = list(/datum/nanite_program/skin_decay) - -/datum/nanite_program/refractive/enable_passive_effect() - . = ..() - if(ishuman(host_mob)) - var/mob/living/carbon/human/H = host_mob - H.physiology.armor.laser += 50 - H.physiology.armor.energy += 35 - -/datum/nanite_program/refractive/disable_passive_effect() - . = ..() - if(ishuman(host_mob)) - var/mob/living/carbon/human/H = host_mob - H.physiology.armor.laser -= 50 - H.physiology.armor.energy -= 35 - -/datum/nanite_program/coagulating - name = "Rapid Coagulation" - desc = "" - use_rate = 0.10 - rogue_types = list(/datum/nanite_program/suffocating) - -/datum/nanite_program/coagulating/enable_passive_effect() - . = ..() - if(ishuman(host_mob)) - var/mob/living/carbon/human/H = host_mob - H.physiology.bleed_mod *= 0.1 - -/datum/nanite_program/coagulating/disable_passive_effect() - . = ..() - if(ishuman(host_mob)) - var/mob/living/carbon/human/H = host_mob - H.physiology.bleed_mod *= 10 - -/datum/nanite_program/conductive - name = "Electric Conduction" - desc = "" - use_rate = 0.20 - program_flags = NANITE_SHOCK_IMMUNE - rogue_types = list(/datum/nanite_program/nerve_decay) - -/datum/nanite_program/conductive/enable_passive_effect() - . = ..() - ADD_TRAIT(host_mob, TRAIT_SHOCKIMMUNE, "nanites") - -/datum/nanite_program/conductive/disable_passive_effect() - . = ..() - REMOVE_TRAIT(host_mob, TRAIT_SHOCKIMMUNE, "nanites") - -/datum/nanite_program/mindshield - name = "Mental Barrier" - desc = "" - use_rate = 0.40 - rogue_types = list(/datum/nanite_program/brain_decay, /datum/nanite_program/brain_misfire) - -/datum/nanite_program/mindshield/enable_passive_effect() - . = ..() - if(!host_mob.mind.has_antag_datum(/datum/antagonist/rev, TRUE)) //won't work if on a rev, to avoid having implanted revs. - ADD_TRAIT(host_mob, TRAIT_MINDSHIELD, "nanites") - host_mob.sec_hud_set_implants() - -/datum/nanite_program/mindshield/disable_passive_effect() - . = ..() - REMOVE_TRAIT(host_mob, TRAIT_MINDSHIELD, "nanites") - host_mob.sec_hud_set_implants() diff --git a/code/modules/research/nanites/nanite_programs/healing.dm b/code/modules/research/nanites/nanite_programs/healing.dm deleted file mode 100644 index 9bab9c78fb..0000000000 --- a/code/modules/research/nanites/nanite_programs/healing.dm +++ /dev/null @@ -1,258 +0,0 @@ -//Programs that heal the host in some way. - -/datum/nanite_program/regenerative - name = "Accelerated Regeneration" - desc = "" - use_rate = 0.5 - rogue_types = list(/datum/nanite_program/necrotic) - -/datum/nanite_program/regenerative/check_conditions() - if(!host_mob.getBruteLoss() && !host_mob.getFireLoss()) - return FALSE - if(iscarbon(host_mob)) - var/mob/living/carbon/C = host_mob - var/list/parts = C.get_damaged_bodyparts(TRUE,TRUE, status = BODYPART_ORGANIC) - if(!parts.len) - return FALSE - return ..() - -/datum/nanite_program/regenerative/active_effect() - if(iscarbon(host_mob)) - var/mob/living/carbon/C = host_mob - var/list/parts = C.get_damaged_bodyparts(TRUE,TRUE, status = BODYPART_ORGANIC) - if(!parts.len) - return - for(var/obj/item/bodypart/L in parts) - if(L.heal_damage(0.5/parts.len, 0.5/parts.len, null, BODYPART_ORGANIC)) - host_mob.update_damage_overlays() - else - host_mob.adjustBruteLoss(-0.5, TRUE) - host_mob.adjustFireLoss(-0.5, TRUE) - -/datum/nanite_program/temperature - name = "Temperature Adjustment" - desc = "" - use_rate = 3.5 - rogue_types = list(/datum/nanite_program/skin_decay) - -/datum/nanite_program/temperature/check_conditions() - if(host_mob.bodytemperature > (BODYTEMP_NORMAL - 30) && host_mob.bodytemperature < (BODYTEMP_NORMAL + 30)) - return FALSE - return ..() - -/datum/nanite_program/temperature/active_effect() - if(host_mob.bodytemperature > BODYTEMP_NORMAL) - host_mob.adjust_bodytemperature(-40 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) - else if(host_mob.bodytemperature < (BODYTEMP_NORMAL + 1)) - host_mob.adjust_bodytemperature(40 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL) - -/datum/nanite_program/purging - name = "Blood Purification" - desc = "" - use_rate = 1 - rogue_types = list(/datum/nanite_program/suffocating, /datum/nanite_program/necrotic) - -/datum/nanite_program/purging/check_conditions() - var/foreign_reagent = LAZYLEN(host_mob.reagents.reagent_list) - if(!host_mob.getToxLoss() && !foreign_reagent) - return FALSE - return ..() - -/datum/nanite_program/purging/active_effect() - host_mob.adjustToxLoss(-1) - for(var/datum/reagent/R in host_mob.reagents.reagent_list) - host_mob.reagents.remove_reagent(R.type,1) - -/datum/nanite_program/brain_heal - name = "Neural Regeneration" - desc = "" - use_rate = 1.5 - rogue_types = list(/datum/nanite_program/brain_decay) - -/datum/nanite_program/brain_heal/check_conditions() - var/problems = FALSE - if(iscarbon(host_mob)) - var/mob/living/carbon/C = host_mob - if(length(C.get_traumas())) - problems = TRUE - if(host_mob.getOrganLoss(ORGAN_SLOT_BRAIN) > 0) - problems = TRUE - return problems ? ..() : FALSE - -/datum/nanite_program/brain_heal/active_effect() - host_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1) - if(iscarbon(host_mob) && prob(10)) - var/mob/living/carbon/C = host_mob - C.cure_trauma_type(resilience = TRAUMA_RESILIENCE_BASIC) - -/datum/nanite_program/blood_restoring - name = "Blood Regeneration" - desc = "" - use_rate = 1 - rogue_types = list(/datum/nanite_program/suffocating) - -/datum/nanite_program/blood_restoring/check_conditions() - if(iscarbon(host_mob)) - var/mob/living/carbon/C = host_mob - if(C.blood_volume >= BLOOD_VOLUME_SAFE) - return FALSE - else - return FALSE - return ..() - -/datum/nanite_program/blood_restoring/active_effect() - if(iscarbon(host_mob)) - var/mob/living/carbon/C = host_mob - C.blood_volume += 2 - -/datum/nanite_program/repairing - name = "Mechanical Repair" - desc = "" - use_rate = 0.5 - rogue_types = list(/datum/nanite_program/necrotic) - -/datum/nanite_program/repairing/check_conditions() - if(!host_mob.getBruteLoss() && !host_mob.getFireLoss()) - return FALSE - - if(iscarbon(host_mob)) - var/mob/living/carbon/C = host_mob - var/list/parts = C.get_damaged_bodyparts(TRUE, TRUE, status = BODYPART_ROBOTIC) - if(!parts.len) - return FALSE - else - if(!(host_mob.mob_biotypes & MOB_ROBOTIC)) - return FALSE - return ..() - -/datum/nanite_program/repairing/active_effect(mob/living/M) - if(iscarbon(host_mob)) - var/mob/living/carbon/C = host_mob - var/list/parts = C.get_damaged_bodyparts(TRUE, TRUE, status = BODYPART_ROBOTIC) - if(!parts.len) - return - var/update = FALSE - for(var/obj/item/bodypart/L in parts) - if(L.heal_damage(1.5/parts.len, 1.5/parts.len, null, BODYPART_ROBOTIC)) //much faster than organic healing - update = TRUE - if(update) - host_mob.update_damage_overlays() - else - host_mob.adjustBruteLoss(-1.5, TRUE) - host_mob.adjustFireLoss(-1.5, TRUE) - -/datum/nanite_program/purging_advanced - name = "Selective Blood Purification" - desc = "The nanites purge toxins and dangerous chemicals from the host's bloodstream, while ignoring beneficial chemicals. \ - The added processing power required to analyze the chemicals severely increases the nanite consumption rate." - use_rate = 2 - rogue_types = list(/datum/nanite_program/suffocating, /datum/nanite_program/necrotic) - -/datum/nanite_program/purging_advanced/check_conditions() - var/foreign_reagent = FALSE - for(var/datum/reagent/toxin/R in host_mob.reagents.reagent_list) - foreign_reagent = TRUE - break - if(!host_mob.getToxLoss() && !foreign_reagent) - return FALSE - return ..() - -/datum/nanite_program/purging_advanced/active_effect() - host_mob.adjustToxLoss(-1) - for(var/datum/reagent/toxin/R in host_mob.reagents.reagent_list) - host_mob.reagents.remove_reagent(R.type,1) - -/datum/nanite_program/regenerative_advanced - name = "Bio-Reconstruction" - desc = "The nanites manually repair and replace organic cells, acting much faster than normal regeneration. \ - However, this program cannot detect the difference between harmed and unharmed, causing it to consume nanites even if it has no effect." - use_rate = 5.5 - rogue_types = list(/datum/nanite_program/suffocating, /datum/nanite_program/necrotic) - -/datum/nanite_program/regenerative_advanced/active_effect() - if(iscarbon(host_mob)) - var/mob/living/carbon/C = host_mob - var/list/parts = C.get_damaged_bodyparts(TRUE,TRUE, status = BODYPART_ORGANIC) - if(!parts.len) - return - var/update = FALSE - for(var/obj/item/bodypart/L in parts) - if(L.heal_damage(3/parts.len, 3/parts.len, null, BODYPART_ORGANIC)) - update = TRUE - if(update) - host_mob.update_damage_overlays() - else - host_mob.adjustBruteLoss(-3, TRUE) - host_mob.adjustFireLoss(-3, TRUE) - -/datum/nanite_program/brain_heal_advanced - name = "Neural Reimaging" - desc = "" - use_rate = 3 - rogue_types = list(/datum/nanite_program/brain_decay, /datum/nanite_program/brain_misfire) - -/datum/nanite_program/brain_heal_advanced/check_conditions() - var/problems = FALSE - if(iscarbon(host_mob)) - var/mob/living/carbon/C = host_mob - if(length(C.get_traumas())) - problems = TRUE - if(host_mob.getOrganLoss(ORGAN_SLOT_BRAIN) > 0) - problems = TRUE - return problems ? ..() : FALSE - -/datum/nanite_program/brain_heal_advanced/active_effect() - host_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, -2) - if(iscarbon(host_mob) && prob(10)) - var/mob/living/carbon/C = host_mob - C.cure_trauma_type(resilience = TRAUMA_RESILIENCE_LOBOTOMY) - -/datum/nanite_program/triggered/defib - name = "Defibrillation" - desc = "" - trigger_cost = 25 - trigger_cooldown = 120 - rogue_types = list(/datum/nanite_program/triggered/shocking) - -/datum/nanite_program/triggered/defib/trigger() - if(!..()) - return - - host_mob.notify_ghost_cloning("Your heart is being defibrillated by nanites. Re-enter your corpse if you want to be revived!") - addtimer(CALLBACK(src, PROC_REF(zap)), 50) - -/datum/nanite_program/triggered/defib/proc/check_revivable() - if(!iscarbon(host_mob)) //nonstandard biology - return FALSE - var/mob/living/carbon/C = host_mob - if(C.suiciding || C.hellbound || HAS_TRAIT(C, TRAIT_HUSK)) //can't revive - return FALSE - if((world.time - C.timeofdeath) > 1800) //too late - return FALSE - if((C.getBruteLoss() >= MAX_REVIVE_BRUTE_DAMAGE) || (C.getFireLoss() >= MAX_REVIVE_FIRE_DAMAGE) || !C.can_be_revived()) //too damaged - return FALSE - if(!C.getorgan(/obj/item/organ/heart)) //what are we even shocking - return FALSE - var/obj/item/organ/brain/BR = C.getorgan(/obj/item/organ/brain) - if(QDELETED(BR) || BR.brain_death || (BR.organ_flags & ORGAN_FAILING) || BR.suicided) - return FALSE - if(C.get_ghost()) - return FALSE - return TRUE - -/datum/nanite_program/triggered/defib/proc/zap() - var/mob/living/carbon/C = host_mob - playsound(C, 'sound/blank.ogg', 50, FALSE) - sleep(30) - playsound(C, 'sound/blank.ogg', 50, FALSE) - if(check_revivable()) - playsound(C, 'sound/blank.ogg', 50, FALSE) - C.set_heartattack(FALSE) - C.revive(full_heal = FALSE, admin_revive = FALSE) - C.emote("breathgasp") - C.Jitter(100) - SEND_SIGNAL(C, COMSIG_LIVING_MINOR_SHOCK) - log_game("[C] has been successfully defibrillated by nanites.") - else - playsound(C, 'sound/blank.ogg', 50, FALSE) - diff --git a/code/modules/research/nanites/nanite_programs/rogue.dm b/code/modules/research/nanites/nanite_programs/rogue.dm deleted file mode 100644 index f71c98b4f7..0000000000 --- a/code/modules/research/nanites/nanite_programs/rogue.dm +++ /dev/null @@ -1,119 +0,0 @@ -//Programs generated through degradation of other complex programs. -//They generally cause minor damage or annoyance. - -//Last stop of the error train -/datum/nanite_program/glitch - name = "Glitch" - desc = "" - use_rate = 1.5 - unique = FALSE - rogue_types = list() - -//Generic body-affecting programs will decay into this -/datum/nanite_program/necrotic - name = "Necrosis" - desc = "" - use_rate = 0.75 - unique = FALSE - rogue_types = list(/datum/nanite_program/glitch) - -/datum/nanite_program/necrotic/active_effect() - host_mob.adjustBruteLoss(0.75, TRUE) - if(prob(1)) - to_chat(host_mob, "I feel a mild ache from somewhere inside you.") - -//Programs that don't directly interact with the body will decay into this -/datum/nanite_program/toxic - name = "Toxin Buildup" - desc = "" - use_rate = 0.25 - unique = FALSE - rogue_types = list(/datum/nanite_program/glitch) - -/datum/nanite_program/toxic/active_effect() - host_mob.adjustToxLoss(0.5) - if(prob(1)) - to_chat(host_mob, "I feel a bit sick.") - -//Generic blood-affecting programs will decay into this -/datum/nanite_program/suffocating - name = "Hypoxemia" - desc = "" - use_rate = 0.75 - unique = FALSE - rogue_types = list(/datum/nanite_program/glitch) - -/datum/nanite_program/suffocating/active_effect() - host_mob.adjustOxyLoss(3, 0) - if(prob(1)) - to_chat(host_mob, "I feel short of breath.") - -//Generic brain-affecting programs will decay into this -/datum/nanite_program/brain_decay - name = "Neuro-Necrosis" - desc = "" - use_rate = 0.75 - unique = FALSE - rogue_types = list(/datum/nanite_program/necrotic) - -/datum/nanite_program/brain_decay/active_effect() - if(prob(4)) - host_mob.hallucination = min(15, host_mob.hallucination) - host_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1) - -//Generic brain-affecting programs can also decay into this -/datum/nanite_program/brain_misfire - name = "Brain Misfire" - desc = "" - use_rate = 0.50 - unique = FALSE - rogue_types = list(/datum/nanite_program/brain_decay) - -/datum/nanite_program/brain_misfire/active_effect() - if(prob(10)) - switch(rand(1,4)) - if(1) - host_mob.hallucination += 15 - if(2) - host_mob.confused += 10 - if(3) - host_mob.drowsyness += 10 - if(4) - host_mob.slurring += 10 - -//Generic skin-affecting programs will decay into this -/datum/nanite_program/skin_decay - name = "Dermalysis" - desc = "" - use_rate = 0.25 - unique = FALSE - rogue_types = list(/datum/nanite_program/necrotic) - -/datum/nanite_program/skin_decay/active_effect() - host_mob.adjustBruteLoss(0.25) - if(prob(5)) //itching - var/picked_bodypart = pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) - var/obj/item/bodypart/bodypart = host_mob.get_bodypart(picked_bodypart) - var/can_scratch = !host_mob.incapacitated() && get_location_accessible(host_mob, picked_bodypart) - - host_mob.visible_message("[can_scratch ? "[host_mob] scratches [host_mob.p_their()] [bodypart.name]." : ""]",\ - "My [bodypart.name] itches. [can_scratch ? " You scratch it." : ""]") - -//Generic nerve-affecting programs will decay into this -/datum/nanite_program/nerve_decay - name = "Nerve Decay" - desc = "" - use_rate = 1 - unique = FALSE - rogue_types = list(/datum/nanite_program/necrotic) - -/datum/nanite_program/nerve_decay/active_effect() - if(prob(5)) - to_chat(host_mob, "I feel unbalanced!") - host_mob.confused += 10 - else if(prob(4)) - to_chat(host_mob, "I can't feel my hands!") - host_mob.drop_all_held_items() - else if(prob(4)) - to_chat(host_mob, "I can't feel my legs!") - host_mob.Paralyze(30) diff --git a/code/modules/research/nanites/nanite_programs/sensor.dm b/code/modules/research/nanites/nanite_programs/sensor.dm deleted file mode 100644 index 3643700606..0000000000 --- a/code/modules/research/nanites/nanite_programs/sensor.dm +++ /dev/null @@ -1,510 +0,0 @@ -/datum/nanite_program/sensor - name = "Sensor Nanites" - desc = "" - unique = FALSE - extra_settings = list(NES_SENT_CODE) - var/can_rule = FALSE - var/sent_code = 0 - -/datum/nanite_program/sensor/set_extra_setting(user, setting) - if(setting == NES_SENT_CODE) - var/new_code = input(user, "Set the sent code (1-9999):", name, null) as null|num - if(isnull(new_code)) - return - sent_code = CLAMP(round(new_code, 1), 1, 9999) - -/datum/nanite_program/sensor/get_extra_setting(setting) - if(setting == NES_SENT_CODE) - return sent_code - -/datum/nanite_program/sensor/copy_extra_settings_to(datum/nanite_program/sensor/target) - target.sent_code = sent_code - -/datum/nanite_program/sensor/proc/check_event() - return FALSE - -/datum/nanite_program/sensor/proc/send_code() - if(activated) - SEND_SIGNAL(host_mob, COMSIG_NANITE_SIGNAL, sent_code, "a [name] program") - -/datum/nanite_program/sensor/active_effect() - if(sent_code && check_event()) - send_code() - -/datum/nanite_program/sensor/proc/make_rule(datum/nanite_program/target) - return - -/datum/nanite_program/sensor/repeat - name = "Signal Repeater" - desc = "" - can_trigger = TRUE - trigger_cost = 0 - trigger_cooldown = 10 - extra_settings = list(NES_SENT_CODE,NES_DELAY) - var/spent = FALSE - var/delay = 0 - -/datum/nanite_program/sensor/repeat/set_extra_setting(user, setting) - if(setting == NES_SENT_CODE) - var/new_code = input(user, "Set the sent code (1-9999):", name, null) as null|num - if(isnull(new_code)) - return - sent_code = CLAMP(round(new_code, 1), 1, 9999) - if(setting == NES_DELAY) - var/new_delay = input(user, "Set the delay in seconds:", name, null) as null|num - if(isnull(new_delay)) - return - delay = (CLAMP(round(new_delay, 1), 0, 3600)) * 10 //max 1 hour - -/datum/nanite_program/sensor/repeat/get_extra_setting(setting) - if(setting == NES_SENT_CODE) - return sent_code - if(setting == NES_DELAY) - return "[delay/10] seconds" - -/datum/nanite_program/sensor/repeat/copy_extra_settings_to(datum/nanite_program/sensor/repeat/target) - target.sent_code = sent_code - target.delay = delay - -/datum/nanite_program/sensor/repeat/trigger() - if(!..()) - return - addtimer(CALLBACK(src, PROC_REF(send_code)), delay) - -/datum/nanite_program/sensor/relay_repeat - name = "Relay Signal Repeater" - desc = "" - can_trigger = TRUE - trigger_cost = 0 - trigger_cooldown = 10 - extra_settings = list(NES_SENT_CODE,NES_RELAY_CHANNEL,NES_DELAY) - var/spent = FALSE - var/delay = 0 - var/relay_channel = 0 - -/datum/nanite_program/sensor/relay_repeat/set_extra_setting(user, setting) - if(setting == NES_SENT_CODE) - var/new_code = input(user, "Set the sent code (1-9999):", name, null) as null|num - if(isnull(new_code)) - return - sent_code = CLAMP(round(new_code, 1), 1, 9999) - if(setting == NES_RELAY_CHANNEL) - var/new_channel = input(user, "Set the relay channel (1-9999):", name, null) as null|num - if(isnull(new_channel)) - return - relay_channel = CLAMP(round(new_channel, 1), 1, 9999) - if(setting == NES_DELAY) - var/new_delay = input(user, "Set the delay in seconds:", name, null) as null|num - if(isnull(new_delay)) - return - delay = (CLAMP(round(new_delay, 1), 0, 3600)) * 10 //max 1 hour - -/datum/nanite_program/sensor/relay_repeat/get_extra_setting(setting) - if(setting == NES_SENT_CODE) - return sent_code - if(setting == NES_RELAY_CHANNEL) - return relay_channel - if(setting == NES_DELAY) - return "[delay/10] seconds" - -/datum/nanite_program/sensor/relay_repeat/copy_extra_settings_to(datum/nanite_program/sensor/relay_repeat/target) - target.sent_code = sent_code - target.delay = delay - target.relay_channel = relay_channel - -/datum/nanite_program/sensor/relay_repeat/trigger() - if(!..()) - return - addtimer(CALLBACK(src, PROC_REF(send_code)), delay) - -/datum/nanite_program/sensor/relay_repeat/send_code() - if(activated && relay_channel) - for(var/X in SSnanites.nanite_relays) - var/datum/nanite_program/relay/N = X - N.relay_signal(sent_code, relay_channel, "a [name] program") - -/datum/nanite_program/sensor/health - name = "Health Sensor" - desc = "" - extra_settings = list(NES_SENT_CODE,NES_HEALTH_PERCENT,NES_DIRECTION) - can_rule = TRUE - var/spent = FALSE - var/percent = 50 - var/direction = "Above" - -/datum/nanite_program/sensor/health/set_extra_setting(user, setting) - if(setting == NES_SENT_CODE) - var/new_code = input(user, "Set the sent code (1-9999):", name, null) as null|num - if(isnull(new_code)) - return - sent_code = CLAMP(round(new_code, 1), 1, 9999) - if(setting == NES_HEALTH_PERCENT) - var/new_percent = input(user, "Set the health percentage:", name, null) as null|num - if(isnull(new_percent)) - return - percent = CLAMP(round(new_percent, 1), -99, 100) - if(setting == NES_DIRECTION) - if(direction == "Above") - direction = "Below" - else - direction = "Above" - -/datum/nanite_program/sensor/health/get_extra_setting(setting) - if(setting == NES_SENT_CODE) - return sent_code - if(setting == NES_HEALTH_PERCENT) - return "[percent]%" - if(setting == NES_DIRECTION) - return direction - -/datum/nanite_program/sensor/health/copy_extra_settings_to(datum/nanite_program/sensor/health/target) - target.sent_code = sent_code - target.percent = percent - target.direction = direction - -/datum/nanite_program/sensor/health/check_event() - var/health_percent = host_mob.health / host_mob.maxHealth * 100 - var/detected = FALSE - if(direction == "Above") - if(health_percent >= percent) - detected = TRUE - else - if(health_percent < percent) - detected = TRUE - - if(detected) - if(!spent) - spent = TRUE - return TRUE - return FALSE - else - spent = FALSE - return FALSE - -/datum/nanite_program/sensor/health/make_rule(datum/nanite_program/target) - var/datum/nanite_rule/health/rule = new(target) - rule.above = (direction == "Above") - rule.threshold = percent - return rule - -/datum/nanite_program/sensor/crit - name = "Critical Health Sensor" - desc = "" - can_rule = TRUE - var/spent = FALSE - -/datum/nanite_program/sensor/crit/check_event() - if(host_mob.InCritical()) - if(!spent) - spent = TRUE - return TRUE - return FALSE - else - spent = FALSE - return FALSE - -/datum/nanite_program/sensor/crit/make_rule(datum/nanite_program/target) - var/datum/nanite_rule/crit/rule = new(target) - return rule - -/datum/nanite_program/sensor/death - name = "Death Sensor" - desc = "" - can_rule = TRUE - var/spent = FALSE - -/datum/nanite_program/sensor/death/on_death() - send_code() - -/datum/nanite_program/sensor/death/make_rule(datum/nanite_program/target) - var/datum/nanite_rule/death/rule = new(target) - return rule - -/datum/nanite_program/sensor/nanite_volume - name = "Nanite Volume Sensor" - desc = "" - extra_settings = list(NES_SENT_CODE,NES_NANITE_PERCENT,NES_DIRECTION) - can_rule = TRUE - var/spent = FALSE - var/percent = 50 - var/direction = "Above" - -/datum/nanite_program/sensor/nanite_volume/set_extra_setting(user, setting) - if(setting == NES_SENT_CODE) - var/new_code = input(user, "Set the sent code (1-9999):", name, null) as null|num - if(isnull(new_code)) - return - sent_code = CLAMP(round(new_code, 1), 1, 9999) - if(setting == NES_NANITE_PERCENT) - var/new_percent = input(user, "Set the nanite percentage:", name, null) as null|num - if(isnull(new_percent)) - return - percent = CLAMP(round(new_percent, 1), 1, 100) - if(setting == NES_DIRECTION) - if(direction == "Above") - direction = "Below" - else - direction = "Above" - -/datum/nanite_program/sensor/nanite_volume/get_extra_setting(setting) - if(setting == NES_SENT_CODE) - return sent_code - if(setting == NES_NANITE_PERCENT) - return "[percent]%" - if(setting == NES_DIRECTION) - return direction - -/datum/nanite_program/sensor/nanite_volume/copy_extra_settings_to(datum/nanite_program/sensor/nanite_volume/target) - target.sent_code = sent_code - target.percent = percent - target.direction = direction - -/datum/nanite_program/sensor/nanite_volume/check_event() - var/nanite_percent = (nanites.nanite_volume - nanites.safety_threshold)/(nanites.max_nanites - nanites.safety_threshold)*100 - var/detected = FALSE - - if(direction == "Above") - if(nanite_percent >= percent) - detected = TRUE - else - if(nanite_percent < percent) - detected = TRUE - - if(detected) - if(!spent) - spent = TRUE - return TRUE - return FALSE - else - spent = FALSE - return FALSE - -/datum/nanite_program/sensor/nanite_volume/make_rule(datum/nanite_program/target) - var/datum/nanite_rule/nanites/rule = new(target) - rule.above = (direction == "Above") - rule.threshold = percent - return rule - -/datum/nanite_program/sensor/damage - name = "Damage Sensor" - desc = "" - extra_settings = list(NES_SENT_CODE,NES_DAMAGE_TYPE,NES_DAMAGE,NES_DIRECTION) - can_rule = TRUE - var/spent = FALSE - var/damage_type = BRUTE - var/damage = 50 - var/direction = "Above" - -/datum/nanite_program/sensor/damage/set_extra_setting(user, setting) - if(setting == NES_SENT_CODE) - var/new_code = input(user, "Set the sent code (1-9999):", name, null) as null|num - if(isnull(new_code)) - return - sent_code = CLAMP(round(new_code, 1), 1, 9999) - if(setting == NES_DAMAGE) - var/new_damage = input(user, "Set the damage threshold:", name, null) as null|num - if(isnull(new_damage)) - return - damage = CLAMP(round(new_damage, 1), 0, 500) - if(setting == NES_DAMAGE_TYPE) - var/list/damage_types = list(BRUTE,BURN,TOX,OXY,CLONE) - var/new_damage_type = input("Choose the damage type", name) as null|anything in sortList(damage_types) - if(!new_damage_type) - return - damage_type = new_damage_type - if(setting == NES_DIRECTION) - if(direction == "Above") - direction = "Below" - else - direction = "Above" - -/datum/nanite_program/sensor/damage/get_extra_setting(setting) - if(setting == NES_SENT_CODE) - return sent_code - if(setting == NES_DAMAGE) - return damage - if(setting == NES_DAMAGE_TYPE) - return capitalize(damage_type) - if(setting == NES_DIRECTION) - return direction - -/datum/nanite_program/sensor/damage/copy_extra_settings_to(datum/nanite_program/sensor/damage/target) - target.sent_code = sent_code - target.damage = damage - target.damage_type = damage_type - target.direction = direction - -/datum/nanite_program/sensor/damage/check_event() - var/reached_threshold = FALSE - var/check_above = (direction == "Above") - var/damage_amt = 0 - switch(damage_type) - if(BRUTE) - damage_amt = host_mob.getBruteLoss() - if(BURN) - damage_amt = host_mob.getFireLoss() - if(TOX) - damage_amt = host_mob.getToxLoss() - if(OXY) - damage_amt = host_mob.getOxyLoss() - if(CLONE) - damage_amt = host_mob.getCloneLoss() - - if(damage_amt >= damage) - if(check_above) - reached_threshold = TRUE - else if(!check_above) - reached_threshold = TRUE - - if(reached_threshold) - if(!spent) - spent = TRUE - return TRUE - return FALSE - else - spent = FALSE - return FALSE - -/datum/nanite_program/sensor/damage/make_rule(datum/nanite_program/target) - var/datum/nanite_rule/damage/rule = new(target) - rule.above = (direction == "Above") - rule.threshold = damage - rule.damage_type = damage_type - return rule - -/datum/nanite_program/sensor/voice - name = "Voice Sensor" - desc = "" - extra_settings = list(NES_SENT_CODE,NES_SENTENCE,NES_INCLUSIVE_MODE) - var/spent = FALSE - var/sentence = "" - var/inclusive = TRUE - -/datum/nanite_program/sensor/voice/on_mob_add() - . = ..() - RegisterSignal(host_mob, COMSIG_MOVABLE_HEAR, PROC_REF(on_hear)) - -/datum/nanite_program/sensor/voice/on_mob_remove() - UnregisterSignal(host_mob, COMSIG_MOVABLE_HEAR, PROC_REF(on_hear)) - -/datum/nanite_program/sensor/voice/set_extra_setting(user, setting) - if(setting == NES_SENT_CODE) - var/new_code = input(user, "Set the sent code (1-9999):", name, null) as null|num - if(isnull(new_code)) - return - sent_code = CLAMP(round(new_code, 1), 1, 9999) - if(setting == NES_SENTENCE) - var/new_sentence = stripped_input(user, "Choose the sentence that triggers the sensor.", NES_SENTENCE, sentence, MAX_MESSAGE_LEN) - if(!new_sentence) - return - sentence = new_sentence - if(setting == NES_INCLUSIVE_MODE) - var/new_inclusive = input("Should the sensor detect the sentence if contained within another sentence?", name) as null|anything in list("Inclusive","Exclusive") - if(!new_inclusive) - return - inclusive = (new_inclusive == "Inclusive") - -/datum/nanite_program/sensor/voice/get_extra_setting(setting) - if(setting == NES_SENT_CODE) - return sent_code - if(setting == NES_SENTENCE) - return sentence - if(setting == NES_INCLUSIVE_MODE) - if(inclusive) - return "Inclusive" - else - return "Exclusive" - -/datum/nanite_program/sensor/voice/copy_extra_settings_to(datum/nanite_program/sensor/voice/target) - target.sent_code = sent_code - target.sentence = sentence - target.inclusive = inclusive - -/datum/nanite_program/sensor/voice/proc/on_hear(datum/source, list/hearing_args) - if(!sentence) - return - if(inclusive) - if(findtextEx(hearing_args[HEARING_RAW_MESSAGE], sentence)) - send_code() - else - if(hearing_args[HEARING_RAW_MESSAGE] == sentence) - send_code() - -/datum/nanite_program/sensor/species - name = "Species Sensor" - desc = "" - can_trigger = TRUE - trigger_cost = 0 - trigger_cooldown = 5 - - extra_settings = list(NES_SENT_CODE,NES_RACE,NES_MODE) - var/species_type = "Human" - var/mode = "Is" - var/list/static/allowed_species = list( - "Human" = /datum/species/human, - "Lizard" = /datum/species/lizard, - "Moth" = /datum/species/moth, - "Ethereal" = /datum/species/ethereal, - "Pod" = /datum/species/pod, - "Fly" = /datum/species/fly, - "Felinid" = /datum/species/human/felinid, - "Jelly" = /datum/species/jelly - ) - -/datum/nanite_program/sensor/species/set_extra_setting(user, setting) - if(setting == NES_SENT_CODE) - var/new_code = input(user, "Set the sent code (1-9999):", name, null) as null|num - if(isnull(new_code)) - return - sent_code = CLAMP(round(new_code, 1), 1, 9999) - if(setting == NES_RACE) - var/list/species_types = list() - for(var/name in allowed_species) - species_types += name - species_types += "Other" - var/new_species_type = input("Choose the species", name) as null|anything in sortList(species_types) - if(!new_species_type) - return - species_type = new_species_type - if(setting == NES_MODE) - mode = mode == "Is" ? "Is Not" : "Is" - - -/datum/nanite_program/sensor/species/get_extra_setting(setting) - if(setting == NES_SENT_CODE) - return sent_code - if(setting == NES_RACE) - return species_type - if(setting == NES_MODE) - return mode - -/datum/nanite_program/sensor/species/copy_extra_settings_to(datum/nanite_program/sensor/species/target) - target.sent_code = sent_code - target.species_type = species_type - target.mode = mode - -/datum/nanite_program/sensor/species/trigger() - if(!..()) - return - - var/species = allowed_species[species_type] - var/species_match = FALSE - - if(species) - if(is_species(host_mob, species)) - species_match = TRUE - else //this is the check for the "Other" option - species_match = TRUE - for(var/name in allowed_species) - var/species_other = allowed_species[name] - if(is_species(host_mob, species_other)) - species_match = FALSE - break - - switch(mode) - if("Is") - if(species_match) - send_code() - if("Is Not") - if(!species_match) - send_code() diff --git a/code/modules/research/nanites/nanite_programs/suppression.dm b/code/modules/research/nanites/nanite_programs/suppression.dm deleted file mode 100644 index 51eb0eb092..0000000000 --- a/code/modules/research/nanites/nanite_programs/suppression.dm +++ /dev/null @@ -1,421 +0,0 @@ -//Programs that are generally useful for population control and non-harmful suppression. - -/datum/nanite_program/triggered/sleepy - name = "Sleep Induction" - desc = "" - trigger_cost = 15 - trigger_cooldown = 1200 - rogue_types = list(/datum/nanite_program/brain_misfire, /datum/nanite_program/brain_decay) - -/datum/nanite_program/triggered/sleepy/trigger() - if(!..()) - return - to_chat(host_mob, "I start to feel very sleepy...") - host_mob.drowsyness += 20 - addtimer(CALLBACK(host_mob, TYPE_PROC_REF(/mob/living, Sleeping), 200), rand(60,200)) - -/datum/nanite_program/paralyzing - name = "Paralysis" - desc = "" - use_rate = 3 - rogue_types = list(/datum/nanite_program/nerve_decay) - -/datum/nanite_program/paralyzing/active_effect() - host_mob.Stun(40) - -/datum/nanite_program/paralyzing/enable_passive_effect() - . = ..() - to_chat(host_mob, "My muscles seize! You can't move!") - -/datum/nanite_program/paralyzing/disable_passive_effect() - . = ..() - to_chat(host_mob, "My muscles relax, and you can move again.") - -/datum/nanite_program/triggered/shocking - name = "Electric Shock" - desc = "" - trigger_cost = 10 - trigger_cooldown = 300 - program_flags = NANITE_SHOCK_IMMUNE - rogue_types = list(/datum/nanite_program/toxic) - -/datum/nanite_program/triggered/shocking/trigger() - if(!..()) - return - host_mob.electrocute_act(rand(5,10), "shock nanites", 1, SHOCK_NOGLOVES) - -/datum/nanite_program/triggered/stun - name = "Neural Shock" - desc = "" - trigger_cost = 4 - trigger_cooldown = 300 - rogue_types = list(/datum/nanite_program/triggered/shocking, /datum/nanite_program/nerve_decay) - -/datum/nanite_program/triggered/stun/trigger() - if(!..()) - return - playsound(host_mob, "sparks", 75, TRUE, -1) - host_mob.Paralyze(80) - -/datum/nanite_program/pacifying - name = "Pacification" - desc = "" - use_rate = 1 - rogue_types = list(/datum/nanite_program/brain_misfire, /datum/nanite_program/brain_decay) - -/datum/nanite_program/pacifying/enable_passive_effect() - . = ..() - ADD_TRAIT(host_mob, TRAIT_PACIFISM, "nanites") - -/datum/nanite_program/pacifying/disable_passive_effect() - . = ..() - REMOVE_TRAIT(host_mob, TRAIT_PACIFISM, "nanites") - -/datum/nanite_program/blinding - name = "Blindness" - desc = "" - use_rate = 1.5 - rogue_types = list(/datum/nanite_program/nerve_decay) - -/datum/nanite_program/blinding/enable_passive_effect() - . = ..() - host_mob.become_blind("nanites") - -/datum/nanite_program/blinding/disable_passive_effect() - . = ..() - host_mob.cure_blind("nanites") - -/datum/nanite_program/mute - name = "Mute" - desc = "" - use_rate = 0.75 - rogue_types = list(/datum/nanite_program/brain_decay, /datum/nanite_program/brain_misfire) - -/datum/nanite_program/mute/enable_passive_effect() - . = ..() - ADD_TRAIT(host_mob, TRAIT_MUTE, "nanites") - -/datum/nanite_program/mute/disable_passive_effect() - . = ..() - REMOVE_TRAIT(host_mob, TRAIT_MUTE, "nanites") - -/datum/nanite_program/fake_death - name = "Death Simulation" - desc = "" - use_rate = 3.5 - rogue_types = list(/datum/nanite_program/nerve_decay, /datum/nanite_program/necrotic, /datum/nanite_program/brain_decay) - -/datum/nanite_program/fake_death/enable_passive_effect() - . = ..() - host_mob.emote("deathgasp") - host_mob.fakedeath("nanites") - -/datum/nanite_program/fake_death/disable_passive_effect() - . = ..() - host_mob.cure_fakedeath("nanites") - -//Can receive transmissions from a nanite communication remote for customized messages -/datum/nanite_program/triggered/comm - var/comm_code = 0 - var/comm_message = "" - -/datum/nanite_program/triggered/comm/proc/receive_comm_signal(signal_comm_code, comm_message, comm_source) - if(!activated || !comm_code) - return - if(signal_comm_code == comm_code) - host_mob.investigate_log("'s [name] nanite program was messaged by [comm_source] with comm code [signal_comm_code] and message '[comm_message]'.", INVESTIGATE_NANITES) - trigger(comm_message) - -/datum/nanite_program/triggered/comm/speech - name = "Forced Speech" - desc = "" - unique = FALSE - trigger_cost = 3 - trigger_cooldown = 20 - rogue_types = list(/datum/nanite_program/brain_misfire, /datum/nanite_program/brain_decay) - - extra_settings = list(NES_SENTENCE,NES_COMM_CODE) - var/sentence = "" - -/datum/nanite_program/triggered/comm/speech/set_extra_setting(user, setting) - if(setting == NES_SENTENCE) - var/new_sentence = stripped_input(user, "Choose the sentence that the host will be forced to say.", NES_SENTENCE, sentence, MAX_MESSAGE_LEN) - if(!new_sentence) - return - if(copytext(new_sentence, 1, 2) == "*") //emotes are abusable, like surrender - return - sentence = new_sentence - if(setting == NES_COMM_CODE) - var/new_code = input(user, "Set the communication code (1-9999) or set to 0 to disable external signals.", name, null) as null|num - if(isnull(new_code)) - return - comm_code = CLAMP(round(new_code, 1), 0, 9999) - -/datum/nanite_program/triggered/comm/speech/get_extra_setting(setting) - if(setting == NES_SENTENCE) - return sentence - if(setting == NES_COMM_CODE) - return comm_code - -/datum/nanite_program/triggered/comm/speech/copy_extra_settings_to(datum/nanite_program/triggered/comm/speech/target) - target.sentence = sentence - target.comm_code = comm_code - -/datum/nanite_program/triggered/comm/speech/trigger(comm_message) - if(!..()) - return - var/sent_message = comm_message - if(!comm_message) - sent_message = sentence - if(host_mob.stat == DEAD) - return - to_chat(host_mob, "I feel compelled to speak...") - host_mob.say(sent_message, forced = "nanite speech") - -/datum/nanite_program/triggered/comm/voice - name = "Skull Echo" - desc = "" - unique = FALSE - trigger_cost = 1 - trigger_cooldown = 20 - rogue_types = list(/datum/nanite_program/brain_misfire, /datum/nanite_program/brain_decay) - - extra_settings = list(NES_MESSAGE,NES_COMM_CODE) - var/message = "" - -/datum/nanite_program/triggered/comm/voice/set_extra_setting(user, setting) - if(setting == NES_MESSAGE) - var/new_message = stripped_input(user, "Choose the message sent to the host.", NES_MESSAGE, message, MAX_MESSAGE_LEN) - if(!new_message) - return - message = new_message - if(setting == NES_COMM_CODE) - var/new_code = input(user, "Set the communication code (1-9999) or set to 0 to disable external signals.", name, null) as null|num - if(isnull(new_code)) - return - comm_code = CLAMP(round(new_code, 1), 0, 9999) - -/datum/nanite_program/triggered/comm/voice/get_extra_setting(setting) - if(setting == NES_MESSAGE) - return message - if(setting == NES_COMM_CODE) - return comm_code - -/datum/nanite_program/triggered/comm/voice/copy_extra_settings_to(datum/nanite_program/triggered/comm/voice/target) - target.message = message - target.comm_code = comm_code - -/datum/nanite_program/triggered/comm/voice/trigger(comm_message) - if(!..()) - return - var/sent_message = comm_message - if(!comm_message) - sent_message = message - if(host_mob.stat == DEAD) - return - to_chat(host_mob, "I hear a strange, robotic voice in my head... \"[sent_message]\"") - -/datum/nanite_program/triggered/comm/hallucination - name = "Hallucination" - desc = "" - trigger_cost = 4 - trigger_cooldown = 80 - unique = FALSE - rogue_types = list(/datum/nanite_program/brain_misfire) - extra_settings = list(NES_HALLUCINATION_TYPE, NES_COMM_CODE) - var/hal_type - var/hal_details - -/datum/nanite_program/triggered/comm/hallucination/trigger(comm_message) - if(!..()) - return - - if(comm_message && (hal_type != NES_MESSAGE)) //Triggered via comm remote, but not set to a message hallucination - return - var/sent_message = comm_message //Comm remotes can send custom hallucination messages for the chat hallucination - if(!sent_message) - sent_message = hal_details - - if(!iscarbon(host_mob)) - return - var/mob/living/carbon/C = host_mob - if(!hal_type) - C.hallucination += 15 - else - switch(hal_type) - if(NES_MESSAGE) - new /datum/hallucination/chat(C, TRUE, null, sent_message) - if("Battle") - new /datum/hallucination/battle(C, TRUE, hal_details) - if("Sound") - new /datum/hallucination/sounds(C, TRUE, hal_details) - if("Weird Sound") - new /datum/hallucination/weird_sounds(C, TRUE, hal_details) - if("Station Message") - new /datum/hallucination/stationmessage(C, TRUE, hal_details) - if("Health") - new /datum/hallucination/hudscrew(C, TRUE, hal_details) - if("Alert") - new /datum/hallucination/fake_alert(C, TRUE, hal_details) - if("Fire") - new /datum/hallucination/fire(C, TRUE) - if("Shock") - new /datum/hallucination/shock(C, TRUE) - if("Plasma Flood") - new /datum/hallucination/fake_flood(C, TRUE) - -/datum/nanite_program/triggered/comm/hallucination/set_extra_setting(user, setting) - if(setting == NES_COMM_CODE) - var/new_code = input(user, "(Only for Message) Set the communication code (1-9999) or set to 0 to disable external signals.", name, null) as null|num - if(isnull(new_code)) - return - comm_code = CLAMP(round(new_code, 1), 0, 9999) - - if(setting == NES_HALLUCINATION_TYPE) - var/list/possible_hallucinations = list("Random",NES_MESSAGE,"Battle","Sound","Weird Sound","Station Message","Health","Alert","Fire","Shock","Plasma Flood") - var/hal_type_choice = input("Choose the hallucination type", name) as null|anything in sortList(possible_hallucinations) - if(!hal_type_choice) - return - switch(hal_type_choice) - if("Random") - hal_type = null - hal_details = null - if(NES_MESSAGE) - hal_type = NES_MESSAGE - var/hal_chat = stripped_input(user, "Choose the message the host will hear, or leave empty for random messages.", NES_MESSAGE, hal_details, MAX_MESSAGE_LEN) - if(hal_chat) - hal_details = hal_chat - if("Battle") - hal_type = "Battle" - var/sound_list = list("random","laser","disabler","esword","gun","stunprod","harmbaton","bomb") - var/hal_choice = input("Choose the hallucination battle type", name) as null|anything in sortList(sound_list) - if(!hal_choice || hal_choice == "random") - hal_details = null - else - hal_details = hal_choice - if("Sound") - hal_type = "Sound" - var/sound_list = list("random","airlock","airlock pry","console","explosion","far explosion","mech","glass","alarm","beepsky","mech","wall decon","door hack") - var/hal_choice = input("Choose the hallucination sound", name) as null|anything in sortList(sound_list) - if(!hal_choice || hal_choice == "random") - hal_details = null - else - hal_details = hal_choice - if("Weird Sound") - hal_type = "Weird Sound" - var/sound_list = list("random","phone","hallelujah","highlander","laughter","hyperspace","game over","creepy","tesla") - var/hal_choice = input("Choose the hallucination sound", name) as null|anything in sortList(sound_list) - if(!hal_choice || hal_choice == "random") - hal_details = null - else - hal_details = hal_choice - if("Station Message") - hal_type = "Station Message" - var/msg_list = list("random","ratvar","shuttle dock","blob alert","malf ai","meteors","supermatter") - var/hal_choice = input("Choose the hallucination station message", name) as null|anything in sortList(msg_list) - if(!hal_choice || hal_choice == "random") - hal_details = null - else - hal_details = hal_choice - if("Health") - hal_type = "Health" - var/health_list = list("random","critical","dead","healthy") - var/hal_choice = input("Choose the health status", name) as null|anything in sortList(health_list) - if(!hal_choice || hal_choice == "random") - hal_details = null - else - switch(hal_choice) - if("critical") - hal_details = SCREWYHUD_CRIT - if("dead") - hal_details = SCREWYHUD_DEAD - if("healthy") - hal_details = SCREWYHUD_HEALTHY - if("Alert") - hal_type = "Alert" - var/alert_list = list("random","not_enough_oxy","not_enough_tox","not_enough_co2","too_much_oxy","too_much_co2","too_much_tox","newlaw","nutrition","charge","gravity","fire","locked","hacked","temphot","tempcold","pressure") - var/hal_choice = input("Choose the alert", name) as null|anything in sortList(alert_list) - if(!hal_choice || hal_choice == "random") - hal_details = null - else - hal_details = hal_choice - if("Fire") - hal_type = "Fire" - if("Shock") - hal_type = "Shock" - if("Plasma Flood") - hal_type = "Plasma Flood" - -/datum/nanite_program/triggered/comm/hallucination/get_extra_setting(setting) - if(setting == NES_HALLUCINATION_TYPE) - if(!hal_type) - return "Random" - else - return hal_type - if(setting == NES_COMM_CODE) - return comm_code - -/datum/nanite_program/triggered/comm/hallucination/copy_extra_settings_to(datum/nanite_program/triggered/comm/hallucination/target) - target.hal_type = hal_type - target.hal_details = hal_details - target.comm_code = comm_code - -/datum/nanite_program/good_mood - name = "Happiness Enhancer" - desc = "" - use_rate = 0.1 - rogue_types = list(/datum/nanite_program/brain_decay) - extra_settings = list(NES_MOOD_MESSAGE) - var/message = "HAPPINESS ENHANCEMENT" - -/datum/nanite_program/good_mood/set_extra_setting(user, setting) - if(setting == NES_MOOD_MESSAGE) - var/new_message = stripped_input(user, "Choose the message visible on the mood effect.", NES_MESSAGE, message, MAX_NAME_LEN) - if(!new_message) - return - message = new_message - -/datum/nanite_program/good_mood/get_extra_setting(setting) - if(setting == NES_MOOD_MESSAGE) - return message - -/datum/nanite_program/good_mood/copy_extra_settings_to(datum/nanite_program/good_mood/target) - target.message = message - -/datum/nanite_program/good_mood/enable_passive_effect() - . = ..() - SEND_SIGNAL(host_mob, COMSIG_ADD_MOOD_EVENT, "nanite_happy", /datum/mood_event/nanite_happiness, message) - -/datum/nanite_program/good_mood/disable_passive_effect() - . = ..() - SEND_SIGNAL(host_mob, COMSIG_CLEAR_MOOD_EVENT, "nanite_happy") - -/datum/nanite_program/bad_mood - name = "Happiness Suppressor" - desc = "" - use_rate = 0.1 - rogue_types = list(/datum/nanite_program/brain_decay) - extra_settings = list(NES_MOOD_MESSAGE) - var/message = "HAPPINESS SUPPRESSION" - -/datum/nanite_program/bad_mood/set_extra_setting(user, setting) - if(setting == NES_MOOD_MESSAGE) - var/new_message = stripped_input(user, "Choose the message visible on the mood effect.", NES_MESSAGE, message, MAX_NAME_LEN) - if(!new_message) - return - message = new_message - -/datum/nanite_program/bad_mood/get_extra_setting(setting) - if(setting == NES_MOOD_MESSAGE) - return message - -/datum/nanite_program/bad_mood/copy_extra_settings_to(datum/nanite_program/bad_mood/target) - target.message = message - -/datum/nanite_program/bad_mood/enable_passive_effect() - . = ..() - SEND_SIGNAL(host_mob, COMSIG_ADD_MOOD_EVENT, "nanite_sadness", /datum/mood_event/nanite_sadness, message) - -/datum/nanite_program/bad_mood/disable_passive_effect() - . = ..() - SEND_SIGNAL(host_mob, COMSIG_CLEAR_MOOD_EVENT, "nanite_sadness") diff --git a/code/modules/research/nanites/nanite_programs/utility.dm b/code/modules/research/nanites/nanite_programs/utility.dm deleted file mode 100644 index 5174f10186..0000000000 --- a/code/modules/research/nanites/nanite_programs/utility.dm +++ /dev/null @@ -1,448 +0,0 @@ -//Programs that interact with other programs or nanites directly, or have other special purposes. -/datum/nanite_program/viral - name = "Viral Replica" - desc = "" - use_rate = 0.5 - rogue_types = list(/datum/nanite_program/toxic) - extra_settings = list(NES_PROGRAM_OVERWRITE,NES_CLOUD_OVERWRITE) - - var/pulse_cooldown = 0 - var/sync_programs = TRUE - var/sync_overwrite = FALSE - var/set_cloud = 0 - -/datum/nanite_program/viral/set_extra_setting(user, setting) - if(setting == NES_PROGRAM_OVERWRITE) - var/overwrite_type = input("Choose what to do with the target's programs", name) as null|anything in list("Overwrite","Add To","Ignore") - if(!overwrite_type) - return - switch(overwrite_type) - if("Ignore") //Do not affect programs (if you only want to set the cloud ID) - sync_programs = FALSE - sync_overwrite = FALSE - if("Add To") //Add to existing programs (so the target does not notice theirs are missing) - sync_programs = TRUE - sync_overwrite = FALSE - if("Overwrite") //Replace target's programs with the source - sync_programs = TRUE - sync_overwrite = TRUE - if(setting == NES_CLOUD_OVERWRITE) - var/overwrite_type = input("Choose what to do with the target's Cloud ID", name) as null|anything in list("Overwrite","Set to 0 (Disable)") - if(!overwrite_type) - return - switch(overwrite_type) - if("Set to 0 (Disable)") //Set the cloud ID to 0 - set_cloud = 0 - if("Overwrite") //Set the cloud ID to what we choose - var/new_cloud = input(user, "Choose the Cloud ID to set on infected nanites (1-100)", name, null) as null|num - if(isnull(new_cloud)) - return - set_cloud = CLAMP(round(new_cloud, 1), 1, 100) - -/datum/nanite_program/viral/get_extra_setting(setting) - if(setting == NES_PROGRAM_OVERWRITE) - if(!sync_programs) - return "Ignore" - else if(sync_overwrite) - return "Overwrite" - else - return "Add To" - if(setting == NES_CLOUD_OVERWRITE) - return set_cloud - -/datum/nanite_program/viral/copy_extra_settings_to(datum/nanite_program/viral/target) - target.set_cloud = set_cloud - target.sync_programs = sync_programs - target.sync_overwrite = sync_overwrite - -/datum/nanite_program/viral/active_effect() - if(world.time < pulse_cooldown) - return - for(var/mob/M in orange(host_mob, 5)) - if(SEND_SIGNAL(M, COMSIG_NANITE_IS_STEALTHY)) - continue - if(sync_programs) - SEND_SIGNAL(M, COMSIG_NANITE_SYNC, nanites, sync_overwrite) - SEND_SIGNAL(M, COMSIG_NANITE_SET_CLOUD, set_cloud) - pulse_cooldown = world.time + 75 - -/datum/nanite_program/monitoring - name = "Monitoring" - desc = "" - rogue_types = list(/datum/nanite_program/toxic) - -/datum/nanite_program/monitoring/enable_passive_effect() - . = ..() - SSnanites.nanite_monitored_mobs |= host_mob - host_mob.hud_set_nanite_indicator() - -/datum/nanite_program/monitoring/disable_passive_effect() - . = ..() - SSnanites.nanite_monitored_mobs -= host_mob - host_mob.hud_set_nanite_indicator() - -/datum/nanite_program/triggered/self_scan - name = "Host Scan" - desc = "" - unique = FALSE - trigger_cost = 3 - trigger_cooldown = 50 - rogue_types = list(/datum/nanite_program/toxic) - - extra_settings = list(NES_SCAN_TYPE) - var/scan_type = "Medical" - -/datum/nanite_program/triggered/self_scan/set_extra_setting(user, setting) - if(setting == NES_SCAN_TYPE) - var/list/scan_types = list("Medical","Chemical","Nanite") - var/new_scan_type = input("Choose the scan type", name) as null|anything in sortList(scan_types) - if(!new_scan_type) - return - scan_type = new_scan_type - -/datum/nanite_program/triggered/self_scan/get_extra_setting(setting) - if(setting == NES_SCAN_TYPE) - return scan_type - -/datum/nanite_program/triggered/self_scan/copy_extra_settings_to(datum/nanite_program/triggered/self_scan/target) - target.scan_type = scan_type - -/datum/nanite_program/triggered/self_scan/trigger() - if(!..()) - return - if(host_mob.stat == DEAD) - return - switch(scan_type) - if("Medical") - healthscan(host_mob, host_mob) - if("Chemical") - chemscan(host_mob, host_mob) - if("Nanite") - SEND_SIGNAL(host_mob, COMSIG_NANITE_SCAN, host_mob, TRUE) - -/datum/nanite_program/stealth - name = "Stealth" - desc = "" - rogue_types = list(/datum/nanite_program/toxic) - use_rate = 0.2 - -/datum/nanite_program/stealth/enable_passive_effect() - . = ..() - nanites.stealth = TRUE - -/datum/nanite_program/stealth/disable_passive_effect() - . = ..() - nanites.stealth = FALSE - -/datum/nanite_program/reduced_diagnostics - name = "Reduced Diagnostics" - desc = "Disables some high-cost diagnostics in the nanites, making them unable to communicate their program list to portable scanners. \ - Doing so saves some power, slightly increasing their replication speed." - rogue_types = list(/datum/nanite_program/toxic) - use_rate = -0.1 - -/datum/nanite_program/reduced_diagnostics/enable_passive_effect() - . = ..() - nanites.diagnostics = FALSE - -/datum/nanite_program/reduced_diagnostics/disable_passive_effect() - . = ..() - nanites.diagnostics = TRUE - -/datum/nanite_program/relay - name = "Relay" - desc = "" - rogue_types = list(/datum/nanite_program/toxic) - - extra_settings = list(NES_RELAY_CHANNEL) - var/relay_channel = 1 - -/datum/nanite_program/relay/set_extra_setting(user, setting) - if(setting == NES_RELAY_CHANNEL) - var/new_channel = input(user, "Set the relay channel (1-9999):", name, null) as null|num - if(isnull(new_channel)) - return - relay_channel = CLAMP(round(new_channel, 1), 1, 9999) - -/datum/nanite_program/relay/get_extra_setting(setting) - if(setting == NES_RELAY_CHANNEL) - return relay_channel - -/datum/nanite_program/relay/copy_extra_settings_to(datum/nanite_program/relay/target) - target.relay_channel = relay_channel - -/datum/nanite_program/relay/enable_passive_effect() - . = ..() - SSnanites.nanite_relays |= src - -/datum/nanite_program/relay/disable_passive_effect() - . = ..() - SSnanites.nanite_relays -= src - -/datum/nanite_program/relay/proc/relay_signal(code, relay_code, source) - if(!activated) - return - if(!host_mob) - return - if(relay_code != relay_channel) - return - SEND_SIGNAL(host_mob, COMSIG_NANITE_SIGNAL, code, source) - -/datum/nanite_program/relay/proc/relay_comm_signal(comm_code, relay_code, comm_message) - if(!activated) - return - if(!host_mob) - return - if(relay_code != relay_channel) - return - SEND_SIGNAL(host_mob, COMSIG_NANITE_COMM_SIGNAL, comm_code, comm_message) - -/datum/nanite_program/metabolic_synthesis - name = "Metabolic Synthesis" - desc = "" - use_rate = -0.5 //generates nanites - rogue_types = list(/datum/nanite_program/toxic) - -/datum/nanite_program/metabolic_synthesis/check_conditions() - if(!iscarbon(host_mob)) - return FALSE - var/mob/living/carbon/C = host_mob - if(C.nutrition <= NUTRITION_LEVEL_WELL_FED) - return FALSE - return ..() - -/datum/nanite_program/metabolic_synthesis/active_effect() - host_mob.adjust_nutrition(-0.5) - -/datum/nanite_program/research - name = "Distributed Computing" - desc = "" - use_rate = 0.2 - rogue_types = list(/datum/nanite_program/toxic) - -/datum/nanite_program/research/active_effect() - if(!iscarbon(host_mob)) - return - var/points = 1 - if(!host_mob.client) //less brainpower - points *= 0.25 - SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = points)) - -/datum/nanite_program/researchplus - name = "Neural Network" - desc = "" - use_rate = 0.3 - rogue_types = list(/datum/nanite_program/brain_decay) - -/datum/nanite_program/researchplus/enable_passive_effect() - . = ..() - if(!iscarbon(host_mob)) - return - if(host_mob.client) - SSnanites.neural_network_count++ - else - SSnanites.neural_network_count += 0.25 - -/datum/nanite_program/researchplus/disable_passive_effect() - . = ..() - if(!iscarbon(host_mob)) - return - if(host_mob.client) - SSnanites.neural_network_count-- - else - SSnanites.neural_network_count -= 0.25 - -/datum/nanite_program/researchplus/active_effect() - if(!iscarbon(host_mob)) - return - var/mob/living/carbon/C = host_mob - var/points = round(SSnanites.neural_network_count / 12, 0.1) - if(!C.client) //less brainpower - points *= 0.25 - SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = points)) - -/datum/nanite_program/triggered/access - name = "Subdermal ID" - desc = "" - rogue_types = list(/datum/nanite_program/skin_decay) - var/access = list() - -//Syncs the nanites with the cumulative current mob's access level. Can potentially wipe existing access. -/datum/nanite_program/triggered/access/trigger() - var/list/new_access = list() - var/obj/item/current_item - current_item = host_mob.get_active_held_item() - if(current_item) - new_access += current_item.GetAccess() - current_item = host_mob.get_inactive_held_item() - if(current_item) - new_access += current_item.GetAccess() - if(ishuman(host_mob)) - var/mob/living/carbon/human/H = host_mob - current_item = H.wear_ring - if(current_item) - new_access += current_item.GetAccess() - else if(isanimal(host_mob)) - var/mob/living/simple_animal/A = host_mob - current_item = A.access_card - if(current_item) - new_access += current_item.GetAccess() - access = new_access - -/datum/nanite_program/spreading - name = "Infective Exo-Locomotion" - desc = "The nanites gain the ability to survive for brief periods outside of the human body, as well as the ability to start new colonies without an integration process; \ - resulting in an extremely infective strain of nanites." - use_rate = 1.50 - rogue_types = list(/datum/nanite_program/aggressive_replication, /datum/nanite_program/necrotic) - var/spread_cooldown = 0 - -/datum/nanite_program/spreading/active_effect() - if(spread_cooldown < world.time) - return - spread_cooldown = world.time + 50 - var/list/mob/living/target_hosts = list() - for(var/mob/living/L in oview(5, host_mob)) - if(!prob(25)) - continue - if(!(L.mob_biotypes & (MOB_ORGANIC|MOB_UNDEAD))) - continue - target_hosts += L - if(!target_hosts.len) - return - var/mob/living/infectee = pick(target_hosts) - if(prob(100 - (infectee.get_permeability_protection() * 100))) - //this will potentially take over existing nanites! - infectee.AddComponent(/datum/component/nanites, 10) - SEND_SIGNAL(infectee, COMSIG_NANITE_SYNC, nanites) - infectee.investigate_log("was infected by spreading nanites by [key_name(host_mob)] at [AREACOORD(infectee)].", INVESTIGATE_NANITES) - -/datum/nanite_program/triggered/nanite_sting - name = "Nanite Sting" - desc = "" - trigger_cost = 5 - trigger_cooldown = 100 - rogue_types = list(/datum/nanite_program/glitch, /datum/nanite_program/toxic) - -/datum/nanite_program/triggered/nanite_sting/trigger() - if(!..()) - return - var/list/mob/living/target_hosts = list() - for(var/mob/living/L in oview(1, host_mob)) - if(!(L.mob_biotypes & (MOB_ORGANIC|MOB_UNDEAD)) || SEND_SIGNAL(L, COMSIG_HAS_NANITES) || !L.Adjacent(host_mob)) - continue - target_hosts += L - if(!target_hosts.len) - consume_nanites(-5) - return - var/mob/living/infectee = pick(target_hosts) - if(prob(100 - (infectee.get_permeability_protection() * 100))) - //unlike with Infective Exo-Locomotion, this can't take over existing nanites, because Nanite Sting only targets non-hosts. - infectee.AddComponent(/datum/component/nanites, 5) - SEND_SIGNAL(infectee, COMSIG_NANITE_SYNC, nanites) - infectee.investigate_log("was infected by a nanite cluster by [key_name(host_mob)] at [AREACOORD(infectee)].", INVESTIGATE_NANITES) - to_chat(infectee, "I feel a tiny prick.") - -/datum/nanite_program/mitosis - name = "Mitosis" - desc = "The nanites gain the ability to self-replicate, using bluespace to power the process. Becomes more effective the more nanites are already in the host.\ - The replication has also a chance to corrupt the nanite programming due to copy faults - cloud sync is highly recommended." - use_rate = 0 - rogue_types = list(/datum/nanite_program/toxic) - -/datum/nanite_program/mitosis/active_effect() - var/rep_rate = round(nanites.nanite_volume / 50, 1) //0.5 per 50 nanite volume - rep_rate *= 0.5 - nanites.adjust_nanites(null, rep_rate) - if(prob(rep_rate)) - var/datum/nanite_program/fault = pick(nanites.programs) - if(fault == src) - return - fault.software_error() - -/datum/nanite_program/dermal_button - name = "Dermal Button" - desc = "" - extra_settings = list(NES_SENT_CODE,NES_BUTTON_NAME,NES_ICON,NES_COLOR) - unique = FALSE - var/datum/action/innate/nanite_button/button - var/button_name = "Button" - var/icon = "power" - var/color = "green" - var/sent_code = 0 - -/datum/nanite_program/dermal_button/set_extra_setting(user, setting) - if(setting == NES_SENT_CODE) - var/new_code = input(user, "Set the sent code (1-9999):", name, null) as null|num - if(isnull(new_code)) - return - sent_code = CLAMP(round(new_code, 1), 1, 9999) - if(setting == NES_BUTTON_NAME) - var/new_button_name = stripped_input(user, "Choose the name for the button.", NES_BUTTON_NAME, button_name, MAX_NAME_LEN) - if(!new_button_name) - return - button_name = new_button_name - if(setting == NES_ICON) - var/new_icon = input("Select the icon to display on the button:", name) as null|anything in list("one","two","three","four","five","plus","minus","power") - if(!new_icon) - return - icon = new_icon - if(setting == NES_COLOR) - var/new_color = input("Select the color of the button's icon:", name) as null|anything in list("green","red","yellow","blue") - if(!new_color) - return - color = new_color - -/datum/nanite_program/dermal_button/get_extra_setting(setting) - if(setting == NES_SENT_CODE) - return sent_code - if(setting == NES_BUTTON_NAME) - return button_name - if(setting == NES_ICON) - return capitalize(icon) - if(setting == NES_COLOR) - return capitalize(color) - -/datum/nanite_program/dermal_button/copy_extra_settings_to(datum/nanite_program/dermal_button/target) - target.sent_code = sent_code - target.button_name = button_name - target.icon = icon - target.color = color - -/datum/nanite_program/dermal_button/enable_passive_effect() - . = ..() - if(!button) - button = new(src, button_name, icon, color) - button.target = host_mob - button.Grant(host_mob) - -/datum/nanite_program/dermal_button/disable_passive_effect() - . = ..() - if(button) - button.Remove(host_mob) - -/datum/nanite_program/dermal_button/on_mob_remove() - . = ..() - qdel(button) - -/datum/nanite_program/dermal_button/proc/press() - if(activated) - host_mob.visible_message("[host_mob] presses a button on [host_mob.p_their()] forearm.", - "I press the nanite button on your forearm.", null, 2) - SEND_SIGNAL(host_mob, COMSIG_NANITE_SIGNAL, sent_code, "a [name] program") - -/datum/action/innate/nanite_button - name = "Button" - icon_icon = 'icons/mob/actions/actions_items.dmi' - check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUN|AB_CHECK_CONSCIOUS - button_icon_state = "power_green" - var/datum/nanite_program/dermal_button/program - -/datum/action/innate/nanite_button/New(datum/nanite_program/dermal_button/_program, _name, _icon, _color) - ..() - program = _program - name = _name - button_icon_state = "[_icon]_[_color]" - -/datum/action/innate/nanite_button/Activate() - program.press() diff --git a/code/modules/research/nanites/nanite_programs/weapon.dm b/code/modules/research/nanites/nanite_programs/weapon.dm deleted file mode 100644 index fef75ebe3f..0000000000 --- a/code/modules/research/nanites/nanite_programs/weapon.dm +++ /dev/null @@ -1,215 +0,0 @@ -//Programs specifically engineered to cause harm to either the user or its surroundings (as opposed to ones that only do it due to broken programming) -//Very dangerous! - -/datum/nanite_program/flesh_eating - name = "Cellular Breakdown" - desc = "" - use_rate = 1.5 - rogue_types = list(/datum/nanite_program/necrotic) - -/datum/nanite_program/flesh_eating/active_effect() - if(iscarbon(host_mob)) - var/mob/living/carbon/C = host_mob - C.take_bodypart_damage(1, 0, 0) - else - host_mob.adjustBruteLoss(1, TRUE) - if(prob(3)) - to_chat(host_mob, "I feel a stab of pain from somewhere inside you.") - -/datum/nanite_program/poison - name = "Poisoning" - desc = "" - use_rate = 1.5 - rogue_types = list(/datum/nanite_program/toxic) - -/datum/nanite_program/poison/active_effect() - host_mob.adjustToxLoss(1) - if(prob(2)) - to_chat(host_mob, "I feel nauseous.") - if(iscarbon(host_mob)) - var/mob/living/carbon/C = host_mob - C.vomit(20) - -/datum/nanite_program/memory_leak - name = "Memory Leak" - desc = "" - use_rate = 0 - rogue_types = list(/datum/nanite_program/toxic) - -/datum/nanite_program/memory_leak/active_effect() - if(prob(6)) - var/datum/nanite_program/target = pick(nanites.programs) - if(target == src) - return - target.software_error() - -/datum/nanite_program/aggressive_replication - name = "Aggressive Replication" - desc = "" - use_rate = 1 - rogue_types = list(/datum/nanite_program/necrotic) - -/datum/nanite_program/aggressive_replication/active_effect() - var/extra_regen = round(nanites.nanite_volume / 200, 0.1) - nanites.adjust_nanites(null, extra_regen) - host_mob.adjustBruteLoss(extra_regen / 2, TRUE) - -/datum/nanite_program/meltdown - name = "Meltdown" - desc = "Causes an internal meltdown inside the nanites, causing internal burns inside the host as well as rapidly destroying the nanite population.\ - Sets the nanites' safety threshold to 0 when activated." - use_rate = 10 - rogue_types = list(/datum/nanite_program/glitch) - -/datum/nanite_program/meltdown/active_effect() - host_mob.adjustFireLoss(3.5) - -/datum/nanite_program/meltdown/enable_passive_effect() - . = ..() - to_chat(host_mob, "My blood is burning!") - nanites.safety_threshold = 0 - -/datum/nanite_program/meltdown/disable_passive_effect() - . = ..() - to_chat(host_mob, "My blood cools down, and the pain gradually fades.") - -/datum/nanite_program/triggered/explosive - name = "Chain Detonation" - desc = "" - trigger_cost = 25 //plus every idle nanite left afterwards - trigger_cooldown = 100 //Just to avoid double-triggering - rogue_types = list(/datum/nanite_program/toxic) - -/datum/nanite_program/triggered/explosive/trigger() - if(!..()) - return - host_mob.visible_message("[host_mob] starts emitting a high-pitched buzzing, and [host_mob.p_their()] skin begins to glow...",\ - "I start emitting a high-pitched buzzing, and my skin begins to glow...") - addtimer(CALLBACK(src, PROC_REF(boom)), CLAMP((nanites.nanite_volume * 0.35), 25, 150)) - -/datum/nanite_program/triggered/explosive/proc/boom() - var/nanite_amount = nanites.nanite_volume - var/dev_range = FLOOR(nanite_amount/200, 1) - 1 - var/heavy_range = FLOOR(nanite_amount/100, 1) - 1 - var/light_range = FLOOR(nanite_amount/50, 1) - 1 - explosion(host_mob, dev_range, heavy_range, light_range) - qdel(nanites) - -//TODO make it defuse if triggered again - -/datum/nanite_program/triggered/heart_stop - name = "Heart-Stopper" - desc = "" - trigger_cost = 12 - trigger_cooldown = 10 - rogue_types = list(/datum/nanite_program/nerve_decay) - -/datum/nanite_program/triggered/heart_stop/trigger() - if(!..()) - return - if(iscarbon(host_mob)) - var/mob/living/carbon/C = host_mob - var/obj/item/organ/heart/heart = C.getorganslot(ORGAN_SLOT_HEART) - if(heart) - if(heart.beating) - heart.Stop() - else - heart.Restart() - -/datum/nanite_program/triggered/emp - name = "Electromagnetic Resonance" - desc = "" - trigger_cost = 10 - program_flags = NANITE_EMP_IMMUNE - rogue_types = list(/datum/nanite_program/toxic) - -/datum/nanite_program/triggered/emp/trigger() - if(!..()) - return - empulse(host_mob, 1, 2) - -/datum/nanite_program/pyro/active_effect() - host_mob.fire_stacks += 1 - host_mob.IgniteMob() - -/datum/nanite_program/pyro - name = "Sub-Dermal Combustion" - desc = "" - use_rate = 4 - rogue_types = list(/datum/nanite_program/skin_decay, /datum/nanite_program/cryo) - -/datum/nanite_program/pyro/check_conditions() - if(host_mob.fire_stacks >= 10 && host_mob.on_fire) - return FALSE - return ..() - -/datum/nanite_program/pyro/active_effect() - host_mob.fire_stacks += 1 - host_mob.IgniteMob() - -/datum/nanite_program/cryo - name = "Cryogenic Treatment" - desc = "" - use_rate = 1 - rogue_types = list(/datum/nanite_program/skin_decay, /datum/nanite_program/pyro) - -/datum/nanite_program/cryo/check_conditions() - if(host_mob.bodytemperature <= 70) - return FALSE - return ..() - -/datum/nanite_program/cryo/active_effect() - host_mob.adjust_bodytemperature(-rand(15,25), 50) - -/datum/nanite_program/triggered/comm/mind_control - name = "Mind Control" - desc = "" - trigger_cost = 30 - trigger_cooldown = 1800 - rogue_types = list(/datum/nanite_program/brain_decay, /datum/nanite_program/brain_misfire) - - extra_settings = list(NES_DIRECTIVE,NES_COMM_CODE) - var/directive = "..." - -/datum/nanite_program/triggered/comm/mind_control/set_extra_setting(user, setting) - if(setting == NES_DIRECTIVE) - var/new_directive = stripped_input(user, "Choose the directive to imprint with mind control.", NES_DIRECTIVE, directive, MAX_MESSAGE_LEN) - if(!new_directive) - return - directive = new_directive - if(setting == NES_COMM_CODE) - var/new_code = input(user, "Set the communication code (1-9999) or set to 0 to disable external signals.", name, null) as null|num - if(isnull(new_code)) - return - comm_code = CLAMP(round(new_code, 1), 0, 9999) - -/datum/nanite_program/triggered/comm/mind_control/get_extra_setting(setting) - if(setting == NES_DIRECTIVE) - return directive - if(setting == NES_COMM_CODE) - return comm_code - -/datum/nanite_program/triggered/comm/mind_control/copy_extra_settings_to(datum/nanite_program/triggered/comm/mind_control/target) - target.directive = directive - target.comm_code = comm_code - -/datum/nanite_program/triggered/comm/mind_control/trigger(comm_message) - if(!..()) - return - if(host_mob.stat == DEAD) - return - var/sent_directive = comm_message - if(!comm_message) - sent_directive = directive - brainwash(host_mob, sent_directive) - log_game("A mind control nanite program brainwashed [key_name(host_mob)] with the objective '[directive]'.") - addtimer(CALLBACK(src, PROC_REF(end_brainwashing)), 600) - -/datum/nanite_program/triggered/comm/mind_control/proc/end_brainwashing() - if(host_mob.mind && host_mob.mind.has_antag_datum(/datum/antagonist/brainwashed)) - host_mob.mind.remove_antag_datum(/datum/antagonist/brainwashed) - log_game("[key_name(host_mob)] is no longer brainwashed by nanites.") - -/datum/nanite_program/triggered/comm/mind_control/disable_passive_effect() - . = ..() - end_brainwashing() diff --git a/code/modules/research/nanites/nanite_remote.dm b/code/modules/research/nanites/nanite_remote.dm deleted file mode 100644 index 92910b9d3d..0000000000 --- a/code/modules/research/nanites/nanite_remote.dm +++ /dev/null @@ -1,275 +0,0 @@ -#define REMOTE_MODE_OFF "Off" -#define REMOTE_MODE_SELF "Local" -#define REMOTE_MODE_TARGET "Targeted" -#define REMOTE_MODE_AOE "Area" -#define REMOTE_MODE_RELAY "Relay" - -/obj/item/nanite_remote - name = "nanite remote control" - desc = "" - w_class = WEIGHT_CLASS_SMALL - req_access = list(ACCESS_ROBOTICS) - icon = 'icons/obj/device.dmi' - icon_state = "nanite_remote" - item_flags = NOBLUDGEON - var/locked = FALSE //Can be locked, so it can be given to users with a set code and mode - var/mode = REMOTE_MODE_OFF - var/list/saved_settings = list() - var/last_id = 0 - var/code = 0 - var/relay_code = 0 - -/obj/item/nanite_remote/examine(mob/user) - . = ..() - if(locked) - . += "Alt-click to unlock." - -/obj/item/nanite_remote/AltClick(mob/user) - . = ..() - if(!user.canUseTopic(src, BE_CLOSE)) - return - if(locked) - if(allowed(user)) - to_chat(user, "I unlock [src].") - locked = FALSE - update_icon() - else - to_chat(user, "Access denied.") - -/obj/item/nanite_remote/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - to_chat(user, "I override [src]'s ID lock.") - obj_flags |= EMAGGED - if(locked) - locked = FALSE - update_icon() - -/obj/item/nanite_remote/update_icon() - . = ..() - cut_overlays() - if(obj_flags & EMAGGED) - add_overlay("nanite_remote_emagged") - if(locked) - add_overlay("nanite_remote_locked") - -/obj/item/nanite_remote/afterattack(atom/target, mob/user, etc) - switch(mode) - if(REMOTE_MODE_OFF) - return - if(REMOTE_MODE_SELF) - to_chat(user, "I activate [src], signaling the nanites in your bloodstream.") - signal_mob(user, code, key_name(user)) - if(REMOTE_MODE_TARGET) - if(isliving(target) && (get_dist(target, get_turf(src)) <= 7)) - to_chat(user, "I activate [src], signaling the nanites inside [target].") - signal_mob(target, code, key_name(user)) - if(REMOTE_MODE_AOE) - to_chat(user, "I activate [src], signaling the nanites inside every host around you.") - for(var/mob/living/L in view(user, 7)) - signal_mob(L, code, key_name(user)) - if(REMOTE_MODE_RELAY) - to_chat(user, "I activate [src], signaling all connected relay nanites.") - signal_relay(code, relay_code, key_name(user)) - -/obj/item/nanite_remote/proc/signal_mob(mob/living/M, code, source) - SEND_SIGNAL(M, COMSIG_NANITE_SIGNAL, code, source) - -/obj/item/nanite_remote/proc/signal_relay(code, relay_code, source) - for(var/X in SSnanites.nanite_relays) - var/datum/nanite_program/relay/N = X - N.relay_signal(code, relay_code, source) - -/obj/item/nanite_remote/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "nanite_remote", name, 420, 800, master_ui, state) - ui.open() - -/obj/item/nanite_remote/ui_data() - var/list/data = list() - data["code"] = code - data["relay_code"] = relay_code - data["mode"] = mode - data["locked"] = locked - data["saved_settings"] = saved_settings - - return data - -/obj/item/nanite_remote/ui_act(action, params) - if(..()) - return - switch(action) - if("set_code") - if(locked) - return - var/new_code = input("Set code (0000-9999):", name, code) as null|num - if(!isnull(new_code)) - new_code = CLAMP(round(new_code, 1),0,9999) - code = new_code - . = TRUE - if("set_relay_code") - if(locked) - return - var/new_code = input("Set relay code (0000-9999):", name, code) as null|num - if(!isnull(new_code)) - new_code = CLAMP(round(new_code, 1),0,9999) - relay_code = new_code - . = TRUE - if("save") - if(locked) - return - var/code_name = stripped_input(usr, "Set the setting name", "Set Name", null , 15) - if(!code_name) - return - var/new_save = list() - new_save["id"] = last_id + 1 - last_id++ - new_save["name"] = code_name - new_save["code"] = code - new_save["mode"] = mode - new_save["relay_code"] = relay_code - - saved_settings += list(new_save) - . = TRUE - if("load") - var/code_id = params["save_id"] - var/list/setting - for(var/list/X in saved_settings) - if(X["id"] == text2num(code_id)) - setting = X - break - if(setting) - code = setting["code"] - mode = setting["mode"] - relay_code = setting["relay_code"] - . = TRUE - if("remove_save") - if(locked) - return - var/code_id = params["save_id"] - for(var/list/setting in saved_settings) - if(setting["id"] == text2num(code_id)) - saved_settings -= list(setting) - break - . = TRUE - if("select_mode") - if(locked) - return - mode = params["mode"] - . = TRUE - if("lock") - if(!(obj_flags & EMAGGED)) - locked = TRUE - update_icon() - . = TRUE - - -/obj/item/nanite_remote/comm - name = "nanite communication remote" - desc = "" - icon_state = "nanite_comm_remote" - var/comm_code = 0 - var/comm_message = "" - -/obj/item/nanite_remote/comm/afterattack(atom/target, mob/user, etc) - switch(mode) - if(REMOTE_MODE_OFF) - return - if(REMOTE_MODE_SELF) - to_chat(user, "I activate [src], signaling the nanites in your bloodstream.") - signal_mob(user, comm_code, comm_message) - if(REMOTE_MODE_TARGET) - if(isliving(target) && (get_dist(target, get_turf(src)) <= 7)) - to_chat(user, "I activate [src], signaling the nanites inside [target].") - signal_mob(target, code, comm_message, key_name(user)) - if(REMOTE_MODE_AOE) - to_chat(user, "I activate [src], signaling the nanites inside every host around you.") - for(var/mob/living/L in view(user, 7)) - signal_mob(L, code, comm_message, key_name(user)) - if(REMOTE_MODE_RELAY) - to_chat(user, "I activate [src], signaling all connected relay nanites.") - signal_relay(code, relay_code, comm_message, key_name(user)) - -/obj/item/nanite_remote/comm/signal_mob(mob/living/M, code, source) - SEND_SIGNAL(M, COMSIG_NANITE_COMM_SIGNAL, comm_code, comm_message) - -/obj/item/nanite_remote/comm/signal_relay(code, relay_code, source) - for(var/X in SSnanites.nanite_relays) - var/datum/nanite_program/relay/N = X - N.relay_comm_signal(comm_code, relay_code, comm_message) - -/obj/item/nanite_remote/comm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "nanite_comm_remote", name, 420, 800, master_ui, state) - ui.open() - -/obj/item/nanite_remote/comm/ui_data() - var/list/data = list() - data["comm_code"] = comm_code - data["relay_code"] = relay_code - data["comm_message"] = comm_message - data["mode"] = mode - data["locked"] = locked - data["saved_settings"] = saved_settings - - return data - -/obj/item/nanite_remote/comm/ui_act(action, params) - if(..()) - return - switch(action) - if("set_comm_code") - if(locked) - return - var/new_code = input("Set comm code (0000-9999):", name, code) as null|num - if(!isnull(new_code)) - new_code = CLAMP(round(new_code, 1),0,9999) - comm_code = new_code - . = TRUE - if("set_message") - if(locked) - return - var/new_message = stripped_input(usr, "Set the message (Max 300 characters):", "Set Message", null , 300) - if(!new_message) - return - comm_message = new_message - . = TRUE - if("comm_save") - if(locked) - return - var/code_name = stripped_input(usr, "Set the setting name", "Set Name", null , 15) - if(!code_name) - return - var/new_save = list() - new_save["id"] = last_id + 1 - last_id++ - new_save["name"] = code_name - new_save["code"] = comm_code - new_save["mode"] = mode - new_save["relay_code"] = relay_code - new_save["message"] = comm_message - - saved_settings += list(new_save) - . = TRUE - if("comm_load") - var/code_id = params["save_id"] - var/list/setting - for(var/list/X in saved_settings) - if(X["id"] == text2num(code_id)) - setting = X - break - if(setting) - comm_code = setting["code"] - mode = setting["mode"] - relay_code = setting["relay_code"] - comm_message = setting["message"] - . = TRUE - - -#undef REMOTE_MODE_OFF -#undef REMOTE_MODE_SELF -#undef REMOTE_MODE_TARGET -#undef REMOTE_MODE_AOE -#undef REMOTE_MODE_RELAY diff --git a/code/modules/research/nanites/program_disks.dm b/code/modules/research/nanites/program_disks.dm deleted file mode 100644 index 4a2bb286c7..0000000000 --- a/code/modules/research/nanites/program_disks.dm +++ /dev/null @@ -1,133 +0,0 @@ -//Names are intentionally all the same - track your nanites, or use a hand labeler -//This also means that you can give flesh melting nanites to your victims if you feel like it - -/obj/item/disk/nanite_program - name = "nanite program disk" - desc = "" - var/program_type - var/datum/nanite_program/program - -/obj/item/disk/nanite_program/Initialize() - . = ..() - if(program_type) - program = new program_type - -/obj/item/disk/nanite_program/aggressive_replication - program_type = /datum/nanite_program/aggressive_replication - -/obj/item/disk/nanite_program/metabolic_synthesis - program_type = /datum/nanite_program/metabolic_synthesis - -/obj/item/disk/nanite_program/viral - program_type = /datum/nanite_program/viral - -/obj/item/disk/nanite_program/meltdown - program_type = /datum/nanite_program/meltdown - -/obj/item/disk/nanite_program/monitoring - program_type = /datum/nanite_program/monitoring - -/obj/item/disk/nanite_program/relay - program_type = /datum/nanite_program/relay - -/obj/item/disk/nanite_program/emp - program_type = /datum/nanite_program/triggered/emp - -/obj/item/disk/nanite_program/spreading - program_type = /datum/nanite_program/spreading - -/obj/item/disk/nanite_program/regenerative - program_type = /datum/nanite_program/regenerative - -/obj/item/disk/nanite_program/regenerative_advanced - program_type = /datum/nanite_program/regenerative_advanced - -/obj/item/disk/nanite_program/temperature - program_type = /datum/nanite_program/temperature - -/obj/item/disk/nanite_program/purging - program_type = /datum/nanite_program/purging - -/obj/item/disk/nanite_program/purging_advanced - program_type = /datum/nanite_program/purging_advanced - -/obj/item/disk/nanite_program/brain_heal - program_type = /datum/nanite_program/brain_heal - -/obj/item/disk/nanite_program/brain_heal_advanced - program_type = /datum/nanite_program/brain_heal_advanced - -/obj/item/disk/nanite_program/blood_restoring - program_type = /datum/nanite_program/blood_restoring - -/obj/item/disk/nanite_program/repairing - program_type = /datum/nanite_program/repairing - -/obj/item/disk/nanite_program/nervous - program_type = /datum/nanite_program/nervous - -/obj/item/disk/nanite_program/hardening - program_type = /datum/nanite_program/hardening - -/obj/item/disk/nanite_program/coagulating - program_type = /datum/nanite_program/coagulating - -/obj/item/disk/nanite_program/necrotic - program_type = /datum/nanite_program/necrotic - -/obj/item/disk/nanite_program/brain_decay - program_type = /datum/nanite_program/brain_decay - -/obj/item/disk/nanite_program/pyro - program_type = /datum/nanite_program/pyro - -/obj/item/disk/nanite_program/cryo - program_type = /datum/nanite_program/cryo - -/obj/item/disk/nanite_program/toxic - program_type = /datum/nanite_program/toxic - -/obj/item/disk/nanite_program/suffocating - program_type = /datum/nanite_program/suffocating - -/obj/item/disk/nanite_program/heart_stop - program_type = /datum/nanite_program/triggered/heart_stop - -/obj/item/disk/nanite_program/explosive - program_type = /datum/nanite_program/triggered/explosive - -/obj/item/disk/nanite_program/shock - program_type = /datum/nanite_program/triggered/shocking - -/obj/item/disk/nanite_program/sleepy - program_type = /datum/nanite_program/triggered/sleepy - -/obj/item/disk/nanite_program/paralyzing - program_type = /datum/nanite_program/paralyzing - -/obj/item/disk/nanite_program/fake_death - program_type = /datum/nanite_program/fake_death - -/obj/item/disk/nanite_program/pacifying - program_type = /datum/nanite_program/pacifying - -/obj/item/disk/nanite_program/glitch - program_type = /datum/nanite_program/glitch - -/obj/item/disk/nanite_program/brain_misfire - program_type = /datum/nanite_program/pacifying - -/obj/item/disk/nanite_program/skin_decay - program_type = /datum/nanite_program/pacifying - -/obj/item/disk/nanite_program/nerve_decay - program_type = /datum/nanite_program/pacifying - -/obj/item/disk/nanite_program/refractive - program_type = /datum/nanite_program/refractive - -/obj/item/disk/nanite_program/conductive - program_type = /datum/nanite_program/pacifying - -/obj/item/disk/nanite_program/stun - program_type = /datum/nanite_program/triggered/stun diff --git a/code/modules/research/nanites/public_chamber.dm b/code/modules/research/nanites/public_chamber.dm deleted file mode 100644 index 3dd60be2f4..0000000000 --- a/code/modules/research/nanites/public_chamber.dm +++ /dev/null @@ -1,207 +0,0 @@ -/obj/machinery/public_nanite_chamber - name = "public nanite chamber" - desc = "" - circuit = /obj/item/circuitboard/machine/public_nanite_chamber - icon = 'icons/obj/machines/nanite_chamber.dmi' - icon_state = "nanite_chamber" - layer = ABOVE_WINDOW_LAYER - use_power = IDLE_POWER_USE - anchored = TRUE - density = TRUE - idle_power_usage = 50 - active_power_usage = 300 - - var/cloud_id = 1 - var/locked = FALSE - var/breakout_time = 1200 - var/busy = FALSE - var/busy_icon_state - var/message_cooldown = 0 - -/obj/machinery/public_nanite_chamber/Initialize() - . = ..() - occupant_typecache = GLOB.typecache_living - -/obj/machinery/public_nanite_chamber/RefreshParts() - var/obj/item/circuitboard/machine/public_nanite_chamber/board = circuit - if(board) - cloud_id = board.cloud_id - -/obj/machinery/public_nanite_chamber/proc/set_busy(status, working_icon) - busy = status - busy_icon_state = working_icon - update_icon() - -/obj/machinery/public_nanite_chamber/proc/inject_nanites(mob/living/attacker) - if(stat & (NOPOWER|BROKEN)) - return - if((stat & MAINT) || panel_open) - return - if(!occupant || busy) - return - - var/locked_state = locked - locked = TRUE - - //TODO OMINOUS MACHINE SOUNDS - set_busy(TRUE, "[initial(icon_state)]_raising") - addtimer(CALLBACK(src, PROC_REF(set_busy), TRUE, "[initial(icon_state)]_active"),20) - addtimer(CALLBACK(src, PROC_REF(set_busy), TRUE, "[initial(icon_state)]_falling"),60) - addtimer(CALLBACK(src, PROC_REF(complete_injection), locked_state, attacker),80) - -/obj/machinery/public_nanite_chamber/proc/complete_injection(locked_state, mob/living/attacker) - //TODO MACHINE DING - locked = locked_state - set_busy(FALSE) - if(!occupant) - return - if(attacker) - occupant.investigate_log("was injected with nanites by [key_name(attacker)] using [src] at [AREACOORD(src)].", INVESTIGATE_NANITES) - log_combat(attacker, occupant, "injected", null, "with nanites via [src]") - occupant.AddComponent(/datum/component/nanites, 75, cloud_id) - -/obj/machinery/public_nanite_chamber/proc/change_cloud(mob/living/attacker) - if(stat & (NOPOWER|BROKEN)) - return - if((stat & MAINT) || panel_open) - return - if(!occupant || busy) - return - - var/locked_state = locked - locked = TRUE - - set_busy(TRUE, "[initial(icon_state)]_raising") - addtimer(CALLBACK(src, PROC_REF(set_busy), TRUE, "[initial(icon_state)]_active"),20) - addtimer(CALLBACK(src, PROC_REF(set_busy), TRUE, "[initial(icon_state)]_falling"),40) - addtimer(CALLBACK(src, PROC_REF(complete_cloud_change), locked_state, attacker),60) - -/obj/machinery/public_nanite_chamber/proc/complete_cloud_change(locked_state, mob/living/attacker) - locked = locked_state - set_busy(FALSE) - if(!occupant) - return - if(attacker) - occupant.investigate_log("had their nanite cloud ID changed into [cloud_id] by [key_name(attacker)] using [src] at [AREACOORD(src)].", INVESTIGATE_NANITES) - SEND_SIGNAL(occupant, COMSIG_NANITE_SET_CLOUD, cloud_id) - -/obj/machinery/public_nanite_chamber/update_icon() - cut_overlays() - - if((stat & MAINT) || panel_open) - add_overlay("maint") - - else if(!(stat & (NOPOWER|BROKEN))) - if(busy || locked) - add_overlay("red") - if(locked) - add_overlay("bolted") - else - add_overlay("green") - - - - //running and someone in there - if(occupant) - if(busy) - icon_state = busy_icon_state - else - icon_state = initial(icon_state)+ "_occupied" - return - - //running - icon_state = initial(icon_state)+ (state_open ? "_open" : "") - -/obj/machinery/public_nanite_chamber/proc/toggle_open(mob/user) - if(panel_open) - to_chat(user, "Close the maintenance panel first.") - return - - if(state_open) - close_machine(null, user) - return - - else if(locked) - to_chat(user, "The bolts are locked down, securing the door shut.") - return - - open_machine() - -/obj/machinery/public_nanite_chamber/container_resist(mob/living/user) - if(!locked) - open_machine() - return - if(busy) - return - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT - user.visible_message("I see [user] kicking against the door of [src]!", \ - "I lean on the back of [src] and start pushing the door open... (this will take about [DisplayTimeText(breakout_time)].)", \ - "I hear a metallic creaking from [src].") - if(do_after(user,(breakout_time), target = src)) - if(!user || user.stat != CONSCIOUS || user.loc != src || state_open || !locked || busy) - return - locked = FALSE - user.visible_message("[user] successfully broke out of [src]!", \ - "I successfully break out of [src]!") - open_machine() - -/obj/machinery/public_nanite_chamber/close_machine(mob/living/carbon/user, mob/living/attacker) - if(!state_open) - return FALSE - - ..() - - . = TRUE - - addtimer(CALLBACK(src, PROC_REF(try_inject_nanites), attacker), 30) //If someone is shoved in give them a chance to get out before the injection starts - -/obj/machinery/public_nanite_chamber/proc/try_inject_nanites(mob/living/attacker) - if(occupant) - var/mob/living/L = occupant - if(SEND_SIGNAL(L, COMSIG_HAS_NANITES)) - var/datum/component/nanites/nanites = L.GetComponent(/datum/component/nanites) - if(nanites && nanites.cloud_id != cloud_id) - change_cloud(attacker) - return - if(L.mob_biotypes & (MOB_ORGANIC | MOB_UNDEAD)) - inject_nanites(attacker) - -/obj/machinery/public_nanite_chamber/open_machine() - if(state_open) - return FALSE - - ..() - - return TRUE - -/obj/machinery/public_nanite_chamber/relaymove(mob/user as mob) - if(user.stat || locked) - if(message_cooldown <= world.time) - message_cooldown = world.time + 50 - to_chat(user, "[src]'s door won't budge!") - return - open_machine() - -/obj/machinery/public_nanite_chamber/attackby(obj/item/I, mob/user, params) - if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, I))//sent icon_state is irrelevant... - update_icon()//..since we're updating the icon here, since the scanner can be unpowered when opened/closed - return - - if(default_pry_open(I)) - return - - if(default_deconstruction_crowbar(I)) - return - - return ..() - -/obj/machinery/public_nanite_chamber/interact(mob/user) - toggle_open(user) - -/obj/machinery/public_nanite_chamber/MouseDrop_T(mob/target, mob/user) - if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK) || !Adjacent(target) || !user.Adjacent(target) || !iscarbon(target)) - return - if(close_machine(target, user)) - log_combat(user, target, "inserted", null, "into [src].") - add_fingerprint(user) diff --git a/code/modules/research/nanites/rules.dm b/code/modules/research/nanites/rules.dm deleted file mode 100644 index 84ddc89b9e..0000000000 --- a/code/modules/research/nanites/rules.dm +++ /dev/null @@ -1,150 +0,0 @@ -/datum/nanite_rule - var/name = "Generic Condition" - var/desc = "" - var/datum/nanite_program/program - -/datum/nanite_rule/New(datum/nanite_program/new_program) - program = new_program - if(LAZYLEN(new_program.rules) <= 5) //Avoid infinite stacking rules - new_program.rules += src - else - qdel(src) - -/datum/nanite_rule/proc/remove() - program.rules -= src - program = null - qdel(src) - -/datum/nanite_rule/proc/check_rule() - return TRUE - -/datum/nanite_rule/proc/display() - return name - -/datum/nanite_rule/proc/copy_to(datum/nanite_program/new_program) - new type(new_program) - -/datum/nanite_rule/health - name = "Health" - desc = "" - - var/threshold = 50 - var/above = TRUE - -/datum/nanite_rule/health/check_rule() - var/health_percent = program.host_mob.health / program.host_mob.maxHealth * 100 - if(above) - if(health_percent >= threshold) - return TRUE - else - if(health_percent < threshold) - return TRUE - return FALSE - -/datum/nanite_rule/health/display() - return "[name] [above ? ">" : "<"] [threshold]%" - -/datum/nanite_rule/health/copy_to(datum/nanite_program/new_program) - var/datum/nanite_rule/health/rule = new(new_program) - rule.above = above - rule.threshold = threshold - -//TODO allow inversion -/datum/nanite_rule/crit - name = "Crit" - desc = "" - -/datum/nanite_rule/crit/check_rule() - if(program.host_mob.InCritical()) - return TRUE - return FALSE - -/datum/nanite_rule/death - name = "Death" - desc = "" - -/datum/nanite_rule/death/check_rule() - if(program.host_mob.stat == DEAD || HAS_TRAIT(program.host_mob, TRAIT_FAKEDEATH)) - return TRUE - return FALSE - -/datum/nanite_rule/cloud_sync - name = "Cloud Sync" - desc = "" - var/check_type = "Enabled" - -/datum/nanite_rule/cloud_sync/check_rule() - if(check_type == "Enabled") - return program.nanites.cloud_active - else - return !program.nanites.cloud_active - -/datum/nanite_rule/cloud_sync/copy_to(datum/nanite_program/new_program) - var/datum/nanite_rule/cloud_sync/rule = new(new_program) - rule.check_type = check_type - -/datum/nanite_rule/cloud_sync/display() - return "[name]:[check_type]" - -/datum/nanite_rule/nanites - name = "Nanite Volume" - desc = "" - - var/threshold = 50 - var/above = TRUE - -/datum/nanite_rule/nanites/check_rule() - var/nanite_percent = (program.nanites.nanite_volume - program.nanites.safety_threshold)/(program.nanites.max_nanites - program.nanites.safety_threshold)*100 - if(above) - if(nanite_percent >= threshold) - return TRUE - else - if(nanite_percent < threshold) - return TRUE - return FALSE - -/datum/nanite_rule/nanites/copy_to(datum/nanite_program/new_program) - var/datum/nanite_rule/nanites/rule = new(new_program) - rule.above = above - rule.threshold = threshold - -/datum/nanite_rule/nanites/display() - return "[name] [above ? ">" : "<"] [threshold]%" - -/datum/nanite_rule/damage - name = "Damage" - desc = "" - - var/threshold = 50 - var/above = TRUE - var/damage_type = BRUTE - -/datum/nanite_rule/damage/check_rule() - var/damage_amt = 0 - switch(damage_type) - if(BRUTE) - damage_amt = program.host_mob.getBruteLoss() - if(BURN) - damage_amt = program.host_mob.getFireLoss() - if(TOX) - damage_amt = program.host_mob.getToxLoss() - if(OXY) - damage_amt = program.host_mob.getOxyLoss() - if(CLONE) - damage_amt = program.host_mob.getCloneLoss() - - if(damage_amt >= threshold) - if(above) - return TRUE - else if(!above) - return TRUE - return FALSE - -/datum/nanite_rule/damage/copy_to(datum/nanite_program/new_program) - var/datum/nanite_rule/damage/rule = new(new_program) - rule.above = above - rule.threshold = threshold - rule.damage_type = damage_type - -/datum/nanite_rule/damage/display() - return "[damage_type] [above ? ">" : "<"] [threshold]" diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm deleted file mode 100644 index a601ad9f1d..0000000000 --- a/code/modules/research/rdconsole.dm +++ /dev/null @@ -1,1154 +0,0 @@ - -/* -Research and Development (R&D) Console - -This is the main work horse of the R&D system. It contains the menus/controls for the Destructive Analyzer, Protolathe, and Circuit -imprinter. - -Basic use: When it first is created, it will attempt to link up to related devices within 3 squares. It'll only link up if they -aren't already linked to another console. Any consoles it cannot link up with (either because all of a certain type are already -linked or there aren't any in range), you'll just not have access to that menu. In the settings menu, there are menu options that -allow a player to attempt to re-sync with nearby consoles. You can also force it to disconnect from a specific console. - -The only thing that requires toxins access is locking and unlocking the console on the settings menu. -Nothing else in the console has ID requirements. - -*/ -/obj/machinery/computer/rdconsole - name = "R&D Console" - desc = "" - icon_screen = "rdcomp" - icon_keyboard = "rd_key" - var/datum/techweb/stored_research //Reference to global science techweb. - var/obj/item/disk/tech_disk/t_disk //Stores the technology disk. - var/obj/item/disk/design_disk/d_disk //Stores the design disk. - circuit = /obj/item/circuitboard/computer/rdconsole - - var/obj/machinery/rnd/destructive_analyzer/linked_destroy //Linked Destructive Analyzer - var/obj/machinery/rnd/production/protolathe/linked_lathe //Linked Protolathe - var/obj/machinery/rnd/production/circuit_imprinter/linked_imprinter //Linked Circuit Imprinter - - req_access = list(ACCESS_TOX) //lA AND SETTING MANIPULATION REQUIRES SCIENTIST ACCESS. - - //UI VARS - var/screen = RDSCREEN_MENU - var/back = RDSCREEN_MENU - var/locked = FALSE - var/tdisk_uple = FALSE - var/ddisk_uple = FALSE - var/datum/selected_node_id - var/datum/selected_design_id - var/selected_category - var/list/matching_design_ids - var/disk_slot_selected - var/searchstring = "" - var/searchtype = "" - var/ui_mode = RDCONSOLE_UI_MODE_NORMAL - - var/research_control = TRUE - -/obj/machinery/computer/rdconsole/production - circuit = /obj/item/circuitboard/computer/rdconsole/production - research_control = FALSE - -/proc/CallMaterialName(ID) - if (istype(ID, /datum/material)) - var/datum/material/material = ID - return material.name - - else if(GLOB.chemical_reagents_list[ID]) - var/datum/reagent/reagent = GLOB.chemical_reagents_list[ID] - return reagent.name - return ID - -/obj/machinery/computer/rdconsole/proc/SyncRDevices() //Makes sure it is properly sync'ed up with the devices attached to it (if any). - for(var/obj/machinery/rnd/D in oview(3,src)) - if(D.linked_console != null || D.disabled || D.panel_open) - continue - if(istype(D, /obj/machinery/rnd/destructive_analyzer)) - if(linked_destroy == null) - linked_destroy = D - D.linked_console = src - else if(istype(D, /obj/machinery/rnd/production/protolathe)) - if(linked_lathe == null) - var/obj/machinery/rnd/production/protolathe/P = D - if(!P.console_link) - continue - linked_lathe = D - D.linked_console = src - else if(istype(D, /obj/machinery/rnd/production/circuit_imprinter)) - if(linked_imprinter == null) - var/obj/machinery/rnd/production/circuit_imprinter/C = D - if(!C.console_link) - continue - linked_imprinter = D - D.linked_console = src - -/obj/machinery/computer/rdconsole/Initialize() - . = ..() - stored_research = SSresearch.science_tech - stored_research.consoles_accessing[src] = TRUE - matching_design_ids = list() - SyncRDevices() - -/obj/machinery/computer/rdconsole/Destroy() - if(stored_research) - stored_research.consoles_accessing -= src - if(linked_destroy) - linked_destroy.linked_console = null - linked_destroy = null - if(linked_lathe) - linked_lathe.linked_console = null - linked_lathe = null - if(linked_imprinter) - linked_imprinter.linked_console = null - linked_imprinter = null - if(t_disk) - t_disk.forceMove(get_turf(src)) - t_disk = null - if(d_disk) - d_disk.forceMove(get_turf(src)) - d_disk = null - matching_design_ids = null - return ..() - -/obj/machinery/computer/rdconsole/attackby(obj/item/D, mob/user, params) - if(istype(D, /obj/item/research_notes)) - var/obj/item/research_notes/R = D - SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = R.value)) - playsound(src,'sound/blank.ogg', 100, TRUE) - qdel(R) - return TRUE - //Loading a disk into it. - if(istype(D, /obj/item/disk)) - if(istype(D, /obj/item/disk/tech_disk)) - if(t_disk) - to_chat(user, "A technology disk is already loaded!") - return - if(!user.transferItemToLoc(D, src)) - to_chat(user, "[D] is stuck to your hand!") - return - t_disk = D - else if (istype(D, /obj/item/disk/design_disk)) - if(d_disk) - to_chat(user, "A design disk is already loaded!") - return - if(!user.transferItemToLoc(D, src)) - to_chat(user, "[D] is stuck to your hand!") - return - d_disk = D - else - to_chat(user, "Machine cannot accept disks in that format.") - return - to_chat(user, "I insert [D] into \the [src]!") - else if(!(linked_destroy && linked_destroy.busy) && !(linked_lathe && linked_lathe.busy) && !(linked_imprinter && linked_imprinter.busy)) - . = ..() - -/obj/machinery/computer/rdconsole/proc/research_node(id, mob/user) - if(!stored_research.available_nodes[id] || stored_research.researched_nodes[id]) - say("Node unlock failed: Either already researched or not available!") - return FALSE - var/datum/techweb_node/TN = SSresearch.techweb_node_by_id(id) - if(!istype(TN)) - say("Node unlock failed: Unknown error.") - return FALSE - var/list/price = TN.get_price(stored_research) - if(stored_research.can_afford(price)) - investigate_log("[key_name(user)] researched [id]([json_encode(price)]) on techweb id [stored_research.id].", INVESTIGATE_RESEARCH) - if(stored_research == SSresearch.science_tech) - SSblackbox.record_feedback("associative", "science_techweb_unlock", 1, list("id" = "[id]", "name" = TN.display_name, "price" = "[json_encode(price)]", "time" = SQLtime())) - if(stored_research.research_node_id(id)) - say("Successfully researched [TN.display_name].") - var/logname = "Unknown" - if(isAI(user)) - logname = "AI: [user.name]" - if(iscarbon(user)) - var/obj/item/card/id/idcard = user.get_active_held_item() - if(istype(idcard)) - logname = "User: [idcard.registered_name]" - if(ishuman(user)) - var/mob/living/carbon/human/H = user - var/obj/item/I = H.wear_ring - if(istype(I)) - var/obj/item/card/id/ID = I.GetID() - if(istype(ID)) - logname = "User: [ID.registered_name]" - var/i = stored_research.research_logs.len - stored_research.research_logs += null - stored_research.research_logs[++i] = list(TN.display_name, price["General Research"], logname, "[get_area(src)] ([src.x],[src.y],[src.z])") - return TRUE - else - say("Failed to research node: Internal database error!") - return FALSE - say("Not enough research points...") - return FALSE - -/obj/machinery/computer/rdconsole/on_deconstruction() - if(linked_destroy) - linked_destroy.linked_console = null - linked_destroy = null - if(linked_lathe) - linked_lathe.linked_console = null - linked_lathe = null - if(linked_imprinter) - linked_imprinter.linked_console = null - linked_imprinter = null - ..() - -/obj/machinery/computer/rdconsole/emag_act(mob/user) - if(!(obj_flags & EMAGGED)) - to_chat(user, "I disable the security protocols[locked? " and unlock the console":""].") - playsound(src, "sparks", 75, TRUE) - obj_flags |= EMAGGED - locked = FALSE - return ..() - -/obj/machinery/computer/rdconsole/multitool_act(mob/user, obj/item/multitool/I) - . = ..() - var/lathe = linked_lathe && linked_lathe.multitool_act(user, I) - var/print = linked_imprinter && linked_imprinter.multitool_act(user, I) - return lathe || print || . - -/obj/machinery/computer/rdconsole/proc/list_categories(list/categories, menu_num as num) - if(!categories) - return - - var/line_length = 1 - var/list/l = "" - - for(var/C in categories) - if(line_length > 2) - l += "" - line_length = 1 - - l += "" - line_length++ - - l += "
    [C]
    " - return l - -/obj/machinery/computer/rdconsole/proc/ui_header() - var/list/l = list() - var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/research_designs) - l += "[sheet.css_tag()][RDSCREEN_NOBREAK]" - l += "
    [stored_research.organization] Research and Development Network" - l += "Available points:
    [techweb_point_display_rdconsole(stored_research.research_points, stored_research.last_bitcoins)]" - l += "Security protocols: [obj_flags & EMAGGED ? "Disabled" : "Enabled"]" - l += "Main Menu | Back
    [RDSCREEN_NOBREAK]" - l += "[ui_mode == 1? "Normal View" : "Normal View"] | [ui_mode == 2? "Expert View" : "Expert View"] | [ui_mode == 3? "List View" : "List View"]" - return l - -/obj/machinery/computer/rdconsole/proc/ui_main_menu() - var/list/l = list() - if(research_control) - l += "

    Technology" - if(d_disk) - l += "
    Design Disk" - if(t_disk) - l += "
    Tech Disk" - if(linked_destroy) - l += "
    Destructive Analyzer" - if(linked_lathe) - l += "
    Protolathe" - if(linked_imprinter) - l += "
    Circuit Imprinter" - l += "
    Settings

    " - return l - -/obj/machinery/computer/rdconsole/proc/ui_locked() - return list("

    SYSTEM LOCKED


    ") - -/obj/machinery/computer/rdconsole/proc/ui_settings() - var/list/l = list() - l += "

    R&D Console Settings:

    " - l += "Device Linkage Menu" - l += "Lock Console
    " - return l - -/obj/machinery/computer/rdconsole/proc/ui_device_linking() - var/list/l = list() - l += "Settings Menu
    " - l += "

    R&D Console Device Linkage Menu:

    " - l += "Re-sync with Nearby Devices" - l += "

    Linked Devices:

    " - l += linked_destroy? "* Destructive Analyzer Disconnect" : "* No Destructive Analyzer Linked" - l += linked_lathe? "* Protolathe Disconnect" : "* No Protolathe Linked" - l += linked_imprinter? "* Circuit Imprinter Disconnect" : "* No Circuit Imprinter Linked" - l += "
    " - return l - -/obj/machinery/computer/rdconsole/proc/ui_protolathe_header() - var/list/l = list() - l += "
    Protolathe Menu" - if(linked_lathe.materials.mat_container) - l += "Material Amount: [linked_lathe.materials.format_amount()]" - else - l += "No material storage connected, please contact the quartermaster." - l += "Chemical volume: [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]
    " - return l - -/obj/machinery/computer/rdconsole/proc/ui_protolathe_category_view() //Legacy code - RDSCREEN_UI_LATHE_CHECK - var/list/l = list() - l += ui_protolathe_header() - l += "

    Browsing [selected_category]:

    " - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(!(selected_category in D.category)|| !(D.build_type & PROTOLATHE)) - continue - if(!(isnull(linked_lathe.allowed_department_flags) || (D.departmental_flags & linked_lathe.allowed_department_flags))) - continue - var/temp_material - var/c = 50 - var/coeff = linked_lathe.efficiency_coeff - if(!linked_lathe.efficient_with(D.build_path)) - coeff = 1 - - var/all_materials = D.materials + D.reagents_list - for(var/M in all_materials) - var/t = linked_lathe.check_mat(D, M) - temp_material += " | " - if (t < 1) - temp_material += "[all_materials[M]/coeff] [CallMaterialName(M)]" - else - temp_material += " [all_materials[M]/coeff] [CallMaterialName(M)]" - c = min(c,t) - - if (c >= 1) - l += "[D.name][RDSCREEN_NOBREAK]" - if(c >= 5) - l += "x5[RDSCREEN_NOBREAK]" - if(c >= 10) - l += "x10[RDSCREEN_NOBREAK]" - l += "[temp_material][RDSCREEN_NOBREAK]" - else - l += "[D.name][temp_material][RDSCREEN_NOBREAK]" - l += "" - l += "
    " - return l - -/obj/machinery/computer/rdconsole/proc/ui_protolathe() //Legacy code - RDSCREEN_UI_LATHE_CHECK - var/list/l = list() - l += ui_protolathe_header() - - l += "
    \ - \ - \ - \ - \ - \ -

    " - - l += list_categories(linked_lathe.categories, RDSCREEN_PROTOLATHE_CATEGORY_VIEW) - - return l - -/obj/machinery/computer/rdconsole/proc/ui_protolathe_search() //Legacy code - RDSCREEN_UI_LATHE_CHECK - var/list/l = list() - l += ui_protolathe_header() - for(var/id in matching_design_ids) - var/datum/design/D = SSresearch.techweb_design_by_id(id) - if(!(isnull(linked_lathe.allowed_department_flags) || (D.departmental_flags & linked_lathe.allowed_department_flags))) - continue - var/temp_material - var/c = 50 - var/all_materials = D.materials + D.reagents_list - var/coeff = linked_lathe.efficiency_coeff - if(!linked_lathe.efficient_with(D.build_path)) - coeff = 1 - for(var/M in all_materials) - var/t = linked_lathe.check_mat(D, M) - temp_material += " | " - if (t < 1) - temp_material += "[all_materials[M]/coeff] [CallMaterialName(M)]" - else - temp_material += " [all_materials[M]/coeff] [CallMaterialName(M)]" - c = min(c,t) - - if (c >= 1) - l += "[D.name][RDSCREEN_NOBREAK]" - if(c >= 5) - l += "x5[RDSCREEN_NOBREAK]" - if(c >= 10) - l += "x10[RDSCREEN_NOBREAK]" - l += "[temp_material][RDSCREEN_NOBREAK]" - else - l += "[D.name][temp_material][RDSCREEN_NOBREAK]" - l += "" - l += "" - return l - -/obj/machinery/computer/rdconsole/proc/ui_protolathe_materials() //Legacy code - RDSCREEN_UI_LATHE_CHECK - var/datum/component/material_container/mat_container = linked_lathe.materials.mat_container - if (!mat_container) - screen = RDSCREEN_PROTOLATHE - return ui_protolathe() - var/list/l = list() - l += ui_protolathe_header() - l += "

    Material Storage:

    " - for(var/mat_id in mat_container.materials) - var/datum/material/M = mat_id - var/amount = mat_container.materials[mat_id] - var/ref = REF(M) - l += "* [amount] of [M.name]: " - if(amount >= MINERAL_MATERIAL_AMOUNT) l += "Eject [RDSCREEN_NOBREAK]" - if(amount >= MINERAL_MATERIAL_AMOUNT*5) l += "5x [RDSCREEN_NOBREAK]" - if(amount >= MINERAL_MATERIAL_AMOUNT) l += "All[RDSCREEN_NOBREAK]" - l += "" - l += "
    [RDSCREEN_NOBREAK]" - return l - -/obj/machinery/computer/rdconsole/proc/ui_protolathe_chemicals() //Legacy code - RDSCREEN_UI_LATHE_CHECK - var/list/l = list() - l += ui_protolathe_header() - l += "
    Disposal All Chemicals in Storage" - l += "

    Chemical Storage:

    " - for(var/datum/reagent/R in linked_lathe.reagents.reagent_list) - l += "[R.name]: [R.volume]" - l += "Purge" - l += "
    " - return l - -/obj/machinery/computer/rdconsole/proc/ui_circuit_header() //Legacy Code - var/list/l = list() - l += "
    Circuit Imprinter Menu" - if (linked_imprinter.materials.mat_container) - l += "Material Amount: [linked_imprinter.materials.format_amount()]" - else - l += "No material storage connected, please contact the quartermaster." - l += "Chemical volume: [linked_imprinter.reagents.total_volume] / [linked_imprinter.reagents.maximum_volume]
    " - return l - -/obj/machinery/computer/rdconsole/proc/ui_circuit() //Legacy code - RDSCREEN_UI_IMPRINTER_CHECK - var/list/l = list() - l += ui_circuit_header() - l += "

    Circuit Imprinter Menu:

    " - - l += "
    \ - \ - \ - \ - \ - \ -

    " - - l += list_categories(linked_imprinter.categories, RDSCREEN_IMPRINTER_CATEGORY_VIEW) - return l - -/obj/machinery/computer/rdconsole/proc/ui_circuit_category_view() //Legacy code - RDSCREEN_UI_IMPRINTER_CHECK - var/list/l = list() - l += ui_circuit_header() - l += "

    Browsing [selected_category]:

    " - - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(!(selected_category in D.category) || !(D.build_type & IMPRINTER)) - continue - if(!(isnull(linked_imprinter.allowed_department_flags) || (D.departmental_flags & linked_imprinter.allowed_department_flags))) - continue - var/temp_materials - var/check_materials = TRUE - - var/all_materials = D.materials + D.reagents_list - var/coeff = linked_imprinter.efficiency_coeff - if(!linked_imprinter.efficient_with(D.build_path)) - coeff = 1 - - for(var/M in all_materials) - temp_materials += " | " - if (!linked_imprinter.check_mat(D, M)) - check_materials = FALSE - temp_materials += " [all_materials[M]/coeff] [CallMaterialName(M)]" - else - temp_materials += " [all_materials[M]/coeff] [CallMaterialName(M)]" - if (check_materials) - l += "[D.name][temp_materials]" - else - l += "[D.name][temp_materials]" - l += "
    " - return l - -/obj/machinery/computer/rdconsole/proc/ui_circuit_search() //Legacy code - RDSCREEN_UI_IMPRINTER_CHECK - var/list/l = list() - l += ui_circuit_header() - l += "

    Search results:

    " - - for(var/id in matching_design_ids) - var/datum/design/D = SSresearch.techweb_design_by_id(id) - if(!(isnull(linked_imprinter.allowed_department_flags) || (D.departmental_flags & linked_imprinter.allowed_department_flags))) - continue - var/temp_materials - var/check_materials = TRUE - var/all_materials = D.materials + D.reagents_list - var/coeff = linked_imprinter.efficiency_coeff - if(!linked_imprinter.efficient_with(D.build_path)) - coeff = 1 - for(var/M in all_materials) - temp_materials += " | " - if (!linked_imprinter.check_mat(D, M)) - check_materials = FALSE - temp_materials += " [all_materials[M]/coeff] [CallMaterialName(M)]" - else - temp_materials += " [all_materials[M]/coeff] [CallMaterialName(M)]" - if (check_materials) - l += "[D.name][temp_materials]" - else - l += "[D.name][temp_materials]" - l += "
    " - return l - -/obj/machinery/computer/rdconsole/proc/ui_circuit_chemicals() //legacy code - RDSCREEN_UI_IMPRINTER_CHECK - var/list/l = list() - l += ui_circuit_header() - l += "Disposal All Chemicals in Storage
    " - l += "

    Chemical Storage:

    " - for(var/datum/reagent/R in linked_imprinter.reagents.reagent_list) - l += "[R.name]: [R.volume]" - l += "Purge" - return l - -/obj/machinery/computer/rdconsole/proc/ui_circuit_materials() //Legacy code! - RDSCREEN_UI_IMPRINTER_CHECK - var/datum/component/material_container/mat_container = linked_imprinter.materials.mat_container - if (!mat_container) - screen = RDSCREEN_IMPRINTER - return ui_circuit() - var/list/l = list() - l += ui_circuit_header() - l += "

    Material Storage:

    " - for(var/mat_id in mat_container.materials) - var/datum/material/M = mat_id - var/amount = mat_container.materials[mat_id] - var/ref = REF(M) - l += "* [amount] of [M.name]: " - if(amount >= MINERAL_MATERIAL_AMOUNT) l += "Eject [RDSCREEN_NOBREAK]" - if(amount >= MINERAL_MATERIAL_AMOUNT*5) l += "5x [RDSCREEN_NOBREAK]" - if(amount >= MINERAL_MATERIAL_AMOUNT) l += "All[RDSCREEN_NOBREAK]" - l += "" - l += "
    [RDSCREEN_NOBREAK]" - return l - -/obj/machinery/computer/rdconsole/proc/ui_techdisk() //Legacy code - RDSCREEN_UI_TDISK_CHECK - var/list/l = list() - l += "
    Disk Operations: Clear Disk" - l += "Eject Disk" - l += "Upload All" - l += "Load Technology to Disk
    " - l += "

    Stored Technology Nodes:

    " - for(var/i in t_disk.stored_research.researched_nodes) - var/datum/techweb_node/N = SSresearch.techweb_node_by_id(i) - l += "[N.display_name]" - l += "
    " - return l - -/obj/machinery/computer/rdconsole/proc/ui_designdisk() //Legacy code - RDSCREEN_UI_DDISK_CHECK - var/list/l = list() - l += "Disk Operations: Clear DiskUpload AllEject Disk" - for(var/i in 1 to d_disk.max_blueprints) - l += "
    " - if(d_disk.blueprints[i]) - var/datum/design/D = d_disk.blueprints[i] - l += "[D.name]" - l += "Operations: Upload to database Clear Slot" - else - l += "Empty Slot Operations: Load Design to Slot" - l += "
    " - return l - -/obj/machinery/computer/rdconsole/proc/ui_designdisk_upload() //Legacy code - RDSCREEN_UI_DDISK_CHECK - var/list/l = list() - l += "Return to Disk Operations
    " - l += "

    Load Design to Disk:

    " - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - l += "[D.name] " - l += "Copy to Disk" - l += "
    " - return l - -/obj/machinery/computer/rdconsole/proc/ui_deconstruct() //Legacy code - RDSCREEN_UI_DECONSTRUCT_CHECK - var/list/l = list() - if(!linked_destroy.loaded_item) - l += "
    No item loaded. Standing-by...
    " - else - l += "
    [RDSCREEN_NOBREAK]" - l += "
    [icon2html(linked_destroy.loaded_item, usr)][linked_destroy.loaded_item.name] Eject
    [RDSCREEN_NOBREAK]" - l += "Select a node to boost by deconstructing this item. This item can boost:" - - var/anything = FALSE - var/list/boostable_nodes = techweb_item_boost_check(linked_destroy.loaded_item) - for(var/id in boostable_nodes) - anything = TRUE - var/list/worth = boostable_nodes[id] - var/datum/techweb_node/N = SSresearch.techweb_node_by_id(id) - - l += "
    [RDSCREEN_NOBREAK]" - if (stored_research.researched_nodes[N.id]) // already researched - l += "[N.display_name]" - l += "This node has already been researched." - else if(!length(worth)) // reveal only - if (stored_research.hidden_nodes[N.id]) - l += "[N.display_name]" - l += "This node will be revealed." - else - l += "[N.display_name]" - l += "This node has already been revealed." - else // boost by the difference - var/list/differences = list() - var/list/already_boosted = stored_research.boosted_nodes[N.id] - for(var/i in worth) - var/already_boosted_amount = already_boosted? stored_research.boosted_nodes[N.id][i] : 0 - var/amt = min(worth[i], N.research_costs[i]) - already_boosted_amount - if(amt > 0) - differences[i] = amt - if (length(differences)) - l += "[N.display_name]" - l += "This node will be boosted with the following:
    [techweb_point_display_generic(differences)]" - else - l += "[N.display_name]" - l += "This node has already been boosted." - l += "
    [RDSCREEN_NOBREAK]" - - // point deconstruction and material reclamation use the same ID to prevent accidentally missing the points - var/list/point_values = techweb_item_point_check(linked_destroy.loaded_item) - if(point_values) - anything = TRUE - l += "
    [RDSCREEN_NOBREAK]" - if (stored_research.deconstructed_items[linked_destroy.loaded_item.type]) - l += "Point Deconstruction" - l += "This item's points have already been claimed." - else - l += "Point Deconstruction" - l += "This item is worth:
    [techweb_point_display_generic(point_values)]!" - l += "
    [RDSCREEN_NOBREAK]" - - if(!(linked_destroy.loaded_item.resistance_flags & INDESTRUCTIBLE)) - var/list/materials = linked_destroy.loaded_item.custom_materials - l += "
    [LAZYLEN(materials)? "Material Reclamation" : "Destroy Item"]" - for (var/M in materials) - l += "* [CallMaterialName(M)] x [materials[M]]" - l += "
    [RDSCREEN_NOBREAK]" - anything = TRUE - - if (!anything) - l += "Nothing!" - - l += "
    " - return l - -/obj/machinery/computer/rdconsole/proc/ui_techweb() - var/list/l = list() - if(ui_mode != RDCONSOLE_UI_MODE_LIST) - var/list/columns = list() - var/max_tier = 0 - for (var/node_ in stored_research.tiers) - var/datum/techweb_node/node = SSresearch.techweb_node_by_id(node_) - var/tier = stored_research.tiers[node.id] - LAZYINITLIST(columns["[tier]"]) // String hackery to make the numbers associative - columns["[tier]"] += ui_techweb_single_node(node, minimal=(tier != 1)) - max_tier = max(max_tier, tier) - - l += "[RDSCREEN_NOBREAK]" - if(max_tier) - for(var/tier in 0 to max_tier) - l += "[RDSCREEN_NOBREAK]" - l += "
    ResearchedAvailableFuture
    [RDSCREEN_NOBREAK]" - l += columns["[tier]"] - l += "
    [RDSCREEN_NOBREAK]" - else - var/list/avail = list() //This could probably be optimized a bit later. - var/list/unavail = list() - var/list/res = list() - for(var/v in stored_research.researched_nodes) - res += SSresearch.techweb_node_by_id(v) - for(var/v in stored_research.available_nodes) - if(stored_research.researched_nodes[v]) - continue - avail += SSresearch.techweb_node_by_id(v) - for(var/v in stored_research.visible_nodes) - if(stored_research.available_nodes[v]) - continue - unavail += SSresearch.techweb_node_by_id(v) - l += "

    Technology Nodes:

    [RDSCREEN_NOBREAK]" - l += "

    Available for Research:

    " - for(var/datum/techweb_node/N in avail) - var/not_unlocked = (stored_research.available_nodes[N.id] && !stored_research.researched_nodes[N.id]) - var/has_points = (stored_research.can_afford(N.get_price(stored_research))) - var/research_href = not_unlocked? (has_points? "Research" : "Not Enough Points") : null - l += "[N.display_name][research_href]" - l += "

    Locked Nodes:

    " - for(var/datum/techweb_node/N in unavail) - l += "[N.display_name]" - l += "

    Researched Nodes:

    " - for(var/datum/techweb_node/N in res) - l += "[N.display_name]" - l += "
    [RDSCREEN_NOBREAK]" - return l - -/obj/machinery/computer/rdconsole/proc/machine_icon(atom/item) - return icon2html(initial(item.icon), usr, initial(item.icon_state), SOUTH) - -/obj/machinery/computer/rdconsole/proc/ui_techweb_single_node(datum/techweb_node/node, selflink=TRUE, minimal=FALSE) - var/list/l = list() - if (stored_research.hidden_nodes[node.id]) - return l - var/display_name = node.display_name - if (selflink) - display_name = "[display_name]" - l += "
    [display_name] [RDSCREEN_NOBREAK]" - if(minimal) - l += "
    [node.description]" - else - if(stored_research.researched_nodes[node.id]) - l += "Researched" - else if(stored_research.available_nodes[node.id]) - if(stored_research.can_afford(node.get_price(stored_research))) - l += "
    [node.price_display(stored_research)]" - else - l += "
    [node.price_display(stored_research)]" // gray - too expensive - else - l += "
    [node.price_display(stored_research)]" // red - missing prereqs - if(ui_mode == RDCONSOLE_UI_MODE_NORMAL) - l += "[node.description]" - for(var/i in node.design_ids) - var/datum/design/D = SSresearch.techweb_design_by_id(i) - l += "[D.icon_html(usr)][RDSCREEN_NOBREAK]" - l += "
    [RDSCREEN_NOBREAK]" - return l - -/obj/machinery/computer/rdconsole/proc/ui_techweb_nodeview() - var/datum/techweb_node/selected_node = SSresearch.techweb_node_by_id(selected_node_id) - RDSCREEN_UI_SNODE_CHECK - var/list/l = list() - if(stored_research.hidden_nodes[selected_node.id]) - l += "

    ERROR: RESEARCH NODE UNKNOWN.

    " - return - - l += "[RDSCREEN_NOBREAK]" - if (length(selected_node.prereq_ids)) - l += "[RDSCREEN_NOBREAK]" - l += "[RDSCREEN_NOBREAK]" - if (length(selected_node.unlock_ids)) - l += "[RDSCREEN_NOBREAK]" - - l += "[RDSCREEN_NOBREAK]" - if (length(selected_node.prereq_ids)) - l += "[RDSCREEN_NOBREAK]" - l += "[RDSCREEN_NOBREAK]" - if (length(selected_node.unlock_ids)) - l += "[RDSCREEN_NOBREAK]" - - l += "
    RequiresCurrent NodeUnlocks
    [RDSCREEN_NOBREAK]" - for (var/i in selected_node.prereq_ids) - l += ui_techweb_single_node(SSresearch.techweb_node_by_id(i)) - l += "[RDSCREEN_NOBREAK]" - l += ui_techweb_single_node(selected_node, selflink=FALSE) - l += "[RDSCREEN_NOBREAK]" - for (var/i in selected_node.unlock_ids) - l += ui_techweb_single_node(SSresearch.techweb_node_by_id(i)) - l += "
    [RDSCREEN_NOBREAK]" - return l - -/obj/machinery/computer/rdconsole/proc/ui_techweb_designview() //Legacy code - var/datum/design/selected_design = SSresearch.techweb_design_by_id(selected_design_id) - RDSCREEN_UI_SDESIGN_CHECK - var/list/l = list() - l += "
    [selected_design.icon_html(usr)][selected_design.name]
    [RDSCREEN_NOBREAK]" - if(selected_design.build_type) - var/lathes = list() - if(selected_design.build_type & IMPRINTER) - lathes += "[machine_icon(/obj/machinery/rnd/production/circuit_imprinter)][RDSCREEN_NOBREAK]" - if (linked_imprinter && stored_research.researched_designs[selected_design.id]) - l += "Imprint" - if(selected_design.build_type & PROTOLATHE) - lathes += "[machine_icon(/obj/machinery/rnd/production/protolathe)][RDSCREEN_NOBREAK]" - if (linked_lathe && stored_research.researched_designs[selected_design.id]) - l += "Construct" - if(selected_design.build_type & AUTOLATHE) - lathes += "[machine_icon(/obj/machinery/autolathe)][RDSCREEN_NOBREAK]" - if(selected_design.build_type & MECHFAB) - lathes += "[machine_icon(/obj/machinery/mecha_part_fabricator)][RDSCREEN_NOBREAK]" - if(selected_design.build_type & BIOGENERATOR) - lathes += "[machine_icon(/obj/machinery/biogenerator)][RDSCREEN_NOBREAK]" - if(selected_design.build_type & LIMBGROWER) - lathes += "[machine_icon(/obj/machinery/limbgrower)][RDSCREEN_NOBREAK]" - if(selected_design.build_type & SMELTER) - lathes += "[machine_icon(/obj/machinery/mineral/processing_unit)][RDSCREEN_NOBREAK]" - l += "Construction types:" - l += lathes - l += "" - l += "Required materials:" - var/all_mats = selected_design.materials + selected_design.reagents_list - for(var/M in all_mats) - l += "* [CallMaterialName(M)] x [all_mats[M]]" - l += "Unlocked by:" - for (var/i in selected_design.unlocked_by) - l += ui_techweb_single_node(SSresearch.techweb_node_by_id(i)) - l += "[RDSCREEN_NOBREAK]
    " - return l - -//Fuck TGUI. -/obj/machinery/computer/rdconsole/proc/generate_ui() - var/list/ui = list() - ui += ui_header() - if(locked) - ui += ui_locked() - else - switch(screen) - if(RDSCREEN_MENU) - ui += ui_main_menu() - if(RDSCREEN_TECHWEB) - ui += ui_techweb() - if(RDSCREEN_TECHWEB_NODEVIEW) - ui += ui_techweb_nodeview() - if(RDSCREEN_TECHWEB_DESIGNVIEW) - ui += ui_techweb_designview() - if(RDSCREEN_DESIGNDISK) - ui += ui_designdisk() - if(RDSCREEN_DESIGNDISK_UPLOAD) - ui += ui_designdisk_upload() - if(RDSCREEN_TECHDISK) - ui += ui_techdisk() - if(RDSCREEN_DECONSTRUCT) - ui += ui_deconstruct() - if(RDSCREEN_PROTOLATHE) - ui += ui_protolathe() - if(RDSCREEN_PROTOLATHE_CATEGORY_VIEW) - ui += ui_protolathe_category_view() - if(RDSCREEN_PROTOLATHE_MATERIALS) - ui += ui_protolathe_materials() - if(RDSCREEN_PROTOLATHE_CHEMICALS) - ui += ui_protolathe_chemicals() - if(RDSCREEN_PROTOLATHE_SEARCH) - ui += ui_protolathe_search() - if(RDSCREEN_IMPRINTER) - ui += ui_circuit() - if(RDSCREEN_IMPRINTER_CATEGORY_VIEW) - ui += ui_circuit_category_view() - if(RDSCREEN_IMPRINTER_MATERIALS) - ui += ui_circuit_materials() - if(RDSCREEN_IMPRINTER_CHEMICALS) - ui += ui_circuit_chemicals() - if(RDSCREEN_IMPRINTER_SEARCH) - ui += ui_circuit_search() - if(RDSCREEN_SETTINGS) - ui += ui_settings() - if(RDSCREEN_DEVICE_LINKING) - ui += ui_device_linking() - for(var/i in 1 to length(ui)) - if(!findtextEx(ui[i], RDSCREEN_NOBREAK)) - ui[i] += "
    " - ui[i] = replacetextEx(ui[i], RDSCREEN_NOBREAK, "") - return ui.Join("") - -/obj/machinery/computer/rdconsole/Topic(raw, ls) - if(..()) - return - add_fingerprint(usr) - usr.set_machine(src) - if(ls["switch_screen"]) - back = screen - screen = text2num(ls["switch_screen"]) - if(ls["ui_mode"]) - ui_mode = text2num(ls["ui_mode"]) - if(ls["lock_console"]) - if(obj_flags & EMAGGED) - to_chat(usr, "Security protocol error: Unable to lock.") - return - if(allowed(usr)) - lock_console(usr) - else - to_chat(usr, "Unauthorized Access.") - if(ls["unlock_console"]) - if(allowed(usr)) - unlock_console(usr) - else - to_chat(usr, "Unauthorized Access.") - if(ls["find_device"]) - SyncRDevices() - say("Resynced with nearby devices.") - if(ls["back_screen"]) - back = text2num(ls["back_screen"]) - if(ls["build"]) //Causes the Protolathe to build something. - if(QDELETED(linked_lathe)) - say("No Protolathe Linked!") - return - if(linked_lathe.busy) - say("Warning: Protolathe busy!") - else - linked_lathe.user_try_print_id(ls["build"], ls["amount"]) - if(ls["imprint"]) - if(QDELETED(linked_imprinter)) - say("No Circuit Imprinter Linked!") - return - if(linked_imprinter.busy) - say("Warning: Imprinter busy!") - else - linked_imprinter.user_try_print_id(ls["imprint"]) - if(ls["category"]) - selected_category = ls["category"] - if(ls["disconnect"]) //The R&D console disconnects with a specific device. - switch(ls["disconnect"]) - if("destroy") - if(QDELETED(linked_destroy)) - say("No Destructive Analyzer Linked!") - return - linked_destroy.linked_console = null - linked_destroy = null - if("lathe") - if(QDELETED(linked_lathe)) - say("No Protolathe Linked!") - return - linked_lathe.linked_console = null - linked_lathe = null - if("imprinter") - if(QDELETED(linked_imprinter)) - say("No Circuit Imprinter Linked!") - return - linked_imprinter.linked_console = null - linked_imprinter = null - if(ls["eject_design"]) //Eject the design disk. - eject_disk("design") - screen = RDSCREEN_MENU - say("Ejecting Design Disk") - if(ls["eject_tech"]) //Eject the technology disk. - eject_disk("tech") - screen = RDSCREEN_MENU - say("Ejecting Technology Disk") - if(ls["deconstruct"]) - if(QDELETED(linked_destroy)) - say("No Destructive Analyzer Linked!") - return - if(!linked_destroy.user_try_decon_id(ls["deconstruct"], usr)) - say("Destructive analysis failed!") - //Protolathe Materials - if(ls["disposeP"]) //Causes the protolathe to dispose of a single reagent (all of it) - if(QDELETED(linked_lathe)) - say("No Protolathe Linked!") - return - linked_lathe.reagents.del_reagent(ls["disposeP"]) - if(ls["disposeallP"]) //Causes the protolathe to dispose of all it's reagents. - if(QDELETED(linked_lathe)) - say("No Protolathe Linked!") - return - linked_lathe.reagents.clear_reagents() - if(ls["ejectsheet"]) //Causes the protolathe to eject a sheet of material - if(QDELETED(linked_lathe)) - say("No Protolathe Linked!") - return - if(!linked_lathe.materials.mat_container) - say("No material storage linked to protolathe!") - return - var/datum/material/M = locate(ls["ejectsheet"]) in linked_lathe.materials.mat_container.materials - linked_lathe.eject_sheets(M, ls["eject_amt"]) - //Circuit Imprinter Materials - if(ls["disposeI"]) //Causes the circuit imprinter to dispose of a single reagent (all of it) - if(QDELETED(linked_imprinter)) - say("No Circuit Imprinter Linked!") - return - linked_imprinter.reagents.del_reagent(ls["disposeI"]) - if(ls["disposeallI"]) //Causes the circuit imprinter to dispose of all it's reagents. - if(QDELETED(linked_imprinter)) - say("No Circuit Imprinter Linked!") - return - linked_imprinter.reagents.clear_reagents() - if(ls["imprinter_ejectsheet"]) //Causes the imprinter to eject a sheet of material - if(QDELETED(linked_imprinter)) - say("No Circuit Imprinter Linked!") - return - if(!linked_imprinter.materials.mat_container) - say("No material storage linked to circuit imprinter!") - return - var/datum/material/M = locate(ls["imprinter_ejectsheet"]) in linked_imprinter.materials.mat_container.materials - linked_imprinter.eject_sheets(M, ls["eject_amt"]) - if(ls["disk_slot"]) - disk_slot_selected = text2num(ls["disk_slot"]) - if(ls["research_node"]) - if(!research_control) - return //honestly should call them out for href exploiting :^) - if(!SSresearch.science_tech.available_nodes[ls["research_node"]]) - return //Nope! - research_node(ls["research_node"], usr) - if(ls["clear_tech"]) //Erase la on the technology disk. - if(QDELETED(t_disk)) - say("No Technology Disk Inserted!") - return - qdel(t_disk.stored_research) - t_disk.stored_research = new - say("Wiping technology disk.") - if(ls["copy_tech"]) //Copy some technology la from the research holder to the disk. - if(QDELETED(t_disk)) - say("No Technology Disk Inserted!") - return - stored_research.copy_research_to(t_disk.stored_research) - screen = RDSCREEN_TECHDISK - say("Downloading to technology disk.") - if(ls["clear_design"]) //Erases la on the design disk. - if(QDELETED(d_disk)) - say("No Design Disk Inserted!") - return - var/n = text2num(ls["clear_design"]) - if(!n) - for(var/i in 1 to d_disk.max_blueprints) - d_disk.blueprints[i] = null - say("Wiping design disk.") - else - var/datum/design/D = d_disk.blueprints[n] - say("Wiping design [D.name] from design disk.") - d_disk.blueprints[n] = null - if(ls["search"]) //Search for designs with name matching pattern - searchstring = ls["to_search"] - searchtype = ls["type"] - rescan_views() - if(searchtype == "proto") - screen = RDSCREEN_PROTOLATHE_SEARCH - else - screen = RDSCREEN_IMPRINTER_SEARCH - if(ls["updt_tech"]) //Uple the research holder with information from the technology disk. - if(QDELETED(t_disk)) - say("No Technology Disk Inserted!") - return - say("Uploading technology disk.") - t_disk.stored_research.copy_research_to(stored_research) - if(ls["copy_design"]) //Copy design from the research holder to the design disk. - if(QDELETED(d_disk)) - say("No Design Disk Inserted!") - return - var/slot = text2num(ls["copy_design"]) - var/datum/design/D = SSresearch.techweb_design_by_id(ls["copy_design_ID"]) - if(D) - var/autolathe_friendly = TRUE - if(D.reagents_list.len) - autolathe_friendly = FALSE - D.category -= "Imported" - else - for(var/x in D.materials) - if( !(x in list(/datum/material/iron, /datum/material/glass))) - autolathe_friendly = FALSE - 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.blueprints[slot] = D - screen = RDSCREEN_DESIGNDISK - if(ls["eject_item"]) //Eject the item inside the destructive analyzer. - if(QDELETED(linked_destroy)) - say("No Destructive Analyzer Linked!") - return - if(linked_destroy.busy) - to_chat(usr, "The destructive analyzer is busy at the moment.") - else if(linked_destroy.loaded_item) - linked_destroy.unload_item() - screen = RDSCREEN_MENU - if(ls["view_node"]) - selected_node_id = ls["view_node"] - screen = RDSCREEN_TECHWEB_NODEVIEW - if(ls["view_design"]) - selected_design_id = ls["view_design"] - screen = RDSCREEN_TECHWEB_DESIGNVIEW - if(ls["updt_design"]) //Uploads a design from disk to the techweb. - if(QDELETED(d_disk)) - say("No design disk found.") - return - var/n = text2num(ls["updt_design"]) - if(!n) - for(var/D in d_disk.blueprints) - if(D) - stored_research.add_design(D, TRUE) - else - stored_research.add_design(d_disk.blueprints[n], TRUE) - - updateUsrDialog() - -/obj/machinery/computer/rdconsole/ui_interact(mob/user) - . = ..() - var/datum/browser/popup = new(user, "rndconsole", name, 900, 600) -// popup.add_stylesheet("techwebs", 'html/browser/techwebs.css') - popup.set_content(generate_ui()) - popup.open() - -/obj/machinery/computer/rdconsole/proc/tdisk_uple_complete() - tdisk_uple = FALSE - updateUsrDialog() - -/obj/machinery/computer/rdconsole/proc/ddisk_uple_complete() - ddisk_uple = FALSE - updateUsrDialog() - -/obj/machinery/computer/rdconsole/proc/eject_disk(type) - if(type == "design") - d_disk.forceMove(get_turf(src)) - d_disk = null - if(type == "tech") - t_disk.forceMove(get_turf(src)) - t_disk = null - -/obj/machinery/computer/rdconsole/proc/rescan_views() - var/compare - matching_design_ids.Cut() - if(searchtype == "proto") - compare = PROTOLATHE - else if(searchtype == "imprint") - compare = IMPRINTER - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(!(D.build_type & compare)) - continue - if(findtext(D.name,searchstring)) - matching_design_ids.Add(D.id) - -/obj/machinery/computer/rdconsole/proc/check_canprint(datum/design/D, buildtype) - var/amount = 50 - if(buildtype == IMPRINTER) - if(QDELETED(linked_imprinter)) - return FALSE - for(var/M in D.materials + D.reagents_list) - amount = min(amount, linked_imprinter.check_mat(D, M)) - if(amount < 1) - return FALSE - else if(buildtype == PROTOLATHE) - if(QDELETED(linked_lathe)) - return FALSE - for(var/M in D.materials + D.reagents_list) - amount = min(amount, linked_lathe.check_mat(D, M)) - if(amount < 1) - return FALSE - else - return FALSE - return amount - -/obj/machinery/computer/rdconsole/proc/lock_console(mob/user) - locked = TRUE - -/obj/machinery/computer/rdconsole/proc/unlock_console(mob/user) - locked = FALSE - -/obj/machinery/computer/rdconsole/robotics - name = "Robotics R&D Console" - req_access = null - req_access_txt = "29" - -/obj/machinery/computer/rdconsole/robotics/Initialize() - . = ..() - if(circuit) - circuit.name = "R&D Console - Robotics (Computer Board)" - circuit.build_path = /obj/machinery/computer/rdconsole/robotics - -/obj/machinery/computer/rdconsole/core - name = "Core R&D Console" - -/obj/machinery/computer/rdconsole/experiment - name = "E.X.P.E.R.I-MENTOR R&D Console" diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm deleted file mode 100644 index 0dc56cd5b1..0000000000 --- a/code/modules/research/rdmachines.dm +++ /dev/null @@ -1,106 +0,0 @@ - -//All devices that link into the R&D console fall into thise type for easy identification and some shared procs. - - -/obj/machinery/rnd - name = "R&D Device" - icon = 'icons/obj/machines/research.dmi' - density = TRUE - use_power = IDLE_POWER_USE - var/busy = FALSE - var/hacked = FALSE - var/console_link = TRUE //allow console link. - var/requires_console = TRUE - var/disabled = FALSE - var/obj/machinery/computer/rdconsole/linked_console - var/obj/item/loaded_item = null //the item loaded inside the machine (currently only used by experimentor and destructive analyzer) - -/obj/machinery/rnd/proc/reset_busy() - busy = FALSE - -/obj/machinery/rnd/Initialize() - . = ..() - wires = new /datum/wires/rnd(src) - -/obj/machinery/rnd/Destroy() - QDEL_NULL(wires) - return ..() - -/obj/machinery/rnd/proc/shock(mob/user, prb) - if(stat & (BROKEN|NOPOWER)) // unpowered, no shock - return FALSE - if(!prob(prb)) - return FALSE - do_sparks(5, TRUE, src) - if (electrocute_mob(user, get_area(src), src, 0.7, TRUE)) - return TRUE - else - return FALSE - -/obj/machinery/rnd/attackby(obj/item/O, mob/user, params) - if (default_deconstruction_screwdriver(user, "[initial(icon_state)]_t", initial(icon_state), O)) - if(linked_console) - disconnect_console() - return - if(default_deconstruction_crowbar(O)) - return - if(panel_open && is_wire_tool(O)) - wires.interact(user) - return TRUE - if(is_refillable() && O.is_drainable()) - return FALSE //inserting reagents into the machine - if(Insert_Item(O, user)) - return TRUE - else - return ..() - -//to disconnect the machine from the r&d console it's linked to -/obj/machinery/rnd/proc/disconnect_console() - linked_console = null - -//proc used to handle inserting items or reagents into rnd machines -/obj/machinery/rnd/proc/Insert_Item(obj/item/I, mob/user) - return - -//whether the machine can have an item inserted in its current state. -/obj/machinery/rnd/proc/is_insertion_ready(mob/user) - if(panel_open) - to_chat(user, "I can't load [src] while it's opened!") - return FALSE - if(disabled) - to_chat(user, "The insertion belts of [src] won't engage!") - return FALSE - if(requires_console && !linked_console) - to_chat(user, "[src] must be linked to an R&D console first!") - return FALSE - if(busy) - to_chat(user, "[src] is busy right now.") - return FALSE - if(stat & BROKEN) - to_chat(user, "[src] is broken.") - return FALSE - if(stat & NOPOWER) - to_chat(user, "[src] has no power.") - return FALSE - if(loaded_item) - to_chat(user, "[src] is already loaded.") - return FALSE - return TRUE - -//we eject the loaded item when deconstructing the machine -/obj/machinery/rnd/on_deconstruction() - if(loaded_item) - loaded_item.forceMove(loc) - ..() - -/obj/machinery/rnd/proc/AfterMaterialInsert(item_inserted, id_inserted, amount_inserted) - var/stack_name - if(istype(item_inserted, /obj/item/stack/ore/bluespace_crystal)) - stack_name = "bluespace" - use_power(MINERAL_MATERIAL_AMOUNT / 10) - else - var/obj/item/stack/S = item_inserted - stack_name = S.name - use_power(min(1000, (amount_inserted / 100))) - add_overlay("protolathe_[stack_name]") - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, cut_overlay), "protolathe_[stack_name]"), 10) diff --git a/code/modules/research/research_disk.dm b/code/modules/research/research_disk.dm deleted file mode 100644 index 49c9b39b5d..0000000000 --- a/code/modules/research/research_disk.dm +++ /dev/null @@ -1,85 +0,0 @@ - -/obj/item/disk/tech_disk - name = "technology disk" - desc = "" - icon_state = "datadisk0" - custom_materials = list(/datum/material/iron=300, /datum/material/glass=100) - var/datum/techweb/stored_research - -/obj/item/disk/tech_disk/Initialize() - . = ..() - pixel_x = rand(-5, 5) - pixel_y = rand(-5, 5) - stored_research = new /datum/techweb - -/obj/item/disk/tech_disk/debug - name = "\improper CentCom technology disk" - desc = "" - custom_materials = null - -/obj/item/disk/tech_disk/debug/Initialize() - . = ..() - stored_research = new /datum/techweb/admin - -/obj/item/research_notes - name = "research notes" - desc = "" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "paper" - item_state = "paper" - w_class = WEIGHT_CLASS_SMALL - ///research points it holds - var/value = 69 - ///origin of the research - var/origin_type = "debug" - ///if it ws merged with different origins to apply a bonus - var/mixed = FALSE - -/obj/item/research_notes/Initialize(mapload, _value, _origin_type) - . = ..() - if(_value) - value = _value - if(_origin_type) - origin_type = _origin_type - change_vol() - -/obj/item/research_notes/examine(mob/user) - . = ..() - . += "It is worth [value] research points." - -/// proc that changes name and icon depending on value -/obj/item/research_notes/proc/change_vol() - if(value >= 10000) - name = "revolutionary discovery in the field of [origin_type]" - icon_state = "docs_verified" - return - else if(value >= 2500) - name = "essay about [origin_type]" - icon_state = "paper_words" - return - else if(value >= 100) - name = "notes of [origin_type]" - icon_state = "paperslip_words" - return - else - name = "fragmentary data of [origin_type]" - icon_state = "scrap" - return - -///proc when you slap research notes into another one, it applies a bonus if they are of different origin (only applied once) -/obj/item/research_notes/proc/merge(obj/item/research_notes/new_paper) - var/bonus = min(value , new_paper.value) - value = value + new_paper.value - if(origin_type != new_paper.origin_type && !mixed) - value += bonus * 0.3 - origin_type = "[origin_type] and [new_paper.origin_type]" - mixed = TRUE - change_vol() - qdel(new_paper) - -/obj/item/research_notes/attackby(obj/item/I, mob/user, params) - . = ..() - if(istype(I, /obj/item/research_notes)) - var/obj/item/research_notes/R = I - merge(R) - return TRUE diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm deleted file mode 100644 index b0f9371dd3..0000000000 --- a/code/modules/research/server.dm +++ /dev/null @@ -1,202 +0,0 @@ -/obj/machinery/rnd/server - name = "\improper R&D Server" - desc = "" - icon = 'icons/obj/machines/research.dmi' - icon_state = "RD-server-on" - var/datum/techweb/stored_research - var/heat_health = 100 - //Code for point mining here. - var/working = TRUE //temperature should break it. - var/research_disabled = FALSE - var/server_id = 0 - var/base_mining_income = 2 - var/current_temp = 0 - var/heat_gen = 100 - var/heating_power = 40000 - var/delay = 5 - var/temp_tolerance_low = 0 - var/temp_tolerance_high = T20C - var/temp_penalty_coefficient = 0.5 //1 = -1 points per degree above high tolerance. 0.5 = -0.5 points per degree above high tolerance. - req_access = list(ACCESS_RD) //ONLY THE R&D CAN CHANGE SERVER SETTINGS. - -/obj/machinery/rnd/server/Initialize() - . = ..() - name += " [num2hex(rand(1,65535), -1)]" //gives us a random four-digit hex number as part of the name. Y'know, for fluff. - SSresearch.servers |= src - stored_research = SSresearch.science_tech - var/obj/item/circuitboard/machine/B = new /obj/item/circuitboard/machine/rdserver(null) - B.apply_default_parts(src) - current_temp = get_env_temp() - -/obj/machinery/rnd/server/Destroy() - SSresearch.servers -= src - return ..() - -/obj/machinery/rnd/server/RefreshParts() - var/tot_rating = 0 - for(var/obj/item/stock_parts/SP in src) - tot_rating += SP.rating - heat_gen /= max(1, tot_rating) - -/obj/machinery/rnd/server/update_icon() - if (stat & EMPED || stat & NOPOWER) - icon_state = "RD-server-off" - return - if (research_disabled) - icon_state = "RD-server-halt" - return - icon_state = "RD-server-on" - -/obj/machinery/rnd/server/power_change() - . = ..() - refresh_working() - return - -/obj/machinery/rnd/server/proc/refresh_working() - if(stat & EMPED || research_disabled || stat & NOPOWER) - working = FALSE - else - working = TRUE - update_icon() - -/obj/machinery/rnd/server/emp_act() - . = ..() - if(. & EMP_PROTECT_SELF) - return - stat |= EMPED - addtimer(CALLBACK(src, PROC_REF(unemp)), 600) - refresh_working() - -/obj/machinery/rnd/server/proc/unemp() - stat &= ~EMPED - refresh_working() - -/obj/machinery/rnd/server/proc/toggle_disable() - research_disabled = !research_disabled - refresh_working() - -/obj/machinery/rnd/server/proc/mine() - . = base_mining_income - var/penalty = max((get_env_temp() - temp_tolerance_high), 0) * temp_penalty_coefficient - current_temp = get_env_temp() - . = max(. - penalty, 0) - -/obj/machinery/rnd/server/proc/get_env_temp() - var/turf/L = loc - if(isturf(L)) - return L.temperature - return 0 - -/obj/machinery/rnd/server/proc/produce_heat(heat_amt) - if(!(stat & (NOPOWER|BROKEN))) //Blatently stolen from space heater. - var/turf/L = loc - if(istype(L)) - var/datum/gas_mixture/env = L.return_air() - if(env.temperature < (heat_amt+T0C)) - - var/transfer_moles = 0.25 * env.total_moles() - - var/datum/gas_mixture/removed = env.remove(transfer_moles) - - if(removed) - - var/heat_capacity = removed.heat_capacity() - if(heat_capacity == 0 || heat_capacity == null) - heat_capacity = 1 - removed.temperature = min((removed.temperature*heat_capacity + heating_power)/heat_capacity, 1000) - - env.merge(removed) - air_update_turf() - -/proc/fix_noid_research_servers() - var/list/no_id_servers = list() - var/list/server_ids = list() - for(var/obj/machinery/rnd/server/S in GLOB.machines) - switch(S.server_id) - if(-1) - continue - if(0) - no_id_servers += S - else - server_ids += S.server_id - - for(var/obj/machinery/rnd/server/S in no_id_servers) - var/num = 1 - while(!S.server_id) - if(num in server_ids) - num++ - else - S.server_id = num - server_ids += num - no_id_servers -= S - - -/obj/machinery/computer/rdservercontrol - name = "R&D Server Controller" - desc = "" - icon_screen = "rdcomp" - icon_keyboard = "rd_key" - var/screen = 0 - var/obj/machinery/rnd/server/temp_server - var/list/servers = list() - var/list/consoles = list() - req_access = list(ACCESS_RD) - var/badmin = 0 - circuit = /obj/item/circuitboard/computer/rdservercontrol - -/obj/machinery/computer/rdservercontrol/Topic(href, href_list) - if(..()) - return - - add_fingerprint(usr) - if (href_list["toggle"]) - if(allowed(usr) || obj_flags & EMAGGED) - var/obj/machinery/rnd/server/S = locate(href_list["toggle"]) in SSresearch.servers - S.toggle_disable() - else - to_chat(usr, "Access Denied.") - - updateUsrDialog() - return - -/obj/machinery/computer/rdservercontrol/ui_interact(mob/user) - . = ..() - var/list/dat = list() - - dat += "Connected Servers:" - dat += "" - for(var/obj/machinery/rnd/server/S in GLOB.machines) - dat += "
    " - dat += "
    ServerOperating TempStatus
    [S.name][S.current_temp][S.stat & EMPED || stat & NOPOWER?"Offline":"([S.research_disabled? "Disabled" : "Online"])"]

    " - - dat += "Research Log
    " - var/datum/techweb/stored_research - stored_research = SSresearch.science_tech - if(stored_research.research_logs.len) - dat += "" - dat += "" - for(var/i=stored_research.research_logs.len, i>0, i--) - dat += "" - for(var/j in stored_research.research_logs[i]) - dat += "" - dat +="" - dat += "
    EntryResearch NameCostResearcher NameConsole Location
    [i][j]
    " - - else - dat += "
    No history found." - - var/datum/browser/popup = new(user, "server_com", src.name, 900, 620) - popup.set_content(dat.Join()) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - -/obj/machinery/computer/rdservercontrol/attackby(obj/item/D, mob/user, params) - . = ..() - src.updateUsrDialog() - -/obj/machinery/computer/rdservercontrol/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - playsound(src, "sparks", 75, TRUE) - obj_flags |= EMAGGED - to_chat(user, "I disable the security protocols.") diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm deleted file mode 100644 index 5095160353..0000000000 --- a/code/modules/research/stock_parts.dm +++ /dev/null @@ -1,320 +0,0 @@ -/*Power cells are in code\modules\power\cell.dm - -If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fit with the clamp to not confuse the user or cause possible exploits.*/ -/obj/item/storage/part_replacer - name = "rapid part exchange device" - desc = "" - icon_state = "RPED" - item_state = "RPED" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - w_class = WEIGHT_CLASS_HUGE - component_type = /datum/component/storage/concrete/rped - var/works_from_distance = FALSE - var/pshoom_or_beepboopblorpzingshadashwoosh = 'sound/blank.ogg' - var/alt_sound = null - -/obj/item/storage/part_replacer/pre_attack(obj/machinery/T, mob/living/user, params) - if(!istype(T) || !T.component_parts) - return ..() - if(user.Adjacent(T)) // no TK upgrading. - if(works_from_distance) - user.Beam(T, icon_state = "rped_upgrade", time = 5) - T.exchange_parts(user, src) - return TRUE - return ..() - -/obj/item/storage/part_replacer/afterattack(obj/machinery/T, mob/living/user, adjacent, params) - if(adjacent || !istype(T) || !T.component_parts) - return ..() - if(works_from_distance) - user.Beam(T, icon_state = "rped_upgrade", time = 5) - T.exchange_parts(user, src) - return - return ..() - -/obj/item/storage/part_replacer/proc/play_rped_sound() - //Plays the sound for RPED exhanging or installing parts. - if(alt_sound && prob(1)) - playsound(src, alt_sound, 40, TRUE) - else - playsound(src, pshoom_or_beepboopblorpzingshadashwoosh, 40, TRUE) - -/obj/item/storage/part_replacer/bluespace - name = "bluespace rapid part exchange device" - desc = "" - icon_state = "BS_RPED" - w_class = WEIGHT_CLASS_NORMAL - works_from_distance = TRUE - pshoom_or_beepboopblorpzingshadashwoosh = 'sound/blank.ogg' - alt_sound = 'sound/blank.ogg' - component_type = /datum/component/storage/concrete/bluespace/rped - -/obj/item/storage/part_replacer/bluespace/tier1 - -/obj/item/storage/part_replacer/bluespace/tier1/PopulateContents() - for(var/i in 1 to 10) - new /obj/item/stock_parts/capacitor(src) - new /obj/item/stock_parts/scanning_module(src) - new /obj/item/stock_parts/manipulator(src) - new /obj/item/stock_parts/micro_laser(src) - new /obj/item/stock_parts/matter_bin(src) - -/obj/item/storage/part_replacer/bluespace/tier2 - -/obj/item/storage/part_replacer/bluespace/tier2/PopulateContents() - for(var/i in 1 to 10) - new /obj/item/stock_parts/capacitor/adv(src) - new /obj/item/stock_parts/scanning_module/adv(src) - new /obj/item/stock_parts/manipulator/nano(src) - new /obj/item/stock_parts/micro_laser/high(src) - new /obj/item/stock_parts/matter_bin/adv(src) - -/obj/item/storage/part_replacer/bluespace/tier3 - -/obj/item/storage/part_replacer/bluespace/tier3/PopulateContents() - for(var/i in 1 to 10) - new /obj/item/stock_parts/capacitor/super(src) - new /obj/item/stock_parts/scanning_module/phasic(src) - new /obj/item/stock_parts/manipulator/pico(src) - new /obj/item/stock_parts/micro_laser/ultra(src) - new /obj/item/stock_parts/matter_bin/super(src) - -/obj/item/storage/part_replacer/bluespace/tier4 - -/obj/item/storage/part_replacer/bluespace/tier4/PopulateContents() - for(var/i in 1 to 10) - new /obj/item/stock_parts/capacitor/quadratic(src) - new /obj/item/stock_parts/scanning_module/triphasic(src) - new /obj/item/stock_parts/manipulator/femto(src) - new /obj/item/stock_parts/micro_laser/quadultra(src) - new /obj/item/stock_parts/matter_bin/bluespace(src) - -/obj/item/storage/part_replacer/cargo //used in a cargo crate - -/obj/item/storage/part_replacer/cargo/PopulateContents() - for(var/i in 1 to 10) - new /obj/item/stock_parts/capacitor(src) - new /obj/item/stock_parts/scanning_module(src) - new /obj/item/stock_parts/manipulator(src) - new /obj/item/stock_parts/micro_laser(src) - new /obj/item/stock_parts/matter_bin(src) - -/obj/item/storage/part_replacer/cyborg - name = "rapid part exchange device" - desc = "" - icon_state = "borgrped" - item_state = "RPED" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - -/proc/cmp_rped_sort(obj/item/A, obj/item/B) - return B.get_part_rating() - A.get_part_rating() - -/obj/item/stock_parts - name = "stock part" - desc = "" - icon = 'icons/obj/stock_parts.dmi' - w_class = WEIGHT_CLASS_SMALL - var/rating = 1 - -/obj/item/stock_parts/Initialize() - . = ..() - pixel_x = rand(-5, 5) - pixel_y = rand(-5, 5) - -/obj/item/stock_parts/get_part_rating() - return rating - -//Rating 1 - -/obj/item/stock_parts/capacitor - name = "capacitor" - desc = "" - icon_state = "capacitor" - custom_materials = list(/datum/material/iron=50, /datum/material/glass=50) - -/obj/item/stock_parts/scanning_module - name = "scanning module" - desc = "" - icon_state = "scan_module" - custom_materials = list(/datum/material/iron=50, /datum/material/glass=20) - -/obj/item/stock_parts/manipulator - name = "micro-manipulator" - desc = "" - icon_state = "micro_mani" - custom_materials = list(/datum/material/iron=30) - -/obj/item/stock_parts/micro_laser - name = "micro-laser" - desc = "" - icon_state = "micro_laser" - custom_materials = list(/datum/material/iron=10, /datum/material/glass=20) - -/obj/item/stock_parts/matter_bin - name = "matter bin" - desc = "" - icon_state = "matter_bin" - custom_materials = list(/datum/material/iron=80) - -//Rating 2 - -/obj/item/stock_parts/capacitor/adv - name = "advanced capacitor" - desc = "" - icon_state = "adv_capacitor" - rating = 2 - custom_materials = list(/datum/material/iron=50, /datum/material/glass=50) - -/obj/item/stock_parts/scanning_module/adv - name = "advanced scanning module" - desc = "" - icon_state = "adv_scan_module" - rating = 2 - custom_materials = list(/datum/material/iron=50, /datum/material/glass=20) - -/obj/item/stock_parts/manipulator/nano - name = "nano-manipulator" - desc = "" - icon_state = "nano_mani" - rating = 2 - custom_materials = list(/datum/material/iron=30) - -/obj/item/stock_parts/micro_laser/high - name = "high-power micro-laser" - desc = "" - icon_state = "high_micro_laser" - rating = 2 - custom_materials = list(/datum/material/iron=10, /datum/material/glass=20) - -/obj/item/stock_parts/matter_bin/adv - name = "advanced matter bin" - desc = "" - icon_state = "advanced_matter_bin" - rating = 2 - custom_materials = list(/datum/material/iron=80) - -//Rating 3 - -/obj/item/stock_parts/capacitor/super - name = "super capacitor" - desc = "" - icon_state = "super_capacitor" - rating = 3 - custom_materials = list(/datum/material/iron=50, /datum/material/glass=50) - -/obj/item/stock_parts/scanning_module/phasic - name = "phasic scanning module" - desc = "" - icon_state = "super_scan_module" - rating = 3 - custom_materials = list(/datum/material/iron=50, /datum/material/glass=20) - -/obj/item/stock_parts/manipulator/pico - name = "pico-manipulator" - desc = "" - icon_state = "pico_mani" - rating = 3 - custom_materials = list(/datum/material/iron=30) - -/obj/item/stock_parts/micro_laser/ultra - name = "ultra-high-power micro-laser" - icon_state = "ultra_high_micro_laser" - desc = "" - rating = 3 - custom_materials = list(/datum/material/iron=10, /datum/material/glass=20) - -/obj/item/stock_parts/matter_bin/super - name = "super matter bin" - desc = "" - icon_state = "super_matter_bin" - rating = 3 - custom_materials = list(/datum/material/iron=80) - -//Rating 4 - -/obj/item/stock_parts/capacitor/quadratic - name = "quadratic capacitor" - desc = "" - icon_state = "quadratic_capacitor" - rating = 4 - custom_materials = list(/datum/material/iron=50, /datum/material/glass=50) - -/obj/item/stock_parts/scanning_module/triphasic - name = "triphasic scanning module" - desc = "" - icon_state = "triphasic_scan_module" - rating = 4 - custom_materials = list(/datum/material/iron=50, /datum/material/glass=20) - -/obj/item/stock_parts/manipulator/femto - name = "femto-manipulator" - desc = "" - icon_state = "femto_mani" - rating = 4 - custom_materials = list(/datum/material/iron=30) - -/obj/item/stock_parts/micro_laser/quadultra - name = "quad-ultra micro-laser" - icon_state = "quadultra_micro_laser" - desc = "" - rating = 4 - custom_materials = list(/datum/material/iron=10, /datum/material/glass=20) - -/obj/item/stock_parts/matter_bin/bluespace - name = "bluespace matter bin" - desc = "" - icon_state = "bluespace_matter_bin" - rating = 4 - custom_materials = list(/datum/material/iron=80) - -// Subspace stock parts - -/obj/item/stock_parts/subspace/ansible - name = "subspace ansible" - icon_state = "subspace_ansible" - desc = "" - custom_materials = list(/datum/material/iron=30, /datum/material/glass=10) - -/obj/item/stock_parts/subspace/filter - name = "hyperwave filter" - icon_state = "hyperwave_filter" - desc = "" - custom_materials = list(/datum/material/iron=30, /datum/material/glass=10) - -/obj/item/stock_parts/subspace/amplifier - name = "subspace amplifier" - icon_state = "subspace_amplifier" - desc = "" - custom_materials = list(/datum/material/iron=30, /datum/material/glass=10) - -/obj/item/stock_parts/subspace/treatment - name = "subspace treatment disk" - icon_state = "treatment_disk" - desc = "" - custom_materials = list(/datum/material/iron=30, /datum/material/glass=10) - -/obj/item/stock_parts/subspace/analyzer - name = "subspace wavelength analyzer" - icon_state = "wavelength_analyzer" - desc = "" - custom_materials = list(/datum/material/iron=30, /datum/material/glass=10) - -/obj/item/stock_parts/subspace/crystal - name = "ansible crystal" - icon_state = "ansible_crystal" - desc = "" - custom_materials = list(/datum/material/glass=50) - -/obj/item/stock_parts/subspace/transmitter - name = "subspace transmitter" - icon_state = "subspace_transmitter" - desc = "" - custom_materials = list(/datum/material/iron=50) - -/obj/item/research//Makes testing much less of a pain -Sieve - name = "research" - icon = 'icons/obj/stock_parts.dmi' - icon_state = "capacitor" - desc = "" diff --git a/code/modules/research/techweb/__techweb_helpers.dm b/code/modules/research/techweb/__techweb_helpers.dm deleted file mode 100644 index 67a9a5cb02..0000000000 --- a/code/modules/research/techweb/__techweb_helpers.dm +++ /dev/null @@ -1,37 +0,0 @@ -/proc/count_unique_techweb_nodes() - var/static/list/L = typesof(/datum/techweb_node) - return L.len - -/proc/count_unique_techweb_designs() - var/static/list/L = typesof(/datum/design) - return L.len - -/proc/node_boost_error(id, message) - WARNING("Invalid boost information for node \[[id]\]: [message]") - SSresearch.invalid_node_boost[id] = message - -/proc/techweb_item_boost_check(obj/item/I) //Returns an associative list of techweb node datums with values of the boost it gives. list/returned = list() - if(SSresearch.techweb_boost_items[I.type]) - return SSresearch.techweb_boost_items[I.type] //It should already be formatted in node datum = list(point type = value) - -/proc/techweb_item_point_check(obj/item/I) - if(SSresearch.techweb_point_items[I.type]) - return SSresearch.techweb_point_items[I.type] - -/proc/techweb_point_display_generic(pointlist) - var/list/ret = list() - for(var/i in pointlist) - if(SSresearch.point_types[i]) - ret += "[SSresearch.point_types[i]]: [pointlist[i]]" - else - ret += "ERRORED POINT TYPE: [pointlist[i]]" - return ret.Join("
    ") - -/proc/techweb_point_display_rdconsole(pointlist, last_pointlist) - var/list/ret = list() - for(var/i in pointlist) - var/research_line = "[SSresearch.point_types[i] || "ERRORED POINT TYPE"]: [pointlist[i]]" - if(last_pointlist[i] > 0) - research_line += " (+[(last_pointlist[i]) * ((SSresearch.flags & SS_TICKER)? (600 / (world.tick_lag * SSresearch.wait)) : (600 / SSresearch.wait))]/ minute)" - ret += research_line - return ret.Join("
    ") diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm deleted file mode 100644 index aac7f76fde..0000000000 --- a/code/modules/research/techweb/_techweb.dm +++ /dev/null @@ -1,379 +0,0 @@ - -//Used \n[\s]*origin_tech[\s]*=[\s]*"[\S]+" to delete all origin techs. -//Or \n[\s]*origin_tech[\s]*=[\s]list\([A-Z_\s=0-9,]*\) -//Used \n[\s]*req_tech[\s]*=[\s]*list\(["a-z\s=0-9,]*\) to delete all req_techs. - -//Techweb datums are meant to store unlocked research, being able to be stored on research consoles, servers, and disks. They are NOT global. -/datum/techweb - var/list/researched_nodes = list() //Already unlocked and all designs are now available. Assoc list, id = TRUE - var/list/visible_nodes = list() //Visible nodes, doesn't mean it can be researched. Assoc list, id = TRUE - var/list/available_nodes = list() //Nodes that can immediately be researched, all reqs met. assoc list, id = TRUE - var/list/researched_designs = list() //Designs that are available for use. Assoc list, id = TRUE - var/list/custom_designs = list() //Custom inserted designs like from disks that should survive recalculation. - var/list/boosted_nodes = list() //Already boosted nodes that can't be boosted again. node id = path of boost object. - var/list/hidden_nodes = list() //Hidden nodes. id = TRUE. Used for unhiding nodes when requirements are met by removing the entry of the node. - var/list/deconstructed_items = list() //items already deconstructed for a generic point boost. path = list(point_type = points) - var/list/research_points = list() //Available research points. type = number - var/list/obj/machinery/computer/rdconsole/consoles_accessing = list() - var/id = "generic" - var/list/research_logs = list() //IC logs. - var/largest_bomb_value = 0 - var/organization = "Third-Party" //Organization name, used for display. - var/list/last_bitcoins = list() //Current per-second production, used for display only. - var/list/discovered_mutations = list() //Mutations discovered by genetics, this way they are shared and cant be destroyed by destroying a single console - var/list/tiers = list() //Assoc list, id = number, 1 is available, 2 is all reqs are 1, so on - -/datum/techweb/New() - SSresearch.techwebs += src - for(var/i in SSresearch.techweb_nodes_starting) - var/datum/techweb_node/DN = SSresearch.techweb_node_by_id(i) - research_node(DN, TRUE, FALSE, FALSE) - hidden_nodes = SSresearch.techweb_nodes_hidden.Copy() - return ..() - -/datum/techweb/admin - id = "ADMIN" - organization = "CentCom" - -/datum/techweb/admin/New() //All unlocked. - . = ..() - for(var/i in SSresearch.techweb_nodes) - var/datum/techweb_node/TN = SSresearch.techweb_nodes[i] - research_node(TN, TRUE, TRUE, FALSE) - for(var/i in SSresearch.point_types) - research_points[i] = INFINITY - hidden_nodes = list() - -/datum/techweb/science //Global science techweb for RND consoles. - id = "SCIENCE" - organization = "Nanotrasen" - -/datum/techweb/Destroy() - researched_nodes = null - researched_designs = null - available_nodes = null - visible_nodes = null - custom_designs = null - SSresearch.techwebs -= src - return ..() - -/datum/techweb/proc/recalculate_nodes(recalculate_designs = FALSE, wipe_custom_designs = FALSE) - var/list/datum/techweb_node/processing = list() - for(var/id in researched_nodes) - processing[id] = TRUE - for(var/id in visible_nodes) - processing[id] = TRUE - for(var/id in available_nodes) - processing[id] = TRUE - if(recalculate_designs) - researched_designs = custom_designs.Copy() - if(wipe_custom_designs) - custom_designs = list() - for(var/id in processing) - update_node_status(SSresearch.techweb_node_by_id(id), FALSE) - CHECK_TICK - for(var/v in consoles_accessing) - var/obj/machinery/computer/rdconsole/V = v - V.rescan_views() - V.updateUsrDialog() - -/datum/techweb/proc/add_point_list(list/pointlist) - for(var/i in pointlist) - if(SSresearch.point_types[i] && pointlist[i] > 0) - research_points[i] += pointlist[i] - -/datum/techweb/proc/add_points_all(amount) - var/list/l = SSresearch.point_types.Copy() - for(var/i in l) - l[i] = amount - add_point_list(l) - -/datum/techweb/proc/remove_point_list(list/pointlist) - for(var/i in pointlist) - if(SSresearch.point_types[i] && pointlist[i] > 0) - research_points[i] = max(0, research_points[i] - pointlist[i]) - -/datum/techweb/proc/remove_points_all(amount) - var/list/l = SSresearch.point_types.Copy() - for(var/i in l) - l[i] = amount - remove_point_list(l) - -/datum/techweb/proc/modify_point_list(list/pointlist) - for(var/i in pointlist) - if(SSresearch.point_types[i] && pointlist[i] != 0) - research_points[i] = max(0, research_points[i] + pointlist[i]) - -/datum/techweb/proc/modify_points_all(amount) - var/list/l = SSresearch.point_types.Copy() - for(var/i in l) - l[i] = amount - modify_point_list(l) - -/datum/techweb/proc/copy_research_to(datum/techweb/receiver, unlock_hidden = TRUE) //Adds any missing research to theirs. - for(var/i in researched_nodes) - CHECK_TICK - receiver.research_node_id(i, TRUE, FALSE, FALSE) - for(var/i in researched_designs) - CHECK_TICK - receiver.add_design_by_id(i) - if(unlock_hidden) - for(var/i in receiver.hidden_nodes) - CHECK_TICK - if(!hidden_nodes[i]) - receiver.hidden_nodes -= i //We can see it so let them see it too. - receiver.recalculate_nodes() - -/datum/techweb/proc/copy() - var/datum/techweb/returned = new() - returned.researched_nodes = researched_nodes.Copy() - returned.visible_nodes = visible_nodes.Copy() - returned.available_nodes = available_nodes.Copy() - returned.researched_designs = researched_designs.Copy() - returned.hidden_nodes = hidden_nodes.Copy() - return returned - -/datum/techweb/proc/get_visible_nodes() //The way this is set up is shit but whatever. - return visible_nodes - hidden_nodes - -/datum/techweb/proc/get_available_nodes() - return available_nodes - hidden_nodes - -/datum/techweb/proc/get_researched_nodes() - return researched_nodes - hidden_nodes - -/datum/techweb/proc/add_point_type(type, amount) - if(!SSresearch.point_types[type] || (amount <= 0)) - return FALSE - research_points[type] += amount - return TRUE - -/datum/techweb/proc/modify_point_type(type, amount) - if(!SSresearch.point_types[type]) - return FALSE - research_points[type] = max(0, research_points[type] + amount) - return TRUE - -/datum/techweb/proc/remove_point_type(type, amount) - if(!SSresearch.point_types[type] || (amount <= 0)) - return FALSE - research_points[type] = max(0, research_points[type] - amount) - return TRUE - -/datum/techweb/proc/add_design_by_id(id, custom = FALSE) - return add_design(SSresearch.techweb_design_by_id(id), custom) - -/datum/techweb/proc/add_design(datum/design/design, custom = FALSE) - if(!istype(design)) - return FALSE - researched_designs[design.id] = TRUE - if(custom) - custom_designs[design.id] = TRUE - return TRUE - -/datum/techweb/proc/remove_design_by_id(id, custom = FALSE) - return remove_design(SSresearch.techweb_design_by_id(id), custom) - -/datum/techweb/proc/remove_design(datum/design/design, custom = FALSE) - if(!istype(design)) - return FALSE - if(custom_designs[design.id] && !custom) - return FALSE - custom_designs -= design.id - researched_designs -= design.id - return TRUE - -/datum/techweb/proc/get_point_total(list/pointlist) - for(var/i in pointlist) - . += pointlist[i] - -/datum/techweb/proc/can_afford(list/pointlist) - for(var/i in pointlist) - if(research_points[i] < pointlist[i]) - return FALSE - return TRUE - -/datum/techweb/proc/printout_points() - return techweb_point_display_generic(research_points) - -/datum/techweb/proc/research_node_id(id, force, auto_update_points, get_that_dosh_id) - return research_node(SSresearch.techweb_node_by_id(id), force, auto_update_points, get_that_dosh_id) - -/datum/techweb/proc/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE, get_that_dosh = TRUE) - if(!istype(node)) - return FALSE - update_node_status(node) - if(!force) - if(!available_nodes[node.id] || (auto_adjust_cost && (!can_afford(node.get_price(src))))) - return FALSE - if(auto_adjust_cost) - remove_point_list(node.get_price(src)) - researched_nodes[node.id] = TRUE //Add to our researched list - for(var/id in node.unlock_ids) - visible_nodes[id] = TRUE - update_node_status(SSresearch.techweb_node_by_id(id)) - for(var/id in node.design_ids) - add_design_by_id(id) - update_node_status(node) - if(get_that_dosh) - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_SCI) - if(D) - D.adjust_money(SSeconomy.techweb_bounty) - return TRUE - -/datum/techweb/science/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE, get_that_dosh = TRUE) //When something is researched, triggers the proc for this techweb only - . = ..() - if(.) - node.on_research() - -/datum/techweb/proc/unresearch_node_id(id) - return unresearch_node(SSresearch.techweb_node_by_id(id)) - -/datum/techweb/proc/unresearch_node(datum/techweb_node/node) - if(!istype(node)) - return FALSE - researched_nodes -= node.id - recalculate_nodes(TRUE) //Fully rebuild the tree. - -/datum/techweb/proc/boost_with_path(datum/techweb_node/N, itempath) - if(!istype(N) || !ispath(itempath)) - return FALSE - LAZYINITLIST(boosted_nodes[N.id]) - for(var/i in N.boost_item_paths[itempath]) - boosted_nodes[N.id][i] = max(boosted_nodes[N.id][i], N.boost_item_paths[itempath][i]) - if(N.autounlock_by_boost) - hidden_nodes -= N.id - update_node_status(N) - return TRUE - -/datum/techweb/proc/update_tiers(datum/techweb_node/base) - var/list/current = list(base) - while (current.len) - var/list/next = list() - for (var/node_ in current) - var/datum/techweb_node/node = node_ - var/tier = 0 - if (!researched_nodes[node.id]) // researched is tier 0 - for (var/id in node.prereq_ids) - var/prereq_tier = tiers[id] - tier = max(tier, prereq_tier + 1) - - if (tier != tiers[node.id]) - tiers[node.id] = tier - for (var/id in node.unlock_ids) - next += SSresearch.techweb_node_by_id(id) - current = next - -/datum/techweb/proc/update_node_status(datum/techweb_node/node, autoupdate_consoles = TRUE) - var/researched = FALSE - var/available = FALSE - var/visible = FALSE - if(researched_nodes[node.id]) - researched = TRUE - var/needed = node.prereq_ids.len - for(var/id in node.prereq_ids) - if(researched_nodes[id]) - visible = TRUE - needed-- - if(!needed) - available = TRUE - researched_nodes -= node.id - available_nodes -= node.id - visible_nodes -= node.id - if(hidden_nodes[node.id]) //Hidden. - return - if(researched) - researched_nodes[node.id] = TRUE - for(var/id in node.design_ids) - add_design(SSresearch.techweb_design_by_id(id)) - else - if(available) - available_nodes[node.id] = TRUE - else - if(visible) - visible_nodes[node.id] = TRUE - update_tiers(node) - if(autoupdate_consoles) - for(var/v in consoles_accessing) - var/obj/machinery/computer/rdconsole/V = v - V.rescan_views() - V.updateUsrDialog() - -//Laggy procs to do specific checks, just in case. Don't use them if you can just use the vars that already store all this! -/datum/techweb/proc/designHasReqs(datum/design/D) - for(var/i in researched_nodes) - var/datum/techweb_node/N = SSresearch.techweb_node_by_id(i) - if(N.design_ids[D.id]) - return TRUE - return FALSE - -/datum/techweb/proc/isDesignResearched(datum/design/D) - return isDesignResearchedID(D.id) - -/datum/techweb/proc/isDesignResearchedID(id) - return researched_designs[id]? SSresearch.techweb_design_by_id(id) : FALSE - -/datum/techweb/proc/isNodeResearched(datum/techweb_node/N) - return isNodeResearchedID(N.id) - -/datum/techweb/proc/isNodeResearchedID(id) - return researched_nodes[id]? SSresearch.techweb_node_by_id(id) : FALSE - -/datum/techweb/proc/isNodeVisible(datum/techweb_node/N) - return isNodeResearchedID(N.id) - -/datum/techweb/proc/isNodeVisibleID(id) - return visible_nodes[id]? SSresearch.techweb_node_by_id(id) : FALSE - -/datum/techweb/proc/isNodeAvailable(datum/techweb_node/N) - return isNodeAvailableID(N.id) - -/datum/techweb/proc/isNodeAvailableID(id) - return available_nodes[id]? SSresearch.techweb_node_by_id(id) : FALSE - -/datum/techweb/specialized - var/allowed_buildtypes = ALL - -/datum/techweb/specialized/add_design(datum/design/D) - if(!(D.build_type & allowed_buildtypes)) - return FALSE - return ..() - -/datum/techweb/specialized/autounlocking - var/design_autounlock_buildtypes = NONE - var/design_autounlock_categories = list("initial") //if a design has a buildtype that matches the abovea and either has a category in this or this is null, unlock it. - var/node_autounlock_ids = list() //autounlock nodes of this type. - -/datum/techweb/specialized/autounlocking/New() - ..() - autounlock() - -/datum/techweb/specialized/autounlocking/proc/autounlock() - for(var/id in node_autounlock_ids) - research_node_id(id, TRUE, FALSE, FALSE) - for(var/id in SSresearch.techweb_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(id) - if(D.build_type & design_autounlock_buildtypes) - for(var/i in D.category) - if(i in design_autounlock_categories) - add_design_by_id(D.id) - break - -/datum/techweb/specialized/autounlocking/autolathe - design_autounlock_buildtypes = AUTOLATHE - allowed_buildtypes = AUTOLATHE - -/datum/techweb/specialized/autounlocking/limbgrower - design_autounlock_buildtypes = LIMBGROWER - allowed_buildtypes = LIMBGROWER - -/datum/techweb/specialized/autounlocking/biogenerator - design_autounlock_buildtypes = BIOGENERATOR - allowed_buildtypes = BIOGENERATOR - -/datum/techweb/specialized/autounlocking/smelter - design_autounlock_buildtypes = SMELTER - allowed_buildtypes = SMELTER - -/datum/techweb/specialized/autounlocking/exofab - allowed_buildtypes = MECHFAB diff --git a/code/modules/research/techweb/_techweb_node.dm b/code/modules/research/techweb/_techweb_node.dm deleted file mode 100644 index 318d4d1eb2..0000000000 --- a/code/modules/research/techweb/_techweb_node.dm +++ /dev/null @@ -1,100 +0,0 @@ - -//Techweb nodes are GLOBAL, there should only be one instance of them in the game. Persistant changes should never be made to them in-game. -//USE SSRESEARCH PROCS TO OBTAIN REFERENCES. DO NOT REFERENCE OUTSIDE OF SSRESEARCH OR YOU WILL FUCK UP GC. - -/datum/techweb_node - var/id - var/display_name = "Errored Node" - var/description = "Why are you seeing this?" - var/hidden = FALSE //Whether it starts off hidden. - var/starting_node = FALSE //Whether it's available without any research. - var/list/prereq_ids = list() - var/list/design_ids = list() - var/list/unlock_ids = list() //CALCULATED FROM OTHER NODE'S PREREQUISITES. Assoc list id = TRUE. - var/list/boost_item_paths = list() //Associative list, path = list(point type = point_value). - var/autounlock_by_boost = TRUE //boosting this will autounlock this node. - var/export_price = 0 //Cargo export price. - var/list/research_costs = list() //Point cost to research. type = amount - var/category = "Misc" //Category - -/datum/techweb_node/error_node - id = "ERROR" - display_name = "ERROR" - description = "This usually means something in the database has corrupted. If it doesn't go away automatically, inform Central Command for their techs to fix it ASAP(tm)" - -/datum/techweb_node/proc/Initialize() - //Make lists associative for lookup - for(var/id in prereq_ids) - prereq_ids[id] = TRUE - for(var/id in design_ids) - design_ids[id] = TRUE - for(var/id in unlock_ids) - unlock_ids[id] = TRUE - -/datum/techweb_node/Destroy() - SSresearch.techweb_nodes -= id - return ..() - -/datum/techweb_node/serialize_list(list/options) - . = list() - VARSET_TO_LIST(., id) - VARSET_TO_LIST(., display_name) - VARSET_TO_LIST(., hidden) - VARSET_TO_LIST(., starting_node) - VARSET_TO_LIST(., assoc_list_strip_value(prereq_ids)) - VARSET_TO_LIST(., assoc_list_strip_value(design_ids)) - VARSET_TO_LIST(., assoc_list_strip_value(unlock_ids)) - VARSET_TO_LIST(., boost_item_paths) - VARSET_TO_LIST(., autounlock_by_boost) - VARSET_TO_LIST(., export_price) - VARSET_TO_LIST(., research_costs) - VARSET_TO_LIST(., category) - -/datum/techweb_node/deserialize_list(list/input, list/options) - if(!input["id"]) - return - VARSET_FROM_LIST(input, id) - VARSET_FROM_LIST(input, display_name) - VARSET_FROM_LIST(input, hidden) - VARSET_FROM_LIST(input, starting_node) - VARSET_FROM_LIST(input, prereq_ids) - VARSET_FROM_LIST(input, design_ids) - VARSET_FROM_LIST(input, unlock_ids) - VARSET_FROM_LIST(input, boost_item_paths) - VARSET_FROM_LIST(input, autounlock_by_boost) - VARSET_FROM_LIST(input, export_price) - VARSET_FROM_LIST(input, research_costs) - VARSET_FROM_LIST(input, category) - Initialize() - return src - -/datum/techweb_node/proc/on_design_deletion(datum/design/D) - prune_design_id(D.id) - -/datum/techweb_node/proc/on_node_deletion(datum/techweb_node/TN) - prune_node_id(TN.id) - -/datum/techweb_node/proc/prune_design_id(design_id) - design_ids -= design_id - -/datum/techweb_node/proc/prune_node_id(node_id) - prereq_ids -= node_id - unlock_ids -= node_id - -/datum/techweb_node/proc/get_price(datum/techweb/host) - if(host) - var/list/actual_costs = research_costs - if(host.boosted_nodes[id]) - var/list/L = host.boosted_nodes[id] - for(var/i in L) - if(actual_costs[i]) - actual_costs[i] -= L[i] - return actual_costs - else - return research_costs - -/datum/techweb_node/proc/price_display(datum/techweb/TN) - return techweb_point_display_generic(get_price(TN)) - -/datum/techweb_node/proc/on_research() //new proc, not currently in file - return diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm deleted file mode 100644 index 3990b0c228..0000000000 --- a/code/modules/research/techweb/all_nodes.dm +++ /dev/null @@ -1,1095 +0,0 @@ - -//Current rate: 135000 research points in 90 minutes - -//Base Nodes -/datum/techweb_node/base - id = "base" - starting_node = TRUE - display_name = "Basic Research Technology" - description = "NT default research technologies." - // Default research tech, prevents bricking - design_ids = list("basic_matter_bin", "basic_cell", "basic_scanning", "basic_capacitor", "basic_micro_laser", "micro_mani", "desttagger", "handlabel", "packagewrap", - "destructive_analyzer", "circuit_imprinter", "experimentor", "rdconsole", "design_disk", "tech_disk", "rdserver", "rdservercontrol", "mechfab", "paystand", - "space_heater", "beaker", "large_beaker", "bucket", "xlarge_beaker", "sec_rshot", "sec_beanbag_slug", "sec_bshot", "sec_slug", "sec_Islug", "sec_dart", "sec_38", - "rglass","plasteel","plastitanium","plasmaglass","plasmareinforcedglass","titaniumglass","plastitaniumglass","plumbing_rcd","plastic_knife","plastic_fork","plastic_spoon") - -/datum/techweb_node/mmi - id = "mmi" - starting_node = TRUE - display_name = "Man Machine Interface" - description = "A slightly Frankensteinian device that allows human brains to interface natively with software APIs." - design_ids = list("mmi") - -/datum/techweb_node/cyborg - id = "cyborg" - starting_node = TRUE - display_name = "Cyborg Construction" - description = "Sapient robots with preloaded tool modules and programmable laws." - design_ids = list("robocontrol", "sflash", "borg_suit", "borg_head", "borg_chest", "borg_r_arm", "borg_l_arm", "borg_r_leg", "borg_l_leg", "borgupload", - "cyborgrecharger", "borg_upgrade_restart", "borg_upgrade_rename") - -/datum/techweb_node/mech - id = "mecha" - starting_node = TRUE - display_name = "Mechanical Exosuits" - description = "Mechanized exosuits that are several magnitudes stronger and more powerful than the average human." - design_ids = list("mecha_tracking", "mechacontrol", "mechapower", "mech_recharger", "ripley_chassis", "firefighter_chassis", "ripley_torso", "ripley_left_arm", "ripley_right_arm", "ripley_left_leg", "ripley_right_leg", - "ripley_main", "ripley_peri", "ripleyupgrade", "mech_hydraulic_clamp") - -/datum/techweb_node/mech_tools - id = "mech_tools" - starting_node = TRUE - display_name = "Basic Exosuit Equipment" - description = "Various tools fit for basic mech units" - design_ids = list("mech_drill", "mech_mscanner", "mech_extinguisher") - -/datum/techweb_node/basic_tools - id = "basic_tools" - starting_node = TRUE - display_name = "Basic Tools" - description = "Basic mechanical, electronic, surgical and botanical tools." - design_ids = list("screwdriver", "wrench", "wirecutters", "crowbar", "multitool", "welding_tool", "tscanner", "analyzer", "cable_coil", "pipe_painter", "airlock_painter", "scalpel", "circular_saw", "surgicaldrill", "retractor", "cautery", "hemostat", "surgical_drapes", "syringe", "cultivator", "plant_analyzer", "shovel", "spade", "hatchet", "mop", "plunger") - -/////////////////////////Biotech///////////////////////// -/datum/techweb_node/biotech - id = "biotech" - display_name = "Biological Technology" - description = "What makes us tick." //the MC, silly! - prereq_ids = list("base") - design_ids = list("chem_heater", "chem_master", "chem_dispenser", "pandemic", "defibrillator", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "medigel","genescanner", "med_spray_bottle", "chem_pack", "blood_pack", "medical_kiosk") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/adv_biotech - id = "adv_biotech" - display_name = "Advanced Biotechnology" - description = "Advanced Biotechnology" - prereq_ids = list("biotech") - design_ids = list("piercesyringe", "crewpinpointer", "smoke_machine", "plasmarefiller", "limbgrower", "meta_beaker", "healthanalyzer_advanced", "harvester", "holobarrier_med", "detective_scanner", "defibrillator_compact") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/bio_process - id = "bio_process" - display_name = "Biological Processing" - description = "From slimes to kitchens." - prereq_ids = list("biotech") - design_ids = list("smartfridge", "gibber", "deepfryer", "monkey_recycler", "processor", "gibber", "microwave", "reagentgrinder", "dish_drive", "fat_sucker") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/////////////////////////Advanced Surgery///////////////////////// -/datum/techweb_node/imp_wt_surgery - id = "imp_wt_surgery" - display_name = "Improved Wound-Tending Surgery" - description = "Who would have known being more gentle with a hemostat decreases patient pain?" - prereq_ids = list("biotech") - /* - design_ids = list("surgery_heal_brute_upgrade","surgery_heal_burn_upgrade") - */ - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) - export_price = 1000 - - -/datum/techweb_node/adv_surgery - id = "adv_surgery" - display_name = "Advanced Surgery" - description = "When simple medicine doesn't cut it." - prereq_ids = list("imp_wt_surgery") - /* - design_ids = list("surgery_lobotomy", "surgery_heal_brute_upgrade_femto", "surgery_heal_burn_upgrade_femto","surgery_heal_combo", "surgery_revival","surgery_adv_dissection") - */ - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500) - export_price = 4000 - -/datum/techweb_node/exp_surgery - id = "exp_surgery" - display_name = "Experimental Surgery" - description = "When evolution isn't fast enough." - prereq_ids = list("adv_surgery") - /* - design_ids = list("surgery_pacify","surgery_vein_thread","surgery_muscled_veins","surgery_nerve_splice","surgery_nerve_ground","surgery_ligament_hook","surgery_ligament_reinforcement","surgery_viral_bond", "surgery_heal_combo_upgrade", "surgery_exp_dissection") - */ - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - export_price = 5000 - -/datum/techweb_node/alien_surgery - id = "alien_surgery" - display_name = "Alien Surgery" - description = "Abductors did nothing wrong." - prereq_ids = list("exp_surgery", "alientech") - /* - design_ids = list("surgery_brainwashing","surgery_zombie","surgery_heal_combo_upgrade_femto", "surgery_ext_dissection") - */ - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) - export_price = 5000 - -/////////////////////////data theory tech///////////////////////// -/datum/techweb_node/datatheory //Computer science - id = "datatheory" - display_name = "Data Theory" - description = "Big Data, in space!" - prereq_ids = list("base") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - - -/////////////////////////engineering tech///////////////////////// -/datum/techweb_node/engineering - id = "engineering" - display_name = "Industrial Engineering" - description = "A refresher course on modern engineering technology." - prereq_ids = list("base") - design_ids = list("solarcontrol", "recharger", "powermonitor", "rped", "pacman", "adv_capacitor", "adv_scanning", "emitter", "high_cell", "adv_matter_bin", "scanner_gate", - "atmosalerts", "atmos_control", "recycler", "autolathe", "high_micro_laser", "nano_mani", "mesons", "welding_goggles", "thermomachine", "rad_collector", "tesla_coil", "grounding_rod", - "apc_control", "cell_charger", "power control", "airlock_board", "firelock_board", "airalarm_electronics", "firealarm_electronics", "cell_charger", "stack_console", "stack_machine", - "oxygen_tank", "plasma_tank", "emergency_oxygen", "emergency_oxygen_engi", "plasmaman_tank_belt") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500) - export_price = 5000 - -/datum/techweb_node/adv_engi - id = "adv_engi" - display_name = "Advanced Engineering" - description = "Pushing the boundaries of physics, one chainsaw-fist at a time." - prereq_ids = list("engineering", "emp_basic") - design_ids = list("engine_goggles", "magboots", "forcefield_projector", "weldingmask", "rcd_loaded") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/anomaly - id = "anomaly_research" - display_name = "Anomaly Research" - description = "Unlock the potential of the mysterious anomalies that appear on station." - prereq_ids = list("adv_engi", "practical_bluespace") - design_ids = list("reactive_armour", "anomaly_neutralizer") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - export_price = 5000 - -/datum/techweb_node/high_efficiency - id = "high_efficiency" - display_name = "High Efficiency Parts" - description = "Finely-tooled manufacturing techniques allowing for picometer-perfect precision levels." - prereq_ids = list("engineering", "datatheory") - design_ids = list("pico_mani", "super_matter_bin") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500) - export_price = 5000 - -/datum/techweb_node/adv_power - id = "adv_power" - display_name = "Advanced Power Manipulation" - description = "How to get more zap." - prereq_ids = list("engineering") - design_ids = list("smes", "super_cell", "hyper_cell", "super_capacitor", "superpacman", "mrspacman", "power_turbine", "power_turbine_console", "power_compressor", "circulator", "teg") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/////////////////////////Bluespace tech///////////////////////// -/datum/techweb_node/bluespace_basic //Bluespace-memery - id = "bluespace_basic" - display_name = "Basic Bluespace Theory" - description = "Basic studies into the mysterious alternate dimension known as bluespace." - prereq_ids = list("base") - design_ids = list("beacon", "xenobioconsole", "telesci_gps", "bluespace_crystal") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/bluespace_travel - id = "bluespace_travel" - display_name = "Bluespace Travel" - description = "Application of Bluespace for static teleportation technology." - prereq_ids = list("practical_bluespace") - design_ids = list("tele_station", "tele_hub", "teleconsole", "quantumpad", "launchpad", "launchpad_console", "bluespace_pod") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - export_price = 5000 - -/datum/techweb_node/micro_bluespace - id = "micro_bluespace" - display_name = "Miniaturized Bluespace Research" - description = "Extreme reduction in space required for bluespace engines, leading to portable bluespace technology." - prereq_ids = list("bluespace_travel", "practical_bluespace", "high_efficiency") - design_ids = list("bluespace_matter_bin", "femto_mani", "bluespacebodybag", "triphasic_scanning", "quantum_keycard", "wormholeprojector", "swapper") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) - export_price = 5000 - -/datum/techweb_node/advanced_bluespace - id = "bluespace_storage" - display_name = "Advanced Bluespace Storage" - description = "With the use of bluespace we can create even more advanced storage devices than we could have ever done" - prereq_ids = list("micro_bluespace", "janitor") - design_ids = list("bag_holding") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - export_price = 3000 - -/datum/techweb_node/practical_bluespace - id = "practical_bluespace" - display_name = "Applied Bluespace Research" - description = "Using bluespace to make things faster and better." - prereq_ids = list("bluespace_basic", "engineering") - design_ids = list("bs_rped","minerbag_holding", "bluespacebeaker", "bluespacesyringe", "phasic_scanning", "roastingstick", "ore_silo") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - export_price = 5000 - -/datum/techweb_node/bluespace_power - id = "bluespace_power" - display_name = "Bluespace Power Technology" - description = "Even more powerful.. power!" - prereq_ids = list("adv_power", "practical_bluespace") - design_ids = list("bluespace_cell", "quadratic_capacitor") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/regulated_bluespace - id = "regulated_bluespace" - display_name = "Regulated Bluespace Research" - description = "Bluespace technology using stable and balanced procedures. Required by galactic convention for public use." - prereq_ids = list("base") - design_ids = list("spaceship_navigation_beacon") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 2500 - -/datum/techweb_node/unregulated_bluespace - id = "unregulated_bluespace" - display_name = "Unregulated Bluespace Research" - description = "Bluespace technology using unstable or unbalanced procedures, prone to damaging the fabric of bluespace. Outlawed by galactic conventions." - prereq_ids = list("bluespace_travel", "syndicate_basic") - design_ids = list("desynchronizer") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 2500 - - -/////////////////////////plasma tech///////////////////////// -/datum/techweb_node/basic_plasma - id = "basic_plasma" - display_name = "Basic Plasma Research" - description = "Research into the mysterious and dangerous substance, plasma." - prereq_ids = list("engineering") - design_ids = list("mech_generator") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/adv_plasma - id = "adv_plasma" - display_name = "Advanced Plasma Research" - description = "Research on how to fully exploit the power of plasma." - prereq_ids = list("basic_plasma") - design_ids = list("mech_plasma_cutter") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/////////////////////////robotics tech///////////////////////// -/datum/techweb_node/robotics - id = "robotics" - display_name = "Basic Robotics Research" - description = "Programmable machines that make our lives lazier." - prereq_ids = list("base") - design_ids = list("paicard") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/adv_robotics - id = "adv_robotics" - display_name = "Advanced Robotics Research" - description = "It can even do the dishes!" - prereq_ids = list("robotics") - design_ids = list("borg_upgrade_diamonddrill", "borg_upgrade_trashofholding", "borg_upgrade_advancedmop") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/neural_programming - id = "neural_programming" - display_name = "Neural Programming" - description = "Study into networks of processing units that mimic our brains." - prereq_ids = list("biotech", "datatheory") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/posibrain - id = "posibrain" - display_name = "Positronic Brain" - description = "Applied usage of neural technology allowing for autonomous AI units based on special metallic cubes with conductive and processing circuits." - prereq_ids = list("neural_programming") - design_ids = list("mmi_posi") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/cyborg_upg_util - id = "cyborg_upg_util" - display_name = "Cyborg Upgrades: Utility" - description = "Utility upgrades for cyborgs." - prereq_ids = list("engineering") - design_ids = list("borg_upgrade_holding", "borg_upgrade_lavaproof", "borg_upgrade_thrusters", "borg_upgrade_selfrepair", "borg_upgrade_expand") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) - export_price = 5000 - -/datum/techweb_node/cyborg_upg_engi - id = "cyborg_upg_engi" - display_name = "Cyborg Upgrades: Engineering" - description = "Engineering upgrades for cyborgs." - prereq_ids = list("engineering") - design_ids = list("borg_upgrade_rped", "borg_upgrade_circuitapp") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) - export_price = 5000 - -/datum/techweb_node/cyborg_upg_med - id = "cyborg_upg_med" - display_name = "Cyborg Upgrades: Medical" - description = "Medical upgrades for cyborgs." - prereq_ids = list("adv_biotech") - design_ids = list("borg_upgrade_defibrillator", "borg_upgrade_piercinghypospray", "borg_upgrade_expandedsynthesiser", "borg_upgrade_pinpointer", "borg_upgrade_surgicalprocessor", "borg_upgrade_beakerapp") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) - export_price = 5000 - -/datum/techweb_node/cyborg_upg_combat - id = "cyborg_upg_combat" - display_name = "Cyborg Upgrades: Combat" - description = "Military grade upgrades for cyborgs." - prereq_ids = list("adv_robotics", "adv_engi" , "weaponry") - design_ids = list("borg_upgrade_disablercooler") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - export_price = 5000 - -/datum/techweb_node/ai - id = "ai" - display_name = "Artificial Intelligence" - description = "AI unit research." - prereq_ids = list("robotics", "posibrain") - design_ids = list("aifixer", "aicore", "safeguard_module", "onehuman_module", "protectstation_module", "quarantine_module", "oxygen_module", "freeform_module", - "reset_module", "purge_module", "remove_module", "freeformcore_module", "asimov_module", "paladin_module", "tyrant_module", "overlord_module", "corporate_module", - "default_module", "borg_ai_control", "mecha_tracking_ai_control", "aiupload", "intellicard") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/////////////////////////EMP tech///////////////////////// -/datum/techweb_node/emp_basic //EMP tech for some reason - id = "emp_basic" - display_name = "Electromagnetic Theory" - description = "Study into usage of frequencies in the electromagnetic spectrum." - prereq_ids = list("base") - design_ids = list("holosign", "holosignsec", "holosignengi", "holosignatmos", "inducer", "tray_goggles", "holopad") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/emp_adv - id = "emp_adv" - display_name = "Advanced Electromagnetic Theory" - description = "Determining whether reversing the polarity will actually help in a given situation." - prereq_ids = list("emp_basic") - design_ids = list("ultra_micro_laser") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3000) - export_price = 5000 - -/datum/techweb_node/emp_super - id = "emp_super" - display_name = "Quantum Electromagnetic Technology" //bs - description = "Even better electromagnetic technology." - prereq_ids = list("emp_adv") - design_ids = list("quadultra_micro_laser") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3000) - export_price = 5000 - -/////////////////////////Clown tech///////////////////////// -/datum/techweb_node/clown - id = "clown" - display_name = "Clown Technology" - description = "Honk?!" - prereq_ids = list("base") - design_ids = list("air_horn", "honker_main", "honker_peri", "honker_targ", "honk_chassis", "honk_head", "honk_torso", "honk_left_arm", "honk_right_arm", - "honk_left_leg", "honk_right_leg", "mech_banana_mortar", "mech_mousetrap_mortar", "mech_honker", "mech_punching_face", "implant_trombone", "borg_transform_clown") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -////////////////////////Computer tech//////////////////////// -/datum/techweb_node/comptech - id = "comptech" - display_name = "Computer Consoles" - description = "Computers and how they work." - prereq_ids = list("datatheory") - design_ids = list("cargo", "cargorequest", "libraryconsole", "mining", "crewconsole", "rdcamera", "comconsole", "idcard","idcardconsole", "seccamera") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) - export_price = 5000 - -/datum/techweb_node/computer_hardware_basic //Modular computers are shitty and nearly useless so until someone makes them actually useful this can be easy to get. - id = "computer_hardware_basic" - display_name = "Computer Hardware" - description = "How computer hardware are made." - prereq_ids = list("comptech") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) //they are really shitty - export_price = 2000 - design_ids = list("hdd_basic", "hdd_advanced", "hdd_super", "hdd_cluster", "ssd_small", "ssd_micro", "netcard_basic", "netcard_advanced", "netcard_wired", - "portadrive_basic", "portadrive_advanced", "portadrive_super", "cardslot", "aislot", "miniprinter", "APClink", "bat_control", "bat_normal", "bat_advanced", - "bat_super", "bat_micro", "bat_nano", "cpu_normal", "pcpu_normal", "cpu_small", "pcpu_small") - -/datum/techweb_node/computer_board_gaming - id = "computer_board_gaming" - display_name = "Arcade Games" - description = "For the slackers on the station." - prereq_ids = list("comptech") - design_ids = list("arcade_battle", "arcade_orion", "slotmachine") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) - export_price = 2000 - -/datum/techweb_node/comp_recordkeeping - id = "comp_recordkeeping" - display_name = "Computerized Recordkeeping" - description = "Organized record databases and how they're used." - prereq_ids = list("comptech") - design_ids = list("secdata", "med_data", "prisonmanage", "vendor", "automated_announcement") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) - export_price = 2000 - -/datum/techweb_node/telecomms - id = "telecomms" - display_name = "Telecommunications Technology" - description = "Subspace transmission technology for near-instant communications devices." - prereq_ids = list("comptech", "bluespace_basic") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - design_ids = list("s-receiver", "s-bus", "s-broadcaster", "s-processor", "s-hub", "s-server", "s-relay", "comm_monitor", "comm_server", - "s-ansible", "s-filter", "s-amplifier", "ntnet_relay", "s-treatment", "s-analyzer", "s-crystal", "s-transmitter", "s-messaging") - -/datum/techweb_node/integrated_HUDs - id = "integrated_HUDs" - display_name = "Integrated HUDs" - description = "The usefulness of computerized records, projected straight onto your eyepiece!" - prereq_ids = list("comp_recordkeeping", "emp_basic") - design_ids = list("health_hud", "security_hud", "diagnostic_hud", "scigoggles") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500) - export_price = 5000 - -/datum/techweb_node/NVGtech - id = "NVGtech" - display_name = "Night Vision Technology" - description = "Allows seeing in the dark without actual light!" - prereq_ids = list("integrated_HUDs", "adv_engi", "emp_adv") - design_ids = list("health_hud_night", "security_hud_night", "diagnostic_hud_night", "night_visision_goggles", "nvgmesons") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - export_price = 5000 - -////////////////////////Medical//////////////////////// -/datum/techweb_node/cloning - id = "cloning" - display_name = "Genetic Engineering" - description = "We have the technology to make him." - prereq_ids = list("biotech") - design_ids = list("clonecontrol", "clonepod", "clonescanner", "scan_console", "cloning_disk") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/cryotech - id = "cryotech" - display_name = "Cryostasis Technology" - description = "Smart freezing of objects to preserve them!" - prereq_ids = list("adv_engi", "biotech") - design_ids = list("splitbeaker", "noreactsyringe", "cryotube", "cryo_Grenade", "stasis") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) - export_price = 4000 - -/datum/techweb_node/subdermal_implants - id = "subdermal_implants" - display_name = "Subdermal Implants" - description = "Electronic implants buried beneath the skin." - prereq_ids = list("biotech") - design_ids = list("implanter", "implantcase", "implant_chem", "implant_tracking", "locator", "c38_trac") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/cyber_organs - id = "cyber_organs" - display_name = "Cybernetic Organs" - description = "We have the technology to rebuild him." - prereq_ids = list("adv_biotech") - design_ids = list("cybernetic_ears", "cybernetic_heart", "cybernetic_liver", "cybernetic_lungs") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) - export_price = 5000 - -/datum/techweb_node/cyber_organs_upgraded - id = "cyber_organs_upgraded" - display_name = "Upgraded Cybernetic Organs" - description = "We have the technology to upgrade him." - prereq_ids = list("cyber_organs") - design_ids = list("cybernetic_ears_u", "cybernetic_heart_u", "cybernetic_liver_u", "cybernetic_lungs_u") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500) - export_price = 5000 - -/datum/techweb_node/cyber_implants - id = "cyber_implants" - display_name = "Cybernetic Implants" - description = "Electronic implants that improve humans." - prereq_ids = list("adv_biotech", "datatheory") - design_ids = list("ci-nutriment", "ci-breather", "ci-gloweyes", "ci-welding", "ci-medhud", "ci-sechud", "ci-diaghud") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/adv_cyber_implants - id = "adv_cyber_implants" - display_name = "Advanced Cybernetic Implants" - description = "Upgraded and more powerful cybernetic implants." - prereq_ids = list("neural_programming", "cyber_implants","integrated_HUDs") - design_ids = list("ci-toolset", "ci-surgery", "ci-reviver", "ci-nutrimentplus") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/combat_cyber_implants - id = "combat_cyber_implants" - display_name = "Combat Cybernetic Implants" - description = "Military grade combat implants to improve performance." - prereq_ids = list("adv_cyber_implants","weaponry","NVGtech","high_efficiency") - design_ids = list("ci-xray", "ci-thermals", "ci-antidrop", "ci-antistun", "ci-thrusters") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -////////////////////////Tools//////////////////////// - -/datum/techweb_node/basic_mining - id = "basic_mining" - display_name = "Mining Technology" - description = "Better than Efficiency V." - prereq_ids = list("engineering", "basic_plasma") - design_ids = list("drill", "superresonator", "triggermod", "damagemod", "cooldownmod", "rangemod", "ore_redemption", "mining_equipment_vendor", "cargoexpress", "plasmacutter")//e a r l y g a m e) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/adv_mining - id = "adv_mining" - display_name = "Advanced Mining Technology" - description = "Efficiency Level 127" //dumb mc references - prereq_ids = list("basic_mining", "adv_engi", "adv_power", "adv_plasma") - design_ids = list("drill_diamond", "jackhammer", "hypermod", "plasmacutter_adv") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/janitor - id = "janitor" - display_name = "Advanced Sanitation Technology" - description = "Clean things better, faster, stronger, and harder!" - prereq_ids = list("adv_engi") - design_ids = list("holobarrier_jani", "advmop", "buffer", "blutrash", "light_replacer", "spraybottle", "beartrap") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/botany - id = "botany" - display_name = "Botanical Engineering" - description = "Botanical tools" - prereq_ids = list("adv_engi", "biotech") - design_ids = list("diskplantgene", "portaseeder", "plantgenes", "flora_gun", "hydro_tray", "biogenerator", "seed_extractor") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/exp_tools - id = "exp_tools" - display_name = "Experimental Tools" - description = "Highly advanced tools." - design_ids = list("exwelder", "jawsoflife", "handdrill", "laserscalpel", "mechanicalpinches", "searingtool") - prereq_ids = list("adv_engi") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/sec_basic - id = "sec_basic" - display_name = "Basic Security Equipment" - description = "Standard equipment used by security." - design_ids = list("seclite", "pepperspray", "bola_energy", "zipties", "evidencebag") - prereq_ids = list("base") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) - export_price = 5000 - -/datum/techweb_node/rcd_upgrade - id = "rcd_upgrade" - display_name = "RCD designs upgrade" - description = "Unlocks new RCD designs." - design_ids = list("rcd_upgrade_frames", "rcd_upgrade_simple_circuits") - prereq_ids = list("adv_engi") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/adv_rcd_upgrade - id = "adv_rcd_upgrade" - display_name = "Advanced RCD designs upgrade" - description = "Unlocks new RCD designs." - design_ids = list("rcd_upgrade_silo_link") - prereq_ids = list("rcd_upgrade", "bluespace_travel") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 25000) - export_price = 5000 - -/////////////////////////weaponry tech///////////////////////// -/datum/techweb_node/weaponry - id = "weaponry" - display_name = "Weapon Development Technology" - description = "Our researchers have found new ways to weaponize just about everything now." - prereq_ids = list("engineering") - design_ids = list("pin_testing", "tele_shield") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) - export_price = 5000 - -/datum/techweb_node/adv_weaponry - id = "adv_weaponry" - display_name = "Advanced Weapon Development Technology" - description = "Our weapons are breaking the rules of reality by now." - prereq_ids = list("adv_engi", "weaponry") - design_ids = list("pin_loyalty") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) - export_price = 5000 - -/datum/techweb_node/electric_weapons - id = "electronic_weapons" - display_name = "Electric Weapons" - description = "Weapons using electric technology" - prereq_ids = list("weaponry", "adv_power" , "emp_basic") - design_ids = list("stunrevolver", "ioncarbine") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/radioactive_weapons - id = "radioactive_weapons" - display_name = "Radioactive Weaponry" - description = "Weapons using radioactive technology." - prereq_ids = list("adv_engi", "adv_weaponry") - design_ids = list("nuclear_gun") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/medical_weapons - id = "medical_weapons" - display_name = "Medical Weaponry" - description = "Weapons using medical technology." - prereq_ids = list("adv_biotech", "weaponry") - design_ids = list("rapidsyringe") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/beam_weapons - id = "beam_weapons" - display_name = "Beam Weaponry" - description = "Various basic beam weapons" - prereq_ids = list("adv_weaponry") - design_ids = list("temp_gun", "xray_laser") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/adv_beam_weapons - id = "adv_beam_weapons" - display_name = "Advanced Beam Weaponry" - description = "Various advanced beam weapons" - prereq_ids = list("beam_weapons") - design_ids = list("beamrifle") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/explosive_weapons - id = "explosive_weapons" - display_name = "Explosive & Pyrotechnical Weaponry" - description = "If the light stuff just won't do it." - prereq_ids = list("adv_weaponry") - design_ids = list("large_Grenade", "pyro_Grenade", "adv_Grenade") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/ballistic_weapons - id = "ballistic_weapons" - display_name = "Ballistic Weaponry" - description = "This isn't research.. This is reverse-engineering!" - prereq_ids = list("weaponry") - design_ids = list("mag_oldsmg", "mag_oldsmg_ap", "mag_oldsmg_ic") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/exotic_ammo - id = "exotic_ammo" - display_name = "Exotic Ammunition" - description = "They won't know what hit em." - prereq_ids = list("adv_weaponry", "medical_weapons") - design_ids = list("techshotshell", "c38_hotshot", "c38_iceblox", "shotgundartcryostasis") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/gravity_gun - id = "gravity_gun" - display_name = "One-point Bluespace-gravitational Manipulator" - description = "Fancy wording for gravity gun." - prereq_ids = list("adv_weaponry", "bluespace_travel") - design_ids = list("gravitygun", "mech_gravcatapult") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -////////////////////////mech technology//////////////////////// -/datum/techweb_node/adv_mecha - id = "adv_mecha" - display_name = "Advanced Exosuits" - description = "For when you just aren't Gundam enough." - prereq_ids = list("adv_robotics") - design_ids = list("mech_repair_droid") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/odysseus - id = "mecha_odysseus" - display_name = "EXOSUIT: Odysseus" - description = "Odysseus exosuit designs" - prereq_ids = list("base") - design_ids = list("odysseus_chassis", "odysseus_torso", "odysseus_head", "odysseus_left_arm", "odysseus_right_arm" ,"odysseus_left_leg", "odysseus_right_leg", - "odysseus_main", "odysseus_peri") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/gygax - id = "mech_gygax" - display_name = "EXOSUIT: Gygax" - description = "Gygax exosuit designs" - prereq_ids = list("adv_mecha", "weaponry") - design_ids = list("gygax_chassis", "gygax_torso", "gygax_head", "gygax_left_arm", "gygax_right_arm", "gygax_left_leg", "gygax_right_leg", "gygax_main", - "gygax_peri", "gygax_targ", "gygax_armor") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/durand - id = "mech_durand" - display_name = "EXOSUIT: Durand" - description = "Durand exosuit designs" - prereq_ids = list("adv_mecha", "adv_weaponry") - design_ids = list("durand_chassis", "durand_torso", "durand_head", "durand_left_arm", "durand_right_arm", "durand_left_leg", "durand_right_leg", "durand_main", - "durand_peri", "durand_targ", "durand_armor") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/phazon - id = "mecha_phazon" - display_name = "EXOSUIT: Phazon" - description = "Phazon exosuit designs" - prereq_ids = list("adv_mecha", "weaponry" , "micro_bluespace") - design_ids = list("phazon_chassis", "phazon_torso", "phazon_head", "phazon_left_arm", "phazon_right_arm", "phazon_left_leg", "phazon_right_leg", "phazon_main", - "phazon_peri", "phazon_targ", "phazon_armor") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/adv_mecha_tools - id = "adv_mecha_tools" - display_name = "Advanced Exosuit Equipment" - description = "Tools for high level mech suits" - prereq_ids = list("adv_mecha") - design_ids = list("mech_rcd", "mech_thrusters") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/med_mech_tools - id = "med_mech_tools" - display_name = "Medical Exosuit Equipment" - description = "Tools for high level mech suits" - prereq_ids = list("adv_biotech") - design_ids = list("mech_sleeper", "mech_syringe_gun", "mech_medi_beam") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/mech_modules - id = "adv_mecha_modules" - display_name = "Simple Exosuit Modules" - description = "An advanced piece of mech weaponry" - prereq_ids = list("adv_mecha", "bluespace_power") - design_ids = list("mech_energy_relay", "mech_ccw_armor", "mech_proj_armor", "mech_generator_nuclear") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/mech_scattershot - id = "mecha_tools" - display_name = "Exosuit Weapon (LBX AC 10 \"Scattershot\")" - description = "An advanced piece of mech weaponry" - prereq_ids = list("ballistic_weapons") - design_ids = list("mech_scattershot", "mech_scattershot_ammo") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/mech_carbine - id = "mech_carbine" - display_name = "Exosuit Weapon (FNX-99 \"Hades\" Carbine)" - description = "An advanced piece of mech weaponry" - prereq_ids = list("ballistic_weapons") - design_ids = list("mech_carbine", "mech_carbine_ammo") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/mech_ion - id = "mmech_ion" - display_name = "Exosuit Weapon (MKIV Ion Heavy Cannon)" - description = "An advanced piece of mech weaponry" - prereq_ids = list("electronic_weapons", "emp_adv") - design_ids = list("mech_ion") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/mech_tesla - id = "mech_tesla" - display_name = "Exosuit Weapon (MKI Tesla Cannon)" - description = "An advanced piece of mech weaponry" - prereq_ids = list("electronic_weapons", "adv_power") - design_ids = list("mech_tesla") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/mech_laser - id = "mech_laser" - display_name = "Exosuit Weapon (CH-PS \"Immolator\" Laser)" - description = "A basic piece of mech weaponry" - prereq_ids = list("beam_weapons") - design_ids = list("mech_laser") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/mech_laser_heavy - id = "mech_laser_heavy" - display_name = "Exosuit Weapon (CH-LC \"Solaris\" Laser Cannon)" - description = "An advanced piece of mech weaponry" - prereq_ids = list("adv_beam_weapons") - design_ids = list("mech_laser_heavy") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/mech_disabler - id = "mech_disabler" - display_name = "Exosuit Weapon (CH-DS \"Peacemaker\" Mounted Disabler)" - description = "A basic piece of mech weaponry" - prereq_ids = list("beam_weapons") - design_ids = list("mech_disabler") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/mech_grenade_launcher - id = "mech_grenade_launcher" - display_name = "Exosuit Weapon (SGL-6 Grenade Launcher)" - description = "An advanced piece of mech weaponry" - prereq_ids = list("explosive_weapons") - design_ids = list("mech_grenade_launcher", "mech_grenade_launcher_ammo") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/mech_missile_rack - id = "mech_missile_rack" - display_name = "Exosuit Weapon (BRM-6 Missile Rack)" - description = "An advanced piece of mech weaponry" - prereq_ids = list("explosive_weapons") - design_ids = list("mech_missile_rack", "mech_missile_rack_ammo") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/clusterbang_launcher - id = "clusterbang_launcher" - display_name = "Exosuit Module (SOB-3 Clusterbang Launcher)" - description = "An advanced piece of mech weaponry" - prereq_ids = list("explosive_weapons") - design_ids = list("clusterbang_launcher", "clusterbang_launcher_ammo") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/mech_teleporter - id = "mech_teleporter" - display_name = "Exosuit Module (Teleporter Module)" - description = "An advanced piece of mech Equipment" - prereq_ids = list("micro_bluespace") - design_ids = list("mech_teleporter") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/mech_wormhole_gen - id = "mech_wormhole_gen" - display_name = "Exosuit Module (Localized Wormhole Generator)" - description = "An advanced piece of mech weaponry" - prereq_ids = list("bluespace_travel") - design_ids = list("mech_wormhole_gen") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/mech_lmg - id = "mech_lmg" - display_name = "Exosuit Weapon (\"Ultra AC 2\" LMG)" - description = "An advanced piece of mech weaponry" - prereq_ids = list("ballistic_weapons") - design_ids = list("mech_lmg", "mech_lmg_ammo") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/datum/techweb_node/mech_diamond_drill - id = "mech_diamond_drill" - display_name = "Exosuit Diamond Drill" - description = "A diamond drill fit for a large exosuit" - prereq_ids = list("adv_mining") - design_ids = list("mech_diamond_drill") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 - -/////////////////////////Nanites///////////////////////// -/datum/techweb_node/nanite_base - id = "nanite_base" - display_name = "Basic Nanite Programming" - description = "The basics of nanite construction and programming." - prereq_ids = list("datatheory") - design_ids = list("nanite_disk","nanite_remote","nanite_comm_remote","nanite_scanner",\ - "nanite_chamber","public_nanite_chamber","nanite_chamber_control","nanite_programmer","nanite_program_hub","nanite_cloud_control",\ - "relay_nanites", "monitoring_nanites", "research_nanites" ,"researchplus_nanites", "access_nanites", "repairing_nanites","sensor_nanite_volume", "repeater_nanites", "relay_repeater_nanites","red_diag_nanites") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) - export_price = 5000 - -/datum/techweb_node/nanite_smart - id = "nanite_smart" - display_name = "Smart Nanite Programming" - description = "Nanite programs that require nanites to perform complex actions, act independently, roam or seek targets." - prereq_ids = list("nanite_base","robotics") - design_ids = list("purging_nanites", "metabolic_nanites", "stealth_nanites", "memleak_nanites","sensor_voice_nanites", "voice_nanites") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 500, TECHWEB_POINT_TYPE_NANITES = 500) - export_price = 4000 - -/datum/techweb_node/nanite_mesh - id = "nanite_mesh" - display_name = "Mesh Nanite Programming" - description = "Nanite programs that require static structures and membranes." - prereq_ids = list("nanite_base","engineering") - design_ids = list("hardening_nanites", "dermal_button_nanites", "refractive_nanites", "cryo_nanites", "conductive_nanites", "shock_nanites", "emp_nanites", "temperature_nanites") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 500, TECHWEB_POINT_TYPE_NANITES = 500) - export_price = 5000 - -/datum/techweb_node/nanite_bio - id = "nanite_bio" - display_name = "Biological Nanite Programming" - description = "Nanite programs that require complex biological interaction." - prereq_ids = list("nanite_base","biotech") - design_ids = list("regenerative_nanites", "bloodheal_nanites", "coagulating_nanites","poison_nanites","flesheating_nanites",\ - "sensor_crit_nanites","sensor_death_nanites", "sensor_health_nanites", "sensor_damage_nanites", "sensor_species_nanites") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 500, TECHWEB_POINT_TYPE_NANITES = 500) - export_price = 5000 - -/datum/techweb_node/nanite_neural - id = "nanite_neural" - display_name = "Neural Nanite Programming" - description = "Nanite programs affecting nerves and brain matter." - prereq_ids = list("nanite_bio") - design_ids = list("nervous_nanites", "brainheal_nanites", "paralyzing_nanites", "stun_nanites", "selfscan_nanites","good_mood_nanites","bad_mood_nanites") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000, TECHWEB_POINT_TYPE_NANITES = 1000) - export_price = 5000 - -/datum/techweb_node/nanite_synaptic - id = "nanite_synaptic" - display_name = "Synaptic Nanite Programming" - description = "Nanite programs affecting mind and thoughts." - prereq_ids = list("nanite_neural","neural_programming") - design_ids = list("mindshield_nanites", "pacifying_nanites", "blinding_nanites", "sleep_nanites", "mute_nanites", "speech_nanites","hallucination_nanites") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000, TECHWEB_POINT_TYPE_NANITES = 1000) - export_price = 5000 - -/datum/techweb_node/nanite_harmonic - id = "nanite_harmonic" - display_name = "Harmonic Nanite Programming" - description = "Nanite programs that require seamless integration between nanites and biology." - prereq_ids = list("nanite_bio","nanite_smart","nanite_mesh") - design_ids = list("fakedeath_nanites","aggressive_nanites","defib_nanites","regenerative_plus_nanites","brainheal_plus_nanites","purging_plus_nanites","adrenaline_nanites") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000, TECHWEB_POINT_TYPE_NANITES = 2000) - export_price = 8000 - -/datum/techweb_node/nanite_combat - id = "nanite_military" - display_name = "Military Nanite Programming" - description = "Nanite programs that perform military-grade functions." - prereq_ids = list("nanite_harmonic", "syndicate_basic") - design_ids = list("explosive_nanites","pyro_nanites","meltdown_nanites","viral_nanites","nanite_sting_nanites") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500, TECHWEB_POINT_TYPE_NANITES = 2500) - export_price = 12500 - -/datum/techweb_node/nanite_hazard - id = "nanite_hazard" - display_name = "Hazard Nanite Programs" - description = "Extremely advanced Nanite programs with the potential of being extremely dangerous." - prereq_ids = list("nanite_harmonic", "alientech") - design_ids = list("spreading_nanites","mindcontrol_nanites","mitosis_nanites") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3000, TECHWEB_POINT_TYPE_NANITES = 4000) - export_price = 15000 - -////////////////////////Alien technology//////////////////////// -/datum/techweb_node/alientech //AYYYYYYYYLMAOO tech - id = "alientech" - display_name = "Alien Technology" - description = "Things used by the greys." - prereq_ids = list("biotech","engineering") - boost_item_paths = list(/obj/item/gun/energy/alien, /obj/item/scalpel/alien, /obj/item/hemostat/alien, /obj/item/retractor/alien, /obj/item/circular_saw/alien, - /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, - /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor/baton, /obj/item/abductor, /obj/item/gun/energy/shrink_ray) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - export_price = 20000 - hidden = TRUE - design_ids = list("alienalloy") - -/datum/techweb_node/alientech/on_research() //Unlocks the Zeta shuttle for purchase - SSshuttle.shuttle_purchase_requirements_met |= SHUTTLE_UNLOCK_ALIENTECH - -/datum/techweb_node/alien_bio - id = "alien_bio" - display_name = "Alien Biological Tools" - description = "Advanced biological tools." - prereq_ids = list("alientech", "adv_biotech") - design_ids = list("alien_scalpel", "alien_hemostat", "alien_retractor", "alien_saw", "alien_drill", "alien_cautery") - boost_item_paths = list(/obj/item/gun/energy/alien, /obj/item/scalpel/alien, /obj/item/hemostat/alien, /obj/item/retractor/alien, /obj/item/circular_saw/alien, - /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, - /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor/baton, /obj/item/abductor, /obj/item/gun/energy/shrink_ray) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 20000 - hidden = TRUE - -/datum/techweb_node/alien_engi - id = "alien_engi" - display_name = "Alien Engineering" - description = "Alien engineering tools" - prereq_ids = list("alientech", "adv_engi") - design_ids = list("alien_wrench", "alien_wirecutters", "alien_screwdriver", "alien_crowbar", "alien_welder", "alien_multitool") - boost_item_paths = list(/obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, - /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor/baton, /obj/item/abductor, - /obj/item/gun/energy/shrink_ray) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 20000 - hidden = TRUE - -/datum/techweb_node/syndicate_basic - id = "syndicate_basic" - display_name = "Illegal Technology" - description = "Dangerous research used to create dangerous objects." - prereq_ids = list("adv_engi", "adv_weaponry", "explosive_weapons") - design_ids = list("decloner", "borg_syndicate_module", "ai_cam_upgrade", "suppressor", "largecrossbow", "donksofttoyvendor", "donksoft_refill", "advanced_camera") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) - export_price = 5000 - hidden = TRUE - -/datum/techweb_node/syndicate_basic/New() //Crappy way of making syndicate gear decon supported until there's another way. - . = ..() - boost_item_paths = list() - for(var/path in GLOB.uplink_items) - var/datum/uplink_item/UI = new path - if(!UI.item || !UI.illegal_tech) - continue - boost_item_paths |= UI.item //allows deconning to unlock. - -//Helpers for debugging/balancing the techweb in its entirety! -/proc/total_techweb_exports() - var/list/datum/techweb_node/processing = list() - for(var/i in subtypesof(/datum/techweb_node)) - processing += new i - . = 0 - for(var/i in processing) - var/datum/techweb_node/TN = i - . += TN.export_price - -/proc/total_techweb_points() - var/list/datum/techweb_node/processing = list() - for(var/i in subtypesof(/datum/techweb_node)) - processing += new i - var/datum/techweb/TW = new - TW.research_points = list() - for(var/i in processing) - var/datum/techweb_node/TN = i - TW.add_point_list(TN.research_costs) - return TW.research_points - -/proc/total_techweb_points_printout() - var/list/datum/techweb_node/processing = list() - for(var/i in subtypesof(/datum/techweb_node)) - processing += new i - var/datum/techweb/TW = new - TW.research_points = list() - for(var/i in processing) - var/datum/techweb_node/TN = i - TW.add_point_list(TN.research_costs) - return TW.printout_points() diff --git a/code/modules/research/xenobiology/crossbreeding/_misc.dm b/code/modules/research/xenobiology/crossbreeding/_misc.dm index d0d12a0600..8e3fdfdb4d 100644 --- a/code/modules/research/xenobiology/crossbreeding/_misc.dm +++ b/code/modules/research/xenobiology/crossbreeding/_misc.dm @@ -4,16 +4,6 @@ Slimecrossing Items Collected here for clarity. */ -//Rewind camera - I'm already Burning Sepia -/obj/item/camera/rewind - name = "sepia-tinted camera" - desc = "" - pictures_left = 1 - pictures_max = 1 - can_customise = FALSE - default_picture_name = "A nostalgic picture" - var/used = FALSE - /datum/saved_bodypart var/obj/item/bodypart/old_part var/bodypart_type @@ -55,49 +45,6 @@ Slimecrossing Items ret[part.body_zone] = saved_part return ret -/obj/item/camera/rewind/afterattack(atom/target, mob/user, flag) - if(!on || !pictures_left || !isturf(target.loc)) - return - if(!used)//selfie time - if(user == target) - to_chat(user, "I take a selfie!") - else - to_chat(user, "I take a photo with [target]!") - to_chat(target, "[user] takes a photo with you!") - to_chat(target, "You'll remember this moment forever!") - - used = TRUE - target.AddComponent(/datum/component/dejavu, 2) - .=..() - - - -//Timefreeze camera - Old Burning Sepia result. Kept in case admins want to spawn it -/obj/item/camera/timefreeze - name = "sepia-tinted camera" - desc = "" - pictures_left = 1 - pictures_max = 1 - var/used = FALSE - -/obj/item/camera/timefreeze/afterattack(atom/target, mob/user, flag) - if(!on || !pictures_left || !isturf(target.loc)) - return - if(!used) //refilling the film does not refill the timestop - new /obj/effect/timestop(get_turf(target), 2, 50, list(user)) - used = TRUE - desc = "" - . = ..() - - -//Hypercharged slime cell - Charged Yellow -/obj/item/stock_parts/cell/high/slime/hypercharged - name = "hypercharged slime core" - desc = "" - rating = 7 //Roughly 1.5 times the original. - maxcharge = 20000 //2 times the normal one. - chargerate = 2250 //1.5 times the normal rate. - //Barrier cube - Chilling Grey /obj/item/barriercube name = "barrier cube" diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm index 5b45deb72a..25ba920de7 100644 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm @@ -530,29 +530,6 @@ to_chat(owner, "[linked_extract] adds a layer of slime to [S], which metamorphosizes into another sheet of material!") return ..() - -/datum/status_effect/stabilized/yellow - id = "stabilizedyellow" - colour = "yellow" - var/cooldown = 10 - var/max_cooldown = 10 - examine_text = "Nearby electronics seem just a little more charged wherever SUBJECTPRONOUN goes." - -/datum/status_effect/stabilized/yellow/tick() - if(cooldown > 0) - cooldown-- - return ..() - cooldown = max_cooldown - var/list/batteries = list() - for(var/obj/item/stock_parts/cell/C in owner.GetAllContents()) - if(C.charge < C.maxcharge) - batteries += C - if(batteries.len) - var/obj/item/stock_parts/cell/ToCharge = pick(batteries) - ToCharge.charge += min(ToCharge.maxcharge - ToCharge.charge, ToCharge.maxcharge/10) //10% of the cell, or to maximum. - to_chat(owner, "[linked_extract] discharges some energy into a device you have.") - return ..() - /obj/item/hothands name = "burning fingertips" desc = "" @@ -577,7 +554,7 @@ if(istype(F)) if(F.cooked_type) to_chat(owner, "[linked_extract] flares up brightly, and my hands alone are enough cook [F]!") - var/obj/item/result = F.microwave_act() + var/obj/item/result = F.heating_act() if(istype(result)) owner.put_in_hands(result) else diff --git a/code/modules/research/xenobiology/crossbreeding/burning.dm b/code/modules/research/xenobiology/crossbreeding/burning.dm index 02316e519b..9710fefde6 100644 --- a/code/modules/research/xenobiology/crossbreeding/burning.dm +++ b/code/modules/research/xenobiology/crossbreeding/burning.dm @@ -159,15 +159,6 @@ Burning extracts: playsound(get_turf(L), "sparks", 50, TRUE) ..() -/obj/item/slimecross/burning/sepia - colour = "sepia" - effect_desc = "" - -/obj/item/slimecross/burning/sepia/do_effect(mob/user) - user.visible_message("[src] shapes itself into a camera!") - new /obj/item/camera/rewind(get_turf(user)) - ..() - /obj/item/slimecross/burning/cerulean colour = "cerulean" effect_desc = "" diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm index 9d9815299e..9751656478 100644 --- a/code/modules/research/xenobiology/crossbreeding/charged.dm +++ b/code/modules/research/xenobiology/crossbreeding/charged.dm @@ -75,15 +75,6 @@ Charged extracts: user.visible_message("[src] grows into a plethora of metals!") ..() -/obj/item/slimecross/charged/yellow - colour = "yellow" - effect_desc = "" - -/obj/item/slimecross/charged/yellow/do_effect(mob/user) - new /obj/item/stock_parts/cell/high/slime/hypercharged(get_turf(user)) - user.visible_message("[src] sparks violently, and swells with electric power!") - ..() - /obj/item/slimecross/charged/darkpurple colour = "dark purple" effect_desc = "" @@ -123,15 +114,6 @@ Charged extracts: user.visible_message("[src] produces several sheets of polycrystal!") ..() -/obj/item/slimecross/charged/sepia - colour = "sepia" - effect_desc = "" - -/obj/item/slimecross/charged/sepia/do_effect(mob/user) - new /obj/item/camera/spooky(get_turf(user)) - user.visible_message("[src] flickers in a strange, ethereal manner, and produces a camera!") - ..() - /obj/item/slimecross/charged/cerulean colour = "cerulean" effect_desc = "" diff --git a/code/modules/research/xenobiology/crossbreeding/chilling.dm b/code/modules/research/xenobiology/crossbreeding/chilling.dm index 4ba81b0baa..e0cf082596 100644 --- a/code/modules/research/xenobiology/crossbreeding/chilling.dm +++ b/code/modules/research/xenobiology/crossbreeding/chilling.dm @@ -82,18 +82,6 @@ Chilling extracts: new /obj/effect/forcefield/slimewall(T) ..() -/obj/item/slimecross/chilling/yellow - colour = "yellow" - effect_desc = "" - -/obj/item/slimecross/chilling/yellow/do_effect(mob/user) - var/area/A = get_area(get_turf(user)) - user.visible_message("[src] shatters, and a the air suddenly feels charged for a moment.") - for(var/obj/machinery/power/apc/C in A) - if(C.cell) - C.cell.charge = min(C.cell.charge + C.cell.maxcharge/2, C.cell.maxcharge) - ..() - /obj/item/slimecross/chilling/darkpurple colour = "dark purple" effect_desc = "" @@ -318,17 +306,3 @@ Chilling extracts: user.visible_message("[src] creaks and breaks as it shifts into a heavy set of armor!") new /obj/item/clothing/suit/armor/heavy/adamantine(get_turf(user)) ..() - -/obj/item/slimecross/chilling/rainbow - colour = "rainbow" - effect_desc = "" - -/obj/item/slimecross/chilling/rainbow/do_effect(mob/user) - var/area/area = get_area(user) - if(area.outdoors) - to_chat(user, "[src] can't affect such a large area.") - return - user.visible_message("[src] reflects an array of dazzling colors and light, energy rushing to nearby doors!") - for(var/obj/machinery/door/airlock/door in area) - new /obj/effect/forcefield/slimewall/rainbow(door.loc) - return ..() diff --git a/code/modules/research/xenobiology/crossbreeding/industrial.dm b/code/modules/research/xenobiology/crossbreeding/industrial.dm index fa65855d0c..94f5508e1d 100644 --- a/code/modules/research/xenobiology/crossbreeding/industrial.dm +++ b/code/modules/research/xenobiology/crossbreeding/industrial.dm @@ -81,17 +81,6 @@ Industrial extracts: plasmarequired = 3 itempath = /obj/item/stack/sheet/metal/ten -/obj/item/slimecross/industrial/yellow - colour = "yellow" - effect_desc = "" - plasmarequired = 5 - itempath = /obj/item/stock_parts/cell/high - -/obj/item/slimecross/industrial/yellow/do_after_spawn(obj/item/spawned) - var/obj/item/stock_parts/cell/high/C = spawned - if(istype(C)) - C.charge = rand(0,C.maxcharge/2) - /obj/item/slimecross/industrial/darkpurple colour = "dark purple" effect_desc = "" @@ -125,12 +114,6 @@ Industrial extracts: plasmarequired = 7 itempath = /obj/item/stack/ore/bluespace_crystal/artificial -/obj/item/slimecross/industrial/sepia - colour = "sepia" - effect_desc = "" - plasmarequired = 2 - itempath = /obj/item/camera - /obj/item/slimecross/industrial/cerulean colour = "cerulean" effect_desc = "" diff --git a/code/modules/research/xenobiology/crossbreeding/regenerative.dm b/code/modules/research/xenobiology/crossbreeding/regenerative.dm index fb9ae6984f..654fa778a4 100644 --- a/code/modules/research/xenobiology/crossbreeding/regenerative.dm +++ b/code/modules/research/xenobiology/crossbreeding/regenerative.dm @@ -75,20 +75,6 @@ Regenerative extracts: C.desc = "" target.forceMove(C) -/obj/item/slimecross/regenerative/yellow - colour = "yellow" - effect_desc = "" - -/obj/item/slimecross/regenerative/yellow/core_effect(mob/living/target, mob/user) - var/list/batteries = list() - for(var/obj/item/stock_parts/cell/C in target.GetAllContents()) - if(C.charge < C.maxcharge) - batteries += C - if(batteries.len) - var/obj/item/stock_parts/cell/ToCharge = pick(batteries) - ToCharge.charge = ToCharge.maxcharge - to_chat(target, "I feel a strange electrical pulse, and one of your electrical items was recharged.") - /obj/item/slimecross/regenerative/darkpurple colour = "dark purple" effect_desc = "" diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm deleted file mode 100644 index 9a955d1b74..0000000000 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ /dev/null @@ -1,473 +0,0 @@ -//Xenobio control console -/mob/camera/aiEye/remote/xenobio - visible_icon = TRUE - icon = 'icons/mob/cameramob.dmi' - icon_state = "generic_camera" - var/allowed_area = null - -/mob/camera/aiEye/remote/xenobio/Initialize() - var/area/A = get_area(loc) - allowed_area = A.name - . = ..() - -/mob/camera/aiEye/remote/xenobio/setLoc(t) - var/area/new_area = get_area(t) - if(new_area && new_area.name == allowed_area || new_area && new_area.xenobiology_compatible) - return ..() - else - return - -/obj/machinery/computer/camera_advanced/xenobio - name = "Slime management console" - desc = "" - networks = list("ss13") - circuit = /obj/item/circuitboard/computer/xenobiology - var/datum/action/innate/slime_place/slime_place_action - var/datum/action/innate/slime_pick_up/slime_up_action - var/datum/action/innate/feed_slime/feed_slime_action - var/datum/action/innate/monkey_recycle/monkey_recycle_action - var/datum/action/innate/slime_scan/scan_action - var/datum/action/innate/feed_potion/potion_action - var/datum/action/innate/hotkey_help/hotkey_help - - var/obj/machinery/monkey_recycler/connected_recycler - var/list/stored_slimes - var/obj/item/slimepotion/slime/current_potion - var/max_slimes = 5 - var/monkeys = 0 - - icon_screen = "slime_comp" - icon_keyboard = "rd_key" - - light_color = LIGHT_COLOR_PINK - -/obj/machinery/computer/camera_advanced/xenobio/Initialize(mapload) - . = ..() - slime_place_action = new - slime_up_action = new - feed_slime_action = new - monkey_recycle_action = new - scan_action = new - potion_action = new - hotkey_help = new - stored_slimes = list() - for(var/obj/machinery/monkey_recycler/recycler in GLOB.monkey_recyclers) - if(get_area(recycler.loc) == get_area(loc)) - connected_recycler = recycler - connected_recycler.connected += src - -/obj/machinery/computer/camera_advanced/xenobio/Destroy() - QDEL_NULL(current_potion) - for(var/thing in stored_slimes) - var/mob/living/simple_animal/slime/S = thing - S.forceMove(drop_location()) - stored_slimes.Cut() - if(connected_recycler) - connected_recycler.connected -= src - connected_recycler = null - return ..() - -/obj/machinery/computer/camera_advanced/xenobio/handle_atom_del(atom/A) - if(A == current_potion) - current_potion = null - if(A in stored_slimes) - stored_slimes -= A - return ..() - -/obj/machinery/computer/camera_advanced/xenobio/CreateEye() - eyeobj = new /mob/camera/aiEye/remote/xenobio(get_turf(src)) - eyeobj.origin = src - eyeobj.visible_icon = TRUE - eyeobj.icon = 'icons/mob/cameramob.dmi' - eyeobj.icon_state = "generic_camera" - -/obj/machinery/computer/camera_advanced/xenobio/GrantActions(mob/living/user) - ..() - - if(slime_up_action) - slime_up_action.target = src - slime_up_action.Grant(user) - actions += slime_up_action - - if(slime_place_action) - slime_place_action.target = src - slime_place_action.Grant(user) - actions += slime_place_action - - if(feed_slime_action) - feed_slime_action.target = src - feed_slime_action.Grant(user) - actions += feed_slime_action - - if(monkey_recycle_action) - monkey_recycle_action.target = src - monkey_recycle_action.Grant(user) - actions += monkey_recycle_action - - if(scan_action) - scan_action.target = src - scan_action.Grant(user) - actions += scan_action - - if(potion_action) - potion_action.target = src - potion_action.Grant(user) - actions += potion_action - - if(hotkey_help) - hotkey_help.target = src - hotkey_help.Grant(user) - actions += hotkey_help - - RegisterSignal(user, COMSIG_XENO_SLIME_CLICK_CTRL, PROC_REF(XenoSlimeClickCtrl)) - RegisterSignal(user, COMSIG_XENO_SLIME_CLICK_ALT, PROC_REF(XenoSlimeClickAlt)) - RegisterSignal(user, COMSIG_XENO_SLIME_CLICK_SHIFT, PROC_REF(XenoSlimeClickShift)) - RegisterSignal(user, COMSIG_XENO_TURF_CLICK_SHIFT, PROC_REF(XenoTurfClickShift)) - RegisterSignal(user, COMSIG_XENO_TURF_CLICK_CTRL, PROC_REF(XenoTurfClickCtrl)) - RegisterSignal(user, COMSIG_XENO_MONKEY_CLICK_CTRL, PROC_REF(XenoMonkeyClickCtrl)) - - //Checks for recycler on every interact, prevents issues with load order on certain maps. - if(!connected_recycler) - for(var/obj/machinery/monkey_recycler/recycler in GLOB.monkey_recyclers) - if(get_area(recycler.loc) == get_area(loc)) - connected_recycler = recycler - connected_recycler.connected += src - -/obj/machinery/computer/camera_advanced/xenobio/remove_eye_control(mob/living/user) - UnregisterSignal(user, COMSIG_XENO_SLIME_CLICK_CTRL) - UnregisterSignal(user, COMSIG_XENO_SLIME_CLICK_ALT) - UnregisterSignal(user, COMSIG_XENO_SLIME_CLICK_SHIFT) - UnregisterSignal(user, COMSIG_XENO_TURF_CLICK_SHIFT) - UnregisterSignal(user, COMSIG_XENO_TURF_CLICK_CTRL) - UnregisterSignal(user, COMSIG_XENO_MONKEY_CLICK_CTRL) - ..() - -/obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube)) - monkeys++ - to_chat(user, "I feed [O] to [src]. It now has [monkeys] monkey cubes stored.") - qdel(O) - return - else if(istype(O, /obj/item/storage/bag)) - var/obj/item/storage/P = O - var/loaded = FALSE - for(var/obj/G in P.contents) - if(istype(G, /obj/item/reagent_containers/food/snacks/monkeycube)) - loaded = TRUE - monkeys++ - qdel(G) - if(loaded) - to_chat(user, "I fill [src] with the monkey cubes stored in [O]. [src] now has [monkeys] monkey cubes stored.") - return - else if(istype(O, /obj/item/slimepotion/slime)) - var/replaced = FALSE - if(user && !user.transferItemToLoc(O, src)) - return - if(!QDELETED(current_potion)) - current_potion.forceMove(drop_location()) - replaced = TRUE - current_potion = O - to_chat(user, "I load [O] in the console's potion slot[replaced ? ", replacing the one that was there before" : ""].") - return - ..() - -/obj/machinery/computer/camera_advanced/xenobio/multitool_act(mob/living/user, obj/item/multitool/I) - . = ..() - if (istype(I) && istype(I.buffer,/obj/machinery/monkey_recycler)) - to_chat(user, "I link [src] with [I.buffer] in [I] buffer.") - connected_recycler = I.buffer - connected_recycler.connected += src - return TRUE - -/datum/action/innate/slime_place - name = "Place Slimes" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "slime_down" - -/datum/action/innate/slime_place/Activate() - if(!target || !isliving(owner)) - return - var/mob/living/C = owner - var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = target - - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) - for(var/mob/living/simple_animal/slime/S in X.stored_slimes) - S.forceMove(remote_eye.loc) - S.visible_message("[S] warps in!") - X.stored_slimes -= S - else - to_chat(owner, "Target is not near a camera. Cannot proceed.") - -/datum/action/innate/slime_pick_up - name = "Pick up Slime" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "slime_up" - -/datum/action/innate/slime_pick_up/Activate() - if(!target || !isliving(owner)) - return - var/mob/living/C = owner - var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = target - - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) - for(var/mob/living/simple_animal/slime/S in remote_eye.loc) - if(X.stored_slimes.len >= X.max_slimes) - break - if(!S.ckey) - if(S.buckled) - S.Feedstop(silent = TRUE) - S.visible_message("[S] vanishes in a flash of light!") - S.forceMove(X) - X.stored_slimes += S - else - to_chat(owner, "Target is not near a camera. Cannot proceed.") - - -/datum/action/innate/feed_slime - name = "Feed Slimes" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "monkey_down" - -/datum/action/innate/feed_slime/Activate() - if(!target || !isliving(owner)) - return - var/mob/living/C = owner - var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = target - - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) - if(X.monkeys >= 1) - var/mob/living/carbon/monkey/food = new /mob/living/carbon/monkey(remote_eye.loc, TRUE, owner) - if (!QDELETED(food)) - food.LAssailant = C - X.monkeys-- - X.monkeys = round(X.monkeys, 0.1) //Prevents rounding errors - to_chat(owner, "[X] now has [X.monkeys] monkeys stored.") - else - to_chat(owner, "[X] needs to have at least 1 monkey stored. Currently has [X.monkeys] monkeys stored.") - else - to_chat(owner, "Target is not near a camera. Cannot proceed.") - - -/datum/action/innate/monkey_recycle - name = "Recycle Monkeys" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "monkey_up" - -/datum/action/innate/monkey_recycle/Activate() - if(!target || !isliving(owner)) - return - var/mob/living/C = owner - var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = target - var/obj/machinery/monkey_recycler/recycler = X.connected_recycler - - if(!recycler) - to_chat(owner, "There is no connected monkey recycler. Use a multitool to link one.") - return - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) - for(var/mob/living/carbon/monkey/M in remote_eye.loc) - if(M.stat) - M.visible_message("[M] vanishes as [M.p_theyre()] reclaimed for recycling!") - recycler.use_power(500) - X.monkeys += recycler.cube_production - X.monkeys = round(X.monkeys, 0.1) //Prevents rounding errors - qdel(M) - to_chat(owner, "[X] now has [X.monkeys] monkeys available.") - else - to_chat(owner, "Target is not near a camera. Cannot proceed.") - -/datum/action/innate/slime_scan - name = "Scan Slime" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "slime_scan" - -/datum/action/innate/slime_scan/Activate() - if(!target || !isliving(owner)) - return - var/mob/living/C = owner - var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control - - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) - for(var/mob/living/simple_animal/slime/S in remote_eye.loc) - slime_scan(S, C) - else - to_chat(owner, "Target is not near a camera. Cannot proceed.") - -/datum/action/innate/feed_potion - name = "Apply Potion" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "slime_potion" - -/datum/action/innate/feed_potion/Activate() - if(!target || !isliving(owner)) - return - - var/mob/living/C = owner - var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = target - - if(QDELETED(X.current_potion)) - to_chat(owner, "No potion loaded.") - return - - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) - for(var/mob/living/simple_animal/slime/S in remote_eye.loc) - X.current_potion.attack(S, C) - break - else - to_chat(owner, "Target is not near a camera. Cannot proceed.") - -/datum/action/innate/hotkey_help - name = "Hotkey Help" - icon_icon = 'icons/mob/actions/actions_silicon.dmi' - button_icon_state = "hotkey_help" - -/datum/action/innate/hotkey_help/Activate() - if(!target || !isliving(owner)) - return - to_chat(owner, "Click shortcuts:") - to_chat(owner, "Shift-click a slime to pick it up, or the floor to drop all held slimes.") - to_chat(owner, "Ctrl-click a slime to scan it.") - to_chat(owner, "Alt-click a slime to feed it a potion.") - to_chat(owner, "Ctrl-click or a dead monkey to recycle it, or the floor to place a new monkey.") - -// -// Alternate clicks for slime, monkey and open turf if using a xenobio console - -// Scans slime -/mob/living/simple_animal/slime/CtrlClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_SLIME_CLICK_CTRL, src) - ..() - -//Feeds a potion to slime -/mob/living/simple_animal/slime/AltClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_SLIME_CLICK_ALT, src) - ..() - -//Picks up slime -/mob/living/simple_animal/slime/ShiftClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_SLIME_CLICK_SHIFT, src) - ..() - -//Place slimes -/turf/open/ShiftClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_TURF_CLICK_SHIFT, src) - ..() - -//Place monkey -/turf/open/CtrlClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_TURF_CLICK_CTRL, src) - ..() - -//Pick up monkey -/mob/living/carbon/monkey/CtrlClick(mob/user) - SEND_SIGNAL(user, COMSIG_XENO_MONKEY_CLICK_CTRL, src) - ..() - -// Scans slime -/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickCtrl(mob/living/user, mob/living/simple_animal/slime/S) - if(!GLOB.cameranet.checkTurfVis(S.loc)) - to_chat(user, "Target is not near a camera. Cannot proceed.") - return - var/mob/living/C = user - var/mob/camera/aiEye/remote/xenobio/E = C.remote_control - var/area/mobarea = get_area(S.loc) - if(mobarea.name == E.allowed_area || mobarea.xenobiology_compatible) - slime_scan(S, C) - -//Feeds a potion to slime -/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickAlt(mob/living/user, mob/living/simple_animal/slime/S) - if(!GLOB.cameranet.checkTurfVis(S.loc)) - to_chat(user, "Target is not near a camera. Cannot proceed.") - return - var/mob/living/C = user - var/mob/camera/aiEye/remote/xenobio/E = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin - var/area/mobarea = get_area(S.loc) - if(QDELETED(X.current_potion)) - to_chat(C, "No potion loaded.") - return - if(mobarea.name == E.allowed_area || mobarea.xenobiology_compatible) - X.current_potion.attack(S, C) - -//Picks up slime -/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickShift(mob/living/user, mob/living/simple_animal/slime/S) - if(!GLOB.cameranet.checkTurfVis(S.loc)) - to_chat(user, "Target is not near a camera. Cannot proceed.") - return - var/mob/living/C = user - var/mob/camera/aiEye/remote/xenobio/E = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin - var/area/mobarea = get_area(S.loc) - if(mobarea.name == E.allowed_area || mobarea.xenobiology_compatible) - if(X.stored_slimes.len >= X.max_slimes) - to_chat(C, "Slime storage is full.") - return - if(S.ckey) - to_chat(C, "The slime wiggled free!") - return - if(S.buckled) - S.Feedstop(silent = TRUE) - S.visible_message("[S] vanishes in a flash of light!") - S.forceMove(X) - X.stored_slimes += S - -//Place slimes -/obj/machinery/computer/camera_advanced/xenobio/proc/XenoTurfClickShift(mob/living/user, turf/open/T) - if(!GLOB.cameranet.checkTurfVis(T)) - to_chat(user, "Target is not near a camera. Cannot proceed.") - return - var/mob/living/C = user - var/mob/camera/aiEye/remote/xenobio/E = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin - var/area/turfarea = get_area(T) - if(turfarea.name == E.allowed_area || turfarea.xenobiology_compatible) - for(var/mob/living/simple_animal/slime/S in X.stored_slimes) - S.forceMove(T) - S.visible_message("[S] warps in!") - X.stored_slimes -= S - -//Place monkey -/obj/machinery/computer/camera_advanced/xenobio/proc/XenoTurfClickCtrl(mob/living/user, turf/open/T) - if(!GLOB.cameranet.checkTurfVis(T)) - to_chat(user, "Target is not near a camera. Cannot proceed.") - return - var/mob/living/C = user - var/mob/camera/aiEye/remote/xenobio/E = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin - var/area/turfarea = get_area(T) - if(turfarea.name == E.allowed_area || turfarea.xenobiology_compatible) - if(X.monkeys >= 1) - var/mob/living/carbon/monkey/food = new /mob/living/carbon/monkey(T, TRUE, C) - if (!QDELETED(food)) - food.LAssailant = C - X.monkeys-- - X.monkeys = round(X.monkeys, 0.1) //Prevents rounding errors - to_chat(C, "[X] now has [X.monkeys] monkeys stored.") - else - to_chat(C, "[X] needs to have at least 1 monkey stored. Currently has [X.monkeys] monkeys stored.") - -//Pick up monkey -/obj/machinery/computer/camera_advanced/xenobio/proc/XenoMonkeyClickCtrl(mob/living/user, mob/living/carbon/monkey/M) - if(!GLOB.cameranet.checkTurfVis(M.loc)) - to_chat(user, "Target is not near a camera. Cannot proceed.") - return - var/mob/living/C = user - var/mob/camera/aiEye/remote/xenobio/E = C.remote_control - var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin - var/area/mobarea = get_area(M.loc) - if(!X.connected_recycler) - to_chat(C, "There is no connected monkey recycler. Use a multitool to link one.") - return - if(mobarea.name == E.allowed_area || mobarea.xenobiology_compatible) - if(!M.stat) - return - M.visible_message("[M] vanishes as [p_theyre()] reclaimed for recycling!") - X.connected_recycler.use_power(500) - X.monkeys += connected_recycler.cube_production - X.monkeys = round(X.monkeys, 0.1) //Prevents rounding errors - qdel(M) - to_chat(C, "[X] now has [X.monkeys] monkeys available.") diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 1f7d252e8e..9494ef5809 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -527,15 +527,6 @@ user.visible_message("[user] spits out [O]!", "I spit out [O]!") return 150 - if(SLIME_ACTIVATE_MAJOR) - var/blacklisted_cans = list(/obj/item/toy/crayon/spraycan/borg, /obj/item/toy/crayon/spraycan/infinite) - var/chosen = pick(subtypesof(/obj/item/toy/crayon/spraycan) - blacklisted_cans) - var/obj/item/O = new chosen(null) - if(!user.put_in_active_hand(O)) - O.forceMove(user.drop_location()) - playsound(user, 'sound/blank.ogg', 50, TRUE) - user.visible_message("[user] spits out [O]!", "I spit out [O]!") - return 250 /obj/item/slime_extract/cerulean name = "cerulean slime extract" @@ -565,14 +556,6 @@ /obj/item/slime_extract/sepia/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) - if(SLIME_ACTIVATE_MINOR) - var/obj/item/camera/O = new(null, 1) - if(!user.put_in_active_hand(O)) - O.forceMove(user.drop_location()) - playsound(user, 'sound/blank.ogg', 50, TRUE) - user.visible_message("[user] spits out [O]!", "I spit out [O]!") - return 150 - if(SLIME_ACTIVATE_MAJOR) to_chat(user, "I feel time slow down...") if(do_after(user, 30, target = user)) @@ -697,17 +680,6 @@ /obj/item/slimepotion/slime/sentience/proc/after_success(mob/living/user, mob/living/simple_animal/SM) return -/obj/item/slimepotion/slime/sentience/nuclear - name = "syndicate intelligence potion" - desc = "" - -/obj/item/slimepotion/slime/sentience/nuclear/after_success(mob/living/user, mob/living/simple_animal/SM) - var/obj/item/implant/radio/syndicate/imp = new(src) - imp.implant(SM, user) - - SM.access_card = new /obj/item/card/id/syndicate(SM) - ADD_TRAIT(SM.access_card, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) - /obj/item/slimepotion/transference name = "consciousness transference potion" desc = "" @@ -956,28 +928,6 @@ qdel(src) -/obj/item/slimepotion/slime/slimeradio - name = "bluespace radio potion" - desc = "" - icon = 'icons/obj/chemical.dmi' - icon_state = "potgrey" - -/obj/item/slimepotion/slime/slimeradio/attack(mob/living/M, mob/user) - if(!ismob(M)) - return - if(!isanimal(M)) - to_chat(user, "[M] is too complex for the potion!") - return - if(M.stat) - to_chat(user, "[M] is dead!") - return - - to_chat(user, "I feed the potion to [M].") - to_chat(M, "My mind tingles as you are fed the potion. You can hear radio waves now!") - var/obj/item/implant/radio/slime/imp = new(src) - imp.implant(M, user) - qdel(src) - /obj/item/stack/tile/bluespace name = "bluespace floor tile" singular_name = "floor tile" diff --git a/code/modules/roguetown/mapgen/bog.dm b/code/modules/roguetown/mapgen/bog.dm index 51af3aeef1..ac97bb27d4 100644 --- a/code/modules/roguetown/mapgen/bog.dm +++ b/code/modules/roguetown/mapgen/bog.dm @@ -13,7 +13,7 @@ clusterCheckFlags = CLUSTER_CHECK_DIFFERENT_ATOMS allowed_turfs = list(/turf/open/floor/rogue/dirt) spawnableAtoms = list(/obj/structure/flora/roguetree = 1, - /obj/structure/flora/roguegrass/bush_meagre = 8, + /obj/structure/flora/roguegrass/bush_meagre = 7, /obj/structure/flora/roguegrass/bush_meagre/bog = 4, /obj/structure/flora/roguegrass/maneater = 1, /obj/structure/flora/roguegrass = 23, @@ -21,9 +21,10 @@ /obj/item/natural/rock = 30, /obj/item/natural/stone = 30, /obj/structure/flora/roguegrass/swampweed = 30, - /obj/item/grown/log/tree/stick = 4, + /obj/item/grown/log/tree/stick = 3, /obj/structure/flora/roguegrass/maneater/real = 2, - /obj/item/restraints/legcuffs/beartrap/armed/camouflage = 0) + /obj/structure/innocent_bush = 1, + ) spawnableTurfs = list(/turf/open/water/swamp = 5, /turf/open/floor/rogue/dirt = 80) allowed_areas = list(/area/rogue/outdoors/bog) diff --git a/code/modules/roguetown/mapgen/rogueoutdoors.dm b/code/modules/roguetown/mapgen/rogueoutdoors.dm index 29533ec93f..5b0d740b94 100644 --- a/code/modules/roguetown/mapgen/rogueoutdoors.dm +++ b/code/modules/roguetown/mapgen/rogueoutdoors.dm @@ -69,3 +69,131 @@ spawnableAtoms = list(/obj/structure/flora/roguegrass/water = 20, /obj/structure/flora/roguegrass/water/reeds = 12, /obj/structure/kneestingers = 3) + + +// ---------------- STONEHAMLET -------------------- +/obj/effect/landmark/mapGenerator/rogue/stonehamlet + mapGeneratorType = /datum/mapGenerator/stonehamlet + endTurfX = 128 + endTurfY = 192 + startTurfX = 1 + startTurfY = 1 + +/datum/mapGenerator/stonehamlet + modules = list( + /datum/mapGeneratorModule/stonehamlet, + /datum/mapGeneratorModule/stonehamlet/roadturf, + /datum/mapGeneratorModule/stonehamlet/bonus_grassturfs, + /datum/mapGeneratorModule/stonehamlet/bonus_ambushsturfs, + /datum/mapGeneratorModule/stonehamlet_grassturf, + /datum/mapGeneratorModule/stonehamlet_swampturf, + /datum/mapGeneratorModule/stonehamlet_waterturf, + /datum/mapGeneratorModule/stonehamlet_buriedtreasure, + /datum/mapGeneratorModule/ambushing/hamlet) + +/datum/mapGeneratorModule/stonehamlet + clusterCheckFlags = CLUSTER_CHECK_DIFFERENT_ATOMS + allowed_turfs = list(/turf/open/floor/rogue/dirt) + excluded_turfs = list(/turf/open/floor/rogue/dirt/road) + spawnableAtoms = list( + /obj/structure/flora/roguegrass/bush_meagre = 10, + /obj/structure/flora/roguegrass = 20, + /obj/item/natural/stone = 5, + /obj/item/natural/rock = 3, + /obj/item/grown/log/tree/stick = 2) + spawnableTurfs = list(/turf/open/floor/rogue/dirt/road=5) + allowed_areas = list(/area/rogue/outdoors/rtfield) + +/datum/mapGeneratorModule/stonehamlet/roadturf + clusterCheckFlags = CLUSTER_CHECK_DIFFERENT_ATOMS + allowed_turfs = list(/turf/open/floor/rogue/dirt/road) + excluded_turfs = list() + spawnableAtoms = list(/obj/item/natural/stone = 3, + /obj/item/grown/log/tree/stick = 2) + allowed_areas = list(/area/rogue/outdoors/rtfield) + +/datum/mapGeneratorModule/stonehamlet/bonus_grassturfs + clusterCheckFlags = CLUSTER_CHECK_NONE + allowed_turfs = list(/turf/open/floor/rogue/dirt) + excluded_turfs = list(/turf/open/floor/rogue/dirt/road) + spawnableTurfs = list(/turf/open/floor/rogue/grass = 4) + allowed_areas = list(/area/rogue/outdoors/rtfield) + +/datum/mapGeneratorModule/stonehamlet/bonus_ambushsturfs + allowed_areas = list(/area/rogue/outdoors/rtfield/spooky,/area/rogue/outdoors/rtfield/plague_district) + spawnableTurfs = list(/turf/open/floor/rogue/dirt/ambush = 3) + allowed_turfs = list(/turf/open/floor/rogue/dirt) + excluded_turfs = list(/turf/open/floor/rogue/dirt/road) + +/datum/mapGeneratorModule/stonehamlet_buriedtreasure + clusterCheckFlags = CLUSTER_CHECK_DIFFERENT_ATOMS + allowed_turfs = list(/turf/open/floor/rogue/dirt) + excluded_turfs = list(/turf/open/floor/rogue/dirt/road) + spawnableAtoms = list( + /obj/structure/closet/dirthole/closed/loot=5) // add more stuff I guess + allowed_areas = list(/area/rogue/outdoors/rtfield/spooky, /area/rogue/outdoors/rtfield/outlaw) + +/datum/mapGeneratorModule/stonehamlet_grassturf + clusterCheckFlags = CLUSTER_CHECK_NONE + allowed_turfs = list(/turf/open/floor/rogue/grass) + excluded_turfs = list(/turf/open/floor/rogue/dirt/road) + spawnableAtoms = list(/obj/structure/flora/roguegrass = 15, + /obj/item/natural/stone = 6, + /obj/item/grown/log/tree/stick = 2, + /obj/structure/flora/rogueflower/lavendergrass = 0.5, + /obj/structure/flora/rogueflower/ywflowers = 0.5, + /obj/structure/flora/rogueflower/brflowers = 0.5, + /obj/structure/flora/rogueflower/ppflowers = 0.5) + allowed_areas = list(/area/rogue/outdoors/town,/area/rogue/outdoors/rtfield) + +/datum/mapGeneratorModule/stonehamlet_swampturf + clusterCheckFlags = CLUSTER_CHECK_SAME_ATOMS + allowed_turfs = list(/turf/open/water/swamp) + excluded_turfs = list() + allowed_areas = list(/area/rogue/outdoors/rtfield/boggish) + spawnableAtoms = list(/obj/structure/flora/roguegrass/water = 12, + /obj/structure/flora/roguegrass/water/reeds = 8, + /obj/structure/flora/roguegrass/stalky = 4, + /obj/structure/kneestingers = 4, + /obj/structure/flora/rogueflower/reedbush = 2, + /obj/structure/flora/roguegrass/maneater/real = 1) + +/datum/mapGeneratorModule/stonehamlet_waterturf + clusterCheckFlags = CLUSTER_CHECK_NONE + allowed_turfs = list(/turf/open/water/cleanshallow) + excluded_turfs = list() + allowed_areas = list(/area/rogue/outdoors/rtfield) + spawnableAtoms = list(/obj/structure/flora/roguegrass/water = 8, + /obj/structure/flora/roguegrass/water/reeds = 4) + +/datum/mapGeneratorModule/ambushing/hamlet + spawnableAtoms = list(/obj/effect/landmark/ambush=50) + spawnableTurfs = list() + clusterMax = 3 + clusterMin = 1 + checkdensity = FALSE + allowed_areas = list(/area/rogue/outdoors/rtfield/spooky, /area/rogue/outdoors/rtfield/plague_district, /area/rogue/outdoors/rtfield/outlaw, /area/rogue/outdoors/rtfield/boggish, /area/rogue/outdoors/rtfield/woodish, /area/rogue/outdoors/rtfield/hamlet/unsafe ) +// allowed_turfs = list(/turf/open/floor/rogue/dirt/ambush) + excluded_turfs = list(/turf/open/floor/rogue/dirt/road) + + + + +//bandaid sunlight +/obj/effect/landmark/mapGenerator/sunlights/bandaid + mapGeneratorType = /datum/mapGenerator/sunlights/bandaid + endTurfX = 128 + endTurfY = 192 + startTurfX = 1 + startTurfY = 1 + +/datum/mapGenerator/sunlights/bandaid + modules = list(/datum/mapGeneratorModule/sunlights/bandaid) + +/datum/mapGeneratorModule/sunlights/bandaid + spawnableAtoms = list(/obj/effect/sunlight = 100) + spawnableTurfs = list() + clusterMax = 7 + clusterMin = 7 + checkdensity = FALSE + allowed_areas = list(/area/rogue/outdoors) diff --git a/code/modules/roguetown/roguecrafting/alchemy/ingredients.dm b/code/modules/roguetown/roguecrafting/alchemy/ingredients.dm index 92b73002ef..6c113d513e 100644 --- a/code/modules/roguetown/roguecrafting/alchemy/ingredients.dm +++ b/code/modules/roguetown/roguecrafting/alchemy/ingredients.dm @@ -120,6 +120,7 @@ throwforce = 5 w_class = WEIGHT_CLASS_NORMAL dust_result = /obj/item/alch/earthdust + sellprice = 35 //Modifier ingredients /obj/item/alch/golddust diff --git a/code/modules/roguetown/roguecrafting/alchemy/potionbuffs.dm b/code/modules/roguetown/roguecrafting/alchemy/potionbuffs.dm index e04e0764ff..b2988e5654 100644 --- a/code/modules/roguetown/roguecrafting/alchemy/potionbuffs.dm +++ b/code/modules/roguetown/roguecrafting/alchemy/potionbuffs.dm @@ -72,21 +72,3 @@ name = "Fortune" icon_state = "buff" - - - -/* -/datum/status_effect/buff/foodbuff - id = "foodbuff" - alert_type = /obj/screen/alert/status_effect/buff/foodbuff - effectedstats = list("constitution" = 1,"endurance" = 1) - duration = 10 MINUTES - -/datum/status_effect/buff/foodbuff/on_apply() - owner.add_stress(/datum/stressevent/goodfood) - return ..() - -/obj/screen/alert/status_effect/buff/foodbuff - name = "Great Meal" - desc = "" - icon_state = "foodbuff"*/ diff --git a/code/modules/roguetown/roguecrafting/carpentry.dm b/code/modules/roguetown/roguecrafting/carpentry.dm new file mode 100644 index 0000000000..dd7e455f0f --- /dev/null +++ b/code/modules/roguetown/roguecrafting/carpentry.dm @@ -0,0 +1,194 @@ +/* CARPENTRY is for pretty much any object made of wood. To see some wooden structures that also use carpentry, go to structure.dm. +==========================================================*/ + +/datum/crafting_recipe/roguetown/carpentry + skillcraft = /datum/skill/craft/carpentry + subtype_reqs = TRUE + craftdiff = 0 + +/*========= NO SKILL LEVEL REQUIRED ==========*/ + +/datum/crafting_recipe/roguetown/carpentry/woodbucket + name = "wooden bucket" + result = /obj/item/reagent_containers/glass/bucket/wooden + reqs = list(/obj/item/grown/log/tree/small = 1) + +/datum/crafting_recipe/roguetown/carpentry/spoon + name = "wooden spoon" + result = list(/obj/item/kitchen/spoon, + /obj/item/kitchen/spoon) + reqs = list(/obj/item/grown/log/tree/small = 1) + +/datum/crafting_recipe/roguetown/carpentry/rollingpin + name = "wooden rollingpin" + result = /obj/item/rogueweapon/mace/woodclub/rollingpin + reqs = list(/obj/item/grown/log/tree/small = 1) + +/datum/crafting_recipe/roguetown/carpentry/woodbowl + name = "wooden bowl" + result = list(/obj/item/reagent_containers/glass/bowl, + /obj/item/reagent_containers/glass/bowl) + reqs = list(/obj/item/grown/log/tree/small = 1) + +/datum/crafting_recipe/roguetown/carpentry/woodcup + name = "wooden cups" + result = list(/obj/item/reagent_containers/glass/cup/wooden/crafted, + /obj/item/reagent_containers/glass/cup/wooden/crafted, + /obj/item/reagent_containers/glass/cup/wooden/crafted) + reqs = list(/obj/item/grown/log/tree/small = 1) + +/obj/item/reagent_containers/glass/cup/wooden/crafted + sellprice = 3 + +/datum/crafting_recipe/roguetown/carpentry/woodplatter + name = "wood platters (x2)" + result = list(/obj/item/cooking/platter, + /obj/item/cooking/platter) + reqs = list(/obj/item/grown/log/tree/small = 1) + +/*========= SKILL LEVEL: 1 REQUIRED ==========*/ + +/datum/crafting_recipe/roguetown/carpentry/woodsword + name = "wood sword" + result = list(/obj/item/rogueweapon/mace/woodclub/train_sword, + /obj/item/rogueweapon/mace/woodclub/train_sword) + reqs = list(/obj/item/grown/log/tree/small = 1, + /obj/item/natural/fibers = 1) + craftdiff = 1 + +/datum/crafting_recipe/roguetown/carpentry/quarterstaff//elaborated quarterstaff only carpenters can do + name = "wooden quarterstaff" + result = list(/obj/item/rogueweapon/polearm/woodstaff/quarterstaff, + /obj/item/rogueweapon/polearm/woodstaff/quarterstaff) + reqs = list(/obj/item/grown/log/tree = 1) + req_table = TRUE + tools = list(/obj/item/rogueweapon/knife) + craftdiff = 2 + +/datum/crafting_recipe/roguetown/woodspade + name = "wood spade" + result = /obj/item/rogueweapon/shovel/small + reqs = list(/obj/item/grown/log/tree/small = 1, + /obj/item/grown/log/tree/stick = 1) + craftdiff = 1 + +/obj/item/rogueweapon/shovel/small/crafted + sellprice = 5 + +/datum/crafting_recipe/roguetown/carpentry/recurve + name = "recurve bow" + result = list(/obj/item/gun/ballistic/revolver/grenadelauncher/bow/recurve) + reqs = list(/obj/item/grown/log/tree/small = 1, + /obj/item/natural/fibers = 4) + craftdiff = 1 + +/*========= SKILL LEVEL: 2 REQUIRED ==========*/ + +/datum/crafting_recipe/roguetown/carpentry/woodshield + name = "wooden shield" + result = /obj/item/rogueweapon/shield/wood/crafted + reqs = list(/obj/item/grown/log/tree/small = 1, + /obj/item/natural/hide = 1) + skillcraft = /datum/skill/craft/carpentry + craftdiff = 2 + +/obj/item/rogueweapon/shield/wood/crafted + sellprice = 6 + +/datum/crafting_recipe/roguetown/carpentry/handmadebow + name = "wooden bow" + result = list(/obj/item/gun/ballistic/revolver/grenadelauncher/bow) + reqs = list(/obj/item/grown/log/tree/small = 1, + /obj/item/natural/fibers = 6) + craftdiff = 2 + +/datum/crafting_recipe/roguetown/structure/plough + name = "plough" + result = /obj/structure/plough + reqs = list(/obj/item/grown/log/tree/small = 2, /obj/item/ingot/iron = 1) + skillcraft = /datum/skill/craft/carpentry + time = 4 SECONDS + craftdiff = 2 + +/*========= SKILL LEVEL: 3 REQUIRED ==========*/ + +/datum/crafting_recipe/roguetown/carpentry/rproesthetic + name = "wood arm (L)" + result = list(/obj/item/bodypart/l_arm/rproesthetic) + reqs = list(/obj/item/grown/log/tree/small = 1, + /obj/item/roguegear = 1) + craftdiff = 3 + +/datum/crafting_recipe/roguetown/carpentry/rproesthetic + name = "wood arm (R)" + result = list(/obj/item/bodypart/r_arm/rproesthetic) + reqs = list(/obj/item/grown/log/tree/small = 1, + /obj/item/roguegear = 1) + craftdiff = 3 + +/datum/crafting_recipe/roguetown/carpentry/longbow + name = "longbow" + result = list(/obj/item/gun/ballistic/revolver/grenadelauncher/bow/long) + reqs = list(/obj/item/grown/log/tree/small = 1, + /obj/item/natural/fibers = 8, + /obj/item/reagent_containers/food/snacks/fat) + structurecraft = /obj/machinery/light/rogue/campfire + craftdiff = 3 + +/datum/crafting_recipe/roguetown/carpentry/woodflail + name = "wooden flail x2" + reqs = list(/obj/item/rope/chain = 1, + /obj/item/grown/log/tree/stick = 1, /obj/item/grown/log/tree/small = 1) + tools = list(/obj/item/rogueweapon/hammer) + req_table = TRUE + result = list(/obj/item/rogueweapon/flail/towner, /obj/item/rogueweapon/flail/towner) + craftdiff = 3 + +/datum/crafting_recipe/roguetown/carpentry/woodengreatflail + name = "great wooden flail" + reqs = list(/obj/item/rope = 1, + /obj/item/grown/log/tree/stick = 1, /obj/item/grown/log/tree/small = 1) + tools = list(/obj/item/rogueweapon/hammer) + req_table = TRUE + result = list(/obj/item/rogueweapon/thresher) + craftdiff = 3 + +// These are so these items don't receive the smithing modifiers. + +/datum/crafting_recipe/roguetown/carpentry/steelstaff + name = "steel quarterstaff" + reqs = list(/obj/item/rogueweapon/polearm/woodstaff/quarterstaff = 1, /obj/item/ingot/steel = 2) + result = list(/obj/item/rogueweapon/polearm/woodstaff/quarterstaff/steel) + craftdiff = 3 + +/datum/crafting_recipe/roguetown/carpentry/ironstaff + name = "iron quarterstaff" + reqs = list(/obj/item/rogueweapon/polearm/woodstaff/quarterstaff = 1, /obj/item/ingot/iron = 1) + tools = list(/obj/item/rogueweapon/hammer) + result = list(/obj/item/rogueweapon/polearm/woodstaff/quarterstaff/iron) + craftdiff = 3 + +/datum/crafting_recipe/roguetown/carpentry/militia_flail + name = "militia flail" + reqs = list(/obj/item/rogueweapon/flail/towner = 1, /obj/item/ingot/iron = 1) + tools = list(/obj/item/rogueweapon/hammer) + req_table = TRUE + result = list(/obj/item/rogueweapon/flail/militia) + craftdiff = 3 + +/datum/crafting_recipe/roguetown/carpentry/bigflail + name = "great militia flail" + reqs = list(/obj/item/rope/chain = 1, + /obj/item/rogueweapon/thresher = 1, /obj/item/ingot/iron = 1) + tools = list(/obj/item/rogueweapon/hammer) + req_table = TRUE + result = list(/obj/item/rogueweapon/thresher/military) + craftdiff = 3 + +/datum/crafting_recipe/roguetown/carpentry/ironcudgel + name = "peasant cudgels x2" + reqs = list(/obj/item/grown/log/tree/small = 1, /obj/item/ingot/iron = 1) + tools = list(/obj/item/rogueweapon/hammer) + req_table = TRUE + result = list(/obj/item/rogueweapon/mace/cudgel/carpenter, /obj/item/rogueweapon/mace/cudgel/carpenter) + craftdiff = 3 diff --git a/code/modules/roguetown/roguecrafting/cooking.dm b/code/modules/roguetown/roguecrafting/cooking.dm index 17af70b516..26f2d7614a 100644 --- a/code/modules/roguetown/roguecrafting/cooking.dm +++ b/code/modules/roguetown/roguecrafting/cooking.dm @@ -1,3 +1,4 @@ +// NPC1314, you oat-thieving ungulate, return to me my neatly-organized code. See NeuFood.dm for the recipes until I properly sort this... or I don't. /datum/crafting_recipe/roguetown/cooking req_table = TRUE diff --git a/code/modules/roguetown/roguecrafting/items.dm b/code/modules/roguetown/roguecrafting/items.dm index 38dd9d8a2a..ff48676dfc 100644 --- a/code/modules/roguetown/roguecrafting/items.dm +++ b/code/modules/roguetown/roguecrafting/items.dm @@ -1,14 +1,24 @@ +/* CRAFTING uses the Crafting skill, natch. Pretty much every recipe that doesn't fit somewhere else. +==========================================================*/ + /datum/crafting_recipe/roguetown always_availible = TRUE skillcraft = /datum/skill/craft/crafting + craftdiff = 0 + +/*========= NO SKILL LEVEL REQUIRED ==========*/ +/datum/crafting_recipe/roguetown/torch + name = "torch" + result = /obj/item/flashlight/flare/torch + reqs = list(/obj/item/grown/log/tree/stick = 1, + /obj/item/natural/fibers = 1) /datum/crafting_recipe/roguetown/tneedle name = "sewing needle" result = /obj/item/needle/thorn reqs = list(/obj/item/natural/thorn = 1, /obj/item/natural/fibers = 1) - craftdiff = 0 /datum/crafting_recipe/roguetown/cloth name = "cloth" @@ -16,28 +26,72 @@ reqs = list(/obj/item/natural/fibers = 2) tools = list(/obj/item/needle) skillcraft = /datum/skill/misc/sewing - craftdiff = 0 verbage = "sew" verbage_tp = "sews" +/datum/crafting_recipe/roguetown/pipe + name = "wood pipe" + result = /obj/item/clothing/mask/cigarette/pipe/crafted + reqs = list(/obj/item/grown/log/tree/stick = 2) + +/obj/item/clothing/mask/cigarette/pipe/crafted + sellprice = 6 + +/datum/crafting_recipe/roguetown/dryweed + name = "dry westleach leaf" + result = /obj/item/reagent_containers/food/snacks/produce/dry_westleach + reqs = list(/obj/item/reagent_containers/food/snacks/produce/westleach = 1) + structurecraft = /obj/structure/fluff/dryingrack + time = 2 SECONDS + verbage = "dry" + verbage_tp = "dries" + craftsound = null + skillcraft = null + +/datum/crafting_recipe/roguetown/sigdry + name = "westleach zig" + result = /obj/item/clothing/mask/cigarette/rollie/nicotine + reqs = list(/obj/item/reagent_containers/food/snacks/produce/dry_westleach = 1, + /obj/item/paper = 1) + time = 10 SECONDS + verbage = "roll" + verbage_tp = "rolls" + +/datum/crafting_recipe/roguetown/dryleaf + name = "dry swampweed" + result = /obj/item/reagent_containers/food/snacks/produce/swampweed_dried + reqs = list(/obj/item/reagent_containers/food/snacks/produce/swampweed = 1) + structurecraft = /obj/structure/fluff/dryingrack + time = 2 SECONDS + verbage = "dry" + verbage_tp = "dries" + craftsound = null + skillcraft = null + +/datum/crafting_recipe/roguetown/sigsweet + name = "swampweed zig" + result = /obj/item/clothing/mask/cigarette/rollie/cannabis + reqs = list(/obj/item/reagent_containers/food/snacks/produce/swampweed_dried = 1, + /obj/item/paper = 1) + time = 10 SECONDS + verbage = "roll" + verbage_tp = "rolls" + /datum/crafting_recipe/roguetown/dart name = "dart" result = /obj/item/ammo_casing/caseless/rogue/dart reqs = list(/obj/item/natural/thorn = 1, /obj/item/grown/log/tree/stick = 1) - craftdiff = 0 /datum/crafting_recipe/roguetown/blowgun name = "blowgun" result = /obj/item/gun/ballistic/revolver/grenadelauncher/blowgun reqs = list(/obj/item/grown/log/tree/stick = 1) - craftdiff = 0 /datum/crafting_recipe/roguetown/clothsash name = "cloth sash" result = /obj/item/storage/belt/rogue/leather/cloth reqs = list(/obj/item/natural/cloth = 1) - craftdiff = 0 verbage = "tie" verbage_tp = "ties" @@ -45,7 +99,6 @@ name = "untie cloth sash" result = /obj/item/natural/cloth reqs = list(/obj/item/storage/belt/rogue/leather/cloth = 1) - craftdiff = 0 verbage = "untie" verbage_tp = "unties" @@ -53,7 +106,6 @@ name = "rope belt" result = /obj/item/storage/belt/rogue/leather/rope reqs = list(/obj/item/rope = 1) - craftdiff = 0 verbage = "untie" verbage_tp = "unties" @@ -61,7 +113,6 @@ name = "untie rope belt" result = /obj/item/rope reqs = list(/obj/item/storage/belt/rogue/leather/rope = 1) - craftdiff = 0 verbage = "untie" verbage_tp = "unties" @@ -72,6 +123,30 @@ verbage = "braid" verbage_tp = "braids" +/datum/crafting_recipe/roguetown/cheapdyes + name = "cheap dyes" + result = /obj/item/cheap_dyes + reqs = list( + /obj/item/reagent_containers/food/snacks/produce/jacksberry = 1, + /obj/item/natural/dirtclod = 1) + subtype_reqs = TRUE // so you can use any subtype of the berries and swampweed + +/datum/crafting_recipe/roguetown/cheapdyes/alt + reqs = list( + /obj/item/reagent_containers/food/snacks/produce/swampweed = 1, + /obj/item/natural/dirtclod = 1) + +/datum/crafting_recipe/roguetown/cheapdyes/alto + reqs = list( + /obj/item/reagent_containers/food/snacks/produce/swampweed = 1, + /obj/item/ash = 1) + +/datum/crafting_recipe/roguetown/cheapdyes/altest + reqs = list( + /obj/item/reagent_containers/food/snacks/produce/jacksberry = 1, + /obj/item/ash = 1) + +/* /datum/crafting_recipe/roguetown/net name = "net" result = /obj/item/net @@ -80,165 +155,58 @@ /obj/item/natural/stone = 3) verbage = "braid" verbage_tp = "braids" +*/ - -/datum/crafting_recipe/roguetown/torch - name = "torch" - result = /obj/item/flashlight/flare/torch - reqs = list(/obj/item/grown/log/tree/stick = 1, - /obj/item/natural/fibers = 1) - craftdiff = 0 - -/datum/crafting_recipe/roguetown/candle - name = "candle" - result = /obj/item/candle/yellow - reqs = list(/obj/item/reagent_containers/food/snacks/fat = 1) +/datum/crafting_recipe/roguetown/woodstaff//this is the simple staff anyone can make + name = "wood staff" + result = list(/obj/item/rogueweapon/polearm/woodstaff, + /obj/item/rogueweapon/polearm/woodstaff, + /obj/item/rogueweapon/polearm/woodstaff) + reqs = list(/obj/item/grown/log/tree = 1) + craftdiff = 1 /datum/crafting_recipe/roguetown/stoneaxe name = "stone axe" - result = /obj/item/rogueweapon/stoneaxe + result = /obj/item/rogueweapon/axe/stone reqs = list(/obj/item/grown/log/tree/small = 1, /obj/item/natural/stone = 1) - /datum/crafting_recipe/roguetown/stoneknife name = "stone knife" - result = /obj/item/rogueweapon/huntingknife/stoneknife + result = /obj/item/rogueweapon/knife/stone reqs = list(/obj/item/grown/log/tree/stick = 1, /obj/item/natural/stone = 1) - craftdiff = 0 /datum/crafting_recipe/roguetown/stonespear name = "stone spear" - result = /obj/item/rogueweapon/spear/stone - reqs = list(/obj/item/rogueweapon/woodstaff = 1, + result = /obj/item/rogueweapon/polearm/spear/stone + reqs = list(/obj/item/rogueweapon/polearm/woodstaff = 1, /obj/item/natural/stone = 1) /datum/crafting_recipe/roguetown/woodclub name = "wood club" result = /obj/item/rogueweapon/mace/woodclub/crafted reqs = list(/obj/item/grown/log/tree/small = 1) - craftdiff = 0 - - -/datum/crafting_recipe/roguetown/rproesthetic - name = "wood arm (L)" - result = list(/obj/item/bodypart/l_arm/rproesthetic) - reqs = list(/obj/item/grown/log/tree/small = 1, - /obj/item/roguegear = 1) - skillcraft = /datum/skill/craft/carpentry - craftdiff = 3 - -/datum/crafting_recipe/roguetown/rproesthetic - name = "wood arm (R)" - result = list(/obj/item/bodypart/r_arm/rproesthetic) - reqs = list(/obj/item/grown/log/tree/small = 1, - /obj/item/roguegear = 1) - skillcraft = /datum/skill/craft/carpentry - craftdiff = 3 /obj/item/rogueweapon/mace/woodclub/crafted sellprice = 8 -/datum/crafting_recipe/roguetown/woodstaff - name = "wood staff" - result = list(/obj/item/rogueweapon/woodstaff, - /obj/item/rogueweapon/woodstaff, - /obj/item/rogueweapon/woodstaff) - reqs = list(/obj/item/grown/log/tree = 1) - -/datum/crafting_recipe/roguetown/woodsword - name = "wood sword" - result = list(/obj/item/rogueweapon/mace/wsword, - /obj/item/rogueweapon/mace/wsword) - reqs = list(/obj/item/grown/log/tree/small = 1, - /obj/item/natural/fibers = 1) - craftdiff = 1 - -/datum/crafting_recipe/roguetown/woodshield - name = "wooden shield" - result = /obj/item/rogueweapon/shield/wood/crafted +/datum/crafting_recipe/roguetown/rod + name = "fishing rod" + result = /obj/item/fishingrod/crafted reqs = list(/obj/item/grown/log/tree/small = 1, - /obj/item/natural/hide = 1) - skillcraft = /datum/skill/craft/carpentry - -/obj/item/rogueweapon/shield/wood/crafted - sellprice = 6 - -/datum/crafting_recipe/roguetown/spoon - name = "wooden spoon" - result = list(/obj/item/kitchen/spoon, - /obj/item/kitchen/spoon) - reqs = list(/obj/item/grown/log/tree/small = 1) - -/datum/crafting_recipe/roguetown/rollingpin - name = "wooden rollingpin" - result = /obj/item/kitchen/rollingpin - reqs = list(/obj/item/grown/log/tree/small = 1) - -/datum/crafting_recipe/roguetown/woodbucket - name = "wooden bucket" - result = /obj/item/reagent_containers/glass/bucket/wooden - reqs = list(/obj/item/grown/log/tree/small = 1) - -/datum/crafting_recipe/roguetown/woodbowl - name = "wooden bowl" - result = list(/obj/item/reagent_containers/glass/bowl, - /obj/item/reagent_containers/glass/bowl) - reqs = list(/obj/item/grown/log/tree/small = 1) - - -/datum/crafting_recipe/roguetown/woodcup - name = "wooden cups" - result = list(/obj/item/reagent_containers/glass/cup/wooden/crafted, - /obj/item/reagent_containers/glass/cup/wooden/crafted, - /obj/item/reagent_containers/glass/cup/wooden/crafted) - reqs = list(/obj/item/grown/log/tree/small = 1) - -/obj/item/reagent_containers/glass/cup/wooden/crafted - sellprice = 3 - -/datum/crafting_recipe/roguetown/mortar - name = "stone mortar" - result = /obj/item/reagent_containers/glass/mortar - reqs = list(/obj/item/natural/stone = 1) - tools = list(/obj/item/rogueweapon/huntingknife) - craftdiff = 3 - subtype_reqs = TRUE - -/datum/crafting_recipe/roguetown/alchmortar - name = "alchemical mortar" - result = /obj/item/mortar - reqs = list(/obj/item/natural/stone = 3) - tools = list(/obj/item/rogueweapon/huntingknife) - verbage = "crafts" - skillcraft = /datum/skill/craft/masonry - -/datum/crafting_recipe/roguetown/pestle - name = "pestle" - result = /obj/item/pestle - reqs = list(/obj/item/natural/stone = 2) - tools = list(/obj/item/rogueweapon/huntingknife) - verbage = "crafts" - skillcraft = /datum/skill/craft/masonry - -/datum/crafting_recipe/roguetown/bag - name = "bag" - result = /obj/item/storage/roguebag/crafted - reqs = list(/obj/item/natural/fibers = 1, - /obj/item/natural/cloth = 1) - tools = list(/obj/item/needle) - skillcraft = /datum/skill/misc/sewing + /obj/item/natural/fibers = 2) + tools = list(/obj/item/rogueweapon/knife) + craftdiff = 0 -/obj/item/storage/roguebag/crafted - sellprice = 4 +/obj/item/fishingrod/crafted + sellprice = 8 /datum/crafting_recipe/roguetown/bait name = "bait" result = /obj/item/bait reqs = list(/obj/item/storage/roguebag = 1, /obj/item/reagent_containers/food/snacks/produce/wheat = 2) - req_table = FALSE subtype_reqs = TRUE /datum/crafting_recipe/roguetown/sbaita @@ -246,15 +214,13 @@ result = /obj/item/bait/sweet reqs = list(/obj/item/storage/roguebag = 1, /obj/item/reagent_containers/food/snacks/produce/apple = 2) - req_table = FALSE subtype_reqs = TRUE /datum/crafting_recipe/roguetown/sbait name = "sweetbait (b)" result = /obj/item/bait/sweet reqs = list(/obj/item/storage/roguebag = 1, - /obj/item/reagent_containers/food/snacks/produce/berries/rogue = 2) - req_table = FALSE + /obj/item/reagent_containers/food/snacks/produce/jacksberry = 2) subtype_reqs = TRUE /datum/crafting_recipe/roguetown/bloodbait @@ -262,37 +228,33 @@ result = /obj/item/bait/bloody reqs = list(/obj/item/storage/roguebag = 1, /obj/item/reagent_containers/food/snacks/rogue/meat = 2) - req_table = FALSE subtype_reqs = TRUE -/datum/crafting_recipe/roguetown/woodplatter - name = "wood platters (x2)" - result = list(/obj/item/cooking/platter, - /obj/item/cooking/platter) - reqs = list(/obj/item/grown/log/tree/small = 1) - -/datum/crafting_recipe/roguetown/pipe - name = "wood pipe" - result = /obj/item/clothing/mask/cigarette/pipe/crafted - reqs = list(/obj/item/grown/log/tree/stick = 2) +/datum/crafting_recipe/roguetown/earnecklace + name = "ear necklace" + result = /obj/item/clothing/neck/roguetown/menears + reqs = list(/obj/item/organ/ears = 4, + /obj/item/rope = 1) -/obj/item/clothing/mask/cigarette/pipe/crafted - sellprice = 6 +/datum/crafting_recipe/roguetown/elfearnecklace + name = "elf ear necklace" + result = /obj/item/clothing/neck/roguetown/elfears + reqs = list(/obj/item/organ/ears = 4, + /obj/item/rope = 1) -/datum/crafting_recipe/roguetown/rod - name = "fishing rod" - result = /obj/item/fishingrod/crafted - reqs = list(/obj/item/grown/log/tree/small = 1, - /obj/item/natural/fibers = 2) +/*========= SKILL LEVEL: 1 REQUIRED ==========*/ -/obj/item/fishingrod/crafted - sellprice = 8 +/datum/crafting_recipe/roguetown/candle + name = "candle" + result = /obj/item/candle/yellow + reqs = list(/obj/item/reagent_containers/food/snacks/fat = 1) + craftdiff = 1 -/datum/crafting_recipe/roguetown/woodspade - name = "wood spade" - result = /obj/item/rogueweapon/shovel/small - reqs = list(/obj/item/grown/log/tree/small = 1, - /obj/item/grown/log/tree/stick = 1) +/datum/crafting_recipe/roguetown/basket_wicker + name = "basket (wicker)" + result = /obj/structure/closet/crate/chest/wicker + reqs = list(/obj/item/natural/fibers = 4) + craftdiff = 1 /datum/crafting_recipe/roguetown/broom name = "broom" @@ -301,23 +263,100 @@ /obj/item/grown/log/tree/stick = 4) craftdiff = 1 -/obj/item/rogueweapon/shovel/small/crafted - sellprice = 5 +/datum/crafting_recipe/roguetown/wickercloak + name = "wickercloak" + result = /obj/item/clothing/cloak/wickercloak + reqs = list(/obj/item/natural/dirtclod = 1, + /obj/item/grown/log/tree/stick = 5, + /obj/item/natural/fibers = 3) + craftdiff = 1 -/datum/crafting_recipe/roguetown/basket_wicker - name = "basket (wicker)" - result = /obj/structure/closet/crate/chest/wicker - reqs = list(/obj/item/natural/fibers = 4) +/datum/crafting_recipe/roguetown/bogcowl + name = "bogcowl" + result = /obj/item/clothing/neck/roguetown/bogcowl + reqs = list(/obj/item/natural/dirtclod = 1, + /obj/item/grown/log/tree/stick = 3, + /obj/item/natural/fibers = 2) craftdiff = 1 -/datum/crafting_recipe/roguetown/book_crafting_kit - name = "book crafting kit" - result = /obj/item/book_crafting_kit - reqs = list( - /obj/item/natural/hide = 2, - /obj/item/natural/cloth = 1) - tools = list(/obj/item/needle = 1) - req_table = TRUE + +/datum/crafting_recipe/roguetown/stoneblocprimitive // replace with intent coded strike at some point TO DO + name = "crude stone block" + result = list(/obj/item/natural/stoneblock) + reqs = list(/obj/item/natural/stone = 1) + tools = list(/obj/item/natural/stone) + skillcraft = /datum/skill/craft/masonry + craftdiff = 1 + time = 10 SECONDS + verbage = "bash" + verbage_tp = "bashes" + +/datum/crafting_recipe/roguetown/stonesaw + name = "crude saw" + result = /obj/item/rogueweapon/handsaw/crude + reqs = list(/obj/item/natural/stone = 2, /obj/item/grown/log/tree/stick = 1) + tools = /obj/item/rogueweapon/knife + craftdiff = 1 + verbage = "hew" + verbage_tp = "hews" + craftdiff = 1 + +/*========= MISCELLANY ==========*/ + +/datum/crafting_recipe/roguetown/pestle + name = "pestle (stone)" + result = /obj/item/pestle + reqs = list(/obj/item/natural/stone = 1) + tools = list(/obj/item/rogueweapon/chisel) + verbage = "crafts" + skillcraft = /datum/skill/craft/masonry + +/datum/crafting_recipe/roguetown/pestle_bone + name = "pestle (bone)" + result = /obj/item/pestle + reqs = list(/obj/item/alch/bone = 1) + tools = /obj/item/rogueweapon/knife + subtype_reqs = TRUE + verbage = "crafts" + skillcraft = /datum/skill/craft/crafting + +/* +/datum/crafting_recipe/roguetown/mortar + name = "mortar (stone)" + result = /obj/item/reagent_containers/glass/mortar + reqs = list(/obj/item/natural/stone = 2) + tools = list(/obj/item/rogueweapon/chisel) + craftdiff = 1 + skillcraft = /datum/skill/craft/masonry + +/datum/crafting_recipe/roguetown/mortar + name = "mortar (bone)" + result = /obj/item/reagent_containers/glass/mortar + reqs = list(/obj/item/alch/bone = 2) + tools = /obj/item/rogueweapon/knife + subtype_reqs = TRUE + verbage = "crafts" + skillcraft = /datum/skill/craft/crafting +*/ + +/datum/crafting_recipe/roguetown/alchmortar + name = "alchemical mortar (stone)" + result = /obj/item/mortar + reqs = list(/obj/item/natural/stone = 3) + tools = list(/obj/item/rogueweapon/chisel) + verbage = "crafts" + skillcraft = /datum/skill/craft/masonry + subtype_reqs = TRUE // should allow you to use any kind of knoife + +/datum/crafting_recipe/roguetown/alchmortar + name = "alchemical mortar (bone)" + result = /obj/item/mortar + reqs = list(/obj/item/alch/bone = 3) + tools = /obj/item/rogueweapon/knife + subtype_reqs = TRUE + verbage = "crafts" + skillcraft = /datum/skill/craft/crafting + /datum/crafting_recipe/roguetown/mantrap name = "mantrap" @@ -332,6 +371,8 @@ verbage = "put together" verbage_tp = "puts together" +/*========= AMMO CRAFTING ==========*/ + /datum/crafting_recipe/roguetown/stonearrow name = "stone arrow" result = /obj/item/ammo_casing/caseless/rogue/arrow/stone @@ -343,8 +384,8 @@ name = "poison arrow" result = /obj/item/ammo_casing/caseless/rogue/arrow/poison reqs = list(/obj/item/ammo_casing/caseless/rogue/arrow = 1, - /obj/item/reagent_containers/food/snacks/produce/berries/rogue/poison = 1) - craftdiff = 0 + /obj/item/reagent_containers/food/snacks/produce/jacksberry/poison = 1) + craftdiff = 1 /datum/crafting_recipe/roguetown/poisonarrow/alt reqs = list(/obj/item/ammo_casing/caseless/rogue/arrow = 1, @@ -356,20 +397,12 @@ reqs = list(/obj/item/ammo_casing/caseless/rogue/arrow = 1, /datum/reagent/strongpoison = 5) -/datum/crafting_recipe/roguetown/pyroarrow - name = "pyroclastic arrow" - result = /obj/item/ammo_casing/caseless/rogue/arrow/pyro - reqs = list(/obj/item/ammo_casing/caseless/rogue/arrow = 1, - /obj/item/reagent_containers/food/snacks/produce/fyritius = 1) - craftdiff = 1 - skillcraft = /datum/skill/craft/engineering - /datum/crafting_recipe/roguetown/poisonbolt name = "poison bolt" result = /obj/item/ammo_casing/caseless/rogue/bolt/poison reqs = list(/obj/item/ammo_casing/caseless/rogue/bolt = 1, - /obj/item/reagent_containers/food/snacks/produce/berries/rogue/poison = 1) - craftdiff = 0 + /obj/item/reagent_containers/food/snacks/produce/jacksberry/poison = 1) + craftdiff = 1 /datum/crafting_recipe/roguetown/poisonbolt/alt reqs = list(/obj/item/ammo_casing/caseless/rogue/bolt = 1, @@ -381,13 +414,23 @@ reqs = list(/obj/item/ammo_casing/caseless/rogue/bolt = 1, /datum/reagent/strongpoison = 5) -/datum/crafting_recipe/roguetown/bomb - name = "bomb" - result = /obj/item/bomb/homemade - reqs = list(/obj/item/natural/cloth = 1, - /obj/item/reagent_containers/food/snacks/produce/fyritius = 1, - /obj/item/reagent_containers/glass/bottle = 1) - craftdiff = 2 +/*========= ENGINEEERING CRAFTING ==========*/ + +/datum/crafting_recipe/roguetown/flint + name = "flint" + result = /obj/item/flint + reqs = list( + /obj/item/natural/stone = 1, + /obj/item/ingot/iron = 1) + skillcraft = /datum/skill/craft/engineering + craftdiff = 0 // Something to practice engineering with. + +/datum/crafting_recipe/roguetown/pyroarrow + name = "pyroclastic arrow" + result = /obj/item/ammo_casing/caseless/rogue/arrow/pyro + reqs = list(/obj/item/ammo_casing/caseless/rogue/arrow = 1, + /obj/item/reagent_containers/food/snacks/produce/fyritius = 1) + craftdiff = 1 skillcraft = /datum/skill/craft/engineering /datum/crafting_recipe/roguetown/pyrobolt @@ -398,40 +441,16 @@ craftdiff = 1 skillcraft = /datum/skill/craft/engineering -/datum/crafting_recipe/roguetown/recurve - name = "recurve bow" - result = list(/obj/item/gun/ballistic/revolver/grenadelauncher/bow/recurve) - reqs = list(/obj/item/grown/log/tree/small = 1, - /obj/item/natural/fibers = 4) - craftdiff = 1 - skillcraft = /datum/skill/craft/carpentry - -/datum/crafting_recipe/roguetown/handmadebow - name = "wooden bow" - result = list(/obj/item/gun/ballistic/revolver/grenadelauncher/bow) - reqs = list(/obj/item/grown/log/tree/small = 1, - /obj/item/natural/fibers = 6) +/datum/crafting_recipe/roguetown/bomb + name = "bomb" + result = /obj/item/bomb/homemade + reqs = list(/obj/item/natural/cloth = 1, + /obj/item/reagent_containers/food/snacks/produce/fyritius = 1, + /obj/item/reagent_containers/glass/bottle = 1) craftdiff = 2 - skillcraft = /datum/skill/craft/carpentry - -/datum/crafting_recipe/roguetown/longbow - name = "longbow" - result = list(/obj/item/gun/ballistic/revolver/grenadelauncher/bow/long) - reqs = list(/obj/item/grown/log/tree/small = 1, - /obj/item/natural/fibers = 8, - /obj/item/reagent_containers/food/snacks/fat) - skillcraft = /datum/skill/craft/carpentry - structurecraft = /obj/machinery/light/rogue/campfire - craftdiff = 3 - -/datum/crafting_recipe/roguetown/flint - name = "flint" - result = /obj/item/flint - reqs = list( - /obj/item/natural/stone = 1, - /obj/item/ingot/iron = 1) skillcraft = /datum/skill/craft/engineering - craftdiff = 0 // Something to practice engineering with. + +/*========= LITERATURE CRAFTING ==========*/ /datum/crafting_recipe/roguetown/paperscroll name = "parchment scroll x5" @@ -442,7 +461,7 @@ /obj/item/paper/scroll) reqs = list(/obj/item/grown/log/tree/small = 1, /datum/reagent/water = 50) - tools = list(/obj/item/rogueweapon/huntingknife) + tools = list(/obj/item/rogueweapon/knife/hunting) structurecraft = /obj/structure/fluff/dryingrack craftdiff = 1 @@ -476,98 +495,3 @@ name = "master's guide to literature" result = list(/obj/item/literary/master) craftdiff = 6 - -/datum/crafting_recipe/roguetown/quarterstaff - name = "wooden quarterstaff" - result = list(/obj/item/rogueweapon/woodstaff/quarterstaff, - /obj/item/rogueweapon/woodstaff/quarterstaff) - reqs = list(/obj/item/grown/log/tree = 1) - req_table = TRUE - tools = list(/obj/item/rogueweapon/huntingknife) - skillcraft = /datum/skill/craft/carpentry - -/datum/crafting_recipe/roguetown/steelstaff - name = "steel quarterstaff" - skillcraft = /datum/skill/craft/carpentry - reqs = list(/obj/item/rogueweapon/woodstaff/quarterstaff = 1, /obj/item/ingot/steel = 2) - result = list(/obj/item/rogueweapon/woodstaff/quarterstaff/steel) - craftdiff = 3 - -/datum/crafting_recipe/roguetown/ironstaff - name = "iron quarterstaff" - skillcraft = /datum/skill/craft/carpentry - reqs = list(/obj/item/rogueweapon/woodstaff/quarterstaff = 1, /obj/item/ingot/iron = 1) - tools = list(/obj/item/rogueweapon/hammer) - result = list(/obj/item/rogueweapon/woodstaff/quarterstaff/iron) - craftdiff = 2 - -/datum/crafting_recipe/roguetown/woodflail - name = "wooden flail x2" - skillcraft = /datum/skill/craft/carpentry - reqs = list(/obj/item/rope/chain = 1, - /obj/item/grown/log/tree/stick = 1, /obj/item/grown/log/tree/small = 1) - tools = list(/obj/item/rogueweapon/hammer) - req_table = TRUE - result = list(/obj/item/rogueweapon/flail/towner, /obj/item/rogueweapon/flail/towner) - craftdiff = 2 - -/datum/crafting_recipe/roguetown/militia_flail - name = "militia flail" - skillcraft = /datum/skill/craft/carpentry - reqs = list(/obj/item/rogueweapon/flail/towner = 1, /obj/item/ingot/iron = 1) - tools = list(/obj/item/rogueweapon/hammer) - req_table = TRUE - result = list(/obj/item/rogueweapon/flail/militia) - craftdiff = 3 - -/datum/crafting_recipe/roguetown/woodengreatflail - name = "great wooden flail" - skillcraft = /datum/skill/craft/carpentry - reqs = list(/obj/item/rope = 1, - /obj/item/grown/log/tree/stick = 1, /obj/item/grown/log/tree/small = 1) - tools = list(/obj/item/rogueweapon/hammer) - req_table = TRUE - result = list(/obj/item/rogueweapon/thresher) - craftdiff = 2 - -/datum/crafting_recipe/roguetown/bigflail - name = "great militia flail" - skillcraft = /datum/skill/craft/carpentry - reqs = list(/obj/item/rope/chain = 1, - /obj/item/rogueweapon/thresher = 1, /obj/item/ingot/iron = 1) - tools = list(/obj/item/rogueweapon/hammer) - req_table = TRUE - result = list(/obj/item/rogueweapon/thresher/military) - craftdiff = 3 - - -/datum/crafting_recipe/roguetown/ironcudgel - name = "peasant cudgels x2" - skillcraft = /datum/skill/craft/carpentry - reqs = list(/obj/item/grown/log/tree/small = 1, /obj/item/ingot/iron = 1) - tools = list(/obj/item/rogueweapon/hammer) - req_table = TRUE - result = list(/obj/item/rogueweapon/mace/cudgel/carpenter, /obj/item/rogueweapon/mace/cudgel/carpenter) - craftdiff = 3 - -/datum/crafting_recipe/roguetown/earnecklace - name = "ear necklace" - result = /obj/item/clothing/neck/roguetown/menears - reqs = list(/obj/item/organ/ears = 4, - /obj/item/rope = 1) - craftdiff = 0 - -/datum/crafting_recipe/roguetown/elfearnecklace - name = "elf ear necklace" - result = /obj/item/clothing/neck/roguetown/elfears - reqs = list(/obj/item/organ/ears = 4, - /obj/item/rope = 1) - craftdiff = 0 - -/datum/crafting_recipe/roguetown/bogcowl - name = "bogcowl" - result = /obj/item/clothing/neck/roguetown/bogcowl - reqs = list(/obj/item/natural/dirtclod = 1, - /obj/item/grown/log/tree/stick = 3, - /obj/item/natural/fibers = 2) - craftdiff = 0 diff --git a/code/modules/roguetown/roguecrafting/leather.dm b/code/modules/roguetown/roguecrafting/leather.dm index 644a455972..69c9b08273 100644 --- a/code/modules/roguetown/roguecrafting/leather.dm +++ b/code/modules/roguetown/roguecrafting/leather.dm @@ -1,4 +1,7 @@ -// LEATHER AND FUR CRAFTING RECIPES +/* SKINCRAFT - skincraft skill +==========================================================*/ +// The only ingridients these recipes can require is HIDE and FUR +// They all require a needle and a drying rack /datum/crafting_recipe/roguetown/leather tools = list(/obj/item/needle) @@ -9,23 +12,27 @@ reqs = list(/obj/item/natural/hide = 1) -/*.............. recipes requiring no skill..............*/ + +/*========= NO SKILL LEVEL REQUIRED ==========*/ +/datum/crafting_recipe/roguetown/leather/belt + name = "leather belt" + result = list(/obj/item/storage/belt/rogue/leather) /datum/crafting_recipe/roguetown/leather/pouch name = "leather pouch" - result = list(/obj/item/storage/belt/rogue/pouch, - /obj/item/storage/belt/rogue/pouch) - reqs = list(/obj/item/natural/hide = 1, - /obj/item/natural/fibers = 1) - sellprice = 6 + result = list(/obj/item/storage/belt/rogue/pouch) /datum/crafting_recipe/roguetown/leather/gloves + name = "leather gloves" + result = /obj/item/clothing/gloves/roguetown/leather name = "leather gloves (x2){ip}" result = list(/obj/item/clothing/gloves/roguetown/leather, /obj/item/clothing/gloves/roguetown/leather) req_antikaizoku = TRUE /datum/crafting_recipe/roguetown/leather/bracers + name = "leather bracers" + result = /obj/item/clothing/wrists/roguetown/bracers/leather name = "leather bracers (x2){ip}" result = list(/obj/item/clothing/wrists/roguetown/bracers/leather, /obj/item/clothing/wrists/roguetown/bracers/leather) @@ -37,6 +44,8 @@ req_antikaizoku = TRUE /datum/crafting_recipe/roguetown/leather/shoes + name = "leather shoes" + result = /obj/item/clothing/shoes/roguetown/simpleshoes name = "leather shoes (x2){ip}" result = list(/obj/item/clothing/shoes/roguetown/simpleshoes, /obj/item/clothing/shoes/roguetown/simpleshoes,) @@ -60,6 +69,13 @@ req_antikaizoku = TRUE /datum/crafting_recipe/roguetown/leather/hood + name = "leather hood" + result = /obj/item/clothing/head/roguetown/roguehood/brown + +/datum/crafting_recipe/roguetown/leather/papakha + name = "papakha hat" + result = /obj/item/clothing/head/roguetown/papakha + reqs = list(/obj/item/natural/fur = 1) name = "leather hood {ip}" result = /obj/item/clothing/head/roguetown/roguehood req_antikaizoku = TRUE @@ -67,18 +83,16 @@ /datum/crafting_recipe/roguetown/leather/cloak name = "leather cloak" result = /obj/item/clothing/cloak/raincloak/brown - reqs = list(/obj/item/natural/hide = 2) /datum/crafting_recipe/roguetown/leather/cloakfur name = "fur cloak" result = /obj/item/clothing/cloak/raincloak/furcloak - reqs = list(/obj/item/natural/hide = 2, - /obj/item/natural/fur = 1) + reqs = list(/obj/item/natural/fur = 1) /datum/crafting_recipe/roguetown/leather/quiver name = "quiver" result = /obj/item/quiver - reqs = list(/obj/item/natural/hide = 2, /obj/item/natural/fibers = 2) + reqs = list(/obj/item/natural/hide = 2) /datum/crafting_recipe/roguetown/leather/tribal_cloak name = "tribal pelt" @@ -88,12 +102,32 @@ name = "tribal shoes" result = list(/obj/item/clothing/shoes/roguetown/tribal) +/datum/crafting_recipe/roguetown/leather/furlinedanklets + name = "fur lined anklets" + reqs = list(/obj/item/natural/fur = 1) + result = /obj/item/clothing/shoes/roguetown/boots/furlinedanklets +/datum/crafting_recipe/roguetown/leather/brimmedhat + name = "brimmed hat" + result = /obj/item/clothing/head/roguetown/brimmed -/*.............. recipes requiring skill 1 ..............*/ +/datum/crafting_recipe/roguetown/leather/waterskin + name = "waterskin" + result = /obj/item/reagent_containers/glass/bottle/waterskin + +/datum/crafting_recipe/roguetown/leather/leatherjacket + name = "leather jacket" + result = list(/obj/item/clothing/suit/roguetown/armor/leather/jacket/toggle) + reqs = list(/obj/item/natural/hide = 2) + +/datum/crafting_recipe/roguetown/leather/pants + name = "leather pants" + result = /obj/item/clothing/under/roguetown/trou/leather + reqs = list(/obj/item/natural/hide = 2) +/*========= SKILL LEVEL: 1 REQUIRED ==========*/ /datum/crafting_recipe/roguetown/leather/saddle - name = "saddle" + name = "leather saddle" result = /obj/item/natural/saddle reqs = list(/obj/item/natural/hide = 2) craftdiff = 1 @@ -101,25 +135,17 @@ /datum/crafting_recipe/roguetown/leather/satchel name = "leather satchel" result = /obj/item/storage/backpack/rogue/satchel - reqs = list(/obj/item/natural/hide = 2, - /obj/item/natural/fibers = 1) + reqs = list(/obj/item/natural/hide = 3) craftdiff = 1 /datum/crafting_recipe/roguetown/leather/meatbag name = "game satchel" result = /obj/item/storage/meatbag - reqs = list(/obj/item/natural/hide = 1, - /obj/item/natural/cloth = 1) - craftdiff = 1 - -/datum/crafting_recipe/roguetown/leather/waterskin - name = "waterskin" - result = /obj/item/reagent_containers/glass/bottle/waterskin - reqs = list(/obj/item/natural/hide = 1, - /obj/item/natural/fibers = 2) + reqs = list(/obj/item/natural/hide = 3) craftdiff = 1 /datum/crafting_recipe/roguetown/leather/heavygloves + name = "fur-lined gloves" name = "heavy leather gloves {ip}" result = /obj/item/clothing/gloves/roguetown/angle reqs = list(/obj/item/natural/hide = 1, @@ -141,30 +167,30 @@ craftdiff = 1 req_antikaizoku = TRUE -/datum/crafting_recipe/roguetown/leather/papakha - name = "papakha hat" - result = /obj/item/clothing/head/roguetown/papakha - reqs = list(/obj/item/natural/fur = 1, - /obj/item/natural/fibers = 2) - craftdiff = 1 - /datum/crafting_recipe/roguetown/leather/whip name = "leather whip" result = /obj/item/rogueweapon/whip reqs = list(/obj/item/natural/hide = 2) craftdiff = 1 +/datum/crafting_recipe/roguetown/leather/furlinedboots + name = "fur lined boots" + result = /obj/item/clothing/shoes/roguetown/boots/furlinedboots + reqs = list(/obj/item/natural/hide = 2, + /obj/item/natural/fur = 2) + craftdiff = 1 -/*.............. recipes requiring skill 2 ..............*/ + +/*========= SKILL LEVEL: 2 REQUIRED ==========*/ /datum/crafting_recipe/roguetown/leather/backpack name = "leather backpack" result = /obj/item/storage/backpack/rogue/backpack - reqs = list(/obj/item/natural/hide = 3, - /obj/item/natural/fibers = 2) + reqs = list(/obj/item/natural/hide = 4) craftdiff = 2 /datum/crafting_recipe/roguetown/leather/hidearmor + name = "fur-lined armor" name = "hide armor {ip}" result = /obj/item/clothing/suit/roguetown/armor/leather/hide reqs = list(/obj/item/natural/hide = 2, @@ -195,11 +221,12 @@ /datum/crafting_recipe/roguetown/leather/volfmantle name = "volf mantle" result = /obj/item/clothing/cloak/volfmantle - reqs = list(/obj/item/natural/fur/volf = 2, + reqs = list(/obj/item/natural/fur/volf = 1, /obj/item/natural/head/volf = 1) craftdiff = 2 + ////////////////////////////////////////// // Fogislander Cultured Crafting Area, // ////////////////////////////////////////// diff --git a/code/modules/roguetown/roguecrafting/sewing.dm b/code/modules/roguetown/roguecrafting/sewing.dm index 1c24d8cd2d..306ba4807e 100644 --- a/code/modules/roguetown/roguecrafting/sewing.dm +++ b/code/modules/roguetown/roguecrafting/sewing.dm @@ -1,10 +1,26 @@ +/* SEWING - sewing skill +==========================================================*/ +// The only ingridients these recipes can require is CLOTH and FIBRE +// They all require a needle + /datum/crafting_recipe/roguetown/sewing tools = list(/obj/item/needle) skillcraft = /datum/skill/misc/sewing subtype_reqs = TRUE // so you can use any subtype of fur craftdiff = 0 + reqs = list(/obj/item/natural/fibers = 1, /obj/item/natural/cloth = 2) + -/*.............. recipes requiring no skill..............*/ +/*========= NO SKILL LEVEL REQUIRED ==========*/ + +/datum/crafting_recipe/roguetown/sewing/bag + name = "bag" + result = /obj/item/storage/roguebag/crafted + reqs = list(/obj/item/natural/fibers = 1, + /obj/item/natural/cloth = 1) + +/obj/item/storage/roguebag/crafted + sellprice = 4 /datum/crafting_recipe/roguetown/sewing/rags name = "rags {ip}" @@ -13,10 +29,8 @@ req_antikaizoku = TRUE /datum/crafting_recipe/roguetown/sewing/burial_shroud - name = "winding sheet" + name = "cloth winding sheet" result = list(/obj/item/burial_shroud) - reqs = list(/obj/item/natural/cloth = 2) - craftdiff = 1 /datum/crafting_recipe/roguetown/sewing/loincloth name = "loincloth" @@ -45,6 +59,8 @@ req_antikaizoku = TRUE /datum/crafting_recipe/roguetown/sewing/shortshirt + name = "cloth short shirt" + result = list(/obj/item/clothing/suit/roguetown/shirt/shortshirt/uncolored) name = "cloth short shirt {ip}" result = list(/obj/item/clothing/suit/roguetown/shirt/shortshirt) reqs = list(/obj/item/natural/cloth = 1, @@ -52,6 +68,8 @@ req_antikaizoku = TRUE /datum/crafting_recipe/roguetown/sewing/clothshirt + name = "cloth shirt" + result = list(/obj/item/clothing/suit/roguetown/shirt/undershirt/uncolored) name = "cloth shirt {ip}" result = list(/obj/item/clothing/suit/roguetown/shirt/undershirt) reqs = list(/obj/item/natural/cloth = 2, @@ -66,6 +84,8 @@ req_antikaizoku = TRUE /datum/crafting_recipe/roguetown/sewing/clothtights + name = "cloth tights" + result = list(/obj/item/clothing/under/roguetown/tights/uncolored) name = "cloth tights {ip}" result = list(/obj/item/clothing/under/roguetown/tights) reqs = list(/obj/item/natural/cloth = 2, @@ -73,8 +93,9 @@ req_antikaizoku = TRUE /datum/crafting_recipe/roguetown/sewing/headband - name = "headband" + name = "cloth headband" result = list(/obj/item/clothing/head/roguetown/headband) + reqs = list(/obj/item/natural/cloth = 1) reqs = list(/obj/item/natural/cloth = 2, /obj/item/natural/fibers = 1) @@ -87,40 +108,61 @@ /datum/crafting_recipe/roguetown/sewing/knitcap name = "knit cap {ip}" result = list(/obj/item/clothing/head/roguetown/knitcap) - reqs = list(/obj/item/natural/cloth = 2, + reqs = list(/obj/item/natural/cloth = 1, /obj/item/natural/fibers = 1) req_antikaizoku = TRUE /datum/crafting_recipe/roguetown/sewing/cmask name = "cloth mask {ip}" result = list(/obj/item/clothing/mask/rogue/shepherd/clothmask) + reqs = list(/obj/item/natural/cloth = 1) + +/datum/crafting_recipe/roguetown/sewing/ragmask + name = "rag mask" + result = list(/obj/item/clothing/mask/rogue/shepherd/rag) + reqs = list(/obj/item/natural/cloth = 1) + +/datum/crafting_recipe/roguetown/sewing/linedanklet + name = "cloth anklet" + result = list(/obj/item/clothing/shoes/roguetown/boots/clothlinedanklets) + +/datum/crafting_recipe/roguetown/sewing/strawhat + name = "crude straw hat" + result = list(/obj/item/clothing/head/roguetown/strawhat) + reqs = list(/obj/item/natural/fibers = 3) + +/datum/crafting_recipe/roguetown/sewing/fisherhat + name = "straw fisher hat" + result = list(/obj/item/clothing/head/roguetown/fisherhat) + reqs = list(/obj/item/natural/fibers = 3) reqs = list(/obj/item/natural/fibers = 1, /obj/item/natural/cloth = 1) tools = list(/obj/item/needle) req_antikaizoku = TRUE /datum/crafting_recipe/roguetown/sewing/zigbox - name = "zigbox" + name = "paper zigbox" result = list(/obj/item/storage/fancy/cigarettes/zig/empty) - reqs = list(/obj/item/paper = 1, - /obj/item/natural/fibers = 1) - + reqs = list(/obj/item/paper = 1) -/*.............. recipes requiring skill 1 ..............*/ +/datum/crafting_recipe/roguetown/sewing/sack + name = "sack hood" + result = list(/obj/item/clothing/head/roguetown/menacing) + reqs = list(/obj/item/storage/roguebag) /datum/crafting_recipe/roguetown/sewing/Reyepatch name = "right eye patch" result = list(/obj/item/clothing/mask/rogue/eyepatch) - reqs = list(/obj/item/natural/cloth = 1, - /obj/item/natural/fibers = 1) - craftdiff = 1 /datum/crafting_recipe/roguetown/sewing/Leyepatch name = "left eye patch" result = list(/obj/item/clothing/mask/rogue/eyepatch/left) - reqs = list(/obj/item/natural/cloth = 1, - /obj/item/natural/fibers = 1) - craftdiff = 1 + +/*========= SKILL LEVEL: 1 REQUIRED ==========*/ + +/datum/crafting_recipe/roguetown/sewing/stripedtunic + name = "striped tunic" + result = list(/obj/item/clothing/suit/roguetown/armor/gambeson/light/striped) /datum/crafting_recipe/roguetown/sewing/fisherhat name = "straw fisher hat {ip}" result = list(/obj/item/clothing/head/roguetown/fisherhat) @@ -137,13 +179,14 @@ /datum/crafting_recipe/roguetown/sewing/pcoif name = "cloth coif" result = list(/obj/item/clothing/neck/roguetown/coif/cloth) - reqs = list(/obj/item/natural/fibers = 1, /obj/item/natural/cloth = 2) + reqs = list(/obj/item/natural/cloth = 2, + /obj/item/natural/fibers = 1) craftdiff = 1 /datum/crafting_recipe/roguetown/sewing/jupon name = "jupon {ip}" result = list(/obj/item/clothing/cloak/stabard/surcoat) - reqs = list(/obj/item/natural/cloth = 4, + reqs = list(/obj/item/natural/cloth = 3, /obj/item/natural/fibers = 1) craftdiff = 1 req_antikaizoku = TRUE @@ -151,7 +194,7 @@ /datum/crafting_recipe/roguetown/sewing/clothtrou name = "cloth trousers {ip}" result = list(/obj/item/clothing/under/roguetown/trou) - reqs = list(/obj/item/natural/cloth = 4, + reqs = list(/obj/item/natural/cloth = 2, /obj/item/natural/fibers = 1) craftdiff = 1 req_antikaizoku = TRUE @@ -178,8 +221,15 @@ /obj/item/natural/fibers = 1) craftdiff = 1 +/datum/crafting_recipe/roguetown/sewing/bedsheet + name = "bedsheet" + result = list(/obj/item/bedsheet/rogue/cloth) + reqs = list(/obj/item/natural/cloth = 2, + /obj/item/natural/fibers = 1) + craftdiff = 1 -/*.............. recipes requiring skill 2 ..............*/ + +/*========= SKILL LEVEL: 2 REQUIRED ==========*/ /datum/crafting_recipe/roguetown/sewing/gambeson name = "gambeson {ip}" @@ -206,13 +256,6 @@ craftdiff = 2 req_antikaizoku = TRUE -/datum/crafting_recipe/roguetown/sewing/bedsheet - name = "bedsheet" - result = list(/obj/item/bedsheet/rogue/cloth) - reqs = list(/obj/item/natural/cloth = 2, - /obj/item/natural/fibers = 1) - craftdiff = 2 - /datum/crafting_recipe/roguetown/sewing/bedsheetpelt name = "leather bedsheet" result = list(/obj/item/bedsheet/rogue/pelt) @@ -241,8 +284,42 @@ /obj/item/natural/fibers = 1) craftdiff = 2 +/datum/crafting_recipe/roguetown/sewing/stockings_white + name = "white stockings" + result = list(/obj/item/clothing/under/roguetown/tights/stockings/white) + reqs = list(/obj/item/natural/cloth = 1, + /obj/item/natural/fibers = 1) + craftdiff = 2 -/*.............. recipes requiring skill 3 ..............*/ +/datum/crafting_recipe/roguetown/sewing/stockings_black + name = "black stockings" + result = list(/obj/item/clothing/under/roguetown/tights/stockings/black) + reqs = list(/obj/item/natural/cloth = 1, + /obj/item/natural/fibers = 1) + craftdiff = 2 + +/datum/crafting_recipe/roguetown/sewing/stockings_blue + name = "blue stockings" + result = list(/obj/item/clothing/under/roguetown/tights/stockings/blue) + reqs = list(/obj/item/natural/cloth = 1, + /obj/item/natural/fibers = 1) + craftdiff = 2 + +/datum/crafting_recipe/roguetown/sewing/stockings_red + name = "red stockings" + result = list(/obj/item/clothing/under/roguetown/tights/stockings/red) + reqs = list(/obj/item/natural/cloth = 1, + /obj/item/natural/fibers = 1) + craftdiff = 2 + +/datum/crafting_recipe/roguetown/sewing/stockings_green + name = "green stockings" + result = list(/obj/item/clothing/under/roguetown/tights/stockings/green) + reqs = list(/obj/item/natural/cloth = 1, + /obj/item/natural/fibers = 1) + craftdiff = 2 + +/*========= SKILL LEVEL: 3 REQUIRED ==========*/ /datum/crafting_recipe/roguetown/sewing/robe name = "robes {ip}" @@ -261,16 +338,19 @@ req_antikaizoku = TRUE -/* .............. recipes requiring skill 4 ..............*/ +/*========= SKILL LEVEL: 4 REQUIRED ==========*/ /datum/crafting_recipe/roguetown/sewing/fancyhat name = "fancy hat {ip}" result = list(/obj/item/clothing/head/roguetown/fancyhat) - reqs = list(/obj/item/natural/cloth = 2, - /obj/item/natural/fibers = 1) + reqs = list(/obj/item/natural/fibers = 1, /obj/item/natural/cloth = 2, /obj/item/natural/feather = 1) craftdiff = 4 req_antikaizoku = TRUE +/datum/crafting_recipe/roguetown/sewing/fashionablehat + name = "fashionable hat" + result = /obj/item/clothing/head/roguetown/fashionablehat + reqs = list(/obj/item/natural/fibers = 1, /obj/item/natural/cloth = 2, /obj/item/natural/feather = 1) /datum/crafting_recipe/roguetown/sewing/fancyhat name = "fancy hat {ip}" result = list(/obj/item/clothing/head/roguetown/fancyhat) @@ -279,14 +359,22 @@ craftdiff = 4 req_antikaizoku = TRUE +/datum/crafting_recipe/roguetown/sewing/plumedhat + name = "plumed hat" /datum/crafting_recipe/roguetown/sewing/bardhat name = "bard hat {ip}" result = list(/obj/item/clothing/head/roguetown/bardhat) - reqs = list(/obj/item/natural/cloth = 2, - /obj/item/natural/fibers = 1) + reqs = list(/obj/item/natural/fibers = 1, /obj/item/natural/cloth = 2, /obj/item/natural/feather = 1) craftdiff = 4 req_antikaizoku = TRUE +/*========= ROLE LOCKED RECIPES ==========*/ +/datum/crafting_recipe/roguetown/sewing/tunic + name = "well-made tunic" + result = list(/obj/item/clothing/suit/roguetown/shirt/tunic/ucolored) + reqs = list(/obj/item/natural/cloth = 2) + always_availible = FALSE + craftdiff = 1 /*.............. recipes requiring skill 5 ..............*/ diff --git a/code/modules/roguetown/roguecrafting/structure.dm b/code/modules/roguetown/roguecrafting/structure.dm index 319905379f..eaf4899fd1 100644 --- a/code/modules/roguetown/roguecrafting/structure.dm +++ b/code/modules/roguetown/roguecrafting/structure.dm @@ -1,81 +1,50 @@ /datum/crafting_recipe/roguetown/structure req_table = FALSE + craftdiff = 0 /datum/crafting_recipe/roguetown/structure/TurfCheck(mob/user, turf/T) if(istype(T,/turf/open/transparent/openspace)) return FALSE return ..() -/datum/crafting_recipe/roguetown/structure/handcart - name = "handcart" - result = /obj/structure/handcart - reqs = list(/obj/item/grown/log/tree/small = 3, - /obj/item/rope = 1) - verbage = "carpent" - verbage_tp = "carpents" - craftsound = 'sound/foley/Building-01.ogg' - -/datum/crafting_recipe/roguetown/structure/noose - name = "noose" - result = /obj/structure/noose - reqs = list(/obj/item/rope = 1) - verbage = "tie" - verbage_tp = "ties" - craftsound = 'sound/foley/noose_idle.ogg' - ontile = TRUE - -/datum/crafting_recipe/roguetown/structure/noose/TurfCheck(mob/user, turf/T) - var/turf/checking = get_step_multiz(T, UP) - if(!checking) - return FALSE - if(!isopenturf(checking)) - return FALSE - if(istype(checking,/turf/open/transparent/openspace)) - return FALSE - return TRUE +/*========= CARPENTRY SKILL ==========*/ -/datum/crafting_recipe/roguetown/structure/psycrss - name = "wooden cross" - result = /obj/structure/fluff/psycross/crafted - reqs = list(/obj/item/grown/log/tree/small = 1, - /obj/item/grown/log/tree/stake = 3) +/datum/crafting_recipe/roguetown/structure/stool + name = "wooden stool" + result = /obj/item/chair/stool/bar/rogue/crafted + reqs = list(/obj/item/grown/log/tree/small = 1) + skillcraft = /datum/skill/craft/carpentry verbage = "carpent" verbage_tp = "carpents" craftsound = 'sound/foley/Building-01.ogg' +/obj/item/chair/stool/bar/rogue/crafted + sellprice = 6 -/datum/crafting_recipe/roguetown/structure/pyre - name = "wooden pyre" - result = /obj/machinery/light/rogue/campfire/pyre - reqs = list(/obj/item/grown/log/tree/small = 2, - /obj/item/grown/log/tree/stake = 3) - verbage = "carpent" - verbage_tp = "carpents" - craftsound = 'sound/foley/Building-01.ogg' +/* === SKILL LEVEL 1 === */ -/datum/crafting_recipe/roguetown/structure/door - name = "wooden door" - result = /obj/structure/mineral_door/wood/deadbolt - reqs = list(/obj/item/grown/log/tree/small = 2) +/datum/crafting_recipe/roguetown/structure/chair + name = "wooden chair" + result = /obj/item/chair/rogue/crafted + reqs = list(/obj/item/natural/plank = 2) verbage = "carpent" verbage_tp = "carpents" craftsound = 'sound/foley/Building-01.ogg' skillcraft = /datum/skill/craft/carpentry + craftdiff = 1 -/datum/crafting_recipe/roguetown/structure/barrel - name = "wooden barrel" - result = /obj/structure/fermenting_barrel/crafted - reqs = list(/obj/item/grown/log/tree/small = 1) - verbage = "construct" - verbage_tp = "makes" - craftsound = 'sound/foley/Building-01.ogg' - skillcraft = /datum/skill/craft/carpentry - -/obj/structure/fermenting_barrel/crafted +/obj/item/chair/rogue/crafted sellprice = 6 -/datum/crafting_recipe/roguetown/roguebin +/datum/crafting_recipe/roguetown/structure/composter + name = "composter" + result = /obj/structure/composter + reqs = list(/obj/item/grown/log/tree/small = 1) + time = 2 SECONDS + craftdiff = 1 + +/datum/crafting_recipe/roguetown/roguebin // Bins are easier to craft than barrels for pure convenience. name = "wooden bin" result = /obj/item/roguebin reqs = list(/obj/item/grown/log/tree/small = 2) @@ -83,89 +52,87 @@ verbage_tp = "makes" craftsound = 'sound/foley/Building-01.ogg' skillcraft = /datum/skill/craft/carpentry - craftdiff = 0 + craftdiff = 1 -/datum/crafting_recipe/roguetown/structure/dye_bin - name = "dye bin" - result = /obj/machinery/gear_painter - reqs = list(/obj/item/grown/log/tree/small = 1) - verbage = "construct" +/datum/crafting_recipe/roguetown/structure/table + name = "wooden table" + result = /obj/structure/table/wood/crafted + reqs = list(/obj/item/natural/plank = 2) + verbage = "carpent" verbage_tp = "carpents" craftsound = 'sound/foley/Building-01.ogg' skillcraft = /datum/skill/craft/carpentry - craftdiff = 0 + craftdiff = 1 -/datum/crafting_recipe/roguetown/structure/chair - name = "wooden chair" - result = /obj/item/chair/rogue/crafted +/datum/crafting_recipe/roguetown/structure/wallladder + name = "wall ladder" + result = /obj/structure/wallladder reqs = list(/obj/item/grown/log/tree/small = 1) verbage = "carpent" verbage_tp = "carpents" craftsound = 'sound/foley/Building-01.ogg' skillcraft = /datum/skill/craft/carpentry + wallcraft = TRUE + craftdiff = 1 -/obj/item/chair/rogue/crafted - sellprice = 6 - -/datum/crafting_recipe/roguetown/structure/stool - name = "wooden stool" - result = /obj/item/chair/stool/bar/rogue/crafted +/datum/crafting_recipe/roguetown/structure/sign + name = "custom sign" + result = /obj/structure/fluff/customsign reqs = list(/obj/item/grown/log/tree/small = 1) + verbage = "construct" + verbage_tp = "constructs" + craftsound = 'sound/foley/Building-01.ogg' skillcraft = /datum/skill/craft/carpentry - verbage = "carpent" - verbage_tp = "carpents" + craftdiff = 1 + +/datum/crafting_recipe/roguetown/structure/chest + name = "chest" + result = /obj/structure/closet/crate/chest/crafted + reqs = list(/obj/item/grown/log/tree/small = 1) + verbage = "construct" + verbage_tp = "constructs" craftsound = 'sound/foley/Building-01.ogg' + skillcraft = /datum/skill/craft/carpentry + craftdiff = 1 -/obj/item/chair/stool/bar/rogue/crafted +/obj/structure/closet/crate/chest/crafted + name = "sturdy chest" + icon_state = "chest_neu" + base_icon_state = "chest_neu" + keylock = FALSE sellprice = 6 -/datum/crafting_recipe/roguetown/structure/anvil - name = "anvil" - result = /obj/machinery/anvil - reqs = list(/obj/item/ingot/iron = 1) - - verbage = "build" - verbage_tp = "builds" +/datum/crafting_recipe/roguetown/structure/closet + name = "closet" + result = /obj/structure/closet/crate/roguecloset/crafted + reqs = list(/obj/item/natural/plank = 2) + verbage = "construct" + verbage_tp = "constructs" craftsound = 'sound/foley/Building-01.ogg' + skillcraft = /datum/skill/craft/carpentry + craftdiff = 1 -/datum/crafting_recipe/roguetown/structure/smelter - name = "ore furnace" - result = /obj/machinery/light/rogue/smelter - reqs = list(/obj/item/natural/stone = 4, - /obj/item/rogueore/coal = 1) - verbage = "build" - verbage_tp = "builds" - craftsound = null - -/datum/crafting_recipe/roguetown/structure/greatsmelter - name = "great furnace" - result = /obj/machinery/light/rogue/smelter/great - reqs = list(/obj/item/ingot/iron = 2, - /obj/item/riddleofsteel = 1, - /obj/item/rogueore/coal = 1) - verbage = "build" - verbage_tp = "builds" - craftsound = null - -/datum/crafting_recipe/roguetown/structure/forge - name = "forge" - result = /obj/machinery/light/rogue/forge - reqs = list(/obj/item/natural/stone = 4, - /obj/item/rogueore/coal = 1) - - verbage = "build" - verbage_tp = "builds" - craftsound = null - -/datum/crafting_recipe/roguetown/structure/sharpwheel - name = "sharpening wheel" - result = /obj/structure/fluff/grindwheel - reqs = list(/obj/item/ingot/iron = 1, - /obj/item/natural/stone = 1) +/obj/structure/closet/crate/roguecloset/crafted + sellprice = 6 +/datum/crafting_recipe/roguetown/structure/coffin + name = "wooden coffin" + result = /obj/structure/closet/crate/coffin + reqs = list(/obj/item/natural/plank=3) verbage = "construct" verbage_tp = "constructs" - craftsound = null + skillcraft = /datum/skill/craft/carpentry + craftdiff = 1 + +/datum/crafting_recipe/roguetown/structure/psycrss + name = "wooden cross" + result = /obj/structure/fluff/psycross/crafted + reqs = list(/obj/item/grown/log/tree/small = 1, + /obj/item/grown/log/tree/stake = 3) + verbage = "carpent" + verbage_tp = "carpents" + craftsound = 'sound/foley/Building-01.ogg' + craftdiff = 1 /datum/crafting_recipe/roguetown/structure/loom name = "loom" @@ -177,37 +144,78 @@ verbage = "constructs" craftsound = 'sound/foley/Building-01.ogg' skillcraft = /datum/skill/craft/carpentry + craftdiff = 1 -/* -/datum/crafting_recipe/roguetown/structure/stairs - name = "stairs (up)" - result = /obj/structure/stairs +/datum/crafting_recipe/roguetown/structure/dummy // Easier to craft than display dummies for convenience, and also because a training dummy isn't actually fitting any measurements. You're just smacking it. + name = "training dummy" + result = /obj/structure/fluff/statue/tdummy reqs = list(/obj/item/grown/log/tree/small = 1) + verbage = "construct" + verbage_tp = "constructs" + craftsound = 'sound/foley/Building-01.ogg' + skillcraft = /datum/skill/craft/carpentry + craftdiff = 1 - verbage = "carpents" +/* === SKILL LEVEL 2 === */ + +/datum/crafting_recipe/roguetown/structure/display_stand + name = "display stand" + result = /obj/structure/mannequin + reqs = list(/obj/item/grown/log/tree/small = 1, + /obj/item/grown/log/tree/stick = 3) + verbage = "construct" + verbage_tp = "constructs" craftsound = 'sound/foley/Building-01.ogg' - ontile = TRUE + skillcraft = /datum/skill/craft/carpentry + craftdiff = 2 + +/datum/crafting_recipe/roguetown/structure/mannequin + name = "masculine mannequin" + result = /obj/structure/mannequin/male + reqs = list(/obj/item/grown/log/tree/small = 1, + /obj/item/natural/cloth = 1, + /obj/item/ingot/iron = 1) + verbage = "construct" + verbage_tp = "constructs" + craftsound = 'sound/foley/Building-01.ogg' + skillcraft = /datum/skill/craft/carpentry + craftdiff = 2 + +/datum/crafting_recipe/roguetown/structure/mannequin_f + name = "feminine mannequin" + result = /obj/structure/mannequin/male/female + reqs = list(/obj/item/grown/log/tree/small = 1, + /obj/item/natural/cloth = 1, + /obj/item/ingot/iron = 1) + verbage = "construct" + verbage_tp = "constructs" + craftsound = 'sound/foley/Building-01.ogg' + skillcraft = /datum/skill/craft/carpentry + craftdiff = 2 + +/datum/crafting_recipe/roguetown/structure/handcart + name = "handcart" + result = /obj/structure/handcart + reqs = list(/obj/item/grown/log/tree/small = 3, + /obj/item/rope = 1) + verbage = "carpent" + verbage_tp = "carpents" + craftsound = 'sound/foley/Building-01.ogg' + craftdiff = 2 + +/datum/crafting_recipe/roguetown/structure/barrel + name = "wooden barrel" + result = /obj/structure/fermenting_barrel/crafted + reqs = list(/obj/item/natural/plank=2) + verbage = "construct" + verbage_tp = "makes" + craftsound = 'sound/foley/Building-01.ogg' + skillcraft = /datum/skill/craft/carpentry + craftdiff = 2 + +/obj/structure/fermenting_barrel/crafted + sellprice = 6 -/datum/crafting_recipe/roguetown/structure/stairs/TurfCheck(mob/user, turf/T) - var/turf/checking = get_step_multiz(T, UP) - if(!checking) - return FALSE - if(!istype(checking,/turf/open/transparent/openspace)) - return FALSE - checking = get_step(checking, user.dir) - if(!checking) - return FALSE - if(!isopenturf(checking)) - return FALSE - if(istype(checking,/turf/open/transparent/openspace)) - return FALSE - for(var/obj/structure/S in checking) - if(istype(S, /obj/structure/stairs)) - return FALSE - if(S.density) - return FALSE - return TRUE -*/ /datum/crafting_recipe/roguetown/structure/stairsd name = "stairs" result = /obj/structure/stairs/d @@ -238,63 +246,143 @@ return FALSE return TRUE -/datum/crafting_recipe/roguetown/structure/fence - name = "palisade (s x2)" - result = /obj/structure/fluff/railing/fence - reqs = list(/obj/item/grown/log/tree/stake = 2) - ontile = TRUE - verbage = "build" - verbage_tp = "builds" +/datum/crafting_recipe/roguetown/structure/nicebed + name = "nice bed" + result = /obj/structure/bed/rogue + reqs = list(/obj/item/natural/plank=2, + /obj/item/natural/cloth = 1) + tools = list(/obj/item/needle) + verbage = "carpent" + verbage_tp = "carpents" craftsound = 'sound/foley/Building-01.ogg' - buildsame = TRUE + skillcraft = /datum/skill/craft/carpentry + craftdiff = 2 -/datum/crafting_recipe/roguetown/structure/fencealt - name = "palisade (l)" - result = /obj/structure/fluff/railing/fence - reqs = list(/obj/item/grown/log/tree/small = 1) - ontile = TRUE - verbage = "build" - verbage_tp = "builds" +/datum/crafting_recipe/roguetown/structure/door + name = "wooden door" + result = /obj/structure/mineral_door/wood/deadbolt + reqs = list(/obj/item/natural/plank=2) + verbage = "carpent" + verbage_tp = "carpents" craftsound = 'sound/foley/Building-01.ogg' - buildsame = TRUE + skillcraft = /datum/skill/craft/carpentry + craftdiff = 2 -/datum/crafting_recipe/roguetown/structure/chest - name = "chest" - result = /obj/structure/closet/crate/chest/crafted - reqs = list(/obj/item/grown/log/tree/small = 1) - verbage = "construct" - verbage_tp = "constructs" +/*========= MASONRY SKILL ==========*/ + +/datum/crafting_recipe/roguetown/structure/millstone + name = "millstone" + result = /obj/structure/fluff/millstone + reqs = list(/obj/item/natural/stone = 3) + verbage = "mason" + verbage_tp = "masons" + craftsound = null + skillcraft = /datum/skill/craft/masonry + craftdiff = 1 + +/datum/crafting_recipe/roguetown/structure/cauldron + name = "cauldron" + result = /obj/machinery/light/rogue/cauldron + reqs = list(/obj/item/ingot/iron = 2, + /obj/item/natural/stone = 4, + /obj/item/grown/log/tree/small = 1) + verbage = "craft" + verbage_tp = "crafts" craftsound = 'sound/foley/Building-01.ogg' - skillcraft = /datum/skill/craft/carpentry - craftdiff = 0 + skillcraft = /datum/skill/craft/masonry + craftdiff = 1 -/obj/structure/closet/crate/chest/crafted - name = "sturdy chest" - icon_state = "chest_neu" - base_icon_state = "chest_neu" - keylock = FALSE - sellprice = 6 +/datum/crafting_recipe/roguetown/structure/oven + name = "oven" + result = /obj/machinery/light/rogue/oven + reqs = list(/obj/item/grown/log/tree/small = 1, + /obj/item/natural/stone = 3) + verbage = "mason" + verbage_tp = "masons" + craftsound = 'sound/foley/Building-01.ogg' + skillcraft = /datum/skill/craft/masonry + wallcraft = TRUE + craftdiff = 1 -/datum/crafting_recipe/roguetown/structure/closet - name = "closet" - result = /obj/structure/closet/crate/roguecloset/crafted - reqs = list(/obj/item/grown/log/tree/small = 2) - verbage = "construct" - verbage_tp = "constructs" +/datum/crafting_recipe/roguetown/structure/window + name = "solid window" + result = /obj/structure/roguewindow/solid + reqs = list(/obj/item/natural/plank = 1, + /obj/item/natural/glass = 1) + craftsound = 'sound/foley/Building-01.ogg' + skillcraft = /datum/skill/craft/masonry + craftdiff = 1 + +/datum/crafting_recipe/roguetown/structure/windowopen + name = "openable window" + result = /obj/structure/roguewindow/openclose + reqs = list(/obj/item/natural/plank = 1, + /obj/item/natural/glass = 1, + /obj/item/ingot/iron = 1) + craftsound = 'sound/foley/Building-01.ogg' + skillcraft = /datum/skill/craft/masonry + craftdiff = 1 + +/datum/crafting_recipe/roguetown/structure/windowstained + name = "stained glass window (silver)" + result = /obj/structure/roguewindow/stained + reqs = list(/obj/item/natural/stoneblock = 3, + /obj/item/natural/glass = 2, + /obj/item/ingot/silver = 1) + skillcraft = /datum/skill/craft/masonry + craftdiff = 2 + +/*========= MISCELLANY/CRAFTING SKILL ==========*/ + +/* === NO SKILL NEEDED === */ + +/datum/crafting_recipe/roguetown/structure/noose + name = "noose" + result = /obj/structure/noose + reqs = list(/obj/item/rope = 1) + verbage = "tie" + verbage_tp = "ties" + craftsound = 'sound/foley/noose_idle.ogg' + ontile = TRUE + +/datum/crafting_recipe/roguetown/structure/noose/TurfCheck(mob/user, turf/T) + var/turf/checking = get_step_multiz(T, UP) + if(!checking) + return FALSE + if(!isopenturf(checking)) + return FALSE + if(istype(checking,/turf/open/transparent/openspace)) + return FALSE + return TRUE + +/datum/crafting_recipe/roguetown/structure/fence + name = "palisade (s x2)" + result = /obj/structure/fluff/railing/fence + reqs = list(/obj/item/grown/log/tree/stake = 2) + ontile = TRUE + verbage = "build" + verbage_tp = "builds" craftsound = 'sound/foley/Building-01.ogg' - skillcraft = /datum/skill/craft/carpentry + buildsame = TRUE -/obj/structure/closet/crate/roguecloset/crafted - sellprice = 6 +/datum/crafting_recipe/roguetown/structure/fencealt + name = "palisade (l)" + result = /obj/structure/fluff/railing/fence + reqs = list(/obj/item/grown/log/tree/small = 1) + ontile = TRUE + verbage = "build" + verbage_tp = "builds" + craftsound = 'sound/foley/Building-01.ogg' + buildsame = TRUE -/datum/crafting_recipe/roguetown/structure/coffin - name = "wooden coffin" - result = /obj/structure/closet/crate/coffin - reqs = list(/obj/item/grown/log/tree/small = 2) - verbage = "construct" - verbage_tp = "constructs" - skillcraft = /datum/skill/craft/carpentry - craftdiff = 1 +/datum/crafting_recipe/roguetown/structure/bed // This one's not in carpentry because it's just a shitty pile of sticks and cloth. + name = "bed" + result = /obj/structure/bed/rogue/shit + reqs = list(/obj/item/grown/log/tree/small = 1, + /obj/item/natural/fibers = 1) + verbage = "carpent" + verbage_tp = "carpents" + craftsound = 'sound/foley/Building-01.ogg' /datum/crafting_recipe/roguetown/structure/campfire name = "campfire" @@ -302,7 +390,6 @@ reqs = list(/obj/item/grown/log/tree/stick = 2) verbage = "build" verbage_tp = "builds" - craftdiff = 0 /datum/crafting_recipe/roguetown/structure/densefire name = "greater campfire" @@ -312,6 +399,17 @@ verbage = "build" verbage_tp = "builds" +/datum/crafting_recipe/roguetown/structure/pyre + name = "wooden pyre" + result = /obj/machinery/light/rogue/campfire/pyre + reqs = list(/obj/item/grown/log/tree/small = 2, + /obj/item/grown/log/tree/stake = 3) + verbage = "carpent" + verbage_tp = "carpents" + craftsound = 'sound/foley/Building-01.ogg' + +/* === SKILL LEVEL 1 === */ + /datum/crafting_recipe/roguetown/structure/cookpit name = "cookpit" result = /obj/machinery/light/rogue/hearth @@ -319,7 +417,7 @@ /obj/item/natural/stone = 3) verbage = "build" verbage_tp = "builds" - craftdiff = 0 + craftdiff = 1 /datum/crafting_recipe/roguetown/structure/brazier name = "brazier" @@ -328,17 +426,7 @@ /obj/item/rogueore/coal = 1) verbage = "build" verbage_tp = "builds" - -/datum/crafting_recipe/roguetown/structure/oven - name = "oven" - result = /obj/machinery/light/rogue/oven - reqs = list(/obj/item/grown/log/tree/small = 1, - /obj/item/natural/stone = 3) - verbage = "mason" - verbage_tp = "masons" - craftsound = 'sound/foley/Building-01.ogg' - skillcraft = /datum/skill/craft/masonry - wallcraft = TRUE + craftdiff = 1 /datum/crafting_recipe/roguetown/structure/dryingrack name = "drying rack" @@ -347,46 +435,107 @@ verbage = "construct" verbage_tp = "constructs" craftsound = 'sound/foley/Building-01.ogg' + craftdiff = 1 -/datum/crafting_recipe/roguetown/structure/bed - name = "bed" - result = /obj/structure/bed/rogue/shit - reqs = list(/obj/item/grown/log/tree/small = 1, - /obj/item/natural/fibers = 1) - verbage = "carpent" - verbage_tp = "carpents" - craftsound = 'sound/foley/Building-01.ogg' - craftdiff = 0 +/* === SKILL LEVEL 2 === */ -/datum/crafting_recipe/roguetown/structure/nicebed - name = "nice bed" - result = /obj/structure/bed/rogue - reqs = list(/obj/item/grown/log/tree/small = 1, - /obj/item/natural/cloth = 1) - tools = list(/obj/item/needle) - verbage = "carpent" - verbage_tp = "carpents" +/datum/crafting_recipe/roguetown/structure/anvil // Call me crazy, but I think there should be some difficulty involved in making these huge structures. + name = "anvil" + result = /obj/machinery/anvil + reqs = list(/obj/item/ingot/iron = 1) + + verbage = "build" + verbage_tp = "builds" craftsound = 'sound/foley/Building-01.ogg' - skillcraft = /datum/skill/craft/carpentry craftdiff = 2 -/datum/crafting_recipe/roguetown/structure/table - name = "wooden table" - result = /obj/structure/table/wood/crafted +/datum/crafting_recipe/roguetown/structure/smelter + name = "ore furnace" + result = /obj/machinery/light/rogue/smelter + reqs = list(/obj/item/natural/stone = 6, + /obj/item/rogueore/coal = 1) + verbage = "build" + verbage_tp = "builds" + craftsound = null + craftdiff = 2 + +/datum/crafting_recipe/roguetown/structure/smelter_block + name = "ore furnace" + result = /obj/machinery/light/rogue/smelter + reqs = list(/obj/item/natural/stoneblock = 4, + /obj/item/rogueore/coal = 1) + verbage = "build" + verbage_tp = "builds" + craftsound = null + craftdiff = 2 + +/datum/crafting_recipe/roguetown/structure/forge + name = "forge" + result = /obj/machinery/light/rogue/forge + reqs = list(/obj/item/natural/stoneblock = 4, + /obj/item/rogueore/coal = 1) + + verbage = "build" + verbage_tp = "builds" + craftsound = null + craftdiff = 2 + +/* === SKILL LEVEL 3 === */ + +/datum/crafting_recipe/roguetown/structure/sharpwheel + name = "sharpening wheel" + result = /obj/structure/fluff/grindwheel + reqs = list(/obj/item/ingot/iron = 1, + /obj/item/natural/stone = 1) + + verbage = "construct" + verbage_tp = "constructs" + craftsound = null + craftdiff = 3 + +/datum/crafting_recipe/roguetown/structure/greatsmelter // I figure if you've already got a riddle of steel you're a mason making this anyway. + name = "great furnace" + result = /obj/machinery/light/rogue/smelter/great + reqs = list(/obj/item/ingot/iron = 2, + /obj/item/riddleofsteel = 1, + /obj/item/rogueore/coal = 1) + verbage = "build" + verbage_tp = "builds" + craftsound = null + craftdiff = 3 + +/* +/datum/crafting_recipe/roguetown/structure/stairs + name = "stairs (up)" + result = /obj/structure/stairs reqs = list(/obj/item/grown/log/tree/small = 1) - verbage = "carpent" - verbage_tp = "carpents" + + verbage = "carpents" craftsound = 'sound/foley/Building-01.ogg' - skillcraft = /datum/skill/craft/carpentry + ontile = TRUE -/datum/crafting_recipe/roguetown/structure/millstone - name = "millstone" - result = /obj/structure/fluff/millstone - reqs = list(/obj/item/natural/stone = 3) - verbage = "mason" - verbage_tp = "masons" - craftsound = null - skillcraft = /datum/skill/craft/masonry +/datum/crafting_recipe/roguetown/structure/stairs/TurfCheck(mob/user, turf/T) + var/turf/checking = get_step_multiz(T, UP) + if(!checking) + return FALSE + if(!istype(checking,/turf/open/transparent/openspace)) + return FALSE + checking = get_step(checking, user.dir) + if(!checking) + return FALSE + if(!isopenturf(checking)) + return FALSE + if(istype(checking,/turf/open/transparent/openspace)) + return FALSE + for(var/obj/structure/S in checking) + if(istype(S, /obj/structure/stairs)) + return FALSE + if(S.density) + return FALSE + return TRUE +*/ + +/*========= ENGINEERING SKILL ==========*/ /datum/crafting_recipe/roguetown/structure/lever name = "lever" @@ -396,6 +545,7 @@ verbage_tp = "constructs" craftsound = 'sound/foley/Building-01.ogg' skillcraft = /datum/skill/craft/engineering + craftdiff = 1 /datum/crafting_recipe/roguetown/structure/trapdoor name = "floorhatch" @@ -406,6 +556,7 @@ verbage_tp = "constructs" craftsound = 'sound/foley/Building-01.ogg' skillcraft = /datum/skill/craft/engineering + craftdiff = 1 /datum/crafting_recipe/roguetown/structure/pressureplate name = "pressure plate" @@ -416,6 +567,7 @@ verbage_tp = "constructs" craftsound = 'sound/foley/Building-01.ogg' skillcraft = /datum/skill/craft/engineering + craftdiff = 1 /datum/crafting_recipe/roguetown/structure/repeater name = "repeater" @@ -427,6 +579,7 @@ verbage_tp = "constructs" craftsound = 'sound/foley/Building-01.ogg' skillcraft = /datum/skill/craft/engineering + craftdiff = 1 /datum/crafting_recipe/roguetown/structure/activator name = "activator" @@ -438,6 +591,7 @@ verbage_tp = "constructs" craftsound = 'sound/foley/Building-01.ogg' skillcraft = /datum/skill/craft/engineering + craftdiff = 1 /datum/crafting_recipe/roguetown/structure/trapdoor/TurfCheck(mob/user, turf/T) if(istype(T,/turf/open/transparent/openspace)) @@ -446,61 +600,6 @@ return TRUE // its just too hilarious not to allow this return ..() -/datum/crafting_recipe/roguetown/structure/sign - name = "custom sign" - result = /obj/structure/fluff/customsign - reqs = list(/obj/item/grown/log/tree/small = 1) - verbage = "construct" - verbage_tp = "constructs" - craftsound = 'sound/foley/Building-01.ogg' - skillcraft = /datum/skill/craft/carpentry - craftdiff = 1 - -/datum/crafting_recipe/roguetown/structure/dummy - name = "training dummy" - result = /obj/structure/fluff/statue/tdummy - reqs = list(/obj/item/grown/log/tree/small = 1) - verbage = "construct" - verbage_tp = "constructs" - craftsound = 'sound/foley/Building-01.ogg' - skillcraft = /datum/skill/craft/carpentry - craftdiff = 1 - -/datum/crafting_recipe/roguetown/structure/display_stand - name = "display stand" - result = /obj/structure/mannequin - reqs = list(/obj/item/grown/log/tree/small = 1, - /obj/item/grown/log/tree/stick = 3) - verbage = "construct" - verbage_tp = "constructs" - craftsound = 'sound/foley/Building-01.ogg' - skillcraft = /datum/skill/craft/carpentry - craftdiff = 2 - -/datum/crafting_recipe/roguetown/structure/mannequin - name = "mannequin" - result = /obj/structure/mannequin/male - reqs = list(/obj/item/grown/log/tree/small = 1, - /obj/item/natural/cloth = 1, - /obj/item/ingot/iron = 1) - verbage = "construct" - verbage_tp = "constructs" - craftsound = 'sound/foley/Building-01.ogg' - skillcraft = /datum/skill/craft/carpentry - craftdiff = 2 - -/datum/crafting_recipe/roguetown/structure/mannequin_f - name = "feminine mannequin" - result = /obj/structure/mannequin/male/female - reqs = list(/obj/item/grown/log/tree/small = 1, - /obj/item/natural/cloth = 1, - /obj/item/ingot/iron = 1) - verbage = "construct" - verbage_tp = "constructs" - craftsound = 'sound/foley/Building-01.ogg' - skillcraft = /datum/skill/craft/carpentry - craftdiff = 2 - /datum/crafting_recipe/roguetown/structure/passage name = "passage" result = /obj/structure/bars/passage @@ -510,6 +609,7 @@ verbage_tp = "builds" craftsound = 'sound/foley/Building-01.ogg' skillcraft = /datum/skill/craft/engineering + craftdiff = 1 /datum/crafting_recipe/roguetown/structure/passage/TurfCheck(mob/user, turf/T) if(istype(T,/turf/open/transparent/openspace)) @@ -519,25 +619,3 @@ if(istype(T,/turf/open/water)) return FALSE return ..() - -/datum/crafting_recipe/roguetown/structure/wallladder - name = "wall ladder" - result = /obj/structure/wallladder - reqs = list(/obj/item/grown/log/tree/small = 1) - verbage = "carpent" - verbage_tp = "carpents" - craftsound = 'sound/foley/Building-01.ogg' - skillcraft = /datum/skill/craft/carpentry - wallcraft = TRUE - craftdiff = 0 - -/datum/crafting_recipe/roguetown/structure/cauldron - name = "cauldron" - result = /obj/machinery/light/rogue/cauldron - reqs = list(/obj/item/ingot/iron = 2, - /obj/item/natural/stone = 4, - /obj/item/grown/log/tree/small = 1) - verbage = "craft" - verbage_tp = "crafts" - craftsound = 'sound/foley/Building-01.ogg' - skillcraft = /datum/skill/craft/masonry diff --git a/code/modules/roguetown/roguecrafting/turfs.dm b/code/modules/roguetown/roguecrafting/turfs.dm index 26e34145fe..f29a6db51f 100644 --- a/code/modules/roguetown/roguecrafting/turfs.dm +++ b/code/modules/roguetown/roguecrafting/turfs.dm @@ -1,7 +1,10 @@ +/datum/crafting_recipe/roguetown/turfs + craftdiff = 0 +/*========= CARPENTRY SKILL ==========*/ /datum/crafting_recipe/roguetown/turfs/woodfloor - name = "wooden floor" + name = "rough wooden floor" result = /turf/open/floor/rogue/ruinedwood reqs = list(/obj/item/grown/log/tree/small = 1) skillcraft = /datum/skill/craft/carpentry @@ -16,12 +19,6 @@ return return TRUE -/datum/crafting_recipe/roguetown/turfs/woodwall - name = "wooden wall" - result = /turf/closed/wall/mineral/rogue/wood - reqs = list(/obj/item/grown/log/tree/small = 2) - skillcraft = /datum/skill/craft/carpentry - /datum/crafting_recipe/roguetown/turfs/daubwall name = "daub wall" result = /turf/closed/wall/mineral/rogue/decowood @@ -29,6 +26,14 @@ skillcraft = /datum/skill/craft/crafting verbage = "build" verbage_tp = "builds" + craftdiff = 1 + +/datum/crafting_recipe/roguetown/turfs/woodwall + name = "wooden wall" + result = /turf/closed/wall/mineral/rogue/wood + reqs = list(/obj/item/natural/plank = 2) + skillcraft = /datum/skill/craft/carpentry + craftdiff = 1 /datum/crafting_recipe/roguetown/turfs/woodwall/TurfCheck(mob/user, turf/T) if(isclosedturf(T)) @@ -40,8 +45,9 @@ /datum/crafting_recipe/roguetown/turfs/woodwindow name = "wooden murder hole" result = /turf/closed/wall/mineral/rogue/wood/window - reqs = list(/obj/item/grown/log/tree/small = 2) + reqs = list(/obj/item/natural/plank = 2) skillcraft = /datum/skill/craft/carpentry + craftdiff = 1 /datum/crafting_recipe/roguetown/turfs/woodwindow/TurfCheck(mob/user, turf/T) if(isclosedturf(T)) @@ -50,9 +56,42 @@ return return TRUE +/datum/crafting_recipe/roguetown/turfs/woodfloorplank + name = "wooden floor" + result = /turf/open/floor/rogue/ruinedwood/spiral + reqs = list(/obj/item/natural/plank = 1) + skillcraft = /datum/skill/craft/carpentry + craftdiff = 2 + +/datum/crafting_recipe/roguetown/turfs/woodfloorplank/TurfCheck(mob/user, turf/T) + if(isclosedturf(T)) + return + if(!istype(T, /turf/open/floor/rogue/dirt)) + if(!istype(T, /turf/open/transparent/openspace)) + if(!istype(T, /turf/open/floor/rogue/grass)) + return + return TRUE + +/datum/crafting_recipe/roguetown/turfs/woodfloorchevron + name = "patterned wooden floor" + result = /turf/open/floor/rogue/ruinedwood/spiral + reqs = list(/obj/item/natural/plankshort = 2) + skillcraft = /datum/skill/craft/carpentry + craftdiff = 2 + +/datum/crafting_recipe/roguetown/turfs/woodfloorchevron/TurfCheck(mob/user, turf/T) + if(isclosedturf(T)) + return + if(!istype(T, /turf/open/floor/rogue/dirt)) + if(!istype(T, /turf/open/transparent/openspace)) + if(!istype(T, /turf/open/floor/rogue/grass)) + return + return TRUE +/*========= MASONRY SKILL ==========*/ + /datum/crafting_recipe/roguetown/turfs/stonefloor - name = "stone floor" - result = /turf/open/floor/rogue/blocks + name = "rough stone floor" + result = /turf/open/floor/rogue/cobble reqs = list(/obj/item/natural/stone = 1) skillcraft = /datum/skill/craft/masonry craftdiff = 0 @@ -66,11 +105,44 @@ return return TRUE +/datum/crafting_recipe/roguetown/turfs/stoneblockfloor + name = "block floor" + result = /turf/open/floor/rogue/blocks + reqs = list(/obj/item/natural/stoneblock = 1) + skillcraft = /datum/skill/craft/masonry + craftdiff = 1 + +/datum/crafting_recipe/roguetown/turfs/stoneblockfloor/TurfCheck(mob/user, turf/T) + if(isclosedturf(T)) + return + if(!istype(T, /turf/open/floor/rogue/dirt)) + if(!istype(T, /turf/open/transparent/openspace)) + if(!istype(T, /turf/open/floor/rogue/grass)) + return + return TRUE + +/datum/crafting_recipe/roguetown/turfs/stoneherring + name = "herringstone floor" + result = /turf/open/floor/rogue/herringbone + reqs = list(/obj/item/natural/stoneblock = 1) + skillcraft = /datum/skill/craft/masonry + craftdiff = 2 + +/datum/crafting_recipe/roguetown/turfs/stoneherring/TurfCheck(mob/user, turf/T) + if(isclosedturf(T)) + return + if(!istype(T, /turf/open/floor/rogue/dirt)) + if(!istype(T, /turf/open/transparent/openspace)) + if(!istype(T, /turf/open/floor/rogue/grass)) + return + return TRUE + /datum/crafting_recipe/roguetown/turfs/stonewall name = "stone wall" result = /turf/closed/wall/mineral/rogue/stone reqs = list(/obj/item/natural/stone = 2) skillcraft = /datum/skill/craft/masonry + craftdiff = 1 /datum/crafting_recipe/roguetown/turfs/stonewall/TurfCheck(mob/user, turf/T) if(isclosedturf(T)) @@ -82,8 +154,9 @@ /datum/crafting_recipe/roguetown/turfs/stonewindow name = "stone murder hole" result = /turf/closed/wall/mineral/rogue/stone/window - reqs = list(/obj/item/natural/stone = 2) + reqs = list(/obj/item/natural/stoneblock = 2) skillcraft = /datum/skill/craft/masonry + craftdiff = 1 /datum/crafting_recipe/roguetown/turfs/stonewindow/TurfCheck(mob/user, turf/T) if(isclosedturf(T)) @@ -92,7 +165,35 @@ return return TRUE -/// TWIG AND TENT +//fancier walls +/datum/crafting_recipe/roguetown/turfs/stonewallcraft + name = "fancy stone block wall" + result = /turf/closed/wall/mineral/rogue/craftstone + reqs = list(/obj/item/natural/stoneblock = 3) + skillcraft = /datum/skill/craft/masonry + craftdiff = 2 + +/datum/crafting_recipe/roguetown/turfs/stonewallcraft/TurfCheck(mob/user, turf/T) + if(isclosedturf(T)) + return + if(!istype(T, /turf/open/floor/rogue)) + return + return TRUE + +/datum/crafting_recipe/roguetown/turfs/stonewallbrick + name = "stone brick wall" + result = /turf/closed/wall/mineral/rogue/stonebrick + reqs = list(/obj/item/natural/stoneblock = 3) + skillcraft = /datum/skill/craft/masonry + craftdiff = 2 + +/datum/crafting_recipe/roguetown/turfs/stonewallbrick/TurfCheck(mob/user, turf/T) + if(isclosedturf(T)) + return + if(!istype(T, /turf/open/floor/rogue)) + return + return TRUE +/*========= CRAFTING SKILL ==========*/ /datum/crafting_recipe/roguetown/turfs/twig name = "twig floor" diff --git a/code/modules/roguetown/roguecrafting/weaving.dm b/code/modules/roguetown/roguecrafting/weaving.dm index be2f3eea61..c374f61771 100644 --- a/code/modules/roguetown/roguecrafting/weaving.dm +++ b/code/modules/roguetown/roguecrafting/weaving.dm @@ -1,160 +1,258 @@ +/* WEAVING - sewing skill +==========================================================*/ +// The only ingridients these recipes can require is SILK and CLOTH +// They all require a loom + /datum/crafting_recipe/roguetown/weaving structurecraft = /obj/machinery/loom skillcraft = /datum/skill/misc/sewing subtype_reqs = TRUE // so you can use any subtype of fur + reqs = list(/obj/item/natural/silk = 2) + craftdiff = 1 + +/*========= SKILL LEVEL: 1 REQUIRED ==========*/ /datum/crafting_recipe/roguetown/weaving/rags name = "webbed shirt" result = list(/obj/item/clothing/suit/roguetown/shirt/undershirt/webs) - reqs = list(/obj/item/natural/silk = 1) - craftdiff = 1 - sellprice = 6 /datum/crafting_recipe/roguetown/weaving/webbing name = "webbed leggings" result = list(/obj/item/clothing/under/roguetown/webs) - reqs = list(/obj/item/natural/silk = 2) - craftdiff = 1 - sellprice = 9 + +/datum/crafting_recipe/roguetown/weaving/shepardmask + name = "silk half-mask" + result = list(/obj/item/clothing/mask/rogue/shepherd) + reqs = list(/obj/item/natural/silk = 1) + sellprice = 30 + +/*========= SKILL LEVEL: 2 REQUIRED ==========*/ + +/datum/crafting_recipe/roguetown/weaving/stockings_white_silk + name = "white silk stockings" + result = list(/obj/item/clothing/under/roguetown/tights/stockings/silk/white) + reqs = list(/obj/item/natural/silk = 1, + /obj/item/natural/fibers = 1) + craftdiff = 2 + +/datum/crafting_recipe/roguetown/weaving/stockings_black_silk + name = "black silk stockings" + result = list(/obj/item/clothing/under/roguetown/tights/stockings/silk/black) + reqs = list(/obj/item/natural/silk = 1, + /obj/item/natural/fibers = 1) + craftdiff = 2 + +/datum/crafting_recipe/roguetown/weaving/stockings_blue_silk + name = "blue silk stockings" + result = list(/obj/item/clothing/under/roguetown/tights/stockings/silk/blue) + reqs = list(/obj/item/natural/silk = 1, + /obj/item/natural/fibers = 1) + craftdiff = 2 + +/datum/crafting_recipe/roguetown/weaving/stockings_red_silk + name = "red silk stockings" + result = list(/obj/item/clothing/under/roguetown/tights/stockings/silk/red) + reqs = list(/obj/item/natural/silk = 1, + /obj/item/natural/fibers = 1) + craftdiff = 2 + +/datum/crafting_recipe/roguetown/weaving/stockings_purple_silk + name = "purple silk stockings" + result = list(/obj/item/clothing/under/roguetown/tights/stockings/silk/purple) + reqs = list(/obj/item/natural/silk = 1, + /obj/item/natural/fibers = 1) + craftdiff = 2 /datum/crafting_recipe/roguetown/weaving/cloak name = "silk half cloak" result = list(/obj/item/clothing/cloak/half) - reqs = list(/obj/item/natural/cloth = 1, - /obj/item/natural/silk = 1) - craftdiff = 3 + craftdiff = 2 sellprice = 19 +/datum/crafting_recipe/roguetown/weaving/bathrobe + name = "bathrobe" + result = list(/obj/item/clothing/suit/roguetown/shirt/robe/bath) + reqs = list(/obj/item/natural/silk = 2, + /obj/item/natural/fur = 1) + craftdiff = 2 + sellprice = 10 + +/datum/crafting_recipe/roguetown/weaving/mundies + name = "masculine smallclothes" + result = list(/obj/item/undies) + craftdiff = 2 + sellprice = 20 + +/datum/crafting_recipe/roguetown/weaving/fundies + name = "feminine smallclothes" + result = list(/obj/item/undies/f) + craftdiff = 2 + sellprice = 20 + + +/*========= SKILL LEVEL: 3 REQUIRED ==========*/ + +/datum/crafting_recipe/roguetown/weaving/paddedgambeson + name = "padded gambeson" + result = list(/obj/item/clothing/suit/roguetown/armor/gambeson/heavy) + reqs = list(/obj/item/natural/cloth = 8) + craftdiff = 3 + /datum/crafting_recipe/roguetown/weaving/shirt name = "formal silks" result = list(/obj/item/clothing/suit/roguetown/shirt/undershirt/puritan) - reqs = list(/obj/item/natural/silk = 5) craftdiff = 3 sellprice = 35 -/datum/crafting_recipe/roguetown/weaving/shepardmask - name = "half-mask" - result = list(/obj/item/clothing/mask/rogue/shepherd) - reqs = list(/obj/item/natural/cloth = 1, - /obj/item/natural/silk = 1) - craftdiff = 1 +/datum/crafting_recipe/roguetown/weaving/silkdress + name = "chemise" + result = list (/obj/item/clothing/suit/roguetown/shirt/dress/silkdress/random) + craftdiff = 3 sellprice = 30 +/datum/crafting_recipe/roguetown/weaving/barmaid + name = "bar dress" + result = list (/obj/item/clothing/suit/roguetown/shirt/dress) + craftdiff = 3 + sellprice = 27 + +/datum/crafting_recipe/roguetown/weaving/valorian + name = "valorian dress" + result = list(/obj/item/clothing/suit/roguetown/shirt/dress/valorian) + craftdiff = 3 + sellprice = 20 + +/datum/crafting_recipe/roguetown/weaving/silkpantaloons + name = "silk pantaloons" + result = list (/obj/item/clothing/under/roguetown/pantaloons/random) + craftdiff = 3 + sellprice = 20 + +/datum/crafting_recipe/roguetown/weaving/cape_silk + name = "silk cape" + result = list(/obj/item/clothing/cloak/cape/silk/random) + reqs = list(/obj/item/natural/silk = 3) + craftdiff = 3 + sellprice = 40 + + +/*========= SKILL LEVEL: 4 REQUIRED ==========*/ + +/datum/crafting_recipe/roguetown/weaving/silkcoat + name = "silk coat" + result = list (/obj/item/clothing/suit/roguetown/armor/leather/jacket/silk_coat) + reqs = list(/obj/item/natural/silk = 4, + /obj/item/natural/cloth = 1) + craftdiff = 4 + sellprice = 60 + +/datum/crafting_recipe/roguetown/weaving/armordress + name = "padded dress" + result = /obj/item/clothing/suit/roguetown/armor/gambeson/heavy/dress + reqs = list(/obj/item/natural/silk = 4, + /obj/item/natural/cloth = 1) + craftdiff = 4 + sellprice = 80 + +/datum/crafting_recipe/roguetown/weaving/nunhood + name = "nun hood" + result = list(/obj/item/clothing/head/roguetown/nun) + reqs = list(/obj/item/natural/cloth = 2) + craftdiff = 4 + sellprice = 20 + +/datum/crafting_recipe/roguetown/weaving/nunrobe + name = "nun robe" + result = list(/obj/item/clothing/suit/roguetown/shirt/robe/nun) + reqs = list(/obj/item/natural/cloth = 4) + craftdiff = 4 + sellprice = 20 + /datum/crafting_recipe/roguetown/weaving/astratarobe name = "astrata robes" result = list(/obj/item/clothing/suit/roguetown/shirt/robe/astrata) - reqs = list(/obj/item/natural/cloth = 3, - /obj/item/natural/silk = 1) + reqs = list(/obj/item/natural/cloth = 4) craftdiff = 4 sellprice = 25 /datum/crafting_recipe/roguetown/weaving/astratahood name = "solar hood" result = list(/obj/item/clothing/head/roguetown/roguehood/astrata) - reqs = list(/obj/item/natural/cloth = 2, - /obj/item/natural/silk = 1) - craftdiff = 3 + reqs = list(/obj/item/natural/cloth = 2) + craftdiff = 4 + sellprice = 25 + +/datum/crafting_recipe/roguetown/weaving/nocrobe + name = "noc robes" + result = list(/obj/item/clothing/suit/roguetown/shirt/robe/noc) + reqs = list(/obj/item/natural/cloth = 4) + craftdiff = 4 + sellprice = 25 + +/datum/crafting_recipe/roguetown/weaving/nochood + name = "moon hood" + result = list(/obj/item/clothing/head/roguetown/roguehood/nochood) + reqs = list(/obj/item/natural/cloth = 2) + craftdiff = 4 sellprice = 25 /datum/crafting_recipe/roguetown/weaving/dendorrobe name = "dendor robes" result = list(/obj/item/clothing/suit/roguetown/shirt/robe/dendor) - reqs = list(/obj/item/natural/cloth = 3, - /obj/item/natural/silk = 1) + reqs = list(/obj/item/natural/cloth = 4) craftdiff = 4 sellprice = 25 /datum/crafting_recipe/roguetown/weaving/necrarobe name = "necra robes" result = list(/obj/item/clothing/suit/roguetown/shirt/robe/necra) - reqs = list(/obj/item/natural/cloth = 3, - /obj/item/natural/silk = 1) + reqs = list(/obj/item/natural/cloth = 4) craftdiff = 4 sellprice = 25 /datum/crafting_recipe/roguetown/weaving/necrahood name = "necra hood" result = list(/obj/item/clothing/head/roguetown/padded/deathshroud) - reqs = list(/obj/item/natural/cloth = 2, - /obj/item/natural/silk = 1) - craftdiff = 3 + reqs = list(/obj/item/natural/cloth = 2) + craftdiff = 4 sellprice = 20 -/datum/crafting_recipe/roguetown/weaving/eoramask - name = "eora mask" +/datum/crafting_recipe/roguetown/weaving/eoramask // should not be a weaving recipe, does not follow the rules. TO DO + name = "eora hood" result = list(/obj/item/clothing/head/roguetown/roguehood/eora) reqs = list(/obj/item/ingot/silver, - /obj/item/natural/silk = 4) - craftdiff = 3 + /obj/item/natural/cloth = 2) + craftdiff = 4 sellprice = 20 /datum/crafting_recipe/roguetown/weaving/eorarobes name = "eora robes" result = list(/obj/item/clothing/suit/roguetown/shirt/robe/eora) - reqs = list(/obj/item/natural/cloth = 2, - /obj/item/natural/silk = 1) - craftdiff = 3 + reqs = list(/obj/item/natural/cloth = 3) + craftdiff = 4 sellprice = 20 /datum/crafting_recipe/roguetown/weaving/eorastraps name = "eora straps" result = list(/obj/item/clothing/suit/roguetown/shirt/robe/eora/alt) - reqs = list(/obj/item/ingot/gold, - /obj/item/natural/silk = 5) - craftdiff = 5 - sellprice = 50 - -/datum/crafting_recipe/roguetown/weaving/nunhood - name = "nun hood" - result = list(/obj/item/clothing/head/roguetown/nun) - reqs = list(/obj/item/natural/silk = 2) - craftdiff = 3 - sellprice = 20 - -/datum/crafting_recipe/roguetown/weaving/nunrobe - name = "nun robe" - result = list(/obj/item/clothing/suit/roguetown/shirt/robe/nun) reqs = list(/obj/item/natural/silk = 3) - craftdiff = 3 - sellprice = 20 + craftdiff = 4 + sellprice = 50 -/datum/crafting_recipe/roguetown/weaving/barmaid - name = "bar dress" - result = list (/obj/item/clothing/suit/roguetown/shirt/dress) - reqs = list(/obj/item/natural/cloth = 2, - /obj/item/natural/silk = 2) - craftdiff = 5 - sellprice = 27 +/datum/crafting_recipe/roguetown/weaving/malumrobe + name = "malum robe" + result = list(/obj/item/clothing/suit/roguetown/shirt/robe/malum) + reqs = list(/obj/item/natural/cloth = 3) + craftdiff = 4 + sellprice = 50 -/datum/crafting_recipe/roguetown/weaving/silkdress - name = "chemise" - result = list (/obj/item/clothing/suit/roguetown/shirt/dress/silkdress/random) - reqs = list(/obj/item/natural/fibers = 2, - /obj/item/natural/silk = 3) - craftdiff = 5 - sellprice = 30 +/*========= SKILL LEVEL: 5 REQUIRED ==========*/ -/datum/crafting_recipe/roguetown/weaving/silkcoat - name = "silk coat" - result = list (/obj/item/clothing/suit/roguetown/armor/leather/jacket/silk_coat) - reqs = list(/obj/item/natural/cloth = 1, - /obj/item/natural/silk = 3, - /obj/item/natural/fur = 2) +/datum/crafting_recipe/roguetown/weaving/lordcloak + name = "lordly cloak" + result = list(/obj/item/clothing/cloak/lordcloak) + reqs = list(/obj/item/natural/fur = 2, + /obj/item/natural/silk = 4) craftdiff = 5 - sellprice = 60 -/datum/crafting_recipe/roguetown/weaving/paddedgambeson - name = "padded gambeson" - result = list(/obj/item/clothing/suit/roguetown/armor/gambeson/heavy) - reqs = list(/obj/item/natural/cloth = 6, - /obj/item/natural/fibers = 4) - craftdiff = 4 -/datum/crafting_recipe/roguetown/weaving/armordress - name = "padded dress" - result = /obj/item/clothing/suit/roguetown/armor/gambeson/heavy/dress - reqs = list(/obj/item/natural/silk = 4, - /obj/item/natural/fibers = 2, - /obj/item/natural/hide = 1) - craftdiff = 4 - sellprice = 80 diff --git a/code/modules/roguetown/roguejobs/alchemist/container.dm b/code/modules/roguetown/roguejobs/alchemist/container.dm index b662a4c639..809d184d27 100644 --- a/code/modules/roguetown/roguejobs/alchemist/container.dm +++ b/code/modules/roguetown/roguejobs/alchemist/container.dm @@ -72,7 +72,7 @@ /obj/item/reagent_containers/glass/bottle/rogue/beer/blackgoat list_reagents = list(/datum/reagent/consumable/ethanol/beer/blackgoat = 70) - desc = "A bottle with the black goat kriek cork-seal. A fruit-sour beer brewed with jackberries for a tangy taste." + desc = "A bottle with the black goat kriek cork-seal. A fruit-sour beer brewed with jacksberries for a tangy taste." /obj/item/reagent_containers/glass/bottle/rogue/beer/ratkept list_reagents = list(/datum/reagent/consumable/ethanol/beer/onion = 70) diff --git a/code/modules/roguetown/roguejobs/alchemist/reagents.dm b/code/modules/roguetown/roguejobs/alchemist/reagents.dm index 65786c2275..41e1575356 100644 --- a/code/modules/roguetown/roguejobs/alchemist/reagents.dm +++ b/code/modules/roguetown/roguejobs/alchemist/reagents.dm @@ -103,6 +103,18 @@ ..() . = 1 +/datum/reagent/buff/coldfire + name = "Coldfire" + color = "#616990" + taste_description = "burning" + metabolization_rate = REAGENTS_METABOLISM + +/datum/reagent/buff/coldfire/on_mob_metabolize(mob/living/L) + ADD_TRAIT(L, TRAIT_MOB_FIRE_IMMUNE, type) + +/datum/reagent/buff/coldfire/on_mob_end_metabolize(mob/living/L) + REMOVE_TRAIT(L, TRAIT_MOB_FIRE_IMMUNE, type) + //Buff potions /datum/reagent/buff description = "" diff --git a/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/_anvil_recipe.dm b/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/_anvil_recipe.dm index d2bb138d61..ffc9240152 100644 --- a/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/_anvil_recipe.dm +++ b/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/_anvil_recipe.dm @@ -14,7 +14,7 @@ var/needed_item_text // Name of the object we need to slap on the anvil to proceed to the next step. var/progress = 0 // 0 to 100%, percentage of completion on this step of crafting (or overall if no extra items required) var/i_type // Category of crafted item. Will determine how it shows on the crafting menu window. - var/recipe_name // This is what will be shown when you + var/recipe_name // This is what will be shown when you var/bar_health = 100 // Current material bar health, reduced by failures. At 0 HP it is deleted. var/numberofhits = 0 // Increased every time you hit the bar, the more you have to hit the bar the less quality of the product. var/numberofbreakthroughs = 0 // How many good hits we got on the metal, advances recipes 50% faster, reduces number of hits total, and restores bar_health @@ -62,7 +62,7 @@ qdel(I) additional_items -= needed_item progress = 0 - + if(!moveup) if(!prob(proab)) // Roll again, this time negatively, for consequences. user.visible_message("[user] ruins the bar!") @@ -111,7 +111,7 @@ user.visible_message("[user] deftly strikes the bar!") if(bar_health < 100) bar_health += 20 // Correcting the mistakes, ironing the kinks. Low chance, so rewarding. - else + else user.visible_message("[user] strikes the bar!") return TRUE @@ -153,7 +153,7 @@ if(BLACKSMITH_LEVEL_LEGENDARY to BLACKSMITH_LEVEL_MAX) I.name = "masterwork [I.name]" modifier = 1.3 - + if(!modifier) // Sanity. return // Finally, modify the smithed item's stats based on modifier multiplier @@ -174,7 +174,7 @@ W.armor_penetration *= modifier W.wdefense *= modifier // Make (ONLY) axes (and the Pick-axe) better at woodcutting too - if(istype(I, /obj/item/rogueweapon/woodcut) || istype(I, /obj/item/rogueweapon/pick/paxe)) + if(istype(I, /obj/item/rogueweapon/axe/iron) || istype(I, /obj/item/rogueweapon/pick/paxe)) var/obj/item/rogueweapon/A = I A.axe_cut += (A.force * modifier) * 0.5 // Multiply the axe's damage by the modifier, and add half of this as axe_cut // If it's a pick, make it better at its job diff --git a/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/armor.dm b/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/armor.dm index 0c4f6eaa71..b716e45f5a 100644 --- a/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/armor.dm +++ b/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/armor.dm @@ -10,8 +10,6 @@ recipe_name = "a mask of copper" req_bar = /obj/item/ingot/copper created_item = /obj/item/clothing/mask/rogue/facemask/copper - createmultiple = TRUE - createditem_num = 0 craftdiff = 0 /datum/anvil_recipe/armor/copperbracers @@ -19,8 +17,6 @@ recipe_name = "a couple of copper Vambraces" req_bar = /obj/item/ingot/copper created_item = /obj/item/clothing/wrists/roguetown/bracers/copper - createmultiple = TRUE - createditem_num = 0 craftdiff = 0 /datum/anvil_recipe/armor/coppercap @@ -28,51 +24,43 @@ recipe_name = "a copper cap" req_bar = /obj/item/ingot/copper created_item = /obj/item/clothing/head/roguetown/helmet/coppercap - createmultiple = TRUE - createditem_num = 0 craftdiff = 0 /datum/anvil_recipe/armor/gorgetcopper - name = "Gorget" - recipe_name = "a Gorget made out of copper" + name = "Copper neck protector" + recipe_name = "a neck protector" req_bar = /obj/item/ingot/copper created_item = /obj/item/clothing/neck/roguetown/gorget/copper - createmultiple = TRUE - createditem_num = 0 craftdiff = 0 /datum/anvil_recipe/armor/copperchest - name = "Copper heart protector (2)" + name = "Copper heart protector" recipe_name = "a very simple armor piece for the chest" req_bar = /obj/item/ingot/copper created_item = /obj/item/clothing/suit/roguetown/armor/cuirass/copperchest - additional_items = list(/obj/item/ingot/copper) - createditem_num = 0 craftdiff = 0 // --------- IRON ----------- +/datum/anvil_recipe/armor/iron + req_bar = /obj/item/ingot/iron + craftdiff = 0 + /datum/anvil_recipe/armor/ichainleg - name = "Chain chausses x2" + name = "Chain chausses" recipe_name = "a pair of Chain Chausses" req_bar = /obj/item/ingot/iron created_item = /obj/item/clothing/under/roguetown/chainlegs/iron - createmultiple = TRUE - createditem_num = 1 craftdiff = 0 -/datum/anvil_recipe/armor/ichaincoif - name = "Chain coif x2" - recipe_name = "a pair of Chain Coifs" - req_bar = /obj/item/ingot/iron +/datum/anvil_recipe/armor/iron/chaincoif + name = "Chain coif" + recipe_name = "a Chain Coif" created_item = /obj/item/clothing/neck/roguetown/chaincoif/iron - createmultiple = TRUE - createditem_num = 1 - craftdiff = 0 /datum/anvil_recipe/armor/ichainglove - name = "Chain gauntlets x2" - recipe_name = "a pair of Chain Gauntlets" + name = "Chain gauntlets (x2)" + recipe_name = "two pairs of Chain Gauntlets" req_bar = /obj/item/ingot/iron created_item = /obj/item/clothing/gloves/roguetown/chain/iron createmultiple = TRUE @@ -81,37 +69,35 @@ /datum/anvil_recipe/armor/ichainmail name = "Chainmail" - recipe_name = "a Chainmail" + recipe_name = "maille shirt" req_bar = /obj/item/ingot/iron created_item = /obj/item/clothing/suit/roguetown/armor/chainmail/iron /datum/anvil_recipe/armor/iplate name = "Plate armor (3)" - recipe_name = "a heavy plate armor" + recipe_name = "heavy armor made of iron plates" req_bar = /obj/item/ingot/iron additional_items = list(/obj/item/ingot/iron,/obj/item/ingot/iron) created_item = /obj/item/clothing/suit/roguetown/armor/plate/iron craftdiff = 1 -/datum/anvil_recipe/armor/iplatehelmet +/datum/anvil_recipe/armor/iron/platehelmet name = "Plate helmet (2)" - recipe_name = "a face guarded iron helmet" - req_bar = /obj/item/ingot/iron + recipe_name = "a heavy iron helmet" additional_items = list(/obj/item/ingot/iron) created_item = /obj/item/clothing/head/roguetown/helmet/heavy/ironplate craftdiff = 1 -/datum/anvil_recipe/armor/ipothelmet +/datum/anvil_recipe/armor/iron/pothelmet name = "Pot helmet" - recipe_name = "a heavy iron helmet" - req_bar = /obj/item/ingot/iron + recipe_name = "a sturdy iron helmet" created_item = /obj/item/clothing/head/roguetown/helmet/ironpot craftdiff = 1 /datum/anvil_recipe/armor/platemask - name = "Face mask x2" - recipe_name = "a pair of Face Masks" + name = "Face mask" + recipe_name = "a Face Mask" req_bar = /obj/item/ingot/iron created_item = /obj/item/clothing/mask/rogue/facemask createmultiple = TRUE @@ -119,36 +105,35 @@ craftdiff = 0 /datum/anvil_recipe/armor/gorget - name = "Gorget x2" - recipe_name = "a pair of Gorgets" + name = "Gorget" + recipe_name = "a gorget" req_bar = /obj/item/ingot/iron created_item = /obj/item/clothing/neck/roguetown/gorget - createmultiple = TRUE - createditem_num = 1 craftdiff = 0 /datum/anvil_recipe/armor/platebootlight - name = "Light plate boots x2" + name = "Light plate boots" recipe_name = "a pair of Light Plate Boots" req_bar = /obj/item/ingot/iron created_item = /obj/item/clothing/shoes/roguetown/boots/armor/light - createmultiple = TRUE - createditem_num = 1 -/datum/anvil_recipe/armor/skullcap - name = "Skullcap x2" - recipe_name = "a pair of Skullcaps" - req_bar = /obj/item/ingot/iron +/datum/anvil_recipe/armor/iron/nasal_helmet + name = "Nasal helmet" + recipe_name = "a Nasal helmet" + created_item = /obj/item/clothing/head/roguetown/helmet/nasal + craftdiff = 2 + +/datum/anvil_recipe/armor/iron/skullcap + name = "Skullcap" + recipe_name = "a skullcap" created_item = /obj/item/clothing/head/roguetown/helmet/skullcap - createmultiple = TRUE - createditem_num = 1 -/datum/anvil_recipe/armor/studdedleather - name = "Studded leather (2h)" - recipe_name = "a Studded Leather Armor" +/datum/anvil_recipe/armor/splint + name = "Splint Armor (2h)" + recipe_name = "durable light armor" req_bar = /obj/item/ingot/iron additional_items = list(/obj/item/natural/hide, /obj/item/natural/hide) - created_item = /obj/item/clothing/suit/roguetown/armor/leather/studded + created_item = /obj/item/clothing/suit/roguetown/armor/leather/splint craftdiff = 1 // --------- STEEL ----------- @@ -176,26 +161,22 @@ craftdiff = 2 /datum/anvil_recipe/armor/chainleg - name = "Chain chausses x2" + name = "Chain chausses" recipe_name = "a pair of Chain Chausses" req_bar = /obj/item/ingot/steel created_item = /obj/item/clothing/under/roguetown/chainlegs - createmultiple = TRUE - createditem_num = 1 craftdiff = 2 /datum/anvil_recipe/armor/chaincoif - name = "Chain coif x2" - recipe_name = "a pair of Chain Coifs" + name = "Chain coif" + recipe_name = "a Chain Coif" req_bar = /obj/item/ingot/steel created_item = /obj/item/clothing/neck/roguetown/chaincoif - createmultiple = TRUE - createditem_num = 1 craftdiff = 2 /datum/anvil_recipe/armor/chainglove name = "Chain gauntlets x2" - recipe_name = "a pair of Chain Gauntlets" + recipe_name = "two pairs of Chain Gauntlets" req_bar = /obj/item/ingot/steel created_item = /obj/item/clothing/gloves/roguetown/chain createmultiple = TRUE @@ -240,12 +221,24 @@ craftdiff = 3 /datum/anvil_recipe/armor/helmetkettle - name = "Kettle helmet x2" - recipe_name = "a pair of Kettle Helmets" + name = "Kettle helmet" + recipe_name = "a Kettle Helmet" req_bar = /obj/item/ingot/steel created_item = /obj/item/clothing/head/roguetown/helmet/kettle - createmultiple = TRUE - createditem_num = 1 + craftdiff = 2 + +/datum/anvil_recipe/armor/helmetslitkettle + name = "Slitted Kettle helmet" + recipe_name = "a slitted kettle helmets" + req_bar = /obj/item/ingot/steel + created_item = /obj/item/clothing/head/roguetown/helmet/kettle/slit + craftdiff = 2 + +/datum/anvil_recipe/armor/froghelmet + name = "Frog helmet" + recipe_name = "a frog helmet" + req_bar = /obj/item/ingot/steel + created_item = (/obj/item/clothing/head/roguetown/helmet/heavy/frog) craftdiff = 2 /datum/anvil_recipe/armor/helmetknight @@ -256,14 +249,6 @@ created_item = (/obj/item/clothing/head/roguetown/helmet/visored/knight) craftdiff = 3 -/datum/anvil_recipe/armor/helmetnasal - name = "Nasal helmet x2" - recipe_name = "a pair of Nasal Helmets" - req_bar = /obj/item/ingot/steel - created_item = /obj/item/clothing/head/roguetown/helmet - createmultiple = TRUE - createditem_num = 1 - craftdiff = 2 /datum/anvil_recipe/armor/hounskull name = "Hounskull helmet (3)" @@ -282,12 +267,10 @@ craftdiff = 4 /datum/anvil_recipe/armor/platebracer - name = "Plate vambraces x2" - recipe_name = "a couple of Plate Vambraces" + name = "Plate vambraces" + recipe_name = "Plate Vambraces" req_bar = /obj/item/ingot/steel created_item = /obj/item/clothing/wrists/roguetown/bracers - createmultiple = TRUE - createditem_num = 1 craftdiff = 3 /datum/anvil_recipe/armor/plateleg @@ -301,7 +284,7 @@ /datum/anvil_recipe/armor/plateglove name = "Plate gauntlets" - recipe_name = "some Plate Gauntlets" + recipe_name = "a pair of Plate Gauntlets" req_bar = /obj/item/ingot/steel created_item = /obj/item/clothing/gloves/roguetown/plate craftdiff = 3 @@ -320,6 +303,13 @@ created_item = /obj/item/clothing/head/roguetown/helmet/sallet craftdiff = 2 +/datum/anvil_recipe/armor/bascinet + name = "Bascinet" + recipe_name = "a bascinet" + req_bar = /obj/item/ingot/steel + created_item = /obj/item/clothing/head/roguetown/helmet/bascinet + craftdiff = 2 + /datum/anvil_recipe/armor/scalemail name = "Scalemail" recipe_name = "a Scalemail" @@ -342,7 +332,6 @@ additional_items = list(/obj/item/ingot/steel,/obj/item/natural/cloth) created_item = /obj/item/clothing/head/roguetown/helmet/heavy/decorated/knight craftdiff = 4 - i_type = "Armor" /datum/anvil_recipe/armor/decoratedhelmetpig name = "Decorated Pigface Helmet (2) (c)" @@ -350,7 +339,6 @@ additional_items = list(/obj/item/ingot/steel,/obj/item/natural/cloth) created_item = /obj/item/clothing/head/roguetown/helmet/heavy/decorated/hounskull craftdiff = 3 - i_type = "Armor" /datum/anvil_recipe/armor/decoratedhelmetbuc name = "Decorated Bucket Helmet (2) (c)" @@ -358,14 +346,21 @@ additional_items = list(/obj/item/ingot/steel,/obj/item/natural/cloth) created_item = /obj/item/clothing/head/roguetown/helmet/heavy/decorated/bucket craftdiff = 3 - i_type = "Armor" /datum/anvil_recipe/armor/decoratedhelmetbucgold - name = "Decorated Gold-Trimmed Bucket Helmet (2) (c)" + name = "Decorated Gold-Trimmed Bucket Helmet (3) (c)" req_bar = /obj/item/ingot/steel - additional_items = list(/obj/item/ingot/steel,/obj/item/natural/cloth) + additional_items = list(/obj/item/ingot/steel,/obj/item/ingot/gold,/obj/item/natural/cloth) created_item = /obj/item/clothing/head/roguetown/helmet/heavy/decorated/golden craftdiff = 3 + +/datum/anvil_recipe/armor/decoratedbascinet + name = "Decorated Bascinet (c)" + recipe_name = "a decorated bascinet" + req_bar = /obj/item/ingot/steel + additional_items = list(/obj/item/ingot/steel,/obj/item/natural/cloth) + created_item = /obj/item/clothing/head/roguetown/helmet/heavy/decorated/bascinet + craftdiff = 2 i_type = "Armor" //Kaizoku Smithing content. I humbly ask for help; A way in which only people with the trait "Kaizoku", being the ones able to make Kaizoku weapons and armor. In another hand, diff --git a/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/tools.dm b/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/tools.dm index ad157e5845..cdaf468b1c 100644 --- a/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/tools.dm +++ b/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/tools.dm @@ -199,6 +199,24 @@ created_item = /obj/item/rogueweapon/tongs i_type = "Tools" +/datum/anvil_recipe/tools/handsaw + name = "handsaw (+s)" + recipe_name = "a handsaw" + req_bar = /obj/item/ingot/iron + additional_items = list(/obj/item/grown/log/tree/stick) + created_item = /obj/item/rogueweapon/handsaw + i_type = "Tools" + +/datum/anvil_recipe/tools/chisel + name = "chisel (+s) x2" + recipe_name = " chisel" + req_bar = /obj/item/ingot/iron + additional_items = list(/obj/item/grown/log/tree/stick) + created_item = /obj/item/rogueweapon/chisel + createmultiple = TRUE + createditem_num = 2 + i_type = "Tools" + /datum/anvil_recipe/tools/torch name = "Torches x5 (+c)" recipe_name = "five Torches" diff --git a/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/weapons.dm b/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/weapons.dm index c875657705..9cda7957f2 100644 --- a/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/weapons.dm +++ b/code/modules/roguetown/roguejobs/blacksmith/anvil_recipes/weapons.dm @@ -10,7 +10,7 @@ recipe_name = "a Silver Dagger" appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/silver - created_item = /obj/item/rogueweapon/huntingknife/idagger/silver + created_item = /obj/item/rogueweapon/knife/dagger/silver craftdiff = 2 /datum/anvil_recipe/weapons/sword_silver @@ -21,14 +21,6 @@ created_item = /obj/item/rogueweapon/sword/silver craftdiff = 3 -/datum/anvil_recipe/weapons/shortsword_silver - name = "Silver Shortsword" - recipe_name = "a Silver Short Sword" - appro_skill = /datum/skill/craft/weaponsmithing - req_bar = /obj/item/ingot/silver - created_item = /obj/item/rogueweapon/sword/short/silver - craftdiff = 2 - /datum/anvil_recipe/weapons/rapier_silver name = "Silver Rapier" recipe_name = "a Silver Rapier" @@ -54,7 +46,7 @@ appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/copper additional_items = list(/obj/item/ingot/copper) - created_item = /obj/item/rogueweapon/copperaxe + created_item = /obj/item/rogueweapon/axe/copper craftdiff = 0 /datum/anvil_recipe/weapons/cbludgeon @@ -63,7 +55,7 @@ appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/copper additional_items = list(/obj/item/grown/log/tree/stick) - created_item = /obj/item/rogueweapon/mace/copperbludgeon + created_item = /obj/item/rogueweapon/mace/cudgel/bludgeon craftdiff = 0 /datum/anvil_recipe/weapons/cdagger @@ -71,7 +63,7 @@ recipe_name = "a couple Daggers" appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/copper - created_item = /obj/item/rogueweapon/copperdagger + created_item = /obj/item/rogueweapon/knife/copper createmultiple = TRUE createditem_num = 1 craftdiff = 0 @@ -100,7 +92,7 @@ appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/copper additional_items = list(/obj/item/grown/log/tree/small) - created_item = /obj/item/rogueweapon/copperspear + created_item = /obj/item/rogueweapon/polearm/spear/stone/copper createmultiple = TRUE createditem_num = 1 craftdiff = 0 @@ -134,7 +126,7 @@ appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/iron additional_items = list(/obj/item/grown/log/tree/stick) - created_item = /obj/item/rogueweapon/woodcut + created_item = /obj/item/rogueweapon/axe/iron /datum/anvil_recipe/weapons/bardiche name = "Bardiche (2) (+w)" @@ -142,7 +134,7 @@ appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/iron additional_items = list(/obj/item/ingot/iron,/obj/item/grown/log/tree/small) - created_item = /obj/item/rogueweapon/halberd/bardiche + created_item = /obj/item/rogueweapon/polearm/halberd/bardiche craftdiff = 2 /datum/anvil_recipe/weapons/woodcutter @@ -151,7 +143,7 @@ appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/iron additional_items = list(/obj/item/grown/log/tree/small) - created_item = /obj/item/rogueweapon/halberd/bardiche/woodcutter + created_item = /obj/item/rogueweapon/polearm/halberd/bardiche/woodcutter craftdiff = 1 /datum/anvil_recipe/weapons/warcutter @@ -160,7 +152,7 @@ appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/iron additional_items = list(/obj/item/ingot/iron,/obj/item/grown/log/tree/small) - created_item = /obj/item/rogueweapon/halberd/bardiche/warcutter + created_item = /obj/item/rogueweapon/polearm/halberd/bardiche/warcutter craftdiff = 2 /datum/anvil_recipe/weapons/bolts @@ -191,7 +183,7 @@ recipe_name = "a couple Daggers" appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/iron - created_item = /obj/item/rogueweapon/huntingknife/idagger + created_item = /obj/item/rogueweapon/knife/dagger createmultiple = TRUE createditem_num = 1 craftdiff = 0 // To train with @@ -201,7 +193,7 @@ recipe_name = "three peasantry knives" appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/iron - created_item = /obj/item/rogueweapon/huntingknife/villager + created_item = /obj/item/rogueweapon/knife/villager createmultiple = TRUE createditem_num = 2 craftdiff = 0 @@ -220,7 +212,7 @@ appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/iron additional_items = list(/obj/item/ingot/iron,/obj/item/grown/log/tree/small) - created_item = /obj/item/rogueweapon/eaglebeak/lucerne + created_item = /obj/item/rogueweapon/polearm/eaglebeak/lucerne craftdiff = 2 /datum/anvil_recipe/weapons/sledgehammer @@ -243,7 +235,7 @@ name = "Messer" recipe_name = "a Messer" req_bar = /obj/item/ingot/iron - created_item = /obj/item/rogueweapon/sword/iron/messer + created_item = /obj/item/rogueweapon/sword/scimitar/messer /datum/anvil_recipe/weapons/spear_iron name = "Spear x2 (+w)" @@ -251,7 +243,7 @@ appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/iron additional_items = list(/obj/item/grown/log/tree/small) - created_item = /obj/item/rogueweapon/spear + created_item = /obj/item/rogueweapon/polearm/spear createmultiple = TRUE createditem_num = 1 @@ -259,7 +251,7 @@ name = "Short sword" recipe_name = "a Short Sword" req_bar = /obj/item/ingot/iron - created_item = /obj/item/rogueweapon/sword/iron/short + created_item = /obj/item/rogueweapon/sword/short craftdiff = 0 /datum/anvil_recipe/weapons/sword_iron @@ -270,18 +262,18 @@ created_item = /obj/item/rogueweapon/sword/iron /datum/anvil_recipe/weapons/sword_iron - name = "Estoc" + name = "Florete" recipe_name = "a Duelist Sword" appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/iron - created_item = /obj/item/rogueweapon/sword/rapier/ironestoc + created_item = /obj/item/rogueweapon/sword/rapier/iron /datum/anvil_recipe/weapons/towershield name = "Tower Shield (+w)" recipe_name = "a Tower Shield" appro_skill = /datum/skill/craft/armorsmithing req_bar = /obj/item/ingot/iron - additional_items = list(/obj/item/grown/log/tree/small) + additional_items = list(/obj/item/natural/plankshort, /obj/item/natural/plankshort) created_item = /obj/item/rogueweapon/shield/tower craftdiff = 2 @@ -308,7 +300,7 @@ appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/iron additional_items = list(/obj/item/ingot/iron, /obj/item/ingot/iron) - created_item = /obj/item/rogueweapon/greatsword/zwei + created_item = /obj/item/rogueweapon/sword/long/greatsword/zwei craftdiff = 3 // STEEL GEAR - Fancy shit for Knights @@ -319,7 +311,7 @@ appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/steel additional_items = list(/obj/item/grown/log/tree/stick) - created_item = /obj/item/rogueweapon/woodcut/steel + created_item = /obj/item/rogueweapon/axe/steel craftdiff = 2 /datum/anvil_recipe/weapons/warhammer @@ -337,7 +329,7 @@ appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/steel additional_items = list(/obj/item/ingot/steel) - created_item = /obj/item/rogueweapon/battle + created_item = /obj/item/rogueweapon/axe/battle craftdiff = 3 /datum/anvil_recipe/weapons/billhook @@ -346,7 +338,7 @@ appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/steel additional_items = list(/obj/item/grown/log/tree/small) - created_item = /obj/item/rogueweapon/spear/billhook + created_item = /obj/item/rogueweapon/polearm/spear/billhook craftdiff = 3 /datum/anvil_recipe/weapons/cleaver @@ -354,7 +346,7 @@ recipe_name = "a Cleaver" appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/steel - created_item = /obj/item/rogueweapon/huntingknife/cleaver + created_item = /obj/item/rogueweapon/knife/cleaver craftdiff = 1 /datum/anvil_recipe/weapons/crossbow_eng @@ -362,7 +354,7 @@ recipe_name = "a Crossbow" appro_skill = /datum/skill/craft/engineering req_bar = /obj/item/ingot/steel - additional_items = list(/obj/item/grown/log/tree/small, /obj/item/natural/fibers) + additional_items = list(/obj/item/natural/plank, /obj/item/natural/fibers) created_item = /obj/item/gun/ballistic/revolver/grenadelauncher/crossbow craftdiff = 1 // Minimal engineering needed @@ -371,7 +363,7 @@ recipe_name = "a Cutlass" appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/steel - created_item = /obj/item/rogueweapon/sword/cutlass + created_item = /obj/item/rogueweapon/sword/sabre/cutlass craftdiff = 2 /datum/anvil_recipe/weapons/dagger_steel @@ -379,7 +371,7 @@ recipe_name = "a couple Daggers" appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/steel - created_item = /obj/item/rogueweapon/huntingknife/idagger/steel + created_item = /obj/item/rogueweapon/knife/dagger/steel createmultiple = TRUE createditem_num = 1 craftdiff = 2 @@ -417,7 +409,7 @@ appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/steel additional_items = list(/obj/item/ingot/steel,/obj/item/grown/log/tree/small) - created_item = /obj/item/rogueweapon/eaglebeak + created_item = /obj/item/rogueweapon/polearm/eaglebeak craftdiff = 3 /datum/anvil_recipe/weapons/flail_steel @@ -443,7 +435,7 @@ appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/steel additional_items = list(/obj/item/ingot/steel, /obj/item/ingot/steel) - created_item = /obj/item/rogueweapon/greatsword + created_item = /obj/item/rogueweapon/sword/long/greatsword craftdiff = 4 /datum/anvil_recipe/weapons/halberd @@ -452,7 +444,7 @@ appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/steel additional_items = list(/obj/item/ingot/steel,/obj/item/grown/log/tree/small) - created_item = /obj/item/rogueweapon/halberd + created_item = /obj/item/rogueweapon/polearm/halberd craftdiff = 4 /datum/anvil_recipe/weapons/huntknife @@ -460,7 +452,7 @@ recipe_name = "a Hunting Knife" appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/steel - created_item = /obj/item/rogueweapon/huntingknife + created_item = /obj/item/rogueweapon/knife/hunting craftdiff = 2 /datum/anvil_recipe/weapons/kiteshield @@ -494,7 +486,7 @@ name = "Peasant Flail (+c) (+w)" recipe_name = "a two-handed flail" appro_skill = /datum/skill/craft/weaponsmithing - req_bar = /obj/item/ingot/steel + req_bar = /obj/item/ingot/iron additional_items = list(/obj/item/rope/chain, /obj/item/grown/log/tree/small) created_item = /obj/item/rogueweapon/flail/peasant craftdiff = 3 @@ -537,7 +529,7 @@ recipe_name = "a Sword" appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/steel - created_item = /obj/item/rogueweapon/sword + created_item = /obj/item/rogueweapon/sword/arming craftdiff = 2 /datum/anvil_recipe/weapons/scimitar_steel @@ -553,7 +545,7 @@ recipe_name = "a heavy one handed sword" appro_skill = /datum/skill/craft/weaponsmithing req_bar = /obj/item/ingot/steel - created_item = /obj/item/rogueweapon/sword/sabre/messer + created_item = /obj/item/rogueweapon/sword/scimitar/falchion craftdiff = 2 //Kaizoku Smithing content. I humbly ask for help; A way in which only people with the trait "Kaizoku", being the ones able to make Kaizoku weapons and armor. In another hand, diff --git a/code/modules/roguetown/roguejobs/blacksmith/smelter.dm b/code/modules/roguetown/roguejobs/blacksmith/smelter.dm index 59a4b42abd..62464f59e7 100644 --- a/code/modules/roguetown/roguejobs/blacksmith/smelter.dm +++ b/code/modules/roguetown/roguejobs/blacksmith/smelter.dm @@ -18,7 +18,7 @@ var/maxore = 1 var/cooking = 0 var/actively_smelting = FALSE // Are we currently smelting? - fueluse = 5 MINUTES + fueluse = 30 MINUTES crossfire = FALSE /obj/machinery/light/rogue/smelter/attackby(obj/item/W, mob/living/user, params) @@ -66,8 +66,8 @@ if(smelter_exp < 6) ore[W] = floor(rand(smelter_exp*15, max(63, smelter_exp*25))/25) // Math explained below else - ore[W] = floor(min(3, smelter_exp)) // Guarantees a return of 3 no matter how extra experience past 3000 you have. - /* + ore[W] = floor(min(3, smelter_exp)) // Guarantees a return of 3 no matter how extra experience past 3000 you have. + /* RANDOMLY PICKED NUMBER ACCORDING TO SMELTER SKILL: NO SKILL: between 00 and 63 WEAK: between 15 and 63 @@ -76,7 +76,7 @@ EXPERT: between 60 and 100 MASTER: between 75 and 125 LEGENDARY: between 90 and 150 - + PICKED NUMBER GETS DIVIDED BY 25 AND ROUNDED DOWN TO CLOSEST INTEGER. RESULT DETERMINES QUALITY OF BAR. SEE code/__DEFINES/skills.dm 0 = SPOILED @@ -172,7 +172,7 @@ alloy = null if(alloy) // The smelting quality of all ores added together, divided by the number of ores, and then rounded to the lowest integer (this isn't done until after the for loop) - var/floor_mean_quality = SMELTERY_LEVEL_SPOIL + var/floor_mean_quality = SMELTERY_LEVEL_SPOIL var/ore_deleted = 0 for(var/obj/item/I in ore) floor_mean_quality += ore[I] diff --git a/code/modules/roguetown/roguejobs/blacksmith/tools.dm b/code/modules/roguetown/roguejobs/blacksmith/tools.dm index 77ac070416..84af7a81eb 100644 --- a/code/modules/roguetown/roguejobs/blacksmith/tools.dm +++ b/code/modules/roguetown/roguejobs/blacksmith/tools.dm @@ -202,7 +202,7 @@ force = 15 force_wielded = 25 possible_item_intents = list(/datum/intent/mace/strike) - gripped_intents = list(/datum/intent/mace/heavy/strike, /datum/intent/mace/heavy/smash) + gripped_intents = list(/datum/intent/mace/strike/heavy, /datum/intent/mace/smash/heavy) name = "sledgehammer" desc = "It's almost asking to be put to work." icon_state = "sledgehammer" @@ -232,7 +232,7 @@ force = 15 force_wielded = 30 possible_item_intents = list(/datum/intent/mace/strike) - gripped_intents = list(/datum/intent/mace/heavy/strike, /datum/intent/mace/heavy/smash) + gripped_intents = list(/datum/intent/mace/strike/heavy, /datum/intent/mace/smash/heavy) name = "steel warhammer" desc = "A heavy steel warhammer, a weapon designed to make knights run in fear, the best option for a common soldier against a knight." icon_state = "warbonker" diff --git a/code/modules/roguetown/roguejobs/cook/tools/pot.dm b/code/modules/roguetown/roguejobs/cook/tools/pot.dm index db48544709..89a67b4750 100644 --- a/code/modules/roguetown/roguejobs/cook/tools/pot.dm +++ b/code/modules/roguetown/roguejobs/cook/tools/pot.dm @@ -10,18 +10,85 @@ slot_flags = null w_class = WEIGHT_CLASS_BULKY drop_sound = 'sound/foley/dropsound/shovel_drop.ogg' + var/processing_amount = 0 ///we use this to "reserve" reagents + var/list/in_progress_recipes = list() //these are unique creations only ever used + var/static/list/checker_recipes = list() + +/obj/item/reagent_containers/glass/bucket/pot/Destroy() + . = ..() + in_progress_recipes = null + +/obj/item/reagent_containers/glass/bucket/pot/proc/attempt_pot_recipes(obj/item/attacked_item, mob/living/user) + var/water_amount = reagents.get_reagent_amount(/datum/reagent/water) + water_amount -= processing_amount + + if(!length(checker_recipes)) + for(var/datum/pot_recipe/recipe as anything in typesof(/datum/pot_recipe)) + if(is_abstract(recipe)) + continue + checker_recipes |= new recipe + + for(var/datum/pot_recipe/recipe as anything in in_progress_recipes) + for(var/required_type as anything in recipe.required_items) + if(!istype(attacked_item, required_type)) + continue + qdel(attacked_item) + user.visible_message("[user] places [attacked_item] into the pot.") + playsound(get_turf(src), 'sound/items/Fish_out.ogg', 20, TRUE) + recipe.required_items[required_type]-- + if(recipe.required_items[required_type] <= 0) + recipe.required_items -= required_type + break + if(!length(recipe.required_items) && !recipe.cooking) + recipe.start_cooking(src, user) + return TRUE + + var/datum/pot_recipe/fallback + var/datum/pot_recipe/recipe_type + ///this is wonky but we always check for the first item, so we don't need to radial soups because that would suck + for(var/datum/pot_recipe/recipe as anything in checker_recipes) + var/obj/item/first_type = recipe.required_items[1] + if(water_amount < recipe.water_volume) + continue //lack of water + if(!istype(attacked_item, first_type)) + continue + + if(recipe.fallback) + fallback = recipe.type + continue + recipe_type = recipe.type + + if(!recipe_type) + recipe_type = fallback + + if(!recipe_type) + return FALSE + + var/datum/pot_recipe/created_recipe = new recipe_type + var/obj/item/first_type = created_recipe.required_items[1] + in_progress_recipes |= created_recipe + qdel(attacked_item) + user.visible_message("[user] places [attacked_item] into the pot.") + playsound(get_turf(src), 'sound/items/Fish_out.ogg', 20, TRUE) + created_recipe.required_items[first_type]-- + if(created_recipe.required_items[first_type] <= 0) + created_recipe.required_items -= first_type + if(!length(created_recipe.required_items) && !created_recipe.cooking) + created_recipe.start_cooking(src, user) + return TRUE + return TRUE /obj/item/reagent_containers/glass/bucket/pot/update_icon() cut_overlays() - if(reagents.total_volume > 0) - if(reagents.total_volume <= 50) + if(reagents.total_volume > 0) + if(reagents.total_volume <= 50) var/mutable_appearance/filling = mutable_appearance('modular/Neu_Food/icons/cooking.dmi', "pote_half") filling.color = mix_color_from_reagents(reagents.reagent_list) filling.alpha = mix_alpha_from_reagents(reagents.reagent_list) add_overlay(filling) - if(reagents.total_volume > 50) + if(reagents.total_volume > 50) var/mutable_appearance/filling = mutable_appearance('modular/Neu_Food/icons/cooking.dmi', "pote_full") filling.color = mix_color_from_reagents(reagents.reagent_list) filling.alpha = mix_alpha_from_reagents(reagents.reagent_list) @@ -37,7 +104,7 @@ return TRUE /obj/item/reagent_containers/glass/bucket/pot/throw_impact(atom/hit_atom, datum/thrownthing/thrownthing) - if(reagents.total_volume > 5) + if(reagents.total_volume > 5) new /obj/effect/decal/cleanable/food/mess/soup(get_turf(src)) ..() @@ -48,3 +115,183 @@ if("gen") return list("shrink" = 0.5,"sx" = -5,"sy" = -8,"nx" = 7,"ny" = -9,"wx" = -1,"wy" = -8,"ex" = -1,"ey" = -8,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0) +///this is where pot recipes go + +/datum/pot_recipe + abstract_type = /datum/pot_recipe + var/datum/reagent/produced_reagent + var/water_volume = 33 + ///cannot be greated then 1 as we don't extra reserve. + var/water_conversion = 1 + + var/list/required_items = list() + + var/obj/item/reagent_containers/glass/bucket/pot/cooking_pot + var/cooking_time = 30 SECONDS + ///we spawn a burst of this as it finishes cooking + var/datum/pollutant/finished_smell + ///are we cooking? + var/cooking = FALSE + ///are we a fallback recipe (only picked if no recipe at all left) + var/fallback = FALSE + ///the amount we pollute + var/pollute_amount = 600 + +/datum/pot_recipe/proc/start_cooking(obj/item/reagent_containers/glass/bucket/pot, mob/living/user) + cooking_pot = pot + RegisterSignal(cooking_pot, COMSIG_PARENT_QDELETING, PROC_REF(end_recipe)) + + var/real_cooking_time = cooking_time + if(user.mind) + real_cooking_time /= 1 + (user.mind.get_skill_level(/datum/skill/craft/cooking) * 0.5) + real_cooking_time = round(real_cooking_time) + + cooking = TRUE + cooking_pot.processing_amount += water_volume + addtimer(CALLBACK(src, PROC_REF(finish_cooking)), cooking_time) + + +/datum/pot_recipe/proc/end_recipe() + cooking_pot.in_progress_recipes -= src + cooking_pot = null + cooking = FALSE + qdel(src) + +/datum/pot_recipe/proc/finish_cooking() + if(!cooking_pot) + return + + var/turf/pot_turf = get_turf(cooking_pot) + if(finished_smell) + pot_turf.pollute_turf(finished_smell, pollute_amount) + playsound(pot_turf, "bubbles", 30, TRUE) + + cooking_pot.processing_amount -= water_volume + cooking_pot.reagents.remove_reagent(/datum/reagent/water, water_volume) + cooking_pot.reagents.add_reagent(produced_reagent, CEILING(water_volume * water_conversion, 1)) + + post_recipe() //mainly useful for drugs where we take the remainder of the water and turn it spicy + end_recipe() + +/datum/pot_recipe/proc/post_recipe() + return + +/datum/pot_recipe/oatmeal + produced_reagent = /datum/reagent/consumable/soup/oatmeal + required_items = list(/obj/item/reagent_containers/food/snacks/produce/oat = 1) + finished_smell = /datum/pollutant/food/oatmeal + +/datum/pot_recipe/potato_stew + cooking_time = 80 SECONDS + produced_reagent = /datum/reagent/consumable/soup/veggie/potato + required_items = list(/obj/item/reagent_containers/food/snacks/rogue/veg/potato_sliced = 1) + finished_smell = /datum/pollutant/food/potato_stew + +/datum/pot_recipe/onion_stew + cooking_time = 60 SECONDS + produced_reagent = /datum/reagent/consumable/soup/veggie/onion + required_items = list(/obj/item/reagent_containers/food/snacks/rogue/veg/onion_sliced = 1) + finished_smell = /datum/pollutant/food/onion_stew + +/datum/pot_recipe/cabbage_stew + cooking_time = 70 SECONDS + produced_reagent = /datum/reagent/consumable/soup/veggie/cabbage + required_items = list(/obj/item/reagent_containers/food/snacks/rogue/veg/cabbage_sliced = 1) + finished_smell = /datum/pollutant/food/cabbage_stew + +/datum/pot_recipe/turnip_stew + cooking_time = 70 SECONDS + produced_reagent = /datum/reagent/consumable/soup/veggie/turnip + required_items = list(/obj/item/reagent_containers/food/snacks/rogue/veg/turnip_sliced = 1) + finished_smell = /datum/pollutant/food/turnip_stew + +/datum/pot_recipe/egg_soup + cooking_time = 80 SECONDS + produced_reagent = /datum/reagent/consumable/soup/egg + required_items = list(/obj/item/reagent_containers/food/snacks/egg = 1) + finished_smell = /datum/pollutant/food/egg_soup + +/datum/pot_recipe/cheese_soup + cooking_time = 80 SECONDS + produced_reagent = /datum/reagent/consumable/soup/cheese + required_items = list(/obj/item/reagent_containers/food/snacks/rogue/cheese = 1) + finished_smell = /datum/pollutant/food/cheese_soup + +/datum/pot_recipe/cheese_soup/wedge + required_items = list(/obj/item/reagent_containers/food/snacks/rogue/cheddarwedge = 1) + +/datum/pot_recipe/chicken_stew + cooking_time = 90 SECONDS + produced_reagent = /datum/reagent/consumable/soup/stew/chicken + required_items = list(/obj/item/reagent_containers/food/snacks/rogue/meat/mince/poultry = 1) + finished_smell = /datum/pollutant/food/chicken_stew + +/datum/pot_recipe/chicken_stew/cutlet + required_items = list(/obj/item/reagent_containers/food/snacks/rogue/meat/poultry/cutlet = 1) + +/datum/pot_recipe/generic_meat_stew + cooking_time = 90 SECONDS + produced_reagent = /datum/reagent/consumable/soup/stew/meat + required_items = list(/obj/item/reagent_containers/food/snacks/rogue/meat = 1) + finished_smell = /datum/pollutant/food/meat_stew + fallback = TRUE + +/datum/pot_recipe/fish_stew + cooking_time = 80 SECONDS + produced_reagent = /datum/reagent/consumable/soup/stew/fish + required_items = list(/obj/item/reagent_containers/food/snacks/rogue/meat/mince/fish = 1) + finished_smell = /datum/pollutant/food/fish_stew + +/datum/pot_recipe/truffle_stew + cooking_time = 80 SECONDS + produced_reagent = /datum/reagent/consumable/soup/stew/truffle + required_items = list(/obj/item/reagent_containers/food/snacks/rogue/truffles = 1) + finished_smell = /datum/pollutant/food/truffle_stew + +/datum/pot_recipe/gross_stew + cooking_time = 60 SECONDS + produced_reagent = /datum/reagent/consumable/soup/stew/gross + required_items = list(/obj/item/reagent_containers/food/snacks/smallrat/dead = 1) + +/datum/pot_recipe/gross_stew/bad_recipe + required_items = list(/obj/item/reagent_containers/food/snacks/badrecipe = 1) + +/datum/pot_recipe/drugs + cooking_time = 50 SECONDS + water_conversion = 0.45 + produced_reagent = /datum/reagent/druqks + required_items = list(/obj/item/reagent_containers/powder/spice = 1) + finished_smell = /datum/pollutant/food/druqks + pollute_amount = 100 + +/datum/pot_recipe/drugs/post_recipe() + var/remaining_water = water_volume - CEILING(water_volume * water_conversion, 1) + cooking_pot.reagents.add_reagent(/datum/reagent/water/spicy, remaining_water) + +/datum/pot_recipe/yuck_soup + cooking_time = 60 SECONDS + produced_reagent = /datum/reagent/yuck/cursed_soup + required_items = list(/obj/item/reagent_containers/food/snacks/produce/jacksberry/poison = 1) + +/datum/pot_recipe/yuck_soup/poo + required_items = list(/obj/item/natural/poo = 1) + +/datum/pot_recipe/yuck_soup/toxicshrooms + required_items = list(/obj/item/reagent_containers/food/snacks/rogue/toxicshrooms = 1) + +/datum/pot_recipe/yuck_soup/worms + required_items = list(/obj/item/natural/worms = 1) + +/datum/pot_recipe/yuck_soup/rotten_food + required_items = list(/obj/item/reagent_containers/food/snacks/rotten = 1) + +/datum/pot_recipe/yuck_soup/organ + required_items = list(/obj/item/organ = 1) + +/datum/pot_recipe/yuck_soup/spider + required_items = list(/obj/item/reagent_containers/food/snacks/rogue/meat/spider = 1) + fallback = TRUE + +/datum/pot_recipe/yuck_soup/living_rat + required_items = list(/obj/item/reagent_containers/food/snacks/smallrat = 1) + fallback = TRUE diff --git a/code/modules/roguetown/roguejobs/craftsman/tools.dm b/code/modules/roguetown/roguejobs/craftsman/tools.dm new file mode 100644 index 0000000000..ae1afba5c5 --- /dev/null +++ b/code/modules/roguetown/roguejobs/craftsman/tools.dm @@ -0,0 +1,254 @@ +/obj/item/rogueweapon/handsaw + force = 5 + possible_item_intents = list(/datum/intent/mace/strike/shovel) + gripped_intents = null + name = "handsaw" + desc = "An iron saw for sawing wood." + icon_state = "handsaw" + icon = 'icons/roguetown/items/crafting.dmi' + sharpness = IS_SHARP + dropshrink = 0.9 + wdefense = 1 +// pixel_y = -16 +// pixel_x = -16 +// inhand_x_dimension = 64 +// inhand_y_dimension = 64 +// bigboy = TRUE + wlength = WLENGTH_LONG + w_class = WEIGHT_CLASS_NORMAL + slot_flags = ITEM_SLOT_BACK || ITEM_SLOT_HIP + swingsound = list('sound/combat/wooshes/blunt/shovel_swing.ogg','sound/combat/wooshes/blunt/shovel_swing2.ogg') + drop_sound = 'sound/foley/dropsound/shovel_drop.ogg' + smeltresult = /obj/item/ingot/iron + associated_skill = /datum/skill/combat/polearms + max_blade_int = 50 + +/obj/item/rogueweapon/handsaw/crude + name = "crude sawing tool" + desc = "A serrated piece of flint with a bone handle." + icon_state = "stonesaw" + wlength = WLENGTH_LONG + w_class = WEIGHT_CLASS_BULKY + force = 5 + smeltresult = /obj/item/ash + firefuel = 5 MINUTES + toolspeed = 3 + +/obj/item/rogueweapon/chisel + name = "chisel" + desc = "" + icon_state = "chisel" + icon = 'icons/roguetown/items/crafting.dmi' + force = 2 + throwforce = 2 + possible_item_intents = list(/datum/intent/stab, /datum/intent/pick) + gripped_intents = null + twohands_required = FALSE + sharpness = IS_SHARP + dropshrink = 0.9 + w_class = WEIGHT_CLASS_SMALL + wdefense = 1 + blade_dulling = 0 + max_integrity = 150 + slot_flags = ITEM_SLOT_MOUTH|ITEM_SLOT_HIP +// pixel_y = -16 +// pixel_x = -16 +// inhand_x_dimension = 64 +// inhand_y_dimension = 64 +// bigboy = TRUE + swingsound = list('sound/combat/wooshes/blunt/shovel_swing.ogg','sound/combat/wooshes/blunt/shovel_swing2.ogg') + drop_sound = 'sound/foley/dropsound/shovel_drop.ogg' + associated_skill = /datum/skill/combat/knives + max_blade_int = 50 + +/obj/item/natural/plank + name = "wooden plank" + desc = "A smooth wooden plank." + icon = 'icons/roguetown/items/crafting.dmi' + icon_state = "woodplank" + possible_item_intents = list(/datum/intent/use) + force = 10 + throwforce = 10 + attacked_sound = 'sound/misc/woodhit.ogg' + obj_flags = null + firefuel = 20 MINUTES + resistance_flags = FLAMMABLE + slot_flags = null + body_parts_covered = null + experimental_onhip = TRUE + max_integrity = 20 + muteinmouth = TRUE + w_class = WEIGHT_CLASS_BULKY + bundletype = /obj/item/natural/bundle/plank + +/obj/item/natural/plank/attackby(obj/item/I, mob/living/user, params) // remake to use /datum/intent/axe/cut or TO DO never do maybe + user.changeNext_move(CLICK_CD_MELEE) + if(istype(I, /obj/item/rogueweapon/axe)) + playsound(get_turf(src.loc), 'sound/items/wood_cutting.ogg', 100) + if(do_after(user, 8 SECONDS)) + user.visible_message("[user] crudely shortens the [src].") + new /obj/item/natural/plankshort(get_turf(src.loc)) + qdel(src) + if(istype(I, /obj/item/rogueweapon/polearm/halberd/bardiche)) + playsound(get_turf(src.loc), 'sound/items/wood_cutting.ogg', 100) + if(do_after(user, 8 SECONDS)) + user.visible_message("[user] crudely shortens the [src].") + new /obj/item/natural/plankshort(get_turf(src.loc)) + qdel(src) + if(istype(I, /obj/item/rogueweapon/handsaw)) + playsound(get_turf(src.loc), 'sound/items/sawing.ogg', 100) + if(do_after(user, 3 SECONDS)) + user.visible_message("[user] makes two shorter planks from [src].") + new /obj/item/natural/plankshort(get_turf(src.loc)) + new /obj/item/natural/plankshort(get_turf(src.loc)) + qdel(src) + ..() + +/obj/item/natural/plank/attack_right(mob/user) + to_chat(user, "I start to collect [src]...") + if(move_after(user, 5 SECONDS, target = src)) + var/plankcount = 0 + for(var/obj/item/natural/plank/F in get_turf(src)) + plankcount++ + while(plankcount > 0) + if(plankcount == 1) + new /obj/item/natural/plank(get_turf(user)) + plankcount-- + else if(plankcount >= 2) + var/obj/item/natural/bundle/plank/B = new(get_turf(user)) + B.amount = clamp(plankcount, 2, 3) + B.update_bundle() + plankcount -= clamp(plankcount, 2, 3) + for(var/obj/item/natural/plank/F in get_turf(src)) + qdel(F) + +/obj/item/natural/plankshort + name = "short wooden plank" + desc = "A smooth wooden plank that has been cut short." + force = 8 + throwforce = 8 + icon_state = "shortplank" + icon = 'icons/roguetown/items/crafting.dmi' + firefuel = 10 MINUTES + resistance_flags = FLAMMABLE + slot_flags = null + body_parts_covered = null + experimental_onhip = TRUE + max_integrity = 15 + muteinmouth = TRUE + w_class = WEIGHT_CLASS_NORMAL + bundletype = /obj/item/natural/bundle/plankshort + +/obj/item/natural/plankshort/attack_right(mob/user) + to_chat(user, "I start to collect [src]...") + if(move_after(user, 5 SECONDS, target = src)) + var/splankcount = 0 + for(var/obj/item/natural/plank/F in get_turf(src)) + splankcount++ + while(splankcount > 0) + if(splankcount == 1) + new /obj/item/natural/plankshort(get_turf(user)) + splankcount-- + else if(splankcount >= 2) + var/obj/item/natural/bundle/plankshort/B = new(get_turf(user)) + B.amount = clamp(splankcount, 2, 3) + B.update_bundle() + splankcount -= clamp(splankcount, 2, 3) + for(var/obj/item/natural/plankshort/F in get_turf(src)) + qdel(F) + + +/obj/item/natural/stoneblock + name = "stone block" + desc = "A rectangular stone block for building." + icon = 'icons/roguetown/items/crafting.dmi' + icon_state = "stoneblock" + gripped_intents = null + possible_item_intents = list(INTENT_GENERIC) + force = 12 + throwforce = 20 //brick is valid weapon + slot_flags = null + obj_flags = null + w_class = WEIGHT_CLASS_SMALL + bundletype = /obj/item/natural/bundle/stoneblock + +/obj/item/natural/stoneblock/attack_right(mob/user) + to_chat(user, "I start to collect [src]...") + if(move_after(user, 5 SECONDS, target = src)) + var/blockcount = 0 + for(var/obj/item/natural/stoneblock/F in get_turf(src)) + blockcount++ + while(blockcount > 0) + if(blockcount == 1) + new /obj/item/natural/stoneblock(get_turf(user)) + blockcount-- + else if(blockcount >= 2) + var/obj/item/natural/bundle/stoneblock/B = new(get_turf(user)) + B.amount = clamp(blockcount, 2, 3) + B.update_bundle() + blockcount -= clamp(blockcount, 2, 3) + for(var/obj/item/natural/stoneblock/F in get_turf(src)) + qdel(F) + +/obj/item/natural/bundle/plank + name = "stack of wooden planks" + desc = "A stack of wooden planks." + icon_state = "woodplankbundle1" + icon = 'icons/roguetown/items/crafting.dmi' + possible_item_intents = list(/datum/intent/use) + force = 15 + throwforce = 18 + throw_range = 2 + firefuel = null + resistance_flags = null + firemod = null + w_class = WEIGHT_CLASS_HUGE + stackname = "plank" + stacktype = /obj/item/natural/plank + maxamount = 3 + icon1 = "woodplankbundle1" + icon1step = 2 + icon2 = "woodplankbundle2" + icon2step = 3 + +/obj/item/natural/bundle/plankshort + name = "stack of short wooden planks" + desc = "A stack of short wooden planks." + icon_state = "shortplankbundle1" + icon = 'icons/roguetown/items/crafting.dmi' + possible_item_intents = list(/datum/intent/use) + force = 15 + throwforce = 18 + throw_range = 2 + firefuel = null + resistance_flags = null + firemod = null + w_class = WEIGHT_CLASS_HUGE + stackname = "planks" + stacktype = /obj/item/natural/plankshort + maxamount = 3 + icon1 = "shortplankbundle1" + icon1step = 2 + icon2 = "shortplankbundle2" + icon2step = 3 + +/obj/item/natural/bundle/stoneblock + name = "stack of stone blocks" + desc = "A stack of stone blocks." + icon_state = "stoneblockbundle1" + icon = 'icons/roguetown/items/crafting.dmi' + possible_item_intents = list(/datum/intent/use) + force = 15 + throwforce = 18 + throw_range = 2 + firefuel = null + resistance_flags = null + firemod = null + w_class = WEIGHT_CLASS_HUGE + stackname = "stone blocks" + stacktype = /obj/item/natural/stoneblock + maxamount = 3 + icon1 = "stoneblockbundle1" + icon1step = 2 + icon2 = "stoneblockbundle2" + icon2step = 3 diff --git a/code/modules/roguetown/roguejobs/farmer/tools.dm b/code/modules/roguetown/roguejobs/farmer/tools.dm index 1b6732463b..5ebcf27cc3 100644 --- a/code/modules/roguetown/roguejobs/farmer/tools.dm +++ b/code/modules/roguetown/roguejobs/farmer/tools.dm @@ -1,90 +1,28 @@ -/* -/obj/item/rogueweapon/thresher - force = 10 - force_wielded = 15 - possible_item_intents = list(MACE_STRIKE) - gripped_intents = list(MACE_STRIKE,/datum/intent/flailthresh) - name = "thresher" - desc = "" - icon_state = "thresher" - icon = 'icons/roguetown/weapons/64.dmi' - sharpness = IS_BLUNT - dropshrink = 0.8 - pixel_y = -16 - pixel_x = -16 - inhand_x_dimension = 64 - inhand_y_dimension = 64 - bigboy = TRUE - wlength = WLENGTH_LONG - w_class = WEIGHT_CLASS_BULKY - walking_stick = TRUE - wdefense = 2 - minstr = 6 - slot_flags = ITEM_SLOT_BACK - wlength = 66 - gripsprite = TRUE - drop_sound = 'sound/foley/dropsound/wooden_drop.ogg' - smeltresult = /obj/item/ingot/iron - associated_skill = /datum/skill/combat/whipsflails - -/datum/intent/flailthresh - name = "thresh" - icon_state = "inthresh" - chargetime = 0 - noaa = TRUE - candodge = FALSE - misscost = 0 - no_attack = TRUE - -/obj/item/rogueweapon/thresher/getonmobprop(tag) - . = ..() - if(tag) - switch(tag) - if("gen") - return list("shrink" = 0.7,"sx" = -7,"sy" = 0,"nx" = 8,"ny" = 0,"wx" = -5,"wy" = 0,"ex" = 0,"ey" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -38,"sturn" = 37,"wturn" = 32,"eturn" = -32,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("wielded") - return list("shrink" = 0.7,"sx" = 5,"sy" = -2,"nx" = -5,"ny" = -2,"wx" = -5,"wy" = -2,"ex" = 5,"ey" = -2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 7,"sturn" = -7,"wturn" = 16,"eturn" = -22,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) - if("onbelt") - return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) - -/obj/item/rogueweapon/thresher/afterattack(obj/target, mob/user, proximity) - if(user.used_intent.type == /datum/intent/flailthresh) - if(isturf(target.loc)) - var/turf/T = target.loc - var/found = FALSE - for(var/obj/item/natural/chaff/C in T) - found = TRUE - C.thresh() - if(found) - playsound(loc,"plantcross", 90, FALSE) - playsound(loc,"smashlimb", 40, FALSE) - user.visible_message("[user] threshes the stalks!", \ - "I thresh the stalks.") - return - ..() - /obj/item/rogueweapon/sickle force = 10 possible_item_intents = list(DAGGER_CUT) name = "sickle" - desc = "" + desc = "Rusted blade, worn handle, symbol of toil." icon_state = "sickle" icon = 'icons/roguetown/weapons/tools.dmi' - item_state = "crysknife" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - wlength = WLENGTH_SHORT - w_class = WEIGHT_CLASS_SMALL - wdefense = 1 sharpness = IS_SHARP - //dropshrink = 0.8 wlength = 10 slot_flags = ITEM_SLOT_HIP thrown_bclass = BCLASS_CUT + drop_sound = 'sound/foley/dropsound/blade_drop.ogg' max_blade_int = 50 smeltresult = /obj/item/ingot/iron associated_skill = /datum/skill/combat/knives - + +/obj/item/rogueweapon/sickle/getonmobprop(tag) + . = ..() + if(tag) + switch(tag) + if("gen") + return list("shrink" = 0.6,"sx" = -10,"sy" = 1,"nx" = 12,"ny" = 1,"wx" = -7,"wy" = 1,"ex" = 6,"ey" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("onbelt") + return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) + /obj/item/rogueweapon/sickle/attack_turf(turf/T, mob/living/user) user.changeNext_move(CLICK_CD_MELEE) @@ -95,44 +33,29 @@ return . = ..() -/obj/item/rogueweapon/sickle/getonmobprop(tag) - . = ..() - if(tag) - switch(tag) - if("gen") - return list("shrink" = 0.6,"sx" = -9,"sy" = 1,"nx" = 12,"ny" = 1,"wx" = -8,"wy" = 1,"ex" = 6,"ey" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("onbelt") - return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) - /obj/item/rogueweapon/hoe - force = 10 - force_wielded = 15 - possible_item_intents = list(/datum/intent/pick) - gripped_intents = list(/datum/intent/pick,SPEAR_BASH,TILL_INTENT) name = "hoe" desc = "" icon_state = "hoe" - icon = 'icons/roguetown/weapons/64.dmi' - pixel_y = -16 - pixel_x = -16 - inhand_x_dimension = 64 - inhand_y_dimension = 64 - bigboy = TRUE + icon = 'icons/roguetown/weapons/tools.dmi' wlength = WLENGTH_LONG w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK - minstr = 6 - item_state = "hoe" + minstr = 5 sharpness = IS_BLUNT walking_stick = TRUE - wdefense = 2 - dropshrink = 0.8 - wlength = 66 drop_sound = 'sound/foley/dropsound/wooden_drop.ogg' smeltresult = /obj/item/ingot/iron + possible_item_intents = list(/datum/intent/pick) + gripped_intents = list(TILL_INTENT,/datum/intent/pick,POLEARM_BASH) associated_skill = /datum/skill/combat/polearms + force = 5 + force_wielded = 10 + wdefense = 2 + wlength = 66 + /obj/item/rogueweapon/hoe/getonmobprop(tag) . = ..() if(tag) @@ -145,7 +68,66 @@ return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) -/* +/obj/item/rogueweapon/hoe/attack_turf(turf/T, mob/living/user) + if(user.used_intent.type == /datum/intent/till) + user.changeNext_move(CLICK_CD_MELEE) + if(istype(T, /turf/open/floor/rogue/grass)) + playsound(T,'sound/items/dig_shovel.ogg', 100, TRUE) + if (do_after(user, 3 SECONDS, target = src)) + apply_farming_fatigue(user, 10) + T.ChangeTurf(/turf/open/floor/rogue/dirt, flags = CHANGETURF_INHERIT_AIR) + playsound(T,'sound/items/dig_shovel.ogg', 100, TRUE) + return + if(istype(T, /turf/open/floor/rogue/dirt)) + playsound(T,'sound/items/dig_shovel.ogg', 100, TRUE) + if(do_after(user, 2 SECONDS, target = src)) + playsound(T,'sound/items/dig_shovel.ogg', 100, TRUE) + var/obj/structure/soil/soil = get_soil_on_turf(T) + if(soil) + soil.user_till_soil(user) + else + apply_farming_fatigue(user, 8) + new /obj/structure/soil(T) + return + . = ..() + +/datum/intent/till + name = "hoe" + icon_state = "inhoe" + chargetime = 0 + noaa = TRUE + candodge = FALSE + misscost = 0 + +/obj/item/rogueweapon/hoe/getonmobprop(tag) + . = ..() + if(tag) + switch(tag) + if("gen") + return list("shrink" = 0.7,"sx" = -7,"sy" = 0,"nx" = 8,"ny" = 0,"wx" = -5,"wy" = 0,"ex" = 0,"ey" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -38,"sturn" = 37,"wturn" = 32,"eturn" = -32,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("wielded") + return list("shrink" = 0.7,"sx" = 3,"sy" = -4,"nx" = 3,"ny" = -3,"wx" = -4,"wy" = -4,"ex" = 2,"ey" = -4,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 45,"sturn" = 135,"wturn" = -45,"eturn" = 45,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("onbelt") + return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) + + +/* WAS USED WHEN 64x64 +/obj/item/rogueweapon/hoe/attack_turf(turf/T, mob/living/user) + user.changeNext_move(CLICK_CD_MELEE) + if(istype(T, /turf/open/floor/rogue/dirt)) + var/turf/open/floor/rogue/dirt/D = T + if(D.planted_crop) + D.planted_crop.attackby(src, user) + return + if(istype(T, /turf/open/floor/rogue/grass)) + if(user.used_intent.type == /datum/intent/till) + playsound(T,'sound/items/dig_shovel.ogg', 100, TRUE) + if (do_after(user,30, target = src)) + T.ChangeTurf(/turf/open/floor/rogue/dirt, flags = CHANGETURF_INHERIT_AIR) + playsound(T,'sound/items/dig_shovel.ogg', 100, TRUE) + return + . = ..() + /obj/item/rogueweapon/hoe/getonmobprop(tag) . = ..() if(tag) @@ -173,81 +155,179 @@ pixel_x = 0 */ -/obj/item/rogueweapon/hoe/attack_turf(turf/T, mob/living/user) - user.changeNext_move(CLICK_CD_MELEE) - if(istype(T, /turf/open/floor/rogue/dirt)) - var/turf/open/floor/rogue/dirt/D = T - if(D.planted_crop) - D.planted_crop.attackby(src, user) - return - if(istype(T, /turf/open/floor/rogue/grass)) - if(user.used_intent.type == /datum/intent/till) - playsound(T,'sound/items/dig_shovel.ogg', 100, TRUE) - if (do_after(user,30, target = src)) - T.ChangeTurf(/turf/open/floor/rogue/dirt, flags = CHANGETURF_INHERIT_AIR) - playsound(T,'sound/items/dig_shovel.ogg', 100, TRUE) - return - . = ..() +/obj/item/rogueweapon/thresher + name = "thresher" + desc = "Crushes grain, or skulls." + icon_state = "thresher" +// icon = 'modular/Neu_Farming/icons/farmtools.dmi' + icon = 'icons/roguetown/weapons/tools.dmi' + slot_flags = ITEM_SLOT_BACK + sharpness = IS_BLUNT + wlength = WLENGTH_LONG + w_class = WEIGHT_CLASS_BULKY + walking_stick = TRUE + minstr = 6 + gripsprite = TRUE + drop_sound = 'sound/foley/dropsound/wooden_drop.ogg' + smeltresult = null + associated_skill = /datum/skill/combat/whipsflails + possible_item_intents = list(MACE_STRIKE) + gripped_intents = list(/datum/intent/flailthresh,/datum/intent/flail/strike/long) -/datum/intent/till - name = "hoe" - icon_state = "inhoe" + force = 10 + force_wielded = 14 + wdefense = 2 + wlength = 66 + +/obj/item/rogueweapon/thresher/military + force = 12 + force_wielded = 25 + possible_item_intents = list(MACE_STRIKE) + gripped_intents = list(/datum/intent/flail/strike/long, /datum/intent/flail/strike/smash/long, /datum/intent/flailthresh,) + name = "military flail" + desc = "A reinforced thresher designed to smash skulls, the design isn't the best but the craftman did the best job possible using simple working tools." + icon_state = "military" + minstr = 7 + smeltresult = /obj/item/ingot/iron + +/datum/intent/flailthresh + name = "thresh" + icon_state = "inthresh" chargetime = 0 noaa = TRUE candodge = FALSE misscost = 0 + no_attack = TRUE -/* -//make this attack_turf instead -/obj/item/rogueweapon/hoe/afterattack(obj/target, mob/user, proximity) - if((!proximity) || (!wielded)) - return ..() +/obj/item/rogueweapon/thresher/getonmobprop(tag) + . = ..() + if(tag) + switch(tag) + if("gen") + return list("shrink" = 0.7, +"sx" = -9, +"sy" = 1, +"nx" = 10, +"ny" = 0, +"wx" = -7, +"wy" = -0, +"ex" = 6, +"ey" = 3, +"northabove" = 0, +"southabove" = 1, +"eastabove" = 1, +"westabove" = 0, +"nturn" = -15, +"sturn" = 12, +"wturn" = 0, +"eturn" = 354, +"nflip" = 0, +"sflip" = 8, +"wflip" = 8, +"eflip" = 0) + if("wielded") + return list("shrink" = 0.7, +"sx" = 4, +"sy" = -7, +"nx" = -6, +"ny" = -6, +"wx" = 1, +"wy" = -8, +"ex" = 4, +"ey" = -8, +"northabove" = 0, +"southabove" = 1, +"eastabove" = 1, +"westabove" = 1, +"nturn" = -10, //-40 +"sturn" = 0, // 40 +"wturn" = 10, // 60 +"eturn" = 0, // 25 +"nflip" = 8, +"sflip" = 0, +"wflip" = 0, +"eflip" = 0) + if("onbelt") + return list("shrink" = 0.4,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) - if(istype(target, /turf/open/floor/rogue/dirt)) - var/obj/machinery/crop/R = locate() in target - if(R) - to_chat(user,"There's already a mound here.") +/obj/item/rogueweapon/thresher/Initialize() + . = ..() + pixel_y = -16 + pixel_x = -16 + +/obj/item/rogueweapon/thresher/dropped() + . = ..() + pixel_y = -16 + pixel_x = -16 + +/obj/item/rogueweapon/thresher/equipped() + . = ..() + pixel_y = -16 + pixel_x = -16 + +/obj/item/reagent_containers/food/drinks/afterattack(obj/target, mob/user , proximity) + . = ..() + +/obj/item/rogueweapon/thresher/afterattack(obj/target, mob/user, proximity) + if(user.used_intent.type == /datum/intent/flailthresh) + if(!proximity) return - if(prob(10)) //ROGTODO make this farming skill based maybe a stat too - user.visible_message("[user] tills the soil!", \ - "I till the soil.") - new /obj/machinery/crop(target) - else - to_chat(user,"I till the soil.") + var/turf/T = target.loc + var/found = FALSE + for(var/obj/item/natural/chaff/C in T) + found = TRUE + C.thresh() + if(found) + playsound(loc,"plantcross", 90, FALSE) + playsound(loc,"smashlimb", 35, FALSE) + apply_farming_fatigue(user, 10) + user.visible_message("[user] threshes the stalks!", \ + "I thresh the stalks.") return ..() +/* INSTANT THRESH +/obj/item/rogueweapon/thresher/afterattack(obj/target, mob/user, proximity) + if(user.used_intent.type == /datum/intent/flailthresh) + if(isturf(target.loc)) + var/turf/T = target.loc + var/found = FALSE + for(var/obj/item/natural/chaff/C in T) + found = TRUE + C.thresh() + if(found) + playsound(loc,"plantcross", 90, FALSE) + playsound(loc,"smashlimb", 40, FALSE) + user.visible_message("[user] threshes the stalks!", \ + "I thresh the stalks.") + return + ..() */ -/obj/item/rogueweapon/pitchfork - force = 10 - force_wielded = 20 - possible_item_intents = list(SPEAR_THRUST, SPEAR_BASH) - gripped_intents = list(SPEAR_BASH,SPEAR_THRUST,DUMP_INTENT) + +/obj/item/rogueweapon/pitchfork name = "pitchfork" - desc = "" + desc = "Compost, chaff, hay, it matters not." icon_state = "pitchfork" - item_state = "pitchfork" - icon = 'icons/roguetown/weapons/64.dmi' - pixel_y = -16 - pixel_x = -16 - inhand_x_dimension = 64 - inhand_y_dimension = 64 - bigboy = TRUE - wlength = WLENGTH_LONG +// icon = 'modular/Neu_Farming/icons/farmtools.dmi' + icon = 'icons/roguetown/weapons/tools.dmi' w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK blade_dulling = DULLING_BASHCHOP walking_stick = TRUE minstr = 6 - wdefense = 2 - dropshrink = 0.8 - wlength = 66 var/list/forked = list() drop_sound = 'sound/foley/dropsound/wooden_drop.ogg' + possible_item_intents = list(POLEARM_THRUST, POLEARM_BASH) + gripped_intents = list(DUMP_INTENT,POLEARM_BASH,POLEARM_THRUST) smeltresult = /obj/item/ingot/iron associated_skill = /datum/skill/combat/polearms thrown_bclass = BCLASS_STAB - throwforce = 25 + throwforce = 15 + + force = 10 + force_wielded = 22 + wdefense = 2 + wlength = WLENGTH_LONG /obj/item/rogueweapon/pitchfork/getonmobprop(tag) . = ..() @@ -260,17 +340,6 @@ if("onbelt") return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) -/obj/item/rogueweapon/pitchfork/getonmobprop(tag) // better - . = ..() - if(tag) - switch(tag) - if("gen") - return list("shrink" = 0.7,"sx" = -7,"sy" = 0,"nx" = 8,"ny" = 0,"wx" = -5,"wy" = 0,"ex" = 0,"ey" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -38,"sturn" = 37,"wturn" = 32,"eturn" = -32,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("wielded") - return list("shrink" = 0.7,"sx" = 3,"sy" = -4,"nx" = 3,"ny" = -3,"wx" = -4,"wy" = -4,"ex" = 2,"ey" = -4,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 45,"sturn" = 135,"wturn" = -45,"eturn" = 45,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("onbelt") - return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) - /datum/intent/pforkdump name = "scoop" @@ -290,7 +359,7 @@ for(var/obj/item/I in forked) I.forceMove(target) forked -= I - to_chat(user, "I dump the stalks.") + to_chat(user, span_warning("I dump the stalks.")) update_icon() return ..() @@ -310,14 +379,15 @@ else icon_state = initial(icon_state) ..() -*/ -//copper tools + + +//copper tools /obj/item/rogueweapon/hoe/copper force = 10 force_wielded = 15 possible_item_intents = list(/datum/intent/pick) - gripped_intents = list(/datum/intent/pick,SPEAR_BASH,TILL_INTENT) + gripped_intents = list(/datum/intent/pick,POLEARM_BASH,TILL_INTENT) name = "copper hoe" desc = "" icon = 'icons/roguetown/weapons/tools.dmi' @@ -337,8 +407,8 @@ /obj/item/rogueweapon/pitchfork/copper force = 10 force_wielded = 15 - possible_item_intents = list(SPEAR_THRUST, SPEAR_BASH) - gripped_intents = list(SPEAR_BASH,SPEAR_THRUST,DUMP_INTENT) + possible_item_intents = list(POLEARM_THRUST, POLEARM_BASH) + gripped_intents = list(POLEARM_BASH,POLEARM_THRUST,DUMP_INTENT) name = "copper fork" desc = "A simple and rustic tool for working the fields, not a very effective weapon." icon_state = "cfork" diff --git a/code/modules/roguetown/roguejobs/fisher/fish.dm b/code/modules/roguetown/roguejobs/fisher/fish.dm index 0bfe5f7cb6..d25e8d01c0 100644 --- a/code/modules/roguetown/roguejobs/fisher/fish.dm +++ b/code/modules/roguetown/roguejobs/fisher/fish.dm @@ -81,7 +81,7 @@ icon_state = "carp" fried_type = /obj/item/reagent_containers/food/snacks/rogue/fryfish/carp cooked_type = /obj/item/reagent_containers/food/snacks/rogue/fryfish/carp - + cooked_smell = /datum/pollutant/food/baked_carp /obj/item/reagent_containers/food/snacks/fish/clownfish name = "clownfish" @@ -89,7 +89,7 @@ sellprice = 40 fried_type = /obj/item/reagent_containers/food/snacks/rogue/fryfish/clownfish cooked_type = /obj/item/reagent_containers/food/snacks/rogue/fryfish/clownfish - + cooked_smell = /datum/pollutant/food/baked_clownfish /obj/item/reagent_containers/food/snacks/fish/angler name = "anglerfish" @@ -97,7 +97,7 @@ sellprice = 15 fried_type = /obj/item/reagent_containers/food/snacks/rogue/fryfish/angler cooked_type = /obj/item/reagent_containers/food/snacks/rogue/fryfish/angler - + cooked_smell = /datum/pollutant/food/baked_angler /obj/item/reagent_containers/food/snacks/fish/eel name = "eel" @@ -105,7 +105,7 @@ sellprice = 5 fried_type = /obj/item/reagent_containers/food/snacks/rogue/fryfish/eel cooked_type = /obj/item/reagent_containers/food/snacks/rogue/fryfish/eel - + cooked_smell = /datum/pollutant/food/baked_eel /obj/item/reagent_containers/food/snacks/rogue/fryfish icon = 'icons/roguetown/misc/fish.dmi' @@ -121,12 +121,20 @@ /obj/item/reagent_containers/food/snacks/rogue/fryfish/carp icon_state = "carpcooked" +// faretype = FARE_IMPOVERISHED + plateable = TRUE /obj/item/reagent_containers/food/snacks/rogue/fryfish/clownfish icon_state = "clownfishcooked" +// faretype = FARE_POOR + plateable = TRUE /obj/item/reagent_containers/food/snacks/rogue/fryfish/angler icon_state = "anglercooked" +// faretype = FARE_NEUTRAL + plateable = TRUE /obj/item/reagent_containers/food/snacks/rogue/fryfish/eel icon_state = "eelcooked" +// faretype = FARE_NEUTRAL + plateable = TRUE diff --git a/code/modules/roguetown/roguejobs/fisher/rod.dm b/code/modules/roguetown/roguejobs/fisher/rod.dm index 2a8b2260b9..80f71af6d2 100644 --- a/code/modules/roguetown/roguejobs/fisher/rod.dm +++ b/code/modules/roguetown/roguejobs/fisher/rod.dm @@ -1,6 +1,6 @@ /obj/item/fishingrod force = 12 - possible_item_intents = list(SPEAR_BASH,ROD_CAST) + possible_item_intents = list(POLEARM_BASH,ROD_CAST) name = "fishing rod" desc = "" icon_state = "rod" @@ -63,7 +63,7 @@ var/sl = user.mind.get_skill_level(/datum/skill/labor/fishing) // User's skill level var/ft = 120 //Time to get a catch, in ticks var/fpp = 100 - (40 + (sl * 10)) // Fishing power penalty based on fishing skill level - if(user.used_intent.type == SPEAR_BASH) + if(user.used_intent.type == POLEARM_BASH) return ..() if(!check_allowed_items(target,target_self=1)) diff --git a/code/modules/roguetown/roguejobs/gravedigger/hole.dm b/code/modules/roguetown/roguejobs/gravedigger/hole.dm index 1842c2c740..baedfadc80 100644 --- a/code/modules/roguetown/roguejobs/gravedigger/hole.dm +++ b/code/modules/roguetown/roguejobs/gravedigger/hole.dm @@ -222,9 +222,6 @@ user.visible_message("[user] stuffs [O] into [src].", \ "I stuff [O] into [src].", \ "I hear a loud bang.") - var/mob/living/L = O - if(!issilicon(L)) - L.Paralyze(40) O.forceMove(T) user_buckle_mob(O, user) else @@ -260,7 +257,7 @@ var/mob/living/carbon/human/B = A B.buried = FALSE ..() - + /obj/structure/closet/dirthole/open(mob/living/user) if(opened) return diff --git a/code/modules/roguetown/roguejobs/gravedigger/tools.dm b/code/modules/roguetown/roguejobs/gravedigger/tools.dm index 5411e120e6..042e6a460c 100644 --- a/code/modules/roguetown/roguejobs/gravedigger/tools.dm +++ b/code/modules/roguetown/roguejobs/gravedigger/tools.dm @@ -2,12 +2,12 @@ force = 5 force_wielded = 12 possible_item_intents = list(/datum/intent/mace/strike/shovel) - gripped_intents = list(/datum/intent/shovelscoop, /datum/intent/mace/strike/shovel, /datum/intent/axe/chop/stone) + gripped_intents = list(/datum/intent/shovelscoop, /datum/intent/mace/strike/shovel, /datum/intent/axe/chop) name = "shovel" desc = "" icon_state = "shovel" - icon = 'modular/Neu_Farming/icons/farmtools.dmi' -// icon = 'icons/roguetown/weapons/64.dmi' +//icon = 'modular/Neu_Farming/icons/farmtools.dmi' + icon = 'icons/roguetown/weapons/tools.dmi' sharpness = IS_BLUNT dropshrink = 0.9 wdefense = 1 @@ -201,7 +201,7 @@ possible_item_intents = list(/datum/intent/shovelscoop, /datum/intent/mace/strike/shovel) name = "spade" icon_state = "spade" -// icon = 'icons/roguetown/weapons/tools.dmi' + icon = 'icons/roguetown/weapons/tools.dmi' bigboy = FALSE sharpness = IS_BLUNT dropshrink = 1 @@ -234,7 +234,7 @@ /obj/item/burial_shroud name = "winding sheet" - desc = "" + desc = "A sheet used to carry dead bodies and shield them from the elements." icon = 'icons/obj/bodybag.dmi' icon_state = "shroud_folded" w_class = WEIGHT_CLASS_SMALL diff --git a/code/modules/roguetown/roguejobs/miner/tools.dm b/code/modules/roguetown/roguejobs/miner/tools.dm index 0e07f0f0dc..f8d3b00545 100644 --- a/code/modules/roguetown/roguejobs/miner/tools.dm +++ b/code/modules/roguetown/roguejobs/miner/tools.dm @@ -12,7 +12,8 @@ toolspeed = 2 associated_skill = /datum/skill/labor/mining smeltresult = /obj/item/ingot/iron - var/pickmult = 1 // Multiplier of how much extra picking force we do to rocks. + wdefense = AVERAGE_PARRY + var/pickmult = 1 // Multiplier of how much extra picking force we do to rocks. /obj/item/rogueweapon/pick/getonmobprop(tag) . = ..() diff --git a/code/modules/roguetown/roguejobs/tailor/loom.dm b/code/modules/roguetown/roguejobs/tailor/loom.dm index a5ef932ea1..cde9e18be6 100644 --- a/code/modules/roguetown/roguejobs/tailor/loom.dm +++ b/code/modules/roguetown/roguejobs/tailor/loom.dm @@ -1,8 +1,65 @@ /obj/machinery/loom icon = 'icons/roguetown/misc/structure.dmi' name = "loom" - desc = "" + desc = "A wooden frame with taut threads ready to weave fabric." icon_state = "loom" + var/storedfiber = 0 + var/maxfiber = 50 max_integrity = 200 density = TRUE +/obj/machinery/loom/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/natural/bundle/fibers)) + var/obj/item/natural/bundle/fibers/W = I + if(src.storedfiber + W.amount > src.maxfiber) + W.amount = (W.amount - (src.maxfiber - src.storedfiber)) + to_chat(user, "You string some fiber onto [src].") + src.storedfiber = src.maxfiber + if(W.amount == 1) + new /obj/item/natural/fibers(get_turf(user)) + qdel(W) + else + src.storedfiber = src.storedfiber + W.amount + to_chat(user, "You string some fiber onto [src].") + qdel(W) + if(istype(I, /obj/item/natural/fibers)) + var/obj/item/natural/fibers/W = I + if(src.storedfiber < src.maxfiber) + src.storedfiber++ + to_chat(user, "You string a fiber onto [src].") + qdel(W) + else + to_chat(user, "You can't add any more fiber.") + . = ..() + +/obj/machinery/loom/attack_right(mob/user) + var/mob/living/L = user + if(isliving(user) && L.stat == CONSCIOUS && !user.get_active_held_item()) + if(src.storedfiber > 0) + to_chat(user, "You remove a strand from [src].") + src.storedfiber-- + var/obj/item/natural/fibers/F = new (src.loc) + L.put_in_hands(F) + else + to_chat(user, "There's nothing to take from [src].") + +/obj/machinery/loom/attack_hand(mob/user) + var/mob/living/weaver = user + var/weavetime = 2 SECONDS //time to weave a cloth, duh + var/skilltimemod = 0.2 SECONDS //how much each level of skill lowers the time to weave + var/skill = weaver.mind.get_skill_level(/datum/skill/misc/sewing) + if(isliving(user) && weaver.stat == CONSCIOUS) + if(src.storedfiber < 2) + to_chat(user, "You don't have enough fiber to do this.") + else + to_chat(user, "You start weaving some cloth...") + while(src.storedfiber > 1) + if(!do_after(weaver, (weavetime - (skilltimemod*skill)),target = src) || src.storedfiber < 2) + break + src.storedfiber -= 2 + new /obj/item/natural/cloth(get_turf(src)) + weaver.mind.adjust_experience(/datum/skill/misc/sewing, (weaver.STAINT*0.5))//you get less exp from using the loom + +/obj/machinery/loom/examine(mob/user) + to_chat(user, span_notice("There are [storedfiber] strands of fiber strung on [src].")) + . = ..() diff --git a/code/modules/roguetown/roguemachine/camera.dm b/code/modules/roguetown/roguemachine/camera.dm index 020a070740..329efeb7a6 100644 --- a/code/modules/roguetown/roguemachine/camera.dm +++ b/code/modules/roguetown/roguemachine/camera.dm @@ -28,7 +28,7 @@ /obj/structure/roguemachine/camera/Initialize() . = ..() - set_light(1, 1, "#ff0d0d") + set_light(1, 1, 1, l_color = "#ff0d0d") SSroguemachine.cameras += src number = SSroguemachine.cameras.len name = "face #[number]" diff --git a/code/modules/roguetown/roguemachine/drugmachine.dm b/code/modules/roguetown/roguemachine/drugmachine.dm index 43e7657340..479565010e 100644 --- a/code/modules/roguetown/roguemachine/drugmachine.dm +++ b/code/modules/roguetown/roguemachine/drugmachine.dm @@ -44,7 +44,7 @@ set_light(0) return w_class = WEIGHT_CLASS_GIGANTIC - set_light(2, 2, "#9C37B5") + set_light(2, 2, 2, l_color = "#9C37B5") /obj/item/roguemachine/drugtrade/Initialize() . = ..() @@ -79,7 +79,7 @@ var/obj/structure/roguemachine/drug_chute/E = locate() in T if(!E) continue - accepted_items = list(/obj/item/reagent_containers/powder/spice, /obj/item/reagent_containers/powder/ozium, /obj/item/reagent_containers/powder/moondust, /obj/item/reagent_containers/powder/moondust_purest, /obj/item/reagent_containers/food/snacks/produce/rogue/swampweed_dried, /obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed) + accepted_items = list(/obj/item/reagent_containers/powder/spice, /obj/item/reagent_containers/powder/ozium, /obj/item/reagent_containers/powder/moondust, /obj/item/reagent_containers/powder/moondust_purest, /obj/item/reagent_containers/food/snacks/produce/swampweed_dried, /obj/item/reagent_containers/food/snacks/produce/dry_westleach) for(var/obj/I in T) if(I.anchored) continue @@ -87,7 +87,7 @@ continue if(!(I.type in accepted_items)) continue - var/prize = I.get_real_price() * 5 // Increase price by 500% Keep in mind drug sell prices are pretty cheap to encourage more trade with the baths, also drugs are expensive. + var/prize = I.get_real_price() * 2 // Increase price by 500% Keep in mind drug sell prices are pretty cheap to encourage more trade with the baths, also drugs are expensive. if(prize >= 1) play_sound=TRUE budgie += prize @@ -131,7 +131,7 @@ if(obj_broken) set_light(0) return - set_light(1, 1, "#8f06b5") + set_light(1, 1, 1, l_color = "#8f06b5") add_overlay(mutable_appearance(icon, "vendor-merch")) @@ -253,8 +253,8 @@ contents += "
    [current_cat]
    " contents += "
    \[RETURN\]

    " var/list/pax = list() - for(var/pack in SSshuttle.supply_packs) - var/datum/supply_pack/PA = SSshuttle.supply_packs[pack] + for(var/pack in SSmerchant.supply_packs) + var/datum/supply_pack/PA = SSmerchant.supply_packs[pack] if(PA.group == current_cat) pax += PA for(var/datum/supply_pack/PA in sortList(pax)) diff --git a/code/modules/roguetown/roguemachine/mail.dm b/code/modules/roguetown/roguemachine/mail.dm index 63a2d5f1f0..ec85af1a24 100644 --- a/code/modules/roguetown/roguemachine/mail.dm +++ b/code/modules/roguetown/roguemachine/mail.dm @@ -10,6 +10,8 @@ pixel_y = 32 var/coin_loaded = FALSE var/ournum + var/mailtag + var/obfuscated = FALSE /obj/structure/roguemachine/mail/attack_hand(mob/user) if(SSroguemachine.hermailermaster && ishuman(user)) @@ -246,14 +248,37 @@ cut_overlays() if(coin_loaded) add_overlay(mutable_appearance(icon, "mail-f")) - set_light(1, 1, "#ff0d0d") + set_light(1, 1, 1, l_color = "#ff0d0d") else add_overlay(mutable_appearance(icon, "mail-s")) - set_light(1, 1, "#1b7bf1") + set_light(1, 1, 1, l_color = "#1b7bf1") +/obj/structure/roguemachine/mail/examine(mob/user) + . = ..() + . += "Directory: [mailtag]" + +/obj/structure/roguemachine/mail/Topic(href, href_list) + ..() + if(!usr) + return + + if(href_list["directory"]) + view_directory(usr) +/obj/structure/roguemachine/mail/proc/view_directory(mob/user) + var/dat + for(var/obj/structure/roguemachine/mail/X in SSroguemachine.hermailers) + if(X.obfuscated) + continue + if(X.mailtag) + dat += "#[X.ournum] [X.mailtag]
    " + else + dat += "#[X.ournum] [capitalize(get_area_name(X))]
    " + var/datum/browser/popup = new(user, "hermes_directory", "
    HERMES DIRECTORY
    ", 387, 420) + popup.set_content(dat) + popup.open(FALSE) /obj/item/roguemachine/mastermail name = "MASTER OF MAILS" @@ -273,7 +298,7 @@ icon_state = "mailspecial-get" else icon_state = "mailspecial" - set_light(1, 1, "#ff0d0d") + set_light(1, 1, 1, l_color = "#ff0d0d") /obj/item/roguemachine/mastermail/ComponentInitialize() . = ..() @@ -405,7 +430,7 @@ max_purchases = 3 ), "Silver Dagger (4)" = list( - list(type = /obj/item/rogueweapon/huntingknife/idagger/silver, count = 1), + list(type = /obj/item/rogueweapon/knife/dagger/silver, count = 1), cost = 2, max_purchases = 4 ) diff --git a/code/modules/roguetown/roguemachine/merchant.dm b/code/modules/roguetown/roguemachine/merchant.dm index 41efdcef0f..fa4f81a4b7 100644 --- a/code/modules/roguetown/roguemachine/merchant.dm +++ b/code/modules/roguetown/roguemachine/merchant.dm @@ -43,7 +43,7 @@ set_light(0) return w_class = WEIGHT_CLASS_GIGANTIC - set_light(2, 2, "#1b7bf1") + set_light(2, 2, 2, l_color = "#1b7bf1") /obj/item/roguemachine/merchant/Initialize() . = ..() @@ -125,6 +125,7 @@ var/budget = 0 var/upgrade_flags var/current_cat = "1" + var/lockid = "merchant" /obj/structure/roguemachine/merchantvend/Initialize() . = ..() @@ -135,14 +136,14 @@ if(obj_broken) set_light(0) return - set_light(1, 1, "#1b7bf1") + set_light(1, 1, 1, l_color = "#1b7bf1") add_overlay(mutable_appearance(icon, "vendor-merch")) /obj/structure/roguemachine/merchantvend/attackby(obj/item/P, mob/user, params) if(istype(P, /obj/item/roguekey)) var/obj/item/roguekey/K = P - if(K.lockid == "merchant") + if(K.lockid == lockid) locked = !locked playsound(loc, 'sound/misc/beep.ogg', 100, FALSE, -1) update_icon() @@ -154,7 +155,7 @@ if(istype(P, /obj/item/keyring)) var/obj/item/keyring/K = P for(var/obj/item/roguekey/KE in K.keys) - if(KE.lockid == "merchant") + if(KE.lockid == lockid) locked = !locked playsound(loc, 'sound/misc/beep.ogg', 100, FALSE, -1) update_icon() @@ -306,8 +307,8 @@ contents += "
    [current_cat]
    " contents += "
    \[RETURN\]

    " var/list/pax = list() - for(var/pack in SSshuttle.supply_packs) - var/datum/supply_pack/PA = SSshuttle.supply_packs[pack] + for(var/pack in SSmerchant.supply_packs) + var/datum/supply_pack/PA = SSmerchant.supply_packs[pack] if(PA.group == current_cat) pax += PA for(var/datum/supply_pack/PA in sortList(pax)) diff --git a/code/modules/roguetown/roguemachine/money.dm b/code/modules/roguetown/roguemachine/money.dm index 4acdf88bf3..416d4ebc4e 100644 --- a/code/modules/roguetown/roguemachine/money.dm +++ b/code/modules/roguetown/roguemachine/money.dm @@ -168,9 +168,18 @@ GLOBAL_VAR(moneymaster) new /obj/item/roguecoin/copper(T, budget) if(!type_to_put || zenars_to_put < 1) return - var/obj/item/roguecoin/G = new type_to_put(T, floor(zenars_to_put)) - if(user) - user.put_in_hands(G) + + var/stacks = CEILING(zenars_to_put / 20, 1) + for(var/i in 1 to stacks) + var/zenar_value = min(floor(zenars_to_put), 20) + var/obj/item/roguecoin/G = new type_to_put(T, zenar_value) + zenars_to_put -= zenar_value + G.pixel_y = rand(-4, 4) + G.pixel_x = rand(-4, 4) + + if(user) + user.put_in_hands(G) + playsound(T, 'sound/misc/coindispense.ogg', 100, FALSE, -1) /* /obj/structure/roguemachine/money/attack_right(mob/user) @@ -194,7 +203,7 @@ GLOBAL_VAR(moneymaster) if(obj_broken) set_light(0) return - set_light(1, 1, "#1b7bf1") + set_light(1, 1, 1, l_color = "#1b7bf1") /obj/structure/roguemachine/money/Destroy() set_light(0) @@ -231,4 +240,4 @@ GLOBAL_VAR(moneymaster) add_overlay(mutable_appearance(icon, "[icon_state]-e")) else add_overlay(mutable_appearance(icon, "[icon_state]-b")) - set_light(1, 1, "#1b7bf1") + set_light(1, 1, 1, l_color = "#1b7bf1") diff --git a/code/modules/roguetown/roguemachine/scomm.dm b/code/modules/roguetown/roguemachine/scomm.dm index e2478655ca..8db4dc3db2 100644 --- a/code/modules/roguetown/roguemachine/scomm.dm +++ b/code/modules/roguetown/roguemachine/scomm.dm @@ -60,9 +60,9 @@ var/canread = user.can_read(src, TRUE) var/contents if(SSticker.rulertype == "King") - contents += "
    KING'S DECREES
    " - else - contents += "
    QUEEN'S DECREES
    " + contents += "
    MONARCH'S DECREES
    " + else if(SSticker.rulertype == "Hand") + contents += "
    REGENT'S DECREES
    " contents += "-----------

    " for(var/i = GLOB.lord_decrees.len to 1 step -1) contents += "[i]. [GLOB.lord_decrees[i]]
    " diff --git a/code/modules/roguetown/roguemachine/steward.dm b/code/modules/roguetown/roguemachine/steward.dm index acec649a7a..2eae40d159 100644 --- a/code/modules/roguetown/roguemachine/steward.dm +++ b/code/modules/roguetown/roguemachine/steward.dm @@ -156,7 +156,7 @@ SStreasury.give_money_account(-newtax, A) break if(href_list["payroll"]) - var/list/L = list(GLOB.noble_positions) + list(GLOB.garrison_positions) + list(GLOB.church_positions) + list(GLOB.serf_positions) + list(GLOB.peasant_positions) + list(GLOB.apprentices_positions) + var/list/L = list(GLOB.court_positions) + list(GLOB.garrison_positions) + list(GLOB.church_positions) + list(GLOB.towner_positions) + list(GLOB.peasant_positions) + list(GLOB.apprentices_positions) var/list/things = list() for(var/list/category in L) for(var/A in category) diff --git a/code/modules/roguetown/roguemachine/submission.dm b/code/modules/roguetown/roguemachine/submission.dm index 0f3a30f179..f6a7fff556 100644 --- a/code/modules/roguetown/roguemachine/submission.dm +++ b/code/modules/roguetown/roguemachine/submission.dm @@ -111,14 +111,14 @@ GLOBAL_VAR(feeding_hole_reset_timer) //WIP for now it does really nothing, but people will be gaslighted into thinking it does. /obj/structure/feedinghole name = "FEEDING HOLE" - desc = "" + desc = "Keep the HERMES rats fed and hard working." icon = 'icons/roguetown/misc/machines.dmi' icon_state = "feedinghole" density = FALSE pixel_y = 32 /obj/structure/feedinghole/attackby(obj/item/P, mob/user, params) - if(istype(P, /obj/item/reagent_containers/food/snacks/produce/wheat)) + if(istype(P, /obj/item/reagent_containers/food/snacks/produce)) qdel(P) /* if(!GLOB.feeding_hole_reset_timer || world.time > GLOB.feeding_hole_reset_timer) GLOB.feeding_hole_wheat_count = 0 diff --git a/code/modules/roguetown/roguemachine/throne.dm b/code/modules/roguetown/roguemachine/throne.dm index e60a0eeaa5..ee5cde410a 100644 --- a/code/modules/roguetown/roguemachine/throne.dm +++ b/code/modules/roguetown/roguemachine/throne.dm @@ -1,6 +1,6 @@ /obj/structure/roguethrone name = "throne of rockhill" - desc = "A big throne, to hold the Lord's giant personality. Say 'help' with the crown on your head if you are confused." + desc = "A big throne, to hold the Lord's giant personality. Say 'secrets of the throat' with the crown on your head if you are confused." icon = 'icons/roguetown/misc/96x96.dmi' icon_state = "throne" density = FALSE diff --git a/code/modules/roguetown/roguemachine/titan.dm b/code/modules/roguetown/roguemachine/titan.dm index ef63d64ddb..13a89866e8 100644 --- a/code/modules/roguetown/roguemachine/titan.dm +++ b/code/modules/roguetown/roguemachine/titan.dm @@ -13,7 +13,7 @@ GLOBAL_LIST_INIT(laws_of_the_land, initialize_laws_of_the_land()) /obj/structure/roguemachine/titan name = "THROAT" - desc = "He who wears the crown holds the key to this strange thing. If all else fails, yell \"Help!\"" + desc = "He who wears the crown holds the key to this strange thing. If all else fails, demand the \"Secrets of the Throat!\"" icon = 'icons/roguetown/misc/machines.dmi' icon_state = "" density = FALSE @@ -72,7 +72,7 @@ GLOBAL_LIST_INIT(laws_of_the_land, initialize_laws_of_the_land()) switch(mode) if(0) - if(findtext(message2recognize, "help")) + if(findtext(message2recognize, "secrets of the throat")) say("My commands are: Make Announcement, Make Decree, Make Law, Remove Law, Purge Laws, Declare Outlaw, Set Taxes, Change Position, Summon Crown, Nevermind") playsound(src, 'sound/misc/machinelong.ogg', 100, FALSE, -1) if(findtext(message2recognize, "make announcement")) @@ -214,7 +214,7 @@ GLOBAL_LIST_INIT(laws_of_the_land, initialize_laws_of_the_land()) return newtax = CLAMP(newtax, 1, 99) SStreasury.tax_value = newtax / 100 - priority_announce("The new tax in Rockhill shall be [newtax] percent.", "The Generous Lord Decrees", 'sound/misc/alert.ogg', "Captain") + priority_announce("The new tax in Rockhill shall be [newtax] percent.", "The Generous [user.get_role_title()] Decrees", 'sound/misc/alert.ogg', "Captain") /obj/structure/roguemachine/titan/proc/give_job_popup(mob/living/carbon/human/user) if(!Adjacent(user)) @@ -225,7 +225,7 @@ GLOBAL_LIST_INIT(laws_of_the_land, initialize_laws_of_the_land()) if(isnull(victim) || !Adjacent(user)) return - var/list/possible_positions = GLOB.noble_positions + GLOB.garrison_positions + GLOB.church_positions + GLOB.serf_positions + GLOB.peasant_positions + GLOB.apprentices_positions + GLOB.allmig_positions - "King" + var/list/possible_positions = GLOB.court_positions + GLOB.garrison_positions + GLOB.church_positions + GLOB.towner_positions + GLOB.peasant_positions + GLOB.apprentices_positions + GLOB.allmig_positions var/new_pos = input(user, "Select their new position", src, null) as anything in possible_positions if(isnull(new_pos) || !Adjacent(user)) @@ -236,7 +236,7 @@ GLOBAL_LIST_INIT(laws_of_the_land, initialize_laws_of_the_land()) if(!SScommunications.can_announce(user)) return - priority_announce("Henceforth, the vassal known as [victim.real_name] shall have the title of [new_pos].", "The King Decrees", 'sound/misc/alert.ogg', "Captain") + priority_announce("Henceforth, the vassal known as [victim.real_name] shall have the title of [new_pos].", "The [user.get_role_title()] Decrees", 'sound/misc/alert.ogg', "Captain") /obj/structure/roguemachine/titan/proc/make_announcement(mob/living/user, raw_message) if(!SScommunications.can_announce(user)) @@ -290,7 +290,7 @@ GLOBAL_LIST_INIT(laws_of_the_land, initialize_laws_of_the_land()) return if(raw_message in GLOB.outlawed_players) GLOB.outlawed_players -= raw_message - priority_announce("[raw_message] is no longer an outlaw in Rockhill lands.", "The King Decrees", 'sound/misc/alert.ogg', "Captain") + priority_announce("[raw_message] is no longer an outlaw in Rockhill lands.", "The [user.get_role_title()] Decrees", 'sound/misc/alert.ogg', "Captain") return FALSE var/found = FALSE for(var/mob/living/carbon/human/H in GLOB.player_list) @@ -299,7 +299,7 @@ GLOBAL_LIST_INIT(laws_of_the_land, initialize_laws_of_the_land()) if(!found) return FALSE GLOB.outlawed_players += raw_message - priority_announce("[raw_message] has been declared an outlaw and must be captured or slain.", "The King Decrees", 'sound/misc/alert.ogg', "Captain") + priority_announce("[raw_message] has been declared an outlaw and must be captured or slain.", "The [user.get_role_title()] Decrees", 'sound/misc/alert.ogg', "Captain") /obj/structure/roguemachine/titan/proc/make_law(mob/living/user, raw_message) if(!SScommunications.can_announce(user)) diff --git a/code/modules/roguetown/roguemachine/vendor.dm b/code/modules/roguetown/roguemachine/vendor.dm index 82cfed09da..63d0f41835 100644 --- a/code/modules/roguetown/roguemachine/vendor.dm +++ b/code/modules/roguetown/roguemachine/vendor.dm @@ -206,7 +206,7 @@ else icon_state = "streetvendor1" if(held_items.len) - set_light(1, 1, "#1b7bf1") + set_light(1, 1, 1, l_color = "#1b7bf1") add_overlay(mutable_appearance(icon, "vendor-gen")) /obj/structure/roguemachine/vendor/Destroy() @@ -260,16 +260,38 @@ /obj/structure/roguemachine/vendor/inn/Initialize() . = ..() - for(var/X in list(/obj/item/roguekey/roomi,/obj/item/roguekey/roomii,/obj/item/roguekey/roomiii)) + for(var/X in list(/obj/item/roguekey/roomii)) + var/obj/P = new X(src) + held_items[P] = list() + held_items[P]["NAME"] = P.name + held_items[P]["PRICE"] = 15 + for(var/X in list(/obj/item/roguekey/roomi,/obj/item/roguekey/roomiii,/obj/item/roguekey/roomiv,/obj/item/roguekey/roomv,/obj/item/roguekey/roomvi)) + var/obj/P = new X(src) + held_items[P] = list() + held_items[P]["NAME"] = P.name + held_items[P]["PRICE"] = 20 + update_icon() + +/obj/structure/roguemachine/vendor/inn_hamlet + keycontrol = "tavern" + +/obj/structure/roguemachine/vendor/inn_hamlet/Initialize() + . = ..() + for(var/X in list(/obj/item/roguekey/roomii)) + var/obj/P = new X(src) + held_items[P] = list() + held_items[P]["NAME"] = P.name + held_items[P]["PRICE"] = 15 + for(var/X in list(/obj/item/roguekey/roomiii,/obj/item/roguekey/roomiv)) var/obj/P = new X(src) held_items[P] = list() held_items[P]["NAME"] = P.name held_items[P]["PRICE"] = 20 - for(var/X in list(/obj/item/roguekey/roomhunt)) + for(var/X in list(/obj/item/roguekey/roomi)) var/obj/P = new X(src) held_items[P] = list() held_items[P]["NAME"] = P.name - held_items[P]["PRICE"] = 40 + held_items[P]["PRICE"] = 30 update_icon() /obj/structure/roguemachine/vendor/steward @@ -287,9 +309,12 @@ held_items[P] = list() held_items[P]["NAME"] = P.name held_items[P]["PRICE"] = 100 - for(var/X in list(/obj/item/roguekey/houses/house7,/obj/item/roguekey/houses/house8)) + for(var/X in list(/obj/item/roguekey/houses/house7)) var/obj/P = new X(src) held_items[P] = list() held_items[P]["NAME"] = P.name held_items[P]["PRICE"] = 120 update_icon() + +/obj/structure/roguemachine/vendor/nitemaster + keycontrol = "nightman" diff --git a/code/modules/roguetown/roguestock/import.dm b/code/modules/roguetown/roguestock/import.dm index 689355ee0d..9792e5bbd2 100644 --- a/code/modules/roguetown/roguestock/import.dm +++ b/code/modules/roguetown/roguestock/import.dm @@ -2,38 +2,122 @@ import_only = TRUE stable_price = TRUE +/obj/structure/closet/crate/chest/crate/steward + lockid = "steward" + locked = TRUE + masterkey = TRUE + +// ===================== FOOD IMPORTS ========================== +// ---------- Hardtack ---------------- /datum/roguestock/import/crackers - name = "Bin of Rations" - desc = "Low moisture bread that keeps well." - item_type = /obj/item/roguebin/crackers + name = "Hardtack rations" + desc = "Low moisture crackers that keeps well." + item_type = /obj/structure/closet/crate/chest/crate/steward/hardtack export_price = 100 importexport_amt = 1 -/obj/item/roguebin/crackers/Initialize() +/obj/structure/closet/crate/chest/crate/steward/hardtack/PopulateContents() + for(var/i in 1 to 10) + new /obj/item/reagent_containers/food/snacks/rogue/crackerscooked(src) + +// ---------- Oatmeal ---------------- +/datum/roguestock/import/oatmeal + name = "Oatmeal bin" + desc = "Cold oatmeal? Things must be desperate around here." + item_type = /obj/item/roguebin/oatmeal + export_price = 60 + importexport_amt = 1 + +/obj/item/roguebin/oatmeal + name = "Oatmeal bin" +/obj/item/roguebin/oatmeal/Initialize() . = ..() - new /obj/item/reagent_containers/food/snacks/rogue/crackerscooked(src) - new /obj/item/reagent_containers/food/snacks/rogue/crackerscooked(src) - new /obj/item/reagent_containers/food/snacks/rogue/crackerscooked(src) - new /obj/item/reagent_containers/food/snacks/rogue/crackerscooked(src) - new /obj/item/reagent_containers/food/snacks/rogue/crackerscooked(src) - new /obj/item/reagent_containers/food/snacks/rogue/crackerscooked(src) - new /obj/item/reagent_containers/food/snacks/rogue/crackerscooked(src) - new /obj/item/reagent_containers/food/snacks/rogue/crackerscooked(src) - new /obj/item/reagent_containers/food/snacks/rogue/crackerscooked(src) - new /obj/item/reagent_containers/food/snacks/rogue/crackerscooked(src) - -/obj/structure/closet/crate/chest/steward - lockid = "steward" - locked = TRUE - masterkey = TRUE + reagents.add_reagent(/datum/reagent/consumable/soup/oatmeal,200) + update_icon() +// ---------- Wheat ---------------- /datum/roguestock/import/wheat - name = "Crate of Wheat" - desc = "Wheat." - item_type = /obj/structure/closet/crate/chest/steward/wheat + name = "Crate of wheat" + desc = "Grain." + item_type = /obj/structure/closet/crate/chest/crate/steward/wheat export_price = 150 importexport_amt = 1 -/obj/structure/closet/crate/chest/steward/wheat/PopulateContents() +/obj/structure/closet/crate/chest/crate/steward/wheat/PopulateContents() for(var/i in 1 to 5) new /obj/item/reagent_containers/food/snacks/produce/wheat(src) + + +// ===================== CRAFTING IMPORTS ========================== +// ---------- Iron ---------------- +/datum/roguestock/import/iron + name = "Iron scrap import" + desc = "These ingots come at a steep price." + item_type = /obj/structure/closet/crate/chest/crate/steward/iron + export_price = 150 + importexport_amt = 1 + +/obj/structure/closet/crate/chest/crate/steward/iron/PopulateContents() + for(var/i in 1 to 5) + new /obj/item/rogueore/iron(src) + +// ---------- Glass ---------------- +/datum/roguestock/import/glasspane + name = "Glass panes import" + desc = "Helpful for fixing windows." + item_type = /obj/structure/closet/crate/chest/crate/steward/glass + export_price = 60 + importexport_amt = 1 + +/obj/structure/closet/crate/chest/crate/steward/glass/PopulateContents() + for(var/i in 2 to 6) + new /obj/item/natural/glass(src) + +// ---------- Mining Tools ---------------- +/datum/roguestock/import/miningtools + name = "Mining equipment" + desc = "Made by dwarven craftsmen." + item_type = /obj/structure/closet/crate/chest/crate/steward/miningtools + export_price = 60 + importexport_amt = 1 + +/obj/structure/closet/crate/chest/crate/steward/miningtools/PopulateContents() + new /obj/item/rogueweapon/pick (src) + new /obj/item/flashlight/flare/torch/lantern/copper(src) + +// ---------- Woodsman Tools ---------------- +/datum/roguestock/import/woodsmantools + name = "Woodsman equipment" + desc = "For cutting and chastising of trees, large and small." + item_type = /obj/structure/closet/crate/chest/crate/steward/woodsmantools + export_price = 60 + importexport_amt = 1 + +/obj/structure/closet/crate/chest/crate/steward/woodsmantools/PopulateContents() + new /obj/item/rogueweapon/polearm/halberd/bardiche/woodcutter(src) + new /obj/item/rogueweapon/handsaw (src) + +// ---------- Craftsman Tools ---------------- +/datum/roguestock/import/craftingtools + name = "Crafting tools" + desc = "For making stone blocks and planks." + item_type = /obj/structure/closet/crate/chest/crate/steward/tools + export_price = 40 + importexport_amt = 1 + +/obj/structure/closet/crate/chest/crate/steward/tools/PopulateContents() + new /obj/item/rogueweapon/handsaw (src) + new /obj/item/rogueweapon/chisel(src) + +// ---------- Wagon ---------------- +/datum/roguestock/import/woodsmantools + name = "Hand cart" + desc = "For transporting goods around." + item_type = /obj/structure/closet/crate/chest/crate/steward/handcart + export_price = 40 + importexport_amt = 1 + +/obj/structure/closet/crate/chest/crate/steward/handcart/PopulateContents() + new /obj/structure/handcart(src) + + diff --git a/code/modules/roguetown/roguestock/stockpile.dm b/code/modules/roguetown/roguestock/stockpile.dm index a0eb57a730..03a537a359 100644 --- a/code/modules/roguetown/roguestock/stockpile.dm +++ b/code/modules/roguetown/roguestock/stockpile.dm @@ -87,6 +87,114 @@ withdraw_price = 5 importexport_amt = 20 +/datum/roguestock/stockpile/oat + name = "Oats" + desc = "A cereal grain." + item_type = /obj/item/reagent_containers/food/snacks/produce/oat + payout_price = 2 + export_price = 3 + withdraw_price = 3 + importexport_amt = 10 + +/datum/roguestock/stockpile/meat + name = "Meat" + desc = "Edible flesh harvested from animals." + item_type = /obj/item/reagent_containers/food/snacks/rogue/meat/steak + payout_price = 5 + export_price = 8 + withdraw_price = 8 + importexport_amt = 5 +/* +/datum/roguestock/stockpile/poultry + name = "Bird Meat" + desc = "Edible flesh harvested from birds." + item_type = /obj/item/reagent_containers/food/snacks/rogue/meat/poultry + payout_price = 5 + export_price = 8 + withdraw_price = 8 + importexport_amt = 5 + +/datum/roguestock/stockpile/fat + name = "Fat" + desc = "Greasy flesh from an animal." + item_type = /obj/item/reagent_containers/food/snacks/fat + payout_price = 3 + export_price = 5 + withdraw_price = 5 + importexport_amt = 5 + +/datum/roguestock/stockpile/egg + name = "Cackleberry" + desc = "Cackleberry laid by a hen." + item_type = /obj/item/reagent_containers/food/snacks/egg + payout_price = 3 + export_price = 5 + withdraw_price = 5 + importexport_amt = 5 + +/datum/roguestock/stockpile/butter + name = "Butter" + desc = "The product of milk and salt." + item_type = /obj/item/reagent_containers/food/snacks/butter + payout_price = 9 + export_price = 13 + withdraw_price = 13 + importexport_amt = 5 + +/datum/roguestock/stockpile/cheese + name = "Cheese" + desc = "The product of milk and salt." + item_type = /obj/item/reagent_containers/food/snacks/rogue/cheese + payout_price = 3 + export_price = 5 + withdraw_price = 5 + importexport_amt = 5 + +/datum/roguestock/stockpile/apple + name = "Apple" + desc = "Harvested produce." + item_type = /obj/item/reagent_containers/food/snacks/produce/apple + payout_price = 3 + export_price = 5 + withdraw_price = 5 + importexport_amt = 5 + +/datum/roguestock/stockpile/jacksberry + name = "Jacksberries" + desc = "Sweet berries, prime for winemaking." + item_type = /obj/item/reagent_containers/food/snacks/produce/jacksberry + payout_price = 2 + export_price = 3 + withdraw_price = 3 + importexport_amt = 10 + +/datum/roguestock/stockpile/onion + name = "Onion" + desc = "A bulb vegetable." + item_type = /obj/item/reagent_containers/food/snacks/produce/onion + payout_price = 2 + export_price = 3 + withdraw_price = 3 + importexport_amt = 10 + +/datum/roguestock/stockpile/cabbage + name = "Cabbage" + desc = "A leafy vegetable." + item_type = /obj/item/reagent_containers/food/snacks/produce/cabbage + payout_price = 2 + export_price = 3 + withdraw_price = 3 + importexport_amt = 10 + +/datum/roguestock/stockpile/potato + name = "Potato" + desc = "An interesting tuber." + item_type = /obj/item/reagent_containers/food/snacks/produce/potato + payout_price = 2 + export_price = 3 + withdraw_price = 3 + importexport_amt = 10 +*/ /datum/roguestock/stockpile/turnip name = "Turnips" desc = "The spine of many communities." @@ -96,15 +204,6 @@ withdraw_price = 3 importexport_amt = 20 -/datum/roguestock/stockpile/iron - name = "Iron Ore" - desc = "Raw unrefined iron ore." - item_type = /obj/item/rogueore/iron - payout_price = 5 - withdraw_price = 15 - export_price = 12 - importexport_amt = 10 - /datum/roguestock/stockpile/copper name = "Copper Ingot" desc = "Low-Cost Copper Ingots from Zybantu." // Hinting at the increasing price in the future/ore diff --git a/code/modules/ruins/lavaland_ruin_code.dm b/code/modules/ruins/lavaland_ruin_code.dm index e183c4097d..57fca7bd38 100644 --- a/code/modules/ruins/lavaland_ruin_code.dm +++ b/code/modules/ruins/lavaland_ruin_code.dm @@ -1,16 +1,5 @@ //If you're looking for spawners like ash walker eggs, check ghost_role_spawners.dm -///Wizard tower item -/obj/item/disk/design_disk/adv/knight_gear - name = "Magic Disk of Smithing" - -/obj/item/disk/design_disk/adv/knight_gear/Initialize() - . = ..() - var/datum/design/knight_armour/A = new - var/datum/design/knight_helmet/H = new - blueprints[1] = A - blueprints[2] = H - //lavaland_surface_seed_vault.dmm //Seed Vault @@ -20,27 +9,6 @@ //Free Golems - -/obj/item/disk/design_disk/golem_shell - name = "Golem Creation Disk" - desc = "" - icon_state = "datadisk1" - max_blueprints = 1 - -/obj/item/disk/design_disk/golem_shell/Initialize() - . = ..() - var/datum/design/golem_shell/G = new - blueprints[1] = G - -/datum/design/golem_shell - name = "Golem Shell Construction" - desc = "" - id = "golem" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 40000) - build_path = /obj/item/golem_shell - category = list("Imported") - /obj/item/golem_shell name = "incomplete free golem shell" icon = 'icons/obj/wizard.dmi' @@ -65,7 +33,6 @@ /obj/item/stack/sheet/mineral/bananium = /datum/species/golem/bananium, /obj/item/stack/sheet/mineral/titanium = /datum/species/golem/titanium, /obj/item/stack/sheet/mineral/plastitanium = /datum/species/golem/plastitanium, - /obj/item/stack/sheet/mineral/abductor = /datum/species/golem/alloy, /obj/item/stack/sheet/mineral/wood = /datum/species/golem/wood, /obj/item/stack/sheet/bluespace_crystal = /datum/species/golem/bluespace, /obj/item/stack/sheet/runed_metal = /datum/species/golem/runic, @@ -124,10 +91,8 @@ suit = /obj/item/clothing/suit/toggle/labcoat shoes = /obj/item/clothing/shoes/combat gloves = /obj/item/clothing/gloves/combat - ears = /obj/item/radio/headset/syndicate/alt back = /obj/item/storage/backpack r_pocket = /obj/item/gun/ballistic/automatic/pistol - id = /obj/item/card/id/syndicate/anyone implants = list(/obj/item/implant/weapons_auth) /datum/outfit/lavaland_syndicate/post_equip(mob/living/carbon/human/H) @@ -144,12 +109,11 @@ /obj/effect/mob_spawn/human/lavaland_syndicate/comms/space/Initialize() . = ..() if(prob(90)) //only has a 10% chance of existing, otherwise it'll just be a NPC syndie. - new /mob/living/simple_animal/hostile/syndicate/ranged(get_turf(src)) +// new /mob/living/simple_animal/hostile/syndicate/ranged(get_turf(src)) return INITIALIZE_HINT_QDEL /datum/outfit/lavaland_syndicate/comms name = "Lavaland Syndicate Comms Agent" - r_hand = /obj/item/melee/transforming/energy/sword/saber mask = /obj/item/clothing/mask/chameleon/gps suit = /obj/item/clothing/suit/armor/vest diff --git a/code/modules/ruins/lavalandruin_code/pizzaparty.dm b/code/modules/ruins/lavalandruin_code/pizzaparty.dm deleted file mode 100644 index a7776f4e6a..0000000000 --- a/code/modules/ruins/lavalandruin_code/pizzaparty.dm +++ /dev/null @@ -1,9 +0,0 @@ -//lavaland_surface_pizzaparty.dmm - -/obj/effect/spawner/lootdrop/pizzaparty - name = "pizza bomb spawner" - loot = list(/obj/item/pizzabox/margherita = 3, - /obj/item/pizzabox/meat = 3, - /obj/item/pizzabox/mushroom = 3, - /obj/item/pizzabox/bomb = 1) - lootdoubles = FALSE diff --git a/code/modules/ruins/lavalandruin_code/syndicate_base.dm b/code/modules/ruins/lavalandruin_code/syndicate_base.dm deleted file mode 100644 index 5fac00cd13..0000000000 --- a/code/modules/ruins/lavalandruin_code/syndicate_base.dm +++ /dev/null @@ -1,22 +0,0 @@ -//lavaland_surface_syndicate_base1.dmm - -/obj/machinery/vending/syndichem - name = "\improper SyndiChem" - desc = "" - req_access = list(ACCESS_SYNDICATE) - products = list(/obj/item/stack/cable_coil = 5, - /obj/item/assembly/igniter = 20, - /obj/item/assembly/prox_sensor = 5, - /obj/item/assembly/signaler = 5, - /obj/item/assembly/timer = 5, - /obj/item/assembly/voice = 5, - /obj/item/assembly/health = 5, - /obj/item/assembly/infra = 5, - /obj/item/grenade/chem_grenade = 5, - /obj/item/grenade/chem_grenade/large = 5, - /obj/item/grenade/chem_grenade/pyro = 5, - /obj/item/grenade/chem_grenade/cryo = 5, - /obj/item/grenade/chem_grenade/adv_release = 5, - /obj/item/reagent_containers/food/drinks/bottle/holywater = 1) - product_slogans = "It's not pyromania if you're getting paid!;You smell that? Plasma, son. Nothing else in the world smells like that.;I love the smell of Plasma in the morning." - resistance_flags = FIRE_PROOF diff --git a/code/modules/ruins/objects_and_mobs/ash_walker_den.dm b/code/modules/ruins/objects_and_mobs/ash_walker_den.dm index e7efbf4f2c..d7f7b89329 100644 --- a/code/modules/ruins/objects_and_mobs/ash_walker_den.dm +++ b/code/modules/ruins/objects_and_mobs/ash_walker_den.dm @@ -27,7 +27,6 @@ START_PROCESSING(SSprocessing, src) /obj/structure/lavaland/ash_walker/deconstruct(disassembled) - new /obj/item/assembly/signaler/anomaly (get_step(loc, pick(GLOB.alldirs))) new /obj/effect/collapse(loc) return ..() diff --git a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm index b6c518505f..73690f1e78 100644 --- a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm +++ b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm @@ -12,7 +12,7 @@ pixel_x = -32 pixel_y = -32 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - light_range = 8 + light_outer_range = 8 light_color = LIGHT_COLOR_LAVA var/open = FALSE var/changing_openness = FALSE diff --git a/code/modules/ruins/objects_and_mobs/sin_ruins.dm b/code/modules/ruins/objects_and_mobs/sin_ruins.dm index 7f07ea7697..0557418264 100644 --- a/code/modules/ruins/objects_and_mobs/sin_ruins.dm +++ b/code/modules/ruins/objects_and_mobs/sin_ruins.dm @@ -57,19 +57,6 @@ canvas rotting away and contents vanishing.") qdel(src) -/obj/structure/cursed_money/attack_hand(mob/living/user) - . = ..() - if(.) - return - user.visible_message("[user] opens the bag and \ - and removes a die. The bag then vanishes.", - "I open the bag...!\n\ - And see a bag full of dice. Confused, \ - you take one... and the bag vanishes.") - var/turf/T = get_turf(user) - var/obj/item/dice/d20/fate/one_use/critical_fail = new(T) - user.put_in_hands(critical_fail) - qdel(src) /obj/effect/gluttony //Gluttony's wall: Used in the Gluttony ruin. Only lets the overweight through. name = "gluttony's wall" @@ -88,10 +75,7 @@ return TRUE else to_chat(H, "You're repulsed by even looking at [src]. Only a pig could force themselves to go through it.") - if(istype(mover, /mob/living/simple_animal/hostile/morph)) - return TRUE - else - return FALSE + return FALSE /obj/structure/mirror/magic/pride //Pride's mirror: Used in the Pride ruin. name = "pride's mirror" diff --git a/code/modules/ruins/spaceruin_code/TheDerelict.dm b/code/modules/ruins/spaceruin_code/TheDerelict.dm deleted file mode 100644 index 1aa06ab08b..0000000000 --- a/code/modules/ruins/spaceruin_code/TheDerelict.dm +++ /dev/null @@ -1,215 +0,0 @@ -/////////// thederelict items - -/obj/item/paper/fluff/ruins/thederelict/equipment - info = "If the equipment breaks there should be enough spare parts in our engineering storage near the north east solar array." - name = "Equipment Inventory" - -/obj/item/paper/fluff/ruins/thederelict/syndie_mission - name = "Mission Objectives" - info = "The Syndicate have cunningly disguised a Syndicate Uplink as your PDA. Simply enter the code \"678 Bravo\" into the ringtone select to unlock its hidden features.

    Objective #1. Kill the God damn AI in a fire blast that it rocks the station. Success!
    Objective #2. Escape alive. Failed." - -/obj/item/paper/fluff/ruins/thederelict/nukie_objectives - name = "Objectives of a Nuclear Operative" - info = "Objective #1: Destroy the station with a nuclear device." - -/obj/item/paper/crumpled/bloody/ruins/thederelict/unfinished - name = "unfinished paper scrap" - desc = "" - info = "I, Victor Belyakov, do hereby leave my _- " -/obj/item/paper/fluff/ruins/thederelict/vaultraider - name = "Vault Raider Objectives" - info = "Objectives #1: Find out what is hidden in Kosmicheskaya Stantsiya 13s Vault" - - -/// Vault controller for use on the derelict/KS13. -/obj/machinery/computer/vaultcontroller - name = "vault controller" - desc = "" - icon_screen = "power" - icon_keyboard = "power_key" - light_color = LIGHT_COLOR_YELLOW - use_power = NO_POWER_USE - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - - var/obj/structure/cable/attached_cable - var/obj/machinery/door/airlock/vault/derelict/door1 - var/obj/machinery/door/airlock/vault/derelict/door2 - var/locked = TRUE - var/siphoned_power = 0 - var/siphon_max = 1e7 - - ui_x = 300 - ui_y = 120 - - -/obj/machinery/computer/monitor/examine(mob/user) - . = ..() - . += "It appears to be powered via a cable connector." - - -//Checks for cable connection, charges if possible. -/obj/machinery/computer/vaultcontroller/process() - if(siphoned_power >= siphon_max) - return - update_cable() - if(attached_cable) - attempt_siphon() - - -///Looks for a cable connection beneath the machine. -/obj/machinery/computer/vaultcontroller/proc/update_cable() - var/turf/T = get_turf(src) - attached_cable = locate(/obj/structure/cable) in T - - -///Initializes airlock links. -/obj/machinery/computer/vaultcontroller/proc/find_airlocks() - for(var/obj/machinery/door/airlock/A in GLOB.airlocks) - if(A.id_tag == "derelictvault") - if(!door1) - door1 = A - continue - if(door1 && !door2) - door2 = A - break - - -///Tries to charge from powernet excess, no upper limit except max charge. -/obj/machinery/computer/vaultcontroller/proc/attempt_siphon() - var/surpluspower = CLAMP(attached_cable.surplus(), 0, (siphon_max - siphoned_power)) - if(surpluspower) - attached_cable.add_load(surpluspower) - siphoned_power += surpluspower - - -///Handles the doors closing -/obj/machinery/computer/vaultcontroller/proc/cycle_close(obj/machinery/door/airlock/A) - A.safe = FALSE //Make sure its forced closed, always - A.unbolt() - A.close() - A.bolt() - - -///Handles the doors opening -/obj/machinery/computer/vaultcontroller/proc/cycle_open(obj/machinery/door/airlock/A) - A.unbolt() - A.open() - A.bolt() - - -///Attempts to lock the vault doors -/obj/machinery/computer/vaultcontroller/proc/lock_vault() - if(door1 && !door1.density) - cycle_close(door1) - if(door2 && !door2.density) - cycle_close(door2) - if(door1.density && door1.locked && door2.density && door2.locked) - locked = TRUE - - -///Attempts to unlock the vault doors -/obj/machinery/computer/vaultcontroller/proc/unlock_vault() - if(door1 && door1.density) - cycle_open(door1) - if(door2 && door2.density) - cycle_open(door2) - if(!door1.density && door1.locked && !door2.density && door2.locked) - locked = FALSE - - -///Attempts to lock/unlock vault doors, if machine is charged. -/obj/machinery/computer/vaultcontroller/proc/activate_lock() - if(siphoned_power < siphon_max) - return - if(!door1 || !door2) - find_airlocks() - if(locked) - unlock_vault() - else - lock_vault() - - -/obj/machinery/computer/vaultcontroller/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "vault_controller", name, ui_x, ui_y, master_ui, state) - ui.open() - - -/obj/machinery/computer/vaultcontroller/ui_act(action, params) - if(..()) - return - switch(action) - if("togglelock") - activate_lock() - - -/obj/machinery/computer/vaultcontroller/ui_data() - var/list/data = list() - data["stored"] = siphoned_power - data["max"] = siphon_max - data["doorstatus"] = locked - return data - - -///Airlock that can't be deconstructed, broken or hacked. -/obj/machinery/door/airlock/vault/derelict - locked = TRUE - move_resist = INFINITY - use_power = NO_POWER_USE - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - id_tag = "derelictvault" - - -///Overrides screwdriver attack to prevent all deconstruction and hacking. -/obj/machinery/door/airlock/vault/derelict/attackby(obj/item/C, mob/user, params) - if(C.tool_behaviour == TOOL_SCREWDRIVER) - return - ..() - - -// So drones can teach borgs and AI dronespeak. For best effect, combine with mother drone lawset. -/obj/item/dronespeak_manual - name = "dronespeak manual" - desc = "" - icon = 'icons/obj/library.dmi' - icon_state = "book2" - -/obj/item/dronespeak_manual/attack_self(mob/living/user) - ..() - if(isdrone(user) || issilicon(user)) - if(user.has_language(/datum/language/drone)) - to_chat(user, "I start skimming through [src], but you already know dronespeak.") - else - to_chat(user, "I start skimming through [src], and suddenly the drone chittering makes sense.") - user.grant_language(/datum/language/drone) - return - - if(user.has_language(/datum/language/drone)) - to_chat(user, "I start skimming through [src], but you already know dronespeak.") - else - to_chat(user, "I start skimming through [src], but you can't make any sense of the contents.") - -/obj/item/dronespeak_manual/attack(mob/living/M, mob/living/user) - if(!istype(M) || !istype(user)) - return - if(M == user) - attack_self(user) - return - - playsound(loc, "punch", 25, TRUE, -1) - if(isdrone(M) || issilicon(M)) - if(M.has_language(/datum/language/drone)) - M.visible_message("[user] beats [M] over the head with [src]!", "[user] beats you over the head with [src]!", "I hear smacking.") - else - M.visible_message("[user] teaches [M] by beating [M.p_them()] over the head with [src]!", "As [user] hits you with [src], chitters resonate in your mind.", "I hear smacking.") - M.grant_language(/datum/language/drone) - return - -/obj/structure/fluff/oldturret - name = "broken turret" - desc = "" - icon = 'icons/obj/turrets.dmi' - icon_state = "turretCover" - density = TRUE diff --git a/code/modules/ruins/spaceruin_code/caravanambush.dm b/code/modules/ruins/spaceruin_code/caravanambush.dm deleted file mode 100644 index 41b5cd149b..0000000000 --- a/code/modules/ruins/spaceruin_code/caravanambush.dm +++ /dev/null @@ -1,169 +0,0 @@ -//caravan ambush - -/obj/item/wrench/caravan - color = "#ff0000" - desc = "" - name = "experimental wrench" - toolspeed = 0.3 - -/obj/item/screwdriver/caravan - color = "#ff0000" - desc = "" - name = "experimental screwdriver" - toolspeed = 0.3 - random_color = FALSE - -/obj/item/wirecutters/caravan - color = "#ff0000" - desc = "" - name = "experimental wirecutters" - toolspeed = 0.3 - random_color = FALSE - -/obj/item/crowbar/red/caravan - color = "#ff0000" - desc = "" - name = "experimental crowbar" - toolspeed = 0.3 - -/obj/machinery/computer/shuttle/caravan - -/obj/item/circuitboard/computer/caravan - build_path = /obj/machinery/computer/shuttle/caravan - -/obj/item/circuitboard/computer/caravan/trade1 - build_path = /obj/machinery/computer/shuttle/caravan/trade1 - -/obj/item/circuitboard/computer/caravan/pirate - build_path = /obj/machinery/computer/shuttle/caravan/pirate - -/obj/item/circuitboard/computer/caravan/syndicate1 - build_path = /obj/machinery/computer/shuttle/caravan/syndicate1 - -/obj/item/circuitboard/computer/caravan/syndicate2 - build_path = /obj/machinery/computer/shuttle/caravan/syndicate2 - -/obj/item/circuitboard/computer/caravan/syndicate3 - build_path = /obj/machinery/computer/shuttle/caravan/syndicate3 - -/obj/machinery/computer/shuttle/caravan/trade1 - name = "Small Freighter Shuttle Console" - desc = "" - circuit = /obj/item/circuitboard/computer/caravan/trade1 - shuttleId = "caravantrade1" - possible_destinations = "whiteship_away;whiteship_home;whiteship_z4;whiteship_lavaland;caravantrade1_custom;caravantrade1_ambush" - -/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/Initialize() - . = ..() - GLOB.jam_on_wardec += src - -/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/Destroy() - GLOB.jam_on_wardec -= src - return ..() - -/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/trade1 - name = "Small Freighter Navigation Computer" - desc = "" - shuttleId = "caravantrade1" - lock_override = NONE - shuttlePortId = "caravantrade1_custom" - jumpto_ports = list("whiteship_away" = 1, "whiteship_home" = 1, "whiteship_z4" = 1, "caravantrade1_ambush" = 1) - view_range = 14 - x_offset = -5 - y_offset = -5 - designate_time = 100 - -/obj/machinery/computer/shuttle/caravan/pirate - name = "Pirate Cutter Shuttle Console" - desc = "" - icon_screen = "syndishuttle" - icon_keyboard = "syndie_key" - light_color = LIGHT_COLOR_RED - circuit = /obj/item/circuitboard/computer/caravan/pirate - shuttleId = "caravanpirate" - possible_destinations = "caravanpirate_custom;caravanpirate_ambush" - -/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/pirate - name = "Pirate Cutter Navigation Computer" - desc = "" - icon_screen = "syndishuttle" - icon_keyboard = "syndie_key" - shuttleId = "caravanpirate" - lock_override = NONE - shuttlePortId = "caravanpirate_custom" - jumpto_ports = list("caravanpirate_ambush" = 1) - view_range = 14 - x_offset = 3 - y_offset = -6 - -/obj/machinery/computer/shuttle/caravan/syndicate1 - name = "Syndicate Fighter Shuttle Console" - desc = "" - icon_screen = "syndishuttle" - icon_keyboard = "syndie_key" - light_color = LIGHT_COLOR_RED - req_access = list(ACCESS_SYNDICATE) - circuit = /obj/item/circuitboard/computer/caravan/syndicate1 - shuttleId = "caravansyndicate1" - possible_destinations = "caravansyndicate1_custom;caravansyndicate1_ambush;caravansyndicate1_listeningpost" - -/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/syndicate1 - name = "Syndicate Fighter Navigation Computer" - desc = "" - icon_screen = "syndishuttle" - icon_keyboard = "syndie_key" - shuttleId = "caravansyndicate1" - lock_override = NONE - shuttlePortId = "caravansyndicate1_custom" - jumpto_ports = list("caravansyndicate1_ambush" = 1, "caravansyndicate1_listeningpost" = 1) - view_range = 7 - x_offset = 2 - y_offset = 0 - -/obj/machinery/computer/shuttle/caravan/syndicate2 - name = "Syndicate Fighter Shuttle Console" - desc = "" - icon_screen = "syndishuttle" - icon_keyboard = "syndie_key" - req_access = list(ACCESS_SYNDICATE) - light_color = LIGHT_COLOR_RED - circuit = /obj/item/circuitboard/computer/caravan/syndicate2 - shuttleId = "caravansyndicate2" - possible_destinations = "caravansyndicate2_custom;caravansyndicate2_ambush;caravansyndicate1_listeningpost" - -/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/syndicate2 - name = "Syndicate Fighter Navigation Computer" - desc = "" - icon_screen = "syndishuttle" - icon_keyboard = "syndie_key" - shuttleId = "caravansyndicate2" - lock_override = NONE - shuttlePortId = "caravansyndicate2_custom" - jumpto_ports = list("caravansyndicate2_ambush" = 1, "caravansyndicate1_listeningpost" = 1) - view_range = 7 - x_offset = 0 - y_offset = 2 - -/obj/machinery/computer/shuttle/caravan/syndicate3 - name = "Syndicate Drop Ship Console" - desc = "" - icon_screen = "syndishuttle" - icon_keyboard = "syndie_key" - req_access = list(ACCESS_SYNDICATE) - light_color = LIGHT_COLOR_RED - circuit = /obj/item/circuitboard/computer/caravan/syndicate3 - shuttleId = "caravansyndicate3" - possible_destinations = "caravansyndicate3_custom;caravansyndicate3_ambush;caravansyndicate3_listeningpost" - -/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/syndicate3 - name = "Syndicate Drop Ship Navigation Computer" - desc = "" - icon_screen = "syndishuttle" - icon_keyboard = "syndie_key" - shuttleId = "caravansyndicate3" - lock_override = NONE - shuttlePortId = "caravansyndicate3_custom" - jumpto_ports = list("caravansyndicate3_ambush" = 1, "caravansyndicate3_listeningpost" = 1) - view_range = 10 - x_offset = -1 - y_offset = -3 diff --git a/code/modules/ruins/spaceruin_code/clericsden.dm b/code/modules/ruins/spaceruin_code/clericsden.dm deleted file mode 100644 index 91f9fbe164..0000000000 --- a/code/modules/ruins/spaceruin_code/clericsden.dm +++ /dev/null @@ -1,37 +0,0 @@ -/////////// cleric's den items. - -//Primary reward: the cleric's mace design disk. -/obj/item/disk/design_disk/adv/cleric_mace - name = "Enshrined Disc of Smiting" - -/obj/item/disk/design_disk/adv/cleric_mace/Initialize() - . = ..() - var/datum/design/cleric_mace/M = new - blueprints[1] = M - -/obj/item/paper/fluff/ruins/clericsden/contact - info = "Father Aurellion, the ritual is complete, and soon our brothers at the bastion will see the error of our ways. After all, a god of clockwork or blood? Preposterous. Only the TRUE GOD should have so much power. Signed, Father Odivallus." - -/obj/item/paper/fluff/ruins/clericsden/warning - info = "FATHER ODIVALLUS DO NOT GO FORWARD WITH THE RITUAL. THE ASTEROID WE'RE ANCHORED TO IS UNSTABLE, YOU WILL DESTROY THE STATION. I HOPE THIS REACHES YOU IN TIME. FATHER AURELLION." - -/mob/living/simple_animal/hostile/construct/proteon - name = "Proteon" - real_name = "Proteon" - desc = "" - icon_state = "proteon" - icon_living = "proteon" - maxHealth = 35 - health = 35 - melee_damage_lower = 8 - melee_damage_upper = 10 - retreat_distance = 4 //AI proteons will rapidly move in and out of combat to avoid conflict, but will still target and follow you. - attack_verb_continuous = "pinches" - attack_verb_simple = "pinch" - environment_smash = ENVIRONMENT_SMASH_WALLS - attack_sound = 'sound/blank.ogg' - playstyle_string = "I are a Proteon. Your abilities in combat are outmatched by most combat constructs, but you are still fast and nimble. Run metal and supplies, and cooperate with your fellow cultists." - -/mob/living/simple_animal/hostile/construct/proteon/hostile //Style of mob spawned by trapped cult runes in the cleric ruin. - AIStatus = AI_ON - environment_smash = ENVIRONMENT_SMASH_STRUCTURES //standard ai construct behavior, breaks things if it wants, but not walls. diff --git a/code/modules/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/ruins/spaceruin_code/hilbertshotel.dm index 32991b3465..ea95298678 100644 --- a/code/modules/ruins/spaceruin_code/hilbertshotel.dm +++ b/code/modules/ruins/spaceruin_code/hilbertshotel.dm @@ -178,21 +178,18 @@ GLOBAL_VAR_INIT(hhmysteryRoomNumber, 1337) //Template Stuff /datum/map_template/hilbertshotel name = "Hilbert's Hotel Room" - mappath = '_maps/templates/hilbertshotel.dmm' var/landingZoneRelativeX = 2 var/landingZoneRelativeY = 8 /datum/map_template/hilbertshotel/empty name = "Empty Hilbert's Hotel Room" - mappath = '_maps/templates/hilbertshotelempty.dmm' /datum/map_template/hilbertshotel/lore name = "Doctor Hilbert's Deathbed" - mappath = '_maps/templates/hilbertshotellore.dmm' /datum/map_template/hilbertshotelstorage name = "Hilbert's Hotel Storage" - mappath = '_maps/templates/hilbertshotelstorage.dmm' + //Turfs and Areas @@ -269,16 +266,9 @@ GLOBAL_VAR_INIT(hhmysteryRoomNumber, 1337) /turf/closed/indestructible/hoteldoor/attack_hulk(mob/living/carbon/human/user) promptExit(user) -/turf/closed/indestructible/hoteldoor/attack_larva(mob/user) - promptExit(user) - /turf/closed/indestructible/hoteldoor/attack_slime(mob/user) promptExit(user) -/turf/closed/indestructible/hoteldoor/attack_robot(mob/user) - if(get_dist(get_turf(src), get_turf(user)) <= 1) - promptExit(user) - /turf/closed/indestructible/hoteldoor/AltClick(mob/user) . = ..() if(get_dist(get_turf(src), get_turf(user)) <= 1) diff --git a/code/modules/ruins/spaceruin_code/whiteshipruin_box.dm b/code/modules/ruins/spaceruin_code/whiteshipruin_box.dm deleted file mode 100644 index b08d87233f..0000000000 --- a/code/modules/ruins/spaceruin_code/whiteshipruin_box.dm +++ /dev/null @@ -1,12 +0,0 @@ -/////////// ruined whiteship - -/obj/item/circuitboard/computer/white_ship/ruin - build_path = /obj/machinery/computer/shuttle/white_ship/ruin - -/obj/machinery/computer/shuttle/white_ship/ruin - shuttleId = "whiteship_ruin" - circuit = /obj/item/circuitboard/computer/white_ship/ruin - -/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship/ruin - shuttleId = "whiteship_ruin" - diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm deleted file mode 100644 index 9a573be60b..0000000000 --- a/code/modules/security_levels/keycard_authentication.dm +++ /dev/null @@ -1,146 +0,0 @@ -GLOBAL_DATUM_INIT(keycard_events, /datum/events, new) - -#define KEYCARD_RED_ALERT "Red Alert" -#define KEYCARD_EMERGENCY_MAINTENANCE_ACCESS "Emergency Maintenance Access" -#define KEYCARD_BSA_UNLOCK "Bluespace Artillery Unlock" - -/obj/machinery/keycard_auth - name = "Keycard Authentication Device" - desc = "" - icon = 'icons/obj/monitors.dmi' - icon_state = "auth_off" - use_power = IDLE_POWER_USE - idle_power_usage = 2 - active_power_usage = 6 - power_channel = ENVIRON - req_access = list(ACCESS_KEYCARD_AUTH) - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - ui_x = 375 - ui_y = 125 - - var/datum/callback/ev - var/event = "" - var/obj/machinery/keycard_auth/event_source - var/mob/triggerer = null - var/waiting = 0 - -/obj/machinery/keycard_auth/Initialize() - . = ..() - ev = GLOB.keycard_events.addEvent("triggerEvent", CALLBACK(src, PROC_REF(triggerEvent))) - -/obj/machinery/keycard_auth/Destroy() - GLOB.keycard_events.clearEvent("triggerEvent", ev) - QDEL_NULL(ev) - return ..() - -/obj/machinery/keycard_auth/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "keycard_auth", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/keycard_auth/ui_data() - var/list/data = list() - data["waiting"] = waiting - data["auth_required"] = event_source ? event_source.event : 0 - data["red_alert"] = (seclevel2num(get_security_level()) >= SEC_LEVEL_RED) ? 1 : 0 - data["emergency_maint"] = GLOB.emergency_access - data["bsa_unlock"] = GLOB.bsa_unlock - return data - -/obj/machinery/keycard_auth/ui_status(mob/user) - if(isanimal(user)) - var/mob/living/simple_animal/A = user - if(!A.dextrous) - to_chat(user, "I are too primitive to use this device!") - return UI_CLOSE - return ..() - -/obj/machinery/keycard_auth/ui_act(action, params) - if(..() || waiting || !allowed(usr)) - return - switch(action) - if("red_alert") - if(!event_source) - sendEvent(KEYCARD_RED_ALERT) - . = TRUE - if("emergency_maint") - if(!event_source) - sendEvent(KEYCARD_EMERGENCY_MAINTENANCE_ACCESS) - . = TRUE - if("auth_swipe") - if(event_source) - event_source.trigger_event(usr) - event_source = null - . = TRUE - if("bsa_unlock") - if(!event_source) - sendEvent(KEYCARD_BSA_UNLOCK) - . = TRUE - -/obj/machinery/keycard_auth/proc/sendEvent(event_type) - triggerer = usr - event = event_type - waiting = 1 - GLOB.keycard_events.fireEvent("triggerEvent", src) - addtimer(CALLBACK(src, PROC_REF(eventSent)), 20) - -/obj/machinery/keycard_auth/proc/eventSent() - triggerer = null - event = "" - waiting = 0 - -/obj/machinery/keycard_auth/proc/triggerEvent(source) - icon_state = "auth_on" - event_source = source - addtimer(CALLBACK(src, PROC_REF(eventTriggered)), 20) - -/obj/machinery/keycard_auth/proc/eventTriggered() - icon_state = "auth_off" - event_source = null - -/obj/machinery/keycard_auth/proc/trigger_event(confirmer) - log_game("[key_name(triggerer)] triggered and [key_name(confirmer)] confirmed event [event]") - message_admins("[ADMIN_LOOKUPFLW(triggerer)] triggered and [ADMIN_LOOKUPFLW(confirmer)] confirmed event [event]") - - var/area/A1 = get_area(triggerer) - deadchat_broadcast(" triggered [event] at [A1.name].", "[triggerer]", triggerer) - - var/area/A2 = get_area(confirmer) - deadchat_broadcast(" confirmed [event] at [A2.name].", "[confirmer]", confirmer) - switch(event) - if(KEYCARD_RED_ALERT) - set_security_level(SEC_LEVEL_RED) - if(KEYCARD_EMERGENCY_MAINTENANCE_ACCESS) - make_maint_all_access() - if(KEYCARD_BSA_UNLOCK) - toggle_bluespace_artillery() - -GLOBAL_VAR_INIT(emergency_access, FALSE) -/proc/make_maint_all_access() - for(var/area/maintenance/A in world) - for(var/obj/machinery/door/airlock/D in A) - D.emergency = TRUE - D.update_icon(0) - minor_announce("Access restrictions on maintenance and external airlocks have been lifted.", "Attention! Station-wide emergency declared!",1) - GLOB.emergency_access = TRUE - SSblackbox.record_feedback("nested tally", "keycard_auths", 1, list("emergency maintenance access", "enabled")) - -/proc/revoke_maint_all_access() - for(var/area/maintenance/A in world) - for(var/obj/machinery/door/airlock/D in A) - D.emergency = FALSE - D.update_icon(0) - minor_announce("Access restrictions in maintenance areas have been restored.", "Attention! Station-wide emergency rescinded:") - GLOB.emergency_access = FALSE - SSblackbox.record_feedback("nested tally", "keycard_auths", 1, list("emergency maintenance access", "disabled")) - -/proc/toggle_bluespace_artillery() - GLOB.bsa_unlock = !GLOB.bsa_unlock - minor_announce("Bluespace Artillery firing protocols have been [GLOB.bsa_unlock? "unlocked" : "locked"]", "Weapons Systems Update:") - SSblackbox.record_feedback("nested tally", "keycard_auths", 1, list("bluespace artillery", GLOB.bsa_unlock? "unlocked" : "locked")) - -#undef KEYCARD_RED_ALERT -#undef KEYCARD_EMERGENCY_MAINTENANCE_ACCESS -#undef KEYCARD_BSA_UNLOCK diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm deleted file mode 100644 index b541ab59bd..0000000000 --- a/code/modules/security_levels/security_levels.dm +++ /dev/null @@ -1,118 +0,0 @@ -GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN) -//SEC_LEVEL_GREEN = code green -//SEC_LEVEL_BLUE = code blue -//SEC_LEVEL_RED = code red -//SEC_LEVEL_DELTA = code delta - -//config.alert_desc_blue_downto - -/proc/set_security_level(level) - switch(level) - if("green") - level = SEC_LEVEL_GREEN - if("blue") - level = SEC_LEVEL_BLUE - if("red") - level = SEC_LEVEL_RED - if("delta") - level = SEC_LEVEL_DELTA - - //Will not be announced if you try to set to the same level as it already is - if(level >= SEC_LEVEL_GREEN && level <= SEC_LEVEL_DELTA && level != GLOB.security_level) - switch(level) - if(SEC_LEVEL_GREEN) - minor_announce(CONFIG_GET(string/alert_green), "Attention! Security level lowered to green:") - if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) - if(GLOB.security_level >= SEC_LEVEL_RED) - SSshuttle.emergency.modTimer(4) - else - SSshuttle.emergency.modTimer(2) - GLOB.security_level = SEC_LEVEL_GREEN - for(var/obj/machinery/firealarm/FA in GLOB.machines) - if(is_station_level(FA.z)) - FA.update_icon() - if(SEC_LEVEL_BLUE) - if(GLOB.security_level < SEC_LEVEL_BLUE) - minor_announce(CONFIG_GET(string/alert_blue_upto), "Attention! Security level elevated to blue:",1) - if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) - SSshuttle.emergency.modTimer(0.5) - else - minor_announce(CONFIG_GET(string/alert_blue_downto), "Attention! Security level lowered to blue:") - if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) - SSshuttle.emergency.modTimer(2) - GLOB.security_level = SEC_LEVEL_BLUE - for(var/obj/machinery/firealarm/FA in GLOB.machines) - if(is_station_level(FA.z)) - FA.update_icon() - if(SEC_LEVEL_RED) - if(GLOB.security_level < SEC_LEVEL_RED) - minor_announce(CONFIG_GET(string/alert_red_upto), "Attention! Code red!",1) - if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) - if(GLOB.security_level == SEC_LEVEL_GREEN) - SSshuttle.emergency.modTimer(0.25) - else - SSshuttle.emergency.modTimer(0.5) - else - minor_announce(CONFIG_GET(string/alert_red_downto), "Attention! Code red!") - GLOB.security_level = SEC_LEVEL_RED - - for(var/obj/machinery/firealarm/FA in GLOB.machines) - if(is_station_level(FA.z)) - FA.update_icon() - for(var/obj/machinery/computer/shuttle/pod/pod in GLOB.machines) - pod.admin_controlled = 0 - if(SEC_LEVEL_DELTA) - minor_announce(CONFIG_GET(string/alert_delta), "Attention! Delta security level reached!",1) - if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) - if(GLOB.security_level == SEC_LEVEL_GREEN) - SSshuttle.emergency.modTimer(0.25) - else if(GLOB.security_level == SEC_LEVEL_BLUE) - SSshuttle.emergency.modTimer(0.5) - GLOB.security_level = SEC_LEVEL_DELTA - for(var/obj/machinery/firealarm/FA in GLOB.machines) - if(is_station_level(FA.z)) - FA.update_icon() - for(var/obj/machinery/computer/shuttle/pod/pod in GLOB.machines) - pod.admin_controlled = 0 - if(level >= SEC_LEVEL_RED) - for(var/obj/machinery/door/D in GLOB.machines) - if(D.red_alert_access) - D.visible_message("[D] whirrs as it automatically lifts access requirements!") - playsound(D, 'sound/blank.ogg', 50, TRUE) - SSblackbox.record_feedback("tally", "security_level_changes", 1, get_security_level()) - SSnightshift.check_nightshift() - else - return - -/proc/get_security_level() - switch(GLOB.security_level) - if(SEC_LEVEL_GREEN) - return "green" - if(SEC_LEVEL_BLUE) - return "blue" - if(SEC_LEVEL_RED) - return "red" - if(SEC_LEVEL_DELTA) - return "delta" - -/proc/num2seclevel(num) - switch(num) - if(SEC_LEVEL_GREEN) - return "green" - if(SEC_LEVEL_BLUE) - return "blue" - if(SEC_LEVEL_RED) - return "red" - if(SEC_LEVEL_DELTA) - return "delta" - -/proc/seclevel2num(seclevel) - switch( lowertext(seclevel) ) - if("green") - return SEC_LEVEL_GREEN - if("blue") - return SEC_LEVEL_BLUE - if("red") - return SEC_LEVEL_RED - if("delta") - return SEC_LEVEL_DELTA diff --git a/code/modules/shuttle/arrivals.dm b/code/modules/shuttle/arrivals.dm index 29de97c994..47c67c3263 100644 --- a/code/modules/shuttle/arrivals.dm +++ b/code/modules/shuttle/arrivals.dm @@ -66,19 +66,12 @@ if(damaged) if(!CheckTurfsPressure()) damaged = FALSE - if(console) - console.say("Repairs complete, launching soon.") return //If this proc is high on the profiler add a cooldown to the stuff after this line else if(CheckTurfsPressure()) damaged = TRUE - if(console) - console.say("Alert, hull breach detected!") - var/obj/machinery/announcement_system/announcer = safepick(GLOB.announcement_systems) - if(!QDELETED(announcer)) - announcer.announce("ARRIVALS_BROKEN", channels = list()) if(mode != SHUTTLE_CALL) sound_played = FALSE mode = SHUTTLE_IDLE @@ -86,7 +79,7 @@ SendToStation() return - var/found_awake = PersonCheck() || NukeDiskCheck() + var/found_awake = PersonCheck() if(mode == SHUTTLE_CALL) if(found_awake) SendToStation() @@ -119,17 +112,9 @@ return TRUE return FALSE -/obj/docking_port/mobile/arrivals/proc/NukeDiskCheck() - for (var/obj/item/disk/nuclear/N in GLOB.poi_list) - if (get_area(N) in areas) - return TRUE - return FALSE - /obj/docking_port/mobile/arrivals/proc/SendToStation() var/dockTime = CONFIG_GET(number/arrivals_shuttle_dock_window) if(mode == SHUTTLE_CALL && timeLeft(1) > dockTime) - if(console) - console.say(damaged ? "Initiating emergency docking for repairs!" : "Now approaching: [station_name()].") hyperspace_sound(HYPERSPACE_LAUNCH, areas) //for the new guy setTimer(dockTime) @@ -141,18 +126,12 @@ var/cancel_reason if(PersonCheck()) cancel_reason = "lifeform dectected on board" - else if(NukeDiskCheck()) - cancel_reason = "critical station device detected on board" if(cancel_reason) mode = SHUTTLE_IDLE - if(console) - console.say("Launch cancelled, [cancel_reason].") return force_depart = FALSE . = ..() if(!. && !docked && !damaged) - if(console) - console.say("Welcome to your new life, employees!") for(var/L in queued_announces) var/datum/callback/C = L C.Invoke() @@ -173,8 +152,6 @@ if(pickingup) force_depart = TRUE if(mode == SHUTTLE_IDLE) - if(console) - console.say(pickingup ? "Departing immediately for new employee pickup." : "Shuttle departing.") var/obj/docking_port/stationary/target = target_dock if(QDELETED(target)) target = SSshuttle.getDock("arrivals_stationary") diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index a78ef8e5c7..1bec01c344 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -1,8 +1,6 @@ /obj/machinery/computer/shuttle name = "shuttle console" desc = "" - icon_screen = "shuttle" - icon_keyboard = "tech_key" light_color = LIGHT_COLOR_CYAN req_access = list( ) var/shuttleId diff --git a/code/modules/shuttle/docking.dm b/code/modules/shuttle/docking.dm index 7295ab2832..729a738b6d 100644 --- a/code/modules/shuttle/docking.dm +++ b/code/modules/shuttle/docking.dm @@ -94,7 +94,6 @@ hidden_turfs = new_hidden_turfs /****************************************************************************************************************/ - check_poddoors() new_dock.last_dock_time = world.time setDir(new_dock.dir) diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm deleted file mode 100644 index 6baf78fc5f..0000000000 --- a/code/modules/shuttle/emergency.dm +++ /dev/null @@ -1,621 +0,0 @@ -#define TIME_LEFT (SSshuttle.emergency.timeLeft()) -#define ENGINES_START_TIME 100 -#define ENGINES_STARTED (SSshuttle.emergency.mode == SHUTTLE_IGNITING) -#define IS_DOCKED (SSshuttle.emergency.mode == SHUTTLE_DOCKED || (ENGINES_STARTED)) - -/obj/machinery/computer/emergency_shuttle - name = "emergency shuttle console" - desc = "" - icon_screen = "shuttle" - icon_keyboard = "tech_key" - ui_x = 400 - ui_y = 400 - - var/auth_need = 3 - var/list/authorized = list() - -/obj/machinery/computer/emergency_shuttle/attackby(obj/item/I, mob/user,params) - if(istype(I, /obj/item/card/id)) - say("Please equip your ID card into your ID slot to authenticate.") - . = ..() - -/obj/machinery/computer/emergency_shuttle/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.human_adjacent_state) - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "emergency_shuttle_console", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/computer/emergency_shuttle/ui_data() - var/list/data = list() - - data["timer_str"] = SSshuttle.emergency.getTimerStr() - data["engines_started"] = ENGINES_STARTED - data["authorizations_remaining"] = max((auth_need - authorized.len), 0) - var/list/A = list() - for(var/i in authorized) - var/obj/item/card/id/ID = i - var/name = ID.registered_name - var/job = ID.assignment - - if(obj_flags & EMAGGED) - name = Gibberish(name) - job = Gibberish(job) - A += list(list("name" = name, "job" = job)) - data["authorizations"] = A - - data["enabled"] = (IS_DOCKED && !ENGINES_STARTED) - data["emagged"] = obj_flags & EMAGGED ? 1 : 0 - return data - -/obj/machinery/computer/emergency_shuttle/ui_act(action, params, datum/tgui/ui) - if(..()) - return - if(ENGINES_STARTED) // past the point of no return - return - if(!IS_DOCKED) // shuttle computer only has uses when onstation - return - - var/mob/user = usr - . = FALSE - - var/obj/item/card/id/ID = user.get_idcard(TRUE) - - if(!ID) - to_chat(user, "I don't have an ID.") - return - - if(!(ACCESS_HEADS in ID.access)) - to_chat(user, "The access level of your card is not high enough.") - return - - var/old_len = authorized.len - - switch(action) - if("authorize") - . = authorize(user) - - if("repeal") - authorized -= ID - - if("abort") - if(authorized.len) - // Abort. The action for when heads are fighting over whether - // to launch early. - authorized.Cut() - . = TRUE - - if((old_len != authorized.len) && !ENGINES_STARTED) - var/alert = (authorized.len > old_len) - var/repeal = (authorized.len < old_len) - var/remaining = max(0, auth_need - authorized.len) - if(authorized.len && remaining) - minor_announce("[remaining] authorizations needed until shuttle is launched early", null, alert) - if(repeal) - minor_announce("Early launch authorization revoked, [remaining] authorizations needed") - -/obj/machinery/computer/emergency_shuttle/proc/authorize(mob/user, source) - var/obj/item/card/id/ID = user.get_idcard(TRUE) - - if(ID in authorized) - return FALSE - for(var/i in authorized) - var/obj/item/card/id/other = i - if(other.registered_name == ID.registered_name) - return FALSE // No using IDs with the same name - - authorized += ID - - message_admins("[ADMIN_LOOKUPFLW(user)] has authorized early shuttle launch") - log_game("[key_name(user)] has authorized early shuttle launch in [COORD(src)]") - // Now check if we're on our way - . = TRUE - process() - -/obj/machinery/computer/emergency_shuttle/process() - // Launch check is in process in case auth_need changes for some reason - // probably external. - . = FALSE - if(!SSshuttle.emergency) - return - - if(SSshuttle.emergency.mode == SHUTTLE_STRANDED) - authorized.Cut() - DISABLE_BITFIELD(obj_flags, EMAGGED) - - if(ENGINES_STARTED || (!IS_DOCKED)) - return . - - // Check to see if we've reached criteria for early launch - if((authorized.len >= auth_need) || (obj_flags & EMAGGED)) - // shuttle timers use 1/10th seconds internally - SSshuttle.emergency.setTimer(ENGINES_START_TIME) - var/system_error = obj_flags & EMAGGED ? "SYSTEM ERROR:" : null - minor_announce("The emergency shuttle will launch in \ - [TIME_LEFT] seconds", system_error, alert=TRUE) - . = TRUE - -/obj/machinery/computer/emergency_shuttle/emag_act(mob/user) - // How did you even get on the shuttle before it go to the station? - if(!IS_DOCKED) - return - - if(CHECK_BITFIELD(obj_flags, EMAGGED) || ENGINES_STARTED) //SYSTEM ERROR: THE SHUTTLE WILL LA-SYSTEM ERROR: THE SHUTTLE WILL LA-SYSTEM ERROR: THE SHUTTLE WILL LAUNCH IN 10 SECONDS - to_chat(user, "The shuttle is already about to launch!") - return - - var/time = TIME_LEFT - message_admins("[ADMIN_LOOKUPFLW(user.client)] has emagged the emergency shuttle [time] seconds before launch.") - log_game("[key_name(user)] has emagged the emergency shuttle in [COORD(src)] [time] seconds before launch.") - - ENABLE_BITFIELD(obj_flags, EMAGGED) - SSshuttle.emergency.movement_force = list("KNOCKDOWN" = 60, "THROW" = 20)//YOUR PUNY SEATBELTS can SAVE YOU NOW, MORTAL - var/datum/species/S = new - for(var/i in 1 to 10) - // the shuttle system doesn't know who these people are, but they - // must be important, surely - var/obj/item/card/id/ID = new(src) - var/datum/job/J = pick(SSjob.occupations) - ID.registered_name = S.random_name(pick(MALE, FEMALE)) - ID.assignment = J.title - - authorized += ID - - process() - -/obj/machinery/computer/emergency_shuttle/Destroy() - // Our fake IDs that the emag generated are just there for colour - // They're not supposed to be accessible - - for(var/obj/item/card/id/ID in src) - qdel(ID) - if(authorized && authorized.len) - authorized.Cut() - authorized = null - - . = ..() - -/obj/docking_port/mobile/emergency - name = "emergency shuttle" - id = "emergency" - - dwidth = 9 - width = 22 - height = 11 - dir = EAST - port_direction = WEST - var/sound_played = 0 //If the launch sound has been sent to all players on the shuttle itself - var/startTime = 0 // this + ROUNDTIMERBOAT is real launch time - var/earlyLaunch = FALSE - -/obj/docking_port/mobile/emergency/canDock(obj/docking_port/stationary/S) - return SHUTTLE_CAN_DOCK //If the emergency shuttle can't move, the whole game breaks, so it will force itself to land even if it has to crush a few departments in the process - -/obj/docking_port/mobile/emergency/register() - . = ..() - SSshuttle.emergency = src -//#ifdef MATURESERVER -// SSshuttle.moveShuttle("emergency", "emergency_home", TRUE) -//#endif -/obj/docking_port/mobile/emergency/Destroy(force) - if(force) - // This'll make the shuttle subsystem use the backup shuttle. - if(src == SSshuttle.emergency) - // If we're the selected emergency shuttle - SSshuttle.emergencyDeregister() - - . = ..() - -/obj/docking_port/mobile/emergency/request(obj/docking_port/stationary/S, area/signalOrigin, reason, redAlert, set_coefficient=null) -// if(!isnum(set_coefficient)) -// var/security_num = seclevel2num(get_security_level()) -// switch(security_num) -// if(SEC_LEVEL_GREEN) -// set_coefficient = 2 -// if(SEC_LEVEL_BLUE) -// set_coefficient = 1 -// else -// set_coefficient = 0.5 -// var/call_time = SSshuttle.emergencyCallTime * set_coefficient * engine_coeff - switch(mode) - // The shuttle can not normally be called while "recalling", so - // if this proc is called, it's via admin fiat - if(SHUTTLE_RECALL, SHUTTLE_IDLE, SHUTTLE_CALL) - mode = SHUTTLE_CALL - setTimer(0) //call_time went here - else - return - - SSshuttle.emergencyCallAmount++ - - if(prob(70)) - SSshuttle.emergencyLastCallLoc = signalOrigin - else - SSshuttle.emergencyLastCallLoc = null - -// priority_announce("The emergency shuttle has been called. [redAlert ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [timeLeft(600)] minutes.[reason][SSshuttle.emergencyLastCallLoc ? "\n\nCall signal traced. Results can be viewed on any communications console." : "" ]", null, 'sound/blank.ogg', "Priority") - -/obj/docking_port/mobile/emergency/cancel(area/signalOrigin) - if(mode != SHUTTLE_CALL) - return - if(SSshuttle.emergencyNoRecall) - return - - invertTimer() - mode = SHUTTLE_RECALL - - if(prob(70)) - SSshuttle.emergencyLastCallLoc = signalOrigin - else - SSshuttle.emergencyLastCallLoc = null - priority_announce("The emergency shuttle has been recalled.[SSshuttle.emergencyLastCallLoc ? " Recall signal traced. Results can be viewed on any communications console." : "" ]", null, 'sound/blank.ogg', "Priority") - -/obj/docking_port/mobile/emergency/proc/is_hijacked() - var/has_people = FALSE - var/hijacker_present = FALSE - for(var/mob/living/player in GLOB.player_list) - if(player.mind) - if(player.stat != DEAD) - if(issilicon(player)) //Borgs are technically dead anyways - continue - if(isanimal(player)) //animals don't count - continue - if(isbrain(player)) //also technically dead - continue - if(shuttle_areas[get_area(player)]) - has_people = TRUE - var/location = get_turf(player.mind.current) - //Non-antag present. Can't hijack. - if(!(player.mind.has_antag_datum(/datum/antagonist)) && !istype(location, /turf/open/floor/plasteel/shuttle/red) && !istype(location, /turf/open/floor/mineral/plastitanium/red/brig)) - return FALSE - //Antag present, doesn't stop but let's see if we actually want to hijack - var/prevent = FALSE - for(var/datum/antagonist/A in player.mind.antag_datums) - if(A.can_hijack == HIJACK_HIJACKER) - hijacker_present = TRUE - prevent = FALSE - break //If we have both prevent and hijacker antags assume we want to hijack. - else if(A.can_hijack == HIJACK_PREVENT) - prevent = TRUE - if(prevent) - return FALSE - - return has_people && hijacker_present - -/obj/docking_port/mobile/emergency/proc/vampire_werewolf() - var/list/vampires = list() - var/list/werewolves = list() - for(var/mob/living/player in GLOB.player_list) - if(player.mind) - if(player.stat != DEAD) - if(isbrain(player)) //also technically dead - continue - if(shuttle_areas[get_area(player)]) - if(player.mind.has_antag_datum(/datum/antagonist/werewolf)) - werewolves += player - continue - if(player.mind.has_antag_datum(/datum/antagonist/vampire)) - vampires += player - continue - if(vampires.len) - if(!werewolves.len) - return "vampire" - if(werewolves.len) - if(!vampires.len) - return "werewolf" - - -/obj/docking_port/mobile/emergency/proc/ShuttleDBStuff() - set waitfor = FALSE - if(!SSdbcore.Connect()) - return - var/datum/DBQuery/query_round_shuttle_name = SSdbcore.NewQuery({" - UPDATE [format_table_name("round")] SET shuttle_name = :name WHERE id = :round_id - "}, list("name" = name, "round_id" = GLOB.round_id)) - query_round_shuttle_name.Execute() - qdel(query_round_shuttle_name) - -/obj/docking_port/mobile/emergency/check() - if(!timer) - return - var/time_left = timeLeft(1) - - // The emergency shuttle doesn't work like others so this - // ripple check is slightly different - if(!ripples.len && (time_left <= SHUTTLE_RIPPLE_TIME) && ((mode == SHUTTLE_CALL) || (mode == SHUTTLE_ESCAPE))) - var/destination - if(mode == SHUTTLE_CALL) - destination = SSshuttle.getDock("emergency_home") - else if(mode == SHUTTLE_ESCAPE) - destination = SSshuttle.getDock("emergency_away") - create_ripples(destination) - - switch(mode) - if(SHUTTLE_RECALL) - if(time_left <= 0) - mode = SHUTTLE_IDLE - timer = 0 - if(SHUTTLE_CALL) - if(time_left <= 0) - //move emergency shuttle to station - if(initiate_docking(SSshuttle.getDock("emergency_home")) != DOCKING_SUCCESS) - setTimer(20) - return - mode = SHUTTLE_DOCKED -// setTimer(ROUNDTIMERBOAT) //important -// startTime = world.time //important - -// send2irc("Server", "The Emergency Shuttle has docked with the station.") -// priority_announce("The Emergency Shuttle has docked with the station. You have [timeLeft(600)] minutes to board the Emergency Shuttle.", null, 'sound/blank.ogg', "Priority") - ShuttleDBStuff() - - - if(SHUTTLE_DOCKED) - if(time_left <= ENGINES_START_TIME) - mode = SHUTTLE_IGNITING - SSshuttle.checkHostileEnvironment() - if(mode == SHUTTLE_STRANDED) - return - for(var/A in SSshuttle.mobile) - var/obj/docking_port/mobile/M = A - if(M.launch_status == UNLAUNCHED) //Pods will not launch from the mine/planet, and other ships won't launch unless we tell them to. - M.check_transit_zone() - - if(SHUTTLE_IGNITING) - var/success = TRUE - SSshuttle.checkHostileEnvironment() - if(mode == SHUTTLE_STRANDED) - return - - success &= (check_transit_zone() == TRANSIT_READY) - for(var/A in SSshuttle.mobile) - var/obj/docking_port/mobile/M = A - if(M.launch_status == UNLAUNCHED) - success &= (M.check_transit_zone() == TRANSIT_READY) - if(!success) - setTimer(ENGINES_START_TIME) - - if(time_left <= 50 && !sound_played) //4 seconds left:REV UP THOSE ENGINES BOYS. - should sync up with the launch - sound_played = 1 //Only rev them up once. - var/list/areas = list() - for(var/area/shuttle/escape/E in GLOB.sortedAreas) - areas += E - hyperspace_sound(HYPERSPACE_WARMUP, areas) - - if(time_left <= 0 && !SSshuttle.emergencyNoEscape) - //move each escape pod (or applicable spaceship) to its corresponding transit dock - for(var/A in SSshuttle.mobile) - var/obj/docking_port/mobile/M = A - M.on_emergency_launch() - - //now move the actual emergency shuttle to its transit dock - var/list/areas = list() - for(var/area/shuttle/escape/E in GLOB.sortedAreas) - areas += E - hyperspace_sound(HYPERSPACE_LAUNCH, areas) - enterTransit() - mode = SHUTTLE_ESCAPE - launch_status = ENDGAME_LAUNCHED - setTimer(SSshuttle.emergencyEscapeTime * engine_coeff) - priority_announce("The last boat has left. Roguetown is doomed.", null, 'sound/misc/boatleave.ogg') - - if(SHUTTLE_STRANDED) - SSshuttle.checkHostileEnvironment() - - if(SHUTTLE_ESCAPE) - if(sound_played && time_left <= HYPERSPACE_END_TIME) - var/list/areas = list() - for(var/area/shuttle/escape/E in GLOB.sortedAreas) - areas += E - hyperspace_sound(HYPERSPACE_END, areas) - if(time_left <= PARALLAX_LOOP_TIME) - var/area_parallax = FALSE - for(var/place in shuttle_areas) - var/area/shuttle/shuttle_area = place - if(shuttle_area.parallax_movedir) - area_parallax = TRUE - break - if(area_parallax) - parallax_slowdown() - for(var/A in SSshuttle.mobile) - var/obj/docking_port/mobile/M = A - if(M.launch_status == ENDGAME_LAUNCHED) - if(istype(M, /obj/docking_port/mobile/pod)) - M.parallax_slowdown() - - if(time_left <= 0) - //move each escape pod to its corresponding escape dock - for(var/A in SSshuttle.mobile) - var/obj/docking_port/mobile/M = A - M.on_emergency_dock() - - // now move the actual emergency shuttle to centcom - // unless the shuttle is "hijacked" - var/destination_dock = "emergency_away" - if(is_hijacked()) - destination_dock = "emergency_syndicate" - minor_announce("Corruption detected in \ - shuttle navigation protocols. Please contact your \ - supervisor.", "SYSTEM ERROR:", alert=TRUE) - - dock_id(destination_dock) - mode = SHUTTLE_ENDGAME - timer = 0 - -/obj/docking_port/mobile/emergency/transit_failure() - ..() - message_admins("Moving emergency shuttle directly to centcom dock to prevent deadlock.") - - mode = SHUTTLE_ESCAPE - launch_status = ENDGAME_LAUNCHED - setTimer(SSshuttle.emergencyEscapeTime) - priority_announce("The Emergency Shuttle preparing for direct jump. Estimate [timeLeft(600)] minutes until the shuttle docks at Central Command.", null, null, "Priority") - - -/obj/docking_port/mobile/pod - name = "escape pod" - id = "pod" - dwidth = 1 - width = 3 - height = 4 - launch_status = UNLAUNCHED - -/obj/docking_port/mobile/pod/request(obj/docking_port/stationary/S) - var/obj/machinery/computer/shuttle/C = getControlConsole() - if(!istype(C, /obj/machinery/computer/shuttle/pod)) - return ..() - if(GLOB.security_level >= SEC_LEVEL_RED || (C && (C.obj_flags & EMAGGED))) - if(launch_status == UNLAUNCHED) - launch_status = EARLY_LAUNCHED - return ..() - else - to_chat(usr, "Escape pods will only launch during \"Code Red\" security alert.") - return TRUE - -/obj/docking_port/mobile/pod/cancel() - return - -/obj/machinery/computer/shuttle/pod - name = "pod control computer" - admin_controlled = 1 - possible_destinations = "pod_asteroid" - icon = 'icons/obj/terminals.dmi' - icon_state = "dorm_available" - light_color = LIGHT_COLOR_BLUE - density = FALSE - -/obj/machinery/computer/shuttle/pod/update_icon() - return - -/obj/machinery/computer/shuttle/pod/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - ENABLE_BITFIELD(obj_flags, EMAGGED) - to_chat(user, "I fry the pod's alert level checking system.") - -/obj/machinery/computer/shuttle/pod/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE) - . = ..() - if(possible_destinations == initial(possible_destinations) || override) - possible_destinations = "pod_lavaland[idnum]" - -/obj/docking_port/stationary/random - name = "escape pod" - id = "pod" - dwidth = 1 - width = 3 - height = 4 - var/target_area = /area/lavaland/surface/outdoors - var/edge_distance = 16 - // Minimal distance from the map edge, setting this too low can result in shuttle landing on the edge and getting "sliced" - -/obj/docking_port/stationary/random/Initialize(mapload) - . = ..() - if(!mapload) - return - - var/list/turfs = get_area_turfs(target_area) - var/original_len = turfs.len - while(turfs.len) - var/turf/T = pick(turfs) - if(T.x= SEC_LEVEL_RED || unlocked) - return TRUE - to_chat(user, "The storage unit will only unlock during a Red or Delta security alert.") - -/obj/docking_port/mobile/emergency/backup - name = "backup shuttle" - id = "backup" - dwidth = 2 - width = 8 - height = 8 - dir = EAST - -/obj/docking_port/mobile/emergency/backup/Initialize() - // We want to be a valid emergency shuttle - // but not be the main one, keep whatever's set - // valid. - // backup shuttle ignores `timid` because THERE SHOULD BE NO TOUCHING IT - var/current_emergency = SSshuttle.emergency - . = ..() - SSshuttle.emergency = current_emergency - SSshuttle.backup_shuttle = src - -/obj/docking_port/mobile/emergency/shuttle_build/register() - . = ..() - initiate_docking(SSshuttle.getDock("emergency_home")) - -#undef TIME_LEFT -#undef ENGINES_START_TIME -#undef ENGINES_STARTED -#undef IS_DOCKED diff --git a/code/modules/shuttle/ferry.dm b/code/modules/shuttle/ferry.dm index 83bbf0d575..702a818c2b 100644 --- a/code/modules/shuttle/ferry.dm +++ b/code/modules/shuttle/ferry.dm @@ -1,7 +1,6 @@ /obj/machinery/computer/shuttle/ferry name = "transport ferry console" desc = "" - circuit = /obj/item/circuitboard/computer/ferry shuttleId = "ferry" possible_destinations = "ferry_home;ferry_away" req_access = list(ACCESS_CENT_GENERAL) @@ -15,15 +14,9 @@ return FALSE return ..() -/obj/machinery/computer/shuttle/ferry/attack_ai() - return allow_silicons ? ..() : FALSE - -/obj/machinery/computer/shuttle/ferry/attack_robot() - return allow_silicons ? ..() : FALSE /obj/machinery/computer/shuttle/ferry/request name = "ferry console" - circuit = /obj/item/circuitboard/computer/ferry/request var/last_request //prevents spamming admins var/cooldown = 600 possible_destinations = "ferry_home;ferry_away" diff --git a/code/modules/shuttle/monastery.dm b/code/modules/shuttle/monastery.dm deleted file mode 100644 index e24009af83..0000000000 --- a/code/modules/shuttle/monastery.dm +++ /dev/null @@ -1,7 +0,0 @@ -/obj/machinery/computer/shuttle/monastery_shuttle - name = "monastery shuttle console" - desc = "" - circuit = /obj/item/circuitboard/computer/monastery_shuttle - shuttleId = "pod1" - possible_destinations = "monastery_shuttle_asteroid;monastery_shuttle_station;lavaland_common_away;landing_zone_dock;mining_public" - no_destination_swap = TRUE diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm deleted file mode 100644 index 81d88e2587..0000000000 --- a/code/modules/shuttle/navigation_computer.dm +++ /dev/null @@ -1,369 +0,0 @@ -/obj/machinery/computer/camera_advanced/shuttle_docker - name = "navigation computer" - desc = "" - jump_action = null - var/datum/action/innate/shuttledocker_rotate/rotate_action = new - var/datum/action/innate/shuttledocker_place/place_action = new - var/shuttleId = "" - var/shuttlePortId = "" - var/shuttlePortName = "custom location" - var/list/jumpto_ports = list() //hashset of ports to jump to and ignore for collision purposes - var/obj/docking_port/stationary/my_port //the custom docking port placed by this console - var/obj/docking_port/mobile/shuttle_port //the mobile docking port of the connected shuttle - var/list/locked_traits = list(ZTRAIT_RESERVED, ZTRAIT_CENTCOM, ZTRAIT_AWAY) //traits forbided for custom docking - var/view_range = 7 - var/x_offset = 0 - var/y_offset = 0 - var/list/whitelist_turfs = list(/turf/open/space, /turf/open/floor/plating, /turf/open/lava) - var/see_hidden = FALSE - var/designate_time = 0 - var/turf/designating_target_loc - var/jammed = FALSE - -/obj/machinery/computer/camera_advanced/shuttle_docker/Initialize() - . = ..() - GLOB.navigation_computers += src - for(var/V in SSshuttle.stationary) - if(!V) - continue - var/obj/docking_port/stationary/S = V - if(jumpto_ports[S.id]) - z_lock |= S.z - whitelist_turfs = typecacheof(whitelist_turfs) - -/obj/machinery/computer/camera_advanced/shuttle_docker/Destroy() - . = ..() - GLOB.navigation_computers -= src - -/obj/machinery/computer/camera_advanced/shuttle_docker/attack_hand(mob/user) - if(jammed) - to_chat(user, "The Syndicate is jamming the console!") - return - if(!shuttle_port && !SSshuttle.getShuttle(shuttleId)) - to_chat(user,"Warning: Shuttle connection severed!") - return - return ..() - -/obj/machinery/computer/camera_advanced/shuttle_docker/GrantActions(mob/living/user) - if(jumpto_ports.len) - jump_action = new /datum/action/innate/camera_jump/shuttle_docker - ..() - - if(rotate_action) - rotate_action.target = user - rotate_action.Grant(user) - actions += rotate_action - - if(place_action) - place_action.target = user - place_action.Grant(user) - actions += place_action - -/obj/machinery/computer/camera_advanced/shuttle_docker/CreateEye() - shuttle_port = SSshuttle.getShuttle(shuttleId) - if(QDELETED(shuttle_port)) - shuttle_port = null - return - - eyeobj = new /mob/camera/aiEye/remote/shuttle_docker(null, src) - var/mob/camera/aiEye/remote/shuttle_docker/the_eye = eyeobj - the_eye.setDir(shuttle_port.dir) - var/turf/origin = locate(shuttle_port.x + x_offset, shuttle_port.y + y_offset, shuttle_port.z) - for(var/V in shuttle_port.shuttle_areas) - var/area/A = V - for(var/turf/T in A) - if(T.z != origin.z) - continue - var/image/I = image('icons/effects/alphacolors.dmi', origin, "red") - var/x_off = T.x - origin.x - var/y_off = T.y - origin.y - I.loc = locate(origin.x + x_off, origin.y + y_off, origin.z) //we have to set this after creating the image because it might be null, and images created in nullspace are immutable. - I.layer = ABOVE_NORMAL_TURF_LAYER - I.plane = 0 - I.mouse_opacity = MOUSE_OPACITY_TRANSPARENT - the_eye.placement_images[I] = list(x_off, y_off) - -/obj/machinery/computer/camera_advanced/shuttle_docker/give_eye_control(mob/user) - ..() - if(!QDELETED(user) && user.client) - var/mob/camera/aiEye/remote/shuttle_docker/the_eye = eyeobj - var/list/to_add = list() - to_add += the_eye.placement_images - to_add += the_eye.placed_images - if(!see_hidden) - to_add += SSshuttle.hidden_shuttle_turf_images - - user.client.images += to_add - user.client.change_view(view_range) - -/obj/machinery/computer/camera_advanced/shuttle_docker/remove_eye_control(mob/living/user) - ..() - if(!QDELETED(user) && user.client) - var/mob/camera/aiEye/remote/shuttle_docker/the_eye = eyeobj - var/list/to_remove = list() - to_remove += the_eye.placement_images - to_remove += the_eye.placed_images - if(!see_hidden) - to_remove += SSshuttle.hidden_shuttle_turf_images - - user.client.images -= to_remove - user.client.change_view(CONFIG_GET(string/default_view)) - -/obj/machinery/computer/camera_advanced/shuttle_docker/proc/placeLandingSpot() - if(designating_target_loc || !current_user) - return - - var/mob/camera/aiEye/remote/shuttle_docker/the_eye = eyeobj - var/landing_clear = checkLandingSpot() - if(designate_time && (landing_clear != SHUTTLE_DOCKER_BLOCKED)) - to_chat(current_user, "Targeting transit location, please wait [DisplayTimeText(designate_time)]...") - designating_target_loc = the_eye.loc - var/wait_completed = do_after(current_user, designate_time, FALSE, designating_target_loc, TRUE, CALLBACK(src, TYPE_PROC_REF(/obj/machinery/computer/camera_advanced/shuttle_docker, canDesignateTarget))) - designating_target_loc = null - if(!current_user) - return - if(!wait_completed) - to_chat(current_user, "Operation aborted.") - return - landing_clear = checkLandingSpot() - - if(landing_clear != SHUTTLE_DOCKER_LANDING_CLEAR) - switch(landing_clear) - if(SHUTTLE_DOCKER_BLOCKED) - to_chat(current_user, "Invalid transit location.") - if(SHUTTLE_DOCKER_BLOCKED_BY_HIDDEN_PORT) - to_chat(current_user, "Unknown object detected in landing zone. Please designate another location.") - return - - ///Make one use port that deleted after fly off, to don't lose info that need on to properly fly off. - if(my_port && my_port.get_docked()) - my_port.delete_after = TRUE - my_port.id = null - my_port.name = "Old [my_port.name]" - my_port = null - - if(!my_port) - my_port = new() - my_port.name = shuttlePortName - my_port.id = shuttlePortId - my_port.height = shuttle_port.height - my_port.width = shuttle_port.width - my_port.dheight = shuttle_port.dheight - my_port.dwidth = shuttle_port.dwidth - my_port.hidden = shuttle_port.hidden - my_port.setDir(the_eye.dir) - my_port.forceMove(locate(eyeobj.x - x_offset, eyeobj.y - y_offset, eyeobj.z)) - - if(current_user.client) - current_user.client.images -= the_eye.placed_images - - QDEL_LIST(the_eye.placed_images) - - for(var/V in the_eye.placement_images) - var/image/I = V - var/image/newI = image('icons/effects/alphacolors.dmi', the_eye.loc, "blue") - newI.loc = I.loc //It is highly unlikely that any landing spot including a null tile will get this far, but better safe than sorry. - newI.layer = ABOVE_OPEN_TURF_LAYER - newI.plane = 0 - newI.mouse_opacity = 0 - the_eye.placed_images += newI - - if(current_user.client) - current_user.client.images += the_eye.placed_images - to_chat(current_user, "Transit location designated.") - return TRUE - -/obj/machinery/computer/camera_advanced/shuttle_docker/proc/canDesignateTarget() - if(!designating_target_loc || !current_user || (eyeobj.loc != designating_target_loc) || (stat & (NOPOWER|BROKEN)) ) - return FALSE - return TRUE - -/obj/machinery/computer/camera_advanced/shuttle_docker/proc/rotateLandingSpot() - var/mob/camera/aiEye/remote/shuttle_docker/the_eye = eyeobj - var/list/image_cache = the_eye.placement_images - the_eye.setDir(turn(the_eye.dir, -90)) - for(var/i in 1 to image_cache.len) - var/image/pic = image_cache[i] - var/list/coords = image_cache[pic] - var/Tmp = coords[1] - coords[1] = coords[2] - coords[2] = -Tmp - pic.loc = locate(the_eye.x + coords[1], the_eye.y + coords[2], the_eye.z) - var/Tmp = x_offset - x_offset = y_offset - y_offset = -Tmp - checkLandingSpot() - -/obj/machinery/computer/camera_advanced/shuttle_docker/proc/checkLandingSpot() - var/mob/camera/aiEye/remote/shuttle_docker/the_eye = eyeobj - var/turf/eyeturf = get_turf(the_eye) - if(!eyeturf) - return SHUTTLE_DOCKER_BLOCKED - if(!eyeturf.z || SSmapping.level_has_any_trait(eyeturf.z, locked_traits)) - return SHUTTLE_DOCKER_BLOCKED - - . = SHUTTLE_DOCKER_LANDING_CLEAR - var/list/bounds = shuttle_port.return_coords(the_eye.x - x_offset, the_eye.y - y_offset, the_eye.dir) - var/list/overlappers = SSshuttle.get_dock_overlap(bounds[1], bounds[2], bounds[3], bounds[4], the_eye.z) - var/list/image_cache = the_eye.placement_images - for(var/i in 1 to image_cache.len) - var/image/I = image_cache[i] - var/list/coords = image_cache[I] - var/turf/T = locate(eyeturf.x + coords[1], eyeturf.y + coords[2], eyeturf.z) - I.loc = T - switch(checkLandingTurf(T, overlappers)) - if(SHUTTLE_DOCKER_LANDING_CLEAR) - I.icon_state = "green" - if(SHUTTLE_DOCKER_BLOCKED_BY_HIDDEN_PORT) - I.icon_state = "green" - if(. == SHUTTLE_DOCKER_LANDING_CLEAR) - . = SHUTTLE_DOCKER_BLOCKED_BY_HIDDEN_PORT - else - I.icon_state = "red" - . = SHUTTLE_DOCKER_BLOCKED - -/obj/machinery/computer/camera_advanced/shuttle_docker/proc/checkLandingTurf(turf/T, list/overlappers) - // Too close to the map edge is never allowed - if(!T || T.x <= 10 || T.y <= 10 || T.x >= world.maxx - 10 || T.y >= world.maxy - 10) - return SHUTTLE_DOCKER_BLOCKED - // If it's one of our shuttle areas assume it's ok to be there - if(shuttle_port.shuttle_areas[T.loc]) - return SHUTTLE_DOCKER_LANDING_CLEAR - . = SHUTTLE_DOCKER_LANDING_CLEAR - // See if the turf is hidden from us - var/list/hidden_turf_info - if(!see_hidden) - hidden_turf_info = SSshuttle.hidden_shuttle_turfs[T] - if(hidden_turf_info) - . = SHUTTLE_DOCKER_BLOCKED_BY_HIDDEN_PORT - - if(length(whitelist_turfs)) - var/turf_type = hidden_turf_info ? hidden_turf_info[2] : T.type - if(!is_type_in_typecache(turf_type, whitelist_turfs)) - return SHUTTLE_DOCKER_BLOCKED - - // Checking for overlapping dock boundaries - for(var/i in 1 to overlappers.len) - var/obj/docking_port/port = overlappers[i] - if(port == my_port) - continue - var/port_hidden = !see_hidden && port.hidden - var/list/overlap = overlappers[port] - var/list/xs = overlap[1] - var/list/ys = overlap[2] - if(xs["[T.x]"] && ys["[T.y]"]) - if(port_hidden) - . = SHUTTLE_DOCKER_BLOCKED_BY_HIDDEN_PORT - else - return SHUTTLE_DOCKER_BLOCKED - -/obj/machinery/computer/camera_advanced/shuttle_docker/proc/update_hidden_docking_ports(list/remove_images, list/add_images) - if(!see_hidden && current_user && current_user.client) - current_user.client.images -= remove_images - current_user.client.images += add_images - -/obj/machinery/computer/camera_advanced/shuttle_docker/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE) - if(port && (shuttleId == initial(shuttleId) || override)) - shuttleId = port.id - shuttlePortId = "[port.id]_custom" - if(dock) - jumpto_ports[dock.id] = TRUE - -/mob/camera/aiEye/remote/shuttle_docker - visible_icon = FALSE - use_static = USE_STATIC_NONE - var/list/placement_images = list() - var/list/placed_images = list() - -/mob/camera/aiEye/remote/shuttle_docker/Initialize(mapload, obj/machinery/computer/camera_advanced/origin) - src.origin = origin - return ..() - -/mob/camera/aiEye/remote/shuttle_docker/setLoc(T) - ..() - var/obj/machinery/computer/camera_advanced/shuttle_docker/console = origin - console.checkLandingSpot() - -/mob/camera/aiEye/remote/shuttle_docker/update_remote_sight(mob/living/user) - user.sight = BLIND|SEE_TURFS - user.lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE - user.sync_lighting_plane_alpha() - return TRUE - -/datum/action/innate/shuttledocker_rotate - name = "Rotate" - icon_icon = 'icons/mob/actions/actions_mecha.dmi' - button_icon_state = "mech_cycle_equip_off" - -/datum/action/innate/shuttledocker_rotate/Activate() - if(QDELETED(target) || !isliving(target)) - return - var/mob/living/C = target - var/mob/camera/aiEye/remote/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/shuttle_docker/origin = remote_eye.origin - origin.rotateLandingSpot() - -/datum/action/innate/shuttledocker_place - name = "Place" - icon_icon = 'icons/mob/actions/actions_mecha.dmi' - button_icon_state = "mech_zoom_off" - -/datum/action/innate/shuttledocker_place/Activate() - if(QDELETED(target) || !isliving(target)) - return - var/mob/living/C = target - var/mob/camera/aiEye/remote/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/shuttle_docker/origin = remote_eye.origin - origin.placeLandingSpot(target) - -/datum/action/innate/camera_jump/shuttle_docker - name = "Jump to Location" - button_icon_state = "camera_jump" - -/datum/action/innate/camera_jump/shuttle_docker/Activate() - if(QDELETED(target) || !isliving(target)) - return - var/mob/living/C = target - var/mob/camera/aiEye/remote/remote_eye = C.remote_control - var/obj/machinery/computer/camera_advanced/shuttle_docker/console = remote_eye.origin - - playsound(console, 'sound/blank.ogg', 25, FALSE) - - var/list/L = list() - for(var/V in SSshuttle.stationary) - if(!V) - stack_trace("SSshuttle.stationary have null entry!") - continue - var/obj/docking_port/stationary/S = V - if(console.z_lock.len && !(S.z in console.z_lock)) - continue - if(console.jumpto_ports[S.id]) - L["([L.len])[S.name]"] = S - - for(var/V in SSshuttle.beacons) - if(!V) - stack_trace("SSshuttle.beacons have null entry!") - continue - var/obj/machinery/spaceship_navigation_beacon/nav_beacon = V - if(!nav_beacon.z || SSmapping.level_has_any_trait(nav_beacon.z, console.locked_traits)) - break - if(!nav_beacon.locked) - L["([L.len]) [nav_beacon.name] located: [nav_beacon.x] [nav_beacon.y] [nav_beacon.z]"] = nav_beacon - else - L["([L.len]) [nav_beacon.name] locked"] = null - - playsound(console, 'sound/blank.ogg', 25, FALSE) - var/selected = input("Choose location to jump to", "Locations", null) as null|anything in sortList(L) - if(QDELETED(src) || QDELETED(target) || !isliving(target)) - return - playsound(src, "terminal_type", 25, FALSE) - if(selected) - var/turf/T = get_turf(L[selected]) - if(T) - playsound(console, 'sound/blank.ogg', 25, FALSE) - remote_eye.setLoc(T) - to_chat(target, "Jumped to [selected].") - C.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash/static) - C.clear_fullscreen("flash", 3) - else - playsound(console, 'sound/blank.ogg', 25, FALSE) diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index ddbfab9331..5cbe37b360 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -36,8 +36,6 @@ All ShuttleMove procs go here M.gib() else //non-living mobs shouldn't be affected by shuttles, which is why this is an else - if(istype(thing, /obj/singularity) && !istype(thing, /obj/singularity/narsie)) //it's a singularity but not a god, ignore it. - continue if(!thing.anchored) step(thing, shuttle_dir) else @@ -168,130 +166,6 @@ All ShuttleMove procs go here /area/proc/lateShuttleMove() return -/************************************Turf move procs************************************/ - -/************************************Area move procs************************************/ - -/************************************Machinery move procs************************************/ - -/obj/machinery/door/airlock/beforeShuttleMove(turf/newT, rotation, move_mode, obj/docking_port/mobile/moving_dock) - . = ..() - for(var/obj/machinery/door/airlock/A in range(1, src)) // includes src - A.shuttledocked = FALSE - A.air_tight = TRUE - INVOKE_ASYNC(A, TYPE_PROC_REF(/obj/machinery/door, close)) - -/obj/machinery/door/airlock/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) - . = ..() - var/current_area = get_area(src) - for(var/obj/machinery/door/airlock/A in orange(1, src)) // does not include src - if(get_area(A) != current_area) // does not include double-wide airlocks unless actually docked - // Cycle linking is only disabled if we are actually adjacent to another airlock - shuttledocked = TRUE - A.shuttledocked = TRUE - -/obj/machinery/camera/beforeShuttleMove(turf/newT, rotation, move_mode, obj/docking_port/mobile/moving_dock) - . = ..() - if(. & MOVE_AREA) - . |= MOVE_CONTENTS - GLOB.cameranet.removeCamera(src) - -/obj/machinery/camera/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) - . = ..() - GLOB.cameranet.addCamera(src) - -/obj/machinery/mech_bay_recharge_port/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir) - . = ..() - recharging_turf = get_step(loc, dir) - -/obj/machinery/atmospherics/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) - . = ..() - if(pipe_vision_img) - pipe_vision_img.loc = loc - -/obj/machinery/computer/auxillary_base/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) - . = ..() - if(is_mining_level(z)) //Avoids double logging and landing on other Z-levels due to badminnery - SSblackbox.record_feedback("associative", "colonies_dropped", 1, list("x" = x, "y" = y, "z" = z)) - -/obj/machinery/gravity_generator/main/beforeShuttleMove(turf/newT, rotation, move_mode, obj/docking_port/mobile/moving_dock) - . = ..() - on = FALSE - update_list() - -/obj/machinery/gravity_generator/main/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) - . = ..() - if(charge_count != 0 && charging_state != POWER_UP) - on = TRUE - update_list() - -/obj/machinery/atmospherics/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) - . = ..() - var/missing_nodes = FALSE - for(var/i in 1 to device_type) - if(nodes[i]) - var/obj/machinery/atmospherics/node = nodes[i] - var/connected = FALSE - for(var/D in GLOB.cardinals) - if(node in get_step(src, D)) - connected = TRUE - break - - if(!connected) - nullifyNode(i) - - if(!nodes[i]) - missing_nodes = TRUE - - if(missing_nodes) - atmosinit() - for(var/obj/machinery/atmospherics/A in pipeline_expansion()) - A.atmosinit() - if(A.returnPipenet()) - A.addMember(src) - build_network() - else - // atmosinit() calls update_icon(), so we don't need to call it - update_icon() - -/obj/machinery/atmospherics/pipe/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) - . = ..() - var/turf/T = loc - hide(T.intact) - -/obj/machinery/navbeacon/beforeShuttleMove(turf/newT, rotation, move_mode, obj/docking_port/mobile/moving_dock) - . = ..() - GLOB.navbeacons["[z]"] -= src - GLOB.deliverybeacons -= src - -/obj/machinery/navbeacon/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) - . = ..() - var/turf/T = loc - hide(T.intact) - if(codes["patrol"]) - if(!GLOB.navbeacons["[z]"]) - GLOB.navbeacons["[z]"] = list() - GLOB.navbeacons["[z]"] += src //Register with the patrol list! - if(codes["delivery"]) - GLOB.deliverybeacons += src - GLOB.deliverybeacontags += location - -/obj/machinery/power/terminal/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) - . = ..() - var/turf/T = src.loc - if(level==1) - hide(T.intact) - -/************************************Item move procs************************************/ - -/obj/item/storage/pod/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) - . = ..() - // If the pod was launched, the storage will always open. The reserved_level check - // ignores the movement of the shuttle from the transit level to - // the station as it is loaded in. - if (oldT && !is_reserved_level(oldT.z)) - unlocked = TRUE - /************************************Mob move procs************************************/ /mob/onShuttleMove(turf/newT, turf/oldT, list/movement_force, move_dir, obj/docking_port/stationary/old_dock, obj/docking_port/mobile/moving_dock) @@ -340,18 +214,6 @@ All ShuttleMove procs go here . = ..() update() -/obj/structure/cable/beforeShuttleMove(turf/newT, rotation, move_mode, obj/docking_port/mobile/moving_dock) - . = ..() - cut_cable_from_powernet(FALSE) - -/obj/structure/cable/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) - . = ..() - var/turf/T = loc - if(level==1) - hide(T.intact) - connect_wire(TRUE) - propogate_if_no_network() - /obj/structure/shuttle/beforeShuttleMove(turf/newT, rotation, move_mode, obj/docking_port/mobile/moving_dock) . = ..() if(. & MOVE_AREA) diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 6c3e827d5e..964365b820 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -484,7 +484,7 @@ var/turf/T = t for(var/mob/living/M in T.GetAllContents()) // If they have a mind and they're not in the brig, they escaped - if(M.mind && !istype(t, /turf/open/floor/plasteel/shuttle/red) && !istype(t, /turf/open/floor/mineral/plastitanium/red/brig)) + if(M.mind && !istype(t, /turf/open/floor/plasteel) && !istype(t, /turf/open/floor/mineral/plastitanium/red/brig)) M.mind.force_escaped = TRUE // Ghostize them and put them in nullspace stasis (for stat & possession checks) M.notransform = TRUE @@ -521,10 +521,6 @@ return ripple_turfs -/obj/docking_port/mobile/proc/check_poddoors() - for(var/obj/machinery/door/poddoor/shuttledock/pod in GLOB.airlocks) - pod.check() - /obj/docking_port/mobile/proc/dock_id(id) var/port = SSshuttle.getDock(id) if(port) diff --git a/code/modules/shuttle/shuttle_rotate.dm b/code/modules/shuttle/shuttle_rotate.dm index 5b5f325d9f..3c6c00c3d6 100644 --- a/code/modules/shuttle/shuttle_rotate.dm +++ b/code/modules/shuttle/shuttle_rotate.dm @@ -55,9 +55,6 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate new_dpdir = new_dpdir | angle2dir(rotation+dir2angle(D)) dpdir = new_dpdir -/obj/structure/table/wood/bar/shuttleRotate(rotation, params) - . = ..() - boot_dir = angle2dir(rotation + dir2angle(boot_dir)) /obj/structure/alien/weeds/shuttleRotate(rotation, params) params &= ~ROTATE_OFFSET @@ -88,16 +85,3 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate /obj/machinery/gravity_generator/shuttleRotate(rotation, params) params = NONE return ..() - -/obj/machinery/door/airlock/shuttleRotate(rotation, params) - . = ..() - if(cyclelinkeddir && (params & ROTATE_DIR)) - cyclelinkeddir = angle2dir(rotation+dir2angle(cyclelinkeddir)) - // If we update the linked airlock here, the partner airlock might - // not be present yet, so don't do that. Just assume we're still - // partnered with the same airlock as before. - -/obj/machinery/porta_turret/shuttleRotate(rotation, params) - . = ..() - if(wall_turret_direction && (params & ROTATE_DIR)) - wall_turret_direction = turn(wall_turret_direction,rotation) diff --git a/code/modules/shuttle/spaceship_navigation_beacon.dm b/code/modules/shuttle/spaceship_navigation_beacon.dm deleted file mode 100644 index 1c22a57f6e..0000000000 --- a/code/modules/shuttle/spaceship_navigation_beacon.dm +++ /dev/null @@ -1,60 +0,0 @@ -/obj/item/circuitboard/machine/spaceship_navigation_beacon - name = "Bluespace Navigation Gigabeacon (Machine Board)" - build_path = /obj/machinery/spaceship_navigation_beacon - req_components = list() - - -/obj/machinery/spaceship_navigation_beacon - name = "Bluespace Navigation Gigabeacon" - desc = "" - icon = 'icons/obj/abductor.dmi' - icon_state = "core" - use_power = IDLE_POWER_USE - idle_power_usage = 0 - density = TRUE - circuit = /obj/item/circuitboard/machine/spaceship_navigation_beacon - - var/locked = FALSE //Locked beacons don't allow to jump to it. - - -/obj/machinery/spaceship_navigation_beacon/Initialize() - . = ..() - SSshuttle.beacons |= src - -/obj/machinery/spaceship_navigation_beacon/emp_act() - locked = TRUE - -/obj/machinery/spaceship_navigation_beacon/Destroy() - SSshuttle.beacons -= src - return ..() - -// update the icon_state -/obj/machinery/spaceship_navigation_beacon/update_icon() - if(powered()) - icon_state = "core" - else - icon_state = "core-open" - -/obj/machinery/spaceship_navigation_beacon/multitool_act(mob/living/user, obj/item/multitool/I) - ..() - if(panel_open) - var/new_name = "Beacon_[input("Enter the custom name for this beacon", "It be Beacon ..your input..") as text|null]" - if(new_name && Adjacent(user)) - name = new_name - to_chat(user, "I change beacon name to [name].") - else - locked =!locked - to_chat(user, "I [locked ? "" : "un"]lock [src].") - return TRUE - -/obj/machinery/spaceship_navigation_beacon/examine() - .=..() - . += "Status: [locked ? "LOCKED" : "Stable"] " - -/obj/machinery/spaceship_navigation_beacon/attackby(obj/item/W, mob/user, params) - if(default_deconstruction_screwdriver(user, "core-open", "core", W)) - return - if(default_deconstruction_crowbar(W)) - return - - return ..() diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm deleted file mode 100644 index 80b2f6d0ef..0000000000 --- a/code/modules/shuttle/special.dm +++ /dev/null @@ -1,359 +0,0 @@ -// Special objects for shuttle templates go here if nowhere else - -// Wabbajack statue, a sleeping frog statue that shoots bolts of change if -// living carbons are put on its altar/tables - -/obj/machinery/power/emitter/energycannon/magical - name = "wabbajack statue" - desc = "" - projectile_type = /obj/projectile/magic/change - icon = 'icons/obj/machines/magic_emitter.dmi' - icon_state = "wabbajack_statue" - icon_state_on = "wabbajack_statue_on" - active = FALSE - allow_switch_interact = FALSE - var/list/active_tables = list() - var/tables_required = 2 - -/obj/machinery/power/emitter/energycannon/magical/Initialize() - . = ..() - if(prob(50)) - desc = "" - update_icon() - -/obj/machinery/power/emitter/energycannon/magical/update_icon() - if(active) - icon_state = icon_state_on - else - icon_state = initial(icon_state) - -/obj/machinery/power/emitter/energycannon/magical/process() - . = ..() - if(active_tables.len >= tables_required) - if(!active) - visible_message("\ - [src] opens its eyes.") - active = TRUE - else - if(active) - visible_message("\ - [src] closes its eyes.") - active = FALSE - update_icon() - -/obj/machinery/power/emitter/energycannon/magical/attackby(obj/item/W, mob/user, params) - return - -/obj/machinery/power/emitter/energycannon/magical/ex_act(severity) - return - -/obj/machinery/power/emitter/energycannon/magical/emag_act(mob/user) - return - -/obj/structure/table/abductor/wabbajack - name = "wabbajack altar" - desc = "" - max_integrity = 1000 - verb_say = "chants" - var/obj/machinery/power/emitter/energycannon/magical/our_statue - var/list/mob/living/sleepers = list() - var/never_spoken = TRUE - flags_1 = NODECONSTRUCT_1 - -/obj/structure/table/abductor/wabbajack/Initialize(mapload) - . = ..() - START_PROCESSING(SSobj, src) - -/obj/structure/table/abductor/wabbajack/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/structure/table/abductor/wabbajack/process() - var/area = orange(4, src) - if(!our_statue) - for(var/obj/machinery/power/emitter/energycannon/magical/M in area) - our_statue = M - break - - if(!our_statue) - name = "inert [initial(name)]" - return - else - name = initial(name) - - var/turf/T = get_turf(src) - var/list/found = list() - for(var/mob/living/carbon/C in T) - if(C.stat != DEAD) - found += C - - // New sleepers - for(var/i in found - sleepers) - var/mob/living/L = i - L.add_atom_colour("#800080", TEMPORARY_COLOUR_PRIORITY) - L.visible_message("A strange purple glow wraps itself around [L] as [L.p_they()] suddenly fall[L.p_s()] unconscious.", - "[desc]") - // Don't let them sit suround unconscious forever - addtimer(CALLBACK(src, PROC_REF(sleeper_dreams), L), 100) - - // Existing sleepers - for(var/i in found) - var/mob/living/L = i - L.SetSleeping(200) - - // Missing sleepers - for(var/i in sleepers - found) - var/mob/living/L = i - L.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, "#800080") - L.visible_message("The glow from [L] fades \ - away.") - L.grab_ghost() - - sleepers = found - - if(sleepers.len) - our_statue.active_tables |= src - if(never_spoken || prob(5)) - say(desc) - never_spoken = FALSE - else - our_statue.active_tables -= src - -/obj/structure/table/abductor/wabbajack/proc/sleeper_dreams(mob/living/sleeper) - if(sleeper in sleepers) - to_chat(sleeper, "While you slumber, you have the strangest dream, like you can see myself from the outside.") - sleeper.ghostize(TRUE) - -/obj/structure/table/abductor/wabbajack/left - desc = "" - -/obj/structure/table/abductor/wabbajack/right - desc = "" - -// Bar staff, GODMODE mobs(as long as they stay in the shuttle) that just want to make sure people have drinks -// and a good time. - -/mob/living/simple_animal/drone/snowflake/bardrone - name = "Bardrone" - desc = "" - hacked = TRUE - laws = "1. Serve drinks.\n\ - 2. Talk to patrons.\n\ - 3. Don't get messed up in their affairs." - unique_name = FALSE // disables the (123) number suffix - initial_language_holder = /datum/language_holder/universal - -/mob/living/simple_animal/drone/snowflake/bardrone/Initialize() - . = ..() - access_card.access |= ACCESS_CENT_BAR - RegisterSignal(src, COMSIG_ENTER_AREA, PROC_REF(check_barstaff_godmode)) - check_barstaff_godmode() - -/mob/living/simple_animal/hostile/alien/maid/barmaid - gold_core_spawnable = NO_SPAWN - name = "Barmaid" - desc = "" - pass_flags = PASSTABLE - unique_name = FALSE - AIStatus = AI_OFF - stop_automated_movement = TRUE - initial_language_holder = /datum/language_holder/universal - -/mob/living/simple_animal/hostile/alien/maid/barmaid/Initialize() - . = ..() - access_card = new /obj/item/card/id(src) - var/datum/job/captain/C = new /datum/job/captain - access_card.access = C.get_access() - access_card.access |= ACCESS_CENT_BAR - ADD_TRAIT(access_card, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) - RegisterSignal(src, COMSIG_ENTER_AREA, PROC_REF(check_barstaff_godmode)) - check_barstaff_godmode() - -/mob/living/simple_animal/hostile/alien/maid/barmaid/Destroy() - qdel(access_card) - . = ..() - -/mob/living/simple_animal/proc/check_barstaff_godmode() - if(istype(get_area(loc), /area/shuttle/escape)) - status_flags |= GODMODE - else - status_flags &= ~GODMODE - -// Bar table, a wooden table that kicks you in a direction if you're not -// barstaff (defined as someone who was a roundstart bartender or someone -// with CENTCOM_BARSTAFF) - -/obj/structure/table/wood/bar - resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - flags_1 = NODECONSTRUCT_1 - max_integrity = 1000 - var/boot_dir = 1 - -/obj/structure/table/wood/bar/Crossed(atom/movable/AM) - if(isliving(AM) && !is_barstaff(AM)) - // No climbing on the bar please - var/mob/living/M = AM - var/throwtarget = get_edge_target_turf(src, boot_dir) - M.Paralyze(40) - M.throw_at(throwtarget, 5, 1) - to_chat(M, "No climbing on the bar please.") - else - . = ..() - -/obj/structure/table/wood/bar/proc/is_barstaff(mob/living/user) - . = FALSE - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.mind && H.mind.assigned_role == "Bartender") - return TRUE - - var/obj/item/card/id/ID = user.get_idcard(FALSE) - if(ID && (ACCESS_CENT_BAR in ID.access)) - return TRUE - -//Luxury Shuttle Blockers - -/obj/effect/forcefield/luxury_shuttle - name = "luxury shuttle ticket booth" - desc = "" - timeleft = 0 - var/threshold = 500 - var/static/list/approved_passengers = list() - var/static/list/check_times = list() - var/list/payees = list() - -/obj/effect/forcefield/luxury_shuttle/CanPass(atom/movable/mover, turf/target) - if(mover in approved_passengers) - return TRUE - - if(!isliving(mover)) //No stowaways - return FALSE - - return FALSE - - -#define LUXURY_MESSAGE_COOLDOWN 100 -/obj/effect/forcefield/luxury_shuttle/Bumped(atom/movable/AM) - if(!isliving(AM)) - return ..() - - var/datum/bank_account/account - if(istype(AM.pulling, /obj/item/card/id)) - var/obj/item/card/id/I = AM.pulling - if(I.registered_account) - account = I.registered_account - else if(!check_times[AM] || check_times[AM] < world.time) //Let's not spam the message - to_chat(AM, "This ID card doesn't have an owner associated with it!") - check_times[AM] = world.time + LUXURY_MESSAGE_COOLDOWN - else if(ishuman(AM)) - var/mob/living/carbon/human/H = AM - if(H.get_bank_account()) - account = H.get_bank_account() - - if(account) - if(account.account_balance < threshold - payees[AM]) - account.adjust_money(-account.account_balance) - payees[AM] += account.account_balance - else - var/money_owed = threshold - payees[AM] - account.adjust_money(-money_owed) - payees[AM] += money_owed - - var/list/counted_money = list() - - for(var/obj/item/coin/C in AM.GetAllContents()) - if(payees[AM] >= threshold) - break - payees[AM] += C.value - counted_money += C - for(var/obj/item/stack/spacecash/S in AM.GetAllContents()) - if(payees[AM] >= threshold) - break - payees[AM] += S.value * S.amount - counted_money += S - for(var/obj/item/holochip/H in AM.GetAllContents()) - if(payees[AM] >= threshold) - break - payees[AM] += H.credits - counted_money += H - - if(payees[AM] < threshold && istype(AM.pulling, /obj/item/coin)) - var/obj/item/coin/C = AM.pulling - payees[AM] += C.value - counted_money += C - - else if(payees[AM] < threshold && istype(AM.pulling, /obj/item/stack/spacecash)) - var/obj/item/stack/spacecash/S = AM.pulling - payees[AM] += S.value * S.amount - counted_money += S - - else if(payees[AM] < threshold && istype(AM.pulling, /obj/item/holochip)) - var/obj/item/holochip/H = AM.pulling - payees[AM] += H.credits - counted_money += H - - if(payees[AM] < threshold) - var/armless - if(!ishuman(AM) && !istype(AM, /mob/living/simple_animal/slime)) - armless = TRUE - else - var/mob/living/carbon/human/H = AM - if(!H.get_bodypart(BODY_ZONE_L_ARM) && !H.get_bodypart(BODY_ZONE_R_ARM)) - armless = TRUE - - if(armless) - if(!AM.pulling || !iscash(AM.pulling) && !istype(AM.pulling, /obj/item/card/id)) - if(!check_times[AM] || check_times[AM] < world.time) //Let's not spam the message - to_chat(AM, "Try pulling a valid ID, space cash, holochip or coin into \the [src]!") - check_times[AM] = world.time + LUXURY_MESSAGE_COOLDOWN - - if(payees[AM] >= threshold) - for(var/obj/I in counted_money) - qdel(I) - payees[AM] -= threshold - - var/change = FALSE - if(payees[AM] > 0) - change = TRUE - var/obj/item/holochip/HC - HC.credits = payees[AM] - if(istype(AM, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = AM - if(!H.put_in_hands(new HC)) - AM.pulling = HC - else - new HC(AM.loc) - AM.pulling = HC - payees[AM] -= payees[AM] - - say("Welcome aboard, [AM]![change ? " Here is your change." : ""]") - approved_passengers += AM - - check_times -= AM - return - else if (payees[AM] > 0) - for(var/obj/I in counted_money) - qdel(I) - if(!check_times[AM] || check_times[AM] < world.time) //Let's not spam the message - to_chat(AM, "$[payees[AM]] received. You need $[threshold-payees[AM]] more.") - check_times[AM] = world.time + LUXURY_MESSAGE_COOLDOWN - return ..() - else - return ..() - -/mob/living/simple_animal/hostile/bear/fightpit - name = "fight pit bear" - desc = "" - environment_smash = ENVIRONMENT_SMASH_NONE - -/obj/effect/decal/hammerandsickle - name = "hammer and sickle" - desc = "" - icon = 'icons/effects/96x96.dmi' - icon_state = "communist" - layer = ABOVE_OPEN_TURF_LAYER - pixel_x = -32 - pixel_y = -32 - -/obj/effect/decal/hammerandsickle/shuttleRotate(rotation) - setDir(angle2dir(rotation+dir2angle(dir))) // No parentcall, rest of the rotate code breaks the pixel offset. diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm deleted file mode 100644 index 3124d061bc..0000000000 --- a/code/modules/shuttle/supply.dm +++ /dev/null @@ -1,263 +0,0 @@ -GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( - /mob/living, - /obj/structure/blob, - /obj/effect/rune, - /obj/structure/spider/spiderling, - /obj/item/disk/nuclear, - /obj/machinery/nuclearbomb, - /obj/item/beacon, - /obj/singularity/narsie, - /obj/singularity/wizard, - /obj/machinery/teleport/station, - /obj/machinery/teleport/hub, - /obj/machinery/quantumpad, - /obj/machinery/clonepod, - /obj/effect/mob_spawn, - /obj/effect/hierophant, - /obj/structure/receiving_pad, - /obj/item/warp_cube, - /obj/machinery/rnd/production, //print tracking beacons, send shuttle - /obj/machinery/autolathe, //same - /obj/projectile/beam/wormhole, - /obj/effect/portal, - /obj/item/shared_storage, - /obj/structure/extraction_point, - /obj/machinery/syndicatebomb, - /obj/item/hilbertshotel, - /obj/item/swapper, - /obj/docking_port, - /obj/machinery/launchpad, - /obj/machinery/disposal, - /obj/structure/disposalpipe, - /obj/item/hilbertshotel - ))) - -/obj/docking_port/mobile/supply - name = "supply shuttle" - id = "supply" -#ifdef TESTSERVER - callTime = 60 -#else - callTime = 300 -#endif - dir = NORTH - port_direction = SOUTH - width = 12 - dwidth = 5 - height = 7 - movement_force = list("KNOCKDOWN" = 0, "THROW" = 0) - var/budget = 0 - var/list/salese = list() - - //Export categories for this run, this is set by console sending the shuttle. - var/export_categories = EXPORT_CARGO - -/obj/docking_port/mobile/supply/register() - . = ..() - SSshuttle.supply = src -#ifdef MATURESERVER - SSshuttle.moveShuttle("supply", "supply_home", TRUE) -#endif -/obj/docking_port/mobile/supply/canMove() - if(is_station_level(z)) - return check_blacklist(shuttle_areas) - return ..() - -/obj/docking_port/mobile/supply/proc/check_blacklist(areaInstances) - for(var/place in areaInstances) - var/area/shuttle/shuttle_area = place - for(var/trf in shuttle_area) - var/turf/T = trf - for(var/a in T.GetAllContents()) - if(is_type_in_typecache(a, GLOB.blacklisted_cargo_types) && !istype(a, /obj/docking_port)) - return FALSE - return TRUE - -/obj/docking_port/mobile/supply/request(obj/docking_port/stationary/S) - if(mode != SHUTTLE_IDLE) - return 2 - return ..() - -/obj/docking_port/mobile/supply/initiate_docking() - . = ..() // Fly/enter transit. - if(. != DOCKING_SUCCESS) - return - if(getDockedId() == "supply_away") - testing("docked away") - sell() - buy() - addtimer(CALLBACK(SSshuttle, TYPE_PROC_REF(/datum/controller/subsystem/shuttle, moveShuttle), "supply", "supply_home", TRUE), 100) - -/obj/docking_port/mobile/supply/proc/buy() - var/list/obj/cat_boxes = list() - - var/list/empty_turfs = list() - var/list/general_turfs = list() - for(var/area/shuttle/supply/buy/shuttle_area in shuttle_areas) - for(var/turf/open/floor/T in shuttle_area) - general_turfs += T - if(is_blocked_turf(T)) - continue - empty_turfs += T - - var/list/orderse = list() - - if(SSshuttle.shoppinglist.len) - for(var/datum/supply_order/SO in SSshuttle.shoppinglist) - if(budget <= -30) - continue - budget -= SO.pack.cost - var/turf/used_turf - if(!empty_turfs.len) - used_turf = pick(general_turfs) - else - used_turf = pick_n_take(empty_turfs) - var/obj/structure/closet/crate/B = cat_boxes[SO.pack.group] - if(!B) - B = new SO.pack.crate_type(used_turf) - cat_boxes[SO.pack.group] = B - SO.generateCombo(B, SO.orderer, SO.pack.contains) - orderse += "[SO.pack.name]" - SSshuttle.shoppinglist -= SO - qdel(SO) - - var/turf/used_turf - if(!empty_turfs.len) - used_turf = pick(general_turfs) - else - used_turf = pick_n_take(empty_turfs) - - var/moneybox = new /obj/structure/closet/crate/chest/merchant(used_turf) - - if(budget > 0) - var/spawnedcoins = round(budget / 10) - if(spawnedcoins >= 1) - for(var/i in 1 to spawnedcoins) - budget -= 10 - new /obj/item/roguecoin/gold(moneybox) - spawnedcoins = round(budget / 5) - if(spawnedcoins >= 1) - for(var/i in 1 to spawnedcoins) - budget -= 5 - new /obj/item/roguecoin/silver(moneybox) - if(budget >= 1) - for(var/i in 1 to budget) - new /obj/item/roguecoin/copper(moneybox) - budget = 0 - if(orderse.len || salese.len || budget < 0) - generateManifest(orderse,moneybox) - salese = list() - - -/obj/docking_port/mobile/supply/proc/generateManifest(list/orders,loc) //generates-the-manifests. - var/obj/item/paper/scroll/P = new(loc) - - P.name = "shipping manifest - [station_time_timestamp()]" - P.info += "

    Shipping Manifest - [station_time_timestamp()]

    " - P.info += "
    " - - if(orders.len) - P.info += "Trades:
    " - P.info += "
      " - for(var/A in orders) - P.info += "
    • [A]
    • " - P.info += "
    " - - P.info += "
    " - - if(salese.len) - P.info += "Liquidation:
    " - P.info += "
      " - for(var/A in salese) - P.info += "
    • [A]
    • " - P.info += "
    " - - P.info += "
    " - - if(budget < 0) - if(budget > -30) - P.info += "You have a negative balance ([budget]) with our guild. Pay your dues or be fined further." - else - budget -= 30 - P.info += "Your negative balance ([budget]) has strained our relationship. We have taken our share of this sale and will not be sending orders until we are settled." - - - return P - - -/obj/docking_port/mobile/supply/proc/remake_ledger() - var/list/general_turfs = list() - for(var/area/shuttle/supply/buy/shuttle_area in shuttle_areas) - for(var/turf/open/floor/T in shuttle_area) - general_turfs += T - new /obj/item/book/rogue/ledger(pick(general_turfs)) - -/obj/docking_port/mobile/supply/proc/sell() - var/msg = "" - - var/datum/export_report/ex = new - - var/newbudget = 0 - - for(var/area/shuttle/supply/sell/place in shuttle_areas) - for(var/atom/movable/AM in place) - if(iscameramob(AM)) - continue - if(QDELETED(AM)) - continue - var/list/contents = AM.GetAllContents() - for(var/i in reverseRange(contents)) - var/atom/movable/thing = i - if(QDELETED(thing)) - continue - thing.pre_sell() - AM.pre_sell() - - for(var/area/shuttle/supply/sell/place in shuttle_areas) - for(var/atom/movable/AM in place) - if(iscameramob(AM)) - continue - if(QDELETED(AM)) - continue -// if(bounty_ship_item_and_contents(AM, dry_run = FALSE)) -// matched_bounty = TRUE - if(!AM.anchored || istype(AM, /obj/mecha)) - if(istype(AM, /obj/item/paper/scroll/cargo)) - var/obj/item/paper/scroll/cargo/C = AM - if(C.signedjob in list("Priest", "Court Magician", "Merchant", "King", "Captain")) - for(var/datum/supply_order/SO in C.orders) - SSshuttle.shoppinglist += SO - C.orders -= SO - qdel(C) - continue - var/list/contents = AM.GetAllContents() - for(var/i in reverseRange(contents)) - var/atom/movable/thing = i - if(QDELETED(thing)) - continue - if(istype(thing, /obj/item/paper/scroll/cargo)) - var/obj/item/paper/scroll/cargo/C = AM - if(C.signedjob in list("Priest", "Court Magician", "Merchant", "King", "Captain")) - for(var/datum/supply_order/SO in C.orders) - SSshuttle.shoppinglist += SO - C.orders -= SO - qdel(C) - continue - if(thing.get_real_price() > 0) - newbudget += thing.get_real_price() - ex.total_value[thing] += thing.get_real_price() - ex.total_amount[thing] += 1 - ex.exported_atoms += " [thing.name]" - salese += "[thing.name] ([thing.get_real_price()])" - thing.on_sold() - qdel(thing) - - budget += newbudget - - if(budget < 0) - if(budget > -30) - msg += "You have a negative balance ([budget]) with our guild. Pay your dues or be fined further." - else - budget -= 30 - msg += "Your negative balance ([budget]) has strained our relationship. We have taken our share of this sale and will not be sending orders until we are settled." - return msg diff --git a/code/modules/shuttle/syndicate.dm b/code/modules/shuttle/syndicate.dm deleted file mode 100644 index 1eea158977..0000000000 --- a/code/modules/shuttle/syndicate.dm +++ /dev/null @@ -1,66 +0,0 @@ -#define SYNDICATE_CHALLENGE_TIMER 12000 //20 minutes - -/obj/machinery/computer/shuttle/syndicate - name = "syndicate shuttle terminal" - desc = "" - circuit = /obj/item/circuitboard/computer/syndicate_shuttle - icon_screen = "syndishuttle" - icon_keyboard = "syndie_key" - light_color = LIGHT_COLOR_RED - req_access = list(ACCESS_SYNDICATE) - shuttleId = "syndicate" - possible_destinations = "syndicate_away;syndicate_z5;syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s;syndicate_custom" - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - -/obj/machinery/computer/shuttle/syndicate/recall - name = "syndicate shuttle recall terminal" - desc = "" - possible_destinations = "syndicate_away" - - -/obj/machinery/computer/shuttle/syndicate/Topic(href, href_list) - if(href_list["move"]) - var/obj/item/circuitboard/computer/syndicate_shuttle/board = circuit - if(board.challenge && world.time < SYNDICATE_CHALLENGE_TIMER) - to_chat(usr, "You've issued a combat challenge to the station! You've got to give them at least [DisplayTimeText(SYNDICATE_CHALLENGE_TIMER - world.time)] more to allow them to prepare.") - return 0 - board.moved = TRUE - ..() - -/obj/machinery/computer/shuttle/syndicate/allowed(mob/M) - if(issilicon(M) && !(ROLE_SYNDICATE in M.faction)) - return FALSE - return ..() - -/obj/machinery/computer/shuttle/syndicate/drop_pod - name = "syndicate assault pod control" - desc = "" - icon = 'icons/obj/terminals.dmi' - icon_state = "dorm_available" - light_color = LIGHT_COLOR_BLUE - 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(!is_centcom_level(z)) - to_chat(usr, "Pods are one way!") - return 0 - ..() - -/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate - name = "syndicate shuttle navigation computer" - desc = "" - icon_screen = "syndishuttle" - icon_keyboard = "syndie_key" - shuttleId = "syndicate" - lock_override = CAMERA_LOCK_STATION - shuttlePortId = "syndicate_custom" - jumpto_ports = list("syndicate_ne" = 1, "syndicate_nw" = 1, "syndicate_n" = 1, "syndicate_se" = 1, "syndicate_sw" = 1, "syndicate_s" = 1) - view_range = 13 - x_offset = -7 - y_offset = -1 - see_hidden = TRUE - -#undef SYNDICATE_CHALLENGE_TIMER diff --git a/code/modules/shuttle/white_ship.dm b/code/modules/shuttle/white_ship.dm deleted file mode 100644 index 7d1915e048..0000000000 --- a/code/modules/shuttle/white_ship.dm +++ /dev/null @@ -1,56 +0,0 @@ -/obj/machinery/computer/shuttle/white_ship - name = "White Ship Console" - desc = "" - circuit = /obj/item/circuitboard/computer/white_ship - shuttleId = "whiteship" - possible_destinations = "whiteship_away;whiteship_home;whiteship_z4;whiteship_lavaland;whiteship_custom" - -/obj/machinery/computer/shuttle/white_ship/pod - name = "Salvage Pod Console" - desc = "" - circuit = /obj/item/circuitboard/computer/white_ship/pod - shuttleId = "whiteship_pod" - possible_destinations = "whiteship_pod_home;whiteship_pod_custom" - -/obj/machinery/computer/shuttle/white_ship/pod/recall - name = "Salvage Pod Recall Console" - desc = "" - circuit = /obj/item/circuitboard/computer/white_ship/pod/recall - possible_destinations = "whiteship_pod_home" - -/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship - name = "White Ship Navigation Computer" - desc = "" - shuttleId = "whiteship" - lock_override = NONE - shuttlePortId = "whiteship_custom" - jumpto_ports = list("whiteship_away" = 1, "whiteship_home" = 1, "whiteship_z4" = 1) - view_range = 18 - x_offset = -6 - y_offset = -10 - designate_time = 100 - -/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship/pod - name = "Salvage Pod Navigation Computer" - desc = "" - shuttleId = "whiteship_pod" - shuttlePortId = "whiteship_pod_custom" - jumpto_ports = list("whiteship_pod_home" = 1) - view_range = 7 - x_offset = -2 - y_offset = 0 - designate_time = 0 - -/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship/Initialize() - . = ..() - GLOB.jam_on_wardec += src - -/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship/Destroy() - GLOB.jam_on_wardec -= src - return ..() - -/obj/effect/spawner/lootdrop/whiteship_cere_ripley - name = "25% mech 75% wreckage ripley spawner" - loot = list(/obj/mecha/working/ripley/mining = 1, - /obj/structure/mecha_wreckage/ripley = 5) - lootdoubles = FALSE diff --git a/code/modules/spells/roguetown/_roguetown.dm b/code/modules/spells/roguetown/_roguetown.dm index d5995d57cc..bb812ac7d0 100644 --- a/code/modules/spells/roguetown/_roguetown.dm +++ b/code/modules/spells/roguetown/_roguetown.dm @@ -71,6 +71,7 @@ return /obj/effect/proc_holder/spell/invoked/projectile/cast(list/targets, mob/living/user) + . = ..() var/target = targets[1] var/turf/T = user.loc var/turf/U = get_step(user, user.dir) // Get the tile infront of the move, based on their direction diff --git a/code/modules/spells/roguetown/acolyte/astrata.dm b/code/modules/spells/roguetown/acolyte/astrata.dm index 332a4df419..eb70b9a60b 100644 --- a/code/modules/spells/roguetown/acolyte/astrata.dm +++ b/code/modules/spells/roguetown/acolyte/astrata.dm @@ -16,9 +16,10 @@ antimagic_allowed = TRUE charge_max = 8 SECONDS // the cooldown miracle = TRUE - devotion_cost = -45 + devotion_cost = 45 /obj/effect/proc_holder/spell/invoked/sacred_flame_rogue/cast(list/targets, mob/user = usr) + . = ..() if(isliving(targets[1])) var/mob/living/L = targets[1] user.visible_message("[user] points at [L]!") @@ -58,12 +59,13 @@ antimagic_allowed = TRUE charge_max = 2 MINUTES miracle = TRUE - devotion_cost = -100 + devotion_cost = 100 // req_inhand = list(/obj/item/roguecoin/gold) /// Amount of PQ gained for reviving people var/revive_pq = 0.25 /obj/effect/proc_holder/spell/invoked/revive/cast(list/targets, mob/living/user) + . = ..() if(isliving(targets[1])) testing("revived1") var/mob/living/target = targets[1] diff --git a/code/modules/spells/roguetown/acolyte/dendor.dm b/code/modules/spells/roguetown/acolyte/dendor.dm index 6bd79d8820..d8b10eb5fc 100644 --- a/code/modules/spells/roguetown/acolyte/dendor.dm +++ b/code/modules/spells/roguetown/acolyte/dendor.dm @@ -21,7 +21,7 @@ invocation = "The Treefather commands thee, be fruitful!" invocation_type = "shout" //can be none, whisper, emote and shout miracle = TRUE - devotion_cost = -15 + devotion_cost = 15 /obj/effect/proc_holder/spell/targeted/blesscrop/cast(list/targets,mob/user = usr) . = ..() @@ -77,7 +77,7 @@ range = 5 overlay_state = "tamebeast" releasedrain = 30 - charge_max = 30 SECONDS + charge_max = 6 MINUTES req_items = list(/obj/item/clothing/neck/roguetown/psycross/silver/dendor) max_targets = 0 cast_without_targets = TRUE @@ -86,7 +86,7 @@ invocation = "Be still and calm, brotherbeast." invocation_type = "whisper" //can be none, whisper, emote and shout miracle = TRUE - devotion_cost = -60 + devotion_cost = 60 /obj/effect/proc_holder/spell/targeted/beasttame/cast(list/targets,mob/user = usr) playsound(get_turf(user), 'sound/vo/smokedrag.ogg', 100, TRUE) @@ -118,19 +118,29 @@ /obj/effect/proc_holder/spell/targeted/conjure_kneestingers/cast(list/targets,mob/user = usr) playsound(get_turf(user), 'sound/vo/smokedrag.ogg', 100, TRUE) + var/turf/T = user.loc + var/already_grown = locate(/obj/structure/kneestingers) in (T) + var/area/area = get_area(T) + + if(!area.outdoors) + to_chat(user, span_notice("The open air is more suited for Dendors miracles...")) + return ..() + + if(already_grown) + to_chat(user, span_notice("There are too many mycelia here already...")) + return ..() + sleep(10) playsound(get_turf(user), 'sound/foley/gross.ogg', 90, TRUE) - var/turf/T = user.loc new /obj/structure/kneestingers/decaying(T) -/* The old more powerful version that spwans 4 kneestingers instead of one +/* The old terrible version made by YuiY1997 that spwans 4 kneestingers. Don't use. /obj/effect/proc_holder/spell/targeted/conjure_kneestingers/cast(list/targets,mob/user = usr) var/turf/T = user.loc for(var/X in GLOB.cardinals) var/turf/TT = get_step(T, X) if(!isclosedturf(TT) && !locate(/obj/structure/kneestingers) in TT) - if(prob(50)) // added this but meh, not good - new /obj/structure/kneestingers(TT) + new /obj/structure/kneestingers(TT) return TRUE */ diff --git a/code/modules/spells/roguetown/acolyte/eora.dm b/code/modules/spells/roguetown/acolyte/eora.dm index 6d95f1cd74..d499175f32 100644 --- a/code/modules/spells/roguetown/acolyte/eora.dm +++ b/code/modules/spells/roguetown/acolyte/eora.dm @@ -18,6 +18,7 @@ charge_max = 60 SECONDS /obj/effect/proc_holder/spell/invoked/bud/cast(list/targets, mob/living/user) + . = ..() var/turf/T = get_turf(targets[1]) if(!isclosedturf(T)) new /obj/item/clothing/head/peaceflower(T) @@ -56,14 +57,16 @@ ..() if(iscarbon(target)) var/mob/living/carbon/C = target - C.visible_message("A purple haze shrouds [target]!", "I feel much calmer.") + C.visible_message("A purple haze shrouds [target]!", "I feel like I've been drinking incredible amounts of wine...") C.reagents.add_reagent(/datum/reagent/berrypoison, 3) - C.reagents.add_reagent(/datum/reagent/moondust, 3) - C.reagents.add_reagent(/datum/reagent/consumable/ethanol/beer/wine, 3) + C.apply_status_effect(/datum/status_effect/buff/drunk) + C.apply_status_effect(/datum/status_effect/debuff/pintledestruction) +// C.reagents.add_reagent(/datum/reagent/moondust, 3) +// C.reagents.add_reagent(/datum/reagent/consumable/ethanol/beer/wine, 3) return - if(isanimal(target)) - var/mob/living/simple_animal/L = target - L.adjustHealth(25) +// if(isanimal(target)) +// var/mob/living/simple_animal/L = target +// L.adjustHealth(25) /obj/projectile/magic/eora/on_range() var/turf/T = get_turf(src) @@ -102,13 +105,13 @@ L.Paralyze(50) if(iscarbon(L)) var/mob/living/carbon/C = L - C.reagents.add_reagent(/datum/reagent/berrypoison, 1) - C.reagents.add_reagent(/datum/reagent/moondust, 3) - C.reagents.add_reagent(/datum/reagent/consumable/ethanol/beer/wine, 3) - C.visible_message("A purple haze shrouds [L]!", "I feel much calmer.") - if(isanimal(L)) - var/mob/living/simple_animal/A = L - A.adjustHealth(25) + C.reagents.add_reagent(/datum/reagent/berrypoison, 3) + C.apply_status_effect(/datum/status_effect/buff/drunk) + C.apply_status_effect(/datum/status_effect/debuff/pintledestruction) + C.visible_message("A purple haze shrouds [L]!", "I feel incredibly drunk...") +// if(isanimal(L)) +// var/mob/living/simple_animal/A = L +// A.adjustHealth(25) qdel(src) return ..() diff --git a/code/modules/spells/roguetown/acolyte/general.dm b/code/modules/spells/roguetown/acolyte/general.dm index 37ca356d07..c9c45226a1 100644 --- a/code/modules/spells/roguetown/acolyte/general.dm +++ b/code/modules/spells/roguetown/acolyte/general.dm @@ -13,15 +13,16 @@ associated_skill = /datum/skill/magic/holy antimagic_allowed = TRUE charge_max = 10 SECONDS - devotion_cost = -25 + devotion_cost = 25 + miracle = TRUE // If it has a devotion cost, it was always meant to be a miracle /obj/effect/proc_holder/spell/invoked/lesser_heal/cast(list/targets, mob/living/user) + . = ..() if(isliving(targets[1])) var/mob/living/target = targets[1] if(target.mob_biotypes & MOB_UNDEAD) //positive energy harms the undead target.visible_message("[target] is burned by holy light!", "I'm burned by holy light!") - target.adjustFireLoss(50) - target.Paralyze(30) + target.adjustFireLoss(25) target.fire_act(1,5) return TRUE if(target.real_name in GLOB.excommunicated_players) @@ -173,15 +174,16 @@ antimagic_allowed = TRUE charge_max = 20 SECONDS miracle = TRUE - devotion_cost = -45 + devotion_cost = 45 /obj/effect/proc_holder/spell/invoked/heal/cast(list/targets, mob/living/user) + . = ..() if(isliving(targets[1])) var/mob/living/target = targets[1] if(target.mob_biotypes & MOB_UNDEAD) //positive energy harms the undead target.visible_message("[target] is burned by holy light!", "I'm burned by holy light!") - target.adjustFireLoss(100) - target.Paralyze(50) + target.adjustFireLoss(50) + target.Knockdown(10) target.fire_act(1,5) return TRUE target.visible_message("A wreath of gentle light passes over [target]!", "I'm bathed in holy light!") @@ -214,6 +216,7 @@ charge_max = 1 MINUTES /obj/effect/proc_holder/spell/self/barbrage/cast(list/targets,mob/living/user = usr) + . = ..() user.emote("rage", forced = TRUE) playsound(get_turf(user), 'sound/magic/barbroar.ogg', 50, TRUE) user.apply_status_effect(/datum/status_effect/buff/barbrage) diff --git a/code/modules/spells/roguetown/acolyte/necra.dm b/code/modules/spells/roguetown/acolyte/necra.dm index 6afc9df4d4..7639439971 100644 --- a/code/modules/spells/roguetown/acolyte/necra.dm +++ b/code/modules/spells/roguetown/acolyte/necra.dm @@ -12,11 +12,12 @@ invocation = "Undermaiden grant thee passage forth and spare the trials of the forgotten." invocation_type = "whisper" //can be none, whisper, emote and shout miracle = TRUE - devotion_cost = -15 + devotion_cost = -5 /obj/effect/proc_holder/spell/targeted/burialrite/cast(list/targets,mob/user = usr) - if(user.is_holding_item_of_type(/obj/item/rogueweapon/huntingknife/idagger/steel/profane)) // If you are holding an assassin's cursed dagger, break it and free the souls contained within, sending them into the lukewarm arms of Necra. - var/obj/item/rogueweapon/huntingknife/idagger/steel/profane/held_profane = user.is_holding_item_of_type(/obj/item/rogueweapon/huntingknife/idagger/steel/profane) + . = ..() + if(user.is_holding_item_of_type(/obj/item/rogueweapon/knife/dagger/steel/profane)) // If you are holding an assassin's cursed dagger, break it and free the souls contained within, sending them into the lukewarm arms of Necra. + var/obj/item/rogueweapon/knife/dagger/steel/profane/held_profane = user.is_holding_item_of_type(/obj/item/rogueweapon/knife/dagger/steel/profane) var/saved_souls = held_profane.release_profane_souls(user) // Releases the trapped souls and breaks the dagger. Gets the number of souls saved by destroying the dagger. user.adjust_triumphs(saved_souls) // Every soul saved earns you a big fat triumph. for(var/obj/structure/closet/dirthole/H in view(1)) @@ -33,6 +34,64 @@ for(var/mob/living/carbon/human/B in C.contents) B.funeral = TRUE +/obj/effect/proc_holder/spell/targeted/soulspeak + name = "Speak with Soul" + range = 5 + overlay_state = "speakwithdead" + releasedrain = 30 + charge_max = 30 SECONDS + req_items = list(/obj/item/clothing/neck/roguetown/psycross/silver/necra) + max_targets = 0 + cast_without_targets = TRUE + sound = 'sound/magic/churn.ogg' + associated_skill = /datum/skill/magic/holy + invocation = "Speak and be heard, by the Will of the Undermaiden." + invocation_type = "whisper" //can be none, whisper, emote and shout + miracle = TRUE + devotion_cost = -40 + +/obj/effect/proc_holder/spell/targeted/soulspeak/cast(list/targets,mob/user = usr) + var/mob/living/carbon/spirit/capturedsoul = null + var/list/souloptions = list() + var/list/itemstorestore = list() + for(var/mob/living/carbon/spirit/S in GLOB.mob_list) + souloptions += S.livingname + var/pickedsoul = input(user, "Which soul should I commune with?", "Available Souls") as null|anything in souloptions + if(!pickedsoul) + return + for(var/mob/living/carbon/spirit/P in GLOB.carbon_list) + if(P.livingname == pickedsoul) + to_chat(P, "You feel yourself being pulled out of the underworld.") + sleep(2 SECONDS) + P.loc = user.loc + capturedsoul = P + P.invisibility = INVISIBILITY_OBSERVER + for(var/obj/item/I in P.held_items) // this is big ass, will revisit later + . |= P.dropItemToGround(I) + if(istype(I, /obj/item/underworld/coin)) + itemstorestore |= "token" + if(istype(I, /obj/item/flashlight/lantern/shrunken)) + itemstorestore |= "lamp" + qdel(I) + break + to_chat(P, "[itemstorestore]") + if(capturedsoul) + spawn(2 MINUTES) + to_chat(user, "The soul returns to the underworld.") + to_chat(capturedsoul, "You feel yourself being pulled back to the underworld.") + for(var/obj/effect/landmark/underworld/A in GLOB.landmarks_list) + capturedsoul.loc = A.loc + capturedsoul.invisibility = initial(capturedsoul.invisibility) + for(var/I in itemstorestore) + if(I == "token") + var/obj/item/underworld/coin/C = new + capturedsoul.put_in_hands(C) + if(I == "lamp") + var/obj/item/flashlight/lantern/shrunken/L = new + capturedsoul.put_in_hands(L) + to_chat(user, "I feel a cold chill run down my spine, a presence has arrived.") + capturedsoul.Paralyze(1200) + /obj/effect/proc_holder/spell/targeted/churn name = "Churn Undead" range = 8 @@ -47,14 +106,15 @@ invocation = "The Undermaiden rebukes!" invocation_type = "shout" //can be none, whisper, emote and shout miracle = TRUE - devotion_cost = -60 + devotion_cost = -50 /obj/effect/proc_holder/spell/targeted/churn/cast(list/targets,mob/living/user = usr) + . = ..() var/prob2explode = 100 if(user && user.mind) prob2explode = 0 for(var/i in 1 to user.mind.get_skill_level(/datum/skill/magic/holy)) - prob2explode += 80 + prob2explode += 20 for(var/mob/living/L in targets) var/isvampire = FALSE var/iszombie = FALSE @@ -69,7 +129,7 @@ iszombie = TRUE if(L.mind.special_role == "Vampire Lord") user.visible_message("[L] overpowers being churned!", "[L] is too strong, I am churned!") - user.Stun(50) + user.Knockdown(50) user.throw_at(get_ranged_target_turf(user, get_dir(user,L), 7), 7, 1, L, spin = FALSE) return if((L.mob_biotypes & MOB_UNDEAD) || isvampire || iszombie) @@ -80,8 +140,9 @@ if(prob(undead_prob)) L.visible_message("[L] HAS BEEN CHURNED BY NECRA'S GRIP!", "I'VE BEEN CHURNED BY NECRA'S GRIP!") explosion(get_turf(L), light_impact_range = 1, flame_range = 1, smoke = FALSE) - L.Stun(50) + L.Knockdown(50) else + L.take_overall_damage(burn = 4 * user.mind.get_skill_level(/datum/skill/magic/holy)) L.visible_message("[L] resists being churned!", "I resist being churned!") ..() return TRUE diff --git a/code/modules/spells/roguetown/acolyte/noc.dm b/code/modules/spells/roguetown/acolyte/noc.dm index 9c9a9cb4c6..ced30f934a 100644 --- a/code/modules/spells/roguetown/acolyte/noc.dm +++ b/code/modules/spells/roguetown/acolyte/noc.dm @@ -13,14 +13,15 @@ associated_skill = /datum/skill/magic/holy antimagic_allowed = TRUE charge_max = 15 SECONDS - devotion_cost = -30 + devotion_cost = 30 /obj/effect/proc_holder/spell/invoked/blindness/cast(list/targets, mob/user = usr) + . = ..() if(isliving(targets[1])) var/mob/living/target = targets[1] if(target.anti_magic_check(TRUE, TRUE)) return FALSE - target.visible_message("[user] points at [target]'s eyes!","My eyes are covered in darkness!") + target.visible_message("[user] points at [target]'s eyes!","My eyes are covered in darkness!") target.blind_eyes(2) return TRUE @@ -39,9 +40,10 @@ associated_skill = /datum/skill/magic/holy antimagic_allowed = TRUE miracle = TRUE - devotion_cost = -45 + devotion_cost = 45 /obj/effect/proc_holder/spell/invoked/invisibility/cast(list/targets, mob/living/user) + . = ..() if(isliving(targets[1])) var/mob/living/target = targets[1] if(target.anti_magic_check(TRUE, TRUE)) diff --git a/code/modules/spells/roguetown/acolyte/pestra.dm b/code/modules/spells/roguetown/acolyte/pestra.dm index 975f8ff4ef..31a3372f27 100644 --- a/code/modules/spells/roguetown/acolyte/pestra.dm +++ b/code/modules/spells/roguetown/acolyte/pestra.dm @@ -14,9 +14,11 @@ antimagic_allowed = TRUE charge_max = 5 SECONDS //very stupidly simple spell miracle = TRUE - devotion_cost = 5 //come on, this is very basic + devotion_cost = 15 // Basic spell /obj/effect/proc_holder/spell/invoked/diagnose/cast(list/targets, mob/living/user) + . = ..() + if(ishuman(targets[1])) var/mob/living/carbon/human/human_target = targets[1] human_target.check_for_injuries(user) @@ -40,7 +42,7 @@ antimagic_allowed = TRUE charge_max = 60 SECONDS //attaching a limb is pretty intense miracle = TRUE - devotion_cost = -80 + devotion_cost = 80 /obj/effect/proc_holder/spell/invoked/attach_bodypart/proc/get_organs(mob/living/target, mob/living/user) var/list/missing_organs = list( @@ -101,6 +103,7 @@ // consider adding functionality to regrow one entire organ or limb per casting? /obj/effect/proc_holder/spell/invoked/attach_bodypart/cast(list/targets, mob/living/user) + . = ..() if(ishuman(targets[1])) var/mob/living/carbon/human/human_target = targets[1] for(var/obj/item/bodypart/limb as anything in get_limbs(human_target, user)) @@ -139,11 +142,12 @@ antimagic_allowed = TRUE charge_max = 2 MINUTES miracle = TRUE - devotion_cost = -100 + devotion_cost = 100 /// Amount of PQ gained for curing zombos var/unzombification_pq = 0.4 /obj/effect/proc_holder/spell/invoked/cure_rot/cast(list/targets, mob/living/user) + . = ..() if(isliving(targets[1])) testing("curerot1") var/mob/living/target = targets[1] diff --git a/code/modules/spells/roguetown/confessor.dm b/code/modules/spells/roguetown/confessor.dm index b0e55bc356..4f69ea76eb 100644 --- a/code/modules/spells/roguetown/confessor.dm +++ b/code/modules/spells/roguetown/confessor.dm @@ -12,10 +12,10 @@ movement_interrupt = FALSE chargedloop = /datum/looping_sound/invokeholy miracle = TRUE - devotion_cost = -30 + devotion_cost = 30 /obj/effect/proc_holder/spell/invoked/shepherd/cast(list/targets, mob/living/user) - ..() + . = ..() if(isliving(targets[1])) var/mob/living/target = targets[1] if(target == user) diff --git a/code/modules/spells/roguetown/jester.dm b/code/modules/spells/roguetown/jester.dm index cc11bd57db..48eaf82bbf 100644 --- a/code/modules/spells/roguetown/jester.dm +++ b/code/modules/spells/roguetown/jester.dm @@ -7,7 +7,7 @@ charge_max = 600 /obj/effect/proc_holder/spell/self/telljoke/cast(list/targets,mob/user = usr) - ..() + . = ..() var/joker = input(user, "Say something funny!", "Comedia") if(!joker) return FALSE @@ -33,7 +33,7 @@ charge_max = 600 /obj/effect/proc_holder/spell/self/telltragedy/cast(list/targets,mob/user = usr) - ..() + . = ..() var/joker = input(user, "Say something sad!", "Tragedia") if(!joker) return FALSE diff --git a/code/modules/spells/roguetown/wizard.dm b/code/modules/spells/roguetown/wizard.dm index 893cf1232d..e1a0c45176 100644 --- a/code/modules/spells/roguetown/wizard.dm +++ b/code/modules/spells/roguetown/wizard.dm @@ -36,12 +36,16 @@ speed = 0.3 flag = "magic" light_color = "#ffffff" - light_range = 7 + light_outer_range = 7 /obj/projectile/magic/lightning/on_hit(target) . = ..() if(ismob(target)) var/mob/M = target + var/mob/living/carbon/H = target + H.set_heartattack(FALSE) + H.revive(full_heal = FALSE, admin_revive = FALSE) + H.emote("breathgasp") if(M.anti_magic_check()) visible_message("[src] fizzles on contact with [target]!") playsound(get_turf(target), 'sound/magic/magic_nulled.ogg', 100) @@ -88,7 +92,7 @@ speed = 0.3 flag = "magic" light_color = "#802121" - light_range = 7 + light_outer_range = 7 /obj/projectile/magic/bloodlightning/on_hit(target) . = ..() @@ -140,7 +144,7 @@ speed = 0.3 flag = "magic" light_color = "#e74141" - light_range = 7 + light_outer_range = 7 /obj/projectile/magic/bloodsteal/on_hit(target) . = ..() @@ -248,7 +252,7 @@ /obj/effect/proc_holder/spell/invoked/projectile/spitfire name = "Spitfire" - desc = "Shoot out a low-powered ball of fire that shines brightly on impact, potentially blinding a target." + desc = "Shoot out a of low-powered ball of fire that shines brightly on impact, potentially blinding a target." clothes_req = FALSE range = 8 projectile_type = /obj/projectile/magic/aoe/fireball/rogue2 @@ -279,7 +283,7 @@ flag = "magic" hitsound = 'sound/blank.ogg' aoe_range = 0 - speed = 2.5 + speed = 3.5 /obj/projectile/magic/aoe/fireball/rogue2/on_hit(target) . = ..() @@ -291,9 +295,9 @@ qdel(src) return BULLET_ACT_BLOCK -/obj/effect/proc_holder/spell/invoked/projectile/arcanebolt - name = "Arcane Bolt" - desc = "Shoot out rapid bolts of arcane magic, that firmly hits on impact." +/obj/effect/proc_holder/spell/invoked/projectile/arcynebolt + name = "Arcyne Bolt" + desc = "Shoot out rapid bolts of arcyne magic, that firmly hits on impact." clothes_req = FALSE range = 12 projectile_type = /obj/projectile/energy/rogue3 @@ -313,15 +317,16 @@ cost = 2 /obj/projectile/energy/rogue3 - name = "Arcane Bolt" + name = "Arcyne Bolt" icon_state = "arcane_barrage" - damage = 30 + damage = 45 damage_type = BRUTE armor_penetration = 10 + woundclass = BCLASS_STAB nodamage = FALSE flag = "bullet" hitsound = 'sound/blank.ogg' - speed = 2 + speed = 1 /obj/projectile/energy/rogue3/on_hit(target) . = ..() @@ -475,7 +480,7 @@ //let's adjust the light power based on our skill, too var/skill_level = user.mind?.get_skill_level(attached_spell.associated_skill) var/mote_power = clamp(4 + (skill_level - 3), 4, 7) // every step above journeyman should get us 1 more tile of brightness - mote.light_range = mote_power + mote.light_outer_range = mote_power mote.update_light() if (mote.loc == src) @@ -543,7 +548,7 @@ name = "minor magelight mote" desc = "A tiny display of arcyne power used to illuminate." pixel_x = 20 - light_range = 4 + light_outer_range = 4 light_color = "#3FBAFD" //A spell to choose new spells, upon spawning or gaining levels @@ -570,13 +575,14 @@ // /obj/effect/proc_holder/spell/targeted/ethereal_jaunt, // /obj/effect/proc_holder/spell/aoe_turf/knock, /obj/effect/proc_holder/spell/targeted/touch/darkvision,// 2 cost - /obj/effect/proc_holder/spell/invoked/message, + /obj/effect/proc_holder/spell/self/message, /obj/effect/proc_holder/spell/invoked/blade_burst, /obj/effect/proc_holder/spell/invoked/projectile/fetch, - /obj/effect/proc_holder/spell/invoked/projectile/arcanebolt, + /obj/effect/proc_holder/spell/invoked/projectile/arcynebolt, /obj/effect/proc_holder/spell/targeted/touch/nondetection, // 1 cost /obj/effect/proc_holder/spell/targeted/touch/prestidigitation, /obj/effect/proc_holder/spell/invoked/featherfall, + /obj/effect/proc_holder/spell/invoked/longstrider, ) for(var/i = 1, i <= spell_choices.len, i++) choices["[spell_choices[i].name]: [spell_choices[i].cost]"] = spell_choices[i] @@ -637,7 +643,7 @@ CanAtmosPass = ATMOS_PASS_DENSITY climbable = TRUE climb_time = 0 - var/timeleft = 20 SECONDS + var/timeleft = 10 SECONDS /obj/structure/forcefield_weak/Initialize() . = ..() @@ -645,6 +651,7 @@ QDEL_IN(src, timeleft) //delete after it runs out /obj/effect/proc_holder/spell/invoked/forcewall_weak/cast(list/targets,mob/user = usr) + . = ..() var/turf/front = get_step(user, user.dir) new wall_type(front, user) if(user.dir == SOUTH || user.dir == NORTH) @@ -699,6 +706,7 @@ var/delay = 0.8 SECONDS /obj/effect/proc_holder/spell/invoked/slowdown_spell_aoe/cast(list/targets, mob/user = usr) + . = ..() var/turf/T = get_turf(targets[1]) for(var/turf/affected_turf in view(area_of_effect, T)) @@ -729,26 +737,22 @@ /obj/effect/temp_visual/slowdown_spell_aoe/long duration = 3 SECONDS -/obj/effect/proc_holder/spell/invoked/message +/obj/effect/proc_holder/spell/self/message name = "Message" desc = "Latch onto the mind of one who is familiar to you, whispering a message into their head." cost = 2 releasedrain = 30 - chargedrain = 1 - chargetime = 5 SECONDS charge_max = 60 SECONDS warnie = "spellwarning" - no_early_release = TRUE - movement_interrupt = TRUE - charging_slowdown = 3 - chargedloop = /datum/looping_sound/invokegen associated_skill = /datum/skill/magic/arcane overlay_state = "message" + var/identify_difficulty = 15 //the stat threshold needed to pass the identify check -/obj/effect/proc_holder/spell/invoked/message/cast(list/targets, mob/user) +/obj/effect/proc_holder/spell/self/message/cast(list/targets, mob/user) . = ..() var/input = input(user, "Who are you trying to contact?") if(!input) + revert_cast() return if(!user.key) to_chat(user, span_warning("I sense a body, but the mind does not seem to be there.")) @@ -762,13 +766,28 @@ if(HL.real_name == input) var/message = input(user, "You make a connection. What are you trying to say?") if(!message) + revert_cast() return - to_chat(HL, "Arcyne whispers fill the back of my head, resolving into a clear, if distant, voice: \"[message]\"") + if(alert(user, "Send anonymously?", "", "Yes", "No") == "No") //yes or no popup, if you say No run this code + identify_difficulty = 0 //anyone can clear this + + var/identified = FALSE + if(HL.STAPER >= identify_difficulty) //quick stat check + if(HL.mind) + if(HL.mind.do_i_know(name=user.real_name)) //do we know who this person is? + identified = TRUE // we do + to_chat(HL, "Arcyne whispers fill the back of my head, resolving into [user]'s voice: \"[message]\"") + + if(!identified) //we failed the check OR we just dont know who that is + to_chat(HL, "Arcyne whispers fill the back of my head, resolving into an unknown [user.gender == FEMALE ? "woman" : "man"]'s voice: \"[message]\"") + + user.whisper(message) log_game("[key_name(user)] sent a message to [key_name(HL)] with contents [message]") // maybe an option to return a message, here? return TRUE to_chat(user, span_warning("I seek a mental connection, but can't find [input].")) revert_cast() + return /obj/effect/proc_holder/spell/invoked/push_spell name = "Repulse" @@ -792,6 +811,7 @@ var/push_range = 1 /obj/effect/proc_holder/spell/invoked/push_spell/cast(list/targets, mob/user) + . = ..() var/list/thrownatoms = list() var/atom/throwtarget var/distfromcaster @@ -849,7 +869,7 @@ /obj/effect/temp_visual/trap icon = 'icons/effects/effects.dmi' icon_state = "trap" - light_range = 2 + light_outer_range = 2 duration = 7 layer = ABOVE_ALL_MOB_LAYER //this doesnt render above mobs? it really should @@ -863,6 +883,7 @@ layer = ABOVE_ALL_MOB_LAYER /obj/effect/proc_holder/spell/invoked/blade_burst/cast(list/targets, mob/user) + . = ..() var/turf/T = get_turf(targets[1]) var/play_cleave = FALSE new /obj/effect/temp_visual/trap(T) @@ -1001,7 +1022,7 @@ overlay_state = "jump" /obj/effect/proc_holder/spell/invoked/featherfall/cast(list/targets, mob/user = usr) - + . = ..() user.visible_message("[user] mutters an incantation and a dim pulse of light radiates out from them.") for(var/mob/living/L in range(1, usr)) @@ -1012,11 +1033,11 @@ /obj/effect/proc_holder/spell/invoked/haste name = "Haste" desc = "Cause a target to be magically hastened." - cost = 3 - releasedrain = 25 + cost = 2 + releasedrain = 50 chargedrain = 1 - chargetime = 4 SECONDS - charge_max = 5 MINUTES + chargetime = 2 SECONDS + charge_max = 2.5 MINUTES warnie = "spellwarning" school = "transmutation" no_early_release = TRUE @@ -1026,6 +1047,7 @@ associated_skill = /datum/skill/magic/arcane /obj/effect/proc_holder/spell/invoked/haste/cast(list/targets, mob/user) + . = ..() var/atom/A = targets[1] if(!isliving(A)) revert_cast() @@ -1042,6 +1064,30 @@ return TRUE +/obj/effect/proc_holder/spell/invoked/longstrider + name = "Longstrider" + desc = "Grant yourself and any creatures adjacent to you free movement through rough terrain." + cost = 1 + school = "transmutation" + releasedrain = 50 + chargedrain = 0 + chargetime = 4 SECONDS + charge_max = 2 MINUTES + warnie = "spellwarning" + overlay_state = "jump" + no_early_release = TRUE + charging_slowdown = 1 + chargedloop = /datum/looping_sound/invokegen + associated_skill = /datum/skill/magic/arcane + +/obj/effect/proc_holder/spell/invoked/longstrider/cast(list/targets, mob/user = usr) + + user.visible_message("[user] mutters an incantation and a dim pulse of light radiates out from them.") + + for(var/mob/living/L in range(1, usr)) + L.apply_status_effect(/datum/status_effect/buff/longstrider) + + return TRUE #undef PRESTI_CLEAN #undef PRESTI_SPARK diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index 4c1d9dd15b..b288008b2e 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -145,7 +145,6 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th var/holder_var_amount = 20 //same. The amount adjusted with the mob's var when the spell is used var/clothes_req = FALSE //see if it requires clothes - var/cult_req = FALSE //SPECIAL SNOWFLAKE clothes required for cult only spells var/human_req = FALSE //spell can only be cast by humans var/nonabstract_req = FALSE //spell can only be cast by mobs that are physical entities var/stat_allowed = FALSE //see if it requires being conscious/alive, need to set to 1 for ghostpells @@ -178,8 +177,8 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th var/req_inhand = null //required inhand to cast var/base_icon_state = "spell" var/associated_skill = /datum/skill/magic/arcane - var/miracle = FALSE - var/devotion_cost = 0 + var/miracle = FALSE // Boolean. If the spell being cast counts as a miracle, for devotion draining costs. + var/devotion_cost = 0 // Amount of devotion that costs to cast a spell. Takes positive numbers, which get deducted. Has to be minimum 12 (rounded up to 15) to avoid refund exploits. var/ignore_cockblock = FALSE //whether or not to ignore TRAIT_SPELLCOCKBLOCK action_icon_state = "spell0" @@ -276,25 +275,14 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th return FALSE var/list/casting_clothes = typecacheof(list(/obj/item/clothing/suit/wizrobe, - /obj/item/clothing/suit/space/hardsuit/wizard, - /obj/item/clothing/head/wizard, - /obj/item/clothing/head/helmet/space/hardsuit/wizard, - /obj/item/clothing/suit/space/hardsuit/shielded/wizard, - /obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard)) + /obj/item/clothing/head/wizard)) if(clothes_req) //clothes check if(!is_type_in_typecache(H.wear_armor, casting_clothes)) - to_chat(H, "I don't feel strong enough without your robe!") + to_chat(H, "You don't feel strong enough without your robe!") return FALSE if(!is_type_in_typecache(H.head, casting_clothes)) - to_chat(H, "I don't feel strong enough without your hat!") - return FALSE - if(cult_req) //CULT_REQ CLOTHES CHECK - if(!istype(H.wear_armor, /obj/item/clothing/suit/magusred) && !istype(H.wear_armor, /obj/item/clothing/suit/space/hardsuit/cult)) - to_chat(H, "I don't feel strong enough without your armor.") - return FALSE - if(!istype(H.head, /obj/item/clothing/head/magus) && !istype(H.head, /obj/item/clothing/head/helmet/space/hardsuit/cult)) - to_chat(H, "I don't feel strong enough without your helmet.") + to_chat(H, "You don't feel strong enough without your hat!") return FALSE if(miracle) var/datum/devotion/cleric_holder/D = H.cleric @@ -305,7 +293,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th if(clothes_req || human_req) to_chat(user, "This spell can only be cast by humans!") return FALSE - if(nonabstract_req && (isbrain(user) || ispAI(user))) + if(nonabstract_req && (isbrain(user))) to_chat(user, "This spell can only be cast by physical beings!") return FALSE @@ -468,10 +456,17 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th /obj/effect/proc_holder/spell/proc/cast(list/targets,mob/user = usr) + var/mob/living/carbon/human/H = usr // The caster + var/datum/devotion/cleric_holder/D = H.cleric // The caster that is a cleric + var/boon = H.mind?.get_learning_boon(associated_skill) + var/amt2raise = H.STAINT*2 + var/miracle_refund = H.mind?.get_skill_level(associated_skill) / 10 + H.mind?.adjust_experience(associated_skill, floor(amt2raise * boon), FALSE) // Now you get to level your magic, little by little if(miracle) - var/mob/living/carbon/human/C = user - var/datum/devotion/cleric_holder/D = C.cleric - D.update_devotion(devotion_cost) + // New proc made to consume devotion upon cast. Better than using negative numbers. + D.consume_devotion(devotion_cost) + // Refund a percentage of devotion cost per every level of Holy magic we got, minimum of 5. We also gain 10 points towards cleric progression levels. + D.update_devotion(round(devotion_cost * miracle_refund, 5), 10) return /obj/effect/proc_holder/spell/proc/view_or_range(distance = world.view, center=usr, type="view") @@ -650,7 +645,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th if(!ishuman(user)) if(clothes_req || human_req) return FALSE - if(nonabstract_req && (isbrain(user) || ispAI(user))) + if(nonabstract_req && (isbrain(user))) return FALSE if((invocation_type == "whisper" || invocation_type == "shout") && isliving(user)) var/mob/living/living_user = user diff --git a/code/modules/spells/spell_types/aimed.dm b/code/modules/spells/spell_types/aimed.dm index 329d6d631b..24b5d8130f 100644 --- a/code/modules/spells/spell_types/aimed.dm +++ b/code/modules/spells/spell_types/aimed.dm @@ -67,6 +67,7 @@ return TRUE /obj/effect/proc_holder/spell/aimed/cast(list/targets, mob/living/user) + . = ..() var/target = targets[1] var/turf/T = user.loc var/turf/U = get_step(user, user.dir) // Get the tile infront of the move, based on their direction @@ -96,23 +97,6 @@ /obj/effect/proc_holder/spell/aimed/proc/ready_projectile(obj/projectile/P, atom/target, mob/user, iteration) return -/obj/effect/proc_holder/spell/aimed/lightningbolt// not the one used by RT - name = "Lightning Bolt" - desc = "" - school = "evocation" - charge_max = 200 - clothes_req = TRUE - invocation = "UN'LTD P'WAH" - invocation_type = "shout" - cooldown_min = 30 - base_icon_state = "lightning" - sound = 'sound/blank.ogg' - active = FALSE - projectile_var_overrides = list("tesla_range" = 15, "tesla_power" = 20000, "tesla_flags" = TESLA_MOB_DAMAGE) - active_msg = "You energize your hand with arcane lightning!" - deactive_msg = "You let the energy flow out of your hands back into myself..." - projectile_type = /obj/projectile/magic/aoe/lightning - /obj/effect/proc_holder/spell/aimed/fireball // not the one used by RT name = "Fireball" desc = "" diff --git a/code/modules/spells/spell_types/bloodcrawl.dm b/code/modules/spells/spell_types/bloodcrawl.dm index c83a93a878..955829ed5a 100644 --- a/code/modules/spells/spell_types/bloodcrawl.dm +++ b/code/modules/spells/spell_types/bloodcrawl.dm @@ -13,7 +13,7 @@ action_icon_state = "bloodcrawl" action_background_icon_state = "bg_demon" var/phased = FALSE - +/* /obj/effect/proc_holder/spell/bloodcrawl/choose_targets(mob/user = usr) for(var/obj/effect/decal/cleanable/target in range(range, get_turf(user))) if(target.can_bloodcrawl_in()) @@ -34,3 +34,4 @@ return revert_cast() to_chat(user, "I are unable to blood crawl!") +*/ diff --git a/code/modules/spells/spell_types/charge.dm b/code/modules/spells/spell_types/charge.dm deleted file mode 100644 index ba27c4c004..0000000000 --- a/code/modules/spells/spell_types/charge.dm +++ /dev/null @@ -1,103 +0,0 @@ -/obj/effect/proc_holder/spell/targeted/charge - name = "Charge" - desc = "" - - school = "transmutation" - charge_max = 600 - clothes_req = FALSE - invocation = "DIRI CEL" - invocation_type = "whisper" - range = -1 - cooldown_min = 400 //50 deciseconds reduction per rank - include_user = TRUE - action_icon_state = "charge" - -/obj/effect/proc_holder/spell/targeted/charge/cast(list/targets,mob/user = usr) - for(var/mob/living/L in targets) - var/list/hand_items = list(L.get_active_held_item(),L.get_inactive_held_item()) - var/charged_item = null - var/burnt_out = FALSE - - if(L.pulling && isliving(L.pulling)) - var/mob/living/M = L.pulling - if(M.mob_spell_list.len != 0 || (M.mind && M.mind.spell_list.len != 0)) - for(var/obj/effect/proc_holder/spell/S in M.mob_spell_list) - S.charge_counter = S.charge_max - if(M.mind) - for(var/obj/effect/proc_holder/spell/S in M.mind.spell_list) - S.charge_counter = S.charge_max - to_chat(M, "I feel raw magic flowing through you. It feels good!") - else - to_chat(M, "I feel very strange for a moment, but then it passes.") - burnt_out = TRUE - charged_item = M - break - for(var/obj/item in hand_items) - if(istype(item, /obj/item/spellbook)) - to_chat(L, "Glowing red letters appear on the front cover...") - to_chat(L, "[pick("NICE TRY BUT NO!","CLEVER BUT NOT CLEVER ENOUGH!", "SUCH FLAGRANT CHEESING IS WHY WE ACCEPTED YOUR APPLICATION!", "CUTE! VERY CUTE!", "YOU DIDN'T THINK IT'D BE THAT EASY, DID YOU?")]") - burnt_out = TRUE - else if(istype(item, /obj/item/book/granter/spell)) - var/obj/item/book/granter/spell/I = item - if(!I.oneuse) - to_chat(L, "This book is infinite use and can't be recharged, yet the magic has improved the book somehow...") - burnt_out = TRUE - I.pages_to_mastery-- - break - if(prob(80)) - L.visible_message("[I] catches fire!") - qdel(I) - else - I.used = FALSE - charged_item = I - break - else if(istype(item, /obj/item/gun/magic)) - var/obj/item/gun/magic/I = item - if(prob(80) && !I.can_charge) - I.max_charges-- - if(I.max_charges <= 0) - I.max_charges = 0 - burnt_out = TRUE - I.charges = I.max_charges - if(istype(item, /obj/item/gun/magic/wand) && I.max_charges != 0) - var/obj/item/gun/magic/W = item - W.icon_state = initial(W.icon_state) - I.recharge_newshot() - charged_item = I - break - else if(istype(item, /obj/item/stock_parts/cell)) - var/obj/item/stock_parts/cell/C = item - if(!C.self_recharge) - if(prob(80)) - C.maxcharge -= 200 - if(C.maxcharge <= 1) //Div by 0 protection - C.maxcharge = 1 - burnt_out = TRUE - C.charge = C.maxcharge - charged_item = C - break - else if(item.contents) - var/obj/I = null - for(I in item.contents) - if(istype(I, /obj/item/stock_parts/cell/)) - var/obj/item/stock_parts/cell/C = I - if(!C.self_recharge) - if(prob(80)) - C.maxcharge -= 200 - if(C.maxcharge <= 1) //Div by 0 protection - C.maxcharge = 1 - burnt_out = TRUE - C.charge = C.maxcharge - if(istype(C.loc, /obj/item/gun)) - var/obj/item/gun/G = C.loc - G.process_chamber() - item.update_icon() - charged_item = item - break - if(!charged_item) - to_chat(L, "I feel magical power surging through your hands, but the feeling rapidly fades...") - else if(burnt_out) - to_chat(L, "[charged_item] doesn't seem to be reacting to the spell!") - else - playsound(get_turf(L), 'sound/blank.ogg', 50, TRUE) - to_chat(L, "[charged_item] suddenly feels very warm!") diff --git a/code/modules/spells/spell_types/conjure.dm b/code/modules/spells/spell_types/conjure.dm index 66787bb222..d35343e444 100644 --- a/code/modules/spells/spell_types/conjure.dm +++ b/code/modules/spells/spell_types/conjure.dm @@ -47,14 +47,6 @@ /obj/effect/proc_holder/spell/aoe_turf/conjure/proc/post_summon(atom/summoned_object, mob/user) return -/obj/effect/proc_holder/spell/aoe_turf/conjure/summonEdSwarm //test purposes - Also a lot of fun - name = "Dispense Wizard Justice" - desc = "" - summon_type = list(/mob/living/simple_animal/bot/secbot/ed209) - summon_amt = 10 - range = 3 - newVars = list("emagged" = 2, "remote_disabled" = 1,"shoot_sound" = 'sound/blank.ogg',"projectile" = /obj/projectile/beam/laser, "declare_arrests" = 0,"name" = "Wizard's Justicebot") - /obj/effect/proc_holder/spell/aoe_turf/conjure/linkWorlds name = "Link Worlds" desc = "" diff --git a/code/modules/spells/spell_types/construct_spells.dm b/code/modules/spells/spell_types/construct_spells.dm index 3dd6db25fa..146eaf3db9 100644 --- a/code/modules/spells/spell_types/construct_spells.dm +++ b/code/modules/spells/spell_types/construct_spells.dm @@ -30,23 +30,6 @@ for(var/turf/T in targets) T.narsie_act(FALSE, TRUE, 100 - (get_dist(user, T) * 25)) - -/obj/effect/proc_holder/spell/aoe_turf/conjure/floor - name = "Summon Cult Floor" - desc = "" - - school = "conjuration" - charge_max = 20 - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - range = 0 - summon_type = list(/turf/open/floor/engine/cult) - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_icon_state = "floorconstruct" - action_background_icon_state = "bg_cult" - - /obj/effect/proc_holder/spell/aoe_turf/conjure/wall name = "Summon Cult Wall" desc = "" @@ -319,6 +302,6 @@ playsound(T, 'sound/blank.ogg', 100, FALSE) new /obj/effect/temp_visual/cult/sac(T) for(var/obj/O in range(src,1)) - if(O.density && !istype(O, /obj/structure/destructible/cult)) + if(O.density) O.take_damage(90, BRUTE, "melee", 0) new /obj/effect/temp_visual/cult/turf/floor(get_turf(O)) diff --git a/code/modules/spells/spell_types/mind_transfer.dm b/code/modules/spells/spell_types/mind_transfer.dm index ee5fdf695b..b9d4bc2364 100644 --- a/code/modules/spells/spell_types/mind_transfer.dm +++ b/code/modules/spells/spell_types/mind_transfer.dm @@ -61,7 +61,7 @@ Also, you never added distance checking after target is selected. I've went ahea return var/datum/mind/TM = target.mind - if((target.anti_magic_check(TRUE, FALSE) || TM.has_antag_datum(/datum/antagonist/wizard) || TM.has_antag_datum(/datum/antagonist/cult) || TM.has_antag_datum(/datum/antagonist/changeling) || TM.has_antag_datum(/datum/antagonist/rev)) || cmptext(copytext(target.key,1,2),"@")) + if((target.anti_magic_check(TRUE, FALSE) || TM.has_antag_datum(/datum/antagonist/wizard) || cmptext(copytext(target.key,1,2),"@"))) if(!silent) to_chat(user, "[target.p_their(TRUE)] mind is resisting your spell!") return diff --git a/code/modules/spells/spell_types/rightandwrong.dm b/code/modules/spells/spell_types/rightandwrong.dm index 32a836ca53..cb9ec826ef 100644 --- a/code/modules/spells/spell_types/rightandwrong.dm +++ b/code/modules/spells/spell_types/rightandwrong.dm @@ -4,15 +4,10 @@ #define SPECIALIST_MAGIC_PROB 2 GLOBAL_LIST_INIT(summoned_guns, list( - /obj/item/gun/energy/disabler, - /obj/item/gun/energy/e_gun, - /obj/item/gun/energy/e_gun/advtaser, - /obj/item/gun/energy/laser, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/detective, /obj/item/gun/ballistic/automatic/pistol/deagle/camo, /obj/item/gun/ballistic/automatic/gyropistol, - /obj/item/gun/energy/pulse, /obj/item/gun/ballistic/automatic/pistol/suppressed, /obj/item/gun/ballistic/shotgun/doublebarrel, /obj/item/gun/ballistic/shotgun, @@ -22,31 +17,17 @@ GLOBAL_LIST_INIT(summoned_guns, list( /obj/item/gun/ballistic/rifle/boltaction, /obj/item/pneumatic_cannon/speargun, /obj/item/gun/ballistic/automatic/mini_uzi, - /obj/item/gun/energy/lasercannon, - /obj/item/gun/energy/kinetic_accelerator/crossbow/large, - /obj/item/gun/energy/e_gun/nuclear, /obj/item/gun/ballistic/automatic/proto, /obj/item/gun/ballistic/automatic/c20r, /obj/item/gun/ballistic/automatic/l6_saw, /obj/item/gun/ballistic/automatic/m90, - /obj/item/gun/energy/alien, - /obj/item/gun/energy/e_gun/dragnet, - /obj/item/gun/energy/e_gun/turret, - /obj/item/gun/energy/pulse/carbine, - /obj/item/gun/energy/decloner, - /obj/item/gun/energy/mindflayer, - /obj/item/gun/energy/kinetic_accelerator, - /obj/item/gun/energy/plasmacutter/adv, - /obj/item/gun/energy/wormhole_projector, /obj/item/gun/ballistic/automatic/wt550, /obj/item/gun/ballistic/shotgun/bulldog, /obj/item/gun/ballistic/revolver/grenadelauncher, /obj/item/gun/ballistic/revolver/golden, /obj/item/gun/ballistic/automatic/sniper_rifle, /obj/item/gun/ballistic/rocketlauncher, - /obj/item/gun/medbeam, - /obj/item/gun/energy/laser/scatter, - /obj/item/gun/energy/gravity_gun)) + /obj/item/gun/medbeam)) //if you add anything that isn't covered by the typepaths below, add it to summon_magic_objective_types GLOBAL_LIST_INIT(summoned_magic, list( @@ -57,21 +38,17 @@ GLOBAL_LIST_INIT(summoned_magic, list( /obj/item/book/granter/spell/forcewall, /obj/item/book/granter/spell/knock, /obj/item/book/granter/spell/barnyard, - /obj/item/book/granter/spell/charge, /obj/item/book/granter/spell/summonitem, /obj/item/gun/magic/wand, /obj/item/gun/magic/wand/death, /obj/item/gun/magic/wand/resurrection, /obj/item/gun/magic/wand/polymorph, /obj/item/gun/magic/wand/teleport, - /obj/item/gun/magic/wand/door, /obj/item/gun/magic/wand/fireball, /obj/item/gun/magic/staff/healing, - /obj/item/gun/magic/staff/door, /obj/item/scrying, /obj/item/voodoo, /obj/item/warpwhistle, - /obj/item/clothing/suit/space/hardsuit/shielded/wizard, /obj/item/immortality_talisman, /obj/item/melee/ghost_sword)) @@ -88,7 +65,6 @@ GLOBAL_LIST_INIT(summoned_special_magic, list( GLOBAL_LIST_INIT(summoned_magic_objectives, list( /obj/item/antag_spawner/contract, /obj/item/blood_contract, - /obj/item/clothing/suit/space/hardsuit/shielded/wizard, /obj/item/gun/magic, /obj/item/immortality_talisman, /obj/item/melee/ghost_sword, diff --git a/code/modules/spells/spell_types/rod_form.dm b/code/modules/spells/spell_types/rod_form.dm deleted file mode 100644 index 71392a5ec3..0000000000 --- a/code/modules/spells/spell_types/rod_form.dm +++ /dev/null @@ -1,56 +0,0 @@ -/obj/effect/proc_holder/spell/targeted/rod_form - name = "Rod Form" - desc = "" - clothes_req = TRUE - human_req = FALSE - charge_max = 250 - cooldown_min = 100 - range = -1 - include_user = TRUE - invocation = "CLANG!" - invocation_type = "shout" - action_icon_state = "immrod" - -/obj/effect/proc_holder/spell/targeted/rod_form/cast(list/targets,mob/user = usr) - var/area/A = get_area(user) - if(istype(A, /area/wizard_station)) - to_chat(user, "I know better than to trash Wizard Federation property. Best wait until you leave to use [src].") - return - for(var/mob/living/M in targets) - var/turf/start = get_turf(M) - var/obj/effect/immovablerod/wizard/W = new(start, get_ranged_target_turf(start, M.dir, (15 + spell_level * 3))) - W.wizard = M - W.max_distance += spell_level * 3 //You travel farther when you upgrade the spell - W.damage_bonus += spell_level * 20 //You do more damage when you upgrade the spell - W.start_turf = start - M.forceMove(W) - M.notransform = TRUE - M.status_flags |= GODMODE - -//Wizard Version of the Immovable Rod - -/obj/effect/immovablerod/wizard - var/max_distance = 13 - var/damage_bonus = 0 - var/turf/start_turf - notify = FALSE - -/obj/effect/immovablerod/wizard/Move() - if(get_dist(start_turf, get_turf(src)) >= max_distance) - qdel(src) - ..() - -/obj/effect/immovablerod/wizard/Destroy() - if(wizard) - wizard.status_flags &= ~GODMODE - wizard.notransform = FALSE - wizard.forceMove(get_turf(src)) - return ..() - -/obj/effect/immovablerod/wizard/penetrate(mob/living/L) - if(L.anti_magic_check()) - L.visible_message("[src] hits [L], but it bounces back, then vanishes!" , "[src] hits you... but it bounces back, then vanishes!" , "I hear a weak, sad, CLANG.") - qdel(src) - return - L.visible_message("[L] is penetrated by an immovable rod!" , "The rod penetrates you!" , "I hear a CLANG!") - L.adjustBruteLoss(70 + damage_bonus) diff --git a/code/modules/spells/spell_types/shapeshift.dm b/code/modules/spells/spell_types/shapeshift.dm index 71220837c6..158a82a6c3 100644 --- a/code/modules/spells/spell_types/shapeshift.dm +++ b/code/modules/spells/spell_types/shapeshift.dm @@ -20,7 +20,6 @@ var/list/possible_shapes = list(/mob/living/simple_animal/mouse,\ /mob/living/simple_animal/pet/dog/corgi,\ /mob/living/simple_animal/hostile/carp/ranged/chaos,\ - /mob/living/simple_animal/bot/secbot/ed209,\ /mob/living/simple_animal/hostile/poison/giant_spider/hunter/viper,\ /mob/living/simple_animal/hostile/construct/armored) diff --git a/code/modules/spells/spell_types/spacetime_distortion.dm b/code/modules/spells/spell_types/spacetime_distortion.dm index 4901d5728b..7e5ed52039 100644 --- a/code/modules/spells/spell_types/spacetime_distortion.dm +++ b/code/modules/spells/spell_types/spacetime_distortion.dm @@ -49,7 +49,7 @@ STD0.add_overlay(T1.photograph()) STD1.linked_dist = STD0 STD1.add_overlay(T0.photograph()) - STD1.set_light(4, 30, "#c9fff5") + STD1.set_light(4, 3, 30,l_color = "#c9fff5") effects += STD0 effects += STD1 diff --git a/code/modules/spells/spell_types/summonitem.dm b/code/modules/spells/spell_types/summonitem.dm index 935aef04fa..28139778ca 100644 --- a/code/modules/spells/spell_types/summonitem.dm +++ b/code/modules/spells/spell_types/summonitem.dm @@ -69,13 +69,6 @@ break if(ismob(item_to_retrieve.loc)) //If its on someone, properly drop it var/mob/M = item_to_retrieve.loc - - if(issilicon(M)) //Items in silicons warp the whole silicon - M.loc.visible_message("[M] suddenly disappears!") - M.forceMove(L.loc) - M.loc.visible_message("[M] suddenly appears!") - item_to_retrieve = null - break M.dropItemToGround(item_to_retrieve) if(iscarbon(M)) //Edge case housekeeping diff --git a/code/modules/spells/spell_types/wizard.dm b/code/modules/spells/spell_types/wizard.dm index b20b9022c9..b9b5e11886 100644 --- a/code/modules/spells/spell_types/wizard.dm +++ b/code/modules/spells/spell_types/wizard.dm @@ -39,7 +39,7 @@ trail = TRUE trail_lifespan = 5 light_color = "#f407f8" - light_range = 2 + light_outer_range = 2 /obj/projectile/magic/spell/magic_missile/on_hit(target) @@ -296,6 +296,7 @@ var/repulse_force = MOVE_FORCE_EXTREMELY_STRONG /obj/effect/proc_holder/spell/aoe_turf/repulse/cast(list/targets,mob/user = usr, stun_amt = 5) + . = ..() var/list/thrownatoms = list() var/atom/throwtarget var/distfromcaster @@ -368,6 +369,7 @@ sound = 'sound/blank.ogg' /obj/effect/proc_holder/spell/targeted/sacred_flame/cast(list/targets, mob/user = usr) + . = ..() for(var/mob/living/L in targets) if(L.anti_magic_check(TRUE, TRUE)) continue @@ -386,7 +388,7 @@ action_icon_state = "thrownlightning" /obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket/cast(list/targets, mob/user = usr) - ..() + . = ..() for(var/mob/living/carbon/C in targets) C.throw_mode_on() diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm deleted file mode 100644 index a4d54acc50..0000000000 --- a/code/modules/station_goals/bsa.dm +++ /dev/null @@ -1,334 +0,0 @@ -// Crew has to build a bluespace cannon -// Cargo orders part for high price -// Requires high amount of power -// Requires high level stock parts -/datum/station_goal/bluespace_cannon - name = "Bluespace Artillery" - -/datum/station_goal/bluespace_cannon/get_report() - return {"Our military presence is inadequate in your sector. - We need you to construct BSA-[rand(1,99)] Artillery position aboard your station. - - Base parts are available for shipping via cargo. - -Nanotrasen Naval Command"} - -/datum/station_goal/bluespace_cannon/on_report() - //Unlock BSA parts -// var/datum/supply_pack/engineering/bsa/P = SSshuttle.supply_packs[/datum/supply_pack/engineering/bsa] -// P.special_enabled = TRUE - -/datum/station_goal/bluespace_cannon/check_completion() - if(..()) - return TRUE - var/obj/machinery/bsa/full/B = locate() - if(B && !B.stat) - return TRUE - return FALSE - -/obj/machinery/bsa - icon = 'icons/obj/machines/particle_accelerator.dmi' - density = TRUE - anchored = TRUE - -/obj/machinery/bsa/wrench_act(mob/living/user, obj/item/I) - ..() - default_unfasten_wrench(user, I, 10) - return TRUE - -/obj/machinery/bsa/back - name = "Bluespace Artillery Generator" - desc = "" - icon_state = "power_box" - -/obj/machinery/bsa/back/multitool_act(mob/living/user, obj/item/I) - if(!multitool_check_buffer(user, I)) //make sure it has a data buffer - return - var/obj/item/multitool/M = I - M.buffer = src - to_chat(user, "I store linkage information in [I]'s buffer.") - return TRUE - -/obj/machinery/bsa/front - name = "Bluespace Artillery Bore" - desc = "" - icon_state = "emitter_center" - -/obj/machinery/bsa/front/multitool_act(mob/living/user, obj/item/I) - if(!multitool_check_buffer(user, I)) //make sure it has a data buffer - return - var/obj/item/multitool/M = I - M.buffer = src - to_chat(user, "I store linkage information in [I]'s buffer.") - return TRUE - -/obj/machinery/bsa/middle - name = "Bluespace Artillery Fusor" - desc = "" - icon_state = "fuel_chamber" - var/obj/machinery/bsa/back/back - var/obj/machinery/bsa/front/front - -/obj/machinery/bsa/middle/multitool_act(mob/living/user, obj/item/I) - if(!multitool_check_buffer(user, I)) - return - var/obj/item/multitool/M = I - if(M.buffer) - if(istype(M.buffer, /obj/machinery/bsa/back)) - back = M.buffer - M.buffer = null - to_chat(user, "I link [src] with [back].") - else if(istype(M.buffer, /obj/machinery/bsa/front)) - front = M.buffer - M.buffer = null - to_chat(user, "I link [src] with [front].") - else - to_chat(user, "[I]'s data buffer is empty!") - return TRUE - -/obj/machinery/bsa/middle/proc/check_completion() - if(!front || !back) - return "No linked parts detected!" - if(!front.anchored || !back.anchored || !anchored) - return "Linked parts unwrenched!" - if(front.y != y || back.y != y || !(front.x > x && back.x < x || front.x < x && back.x > x) || front.z != z || back.z != z) - return "Parts misaligned!" - if(!has_space()) - return "Not enough free space!" - -/obj/machinery/bsa/middle/proc/has_space() - var/cannon_dir = get_cannon_direction() - var/x_min - var/x_max - switch(cannon_dir) - if(EAST) - x_min = x - 4 //replace with defines later - x_max = x + 6 - if(WEST) - x_min = x + 4 - x_max = x - 6 - - for(var/turf/T in block(locate(x_min,y-1,z),locate(x_max,y+1,z))) - if(T.density || isspaceturf(T)) - return FALSE - return TRUE - -/obj/machinery/bsa/middle/proc/get_cannon_direction() - if(front.x > x && back.x < x) - return EAST - else if(front.x < x && back.x > x) - return WEST - - -/obj/machinery/bsa/full - name = "Bluespace Artillery" - desc = "" - icon = 'icons/obj/lavaland/cannon.dmi' - icon_state = "orbital_cannon1" - var/static/mutable_appearance/top_layer - var/ex_power = 3 - var/power_used_per_shot = 2000000 //enough to kil standard apc - todo : make this use wires instead and scale explosion power with it - var/ready - pixel_y = -32 - pixel_x = -192 - bound_width = 352 - bound_x = -192 - appearance_flags = NONE //Removes default TILE_BOUND - -/obj/machinery/bsa/full/wrench_act(mob/living/user, obj/item/I) - return FALSE - -/obj/machinery/bsa/full/proc/get_front_turf() - switch(dir) - if(WEST) - return locate(x - 7,y,z) - if(EAST) - return locate(x + 4,y,z) - return get_turf(src) - -/obj/machinery/bsa/full/proc/get_back_turf() - switch(dir) - if(WEST) - return locate(x + 4,y,z) - if(EAST) - return locate(x - 6,y,z) - return get_turf(src) - -/obj/machinery/bsa/full/proc/get_target_turf() - switch(dir) - if(WEST) - return locate(1,y,z) - if(EAST) - return locate(world.maxx,y,z) - return get_turf(src) - -/obj/machinery/bsa/full/Initialize(mapload, cannon_direction = WEST) - . = ..() - top_layer = top_layer || mutable_appearance(icon, layer = ABOVE_MOB_LAYER) - switch(cannon_direction) - if(WEST) - setDir(WEST) - pixel_x = -192 - top_layer.icon_state = "top_west" - icon_state = "cannon_west" - if(EAST) - setDir(EAST) - top_layer.icon_state = "top_east" - icon_state = "cannon_east" - add_overlay(top_layer) - reload() - -/obj/machinery/bsa/full/proc/fire(mob/user, turf/bullseye) - reload() - - var/turf/point = get_front_turf() - var/turf/target = get_target_turf() - var/atom/movable/blocker - for(var/T in getline(get_step(point, dir), target)) - var/turf/tile = T - if(SEND_SIGNAL(tile, COMSIG_ATOM_BSA_BEAM) & COMSIG_ATOM_BLOCKS_BSA_BEAM) - blocker = tile - else - for(var/AM in tile) - var/atom/movable/stuff = AM - if(SEND_SIGNAL(stuff, COMSIG_ATOM_BSA_BEAM) & COMSIG_ATOM_BLOCKS_BSA_BEAM) - blocker = stuff - break - if(blocker) - target = tile - break - else - tile.ex_act(EXPLODE_DEVASTATE) //also fucks everything else on the turf - - point.Beam(target, icon_state = "bsa_beam", time = 50, maxdistance = world.maxx) //ZZZAP - new /obj/effect/temp_visual/bsa_splash(point, dir) - - if(!blocker) - message_admins("[ADMIN_LOOKUPFLW(user)] has launched an artillery strike targeting [ADMIN_VERBOSEJMP(bullseye)].") - log_game("[key_name(user)] has launched an artillery strike targeting [AREACOORD(bullseye)].") - explosion(bullseye, ex_power, ex_power*2, ex_power*4) - else - message_admins("[ADMIN_LOOKUPFLW(user)] has launched an artillery strike targeting [ADMIN_VERBOSEJMP(bullseye)] but it was blocked by [blocker] at [ADMIN_VERBOSEJMP(target)].") - log_game("[key_name(user)] has launched an artillery strike targeting [AREACOORD(bullseye)] but it was blocked by [blocker] at [AREACOORD(target)].") - - -/obj/machinery/bsa/full/proc/reload() - ready = FALSE - use_power(power_used_per_shot) - addtimer(CALLBACK(src,"ready_cannon"),600) - -/obj/machinery/bsa/full/proc/ready_cannon() - ready = TRUE - -/obj/structure/filler - name = "big machinery part" - density = TRUE - anchored = TRUE - invisibility = INVISIBILITY_ABSTRACT - var/obj/machinery/parent - -/obj/structure/filler/ex_act() - return - -/obj/machinery/computer/bsa_control - name = "bluespace artillery control" - use_power = NO_POWER_USE - circuit = /obj/item/circuitboard/computer/bsa_control - icon = 'icons/obj/machines/particle_accelerator.dmi' - icon_state = "control_boxp" - ui_x = 400 - ui_y = 220 - - var/obj/machinery/bsa/full/cannon - var/notice - var/target - var/area_aim = FALSE //should also show areas for targeting - -/obj/machinery/computer/bsa_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "bsa", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/computer/bsa_control/ui_data() - var/list/data = list() - data["ready"] = cannon ? cannon.ready : FALSE - data["connected"] = cannon - data["notice"] = notice - data["unlocked"] = GLOB.bsa_unlock - if(target) - data["target"] = get_target_name() - return data - -/obj/machinery/computer/bsa_control/ui_act(action, params) - if(..()) - return - switch(action) - if("build") - cannon = deploy() - . = TRUE - if("fire") - fire(usr) - . = TRUE - if("recalibrate") - calibrate(usr) - . = TRUE - update_icon() - -/obj/machinery/computer/bsa_control/proc/calibrate(mob/user) - if(!GLOB.bsa_unlock) - return - var/list/gps_locators = list() - for(var/datum/component/gps/G in GLOB.GPS_list) //nulls on the list somehow - if(G.tracking) - gps_locators[G.gpstag] = G - - var/list/options = gps_locators - if(area_aim) - options += GLOB.teleportlocs - var/V = input(user,"Select target", "Select target",null) in options|null - target = options[V] - - -/obj/machinery/computer/bsa_control/proc/get_target_name() - if(istype(target, /area)) - return get_area_name(target, TRUE) - else if(istype(target, /datum/component/gps)) - var/datum/component/gps/G = target - return G.gpstag - -/obj/machinery/computer/bsa_control/proc/get_impact_turf() - if(istype(target, /area)) - return pick(get_area_turfs(target)) - else if(istype(target, /datum/component/gps)) - var/datum/component/gps/G = target - return get_turf(G.parent) - -/obj/machinery/computer/bsa_control/proc/fire(mob/user) - if(cannon.stat) - notice = "Cannon unpowered!" - return - notice = null - cannon.fire(user, get_impact_turf()) - -/obj/machinery/computer/bsa_control/proc/deploy(force=FALSE) - var/obj/machinery/bsa/full/prebuilt = locate() in range(7) //In case of adminspawn - if(prebuilt) - return prebuilt - - var/obj/machinery/bsa/middle/centerpiece = locate() in range(7) - if(!centerpiece) - notice = "No BSA parts detected nearby." - return null - notice = centerpiece.check_completion() - if(notice) - return null - //Totally nanite construction system not an immersion breaking spawning - var/datum/effect_system/smoke_spread/s = new - s.set_up(4,get_turf(centerpiece)) - s.start() - var/obj/machinery/bsa/full/cannon = new(get_turf(centerpiece),centerpiece.get_cannon_direction()) - qdel(centerpiece.front) - qdel(centerpiece.back) - qdel(centerpiece) - return cannon diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm deleted file mode 100644 index a7e384ac4e..0000000000 --- a/code/modules/station_goals/dna_vault.dm +++ /dev/null @@ -1,286 +0,0 @@ -//Crew has to create dna vault -// Cargo can order DNA samplers + DNA vault boards -// DNA vault requires x animals ,y plants, z human dna -// DNA vaults require high tier stock parts and cold -// After completion each crewmember can receive single upgrade chosen out of 2 for the mob. -#define VAULT_TOXIN "Toxin Adaptation" -#define VAULT_NOBREATH "Lung Enhancement" -#define VAULT_FIREPROOF "Thermal Regulation" -#define VAULT_STUNTIME "Neural Repathing" -#define VAULT_ARMOUR "Bone Reinforcement" -#define VAULT_SPEED "Leg Muscle Stimulus" -#define VAULT_QUICK "Arm Muscle Stimulus" - -/datum/station_goal/dna_vault - name = "DNA Vault" - var/animal_count - var/human_count - var/plant_count - -/datum/station_goal/dna_vault/New() - ..() - animal_count = rand(15,20) //might be too few given ~15 roundstart stationside ones - human_count = rand(round(0.75 * SSticker.totalPlayersReady) , SSticker.totalPlayersReady) // 75%+ roundstart population. - var/non_standard_plants = non_standard_plants_count() - plant_count = rand(round(0.5 * non_standard_plants),round(0.7 * non_standard_plants)) - -/datum/station_goal/dna_vault/proc/non_standard_plants_count() - . = 0 - for(var/T in subtypesof(/obj/item/seeds)) //put a cache if it's used anywhere else - var/obj/item/seeds/S = T - if(initial(S.rarity) > 0) - .++ - -/datum/station_goal/dna_vault/get_report() - return {"Our long term prediction systems indicate a 99% chance of system-wide cataclysm in the near future. - We need you to construct a DNA Vault aboard my station. - - The DNA Vault needs to contain samples of: - [animal_count] unique animal data - [plant_count] unique non-standard plant data - [human_count] unique sapient humanoid DNA data - - Base vault parts are available for shipping via cargo."} - - -/datum/station_goal/dna_vault/on_report() -// var/datum/supply_pack/P = SSshuttle.supply_packs[/datum/supply_pack/engineering/dna_vault] -// P.special_enabled = TRUE - -// P = SSshuttle.supply_packs[/datum/supply_pack/engineering/dna_probes] -// P.special_enabled = TRUE - -/datum/station_goal/dna_vault/check_completion() - if(..()) - return TRUE - for(var/obj/machinery/dna_vault/V in GLOB.machines) - if(V.animals.len >= animal_count && V.plants.len >= plant_count && V.dna.len >= human_count) - return TRUE - return FALSE - - -/obj/item/dna_probe - name = "DNA Sampler" - desc = "" - icon = 'icons/obj/syringe.dmi' - item_state = "hypo" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - icon_state = "hypo" - item_flags = NOBLUDGEON - var/list/animals = list() - var/list/plants = list() - var/list/dna = list() - -/obj/item/dna_probe/proc/clear_data() - animals = list() - plants = list() - dna = list() - -/obj/item/dna_probe/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity || !target) - return - //tray plants - if(istype(target, /obj/machinery/hydroponics)) - var/obj/machinery/hydroponics/H = target - if(!H.myseed) - return - if(!H.harvest)// So it's bit harder. - to_chat(user, "Plant needs to be ready to harvest to perform full data scan.") //Because space dna is actually magic - return - if(plants[H.myseed.type]) - to_chat(user, "Plant data already present in local storage.") - return - plants[H.myseed.type] = 1 - to_chat(user, "Plant data added to local storage.") - - //animals - var/static/list/non_simple_animals = typecacheof(list(/mob/living/carbon/monkey, /mob/living/carbon/alien)) - if(isanimal(target) || is_type_in_typecache(target,non_simple_animals)) - if(isanimal(target)) - var/mob/living/simple_animal/A = target - if(!A.healable)//simple approximation of being animal not a robot or similar - to_chat(user, "No compatible DNA detected.") - return - if(animals[target.type]) - to_chat(user, "Animal data already present in local storage.") - return - animals[target.type] = 1 - to_chat(user, "Animal data added to local storage.") - - //humans - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(dna[H.dna.uni_identity]) - to_chat(user, "Humanoid data already present in local storage.") - return - dna[H.dna.uni_identity] = 1 - to_chat(user, "Humanoid data added to local storage.") - -/obj/machinery/dna_vault - name = "DNA Vault" - desc = "" - icon = 'icons/obj/machines/dna_vault.dmi' - icon_state = "vault" - density = TRUE - anchored = TRUE - idle_power_usage = 5000 - pixel_x = -32 - pixel_y = -64 - light_range = 3 - light_power = 1.5 - light_color = LIGHT_COLOR_CYAN - ui_x = 350 - ui_y = 400 - - - //High defaults so it's not completed automatically if there's no station goal - var/animals_max = 100 - var/plants_max = 100 - var/dna_max = 100 - var/list/animals = list() - var/list/plants = list() - var/list/dna = list() - - var/completed = FALSE - var/list/power_lottery = list() - - var/list/obj/structure/fillers = list() - -/obj/machinery/dna_vault/Initialize() - //TODO: Replace this,bsa and gravgen with some big machinery datum - var/list/occupied = list() - for(var/direct in list(EAST,WEST,SOUTHEAST,SOUTHWEST)) - occupied += get_step(src,direct) - occupied += locate(x+1,y-2,z) - occupied += locate(x-1,y-2,z) - - for(var/T in occupied) - var/obj/structure/filler/F = new(T) - F.parent = src - fillers += F - - if(SSticker.mode) - for(var/datum/station_goal/dna_vault/G in SSticker.mode.station_goals) - animals_max = G.animal_count - plants_max = G.plant_count - dna_max = G.human_count - break - . = ..() - -/obj/machinery/dna_vault/Destroy() - for(var/V in fillers) - var/obj/structure/filler/filler = V - filler.parent = null - qdel(filler) - . = ..() - - -/obj/machinery/dna_vault/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - roll_powers(user) - ui = new(user, src, ui_key, "dna_vault", name, ui_x, ui_y, master_ui, state) - ui.open() - - -/obj/machinery/dna_vault/proc/roll_powers(mob/user) - if(user in power_lottery) - return - var/list/L = list() - var/list/possible_powers = list(VAULT_TOXIN,VAULT_NOBREATH,VAULT_FIREPROOF,VAULT_STUNTIME,VAULT_ARMOUR,VAULT_SPEED,VAULT_QUICK) - L += pick_n_take(possible_powers) - L += pick_n_take(possible_powers) - power_lottery[user] = L - -/obj/machinery/dna_vault/ui_data(mob/user) //TODO Make it % bars maybe - var/list/data = list() - data["plants"] = plants.len - data["plants_max"] = plants_max - data["animals"] = animals.len - data["animals_max"] = animals_max - data["dna"] = dna.len - data["dna_max"] = dna_max - data["completed"] = completed - data["used"] = TRUE - data["choiceA"] = "" - data["choiceB"] = "" - if(user && completed) - var/list/L = power_lottery[user] - if(L && L.len) - data["used"] = FALSE - data["choiceA"] = L[1] - data["choiceB"] = L[2] - return data - -/obj/machinery/dna_vault/ui_act(action, params) - if(..()) - return - switch(action) - if("gene") - upgrade(usr,params["choice"]) - . = TRUE - -/obj/machinery/dna_vault/proc/check_goal() - if(plants.len >= plants_max && animals.len >= animals_max && dna.len >= dna_max) - completed = TRUE - - -/obj/machinery/dna_vault/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/dna_probe)) - var/obj/item/dna_probe/P = I - var/uploaded = 0 - for(var/plant in P.plants) - if(!plants[plant]) - uploaded++ - plants[plant] = 1 - for(var/animal in P.animals) - if(!animals[animal]) - uploaded++ - animals[animal] = 1 - for(var/ui in P.dna) - if(!dna[ui]) - uploaded++ - dna[ui] = 1 - check_goal() - to_chat(user, "[uploaded] new datapoints uploaded.") - else - return ..() - - - -/obj/machinery/dna_vault/proc/upgrade(mob/living/carbon/human/H,upgrade_type) - if(!(upgrade_type in power_lottery[H])) - return - var/datum/species/S = H.dna.species - switch(upgrade_type) - if(VAULT_TOXIN) - to_chat(H, "I feel resistant to airborne toxins.") - if(locate(/obj/item/organ/lungs) in H.internal_organs) - var/obj/item/organ/lungs/L = H.internal_organs_slot[ORGAN_SLOT_LUNGS] - L.tox_breath_dam_min = 0 - L.tox_breath_dam_max = 0 - ADD_TRAIT(H, TRAIT_VIRUSIMMUNE, "dna_vault") - if(VAULT_NOBREATH) - to_chat(H, "My lungs feel great.") - ADD_TRAIT(H, TRAIT_NOBREATH, "dna_vault") - if(VAULT_FIREPROOF) - to_chat(H, "I feel fireproof.") - S.burnmod = 0.5 - ADD_TRAIT(H, TRAIT_RESISTHEAT, "dna_vault") - ADD_TRAIT(H, TRAIT_NOFIRE, "dna_vault") - if(VAULT_STUNTIME) - to_chat(H, "Nothing can keep you down for long.") - S.stunmod = 0.5 - if(VAULT_ARMOUR) - to_chat(H, "I feel tough.") - S.armor = 30 - ADD_TRAIT(H, TRAIT_PIERCEIMMUNE, "dna_vault") - if(VAULT_SPEED) - to_chat(H, "My legs feel faster.") - H.add_movespeed_modifier(MOVESPEED_ID_DNA_VAULT, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING)) - if(VAULT_QUICK) - to_chat(H, "My arms move as fast as lightning.") - H.next_move_modifier = 0.5 - power_lottery[H] = list() diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm deleted file mode 100644 index c05cd2cef9..0000000000 --- a/code/modules/station_goals/shield.dm +++ /dev/null @@ -1,182 +0,0 @@ -//Station Shield -// A chain of satellites encircles the station -// Satellites be actived to generate a shield that will block unorganic matter from passing it. -/datum/station_goal/station_shield - name = "Station Shield" - var/coverage_goal = 500 - -/datum/station_goal/station_shield/get_report() - return {"The station is located in a zone full of space debris. - We have a prototype shielding system you must deploy to reduce collision-related accidents. - - You can order the satellites and control systems at cargo. - "} - - -/datum/station_goal/station_shield/on_report() - //Unlock -// var/datum/supply_pack/P = SSshuttle.supply_packs[/datum/supply_pack/engineering/shield_sat] -// P.special_enabled = TRUE - -// P = SSshuttle.supply_packs[/datum/supply_pack/engineering/shield_sat_control] -// P.special_enabled = TRUE - -/datum/station_goal/station_shield/check_completion() - if(..()) - return TRUE - if(get_coverage() >= coverage_goal) - return TRUE - return FALSE - -/datum/station_goal/proc/get_coverage() - var/list/coverage = list() - for(var/obj/machinery/satellite/meteor_shield/A in GLOB.machines) - if(!A.active || !is_station_level(A.z)) - continue - coverage |= view(A.kill_range,A) - return coverage.len - -/obj/machinery/computer/sat_control - name = "satellite control" - desc = "" - circuit = /obj/item/circuitboard/computer/sat_control - ui_x = 400 - ui_y = 305 - - var/notice - -/obj/machinery/computer/sat_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "sat_control", name, ui_x, ui_y, master_ui, state) - ui.open() - -/obj/machinery/computer/sat_control/ui_act(action, params) - if(..()) - return - switch(action) - if("toggle") - toggle(text2num(params["id"])) - . = TRUE - -/obj/machinery/computer/sat_control/proc/toggle(id) - for(var/obj/machinery/satellite/S in GLOB.machines) - if(S.id == id && S.z == z) - S.toggle() - -/obj/machinery/computer/sat_control/ui_data() - var/list/data = list() - - data["satellites"] = list() - for(var/obj/machinery/satellite/S in GLOB.machines) - data["satellites"] += list(list( - "id" = S.id, - "active" = S.active, - "mode" = S.mode - )) - data["notice"] = notice - - - var/datum/station_goal/station_shield/G = locate() in SSticker.mode.station_goals - if(G) - data["meteor_shield"] = 1 - data["meteor_shield_coverage"] = G.get_coverage() - data["meteor_shield_coverage_max"] = G.coverage_goal - return data - - -/obj/machinery/satellite - name = "\improper Defunct Satellite" - desc = "" - icon = 'icons/obj/machines/satellite.dmi' - icon_state = "sat_inactive" - anchored = FALSE - density = TRUE - use_power = FALSE - var/mode = "NTPROBEV0.8" - var/active = FALSE - var/static/gid = 0 - var/id = 0 - -/obj/machinery/satellite/Initialize() - . = ..() - id = gid++ - -/obj/machinery/satellite/interact(mob/user) - toggle(user) - -/obj/machinery/satellite/proc/toggle(mob/user) - if(!active && !isinspace()) - if(user) - to_chat(user, "I can only activate [src] in space.") - return FALSE - if(user) - to_chat(user, "I [active ? "deactivate": "activate"] [src].") - active = !active - if(active) - animate(src, pixel_y = 2, time = 10, loop = -1) - anchored = TRUE - else - animate(src, pixel_y = 0, time = 10) - anchored = FALSE - update_icon() - -/obj/machinery/satellite/update_icon() - icon_state = active ? "sat_active" : "sat_inactive" - -/obj/machinery/satellite/multitool_act(mob/living/user, obj/item/I) - ..() - to_chat(user, "// NTSAT-[id] // Mode : [active ? "PRIMARY" : "STANDBY"] //[(obj_flags & EMAGGED) ? "DEBUG_MODE //" : ""]") - return TRUE - -/obj/machinery/satellite/meteor_shield - name = "\improper Meteor Shield Satellite" - desc = "" - mode = "M-SHIELD" - speed_process = TRUE - var/kill_range = 14 - -/obj/machinery/satellite/meteor_shield/proc/space_los(meteor) - for(var/turf/T in getline(src,meteor)) - if(!isspaceturf(T)) - return FALSE - return TRUE - -/obj/machinery/satellite/meteor_shield/process() - if(!active) - return - for(var/obj/effect/meteor/M in GLOB.meteor_list) - if(M.z != z) - continue - if(get_dist(M,src) > kill_range) - continue - if(!(obj_flags & EMAGGED) && space_los(M)) - Beam(get_turf(M),icon_state="sat_beam",time=5,maxdistance=kill_range) - qdel(M) - -/obj/machinery/satellite/meteor_shield/toggle(user) - if(!..(user)) - return FALSE - if(obj_flags & EMAGGED) - if(active) - change_meteor_chance(2) - else - change_meteor_chance(0.5) - -/obj/machinery/satellite/meteor_shield/proc/change_meteor_chance(mod) - var/datum/round_event_control/E = locate(/datum/round_event_control/meteor_wave) in SSevents.control - if(E) - E.weight *= mod - -/obj/machinery/satellite/meteor_shield/Destroy() - . = ..() - if(active && (obj_flags & EMAGGED)) - change_meteor_chance(0.5) - -/obj/machinery/satellite/meteor_shield/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - obj_flags |= EMAGGED - to_chat(user, "I access the satellite's debug mode, increasing the chance of meteor strikes.") - if(active) - change_meteor_chance(2) diff --git a/code/modules/station_goals/station_goal.dm b/code/modules/station_goals/station_goal.dm deleted file mode 100644 index 4663eb9d5f..0000000000 --- a/code/modules/station_goals/station_goal.dm +++ /dev/null @@ -1,64 +0,0 @@ -//TODO -// Admin button to override with your own -// Sabotage objective for tators -// Multiple goals with less impact but more department focused - -/datum/station_goal - var/name = "Generic Goal" - var/weight = 1 //In case of multiple goals later. - var/required_crew = 10 - var/list/gamemode_blacklist = list() - var/completed = FALSE - var/report_message = "Complete this goal." - -/datum/station_goal/proc/send_report() - priority_announce("Priority Nanotrasen directive received. Project \"[name]\" details inbound.", "Incoming Priority Message", 'sound/blank.ogg') - print_command_report(get_report(),"Nanotrasen Directive [pick(GLOB.phonetic_alphabet)] \Roman[rand(1,50)]", announce=FALSE) - on_report() - -/datum/station_goal/proc/on_report() - //Additional unlocks/changes go here - return - -/datum/station_goal/proc/get_report() - return report_message - -/datum/station_goal/proc/check_completion() - return completed - -/datum/station_goal/proc/get_result() - if(check_completion()) - return "
  • [name] : Completed!
  • " - else - return "
  • [name] : Failed!
  • " - -/datum/station_goal/Destroy() - SSticker.mode.station_goals -= src - . = ..() - -/datum/station_goal/Topic(href, href_list) - ..() - - if(!check_rights(R_ADMIN) || !usr.client.holder.CheckAdminHref(href, href_list)) - return - - if(href_list["announce"]) - on_report() - send_report() - else if(href_list["remove"]) - qdel(src) - -/* -//Crew has to create alien intelligence detector -// Requires a lot of minerals -// Dish requires a lot of power -// Needs five? AI's for decoding purposes -/datum/station_goal/seti - name = "SETI Project" - -//Crew Sweep -//Blood samples and special scans of amount of people on roundstart manifest. -//Should keep sec busy. -//Maybe after completion you'll get some ling detecting gear or some station wide DNA scan ? - -*/ diff --git a/code/modules/surgery/_surgery_step.dm b/code/modules/surgery/_surgery_step.dm index 47111b48d9..2925995579 100644 --- a/code/modules/surgery/_surgery_step.dm +++ b/code/modules/surgery/_surgery_step.dm @@ -117,36 +117,6 @@ if(!requires_tech && !replaced_by) return TRUE - if(iscyborg(user)) - var/mob/living/silicon/robot/robot = user - var/obj/item/surgical_processor/surgical_processor = locate() in robot.module?.modules - // No early return for !surgical_processor since we want to check optable should this not exist. - if(surgical_processor) - if(replaced_by in surgical_processor.advanced_surgery_steps) - return FALSE - if(type in surgical_processor.advanced_surgery_steps) - return TRUE - - var/turf/target_turf = get_turf(target) - - // Get the relevant operating computer - var/obj/machinery/computer/operating/opcomputer - var/obj/structure/table/optable/table = locate(/obj/structure/table/optable) in target_turf - if(table?.computer) - opcomputer = table.computer - else - var/obj/machinery/stasis/the_stasis_bed = locate(/obj/machinery/stasis) in target_turf - if(the_stasis_bed?.op_computer) - opcomputer = the_stasis_bed.op_computer - - if(!opcomputer || (opcomputer.stat & (NOPOWER | BROKEN))) - if(!requires_tech) - return TRUE - return FALSE - if(replaced_by in opcomputer.advanced_surgery_steps) - return FALSE - if(!(type in opcomputer.advanced_surgery_steps)) - return FALSE return TRUE /datum/surgery_step/proc/validate_user(mob/user, mob/living/target, target_zone, datum/intent/intent) @@ -236,7 +206,7 @@ /datum/surgery_step/proc/tool_check(mob/user, obj/item/tool) SHOULD_CALL_PARENT(TRUE) var/implement_type = FALSE - if(accept_hand && (!tool || iscyborg(user))) + if(accept_hand && (!tool)) implement_type = TOOL_HAND if(tool) @@ -310,7 +280,7 @@ return FALSE LAZYREMOVE(target.surgeries, target_zone) - var/success = !try_to_fail && ((iscyborg(user) && !silicons_obey_prob) || prob(success_prob)) && chem_check(target) + var/success = !try_to_fail && (prob(success_prob)) && chem_check(target) if(success && success(user, target, target_zone, tool, intent)) if(repeating && can_do_step(user, target, target_zone, tool, intent, try_to_fail)) initiate(user, target, target_zone, tool, intent, try_to_fail) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 6485f66f44..3f8c9eb6be 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -118,6 +118,9 @@ /obj/item/bodypart/onbite(mob/living/carbon/human/user) if((user.mind && user.mind.has_antag_datum(/datum/antagonist/zombie)) || istype(user.dna.species, /datum/species/werewolf)) + if(user.has_status_effect(/datum/status_effect/debuff/silver_curse)) + to_chat(user, span_notice("My power is weakened, I cannot heal!")) + return if(do_after(user, 50, target = src)) user.visible_message("[user] consumes [src]!",\ "I consume [src]!") @@ -271,10 +274,6 @@ if(!brute && !burn && !stamina) return FALSE - switch(animal_origin) - if(ALIEN_BODYPART,LARVA_BODYPART) //aliens take double burn //nothing can burn with so much snowflake code around - burn *= 2 - //cap at maxdamage if(brute_dam + brute > max_damage) brute_dam = max_damage @@ -595,7 +594,7 @@ return if(disabled == BODYPART_DISABLED_DAMAGE || disabled == BODYPART_DISABLED_WOUND) if(owner.stat < DEAD) - to_chat(owner, "I feel a sharp pain in my back!") + to_chat(owner, span_warning("I feel a sharp pain in my back!")) /obj/item/bodypart/chest/Destroy() QDEL_NULL(cavity_item) @@ -612,25 +611,11 @@ icon_state = "default_monkey_chest" animal_origin = MONKEY_BODYPART -/obj/item/bodypart/chest/alien - icon = 'icons/mob/animal_parts.dmi' - icon_state = "alien_chest" - dismemberable = 0 - max_damage = 500 - animal_origin = ALIEN_BODYPART - /obj/item/bodypart/chest/devil dismemberable = 0 max_damage = 5000 animal_origin = DEVIL_BODYPART -/obj/item/bodypart/chest/larva - icon = 'icons/mob/animal_parts.dmi' - icon_state = "larva_chest" - dismemberable = 0 - max_damage = 50 - animal_origin = LARVA_BODYPART - /obj/item/bodypart/l_arm name = "left arm" desc = "" @@ -663,12 +648,12 @@ return if(disabled == BODYPART_DISABLED_DAMAGE || disabled == BODYPART_DISABLED_WOUND) if(owner.stat < DEAD) - to_chat(owner, "I can no longer move my [name]!") + to_chat(owner, span_boldwarning("I can no longer move my [name]!")) if(held_index) owner.dropItemToGround(owner.get_item_for_held_index(held_index)) else if(disabled == BODYPART_DISABLED_PARALYSIS) if(owner.stat < DEAD) - to_chat(owner, "I can no longer feel my [name].") + to_chat(owner, span_danger("I can no longer feel my [name].")) if(held_index) owner.dropItemToGround(owner.get_item_for_held_index(held_index)) if(owner.hud_used) @@ -683,14 +668,6 @@ px_x = -5 px_y = -3 -/obj/item/bodypart/l_arm/alien - icon = 'icons/mob/animal_parts.dmi' - icon_state = "alien_l_arm" - px_x = 0 - px_y = 0 - dismemberable = 0 - max_damage = 100 - animal_origin = ALIEN_BODYPART /obj/item/bodypart/l_arm/devil dismemberable = 0 @@ -729,12 +706,12 @@ return if(disabled == BODYPART_DISABLED_DAMAGE || disabled == BODYPART_DISABLED_WOUND) if(owner.stat < DEAD) - to_chat(owner, "I can no longer move my [name]!") + to_chat(owner, span_danger("I can no longer move my [name]!")) if(held_index) owner.dropItemToGround(owner.get_item_for_held_index(held_index)) else if(disabled == BODYPART_DISABLED_PARALYSIS) if(owner.stat < DEAD) - to_chat(owner, "I can no longer feel my [name].") + to_chat(owner, span_danger("I can no longer feel my [name].")) if(held_index) owner.dropItemToGround(owner.get_item_for_held_index(held_index)) if(owner.hud_used) @@ -749,15 +726,6 @@ px_x = 5 px_y = -3 -/obj/item/bodypart/r_arm/alien - icon = 'icons/mob/animal_parts.dmi' - icon_state = "alien_r_arm" - px_x = 0 - px_y = 0 - dismemberable = 0 - max_damage = 100 - animal_origin = ALIEN_BODYPART - /obj/item/bodypart/r_arm/devil dismemberable = 0 max_damage = 5000 @@ -792,10 +760,10 @@ return if(disabled == BODYPART_DISABLED_DAMAGE || disabled == BODYPART_DISABLED_WOUND) if(owner.stat < DEAD) - to_chat(owner, "I can no longer move my [name]!") + to_chat(owner, span_danger("I can no longer move my [name]!")) else if(disabled == BODYPART_DISABLED_PARALYSIS) if(owner.stat < DEAD) - to_chat(owner, "I can no longer feel my [name].") + to_chat(owner, span_danger("I can no longer feel my [name].")) /obj/item/bodypart/l_leg/digitigrade name = "left digitigrade leg" @@ -807,15 +775,6 @@ animal_origin = MONKEY_BODYPART px_y = 4 -/obj/item/bodypart/l_leg/alien - icon = 'icons/mob/animal_parts.dmi' - icon_state = "alien_l_leg" - px_x = 0 - px_y = 0 - dismemberable = 0 - max_damage = 100 - animal_origin = ALIEN_BODYPART - /obj/item/bodypart/l_leg/devil dismemberable = 0 max_damage = 5000 @@ -851,10 +810,10 @@ return if(disabled == BODYPART_DISABLED_DAMAGE || disabled == BODYPART_DISABLED_WOUND) if(owner.stat < DEAD) - to_chat(owner, "I can no longer move my [name]!") + to_chat(owner, span_danger("I can no longer move my [name]!")) else if(disabled == BODYPART_DISABLED_PARALYSIS) if(owner.stat < DEAD) - to_chat(owner, "I can no longer feel my [name].") + to_chat(owner, span_danger("I can no longer feel my [name].")) /obj/item/bodypart/r_leg/digitigrade name = "right digitigrade leg" @@ -866,14 +825,6 @@ animal_origin = MONKEY_BODYPART px_y = 4 -/obj/item/bodypart/r_leg/alien - icon = 'icons/mob/animal_parts.dmi' - icon_state = "alien_r_leg" - px_x = 0 - px_y = 0 - dismemberable = 0 - max_damage = 100 - animal_origin = ALIEN_BODYPART /obj/item/bodypart/r_leg/devil dismemberable = 0 diff --git a/code/modules/surgery/bodyparts/bodypart_dismemberment.dm b/code/modules/surgery/bodyparts/bodypart_dismemberment.dm index a83d38be99..5effb79f6d 100644 --- a/code/modules/surgery/bodyparts/bodypart_dismemberment.dm +++ b/code/modules/surgery/bodyparts/bodypart_dismemberment.dm @@ -31,6 +31,10 @@ return FALSE if(HAS_TRAIT(C, TRAIT_NODISMEMBER)) return FALSE + if(ishuman(owner)) + var/mob/living/carbon/human/human_owner = owner + if(human_owner.checkcritarmor(zone_precise, bclass)) + return FALSE var/obj/item/bodypart/affecting = C.get_bodypart(BODY_ZONE_CHEST) if(affecting && dismember_wound) @@ -400,7 +404,6 @@ //Transfer some head appearance vars over if(brain) if(brainmob) - brainmob.container = null //Reset brainmob head var. brainmob.forceMove(brain) //Throw mob into brain. brain.brainmob = brainmob //Set the brain to use the brainmob brainmob = null //Set head brainmob var to null diff --git a/code/modules/surgery/bodyparts/bodypart_wounds.dm b/code/modules/surgery/bodyparts/bodypart_wounds.dm index d8a031b60c..dfa2f1d9ea 100644 --- a/code/modules/surgery/bodyparts/bodypart_wounds.dm +++ b/code/modules/surgery/bodyparts/bodypart_wounds.dm @@ -147,6 +147,14 @@ added_wound = /datum/wound/slash if(1 to 10) added_wound = /datum/wound/slash/small + if(BCLASS_LASHING) + switch(dam) + if(20 to INFINITY) + added_wound = /datum/wound/lashing/large + if(10 to 20) + added_wound = /datum/wound/lashing + if(1 to 10) + added_wound = /datum/wound/lashing/small if(BCLASS_STAB, BCLASS_PICK, BCLASS_SHOT) switch(dam) if(20 to INFINITY) @@ -210,6 +218,10 @@ used += 10 if(prob(used)) attempted_wounds += /datum/wound/artery + if(bclass == BCLASS_LASHING) + used = round(damage_dividend * 20 + (dam / 6), 1) + if(prob(used)) + attempted_wounds += /datum/wound/scarring for(var/wound_type in shuffle(attempted_wounds)) var/datum/wound/applied = add_wound(wound_type, silent, crit_message) @@ -259,6 +271,10 @@ if((zone_precise == BODY_ZONE_PRECISE_STOMACH) && !resistance) attempted_wounds += /datum/wound/slash/disembowel attempted_wounds += /datum/wound/artery/chest + if(bclass == BCLASS_LASHING) + used = round(damage_dividend * 20 + (dam / 6), 1) + if(prob(used)) + attempted_wounds += /datum/wound/scarring for(var/wound_type in shuffle(attempted_wounds)) var/datum/wound/applied = add_wound(wound_type, silent, crit_message) @@ -375,6 +391,10 @@ attempted_wounds += /datum/wound/facial/disfigurement/nose else if(zone_precise in knockout_zones) attempted_wounds += /datum/wound/fracture/head/brain + if(bclass == BCLASS_LASHING) + used = round(damage_dividend * 20 + (dam / 6), 1) + if(prob(used)) + attempted_wounds += /datum/wound/scarring for(var/wound_type in shuffle(attempted_wounds)) var/datum/wound/applied = add_wound(wound_type, silent, crit_message) diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index 37da34315c..4acccca660 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -102,7 +102,6 @@ if(user) user.visible_message("[user] saws [src] open and pulls out a brain!", "I saw [src] open and pull out a brain.") if(brainmob) - brainmob.container = null brainmob.forceMove(brain) brain.brainmob = brainmob brainmob = null @@ -205,13 +204,7 @@ //Applies the debrained overlay if there is no brain if(!brain) var/image/debrain_overlay = image(layer = -HAIR_LAYER, dir = SOUTH) - if(animal_origin == ALIEN_BODYPART) - debrain_overlay.icon = 'icons/mob/animal_parts.dmi' - debrain_overlay.icon_state = "debrained_alien" - else if(animal_origin == LARVA_BODYPART) - debrain_overlay.icon = 'icons/mob/animal_parts.dmi' - debrain_overlay.icon_state = "debrained_larva" - else if(!(NOBLOOD in species_flags_list)) + if(!(NOBLOOD in species_flags_list)) debrain_overlay.icon = 'icons/mob/human_face.dmi' debrain_overlay.icon_state = "debrained" . += debrain_overlay @@ -244,25 +237,7 @@ icon_state = "default_monkey_head" animal_origin = MONKEY_BODYPART -/obj/item/bodypart/head/alien - icon = 'icons/mob/animal_parts.dmi' - icon_state = "alien_head" - px_x = 0 - px_y = 0 - dismemberable = 0 - max_damage = 500 - animal_origin = ALIEN_BODYPART - /obj/item/bodypart/head/devil dismemberable = 0 max_damage = 5000 animal_origin = DEVIL_BODYPART - -/obj/item/bodypart/head/larva - icon = 'icons/mob/animal_parts.dmi' - icon_state = "larva_head" - px_x = 0 - px_y = 0 - dismemberable = 0 - max_damage = 50 - animal_origin = LARVA_BODYPART diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index 9d91a54798..50e3fb7abc 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -51,8 +51,6 @@ return TRUE return FALSE -/mob/living/carbon/alien/larva/has_left_hand() - return 1 /mob/proc/has_right_hand(check_disabled = TRUE) @@ -65,9 +63,6 @@ return TRUE return FALSE -/mob/living/carbon/alien/larva/has_right_hand() - return 1 - //Limb numbers @@ -89,10 +84,6 @@ /mob/proc/get_arm_ignore() return 0 -/mob/living/carbon/alien/larva/get_arm_ignore() - return 1 //so we can still handcuff larvas. - - /mob/proc/get_num_legs(check_disabled = TRUE) return 2 @@ -111,8 +102,6 @@ /mob/proc/get_leg_ignore() return FALSE -/mob/living/carbon/alien/larva/get_leg_ignore() - return TRUE /mob/living/carbon/human/get_leg_ignore() if(movement_type & (FLYING | FLOATING)) @@ -125,22 +114,12 @@ /mob/living/carbon/get_missing_limbs() RETURN_TYPE(/list) var/list/full = list( - BODY_ZONE_HEAD, - BODY_ZONE_CHEST, - BODY_ZONE_R_ARM, - BODY_ZONE_L_ARM, - BODY_ZONE_R_LEG, - BODY_ZONE_L_LEG, - ) - for(var/zone in full) - if(get_bodypart(zone)) - full -= zone - return full - -/mob/living/carbon/alien/larva/get_missing_limbs() - var/list/full = list( - BODY_ZONE_HEAD, + BODY_ZONE_HEAD, BODY_ZONE_CHEST, + BODY_ZONE_R_ARM, + BODY_ZONE_L_ARM, + BODY_ZONE_R_LEG, + BODY_ZONE_L_LEG, ) for(var/zone in full) if(get_bodypart(zone)) @@ -152,24 +131,12 @@ /mob/living/carbon/get_disabled_limbs() var/list/full = list( - BODY_ZONE_HEAD, - BODY_ZONE_CHEST, - BODY_ZONE_R_ARM, - BODY_ZONE_L_ARM, - BODY_ZONE_R_LEG, - BODY_ZONE_L_LEG, - ) - var/list/disabled = list() - for(var/zone in full) - var/obj/item/bodypart/affecting = get_bodypart(zone) - if(affecting && affecting.disabled) - disabled += zone - return disabled - -/mob/living/carbon/alien/larva/get_disabled_limbs() - var/list/full = list( - BODY_ZONE_HEAD, + BODY_ZONE_HEAD, BODY_ZONE_CHEST, + BODY_ZONE_R_ARM, + BODY_ZONE_L_ARM, + BODY_ZONE_R_LEG, + BODY_ZONE_L_LEG, ) var/list/disabled = list() for(var/zone in full) @@ -221,42 +188,6 @@ L.change_bodypart_status(BODYPART_ROBOTIC) . = L -/mob/living/carbon/alien/larva/newBodyPart(zone, robotic, fixed_icon) - var/obj/item/bodypart/L - switch(zone) - if(BODY_ZONE_HEAD) - L = new /obj/item/bodypart/head/larva() - if(BODY_ZONE_CHEST) - L = new /obj/item/bodypart/chest/larva() - if(L) - L.update_limb(fixed_icon, src) - if(robotic) - L.change_bodypart_status(BODYPART_ROBOTIC) - . = L - -/mob/living/carbon/alien/humanoid/newBodyPart(zone, robotic, fixed_icon) - var/obj/item/bodypart/L - switch(zone) - if(BODY_ZONE_L_ARM) - L = new /obj/item/bodypart/l_arm/alien() - if(BODY_ZONE_R_ARM) - L = new /obj/item/bodypart/r_arm/alien() - if(BODY_ZONE_HEAD) - L = new /obj/item/bodypart/head/alien() - if(BODY_ZONE_L_LEG) - L = new /obj/item/bodypart/l_leg/alien() - if(BODY_ZONE_R_LEG) - L = new /obj/item/bodypart/r_leg/alien() - if(BODY_ZONE_CHEST) - L = new /obj/item/bodypart/chest/alien() - if(L) - L.update_limb(fixed_icon, src) - if(robotic) - L.change_bodypart_status(BODYPART_ROBOTIC) - . = L - - - /mob/living/carbon/proc/Digitigrade_Leg_Swap(swap_back) var/body_plan_changed = FALSE for(var/X in bodyparts) diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm deleted file mode 100644 index fb608ca5cc..0000000000 --- a/code/modules/surgery/bodyparts/robot_bodyparts.dm +++ /dev/null @@ -1,335 +0,0 @@ -#define ROBOTIC_LIGHT_BRUTE_MSG "marred" -#define ROBOTIC_MEDIUM_BRUTE_MSG "dented" -#define ROBOTIC_HEAVY_BRUTE_MSG "falling apart" - -#define ROBOTIC_LIGHT_BURN_MSG "scorched" -#define ROBOTIC_MEDIUM_BURN_MSG "charred" -#define ROBOTIC_HEAVY_BURN_MSG "smoldering" - -//For ye whom may venture here, split up arm / hand sprites are formatted as "l_hand" & "l_arm". -//The complete sprite (displayed when the limb is on the ground) should be named "borg_l_arm". -//Failure to follow this pattern will cause the hand's icons to be missing due to the way get_limb_icon() works to generate the mob's icons using the aux_zone var. - -/obj/item/bodypart/l_arm/robot - name = "cyborg left arm" - desc = "" - attack_verb = list("slapped", "punched") - item_state = "buildpipe" - icon = 'icons/mob/augmentation/augments.dmi' - flags_1 = CONDUCT_1 - icon_state = "borg_l_arm" - status = BODYPART_ROBOTIC - - brute_reduction = 5 - burn_reduction = 4 - - light_brute_msg = ROBOTIC_LIGHT_BRUTE_MSG - medium_brute_msg = ROBOTIC_MEDIUM_BRUTE_MSG - heavy_brute_msg = ROBOTIC_HEAVY_BRUTE_MSG - - light_burn_msg = ROBOTIC_LIGHT_BURN_MSG - medium_burn_msg = ROBOTIC_MEDIUM_BURN_MSG - heavy_burn_msg = ROBOTIC_HEAVY_BURN_MSG - -/obj/item/bodypart/r_arm/robot - name = "cyborg right arm" - desc = "" - attack_verb = list("slapped", "punched") - item_state = "buildpipe" - icon = 'icons/mob/augmentation/augments.dmi' - flags_1 = CONDUCT_1 - icon_state = "borg_r_arm" - status = BODYPART_ROBOTIC - - brute_reduction = 5 - burn_reduction = 4 - - light_brute_msg = ROBOTIC_LIGHT_BRUTE_MSG - medium_brute_msg = ROBOTIC_MEDIUM_BRUTE_MSG - heavy_brute_msg = ROBOTIC_HEAVY_BRUTE_MSG - - light_burn_msg = ROBOTIC_LIGHT_BURN_MSG - medium_burn_msg = ROBOTIC_MEDIUM_BURN_MSG - heavy_burn_msg = ROBOTIC_HEAVY_BURN_MSG - -/obj/item/bodypart/l_leg/robot - name = "cyborg left leg" - desc = "" - attack_verb = list("kicked", "stomped") - item_state = "buildpipe" - icon = 'icons/mob/augmentation/augments.dmi' - flags_1 = CONDUCT_1 - icon_state = "borg_l_leg" - status = BODYPART_ROBOTIC - - brute_reduction = 5 - burn_reduction = 4 - - light_brute_msg = ROBOTIC_LIGHT_BRUTE_MSG - medium_brute_msg = ROBOTIC_MEDIUM_BRUTE_MSG - heavy_brute_msg = ROBOTIC_HEAVY_BRUTE_MSG - - light_burn_msg = ROBOTIC_LIGHT_BURN_MSG - medium_burn_msg = ROBOTIC_MEDIUM_BURN_MSG - heavy_burn_msg = ROBOTIC_HEAVY_BURN_MSG - -/obj/item/bodypart/r_leg/robot - name = "cyborg right leg" - desc = "" - attack_verb = list("kicked", "stomped") - item_state = "buildpipe" - icon = 'icons/mob/augmentation/augments.dmi' - flags_1 = CONDUCT_1 - icon_state = "borg_r_leg" - status = BODYPART_ROBOTIC - - brute_reduction = 5 - burn_reduction = 4 - - light_brute_msg = ROBOTIC_LIGHT_BRUTE_MSG - medium_brute_msg = ROBOTIC_MEDIUM_BRUTE_MSG - heavy_brute_msg = ROBOTIC_HEAVY_BRUTE_MSG - - light_burn_msg = ROBOTIC_LIGHT_BURN_MSG - medium_burn_msg = ROBOTIC_MEDIUM_BURN_MSG - heavy_burn_msg = ROBOTIC_HEAVY_BURN_MSG - -/obj/item/bodypart/chest/robot - name = "cyborg torso" - desc = "" - item_state = "buildpipe" - icon = 'icons/mob/augmentation/augments.dmi' - flags_1 = CONDUCT_1 - icon_state = "borg_chest" - status = BODYPART_ROBOTIC - - brute_reduction = 5 - burn_reduction = 4 - - light_brute_msg = ROBOTIC_LIGHT_BRUTE_MSG - medium_brute_msg = ROBOTIC_MEDIUM_BRUTE_MSG - heavy_brute_msg = ROBOTIC_HEAVY_BRUTE_MSG - - light_burn_msg = ROBOTIC_LIGHT_BURN_MSG - medium_burn_msg = ROBOTIC_MEDIUM_BURN_MSG - heavy_burn_msg = ROBOTIC_HEAVY_BURN_MSG - - var/wired = FALSE - var/obj/item/stock_parts/cell/cell = null - - -/obj/item/bodypart/chest/robot/handle_atom_del(atom/A) - if(A == cell) - cell = null - return ..() - -/obj/item/bodypart/chest/robot/Destroy() - QDEL_NULL(cell) - return ..() - -/obj/item/bodypart/chest/robot/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/stock_parts/cell)) - if(cell) - to_chat(user, "I have already inserted a cell!") - return - else - if(!user.transferItemToLoc(W, src)) - return - cell = W - to_chat(user, "I insert the cell.") - else if(istype(W, /obj/item/stack/cable_coil)) - if(wired) - to_chat(user, "I have already inserted wire!") - return - var/obj/item/stack/cable_coil/coil = W - if (coil.use(1)) - wired = TRUE - to_chat(user, "I insert the wire.") - else - to_chat(user, "I need one length of coil to wire it!") - else - return ..() - -/obj/item/bodypart/chest/robot/wirecutter_act(mob/living/user, obj/item/I) - . = ..() - if(!wired) - return - . = TRUE - I.play_tool_sound(src) - to_chat(user, "I cut the wires out of [src].") - new /obj/item/stack/cable_coil(drop_location(), 1) - wired = FALSE - -/obj/item/bodypart/chest/robot/screwdriver_act(mob/living/user, obj/item/I) - ..() - . = TRUE - if(!cell) - to_chat(user, "There's no power cell installed in [src]!") - return - I.play_tool_sound(src) - to_chat(user, "Remove [cell] from [src].") - cell.forceMove(drop_location()) - cell = null - - -/obj/item/bodypart/chest/robot/examine(mob/user) - . = ..() - if(cell) - . += {"It has a [cell] inserted.\n - I can use a screwdriver to remove [cell]."} - else - . += "It has an empty port for a power cell." - if(wired) - . += "Its all wired up[cell ? " and ready for usage" : ""].\n"+\ - "I can use wirecutters to remove the wiring." - else - . += "It has a couple spots that still need to be wired." - -/obj/item/bodypart/chest/robot/drop_organs(mob/user, violent_removal) - if(wired) - new /obj/item/stack/cable_coil(drop_location(), 1) - wired = FALSE - if(cell) - cell.forceMove(drop_location()) - cell = null - ..() - - -/obj/item/bodypart/head/robot - name = "cyborg head" - desc = "" - item_state = "buildpipe" - icon = 'icons/mob/augmentation/augments.dmi' - flags_1 = CONDUCT_1 - icon_state = "borg_head" - status = BODYPART_ROBOTIC - - brute_reduction = 5 - burn_reduction = 4 - - light_brute_msg = ROBOTIC_LIGHT_BRUTE_MSG - medium_brute_msg = ROBOTIC_MEDIUM_BRUTE_MSG - heavy_brute_msg = ROBOTIC_HEAVY_BRUTE_MSG - - light_burn_msg = ROBOTIC_LIGHT_BURN_MSG - medium_burn_msg = ROBOTIC_MEDIUM_BURN_MSG - heavy_burn_msg = ROBOTIC_HEAVY_BURN_MSG - - var/obj/item/assembly/flash/handheld/flash1 = null - var/obj/item/assembly/flash/handheld/flash2 = null - - -/obj/item/bodypart/head/robot/handle_atom_del(atom/A) - if(A == flash1) - flash1 = null - if(A == flash2) - flash2 = null - return ..() - -/obj/item/bodypart/head/robot/Destroy() - QDEL_NULL(flash1) - QDEL_NULL(flash2) - return ..() - -/obj/item/bodypart/head/robot/examine(mob/user) - . = ..() - if(!flash1 && !flash2) - . += "It has two empty eye sockets for flashes." - else - var/single_flash = FALSE - if(!flash1 || !flash2) - single_flash = TRUE - . += {"One of its eye sockets is currently occupied by a flash.\n - It has an empty eye socket for another flash."} - else - . += "It has two eye sockets occupied by flashes." - . += "I can remove the seated flash[single_flash ? "":"es"] with a crowbar." - -/obj/item/bodypart/head/robot/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/assembly/flash/handheld)) - var/obj/item/assembly/flash/handheld/F = W - if(flash1 && flash2) - to_chat(user, "I have already inserted the eyes!") - return - else if(F.burnt_out) - to_chat(user, "I can't use a broken flash!") - return - else - if(!user.transferItemToLoc(F, src)) - return - if(flash1) - flash2 = F - else - flash1 = F - to_chat(user, "I insert the flash into the eye socket.") - return - return ..() - -/obj/item/bodypart/head/robot/crowbar_act(mob/living/user, obj/item/I) - ..() - if(flash1 || flash2) - I.play_tool_sound(src) - to_chat(user, "I remove the flash from [src].") - if(flash1) - flash1.forceMove(drop_location()) - flash1 = null - if(flash2) - flash2.forceMove(drop_location()) - flash2 = null - else - to_chat(user, "There is no flash to remove from [src].") - return TRUE - - -/obj/item/bodypart/head/robot/drop_organs(mob/user, violent_removal) - if(flash1) - flash1.forceMove(user.loc) - flash1 = null - if(flash2) - flash2.forceMove(user.loc) - flash2 = null - ..() - - - - -/obj/item/bodypart/l_arm/robot/surplus - name = "surplus prosthetic left arm" - desc = "" - icon = 'icons/mob/augmentation/surplus_augments.dmi' - brute_reduction = 0 - burn_reduction = 0 - max_damage = 20 - -/obj/item/bodypart/r_arm/robot/surplus - name = "surplus prosthetic right arm" - desc = "" - icon = 'icons/mob/augmentation/surplus_augments.dmi' - brute_reduction = 0 - burn_reduction = 0 - max_damage = 20 - -/obj/item/bodypart/l_leg/robot/surplus - name = "surplus prosthetic left leg" - desc = "" - icon = 'icons/mob/augmentation/surplus_augments.dmi' - brute_reduction = 0 - burn_reduction = 0 - max_damage = 20 - -/obj/item/bodypart/r_leg/robot/surplus - name = "surplus prosthetic right leg" - desc = "" - icon = 'icons/mob/augmentation/surplus_augments.dmi' - brute_reduction = 0 - burn_reduction = 0 - max_damage = 20 - - -#undef ROBOTIC_LIGHT_BRUTE_MSG -#undef ROBOTIC_MEDIUM_BRUTE_MSG -#undef ROBOTIC_HEAVY_BRUTE_MSG - -#undef ROBOTIC_LIGHT_BURN_MSG -#undef ROBOTIC_MEDIUM_BURN_MSG -#undef ROBOTIC_HEAVY_BURN_MSG diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm deleted file mode 100644 index 1a02839971..0000000000 --- a/code/modules/surgery/organs/augments_arms.dm +++ /dev/null @@ -1,238 +0,0 @@ -/obj/item/organ/cyberimp/arm - name = "arm-mounted implant" - desc = "" - zone = BODY_ZONE_R_ARM - icon_state = "implant-toolkit" - w_class = WEIGHT_CLASS_SMALL - actions_types = list(/datum/action/item_action/organ_action/toggle) - - var/list/items_list = list() - // Used to store a list of all items inside, for multi-item implants. - // I would use contents, but they shuffle on every activation/deactivation leading to interface inconsistencies. - - var/obj/item/holder = null - // You can use this var for item path, it would be converted into an item on New() - -/obj/item/organ/cyberimp/arm/Initialize() - . = ..() - if(ispath(holder)) - holder = new holder(src) - - update_icon() - SetSlotFromZone() - items_list = contents.Copy() - -/obj/item/organ/cyberimp/arm/proc/SetSlotFromZone() - switch(zone) - if(BODY_ZONE_L_ARM) - slot = ORGAN_SLOT_LEFT_ARM_AUG - if(BODY_ZONE_R_ARM) - slot = ORGAN_SLOT_RIGHT_ARM_AUG - else - CRASH("Invalid zone for [type]") - -/obj/item/organ/cyberimp/arm/update_icon() - if(zone == BODY_ZONE_R_ARM) - transform = null - else // Mirroring the icon - transform = matrix(-1, 0, 0, 0, 1, 0) - -/obj/item/organ/cyberimp/arm/examine(mob/user) - . = ..() - . += "[src] is assembled in the [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm configuration. You can use a screwdriver to reassemble it." - -/obj/item/organ/cyberimp/arm/screwdriver_act(mob/living/user, obj/item/I) - . = ..() - if(.) - return TRUE - I.play_tool_sound(src) - if(zone == BODY_ZONE_R_ARM) - zone = BODY_ZONE_L_ARM - else - zone = BODY_ZONE_R_ARM - SetSlotFromZone() - to_chat(user, "I modify [src] to be installed on the [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.") - update_icon() - -/obj/item/organ/cyberimp/arm/Remove(mob/living/carbon/M, special = 0) - Retract() - ..() - -/obj/item/organ/cyberimp/arm/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - if(prob(15/severity) && owner) - to_chat(owner, "[src] is hit by EMP!") - // give the owner an idea about why his implant is glitching - Retract() - -/obj/item/organ/cyberimp/arm/proc/Retract() - if(!holder || (holder in src)) - return - - owner.visible_message("[owner] retracts [holder] back into [owner.p_their()] [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.", - "[holder] snaps back into my [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.", - "I hear a short mechanical noise.") - - if(istype(holder, /obj/item/assembly/flash/armimplant)) - var/obj/item/assembly/flash/F = holder - F.set_light(0) - - owner.transferItemToLoc(holder, src, TRUE) - holder = null - playsound(get_turf(owner), 'sound/blank.ogg', 50, TRUE) - -/obj/item/organ/cyberimp/arm/proc/Extend(obj/item/item) - if(!(item in src)) - return - - holder = item - - ADD_TRAIT(holder, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) - holder.resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - holder.slot_flags = null - holder.set_custom_materials(null) - - if(istype(holder, /obj/item/assembly/flash/armimplant)) - var/obj/item/assembly/flash/F = holder - F.set_light(7) - - var/side = zone == BODY_ZONE_R_ARM? RIGHT_HANDS : LEFT_HANDS - var/hand = owner.get_empty_held_index_for_side(side) - if(hand) - owner.put_in_hand(holder, hand) - else - var/list/hand_items = owner.get_held_items_for_side(side, all = TRUE) - var/success = FALSE - var/list/failure_message = list() - for(var/i in 1 to hand_items.len) //Can't just use *in* here. - var/I = hand_items[i] - if(!owner.dropItemToGround(I)) - failure_message += "My [I] interferes with [src]!" - continue - to_chat(owner, "I drop [I] to activate [src]!") - success = owner.put_in_hand(holder, owner.get_empty_held_index_for_side(side)) - break - if(!success) - for(var/i in failure_message) - to_chat(owner, i) - return - owner.visible_message("[owner] extends [holder] from [owner.p_their()] [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.", - "I extend [holder] from my [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.", - "I hear a short mechanical noise.") - playsound(get_turf(owner), 'sound/blank.ogg', 50, TRUE) - -/obj/item/organ/cyberimp/arm/ui_action_click() - if((organ_flags & ORGAN_FAILING) || (!holder && !contents.len)) - to_chat(owner, "The implant doesn't respond. It seems to be broken...") - return - - if(!holder || (holder in src)) - holder = null - if(contents.len == 1) - Extend(contents[1]) - else - var/list/choice_list = list() - for(var/obj/item/I in items_list) - choice_list[I] = image(I) - var/obj/item/choice = show_radial_menu(owner, owner, choice_list) - if(owner && owner == usr && owner.stat != DEAD && (src in owner.internal_organs) && !holder && (choice in contents)) - // This monster sanity check is a nice example of how bad input is. - Extend(choice) - else - Retract() - - -/obj/item/organ/cyberimp/arm/gun/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - if(prob(30/severity) && owner && !(organ_flags & ORGAN_FAILING)) - Retract() - owner.visible_message("A loud bang comes from [owner]\'s [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm!") - playsound(get_turf(owner), 'sound/blank.ogg', 100, TRUE) - to_chat(owner, "I feel an explosion erupt inside my [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm as my implant breaks!") - owner.adjust_fire_stacks(20) - owner.IgniteMob() - owner.adjustFireLoss(25) - organ_flags |= ORGAN_FAILING - - -/obj/item/organ/cyberimp/arm/gun/laser - name = "arm-mounted laser implant" - desc = "" - icon_state = "arm_laser" - contents = newlist(/obj/item/gun/energy/laser/mounted) - -/obj/item/organ/cyberimp/arm/gun/laser/l - zone = BODY_ZONE_L_ARM - - -/obj/item/organ/cyberimp/arm/gun/taser - name = "arm-mounted taser implant" - desc = "" - icon_state = "arm_taser" - contents = newlist(/obj/item/gun/energy/e_gun/advtaser/mounted) - -/obj/item/organ/cyberimp/arm/gun/taser/l - zone = BODY_ZONE_L_ARM - -/obj/item/organ/cyberimp/arm/toolset - name = "integrated toolset implant" - desc = "" - contents = newlist(/obj/item/screwdriver/cyborg, /obj/item/wrench/cyborg, /obj/item/weldingtool/largetank/cyborg, - /obj/item/crowbar/cyborg, /obj/item/wirecutters/cyborg, /obj/item/multitool/cyborg) - -/obj/item/organ/cyberimp/arm/toolset/l - zone = BODY_ZONE_L_ARM - -/obj/item/organ/cyberimp/arm/toolset/emag_act() - if(!(locate(/obj/item/kitchen/knife/combat/cyborg) in items_list)) - to_chat(usr, "I unlock [src]'s integrated knife!") - items_list += new /obj/item/kitchen/knife/combat/cyborg(src) - return 1 - return 0 - -/obj/item/organ/cyberimp/arm/esword - name = "arm-mounted energy blade" - desc = "" - contents = newlist(/obj/item/melee/transforming/energy/blade/hardlight) - -/obj/item/organ/cyberimp/arm/medibeam - name = "integrated medical beamgun" - desc = "" - contents = newlist(/obj/item/gun/medbeam) - - -/obj/item/organ/cyberimp/arm/flash - name = "integrated high-intensity photon projector" //Why not - desc = "" - contents = newlist(/obj/item/assembly/flash/armimplant) - -/obj/item/organ/cyberimp/arm/flash/Initialize() - . = ..() - if(locate(/obj/item/assembly/flash/armimplant) in items_list) - var/obj/item/assembly/flash/armimplant/F = locate(/obj/item/assembly/flash/armimplant) in items_list - F.I = src - -/obj/item/organ/cyberimp/arm/baton - name = "arm electrification implant" - desc = "" - contents = newlist(/obj/item/borg/stun) - -/obj/item/organ/cyberimp/arm/combat - name = "combat cybernetics implant" - desc = "" - contents = newlist(/obj/item/melee/transforming/energy/blade/hardlight, /obj/item/gun/medbeam, /obj/item/borg/stun, /obj/item/assembly/flash/armimplant) - -/obj/item/organ/cyberimp/arm/combat/Initialize() - . = ..() - if(locate(/obj/item/assembly/flash/armimplant) in items_list) - var/obj/item/assembly/flash/armimplant/F = locate(/obj/item/assembly/flash/armimplant) in items_list - F.I = src - -/obj/item/organ/cyberimp/arm/surgery - name = "surgical toolset implant" - desc = "" - contents = newlist(/obj/item/retractor/augment, /obj/item/hemostat/augment, /obj/item/cautery/augment, /obj/item/surgicaldrill/augment, /obj/item/scalpel/augment, /obj/item/circular_saw/augment, /obj/item/surgical_drapes) diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm index 11f6dae890..5931e3ea71 100644 --- a/code/modules/surgery/organs/augments_chest.dm +++ b/code/modules/surgery/organs/augments_chest.dm @@ -189,12 +189,6 @@ if(environment && environment.return_pressure() > 30) return 1 - // Priority 2: use plasma from internal plasma storage. - // (just in case someone would ever use this implant system to make cyber-alien ops with jetpacks and taser arms) - if(owner.getPlasma() >= num*100) - owner.adjustPlasma(-num*100) - return 1 - // Priority 3: use internals tank. var/obj/item/tank/I = owner.internal if(I && I.air_contents && I.air_contents.total_moles() > num) diff --git a/code/modules/surgery/organs/brain.dm b/code/modules/surgery/organs/brain.dm index f788caaec5..36f0ed81ef 100644 --- a/code/modules/surgery/organs/brain.dm +++ b/code/modules/surgery/organs/brain.dm @@ -32,13 +32,6 @@ name = "brain" - if(C.mind && C.mind.has_antag_datum(/datum/antagonist/changeling) && !no_id_transfer) //congrats, you're trapped in a body you don't control - if(brainmob && !(C.stat == DEAD || (HAS_TRAIT(C, TRAIT_DEATHCOMA)))) - to_chat(brainmob, "I can't feel my body! I'm still just a brain!") - forceMove(C) - C.update_hair() - return - if(brainmob) // if(C.key) // testing("UHM BASED?? [C]") diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index febc00e9e2..ca669a76a1 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -213,26 +213,6 @@ tint = INFINITY var/obj/item/flashlight/eyelight/eye -/obj/item/organ/eyes/robotic/flashlight/emp_act(severity) - return - -/obj/item/organ/eyes/robotic/flashlight/Insert(mob/living/carbon/M, special = FALSE, drop_if_replaced = FALSE) - ..() - if(!eye) - eye = new /obj/item/flashlight/eyelight() - eye.on = TRUE - eye.forceMove(M) - eye.update_brightness(M) - M.become_blind("flashlight_eyes") - - -/obj/item/organ/eyes/robotic/flashlight/Remove(mob/living/carbon/M, special = 0) - eye.on = FALSE - eye.update_brightness(M) - eye.forceMove(src) - M.cure_blind("flashlight_eyes") - ..() - // Welding shield implant /obj/item/organ/eyes/robotic/shield name = "shielded robotic eyes" @@ -408,9 +388,9 @@ /obj/item/organ/eyes/robotic/glow/proc/sync_light_effects() for(var/I in eye_lighting) var/obj/effect/abstract/eye_lighting/L = I - L.set_light(light_object_range, light_object_power, current_color_string) + L.set_light(light_object_range, light_inner_range, light_object_power, l_color = current_color_string) if(on_mob) - on_mob.set_light(1, 1, current_color_string) + on_mob.set_light(1, 1, 1, l_color = current_color_string) /obj/effect/abstract/eye_lighting var/obj/item/organ/eyes/robotic/glow/parent diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 7079be2a6a..8fd34fa0ca 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -245,20 +245,6 @@ SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "chemical_euphoria") - // BZ - - var/bz_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/bz][MOLES]) - if(bz_pp > BZ_trip_balls_min) - H.hallucination += 10 - H.reagents.add_reagent(/datum/reagent/bz_metabolites,5) - if(prob(33)) - H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150) - - else if(bz_pp > 0.01) - H.hallucination += 5 - H.reagents.add_reagent(/datum/reagent/bz_metabolites,1) - - // Tritium var/trit_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/tritium][MOLES]) if (trit_pp > 50) diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index aed86a734b..378e85fbeb 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -5,7 +5,6 @@ var/status = ORGAN_ORGANIC w_class = WEIGHT_CLASS_SMALL throwforce = 0 - sellprice = 10 var/zone = BODY_ZONE_CHEST var/slot // DO NOT add slots with matching names to different zones - it will break internal_organs_slot list! diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index 09495db7aa..4764af4162 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -18,6 +18,7 @@ /datum/language/celestial, /datum/language/hellspeak, /datum/language/beast, + /datum/language/orcish /datum/language/abyssal )) diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index 9405e2b5b5..165e7d3d01 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -129,10 +129,7 @@ var/log_message = uppertext(message) if(!span_list || !span_list.len) - if(iscultist(user)) - span_list = list("narsiesmall") - else - span_list = list() + span_list = list() user.say(message, spans = span_list, sanitize = FALSE) @@ -165,10 +162,6 @@ if(user.mind.assigned_role == "Mime") power_multiplier *= 0.5 - //Cultists are closer to their gods and are more powerful, but they'll give themselves away - if(iscultist(user)) - power_multiplier *= 2 - //Try to check if the speaker specified a name or a job to focus on var/list/specific_listeners = list() var/found_string = null @@ -385,12 +378,6 @@ addtimer(CALLBACK(L, /atom/movable/, "Who's there?"), 5 * i) i++ - //STATE LAWS - else if((findtext(message, statelaws_words))) - cooldown = COOLDOWN_STUN - for(var/mob/living/silicon/S in listeners) - S.statelaws(force = 1) - //MOVE else if((findtext(message, move_words))) cooldown = COOLDOWN_MEME diff --git a/code/modules/surgery/surgery_tools.dm b/code/modules/surgery/surgery_tools.dm index 601b80213d..1afd27b1f0 100644 --- a/code/modules/surgery/surgery_tools.dm +++ b/code/modules/surgery/surgery_tools.dm @@ -228,12 +228,6 @@ if(do_after(user, 10, target = O)) advanced_surgery_steps |= D.surgery_steps return TRUE - if(istype(O, /obj/machinery/computer/operating)) - to_chat(user, "I copy surgery protocols from [O] into [src].") - var/obj/machinery/computer/operating/OC = O - if(do_after(user, 10, target = O)) - advanced_surgery_steps |= OC.advanced_surgery_steps - return TRUE return /obj/item/scalpel/advanced diff --git a/code/modules/surgery/surgery_tools_rogue.dm b/code/modules/surgery/surgery_tools_rogue.dm index 979e023498..0412623ac1 100644 --- a/code/modules/surgery/surgery_tools_rogue.dm +++ b/code/modules/surgery/surgery_tools_rogue.dm @@ -18,6 +18,11 @@ associated_skill = /datum/skill/combat/knives anvilrepair = /datum/skill/craft/blacksmithing smeltresult = /obj/item/ingot/iron + embedding = list( + "embed_chance" = 20, + "embedded_pain_multiplier" = 1, + "embedded_fall_chance" = 0, + ) /obj/item/rogueweapon/surgery/Initialize() . = ..() diff --git a/code/modules/tgui/states.dm b/code/modules/tgui/states.dm index 999eb05d35..1f377e7360 100644 --- a/code/modules/tgui/states.dm +++ b/code/modules/tgui/states.dm @@ -69,16 +69,6 @@ if(!(mobility_flags & MOBILITY_UI) && . == UI_INTERACTIVE) return UI_UPDATE -/mob/living/silicon/ai/shared_ui_interaction(src_object) - if(lacks_power()) // Disable UIs if the AI is unpowered. - return UI_DISABLED - return ..() - -/mob/living/silicon/robot/shared_ui_interaction(src_object) - if(!cell || cell.charge <= 0 || lockcharge) // Disable UIs if the Borg is unpowered or locked. - return UI_DISABLED - return ..() - /** * public * diff --git a/code/modules/tgui/states/default.dm b/code/modules/tgui/states/default.dm index a28b169508..ad1854448b 100644 --- a/code/modules/tgui/states/default.dm +++ b/code/modules/tgui/states/default.dm @@ -23,36 +23,3 @@ GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new) . = shared_ui_interaction(src_object) if(. > UI_CLOSE) . = min(., shared_living_ui_distance(src_object)) // Check the distance... - -/mob/living/silicon/robot/default_can_use_topic(src_object) - . = shared_ui_interaction(src_object) - if(. <= UI_DISABLED) - return - - // Robots can interact with anything they can see. - var/list/clientviewlist = getviewsize(client.view) - if(get_dist(src, src_object) <= min(clientviewlist[1],clientviewlist[2])) - return UI_INTERACTIVE - return UI_DISABLED // Otherwise they can keep the UI open. - -/mob/living/silicon/ai/default_can_use_topic(src_object) - . = shared_ui_interaction(src_object) - if(. < UI_INTERACTIVE) - return - - // The AI can interact with anything it can see nearby, or with cameras while wireless control is enabled. - if(!control_disabled && can_see(src_object)) - return UI_INTERACTIVE - return UI_CLOSE - -/mob/living/simple_animal/default_can_use_topic(src_object) - . = shared_ui_interaction(src_object) - if(. > UI_CLOSE) - . = min(., shared_living_ui_distance(src_object)) //simple animals can only use things they're near. - -/mob/living/silicon/pai/default_can_use_topic(src_object) - // pAIs can only use themselves and the owner's radio. - if((src_object == src || src_object == radio) && !stat) - return UI_INTERACTIVE - else - return ..() diff --git a/code/modules/tgui/states/hands.dm b/code/modules/tgui/states/hands.dm index 65e32b93f0..54ff5b154e 100644 --- a/code/modules/tgui/states/hands.dm +++ b/code/modules/tgui/states/hands.dm @@ -18,8 +18,3 @@ GLOBAL_DATUM_INIT(hands_state, /datum/ui_state/hands_state, new) if(is_holding(src_object)) return UI_INTERACTIVE return UI_CLOSE - -/mob/living/silicon/robot/hands_can_use_topic(src_object) - if(activated(src_object)) - return UI_INTERACTIVE - return UI_CLOSE diff --git a/code/modules/underworld/demon.dm b/code/modules/underworld/demon.dm index 5c3cc1464a..e2fe01e76b 100644 --- a/code/modules/underworld/demon.dm +++ b/code/modules/underworld/demon.dm @@ -105,7 +105,7 @@ /mob/living/simple_animal/hostile/rogue/demon/Initialize() . = ..() - set_light(2, 2, "#c0523f") + set_light(2, 2, 2, l_color = "#c0523f") ADD_TRAIT(src, TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_GENERIC) ADD_TRAIT(src, TRAIT_NOPAINSTUN, TRAIT_GENERIC) diff --git a/code/modules/underworld/underworld.dm b/code/modules/underworld/underworld.dm index 79201ba691..c6d70dbf5e 100644 --- a/code/modules/underworld/underworld.dm +++ b/code/modules/underworld/underworld.dm @@ -86,12 +86,13 @@ lefthand_file = 'icons/mob/inhands/equipment/mining_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/mining_righthand.dmi' desc = "A beacon." - brightness_on = 2 // luminosity when on + light_outer_range = 2 // luminosity when on + light_color = LIGHT_COLOR_BLOOD_MAGIC /obj/item/flashlight/lantern/shrunken/update_brightness(mob/user = null) if(on) icon_state = "[initial(icon_state)]-on" - set_light(3, 20, LIGHT_COLOR_BLOOD_MAGIC) + set_light(3, 3, 20, l_color = LIGHT_COLOR_BLOOD_MAGIC) else icon_state = initial(icon_state) set_light(0) @@ -109,7 +110,7 @@ /obj/structure/underworld/carriageman/Initialize() . = ..() - set_light(5, 30, LIGHT_COLOR_BLUE) + set_light(5, 4, 30, l_color = LIGHT_COLOR_BLUE) /obj/structure/underworld/carriageman/attack_hand(mob/living/carbon/spirit/user) if(!user.paid) @@ -156,7 +157,7 @@ /obj/structure/underworld/carriage/Initialize() . = ..() - set_light(5, 30, LIGHT_COLOR_BLUE) + set_light(5, 3, 30, l_color = LIGHT_COLOR_BLUE) /obj/structure/underworld/carriage/attack_hand(mob/living/carbon/spirit/user) if(user.paid) @@ -298,7 +299,7 @@ /mob/living/simple_animal/hostile/rogue/demon/Initialize() . = ..() - set_light(2, 2, "#c0523f") + set_light(2, 2, 2, l_color = "#c0523f") ADD_TRAIT(src, TRAIT_IGNOREDAMAGESLOWDOWN, TRAIT_GENERIC) ADD_TRAIT(src, TRAIT_NOPAINSTUN, TRAIT_GENERIC) diff --git a/code/modules/unit_tests/create_and_destroy.dm b/code/modules/unit_tests/create_and_destroy.dm index 1c50c50715..56e288c958 100644 --- a/code/modules/unit_tests/create_and_destroy.dm +++ b/code/modules/unit_tests/create_and_destroy.dm @@ -110,8 +110,6 @@ GLOBAL_VAR_INIT(running_create_and_destroy, FALSE) ignore += typesof(/obj/machinery/vending/custom) ignore += typesof(/obj/vehicle/sealed) ignore += typesof(/obj/mecha) - //spawns a mech, which as above, explodes when deleted - ignore += typesof(/mob/living/simple_animal/hostile/syndicate/mecha_pilot) //these also like to explode if anything else is on their turf or nearby ignore += typesof(/obj/effect/meteor) //ENDS THE FUCKING WORLD. diff --git a/code/modules/uplink/uplink_devices.dm b/code/modules/uplink/uplink_devices.dm deleted file mode 100644 index b07d7768a6..0000000000 --- a/code/modules/uplink/uplink_devices.dm +++ /dev/null @@ -1,78 +0,0 @@ -// A collection of pre-set uplinks, for admin spawns. - -// Radio-like uplink; not an actual radio because this uplink is most commonly -// used for nuke ops, for whom opening the radio GUI and the uplink GUI -// simultaneously is an annoying distraction. -/obj/item/uplink - name = "station bounced radio" - icon = 'icons/obj/radio.dmi' - icon_state = "radio" - item_state = "walkietalkie" - desc = "" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - dog_fashion = /datum/dog_fashion/back - - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT - throw_speed = 3 - throw_range = 7 - w_class = WEIGHT_CLASS_SMALL - -/obj/item/uplink/Initialize(mapload, owner, tc_amount = 20) - . = ..() - AddComponent(/datum/component/uplink, owner, FALSE, TRUE, null, tc_amount) - -/obj/item/uplink/debug - name = "debug uplink" - -/obj/item/uplink/debug/Initialize(mapload, owner, tc_amount = 9000) - . = ..() - var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink) - hidden_uplink.name = "debug uplink" - hidden_uplink.debug = TRUE - -/obj/item/uplink/nuclear/Initialize() - . = ..() - var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink) - hidden_uplink.set_gamemode(/datum/game_mode/nuclear) - -/obj/item/uplink/nuclear/debug - name = "debug nuclear uplink" - -/obj/item/uplink/nuclear/debug/Initialize(mapload, owner, tc_amount = 9000) - . = ..() - var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink) - hidden_uplink.set_gamemode(/datum/game_mode/nuclear) - hidden_uplink.name = "debug nuclear uplink" - hidden_uplink.debug = TRUE - -/obj/item/uplink/nuclear_restricted/Initialize() - . = ..() - var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink) - hidden_uplink.allow_restricted = FALSE - hidden_uplink.set_gamemode(/datum/game_mode/nuclear) - -/obj/item/uplink/clownop/Initialize() - . = ..() - var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink) - hidden_uplink.set_gamemode(/datum/game_mode/nuclear/clown_ops) - -/obj/item/uplink/old - name = "dusty radio" - desc = "" - -/obj/item/uplink/old/Initialize(mapload, owner, tc_amount = 10) - . = ..() - var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink) - hidden_uplink.name = "dusty radio" - -// Multitool uplink -/obj/item/multitool/uplink/Initialize(mapload, owner, tc_amount = 20) - . = ..() - AddComponent(/datum/component/uplink, owner, FALSE, TRUE, null, tc_amount) - -// Pen uplink -/obj/item/pen/uplink/Initialize(mapload, owner, tc_amount = 20) - . = ..() - AddComponent(/datum/component/uplink, owner, TRUE, FALSE, null, tc_amount) diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm deleted file mode 100644 index c2542e5fe5..0000000000 --- a/code/modules/uplink/uplink_items.dm +++ /dev/null @@ -1,1851 +0,0 @@ -GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) - -/proc/get_uplink_items(datum/game_mode/gamemode = null, allow_sales = TRUE, allow_restricted = TRUE) - var/list/filtered_uplink_items = list() - var/list/sale_items = list() - - for(var/path in GLOB.uplink_items) - var/datum/uplink_item/I = new path - if(!I.item) - continue - if(I.include_modes.len) - if(!gamemode && SSticker.mode && !(SSticker.mode.type in I.include_modes)) - continue - if(gamemode && !(gamemode in I.include_modes)) - continue - if(I.exclude_modes.len) - if(!gamemode && SSticker.mode && (SSticker.mode.type in I.exclude_modes)) - continue - if(gamemode && (gamemode in I.exclude_modes)) - continue - if(I.player_minimum && I.player_minimum > GLOB.joined_player_list.len) - continue - if (I.restricted && !allow_restricted) - continue - - if(!filtered_uplink_items[I.category]) - filtered_uplink_items[I.category] = list() - filtered_uplink_items[I.category][I.name] = I - if(I.limited_stock < 0 && !I.cant_discount && I.item && I.cost > 1) - sale_items += I - if(allow_sales) - var/datum/team/nuclear/nuclear_team - if (gamemode == /datum/game_mode/nuclear) // uplink code kind of needs a redesign - nuclear_team = locate() in GLOB.antagonist_teams // the team discounts could be a in a GLOB with this design but it would make sense for them to be team specific... - if (!nuclear_team) - create_uplink_sales(3, "Discounted Gear", 1, sale_items, filtered_uplink_items) - else - if (!nuclear_team.team_discounts) - // create 5 unlimited stock discounts - create_uplink_sales(5, "Discounted Team Gear", -1, sale_items, filtered_uplink_items) - // Create 10 limited stock discounts - create_uplink_sales(10, "Limited Stock Team Gear", 1, sale_items, filtered_uplink_items) - nuclear_team.team_discounts = list("Discounted Team Gear" = filtered_uplink_items["Discounted Team Gear"], "Limited Stock Team Gear" = filtered_uplink_items["Limited Stock Team Gear"]) - else - for(var/cat in nuclear_team.team_discounts) - for(var/item in nuclear_team.team_discounts[cat]) - var/datum/uplink_item/D = nuclear_team.team_discounts[cat][item] - var/datum/uplink_item/O = filtered_uplink_items[initial(D.category)][initial(D.name)] - O.refundable = FALSE - - filtered_uplink_items["Discounted Team Gear"] = nuclear_team.team_discounts["Discounted Team Gear"] - filtered_uplink_items["Limited Stock Team Gear"] = nuclear_team.team_discounts["Limited Stock Team Gear"] - - - return filtered_uplink_items - -/proc/create_uplink_sales(num, category_name, limited_stock, sale_items, uplink_items) - if (num <= 0) - return - - if(!uplink_items[category_name]) - uplink_items[category_name] = list() - - for (var/i in 1 to num) - var/datum/uplink_item/I = pick_n_take(sale_items) - var/datum/uplink_item/A = new I.type - var/discount = A.get_discount() - var/list/disclaimer = list("Void where prohibited.", "Not recommended for children.", "Contains small parts.", "Check local laws for legality in region.", "Do not taunt.", "Not responsible for direct, indirect, incidental or consequential damages resulting from any defect, error or failure to perform.", "Keep away from fire or flames.", "Product is provided \"as is\" without any implied or expressed warranties.", "As seen on TV.", "For recreational use only.", "Use only as directed.", "16% sales tax will be charged for orders originating within Space Nebraska.") - A.limited_stock = limited_stock - I.refundable = FALSE //THIS MAN USES ONE WEIRD TRICK TO GAIN FREE TC, CODERS HATES HIM! - A.refundable = FALSE - if(A.cost >= 20) //Tough love for nuke ops - discount *= 0.5 - A.category = category_name - A.cost = max(round(A.cost * discount),1) - A.name += " ([round(((initial(A.cost)-A.cost)/initial(A.cost))*100)]% off!)" - A.desc += " Normally costs [initial(A.cost)] TC. All sales final. [pick(disclaimer)]" - A.item = I.item - - uplink_items[category_name][A.name] = A - - -/** - * Uplink Items - * - * Items that can be spawned from an uplink. Can be limited by gamemode. -**/ -/datum/uplink_item - var/name = "item name" - var/category = "item category" - var/desc = "" - var/item = null // Path to the item to spawn. - var/refund_path = null // Alternative path for refunds, in case the item purchased isn't what is actually refunded (ie: holoparasites). - var/cost = 0 - var/refund_amount = 0 // specified refund amount in case there needs to be a TC penalty for refunds. - var/refundable = FALSE - var/surplus = 100 // Chance of being included in the surplus crate. - var/cant_discount = FALSE - var/limited_stock = -1 //Setting this above zero limits how many times this item can be bought by the same traitor in a round, -1 is unlimited - var/list/include_modes = list() // Game modes to allow this item in. - var/list/exclude_modes = list() // Game modes to disallow this item from. - var/list/restricted_roles = list() //If this uplink item is only available to certain roles. Roles are dependent on the frequency chip or stored ID. - var/player_minimum //The minimum crew size needed for this item to be added to uplinks. - var/purchase_log_vis = TRUE // Visible in the purchase log? - var/restricted = FALSE // Adds restrictions for VR/Events - var/list/restricted_species //Limits items to a specific species. Hopefully. - var/illegal_tech = TRUE // Can this item be deconstructed to unlock certain techweb research nodes? - -/datum/uplink_item/proc/get_discount() - return pick(4;0.75,2;0.5,1;0.25) - -/datum/uplink_item/proc/purchase(mob/user, datum/component/uplink/U) - var/atom/A = spawn_item(item, user, U) - if(purchase_log_vis && U.purchase_log) - U.purchase_log.LogPurchase(A, src, cost) - -/datum/uplink_item/proc/spawn_item(spawn_path, mob/user, datum/component/uplink/U) - if(!spawn_path) - return - var/atom/A - if(ispath(spawn_path)) - A = new spawn_path(get_turf(user)) - else - A = spawn_path - if(ishuman(user) && istype(A, /obj/item)) - var/mob/living/carbon/human/H = user - if(H.put_in_hands(A)) - to_chat(H, "[A] materializes into your hands!") - return A - to_chat(user, "[A] materializes onto the floor!") - return A - -//Discounts (dynamically filled above) -/datum/uplink_item/discounts - category = "Discounted Gear" - -//All bundles and telecrystals -/datum/uplink_item/bundles_TC - category = "Bundles and Telecrystals" - surplus = 0 - cant_discount = TRUE - -/datum/uplink_item/bundles_TC/chemical - name = "Bioterror bundle" - desc = "For the madman: Contains a handheld Bioterror chem sprayer, a Bioterror foam grenade, a box of lethal chemicals, a dart pistol, \ - box of syringes, Donksoft assault rifle, and some riot darts. Remember: Seal suit and equip internals before use." - item = /obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle - cost = 30 // normally 42 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/bundles_TC/bulldog - name = "Bulldog bundle" - desc = "Lean and mean: Optimized for people that want to get up close and personal. Contains the popular \ - Bulldog shotgun, two 12g buckshot drums, and a pair of Thermal imaging goggles." - item = /obj/item/storage/backpack/duffelbag/syndie/bulldogbundle - cost = 13 // normally 16 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/bundles_TC/c20r - name = "C-20r bundle" - desc = "" - item = /obj/item/storage/backpack/duffelbag/syndie/c20rbundle - cost = 14 // normally 16 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/bundles_TC/cyber_implants - name = "Cybernetic Implants Bundle" - desc = "" - item = /obj/item/storage/box/cyber_implants - cost = 40 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/bundles_TC/medical - name = "Medical bundle" - desc = "The support specialist: Aid your fellow operatives with this medical bundle. Contains a tactical medkit, \ - a Donksoft LMG, a box of riot darts and a pair of magboots to rescue your friends in no-gravity environments." - item = /obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle - cost = 15 // normally 20 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/bundles_TC/sniper - name = "Sniper bundle" - desc = "Elegant and refined: Contains a collapsed sniper rifle in an expensive carrying case, \ - two soporific knockout magazines, a free surplus suppressor, and a sharp-looking tactical turtleneck suit. \ - We'll throw in a free red tie if you order NOW." - item = /obj/item/storage/briefcase/sniperbundle - cost = 20 // normally 26 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/bundles_TC/firestarter - name = "Spetsnaz Pyro bundle" - desc = "For systematic suppression of carbon lifeforms in close quarters: Contains a lethal New Russian backpack spray, Elite hardsuit, \ - Stechkin APS pistol, two magazines, a minibomb and a stimulant syringe. \ - Order NOW and comrade Boris will throw in an extra tracksuit." - item = /obj/item/storage/backpack/duffelbag/syndie/firestarter - cost = 30 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/bundles_TC/contract_kit - name = "Contract Kit" - desc = "The Syndicate have offered you the chance to become a contractor, take on kidnapping contracts for TC and cash payouts. Upon purchase, \ - you'll be granted your own contract uplink embedded within the supplied tablet computer. Additionally, you'll be granted \ - standard contractor gear to help with your mission - comes supplied with the tablet, specialised space suit, chameleon jumpsuit and mask, \ - agent card, specialised contractor baton, and three randomly selected low cost items. Can include otherwise unobtainable items." - item = /obj/item/storage/box/syndicate/contract_kit - cost = 20 - player_minimum = 20 - exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/bundles_TC/bundle_A - name = "Syndi-kit Tactical" - desc = "Syndicate Bundles, also known as Syndi-Kits, are specialized groups of items that arrive in a plain box. \ - These items are collectively worth more than 20 telecrystals, but you do not know which specialization \ - you will receive. May contain discontinued and/or exotic items." - item = /obj/item/storage/box/syndicate/bundle_A - cost = 20 - exclude_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/bundles_TC/bundle_B - name = "Syndi-kit Special" - desc = "Syndicate Bundles, also known as Syndi-Kits, are specialized groups of items that arrive in a plain box. \ - In Syndi-kit Special, you will recieve items used by famous syndicate agents of the past. Collectively worth more than 20 telecrystals, the syndicate loves a good throwback." - item = /obj/item/storage/box/syndicate/bundle_B - cost = 20 - exclude_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/bundles_TC/surplus - name = "Syndicate Surplus Crate" - desc = "A dusty crate from the back of the Syndicate warehouse. Rumored to contain a valuable assortment of items, \ - but you never know. Contents are sorted to always be worth 50 TC." - item = /obj/structure/closet/crate - cost = 20 - player_minimum = 25 - exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - var/starting_crate_value = 50 - -/datum/uplink_item/bundles_TC/surplus/super - name = "Super Surplus Crate" - desc = "A dusty SUPER-SIZED from the back of the Syndicate warehouse. Rumored to contain a valuable assortment of items, \ - but you never know. Contents are sorted to always be worth 125 TC." - cost = 40 - player_minimum = 40 - starting_crate_value = 125 - -/datum/uplink_item/bundles_TC/surplus/purchase(mob/user, datum/component/uplink/U) - var/list/uplink_items = get_uplink_items(SSticker && SSticker.mode? SSticker.mode : null, FALSE) - - var/crate_value = starting_crate_value - var/obj/structure/closet/crate/C = spawn_item(/obj/structure/closet/crate, user, U) - if(U.purchase_log) - U.purchase_log.LogPurchase(C, src, cost) - while(crate_value) - var/category = pick(uplink_items) - var/item = pick(uplink_items[category]) - var/datum/uplink_item/I = uplink_items[category][item] - - if(!I.surplus || prob(100 - I.surplus)) - continue - if(crate_value < I.cost) - continue - crate_value -= I.cost - var/obj/goods = new I.item(C) - if(U.purchase_log) - U.purchase_log.LogPurchase(goods, I, 0) - return C - -/datum/uplink_item/bundles_TC/random - name = "Random Item" - desc = "" - item = /obj/effect/gibspawner/generic // non-tangible item because techwebs use this path to determine illegal tech - cost = 0 - -/datum/uplink_item/bundles_TC/random/purchase(mob/user, datum/component/uplink/U) - var/list/uplink_items = U.uplink_items - var/list/possible_items = list() - for(var/category in uplink_items) - for(var/item in uplink_items[category]) - var/datum/uplink_item/I = uplink_items[category][item] - if(src == I || !I.item) - continue - if(U.telecrystals < I.cost) - continue - if(I.limited_stock == 0) - continue - possible_items += I - - if(possible_items.len) - var/datum/uplink_item/I = pick(possible_items) - SSblackbox.record_feedback("tally", "traitor_random_uplink_items_gotten", 1, initial(I.name)) - U.MakePurchase(user, I) - -/datum/uplink_item/bundles_TC/telecrystal - name = "1 Raw Telecrystal" - desc = "" - item = /obj/item/stack/telecrystal - cost = 1 - // Don't add telecrystals to the purchase_log since - // it's just used to buy more items (including itself!) - purchase_log_vis = FALSE - -/datum/uplink_item/bundles_TC/telecrystal/five - name = "5 Raw Telecrystals" - desc = "" - item = /obj/item/stack/telecrystal/five - cost = 5 - -/datum/uplink_item/bundles_TC/telecrystal/twenty - name = "20 Raw Telecrystals" - desc = "" - item = /obj/item/stack/telecrystal/twenty - cost = 20 - -// Dangerous Items -/datum/uplink_item/dangerous - category = "Conspicuous and Dangerous Weapons" - -/datum/uplink_item/dangerous/rawketlawnchair - name = "84mm Rocket Propelled Grenade Launcher" - desc = "A reusable rocket propelled grenade launcher preloaded with a low-yield 84mm HE round. \ - Guaranteed to send your target out with a bang or your money back!" - item = /obj/item/gun/ballistic/rocketlauncher - cost = 8 - surplus = 30 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/dangerous/pie_cannon - name = "Banana Cream Pie Cannon" - desc = "" - cost = 10 - item = /obj/item/pneumatic_cannon/pie/selfcharge - surplus = 0 - include_modes = list(/datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/dangerous/bananashield - name = "Bananium Energy Shield" - desc = "A clown's most powerful defensive weapon, this personal shield provides near immunity to ranged energy attacks \ - by bouncing them back at the ones who fired them. It can also be thrown to bounce off of people, slipping them, \ - and returning to you even if you miss. WARNING: DO NOT ATTEMPT TO STAND ON SHIELD WHILE DEPLOYED, EVEN IF WEARING ANTI-SLIP SHOES." - item = /obj/item/shield/energy/bananium - cost = 16 - surplus = 0 - include_modes = list(/datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/dangerous/clownsword - name = "Bananium Energy Sword" - desc = "An energy sword that deals no damage, but will slip anyone it contacts, be it by melee attack, thrown \ - impact, or just stepping on it. Beware friendly fire, as even anti-slip shoes will not protect against it." - item = /obj/item/melee/transforming/energy/sword/bananium - cost = 3 - surplus = 0 - include_modes = list(/datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/dangerous/bioterror - name = "Biohazardous Chemical Sprayer" - desc = "A handheld chemical sprayer that allows a wide dispersal of selected chemicals. Especially tailored by the Tiger \ - Cooperative, the deadly blend it comes stocked with will disorient, damage, and disable your foes... \ - Use with extreme caution, to prevent exposure to myself and your fellow operatives." - item = /obj/item/reagent_containers/spray/chemsprayer/bioterror - cost = 20 - surplus = 0 - include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/dangerous/throwingweapons - name = "Box of Throwing Weapons" - desc = "A box of shurikens and reinforced bolas from ancient Earth martial arts. They are highly effective \ - throwing weapons. The bolas can knock a target down and the shurikens will embed into limbs." - item = /obj/item/storage/box/syndie_kit/throwing_weapons - cost = 3 - illegal_tech = FALSE - -/datum/uplink_item/dangerous/shotgun - name = "Bulldog Shotgun" - desc = "A fully-loaded semi-automatic drum-fed shotgun. Compatible with all 12g rounds. Designed for close \ - quarter anti-personnel engagements." - item = /obj/item/gun/ballistic/shotgun/bulldog - cost = 8 - surplus = 40 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/dangerous/smg - name = "C-20r Submachine Gun" - desc = "A fully-loaded Scarborough Arms bullpup submachine gun. The C-20r fires .45 rounds with a \ - 24-round magazine and is compatible with suppressors." - item = /obj/item/gun/ballistic/automatic/c20r - cost = 10 - surplus = 40 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/dangerous/doublesword - name = "Double-Bladed Energy Sword" - desc = "The double-bladed energy sword does slightly more damage than a standard energy sword and will deflect \ - all energy projectiles, but requires two hands to wield." - item = /obj/item/twohanded/dualsaber - player_minimum = 25 - cost = 16 - exclude_modes = list(/datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/dangerous/doublesword/get_discount() - return pick(4;0.8,2;0.65,1;0.5) - -/datum/uplink_item/dangerous/sword - name = "Energy Sword" - desc = "The energy sword is an edged weapon with a blade of pure energy. The sword is small enough to be \ - pocketed when inactive. Activating it produces a loud, distinctive noise." - item = /obj/item/melee/transforming/energy/sword/saber - cost = 8 - exclude_modes = list(/datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/dangerous/shield - name = "Energy Shield" - desc = "An incredibly useful personal shield projector, capable of reflecting energy projectiles and defending \ - against other attacks. Pair with an Energy Sword for a killer combination." - item = /obj/item/shield/energy - cost = 16 - surplus = 20 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/dangerous/flamethrower - name = "Flamethrower" - desc = "A flamethrower, fueled by a portion of highly flammable biotoxins stolen previously from Nanotrasen \ - stations. Make a statement by roasting the filth in their own greed. Use with caution." - item = /obj/item/flamethrower/full/tank - cost = 4 - surplus = 40 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/dangerous/rapid - name = "Gloves of the North Star" - desc = "" - item = /obj/item/clothing/gloves/rapid - cost = 8 - -/datum/uplink_item/dangerous/guardian - name = "Holoparasites" - desc = "Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, they require an \ - organic host as a home base and source of fuel. Holoparasites come in various types and share damage with their host." - item = /obj/item/storage/box/syndie_kit/guardian - cost = 18 - surplus = 0 - exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - player_minimum = 25 - restricted = TRUE - -/datum/uplink_item/dangerous/machinegun - name = "L6 Squad Automatic Weapon" - desc = "A fully-loaded Aussec Armoury belt-fed machine gun. \ - This deadly weapon has a massive 50-round magazine of devastating 7.12x82mm ammunition." - item = /obj/item/gun/ballistic/automatic/l6_saw - cost = 18 - surplus = 0 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/dangerous/carbine - name = "M-90gl Carbine" - desc = "A fully-loaded, specialized three-round burst carbine that fires 5.56mm ammunition from a 30 round magazine \ - with a toggleable 40mm underbarrel grenade launcher." - item = /obj/item/gun/ballistic/automatic/m90 - cost = 18 - surplus = 50 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/dangerous/powerfist - name = "Power Fist" - desc = "The power-fist is a metal gauntlet with a built-in piston-ram powered by an external gas supply.\ - Upon hitting a target, the piston-ram will extend forward to make contact for some serious damage. \ - Using a wrench on the piston valve will allow you to tweak the amount of gas used per punch to \ - deal extra damage and hit targets further. Use a screwdriver to take out any attached tanks." - item = /obj/item/melee/powerfist - cost = 6 - -/datum/uplink_item/dangerous/sniper - name = "Sniper Rifle" - desc = "" - item = /obj/item/gun/ballistic/automatic/sniper_rifle/syndicate - cost = 16 - surplus = 25 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/dangerous/pistol - name = "Stechkin Pistol" - desc = "A small, easily concealable handgun that uses 10mm auto rounds in 8-round magazines and is compatible \ - with suppressors." - item = /obj/item/gun/ballistic/automatic/pistol - cost = 7 - exclude_modes = list(/datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/dangerous/bolt_action - name = "Surplus Rifle" - desc = "" - item = /obj/item/gun/ballistic/rifle/boltaction - cost = 1 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/dangerous/revolver - name = "Syndicate Revolver" - desc = "" - item = /obj/item/gun/ballistic/revolver - cost = 13 - surplus = 50 - exclude_modes = list(/datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/dangerous/foamsmg - name = "Toy Submachine Gun" - desc = "" - item = /obj/item/gun/ballistic/automatic/c20r/toy - cost = 5 - surplus = 0 - include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/dangerous/foammachinegun - name = "Toy Machine Gun" - desc = "A fully-loaded Donksoft belt-fed machine gun. This weapon has a massive 50-round magazine of devastating \ - riot grade darts, that can briefly incapacitate someone in just one volley." - item = /obj/item/gun/ballistic/automatic/l6_saw/toy - cost = 10 - surplus = 0 - include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/dangerous/foampistol - name = "Toy Pistol with Riot Darts" - desc = "An innocent-looking toy pistol designed to fire foam darts. Comes loaded with riot-grade \ - darts effective at incapacitating a target." - item = /obj/item/gun/ballistic/automatic/toy/pistol/riot - cost = 2 - surplus = 10 - -// Stealthy Weapons -/datum/uplink_item/stealthy_weapons - category = "Stealthy and Inconspicuous Weapons" - -/datum/uplink_item/stealthy_weapons/combatglovesplus - name = "Combat Gloves Plus" - desc = "A pair of gloves that are fireproof and electrically insulated, however unlike the regular Combat Gloves these use nanotechnology \ - to teach the martial art of krav maga to the wearer." - item = /obj/item/clothing/gloves/krav_maga/combatglovesplus - cost = 5 - include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - surplus = 0 - -/datum/uplink_item/stealthy_weapons/cqc - name = "CQC Manual" - desc = "" - item = /obj/item/book/granter/martial/cqc - include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - cost = 13 - surplus = 0 - -/datum/uplink_item/stealthy_weapons/dart_pistol - name = "Dart Pistol" - desc = "A miniaturized version of a normal syringe gun. It is very quiet when fired and can fit into any \ - space a small item can." - item = /obj/item/gun/syringe/syndicate - cost = 4 - surplus = 50 - -/datum/uplink_item/stealthy_weapons/dehy_carp - name = "Dehydrated Space Carp" - desc = "Looks like a plush toy carp, but just add water and it becomes a real-life space carp! Activate in \ - your hand before use so it knows not to kill you." - item = /obj/item/toy/plush/carpplushie/dehy_carp - cost = 1 - -/datum/uplink_item/stealthy_weapons/edagger - name = "Energy Dagger" - desc = "" - item = /obj/item/pen/edagger - cost = 2 - -/datum/uplink_item/stealthy_weapons/martialarts - name = "Martial Arts Scroll" - desc = "This scroll contains the secrets of an ancient martial arts technique. You will master unarmed combat, \ - deflecting all ranged weapon fire, but you also refuse to use dishonorable ranged weaponry." - item = /obj/item/book/granter/martial/carp - cost = 17 - surplus = 0 - exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/stealthy_weapons/crossbow - name = "Miniature Energy Crossbow" - desc = "A short bow mounted across a tiller in miniature. \ - Small enough to fit into a pocket or slip into a bag unnoticed. \ - It will synthesize and fire bolts tipped with a debilitating \ - toxin that will damage and disorient targets, causing them to \ - slur as if inebriated. It can produce an infinite number \ - of bolts, but takes time to automatically recharge after each shot." - item = /obj/item/gun/energy/kinetic_accelerator/crossbow - player_minimum = 25 - cost = 10 - surplus = 50 - exclude_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/stealthy_weapons/origami_kit - name = "Boxed Origami Kit" - desc = "This box contains a guide on how to craft masterful works of origami, allowing you to transform normal pieces of paper into \ - perfectly aerodynamic (and potentially lethal) paper airplanes." - item = /obj/item/storage/box/syndie_kit/origami_bundle - cost = 14 - surplus = 0 - exclude_modes = list(/datum/game_mode/nuclear) //clown ops intentionally left in, because that seems like some s-tier shenanigans. - -/datum/uplink_item/stealthy_weapons/traitor_chem_bottle - name = "Poison Kit" - desc = "" - item = /obj/item/storage/box/syndie_kit/chemical - cost = 6 - surplus = 50 - -/datum/uplink_item/stealthy_weapons/romerol_kit - name = "Romerol" - desc = "A highly experimental bioterror agent which creates dormant nodules to be etched into the grey matter of the brain. \ - On death, these nodules take control of the dead body, causing limited revivification, \ - along with slurred speech, aggression, and the ability to infect others with this agent." - item = /obj/item/storage/box/syndie_kit/romerol - cost = 25 - cant_discount = TRUE - -/datum/uplink_item/stealthy_weapons/sleepy_pen - name = "Sleepy Pen" - desc = "A syringe disguised as a functional pen, filled with a potent mix of drugs, including a \ - strong anesthetic and a chemical that prevents the target from speaking. \ - The pen holds one dose of the mixture, and can be refilled with any chemicals. Note that before the target \ - falls asleep, they will be able to move and act." - item = /obj/item/pen/sleepy - cost = 4 - exclude_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/stealthy_weapons/suppressor - name = "Suppressor" - desc = "" - item = /obj/item/suppressor - cost = 3 - surplus = 10 - exclude_modes = list(/datum/game_mode/nuclear/clown_ops) - -// Ammunition -/datum/uplink_item/ammo - category = "Ammunition" - surplus = 40 - -/datum/uplink_item/ammo/pistol - name = "10mm Handgun Magazine" - desc = "" - item = /obj/item/ammo_box/magazine/m10mm - cost = 1 - exclude_modes = list(/datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/ammo/pistolap - name = "10mm Armour Piercing Magazine" - desc = "An additional 8-round 10mm magazine; compatible with the Stechkin Pistol. \ - These rounds are less effective at injuring the target but penetrate protective gear." - item = /obj/item/ammo_box/magazine/m10mm/ap - cost = 2 - exclude_modes = list(/datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/ammo/pistolhp - name = "10mm Hollow Point Magazine" - desc = "An additional 8-round 10mm magazine; compatible with the Stechkin Pistol. \ - These rounds are more damaging but ineffective against armour." - item = /obj/item/ammo_box/magazine/m10mm/hp - cost = 3 - exclude_modes = list(/datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/ammo/pistolfire - name = "10mm Incendiary Magazine" - desc = "An additional 8-round 10mm magazine; compatible with the Stechkin Pistol. \ - Loaded with incendiary rounds which inflict little damage, but ignite the target." - item = /obj/item/ammo_box/magazine/m10mm/fire - cost = 2 - exclude_modes = list(/datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/ammo/shotgun - cost = 2 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/shotgun/bag - name = "12g Ammo Duffel Bag" - desc = "" - item = /obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun - cost = 12 - -/datum/uplink_item/ammo/shotgun/buck - name = "12g Buckshot Drum" - desc = "" - item = /obj/item/ammo_box/magazine/m12g - -/datum/uplink_item/ammo/shotgun/dragon - name = "12g Dragon's Breath Drum" - desc = "An alternative 8-round dragon's breath magazine for use in the Bulldog shotgun. \ - 'I'm a fire starter, twisted fire starter!'" - item = /obj/item/ammo_box/magazine/m12g/dragon - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/shotgun/meteor - name = "12g Meteorslug Shells" - desc = "An alternative 8-round meteorslug magazine for use in the Bulldog shotgun. \ - Great for blasting airlocks off their frames and knocking down enemies." - item = /obj/item/ammo_box/magazine/m12g/meteor - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/shotgun/slug - name = "12g Slug Drum" - desc = "An additional 8-round slug magazine for use with the Bulldog shotgun. \ - Now 8 times less likely to shoot your pals." - cost = 3 - item = /obj/item/ammo_box/magazine/m12g/slug - -/datum/uplink_item/ammo/revolver - name = ".357 Speed Loader" - desc = "A speed loader that contains seven additional .357 Magnum rounds; usable with the Syndicate revolver. \ - For when you really need a lot of things dead." - item = /obj/item/ammo_box/a357 - cost = 4 - exclude_modes = list(/datum/game_mode/nuclear/clown_ops) - illegal_tech = FALSE - -/datum/uplink_item/ammo/a40mm - name = "40mm Grenade" - desc = "A 40mm HE grenade for use with the M-90gl's under-barrel grenade launcher. \ - Your teammates will ask you to not shoot these down small hallways." - item = /obj/item/ammo_casing/a40mm - cost = 2 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/smg/bag - name = ".45 Ammo Duffel Bag" - desc = "" - item = /obj/item/storage/backpack/duffelbag/syndie/ammo/smg - cost = 20 //instead of 27 TC - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/smg - name = ".45 SMG Magazine" - desc = "" - item = /obj/item/ammo_box/magazine/smgm45 - cost = 3 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/sniper - cost = 4 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/sniper/basic - name = ".50 Magazine" - desc = "" - item = /obj/item/ammo_box/magazine/sniper_rounds - -/datum/uplink_item/ammo/sniper/penetrator - name = ".50 Penetrator Magazine" - desc = "A 5-round magazine of penetrator ammo designed for use with .50 sniper rifles. \ - Can pierce walls and multiple enemies." - item = /obj/item/ammo_box/magazine/sniper_rounds/penetrator - cost = 5 - -/datum/uplink_item/ammo/sniper/soporific - name = ".50 Soporific Magazine" - desc = "" - item = /obj/item/ammo_box/magazine/sniper_rounds/soporific - cost = 6 - -/datum/uplink_item/ammo/carbine - name = "5.56mm Toploader Magazine" - desc = "An additional 30-round 5.56mm magazine; suitable for use with the M-90gl carbine. \ - These bullets pack less punch than 7.12x82mm rounds, but they still offer more power than .45 ammo." - item = /obj/item/ammo_box/magazine/m556 - cost = 4 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/machinegun - cost = 6 - surplus = 0 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/machinegun/basic - name = "7.12x82mm Box Magazine" - desc = "A 50-round magazine of 7.12x82mm ammunition for use with the L6 SAW. \ - By the time you need to use this, you'll already be standing on a pile of corpses." - item = /obj/item/ammo_box/magazine/mm712x82 - -/datum/uplink_item/ammo/machinegun/ap - name = "7.12x82mm (Armor Penetrating) Box Magazine" - desc = "A 50-round magazine of 7.12x82mm ammunition for use in the L6 SAW; equipped with special properties \ - to puncture even the most durable armor." - item = /obj/item/ammo_box/magazine/mm712x82/ap - cost = 9 - -/datum/uplink_item/ammo/machinegun/hollow - name = "7.12x82mm (Hollow-Point) Box Magazine" - desc = "A 50-round magazine of 7.12x82mm ammunition for use in the L6 SAW; equipped with hollow-point tips to help \ - with the unarmored masses of crew." - item = /obj/item/ammo_box/magazine/mm712x82/hollow - -/datum/uplink_item/ammo/machinegun/incen - name = "7.12x82mm (Incendiary) Box Magazine" - desc = "A 50-round magazine of 7.12x82mm ammunition for use in the L6 SAW; tipped with a special flammable \ - mixture that'll ignite anyone struck by the bullet. Some men just want to watch the world burn." - item = /obj/item/ammo_box/magazine/mm712x82/incen - -/datum/uplink_item/ammo/rocket - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/rocket/basic - name = "84mm HE Rocket" - desc = "" - item = /obj/item/ammo_casing/caseless/rocket - cost = 4 - -/datum/uplink_item/ammo/rocket/hedp - name = "84mm HEDP Rocket" - desc = "A high-yield HEDP rocket; extremely effective against armored targets, as well as surrounding personnel. \ - Strike fear into the hearts of your enemies." - item = /obj/item/ammo_casing/caseless/rocket/hedp - cost = 6 - -/datum/uplink_item/ammo/pistolaps - name = "9mm Handgun Magazine" - desc = "" - item = /obj/item/ammo_box/magazine/pistolm9mm - cost = 2 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/toydarts - name = "Box of Riot Darts" - desc = "" - item = /obj/item/ammo_box/foambox/riot - cost = 2 - surplus = 0 - illegal_tech = FALSE - -/datum/uplink_item/ammo/bioterror - name = "Box of Bioterror Syringes" - desc = "A box full of preloaded syringes, containing various chemicals that seize up the victim's motor \ - and broca systems, making it impossible for them to move or speak for some time." - item = /obj/item/storage/box/syndie_kit/bioterror - cost = 6 - include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/ammo/bolt_action - name = "Surplus Rifle Clip" - desc = "" - item = /obj/item/ammo_box/a762 - cost = 1 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/dark_gygax/bag - name = "Dark Gygax Ammo Bag" - desc = "" - item = /obj/item/storage/backpack/duffelbag/syndie/ammo/dark_gygax - cost = 4 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/ammo/mauler/bag - name = "Mauler Ammo Bag" - desc = "" - item = /obj/item/storage/backpack/duffelbag/syndie/ammo/mauler - cost = 6 - include_modes = list(/datum/game_mode/nuclear) - -//Grenades and Explosives -/datum/uplink_item/explosives - category = "Grenades and Explosives" - -/datum/uplink_item/explosives/bioterrorfoam - name = "Bioterror Foam Grenade" - desc = "A powerful chemical foam grenade which creates a deadly torrent of foam that will mute, blind, confuse, \ - mutate, and irritate carbon lifeforms. Specially brewed by Tiger Cooperative chemical weapons specialists \ - using additional spore toxin. Ensure suit is sealed before use." - item = /obj/item/grenade/chem_grenade/bioterrorfoam - cost = 5 - surplus = 35 - include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/explosives/bombanana - name = "Bombanana" - desc = "A banana with an explosive taste! discard the peel quickly, as it will explode with the force of a Syndicate minibomb \ - a few seconds after the banana is eaten." - item = /obj/item/reagent_containers/food/snacks/grown/banana/bombanana - cost = 4 //it is a bit cheaper than a minibomb because you have to take off your helmet to eat it, which is how you arm it - surplus = 0 - include_modes = list(/datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/explosives/buzzkill - name = "Buzzkill Grenade Box" - desc = "A box with three grenades that release a swarm of angry bees upon activation. These bees indiscriminately attack friend or foe \ - with random toxins. Courtesy of the BLF and Tiger Cooperative." - item = /obj/item/storage/box/syndie_kit/bee_grenades - cost = 15 - surplus = 35 - include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/explosives/c4 - name = "Composition C-4" - desc = "C-4 is plastic explosive of the common variety Composition C. You can use it to breach walls, sabotage equipment, or connect \ - an assembly to it in order to alter the way it detonates. It can be attached to almost all objects and has a modifiable timer with a \ - minimum setting of 10 seconds." - item = /obj/item/grenade/c4 - cost = 1 - -/datum/uplink_item/explosives/c4bag - name = "Bag of C-4 explosives" - desc = "" - item = /obj/item/storage/backpack/duffelbag/syndie/c4 - cost = 8 //20% discount! - cant_discount = TRUE - -/datum/uplink_item/explosives/x4bag - name = "Bag of X-4 explosives" - desc = "Contains 3 X-4 shaped plastic explosives. Similar to C4, but with a stronger blast that is directional instead of circular. \ - X-4 can be placed on a solid surface, such as a wall or window, and it will blast through the wall, injuring anything on the opposite side, while being safer to the user. \ - For when you want a controlled explosion that leaves a wider, deeper, hole." - item = /obj/item/storage/backpack/duffelbag/syndie/x4 - cost = 4 // - cant_discount = TRUE - -/datum/uplink_item/explosives/clown_bomb_clownops - name = "Clown Bomb" - desc = "The Clown bomb is a hilarious device capable of massive pranks. It has an adjustable timer, \ - with a minimum of 60 seconds, and can be bolted to the floor with a wrench to prevent \ - movement. The bomb is bulky and cannot be moved; upon ordering this item, a smaller beacon will be \ - transported to you that will teleport the actual bomb to it upon activation. Note that this bomb can \ - be defused, and some crew may attempt to do so." - item = /obj/item/sbeacondrop/clownbomb - cost = 15 - surplus = 0 - include_modes = list(/datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/explosives/detomatix - name = "Detomatix PDA Cartridge" - desc = "When inserted into a personal digital assistant, this cartridge gives you four opportunities to \ - detonate PDAs of crewmembers who have their message feature enabled. \ - The concussive effect from the explosion will knock the recipient out for a short period, and deafen them for longer." - item = /obj/item/cartridge/virus/syndicate - cost = 6 - restricted = TRUE - -/datum/uplink_item/explosives/emp - name = "EMP Grenades and Implanter Kit" - desc = "A box that contains five EMP grenades and an EMP implant with three uses. Useful to disrupt communications, \ - security's energy weapons and silicon lifeforms when you're in a tight spot." - item = /obj/item/storage/box/syndie_kit/emp - cost = 2 - -/datum/uplink_item/explosives/virus_grenade - name = "Fungal Tuberculosis Grenade" - desc = "A primed bio-grenade packed into a compact box. Comes with five Bio Virus Antidote Kit (BVAK) \ - autoinjectors for rapid application on up to two targets each, a syringe, and a bottle containing \ - the BVAK solution." - item = /obj/item/storage/box/syndie_kit/tuberculosisgrenade - cost = 12 - surplus = 35 - include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - restricted = TRUE - -/datum/uplink_item/explosives/grenadier - name = "Grenadier's belt" - desc = "" - item = /obj/item/storage/belt/grenade/full - include_modes = list(/datum/game_mode/nuclear) - cost = 22 - surplus = 0 - -/datum/uplink_item/explosives/pizza_bomb - name = "Pizza Bomb" - desc = "A pizza box with a bomb cunningly attached to the lid. The timer needs to be set by opening the box; afterwards, \ - opening the box again will trigger the detonation after the timer has elapsed. Comes with free pizza, for you or your target!" - item = /obj/item/pizzabox/bomb - cost = 6 - surplus = 8 - -/datum/uplink_item/explosives/soap_clusterbang - name = "Slipocalypse Clusterbang" - desc = "" - item = /obj/item/grenade/clusterbuster/soap - cost = 3 - -/datum/uplink_item/explosives/syndicate_bomb - name = "Syndicate Bomb" - desc = "The Syndicate bomb is a fearsome device capable of massive destruction. It has an adjustable timer, \ - with a minimum of 60 seconds, and can be bolted to the floor with a wrench to prevent \ - movement. The bomb is bulky and cannot be moved; upon ordering this item, a smaller beacon will be \ - transported to you that will teleport the actual bomb to it upon activation. Note that this bomb can \ - be defused, and some crew may attempt to do so. \ - The bomb core can be pried out and manually detonated with other explosives." - item = /obj/item/sbeacondrop/bomb - cost = 11 - -/datum/uplink_item/explosives/syndicate_detonator - name = "Syndicate Detonator" - desc = "The Syndicate detonator is a companion device to the Syndicate bomb. Simply press the included button \ - and an encrypted radio frequency will instruct all live Syndicate bombs to detonate. \ - Useful for when speed matters or you wish to synchronize multiple bomb blasts. Be sure to stand clear of \ - the blast radius before using the detonator." - item = /obj/item/syndicatedetonator - cost = 3 - include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/explosives/syndicate_minibomb - name = "Syndicate Minibomb" - desc = "The minibomb is a grenade with a five-second fuse. Upon detonation, it will create a small hull breach \ - in addition to dealing high amounts of damage to nearby personnel." - item = /obj/item/grenade/syndieminibomb - cost = 6 - exclude_modes = list(/datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/explosives/tearstache - name = "Teachstache Grenade" - desc = "A teargas grenade that launches sticky moustaches onto the face of anyone not wearing a clown or mime mask. The moustaches will \ - remain attached to the face of all targets for one minute, preventing the use of breath masks and other such devices." - item = /obj/item/grenade/chem_grenade/teargas/moustache - cost = 3 - surplus = 0 - include_modes = list(/datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/explosives/viscerators - name = "Viscerator Delivery Grenade" - desc = "A unique grenade that deploys a swarm of viscerators upon activation, which will chase down and shred \ - any non-operatives in the area." - item = /obj/item/grenade/spawnergrenade/manhacks - cost = 5 - surplus = 35 - include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - -//Support and Mechs -/datum/uplink_item/support - category = "Support and Mechanized Exosuits" - surplus = 0 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/support/clown_reinforcement - name = "Clown Reinforcements" - desc = "" - item = /obj/item/antag_spawner/nuke_ops/clown - cost = 20 - include_modes = list(/datum/game_mode/nuclear/clown_ops) - restricted = TRUE - -/datum/uplink_item/support/reinforcement - name = "Reinforcements" - desc = "Call in an additional team member. They won't come with any gear, so you'll have to save some telecrystals \ - to arm them as well." - item = /obj/item/antag_spawner/nuke_ops - cost = 25 - refundable = TRUE - include_modes = list(/datum/game_mode/nuclear) - restricted = TRUE - -/datum/uplink_item/support/reinforcement/assault_borg - name = "Syndicate Assault Cyborg" - desc = "A cyborg designed and programmed for systematic extermination of non-Syndicate personnel. \ - Comes equipped with a self-resupplying LMG, a grenade launcher, energy sword, emag, pinpointer, flash and crowbar." - item = /obj/item/antag_spawner/nuke_ops/borg_tele/assault - refundable = TRUE - cost = 65 - restricted = TRUE - -/datum/uplink_item/support/reinforcement/medical_borg - name = "Syndicate Medical Cyborg" - desc = "A combat medical cyborg. Has limited offensive potential, but makes more than up for it with its support capabilities. \ - It comes equipped with a nanite hypospray, a medical beamgun, combat defibrillator, full surgical kit including an energy saw, an emag, pinpointer and flash. \ - Thanks to its organ storage bag, it can perform surgery as well as any humanoid." - item = /obj/item/antag_spawner/nuke_ops/borg_tele/medical - refundable = TRUE - cost = 35 - restricted = TRUE - -/datum/uplink_item/support/reinforcement/saboteur_borg - name = "Syndicate Saboteur Cyborg" - desc = "A streamlined engineering cyborg, equipped with covert modules. Also incapable of leaving the welder in the shuttle. \ - Aside from regular Engineering equipment, it comes with a special destination tagger that lets it traverse disposals networks. \ - Its chameleon projector lets it disguise itself as a Nanotrasen cyborg, on top it has thermal vision and a pinpointer." - item = /obj/item/antag_spawner/nuke_ops/borg_tele/saboteur - refundable = TRUE - cost = 35 - restricted = TRUE - -/datum/uplink_item/support/gygax - name = "Dark Gygax Exosuit" - desc = "A lightweight exosuit, painted in a dark scheme. Its speed and equipment selection make it excellent \ - for hit-and-run style attacks. Features an incendiary carbine, flash bang launcher, teleporter, ion thrusters and a Tesla energy array." - item = /obj/mecha/combat/gygax/dark/loaded - cost = 80 - -/datum/uplink_item/support/honker - name = "Dark H.O.N.K." - desc = "" - item = /obj/mecha/combat/honker/dark/loaded - cost = 80 - include_modes = list(/datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/support/mauler - name = "Mauler Exosuit" - desc = "A massive and incredibly deadly military-grade exosuit. Features long-range targeting, thrust vectoring \ - and deployable smoke. Comes equipped with an LMG, scattershot carbine, missile rack, an antiprojectile armor booster and a Tesla energy array." - item = /obj/mecha/combat/marauder/mauler/loaded - cost = 140 - -// Stealth Items -/datum/uplink_item/stealthy_tools - category = "Stealth and Camouflage Items" - -/datum/uplink_item/stealthy_tools/agent_card - name = "Agent Identification Card" - desc = "Agent cards prevent artificial intelligences from tracking the wearer, and can copy access \ - from other identification cards. The access is cumulative, so scanning one card does not erase the \ - access gained from another. In addition, they can be forged to display a new assignment and name. \ - This can be done an unlimited amount of times. Some Syndicate areas and devices can only be accessed \ - with these cards." - item = /obj/item/card/id/syndicate - cost = 2 - -/datum/uplink_item/stealthy_tools/ai_detector - name = "Artificial Intelligence Detector" - desc = "A functional multitool that turns red when it detects an artificial intelligence watching it, and can be \ - activated to display their exact viewing location and nearby security camera blind spots. Knowing when \ - an artificial intelligence is watching you is useful for knowing when to maintain cover, and finding nearby \ - blind spots can help you identify escape routes." - item = /obj/item/multitool/ai_detect - cost = 1 - -/datum/uplink_item/stealthy_tools/chameleon - name = "Chameleon Kit" - desc = "A set of items that contain chameleon technology allowing you to disguise as pretty much anything on the station, and more! \ - Due to budget cuts, the shoes don't provide protection against slipping." - item = /obj/item/storage/box/syndie_kit/chameleon - cost = 2 - exclude_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/stealthy_tools/chameleon_proj - name = "Chameleon Projector" - desc = "Projects an image across a user, disguising them as an object scanned with it, as long as they don't \ - move the projector from their hand. Disguised users move slowly, and projectiles pass over them." - item = /obj/item/chameleon - cost = 7 - -/datum/uplink_item/stealthy_tools/codespeak_manual - name = "Codespeak Manual" - desc = "Syndicate agents can be trained to use a series of codewords to convey complex information, which sounds like random concepts and drinks to anyone listening. \ - This manual teaches you this Codespeak. You can also hit someone else with the manual in order to teach them. This is the deluxe edition, which has unlimited uses." - item = /obj/item/codespeak_manual/unlimited - cost = 3 - -/datum/uplink_item/stealthy_tools/combatbananashoes - name = "Combat Banana Shoes" - desc = "While making the wearer immune to most slipping attacks like regular combat clown shoes, these shoes \ - can generate a large number of synthetic banana peels as the wearer walks, slipping up would-be pursuers. They also \ - squeak significantly louder." - item = /obj/item/clothing/shoes/clown_shoes/banana_shoes/combat - cost = 6 - surplus = 0 - include_modes = list(/datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/stealthy_tools/emplight - name = "EMP Flashlight" - desc = "A small, self-recharging, short-ranged EMP device disguised as a working flashlight. \ - Useful for disrupting headsets, cameras, doors, lockers and borgs during stealth operations. \ - Attacking a target with this flashlight will direct an EM pulse at it and consumes a charge." - item = /obj/item/flashlight/emp - cost = 4 - surplus = 30 - -/datum/uplink_item/stealthy_tools/mulligan - name = "Mulligan" - desc = "Screwed up and have security on your tail? This handy syringe will give you a completely new identity \ - and appearance." - item = /obj/item/reagent_containers/syringe/mulligan - cost = 4 - surplus = 30 - exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/stealthy_tools/syndigaloshes - name = "No-Slip Chameleon Shoes" - desc = "These shoes will allow the wearer to run on wet floors and slippery objects without falling down. \ - They do not work on heavily lubricated surfaces." - item = /obj/item/clothing/shoes/chameleon/noslip - cost = 2 - exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - player_minimum = 20 - -/datum/uplink_item/stealthy_tools/syndigaloshes/nuke - item = /obj/item/clothing/shoes/chameleon/noslip - cost = 4 - exclude_modes = list() - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/stealthy_tools/jammer - name = "Radio Jammer" - desc = "" - item = /obj/item/jammer - cost = 5 - -/datum/uplink_item/stealthy_tools/smugglersatchel - name = "Smuggler's Satchel" - desc = "This satchel is thin enough to be hidden in the gap between plating and tiling; great for stashing \ - your stolen goods. Comes with a crowbar, a floor tile and some contraband inside." - item = /obj/item/storage/backpack/satchel/flat/with_tools - cost = 1 - surplus = 30 - -//Space Suits and Hardsuits -/datum/uplink_item/suits - category = "Space Suits and Hardsuits" - surplus = 40 - -/datum/uplink_item/suits/space_suit - name = "Syndicate Space Suit" - desc = "This red and black Syndicate space suit is less encumbering than Nanotrasen variants, \ - fits inside bags, and has a weapon slot. Nanotrasen crew members are trained to report red space suit \ - sightings, however." - item = /obj/item/storage/box/syndie_kit/space - cost = 4 - -/datum/uplink_item/suits/hardsuit - name = "Syndicate Hardsuit" - desc = "The feared suit of a Syndicate nuclear agent. Features slightly better armoring and a built in jetpack \ - that runs off standard atmospheric tanks. Toggling the suit in and out of \ - combat mode will allow you all the mobility of a loose fitting uniform without sacrificing armoring. \ - Additionally the suit is collapsible, making it small enough to fit within a backpack. \ - Nanotrasen crew who spot these suits are known to panic." - item = /obj/item/clothing/suit/space/hardsuit/syndi - cost = 8 - exclude_modes = list(/datum/game_mode/nuclear) //you can't buy it in nuke, because the elite hardsuit costs the same while being better - -/datum/uplink_item/suits/hardsuit/elite - name = "Elite Syndicate Hardsuit" - desc = "An upgraded, elite version of the Syndicate hardsuit. It features fireproofing, and also \ - provides the user with superior armor and mobility compared to the standard Syndicate hardsuit." - item = /obj/item/clothing/suit/space/hardsuit/syndi/elite - cost = 8 - include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - exclude_modes = list() - -/datum/uplink_item/suits/hardsuit/shielded - name = "Shielded Syndicate Hardsuit" - desc = "An upgraded version of the standard Syndicate hardsuit. It features a built-in energy shielding system. \ - The shields can handle up to three impacts within a short duration and will rapidly recharge while not under fire." - item = /obj/item/clothing/suit/space/hardsuit/shielded/syndi - cost = 30 - include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - exclude_modes = list() - -// Devices and Tools -/datum/uplink_item/device_tools - category = "Devices and Tools" - -/datum/uplink_item/device_tools/cutouts - name = "Adaptive Cardboard Cutouts" - desc = "These cardboard cutouts are coated with a thin material that prevents discoloration and makes the images on them appear more lifelike. \ - This pack contains three as well as a crayon for changing their appearances." - item = /obj/item/storage/box/syndie_kit/cutouts - cost = 1 - surplus = 20 - -/datum/uplink_item/device_tools/assault_pod - name = "Assault Pod Targeting Device" - desc = "" - item = /obj/item/assault_pod - cost = 30 - surplus = 0 - include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - restricted = TRUE - -/datum/uplink_item/device_tools/binary - name = "Binary Translator Key" - desc = "A key that, when inserted into a radio headset, allows you to listen to and talk with silicon-based lifeforms, \ - such as AI units and cyborgs, over their private binary channel. Caution should \ - be taken while doing this, as unless they are allied with you, they are programmed to report such intrusions." - item = /obj/item/encryptionkey/binary - cost = 5 - surplus = 75 - restricted = TRUE - -/datum/uplink_item/device_tools/magboots - name = "Blood-Red Magboots" - desc = "A pair of magnetic boots with a Syndicate paintjob that assist with freer movement in space or on-station \ - during gravitational generator failures. These reverse-engineered knockoffs of Nanotrasen's \ - 'Advanced Magboots' slow you down in simulated-gravity environments much like the standard issue variety." - item = /obj/item/clothing/shoes/magboots/syndie - cost = 2 - include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/device_tools/briefcase_launchpad - name = "Briefcase Launchpad" - desc = "A briefcase containing a launchpad, a device able to teleport items and people to and from targets up to eight tiles away from the briefcase. \ - Also includes a remote control, disguised as an ordinary folder. Touch the briefcase with the remote to link it." - surplus = 0 - item = /obj/item/storage/briefcase/launchpad - cost = 6 - -/datum/uplink_item/device_tools/camera_bug - name = "Camera Bug" - desc = "Enables you to view all cameras on the main network, set up motion alerts and track a target. \ - Bugging cameras allows you to disable them remotely." - item = /obj/item/camera_bug - cost = 1 - surplus = 90 - -/datum/uplink_item/device_tools/military_belt - name = "Chest Rig" - desc = "" - item = /obj/item/storage/belt/military - cost = 1 - -/datum/uplink_item/device_tools/emag - name = "Cryptographic Sequencer" - desc = "The cryptographic sequencer, electromagnetic card, or emag, is a small card that unlocks hidden functions \ - in electronic devices, subverts intended functions, and easily breaks security mechanisms." - item = /obj/item/card/emag - cost = 6 - -/datum/uplink_item/device_tools/fakenucleardisk - name = "Decoy Nuclear Authentication Disk" - desc = "It's just a normal disk. Visually it's identical to the real deal, but it won't hold up under closer scrutiny by the Captain. \ - Don't try to give this to us to complete your objective, we know better!" - item = /obj/item/disk/nuclear/fake - cost = 1 - surplus = 1 - -/datum/uplink_item/device_tools/frame - name = "F.R.A.M.E. PDA Cartridge" - desc = "When inserted into a personal digital assistant, this cartridge gives you five PDA viruses which \ - when used cause the targeted PDA to become a new uplink with zero TCs, and immediately become unlocked. \ - You will receive the unlock code upon activating the virus, and the new uplink may be charged with \ - telecrystals normally." - item = /obj/item/cartridge/virus/frame - cost = 4 - restricted = TRUE - -/datum/uplink_item/device_tools/failsafe - name = "Failsafe Uplink Code" - desc = "" - item = /obj/effect/gibspawner/generic - cost = 1 - surplus = 0 - restricted = TRUE - exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/device_tools/failsafe/spawn_item(spawn_path, mob/user, datum/component/uplink/U) - if(!U) - return - U.failsafe_code = U.generate_code() - var/code = "[islist(U.failsafe_code) ? english_list(U.failsafe_code) : U.failsafe_code]" - to_chat(user, "The new failsafe code for this uplink is now : [code].") - if(user.mind) - user.mind.store_memory("Failsafe code for [U.parent] : [code]") - return U.parent //For log icon - -/datum/uplink_item/device_tools/toolbox - name = "Full Syndicate Toolbox" - desc = "The Syndicate toolbox is a suspicious black and red. It comes loaded with a full tool set including a \ - multitool and combat gloves that are resistant to shocks and heat." - item = /obj/item/storage/toolbox/syndicate - cost = 1 - -/datum/uplink_item/device_tools/hacked_module - name = "Hacked AI Law Upload Module" - desc = "When used with an upload console, this module allows you to upload priority laws to an artificial intelligence. \ - Be careful with wording, as artificial intelligences may look for loopholes to exploit." - item = /obj/item/aiModule/syndicate - cost = 9 - -/datum/uplink_item/device_tools/hypnotic_flash - name = "Hypnotic Flash" - desc = "" - item = /obj/item/assembly/flash/hypnotic - cost = 7 - -/datum/uplink_item/device_tools/medgun - name = "Medbeam Gun" - desc = "A wonder of Syndicate engineering, the Medbeam gun, or Medi-Gun enables a medic to keep his fellow \ - operatives in the fight, even while under fire. Don't cross the streams!" - item = /obj/item/gun/medbeam - cost = 15 - include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/device_tools/singularity_beacon - name = "Power Beacon" - desc = "When screwed to wiring attached to an electric grid and activated, this large device pulls any \ - active gravitational singularities or tesla balls towards it. This will not work when the engine is still \ - in containment. Because of its size, it cannot be carried. Ordering this \ - sends you a small beacon that will teleport the larger beacon to your location upon activation." - item = /obj/item/sbeacondrop - cost = 10 - -/datum/uplink_item/device_tools/powersink - name = "Power Sink" - desc = "When screwed to wiring attached to a power grid and activated, this large device lights up and places excessive \ - load on the grid, causing a station-wide blackout. The sink is large and cannot be stored in most \ - traditional bags and boxes. Caution: Will explode if the powernet contains sufficient amounts of energy." - item = /obj/item/powersink - cost = 10 - -/datum/uplink_item/device_tools/rad_laser - name = "Radioactive Microlaser" - desc = "A radioactive microlaser disguised as a standard Nanotrasen health analyzer. When used, it emits a \ - powerful burst of radiation, which, after a short delay, can incapacitate all but the most protected \ - of humanoids. It has two settings: intensity, which controls the power of the radiation, \ - and wavelength, which controls the delay before the effect kicks in." - item = /obj/item/healthanalyzer/rad_laser - cost = 3 - -/datum/uplink_item/device_tools/stimpack - name = "Stimpack" - desc = "Stimpacks, the tool of many great heroes, make you nearly immune to stuns and knockdowns for about \ - 5 minutes after injection." - item = /obj/item/reagent_containers/hypospray/medipen/stimulants - cost = 5 - surplus = 90 - -/datum/uplink_item/device_tools/medkit - name = "Syndicate Combat Medic Kit" - desc = "This first aid kit is a suspicious brown and red. Included is a combat stimulant injector \ - for rapid healing, a medical night vision HUD for quick identification of injured personnel, \ - and other supplies helpful for a field medic." - item = /obj/item/storage/firstaid/tactical - cost = 4 - include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - -/datum/uplink_item/device_tools/soap - name = "Syndicate Soap" - desc = "A sinister-looking surfactant used to clean blood stains to hide murders and prevent DNA analysis. \ - You can also drop it underfoot to slip people." - item = /obj/item/soap/syndie - cost = 1 - surplus = 50 - -/datum/uplink_item/device_tools/surgerybag - name = "Syndicate Surgery Duffel Bag" - desc = "The Syndicate surgery duffel bag is a toolkit containing all surgery tools, surgical drapes, \ - a Syndicate brand MMI, a straitjacket, and a muzzle." - item = /obj/item/storage/backpack/duffelbag/syndie/surgery - cost = 3 - -/datum/uplink_item/device_tools/encryptionkey - name = "Syndicate Encryption Key" - desc = "A key that, when inserted into a radio headset, allows you to listen to all station department channels \ - as well as talk on an encrypted Syndicate channel with other agents that have the same key." - item = /obj/item/encryptionkey/syndicate - cost = 2 - surplus = 75 - restricted = TRUE - -/datum/uplink_item/device_tools/syndietome - name = "Syndicate Tome" - desc = "Using rare artifacts acquired at great cost, the Syndicate has reverse engineered \ - the seemingly magical books of a certain cult. Though lacking the esoteric abilities \ - of the originals, these inferior copies are still quite useful, being able to provide \ - both weal and woe on the battlefield, even if they do occasionally bite off a finger." - item = /obj/item/storage/book/bible/syndicate - cost = 5 - -/datum/uplink_item/device_tools/thermal - name = "Thermal Imaging Glasses" - desc = "These goggles can be turned to resemble common eyewear found throughout the station. \ - They allow you to see organisms through walls by capturing the upper portion of the infrared light spectrum, \ - emitted as heat and light by objects. Hotter objects, such as warm bodies, cybernetic organisms \ - and artificial intelligence cores emit more of this light than cooler objects like walls and airlocks." - item = /obj/item/clothing/glasses/thermal/syndi - cost = 4 - -/datum/uplink_item/device_tools/potion - name = "Syndicate Sentience Potion" - item = /obj/item/slimepotion/slime/sentience/nuclear - desc = "A potion recovered at great risk by undercover Syndicate operatives and then subsequently modified with Syndicate technology. \ - Using it will make any animal sentient, and bound to serve you, as well as implanting an internal radio for communication and an internal ID card for opening doors." - cost = 4 - include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - restricted = TRUE - - -/datum/uplink_item/device_tools/suspiciousphone - name = "Protocol CRAB-17 Phone" - desc = "The Protocol CRAB-17 Phone, a phone borrowed from an unknown third party, it can be used to crash the space market, funneling the losses of the crew to your bank account.\ - The crew can move their funds to a new banking site though, unless they HODL, in which case they deserve it." - item = /obj/item/suspiciousphone - restricted = TRUE - cost = 7 - limited_stock = 1 - -// Implants -/datum/uplink_item/implants - category = "Implants" - surplus = 50 - -/datum/uplink_item/implants/adrenal - name = "Adrenal Implant" - desc = "An implant injected into the body, and later activated at the user's will. It will inject a chemical \ - cocktail which lets you push myself harder to get out of sticky situations. Avoid large doses if possible." - item = /obj/item/storage/box/syndie_kit/imp_adrenal - cost = 8 - player_minimum = 25 - -/datum/uplink_item/implants/antistun - name = "CNS Rebooter Implant" - desc = "" - item = /obj/item/autosurgeon/anti_stun - cost = 12 - surplus = 0 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/implants/freedom - name = "Freedom Implant" - desc = "An implant injected into the body and later activated at the user's will. It will attempt to free the \ - user from common restraints such as handcuffs." - item = /obj/item/storage/box/syndie_kit/imp_freedom - cost = 5 - -/datum/uplink_item/implants/microbomb - name = "Microbomb Implant" - desc = "An implant injected into the body, and later activated either manually or automatically upon death. \ - The more implants inside of you, the higher the explosive power. \ - This will permanently destroy your body, however." - item = /obj/item/storage/box/syndie_kit/imp_microbomb - cost = 2 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/implants/macrobomb - name = "Macrobomb Implant" - desc = "An implant injected into the body, and later activated either manually or automatically upon death. \ - Upon death, releases a massive explosion that will wipe out everything nearby." - item = /obj/item/storage/box/syndie_kit/imp_macrobomb - cost = 20 - include_modes = list(/datum/game_mode/nuclear) - restricted = TRUE - -/datum/uplink_item/implants/radio - name = "Internal Syndicate Radio Implant" - desc = "An implant injected into the body, allowing the use of an internal Syndicate radio. \ - Used just like a regular headset, but can be disabled to use external headsets normally and to avoid detection." - item = /obj/item/storage/box/syndie_kit/imp_radio - cost = 4 - restricted = TRUE - -/datum/uplink_item/implants/reviver - name = "Reviver Implant" - desc = "" - item = /obj/item/autosurgeon/reviver - cost = 8 - surplus = 0 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/implants/stealthimplant - name = "Stealth Implant" - desc = "This one-of-a-kind implant will make you almost invisible if you play your cards right. \ - On activation, it will conceal you inside a chameleon cardboard box that is only revealed once someone bumps into it." - item = /obj/item/storage/box/syndie_kit/imp_stealth - cost = 8 - -/datum/uplink_item/implants/storage - name = "Storage Implant" - desc = "An implant injected into the body, and later activated at the user's will. It will open a small bluespace \ - pocket capable of storing two regular-sized items." - item = /obj/item/storage/box/syndie_kit/imp_storage - cost = 8 - -/datum/uplink_item/implants/thermals - name = "Thermal Eyes" - desc = "" - item = /obj/item/autosurgeon/thermal_eyes - cost = 8 - surplus = 0 - include_modes = list(/datum/game_mode/nuclear) - -/datum/uplink_item/implants/uplink - name = "Uplink Implant" - desc = "An implant injected into the body, and later activated at the user's will. Has no telecrystals and must be charged by the use of physical telecrystals. \ - Undetectable (except via surgery), and excellent for escaping confinement." - item = /obj/item/storage/box/syndie_kit/imp_uplink - cost = 4 - // An empty uplink is kinda useless. - surplus = 0 - restricted = TRUE - -/datum/uplink_item/implants/xray - name = "X-ray Vision Implant" - desc = "" - item = /obj/item/autosurgeon/xray_eyes - cost = 10 - surplus = 0 - include_modes = list(/datum/game_mode/nuclear) - - -//Race-specific items -/datum/uplink_item/race_restricted - category = "Species-Restricted" - exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - surplus = 0 - -/datum/uplink_item/race_restricted/syndilamp - name = "Extra-Bright Lantern" - desc = "We heard that moths such as myself really like lamps, so we decided to grant you early access to a prototype \ - Syndicate brand \"Extra-Bright Lantern™\". Enjoy." - cost = 2 - item = /obj/item/flashlight/lantern/syndicate - restricted_species = list("moth") - -// Role-specific items -/datum/uplink_item/role_restricted - category = "Role-Restricted" - exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - surplus = 0 - -/datum/uplink_item/role_restricted/ancient_jumpsuit - name = "Ancient Jumpsuit" - desc = "" - item = /obj/item/clothing/under/color/grey/glorf - cost = 20 - restricted_roles = list("Assistant") - surplus = 0 - -/datum/uplink_item/role_restricted/oldtoolboxclean - name = "Ancient Toolbox" - desc = "" - item = /obj/item/storage/toolbox/mechanical/old/clean - cost = 2 - restricted_roles = list("Assistant") - surplus = 0 - -/datum/uplink_item/role_restricted/pie_cannon - name = "Banana Cream Pie Cannon" - desc = "" - cost = 10 - item = /obj/item/pneumatic_cannon/pie/selfcharge - restricted_roles = list("Clown") - surplus = 0 //No fun unless you're the clown! - -/datum/uplink_item/role_restricted/blastcannon - name = "Blast Cannon" - desc = "A highly specialized weapon, the Blast Cannon is actually relatively simple. It contains an attachment for a tank transfer valve mounted to an angled pipe specially constructed \ - withstand extreme pressure and temperatures, and has a mechanical trigger for triggering the transfer valve. Essentially, it turns the explosive force of a bomb into a narrow-angle \ - blast wave \"projectile\". Aspiring scientists may find this highly useful, as forcing the pressure shockwave into a narrow angle seems to be able to bypass whatever quirk of physics \ - disallows explosive ranges above a certain distance, allowing for the device to use the theoretical yield of a transfer valve bomb, instead of the factual yield." - item = /obj/item/gun/blastcannon - cost = 14 //High cost because of the potential for extreme damage in the hands of a skilled scientist. - restricted_roles = list("Research Director", "Scientist") - -/datum/uplink_item/role_restricted/gorillacubes - name = "Box of Gorilla Cubes" - desc = "A box with three Waffle Co. brand gorilla cubes. Eat big to get big. \ - Caution: Product may rehydrate when exposed to water." - item = /obj/item/storage/box/gorillacubes - cost = 6 - restricted_roles = list("Geneticist", "Chief Medical Officer") - -/* -/datum/uplink_item/role_restricted/brainwash_disk - name = "Brainwashing Surgery Program" - desc = "A disk containing the procedure to perform a brainwashing surgery, allowing you to implant an objective onto a target. \ - Insert into an Operating Console to enable the procedure." - item = /obj/item/disk/surgery/brainwashing - restricted_roles = list("Medical Doctor", "Chief Medical Officer", "Roboticist") - cost = 5 -*/ - -/datum/uplink_item/role_restricted/clown_bomb - name = "Clown Bomb" - desc = "The Clown bomb is a hilarious device capable of massive pranks. It has an adjustable timer, \ - with a minimum of 60 seconds, and can be bolted to the floor with a wrench to prevent \ - movement. The bomb is bulky and cannot be moved; upon ordering this item, a smaller beacon will be \ - transported to you that will teleport the actual bomb to it upon activation. Note that this bomb can \ - be defused, and some crew may attempt to do so." - item = /obj/item/sbeacondrop/clownbomb - cost = 15 - restricted_roles = list("Clown") - - -/datum/uplink_item/role_restricted/spider_injector - name = "Australicus Slime Mutator" - desc = "Crikey mate, it's been a wild travel from the Australicus sector but we've managed to get \ - some special spider extract from the giant spiders down there. Use this injector on a gold slime core \ - to create a few of the same type of spiders we found on the planets over there. They're a bit tame until you \ - also give them a bit of sentience though." - item = /obj/item/reagent_containers/syringe/spider_extract - cost = 10 - restricted_roles = list("Research Director", "Scientist", "Roboticist") - -/datum/uplink_item/role_restricted/clowncar - name = "Clown Car" - desc = "The Clown Car is the ultimate transportation method for any worthy clown! \ - Simply insert your bikehorn and get in, and get ready to have the funniest ride of your life! \ - You can ram any spacemen you come across and stuff them into your car, kidnapping them and locking them inside until \ - someone saves them or they manage to crawl out. Be sure not to ram into any walls or vending machines, as the springloaded seats \ - are very sensitive. Now with our included lube defense mechanism which will protect you against any angry shitcurity! \ - Premium features can be unlocked with a cryptographic sequencer!" - item = /obj/vehicle/sealed/car/clowncar - cost = 20 - restricted_roles = list("Clown") - -/datum/uplink_item/role_restricted/concealed_weapon_bay - name = "Concealed Weapon Bay" - desc = "A modification for non-combat mechas that allows them to equip one piece of equipment designed for combat mechs. \ - It also hides the equipped weapon from plain sight. \ - Only one can fit on a mecha." - item = /obj/item/mecha_parts/concealed_weapon_bay - cost = 3 - restricted_roles = list("Roboticist", "Research Director") - -/datum/uplink_item/role_restricted/haunted_magic_eightball - name = "Haunted Magic Eightball" - desc = "Most magic eightballs are toys with dice inside. Although identical in appearance to the harmless toys, this occult device reaches into the spirit world to find its answers. \ - Be warned, that spirits are often capricious or just little assholes. To use, simply speak your question aloud, then begin shaking." - item = /obj/item/toy/eightball/haunted - cost = 2 - restricted_roles = list("Curator") - limited_stock = 1 //please don't spam deadchat - -/datum/uplink_item/role_restricted/his_grace - name = "His Grace" - desc = "An incredibly dangerous weapon recovered from a station overcome by the grey tide. Once activated, He will thirst for blood and must be used to kill to sate that thirst. \ - His Grace grants gradual regeneration and complete stun immunity to His wielder, but be wary: if He gets too hungry, He will become impossible to drop and eventually kill you if not fed. \ - However, if left alone for long enough, He will fall back to slumber. \ - To activate His Grace, simply unlatch Him." - item = /obj/item/his_grace - cost = 20 - restricted_roles = list("Chaplain") - surplus = 5 //Very low chance to get it in a surplus crate even without being the chaplain - -/datum/uplink_item/role_restricted/explosive_hot_potato - name = "Exploding Hot Potato" - desc = "A potato rigged with explosives. On activation, a special mechanism is activated that prevents it from being dropped. \ - The only way to get rid of it if you are holding it is to attack someone else with it, causing it to latch to that person instead." - item = /obj/item/hot_potato/syndicate - cost = 4 - surplus = 0 - restricted_roles = list("Cook", "Botanist", "Clown", "Mime") - -/datum/uplink_item/role_restricted/ez_clean_bundle - name = "EZ Clean Grenade Bundle" - desc = "A box with three cleaner grenades using the trademark Waffle Co. formula. Serves as a cleaner and causes acid damage to anyone standing nearby. \ - The acid only affects carbon-based creatures." - item = /obj/item/storage/box/syndie_kit/ez_clean - cost = 6 - surplus = 20 - restricted_roles = list("Janitor") - -/datum/uplink_item/role_restricted/mimery - name = "Guide to Advanced Mimery Series" - desc = "The classical two part series on how to further hone your mime skills. Upon studying the series, the user should be able to make 3x1 invisible walls, and shoot bullets out of their fingers. \ - Obviously only works for Mimes." - cost = 12 - item = /obj/item/storage/box/syndie_kit/mimery - restricted_roles = list("Mime") - surplus = 0 - -/datum/uplink_item/role_restricted/pressure_mod - name = "Kinetic Accelerator Pressure Mod" - desc = "A modification kit which allows Kinetic Accelerators to do greatly increased damage while indoors. \ - Occupies 35% mod capacity." - item = /obj/item/borg/upgrade/modkit/indoors - cost = 5 //you need two for full damage, so total of 10 for maximum damage - limited_stock = 2 //you can't use more than two! - restricted_roles = list("Shaft Miner") - -/datum/uplink_item/role_restricted/magillitis_serum - name = "Magillitis Serum Autoinjector" - desc = "A single-use autoinjector which contains an experimental serum that causes rapid muscular growth in Hominidae. \ - Side-affects may include hypertrichosis, violent outbursts, and an unending affinity for bananas." - item = /obj/item/reagent_containers/hypospray/medipen/magillitis - cost = 15 - restricted_roles = list("Geneticist", "Chief Medical Officer") - -/datum/uplink_item/role_restricted/modified_syringe_gun - name = "Modified Syringe Gun" - desc = "" - item = /obj/item/gun/syringe/dna - cost = 14 - restricted_roles = list("Geneticist", "Chief Medical Officer") - -/datum/uplink_item/role_restricted/chemical_gun - name = "Reagent Dartgun" - desc = "" - item = /obj/item/gun/chem - cost = 12 - restricted_roles = list("Chemist", "Chief Medical Officer") - -/datum/uplink_item/role_restricted/reverse_bear_trap - name = "Reverse Bear Trap" - desc = "An ingenious execution device worn on (or forced onto) the head. Arming it starts a 1-minute kitchen timer mounted on the bear trap. When it goes off, the trap's jaws will \ - violently open, instantly killing anyone wearing it by tearing their jaws in half. To arm, attack someone with it while they're not wearing headgear, and you will force it onto their \ - head after three seconds uninterrupted." - cost = 5 - item = /obj/item/reverse_bear_trap - restricted_roles = list("Clown") - -/datum/uplink_item/role_restricted/reverse_revolver - name = "Reverse Revolver" - //drop your weapon, then watch as the greedy corporate pigs blow their own brains all over the wall. - desc = "The revolver itself is actually real. Only clumsy people, and clowns, can fire it normally. Comes in a box of hugs. Honk." - cost = 14 - item = /obj/item/storage/box/hug/reverse_revolver - restricted_roles = list("Clown") - -// Pointless -/datum/uplink_item/badass - category = "(Pointless) Badassery" - surplus = 0 - -/datum/uplink_item/badass/costumes/obvious_chameleon - name = "Broken Chameleon Kit" - desc = "A set of items that contain chameleon technology allowing you to disguise as pretty much anything on the station, and more! \ - Please note that this kit did NOT pass quality control." - item = /obj/item/storage/box/syndie_kit/chameleon/broken - -/datum/uplink_item/badass/costumes - surplus = 0 - include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) - cost = 4 - cant_discount = TRUE - -/datum/uplink_item/badass/costumes/centcom_official - name = "CentCom Official Costume" - //their nuclear disk and weapons system, and then when they decline, pull out a fully automatic rifle and gun down the Captain. - desc = "Radio headset does not include encryption key. No gun included." - item = /obj/item/storage/box/syndie_kit/centcom_costume - -/datum/uplink_item/badass/costumes/clown - name = "Clown Costume" - desc = "" - item = /obj/item/storage/backpack/duffelbag/clown/syndie - -/datum/uplink_item/badass/balloon - name = "Syndicate Balloon" - desc = "For showing that you are THE BOSS: A useless red balloon with the Syndicate logo on it. \ - Can blow the deepest of covers." - item = /obj/item/toy/balloon/syndicate - cost = 20 - cant_discount = TRUE - illegal_tech = FALSE - -/datum/uplink_item/badass/syndiecash - name = "Syndicate Briefcase Full of Cash" - desc = "A secure briefcase containing 5000 space credits. Useful for bribing personnel, or purchasing goods \ - and services at lucrative prices. The briefcase also feels a little heavier to hold; it has been \ - manufactured to pack a little bit more of a punch if your client needs some convincing." - item = /obj/item/storage/secure/briefcase/syndie - cost = 1 - restricted = TRUE - -/datum/uplink_item/badass/syndiecards - name = "Syndicate Playing Cards" - desc = "A special deck of space-grade playing cards with a mono-molecular edge and metal reinforcement, \ - making them slightly more robust than a normal deck of cards. \ - You can also play card games with them or leave them on your victims." - item = /obj/item/toy/cards/deck/syndicate - cost = 1 - surplus = 40 - -/datum/uplink_item/badass/syndiecigs - name = "Syndicate Smokes" - desc = "" - item = /obj/item/storage/fancy/cigarettes/cigpack_syndicate - cost = 2 - illegal_tech = FALSE diff --git a/code/modules/uplink/uplink_purchase_log.dm b/code/modules/uplink/uplink_purchase_log.dm deleted file mode 100644 index 293191b170..0000000000 --- a/code/modules/uplink/uplink_purchase_log.dm +++ /dev/null @@ -1,76 +0,0 @@ -GLOBAL_LIST(uplink_purchase_logs_by_key) //assoc key = /datum/uplink_purchase_log - -/datum/uplink_purchase_log - var/owner - var/list/purchase_log //assoc path-of-item = /datum/uplink_purchase_entry - var/total_spent = 0 - -/datum/uplink_purchase_log/New(_owner, datum/component/uplink/_parent) - owner = _owner - LAZYINITLIST(GLOB.uplink_purchase_logs_by_key) - if(owner) - if(GLOB.uplink_purchase_logs_by_key[owner]) - stack_trace("WARNING: DUPLICATE PURCHASE LOGS DETECTED. [_owner] [_parent] [_parent.type]") - MergeWithAndDel(GLOB.uplink_purchase_logs_by_key[owner]) - GLOB.uplink_purchase_logs_by_key[owner] = src - purchase_log = list() - -/datum/uplink_purchase_log/Destroy() - purchase_log = null - if(GLOB.uplink_purchase_logs_by_key[owner] == src) - GLOB.uplink_purchase_logs_by_key -= owner - return ..() - -/datum/uplink_purchase_log/proc/MergeWithAndDel(datum/uplink_purchase_log/other) - if(!istype(other)) - return - . = owner == other.owner - if(!.) - return - for(var/hash in other.purchase_log) - if(!purchase_log[hash]) - purchase_log[hash] = other.purchase_log[hash] - else - var/datum/uplink_purchase_entry/UPE = purchase_log[hash] - var/datum/uplink_purchase_entry/UPE_O = other.purchase_log[hash] - UPE.amount_purchased += UPE_O.amount_purchased - qdel(other) - -/datum/uplink_purchase_log/proc/TotalTelecrystalsSpent() - . = total_spent - -/datum/uplink_purchase_log/proc/generate_render(show_key = TRUE) - . = "" - for(var/hash in purchase_log) - var/datum/uplink_purchase_entry/UPE = purchase_log[hash] - . += "\[[UPE.icon_b64][show_key?"([owner])":""][UPE.name]
    [UPE.spent_cost ? "[UPE.spent_cost] TC" : "[UPE.base_cost] TC
    (Surplus)"]
    [UPE.desc]
    [(UPE.amount_purchased > 1) ? "x[UPE.amount_purchased]" : ""]\]
    " - -/datum/uplink_purchase_log/proc/LogPurchase(atom/A, datum/uplink_item/uplink_item, spent_cost) - var/datum/uplink_purchase_entry/UPE - var/hash = hash_purchase(uplink_item, spent_cost) - if(purchase_log[hash]) - UPE = purchase_log[hash] - else - UPE = new - purchase_log[hash] = UPE - UPE.path = A.type - UPE.icon_b64 = "[icon2base64html(A)]" - UPE.desc = uplink_item.desc - UPE.name = uplink_item.name - UPE.base_cost = initial(uplink_item.cost) - UPE.spent_cost = spent_cost - - UPE.amount_purchased++ - total_spent += spent_cost - -/datum/uplink_purchase_log/proc/hash_purchase(datum/uplink_item/uplink_item, spent_cost) - return "[uplink_item.type]|[uplink_item.name]|[uplink_item.cost]|[spent_cost]" - -/datum/uplink_purchase_entry - var/amount_purchased = 0 - var/path - var/icon_b64 - var/desc - var/base_cost - var/spent_cost - var/name diff --git a/code/modules/vehicles/_vehicle.dm b/code/modules/vehicles/_vehicle.dm index 3f4ca89674..8ef21845da 100644 --- a/code/modules/vehicles/_vehicle.dm +++ b/code/modules/vehicles/_vehicle.dm @@ -158,13 +158,6 @@ remove_controller_actions_by_flag(controller, i) return TRUE -/obj/vehicle/Bump(atom/movable/M) - . = ..() - if(emulate_door_bumps) - if(istype(M, /obj/machinery/door)) - for(var/m in occupants) - M.Bumped(m) - /obj/vehicle/Move(newloc, dir) . = ..() if(trailer && .) diff --git a/code/modules/vehicles/atv.dm b/code/modules/vehicles/atv.dm deleted file mode 100644 index bd2fb3d62c..0000000000 --- a/code/modules/vehicles/atv.dm +++ /dev/null @@ -1,104 +0,0 @@ - -/obj/vehicle/ridden/atv - name = "all-terrain vehicle" - desc = "" - icon_state = "atv" - max_integrity = 150 - armor = list("melee" = 50, "bullet" = 25, "laser" = 20, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) - key_type = /obj/item/key - integrity_failure = 0.5 - var/static/mutable_appearance/atvcover - -/obj/vehicle/ridden/atv/Initialize() - . = ..() - var/datum/component/riding/D = LoadComponent(/datum/component/riding) - D.vehicle_move_delay = 1.5 - D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 4), TEXT_EAST = list(0, 4), TEXT_WEST = list( 0, 4))) - D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER) - D.set_vehicle_dir_layer(NORTH, OBJ_LAYER) - D.set_vehicle_dir_layer(EAST, OBJ_LAYER) - D.set_vehicle_dir_layer(WEST, OBJ_LAYER) - -/obj/vehicle/ridden/atv/post_buckle_mob(mob/living/M) - add_overlay(atvcover) - return ..() - -/obj/vehicle/ridden/atv/post_unbuckle_mob(mob/living/M) - if(!has_buckled_mobs()) - cut_overlay(atvcover) - return ..() - -//TURRETS! -/obj/vehicle/ridden/atv/turret - var/obj/machinery/porta_turret/syndicate/vehicle_turret/turret = null - -/obj/machinery/porta_turret/syndicate/vehicle_turret - name = "mounted turret" - scan_range = 7 - density = FALSE - -/obj/vehicle/ridden/atv/turret/Initialize() - . = ..() - turret = new(loc) - turret.base = src - -/obj/vehicle/ridden/atv/turret/Moved() - . = ..() - if(turret) - turret.forceMove(get_turf(src)) - switch(dir) - if(NORTH) - turret.pixel_x = 0 - turret.pixel_y = 4 - turret.layer = ABOVE_MOB_LAYER - if(EAST) - turret.pixel_x = -12 - turret.pixel_y = 4 - turret.layer = OBJ_LAYER - if(SOUTH) - turret.pixel_x = 0 - turret.pixel_y = 4 - turret.layer = OBJ_LAYER - if(WEST) - turret.pixel_x = 12 - turret.pixel_y = 4 - turret.layer = OBJ_LAYER - -/obj/vehicle/ridden/atv/attackby(obj/item/W as obj, mob/user as mob, params) - if(W.tool_behaviour == TOOL_WELDER && user.used_intent.type != INTENT_HARM) - if(obj_integrity < max_integrity) - if(W.use_tool(src, user, 0, volume=50, amount=1)) - user.visible_message("[user] repairs some damage to [name].", "I repair some damage to \the [src].") - obj_integrity += min(10, max_integrity-obj_integrity) - if(obj_integrity == max_integrity) - to_chat(user, "It looks to be fully repaired now.") - return TRUE - return ..() - -/obj/vehicle/ridden/secway/obj_break() - START_PROCESSING(SSobj, src) - return ..() - -/obj/vehicle/ridden/atv/process() - if(obj_integrity >= integrity_failure * max_integrity) - return PROCESS_KILL - if(prob(20)) - return - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(0, src) - smoke.start() - -/obj/vehicle/ridden/atv/bullet_act(obj/projectile/P) - if(prob(50) && buckled_mobs) - for(var/mob/M in buckled_mobs) - M.bullet_act(P) - return TRUE - return ..() - -/obj/vehicle/ridden/atv/obj_destruction() - explosion(src, -1, 0, 2, 4, flame_range = 3) - return ..() - -/obj/vehicle/ridden/atv/Destroy() - STOP_PROCESSING(SSobj,src) - return ..() diff --git a/code/modules/vehicles/motorized_wheelchair.dm b/code/modules/vehicles/motorized_wheelchair.dm deleted file mode 100644 index 55aeb3207a..0000000000 --- a/code/modules/vehicles/motorized_wheelchair.dm +++ /dev/null @@ -1,168 +0,0 @@ -/obj/vehicle/ridden/wheelchair/motorized - name = "motorized wheelchair" - desc = "" - max_integrity = 150 - var/speed = 2 - var/power_efficiency = 1 - var/power_usage = 100 - var/panel_open = FALSE - var/list/required_parts = list(/obj/item/stock_parts/manipulator, - /obj/item/stock_parts/manipulator, - /obj/item/stock_parts/capacitor) - var/obj/item/stock_parts/cell/power_cell - -/obj/vehicle/ridden/wheelchair/motorized/CheckParts(list/parts_list) - ..() - refresh_parts() - -/obj/vehicle/ridden/wheelchair/motorized/proc/refresh_parts() - speed = 1 // Should never be under 1 - for(var/obj/item/stock_parts/manipulator/M in contents) - speed += M.rating - for(var/obj/item/stock_parts/capacitor/C in contents) - power_efficiency = C.rating - var/datum/component/riding/D = GetComponent(/datum/component/riding) - D.vehicle_move_delay = round(CONFIG_GET(number/movedelay/run_delay) * delay_multiplier) / speed - -/obj/vehicle/ridden/wheelchair/motorized/obj_destruction(damage_flag) - var/turf/T = get_turf(src) - for(var/atom/movable/A in contents) - A.forceMove(T) - if(isliving(A)) - var/mob/living/L = A - L.update_mobility() - return ..() - -/obj/vehicle/ridden/wheelchair/motorized/driver_move(mob/living/user, direction) - if(istype(user)) - if(!canmove) - return FALSE - if(!power_cell) - to_chat(user, "There seems to be no cell installed in [src].") - canmove = FALSE - addtimer(VARSET_CALLBACK(src, canmove, TRUE), 20) - return FALSE - if(power_cell.charge < power_usage / max(power_efficiency, 1)) - to_chat(user, "The display on [src] blinks 'Out of Power'.") - canmove = FALSE - addtimer(VARSET_CALLBACK(src, canmove, TRUE), 20) - return FALSE - if(user.get_num_arms() < arms_required) - to_chat(user, "I don't have enough arms to operate the motor controller!") - canmove = FALSE - addtimer(VARSET_CALLBACK(src, canmove, TRUE), 20) - return FALSE - power_cell.use(power_usage / max(power_efficiency, 1)) - return ..() - -/obj/vehicle/ridden/wheelchair/motorized/set_move_delay(mob/living/user) - return - -/obj/vehicle/ridden/wheelchair/motorized/post_buckle_mob(mob/living/user) - . = ..() - density = TRUE - -/obj/vehicle/ridden/wheelchair/motorized/post_unbuckle_mob() - . = ..() - density = FALSE - -/obj/vehicle/ridden/wheelchair/motorized/attack_hand(mob/living/user) - if(power_cell && panel_open) - power_cell.update_icon() - user.put_in_hands(power_cell) - power_cell = null - to_chat(user, "I remove the power cell from [src].") - return - return ..() - -/obj/vehicle/ridden/wheelchair/motorized/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_SCREWDRIVER) - I.play_tool_sound(src) - panel_open = !panel_open - user.visible_message("[user] [panel_open ? "opens" : "closes"] the maintenance panel on [src].", "I [panel_open ? "open" : "close"] the maintenance panel.") - return - if(panel_open) - if(istype(I, /obj/item/stock_parts/cell)) - if(power_cell) - to_chat(user, "There is a power cell already installed.") - else - I.forceMove(src) - power_cell = I - to_chat(user, "I install the [I].") - refresh_parts() - return - if(istype(I, /obj/item/stock_parts)) - var/obj/item/stock_parts/B = I - var/P - for(var/obj/item/stock_parts/A in contents) - for(var/D in required_parts) - if(ispath(A.type, D)) - P = D - break - if(istype(B, P) && istype(A, P)) - if(B.get_part_rating() > A.get_part_rating()) - B.forceMove(src) - user.put_in_hands(A) - user.visible_message("[user] replaces [A] with [B] in [src].", "I replace [A] with [B].") - break - refresh_parts() - return - return ..() - -/obj/vehicle/ridden/wheelchair/motorized/wrench_act(mob/living/user, obj/item/I) - to_chat(user, "I begin to detach the wheels...") - if(I.use_tool(src, user, 40, volume=50)) - to_chat(user, "I detach the wheels and deconstruct the chair.") - new /obj/item/stack/rods(drop_location(), 8) - new /obj/item/stack/sheet/metal(drop_location(), 10) - var/turf/T = get_turf(src) - for(var/atom/movable/A in contents) - A.forceMove(T) - if(isliving(A)) - var/mob/living/L = A - L.update_mobility() - qdel(src) - return TRUE - -/obj/vehicle/ridden/wheelchair/motorized/examine(mob/user) - . = ..() - if((obj_flags & EMAGGED) && panel_open) - . += "There is a bomb under the maintenance panel." - . += "There is a small screen on it, [(in_range(user, src) || isobserver(user)) ? "[power_cell ? "it reads:" : "but it is dark."]" : "but you can't see it from here."]" - if(!power_cell || (!in_range(user, src) && !isobserver(user))) - return - . += "Speed: [speed]" - . += "Energy efficiency: [power_efficiency]" - . += "Power: [power_cell.charge] out of [power_cell.maxcharge]" - -/obj/vehicle/ridden/wheelchair/motorized/Bump(atom/movable/M) - . = ..() - // Here is the shitty emag functionality. - if(obj_flags & EMAGGED && (istype(M, /turf/closed) || isliving(M))) - explosion(src, -1, 1, 3, 2, 0) - visible_message("[src] explodes!!") - return - // If the speed is higher than delay_multiplier throw the person on the wheelchair away - if(M.density && speed > delay_multiplier && has_buckled_mobs()) - var/mob/living/H = buckled_mobs[1] - var/atom/throw_target = get_edge_target_turf(H, pick(GLOB.cardinals)) - unbuckle_mob(H) - H.throw_at(throw_target, 2, 3) - H.Knockdown(100) - H.adjustStaminaLoss(40) - if(isliving(M)) - var/mob/living/D = M - throw_target = get_edge_target_turf(D, pick(GLOB.cardinals)) - D.throw_at(throw_target, 2, 3) - D.Knockdown(80) - D.adjustStaminaLoss(35) - visible_message("[src] crashes into [M], sending [H] and [D] flying!") - else - visible_message("[src] crashes into [M], sending [H] flying!") - playsound(src, 'sound/blank.ogg', 50, 1) - -/obj/vehicle/ridden/wheelchair/motorized/emag_act(mob/user) - if((obj_flags & EMAGGED) || !panel_open) - return - to_chat(user, "A bomb appears in [src], what the fuck?") - obj_flags |= EMAGGED diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm deleted file mode 100644 index 3fca1e488b..0000000000 --- a/code/modules/vending/_vending.dm +++ /dev/null @@ -1,1030 +0,0 @@ -/* - * Vending machine types - Can be found under /code/modules/vending/ - */ - -/* - -/obj/machinery/vending/[vendors name here] // --vending machine template :) - name = "" - desc = "" - icon = '' - icon_state = "" - products = list() - contraband = list() - premium = list() - -IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY CANISTER CHARGES in vending_items.dm -*/ - -#define MAX_VENDING_INPUT_AMOUNT 30 -/** - * # vending record datum - * - * A datum that represents a product that is vendable - */ -/datum/data/vending_product - name = "generic" - ///Typepath of the product that is created when this record "sells" - var/product_path = null - ///How many of this product we currently have - var/amount = 0 - ///How many we can store at maximum - var/max_amount = 0 - ///Does the item have a custom price override - var/custom_price - ///Does the item have a custom premium price override - var/custom_premium_price - -/** - * # vending machines - * - * Captalism in the year 2525, everything in a vending machine, even love - */ -/obj/machinery/vending - name = "\improper Vendomat" - desc = "" - icon = 'icons/obj/vending.dmi' - icon_state = "generic" - layer = BELOW_OBJ_LAYER - density = TRUE - verb_say = "beeps" - verb_ask = "beeps" - verb_exclaim = "beeps" - max_integrity = 300 - integrity_failure = 0.33 - armor = list("melee" = 20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70) - circuit = /obj/item/circuitboard/machine/vendor - payment_department = ACCOUNT_SRV - /// Is the machine active (No sales pitches if off)! - var/active = 1 - ///Are we ready to vend?? Is it time?? - var/vend_ready = TRUE - ///Next world time to send a purchase message - var/purchase_message_cooldown - ///Last mob to shop with us - var/last_shopper - - - /** - * List of products this machine sells - * - * form should be list(/type/path = amount, /type/path2 = amount2) - */ - var/list/products = list() - - /** - * List of products this machine sells when you hack it - * - * form should be list(/type/path = amount, /type/path2 = amount2) - */ - var/list/contraband = list() - - /** - * List of premium products this machine sells - * - * form should be list(/type/path, /type/path2) as there is only ever one in stock - */ - var/list/premium = list() - - ///String of slogans separated by semicolons, optional - var/product_slogans = "" - ///String of small ad messages in the vending screen - random chance - var/product_ads = "" - - var/list/product_records = list() - var/list/hidden_records = list() - var/list/coin_records = list() - var/list/slogan_list = list() - ///Small ad messages in the vending screen - random chance of popping up whenever you open it - var/list/small_ads = list() - ///Message sent post vend (Thank you for shopping!) - var/vend_reply - ///Last world tick we sent a vent reply - var/last_reply = 0 - ///Last world tick we sent a slogan message out - var/last_slogan = 0 - ///How many ticks until we can send another - var/slogan_delay = 6000 - ///Icon when vending an item to the user - var/icon_vend - ///Icon to flash when user is denied a vend - var/icon_deny - ///World ticks the machine is electified for - var/seconds_electrified = MACHINE_NOT_ELECTRIFIED - ///When this is TRUE, we fire items at customers! We're broken! - var/shoot_inventory = 0 - ///How likely this is to happen (prob 100) - var/shoot_inventory_chance = 2 - //Stop spouting those godawful pitches! - var/shut_up = 0 - ///can we access the hidden inventory? - var/extended_inventory = 0 - ///Are we checking the users ID - var/scan_id = 1 - ///Coins that we accept? - var/obj/item/coin/coin - ///Bills we accept? - var/obj/item/stack/spacecash/bill - ///Default price of items if not overridden - var/default_price = 25 - ///Default price of premium items if not overridden - var/extra_price = 50 - /** - * Is this item on station or not - * - * if it doesn't originate from off-station during mapload, everything is free - */ - var/onstation = TRUE //if it doesn't originate from off-station during mapload, everything is free - ///A variable to change on a per instance basis on the map that allows the instance to force cost and ID requirements - var/onstation_override = FALSE //change this on the object on the map to override the onstation check. DO NOT APPLY THIS GLOBALLY. - - ///ID's that can load this vending machine wtih refills - var/list/canload_access_list - - - var/list/vending_machine_input = list() - ///Display header on the input view - var/input_display_header = "Custom Vendor" - - //The type of refill canisters used by this machine. - var/obj/item/vending_refill/refill_canister = null - - /// how many items have been inserted in a vendor - var/loaded_items = 0 - -/obj/item/circuitboard - ///determines if the circuit board originated from a vendor off station or not. - var/onstation = TRUE - -/** - * Initialize the vending machine - * - * Builds the vending machine inventory, sets up slogans and other such misc work - * - * This also sets the onstation var to: - * * FALSE - if the machine was maploaded on a zlevel that doesn't pass the is_station_level check - * * TRUE - all other cases - */ -/obj/machinery/vending/Initialize(mapload) - var/build_inv = FALSE - if(!refill_canister) - circuit = null - build_inv = TRUE - . = ..() - wires = new /datum/wires/vending(src) - if(build_inv) //non-constructable vending machine - build_inventory(products, product_records) - build_inventory(contraband, hidden_records) - build_inventory(premium, coin_records) - - slogan_list = splittext(product_slogans, ";") - // So not all machines speak at the exact same time. - // The first time this machine says something will be at slogantime + this random value, - // so if slogantime is 10 minutes, it will say it at somewhere between 10 and 20 minutes after the machine is crated. - last_slogan = world.time + rand(0, slogan_delay) - power_change() - - if(onstation_override) //overrides the checks if true. - onstation = TRUE - return - if(mapload) //check if it was initially created off station during mapload. - if(!is_station_level(z)) - onstation = FALSE - if(circuit) - circuit.onstation = onstation //sync up the circuit so the pricing schema is carried over if it's reconstructed. - else if(circuit && (circuit.onstation != onstation)) //check if they're not the same to minimize the amount of edited values. - onstation = circuit.onstation //if it was constructed outside mapload, sync the vendor up with the circuit's var so you can't bypass price requirements by moving / reconstructing it off station. - -/obj/machinery/vending/Destroy() - QDEL_NULL(wires) - QDEL_NULL(coin) - QDEL_NULL(bill) - return ..() - -/obj/machinery/vending/can_speak() - return !shut_up - -/obj/machinery/vending/RefreshParts() //Better would be to make constructable child - if(!component_parts) - return - - product_records = list() - hidden_records = list() - coin_records = list() - build_inventory(products, product_records, start_empty = TRUE) - build_inventory(contraband, hidden_records, start_empty = TRUE) - build_inventory(premium, coin_records, start_empty = TRUE) - for(var/obj/item/vending_refill/VR in component_parts) - restock(VR) - -/obj/machinery/vending/deconstruct(disassembled = TRUE) - if(!refill_canister) //the non constructable vendors drop metal instead of a machine frame. - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/sheet/metal(loc, 3) - qdel(src) - else - ..() - -/obj/machinery/vending/update_icon() - if(stat & BROKEN) - icon_state = "[initial(icon_state)]-broken" - else - if(powered()) - icon_state = initial(icon_state) - else - icon_state = "[initial(icon_state)]-off" - - -/obj/machinery/vending/obj_break(damage_flag) - . = ..() - if(!.) - return - - var/dump_amount = 0 - var/found_anything = TRUE - while (found_anything) - found_anything = FALSE - for(var/record in shuffle(product_records)) - var/datum/data/vending_product/R = record - if(R.amount <= 0) //Try to use a record that actually has something to dump. - continue - var/dump_path = R.product_path - if(!dump_path) - continue - R.amount-- - // busting open a vendor will destroy some of the contents - if(found_anything && prob(80)) - continue - - var/obj/O = new dump_path(loc) - step(O, pick(GLOB.alldirs)) - found_anything = TRUE - dump_amount++ - if (dump_amount >= 16) - return - -GLOBAL_LIST_EMPTY(vending_products) -/** - * Build the inventory of the vending machine from it's product and record lists - * - * This builds up a full set of /datum/data/vending_products from the product list of the vending machine type - * Arguments: - * * productlist - the list of products that need to be converted - * * recordlist - the list containing /datum/data/vending_product datums - * * startempty - should we set vending_product record amount from the product list (so it's prefilled at roundstart) - */ -/obj/machinery/vending/proc/build_inventory(list/productlist, list/recordlist, start_empty = FALSE) - for(var/typepath in productlist) - var/amount = productlist[typepath] - if(isnull(amount)) - amount = 0 - - var/atom/temp = typepath - var/datum/data/vending_product/R = new /datum/data/vending_product() - GLOB.vending_products[typepath] = 1 - R.name = initial(temp.name) - R.product_path = typepath - if(!start_empty) - R.amount = amount - R.max_amount = amount - R.custom_price = initial(temp.custom_price) - R.custom_premium_price = initial(temp.custom_premium_price) - recordlist += R -/** - * Refill a vending machine from a refill canister - * - * This takes the products from the refill canister and then fills the products,contraband and premium product categories - * - * Arguments: - * * canister - the vending canister we are refilling from - */ -/obj/machinery/vending/proc/restock(obj/item/vending_refill/canister) - if (!canister.products) - canister.products = products.Copy() - if (!canister.contraband) - canister.contraband = contraband.Copy() - if (!canister.premium) - canister.premium = premium.Copy() - . = 0 - . += refill_inventory(canister.products, product_records) - . += refill_inventory(canister.contraband, hidden_records) - . += refill_inventory(canister.premium, coin_records) -/** - * Refill our inventory from the passed in product list into the record list - * - * Arguments: - * * productlist - list of types -> amount - * * recordlist - existing record datums - */ -/obj/machinery/vending/proc/refill_inventory(list/productlist, list/recordlist) - . = 0 - for(var/R in recordlist) - var/datum/data/vending_product/record = R - var/diff = min(record.max_amount - record.amount, productlist[record.product_path]) - if (diff) - productlist[record.product_path] -= diff - record.amount += diff - . += diff -/** - * Set up a refill canister that matches this machines products - * - * This is used when the machine is deconstructed, so the items aren't "lost" - */ -/obj/machinery/vending/proc/update_canister() - if (!component_parts) - return - - var/obj/item/vending_refill/R = locate() in component_parts - if (!R) - CRASH("Constructible vending machine did not have a refill canister") - - R.products = unbuild_inventory(product_records) - R.contraband = unbuild_inventory(hidden_records) - R.premium = unbuild_inventory(coin_records) - -/** - * Given a record list, go through and and return a list of type -> amount - */ -/obj/machinery/vending/proc/unbuild_inventory(list/recordlist) - . = list() - for(var/R in recordlist) - var/datum/data/vending_product/record = R - .[record.product_path] += record.amount - -/obj/machinery/vending/crowbar_act(mob/living/user, obj/item/I) - if(!component_parts) - return FALSE - default_deconstruction_crowbar(I) - return TRUE - -/obj/machinery/vending/wrench_act(mob/living/user, obj/item/I) - ..() - if(panel_open) - default_unfasten_wrench(user, I, time = 60) - return TRUE - -/obj/machinery/vending/screwdriver_act(mob/living/user, obj/item/I) - if(..()) - return TRUE - if(anchored) - default_deconstruction_screwdriver(user, icon_state, icon_state, I) - cut_overlays() - if(panel_open) - add_overlay("[initial(icon_state)]-panel") - updateUsrDialog() - else - to_chat(user, "I must first secure [src].") - return TRUE - -/obj/machinery/vending/attackby(obj/item/I, mob/user, params) - if(panel_open && is_wire_tool(I)) - wires.interact(user) - return - - if(refill_canister && istype(I, refill_canister)) - if (!panel_open) - to_chat(user, "I should probably unscrew the service panel first!") - else if (stat & (BROKEN|NOPOWER)) - to_chat(user, "[src] does not respond.") - else - //if the panel is open we attempt to refill the machine - var/obj/item/vending_refill/canister = I - if(canister.get_part_rating() == 0) - to_chat(user, "[canister] is empty!") - else - // instantiate canister if needed - var/transferred = restock(canister) - if(transferred) - to_chat(user, "I loaded [transferred] items in [src].") - else - to_chat(user, "There's nothing to restock!") - return - if(compartmentLoadAccessCheck(user)) - if(canLoadItem(I)) - loadingAttempt(I,user) - updateUsrDialog() //can't put this on the proc above because we spam it below - - if(istype(I, /obj/item/storage/bag)) //trays USUALLY - var/obj/item/storage/T = I - var/loaded = 0 - var/denied_items = 0 - for(var/obj/item/the_item in T.contents) - if(contents.len >= MAX_VENDING_INPUT_AMOUNT) // no more than 30 item can fit inside, legacy from snack vending although not sure why it exists - to_chat(user, "[src]'s compartment is full.") - break - if(canLoadItem(the_item) && loadingAttempt(the_item,user)) - SEND_SIGNAL(T, COMSIG_TRY_STORAGE_TAKE, the_item, src, TRUE) - loaded++ - else - denied_items++ - if(denied_items) - to_chat(user, "[src] refuses some items!") - if(loaded) - to_chat(user, "I insert [loaded] dishes into [src]'s compartment.") - updateUsrDialog() - - else - ..() - -/obj/machinery/vending/proc/loadingAttempt(obj/item/I, mob/user) - . = TRUE - if(!user.transferItemToLoc(I, src)) - return FALSE - if(vending_machine_input[format_text(I.name)]) - vending_machine_input[format_text(I.name)]++ - else - vending_machine_input[format_text(I.name)] = 1 - to_chat(user, "I insert [I] into [src]'s input compartment.") - loaded_items++ - -/** - * Is the passed in user allowed to load this vending machines compartments - * - * Arguments: - * * user - mob that is doing the loading of the vending machine - */ -/obj/machinery/vending/proc/compartmentLoadAccessCheck(mob/user) - if(!canload_access_list) - return TRUE - else - var/do_you_have_access = FALSE - var/req_access_txt_holder = req_access_txt - for(var/i in canload_access_list) - req_access_txt = i - if(!allowed(user) && !(obj_flags & EMAGGED) && scan_id) - continue - else - do_you_have_access = TRUE - break //you passed don't bother looping anymore - req_access_txt = req_access_txt_holder // revert to normal (before the proc ran) - if(do_you_have_access) - return TRUE - else - to_chat(user, "[src]'s input compartment blinks red: Access denied.") - return FALSE - -/obj/machinery/vending/exchange_parts(mob/user, obj/item/storage/part_replacer/W) - if(!istype(W)) - return FALSE - if((flags_1 & NODECONSTRUCT_1) && !W.works_from_distance) - return FALSE - if(!component_parts || !refill_canister) - return FALSE - - var/moved = 0 - if(panel_open || W.works_from_distance) - if(W.works_from_distance) - display_parts(user) - for(var/I in W) - if(istype(I, refill_canister)) - moved += restock(I) - else - display_parts(user) - if(moved) - to_chat(user, "[moved] items restocked.") - W.play_rped_sound() - return TRUE - -/obj/machinery/vending/on_deconstruction() - update_canister() - . = ..() - -/obj/machinery/vending/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - obj_flags |= EMAGGED - to_chat(user, "I short out the product lock on [src].") - -/obj/machinery/vending/_try_interact(mob/user) - if(seconds_electrified && !(stat & NOPOWER)) - if(shock(user, 100)) - return - return ..() - -/obj/machinery/vending/ui_interact(mob/user) - var/list/dat = list() - var/datum/bank_account/account - var/mob/living/carbon/human/H - var/obj/item/card/id/C - if(ishuman(user)) - H = user - C = H.get_idcard(TRUE) - - if(!C) - dat += "

    No ID Card detected!

    " - else if (!C.registered_account) - dat += "

    No account on registered ID card!

    " - if(onstation && C && C.registered_account) - account = C.registered_account - if(vending_machine_input.len) - dat += "

    [input_display_header]

    " - dat += "
    " - for(var/A in vending_machine_input) - if(vending_machine_input[A] > 0) - var/N = vending_machine_input[A] - var/obj/input_typepath - dat += "Dispense " - for(var/obj/O in contents) - if(format_text(O.name) == A) - input_typepath = O - break - if(input_typepath) - if(!onstation || account?.account_job?.paycheck_department == payment_department) - dat += "[A] (FREE): [N]
    " - else if(input_typepath.custom_price) - dat += "[A] ($[input_typepath.custom_price]): [N]
    " - else if(input_typepath.custom_premium_price) - dat += "[A] ($[input_typepath.custom_premium_price]): [N]
    " - else - dat += "[A] ($[default_price]): [N]
    " - dat += "
    " - - dat += {"

    Select an item

    -
    "} - if(!product_records.len) - dat += "No product loaded!" - else - var/list/display_records = product_records + coin_records - if(extended_inventory) - display_records = product_records + coin_records + hidden_records - dat += "" - for (var/datum/data/vending_product/R in display_records) - var/price_listed = "$[default_price]" - var/is_hidden = hidden_records.Find(R) - if(is_hidden && !extended_inventory) - continue - if(R.custom_price) - price_listed = "$[R.custom_price]" - if(!onstation || account && account.account_job && account.account_job.paycheck_department == payment_department) - price_listed = "FREE" - if(coin_records.Find(R) || is_hidden) - price_listed = "$[R.custom_premium_price ? R.custom_premium_price : extra_price]" - dat += {" - "} - if(R.amount > 0 && ((C && C.registered_account && onstation) || (!onstation && isliving(user)))) - dat += "" - else - dat += "" - dat += "" - dat += "
    [sanitize(R.name)] ([price_listed])[R.amount] VendNot Available
    " - dat += "
    " - if(onstation && C && C.registered_account) - dat += "Balance: $[account.account_balance]" - - var/datum/browser/popup = new(user, "vending", (name)) -// popup.add_stylesheet(get_asset_datum(/datum/asset/spritesheet/vending)) - popup.set_content(dat.Join("")) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - popup.open() - -/obj/machinery/vending/Topic(href, href_list) - if(..()) - return - usr.set_machine(src) - if((href_list["dispense"]) && (vend_ready)) - var/N = href_list["dispense"] - if(vending_machine_input[N] <= 0) // Sanity check, there are probably ways to press the button when it shouldn't be possible. - return - if(panel_open) - to_chat(usr, "The vending machine cannot dispense products while its service panel is open!") - return - vend_ready = FALSE - - if(onstation && ishuman(usr)) - var/mob/living/carbon/human/H = usr - var/obj/item/card/id/C = H.get_idcard(TRUE) - var/obj/input_typepath - - if(!C) - say("No card found.") - flick(icon_deny,src) - vend_ready = TRUE - return - else if (!C.registered_account) - say("No account found.") - flick(icon_deny,src) - vend_ready = TRUE - return - for(var/obj/O in contents) - if(format_text(O.name) == N) - input_typepath = O - break - - var/price_to_use = default_price - if(input_typepath.custom_price) - price_to_use = input_typepath.custom_price - if(input_typepath.custom_premium_price) - price_to_use = input_typepath.custom_premium_price - var/datum/bank_account/account = C.registered_account - if(account?.account_job?.paycheck_department == payment_department) - price_to_use = 0 - if(price_to_use && !account.adjust_money(-price_to_use)) - say("You do not possess the funds to purchase [input_typepath.name].") - flick(icon_deny, src) - vend_ready = TRUE - return - var/datum/bank_account/D = SSeconomy.get_dep_account(payment_department) - if(D) - D.adjust_money(price_to_use) - if(last_shopper != usr || purchase_message_cooldown < world.time) - say("Thank you for buying local and purchasing [input_typepath.name]!") - purchase_message_cooldown = world.time + 5 SECONDS - last_shopper = usr - vending_machine_input[N] = max(vending_machine_input[N] - 1, 0) - input_typepath.forceMove(drop_location()) - loaded_items-- - use_power(5) - - vend_ready = TRUE - updateUsrDialog() - - if((href_list["vend"]) && (vend_ready)) - if(panel_open) - to_chat(usr, "The vending machine cannot dispense products while its service panel is open!") - return - vend_ready = FALSE //One thing at a time!! - - var/datum/data/vending_product/R = locate(href_list["vend"]) - var/list/record_to_check = product_records + coin_records - if(extended_inventory) - record_to_check = product_records + coin_records + hidden_records - if(!R || !istype(R) || !R.product_path) - vend_ready = TRUE - return - var/price_to_use = default_price - if(R.custom_price) - price_to_use = R.custom_price - if(R in hidden_records) - if(!extended_inventory) - vend_ready = TRUE - return - - else if (!(R in record_to_check)) - vend_ready = TRUE - message_admins("Vending machine exploit attempted by [ADMIN_LOOKUPFLW(usr)]!") - return - if (R.amount <= 0) - say("Sold out of [R.name].") - flick(icon_deny,src) - vend_ready = TRUE - return - if(onstation && ishuman(usr)) - var/mob/living/carbon/human/H = usr - var/obj/item/card/id/C = H.get_idcard(TRUE) - - if(!C) - say("No card found.") - flick(icon_deny,src) - vend_ready = TRUE - return - else if (!C.registered_account) - say("No account found.") - flick(icon_deny,src) - vend_ready = TRUE - return - var/datum/bank_account/account = C.registered_account - if(account?.account_job?.paycheck_department == payment_department) - price_to_use = 0 - if(coin_records.Find(R) || hidden_records.Find(R)) - price_to_use = R.custom_premium_price ? R.custom_premium_price : extra_price - if(price_to_use && !account.adjust_money(-price_to_use)) - say("You do not possess the funds to purchase [R.name].") - flick(icon_deny,src) - vend_ready = TRUE - return - var/datum/bank_account/D = SSeconomy.get_dep_account(payment_department) - if(D) - D.adjust_money(price_to_use) - if(last_shopper != usr || purchase_message_cooldown < world.time) - say("Thank you for shopping with [src]!") - purchase_message_cooldown = world.time + 5 SECONDS - last_shopper = usr - use_power(5) - if(icon_vend) //Show the vending animation if needed - flick(icon_vend,src) - playsound(src, 'sound/blank.ogg', 50, TRUE, extrarange = -3) - new R.product_path(get_turf(src)) - R.amount-- - SSblackbox.record_feedback("nested tally", "vending_machine_usage", 1, list("[type]", "[R.product_path]")) - vend_ready = TRUE - - else if(href_list["togglevoice"] && panel_open) - shut_up = !shut_up - - updateUsrDialog() - -/obj/machinery/vending/process() - if(stat & (BROKEN|NOPOWER)) - return PROCESS_KILL - if(!active) - return - - if(seconds_electrified > MACHINE_NOT_ELECTRIFIED) - seconds_electrified-- - - //Pitch to the people! Really sell it! - if(last_slogan + slogan_delay <= world.time && slogan_list.len > 0 && !shut_up && prob(5)) - var/slogan = pick(slogan_list) - speak(slogan) - last_slogan = world.time - - if(shoot_inventory && prob(shoot_inventory_chance)) - throw_item() -/** - * Speak the given message verbally - * - * Checks if the machine is powered and the message exists - * - * Arguments: - * * message - the message to speak - */ -/obj/machinery/vending/proc/speak(message) - if(stat & (BROKEN|NOPOWER)) - return - if(!message) - return - - say(message) - -/obj/machinery/vending/power_change() - . = ..() - if(powered()) - START_PROCESSING(SSmachines, src) - -//Somebody cut an important wire and now we're following a new definition of "pitch." -/** - * Throw an item from our internal inventory out in front of us - * - * This is called when we are hacked, it selects a random product from the records that has an amount > 0 - * This item is then created and tossed out in front of us with a visible message - */ -/obj/machinery/vending/proc/throw_item() - var/obj/throw_item = null - var/mob/living/target = locate() in view(7,src) - if(!target) - return 0 - - for(var/datum/data/vending_product/R in shuffle(product_records)) - if(R.amount <= 0) //Try to use a record that actually has something to dump. - continue - var/dump_path = R.product_path - if(!dump_path) - continue - - R.amount-- - throw_item = new dump_path(loc) - break - if(!throw_item) - return 0 - - pre_throw(throw_item) - - throw_item.throw_at(target, 16, 3) - visible_message("[src] launches [throw_item] at [target]!") - return 1 -/** - * A callback called before an item is tossed out - * - * Override this if you need to do any special case handling - * - * Arguments: - * * I - obj/item being thrown - */ -/obj/machinery/vending/proc/pre_throw(obj/item/I) - return -/** - * Shock the passed in user - * - * This checks we have power and that the passed in prob is passed, then generates some sparks - * and calls electrocute_mob on the user - * - * Arguments: - * * user - the user to shock - * * prb - probability the shock happens - */ -/obj/machinery/vending/proc/shock(mob/living/user, prb) - if(!istype(user) || stat & (BROKEN|NOPOWER)) // unpowered, no shock - return FALSE - if(!prob(prb)) - return FALSE - do_sparks(5, TRUE, src) - var/check_range = TRUE - if(electrocute_mob(user, get_area(src), src, 0.7, check_range)) - return TRUE - else - return FALSE -/** - * Are we able to load the item passed in - * - * Arguments: - * * I - the item being loaded - * * user - the user doing the loading - */ -/obj/machinery/vending/proc/canLoadItem(obj/item/I, mob/user) - return FALSE - -/obj/machinery/vending/onTransitZ() - return - -/obj/machinery/vending/custom - name = "Custom Vendor" - icon_state = "robotics" - icon_deny = "robotics-deny" - max_integrity = 400 - payment_department = NO_FREEBIES - refill_canister = /obj/item/vending_refill/custom - /// where the money is sent - var/datum/bank_account/private_a - /// max number of items that the custom vendor can hold - var/max_loaded_items = 20 - -/obj/machinery/vending/custom/compartmentLoadAccessCheck(mob/user) - . = FALSE - var/mob/living/carbon/human/H - var/obj/item/card/id/C - if(ishuman(user)) - H = user - C = H.get_idcard(FALSE) - if(C?.registered_account && C.registered_account == private_a) - return TRUE - -/obj/machinery/vending/custom/canLoadItem(obj/item/I, mob/user) - . = FALSE - if(loaded_items >= max_loaded_items) - say("There are too many items in stock.") - return - if(istype(I, /obj/item/stack)) - say("Loose items may cause problems, try use it inside wrapping paper.") - return - if(I.custom_price) - return TRUE - -/obj/machinery/vending/custom/Topic(href, href_list) - usr.set_machine(src) - ///what we are selling - var/obj/S - - if(href_list["dispense"] && vend_ready) - var/N = href_list["dispense"] - vend_ready = FALSE - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - var/obj/item/card/id/C = H.get_idcard(TRUE) - - if(!C) - say("No card found.") - flick(icon_deny,src) - vend_ready = TRUE - return - else if (!C.registered_account) - say("No account found.") - flick(icon_deny,src) - vend_ready = TRUE - return - var/datum/bank_account/account = C.registered_account - for(var/obj/O in contents) - if(format_text(O.name) == N) - S = O - break - if(S) - if(compartmentLoadAccessCheck(usr)) - vending_machine_input[N] = max(vending_machine_input[N] - 1, 0) - S.forceMove(drop_location()) - loaded_items-- - use_power(5) - vend_ready = TRUE - updateUsrDialog() - return - if(account.has_money(S.custom_price)) - account.adjust_money(-S.custom_price) - var/datum/bank_account/owner = private_a - if(owner) - owner.adjust_money(S.custom_price) - vending_machine_input[N] = max(vending_machine_input[N] - 1, 0) - S.forceMove(drop_location()) - loaded_items-- - use_power(5) - if(last_shopper != usr || purchase_message_cooldown < world.time) - say("Thank you for buying local and purchasing [S]!") - purchase_message_cooldown = world.time + 5 SECONDS - last_shopper = usr - vend_ready = TRUE - updateUsrDialog() - return - else - say("You do not possess the funds to purchase this.") - vend_ready = TRUE - -/obj/machinery/vending/custom/ui_interact(mob/user) - var/list/dat = list() - var/datum/bank_account/account - var/mob/living/carbon/human/H - var/obj/item/card/id/C - if(ishuman(user)) - H = user - C = H.get_idcard(TRUE) - ///temp var to set the shown price - var/price = 1 - - if(!C) - dat += "

    No ID Card detected!

    " - else if (!C.registered_account) - dat += "

    No account on registered ID card!

    " - else - account = C.registered_account - if(vending_machine_input.len) - dat += "

    [input_display_header]

    " - dat += "
    " - for (var/O in vending_machine_input) - if(vending_machine_input[O] > 0) - var/N = vending_machine_input[O] - dat += "Dispense " - if(compartmentLoadAccessCheck(user)) - price = "FREE" - else - for(var/obj/T in contents) - if(format_text(T.name) == O) - price = "$[T.custom_price]" - break - dat += "[O] ([price]): [N]
    " - dat += "
    " - if(account && account.account_balance) - dat += "Balance: $[account.account_balance]" - - var/datum/browser/popup = new(user, "vending", (name)) -// popup.add_stylesheet(get_asset_datum(/datum/asset/spritesheet/vending)) - popup.set_content(dat.Join("")) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - popup.open() - -/obj/machinery/vending/custom/attackby(obj/item/I, mob/user, params) - if(!private_a) - var/mob/living/carbon/human/H - var/obj/item/card/id/C - if(ishuman(user)) - H = user - C = H.get_idcard(TRUE) - if(C?.registered_account) - private_a = C.registered_account - say("\The [src] has been linked to [C].") - - if(compartmentLoadAccessCheck(user)) - if(istype(I, /obj/item/pen)) - name = stripped_input(user,"Set name","Name", name, 20) - desc = stripped_input(user,"Set description","Description", desc, 60) - slogan_list += stripped_input(user,"Set slogan","Slogan","Epic", 60) - last_slogan = world.time + rand(0, slogan_delay) - return - - if(canLoadItem(I)) - loadingAttempt(I,user) - updateUsrDialog() - return - - if(panel_open && is_wire_tool(I)) - wires.interact(user) - return - - return ..() - -/obj/machinery/vending/custom/crowbar_act(mob/living/user, obj/item/I) - return FALSE - -/obj/machinery/vending/custom/Destroy() - var/turf/T = get_turf(src) - if(T) - for(var/obj/item/I in contents) - I.forceMove(T) - explosion(T, -1, 0, 3) - return ..() - -/obj/machinery/vending/custom/unbreakable - name = "Indestructible Vendor" - resistance_flags = INDESTRUCTIBLE - -/obj/item/vending_refill/custom - machine_name = "Custom Vendor" - icon_state = "refill_custom" - custom_premium_price = 30 - -/obj/item/price_tagger - name = "price tagger" - desc = "" - icon = 'icons/obj/device.dmi' - icon_state = "pricetagger" - custom_premium_price = 25 - ///the price of the item - var/price = 1 - -/obj/item/price_tagger/attack_self(mob/user) - price = max(1, round(input(user,"set price","price") as num|null, 1)) - to_chat(user, " The [src] will now give things an $[price] tag.") - -/obj/item/price_tagger/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity) - return - if(isitem(target)) - var/obj/item/I = target - I.custom_price = price - to_chat(user, "I set the price of [I] to $[price].") diff --git a/code/modules/vending/assist.dm b/code/modules/vending/assist.dm deleted file mode 100644 index 717a38be47..0000000000 --- a/code/modules/vending/assist.dm +++ /dev/null @@ -1,27 +0,0 @@ -/obj/machinery/vending/assist - products = list(/obj/item/assembly/prox_sensor = 5, - /obj/item/assembly/igniter = 3, - /obj/item/assembly/signaler = 4, - /obj/item/wirecutters = 1, - /obj/item/cartridge/signal = 4, - /obj/item/stock_parts/matter_bin = 3, - /obj/item/stock_parts/manipulator = 3, - /obj/item/stock_parts/micro_laser = 3, - /obj/item/stock_parts/scanning_module = 3, - /obj/item/stock_parts/capacitor = 3) - contraband = list(/obj/item/assembly/timer = 2, - /obj/item/assembly/voice = 2, - /obj/item/assembly/health = 2, - /obj/item/stock_parts/cell/high = 1) - premium = list(/obj/item/price_tagger = 3, - /obj/item/vending_refill/custom = 3, - /obj/item/circuitboard/machine/vendor = 3) - refill_canister = /obj/item/vending_refill/assist - product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!" - default_price = 10 - extra_price = 50 - payment_department = NO_FREEBIES - -/obj/item/vending_refill/assist - machine_name = "Vendomat" - icon_state = "refill_engi" diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm deleted file mode 100644 index d9b1139945..0000000000 --- a/code/modules/vending/autodrobe.dm +++ /dev/null @@ -1,154 +0,0 @@ -/obj/machinery/vending/autodrobe - name = "\improper AutoDrobe" - desc = "" - icon_state = "theater" - icon_deny = "theater-deny" - req_access = list(ACCESS_THEATRE) - product_slogans = "Dress for success!;Suited and booted!;It's show time!;Why leave style up to fate? Use AutoDrobe!" - vend_reply = "Thank you for using AutoDrobe!" - products = list(/obj/item/clothing/suit/chickensuit = 1, - /obj/item/clothing/head/chicken = 1, - /obj/item/clothing/under/rank/civilian/clown/blue = 1, - /obj/item/clothing/under/rank/civilian/clown/green = 1, - /obj/item/clothing/under/rank/civilian/clown/yellow = 1, - /obj/item/clothing/under/rank/civilian/clown/orange = 1, - /obj/item/clothing/under/rank/civilian/clown/purple = 1, - /obj/item/clothing/under/costume/gladiator = 1, - /obj/item/clothing/head/helmet/gladiator = 1, - /obj/item/clothing/under/rank/captain/suit = 1, - /obj/item/clothing/under/rank/captain/suit/skirt = 1, - /obj/item/clothing/head/flatcap = 1, - /obj/item/clothing/suit/toggle/labcoat/mad = 1, - /obj/item/clothing/shoes/jackboots = 1, - /obj/item/clothing/under/costume/schoolgirl = 1, - /obj/item/clothing/under/costume/schoolgirl/red = 1, - /obj/item/clothing/under/costume/schoolgirl/green = 1, - /obj/item/clothing/under/costume/schoolgirl/orange = 1, - /obj/item/clothing/head/kitty = 1, - /obj/item/clothing/under/dress/skirt = 1, - /obj/item/clothing/head/beret = 1, - /obj/item/clothing/accessory/waistcoat = 1, - /obj/item/clothing/under/suit/black = 1, - /obj/item/clothing/head/that = 1, - /obj/item/clothing/under/costume/kilt = 1, - /obj/item/clothing/head/beret = 1, - /obj/item/clothing/head/beret/vintage = 1, - /obj/item/clothing/head/beret/archaic = 1, - /obj/item/clothing/accessory/waistcoat = 1, - /obj/item/clothing/glasses/monocle =1, - /obj/item/clothing/head/bowler = 1, - /obj/item/cane = 1, - /obj/item/clothing/under/suit/sl = 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/toggle/owlwings = 1, - /obj/item/clothing/under/costume/owl = 1, - /obj/item/clothing/mask/gas/owl_mask = 1, - /obj/item/clothing/suit/toggle/owlwings/griffinwings = 1, - /obj/item/clothing/under/costume/griffin = 1, - /obj/item/clothing/shoes/griffin = 1, - /obj/item/clothing/head/griffin = 1, - /obj/item/clothing/suit/apron = 1, - /obj/item/clothing/under/suit/waiter = 1, - /obj/item/clothing/suit/jacket/miljacket = 1, - /obj/item/clothing/under/costume/pirate = 1, - /obj/item/clothing/suit/pirate = 1, - /obj/item/clothing/head/pirate = 1, - /obj/item/clothing/head/bandana = 1, - /obj/item/clothing/head/bandana = 1, - /obj/item/clothing/under/costume/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/chaplainsuit/holidaypriest = 1, - /obj/item/clothing/suit/chaplainsuit/whiterobe = 1, - /obj/item/clothing/head/wizard/marisa/fake = 1, - /obj/item/clothing/suit/wizrobe/marisa/fake = 1, - /obj/item/clothing/under/dress/sundress = 1, - /obj/item/clothing/head/witchwig = 1, - /obj/item/broom = 1, - /obj/item/clothing/suit/wizrobe/fake = 1, - /obj/item/clothing/head/wizard/fake = 1, - /obj/item/staff = 3, - /obj/item/clothing/mask/gas/sexyclown = 1, - /obj/item/clothing/under/rank/civilian/clown/sexy = 1, - /obj/item/clothing/mask/gas/sexymime = 1, - /obj/item/clothing/under/rank/civilian/mime/sexy = 1, - /obj/item/clothing/under/rank/civilian/mime/skirt = 1, - /obj/item/clothing/mask/rat/bat = 1, - /obj/item/clothing/mask/rat/bee = 1, - /obj/item/clothing/mask/rat/bear = 1, - /obj/item/clothing/mask/rat/raven = 1, - /obj/item/clothing/mask/rat/jackal = 1, - /obj/item/clothing/mask/rat/fox = 1, - /obj/item/clothing/mask/frog = 1, - /obj/item/clothing/mask/rat/tribal = 1, - /obj/item/clothing/mask/rat = 1, - /obj/item/clothing/suit/apron/overalls = 1, - /obj/item/clothing/head/rabbitears =1, - /obj/item/clothing/head/sombrero = 1, - /obj/item/clothing/head/sombrero/green = 1, - /obj/item/clothing/suit/poncho = 1, - /obj/item/clothing/suit/poncho/green = 1, - /obj/item/clothing/suit/poncho/red = 1, - /obj/item/clothing/under/costume/maid = 1, - /obj/item/clothing/under/rank/civilian/janitor/maid = 1, - /obj/item/clothing/glasses/cold=1, - /obj/item/clothing/glasses/heat=1, - /obj/item/clothing/suit/whitedress = 1, - /obj/item/clothing/under/rank/civilian/clown/jester = 1, - /obj/item/clothing/head/jester = 1, - /obj/item/clothing/under/costume/villain = 1, - /obj/item/clothing/shoes/singery = 1, - /obj/item/clothing/under/costume/singer/yellow = 1, - /obj/item/clothing/shoes/singerb = 1, - /obj/item/clothing/under/costume/singer/blue = 1, - /obj/item/clothing/suit/hooded/carp_costume = 1, - /obj/item/clothing/suit/hooded/ian_costume = 1, - /obj/item/clothing/suit/hooded/bee_costume = 1, - /obj/item/clothing/suit/snowman = 1, - /obj/item/clothing/head/snowman = 1, - /obj/item/clothing/mask/joy = 1, - /obj/item/clothing/head/cueball = 1, - /obj/item/clothing/under/suit/white_on_white = 1, - /obj/item/clothing/under/costume/sailor = 1, - /obj/item/clothing/ears/headphones = 2, - /obj/item/clothing/head/delinquent = 1, - /obj/item/clothing/head/wig/random = 3, - /obj/item/clothing/head/shrine_wig = 1, - /obj/item/clothing/suit/shrine_maiden = 1, - /obj/item/gohei = 1) - contraband = list(/obj/item/clothing/suit/judgerobe = 1, - /obj/item/clothing/head/powdered_wig = 1, - /obj/item/gun/magic/wand = 2, - /obj/item/clothing/glasses/sunglasses/garb = 2, - /obj/item/clothing/glasses/blindfold = 1, - /obj/item/clothing/mask/muzzle = 2) - premium = list(/obj/item/clothing/suit/pirate/captain = 2, - /obj/item/clothing/head/pirate/captain = 2, - /obj/item/clothing/under/rank/civilian/clown/rainbow = 1, - /obj/item/clothing/head/helmet/roman/fake = 1, - /obj/item/clothing/head/helmet/roman/legionnaire/fake = 1, - /obj/item/clothing/under/costume/roman = 1, - /obj/item/clothing/shoes/roman = 1, - /obj/item/shield/riot/roman/fake = 1, - /obj/item/clothing/suit/chaplainsuit/clownpriest = 1, - /obj/item/clothing/head/clownmitre = 1, - /obj/item/skub = 1) - refill_canister = /obj/item/vending_refill/autodrobe - -/obj/machinery/vending/autodrobe/canLoadItem(obj/item/I,mob/user) - return (I.type in products) - -/* default_price = 50 - extra_price = 75 - payment_department = ACCOUNT_SRV */ -/obj/machinery/vending/autodrobe/all_access - desc = "" - req_access = null - -/obj/item/vending_refill/autodrobe - machine_name = "AutoDrobe" - icon_state = "refill_costume" diff --git a/code/modules/vending/boozeomat.dm b/code/modules/vending/boozeomat.dm deleted file mode 100644 index 508f52fcdc..0000000000 --- a/code/modules/vending/boozeomat.dm +++ /dev/null @@ -1,45 +0,0 @@ -/obj/machinery/vending/boozeomat - name = "\improper Booze-O-Mat" - desc = "" - icon_state = "boozeomat" - icon_deny = "boozeomat-deny" - products = list( - /obj/item/reagent_containers/food/drinks/drinkingglass = 30, - ) - contraband = list( - /obj/item/reagent_containers/food/drinks/mug/tea = 12, - ) - premium = list( - /obj/item/reagent_containers/glass/bottle/ethanol = 4, - ) - - product_slogans = "I hope nobody asks me for a bloody cup o' tea...;Alcohol is humanity's friend. Would you abandon a friend?;Quite delighted to serve you!;Is nobody thirsty on this station?" - product_ads = "Drink up!;Booze is good for you!;Alcohol is humanity's best friend.;Quite delighted to serve you!;Care for a nice, cold beer?;Nothing cures you like booze!;Have a sip!;Have a drink!;Have a beer!;Beer is good for you!;Only the finest alcohol!;Best quality booze since 2053!;Award-winning wine!;Maximum alcohol!;Man loves beer.;A toast for progress!" - req_access = list(ACCESS_BAR) - refill_canister = /obj/item/vending_refill/boozeomat - default_price = 20 - extra_price = 50 - payment_department = ACCOUNT_SRV - -/obj/machinery/vending/boozeomat/all_access - desc = "" - req_access = null - -/obj/machinery/vending/boozeomat/pubby_maint //abandoned bar on Pubbystation - products = list( - /obj/item/reagent_containers/food/drinks/ice = 3, - /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 6, - /obj/item/reagent_containers/food/drinks/flask = 1) - req_access = null - -/obj/machinery/vending/boozeomat/pubby_captain //Captain's quarters on Pubbystation - products = list( - /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 4); - req_access = list(ACCESS_CAPTAIN) - -/obj/machinery/vending/boozeomat/syndicate_access - req_access = list(ACCESS_SYNDICATE) - -/obj/item/vending_refill/boozeomat - machine_name = "Booze-O-Mat" - icon_state = "refill_booze" diff --git a/code/modules/vending/cartridge.dm b/code/modules/vending/cartridge.dm deleted file mode 100644 index 529d2e09dd..0000000000 --- a/code/modules/vending/cartridge.dm +++ /dev/null @@ -1,24 +0,0 @@ -//This one's from bay12 -/obj/machinery/vending/cart - name = "\improper PTech" - desc = "" - product_slogans = "Carts to go!" - icon_state = "cart" - icon_deny = "cart-deny" - products = list(/obj/item/cartridge/medical = 10, - /obj/item/cartridge/engineering = 10, - /obj/item/cartridge/security = 10, - /obj/item/cartridge/janitor = 10, - /obj/item/cartridge/signal/toxins = 10, - /obj/item/pda/heads = 10, - /obj/item/cartridge/captain = 3, - /obj/item/cartridge/quartermaster = 10) - refill_canister = /obj/item/vending_refill/cart - default_price = 50 - extra_price = 100 - payment_department = ACCOUNT_SRV - -/obj/item/vending_refill/cart - machine_name = "PTech" - icon_state = "refill_smoke" - diff --git a/code/modules/vending/cigarette.dm b/code/modules/vending/cigarette.dm deleted file mode 100644 index a89e3c5f65..0000000000 --- a/code/modules/vending/cigarette.dm +++ /dev/null @@ -1,63 +0,0 @@ -/obj/machinery/vending/cigarette - name = "\improper ShadyCigs Deluxe" - desc = "" - product_slogans = "Space cigs taste good like a cigarette should.;I'd rather toolbox than switch.;Smoke!;Don't believe the reports - smoke today!" - product_ads = "Probably not bad for you!;Don't believe the scientists!;It's good for you!;Don't quit, buy more!;Smoke!;Nicotine heaven.;Best cigarettes since 2150.;Award-winning cigs." - icon_state = "cigs" - products = list(/obj/item/storage/fancy/cigarettes = 5, - /obj/item/storage/fancy/cigarettes/cigpack_candy = 4, - /obj/item/storage/fancy/cigarettes/cigpack_uplift = 3, - /obj/item/storage/fancy/cigarettes/cigpack_robust = 3, - /obj/item/storage/fancy/cigarettes/cigpack_carp = 3, - /obj/item/storage/fancy/cigarettes/cigpack_midori = 3, - /obj/item/storage/box/matches = 10, - /obj/item/lighter/greyscale = 4, - /obj/item/storage/fancy/rollingpapers = 5) - contraband = list(/obj/item/clothing/mask/vape = 5) - premium = list(/obj/item/storage/fancy/cigarettes/cigpack_robustgold = 3, - /obj/item/lighter = 3, - /obj/item/storage/fancy/cigarettes/cigars = 1, - /obj/item/storage/fancy/cigarettes/cigars/havana = 1, - /obj/item/storage/fancy/cigarettes/cigars/cohiba = 1) - refill_canister = /obj/item/vending_refill/cigarette - default_price = 10 - extra_price = 50 - payment_department = ACCOUNT_SRV - -/obj/machinery/vending/cigarette/syndicate - products = list(/obj/item/storage/fancy/cigarettes/cigpack_syndicate = 7, - /obj/item/storage/fancy/cigarettes/cigpack_uplift = 3, - /obj/item/storage/fancy/cigarettes/cigpack_candy = 2, - /obj/item/storage/fancy/cigarettes/cigpack_robust = 2, - /obj/item/storage/fancy/cigarettes/cigpack_carp = 3, - /obj/item/storage/fancy/cigarettes/cigpack_midori = 1, - /obj/item/storage/box/matches = 10, - /obj/item/lighter/greyscale = 4, - /obj/item/storage/fancy/rollingpapers = 5) - -/obj/machinery/vending/cigarette/beach //Used in the lavaland_biodome_beach.dmm ruin - name = "\improper ShadyCigs Ultra" - desc = "" - product_ads = "Probably not bad for you!;Dope will get you through times of no money better than money will get you through times of no dope!;It's good for you!" - product_slogans = "Turn on, tune in, drop out!;Better living through chemistry!;Toke!;Don't forget to keep a smile on your lips and a song in your heart!" - products = list(/obj/item/storage/fancy/cigarettes = 5, - /obj/item/storage/fancy/cigarettes/cigpack_uplift = 3, - /obj/item/storage/fancy/cigarettes/cigpack_robust = 3, - /obj/item/storage/fancy/cigarettes/cigpack_carp = 3, - /obj/item/storage/fancy/cigarettes/cigpack_midori = 3, - /obj/item/storage/fancy/cigarettes/cigpack_cannabis = 5, - /obj/item/storage/box/matches = 10, - /obj/item/lighter/greyscale = 4, - /obj/item/storage/fancy/rollingpapers = 5) - premium = list(/obj/item/storage/fancy/cigarettes/cigpack_mindbreaker = 5, - /obj/item/clothing/mask/vape = 5, - /obj/item/lighter = 3) - -/obj/item/vending_refill/cigarette - machine_name = "ShadyCigs Deluxe" - icon_state = "refill_smoke" - -/obj/machinery/vending/cigarette/pre_throw(obj/item/I) - if(istype(I, /obj/item/lighter)) - var/obj/item/lighter/L = I - L.set_lit(TRUE) diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm deleted file mode 100644 index 5d0b0143ee..0000000000 --- a/code/modules/vending/clothesmate.dm +++ /dev/null @@ -1,138 +0,0 @@ -//DON'T FORGET TO CHANGE THE REFILL SIZE IF YOU CHANGE THE MACHINE'S CONTENTS! -/obj/machinery/vending/clothing - name = "ClothesMate" //renamed to make the slogan rhyme - desc = "" - icon_state = "clothes" - icon_deny = "clothes-deny" - product_slogans = "Dress for success!;Prepare to look swagalicious!;Look at all this swag!;Why leave style up to fate? Use the ClothesMate!" - vend_reply = "Thank you for using the ClothesMate!" - products = list(/obj/item/clothing/head/beanie = 3, - /obj/item/clothing/head/beanie/black = 3, - /obj/item/clothing/head/beanie/red = 3, - /obj/item/clothing/head/beanie/green = 3, - /obj/item/clothing/head/beanie/darkblue = 3, - /obj/item/clothing/head/beanie/purple = 3, - /obj/item/clothing/head/beanie/yellow = 3, - /obj/item/clothing/head/beanie/orange = 3, - /obj/item/clothing/head/beanie/cyan = 3, - /obj/item/clothing/head/beanie/christmas = 3, - /obj/item/clothing/head/beanie/striped = 3, - /obj/item/clothing/head/beanie/stripedred = 3, - /obj/item/clothing/head/beanie/stripedblue = 3, - /obj/item/clothing/head/beanie/stripedgreen = 3, - /obj/item/clothing/head/beanie/rasta = 3, - /obj/item/clothing/head/kippah = 3, - /obj/item/clothing/head/taqiyahred = 3, - /obj/item/clothing/gloves/fingerless = 2, - /obj/item/clothing/neck/scarf/pink = 3, - /obj/item/clothing/neck/scarf/red = 3, - /obj/item/clothing/neck/scarf/green = 3, - /obj/item/clothing/neck/scarf/darkblue = 3, - /obj/item/clothing/neck/scarf/purple = 3, - /obj/item/clothing/neck/scarf/yellow = 3, - /obj/item/clothing/neck/scarf/orange = 3, - /obj/item/clothing/neck/scarf/cyan = 3, - /obj/item/clothing/neck/scarf = 3, - /obj/item/clothing/neck/scarf/black = 3, - /obj/item/clothing/neck/scarf/zebra = 3, - /obj/item/clothing/neck/scarf/christmas = 3, - /obj/item/clothing/neck/stripedredscarf = 3, - /obj/item/clothing/neck/stripedbluescarf = 3, - /obj/item/clothing/neck/stripedgreenscarf = 3, - /obj/item/clothing/neck/tie/blue = 3, - /obj/item/clothing/neck/tie/red = 3, - /obj/item/clothing/neck/tie/black = 3, - /obj/item/clothing/neck/tie/horrible = 3, - /obj/item/storage/belt/fannypack = 3, - /obj/item/storage/belt/fannypack/blue = 3, - /obj/item/storage/belt/fannypack/red = 3, - /obj/item/clothing/ears/headphones = 2, - /obj/item/clothing/under/misc/overalls = 2, - /obj/item/clothing/under/pants/jeans = 2, - /obj/item/clothing/under/pants/classicjeans = 2, - /obj/item/clothing/under/pants/camo = 2, - /obj/item/clothing/under/pants/blackjeans = 2, - /obj/item/clothing/under/pants/khaki = 2, - /obj/item/clothing/under/pants/white = 2, - /obj/item/clothing/under/pants/red = 2, - /obj/item/clothing/under/pants/black = 2, - /obj/item/clothing/under/pants/tan = 2, - /obj/item/clothing/under/pants/track = 2, - /obj/item/clothing/shoes/sneakers/black = 4, - /obj/item/clothing/head/wig/natural = 4, - /obj/item/clothing/under/dress/skirt/plaid = 2, - /obj/item/clothing/under/dress/skirt/plaid/blue = 2, - /obj/item/clothing/under/dress/skirt/plaid/green = 2, - /obj/item/clothing/under/dress/skirt/plaid/purple = 2, - /obj/item/clothing/under/dress/skirt = 2, - /obj/item/clothing/under/dress/skirt/blue = 2, - /obj/item/clothing/under/dress/skirt/red = 2, - /obj/item/clothing/under/dress/skirt/purple = 2, - /obj/item/clothing/under/suit/white/skirt = 2, - /obj/item/clothing/under/rank/captain/suit/skirt = 2, - /obj/item/clothing/under/rank/civilian/head_of_personnel/suit/skirt = 2, - /obj/item/clothing/suit/jacket = 2, - /obj/item/clothing/suit/jacket/puffer/vest = 2, - /obj/item/clothing/suit/jacket/puffer = 2, - /obj/item/clothing/suit/jacket/letterman = 2, - /obj/item/clothing/suit/jacket/letterman_red = 2, - /obj/item/clothing/glasses/regular = 2, - /obj/item/clothing/glasses/regular/jamjar = 1, - /obj/item/clothing/glasses/orange = 1, - /obj/item/clothing/glasses/red = 1, - /obj/item/clothing/under/suit/navy = 1, - /obj/item/clothing/under/suit/black_really = 1, - /obj/item/clothing/under/suit/burgundy = 1, - /obj/item/clothing/under/suit/charcoal = 1, - /obj/item/clothing/under/suit/white = 1, - /obj/item/clothing/under/suit/sl = 1, - /obj/item/clothing/accessory/waistcoat = 1, - /obj/item/clothing/head/that = 1, - /obj/item/clothing/head/fedora = 1, - /obj/item/clothing/glasses/monocle = 1, - /obj/item/clothing/head/sombrero = 1, - /obj/item/clothing/suit/poncho = 1, - /obj/item/clothing/under/costume/kilt = 1, - /obj/item/clothing/under/dress/sundress = 1, - /obj/item/clothing/under/dress/striped = 1, - /obj/item/clothing/under/dress/sailor = 1, - /obj/item/clothing/under/dress/redeveninggown = 1, - /obj/item/clothing/under/dress/blacktango = 1, - /obj/item/clothing/suit/ianshirt = 1, - /obj/item/clothing/shoes/laceup = 2, - /obj/item/clothing/shoes/sandal = 2, - /obj/item/clothing/shoes/cowboy = 2, - /obj/item/clothing/shoes/cowboy/white = 2, - /obj/item/clothing/shoes/cowboy/black = 2, - /obj/item/clothing/suit/jacket/miljacket = 1, - /obj/item/clothing/suit/apron/purple_bartender = 2, - /obj/item/clothing/under/rank/civilian/bartender/purple = 2) - contraband = list(/obj/item/clothing/under/syndicate/tacticool = 1, - /obj/item/clothing/under/syndicate/tacticool/skirt = 1, - /obj/item/clothing/mask/balaclava = 1, - /obj/item/clothing/head/ushanka = 1, - /obj/item/clothing/under/costume/soviet = 1, - /obj/item/storage/belt/fannypack/black = 2, - /obj/item/clothing/suit/jacket/letterman_syndie = 1, - /obj/item/clothing/under/costume/jabroni = 1, - /obj/item/clothing/suit/vapeshirt = 1, - /obj/item/clothing/under/costume/geisha = 1) - premium = list(/obj/item/clothing/under/suit/checkered = 1, - /obj/item/clothing/head/mailman = 1, - /obj/item/clothing/under/misc/mailman = 1, - /obj/item/clothing/suit/jacket/leather = 1, - /obj/item/clothing/suit/jacket/leather/overcoat = 1, - /obj/item/clothing/under/pants/mustangjeans = 1, - /obj/item/clothing/neck/necklace/dope = 3, - /obj/item/clothing/suit/jacket/letterman_nanotrasen = 1) - refill_canister = /obj/item/vending_refill/clothing - default_price = 50 - extra_price = 75 - payment_department = NO_FREEBIES - -/obj/machinery/vending/clothing/canLoadItem(obj/item/I,mob/user) - return (I.type in products) - -/obj/item/vending_refill/clothing - machine_name = "ClothesMate" - icon_state = "refill_clothes" diff --git a/code/modules/vending/coffee.dm b/code/modules/vending/coffee.dm deleted file mode 100644 index 7e2f4dd805..0000000000 --- a/code/modules/vending/coffee.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/machinery/vending/coffee - name = "\improper Solar's Best Hot Drinks" - desc = "" - product_ads = "Have a drink!;Drink up!;It's good for you!;Would you like a hot joe?;I'd kill for some coffee!;The best beans in the galaxy.;Only the finest brew for you.;Mmmm. Nothing like a coffee.;I like coffee, don't you?;Coffee helps you work!;Try some tea.;We hope you like the best!;Try our new chocolate!;Admin conspiracies" - icon_state = "coffee" - icon_vend = "coffee-vend" - products = list(/obj/item/reagent_containers/food/drinks/coffee = 6, - /obj/item/reagent_containers/food/drinks/mug/tea = 6, - /obj/item/reagent_containers/food/drinks/mug/coco = 3) - contraband = list(/obj/item/reagent_containers/food/drinks/ice = 12) - refill_canister = /obj/item/vending_refill/coffee - default_price = 10 - extra_price = 25 - payment_department = ACCOUNT_SRV -/obj/item/vending_refill/coffee - machine_name = "Solar's Best Hot Drinks" - icon_state = "refill_joe" diff --git a/code/modules/vending/cola.dm b/code/modules/vending/cola.dm deleted file mode 100644 index 54afe906a4..0000000000 --- a/code/modules/vending/cola.dm +++ /dev/null @@ -1,87 +0,0 @@ - -/obj/machinery/vending/cola - name = "\improper Robust Softdrinks" - desc = "" - icon_state = "Cola_Machine" - product_slogans = "Robust Softdrinks: More robust than a toolbox to the head!" - product_ads = "Refreshing!;Hope you're thirsty!;Over 1 million drinks sold!;Thirsty? Why not cola?;Please, have a drink!;Drink up!;The best drinks in space." - products = list(/obj/item/reagent_containers/food/drinks/soda_cans/cola = 10, - /obj/item/reagent_containers/food/drinks/soda_cans/space_mountain_wind = 10, - /obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb = 10, - /obj/item/reagent_containers/food/drinks/soda_cans/starkist = 10, - /obj/item/reagent_containers/food/drinks/soda_cans/space_up = 10, - /obj/item/reagent_containers/food/drinks/soda_cans/pwr_game = 10, - /obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime = 10, - /obj/item/reagent_containers/glass/waterbottle = 10) - contraband = list(/obj/item/reagent_containers/food/drinks/soda_cans/thirteenloko = 6, - /obj/item/reagent_containers/food/drinks/soda_cans/shamblers = 6) - premium = list(/obj/item/reagent_containers/food/drinks/drinkingglass/filled/nuka_cola = 1, - /obj/item/reagent_containers/food/drinks/soda_cans/air = 1, - /obj/item/reagent_containers/food/drinks/soda_cans/monkey_energy = 1, - /obj/item/reagent_containers/food/drinks/soda_cans/grey_bull = 1) - refill_canister = /obj/item/vending_refill/cola - default_price = 10 - extra_price = 30 - payment_department = ACCOUNT_SRV -/obj/item/vending_refill/cola - machine_name = "Robust Softdrinks" - icon_state = "refill_cola" - -/obj/machinery/vending/cola/random - name = "\improper Random Drinkies" - icon_state = "random_cola" - desc = "" - -/obj/machinery/vending/cola/random/Initialize() - ..() - var/T = pick(subtypesof(/obj/machinery/vending/cola) - /obj/machinery/vending/cola/random) - new T(loc) - return INITIALIZE_HINT_QDEL - -/obj/machinery/vending/cola/blue - icon_state = "Cola_Machine" - -/obj/machinery/vending/cola/black - icon_state = "cola_black" - -/obj/machinery/vending/cola/red - icon_state = "red_cola" - name = "\improper Space Cola Vendor" - desc = "" - product_slogans = "Cola in space!" - -/obj/machinery/vending/cola/space_up - icon_state = "space_up" - name = "\improper Space-up! Vendor" - desc = "" - product_slogans = "Space-up! Like a hull breach in your mouth." - -/obj/machinery/vending/cola/starkist - icon_state = "starkist" - name = "\improper Star-kist Vendor" - desc = "" - product_slogans = "Drink the stars! Star-kist!" - -/obj/machinery/vending/cola/sodie - icon_state = "soda" - -/obj/machinery/vending/cola/pwr_game - icon_state = "pwr_game" - name = "\improper Pwr Game Vendor" - desc = "" - product_slogans = "The POWER that gamers crave! PWR GAME!" - -/obj/machinery/vending/cola/shamblers - name = "\improper Shambler's Vendor" - desc = "" - icon_state = "shamblers_juice" - products = list(/obj/item/reagent_containers/food/drinks/soda_cans/cola = 10, - /obj/item/reagent_containers/food/drinks/soda_cans/space_mountain_wind = 10, - /obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb = 10, - /obj/item/reagent_containers/food/drinks/soda_cans/starkist = 10, - /obj/item/reagent_containers/food/drinks/soda_cans/space_up = 10, - /obj/item/reagent_containers/food/drinks/soda_cans/pwr_game = 10, - /obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime = 10, - /obj/item/reagent_containers/food/drinks/soda_cans/shamblers = 10) - product_slogans = "~Shake me up some of that Shambler's Juice!~" - product_ads = "Refreshing!;Jyrbv dv lg jfdv fw kyrk Jyrdscvi'j Alztv!;Over 1 trillion souls drank!;Thirsty? Nyp efk uizeb kyv uribevjj?;Kyv Jyrdscvi uizebj kyv ezxyk!;Drink up!;Krjkp." diff --git a/code/modules/vending/drinnerware.dm b/code/modules/vending/drinnerware.dm deleted file mode 100644 index 174fd9aefd..0000000000 --- a/code/modules/vending/drinnerware.dm +++ /dev/null @@ -1,28 +0,0 @@ -/obj/machinery/vending/dinnerware - name = "\improper Plasteel Chef's Dinnerware Vendor" - desc = "" - product_ads = "Mm, food stuffs!;Food and food accessories.;Get your plates!;You like forks?;I like forks.;Woo, utensils.;You don't really need these..." - icon_state = "dinnerware" - products = list(/obj/item/storage/bag/tray = 8, - /obj/item/reagent_containers/glass/bowl = 20, - /obj/item/kitchen/fork = 6, - /obj/item/reagent_containers/food/drinks/drinkingglass = 8, - /obj/item/reagent_containers/food/condiment/pack/ketchup = 5, - /obj/item/reagent_containers/food/condiment/pack/hotsauce = 5, - /obj/item/reagent_containers/food/condiment/pack/astrotame = 5, - /obj/item/reagent_containers/food/condiment/saltshaker = 5, - /obj/item/reagent_containers/food/condiment/peppermill = 5, - /obj/item/clothing/suit/apron/chef = 2, - /obj/item/kitchen/rollingpin = 2, - /obj/item/kitchen/knife = 2, - /obj/item/book/granter/crafting_recipe/cooking_sweets_101 = 2) - contraband = list(/obj/item/kitchen/rollingpin = 2, - /obj/item/kitchen/knife/butcher = 2) - refill_canister = /obj/item/vending_refill/dinnerware - default_price = 5 - extra_price = 50 - payment_department = ACCOUNT_SRV - -/obj/item/vending_refill/dinnerware - machine_name = "Plasteel Chef's Dinnerware Vendor" - icon_state = "refill_smoke" diff --git a/code/modules/vending/engineering.dm b/code/modules/vending/engineering.dm deleted file mode 100644 index 2581daff49..0000000000 --- a/code/modules/vending/engineering.dm +++ /dev/null @@ -1,37 +0,0 @@ -//This one's from bay12 -/obj/machinery/vending/engineering - name = "\improper Robco Tool Maker" - desc = "" - icon_state = "engi" - icon_deny = "engi-deny" - req_access = list(ACCESS_ENGINE_EQUIP) - products = list(/obj/item/clothing/under/rank/engineering/chief_engineer = 4, - /obj/item/clothing/under/rank/engineering/engineer = 4, - /obj/item/clothing/shoes/sneakers/orange = 4, - /obj/item/clothing/head/hardhat = 4, - /obj/item/storage/belt/utility = 4, - /obj/item/clothing/glasses/meson/engine = 4, - /obj/item/clothing/gloves/color/yellow = 4, - /obj/item/screwdriver = 12, - /obj/item/crowbar = 12, - /obj/item/wirecutters = 12, - /obj/item/multitool = 12, - /obj/item/wrench = 12, - /obj/item/t_scanner = 12, - /obj/item/stock_parts/cell = 8, - /obj/item/weldingtool = 8, - /obj/item/clothing/head/welding = 8, - /obj/item/light/tube = 10, - /obj/item/clothing/suit/fire = 4, - /obj/item/stock_parts/scanning_module = 5, - /obj/item/stock_parts/micro_laser = 5, - /obj/item/stock_parts/matter_bin = 5, - /obj/item/stock_parts/manipulator = 5) - refill_canister = /obj/item/vending_refill/engineering - default_price = 50 - extra_price = 60 - payment_department = ACCOUNT_ENG - -/obj/item/vending_refill/engineering - machine_name = "Robco Tool Maker" - icon_state = "refill_engi" diff --git a/code/modules/vending/engivend.dm b/code/modules/vending/engivend.dm deleted file mode 100644 index d36f7ccb27..0000000000 --- a/code/modules/vending/engivend.dm +++ /dev/null @@ -1,29 +0,0 @@ -/obj/machinery/vending/engivend - name = "\improper Engi-Vend" - desc = "" - icon_state = "engivend" - icon_deny = "engivend-deny" - req_access = list(ACCESS_ENGINE_EQUIP) - products = list(/obj/item/clothing/glasses/meson/engine = 2, - /obj/item/clothing/glasses/welding = 3, - /obj/item/multitool = 4, - /obj/item/construction/rcd/loaded = 3, - /obj/item/grenade/chem_grenade/smart_metal_foam = 10, - /obj/item/geiger_counter = 5, - /obj/item/stock_parts/cell/high = 10, - /obj/item/electronics/airlock = 10, - /obj/item/electronics/apc = 10, - /obj/item/electronics/airalarm = 10, - /obj/item/electronics/firealarm = 10, - /obj/item/electronics/firelock = 10) - contraband = list(/obj/item/stock_parts/cell/potato = 3) - premium = list(/obj/item/storage/belt/utility = 3, - /obj/item/storage/box/smart_metal_foam = 1) - refill_canister = /obj/item/vending_refill/engivend - default_price = 20 - extra_price = 50 - payment_department = ACCOUNT_ENG - -/obj/item/vending_refill/engivend - machine_name = "Engi-Vend" - icon_state = "refill_engi" diff --git a/code/modules/vending/games.dm b/code/modules/vending/games.dm deleted file mode 100644 index 412b6dad06..0000000000 --- a/code/modules/vending/games.dm +++ /dev/null @@ -1,22 +0,0 @@ -/obj/machinery/vending/games - name = "\improper Good Clean Fun" - desc = "" - product_ads = "Escape to a fantasy world!;Fuel your gambling addiction!;Ruin your friendships!;Roll for initiative!;Elves and dwarves!;Paranoid computers!;Totally not satanic!;Fun times forever!" - icon_state = "games" - products = list(/obj/item/toy/cards/deck = 5, - /obj/item/storage/pill_bottle/dice = 10, - /obj/item/toy/cards/deck/cas = 3, - /obj/item/toy/cards/deck/cas/black = 3, - /obj/item/hourglass = 2, - /obj/item/camera = 3) - contraband = list(/obj/item/dice/fudge = 9) - premium = list(/obj/item/melee/skateboard/pro = 3, - /obj/item/melee/skateboard/hoverboard = 1) - refill_canister = /obj/item/vending_refill/games - default_price = 10 - extra_price = 25 - payment_department = ACCOUNT_SRV - -/obj/item/vending_refill/games - machine_name = "\improper Good Clean Fun" - icon_state = "refill_games" diff --git a/code/modules/vending/liberation.dm b/code/modules/vending/liberation.dm deleted file mode 100644 index 00586dc678..0000000000 --- a/code/modules/vending/liberation.dm +++ /dev/null @@ -1,33 +0,0 @@ -/obj/machinery/vending/liberationstation - name = "\improper Liberation Station" - desc = "" - icon_state = "liberationstation" - product_slogans = "Liberation Station: Your one-stop shop for all things second amendment!;Be a patriot today, pick up a gun!;Quality weapons for cheap prices!;Better dead than red!" - product_ads = "Float like an astronaut, sting like a bullet!;Express your second amendment today!;Guns don't kill people, but you can!;Who needs responsibilities when you have guns?" - vend_reply = "Remember the name: Liberation Station!" - products = list(/obj/item/reagent_containers/food/snacks/burger/plain = 5, //O say can you see, by the dawn's early light - /obj/item/reagent_containers/food/snacks/burger/baseball = 3, //What so proudly we hailed at the twilight's last gleaming - /obj/item/reagent_containers/food/snacks/fries = 5, //Whose broad stripes and bright stars through the perilous fight - /obj/item/reagent_containers/food/drinks/beer/light = 10, //O'er the ramparts we watched, were so gallantly streaming? - /obj/item/gun/ballistic/automatic/pistol/deagle/gold = 2, - /obj/item/gun/ballistic/automatic/pistol/deagle/camo = 2, - /obj/item/gun/ballistic/automatic/pistol/m1911 = 2, - /obj/item/gun/ballistic/automatic/proto/unrestricted = 2, - /obj/item/gun/ballistic/shotgun/automatic/combat = 2, - /obj/item/gun/ballistic/automatic/gyropistol = 1, - /obj/item/gun/ballistic/shotgun = 2, - /obj/item/gun/ballistic/automatic/ar = 2) - premium = list(/obj/item/ammo_box/magazine/smgm9mm = 2, - /obj/item/ammo_box/magazine/m50 = 4, - /obj/item/ammo_box/magazine/m45 = 2, - /obj/item/ammo_box/magazine/m75 = 2, - /obj/item/reagent_containers/food/snacks/cheesyfries = 5, - /obj/item/reagent_containers/food/snacks/burger/baconburger = 5) //Premium burgers for the premium section - contraband = list(/obj/item/clothing/under/misc/patriotsuit = 3, - /obj/item/bedsheet/patriot = 5, - /obj/item/reagent_containers/food/snacks/burger/superbite = 3) //U S A - armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) - resistance_flags = FIRE_PROOF - default_price = 50 - extra_price = 100 - payment_department = ACCOUNT_SEC diff --git a/code/modules/vending/liberation_toy.dm b/code/modules/vending/liberation_toy.dm deleted file mode 100644 index d5c394fdd2..0000000000 --- a/code/modules/vending/liberation_toy.dm +++ /dev/null @@ -1,30 +0,0 @@ -/obj/machinery/vending/toyliberationstation - name = "\improper Syndicate Donksoft Toy Vendor" - desc = "" - icon_state = "syndi" - product_slogans = "Get your cool toys today!;Trigger a valid hunter today!;Quality toy weapons for cheap prices!;Give them to HoPs for all access!;Give them to HoS to get permabrigged!" - product_ads = "Feel robust with your toys!;Express your inner child today!;Toy weapons don't kill people, but valid hunters do!;Who needs responsibilities when you have toy weapons?;Make your next murder FUN!" - vend_reply = "Come back for more!" - circuit = /obj/item/circuitboard/machine/vending/syndicatedonksofttoyvendor - products = list(/obj/item/gun/ballistic/automatic/toy/unrestricted = 10, - /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted = 10, - /obj/item/gun/ballistic/shotgun/toy/unrestricted = 10, - /obj/item/toy/sword = 10, - /obj/item/ammo_box/foambox = 20, - /obj/item/toy/foamblade = 10, - /obj/item/toy/balloon/syndicate = 10, - /obj/item/clothing/suit/syndicatefake = 5, - /obj/item/clothing/head/syndicatefake = 5) //OPS IN DORMS oh wait it's just an assistant - contraband = list(/obj/item/gun/ballistic/shotgun/toy/crossbow = 10, //Congrats, you unlocked the +18 setting! - /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot = 10, - /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted/riot = 10, - /obj/item/ammo_box/foambox/riot = 20, - /obj/item/toy/katana = 10, - /obj/item/twohanded/dualsaber/toy = 5, - /obj/item/toy/cards/deck/syndicate = 10) //Gambling and it hurts, making it a +18 item - armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) - resistance_flags = FIRE_PROOF - refill_canister = /obj/item/vending_refill/donksoft - default_price = 25 - extra_price = 50 - payment_department = ACCOUNT_SRV diff --git a/code/modules/vending/magivend.dm b/code/modules/vending/magivend.dm deleted file mode 100644 index fcd3f42e5b..0000000000 --- a/code/modules/vending/magivend.dm +++ /dev/null @@ -1,21 +0,0 @@ -/obj/machinery/vending/magivend - name = "\improper MagiVend" - desc = "" - icon_state = "MagiVend" - product_slogans = "Sling spells the proper way with MagiVend!;Be your own Houdini! Use MagiVend!" - vend_reply = "Have an enchanted evening!" - product_ads = "FJKLFJSD;AJKFLBJAKL;1234 LOONIES LOL!;>MFW;Kill them fuckers!;GET DAT FUKKEN DISK;HONK!;EI NATH;Destroy the station!;Admin conspiracies since forever!;Space-time bending hardware!" - products = list(/obj/item/clothing/head/wizard = 1, - /obj/item/clothing/suit/wizrobe = 1, - /obj/item/clothing/head/wizard/red = 1, - /obj/item/clothing/suit/wizrobe/red = 1, - /obj/item/clothing/head/wizard/yellow = 1, - /obj/item/clothing/suit/wizrobe/yellow = 1, - /obj/item/clothing/shoes/sandal/magic = 1, - /obj/item/staff = 2) - contraband = list(/obj/item/reagent_containers/glass/bottle/wizarditis = 1) //No one can get to the machine to hack it anyways; for the lulz - Microwave - armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) - resistance_flags = FIRE_PROOF - default_price = 25 - extra_price = 50 - payment_department = ACCOUNT_SRV diff --git a/code/modules/vending/medical.dm b/code/modules/vending/medical.dm deleted file mode 100644 index 5206374329..0000000000 --- a/code/modules/vending/medical.dm +++ /dev/null @@ -1,52 +0,0 @@ -/obj/machinery/vending/medical - name = "\improper NanoMed Plus" - desc = "" - icon_state = "med" - icon_deny = "med-deny" - product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!" - req_access = list(ACCESS_MEDICAL) - products = list(/obj/item/stack/medical/gauze = 8, - /obj/item/reagent_containers/syringe = 12, - /obj/item/reagent_containers/dropper = 3, - /obj/item/healthanalyzer = 4, - /obj/item/wrench/medical = 1, - /obj/item/reagent_containers/pill/patch/libital = 5, - /obj/item/reagent_containers/pill/patch/aiuri = 5, - /obj/item/reagent_containers/syringe/convermol = 2, - /obj/item/reagent_containers/pill/insulin = 5, - /obj/item/reagent_containers/glass/bottle/multiver = 2, - /obj/item/reagent_containers/glass/bottle/syriniver = 2, - /obj/item/reagent_containers/glass/bottle/epinephrine = 3, - /obj/item/reagent_containers/glass/bottle/morphine = 4, - /obj/item/reagent_containers/glass/bottle/potass_iodide = 1, - /obj/item/reagent_containers/glass/bottle/salglu_solution = 3, - /obj/item/reagent_containers/glass/bottle/toxin = 3, - /obj/item/reagent_containers/syringe/antiviral = 6, - /obj/item/reagent_containers/medigel/libital = 2, - /obj/item/reagent_containers/medigel/aiuri = 2, - /obj/item/reagent_containers/medigel/sterilizine = 1, - /obj/item/sensor_device = 2, - /obj/item/pinpointer/crew = 2) - contraband = list(/obj/item/reagent_containers/pill/tox = 3, - /obj/item/reagent_containers/pill/morphine = 4, - /obj/item/reagent_containers/pill/multiver = 6, - /obj/item/storage/box/hug/medical = 1) - premium = list(/obj/item/reagent_containers/medigel/instabitaluri = 2, - /obj/item/storage/pill_bottle/psicodine = 2, - /obj/item/reagent_containers/hypospray/medipen = 3, - /obj/item/storage/belt/medical = 3, - /obj/item/storage/firstaid/advanced = 2) - armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) - resistance_flags = FIRE_PROOF - refill_canister = /obj/item/vending_refill/medical - default_price = 25 - extra_price = 100 - payment_department = ACCOUNT_MED - -/obj/item/vending_refill/medical - machine_name = "NanoMed Plus" - icon_state = "refill_medical" - -/obj/machinery/vending/medical/syndicate_access - name = "\improper SyndiMed Plus" - req_access = list(ACCESS_SYNDICATE) diff --git a/code/modules/vending/medical_wall.dm b/code/modules/vending/medical_wall.dm deleted file mode 100644 index f29d917d07..0000000000 --- a/code/modules/vending/medical_wall.dm +++ /dev/null @@ -1,31 +0,0 @@ -/obj/machinery/vending/wallmed - name = "\improper NanoMed" - desc = "" - icon_state = "wallmed" - icon_deny = "wallmed-deny" - density = FALSE - products = list(/obj/item/reagent_containers/syringe = 3, - /obj/item/reagent_containers/pill/patch/libital = 5, - /obj/item/reagent_containers/pill/patch/aiuri = 5, - /obj/item/reagent_containers/pill/multiver = 2, - /obj/item/reagent_containers/medigel/libital = 2, - /obj/item/reagent_containers/medigel/aiuri = 2, - /obj/item/reagent_containers/medigel/sterilizine = 1) - contraband = list(/obj/item/reagent_containers/pill/tox = 2, - /obj/item/reagent_containers/pill/morphine = 2) - armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) - resistance_flags = FIRE_PROOF - refill_canister = /obj/item/vending_refill/wallmed - default_price = 25 - extra_price = 100 - payment_department = ACCOUNT_MED - -/obj/item/vending_refill/wallmed - machine_name = "NanoMed" - icon_state = "refill_medical" - -/obj/machinery/vending/wallmed/pubby - products = list(/obj/item/reagent_containers/syringe = 3, - /obj/item/reagent_containers/pill/patch/libital = 1, - /obj/item/reagent_containers/pill/patch/aiuri = 1, - /obj/item/reagent_containers/medigel/sterilizine = 1) diff --git a/code/modules/vending/modularpc.dm b/code/modules/vending/modularpc.dm deleted file mode 100644 index facc911c4a..0000000000 --- a/code/modules/vending/modularpc.dm +++ /dev/null @@ -1,30 +0,0 @@ -/obj/machinery/vending/modularpc - name = "\improper Deluxe Silicate Selections" - desc = "" - icon_state = "modularpc" - icon_deny = "modularpc-deny" - product_ads = "Get your gamer gear!;The best GPUs for all of your space-crypto needs!;The most robust cooling!;The finest RGB in space!" - vend_reply = "Game on!" - products = list(/obj/item/modular_computer/laptop = 4, - /obj/item/modular_computer/tablet = 4, - /obj/item/computer_hardware/hard_drive = 4, - /obj/item/computer_hardware/hard_drive/small = 4, - /obj/item/computer_hardware/network_card = 8, - /obj/item/computer_hardware/hard_drive/portable = 8, - /obj/item/computer_hardware/battery = 8, - /obj/item/stock_parts/cell/computer = 8, - /obj/item/computer_hardware/processor_unit = 4, - /obj/item/computer_hardware/processor_unit/small = 4) - premium = list(/obj/item/computer_hardware/card_slot = 2, - /obj/item/computer_hardware/ai_slot = 2, - /obj/item/computer_hardware/printer/mini = 2, - /obj/item/computer_hardware/recharger/APC = 2, - /obj/item/paicard = 2) - refill_canister = /obj/item/vending_refill/modularpc - default_price = 30 - extra_price = 250 - payment_department = ACCOUNT_SCI - -/obj/item/vending_refill/modularpc - machine_name = "Deluxe Silicate Selections" - icon_state = "refill_engi" diff --git a/code/modules/vending/nutrimax.dm b/code/modules/vending/nutrimax.dm deleted file mode 100644 index 084ec2bc4f..0000000000 --- a/code/modules/vending/nutrimax.dm +++ /dev/null @@ -1,26 +0,0 @@ -/obj/machinery/vending/hydronutrients - name = "\improper NutriMax" - desc = "" - product_slogans = "Aren't you glad you don't have to fertilize the natural way?;Now with 50% less stink!;Plants are people too!" - product_ads = "We like plants!;Don't you want some?;The greenest thumbs ever.;We like big plants.;Soft soil..." - icon_state = "nutri" - icon_deny = "nutri-deny" - products = list(/obj/item/reagent_containers/glass/bottle/nutrient/ez = 30, - /obj/item/reagent_containers/glass/bottle/nutrient/l4z = 20, - /obj/item/reagent_containers/glass/bottle/nutrient/rh = 10, - /obj/item/reagent_containers/spray/pestspray = 20, - /obj/item/reagent_containers/syringe = 5, - /obj/item/storage/bag/plants = 5, - /obj/item/cultivator = 3, - /obj/item/shovel/spade = 3, - /obj/item/plant_analyzer = 4) - contraband = list(/obj/item/reagent_containers/glass/bottle/ammonia = 10, - /obj/item/reagent_containers/glass/bottle/diethylamine = 5) - refill_canister = /obj/item/vending_refill/hydronutrients - default_price = 10 - extra_price = 50 - payment_department = ACCOUNT_SRV - -/obj/item/vending_refill/hydronutrients - machine_name = "NutriMax" - icon_state = "refill_plant" diff --git a/code/modules/vending/plasmaresearch.dm b/code/modules/vending/plasmaresearch.dm deleted file mode 100644 index 3b472d2cbc..0000000000 --- a/code/modules/vending/plasmaresearch.dm +++ /dev/null @@ -1,16 +0,0 @@ -//This one's from bay12 -/obj/machinery/vending/plasmaresearch - name = "\improper Toximate 3000" - desc = "" - products = list(/obj/item/clothing/under/rank/rnd/scientist = 6, - /obj/item/clothing/suit/bio_suit = 6, - /obj/item/clothing/head/bio_hood = 6, - /obj/item/transfer_valve = 6, - /obj/item/assembly/timer = 6, - /obj/item/assembly/signaler = 6, - /obj/item/assembly/prox_sensor = 6, - /obj/item/assembly/igniter = 6) - contraband = list(/obj/item/assembly/health = 3) - default_price = 200 - extra_price = 250 - payment_department = ACCOUNT_SCI diff --git a/code/modules/vending/robotics.dm b/code/modules/vending/robotics.dm deleted file mode 100644 index 489da03e7e..0000000000 --- a/code/modules/vending/robotics.dm +++ /dev/null @@ -1,28 +0,0 @@ -//This one's from bay12 -/obj/machinery/vending/robotics - name = "\improper Robotech Deluxe" - desc = "" - icon_state = "robotics" - icon_deny = "robotics-deny" - req_access = list(ACCESS_ROBOTICS) - products = list(/obj/item/clothing/suit/toggle/labcoat = 4, - /obj/item/clothing/under/rank/rnd/roboticist = 4, - /obj/item/stack/cable_coil = 4, - /obj/item/assembly/flash/handheld = 4, - /obj/item/stock_parts/cell/high = 12, - /obj/item/assembly/prox_sensor = 3, - /obj/item/assembly/signaler = 3, - /obj/item/healthanalyzer = 3, - /obj/item/scalpel = 2, - /obj/item/circular_saw = 2, - /obj/item/tank/internals/anesthetic = 2, - /obj/item/clothing/mask/breath/medical = 5, - /obj/item/screwdriver = 5, - /obj/item/crowbar = 5) - refill_canister = /obj/item/vending_refill/robotics - default_price = 50 - payment_department = ACCOUNT_SCI - -/obj/item/vending_refill/robotics - machine_name = "Robotech Deluxe" - icon_state = "refill_engi" diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm deleted file mode 100644 index e3191c093d..0000000000 --- a/code/modules/vending/security.dm +++ /dev/null @@ -1,37 +0,0 @@ -/obj/machinery/vending/security - name = "\improper SecTech" - desc = "" - product_ads = "Crack capitalist skulls!;Beat some heads in!;Don't forget - harm is good!;Your weapons are right here.;Handcuffs!;Freeze, scumbag!;Don't tase me bro!;Tase them, bro.;Why not have a donut?" - icon_state = "sec" - icon_deny = "sec-deny" - req_access = list(ACCESS_SECURITY) - products = list(/obj/item/restraints/handcuffs = 8, - /obj/item/restraints/handcuffs/cable/zipties = 10, - /obj/item/grenade/flashbang = 4, - /obj/item/assembly/flash/handheld = 5, - /obj/item/reagent_containers/food/snacks/donut = 12, - /obj/item/storage/box/evidence = 6, - /obj/item/flashlight/seclite = 4, - /obj/item/restraints/legcuffs/bola/energy = 7) - contraband = list(/obj/item/clothing/glasses/sunglasses = 2, - /obj/item/storage/fancy/donut_box = 2) - premium = list(/obj/item/storage/belt/security/webbing = 5, - /obj/item/coin/antagtoken = 1, - /obj/item/clothing/head/helmet/blueshirt = 1, - /obj/item/clothing/suit/armor/vest/blueshirt = 1) - refill_canister = /obj/item/vending_refill/security - default_price = 100 - extra_price = 150 - payment_department = ACCOUNT_SEC - -/obj/machinery/vending/security/pre_throw(obj/item/I) - if(istype(I, /obj/item/grenade)) - var/obj/item/grenade/G = I - G.preprime() - else if(istype(I, /obj/item/flashlight)) - var/obj/item/flashlight/F = I - F.on = TRUE - F.update_brightness() - -/obj/item/vending_refill/security - icon_state = "refill_sec" diff --git a/code/modules/vending/snack.dm b/code/modules/vending/snack.dm deleted file mode 100644 index bc0ae50929..0000000000 --- a/code/modules/vending/snack.dm +++ /dev/null @@ -1,47 +0,0 @@ -/obj/machinery/vending/snack - name = "\improper Getmore Chocolate Corp" - desc = "" - product_slogans = "Try our new nougat bar!;Twice the calories for half the price!" - product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Have some more Getmore!;Best quality snacks straight from mars.;We love chocolate!;Try our new jerky!" - icon_state = "snack" - products = list(/obj/item/reagent_containers/food/snacks/spacetwinkie = 6, - /obj/item/reagent_containers/food/snacks/cheesiehonkers = 6, - /obj/item/reagent_containers/food/snacks/candy = 6, - /obj/item/reagent_containers/food/snacks/chips = 6, - /obj/item/reagent_containers/food/snacks/sosjerky = 6, - /obj/item/reagent_containers/food/snacks/no_raisin = 6, - /obj/item/reagent_containers/food/drinks/dry_ramen = 3, - /obj/item/reagent_containers/food/snacks/energybar = 6) - contraband = list(/obj/item/reagent_containers/food/snacks/syndicake = 6) - refill_canister = /obj/item/vending_refill/snack - canload_access_list = list(ACCESS_KITCHEN) - default_price = 20 - extra_price = 30 - payment_department = ACCOUNT_SRV - input_display_header = "Chef's Food Selection" - -/obj/item/vending_refill/snack - machine_name = "Getmore Chocolate Corp" - -/obj/machinery/vending/snack/random - name = "\improper Random Snackies" - icon_state = "random_snack" - desc = "" - -/obj/machinery/vending/snack/random/Initialize() - ..() - var/T = pick(subtypesof(/obj/machinery/vending/snack) - /obj/machinery/vending/snack/random) - new T(loc) - return INITIALIZE_HINT_QDEL - -/obj/machinery/vending/snack/blue - icon_state = "snackblue" - -/obj/machinery/vending/snack/orange - icon_state = "snackorange" - -/obj/machinery/vending/snack/green - icon_state = "snackgreen" - -/obj/machinery/vending/snack/teal - icon_state = "snackteal" diff --git a/code/modules/vending/sovietsoda.dm b/code/modules/vending/sovietsoda.dm deleted file mode 100644 index d7645151b1..0000000000 --- a/code/modules/vending/sovietsoda.dm +++ /dev/null @@ -1,16 +0,0 @@ -/obj/machinery/vending/sovietsoda - name = "\improper BODA" - desc = "" - icon_state = "sovietsoda" - product_ads = "For Tsar and Country.;Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem." - products = list(/obj/item/reagent_containers/food/drinks/drinkingglass/filled/soda = 30) - contraband = list(/obj/item/reagent_containers/food/drinks/drinkingglass/filled/cola = 20) - resistance_flags = FIRE_PROOF - refill_canister = /obj/item/vending_refill/sovietsoda - default_price = 1 - extra_price = 1 - payment_department = NO_FREEBIES - -/obj/item/vending_refill/sovietsoda - machine_name = "BODA" - icon_state = "refill_cola" diff --git a/code/modules/vending/sustenance.dm b/code/modules/vending/sustenance.dm deleted file mode 100644 index 20ef9286be..0000000000 --- a/code/modules/vending/sustenance.dm +++ /dev/null @@ -1,21 +0,0 @@ -/obj/machinery/vending/sustenance - name = "\improper Sustenance Vendor" - desc = "" - product_slogans = "Enjoy your meal.;Enough calories to support strenuous labor." - product_ads = "Sufficiently healthy.;Efficiently produced tofu!;Mmm! So good!;Have a meal.;You need food to live!;Have some more candy corn!;Try our new ice cups!" - icon_state = "sustenance" - products = list(/obj/item/reagent_containers/food/snacks/tofu/prison = 24, - /obj/item/reagent_containers/food/drinks/ice/prison = 12, - /obj/item/reagent_containers/food/snacks/candy_corn/prison = 6) - contraband = list(/obj/item/kitchen/knife = 6, - /obj/item/reagent_containers/food/drinks/coffee = 12, - /obj/item/tank/internals/emergency_oxygen = 6, - /obj/item/clothing/mask/breath = 6) - refill_canister = /obj/item/vending_refill/sustenance - default_price = 0 - extra_price = 0 - payment_department = NO_FREEBIES - -/obj/item/vending_refill/sustenance - machine_name = "Sustenance Vendor" - icon_state = "refill_snack" diff --git a/code/modules/vending/toys.dm b/code/modules/vending/toys.dm deleted file mode 100644 index 186d3c9679..0000000000 --- a/code/modules/vending/toys.dm +++ /dev/null @@ -1,34 +0,0 @@ -/obj/machinery/vending/donksofttoyvendor - name = "\improper Donksoft Toy Vendor" - desc = "" - icon_state = "nt-donk" - product_slogans = "Get your cool toys today!;Trigger a valid hunter today!;Quality toy weapons for cheap prices!;Give them to HoPs for all access!;Give them to HoS to get permabrigged!" - product_ads = "Feel robust with your toys!;Express your inner child today!;Toy weapons don't kill people, but valid hunters do!;Who needs responsibilities when you have toy weapons?;Make your next murder FUN!" - vend_reply = "Come back for more!" - circuit = /obj/item/circuitboard/machine/vending/donksofttoyvendor - products = list( - /obj/item/gun/ballistic/automatic/toy/unrestricted = 10, - /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted = 10, - /obj/item/gun/ballistic/shotgun/toy/unrestricted = 10, - /obj/item/toy/sword = 10, - /obj/item/ammo_box/foambox = 20, - /obj/item/toy/foamblade = 10, - /obj/item/toy/balloon/syndicate = 10, - /obj/item/clothing/suit/syndicatefake = 5, - /obj/item/clothing/head/syndicatefake = 5) - contraband = list( - /obj/item/gun/ballistic/shotgun/toy/crossbow = 10, - /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted = 10, - /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted = 10, - /obj/item/toy/katana = 10, - /obj/item/twohanded/dualsaber/toy = 5) - armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) - resistance_flags = FIRE_PROOF - refill_canister = /obj/item/vending_refill/donksoft - default_price = 25 - extra_price = 50 - payment_department = ACCOUNT_SRV - -/obj/item/vending_refill/donksoft - machine_name = "Donksoft Toy Vendor" - icon_state = "refill_donksoft" diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm deleted file mode 100644 index b2cf362627..0000000000 --- a/code/modules/vending/wardrobes.dm +++ /dev/null @@ -1,421 +0,0 @@ -/obj/item/vending_refill/wardrobe - icon_state = "refill_clothes" - -/obj/machinery/vending/wardrobe - default_price = 50 - extra_price = 75 - payment_department = NO_FREEBIES - input_display_header = "Returned Clothing" - -/obj/machinery/vending/wardrobe/canLoadItem(obj/item/I,mob/user) - return (I.type in products) - -/obj/machinery/vending/wardrobe/sec_wardrobe - name = "\improper SecDrobe" - desc = "" - icon_state = "secdrobe" - product_ads = "Beat perps in style!;It's red so you can't see the blood!;You have the right to be fashionable!;Now you can be the fashion police you always wanted to be!" - vend_reply = "Thank you for using the SecDrobe!" - products = list(/obj/item/clothing/suit/hooded/wintercoat/security = 3, - /obj/item/storage/backpack/security = 3, - /obj/item/storage/backpack/satchel/sec = 3, - /obj/item/storage/backpack/duffelbag/sec = 3, - /obj/item/clothing/under/rank/security/officer = 3, - /obj/item/clothing/shoes/jackboots = 3, - /obj/item/clothing/head/beret/sec = 3, - /obj/item/clothing/head/soft/sec = 3, - /obj/item/clothing/mask/bandana/red = 3, - /obj/item/clothing/under/rank/security/officer/skirt = 3, - /obj/item/clothing/under/rank/security/officer/grey = 3, - /obj/item/clothing/under/pants/khaki = 3, - /obj/item/clothing/under/rank/security/officer/blueshirt = 3) - premium = list(/obj/item/clothing/under/rank/security/officer/formal = 3, - /obj/item/clothing/suit/security/officer = 3, - /obj/item/clothing/head/beret/sec/navyofficer = 3) - refill_canister = /obj/item/vending_refill/wardrobe/sec_wardrobe - payment_department = ACCOUNT_SEC - -/obj/item/vending_refill/wardrobe/sec_wardrobe - machine_name = "SecDrobe" - -/obj/machinery/vending/wardrobe/medi_wardrobe - name = "\improper MediDrobe" - desc = "" - icon_state = "medidrobe" - product_ads = "Make those blood stains look fashionable!!" - vend_reply = "Thank you for using the MediDrobe!" - products = list(/obj/item/clothing/accessory/pocketprotector = 4, - /obj/item/storage/backpack/duffelbag/med = 4, - /obj/item/storage/backpack/medic = 4, - /obj/item/storage/backpack/satchel/med = 4, - /obj/item/clothing/suit/hooded/wintercoat/medical = 4, - /obj/item/clothing/under/rank/medical/doctor/nurse = 4, - /obj/item/clothing/head/nursehat = 4, - /obj/item/clothing/under/rank/medical/doctor/skirt= 4, - /obj/item/clothing/under/rank/medical/doctor/blue = 4, - /obj/item/clothing/under/rank/medical/doctor/green = 4, - /obj/item/clothing/under/rank/medical/doctor/purple = 4, - /obj/item/clothing/under/rank/medical/doctor = 4, - /obj/item/clothing/suit/toggle/labcoat = 4, - /obj/item/clothing/suit/toggle/labcoat/emt = 4, - /obj/item/clothing/shoes/sneakers/white = 4, - /obj/item/clothing/head/soft/emt = 4, - /obj/item/clothing/suit/apron/surgical = 4, - /obj/item/clothing/mask/surgical = 4) - refill_canister = /obj/item/vending_refill/wardrobe/medi_wardrobe - payment_department = ACCOUNT_MED -/obj/item/vending_refill/wardrobe/medi_wardrobe - machine_name = "MediDrobe" - -/obj/machinery/vending/wardrobe/engi_wardrobe - name = "EngiDrobe" - desc = "" - icon_state = "engidrobe" - product_ads = "Guaranteed to protect your feet from industrial accidents!;Afraid of radiation? Then wear yellow!" - vend_reply = "Thank you for using the EngiDrobe!" - products = list(/obj/item/clothing/accessory/pocketprotector = 3, - /obj/item/storage/backpack/duffelbag/engineering = 3, - /obj/item/storage/backpack/industrial = 3, - /obj/item/storage/backpack/satchel/eng = 3, - /obj/item/clothing/suit/hooded/wintercoat/engineering = 3, - /obj/item/clothing/under/rank/engineering/engineer = 3, - /obj/item/clothing/under/rank/engineering/engineer/skirt = 3, - /obj/item/clothing/under/rank/engineering/engineer/hazard = 3, - /obj/item/clothing/suit/hazardvest = 3, - /obj/item/clothing/shoes/workboots = 3, - /obj/item/clothing/head/hardhat = 3, - /obj/item/clothing/head/hardhat/weldhat = 3) - refill_canister = /obj/item/vending_refill/wardrobe/engi_wardrobe - payment_department = ACCOUNT_ENG -/obj/item/vending_refill/wardrobe/engi_wardrobe - machine_name = "EngiDrobe" - -/obj/machinery/vending/wardrobe/atmos_wardrobe - name = "AtmosDrobe" - desc = "" - icon_state = "atmosdrobe" - product_ads = "Get your inflammable clothing right here!!!" - vend_reply = "Thank you for using the AtmosDrobe!" - products = list(/obj/item/clothing/accessory/pocketprotector = 2, - /obj/item/storage/backpack/duffelbag/engineering = 2, - /obj/item/storage/backpack/satchel/eng = 2, - /obj/item/storage/backpack/industrial = 2, - /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos = 3, - /obj/item/clothing/under/rank/engineering/atmospheric_technician = 3, - /obj/item/clothing/under/rank/engineering/atmospheric_technician/skirt = 3, - /obj/item/clothing/shoes/sneakers/black = 3) - refill_canister = /obj/item/vending_refill/wardrobe/atmos_wardrobe - payment_department = ACCOUNT_ENG -/obj/item/vending_refill/wardrobe/atmos_wardrobe - machine_name = "AtmosDrobe" - -/obj/machinery/vending/wardrobe/cargo_wardrobe - name = "CargoDrobe" - desc = "" - icon_state = "cargodrobe" - product_ads = "Upgraded Assistant Style! Pick yours today!;These shorts are comfy and easy to wear, get yours now!" - vend_reply = "Thank you for using the CargoDrobe!" - products = list(/obj/item/clothing/suit/hooded/wintercoat/cargo = 3, - /obj/item/clothing/under/rank/cargo/tech = 3, - /obj/item/clothing/under/rank/cargo/tech/skirt = 3, - /obj/item/clothing/shoes/sneakers/black = 3, - /obj/item/clothing/gloves/fingerless = 3, - /obj/item/clothing/head/soft = 3, - /obj/item/radio/headset/headset_cargo = 3) - premium = list(/obj/item/clothing/under/rank/cargo/miner = 3) - refill_canister = /obj/item/vending_refill/wardrobe/cargo_wardrobe - payment_department = ACCOUNT_CAR -/obj/item/vending_refill/wardrobe/cargo_wardrobe - machine_name = "CargoDrobe" - -/obj/machinery/vending/wardrobe/robo_wardrobe - name = "RoboDrobe" - desc = "" - icon_state = "robodrobe" - product_ads = "You turn me TRUE, use defines!;0110001101101100011011110111010001101000011001010111001101101000011001010111001001100101" - vend_reply = "Thank you for using the RoboDrobe!" - products = list(/obj/item/clothing/glasses/hud/diagnostic = 2, - /obj/item/clothing/under/rank/rnd/roboticist = 2, - /obj/item/clothing/under/rank/rnd/roboticist/skirt = 2, - /obj/item/clothing/suit/toggle/labcoat = 2, - /obj/item/clothing/shoes/sneakers/black = 2, - /obj/item/clothing/gloves/fingerless = 2, - /obj/item/clothing/head/soft/black = 2, - /obj/item/clothing/mask/bandana/skull = 2) - contraband = list(/obj/item/clothing/suit/hooded/techpriest = 2, - /obj/item/organ/tongue/robot = 2) - refill_canister = /obj/item/vending_refill/wardrobe/robo_wardrobe - extra_price = 300 - payment_department = ACCOUNT_SCI -/obj/item/vending_refill/wardrobe/robo_wardrobe - machine_name = "RoboDrobe" - -/obj/machinery/vending/wardrobe/science_wardrobe - name = "SciDrobe" - desc = "" - icon_state = "scidrobe" - product_ads = "Longing for the smell of plasma burnt flesh? Buy your science clothing now!;Made with 10% Auxetics, so you don't have to worry about losing your arm!" - vend_reply = "Thank you for using the SciDrobe!" - products = list(/obj/item/clothing/accessory/pocketprotector = 3, - /obj/item/storage/backpack/science = 3, - /obj/item/storage/backpack/satchel/tox = 3, - /obj/item/clothing/suit/hooded/wintercoat/science = 3, - /obj/item/clothing/under/rank/rnd/scientist = 3, - /obj/item/clothing/under/rank/rnd/scientist/skirt = 3, - /obj/item/clothing/suit/toggle/labcoat/science = 3, - /obj/item/clothing/shoes/sneakers/white = 3, - /obj/item/radio/headset/headset_sci = 3, - /obj/item/clothing/mask/gas = 3) - refill_canister = /obj/item/vending_refill/wardrobe/science_wardrobe - payment_department = ACCOUNT_SCI -/obj/item/vending_refill/wardrobe/science_wardrobe - machine_name = "SciDrobe" - -/obj/machinery/vending/wardrobe/hydro_wardrobe - name = "Hydrobe" - desc = "" - icon_state = "hydrobe" - product_ads = "Do you love soil? Then buy our clothes!;Get outfits to match your green thumb here!" - vend_reply = "Thank you for using the Hydrobe!" - products = list(/obj/item/storage/backpack/botany = 2, - /obj/item/storage/backpack/satchel/hyd = 2, - /obj/item/clothing/suit/hooded/wintercoat/hydro = 2, - /obj/item/clothing/suit/apron = 2, - /obj/item/clothing/suit/apron/overalls = 3, - /obj/item/clothing/under/rank/civilian/hydroponics = 3, - /obj/item/clothing/under/rank/civilian/hydroponics/skirt = 3, - /obj/item/clothing/mask/bandana = 3, - /obj/item/clothing/accessory/armband/hydro = 3) - refill_canister = /obj/item/vending_refill/wardrobe/hydro_wardrobe - payment_department = ACCOUNT_SRV -/obj/item/vending_refill/wardrobe/hydro_wardrobe - machine_name = "HyDrobe" - -/obj/machinery/vending/wardrobe/curator_wardrobe - name = "CuraDrobe" - desc = "" - icon_state = "curadrobe" - product_ads = "Glasses for your eyes and literature for your soul, Curadrobe has it all!; Impress & enthrall your library guests with Curadrobe's extended line of pens!" - vend_reply = "Thank you for using the CuraDrobe!" - products = list(/obj/item/pen = 4, - /obj/item/pen/red = 2, - /obj/item/pen/blue = 2, - /obj/item/pen/fourcolor = 1, - /obj/item/pen/fountain = 2, - /obj/item/clothing/accessory/pocketprotector = 2, - /obj/item/clothing/under/rank/civilian/curator/skirt = 2, - /obj/item/clothing/under/rank/captain/suit/skirt = 2, - /obj/item/clothing/under/rank/civilian/head_of_personnel/suit/skirt = 2, - /obj/item/storage/backpack/satchel/explorer = 1, - /obj/item/clothing/glasses/regular = 2, - /obj/item/clothing/glasses/regular/jamjar = 1, - /obj/item/storage/bag/books = 1) - refill_canister = /obj/item/vending_refill/wardrobe/curator_wardrobe - payment_department = ACCOUNT_CIV -/obj/item/vending_refill/wardrobe/curator_wardrobe - machine_name = "CuraDrobe" - -/obj/machinery/vending/wardrobe/bar_wardrobe - name = "BarDrobe" - desc = "" - icon_state = "bardrobe" - product_ads = "Guaranteed to prevent stains from spilled drinks!" - vend_reply = "Thank you for using the BarDrobe!" - products = list(/obj/item/clothing/head/that = 2, - /obj/item/radio/headset/headset_srv = 2, - /obj/item/clothing/under/suit/sl = 2, - /obj/item/clothing/under/rank/civilian/bartender = 2, - /obj/item/clothing/under/rank/civilian/bartender/purple = 2, - /obj/item/clothing/under/rank/civilian/bartender/skirt = 2, - /obj/item/clothing/accessory/waistcoat = 2, - /obj/item/clothing/suit/apron/purple_bartender = 2, - /obj/item/clothing/head/soft/black = 2, - /obj/item/clothing/shoes/sneakers/black = 2, - /obj/item/reagent_containers/glass/rag = 2, - /obj/item/storage/box/beanbag = 1, - /obj/item/clothing/suit/armor/vest/alt = 1, - /obj/item/circuitboard/machine/dish_drive = 1, - /obj/item/clothing/glasses/sunglasses/reagent = 1, - /obj/item/clothing/neck/petcollar = 1, - /obj/item/storage/belt/bandolier = 1, - /obj/item/storage/pill_bottle/dice/hazard = 1, - /obj/item/storage/bag/money = 2) - premium = list(/obj/item/storage/box/dishdrive = 1) - refill_canister = /obj/item/vending_refill/wardrobe/bar_wardrobe - payment_department = ACCOUNT_SRV -/obj/item/vending_refill/wardrobe/bar_wardrobe - machine_name = "BarDrobe" - -/obj/machinery/vending/wardrobe/chef_wardrobe - name = "ChefDrobe" - desc = "" - icon_state = "chefdrobe" - product_ads = "Our clothes are guaranteed to protect you from food splatters!" - vend_reply = "Thank you for using the ChefDrobe!" - products = list(/obj/item/clothing/under/suit/waiter = 2, - /obj/item/radio/headset/headset_srv = 2, - /obj/item/clothing/accessory/waistcoat = 2, - /obj/item/clothing/suit/apron/chef = 3, - /obj/item/clothing/head/soft/mime = 2, - /obj/item/storage/box/mousetraps = 2, - /obj/item/circuitboard/machine/dish_drive = 1, - /obj/item/clothing/suit/toggle/chef = 1, - /obj/item/clothing/under/rank/civilian/chef = 1, - /obj/item/clothing/under/rank/civilian/chef/skirt = 2, - /obj/item/clothing/head/chefhat = 1, - /obj/item/clothing/under/rank/civilian/cookjorts = 2, - /obj/item/clothing/shoes/cookflops = 2, - /obj/item/reagent_containers/glass/rag = 1, - /obj/item/clothing/suit/hooded/wintercoat = 2) - refill_canister = /obj/item/vending_refill/wardrobe/chef_wardrobe - payment_department = ACCOUNT_SRV -/obj/item/vending_refill/wardrobe/chef_wardrobe - machine_name = "ChefDrobe" - -/obj/machinery/vending/wardrobe/jani_wardrobe - name = "JaniDrobe" - desc = "" - icon_state = "janidrobe" - product_ads = "Come and get your janitorial clothing, now endorsed by lizard janitors everywhere!" - vend_reply = "Thank you for using the JaniDrobe!" - products = list(/obj/item/clothing/under/rank/civilian/janitor = 2, - /obj/item/cartridge/janitor = 2, - /obj/item/clothing/under/rank/civilian/janitor/skirt = 2, - /obj/item/clothing/gloves/color/black = 2, - /obj/item/clothing/head/soft/purple = 2, - /obj/item/paint/paint_remover = 2, - /obj/item/melee/flyswatter = 2, - /obj/item/flashlight = 2, - /obj/item/clothing/suit/caution = 6, - /obj/item/holosign_creator = 2, - /obj/item/lightreplacer = 2, - /obj/item/soap/nanotrasen = 2, - /obj/item/storage/bag/trash = 2, - /obj/item/clothing/shoes/galoshes = 2, - /obj/item/watertank/janitor = 1, - /obj/item/storage/belt/janitor = 2) - refill_canister = /obj/item/vending_refill/wardrobe/jani_wardrobe - payment_department = ACCOUNT_SRV -/obj/item/vending_refill/wardrobe/jani_wardrobe - machine_name = "JaniDrobe" - -/obj/machinery/vending/wardrobe/law_wardrobe - name = "LawDrobe" - desc = "" - icon_state = "lawdrobe" - product_ads = "OBJECTION! Get the rule of law for yourself!" - vend_reply = "Thank you for using the LawDrobe!" - products = list(/obj/item/clothing/under/rank/civilian/lawyer/bluesuit = 1, - /obj/item/clothing/under/rank/civilian/lawyer/bluesuit/skirt = 1, - /obj/item/clothing/suit/toggle/lawyer = 1, - /obj/item/clothing/under/rank/civilian/lawyer/purpsuit = 1, - /obj/item/clothing/under/rank/civilian/lawyer/purpsuit/skirt = 1, - /obj/item/clothing/suit/toggle/lawyer/purple = 1, - /obj/item/clothing/under/suit/black = 1, - /obj/item/clothing/under/suit/black/skirt = 1, - /obj/item/clothing/suit/toggle/lawyer/black = 1, - /obj/item/clothing/under/rank/civilian/lawyer/female = 1, - /obj/item/clothing/under/rank/civilian/lawyer/female/skirt = 1, - /obj/item/clothing/under/suit/black_really = 1, - /obj/item/clothing/under/suit/black_really/skirt = 1, - /obj/item/clothing/under/rank/civilian/lawyer/blue = 1, - /obj/item/clothing/under/rank/civilian/lawyer/blue/skirt = 1, - /obj/item/clothing/under/rank/civilian/lawyer/red = 1, - /obj/item/clothing/under/rank/civilian/lawyer/red/skirt = 1, - /obj/item/clothing/under/rank/civilian/lawyer/black = 1, - /obj/item/clothing/under/rank/civilian/lawyer/black/skirt = 1, - /obj/item/clothing/shoes/laceup = 2, - /obj/item/clothing/accessory/lawyers_badge = 2) - refill_canister = /obj/item/vending_refill/wardrobe/law_wardrobe - payment_department = ACCOUNT_CIV -/obj/item/vending_refill/wardrobe/law_wardrobe - machine_name = "LawDrobe" - -/obj/machinery/vending/wardrobe/chap_wardrobe - name = "ChapDrobe" - desc = "" - icon_state = "chapdrobe" - product_ads = "Are you being bothered by cultists or pesky revenants? Then come and dress like the holy man!;Clothes for men of the cloth!" - vend_reply = "Thank you for using the ChapDrobe!" - products = list(/obj/item/choice_beacon/holy = 1, - /obj/item/storage/backpack/cultpack = 1, - /obj/item/clothing/accessory/pocketprotector/cosmetology = 1, - /obj/item/clothing/under/rank/civilian/chaplain = 1, - /obj/item/clothing/under/rank/civilian/chaplain/skirt = 2, - /obj/item/clothing/shoes/sneakers/black = 1, - /obj/item/clothing/suit/chaplainsuit/nun = 1, - /obj/item/clothing/head/nun_hood = 1, - /obj/item/clothing/suit/chaplainsuit/holidaypriest = 1, - /obj/item/clothing/suit/hooded/chaplainsuit/monkfrock = 1, - /obj/item/storage/fancy/candle_box = 2, - /obj/item/clothing/head/kippah = 3, - /obj/item/clothing/suit/chaplainsuit/whiterobe = 1, - /obj/item/clothing/head/taqiyahwhite = 1, - /obj/item/clothing/head/taqiyahred = 3, - /obj/item/clothing/suit/chaplainsuit/monkrobeeast = 1, - /obj/item/clothing/head/beanie/rasta = 1) - contraband = list(/obj/item/toy/plush/plushvar = 1, - /obj/item/toy/plush/narplush = 1, - /obj/item/clothing/head/medievaljewhat = 3, - /obj/item/clothing/suit/chaplainsuit/clownpriest = 1, - /obj/item/clothing/head/clownmitre = 1) - premium = list(/obj/item/clothing/suit/chaplainsuit/bishoprobe = 1, - /obj/item/clothing/head/bishopmitre = 1) - refill_canister = /obj/item/vending_refill/wardrobe/chap_wardrobe - payment_department = ACCOUNT_CIV -/obj/item/vending_refill/wardrobe/chap_wardrobe - machine_name = "ChapDrobe" - -/obj/machinery/vending/wardrobe/chem_wardrobe - name = "ChemDrobe" - desc = "" - icon_state = "chemdrobe" - product_ads = "Our clothes are 0.5% more resistant to acid spills! Get yours now!" - vend_reply = "Thank you for using the ChemDrobe!" - products = list(/obj/item/clothing/under/rank/medical/chemist = 2, - /obj/item/clothing/under/rank/medical/chemist/skirt = 2, - /obj/item/clothing/shoes/sneakers/white = 2, - /obj/item/clothing/suit/toggle/labcoat/chemist = 2, - /obj/item/storage/backpack/chemistry = 2, - /obj/item/storage/backpack/satchel/chem = 2, - /obj/item/storage/bag/chemistry = 2) - contraband = list(/obj/item/reagent_containers/spray/syndicate = 2) - refill_canister = /obj/item/vending_refill/wardrobe/chem_wardrobe - payment_department = ACCOUNT_MED -/obj/item/vending_refill/wardrobe/chem_wardrobe - machine_name = "ChemDrobe" - -/obj/machinery/vending/wardrobe/gene_wardrobe - name = "GeneDrobe" - desc = "" - icon_state = "genedrobe" - product_ads = "Perfect for the mad scientist in you!" - vend_reply = "Thank you for using the GeneDrobe!" - products = list(/obj/item/clothing/under/rank/medical/geneticist = 2, - /obj/item/clothing/under/rank/medical/geneticist/skirt = 2, - /obj/item/clothing/shoes/sneakers/white = 2, - /obj/item/clothing/suit/toggle/labcoat/genetics = 2, - /obj/item/storage/backpack/genetics = 2, - /obj/item/storage/backpack/satchel/gen = 2) - refill_canister = /obj/item/vending_refill/wardrobe/gene_wardrobe - payment_department = ACCOUNT_MED -/obj/item/vending_refill/wardrobe/gene_wardrobe - machine_name = "GeneDrobe" - -/obj/machinery/vending/wardrobe/viro_wardrobe - name = "ViroDrobe" - desc = "" - icon_state = "virodrobe" - product_ads = " Viruses getting you down? Then upgrade to sterilized clothing today!" - vend_reply = "Thank you for using the ViroDrobe" - products = list(/obj/item/clothing/under/rank/medical/virologist = 2, - /obj/item/clothing/under/rank/medical/virologist/skirt = 2, - /obj/item/clothing/shoes/sneakers/white = 2, - /obj/item/clothing/suit/toggle/labcoat/virologist = 2, - /obj/item/clothing/mask/surgical = 2, - /obj/item/storage/backpack/virology = 2, - /obj/item/storage/backpack/satchel/vir = 2) - refill_canister = /obj/item/vending_refill/wardrobe/viro_wardrobe - payment_department = ACCOUNT_MED -/obj/item/vending_refill/wardrobe/viro_wardrobe - machine_name = "ViroDrobe" diff --git a/code/modules/vending/youtool.dm b/code/modules/vending/youtool.dm deleted file mode 100644 index 78a297787f..0000000000 --- a/code/modules/vending/youtool.dm +++ /dev/null @@ -1,27 +0,0 @@ -/obj/machinery/vending/tool - name = "\improper YouTool" - desc = "" - icon_state = "tool" - icon_deny = "tool-deny" - products = list(/obj/item/stack/cable_coil = 10, - /obj/item/crowbar = 5, - /obj/item/weldingtool = 3, - /obj/item/wirecutters = 5, - /obj/item/wrench = 5, - /obj/item/analyzer = 5, - /obj/item/t_scanner = 5, - /obj/item/screwdriver = 5, - /obj/item/flashlight/glowstick = 3, - /obj/item/flashlight/glowstick/red = 3, - /obj/item/flashlight = 5, - /obj/item/clothing/ears/earmuffs = 1) - contraband = list(/obj/item/clothing/gloves/color/fyellow = 2) - premium = list(/obj/item/storage/belt/utility = 2, - /obj/item/weldingtool/hugetank = 2, - /obj/item/clothing/head/welding = 2, - /obj/item/clothing/gloves/color/yellow = 1) - armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70) - resistance_flags = FIRE_PROOF - default_price = 20 - extra_price = 80 - payment_department = ACCOUNT_ENG diff --git a/code/rt.dm b/code/rt.dm index 682340fdd5..ffeac03c1f 100644 --- a/code/rt.dm +++ b/code/rt.dm @@ -5,7 +5,7 @@ #endif #ifdef FASTLOAD - #define FORCE_MAP "_maps/dun_manor.json" + #define FORCE_MAP "_maps/stonehamlet.json" #endif //#define WARTIME diff --git a/config/maps.txt b/config/maps.txt index c0717f8ccc..1577c9660f 100644 --- a/config/maps.txt +++ b/config/maps.txt @@ -13,11 +13,15 @@ Format: votable (is this map votable) endmap -map roguetown +map vanderlin default votable endmap +map roguetown + disabled +endmap + map dun_manor - votable + disabled endmap \ No newline at end of file diff --git a/icons/default_title.dmi b/icons/default_title.dmi index 9bff0fef4e..aeea1ad01f 100644 Binary files a/icons/default_title.dmi and b/icons/default_title.dmi differ diff --git a/icons/effects/light_overlays/light_128.dmi b/icons/effects/light_overlays/light_128.dmi new file mode 100644 index 0000000000..22dc0b0108 Binary files /dev/null and b/icons/effects/light_overlays/light_128.dmi differ diff --git a/icons/effects/light_overlays/light_160.dmi b/icons/effects/light_overlays/light_160.dmi new file mode 100644 index 0000000000..26dfa453c5 Binary files /dev/null and b/icons/effects/light_overlays/light_160.dmi differ diff --git a/icons/effects/light_overlays/light_192.dmi b/icons/effects/light_overlays/light_192.dmi new file mode 100644 index 0000000000..aca94ee0ca Binary files /dev/null and b/icons/effects/light_overlays/light_192.dmi differ diff --git a/icons/effects/light_overlays/light_224.dmi b/icons/effects/light_overlays/light_224.dmi new file mode 100644 index 0000000000..9fab531d1a Binary files /dev/null and b/icons/effects/light_overlays/light_224.dmi differ diff --git a/icons/effects/light_overlays/light_256.dmi b/icons/effects/light_overlays/light_256.dmi new file mode 100644 index 0000000000..701562efcd Binary files /dev/null and b/icons/effects/light_overlays/light_256.dmi differ diff --git a/icons/effects/light_overlays/light_288.dmi b/icons/effects/light_overlays/light_288.dmi new file mode 100644 index 0000000000..25463c5f3a Binary files /dev/null and b/icons/effects/light_overlays/light_288.dmi differ diff --git a/icons/effects/light_overlays/light_32.dmi b/icons/effects/light_overlays/light_32.dmi new file mode 100644 index 0000000000..5269b1fba3 Binary files /dev/null and b/icons/effects/light_overlays/light_32.dmi differ diff --git a/icons/effects/light_overlays/light_320.dmi b/icons/effects/light_overlays/light_320.dmi new file mode 100644 index 0000000000..bf263c4b29 Binary files /dev/null and b/icons/effects/light_overlays/light_320.dmi differ diff --git a/icons/effects/light_overlays/light_352.dmi b/icons/effects/light_overlays/light_352.dmi new file mode 100644 index 0000000000..f895792da4 Binary files /dev/null and b/icons/effects/light_overlays/light_352.dmi differ diff --git a/icons/effects/light_overlays/light_64.dmi b/icons/effects/light_overlays/light_64.dmi new file mode 100644 index 0000000000..37fc5084ab Binary files /dev/null and b/icons/effects/light_overlays/light_64.dmi differ diff --git a/icons/effects/light_overlays/light_96.dmi b/icons/effects/light_overlays/light_96.dmi new file mode 100644 index 0000000000..b689a13701 Binary files /dev/null and b/icons/effects/light_overlays/light_96.dmi differ diff --git a/icons/effects/light_overlays/light_cone.dmi b/icons/effects/light_overlays/light_cone.dmi new file mode 100644 index 0000000000..75f322a937 Binary files /dev/null and b/icons/effects/light_overlays/light_cone.dmi differ diff --git a/icons/effects/music-note.dmi b/icons/effects/music-note.dmi new file mode 100644 index 0000000000..4e81f32099 Binary files /dev/null and b/icons/effects/music-note.dmi differ diff --git a/icons/effects/particles/bonfire.dmi b/icons/effects/particles/bonfire.dmi new file mode 100644 index 0000000000..e8e2e36346 Binary files /dev/null and b/icons/effects/particles/bonfire.dmi differ diff --git a/icons/effects/particles/echo.dmi b/icons/effects/particles/echo.dmi new file mode 100644 index 0000000000..a7a47e340d Binary files /dev/null and b/icons/effects/particles/echo.dmi differ diff --git a/icons/effects/particles/generic.dmi b/icons/effects/particles/generic.dmi new file mode 100644 index 0000000000..0e6a84a34b Binary files /dev/null and b/icons/effects/particles/generic.dmi differ diff --git a/icons/effects/particles/generic_particles.dmi b/icons/effects/particles/generic_particles.dmi new file mode 100644 index 0000000000..e322afcebb Binary files /dev/null and b/icons/effects/particles/generic_particles.dmi differ diff --git a/icons/effects/particles/particle.dmi b/icons/effects/particles/particle.dmi new file mode 100644 index 0000000000..c7a3ce297d Binary files /dev/null and b/icons/effects/particles/particle.dmi differ diff --git a/icons/effects/particles/pollen.dmi b/icons/effects/particles/pollen.dmi new file mode 100644 index 0000000000..559c4d1846 Binary files /dev/null and b/icons/effects/particles/pollen.dmi differ diff --git a/icons/effects/particles/smoke.dmi b/icons/effects/particles/smoke.dmi new file mode 100644 index 0000000000..99123beeb5 Binary files /dev/null and b/icons/effects/particles/smoke.dmi differ diff --git a/icons/effects/weather_overlay.dmi b/icons/effects/weather_overlay.dmi new file mode 100644 index 0000000000..be9ad64ada Binary files /dev/null and b/icons/effects/weather_overlay.dmi differ diff --git a/icons/mob/actions/roguespells.dmi b/icons/mob/actions/roguespells.dmi index 6241f7b045..92cc34d188 100644 Binary files a/icons/mob/actions/roguespells.dmi and b/icons/mob/actions/roguespells.dmi differ diff --git a/icons/mob/roguehud.dmi b/icons/mob/roguehud.dmi index 63713b5c59..44b8b41be8 100644 Binary files a/icons/mob/roguehud.dmi and b/icons/mob/roguehud.dmi differ diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi index dd69e9f75b..d746ad9029 100644 Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ diff --git a/icons/obj/railing.dmi b/icons/obj/railing.dmi index 0c1bfa9a89..d1d2764790 100644 Binary files a/icons/obj/railing.dmi and b/icons/obj/railing.dmi differ diff --git a/icons/roguetown/clothing/armor.dmi b/icons/roguetown/clothing/armor.dmi index e95c4172ce..28e40b2ea7 100644 Binary files a/icons/roguetown/clothing/armor.dmi and b/icons/roguetown/clothing/armor.dmi differ diff --git a/icons/roguetown/clothing/belts.dmi b/icons/roguetown/clothing/belts.dmi index b91f78ece3..c29d735905 100644 Binary files a/icons/roguetown/clothing/belts.dmi and b/icons/roguetown/clothing/belts.dmi differ diff --git a/icons/roguetown/clothing/cloaks.dmi b/icons/roguetown/clothing/cloaks.dmi index 86b3c7ace0..94093e6eb1 100644 Binary files a/icons/roguetown/clothing/cloaks.dmi and b/icons/roguetown/clothing/cloaks.dmi differ diff --git a/icons/roguetown/clothing/feet.dmi b/icons/roguetown/clothing/feet.dmi index fd77a0e765..c420b271b4 100644 Binary files a/icons/roguetown/clothing/feet.dmi and b/icons/roguetown/clothing/feet.dmi differ diff --git a/icons/roguetown/clothing/head.dmi b/icons/roguetown/clothing/head.dmi index 93e4326757..2f5fe5c9d3 100644 Binary files a/icons/roguetown/clothing/head.dmi and b/icons/roguetown/clothing/head.dmi differ diff --git a/icons/roguetown/clothing/neck.dmi b/icons/roguetown/clothing/neck.dmi index ed1de277ad..aa7e5fba4f 100644 Binary files a/icons/roguetown/clothing/neck.dmi and b/icons/roguetown/clothing/neck.dmi differ diff --git a/icons/roguetown/clothing/onmob/64x64/head.dmi b/icons/roguetown/clothing/onmob/64x64/head.dmi index 23f776cad2..04fa9c3c0b 100644 Binary files a/icons/roguetown/clothing/onmob/64x64/head.dmi and b/icons/roguetown/clothing/onmob/64x64/head.dmi differ diff --git a/icons/roguetown/clothing/onmob/armor.dmi b/icons/roguetown/clothing/onmob/armor.dmi index 48c97477a5..b3987cd9bc 100644 Binary files a/icons/roguetown/clothing/onmob/armor.dmi and b/icons/roguetown/clothing/onmob/armor.dmi differ diff --git a/icons/roguetown/clothing/onmob/cloaks.dmi b/icons/roguetown/clothing/onmob/cloaks.dmi index 24a62f9565..3ce419cd47 100644 Binary files a/icons/roguetown/clothing/onmob/cloaks.dmi and b/icons/roguetown/clothing/onmob/cloaks.dmi differ diff --git a/icons/roguetown/clothing/onmob/feet.dmi b/icons/roguetown/clothing/onmob/feet.dmi index ca84b5ac01..e0d2571889 100644 Binary files a/icons/roguetown/clothing/onmob/feet.dmi and b/icons/roguetown/clothing/onmob/feet.dmi differ diff --git a/icons/roguetown/clothing/onmob/head.dmi b/icons/roguetown/clothing/onmob/head.dmi index df06a1b258..b404320714 100644 Binary files a/icons/roguetown/clothing/onmob/head.dmi and b/icons/roguetown/clothing/onmob/head.dmi differ diff --git a/icons/roguetown/clothing/onmob/helpers/sleeves_armor.dmi b/icons/roguetown/clothing/onmob/helpers/sleeves_armor.dmi index 972432af00..9562396ea2 100644 Binary files a/icons/roguetown/clothing/onmob/helpers/sleeves_armor.dmi and b/icons/roguetown/clothing/onmob/helpers/sleeves_armor.dmi differ diff --git a/icons/roguetown/clothing/onmob/helpers/sleeves_pants.dmi b/icons/roguetown/clothing/onmob/helpers/sleeves_pants.dmi index a238257237..e6a7563b3c 100644 Binary files a/icons/roguetown/clothing/onmob/helpers/sleeves_pants.dmi and b/icons/roguetown/clothing/onmob/helpers/sleeves_pants.dmi differ diff --git a/icons/roguetown/clothing/onmob/helpers/sleeves_shirts.dmi b/icons/roguetown/clothing/onmob/helpers/sleeves_shirts.dmi index a80fcc4539..5fe48dca4a 100644 Binary files a/icons/roguetown/clothing/onmob/helpers/sleeves_shirts.dmi and b/icons/roguetown/clothing/onmob/helpers/sleeves_shirts.dmi differ diff --git a/icons/roguetown/clothing/onmob/neck.dmi b/icons/roguetown/clothing/onmob/neck.dmi index 77058fc71e..67f912aa1a 100644 Binary files a/icons/roguetown/clothing/onmob/neck.dmi and b/icons/roguetown/clothing/onmob/neck.dmi differ diff --git a/icons/roguetown/clothing/onmob/pants.dmi b/icons/roguetown/clothing/onmob/pants.dmi index 5708029b8d..3ca9fd74a0 100644 Binary files a/icons/roguetown/clothing/onmob/pants.dmi and b/icons/roguetown/clothing/onmob/pants.dmi differ diff --git a/icons/roguetown/clothing/onmob/shirts - ass.dmi b/icons/roguetown/clothing/onmob/shirts - ass.dmi new file mode 100644 index 0000000000..f75ce593b6 Binary files /dev/null and b/icons/roguetown/clothing/onmob/shirts - ass.dmi differ diff --git a/icons/roguetown/clothing/onmob/shirts.dmi b/icons/roguetown/clothing/onmob/shirts.dmi index 1a23dfebf5..63698dd53d 100644 Binary files a/icons/roguetown/clothing/onmob/shirts.dmi and b/icons/roguetown/clothing/onmob/shirts.dmi differ diff --git a/icons/roguetown/clothing/pants.dmi b/icons/roguetown/clothing/pants.dmi index 2035b17c21..3362f6b6ce 100644 Binary files a/icons/roguetown/clothing/pants.dmi and b/icons/roguetown/clothing/pants.dmi differ diff --git a/icons/roguetown/clothing/shirts - ass.dmi b/icons/roguetown/clothing/shirts - ass.dmi new file mode 100644 index 0000000000..f0bb52ca5e Binary files /dev/null and b/icons/roguetown/clothing/shirts - ass.dmi differ diff --git a/icons/roguetown/clothing/shirts.dmi b/icons/roguetown/clothing/shirts.dmi index 2c13e1319c..3ae798cf63 100644 Binary files a/icons/roguetown/clothing/shirts.dmi and b/icons/roguetown/clothing/shirts.dmi differ diff --git a/icons/roguetown/items/books.dmi b/icons/roguetown/items/books.dmi index 3385025704..d04d98494b 100644 Binary files a/icons/roguetown/items/books.dmi and b/icons/roguetown/items/books.dmi differ diff --git a/icons/roguetown/items/crafting.dmi b/icons/roguetown/items/crafting.dmi new file mode 100644 index 0000000000..ceea916663 Binary files /dev/null and b/icons/roguetown/items/crafting.dmi differ diff --git a/icons/roguetown/items/misc.dmi b/icons/roguetown/items/misc.dmi index 14bb77d08c..e9b17d66d5 100644 Binary files a/icons/roguetown/items/misc.dmi and b/icons/roguetown/items/misc.dmi differ diff --git a/icons/roguetown/items/natural.dmi b/icons/roguetown/items/natural.dmi index f50f55e7de..00444dd2db 100644 Binary files a/icons/roguetown/items/natural.dmi and b/icons/roguetown/items/natural.dmi differ diff --git a/icons/roguetown/items/produce.dmi b/icons/roguetown/items/produce.dmi index a2eaf0c8e7..9dda705af1 100644 Binary files a/icons/roguetown/items/produce.dmi and b/icons/roguetown/items/produce.dmi differ diff --git a/icons/roguetown/misc/64x32.dmi b/icons/roguetown/misc/64x32.dmi new file mode 100644 index 0000000000..251c1a7262 Binary files /dev/null and b/icons/roguetown/misc/64x32.dmi differ diff --git a/icons/roguetown/misc/96x96.dmi b/icons/roguetown/misc/96x96.dmi index 4b1d1d2e37..738b4e5d03 100644 Binary files a/icons/roguetown/misc/96x96.dmi and b/icons/roguetown/misc/96x96.dmi differ diff --git a/icons/roguetown/misc/decoration.dmi b/icons/roguetown/misc/decoration.dmi index 61a26571cd..58c717d714 100644 Binary files a/icons/roguetown/misc/decoration.dmi and b/icons/roguetown/misc/decoration.dmi differ diff --git a/icons/roguetown/misc/foliage.dmi b/icons/roguetown/misc/foliage.dmi index 0577b6e216..a28cdbdaa2 100644 Binary files a/icons/roguetown/misc/foliage.dmi and b/icons/roguetown/misc/foliage.dmi differ diff --git a/icons/roguetown/misc/machines.dmi b/icons/roguetown/misc/machines.dmi index a0de309d17..c87f1b0dbc 100644 Binary files a/icons/roguetown/misc/machines.dmi and b/icons/roguetown/misc/machines.dmi differ diff --git a/icons/roguetown/misc/pigflora.dmi b/icons/roguetown/misc/pigflora.dmi new file mode 100644 index 0000000000..be28af81e7 Binary files /dev/null and b/icons/roguetown/misc/pigflora.dmi differ diff --git a/icons/roguetown/misc/structure.dmi b/icons/roguetown/misc/structure.dmi index 89ec4f559e..679b5e16e5 100644 Binary files a/icons/roguetown/misc/structure.dmi and b/icons/roguetown/misc/structure.dmi differ diff --git a/icons/roguetown/misc/tallandwide.dmi b/icons/roguetown/misc/tallandwide.dmi index 04667fcebb..586fd8dcc0 100644 Binary files a/icons/roguetown/misc/tallandwide.dmi and b/icons/roguetown/misc/tallandwide.dmi differ diff --git a/icons/roguetown/misc/tallstructure.dmi b/icons/roguetown/misc/tallstructure.dmi index 64b221f08d..0df17de315 100644 Binary files a/icons/roguetown/misc/tallstructure.dmi and b/icons/roguetown/misc/tallstructure.dmi differ diff --git a/icons/roguetown/mob/hair.dmi b/icons/roguetown/mob/hair.dmi index 617d6a0351..dd48e94ebe 100644 Binary files a/icons/roguetown/mob/hair.dmi and b/icons/roguetown/mob/hair.dmi differ diff --git a/icons/roguetown/mob/hair_extensions.dmi b/icons/roguetown/mob/hair_extensions.dmi index 040edc60e4..652c266afe 100644 Binary files a/icons/roguetown/mob/hair_extensions.dmi and b/icons/roguetown/mob/hair_extensions.dmi differ diff --git a/icons/roguetown/mob/monster/Trolls.dmi b/icons/roguetown/mob/monster/Trolls.dmi index 1086b8f0c8..dd4674d1d2 100644 Binary files a/icons/roguetown/mob/monster/Trolls.dmi and b/icons/roguetown/mob/monster/Trolls.dmi differ diff --git a/icons/roguetown/mob/monster/mimic.dmi b/icons/roguetown/mob/monster/mimic.dmi new file mode 100644 index 0000000000..f91056310e Binary files /dev/null and b/icons/roguetown/mob/monster/mimic.dmi differ diff --git a/icons/roguetown/mob/monster/newminotaur.dmi b/icons/roguetown/mob/monster/newminotaur.dmi new file mode 100644 index 0000000000..4b6b6bc310 Binary files /dev/null and b/icons/roguetown/mob/monster/newminotaur.dmi differ diff --git a/icons/roguetown/mob/monster/poltergeist.dmi b/icons/roguetown/mob/monster/poltergeist.dmi new file mode 100644 index 0000000000..bd4fd62620 Binary files /dev/null and b/icons/roguetown/mob/monster/poltergeist.dmi differ diff --git a/icons/roguetown/mob/monster/simple_orcs.dmi b/icons/roguetown/mob/monster/simple_orcs.dmi new file mode 100644 index 0000000000..996781cc14 Binary files /dev/null and b/icons/roguetown/mob/monster/simple_orcs.dmi differ diff --git a/icons/roguetown/mob/monster/skeletons.dmi b/icons/roguetown/mob/monster/skeletons.dmi new file mode 100644 index 0000000000..2d2d0a3980 Binary files /dev/null and b/icons/roguetown/mob/monster/skeletons.dmi differ diff --git a/icons/roguetown/mob/monster/spider.dmi b/icons/roguetown/mob/monster/spider.dmi index 1bb88a6400..d342697fa9 100644 Binary files a/icons/roguetown/mob/monster/spider.dmi and b/icons/roguetown/mob/monster/spider.dmi differ diff --git a/icons/roguetown/underworld/enigma_husks.dmi b/icons/roguetown/underworld/enigma_husks.dmi index 371cca8156..6c5d878f8b 100644 Binary files a/icons/roguetown/underworld/enigma_husks.dmi and b/icons/roguetown/underworld/enigma_husks.dmi differ diff --git a/icons/roguetown/weapons/32.dmi b/icons/roguetown/weapons/32.dmi index b3c107df62..29eedb0ca7 100644 Binary files a/icons/roguetown/weapons/32.dmi and b/icons/roguetown/weapons/32.dmi differ diff --git a/icons/roguetown/weapons/64.dmi b/icons/roguetown/weapons/64.dmi index 22fa601c2a..936050ac13 100644 Binary files a/icons/roguetown/weapons/64.dmi and b/icons/roguetown/weapons/64.dmi differ diff --git a/icons/roguetown/weapons/custom.dmi b/icons/roguetown/weapons/custom.dmi new file mode 100644 index 0000000000..c859994540 Binary files /dev/null and b/icons/roguetown/weapons/custom.dmi differ diff --git a/icons/roguetown/weapons/custom_64.dmi b/icons/roguetown/weapons/custom_64.dmi new file mode 100644 index 0000000000..16b0d65dcf Binary files /dev/null and b/icons/roguetown/weapons/custom_64.dmi differ diff --git a/icons/roguetown/weapons/shillelagh.dmi b/icons/roguetown/weapons/shillelagh.dmi deleted file mode 100644 index d0b4f7f47e..0000000000 Binary files a/icons/roguetown/weapons/shillelagh.dmi and /dev/null differ diff --git a/icons/roguetown/weapons/tools.dmi b/icons/roguetown/weapons/tools.dmi index 2ef6dc80b1..7484e82ad0 100644 Binary files a/icons/roguetown/weapons/tools.dmi and b/icons/roguetown/weapons/tools.dmi differ diff --git a/icons/turf/floors/bear.dmi b/icons/turf/floors/bear.dmi index 1f2af07942..fbb7919528 100644 Binary files a/icons/turf/floors/bear.dmi and b/icons/turf/floors/bear.dmi differ diff --git a/icons/turf/floors/woodalt.dmi b/icons/turf/floors/woodalt.dmi new file mode 100644 index 0000000000..49ee769727 Binary files /dev/null and b/icons/turf/floors/woodalt.dmi differ diff --git a/icons/turf/floors/woodalt_turned.dmi b/icons/turf/floors/woodalt_turned.dmi new file mode 100644 index 0000000000..99a6143a2d Binary files /dev/null and b/icons/turf/floors/woodalt_turned.dmi differ diff --git a/icons/turf/roguefloor.dmi b/icons/turf/roguefloor.dmi index 0066ca52fd..983e2b0265 100644 Binary files a/icons/turf/roguefloor.dmi and b/icons/turf/roguefloor.dmi differ diff --git a/icons/turf/roguewall.dmi b/icons/turf/roguewall.dmi index 30b50e2e35..58225f28c9 100644 Binary files a/icons/turf/roguewall.dmi and b/icons/turf/roguewall.dmi differ diff --git a/icons/w_title.dmi b/icons/w_title.dmi new file mode 100644 index 0000000000..9bff0fef4e Binary files /dev/null and b/icons/w_title.dmi differ diff --git a/modular/Barding/code/Barding_instruments.dm b/modular/Barding/code/Barding_instruments.dm index a125d702e4..c06161500a 100644 --- a/modular/Barding/code/Barding_instruments.dm +++ b/modular/Barding/code/Barding_instruments.dm @@ -31,6 +31,7 @@ if(playing && user.get_active_held_item() != src) playing = FALSE soundloop.stop() + user.remove_status_effect(/datum/status_effect/buff/playing_music) // Prevents an exploit for(var/mob/living/carbon/L in viewers(7)) var/mob/living/carbon/buffed = L @@ -54,13 +55,14 @@ return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) /obj/item/rogue/instrument/Initialize() - soundloop = new(list(src), FALSE) + soundloop = new(src, FALSE) . = ..() -/obj/item/rogue/instrument/dropped() +/obj/item/rogue/instrument/dropped(mob/living/user, silent) ..() if(soundloop) soundloop.stop() + user.remove_status_effect(/datum/status_effect/buff/playing_music) // Prevents an exploit for(var/mob/living/carbon/L in viewers(7)) var/mob/living/carbon/buffed = L @@ -82,6 +84,7 @@ return user.changeNext_move(CLICK_CD_MELEE) if(!playing) + var/note_color = "#7f7f7f" // uses MMO item rarity color grading var/curfile = input(user, "Which song do you want to play?", "Pick a song", name) as null|anything in song_list if(!user) return @@ -92,14 +95,25 @@ stressevent = /datum/stressevent/music if(2) stressevent = /datum/stressevent/music/two + note_color = "#ffffff" if(3) stressevent = /datum/stressevent/music/three + note_color = "#1eff00" if(4) stressevent = /datum/stressevent/music/four + note_color = "#0070dd" if(5) stressevent = /datum/stressevent/music/five + note_color = "#a335ee" if(6) stressevent = /datum/stressevent/music/six + note_color = "#ff8000" + + if(playing) + playing = FALSE + soundloop.stop() + user.remove_status_effect(/datum/status_effect/buff/playing_music) + return if(!(src in user.held_items)) return @@ -107,6 +121,7 @@ if(user.get_inactive_held_item()) playing = FALSE soundloop.stop() + user.remove_status_effect(/datum/status_effect/buff/playing_music) if(dynamic_icon) lower_from_mouth() update_icon() @@ -118,6 +133,7 @@ soundloop.mid_sounds = list(curfile) soundloop.cursound = null soundloop.start() + user.apply_status_effect(/datum/status_effect/buff/playing_music, stressevent, note_color) if(dynamic_icon) lift_to_mouth() update_icon() @@ -128,9 +144,9 @@ step_towards(I, user) sleep(2) step_towards(I, user) - for(var/mob/living/carbon/L in viewers(7)) // Fix: Apply the music buff only if you didn't cancel song selection. - if(L.can_hear()) // Only people who can hear music will get buffed - L.add_stress(stressevent) +// for(var/mob/living/carbon/L in viewers(7)) // Fix: Apply the music buff only if you didn't cancel song selection. +// if(L.can_hear()) // Only people who can hear music will get buffed +// L.add_stress(stressevent) // BARDIC BUFFS CODE START // @@ -212,6 +228,7 @@ else playing = FALSE soundloop.stop() + user.remove_status_effect(/datum/status_effect/buff/playing_music) if(dynamic_icon) lower_from_mouth() update_icon() diff --git a/modular/Barding/code/music_effect.dm b/modular/Barding/code/music_effect.dm new file mode 100644 index 0000000000..56831b84d6 --- /dev/null +++ b/modular/Barding/code/music_effect.dm @@ -0,0 +1,49 @@ +/obj/effect/temp_visual/music_rogue //color is white by default, set to whatever is needed + name = "music" + icon = 'icons/effects/music-note.dmi' + icon_state = "music_note" + duration = 15 + plane = GAME_PLANE_UPPER + layer = ABOVE_ALL_MOB_LAYER + +/obj/effect/temp_visual/music_rogue/Initialize(mapload, set_color) + if(set_color) + add_atom_colour(set_color, FIXED_COLOUR_PRIORITY) + . = ..() + alpha = 150 + pixel_x = rand(-13, 13) + pixel_y = rand(-9, 3) + +/atom/movable/screen/alert/status_effect/buff/playing_music + name = "Playing Music" + desc = "Let the world hear my craft." + icon_state = "buff" + +/datum/status_effect/buff/playing_music + id = "play_music" + alert_type = /atom/movable/screen/alert/status_effect/buff/playing_music + var/effect_color + var/datum/stressevent/stress_to_apply + var/pulse = 0 + var/ticks_to_apply = 10 + +/datum/status_effect/buff/playing_music/on_creation(mob/living/new_owner, stress, colour) + stress_to_apply = stress + effect_color = colour + return ..() + +/datum/status_effect/buff/playing_music/tick() + var/obj/effect/temp_visual/music_rogue/M = new /obj/effect/temp_visual/music_rogue(get_turf(owner)) + M.color = effect_color + pulse += 1 + if (pulse >= ticks_to_apply) + pulse = 0 + for (var/mob/living/carbon/human/H in hearers(7, owner)) + if (!H.client) + continue + if(!H.can_hear()) + continue + if (!H.has_stress(stress_to_apply)) + H.add_stress(stress_to_apply) + if (prob(50)) + to_chat(H, stress_to_apply.desc) diff --git a/modular/Mapping/Mapping_aides.dm b/modular/Mapping/Mapping_aides.dm index 8d9ab8b54a..23e5ded193 100644 --- a/modular/Mapping/Mapping_aides.dm +++ b/modular/Mapping/Mapping_aides.dm @@ -1,43 +1,166 @@ -/* .................. Loot spawners ................... */ -/obj/effect/spawner/roguemap/loot - icon_state = "loot" - probby = 50 +// ====================================================================== -/obj/effect/spawner/roguemap/loot/common - spawned = list( - /obj/item/roguecoin/copper/pile = 15, - /obj/item/rogueweapon/huntingknife = 10, - /obj/item/rogueweapon/huntingknife/idagger = 8, - /obj/item/rogueweapon/huntingknife/idagger/steel = 4, - /obj/item/rogueweapon/huntingknife/idagger/silver = 2, - /obj/item/rogueweapon/sword/iron = 3, - /obj/item/rogueweapon/woodcut = 10, - /obj/item/rogueweapon/mace = 5, - /obj/item/quiver/arrows = 5, - /obj/item/rogueweapon/sword/iron/short = 5, - /obj/item/clothing/suit/roguetown/armor/leather = 10, - /obj/item/clothing/suit/roguetown/armor/gambeson = 15, - /obj/item/clothing/gloves/roguetown/chain/iron = 3, - /obj/item/clothing/neck/roguetown/coif = 3, - /obj/item/clothing/shoes/roguetown/gladiator = 5 - ) +/* .................. Pigflowers ................... */ +/obj/structure/flora/rogueflower // ausbushes recolored + name = "flowers" + icon = 'icons/roguetown/misc/pigflora.dmi' + icon_state = "reedbush_1" -/obj/effect/spawner/roguemap/sewerencounter - icon_state = "srat" - icon = 'icons/roguetown/mob/monster/rat.dmi' - probby = 50 - color = "#ff0000" - spawned = list( - /obj/item/reagent_containers/food/snacks/smallrat = 30, - /obj/item/reagent_containers/food/snacks/smallrat/dead = 10, - /obj/item/organ/guts = 5, - /obj/item/roguecoin/copper = 5, - /obj/effect/gibspawner/generic = 5, - /obj/effect/decal/remains/bigrat = 5, - /mob/living/simple_animal/hostile/retaliate/rogue/bigrat = 1, - ) +/obj/structure/flora/rogueflower/reedbush + icon_state = "reedbush_1" + +/obj/structure/flora/rogueflower/reedbush/Initialize() + icon_state = "reedbush_[rand(1, 4)]" + . = ..() + +/obj/structure/flora/rogueflower/lavendergrass + icon_state = "lavendergrass_1" + +/obj/structure/flora/rogueflower/lavendergrass/Initialize() + icon_state = "lavendergrass_[rand(1, 4)]" + . = ..() + +/obj/structure/flora/rogueflower/ywflowers + icon_state = "ywflowers_1" + +/obj/structure/flora/rogueflower/ywflowers/Initialize() + icon_state = "ywflowers_[rand(1, 3)]" + . = ..() + +/obj/structure/flora/rogueflower/brflowers + icon_state = "brflowers_1" + +/obj/structure/flora/rogueflower/brflowers/Initialize() + icon_state = "brflowers_[rand(1, 3)]" + . = ..() + +/obj/structure/flora/rogueflower/ppflowers + icon_state = "ppflowers_1" + +/obj/structure/flora/rogueflower/ppflowers/Initialize() + icon_state = "ppflowers_[rand(1, 3)]" + . = ..() + +/obj/structure/flora/roguegrass/stalky + name = "" + desc = "" + icon = 'icons/roguetown/misc/pigflora.dmi' + icon_state = "stalkygrass" + opacity = FALSE + +/obj/structure/flora/roguegrass/stalky/update_icon() + dir = pick(GLOB.cardinals) +// =================================================================================== +/* .................. Dwarf Outpost ................... */ +/obj/effect/landmark/map_load_mark/dwarf_outpost + name = "Dwarf Outpost" + templates = list( "Dwarf_Outpost_1","Dwarf_Outpost_2" ) + +/datum/map_template/dwarf_outpost_i + name = "Dwarf Outpost Orc" + id = "Dwarf_Outpost_1" + mappath = "_maps/map_files/templates/dwarf_outpost/Dwarf_Outpost_1.dmm" + +/datum/map_template/dwarf_outpost_ii + name = "Dwarf Outpost Beastmen" + id = "Dwarf_Outpost_2" + mappath = "_maps/map_files/templates/dwarf_outpost/Dwarf_Outpost_2.dmm" + + +/* .................. Roadblock ................... */ +/obj/effect/landmark/map_load_mark/hamlet_roadblock + name = "Roadblock" + templates = list( "roadblock_1","roadblock_2" ) + +/datum/map_template/roadblock_i + name = "Roadblock" + id = "roadblock_1" + mappath = "_maps/map_files/templates/stonehamlet/roadblock_1.dmm" + +/datum/map_template/roadblock_ii + name = "No roadblock" + id = "roadblock_2" + mappath = "_maps/map_files/templates/stonehamlet/roadblock_2.dmm" + +/* .................. Outlaw camp ................... */ +/obj/effect/landmark/map_load_mark/hamlet_outlaws + name = "Outlaw camp" + templates = list( "outlawcamp_1","outlawcamp_2" ) + +/datum/map_template/outlawcamp_i + name = "Outlaw camp" + id = "outlawcamp_1" + mappath = "_maps/map_files/templates/stonehamlet/outlawcamp_1.dmm" + +/datum/map_template/outlawcamp_ii + name = "Empty outlaw camp" + id = "outlawcamp_2" + mappath = "_maps/map_files/templates/stonehamlet/outlawcamp_2.dmm" + +// =================================================================================== +/* + if(prob(15)) + shirt = /obj/item/clothing/suit/roguetown/shirt/undershirt/vagrant + if(prob(15)) + shirt = /obj/item/clothing/suit/roguetown/shirt/undershirt/vagrant/l + if(prob(15)) + shirt = /obj/item/clothing/suit/roguetown/shirt/rags + + if(prob(10)) + pants = /obj/item/clothing/under/roguetown/tights/vagrant + if(prob(10)) + pants = /obj/item/clothing/under/roguetown/tights/vagrant/l + if(prob(10)) + pants = /obj/item/clothing/under/roguetown/tights/sailor + + switch(loadout) + if(1) + r_hand = /obj/item/natural/stone + if(2) + r_hand = /obj/item/rogueweapon/knife/stone + if(3) + r_hand = /obj/item/rogueweapon/mace/woodclub +*/ + +// =================================================================================== +/obj/structure/mineral_door/wood/red/i + name = "Room I" + lockid = "roomi" + locked = TRUE +/obj/structure/mineral_door/wood/red/ii // the cheap shitty room that starts unlocked and might have a nasty surprise + name = "Room II" + desc = "The lock is a bit loose on this door." + lockid = "roomii" +/obj/structure/mineral_door/wood/red/iii + name = "Room III" + lockid = "roomiii" + locked = TRUE +/obj/structure/mineral_door/wood/red/iv + name = "Room IV" + lockid = "roomiv" + locked = TRUE +/obj/structure/mineral_door/wood/red/v + name = "Room V" + lockid = "roomv" + locked = TRUE +/obj/structure/mineral_door/wood/red/vi + name = "Room VI" + lockid = "roomvi" + locked = TRUE +/obj/structure/mineral_door/wood/green/merc + name = "Mercenary Lodgings" + lockid = "mercenary" + locked = TRUE +/obj/structure/mineral_door/wood/violet/roomhunt + name = "Room HUNT" + lockid = "roomhunt" + locked = TRUE +/obj/structure/mineral_door/wood/violet/roomroyal + name = "Room ROYAL" + lockid = "roomroyal" + locked = TRUE /* .................. Hauntz randomizer ................... */ /obj/effect/spawner/roguemap/hauntz_random @@ -58,14 +181,9 @@ /obj/structure/fluff/statue/xylix/frown icon_state = "xylix_frown" -/turf/open/floor/rogue/sandstone - icon_state = "sandstone" - footstep = FOOTSTEP_STONE - barefootstep = FOOTSTEP_HARD_BAREFOOT - clawfootstep = FOOTSTEP_HARD_CLAW - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - landsound = 'sound/foley/jumpland/grassland.wav' + +// ============================================================== /obj/effect/spawner/roguemap/xylixlabyrinth icon = 'icons/mob/actions/roguespells.dmi' icon_state = "raiseskele" @@ -239,12 +357,10 @@ spawned = list( /obj/structure/trap/xylix_healing = 10, /obj/structure/trap/xylix = 10) /obj/structure/fluff/walldeco/xylfrown - icon = 'modular/Mapping/icons/decoration.dmi' icon_state = "wall_sad" pixel_y = 32 /obj/structure/fluff/walldeco/xylsmile - icon = 'modular/Mapping/icons/decoration.dmi' icon_state = "wall_funny" pixel_y = 32 @@ -261,8 +377,6 @@ new /obj/item/clothing/head/roguetown/jester(src) - - /* .................. Spider stuff ................... */ /obj/structure/spider/stickyweb/solo icon_state = "stickyweb3" @@ -302,23 +416,80 @@ /* .................. Various mapping aides ................... */ - /obj/structure/roguethrone/statues icon = 'modular/Mapping/icons/96x96.dmi' -/obj/machinery/light/rogue/wallfire/big_fireplace - icon_state = "fireplace1" - base_state = "fireplace" - icon = 'icons/roguetown/misc/fireplace64.dmi' - -/obj/machinery/light/rogue/hearth/big_fireplace - name = "fireplace" - icon_state = "fireplace1" - base_state = "fireplace" - icon = 'icons/roguetown/misc/fireplace64.dmi' - fueluse = -1 - pixel_x = -16 - climb_offset = 4 + +// ====================================================================== +/* .................. Colony Spider Web ................... */ +/obj/structure/innocent_web + name = "" + desc = "" + icon = 'icons/roguetown/misc/tallstructure.dmi' + icon_state = "innocentweb1" + layer = ABOVE_ALL_MOB_LAYER + density = FALSE + max_integrity = 35 + climbable = FALSE + dir = SOUTH + debris = list(/obj/item/natural/silk = 1) + var/lucky_escape + +/obj/structure/innocent_web/Initialize() + . = ..() + icon_state = "innocentweb[rand(1,2)]" + return ..() + +/obj/structure/innocent_web/attack_hand() + playsound(src, pick('sound/misc/jumpscare (1).ogg','sound/misc/jumpscare (2).ogg','sound/misc/jumpscare (3).ogg','sound/misc/jumpscare (4).ogg'), 100) + new /mob/living/simple_animal/hostile/retaliate/rogue/spider/colony (get_turf(src)) + qdel(src) + +/obj/structure/innocent_web/attackby(obj/item, /mob/user, params) + playsound(src, pick('sound/misc/jumpscare (1).ogg','sound/misc/jumpscare (2).ogg','sound/misc/jumpscare (3).ogg','sound/misc/jumpscare (4).ogg'), 100) + new /mob/living/simple_animal/hostile/retaliate/rogue/spider/colony (get_turf(src)) + qdel(src) + +/obj/structure/innocent_web/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + playsound(src, pick('sound/misc/jumpscare (1).ogg','sound/misc/jumpscare (2).ogg','sound/misc/jumpscare (3).ogg','sound/misc/jumpscare (4).ogg'), 100) + new /mob/living/simple_animal/hostile/retaliate/rogue/spider/colony (get_turf(src)) + qdel(src) + +/obj/structure/innocent_web/Crossed(atom/movable/AM) + ..() + if(isliving(AM)) + var/mob/living/carbon/human/L = AM + lucky_escape = ( L.STALUC * 4 ) + L.Immobilize(5) + if(L.m_intent == MOVE_INTENT_WALK) + L.Immobilize(10) + if(prob(lucky_escape)) + to_chat(L, "The flimsy web breaks.") + qdel(src) + else + playsound(src, pick('sound/misc/jumpscare (1).ogg','sound/misc/jumpscare (2).ogg','sound/misc/jumpscare (3).ogg','sound/misc/jumpscare (4).ogg'), 120) + new /mob/living/simple_animal/hostile/retaliate/rogue/spider/colony (get_turf(src)) + qdel(src) + if(L.m_intent == MOVE_INTENT_RUN) + to_chat(L, "I'm stuck in the web!") + L.Immobilize(20) + if(prob(lucky_escape)) + to_chat(L, "The flimsy web breaks.") + qdel(src) + else + playsound(src, pick('sound/misc/jumpscare (1).ogg','sound/misc/jumpscare (2).ogg','sound/misc/jumpscare (3).ogg','sound/misc/jumpscare (4).ogg'), 120) + new /mob/living/simple_animal/hostile/retaliate/rogue/spider/colony (get_turf(src)) + qdel(src) + else + to_chat(L, "I'm stuck in the web!") + L.Immobilize(5) + if(prob(lucky_escape)) + to_chat(L, "The flimsy web breaks.") + qdel(src) + else + playsound(src, pick('sound/misc/jumpscare (1).ogg','sound/misc/jumpscare (2).ogg','sound/misc/jumpscare (3).ogg','sound/misc/jumpscare (4).ogg'), 120) + new /mob/living/simple_animal/hostile/retaliate/rogue/spider/colony (get_turf(src)) + qdel(src) /* .................. Wizard Shenanigans ................... */ @@ -449,69 +620,30 @@ . = ..() icon_state = "bathtile_pool_mid" -/* .................. Wall decorations ................... */ -/obj/structure/fluff/walldeco/bath // suggestive stonework - icon = 'modular/Mapping/icons/decoration.dmi' - icon_state = "bath1" - pixel_x = -32 - alpha = 210 - -/obj/structure/fluff/walldeco/bath/two - icon_state = "bath2" - pixel_x = -29 - -/obj/structure/fluff/walldeco/bath/three - icon_state = "bath3" - pixel_x = -29 - -/obj/structure/fluff/walldeco/bath/four - icon_state = "bath4" - pixel_y = 32 - pixel_x = 0 - -/obj/structure/fluff/walldeco/bath/five - icon_state = "bath5" - pixel_x = -29 - -/obj/structure/fluff/walldeco/bath/six - icon_state = "bath6" - pixel_x = -29 - -/obj/structure/fluff/walldeco/bath/seven - icon_state = "bath7" - pixel_x = 32 - -/obj/structure/fluff/walldeco/bath/gents - icon_state = "gents" - pixel_x = 0 - pixel_y = 32 - -/obj/structure/fluff/walldeco/bath/ladies - icon_state = "ladies" - pixel_x = 0 - pixel_y = 32 - -/obj/structure/fluff/walldeco/bath/wallrope - icon_state = "wallrope" - layer = WALL_OBJ_LAYER+0.1 - pixel_x = 0 - pixel_y = 0 - color = "#d66262" /obj/effect/decal/shadow_floor name = "" desc = "" - icon = 'modular/Mapping/icons/decoration.dmi' + icon = 'icons/roguetown/misc/decoration.dmi' icon_state = "shadow_floor" mouse_opacity = 0 /obj/effect/decal/shadow_floor/corner icon_state = "shad_floorcorn" -/obj/structure/fluff/walldeco/bath/wallpipes - icon_state = "wallpipe" - pixel_x = 0 - pixel_y = 32 +/obj/effect/decal/miasma + name = "" + desc = "" + icon = 'icons/roguetown/mob/rotten.dmi' + icon_state = "deadite" + mouse_opacity = 0 + +/obj/effect/decal/remains/human/old + name = "remains" + color = "#d6b3a5" + +/obj/effect/decal/remains/human/old/small + icon_state = "remainslarva" /obj/structure/fluff/shipssprote @@ -524,64 +656,49 @@ pixel_y = -16 -/obj/structure/fluff/walldeco/bath/random - icon_state = "bath" - pixel_y = 32 -/obj/structure/fluff/walldeco/bath/random/Initialize() - . = ..() - if(icon_state == "bath") - icon_state = "bath[rand(1,8)]" - -/obj/structure/fluff/walldeco/vinez // overlay vines for more flexibile mapping - icon = 'modular/Mapping/icons/decoration.dmi' - icon_state = "vinez" - -/obj/structure/fluff/walldeco/vinez/l - pixel_x = -32 -/obj/structure/fluff/walldeco/vinez/r - pixel_x = 32 - -/obj/structure/fluff/walldeco/vinez/offset - icon_state = "vinez" - pixel_y = 32 - - -/* .................. Red brick Walls ................... */ -/turf/closed/wall/mineral/rogue/stonebrick/reddish - color = "#e0b7af" +// ====================================================================== +/* .................. Innocent Bush ................... */ +/obj/structure/innocent_bush + name = "bush" + desc = "These large bushes are known to be well-liked by silkworms who make their nests in their dark depths." + icon = 'icons/roguetown/mob/monster/Trolls.dmi' + icon_state = "Trolls" + pixel_x = -16 + layer = ABOVE_ALL_MOB_LAYER + max_integrity = 500 + density = TRUE -/turf/closed/wall/mineral/rogue/decostone/fluffstone/reddish - color = "#fbc5bc" +/obj/structure/innocent_bush/attack_hand(mob/living/carbon/human/user) +// playsound(src.loc, "plantcross", 80, FALSE, -1) +// user.visible_message(span_noticesmall("[user] searches through [src].")) +// shake_camera(user, 2, 2) + playsound(src, pick('sound/misc/jumpscare (1).ogg','sound/misc/jumpscare (2).ogg','sound/misc/jumpscare (3).ogg','sound/misc/jumpscare (4).ogg'), 100) + new /mob/living/simple_animal/hostile/retaliate/rogue/trollbog (get_turf(src)) + qdel(src) -/turf/closed/wall/mineral/rogue/decostone/cand/reddish - color = "#fbd2cb" +/obj/structure/innocent_bush/attackby(obj/item, /mob/living/user, params) +// playsound(src.loc, "plantcross", 80, FALSE, -1) + playsound(src, pick('sound/misc/jumpscare (1).ogg','sound/misc/jumpscare (2).ogg','sound/misc/jumpscare (3).ogg','sound/misc/jumpscare (4).ogg'), 100) +// shake_camera(user, 2, 2) + new /mob/living/simple_animal/hostile/retaliate/rogue/trollbog (get_turf(src)) + qdel(src) -/obj/structure/stairs/stone/reddish - color = "#ffddd7" +/obj/structure/innocent_bush/Bumped(atom/movable/AM) + playsound(src.loc, "plantcross", 80, FALSE, -1) + playsound(src, pick('sound/misc/jumpscare (1).ogg','sound/misc/jumpscare (2).ogg','sound/misc/jumpscare (3).ogg','sound/misc/jumpscare (4).ogg'), 100) + new /mob/living/simple_animal/hostile/retaliate/rogue/trollbog (get_turf(src)) + qdel(src) +/obj/structure/innocent_bush/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + playsound(src.loc, "plantcross", 80, FALSE, -1) + sleep(4) + playsound(src, pick('sound/misc/jumpscare (1).ogg','sound/misc/jumpscare (2).ogg','sound/misc/jumpscare (3).ogg','sound/misc/jumpscare (4).ogg'), 100) + new /mob/living/simple_animal/hostile/retaliate/rogue/trollbog (get_turf(src)) + qdel(src) -/obj/machinery/light/rogue/wallfire/candle/lamp // cant get them to start unlit but they work as is - name = "candle lamp" - icon = 'modular/Mapping/icons/decoration.dmi' - icon_state = "candle" - base_state = "candle" - layer = WALL_OBJ_LAYER+0.1 - light_power = 0.9 - light_range = 6 /* .................. Misc ................... */ -/obj/structure/bars/alt - icon_state = "bars_alt" - plane = -3 - layer = WALL_OBJ_LAYER+0.05 - -/obj/item/roguebin/alt - icon_state = "washbin2" - -/obj/structure/mirror/alt - icon_state = "mirror_alt" - /obj/item/roguestatue/silver/gnome name = "petrified gnome" desc = "A literal gnome, turned to stone mid-step and put on a matching stone platform. Rather unsettling." @@ -589,290 +706,186 @@ color = "#617163" +// ==================== NEW WEAPONS ========================== +/obj/item/rogueweapon/sword/scimitar/falx + name = "falx" + desc = "Ancient curved blade for chopping and little else." + icon = 'icons/roguetown/weapons/custom.dmi' + icon_state = "falx" + max_blade_int = 200 + max_integrity = INTEGRITY_STANDARD -/* .................. The Drunken Saiga ................... */ -/obj/structure/fluff/walldeco/innsign/saiga - name = "The Drunken Saiga" - icon = 'modular/Mapping/icons/decoration.dmi' - icon_state = "bar_saiga" - plane = -1 - pixel_x = 3 - pixel_y = 16 - -/obj/structure/fluff/walldeco/innsign/trophy - name = "saiga trophy" - icon = 'modular/Mapping/icons/decoration.dmi' - icon_state = "saiga_trophy" - pixel_y = 32 - -/obj/item/clothing/suit/roguetown/armor/leather/vest/innkeep - name = "padded vest" - desc = "Dyed green, belongs to the owner of the Drunken Saiga inn." - icon_state = "striped" - color = "#638b45" - -/turf/open/floor/rogue/tile/checker_green - icon_state = "tile" - color = "#94df5b" - - - -/* .................. Areas to play with the music a bit ................... */ -/area/rogue/indoors/town/bath/redhouse // lets try something different - droning_sound = 'modular/Mapping/sound/Fulminate.ogg' - converted_type = /area/rogue/outdoors/exposed/bath/redhouse - -/area/rogue/outdoors/exposed/bath/redhouse - droning_sound = 'modular/Mapping/sound/Fulminate.ogg' - -/area/rogue/indoors/town/tavern/saiga - droning_sound = 'modular/Mapping/sound/Folia1490.ogg' - droning_sound_night = 'modular/Mapping/sound/LeTourdion.ogg' - converted_type = /area/rogue/outdoors/exposed/tavern/saiga - -/area/rogue/outdoors/exposed/tavern/saiga - droning_sound = 'modular/Mapping/sound/Folia1490.ogg' - droning_sound_night = 'modular/Mapping/sound/LeTourdion.ogg' - - -/* .................. Traveltiles ................... */ // these are the ones on centcom, where the actual lair is, to reduce varedits onmap -/obj/structure/fluff/traveltile/exit_bandit // mus NOT be a traveltile/bandit child, because that one has a check for banditcamp trait. People should always be able to leave the camp. - aportalid = "banditin" - aportalgoesto = "banditexit" - -/obj/structure/fluff/traveltile/exit_vampire // mus NOT be a traveltile/vampire child, because that one has a check for banditcamp trait. People should always be able to leave the camp. - aportalid = "vampin" - aportalgoesto = "vampexit" -/obj/structure/fluff/traveltile/exit_inhumen - aportalid = "inhumenin" - aportalgoesto = "inhumenexit" - - -/obj/structure/fluff/traveltile/to_inhumen_tribe - name = "to the Deep Bog" - aportalid = "inhumenexit" - aportalgoesto = "inhumenin" - - -/* .................. Toll randomizer (poor mans coin generator, cheaper workload is all) ................... */ -/obj/effect/spawner/roguemap/tollrandom - icon = 'icons/roguetown/underworld/enigma_husks.dmi' - icon_state = "soultoken_floor" - probby = 25 - color = "#ff0000" - spawned = list( - /obj/item/underworld/coin = 1, - ) - - -/* moved to main. leave this be for now, I want to be able to find the additions I make easily for tweaking -/* .................. More chairs ................... */ -/obj/structure/chair/wood/rogue/chair_noble - name = "fine chair" - icon_state = "chair_green" - icon = 'icons/roguetown/misc/structure.dmi' - item_chair = /obj/item/chair/rogue/chair_nobles - blade_dulling = DULLING_BASHCHOP - destroy_sound = 'sound/combat/hits/onwood/destroyfurniture.ogg' - attacked_sound = "woodimpact" -/obj/item/chair/rogue/chair_nobles - icon_state = "chair_green" - origin_type = /obj/structure/chair/wood/rogue/chair_noble - -/obj/structure/chair/wood/rogue/chair_noble/purple - icon_state = "chair_purple" - item_chair = /obj/item/chair/rogue/chair_nobles/purple -/obj/item/chair/rogue/chair_nobles/purple - icon_state = "chair_purple" - origin_type = /obj/structure/chair/wood/rogue/chair_noble/purple - -/obj/structure/chair/wood/rogue/chair_noble/red - icon_state = "chair_red" - item_chair = /obj/item/chair/rogue/chair_nobles/red -/obj/item/chair/rogue/chair_nobles/red - icon_state = "chair_purple" - origin_type = /obj/structure/chair/wood/rogue/chair_noble/red - -/obj/structure/chair/bench/couch/redleft - icon_state = "redcouch_alt" -/obj/structure/chair/bench/couch/redright - icon_state = "redcouch2_alt" - - -/* .................. Lights ................... */ -/obj/item/candle/yellow/lit/infinite - light_power = 1 - light_range = 4 - start_lit = TRUE - infinite = TRUE - icon_state = "candle1_lit" - anchored = TRUE - -/obj/item/candle/yellow/lit/infinite/strong - light_power = 2 - light_range = 4 - pixel_x = 4 - -/obj/machinery/light/rogue/campfire/longlived - fueluse = 180 MINUTES - -/obj/machinery/light/rogue/wallfire/candle/weak - light_power = 0.9 - light_range = 6 -/obj/machinery/light/rogue/wallfire/candle/weak/l - pixel_x = -32 - pixel_y = 0 -/obj/machinery/light/rogue/wallfire/candle/weak/r - pixel_x = 32 - pixel_y = 0 - - -// Inhumen boss bed. Sleeping on a bear! Kinda comfy, sort of -/obj/structure/bed/rogue/bear - desc = "A hide of a slain bear. It looks like someone sleeps on it often." - icon = 'icons/turf/floors/bear.dmi' - icon_state = "bear" - pixel_x = -16 - pixel_y = -27 - -/obj/structure/fluff/walldeco/skullspike // for ground really - icon = 'modular/Mapping/icons/decoration.dmi' - icon_state = "skullspike" - plane = -1 - layer = ABOVE_MOB_LAYER - pixel_x = 8 - pixel_y = 24 - -/* .................. Floors ................... */ -/turf/open/floor/rogue/ruinedwood/darker - color = "#d9c9b0" -/turf/open/floor/rogue/ruinedwood/turned/darker - color = "#d9c9b0" - -/turf/open/floor/rogue/tile/kitchen - icon_state = "tavern" - - -/obj/structure/roguetent/preopen - density = FALSE - -/obj/structure/fluff/clock/dense - density = TRUE - - -/obj/structure/closet/crate/chest/crate - name = "crate" - base_icon_state = "woodchest" - icon_state = "woodchest" - -/obj/structure/closet/crate/chest/wicker - name = "wicker basket" - desc = "Fibers interwoven to make a cheap storage bin." - base_icon_state = "wicker" - icon_state = "wicker" - open_sound = 'sound/items/book_open.ogg' - open_sound = 'sound/items/book_close.ogg' - close_sound = 'sound/items/book_close.ogg' - -/obj/structure/closet/crate/chest/neu - name = "sturdy oak chest" - icon_state = "chest_neu" - base_icon_state = "chest_neu" +/obj/item/rogueweapon/sword/scimitar/messer/neu + icon = 'icons/roguetown/weapons/custom.dmi' +/obj/item/rogueweapon/sword/scimitar/messer/neu/getonmobprop(tag) + . = ..() + if(tag) + switch(tag) + if("gen") + return list("shrink" = 0.5,"sx" = -10,"sy" = -8,"nx" = 11,"ny" = -8,"wx" = -7,"wy" = -6,"ex" = 6,"ey" = -7,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 90,"sturn" = -80,"wturn" = -60,"eturn" = 71,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("wielded") + return list("shrink" = 0.6,"sx" = 3,"sy" = 3,"nx" = -1,"ny" = 4,"wx" = -7,"wy" = 3,"ex" = 7,"ey" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 10,"wturn" = 0,"eturn" = 15,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) + if("onbelt") + return list("shrink" = 0.5,"sx" = -4,"sy" = -6,"nx" = 5,"ny" = -6,"wx" = 0,"wy" = -6,"ex" = -1,"ey" = -6,"nturn" = 100,"sturn" = 156,"wturn" = 90,"eturn" = 180,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) + +/obj/item/rogueweapon/pick/paxe/neu + icon = 'icons/roguetown/weapons/custom.dmi' +/obj/item/rogueweapon/pick/paxe/neu/getonmobprop(tag) + . = ..() + if(tag) + switch(tag) + if("gen") + return list("shrink" = 0.7,"sx" = -9,"sy" = 0,"nx" = 12,"ny" = 1,"wx" = -6,"wy" = 0,"ex" = 5,"ey" = -1,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("onbelt") + return list("shrink" = 0.4,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) + +/obj/item/rogueweapon/polearm/halberd/bardiche/woodcutter/neu + icon = 'icons/roguetown/weapons/custom_64.dmi' + slot_flags = FALSE +/obj/item/rogueweapon/polearm/halberd/bardiche/woodcutter/neu/getonmobprop(tag) + . = ..() + if(tag) + switch(tag) + if("gen") + return list("shrink" = 0.6,"sx" = -6,"sy" = 0,"nx" = 7,"ny" = 2,"wx" = -2,"wy" = 0,"ex" = 1,"ey" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -38,"sturn" = 37,"wturn" = 30,"eturn" = -30,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("wielded") + return list("shrink" = 0.6,"sx" = 5,"sy" = -3,"nx" = -4,"ny" = -2,"wx" = -3,"wy" = -2,"ex" = 3,"ey" = -2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 7,"sturn" = -7,"wturn" = 16,"eturn" = -22,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) + if("onbelt") + return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) + +/obj/item/rogueweapon/polearm/woodstaff/aries/neu + icon = 'icons/roguetown/weapons/custom_64.dmi' + slot_flags = FALSE + dropshrink = 0.9 +/obj/item/rogueweapon/polearm/woodstaff/aries/neu/getonmobprop(tag) + . = ..() + if(tag) + switch(tag) + if("gen") + return list("shrink" = 0.6,"sx" = -6,"sy" = -1,"nx" = 8,"ny" = 0,"wx" = -4,"wy" = 0,"ex" = 2,"ey" = 1,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -38,"sturn" = 37,"wturn" = 32,"eturn" = -23,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("wielded") + return list("shrink" = 0.6,"sx" = 4,"sy" = -3,"nx" = -3,"ny" = -2,"wx" = -3,"wy" = -1,"ex" = 3,"ey" = -3,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 7,"sturn" = -7,"wturn" = 16,"eturn" = -22,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) + if("onbelt") + return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) + + +/obj/item/rogueweapon/mace/goden/neu + icon = 'icons/roguetown/weapons/custom_64.dmi' + slot_flags = FALSE +/obj/item/rogueweapon/mace/goden/neu/getonmobprop(tag) + . = ..() + if(tag) + switch(tag) + if("gen") + return list("shrink" = 0.6,"sx" = -6,"sy" = 1,"nx" = 7,"ny" = 3,"wx" = -2,"wy" = 1,"ex" = 1,"ey" = 1,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -28,"sturn" = 27,"wturn" = 30,"eturn" = -20,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("wielded") + return list("shrink" = 0.6,"sx" = 5,"sy" = -3,"nx" = -5,"ny" = -2,"wx" = -5,"wy" = -1,"ex" = 3,"ey" = -2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 7,"sturn" = -7,"wturn" = 16,"eturn" = -22,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) + if("onbelt") + return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) + + +/obj/item/rogueweapon/polearm/halberd/neu + icon = 'icons/roguetown/weapons/custom_64.dmi' + slot_flags = FALSE +/obj/item/rogueweapon/polearm/halberd/neu/getonmobprop(tag) + . = ..() + if(tag) + switch(tag) + if("gen") + return list("shrink" = 0.6,"sx" = -7,"sy" = 2,"nx" = 7,"ny" = 3,"wx" = -2,"wy" = 1,"ex" = 1,"ey" = 1,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -38,"sturn" = 37,"wturn" = 30,"eturn" = -30,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("wielded") + return list("shrink" = 0.6,"sx" = 5,"sy" = -3,"nx" = -5,"ny" = -2,"wx" = -5,"wy" = -1,"ex" = 3,"ey" = -2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 7,"sturn" = -7,"wturn" = 16,"eturn" = -22,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) + if("onbelt") + return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) + +/obj/item/rogueweapon/polearm/spear/billhook/neu + icon = 'icons/roguetown/weapons/custom_64.dmi' + slot_flags = FALSE + dropshrink = 0.9 +/obj/item/rogueweapon/polearm/spear/billhook/neu/getonmobprop(tag) + . = ..() + if(tag) + switch(tag) + if("gen") + return list("shrink" = 0.6,"sx" = -7,"sy" = 4,"nx" = 7,"ny" = 5,"wx" = -2,"wy" = 3,"ex" = 1,"ey" = 3,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -38,"sturn" = 37,"wturn" = 30,"eturn" = -30,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) + if("wielded") + return list("shrink" = 0.6,"sx" = 5,"sy" = -3,"nx" = -5,"ny" = -2,"wx" = -5,"wy" = -1,"ex" = 3,"ey" = -2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 7,"sturn" = -7,"wturn" = 16,"eturn" = -22,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) + +/obj/item/rogueweapon/polearm/woodstaff/neu + icon = 'icons/roguetown/weapons/custom_64.dmi' + slot_flags = FALSE + dropshrink = 0.9 + + + + +/mob/living/simple_animal/hostile/retaliate/rogue/spider/colony // colony spider + name = "hairy spider" + desc = "The forest canopies hides more than leaves...These creachers make honey from flowers and spin silk from their abdomen, when not consuming prey." + icon_state = "spider" + icon_living = "spider" + icon_dead = "spider-dead" + botched_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/spider = 1, + /obj/item/natural/silk = 1) + butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/spider = 2, + /obj/item/reagent_containers/food/snacks/rogue/honey = 1, + /obj/item/natural/silk = 2) + perfect_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/spider = 2, + /obj/item/reagent_containers/food/snacks/rogue/honey = 2, + /obj/item/natural/silk = 3) + + +// ============================================================== +/* .................. Various mapping aides ................... */ +/obj/item/clothing/suit/roguetown/armor/chainmail/hauberk/broken + desc = "A long shirt of maille, this one is made for a short man it seems." +/obj/item/clothing/suit/roguetown/armor/chainmail/hauberk/broken/Initialize() + . = ..() + obj_break() -/obj/structure/closet/crate/chest/neu_iron - name = "reinforced chest" - icon_state = "chestiron_neu" - base_icon_state = "chestiron_neu" +/obj/item/clothing/suit/roguetown/armor/chainmail/battered + desc = "A good quality haubergon, but weakened by many blows." + max_integrity = INTEGRITY_STANDARD -/obj/structure/closet/crate/chest/neu_fancy - name = "fancy chest" - icon_state = "chestfancy_neu" - base_icon_state = "chestfancy_neu" +/obj/structure/roguethrone/statues + icon = 'modular/Mapping/icons/96x96.dmi' -/obj/structure/closet/crate/chest/old_crate - name = "old crate" - base_icon_state = "woodchestalt" - icon_state = "woodchestalt" +/* .................. For premapped blood skipping timers, diseases etc ................... */ +/obj/effect/decal/cleanable/blood_neu + name = "blood" + desc = "" + icon = 'icons/effects/blood.dmi' + icon_state = "floor1" + alpha = 200 + nomouseover = TRUE + nomouseover = TRUE + var/wash_precent = 0 + COOLDOWN_DECLARE(wash_cooldown) -/obj/structure/closet/crate/drawer/random - icon_state = "drawer1" - base_icon_state = "drawer1" - pixel_y = 8 +/obj/effect/decal/cleanable/blood_neu/weather_act_on(weather_trait, severity) + if(weather_trait != PARTICLEWEATHER_RAIN || !COOLDOWN_FINISHED(src, wash_cooldown)) + return + wash_precent += min(10, severity / 4) + alpha = 255 *((100 - wash_precent) * 0.01) + if(wash_precent >= 100) + qdel(src) + COOLDOWN_START(src, wash_cooldown, 15 SECONDS) -/obj/structure/closet/crate/drawer/random/Initialize() +/obj/effect/decal/cleanable/blood_neu/Initialize(mapload) . = ..() - if(icon_state == "drawer1") - base_icon_state = "drawer[rand(1,4)]" - icon_state = "[base_icon_state]" - else - base_icon_state = "drawer1" - pixel_y = 8 - -/obj/structure/mineral_door/wood/deadbolt/shutter - name = "serving hatch" - desc = "Can be locked from the inside." - icon_state = "serving" - base_state = "serving" - max_integrity = 250 - over_state = "servingopen" - openSound = 'modular/Neu_Food/sound/blindsopen.ogg' - closeSound = 'modular/Neu_Food/sound/blindsclose.ogg' - dir = NORTH - locked = TRUE + pixel_x = rand(-5,5) + pixel_y = rand(5,5) + GLOB.weather_act_upon_list += src -/obj/structure/closet/crate/chest/wicker - name = "wicker basket" - desc = "Fibers interwoven to make a cheap storage bin." - base_icon_state = "wicker" - icon_state = "wicker" - open_sound = 'sound/items/book_open.ogg' - open_sound = 'sound/items/book_close.ogg' - close_sound = 'sound/items/book_close.ogg' - -/obj/structure/closet/crate/chest/neu - name = "sturdy oak chest" - icon_state = "chest_neu" - base_icon_state = "chest_neu" - -/obj/structure/closet/crate/chest/neu_iron - name = "reinforced chest" - icon_state = "chestiron_neu" - base_icon_state = "chestiron_neu" - -/obj/structure/closet/crate/chest/neu_fancy - name = "fancy chest" - icon_state = "chestfancy_neu" - base_icon_state = "chestfancy_neu" +/obj/effect/decal/cleanable/blood_neu/Destroy() + GLOB.weather_act_upon_list -= src + return ..() -/obj/structure/closet/crate/chest/old_crate - name = "old crate" - base_icon_state = "woodchestalt" - icon_state = "woodchestalt" +/obj/effect/decal/cleanable/blood_neu/random/Initialize(mapload) + . = ..() + icon_state = pick("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "splatter1", "splatter2", "splatter3", "splatter4", "splatter5", "splatter6", "gibl1", "gibl2", "gibl3", "gibl4", "gibl5") -/obj/structure/closet/crate/drawer/random - icon_state = "drawer1" - base_icon_state = "drawer1" - pixel_y = 8 +/obj/effect/decal/cleanable/blood_neu/tracks + icon_state = "tracks" -/obj/structure/closet/crate/drawer/random/Initialize() - . = ..() - if(icon_state == "drawer1") - base_icon_state = "drawer[rand(1,4)]" - icon_state = "[base_icon_state]" - else - base_icon_state = "drawer1" - pixel_y = 8 - -/obj/structure/mineral_door/wood/deadbolt/shutter - name = "serving hatch" - desc = "Can be locked from the inside." - icon_state = "serving" - base_state = "serving" - max_integrity = 250 - over_state = "servingopen" - openSound = 'modular/Neu_Food/sound/blindsopen.ogg' - closeSound = 'modular/Neu_Food/sound/blindsclose.ogg' - dir = NORTH - locked = TRUE -*/ diff --git a/modular/Mapping/icons/96x96.dmi b/modular/Mapping/icons/96x96.dmi index 0d6ffaf35b..654acbbe72 100644 Binary files a/modular/Mapping/icons/96x96.dmi and b/modular/Mapping/icons/96x96.dmi differ diff --git a/modular/Mapping/icons/decoration.dmi b/modular/Mapping/icons/decoration.dmi deleted file mode 100644 index 4a5b6c98fa..0000000000 Binary files a/modular/Mapping/icons/decoration.dmi and /dev/null differ diff --git a/modular/Neu_Farming/code/bin.dm b/modular/Neu_Farming/code/bin.dm index 33474a737f..6b814aa29c 100644 --- a/modular/Neu_Farming/code/bin.dm +++ b/modular/Neu_Farming/code/bin.dm @@ -18,10 +18,6 @@ blade_dulling = DULLING_BASHCHOP obj_flags = CAN_BE_HIT -/obj/item/roguebin/weather_trigger(W) - if(W==/datum/weather/rain) - START_PROCESSING(SSweather,src) - /obj/item/roguebin/Initialize() if(!base_state) create_reagents(600, DRAINABLE | AMOUNT_VISIBLE | REFILLABLE) @@ -148,6 +144,14 @@ return FALSE /obj/item/roguebin/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/cheap_dyes)) + playsound(src, "bubbles", 50, 1) + if(do_after(user,3 SECONDS, target = src)) + qdel(I) + user.visible_message("[user] adds dye to [src].") + new /obj/machinery/simple_dye_bin(src.loc) + qdel(src) + return if(!reagents || !reagents.maximum_volume) //trash return ..() if(istype(I, /obj/item/rogueweapon/tongs)) @@ -245,3 +249,6 @@ /obj/item/roguebin/trash/StorageBlock(obj/item/I, mob/user) return FALSE + +/obj/item/roguebin/alt + icon_state = "washbin2" diff --git a/modular/Neu_Farming/code/crafting_recipes.dm b/modular/Neu_Farming/code/crafting_recipes.dm deleted file mode 100644 index 20fbd53cdc..0000000000 --- a/modular/Neu_Farming/code/crafting_recipes.dm +++ /dev/null @@ -1,71 +0,0 @@ -/datum/crafting_recipe/roguetown/structure/composter - name = "composter" - result = /obj/structure/composter - reqs = list(/obj/item/grown/log/tree/small = 1) - craftdiff = 0 - time = 2 SECONDS - -/datum/crafting_recipe/roguetown/structure/plough - name = "plough" - result = /obj/structure/plough - reqs = list(/obj/item/grown/log/tree/small = 2, /obj/item/ingot/iron = 1) - skillcraft = /datum/skill/craft/carpentry - time = 4 SECONDS - -/datum/crafting_recipe/roguetown/woodthresher - name = "thresher" - result = list(/obj/item/rogueweapon/thresher) - reqs = list(/obj/item/grown/log/tree/small = 1, - /obj/item/rope = 1) - -/datum/crafting_recipe/roguetown/militarythresher - name = "military flail" - result = list(/obj/item/rogueweapon/thresher/military) - reqs = list(/obj/item/rogueweapon/thresher = 1, - /obj/item/ingot/iron = 1) - - - -/datum/crafting_recipe/roguetown/dryweed - name = "dry westleach leaf" - result = /obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed - reqs = list(/obj/item/reagent_containers/food/snacks/produce/rogue/pipeweed = 1) - structurecraft = /obj/structure/fluff/dryingrack - time = 2 SECONDS - verbage = "dry" - verbage_tp = "dries" - craftsound = null - skillcraft = null - -/datum/crafting_recipe/roguetown/sigdry - name = "westleach zig" - result = /obj/item/clothing/mask/cigarette/rollie/nicotine - reqs = list(/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed = 1, - /obj/item/paper = 1) - time = 10 SECONDS - verbage = "roll" - verbage_tp = "rolls" - craftdiff = 0 - - -//crafting recipes -/datum/crafting_recipe/roguetown/dryleaf - name = "dry swampweed" - result = /obj/item/reagent_containers/food/snacks/produce/rogue/swampweed_dried - reqs = list(/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed = 1) - structurecraft = /obj/structure/fluff/dryingrack - time = 2 SECONDS - verbage = "dry" - verbage_tp = "dries" - craftsound = null - skillcraft = null - -/datum/crafting_recipe/roguetown/sigsweet - name = "swampweed zig" - result = /obj/item/clothing/mask/cigarette/rollie/cannabis - reqs = list(/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed_dried = 1, - /obj/item/paper = 1) - time = 10 SECONDS - verbage = "roll" - verbage_tp = "rolls" - craftdiff = 0 diff --git a/modular/Neu_Farming/code/fermenting_barrel.dm b/modular/Neu_Farming/code/fermenting_barrel.dm index b1758ce243..ec73a5a21c 100644 --- a/modular/Neu_Farming/code/fermenting_barrel.dm +++ b/modular/Neu_Farming/code/fermenting_barrel.dm @@ -121,6 +121,9 @@ update_icon() +/obj/item/roguebin/water/gross + name = "wash bin" + desc = "A washbin filled with used water." /obj/item/roguebin/water/gross/Initialize() . = ..() reagents.add_reagent(/datum/reagent/water/gross,500) @@ -131,7 +134,3 @@ reagents.add_reagent(/datum/reagent/water,500) update_icon() -/obj/item/roguebin/water/gross/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/water/gross,500) - update_icon() diff --git a/modular/Neu_Farming/code/plant_def.dm b/modular/Neu_Farming/code/plant_def.dm index 25077cc469..eff57cc7aa 100644 --- a/modular/Neu_Farming/code/plant_def.dm +++ b/modular/Neu_Farming/code/plant_def.dm @@ -97,7 +97,7 @@ /datum/plant_def/pipeweed name = "westleach leaf" icon_state = "westleach" - produce_type = /obj/item/reagent_containers/food/snacks/produce/rogue/pipeweed + produce_type = /obj/item/reagent_containers/food/snacks/produce/westleach produce_amount_min = 3 produce_amount_max = 6 water_drain_rate = 0 @@ -105,7 +105,7 @@ /datum/plant_def/sweetleaf name = "swampweed" icon_state = "swampweed" - produce_type = /obj/item/reagent_containers/food/snacks/produce/rogue/swampweed + produce_type = /obj/item/reagent_containers/food/snacks/produce/swampweed produce_amount_min = 3 produce_amount_max = 5 water_drain_rate = 0 @@ -115,7 +115,7 @@ /datum/plant_def/berry name = "jacksberry bush" icon_state = "berry" - produce_type = /obj/item/reagent_containers/food/snacks/produce/berries/rogue + produce_type = /obj/item/reagent_containers/food/snacks/produce/jacksberry uproot_loot = list(/obj/item/grown/log/tree/stick) perennial = TRUE produce_amount_min = 3 @@ -125,7 +125,7 @@ /datum/plant_def/berry_poison name = "jacksberry bush" icon_state = "berry" - produce_type = /obj/item/reagent_containers/food/snacks/produce/berries/rogue/poison + produce_type = /obj/item/reagent_containers/food/snacks/produce/jacksberry/poison uproot_loot = list(/obj/item/grown/log/tree/stick) perennial = TRUE diff --git a/modular/Neu_Farming/code/produce.dm b/modular/Neu_Farming/code/produce.dm index eacb877e83..f09c849b27 100644 --- a/modular/Neu_Farming/code/produce.dm +++ b/modular/Neu_Farming/code/produce.dm @@ -147,7 +147,7 @@ if(equippedloc != H.loc) H.dropItemToGround(H.head) -/obj/item/reagent_containers/food/snacks/produce/berries/rogue +/obj/item/reagent_containers/food/snacks/produce/jacksberry seed = /obj/item/neuFarm/seed/berryrogue name = "jacksberries" desc = "Common berries found throughout Rockhill. A traveler's repast, or Dendor's wrath." @@ -158,13 +158,13 @@ dropshrink = 0.75 var/color_index = "good" can_distill = TRUE - distill_reagent = /datum/reagent/consumable/ethanol/beer/jackberrywine + distill_reagent = /datum/reagent/consumable/ethanol/beer/jacksberrywine rotprocess = SHELFLIFE_SHORT sellprice = 0 // spoil too quickly to export var/poisonous = FALSE possible_potion = "antidote" -/obj/item/reagent_containers/food/snacks/produce/berries/rogue/Initialize() +/obj/item/reagent_containers/food/snacks/produce/jacksberry/Initialize() if(GLOB.berrycolors[color_index]) filling_color = GLOB.berrycolors[color_index] else @@ -177,17 +177,22 @@ update_icon() ..() -/obj/item/reagent_containers/food/snacks/produce/berries/rogue/examine(mob/user) +/obj/item/reagent_containers/food/snacks/produce/jacksberry/examine(mob/living/carbon/user) var/farminglvl = user.mind?.get_skill_level(/datum/skill/labor/farming) . += ..() if(farminglvl >= 3 && poisonous == TRUE) . += "These berries appear to be poisonous." + if(user.mind.assigned_role == "Cook"&& poisonous == TRUE) + . += "These berries appear to be poisonous." + if(user.mind.assigned_role == "Master Chef"&& poisonous == TRUE) + . += "These berries are POISONOUS." + -/obj/item/reagent_containers/food/snacks/produce/berries/rogue/On_Consume(mob/living/eater) +/obj/item/reagent_containers/food/snacks/produce/jacksberry/On_Consume(mob/living/eater) ..() update_icon() -/obj/item/reagent_containers/food/snacks/produce/berries/rogue/update_icon() +/obj/item/reagent_containers/food/snacks/produce/jacksberry/update_icon() cut_overlays() var/used_state = "berriesc5" if(bitecount == 1) @@ -202,7 +207,7 @@ item_overlay.color = filling_color add_overlay(item_overlay) -/obj/item/reagent_containers/food/snacks/produce/berries/rogue/poison +/obj/item/reagent_containers/food/snacks/produce/jacksberry/poison seed = /obj/item/neuFarm/seed/poison_berries icon_state = "berries" tastes = list("berry" = 1) @@ -213,7 +218,7 @@ possible_potion = "poison" /* .................. Swamp weed ................... */ -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed +/obj/item/reagent_containers/food/snacks/produce/swampweed seed = /obj/item/neuFarm/seed/swampleaf name = "swampweed" desc = "A weed that can be dried and smoked to induce a relaxed state." @@ -221,7 +226,7 @@ filling_color = "#008000" bitesize_mod = 1 foodtype = VEGETABLES - list_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/berrypoison = 5) + list_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/berrypoison = 1) tastes = list("sweet" = 1,"bitterness" = 1) eat_effect = /datum/status_effect/debuff/badmeal rotprocess = SHELFLIFE_LONG @@ -229,7 +234,7 @@ dust_result = /obj/item/alch/swampdust sellprice = 0 // only dried has value -/obj/item/reagent_containers/food/snacks/produce/rogue/swampweed_dried +/obj/item/reagent_containers/food/snacks/produce/swampweed_dried seed = null name = "swampweed" desc = "A dried weed that can be smoked to induce a relaxed state." @@ -245,17 +250,17 @@ sellprice = 2 -/* .................. Pipe weed ................... */ -/obj/item/reagent_containers/food/snacks/produce/rogue/pipeweed - seed = /obj/item/neuFarm/seed/pipeweed +/* .................. Westleach leaf ................... */ +/obj/item/reagent_containers/food/snacks/produce/westleach + seed = /obj/item/neuFarm/seed/westleach name = "westleach leaf" - desc = "A common, strong-smelling leaf that is often dried and smoked." + desc = "A common, strong-smelling leaf that is often dried and smoked. Also known as pipeweed." icon_state = "westleach" filling_color = "#008000" bitesize_mod = 1 foodtype = VEGETABLES tastes = list("sweet" = 1,"bitterness" = 1) - list_reagents = list(/datum/reagent/drug/nicotine = 2, /datum/reagent/consumable/nutriment = 1, /datum/reagent/berrypoison = 5) + list_reagents = list(/datum/reagent/drug/nicotine = 2, /datum/reagent/consumable/nutriment = 1, /datum/reagent/berrypoison = 2) grind_results = list(/datum/reagent/drug/nicotine = 5) eat_effect = /datum/status_effect/debuff/badmeal rotprocess = SHELFLIFE_LONG @@ -263,9 +268,9 @@ dust_result = /obj/item/alch/tobaccodust sellprice = 0 // only dried has value -/obj/item/reagent_containers/food/snacks/produce/rogue/dry_pipeweed +/obj/item/reagent_containers/food/snacks/produce/dry_westleach seed = null - name = "westleach leaf" + name = "dried westleach leaf" desc = "A common, strong-smelling leaf dried for smoking." icon_state = "westleachd" dry = TRUE @@ -341,6 +346,7 @@ slices_num = 1 slice_path = /obj/item/reagent_containers/food/snacks/rogue/veg/potato_sliced cooked_type = /obj/item/reagent_containers/food/snacks/rogue/preserved/potato_baked + cooked_smell = /datum/pollutant/food/baked_potato eat_effect = null foodtype = VEGETABLES chopping_sound = TRUE @@ -398,6 +404,7 @@ dropshrink = 0.8 rotprocess = null fried_type = /obj/item/reagent_containers/food/snacks/rogue/roastseeds + cooked_smell = /datum/pollutant/food/roasted_seeds /* .................. Fyritius Flower ................... */ // some sort of funni fire flowers. Dunno just moving them here for consistency. diff --git a/modular/Neu_Farming/code/seeds.dm b/modular/Neu_Farming/code/seeds.dm index bc13cda5c6..0ca93fc974 100644 --- a/modular/Neu_Farming/code/seeds.dm +++ b/modular/Neu_Farming/code/seeds.dm @@ -78,7 +78,7 @@ seed_identity = "apple seeds" plant_def_type = /datum/plant_def/apple -/obj/item/neuFarm/seed/pipeweed +/obj/item/neuFarm/seed/westleach seed_identity = "westleach leaf seeds" plant_def_type = /datum/plant_def/pipeweed diff --git a/modular/Neu_Farming/code/soil.dm b/modular/Neu_Farming/code/soil.dm index 57649cc998..9c9d7c434b 100644 --- a/modular/Neu_Farming/code/soil.dm +++ b/modular/Neu_Farming/code/soil.dm @@ -49,7 +49,7 @@ if(!produce_ready) return apply_farming_fatigue(user, 4) -// add_sleep_experience(user, /datum/skill/labor/farming, user.STAINT * 2) sleepxp not a thing, get regular +// add_sleep_experience(user, /datum/skill/labor/farming, user.STAINT * 2) var/farming_skill = user.mind.get_skill_level(/datum/skill/labor/farming) var/chance_to_ruin = 50 - (farming_skill * 25) @@ -301,12 +301,19 @@ /obj/structure/soil/Initialize() START_PROCESSING(SSprocessing, src) + GLOB.weather_act_upon_list += src . = ..() /obj/structure/soil/Destroy() STOP_PROCESSING(SSprocessing, src) + GLOB.weather_act_upon_list -= src . = ..() +/obj/structure/soil/weather_act_on(weather_trait, severity) + if(weather_trait != PARTICLEWEATHER_RAIN) + return + water = min(MAX_PLANT_WATER, water + min(5, severity / 4)) + /obj/structure/soil/process() var/dt = 10 process_weeds(dt) diff --git a/modular/Neu_Farming/code/tools.dm b/modular/Neu_Farming/code/tools.dm index 6acbad5047..a0087f9a48 100644 --- a/modular/Neu_Farming/code/tools.dm +++ b/modular/Neu_Farming/code/tools.dm @@ -2,12 +2,11 @@ | Thresher | \-----------*/ -/obj/item/rogueweapon/thresher +/obj/item/rogueweapon/thresher/neu name = "thresher" desc = "Crushes grain, or skulls." icon_state = "thresher" icon = 'modular/Neu_Farming/icons/farmtools.dmi' -// icon = 'icons/roguetown/weapons/64.dmi' slot_flags = ITEM_SLOT_BACK sharpness = IS_BLUNT wlength = WLENGTH_LONG @@ -26,7 +25,7 @@ wdefense = 2 wlength = 66 -/obj/item/rogueweapon/thresher/military +/obj/item/rogueweapon/thresher/neu/military force = 12 force_wielded = 25 possible_item_intents = list(MACE_STRIKE) @@ -36,7 +35,7 @@ icon_state = "military" minstr = 7 smeltresult = /obj/item/ingot/iron - +/* to avoid duplication /datum/intent/flailthresh name = "thresh" icon_state = "inthresh" @@ -45,8 +44,8 @@ candodge = FALSE misscost = 0 no_attack = TRUE - -/obj/item/rogueweapon/thresher/getonmobprop(tag) +*/ +/obj/item/rogueweapon/thresher/neu/getonmobprop(tag) . = ..() if(tag) switch(tag) @@ -96,55 +95,28 @@ "eflip" = 0) if("onbelt") return list("shrink" = 0.4,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) - -/* -/obj/item/rogueweapon/thresher/getonmobprop(tag) - . = ..() - if(tag) - switch(tag) - if("gen") - return list("shrink" = 0.7,"sx" = -7,"sy" = 1,"nx" = 8,"ny" = 1,"wx" = -5,"wy" = 0,"ex" = 2,"ey" = 2,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = -38,"sturn" = 37,"wturn" = 32,"eturn" = -32,"nflip" = 0,"sflip" = 8,"wflip" = 8,"eflip" = 0) - if("wielded") - return list("shrink" = 0.7,"sx" = 5,"sy" = -3,"nx" = -5,"ny" = -2,"wx" = -4,"wy" = -2,"ex" = 5,"ey" = -3,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0,"nturn" = 7,"sturn" = -7,"wturn" = 16,"eturn" = -22,"nflip" = 8,"sflip" = 0,"wflip" = 8,"eflip" = 0) - if("onbelt") - return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) -*/ -/obj/item/rogueweapon/thresher/Initialize() - . = ..() - pixel_y = -16 - pixel_x = -16 - -/obj/item/rogueweapon/thresher/dropped() - . = ..() - pixel_y = -16 - pixel_x = -16 - -/obj/item/rogueweapon/thresher/equipped() - . = ..() - pixel_y = 0 - pixel_x = 0 - - -/obj/item/rogueweapon/thresher/afterattack(obj/target, mob/user, proximity) +/* commented since duped +/obj/item/rogueweapon/thresher/neu/afterattack(obj/target, mob/user, proximity) if(user.used_intent.type == /datum/intent/flailthresh) - if(isturf(target.loc)) - var/turf/T = target.loc - var/found = FALSE - for(var/obj/item/natural/chaff/C in T) - found = TRUE - C.thresh() - if(found) - playsound(loc,"plantcross", 90, FALSE) - playsound(loc,"smashlimb", 35, FALSE) - apply_farming_fatigue(user, 10) - user.visible_message("[user] threshes the stalks!", \ - "I thresh the stalks.") + if(!proximity) return + var/turf/T = target.loc + var/found = FALSE + for(var/obj/item/natural/chaff/C in T) + found = TRUE + C.thresh() + if(found) + playsound(loc,"plantcross", 90, FALSE) + playsound(loc,"smashlimb", 35, FALSE) + apply_farming_fatigue(user, 10) + user.visible_message("[user] threshes the stalks!", \ + "I thresh the stalks.") + return ..() - +*/ /* this is too goofy to keep sadly for now we return to infinithreshing -/obj/item/rogueweapon/thresher/afterattack(obj/target, mob/living/user = usr, proximity) +/obj/item/rogueweapon/thresher/neu/afterattack(obj/target, mob/living/user = usr, proximity) if(user.used_intent.type == /datum/intent/flailthresh) if(isturf(target.loc)) var/turf/T = target.loc @@ -164,7 +136,7 @@ ..() // Below is ok but plays sound once for every item so too loud -/obj/item/rogueweapon/thresher/afterattack(obj/target, mob/living/user = usr, proximity) +/obj/item/rogueweapon/thresher/neu/afterattack(obj/target, mob/living/user = usr, proximity) if(user.used_intent.type == /datum/intent/flailthresh) if(isturf(target.loc)) var/turf/T = target.loc @@ -187,14 +159,13 @@ | Sickle | \---------*/ -/obj/item/rogueweapon/sickle +/obj/item/rogueweapon/sickle/neu force = 10 possible_item_intents = list(DAGGER_CUT) name = "sickle" desc = "Rusted blade, worn handle, symbol of toil." icon_state = "sickle" icon = 'modular/Neu_Farming/icons/farmtools.dmi' -// icon = 'icons/roguetown/weapons/tools.dmi' sharpness = IS_SHARP wlength = 10 slot_flags = ITEM_SLOT_HIP @@ -204,7 +175,7 @@ smeltresult = /obj/item/ingot/iron associated_skill = /datum/skill/combat/knives -/obj/item/rogueweapon/sickle/getonmobprop(tag) +/obj/item/rogueweapon/sickle/neu/getonmobprop(tag) . = ..() if(tag) switch(tag) @@ -217,12 +188,11 @@ | Hoe | \------*/ -/obj/item/rogueweapon/hoe +/obj/item/rogueweapon/hoe/neu name = "hoe" desc = "" icon_state = "hoe" icon = 'modular/Neu_Farming/icons/farmtools.dmi' -// icon = 'icons/roguetown/weapons/tools.dmi' wlength = WLENGTH_LONG w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK @@ -232,7 +202,7 @@ drop_sound = 'sound/foley/dropsound/wooden_drop.ogg' smeltresult = /obj/item/ingot/iron possible_item_intents = list(/datum/intent/pick) - gripped_intents = list(TILL_INTENT,/datum/intent/pick,SPEAR_BASH) + gripped_intents = list(TILL_INTENT,/datum/intent/pick,POLEARM_BASH) associated_skill = /datum/skill/combat/polearms force = 5 @@ -242,7 +212,7 @@ -/obj/item/rogueweapon/hoe/getonmobprop(tag) +/obj/item/rogueweapon/hoe/neu/getonmobprop(tag) . = ..() if(tag) switch(tag) @@ -292,8 +262,8 @@ "eflip" = 0) if("onbelt") return list("shrink" = 0.6,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) - -/obj/item/rogueweapon/hoe/attack_turf(turf/T, mob/living/user) +/* to avoid conflict +/obj/item/rogueweapon/hoe/neu/attack_turf(turf/T, mob/living/user) if(user.used_intent.type == /datum/intent/till) user.changeNext_move(CLICK_CD_MELEE) if(istype(T, /turf/open/floor/rogue/grass)) @@ -323,26 +293,25 @@ noaa = TRUE candodge = FALSE misscost = 0 - +*/ /*------------\ | Pitchfork | \------------*/ -/obj/item/rogueweapon/pitchfork +/obj/item/rogueweapon/pitchfork/neu name = "pitchfork" desc = "Compost, chaff, hay, it matters not." icon_state = "pitchfork" icon = 'modular/Neu_Farming/icons/farmtools.dmi' -// icon = 'icons/roguetown/weapons/64.dmi' w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK blade_dulling = DULLING_BASHCHOP walking_stick = TRUE minstr = 6 - var/list/forked = list() +// var/list/forked = list() to avoid conflict drop_sound = 'sound/foley/dropsound/wooden_drop.ogg' - possible_item_intents = list(SPEAR_THRUST, SPEAR_BASH) - gripped_intents = list(DUMP_INTENT,SPEAR_BASH,SPEAR_THRUST) + possible_item_intents = list(POLEARM_THRUST, POLEARM_BASH) + gripped_intents = list(DUMP_INTENT,POLEARM_BASH,POLEARM_THRUST) smeltresult = /obj/item/ingot/iron associated_skill = /datum/skill/combat/polearms thrown_bclass = BCLASS_STAB @@ -353,7 +322,7 @@ wdefense = 2 wlength = WLENGTH_LONG -/obj/item/rogueweapon/pitchfork/getonmobprop(tag) +/obj/item/rogueweapon/pitchfork/neu/getonmobprop(tag) . = ..() if(tag) switch(tag) @@ -403,7 +372,7 @@ "eflip" = 1) if("onbelt") return list("shrink" = 0.5,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) - +/*to avoid conflict /datum/intent/pforkdump name = "scoop" icon_state = "inscoop" @@ -412,8 +381,8 @@ candodge = FALSE misscost = 0 no_attack = TRUE - -/obj/item/rogueweapon/pitchfork/afterattack(obj/target, mob/user, proximity) +*/ +/obj/item/rogueweapon/pitchfork/neu/afterattack(obj/target, mob/user, proximity) if((!proximity) || (!wielded)) return ..() testing("fuck") @@ -427,7 +396,7 @@ return ..() -/obj/item/rogueweapon/pitchfork/ungrip(mob/living/carbon/user, show_message = TRUE) +/obj/item/rogueweapon/pitchfork/neu/ungrip(mob/living/carbon/user, show_message = TRUE) if(forked.len) var/turf/T = get_turf(user) for(var/obj/item/I in forked) @@ -436,7 +405,7 @@ update_icon() ..() -/obj/item/rogueweapon/pitchfork/update_icon() +/obj/item/rogueweapon/pitchfork/neu/update_icon() if(forked.len) icon_state = "pitchforkstuff" else @@ -542,6 +511,28 @@ return list("shrink" = 0.3,"sx" = -2,"sy" = -5,"nx" = 4,"ny" = -5,"wx" = 0,"wy" = -5,"ex" = 2,"ey" = -5,"nturn" = 0,"sturn" = 0,"wturn" = 0,"eturn" = 0,"nflip" = 0,"sflip" = 0,"wflip" = 0,"eflip" = 0,"northabove" = 0,"southabove" = 1,"eastabove" = 1,"westabove" = 0) +/obj/item/rogueweapon/shovel/neu + force = 5 + force_wielded = 12 + possible_item_intents = list(/datum/intent/mace/strike/shovel) + gripped_intents = list(/datum/intent/shovelscoop, /datum/intent/mace/strike/shovel, /datum/intent/axe/chop) + name = "shovel" + desc = "" + icon_state = "shovel" + icon = 'modular/Neu_Farming/icons/farmtools.dmi' + sharpness = IS_BLUNT + dropshrink = 0.9 + wdefense = 1 + wlength = WLENGTH_LONG + w_class = WEIGHT_CLASS_BULKY + slot_flags = ITEM_SLOT_BACK + swingsound = list('sound/combat/wooshes/blunt/shovel_swing.ogg','sound/combat/wooshes/blunt/shovel_swing2.ogg') + drop_sound = 'sound/foley/dropsound/shovel_drop.ogg' +// var/obj/item/natural/dirtclod/heldclod + smeltresult = /obj/item/ingot/iron + associated_skill = /datum/skill/combat/polearms + max_blade_int = 50 + /obj/item/rogueweapon/sickle/kama possible_item_intents = list(/datum/intent/axe/cut,/datum/intent/axe/chop,MACE_STRIKE,/datum/intent/flailthresh) name = "kama" diff --git a/modular/Neu_Farming/icons/plough.dmi b/modular/Neu_Farming/icons/plough.dmi deleted file mode 100644 index f3d715facd..0000000000 Binary files a/modular/Neu_Farming/icons/plough.dmi and /dev/null differ diff --git a/modular/Neu_Food/code/NeuFood.dm b/modular/Neu_Food/code/NeuFood.dm index 816eda8743..0a25d137da 100644 --- a/modular/Neu_Food/code/NeuFood.dm +++ b/modular/Neu_Food/code/NeuFood.dm @@ -1,7 +1,7 @@ /* * * * * * * * * * * ** * * -Cooking based on slapcrafting * NeuFood * -Uses defines to track nutrition - * * -Meant to replace menu crafting completely for foods + * Made by NPC1314 * -Meant to replace menu crafting completely for foods * * * * * * * * * * * * * **/ @@ -39,15 +39,6 @@ list_reagents = list(/datum/reagent/consumable/nutriment = 3) rotprocess = SHELFLIFE_EXTREME -/obj/item/reagent_containers/food/snacks/proc/changefood(path, mob/living/eater) - if(!path || !eater) - return - var/turf/T = get_turf(eater) - if(eater.dropItemToGround(src)) - qdel(src) - var/obj/item/I = new path(T) - eater.put_in_active_hand(I) - /obj/effect/decal/cleanable/food/mess // decal applied when throwing minced meat for example name = "mess" desc = "" @@ -55,16 +46,6 @@ icon_state = "tomato_floor1" random_icon_states = list("tomato_floor1", "tomato_floor2", "tomato_floor3") -/obj/item/reagent_containers/food/snacks/attackby(obj/item/W, mob/user, params) - if(user.used_intent.blade_class == slice_bclass && W.wlength == WLENGTH_SHORT) - if(slice_bclass == BCLASS_CHOP) - user.visible_message("[user] chops [src]!") - slice(W, user) - return 1 - else if(slice(W, user)) - return 1 - ..() - /obj/effect/decal/cleanable/food/mess/soup color = "#496538" alpha = 200 @@ -148,12 +129,6 @@ force = 0 w_class = WEIGHT_CLASS_TINY -/obj/item/kitchen/rollingpin - icon = 'modular/Neu_Food/icons/cooking.dmi' - lefthand_file = 'modular/Neu_Food/icons/food_lefthand.dmi' - righthand_file = 'modular/Neu_Food/icons/food_righthand.dmi' - experimental_inhand = FALSE - /obj/item/reagent_containers/glass/bowl name = "wooden bowl" desc = "It is the empty space that makes the bowl useful." @@ -530,189 +505,26 @@ | Meals on platters | \------------------*/ +/* .................. Food platter ................... */ /obj/item/cooking/platter/attackby(obj/item/I, mob/user, params) var/found_table = locate(/obj/structure/table) in (loc) - if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/meat/poultry/baked)) - if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) - if(do_after(user,2 SECONDS, target = src)) - new /obj/item/reagent_containers/food/snacks/rogue/meat/poultry/baked/plated(loc) - qdel(I) - qdel(src) - else - to_chat(user, "You need to put [src] on a table to work on it.") - if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/meat/poultry/baked/spiced)) - if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) - if(do_after(user,2 SECONDS, target = src)) - new /obj/item/reagent_containers/food/snacks/rogue/meat/poultry/baked/plated/spiced(loc) - qdel(I) - qdel(src) - else - to_chat(user, "You need to put [src] on a table to work on it.") - if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/peppersteak)) - if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) - if(do_after(user,2 SECONDS, target = src)) - new /obj/item/reagent_containers/food/snacks/rogue/peppersteak/plated(loc) - qdel(I) - qdel(src) - else - to_chat(user, "You need to put [src] on a table to work on it.") - if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/onionsteak)) - if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) - if(do_after(user,2 SECONDS, target = src)) - new /obj/item/reagent_containers/food/snacks/rogue/onionsteak/plated(loc) - qdel(I) - qdel(src) - else - to_chat(user, "You need to put [src] on a table to work on it.") - if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/friedegg/tiberian)) - if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) - if(do_after(user,2 SECONDS, target = src)) - new /obj/item/reagent_containers/food/snacks/rogue/friedegg/tiberian/plated(loc) - qdel(I) - qdel(src) - else - to_chat(user, "You need to put [src] on a table to work on it.") - if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/friedrat)) - if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) - if(do_after(user,2 SECONDS, target = src)) - new /obj/item/reagent_containers/food/snacks/rogue/friedrat/plated(loc) - qdel(I) - qdel(src) - else - to_chat(user, "You need to put [src] on a table to work on it.") - if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/hcakeslice)) - if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) - if(do_after(user,2 SECONDS, target = src)) - new /obj/item/reagent_containers/food/snacks/rogue/hcakeslice/plated(loc) - qdel(I) - qdel(src) - else - to_chat(user, "You need to put [src] on a table to work on it.") - if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/ccakeslice)) - if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) - if(do_after(user,2 SECONDS, target = src)) - new /obj/item/reagent_containers/food/snacks/rogue/ccakeslice/plated(loc) - qdel(I) - qdel(src) - else - to_chat(user, "You need to put [src] on a table to work on it.") - if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/bun_grenz)) - if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) - if(do_after(user,2 SECONDS, target = src)) - new /obj/item/reagent_containers/food/snacks/rogue/bun_grenz/plated(loc) - qdel(I) - qdel(src) - else - to_chat(user, "You need to put [src] on a table to work on it.") - if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/fryfish/carp)) - if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) - if(do_after(user,2 SECONDS, target = src)) - new /obj/item/reagent_containers/food/snacks/rogue/fryfish/carp/plated(loc) - qdel(I) - qdel(src) - else - to_chat(user, "You need to put [src] on a table to work on it.") - if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/fryfish/clownfish)) - if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) - if(do_after(user,2 SECONDS, target = src)) - new /obj/item/reagent_containers/food/snacks/rogue/fryfish/clownfish/plated(loc) - qdel(I) - qdel(src) - else - to_chat(user, "You need to put [src] on a table to work on it.") - if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/fryfish/angler)) - if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) - if(do_after(user,2 SECONDS, target = src)) - new /obj/item/reagent_containers/food/snacks/rogue/fryfish/angler/plated(loc) - qdel(I) - qdel(src) - else - to_chat(user, "You need to put [src] on a table to work on it.") - if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/fryfish/eel)) - if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) - if(do_after(user,2 SECONDS, target = src)) - new /obj/item/reagent_containers/food/snacks/rogue/fryfish/eel/plated(loc) - qdel(I) - qdel(src) - else - to_chat(user, "You need to put [src] on a table to work on it.") - if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/wienercabbage)) - if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) - if(do_after(user,2 SECONDS, target = src)) - new /obj/item/reagent_containers/food/snacks/rogue/wienercabbage/plated(loc) - qdel(I) - qdel(src) - else - to_chat(user, "You need to put [src] on a table to work on it.") - if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/wienerpotato)) - if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) - if(do_after(user,2 SECONDS, target = src)) - new /obj/item/reagent_containers/food/snacks/rogue/wienerpotato/plated(loc) - qdel(I) - qdel(src) - else - to_chat(user, "You need to put [src] on a table to work on it.") - if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/wieneronions)) - if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) - if(do_after(user,2 SECONDS, target = src)) - new /obj/item/reagent_containers/food/snacks/rogue/wieneronions/plated(loc) - qdel(I) - qdel(src) - else - to_chat(user, "You need to put [src] on a table to work on it.") - if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/wienerpotatonions)) - if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) - if(do_after(user,2 SECONDS, target = src)) - new /obj/item/reagent_containers/food/snacks/rogue/wienerpotatonions/plated(loc) - qdel(I) - qdel(src) - else - to_chat(user, "You need to put [src] on a table to work on it.") - if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/frybirdtato)) - if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) - if(do_after(user,2 SECONDS, target = src)) - new /obj/item/reagent_containers/food/snacks/rogue/frybirdtato/plated(loc) - qdel(I) - qdel(src) - else - to_chat(user, "You need to put [src] on a table to work on it.") - if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/royaltruffles)) - if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) - if(do_after(user,2 SECONDS, target = src)) - new /obj/item/reagent_containers/food/snacks/rogue/royaltruffles/plated(loc) - qdel(I) - qdel(src) - else - to_chat(user, "You need to put [src] on a table to work on it.") - if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/royaltruffles_poisoned)) + if(findtext("[I.type]", "/plated")) //All plated food items have /plated at end of path + to_chat(user, span_warning("[I] in your hand appears to already be plated.")) + return + if(istype(I, /obj/item/reagent_containers/food/snacks)) + var/obj/item/reagent_containers/food/snacks/S = I if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) - if(do_after(user,2 SECONDS, target = src)) - new /obj/item/reagent_containers/food/snacks/rogue/royaltruffles_poisoned/plated(loc) - qdel(I) - qdel(src) + if (S.plateable == TRUE) + playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) + if(do_after(user,2 SECONDS, target = src)) + var/path = text2path("[S.type]/plated") + new path(loc) + qdel(I) + qdel(src) + else + to_chat(user, span_warning("[S] cannot be plated.")) else - to_chat(user, "You need to put [src] on a table to work on it.") - + to_chat(user, span_warning("You need to put [src] on a table to work on it.")) else return ..() diff --git a/modular/Neu_Food/code/cooked/NeuFood_meals.dm b/modular/Neu_Food/code/cooked/NeuFood_meals.dm index e84843dbd2..2f672d2db9 100644 --- a/modular/Neu_Food/code/cooked/NeuFood_meals.dm +++ b/modular/Neu_Food/code/cooked/NeuFood_meals.dm @@ -18,6 +18,7 @@ warming = 5 MINUTES rotprocess = SHELFLIFE_DECENT eat_effect = /datum/status_effect/buff/foodbuff + plateable = TRUE drop_sound = 'sound/foley/dropsound/gen_drop.ogg' /obj/item/reagent_containers/food/snacks/rogue/peppersteak/plated icon_state = "peppersteak_plated" @@ -42,6 +43,7 @@ warming = 5 MINUTES rotprocess = SHELFLIFE_DECENT eat_effect = /datum/status_effect/buff/foodbuff + plateable = TRUE drop_sound = 'sound/foley/dropsound/gen_drop.ogg' /obj/item/reagent_containers/food/snacks/rogue/onionsteak/plated icon_state = "onionsteak_plated" @@ -70,6 +72,7 @@ foodtype = VEGETABLES | MEAT warming = 3 MINUTES rotprocess = SHELFLIFE_LONG + plateable = TRUE eat_effect = /datum/status_effect/buff/foodbuff /obj/item/reagent_containers/food/snacks/rogue/wienercabbage/plated icon_state = "wienercabbage_plated" @@ -93,6 +96,7 @@ foodtype = VEGETABLES | MEAT warming = 3 MINUTES rotprocess = SHELFLIFE_LONG + plateable = TRUE eat_effect = /datum/status_effect/buff/foodbuff /obj/item/reagent_containers/food/snacks/rogue/wienerpotato/attackby(obj/item/I, mob/user, params) var/found_table = locate(/obj/structure/table) in (loc) @@ -143,6 +147,7 @@ foodtype = VEGETABLES | MEAT warming = 3 MINUTES rotprocess = SHELFLIFE_LONG + plateable = TRUE eat_effect = /datum/status_effect/buff/foodbuff /obj/item/reagent_containers/food/snacks/rogue/wieneronions/attackby(obj/item/I, mob/user, params) var/found_table = locate(/obj/structure/table) in (loc) @@ -192,6 +197,7 @@ foodtype = VEGETABLES | MEAT warming = 3 MINUTES rotprocess = SHELFLIFE_DECENT + plateable = TRUE eat_effect = /datum/status_effect/buff/foodbuff /obj/item/reagent_containers/food/snacks/rogue/wienerpotatonions/plated icon_state = "wpotonion_plated" @@ -218,6 +224,7 @@ desc = "Fried cackleberries on a bed of half-melted cheese, a dish from distant lands." icon_state = "omelette" eat_effect = /datum/status_effect/buff/foodbuff + plateable = TRUE rotprocess = SHELFLIFE_DECENT /obj/item/reagent_containers/food/snacks/rogue/friedegg/tiberian/plated icon_state = "omelette_plated" @@ -295,6 +302,7 @@ tastes = list("tasty birdmeat" = 1) cooked_type = null bonus_reagents = list(/datum/reagent/consumable/nutriment = MEAL_MEAGRE) + plateable = TRUE rotprocess = SHELFLIFE_DECENT /obj/item/reagent_containers/food/snacks/rogue/meat/poultry/baked/attackby(obj/item/I, mob/user, params) var/obj/item/reagent_containers/peppermill/mill = I @@ -351,6 +359,7 @@ foodtype = VEGETABLES | MEAT warming = 3 MINUTES rotprocess = SHELFLIFE_DECENT + plateable = TRUE eat_effect = /datum/status_effect/buff/foodbuff /obj/item/reagent_containers/food/snacks/rogue/frybirdtato/plated icon_state = "frybirdtato_plated" @@ -379,6 +388,7 @@ foodtype = VEGETABLES | MEAT warming = 3 MINUTES rotprocess = SHELFLIFE_LONG + plateable = TRUE eat_effect = /datum/status_effect/buff/foodbuff /obj/item/reagent_containers/food/snacks/rogue/royaltruffles/plated icon_state = "royaltruffles_plated" @@ -401,6 +411,7 @@ foodtype = VEGETABLES | MEAT warming = 3 MINUTES rotprocess = SHELFLIFE_LONG + plateable = TRUE eat_effect = /datum/status_effect/buff/foodbuff /obj/item/reagent_containers/food/snacks/rogue/royaltruffles_poisoned/plated icon_state = "royaltruffles_plated" diff --git a/modular/Neu_Food/code/cooked/NeuFood_pies.dm b/modular/Neu_Food/code/cooked/NeuFood_pies.dm index 5974eeba4b..f6654b646e 100644 --- a/modular/Neu_Food/code/cooked/NeuFood_pies.dm +++ b/modular/Neu_Food/code/cooked/NeuFood_pies.dm @@ -20,7 +20,7 @@ var/meaty var/potpie var/berrypie - var/poisoning + var/poisoning /obj/item/reagent_containers/food/snacks/rogue/foodbase/piebottom/update_icon() . = ..() @@ -79,7 +79,7 @@ /obj/item/reagent_containers/food/snacks/rogue/foodbase/piebottom/attackby(obj/item/I, mob/user, params) if(user.mind) short_cooktime = (50 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*5)) - long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) + long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/meat/mince/fish)) if (process_step > 4) return @@ -252,7 +252,7 @@ qdel(I) return - if(istype(I, /obj/item/reagent_containers/food/snacks/produce/berries/rogue/poison)) + if(istype(I, /obj/item/reagent_containers/food/snacks/produce/jacksberry/poison)) if (process_step > 4) return playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 30, TRUE, -1) @@ -261,7 +261,7 @@ name = "unfinished berrypie" process_step += 1 berrypie = TRUE - poisoning = TRUE + poisoning = TRUE user.mind.adjust_experience(/datum/skill/craft/cooking, SIMPLE_COOKING_XPGAIN, FALSE) update_icon() qdel(I) @@ -269,19 +269,19 @@ if(berrypie && process_step == 2 && do_after(user,short_cooktime, target = src)) to_chat(user, "Adding filling to the applepie. Needs more.") process_step += 1 - poisoning = TRUE + poisoning = TRUE update_icon() qdel(I) return if(berrypie && process_step == 3 && do_after(user,short_cooktime, target = src)) to_chat(user, "Filling the applepie to the brim. Still lacks a pie roof.") process_step += 1 - poisoning = TRUE + poisoning = TRUE update_icon() qdel(I) - return - - else if(istype(I, /obj/item/reagent_containers/food/snacks/produce/berries/rogue)) + return + + else if(istype(I, /obj/item/reagent_containers/food/snacks/produce/jacksberry)) if (process_step > 4) return playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 30, TRUE, -1) @@ -305,7 +305,7 @@ process_step += 1 update_icon() qdel(I) - return + return if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/piedough)) playsound(get_turf(user), 'sound/foley/dropsound/gen_drop.ogg', 30, TRUE, -1) @@ -313,6 +313,7 @@ name = "uncooked fish pie" icon_state = "fishpie_raw" cooked_type = /obj/item/reagent_containers/food/snacks/rogue/pie/cooked/meat/fish + cooked_smell = /datum/pollutant/food/fish_pie filling_color = "#d44197" process_step += 1 user.mind.adjust_experience(/datum/skill/craft/cooking, SIMPLE_COOKING_XPGAIN, FALSE) @@ -322,6 +323,7 @@ name = "uncooked meat pie" icon_state = "meatpie_raw" cooked_type = /obj/item/reagent_containers/food/snacks/rogue/pie/cooked/meat/meat + cooked_smell = /datum/pollutant/food/meat_pie filling_color = "#b43628" process_step += 1 user.mind.adjust_experience(/datum/skill/craft/cooking, SIMPLE_COOKING_XPGAIN, FALSE) @@ -331,6 +333,7 @@ name = "uncooked pot pie" filling_color = "#755430" cooked_type = /obj/item/reagent_containers/food/snacks/rogue/pie/cooked/pot + cooked_smell = /datum/pollutant/food/pot_pie process_step += 1 user.mind.adjust_experience(/datum/skill/craft/cooking, SIMPLE_COOKING_XPGAIN, FALSE) update_icon() @@ -338,6 +341,7 @@ if(applepie && process_step == 4 && do_after(user,short_cooktime, target = src)) name = "uncooked applepie" cooked_type = /obj/item/reagent_containers/food/snacks/rogue/pie/cooked/apple + cooked_smell = /datum/pollutant/food/apple_pie process_step += 1 user.mind.adjust_experience(/datum/skill/craft/cooking, SIMPLE_COOKING_XPGAIN, FALSE) update_icon() @@ -346,6 +350,7 @@ name = "uncooked berrypie" filling_color = "#4a62cf" cooked_type = /obj/item/reagent_containers/food/snacks/rogue/pie/cooked/berry + cooked_smell = /datum/pollutant/food/berry_pie process_step += 1 user.mind.adjust_experience(/datum/skill/craft/cooking, SIMPLE_COOKING_XPGAIN, FALSE) update_icon() @@ -354,6 +359,7 @@ name = "uncooked berrypie" filling_color = "#4a62cf" cooked_type = /obj/item/reagent_containers/food/snacks/rogue/pie/cooked/poison + cooked_smell = /datum/pollutant/food/berry_pie process_step += 1 user.mind.adjust_experience(/datum/skill/craft/cooking, SIMPLE_COOKING_XPGAIN, FALSE) update_icon() @@ -371,7 +377,7 @@ /obj/item/reagent_containers/food/snacks/rogue/pie name = "pie" desc = "" - color = "#e7e2df" + color = "#e7e2df" dropshrink = 0.8 var/stunning = FALSE @@ -500,6 +506,7 @@ icon_state = "handpie_raw" cooked_type = /obj/item/reagent_containers/food/snacks/rogue/handpie fried_type = /obj/item/reagent_containers/food/snacks/rogue/handpie + cooked_smell = /datum/pollutant/food/pie_base w_class = WEIGHT_CLASS_NORMAL dropshrink = 0.8 @@ -551,4 +558,4 @@ icon_state = "handpie[bitecount]" if(bitecount == 1) rotprocess = SHELFLIFE_DECENT - addtimer(CALLBACK(src, PROC_REF(begin_rotting)), 20, TIMER_CLIENT_TIME) // + addtimer(CALLBACK(src, PROC_REF(begin_rotting)), 20, TIMER_CLIENT_TIME) // diff --git a/modular/Neu_Food/code/raw/NeuFood_dough.dm b/modular/Neu_Food/code/raw/NeuFood_dough.dm index d84e49e4b2..2840d9a896 100644 --- a/modular/Neu_Food/code/raw/NeuFood_dough.dm +++ b/modular/Neu_Food/code/raw/NeuFood_dough.dm @@ -21,7 +21,7 @@ var/found_table = locate(/obj/structure/table) in (loc) if(user.mind) short_cooktime = (50 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*5)) - long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) + long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) if(istype(I, /obj/item/reagent_containers/powder/flour)) if(isturf(loc)&& (found_table)) playsound(get_turf(user), 'modular/Neu_Food/sound/kneading.ogg', 100, TRUE, -1) @@ -34,7 +34,7 @@ else to_chat(user, "You need to put [src] on a table to work it.") else - return ..() + return ..() /obj/item/reagent_containers/food/snacks/rogue/dough name = "dough" @@ -44,14 +44,15 @@ slice_batch = TRUE slice_path = /obj/item/reagent_containers/food/snacks/rogue/doughslice cooked_type = /obj/item/reagent_containers/food/snacks/rogue/bread + cooked_smell = /datum/pollutant/food/bread w_class = WEIGHT_CLASS_NORMAL rotprocess = SHELFLIFE_LONG - slice_sound = TRUE + slice_sound = TRUE /obj/item/reagent_containers/food/snacks/rogue/dough/attackby(obj/item/I, mob/user, params) var/found_table = locate(/obj/structure/table) in (loc) if(user.mind) short_cooktime = (50 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*5)) - long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) + long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) if(istype(I, /obj/item/reagent_containers/food/snacks/butterslice)) if(isturf(loc)&& (found_table)) playsound(get_turf(user), 'modular/Neu_Food/sound/kneading_alt.ogg', 90, TRUE, -1) @@ -63,7 +64,7 @@ qdel(src) else to_chat(user, span_warning("Put [src] on a table before working it!")) - if(istype(I, /obj/item/kitchen/rollingpin)) + if(istype(I, /obj/item/rogueweapon/mace/woodclub/rollingpin)) if(isturf(loc)&& (found_table)) playsound(get_turf(user), 'modular/Neu_Food/sound/rollingpin.ogg', 100, TRUE, -1) to_chat(user, span_notice("Rolling [src] into cracker dough.")) @@ -95,7 +96,7 @@ else to_chat(user, span_warning("Put [src] on a table before working it!")) else - return ..() + return ..() /* ................. Smalldough ................... */ /obj/item/reagent_containers/food/snacks/rogue/doughslice @@ -103,6 +104,7 @@ icon_state = "doughslice" slices_num = 0 cooked_type = /obj/item/reagent_containers/food/snacks/rogue/bun + cooked_smell = /datum/pollutant/food/bun w_class = WEIGHT_CLASS_NORMAL tastes = list("dough" = 1) rotprocess = SHELFLIFE_LONG @@ -110,7 +112,7 @@ var/found_table = locate(/obj/structure/table) in (loc) if(user.mind) short_cooktime = (50 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*5)) - long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) + long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/cheese/gote)) if(isturf(loc)&& (found_table)) playsound(get_turf(user), 'modular/Neu_Food/sound/kneading_alt.ogg', 90, TRUE, -1) @@ -163,13 +165,13 @@ slice_batch = TRUE slice_path = /obj/item/reagent_containers/food/snacks/rogue/butterdoughslice w_class = WEIGHT_CLASS_NORMAL - slice_sound = TRUE + slice_sound = TRUE rotprocess = SHELFLIFE_LONG /obj/item/reagent_containers/food/snacks/rogue/butterdough/attackby(obj/item/I, mob/user, params) var/found_table = locate(/obj/structure/table) in (loc) if(user.mind) short_cooktime = (50 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*5)) - long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) + long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) if(istype(I, /obj/item/reagent_containers/food/snacks/egg)) if(isturf(loc)&& (found_table)) playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) @@ -194,6 +196,7 @@ slices_num = 0 fried_type = /obj/item/reagent_containers/food/snacks/rogue/frybread cooked_type = /obj/item/reagent_containers/food/snacks/rogue/pastry + cooked_smell = /datum/pollutant/food/pastry w_class = WEIGHT_CLASS_NORMAL rotprocess = SHELFLIFE_LONG // Dough + rolling pin on table = flat dough. RT got some similar proc for this. @@ -201,10 +204,10 @@ var/found_table = locate(/obj/structure/table) in (loc) if(user.mind) short_cooktime = (50 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*5)) - long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) - if(istype(I, /obj/item/kitchen/rollingpin)) + long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) + if(istype(I, /obj/item/rogueweapon/mace/woodclub/rollingpin)) if(isturf(loc)&& (found_table)) - playsound(get_turf(user), 'modular/Neu_Food/sound/rollingpin.ogg', 100, TRUE, -1) + playsound(get_turf(user), 'modular/Neu_Food/sound/rollingpin.ogg', 100, TRUE, -1) to_chat(user, "Flattening [src]...") if(do_after(user,short_cooktime, target = src)) new /obj/item/reagent_containers/food/snacks/rogue/piedough(loc) @@ -257,12 +260,13 @@ desc = "The beginning of greater things to come." icon_state = "piedough" cooked_type = /obj/item/reagent_containers/food/snacks/rogue/foodbase/piebottom + cooked_smell = /datum/pollutant/food/pie_base w_class = WEIGHT_CLASS_NORMAL rotprocess = SHELFLIFE_LONG /obj/item/reagent_containers/food/snacks/rogue/piedough/attackby(obj/item/I, mob/user, params) if(user.mind) short_cooktime = (50 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*5)) - long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) + long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/truffles)) playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 50, TRUE, -1) to_chat(user, "Making a handpie...") @@ -281,7 +285,7 @@ user.mind.adjust_experience(/datum/skill/craft/cooking, SIMPLE_COOKING_XPGAIN, FALSE) qdel(I) qdel(src) - if(istype(I, /obj/item/reagent_containers/food/snacks/produce/berries/rogue/poison)) + if(istype(I, /obj/item/reagent_containers/food/snacks/produce/jacksberry/poison)) playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 50, TRUE, -1) to_chat(user, "Making a handpie...") if(do_after(user,short_cooktime, target = src)) @@ -326,7 +330,7 @@ user.mind.adjust_experience(/datum/skill/craft/cooking, SIMPLE_COOKING_XPGAIN, FALSE) qdel(I) qdel(src) - else if(istype(I, /obj/item/reagent_containers/food/snacks/produce/berries/rogue)) + else if(istype(I, /obj/item/reagent_containers/food/snacks/produce/jacksberry)) playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 50, TRUE, -1) to_chat(user, "Making a handpie...") if(do_after(user,short_cooktime, target = src)) @@ -389,7 +393,7 @@ w_class = WEIGHT_CLASS_NORMAL tastes = list("bread" = 1) slice_batch = FALSE - slice_sound = TRUE + slice_sound = TRUE rotprocess = SHELFLIFE_EXTREME /obj/item/reagent_containers/food/snacks/rogue/bread/update_icon() @@ -419,6 +423,7 @@ icon_state = "loaf_slice" w_class = WEIGHT_CLASS_NORMAL cooked_type = /obj/item/reagent_containers/food/snacks/rogue/breadslice/toast + cooked_smell = /datum/pollutant/food/toast bitesize = 2 rotprocess = SHELFLIFE_LONG dropshrink = 0.8 @@ -426,7 +431,7 @@ /obj/item/reagent_containers/food/snacks/rogue/breadslice/attackby(obj/item/I, mob/user, params) if(user.mind) short_cooktime = (50 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*5)) - long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) + long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/meat/salami/slice)) playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 50, TRUE, -1) if(do_after(user,short_cooktime, target = src)) @@ -469,7 +474,7 @@ /obj/item/reagent_containers/food/snacks/rogue/breadslice/toast/attackby(obj/item/I, mob/user, params) if(user.mind) short_cooktime = (50 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*5)) - long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) + long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) if(istype(I, /obj/item/reagent_containers/food/snacks/butterslice)) playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 50, TRUE, -1) if(do_after(user,short_cooktime, target = src)) @@ -526,7 +531,7 @@ var/found_table = locate(/obj/structure/table) in (loc) if(user.mind) short_cooktime = (50 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*5)) - long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) + long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/raisins)) if(isturf(loc)&& (found_table)) playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) @@ -539,7 +544,7 @@ else to_chat(user, span_warning("Put [src] on a table before working it!")) else - return ..() + return ..() /obj/item/reagent_containers/food/snacks/rogue/rbreaduncooked name = "loaf of raisins" @@ -560,7 +565,7 @@ w_class = WEIGHT_CLASS_NORMAL tastes = list("bread" = 1,"dried fruit" = 1) slice_batch = FALSE - slice_sound = TRUE + slice_sound = TRUE rotprocess = SHELFLIFE_EXTREME eat_effect = /datum/status_effect/buff/foodbuff @@ -607,7 +612,7 @@ var/found_table = locate(/obj/structure/table) in (loc) if(user.mind) short_cooktime = (50 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*5)) - long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) + long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/raisins)) if(isturf(loc)&& (found_table)) playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) @@ -620,7 +625,7 @@ else to_chat(user, span_warning("Put [src] on a table before working it!")) else - return ..() + return ..() /obj/item/reagent_containers/food/snacks/rogue/rbreaduncooked_poison name = "loaf of raisins" @@ -641,7 +646,7 @@ w_class = WEIGHT_CLASS_NORMAL tastes = list("bread" = 1,"dried fruit" = 1) slice_batch = FALSE - slice_sound = TRUE + slice_sound = TRUE rotprocess = SHELFLIFE_EXTREME eat_effect = /datum/status_effect/buff/foodbuff @@ -695,7 +700,7 @@ /obj/item/reagent_containers/food/snacks/rogue/bun/attackby(obj/item/I, mob/user, params) if(user.mind) short_cooktime = (50 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*5)) - long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) + long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/meat/sausage/cooked)) playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 50, TRUE, -1) to_chat(user, "Pushing the wiener through the bun...") @@ -716,6 +721,7 @@ icon_state = "cheesebun_raw" color = "#ecce61" cooked_type = /obj/item/reagent_containers/food/snacks/rogue/cheesebun + cooked_smell = /datum/pollutant/food/cheese_bun list_reagents = list(/datum/reagent/consumable/nutriment = 4) w_class = WEIGHT_CLASS_NORMAL foodtype = GRAIN | DAIRY @@ -766,6 +772,7 @@ icon_state = "biscuit_raw" color = "#ecce61" cooked_type = /obj/item/reagent_containers/food/snacks/rogue/biscuit + cooked_smell = /datum/pollutant/food/biscuit w_class = WEIGHT_CLASS_NORMAL eat_effect = null rotprocess = SHELFLIFE_EXTREME @@ -786,6 +793,7 @@ icon_state = "biscuit_raw" color = "#ecce61" cooked_type = /obj/item/reagent_containers/food/snacks/rogue/biscuit_poison + cooked_smell = /datum/pollutant/food/biscuit w_class = WEIGHT_CLASS_NORMAL eat_effect = null rotprocess = SHELFLIFE_EXTREME @@ -805,6 +813,7 @@ name = "uncooked prezzel" icon_state = "prezzel_raw" cooked_type = /obj/item/reagent_containers/food/snacks/rogue/prezzel + cooked_smell = /datum/pollutant/food/prezzel w_class = WEIGHT_CLASS_NORMAL eat_effect = null rotprocess = SHELFLIFE_LONG @@ -839,7 +848,7 @@ var/found_table = locate(/obj/structure/table) in (loc) if(user.mind) short_cooktime = (50 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*5)) - long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) + long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/cheese)) if(isturf(loc)&& (found_table)) playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 40, TRUE, -1) @@ -863,7 +872,7 @@ else to_chat(user, span_warning("Put [src] on a table before working it!")) else - return ..() + return ..() // -------------- SPIDER-HONEY CAKE (Zybantu) ----------------- /obj/item/reagent_containers/food/snacks/rogue/hcakeuncooked @@ -871,6 +880,7 @@ icon_state = "honeycakeuncook" slices_num = 0 cooked_type = /obj/item/reagent_containers/food/snacks/rogue/hcake + cooked_smell = /datum/pollutant/food/honey_cake list_reagents = list(/datum/reagent/consumable/nutriment = 1) w_class = WEIGHT_CLASS_NORMAL foodtype = GRAIN | DAIRY | SUGAR @@ -887,7 +897,7 @@ tastes = list("cake"=1, "delicious honeyfrosting"=1) foodtype = GRAIN | DAIRY | SUGAR slice_batch = TRUE - slice_sound = TRUE + slice_sound = TRUE rotprocess = SHELFLIFE_LONG eat_effect = /datum/status_effect/buff/foodbuff bitesize = 16 @@ -916,6 +926,7 @@ icon_state = "cheesecakeuncook" slices_num = 0 cooked_type = /obj/item/reagent_containers/food/snacks/rogue/ccake + cooked_smell = /datum/pollutant/food/cheese_cake list_reagents = list(/datum/reagent/consumable/nutriment = 1) foodtype = GRAIN | DAIRY | SUGAR w_class = WEIGHT_CLASS_NORMAL @@ -927,12 +938,13 @@ icon_state = "cheesecake" slices_num = 8 slice_path = /obj/item/reagent_containers/food/snacks/rogue/ccakeslice + cooked_smell = /datum/pollutant/food/cheese_cake list_reagents = list(/datum/reagent/consumable/nutriment = 48) w_class = WEIGHT_CLASS_NORMAL tastes = list("cake"=1, "creamy cheese"=1) foodtype = GRAIN | DAIRY | SUGAR slice_batch = TRUE - slice_sound = TRUE + slice_sound = TRUE rotprocess = SHELFLIFE_LONG eat_effect = /datum/status_effect/buff/foodbuff bitesize = 16 diff --git a/modular/Neu_Food/code/raw/NeuFood_meat.dm b/modular/Neu_Food/code/raw/NeuFood_meat.dm index a8fe449d4d..28590ebfdd 100644 --- a/modular/Neu_Food/code/raw/NeuFood_meat.dm +++ b/modular/Neu_Food/code/raw/NeuFood_meat.dm @@ -30,6 +30,7 @@ icon_state = "meatcutlet" fried_type = /obj/item/reagent_containers/food/snacks/rogue/meat/steak/fried cooked_type = /obj/item/reagent_containers/food/snacks/rogue/meat/steak/fried + cooked_smell = /datum/pollutant/food/fried_meat slices_num = 2 slice_path = /obj/item/reagent_containers/food/snacks/rogue/meat/mince/beef slice_bclass = BCLASS_CHOP @@ -50,6 +51,7 @@ slices_num = 0 fried_type = /obj/item/reagent_containers/food/snacks/rogue/meat/bacon/fried cooked_type = /obj/item/reagent_containers/food/snacks/rogue/meat/bacon/fried + cooked_smell = /datum/pollutant/food/bacon filling_color = "#8a0000" become_rot_type = /obj/item/reagent_containers/food/snacks/rotten/bacon @@ -58,6 +60,7 @@ icon_state = "spidermeat" fried_type = /obj/item/reagent_containers/food/snacks/rogue/meat/spider/fried cooked_type = /obj/item/reagent_containers/food/snacks/rogue/meat/spider/fried + cooked_smell = /datum/pollutant/food/fried_meat slice_path = null slices_num = 0 @@ -66,6 +69,7 @@ icon_state = "halfchicken" slice_path = /obj/item/reagent_containers/food/snacks/rogue/meat/poultry/cutlet cooked_type = /obj/item/reagent_containers/food/snacks/rogue/meat/poultry/baked + cooked_smell = /datum/pollutant/food/fried_chicken fried_type = null slices_num = 2 slice_sound = TRUE @@ -81,6 +85,7 @@ slice_bclass = BCLASS_CHOP slice_path = /obj/item/reagent_containers/food/snacks/rogue/meat/mince/poultry cooked_type = /obj/item/reagent_containers/food/snacks/rogue/meat/poultry/cutlet/fried + cooked_smell = /datum/pollutant/food/fried_chicken become_rot_type = /obj/item/reagent_containers/food/snacks/rotten/chickenleg /* ........ Fish sounds ................ */ @@ -157,6 +162,7 @@ ingredient_size = 1 fried_type = /obj/item/reagent_containers/food/snacks/rogue/meat/sausage/cooked cooked_type = /obj/item/reagent_containers/food/snacks/rogue/meat/sausage/cooked + cooked_smell = /datum/pollutant/food/sausage become_rot_type = /obj/item/reagent_containers/food/snacks/rotten/sausage /obj/item/reagent_containers/food/snacks/rogue/meat/wiener @@ -165,6 +171,7 @@ ingredient_size = 1 fried_type = /obj/item/reagent_containers/food/snacks/rogue/meat/sausage/cooked/wiener cooked_type = /obj/item/reagent_containers/food/snacks/rogue/meat/sausage/cooked/wiener + cooked_smell = /datum/pollutant/food/wiener become_rot_type = /obj/item/reagent_containers/food/snacks/rotten/sausage diff --git a/modular/Neu_Food/code/raw/NeuFood_processed.dm b/modular/Neu_Food/code/raw/NeuFood_processed.dm index 08598d7157..81cdb7185e 100644 --- a/modular/Neu_Food/code/raw/NeuFood_processed.dm +++ b/modular/Neu_Food/code/raw/NeuFood_processed.dm @@ -95,10 +95,10 @@ /datum/crafting_recipe/roguetown/cooking/raisins name = "raisins" - reqs = list(/obj/item/reagent_containers/food/snacks/produce/berries/rogue = 1) + reqs = list(/obj/item/reagent_containers/food/snacks/produce/jacksberry = 1) parts = list( - /obj/item/reagent_containers/food/snacks/produce/berries/rogue = 1) - blacklist = list(/obj/item/reagent_containers/food/snacks/produce/berries/rogue/poison) + /obj/item/reagent_containers/food/snacks/produce/jacksberry = 1) + blacklist = list(/obj/item/reagent_containers/food/snacks/produce/jacksberry/poison) result = /obj/item/reagent_containers/food/snacks/rogue/raisins structurecraft = /obj/structure/fluff/dryingrack req_table = FALSE @@ -107,9 +107,9 @@ /datum/crafting_recipe/roguetown/cooking/raisins_poison name = "raisins" - reqs = list(/obj/item/reagent_containers/food/snacks/produce/berries/rogue/poison = 1) + reqs = list(/obj/item/reagent_containers/food/snacks/produce/jacksberry/poison = 1) parts = list( - /obj/item/reagent_containers/food/snacks/produce/berries/rogue/poison = 1) + /obj/item/reagent_containers/food/snacks/produce/jacksberry/poison = 1) result = /obj/item/reagent_containers/food/snacks/rogue/raisins/poison structurecraft = /obj/structure/fluff/dryingrack req_table = FALSE @@ -168,7 +168,7 @@ slice_path = /obj/item/reagent_containers/food/snacks/rogue/meat/salami/slice tastes = list("salted meat" = 1) rotprocess = null - slice_sound = TRUE + slice_sound = TRUE /obj/item/reagent_containers/food/snacks/rogue/meat/salami/update_icon() if(slices_num) @@ -251,7 +251,7 @@ slice_path = /obj/item/reagent_containers/food/snacks/fat/salo/slice slices_num = 4 slice_batch = FALSE - slice_sound = TRUE + slice_sound = TRUE eat_effect = null /obj/item/reagent_containers/food/snacks/fat/salo/update_icon() @@ -322,7 +322,7 @@ /* ............ Churning butter ................ */ /obj/item/reagent_containers/glass/bucket/wooden/attackby(obj/item/I, mob/user, params) if(user.mind) - long_cooktime = (200 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*20)) + long_cooktime = (200 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*20)) if(istype(I, /obj/item/kitchen/spoon)) if(!reagents.has_reagent(/datum/reagent/consumable/milk/salted, 15) && !reagents.has_reagent(/datum/reagent/consumable/milk/salted_gote, 15)) to_chat(user, "Not enough salted milk.") @@ -353,7 +353,7 @@ slices_num = 6 slice_batch = FALSE bitesize = 6 - slice_sound = TRUE + slice_sound = TRUE /obj/item/reagent_containers/food/snacks/butter/update_icon() if(slices_num) @@ -392,7 +392,7 @@ /* ............ Making fresh cheese ................ */ /obj/item/reagent_containers/glass/bucket/wooden/attackby(obj/item/I, mob/user, params) if(user.mind) - long_cooktime = (100 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) + long_cooktime = (100 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) if(istype(I, /obj/item/natural/cloth)) if(reagents.has_reagent(/datum/reagent/consumable/milk/salted, 5)) user.visible_message("[user] strains fresh cheese...") @@ -412,7 +412,7 @@ var/obj/item/natural/cloth/T = I if(T.wet && !T.return_blood_DNA()) return - else + else var/removereg = /datum/reagent/water if(!reagents.has_reagent(/datum/reagent/water, 5)) removereg = /datum/reagent/water/gross @@ -451,7 +451,7 @@ var/found_table = locate(/obj/structure/table) in (loc) if(user.mind) short_cooktime = (50 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*5)) - long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) + long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/cheese)) if(isturf(loc)&& (found_table)) playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 30, TRUE, -1) @@ -472,7 +472,7 @@ var/found_table = locate(/obj/structure/table) in (loc) if(user.mind) short_cooktime = (50 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*5)) - long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) + long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/cheese)) if(isturf(loc)&& (found_table)) playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 30, TRUE, -1) @@ -495,7 +495,7 @@ var/found_table = locate(/obj/structure/table) in (loc) if(user.mind) short_cooktime = (50 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*5)) - long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) + long_cooktime = (90 - ((user.mind.get_skill_level(/datum/skill/craft/cooking))*10)) if(istype(I, /obj/item/reagent_containers/food/snacks/rogue/cheese)) if(isturf(loc)&& (found_table)) playsound(get_turf(user), 'sound/foley/dropsound/food_drop.ogg', 30, TRUE, -1) @@ -547,7 +547,7 @@ slice_batch = TRUE slice_path = /obj/item/reagent_containers/food/snacks/rogue/cheddarwedge become_rot_type = /obj/item/reagent_containers/food/snacks/rogue/cheddar/aged - slice_sound = TRUE + slice_sound = TRUE /obj/item/reagent_containers/food/snacks/rogue/cheddar/aged name = "wheel of aged cheese" diff --git a/modular/Neu_Food/code/raw/NeuFood_veggies.dm b/modular/Neu_Food/code/raw/NeuFood_veggies.dm index d34b58e9aa..3492692e7b 100644 --- a/modular/Neu_Food/code/raw/NeuFood_veggies.dm +++ b/modular/Neu_Food/code/raw/NeuFood_veggies.dm @@ -11,6 +11,7 @@ icon_state = "onion_sliced" slices_num = 0 fried_type = /obj/item/reagent_containers/food/snacks/rogue/preserved/onion_fried + cooked_smell = /datum/pollutant/food/fried_onion can_distill = TRUE distill_reagent = /datum/reagent/consumable/ethanol/beer/onion distill_amt = 6 @@ -21,7 +22,7 @@ icon_state = "cabbage_sliced" fried_type = /obj/item/reagent_containers/food/snacks/rogue/preserved/cabbage_fried cooked_type = /obj/item/reagent_containers/food/snacks/rogue/preserved/cabbage_fried - + cooked_smell = /datum/pollutant/food/fried_cabbage /* .................. Potato ................... */ /obj/item/reagent_containers/food/snacks/rogue/veg/potato_sliced @@ -29,6 +30,7 @@ icon_state = "potato_sliced" fried_type = /obj/item/reagent_containers/food/snacks/rogue/preserved/potato_fried cooked_type = /obj/item/reagent_containers/food/snacks/rogue/preserved/potato_fried + cooked_smell = /datum/pollutant/food/baked_potato can_distill = TRUE distill_reagent = /datum/reagent/consumable/ethanol/beer/voddena distill_amt = 8 diff --git a/modular/Neu_Food/icons/food.dmi b/modular/Neu_Food/icons/food.dmi index fd5b02f1b3..d9d01db238 100644 Binary files a/modular/Neu_Food/icons/food.dmi and b/modular/Neu_Food/icons/food.dmi differ diff --git a/sound/ambience/rain.ogg b/sound/ambience/rain.ogg new file mode 100644 index 0000000000..7e36e70d96 Binary files /dev/null and b/sound/ambience/rain.ogg differ diff --git a/sound/items/sawing.ogg b/sound/items/sawing.ogg new file mode 100644 index 0000000000..bebbff622b Binary files /dev/null and b/sound/items/sawing.ogg differ diff --git a/sound/items/wood_cutting.ogg b/sound/items/wood_cutting.ogg new file mode 100644 index 0000000000..db6b74dac6 Binary files /dev/null and b/sound/items/wood_cutting.ogg differ diff --git a/sound/misc/ppress.ogg b/sound/misc/ppress.ogg new file mode 100644 index 0000000000..0530c27514 Binary files /dev/null and b/sound/misc/ppress.ogg differ diff --git a/sound/misc/roundend.ogg b/sound/misc/roundend.ogg index df026c30e0..7e1f62441d 100644 Binary files a/sound/misc/roundend.ogg and b/sound/misc/roundend.ogg differ diff --git a/sound/music/unused/combat_old.ogg b/sound/music/combat_old.ogg similarity index 100% rename from sound/music/unused/combat_old.ogg rename to sound/music/combat_old.ogg diff --git a/sound/music/credits.ogg b/sound/music/credits.ogg index 2245ec68a5..bc86d94774 100644 Binary files a/sound/music/credits.ogg and b/sound/music/credits.ogg differ diff --git a/sound/music/credits_previous.ogg b/sound/music/credits_previous.ogg new file mode 100644 index 0000000000..2245ec68a5 Binary files /dev/null and b/sound/music/credits_previous.ogg differ diff --git a/sound/music/title.ogg b/sound/music/title.ogg index 346d591aa4..f07e260765 100644 Binary files a/sound/music/title.ogg and b/sound/music/title.ogg differ diff --git a/sound/music/title_previous.ogg b/sound/music/title_previous.ogg new file mode 100644 index 0000000000..5e53472438 Binary files /dev/null and b/sound/music/title_previous.ogg differ diff --git a/sound/music/combat_rg.ogg b/sound/music/unused/combat_rg.ogg similarity index 100% rename from sound/music/combat_rg.ogg rename to sound/music/unused/combat_rg.ogg diff --git a/sound/old/roundend.ogg b/sound/old/roundend.ogg index 7e1f62441d..df026c30e0 100644 Binary files a/sound/old/roundend.ogg and b/sound/old/roundend.ogg differ diff --git a/sound/old/title.ogg b/sound/old/title.ogg index 5e53472438..346d591aa4 100644 Binary files a/sound/old/title.ogg and b/sound/old/title.ogg differ diff --git a/sound/vo/mobs/mimic/mimic_attack1.ogg b/sound/vo/mobs/mimic/mimic_attack1.ogg new file mode 100644 index 0000000000..6345512416 Binary files /dev/null and b/sound/vo/mobs/mimic/mimic_attack1.ogg differ diff --git a/sound/vo/mobs/mimic/mimic_attack2.ogg b/sound/vo/mobs/mimic/mimic_attack2.ogg new file mode 100644 index 0000000000..a8cf035427 Binary files /dev/null and b/sound/vo/mobs/mimic/mimic_attack2.ogg differ diff --git a/sound/vo/mobs/mimic/mimic_attack3.ogg b/sound/vo/mobs/mimic/mimic_attack3.ogg new file mode 100644 index 0000000000..83c3a0b19f Binary files /dev/null and b/sound/vo/mobs/mimic/mimic_attack3.ogg differ diff --git a/sound/vo/mobs/mimic/mimic_death.ogg b/sound/vo/mobs/mimic/mimic_death.ogg new file mode 100644 index 0000000000..8947b6c98a Binary files /dev/null and b/sound/vo/mobs/mimic/mimic_death.ogg differ diff --git a/sound/vo/mobs/minotaur/minodie.ogg b/sound/vo/mobs/minotaur/minodie.ogg new file mode 100644 index 0000000000..8f27845026 Binary files /dev/null and b/sound/vo/mobs/minotaur/minodie.ogg differ diff --git a/sound/vo/mobs/minotaur/minodie2.ogg b/sound/vo/mobs/minotaur/minodie2.ogg new file mode 100644 index 0000000000..2f3aa8f5d9 Binary files /dev/null and b/sound/vo/mobs/minotaur/minodie2.ogg differ diff --git a/sound/vo/mobs/minotaur/minoidle.ogg b/sound/vo/mobs/minotaur/minoidle.ogg new file mode 100644 index 0000000000..e5e2cc56c1 Binary files /dev/null and b/sound/vo/mobs/minotaur/minoidle.ogg differ diff --git a/sound/vo/mobs/minotaur/minoidle2.ogg b/sound/vo/mobs/minotaur/minoidle2.ogg new file mode 100644 index 0000000000..996524c77f Binary files /dev/null and b/sound/vo/mobs/minotaur/minoidle2.ogg differ diff --git a/sound/vo/mobs/minotaur/minoidle3.ogg b/sound/vo/mobs/minotaur/minoidle3.ogg new file mode 100644 index 0000000000..1f2f6952ec Binary files /dev/null and b/sound/vo/mobs/minotaur/minoidle3.ogg differ diff --git a/sound/vo/mobs/minotaur/minopain.ogg b/sound/vo/mobs/minotaur/minopain.ogg new file mode 100644 index 0000000000..68883f3f87 Binary files /dev/null and b/sound/vo/mobs/minotaur/minopain.ogg differ diff --git a/sound/vo/mobs/minotaur/minopain2.ogg b/sound/vo/mobs/minotaur/minopain2.ogg new file mode 100644 index 0000000000..f69d22aea4 Binary files /dev/null and b/sound/vo/mobs/minotaur/minopain2.ogg differ diff --git a/sound/vo/mobs/minotaur/minoroar.ogg b/sound/vo/mobs/minotaur/minoroar.ogg new file mode 100644 index 0000000000..5b4053a3d7 Binary files /dev/null and b/sound/vo/mobs/minotaur/minoroar.ogg differ diff --git a/sound/vo/mobs/minotaur/minoroar2.ogg b/sound/vo/mobs/minotaur/minoroar2.ogg new file mode 100644 index 0000000000..368e5cd17b Binary files /dev/null and b/sound/vo/mobs/minotaur/minoroar2.ogg differ diff --git a/sound/vo/mobs/minotaur/minoroar3.ogg b/sound/vo/mobs/minotaur/minoroar3.ogg new file mode 100644 index 0000000000..e43f5f101c Binary files /dev/null and b/sound/vo/mobs/minotaur/minoroar3.ogg differ diff --git a/sound/vo/mobs/minotaur/minoroar4.ogg b/sound/vo/mobs/minotaur/minoroar4.ogg new file mode 100644 index 0000000000..4b728546db Binary files /dev/null and b/sound/vo/mobs/minotaur/minoroar4.ogg differ diff --git a/sound/vo/mobs/poltergeist/polter_damage0.ogg b/sound/vo/mobs/poltergeist/polter_damage0.ogg new file mode 100644 index 0000000000..b8fc1b0582 Binary files /dev/null and b/sound/vo/mobs/poltergeist/polter_damage0.ogg differ diff --git a/sound/vo/mobs/poltergeist/polter_damage1.ogg b/sound/vo/mobs/poltergeist/polter_damage1.ogg new file mode 100644 index 0000000000..41df3cdcfb Binary files /dev/null and b/sound/vo/mobs/poltergeist/polter_damage1.ogg differ diff --git a/sound/vo/mobs/poltergeist/polter_damage2.ogg b/sound/vo/mobs/poltergeist/polter_damage2.ogg new file mode 100644 index 0000000000..12807b18e1 Binary files /dev/null and b/sound/vo/mobs/poltergeist/polter_damage2.ogg differ diff --git a/sound/vo/mobs/poltergeist/polter_idle.ogg b/sound/vo/mobs/poltergeist/polter_idle.ogg new file mode 100644 index 0000000000..1300209d27 Binary files /dev/null and b/sound/vo/mobs/poltergeist/polter_idle.ogg differ diff --git a/sound/vo/mobs/simple_orcs/orc_death.ogg b/sound/vo/mobs/simple_orcs/orc_death.ogg new file mode 100644 index 0000000000..a23878762e Binary files /dev/null and b/sound/vo/mobs/simple_orcs/orc_death.ogg differ diff --git a/sound/vo/mobs/simple_orcs/orc_death2.ogg b/sound/vo/mobs/simple_orcs/orc_death2.ogg new file mode 100644 index 0000000000..f2a16fe10a Binary files /dev/null and b/sound/vo/mobs/simple_orcs/orc_death2.ogg differ diff --git a/sound/vo/mobs/simple_orcs/orc_death3.ogg b/sound/vo/mobs/simple_orcs/orc_death3.ogg new file mode 100644 index 0000000000..196771e2e4 Binary files /dev/null and b/sound/vo/mobs/simple_orcs/orc_death3.ogg differ diff --git a/sound/vo/mobs/simple_orcs/orc_death4.ogg b/sound/vo/mobs/simple_orcs/orc_death4.ogg new file mode 100644 index 0000000000..2a9124c222 Binary files /dev/null and b/sound/vo/mobs/simple_orcs/orc_death4.ogg differ diff --git a/sound/vo/mobs/simple_orcs/orc_death5.ogg b/sound/vo/mobs/simple_orcs/orc_death5.ogg new file mode 100644 index 0000000000..3aaabe7d1d Binary files /dev/null and b/sound/vo/mobs/simple_orcs/orc_death5.ogg differ diff --git a/sound/vo/mobs/simple_orcs/orc_death6.ogg b/sound/vo/mobs/simple_orcs/orc_death6.ogg new file mode 100644 index 0000000000..1dcb2c6876 Binary files /dev/null and b/sound/vo/mobs/simple_orcs/orc_death6.ogg differ diff --git a/sound/vo/mobs/simple_orcs/orc_idle.ogg b/sound/vo/mobs/simple_orcs/orc_idle.ogg new file mode 100644 index 0000000000..60c9870742 Binary files /dev/null and b/sound/vo/mobs/simple_orcs/orc_idle.ogg differ diff --git a/sound/vo/mobs/simple_orcs/orc_idle2.ogg b/sound/vo/mobs/simple_orcs/orc_idle2.ogg new file mode 100644 index 0000000000..b5860f72ce Binary files /dev/null and b/sound/vo/mobs/simple_orcs/orc_idle2.ogg differ diff --git a/sound/vo/mobs/simple_orcs/orc_idle3.ogg b/sound/vo/mobs/simple_orcs/orc_idle3.ogg new file mode 100644 index 0000000000..099e0e227a Binary files /dev/null and b/sound/vo/mobs/simple_orcs/orc_idle3.ogg differ diff --git a/sound/vo/mobs/simple_orcs/orc_idle4.ogg b/sound/vo/mobs/simple_orcs/orc_idle4.ogg new file mode 100644 index 0000000000..d36e65d899 Binary files /dev/null and b/sound/vo/mobs/simple_orcs/orc_idle4.ogg differ diff --git a/sound/vo/mobs/simple_orcs/orc_pain.ogg b/sound/vo/mobs/simple_orcs/orc_pain.ogg new file mode 100644 index 0000000000..51a2796ff5 Binary files /dev/null and b/sound/vo/mobs/simple_orcs/orc_pain.ogg differ diff --git a/sound/vo/mobs/simple_orcs/orc_pain2.ogg b/sound/vo/mobs/simple_orcs/orc_pain2.ogg new file mode 100644 index 0000000000..a9c78dd67d Binary files /dev/null and b/sound/vo/mobs/simple_orcs/orc_pain2.ogg differ diff --git a/sound/vo/mobs/simple_orcs/orc_pain3.ogg b/sound/vo/mobs/simple_orcs/orc_pain3.ogg new file mode 100644 index 0000000000..c81cc787f3 Binary files /dev/null and b/sound/vo/mobs/simple_orcs/orc_pain3.ogg differ diff --git a/sound/vo/mobs/simple_orcs/orc_pain4.ogg b/sound/vo/mobs/simple_orcs/orc_pain4.ogg new file mode 100644 index 0000000000..b193b9239b Binary files /dev/null and b/sound/vo/mobs/simple_orcs/orc_pain4.ogg differ diff --git a/sound/vo/mobs/simple_orcs/orc_yell.ogg b/sound/vo/mobs/simple_orcs/orc_yell.ogg new file mode 100644 index 0000000000..2e35848f94 Binary files /dev/null and b/sound/vo/mobs/simple_orcs/orc_yell.ogg differ diff --git a/sound/vo/mobs/simple_orcs/orc_yell2.ogg b/sound/vo/mobs/simple_orcs/orc_yell2.ogg new file mode 100644 index 0000000000..3619113e39 Binary files /dev/null and b/sound/vo/mobs/simple_orcs/orc_yell2.ogg differ diff --git a/sound/vo/mobs/simple_orcs/orc_yell3.ogg b/sound/vo/mobs/simple_orcs/orc_yell3.ogg new file mode 100644 index 0000000000..61ac589b5d Binary files /dev/null and b/sound/vo/mobs/simple_orcs/orc_yell3.ogg differ diff --git a/sound/vo/mobs/simple_orcs/orc_yell4.ogg b/sound/vo/mobs/simple_orcs/orc_yell4.ogg new file mode 100644 index 0000000000..d1f732bbfe Binary files /dev/null and b/sound/vo/mobs/simple_orcs/orc_yell4.ogg differ diff --git a/sound/vo/mobs/skel/skeleton_death (1).ogg b/sound/vo/mobs/skel/skeleton_death (1).ogg new file mode 100644 index 0000000000..fa65f3256a Binary files /dev/null and b/sound/vo/mobs/skel/skeleton_death (1).ogg differ diff --git a/sound/vo/mobs/skel/skeleton_death (2).ogg b/sound/vo/mobs/skel/skeleton_death (2).ogg new file mode 100644 index 0000000000..ec59f05a43 Binary files /dev/null and b/sound/vo/mobs/skel/skeleton_death (2).ogg differ diff --git a/sound/vo/mobs/skel/skeleton_death (3).ogg b/sound/vo/mobs/skel/skeleton_death (3).ogg new file mode 100644 index 0000000000..3a11716bba Binary files /dev/null and b/sound/vo/mobs/skel/skeleton_death (3).ogg differ diff --git a/sound/vo/mobs/skel/skeleton_death (4).ogg b/sound/vo/mobs/skel/skeleton_death (4).ogg new file mode 100644 index 0000000000..102718feca Binary files /dev/null and b/sound/vo/mobs/skel/skeleton_death (4).ogg differ diff --git a/sound/vo/mobs/skel/skeleton_death (5).ogg b/sound/vo/mobs/skel/skeleton_death (5).ogg new file mode 100644 index 0000000000..03d7f44709 Binary files /dev/null and b/sound/vo/mobs/skel/skeleton_death (5).ogg differ diff --git a/sound/vo/mobs/skel/skeleton_idle (1).ogg b/sound/vo/mobs/skel/skeleton_idle (1).ogg new file mode 100644 index 0000000000..d29a3175ab Binary files /dev/null and b/sound/vo/mobs/skel/skeleton_idle (1).ogg differ diff --git a/sound/vo/mobs/skel/skeleton_idle (2).ogg b/sound/vo/mobs/skel/skeleton_idle (2).ogg new file mode 100644 index 0000000000..adee40cb53 Binary files /dev/null and b/sound/vo/mobs/skel/skeleton_idle (2).ogg differ diff --git a/sound/vo/mobs/skel/skeleton_idle (3).ogg b/sound/vo/mobs/skel/skeleton_idle (3).ogg new file mode 100644 index 0000000000..5f688825d2 Binary files /dev/null and b/sound/vo/mobs/skel/skeleton_idle (3).ogg differ diff --git a/sound/weather/rain/thunder_1.ogg b/sound/weather/rain/thunder_1.ogg new file mode 100644 index 0000000000..d575b5be1e Binary files /dev/null and b/sound/weather/rain/thunder_1.ogg differ diff --git a/sound/weather/rain/thunder_2.ogg b/sound/weather/rain/thunder_2.ogg new file mode 100644 index 0000000000..b421a99680 Binary files /dev/null and b/sound/weather/rain/thunder_2.ogg differ diff --git a/sound/weather/rain/thunder_3.ogg b/sound/weather/rain/thunder_3.ogg new file mode 100644 index 0000000000..1acb8bae62 Binary files /dev/null and b/sound/weather/rain/thunder_3.ogg differ diff --git a/sound/weather/rain/thunder_4.ogg b/sound/weather/rain/thunder_4.ogg new file mode 100644 index 0000000000..a3ba1845ab Binary files /dev/null and b/sound/weather/rain/thunder_4.ogg differ diff --git a/sound/weather/rain/thunder_5.ogg b/sound/weather/rain/thunder_5.ogg new file mode 100644 index 0000000000..4866e86f93 Binary files /dev/null and b/sound/weather/rain/thunder_5.ogg differ diff --git a/sound/weather/rain/thunder_6.ogg b/sound/weather/rain/thunder_6.ogg new file mode 100644 index 0000000000..be6d69f927 Binary files /dev/null and b/sound/weather/rain/thunder_6.ogg differ diff --git a/sound/weather/rain/thunder_7.ogg b/sound/weather/rain/thunder_7.ogg new file mode 100644 index 0000000000..818c2984fb Binary files /dev/null and b/sound/weather/rain/thunder_7.ogg differ diff --git a/sound/weather/rain/weather_rain.ogg b/sound/weather/rain/weather_rain.ogg new file mode 100644 index 0000000000..8b5c072b76 Binary files /dev/null and b/sound/weather/rain/weather_rain.ogg differ diff --git a/sound/weather/rain/weather_rain_indoors.ogg b/sound/weather/rain/weather_rain_indoors.ogg new file mode 100644 index 0000000000..78ae4d4950 Binary files /dev/null and b/sound/weather/rain/weather_rain_indoors.ogg differ diff --git a/sound/weather/rain/weather_storm.ogg b/sound/weather/rain/weather_storm.ogg new file mode 100644 index 0000000000..45d6c9261f Binary files /dev/null and b/sound/weather/rain/weather_storm.ogg differ diff --git a/sound/weather/rain/wind_1.ogg b/sound/weather/rain/wind_1.ogg new file mode 100644 index 0000000000..f2bb1aa37e Binary files /dev/null and b/sound/weather/rain/wind_1.ogg differ diff --git a/sound/weather/rain/wind_2.ogg b/sound/weather/rain/wind_2.ogg new file mode 100644 index 0000000000..8918476380 Binary files /dev/null and b/sound/weather/rain/wind_2.ogg differ diff --git a/sound/weather/rain/wind_3.ogg b/sound/weather/rain/wind_3.ogg new file mode 100644 index 0000000000..54af9dded7 Binary files /dev/null and b/sound/weather/rain/wind_3.ogg differ diff --git a/sound/weather/rain/wind_4.ogg b/sound/weather/rain/wind_4.ogg new file mode 100644 index 0000000000..c3459efe2b Binary files /dev/null and b/sound/weather/rain/wind_4.ogg differ diff --git a/sound/weather/rain/wind_5.ogg b/sound/weather/rain/wind_5.ogg new file mode 100644 index 0000000000..2a197bc5e5 Binary files /dev/null and b/sound/weather/rain/wind_5.ogg differ diff --git a/sound/weather/rain/wind_6.ogg b/sound/weather/rain/wind_6.ogg new file mode 100644 index 0000000000..deba2c6906 Binary files /dev/null and b/sound/weather/rain/wind_6.ogg differ diff --git a/sound/weather/snow/weather_snow.ogg b/sound/weather/snow/weather_snow.ogg new file mode 100644 index 0000000000..bc46ce9128 Binary files /dev/null and b/sound/weather/snow/weather_snow.ogg differ diff --git a/stonekeep.dme b/stonekeep.dme index d2d30f89f1..22920ec4f1 100644 --- a/stonekeep.dme +++ b/stonekeep.dme @@ -75,9 +75,11 @@ #include "code\__DEFINES\nanites.dm" #include "code\__DEFINES\networks.dm" #include "code\__DEFINES\obj_flags.dm" +#include "code\__DEFINES\particle_weather.dm" #include "code\__DEFINES\pinpointers.dm" #include "code\__DEFINES\pipe_construction.dm" #include "code\__DEFINES\plumbing.dm" +#include "code\__DEFINES\pollution.dm" #include "code\__DEFINES\power.dm" #include "code\__DEFINES\preferences.dm" #include "code\__DEFINES\procpath.dm" @@ -118,11 +120,20 @@ #include "code\__DEFINES\weaponsounds.dm" #include "code\__DEFINES\weather.dm" #include "code\__DEFINES\wires.dm" +#include "code\__DEFINES\ai\_ai.dm" +#include "code\__DEFINES\ai\hostile.dm" #include "code\__DEFINES\customization\body_markings.dm" #include "code\__DEFINES\customization\hair_gradients.dm" #include "code\__DEFINES\customization\mob_descriptors.dm" #include "code\__DEFINES\customization\organ_customization.dm" #include "code\__DEFINES\customization\sprite_accessory.dm" +#include "code\__DEFINES\dcs\signals\signals_movable.dm" +#include "code\__DEFINES\dcs\signals\signals_tram.dm" +#include "code\__DEFINES\dcs\signals\signals_mob\signals_living.dm" +#include "code\__DEFINES\dcs\signals\signals_mob\signals_mob.dm" +#include "code\__DEFINES\dcs\signals_atoms\lighting.dm" +#include "code\__DEFINES\dcs\signals_atoms\movable_lighting.dm" +#include "code\__DEFINES\dcs\signals_atoms\signals_atom.dm" #include "code\__HELPERS\_lists.dm" #include "code\__HELPERS\_logging.dm" #include "code\__HELPERS\_string_lists.dm" @@ -202,29 +213,22 @@ #include "code\_js\byjax.dm" #include "code\_js\menus.dm" #include "code\_onclick\adjacent.dm" -#include "code\_onclick\ai.dm" #include "code\_onclick\click.dm" -#include "code\_onclick\cyborg.dm" #include "code\_onclick\drag_drop.dm" #include "code\_onclick\item_attack.dm" #include "code\_onclick\observer.dm" #include "code\_onclick\other_mobs.dm" #include "code\_onclick\overmind.dm" -#include "code\_onclick\pai.dm" #include "code\_onclick\telekinesis.dm" #include "code\_onclick\hud\_defines.dm" #include "code\_onclick\hud\action_button.dm" -#include "code\_onclick\hud\ai.dm" #include "code\_onclick\hud\alert.dm" -#include "code\_onclick\hud\alien.dm" -#include "code\_onclick\hud\alien_larva.dm" #include "code\_onclick\hud\blob_overmind.dm" #include "code\_onclick\hud\blobbernauthud.dm" #include "code\_onclick\hud\clickdelay.dm" #include "code\_onclick\hud\constructs.dm" #include "code\_onclick\hud\credits.dm" #include "code\_onclick\hud\devil.dm" -#include "code\_onclick\hud\drones.dm" #include "code\_onclick\hud\fullscreen.dm" #include "code\_onclick\hud\generic_dextrous.dm" #include "code\_onclick\hud\ghost.dm" @@ -235,18 +239,15 @@ #include "code\_onclick\hud\monkey.dm" #include "code\_onclick\hud\mouseover.dm" #include "code\_onclick\hud\movable_screen_objects.dm" -#include "code\_onclick\hud\pai.dm" #include "code\_onclick\hud\parallax.dm" #include "code\_onclick\hud\picture_in_picture.dm" #include "code\_onclick\hud\plane_master.dm" #include "code\_onclick\hud\radial.dm" #include "code\_onclick\hud\radial_persistent.dm" #include "code\_onclick\hud\revenanthud.dm" -#include "code\_onclick\hud\robot.dm" #include "code\_onclick\hud\screen_objects.dm" #include "code\_onclick\hud\slime.dm" #include "code\_onclick\hud\spirit.dm" -#include "code\_onclick\hud\swarmer.dm" #include "code\controllers\admin.dm" #include "code\controllers\controller.dm" #include "code\controllers\failsafe.dm" @@ -262,6 +263,7 @@ #include "code\controllers\subsystem\achievements.dm" #include "code\controllers\subsystem\acid.dm" #include "code\controllers\subsystem\adjacent_air.dm" +#include "code\controllers\subsystem\ai_controller.dm" #include "code\controllers\subsystem\air.dm" #include "code\controllers\subsystem\assets.dm" #include "code\controllers\subsystem\atoms.dm" @@ -290,6 +292,7 @@ #include "code\controllers\subsystem\machines.dm" #include "code\controllers\subsystem\mapping.dm" #include "code\controllers\subsystem\materials.dm" +#include "code\controllers\subsystem\merchant.dm" #include "code\controllers\subsystem\minor_mapping.dm" #include "code\controllers\subsystem\mobs.dm" #include "code\controllers\subsystem\moods.dm" @@ -297,19 +300,21 @@ #include "code\controllers\subsystem\nightshift.dm" #include "code\controllers\subsystem\npcpool.dm" #include "code\controllers\subsystem\overlays.dm" -#include "code\controllers\subsystem\pai.dm" #include "code\controllers\subsystem\parallax.dm" +#include "code\controllers\subsystem\particle_weather.dm" +#include "code\controllers\subsystem\particle_weather_outdoors.dm" #include "code\controllers\subsystem\pathfinder.dm" #include "code\controllers\subsystem\persistence.dm" #include "code\controllers\subsystem\ping.dm" +#include "code\controllers\subsystem\pollution.dm" #include "code\controllers\subsystem\radiation.dm" #include "code\controllers\subsystem\radio.dm" -#include "code\controllers\subsystem\research.dm" #include "code\controllers\subsystem\rogueroundsplayed.dm" #include "code\controllers\subsystem\runechat.dm" #include "code\controllers\subsystem\server_maint.dm" #include "code\controllers\subsystem\shuttle.dm" #include "code\controllers\subsystem\skills.dm" +#include "code\controllers\subsystem\sounds.dm" #include "code\controllers\subsystem\spacedrift.dm" #include "code\controllers\subsystem\stickyban.dm" #include "code\controllers\subsystem\sun.dm" @@ -324,6 +329,9 @@ #include "code\controllers\subsystem\vis_overlays.dm" #include "code\controllers\subsystem\vote.dm" #include "code\controllers\subsystem\weather.dm" +#include "code\controllers\subsystem\processing\ai_avoidance.dm" +#include "code\controllers\subsystem\processing\ai_behaviors.dm" +#include "code\controllers\subsystem\processing\ai_movement.dm" #include "code\controllers\subsystem\processing\fastprocess.dm" #include "code\controllers\subsystem\processing\fields.dm" #include "code\controllers\subsystem\processing\fluids.dm" @@ -331,8 +339,6 @@ #include "code\controllers\subsystem\processing\huds.dm" #include "code\controllers\subsystem\processing\incone.dm" #include "code\controllers\subsystem\processing\mousecharge.dm" -#include "code\controllers\subsystem\processing\nanites.dm" -#include "code\controllers\subsystem\processing\networks.dm" #include "code\controllers\subsystem\processing\obj.dm" #include "code\controllers\subsystem\processing\pollutants.dm" #include "code\controllers\subsystem\processing\processing.dm" @@ -367,7 +373,6 @@ #include "code\controllers\subsystem\rogue\triumphs\triumph_buy_datums\triumph_buy_datums.dm" #include "code\controllers\subsystem\rogue\triumphs\triumph_buy_datums\character\pick_any_class.dm" #include "code\datums\action.dm" -#include "code\datums\ai_laws.dm" #include "code\datums\armor.dm" #include "code\datums\beam.dm" #include "code\datums\browser.dm" @@ -380,22 +385,21 @@ #include "code\datums\datumvars.dm" #include "code\datums\dna.dm" #include "code\datums\dog_fashion.dm" -#include "code\datums\ductnet.dm" #include "code\datums\embedding_behavior.dm" #include "code\datums\emotes.dm" -#include "code\datums\ert.dm" #include "code\datums\explosion.dm" #include "code\datums\forced_movement.dm" #include "code\datums\heritage.dm" -#include "code\datums\holocall.dm" #include "code\datums\hud.dm" #include "code\datums\map_config.dm" #include "code\datums\mind.dm" #include "code\datums\movement_detector.dm" #include "code\datums\mutable_appearance.dm" #include "code\datums\numbered_display.dm" +#include "code\datums\outdoor_datum.dm" #include "code\datums\outfit.dm" #include "code\datums\pollutant.dm" +#include "code\datums\pollution.dm" #include "code\datums\position_point_vector.dm" #include "code\datums\profiling.dm" #include "code\datums\progressbar.dm" @@ -417,6 +421,56 @@ #include "code\datums\achievements\misc_achievements.dm" #include "code\datums\actions\beam_rifle.dm" #include "code\datums\actions\ninja.dm" +#include "code\datums\ai\_ai_behaviour.dm" +#include "code\datums\ai\_ai_controller.dm" +#include "code\datums\ai\_ai_idle_behavior.dm" +#include "code\datums\ai\ai_movement\_ai_movement.dm" +#include "code\datums\ai\ai_movement\_ai_planning_subtree.dm" +#include "code\datums\ai\ai_movement\astar_movement.dm" +#include "code\datums\ai\ai_movement\basic_avoidance.dm" +#include "code\datums\ai\ai_movement\dumb_movement.dm" +#include "code\datums\ai\behaviours\consume.dm" +#include "code\datums\ai\behaviours\find_and_set.dm" +#include "code\datums\ai\behaviours\follow.dm" +#include "code\datums\ai\behaviours\hunger.dm" +#include "code\datums\ai\behaviours\nearest_targetting.dm" +#include "code\datums\ai\behaviours\perform_emote.dm" +#include "code\datums\ai\behaviours\perform_speech.dm" +#include "code\datums\ai\behaviours\resist.dm" +#include "code\datums\ai\behaviours\run_from_target.dm" +#include "code\datums\ai\behaviours\use_in_hand.dm" +#include "code\datums\ai\behaviours\use_on_object.dm" +#include "code\datums\ai\behaviours\use_targeted_ability.dm" +#include "code\datums\ai\behaviours\wak_to_target.dm" +#include "code\datums\ai\behaviours\eat_food\eat_body.dm" +#include "code\datums\ai\behaviours\hostile\attack.dm" +#include "code\datums\ai\behaviours\hostile\find_potential_targets.dm" +#include "code\datums\ai\behaviours\hostile\melee_attack.dm" +#include "code\datums\ai\controllers\big_rat.dm" +#include "code\datums\ai\controllers\bog_bug.dm" +#include "code\datums\ai\controllers\bog_troll.dm" +#include "code\datums\ai\controllers\headless.dm" +#include "code\datums\ai\controllers\mimic.dm" +#include "code\datums\ai\controllers\minoutaur.dm" +#include "code\datums\ai\controllers\mole.dm" +#include "code\datums\ai\controllers\spider.dm" +#include "code\datums\ai\controllers\troll.dm" +#include "code\datums\ai\controllers\volf.dm" +#include "code\datums\ai\hostile\_hostile_controller.dm" +#include "code\datums\ai\hostile\testing_orc.dm" +#include "code\datums\ai\idle_behaviors\nothing.dm" +#include "code\datums\ai\idle_behaviors\random_walk.dm" +#include "code\datums\ai\subtrees\eat_body.dm" +#include "code\datums\ai\subtrees\find_food.dm" +#include "code\datums\ai\subtrees\flee_nearest_target.dm" +#include "code\datums\ai\subtrees\flee_target.dm" +#include "code\datums\ai\subtrees\random_speech.dm" +#include "code\datums\ai\subtrees\retaliate_subtree.dm" +#include "code\datums\ai\subtrees\simple_find_target.dm" +#include "code\datums\ai\subtrees\simple_melee_subtree.dm" +#include "code\datums\ai\subtrees\targeted_ability_use.dm" +#include "code\datums\ai\targetting_datum\simpe_targetting_datum.dm" +#include "code\datums\ai\targetting_datum\simple_targetting_allow_item.dm" #include "code\datums\atmosphere\_atmosphere.dm" #include "code\datums\atmosphere\planetary.dm" #include "code\datums\brain_damage\brain_trauma.dm" @@ -468,15 +522,13 @@ #include "code\datums\components\material_container.dm" #include "code\datums\components\mirage_border.dm" #include "code\datums\components\mood.dm" -#include "code\datums\components\nanites.dm" -#include "code\datums\components\ntnet_interface.dm" +#include "code\datums\components\movable_lighting.dm" #include "code\datums\components\orbiter.dm" #include "code\datums\components\paintable.dm" #include "code\datums\components\pollutant.dm" #include "code\datums\components\punchcooldown.dm" #include "code\datums\components\rad_insulation.dm" #include "code\datums\components\radioactive.dm" -#include "code\datums\components\remote_materials.dm" #include "code\datums\components\riding.dm" #include "code\datums\components\rotation.dm" #include "code\datums\components\rotting.dm" @@ -493,9 +545,9 @@ #include "code\datums\components\summoning.dm" #include "code\datums\components\swarming.dm" #include "code\datums\components\tactical.dm" +#include "code\datums\components\temporary_pollutor.dm" #include "code\datums\components\tether.dm" #include "code\datums\components\thermite.dm" -#include "code\datums\components\uplink.dm" #include "code\datums\components\waddling.dm" #include "code\datums\components\wearertargeting.dm" #include "code\datums\components\wet_floor.dm" @@ -508,11 +560,6 @@ #include "code\datums\components\fantasy\affix.dm" #include "code\datums\components\fantasy\prefixes.dm" #include "code\datums\components\fantasy\suffixes.dm" -#include "code\datums\components\plumbing\_plumbing.dm" -#include "code\datums\components\plumbing\chemical_acclimator.dm" -#include "code\datums\components\plumbing\filter.dm" -#include "code\datums\components\plumbing\reaction_chamber.dm" -#include "code\datums\components\plumbing\splitter.dm" #include "code\datums\components\storage\storage.dm" #include "code\datums\components\storage\concrete\_concrete.dm" #include "code\datums\components\storage\concrete\bag_of_holding.dm" @@ -526,7 +573,6 @@ #include "code\datums\diseases\_MobProcs.dm" #include "code\datums\diseases\anxiety.dm" #include "code\datums\diseases\appendicitis.dm" -#include "code\datums\diseases\beesease.dm" #include "code\datums\diseases\brainrot.dm" #include "code\datums\diseases\cold.dm" #include "code\datums\diseases\cold9.dm" @@ -580,11 +626,15 @@ #include "code\datums\diseases\advance\symptoms\weight.dm" #include "code\datums\diseases\advance\symptoms\youth.dm" #include "code\datums\elements\_element.dm" +#include "code\datums\elements\ai_flee_when_hurt.dm" +#include "code\datums\elements\bed_tuckable.dm" #include "code\datums\elements\bsa_blocker.dm" #include "code\datums\elements\cleaning.dm" #include "code\datums\elements\digitalcamo.dm" #include "code\datums\elements\earhealing.dm" #include "code\datums\elements\firestacker.dm" +#include "code\datums\elements\relay_attackers.dm" +#include "code\datums\elements\retaliate.dm" #include "code\datums\elements\snail_crawl.dm" #include "code\datums\gods\_faith.dm" #include "code\datums\gods\_patron.dm" @@ -645,7 +695,6 @@ #include "code\datums\mutations\_combined.dm" #include "code\datums\mutations\_mutations.dm" #include "code\datums\mutations\actions.dm" -#include "code\datums\mutations\antenna.dm" #include "code\datums\mutations\body.dm" #include "code\datums\mutations\chameleon.dm" #include "code\datums\mutations\cold.dm" @@ -656,6 +705,12 @@ #include "code\datums\mutations\speech.dm" #include "code\datums\mutations\telekinesis.dm" #include "code\datums\mutations\touch.dm" +#include "code\datums\particle_weathers\_base.dm" +#include "code\datums\particle_weathers\datum_types\rain.dm" +#include "code\datums\particle_weathers\datum_types\snow_storm.dm" +#include "code\datums\particle_weathers\sounds\looping_sounds.dm" +#include "code\datums\pollutants\foods.dm" +#include "code\datums\pollutants\generic.dm" #include "code\datums\ruins\lavaland.dm" #include "code\datums\ruins\space.dm" #include "code\datums\skills\_skill.dm" @@ -682,31 +737,7 @@ #include "code\datums\traits\negative.dm" #include "code\datums\traits\neutral.dm" #include "code\datums\weather\weather.dm" -#include "code\datums\weather\weather_types\acid_rain.dm" -#include "code\datums\weather\weather_types\ash_storm.dm" -#include "code\datums\weather\weather_types\floor_is_lava.dm" -#include "code\datums\weather\weather_types\radiation_storm.dm" -#include "code\datums\weather\weather_types\snow_storm.dm" -#include "code\datums\weather\weather_types\roguetown\fog.dm" -#include "code\datums\weather\weather_types\roguetown\rain.dm" -#include "code\datums\wires\_wires.dm" -#include "code\datums\wires\airalarm.dm" -#include "code\datums\wires\airlock.dm" -#include "code\datums\wires\apc.dm" -#include "code\datums\wires\autolathe.dm" -#include "code\datums\wires\emitter.dm" -#include "code\datums\wires\explosive.dm" -#include "code\datums\wires\microwave.dm" -#include "code\datums\wires\mulebot.dm" -#include "code\datums\wires\particle_accelerator.dm" -#include "code\datums\wires\r_n_d.dm" -#include "code\datums\wires\radio.dm" -#include "code\datums\wires\robot.dm" -#include "code\datums\wires\roulette.dm" -#include "code\datums\wires\suit_storage_unit.dm" -#include "code\datums\wires\syndicatebomb.dm" -#include "code\datums\wires\tesla_coil.dm" -#include "code\datums\wires\vending.dm" +#include "code\datums\weather\weather_types\fog.dm" #include "code\datums\wounds\_wound.dm" #include "code\datums\wounds\arteries.dm" #include "code\datums\wounds\bites.dm" @@ -726,31 +757,21 @@ #include "code\game\shuttle_engines.dm" #include "code\game\sound.dm" #include "code\game\world.dm" -#include "code\game\area\ai_monitored.dm" #include "code\game\area\areas.dm" #include "code\game\area\roguetownareas.dm" #include "code\game\area\Space_Station_13_areas.dm" #include "code\game\area\areas\away_content.dm" #include "code\game\area\areas\centcom.dm" -#include "code\game\area\areas\holodeck.dm" #include "code\game\area\areas\mining.dm" #include "code\game\area\areas\shuttles.dm" #include "code\game\area\areas\ruins\_ruins.dm" #include "code\game\area\areas\ruins\lavaland.dm" #include "code\game\area\areas\ruins\space.dm" #include "code\game\area\areas\ruins\templates.dm" -#include "code\game\gamemodes\events.dm" #include "code\game\gamemodes\game_mode.dm" #include "code\game\gamemodes\objective.dm" #include "code\game\gamemodes\objective_items.dm" #include "code\game\gamemodes\objectives_rogue.dm" -#include "code\game\gamemodes\brother\traitor_bro.dm" -#include "code\game\gamemodes\changeling\changeling.dm" -#include "code\game\gamemodes\changeling\traitor_chan.dm" -#include "code\game\gamemodes\clown_ops\bananium_bomb.dm" -#include "code\game\gamemodes\clown_ops\clown_ops.dm" -#include "code\game\gamemodes\clown_ops\clown_weapons.dm" -#include "code\game\gamemodes\cult\cult.dm" #include "code\game\gamemodes\devil\devil_game_mode.dm" #include "code\game\gamemodes\devil\game_mode.dm" #include "code\game\gamemodes\devil\objectives.dm" @@ -761,177 +782,15 @@ #include "code\game\gamemodes\dynamic\dynamic_rulesets_midround.dm" #include "code\game\gamemodes\dynamic\dynamic_rulesets_roundstart.dm" #include "code\game\gamemodes\extended\extended.dm" -#include "code\game\gamemodes\meteor\meteor.dm" -#include "code\game\gamemodes\meteor\meteors.dm" #include "code\game\gamemodes\monkey\monkey.dm" -#include "code\game\gamemodes\nuclear\nuclear.dm" -#include "code\game\gamemodes\revolution\revolution.dm" #include "code\game\gamemodes\roguetown\chaosmode.dm" #include "code\game\gamemodes\roguetown\roguetown.dm" #include "code\game\gamemodes\roguetown\roguewar.dm" -#include "code\game\gamemodes\sandbox\airlock_maker.dm" #include "code\game\gamemodes\sandbox\h_sandbox.dm" #include "code\game\gamemodes\sandbox\sandbox.dm" -#include "code\game\gamemodes\traitor\double_agents.dm" #include "code\game\gamemodes\traitor\traitor.dm" #include "code\game\gamemodes\wizard\wizard.dm" #include "code\game\machinery\_machinery.dm" -#include "code\game\machinery\ai_slipper.dm" -#include "code\game\machinery\airlock_control.dm" -#include "code\game\machinery\announcement_system.dm" -#include "code\game\machinery\aug_manipulator.dm" -#include "code\game\machinery\autolathe.dm" -#include "code\game\machinery\bank_machine.dm" -#include "code\game\machinery\Beacon.dm" -#include "code\game\machinery\buttons.dm" -#include "code\game\machinery\cell_charger.dm" -#include "code\game\machinery\cloning.dm" -#include "code\game\machinery\constructable_frame.dm" -#include "code\game\machinery\dance_machine.dm" -#include "code\game\machinery\defibrillator_mount.dm" -#include "code\game\machinery\deployable.dm" -#include "code\game\machinery\dish_drive.dm" -#include "code\game\machinery\dna_scanner.dm" -#include "code\game\machinery\doppler_array.dm" -#include "code\game\machinery\droneDispenser.dm" -#include "code\game\machinery\exp_cloner.dm" -#include "code\game\machinery\fat_sucker.dm" -#include "code\game\machinery\firealarm.dm" -#include "code\game\machinery\flasher.dm" -#include "code\game\machinery\gulag_item_reclaimer.dm" -#include "code\game\machinery\gulag_teleporter.dm" -#include "code\game\machinery\harvester.dm" -#include "code\game\machinery\hologram.dm" -#include "code\game\machinery\igniter.dm" -#include "code\game\machinery\iv_drip.dm" -#include "code\game\machinery\launch_pad.dm" -#include "code\game\machinery\lightswitch.dm" -#include "code\game\machinery\limbgrower.dm" -#include "code\game\machinery\magnet.dm" -#include "code\game\machinery\mass_driver.dm" -#include "code\game\machinery\medical_kiosk.dm" -#include "code\game\machinery\navbeacon.dm" -#include "code\game\machinery\newscaster.dm" -#include "code\game\machinery\PDApainter.dm" -#include "code\game\machinery\quantum_pad.dm" -#include "code\game\machinery\recharger.dm" -#include "code\game\machinery\rechargestation.dm" -#include "code\game\machinery\recycler.dm" -#include "code\game\machinery\requests_console.dm" -#include "code\game\machinery\roulette_machine.dm" -#include "code\game\machinery\scan_gate.dm" -#include "code\game\machinery\shieldgen.dm" -#include "code\game\machinery\Sleeper.dm" -#include "code\game\machinery\slotmachine.dm" -#include "code\game\machinery\spaceheater.dm" -#include "code\game\machinery\stasis.dm" -#include "code\game\machinery\status_display.dm" -#include "code\game\machinery\suit_storage_unit.dm" -#include "code\game\machinery\syndicatebeacon.dm" -#include "code\game\machinery\syndicatebomb.dm" -#include "code\game\machinery\teleporter.dm" -#include "code\game\machinery\transformer.dm" -#include "code\game\machinery\washing_machine.dm" -#include "code\game\machinery\wishgranter.dm" -#include "code\game\machinery\camera\camera.dm" -#include "code\game\machinery\camera\camera_assembly.dm" -#include "code\game\machinery\camera\motion.dm" -#include "code\game\machinery\camera\presets.dm" -#include "code\game\machinery\camera\tracking.dm" -#include "code\game\machinery\computer\_computer.dm" -#include "code\game\machinery\computer\aifixer.dm" -#include "code\game\machinery\computer\apc_control.dm" -#include "code\game\machinery\computer\arcade.dm" -#include "code\game\machinery\computer\arena.dm" -#include "code\game\machinery\computer\atmos_alert.dm" -#include "code\game\machinery\computer\atmos_control.dm" -#include "code\game\machinery\computer\buildandrepair.dm" -#include "code\game\machinery\computer\camera.dm" -#include "code\game\machinery\computer\camera_advanced.dm" -#include "code\game\machinery\computer\card.dm" -#include "code\game\machinery\computer\cloning.dm" -#include "code\game\machinery\computer\communications.dm" -#include "code\game\machinery\computer\crew.dm" -#include "code\game\machinery\computer\dna_console.dm" -#include "code\game\machinery\computer\launchpad_control.dm" -#include "code\game\machinery\computer\law.dm" -#include "code\game\machinery\computer\medical.dm" -#include "code\game\machinery\computer\Operating.dm" -#include "code\game\machinery\computer\pod.dm" -#include "code\game\machinery\computer\robot.dm" -#include "code\game\machinery\computer\security.dm" -#include "code\game\machinery\computer\station_alert.dm" -#include "code\game\machinery\computer\teleporter.dm" -#include "code\game\machinery\computer\warrant.dm" -#include "code\game\machinery\computer\prisoner\_prisoner.dm" -#include "code\game\machinery\computer\prisoner\gulag_teleporter.dm" -#include "code\game\machinery\computer\prisoner\management.dm" -#include "code\game\machinery\doors\airlock.dm" -#include "code\game\machinery\doors\airlock_electronics.dm" -#include "code\game\machinery\doors\airlock_types.dm" -#include "code\game\machinery\doors\alarmlock.dm" -#include "code\game\machinery\doors\brigdoors.dm" -#include "code\game\machinery\doors\checkForMultipleDoors.dm" -#include "code\game\machinery\doors\door.dm" -#include "code\game\machinery\doors\firedoor.dm" -#include "code\game\machinery\doors\passworddoor.dm" -#include "code\game\machinery\doors\poddoor.dm" -#include "code\game\machinery\doors\shutters.dm" -#include "code\game\machinery\doors\unpowered.dm" -#include "code\game\machinery\doors\windowdoor.dm" -#include "code\game\machinery\embedded_controller\access_controller.dm" -#include "code\game\machinery\embedded_controller\airlock_controller.dm" -#include "code\game\machinery\embedded_controller\embedded_controller_base.dm" -#include "code\game\machinery\embedded_controller\simple_vent_controller.dm" -#include "code\game\machinery\pipe\construction.dm" -#include "code\game\machinery\pipe\pipe_dispenser.dm" -#include "code\game\machinery\porta_turret\portable_turret.dm" -#include "code\game\machinery\porta_turret\portable_turret_construct.dm" -#include "code\game\machinery\porta_turret\portable_turret_cover.dm" -#include "code\game\machinery\telecomms\broadcasting.dm" -#include "code\game\machinery\telecomms\machine_interactions.dm" -#include "code\game\machinery\telecomms\telecomunications.dm" -#include "code\game\machinery\telecomms\computers\logbrowser.dm" -#include "code\game\machinery\telecomms\computers\message.dm" -#include "code\game\machinery\telecomms\computers\telemonitor.dm" -#include "code\game\machinery\telecomms\machines\allinone.dm" -#include "code\game\machinery\telecomms\machines\broadcaster.dm" -#include "code\game\machinery\telecomms\machines\bus.dm" -#include "code\game\machinery\telecomms\machines\hub.dm" -#include "code\game\machinery\telecomms\machines\message_server.dm" -#include "code\game\machinery\telecomms\machines\processor.dm" -#include "code\game\machinery\telecomms\machines\receiver.dm" -#include "code\game\machinery\telecomms\machines\relay.dm" -#include "code\game\machinery\telecomms\machines\server.dm" -#include "code\game\mecha\mech_bay.dm" -#include "code\game\mecha\mech_fabricator.dm" -#include "code\game\mecha\mecha.dm" -#include "code\game\mecha\mecha_actions.dm" -#include "code\game\mecha\mecha_construction_paths.dm" -#include "code\game\mecha\mecha_control_console.dm" -#include "code\game\mecha\mecha_defense.dm" -#include "code\game\mecha\mecha_parts.dm" -#include "code\game\mecha\mecha_topic.dm" -#include "code\game\mecha\mecha_wreckage.dm" -#include "code\game\mecha\combat\combat.dm" -#include "code\game\mecha\combat\durand.dm" -#include "code\game\mecha\combat\gygax.dm" -#include "code\game\mecha\combat\honker.dm" -#include "code\game\mecha\combat\marauder.dm" -#include "code\game\mecha\combat\phazon.dm" -#include "code\game\mecha\combat\reticence.dm" -#include "code\game\mecha\equipment\mecha_equipment.dm" -#include "code\game\mecha\equipment\tools\medical_tools.dm" -#include "code\game\mecha\equipment\tools\mining_tools.dm" -#include "code\game\mecha\equipment\tools\other_tools.dm" -#include "code\game\mecha\equipment\tools\weapon_bay.dm" -#include "code\game\mecha\equipment\tools\work_tools.dm" -#include "code\game\mecha\equipment\weapons\mecha_ammo.dm" -#include "code\game\mecha\equipment\weapons\weapons.dm" -#include "code\game\mecha\medical\medical.dm" -#include "code\game\mecha\medical\odysseus.dm" -#include "code\game\mecha\working\ripley.dm" -#include "code\game\mecha\working\working.dm" #include "code\game\objects\buckling.dm" #include "code\game\objects\empulse.dm" #include "code\game\objects\examine.dm" @@ -981,7 +840,6 @@ #include "code\game\objects\effects\effect_system\effects_sparks.dm" #include "code\game\objects\effects\effect_system\effects_water.dm" #include "code\game\objects\effects\particles\weather.dm" -#include "code\game\objects\effects\spawners\bombspawner.dm" #include "code\game\objects\effects\spawners\bundle.dm" #include "code\game\objects\effects\spawners\gibspawner.dm" #include "code\game\objects\effects\spawners\lootdrop.dm" @@ -989,7 +847,6 @@ #include "code\game\objects\effects\spawners\structure.dm" #include "code\game\objects\effects\spawners\traps.dm" #include "code\game\objects\effects\spawners\vaultspawner.dm" -#include "code\game\objects\effects\spawners\xeno_egg_delivery.dm" #include "code\game\objects\effects\temporary_visuals\cult.dm" #include "code\game\objects\effects\temporary_visuals\miscellaneous.dm" #include "code\game\objects\effects\temporary_visuals\temporary_visual.dm" @@ -997,28 +854,22 @@ #include "code\game\objects\effects\temporary_visuals\projectiles\muzzle.dm" #include "code\game\objects\effects\temporary_visuals\projectiles\projectile_effects.dm" #include "code\game\objects\effects\temporary_visuals\projectiles\tracer.dm" -#include "code\game\objects\items\AI_modules.dm" -#include "code\game\objects\items\airlock_painter.dm" -#include "code\game\objects\items\apc_frame.dm" +#include "code\game\objects\items\bedsheets.dm" #include "code\game\objects\items\blueprints.dm" -#include "code\game\objects\items\body_egg.dm" #include "code\game\objects\items\bodybag.dm" #include "code\game\objects\items\candle.dm" #include "code\game\objects\items\cardboard_cutouts.dm" #include "code\game\objects\items\cards_ids.dm" #include "code\game\objects\items\charter.dm" #include "code\game\objects\items\chromosome.dm" -#include "code\game\objects\items\chrono_eraser.dm" #include "code\game\objects\items\cigs_lighters.dm" #include "code\game\objects\items\clown_items.dm" -#include "code\game\objects\items\control_wand.dm" #include "code\game\objects\items\cosmetics.dm" #include "code\game\objects\items\courtroom.dm" #include "code\game\objects\items\crab17.dm" #include "code\game\objects\items\crayons.dm" #include "code\game\objects\items\credit_holochip.dm" #include "code\game\objects\items\debug_items.dm" -#include "code\game\objects\items\defib.dm" #include "code\game\objects\items\dehy_carp.dm" #include "code\game\objects\items\dice.dm" #include "code\game\objects\items\dna_injector.dm" @@ -1031,11 +882,9 @@ #include "code\game\objects\items\granters.dm" #include "code\game\objects\items\handcuffs.dm" #include "code\game\objects\items\his_grace.dm" -#include "code\game\objects\items\holosign_creator.dm" #include "code\game\objects\items\holy_weapons.dm" #include "code\game\objects\items\hot_potato.dm" #include "code\game\objects\items\hourglass.dm" -#include "code\game\objects\items\inducer.dm" #include "code\game\objects\items\kitchen.dm" #include "code\game\objects\items\latexballoon.dm" #include "code\game\objects\items\manuals.dm" @@ -1048,81 +897,45 @@ #include "code\game\objects\items\plushes.dm" #include "code\game\objects\items\pneumaticCannon.dm" #include "code\game\objects\items\powerfist.dm" -#include "code\game\objects\items\RCD.dm" -#include "code\game\objects\items\RCL.dm" #include "code\game\objects\items\religion.dm" -#include "code\game\objects\items\RPD.dm" -#include "code\game\objects\items\RSF.dm" #include "code\game\objects\items\scrolls.dm" #include "code\game\objects\items\sharpener.dm" -#include "code\game\objects\items\shields.dm" #include "code\game\objects\items\shooting_range.dm" #include "code\game\objects\items\signs.dm" #include "code\game\objects\items\singularityhammer.dm" -#include "code\game\objects\items\stunbaton.dm" #include "code\game\objects\items\taster.dm" -#include "code\game\objects\items\teleportation.dm" -#include "code\game\objects\items\teleprod.dm" #include "code\game\objects\items\theft_tools.dm" #include "code\game\objects\items\toys.dm" #include "code\game\objects\items\trash.dm" #include "code\game\objects\items\twohanded.dm" #include "code\game\objects\items\vending_items.dm" #include "code\game\objects\items\weaponry.dm" -#include "code\game\objects\items\circuitboards\circuitboard.dm" -#include "code\game\objects\items\circuitboards\computer_circuitboards.dm" -#include "code\game\objects\items\circuitboards\machine_circuitboards.dm" -#include "code\game\objects\items\devices\aicard.dm" #include "code\game\objects\items\devices\anomaly_neutralizer.dm" #include "code\game\objects\items\devices\beacon.dm" -#include "code\game\objects\items\devices\camera_bug.dm" #include "code\game\objects\items\devices\chameleonproj.dm" #include "code\game\objects\items\devices\desynchronizer.dm" -#include "code\game\objects\items\devices\electroadaptive_pseudocircuit.dm" #include "code\game\objects\items\devices\flashlight.dm" #include "code\game\objects\items\devices\forcefieldprojector.dm" #include "code\game\objects\items\devices\geiger_counter.dm" #include "code\game\objects\items\devices\gps.dm" #include "code\game\objects\items\devices\instruments.dm" -#include "code\game\objects\items\devices\laserpointer.dm" #include "code\game\objects\items\devices\lightreplacer.dm" #include "code\game\objects\items\devices\megaphone.dm" -#include "code\game\objects\items\devices\multitool.dm" -#include "code\game\objects\items\devices\paicard.dm" #include "code\game\objects\items\devices\pipe_painter.dm" -#include "code\game\objects\items\devices\powersink.dm" -#include "code\game\objects\items\devices\pressureplates.dm" -#include "code\game\objects\items\devices\quantum_keycard.dm" #include "code\game\objects\items\devices\reverse_bear_trap.dm" -#include "code\game\objects\items\devices\scanners.dm" -#include "code\game\objects\items\devices\sensor_device.dm" #include "code\game\objects\items\devices\swapper.dm" #include "code\game\objects\items\devices\taperecorder.dm" -#include "code\game\objects\items\devices\traitordevices.dm" #include "code\game\objects\items\devices\transfer_valve.dm" -#include "code\game\objects\items\devices\PDA\cart.dm" -#include "code\game\objects\items\devices\PDA\PDA.dm" -#include "code\game\objects\items\devices\PDA\PDA_types.dm" -#include "code\game\objects\items\devices\PDA\radio.dm" -#include "code\game\objects\items\devices\PDA\virus_cart.dm" -#include "code\game\objects\items\devices\radio\electropack.dm" -#include "code\game\objects\items\devices\radio\encryptionkey.dm" -#include "code\game\objects\items\devices\radio\headset.dm" -#include "code\game\objects\items\devices\radio\intercom.dm" -#include "code\game\objects\items\devices\radio\radio.dm" #include "code\game\objects\items\grenades\antigravity.dm" -#include "code\game\objects\items\grenades\chem_grenade.dm" #include "code\game\objects\items\grenades\clusterbuster.dm" #include "code\game\objects\items\grenades\emgrenade.dm" #include "code\game\objects\items\grenades\flashbang.dm" #include "code\game\objects\items\grenades\ghettobomb.dm" #include "code\game\objects\items\grenades\grenade.dm" -#include "code\game\objects\items\grenades\plastic.dm" #include "code\game\objects\items\grenades\smokebomb.dm" #include "code\game\objects\items\grenades\spawnergrenade.dm" #include "code\game\objects\items\grenades\syndieminibomb.dm" #include "code\game\objects\items\implants\implant.dm" -#include "code\game\objects\items\implants\implant_abductor.dm" #include "code\game\objects\items\implants\implant_chem.dm" #include "code\game\objects\items\implants\implant_clown.dm" #include "code\game\objects\items\implants\implant_exile.dm" @@ -1139,14 +952,8 @@ #include "code\game\objects\items\implants\implantchair.dm" #include "code\game\objects\items\implants\implanter.dm" #include "code\game\objects\items\implants\implantpad.dm" -#include "code\game\objects\items\implants\implantuplink.dm" -#include "code\game\objects\items\melee\energy.dm" #include "code\game\objects\items\melee\misc.dm" #include "code\game\objects\items\melee\transforming.dm" -#include "code\game\objects\items\robot\ai_upgrades.dm" -#include "code\game\objects\items\robot\robot_items.dm" -#include "code\game\objects\items\robot\robot_parts.dm" -#include "code\game\objects\items\robot\robot_upgrades.dm" #include "code\game\objects\items\rogueitems\bags.dm" #include "code\game\objects\items\rogueitems\bait.dm" #include "code\game\objects\items\rogueitems\bells.dm" @@ -1162,6 +969,7 @@ #include "code\game\objects\items\rogueitems\keys.dm" #include "code\game\objects\items\rogueitems\literary.dm" #include "code\game\objects\items\rogueitems\magic.dm" +#include "code\game\objects\items\rogueitems\mimery_book.dm" #include "code\game\objects\items\rogueitems\natural.dm" #include "code\game\objects\items\rogueitems\needle.dm" #include "code\game\objects\items\rogueitems\painting.dm" @@ -1176,6 +984,7 @@ #include "code\game\objects\items\rogueitems\natural\clothfibersthorn.dm" #include "code\game\objects\items\rogueitems\natural\dirtclod.dm" #include "code\game\objects\items\rogueitems\natural\feather.dm" +#include "code\game\objects\items\rogueitems\natural\glass.dm" #include "code\game\objects\items\rogueitems\natural\poo.dm" #include "code\game\objects\items\rogueitems\natural\stones.dm" #include "code\game\objects\items\rogueitems\natural\wood.dm" @@ -1203,11 +1012,9 @@ #include "code\game\objects\items\stacks\medical.dm" #include "code\game\objects\items\stacks\rods.dm" #include "code\game\objects\items\stacks\stack.dm" -#include "code\game\objects\items\stacks\telecrystal.dm" #include "code\game\objects\items\stacks\wrap.dm" #include "code\game\objects\items\stacks\sheets\glass.dm" #include "code\game\objects\items\stacks\sheets\leather.dm" -#include "code\game\objects\items\stacks\sheets\light.dm" #include "code\game\objects\items\stacks\sheets\mineral.dm" #include "code\game\objects\items\stacks\sheets\sheet_types.dm" #include "code\game\objects\items\stacks\sheets\sheets.dm" @@ -1226,9 +1033,7 @@ #include "code\game\objects\items\storage\secure.dm" #include "code\game\objects\items\storage\storage.dm" #include "code\game\objects\items\storage\toolbox.dm" -#include "code\game\objects\items\storage\uplink_kits.dm" #include "code\game\objects\items\storage\wallets.dm" -#include "code\game\objects\items\tanks\jetpack.dm" #include "code\game\objects\items\tanks\tank_types.dm" #include "code\game\objects\items\tanks\tanks.dm" #include "code\game\objects\items\tanks\watertank.dm" @@ -1237,19 +1042,20 @@ #include "code\game\objects\items\tools\weldingtool.dm" #include "code\game\objects\items\tools\wirecutters.dm" #include "code\game\objects\items\tools\wrench.dm" -#include "code\game\objects\structures\ai_core.dm" -#include "code\game\objects\structures\aliens.dm" +#include "code\game\objects\lighting\_base_light.dm" +#include "code\game\objects\lighting\_base_roguelight.dm" +#include "code\game\objects\lighting\_base_roguestreet.dm" +#include "code\game\objects\lighting\lantern_post.dm" +#include "code\game\objects\lighting\rogue_fires.dm" +#include "code\game\objects\lighting\sunlight.dm" #include "code\game\objects\structures\artstuff.dm" +#include "code\game\objects\structures\barricades.dm" #include "code\game\objects\structures\barsigns.dm" #include "code\game\objects\structures\bearpelt.dm" -#include "code\game\objects\structures\bedsheet_bin.dm" #include "code\game\objects\structures\displaycase.dm" #include "code\game\objects\structures\divine.dm" -#include "code\game\objects\structures\door_assembly.dm" -#include "code\game\objects\structures\door_assembly_types.dm" #include "code\game\objects\structures\dresser.dm" #include "code\game\objects\structures\dystation.dm" -#include "code\game\objects\structures\electricchair.dm" #include "code\game\objects\structures\extinguisher.dm" #include "code\game\objects\structures\false_walls.dm" #include "code\game\objects\structures\fence.dm" @@ -1257,7 +1063,6 @@ #include "code\game\objects\structures\fireplace.dm" #include "code\game\objects\structures\flora.dm" #include "code\game\objects\structures\fluff.dm" -#include "code\game\objects\structures\fugitive_role_spawners.dm" #include "code\game\objects\structures\ghost_role_spawners.dm" #include "code\game\objects\structures\girders.dm" #include "code\game\objects\structures\grille.dm" @@ -1266,7 +1071,6 @@ #include "code\game\objects\structures\headpike.dm" #include "code\game\objects\structures\hell.dm" #include "code\game\objects\structures\hivebot.dm" -#include "code\game\objects\structures\holosign.dm" #include "code\game\objects\structures\janicart.dm" #include "code\game\objects\structures\kitchen_spike.dm" #include "code\game\objects\structures\ladders.dm" @@ -1306,9 +1110,7 @@ #include "code\game\objects\structures\walldeco.dm" #include "code\game\objects\structures\watercloset.dm" #include "code\game\objects\structures\well.dm" -#include "code\game\objects\structures\windoor_assembly.dm" #include "code\game\objects\structures\window.dm" -#include "code\game\objects\structures\beds_chairs\alien_nest.dm" #include "code\game\objects\structures\beds_chairs\bed.dm" #include "code\game\objects\structures\beds_chairs\chair.dm" #include "code\game\objects\structures\beds_chairs\pew.dm" @@ -1319,25 +1121,10 @@ #include "code\game\objects\structures\crates_lockers\roguetown.dm" #include "code\game\objects\structures\crates_lockers\closets\bodybag.dm" #include "code\game\objects\structures\crates_lockers\closets\cardboardbox.dm" -#include "code\game\objects\structures\crates_lockers\closets\fitness.dm" #include "code\game\objects\structures\crates_lockers\closets\gimmick.dm" #include "code\game\objects\structures\crates_lockers\closets\infinite.dm" -#include "code\game\objects\structures\crates_lockers\closets\job_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\l3closet.dm" -#include "code\game\objects\structures\crates_lockers\closets\syndicate.dm" -#include "code\game\objects\structures\crates_lockers\closets\utility_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\wardrobe.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\bar.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\cargo.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\engineering.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\freezer.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\hydroponics.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\medical.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\misc.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\personal.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\security.dm" #include "code\game\objects\structures\crates_lockers\crates\bins.dm" #include "code\game\objects\structures\crates_lockers\crates\critter.dm" #include "code\game\objects\structures\crates_lockers\crates\large.dm" @@ -1434,10 +1221,8 @@ #include "code\modules\admin\verbs\adminjump.dm" #include "code\modules\admin\verbs\adminpm.dm" #include "code\modules\admin\verbs\adminsay.dm" -#include "code\modules\admin\verbs\atmosdebug.dm" #include "code\modules\admin\verbs\beakerpanel.dm" #include "code\modules\admin\verbs\bluespacearty.dm" -#include "code\modules\admin\verbs\borgpanel.dm" #include "code\modules\admin\verbs\BrokenInhands.dm" #include "code\modules\admin\verbs\cinematic.dm" #include "code\modules\admin\verbs\deadsay.dm" @@ -1447,12 +1232,10 @@ #include "code\modules\admin\verbs\fps.dm" #include "code\modules\admin\verbs\getlogs.dm" #include "code\modules\admin\verbs\individual_logging.dm" -#include "code\modules\admin\verbs\machine_upgrade.dm" #include "code\modules\admin\verbs\manipulate_organs.dm" #include "code\modules\admin\verbs\map_template_loadverb.dm" #include "code\modules\admin\verbs\mapping.dm" #include "code\modules\admin\verbs\maprotation.dm" -#include "code\modules\admin\verbs\onlyone.dm" #include "code\modules\admin\verbs\panicbunker.dm" #include "code\modules\admin\verbs\playsound.dm" #include "code\modules\admin\verbs\possess.dm" @@ -1461,8 +1244,6 @@ #include "code\modules\admin\verbs\reestablish_db_connection.dm" #include "code\modules\admin\verbs\schizohelp.dm" #include "code\modules\admin\verbs\shuttlepanel.dm" -#include "code\modules\admin\verbs\spawnobjasmob.dm" -#include "code\modules\admin\verbs\tripAI.dm" #include "code\modules\admin\verbs\SDQL2\SDQL_2.dm" #include "code\modules\admin\verbs\SDQL2\SDQL_2_parser.dm" #include "code\modules\admin\verbs\SDQL2\SDQL_2_wrappers.dm" @@ -1481,33 +1262,6 @@ #include "code\modules\antagonists\_common\antag_hud.dm" #include "code\modules\antagonists\_common\antag_spawner.dm" #include "code\modules\antagonists\_common\antag_team.dm" -#include "code\modules\antagonists\abductor\abductor.dm" -#include "code\modules\antagonists\abductor\ice_abductor.dm" -#include "code\modules\antagonists\abductor\abductee\abductee_objectives.dm" -#include "code\modules\antagonists\abductor\equipment\abduction_gear.dm" -#include "code\modules\antagonists\abductor\equipment\abduction_outfits.dm" -#include "code\modules\antagonists\abductor\equipment\abduction_surgery.dm" -#include "code\modules\antagonists\abductor\equipment\gland.dm" -#include "code\modules\antagonists\abductor\equipment\glands\access.dm" -#include "code\modules\antagonists\abductor\equipment\glands\blood.dm" -#include "code\modules\antagonists\abductor\equipment\glands\chem.dm" -#include "code\modules\antagonists\abductor\equipment\glands\egg.dm" -#include "code\modules\antagonists\abductor\equipment\glands\electric.dm" -#include "code\modules\antagonists\abductor\equipment\glands\heal.dm" -#include "code\modules\antagonists\abductor\equipment\glands\mindshock.dm" -#include "code\modules\antagonists\abductor\equipment\glands\plasma.dm" -#include "code\modules\antagonists\abductor\equipment\glands\quantum.dm" -#include "code\modules\antagonists\abductor\equipment\glands\slime.dm" -#include "code\modules\antagonists\abductor\equipment\glands\spider.dm" -#include "code\modules\antagonists\abductor\equipment\glands\transform.dm" -#include "code\modules\antagonists\abductor\equipment\glands\trauma.dm" -#include "code\modules\antagonists\abductor\equipment\glands\ventcrawl.dm" -#include "code\modules\antagonists\abductor\equipment\glands\viral.dm" -#include "code\modules\antagonists\abductor\machinery\camera.dm" -#include "code\modules\antagonists\abductor\machinery\console.dm" -#include "code\modules\antagonists\abductor\machinery\dispenser.dm" -#include "code\modules\antagonists\abductor\machinery\experiment.dm" -#include "code\modules\antagonists\abductor\machinery\pad.dm" #include "code\modules\antagonists\ashwalker\ashwalker.dm" #include "code\modules\antagonists\blob\blob.dm" #include "code\modules\antagonists\blob\blob_mobs.dm" @@ -1539,43 +1293,7 @@ #include "code\modules\antagonists\blob\structures\shield.dm" #include "code\modules\antagonists\blood_contract\blood_contract.dm" #include "code\modules\antagonists\brainwashing\brainwashing.dm" -#include "code\modules\antagonists\brother\brother.dm" -#include "code\modules\antagonists\changeling\cellular_emporium.dm" -#include "code\modules\antagonists\changeling\changeling.dm" -#include "code\modules\antagonists\changeling\changeling_power.dm" -#include "code\modules\antagonists\changeling\powers\absorb.dm" -#include "code\modules\antagonists\changeling\powers\adrenaline.dm" -#include "code\modules\antagonists\changeling\powers\augmented_eyesight.dm" -#include "code\modules\antagonists\changeling\powers\biodegrade.dm" -#include "code\modules\antagonists\changeling\powers\chameleon_skin.dm" -#include "code\modules\antagonists\changeling\powers\digitalcamo.dm" -#include "code\modules\antagonists\changeling\powers\fakedeath.dm" -#include "code\modules\antagonists\changeling\powers\fleshmend.dm" -#include "code\modules\antagonists\changeling\powers\headcrab.dm" -#include "code\modules\antagonists\changeling\powers\hivemind.dm" -#include "code\modules\antagonists\changeling\powers\humanform.dm" -#include "code\modules\antagonists\changeling\powers\lesserform.dm" -#include "code\modules\antagonists\changeling\powers\linglink.dm" -#include "code\modules\antagonists\changeling\powers\mimic_voice.dm" -#include "code\modules\antagonists\changeling\powers\mutations.dm" -#include "code\modules\antagonists\changeling\powers\panacea.dm" -#include "code\modules\antagonists\changeling\powers\pheromone_receptors.dm" -#include "code\modules\antagonists\changeling\powers\regenerate.dm" -#include "code\modules\antagonists\changeling\powers\shriek.dm" -#include "code\modules\antagonists\changeling\powers\spiders.dm" -#include "code\modules\antagonists\changeling\powers\strained_muscles.dm" -#include "code\modules\antagonists\changeling\powers\tiny_prick.dm" -#include "code\modules\antagonists\changeling\powers\transform.dm" #include "code\modules\antagonists\creep\creep.dm" -#include "code\modules\antagonists\cult\blood_magic.dm" -#include "code\modules\antagonists\cult\cult.dm" -#include "code\modules\antagonists\cult\cult_comms.dm" -#include "code\modules\antagonists\cult\cult_items.dm" -#include "code\modules\antagonists\cult\cult_structures.dm" -#include "code\modules\antagonists\cult\cult_turf_overlay.dm" -#include "code\modules\antagonists\cult\ritual.dm" -#include "code\modules\antagonists\cult\rune_spawn_action.dm" -#include "code\modules\antagonists\cult\runes.dm" #include "code\modules\antagonists\devil\devil.dm" #include "code\modules\antagonists\devil\devil_helpers.dm" #include "code\modules\antagonists\devil\imp\imp.dm" @@ -1586,35 +1304,17 @@ #include "code\modules\antagonists\disease\disease_abilities.dm" #include "code\modules\antagonists\disease\disease_datum.dm" #include "code\modules\antagonists\disease\disease_disease.dm" -#include "code\modules\antagonists\disease\disease_event.dm" #include "code\modules\antagonists\disease\disease_mob.dm" -#include "code\modules\antagonists\ert\ert.dm" -#include "code\modules\antagonists\fugitive\fugitive.dm" -#include "code\modules\antagonists\fugitive\fugitive_outfits.dm" -#include "code\modules\antagonists\fugitive\fugitive_ship.dm" -#include "code\modules\antagonists\fugitive\hunter.dm" #include "code\modules\antagonists\greentext\greentext.dm" -#include "code\modules\antagonists\highlander\highlander.dm" #include "code\modules\antagonists\magic_servant\servant.dm" #include "code\modules\antagonists\monkey\monkey.dm" -#include "code\modules\antagonists\morph\morph.dm" #include "code\modules\antagonists\morph\morph_antag.dm" #include "code\modules\antagonists\nightmare\nightmare.dm" -#include "code\modules\antagonists\ninja\ninja.dm" -#include "code\modules\antagonists\nukeop\clownop.dm" -#include "code\modules\antagonists\nukeop\nukeop.dm" -#include "code\modules\antagonists\nukeop\equipment\borgchameleon.dm" -#include "code\modules\antagonists\nukeop\equipment\nuclear_challenge.dm" -#include "code\modules\antagonists\nukeop\equipment\nuclearbomb.dm" -#include "code\modules\antagonists\nukeop\equipment\pinpointer.dm" -#include "code\modules\antagonists\official\official.dm" -#include "code\modules\antagonists\pirate\pirate.dm" #include "code\modules\antagonists\revenant\revenant.dm" #include "code\modules\antagonists\revenant\revenant_abilities.dm" #include "code\modules\antagonists\revenant\revenant_antag.dm" #include "code\modules\antagonists\revenant\revenant_blight.dm" #include "code\modules\antagonists\revenant\revenant_spawn_event.dm" -#include "code\modules\antagonists\revolution\revolution.dm" #include "code\modules\antagonists\roguetown\roleobjs\prisoner.dm" #include "code\modules\antagonists\roguetown\roleobjs\purishep.dm" #include "code\modules\antagonists\roguetown\roleobjs\skeleton.dm" @@ -1625,23 +1325,16 @@ #include "code\modules\antagonists\roguetown\villain\peasantrebel.dm" #include "code\modules\antagonists\roguetown\villain\vampire.dm" #include "code\modules\antagonists\roguetown\villain\vampirelord.dm" -#include "code\modules\antagonists\roguetown\villain\werewolf.dm" #include "code\modules\antagonists\roguetown\villain\zizocult.dm" #include "code\modules\antagonists\roguetown\villain\zomble.dm" +#include "code\modules\antagonists\roguetown\villain\werewolf\werewolf.dm" +#include "code\modules\antagonists\roguetown\villain\werewolf\werewolf_spells.dm" +#include "code\modules\antagonists\roguetown\villain\werewolf\werewolf_transformation.dm" #include "code\modules\antagonists\santa\santa.dm" #include "code\modules\antagonists\separatist\separatist.dm" -#include "code\modules\antagonists\slaughter\slaughter.dm" -#include "code\modules\antagonists\slaughter\slaughter_antag.dm" -#include "code\modules\antagonists\slaughter\slaughterevent.dm" #include "code\modules\antagonists\space_dragon\space_dragon.dm" #include "code\modules\antagonists\survivalist\survivalist.dm" -#include "code\modules\antagonists\swarmer\swarmer.dm" -#include "code\modules\antagonists\swarmer\swarmer_event.dm" #include "code\modules\antagonists\traitor\datum_traitor.dm" -#include "code\modules\antagonists\traitor\syndicate_contract.dm" -#include "code\modules\antagonists\traitor\equipment\contractor.dm" -#include "code\modules\antagonists\traitor\equipment\Malf_Modules.dm" -#include "code\modules\antagonists\traitor\IAA\internal_affairs.dm" #include "code\modules\antagonists\valentines\heartbreaker.dm" #include "code\modules\antagonists\valentines\valentine.dm" #include "code\modules\antagonists\wishgranter\wishgranter.dm" @@ -1649,20 +1342,14 @@ #include "code\modules\antagonists\wizard\equipment\artefact.dm" #include "code\modules\antagonists\wizard\equipment\soulstone.dm" #include "code\modules\antagonists\wizard\equipment\spellbook.dm" -#include "code\modules\antagonists\xeno\xeno.dm" #include "code\modules\assembly\assembly.dm" #include "code\modules\assembly\bomb.dm" -#include "code\modules\assembly\doorcontrol.dm" -#include "code\modules\assembly\flash.dm" -#include "code\modules\assembly\health.dm" #include "code\modules\assembly\helpers.dm" #include "code\modules\assembly\holder.dm" #include "code\modules\assembly\igniter.dm" #include "code\modules\assembly\infrared.dm" #include "code\modules\assembly\mousetrap.dm" #include "code\modules\assembly\proximity.dm" -#include "code\modules\assembly\shock_kit.dm" -#include "code\modules\assembly\signaler.dm" #include "code\modules\assembly\timer.dm" #include "code\modules\assembly\voice.dm" #include "code\modules\atmospherics\multiz.dm" @@ -1673,12 +1360,10 @@ #include "code\modules\atmospherics\gasmixtures\gas_types.dm" #include "code\modules\atmospherics\gasmixtures\immutable_mixtures.dm" #include "code\modules\atmospherics\gasmixtures\reactions.dm" -#include "code\modules\atmospherics\machinery\airalarm.dm" #include "code\modules\atmospherics\machinery\atmosmachinery.dm" #include "code\modules\atmospherics\machinery\datum_pipeline.dm" #include "code\modules\atmospherics\machinery\components\components_base.dm" #include "code\modules\atmospherics\machinery\components\binary_devices\binary_devices.dm" -#include "code\modules\atmospherics\machinery\components\binary_devices\circulator.dm" #include "code\modules\atmospherics\machinery\components\binary_devices\dp_vent_pump.dm" #include "code\modules\atmospherics\machinery\components\binary_devices\passive_gate.dm" #include "code\modules\atmospherics\machinery\components\binary_devices\pump.dm" @@ -1687,18 +1372,14 @@ #include "code\modules\atmospherics\machinery\components\trinary_devices\filter.dm" #include "code\modules\atmospherics\machinery\components\trinary_devices\mixer.dm" #include "code\modules\atmospherics\machinery\components\trinary_devices\trinary_devices.dm" -#include "code\modules\atmospherics\machinery\components\unary_devices\cryo.dm" #include "code\modules\atmospherics\machinery\components\unary_devices\heat_exchanger.dm" #include "code\modules\atmospherics\machinery\components\unary_devices\outlet_injector.dm" #include "code\modules\atmospherics\machinery\components\unary_devices\passive_vent.dm" #include "code\modules\atmospherics\machinery\components\unary_devices\portables_connector.dm" #include "code\modules\atmospherics\machinery\components\unary_devices\tank.dm" -#include "code\modules\atmospherics\machinery\components\unary_devices\thermomachine.dm" #include "code\modules\atmospherics\machinery\components\unary_devices\unary_devices.dm" #include "code\modules\atmospherics\machinery\components\unary_devices\vent_pump.dm" #include "code\modules\atmospherics\machinery\components\unary_devices\vent_scrubber.dm" -#include "code\modules\atmospherics\machinery\other\meter.dm" -#include "code\modules\atmospherics\machinery\other\miner.dm" #include "code\modules\atmospherics\machinery\pipes\layermanifold.dm" #include "code\modules\atmospherics\machinery\pipes\manifold.dm" #include "code\modules\atmospherics\machinery\pipes\manifold4w.dm" @@ -1715,8 +1396,6 @@ #include "code\modules\atmospherics\machinery\portable\pump.dm" #include "code\modules\atmospherics\machinery\portable\scrubber.dm" #include "code\modules\awaymissions\away_props.dm" -#include "code\modules\awaymissions\bluespaceartillery.dm" -#include "code\modules\awaymissions\capture_the_flag.dm" #include "code\modules\awaymissions\corpse.dm" #include "code\modules\awaymissions\exile.dm" #include "code\modules\awaymissions\gateway.dm" @@ -1724,7 +1403,6 @@ #include "code\modules\awaymissions\signpost.dm" #include "code\modules\awaymissions\super_secret_room.dm" #include "code\modules\awaymissions\zlevel.dm" -#include "code\modules\awaymissions\mission_code\Academy.dm" #include "code\modules\awaymissions\mission_code\Cabin.dm" #include "code\modules\awaymissions\mission_code\caves.dm" #include "code\modules\awaymissions\mission_code\centcomAway.dm" @@ -1732,9 +1410,7 @@ #include "code\modules\awaymissions\mission_code\moonoutpost19.dm" #include "code\modules\awaymissions\mission_code\murderdome.dm" #include "code\modules\awaymissions\mission_code\research.dm" -#include "code\modules\awaymissions\mission_code\snowdin.dm" #include "code\modules\awaymissions\mission_code\spacebattle.dm" -#include "code\modules\awaymissions\mission_code\stationCollision.dm" #include "code\modules\awaymissions\mission_code\undergroundoutpost45.dm" #include "code\modules\awaymissions\mission_code\wildwest.dm" #include "code\modules\buildmode\bm_mode.dm" @@ -1750,41 +1426,17 @@ #include "code\modules\buildmode\submodes\mapgen.dm" #include "code\modules\buildmode\submodes\throwing.dm" #include "code\modules\buildmode\submodes\variable_edit.dm" -#include "code\modules\cargo\bounty.dm" -#include "code\modules\cargo\bounty_console.dm" #include "code\modules\cargo\centcom_podlauncher.dm" -#include "code\modules\cargo\console.dm" -#include "code\modules\cargo\export_scanner.dm" #include "code\modules\cargo\exports.dm" -#include "code\modules\cargo\expressconsole.dm" #include "code\modules\cargo\gondolapod.dm" #include "code\modules\cargo\order.dm" -#include "code\modules\cargo\packs.dm" #include "code\modules\cargo\supplypod.dm" -#include "code\modules\cargo\supplypod_beacon.dm" -#include "code\modules\cargo\bounties\assistant.dm" -#include "code\modules\cargo\bounties\chef.dm" -#include "code\modules\cargo\bounties\engineering.dm" -#include "code\modules\cargo\bounties\item.dm" -#include "code\modules\cargo\bounties\mech.dm" -#include "code\modules\cargo\bounties\medical.dm" -#include "code\modules\cargo\bounties\mining.dm" -#include "code\modules\cargo\bounties\reagent.dm" -#include "code\modules\cargo\bounties\science.dm" -#include "code\modules\cargo\bounties\security.dm" -#include "code\modules\cargo\bounties\slime.dm" -#include "code\modules\cargo\bounties\special.dm" -#include "code\modules\cargo\bounties\virus.dm" #include "code\modules\cargo\exports\gear.dm" -#include "code\modules\cargo\exports\large_objects.dm" -#include "code\modules\cargo\exports\lavaland.dm" #include "code\modules\cargo\exports\manifest.dm" #include "code\modules\cargo\exports\materials.dm" -#include "code\modules\cargo\exports\parts.dm" #include "code\modules\cargo\exports\seeds.dm" #include "code\modules\cargo\exports\sheets.dm" -#include "code\modules\cargo\exports\tools.dm" -#include "code\modules\cargo\exports\weapons.dm" +#include "code\modules\cargo\packsrogue\_pack.dm" #include "code\modules\cargo\packsrogue\_rogue.dm" #include "code\modules\cargo\packsrogue\apparel.dm" #include "code\modules\cargo\packsrogue\armor.dm" @@ -1825,7 +1477,6 @@ #include "code\modules\client\verbs\ping.dm" #include "code\modules\client\verbs\suicide.dm" #include "code\modules\client\verbs\who.dm" -#include "code\modules\clothing\chameleon.dm" #include "code\modules\clothing\clothing.dm" #include "code\modules\clothing\ears\_ears.dm" #include "code\modules\clothing\glasses\_glasses.dm" @@ -1851,9 +1502,7 @@ #include "code\modules\clothing\masks\hailer.dm" #include "code\modules\clothing\masks\miscellaneous.dm" #include "code\modules\clothing\neck\_neck.dm" -#include "code\modules\clothing\outfits\ert.dm" #include "code\modules\clothing\outfits\event.dm" -#include "code\modules\clothing\outfits\plasmaman.dm" #include "code\modules\clothing\outfits\standard.dm" #include "code\modules\clothing\outfits\vr.dm" #include "code\modules\clothing\outfits\vv_outfit.dm" @@ -1878,21 +1527,13 @@ #include "code\modules\clothing\shoes\colour.dm" #include "code\modules\clothing\shoes\magboots.dm" #include "code\modules\clothing\shoes\miscellaneous.dm" -#include "code\modules\clothing\spacesuits\_spacesuits.dm" -#include "code\modules\clothing\spacesuits\chronosuit.dm" -#include "code\modules\clothing\spacesuits\hardsuit.dm" -#include "code\modules\clothing\spacesuits\miscellaneous.dm" -#include "code\modules\clothing\spacesuits\plasmamen.dm" -#include "code\modules\clothing\spacesuits\syndi.dm" #include "code\modules\clothing\suits\_suits.dm" #include "code\modules\clothing\suits\armor.dm" #include "code\modules\clothing\suits\bio.dm" #include "code\modules\clothing\suits\chaplainsuits.dm" #include "code\modules\clothing\suits\cloaks.dm" -#include "code\modules\clothing\suits\jobs.dm" #include "code\modules\clothing\suits\labcoat.dm" #include "code\modules\clothing\suits\miscellaneous.dm" -#include "code\modules\clothing\suits\reactive_armour.dm" #include "code\modules\clothing\suits\toggles.dm" #include "code\modules\clothing\suits\utility.dm" #include "code\modules\clothing\suits\wiz_robe.dm" @@ -1932,56 +1573,30 @@ #include "code\modules\droning\droning.dm" #include "code\modules\economy\_economy.dm" #include "code\modules\economy\account.dm" -#include "code\modules\economy\pay_stand.dm" #include "code\modules\emoji\emoji_parse.dm" #include "code\modules\error_handler\error_handler.dm" #include "code\modules\error_handler\error_viewer.dm" #include "code\modules\events\_event.dm" -#include "code\modules\events\abductor.dm" -#include "code\modules\events\alien_infestation.dm" #include "code\modules\events\anomaly.dm" #include "code\modules\events\anomaly_bluespace.dm" #include "code\modules\events\anomaly_flux.dm" #include "code\modules\events\anomaly_grav.dm" #include "code\modules\events\anomaly_pyro.dm" #include "code\modules\events\anomaly_vortex.dm" -#include "code\modules\events\aurora_caelus.dm" #include "code\modules\events\blob.dm" #include "code\modules\events\brain_trauma.dm" -#include "code\modules\events\brand_intelligence.dm" #include "code\modules\events\bureaucratic_error.dm" -#include "code\modules\events\camerafailure.dm" #include "code\modules\events\carp_migration.dm" -#include "code\modules\events\communications_blackout.dm" #include "code\modules\events\creep_awakening.dm" #include "code\modules\events\devil.dm" #include "code\modules\events\disease_outbreak.dm" -#include "code\modules\events\dust.dm" -#include "code\modules\events\electrical_storm.dm" #include "code\modules\events\fake_virus.dm" #include "code\modules\events\false_alarm.dm" -#include "code\modules\events\fugitive_spawning.dm" #include "code\modules\events\ghost_role.dm" -#include "code\modules\events\grid_check.dm" #include "code\modules\events\heart_attack.dm" -#include "code\modules\events\high_priority_bounty.dm" -#include "code\modules\events\immovable_rod.dm" -#include "code\modules\events\ion_storm.dm" -#include "code\modules\events\major_dust.dm" #include "code\modules\events\mass_hallucination.dm" -#include "code\modules\events\meateor_wave.dm" -#include "code\modules\events\meteor_wave.dm" #include "code\modules\events\mice_migration.dm" -#include "code\modules\events\nightmare.dm" -#include "code\modules\events\operative.dm" -#include "code\modules\events\pirates.dm" #include "code\modules\events\portal_storm.dm" -#include "code\modules\events\prison_break.dm" -#include "code\modules\events\processor_overload.dm" -#include "code\modules\events\radiation_storm.dm" -#include "code\modules\events\sentience.dm" -#include "code\modules\events\shuttle_loan.dm" -#include "code\modules\events\space_dragon.dm" #include "code\modules\events\spacevine.dm" #include "code\modules\events\spider_infestation.dm" #include "code\modules\events\spontaneous_appendicitis.dm" @@ -2007,7 +1622,6 @@ #include "code\modules\events\wizard\greentext.dm" #include "code\modules\events\wizard\imposter.dm" #include "code\modules\events\wizard\invincible.dm" -#include "code\modules\events\wizard\lava.dm" #include "code\modules\events\wizard\madness.dm" #include "code\modules\events\wizard\magicarp.dm" #include "code\modules\events\wizard\petsplosion.dm" @@ -2017,13 +1631,11 @@ #include "code\modules\events\wizard\summons.dm" #include "code\modules\fields\fields.dm" #include "code\modules\fields\gravity.dm" -#include "code\modules\fields\peaceborg_dampener.dm" #include "code\modules\fields\timestop.dm" #include "code\modules\fields\turf_objects.dm" #include "code\modules\flufftext\Dreaming.dm" #include "code\modules\flufftext\Hallucination.dm" #include "code\modules\food_and_drinks\food.dm" -#include "code\modules\food_and_drinks\pizzabox.dm" #include "code\modules\food_and_drinks\drinks\drinks.dm" #include "code\modules\food_and_drinks\drinks\drinks\bottle.dm" #include "code\modules\food_and_drinks\drinks\drinks\drinkingglass.dm" @@ -2047,86 +1659,32 @@ #include "code\modules\food_and_drinks\food\snacks_vend.dm" #include "code\modules\food_and_drinks\food\snacks\dough.dm" #include "code\modules\food_and_drinks\food\snacks\meat.dm" -#include "code\modules\food_and_drinks\kitchen_machinery\deep_fryer.dm" #include "code\modules\food_and_drinks\kitchen_machinery\food_cart.dm" -#include "code\modules\food_and_drinks\kitchen_machinery\gibber.dm" #include "code\modules\food_and_drinks\kitchen_machinery\grill.dm" #include "code\modules\food_and_drinks\kitchen_machinery\icecream_vat.dm" -#include "code\modules\food_and_drinks\kitchen_machinery\microwave.dm" -#include "code\modules\food_and_drinks\kitchen_machinery\monkeyrecycler.dm" -#include "code\modules\food_and_drinks\kitchen_machinery\processor.dm" -#include "code\modules\food_and_drinks\kitchen_machinery\smartfridge.dm" #include "code\modules\food_and_drinks\recipes\drinks_recipes.dm" #include "code\modules\food_and_drinks\recipes\food_mixtures.dm" -#include "code\modules\food_and_drinks\recipes\processor_recipes.dm" #include "code\modules\games\cas.dm" #include "code\modules\goonchat\browserOutput.dm" #include "code\modules\holiday\easter.dm" #include "code\modules\holiday\holidays.dm" -#include "code\modules\holodeck\area_copy.dm" -#include "code\modules\holodeck\computer.dm" -#include "code\modules\holodeck\holo_effect.dm" -#include "code\modules\holodeck\items.dm" -#include "code\modules\holodeck\mobs.dm" -#include "code\modules\holodeck\turfs.dm" -#include "code\modules\hydroponics\biogenerator.dm" -#include "code\modules\hydroponics\gene_modder.dm" #include "code\modules\hydroponics\grown.dm" #include "code\modules\hydroponics\growninedible.dm" #include "code\modules\hydroponics\hydroitemdefines.dm" -#include "code\modules\hydroponics\hydroponics.dm" #include "code\modules\hydroponics\plant_genes.dm" #include "code\modules\hydroponics\sample.dm" -#include "code\modules\hydroponics\seed_extractor.dm" #include "code\modules\hydroponics\seeds.dm" -#include "code\modules\hydroponics\beekeeping\beebox.dm" -#include "code\modules\hydroponics\beekeeping\beekeeper_suit.dm" -#include "code\modules\hydroponics\beekeeping\honey_frame.dm" -#include "code\modules\hydroponics\beekeeping\honeycomb.dm" #include "code\modules\hydroponics\grown\banana.dm" #include "code\modules\hydroponics\grown\garlic.dm" #include "code\modules\hydroponics\grown\kudzu.dm" #include "code\modules\hydroponics\grown\mushrooms.dm" #include "code\modules\hydroponics\grown\nettle.dm" #include "code\modules\hydroponics\grown\random.dm" -#include "code\modules\hydroponics\grown\replicapod.dm" #include "code\modules\hydroponics\grown\towercap.dm" #include "code\modules\jobs\access.dm" #include "code\modules\jobs\job_exp.dm" #include "code\modules\jobs\jobs.dm" #include "code\modules\jobs\job_types\_job.dm" -#include "code\modules\jobs\job_types\old\ai.dm" -#include "code\modules\jobs\job_types\old\assistant.dm" -#include "code\modules\jobs\job_types\old\atmospheric_technician.dm" -#include "code\modules\jobs\job_types\old\bartender.dm" -#include "code\modules\jobs\job_types\old\botanist.dm" -#include "code\modules\jobs\job_types\old\captain.dm" -#include "code\modules\jobs\job_types\old\cargo_technician.dm" -#include "code\modules\jobs\job_types\old\chaplain.dm" -#include "code\modules\jobs\job_types\old\chemist.dm" -#include "code\modules\jobs\job_types\old\chief_engineer.dm" -#include "code\modules\jobs\job_types\old\chief_medical_officer.dm" -#include "code\modules\jobs\job_types\old\clown.dm" -#include "code\modules\jobs\job_types\old\cook.dm" -#include "code\modules\jobs\job_types\old\curator.dm" -#include "code\modules\jobs\job_types\old\cyborg.dm" -#include "code\modules\jobs\job_types\old\detective.dm" -#include "code\modules\jobs\job_types\old\geneticist.dm" -#include "code\modules\jobs\job_types\old\head_of_personnel.dm" -#include "code\modules\jobs\job_types\old\head_of_security.dm" -#include "code\modules\jobs\job_types\old\janitor.dm" -#include "code\modules\jobs\job_types\old\lawyer.dm" -#include "code\modules\jobs\job_types\old\medical_doctor.dm" -#include "code\modules\jobs\job_types\old\mime.dm" -#include "code\modules\jobs\job_types\old\quartermaster.dm" -#include "code\modules\jobs\job_types\old\research_director.dm" -#include "code\modules\jobs\job_types\old\roboticist.dm" -#include "code\modules\jobs\job_types\old\scientist.dm" -#include "code\modules\jobs\job_types\old\security_officer.dm" -#include "code\modules\jobs\job_types\old\shaft_miner.dm" -#include "code\modules\jobs\job_types\old\station_engineer.dm" -#include "code\modules\jobs\job_types\old\virologist.dm" -#include "code\modules\jobs\job_types\old\warden.dm" #include "code\modules\jobs\job_types\roguetown\roguetown.dm" #include "code\modules\jobs\job_types\roguetown\statueitems.dm" #include "code\modules\jobs\job_types\roguetown\adventurer\adventurer.dm" @@ -2192,11 +1750,6 @@ #include "code\modules\jobs\job_types\roguetown\apprentices\servant.dm" #include "code\modules\jobs\job_types\roguetown\apprentices\squire.dm" #include "code\modules\jobs\job_types\roguetown\apprentices\wapprentice.dm" -#include "code\modules\jobs\job_types\roguetown\church\adept.dm" -#include "code\modules\jobs\job_types\roguetown\church\inquisitor.dm" -#include "code\modules\jobs\job_types\roguetown\church\monk.dm" -#include "code\modules\jobs\job_types\roguetown\church\priest.dm" -#include "code\modules\jobs\job_types\roguetown\church\templar.dm" #include "code\modules\jobs\job_types\roguetown\garrison\dungeoneer.dm" #include "code\modules\jobs\job_types\roguetown\garrison\garrisonarcher.dm" #include "code\modules\jobs\job_types\roguetown\garrison\garrisonguard.dm" @@ -2205,9 +1758,9 @@ #include "code\modules\jobs\job_types\roguetown\garrison\veteran.dm" #include "code\modules\jobs\job_types\roguetown\nobility\archivist.dm" #include "code\modules\jobs\job_types\roguetown\nobility\captain.dm" +#include "code\modules\jobs\job_types\roguetown\nobility\consort.dm" #include "code\modules\jobs\job_types\roguetown\nobility\feldsher.dm" #include "code\modules\jobs\job_types\roguetown\nobility\hand.dm" -#include "code\modules\jobs\job_types\roguetown\nobility\lady.dm" #include "code\modules\jobs\job_types\roguetown\nobility\lord.dm" #include "code\modules\jobs\job_types\roguetown\nobility\magician.dm" #include "code\modules\jobs\job_types\roguetown\nobility\merchant.dm" @@ -2215,6 +1768,7 @@ #include "code\modules\jobs\job_types\roguetown\nobility\steward.dm" #include "code\modules\jobs\job_types\roguetown\nobility\titles.dm" #include "code\modules\jobs\job_types\roguetown\other\deathknight.dm" +#include "code\modules\jobs\job_types\roguetown\other\hamletjobs.dm" #include "code\modules\jobs\job_types\roguetown\other\mercenary.dm" #include "code\modules\jobs\job_types\roguetown\other\skeleton.dm" #include "code\modules\jobs\job_types\roguetown\other\tester.dm" @@ -2222,25 +1776,32 @@ #include "code\modules\jobs\job_types\roguetown\other\merc_classes\blackoak.dm" #include "code\modules\jobs\job_types\roguetown\other\merc_classes\boltslinger.dm" #include "code\modules\jobs\job_types\roguetown\other\merc_classes\grenzelhoft.dm" +#include "code\modules\jobs\job_types\roguetown\other\merc_classes\marauder.dm" #include "code\modules\jobs\job_types\roguetown\other\merc_classes\steppesman.dm" #include "code\modules\jobs\job_types\roguetown\other\merc_classes\underdweller.dm" +#include "code\modules\jobs\job_types\roguetown\other\merc_classes\valorian.dm" #include "code\modules\jobs\job_types\roguetown\other\merc_classes\zybantine.dm" #include "code\modules\jobs\job_types\roguetown\peasants\bathmaid.dm" #include "code\modules\jobs\job_types\roguetown\peasants\beggar.dm" #include "code\modules\jobs\job_types\roguetown\peasants\butcher.dm" #include "code\modules\jobs\job_types\roguetown\peasants\butler.dm" #include "code\modules\jobs\job_types\roguetown\peasants\cook.dm" -#include "code\modules\jobs\job_types\roguetown\peasants\grabber.dm" -#include "code\modules\jobs\job_types\roguetown\peasants\gravedigger.dm" #include "code\modules\jobs\job_types\roguetown\peasants\jester.dm" #include "code\modules\jobs\job_types\roguetown\peasants\prisoner.dm" #include "code\modules\jobs\job_types\roguetown\peasants\soilson.dm" +#include "code\modules\jobs\job_types\roguetown\peasants\stevedore.dm" #include "code\modules\jobs\job_types\roguetown\serfs\alchemist.dm" #include "code\modules\jobs\job_types\roguetown\serfs\blacksmith.dm" #include "code\modules\jobs\job_types\roguetown\serfs\innkeep.dm" #include "code\modules\jobs\job_types\roguetown\serfs\mason.dm" #include "code\modules\jobs\job_types\roguetown\serfs\scribe.dm" #include "code\modules\jobs\job_types\roguetown\serfs\tailor.dm" +#include "code\modules\jobs\job_types\roguetown\temple\acolyte.dm" +#include "code\modules\jobs\job_types\roguetown\temple\adept.dm" +#include "code\modules\jobs\job_types\roguetown\temple\gravekeeper.dm" +#include "code\modules\jobs\job_types\roguetown\temple\inquisitor.dm" +#include "code\modules\jobs\job_types\roguetown\temple\priest.dm" +#include "code\modules\jobs\job_types\roguetown\temple\templar.dm" #include "code\modules\keybindings\bindings_atom.dm" #include "code\modules\keybindings\bindings_carbon.dm" #include "code\modules\keybindings\bindings_client.dm" @@ -2277,10 +1838,12 @@ #include "code\modules\library\book.dm" #include "code\modules\library\lib_codex_gigas.dm" #include "code\modules\library\lib_items.dm" +#include "code\modules\library\lib_machines.dm" #include "code\modules\library\random_books.dm" #include "code\modules\library\soapstone.dm" #include "code\modules\lighting\lighting_area.dm" #include "code\modules\lighting\lighting_atom.dm" +#include "code\modules\lighting\lighting_atom_additions.dm" #include "code\modules\lighting\lighting_corner.dm" #include "code\modules\lighting\lighting_object.dm" #include "code\modules\lighting\lighting_setup.dm" @@ -2292,6 +1855,7 @@ #include "code\modules\mapping\reader.dm" #include "code\modules\mapping\ruins.dm" #include "code\modules\mapping\verify.dm" +#include "code\modules\mapping\roguetown\npc_outfit_equipper.dm" #include "code\modules\mapping\space_management\multiz_helpers.dm" #include "code\modules\mapping\space_management\space_level.dm" #include "code\modules\mapping\space_management\space_reservation.dm" @@ -2299,35 +1863,19 @@ #include "code\modules\mapping\space_management\traits.dm" #include "code\modules\mapping\space_management\zlevel_manager.dm" #include "code\modules\mining\abandoned_crates.dm" -#include "code\modules\mining\aux_base.dm" -#include "code\modules\mining\aux_base_camera.dm" #include "code\modules\mining\fulton.dm" -#include "code\modules\mining\machine_processing.dm" -#include "code\modules\mining\machine_redemption.dm" -#include "code\modules\mining\machine_silo.dm" -#include "code\modules\mining\machine_stacking.dm" -#include "code\modules\mining\machine_unloading.dm" -#include "code\modules\mining\machine_vending.dm" #include "code\modules\mining\mine_items.dm" -#include "code\modules\mining\minebot.dm" -#include "code\modules\mining\mint.dm" #include "code\modules\mining\money_bag.dm" #include "code\modules\mining\ores_coins.dm" #include "code\modules\mining\satchel_ore_boxdm.dm" #include "code\modules\mining\shelters.dm" -#include "code\modules\mining\equipment\explorer_gear.dm" #include "code\modules\mining\equipment\kinetic_crusher.dm" #include "code\modules\mining\equipment\lazarus_injector.dm" #include "code\modules\mining\equipment\marker_beacons.dm" -#include "code\modules\mining\equipment\mineral_scanner.dm" #include "code\modules\mining\equipment\mining_tools.dm" #include "code\modules\mining\equipment\regenerative_core.dm" #include "code\modules\mining\equipment\resonator.dm" -#include "code\modules\mining\equipment\survival_pod.dm" -#include "code\modules\mining\equipment\vendor_items.dm" #include "code\modules\mining\equipment\wormhole_jaunter.dm" -#include "code\modules\mining\laborcamp\laborshuttle.dm" -#include "code\modules\mining\laborcamp\laborstacker.dm" #include "code\modules\mining\lavaland\ash_flora.dm" #include "code\modules\mining\lavaland\necropolis_chests.dm" #include "code\modules\mining\lavaland\ruins\gym.dm" @@ -2342,7 +1890,6 @@ #include "code\modules\mob\mob_movement.dm" #include "code\modules\mob\mob_movespeed.dm" #include "code\modules\mob\mob_transformation_simple.dm" -#include "code\modules\mob\roguetransform.dm" #include "code\modules\mob\say.dm" #include "code\modules\mob\status_procs.dm" #include "code\modules\mob\transform_procs.dm" @@ -2396,8 +1943,6 @@ #include "code\modules\mob\living\brain\death.dm" #include "code\modules\mob\living\brain\emote.dm" #include "code\modules\mob\living\brain\life.dm" -#include "code\modules\mob\living\brain\MMI.dm" -#include "code\modules\mob\living\brain\posibrain.dm" #include "code\modules\mob\living\brain\say.dm" #include "code\modules\mob\living\brain\status_procs.dm" #include "code\modules\mob\living\carbon\carbon.dm" @@ -2416,40 +1961,6 @@ #include "code\modules\mob\living\carbon\status_procs.dm" #include "code\modules\mob\living\carbon\stress.dm" #include "code\modules\mob\living\carbon\update_icons.dm" -#include "code\modules\mob\living\carbon\alien\alien.dm" -#include "code\modules\mob\living\carbon\alien\alien_defense.dm" -#include "code\modules\mob\living\carbon\alien\damage_procs.dm" -#include "code\modules\mob\living\carbon\alien\death.dm" -#include "code\modules\mob\living\carbon\alien\emote.dm" -#include "code\modules\mob\living\carbon\alien\life.dm" -#include "code\modules\mob\living\carbon\alien\login.dm" -#include "code\modules\mob\living\carbon\alien\logout.dm" -#include "code\modules\mob\living\carbon\alien\organs.dm" -#include "code\modules\mob\living\carbon\alien\say.dm" -#include "code\modules\mob\living\carbon\alien\screen.dm" -#include "code\modules\mob\living\carbon\alien\status_procs.dm" -#include "code\modules\mob\living\carbon\alien\update_icons.dm" -#include "code\modules\mob\living\carbon\alien\humanoid\alien_powers.dm" -#include "code\modules\mob\living\carbon\alien\humanoid\death.dm" -#include "code\modules\mob\living\carbon\alien\humanoid\humanoid.dm" -#include "code\modules\mob\living\carbon\alien\humanoid\humanoid_defense.dm" -#include "code\modules\mob\living\carbon\alien\humanoid\inventory.dm" -#include "code\modules\mob\living\carbon\alien\humanoid\life.dm" -#include "code\modules\mob\living\carbon\alien\humanoid\queen.dm" -#include "code\modules\mob\living\carbon\alien\humanoid\update_icons.dm" -#include "code\modules\mob\living\carbon\alien\humanoid\caste\drone.dm" -#include "code\modules\mob\living\carbon\alien\humanoid\caste\hunter.dm" -#include "code\modules\mob\living\carbon\alien\humanoid\caste\praetorian.dm" -#include "code\modules\mob\living\carbon\alien\humanoid\caste\sentinel.dm" -#include "code\modules\mob\living\carbon\alien\larva\death.dm" -#include "code\modules\mob\living\carbon\alien\larva\inventory.dm" -#include "code\modules\mob\living\carbon\alien\larva\larva.dm" -#include "code\modules\mob\living\carbon\alien\larva\larva_defense.dm" -#include "code\modules\mob\living\carbon\alien\larva\life.dm" -#include "code\modules\mob\living\carbon\alien\larva\powers.dm" -#include "code\modules\mob\living\carbon\alien\larva\update_icons.dm" -#include "code\modules\mob\living\carbon\alien\special\alien_embryo.dm" -#include "code\modules\mob\living\carbon\alien\special\facehugger.dm" #include "code\modules\mob\living\carbon\human\damage_procs.dm" #include "code\modules\mob\living\carbon\human\death.dm" #include "code\modules\mob\living\carbon\human\dummy.dm" @@ -2474,6 +1985,7 @@ #include "code\modules\mob\living\carbon\human\npc\goblin.dm" #include "code\modules\mob\living\carbon\human\npc\orc.dm" #include "code\modules\mob\living\carbon\human\npc\skeleton.dm" +#include "code\modules\mob\living\carbon\human\npc\stonekeep_carbons.dm" #include "code\modules\mob\living\carbon\human\npc\zizombies.dm" #include "code\modules\mob\living\carbon\human\species_types\abductors.dm" #include "code\modules\mob\living\carbon\human\species_types\android.dm" @@ -2544,49 +2056,6 @@ #include "code\modules\mob\living\carbon\spirit\spirit.dm" #include "code\modules\mob\living\carbon\spirit\spirit_defense.dm" #include "code\modules\mob\living\carbon\spirit\update_icons.dm" -#include "code\modules\mob\living\silicon\damage_procs.dm" -#include "code\modules\mob\living\silicon\death.dm" -#include "code\modules\mob\living\silicon\examine.dm" -#include "code\modules\mob\living\silicon\laws.dm" -#include "code\modules\mob\living\silicon\login.dm" -#include "code\modules\mob\living\silicon\say.dm" -#include "code\modules\mob\living\silicon\silicon.dm" -#include "code\modules\mob\living\silicon\silicon_defense.dm" -#include "code\modules\mob\living\silicon\silicon_movement.dm" -#include "code\modules\mob\living\silicon\ai\ai.dm" -#include "code\modules\mob\living\silicon\ai\ai_defense.dm" -#include "code\modules\mob\living\silicon\ai\death.dm" -#include "code\modules\mob\living\silicon\ai\examine.dm" -#include "code\modules\mob\living\silicon\ai\laws.dm" -#include "code\modules\mob\living\silicon\ai\life.dm" -#include "code\modules\mob\living\silicon\ai\login.dm" -#include "code\modules\mob\living\silicon\ai\logout.dm" -#include "code\modules\mob\living\silicon\ai\multicam.dm" -#include "code\modules\mob\living\silicon\ai\say.dm" -#include "code\modules\mob\living\silicon\ai\vox_sounds.dm" -#include "code\modules\mob\living\silicon\ai\freelook\cameranet.dm" -#include "code\modules\mob\living\silicon\ai\freelook\chunk.dm" -#include "code\modules\mob\living\silicon\ai\freelook\eye.dm" -#include "code\modules\mob\living\silicon\ai\freelook\read_me.dm" -#include "code\modules\mob\living\silicon\pai\death.dm" -#include "code\modules\mob\living\silicon\pai\pai.dm" -#include "code\modules\mob\living\silicon\pai\pai_defense.dm" -#include "code\modules\mob\living\silicon\pai\pai_shell.dm" -#include "code\modules\mob\living\silicon\pai\personality.dm" -#include "code\modules\mob\living\silicon\pai\say.dm" -#include "code\modules\mob\living\silicon\pai\software.dm" -#include "code\modules\mob\living\silicon\robot\death.dm" -#include "code\modules\mob\living\silicon\robot\emote.dm" -#include "code\modules\mob\living\silicon\robot\examine.dm" -#include "code\modules\mob\living\silicon\robot\inventory.dm" -#include "code\modules\mob\living\silicon\robot\laws.dm" -#include "code\modules\mob\living\silicon\robot\life.dm" -#include "code\modules\mob\living\silicon\robot\login.dm" -#include "code\modules\mob\living\silicon\robot\robot.dm" -#include "code\modules\mob\living\silicon\robot\robot_defense.dm" -#include "code\modules\mob\living\silicon\robot\robot_modules.dm" -#include "code\modules\mob\living\silicon\robot\robot_movement.dm" -#include "code\modules\mob\living\silicon\robot\say.dm" #include "code\modules\mob\living\simple_animal\animal_defense.dm" #include "code\modules\mob\living\simple_animal\constructs.dm" #include "code\modules\mob\living\simple_animal\corpse.dm" @@ -2597,17 +2066,6 @@ #include "code\modules\mob\living\simple_animal\simple_animal.dm" #include "code\modules\mob\living\simple_animal\status_procs.dm" #include "code\modules\mob\living\simple_animal\topic.dm" -#include "code\modules\mob\living\simple_animal\bot\bot.dm" -#include "code\modules\mob\living\simple_animal\bot\cleanbot.dm" -#include "code\modules\mob\living\simple_animal\bot\construction.dm" -#include "code\modules\mob\living\simple_animal\bot\ed209bot.dm" -#include "code\modules\mob\living\simple_animal\bot\firebot.dm" -#include "code\modules\mob\living\simple_animal\bot\floorbot.dm" -#include "code\modules\mob\living\simple_animal\bot\honkbot.dm" -#include "code\modules\mob\living\simple_animal\bot\medbot.dm" -#include "code\modules\mob\living\simple_animal\bot\mulebot.dm" -#include "code\modules\mob\living\simple_animal\bot\secbot.dm" -#include "code\modules\mob\living\simple_animal\bot\SuperBeepsky.dm" #include "code\modules\mob\living\simple_animal\friendly\butterfly.dm" #include "code\modules\mob\living\simple_animal\friendly\cat.dm" #include "code\modules\mob\living\simple_animal\friendly\cockroach.dm" @@ -2615,21 +2073,11 @@ #include "code\modules\mob\living\simple_animal\friendly\dog.dm" #include "code\modules\mob\living\simple_animal\friendly\farm_animals.dm" #include "code\modules\mob\living\simple_animal\friendly\fox.dm" -#include "code\modules\mob\living\simple_animal\friendly\gondola.dm" #include "code\modules\mob\living\simple_animal\friendly\lizard.dm" #include "code\modules\mob\living\simple_animal\friendly\mouse.dm" #include "code\modules\mob\living\simple_animal\friendly\penguin.dm" #include "code\modules\mob\living\simple_animal\friendly\pet.dm" -#include "code\modules\mob\living\simple_animal\friendly\sloth.dm" #include "code\modules\mob\living\simple_animal\friendly\snake.dm" -#include "code\modules\mob\living\simple_animal\friendly\drone\_drone.dm" -#include "code\modules\mob\living\simple_animal\friendly\drone\drones_as_items.dm" -#include "code\modules\mob\living\simple_animal\friendly\drone\extra_drone_types.dm" -#include "code\modules\mob\living\simple_animal\friendly\drone\interaction.dm" -#include "code\modules\mob\living\simple_animal\friendly\drone\inventory.dm" -#include "code\modules\mob\living\simple_animal\friendly\drone\say.dm" -#include "code\modules\mob\living\simple_animal\friendly\drone\verbs.dm" -#include "code\modules\mob\living\simple_animal\friendly\drone\visuals_icons.dm" #include "code\modules\mob\living\simple_animal\guardian\guardian.dm" #include "code\modules\mob\living\simple_animal\guardian\guardiannaming.dm" #include "code\modules\mob\living\simple_animal\guardian\types\assassin.dm" @@ -2643,37 +2091,26 @@ #include "code\modules\mob\living\simple_animal\guardian\types\ranged.dm" #include "code\modules\mob\living\simple_animal\guardian\types\standard.dm" #include "code\modules\mob\living\simple_animal\guardian\types\support.dm" -#include "code\modules\mob\living\simple_animal\hostile\alien.dm" #include "code\modules\mob\living\simple_animal\hostile\bear.dm" -#include "code\modules\mob\living\simple_animal\hostile\bees.dm" #include "code\modules\mob\living\simple_animal\hostile\carp.dm" -#include "code\modules\mob\living\simple_animal\hostile\cat_butcher.dm" #include "code\modules\mob\living\simple_animal\hostile\dark_wizard.dm" #include "code\modules\mob\living\simple_animal\hostile\eyeballs.dm" #include "code\modules\mob\living\simple_animal\hostile\faithless.dm" #include "code\modules\mob\living\simple_animal\hostile\giant_spider.dm" #include "code\modules\mob\living\simple_animal\hostile\goose.dm" -#include "code\modules\mob\living\simple_animal\hostile\headcrab.dm" #include "code\modules\mob\living\simple_animal\hostile\hivebot.dm" #include "code\modules\mob\living\simple_animal\hostile\hostile.dm" #include "code\modules\mob\living\simple_animal\hostile\illusion.dm" #include "code\modules\mob\living\simple_animal\hostile\killertomato.dm" -#include "code\modules\mob\living\simple_animal\hostile\mecha_pilot.dm" #include "code\modules\mob\living\simple_animal\hostile\mimic.dm" #include "code\modules\mob\living\simple_animal\hostile\mushroom.dm" -#include "code\modules\mob\living\simple_animal\hostile\nanotrasen.dm" #include "code\modules\mob\living\simple_animal\hostile\netherworld.dm" -#include "code\modules\mob\living\simple_animal\hostile\pirate.dm" -#include "code\modules\mob\living\simple_animal\hostile\russian.dm" -#include "code\modules\mob\living\simple_animal\hostile\skeleton.dm" #include "code\modules\mob\living\simple_animal\hostile\statue.dm" #include "code\modules\mob\living\simple_animal\hostile\stickman.dm" -#include "code\modules\mob\living\simple_animal\hostile\syndicate.dm" #include "code\modules\mob\living\simple_animal\hostile\tree.dm" #include "code\modules\mob\living\simple_animal\hostile\venus_human_trap.dm" #include "code\modules\mob\living\simple_animal\hostile\wizard.dm" #include "code\modules\mob\living\simple_animal\hostile\wumborian_fugu.dm" -#include "code\modules\mob\living\simple_animal\hostile\zombie.dm" #include "code\modules\mob\living\simple_animal\hostile\bosses\boss.dm" #include "code\modules\mob\living\simple_animal\hostile\bosses\paperwizard.dm" #include "code\modules\mob\living\simple_animal\hostile\gorilla\emotes.dm" @@ -2684,14 +2121,10 @@ #include "code\modules\mob\living\simple_animal\hostile\jungle\mega_arachnid.dm" #include "code\modules\mob\living\simple_animal\hostile\jungle\mook.dm" #include "code\modules\mob\living\simple_animal\hostile\jungle\seedling.dm" -#include "code\modules\mob\living\simple_animal\hostile\megafauna\blood_drunk_miner.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\bubblegum.dm" -#include "code\modules\mob\living\simple_animal\hostile\megafauna\colossus.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\drake.dm" -#include "code\modules\mob\living\simple_animal\hostile\megafauna\hierophant.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\legion.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\megafauna.dm" -#include "code\modules\mob\living\simple_animal\hostile\megafauna\swarmer.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\basilisk.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\curse_blob.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\goldgrub.dm" @@ -2699,11 +2132,6 @@ #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\gutlunch.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\hivelord.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\mining_mobs.dm" -#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\elite.dm" -#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\goliath_broodmother.dm" -#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\herald.dm" -#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\legionnaire.dm" -#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\pandora.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\bat.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\frog.dm" @@ -2716,13 +2144,20 @@ #include "code\modules\mob\living\simple_animal\hostile\roguetown\werewolf\update_icons.dm" #include "code\modules\mob\living\simple_animal\hostile\roguetown\werewolf\werewolf.dm" #include "code\modules\mob\living\simple_animal\rogue\rogueanimals.dm" +#include "code\modules\mob\living\simple_animal\rogue\creacher\_corpses.dm" #include "code\modules\mob\living\simple_animal\rogue\creacher\bigrat.dm" #include "code\modules\mob\living\simple_animal\rogue\creacher\bogbug.dm" +#include "code\modules\mob\living\simple_animal\rogue\creacher\familiar.dm" #include "code\modules\mob\living\simple_animal\rogue\creacher\headless.dm" #include "code\modules\mob\living\simple_animal\rogue\creacher\honeyspider.dm" #include "code\modules\mob\living\simple_animal\rogue\creacher\lamia.dm" +#include "code\modules\mob\living\simple_animal\rogue\creacher\mimic.dm" +#include "code\modules\mob\living\simple_animal\rogue\creacher\minotaur.dm" #include "code\modules\mob\living\simple_animal\rogue\creacher\mole.dm" +#include "code\modules\mob\living\simple_animal\rogue\creacher\orcs.dm" +#include "code\modules\mob\living\simple_animal\rogue\creacher\poltergeist.dm" #include "code\modules\mob\living\simple_animal\rogue\creacher\shade.dm" +#include "code\modules\mob\living\simple_animal\rogue\creacher\skeleton.dm" #include "code\modules\mob\living\simple_animal\rogue\creacher\troll.dm" #include "code\modules\mob\living\simple_animal\rogue\creacher\trollbog.dm" #include "code\modules\mob\living\simple_animal\rogue\creacher\volf.dm" @@ -2739,76 +2174,6 @@ #include "code\modules\mob\living\simple_animal\slime\say.dm" #include "code\modules\mob\living\simple_animal\slime\slime.dm" #include "code\modules\mob\living\simple_animal\slime\subtypes.dm" -#include "code\modules\modular_computers\laptop_vendor.dm" -#include "code\modules\modular_computers\computers\_modular_computer_shared.dm" -#include "code\modules\modular_computers\computers\item\computer.dm" -#include "code\modules\modular_computers\computers\item\computer_components.dm" -#include "code\modules\modular_computers\computers\item\computer_damage.dm" -#include "code\modules\modular_computers\computers\item\computer_power.dm" -#include "code\modules\modular_computers\computers\item\computer_ui.dm" -#include "code\modules\modular_computers\computers\item\laptop.dm" -#include "code\modules\modular_computers\computers\item\laptop_presets.dm" -#include "code\modules\modular_computers\computers\item\processor.dm" -#include "code\modules\modular_computers\computers\item\tablet.dm" -#include "code\modules\modular_computers\computers\item\tablet_presets.dm" -#include "code\modules\modular_computers\computers\machinery\console_presets.dm" -#include "code\modules\modular_computers\computers\machinery\modular_computer.dm" -#include "code\modules\modular_computers\computers\machinery\modular_console.dm" -#include "code\modules\modular_computers\file_system\computer_file.dm" -#include "code\modules\modular_computers\file_system\data.dm" -#include "code\modules\modular_computers\file_system\program.dm" -#include "code\modules\modular_computers\file_system\program_events.dm" -#include "code\modules\modular_computers\file_system\programs\airestorer.dm" -#include "code\modules\modular_computers\file_system\programs\alarm.dm" -#include "code\modules\modular_computers\file_system\programs\card.dm" -#include "code\modules\modular_computers\file_system\programs\configurator.dm" -#include "code\modules\modular_computers\file_system\programs\file_browser.dm" -#include "code\modules\modular_computers\file_system\programs\ntdownloader.dm" -#include "code\modules\modular_computers\file_system\programs\ntmonitor.dm" -#include "code\modules\modular_computers\file_system\programs\ntnrc_client.dm" -#include "code\modules\modular_computers\file_system\programs\nttransfer.dm" -#include "code\modules\modular_computers\file_system\programs\powermonitor.dm" -#include "code\modules\modular_computers\file_system\programs\sm_monitor.dm" -#include "code\modules\modular_computers\file_system\programs\antagonist\contract_uplink.dm" -#include "code\modules\modular_computers\file_system\programs\antagonist\dos.dm" -#include "code\modules\modular_computers\file_system\programs\antagonist\revelation.dm" -#include "code\modules\modular_computers\hardware\_hardware.dm" -#include "code\modules\modular_computers\hardware\ai_slot.dm" -#include "code\modules\modular_computers\hardware\battery_module.dm" -#include "code\modules\modular_computers\hardware\card_slot.dm" -#include "code\modules\modular_computers\hardware\CPU.dm" -#include "code\modules\modular_computers\hardware\hard_drive.dm" -#include "code\modules\modular_computers\hardware\network_card.dm" -#include "code\modules\modular_computers\hardware\portable_disk.dm" -#include "code\modules\modular_computers\hardware\printer.dm" -#include "code\modules\modular_computers\hardware\recharger.dm" -#include "code\modules\modular_computers\NTNet\NTNRC\conversation.dm" -#include "code\modules\ninja\__ninjaDefines.dm" -#include "code\modules\ninja\energy_katana.dm" -#include "code\modules\ninja\ninja_event.dm" -#include "code\modules\ninja\outfit.dm" -#include "code\modules\ninja\suit\gloves.dm" -#include "code\modules\ninja\suit\head.dm" -#include "code\modules\ninja\suit\mask.dm" -#include "code\modules\ninja\suit\ninjaDrainAct.dm" -#include "code\modules\ninja\suit\shoes.dm" -#include "code\modules\ninja\suit\suit.dm" -#include "code\modules\ninja\suit\suit_attackby.dm" -#include "code\modules\ninja\suit\suit_initialisation.dm" -#include "code\modules\ninja\suit\suit_process.dm" -#include "code\modules\ninja\suit\n_suit_verbs\energy_net_nets.dm" -#include "code\modules\ninja\suit\n_suit_verbs\ninja_adrenaline.dm" -#include "code\modules\ninja\suit\n_suit_verbs\ninja_cost_check.dm" -#include "code\modules\ninja\suit\n_suit_verbs\ninja_empulse.dm" -#include "code\modules\ninja\suit\n_suit_verbs\ninja_net.dm" -#include "code\modules\ninja\suit\n_suit_verbs\ninja_smoke.dm" -#include "code\modules\ninja\suit\n_suit_verbs\ninja_stars.dm" -#include "code\modules\ninja\suit\n_suit_verbs\ninja_stealth.dm" -#include "code\modules\ninja\suit\n_suit_verbs\ninja_sword_recall.dm" -#include "code\modules\NTNet\netdata.dm" -#include "code\modules\NTNet\network.dm" -#include "code\modules\NTNet\relays.dm" -#include "code\modules\NTNet\services\_service.dm" #include "code\modules\paperwork\carbonpaper.dm" #include "code\modules\paperwork\clipboard.dm" #include "code\modules\paperwork\contract.dm" @@ -2821,68 +2186,13 @@ #include "code\modules\paperwork\paperbin.dm" #include "code\modules\paperwork\paperplane.dm" #include "code\modules\paperwork\pen.dm" -#include "code\modules\paperwork\photocopier.dm" #include "code\modules\paperwork\rogue.dm" #include "code\modules\paperwork\stamps.dm" -#include "code\modules\paperwork\ticketmachine.dm" #include "code\modules\paperwork\papers\scrap.dm" #include "code\modules\photography\_pictures.dm" -#include "code\modules\photography\camera\camera.dm" -#include "code\modules\photography\camera\camera_image_capturing.dm" -#include "code\modules\photography\camera\film.dm" -#include "code\modules\photography\camera\other.dm" -#include "code\modules\photography\camera\silicon_camera.dm" #include "code\modules\photography\photos\album.dm" #include "code\modules\photography\photos\frame.dm" #include "code\modules\photography\photos\photo.dm" -#include "code\modules\plumbing\ducts.dm" -#include "code\modules\plumbing\plumbers\_plumb_machinery.dm" -#include "code\modules\plumbing\plumbers\acclimator.dm" -#include "code\modules\plumbing\plumbers\destroyer.dm" -#include "code\modules\plumbing\plumbers\filter.dm" -#include "code\modules\plumbing\plumbers\pill_press.dm" -#include "code\modules\plumbing\plumbers\pumps.dm" -#include "code\modules\plumbing\plumbers\reaction_chamber.dm" -#include "code\modules\plumbing\plumbers\splitters.dm" -#include "code\modules\plumbing\plumbers\synthesizer.dm" -#include "code\modules\power\apc.dm" -#include "code\modules\power\cable.dm" -#include "code\modules\power\cell.dm" -#include "code\modules\power\floodlight.dm" -#include "code\modules\power\generator.dm" -#include "code\modules\power\gravitygenerator.dm" -#include "code\modules\power\lanternpost.dm" -#include "code\modules\power\lighting.dm" -#include "code\modules\power\monitor.dm" -#include "code\modules\power\multiz.dm" -#include "code\modules\power\pipecleaners.dm" -#include "code\modules\power\port_gen.dm" -#include "code\modules\power\power.dm" -#include "code\modules\power\powernet.dm" -#include "code\modules\power\roguelighting.dm" -#include "code\modules\power\rtg.dm" -#include "code\modules\power\smes.dm" -#include "code\modules\power\solar.dm" -#include "code\modules\power\terminal.dm" -#include "code\modules\power\tracker.dm" -#include "code\modules\power\turbine.dm" -#include "code\modules\power\singularity\boh_tear.dm" -#include "code\modules\power\singularity\collector.dm" -#include "code\modules\power\singularity\containment_field.dm" -#include "code\modules\power\singularity\emitter.dm" -#include "code\modules\power\singularity\field_generator.dm" -#include "code\modules\power\singularity\generator.dm" -#include "code\modules\power\singularity\investigate.dm" -#include "code\modules\power\singularity\narsie.dm" -#include "code\modules\power\singularity\singularity.dm" -#include "code\modules\power\singularity\particle_accelerator\particle.dm" -#include "code\modules\power\singularity\particle_accelerator\particle_accelerator.dm" -#include "code\modules\power\singularity\particle_accelerator\particle_control.dm" -#include "code\modules\power\singularity\particle_accelerator\particle_emitter.dm" -#include "code\modules\power\supermatter\supermatter.dm" -#include "code\modules\power\tesla\coil.dm" -#include "code\modules\power\tesla\energy_ball.dm" -#include "code\modules\power\tesla\generator.dm" #include "code\modules\procedural_mapping\mapGenerator.dm" #include "code\modules\procedural_mapping\mapGeneratorModule.dm" #include "code\modules\procedural_mapping\mapGeneratorObj.dm" @@ -2891,13 +2201,11 @@ #include "code\modules\procedural_mapping\mapGeneratorModules\nature.dm" #include "code\modules\procedural_mapping\mapGenerators\asteroid.dm" #include "code\modules\procedural_mapping\mapGenerators\cellular.dm" -#include "code\modules\procedural_mapping\mapGenerators\cult.dm" #include "code\modules\procedural_mapping\mapGenerators\lava_river.dm" #include "code\modules\procedural_mapping\mapGenerators\lavaland.dm" #include "code\modules\procedural_mapping\mapGenerators\nature.dm" #include "code\modules\procedural_mapping\mapGenerators\repair.dm" #include "code\modules\procedural_mapping\mapGenerators\shuttle.dm" -#include "code\modules\procedural_mapping\mapGenerators\syndicate.dm" #include "code\modules\projectiles\gun.dm" #include "code\modules\projectiles\pins.dm" #include "code\modules\projectiles\projectile.dm" @@ -2916,11 +2224,9 @@ #include "code\modules\projectiles\ammunition\caseless\rocket.dm" #include "code\modules\projectiles\ammunition\energy\_energy.dm" #include "code\modules\projectiles\ammunition\energy\ebow.dm" -#include "code\modules\projectiles\ammunition\energy\gravity.dm" #include "code\modules\projectiles\ammunition\energy\laser.dm" #include "code\modules\projectiles\ammunition\energy\lmg.dm" #include "code\modules\projectiles\ammunition\energy\plasma.dm" -#include "code\modules\projectiles\ammunition\energy\portal.dm" #include "code\modules\projectiles\ammunition\energy\special.dm" #include "code\modules\projectiles\ammunition\energy\stun.dm" #include "code\modules\projectiles\ammunition\special\magic.dm" @@ -2945,7 +2251,6 @@ #include "code\modules\projectiles\boxes_magazines\internal\shotgun.dm" #include "code\modules\projectiles\boxes_magazines\internal\toy.dm" #include "code\modules\projectiles\guns\ballistic.dm" -#include "code\modules\projectiles\guns\energy.dm" #include "code\modules\projectiles\guns\magic.dm" #include "code\modules\projectiles\guns\ballistic\automatic.dm" #include "code\modules\projectiles\guns\ballistic\laser_gatling.dm" @@ -2955,17 +2260,8 @@ #include "code\modules\projectiles\guns\ballistic\rifle.dm" #include "code\modules\projectiles\guns\ballistic\shotgun.dm" #include "code\modules\projectiles\guns\ballistic\toy.dm" -#include "code\modules\projectiles\guns\energy\dueling.dm" -#include "code\modules\projectiles\guns\energy\energy_gun.dm" -#include "code\modules\projectiles\guns\energy\kinetic_accelerator.dm" -#include "code\modules\projectiles\guns\energy\laser.dm" -#include "code\modules\projectiles\guns\energy\mounted.dm" -#include "code\modules\projectiles\guns\energy\pulse.dm" -#include "code\modules\projectiles\guns\energy\special.dm" -#include "code\modules\projectiles\guns\energy\stun.dm" #include "code\modules\projectiles\guns\magic\staff.dm" #include "code\modules\projectiles\guns\magic\wand.dm" -#include "code\modules\projectiles\guns\misc\beam_rifle.dm" #include "code\modules\projectiles\guns\misc\blastcannon.dm" #include "code\modules\projectiles\guns\misc\chem_gun.dm" #include "code\modules\projectiles\guns\misc\grenade_launcher.dm" @@ -2992,13 +2288,11 @@ #include "code\modules\projectiles\projectile\energy\net_snare.dm" #include "code\modules\projectiles\projectile\energy\nuclear_particle.dm" #include "code\modules\projectiles\projectile\energy\stun.dm" -#include "code\modules\projectiles\projectile\energy\tesla.dm" #include "code\modules\projectiles\projectile\magic\spellcard.dm" #include "code\modules\projectiles\projectile\reusable\_reusable.dm" #include "code\modules\projectiles\projectile\reusable\foam_dart.dm" #include "code\modules\projectiles\projectile\special\curse.dm" #include "code\modules\projectiles\projectile\special\floral.dm" -#include "code\modules\projectiles\projectile\special\gravity.dm" #include "code\modules\projectiles\projectile\special\hallucination.dm" #include "code\modules\projectiles\projectile\special\ion.dm" #include "code\modules\projectiles\projectile\special\meteor.dm" @@ -3007,7 +2301,6 @@ #include "code\modules\projectiles\projectile\special\plasma.dm" #include "code\modules\projectiles\projectile\special\rocket.dm" #include "code\modules\projectiles\projectile\special\temperature.dm" -#include "code\modules\projectiles\projectile\special\wormhole.dm" #include "code\modules\reagents\chem_splash.dm" #include "code\modules\reagents\reagent_containers.dm" #include "code\modules\reagents\reagent_dispenser.dm" @@ -3016,13 +2309,6 @@ #include "code\modules\reagents\chemistry\holder.dm" #include "code\modules\reagents\chemistry\reagents.dm" #include "code\modules\reagents\chemistry\recipes.dm" -#include "code\modules\reagents\chemistry\machinery\chem_dispenser.dm" -#include "code\modules\reagents\chemistry\machinery\chem_heater.dm" -#include "code\modules\reagents\chemistry\machinery\chem_master.dm" -#include "code\modules\reagents\chemistry\machinery\chem_synthesizer.dm" -#include "code\modules\reagents\chemistry\machinery\pandemic.dm" -#include "code\modules\reagents\chemistry\machinery\reagentgrinder.dm" -#include "code\modules\reagents\chemistry\machinery\smoke_machine.dm" #include "code\modules\reagents\chemistry\reagents\alcohol_reagents.dm" #include "code\modules\reagents\chemistry\reagents\cat2_medicine_reagents.dm" #include "code\modules\reagents\chemistry\reagents\drink_reagents.dm" @@ -3042,7 +2328,6 @@ #include "code\modules\reagents\chemistry\recipes\special.dm" #include "code\modules\reagents\chemistry\recipes\toxins.dm" #include "code\modules\reagents\reagent_containers\blood_pack.dm" -#include "code\modules\reagents\reagent_containers\borghydro.dm" #include "code\modules\reagents\reagent_containers\bottle.dm" #include "code\modules\reagents\reagent_containers\chem_pack.dm" #include "code\modules\reagents\reagent_containers\dropper.dm" @@ -3064,66 +2349,6 @@ #include "code\modules\recycling\disposal\outlet.dm" #include "code\modules\recycling\disposal\pipe.dm" #include "code\modules\recycling\disposal\pipe_sorting.dm" -#include "code\modules\research\designs.dm" -#include "code\modules\research\destructive_analyzer.dm" -#include "code\modules\research\experimentor.dm" -#include "code\modules\research\rdconsole.dm" -#include "code\modules\research\rdmachines.dm" -#include "code\modules\research\research_disk.dm" -#include "code\modules\research\server.dm" -#include "code\modules\research\stock_parts.dm" -#include "code\modules\research\designs\AI_module_designs.dm" -#include "code\modules\research\designs\autolathe_designs.dm" -#include "code\modules\research\designs\biogenerator_designs.dm" -#include "code\modules\research\designs\bluespace_designs.dm" -#include "code\modules\research\designs\comp_board_designs.dm" -#include "code\modules\research\designs\computer_part_designs.dm" -#include "code\modules\research\designs\electronics_designs.dm" -#include "code\modules\research\designs\limbgrower_designs.dm" -#include "code\modules\research\designs\machine_designs.dm" -#include "code\modules\research\designs\mecha_designs.dm" -#include "code\modules\research\designs\mechfabricator_designs.dm" -#include "code\modules\research\designs\medical_designs.dm" -#include "code\modules\research\designs\mining_designs.dm" -#include "code\modules\research\designs\misc_designs.dm" -#include "code\modules\research\designs\nanite_designs.dm" -#include "code\modules\research\designs\power_designs.dm" -#include "code\modules\research\designs\smelting_designs.dm" -#include "code\modules\research\designs\stock_parts_designs.dm" -#include "code\modules\research\designs\telecomms_designs.dm" -#include "code\modules\research\designs\tool_designs.dm" -#include "code\modules\research\designs\weapon_designs.dm" -#include "code\modules\research\machinery\_production.dm" -#include "code\modules\research\machinery\circuit_imprinter.dm" -#include "code\modules\research\machinery\departmental_circuit_imprinter.dm" -#include "code\modules\research\machinery\departmental_protolathe.dm" -#include "code\modules\research\machinery\departmental_techfab.dm" -#include "code\modules\research\machinery\protolathe.dm" -#include "code\modules\research\machinery\techfab.dm" -#include "code\modules\research\nanites\nanite_chamber.dm" -#include "code\modules\research\nanites\nanite_chamber_computer.dm" -#include "code\modules\research\nanites\nanite_cloud_controller.dm" -#include "code\modules\research\nanites\nanite_hijacker.dm" -#include "code\modules\research\nanites\nanite_misc_items.dm" -#include "code\modules\research\nanites\nanite_program_hub.dm" -#include "code\modules\research\nanites\nanite_programmer.dm" -#include "code\modules\research\nanites\nanite_programs.dm" -#include "code\modules\research\nanites\nanite_remote.dm" -#include "code\modules\research\nanites\program_disks.dm" -#include "code\modules\research\nanites\public_chamber.dm" -#include "code\modules\research\nanites\rules.dm" -#include "code\modules\research\nanites\nanite_programs\buffing.dm" -#include "code\modules\research\nanites\nanite_programs\healing.dm" -#include "code\modules\research\nanites\nanite_programs\rogue.dm" -#include "code\modules\research\nanites\nanite_programs\sensor.dm" -#include "code\modules\research\nanites\nanite_programs\suppression.dm" -#include "code\modules\research\nanites\nanite_programs\utility.dm" -#include "code\modules\research\nanites\nanite_programs\weapon.dm" -#include "code\modules\research\techweb\__techweb_helpers.dm" -#include "code\modules\research\techweb\_techweb.dm" -#include "code\modules\research\techweb\_techweb_node.dm" -#include "code\modules\research\techweb\all_nodes.dm" -#include "code\modules\research\xenobiology\xenobio_camera.dm" #include "code\modules\research\xenobiology\xenobiology.dm" #include "code\modules\research\xenobiology\crossbreeding\__corecross.dm" #include "code\modules\research\xenobiology\crossbreeding\_clothing.dm" @@ -3151,6 +2376,7 @@ #include "code\modules\roguetown\mapgen\forest.dm" #include "code\modules\roguetown\mapgen\mountains.dm" #include "code\modules\roguetown\mapgen\rogueoutdoors.dm" +#include "code\modules\roguetown\roguecrafting\carpentry.dm" #include "code\modules\roguetown\roguecrafting\cooking.dm" #include "code\modules\roguetown\roguecrafting\items.dm" #include "code\modules\roguetown\roguecrafting\leather.dm" @@ -3183,6 +2409,7 @@ #include "code\modules\roguetown\roguejobs\cook\tools\pan.dm" #include "code\modules\roguetown\roguejobs\cook\tools\pot.dm" #include "code\modules\roguetown\roguejobs\cook\tools\skewer.dm" +#include "code\modules\roguetown\roguejobs\craftsman\tools.dm" #include "code\modules\roguetown\roguejobs\farmer\plantedcrops.dm" #include "code\modules\roguetown\roguejobs\farmer\tools.dm" #include "code\modules\roguetown\roguejobs\fisher\fish.dm" @@ -3216,18 +2443,14 @@ #include "code\modules\ruins\lavaland_ruin_code.dm" #include "code\modules\ruins\lavalandruin_code\biodome_clown_planet.dm" #include "code\modules\ruins\lavalandruin_code\elephantgraveyard.dm" -#include "code\modules\ruins\lavalandruin_code\pizzaparty.dm" #include "code\modules\ruins\lavalandruin_code\puzzle.dm" #include "code\modules\ruins\lavalandruin_code\sloth.dm" #include "code\modules\ruins\lavalandruin_code\surface.dm" -#include "code\modules\ruins\lavalandruin_code\syndicate_base.dm" #include "code\modules\ruins\objects_and_mobs\ash_walker_den.dm" #include "code\modules\ruins\objects_and_mobs\necropolis_gate.dm" #include "code\modules\ruins\objects_and_mobs\sin_ruins.dm" #include "code\modules\ruins\spaceruin_code\asteroid4.dm" #include "code\modules\ruins\spaceruin_code\bigderelict1.dm" -#include "code\modules\ruins\spaceruin_code\caravanambush.dm" -#include "code\modules\ruins\spaceruin_code\clericsden.dm" #include "code\modules\ruins\spaceruin_code\cloning_lab.dm" #include "code\modules\ruins\spaceruin_code\crashedclownship.dm" #include "code\modules\ruins\spaceruin_code\crashedship.dm" @@ -3238,29 +2461,17 @@ #include "code\modules\ruins\spaceruin_code\oldstation.dm" #include "code\modules\ruins\spaceruin_code\originalcontent.dm" #include "code\modules\ruins\spaceruin_code\spacehotel.dm" -#include "code\modules\ruins\spaceruin_code\TheDerelict.dm" -#include "code\modules\ruins\spaceruin_code\whiteshipruin_box.dm" -#include "code\modules\security_levels\keycard_authentication.dm" -#include "code\modules\security_levels\security_levels.dm" #include "code\modules\shuttle\arrivals.dm" #include "code\modules\shuttle\assault_pod.dm" #include "code\modules\shuttle\computer.dm" #include "code\modules\shuttle\docking.dm" #include "code\modules\shuttle\elevator.dm" -#include "code\modules\shuttle\emergency.dm" #include "code\modules\shuttle\ferry.dm" #include "code\modules\shuttle\manipulator.dm" -#include "code\modules\shuttle\monastery.dm" -#include "code\modules\shuttle\navigation_computer.dm" #include "code\modules\shuttle\on_move.dm" #include "code\modules\shuttle\ripple.dm" #include "code\modules\shuttle\shuttle.dm" #include "code\modules\shuttle\shuttle_rotate.dm" -#include "code\modules\shuttle\spaceship_navigation_beacon.dm" -#include "code\modules\shuttle\special.dm" -#include "code\modules\shuttle\supply.dm" -#include "code\modules\shuttle\syndicate.dm" -#include "code\modules\shuttle\white_ship.dm" #include "code\modules\spells\spell.dm" #include "code\modules\spells\roguetown\_roguetown.dm" #include "code\modules\spells\roguetown\confessor.dm" @@ -3281,7 +2492,6 @@ #include "code\modules\spells\spell_types\area_teleport.dm" #include "code\modules\spells\spell_types\barnyard.dm" #include "code\modules\spells\spell_types\bloodcrawl.dm" -#include "code\modules\spells\spell_types\charge.dm" #include "code\modules\spells\spell_types\conjure.dm" #include "code\modules\spells\spell_types\construct_spells.dm" #include "code\modules\spells\spell_types\curse.dm" @@ -3303,7 +2513,6 @@ #include "code\modules\spells\spell_types\personality_commune.dm" #include "code\modules\spells\spell_types\projectile.dm" #include "code\modules\spells\spell_types\rightandwrong.dm" -#include "code\modules\spells\spell_types\rod_form.dm" #include "code\modules\spells\spell_types\santa.dm" #include "code\modules\spells\spell_types\shadow_walk.dm" #include "code\modules\spells\spell_types\shapeshift.dm" @@ -3317,10 +2526,6 @@ #include "code\modules\spells\spell_types\turf_teleport.dm" #include "code\modules\spells\spell_types\voice_of_god.dm" #include "code\modules\spells\spell_types\wizard.dm" -#include "code\modules\station_goals\bsa.dm" -#include "code\modules\station_goals\dna_vault.dm" -#include "code\modules\station_goals\shield.dm" -#include "code\modules\station_goals\station_goal.dm" #include "code\modules\surgery\_surgery.dm" #include "code\modules\surgery\_surgery_step.dm" #include "code\modules\surgery\surgery_helpers.dm" @@ -3332,12 +2537,10 @@ #include "code\modules\surgery\bodyparts\bodypart_wounds.dm" #include "code\modules\surgery\bodyparts\head.dm" #include "code\modules\surgery\bodyparts\helpers.dm" -#include "code\modules\surgery\bodyparts\robot_bodyparts.dm" #include "code\modules\surgery\bodyparts\bodypart_features\_bodypart_feature.dm" #include "code\modules\surgery\bodyparts\bodypart_features\features.dm" #include "code\modules\surgery\organs\_organ_dna.dm" #include "code\modules\surgery\organs\appendix.dm" -#include "code\modules\surgery\organs\augments_arms.dm" #include "code\modules\surgery\organs\augments_chest.dm" #include "code\modules\surgery\organs\augments_eyes.dm" #include "code\modules\surgery\organs\augments_internal.dm" @@ -3389,14 +2592,9 @@ #include "code\modules\underworld\demon.dm" #include "code\modules\underworld\underworld.dm" #include "code\modules\unit_tests\_unit_tests.dm" -#include "code\modules\uplink\uplink_devices.dm" -#include "code\modules\uplink\uplink_items.dm" -#include "code\modules\uplink\uplink_purchase_log.dm" #include "code\modules\vehicles\_vehicle.dm" -#include "code\modules\vehicles\atv.dm" #include "code\modules\vehicles\bicycle.dm" #include "code\modules\vehicles\lavaboat.dm" -#include "code\modules\vehicles\motorized_wheelchair.dm" #include "code\modules\vehicles\pimpin_ride.dm" #include "code\modules\vehicles\ridden.dm" #include "code\modules\vehicles\scooter.dm" @@ -3408,35 +2606,6 @@ #include "code\modules\vehicles\wheelchair.dm" #include "code\modules\vehicles\cars\car.dm" #include "code\modules\vehicles\cars\clowncar.dm" -#include "code\modules\vending\_vending.dm" -#include "code\modules\vending\assist.dm" -#include "code\modules\vending\autodrobe.dm" -#include "code\modules\vending\boozeomat.dm" -#include "code\modules\vending\cartridge.dm" -#include "code\modules\vending\cigarette.dm" -#include "code\modules\vending\clothesmate.dm" -#include "code\modules\vending\coffee.dm" -#include "code\modules\vending\cola.dm" -#include "code\modules\vending\drinnerware.dm" -#include "code\modules\vending\engineering.dm" -#include "code\modules\vending\engivend.dm" -#include "code\modules\vending\games.dm" -#include "code\modules\vending\liberation.dm" -#include "code\modules\vending\liberation_toy.dm" -#include "code\modules\vending\magivend.dm" -#include "code\modules\vending\medical.dm" -#include "code\modules\vending\medical_wall.dm" -#include "code\modules\vending\modularpc.dm" -#include "code\modules\vending\nutrimax.dm" -#include "code\modules\vending\plasmaresearch.dm" -#include "code\modules\vending\robotics.dm" -#include "code\modules\vending\security.dm" -#include "code\modules\vending\snack.dm" -#include "code\modules\vending\sovietsoda.dm" -#include "code\modules\vending\sustenance.dm" -#include "code\modules\vending\toys.dm" -#include "code\modules\vending\wardrobes.dm" -#include "code\modules\vending\youtool.dm" #include "code\modules\zombie\items.dm" #include "code\modules\zombie\organs.dm" #include "interface\interface.dm" @@ -3444,11 +2613,11 @@ #include "interface\stylesheet.dm" #include "interface\skin.dmf" #include "modular\Barding\code\Barding_instruments.dm" +#include "modular\Barding\code\music_effect.dm" #include "modular\Mapping\Mapping_aides.dm" #include "modular\Neu_Farming\code\bin.dm" #include "modular\Neu_Farming\code\chaff.dm" #include "modular\Neu_Farming\code\composter.dm" -#include "modular\Neu_Farming\code\crafting_recipes.dm" #include "modular\Neu_Farming\code\fermenting_barrel.dm" #include "modular\Neu_Farming\code\helpers.dm" #include "modular\Neu_Farming\code\plant_def.dm" diff --git a/strings/accent_universal.json b/strings/accent_universal.json index e6833e5938..0e0f976c3d 100644 --- a/strings/accent_universal.json +++ b/strings/accent_universal.json @@ -1,5 +1,5 @@ { - + "universal": { "friday": "freyjasdae", "saturday": "saturnsdae", @@ -25,8 +25,12 @@ "gmyza": "OINK OINK", "copetti": "OINK OINK", "day": "dae", + "days": "daes", + "daylight": "daelight", "today": "todae", "night": "nite", + "nightly": "nitely", + "tonight": "tonite", "goodnight": "goodnite", "years": "yils", "wolf": "volf", @@ -51,8 +55,8 @@ "cuck": "wittol", "poop": "nitesoil", "goat": "gote", - "shylock": "Miester" + "shylock": "meister" } - - + + } diff --git a/strings/darkelf_replacement.json b/strings/darkelf_replacement.json new file mode 100644 index 0000000000..b8478850ee --- /dev/null +++ b/strings/darkelf_replacement.json @@ -0,0 +1,46 @@ +{ + + "darkelf": { + "shi": "shee", + "thi": "zee", + "them ": "zem ", + "that ": "zat ", + "will": "weell", + "through": "zrough", + "throw": "zrow", + "though": "zough", + "thought": "zhoght", + "with": "weef", + "those": "zose", + "they": "zey", + "another": "anozer", + "other": "ozer", + "brother": "brozer", + "Mother" : "Mozer", + "Father" : "Fazer", + " yes ": " yis ", + " and ": " et ", + "the ": "l' ", + "I ": "j' ", + "I'm ": "j' ", + "bye": [ + "adieu", + "au revoir" + ], + "cake": "gateau", + "captain": "capitaine", + "dad": "papa", + "hello": [ + "'allo", + "bonjour", + "salut" + ], + "mom ": "mama ", + "shit": "merde", + "spaghetti": "macaroni", + "thanks": "merci", + "thank you": "merci", + "wine": "vine" + } + +} diff --git a/strings/dwarf_replacement.json b/strings/dwarf_replacement.json index 2049c5ab26..235e82df52 100644 --- a/strings/dwarf_replacement.json +++ b/strings/dwarf_replacement.json @@ -1,1461 +1,178 @@ { "dwarf": { - "ability": "abeelitie", - "about": "aboot", - "above": "abuin", - "abroad": "abraid", - "absorb": "drack", - "absorbing": "drackin'", - "absorbs": "dracks", - "accuse": "delate", - "accused": "delated", - "across": "athwart", - "act": "ect", - "acts": "ects", - "add": "eik", - "added": "eikit", - "adds": "eiks", - "admit": "admeet", - "admits": "admeets", - "afraid": "feart", - "africa": "afrikey", - "after": "efter", - "against": "agin", - "alarm": "alairm", - "ale": "yill", - "all": "a'", - "allow": "allou", - "almost": "naur", - "along": "yont", - "aloof": "abeich", - "aloud": "lood out", - "also": "an a'", - "always": "aye", - "amazed": "dumfoundert", - "america": "amerikie", - "amidst": "'midst", - "among": [ - "'mang", - "amang" - ], - "amount": [ - "amoont", - "feck" - ], - "and": "an'", - "animal": "beist", - "animals": "beists", - "ankle": "cuit", - "ankles": "cuits", - "announce": "annoonce", - "announces": "annoonces", - "another": "anither", - "answered": "answert", - "ant": "eemock", - "ants": "eemocks", - "anxiety": "anxeeitie", - "any": "ony", - "anybody": "aebodie", - "apprentice": "prentice", + + "amidst": "'midst", + "animal": "beast", + "animals": "beasts", + + "apprentice": "prentice", "apprentices": "prentices", - "are": "ar", - "aren't": "arena", - "arm": "airm", - "arrange": "dispone", - "arranged": "dispon'd", - "arranges": "dispones", - "arrest": "lift", - "arrested": "liftit", - "arrests": "lifts", - "arse": "erse", - "arses": "erses", - "artificial": "artifeicial", - "ash": "ase", - "ashes": "ase", - "aside": "ascient", - "ask": "aks", - "asked": "akst", - "asks": "aks", - "ass": "erse", - "asses": "erses", - "asshole": "hurdie", - "ate": "ett", - "aunt": "auntie", - "author": "owthor", - "awaken": "awauken", - "awakens": "awaukens", - "away": "awa", - "awful": "awfu", - "awfully": "awfy", - "awkward": "thrawart", - "awry": [ - "aglae", - "ajee" - ], - "axe": "aix", - "axle": "aixle", - "back": "hint", - "bacon": "ham", - "bad": "ill", - "bags": "begs", - "bake": "bak", - "baked": "bakken", - "bakes": "baks", - "bald": "beld", - "ball": "baw", - "balls": "baws", - "bar": "baur", - "barber's": "baurber's", - "barber": "baurber", - "barbers": "baurbers", - "bastard": "bas", - "bat": "flichtermoose", - "baton": "rung", - "batons": "rungs", - "bats": "flichtermooses", - "beach": "foreland", - "beard": "bairds", + + "asses": "arses", + "asshole": "arse-well", + + "beard": "baird", "beards": "bairds", + "beautiful": "bonnie", - "because": "kis", - "become": "set", - "becomes": "sets", - "bed": "scratcher", - "beds": "scratchers", - "bee's": "skep-bee's", - "bee": "skep-bee", - "bees": "skep-bees", - "beetle": "clock", - "beetles": "clocks", - "before": "afore", - "began": "begoud", - "being": "bein", - "belong": "belang", - "belonged": "belangit", - "belongs": "belangs", - "below": "ablo", - "beneath": "inunner", - "bent": "bowlt", - "besides": "forby", - "between": "atween", - "beware": "bewaur", - "bilberry": "blaeberry", - "bind": "thirl", - "binds": "thirls", - "bird": "burd", - "birds": "burdies", - "biscuit": "bannock", - "biscuits": "bannocks", - "bitch": "bick", - "bitches": "bicks", - "bitching": "bickerin'", - "bitter": "wersh", - "blackbird": "bleckie", - "blackbirds": "bleckies", - "blame": "wyse", - "blamed": "wysed", - "blames": "wyses", - "blast": "tout", - "blind": "blinnd", - "blood": "bluid", - "bloody": "bluidy", - "blue": "blae", - "boil": "bile", - "boils": "biles", - "bold": "bauld", - "bolder": "baulder", - "boldest": "bauldest", - "boldly": "baudly", - "bolt": "bowt", - "bone": "bane", - "bones": "banes", - "bony": "bainie", - "book": "beuk", - "books": "beuks", - "boot": "buit", - "borrow": "borrae", - "borrowed": "borraed", - "borrowing": "borrain'", - "borrows": "borraes", - "both": "baith", - "bother": "fash", - "box": [ - "boax", - "kist" - ], - "boy": "laddie", - "boys": "laddies", - "brawl": "brulyie", - "breath": "braith", - "brew": "broo", - "broad": "braid", - "broke": "bruck", - "broken": "brustit", - "brood": "bairntime", - "broom": "besom", - "brooms": "besoms", - "broth": "brose", - "brother's": "brither's", - "brother": "brither", - "brothers": "brithers", - "brown": "broon", - "bucket": "backit", - "buckets": "backits", - "build": "big", - "built": "biggit", - "bump": "bumfle", - "buried": "yirdit", - "burnt": "brunt", - "bury": "birrie", - "busy": "bizzie", - "butcher": "flesher", - "butt": "dowp", - "buttocks": "dowp", - "button": "gornal", - "buttons": "gornals", - "butts": "bahookies", - "by": "bi", - "call": "ca'", - "called": "caad", - "calls": "ca'", - "came": "cam", + + "bitch": "elf", + "bitches": "elfin", + "bitching": "elfing", + + "boy": "lad", + "boys": "lads", + + "brother's": "brudder's", + "brother": "brudder", + "brothers": "brudders", + + "butt": "boggie", + "buttocks": "boggies", + "butts": "boggies", + "can't": "cannae", - "cap": "kaip", - "caps": "kaips", - "captain's": "chief's", - "captain": "chief", - "car": "caur", - "card": "kerd", - "cards": "kerds", - "careful": "canny", + "careless": "feckless", - "carpenter": "jyner", - "carpenters": "jyners", - "carpet": "cairpet", - "carried": "cairiet", - "carries": "cairies", - "carry": "cairie", - "cart": "cairt", + "cash": "clink", - "cat's": "cheetie's", - "cat": "cheetie", - "catch": "kep", - "catched": "keppit", - "cats": "cheeties", - "caught": "keppit", - "cause": "gar", - "caused": "gart", - "certainly": "fairly", - "chance": "chaunce", - "chances": "chaunces", - "change": "chynge", - "changed": "chynged", - "changeling": "chyngelin'", - "chatter": "blether", - "cheer": "chear", - "cheerful": "chearfu'", - "cheerless": "chearless", - "cheers": "chears", - "cheery": "cheary", - "chest": "kist", - "chests": "kist", - "chick": "pout", - "chicks": "pouts", - "child": "bairn", - "chilly": "snell", - "chimney": "chimley", - "chimneys": "chimleys", - "choose": "chuise", - "chooses": "chuises", - "chosen": "chuist", - "christmas": "Yule", - "chunk": "dod", - "chunks": "dods", - "church": "kirk", - "cigarette": "baccie", - "cigarettes": "baccies", - "city": "ceity", - "clean": "clane", - "cloth": "cloot", - "clothes": "claes", - "cold": "cauld", - "comb": "kaim", - "commotion": "stramash", - "concerning": "anent", - "consider": "see", - "conspicuous": "kenspeckle", - "cool": "cuil", - "corner": "neuk", - "correctly": "swash", - "cosy": "codgie", - "cottage": "but and ben", - "cough": "hoast", + "could": "coud", "couldn't": "coudnae", "couldnt": "coudnae", - "country": "kintra", - "cow": "coo", - "crate": "kist", - "crates": "kists", - "creak": "jarg", - "creaked": "jarg'd", - "creaking": "jargin'", - "creaks": "jargs", - "creature": "cretter", - "creatures": "cretters", - "cries": "girns", + "critter": "cretter", "critters": "cretters", - "crooked": "cruikit", - "crow": "corbie", - "crowbar": "louder", - "crowbars": "louders", - "crowd": "byke", - "cruel": "fell", - "crush": "brousle", - "crusher": "brousler", - "cry": "greet", - "crying": "greetin", - "cuff": "shackle", + + "cuff": "shackle", "cuffed": "shackled", "cuffing": "shackling", - "cuffs": "shangies", - "cup": "tassie", - "cut": "sned", - "cute": "gainin", - "cuts": "sneds", - "cutters": "sheers", - "daft": "dunderheided", - "damage": "skaith", - "dare": "daur", - "dared": "durst", - "daren't": "daurnae", - "darent": "daurnae", - "dares": "daurs", - "dark": "daurk", - "darken": "daurken", - "dawn": "cockcrow", - "dead": "deid", - "deaf": "deif", - "deafen": "deave", - "death": "dead", - "deaths": "deads", - "delightful": "lichtsome", - "delve": "del", - "deny": "forsay", - "depressed": "dumpie", - "describe": "descrive", - "devil": "de'il", + "cuffs": "shackles", + "didn't": "didnae", "didnt": "didnae", - "die": "dee", - "died": "dee'd", - "dies": "dees", - "difficult": "difeecult", - "dig": "howk", - "directed": "airtit", - "directions": "airts", - "dirty": "clarty", - "discover": "diskiver", - "discovered": "diskiver'd", - "discovers": "diskivers", - "disgust": [ - "sconner", - "scunner" - ], - "disgusting": "scunnersome", - "dishonest": "unhonest", - "dive": "dyve", - "dives": "dyves", - "diving": "dyvin'", - "do": "dae", - "does": "dis", - "dog": [ - "dug", - "tyke" - ], - "dogs": "tykes", + "don't": "dinnae", "done": "duin", - "dont": "dinnae", - "doom": "deim", - "doomed": "deim'd", - "door": "dorr", - "doors": "dorrs", - "doubt": "dout", - "doubted": "doutit", - "doubting": "doutin'", - "doubts": "douts", - "dough": "daugh", - "dove": "doo", - "down": "doun", - "downfall": "dounfaa", - "downtrodden": "dounhauden", - "drain": "stank", - "dread": "dreid", - "dream": "draim", - "dreams": "draims", - "drew": "draw", - "drink": "beb", - "drinks": "bebs", - "drip": "dreep", - "drive": "caw", - "drone": "bum", - "drones": "bums", - "drop": "drap", - "drown": "droun", - "drowned": "drount", - "drowning": "drounin'", - "drowns": "drouns", - "drug": "drog", - "drugs": "drogs", - "drunk": "drunken", - "drunkard": "sot", - "dry": "freuch", - "duck": "dook", - "ducked": "douked", - "dusk": "gloaming", - "dust": "stoor", - "dusty": "stourie", - "dwell": "wone", - "dying": "diein'", - "each": "ilk", - "eagle": [ - "aigle", - "earn" - ], - "eagles": "earns", - "ear": "lug", - "early": "earlie", - "earth": "yird", - "east": "aist", - "eastern": "eastlin", - "easternmost": "eastmaist", - "eastmost": "eastmaist", - "eastward": "aistart", - "eat": "aet", - "eaten": "etten", - "eats": "aets", - "eden": "aidin", - "edinburgh": "auld reekie", - "eight": "eighct", - "eighteen": "aughten", - "else": "ense", - "empty": [ - "empie", - "toom" - ], - "end": "en", - "endure": "thole", - "engine's": "ingine's", - "engine": "ingine", - "engineer's": "ingineer's", - "engineer": "ingineer", - "engineers'": "ingineers'", - "engineers": "ingineers", - "engines": "ingines", - "english": "soothron", - "enough's": "eneuch's", - "enough": "eneuch", - "equal": "match", - "escaped": "gat awa", - "eternal": "ayebidin", + "even": "e'en", - "evening": "e'en", - "ever": "iver", - "every": "ilka", - "everything": "iveriehott", - "everywhere": "aa wey", - "ewe": "yowe", - "example": "ensaumple", - "extraordinarily": "unco", - "extremely": "unco", - "eye": "ee", - "eyebrow": "e'ebrie", - "eyebrows": "e'ebries", - "eyes": "een", - "fall": "fa'", - "fallen": "fa'n", - "falling": "faain", - "falls": "fa's", - "false": "fause", - "family": "faimly", - "far": "faur", + "fart": "pump", - "farther": "faurer", "farts": "pumps", "father": "faither", - "fault": [ - "blame", - "faut" - ], - "faults": "fauts", - "feeble": "doweless", - "feed": "beet", - "fellow": "chiel", - "fetch": "fuish", - "fetched": "fuishen", - "fetches": "fuishes", - "few": "puckle", - "fight": "fecht", - "fill": "ful", - "filled": "fult", - "find": "fin", - "fine": "braw", - "finely": "brawlie", - "fish": "fush", - "flake": "flichan", - "flakes": "flichans", - "flap": "flaff", - "flapped": "flaff'd", - "flapping": "flaffin", - "flaps": "flaffs", - "flea": "flaich", - "fleas": "flaich", - "flood": "speat", - "flour": "floor", - "flown": "flewn", - "flutter": "flitter", - "fluttered": "flittered", - "fluttering": "flittering", - "flutters": "flitter", - "fly": "flee", - "foam": "faem", - "folk": "fowk", - "food": "fuid", - "foot": "fuit", - "for": "fur", - "forget": "forgit", - "forgets": "forgits", - "forgive": "forgie", - "forgives": "forgies", - "forgot": "forgat", - "forsake": "forhou", - "forward": "forrit", - "fought": "feuchen", - "foul": "fyle", - "found": "funnd", - "four": "fower", - "fox": "tod", + "friend": "pal", - "friends": "mukkers", - "from": "fae", - "front": "foreside", - "frown": "glunch", - "frowned": "glunch'd", - "full": "stowed oot", - "fumble": "ficher", - "fumbled": "ficher'd", - "fumbles": "fichers", - "further": "farder", - "furthest": "benmaist", - "fussy": "fykie", - "gate": "yett", - "get": "git", - "gets": "gits", - "ghost": "ghaist", - "ghostdrone": "ghaistbum", - "ghostdrones": "ghaistbums", - "ghosts": "ghaists", - "gibberish": "blethers", + "friends": "pallies", + "girl": "lassie", "girls": "lassies ", - "give": "gie", - "given": "gied", - "gives": "gies", - "glare": "glower", - "glared": "glower'd", - "glove": "gluive", - "gloves": "gluives", - "glow": "glowe", - "glows": "glowes", - "go": "gae", - "goat": "gait", - "goats": "gaits", - "goes": "gaes", - "going": "gaein", - "gone": "gaen", - "good": [ - "braw", - "guid" - ], + + "good": "guid", "goodbye": "fare ye weel", - "gosh": "jings", - "got": "gat", "grandmother": "aulddame", - "great": [ - "braw", - "stoatin" - ], - "grin": "gandge", - "grip": "yoke", - "groin": "lisk", - "grow": "growe", - "grown": "growed", - "grows": "growes", - "guard": "waird", - "guess": "jalouse", - "guest": "caa'er", - "guests": "caa'ers", - "had": "haed", - "hadn't": "haednae", - "hadnt": "haednae", - "haggling": "priggin", - "half": "hauf", - "halfwit": "haiverel", - "halfwits": "haiverel", - "hall": "haa", - "halt": "stoppit", - "hammer": "haimer", - "hammers": "haimers", - "hand": "haun", - "handcuff": "haundshackle", - "handcuffed": "haundshackled", - "handcuffing": "haundshackling", - "handcuffs": "shangies", - "handle": "haunnle", - "hands": "hauns", - "hang": "hing", - "happy": "blythe", - "hard": "haurd", - "hardly": "haurdlie", - "harm": "skaith", - "harvest": "hairst", - "harvests": "hairsts", - "have": "hae", - "haven't": "hinna", - "havent": "hinna", - "head": "heid", - "healthy": "brosie", - "heard": "haurd", - "heart": "hert", - "hearty": "herty", - "hedgehog": "hurchin", - "hedgehogs": "hurchins", + "hello": "hullo", - "helmet": "helm", - "helmets": "helms", - "help": "hulp", - "helped": "helpit", - "hen": "chuck", - "hens": "chucks", - "hid": "dern'd", - "hidden": "dern'd", - "hide": "dern", - "hides": "derns", - "high": "hie", - "highest": "hiest", - "highland": "hielan'", - "highlands": "hielands", - "hit": "clout", - "hits": "clouts", - "hoarse": "hersh", - "holy": "halie", - "home": "hame", - "honey": "hinnie", - "hope": "houpe", - "hopes": "houpes", "horrible": "gruesome", - "hot": "het", - "house": "hoose", - "how": "howfur", - "howl": "yowl", - "howled": "yowled", - "howling": "yowling", - "howls": "yowls", - "hungry": "hungert", + "husband": "guidman", "husbands": "guidmen", "idea": "conceit", "ideas": "conceits", - "idiot": "eejit", - "idiots": "eejits", - "ill": "unweel", + "idiot": "klopper-hed", + "idiots": "klopper-heds", + "im": "a'm", "i'm": "a'm", - "import": "inbring", - "incantation": "cantrip", - "incantations": "cantrips", - "industrious": "eydent", - "infinite": "mairchless", - "inject": "jag", - "injected": "jagit", - "injection": "jag", - "injections": "jag", - "insect": "beastie", - "insects": "beasties", - "inside": "inby", - "into": "intae", - "ireland": "airlan", - "island": "islan", - "islands": "islans", - "isn't": "isna", - "isnt": "isna", - "issue": "aishan", - "it's": "hit's", - "it": "hit", - "its": "hits", - "jar": "jaur", - "jars": "jaurs", - "jig's": "jeeg's", - "jig": "jeeg", - "jigs": "jeegs", - "join": "jine", - "jolly": "waulie", - "judge": "juidge", - "judged": "juidgit", - "judges": "juidges", - "jump": "loup", - "jumped": "lowpen", - "jumping": "loupin", - "jumpsuit's": "carsakie's", - "jumpsuit": "carsackie", - "jumpsuits": "carsakies", - "just": "jist", - "kept": "keepit", - "killed": "kilt", - "kind": "kin", - "kindly": "kin'ly", - "kitchen": "keetchin", - "know": "ken", - "known": "kent", - "knows": "ken", - "laid": "leen", - "lake": "loch", - "lakes": "lochs", - "land": "lan", - "large": "muckle", - "last": "lest", - "lasted": "lestit", - "lasts": "lests", - "lawyer": "lawer", - "lawyers": "lawers", - "lay": "lee", - "lazy": "thowless", - "leap": "loup", - "leaping": "loupin", - "leapt": "lowpen", - "learn": "lairn", - "learned": "lairnt", - "learns": "lairns", - "leave": "lea'", - "lend": "len", - "length": "lenth", - "lengths": "lenths", - "let": "lat", - "letter": "screive", - "liar": "leear", - "liars": "leears", - "lie": "lee", - "lifted": "liftit", - "light": "licht", - "lightning": "fire-flaucht", - "like": "lik", - "liked": "likit", - "limp": "hirple", - "liquor": "spunkie", - "list": "leet", - "little": "wee", - "live": "bide", - "lived": "bade", - "lively": "birkie", - "lives": "bides", - "load": "lade", - "loaded": "laden", - "loading": "laden'", - "loads": "lades", - "lobster": "lapster", - "lobsters": "lapsters", - "long": "lang", - "look": "leuk", - "looked": "leukit", - "looks": "leuks", - "lore": "lear", - "lose": "tyne", - "loses": "tynes", - "lost": "tint", - "lot": "wheen", - "loud": "lood", - "louse": "cootie", - "love": "loo", - "loved": "loo'd", - "loves": "loos", - "loving": "looin", - "low": "wee", - "lowest": "blomaist", - "lump": "dod", - "made": "makkit", - "magic": "glammerie", - "make": "mak", - "man": "jimmy", - "manure": "aidle", - "many": "mony", - "married": "merrit", - "may": "can", - "maybe": "mibbie", - "meat": "flesh", - "merchant's": "packman's", - "merchant": "packman", - "merchants'": "packmens'", - "merchants": "packmen", - "mess": "fankle", - "mice": "myce", - "might": "micht", - "mightn't": "michtna", - "mightnt": "michtna", - "milk": "mulk", - "min": "min'", - "mine": "mines", - "mire": "glaur", - "mischeivous": "ill-trickit", - "miss": "tyne", - "misses": "tynes", - "missing": "amissin", - "mistake": "mistak", - "mistaken": "mistaen", - "mixture": "mixtur", - "mole": "mowdiewarp", - "moles": "mowdiewarps", - "money": "clink", - "monkey": "puggie", - "monkeys": "puggies", - "monkies": "puggies", - "moor": "muir", - "more": "mair", - "moron": "baw juggler", - "morons": "dunderheids", - "most": "maist", - "moth": "blinnd-bat", - "mother": "maw", - "moths": "blinnd-bats", - "mountain": "ben", - "mountains": "bens", - "mouse": "moose", - "moustache": "mouser", - "moustaches": "mousers", - "mouth": "gob", - "move": "flit", - "moved": "flittit", - "moves": "flits", - "much": "muckle", - "muddled": "doited", - "music": "muisic", - "must": "maun", - "mustache": "mouser", - "mustaches": "mousers", - "mustn't": "maunna", - "mustnt": "maunna", - "my": "ma", - "myself": "masel", - "naked": "nakit", - "nanotrasen": "nanotraisen", - "natural": "naitral", - "nature": "naitur", - "near": "naur", - "nearer": "naurer", - "nearest": "naurmaist", - "needed": "needit", - "needn't": "needna", - "neednt": "needna", - "neither": "nane", - "nestle": "coorie", + + "into": "intae", + + "moron": "klopper-hed", + "morons": "klopper-heds", + "money": "clinkers", + + "mother": "mudder", + + "my": "me", + "myself": "meself", "never": "ne'er", - "news": "bizz", - "next": "neist", "nice": "crakin", - "night": "nicht", - "nights": "nichts", - "nit": "cootie", - "no": "nae", - "none": "nane", - "nonsense": [ - "haivers", - "havers", - "pish" - ], - "north": "nor", - "northern": "norlins", - "northernmost": "normaist", - "northmost": "normasit", - "not": "no", - "nothing": "hee haw", - "now": "nou", - "number": "hantle", - "numbers": "hantles", - "oak": "aik", - "oat": "aits", - "oats": "aits", - "obliged": "behauden", + + "nonsense": "pish-woggle", + + "notable": "notable", + "not": "nae", + "nothing": "nae thing", + + "yes i": "aye i", + "yes t": "aye t", + "yes h": "aye h", + "yes p": "aye p", + "no t": "nae t", + "no c": "nae c", + "no h": "nae h", + "of": "o'", "off": "aff", - "officer": "boaby", - "officers": "boabies", - "often": "aften", - "oh": "och", - "oil": "ile", - "old": "auld", - "once": "yinst", - "one": "ane", - "onion": "ingan", - "onions": "ingans", - "opened": "opent", - "opposite": "forgain", - "oppressed": "dounhauden", - "other": "ither", - "our": "oor", - "ourselves": "oorsels", - "out": "oot", - "outside": "ootside", - "oven": "uin", - "ovens": "uins", - "over": "oot ower", - "owe": "awe", - "owes": "awes", - "owl": "howlet", - "owls": "howlets", - "own": "ain", - "owned": "awned", - "owns": "awns", - "painting": "pentin", + "pale": "peely-wally", - "pants": "trews", - "parcel": "paircel", - "parched": "drouchtit", - "park": "pairk", - "part": "pairt", - "parted": "pairted", - "partial": "pairtial", - "parts": "pairts", - "path": "pad", - "pebble": [ - "chuckie", - "chuckie-stane" - ], + + "pebble": "chuckie-stane", "pebbles": "chuckie-stanes", - "pee": "strone", - "peed": "stroned", - "pees": "strones", - "people": "fowk", - "person": "chiel", - "pet": "daut", - "pets": "dauts", - "petted": "dautit", - "petting": "dautin'", - "phantom": "bogle", - "phone": "phane", - "phones": "phanes", - "picture": "pictur", - "pictures": "picturs", - "pierce": "thirl", - "pigeon": "doo", + + "pee": "pish", + "peed": "pished", + "pees": "pishes", + + "people": "folk", + "piss": "pish", "pissed": "pished", "pisses": "pishes", - "place": "stell", - "placed": "stellt", - "places": "airts", - "play": "daff", - "played": "dafft", - "plays": "daffs", - "pocket": "pooch", - "pockets": "pooches", - "point": "pynt", - "pointed": "pynted", - "points": "pynt", - "poison": "pushion", - "poisoned": "pushionit", - "poisoning": "pushionin'", - "poisons": "pushions", - "poke": "powk", - "poked": "powkit", - "pokes": "powks", - "poking": "powkin'", - "police": "polis", - "poo": "keech", - "pool": "puil", - "poor": "pair", - "position": "poseetion", - "potato": "tattie", - "potatoes": "tatties", - "powder": "pouther", - "power": "pouer", - "present": "praisent", - "pretty": "bonny", - "prick": "jag", - "pricked": "jagit", - "pricks": "jags", - "probably": "likelie", - "proof": "prief", - "properly": "swash", - "proud": "prood", - "prove": "pruve", - "proved": "pruved", - "proves": "pruves", - "pub": "inns", - "puddle": "dub", - "pull": "pu'", - "pulled": "pu'd", - "pulls": "pu's", - "punch": "batter", - "punches": "batters", - "push": "pouss", - "pushed": "poussit", - "pushes": "pouss'", - "pushing": "poussin'", - "put": "pat", - "puts": "pits", - "quiet": "weesht", - "quit": "quitten", - "quite": "fair", - "rain": "smirr", - "ran": "run", - "raspberry": "rasp", - "rat": "rottan", - "rather": "raither", - "raven": "raen", - "real": "rael", - "reaper": "shearer", - "reason": "raison", - "reasons": "raisons", - "red": "rid", - "remember": "mind", - "replied": "reponed", - "reply": "repone", - "resident": "indwaller", - "residents": "indwallers", - "resign": "demit", - "retch": "boak", - "retches": "boaks", - "ridge": "rig", - "ridges": "rigs", - "right": "richt", - "roar": "rair", - "roared": "rair't", - "roars": "rairs", - "rob": "rab", - "room": "chaummer", - "root": "ruit", - "rope": "raip", - "rubber": "cahoutchie", - "ruffle": "tousle", - "run": "rin", - "rural": "landwart", - "rush": "breeshle", - "rust": "roust", - "sad": "dowie", - "said": "sayed", - "scare": "scaur", - "scariest": "skeeriest", - "scary": "scaury", - "school": "schuil", - "scientific": "scienteefic", - "scissors": "sheers", - "scold": "scaud", - "scone": "bannock", - "scorch": "birsle", - "scowl": "scoul", - "scowls": "scouls", - "scratch": "scart", - "scream": "skriegh", - "screaming": "skrieghin'", - "screams": "skreighs", - "seal": "cowan", - "seals": "cowans", - "sec": "polis", - "second": "saicont", - "security": "polis", - "seem": "kythe", - "seemed": "kythed", - "seems": "kythes", - "separate": "twyne", - "servant": "skivvy", - "seven": "sieven", - "shake": "shak", - "shaken": "shakit", - "shakes": "shaks", - "shall": "sall", - "shell": "sheel", - "shelter": "bield", - "sherrif": "shirra", - "shivering": "ourie", - "shoes": "shoon", - "shook": [ - "shakit", - "sheuk" - ], - "shop": "shap", - "shopping": "messages", - "shops": "shaps", + + "shit": "shite", + "should": "shoud", "shouldn't": "shoudna", "shouldnt": "shoudna", - "shovel": "shool", - "shovels": "shools", - "shrunken": "cruppen", - "shy": "blate", - "sicken": "scunner", - "sickening": "scunnersome", - "sigh": "sech", - "sighs": "soughs", - "silver": "sillar", - "singed": "singet", - "skip": "fimmer", - "skips": "fimmers", - "slap": "clout", - "slaps": "clouts", - "slept": "sleepit", - "slid": "slidden", - "slip": "slup", - "slippery": "slidie", - "slips": "slups", - "slope": "brae", - "sly": "slee", - "smack": "skelp", - "smacks": "skelps", + "small": "wee", - "smart": "snap", - "smile": "smirk", - "smiles": "smous", - "smoke": "reek", - "smoked": "reekit", - "smokes": "reeks", - "smoking": "reekin'", - "sneeze": "sneesh", - "snow": "snaw", - "snowflake": "pyle", - "so": "sae", - "soap": "saip", - "sold": "selt", - "some": "som", - "someone": "a bodie", - "sometimes": "whyles", - "somewhat": "fair", - "song": "sang", - "songs": "sangs", - "soothe": "dill", - "sore": "sair", - "sound": "soond", - "sounded": "soonded", - "sounds": "soonds", - "soup": "broo", - "south": "sooth", - "southern": "soothron", - "southernmost": "soothmaist", - "southmost": "soothmaist", - "spacemas": "Yule", - "sparkle": "glint", - "sparkled": "glintit", - "sparkles": "glints", - "sparkling": "begesserant", - "spat": "sputten", - "speak": "spaek", - "speaks": "spaeks", - "spelled": "spellt", - "spider": "speeder", - "spin": "birl", - "spine": "rig", - "spines": "rigs", - "spinning": "birlin'", - "spins": "birls", - "spit": "speet", - "spoil": "blaud", - "spoils": "blauds", - "spoke": "spak", - "spoon": "spuin", - "squeal": "squyle", - "squint": "skelly", - "stagger": "stoiter", - "staggered": "stoiter'd", - "staggers": "stoiters", - "stand": "staun", - "star": "starn", - "stare": "gove", - "stared": "glourt", - "stares": "goves", - "stars": "starns", - "start": "stert", - "started": "stertit", - "starts": "sterts", - "stay": "bide", - "stays": "bides", - "stead": "steid", - "stench": "bowf", - "stiff": "stechie", - "still": "yet", - "stink": "bowf", - "stinks": "bowfs", - "stir": "steer", - "stirs": "steers", - "stole": "stealt", - "stolen": "stown", - "stomach": "wame", - "stone": "stane", - "stones": "stanes", - "stopped": "stoppit", - "stout": "stoot", - "stream": "burn", - "stretch": "streek", - "stretched": "streekit", - "stretches": "streeks", - "striped": "strippit", - "stroll": "daunder", - "struck": "strak", - "stuck": "stickit", - "stuff": "stech", - "stumble": "doiter", - "stumbled": "stoited", - "stumbles": "doiters", - "stunned": "donnert", - "stupid": "glaikit", - "such": "sic", - "sunset": "sindoun", - "suppose": "daursay", - "sure": "shuir", - "surely": "shuirlie", - "swallow": "swallae", - "swallowed": "swallae'd", - "swallows": "swallaes", - "swarm": "byke", + + "stare": "eyeball", + "stared": "eyeballed", + "stares": "eyeballs", + + "stupid": "klopper", + "swear": "sweir", "sweared": "sweired", "swearing": "sweiring", "swears": "sweirs", - "swell": "swall", - "swelled": "swall'd", - "table": "boord", - "tables": "boords", - "tadpole": "poweheid", - "take": "tak", - "taken": "taen", - "takes": "taks", - "talk": "tauk", - "tangled": "tousled", - "taste": "pree", - "tasted": "pree'd", - "tasteless": "warsh", - "tastes": "prees", - "tavern": "inns", - "terrible": "tairible", - "than": "nor", - "thank": "thenk", - "that": "thon", - "the": "th'", - "their": "thair", - "theirs": "thairs", - "them": "thaim", - "themselves": "thairsels", - "then": "than", - "there's": "thonder's", - "there": "thonder", - "they": "thay", - "thirst": "drouth", - "thirsts": "drouths", - "thirsty": "drouthy", - "those": "they", - "thought": "thocht", - "thousand": "thoosan", - "thousands": "thoosans", - "thousandth": "thoosant", - "thrashed": "thruishen", - "thrilled": "thirl'd", - "throat": "thrapple", - "through": "throu'", + "thundering": "dunderin", - "tidy": "doss", - "tingle": "fissle", - "tiny": [ - "tottie", - "toty" - ], - "to": "tae", - "tobacco": "baccie", - "today": "th'day", - "together": "thegither", - "toilet": "cludgie", - "toilets": "cludgies", - "token": "taiken", - "told": "tellt", "tomorrow": "th' morra", - "tonight": "thenicht", - "too": "tae", - "took": "teuk", - "top": "tap", - "tore": "tuir", - "tortoise": "tortie", - "tough": "teugh", - "town": "toon", - "trader's": "dealer's", - "trader": "dealer", - "traders'": "dealers'", - "traders": "dealers", - "translated": "owerset", - "treason": "traison", - "trick": "brogue", - "tried": "ettelt", - "tries": "ettles", - "trigger": "tricker", - "triggered": "tricker'd", - "triggering": "trickerin'", - "triggers": "trickers", - "trouble": "trauchle", - "trousers": "breeks", - "trurth": "trowth", - "try": "huv a go", - "tumble": "cowp", - "turf": "divot", - "turfs": "divots", - "turn": "birl", - "turned": "birlt", - "turning": "birlin'", - "turnip": "neep", - "turnips": "neeps", - "turns": "birls", - "twist": "swirl", - "twisted": "swirlie", - "twists": "skewls", - "two": "twa", - "unbolt": "unsnib", - "uncertain": "unsicker", - "under": "unner", - "understand": "unnerstaund", - "understands": "unnerstaunds", + "unhurt": "unskaithed", "uninvited": "unbidden", "unknown": "unkent", - "unlucky": "wanchancie", + "until": "till", - "us": "hus", - "usage": "uisage", - "use": "uise", - "used": "uised", - "useless": "uissless", - "uses": "uises", - "valley": "glen", - "valleys": "glens", - "value": "feck", + "vegetables": "greens", - "venture": "anter", - "very": "verra", - "vessel": "veshel", - "vessels": "veshel", - "vision": "veesion", - "visions": "veesion", - "visit": "veesit", - "visitor": "caa'er", - "visitors": "caa'ers", - "vomit": "boak", - "vomits": "boaks", - "wages": "wauges", - "walk": "traivel", - "walked": "traivelt", - "walks": "traivels", - "wall": "dike", - "walls": "dikes", - "wand": "wannd", - "wander": "daunder", - "wandered": "daundert", - "wanders": "daunders", - "want": "waant", - "wanted": "wantit", - "warm": "beek", - "was": "wis", - "washed": "washt", - "wasn't": "wisna", - "wasnt": "wisna", - "watched": "watcht", - "water": "watter", - "way": "gate", - "ways": "gates", - "weak": "fushionless", - "website": "wasteid", - "weep": "greet", - "welcome": "walcome", - "well": "weel", - "went": "gaed", - "were": "war", - "weren't": "warna", - "werent": "warna", - "west": "wast", - "westernmost": "wastmaist", - "westmost": "wastmaist", - "westward": "wastart", - "wet": "drookit", - "what": "whit", - "whatever": "whitsomiver", - "whatsoever": "whitsaeiver", - "where's": "whaur's", - "where": "whaur", - "whiskey": "usquebaugh", - "whistle": "wheiple", - "whistles": "wheiples", - "who": "wha", - "whole": "hail", - "whom": "wham", - "whose": "whase", - "wife": "guidwife", - "will": "wull", - "win": "wun", - "wind": "wynd", - "window": "winnock", - "windows": "winnocks", - "wing": "weeng", - "wings": "weengs", - "wipe": "dight", - "wipes": "dights", - "wire-cutters": "weir-sheers", - "wire": "weir", - "wirecutters": "weirsheers", - "wisdom": "gumption", - "wish": "wiss", - "wished": "wisst", - "wishes": "wisses", - "witch's": "carlin's", - "witch": "carlin", - "witches": "carlins", - "with": "wi", - "within": "aithin", - "without": "athoot", - "witless": "doitert", + + "wife": "guidwife", "wives": "guidwifes", - "wizard's": "warlock's", - "wizard": "warlock", - "wizards": "warlocks", - "woman": "hen", - "women": "kimmers", - "won't": "winna", - "won": "wun", - "wonder": "wonner", - "wont": "winna", - "wood": "wid", - "wool": "woo'", - "word": "wird", - "words": "wirds", - "work": "wark", - "worked": "wrocht", - "world": "warld", - "worried": "wirried", - "worries": "wirries", - "worry": "wirrie", - "worst": "wast", - "worth": "wirth", - "would": "wad", - "wouldn't": "wadna", - "wouldnt": "wadna", - "wrench": "wranch", - "wrenches": "wranches", - "writ": "wrate", - "write": "screive", - "writes": "scrieves", - "wrong": "wrang", - "wrote": "wrat", - "yes": "aye", - "you": "ye", + + "woman": "lass", + "women": "lasses", + + "yesteryear": "yesteryil", + "yesterday": "yesterdae", + "you": "ye", "your": "yer", "yeah": "aye", - "yourself": "yersel", - "yourselves": "yersels", - "youth": "weans", - "zero": "hee-haw" + + "youth": "young'un" + } -} \ No newline at end of file +} diff --git a/strings/french_replacement.json b/strings/french_replacement.json deleted file mode 100644 index 99f4fba1d0..0000000000 --- a/strings/french_replacement.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - - "french": { - "shi": "shee", - "thi": "zee", - "them ": "zem ", - "that ": "zat ", - "will": "weell", - "through": "zrough", - "throw": "zrow", - "though": "zough", - "thought": "zhoght", - "with": "weef", - "those": "zose", - "they": "zey", - "another": "anozer", - "other": "ozer", - "brother": "brozer", - "Mother" : "Mozer", - "Father" : "Fazer", - " yes ": " yis ", - " and ": " et ", - "the ": "l' ", - "I ": "j' ", - "I'm ": "j' ", - "bye": [ - "adieu", - "au revoir" - ], - "cake": "gateau", - "captain": "capitaine", - "dad": "papa", - "hello": [ - "'allo", - "bonjour", - "salut" - ], - "mom ": "mama ", - "shit": "merde", - "spaghetti": "macaroni", - "thanks": "merci", - "thank you": "merci", - "wine": "vine" - } - -} \ No newline at end of file diff --git a/strings/grenzelhoft_replacement.json b/strings/grenzelhoft_replacement.json new file mode 100644 index 0000000000..38ecdb2a0a --- /dev/null +++ b/strings/grenzelhoft_replacement.json @@ -0,0 +1,79 @@ +{ + + "grenzelhoft": { + "good bye": [ + "auf wiedersehen", + "tschüss" + ], + "goodbye":"auf wiedersehen", + "bye":"tschüss", + + "asshole":"schweinhund", + "idiot":"dummkopf", + "fuck": "scheiße", + "shit": "scheiße", + + "cat": "katze", + "dog": "hund", + + "dad": "papa", + "father": "papa", + "family": "familie", + "friend": "freund", + "mom": "mutti", + + "fire": "feuer", + + "good": "gut", + + "hey": "hallo", + "hi": "hallo", + "hello": [ + "hallo", + "guten tag" + ], + + "love": "liebe", + "my ": "mein ", + + "no ": "nein ", + + "small": "klein", + + "thanks": "danke", + "thank you": "danke", + "that ": "das ", + + "ugly": "hässlich", + "very": "sehr", + "with": "mit", + + "w": "v", + "sun": "sonne", + + "spear": "speer", + "sword": "schwert", + "helmet": "helm", + "house": "haus", + "lance": "lanze", + + "day": "tag", + "yesterday": "yestertag", + "yes": "ja", + "yeah": "ja ja", + "young": "junge", + + "captain": "kapitän", + "soldier": "soldat", + "kingdom": "reich", + "king": "könig", + "princess": "prinzess", + "prince": "prinz", + "dragon": "drachen", + "witch": "vitch", + "necromancer": "nekromant", + "demon": "dämon", + "vampire": "vampir", + "goblin": "kobold" + } +} diff --git a/strings/ion_laws.json b/strings/ion_laws.json index d4b08d2a86..f91dc52cdc 100644 --- a/strings/ion_laws.json +++ b/strings/ion_laws.json @@ -765,7 +765,6 @@ "THIRTEEN SEQUELS", "THREE WISHES", "A SITCOM", - "THAT GRIEFING FAGGOT GEORGE MELONS", "FAT GIRLS ON BICYCLES", "SOMEBODY TO PUT YOU OUT OF YOUR MISERY", "HEROES IN A HALF SHELL", diff --git a/strings/rt/outlawaggrolines.txt b/strings/rt/outlawaggrolines.txt new file mode 100644 index 0000000000..85ff26bffc --- /dev/null +++ b/strings/rt/outlawaggrolines.txt @@ -0,0 +1,7 @@ +I´M TAKING EVERYTHING! +Haha! Fool! +Gettem lads! +NOW LADS!! +CUT THEIR THROAT! +RIP OUT THEIR GUTS! +Better you than me! \ No newline at end of file diff --git a/strings/rt/outlawlines.txt b/strings/rt/outlawlines.txt new file mode 100644 index 0000000000..45dabb6285 --- /dev/null +++ b/strings/rt/outlawlines.txt @@ -0,0 +1,21 @@ +I hate this place. +Gucking richfolk. +I heard the Lord is going to run away. +Give me money... +I hate that guy. +Worthless town. +Worthless life. +I wish I was home. They were supposed to protect us. +I don't remember. +I'm going to wish for your health next time I see a shooting star. +Oh god, their faces... +So much blood, nothing but pain and blood... +I can't go to sleep. I don't know how to shut my eyes. +My eyes are open. +You can count on it, friend o' mine. +Raining again... +You are a dog. You will die like one too. +I'm only joking. Have a laugh with me. +Another rainy afternoon... +Fog? +The fog. diff --git a/strings/steppe_replacement.json b/strings/steppe_replacement.json new file mode 100644 index 0000000000..af158b4a64 --- /dev/null +++ b/strings/steppe_replacement.json @@ -0,0 +1,15 @@ +{ + "steppe": { + "yes i": "ya i", + "yes t": "ya t", + "yes h": "ya h", + "yes p": "ya p", + "no t": "nai t", + "no c": "nai c", + "no h": "nai h", + "th": "t", + "sh": "zh", + "hello": "saim bainoo", + "goodbye": "bayarlaa" + } +} diff --git a/strings/tiefling_replacement.json b/strings/tiefling_replacement.json new file mode 100644 index 0000000000..138eac286c --- /dev/null +++ b/strings/tiefling_replacement.json @@ -0,0 +1,18 @@ +{ + + "tiefling": { + "thi": "thee", + "s": "ss", + "r": "rr", + "fish": "feesh", + "ish": "eesh", + "is": "es", + "in": "en" + +} + +} + + + + diff --git a/strings/traumas.json b/strings/traumas.json index 77c331ce65..69b4287b85 100644 --- a/strings/traumas.json +++ b/strings/traumas.json @@ -3,7 +3,6 @@ "@pick(semicolon)IM A PONY NEEEEEEIIIIIIIIIGH", "without oxigen blob don't evoluate?", "@pick(semicolon)CAPTAINS A COMDOM", - "@pick(semicolon)@pick(faggot_traitor) @pick(george) @pick(mellens) is grifing me HALP!!!", "can u give me @pick(mutations)?", "THe saiyans screwed", "Bi is THE BEST OF BOTH WORLDS>", @@ -92,11 +91,6 @@ "mwrlins" ], - "faggot_traitor": [ - "", - "that faggot traitor" - ], - "random_gibberish": [ "g", "squid", @@ -137,14 +131,14 @@ "deth squads", "bleb" ], - + "bug": [ "", "IS TIS A BUG??", "SI IST A BUGG/", "BUG!!!" ], - + "semicolon": [ "", ";", diff --git a/tools/UpdatePaths/Scripts/70060_hats_repath.txt b/tools/UpdatePaths/Scripts/70060_hats_repath.txt index 97b9d40c0a..aa7f6fbc9f 100644 --- a/tools/UpdatePaths/Scripts/70060_hats_repath.txt +++ b/tools/UpdatePaths/Scripts/70060_hats_repath.txt @@ -106,7 +106,6 @@ /obj/item/clothing/head/bandana/armored : /obj/item/clothing/head/costume/pirate/bandana/armored {@OLD} /obj/item/clothing/head/clownmitre : /obj/item/clothing/head/chaplain/clownmitre {@OLD} /obj/item/clothing/head/kippah : /obj/item/clothing/head/chaplain/kippah {@OLD} -/obj/item/clothing/head/medievaljewhat : /obj/item/clothing/head/chaplain/medievaljewhat {@OLD} /obj/item/clothing/head/taqiyahwhite : /obj/item/clothing/head/chaplain/taqiyah/white {@OLD} /obj/item/clothing/head/taqiyahred : /obj/item/clothing/head/chaplain/taqiyah/red {@OLD} /obj/item/clothing/head/sombrero : /obj/item/clothing/head/costume/sombrero {@OLD} diff --git a/tools/UpdatePaths/Scripts/71871_syndicate_basicmob.txt b/tools/UpdatePaths/Scripts/71871_syndicate_basicmob.txt deleted file mode 100644 index 11186a8f55..0000000000 --- a/tools/UpdatePaths/Scripts/71871_syndicate_basicmob.txt +++ /dev/null @@ -1,6 +0,0 @@ -#comment Repaths simpleanimal syndicates to basicmob syndicates and deletes mecha pilots and civilians - -/mob/living/simple_animal/hostile/syndicate/mecha_pilot : @DELETE -/mob/living/simple_animal/hostile/syndicate/civilian : @DELETE -/mob/living/simple_animal/hostile/syndicate/@SUBTYPES : /mob/living/basic/syndicate/@SUBTYPES{@OLD} -/mob/living/simple_animal/hostile/viscerator : /mob/living/basic/viscerator{@OLD} \ No newline at end of file diff --git a/tools/tgs_scripts/PreCompile.bat b/tools/tgs_scripts/PreCompile.bat index ce7572c9ef..afcee99ca6 100644 --- a/tools/tgs_scripts/PreCompile.bat +++ b/tools/tgs_scripts/PreCompile.bat @@ -4,8 +4,8 @@ set TG_BOOTSTRAP_CACHE=%cd% IF NOT %1 == "" ( rem TGS4+: we are passed the game directory on the command line cd %1 -) ELSE IF EXIST "..\Game\B\tgstation.dmb" ( - rem TGS3: Game/B/tgstation.dmb exists, so build in Game/A +) ELSE IF EXIST "..\Game\B\stonekeep.dmb" ( + rem TGS3: Game/B/stonekeep.dmb exists, so build in Game/A cd ..\Game\A ) ELSE ( rem TGS3: Otherwise build in Game/B